coles-solid-library 0.5.0 → 0.5.1

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 (240) hide show
  1. package/USAGE.html +20 -12
  2. package/dist/__tests__/Body.test.d.ts +1 -0
  3. package/dist/__tests__/Button.accessibility.test.d.ts +1 -0
  4. package/dist/__tests__/Button.coverage.test.d.ts +1 -0
  5. package/dist/__tests__/Button.extra.test.d.ts +1 -0
  6. package/dist/__tests__/Button.test.d.ts +1 -0
  7. package/dist/__tests__/Carosel.test.d.ts +1 -0
  8. package/dist/__tests__/Checkbox.test.d.ts +1 -0
  9. package/dist/__tests__/Chip.performance.test.d.ts +1 -0
  10. package/dist/__tests__/Chip.test.d.ts +1 -0
  11. package/dist/__tests__/Chipbar.performance.test.d.ts +1 -0
  12. package/dist/__tests__/Chipbar.test.d.ts +1 -0
  13. package/dist/__tests__/Container.test.d.ts +1 -0
  14. package/dist/__tests__/CoreComponents.performance.test.d.ts +1 -0
  15. package/dist/__tests__/Expansion.accessibility.test.d.ts +1 -0
  16. package/dist/__tests__/ExpansionPanel.test.d.ts +1 -0
  17. package/dist/__tests__/Form.performance.test.d.ts +1 -0
  18. package/dist/__tests__/Form.submit.test.d.ts +1 -0
  19. package/dist/__tests__/FormArray.externalMutation.test.d.ts +1 -0
  20. package/dist/__tests__/FormArray.test.d.ts +1 -0
  21. package/dist/__tests__/FormBridgeRecursion.test.d.ts +1 -0
  22. package/dist/__tests__/FormDependencyRegression.test.d.ts +1 -0
  23. package/dist/__tests__/FormEnhancements.test.d.ts +1 -0
  24. package/dist/__tests__/FormField.resetAndClear.test.d.ts +1 -0
  25. package/dist/__tests__/FormField.test.d.ts +1 -0
  26. package/dist/__tests__/FormFieldDirtyOnFocus.test.d.ts +1 -0
  27. package/dist/__tests__/FormFieldDirtyState.test.d.ts +1 -0
  28. package/dist/__tests__/FormFieldExtra.test.d.ts +1 -0
  29. package/dist/__tests__/FormFieldProgrammaticSet.test.d.ts +1 -0
  30. package/dist/__tests__/FormGroup.additionalGaps.test.d.ts +1 -0
  31. package/dist/__tests__/FormGroup.gaps.test.d.ts +1 -0
  32. package/dist/__tests__/FormGroup.test.d.ts +1 -0
  33. package/dist/__tests__/FormGroupAccessors.integration.test.d.ts +1 -0
  34. package/dist/__tests__/FormGroupAccessors.test.d.ts +1 -0
  35. package/dist/__tests__/FormReactiveUpdate.test.d.ts +1 -0
  36. package/dist/__tests__/Icon.test.d.ts +1 -0
  37. package/dist/__tests__/Input.test.d.ts +1 -0
  38. package/dist/__tests__/InputV2EdgeCases.test.d.ts +1 -0
  39. package/dist/__tests__/LegacyInputDirty.test.d.ts +1 -0
  40. package/dist/__tests__/Menu.performance.test.d.ts +1 -0
  41. package/dist/__tests__/Menu.test.d.ts +1 -0
  42. package/dist/__tests__/MenuDropdown.test.d.ts +1 -0
  43. package/dist/__tests__/MenuItem.accessibility.test.d.ts +1 -0
  44. package/dist/__tests__/Modal.additional.test.d.ts +1 -0
  45. package/dist/__tests__/Modal.performance.test.d.ts +1 -0
  46. package/dist/__tests__/Modal.test.d.ts +1 -0
  47. package/dist/__tests__/Radio.test.d.ts +1 -0
  48. package/dist/__tests__/RadioGroup.keyboard.test.d.ts +1 -0
  49. package/dist/__tests__/Select.accessibility.test.d.ts +1 -0
  50. package/dist/__tests__/Select.formField.test.d.ts +1 -0
  51. package/dist/__tests__/Select.mobile.test.d.ts +1 -0
  52. package/dist/__tests__/Select.optionEdge.test.d.ts +1 -0
  53. package/dist/__tests__/Select.performance.test.d.ts +1 -0
  54. package/dist/__tests__/Select.test.d.ts +1 -0
  55. package/dist/__tests__/Snackbar.additional.test.d.ts +1 -0
  56. package/dist/__tests__/Snackbar.performance.test.d.ts +1 -0
  57. package/dist/__tests__/Snackbar.test.d.ts +1 -0
  58. package/dist/__tests__/TabBar.performance.test.d.ts +1 -0
  59. package/dist/__tests__/TabBar.test.d.ts +1 -0
  60. package/dist/__tests__/TableV2.additional.test.d.ts +1 -0
  61. package/dist/__tests__/TableV2.dropHeaderAttr.test.d.ts +1 -0
  62. package/dist/__tests__/TableV2.dropdownAdvanced.test.d.ts +1 -0
  63. package/dist/__tests__/TableV2.extra.test.d.ts +1 -0
  64. package/dist/__tests__/TableV2.nullCells.test.d.ts +1 -0
  65. package/dist/__tests__/TableV2.performance.test.d.ts +1 -0
  66. package/dist/__tests__/TableV2.test.d.ts +1 -0
  67. package/dist/__tests__/TextArea.test.d.ts +1 -0
  68. package/dist/__tests__/Validators.test.d.ts +1 -0
  69. package/dist/__tests__/globalWindowManager.performance.test.d.ts +1 -0
  70. package/dist/__tests__/globalWindowManager.test.d.ts +1 -0
  71. package/dist/__tests__/helpers/renderWithTheme.d.ts +106 -0
  72. package/dist/__tests__/injectStyles.test.d.ts +1 -0
  73. package/dist/__tests__/tools.advanced.test.d.ts +1 -0
  74. package/dist/__tests__/tools.clone.edge.test.d.ts +1 -0
  75. package/dist/__tests__/tools.test.d.ts +1 -0
  76. package/dist/__tests__/useClickOutside.test.d.ts +1 -0
  77. package/dist/__tests__/useDirectFormBinding.test.d.ts +1 -0
  78. package/dist/components/Button/Button.d.ts +1 -1
  79. package/dist/components/Button/Button.js +2 -0
  80. package/dist/components/Button/Button.js.map +1 -0
  81. package/dist/components/Button/Button.module.scss.js +2 -0
  82. package/dist/components/Button/Button.module.scss.js.map +1 -0
  83. package/dist/components/Carosel/Carosel.js +2 -0
  84. package/dist/components/Carosel/Carosel.js.map +1 -0
  85. package/dist/components/Carosel/Carosel.module.scss.js +2 -0
  86. package/dist/components/Carosel/Carosel.module.scss.js.map +1 -0
  87. package/dist/components/Carosel/Slide.js +2 -0
  88. package/dist/components/Carosel/Slide.js.map +1 -0
  89. package/dist/components/Checkbox/checkbox.js +2 -0
  90. package/dist/components/Checkbox/checkbox.js.map +1 -0
  91. package/dist/components/Checkbox/checkbox.module.scss.js +2 -0
  92. package/dist/components/Checkbox/checkbox.module.scss.js.map +1 -0
  93. package/dist/components/Chip/Chip.js +2 -0
  94. package/dist/components/Chip/Chip.js.map +1 -0
  95. package/dist/components/Chip/Chip.module.scss.js +2 -0
  96. package/dist/components/Chip/Chip.module.scss.js.map +1 -0
  97. package/dist/components/Chipbar/chipbar.js +2 -0
  98. package/dist/components/Chipbar/chipbar.js.map +1 -0
  99. package/dist/components/Chipbar/chipbar.module.scss.js +2 -0
  100. package/dist/components/Chipbar/chipbar.module.scss.js.map +1 -0
  101. package/dist/components/ComponentBody/body.component.js +2 -0
  102. package/dist/components/ComponentBody/body.component.js.map +1 -0
  103. package/dist/components/ComponentBody/body.module.scss.js +2 -0
  104. package/dist/components/ComponentBody/body.module.scss.js.map +1 -0
  105. package/dist/components/Container/container.js +2 -0
  106. package/dist/components/Container/container.js.map +1 -0
  107. package/dist/components/Container/container.module.scss.js +2 -0
  108. package/dist/components/Container/container.module.scss.js.map +1 -0
  109. package/dist/components/Form/form.js +2 -0
  110. package/dist/components/Form/form.js.map +1 -0
  111. package/dist/components/Form/formGroup.d.ts +7 -0
  112. package/dist/components/Form/formGroup.js +2 -0
  113. package/dist/components/Form/formGroup.js.map +1 -0
  114. package/dist/components/Form/formHelp/formArray.js +2 -0
  115. package/dist/components/Form/formHelp/formArray.js.map +1 -0
  116. package/dist/components/Form/formHelp/validators.js +2 -0
  117. package/dist/components/Form/formHelp/validators.js.map +1 -0
  118. package/dist/components/Form/useDirectFormBinding.js +2 -0
  119. package/dist/components/Form/useDirectFormBinding.js.map +1 -0
  120. package/dist/components/Form/useFormFieldBinding.js +2 -0
  121. package/dist/components/Form/useFormFieldBinding.js.map +1 -0
  122. package/dist/components/FormField/coleError.js +2 -0
  123. package/dist/components/FormField/coleError.js.map +1 -0
  124. package/dist/components/FormField/formField.js +2 -0
  125. package/dist/components/FormField/formField.js.map +1 -0
  126. package/dist/components/FormField/formProvider.js +2 -0
  127. package/dist/components/FormField/formProvider.js.map +1 -0
  128. package/dist/components/FormField/formfield.module.scss.js +2 -0
  129. package/dist/components/FormField/formfield.module.scss.js.map +1 -0
  130. package/dist/components/Icon/generated/outlined/keyboard_arrow_down.js +2 -0
  131. package/dist/components/Icon/generated/outlined/keyboard_arrow_down.js.map +1 -0
  132. package/dist/components/Icon/generated/outlined/keyboard_arrow_up.js +2 -0
  133. package/dist/components/Icon/generated/outlined/keyboard_arrow_up.js.map +1 -0
  134. package/dist/components/Icon/icon.d.ts +3 -8
  135. package/dist/components/Icon/icon.js +2 -0
  136. package/dist/components/Icon/icon.js.map +1 -0
  137. package/dist/components/Icon/icon.module.scss.js +2 -0
  138. package/dist/components/Icon/icon.module.scss.js.map +1 -0
  139. package/dist/components/Input/input.module.scss.js +2 -0
  140. package/dist/components/Input/input.module.scss.js.map +1 -0
  141. package/dist/components/Input/inputV2.js +2 -0
  142. package/dist/components/Input/inputV2.js.map +1 -0
  143. package/dist/components/Menu/menu.js +2 -0
  144. package/dist/components/Menu/menu.js.map +1 -0
  145. package/dist/components/Menu/menu.module.scss.js +2 -0
  146. package/dist/components/Menu/menu.module.scss.js.map +1 -0
  147. package/dist/components/Menu/menuContext.js +2 -0
  148. package/dist/components/Menu/menuContext.js.map +1 -0
  149. package/dist/components/Menu/menuDropdown.js +2 -0
  150. package/dist/components/Menu/menuDropdown.js.map +1 -0
  151. package/dist/components/Menu/menuitem.js +2 -0
  152. package/dist/components/Menu/menuitem.js.map +1 -0
  153. package/dist/components/Radio/radio-group.module.scss.js +2 -0
  154. package/dist/components/Radio/radio-group.module.scss.js.map +1 -0
  155. package/dist/components/Radio/radio.js +2 -0
  156. package/dist/components/Radio/radio.js.map +1 -0
  157. package/dist/components/Radio/radio.module.scss.js +2 -0
  158. package/dist/components/Radio/radio.module.scss.js.map +1 -0
  159. package/dist/components/Radio/radioGroup.js +2 -0
  160. package/dist/components/Radio/radioGroup.js.map +1 -0
  161. package/dist/components/Select/option.component.js +2 -0
  162. package/dist/components/Select/option.component.js.map +1 -0
  163. package/dist/components/Select/select.component.js +2 -0
  164. package/dist/components/Select/select.component.js.map +1 -0
  165. package/dist/components/Select/selectContext.js +2 -0
  166. package/dist/components/Select/selectContext.js.map +1 -0
  167. package/dist/components/Select/selectStyles.module.scss.js +2 -0
  168. package/dist/components/Select/selectStyles.module.scss.js.map +1 -0
  169. package/dist/components/Select/useHighlight.js +2 -0
  170. package/dist/components/Select/useHighlight.js.map +1 -0
  171. package/dist/components/Select/useSelectOptions.js +2 -0
  172. package/dist/components/Select/useSelectOptions.js.map +1 -0
  173. package/dist/components/Select/useTypeahead.js +2 -0
  174. package/dist/components/Select/useTypeahead.js.map +1 -0
  175. package/dist/components/Snackbar/snackbar.js +2 -0
  176. package/dist/components/Snackbar/snackbar.js.map +1 -0
  177. package/dist/components/Snackbar/snackbar.module.scss.js +2 -0
  178. package/dist/components/Snackbar/snackbar.module.scss.js.map +1 -0
  179. package/dist/components/TabV2/tabs.js +2 -0
  180. package/dist/components/TabV2/tabs.js.map +1 -0
  181. package/dist/components/TabV2/tabs.module.scss.js +2 -0
  182. package/dist/components/TabV2/tabs.module.scss.js.map +1 -0
  183. package/dist/components/TableV2/cell.js +2 -0
  184. package/dist/components/TableV2/cell.js.map +1 -0
  185. package/dist/components/TableV2/column.js +2 -0
  186. package/dist/components/TableV2/column.js.map +1 -0
  187. package/dist/components/TableV2/header.js +2 -0
  188. package/dist/components/TableV2/header.js.map +1 -0
  189. package/dist/components/TableV2/row.js +2 -0
  190. package/dist/components/TableV2/row.js.map +1 -0
  191. package/dist/components/TableV2/table.js +2 -0
  192. package/dist/components/TableV2/table.js.map +1 -0
  193. package/dist/components/TableV2/table.module.scss.js +2 -0
  194. package/dist/components/TableV2/table.module.scss.js.map +1 -0
  195. package/dist/components/TableV2/tableProvider.js +2 -0
  196. package/dist/components/TableV2/tableProvider.js.map +1 -0
  197. package/dist/components/TextArea/TextArea.js +2 -0
  198. package/dist/components/TextArea/TextArea.js.map +1 -0
  199. package/dist/components/TextArea/TextArea.module.scss.js +2 -0
  200. package/dist/components/TextArea/TextArea.module.scss.js.map +1 -0
  201. package/dist/components/expansion/expansion.js +2 -0
  202. package/dist/components/expansion/expansion.js.map +1 -0
  203. package/dist/components/expansion/expansion.module.scss.js +2 -0
  204. package/dist/components/expansion/expansion.module.scss.js.map +1 -0
  205. package/dist/components/modal/popup.component.js +2 -0
  206. package/dist/components/modal/popup.component.js.map +1 -0
  207. package/dist/components/modal/popup.module.scss.js +2 -0
  208. package/dist/components/modal/popup.module.scss.js.map +1 -0
  209. package/dist/components/svgs/arrows.js +2 -0
  210. package/dist/components/svgs/arrows.js.map +1 -0
  211. package/dist/globalWindowManager.d.ts +9 -0
  212. package/dist/globalWindowManager.js +2 -0
  213. package/dist/globalWindowManager.js.map +1 -0
  214. package/dist/index.js +2 -0
  215. package/dist/index.js.map +1 -0
  216. package/dist/injectStyles.d.ts +1 -0
  217. package/dist/styleInject.js +2 -0
  218. package/dist/styleInject.js.map +1 -0
  219. package/dist/tools/eventTools.d.ts +12 -0
  220. package/dist/tools/eventTools.js +2 -0
  221. package/dist/tools/eventTools.js.map +1 -0
  222. package/dist/tools/index.d.ts +4 -0
  223. package/dist/tools/tools.d.ts +15 -0
  224. package/dist/tools/tools.js +2 -0
  225. package/dist/tools/tools.js.map +1 -0
  226. package/dist/tools/useOverlayPosition.d.ts +27 -0
  227. package/dist/tools/useOverlayPosition.js +2 -0
  228. package/dist/tools/useOverlayPosition.js.map +1 -0
  229. package/dist/vite.d.ts +52 -0
  230. package/dist/vite.js +2 -0
  231. package/dist/vite.js.map +1 -0
  232. package/package.json +146 -11
  233. package/readme.md +36 -0
  234. package/dist/generated/registries/outlined.d.ts +0 -3
  235. package/dist/generated/registries/outlined.js +0 -7784
  236. package/dist/generated/registries/rounded.d.ts +0 -3
  237. package/dist/generated/registries/rounded.js +0 -7784
  238. package/dist/generated/registries/sharp.d.ts +0 -3
  239. package/dist/generated/registries/sharp.js +0 -7784
  240. package/dist/index.esm.js +0 -5475
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cell.js","sources":["../../../src/components/TableV2/cell.tsx"],"sourcesContent":["import { Component, createEffect, JSX, onCleanup, splitProps } from \"solid-js\";\nimport { useColumnContext, useTableContext } from \"./tableProvider\";\n\ninterface BaseCellProps<T> extends Omit<JSX.TdHTMLAttributes<HTMLTableCellElement>, \"children\"> {\n style?: JSX.CSSProperties;\n class?: string;\n header?: boolean;\n footer?: boolean;\n rowNumber?: number;\n children: JSX.Element | ((item: T, index: number) => JSX.Element);\n}\n\nexport const Cell = <T=any,>(props: BaseCellProps<T>): JSX.Element => {\n const columnContext = useColumnContext();\n const { \n addFooterCell, addFootCellStyle, removeFooterCell,\n addRowCell, addCellStyle, removeRowCell\n } = useTableContext<T>();\n \n const [local, others] = splitProps(props, [\"children\", \"class\", \"style\", \"footer\", \"rowNumber\", \"header\"]);\n \n // Get the column name from context or props\n const cellName = () => columnContext.name;\n \n // Get the current row number with a default of 1\n const rowNumber = () => (local?.rowNumber ?? 1) - 1;\n \n // Track registrations for cleanup\n let registeredAsFooter = false;\n let registeredAsRow = false;\n \n createEffect(() => {\n const name = cellName();\n const row = rowNumber();\n props.children;\n // Skip if no valid column name\n if (!name) return;\n \n // First clean up any previous registrations\n if (registeredAsFooter) {\n removeFooterCell?.(row, name);\n registeredAsFooter = false;\n }\n \n if (registeredAsRow) {\n removeRowCell?.(row, name);\n registeredAsRow = false;\n }\n \n // Register based on current props\n const isFooter = local.footer === true;\n const isHeader = local.header === true;\n \n if (isFooter) {\n // Handle footer cell registration\n if (addFooterCell && addFootCellStyle) {\n addFooterCell(row, name, local.children as JSX.Element);\n addFootCellStyle(row, name, {\n class: local.class,\n style: local.style,\n all: others\n });\n registeredAsFooter = true;\n }\n } else if (!isHeader) {\n // Handle regular data cell registration\n if (addRowCell && addCellStyle) {\n addRowCell(row, name, local.children as ((item: T, index: number) => JSX.Element));\n addCellStyle(row, name, {\n class: local.class,\n style: local.style,\n all: {\n ...others,\n colSpan: others?.colSpan ?? 1,\n }\n });\n registeredAsRow = true;\n }\n } else {\n // Handle header cell registration\n if (addRowCell && addCellStyle) {\n addRowCell(row, name, local.children as ((item: T, index: number) => JSX.Element));\n addCellStyle(row, name, {\n class: local.class,\n style: local.style,\n all: others\n });\n registeredAsRow = true;\n }\n }\n });\n \n // Clean up registered cells when component unmounts\n onCleanup(() => {\n const name = cellName();\n const row = rowNumber();\n \n if (name) {\n if (registeredAsFooter && removeFooterCell) {\n removeFooterCell(row, name);\n }\n \n if (registeredAsRow && removeRowCell) {\n removeRowCell(row, name);\n }\n }\n });\n \n return (<></>);\n};"],"names":["Cell","props","columnContext","useColumnContext","addFooterCell","addFootCellStyle","removeFooterCell","addRowCell","addCellStyle","removeRowCell","useTableContext","local","others","splitProps","cellName","name","rowNumber","registeredAsFooter","registeredAsRow","createEffect","row","children","isFooter","footer","isHeader","header","class","style","all","colSpan","onCleanup"],"mappings":"kJAYO,MAAMA,EAAgBC,IAC3B,MAAMC,EAAgBC,KAChBC,cACJA,EAAaC,iBAAEA,EAAgBC,iBAAEA,EAAgBC,WACjDA,EAAUC,aAAEA,EAAYC,cAAEA,GACxBC,KAEGC,EAAOC,GAAUC,EAAWZ,EAAO,CAAC,WAAY,QAAS,QAAS,SAAU,YAAa,WAG1Fa,EAAWA,IAAMZ,EAAca,KAG/BC,EAAYA,KAAOL,GAAOK,WAAa,GAAK,EAGlD,IAAIC,GAAqB,EACrBC,GAAkB,EA+EtB,OA7EAC,EAAa,KACX,MAAMJ,EAAOD,IACPM,EAAMJ,IAGZ,GAFAf,EAAMoB,UAEDN,EAAM,OAGPE,IACFX,IAAmBc,EAAKL,GACxBE,GAAqB,GAGnBC,IACFT,IAAgBW,EAAKL,GACrBG,GAAkB,GAIpB,MAAMI,GAA4B,IAAjBX,EAAMY,OACjBC,GAA4B,IAAjBb,EAAMc,OAEnBH,EAEElB,GAAiBC,IACnBD,EAAcgB,EAAKL,EAAMJ,EAAMU,UAC/BhB,EAAiBe,EAAKL,EAAM,CAC1BW,MAAOf,EAAMe,MACbC,MAAOhB,EAAMgB,MACbC,IAAKhB,IAEPK,GAAqB,GAEbO,EAgBNjB,GAAcC,IAChBD,EAAWa,EAAKL,EAAMJ,EAAMU,UAC5Bb,EAAaY,EAAKL,EAAM,CACtBW,MAAOf,EAAMe,MACbC,MAAOhB,EAAMgB,MACbC,IAAKhB,IAEPM,GAAkB,GArBhBX,GAAcC,IAChBD,EAAWa,EAAKL,EAAMJ,EAAMU,UAC5Bb,EAAaY,EAAKL,EAAM,CACtBW,MAAOf,EAAMe,MACbC,MAAOhB,EAAMgB,MACbC,IAAK,IACAhB,EACHiB,QAASjB,GAAQiB,SAAW,KAGhCX,GAAkB,KAiBxBY,EAAU,KACR,MAAMf,EAAOD,IACPM,EAAMJ,IAERD,IACEE,GAAsBX,GACxBA,EAAiBc,EAAKL,GAGpBG,GAAmBT,GACrBA,EAAcW,EAAKL,MAKzB"}
@@ -0,0 +1,2 @@
1
+ import{createComponent as e}from"solid-js/web";import{splitProps as r,createEffect as l,onCleanup as t}from"solid-js";import{useTableContext as o,ColumnProvider as s}from"./tableProvider.js";const n=n=>{const{addColumnStyle:m,removeColumnStyle:a}=o(),[c,i]=r(n,["name","rowNumber","children","class","style"]);let d=c.name;return l(()=>{const e=c.name;d!==e&&d&&a&&a(d),d=e,m?.(e,{class:c.class,style:c.style,all:i})}),t(()=>{a&&d&&a(d)}),e(s,{get name(){return c.name??""},get children(){return c.children}})};export{n as Column};
2
+ //# sourceMappingURL=column.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"column.js","sources":["../../../src/components/TableV2/column.tsx"],"sourcesContent":["import { createEffect, JSX, onCleanup, splitProps } from \"solid-js\";\nimport { useTableContext, ColumnProvider } from \"./tableProvider\";\n\ninterface ColumnProps extends JSX.ColHTMLAttributes<HTMLTableColElement>{ \n children: JSX.Element; \n name: string;\n rowNumber?: number;\n}\n\nexport const Column = <T,>(props: ColumnProps): JSX.Element => {\n const { addColumnStyle, removeColumnStyle } = useTableContext<T>();\n const [local, others] = splitProps(props, [\"name\", \"rowNumber\", \"children\", \"class\", \"style\"]);\n \n // Track the name to handle changes\n let currentName = local.name;\n \n // Create a reactive effect to update styles\n createEffect(() => {\n const newName = local.name;\n \n // If the name has changed, remove the old style\n if (currentName !== newName && currentName && removeColumnStyle) {\n removeColumnStyle(currentName);\n }\n \n // Update the current name\n currentName = newName;\n \n // Add the style with the new name\n addColumnStyle?.(newName, {\n class: local.class,\n style: local.style,\n all: others\n });\n });\n \n // Clean up when the component is unmounted\n onCleanup(() => {\n if (removeColumnStyle && currentName) {\n removeColumnStyle(currentName);\n }\n });\n \n return (\n <ColumnProvider name={local.name ?? ``}>\n {local.children}\n </ColumnProvider>\n );\n};\n\n"],"names":["Column","props","addColumnStyle","removeColumnStyle","useTableContext","local","others","splitProps","currentName","name","createEffect","newName","class","style","all","onCleanup","_$createComponent","ColumnProvider","children"],"mappings":"+LASO,MAAMA,EAAcC,IACzB,MAAMC,eAAEA,EAAcC,kBAAEA,GAAsBC,KACvCC,EAAOC,GAAUC,EAAWN,EAAO,CAAC,OAAQ,YAAa,WAAY,QAAS,UAGrF,IAAIO,EAAcH,EAAMI,KA6BxB,OA1BAC,EAAa,KACX,MAAMC,EAAUN,EAAMI,KAGlBD,IAAgBG,GAAWH,GAAeL,GAC5CA,EAAkBK,GAIpBA,EAAcG,EAGdT,IAAiBS,EAAS,CACxBC,MAAOP,EAAMO,MACbC,MAAOR,EAAMQ,MACbC,IAAKR,MAKTS,EAAU,KACJZ,GAAqBK,GACvBL,EAAkBK,KAItBQ,EACGC,EAAc,CAAA,QAACR,GAAI,OAAEJ,EAAMI,MAAQ,EAAE,EAAA,YAAAS,GAAA,OACnCb,EAAMa,QAAQ"}
@@ -0,0 +1,2 @@
1
+ import{splitProps as r,createEffect as e}from"solid-js";import{useColumnContext as o,useTableContext as s}from"./tableProvider.js";import{isNullish as l}from"../../tools/tools.js";const t=t=>{const a=o(),d=s();if(l(d))throw new Error("Header must be wrapped in a TableProvider");if(l(a))throw new Error("Header must be wrapped in a Column");const[m,n]=r(t,["children","class","style","rowNumber"]);return e(()=>{d?.addHeaderCell?.(a.name,(t?.rowNumber??1)-1,m.children),d?.addHeaderStyle?.(a.name,(t?.rowNumber??1)-1,{class:m.class,style:m.style,all:{scope:"col",...n}})}),[]};export{t as Header};
2
+ //# sourceMappingURL=header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.js","sources":["../../../src/components/TableV2/header.tsx"],"sourcesContent":["import { createEffect, JSX, splitProps } from \"solid-js\";\nimport { useColumnContext, useTableContext } from \"./tableProvider\";\nimport { Clone, isNullish } from \"../../tools\";\n\ninterface HeaderProps extends JSX.ThHTMLAttributes<HTMLTableCellElement> {\n children: JSX.Element;\n style?: JSX.CSSProperties;\n class?: string;\n rowNumber?: number;\n}\nexport const Header = <T,>(props: HeaderProps)=>{\n const columnInfo = useColumnContext();\n const tableContext = useTableContext();\n if (isNullish(tableContext)) {\n throw new Error(\"Header must be wrapped in a TableProvider\");\n }\n if (isNullish(columnInfo)) {\n throw new Error(\"Header must be wrapped in a Column\");\n }\n const [local, others] = splitProps(props, [\"children\", \"class\", \"style\", \"rowNumber\"]);\n\n createEffect(() => {\n tableContext?.addHeaderCell?.(columnInfo.name, ((props?.rowNumber ?? 1) - 1), local.children);\n tableContext?.addHeaderStyle?.(columnInfo.name, ((props?.rowNumber ?? 1) - 1),{ \n class: local.class,\n style: local.style,\n all: { scope: 'col', ...others }\n });\n });\n return (<></>);\n};"],"names":["Header","props","columnInfo","useColumnContext","tableContext","useTableContext","isNullish","Error","local","others","splitProps","createEffect","addHeaderCell","name","rowNumber","children","addHeaderStyle","class","style","all","scope"],"mappings":"oLAUO,MAAMA,EAAcC,IACzB,MAAMC,EAAaC,IACbC,EAAeC,IACrB,GAAIC,EAAUF,GACZ,MAAM,IAAIG,MAAM,6CAElB,GAAID,EAAUJ,GACZ,MAAM,IAAIK,MAAM,sCAElB,MAAOC,EAAOC,GAAUC,EAAWT,EAAO,CAAC,WAAY,QAAS,QAAS,cAUzE,OARAU,EAAa,KACXP,GAAcQ,gBAAgBV,EAAWW,MAAQZ,GAAOa,WAAa,GAAK,EAAIN,EAAMO,UACpFX,GAAcY,iBAAiBd,EAAWW,MAAQZ,GAAOa,WAAa,GAAK,EAAG,CAC5EG,MAAOT,EAAMS,MACbC,MAAOV,EAAMU,MACbC,IAAK,CAAEC,MAAO,SAAUX,OAG5B"}
@@ -0,0 +1,2 @@
1
+ import{memo as e}from"solid-js/web";import{splitProps as o,onMount as s}from"solid-js";import{useTableContext as l}from"./tableProvider.js";const r=r=>{const[t,c]=o(r,["rowNumber","children","class","style","header","footer"]),i=l();if(null==i)throw new Error("Row must be wrapped in a Table");const a=(r?.rowNumber??1)-1;return s(()=>{switch(!0){case!0===r.header||Object.keys(r).includes("header")&&!1!==r.header:i?.addHeaderRowStyle?.(a,{class:t.class,style:t.style,all:{...c,onClick:c.onClick}});break;case!0===r.footer||Object.keys(r).includes("footer")&&!1!==r.footer:i?.addFooterRowStyle?.(a,{class:t.class,style:t.style,all:{...c,onClick:c.onClick}});break;default:const e=Object.keys(r).includes("isDropHeader")&&!1!==r.isDropHeader,o=Object.keys(r).includes("isDropRow")&&!1!==r.isDropRow,s={...c};"function"==typeof c.onClick&&(s.__origOnClick=c.onClick,s.onClick=e=>c.onClick(e)),i?.addRowStyle?.(a,{class:t.class,style:t.style,all:s},o,e)}}),e(()=>t.children)};export{r as Row};
2
+ //# sourceMappingURL=row.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"row.js","sources":["../../../src/components/TableV2/row.tsx"],"sourcesContent":["import { Component, createEffect, JSX, onMount, splitProps } from \"solid-js\"\nimport { ColeRow } from \"./customElements\"\nimport { useTableContext } from \"./tableProvider\";\n\ninterface BaseRowProps extends Omit<JSX.HTMLAttributes<HTMLTableRowElement>, 'onClick'> {\n children?: JSX.Element[];\n rowNumber?: number;\n class?: string;\n style?: JSX.CSSProperties;\n // Allow extended onClick signature (event, dataItem?)\n onClick?: ((e: MouseEvent) => void) | ((e: MouseEvent, item: any) => void);\n}\n\ninterface HeaderRowProps extends BaseRowProps {\n header?: true | undefined;\n footer?: never;\n}\n\ninterface BodyRowProps extends BaseRowProps {\n header?: never;\n footer?: never;\n isDropRow?: boolean;\n isDropHeader?: boolean;\n}\n\ninterface FooterRowProps extends BaseRowProps {\n footer?: true | undefined;\n header?: never;\n}\n\nexport type RowProps = HeaderRowProps | BodyRowProps | FooterRowProps;\n\nexport const Row = <T,>(props: RowProps) => {\n const [local, others] = splitProps(props, [\"rowNumber\", \"children\", \"class\", \"style\", \"header\", \"footer\"]);\n \n const tableContext = useTableContext<T>();\n if (tableContext === null || tableContext === undefined) {\n throw new Error(\"Row must be wrapped in a Table\");\n }\n \n const rowNumber = (props?.rowNumber ?? 1) - 1;\n\n onMount(() => {\n switch (true) {\n case props.header === true || Object.keys(props).includes('header') && props.header !== false:\n tableContext?.addHeaderRowStyle?.(rowNumber, {\n class: local.class,\n style: local.style,\n all: { ...others, onClick: others.onClick as any }\n });\n break;\n case props.footer === true || Object.keys(props).includes('footer') && props.footer !== false:\n tableContext?.addFooterRowStyle?.(rowNumber, {\n class: local.class,\n style: local.style,\n all: { ...others, onClick: others.onClick as any }\n });\n break;\n default:\n // @ts-ignore\n const isDropHeader = Object.keys(props).includes('isDropHeader') && props.isDropHeader !== false;\n // @ts-ignore\n const isDropRow = Object.keys(props).includes('isDropRow') && props.isDropRow !== false;\n // Wrap multi-arity handler into single-param form for storage\n const storedAll: any = { ...others };\n if (typeof others.onClick === 'function') {\n // Store original; table will decide whether to pass data item based on length\n storedAll.__origOnClick = others.onClick;\n storedAll.onClick = (e: MouseEvent) => (others.onClick as any)(e); // legacy single param fallback\n }\n tableContext?.addRowStyle?.(rowNumber, {\n class: local.class,\n style: local.style,\n all: storedAll\n }, isDropRow, isDropHeader);\n break;\n }\n })\n \n\n return (\n <>\n {local.children}\n </>\n )\n};"],"names":["Row","props","local","others","splitProps","tableContext","useTableContext","Error","rowNumber","onMount","header","Object","keys","includes","addHeaderRowStyle","class","style","all","onClick","footer","addFooterRowStyle","isDropHeader","isDropRow","storedAll","__origOnClick","e","addRowStyle","_$memo","children"],"mappings":"4IAgCO,MAAMA,EAAWC,IACtB,MAAOC,EAAOC,GAAUC,EAAWH,EAAO,CAAC,YAAa,WAAY,QAAS,QAAS,SAAU,WAE1FI,EAAeC,IACrB,GAAID,QACF,MAAM,IAAIE,MAAM,kCAGlB,MAAMC,GAAaP,GAAOO,WAAa,GAAK,EAwC5C,OAtCAC,EAAQ,KACN,QAAQ,GACN,KAAsB,IAAjBR,EAAMS,QAAmBC,OAAOC,KAAKX,GAAOY,SAAS,YAA8B,IAAjBZ,EAAMS,OAC3EL,GAAcS,oBAAoBN,EAAW,CAC3CO,MAAOb,EAAMa,MACbC,MAAOd,EAAMc,MACbC,IAAK,IAAKd,EAAQe,QAASf,EAAOe,WAEpC,MACF,KAAsB,IAAjBjB,EAAMkB,QAAmBR,OAAOC,KAAKX,GAAOY,SAAS,YAA8B,IAAjBZ,EAAMkB,OAC3Ed,GAAce,oBAAoBZ,EAAW,CAC3CO,MAAOb,EAAMa,MACbC,MAAOd,EAAMc,MACbC,IAAK,IAAKd,EAAQe,QAASf,EAAOe,WAEpC,MACF,QAEE,MAAMG,EAAeV,OAAOC,KAAKX,GAAOY,SAAS,kBAA0C,IAAvBZ,EAAMoB,aAEpEC,EAAYX,OAAOC,KAAKX,GAAOY,SAAS,eAAoC,IAApBZ,EAAMqB,UAE9DC,EAAiB,IAAKpB,GACE,mBAAnBA,EAAOe,UAEhBK,EAAUC,cAAgBrB,EAAOe,QACjCK,EAAUL,QAAWO,GAAmBtB,EAAOe,QAAgBO,IAEjEpB,GAAcqB,cAAclB,EAAW,CACrCO,MAAOb,EAAMa,MACbC,MAAOd,EAAMc,MACbC,IAAKM,GACJD,EAAWD,MAMpBM,EAAA,IAEKzB,EAAM0B"}
@@ -0,0 +1,2 @@
1
+ import{createComponent as e,mergeProps as t,spread as r,insert as o,effect as l,setAttribute as n,className as s,style as a,memo as d,template as c}from"solid-js/web";import{createSignal as u,createMemo as i,createEffect as p,onMount as y,For as g}from"solid-js";import{TableProvider as h}from"./tableProvider.js";import{isNullish as w,Clone as f}from"../../tools/tools.js";import v from"./table.module.scss.js";import{createStore as m}from"solid-js/store";var b=c('<span role=alert aria-label="Cell render error">Error'),R=c("<table><colgroup></colgroup><thead></thead><tbody></tbody><tfoot>"),S=c("<col>"),C=c("<tr>"),H=c("<th>"),D=c('<td role=region aria-label="Dropdown row content">'),k=c("<td>");const j=c=>{const[j,x]=u(!1),[O,I]=u(!1),$={},E=(...e)=>{!0===c.debugLogs&&console.log("[TableV2 debug]",...e)},F=()=>c,A=i(()=>F().columns),G=()=>A()?.[0];let T;p(()=>{A().length>0&&oe({})}),p(()=>{const e=A();if(!e||0===e.length)return;const t=e[0];T&&T!==t&&_(e=>{const r={...e};for(const e in r){const o={...r[e]},l=T?o[T]:void 0,n=o[t];if(l&&n)o[t]={...n,dropRow:l.dropRow||n.dropRow||!1,dropHeader:l.dropHeader||n.dropHeader||!1};else if(n&&!n.dropRow&&!n.dropHeader){const e=Object.values(o).find(e=>e&&(e.dropRow||e.dropHeader));e&&"object"==typeof e&&(o[t]={...n,dropRow:e.dropRow||n.dropRow||!1,dropHeader:e.dropHeader||n.dropHeader||!1})}r[e]=o}return r}),T=t}),$.setDataSource=e=>{F().setData?.(()=>[...e])},$.getDataSource=()=>F().data();const[V,K]=u({});$.addHeaderCell=(e,t,r)=>{K(o=>f({...o,[t]:{...o[t],[e]:r}}))};const[L,_]=m({}),q=()=>(O(),L);$.addRowCell=(e,t,r,o)=>{_(l=>{const n={...l};n[e]||(n[e]={});const s=l[e]?.[t];return n[e][t]={element:r,dropRow:s?.dropRow||!!o,dropHeader:s?.dropHeader||!1},n})},$.removeRowCell=(e,t)=>{_(r=>{if(!r[e]||!r[e][t])return r;const o={...r},l={...o[e]};return delete l[t],o[e]=l,o})};const[N,P]=u({});$.addFooterCell=(e,t,r)=>{P(o=>{const l={...o};return l[e]||(l[e]={}),l[e]={...l[e],[t]:r},l})},$.removeFooterCell=(e,t)=>{P(r=>{if(!r[e]||!r[e][t])return r;const o={...r},l={...o[e]};return delete l[t],o[e]=l,o})};const[z,B]=u({});$.addHeaderStyle=(e,t,r)=>{B(o=>({...o,[e]:{...o[e],[t]:r}}))};const[J,M]=u({});$.addCellStyle=(e,t,r)=>{M(o=>({...o,[e]:{...o[e],[t]:r}}))};const[Q,U]=u({});$.addFootCellStyle=(e,t,r)=>{U(o=>({...o,[e]:{...o[e],[t]:r}}))};const[W,X]=u({});$.addRowStyle=(e,t,r,o)=>{const l=G();w(l)||_(t=>{const n=t[e]||{},s=n[l]||{element:()=>[]};return{...t,[e]:{...n,[l]:{...s,element:s.element,dropRow:!0===r||(s.dropRow||!1),dropHeader:!0===o||(s.dropHeader||!1)}}}}),X(l=>({...l,[e]:{...t,all:{...t?.all,isDropHeader:!0===o||void 0,isDropRow:!0===r||void 0}}}))};const[Y,Z]=u({});$.addFooterRowStyle=(e,t)=>{Z(r=>({...r,[e]:t}))};const[ee,te]=u({});$.addHeaderRowStyle=(e,t)=>{te(r=>({...r,[e]:t}))};const[re,oe]=u({});$.addColumnStyle=(e,t)=>{oe(r=>({...r,[e]:t}))},$.removeColumnStyle=e=>{oe(t=>{const r={...t};return delete r[e],r})};const[le,ne]=m({}),se=(e,t,r,o,n)=>{if("function"==typeof e)try{return e(t,r)}catch(e){const t={column:o,row:n??-1,dataIndex:r};console.error("[TableV2] Error rendering cell",e,t);const d=c.onCellError?.(e,t);return d||(a=b(),l(()=>s(a,v.errorCell)),a)}var a;return null==e?"Cell nully":e};y(()=>{I(!0)});const ae=(e,t)=>c.getRowKey?.(e,t)??t,de=(e,t,r)=>{const o=q()?.[e]?.[G()??""],l=W()[e]?.all;if(l?.isDropRow||o?.dropRow){const e=ae(r,t);return le[e]??!1}return!0};return e(h,t($,{get children(){return[(u=R(),i=u.firstChild,p=i.nextSibling,y=p.nextSibling,h=y.nextSibling,r(i,t(()=>F()?.otherStyles?.colGroup?.all,{get style(){return F().otherStyles?.colGroup?.style},get class(){return F().otherStyles?.colGroup?.class}}),!1,!0),o(i,e(g,{get each(){return A()},children:e=>{return o=S(),r(o,t(()=>re()[e]?.all,{get style(){return re()[e]?.style},get class(){return re()[e]?.class}}),!1,!1),o;var o}})),r(p,t(()=>F()?.otherStyles?.thead?.all,{get style(){return F().otherStyles?.thead?.style},get class(){return F().otherStyles?.thead?.class}}),!1,!0),o(p,e(g,{get each(){return Object.keys(V()).map(e=>parseInt(e)).sort((e,t)=>e-t)},children:l=>{return n=C(),r(n,t(()=>ee()[l]?.all,{get style(){return ee()[l]?.style},get class(){return ee()[l]?.class}}),!1,!0),o(n,e(g,{get each(){return A()},children:(e,n)=>{const s=V()[l]?.[e];return s?(a=H(),r(a,t(()=>z()[e]?.[l]?.all,{get style(){return z()[e]?.[l]?.style},get class(){return z()[e]?.[l]?.class}}),!1,!0),o(a,()=>((e,t)=>V()?.[e]?.[t])(l,e)),a):[];var a}})),n;var n}})),r(y,t(()=>F()?.otherStyles?.tbody?.all,{get style(){return F().otherStyles?.tbody?.style},get class(){return F().otherStyles?.tbody?.class}}),!1,!0),o(y,e(g,{get each(){return j(),c.data()??[]},children:(s,a)=>e(g,{get each(){return Object.keys(q()).map(e=>parseInt(e)).sort((e,t)=>e-t)},children:d=>{const c=a(),u=ae(s,c),i=G(),p=(e=>W()?.[e]??{})(d),y=p?.all,h=q()?.[d]?.[i??""],f=h?.dropHeader||y?.isDropHeader;f&&void 0===le[u]&&ne(u,!1);const m=q()?.[d]?.[i??""],b=!0===y?.isDropRow||!0===m?.dropRow,R=()=>de(d,c,s),S=((e,t,r)=>{const o=q()?.[e]?.[G()??""];return o?.dropRow?de(e,t,r)?v.openDropRow:v.dropRow:""})(d,c,s);1===d&&E("rowNum=1 dataIndex",c,"isContentRow",b,"isOpen",R(),"rowLevelAll",y);const H=e=>{e.preventDefault();const t=!le[u];ne(u,t),x(e=>!e);try{const e=`tbody tr[data-row-key="${u}"][data-drop-row="true"] td[role="region"]`,r=document.querySelector(e);r?(r.setAttribute("data-drop-state",t?"open":"closed"),r.setAttribute("aria-hidden",t?"false":"true"),E("manual region sync",e,"nowOpen",t)):E("region not found for selector",e,"immediate after click")}catch{}};return j=C(),r(j,t(()=>p?.all,{"data-drop-row":b?"true":void 0,get"data-drop-open"(){return b?R()?"true":"false":void 0},get style(){return p?.style},"data-row-key":u,onClick:e=>{f&&H(e),(e=>{const t=p?.all,r=t?.__origOnClick??t?.onClick;if("function"==typeof r)try{r.length>=2?r(e,s):r(e)}catch(e){console.error("[TableV2] Row onClick handler error",e)}})(e)},get class(){return`${S} ${p?.all?.class??""}`},role:f?"button":void 0,get"aria-expanded"(){return f?le[u]?"true":"false":void 0},tabIndex:f?0:void 0,onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&f&&(e.preventDefault(),H(e))}}),!1,!0),o(j,()=>{if(b){const e=A().find(e=>!!q()[d]?.[e]),t=e?q()[d]?.[e]?.element:void 0;return c=D(),o(c,()=>se(t,s,a(),e,d)),l(e=>{var t=A().length,r=R()?"false":"true",o=R()?"open":"closed";return t!==e.e&&n(c,"colspan",e.e=t),r!==e.t&&n(c,"aria-hidden",e.t=r),o!==e.a&&n(c,"data-drop-state",e.a=o),e},{e:void 0,t:void 0,a:void 0}),c}var c;return e(g,{get each(){return A()},children:e=>{const l=q()[d]?.[e],n=l?.element;return w(n)?[]:(c=k(),r(c,t(()=>J?.()?.[d]?.[e]?.all,{get style(){return J()[d]?.[e]?.style},get class(){return J()[d]?.[e]?.class}}),!1,!0),o(c,()=>se(n,s,a(),e,d)),c);var c}})}),j;var j}})})),r(h,t(()=>F()?.otherStyles?.tfoot?.all,{get style(){return F().otherStyles?.tfoot?.style},get class(){return F().otherStyles?.tfoot?.class}}),!1,!0),o(h,e(g,{get each(){return Object.keys(N()).map(e=>parseInt(e)).sort((e,t)=>e-t)},children:l=>{return n=C(),r(n,t(()=>Y()[l]?.all,{get style(){return Y()[l]?.style},get class(){return Y()[l]?.class}}),!1,!0),o(n,e(g,{get each(){return A()},children:e=>{const n=N()[l]?.[e];return n?(s=k(),r(s,t(()=>Q()?.[l]?.[e]?.all,{get style(){return Q()[l]?.[e]?.style},get class(){return Q()[l]?.[e]?.class}}),!1,!0),o(s,n),s):[];var s}})),n;var n}})),l(e=>{var t=F().id,r=`${v.table} ${F().class||""}`,o=F().style;return t!==e.e&&n(u,"id",e.e=t),r!==e.t&&s(u,e.t=r),e.a=a(u,o,e.a),e},{e:void 0,t:void 0,a:void 0}),u),d(()=>c.children)];var u,i,p,y,h}}))};export{j as Table};
2
+ //# sourceMappingURL=table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.js","sources":["../../../src/components/TableV2/table.tsx"],"sourcesContent":["import { Accessor, createEffect, createMemo, createSignal, For, JSX, onMount, Setter } from \"solid-js\";\n// Types imported in bulk for clarity; consider splitting if this file grows further.\nimport { CellRowStyle, ColumnInfo, ColumnStyle, HeaderOrganized, HeadRowStyle, HeadStyle, RowOrganized, RowStyle, ShoeBox, SockDrawer, StyleContainer, TableContext, TableProvider } from \"./tableProvider\";\nimport { Clone, isNullish } from \"../../tools\";\n// @ts-ignore\nimport styles from \"./table.module.scss\";\nimport { createStore } from \"solid-js/store\";\n\n/**\n * Core Table component (TableV2): orchestrates a declarative registration system for\n * columns, headers, rows, dropdown rows, and styling containers. Child components\n * (Column, Header, Cell, Row, etc.) register themselves through context; this file\n * renders the actual <table> DOM structure from that accumulated metadata.\n *\n * Design goals / constraints (tests rely on these):\n * - Changing the first column name must retain dropdown (collapse/expand) metadata.\n * - Row click handlers may receive (event, dataItem) when declared with >= 2 params.\n * - Cell render errors surface a console.error and render a fallback element unless\n * user provided onCellError returns a custom JSX fallback.\n * - Dropdown header rows are focusable, toggle with Enter/Space, and manage an\n * associated content region row with role=\"region\" + aria-hidden / data attributes.\n */\ninterface TableProps<T = any> {\n children: JSX.Element;\n data: Accessor<T[]>;\n setData?: Setter<T[]>;\n columns: string[];\n style?: JSX.CSSProperties | string;\n id?: string;\n class?: string;\n otherStyles?: {\n thead?: StyleContainer<JSX.HTMLAttributes<HTMLTableSectionElement>>;\n tbody?: StyleContainer<JSX.HTMLAttributes<HTMLTableSectionElement>>;\n tfoot?: StyleContainer<JSX.HTMLAttributes<HTMLTableSectionElement>>;\n colGroup?: StyleContainer<JSX.ColgroupHTMLAttributes<HTMLTableColElement>>;\n };\n /** Provide a stable key for a data/index combination to persist dropdown state across resorting */\n getRowKey?: (dataItem: T, dataIndex: number) => string | number | undefined;\n /** Called when a cell renderer throws. Return a fallback element to override default. */\n onCellError?: (err: unknown, context: { column?: string; row: number; dataIndex: number; }) => JSX.Element | void;\n /** Enable verbose debug logging (otherwise suppressed outside tests) */\n debugLogs?: boolean;\n}\n\nexport const Table = <T,>(props: TableProps<T>) => {\n // Trigger to force row subtree reconciliation after toggling dropdown state.\n const [redrawRows, setRedrawRows] = createSignal(false);\n // Historical mount signal (kept to avoid accidental behavioral shifts).\n const [mounted, setMounted] = createSignal(false);\n const tableContext: TableContext<T> = {} as TableContext<T>;\n const debugEnabled = () => props.debugLogs === true;\n const debug = (...args: any[]) => { if (debugEnabled()) console.log('[TableV2 debug]', ...args); };\n const getProps = () => props;\n const tableData = (() => {\n redrawRows();\n return props.data() ?? [];\n });\n\n // Create a reactive memo for columns to handle dynamic changes\n // Reactive columns accessor; consumers dynamically mutate columns[] causing\n // re-registration + style reset.\n const reactiveColumns = createMemo(() => getProps().columns);\n\n // Convenience helper for frequent first-column lookups.\n const getFirstColumn = () => reactiveColumns()?.[0];\n\n // Add effect to reset column styles when columns change\n createEffect(() => {\n const columns = reactiveColumns();\n if (columns.length > 0) {\n // Reset column styles when columns change\n setColumnStyle({});\n }\n });\n\n // Preserve dropdown metadata (dropRow / dropHeader) when the first column name changes.\n // These flags are stored only on the first column's cell for each row. When the first\n // column is renamed, cells re‑register under the new key and lose the flags. We migrate\n // the metadata from the old first column key to the new one (or, as a fallback, from any\n // column in that row that still has the flags) so the table continues to recognize\n // dropdown header/content rows and render the region cell correctly.\n let prevFirstColumn: string | undefined;\n createEffect(() => {\n const cols = reactiveColumns();\n if (!cols || cols.length === 0) return;\n const newFirst = cols[0];\n if (prevFirstColumn && prevFirstColumn !== newFirst) {\n // Column rename detected: migrate flags.\n setRows(old => {\n const newRows: any = { ...old };\n for (const r in newRows) {\n const row = { ...newRows[r] };\n const prevCell = prevFirstColumn ? row[prevFirstColumn as keyof typeof row] : undefined;\n const newCell = row[newFirst as keyof typeof row];\n if (prevCell && newCell) {\n row[newFirst] = {\n ...newCell,\n dropRow: prevCell.dropRow || newCell.dropRow || false,\n dropHeader: prevCell.dropHeader || newCell.dropHeader || false\n };\n } else if (newCell && (!newCell.dropRow && !newCell.dropHeader)) {\n // Fallback: scan other columns for any flagged cell (in case implementation changes)\n const flagged = Object.values(row).find((c: any) => c && ((c as any).dropRow || (c as any).dropHeader));\n if (flagged && typeof flagged === 'object') {\n row[newFirst] = {\n ...newCell,\n dropRow: (flagged as any).dropRow || newCell.dropRow || false,\n dropHeader: (flagged as any).dropHeader || newCell.dropHeader || false\n };\n }\n }\n newRows[r] = row;\n }\n return newRows;\n });\n }\n prevFirstColumn = newFirst;\n });\n\n tableContext.setDataSource = (data) => {\n getProps().setData?.(() => [...data]);\n };\n\n tableContext.getDataSource = () => {\n const data = getProps().data();\n return data;\n };\n\n const [headers, setHeaders] = createSignal<HeaderOrganized>({});\n tableContext.addHeaderCell = (name, index, header) => {\n setHeaders((old) => {\n return Clone({\n ...old,\n [index]: {\n ...old[index],\n [name]: header\n }\n });\n });\n };\n\n // const [rows, setRows] = createSignal<RowOrganized<T>>({});\n const [rowData, setRows] = createStore<RowOrganized<T>>({});\n const rows: Accessor<RowOrganized<T>> = (() => {\n mounted();\n return rowData;\n });\n tableContext.addRowCell = (index, name, cell, isDropDown) => {\n setRows((old) => {\n const newRows = { ...old };\n if (!newRows[index]) {\n newRows[index] = {};\n }\n\n // Preserve any existing dropHeader flag when updating a row\n const existingData = old[index]?.[name];\n newRows[index][name] = {\n element: cell,\n // Preserve previously established dropdown semantics (set via addRowStyle)\n dropRow: existingData?.dropRow || !!isDropDown,\n dropHeader: existingData?.dropHeader || false\n };\n\n return newRows;\n });\n };\n\n tableContext.removeRowCell = (index, name) => {\n setRows((old) => {\n if (!old[index] || !old[index][name]) return old;\n\n const newRows = { ...old };\n const newRowData = { ...newRows[index] };\n delete newRowData[name];\n newRows[index] = newRowData;\n\n return newRows;\n });\n };\n\n const [footerCell, setFooterCell] = createSignal<SockDrawer>({});\n tableContext.addFooterCell = (index, name, cell) => {\n setFooterCell((old) => {\n const newFooter = { ...old };\n if (!newFooter[index]) {\n newFooter[index] = {};\n }\n\n newFooter[index] = {\n ...newFooter[index],\n [name]: cell\n };\n\n return newFooter;\n });\n };\n\n tableContext.removeFooterCell = (index, name) => {\n setFooterCell((old) => {\n if (!old[index] || !old[index][name]) return old;\n\n const newFooter = { ...old };\n const newRowData = { ...newFooter[index] };\n delete newRowData[name];\n newFooter[index] = newRowData;\n\n return newFooter;\n });\n };\n\n const [headerStyle, setHeaderStyle] = createSignal<HeadStyle>({});\n tableContext.addHeaderStyle = (name, index, style) => {\n setHeaderStyle((old) => {\n return {\n ...old,\n [name]: {\n ...old[name],\n [index]: style\n }\n }\n });\n };\n\n const [cellStyle, setCellStyle] = createSignal<CellRowStyle>({});\n tableContext.addCellStyle = (rowIndex, colName, style) => {\n setCellStyle((old) => {\n return {\n ...old,\n [rowIndex]: {\n ...old[rowIndex],\n [colName]: style\n }\n }\n });\n };\n\n const [footCellStyle, setFootCellStyle] = createSignal<CellRowStyle>({});\n tableContext.addFootCellStyle = (rowIndex, colName, style) => {\n setFootCellStyle((old) => {\n return {\n ...old,\n [rowIndex]: {\n ...old[rowIndex],\n [colName]: style\n }\n }\n });\n };\n\n const [rowStyle, setRowStyle] = createSignal<RowStyle>({});\n tableContext.addRowStyle = (index, style, isDropRow, isDropHeader) => {\n // If this is a dropdown row or dropdown header, update the row data\n const firstColumn = getFirstColumn();\n if (!isNullish(firstColumn)) {\n setRows((old) => {\n // Get existing row data\n const existingRow = old[index] || {};\n const existingCell = existingRow[firstColumn] || { element: () => <></> };\n\n return {\n ...old,\n [index]: {\n ...existingRow,\n [firstColumn]: {\n ...existingCell,\n element: existingCell.element,\n // Set dropRow based on isDropRow param or preserve existing value\n dropRow: isDropRow === true ? true : existingCell.dropRow || false,\n // Set dropHeader based on isDropHeader param or preserve existing value\n dropHeader: isDropHeader === true ? true : existingCell.dropHeader || false\n }\n }\n }\n });\n }\n\n // Update row style\n setRowStyle((old) => {\n return {\n ...old,\n [index]: {\n ...style,\n all: {\n ...style?.all,\n isDropHeader: isDropHeader === true ? true : undefined,\n isDropRow: isDropRow === true ? true : undefined\n }\n }\n }\n });\n };\n\n const [footerStyle, setFooterStyle] = createSignal<ShoeBox>({});\n tableContext.addFooterRowStyle = (index, style) => {\n setFooterStyle((old) => {\n return {\n ...old,\n [index]: style\n }\n });\n };\n\n const [headerRowStyle, setHeaderRowStyle] = createSignal<HeadRowStyle>({});\n tableContext.addHeaderRowStyle = (index, style) => {\n setHeaderRowStyle((old) => {\n return {\n ...old,\n [index]: style\n }\n });\n };\n\n const [columnStyle, setColumnStyle] = createSignal<ColumnStyle>({});\n tableContext.addColumnStyle = (name, style) => {\n setColumnStyle((old) => {\n return {\n ...old,\n [name]: style\n }\n });\n };\n\n // Add a removeColumnStyle method to allow cleanup\n tableContext.removeColumnStyle = (name) => {\n setColumnStyle((old) => {\n const newStyles = { ...old };\n delete newStyles[name];\n return newStyles;\n });\n };\n\n const headerFactory = (index: number, column: string): JSX.Element | undefined => headers()?.[index]?.[column];\n const rowStyleFactory = (rowNum: number) => {\n return rowStyle()?.[rowNum] ?? {};\n };\n // Store open state keyed first by resolved row key (or dataIndex fallback) then by data index\n const [dropOpenStore, setDropOpenStore] = createStore<Record<string | number, boolean>>({});\n\n // Enhanced renderCell with better type safety and error handling\n const renderCell = (cell: ((item: T, index: number) => any) | undefined | JSX.Element, item: T, index: number, column?: string, row?: number): JSX.Element => {\n if (typeof cell === 'function') {\n try {\n return cell(item, index);\n } catch (error) {\n const ctx = { column, row: row ?? -1, dataIndex: index };\n // Intentionally still surfaced (tests assert console error presence); keep single console.error.\n console.error('[TableV2] Error rendering cell', error, ctx);\n const custom = props.onCellError?.(error, ctx);\n if (custom) return custom as JSX.Element;\n return <span class={styles.errorCell} role=\"alert\" aria-label=\"Cell render error\">Error</span>;\n }\n }\n\n // Handle null or undefined cells gracefully\n if (cell === null || cell === undefined) {\n return <>Cell nully</>;\n }\n\n return cell;\n };\n\n onMount(() => {\n setMounted(true);\n })\n\n const resolveRowKey = (dataItem: T, dataIndex: number) => {\n return props.getRowKey?.(dataItem, dataIndex) ?? dataIndex;\n };\n\n const getIsDropOpen = (rowNum: number, dataIndex: number, dataItem: T) => {\n // Evaluate dropdown visibility once per cell render.\n const rowData = rows()?.[rowNum]?.[getFirstColumn() ?? ''];\n const rowLevel = rowStyle()[rowNum]?.all;\n const hasDropFlag = rowLevel?.isDropRow || rowData?.dropRow;\n if (hasDropFlag) {\n const key = resolveRowKey(dataItem, dataIndex);\n return dropOpenStore[key] ?? false;\n }\n return true; // Non-dropdown rows always visible\n };\n\n const dropRowStyle = (rowNum: number, dataIndex: number, dataItem: T) => {\n // Only apply dropRow/openDropRow classes to rows that are dropdown content\n const rowMeta = rows()?.[rowNum]?.[getFirstColumn() ?? ''];\n if (rowMeta?.dropRow) return getIsDropOpen(rowNum, dataIndex, dataItem) ? styles.openDropRow : styles.dropRow;\n return '';\n };\n\n return (\n <TableProvider {...tableContext}>\n <>\n <table id={getProps().id} class={`${styles.table} ${getProps().class || ''}`} style={getProps().style}>\n <colgroup {...getProps()?.otherStyles?.colGroup?.all} style={getProps().otherStyles?.colGroup?.style} class={getProps().otherStyles?.colGroup?.class}>\n <For each={reactiveColumns()}>\n {(column) => (\n <col {...columnStyle()[column]?.all} style={columnStyle()[column]?.style} class={columnStyle()[column]?.class} />\n )}\n </For>\n </colgroup>\n <thead {...getProps()?.otherStyles?.thead?.all} style={getProps().otherStyles?.thead?.style} class={getProps().otherStyles?.thead?.class}>\n <For each={Object.keys(headers()).map((key) => parseInt(key)).sort((a, b) => a - b)}>{(rowNum) => {\n return <tr {...headerRowStyle()[rowNum]?.all} style={headerRowStyle()[rowNum]?.style}\n class={headerRowStyle()[rowNum]?.class}>\n <For each={reactiveColumns()}>{(column, index) => {\n const headCell = headers()[rowNum]?.[column];\n return !!headCell ? <th {...headerStyle()[column]?.[rowNum]?.all} style={headerStyle()[column]?.[rowNum]?.style}\n class={headerStyle()[column]?.[rowNum]?.class}>\n {headerFactory(rowNum, column)}\n </th> : <></>\n }}</For>\n </tr>\n }}</For>\n </thead>\n <tbody {...getProps()?.otherStyles?.tbody?.all} style={getProps().otherStyles?.tbody?.style} class={getProps().otherStyles?.tbody?.class}>\n <For each={tableData()}>{(item, index) => (\n <For each={Object.keys(rows()).map((k) => parseInt(k)).sort((a, b) => a - b)}>{(rowNum) => {\n const dataIndex = index();\n const resolvedRowKey = resolveRowKey(item, dataIndex);\n const firstColumn = getFirstColumn();\n const rowStyleEntry = rowStyleFactory(rowNum);\n const rowLevelAll = rowStyleEntry?.all;\n const headerCellMeta = rows()?.[rowNum]?.[firstColumn ?? ''];\n const isHeaderToggle = headerCellMeta?.dropHeader || rowLevelAll?.isDropHeader;\n if (isHeaderToggle && dropOpenStore[resolvedRowKey] === undefined) {\n setDropOpenStore(resolvedRowKey, false);\n }\n const firstColumnMeta = rows()?.[rowNum]?.[firstColumn ?? ''];\n const isContentRow = rowLevelAll?.isDropRow === true || firstColumnMeta?.dropRow === true;\n const isOpen = () => getIsDropOpen(rowNum, dataIndex, item);\n const computedClass = dropRowStyle(rowNum, dataIndex, item);\n if (rowNum === 1) debug('rowNum=1 dataIndex', dataIndex, 'isContentRow', isContentRow, 'isOpen', isOpen(), 'rowLevelAll', rowLevelAll);\n const handleToggle = (e: Event) => {\n e.preventDefault();\n const newVal = !dropOpenStore[resolvedRowKey];\n setDropOpenStore(resolvedRowKey, newVal);\n setRedrawRows(r => !r);\n // Immediate DOM attribute sync for region cell to satisfy synchronous test expectations.\n try {\n const selector = `tbody tr[data-row-key=\"${resolvedRowKey}\"][data-drop-row=\"true\"] td[role=\"region\"]`;\n const region = document.querySelector(selector) as HTMLElement | null;\n if (region) {\n region.setAttribute('data-drop-state', newVal ? 'open' : 'closed');\n region.setAttribute('aria-hidden', newVal ? 'false' : 'true');\n debug('manual region sync', selector, 'nowOpen', newVal);\n } else {\n debug('region not found for selector', selector, 'immediate after click');\n }\n } catch { /* swallow */ }\n };\n const invokeOriginalRowHandler = (e: MouseEvent) => {\n const styleAll: any = rowStyleEntry?.all;\n const original = styleAll?.__origOnClick ?? styleAll?.onClick;\n if (typeof original === 'function') {\n try {\n if (original.length >= 2) original(e, item); else original(e);\n } catch (err) {\n console.error('[TableV2] Row onClick handler error', err);\n }\n }\n };\n return <tr {...rowStyleEntry?.all}\n data-drop-row={isContentRow ? 'true' : undefined}\n data-drop-open={isContentRow ? (isOpen() ? 'true' : 'false') : undefined}\n style={rowStyleEntry?.style}\n data-row-key={resolvedRowKey}\n onClick={(e) => {\n if (isHeaderToggle) handleToggle(e);\n invokeOriginalRowHandler(e as unknown as MouseEvent);\n }}\n class={`${computedClass} ${rowStyleEntry?.all?.class ?? ''}`}\n role={isHeaderToggle ? 'button' : undefined}\n aria-expanded={isHeaderToggle ? (dropOpenStore[resolvedRowKey] ? 'true' : 'false') : undefined}\n tabIndex={isHeaderToggle ? 0 : undefined}\n onKeyDown={(e) => {\n const isActivator = e.key === 'Enter' || e.key === ' ';\n if (isActivator && isHeaderToggle) {\n e.preventDefault();\n handleToggle(e);\n }\n }}>\n {(() => {\n if (isContentRow) {\n // Locate first available cell renderer for this dropdown row.\n const firstAvailableColumn = reactiveColumns().find(c => !!rows()[rowNum]?.[c]);\n const cellRenderer = firstAvailableColumn ? rows()[rowNum]?.[firstAvailableColumn]?.element : undefined;\n return <td colSpan={reactiveColumns().length}\n role=\"region\"\n aria-label=\"Dropdown row content\"\n aria-hidden={isOpen() ? 'false' : 'true'}\n data-drop-state={isOpen() ? 'open' : 'closed'}>\n {renderCell(cellRenderer, item, index(), firstAvailableColumn, rowNum)}\n </td>;\n }\n return <For each={reactiveColumns()}>{(column) => {\n const tableSpot = rows()[rowNum]?.[column];\n const cell = tableSpot?.element;\n return !isNullish(cell) ? <td {...cellStyle?.()?.[rowNum]?.[column]?.all}\n style={cellStyle()[rowNum]?.[column]?.style}\n class={cellStyle()[rowNum]?.[column]?.class}>\n {renderCell(cell, item, index(), column, rowNum)}\n </td> : <></>\n }}</For>\n })()}\n </tr>\n }}</For>\n )}</For>\n </tbody>\n <tfoot {...getProps()?.otherStyles?.tfoot?.all} style={getProps().otherStyles?.tfoot?.style} class={getProps().otherStyles?.tfoot?.class}>\n <For each={Object.keys(footerCell()).map((key) => parseInt(key)).sort((a, b) => a - b)}>{(rowNum) => {\n return <tr {...footerStyle()[rowNum]?.all} style={footerStyle()[rowNum]?.style} class={footerStyle()[rowNum]?.class}>\n <For each={reactiveColumns()}>\n {(column) => {\n const footCell = footerCell()[rowNum]?.[column];\n return !!footCell ? <td {...footCellStyle()?.[rowNum]?.[column]?.all} style={footCellStyle()[rowNum]?.[column]?.style} class={footCellStyle()[rowNum]?.[column]?.class}>\n {footCell}\n </td> : <></>\n }}\n </For>\n </tr>\n }}</For>\n </tfoot>\n </table>\n {props.children}\n </>\n </TableProvider>\n )\n};"],"names":["Table","props","redrawRows","setRedrawRows","createSignal","mounted","setMounted","tableContext","debug","args","debugLogs","console","log","getProps","reactiveColumns","createMemo","columns","getFirstColumn","prevFirstColumn","createEffect","length","setColumnStyle","cols","newFirst","setRows","old","newRows","r","row","prevCell","undefined","newCell","dropRow","dropHeader","flagged","Object","values","find","c","setDataSource","data","setData","getDataSource","headers","setHeaders","addHeaderCell","name","index","header","Clone","rowData","createStore","rows","addRowCell","cell","isDropDown","existingData","element","removeRowCell","newRowData","footerCell","setFooterCell","addFooterCell","newFooter","removeFooterCell","headerStyle","setHeaderStyle","addHeaderStyle","style","cellStyle","setCellStyle","addCellStyle","rowIndex","colName","footCellStyle","setFootCellStyle","addFootCellStyle","rowStyle","setRowStyle","addRowStyle","isDropRow","isDropHeader","firstColumn","isNullish","existingRow","existingCell","all","footerStyle","setFooterStyle","addFooterRowStyle","headerRowStyle","setHeaderRowStyle","addHeaderRowStyle","columnStyle","addColumnStyle","removeColumnStyle","newStyles","dropOpenStore","setDropOpenStore","renderCell","item","column","error","ctx","dataIndex","custom","onCellError","_el$","_tmpl$","_$effect","_$className","styles","errorCell","onMount","resolveRowKey","dataItem","getRowKey","getIsDropOpen","rowNum","rowLevel","key","_$createComponent","TableProvider","_$mergeProps","children","_el$2","_tmpl$2","_el$3","firstChild","_el$4","nextSibling","_el$5","_el$6","_$spread","otherStyles","colGroup","class","_$insert","For","each","_el$7","_tmpl$3","thead","keys","map","parseInt","sort","a","b","_el$8","_tmpl$4","headCell","_el$9","_tmpl$5","headerFactory","tbody","k","resolvedRowKey","rowStyleEntry","rowStyleFactory","rowLevelAll","headerCellMeta","isHeaderToggle","firstColumnMeta","isContentRow","isOpen","computedClass","dropRowStyle","rowMeta","openDropRow","handleToggle","e","preventDefault","newVal","selector","region","document","querySelector","setAttribute","_el$0","onClick","styleAll","original","__origOnClick","err","invokeOriginalRowHandler","role","tabIndex","onKeyDown","firstAvailableColumn","cellRenderer","_el$1","_tmpl$6","_p$","_v$4","_v$5","_v$6","_$setAttribute","t","tableSpot","_el$10","_tmpl$7","tfoot","_el$11","footCell","_el$12","_v$","id","_v$2","table","_v$3","_$style","_$memo"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import e from"../../styleInject.js";var n={table:"table-module_table__um-mK",dropRow:"table-module_dropRow__BugV9",openDropRow:"table-module_openDropRow__rjfjd",errorCell:"table-module_errorCell__-SAJu"};e(".table-module_table__um-mK {\n border-collapse: collapse;\n text-align: center;\n}\n.table-module_table__um-mK thead tr th {\n padding: 0.5rem;\n}\n.table-module_table__um-mK tr[isdropheader=true] {\n cursor: pointer;\n}\n.table-module_table__um-mK tr[isdropheader=true]:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n.table-module_table__um-mK tr[isdropheader=true]:focus-visible {\n outline: 2px solid var(--focus-outline, #2684ff);\n outline-offset: -2px;\n}\n.table-module_table__um-mK tr td {\n padding: 0.5rem;\n width: -moz-max-content;\n width: max-content;\n}\n\n.table-module_dropRow__BugV9 {\n transform-origin: top;\n animation: table-module_rowDropping__zE5Uz 0.5s reverse forwards;\n display: none;\n}\n\n.table-module_openDropRow__rjfjd {\n animation: table-module_rowDropping__zE5Uz 0.5s forwards;\n display: table-row;\n}\n\n@keyframes table-module_rowDropping__zE5Uz {\n 0% {\n max-height: 0;\n opacity: 0;\n }\n 1% {\n max-height: 0;\n opacity: 0;\n }\n 100% {\n max-height: 2000px;\n opacity: 1;\n }\n}\n.table-module_errorCell__-SAJu {\n color: #b00020;\n font-style: italic;\n}");export{n as default};
2
+ //# sourceMappingURL=table.module.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import{createComponent as r}from"solid-js/web";import{createContext as e,useContext as n,splitProps as t}from"solid-js";const o=e({});function i(){return n(o)}const c=e=>{const[n,i]=t(e,["children"]);return r(o.Provider,{value:i,get children(){return n.children}})},d=e({name:"",rowNumber:0}),l=e=>r(d.Provider,{get value(){return{name:e.name}},get children(){return e.children}}),u=()=>n(d);export{l as ColumnProvider,c as TableProvider,u as useColumnContext,i as useTableContext};
2
+ //# sourceMappingURL=tableProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tableProvider.js","sources":["../../../src/components/TableV2/tableProvider.tsx"],"sourcesContent":["import { createContext, JSX, splitProps, useContext } from \"solid-js\";\nimport { createStore, SetStoreFunction } from \"solid-js/store\";\n\n\n// General Style Container\n// Narrow the allowed attribute bag to reduce accidental prop leakage.\n// Consumers may still augment via casting, but we provide safer defaults.\nexport interface StyleContainer<T extends Record<string, any>> {\n class?: string;\n style?: JSX.CSSProperties | string;\n all?: T;\n};\n// Styles\n// Header Styles\nexport type ColumnName = string; // branding could be added later\nexport type RowIndex = string; // stored as string keys internally\n\nexport interface HeadStyle {\n [colName: ColumnName]: {\n [rowIndex: RowIndex]: StyleContainer<JSX.ThHTMLAttributes<HTMLTableCellElement>>;\n };\n};\nexport interface HeadRowStyle {\n [rowIndex: RowIndex]: StyleContainer<JSX.HTMLAttributes<HTMLTableRowElement>>;\n};\n\n// Header Elements\nexport interface HeaderOrganized {\n [headIndex: RowIndex]: HeaderStorage;\n};\nexport interface HeaderStorage {\n [name: string]: JSX.Element;\n};\n\n// Body && Footer Row Styles\n// Extend row HTML attributes to include internal dropdown metadata we stash in the 'all' bucket.\nexport interface ExtendedRowHTMLAttributes extends JSX.HTMLAttributes<HTMLTableRowElement> {\n isDropHeader?: boolean;\n isDropRow?: boolean;\n}\nexport interface RowStyle {\n [rowIndex: RowIndex]: StyleContainer<ExtendedRowHTMLAttributes>;\n};\n// Cell Styles\nexport interface CellRowStyle {\n [rowIndex: RowIndex]: {\n [colName: ColumnName]: StyleContainer<JSX.TdHTMLAttributes<HTMLTableCellElement>>;\n };\n};\n\n// Row td Elements\nexport interface IRow<T> {\n element: (item: T, index: number) => JSX.Element;\n dropRow?: boolean;\n dropHeader?: boolean;\n}\nexport interface RowStorage<T> {\n [name: ColumnName]: IRow<T>;\n};\n\nexport interface RowOrganized<T> {\n [rowIndex: RowIndex]: RowStorage<T>;\n};\n\n// footer row Styles\nexport interface ShoeBox {\n [rowIndex: RowIndex]: StyleContainer<JSX.HTMLAttributes<HTMLTableRowElement>>;\n};\n\n// Footer Elements\nexport interface Socks {\n [name: ColumnName]: JSX.Element;\n};\n\nexport interface SockDrawer {\n [rowIndex: RowIndex]: Socks;\n};\n\n// Column Styles\nexport interface ColumnStyle {\n [colName: ColumnName]: StyleContainer<JSX.ColHTMLAttributes<HTMLTableColElement>>;\n};\n\nexport interface ColumnGroupStyle {\n [colName: ColumnName]: StyleContainer<JSX.ColgroupHTMLAttributes<HTMLTableColElement>>;\n}\n\n// Table Context\nexport interface TableContext<T = any> {\n getDataSource: () => T[];\n setDataSource: (data: T[]) => any;\n addHeaderCell: (name: string, index: number, header: JSX.Element) => void;\n addRowCell: (index: number, name: string, cell: (item: T, index: number) => JSX.Element, isDropDown?: boolean) => void;\n removeRowCell?: (index: number, name: string) => void;\n addFooterCell: (index: number, name: string, cell: JSX.Element) => void;\n removeFooterCell?: (index: number, name: string) => void;\n addColumnStyle: (name: string, style: StyleContainer<JSX.ColHTMLAttributes<HTMLTableColElement>>) => void;\n removeColumnStyle?: (name: string) => void;\n addHeaderStyle: (name: string, index: number, style: StyleContainer<JSX.ThHTMLAttributes<HTMLTableCellElement>>) => void;\n addCellStyle: (rowIndex: number, colName: string, style: StyleContainer<JSX.TdHTMLAttributes<HTMLTableCellElement>>) => void;\n addFootCellStyle: (rowIndex: number, colName: string, style: StyleContainer<JSX.TdHTMLAttributes<HTMLTableCellElement>>) => void;\n addRowStyle: (index: number, style: StyleContainer<ExtendedRowHTMLAttributes>, isDroprow?: boolean, isDropHeader?: boolean) => void;\n addFooterRowStyle: (index: number, style: StyleContainer<JSX.HTMLAttributes<HTMLTableRowElement>>) => void;\n addHeaderRowStyle: (index: number, style: StyleContainer<JSX.HTMLAttributes<HTMLTableRowElement>>) => void;\n /** Optional external row identity mapping for stable state retention (e.g., dropdown open) when data reorders */\n getRowKey?: (rowIndex: number, dataItem: T, dataIndex: number) => string | number | undefined;\n};\n\nfunction createTableContext<T>() {\n return createContext<TableContext<T>>({} as TableContext<T>);\n};\n\nconst tableContext = createTableContext<any>();\n\nexport function useTableContext<T>(): TableContext<T> {\n return useContext(tableContext) as TableContext<T>;\n}\n\ninterface TableProviderProps<T> extends TableContext<T> {\n children: JSX.Element;\n}\nexport const TableProvider = <T,>(props: TableProviderProps<T>) => {\n const [local, others ] = splitProps(props, ['children']);\n return (\n <tableContext.Provider value={others}>\n {local.children}\n </tableContext.Provider>\n );\n};\n// Column Context\nconst ColumnContext = createContext<{name: string, rowNumber?: number}>({name: '', rowNumber: 0});\n\ninterface ColumnProps { \n children: JSX.Element; \n name: string;\n}\nexport const ColumnProvider = (props: ColumnProps) => {\n return (\n <ColumnContext.Provider value={{name: props.name}}>\n {props.children}\n </ColumnContext.Provider>\n )\n};\n\nexport const useColumnContext = () => {\n return useContext(ColumnContext);\n};\n\nexport interface ColumnInfo {\n name: string;\n}"],"names":["tableContext","createContext","useTableContext","useContext","TableProvider","props","local","others","splitProps","_$createComponent","Provider","value","children","ColumnContext","name","rowNumber","ColumnProvider","useColumnContext"],"mappings":"wHAgHA,MAAMA,EAHGC,EAA+B,CAAA,YAKxBC,IACd,OAAOC,EAAWH,EACpB,CAKO,MAAMI,EAAqBC,IAChC,MAAOC,EAAOC,GAAWC,EAAWH,EAAO,CAAC,aAC5C,OAAAI,EACGT,EAAaU,SAAQ,CAACC,MAAOJ,EAAM,YAAAK,GAAA,OACjCN,EAAMM,QAAQ,KAKfC,EAAgBZ,EAAkD,CAACa,KAAM,GAAIC,UAAW,IAMjFC,EAAkBX,GAC7BI,EACGI,EAAcH,SAAQ,CAAA,SAACC,GAAK,MAAE,CAACG,KAAMT,EAAMS,KAAK,EAAA,YAAAF,GAAA,OAC9CP,EAAMO,QAAQ,IAKRK,EAAmBA,IACvBd,EAAWU"}
@@ -0,0 +1,2 @@
1
+ import{use as t,spread as e,mergeProps as r,memo as o,template as s}from"solid-js/web";import{splitProps as a,createSignal as i,createMemo as m,onMount as n,createEffect as l}from"solid-js";import d from"./TextArea.module.scss.js";import{isNullish as u}from"../../tools/tools.js";import{useFormProvider as f}from"../FormField/formProvider.js";import{useFormContext as c}from"../Form/form.js";import{useDirectFormBinding as p}from"../Form/useDirectFormBinding.js";var x=s("<textarea>");const g=s=>{let g;const[y,h]=a(s,["minSize","text","setText","class","tooltip","transparent","formName","formIndex","formArrayName"]),F=f(),T=c(),I=p({formName:s.formName,formIndex:s.formIndex,formArrayName:s.formArrayName}),G=I.formName,[b,j]=i(y.text?y.text():""),N=m(()=>{if(I.isFormArray){const t=I.getValue();return null!=t?String(t):""}return G&&T?.data&&!u(T.data[G])?T.data[G]:y.text?y.text():b()});function k(){if(!g)return;g.style.height="auto";const t=y.minSize?.height??100,e=Math.max(t,g.scrollHeight);g.style.height=`${e}px`,g.style.overflowY="hidden"}n(()=>{if(k(),F?.setFieldType?.("textarea"),G&&T?.data){const t=T.data[G];u(t)||""===String(t).trim()?F?.setTextInside?.(!1):(F?.setValue?.(t),F?.setTextInside?.(!0))}else if(y.text){const t=y.text();F?.setTextInside?.(!(null==t||""===t.trim()))}}),l(()=>{if(G&&T?.data){const t=T.data[G];if(y.text||b()===t||j(String(t??"")),F){const e=!(null==t||"string"==typeof t&&""===t.trim());F.setTextInside(e),F.setValue?.(t)}}}),l(()=>{N(),queueMicrotask(k)});const v=t=>{if(s.disabled)return;const e=t.currentTarget.value;I.isFormArray?I.setValue(e):G&&T?.formGroup?(T.formGroup.set(G,e),T.setData?.(G,e)):y.setText?y.setText(e):j(e),F&&(F.setValue?.(e),F.setTextInside?.(e.trim().length>0)),k()};return A=x(),t(t=>{g=t,k()},A),e(A,r(h,{get value(){return N()},get class(){return`${d.areaStyle} ${s.disabled?d.disabled:""} ${y.class??""} ${y.transparent?y.transparent:""}`},get placeholder(){return o(()=>!(!F?.getTextInside?.()||F?.getFocused?.()))()?"":s.placeholder},get title(){return y.tooltip},onInput:v,onFocus:()=>{if(!s.disabled&&(F?.setFocused?.(!0),G&&T?.formGroup?.markDirty)){const t=T.formGroup.getMeta(G);t&&!t.dirty&&T.formGroup.markDirty(G)}},onClick:()=>{if(!s.disabled&&G&&T?.formGroup?.markDirty){const t=T.formGroup.getMeta(G);t&&!t.dirty&&T.formGroup.markDirty(G)}},onBlur:()=>{s.disabled||F?.setFocused?.(!1)}}),!1,!1),A;var A};export{g as TextArea};
2
+ //# sourceMappingURL=TextArea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextArea.js","sources":["../../../src/components/TextArea/TextArea.tsx"],"sourcesContent":["import { Accessor, Component, createEffect, createSignal, JSX, onMount, Setter, splitProps, createMemo } from \"solid-js\";\n// @ts-ignore\nimport style from './TextArea.module.scss';\nimport { isNullish } from \"../../tools\";\nimport { useFormProvider } from \"../FormField/formProvider\";\nimport { useFormContext } from \"../Form/form\";\nimport { useDirectFormBinding } from \"../Form/useDirectFormBinding\";\n\ninterface Props extends JSX.TextareaHTMLAttributes<HTMLTextAreaElement> {\n /** Optional external accessor (legacy). If omitted and inside a FormField+Form, form data is used. */\n text?: Accessor<string>;\n /** Optional external setter (legacy). */\n setText?: Setter<string>;\n class?: string;\n tooltip?: string;\n transparent?: boolean;\n minSize?: { width?: number; height?: number };\n formName?: string;\n formIndex?: number;\n formArrayName?: string;\n}\n\nexport const TextArea: Component<Props> = (props) => {\n let myElement!: HTMLTextAreaElement;\n const [customProps, normalProps] = splitProps(props, [\n \"minSize\", \"text\", \"setText\", \"class\", \"tooltip\", \"transparent\", \"formName\", \"formIndex\", \"formArrayName\"\n ]);\n const fieldCtx = useFormProvider<string>();\n const formCtx = useFormContext<any>();\n const binding = useDirectFormBinding({ formName: props.formName, formIndex: props.formIndex, formArrayName: props.formArrayName });\n const formName = binding.formName;\n // Internal state only used when not provided externally and not in form context.\n const [internal, setInternal] = createSignal<string>(customProps.text ? customProps.text() : \"\");\n\n // Determine current value priority: FormArray -> FormGroup -> external accessor -> internal state\n const areaValue = createMemo<string>(() => {\n if (binding.isFormArray) {\n const val = binding.getValue();\n return val !== undefined && val !== null ? String(val) : '';\n }\n if (formName && formCtx?.data && !isNullish(formCtx.data[formName])) {\n return formCtx.data[formName] as any as string;\n }\n if (customProps.text) return customProps.text();\n return internal();\n });\n\n function resizeToContent() {\n if (!myElement) return;\n myElement.style.height = 'auto';\n const minHeight = customProps.minSize?.height ?? 100;\n const currentHeight = Math.max(minHeight, myElement.scrollHeight);\n myElement.style.height = `${currentHeight}px`;\n myElement.style.overflowY = 'hidden';\n }\n\n // Set field type & initial floating state\n onMount(() => {\n resizeToContent();\n fieldCtx?.setFieldType?.('textarea');\n if (formName && formCtx?.data) {\n const v = formCtx.data[formName];\n if (!isNullish(v) && String(v).trim() !== '') {\n fieldCtx?.setValue?.(v);\n fieldCtx?.setTextInside?.(true);\n } else {\n fieldCtx?.setTextInside?.(false);\n }\n } else if (customProps.text) {\n const v = customProps.text();\n fieldCtx?.setTextInside?.(!(v === undefined || v === null || v.trim() === ''));\n }\n });\n\n // React to programmatic FormGroup.set changes\n createEffect(() => {\n if (formName && formCtx?.data) {\n const v = formCtx.data[formName];\n // keep internal state aligned if unmanaged\n if (!customProps.text && internal() !== v) setInternal(String(v ?? ''));\n if (fieldCtx) {\n const has = !(v === undefined || v === null || (typeof v === 'string' && v.trim() === ''));\n fieldCtx.setTextInside(has);\n fieldCtx.setValue?.(v);\n }\n }\n });\n\n // Resize whenever value changes (user or programmatic)\n createEffect(() => { areaValue(); queueMicrotask(resizeToContent); });\n\n const handleInput = (e: InputEvent & { currentTarget: HTMLTextAreaElement }) => {\n if (props.disabled) return;\n const newVal = e.currentTarget.value;\n // Update whichever source is active\n if (binding.isFormArray) {\n binding.setValue(newVal);\n } else if (formName && formCtx?.formGroup) {\n formCtx.formGroup.set(formName as any, newVal as any);\n formCtx.setData?.(formName as any, newVal as any);\n } else if (customProps.setText) {\n customProps.setText(newVal);\n } else {\n setInternal(newVal);\n }\n if (fieldCtx) {\n fieldCtx.setValue?.(newVal as any);\n fieldCtx.setTextInside?.(newVal.trim().length > 0);\n }\n resizeToContent();\n };\n\n return (\n <textarea\n {...normalProps}\n ref={el => { myElement = el; resizeToContent(); }}\n value={areaValue()}\n class={`${style.areaStyle} ${props.disabled ? style.disabled : ''} ${customProps.class ?? ''} ${customProps.transparent ? customProps.transparent : ''}`}\n placeholder={fieldCtx?.getTextInside?.() && !fieldCtx?.getFocused?.() ? '' : props.placeholder}\n title={customProps.tooltip}\n onInput={handleInput}\n onFocus={() => {\n if (props.disabled) return;\n fieldCtx?.setFocused?.(true);\n if (formName && formCtx?.formGroup?.markDirty) {\n const meta = formCtx.formGroup.getMeta(formName as any);\n if (meta && !meta.dirty) formCtx.formGroup.markDirty(formName as any);\n }\n }}\n onClick={() => {\n if (props.disabled) return;\n if (formName && formCtx?.formGroup?.markDirty) {\n const meta = formCtx.formGroup.getMeta(formName as any);\n if (meta && !meta.dirty) formCtx.formGroup.markDirty(formName as any);\n }\n }}\n onBlur={() => {\n if (props.disabled) return;\n fieldCtx?.setFocused?.(false);\n }}\n />\n );\n};\n\nexport default TextArea;"],"names":["TextArea","props","myElement","customProps","normalProps","splitProps","fieldCtx","useFormProvider","formCtx","useFormContext","binding","useDirectFormBinding","formName","formIndex","formArrayName","internal","setInternal","createSignal","text","areaValue","createMemo","isFormArray","val","getValue","String","data","isNullish","resizeToContent","style","height","minHeight","minSize","currentHeight","Math","max","scrollHeight","overflowY","onMount","setFieldType","v","trim","setTextInside","setValue","createEffect","has","queueMicrotask","handleInput","e","disabled","newVal","currentTarget","value","formGroup","set","setData","setText","length","_el$","_tmpl$","_$use","el","_$spread","_$mergeProps","areaStyle","class","transparent","placeholder","_$memo","getTextInside","getFocused","title","tooltip","onInput","onFocus","setFocused","markDirty","meta","getMeta","dirty","onClick","onBlur"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import e from"../../styleInject.js";var n={areaStyle:"TextArea-module_areaStyle__AshKi",disabled:"TextArea-module_disabled__lHxCa"};e(".TextArea-module_areaStyle__AshKi {\n background-color: var(--container-color, #ffffff);\n color: var(--on-container-color, #000);\n padding: 0.5rem;\n margin-right: calc(var(--spacing-1, 8px) / 2);\n border: 1px solid #ccc;\n border-radius: var(--border-radius-md, 6px);\n width: 98%;\n height: 100%;\n resize: none;\n}\n@media screen and (max-width: 768px) {\n .TextArea-module_areaStyle__AshKi {\n width: 90%;\n }\n}\n.TextArea-module_areaStyle__AshKi::-moz-placeholder {\n color: var(--on-container-color, #000);\n opacity: var(--text-emphasis-medium, 87%);\n}\n.TextArea-module_areaStyle__AshKi::placeholder {\n color: var(--on-container-color, #000);\n opacity: var(--text-emphasis-medium, 87%);\n}\n\n.TextArea-module_disabled__lHxCa {\n cursor: not-allowed;\n opacity: 0.6;\n}\n\n.TextArea-module_picButton__TV9ZE {\n padding: calc(var(--spacing-1, 8px) / 2) var(--spacing-1, 8px) !important;\n background-color: transparent;\n border-top: 1px solid white;\n border-bottom: 1px solid white;\n}\n\n.TextArea-module_transparent__pwXRO {\n background-color: transparent;\n border: none;\n color: white;\n padding: 0.5rem;\n width: inherit;\n height: 100%;\n resize: none;\n}\n.TextArea-module_transparent__pwXRO:focus {\n outline: none;\n border: none;\n}");export{n as default};
2
+ //# sourceMappingURL=TextArea.module.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextArea.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import{spread as t,mergeProps as e,insert as r,createComponent as n,effect as i,className as o,template as d}from"solid-js/web";import{createSignal as s,Show as h}from"solid-js";import a from"./expansion.module.scss.js";import{Button as g}from"../Button/Button.js";import{DownArrow as l,UpArrow as c}from"../svgs/arrows.js";var p=d("<div><div><span style=width:min-content;height:min-content></span></div><div>");const m=d=>{const[m,u]=s(!!d.startOpen);return w=p(),v=w.firstChild,x=v.firstChild,$=v.nextSibling,t(w,e(d,{get class(){return`${a.totalPanel}`}}),!1,!0),r(x,()=>d.children[0]),r(v,n(g,{style:{width:"min-content",height:"min-content",padding:"0px",margin:"auto 0px"},onClick:()=>{u(t=>!t),d.extraLogic&&d.extraLogic()},get class(){return`${a.hover}`},get children(){return[n(h,{get when(){return!m()},get children(){return n(l,{style:{padding:"0px",margin:"0px"},get width(){return d.arrowSize?.width},get height(){return d.arrowSize?.height}})}}),n(h,{get when(){return m()},get children(){return n(c,{style:{padding:"0px",margin:"0px"},get width(){return d.arrowSize?.width},get height(){return d.arrowSize?.height}})}})]}}),null),r($,()=>d.children[1]),i(t=>{var e=`${a.accent} ${a.header} ${m()?a.opened:a.closed}`,r=`${a.accent} ${a.body} ${m()?a.open:""}`;return e!==t.e&&o(v,t.e=e),r!==t.t&&o($,t.t=r),t},{e:void 0,t:void 0}),w;var w,v,x,$};export{m as ExpansionPanel};
2
+ //# sourceMappingURL=expansion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expansion.js","sources":["../../../src/components/expansion/expansion.tsx"],"sourcesContent":["import {type Component, For, Show, createSignal, JSX, Accessor,Setter, useContext, createMemo} from \"solid-js\";\n// @ts-ignore\nimport style from './expansion.module.scss';\nimport Button from \"../Button/Button\";\nimport { DownArrow, UpArrow } from \"../svgs/arrows\";\n\ntype Props = {\n children: [JSX.Element, JSX.Element],\n styles?: {readonly [key:string]: string},\n extraLogic?: () => void,\n startOpen?: boolean,\n [key:string]: any,\n\t\tarrowSize?: {\n\t\t\twidth: string;\n\t\t\theight: string;\n\t\t}\n}\nconst ExpansionPanel: Component<Props> = (props)=>{\n const[open, setOpen] = createSignal(!!props.startOpen);\n return (\n <div {...props} class={`${style.totalPanel}`}>\n <div class={`${style['accent']} ${style.header} ${open() ? style.opened : style.closed}`}>\n <span style={{\n width: 'min-content',\n height: 'min-content',\n }}>\n {props.children[0]}\n </span>\n <Button\n style={{\n width: 'min-content',\n height:'min-content',\n padding: '0px',\n margin: 'auto 0px',\n }} \n onClick={()=>{\n setOpen(old =>!old);\n props.extraLogic ? props.extraLogic() : null \n }} \n class={`${style.hover}`}\n >\n <Show when={!open()}>\n <DownArrow style={{padding:'0px',margin:'0px'}} width={props.arrowSize?.width} height={props.arrowSize?.height} />\n </Show>\n <Show when={open()}>\n <UpArrow style={{padding:'0px',margin:'0px'}} width={props.arrowSize?.width} height={props.arrowSize?.height} />\n </Show>\n </Button>\n </div>\n <div class={`${style['accent']} ${style.body} ${open() ? style.open : ''}`}>\n {props.children[1]}\n </div>\n </div>\n )\n}\nexport { ExpansionPanel };\nexport default ExpansionPanel;"],"names":["ExpansionPanel","props","open","setOpen","createSignal","startOpen","_el$","_tmpl$","_el$2","firstChild","_el$3","_el$4","nextSibling","_$spread","_$mergeProps","style","totalPanel","_$insert","children","_$createComponent","Button","width","height","padding","margin","onClick","old","extraLogic","hover","Show","when","DownArrow","arrowSize","UpArrow","_$effect","_p$","_v$","header","opened","closed","_v$2","body","e","_$className","t","undefined"],"mappings":"6ZAiBA,MAAMA,EAAoCC,IACxC,MAAMC,EAAMC,GAAWC,IAAeH,EAAMI,WAC5C,OAAAC,EAAAC,IAAAC,EAAAF,EAAAG,WAAAC,EAAAF,EAAAC,WAAAE,EAAAH,EAAAI,YAAAC,EAAAP,EAAAQ,EACWb,EAAK,CAAA,SAAA,GAAA,MAAS,GAAGc,EAAMC,YAAY,KAAA,GAAA,GAAAC,EAAAP,EAAA,IAMrCT,EAAMiB,SAAS,IAAED,EAAAT,EAAAW,EAEnBC,EAAM,CACLL,MAAO,CACLM,MAAO,cACPC,OAAO,cACPC,QAAS,MACTC,OAAQ,YAEVC,QAASA,KACPtB,EAAQuB,IAAOA,GACfzB,EAAM0B,YAAa1B,EAAM0B,cAC1B,SAAA,GAAA,MACM,GAAGZ,EAAMa,OAAO,EAAA,YAAAV,GAAA,MAAA,CAAAC,EAEtBU,EAAI,CAAA,QAACC,GAAI,OAAG5B,GAAM,EAAA,YAAAgB,GAAA,OAAAC,EAChBY,EAAS,CAAChB,MAAO,CAACQ,QAAQ,MAAMC,OAAO,OAAM,SAAEH,GAAK,OAAEpB,EAAM+B,WAAWX,KAAK,EAAA,UAAEC,GAAM,OAAErB,EAAM+B,WAAWV,MAAM,GAAA,IAAAH,EAE/GU,EAAI,CAAA,QAACC,GAAI,OAAE5B,GAAM,EAAA,YAAAgB,GAAA,OAAAC,EACfc,EAAO,CAAClB,MAAO,CAACQ,QAAQ,MAAMC,OAAO,OAAM,SAAEH,GAAK,OAAEpB,EAAM+B,WAAWX,KAAK,EAAA,UAAEC,GAAM,OAAErB,EAAM+B,WAAWV,MAAM,GAAA,IAAA,IAAA,MAAAL,EAAAN,EAAA,IAK/GV,EAAMiB,SAAS,IAAEgB,EAAAC,IAAA,IAAAC,EA7BR,GAAGrB,EAAc,UAAKA,EAAMsB,UAAUnC,IAASa,EAAMuB,OAASvB,EAAMwB,SAAQC,EA4B5E,GAAGzB,EAAc,UAAKA,EAAM0B,QAAQvC,IAASa,EAAMb,KAAO,KAAI,OAAAkC,IAAAD,EAAAO,GAAAC,EAAAnC,EAAA2B,EAAAO,EAAAN,GAAAI,IAAAL,EAAAS,GAAAD,EAAAhC,EAAAwB,EAAAS,EAAAJ,GAAAL,GAAA,CAAAO,OAAAG,EAAAD,OAAAC,IAAAvC,EA9B9E,IAAAA,EAAAE,EAAAE,EAAAC"}
@@ -0,0 +1,2 @@
1
+ import n from"../../styleInject.js";var e={header:"expansion-module_header__eaZ-i",opened:"expansion-module_opened__BFLJk",closed:"expansion-module_closed__VmSJ7",body:"expansion-module_body__OYZTn",open:"expansion-module_open__L1UJR",totalPanel:"expansion-module_totalPanel__o0hyd",hover:"expansion-module_hover__lzPNA",accent:"expansion-module_accent__HYwcP"};n(".expansion-module_header__eaZ-i {\n width: 100%;\n max-width: 100%;\n display: flex;\n flex-direction: row;\n height: -moz-min-content;\n height: min-content;\n text-wrap: wrap;\n}\n.expansion-module_header__eaZ-i :first-child {\n flex-grow: 1;\n}\n.expansion-module_header__eaZ-i :last-child {\n align-self: flex-end;\n padding: 10px;\n fill: var(--on-container-color, #000);\n}\n.expansion-module_header__eaZ-i button {\n height: -moz-min-content;\n height: min-content;\n background: none;\n}\n.expansion-module_header__eaZ-i button svg {\n height: 50%;\n}\n\n.expansion-module_opened__BFLJk {\n border-radius: 8px 8px 0px 0px;\n}\n\n.expansion-module_closed__VmSJ7 {\n border-radius: 4px 4px 8px 8px;\n}\n\n.expansion-module_body__OYZTn {\n display: hidden;\n max-height: 0;\n opacity: 0;\n transition: max-height 0.5s ease, opacity 0.5s ease;\n padding: calc(var(--spacing-1, 8px) - 2px);\n border-radius: 0px 0px 8px 8px;\n}\n.expansion-module_body__OYZTn :nth-child(n) {\n text-wrap: wrap !important;\n}\n\n.expansion-module_open__L1UJR {\n max-height: 800px;\n opacity: 1;\n}\n\n.expansion-module_totalPanel__o0hyd {\n max-width: 100%;\n display: flex !important;\n flex-direction: column !important;\n border-radius: 4px 4px 8px 8px;\n}\n\n.expansion-module_hover__lzPNA:hover {\n cursor: pointer;\n}\n\n.expansion-module_accent__HYwcP {\n background-color: var(--container-color, #ffffff);\n color: var(--on-container-color, #000);\n}");export{e as default};
2
+ //# sourceMappingURL=expansion.module.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expansion.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import{createComponent as e,Portal as t,use as r,insert as o,effect as i,className as n,setStyleProperty as d,template as l}from"solid-js/web";import{createMemo as s,createSignal as a,createEffect as h,onCleanup as v,Show as u}from"solid-js";import{isMobile as p}from"../../tools/tools.js";import m from"./popup.module.scss.js";import{Button as c}from"../Button/Button.js";import{registerWindowManager as g,unregisterWindowManager as w}from"../../globalWindowManager.js";var f=l("<b>X"),b=l("<div><h2></h2><span>"),j=l("<div>"),y=l("<div style=height:100%>"),$=l("<div><div>");const k=l=>{const k=s(()=>l.translate?.x??"-50%"),x=s(()=>l.translate?.y??"-50%"),C=s(()=>l.show[0]()),[H,B]=a(),M=s(()=>(!Object.keys(l).includes("noHeader")||void 0!==l.noHeader)&&!l.noHeader);let O;h(()=>{const e=H(),t=C();t&&e?O?O.element=e:(O={element:e,onClickOutside:()=>l.show[1](!1)},setTimeout(()=>{O&&C()&&g(O)},50)):!t&&O&&(w(O),O=void 0)}),v(()=>{O&&(w(O),O=void 0)});const S=s(()=>l.width?l.width:p()?"90vw":"45vw"),T=s(()=>l.height?l.height:p()?"95vh":"60vh"),W=s(()=>l.translate?.x||l.translate?.y?`translate(${k()}, ${x()})`:"");return e(u,{get when(){return C()},get children(){return e(t,{get children(){var t=$(),s=t.firstChild;return r(e=>{B(e),l?.ref?.(e)},s),o(s,e(u,{get when(){return M()},get children(){return[(r=b(),d=r.firstChild,s=d.nextSibling,o(d,()=>l.title??"Modal"),o(s,e(c,{transparent:!0,onClick:()=>l.show[1](!1),get children(){return f()}})),i(()=>n(r,m.header)),r),(t=j(),o(t,()=>l.children),i(()=>n(t,m.body)),t)];var t,r,d,s}}),null),o(s,e(u,{get when(){return!M()},get children(){var e=y();return o(e,()=>l.children),i(()=>n(e,m.body)),e}}),null),i(e=>{var r=m.backdrop,o=S(),i=T(),l=W(),a=`${m.primary} ${m.wrapper} ${m.popup}`;return r!==e.e&&n(t,e.e=r),o!==e.t&&d(s,"width",e.t=o),i!==e.a&&d(s,"height",e.a=i),l!==e.o&&d(s,"transform",e.o=l),a!==e.i&&n(s,e.i=a),e},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),t}})}})};export{k as Modal};
2
+ //# sourceMappingURL=popup.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popup.component.js","sources":["../../../src/components/modal/popup.component.tsx"],"sourcesContent":["import { Accessor, Component, JSX, Setter, Show, createEffect, createMemo, createSignal, onCleanup } from \"solid-js\";\nimport { Portal } from \"solid-js/web\";\nimport { isMobile } from \"../../tools\";\n// @ts-ignore\nimport style from \"./popup.module.scss\";\nimport Button from \"../Button/Button\";\nimport { registerWindowManager, unregisterWindowManager, type WindowManagerEntry } from \"../../globalWindowManager\";\n\ntype Props = {\n title: string,\n show: [Accessor<boolean>, Setter<boolean>],\n children?: JSX.Element,\n width?: string,\n height?: string,\n translate?: {\n x?: string,\n y?: string\n },\n styleType?: \"primary\" | \"accent\" | \"tertiary\",\n onClick?: (e: MouseEvent) => void,\n ref?: JSX.HTMLAttributes<HTMLDivElement>[\"ref\"]\n noHeader?: boolean;\n}\n\nexport const Modal: Component<Props> = (props) => {\n const defaultX = createMemo(() => props.translate?.x ?? \"-50%\");\n const defaultY = createMemo(() => props.translate?.y ?? \"-50%\");\n const isShown = createMemo(() => props.show[0]());\n const [innerPopup, setInnerPopup] = createSignal<HTMLDivElement | undefined>();\n // const [ignoreClicks, setIgnoreClicks] = createSignal(true);\n const showHeader = createMemo(() => {\n const hasKey = Object.keys(props).includes(\"noHeader\");\n if (hasKey && props.noHeader === undefined) return false;\n return !props.noHeader;\n });\n\n // Maintain a stable entry reference so unregister removes the correct instance.\n let wmEntry: WindowManagerEntry | undefined;\n createEffect(() => {\n const el = innerPopup();\n const visible = isShown();\n if (visible && el) {\n if (!wmEntry) {\n wmEntry = {\n element: el,\n onClickOutside: () => props.show[1](false)\n };\n // Slight delay retained from original logic (reduced) for potential mount animations\n setTimeout(() => {\n // Guard in case it was hidden before timeout fired\n if (wmEntry && isShown()) registerWindowManager(wmEntry);\n }, 50);\n } else {\n // Update element reference if it changed (shouldn't normally)\n wmEntry.element = el;\n }\n } else if (!visible && wmEntry) {\n unregisterWindowManager(wmEntry);\n wmEntry = undefined;\n }\n });\n\n onCleanup(() => {\n if (wmEntry) {\n unregisterWindowManager(wmEntry);\n wmEntry = undefined;\n }\n });\n const widthStyle = createMemo(() => {\n if (props.width) {\n return props.width;\n }\n if (isMobile()) {\n return \"90vw\";\n }\n return \"45vw\";\n });\n const heightStyle = createMemo(() => {\n if (props.height) {\n return props.height;\n }\n if (isMobile()) {\n return \"95vh\";\n }\n return \"60vh\";\n });\n const shouldTranslate = createMemo(() => {\n if (props.translate?.x || props.translate?.y) {\n return `translate(${defaultX()}, ${defaultY()})`\n } else {\n return \"\";\n }\n })\n return (\n <Show when={isShown()}>\n <Portal >\n <div class={style.backdrop} >\n <div\n style={{\n width: widthStyle(),\n height: heightStyle(),\n transform: shouldTranslate(),\n }}\n ref={(el) => {\n setInnerPopup(el);\n // @ts-ignore\n props?.ref?.(el);\n }}\n class={`${style[\"primary\"]} ${style.wrapper} ${style.popup}`}\n >\n <Show when={showHeader()}>\n <div class={style.header}>\n <h2>{props.title ?? \"Modal\"}</h2>\n <span>\n <Button transparent onClick={() => props.show[1](false)}>\n <b>X</b>\n </Button>\n </span>\n </div>\n <div class={style.body}>\n {props.children}\n </div>\n </Show>\n <Show when={!showHeader()}>\n <div class={style.body} style={{ height: \"100%\" }}>\n {props.children}\n </div>\n </Show>\n </div>\n </div>\n </Portal>\n </Show>\n );\n};\n\n\ndeclare module \"solid-js\" {\n namespace JSX {\n interface Directives {\n clickOutside: () => void;\n }\n }\n}\n"],"names":["Modal","props","defaultX","createMemo","translate","x","defaultY","y","isShown","show","innerPopup","setInnerPopup","createSignal","showHeader","Object","keys","includes","undefined","noHeader","wmEntry","createEffect","el","visible","element","onClickOutside","setTimeout","registerWindowManager","unregisterWindowManager","onCleanup","widthStyle","width","isMobile","heightStyle","height","shouldTranslate","_$createComponent","Show","when","children","Portal","_el$","_tmpl$5","_el$2","firstChild","_$use","ref","_$insert","_el$3","_tmpl$2","_el$4","_el$5","nextSibling","title","Button","transparent","onClick","_tmpl$","_$effect","_$className","style","header","_el$7","_tmpl$3","body","_el$8","_tmpl$4","_p$","_v$","backdrop","_v$2","_v$3","_v$4","_v$5","wrapper","popup","e","t","_$setStyleProperty","a","o","i"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import n from"../../styleInject.js";var o={popup:"popup-module_popup__5A6Ji",wrapper:"popup-module_wrapper__iyFpP",header:"popup-module_header__-CekS",body:"popup-module_body__IhaZc",primary:"popup-module_primary__Q9k96",backdrop:"popup-module_backdrop__o8l1M"};n(".popup-module_popup__5A6Ji {\n padding: 0px;\n padding-top: 8px;\n padding-bottom: 8px;\n overflow: hidden;\n position: fixed;\n top: 50%;\n left: 50%;\n border: var(--primary-color, #4CAF50) 1px solid;\n border-radius: 8px;\n box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);\n z-index: 1001;\n text-align: center;\n}\n@media (min-width: 768px) {\n .popup-module_popup__5A6Ji {\n transform: translate(-50%, -50%);\n }\n}\n@media (max-width: 768px) {\n .popup-module_popup__5A6Ji {\n top: 0;\n left: 0;\n transform: translate(5%, 0%);\n }\n}\n\n.popup-module_wrapper__iyFpP {\n padding: 0px;\n overflow-y: hidden;\n padding-bottom: 5px;\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n}\n\n.popup-module_header__-CekS {\n background-color: var(--subheader-background-color, #388E3C);\n color: var(--subheader-on-background-color, #fff);\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n overflow-y: hidden;\n padding: 5px;\n min-height: 2em;\n}\n.popup-module_header__-CekS button {\n background-color: var(--subheader-background-color, #388E3C);\n color: var(--subheader-on-background-color, #fff);\n}\n.popup-module_header__-CekS h2 {\n text-align: left;\n margin-left: 5%;\n flex-grow: 1;\n padding: 0px;\n padding-bottom: 5px;\n margin: 0px;\n margin-left: 1em;\n}\n.popup-module_header__-CekS span {\n flex-shrink: 0;\n width: -moz-min-content;\n width: min-content;\n height: -moz-min-content;\n height: min-content;\n}\n.popup-module_header__-CekS span button:hover {\n cursor: pointer;\n}\n\n.popup-module_body__IhaZc {\n flex-basis: auto;\n overflow-y: auto;\n flex-grow: 1;\n justify-self: flex-end;\n}\n\n.popup-module_tertiary__RM-hn, .popup-module_accent__cBwGV, .popup-module_primary__Q9k96 {\n background-color: var(--surface-color, #EEEEEE);\n color: var(--on-surface-color, #000000);\n}\n\n.popup-module_backdrop__o8l1M {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n background-color: rgba(0, 0, 0, 0.4); /* dark overlay */\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000; /* sit beneath your modal */\n}");export{o as default};
2
+ //# sourceMappingURL=popup.module.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popup.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import{spread as t,mergeProps as e,template as r}from"solid-js/web";var o=r('<svg width=46 height=44><path d="M24.15 12.7875L37.6625 25.575C39.1 26.95 39.1 29.15 37.6625 30.525C36.225 31.9 33.925 31.9 32.4875 30.525L24.15 22.6875C23.4312 22 22.425 22 21.7062 22.6875L13.3687 30.525C11.9312 31.9 9.63123 31.9 8.19373 30.525C6.75623 29.15 6.75623 26.95 8.19373 25.575L21.7062 12.7875C22.425 12.2375 23.575 12.2375 24.15 12.7875Z"stroke=white stroke-width=2 stroke-miterlimit=10 stroke-linecap=round stroke-linejoin=round>'),i=r('<svg width=44 height=43><path d="M20.7625 31.8469L7.83752 19.35C6.46252 18.0062 6.46252 15.8562 7.83752 14.5125C9.21252 13.1687 11.4125 13.1687 12.7875 14.5125L20.7625 22.1719C21.45 22.8437 22.4125 22.8437 23.1 22.1719L31.075 14.5125C32.45 13.1687 34.65 13.1687 36.025 14.5125C37.4 15.8562 37.4 18.0062 36.025 19.35L23.1 31.8469C22.55 32.3844 21.45 32.3844 20.7625 31.8469Z"stroke=white stroke-width=2 stroke-miterlimit=10 stroke-linecap=round stroke-linejoin=round>');const n=r=>{return i=o(),t(i,e(r,{viewBox:"0 0 46 44",fill:"none",xmlns:"http://www.w3.org/2000/svg"}),!0,!0),i;var i},s=r=>{return o=i(),t(o,e(r,{viewBox:"0 0 44 43",fill:"none",xmlns:"http://www.w3.org/2000/svg"}),!0,!0),o;var o};export{s as DownArrow,n as UpArrow};
2
+ //# sourceMappingURL=arrows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arrows.js","sources":["../../../src/components/svgs/arrows.tsx"],"sourcesContent":["import { Component, JSX } from \"solid-js\";\ninterface ArrowProps extends JSX.SvgSVGAttributes<SVGSVGElement> {}\nexport const UpArrow: Component<ArrowProps> = (props) => {\n return (\n <svg width=\"46\" height=\"44\" {...props} viewBox=\"0 0 46 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M24.15 12.7875L37.6625 25.575C39.1 26.95 39.1 29.15 37.6625 30.525C36.225 31.9 33.925 31.9 32.4875 30.525L24.15 22.6875C23.4312 22 22.425 22 21.7062 22.6875L13.3687 30.525C11.9312 31.9 9.63123 31.9 8.19373 30.525C6.75623 29.15 6.75623 26.95 8.19373 25.575L21.7062 12.7875C22.425 12.2375 23.575 12.2375 24.15 12.7875Z\" stroke=\"white\" stroke-width=\"2\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n );\n};\n\nexport const DownArrow: Component<ArrowProps> = (props) => {\n return (\n <svg width=\"44\" height=\"43\" {...props} viewBox=\"0 0 44 43\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M20.7625 31.8469L7.83752 19.35C6.46252 18.0062 6.46252 15.8562 7.83752 14.5125C9.21252 13.1687 11.4125 13.1687 12.7875 14.5125L20.7625 22.1719C21.45 22.8437 22.4125 22.8437 23.1 22.1719L31.075 14.5125C32.45 13.1687 34.65 13.1687 36.025 14.5125C37.4 15.8562 37.4 18.0062 36.025 19.35L23.1 31.8469C22.55 32.3844 21.45 32.3844 20.7625 31.8469Z\" stroke=\"white\" stroke-width=\"2\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n )\n};"],"names":["UpArrow","props","_el$","_tmpl$","_$spread","_$mergeProps","viewBox","fill","xmlns","DownArrow","_el$2","_tmpl$2"],"mappings":"o+BAEO,MAAMA,EAAkCC,IAC7C,OAAAC,EAAAC,IAAAC,EAAAF,EAAAG,EACkCJ,EAAK,CAAAK,QAAU,YAAWC,KAAM,OAAMC,MAAO,gCAA4B,GAAA,GAAAN,EAD3G,IAAAA,GAOWO,EAAoCR,IAC/C,OAAAS,EAAAC,IAAAP,EAAAM,EAAAL,EACkCJ,EAAK,CAAAK,QAAU,YAAWC,KAAM,OAAMC,MAAO,gCAA4B,GAAA,GAAAE,EAD3G,IAAAA"}
@@ -0,0 +1,9 @@
1
+ export interface WindowManagerEntry {
2
+ element: HTMLElement;
3
+ onClickOutside: (e: MouseEvent) => void;
4
+ }
5
+ export declare function registerWindowManager(entry: WindowManagerEntry): void;
6
+ export declare function getEntryAmount(): number;
7
+ export declare function ignoreWindowManager(element: HTMLElement): void;
8
+ export declare function unignoreWindowManager(element: HTMLElement): void;
9
+ export declare function unregisterWindowManager(entry: WindowManagerEntry): void;
@@ -0,0 +1,2 @@
1
+ const e=new class{data=[];ignore=[];get entries(){return this.data}get ignoreElements(){return this.ignore}register(e){this.data.push(e)}unregister(e){const n=this.data.indexOf(e);-1!==n&&this.data.splice(n,1)}ignoreElement(e){this.ignore.push(e)}unignoreElement(e){const n=this.ignore.indexOf(e);-1!==n&&this.ignore.splice(n,1)}};function n(n){e.register(n)}function t(){return e.entries.length}function i(n){e.ignoreElement(n)}function r(n){e.unignoreElement(n)}function s(n){e.unregister(n)}function o(n){if(0===e.entries.length)return;const t=e.entries[e.entries.length-1],i=e.ignoreElements;if(i.length>0)for(const e of i)if(e.contains(n.target))return;t.element.contains(n.target)||(t.onClickOutside(n),s(t))}"undefined"!=typeof document&&(document.addEventListener("mousedown",o,!0),document.addEventListener("touchstart",o,!0));export{t as getEntryAmount,i as ignoreWindowManager,n as registerWindowManager,r as unignoreWindowManager,s as unregisterWindowManager};
2
+ //# sourceMappingURL=globalWindowManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"globalWindowManager.js","sources":["../src/globalWindowManager.ts"],"sourcesContent":["export interface WindowManagerEntry {\n element: HTMLElement;\n onClickOutside: (e: MouseEvent) => void;\n}\nconst manager = new class WinManager {\n private data: WindowManagerEntry[] = [];\n private ignore: HTMLElement[] = [];\n \n get entries() {\n return this.data;\n }\n \n get ignoreElements() {\n return this.ignore;\n }\n\n public register(entry: WindowManagerEntry) {\n this.data.push(entry);\n }\n \n public unregister(entry: WindowManagerEntry) {\n const index = this.data.indexOf(entry);\n if (index !== -1) {\n this.data.splice(index, 1);\n }\n }\n\n public ignoreElement(element: HTMLElement) {\n this.ignore.push(element);\n }\n\n public unignoreElement(element: HTMLElement) {\n const index = this.ignore.indexOf(element);\n if (index !== -1) {\n this.ignore.splice(index, 1);\n }\n }\n\n};\n\n// Register an element along with its click-outside callback.\nexport function registerWindowManager(entry: WindowManagerEntry) {\n manager.register(entry);\n}\n\nexport function getEntryAmount() {\n return manager.entries.length;\n}\n\nexport function ignoreWindowManager(element: HTMLElement) {\n manager.ignoreElement(element);\n};\n\nexport function unignoreWindowManager(element: HTMLElement) {\n manager.unignoreElement(element);\n};\n\n// Unregister the given element.\nexport function unregisterWindowManager(entry: WindowManagerEntry) {\n manager.unregister(entry);\n}\n\n// Global event handler that only lets the topmost window close.\nfunction handleGlobalClick(e: any) {\n if (manager.entries.length === 0) return;\n // Get the topmost (last registered) entry.\n const topEntry = manager.entries[manager.entries.length - 1];\n const toIgnore = manager.ignoreElements;\n if (toIgnore.length > 0) {\n for (const el of toIgnore) {\n if (el.contains(e.target as Node)) {\n return;\n }\n }\n }\n // If the click target is not inside the top entry element, trigger its callback.\n if (!topEntry.element.contains(e.target as Node)) {\n topEntry.onClickOutside(e);\n unregisterWindowManager(topEntry);\n }\n}\n\n// Attach the global event listeners in capture phase.\nif (typeof document !== 'undefined') {\n document.addEventListener('mousedown', handleGlobalClick, true);\n document.addEventListener('touchstart', handleGlobalClick, true);\n}\n"],"names":["manager","data","ignore","entries","this","ignoreElements","register","entry","push","unregister","index","indexOf","splice","ignoreElement","element","unignoreElement","registerWindowManager","getEntryAmount","length","ignoreWindowManager","unignoreWindowManager","unregisterWindowManager","handleGlobalClick","e","topEntry","toIgnore","el","contains","target","onClickOutside","document","addEventListener"],"mappings":"AAIA,MAAMA,EAAU,IAAI,MACVC,KAA6B,GAC7BC,OAAwB,GAEhC,WAAIC,GACF,OAAOC,KAAKH,IACd,CAEA,kBAAII,GACF,OAAOD,KAAKF,MACd,CAEOI,QAAAA,CAASC,GACdH,KAAKH,KAAKO,KAAKD,EACjB,CAEOE,UAAAA,CAAWF,GAChB,MAAMG,EAAQN,KAAKH,KAAKU,QAAQJ,IAClB,IAAVG,GACFN,KAAKH,KAAKW,OAAOF,EAAO,EAE5B,CAEOG,aAAAA,CAAcC,GACnBV,KAAKF,OAAOM,KAAKM,EACnB,CAEOC,eAAAA,CAAgBD,GACrB,MAAMJ,EAAQN,KAAKF,OAAOS,QAAQG,IACpB,IAAVJ,GACFN,KAAKF,OAAOU,OAAOF,EAAO,EAE9B,GAKI,SAAUM,EAAsBT,GACpCP,EAAQM,SAASC,EACnB,UAEgBU,IACd,OAAOjB,EAAQG,QAAQe,MACzB,CAEM,SAAUC,EAAoBL,GAClCd,EAAQa,cAAcC,EACxB,CAEM,SAAUM,EAAsBN,GACpCd,EAAQe,gBAAgBD,EAC1B,CAGM,SAAUO,EAAwBd,GACtCP,EAAQS,WAAWF,EACrB,CAGA,SAASe,EAAkBC,GACzB,GAA+B,IAA3BvB,EAAQG,QAAQe,OAAc,OAElC,MAAMM,EAAWxB,EAAQG,QAAQH,EAAQG,QAAQe,OAAS,GACpDO,EAAWzB,EAAQK,eACzB,GAAIoB,EAASP,OAAS,EACpB,IAAK,MAAMQ,KAAMD,EACf,GAAIC,EAAGC,SAASJ,EAAEK,QAChB,OAKDJ,EAASV,QAAQa,SAASJ,EAAEK,UAC/BJ,EAASK,eAAeN,GACxBF,EAAwBG,GAE5B,CAGwB,oBAAbM,WACTA,SAASC,iBAAiB,YAAaT,GAAmB,GAC1DQ,SAASC,iBAAiB,aAAcT,GAAmB"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export{Button}from"./components/Button/Button.js";export{Carousel,carouselTitleContext}from"./components/Carosel/Carosel.js";export{Slide}from"./components/Carosel/Slide.js";export{Chip}from"./components/Chip/Chip.js";export{Chipbar}from"./components/Chipbar/chipbar.js";export{Body}from"./components/ComponentBody/body.component.js";export{Input}from"./components/Input/inputV2.js";export{Checkbox}from"./components/Checkbox/checkbox.js";export{Select}from"./components/Select/select.component.js";export{Option}from"./components/Select/option.component.js";export{TextArea}from"./components/TextArea/TextArea.js";export{Modal}from"./components/modal/popup.component.js";export{ExpansionPanel}from"./components/expansion/expansion.js";export{SnackbarController,addSnackbar}from"./components/Snackbar/snackbar.js";export{Container}from"./components/Container/container.js";export{Icon}from"./components/Icon/icon.js";export{Menu}from"./components/Menu/menu.js";export{MenuItem}from"./components/Menu/menuitem.js";export{MenuDropdown}from"./components/Menu/menuDropdown.js";export{RadioGroup,RadioGroupContext}from"./components/Radio/radioGroup.js";export{Radio}from"./components/Radio/radio.js";export{FormArray}from"./components/Form/formHelp/formArray.js";export{Form}from"./components/Form/form.js";export{FormField}from"./components/FormField/formField.js";export{FormGroup}from"./components/Form/formGroup.js";export{useDirectFormBinding}from"./components/Form/useDirectFormBinding.js";export{useFormFieldBinding}from"./components/Form/useFormFieldBinding.js";export{addTheme}from"./tools/tools.js";export{Table}from"./components/TableV2/table.js";export{Row}from"./components/TableV2/row.js";export{Column}from"./components/TableV2/column.js";export{Cell}from"./components/TableV2/cell.js";export{Header}from"./components/TableV2/header.js";export{TabBar}from"./components/TabV2/tabs.js";export{ColeError as FieldError}from"./components/FormField/coleError.js";export{getEntryAmount,ignoreWindowManager,registerWindowManager,unignoreWindowManager,unregisterWindowManager}from"./globalWindowManager.js";export{Validators}from"./components/Form/formHelp/validators.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ export declare function injectStyles(cssPath: string): void;
@@ -0,0 +1,2 @@
1
+ function e(e){if(e&&"undefined"!=typeof document){var t=document.head||document.getElementsByTagName("head")[0],d=document.createElement("style");d.type="text/css",d.styleSheet?d.styleSheet.cssText=e:d.appendChild(document.createTextNode(e)),t.appendChild(d)}}export{e as default};
2
+ //# sourceMappingURL=styleInject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styleInject.js","sources":["../src/styleInject.js"],"sourcesContent":["// Shared CSS injector used by every component's compiled *.module.scss chunk (wired up via the\n// `inject` function in rollup.config.mjs). Authored in src — not pulled from node_modules — so that\n// under output.preserveModules it emits as ONE shared dist/styleInject.js chunk, deduplicated across\n// components, rather than being inlined into each CSS chunk (which inflated the \"import everything\"\n// case) or emitted under dist/node_modules (which some npm versions strip on publish).\n//\n// Behavior is byte-for-byte equivalent to the `style-inject` package's default (append-to-head)\n// path: SSR-guarded (no-op without `document`), with the legacy IE `styleSheet.cssText` fallback.\nexport default function styleInject(css) {\n if (!css || typeof document === 'undefined') return;\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n head.appendChild(style);\n}\n"],"names":["styleInject","css","document","head","getElementsByTagName","style","createElement","type","styleSheet","cssText","appendChild","createTextNode"],"mappings":"AAQe,SAASA,EAAYC,GAClC,GAAKA,GAA2B,oBAAbC,SAAnB,CACA,IAAIC,EAAOD,SAASC,MAAQD,SAASE,qBAAqB,QAAQ,GAC9DC,EAAQH,SAASI,cAAc,SACnCD,EAAME,KAAO,WACTF,EAAMG,WACRH,EAAMG,WAAWC,QAAUR,EAE3BI,EAAMK,YAAYR,SAASS,eAAeV,IAE5CE,EAAKO,YAAYL,EAT4B,CAU/C"}
@@ -0,0 +1,12 @@
1
+ import { Accessor, Setter } from "solid-js";
2
+ type EventFunction<T> = (event: Event | MouseEvent | KeyboardEvent | WheelEvent | PointerEvent | TouchEvent | InputEvent | FocusEvent | ClipboardEvent | DragEvent | AnimationEvent | TransitionEvent, eventValue: Setter<T>) => void;
3
+ export declare function useEventSignal<T>(eventType: keyof DocumentEventMap, initialValue: T, triggerFunc: EventFunction<T>, ref?: HTMLElement | Document): Accessor<T>;
4
+ export type AllHTMLElements = HTMLElement | HTMLDivElement | HTMLButtonElement | HTMLAnchorElement | HTMLInputElement | HTMLFormElement | HTMLImageElement | HTMLLabelElement | HTMLSelectElement | HTMLTextAreaElement | HTMLUListElement | HTMLLIElement | HTMLSpanElement | HTMLTableElement | HTMLTableRowElement | HTMLTableCellElement | HTMLTableSectionElement | HTMLTableColElement | HTMLTableCaptionElement | HTMLTableColElement;
5
+ /**
6
+ * A hook that executes a callback when clicking outside of all specified elements.
7
+ *
8
+ * @param elementRefs - An array of signals (accessors) returning target HTMLElements (or undefined initially).
9
+ * @param callback - The function to execute when a click occurs outside all the target elements.
10
+ */
11
+ export declare function useClickOutside<T extends HTMLElement>(elementRefs: Accessor<T | undefined>[], callback: () => void): void;
12
+ export {};
@@ -0,0 +1,2 @@
1
+ import{onMount as o,onCleanup as e}from"solid-js";function n(n,t){const r=o=>{const e=o.composedPath();n.some(o=>{const n=o();return n&&e.includes(n)})||t()};o(()=>{document.addEventListener("pointerdown",r)}),e(()=>{document.removeEventListener("pointerdown",r)})}export{n as useClickOutside};
2
+ //# sourceMappingURL=eventTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventTools.js","sources":["../../src/tools/eventTools.ts"],"sourcesContent":["import { Accessor, createSignal, onCleanup, onMount, Setter } from \"solid-js\";\nimport { isNullish } from \"./tools\";\n\ntype EventFunction<T> = (event: Event | MouseEvent | KeyboardEvent | WheelEvent | PointerEvent | TouchEvent | InputEvent | FocusEvent | ClipboardEvent | DragEvent | AnimationEvent | TransitionEvent, eventValue: Setter<T>) => void;\n\n\nexport function useEventSignal<T>(\n eventType: keyof DocumentEventMap, \n initialValue: T, \n triggerFunc: EventFunction<T>, \n ref: HTMLElement | Document = document\n): Accessor<T> {\n const [signal, setSignal] = createSignal<T>(initialValue);\n\n const handleEvent = (event: Event | MouseEvent | KeyboardEvent | WheelEvent | PointerEvent | TouchEvent | InputEvent | FocusEvent | ClipboardEvent | DragEvent | AnimationEvent | TransitionEvent) => {\n triggerFunc(event, setSignal);\n };\n\n ref.addEventListener(eventType, handleEvent);\n\n onCleanup(() => {\n ref.removeEventListener(eventType, handleEvent);\n });\n\n return signal;\n};\n\nexport type AllHTMLElements = HTMLElement | HTMLDivElement | HTMLButtonElement | HTMLAnchorElement | HTMLInputElement | HTMLFormElement | HTMLImageElement | HTMLLabelElement | HTMLSelectElement | HTMLTextAreaElement | HTMLUListElement | HTMLLIElement | HTMLSpanElement | HTMLTableElement | HTMLTableRowElement | HTMLTableCellElement | HTMLTableSectionElement | HTMLTableColElement | HTMLTableCaptionElement | HTMLTableColElement;\n\n// export function useClickOutside(\n// ref: Accessor<AllHTMLElements | undefined | null>, \n// handler: (e: MouseEvent) => void\n// ) {\n// const mouse: Accessor<{x:number;y:number;}> = useEventSignal(\"mousemove\", {x: 0, y: 0}, (e, set) => {\n// set({x: (e as MouseEvent).clientX, y: (e as MouseEvent).clientY});\n// });\n\n// const listener = (e: MouseEvent) => {\n// if (isNullish(ref())) return;\n// const mousePos = mouse();\n// const {top, bottom, left, right} = ref()!.getBoundingClientRect();\n// const conditions = [\n// mousePos.x < left,\n// mousePos.x > right,\n// mousePos.y < top,export function useClickOutside(\n// ref: Accessor<AllHTMLElements | undefined | null>, \n// handler: (e: MouseEvent) => void\n// ) {\n// const mouse: Accessor<{x:number;y:number;}> = useEventSignal(\"mousemove\", {x: 0, y: 0}, (e, set) => {\n// set({x: (e as MouseEvent).clientX, y: (e as MouseEvent).clientY});\n// });\n\n// const listener = (e: MouseEvent) => {\n// if (isNullish(ref())) return;\n// const mousePos = mouse();\n// const {top, bottom, left, right} = ref()!.getBoundingClientRect();\n// const conditions = [\n// mousePos.x < left,\n// mousePos.x > right,\n// mousePos.y < top,\n// mousePos.y > bottom\n// ]\n// if (conditions.includes(true)) {\n// handler(e)\n// };\n// };\n// (ref() as HTMLElement)?.addEventListener(\"click\", listener);\n\n// onCleanup(() => {\n// (ref() as HTMLElement)?.removeEventListener(\"click\", listener);\n// });\n\n// };\n// mousePos.y > bottom\n// ]\n// if (conditions.includes(true)) {\n// handler(e)\n// };\n// };\n// (ref() as HTMLElement)?.addEventListener(\"click\", listener);\n\n// onCleanup(() => {\n// (ref() as HTMLElement)?.removeEventListener(\"click\", listener);\n// });\n\n// };\n\n/**\n * A hook that executes a callback when clicking outside of all specified elements.\n *\n * @param elementRefs - An array of signals (accessors) returning target HTMLElements (or undefined initially).\n * @param callback - The function to execute when a click occurs outside all the target elements.\n */\nexport function useClickOutside<T extends HTMLElement>(\n elementRefs: Accessor<T | undefined>[],\n callback: () => void\n): void {\n // Single handler reference, used for BOTH add and remove so cleanup actually\n // detaches the listener (previously a second handler was registered in onMount\n // while onCleanup removed an unrelated one, leaking the listener past unmount).\n // Uses composedPath so clicks inside portaled overlays are still counted as inside.\n const handleClick = (event: MouseEvent) => {\n const path = event.composedPath();\n // If the click is inside ANY ref'ed element, do nothing.\n if (elementRefs.some(ref => {\n const el = ref();\n return el && path.includes(el);\n })) return;\n callback();\n };\n\n // Set up the event listener when the component mounts.\n onMount(() => {\n document.addEventListener('pointerdown', handleClick);\n });\n\n // Clean up the same listener when the component unmounts.\n onCleanup(() => {\n document.removeEventListener('pointerdown', handleClick);\n });\n}"],"names":["useClickOutside","elementRefs","callback","handleClick","event","path","composedPath","some","ref","el","includes","onMount","document","addEventListener","onCleanup","removeEventListener"],"mappings":"kDA6FM,SAAUA,EACdC,EACAC,GAMA,MAAMC,EAAeC,IACnB,MAAMC,EAAOD,EAAME,eAEfL,EAAYM,KAAKC,IACnB,MAAMC,EAAKD,IACX,OAAOC,GAAMJ,EAAKK,SAASD,MAE7BP,KAIFS,EAAQ,KACNC,SAASC,iBAAiB,cAAeV,KAI3CW,EAAU,KACRF,SAASG,oBAAoB,cAAeZ,IAEhD"}
@@ -0,0 +1,4 @@
1
+ export * from './tools';
2
+ export * from './eventTools';
3
+ export { useOverlayPosition } from './useOverlayPosition';
4
+ export type { OverlayPositionConfig } from './useOverlayPosition';
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Set the data-theme attribute on <body>.
3
+ * Accepts only 'dark' | 'light' (case-insensitive). Any invalid value falls back to 'dark'.
4
+ * Idempotent: won't re-set attribute if already the desired value (avoids needless layout / mutation observers).
5
+ * Returns the applied normalized theme string.
6
+ */
7
+ export declare function addTheme(theme?: string): 'dark' | 'light';
8
+ export declare function getMouse(): () => {
9
+ x: number;
10
+ y: number;
11
+ };
12
+ export declare function isNullish<T>(params: T): boolean;
13
+ export declare function isMobile(): boolean;
14
+ export declare function CloneStore<T>(value: T): T;
15
+ export declare function Clone<T>(obj: T, maintainFunctions?: boolean, seen?: WeakMap<WeakKey, any>): T;
@@ -0,0 +1,2 @@
1
+ import{unwrap as t}from"solid-js/store";function e(t="dark"){const e=(t||"dark").toLowerCase(),o="light"===e||"dark"===e?e:"dark";return document.body.getAttribute("data-theme")!==o&&document.body.setAttribute("data-theme",o),o}function o(t){return null==t}function i(){let t=!1;var e;return e=navigator.userAgent||navigator.vendor,(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(e.substr(0,4)))&&(t=!0),t}function a(e){return structuredClone(t(e))}function n(t,e,o=new WeakMap){if(null===t||"object"!=typeof t)return t;if(t instanceof Date)return new Date(t.getTime());if(t instanceof RegExp)return new RegExp(t);if(o.has(t))return o.get(t);if(Array.isArray(t)){const i=[];return o.set(t,i),t.forEach((t,a)=>{i[a]=n(t,e,o)}),i}if("function"==typeof t)return e?t:void 0;const i={};o.set(t,i);for(const a in t)if(Object.prototype.hasOwnProperty.call(t,a)){const r=t[a];i[a]="function"==typeof r?void 0:n(r,e,o)}return i}export{n as Clone,a as CloneStore,e as addTheme,i as isMobile,o as isNullish};
2
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sources":["../../src/tools/tools.ts"],"sourcesContent":["import { Accessor, createEffect } from \"solid-js\";\nimport { unwrap } from \"solid-js/store\";\n\n/**\n * Set the data-theme attribute on <body>.\n * Accepts only 'dark' | 'light' (case-insensitive). Any invalid value falls back to 'dark'.\n * Idempotent: won't re-set attribute if already the desired value (avoids needless layout / mutation observers).\n * Returns the applied normalized theme string.\n */\nexport function addTheme(theme: string = 'dark'): 'dark' | 'light' {\n const normalized = (theme || 'dark').toLowerCase() as string;\n const applied: 'dark' | 'light' = normalized === 'light' || normalized === 'dark' ? (normalized as 'dark' | 'light') : 'dark';\n if (document.body.getAttribute('data-theme') !== applied) {\n document.body.setAttribute('data-theme', applied);\n }\n return applied;\n};\n\nexport function getMouse() {\n const mouse = { x: 0, y: 0 };\n const mouseMove = (e: MouseEvent) => {\n mouse.x = e.clientX;\n mouse.y = e.clientY;\n };\n document.addEventListener(\"mousemove\", mouseMove);\n return () => mouse;\n};\n\nexport function isNullish<T>(params: T) {\n return params === null || params === undefined;\n};\n\n// doesn't give mobile by resolution, but by user agent\nexport function isMobile() {\n let check = false;\n (function(a){if(/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(a.substr(0,4))) check = true;})(navigator.userAgent||navigator.vendor);\n return check;\n}\n\nexport function CloneStore<T>(value: T) {\n return structuredClone(unwrap(value));\n};\n\n\nexport function Clone<T>(obj: T, maintainFunctions?: boolean, seen = new WeakMap()): T {\n // Return non-objects or null directly.\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n // Handle Date objects.\n if (obj instanceof Date) {\n return new Date(obj.getTime()) as unknown as T;\n }\n\n // Handle RegExp objects.\n if (obj instanceof RegExp) {\n return new RegExp(obj) as unknown as T;\n }\n\n // Handle circular references.\n if (seen.has(obj)) {\n return seen.get(obj);\n }\n\n // Handle arrays.\n if (Array.isArray(obj)) {\n const arr: any[] = [];\n seen.set(obj, arr);\n obj.forEach((item, index) => {\n arr[index] = Clone(item, maintainFunctions, seen);\n });\n return arr as unknown as T;\n }\n\n // Handle functions.\n if (typeof obj === 'function') {\n // If maintainFunctions is true, copy the function reference.\n return maintainFunctions ? obj : undefined as unknown as T;\n }\n\n // Handle generic objects.\n const clonedObj = {} as { [key: string]: any };\n seen.set(obj, clonedObj);\n\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n const value = (obj as { [key: string]: any })[key];\n if (typeof value === 'function') {\n // Optionally include function properties.\n clonedObj[key] = maintainFunctions ? value : undefined;\n } else {\n clonedObj[key] = Clone(value, maintainFunctions, seen);\n }\n }\n }\n\n return clonedObj as T;\n}\n"],"names":["addTheme","theme","normalized","toLowerCase","applied","document","body","getAttribute","setAttribute","isNullish","params","isMobile","check","a","navigator","userAgent","vendor","test","substr","CloneStore","value","structuredClone","unwrap","Clone","obj","maintainFunctions","seen","WeakMap","Date","getTime","RegExp","has","get","Array","isArray","arr","set","forEach","item","index","undefined","clonedObj","key","Object","prototype","hasOwnProperty","call"],"mappings":"wCASM,SAAUA,EAASC,EAAgB,QACvC,MAAMC,GAAcD,GAAS,QAAQE,cAC/BC,EAA2C,UAAfF,GAAyC,SAAfA,EAAyBA,EAAkC,OAIvH,OAHIG,SAASC,KAAKC,aAAa,gBAAkBH,GAC/CC,SAASC,KAAKE,aAAa,aAAcJ,GAEpCA,CACT,CAYM,SAAUK,EAAaC,GAC3B,OAAOA,OACT,UAGgBC,IACd,IAAIC,GAAQ,EACZ,IAAUC,EACV,OADUA,EAA24DC,UAAUC,WAAWD,UAAUE,QAAp6D,2TAA2TC,KAAKJ,IAAI,4hDAA4hDI,KAAKJ,EAAEK,OAAO,EAAE,OAAKN,GAAQ,GACt4DA,CACT,CAEM,SAAUO,EAAcC,GAC5B,OAAOC,gBAAgBC,EAAOF,GAChC,CAGM,SAAUG,EAASC,EAAQC,EAA6BC,EAAO,IAAIC,SAEvE,GAAY,OAARH,GAA+B,iBAARA,EACzB,OAAOA,EAIT,GAAIA,aAAeI,KACjB,OAAO,IAAIA,KAAKJ,EAAIK,WAItB,GAAIL,aAAeM,OACjB,OAAO,IAAIA,OAAON,GAIpB,GAAIE,EAAKK,IAAIP,GACX,OAAOE,EAAKM,IAAIR,GAIlB,GAAIS,MAAMC,QAAQV,GAAM,CACtB,MAAMW,EAAa,GAKnB,OAJAT,EAAKU,IAAIZ,EAAKW,GACdX,EAAIa,QAAQ,CAACC,EAAMC,KACjBJ,EAAII,GAAShB,EAAMe,EAAMb,EAAmBC,KAEvCS,CACT,CAGA,GAAmB,mBAARX,EAET,OAAOC,EAAoBD,OAAMgB,EAInC,MAAMC,EAAY,CAAA,EAClBf,EAAKU,IAAIZ,EAAKiB,GAEd,IAAK,MAAMC,KAAOlB,EAChB,GAAImB,OAAOC,UAAUC,eAAeC,KAAKtB,EAAKkB,GAAM,CAClD,MAAMtB,EAASI,EAA+BkB,GAG5CD,EAAUC,GAFS,mBAAVtB,OAEoCoB,EAE5BjB,EAAMH,EAAOK,EAAmBC,EAErD,CAGF,OAAOe,CACT"}
@@ -0,0 +1,27 @@
1
+ import { Accessor } from "solid-js";
2
+ export interface OverlayPositionConfig {
3
+ /** Minimum gap from viewport edges in pixels (default: 4) */
4
+ viewportMargin?: number;
5
+ /** Minimum height for the dropdown in pixels (default: 160) */
6
+ minHeight?: number;
7
+ /**
8
+ * Maximum height for the dropdown in pixels (default: 304). Caps the overlay so a
9
+ * long list scrolls instead of filling the screen, and (per Material) leaves a
10
+ * partial item visible to hint scrollability. 304 ≈ 6 × 48px items + a sliver.
11
+ */
12
+ maxHeight?: number;
13
+ }
14
+ /**
15
+ * Shared hook for positioning overlay elements (dropdowns, menus, etc.)
16
+ * relative to an anchor element. Handles viewport boundary detection,
17
+ * above/below placement, scroll and resize tracking.
18
+ *
19
+ * @param anchorRef - Accessor returning the anchor DOM element
20
+ * @param overlayRef - Accessor returning the overlay DOM element
21
+ * @param open - Accessor returning whether the overlay is currently open
22
+ * @param config - Optional positioning configuration
23
+ */
24
+ export declare function useOverlayPosition(anchorRef: Accessor<HTMLElement | undefined>, overlayRef: Accessor<HTMLElement | undefined>, open: Accessor<boolean>, config?: OverlayPositionConfig): {
25
+ dropTop: Accessor<boolean>;
26
+ updatePosition: () => void;
27
+ };
@@ -0,0 +1,2 @@
1
+ import{createSignal as t,createEffect as e,onMount as o,onCleanup as n}from"solid-js";function i(i,r,l,s){const[d,w]=t(!1),c=()=>{const t=r(),e=i();if(!t||!e)return;const o=e.getBoundingClientRect(),{height:n}=(()=>{const t=r();if(!t)return{height:0,width:0};const e=t.getBoundingClientRect();return{height:t.scrollHeight||e.height,width:e.width}})(),l=Math.min(n,304),s=window.innerHeight-o.bottom,d=o.top;let c=!1;c=!(l+4<=s)&&(l+4<=d||d>s),w(c);const h=(c?d:s)-4,m=Math.min(l,Math.max(h,160));let g=c?o.top+window.scrollY-m:o.bottom+window.scrollY;g<window.scrollY+4&&(g=window.scrollY+4);const p=window.scrollY+window.innerHeight-4;g+m>p&&(g=Math.max(window.scrollY+4,p-m));const a=o.left+window.scrollX;t.style.left=`${a}px`,t.style.top=`${g}px`,t.style.width=`${o.width}px`,t.style.maxHeight=`${m}px`};return e(()=>{l()&&c()}),o(()=>{document.addEventListener("scroll",c,!0),window.addEventListener("resize",c),n(()=>{document.removeEventListener("scroll",c,!0),window.removeEventListener("resize",c)})}),{dropTop:d,updatePosition:c}}export{i as useOverlayPosition};
2
+ //# sourceMappingURL=useOverlayPosition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOverlayPosition.js","sources":["../../src/tools/useOverlayPosition.ts"],"sourcesContent":["import { Accessor, createEffect, createSignal, onCleanup, onMount } from \"solid-js\";\n\nexport interface OverlayPositionConfig {\n /** Minimum gap from viewport edges in pixels (default: 4) */\n viewportMargin?: number;\n /** Minimum height for the dropdown in pixels (default: 160) */\n minHeight?: number;\n /**\n * Maximum height for the dropdown in pixels (default: 304). Caps the overlay so a\n * long list scrolls instead of filling the screen, and (per Material) leaves a\n * partial item visible to hint scrollability. 304 ≈ 6 × 48px items + a sliver.\n */\n maxHeight?: number;\n}\n\ninterface DropdownMetrics {\n height: number;\n width: number;\n}\n\n/**\n * Shared hook for positioning overlay elements (dropdowns, menus, etc.)\n * relative to an anchor element. Handles viewport boundary detection,\n * above/below placement, scroll and resize tracking.\n *\n * @param anchorRef - Accessor returning the anchor DOM element\n * @param overlayRef - Accessor returning the overlay DOM element\n * @param open - Accessor returning whether the overlay is currently open\n * @param config - Optional positioning configuration\n */\nexport function useOverlayPosition(\n anchorRef: Accessor<HTMLElement | undefined>,\n overlayRef: Accessor<HTMLElement | undefined>,\n open: Accessor<boolean>,\n config?: OverlayPositionConfig\n) {\n const VIEWPORT_MARGIN = config?.viewportMargin ?? 4;\n const MIN_HEIGHT = config?.minHeight ?? 160;\n const MAX_HEIGHT = config?.maxHeight ?? 304;\n\n const [dropTop, setDropTop] = createSignal(false);\n\n const getOverlayMetrics = (): DropdownMetrics => {\n const el = overlayRef();\n if (!el) return { height: 0, width: 0 };\n const rect = el.getBoundingClientRect();\n // scrollHeight is the overlay's *natural* content height, independent of any\n // max-height currently applied (base CSS or a previous run's inline style) and\n // of the scaleY(0) open/close transform — so placement is stable across runs.\n return { height: el.scrollHeight || rect.height, width: rect.width };\n };\n\n const updatePosition = () => {\n const overlay = overlayRef();\n const anchor = anchorRef();\n if (!overlay || !anchor) return;\n\n const baseRect = anchor.getBoundingClientRect();\n const { height: contentHeight } = getOverlayMetrics();\n // The overlay never renders taller than MAX_HEIGHT — longer lists scroll.\n const desired = Math.min(contentHeight, MAX_HEIGHT);\n const spaceBelow = window.innerHeight - baseRect.bottom;\n const spaceAbove = baseRect.top;\n\n // Decide orientation: prefer below if the (capped) overlay fits, else above,\n // else whichever side has more room.\n let placeAbove = false;\n if (desired + VIEWPORT_MARGIN <= spaceBelow) {\n placeAbove = false;\n } else if (desired + VIEWPORT_MARGIN <= spaceAbove) {\n placeAbove = true;\n } else {\n placeAbove = spaceAbove > spaceBelow;\n }\n\n setDropTop(placeAbove);\n\n // Actual rendered height: capped to MAX_HEIGHT and to the room on the chosen\n // side (never below MIN_HEIGHT). Using this same value for both max-height and\n // the y-offset keeps the overlay flush with the control instead of overlapping\n // it — the old code measured one height but applied a much larger one.\n const available = (placeAbove ? spaceAbove : spaceBelow) - VIEWPORT_MARGIN;\n const overlayHeight = Math.min(desired, Math.max(available, MIN_HEIGHT));\n\n // Attach flush to the anchor: directly below it, or its bottom against the\n // anchor's top when placing above.\n let newY = placeAbove\n ? baseRect.top + window.scrollY - overlayHeight\n : baseRect.bottom + window.scrollY;\n if (newY < window.scrollY + VIEWPORT_MARGIN) {\n newY = window.scrollY + VIEWPORT_MARGIN;\n }\n // Clamp the bottom edge inside the viewport. On a very small viewport both\n // sides can be shorter than MIN_HEIGHT, so overlayHeight floors to MIN_HEIGHT\n // and a below-placed overlay would otherwise run past the bottom edge.\n const maxBottom = window.scrollY + window.innerHeight - VIEWPORT_MARGIN;\n if (newY + overlayHeight > maxBottom) {\n newY = Math.max(window.scrollY + VIEWPORT_MARGIN, maxBottom - overlayHeight);\n }\n\n const newX = baseRect.left + window.scrollX;\n\n overlay.style.left = `${newX}px`;\n overlay.style.top = `${newY}px`;\n overlay.style.width = `${baseRect.width}px`;\n overlay.style.maxHeight = `${overlayHeight}px`;\n };\n\n // Re-position when open changes. Run synchronously (not in a microtask) so the placement\n // signal and inline geometry are committed before the browser paints the open transition —\n // a deferred update could let the reveal start with a stale transform-origin.\n createEffect(() => {\n if (open()) {\n updatePosition();\n }\n });\n\n // Attach scroll/resize listeners\n onMount(() => {\n document.addEventListener('scroll', updatePosition, true);\n window.addEventListener('resize', updatePosition);\n\n onCleanup(() => {\n document.removeEventListener('scroll', updatePosition, true);\n window.removeEventListener('resize', updatePosition);\n });\n });\n\n return { dropTop, updatePosition };\n}\n"],"names":["useOverlayPosition","anchorRef","overlayRef","open","config","dropTop","setDropTop","createSignal","updatePosition","overlay","anchor","baseRect","getBoundingClientRect","height","contentHeight","getOverlayMetrics","el","width","rect","scrollHeight","desired","Math","min","spaceBelow","window","innerHeight","bottom","spaceAbove","top","placeAbove","available","overlayHeight","max","newY","scrollY","maxBottom","newX","left","scrollX","style","maxHeight","createEffect","onMount","document","addEventListener","onCleanup","removeEventListener"],"mappings":"sFA8BM,SAAUA,EACdC,EACAC,EACAC,EACAC,GAEA,MAIOC,EAASC,GAAcC,GAAa,GAYrCC,EAAiBA,KACrB,MAAMC,EAAUP,IACVQ,EAAST,IACf,IAAKQ,IAAYC,EAAQ,OAEzB,MAAMC,EAAWD,EAAOE,yBAChBC,OAAQC,GAhBQC,MACxB,MAAMC,EAAKd,IACX,IAAKc,EAAI,MAAO,CAAEH,OAAQ,EAAGI,MAAO,GACpC,MAAMC,EAAOF,EAAGJ,wBAIhB,MAAO,CAAEC,OAAQG,EAAGG,cAAgBD,EAAKL,OAAQI,MAAOC,EAAKD,QAS3BF,GAE5BK,EAAUC,KAAKC,IAAIR,EAtBa,KAuBhCS,EAAaC,OAAOC,YAAcd,EAASe,OAC3CC,EAAahB,EAASiB,IAI5B,IAAIC,GAAa,EAEfA,IADET,EA/B4C,GA+BfG,KAEtBH,EAjCqC,GAiCRO,GAGzBA,EAAaJ,GAG5BjB,EAAWuB,GAMX,MAAMC,GAAaD,EAAaF,EAAaJ,GA7CG,EA8C1CQ,EAAgBV,KAAKC,IAAIF,EAASC,KAAKW,IAAIF,EA7CX,MAiDtC,IAAIG,EAAOJ,EACPlB,EAASiB,IAAMJ,OAAOU,QAAUH,EAChCpB,EAASe,OAASF,OAAOU,QACzBD,EAAOT,OAAOU,QArD8B,IAsD9CD,EAAOT,OAAOU,QAtDgC,GA2DhD,MAAMC,EAAYX,OAAOU,QAAUV,OAAOC,YA3DM,EA4D5CQ,EAAOF,EAAgBI,IACzBF,EAAOZ,KAAKW,IAAIR,OAAOU,QA7DuB,EA6DIC,EAAYJ,IAGhE,MAAMK,EAAOzB,EAAS0B,KAAOb,OAAOc,QAEpC7B,EAAQ8B,MAAMF,KAAO,GAAGD,MACxB3B,EAAQ8B,MAAMX,IAAM,GAAGK,MACvBxB,EAAQ8B,MAAMtB,MAAQ,GAAGN,EAASM,UAClCR,EAAQ8B,MAAMC,UAAY,GAAGT,OAuB/B,OAjBAU,EAAa,KACPtC,KACFK,MAKJkC,EAAQ,KACNC,SAASC,iBAAiB,SAAUpC,GAAgB,GACpDgB,OAAOoB,iBAAiB,SAAUpC,GAElCqC,EAAU,KACRF,SAASG,oBAAoB,SAAUtC,GAAgB,GACvDgB,OAAOsB,oBAAoB,SAAUtC,OAIlC,CAAEH,UAASG,iBACpB"}