@mhmo91/schmancy 0.2.117 → 0.2.120

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 (315) hide show
  1. package/dist/{animated-text-C2EvhDmf.cjs → animated-text-BH6DM-pF.cjs} +2 -2
  2. package/dist/{animated-text-C2EvhDmf.cjs.map → animated-text-BH6DM-pF.cjs.map} +1 -1
  3. package/dist/{animated-text-6DhYKKzt.js → animated-text-C92_eFNP.js} +3 -3
  4. package/dist/{animated-text-6DhYKKzt.js.map → animated-text-C92_eFNP.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-X-1ZwgJL.cjs → area.component-BDkmpYX3.cjs} +2 -2
  9. package/dist/{area.component-X-1ZwgJL.cjs.map → area.component-BDkmpYX3.cjs.map} +1 -1
  10. package/dist/{area.component-DAry93pl.js → area.component-Bh_XioGp.js} +10 -10
  11. package/dist/{area.component-DAry93pl.js.map → area.component-Bh_XioGp.js.map} +1 -1
  12. package/dist/area.js +1 -1
  13. package/dist/autocomplete-DMSMomJC.cjs +57 -0
  14. package/dist/{autocomplete-BIJ9G0y1.cjs.map → autocomplete-DMSMomJC.cjs.map} +1 -1
  15. package/dist/{autocomplete-C_QyhPJw.js → autocomplete-IOFBU8oc.js} +4 -5
  16. package/dist/{autocomplete-C_QyhPJw.js.map → autocomplete-IOFBU8oc.js.map} +1 -1
  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-BkGLOzBe.cjs → checkbox-Bw98L4cT.cjs} +2 -2
  26. package/dist/{checkbox-BkGLOzBe.cjs.map → checkbox-Bw98L4cT.cjs.map} +1 -1
  27. package/dist/{checkbox-CTRhgYJB.js → checkbox-CglGRaSJ.js} +2 -2
  28. package/dist/{checkbox-CTRhgYJB.js.map → checkbox-CglGRaSJ.js.map} +1 -1
  29. package/dist/checkbox.cjs +1 -1
  30. package/dist/checkbox.js +1 -1
  31. package/dist/{chips-B4X5PxUQ.cjs → chips-BepHO_mm.cjs} +2 -2
  32. package/dist/{chips-B4X5PxUQ.cjs.map → chips-BepHO_mm.cjs.map} +1 -1
  33. package/dist/{chips-DjX_Zznh.js → chips-C_7K0qF3.js} +3 -3
  34. package/dist/{chips-DjX_Zznh.js.map → chips-C_7K0qF3.js.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/context-object-CVqtbNDv.js +303 -0
  42. package/dist/context-object-CVqtbNDv.js.map +1 -0
  43. package/dist/context-object-CgZ6F8E9.cjs +2 -0
  44. package/dist/context-object-CgZ6F8E9.cjs.map +1 -0
  45. package/dist/{date-range-CRJ7wYwK.js → date-range-BBY-tMEk.js} +3 -3
  46. package/dist/{date-range-CRJ7wYwK.js.map → date-range-BBY-tMEk.js.map} +1 -1
  47. package/dist/{date-range-CCsKoZUV.cjs → date-range-DC3sAepm.cjs} +2 -2
  48. package/dist/{date-range-CCsKoZUV.cjs.map → date-range-DC3sAepm.cjs.map} +1 -1
  49. package/dist/date-range.cjs +1 -1
  50. package/dist/date-range.js +1 -1
  51. package/dist/{delay-BkSIN-In.js → delay-DcwT5pHi.js} +2 -2
  52. package/dist/{delay-BkSIN-In.js.map → delay-DcwT5pHi.js.map} +1 -1
  53. package/dist/{delay-ttYmIqo7.cjs → delay-UhlOkp1Q.cjs} +2 -2
  54. package/dist/{delay-ttYmIqo7.cjs.map → delay-UhlOkp1Q.cjs.map} +1 -1
  55. package/dist/delay.cjs +1 -1
  56. package/dist/delay.js +1 -1
  57. package/dist/directives.cjs +1 -1
  58. package/dist/directives.js +4 -5
  59. package/dist/directives.js.map +1 -1
  60. package/dist/{divider-C3zQQjqq.js → divider-B-bxtxQ9.js} +3 -3
  61. package/dist/{divider-C3zQQjqq.js.map → divider-B-bxtxQ9.js.map} +1 -1
  62. package/dist/{divider-2AVp1yWB.cjs → divider-yLBrmrYU.cjs} +2 -2
  63. package/dist/{divider-2AVp1yWB.cjs.map → divider-yLBrmrYU.cjs.map} +1 -1
  64. package/dist/divider.cjs +1 -1
  65. package/dist/divider.js +1 -1
  66. package/dist/extra.cjs +1 -1
  67. package/dist/extra.js +1 -1
  68. package/dist/{flex-CfGGWirm.cjs → flex-CG8OOL02.cjs} +2 -2
  69. package/dist/{flex-CfGGWirm.cjs.map → flex-CG8OOL02.cjs.map} +1 -1
  70. package/dist/{flex-CfRUWQWK.js → flex-CofCUs7b.js} +4 -4
  71. package/dist/{flex-CfRUWQWK.js.map → flex-CofCUs7b.js.map} +1 -1
  72. package/dist/form-BqHD2BmW.cjs +14 -0
  73. package/dist/form-BqHD2BmW.cjs.map +1 -0
  74. package/dist/form-CbH5yVTc.js +161 -0
  75. package/dist/form-CbH5yVTc.js.map +1 -0
  76. package/dist/form.cjs +1 -1
  77. package/dist/form.js +1 -1
  78. package/dist/{icon-BLvikygg.js → icon-2u-dF77v.js} +3 -3
  79. package/dist/{icon-BLvikygg.js.map → icon-2u-dF77v.js.map} +1 -1
  80. package/dist/{icon-BfUZ5ZBV.cjs → icon-CqImPgUG.cjs} +2 -2
  81. package/dist/{icon-BfUZ5ZBV.cjs.map → icon-CqImPgUG.cjs.map} +1 -1
  82. package/dist/{icon-button-BefimCfp.cjs → icon-button-CZjaNotL.cjs} +2 -2
  83. package/dist/{icon-button-BefimCfp.cjs.map → icon-button-CZjaNotL.cjs.map} +1 -1
  84. package/dist/{icon-button-OidywZ1U.js → icon-button-xKDMAiJd.js} +3 -3
  85. package/dist/{icon-button-OidywZ1U.js.map → icon-button-xKDMAiJd.js.map} +1 -1
  86. package/dist/icons.cjs +1 -1
  87. package/dist/icons.js +1 -1
  88. package/dist/index.cjs +1 -1
  89. package/dist/index.js +128 -105
  90. package/dist/index.js.map +1 -1
  91. package/dist/input-BDXWcxNw.cjs +111 -0
  92. package/dist/input-BDXWcxNw.cjs.map +1 -0
  93. package/dist/input-fP8EqcLF.js +390 -0
  94. package/dist/input-fP8EqcLF.js.map +1 -0
  95. package/dist/input.cjs +1 -1
  96. package/dist/input.js +1 -1
  97. package/dist/layout.cjs +1 -1
  98. package/dist/layout.js +1 -1
  99. package/dist/{list-C78nnFIZ.cjs → list-C8pDC7As.cjs} +2 -2
  100. package/dist/{list-C78nnFIZ.cjs.map → list-C8pDC7As.cjs.map} +1 -1
  101. package/dist/{list-CQV0ecrY.js → list-O7kfL-NW.js} +2 -2
  102. package/dist/{list-CQV0ecrY.js.map → list-O7kfL-NW.js.map} +1 -1
  103. package/dist/list.cjs +1 -1
  104. package/dist/list.js +1 -1
  105. package/dist/{litElement.mixin-DGx3SrGX.cjs → litElement.mixin-Ct-snNwC.cjs} +2 -2
  106. package/dist/{litElement.mixin-DGx3SrGX.cjs.map → litElement.mixin-Ct-snNwC.cjs.map} +1 -1
  107. package/dist/{litElement.mixin-B1ZP2iG4.js → litElement.mixin-CtugwVVz.js} +2 -2
  108. package/dist/{litElement.mixin-B1ZP2iG4.js.map → litElement.mixin-CtugwVVz.js.map} +1 -1
  109. package/dist/{menu-15yMmtd2.js → menu-DoVBeCHb.js} +3 -3
  110. package/dist/{menu-15yMmtd2.js.map → menu-DoVBeCHb.js.map} +1 -1
  111. package/dist/{menu-DqLKbEXx.cjs → menu-bkGcaSru.cjs} +2 -2
  112. package/dist/{menu-DqLKbEXx.cjs.map → menu-bkGcaSru.cjs.map} +1 -1
  113. package/dist/menu.cjs +1 -1
  114. package/dist/menu.js +1 -1
  115. package/dist/nav-drawer.cjs +1 -1
  116. package/dist/nav-drawer.js +1 -1
  117. package/dist/notification.cjs +1 -1
  118. package/dist/notification.js +1 -1
  119. package/dist/{option-DleJMgj-.js → option-D_RxI1cV.js} +2 -2
  120. package/dist/{option-DleJMgj-.js.map → option-D_RxI1cV.js.map} +1 -1
  121. package/dist/{option-BaOmCXP8.cjs → option-DrizkeI1.cjs} +2 -2
  122. package/dist/{option-BaOmCXP8.cjs.map → option-DrizkeI1.cjs.map} +1 -1
  123. package/dist/option.cjs +1 -1
  124. package/dist/option.js +1 -1
  125. package/dist/{outlet-mNvq9oaA.cjs → outlet-BIwnmuNu.cjs} +2 -2
  126. package/dist/{outlet-mNvq9oaA.cjs.map → outlet-BIwnmuNu.cjs.map} +1 -1
  127. package/dist/{outlet-I1IE2wTK.js → outlet-U_CoKIxQ.js} +2 -2
  128. package/dist/{outlet-I1IE2wTK.js.map → outlet-U_CoKIxQ.js.map} +1 -1
  129. package/dist/{payment-card-form-Cm_-ul4G.cjs → payment-card-form-BPtQt3Xd.cjs} +2 -2
  130. package/dist/{payment-card-form-Cm_-ul4G.cjs.map → payment-card-form-BPtQt3Xd.cjs.map} +1 -1
  131. package/dist/{payment-card-form-DHmtfa_H.js → payment-card-form-CSboFL3Z.js} +3 -3
  132. package/dist/{payment-card-form-DHmtfa_H.js.map → payment-card-form-CSboFL3Z.js.map} +1 -1
  133. package/dist/{radio-group-CSKgiPxL.js → radio-group-BNyzzO-F.js} +2 -2
  134. package/dist/{radio-group-CSKgiPxL.js.map → radio-group-BNyzzO-F.js.map} +1 -1
  135. package/dist/{radio-group-RChAvIUM.cjs → radio-group-DiRAAiCy.cjs} +2 -2
  136. package/dist/{radio-group-RChAvIUM.cjs.map → radio-group-DiRAAiCy.cjs.map} +1 -1
  137. package/dist/radio-group.cjs +1 -1
  138. package/dist/radio-group.js +1 -1
  139. package/dist/ripple-BumgqsDT.js +78 -0
  140. package/dist/ripple-BumgqsDT.js.map +1 -0
  141. package/dist/ripple-C2BHbhcS.cjs +16 -0
  142. package/dist/ripple-C2BHbhcS.cjs.map +1 -0
  143. package/dist/rxjs-utils.js +4 -4
  144. package/dist/schmancy-steps-container-3Odvvi2u.cjs +64 -0
  145. package/dist/schmancy-steps-container-3Odvvi2u.cjs.map +1 -0
  146. package/dist/schmancy-steps-container-Ke5dskhS.js +147 -0
  147. package/dist/schmancy-steps-container-Ke5dskhS.js.map +1 -0
  148. package/dist/select-BYI_HL-h.js +234 -0
  149. package/dist/select-BYI_HL-h.js.map +1 -0
  150. package/dist/select-DiFknGpF.cjs +57 -0
  151. package/dist/select-DiFknGpF.cjs.map +1 -0
  152. package/dist/select.cjs +1 -1
  153. package/dist/select.js +1 -1
  154. package/dist/selector-hook-B5oIBdcJ.cjs +2 -0
  155. package/dist/selector-hook-B5oIBdcJ.cjs.map +1 -0
  156. package/dist/selector-hook-BdsJkaE2.js +185 -0
  157. package/dist/selector-hook-BdsJkaE2.js.map +1 -0
  158. package/dist/{sheet-CHFWbG_0.js → sheet-9d1u9s1_.js} +48 -46
  159. package/dist/sheet-9d1u9s1_.js.map +1 -0
  160. package/dist/sheet-BKvr585i.cjs +47 -0
  161. package/dist/sheet-BKvr585i.cjs.map +1 -0
  162. package/dist/sheet.cjs +1 -1
  163. package/dist/sheet.js +1 -1
  164. package/dist/{slider-njrfDqrk.js → slider-DAawYwTF.js} +3 -3
  165. package/dist/{slider-njrfDqrk.js.map → slider-DAawYwTF.js.map} +1 -1
  166. package/dist/{slider-rumGp8Bz.cjs → slider-bPjwDSDc.cjs} +2 -2
  167. package/dist/{slider-rumGp8Bz.cjs.map → slider-bPjwDSDc.cjs.map} +1 -1
  168. package/dist/slider.cjs +1 -1
  169. package/dist/slider.js +1 -1
  170. package/dist/{spinner-DVEN9TFJ.cjs → spinner-BgkHeWML.cjs} +4 -4
  171. package/dist/{spinner-DVEN9TFJ.cjs.map → spinner-BgkHeWML.cjs.map} +1 -1
  172. package/dist/{spinner-C3JUT7Lx.js → spinner-CTrfi93b.js} +11 -12
  173. package/dist/{spinner-C3JUT7Lx.js.map → spinner-CTrfi93b.js.map} +1 -1
  174. package/dist/steps.cjs +2 -0
  175. package/dist/steps.cjs.map +1 -0
  176. package/dist/steps.js +8 -0
  177. package/dist/steps.js.map +1 -0
  178. package/dist/store.cjs +2 -0
  179. package/dist/store.cjs.map +1 -0
  180. package/dist/store.js +22 -0
  181. package/dist/store.js.map +1 -0
  182. package/dist/{surface-BpQasVOW.js → surface-CjUAkHMv.js} +2 -2
  183. package/dist/{surface-BpQasVOW.js.map → surface-CjUAkHMv.js.map} +1 -1
  184. package/dist/{surface-CZayNjQ8.cjs → surface-QtNAwY0v.cjs} +2 -2
  185. package/dist/{surface-CZayNjQ8.cjs.map → surface-QtNAwY0v.cjs.map} +1 -1
  186. package/dist/surface.cjs +1 -1
  187. package/dist/surface.js +1 -1
  188. package/dist/table-CUgn9BYP.cjs +80 -0
  189. package/dist/table-CUgn9BYP.cjs.map +1 -0
  190. package/dist/table-k-u5jZrL.js +129 -0
  191. package/dist/table-k-u5jZrL.js.map +1 -0
  192. package/dist/table.cjs +1 -1
  193. package/dist/table.js +5 -1
  194. package/dist/{tabs-group-BWmuXV1M.cjs → tabs-group-B4ZCjn7j.cjs} +2 -2
  195. package/dist/{tabs-group-BWmuXV1M.cjs.map → tabs-group-B4ZCjn7j.cjs.map} +1 -1
  196. package/dist/{tabs-group-Dsupy-TK.js → tabs-group-BhHCB2nJ.js} +2 -2
  197. package/dist/{tabs-group-Dsupy-TK.js.map → tabs-group-BhHCB2nJ.js.map} +1 -1
  198. package/dist/tabs.cjs +1 -1
  199. package/dist/tabs.js +1 -1
  200. package/dist/tailwind.mixin-Bn3Brhz1.js +43 -0
  201. package/dist/{tailwind.mixin-C2MUeArS.js.map → tailwind.mixin-Bn3Brhz1.js.map} +1 -1
  202. package/dist/tailwind.mixin-DqqGTjD_.cjs +2 -0
  203. package/dist/{tailwind.mixin-UzdLTEsN.cjs.map → tailwind.mixin-DqqGTjD_.cjs.map} +1 -1
  204. package/dist/teleport.cjs +1 -1
  205. package/dist/{teleport.component-MPE8PARx.js → teleport.component-CCf1dH9g.js} +59 -59
  206. package/dist/{teleport.component-MPE8PARx.js.map → teleport.component-CCf1dH9g.js.map} +1 -1
  207. package/dist/{teleport.component-CHl-4cYz.cjs → teleport.component-n3DU71bR.cjs} +19 -19
  208. package/dist/{teleport.component-CHl-4cYz.cjs.map → teleport.component-n3DU71bR.cjs.map} +1 -1
  209. package/dist/teleport.js +1 -1
  210. package/dist/textarea-8T5kXo2A.cjs +42 -0
  211. package/dist/{textarea-DtP4CN8S.cjs.map → textarea-8T5kXo2A.cjs.map} +1 -1
  212. package/dist/{textarea-DZhAzd2-.js → textarea-CqkmSvJg.js} +8 -9
  213. package/dist/{textarea-DZhAzd2-.js.map → textarea-CqkmSvJg.js.map} +1 -1
  214. package/dist/textarea.cjs +1 -1
  215. package/dist/textarea.js +1 -1
  216. package/dist/{theme-button-XUBpRyVd.cjs → theme-button-CZFLICY-.cjs} +2 -2
  217. package/dist/{theme-button-XUBpRyVd.cjs.map → theme-button-CZFLICY-.cjs.map} +1 -1
  218. package/dist/{theme-button-B7v53G35.js → theme-button-CyebufWg.js} +2 -2
  219. package/dist/{theme-button-B7v53G35.js.map → theme-button-CyebufWg.js.map} +1 -1
  220. package/dist/theme-button.cjs +1 -1
  221. package/dist/theme-button.js +1 -1
  222. package/dist/theme.cjs +1 -1
  223. package/dist/{theme.component-Df85q2pE.cjs → theme.component-DTaJ-jCs.cjs} +2 -2
  224. package/dist/{theme.component-Df85q2pE.cjs.map → theme.component-DTaJ-jCs.cjs.map} +1 -1
  225. package/dist/{theme.component-4tKB3U5D.js → theme.component-HyW-lfw_.js} +2 -2
  226. package/dist/{theme.component-4tKB3U5D.js.map → theme.component-HyW-lfw_.js.map} +1 -1
  227. package/dist/theme.js +1 -1
  228. package/dist/{timezone-FYjFkh4S.cjs → timezone-CgtDcgym.cjs} +2 -2
  229. package/dist/{timezone-FYjFkh4S.cjs.map → timezone-CgtDcgym.cjs.map} +1 -1
  230. package/dist/{timezone-C9zQrHBV.js → timezone-Cn0_OvVY.js} +3 -3
  231. package/dist/{timezone-C9zQrHBV.js.map → timezone-Cn0_OvVY.js.map} +1 -1
  232. package/dist/{tree-BEsQyzsP.js → tree-B0bZOfLC.js} +2 -2
  233. package/dist/{tree-BEsQyzsP.js.map → tree-B0bZOfLC.js.map} +1 -1
  234. package/dist/{tree-k_BipeY0.cjs → tree-Bg8L88Pd.cjs} +2 -2
  235. package/dist/{tree-k_BipeY0.cjs.map → tree-Bg8L88Pd.cjs.map} +1 -1
  236. package/dist/tree.cjs +1 -1
  237. package/dist/tree.js +1 -1
  238. package/dist/{typewriter-B3B8JBRl.cjs → typewriter-C-U4rB_m.cjs} +2 -2
  239. package/dist/{typewriter-B3B8JBRl.cjs.map → typewriter-C-U4rB_m.cjs.map} +1 -1
  240. package/dist/{typewriter-CjgsbmTc.js → typewriter-DB08jO4e.js} +11 -11
  241. package/dist/{typewriter-CjgsbmTc.js.map → typewriter-DB08jO4e.js.map} +1 -1
  242. package/dist/typewriter.cjs +1 -1
  243. package/dist/typewriter.js +1 -1
  244. package/dist/{typography-BzTRpIGt.js → typography-CdFf2sTC.js} +2 -2
  245. package/dist/{typography-BzTRpIGt.js.map → typography-CdFf2sTC.js.map} +1 -1
  246. package/dist/{typography-Cs7PQACq.cjs → typography-DvI9Wos_.cjs} +2 -2
  247. package/dist/{typography-Cs7PQACq.cjs.map → typography-DvI9Wos_.cjs.map} +1 -1
  248. package/dist/typography.cjs +1 -1
  249. package/dist/typography.js +1 -1
  250. package/package.json +1 -1
  251. package/types/src/form/form-v2.d.ts +72 -0
  252. package/types/src/form/index.d.ts +1 -0
  253. package/types/src/index.d.ts +2 -1
  254. package/types/src/input/index.d.ts +1 -0
  255. package/types/src/input/input-v2.d.ts +250 -0
  256. package/types/src/select/select.d.ts +10 -1
  257. package/types/src/sheet/sheet.d.ts +2 -1
  258. package/types/src/sheet/sheet.service.d.ts +2 -7
  259. package/types/src/steps/index.d.ts +3 -0
  260. package/types/src/steps/schmancy-step.d.ts +52 -0
  261. package/types/src/steps/schmancy-steps-container.d.ts +17 -0
  262. package/types/src/steps/steps.context.d.ts +12 -0
  263. package/types/src/store/action-creator.d.ts +8 -0
  264. package/types/src/store/clear.d.ts +1 -0
  265. package/types/src/store/context-collection.d.ts +74 -0
  266. package/types/src/store/context-create.d.ts +8 -0
  267. package/types/src/store/context-object.d.ts +69 -0
  268. package/types/src/store/filter-directive.d.ts +32 -0
  269. package/types/src/store/index.d.ts +8 -0
  270. package/types/src/store/selector-hook.d.ts +15 -0
  271. package/types/src/store/selectors.d.ts +50 -0
  272. package/types/src/store/storage-manager.d.ts +56 -0
  273. package/types/src/store/types.d.ts +84 -0
  274. package/types/src/table/index.d.ts +1 -0
  275. package/types/src/table/row.d.ts +19 -0
  276. package/types/src/table/table.d.ts +26 -4
  277. package/dist/autocomplete-BIJ9G0y1.cjs +0 -57
  278. package/dist/color-D8r6dpWm.cjs +0 -2
  279. package/dist/color-D8r6dpWm.cjs.map +0 -1
  280. package/dist/color-DrgmL7QT.js +0 -19
  281. package/dist/color-DrgmL7QT.js.map +0 -1
  282. package/dist/form-BTg8x5QO.js +0 -73
  283. package/dist/form-BTg8x5QO.js.map +0 -1
  284. package/dist/form-DPRTjp4Q.cjs +0 -8
  285. package/dist/form-DPRTjp4Q.cjs.map +0 -1
  286. package/dist/input-BNIa-xYu.js +0 -136
  287. package/dist/input-BNIa-xYu.js.map +0 -1
  288. package/dist/input-CqYkuOF4.cjs +0 -51
  289. package/dist/input-CqYkuOF4.cjs.map +0 -1
  290. package/dist/input-Dq3dT_7p.cjs +0 -98
  291. package/dist/input-Dq3dT_7p.cjs.map +0 -1
  292. package/dist/input-igN7Vis2.js +0 -205
  293. package/dist/input-igN7Vis2.js.map +0 -1
  294. package/dist/ripple-3indJ14o.js +0 -64
  295. package/dist/ripple-3indJ14o.js.map +0 -1
  296. package/dist/ripple-B_wT0zgD.cjs +0 -16
  297. package/dist/ripple-B_wT0zgD.cjs.map +0 -1
  298. package/dist/select-CHXdCR-t.js +0 -206
  299. package/dist/select-CHXdCR-t.js.map +0 -1
  300. package/dist/select-Gbo-xjwq.cjs +0 -56
  301. package/dist/select-Gbo-xjwq.cjs.map +0 -1
  302. package/dist/sheet-CHFWbG_0.js.map +0 -1
  303. package/dist/sheet-CrlIJTBl.cjs +0 -47
  304. package/dist/sheet-CrlIJTBl.cjs.map +0 -1
  305. package/dist/table-BzJFv5qf.cjs +0 -6
  306. package/dist/table-BzJFv5qf.cjs.map +0 -1
  307. package/dist/table-CWRqwAtQ.js +0 -21
  308. package/dist/table-CWRqwAtQ.js.map +0 -1
  309. package/dist/tailwind.mixin-C2MUeArS.js +0 -43
  310. package/dist/tailwind.mixin-UzdLTEsN.cjs +0 -2
  311. package/dist/textarea-DtP4CN8S.cjs +0 -42
  312. package/dist/v2.cjs +0 -2
  313. package/dist/v2.cjs.map +0 -1
  314. package/dist/v2.js +0 -5
  315. package/dist/v2.js.map +0 -1
@@ -0,0 +1,234 @@
1
+ import { autoUpdate as c, computePosition as u, offset as y, flip as v, shift as m } from "@floating-ui/dom";
2
+ import "rxjs";
3
+ import { classMap as f } from "lit/directives/class-map.js";
4
+ import "lit/directives/style-map.js";
5
+ import { $ as b } from "./litElement.mixin-CtugwVVz.js";
6
+ import "./tailwind.mixin-Bn3Brhz1.js";
7
+ import { c as g } from "./ripple-BumgqsDT.js";
8
+ import { S as w } from "./theme.interface-C5Kj6WjD.js";
9
+ import { css as V, html as O } from "lit";
10
+ import { property as r, state as h, query as p, queryAssignedElements as A, customElement as S } from "lit/decorators.js";
11
+ var $ = Object.defineProperty, _ = Object.getOwnPropertyDescriptor, o = (t, i, e, s) => {
12
+ for (var n, l = s > 1 ? void 0 : s ? _(i, e) : i, d = t.length - 1; d >= 0; d--) (n = t[d]) && (l = (s ? n(i, e, l) : n(l)) || l);
13
+ return s && l && $(i, e, l), l;
14
+ };
15
+ let a = class extends b(V`
16
+ :host {
17
+ display: block;
18
+ position: relative;
19
+ }
20
+
21
+ [role='listbox'] {
22
+ overflow-y: auto;
23
+ outline: none;
24
+ }
25
+ `) {
26
+ constructor() {
27
+ super(), this.required = !1, this.placeholder = "", this.value = "", this.multi = !1, this.label = "", this.hint = "", this.validateOn = "touched", this.isOpen = !1, this.valueLabel = "", this.isValid = !0, this.validationMessage = "", this._userInteracted = !1, this._touched = !1, this._dirty = !1, this._submitted = !1, this.handleKeyDown = (t) => {
28
+ if (!this.isOpen) return void (["Enter", " ", "ArrowDown"].includes(t.key) && (t.preventDefault(), this.openDropdown(!1)));
29
+ const i = this.options.findIndex((e) => e.matches(":focus")) ?? -1;
30
+ switch (t.key) {
31
+ case "Escape":
32
+ case "Tab":
33
+ this.closeDropdown();
34
+ break;
35
+ case "ArrowDown":
36
+ t.preventDefault(), this.focusOption(this.options, Math.min(i + 1, this.options.length - 1));
37
+ break;
38
+ case "ArrowUp":
39
+ t.preventDefault(), this.focusOption(this.options, Math.max(i - 1, 0));
40
+ break;
41
+ case "Enter":
42
+ case " ":
43
+ t.preventDefault(), i >= 0 && this.handleOptionSelect(this.options[i].value);
44
+ }
45
+ };
46
+ try {
47
+ this.internals = this.attachInternals();
48
+ } catch {
49
+ }
50
+ }
51
+ get form() {
52
+ var t;
53
+ return (t = this.internals) == null ? void 0 : t.form;
54
+ }
55
+ connectedCallback() {
56
+ var t;
57
+ super.connectedCallback(), this.id || (this.id = `schmancy-select-${Math.random().toString(36).substr(2, 9)}`), this.addEventListener("keydown", this.handleKeyDown), (t = this.internals) != null && t.form && (this.internals.form.addEventListener("submit", () => {
58
+ this._submitted = !0, this.checkValidity();
59
+ }), this.internals.form.addEventListener("reset", () => {
60
+ this.reset();
61
+ }));
62
+ }
63
+ disconnectedCallback() {
64
+ var t, i;
65
+ super.disconnectedCallback(), this.removeEventListener("keydown", this.handleKeyDown), (t = this.cleanupPositioner) == null || t.call(this), (i = this.internals) != null && i.form && (this.internals.form.removeEventListener("submit", () => {
66
+ this._submitted = !0;
67
+ }), this.internals.form.removeEventListener("reset", () => {
68
+ this.reset();
69
+ }));
70
+ }
71
+ firstUpdated() {
72
+ this.syncSelection(), this.setupOptionsAccessibility();
73
+ }
74
+ updated(t) {
75
+ var i;
76
+ if (super.updated(t), t.has("value")) {
77
+ const e = Array.isArray(this.value) ? this.value.join(",") : this.value;
78
+ (i = this.internals) == null || i.setFormValue(e), this.hasUpdated && (this._dirty = !0), this.hasUpdated && this.checkValidity();
79
+ }
80
+ }
81
+ shouldShowValidation(t = !1) {
82
+ if (t) return !0;
83
+ switch (this.validateOn) {
84
+ case "always":
85
+ return !0;
86
+ case "touched":
87
+ default:
88
+ return this._touched;
89
+ case "dirty":
90
+ return this._dirty;
91
+ case "submitted":
92
+ return this._submitted;
93
+ }
94
+ }
95
+ syncSelection() {
96
+ if (this.multi) {
97
+ const t = Array.isArray(this.value) ? this.value : [];
98
+ this.options.forEach((i) => i.selected = t.includes(i.value)), this.valueLabel = t.length > 0 ? this.options.filter((i) => t.includes(i.value)).map((i) => i.label).join(", ") : this.placeholder;
99
+ } else {
100
+ const t = this.options.find((i) => i.value === this.value);
101
+ this.valueLabel = (t == null ? void 0 : t.label) || this.placeholder;
102
+ }
103
+ }
104
+ setupOptionsAccessibility() {
105
+ this.options.forEach((t, i) => {
106
+ t.setAttribute("role", "option"), t.id || (t.id = `${this.id}-option-${i}`), t.tabIndex = -1;
107
+ const e = Array.isArray(this.value) ? this.value : [];
108
+ t.setAttribute("aria-selected", String(this.multi ? e.includes(t.value) : t.value === this.value));
109
+ });
110
+ }
111
+ async positionDropdown() {
112
+ const t = this.renderRoot.querySelector(".trigger");
113
+ if (!t || !this.ul) return;
114
+ const i = window.innerHeight - t.getBoundingClientRect().bottom - 10;
115
+ this.ul.style.maxHeight = `${i}px`, this.cleanupPositioner = c(t, this.ul, async () => {
116
+ const { x: e, y: s } = await u(t, this.ul, { placement: "bottom-start", middleware: [y(5), v(), m({ padding: 5 })] });
117
+ Object.assign(this.ul.style, { left: `${e}px`, top: `${s}px`, position: "absolute" });
118
+ });
119
+ }
120
+ focusOption(t, i) {
121
+ const e = t[i];
122
+ if (e) {
123
+ e.focus();
124
+ const s = this.renderRoot.querySelector(".trigger");
125
+ s == null || s.setAttribute("aria-activedescendant", e.id);
126
+ }
127
+ }
128
+ async openDropdown(t = !1) {
129
+ this._touched = !0, this.isOpen = !0, await this.updateComplete, this.positionDropdown(), this.setupOptionsAccessibility();
130
+ const i = Array.from(this.ul.querySelectorAll('[role="option"]')), e = this.multi ? 0 : i.findIndex((s) => s.getAttribute("value") === this.value);
131
+ this.focusOption(i, Math.max(e, 0)), t && this.reportValidity();
132
+ }
133
+ closeDropdown() {
134
+ var i;
135
+ this._touched = !0, this.isOpen = !1, (i = this.cleanupPositioner) == null || i.call(this);
136
+ const t = this.renderRoot.querySelector(".trigger");
137
+ t == null || t.removeAttribute("aria-activedescendant"), t == null || t.focus(), this.shouldShowValidation() && this.checkValidity();
138
+ }
139
+ handleOptionSelect(t) {
140
+ var i;
141
+ if (this._userInteracted = !0, this._touched = !0, this._dirty = !0, this.multi) {
142
+ const e = this.options.find((n) => n.value === t);
143
+ if (!e) return;
144
+ e.selected = !e.selected;
145
+ let s = Array.isArray(this.value) ? [...this.value] : [];
146
+ s = e.selected ? [...s, t] : s.filter((n) => n !== t), this.value = s, this.valueLabel = s.length > 0 ? this.options.filter((n) => s.includes(n.value)).map((n) => n.label).join(", ") : this.placeholder, this.dispatchChange(s);
147
+ } else this.options.forEach((e) => e.selected = e.value === t), this.value = t, this.valueLabel = ((i = this.options.find((e) => e.value === t)) == null ? void 0 : i.label) || this.placeholder, this.dispatchChange(t), this.closeDropdown();
148
+ this.setupOptionsAccessibility(), this.checkValidity();
149
+ }
150
+ dispatchChange(t) {
151
+ this.dispatchEvent(new CustomEvent("change", { detail: { value: t }, bubbles: !0, composed: !0 })), this.dispatchEvent(new Event("change", { bubbles: !0 })), this.checkValidity();
152
+ }
153
+ checkValidity() {
154
+ var e, s;
155
+ const t = this.multi ? !Array.isArray(this.value) || this.value.length === 0 : !this.value, i = !(this.required && t);
156
+ if (this.isValid = i, this.isValid ? (this.validationMessage = "", (e = this.internals) == null || e.setValidity({})) : (this.validationMessage = "Please select an option.", (s = this.internals) == null || s.setValidity({ valueMissing: !0 }, "Please select an option.", this.inputRef)), this.inputRef && this.hasUpdated) {
157
+ const n = !this.isValid && this.shouldShowValidation();
158
+ this.inputRef.error = n;
159
+ }
160
+ return this.isValid;
161
+ }
162
+ reportValidity() {
163
+ const t = this.checkValidity();
164
+ return this.inputRef && (this.inputRef.error = !t, this.inputRef.hint = t ? this.hint : this.validationMessage, t || this.inputRef.reportValidity()), t;
165
+ }
166
+ setCustomValidity(t) {
167
+ var i, e;
168
+ this.validationMessage = t, t ? (this.isValid = !1, (i = this.internals) == null || i.setValidity({ customError: !0 }, t, this.inputRef)) : (this.isValid = !0, (e = this.internals) == null || e.setValidity({})), this.inputRef && this.shouldShowValidation() && (this.inputRef.error = !this.isValid, this.inputRef.hint = this.isValid ? this.hint : this.validationMessage);
169
+ }
170
+ reset() {
171
+ var t;
172
+ this.value = "", this.valueLabel = this.placeholder, this.isValid = !0, this.validationMessage = "", this._touched = !1, this._dirty = !1, this._submitted = !1, this._userInteracted = !1, (t = this.internals) == null || t.setValidity({}), this.options.forEach((i) => i.selected = !1), this.inputRef && (this.inputRef.error = !1, this.inputRef.hint = this.hint);
173
+ }
174
+ render() {
175
+ const t = !this.isValid && this.shouldShowValidation();
176
+ return O`
177
+ <div class="relative">
178
+ <sch-input
179
+ .name=${this.name}
180
+ tabIndex="0"
181
+ class="trigger"
182
+ role="combobox"
183
+ aria-haspopup="listbox"
184
+ aria-expanded=${this.isOpen}
185
+ aria-controls="options"
186
+ aria-autocomplete="none"
187
+ aria-required=${this.required}
188
+ .label=${this.label}
189
+ .placeholder=${this.placeholder}
190
+ .value=${this.valueLabel}
191
+ .required=${this.required}
192
+ .hint=${t ? this.validationMessage : this.hint}
193
+ .error=${t}
194
+ .validateOn=${this.validateOn}
195
+ readonly
196
+ @click=${() => this.isOpen ? this.closeDropdown() : this.openDropdown(!0)}
197
+ ></sch-input>
198
+
199
+ <div
200
+ id="overlay"
201
+ class="fixed inset-0"
202
+ ?hidden=${!this.isOpen}
203
+ @click=${this.closeDropdown}
204
+ tabindex="-1"
205
+ aria-hidden="true"
206
+ ></div>
207
+
208
+ <ul
209
+ id="options"
210
+ role="listbox"
211
+ aria-multiselectable=${this.multi}
212
+ class=${f({ "absolute z-[1000] mt-1 w-full rounded-md shadow-sm": !0, hidden: !this.isOpen })}
213
+ ${g({ bgColor: w.sys.color.surface.container })}
214
+ @click=${(i) => {
215
+ var n;
216
+ const e = i, s = (n = e.detail) == null ? void 0 : n.value;
217
+ s && this.handleOptionSelect(s);
218
+ }}
219
+ >
220
+ <slot
221
+ @slotchange=${() => {
222
+ this.syncSelection(), this.setupOptionsAccessibility();
223
+ }}
224
+ ></slot>
225
+ </ul>
226
+ </div>
227
+ `;
228
+ }
229
+ };
230
+ a.formAssociated = !0, o([r({ type: String })], a.prototype, "name", 2), o([r({ type: Boolean, reflect: !0 })], a.prototype, "required", 2), o([r({ type: String })], a.prototype, "placeholder", 2), o([r({ type: String, reflect: !0 })], a.prototype, "value", 2), o([r({ type: Boolean })], a.prototype, "multi", 2), o([r({ type: String })], a.prototype, "label", 2), o([r({ type: String })], a.prototype, "hint", 2), o([r({ type: String })], a.prototype, "validateOn", 2), o([h()], a.prototype, "isOpen", 2), o([h()], a.prototype, "valueLabel", 2), o([h()], a.prototype, "isValid", 2), o([r({ type: String })], a.prototype, "validationMessage", 2), o([p("ul")], a.prototype, "ul", 2), o([p("sch-input")], a.prototype, "inputRef", 2), o([A({ flatten: !0 })], a.prototype, "options", 2), o([h()], a.prototype, "_userInteracted", 2), o([h()], a.prototype, "_touched", 2), o([h()], a.prototype, "_dirty", 2), o([h()], a.prototype, "_submitted", 2), a = o([S("schmancy-select")], a);
231
+ export {
232
+ a as S
233
+ };
234
+ //# sourceMappingURL=select-BYI_HL-h.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-BYI_HL-h.js","sources":["../src/select/select.ts"],"sourcesContent":["import { autoUpdate, 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 from '@schmancy/option/option'\nimport { SchmancyTheme } from '@schmancy/theme/theme.interface'\nimport { css, html, PropertyValues, TemplateResult } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\n\nexport type SchmancySelectChangeEvent = CustomEvent<{\n\tvalue: string | string[]\n}>\n\n@customElement('schmancy-select')\nexport class SchmancySelect extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: relative;\n\t}\n\n\t[role='listbox'] {\n\t\toverflow-y: auto;\n\t\toutline: none;\n\t}\n`) {\n\t// Form association setup\n\tstatic formAssociated = true\n\tprivate internals?: ElementInternals\n\n\t// API\n\t@property({ type: String }) name: string | undefined\n\t@property({ type: Boolean, reflect: true }) required = false\n\t@property({ type: String }) placeholder = ''\n\t@property({ type: String, reflect: true }) value: string | string[] = '' // for single-select or multi-select\n\t@property({ type: Boolean }) multi = false\n\t@property({ type: String }) label = ''\n\t@property({ type: String }) hint = ''\n\t@property({ type: String }) validateOn: 'always' | 'touched' | 'dirty' | 'submitted' = 'touched'\n\n\t// Internal states\n\t@state() private isOpen = false\n\t@state() private valueLabel = ''\n\t@state() private isValid = true\n\t@property({ type: String }) validationMessage = ''\n\n\t@query('ul') private ul!: HTMLUListElement\n\t@query('sch-input') private inputRef!: SchmancyInput\n\t@queryAssignedElements({ flatten: true }) private options!: SchmancyOption[]\n\tprivate cleanupPositioner?: () => void\n\t@state() _userInteracted = false\n\t@state() private _touched = false\n\t@state() private _dirty = false\n\t@state() private _submitted = false\n\n\tconstructor() {\n\t\tsuper()\n\t\t// Initialize ElementInternals for form association\n\t\ttry {\n\t\t\tthis.internals = this.attachInternals()\n\t\t} catch (e) {\n\t\t\tconsole.warn('FormAssociated elements not supported in this browser', e)\n\t\t}\n\t}\n\n\tget form() {\n\t\treturn this.internals?.form\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tif (!this.id) {\n\t\t\tthis.id = `schmancy-select-${Math.random().toString(36).substr(2, 9)}`\n\t\t}\n\t\tthis.addEventListener('keydown', this.handleKeyDown)\n\n\t\t// Listen for form submission events to mark field as submitted\n\t\tif (this.internals?.form) {\n\t\t\tthis.internals.form.addEventListener('submit', () => {\n\t\t\t\tthis._submitted = true\n\t\t\t\tthis.checkValidity()\n\t\t\t})\n\n\t\t\t// Listen for form reset\n\t\t\tthis.internals.form.addEventListener('reset', () => {\n\t\t\t\tthis.reset()\n\t\t\t})\n\t\t}\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.removeEventListener('keydown', this.handleKeyDown)\n\t\tthis.cleanupPositioner?.()\n\n\t\t// Remove form event listeners\n\t\tif (this.internals?.form) {\n\t\t\tthis.internals.form.removeEventListener('submit', () => {\n\t\t\t\tthis._submitted = true\n\t\t\t})\n\n\t\t\tthis.internals.form.removeEventListener('reset', () => {\n\t\t\t\tthis.reset()\n\t\t\t})\n\t\t}\n\t}\n\n\tfirstUpdated() {\n\t\tthis.syncSelection()\n\t\tthis.setupOptionsAccessibility()\n\t}\n\n\tupdated(changedProps: PropertyValues) {\n\t\tsuper.updated(changedProps)\n\n\t\tif (changedProps.has('value')) {\n\t\t\t// Update form value when component value changes\n\t\t\tconst formValue = Array.isArray(this.value) ? this.value.join(',') : this.value\n\t\t\tthis.internals?.setFormValue(formValue)\n\n\t\t\t// Mark as dirty if value changes from initial value\n\t\t\tif (this.hasUpdated) {\n\t\t\t\tthis._dirty = true\n\t\t\t}\n\n\t\t\t// Check validity based on validation strategy\n\t\t\tif (this.hasUpdated) {\n\t\t\t\tthis.checkValidity()\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Determines if validation errors should be shown based on current state\n\t * and validation strategy\n\t */\n\tprivate shouldShowValidation(forceValidation = false): boolean {\n\t\tif (forceValidation) return true\n\n\t\tswitch (this.validateOn) {\n\t\t\tcase 'always':\n\t\t\t\treturn true\n\t\t\tcase 'touched':\n\t\t\t\treturn this._touched\n\t\t\tcase 'dirty':\n\t\t\t\treturn this._dirty\n\t\t\tcase 'submitted':\n\t\t\t\treturn this._submitted\n\t\t\tdefault:\n\t\t\t\treturn this._touched\n\t\t}\n\t}\n\n\tprivate syncSelection() {\n\t\tif (this.multi) {\n\t\t\tconst selectedValues = Array.isArray(this.value) ? this.value : []\n\t\t\tthis.options.forEach(o => (o.selected = selectedValues.includes(o.value))) // Update option selected state\n\t\t\tthis.valueLabel =\n\t\t\t\tselectedValues.length > 0\n\t\t\t\t\t? this.options\n\t\t\t\t\t\t\t.filter(o => selectedValues.includes(o.value))\n\t\t\t\t\t\t\t.map(o => o.label)\n\t\t\t\t\t\t\t.join(', ')\n\t\t\t\t\t: this.placeholder\n\t\t} else {\n\t\t\tconst selectedOption = this.options.find(o => o.value === this.value)\n\t\t\tthis.valueLabel = selectedOption?.label || this.placeholder\n\t\t}\n\t}\n\n\tprivate setupOptionsAccessibility() {\n\t\tthis.options.forEach((option, index) => {\n\t\t\toption.setAttribute('role', 'option')\n\t\t\tif (!option.id) {\n\t\t\t\toption.id = `${this.id}-option-${index}`\n\t\t\t}\n\t\t\toption.tabIndex = -1\n\t\t\tconst selectedValues = Array.isArray(this.value) ? this.value : []\n\n\t\t\toption.setAttribute(\n\t\t\t\t'aria-selected',\n\t\t\t\tString(this.multi ? selectedValues.includes(option.value) : option.value === this.value),\n\t\t\t)\n\t\t})\n\t}\n\n\tprivate async positionDropdown() {\n\t\tconst reference = this.renderRoot.querySelector('.trigger') as HTMLElement\n\t\tif (!reference || !this.ul) return\n\n\t\t// Get the available height\n\t\tconst availableHeight = window.innerHeight - reference.getBoundingClientRect().bottom - 10 // 10px buffer\n\t\tthis.ul.style.maxHeight = `${availableHeight}px` // Set max height\n\n\t\tthis.cleanupPositioner = autoUpdate(reference, this.ul, async () => {\n\t\t\tconst { x, y } = await computePosition(reference, this.ul, {\n\t\t\t\tplacement: 'bottom-start',\n\t\t\t\tmiddleware: [offset(5), flip(), shift({ padding: 5 })],\n\t\t\t})\n\n\t\t\tObject.assign(this.ul.style, {\n\t\t\t\tleft: `${x}px`,\n\t\t\t\ttop: `${y}px`,\n\t\t\t\tposition: 'absolute',\n\t\t\t})\n\t\t})\n\t}\n\n\tprivate handleKeyDown = (e: KeyboardEvent) => {\n\t\tif (!this.isOpen) {\n\t\t\tif (['Enter', ' ', 'ArrowDown'].includes(e.key)) {\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.openDropdown(false)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tconst current = this.options.findIndex(o => o.matches(':focus')) ?? -1\n\n\t\tswitch (e.key) {\n\t\t\tcase 'Escape':\n\t\t\t\tthis.closeDropdown()\n\t\t\t\tbreak\n\t\t\tcase 'ArrowDown':\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.focusOption(this.options, Math.min(current + 1, this.options.length - 1))\n\t\t\t\tbreak\n\t\t\tcase 'ArrowUp':\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.focusOption(this.options, Math.max(current - 1, 0))\n\t\t\t\tbreak\n\t\t\tcase 'Enter':\n\t\t\tcase ' ':\n\t\t\t\te.preventDefault()\n\t\t\t\tif (current >= 0) this.handleOptionSelect(this.options[current].value)\n\t\t\t\tbreak\n\t\t\tcase 'Tab':\n\t\t\t\tthis.closeDropdown()\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\tprivate focusOption(options: HTMLElement[], index: number) {\n\t\tconst option = options[index]\n\t\tif (option) {\n\t\t\toption.focus()\n\t\t\tconst combobox = this.renderRoot.querySelector('.trigger')\n\t\t\tcombobox?.setAttribute('aria-activedescendant', option.id)\n\t\t}\n\t}\n\n\tprivate async openDropdown(report = false) {\n\t\tthis._touched = true // Mark as touched when dropdown is opened\n\t\tthis.isOpen = true\n\t\tawait this.updateComplete\n\n\t\tthis.positionDropdown()\n\t\tthis.setupOptionsAccessibility()\n\n\t\tconst options = Array.from(this.ul.querySelectorAll('[role=\"option\"]')) as HTMLElement[]\n\t\tconst selectedIndex = this.multi ? 0 : options.findIndex(o => o.getAttribute('value') === this.value)\n\t\tthis.focusOption(options, Math.max(selectedIndex, 0))\n\n\t\tif (report) this.reportValidity()\n\t}\n\n\tprivate closeDropdown() {\n\t\tthis._touched = true // Mark as touched when dropdown is closed\n\t\tthis.isOpen = false\n\t\tthis.cleanupPositioner?.()\n\t\tconst combobox = this.renderRoot.querySelector<HTMLElement>('.trigger')\n\t\tcombobox?.removeAttribute('aria-activedescendant')\n\t\tcombobox?.focus()\n\n\t\t// Check validity when closing, respecting validation strategy\n\t\tif (this.shouldShowValidation()) {\n\t\t\tthis.checkValidity()\n\t\t}\n\t}\n\n\tprivate handleOptionSelect(value: string) {\n\t\tthis._userInteracted = true\n\t\tthis._touched = true\n\t\tthis._dirty = true\n\n\t\tif (this.multi) {\n\t\t\tconst option = this.options.find(o => o.value === value)\n\t\t\tif (!option) return\n\n\t\t\toption.selected = !option.selected\n\t\t\tlet selectedValues = Array.isArray(this.value) ? [...this.value] : []\n\n\t\t\tif (option.selected) {\n\t\t\t\tselectedValues = [...selectedValues, value]\n\t\t\t} else {\n\t\t\t\tselectedValues = selectedValues.filter(v => v !== value)\n\t\t\t}\n\n\t\t\tthis.value = selectedValues\n\n\t\t\tthis.valueLabel =\n\t\t\t\tselectedValues.length > 0\n\t\t\t\t\t? this.options\n\t\t\t\t\t\t\t.filter(o => selectedValues.includes(o.value))\n\t\t\t\t\t\t\t.map(o => o.label)\n\t\t\t\t\t\t\t.join(', ')\n\t\t\t\t\t: this.placeholder\n\n\t\t\tthis.dispatchChange(selectedValues)\n\t\t} else {\n\t\t\tthis.options.forEach(o => (o.selected = o.value === value))\n\t\t\tthis.value = value\n\t\t\tthis.valueLabel = this.options.find(o => o.value === value)?.label || this.placeholder\n\t\t\tthis.dispatchChange(value)\n\t\t\tthis.closeDropdown()\n\t\t}\n\n\t\tthis.setupOptionsAccessibility()\n\n\t\t// Check validity respecting validation strategy\n\t\tthis.checkValidity()\n\t}\n\n\tprivate dispatchChange(value: string | string[]) {\n\t\t// Dispatch events first\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent<SchmancySelectChangeEvent['detail']>('change', {\n\t\t\t\tdetail: { value },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t\tthis.dispatchEvent(new Event('change', { bubbles: true }))\n\n\t\t// Then check validity (only show error if validation should be shown)\n\t\tthis.checkValidity()\n\t}\n\n\tpublic checkValidity(): boolean {\n\t\t// Determine if the select is empty based on whether it's multi-select or single-select\n\t\tconst isEmpty = this.multi ? !Array.isArray(this.value) || this.value.length === 0 : !this.value\n\n\t\t// Check if the value is valid (not empty when required)\n\t\tconst isValid = !(this.required && isEmpty)\n\n\t\t// Set the validity state\n\t\tthis.isValid = isValid\n\n\t\tif (!this.isValid) {\n\t\t\tthis.validationMessage = 'Please select an option.'\n\t\t\tthis.internals?.setValidity({ valueMissing: true }, 'Please select an option.', this.inputRef)\n\t\t} else {\n\t\t\t// Clear validation message\n\t\t\tthis.validationMessage = ''\n\t\t\tthis.internals?.setValidity({})\n\t\t}\n\n\t\t// Update the input component to reflect our validation state\n\t\tif (this.inputRef && this.hasUpdated) {\n\t\t\tconst showError = !this.isValid && this.shouldShowValidation()\n\t\t\tthis.inputRef.error = showError\n\t\t}\n\n\t\treturn this.isValid\n\t}\n\n\tpublic reportValidity(): boolean {\n\t\t// Force validation display regardless of validation strategy\n\t\tconst valid = this.checkValidity()\n\n\t\t// Force the input to show validation errors\n\t\tif (this.inputRef) {\n\t\t\t// Set the input's error state\n\t\t\tthis.inputRef.error = !valid\n\t\t\tthis.inputRef.hint = !valid ? this.validationMessage : this.hint\n\n\t\t\t// Only call reportValidity on the input if invalid to show the native popup\n\t\t\tif (!valid) {\n\t\t\t\tthis.inputRef.reportValidity()\n\t\t\t}\n\t\t}\n\n\t\treturn valid\n\t}\n\n\tpublic setCustomValidity(message: string) {\n\t\tthis.validationMessage = message\n\t\tif (message) {\n\t\t\tthis.isValid = false\n\t\t\tthis.internals?.setValidity({ customError: true }, message, this.inputRef)\n\t\t} else {\n\t\t\tthis.isValid = true\n\t\t\tthis.internals?.setValidity({})\n\t\t}\n\n\t\t// Update input if needed\n\t\tif (this.inputRef && this.shouldShowValidation()) {\n\t\t\tthis.inputRef.error = !this.isValid\n\t\t\tthis.inputRef.hint = !this.isValid ? this.validationMessage : this.hint\n\t\t}\n\t}\n\n\tpublic reset() {\n\t\tthis.value = ''\n\t\tthis.valueLabel = this.placeholder\n\t\tthis.isValid = true\n\t\tthis.validationMessage = ''\n\t\tthis._touched = false\n\t\tthis._dirty = false\n\t\tthis._submitted = false\n\t\tthis._userInteracted = false\n\t\tthis.internals?.setValidity({})\n\t\tthis.options.forEach(o => (o.selected = false))\n\n\t\tif (this.inputRef) {\n\t\t\tthis.inputRef.error = false\n\t\t\tthis.inputRef.hint = this.hint\n\t\t}\n\t}\n\n\trender(): TemplateResult {\n\t\t// Determine if we should show errors based on the validation strategy\n\t\tconst showErrors = !this.isValid && this.shouldShowValidation()\n\n\t\treturn html`\n\t\t\t<div class=\"relative\">\n\t\t\t\t<sch-input\n\t\t\t\t\t.name=${this.name}\n\t\t\t\t\ttabIndex=\"0\"\n\t\t\t\t\tclass=\"trigger\"\n\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\taria-expanded=${this.isOpen}\n\t\t\t\t\taria-controls=\"options\"\n\t\t\t\t\taria-autocomplete=\"none\"\n\t\t\t\t\taria-required=${this.required}\n\t\t\t\t\t.label=${this.label}\n\t\t\t\t\t.placeholder=${this.placeholder}\n\t\t\t\t\t.value=${this.valueLabel}\n\t\t\t\t\t.required=${this.required}\n\t\t\t\t\t.hint=${showErrors ? this.validationMessage : this.hint}\n\t\t\t\t\t.error=${showErrors}\n\t\t\t\t\t.validateOn=${this.validateOn}\n\t\t\t\t\treadonly\n\t\t\t\t\t@click=${() => (this.isOpen ? this.closeDropdown() : this.openDropdown(true))}\n\t\t\t\t></sch-input>\n\n\t\t\t\t<div\n\t\t\t\t\tid=\"overlay\"\n\t\t\t\t\tclass=\"fixed inset-0\"\n\t\t\t\t\t?hidden=${!this.isOpen}\n\t\t\t\t\t@click=${this.closeDropdown}\n\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t></div>\n\n\t\t\t\t<ul\n\t\t\t\t\tid=\"options\"\n\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\taria-multiselectable=${this.multi}\n\t\t\t\t\tclass=${classMap({\n\t\t\t\t\t\t'absolute z-[1000] mt-1 w-full rounded-md shadow-sm': true,\n\t\t\t\t\t\thidden: !this.isOpen,\n\t\t\t\t\t})}\n\t\t\t\t\t${color({ bgColor: SchmancyTheme.sys.color.surface.container })}\n\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\tconst customEvt = e as CustomEvent\n\t\t\t\t\t\tconst detailVal = customEvt.detail?.value\n\t\t\t\t\t\tif (detailVal) {\n\t\t\t\t\t\t\tthis.handleOptionSelect(detailVal)\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<slot\n\t\t\t\t\t\t@slotchange=${() => {\n\t\t\t\t\t\t\tthis.syncSelection()\n\t\t\t\t\t\t\tthis.setupOptionsAccessibility()\n\t\t\t\t\t\t}}\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\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-select': SchmancySelect\n\t}\n}\n"],"names":["SchmancySelect","$LitElement","css","constructor","super","this","required","placeholder","value","multi","label","hint","validateOn","isOpen","valueLabel","isValid","validationMessage","_userInteracted","_touched","_dirty","_submitted","handleKeyDown","e","includes","key","preventDefault","openDropdown","current","options","findIndex","o","matches","closeDropdown","focusOption","Math","min","length","max","handleOptionSelect","internals","attachInternals","form","connectedCallback","id","random","toString","substr","addEventListener","checkValidity","reset","disconnectedCallback","removeEventListener","cleanupPositioner","firstUpdated","syncSelection","setupOptionsAccessibility","changedProps","updated","has","formValue","Array","isArray","join","setFormValue","hasUpdated","forceValidation","selectedValues","forEach","selected","filter","map","selectedOption","find","option","index","setAttribute","tabIndex","String","reference","renderRoot","querySelector","ul","availableHeight","window","innerHeight","getBoundingClientRect","bottom","style","maxHeight","autoUpdate","async","x","y","computePosition","placement","middleware","offset","flip","shift","padding","Object","assign","left","top","position","focus","combobox","report","updateComplete","positionDropdown","from","querySelectorAll","selectedIndex","getAttribute","reportValidity","removeAttribute","shouldShowValidation","v","dispatchChange","dispatchEvent","CustomEvent","detail","bubbles","composed","Event","isEmpty","setValidity","valueMissing","inputRef","showError","error","valid","message","customError","showErrors","html","name","classMap","hidden","color","bgColor","SchmancyTheme","sys","surface","container","customEvt","detailVal","formAssociated","__decorateClass","property","type","prototype","Boolean","reflect","state","query","queryAssignedElements","flatten","customElement"],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ "use strict";const l=require("@floating-ui/dom");require("rxjs");const d=require("lit/directives/class-map.js");require("lit/directives/style-map.js");const p=require("./litElement.mixin-Ct-snNwC.cjs");require("./tailwind.mixin-DqqGTjD_.cjs");const u=require("./ripple-C2BHbhcS.cjs"),y=require("./theme.interface-Xg5Zi46a.cjs"),c=require("lit"),a=require("lit/decorators.js");var m=Object.defineProperty,v=Object.getOwnPropertyDescriptor,n=(t,e,i,s)=>{for(var o,r=s>1?void 0:s?v(e,i):e,h=t.length-1;h>=0;h--)(o=t[h])&&(r=(s?o(e,i,r):o(r))||r);return s&&r&&m(e,i,r),r};exports.SchmancySelect=class extends p.$LitElement(c.css`
2
+ :host {
3
+ display: block;
4
+ position: relative;
5
+ }
6
+
7
+ [role='listbox'] {
8
+ overflow-y: auto;
9
+ outline: none;
10
+ }
11
+ `){constructor(){super(),this.required=!1,this.placeholder="",this.value="",this.multi=!1,this.label="",this.hint="",this.validateOn="touched",this.isOpen=!1,this.valueLabel="",this.isValid=!0,this.validationMessage="",this._userInteracted=!1,this._touched=!1,this._dirty=!1,this._submitted=!1,this.handleKeyDown=t=>{if(!this.isOpen)return void(["Enter"," ","ArrowDown"].includes(t.key)&&(t.preventDefault(),this.openDropdown(!1)));const e=this.options.findIndex(i=>i.matches(":focus"))??-1;switch(t.key){case"Escape":case"Tab":this.closeDropdown();break;case"ArrowDown":t.preventDefault(),this.focusOption(this.options,Math.min(e+1,this.options.length-1));break;case"ArrowUp":t.preventDefault(),this.focusOption(this.options,Math.max(e-1,0));break;case"Enter":case" ":t.preventDefault(),e>=0&&this.handleOptionSelect(this.options[e].value)}};try{this.internals=this.attachInternals()}catch{}}get form(){var t;return(t=this.internals)==null?void 0:t.form}connectedCallback(){var t;super.connectedCallback(),this.id||(this.id=`schmancy-select-${Math.random().toString(36).substr(2,9)}`),this.addEventListener("keydown",this.handleKeyDown),(t=this.internals)!=null&&t.form&&(this.internals.form.addEventListener("submit",()=>{this._submitted=!0,this.checkValidity()}),this.internals.form.addEventListener("reset",()=>{this.reset()}))}disconnectedCallback(){var t,e;super.disconnectedCallback(),this.removeEventListener("keydown",this.handleKeyDown),(t=this.cleanupPositioner)==null||t.call(this),(e=this.internals)!=null&&e.form&&(this.internals.form.removeEventListener("submit",()=>{this._submitted=!0}),this.internals.form.removeEventListener("reset",()=>{this.reset()}))}firstUpdated(){this.syncSelection(),this.setupOptionsAccessibility()}updated(t){var e;if(super.updated(t),t.has("value")){const i=Array.isArray(this.value)?this.value.join(","):this.value;(e=this.internals)==null||e.setFormValue(i),this.hasUpdated&&(this._dirty=!0),this.hasUpdated&&this.checkValidity()}}shouldShowValidation(t=!1){if(t)return!0;switch(this.validateOn){case"always":return!0;case"touched":default:return this._touched;case"dirty":return this._dirty;case"submitted":return this._submitted}}syncSelection(){if(this.multi){const t=Array.isArray(this.value)?this.value:[];this.options.forEach(e=>e.selected=t.includes(e.value)),this.valueLabel=t.length>0?this.options.filter(e=>t.includes(e.value)).map(e=>e.label).join(", "):this.placeholder}else{const t=this.options.find(e=>e.value===this.value);this.valueLabel=(t==null?void 0:t.label)||this.placeholder}}setupOptionsAccessibility(){this.options.forEach((t,e)=>{t.setAttribute("role","option"),t.id||(t.id=`${this.id}-option-${e}`),t.tabIndex=-1;const i=Array.isArray(this.value)?this.value:[];t.setAttribute("aria-selected",String(this.multi?i.includes(t.value):t.value===this.value))})}async positionDropdown(){const t=this.renderRoot.querySelector(".trigger");if(!t||!this.ul)return;const e=window.innerHeight-t.getBoundingClientRect().bottom-10;this.ul.style.maxHeight=`${e}px`,this.cleanupPositioner=l.autoUpdate(t,this.ul,async()=>{const{x:i,y:s}=await l.computePosition(t,this.ul,{placement:"bottom-start",middleware:[l.offset(5),l.flip(),l.shift({padding:5})]});Object.assign(this.ul.style,{left:`${i}px`,top:`${s}px`,position:"absolute"})})}focusOption(t,e){const i=t[e];if(i){i.focus();const s=this.renderRoot.querySelector(".trigger");s==null||s.setAttribute("aria-activedescendant",i.id)}}async openDropdown(t=!1){this._touched=!0,this.isOpen=!0,await this.updateComplete,this.positionDropdown(),this.setupOptionsAccessibility();const e=Array.from(this.ul.querySelectorAll('[role="option"]')),i=this.multi?0:e.findIndex(s=>s.getAttribute("value")===this.value);this.focusOption(e,Math.max(i,0)),t&&this.reportValidity()}closeDropdown(){var e;this._touched=!0,this.isOpen=!1,(e=this.cleanupPositioner)==null||e.call(this);const t=this.renderRoot.querySelector(".trigger");t==null||t.removeAttribute("aria-activedescendant"),t==null||t.focus(),this.shouldShowValidation()&&this.checkValidity()}handleOptionSelect(t){var e;if(this._userInteracted=!0,this._touched=!0,this._dirty=!0,this.multi){const i=this.options.find(o=>o.value===t);if(!i)return;i.selected=!i.selected;let s=Array.isArray(this.value)?[...this.value]:[];s=i.selected?[...s,t]:s.filter(o=>o!==t),this.value=s,this.valueLabel=s.length>0?this.options.filter(o=>s.includes(o.value)).map(o=>o.label).join(", "):this.placeholder,this.dispatchChange(s)}else this.options.forEach(i=>i.selected=i.value===t),this.value=t,this.valueLabel=((e=this.options.find(i=>i.value===t))==null?void 0:e.label)||this.placeholder,this.dispatchChange(t),this.closeDropdown();this.setupOptionsAccessibility(),this.checkValidity()}dispatchChange(t){this.dispatchEvent(new CustomEvent("change",{detail:{value:t},bubbles:!0,composed:!0})),this.dispatchEvent(new Event("change",{bubbles:!0})),this.checkValidity()}checkValidity(){var i,s;const t=this.multi?!Array.isArray(this.value)||this.value.length===0:!this.value,e=!(this.required&&t);if(this.isValid=e,this.isValid?(this.validationMessage="",(i=this.internals)==null||i.setValidity({})):(this.validationMessage="Please select an option.",(s=this.internals)==null||s.setValidity({valueMissing:!0},"Please select an option.",this.inputRef)),this.inputRef&&this.hasUpdated){const o=!this.isValid&&this.shouldShowValidation();this.inputRef.error=o}return this.isValid}reportValidity(){const t=this.checkValidity();return this.inputRef&&(this.inputRef.error=!t,this.inputRef.hint=t?this.hint:this.validationMessage,t||this.inputRef.reportValidity()),t}setCustomValidity(t){var e,i;this.validationMessage=t,t?(this.isValid=!1,(e=this.internals)==null||e.setValidity({customError:!0},t,this.inputRef)):(this.isValid=!0,(i=this.internals)==null||i.setValidity({})),this.inputRef&&this.shouldShowValidation()&&(this.inputRef.error=!this.isValid,this.inputRef.hint=this.isValid?this.hint:this.validationMessage)}reset(){var t;this.value="",this.valueLabel=this.placeholder,this.isValid=!0,this.validationMessage="",this._touched=!1,this._dirty=!1,this._submitted=!1,this._userInteracted=!1,(t=this.internals)==null||t.setValidity({}),this.options.forEach(e=>e.selected=!1),this.inputRef&&(this.inputRef.error=!1,this.inputRef.hint=this.hint)}render(){const t=!this.isValid&&this.shouldShowValidation();return c.html`
12
+ <div class="relative">
13
+ <sch-input
14
+ .name=${this.name}
15
+ tabIndex="0"
16
+ class="trigger"
17
+ role="combobox"
18
+ aria-haspopup="listbox"
19
+ aria-expanded=${this.isOpen}
20
+ aria-controls="options"
21
+ aria-autocomplete="none"
22
+ aria-required=${this.required}
23
+ .label=${this.label}
24
+ .placeholder=${this.placeholder}
25
+ .value=${this.valueLabel}
26
+ .required=${this.required}
27
+ .hint=${t?this.validationMessage:this.hint}
28
+ .error=${t}
29
+ .validateOn=${this.validateOn}
30
+ readonly
31
+ @click=${()=>this.isOpen?this.closeDropdown():this.openDropdown(!0)}
32
+ ></sch-input>
33
+
34
+ <div
35
+ id="overlay"
36
+ class="fixed inset-0"
37
+ ?hidden=${!this.isOpen}
38
+ @click=${this.closeDropdown}
39
+ tabindex="-1"
40
+ aria-hidden="true"
41
+ ></div>
42
+
43
+ <ul
44
+ id="options"
45
+ role="listbox"
46
+ aria-multiselectable=${this.multi}
47
+ class=${d.classMap({"absolute z-[1000] mt-1 w-full rounded-md shadow-sm":!0,hidden:!this.isOpen})}
48
+ ${u.color({bgColor:y.SchmancyTheme.sys.color.surface.container})}
49
+ @click=${e=>{var o;const i=e,s=(o=i.detail)==null?void 0:o.value;s&&this.handleOptionSelect(s)}}
50
+ >
51
+ <slot
52
+ @slotchange=${()=>{this.syncSelection(),this.setupOptionsAccessibility()}}
53
+ ></slot>
54
+ </ul>
55
+ </div>
56
+ `}},exports.SchmancySelect.formAssociated=!0,n([a.property({type:String})],exports.SchmancySelect.prototype,"name",2),n([a.property({type:Boolean,reflect:!0})],exports.SchmancySelect.prototype,"required",2),n([a.property({type:String})],exports.SchmancySelect.prototype,"placeholder",2),n([a.property({type:String,reflect:!0})],exports.SchmancySelect.prototype,"value",2),n([a.property({type:Boolean})],exports.SchmancySelect.prototype,"multi",2),n([a.property({type:String})],exports.SchmancySelect.prototype,"label",2),n([a.property({type:String})],exports.SchmancySelect.prototype,"hint",2),n([a.property({type:String})],exports.SchmancySelect.prototype,"validateOn",2),n([a.state()],exports.SchmancySelect.prototype,"isOpen",2),n([a.state()],exports.SchmancySelect.prototype,"valueLabel",2),n([a.state()],exports.SchmancySelect.prototype,"isValid",2),n([a.property({type:String})],exports.SchmancySelect.prototype,"validationMessage",2),n([a.query("ul")],exports.SchmancySelect.prototype,"ul",2),n([a.query("sch-input")],exports.SchmancySelect.prototype,"inputRef",2),n([a.queryAssignedElements({flatten:!0})],exports.SchmancySelect.prototype,"options",2),n([a.state()],exports.SchmancySelect.prototype,"_userInteracted",2),n([a.state()],exports.SchmancySelect.prototype,"_touched",2),n([a.state()],exports.SchmancySelect.prototype,"_dirty",2),n([a.state()],exports.SchmancySelect.prototype,"_submitted",2),exports.SchmancySelect=n([a.customElement("schmancy-select")],exports.SchmancySelect);
57
+ //# sourceMappingURL=select-DiFknGpF.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-DiFknGpF.cjs","sources":["../src/select/select.ts"],"sourcesContent":["import { autoUpdate, 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 from '@schmancy/option/option'\nimport { SchmancyTheme } from '@schmancy/theme/theme.interface'\nimport { css, html, PropertyValues, TemplateResult } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\n\nexport type SchmancySelectChangeEvent = CustomEvent<{\n\tvalue: string | string[]\n}>\n\n@customElement('schmancy-select')\nexport class SchmancySelect extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: relative;\n\t}\n\n\t[role='listbox'] {\n\t\toverflow-y: auto;\n\t\toutline: none;\n\t}\n`) {\n\t// Form association setup\n\tstatic formAssociated = true\n\tprivate internals?: ElementInternals\n\n\t// API\n\t@property({ type: String }) name: string | undefined\n\t@property({ type: Boolean, reflect: true }) required = false\n\t@property({ type: String }) placeholder = ''\n\t@property({ type: String, reflect: true }) value: string | string[] = '' // for single-select or multi-select\n\t@property({ type: Boolean }) multi = false\n\t@property({ type: String }) label = ''\n\t@property({ type: String }) hint = ''\n\t@property({ type: String }) validateOn: 'always' | 'touched' | 'dirty' | 'submitted' = 'touched'\n\n\t// Internal states\n\t@state() private isOpen = false\n\t@state() private valueLabel = ''\n\t@state() private isValid = true\n\t@property({ type: String }) validationMessage = ''\n\n\t@query('ul') private ul!: HTMLUListElement\n\t@query('sch-input') private inputRef!: SchmancyInput\n\t@queryAssignedElements({ flatten: true }) private options!: SchmancyOption[]\n\tprivate cleanupPositioner?: () => void\n\t@state() _userInteracted = false\n\t@state() private _touched = false\n\t@state() private _dirty = false\n\t@state() private _submitted = false\n\n\tconstructor() {\n\t\tsuper()\n\t\t// Initialize ElementInternals for form association\n\t\ttry {\n\t\t\tthis.internals = this.attachInternals()\n\t\t} catch (e) {\n\t\t\tconsole.warn('FormAssociated elements not supported in this browser', e)\n\t\t}\n\t}\n\n\tget form() {\n\t\treturn this.internals?.form\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tif (!this.id) {\n\t\t\tthis.id = `schmancy-select-${Math.random().toString(36).substr(2, 9)}`\n\t\t}\n\t\tthis.addEventListener('keydown', this.handleKeyDown)\n\n\t\t// Listen for form submission events to mark field as submitted\n\t\tif (this.internals?.form) {\n\t\t\tthis.internals.form.addEventListener('submit', () => {\n\t\t\t\tthis._submitted = true\n\t\t\t\tthis.checkValidity()\n\t\t\t})\n\n\t\t\t// Listen for form reset\n\t\t\tthis.internals.form.addEventListener('reset', () => {\n\t\t\t\tthis.reset()\n\t\t\t})\n\t\t}\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.removeEventListener('keydown', this.handleKeyDown)\n\t\tthis.cleanupPositioner?.()\n\n\t\t// Remove form event listeners\n\t\tif (this.internals?.form) {\n\t\t\tthis.internals.form.removeEventListener('submit', () => {\n\t\t\t\tthis._submitted = true\n\t\t\t})\n\n\t\t\tthis.internals.form.removeEventListener('reset', () => {\n\t\t\t\tthis.reset()\n\t\t\t})\n\t\t}\n\t}\n\n\tfirstUpdated() {\n\t\tthis.syncSelection()\n\t\tthis.setupOptionsAccessibility()\n\t}\n\n\tupdated(changedProps: PropertyValues) {\n\t\tsuper.updated(changedProps)\n\n\t\tif (changedProps.has('value')) {\n\t\t\t// Update form value when component value changes\n\t\t\tconst formValue = Array.isArray(this.value) ? this.value.join(',') : this.value\n\t\t\tthis.internals?.setFormValue(formValue)\n\n\t\t\t// Mark as dirty if value changes from initial value\n\t\t\tif (this.hasUpdated) {\n\t\t\t\tthis._dirty = true\n\t\t\t}\n\n\t\t\t// Check validity based on validation strategy\n\t\t\tif (this.hasUpdated) {\n\t\t\t\tthis.checkValidity()\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Determines if validation errors should be shown based on current state\n\t * and validation strategy\n\t */\n\tprivate shouldShowValidation(forceValidation = false): boolean {\n\t\tif (forceValidation) return true\n\n\t\tswitch (this.validateOn) {\n\t\t\tcase 'always':\n\t\t\t\treturn true\n\t\t\tcase 'touched':\n\t\t\t\treturn this._touched\n\t\t\tcase 'dirty':\n\t\t\t\treturn this._dirty\n\t\t\tcase 'submitted':\n\t\t\t\treturn this._submitted\n\t\t\tdefault:\n\t\t\t\treturn this._touched\n\t\t}\n\t}\n\n\tprivate syncSelection() {\n\t\tif (this.multi) {\n\t\t\tconst selectedValues = Array.isArray(this.value) ? this.value : []\n\t\t\tthis.options.forEach(o => (o.selected = selectedValues.includes(o.value))) // Update option selected state\n\t\t\tthis.valueLabel =\n\t\t\t\tselectedValues.length > 0\n\t\t\t\t\t? this.options\n\t\t\t\t\t\t\t.filter(o => selectedValues.includes(o.value))\n\t\t\t\t\t\t\t.map(o => o.label)\n\t\t\t\t\t\t\t.join(', ')\n\t\t\t\t\t: this.placeholder\n\t\t} else {\n\t\t\tconst selectedOption = this.options.find(o => o.value === this.value)\n\t\t\tthis.valueLabel = selectedOption?.label || this.placeholder\n\t\t}\n\t}\n\n\tprivate setupOptionsAccessibility() {\n\t\tthis.options.forEach((option, index) => {\n\t\t\toption.setAttribute('role', 'option')\n\t\t\tif (!option.id) {\n\t\t\t\toption.id = `${this.id}-option-${index}`\n\t\t\t}\n\t\t\toption.tabIndex = -1\n\t\t\tconst selectedValues = Array.isArray(this.value) ? this.value : []\n\n\t\t\toption.setAttribute(\n\t\t\t\t'aria-selected',\n\t\t\t\tString(this.multi ? selectedValues.includes(option.value) : option.value === this.value),\n\t\t\t)\n\t\t})\n\t}\n\n\tprivate async positionDropdown() {\n\t\tconst reference = this.renderRoot.querySelector('.trigger') as HTMLElement\n\t\tif (!reference || !this.ul) return\n\n\t\t// Get the available height\n\t\tconst availableHeight = window.innerHeight - reference.getBoundingClientRect().bottom - 10 // 10px buffer\n\t\tthis.ul.style.maxHeight = `${availableHeight}px` // Set max height\n\n\t\tthis.cleanupPositioner = autoUpdate(reference, this.ul, async () => {\n\t\t\tconst { x, y } = await computePosition(reference, this.ul, {\n\t\t\t\tplacement: 'bottom-start',\n\t\t\t\tmiddleware: [offset(5), flip(), shift({ padding: 5 })],\n\t\t\t})\n\n\t\t\tObject.assign(this.ul.style, {\n\t\t\t\tleft: `${x}px`,\n\t\t\t\ttop: `${y}px`,\n\t\t\t\tposition: 'absolute',\n\t\t\t})\n\t\t})\n\t}\n\n\tprivate handleKeyDown = (e: KeyboardEvent) => {\n\t\tif (!this.isOpen) {\n\t\t\tif (['Enter', ' ', 'ArrowDown'].includes(e.key)) {\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.openDropdown(false)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tconst current = this.options.findIndex(o => o.matches(':focus')) ?? -1\n\n\t\tswitch (e.key) {\n\t\t\tcase 'Escape':\n\t\t\t\tthis.closeDropdown()\n\t\t\t\tbreak\n\t\t\tcase 'ArrowDown':\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.focusOption(this.options, Math.min(current + 1, this.options.length - 1))\n\t\t\t\tbreak\n\t\t\tcase 'ArrowUp':\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.focusOption(this.options, Math.max(current - 1, 0))\n\t\t\t\tbreak\n\t\t\tcase 'Enter':\n\t\t\tcase ' ':\n\t\t\t\te.preventDefault()\n\t\t\t\tif (current >= 0) this.handleOptionSelect(this.options[current].value)\n\t\t\t\tbreak\n\t\t\tcase 'Tab':\n\t\t\t\tthis.closeDropdown()\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\tprivate focusOption(options: HTMLElement[], index: number) {\n\t\tconst option = options[index]\n\t\tif (option) {\n\t\t\toption.focus()\n\t\t\tconst combobox = this.renderRoot.querySelector('.trigger')\n\t\t\tcombobox?.setAttribute('aria-activedescendant', option.id)\n\t\t}\n\t}\n\n\tprivate async openDropdown(report = false) {\n\t\tthis._touched = true // Mark as touched when dropdown is opened\n\t\tthis.isOpen = true\n\t\tawait this.updateComplete\n\n\t\tthis.positionDropdown()\n\t\tthis.setupOptionsAccessibility()\n\n\t\tconst options = Array.from(this.ul.querySelectorAll('[role=\"option\"]')) as HTMLElement[]\n\t\tconst selectedIndex = this.multi ? 0 : options.findIndex(o => o.getAttribute('value') === this.value)\n\t\tthis.focusOption(options, Math.max(selectedIndex, 0))\n\n\t\tif (report) this.reportValidity()\n\t}\n\n\tprivate closeDropdown() {\n\t\tthis._touched = true // Mark as touched when dropdown is closed\n\t\tthis.isOpen = false\n\t\tthis.cleanupPositioner?.()\n\t\tconst combobox = this.renderRoot.querySelector<HTMLElement>('.trigger')\n\t\tcombobox?.removeAttribute('aria-activedescendant')\n\t\tcombobox?.focus()\n\n\t\t// Check validity when closing, respecting validation strategy\n\t\tif (this.shouldShowValidation()) {\n\t\t\tthis.checkValidity()\n\t\t}\n\t}\n\n\tprivate handleOptionSelect(value: string) {\n\t\tthis._userInteracted = true\n\t\tthis._touched = true\n\t\tthis._dirty = true\n\n\t\tif (this.multi) {\n\t\t\tconst option = this.options.find(o => o.value === value)\n\t\t\tif (!option) return\n\n\t\t\toption.selected = !option.selected\n\t\t\tlet selectedValues = Array.isArray(this.value) ? [...this.value] : []\n\n\t\t\tif (option.selected) {\n\t\t\t\tselectedValues = [...selectedValues, value]\n\t\t\t} else {\n\t\t\t\tselectedValues = selectedValues.filter(v => v !== value)\n\t\t\t}\n\n\t\t\tthis.value = selectedValues\n\n\t\t\tthis.valueLabel =\n\t\t\t\tselectedValues.length > 0\n\t\t\t\t\t? this.options\n\t\t\t\t\t\t\t.filter(o => selectedValues.includes(o.value))\n\t\t\t\t\t\t\t.map(o => o.label)\n\t\t\t\t\t\t\t.join(', ')\n\t\t\t\t\t: this.placeholder\n\n\t\t\tthis.dispatchChange(selectedValues)\n\t\t} else {\n\t\t\tthis.options.forEach(o => (o.selected = o.value === value))\n\t\t\tthis.value = value\n\t\t\tthis.valueLabel = this.options.find(o => o.value === value)?.label || this.placeholder\n\t\t\tthis.dispatchChange(value)\n\t\t\tthis.closeDropdown()\n\t\t}\n\n\t\tthis.setupOptionsAccessibility()\n\n\t\t// Check validity respecting validation strategy\n\t\tthis.checkValidity()\n\t}\n\n\tprivate dispatchChange(value: string | string[]) {\n\t\t// Dispatch events first\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent<SchmancySelectChangeEvent['detail']>('change', {\n\t\t\t\tdetail: { value },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t\tthis.dispatchEvent(new Event('change', { bubbles: true }))\n\n\t\t// Then check validity (only show error if validation should be shown)\n\t\tthis.checkValidity()\n\t}\n\n\tpublic checkValidity(): boolean {\n\t\t// Determine if the select is empty based on whether it's multi-select or single-select\n\t\tconst isEmpty = this.multi ? !Array.isArray(this.value) || this.value.length === 0 : !this.value\n\n\t\t// Check if the value is valid (not empty when required)\n\t\tconst isValid = !(this.required && isEmpty)\n\n\t\t// Set the validity state\n\t\tthis.isValid = isValid\n\n\t\tif (!this.isValid) {\n\t\t\tthis.validationMessage = 'Please select an option.'\n\t\t\tthis.internals?.setValidity({ valueMissing: true }, 'Please select an option.', this.inputRef)\n\t\t} else {\n\t\t\t// Clear validation message\n\t\t\tthis.validationMessage = ''\n\t\t\tthis.internals?.setValidity({})\n\t\t}\n\n\t\t// Update the input component to reflect our validation state\n\t\tif (this.inputRef && this.hasUpdated) {\n\t\t\tconst showError = !this.isValid && this.shouldShowValidation()\n\t\t\tthis.inputRef.error = showError\n\t\t}\n\n\t\treturn this.isValid\n\t}\n\n\tpublic reportValidity(): boolean {\n\t\t// Force validation display regardless of validation strategy\n\t\tconst valid = this.checkValidity()\n\n\t\t// Force the input to show validation errors\n\t\tif (this.inputRef) {\n\t\t\t// Set the input's error state\n\t\t\tthis.inputRef.error = !valid\n\t\t\tthis.inputRef.hint = !valid ? this.validationMessage : this.hint\n\n\t\t\t// Only call reportValidity on the input if invalid to show the native popup\n\t\t\tif (!valid) {\n\t\t\t\tthis.inputRef.reportValidity()\n\t\t\t}\n\t\t}\n\n\t\treturn valid\n\t}\n\n\tpublic setCustomValidity(message: string) {\n\t\tthis.validationMessage = message\n\t\tif (message) {\n\t\t\tthis.isValid = false\n\t\t\tthis.internals?.setValidity({ customError: true }, message, this.inputRef)\n\t\t} else {\n\t\t\tthis.isValid = true\n\t\t\tthis.internals?.setValidity({})\n\t\t}\n\n\t\t// Update input if needed\n\t\tif (this.inputRef && this.shouldShowValidation()) {\n\t\t\tthis.inputRef.error = !this.isValid\n\t\t\tthis.inputRef.hint = !this.isValid ? this.validationMessage : this.hint\n\t\t}\n\t}\n\n\tpublic reset() {\n\t\tthis.value = ''\n\t\tthis.valueLabel = this.placeholder\n\t\tthis.isValid = true\n\t\tthis.validationMessage = ''\n\t\tthis._touched = false\n\t\tthis._dirty = false\n\t\tthis._submitted = false\n\t\tthis._userInteracted = false\n\t\tthis.internals?.setValidity({})\n\t\tthis.options.forEach(o => (o.selected = false))\n\n\t\tif (this.inputRef) {\n\t\t\tthis.inputRef.error = false\n\t\t\tthis.inputRef.hint = this.hint\n\t\t}\n\t}\n\n\trender(): TemplateResult {\n\t\t// Determine if we should show errors based on the validation strategy\n\t\tconst showErrors = !this.isValid && this.shouldShowValidation()\n\n\t\treturn html`\n\t\t\t<div class=\"relative\">\n\t\t\t\t<sch-input\n\t\t\t\t\t.name=${this.name}\n\t\t\t\t\ttabIndex=\"0\"\n\t\t\t\t\tclass=\"trigger\"\n\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\taria-expanded=${this.isOpen}\n\t\t\t\t\taria-controls=\"options\"\n\t\t\t\t\taria-autocomplete=\"none\"\n\t\t\t\t\taria-required=${this.required}\n\t\t\t\t\t.label=${this.label}\n\t\t\t\t\t.placeholder=${this.placeholder}\n\t\t\t\t\t.value=${this.valueLabel}\n\t\t\t\t\t.required=${this.required}\n\t\t\t\t\t.hint=${showErrors ? this.validationMessage : this.hint}\n\t\t\t\t\t.error=${showErrors}\n\t\t\t\t\t.validateOn=${this.validateOn}\n\t\t\t\t\treadonly\n\t\t\t\t\t@click=${() => (this.isOpen ? this.closeDropdown() : this.openDropdown(true))}\n\t\t\t\t></sch-input>\n\n\t\t\t\t<div\n\t\t\t\t\tid=\"overlay\"\n\t\t\t\t\tclass=\"fixed inset-0\"\n\t\t\t\t\t?hidden=${!this.isOpen}\n\t\t\t\t\t@click=${this.closeDropdown}\n\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t></div>\n\n\t\t\t\t<ul\n\t\t\t\t\tid=\"options\"\n\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\taria-multiselectable=${this.multi}\n\t\t\t\t\tclass=${classMap({\n\t\t\t\t\t\t'absolute z-[1000] mt-1 w-full rounded-md shadow-sm': true,\n\t\t\t\t\t\thidden: !this.isOpen,\n\t\t\t\t\t})}\n\t\t\t\t\t${color({ bgColor: SchmancyTheme.sys.color.surface.container })}\n\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\tconst customEvt = e as CustomEvent\n\t\t\t\t\t\tconst detailVal = customEvt.detail?.value\n\t\t\t\t\t\tif (detailVal) {\n\t\t\t\t\t\t\tthis.handleOptionSelect(detailVal)\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<slot\n\t\t\t\t\t\t@slotchange=${() => {\n\t\t\t\t\t\t\tthis.syncSelection()\n\t\t\t\t\t\t\tthis.setupOptionsAccessibility()\n\t\t\t\t\t\t}}\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\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-select': SchmancySelect\n\t}\n}\n"],"names":["SchmancySelect","$LitElement","css","constructor","super","this","required","placeholder","value","multi","label","hint","validateOn","isOpen","valueLabel","isValid","validationMessage","_userInteracted","_touched","_dirty","_submitted","handleKeyDown","e","includes","key","preventDefault","openDropdown","current","options","findIndex","o","matches","closeDropdown","focusOption","Math","min","length","max","handleOptionSelect","internals","attachInternals","form","connectedCallback","id","random","toString","substr","addEventListener","checkValidity","reset","disconnectedCallback","removeEventListener","cleanupPositioner","firstUpdated","syncSelection","setupOptionsAccessibility","changedProps","updated","has","formValue","Array","isArray","join","setFormValue","hasUpdated","forceValidation","selectedValues","forEach","selected","filter","map","selectedOption","find","option","index","setAttribute","tabIndex","String","reference","renderRoot","querySelector","ul","availableHeight","window","innerHeight","getBoundingClientRect","bottom","style","maxHeight","autoUpdate","async","x","y","computePosition","placement","middleware","offset","flip","shift","padding","Object","assign","left","top","position","focus","combobox","report","updateComplete","positionDropdown","from","querySelectorAll","selectedIndex","getAttribute","reportValidity","removeAttribute","shouldShowValidation","v","dispatchChange","dispatchEvent","CustomEvent","detail","bubbles","composed","Event","isEmpty","setValidity","valueMissing","inputRef","showError","error","valid","message","customError","render","showErrors","html","name","classMap","hidden","color","bgColor","SchmancyTheme","sys","surface","container","customEvt","detailVal","formAssociated","__decorateClass","property","type","prototype","Boolean","reflect","state","query","queryAssignedElements","flatten","customElement"],"mappings":"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"}
package/dist/select.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./select-Gbo-xjwq.cjs");Object.defineProperty(exports,"SchmancySelect",{enumerable:!0,get:()=>e.SchmancySelect});
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./select-DiFknGpF.cjs");Object.defineProperty(exports,"SchmancySelect",{enumerable:!0,get:()=>e.SchmancySelect});
2
2
  //# sourceMappingURL=select.cjs.map
package/dist/select.js CHANGED
@@ -1,4 +1,4 @@
1
- import { S } from "./select-CHXdCR-t.js";
1
+ import { S } from "./select-BYI_HL-h.js";
2
2
  export {
3
3
  S as SchmancySelect
4
4
  };
@@ -0,0 +1,2 @@
1
+ "use strict";const C=require("./context-object-CgZ6F8E9.cjs"),j=require("lit/decorators.js"),A=require("rxjs"),h=require("rxjs/operators"),L=(i,t)=>t.split(".").reduce((e,n)=>e==null?void 0:e[n],i),O=i=>{const t=[];for(let e=0;e<i.length-1;e++)t.push(i.substring(e,e+2));return t},x=(i,t)=>{const e=i.toLowerCase().trim(),n=t.toLowerCase().trim(),o=e.includes(n)?1:0,p=((a,l)=>{let s=0,r=0;for(;s<a.length&&r<l.length;)a[s]===l[r]&&s++,r++;return s===a.length})(n,e)?.8:0,g=((a,l)=>{const s=b=>b.split("").reduce((m,y)=>(m[y]=(m[y]||0)+1,m),{}),r=s(a),u=s(l);return Object.keys(r).every(b=>(u[b]||0)>=r[b])})(n,e)?.7:0,d=((a,l)=>{if(a.length<2||l.length<2)return 0;const s=O(a),r=O(l);let u=0;const b=new Array(r.length).fill(!1);for(const m of s)for(let y=0;y<r.length;y++)if(!b[y]&&r[y]===m){u++,b[y]=!0;break}return 2*u/(s.length+r.length)})(e,n),c=Math.max(e.length,n.length),f=c?1-((a,l)=>{const s=[];for(let r=0;r<=l.length;r++)s[r]=[r];for(let r=0;r<=a.length;r++)s[0][r]=r;for(let r=1;r<=l.length;r++)for(let u=1;u<=a.length;u++)l.charAt(r-1)===a.charAt(u-1)?s[r][u]=s[r-1][u-1]:s[r][u]=Math.min(s[r-1][u]+1,s[r][u-1]+1,s[r-1][u-1]+1);return s[l.length][a.length]})(e,n)/c:1;return Math.max(o,p,g,d,f)},M=(i,t,e)=>{switch(i){case"==":return t===e;case"!=":return t!==e;case">":return t>e;case"<":return t<e;case">=":return t>=e;case"<=":return t<=e;case"includes":return typeof t=="string"?t.toLowerCase().includes(String(e).toLowerCase()):!!Array.isArray(t)&&t.includes(e);case"notIncludes":return typeof t=="string"?!t.toLowerCase().includes(String(e).toLowerCase()):!!Array.isArray(t)&&!t.includes(e);case"startsWith":return typeof t=="string"&&t.startsWith(String(e));case"endsWith":return typeof t=="string"&&t.endsWith(String(e));case"in":return!!Array.isArray(e)&&e.includes(t);case"notIn":return!!Array.isArray(e)&&!e.includes(t);default:return!1}},w=(i,t=[])=>{const e=Array.from(i.values()).map(n=>{let o=0,p=0,g=!0;for(const d of t){let c,f,a,l=!1;if(Array.isArray(d)?([c,f,a,l=!1]=d,l=!!l):(c=d.key,f=d.operator,a=d.value,l=d.strict||!1),!l&&(a===""||a==null||Array.isArray(a)&&a.length===0))continue;const s=L(n,c);if(l){if(s!==a){g=!1;break}o+=1,p++}else if(f==="any"){if(typeof s!="string"||typeof a!="string"){g=!1;break}const r=x(s,a);if(r<.3){g=!1;break}o+=r,p++}else{if(!M(f,s,a)){g=!1;break}o+=1,p++}}return g?{item:n,score:p>0?o/p:1}:null}).filter(n=>n!==null);return e.sort((n,o)=>o.score-n.score),e.map(n=>n.item)},v=w;function k(i,t){return i.$.pipe(h.map(t),h.distinctUntilChanged((e,n)=>JSON.stringify(e)===JSON.stringify(n)),h.shareReplay(1))}function S(i,t){return i.$.pipe(h.map(t),h.distinctUntilChanged((e,n)=>e instanceof Map&&n instanceof Map?JSON.stringify(Array.from(e.entries()))===JSON.stringify(Array.from(n.entries())):JSON.stringify(e)===JSON.stringify(n)),h.shareReplay(1))}exports.createCollectionSelector=S,exports.createCompoundSelector=function(i,t){return A.combineLatest(i).pipe(h.map(e=>t(...e)),h.distinctUntilChanged((e,n)=>JSON.stringify(e)===JSON.stringify(n)),h.shareReplay(1))},exports.createContext=function(i,t,e){if(function(o){if(o==null||typeof o!="object")return!1;const p=Object.getPrototypeOf(o);return p!==Object.prototype&&p!==null&&typeof o[Symbol.iterator]=="function"}(i)){const o=C.SchmancyCollectionStore.getInstance(t,e,i);return o.value.size||o.$.next(i),o}if(typeof i=="object"&&i!==null){if(t==="indexeddb")throw new Error("IndexedDB storage is not supported for plain objects.");const o=C.SchmancyStoreObject.getInstance(t,e,i);return typeof(n=o.value)=="object"&&n!==null&&Object.keys(n).length===0&&o.$.next(i),o}throw new Error("Initial data must be an object or a Map.");var n},exports.createCountSelector=function(i,t){return S(i,e=>{if(!t)return e.size;let n=0;return e.forEach((o,p)=>{t(o,p)&&n++}),n})},exports.createFilterSelector=function(i,t){return S(i,e=>{const n=[];return e.forEach((o,p)=>{t(o,p)&&n.push(o)}),n})},exports.createItemSelector=function(i,t){return S(i,e=>e.get(t))},exports.createSelector=k,exports.filterMap=v,exports.filterMapItems=w,exports.select=function(i,t=n=>n,e={}){return function(n,o,p){j.property({attribute:!1,type:Object})(n,o);const g=n.connectedCallback,d=n.disconnectedCallback;n.connectedCallback=function(){var l;const c=this;c.t||(c.t={}),c.t[o]||(c.t[o]={subscription:null,initialLoad:!1});const f=c.t[o];!((l=c.disconnecting)!=null&&l.closed)&&c.disconnecting||(c.disconnecting=new A.Subject);const a=function(s){return"set"in s&&typeof s.set=="function"&&s.value instanceof Map}(i)?S(i,t):k(i,t);e.required||f.initialLoad||(g==null||g.call(c),f.initialLoad=!0),f.subscription||(f.subscription=a.pipe(h.takeUntil(c.disconnecting)).subscribe({next:s=>{var u;const r=structuredClone(s);c[o]=r,(u=c.requestUpdate)==null||u.call(c),e.required&&!f.initialLoad&&r&&(g==null||g.call(c),f.initialLoad=!0)},error:s=>{}}))},n.disconnectedCallback=function(){var f;d==null||d.call(this);const c=(f=this.t)==null?void 0:f[o];c!=null&&c.subscription&&(c.subscription.unsubscribe(),c.subscription=null),this.disconnecting&&(this.disconnecting.next(),this.disconnecting.complete())}}};
2
+ //# sourceMappingURL=selector-hook-B5oIBdcJ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selector-hook-B5oIBdcJ.cjs","sources":["../src/store/filter-directive.ts","../src/store/selectors.ts","../src/store/context-create.ts","../src/store/selector-hook.ts"],"sourcesContent":["/** Supported comparison operators. */\ntype ComparisonOperator =\n\t| '=='\n\t| '!='\n\t| '>'\n\t| '<'\n\t| '>='\n\t| '<='\n\t| 'includes'\n\t| 'notIncludes'\n\t| 'startsWith'\n\t| 'endsWith'\n\t| 'in'\n\t| 'notIn'\n\t| 'any' // fuzzy search operator\n\n/**\n * Query condition which can be either a tuple:\n * [field, operator, expected]\n * or an object:\n * { key, operator, value }\n */\nexport type QueryCondition =\n\t| [field: string, op: ComparisonOperator, expected: unknown, strict?: boolean]\n\t| { key: string; operator: ComparisonOperator; value: unknown; strict?: boolean }\n\n/**\n * Get a nested value from an object using a dot-separated path.\n * Checks explicitly for null/undefined so falsy values like 0 or false are preserved.\n */\nconst getFieldValue = (item: Record<string, any>, path: string): any =>\n\tpath.split('.').reduce((obj, key) => (obj == null ? undefined : obj[key]), item)\n\n/**\n * Compute the Levenshtein distance between two strings.\n */\nconst levenshtein = (a: string, b: string): number => {\n\tconst matrix: number[][] = []\n\n\t// initialize the first column\n\tfor (let i = 0; i <= b.length; i++) {\n\t\tmatrix[i] = [i]\n\t}\n\t// initialize the first row\n\tfor (let j = 0; j <= a.length; j++) {\n\t\tmatrix[0][j] = j\n\t}\n\n\tfor (let i = 1; i <= b.length; i++) {\n\t\tfor (let j = 1; j <= a.length; j++) {\n\t\t\tif (b.charAt(i - 1) === a.charAt(j - 1)) {\n\t\t\t\tmatrix[i][j] = matrix[i - 1][j - 1]\n\t\t\t} else {\n\t\t\t\tmatrix[i][j] = Math.min(\n\t\t\t\t\tmatrix[i - 1][j] + 1, // deletion\n\t\t\t\t\tmatrix[i][j - 1] + 1, // insertion\n\t\t\t\t\tmatrix[i - 1][j - 1] + 1, // substitution\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n\treturn matrix[b.length][a.length]\n}\n\n/**\n * Check if string `sub` is a subsequence of string `str`.\n * All characters in `sub` must appear in order in `str` (they need not be contiguous).\n */\nconst isSubsequence = (sub: string, str: string): boolean => {\n\tlet i = 0,\n\t\tj = 0\n\twhile (i < sub.length && j < str.length) {\n\t\tif (sub[i] === str[j]) i++\n\t\tj++\n\t}\n\treturn i === sub.length\n}\n\n/**\n * Check if every character (with frequency) in the query exists in the target.\n * For example, \"aovc\" matches \"avocados\".\n */\nconst anagramMatch = (query: string, target: string): boolean => {\n\tconst countChars = (s: string): Record<string, number> =>\n\t\ts.split('').reduce((acc, char) => {\n\t\t\tacc[char] = (acc[char] || 0) + 1\n\t\t\treturn acc\n\t\t}, {} as Record<string, number>)\n\n\tconst queryCount = countChars(query)\n\tconst targetCount = countChars(target)\n\treturn Object.keys(queryCount).every(char => (targetCount[char] || 0) >= queryCount[char])\n}\n\n/**\n * Generate bigrams for a string.\n */\nconst getBigrams = (s: string): string[] => {\n\tconst bigrams = []\n\tfor (let i = 0; i < s.length - 1; i++) {\n\t\tbigrams.push(s.substring(i, i + 2))\n\t}\n\treturn bigrams\n}\n\n/**\n * Compute Dice's coefficient for two strings based on bigrams.\n * Returns a value between 0 (no similarity) and 1 (perfect match).\n */\nconst diceCoefficient = (s1: string, s2: string): number => {\n\tif (s1.length < 2 || s2.length < 2) return 0\n\tconst bigrams1 = getBigrams(s1)\n\tconst bigrams2 = getBigrams(s2)\n\tlet intersection = 0\n\tconst used = new Array(bigrams2.length).fill(false)\n\tfor (const bigram of bigrams1) {\n\t\tfor (let i = 0; i < bigrams2.length; i++) {\n\t\t\tif (!used[i] && bigrams2[i] === bigram) {\n\t\t\t\tintersection++\n\t\t\t\tused[i] = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\treturn (2 * intersection) / (bigrams1.length + bigrams2.length)\n}\n\n/**\n * Compute a fuzzy similarity score between two strings.\n * The score is computed by taking the maximum of several methods:\n * - Direct substring match (score 1)\n * - Subsequence check (score 0.8)\n * - Anagram subset match (score 0.7)\n * - Dice coefficient\n * - Normalized Levenshtein similarity\n */\nconst computeFuzzyScore = (actual: string, expected: string): number => {\n\tconst a = actual.toLowerCase().trim()\n\tconst b = expected.toLowerCase().trim()\n\n\tconst substringScore = a.includes(b) ? 1 : 0\n\tconst subsequenceScore = isSubsequence(b, a) ? 0.8 : 0\n\tconst anagramScore = anagramMatch(b, a) ? 0.7 : 0\n\tconst diceScore = diceCoefficient(a, b)\n\tconst maxLen = Math.max(a.length, b.length)\n\tconst levenshteinScore = maxLen ? 1 - levenshtein(a, b) / maxLen : 1\n\n\treturn Math.max(substringScore, subsequenceScore, anagramScore, diceScore, levenshteinScore)\n}\n\n/**\n * Compare two values based on a simple operator.\n * For non-fuzzy operators, this returns a boolean.\n */\nconst compareValues = (op: ComparisonOperator, actual: any, expected: any): boolean => {\n\tswitch (op) {\n\t\tcase '==':\n\t\t\treturn actual === expected\n\t\tcase '!=':\n\t\t\treturn actual !== expected\n\t\tcase '>':\n\t\t\treturn actual > expected\n\t\tcase '<':\n\t\t\treturn actual < expected\n\t\tcase '>=':\n\t\t\treturn actual >= expected\n\t\tcase '<=':\n\t\t\treturn actual <= expected\n\t\tcase 'includes': {\n\t\t\tif (typeof actual === 'string') return actual.toLowerCase().includes(String(expected).toLowerCase())\n\t\t\telse if (Array.isArray(actual)) return actual.includes(expected)\n\t\t\treturn false\n\t\t}\n\t\tcase 'notIncludes': {\n\t\t\tif (typeof actual === 'string') return !actual.toLowerCase().includes(String(expected).toLowerCase())\n\t\t\telse if (Array.isArray(actual)) return !actual.includes(expected)\n\t\t\treturn false\n\t\t}\n\t\tcase 'startsWith': {\n\t\t\tif (typeof actual === 'string') return actual.startsWith(String(expected))\n\t\t\treturn false\n\t\t}\n\t\tcase 'endsWith': {\n\t\t\tif (typeof actual === 'string') return actual.endsWith(String(expected))\n\t\t\treturn false\n\t\t}\n\t\tcase 'in': {\n\t\t\tif (Array.isArray(expected)) return expected.includes(actual)\n\t\t\treturn false\n\t\t}\n\t\tcase 'notIn': {\n\t\t\tif (Array.isArray(expected)) return !expected.includes(actual)\n\t\t\treturn false\n\t\t}\n\t\tdefault: {\n\t\t\tconsole.warn(`Operator \"${op}\" is not supported in strict comparison.`)\n\t\t\treturn false\n\t\t}\n\t}\n}\n\n/**\n * Filter a Map of items given an array of query conditions.\n * For each query condition:\n * - If the expected value is empty/null/undefined, it is treated as a match.\n * - For non-fuzzy operators, the condition must strictly match.\n * - For the \"any\" operator, a fuzzy similarity score is computed.\n * Items with a fuzzy score below a given threshold (e.g., 0.3) are excluded.\n *\n * The overall item score is the average of the scores from all conditions.\n * The results are sorted in descending order of relevance.\n *\n * @param items - A Map containing items to filter.\n * @param queries - An array of query conditions to apply.\n * @returns An array of items that match all query conditions, sorted by relevance.\n */\nexport const filterMapItems = <T extends Record<string, any>>(\n\titems: Map<string, T>,\n\tqueries: QueryCondition[] = [],\n): T[] => {\n\t// Fuzzy threshold (adjust as needed)\n\tconst fuzzyThreshold = 0.3\n\n\t// Score and filter each item.\n\tconst scoredItems = Array.from(items.values())\n\t\t.map(item => {\n\t\t\tlet totalScore = 0\n\t\t\tlet count = 0\n\t\t\t// If any query fails, mark the item as invalid.\n\t\t\tlet valid = true\n\n\t\t\tfor (const query of queries) {\n\t\t\t\tlet field: string,\n\t\t\t\t\top: ComparisonOperator,\n\t\t\t\t\texpected: unknown,\n\t\t\t\t\tstrict = false\n\t\t\t\tif (Array.isArray(query)) {\n\t\t\t\t\t// Extract optional strict flag from tuple if provided.\n\t\t\t\t\t;[field, op, expected, strict = false] = query\n\t\t\t\t\tstrict = !!strict // default to false if undefined\n\t\t\t\t} else {\n\t\t\t\t\tfield = query.key\n\t\t\t\t\top = query.operator\n\t\t\t\t\texpected = query.value\n\t\t\t\t\tstrict = query.strict || false\n\t\t\t\t}\n\n\t\t\t\t// If the expected value is empty/null/undefined, or an empty array, skip filtering.\n\t\t\t\t// If the expected value is empty/null/undefined, or an empty array, and strict is false, skip filtering\n\t\t\t\tif (!strict && (expected === '' || expected == null || (Array.isArray(expected) && expected.length === 0))) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tconst actual = getFieldValue(item, field)\n\n\t\t\t\t// If strict mode is enabled, enforce exact equality.\n\t\t\t\tif (strict) {\n\t\t\t\t\tif (actual !== expected) {\n\t\t\t\t\t\tvalid = false\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\ttotalScore += 1 // exact match yields a perfect score\n\t\t\t\t\tcount++\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif (op === 'any') {\n\t\t\t\t\t// Fuzzy search requires both values to be strings.\n\t\t\t\t\tif (typeof actual !== 'string' || typeof expected !== 'string') {\n\t\t\t\t\t\tvalid = false\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tconst score = computeFuzzyScore(actual, expected)\n\t\t\t\t\tif (score < fuzzyThreshold) {\n\t\t\t\t\t\tvalid = false\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\ttotalScore += score\n\t\t\t\t\tcount++\n\t\t\t\t} else {\n\t\t\t\t\t// For non-fuzzy operators, if the condition fails, exclude the item.\n\t\t\t\t\tif (!compareValues(op, actual, expected)) {\n\t\t\t\t\t\tvalid = false\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\ttotalScore += 1 // strict match yields a perfect score.\n\t\t\t\t\tcount++\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!valid) return null\n\n\t\t\t// Use the average score if at least one condition contributed.\n\t\t\tconst overallScore = count > 0 ? totalScore / count : 1\n\t\t\treturn { item, score: overallScore }\n\t\t})\n\t\t.filter(x => x !== null) as { item: T; score: number }[]\n\n\t// Sort by descending overall score.\n\tscoredItems.sort((a, b) => b.score - a.score)\n\treturn scoredItems.map(x => x.item)\n}\n\n// /**\n// * A typed directive function interface.\n// * Ensures that using the directive returns a filtered (and ranked) array of items.\n// */\n// export type FilterMapDirectiveFn = <T extends Record<string, any>>(\n// \titems: Map<string, T>,\n// \tqueries?: QueryCondition[],\n// ) => T[]\n\n// /**\n// * Lit directive to filter a Map based on an array of query conditions.\n// *\n// * Usage in your Lit template:\n// *\n// * ```ts\n// * html`\n// * <div .items=${filterMap(this.items, [\n// * { key: 'category', operator: '==', value: itemsFilterContext.value.category },\n// * ['name', 'any', 'avo'], // will match \"avocados\" even if typed as \"avo\" or \"aovc\"\n// * ])}></div>\n// * `\n// * ```\n// */\n// class FilterMapDirective extends Directive {\n// \tconstructor(partInfo: PartInfo) {\n// \t\tsuper(partInfo)\n// \t}\n\n// \trender<T extends Record<string, any>>(items: Map<string, T>, queries: QueryCondition[] = []): T[] {\n// \t\treturn filterMapItems(items, queries) as T[]\n// \t}\n// }\n\n// Cast the directive to our typed directive function interface.\nexport const filterMap = filterMapItems\n","// src/store/selectors.ts\nimport { Observable, combineLatest } from 'rxjs'\nimport { map, distinctUntilChanged, shareReplay } from 'rxjs/operators'\nimport { IStore, ICollectionStore } from './types'\n\n/**\n * Creates a selector that derives a value from store state\n *\n * @param store The store to observe\n * @param selectorFn Function that transforms the state\n * @returns An observable of the selected state that only emits when the derived value changes\n */\nexport function createSelector<T, R>(store: IStore<T>, selectorFn: (state: T) => R): Observable<R> {\n\treturn store.$.pipe(\n\t\tmap(selectorFn),\n\t\tdistinctUntilChanged(\n\t\t\t(a, b) =>\n\t\t\t\t// Compare the two objects deep to see if they are equal\n\t\t\t\tJSON.stringify(a) === JSON.stringify(b),\n\t\t),\n\t\tshareReplay(1),\n\t)\n}\n\n/**\n * Creates a selector for collection stores that derives a value from the collection\n *\n * @param store The collection store to observe\n * @param selectorFn Function that transforms the collection\n * @returns An observable of the selected state that only emits when the derived value changes\n */\nexport function createCollectionSelector<T, R>(\n\tstore: ICollectionStore<T>,\n\tselectorFn: (state: Map<string, T>) => R,\n): Observable<R> {\n\treturn store.$.pipe(\n\t\tmap(selectorFn),\n\t\tdistinctUntilChanged((a, b) => {\n\t\t\tif (a instanceof Map && b instanceof Map) {\n\t\t\t\treturn JSON.stringify(Array.from(a.entries())) === JSON.stringify(Array.from(b.entries()))\n\t\t\t}\n\t\t\treturn JSON.stringify(a) === JSON.stringify(b)\n\t\t}),\n\t\tshareReplay(1),\n\t)\n}\n\n/**\n * Creates a selector that filters items from a collection\n *\n * @param store The collection store\n * @param filterFn Function that returns true for items to include\n * @returns An observable of filtered items as an array\n */\nexport function createFilterSelector<T>(\n\tstore: ICollectionStore<T>,\n\tfilterFn: (item: T, key: string) => boolean,\n): Observable<T[]> {\n\treturn createCollectionSelector(store, collection => {\n\t\tconst result: T[] = []\n\t\tcollection.forEach((item, key) => {\n\t\t\tif (filterFn(item, key)) {\n\t\t\t\tresult.push(item)\n\t\t\t}\n\t\t})\n\t\treturn result\n\t})\n}\n\n/**\n * Creates a selector that retrieves a single item from a collection\n *\n * @param store The collection store\n * @param itemKey The key of the item to select\n * @returns An observable of the selected item that emits when the item changes\n */\nexport function createItemSelector<T>(store: ICollectionStore<T>, itemKey: string): Observable<T | undefined> {\n\treturn createCollectionSelector(store, collection => collection.get(itemKey))\n}\n\n/**\n * Creates a selector that counts items in a collection, optionally filtered\n *\n * @param store The collection store\n * @param filterFn Optional function to filter which items to count\n * @returns An observable of the count\n */\nexport function createCountSelector<T>(\n\tstore: ICollectionStore<T>,\n\tfilterFn?: (item: T, key: string) => boolean,\n): Observable<number> {\n\treturn createCollectionSelector(store, collection => {\n\t\tif (!filterFn) return collection.size\n\n\t\tlet count = 0\n\t\tcollection.forEach((item, key) => {\n\t\t\tif (filterFn(item, key)) count++\n\t\t})\n\t\treturn count\n\t})\n}\n\n/**\n * Creates a compound selector that depends on multiple other selectors\n *\n * @param selectors Array of source selectors\n * @param combinerFn Function that combines all selector results\n * @returns An observable of the combined result\n */\nexport function createCompoundSelector<R, T extends any[]>(\n\tselectors: Observable<any>[],\n\tcombinerFn: (...values: T) => R,\n): Observable<R> {\n\treturn combineLatest(selectors).pipe(\n\t\tmap(values => combinerFn(...(values as T))),\n\t\tdistinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)),\n\t\tshareReplay(1),\n\t)\n}\n","import { ICollectionStore, IStore, StorageType } from './types'\nimport { SchmancyStoreObject } from './context-object'\nimport SchmancyCollectionStore from './context-collection'\n\n/**\n * Checks if an object is empty\n */\nfunction isEmptyObject(obj: object): boolean {\n\tif (typeof obj !== 'object' || obj === null) {\n\t\treturn false\n\t}\n\treturn Object.keys(obj).length === 0\n}\n\n/**\n * Returns true if obj is an iterable collection\n */\nfunction isCollection(obj: any): obj is Iterable<any> {\n\t// Must be non-null and of type 'object'\n\tif (obj == null || typeof obj !== 'object') {\n\t\treturn false\n\t}\n\n\t// Exclude plain objects.\n\tconst proto = Object.getPrototypeOf(obj)\n\tif (proto === Object.prototype || proto === null) {\n\t\treturn false\n\t}\n\n\t// Check for Symbol.iterator method\n\treturn typeof obj[Symbol.iterator] === 'function'\n}\n\n/**\n * Creates a context for managing state with better type safety\n */\nexport function createContext<T extends Record<string, any>>(\n\tinitialData: T,\n\tstorage: StorageType,\n\tkey: string,\n): IStore<T> & SchmancyStoreObject<T>\n\nexport function createContext<V>(\n\tinitialData: Map<string, V>,\n\tstorage: StorageType,\n\tkey: string,\n): ICollectionStore<V> & SchmancyCollectionStore<V>\n\nexport function createContext<T extends Record<string, any> | Map<string, any>>(\n\tinitialData: T | Map<string, any>,\n\tstorage: StorageType,\n\tkey: string,\n): (IStore<T> & SchmancyStoreObject<T>) | (ICollectionStore<any> & SchmancyCollectionStore<any>) {\n\tif (isCollection(initialData)) {\n\t\t// Create a collection store\n\t\tconst store = SchmancyCollectionStore.getInstance(storage, key, initialData as Map<string, any>)\n\n\t\t// Initialize with provided data if store is empty\n\t\tif (!store.value.size) {\n\t\t\tstore.$.next(initialData as Map<string, any>)\n\t\t}\n\t\treturn store as ICollectionStore<any> & SchmancyCollectionStore<any>\n\t} else if (typeof initialData === 'object' && initialData !== null) {\n\t\t// Validate storage type for object stores\n\t\tif (storage === 'indexeddb') {\n\t\t\tthrow new Error('IndexedDB storage is not supported for plain objects.')\n\t\t}\n\n\t\t// Create an object store\n\t\tconst store = SchmancyStoreObject.getInstance<T>(storage, key, initialData as T)\n\n\t\t// Initialize with provided data if store is empty\n\t\tif (isEmptyObject(store.value)) {\n\t\t\tstore.$.next(initialData as T)\n\t\t}\n\t\treturn store as IStore<T> & SchmancyStoreObject<T>\n\t} else {\n\t\tthrow new Error('Initial data must be an object or a Map.')\n\t}\n}\n","// src/store/selector-hook.ts\nimport { property as litProperty } from 'lit/decorators.js'\nimport { Subject, Subscription } from 'rxjs'\nimport { takeUntil } from 'rxjs/operators'\nimport { createCollectionSelector, createSelector } from './selectors'\nimport { ICollectionStore, IStore } from './types'\n\ninterface ComponentWithDisconnection {\n\tdisconnecting?: Subject<void>\n\trequestUpdate?: () => void\n\tisConnected: boolean\n\t__selectorProps?: Record<string, SelectorPropState<unknown>>\n\t[key: string]: any\n}\n\ninterface SelectorPropState<_T> {\n\tsubscription: Subscription | null\n\tinitialLoad: boolean\n}\n\ntype PropertyDescriptor<T> = {\n\tget?: () => T\n\tset?: (value: T) => void\n\tvalue?: T\n\tconfigurable?: boolean\n\tenumerable?: boolean\n\twritable?: boolean\n}\n\ninterface SelectOptions {\n\trequired?: boolean\n\tupdateOnly?: boolean\n}\n\nfunction isCollectionStore(store: any): store is ICollectionStore<unknown> {\n\treturn 'set' in store && typeof store.set === 'function' && store.value instanceof Map\n}\n\nexport function select<T, R>(\n\tstore: IStore<T> | ICollectionStore<T>,\n\tselectorFn: (state: any) => R = (state: R) => state,\n\toptions: SelectOptions = {},\n) {\n\treturn function (proto: Record<string, any>, propName: string, _descriptor?: PropertyDescriptor<R>) {\n\t\tlitProperty({ attribute: false, type: Object })(proto, propName)\n\n\t\tconst originalConnectedCallback = proto.connectedCallback\n\t\tconst originalDisconnectedCallback = proto.disconnectedCallback\n\n\t\tproto.connectedCallback = function (this: ComponentWithDisconnection) {\n\t\t\tconst instance = this\n\n\t\t\tif (!instance.__selectorProps) {\n\t\t\t\tinstance.__selectorProps = {}\n\t\t\t}\n\n\t\t\tif (!instance.__selectorProps[propName]) {\n\t\t\t\tinstance.__selectorProps[propName] = {\n\t\t\t\t\tsubscription: null,\n\t\t\t\t\tinitialLoad: false,\n\t\t\t\t} as SelectorPropState<R>\n\t\t\t}\n\n\t\t\tconst props = instance.__selectorProps[propName] as SelectorPropState<R>\n\n\t\t\t// Reset disconnecting Subject if it's closed or doesn't exist\n\t\t\tif (instance.disconnecting?.closed || !instance.disconnecting) {\n\t\t\t\tinstance.disconnecting = new Subject<void>()\n\t\t\t}\n\n\t\t\tconst selector = isCollectionStore(store)\n\t\t\t\t? createCollectionSelector(store, selectorFn)\n\t\t\t\t: createSelector(store as IStore<T>, selectorFn)\n\n\t\t\t// Call original connectedCallback immediately if not required\n\t\t\tif (!options.required && !props.initialLoad) {\n\t\t\t\toriginalConnectedCallback?.call(instance)\n\t\t\t\tprops.initialLoad = true\n\t\t\t}\n\n\t\t\tif (!props.subscription) {\n\t\t\t\tprops.subscription = selector.pipe(takeUntil(instance.disconnecting)).subscribe({\n\t\t\t\t\tnext: (value: R) => {\n\t\t\t\t\t\tconst newValue = structuredClone(value)\n\t\t\t\t\t\tinstance[propName] = newValue\n\t\t\t\t\t\tinstance.requestUpdate?.()\n\t\t\t\t\t\tif (options.required && !props.initialLoad && newValue) {\n\t\t\t\t\t\t\toriginalConnectedCallback?.call(instance)\n\t\t\t\t\t\t\tprops.initialLoad = true\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\terror: (err: Error) => {\n\t\t\t\t\t\tconsole.error(`Error in selector subscription for ${propName}:`, err)\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tproto.disconnectedCallback = function (this: ComponentWithDisconnection) {\n\t\t\toriginalDisconnectedCallback?.call(this)\n\n\t\t\tconst props = this.__selectorProps?.[propName] as SelectorPropState<R> | undefined\n\t\t\tif (props?.subscription) {\n\t\t\t\tprops.subscription.unsubscribe()\n\t\t\t\tprops.subscription = null\n\t\t\t}\n\n\t\t\tif (this.disconnecting) {\n\t\t\t\tthis.disconnecting.next()\n\t\t\t\tthis.disconnecting.complete()\n\t\t\t\t// Allow reinitialization by not deleting the disconnecting subject\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["getFieldValue","item","path","split","reduce","obj","key","getBigrams","s","bigrams","i","length","push","substring","computeFuzzyScore","actual","expected","a","toLowerCase","trim","b","substringScore","includes","subsequenceScore","sub","str","j","anagramScore","query","target","countChars","acc","char","queryCount","targetCount","Object","keys","every","diceScore","s1","s2","bigrams1","bigrams2","intersection","used","Array","fill","bigram","maxLen","Math","max","levenshteinScore","matrix","charAt","min","compareValues","op","String","isArray","startsWith","endsWith","filterMapItems","items","queries","scoredItems","from","values","map","totalScore","count","valid","field","strict","operator","value","score","filter","x","sort","filterMap","createSelector","store","selectorFn","$","pipe","distinctUntilChanged","JSON","stringify","shareReplay","createCollectionSelector","Map","entries","selectors","combinerFn","combineLatest","initialData","storage","proto","getPrototypeOf","prototype","Symbol","iterator","SchmancyCollectionStore","getInstance","size","next","Error","SchmancyStoreObject","filterFn","collection","forEach","result","itemKey","get","state","options","propName","_descriptor","litProperty","attribute","type","originalConnectedCallback","connectedCallback","originalDisconnectedCallback","disconnectedCallback","instance","this","__selectorProps","subscription","initialLoad","props","disconnecting","closed","Subject","selector","set","required","call","takeUntil","subscribe","newValue","structuredClone","requestUpdate","error","err","unsubscribe","complete"],"mappings":"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"}