index.html 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. <html>
  2. <script src="./packages/intersect/dist/cdn.js" defer></script>
  3. <script src="./packages/morph/dist/cdn.js" defer></script>
  4. <script src="./packages/history/dist/cdn.js"></script>
  5. <script src="./packages/persist/dist/cdn.js"></script>
  6. <script src="./packages/focus/dist/cdn.js"></script>
  7. <script src="./packages/mask/dist/cdn.js"></script>
  8. <script src="./packages/ui/dist/cdn.js" defer></script>
  9. <script src="./packages/alpinejs/dist/cdn.js" defer></script>
  10. <script src="//cdn.tailwindcss.com"></script>
  11. <!-- <script src="https://cdn.jsdelivr.net/npm/alpinejs@3.0.0/dist/cdn.min.js" defer></script> -->
  12. <!-- <div x-data="{ value: null }">
  13. Value: <span x-text="value"></span>
  14. <button @click="value = 'bar'">Change value</button>
  15. <div x-listbox x-model="value">
  16. <button x-listbox:button>toggle</button>
  17. <ul x-listbox:options>
  18. <li x-listbox:option value="foo" :class="$listboxOption.isSelected ? 'font-semibold' : 'font-normal'">Foo</li>
  19. <li x-listbox:option value="bar" :class="$listboxOption.isSelected ? 'font-semibold' : 'font-normal'">Bar</li>
  20. <li x-listbox:option value="baz" :class="$listboxOption.isSelected ? 'font-semibold' : 'font-normal'">Baz</li>
  21. </ul>
  22. </div>
  23. </div> -->
  24. <!-- <div
  25. x-data="{ selected: undefined, people: [
  26. { id: 1, name: 'Wade Cooper', foo: { bar: 'baz' } },
  27. { id: 2, name: 'Arlene Mccoy' },
  28. { id: 3, name: 'Devon Webb' },
  29. { id: 4, name: 'Tom Cook' },
  30. { id: 5, name: 'Tanya Fox', disabled: true },
  31. { id: 6, name: 'Hellen Schmidt' },
  32. { id: 7, name: 'Caroline Schultz' },
  33. { id: 8, name: 'Mason Heaney' },
  34. { id: 9, name: 'Claudie Smitham' },
  35. { id: 10, name: 'Emil Schaefer' },
  36. ]}"
  37. class="flex justify-center w-screen h-full p-12 bg-gray-50"
  38. >
  39. <button @click="selected = people[1]">Change value</button>
  40. <button @click="
  41. people.sort((a, b) => a.name > b.name ? 1 : -1)
  42. ">Reorder</button>
  43. <button @click="
  44. people = people.filter(i => i.name !== 'Arlene Mccoy')
  45. ">Destroy item</button>
  46. <div class="w-full max-w-xs mx-auto">
  47. <div x-listbox name="something" x-model="selected" class="space-y-1">
  48. <label x-listbox:label class="block text-sm font-medium leading-5 text-gray-700 mb-1">
  49. Assigned to
  50. </label>
  51. <div class="relative">
  52. <span class="inline-block w-full rounded-md shadow-sm">
  53. <button x-listbox:button class="relative w-full py-2 pl-3 pr-10 text-left transition duration-150 ease-in-out bg-white border border-gray-300 rounded-md cursor-default focus:outline-none focus:shadow-outline-blue focus:border-blue-300 sm:text-sm sm:leading-5">
  54. <span class="block truncate" x-text="selected ? selected.name : 'Select Person'"></span>
  55. <span class="absolute inset-y-0 right-0 flex items-center pr-2 pointer-events-none">
  56. <svg class="w-5 h-5 text-gray-400" viewBox="0 0 20 20" fill="none" stroke="currentColor">
  57. <path d="M7 7l3-3 3 3m0 6l-3 3-3-3" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" />
  58. </svg>
  59. </span>
  60. </button>
  61. </span>
  62. <div class="absolute w-full mt-1 bg-white rounded-md shadow-lg">
  63. <ul x-listbox:options class="py-1 overflow-auto text-base leading-6 rounded-md shadow-xs max-h-60 focus:outline-none sm:text-sm sm:leading-5">
  64. <template x-for="person in people" :key="person.id">
  65. <li
  66. x-listbox:option :value="person"
  67. class="relative py-2 pl-3 cursor-default select-none pr-9 focus:outline-none"
  68. :disabled="person.disabled"
  69. :class="[$listboxOption.isActive ? 'text-white bg-indigo-600' : 'text-gray-900', person.disabled && 'bg-gray-50 text-gray-300'].filter(Boolean)"
  70. >
  71. <span class="block truncate" :class="$listboxOption.isSelected ? 'font-semibold' : 'font-normal'" x-text="person.name"></span>
  72. <span
  73. x-show="$listboxOption.isSelected"
  74. class="absolute inset-y-0 right-0 flex items-center pr-4"
  75. :class="$listboxOption.isActive ? 'text-white' : 'text-indigo-600'"
  76. >
  77. <svg class="w-5 h-5" viewbox="0 0 20 20" fill="currentColor">
  78. <path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
  79. </svg>
  80. </span>
  81. </li>
  82. </template>
  83. </ul>
  84. </div>
  85. </div>
  86. </div>
  87. </div>
  88. </div> -->
  89. <!-- MULTIPLE: -->
  90. <div
  91. x-data="{ selected: [], people: [
  92. { id: 1, name: 'Wade Cooper' },
  93. { id: 2, name: 'Arlene Mccoy' },
  94. { id: 3, name: 'Devon Webb' },
  95. { id: 4, name: 'Tom Cook' },
  96. { id: 5, name: 'Tanya Fox', disabled: true },
  97. { id: 6, name: 'Hellen Schmidt' },
  98. { id: 7, name: 'Caroline Schultz' },
  99. { id: 8, name: 'Mason Heaney' },
  100. { id: 9, name: 'Claudie Smitham' },
  101. { id: 10, name: 'Emil Schaefer' },
  102. ]}"
  103. class="flex justify-center w-screen h-full p-12 bg-gray-50"
  104. >
  105. <div class="w-full max-w-xs mx-auto">
  106. <button @click="selected.push(people[1])">Change value</button>
  107. <button @click="
  108. people.sort((a, b) => a.name > b.name ? 1 : -1)
  109. ">Reorder</button>
  110. <button @click="
  111. people = people.filter(i => i.name !== 'Arlene Mccoy')
  112. ">Destroy item</button>
  113. <div x-listbox name="people" multiple class="space-y-1">
  114. <label x-listbox:label class="block text-sm font-medium leading-5 text-gray-700 mb-1">
  115. Assigned to
  116. </label>
  117. <div class="relative">
  118. <span class="inline-block w-full rounded-md shadow-sm">
  119. <button x-listbox:button class="relative w-full py-2 pl-3 pr-10 text-left transition duration-150 ease-in-out bg-white border border-gray-300 rounded-md cursor-default focus:outline-none focus:shadow-outline-blue focus:border-blue-300 sm:text-sm sm:leading-5">
  120. <span class="block truncate" x-text="selected.length > 0 ? selected.map(i => i.name).join(', ') : 'Select Person'"></span>
  121. <span class="absolute inset-y-0 right-0 flex items-center pr-2 pointer-events-none">
  122. <svg class="w-5 h-5 text-gray-400" viewBox="0 0 20 20" fill="none" stroke="currentColor">
  123. <path d="M7 7l3-3 3 3m0 6l-3 3-3-3" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" />
  124. </svg>
  125. </span>
  126. </button>
  127. </span>
  128. <div class="absolute w-full mt-1 bg-white rounded-md shadow-lg">
  129. <div x-show="$listbox.isOpen">
  130. wrapper
  131. <ul x-listbox:options static class="py-1 overflow-auto text-base leading-6 rounded-md shadow-xs max-h-60 focus:outline-none sm:text-sm sm:leading-5">
  132. <template x-for="person in people" :key="person.id">
  133. <li
  134. x-listbox:option :value="person"
  135. class="relative py-2 pl-3 cursor-default select-none pr-9 focus:outline-none"
  136. :disabled="person.disabled"
  137. :class="[$listboxOption.isActive ? 'text-white bg-indigo-600' : 'text-gray-900', person.disabled && 'bg-gray-50 text-gray-300'].filter(Boolean)"
  138. >
  139. <span class="block truncate" :class="$listboxOption.isSelected ? 'font-semibold' : 'font-normal'" x-text="person.name"></span>
  140. <span
  141. x-show="$listboxOption.isSelected"
  142. class="absolute inset-y-0 right-0 flex items-center pr-4"
  143. :class="$listboxOption.isActive ? 'text-white' : 'text-indigo-600'"
  144. >
  145. <svg class="w-5 h-5" viewbox="0 0 20 20" fill="currentColor">
  146. <path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
  147. </svg>
  148. </span>
  149. </li>
  150. </template>
  151. </ul>
  152. </div>
  153. </div>
  154. </div>
  155. </div>
  156. </div>
  157. </div>
  158. </html>