@mhmo91/schmancy 0.2.9 → 0.2.10

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 (231) hide show
  1. package/dist/{animated-text-vp4fwxY2.cjs → animated-text-B7ot87Yb.cjs} +2 -2
  2. package/dist/{animated-text-vp4fwxY2.cjs.map → animated-text-B7ot87Yb.cjs.map} +1 -1
  3. package/dist/{animated-text-0Ai_OLHl.js → animated-text-BR3J5YzM.js} +3 -3
  4. package/dist/{animated-text-0Ai_OLHl.js.map → animated-text-BR3J5YzM.js.map} +1 -1
  5. package/dist/animated-text.cjs +1 -1
  6. package/dist/animated-text.js +1 -1
  7. package/dist/area.cjs +1 -1
  8. package/dist/{area.component-JScs76M1.js → area.component-BlcOhWYn.js} +3 -3
  9. package/dist/{area.component-JScs76M1.js.map → area.component-BlcOhWYn.js.map} +1 -1
  10. package/dist/{area.component-4wkXNax5.cjs → area.component-Dvbv9xus.cjs} +2 -2
  11. package/dist/{area.component-4wkXNax5.cjs.map → area.component-Dvbv9xus.cjs.map} +1 -1
  12. package/dist/area.js +1 -1
  13. package/dist/autocomplete-GCjmIPKP.cjs +43 -0
  14. package/dist/autocomplete-GCjmIPKP.cjs.map +1 -0
  15. package/dist/autocomplete-vfdJnjAx.js +212 -0
  16. package/dist/autocomplete-vfdJnjAx.js.map +1 -0
  17. package/dist/autocomplete.cjs +1 -1
  18. package/dist/autocomplete.js +1 -1
  19. package/dist/busy.cjs +1 -1
  20. package/dist/busy.js +1 -1
  21. package/dist/button.cjs +1 -1
  22. package/dist/button.js +1 -1
  23. package/dist/card.cjs +1 -1
  24. package/dist/card.js +1 -1
  25. package/dist/{checkbox-Bxp5uWqA.cjs → checkbox-B6wuWHQT.cjs} +2 -2
  26. package/dist/{checkbox-Bxp5uWqA.cjs.map → checkbox-B6wuWHQT.cjs.map} +1 -1
  27. package/dist/{checkbox-colFZOar.js → checkbox-BrVJwQYt.js} +2 -2
  28. package/dist/{checkbox-colFZOar.js.map → checkbox-BrVJwQYt.js.map} +1 -1
  29. package/dist/checkbox.cjs +1 -1
  30. package/dist/checkbox.js +1 -1
  31. package/dist/{chips-7sYLmlxn.js → chips-CCNEOlx2.js} +3 -3
  32. package/dist/{chips-7sYLmlxn.js.map → chips-CCNEOlx2.js.map} +1 -1
  33. package/dist/{chips-BVQttHUJ.cjs → chips-DW4wk4ns.cjs} +2 -2
  34. package/dist/{chips-BVQttHUJ.cjs.map → chips-DW4wk4ns.cjs.map} +1 -1
  35. package/dist/chips.cjs +1 -1
  36. package/dist/chips.js +1 -1
  37. package/dist/components.cjs +1 -1
  38. package/dist/components.js +1 -1
  39. package/dist/content-drawer.cjs +1 -1
  40. package/dist/content-drawer.js +1 -1
  41. package/dist/{date-range-BLusWPVn.js → date-range-BqsNgxis.js} +3 -3
  42. package/dist/{date-range-BLusWPVn.js.map → date-range-BqsNgxis.js.map} +1 -1
  43. package/dist/{date-range-_7Vry7wT.cjs → date-range-s4nUUXP-.cjs} +2 -2
  44. package/dist/{date-range-_7Vry7wT.cjs.map → date-range-s4nUUXP-.cjs.map} +1 -1
  45. package/dist/date-range.cjs +1 -1
  46. package/dist/date-range.js +1 -1
  47. package/dist/{delay-B8fYtrMp.js → delay-DrTqFWuI.js} +2 -2
  48. package/dist/{delay-B8fYtrMp.js.map → delay-DrTqFWuI.js.map} +1 -1
  49. package/dist/{delay-ikznAH-1.cjs → delay-ZjnwZygz.cjs} +2 -2
  50. package/dist/{delay-ikznAH-1.cjs.map → delay-ZjnwZygz.cjs.map} +1 -1
  51. package/dist/delay.cjs +1 -1
  52. package/dist/delay.js +1 -1
  53. package/dist/{divider-DJ9Gx64O.cjs → divider-C-olgct1.cjs} +2 -2
  54. package/dist/{divider-DJ9Gx64O.cjs.map → divider-C-olgct1.cjs.map} +1 -1
  55. package/dist/{divider-DLOwEvrd.js → divider-DE_qGu0Z.js} +3 -3
  56. package/dist/{divider-DLOwEvrd.js.map → divider-DE_qGu0Z.js.map} +1 -1
  57. package/dist/divider.cjs +1 -1
  58. package/dist/divider.js +1 -1
  59. package/dist/{form-OYWlsQ4R.cjs → form-BftBHIa9.cjs} +2 -2
  60. package/dist/{form-OYWlsQ4R.cjs.map → form-BftBHIa9.cjs.map} +1 -1
  61. package/dist/{form-qBkXHUCV.js → form-CiopR1cw.js} +2 -2
  62. package/dist/{form-qBkXHUCV.js.map → form-CiopR1cw.js.map} +1 -1
  63. package/dist/form.cjs +1 -1
  64. package/dist/form.js +1 -1
  65. package/dist/{icon-DDILI2Kw.cjs → icon-C3VNzTd2.cjs} +2 -2
  66. package/dist/{icon-DDILI2Kw.cjs.map → icon-C3VNzTd2.cjs.map} +1 -1
  67. package/dist/{icon-button-CP_pX4yw.cjs → icon-button-CEcYwu6h.cjs} +11 -11
  68. package/dist/icon-button-CEcYwu6h.cjs.map +1 -0
  69. package/dist/{icon-button-tvckJDEE.js → icon-button-cThH-HDx.js} +9 -9
  70. package/dist/icon-button-cThH-HDx.js.map +1 -0
  71. package/dist/{icon-BUV18-Pm.js → icon-uV29Oo_I.js} +3 -3
  72. package/dist/{icon-BUV18-Pm.js.map → icon-uV29Oo_I.js.map} +1 -1
  73. package/dist/icons.cjs +1 -1
  74. package/dist/icons.js +1 -1
  75. package/dist/index.cjs +1 -1
  76. package/dist/index.js +32 -32
  77. package/dist/input-BNWPVs3H.js +124 -0
  78. package/dist/input-BNWPVs3H.js.map +1 -0
  79. package/dist/input-shCt07iX.cjs +43 -0
  80. package/dist/input-shCt07iX.cjs.map +1 -0
  81. package/dist/input.cjs +1 -1
  82. package/dist/input.js +1 -1
  83. package/dist/layout.cjs +1 -1
  84. package/dist/layout.js +1 -1
  85. package/dist/list.cjs +1 -1
  86. package/dist/list.js +1 -1
  87. package/dist/{litElement.mixin-Bczhguqz.js → litElement.mixin-Bn8Rl6md.js} +2 -2
  88. package/dist/{litElement.mixin-Bczhguqz.js.map → litElement.mixin-Bn8Rl6md.js.map} +1 -1
  89. package/dist/{litElement.mixin-dZ5gFldT.cjs → litElement.mixin-CqG5Vzn4.cjs} +2 -2
  90. package/dist/{litElement.mixin-dZ5gFldT.cjs.map → litElement.mixin-CqG5Vzn4.cjs.map} +1 -1
  91. package/dist/{menu-CHUomCth.cjs → menu-BsjLQTfd.cjs} +2 -2
  92. package/dist/{menu-CHUomCth.cjs.map → menu-BsjLQTfd.cjs.map} +1 -1
  93. package/dist/{menu-C20Ngz8k.js → menu-CK0Aunqg.js} +3 -3
  94. package/dist/{menu-C20Ngz8k.js.map → menu-CK0Aunqg.js.map} +1 -1
  95. package/dist/menu.cjs +1 -1
  96. package/dist/menu.js +1 -1
  97. package/dist/nav-drawer.cjs +1 -1
  98. package/dist/nav-drawer.js +1 -1
  99. package/dist/notification.cjs +1 -1
  100. package/dist/notification.js +1 -1
  101. package/dist/{option-DqO86_nY.js → option-C3ovVy8Q.js} +2 -2
  102. package/dist/{option-DqO86_nY.js.map → option-C3ovVy8Q.js.map} +1 -1
  103. package/dist/{option-PVtp_mrs.cjs → option-CEN9FFeV.cjs} +2 -2
  104. package/dist/{option-PVtp_mrs.cjs.map → option-CEN9FFeV.cjs.map} +1 -1
  105. package/dist/option.cjs +1 -1
  106. package/dist/option.js +1 -1
  107. package/dist/{outlet-BzsckqZ8.cjs → outlet-BMkGxj9Y.cjs} +2 -2
  108. package/dist/{outlet-BzsckqZ8.cjs.map → outlet-BMkGxj9Y.cjs.map} +1 -1
  109. package/dist/{outlet-DcBtaiCX.js → outlet-CbHO2KGb.js} +2 -2
  110. package/dist/{outlet-DcBtaiCX.js.map → outlet-CbHO2KGb.js.map} +1 -1
  111. package/dist/{payment-card-form-Bbj5Ie3_.js → payment-card-form-CSjKMW71.js} +3 -3
  112. package/dist/{payment-card-form-Bbj5Ie3_.js.map → payment-card-form-CSjKMW71.js.map} +1 -1
  113. package/dist/{payment-card-form-DdrmXQgW.cjs → payment-card-form-ClNJIflz.cjs} +2 -2
  114. package/dist/{payment-card-form-DdrmXQgW.cjs.map → payment-card-form-ClNJIflz.cjs.map} +1 -1
  115. package/dist/{radio-group-BdFNVPBX.js → radio-group-BaAICOCk.js} +2 -2
  116. package/dist/{radio-group-BdFNVPBX.js.map → radio-group-BaAICOCk.js.map} +1 -1
  117. package/dist/{radio-group-IYmnpHoM.cjs → radio-group-Dq8G5fBE.cjs} +2 -2
  118. package/dist/{radio-group-IYmnpHoM.cjs.map → radio-group-Dq8G5fBE.cjs.map} +1 -1
  119. package/dist/radio-group.cjs +1 -1
  120. package/dist/radio-group.js +1 -1
  121. package/dist/{scroll-qTSe885X.js → scroll-BJ_3vZ-c.js} +2 -2
  122. package/dist/{scroll-qTSe885X.js.map → scroll-BJ_3vZ-c.js.map} +1 -1
  123. package/dist/{scroll-O39qwEAR.cjs → scroll-CUpYxnFS.cjs} +2 -2
  124. package/dist/{scroll-O39qwEAR.cjs.map → scroll-CUpYxnFS.cjs.map} +1 -1
  125. package/dist/{select-DGgGHXxb.cjs → select-DSOpxxMT.cjs} +3 -3
  126. package/dist/select-DSOpxxMT.cjs.map +1 -0
  127. package/dist/{select-C1qEu5xm.js → select-DzmFjt61.js} +7 -7
  128. package/dist/select-DzmFjt61.js.map +1 -0
  129. package/dist/select.cjs +1 -1
  130. package/dist/select.js +1 -1
  131. package/dist/{sheet-CTZGiS7C.cjs → sheet-BnBjA5tD.cjs} +2 -2
  132. package/dist/{sheet-CTZGiS7C.cjs.map → sheet-BnBjA5tD.cjs.map} +1 -1
  133. package/dist/{sheet-DptJn65A.js → sheet-Co0cHr37.js} +3 -3
  134. package/dist/{sheet-DptJn65A.js.map → sheet-Co0cHr37.js.map} +1 -1
  135. package/dist/sheet.cjs +1 -1
  136. package/dist/sheet.js +1 -1
  137. package/dist/{slider-DF0hGetl.cjs → slider-CJdYHduh.cjs} +2 -2
  138. package/dist/{slider-DF0hGetl.cjs.map → slider-CJdYHduh.cjs.map} +1 -1
  139. package/dist/{slider-DuC6D-d4.js → slider-dtJketj4.js} +3 -3
  140. package/dist/{slider-DuC6D-d4.js.map → slider-dtJketj4.js.map} +1 -1
  141. package/dist/slider.cjs +1 -1
  142. package/dist/slider.js +1 -1
  143. package/dist/{spinner-CC4zDuEm.cjs → spinner-BB1NW_4b.cjs} +2 -2
  144. package/dist/{spinner-CC4zDuEm.cjs.map → spinner-BB1NW_4b.cjs.map} +1 -1
  145. package/dist/{spinner-CNgjSbB2.js → spinner-ssJhxM2o.js} +3 -3
  146. package/dist/{spinner-CNgjSbB2.js.map → spinner-ssJhxM2o.js.map} +1 -1
  147. package/dist/{surface-DVYDiR06.js → surface-DeLQUjNN.js} +3 -3
  148. package/dist/surface-DeLQUjNN.js.map +1 -0
  149. package/dist/{surface-DgEJ5kCf.cjs → surface-jQagrINO.cjs} +3 -3
  150. package/dist/surface-jQagrINO.cjs.map +1 -0
  151. package/dist/surface.cjs +1 -1
  152. package/dist/surface.js +1 -1
  153. package/dist/{table-DaiP2A-P.cjs → table-Co0-nm4Y.cjs} +2 -2
  154. package/dist/{table-DaiP2A-P.cjs.map → table-Co0-nm4Y.cjs.map} +1 -1
  155. package/dist/{table-CvT4bvRV.js → table-DZIjJKTT.js} +2 -2
  156. package/dist/{table-CvT4bvRV.js.map → table-DZIjJKTT.js.map} +1 -1
  157. package/dist/table.cjs +1 -1
  158. package/dist/table.js +1 -1
  159. package/dist/{tabs-group-BsYXf7-L.cjs → tabs-group-Doix3mBX.cjs} +2 -2
  160. package/dist/{tabs-group-BsYXf7-L.cjs.map → tabs-group-Doix3mBX.cjs.map} +1 -1
  161. package/dist/{tabs-group-uSIERHrS.js → tabs-group-JXceC_AX.js} +2 -2
  162. package/dist/{tabs-group-uSIERHrS.js.map → tabs-group-JXceC_AX.js.map} +1 -1
  163. package/dist/tabs.cjs +1 -1
  164. package/dist/tabs.js +1 -1
  165. package/dist/{tailwind.mixin-ivf7aKpx.cjs → tailwind.mixin-C3pXEh-C.cjs} +2 -2
  166. package/dist/{tailwind.mixin-ivf7aKpx.cjs.map → tailwind.mixin-C3pXEh-C.cjs.map} +1 -1
  167. package/dist/{tailwind.mixin-DaorKUB-.js → tailwind.mixin-C5OzBKVB.js} +14 -14
  168. package/dist/{tailwind.mixin-DaorKUB-.js.map → tailwind.mixin-C5OzBKVB.js.map} +1 -1
  169. package/dist/teleport.cjs +1 -1
  170. package/dist/{teleport.component-CHZvUCGh.cjs → teleport.component-BXtXmHVa.cjs} +10 -10
  171. package/dist/teleport.component-BXtXmHVa.cjs.map +1 -0
  172. package/dist/{teleport.component-BJp0sdwT.js → teleport.component-Cq8hZD_o.js} +35 -35
  173. package/dist/teleport.component-Cq8hZD_o.js.map +1 -0
  174. package/dist/teleport.js +1 -1
  175. package/dist/{textarea-CmiDJ6vB.cjs → textarea-BfNvgfZ_.cjs} +2 -2
  176. package/dist/{textarea-CmiDJ6vB.cjs.map → textarea-BfNvgfZ_.cjs.map} +1 -1
  177. package/dist/{textarea-CBVhP0PO.js → textarea-vre0j7PW.js} +2 -2
  178. package/dist/{textarea-CBVhP0PO.js.map → textarea-vre0j7PW.js.map} +1 -1
  179. package/dist/textarea.cjs +1 -1
  180. package/dist/textarea.js +1 -1
  181. package/dist/{theme-button-oUEwzPgP.cjs → theme-button-CQiYi_67.cjs} +2 -2
  182. package/dist/{theme-button-oUEwzPgP.cjs.map → theme-button-CQiYi_67.cjs.map} +1 -1
  183. package/dist/{theme-button-D1kqQf95.js → theme-button-D8dDywwF.js} +2 -2
  184. package/dist/{theme-button-D1kqQf95.js.map → theme-button-D8dDywwF.js.map} +1 -1
  185. package/dist/theme-button.cjs +1 -1
  186. package/dist/theme-button.js +1 -1
  187. package/dist/theme.cjs +1 -1
  188. package/dist/theme.component-BNYF3EuP.cjs +3 -0
  189. package/dist/{theme.component-C-dSR7fa.cjs.map → theme.component-BNYF3EuP.cjs.map} +1 -1
  190. package/dist/{theme.component-C7KaOcEZ.js → theme.component-iFFaMUIB.js} +43 -43
  191. package/dist/{theme.component-C7KaOcEZ.js.map → theme.component-iFFaMUIB.js.map} +1 -1
  192. package/dist/theme.js +1 -1
  193. package/dist/{tree-CjGzyEO3.cjs → tree-BGkPGaY8.cjs} +2 -2
  194. package/dist/{tree-CjGzyEO3.cjs.map → tree-BGkPGaY8.cjs.map} +1 -1
  195. package/dist/{tree-DnRjW773.js → tree-Dzh0J35T.js} +2 -2
  196. package/dist/{tree-DnRjW773.js.map → tree-Dzh0J35T.js.map} +1 -1
  197. package/dist/tree.cjs +1 -1
  198. package/dist/tree.js +1 -1
  199. package/dist/{typewriter-By3kfvcw.cjs → typewriter-ChAfM5s5.cjs} +2 -2
  200. package/dist/{typewriter-By3kfvcw.cjs.map → typewriter-ChAfM5s5.cjs.map} +1 -1
  201. package/dist/{typewriter-Bl4oL7Nj.js → typewriter-v9NtjriH.js} +4 -4
  202. package/dist/{typewriter-Bl4oL7Nj.js.map → typewriter-v9NtjriH.js.map} +1 -1
  203. package/dist/typewriter.cjs +1 -1
  204. package/dist/typewriter.js +1 -1
  205. package/dist/{typography-ZAIIeqBH.js → typography-BsfF4nMf.js} +2 -2
  206. package/dist/{typography-ZAIIeqBH.js.map → typography-BsfF4nMf.js.map} +1 -1
  207. package/dist/{typography-CDoqXfnX.cjs → typography-NRVaaUrd.cjs} +2 -2
  208. package/dist/{typography-CDoqXfnX.cjs.map → typography-NRVaaUrd.cjs.map} +1 -1
  209. package/dist/typography.cjs +1 -1
  210. package/dist/typography.js +1 -1
  211. package/package.json +2 -1
  212. package/types/src/autocomplete/autocomplete.d.ts +95 -9
  213. package/types/src/input/input.d.ts +58 -47
  214. package/types/src/theme/theme.component.d.ts +1 -0
  215. package/dist/autocomplete-CiNm2SkD.cjs +0 -42
  216. package/dist/autocomplete-CiNm2SkD.cjs.map +0 -1
  217. package/dist/autocomplete-Cm5NEwT6.js +0 -189
  218. package/dist/autocomplete-Cm5NEwT6.js.map +0 -1
  219. package/dist/icon-button-CP_pX4yw.cjs.map +0 -1
  220. package/dist/icon-button-tvckJDEE.js.map +0 -1
  221. package/dist/input-BH04wAXW.cjs +0 -42
  222. package/dist/input-BH04wAXW.cjs.map +0 -1
  223. package/dist/input-Dxk8fmQJ.js +0 -118
  224. package/dist/input-Dxk8fmQJ.js.map +0 -1
  225. package/dist/select-C1qEu5xm.js.map +0 -1
  226. package/dist/select-DGgGHXxb.cjs.map +0 -1
  227. package/dist/surface-DVYDiR06.js.map +0 -1
  228. package/dist/surface-DgEJ5kCf.cjs.map +0 -1
  229. package/dist/teleport.component-BJp0sdwT.js.map +0 -1
  230. package/dist/teleport.component-CHZvUCGh.cjs.map +0 -1
  231. package/dist/theme.component-C-dSR7fa.cjs +0 -3
@@ -1,37 +1,123 @@
1
1
  import SchmancyInput from '@schmancy/input/input';
2
2
  import SchmancyOption from '@schmancy/option/option';
3
- import { Subject } from 'rxjs';
4
- import { SchmancyInputChangeEvent } from '..';
3
+ import type { SchmancyInputChangeEvent } from '..';
5
4
  export type SchmancyAutocompleteChangeEvent = CustomEvent<{
6
5
  value: string | string[];
7
6
  }>;
8
7
  declare const SchmancyAutocomplete_base: CustomElementConstructor & import("@mixins/index").Constructor<import("lit").LitElement> & import("@mixins/index").Constructor<import("@mixins/index").IBaseMixin>;
9
8
  export default class SchmancyAutocomplete extends SchmancyAutocomplete_base {
10
- required: any;
9
+ /**
10
+ * Whether input is required for form validity.
11
+ */
12
+ required: boolean;
13
+ /**
14
+ * Placeholder text for the input.
15
+ */
11
16
  placeholder: string;
17
+ /**
18
+ * Programmatic value of the autocomplete. Setting this
19
+ * after the element is rendered will now update the display.
20
+ */
12
21
  value: string;
22
+ /**
23
+ * Label for the input (floating label or similar).
24
+ */
13
25
  label: string;
26
+ /**
27
+ * Max height of the dropdown options container.
28
+ */
14
29
  maxHeight: string;
30
+ /**
31
+ * Whether multiple selections are allowed.
32
+ */
15
33
  multi: boolean;
34
+ /**
35
+ * A local property to store the *display* value (label text).
36
+ * This is separate from the raw `value`.
37
+ */
16
38
  valueLabel: string;
17
39
  inputRef: import("lit-html/directives/ref").Ref<HTMLInputElement>;
18
- ul: HTMLUListElement;
19
- empty: HTMLLIElement;
40
+ /**
41
+ * The main <ul> with id="options".
42
+ */
20
43
  optionsContainer: HTMLUListElement;
44
+ /**
45
+ * The "no results found" <li> element.
46
+ */
47
+ empty: HTMLLIElement;
48
+ /**
49
+ * The SchmancyInput element (your visible text input).
50
+ */
21
51
  input: SchmancyInput;
52
+ /**
53
+ * All the <schmancy-option> children assigned via the default slot.
54
+ */
22
55
  options: SchmancyOption[];
23
- searchTerm$: Subject<string>;
24
- searchTermSubscription: any;
56
+ private readonly searchTerm$;
57
+ connectedCallback(): void;
58
+ /**
59
+ * firstUpdated (similar to componentDidMount in React).
60
+ * We can do an initial sync of the input's display text
61
+ * if a `value` was pre-set.
62
+ */
25
63
  firstUpdated(): void;
64
+ /**
65
+ * This will be invoked *any time* a reactive property changes
66
+ * after the first render. We specifically check if `value` changed,
67
+ * so we can update the display text (and selected states) if needed.
68
+ */
69
+ protected updated(changedProps: Map<string | number | symbol, unknown>): void;
70
+ /**
71
+ * If user assigned new <schmancy-option> children, or changed them,
72
+ * we also want to ensure the "no results" is correct and that
73
+ * our input text is still in sync.
74
+ */
75
+ private handleSlotChange;
76
+ /**
77
+ * For multi-select, ensure that any `value` strings
78
+ * are reflected in the child <schmancy-option>'s `selected` property.
79
+ * For single select, do similarly for the one matching option.
80
+ */
81
+ private syncSelectionFromValue;
82
+ /**
83
+ * Takes the current `value` (and child <schmancy-option>s) and updates
84
+ * the displayed text in the schmancy-input. Called whenever we need
85
+ * to re-sync the visible input text to the actual data.
86
+ */
26
87
  updateInputValue(): void;
88
+ /**
89
+ * Show the dropdown list, using Floating UI for positioning.
90
+ */
27
91
  showOptions(): Promise<void>;
92
+ /**
93
+ * Hide the dropdown immediately (no animation).
94
+ */
28
95
  hideOptions(): void;
96
+ /**
97
+ * Called whenever the user types in the schmancy-input.
98
+ */
29
99
  handleInputChange(event: SchmancyInputChangeEvent): void;
100
+ /**
101
+ * Called whenever user clicks or taps an <schmancy-option>.
102
+ */
30
103
  handleOptionClick(value: string): void;
31
- reportValidity(): boolean;
104
+ /**
105
+ * Check validity of the selected value(s) to satisfy forms.
106
+ */
32
107
  checkValidity(): boolean;
108
+ /**
109
+ * Actually cause form validation checks if needed.
110
+ */
111
+ reportValidity(): boolean;
112
+ /**
113
+ * Attempt to prevent iOS scrolling the background page
114
+ * while swiping within the options list. (NB: This logic
115
+ * currently needs a bit more nuance to be robust.)
116
+ */
117
+ private startY;
118
+ private handleTouchStart;
119
+ private preventScroll;
33
120
  render(): import("lit-html").TemplateResult<1>;
34
- preventScroll(event: any): void;
35
121
  }
36
122
  declare global {
37
123
  interface HTMLElementTagNameMap {
@@ -1,55 +1,59 @@
1
1
  import { LitElement } from 'lit';
2
+ declare global {
3
+ interface HTMLElementTagNameMap {
4
+ 'schmancy-input': SchmancyInput;
5
+ }
6
+ }
7
+ /**
8
+ * An autocomplete type (expand or customize as needed).
9
+ */
10
+ type AutoFill = 'off' | 'on' | 'name' | 'username' | 'email' | 'tel' | 'url' | 'new-password' | 'current-password' | 'one-time-code';
11
+ type EventDetails = {
12
+ value: string;
13
+ };
14
+ export type SchmancyInputChangeEvent = CustomEvent<EventDetails>;
2
15
  declare const SchmancyInput_base: import("@mixins/index").Constructor<CustomElementConstructor> & import("@mixins/index").Constructor<import("@mixins/index").ITailwindElementMixin> & import("@mixins/index").Constructor<LitElement> & import("@mixins/index").Constructor<import("@mixins/index").IBaseMixin>;
16
+ /**
17
+ * `schmancy-input` – A custom input component.
18
+ */
3
19
  export default class SchmancyInput extends SchmancyInput_base {
4
20
  /**
5
21
  * The label of the control.
6
22
  * @attr
7
- * @type {string} label
23
+ * @type {string}
8
24
  * @default ''
9
- * @public
10
25
  */
11
26
  label: string;
12
27
  /**
13
28
  * The type of the control.
14
29
  * @attr
15
- * @type {'email' | 'number' | 'password' | 'search' | 'tel' | 'text' | 'url' | 'date' | 'datetime' | 'time' | 'month' | 'week' | 'color' | 'file'}
16
30
  * @default 'text'
17
- * @public
18
- **/
31
+ */
19
32
  type: 'email' | 'number' | 'password' | 'search' | 'tel' | 'text' | 'url' | 'date' | 'datetime' | 'time' | 'month' | 'week' | 'color' | 'file';
20
33
  clickable: boolean;
21
34
  /**
22
35
  * The name of the control.
23
- * @attr name
24
- * @type {string} name
36
+ * @attr
25
37
  * @default 'name_' + Date.now()
26
- * @public
27
38
  */
28
39
  name: string;
29
40
  /**
30
41
  * The placeholder of the control.
31
- * @attr placeholder
32
- * @type {string}
42
+ * @attr
33
43
  * @default ''
34
- * @public
35
44
  */
36
45
  placeholder: string;
37
46
  /**
38
47
  * The value of the control.
39
- * @attr {string} value - The value of the control.
40
- * @type {string}
48
+ * @attr
41
49
  * @default ''
42
- * @public
43
50
  */
44
51
  value: string;
45
52
  /**
46
53
  * The pattern attribute of the control.
47
54
  * @attr
48
- * @type {string}
49
- * @default undefiend
50
- * @public
51
55
  */
52
- pattern: any;
56
+ pattern?: string;
53
57
  required: boolean;
54
58
  disabled: boolean;
55
59
  readonly: boolean;
@@ -58,42 +62,38 @@ export default class SchmancyInput extends SchmancyInput_base {
58
62
  /**
59
63
  * The inputmode attribute of the control.
60
64
  * @attr
61
- * @type {'none' | 'text' | 'decimal' | 'numeric' | 'tel' | 'search' | 'email' | 'url'}
62
- * @default 'none'
63
- * @public
65
+ * @default undefined
64
66
  */
65
- inputmode: 'none' | 'text' | 'decimal' | 'numeric' | 'tel' | 'search' | 'email' | 'url';
67
+ inputmode?: 'none' | 'text' | 'decimal' | 'numeric' | 'tel' | 'search' | 'email' | 'url';
66
68
  /**
67
69
  * The minlength attribute of the control.
68
70
  * @attr
69
71
  */
70
- minlength: number | undefined;
72
+ minlength?: number;
71
73
  /**
72
74
  * The maxlength attribute of the control.
73
75
  * @attr
74
76
  */
75
- maxlength: number;
77
+ maxlength?: number;
76
78
  /**
77
79
  * The min attribute of the control.
78
80
  * @attr
79
81
  */
80
- min: string;
82
+ min?: string;
81
83
  /**
82
84
  * The max attribute of the control.
83
85
  * @attr
84
86
  */
85
- max: string;
87
+ max?: string;
86
88
  /**
87
89
  * The step attribute of the control.
88
90
  * @attr
89
91
  */
90
- step: number;
92
+ step?: number;
91
93
  /**
92
94
  * The autofocus attribute of the control.
93
95
  * @attr
94
- * @type {boolean}
95
96
  * @default false
96
- * @public
97
97
  */
98
98
  autofocus: boolean;
99
99
  /**
@@ -101,43 +101,54 @@ export default class SchmancyInput extends SchmancyInput_base {
101
101
  * @attr
102
102
  */
103
103
  autocomplete: AutoFill;
104
+ /**
105
+ * tabIndex for focusing by tab key.
106
+ */
104
107
  tabIndex: number;
105
- inputElement: HTMLInputElement;
106
- hint: string | undefined;
108
+ hint?: string;
107
109
  error: boolean;
108
- constructor();
110
+ inputElement: HTMLInputElement;
111
+ inputRef: import("lit-html/directives/ref").Ref<HTMLInputElement>;
112
+ /** Form-associated custom elements support. */
113
+ static formAssociated: boolean;
109
114
  protected static shadowRootOptions: {
110
115
  delegatesFocus: boolean;
111
116
  mode: ShadowRootMode;
112
117
  serializable?: boolean;
113
118
  slotAssignment?: SlotAssignmentMode;
114
119
  };
115
- static formAssociated: boolean;
116
- internals: ElementInternals | undefined;
117
- inputRef: import("lit-html/directives/ref").Ref<HTMLInputElement>;
120
+ private internals?;
121
+ constructor();
118
122
  get form(): HTMLFormElement;
123
+ /**
124
+ * (Optional) Whenever value changes, sync with form internals for
125
+ * form submission (if you're using form-associated custom elements).
126
+ */
127
+ protected updated(changedProps: Map<string, unknown>): void;
119
128
  /** Checks for validity of the control and shows the browser message if it's invalid. */
120
129
  reportValidity(): boolean;
121
- /** Checks for validity of the control and emits the invalid event if it invalid. */
130
+ /** Checks for validity of the control and emits the invalid event if it is invalid. */
122
131
  checkValidity(): boolean;
123
132
  /** Sets a custom validity message. */
124
133
  setCustomValidity(message: string): void;
125
134
  firstUpdated(): void;
126
135
  /** Selects all text within the input. */
127
136
  select(): void;
128
- validity(): ValidityState | undefined;
137
+ /** Returns the internal validity state object. */
138
+ getValidity(): ValidityState | undefined;
139
+ /**
140
+ * Override focus so that focusing <schmancy-input> actually focuses
141
+ * the internal <input>.
142
+ */
129
143
  focus(options?: FocusOptions): void;
144
+ /**
145
+ * Same with click; bubble a click out if needed, but delegate to internal input.
146
+ */
130
147
  click(): void;
148
+ /**
149
+ * Same with blur; bubble the event.
150
+ */
131
151
  blur(): void;
132
- protected render(): unknown;
133
- }
134
- type EventDetails = {
135
- value: string;
136
- };
137
- export type SchmancyInputChangeEvent = CustomEvent<EventDetails>;
138
- declare global {
139
- interface HTMLElementTagNameMap {
140
- 'schmancy-input': SchmancyInput;
141
- }
152
+ protected render(): import("lit-html").TemplateResult<1>;
142
153
  }
143
154
  export {};
@@ -5,6 +5,7 @@ export declare class SchmancyThemeComponent extends SchmancyThemeComponent_base
5
5
  color: string;
6
6
  scheme: 'dark' | 'light' | 'auto';
7
7
  root: boolean;
8
+ theme: Partial<TSchmancyTheme>;
8
9
  connectedCallback(): void;
9
10
  registerTheme(): void;
10
11
  registerThemeValues(prefix: string, path: string, value: Partial<TSchmancyTheme>): string | undefined;
@@ -1,42 +0,0 @@
1
- "use strict";const P=require("@floating-ui/dom"),H=require("rxjs");require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const D=require("./litElement.mixin-dZ5gFldT.cjs");require("./tailwind.mixin-ivf7aKpx.cjs");const j=require("./ripple-C2BHbhcS.cjs"),L=require("./theme.interface-Xg5Zi46a.cjs"),R=require("lit"),u=require("lit/decorators.js"),V=require("lit/directives/ref.js"),$=require("rxjs/operators"),C=new Uint32Array(65536),U=(t,e)=>{if(t.length<e.length){const o=e;e=t,t=o}return e.length===0?t.length:t.length<=32?((o,i)=>{const n=o.length,r=i.length,d=1<<n-1;let h=-1,f=0,A=n,a=n;for(;a--;)C[o.charCodeAt(a)]|=1<<a;for(a=0;a<r;a++){let g=C[i.charCodeAt(a)];const v=g|f;g|=(g&h)+h^h,f|=~(g|h),h&=g,f&d&&A++,h&d&&A--,f=f<<1|1,h=h<<1|~(v|f),f&=v}for(a=n;a--;)C[o.charCodeAt(a)]=0;return A})(t,e):((o,i)=>{const n=i.length,r=o.length,d=[],h=[],f=Math.ceil(n/32),A=Math.ceil(r/32);for(let s=0;s<f;s++)h[s]=-1,d[s]=0;let a=0;for(;a<A-1;a++){let s=0,m=-1;const w=32*a,q=Math.min(32,r)+w;for(let l=w;l<q;l++)C[o.charCodeAt(l)]|=1<<l;for(let l=0;l<n;l++){const x=C[i.charCodeAt(l)],b=h[l/32|0]>>>l&1,y=d[l/32|0]>>>l&1,M=x|s,T=((x|y)&m)+m^m|x|y;let O=s|~(T|m),S=m&T;O>>>31^b&&(h[l/32|0]^=1<<l),S>>>31^y&&(d[l/32|0]^=1<<l),O=O<<1|b,S=S<<1|y,m=S|~(M|O),s=O&M}for(let l=w;l<q;l++)C[o.charCodeAt(l)]=0}let g=0,v=-1;const k=32*a,I=Math.min(32,r-k)+k;for(let s=k;s<I;s++)C[o.charCodeAt(s)]|=1<<s;let E=r;for(let s=0;s<n;s++){const m=C[i.charCodeAt(s)],w=h[s/32|0]>>>s&1,q=d[s/32|0]>>>s&1,l=m|g,x=((m|q)&v)+v^v|m|q;let b=g|~(x|v),y=v&x;E+=b>>>r-1&1,E-=y>>>r-1&1,b>>>31^w&&(h[s/32|0]^=1<<s),y>>>31^q&&(d[s/32|0]^=1<<s),b=b<<1|w,y=y<<1|q,v=y|~(l|b),g=b&l}for(let s=k;s<I;s++)C[o.charCodeAt(s)]=0;return E})(t,e)};var Y=Object.defineProperty,z=Object.getOwnPropertyDescriptor,c=(t,e,o,i)=>{for(var n,r=i>1?void 0:i?z(e,o):e,d=t.length-1;d>=0;d--)(n=t[d])&&(r=(i?n(e,o,r):n(r))||r);return i&&r&&Y(e,o,r),r};let p=class extends D.$LitElement(":host{display:block;border:unset!important;line-height:unset!important;background:unset!important;padding:unset!important;font-size:unset!important;box-shadow:unset!important}:host:focus{box-shadow:unset!important}"){constructor(){super(...arguments),this.placeholder="",this.value="",this.label="",this.maxHeight="25vh",this.multi=!1,this.valueLabel="",this.inputRef=V.createRef(),this.searchTerm$=new H.Subject}firstUpdated(){this.searchTermSubscription=this.searchTerm$.pipe($.takeUntil(this.disconnecting),$.distinctUntilChanged(),$.tap(t=>{const e=t.trim().toLowerCase(),o=this.options.map(i=>{const n=i.label.toLowerCase();return{option:i,levDistance:U(e,n)}}).filter(({option:i,levDistance:n})=>e.length<3||n<=i.label.toLowerCase().length-e.length).sort((i,n)=>i.levDistance-n.levDistance);this.empty.hidden=o.map(({option:i})=>(i.hidden=!1,i)).some(i=>!i.hidden),this.options.forEach(i=>{i.hidden=!o.some(n=>n.option===i)}),this.requestUpdate()})).subscribe(()=>{this.showOptions()}),H.fromEvent(this,"focusout").pipe($.takeUntil(this.disconnecting),$.filter(t=>{var e;return((e=t.relatedTarget)==null?void 0:e.tagName)!=="SCHMANCY-OPTION"}),$.switchMap(()=>{const t=this.ul.animate([{opacity:1},{opacity:0}],{duration:250,easing:"cubic-bezier(0.5, 0.01, 0.25, 1)"}),e=new Promise(o=>{t.onfinish=()=>{var i,n;(i=this.ul)==null||i.style.setProperty("display","none"),(n=this.ul)==null||n.style.setProperty("opacity","1"),o()}});return H.from(e)})).subscribe({next:()=>{var t,e,o;this.multi?(t=this.inputRef.value)==null||t.setAttribute("value",this.options.filter(i=>i.selected).map(i=>i.label).join(", ")):(o=this.inputRef.value)==null||o.setAttribute("value",((e=this.options.find(i=>i.value===this.value))==null?void 0:e.label)??"")}}),this.updateInputValue()}updateInputValue(){requestAnimationFrame(()=>{var t;if(this.multi){const e=this.value.split(",").map(o=>{var i;return(i=this.options.find(n=>n.value===o))==null?void 0:i.label});this.input.value=e.join(", ")}else this.input.value=((t=this.options.find(e=>e.value===this.value))==null?void 0:t.label)??""})}async showOptions(){var o,i;(o=this.ul)==null||o.removeAttribute("hidden"),(i=this.ul)==null||i.style.setProperty("display","block");const{x:t,y:e}=await P.computePosition(this.input,this.ul,{placement:"bottom-start",middleware:[P.offset(5),P.flip(),P.shift({padding:5})]});Object.assign(this.ul.style,{left:`${t}px`,top:`${e}px`,position:"absolute",zIndex:"9999",maxHeight:this.maxHeight,overflowY:"auto"})}hideOptions(){var t,e;(t=this.ul)==null||t.setAttribute("hidden","true"),(e=this.ul)==null||e.style.setProperty("display","none")}handleInputChange(t){t.preventDefault(),t.stopPropagation();const e=t.detail.value;this.searchTerm$.next(e)}handleOptionClick(t){if(this.multi){const e=this.options.find(o=>o.value===t);e&&(e.selected=!e.selected),this.updateInputValue(),this.dispatchEvent(new CustomEvent("change",{detail:{value:this.options.filter(o=>o.selected).map(o=>o.value)},bubbles:!0,composed:!0}))}else this.hideOptions(),this.value=t,this.updateInputValue(),this.dispatchEvent(new CustomEvent("change",{detail:{value:t},bubbles:!0,composed:!0}))}reportValidity(){var t;return(t=this.inputRef.value)==null?void 0:t.reportValidity()}checkValidity(){return this.multi?this.options.some(t=>t.selected):!!this.value}render(){const t={maxHeight:this.maxHeight};return R.html`
2
- <div class="relative">
3
- <slot name="trigger">
4
- <schmancy-input
5
- autocomplete="off"
6
- class="w-full"
7
- ${V.ref(this.inputRef)}
8
- .required=${this.required}
9
- id="input"
10
- .label=${this.label}
11
- @focus=${this.showOptions}
12
- clickable
13
- type="search"
14
- inputmode="text"
15
- placeholder=${this.placeholder}
16
- @change=${this.handleInputChange}
17
- >
18
- </schmancy-input>
19
- </slot>
20
- <ul
21
- tabindex="-1"
22
- class=${this.classMap({"absolute z-30 mt-1 w-full overflow-auto rounded-md shadow-2":!0})}
23
- style=${this.styleMap(t)}
24
- id="options"
25
- role="listbox"
26
- hidden
27
- @click=${e=>{this.handleOptionClick(e.detail.value)}}
28
- @touchstart=${this.preventScroll}
29
- @touchmove=${this.preventScroll}
30
- ${j.color({bgColor:L.SchmancyTheme.sys.color.surface.container})}
31
- >
32
- <li id="empty" tabindex="-1">
33
- <schmancy-typography type="label">No results found</schmancy-typography>
34
- </li>
35
- <slot
36
- @slotchange=${()=>{this.empty.hidden=this.options.some(e=>!e.hidden),this.updateInputValue()}}
37
- tabindex="0"
38
- ></slot>
39
- </ul>
40
- </div>
41
- `}preventScroll(t){const e=t.target;if(this.optionsContainer.contains(e)){const o=this.optionsContainer.scrollTop,i=this.optionsContainer.scrollHeight-this.optionsContainer.offsetHeight;(o===0&&t.touches[0].clientY>t.touches[0].clientY||o===i&&t.touches[0].clientY<t.touches[0].clientY)&&t.preventDefault()}}};c([u.property({type:Boolean})],p.prototype,"required",2),c([u.property({type:String})],p.prototype,"placeholder",2),c([u.property({type:String,reflect:!0})],p.prototype,"value",2),c([u.property({type:String,reflect:!0})],p.prototype,"label",2),c([u.property({type:String})],p.prototype,"maxHeight",2),c([u.property({type:Boolean})],p.prototype,"multi",2),c([u.state()],p.prototype,"valueLabel",2),c([u.query("ul")],p.prototype,"ul",2),c([u.query("#empty")],p.prototype,"empty",2),c([u.query("#options")],p.prototype,"optionsContainer",2),c([u.query("schmancy-input")],p.prototype,"input",2),c([u.queryAssignedElements({flatten:!0})],p.prototype,"options",2),c([u.eventOptions({passive:!0})],p.prototype,"handleOptionClick",1),p=c([u.customElement("schmancy-autocomplete")],p);
42
- //# sourceMappingURL=autocomplete-CiNm2SkD.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"autocomplete-CiNm2SkD.cjs","sources":["../node_modules/fastest-levenshtein/esm/mod.js","../src/autocomplete/autocomplete.ts"],"sourcesContent":["const peq = new Uint32Array(0x10000);\nconst myers_32 = (a, b) => {\n const n = a.length;\n const m = b.length;\n const lst = 1 << (n - 1);\n let pv = -1;\n let mv = 0;\n let sc = n;\n let i = n;\n while (i--) {\n peq[a.charCodeAt(i)] |= 1 << i;\n }\n for (i = 0; i < m; i++) {\n let eq = peq[b.charCodeAt(i)];\n const xv = eq | mv;\n eq |= ((eq & pv) + pv) ^ pv;\n mv |= ~(eq | pv);\n pv &= eq;\n if (mv & lst) {\n sc++;\n }\n if (pv & lst) {\n sc--;\n }\n mv = (mv << 1) | 1;\n pv = (pv << 1) | ~(xv | mv);\n mv &= xv;\n }\n i = n;\n while (i--) {\n peq[a.charCodeAt(i)] = 0;\n }\n return sc;\n};\nconst myers_x = (b, a) => {\n const n = a.length;\n const m = b.length;\n const mhc = [];\n const phc = [];\n const hsize = Math.ceil(n / 32);\n const vsize = Math.ceil(m / 32);\n for (let i = 0; i < hsize; i++) {\n phc[i] = -1;\n mhc[i] = 0;\n }\n let j = 0;\n for (; j < vsize - 1; j++) {\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const vlen = Math.min(32, m) + start;\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n }\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const vlen = Math.min(32, m - start) + start;\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n let score = m;\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n score += (ph >>> (m - 1)) & 1;\n score -= (mh >>> (m - 1)) & 1;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n return score;\n};\nconst distance = (a, b) => {\n if (a.length < b.length) {\n const tmp = b;\n b = a;\n a = tmp;\n }\n if (b.length === 0) {\n return a.length;\n }\n if (a.length <= 32) {\n return myers_32(a, b);\n }\n return myers_x(a, b);\n};\nconst closest = (str, arr) => {\n let min_distance = Infinity;\n let min_index = 0;\n for (let i = 0; i < arr.length; i++) {\n const dist = distance(str, arr[i]);\n if (dist < min_distance) {\n min_distance = dist;\n min_index = i;\n }\n }\n return arr[min_index];\n};\nexport { closest, distance };\n","import { computePosition, flip, offset, shift } from '@floating-ui/dom'\nimport { $LitElement } from '@mixins/index'\nimport { color } from '@schmancy/directives'\nimport SchmancyInput from '@schmancy/input/input'\nimport SchmancyOption, { SchmancyOptionChangeEvent } from '@schmancy/option/option'\nimport { SchmancyTheme } from '@schmancy/theme/theme.interface'\nimport { distance } from 'fastest-levenshtein'\nimport { html } from 'lit'\nimport { customElement, eventOptions, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { from, fromEvent, Subject } from 'rxjs'\nimport { distinctUntilChanged, filter, switchMap, takeUntil, tap } from 'rxjs/operators'\nimport { SchmancyInputChangeEvent } from '..'\nimport style from './autocomplete.scss?inline'\n\nexport type SchmancyAutocompleteChangeEvent = CustomEvent<{\n\tvalue: string | string[]\n}>\n\n@customElement('schmancy-autocomplete')\nexport default class SchmancyAutocomplete extends $LitElement(style) {\n\t@property({ type: Boolean }) required\n\t@property({ type: String }) placeholder = ''\n\t@property({ type: String, reflect: true }) value = ''\n\t@property({ type: String, reflect: true }) label = ''\n\t@property({ type: String }) maxHeight = '25vh'\n\t@property({ type: Boolean }) multi = false\n\t@state() valueLabel = ''\n\tinputRef = createRef<HTMLInputElement>()\n\n\t@query('ul') ul!: HTMLUListElement\n\t@query('#empty') empty!: HTMLLIElement\n\t@query('#options') optionsContainer!: HTMLUListElement\n\t@query('schmancy-input') input!: SchmancyInput\n\n\t@queryAssignedElements({ flatten: true }) options!: SchmancyOption[]\n\n\tsearchTerm$ = new Subject<string>()\n\tsearchTermSubscription: any\n\n\tfirstUpdated() {\n\t\tthis.searchTermSubscription = this.searchTerm$\n\t\t\t.pipe(\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttap(term => {\n\t\t\t\t\tconst searchTerm = term.trim().toLowerCase()\n\t\t\t\t\t// ... filter logic ...\n\t\t\t\t\tconst matches = this.options\n\t\t\t\t\t\t.map(option => {\n\t\t\t\t\t\t\tconst optionText = option.label.toLowerCase()\n\t\t\t\t\t\t\tconst levDistance = distance(searchTerm, optionText)\n\t\t\t\t\t\t\treturn { option, levDistance }\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t({ option, levDistance }) =>\n\t\t\t\t\t\t\t\tsearchTerm.length < 3 || levDistance <= option.label.toLowerCase().length - searchTerm.length,\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.sort((a, b) => a.levDistance - b.levDistance)\n\n\t\t\t\t\tthis.empty.hidden = matches\n\t\t\t\t\t\t.map(({ option }) => {\n\t\t\t\t\t\t\toption.hidden = false\n\t\t\t\t\t\t\treturn option\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.some(option => !option.hidden)\n\n\t\t\t\t\tthis.options.forEach(option => {\n\t\t\t\t\t\toption.hidden = !matches.some(match => match.option === option)\n\t\t\t\t\t})\n\t\t\t\t\tthis.requestUpdate()\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.showOptions()\n\t\t\t})\n\n\t\tfromEvent<FocusEvent>(this, 'focusout')\n\t\t\t.pipe(\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\tfilter(e => (e.relatedTarget as SchmancyOption)?.tagName !== 'SCHMANCY-OPTION'),\n\t\t\t\tswitchMap(() => {\n\t\t\t\t\t// --- Native Web Animations API replacement ---\n\t\t\t\t\tconst animation = this.ul.animate(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{ opacity: 1 }, // from\n\t\t\t\t\t\t\t{ opacity: 0 }, // to\n\t\t\t\t\t\t],\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tduration: 250,\n\t\t\t\t\t\t\teasing: 'cubic-bezier(0.5, 0.01, 0.25, 1)',\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\n\t\t\t\t\t// Turn the onfinish callback into a Promise so RxJS can `from(...)` it\n\t\t\t\t\tconst animationPromise = new Promise<void>(resolve => {\n\t\t\t\t\t\tanimation.onfinish = () => {\n\t\t\t\t\t\t\t// This is where you'd do your cleanup (like onComplete before)\n\t\t\t\t\t\t\tthis.ul?.style.setProperty('display', 'none')\n\t\t\t\t\t\t\tthis.ul?.style.setProperty('opacity', '1')\n\t\t\t\t\t\t\tresolve()\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\n\t\t\t\t\treturn from(animationPromise)\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe({\n\t\t\t\tnext: () => {\n\t\t\t\t\t// Once animation completes\n\t\t\t\t\tif (this.multi) {\n\t\t\t\t\t\tthis.inputRef.value?.setAttribute(\n\t\t\t\t\t\t\t'value',\n\t\t\t\t\t\t\tthis.options\n\t\t\t\t\t\t\t\t.filter(o => o.selected)\n\t\t\t\t\t\t\t\t.map(o => o.label)\n\t\t\t\t\t\t\t\t.join(', '),\n\t\t\t\t\t\t)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.inputRef.value?.setAttribute('value', this.options.find(o => o.value === this.value)?.label ?? '')\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t})\n\n\t\tthis.updateInputValue()\n\t}\n\n\tupdateInputValue() {\n\t\trequestAnimationFrame(() => {\n\t\t\tif (this.multi) {\n\t\t\t\tconst selectedOptions = this.value.split(',').map(v => this.options.find(o => o.value === v)?.label)\n\t\t\t\tthis.input.value = selectedOptions.join(', ')\n\t\t\t} else {\n\t\t\t\tthis.input.value = this.options.find(o => o.value === this.value)?.label ?? ''\n\t\t\t}\n\t\t})\n\t}\n\n\tasync showOptions() {\n\t\tthis.ul?.removeAttribute('hidden')\n\t\tthis.ul?.style.setProperty('display', 'block')\n\n\t\t// Position the dropdown using Floating UI\n\t\tconst { x, y } = await computePosition(this.input, this.ul, {\n\t\t\tplacement: 'bottom-start',\n\t\t\tmiddleware: [offset(5), flip(), shift({ padding: 5 })],\n\t\t})\n\n\t\tObject.assign(this.ul.style, {\n\t\t\tleft: `${x}px`,\n\t\t\ttop: `${y}px`,\n\t\t\tposition: 'absolute',\n\t\t\tzIndex: '9999',\n\t\t\tmaxHeight: this.maxHeight,\n\t\t\toverflowY: 'auto',\n\t\t})\n\t}\n\n\thideOptions() {\n\t\tthis.ul?.setAttribute('hidden', 'true')\n\t\tthis.ul?.style.setProperty('display', 'none')\n\t}\n\n\thandleInputChange(event: SchmancyInputChangeEvent) {\n\t\tevent.preventDefault()\n\t\tevent.stopPropagation()\n\t\tconst term = event.detail.value\n\t\tthis.searchTerm$.next(term)\n\t}\n\n\t@eventOptions({ passive: true })\n\thandleOptionClick(value: string) {\n\t\tif (this.multi) {\n\t\t\tconst option = this.options.find(o => o.value === value)\n\t\t\tif (option) option.selected = !option.selected\n\t\t\tthis.updateInputValue()\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent('change', {\n\t\t\t\t\tdetail: { value: this.options.filter(o => o.selected).map(o => o.value) },\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t}),\n\t\t\t)\n\t\t} else {\n\t\t\tthis.hideOptions()\n\t\t\tthis.value = value\n\t\t\tthis.updateInputValue()\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent('change', {\n\t\t\t\t\tdetail: { value },\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t}\n\n\tpublic reportValidity() {\n\t\treturn this.inputRef.value?.reportValidity()\n\t}\n\n\tpublic checkValidity() {\n\t\treturn this.multi ? this.options.some(o => o.selected) : !!this.value\n\t}\n\n\trender() {\n\t\tconst classes = {\n\t\t\t'absolute z-30 mt-1 w-full overflow-auto rounded-md shadow-2': true,\n\t\t}\n\t\tconst styles = {\n\t\t\tmaxHeight: this.maxHeight,\n\t\t}\n\t\treturn html`\n\t\t\t<div class=\"relative\">\n\t\t\t\t<slot name=\"trigger\">\n\t\t\t\t\t<schmancy-input\n\t\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\t\tclass=\"w-full\"\n\t\t\t\t\t\t${ref(this.inputRef)}\n\t\t\t\t\t\t.required=${this.required}\n\t\t\t\t\t\tid=\"input\"\n\t\t\t\t\t\t.label=${this.label}\n\t\t\t\t\t\t@focus=${this.showOptions}\n\t\t\t\t\t\tclickable\n\t\t\t\t\t\ttype=\"search\"\n\t\t\t\t\t\tinputmode=\"text\"\n\t\t\t\t\t\tplaceholder=${this.placeholder}\n\t\t\t\t\t\t@change=${this.handleInputChange}\n\t\t\t\t\t>\n\t\t\t\t\t</schmancy-input>\n\t\t\t\t</slot>\n\t\t\t\t<ul\n\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\tclass=${this.classMap(classes)}\n\t\t\t\t\tstyle=${this.styleMap(styles)}\n\t\t\t\t\tid=\"options\"\n\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\thidden\n\t\t\t\t\t@click=${(e: SchmancyOptionChangeEvent) => {\n\t\t\t\t\t\tthis.handleOptionClick(e.detail.value)\n\t\t\t\t\t}}\n\t\t\t\t\t@touchstart=${this.preventScroll}\n\t\t\t\t\t@touchmove=${this.preventScroll}\n\t\t\t\t\t${color({\n\t\t\t\t\t\tbgColor: SchmancyTheme.sys.color.surface.container,\n\t\t\t\t\t})}\n\t\t\t\t>\n\t\t\t\t\t<li id=\"empty\" tabindex=\"-1\">\n\t\t\t\t\t\t<schmancy-typography type=\"label\">No results found</schmancy-typography>\n\t\t\t\t\t</li>\n\t\t\t\t\t<slot\n\t\t\t\t\t\t@slotchange=${() => {\n\t\t\t\t\t\t\tthis.empty.hidden = this.options.some(option => !option.hidden)\n\t\t\t\t\t\t\tthis.updateInputValue()\n\t\t\t\t\t\t}}\n\t\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t\t></slot>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t`\n\t}\n\n\tpreventScroll(event) {\n\t\tconst target = event.target\n\n\t\tif (this.optionsContainer.contains(target)) {\n\t\t\tconst scrollTop = this.optionsContainer.scrollTop\n\t\t\tconst scrollHeight = this.optionsContainer.scrollHeight\n\t\t\tconst offsetHeight = this.optionsContainer.offsetHeight\n\t\t\tconst contentHeight = scrollHeight - offsetHeight\n\n\t\t\tif (\n\t\t\t\t(scrollTop === 0 && event.touches[0].clientY > event.touches[0].clientY) ||\n\t\t\t\t(scrollTop === contentHeight && event.touches[0].clientY < event.touches[0].clientY)\n\t\t\t) {\n\t\t\t\tevent.preventDefault()\n\t\t\t}\n\t\t}\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-autocomplete': SchmancyAutocomplete\n\t}\n}\n"],"names":["peq","Uint32Array","distance","a","b","length","tmp","n","m","lst","pv","mv","sc","i","charCodeAt","eq","xv","mhc","phc","hsize","Math","ceil","vsize","j","start","vlen","min","k","pb","mb","xh","ph","mh","score","SchmancyAutocomplete","$LitElement","super","arguments","this","placeholder","value","label","maxHeight","multi","valueLabel","inputRef","createRef","searchTerm$","Subject","firstUpdated","searchTermSubscription","pipe","takeUntil","disconnecting","distinctUntilChanged","tap","term","searchTerm","trim","toLowerCase","matches","options","map","option","optionText","levDistance","filter","sort","empty","hidden","some","forEach","match","requestUpdate","subscribe","showOptions","fromEvent","e","relatedTarget","tagName","switchMap","animation","ul","animate","opacity","duration","easing","animationPromise","Promise","resolve","onfinish","style","setProperty","from","next","setAttribute","o","selected","join","find","updateInputValue","requestAnimationFrame","selectedOptions","split","v","input","removeAttribute","x","y","computePosition","placement","middleware","offset","flip","shift","padding","Object","assign","left","top","position","zIndex","overflowY","event","preventDefault","stopPropagation","detail","dispatchEvent","CustomEvent","bubbles","composed","hideOptions","reportValidity","checkValidity","render","styles","html","ref","required","handleInputChange","classMap","styleMap","handleOptionClick","preventScroll","color","bgColor","SchmancyTheme","sys","surface","container","target","optionsContainer","contains","scrollTop","contentHeight","scrollHeight","offsetHeight","touches","clientY","__decorateClass","property","type","Boolean","prototype","String","reflect","state","query","queryAssignedElements","flatten","eventOptions","passive","customElement"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,189 +0,0 @@
1
- import { computePosition as j, offset as q, flip as D, shift as T } from "@floating-ui/dom";
2
- import { Subject as R, fromEvent as Y, from as z } from "rxjs";
3
- import "lit/directives/class-map.js";
4
- import "lit/directives/style-map.js";
5
- import { $ as L } from "./litElement.mixin-Bczhguqz.js";
6
- import "./tailwind.mixin-DaorKUB-.js";
7
- import { c as U } from "./ripple-BumgqsDT.js";
8
- import { S as N } from "./theme.interface-C5Kj6WjD.js";
9
- import { html as B } from "lit";
10
- import { property as $, state as F, query as P, queryAssignedElements as G, eventOptions as J, customElement as K } from "lit/decorators.js";
11
- import { createRef as Q, ref as W } from "lit/directives/ref.js";
12
- import { takeUntil as V, distinctUntilChanged as X, tap as Z, filter as _, switchMap as tt } from "rxjs/operators";
13
- const b = new Uint32Array(65536), et = (t, e) => {
14
- if (t.length < e.length) {
15
- const s = e;
16
- e = t, t = s;
17
- }
18
- return e.length === 0 ? t.length : t.length <= 32 ? ((s, i) => {
19
- const n = s.length, l = i.length, c = 1 << n - 1;
20
- let h = -1, f = 0, A = n, r = n;
21
- for (; r--; ) b[s.charCodeAt(r)] |= 1 << r;
22
- for (r = 0; r < l; r++) {
23
- let y = b[i.charCodeAt(r)];
24
- const g = y | f;
25
- y |= (y & h) + h ^ h, f |= ~(y | h), h &= y, f & c && A++, h & c && A--, f = f << 1 | 1, h = h << 1 | ~(g | f), f &= g;
26
- }
27
- for (r = n; r--; ) b[s.charCodeAt(r)] = 0;
28
- return A;
29
- })(t, e) : ((s, i) => {
30
- const n = i.length, l = s.length, c = [], h = [], f = Math.ceil(n / 32), A = Math.ceil(l / 32);
31
- for (let o = 0; o < f; o++) h[o] = -1, c[o] = 0;
32
- let r = 0;
33
- for (; r < A - 1; r++) {
34
- let o = 0, d = -1;
35
- const w = 32 * r, C = Math.min(32, l) + w;
36
- for (let a = w; a < C; a++) b[s.charCodeAt(a)] |= 1 << a;
37
- for (let a = 0; a < n; a++) {
38
- const x = b[i.charCodeAt(a)], v = h[a / 32 | 0] >>> a & 1, m = c[a / 32 | 0] >>> a & 1, M = x | o, E = ((x | m) & d) + d ^ d | x | m;
39
- let O = o | ~(E | d), k = d & E;
40
- O >>> 31 ^ v && (h[a / 32 | 0] ^= 1 << a), k >>> 31 ^ m && (c[a / 32 | 0] ^= 1 << a), O = O << 1 | v, k = k << 1 | m, d = k | ~(M | O), o = O & M;
41
- }
42
- for (let a = w; a < C; a++) b[s.charCodeAt(a)] = 0;
43
- }
44
- let y = 0, g = -1;
45
- const S = 32 * r, I = Math.min(32, l - S) + S;
46
- for (let o = S; o < I; o++) b[s.charCodeAt(o)] |= 1 << o;
47
- let H = l;
48
- for (let o = 0; o < n; o++) {
49
- const d = b[i.charCodeAt(o)], w = h[o / 32 | 0] >>> o & 1, C = c[o / 32 | 0] >>> o & 1, a = d | y, x = ((d | C) & g) + g ^ g | d | C;
50
- let v = y | ~(x | g), m = g & x;
51
- H += v >>> l - 1 & 1, H -= m >>> l - 1 & 1, v >>> 31 ^ w && (h[o / 32 | 0] ^= 1 << o), m >>> 31 ^ C && (c[o / 32 | 0] ^= 1 << o), v = v << 1 | w, m = m << 1 | C, g = m | ~(a | v), y = v & a;
52
- }
53
- for (let o = S; o < I; o++) b[s.charCodeAt(o)] = 0;
54
- return H;
55
- })(t, e);
56
- };
57
- var it = Object.defineProperty, st = Object.getOwnPropertyDescriptor, u = (t, e, s, i) => {
58
- for (var n, l = i > 1 ? void 0 : i ? st(e, s) : e, c = t.length - 1; c >= 0; c--) (n = t[c]) && (l = (i ? n(e, s, l) : n(l)) || l);
59
- return i && l && it(e, s, l), l;
60
- };
61
- let p = class extends L(":host{display:block;border:unset!important;line-height:unset!important;background:unset!important;padding:unset!important;font-size:unset!important;box-shadow:unset!important}:host:focus{box-shadow:unset!important}") {
62
- constructor() {
63
- super(...arguments), this.placeholder = "", this.value = "", this.label = "", this.maxHeight = "25vh", this.multi = !1, this.valueLabel = "", this.inputRef = Q(), this.searchTerm$ = new R();
64
- }
65
- firstUpdated() {
66
- this.searchTermSubscription = this.searchTerm$.pipe(V(this.disconnecting), X(), Z((t) => {
67
- const e = t.trim().toLowerCase(), s = this.options.map((i) => {
68
- const n = i.label.toLowerCase();
69
- return { option: i, levDistance: et(e, n) };
70
- }).filter(({ option: i, levDistance: n }) => e.length < 3 || n <= i.label.toLowerCase().length - e.length).sort((i, n) => i.levDistance - n.levDistance);
71
- this.empty.hidden = s.map(({ option: i }) => (i.hidden = !1, i)).some((i) => !i.hidden), this.options.forEach((i) => {
72
- i.hidden = !s.some((n) => n.option === i);
73
- }), this.requestUpdate();
74
- })).subscribe(() => {
75
- this.showOptions();
76
- }), Y(this, "focusout").pipe(V(this.disconnecting), _((t) => {
77
- var e;
78
- return ((e = t.relatedTarget) == null ? void 0 : e.tagName) !== "SCHMANCY-OPTION";
79
- }), tt(() => {
80
- const t = this.ul.animate([{ opacity: 1 }, { opacity: 0 }], { duration: 250, easing: "cubic-bezier(0.5, 0.01, 0.25, 1)" }), e = new Promise((s) => {
81
- t.onfinish = () => {
82
- var i, n;
83
- (i = this.ul) == null || i.style.setProperty("display", "none"), (n = this.ul) == null || n.style.setProperty("opacity", "1"), s();
84
- };
85
- });
86
- return z(e);
87
- })).subscribe({ next: () => {
88
- var t, e, s;
89
- this.multi ? (t = this.inputRef.value) == null || t.setAttribute("value", this.options.filter((i) => i.selected).map((i) => i.label).join(", ")) : (s = this.inputRef.value) == null || s.setAttribute("value", ((e = this.options.find((i) => i.value === this.value)) == null ? void 0 : e.label) ?? "");
90
- } }), this.updateInputValue();
91
- }
92
- updateInputValue() {
93
- requestAnimationFrame(() => {
94
- var t;
95
- if (this.multi) {
96
- const e = this.value.split(",").map((s) => {
97
- var i;
98
- return (i = this.options.find((n) => n.value === s)) == null ? void 0 : i.label;
99
- });
100
- this.input.value = e.join(", ");
101
- } else this.input.value = ((t = this.options.find((e) => e.value === this.value)) == null ? void 0 : t.label) ?? "";
102
- });
103
- }
104
- async showOptions() {
105
- var s, i;
106
- (s = this.ul) == null || s.removeAttribute("hidden"), (i = this.ul) == null || i.style.setProperty("display", "block");
107
- const { x: t, y: e } = await j(this.input, this.ul, { placement: "bottom-start", middleware: [q(5), D(), T({ padding: 5 })] });
108
- Object.assign(this.ul.style, { left: `${t}px`, top: `${e}px`, position: "absolute", zIndex: "9999", maxHeight: this.maxHeight, overflowY: "auto" });
109
- }
110
- hideOptions() {
111
- var t, e;
112
- (t = this.ul) == null || t.setAttribute("hidden", "true"), (e = this.ul) == null || e.style.setProperty("display", "none");
113
- }
114
- handleInputChange(t) {
115
- t.preventDefault(), t.stopPropagation();
116
- const e = t.detail.value;
117
- this.searchTerm$.next(e);
118
- }
119
- handleOptionClick(t) {
120
- if (this.multi) {
121
- const e = this.options.find((s) => s.value === t);
122
- e && (e.selected = !e.selected), this.updateInputValue(), this.dispatchEvent(new CustomEvent("change", { detail: { value: this.options.filter((s) => s.selected).map((s) => s.value) }, bubbles: !0, composed: !0 }));
123
- } else this.hideOptions(), this.value = t, this.updateInputValue(), this.dispatchEvent(new CustomEvent("change", { detail: { value: t }, bubbles: !0, composed: !0 }));
124
- }
125
- reportValidity() {
126
- var t;
127
- return (t = this.inputRef.value) == null ? void 0 : t.reportValidity();
128
- }
129
- checkValidity() {
130
- return this.multi ? this.options.some((t) => t.selected) : !!this.value;
131
- }
132
- render() {
133
- const t = { maxHeight: this.maxHeight };
134
- return B`
135
- <div class="relative">
136
- <slot name="trigger">
137
- <schmancy-input
138
- autocomplete="off"
139
- class="w-full"
140
- ${W(this.inputRef)}
141
- .required=${this.required}
142
- id="input"
143
- .label=${this.label}
144
- @focus=${this.showOptions}
145
- clickable
146
- type="search"
147
- inputmode="text"
148
- placeholder=${this.placeholder}
149
- @change=${this.handleInputChange}
150
- >
151
- </schmancy-input>
152
- </slot>
153
- <ul
154
- tabindex="-1"
155
- class=${this.classMap({ "absolute z-30 mt-1 w-full overflow-auto rounded-md shadow-2": !0 })}
156
- style=${this.styleMap(t)}
157
- id="options"
158
- role="listbox"
159
- hidden
160
- @click=${(e) => {
161
- this.handleOptionClick(e.detail.value);
162
- }}
163
- @touchstart=${this.preventScroll}
164
- @touchmove=${this.preventScroll}
165
- ${U({ bgColor: N.sys.color.surface.container })}
166
- >
167
- <li id="empty" tabindex="-1">
168
- <schmancy-typography type="label">No results found</schmancy-typography>
169
- </li>
170
- <slot
171
- @slotchange=${() => {
172
- this.empty.hidden = this.options.some((e) => !e.hidden), this.updateInputValue();
173
- }}
174
- tabindex="0"
175
- ></slot>
176
- </ul>
177
- </div>
178
- `;
179
- }
180
- preventScroll(t) {
181
- const e = t.target;
182
- if (this.optionsContainer.contains(e)) {
183
- const s = this.optionsContainer.scrollTop, i = this.optionsContainer.scrollHeight - this.optionsContainer.offsetHeight;
184
- (s === 0 && t.touches[0].clientY > t.touches[0].clientY || s === i && t.touches[0].clientY < t.touches[0].clientY) && t.preventDefault();
185
- }
186
- }
187
- };
188
- u([$({ type: Boolean })], p.prototype, "required", 2), u([$({ type: String })], p.prototype, "placeholder", 2), u([$({ type: String, reflect: !0 })], p.prototype, "value", 2), u([$({ type: String, reflect: !0 })], p.prototype, "label", 2), u([$({ type: String })], p.prototype, "maxHeight", 2), u([$({ type: Boolean })], p.prototype, "multi", 2), u([F()], p.prototype, "valueLabel", 2), u([P("ul")], p.prototype, "ul", 2), u([P("#empty")], p.prototype, "empty", 2), u([P("#options")], p.prototype, "optionsContainer", 2), u([P("schmancy-input")], p.prototype, "input", 2), u([G({ flatten: !0 })], p.prototype, "options", 2), u([J({ passive: !0 })], p.prototype, "handleOptionClick", 1), p = u([K("schmancy-autocomplete")], p);
189
- //# sourceMappingURL=autocomplete-Cm5NEwT6.js.map