solid-ui 3.1.3-10 → 3.1.3-12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (261) hide show
  1. package/README.md +2 -0
  2. package/dist/_virtual/~icons/svg-spinners/3-dots-fade.cjs.js +2 -0
  3. package/dist/_virtual/~icons/svg-spinners/3-dots-fade.cjs.js.map +1 -0
  4. package/dist/_virtual/~icons/svg-spinners/3-dots-fade.esm.js +11 -0
  5. package/dist/_virtual/~icons/svg-spinners/3-dots-fade.esm.js.map +1 -0
  6. package/dist/chunks/{DialogProvider-CrvbR_fd.js → DialogProvider-ge2aA77F.js} +3 -3
  7. package/dist/chunks/DialogProvider-ge2aA77F.js.map +1 -0
  8. package/dist/chunks/{account-Ma2Ipfjx.js → account-Bb818bGF.js} +21 -16
  9. package/dist/chunks/account-Bb818bGF.js.map +1 -0
  10. package/dist/chunks/{auth-BI22fz6P.js → auth-ClVI18ss.js} +93 -82
  11. package/dist/chunks/auth-ClVI18ss.js.map +1 -0
  12. package/dist/chunks/{avatar-DN7FzC2N.js → avatar-DGu_PX5y.js} +13 -5
  13. package/dist/chunks/avatar-DGu_PX5y.js.map +1 -0
  14. package/dist/chunks/{button-DHahwxqn.js → button-B9-nlEpz.js} +3 -3
  15. package/dist/chunks/{button-DHahwxqn.js.map → button-B9-nlEpz.js.map} +1 -1
  16. package/dist/chunks/combobox-DrT0Nb-A.js +734 -0
  17. package/dist/chunks/combobox-DrT0Nb-A.js.map +1 -0
  18. package/dist/chunks/{combobox-option-DB6KGb7o.js → combobox-option-DxJvAZ_Q.js} +2 -2
  19. package/dist/chunks/{combobox-option-DB6KGb7o.js.map → combobox-option-DxJvAZ_Q.js.map} +1 -1
  20. package/dist/chunks/{components-DH1slGZY.js → components-PQfnwrHI.js} +10 -10
  21. package/dist/chunks/components-PQfnwrHI.js.map +1 -0
  22. package/dist/chunks/{context-CA1Kq0FW.js → context-B_xwK-Y_.js} +2 -2
  23. package/dist/chunks/{context-CA1Kq0FW.js.map → context-B_xwK-Y_.js.map} +1 -1
  24. package/dist/chunks/{dialog-content-B3I3H7hj.js → dialog-content-CEITrC59.js} +2 -2
  25. package/dist/chunks/{dialog-content-B3I3H7hj.js.map → dialog-content-CEITrC59.js.map} +1 -1
  26. package/dist/chunks/{dialog-footer-BjcYeVhg.js → dialog-footer-DVLEK5bU.js} +2 -2
  27. package/dist/chunks/{dialog-footer-BjcYeVhg.js.map → dialog-footer-DVLEK5bU.js.map} +1 -1
  28. package/dist/chunks/{dialog-header-BynEzovK.js → dialog-header-kEWl21oD.js} +2 -2
  29. package/dist/chunks/{dialog-header-BynEzovK.js.map → dialog-header-kEWl21oD.js.map} +1 -1
  30. package/dist/chunks/{dialog-YaqTwAtR.js → dialog-kyHgc-uy.js} +5 -5
  31. package/dist/chunks/{dialog-YaqTwAtR.js.map → dialog-kyHgc-uy.js.map} +1 -1
  32. package/dist/chunks/{dialogs-root-B61LtZks.js → dialogs-root-dPGfuzSZ.js} +3 -3
  33. package/dist/chunks/{dialogs-root-B61LtZks.js.map → dialogs-root-dPGfuzSZ.js.map} +1 -1
  34. package/dist/chunks/{guard-YhbCPY-V.js → guard-DEqOFEs4.js} +79 -53
  35. package/dist/chunks/guard-DEqOFEs4.js.map +1 -0
  36. package/dist/chunks/{input-CVKu3XRI.js → input-BjCX2bFe.js} +8 -8
  37. package/dist/chunks/input-BjCX2bFe.js.map +1 -0
  38. package/dist/chunks/{login-button-76PlEs2Y.js → login-button-Czm-E9Na.js} +5 -5
  39. package/dist/chunks/{login-button-76PlEs2Y.js.map → login-button-Czm-E9Na.js.map} +1 -1
  40. package/dist/chunks/{logout-button-Dt3Utgj0.js → logout-button-BrR_jOhK.js} +5 -5
  41. package/dist/chunks/{logout-button-Dt3Utgj0.js.map → logout-button-BrR_jOhK.js.map} +1 -1
  42. package/dist/chunks/{menu-6ayNsxFG.js → menu-1PG19fCC.js} +4 -4
  43. package/dist/chunks/{menu-6ayNsxFG.js.map → menu-1PG19fCC.js.map} +1 -1
  44. package/dist/chunks/{menu-item-Ckl9f1rG.js → menu-item-C9uErV38.js} +72 -55
  45. package/dist/chunks/menu-item-C9uErV38.js.map +1 -0
  46. package/dist/chunks/{provider-BfO67dzy.js → provider-qd_4VaKB.js} +8 -5
  47. package/dist/chunks/provider-qd_4VaKB.js.map +1 -0
  48. package/dist/chunks/{select-DHFgELMJ.js → select-OM-SgY4K.js} +101 -66
  49. package/dist/chunks/select-OM-SgY4K.js.map +1 -0
  50. package/dist/chunks/{select-option-Duk4S4Sc.js → select-option-pVhYlXrt.js} +2 -2
  51. package/dist/chunks/{select-option-Duk4S4Sc.js.map → select-option-pVhYlXrt.js.map} +1 -1
  52. package/dist/chunks/{signup-button-B10K6b8A.js → signup-button-BnA5p-uJ.js} +5 -5
  53. package/dist/chunks/{signup-button-B10K6b8A.js.map → signup-button-BnA5p-uJ.js.map} +1 -1
  54. package/dist/chunks/{solid-emblem-DgBJk5Th.js → solid-emblem-D2clBuKZ.js} +2 -2
  55. package/dist/chunks/{solid-emblem-DgBJk5Th.js.map → solid-emblem-D2clBuKZ.js.map} +1 -1
  56. package/dist/chunks/{src-CdZhCYdF.js → src-DJOb1wMf.js} +3 -3
  57. package/dist/chunks/{src-CdZhCYdF.js.map → src-DJOb1wMf.js.map} +1 -1
  58. package/dist/components/account/Account.cjs.js +6 -4
  59. package/dist/components/account/Account.cjs.js.map +1 -1
  60. package/dist/components/account/Account.d.ts +2 -0
  61. package/dist/components/account/Account.d.ts.map +1 -1
  62. package/dist/components/account/Account.esm.js +10 -4
  63. package/dist/components/account/Account.esm.js.map +1 -1
  64. package/dist/components/account/Account.stories.d.ts +10 -2
  65. package/dist/components/account/Account.stories.d.ts.map +1 -1
  66. package/dist/components/account/Account.styles.cjs.js +1 -1
  67. package/dist/components/account/Account.styles.cjs.js.map +1 -1
  68. package/dist/components/account/Account.styles.esm.js +1 -1
  69. package/dist/components/account/Account.styles.esm.js.map +1 -1
  70. package/dist/components/account.js +1 -1
  71. package/dist/components/all.cjs.js +1 -0
  72. package/dist/components/all.d.ts +2 -0
  73. package/dist/components/all.d.ts.map +1 -0
  74. package/dist/components/all.esm.js +24 -0
  75. package/dist/components/avatar/Avatar.cjs.js +1 -1
  76. package/dist/components/avatar/Avatar.cjs.js.map +1 -1
  77. package/dist/components/avatar/Avatar.d.ts +3 -0
  78. package/dist/components/avatar/Avatar.d.ts.map +1 -1
  79. package/dist/components/avatar/Avatar.esm.js +9 -1
  80. package/dist/components/avatar/Avatar.esm.js.map +1 -1
  81. package/dist/components/avatar/Avatar.stories.d.ts +4 -4
  82. package/dist/components/avatar.js +1 -1
  83. package/dist/components/button/Button.styles.cjs.js +1 -1
  84. package/dist/components/button/Button.styles.cjs.js.map +1 -1
  85. package/dist/components/button/Button.styles.esm.js +1 -1
  86. package/dist/components/button/Button.styles.esm.js.map +1 -1
  87. package/dist/components/button.js +1 -1
  88. package/dist/components/combobox/Combobox.cjs.js +21 -21
  89. package/dist/components/combobox/Combobox.cjs.js.map +1 -1
  90. package/dist/components/combobox/Combobox.d.ts +30 -3
  91. package/dist/components/combobox/Combobox.d.ts.map +1 -1
  92. package/dist/components/combobox/Combobox.esm.js +268 -107
  93. package/dist/components/combobox/Combobox.esm.js.map +1 -1
  94. package/dist/components/combobox/Combobox.stories.d.ts +54 -0
  95. package/dist/components/combobox/Combobox.stories.d.ts.map +1 -1
  96. package/dist/components/combobox/Combobox.styles.cjs.js +1 -1
  97. package/dist/components/combobox/Combobox.styles.cjs.js.map +1 -1
  98. package/dist/components/combobox/Combobox.styles.esm.js +1 -1
  99. package/dist/components/combobox/Combobox.styles.esm.js.map +1 -1
  100. package/dist/components/combobox/index.cjs.js +1 -1
  101. package/dist/components/combobox/index.cjs.js.map +1 -1
  102. package/dist/components/combobox/index.d.ts +1 -0
  103. package/dist/components/combobox/index.d.ts.map +1 -1
  104. package/dist/components/combobox/index.esm.js +3 -3
  105. package/dist/components/combobox/index.esm.js.map +1 -1
  106. package/dist/components/combobox-option.js +1 -1
  107. package/dist/components/combobox.js +2 -2
  108. package/dist/components/dialog-content.js +1 -1
  109. package/dist/components/dialog-footer.js +1 -1
  110. package/dist/components/dialog-header.js +1 -1
  111. package/dist/components/dialog-provider/DialogProvider.cjs.js.map +1 -1
  112. package/dist/components/dialog-provider/DialogProvider.d.ts +2 -1
  113. package/dist/components/dialog-provider/DialogProvider.d.ts.map +1 -1
  114. package/dist/components/dialog-provider/DialogProvider.esm.js.map +1 -1
  115. package/dist/components/dialog-provider.js +1 -1
  116. package/dist/components/dialog.js +1 -1
  117. package/dist/components/dialogs-root.js +1 -1
  118. package/dist/components/guard/Guard.cjs.js +4 -2
  119. package/dist/components/guard/Guard.cjs.js.map +1 -1
  120. package/dist/components/guard/Guard.d.ts +7 -0
  121. package/dist/components/guard/Guard.d.ts.map +1 -1
  122. package/dist/components/guard/Guard.esm.js +74 -48
  123. package/dist/components/guard/Guard.esm.js.map +1 -1
  124. package/dist/components/guard/Guard.stories.d.ts +14 -3
  125. package/dist/components/guard/Guard.stories.d.ts.map +1 -1
  126. package/dist/components/guard.js +1 -1
  127. package/dist/components/index.cjs.js +1 -1
  128. package/dist/components/index.d.ts +0 -1
  129. package/dist/components/index.d.ts.map +1 -1
  130. package/dist/components/index.esm.js +1 -24
  131. package/dist/components/input/Input.cjs.js +5 -5
  132. package/dist/components/input/Input.cjs.js.map +1 -1
  133. package/dist/components/input/Input.d.ts +1 -1
  134. package/dist/components/input/Input.d.ts.map +1 -1
  135. package/dist/components/input/Input.esm.js +7 -7
  136. package/dist/components/input/Input.esm.js.map +1 -1
  137. package/dist/components/input.js +1 -1
  138. package/dist/components/login-button.js +1 -1
  139. package/dist/components/login-modal.js +1 -1
  140. package/dist/components/logout-button.js +1 -1
  141. package/dist/components/menu/Menu.cjs.js +1 -1
  142. package/dist/components/menu/Menu.cjs.js.map +1 -1
  143. package/dist/components/menu/Menu.esm.js +1 -1
  144. package/dist/components/menu/Menu.esm.js.map +1 -1
  145. package/dist/components/menu/Menu.stories.d.ts.map +1 -1
  146. package/dist/components/menu/Menu.styles.cjs.js +1 -1
  147. package/dist/components/menu/Menu.styles.cjs.js.map +1 -1
  148. package/dist/components/menu/Menu.styles.esm.js +1 -1
  149. package/dist/components/menu/Menu.styles.esm.js.map +1 -1
  150. package/dist/components/menu-item/MenuItem.cjs.js +4 -4
  151. package/dist/components/menu-item/MenuItem.cjs.js.map +1 -1
  152. package/dist/components/menu-item/MenuItem.d.ts +1 -0
  153. package/dist/components/menu-item/MenuItem.d.ts.map +1 -1
  154. package/dist/components/menu-item/MenuItem.esm.js +72 -55
  155. package/dist/components/menu-item/MenuItem.esm.js.map +1 -1
  156. package/dist/components/menu-item/MenuItem.styles.cjs.js +1 -1
  157. package/dist/components/menu-item/MenuItem.styles.cjs.js.map +1 -1
  158. package/dist/components/menu-item/MenuItem.styles.esm.js +1 -1
  159. package/dist/components/menu-item/MenuItem.styles.esm.js.map +1 -1
  160. package/dist/components/menu-item.js +1 -1
  161. package/dist/components/menu.js +1 -1
  162. package/dist/components/provider/Provider.cjs.js +1 -1
  163. package/dist/components/provider/Provider.cjs.js.map +1 -1
  164. package/dist/components/provider/Provider.d.ts +3 -1
  165. package/dist/components/provider/Provider.d.ts.map +1 -1
  166. package/dist/components/provider/Provider.esm.js +3 -0
  167. package/dist/components/provider/Provider.esm.js.map +1 -1
  168. package/dist/components/provider.js +1 -1
  169. package/dist/components/select/Select.cjs.js +7 -6
  170. package/dist/components/select/Select.cjs.js.map +1 -1
  171. package/dist/components/select/Select.d.ts +12 -2
  172. package/dist/components/select/Select.d.ts.map +1 -1
  173. package/dist/components/select/Select.esm.js +96 -65
  174. package/dist/components/select/Select.esm.js.map +1 -1
  175. package/dist/components/select/index.cjs.js.map +1 -1
  176. package/dist/components/select/index.d.ts +1 -0
  177. package/dist/components/select/index.d.ts.map +1 -1
  178. package/dist/components/select/index.esm.js.map +1 -1
  179. package/dist/components/select-option.js +1 -1
  180. package/dist/components/select.js +1 -1
  181. package/dist/components/signup-button.js +1 -1
  182. package/dist/components/solid-emblem.js +1 -1
  183. package/dist/components.js +22 -22
  184. package/dist/index.cjs.js +1 -1
  185. package/dist/index.cjs.js.map +1 -1
  186. package/dist/index.esm.js +2 -2
  187. package/dist/index.js +6 -6
  188. package/dist/lib/auth/NoopAuth.cjs.js +1 -1
  189. package/dist/lib/auth/NoopAuth.cjs.js.map +1 -1
  190. package/dist/lib/auth/NoopAuth.d.ts +2 -2
  191. package/dist/lib/auth/NoopAuth.d.ts.map +1 -1
  192. package/dist/lib/auth/NoopAuth.esm.js +2 -3
  193. package/dist/lib/auth/NoopAuth.esm.js.map +1 -1
  194. package/dist/lib/auth/SolidAuth.cjs.js +1 -1
  195. package/dist/lib/auth/SolidAuth.cjs.js.map +1 -1
  196. package/dist/lib/auth/SolidAuth.d.ts +6 -0
  197. package/dist/lib/auth/SolidAuth.d.ts.map +1 -1
  198. package/dist/lib/auth/SolidAuth.esm.js +28 -16
  199. package/dist/lib/auth/SolidAuth.esm.js.map +1 -1
  200. package/dist/lib/auth/context.cjs.js.map +1 -1
  201. package/dist/lib/auth/context.d.ts +2 -0
  202. package/dist/lib/auth/context.d.ts.map +1 -1
  203. package/dist/lib/auth/context.esm.js.map +1 -1
  204. package/dist/lib/components/index.cjs.js +1 -1
  205. package/dist/lib/components/index.esm.js +2 -2
  206. package/dist/lib/components/traits/FormControlTrait.cjs.js +2 -0
  207. package/dist/lib/components/traits/FormControlTrait.cjs.js.map +1 -0
  208. package/dist/lib/components/traits/{InputTrait.d.ts → FormControlTrait.d.ts} +10 -11
  209. package/dist/lib/components/traits/FormControlTrait.d.ts.map +1 -0
  210. package/dist/lib/components/traits/FormControlTrait.esm.js +45 -0
  211. package/dist/lib/components/traits/FormControlTrait.esm.js.map +1 -0
  212. package/dist/lib/components/traits/index.cjs.js +1 -1
  213. package/dist/lib/components/traits/index.d.ts +2 -2
  214. package/dist/lib/components/traits/index.d.ts.map +1 -1
  215. package/dist/lib/components/traits/index.esm.js +2 -2
  216. package/dist/lib/components/web-component/WebComponent.cjs.js.map +1 -1
  217. package/dist/lib/components/web-component/WebComponent.d.ts +2 -2
  218. package/dist/lib/components/web-component/WebComponent.d.ts.map +1 -1
  219. package/dist/lib/components/web-component/WebComponent.esm.js.map +1 -1
  220. package/dist/lib/timing.cjs.js +2 -0
  221. package/dist/lib/timing.cjs.js.map +1 -0
  222. package/dist/lib/timing.d.ts +6 -0
  223. package/dist/lib/timing.d.ts.map +1 -0
  224. package/dist/lib/timing.esm.js +13 -0
  225. package/dist/lib/timing.esm.js.map +1 -0
  226. package/dist/lib/values.cjs.js +2 -0
  227. package/dist/lib/values.cjs.js.map +1 -0
  228. package/dist/lib/values.d.ts +2 -0
  229. package/dist/lib/values.d.ts.map +1 -0
  230. package/dist/lib/values.esm.js +8 -0
  231. package/dist/lib/values.esm.js.map +1 -0
  232. package/dist/loader.js +6 -6
  233. package/dist/solid-ui.js +114 -109
  234. package/dist/solid-ui.min.js +114 -109
  235. package/dist/solid-ui.min.js.map +1 -1
  236. package/dist/storybook/auth/StorybookAuth.d.ts +1 -0
  237. package/dist/storybook/auth/StorybookAuth.d.ts.map +1 -1
  238. package/dist/storybook/components/StorybookProvider.d.ts +3 -1
  239. package/dist/storybook/components/StorybookProvider.d.ts.map +1 -1
  240. package/dist/storybook/helpers.d.ts.map +1 -1
  241. package/dist/storybook/stubs.d.ts +7 -3
  242. package/dist/storybook/stubs.d.ts.map +1 -1
  243. package/dist/theme.css +1 -1
  244. package/package.json +2 -1
  245. package/dist/chunks/DialogProvider-CrvbR_fd.js.map +0 -1
  246. package/dist/chunks/account-Ma2Ipfjx.js.map +0 -1
  247. package/dist/chunks/auth-BI22fz6P.js.map +0 -1
  248. package/dist/chunks/avatar-DN7FzC2N.js.map +0 -1
  249. package/dist/chunks/combobox-BWOPh9dj.js +0 -474
  250. package/dist/chunks/combobox-BWOPh9dj.js.map +0 -1
  251. package/dist/chunks/components-DH1slGZY.js.map +0 -1
  252. package/dist/chunks/guard-YhbCPY-V.js.map +0 -1
  253. package/dist/chunks/input-CVKu3XRI.js.map +0 -1
  254. package/dist/chunks/menu-item-Ckl9f1rG.js.map +0 -1
  255. package/dist/chunks/provider-BfO67dzy.js.map +0 -1
  256. package/dist/chunks/select-DHFgELMJ.js.map +0 -1
  257. package/dist/lib/components/traits/InputTrait.cjs.js +0 -2
  258. package/dist/lib/components/traits/InputTrait.cjs.js.map +0 -1
  259. package/dist/lib/components/traits/InputTrait.d.ts.map +0 -1
  260. package/dist/lib/components/traits/InputTrait.esm.js +0 -45
  261. package/dist/lib/components/traits/InputTrait.esm.js.map +0 -1
@@ -1,5 +1,5 @@
1
- const e=require("../../lib/components/decorators.cjs.js"),t=require("../../lib/components/web-component/WebComponent.cjs.js"),n=require("../../lib/components/traits/InputTrait.cjs.js");require("../../lib/components/index.cjs.js"),require("../../_virtual/~icons/lucide/chevron-down.cjs.js");const r=require("./Combobox.styles.cjs.js");let i=require("lit"),a=require("lit/decorators.js");require("@awesome.me/webawesome/dist/components/popup/popup.js");var o,s,c,l,u,d,f,p,m,h,g,_,v,y,b,x,S,C,w,T,E,D,O,k,A,j,M,N,P,F,I,L,R,z;function B(e,t,n){V(e,t),t.set(e,n)}function V(e,t){if(t.has(e))throw TypeError(`Cannot initialize the same private elements twice on an object`)}function H(e,t,n){return e.set(W(e,t),n),n}function U(e,t){return e.get(W(e,t))}function W(e,t,n){if(typeof e==`function`?e===t:e.has(t))return arguments.length<3?t:n;throw TypeError(`Private element is not present on this object`)}function G(e,t,n){return(t=q(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function K(e,t,n,r,i,a){function o(e,t,n){return function(r,i){return n&&n(r),e[t].call(r,i)}}function s(e,t){for(var n=0;n<e.length;n++)e[n].call(t);return t}function c(e,t,n,r){if(typeof e!=`function`&&(r||e!==void 0))throw TypeError(t+` must `+(n||`be`)+` a function`+(r?``:` or undefined`));return e}function l(e,t,n,r,i,a,s,l,u,d,f,p,m){function h(e){if(!m(e))throw TypeError(`Attempted to access private element on non-instance`)}var g,_=t[0],v=t[3],y=!l;if(!y){n||Array.isArray(_)||(_=[_]);var b={},x=[],S=i===3?`get`:i===4||p?`set`:`value`;d?(f||p?b={get:Y(function(){return v(this)},r,`get`),set:function(e){t[4](this,e)}}:b[S]=v,f||Y(b[S],r,i===2?``:S)):f||(b=Object.getOwnPropertyDescriptor(e,r))}for(var C=e,w=_.length-1;w>=0;w-=n?2:1){var T=_[w],E=n?_[w-1]:void 0,D={},O={kind:[`field`,`accessor`,`method`,`getter`,`setter`,`class`][i],name:r,metadata:a,addInitializer:function(e,t){if(e.v)throw Error(`attempted to call addInitializer after decoration was finished`);c(t,`An initializer`,`be`,!0),s.push(t)}.bind(null,D)};try{if(y)(g=c(T.call(E,C,O),`class decorators`,`return`))&&(C=g);else{var k,A;O.static=u,O.private=d,d?i===2?k=function(e){return h(e),b.value}:(i<4&&(k=o(b,`get`,h)),i!==3&&(A=o(b,`set`,h))):(k=function(e){return e[r]},(i<2||i===4)&&(A=function(e,t){e[r]=t}));var j=O.access={has:d?m.bind():function(e){return r in e}};if(k&&(j.get=k),A&&(j.set=A),C=T.call(E,p?{get:b.get,set:b.set}:b[S],O),p){if(typeof C==`object`&&C)(g=c(C.get,`accessor.get`))&&(b.get=g),(g=c(C.set,`accessor.set`))&&(b.set=g),(g=c(C.init,`accessor.init`))&&x.push(g);else if(C!==void 0)throw TypeError(`accessor decorators must return an object with get, set, or init properties or void 0`)}else c(C,(f?`field`:`method`)+` decorators`,`return`)&&(f?x.push(C):b[S]=C)}}finally{D.v=!0}}return(f||p)&&l.push(function(e,t){for(var n=x.length-1;n>=0;n--)t=x[n].call(e,t);return t}),f||y||(d?p?l.push(o(b,`get`),o(b,`set`)):l.push(i===2?b[S]:o.call.bind(b[S])):Object.defineProperty(e,r,b)),C}function u(e,t){return Object.defineProperty(e,Symbol.metadata||Symbol.for(`Symbol.metadata`),{configurable:!0,enumerable:!0,value:t})}if(arguments.length>=6)var d=a[Symbol.metadata||Symbol.for(`Symbol.metadata`)];var f=Object.create(d??null),p=function(e,t,n,r){var i,a,o=[],c=function(t){return X(t)===e},u=new Map;function d(e){e&&o.push(s.bind(null,e))}for(var f=0;f<t.length;f++){var p=t[f];if(Array.isArray(p)){var m=p[1],h=p[2],g=p.length>3,_=16&m,v=!!(8&m),y=(m&=7)==0,b=h+`/`+v;if(!y&&!g){var x=u.get(b);if(!0===x||x===3&&m!==4||x===4&&m!==3)throw Error(`Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: `+h);u.set(b,!(m>2)||m)}l(v?e:e.prototype,p,_,g?`#`+h:q(h),m,r,v?a||=[]:i||=[],o,v,g,y,m===1,v&&g?c:n)}}return d(i),d(a),o}(e,t,i,f);return n.length||u(e,f),{e:p,get c(){var t=[];return n.length&&[u(l(e,[n],r,e.name,5,f,t),f),s.bind(null,t,e)]}}}function q(e){var t=J(e,`string`);return typeof t==`symbol`?t:t+``}function J(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function Y(e,t,n){typeof t==`symbol`&&(t=(t=t.description)?`[`+t+`]`:``);try{Object.defineProperty(e,"name",{configurable:!0,value:n?n+` `+t:t})}catch{}return e}function X(e){if(Object(e)!==e)throw TypeError(`right-hand side of 'in' should be an object, got `+(e===null?`null`:typeof e));return e}function Z(e){return e}y=[e.customElement(`solid-ui-combobox`)];var Q;new(R=(c=new WeakMap,l=new WeakMap,u=new WeakMap,d=new WeakMap,f=new WeakMap,p=new WeakMap,m=new WeakMap,h=new WeakMap,g=new WeakMap,z=(b=(0,a.property)({type:String,reflect:!0}),S=(0,a.property)({type:String,reflect:!0}),w=(0,a.property)({type:String}),E=(0,a.property)({type:String,reflect:!0}),O=(0,a.property)({type:Boolean,reflect:!0}),A=(0,a.query)(`input`),M=(0,a.state)(),P=(0,a.state)(),I=(0,a.state)(),`label`),s=class extends t.default{get[z](){return U(c,this)}set label(e){H(c,this,e)}get name(){return U(l,this)}set name(e){H(l,this,e)}get value(){return U(u,this)}set value(e){H(u,this,e)}get placeholder(){return U(d,this)}set placeholder(e){H(d,this,e)}get required(){return U(f,this)}set required(e){H(f,this,e)}get inputElement(){return U(p,this)}set inputElement(e){H(p,this,e)}get filter(){return U(m,this)}set filter(e){H(m,this,e)}get open(){return U(h,this)}set open(e){H(h,this,e)}get activeIndex(){return U(g,this)}set activeIndex(e){H(g,this,e)}constructor(){super(),B(this,c,(_(this),x(this,``))),B(this,l,C(this,``)),B(this,u,T(this,``)),B(this,d,D(this,``)),B(this,f,k(this,!1)),B(this,p,j(this,null)),B(this,m,N(this,``)),B(this,h,F(this,!1)),B(this,g,L(this,-1)),G(this,`inputTrait`,void 0),G(this,`openListenersAttached`,!1),G(this,`listboxId`,void 0),G(this,`handleDocumentFocusIn`,e=>{e.composedPath().includes(this)||this.hide()}),G(this,`handleDocumentMouseDown`,e=>{e.composedPath().includes(this)||this.hide()}),this.inputTrait=this.addTrait(new n.default(this,{getInputElement:()=>this.inputElement,getInternals:()=>this.getInternals(),onValueChanged:e=>{this.filter=e.toLowerCase();let t=this.getFilteredOptions();if(t.length===0){this.hide();return}this.open&&(this.activeIndex=this.getInitialActiveIndex(t))}})),this.listboxId=`listbox-${this.inputTrait.inputId}`}disconnectedCallback(){super.disconnectedCallback(),this.removeOpenListeners()}render(){let e=this.getFilteredOptions(),t=(this.open&&this.activeIndex>=0?e[this.activeIndex]:void 0)===void 0?void 0:this.getOptionId(this.activeIndex),n=this.placeholder||`Combobox`;return i.html`
2
- ${this.inputTrait.renderLabel()}
1
+ const e=require("../../lib/components/decorators.cjs.js"),t=require("../../lib/components/web-component/WebComponent.cjs.js"),n=require("../../lib/components/traits/FormControlTrait.cjs.js");require("../../lib/components/index.cjs.js"),require("../../_virtual/~icons/lucide/chevron-down.cjs.js");const r=require("../../lib/timing.cjs.js");require("../../_virtual/~icons/svg-spinners/3-dots-fade.cjs.js");const i=require("./Combobox.styles.cjs.js");let a=require("lit"),o=require("lit/decorators.js"),s=require("@lit/task");require("@awesome.me/webawesome/dist/components/popup/popup.js");var c,l,u,d,f,p,m,h,g,_,v,y,b,x,S,C,w,T,E,D,O,k,A,j,M,ee,te,ne,re,ie,ae,oe,N,P,F,I,L,R,z,B,V,H,U,W,G,K,q,se,ce,le,ue,de,fe,pe,me,he,ge,_e;function J(e,t,n){ve(e,t),t.set(e,n)}function ve(e,t){if(t.has(e))throw TypeError(`Cannot initialize the same private elements twice on an object`)}function Y(e,t,n){return e.set(ye(e,t),n),n}function X(e,t){return e.get(ye(e,t))}function ye(e,t,n){if(typeof e==`function`?e===t:e.has(t))return arguments.length<3?t:n;throw TypeError(`Private element is not present on this object`)}function Z(e,t,n){return(t=xe(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function be(e,t,n,r,i,a){function o(e,t,n){return function(r,i){return n&&n(r),e[t].call(r,i)}}function s(e,t){for(var n=0;n<e.length;n++)e[n].call(t);return t}function c(e,t,n,r){if(typeof e!=`function`&&(r||e!==void 0))throw TypeError(t+` must `+(n||`be`)+` a function`+(r?``:` or undefined`));return e}function l(e,t,n,r,i,a,s,l,u,d,f,p,m){function h(e){if(!m(e))throw TypeError(`Attempted to access private element on non-instance`)}var g,_=t[0],v=t[3],y=!l;if(!y){n||Array.isArray(_)||(_=[_]);var b={},x=[],S=i===3?`get`:i===4||p?`set`:`value`;d?(f||p?b={get:Ce(function(){return v(this)},r,`get`),set:function(e){t[4](this,e)}}:b[S]=v,f||Ce(b[S],r,i===2?``:S)):f||(b=Object.getOwnPropertyDescriptor(e,r))}for(var C=e,w=_.length-1;w>=0;w-=n?2:1){var T=_[w],E=n?_[w-1]:void 0,D={},O={kind:[`field`,`accessor`,`method`,`getter`,`setter`,`class`][i],name:r,metadata:a,addInitializer:function(e,t){if(e.v)throw Error(`attempted to call addInitializer after decoration was finished`);c(t,`An initializer`,`be`,!0),s.push(t)}.bind(null,D)};try{if(y)(g=c(T.call(E,C,O),`class decorators`,`return`))&&(C=g);else{var k,A;O.static=u,O.private=d,d?i===2?k=function(e){return h(e),b.value}:(i<4&&(k=o(b,`get`,h)),i!==3&&(A=o(b,`set`,h))):(k=function(e){return e[r]},(i<2||i===4)&&(A=function(e,t){e[r]=t}));var j=O.access={has:d?m.bind():function(e){return r in e}};if(k&&(j.get=k),A&&(j.set=A),C=T.call(E,p?{get:b.get,set:b.set}:b[S],O),p){if(typeof C==`object`&&C)(g=c(C.get,`accessor.get`))&&(b.get=g),(g=c(C.set,`accessor.set`))&&(b.set=g),(g=c(C.init,`accessor.init`))&&x.push(g);else if(C!==void 0)throw TypeError(`accessor decorators must return an object with get, set, or init properties or void 0`)}else c(C,(f?`field`:`method`)+` decorators`,`return`)&&(f?x.push(C):b[S]=C)}}finally{D.v=!0}}return(f||p)&&l.push(function(e,t){for(var n=x.length-1;n>=0;n--)t=x[n].call(e,t);return t}),f||y||(d?p?l.push(o(b,`get`),o(b,`set`)):l.push(i===2?b[S]:o.call.bind(b[S])):Object.defineProperty(e,r,b)),C}function u(e,t){return Object.defineProperty(e,Symbol.metadata||Symbol.for(`Symbol.metadata`),{configurable:!0,enumerable:!0,value:t})}if(arguments.length>=6)var d=a[Symbol.metadata||Symbol.for(`Symbol.metadata`)];var f=Object.create(d??null),p=function(e,t,n,r){var i,a,o=[],c=function(t){return we(t)===e},u=new Map;function d(e){e&&o.push(s.bind(null,e))}for(var f=0;f<t.length;f++){var p=t[f];if(Array.isArray(p)){var m=p[1],h=p[2],g=p.length>3,_=16&m,v=!!(8&m),y=(m&=7)==0,b=h+`/`+v;if(!y&&!g){var x=u.get(b);if(!0===x||x===3&&m!==4||x===4&&m!==3)throw Error(`Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: `+h);u.set(b,!(m>2)||m)}l(v?e:e.prototype,p,_,g?`#`+h:xe(h),m,r,v?a||=[]:i||=[],o,v,g,y,m===1,v&&g?c:n)}}return d(i),d(a),o}(e,t,i,f);return n.length||u(e,f),{e:p,get c(){var t=[];return n.length&&[u(l(e,[n],r,e.name,5,f,t),f),s.bind(null,t,e)]}}}function xe(e){var t=Se(e,`string`);return typeof t==`symbol`?t:t+``}function Se(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function Ce(e,t,n){typeof t==`symbol`&&(t=(t=t.description)?`[`+t+`]`:``);try{Object.defineProperty(e,"name",{configurable:!0,value:n?n+` `+t:t})}catch{}return e}function we(e){if(Object(e)!==e)throw TypeError(`right-hand side of 'in' should be an object, got `+(e===null?`null`:typeof e));return e}function Te(e){return e}var Q=class extends Error{};function Ee(e){return e}k=[e.customElement(`solid-ui-combobox`)];var $;new(ge=(u=new WeakMap,d=new WeakMap,f=new WeakMap,p=new WeakMap,m=new WeakMap,h=new WeakMap,g=new WeakMap,_=new WeakMap,v=new WeakMap,y=new WeakMap,b=new WeakMap,x=new WeakMap,S=new WeakMap,C=new WeakMap,w=new WeakMap,T=new WeakMap,E=new WeakMap,_e=(A=(0,o.property)({type:String,reflect:!0}),M=(0,o.property)({type:String,reflect:!0}),te=(0,o.property)(),re=(0,o.property)({type:String,reflect:!0}),ae=(0,o.property)({type:Boolean,reflect:!0}),N=(0,o.property)({type:Boolean,reflect:!0,attribute:`select-only`}),F=(0,o.property)({type:String,attribute:`async-options-url`}),L=(0,o.property)({type:String,attribute:`async-options-results-field`}),z=(0,o.property)({type:String,attribute:`async-options-label-field`}),V=(0,o.property)({type:String,attribute:`async-options-value-field`}),U=(0,o.property)({type:Function}),G=(0,o.property)({type:Array}),q=(0,o.query)(`input`),ce=(0,o.state)(),ue=(0,o.state)(),fe=(0,o.state)(),me=(0,o.state)(),`label`),l=class extends t.default{get[_e](){return X(u,this)}set label(e){Y(u,this,e)}get name(){return X(d,this)}set name(e){Y(d,this,e)}get value(){return X(f,this)}set value(e){Y(f,this,e)}get placeholder(){return X(p,this)}set placeholder(e){Y(p,this,e)}get required(){return X(m,this)}set required(e){Y(m,this,e)}get selectOnly(){return X(h,this)}set selectOnly(e){Y(h,this,e)}get asyncOptionsUrl(){return X(g,this)}set asyncOptionsUrl(e){Y(g,this,e)}get asyncOptionsResultsField(){return X(_,this)}set asyncOptionsResultsField(e){Y(_,this,e)}get asyncOptionsLabelField(){return X(v,this)}set asyncOptionsLabelField(e){Y(v,this,e)}get asyncOptionsValueField(){return X(y,this)}set asyncOptionsValueField(e){Y(y,this,e)}get asyncOptionsProvider(){return X(b,this)}set asyncOptionsProvider(e){Y(b,this,e)}get optionsFallback(){return X(x,this)}set optionsFallback(e){Y(x,this,e)}get inputElement(){return X(S,this)}set inputElement(e){Y(S,this,e)}get filter(){return X(C,this)}set filter(e){Y(C,this,e)}get displayValue(){return X(w,this)}set displayValue(e){Y(w,this,e)}get open(){return X(T,this)}set open(e){Y(T,this,e)}get activeIndex(){return X(E,this)}set activeIndex(e){Y(E,this,e)}constructor(){super(),J(this,u,(D(this),j(this,``))),J(this,d,ee(this,``)),J(this,f,ne(this,``)),J(this,p,ie(this,``)),J(this,m,oe(this,!1)),J(this,h,P(this,!1)),J(this,g,I(this,``)),J(this,_,R(this,``)),J(this,v,B(this,``)),J(this,y,H(this,``)),J(this,b,W(this,null)),J(this,x,K(this,null)),J(this,S,se(this,null)),J(this,C,le(this,``)),J(this,w,de(this,``)),J(this,T,pe(this,!1)),J(this,E,he(this,-1)),Z(this,`controlTrait`,void 0),Z(this,`openListenersAttached`,!1),Z(this,`updateDebouncedFilter`,r.debounce(300,e=>this.filter=e)),Z(this,`asyncOptionsTask`,void 0),Z(this,`_selectedOption`,void 0),Z(this,`listboxId`,void 0),Z(this,`handleDocumentFocusIn`,e=>{e.composedPath().includes(this)||this.hide()}),Z(this,`handleDocumentMouseDown`,e=>{e.composedPath().includes(this)||this.hide()}),this.controlTrait=this.addTrait(new n.default(this,{getControlElement:()=>this.inputElement,getInternals:()=>this.getInternals()})),this.listboxId=`listbox-${this.controlTrait.controlId}`}get selectedOption(){return this._selectedOption}disconnectedCallback(){super.disconnectedCallback(),this.removeOpenListeners()}willUpdate(e){if(super.willUpdate(e),(e.has(`asyncOptionsUrl`)||e.has(`asyncOptionsProvider`))&&this.updateAsyncOptionsTask(),e.has(`value`)){let e=this.getFilteredOptions(),t=e.find(e=>e.selectable!==!1&&e.value===this.value)??this.optionsFallback?.find(e=>e.value===this.value),n=t?.selectable!==!1&&t?.label;this.updateDisplayValue(n||this.value),this.open&&(this.activeIndex=this.getInitialActiveIndex(e)),this._selectedOption&&this._selectedOption.value!==this.value&&(this._selectedOption=void 0)}}render(){let e=this.getFilteredOptions(),t=(this.open&&this.activeIndex>=0?e[this.activeIndex]:void 0)===void 0?void 0:this.getOptionId(this.activeIndex),n=this.placeholder||`Combobox`;return a.html`
2
+ ${this.controlTrait.renderLabel()}
3
3
  <wa-popup
4
4
  placement="bottom"
5
5
  flip
@@ -11,7 +11,7 @@ const e=require("../../lib/components/decorators.cjs.js"),t=require("../../lib/c
11
11
  >
12
12
  <div class="input-wrapper" slot="anchor" @mousedown=${this.onAnchorMouseDown}>
13
13
  <input
14
- id="${this.inputTrait.inputId}"
14
+ id="${this.controlTrait.controlId}"
15
15
  type="text"
16
16
  name=${this.name}
17
17
  placeholder=${this.placeholder}
@@ -20,17 +20,17 @@ const e=require("../../lib/components/decorators.cjs.js"),t=require("../../lib/c
20
20
  aria-haspopup="listbox"
21
21
  aria-expanded=${this.open?`true`:`false`}
22
22
  aria-controls=${this.listboxId}
23
- aria-activedescendant=${t??i.nothing}
24
- aria-labelledby=${this.label?this.inputTrait.labelId:i.nothing}
25
- aria-label=${this.label?i.nothing:n}
26
- aria-required=${this.required?`true`:i.nothing}
23
+ aria-activedescendant=${t??a.nothing}
24
+ aria-labelledby=${this.label?this.controlTrait.labelId:a.nothing}
25
+ aria-label=${this.label?a.nothing:n}
26
+ aria-required=${this.required?`true`:a.nothing}
27
27
  autocomplete="off"
28
28
  spellcheck="false"
29
29
  ?required=${this.required}
30
- .value=${this.value}
30
+ .value=${this.displayValue}
31
31
  @keydown=${this.onInputKeyDown}
32
32
  @focus=${this.onInputFocus}
33
- @input=${()=>this.inputTrait.onInput()}
33
+ @input=${()=>this.selectOnly?this.updateDisplayValue(this.inputElement?.value??``):this.controlTrait.onInput()}
34
34
  />
35
35
  <icon-lucide-chevron-down></icon-lucide-chevron-down>
36
36
  </div>
@@ -39,21 +39,21 @@ const e=require("../../lib/components/decorators.cjs.js"),t=require("../../lib/c
39
39
  class="listbox"
40
40
  role="listbox"
41
41
  aria-orientation="vertical"
42
- aria-labelledby=${this.label?this.inputTrait.labelId:i.nothing}
43
- aria-label=${this.label?i.nothing:n}
42
+ aria-labelledby=${this.label?this.controlTrait.labelId:a.nothing}
43
+ aria-label=${this.label?a.nothing:n}
44
44
  ?hidden=${!this.open}
45
45
  @mousedown=${this.onListboxMouseDown}
46
46
  >
47
- ${e.map((e,t)=>i.html`<div
48
- id=${this.getOptionId(t)}
49
- role="option"
50
- aria-selected=${this.open&&t===this.activeIndex?`true`:`false`}
51
- data-active=${t===this.activeIndex||i.nothing}
52
- @mousemove=${()=>this.setActiveIndex(t)}
53
- >
54
- ${e.label}
55
- </div>`)}
47
+ ${e.map((e,t)=>e.selectable===!1?a.html`<div class="non-selectable-option">${e.template??e.label}</div>`:a.html`<div
48
+ id=${this.getOptionId(t)}
49
+ role="option"
50
+ aria-selected=${e.value===this.value?`true`:`false`}
51
+ data-active=${t===this.activeIndex||a.nothing}
52
+ @mousemove=${()=>this.setActiveIndex(t)}
53
+ >
54
+ ${e.template??e.label}
55
+ </div>`)}
56
56
  </div>
57
57
  </wa-popup>
58
- `}getFilteredOptions(){return this.getOptions().filter(e=>e.label.toLowerCase().includes(this.filter))}getOptions(){let e=this.querySelectorAll(`solid-ui-combobox-option`);return Array.from(e).map(e=>({value:e.value,label:e.textContent??``}))}getOptionId(e){return`${this.listboxId}-option-${e}`}getInitialActiveIndex(e){let t=e.findIndex(e=>e.value===this.value);return t>=0?t:e.length>0?0:-1}getNextIndex(e,t,n){return t.length===0?-1:(e+n+t.length)%t.length}setActiveIndex(e){this.activeIndex=e}show(e){if(this.open)return;let t=this.getFilteredOptions();t.length!==0&&(this.open=!0,this.activeIndex=e?.focusLast?t.length-1:this.getInitialActiveIndex(t),this.addOpenListeners(),requestAnimationFrame(()=>this.scrollActiveOptionIntoView()))}hide(){this.open&&(this.filter=``,this.open=!1,this.activeIndex=-1,this.removeOpenListeners())}selectOption(e){this.inputTrait.setValue(e),this.hide(),this.inputElement?.focus({preventScroll:!0})}scrollActiveOptionIntoView(){this.activeIndex<0||this.shadowRoot?.querySelector(`#${this.getOptionId(this.activeIndex)}`)?.scrollIntoView({block:`nearest`})}addOpenListeners(){if(this.openListenersAttached)return;document.addEventListener(`focusin`,this.handleDocumentFocusIn),document.addEventListener(`mousedown`,this.handleDocumentMouseDown);let e=this.getRootNode();e!==document&&e.addEventListener(`focusin`,this.handleDocumentFocusIn),this.openListenersAttached=!0}removeOpenListeners(){if(!this.openListenersAttached)return;document.removeEventListener(`focusin`,this.handleDocumentFocusIn),document.removeEventListener(`mousedown`,this.handleDocumentMouseDown);let e=this.getRootNode();e!==document&&e.removeEventListener(`focusin`,this.handleDocumentFocusIn),this.openListenersAttached=!1}onAnchorMouseDown(e){e.preventDefault(),this.inputElement?.focus({preventScroll:!0})}onInputFocus(){this.show()}openPopupFromKey(e){this.open||this.show({focusLast:e})}onInputKeyDown(e){let t=this.getFilteredOptions();switch(e.key){case`ArrowDown`:e.preventDefault(),this.open?(this.activeIndex=this.getNextIndex(this.activeIndex,t,1),this.scrollActiveOptionIntoView()):this.openPopupFromKey(!1);break;case`ArrowUp`:e.preventDefault(),this.open?(this.activeIndex=this.getNextIndex(this.activeIndex,t,-1),this.scrollActiveOptionIntoView()):this.openPopupFromKey(!0);break;case`Enter`:this.open&&this.activeIndex>=0&&t[this.activeIndex]?(e.preventDefault(),this.selectOption(t[this.activeIndex].value)):this.open||(e.preventDefault(),this.inputTrait.onSubmit());break;case`Escape`:this.open&&(e.preventDefault(),e.stopPropagation(),this.hide(),this.inputElement?.focus({preventScroll:!0}));break;case`Tab`:this.hide();break}}onListboxMouseDown(e){if(e.preventDefault(),!(e.target instanceof HTMLElement))return;let t=e.target.closest(`[role="option"]`);if(!t)return;let n=t.id,r=Number.parseInt(n.replace(`${this.listboxId}-option-`,``),10),i=this.getFilteredOptions()[r];i&&this.selectOption(i.value)}},{e:[x,C,T,D,k,j,N,F,L,_],c:[Q,v]}=K(s,[[b,1,`label`],[S,1,`name`],[w,1,`value`],[E,1,`placeholder`],[O,1,`required`],[A,1,`inputElement`],[M,1,`filter`],[P,1,`open`],[I,1,`activeIndex`]],y,0,void 0,t.default),s),o=class extends Z{constructor(){super(Q),G(this,`styles`,r.default),G(this,`formAssociated`,!0),v()}},G(o,R,void 0),o),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return Q}});
58
+ `}getFilteredOptions(){return this.asyncOptionsTask?this.asyncOptionsTask.render({initial:()=>this.optionsFallback??[],complete:e=>e,pending:()=>[{value:``,label:`Loading...`,template:a.html`<icon-svg-spinners-3-dots-fade></icon-svg-spinners-3-dots-fade>`,selectable:!1}],error:e=>{let t=!(e instanceof Q),n=Object(e).message??`Something went wrong`;return[{value:``,label:n,template:a.html`<span class="message message--${t?`error`:`info`}">${n}</span>`,selectable:!1}]}}):this.getOptionsFromDOM().filter(e=>String(e.label).toLowerCase().includes(this.filter))}getOptionsFromDOM(){let e=this.querySelectorAll(`solid-ui-combobox-option`);return Array.from(e).map(e=>({value:e.value,label:e.textContent??``}))}getOptionId(e){return`${this.listboxId}-option-${e}`}getInitialActiveIndex(e){let t=e.findIndex(e=>e.value===this.value);return t>=0?t:e.length>0?0:-1}getNextIndex(e,t,n){return t.length===0?-1:(e+n+t.length)%t.length}setActiveIndex(e){this.activeIndex=e}updateDisplayValue(e){if(this.displayValue=String(e),this.open){let e=this.displayValue.toLowerCase();this.asyncOptionsTask?this.updateDebouncedFilter(e):this.filter=e}}updateAsyncOptionsTask(){if(!this.asyncOptionsUrl&&!this.asyncOptionsProvider){this.asyncOptionsTask=void 0;return}this.asyncOptionsTask??=new s.Task(this,async([e])=>{if(this.asyncOptionsProvider){let t=await this.asyncOptionsProvider(e);if(t.length===0)throw new Q(`No results found`);return t}let t=await(await fetch(this.asyncOptionsUrl.replace(`%search%`,encodeURIComponent(e)))).json(),n=Array.from(this.asyncOptionsResultsField?t[this.asyncOptionsResultsField]:t);if(n.length===0)throw new Q(`No results found`);let r=this.asyncOptionsLabelField||`label`,i=this.asyncOptionsValueField||`value`;return n.map(e=>({label:String(Object(e)[r]),value:Object(e)[i]}))},()=>[this.filter])}show(e){if(this.open)return;let t=this.getFilteredOptions();t.length!==0&&(this.open=!0,this.activeIndex=e?.focusLast?t.length-1:this.getInitialActiveIndex(t),this.addOpenListeners(),requestAnimationFrame(()=>this.scrollActiveOptionIntoView()))}hide(){this.open&&(this.filter=``,this.open=!1,this.activeIndex=-1,this.removeOpenListeners(),this.updateDebouncedFilter.cancel())}selectOption(e){let t=this.value;this._selectedOption=e,this.hide(),this.controlTrait.setValue(e.value),this.inputElement?.focus({preventScroll:!0}),this.dispatchEvent(new CustomEvent(`change`,{bubbles:!0,composed:!0,detail:{option:e}})),t===this.value&&this.updateDisplayValue(e.label)}scrollActiveOptionIntoView(){this.activeIndex<0||this.shadowRoot?.querySelector(`#${this.getOptionId(this.activeIndex)}`)?.scrollIntoView({block:`nearest`})}addOpenListeners(){if(this.openListenersAttached)return;document.addEventListener(`focusin`,this.handleDocumentFocusIn),document.addEventListener(`mousedown`,this.handleDocumentMouseDown);let e=this.getRootNode();e!==document&&e.addEventListener(`focusin`,this.handleDocumentFocusIn),this.openListenersAttached=!0}removeOpenListeners(){if(!this.openListenersAttached)return;document.removeEventListener(`focusin`,this.handleDocumentFocusIn),document.removeEventListener(`mousedown`,this.handleDocumentMouseDown);let e=this.getRootNode();e!==document&&e.removeEventListener(`focusin`,this.handleDocumentFocusIn),this.openListenersAttached=!1}onAnchorMouseDown(e){e.target!==this.inputElement&&(e.preventDefault(),this.inputElement?.focus({preventScroll:!0}))}onInputFocus(){this.show()}openPopupFromKey(e){this.open||this.show({focusLast:e})}onInputKeyDown(e){let t=this.getFilteredOptions();switch(e.key){case`ArrowDown`:e.preventDefault(),this.open?(this.activeIndex=this.getNextIndex(this.activeIndex,t,1),this.scrollActiveOptionIntoView()):this.openPopupFromKey(!1);break;case`ArrowUp`:e.preventDefault(),this.open?(this.activeIndex=this.getNextIndex(this.activeIndex,t,-1),this.scrollActiveOptionIntoView()):this.openPopupFromKey(!0);break;case`Enter`:this.open&&this.activeIndex>=0&&t[this.activeIndex]?(e.preventDefault(),this.selectOption(t[this.activeIndex])):this.open||(e.preventDefault(),this.controlTrait.onSubmit());break;case`Escape`:this.open&&(e.preventDefault(),e.stopPropagation(),this.hide(),this.inputElement?.focus({preventScroll:!0}));break;case`Tab`:this.hide();break;default:this.open||this.show()}}onListboxMouseDown(e){if(e.preventDefault(),!(e.target instanceof HTMLElement))return;let t=e.target.closest(`[role="option"]`);if(!t)return;let n=t.id,r=Number.parseInt(n.replace(`${this.listboxId}-option-`,``),10),i=this.getFilteredOptions()[r];i&&this.selectOption(i)}},{e:[j,ee,ne,ie,oe,P,I,R,B,H,W,K,se,le,de,pe,he,D],c:[$,O]}=be(l,[[A,1,`label`],[M,1,`name`],[te,1,`value`],[re,1,`placeholder`],[ae,1,`required`],[N,1,`selectOnly`],[F,1,`asyncOptionsUrl`],[L,1,`asyncOptionsResultsField`],[z,1,`asyncOptionsLabelField`],[V,1,`asyncOptionsValueField`],[U,1,`asyncOptionsProvider`],[G,1,`optionsFallback`],[q,1,`inputElement`],[ce,1,`filter`],[ue,1,`displayValue`],[fe,1,`open`],[me,1,`activeIndex`]],k,0,void 0,t.default),l),c=class extends Te{constructor(){super($),Z(this,`styles`,i.default),Z(this,`formAssociated`,!0),O()}},Z(c,ge,void 0),c),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return $}}),exports.defineAsyncComboboxOptionsProvider=Ee;
59
59
  //# sourceMappingURL=Combobox.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Combobox.cjs.js","names":["customElement","WebComponent","html","nothing","property","query","state","InputTrait","styles","_classDecs","_Combobox","_Combobox2","_A","WeakMap","_B","_C","_D","_E","_F","_G","_H","_I","_ref","_labelDecs","type","String","reflect","_nameDecs","_valueDecs","_placeholderDecs","_requiredDecs","Boolean","_inputElementDecs","_filterDecs","_openDecs","_activeIndexDecs","_Combobox3","Combobox","_classPrivateFieldGet","label","v","_classPrivateFieldSet","name","value","placeholder","required","inputElement","filter","open","activeIndex","constructor","_classPrivateFieldInitSpec","_initProto","_init_label","_init_name","_init_value","_init_placeholder","_init_required","_init_inputElement","_init_filter","_init_open","_init_activeIndex","_defineProperty","event","path","composedPath","includes","hide","inputTrait","addTrait","getInputElement","getInternals","onValueChanged","toLowerCase","options","getFilteredOptions","length","getInitialActiveIndex","listboxId","inputId","disconnectedCallback","removeOpenListeners","render","activeOption","undefined","activeDescendant","getOptionId","accessibleName","renderLabel","onAnchorMouseDown","labelId","onInputKeyDown","onInputFocus","onInput","onListboxMouseDown","map","option","index","setActiveIndex","getOptions","querySelectorAll","Array","from","textContent","selectedIndex","findIndex","getNextIndex","currentIndex","direction","show","filteredOptions","focusLast","addOpenListeners","requestAnimationFrame","scrollActiveOptionIntoView","selectOption","setValue","focus","preventScroll","shadowRoot","querySelector","scrollIntoView","block","openListenersAttached","document","addEventListener","handleDocumentFocusIn","handleDocumentMouseDown","root","getRootNode","removeEventListener","preventDefault","openPopupFromKey","key","onSubmit","stopPropagation","target","HTMLElement","optionElement","closest","optionId","id","Number","parseInt","replace","e","c","_initClass","_applyDecs","_Class","_identity","default"],"sources":["../../../src/components/combobox/Combobox.ts"],"sourcesContent":["import { customElement, WebComponent } from '@/lib/components'\nimport { html, nothing } from 'lit'\nimport { property, query, state } from 'lit/decorators.js'\nimport InputTrait from '@/lib/components/traits/InputTrait'\nimport type ComboboxOption from '@/components/combobox-option/ComboboxOption'\n\nimport '~icons/lucide/chevron-down'\nimport '@awesome.me/webawesome/dist/components/popup/popup.js'\n\nimport styles from './Combobox.styles.css'\n\ntype ComboboxOptionData = { value: string; label: string }\n\n@customElement('solid-ui-combobox')\nexport default class Combobox extends WebComponent {\n static styles = styles\n static formAssociated = true\n\n @property({ type: String, reflect: true })\n accessor label = ''\n\n @property({ type: String, reflect: true })\n accessor name = ''\n\n @property({ type: String })\n accessor value = ''\n\n @property({ type: String, reflect: true })\n accessor placeholder = ''\n\n @property({ type: Boolean, reflect: true })\n accessor required = false\n\n @query('input')\n private accessor inputElement: HTMLInputElement | null = null\n\n @state()\n private accessor filter = ''\n\n @state()\n private accessor open = false\n\n @state()\n private accessor activeIndex = -1\n\n private inputTrait: InputTrait\n private openListenersAttached = false\n private readonly listboxId: string\n\n constructor () {\n super()\n\n this.inputTrait = this.addTrait(\n new InputTrait(this, {\n getInputElement: () => this.inputElement,\n getInternals: () => this.getInternals(),\n onValueChanged: (value) => {\n this.filter = value.toLowerCase()\n\n const options = this.getFilteredOptions()\n\n if (options.length === 0) {\n this.hide()\n return\n }\n\n if (this.open) {\n this.activeIndex = this.getInitialActiveIndex(options)\n }\n },\n })\n )\n\n this.listboxId = `listbox-${this.inputTrait.inputId}`\n }\n\n disconnectedCallback () {\n super.disconnectedCallback()\n\n this.removeOpenListeners()\n }\n\n protected render () {\n const options = this.getFilteredOptions()\n const activeOption =\n this.open && this.activeIndex >= 0 ? options[this.activeIndex] : undefined\n const activeDescendant =\n activeOption !== undefined ? this.getOptionId(this.activeIndex) : undefined\n const accessibleName = this.placeholder || 'Combobox'\n\n return html`\n ${this.inputTrait.renderLabel()}\n <wa-popup\n placement=\"bottom\"\n flip\n shift\n sync=\"width\"\n auto-size=\"vertical\"\n auto-size-padding=\"10\"\n ?active=${this.open}\n >\n <div class=\"input-wrapper\" slot=\"anchor\" @mousedown=${this.onAnchorMouseDown}>\n <input\n id=\"${this.inputTrait.inputId}\"\n type=\"text\"\n name=${this.name}\n placeholder=${this.placeholder}\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n aria-expanded=${this.open ? 'true' : 'false'}\n aria-controls=${this.listboxId}\n aria-activedescendant=${activeDescendant ?? nothing}\n aria-labelledby=${this.label ? this.inputTrait.labelId : nothing}\n aria-label=${this.label ? nothing : accessibleName}\n aria-required=${this.required ? 'true' : nothing}\n autocomplete=\"off\"\n spellcheck=\"false\"\n ?required=${this.required}\n .value=${this.value}\n @keydown=${this.onInputKeyDown}\n @focus=${this.onInputFocus}\n @input=${() => this.inputTrait.onInput()}\n />\n <icon-lucide-chevron-down></icon-lucide-chevron-down>\n </div>\n <div\n id=${this.listboxId}\n class=\"listbox\"\n role=\"listbox\"\n aria-orientation=\"vertical\"\n aria-labelledby=${this.label ? this.inputTrait.labelId : nothing}\n aria-label=${this.label ? nothing : accessibleName}\n ?hidden=${!this.open}\n @mousedown=${this.onListboxMouseDown}\n >\n ${options.map(\n (option, index) =>\n html`<div\n id=${this.getOptionId(index)}\n role=\"option\"\n aria-selected=${this.open && index === this.activeIndex\n ? 'true'\n : 'false'}\n data-active=${index === this.activeIndex || nothing}\n @mousemove=${() => this.setActiveIndex(index)}\n >\n ${option.label}\n </div>`\n )}\n </div>\n </wa-popup>\n `\n }\n\n private getFilteredOptions (): ComboboxOptionData[] {\n return this.getOptions().filter((option) =>\n option.label.toLowerCase().includes(this.filter)\n )\n }\n\n private getOptions (): ComboboxOptionData[] {\n const options = this.querySelectorAll<ComboboxOption>(\n 'solid-ui-combobox-option'\n )\n\n return Array.from(options).map((option) => ({\n value: option.value,\n label: option.textContent ?? '',\n }))\n }\n\n private getOptionId (index: number): string {\n return `${this.listboxId}-option-${index}`\n }\n\n private getInitialActiveIndex (options: ComboboxOptionData[]): number {\n const selectedIndex = options.findIndex((option) => option.value === this.value)\n\n if (selectedIndex >= 0) {\n return selectedIndex\n }\n\n return options.length > 0 ? 0 : -1\n }\n\n private getNextIndex (\n currentIndex: number,\n options: ComboboxOptionData[],\n direction: 1 | -1\n ): number {\n if (options.length === 0) {\n return -1\n }\n\n return (currentIndex + direction + options.length) % options.length\n }\n\n private setActiveIndex (index: number) {\n this.activeIndex = index\n }\n\n private show (options?: { focusLast?: boolean }) {\n if (this.open) {\n return\n }\n\n const filteredOptions = this.getFilteredOptions()\n\n if (filteredOptions.length === 0) {\n return\n }\n\n this.open = true\n this.activeIndex = options?.focusLast\n ? filteredOptions.length - 1\n : this.getInitialActiveIndex(filteredOptions)\n this.addOpenListeners()\n\n requestAnimationFrame(() => this.scrollActiveOptionIntoView())\n }\n\n private hide () {\n if (!this.open) {\n return\n }\n\n this.filter = ''\n this.open = false\n this.activeIndex = -1\n this.removeOpenListeners()\n }\n\n private selectOption (value: string) {\n this.inputTrait.setValue(value)\n this.hide()\n this.inputElement?.focus({ preventScroll: true })\n }\n\n private scrollActiveOptionIntoView () {\n if (this.activeIndex < 0) {\n return\n }\n\n this.shadowRoot\n ?.querySelector(`#${this.getOptionId(this.activeIndex)}`)\n ?.scrollIntoView({ block: 'nearest' })\n }\n\n private addOpenListeners () {\n if (this.openListenersAttached) {\n return\n }\n\n document.addEventListener('focusin', this.handleDocumentFocusIn)\n document.addEventListener('mousedown', this.handleDocumentMouseDown)\n\n const root = this.getRootNode()\n\n if (root !== document) {\n root.addEventListener('focusin', this.handleDocumentFocusIn)\n }\n\n this.openListenersAttached = true\n }\n\n private removeOpenListeners () {\n if (!this.openListenersAttached) {\n return\n }\n\n document.removeEventListener('focusin', this.handleDocumentFocusIn)\n document.removeEventListener('mousedown', this.handleDocumentMouseDown)\n\n const root = this.getRootNode()\n\n if (root !== document) {\n root.removeEventListener('focusin', this.handleDocumentFocusIn)\n }\n\n this.openListenersAttached = false\n }\n\n private handleDocumentFocusIn = (event: Event) => {\n const path = event.composedPath()\n\n if (!path.includes(this)) {\n this.hide()\n }\n }\n\n private handleDocumentMouseDown = (event: MouseEvent) => {\n const path = event.composedPath()\n\n if (!path.includes(this)) {\n this.hide()\n }\n }\n\n private onAnchorMouseDown (event: MouseEvent) {\n event.preventDefault()\n this.inputElement?.focus({ preventScroll: true })\n }\n\n private onInputFocus () {\n this.show()\n }\n\n private openPopupFromKey (focusLast: boolean) {\n if (!this.open) {\n this.show({ focusLast })\n }\n }\n\n private onInputKeyDown (event: KeyboardEvent) {\n const options = this.getFilteredOptions()\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n\n if (!this.open) {\n this.openPopupFromKey(false)\n } else {\n this.activeIndex = this.getNextIndex(this.activeIndex, options, 1)\n this.scrollActiveOptionIntoView()\n }\n break\n case 'ArrowUp':\n event.preventDefault()\n\n if (!this.open) {\n this.openPopupFromKey(true)\n } else {\n this.activeIndex = this.getNextIndex(this.activeIndex, options, -1)\n this.scrollActiveOptionIntoView()\n }\n break\n case 'Enter':\n if (this.open && this.activeIndex >= 0 && options[this.activeIndex]) {\n event.preventDefault()\n this.selectOption(options[this.activeIndex].value)\n } else if (!this.open) {\n event.preventDefault()\n this.inputTrait.onSubmit()\n }\n break\n case 'Escape':\n if (this.open) {\n event.preventDefault()\n event.stopPropagation()\n this.hide()\n this.inputElement?.focus({ preventScroll: true })\n }\n break\n case 'Tab':\n this.hide()\n break\n }\n }\n\n private onListboxMouseDown (event: MouseEvent) {\n event.preventDefault()\n\n if (!(event.target instanceof HTMLElement)) {\n return\n }\n\n const optionElement = event.target.closest('[role=\"option\"]')\n\n if (!optionElement) {\n return\n }\n\n const optionId = optionElement.id\n const index = Number.parseInt(optionId.replace(`${this.listboxId}-option-`, ''), 10)\n const option = this.getFilteredOptions()[index]\n\n if (option) {\n this.selectOption(option.value)\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Combobox.cjs.js","names":["customElement","WebComponent","Task","html","nothing","property","query","state","debounce","FormControlTrait","styles","AsyncOptionsInfo","Error","defineAsyncComboboxOptionsProvider","provider","_classDecs","_Combobox","_Combobox2","_A","WeakMap","_B","_C","_D","_E","_F","_G","_H","_I","_J","_K","_L","_M","_N","_O","_P","_Q","_ref","_labelDecs","type","String","reflect","_nameDecs","_valueDecs","_placeholderDecs","_requiredDecs","Boolean","_selectOnlyDecs","attribute","_asyncOptionsUrlDecs","_asyncOptionsResultsFieldDecs","_asyncOptionsLabelFieldDecs","_asyncOptionsValueFieldDecs","_asyncOptionsProviderDecs","Function","_optionsFallbackDecs","Array","_inputElementDecs","_filterDecs","_displayValueDecs","_openDecs","_activeIndexDecs","_Combobox3","Combobox","_classPrivateFieldGet","label","v","_classPrivateFieldSet","name","value","placeholder","required","selectOnly","asyncOptionsUrl","asyncOptionsResultsField","asyncOptionsLabelField","asyncOptionsValueField","asyncOptionsProvider","optionsFallback","inputElement","filter","displayValue","open","activeIndex","constructor","_classPrivateFieldInitSpec","_initProto","_init_label","_init_name","_init_value","_init_placeholder","_init_required","_init_selectOnly","_init_asyncOptionsUrl","_init_asyncOptionsResultsField","_init_asyncOptionsLabelField","_init_asyncOptionsValueField","_init_asyncOptionsProvider","_init_optionsFallback","_init_inputElement","_init_filter","_init_displayValue","_init_open","_init_activeIndex","_defineProperty","event","path","composedPath","includes","hide","controlTrait","addTrait","getControlElement","getInternals","listboxId","controlId","selectedOption","_selectedOption","disconnectedCallback","removeOpenListeners","willUpdate","changedProperties","has","updateAsyncOptionsTask","options","getFilteredOptions","option","find","selectable","optionLabel","updateDisplayValue","getInitialActiveIndex","undefined","render","activeOption","activeDescendant","getOptionId","accessibleName","renderLabel","onAnchorMouseDown","labelId","onInputKeyDown","onInputFocus","onInput","onListboxMouseDown","map","index","setActiveIndex","template","asyncOptionsTask","initial","complete","pending","error","isError","message","Object","getOptionsFromDOM","toLowerCase","querySelectorAll","from","textContent","selectedIndex","findIndex","length","getNextIndex","currentIndex","direction","updateDebouncedFilter","results","response","fetch","replace","encodeURIComponent","data","json","labelField","valueField","result","show","filteredOptions","focusLast","addOpenListeners","requestAnimationFrame","scrollActiveOptionIntoView","cancel","selectOption","previousValue","setValue","focus","preventScroll","dispatchEvent","CustomEvent","bubbles","composed","detail","shadowRoot","querySelector","scrollIntoView","block","openListenersAttached","document","addEventListener","handleDocumentFocusIn","handleDocumentMouseDown","root","getRootNode","removeEventListener","target","preventDefault","openPopupFromKey","key","onSubmit","stopPropagation","HTMLElement","optionElement","closest","optionId","id","Number","parseInt","e","c","_initClass","_applyDecs","_Class","_identity","default"],"sources":["../../../src/components/combobox/Combobox.ts"],"sourcesContent":["import { customElement, WebComponent } from '@/lib/components'\nimport { Task } from '@lit/task'\nimport { html, nothing, TemplateResult, type PropertyValues } from 'lit'\nimport { property, query, state } from 'lit/decorators.js'\nimport { debounce } from '@/lib/timing'\nimport FormControlTrait from '@/lib/components/traits/FormControlTrait'\nimport type ComboboxOption from '@/components/combobox-option/ComboboxOption'\n\nimport '~icons/lucide/chevron-down'\nimport '~icons/svg-spinners/3-dots-fade'\nimport '@awesome.me/webawesome/dist/components/popup/popup.js'\n\nimport styles from './Combobox.styles.css'\n\nclass AsyncOptionsInfo extends Error {}\n\nexport type ComboboxOptionData = {\n value: unknown;\n label: string;\n template?: TemplateResult;\n selectable?: boolean;\n}\n\nexport type ComboboxChangeEvent = CustomEvent<{ option: ComboboxOptionData }>\n\nexport type AsyncComboboxOptionsProvider = (query: string) => Promise<ComboboxOptionData[]>\n\nexport function defineAsyncComboboxOptionsProvider<T extends AsyncComboboxOptionsProvider> (provider: T): T {\n return provider\n}\n\n@customElement('solid-ui-combobox')\nexport default class Combobox extends WebComponent {\n static styles = styles\n static formAssociated = true\n\n @property({ type: String, reflect: true })\n accessor label = ''\n\n @property({ type: String, reflect: true })\n accessor name = ''\n\n @property()\n accessor value = ''\n\n @property({ type: String, reflect: true })\n accessor placeholder = ''\n\n @property({ type: Boolean, reflect: true })\n accessor required = false\n\n @property({ type: Boolean, reflect: true, attribute: 'select-only' })\n accessor selectOnly = false\n\n @property({ type: String, attribute: 'async-options-url' })\n accessor asyncOptionsUrl = ''\n\n @property({ type: String, attribute: 'async-options-results-field' })\n accessor asyncOptionsResultsField = ''\n\n @property({ type: String, attribute: 'async-options-label-field' })\n accessor asyncOptionsLabelField = ''\n\n @property({ type: String, attribute: 'async-options-value-field' })\n accessor asyncOptionsValueField = ''\n\n @property({ type: Function })\n accessor asyncOptionsProvider: AsyncComboboxOptionsProvider | null = null\n\n @property({ type: Array })\n accessor optionsFallback: ComboboxOptionData[] | null = null\n\n @query('input')\n private accessor inputElement: HTMLInputElement | null = null\n\n @state()\n private accessor filter = ''\n\n @state()\n private accessor displayValue = ''\n\n @state()\n private accessor open = false\n\n @state()\n private accessor activeIndex = -1\n\n private controlTrait: FormControlTrait\n private openListenersAttached = false\n private updateDebouncedFilter = debounce(300, (value) => (this.filter = value))\n private asyncOptionsTask?: Task<readonly [string], ComboboxOptionData[]>\n private _selectedOption: ComboboxOptionData | undefined\n private readonly listboxId: string\n\n constructor () {\n super()\n\n this.controlTrait = this.addTrait(\n new FormControlTrait(this, {\n getControlElement: () => this.inputElement,\n getInternals: () => this.getInternals(),\n })\n )\n\n this.listboxId = `listbox-${this.controlTrait.controlId}`\n }\n\n get selectedOption (): ComboboxOptionData | undefined {\n return this._selectedOption\n }\n\n disconnectedCallback () {\n super.disconnectedCallback()\n\n this.removeOpenListeners()\n }\n\n protected willUpdate (changedProperties: PropertyValues<this>) {\n super.willUpdate(changedProperties)\n\n if (changedProperties.has('asyncOptionsUrl') || changedProperties.has('asyncOptionsProvider')) {\n this.updateAsyncOptionsTask()\n }\n\n if (changedProperties.has('value')) {\n const options = this.getFilteredOptions()\n const option = options.find((option) => option.selectable !== false && option.value === this.value) ??\n this.optionsFallback?.find((option) => option.value === this.value)\n const optionLabel = option?.selectable !== false && option?.label\n\n this.updateDisplayValue(optionLabel || this.value)\n\n if (this.open) {\n this.activeIndex = this.getInitialActiveIndex(options)\n }\n\n if (this._selectedOption && this._selectedOption.value !== this.value) {\n this._selectedOption = undefined\n }\n }\n }\n\n protected render () {\n const options = this.getFilteredOptions()\n const activeOption =\n this.open && this.activeIndex >= 0 ? options[this.activeIndex] : undefined\n const activeDescendant =\n activeOption !== undefined ? this.getOptionId(this.activeIndex) : undefined\n const accessibleName = this.placeholder || 'Combobox'\n\n return html`\n ${this.controlTrait.renderLabel()}\n <wa-popup\n placement=\"bottom\"\n flip\n shift\n sync=\"width\"\n auto-size=\"vertical\"\n auto-size-padding=\"10\"\n ?active=${this.open}\n >\n <div class=\"input-wrapper\" slot=\"anchor\" @mousedown=${this.onAnchorMouseDown}>\n <input\n id=\"${this.controlTrait.controlId}\"\n type=\"text\"\n name=${this.name}\n placeholder=${this.placeholder}\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n aria-expanded=${this.open ? 'true' : 'false'}\n aria-controls=${this.listboxId}\n aria-activedescendant=${activeDescendant ?? nothing}\n aria-labelledby=${this.label ? this.controlTrait.labelId : nothing}\n aria-label=${this.label ? nothing : accessibleName}\n aria-required=${this.required ? 'true' : nothing}\n autocomplete=\"off\"\n spellcheck=\"false\"\n ?required=${this.required}\n .value=${this.displayValue}\n @keydown=${this.onInputKeyDown}\n @focus=${this.onInputFocus}\n @input=${() => this.selectOnly ? this.updateDisplayValue(this.inputElement?.value ?? '') : this.controlTrait.onInput()}\n />\n <icon-lucide-chevron-down></icon-lucide-chevron-down>\n </div>\n <div\n id=${this.listboxId}\n class=\"listbox\"\n role=\"listbox\"\n aria-orientation=\"vertical\"\n aria-labelledby=${this.label ? this.controlTrait.labelId : nothing}\n aria-label=${this.label ? nothing : accessibleName}\n ?hidden=${!this.open}\n @mousedown=${this.onListboxMouseDown}\n >\n ${options.map((option, index) => {\n return option.selectable !== false\n ? html`<div\n id=${this.getOptionId(index)}\n role=\"option\"\n aria-selected=${option.value === this.value ? 'true' : 'false'}\n data-active=${index === this.activeIndex || nothing}\n @mousemove=${() => this.setActiveIndex(index)}\n >\n ${option.template ?? option.label}\n </div>`\n : html`<div class=\"non-selectable-option\">${option.template ?? option.label}</div>`\n })}\n </div>\n </wa-popup>\n `\n }\n\n private getFilteredOptions (): ComboboxOptionData[] {\n if (this.asyncOptionsTask) {\n return this.asyncOptionsTask.render({\n initial: () => this.optionsFallback ?? [],\n complete: (options) => options,\n pending: () => [\n {\n value: '',\n label: 'Loading...',\n template: html`<icon-svg-spinners-3-dots-fade></icon-svg-spinners-3-dots-fade>`,\n selectable: false\n } as const,\n ],\n error: (error) => {\n const isError = !(error instanceof AsyncOptionsInfo)\n const message = Object(error).message ?? 'Something went wrong'\n\n return [\n {\n value: '',\n label: message,\n template: html`<span class=\"message message--${isError ? 'error' : 'info'}\">${message}</span>`,\n selectable: false\n } as const,\n ]\n },\n })\n }\n\n return this.getOptionsFromDOM().filter((option) =>\n String(option.label).toLowerCase().includes(this.filter)\n )\n }\n\n private getOptionsFromDOM (): ComboboxOptionData[] {\n const options = this.querySelectorAll<ComboboxOption>(\n 'solid-ui-combobox-option'\n )\n\n return Array.from(options).map((option) => ({\n value: option.value,\n label: option.textContent ?? '',\n }))\n }\n\n private getOptionId (index: number): string {\n return `${this.listboxId}-option-${index}`\n }\n\n private getInitialActiveIndex (options: ComboboxOptionData[]): number {\n const selectedIndex = options.findIndex((option) => option.value === this.value)\n\n if (selectedIndex >= 0) {\n return selectedIndex\n }\n\n return options.length > 0 ? 0 : -1\n }\n\n private getNextIndex (\n currentIndex: number,\n options: ComboboxOptionData[],\n direction: 1 | -1\n ): number {\n if (options.length === 0) {\n return -1\n }\n\n return (currentIndex + direction + options.length) % options.length\n }\n\n private setActiveIndex (index: number) {\n this.activeIndex = index\n }\n\n private updateDisplayValue (value: unknown) {\n this.displayValue = String(value)\n\n if (this.open) {\n const filter = this.displayValue.toLowerCase()\n\n if (this.asyncOptionsTask) {\n this.updateDebouncedFilter(filter)\n } else {\n this.filter = filter\n }\n }\n }\n\n private updateAsyncOptionsTask () {\n if (!this.asyncOptionsUrl && !this.asyncOptionsProvider) {\n this.asyncOptionsTask = undefined\n\n return\n }\n\n this.asyncOptionsTask ??= new Task(\n this,\n async ([filter]) => {\n if (this.asyncOptionsProvider) {\n const results = await this.asyncOptionsProvider(filter)\n\n if (results.length === 0) {\n throw new AsyncOptionsInfo('No results found')\n }\n\n return results\n }\n\n const response = await fetch(\n this.asyncOptionsUrl.replace('%search%', encodeURIComponent(filter))\n )\n const data = await response.json()\n const results = Array.from(\n this.asyncOptionsResultsField\n ? data[this.asyncOptionsResultsField]\n : data\n )\n\n if (results.length === 0) {\n throw new AsyncOptionsInfo('No results found')\n }\n\n const labelField = this.asyncOptionsLabelField || 'label'\n const valueField = this.asyncOptionsValueField || 'value'\n\n return results.map((result) => ({\n label: String(Object(result)[labelField]),\n value: Object(result)[valueField],\n }))\n },\n () => [this.filter]\n )\n }\n\n private show (options?: { focusLast?: boolean }) {\n if (this.open) {\n return\n }\n\n const filteredOptions = this.getFilteredOptions()\n\n if (filteredOptions.length === 0) {\n return\n }\n\n this.open = true\n this.activeIndex = options?.focusLast\n ? filteredOptions.length - 1\n : this.getInitialActiveIndex(filteredOptions)\n this.addOpenListeners()\n\n requestAnimationFrame(() => this.scrollActiveOptionIntoView())\n }\n\n private hide () {\n if (!this.open) {\n return\n }\n\n this.filter = ''\n this.open = false\n this.activeIndex = -1\n this.removeOpenListeners()\n this.updateDebouncedFilter.cancel()\n }\n\n private selectOption (option: ComboboxOptionData) {\n const previousValue = this.value\n\n this._selectedOption = option\n\n this.hide()\n this.controlTrait.setValue(option.value)\n this.inputElement?.focus({ preventScroll: true })\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true, detail: { option } }))\n\n if (previousValue === this.value) {\n this.updateDisplayValue(option.label)\n }\n }\n\n private scrollActiveOptionIntoView () {\n if (this.activeIndex < 0) {\n return\n }\n\n this.shadowRoot\n ?.querySelector(`#${this.getOptionId(this.activeIndex)}`)\n ?.scrollIntoView({ block: 'nearest' })\n }\n\n private addOpenListeners () {\n if (this.openListenersAttached) {\n return\n }\n\n document.addEventListener('focusin', this.handleDocumentFocusIn)\n document.addEventListener('mousedown', this.handleDocumentMouseDown)\n\n const root = this.getRootNode()\n\n if (root !== document) {\n root.addEventListener('focusin', this.handleDocumentFocusIn)\n }\n\n this.openListenersAttached = true\n }\n\n private removeOpenListeners () {\n if (!this.openListenersAttached) {\n return\n }\n\n document.removeEventListener('focusin', this.handleDocumentFocusIn)\n document.removeEventListener('mousedown', this.handleDocumentMouseDown)\n\n const root = this.getRootNode()\n\n if (root !== document) {\n root.removeEventListener('focusin', this.handleDocumentFocusIn)\n }\n\n this.openListenersAttached = false\n }\n\n private handleDocumentFocusIn = (event: Event) => {\n const path = event.composedPath()\n\n if (!path.includes(this)) {\n this.hide()\n }\n }\n\n private handleDocumentMouseDown = (event: MouseEvent) => {\n const path = event.composedPath()\n\n if (!path.includes(this)) {\n this.hide()\n }\n }\n\n private onAnchorMouseDown (event: MouseEvent) {\n if (event.target === this.inputElement) {\n return\n }\n\n event.preventDefault()\n this.inputElement?.focus({ preventScroll: true })\n }\n\n private onInputFocus () {\n this.show()\n }\n\n private openPopupFromKey (focusLast: boolean) {\n if (!this.open) {\n this.show({ focusLast })\n }\n }\n\n private onInputKeyDown (event: KeyboardEvent) {\n const options = this.getFilteredOptions()\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n\n if (!this.open) {\n this.openPopupFromKey(false)\n } else {\n this.activeIndex = this.getNextIndex(this.activeIndex, options, 1)\n this.scrollActiveOptionIntoView()\n }\n break\n case 'ArrowUp':\n event.preventDefault()\n\n if (!this.open) {\n this.openPopupFromKey(true)\n } else {\n this.activeIndex = this.getNextIndex(this.activeIndex, options, -1)\n this.scrollActiveOptionIntoView()\n }\n break\n case 'Enter':\n if (this.open && this.activeIndex >= 0 && options[this.activeIndex]) {\n event.preventDefault()\n this.selectOption(options[this.activeIndex])\n } else if (!this.open) {\n event.preventDefault()\n this.controlTrait.onSubmit()\n }\n break\n case 'Escape':\n if (this.open) {\n event.preventDefault()\n event.stopPropagation()\n this.hide()\n this.inputElement?.focus({ preventScroll: true })\n }\n break\n case 'Tab':\n this.hide()\n break\n default:\n if (!this.open) {\n this.show()\n }\n }\n }\n\n private onListboxMouseDown (event: MouseEvent) {\n event.preventDefault()\n\n if (!(event.target instanceof HTMLElement)) {\n return\n }\n\n const optionElement = event.target.closest('[role=\"option\"]')\n\n if (!optionElement) {\n return\n }\n\n const optionId = optionElement.id\n const index = Number.parseInt(optionId.replace(`${this.listboxId}-option-`, ''), 10)\n const option = this.getFilteredOptions()[index]\n\n if (option) {\n this.selectOption(option)\n }\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,16 @@
1
1
  import { WebComponent } from '../../lib/components';
2
+ import { TemplateResult, PropertyValues } from 'lit';
3
+ export type ComboboxOptionData = {
4
+ value: unknown;
5
+ label: string;
6
+ template?: TemplateResult;
7
+ selectable?: boolean;
8
+ };
9
+ export type ComboboxChangeEvent = CustomEvent<{
10
+ option: ComboboxOptionData;
11
+ }>;
12
+ export type AsyncComboboxOptionsProvider = (query: string) => Promise<ComboboxOptionData[]>;
13
+ export declare function defineAsyncComboboxOptionsProvider<T extends AsyncComboboxOptionsProvider>(provider: T): T;
2
14
  export default class Combobox extends WebComponent {
3
15
  static styles: import('lit').CSSResult;
4
16
  static formAssociated: boolean;
@@ -7,22 +19,37 @@ export default class Combobox extends WebComponent {
7
19
  accessor value: string;
8
20
  accessor placeholder: string;
9
21
  accessor required: boolean;
22
+ accessor selectOnly: boolean;
23
+ accessor asyncOptionsUrl: string;
24
+ accessor asyncOptionsResultsField: string;
25
+ accessor asyncOptionsLabelField: string;
26
+ accessor asyncOptionsValueField: string;
27
+ accessor asyncOptionsProvider: AsyncComboboxOptionsProvider | null;
28
+ accessor optionsFallback: ComboboxOptionData[] | null;
10
29
  private accessor inputElement;
11
30
  private accessor filter;
31
+ private accessor displayValue;
12
32
  private accessor open;
13
33
  private accessor activeIndex;
14
- private inputTrait;
34
+ private controlTrait;
15
35
  private openListenersAttached;
36
+ private updateDebouncedFilter;
37
+ private asyncOptionsTask?;
38
+ private _selectedOption;
16
39
  private readonly listboxId;
17
40
  constructor();
41
+ get selectedOption(): ComboboxOptionData | undefined;
18
42
  disconnectedCallback(): void;
19
- protected render(): import('lit-html').TemplateResult<1>;
43
+ protected willUpdate(changedProperties: PropertyValues<this>): void;
44
+ protected render(): TemplateResult<1>;
20
45
  private getFilteredOptions;
21
- private getOptions;
46
+ private getOptionsFromDOM;
22
47
  private getOptionId;
23
48
  private getInitialActiveIndex;
24
49
  private getNextIndex;
25
50
  private setActiveIndex;
51
+ private updateDisplayValue;
52
+ private updateAsyncOptionsTask;
26
53
  private show;
27
54
  private hide;
28
55
  private selectOption;
@@ -1 +1 @@
1
- {"version":3,"file":"Combobox.d.ts","sourceRoot":"","sources":["../../../src/components/combobox/Combobox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAM9D,OAAO,4BAA4B,CAAA;AACnC,OAAO,uDAAuD,CAAA;AAO9D,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,YAAY;IAChD,MAAM,CAAC,MAAM,0BAAS;IACtB,MAAM,CAAC,cAAc,UAAO;IAG5B,QAAQ,CAAC,KAAK,SAAK;IAGnB,QAAQ,CAAC,IAAI,SAAK;IAGlB,QAAQ,CAAC,KAAK,SAAK;IAGnB,QAAQ,CAAC,WAAW,SAAK;IAGzB,QAAQ,CAAC,QAAQ,UAAQ;IAGzB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgC;IAG7D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAK;IAG5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAG7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAK;IAEjC,OAAO,CAAC,UAAU,CAAY;IAC9B,OAAO,CAAC,qBAAqB,CAAQ;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;;IA6BlC,oBAAoB;IAMpB,SAAS,CAAC,MAAM;IAyEhB,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,IAAI;IAoBZ,OAAO,CAAC,IAAI;IAWZ,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,0BAA0B;IAUlC,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,qBAAqB,CAM5B;IAED,OAAO,CAAC,uBAAuB,CAM9B;IAED,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,cAAc;IA+CtB,OAAO,CAAC,kBAAkB;CAqB3B"}
1
+ {"version":3,"file":"Combobox.d.ts","sourceRoot":"","sources":["../../../src/components/combobox/Combobox.ts"],"names":[],"mappings":"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"}