@simplysm/solid 13.0.0-beta.6

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 (745) hide show
  1. package/.cache/typecheck-browser.tsbuildinfo +1 -0
  2. package/.cache/typecheck-tests-browser.tsbuildinfo +1 -0
  3. package/README.md +1652 -0
  4. package/dist/components/data/Pagination.js +110 -0
  5. package/dist/components/data/Pagination.js.map +7 -0
  6. package/dist/components/data/Table.js +34 -0
  7. package/dist/components/data/Table.js.map +7 -0
  8. package/dist/components/data/calendar/Calendar.js +90 -0
  9. package/dist/components/data/calendar/Calendar.js.map +7 -0
  10. package/dist/components/data/kanban/Kanban.js +367 -0
  11. package/dist/components/data/kanban/Kanban.js.map +7 -0
  12. package/dist/components/data/kanban/KanbanContext.js +24 -0
  13. package/dist/components/data/kanban/KanbanContext.js.map +7 -0
  14. package/dist/components/data/list/List.js +133 -0
  15. package/dist/components/data/list/List.js.map +7 -0
  16. package/dist/components/data/list/ListContext.js +8 -0
  17. package/dist/components/data/list/ListContext.js.map +7 -0
  18. package/dist/components/data/list/ListItem.js +101 -0
  19. package/dist/components/data/list/ListItem.js.map +7 -0
  20. package/dist/components/data/list/ListItem.styles.js +43 -0
  21. package/dist/components/data/list/ListItem.styles.js.map +7 -0
  22. package/dist/components/data/permission-table/PermissionTable.js +189 -0
  23. package/dist/components/data/permission-table/PermissionTable.js.map +7 -0
  24. package/dist/components/data/sheet/DataSheet.js +907 -0
  25. package/dist/components/data/sheet/DataSheet.js.map +7 -0
  26. package/dist/components/data/sheet/DataSheet.styles.js +142 -0
  27. package/dist/components/data/sheet/DataSheet.styles.js.map +7 -0
  28. package/dist/components/data/sheet/DataSheetColumn.js +28 -0
  29. package/dist/components/data/sheet/DataSheetColumn.js.map +7 -0
  30. package/dist/components/data/sheet/DataSheetConfigDialog.js +83 -0
  31. package/dist/components/data/sheet/DataSheetConfigDialog.js.map +7 -0
  32. package/dist/components/data/sheet/sheetUtils.js +125 -0
  33. package/dist/components/data/sheet/sheetUtils.js.map +7 -0
  34. package/dist/components/data/sheet/types.js +1 -0
  35. package/dist/components/data/sheet/types.js.map +7 -0
  36. package/dist/components/disclosure/Collapse.js +45 -0
  37. package/dist/components/disclosure/Collapse.js.map +7 -0
  38. package/dist/components/disclosure/Dialog.js +367 -0
  39. package/dist/components/disclosure/Dialog.js.map +7 -0
  40. package/dist/components/disclosure/DialogContext.js +14 -0
  41. package/dist/components/disclosure/DialogContext.js.map +7 -0
  42. package/dist/components/disclosure/DialogInstanceContext.js +10 -0
  43. package/dist/components/disclosure/DialogInstanceContext.js.map +7 -0
  44. package/dist/components/disclosure/DialogProvider.js +88 -0
  45. package/dist/components/disclosure/DialogProvider.js.map +7 -0
  46. package/dist/components/disclosure/Dropdown.js +244 -0
  47. package/dist/components/disclosure/Dropdown.js.map +7 -0
  48. package/dist/components/disclosure/Tabs.js +75 -0
  49. package/dist/components/disclosure/Tabs.js.map +7 -0
  50. package/dist/components/disclosure/dialogZIndex.js +32 -0
  51. package/dist/components/disclosure/dialogZIndex.js.map +7 -0
  52. package/dist/components/display/Alert.js +18 -0
  53. package/dist/components/display/Alert.js.map +7 -0
  54. package/dist/components/display/Barcode.js +39 -0
  55. package/dist/components/display/Barcode.js.map +7 -0
  56. package/dist/components/display/Card.js +21 -0
  57. package/dist/components/display/Card.js.map +7 -0
  58. package/dist/components/display/Echarts.js +33 -0
  59. package/dist/components/display/Echarts.js.map +7 -0
  60. package/dist/components/display/Icon.js +10 -0
  61. package/dist/components/display/Icon.js.map +7 -0
  62. package/dist/components/display/Tag.js +20 -0
  63. package/dist/components/display/Tag.js.map +7 -0
  64. package/dist/components/feedback/Progress.js +37 -0
  65. package/dist/components/feedback/Progress.js.map +7 -0
  66. package/dist/components/feedback/loading/LoadingContainer.js +83 -0
  67. package/dist/components/feedback/loading/LoadingContainer.js.map +7 -0
  68. package/dist/components/feedback/loading/LoadingContext.js +14 -0
  69. package/dist/components/feedback/loading/LoadingContext.js.map +7 -0
  70. package/dist/components/feedback/loading/LoadingProvider.js +47 -0
  71. package/dist/components/feedback/loading/LoadingProvider.js.map +7 -0
  72. package/dist/components/feedback/notification/NotificationBanner.js +61 -0
  73. package/dist/components/feedback/notification/NotificationBanner.js.map +7 -0
  74. package/dist/components/feedback/notification/NotificationBell.js +85 -0
  75. package/dist/components/feedback/notification/NotificationBell.js.map +7 -0
  76. package/dist/components/feedback/notification/NotificationContext.js +14 -0
  77. package/dist/components/feedback/notification/NotificationContext.js.map +7 -0
  78. package/dist/components/feedback/notification/NotificationProvider.js +101 -0
  79. package/dist/components/feedback/notification/NotificationProvider.js.map +7 -0
  80. package/dist/components/feedback/notification/index.js +5 -0
  81. package/dist/components/feedback/notification/index.js.map +7 -0
  82. package/dist/components/feedback/print/Print.js +12 -0
  83. package/dist/components/feedback/print/Print.js.map +7 -0
  84. package/dist/components/feedback/print/PrintInstanceContext.js +10 -0
  85. package/dist/components/feedback/print/PrintInstanceContext.js.map +7 -0
  86. package/dist/components/form-control/Button.js +74 -0
  87. package/dist/components/form-control/Button.js.map +7 -0
  88. package/dist/components/form-control/DropdownTrigger.styles.js +44 -0
  89. package/dist/components/form-control/DropdownTrigger.styles.js.map +7 -0
  90. package/dist/components/form-control/ThemeToggle.js +57 -0
  91. package/dist/components/form-control/ThemeToggle.js.map +7 -0
  92. package/dist/components/form-control/checkbox/Checkbox.js +78 -0
  93. package/dist/components/form-control/checkbox/Checkbox.js.map +7 -0
  94. package/dist/components/form-control/checkbox/Checkbox.styles.js +57 -0
  95. package/dist/components/form-control/checkbox/Checkbox.styles.js.map +7 -0
  96. package/dist/components/form-control/checkbox/CheckboxGroup.js +65 -0
  97. package/dist/components/form-control/checkbox/CheckboxGroup.js.map +7 -0
  98. package/dist/components/form-control/checkbox/Radio.js +78 -0
  99. package/dist/components/form-control/checkbox/Radio.js.map +7 -0
  100. package/dist/components/form-control/checkbox/RadioGroup.js +60 -0
  101. package/dist/components/form-control/checkbox/RadioGroup.js.map +7 -0
  102. package/dist/components/form-control/color-picker/ColorPicker.js +55 -0
  103. package/dist/components/form-control/color-picker/ColorPicker.js.map +7 -0
  104. package/dist/components/form-control/combobox/Combobox.js +214 -0
  105. package/dist/components/form-control/combobox/Combobox.js.map +7 -0
  106. package/dist/components/form-control/combobox/ComboboxContext.js +14 -0
  107. package/dist/components/form-control/combobox/ComboboxContext.js.map +7 -0
  108. package/dist/components/form-control/combobox/ComboboxItem.js +49 -0
  109. package/dist/components/form-control/combobox/ComboboxItem.js.map +7 -0
  110. package/dist/components/form-control/date-range-picker/DateRangePicker.js +136 -0
  111. package/dist/components/form-control/date-range-picker/DateRangePicker.js.map +7 -0
  112. package/dist/components/form-control/editor/EditorToolbar.js +290 -0
  113. package/dist/components/form-control/editor/EditorToolbar.js.map +7 -0
  114. package/dist/components/form-control/editor/RichTextEditor.js +114 -0
  115. package/dist/components/form-control/editor/RichTextEditor.js.map +7 -0
  116. package/dist/components/form-control/field/DatePicker.js +167 -0
  117. package/dist/components/form-control/field/DatePicker.js.map +7 -0
  118. package/dist/components/form-control/field/DateTimePicker.js +168 -0
  119. package/dist/components/form-control/field/DateTimePicker.js.map +7 -0
  120. package/dist/components/form-control/field/Field.styles.js +35 -0
  121. package/dist/components/form-control/field/Field.styles.js.map +7 -0
  122. package/dist/components/form-control/field/NumberInput.js +193 -0
  123. package/dist/components/form-control/field/NumberInput.js.map +7 -0
  124. package/dist/components/form-control/field/TextInput.js +178 -0
  125. package/dist/components/form-control/field/TextInput.js.map +7 -0
  126. package/dist/components/form-control/field/Textarea.js +186 -0
  127. package/dist/components/form-control/field/Textarea.js.map +7 -0
  128. package/dist/components/form-control/field/TimePicker.js +138 -0
  129. package/dist/components/form-control/field/TimePicker.js.map +7 -0
  130. package/dist/components/form-control/numpad/Numpad.js +107 -0
  131. package/dist/components/form-control/numpad/Numpad.js.map +7 -0
  132. package/dist/components/form-control/select/Select.js +196 -0
  133. package/dist/components/form-control/select/Select.js.map +7 -0
  134. package/dist/components/form-control/select/SelectContext.js +14 -0
  135. package/dist/components/form-control/select/SelectContext.js.map +7 -0
  136. package/dist/components/form-control/select/SelectItem.js +65 -0
  137. package/dist/components/form-control/select/SelectItem.js.map +7 -0
  138. package/dist/components/form-control/state-preset/StatePreset.js +195 -0
  139. package/dist/components/form-control/state-preset/StatePreset.js.map +7 -0
  140. package/dist/components/layout/FormGroup.js +34 -0
  141. package/dist/components/layout/FormGroup.js.map +7 -0
  142. package/dist/components/layout/FormTable.js +24 -0
  143. package/dist/components/layout/FormTable.js.map +7 -0
  144. package/dist/components/layout/sidebar/Sidebar.js +63 -0
  145. package/dist/components/layout/sidebar/Sidebar.js.map +7 -0
  146. package/dist/components/layout/sidebar/SidebarContainer.js +70 -0
  147. package/dist/components/layout/sidebar/SidebarContainer.js.map +7 -0
  148. package/dist/components/layout/sidebar/SidebarContext.js +20 -0
  149. package/dist/components/layout/sidebar/SidebarContext.js.map +7 -0
  150. package/dist/components/layout/sidebar/SidebarMenu.js +84 -0
  151. package/dist/components/layout/sidebar/SidebarMenu.js.map +7 -0
  152. package/dist/components/layout/sidebar/SidebarUser.js +51 -0
  153. package/dist/components/layout/sidebar/SidebarUser.js.map +7 -0
  154. package/dist/components/layout/topbar/Topbar.js +48 -0
  155. package/dist/components/layout/topbar/Topbar.js.map +7 -0
  156. package/dist/components/layout/topbar/TopbarContainer.js +13 -0
  157. package/dist/components/layout/topbar/TopbarContainer.js.map +7 -0
  158. package/dist/components/layout/topbar/TopbarMenu.js +106 -0
  159. package/dist/components/layout/topbar/TopbarMenu.js.map +7 -0
  160. package/dist/components/layout/topbar/TopbarUser.js +44 -0
  161. package/dist/components/layout/topbar/TopbarUser.js.map +7 -0
  162. package/dist/core-browser/src/extensions/element-ext.d.ts +98 -0
  163. package/dist/core-browser/src/extensions/element-ext.d.ts.map +1 -0
  164. package/dist/core-browser/src/extensions/html-element-ext.d.ts +54 -0
  165. package/dist/core-browser/src/extensions/html-element-ext.d.ts.map +1 -0
  166. package/dist/core-browser/src/index.d.ts +7 -0
  167. package/dist/core-browser/src/index.d.ts.map +1 -0
  168. package/dist/core-browser/src/utils/blob.d.ts +10 -0
  169. package/dist/core-browser/src/utils/blob.d.ts.map +1 -0
  170. package/dist/core-browser/src/utils/download.d.ts +11 -0
  171. package/dist/core-browser/src/utils/download.d.ts.map +1 -0
  172. package/dist/core-common/src/common.types.d.ts +74 -0
  173. package/dist/core-common/src/common.types.d.ts.map +1 -0
  174. package/dist/core-common/src/env.d.ts +6 -0
  175. package/dist/core-common/src/env.d.ts.map +1 -0
  176. package/dist/core-common/src/errors/argument-error.d.ts +25 -0
  177. package/dist/core-common/src/errors/argument-error.d.ts.map +1 -0
  178. package/dist/core-common/src/errors/not-implemented-error.d.ts +29 -0
  179. package/dist/core-common/src/errors/not-implemented-error.d.ts.map +1 -0
  180. package/dist/core-common/src/errors/sd-error.d.ts +27 -0
  181. package/dist/core-common/src/errors/sd-error.d.ts.map +1 -0
  182. package/dist/core-common/src/errors/timeout-error.d.ts +31 -0
  183. package/dist/core-common/src/errors/timeout-error.d.ts.map +1 -0
  184. package/dist/core-common/src/extensions/arr-ext.d.ts +15 -0
  185. package/dist/core-common/src/extensions/arr-ext.d.ts.map +1 -0
  186. package/dist/core-common/src/extensions/arr-ext.helpers.d.ts +19 -0
  187. package/dist/core-common/src/extensions/arr-ext.helpers.d.ts.map +1 -0
  188. package/dist/core-common/src/extensions/arr-ext.types.d.ts +215 -0
  189. package/dist/core-common/src/extensions/arr-ext.types.d.ts.map +1 -0
  190. package/dist/core-common/src/extensions/map-ext.d.ts +57 -0
  191. package/dist/core-common/src/extensions/map-ext.d.ts.map +1 -0
  192. package/dist/core-common/src/extensions/set-ext.d.ts +36 -0
  193. package/dist/core-common/src/extensions/set-ext.d.ts.map +1 -0
  194. package/dist/core-common/src/features/debounce-queue.d.ts +53 -0
  195. package/dist/core-common/src/features/debounce-queue.d.ts.map +1 -0
  196. package/dist/core-common/src/features/event-emitter.d.ts +66 -0
  197. package/dist/core-common/src/features/event-emitter.d.ts.map +1 -0
  198. package/dist/core-common/src/features/serial-queue.d.ts +47 -0
  199. package/dist/core-common/src/features/serial-queue.d.ts.map +1 -0
  200. package/dist/core-common/src/index.d.ts +32 -0
  201. package/dist/core-common/src/index.d.ts.map +1 -0
  202. package/dist/core-common/src/types/date-only.d.ts +152 -0
  203. package/dist/core-common/src/types/date-only.d.ts.map +1 -0
  204. package/dist/core-common/src/types/date-time.d.ts +96 -0
  205. package/dist/core-common/src/types/date-time.d.ts.map +1 -0
  206. package/dist/core-common/src/types/lazy-gc-map.d.ts +80 -0
  207. package/dist/core-common/src/types/lazy-gc-map.d.ts.map +1 -0
  208. package/dist/core-common/src/types/time.d.ts +68 -0
  209. package/dist/core-common/src/types/time.d.ts.map +1 -0
  210. package/dist/core-common/src/types/uuid.d.ts +35 -0
  211. package/dist/core-common/src/types/uuid.d.ts.map +1 -0
  212. package/dist/core-common/src/utils/bytes.d.ts +51 -0
  213. package/dist/core-common/src/utils/bytes.d.ts.map +1 -0
  214. package/dist/core-common/src/utils/date-format.d.ts +90 -0
  215. package/dist/core-common/src/utils/date-format.d.ts.map +1 -0
  216. package/dist/core-common/src/utils/json.d.ts +34 -0
  217. package/dist/core-common/src/utils/json.d.ts.map +1 -0
  218. package/dist/core-common/src/utils/num.d.ts +60 -0
  219. package/dist/core-common/src/utils/num.d.ts.map +1 -0
  220. package/dist/core-common/src/utils/obj.d.ts +258 -0
  221. package/dist/core-common/src/utils/obj.d.ts.map +1 -0
  222. package/dist/core-common/src/utils/path.d.ts +23 -0
  223. package/dist/core-common/src/utils/path.d.ts.map +1 -0
  224. package/dist/core-common/src/utils/primitive.d.ts +18 -0
  225. package/dist/core-common/src/utils/primitive.d.ts.map +1 -0
  226. package/dist/core-common/src/utils/str.d.ts +103 -0
  227. package/dist/core-common/src/utils/str.d.ts.map +1 -0
  228. package/dist/core-common/src/utils/template-strings.d.ts +84 -0
  229. package/dist/core-common/src/utils/template-strings.d.ts.map +1 -0
  230. package/dist/core-common/src/utils/transferable.d.ts +47 -0
  231. package/dist/core-common/src/utils/transferable.d.ts.map +1 -0
  232. package/dist/core-common/src/utils/wait.d.ts +19 -0
  233. package/dist/core-common/src/utils/wait.d.ts.map +1 -0
  234. package/dist/core-common/src/utils/xml.d.ts +36 -0
  235. package/dist/core-common/src/utils/xml.d.ts.map +1 -0
  236. package/dist/core-common/src/zip/sd-zip.d.ts +80 -0
  237. package/dist/core-common/src/zip/sd-zip.d.ts.map +1 -0
  238. package/dist/directives/ripple.js +106 -0
  239. package/dist/directives/ripple.js.map +7 -0
  240. package/dist/helpers/createAppStructure.js +96 -0
  241. package/dist/helpers/createAppStructure.js.map +7 -0
  242. package/dist/helpers/mergeStyles.js +27 -0
  243. package/dist/helpers/mergeStyles.js.map +7 -0
  244. package/dist/helpers/splitSlots.js +25 -0
  245. package/dist/helpers/splitSlots.js.map +7 -0
  246. package/dist/hooks/createControllableSignal.js +24 -0
  247. package/dist/hooks/createControllableSignal.js.map +7 -0
  248. package/dist/hooks/createIMEHandler.js +50 -0
  249. package/dist/hooks/createIMEHandler.js.map +7 -0
  250. package/dist/hooks/createMountTransition.js +33 -0
  251. package/dist/hooks/createMountTransition.js.map +7 -0
  252. package/dist/hooks/useClipboardValueCopy.js +121 -0
  253. package/dist/hooks/useClipboardValueCopy.js.map +7 -0
  254. package/dist/hooks/usePersisted.js +25 -0
  255. package/dist/hooks/usePersisted.js.map +7 -0
  256. package/dist/hooks/usePrint.js +208 -0
  257. package/dist/hooks/usePrint.js.map +7 -0
  258. package/dist/hooks/useRouterLink.js +24 -0
  259. package/dist/hooks/useRouterLink.js.map +7 -0
  260. package/dist/index.js +94 -0
  261. package/dist/index.js.map +7 -0
  262. package/dist/orm-common/src/db-context.d.ts +669 -0
  263. package/dist/orm-common/src/db-context.d.ts.map +1 -0
  264. package/dist/orm-common/src/errors/db-transaction-error.d.ts +51 -0
  265. package/dist/orm-common/src/errors/db-transaction-error.d.ts.map +1 -0
  266. package/dist/orm-common/src/exec/executable.d.ts +79 -0
  267. package/dist/orm-common/src/exec/executable.d.ts.map +1 -0
  268. package/dist/orm-common/src/exec/queryable.d.ts +708 -0
  269. package/dist/orm-common/src/exec/queryable.d.ts.map +1 -0
  270. package/dist/orm-common/src/exec/search-parser.d.ts +72 -0
  271. package/dist/orm-common/src/exec/search-parser.d.ts.map +1 -0
  272. package/dist/orm-common/src/expr/expr-unit.d.ts +25 -0
  273. package/dist/orm-common/src/expr/expr-unit.d.ts.map +1 -0
  274. package/dist/orm-common/src/expr/expr.d.ts +1369 -0
  275. package/dist/orm-common/src/expr/expr.d.ts.map +1 -0
  276. package/dist/orm-common/src/index.d.ts +32 -0
  277. package/dist/orm-common/src/index.d.ts.map +1 -0
  278. package/dist/orm-common/src/models/system-migration.d.ts +10 -0
  279. package/dist/orm-common/src/models/system-migration.d.ts.map +1 -0
  280. package/dist/orm-common/src/query-builder/base/expr-renderer-base.d.ts +95 -0
  281. package/dist/orm-common/src/query-builder/base/expr-renderer-base.d.ts.map +1 -0
  282. package/dist/orm-common/src/query-builder/base/query-builder-base.d.ts +66 -0
  283. package/dist/orm-common/src/query-builder/base/query-builder-base.d.ts.map +1 -0
  284. package/dist/orm-common/src/query-builder/mssql/mssql-expr-renderer.d.ts +84 -0
  285. package/dist/orm-common/src/query-builder/mssql/mssql-expr-renderer.d.ts.map +1 -0
  286. package/dist/orm-common/src/query-builder/mssql/mssql-query-builder.d.ts +45 -0
  287. package/dist/orm-common/src/query-builder/mssql/mssql-query-builder.d.ts.map +1 -0
  288. package/dist/orm-common/src/query-builder/mysql/mysql-expr-renderer.d.ts +84 -0
  289. package/dist/orm-common/src/query-builder/mysql/mysql-expr-renderer.d.ts.map +1 -0
  290. package/dist/orm-common/src/query-builder/mysql/mysql-query-builder.d.ts +54 -0
  291. package/dist/orm-common/src/query-builder/mysql/mysql-query-builder.d.ts.map +1 -0
  292. package/dist/orm-common/src/query-builder/postgresql/postgresql-expr-renderer.d.ts +84 -0
  293. package/dist/orm-common/src/query-builder/postgresql/postgresql-expr-renderer.d.ts.map +1 -0
  294. package/dist/orm-common/src/query-builder/postgresql/postgresql-query-builder.d.ts +52 -0
  295. package/dist/orm-common/src/query-builder/postgresql/postgresql-query-builder.d.ts.map +1 -0
  296. package/dist/orm-common/src/query-builder/query-builder.d.ts +7 -0
  297. package/dist/orm-common/src/query-builder/query-builder.d.ts.map +1 -0
  298. package/dist/orm-common/src/schema/factory/column-builder.d.ts +394 -0
  299. package/dist/orm-common/src/schema/factory/column-builder.d.ts.map +1 -0
  300. package/dist/orm-common/src/schema/factory/index-builder.d.ts +151 -0
  301. package/dist/orm-common/src/schema/factory/index-builder.d.ts.map +1 -0
  302. package/dist/orm-common/src/schema/factory/relation-builder.d.ts +337 -0
  303. package/dist/orm-common/src/schema/factory/relation-builder.d.ts.map +1 -0
  304. package/dist/orm-common/src/schema/procedure-builder.d.ts +202 -0
  305. package/dist/orm-common/src/schema/procedure-builder.d.ts.map +1 -0
  306. package/dist/orm-common/src/schema/table-builder.d.ts +259 -0
  307. package/dist/orm-common/src/schema/table-builder.d.ts.map +1 -0
  308. package/dist/orm-common/src/schema/view-builder.d.ts +183 -0
  309. package/dist/orm-common/src/schema/view-builder.d.ts.map +1 -0
  310. package/dist/orm-common/src/types/column.d.ts +172 -0
  311. package/dist/orm-common/src/types/column.d.ts.map +1 -0
  312. package/dist/orm-common/src/types/db.d.ts +175 -0
  313. package/dist/orm-common/src/types/db.d.ts.map +1 -0
  314. package/dist/orm-common/src/types/expr.d.ts +474 -0
  315. package/dist/orm-common/src/types/expr.d.ts.map +1 -0
  316. package/dist/orm-common/src/types/query-def.d.ts +351 -0
  317. package/dist/orm-common/src/types/query-def.d.ts.map +1 -0
  318. package/dist/orm-common/src/utils/result-parser.d.ts +38 -0
  319. package/dist/orm-common/src/utils/result-parser.d.ts.map +1 -0
  320. package/dist/providers/ConfigContext.js +14 -0
  321. package/dist/providers/ConfigContext.js.map +7 -0
  322. package/dist/providers/InitializeProvider.js +10 -0
  323. package/dist/providers/InitializeProvider.js.map +7 -0
  324. package/dist/providers/ServiceClientContext.js +16 -0
  325. package/dist/providers/ServiceClientContext.js.map +7 -0
  326. package/dist/providers/ServiceClientProvider.js +116 -0
  327. package/dist/providers/ServiceClientProvider.js.map +7 -0
  328. package/dist/providers/ThemeContext.js +48 -0
  329. package/dist/providers/ThemeContext.js.map +7 -0
  330. package/dist/providers/shared-data/SharedDataChangeEvent.js +8 -0
  331. package/dist/providers/shared-data/SharedDataChangeEvent.js.map +7 -0
  332. package/dist/providers/shared-data/SharedDataContext.js +16 -0
  333. package/dist/providers/shared-data/SharedDataContext.js.map +7 -0
  334. package/dist/providers/shared-data/SharedDataProvider.js +115 -0
  335. package/dist/providers/shared-data/SharedDataProvider.js.map +7 -0
  336. package/dist/service-client/src/features/event-client.d.ts +14 -0
  337. package/dist/service-client/src/features/event-client.d.ts.map +1 -0
  338. package/dist/service-client/src/features/file-client.d.ts +13 -0
  339. package/dist/service-client/src/features/file-client.d.ts.map +1 -0
  340. package/dist/service-client/src/features/orm/orm-client-connector.d.ts +10 -0
  341. package/dist/service-client/src/features/orm/orm-client-connector.d.ts.map +1 -0
  342. package/dist/service-client/src/features/orm/orm-client-db-context-executor.d.ts +26 -0
  343. package/dist/service-client/src/features/orm/orm-client-db-context-executor.d.ts.map +1 -0
  344. package/dist/service-client/src/features/orm/orm-connect-config.d.ts +13 -0
  345. package/dist/service-client/src/features/orm/orm-connect-config.d.ts.map +1 -0
  346. package/dist/service-client/src/index.d.ts +12 -0
  347. package/dist/service-client/src/index.d.ts.map +1 -0
  348. package/dist/service-client/src/protocol/client-protocol-wrapper.d.ts +23 -0
  349. package/dist/service-client/src/protocol/client-protocol-wrapper.d.ts.map +1 -0
  350. package/dist/service-client/src/service-client.d.ts +41 -0
  351. package/dist/service-client/src/service-client.d.ts.map +1 -0
  352. package/dist/service-client/src/transport/service-transport.d.ts +24 -0
  353. package/dist/service-client/src/transport/service-transport.d.ts.map +1 -0
  354. package/dist/service-client/src/transport/socket-provider.d.ts +31 -0
  355. package/dist/service-client/src/transport/socket-provider.d.ts.map +1 -0
  356. package/dist/service-client/src/types/connection-config.d.ts +8 -0
  357. package/dist/service-client/src/types/connection-config.d.ts.map +1 -0
  358. package/dist/service-client/src/types/progress.types.d.ts +10 -0
  359. package/dist/service-client/src/types/progress.types.d.ts.map +1 -0
  360. package/dist/service-common/src/index.d.ts +8 -0
  361. package/dist/service-common/src/index.d.ts.map +1 -0
  362. package/dist/service-common/src/protocol/protocol.types.d.ts +100 -0
  363. package/dist/service-common/src/protocol/protocol.types.d.ts.map +1 -0
  364. package/dist/service-common/src/protocol/service-protocol.d.ts +63 -0
  365. package/dist/service-common/src/protocol/service-protocol.d.ts.map +1 -0
  366. package/dist/service-common/src/service-types/auto-update-service.types.d.ts +17 -0
  367. package/dist/service-common/src/service-types/auto-update-service.types.d.ts.map +1 -0
  368. package/dist/service-common/src/service-types/crypto-service.types.d.ts +22 -0
  369. package/dist/service-common/src/service-types/crypto-service.types.d.ts.map +1 -0
  370. package/dist/service-common/src/service-types/orm-service.types.d.ts +30 -0
  371. package/dist/service-common/src/service-types/orm-service.types.d.ts.map +1 -0
  372. package/dist/service-common/src/service-types/smtp-service.types.d.ts +55 -0
  373. package/dist/service-common/src/service-types/smtp-service.types.d.ts.map +1 -0
  374. package/dist/service-common/src/types.d.ts +43 -0
  375. package/dist/service-common/src/types.d.ts.map +1 -0
  376. package/dist/solid/src/components/data/Pagination.d.ts +12 -0
  377. package/dist/solid/src/components/data/Pagination.d.ts.map +1 -0
  378. package/dist/solid/src/components/data/Table.d.ts +6 -0
  379. package/dist/solid/src/components/data/Table.d.ts.map +1 -0
  380. package/dist/solid/src/components/data/calendar/Calendar.d.ts +15 -0
  381. package/dist/solid/src/components/data/calendar/Calendar.d.ts.map +1 -0
  382. package/dist/solid/src/components/data/kanban/Kanban.d.ts +38 -0
  383. package/dist/solid/src/components/data/kanban/Kanban.d.ts.map +1 -0
  384. package/dist/solid/src/components/data/kanban/KanbanContext.d.ts +40 -0
  385. package/dist/solid/src/components/data/kanban/KanbanContext.d.ts.map +1 -0
  386. package/dist/solid/src/components/data/list/List.d.ts +36 -0
  387. package/dist/solid/src/components/data/list/List.d.ts.map +1 -0
  388. package/dist/solid/src/components/data/list/ListContext.d.ts +9 -0
  389. package/dist/solid/src/components/data/list/ListContext.d.ts.map +1 -0
  390. package/dist/solid/src/components/data/list/ListItem.d.ts +88 -0
  391. package/dist/solid/src/components/data/list/ListItem.d.ts.map +1 -0
  392. package/dist/solid/src/components/data/list/ListItem.styles.d.ts +10 -0
  393. package/dist/solid/src/components/data/list/ListItem.styles.d.ts.map +1 -0
  394. package/dist/solid/src/components/data/permission-table/PermissionTable.d.ts +26 -0
  395. package/dist/solid/src/components/data/permission-table/PermissionTable.d.ts.map +1 -0
  396. package/dist/solid/src/components/data/sheet/DataSheet.d.ts +12 -0
  397. package/dist/solid/src/components/data/sheet/DataSheet.d.ts.map +1 -0
  398. package/dist/solid/src/components/data/sheet/DataSheet.styles.d.ts +33 -0
  399. package/dist/solid/src/components/data/sheet/DataSheet.styles.d.ts.map +1 -0
  400. package/dist/solid/src/components/data/sheet/DataSheetColumn.d.ts +5 -0
  401. package/dist/solid/src/components/data/sheet/DataSheetColumn.d.ts.map +1 -0
  402. package/dist/solid/src/components/data/sheet/DataSheetConfigDialog.d.ts +8 -0
  403. package/dist/solid/src/components/data/sheet/DataSheetConfigDialog.d.ts.map +1 -0
  404. package/dist/solid/src/components/data/sheet/sheetUtils.d.ts +7 -0
  405. package/dist/solid/src/components/data/sheet/sheetUtils.d.ts.map +1 -0
  406. package/dist/solid/src/components/data/sheet/types.d.ts +113 -0
  407. package/dist/solid/src/components/data/sheet/types.d.ts.map +1 -0
  408. package/dist/solid/src/components/disclosure/Collapse.d.ts +21 -0
  409. package/dist/solid/src/components/disclosure/Collapse.d.ts.map +1 -0
  410. package/dist/solid/src/components/disclosure/Dialog.d.ts +65 -0
  411. package/dist/solid/src/components/disclosure/Dialog.d.ts.map +1 -0
  412. package/dist/solid/src/components/disclosure/DialogContext.d.ts +30 -0
  413. package/dist/solid/src/components/disclosure/DialogContext.d.ts.map +1 -0
  414. package/dist/solid/src/components/disclosure/DialogInstanceContext.d.ts +6 -0
  415. package/dist/solid/src/components/disclosure/DialogInstanceContext.d.ts.map +1 -0
  416. package/dist/solid/src/components/disclosure/DialogProvider.d.ts +19 -0
  417. package/dist/solid/src/components/disclosure/DialogProvider.d.ts.map +1 -0
  418. package/dist/solid/src/components/disclosure/Dropdown.d.ts +65 -0
  419. package/dist/solid/src/components/disclosure/Dropdown.d.ts.map +1 -0
  420. package/dist/solid/src/components/disclosure/Tabs.d.ts +24 -0
  421. package/dist/solid/src/components/disclosure/Tabs.d.ts.map +1 -0
  422. package/dist/solid/src/components/disclosure/dialogZIndex.d.ts +13 -0
  423. package/dist/solid/src/components/disclosure/dialogZIndex.d.ts.map +1 -0
  424. package/dist/solid/src/components/display/Alert.d.ts +8 -0
  425. package/dist/solid/src/components/display/Alert.d.ts.map +1 -0
  426. package/dist/solid/src/components/display/Barcode.d.ts +8 -0
  427. package/dist/solid/src/components/display/Barcode.d.ts.map +1 -0
  428. package/dist/solid/src/components/display/Card.d.ts +6 -0
  429. package/dist/solid/src/components/display/Card.d.ts.map +1 -0
  430. package/dist/solid/src/components/display/Echarts.d.ts +8 -0
  431. package/dist/solid/src/components/display/Echarts.d.ts.map +1 -0
  432. package/dist/solid/src/components/display/Icon.d.ts +8 -0
  433. package/dist/solid/src/components/display/Icon.d.ts.map +1 -0
  434. package/dist/solid/src/components/display/Tag.d.ts +8 -0
  435. package/dist/solid/src/components/display/Tag.d.ts.map +1 -0
  436. package/dist/solid/src/components/feedback/Progress.d.ts +12 -0
  437. package/dist/solid/src/components/feedback/Progress.d.ts.map +1 -0
  438. package/dist/solid/src/components/feedback/loading/LoadingContainer.d.ts +12 -0
  439. package/dist/solid/src/components/feedback/loading/LoadingContainer.d.ts.map +1 -0
  440. package/dist/solid/src/components/feedback/loading/LoadingContext.d.ts +11 -0
  441. package/dist/solid/src/components/feedback/loading/LoadingContext.d.ts.map +1 -0
  442. package/dist/solid/src/components/feedback/loading/LoadingProvider.d.ts +7 -0
  443. package/dist/solid/src/components/feedback/loading/LoadingProvider.d.ts.map +1 -0
  444. package/dist/solid/src/components/feedback/notification/NotificationBanner.d.ts +3 -0
  445. package/dist/solid/src/components/feedback/notification/NotificationBanner.d.ts.map +1 -0
  446. package/dist/solid/src/components/feedback/notification/NotificationBell.d.ts +6 -0
  447. package/dist/solid/src/components/feedback/notification/NotificationBell.d.ts.map +1 -0
  448. package/dist/solid/src/components/feedback/notification/NotificationContext.d.ts +39 -0
  449. package/dist/solid/src/components/feedback/notification/NotificationContext.d.ts.map +1 -0
  450. package/dist/solid/src/components/feedback/notification/NotificationProvider.d.ts +3 -0
  451. package/dist/solid/src/components/feedback/notification/NotificationProvider.d.ts.map +1 -0
  452. package/dist/solid/src/components/feedback/notification/index.d.ts +5 -0
  453. package/dist/solid/src/components/feedback/notification/index.d.ts.map +1 -0
  454. package/dist/solid/src/components/feedback/print/Print.d.ts +9 -0
  455. package/dist/solid/src/components/feedback/print/Print.d.ts.map +1 -0
  456. package/dist/solid/src/components/feedback/print/PrintInstanceContext.d.ts +6 -0
  457. package/dist/solid/src/components/feedback/print/PrintInstanceContext.d.ts.map +1 -0
  458. package/dist/solid/src/components/form-control/Button.d.ts +14 -0
  459. package/dist/solid/src/components/form-control/Button.d.ts.map +1 -0
  460. package/dist/solid/src/components/form-control/DropdownTrigger.styles.d.ts +14 -0
  461. package/dist/solid/src/components/form-control/DropdownTrigger.styles.d.ts.map +1 -0
  462. package/dist/solid/src/components/form-control/ThemeToggle.d.ts +25 -0
  463. package/dist/solid/src/components/form-control/ThemeToggle.d.ts.map +1 -0
  464. package/dist/solid/src/components/form-control/checkbox/Checkbox.d.ts +16 -0
  465. package/dist/solid/src/components/form-control/checkbox/Checkbox.d.ts.map +1 -0
  466. package/dist/solid/src/components/form-control/checkbox/Checkbox.styles.d.ts +12 -0
  467. package/dist/solid/src/components/form-control/checkbox/Checkbox.styles.d.ts.map +1 -0
  468. package/dist/solid/src/components/form-control/checkbox/CheckboxGroup.d.ts +27 -0
  469. package/dist/solid/src/components/form-control/checkbox/CheckboxGroup.d.ts.map +1 -0
  470. package/dist/solid/src/components/form-control/checkbox/Radio.d.ts +16 -0
  471. package/dist/solid/src/components/form-control/checkbox/Radio.d.ts.map +1 -0
  472. package/dist/solid/src/components/form-control/checkbox/RadioGroup.d.ts +27 -0
  473. package/dist/solid/src/components/form-control/checkbox/RadioGroup.d.ts.map +1 -0
  474. package/dist/solid/src/components/form-control/color-picker/ColorPicker.d.ts +29 -0
  475. package/dist/solid/src/components/form-control/color-picker/ColorPicker.d.ts.map +1 -0
  476. package/dist/solid/src/components/form-control/combobox/Combobox.d.ts +80 -0
  477. package/dist/solid/src/components/form-control/combobox/Combobox.d.ts.map +1 -0
  478. package/dist/solid/src/components/form-control/combobox/ComboboxContext.d.ts +11 -0
  479. package/dist/solid/src/components/form-control/combobox/ComboboxContext.d.ts.map +1 -0
  480. package/dist/solid/src/components/form-control/combobox/ComboboxItem.d.ts +12 -0
  481. package/dist/solid/src/components/form-control/combobox/ComboboxItem.d.ts.map +1 -0
  482. package/dist/solid/src/components/form-control/date-range-picker/DateRangePicker.d.ts +55 -0
  483. package/dist/solid/src/components/form-control/date-range-picker/DateRangePicker.d.ts.map +1 -0
  484. package/dist/solid/src/components/form-control/editor/EditorToolbar.d.ts +8 -0
  485. package/dist/solid/src/components/form-control/editor/EditorToolbar.d.ts.map +1 -0
  486. package/dist/solid/src/components/form-control/editor/RichTextEditor.d.ts +21 -0
  487. package/dist/solid/src/components/form-control/editor/RichTextEditor.d.ts.map +1 -0
  488. package/dist/solid/src/components/form-control/field/DatePicker.d.ts +61 -0
  489. package/dist/solid/src/components/form-control/field/DatePicker.d.ts.map +1 -0
  490. package/dist/solid/src/components/form-control/field/DateTimePicker.d.ts +58 -0
  491. package/dist/solid/src/components/form-control/field/DateTimePicker.d.ts.map +1 -0
  492. package/dist/solid/src/components/form-control/field/Field.styles.d.ts +13 -0
  493. package/dist/solid/src/components/form-control/field/Field.styles.d.ts.map +1 -0
  494. package/dist/solid/src/components/form-control/field/NumberInput.d.ts +47 -0
  495. package/dist/solid/src/components/form-control/field/NumberInput.d.ts.map +1 -0
  496. package/dist/solid/src/components/form-control/field/TextInput.d.ts +51 -0
  497. package/dist/solid/src/components/form-control/field/TextInput.d.ts.map +1 -0
  498. package/dist/solid/src/components/form-control/field/Textarea.d.ts +42 -0
  499. package/dist/solid/src/components/form-control/field/Textarea.d.ts.map +1 -0
  500. package/dist/solid/src/components/form-control/field/TimePicker.d.ts +46 -0
  501. package/dist/solid/src/components/form-control/field/TimePicker.d.ts.map +1 -0
  502. package/dist/solid/src/components/form-control/numpad/Numpad.d.ts +28 -0
  503. package/dist/solid/src/components/form-control/numpad/Numpad.d.ts.map +1 -0
  504. package/dist/solid/src/components/form-control/select/Select.d.ts +104 -0
  505. package/dist/solid/src/components/form-control/select/Select.d.ts.map +1 -0
  506. package/dist/solid/src/components/form-control/select/SelectContext.d.ts +14 -0
  507. package/dist/solid/src/components/form-control/select/SelectContext.d.ts.map +1 -0
  508. package/dist/solid/src/components/form-control/select/SelectItem.d.ts +33 -0
  509. package/dist/solid/src/components/form-control/select/SelectItem.d.ts.map +1 -0
  510. package/dist/solid/src/components/form-control/state-preset/StatePreset.d.ts +14 -0
  511. package/dist/solid/src/components/form-control/state-preset/StatePreset.d.ts.map +1 -0
  512. package/dist/solid/src/components/layout/FormGroup.d.ts +14 -0
  513. package/dist/solid/src/components/layout/FormGroup.d.ts.map +1 -0
  514. package/dist/solid/src/components/layout/FormTable.d.ts +5 -0
  515. package/dist/solid/src/components/layout/FormTable.d.ts.map +1 -0
  516. package/dist/solid/src/components/layout/sidebar/Sidebar.d.ts +35 -0
  517. package/dist/solid/src/components/layout/sidebar/Sidebar.d.ts.map +1 -0
  518. package/dist/solid/src/components/layout/sidebar/SidebarContainer.d.ts +34 -0
  519. package/dist/solid/src/components/layout/sidebar/SidebarContainer.d.ts.map +1 -0
  520. package/dist/solid/src/components/layout/sidebar/SidebarContext.d.ts +28 -0
  521. package/dist/solid/src/components/layout/sidebar/SidebarContext.d.ts.map +1 -0
  522. package/dist/solid/src/components/layout/sidebar/SidebarMenu.d.ts +41 -0
  523. package/dist/solid/src/components/layout/sidebar/SidebarMenu.d.ts.map +1 -0
  524. package/dist/solid/src/components/layout/sidebar/SidebarUser.d.ts +36 -0
  525. package/dist/solid/src/components/layout/sidebar/SidebarUser.d.ts.map +1 -0
  526. package/dist/solid/src/components/layout/topbar/Topbar.d.ts +35 -0
  527. package/dist/solid/src/components/layout/topbar/Topbar.d.ts.map +1 -0
  528. package/dist/solid/src/components/layout/topbar/TopbarContainer.d.ts +25 -0
  529. package/dist/solid/src/components/layout/topbar/TopbarContainer.d.ts.map +1 -0
  530. package/dist/solid/src/components/layout/topbar/TopbarMenu.d.ts +41 -0
  531. package/dist/solid/src/components/layout/topbar/TopbarMenu.d.ts.map +1 -0
  532. package/dist/solid/src/components/layout/topbar/TopbarUser.d.ts +35 -0
  533. package/dist/solid/src/components/layout/topbar/TopbarUser.d.ts.map +1 -0
  534. package/dist/solid/src/directives/ripple.d.ts +24 -0
  535. package/dist/solid/src/directives/ripple.d.ts.map +1 -0
  536. package/dist/solid/src/helpers/createAppStructure.d.ts +52 -0
  537. package/dist/solid/src/helpers/createAppStructure.d.ts.map +1 -0
  538. package/dist/solid/src/helpers/mergeStyles.d.ts +27 -0
  539. package/dist/solid/src/helpers/mergeStyles.d.ts.map +1 -0
  540. package/dist/solid/src/helpers/splitSlots.d.ts +25 -0
  541. package/dist/solid/src/helpers/splitSlots.d.ts.map +1 -0
  542. package/dist/solid/src/hooks/createControllableSignal.d.ts +40 -0
  543. package/dist/solid/src/hooks/createControllableSignal.d.ts.map +1 -0
  544. package/dist/solid/src/hooks/createIMEHandler.d.ts +20 -0
  545. package/dist/solid/src/hooks/createIMEHandler.d.ts.map +1 -0
  546. package/dist/solid/src/hooks/createMountTransition.d.ts +14 -0
  547. package/dist/solid/src/hooks/createMountTransition.d.ts.map +1 -0
  548. package/dist/solid/src/hooks/useClipboardValueCopy.d.ts +15 -0
  549. package/dist/solid/src/hooks/useClipboardValueCopy.d.ts.map +1 -0
  550. package/dist/solid/src/hooks/usePersisted.d.ts +26 -0
  551. package/dist/solid/src/hooks/usePersisted.d.ts.map +1 -0
  552. package/dist/solid/src/hooks/usePrint.d.ts +11 -0
  553. package/dist/solid/src/hooks/usePrint.d.ts.map +1 -0
  554. package/dist/solid/src/hooks/useRouterLink.d.ts +38 -0
  555. package/dist/solid/src/hooks/useRouterLink.d.ts.map +1 -0
  556. package/dist/solid/src/index.d.ts +85 -0
  557. package/dist/solid/src/index.d.ts.map +1 -0
  558. package/dist/solid/src/providers/ConfigContext.d.ts +48 -0
  559. package/dist/solid/src/providers/ConfigContext.d.ts.map +1 -0
  560. package/dist/solid/src/providers/InitializeProvider.d.ts +23 -0
  561. package/dist/solid/src/providers/InitializeProvider.d.ts.map +1 -0
  562. package/dist/solid/src/providers/ServiceClientContext.d.ts +10 -0
  563. package/dist/solid/src/providers/ServiceClientContext.d.ts.map +1 -0
  564. package/dist/solid/src/providers/ServiceClientProvider.d.ts +3 -0
  565. package/dist/solid/src/providers/ServiceClientProvider.d.ts.map +1 -0
  566. package/dist/solid/src/providers/ThemeContext.d.ts +65 -0
  567. package/dist/solid/src/providers/ThemeContext.d.ts.map +1 -0
  568. package/dist/solid/src/providers/shared-data/SharedDataChangeEvent.d.ts +8 -0
  569. package/dist/solid/src/providers/shared-data/SharedDataChangeEvent.d.ts.map +1 -0
  570. package/dist/solid/src/providers/shared-data/SharedDataContext.d.ts +22 -0
  571. package/dist/solid/src/providers/shared-data/SharedDataContext.d.ts.map +1 -0
  572. package/dist/solid/src/providers/shared-data/SharedDataProvider.d.ts +9 -0
  573. package/dist/solid/src/providers/shared-data/SharedDataProvider.d.ts.map +1 -0
  574. package/dist/solid/src/styles/patterns.styles.d.ts +6 -0
  575. package/dist/solid/src/styles/patterns.styles.d.ts.map +1 -0
  576. package/dist/solid/src/styles/tokens.styles.d.ts +20 -0
  577. package/dist/solid/src/styles/tokens.styles.d.ts.map +1 -0
  578. package/dist/styles/patterns.styles.js +30 -0
  579. package/dist/styles/patterns.styles.js.map +7 -0
  580. package/dist/styles/tokens.styles.js +72 -0
  581. package/dist/styles/tokens.styles.js.map +7 -0
  582. package/package.json +56 -0
  583. package/src/base.css +78 -0
  584. package/src/components/data/Pagination.tsx +112 -0
  585. package/src/components/data/Table.tsx +43 -0
  586. package/src/components/data/calendar/Calendar.tsx +139 -0
  587. package/src/components/data/kanban/Kanban.css +10 -0
  588. package/src/components/data/kanban/Kanban.tsx +547 -0
  589. package/src/components/data/kanban/KanbanContext.ts +71 -0
  590. package/src/components/data/list/List.tsx +184 -0
  591. package/src/components/data/list/ListContext.ts +12 -0
  592. package/src/components/data/list/ListItem.styles.ts +49 -0
  593. package/src/components/data/list/ListItem.tsx +222 -0
  594. package/src/components/data/permission-table/PermissionTable.tsx +291 -0
  595. package/src/components/data/sheet/DataSheet.css +26 -0
  596. package/src/components/data/sheet/DataSheet.styles.ts +161 -0
  597. package/src/components/data/sheet/DataSheet.tsx +1198 -0
  598. package/src/components/data/sheet/DataSheetColumn.tsx +29 -0
  599. package/src/components/data/sheet/DataSheetConfigDialog.tsx +146 -0
  600. package/src/components/data/sheet/sheetUtils.ts +156 -0
  601. package/src/components/data/sheet/types.ts +143 -0
  602. package/src/components/disclosure/Collapse.tsx +72 -0
  603. package/src/components/disclosure/Dialog.tsx +520 -0
  604. package/src/components/disclosure/DialogContext.ts +39 -0
  605. package/src/components/disclosure/DialogInstanceContext.ts +11 -0
  606. package/src/components/disclosure/DialogProvider.tsx +133 -0
  607. package/src/components/disclosure/Dropdown.tsx +406 -0
  608. package/src/components/disclosure/Tabs.tsx +127 -0
  609. package/src/components/disclosure/dialogZIndex.ts +43 -0
  610. package/src/components/display/Alert.tsx +32 -0
  611. package/src/components/display/Barcode.tsx +158 -0
  612. package/src/components/display/Card.css +14 -0
  613. package/src/components/display/Card.tsx +26 -0
  614. package/src/components/display/Echarts.tsx +45 -0
  615. package/src/components/display/Icon.tsx +13 -0
  616. package/src/components/display/Tag.tsx +31 -0
  617. package/src/components/feedback/Progress.tsx +61 -0
  618. package/src/components/feedback/loading/LoadingContainer.css +19 -0
  619. package/src/components/feedback/loading/LoadingContainer.tsx +132 -0
  620. package/src/components/feedback/loading/LoadingContext.ts +20 -0
  621. package/src/components/feedback/loading/LoadingProvider.tsx +58 -0
  622. package/src/components/feedback/notification/NotificationBanner.tsx +83 -0
  623. package/src/components/feedback/notification/NotificationBell.tsx +132 -0
  624. package/src/components/feedback/notification/NotificationContext.ts +65 -0
  625. package/src/components/feedback/notification/NotificationProvider.tsx +143 -0
  626. package/src/components/feedback/notification/index.ts +4 -0
  627. package/src/components/feedback/print/Print.tsx +21 -0
  628. package/src/components/feedback/print/PrintInstanceContext.ts +11 -0
  629. package/src/components/form-control/Button.tsx +90 -0
  630. package/src/components/form-control/DropdownTrigger.styles.ts +47 -0
  631. package/src/components/form-control/ThemeToggle.tsx +96 -0
  632. package/src/components/form-control/checkbox/Checkbox.styles.ts +66 -0
  633. package/src/components/form-control/checkbox/Checkbox.tsx +106 -0
  634. package/src/components/form-control/checkbox/CheckboxGroup.tsx +116 -0
  635. package/src/components/form-control/checkbox/Radio.tsx +107 -0
  636. package/src/components/form-control/checkbox/RadioGroup.tsx +111 -0
  637. package/src/components/form-control/color-picker/ColorPicker.tsx +96 -0
  638. package/src/components/form-control/combobox/Combobox.tsx +390 -0
  639. package/src/components/form-control/combobox/ComboboxContext.ts +22 -0
  640. package/src/components/form-control/combobox/ComboboxItem.tsx +69 -0
  641. package/src/components/form-control/date-range-picker/DateRangePicker.tsx +215 -0
  642. package/src/components/form-control/editor/EditorToolbar.tsx +348 -0
  643. package/src/components/form-control/editor/RichTextEditor.tsx +173 -0
  644. package/src/components/form-control/editor/editor.css +81 -0
  645. package/src/components/form-control/field/DatePicker.tsx +268 -0
  646. package/src/components/form-control/field/DateTimePicker.tsx +260 -0
  647. package/src/components/form-control/field/Field.styles.ts +42 -0
  648. package/src/components/form-control/field/NumberInput.tsx +328 -0
  649. package/src/components/form-control/field/TextInput.tsx +287 -0
  650. package/src/components/form-control/field/Textarea.tsx +262 -0
  651. package/src/components/form-control/field/TimePicker.tsx +215 -0
  652. package/src/components/form-control/numpad/Numpad.tsx +218 -0
  653. package/src/components/form-control/select/Select.tsx +404 -0
  654. package/src/components/form-control/select/SelectContext.ts +25 -0
  655. package/src/components/form-control/select/SelectItem.tsx +124 -0
  656. package/src/components/form-control/state-preset/StatePreset.tsx +277 -0
  657. package/src/components/layout/FormGroup.tsx +63 -0
  658. package/src/components/layout/FormTable.tsx +29 -0
  659. package/src/components/layout/sidebar/Sidebar.tsx +104 -0
  660. package/src/components/layout/sidebar/SidebarContainer.tsx +115 -0
  661. package/src/components/layout/sidebar/SidebarContext.ts +40 -0
  662. package/src/components/layout/sidebar/SidebarMenu.tsx +181 -0
  663. package/src/components/layout/sidebar/SidebarUser.tsx +107 -0
  664. package/src/components/layout/topbar/Topbar.tsx +93 -0
  665. package/src/components/layout/topbar/TopbarContainer.tsx +40 -0
  666. package/src/components/layout/topbar/TopbarMenu.tsx +206 -0
  667. package/src/components/layout/topbar/TopbarUser.tsx +96 -0
  668. package/src/directives/ripple.ts +151 -0
  669. package/src/helpers/createAppStructure.ts +183 -0
  670. package/src/helpers/mergeStyles.ts +55 -0
  671. package/src/helpers/splitSlots.ts +48 -0
  672. package/src/hooks/createControllableSignal.ts +63 -0
  673. package/src/hooks/createIMEHandler.ts +65 -0
  674. package/src/hooks/createMountTransition.ts +45 -0
  675. package/src/hooks/useClipboardValueCopy.ts +177 -0
  676. package/src/hooks/usePersisted.ts +51 -0
  677. package/src/hooks/usePrint.ts +277 -0
  678. package/src/hooks/useRouterLink.ts +64 -0
  679. package/src/index.ts +117 -0
  680. package/src/providers/ConfigContext.ts +59 -0
  681. package/src/providers/InitializeProvider.tsx +28 -0
  682. package/src/providers/ServiceClientContext.ts +21 -0
  683. package/src/providers/ServiceClientProvider.tsx +132 -0
  684. package/src/providers/ThemeContext.tsx +121 -0
  685. package/src/providers/shared-data/SharedDataChangeEvent.ts +8 -0
  686. package/src/providers/shared-data/SharedDataContext.ts +34 -0
  687. package/src/providers/shared-data/SharedDataProvider.tsx +149 -0
  688. package/src/styles/patterns.styles.ts +32 -0
  689. package/src/styles/tokens.styles.ts +83 -0
  690. package/tailwind.config.ts +50 -0
  691. package/tests/components/data/List.spec.tsx +683 -0
  692. package/tests/components/data/Pagination.spec.tsx +317 -0
  693. package/tests/components/data/Table.spec.tsx +55 -0
  694. package/tests/components/data/kanban/Kanban.selection.spec.tsx +209 -0
  695. package/tests/components/data/permission-table/PermissionTable.spec.tsx +280 -0
  696. package/tests/components/data/sheet/DataSheet.spec.tsx +564 -0
  697. package/tests/components/disclosure/Collapse.spec.tsx +162 -0
  698. package/tests/components/disclosure/Dialog.spec.tsx +319 -0
  699. package/tests/components/disclosure/DialogProvider.spec.tsx +110 -0
  700. package/tests/components/disclosure/Dropdown.spec.tsx +410 -0
  701. package/tests/components/disclosure/Tabs.spec.tsx +220 -0
  702. package/tests/components/display/Alert.spec.tsx +47 -0
  703. package/tests/components/display/Barcode.spec.tsx +61 -0
  704. package/tests/components/display/Card.spec.tsx +41 -0
  705. package/tests/components/display/Tag.spec.tsx +47 -0
  706. package/tests/components/feedback/notification/LiveRegion.spec.tsx +41 -0
  707. package/tests/components/feedback/notification/NotificationBanner.spec.tsx +164 -0
  708. package/tests/components/feedback/notification/NotificationBell.spec.tsx +207 -0
  709. package/tests/components/feedback/notification/NotificationContext.spec.tsx +331 -0
  710. package/tests/components/feedback/print/Print.spec.tsx +45 -0
  711. package/tests/components/form-control/Button.spec.tsx +119 -0
  712. package/tests/components/form-control/checkbox/Checkbox.spec.tsx +120 -0
  713. package/tests/components/form-control/checkbox/Radio.spec.tsx +112 -0
  714. package/tests/components/form-control/color-picker/ColorPicker.spec.tsx +67 -0
  715. package/tests/components/form-control/combobox/Combobox.spec.tsx +174 -0
  716. package/tests/components/form-control/combobox/ComboboxItem.spec.tsx +85 -0
  717. package/tests/components/form-control/date-range-picker/DateRangePicker.spec.tsx +172 -0
  718. package/tests/components/form-control/field/DatePicker.spec.tsx +305 -0
  719. package/tests/components/form-control/field/DateTimePicker.spec.tsx +287 -0
  720. package/tests/components/form-control/field/NumberInput.spec.tsx +276 -0
  721. package/tests/components/form-control/field/TextInput.spec.tsx +258 -0
  722. package/tests/components/form-control/field/Textarea.spec.tsx +181 -0
  723. package/tests/components/form-control/field/TimePicker.spec.tsx +243 -0
  724. package/tests/components/form-control/numpad/Numpad.spec.tsx +238 -0
  725. package/tests/components/form-control/select/Select.spec.tsx +239 -0
  726. package/tests/components/form-control/select/SelectItem.spec.tsx +149 -0
  727. package/tests/components/layout/FormGroup.spec.tsx +104 -0
  728. package/tests/components/layout/FormTable.spec.tsx +43 -0
  729. package/tests/components/layout/sidebar/Sidebar.spec.tsx +190 -0
  730. package/tests/components/layout/sidebar/SidebarContainer.spec.tsx +203 -0
  731. package/tests/components/layout/sidebar/SidebarMenu.spec.tsx +213 -0
  732. package/tests/components/layout/sidebar/SidebarUser.spec.tsx +171 -0
  733. package/tests/directives/ripple.spec.tsx +130 -0
  734. package/tests/helpers/createAppStructure.spec.tsx +338 -0
  735. package/tests/helpers/mergeStyles.spec.ts +163 -0
  736. package/tests/helpers/splitSlots.spec.tsx +188 -0
  737. package/tests/hooks/createControllableSignal.spec.ts +194 -0
  738. package/tests/hooks/createIMEHandler.spec.ts +80 -0
  739. package/tests/hooks/createMountTransition.spec.ts +86 -0
  740. package/tests/hooks/usePersisted.spec.tsx +191 -0
  741. package/tests/hooks/usePrint.spec.tsx +123 -0
  742. package/tests/hooks/useRouterLink.spec.tsx +183 -0
  743. package/tests/providers/ConfigContext.spec.ts +40 -0
  744. package/tests/providers/ServiceClientContext.spec.tsx +83 -0
  745. package/tests/providers/shared-data/SharedDataProvider.spec.tsx +233 -0
@@ -0,0 +1,195 @@
1
+ import { createSignal, For, Show, splitProps } from "solid-js";
2
+ import { twMerge } from "tailwind-merge";
3
+ import clsx from "clsx";
4
+ import { IconDeviceFloppy, IconStar, IconX } from "@tabler/icons-solidjs";
5
+ import { objClone, objEqual } from "@simplysm/core-common";
6
+ import { usePersisted } from "../../../hooks/usePersisted";
7
+ import { useNotification } from "../../feedback/notification/NotificationContext";
8
+ import { Icon } from "../../display/Icon";
9
+ import { textPlaceholder } from "../../../styles/tokens.styles";
10
+ const baseClass = clsx("inline-flex items-center gap-1.5", "flex-wrap");
11
+ const chipClass = clsx(
12
+ "inline-flex items-center gap-1",
13
+ "rounded-full",
14
+ "bg-base-200 dark:bg-base-700",
15
+ "text-base-800 dark:text-base-200",
16
+ "cursor-default"
17
+ );
18
+ const chipDefaultClass = "px-3 py-1";
19
+ const chipSizeClasses = {
20
+ sm: "px-2 py-0.5 text-sm",
21
+ lg: "px-4 py-2"
22
+ };
23
+ const chipNameBtnClass = clsx("cursor-pointer", "hover:underline", "focus:outline-none");
24
+ const iconBtnClass = clsx(
25
+ "inline-flex items-center justify-center",
26
+ "rounded-full",
27
+ "cursor-pointer",
28
+ "transition-colors",
29
+ "focus:outline-none",
30
+ "hover:bg-base-300 dark:hover:bg-base-600"
31
+ );
32
+ const iconBtnDefaultClass = "p-0.5";
33
+ const iconBtnSizeClasses = {
34
+ sm: "p-px",
35
+ lg: "p-1"
36
+ };
37
+ const starBtnClass = clsx(
38
+ "inline-flex items-center justify-center",
39
+ "rounded-full",
40
+ "cursor-pointer",
41
+ "transition-colors",
42
+ "focus:outline-none",
43
+ "text-warning-500",
44
+ "hover:bg-warning-100 dark:hover:bg-warning-900/40"
45
+ );
46
+ const starBtnDefaultClass = "p-1";
47
+ const starBtnSizeClasses = {
48
+ sm: "p-0.5",
49
+ lg: "p-1.5"
50
+ };
51
+ const inputClass = clsx(
52
+ "rounded-full",
53
+ "bg-base-200 dark:bg-base-700",
54
+ "text-base-800 dark:text-base-200",
55
+ "border border-transparent",
56
+ "focus:ring-1 focus:ring-primary-400",
57
+ "focus:outline-none",
58
+ textPlaceholder
59
+ );
60
+ const inputDefaultClass = "px-3 py-1 w-24";
61
+ const inputSizeClasses = {
62
+ sm: "px-2 py-0.5 w-20 text-sm",
63
+ lg: "px-4 py-2 w-32"
64
+ };
65
+ const iconSize = "0.85em";
66
+ function StatePresetInner(props) {
67
+ const [local] = splitProps(props, ["presetKey", "value", "onValueChange", "size", "class", "style"]);
68
+ const notification = useNotification();
69
+ const [presets, setPresets] = usePersisted(`state-preset.${local.presetKey}`, []);
70
+ const [adding, setAdding] = createSignal(false);
71
+ const [inputValue, setInputValue] = createSignal("");
72
+ function handleStartAdd() {
73
+ setAdding(true);
74
+ setInputValue("");
75
+ }
76
+ function handleCancelAdd() {
77
+ setAdding(false);
78
+ setInputValue("");
79
+ }
80
+ function handleConfirmAdd() {
81
+ const name = inputValue().trim();
82
+ if (!name) {
83
+ handleCancelAdd();
84
+ return;
85
+ }
86
+ if (presets().some((p) => p.name === name)) {
87
+ notification.warning("\uC774\uB984 \uC911\uBCF5", "\uAC19\uC740 \uC774\uB984\uC758 \uD504\uB9AC\uC14B\uC774 \uC774\uBBF8 \uC874\uC7AC\uD569\uB2C8\uB2E4.");
88
+ return;
89
+ }
90
+ const newPreset = {
91
+ name,
92
+ state: objClone(local.value)
93
+ };
94
+ setPresets([...presets(), newPreset]);
95
+ notification.info("\uD504\uB9AC\uC14B \uC800\uC7A5", `"${name}" \uD504\uB9AC\uC14B\uC774 \uC800\uC7A5\uB418\uC5C8\uC2B5\uB2C8\uB2E4.`);
96
+ setAdding(false);
97
+ setInputValue("");
98
+ }
99
+ function handleRestore(preset) {
100
+ if (!objEqual(local.value, preset.state)) {
101
+ local.onValueChange(objClone(preset.state));
102
+ }
103
+ }
104
+ function handleOverwrite(index) {
105
+ const snapshot = [...presets()];
106
+ const presetName = snapshot[index].name;
107
+ const updated = snapshot.map((p, i) => i === index ? { ...p, state: objClone(local.value) } : p);
108
+ setPresets(updated);
109
+ const notiId = notification.info("\uD504\uB9AC\uC14B \uB36E\uC5B4\uC4F0\uAE30", `"${presetName}" \uD504\uB9AC\uC14B\uC774 \uD604\uC7AC \uC0C1\uD0DC\uB85C \uC5C5\uB370\uC774\uD2B8\uB418\uC5C8\uC2B5\uB2C8\uB2E4.`, {
110
+ action: {
111
+ label: "\uC2E4\uD589 \uCDE8\uC18C",
112
+ onClick: () => {
113
+ setPresets(snapshot);
114
+ notification.remove(notiId);
115
+ }
116
+ }
117
+ });
118
+ }
119
+ function handleDelete(index) {
120
+ const snapshot = [...presets()];
121
+ const presetName = snapshot[index].name;
122
+ const updated = snapshot.filter((_, i) => i !== index);
123
+ setPresets(updated);
124
+ const notiId = notification.info("\uD504\uB9AC\uC14B \uC0AD\uC81C", `"${presetName}" \uD504\uB9AC\uC14B\uC774 \uC0AD\uC81C\uB418\uC5C8\uC2B5\uB2C8\uB2E4.`, {
125
+ action: {
126
+ label: "\uC2E4\uD589 \uCDE8\uC18C",
127
+ onClick: () => {
128
+ setPresets(snapshot);
129
+ notification.remove(notiId);
130
+ }
131
+ }
132
+ });
133
+ }
134
+ function handleInputKeyDown(e) {
135
+ if (e.key === "Enter") {
136
+ e.preventDefault();
137
+ handleConfirmAdd();
138
+ } else if (e.key === "Escape") {
139
+ e.preventDefault();
140
+ handleCancelAdd();
141
+ }
142
+ }
143
+ const containerClass = () => twMerge(baseClass, local.class);
144
+ const resolvedChipClass = () => twMerge(chipClass, local.size ? chipSizeClasses[local.size] : chipDefaultClass);
145
+ const resolvedIconBtnClass = () => twMerge(iconBtnClass, local.size ? iconBtnSizeClasses[local.size] : iconBtnDefaultClass);
146
+ const resolvedStarBtnClass = () => twMerge(starBtnClass, local.size ? starBtnSizeClasses[local.size] : starBtnDefaultClass);
147
+ const resolvedInputClass = () => twMerge(inputClass, local.size ? inputSizeClasses[local.size] : inputDefaultClass);
148
+ return /* @__PURE__ */ React.createElement("div", { class: containerClass(), style: local.style }, /* @__PURE__ */ React.createElement("button", { type: "button", class: resolvedStarBtnClass(), onClick: handleStartAdd, title: "\uD504\uB9AC\uC14B \uCD94\uAC00" }, /* @__PURE__ */ React.createElement(Icon, { icon: IconStar, size: iconSize })), /* @__PURE__ */ React.createElement(For, { each: presets() }, (preset, index) => /* @__PURE__ */ React.createElement("span", { class: resolvedChipClass() }, /* @__PURE__ */ React.createElement(
149
+ "button",
150
+ {
151
+ type: "button",
152
+ class: chipNameBtnClass,
153
+ onClick: () => handleRestore(preset),
154
+ title: `"${preset.name}" \uD504\uB9AC\uC14B \uC801\uC6A9`
155
+ },
156
+ preset.name
157
+ ), /* @__PURE__ */ React.createElement(
158
+ "button",
159
+ {
160
+ type: "button",
161
+ class: resolvedIconBtnClass(),
162
+ onClick: () => handleOverwrite(index()),
163
+ title: "\uD604\uC7AC \uC0C1\uD0DC\uB85C \uB36E\uC5B4\uC4F0\uAE30"
164
+ },
165
+ /* @__PURE__ */ React.createElement(Icon, { icon: IconDeviceFloppy, size: iconSize })
166
+ ), /* @__PURE__ */ React.createElement(
167
+ "button",
168
+ {
169
+ type: "button",
170
+ class: resolvedIconBtnClass(),
171
+ onClick: () => handleDelete(index()),
172
+ title: "\uD504\uB9AC\uC14B \uC0AD\uC81C"
173
+ },
174
+ /* @__PURE__ */ React.createElement(Icon, { icon: IconX, size: iconSize })
175
+ ))), /* @__PURE__ */ React.createElement(Show, { when: adding() }, /* @__PURE__ */ React.createElement(
176
+ "input",
177
+ {
178
+ ref: (el) => {
179
+ requestAnimationFrame(() => el.focus());
180
+ },
181
+ type: "text",
182
+ class: resolvedInputClass(),
183
+ placeholder: "\uC774\uB984...",
184
+ value: inputValue(),
185
+ onInput: (e) => setInputValue(e.currentTarget.value),
186
+ onKeyDown: handleInputKeyDown,
187
+ onBlur: () => inputValue().trim() ? handleConfirmAdd() : handleCancelAdd()
188
+ }
189
+ )));
190
+ }
191
+ const StatePreset = StatePresetInner;
192
+ export {
193
+ StatePreset
194
+ };
195
+ //# sourceMappingURL=StatePreset.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/form-control/state-preset/StatePreset.tsx"],
4
+ "sourcesContent": ["import { createSignal, For, Show, splitProps } from \"solid-js\";\nimport type { JSX } from \"solid-js\";\nimport { twMerge } from \"tailwind-merge\";\nimport clsx from \"clsx\";\nimport { IconDeviceFloppy, IconStar, IconX } from \"@tabler/icons-solidjs\";\nimport { objClone, objEqual } from \"@simplysm/core-common\";\nimport { usePersisted } from \"../../../hooks/usePersisted\";\nimport { useNotification } from \"../../feedback/notification/NotificationContext\";\nimport { Icon } from \"../../display/Icon\";\nimport { textPlaceholder } from \"../../../styles/tokens.styles\";\nimport type { ComponentSize } from \"../../../styles/tokens.styles\";\n\n// \u2500\u2500 Types \u2500\u2500\n\ninterface StatePresetItem<T> {\n name: string;\n state: T;\n}\n\ntype StatePresetSize = ComponentSize;\n\nexport interface StatePresetProps<T> {\n presetKey: string;\n value: T;\n onValueChange: (value: T) => void;\n size?: StatePresetSize;\n class?: string;\n style?: JSX.CSSProperties;\n}\n\n// \u2500\u2500 Style constants \u2500\u2500\n\nconst baseClass = clsx(\"inline-flex items-center gap-1.5\", \"flex-wrap\");\n\nconst chipClass = clsx(\n \"inline-flex items-center gap-1\",\n \"rounded-full\",\n \"bg-base-200 dark:bg-base-700\",\n \"text-base-800 dark:text-base-200\",\n \"cursor-default\",\n);\n\nconst chipDefaultClass = \"px-3 py-1\";\n\nconst chipSizeClasses: Record<StatePresetSize, string> = {\n sm: \"px-2 py-0.5 text-sm\",\n lg: \"px-4 py-2\",\n};\n\nconst chipNameBtnClass = clsx(\"cursor-pointer\", \"hover:underline\", \"focus:outline-none\");\n\nconst iconBtnClass = clsx(\n \"inline-flex items-center justify-center\",\n \"rounded-full\",\n \"cursor-pointer\",\n \"transition-colors\",\n \"focus:outline-none\",\n \"hover:bg-base-300 dark:hover:bg-base-600\",\n);\n\nconst iconBtnDefaultClass = \"p-0.5\";\n\nconst iconBtnSizeClasses: Record<StatePresetSize, string> = {\n sm: \"p-px\",\n lg: \"p-1\",\n};\n\nconst starBtnClass = clsx(\n \"inline-flex items-center justify-center\",\n \"rounded-full\",\n \"cursor-pointer\",\n \"transition-colors\",\n \"focus:outline-none\",\n \"text-warning-500\",\n \"hover:bg-warning-100 dark:hover:bg-warning-900/40\",\n);\n\nconst starBtnDefaultClass = \"p-1\";\n\nconst starBtnSizeClasses: Record<StatePresetSize, string> = {\n sm: \"p-0.5\",\n lg: \"p-1.5\",\n};\n\nconst inputClass = clsx(\n \"rounded-full\",\n \"bg-base-200 dark:bg-base-700\",\n \"text-base-800 dark:text-base-200\",\n \"border border-transparent\",\n \"focus:ring-1 focus:ring-primary-400\",\n \"focus:outline-none\",\n textPlaceholder,\n);\n\nconst inputDefaultClass = \"px-3 py-1 w-24\";\n\nconst inputSizeClasses: Record<StatePresetSize, string> = {\n sm: \"px-2 py-0.5 w-20 text-sm\",\n lg: \"px-4 py-2 w-32\",\n};\n\nconst iconSize = \"0.85em\";\n\n// \u2500\u2500 Component \u2500\u2500\n\nfunction StatePresetInner<T>(props: StatePresetProps<T>): JSX.Element {\n const [local] = splitProps(props, [\"presetKey\", \"value\", \"onValueChange\", \"size\", \"class\", \"style\"]);\n\n const notification = useNotification();\n\n // presetKey\uB294 \uB9C8\uC6B4\uD2B8 \uC2DC \uD55C \uBC88\uB9CC \uC124\uC815\uB418\uB294 \uC2DD\uBCC4\uC790\uC774\uBBC0\uB85C \uC989\uC2DC \uD3C9\uAC00\uD558\uC5EC \uCEA1\uCC98\n /* eslint-disable solid/reactivity */\n const [presets, setPresets] = usePersisted<StatePresetItem<T>[]>(`state-preset.${local.presetKey}`, []);\n /* eslint-enable solid/reactivity */\n const [adding, setAdding] = createSignal(false);\n const [inputValue, setInputValue] = createSignal(\"\");\n\n // \u2500\u2500 Handlers \u2500\u2500\n\n function handleStartAdd(): void {\n setAdding(true);\n setInputValue(\"\");\n }\n\n function handleCancelAdd(): void {\n setAdding(false);\n setInputValue(\"\");\n }\n\n function handleConfirmAdd(): void {\n const name = inputValue().trim();\n if (!name) {\n handleCancelAdd();\n return;\n }\n\n if (presets().some((p) => p.name === name)) {\n notification.warning(\"\uC774\uB984 \uC911\uBCF5\", \"\uAC19\uC740 \uC774\uB984\uC758 \uD504\uB9AC\uC14B\uC774 \uC774\uBBF8 \uC874\uC7AC\uD569\uB2C8\uB2E4.\");\n return;\n }\n\n const newPreset: StatePresetItem<T> = {\n name,\n state: objClone(local.value),\n };\n setPresets([...presets(), newPreset]);\n notification.info(\"\uD504\uB9AC\uC14B \uC800\uC7A5\", `\"${name}\" \uD504\uB9AC\uC14B\uC774 \uC800\uC7A5\uB418\uC5C8\uC2B5\uB2C8\uB2E4.`);\n setAdding(false);\n setInputValue(\"\");\n }\n\n function handleRestore(preset: StatePresetItem<T>): void {\n if (!objEqual(local.value, preset.state)) {\n local.onValueChange(objClone(preset.state));\n }\n }\n\n function handleOverwrite(index: number): void {\n const snapshot = [...presets()];\n const presetName = snapshot[index].name;\n\n const updated = snapshot.map((p, i) => (i === index ? { ...p, state: objClone(local.value) } : p));\n setPresets(updated);\n\n const notiId = notification.info(\"\uD504\uB9AC\uC14B \uB36E\uC5B4\uC4F0\uAE30\", `\"${presetName}\" \uD504\uB9AC\uC14B\uC774 \uD604\uC7AC \uC0C1\uD0DC\uB85C \uC5C5\uB370\uC774\uD2B8\uB418\uC5C8\uC2B5\uB2C8\uB2E4.`, {\n action: {\n label: \"\uC2E4\uD589 \uCDE8\uC18C\",\n onClick: () => {\n setPresets(snapshot);\n notification.remove(notiId);\n },\n },\n });\n }\n\n function handleDelete(index: number): void {\n const snapshot = [...presets()];\n const presetName = snapshot[index].name;\n\n const updated = snapshot.filter((_, i) => i !== index);\n setPresets(updated);\n\n const notiId = notification.info(\"\uD504\uB9AC\uC14B \uC0AD\uC81C\", `\"${presetName}\" \uD504\uB9AC\uC14B\uC774 \uC0AD\uC81C\uB418\uC5C8\uC2B5\uB2C8\uB2E4.`, {\n action: {\n label: \"\uC2E4\uD589 \uCDE8\uC18C\",\n onClick: () => {\n setPresets(snapshot);\n notification.remove(notiId);\n },\n },\n });\n }\n\n function handleInputKeyDown(e: KeyboardEvent): void {\n if (e.key === \"Enter\") {\n e.preventDefault();\n handleConfirmAdd();\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n handleCancelAdd();\n }\n }\n\n // \u2500\u2500 Render \u2500\u2500\n\n const containerClass = () => twMerge(baseClass, local.class);\n\n const resolvedChipClass = () => twMerge(chipClass, local.size ? chipSizeClasses[local.size] : chipDefaultClass);\n\n const resolvedIconBtnClass = () =>\n twMerge(iconBtnClass, local.size ? iconBtnSizeClasses[local.size] : iconBtnDefaultClass);\n\n const resolvedStarBtnClass = () =>\n twMerge(starBtnClass, local.size ? starBtnSizeClasses[local.size] : starBtnDefaultClass);\n\n const resolvedInputClass = () => twMerge(inputClass, local.size ? inputSizeClasses[local.size] : inputDefaultClass);\n\n return (\n <div class={containerClass()} style={local.style}>\n {/* Star button - add preset */}\n <button type=\"button\" class={resolvedStarBtnClass()} onClick={handleStartAdd} title=\"\uD504\uB9AC\uC14B \uCD94\uAC00\">\n <Icon icon={IconStar} size={iconSize} />\n </button>\n\n {/* Preset chips */}\n <For each={presets()}>\n {(preset, index) => (\n <span class={resolvedChipClass()}>\n <button\n type=\"button\"\n class={chipNameBtnClass}\n onClick={() => handleRestore(preset)}\n title={`\"${preset.name}\" \uD504\uB9AC\uC14B \uC801\uC6A9`}\n >\n {preset.name}\n </button>\n <button\n type=\"button\"\n class={resolvedIconBtnClass()}\n onClick={() => handleOverwrite(index())}\n title=\"\uD604\uC7AC \uC0C1\uD0DC\uB85C \uB36E\uC5B4\uC4F0\uAE30\"\n >\n <Icon icon={IconDeviceFloppy} size={iconSize} />\n </button>\n <button\n type=\"button\"\n class={resolvedIconBtnClass()}\n onClick={() => handleDelete(index())}\n title=\"\uD504\uB9AC\uC14B \uC0AD\uC81C\"\n >\n <Icon icon={IconX} size={iconSize} />\n </button>\n </span>\n )}\n </For>\n\n {/* Inline input for naming a new preset */}\n <Show when={adding()}>\n <input\n ref={(el) => {\n // Autofocus when input appears\n requestAnimationFrame(() => el.focus());\n }}\n type=\"text\"\n class={resolvedInputClass()}\n placeholder=\"\uC774\uB984...\"\n value={inputValue()}\n onInput={(e) => setInputValue(e.currentTarget.value)}\n onKeyDown={handleInputKeyDown}\n onBlur={() => (inputValue().trim() ? handleConfirmAdd() : handleCancelAdd())}\n />\n </Show>\n </div>\n );\n}\n\nexport const StatePreset = StatePresetInner as <T>(props: StatePresetProps<T>) => JSX.Element;\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,34 @@
1
+ import { Show, splitProps, createContext, useContext } from "solid-js";
2
+ import clsx from "clsx";
3
+ import { twMerge } from "tailwind-merge";
4
+ const FormGroupContext = createContext({ inline: false });
5
+ const baseClass = clsx("inline-flex flex-col gap-2");
6
+ const inlineClass = clsx("inline-flex flex-row flex-wrap items-center gap-2");
7
+ const itemInlineClass = clsx("flex flex-row items-center");
8
+ const FormGroupItem = (props) => {
9
+ const [local, rest] = splitProps(props, ["children", "class", "label"]);
10
+ const ctx = useContext(FormGroupContext);
11
+ const getClassName = () => twMerge(ctx.inline ? itemInlineClass : void 0, local.class);
12
+ return /* @__PURE__ */ React.createElement("div", { class: getClassName(), "data-form-group-item": true, ...rest }, /* @__PURE__ */ React.createElement(Show, { when: local.label }, /* @__PURE__ */ React.createElement("label", { class: ctx.inline ? clsx("whitespace-nowrap font-bold", "pr-2") : "mb-1 block font-bold" }, local.label)), local.children);
13
+ };
14
+ const FormGroupBase = (props) => {
15
+ const [local, rest] = splitProps(props, ["children", "class", "inline"]);
16
+ const getClassName = () => twMerge(local.inline ? inlineClass : baseClass, local.class);
17
+ return /* @__PURE__ */ React.createElement(
18
+ FormGroupContext.Provider,
19
+ {
20
+ value: {
21
+ get inline() {
22
+ return local.inline ?? false;
23
+ }
24
+ }
25
+ },
26
+ /* @__PURE__ */ React.createElement("div", { "data-form-group": true, class: getClassName(), ...rest }, local.children)
27
+ );
28
+ };
29
+ const FormGroup = FormGroupBase;
30
+ FormGroup.Item = FormGroupItem;
31
+ export {
32
+ FormGroup
33
+ };
34
+ //# sourceMappingURL=FormGroup.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/layout/FormGroup.tsx"],
4
+ "sourcesContent": ["import { type JSX, type ParentComponent, Show, splitProps, createContext, useContext } from \"solid-js\";\nimport clsx from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport interface FormGroupProps extends JSX.HTMLAttributes<HTMLDivElement> {\n inline?: boolean;\n}\n\nexport interface FormGroupItemProps extends JSX.HTMLAttributes<HTMLDivElement> {\n label?: JSX.Element;\n}\n\nconst FormGroupContext = createContext<{ inline: boolean }>({ inline: false });\n\nconst baseClass = clsx(\"inline-flex flex-col gap-2\");\nconst inlineClass = clsx(\"inline-flex flex-row flex-wrap items-center gap-2\");\n\nconst itemInlineClass = clsx(\"flex flex-row items-center\");\n\nconst FormGroupItem: ParentComponent<FormGroupItemProps> = (props) => {\n const [local, rest] = splitProps(props, [\"children\", \"class\", \"label\"]);\n const ctx = useContext(FormGroupContext);\n\n const getClassName = () => twMerge(ctx.inline ? itemInlineClass : undefined, local.class);\n\n return (\n <div class={getClassName()} data-form-group-item {...rest}>\n <Show when={local.label}>\n <label class={ctx.inline ? clsx(\"whitespace-nowrap font-bold\", \"pr-2\") : \"mb-1 block font-bold\"}>\n {local.label}\n </label>\n </Show>\n {local.children}\n </div>\n );\n};\n\ninterface FormGroupComponent extends ParentComponent<FormGroupProps> {\n Item: typeof FormGroupItem;\n}\n\nconst FormGroupBase: ParentComponent<FormGroupProps> = (props) => {\n const [local, rest] = splitProps(props, [\"children\", \"class\", \"inline\"]);\n\n const getClassName = () => twMerge(local.inline ? inlineClass : baseClass, local.class);\n\n return (\n <FormGroupContext.Provider\n value={{\n get inline() {\n return local.inline ?? false;\n },\n }}\n >\n <div data-form-group class={getClassName()} {...rest}>\n {local.children}\n </div>\n </FormGroupContext.Provider>\n );\n};\n\nexport const FormGroup = FormGroupBase as FormGroupComponent;\nFormGroup.Item = FormGroupItem;\n"],
5
+ "mappings": "AAAA,SAAyC,MAAM,YAAY,eAAe,kBAAkB;AAC5F,OAAO,UAAU;AACjB,SAAS,eAAe;AAUxB,MAAM,mBAAmB,cAAmC,EAAE,QAAQ,MAAM,CAAC;AAE7E,MAAM,YAAY,KAAK,4BAA4B;AACnD,MAAM,cAAc,KAAK,mDAAmD;AAE5E,MAAM,kBAAkB,KAAK,4BAA4B;AAEzD,MAAM,gBAAqD,CAAC,UAAU;AACpE,QAAM,CAAC,OAAO,IAAI,IAAI,WAAW,OAAO,CAAC,YAAY,SAAS,OAAO,CAAC;AACtE,QAAM,MAAM,WAAW,gBAAgB;AAEvC,QAAM,eAAe,MAAM,QAAQ,IAAI,SAAS,kBAAkB,QAAW,MAAM,KAAK;AAExF,SACE,oCAAC,SAAI,OAAO,aAAa,GAAG,wBAAoB,MAAE,GAAG,QACnD,oCAAC,QAAK,MAAM,MAAM,SAChB,oCAAC,WAAM,OAAO,IAAI,SAAS,KAAK,+BAA+B,MAAM,IAAI,0BACtE,MAAM,KACT,CACF,GACC,MAAM,QACT;AAEJ;AAMA,MAAM,gBAAiD,CAAC,UAAU;AAChE,QAAM,CAAC,OAAO,IAAI,IAAI,WAAW,OAAO,CAAC,YAAY,SAAS,QAAQ,CAAC;AAEvE,QAAM,eAAe,MAAM,QAAQ,MAAM,SAAS,cAAc,WAAW,MAAM,KAAK;AAEtF,SACE;AAAA,IAAC,iBAAiB;AAAA,IAAjB;AAAA,MACC,OAAO;AAAA,QACL,IAAI,SAAS;AACX,iBAAO,MAAM,UAAU;AAAA,QACzB;AAAA,MACF;AAAA;AAAA,IAEA,oCAAC,SAAI,mBAAe,MAAC,OAAO,aAAa,GAAI,GAAG,QAC7C,MAAM,QACT;AAAA,EACF;AAEJ;AAEO,MAAM,YAAY;AACzB,UAAU,OAAO;",
6
+ "names": []
7
+ }
@@ -0,0 +1,24 @@
1
+ import { splitProps } from "solid-js";
2
+ import clsx from "clsx";
3
+ import { twMerge } from "tailwind-merge";
4
+ const baseClass = clsx(
5
+ "border-separate border-spacing-0 border-0",
6
+ // 모든 셀: 수직 중앙, 오른쪽/아래 패딩
7
+ "[&_td]:align-middle [&_th]:align-middle",
8
+ "[&_td]:pr-1.5 [&_th]:pr-1.5",
9
+ "[&_td]:pb-1 [&_th]:pb-1",
10
+ // 행의 마지막 셀: 오른쪽 패딩 제거
11
+ "[&_tr>*:last-child]:pr-0",
12
+ // 마지막 행 셀: 아래 패딩 제거
13
+ "[&_tr:last-child>*]:pb-0",
14
+ // th: 오른쪽 정렬, 콘텐츠 너비, 줄바꿈 방지
15
+ "[&_th]:w-0 [&_th]:whitespace-nowrap [&_th]:pl-1 [&_th]:text-right"
16
+ );
17
+ const FormTable = (props) => {
18
+ const [local, rest] = splitProps(props, ["children", "class"]);
19
+ return /* @__PURE__ */ React.createElement("table", { "data-form-table": true, class: twMerge(baseClass, local.class), ...rest }, local.children);
20
+ };
21
+ export {
22
+ FormTable
23
+ };
24
+ //# sourceMappingURL=FormTable.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/layout/FormTable.tsx"],
4
+ "sourcesContent": ["import { type JSX, type ParentComponent, splitProps } from \"solid-js\";\nimport clsx from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport interface FormTableProps extends JSX.HTMLAttributes<HTMLTableElement> {}\n\nconst baseClass = clsx(\n \"border-separate border-spacing-0 border-0\",\n // \uBAA8\uB4E0 \uC140: \uC218\uC9C1 \uC911\uC559, \uC624\uB978\uCABD/\uC544\uB798 \uD328\uB529\n \"[&_td]:align-middle [&_th]:align-middle\",\n \"[&_td]:pr-1.5 [&_th]:pr-1.5\",\n \"[&_td]:pb-1 [&_th]:pb-1\",\n // \uD589\uC758 \uB9C8\uC9C0\uB9C9 \uC140: \uC624\uB978\uCABD \uD328\uB529 \uC81C\uAC70\n \"[&_tr>*:last-child]:pr-0\",\n // \uB9C8\uC9C0\uB9C9 \uD589 \uC140: \uC544\uB798 \uD328\uB529 \uC81C\uAC70\n \"[&_tr:last-child>*]:pb-0\",\n // th: \uC624\uB978\uCABD \uC815\uB82C, \uCF58\uD150\uCE20 \uB108\uBE44, \uC904\uBC14\uAFC8 \uBC29\uC9C0\n \"[&_th]:w-0 [&_th]:whitespace-nowrap [&_th]:pl-1 [&_th]:text-right\",\n);\n\nexport const FormTable: ParentComponent<FormTableProps> = (props) => {\n const [local, rest] = splitProps(props, [\"children\", \"class\"]);\n\n return (\n <table data-form-table class={twMerge(baseClass, local.class)} {...rest}>\n {local.children}\n </table>\n );\n};\n"],
5
+ "mappings": "AAAA,SAAyC,kBAAkB;AAC3D,OAAO,UAAU;AACjB,SAAS,eAAe;AAIxB,MAAM,YAAY;AAAA,EAChB;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AACF;AAEO,MAAM,YAA6C,CAAC,UAAU;AACnE,QAAM,CAAC,OAAO,IAAI,IAAI,WAAW,OAAO,CAAC,YAAY,OAAO,CAAC;AAE7D,SACE,oCAAC,WAAM,mBAAe,MAAC,OAAO,QAAQ,WAAW,MAAM,KAAK,GAAI,GAAG,QAChE,MAAM,QACT;AAEJ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,63 @@
1
+ import { splitProps, createMemo } from "solid-js";
2
+ import { createMediaQuery } from "@solid-primitives/media";
3
+ import clsx from "clsx";
4
+ import { twMerge } from "tailwind-merge";
5
+ import { useSidebarContext, SM_MEDIA_QUERY } from "./SidebarContext";
6
+ import { mergeStyles } from "../../../helpers/mergeStyles";
7
+ import { SidebarContainer } from "./SidebarContainer";
8
+ import { SidebarMenu } from "./SidebarMenu";
9
+ import { SidebarUser } from "./SidebarUser";
10
+ const baseClass = clsx(
11
+ "absolute",
12
+ "top-0",
13
+ "left-0",
14
+ "bottom-0",
15
+ "w-64",
16
+ "z-sidebar",
17
+ "flex",
18
+ "flex-col",
19
+ "bg-base-100",
20
+ "dark:bg-base-900",
21
+ "border-r",
22
+ "border-base-200",
23
+ "dark:border-base-700",
24
+ "transition-transform",
25
+ "duration-300",
26
+ "sm:duration-100"
27
+ );
28
+ const mobileOpenClass = clsx("shadow-xl");
29
+ const SidebarBase = (props) => {
30
+ const [local, rest] = splitProps(props, ["children", "class", "style"]);
31
+ const { toggle } = useSidebarContext();
32
+ const isDesktop = createMediaQuery(SM_MEDIA_QUERY);
33
+ const isOpen = createMemo(() => {
34
+ if (isDesktop()) {
35
+ return !toggle();
36
+ }
37
+ return toggle();
38
+ });
39
+ const getTransform = () => {
40
+ return isOpen() ? "translateX(0)" : "translateX(-100%)";
41
+ };
42
+ const getClassName = () => twMerge(baseClass, !isDesktop() && isOpen() && mobileOpenClass, local.class);
43
+ return /* @__PURE__ */ React.createElement(
44
+ "aside",
45
+ {
46
+ ...rest,
47
+ "data-sidebar": true,
48
+ class: getClassName(),
49
+ style: mergeStyles(local.style, { transform: getTransform() }),
50
+ "aria-hidden": !isOpen(),
51
+ inert: !isOpen() || void 0
52
+ },
53
+ local.children
54
+ );
55
+ };
56
+ const Sidebar = SidebarBase;
57
+ Sidebar.Container = SidebarContainer;
58
+ Sidebar.Menu = SidebarMenu;
59
+ Sidebar.User = SidebarUser;
60
+ export {
61
+ Sidebar
62
+ };
63
+ //# sourceMappingURL=Sidebar.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/layout/sidebar/Sidebar.tsx"],
4
+ "sourcesContent": ["import { type JSX, type ParentComponent, splitProps, createMemo } from \"solid-js\";\nimport { createMediaQuery } from \"@solid-primitives/media\";\nimport clsx from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nimport { useSidebarContext, SM_MEDIA_QUERY } from \"./SidebarContext\";\nimport { mergeStyles } from \"../../../helpers/mergeStyles\";\nimport { SidebarContainer } from \"./SidebarContainer\";\nimport { SidebarMenu } from \"./SidebarMenu\";\nimport { SidebarUser } from \"./SidebarUser\";\n\nexport type { SidebarContainerProps } from \"./SidebarContainer\";\nexport type { SidebarMenuItem, SidebarMenuProps } from \"./SidebarMenu\";\nexport type { SidebarUserMenu, SidebarUserProps } from \"./SidebarUser\";\n\nconst baseClass = clsx(\n \"absolute\",\n \"top-0\",\n \"left-0\",\n \"bottom-0\",\n \"w-64\",\n \"z-sidebar\",\n \"flex\",\n \"flex-col\",\n \"bg-base-100\",\n \"dark:bg-base-900\",\n \"border-r\",\n \"border-base-200\",\n \"dark:border-base-700\",\n \"transition-transform\",\n \"duration-300\",\n \"sm:duration-100\",\n);\n\nconst mobileOpenClass = clsx(\"shadow-xl\");\n\nexport interface SidebarProps extends JSX.HTMLAttributes<HTMLElement> {\n children: JSX.Element;\n}\n\n/**\n * \uC0AC\uC774\uB4DC\uBC14 \uBCF8\uCCB4 \uCEF4\uD3EC\uB10C\uD2B8\n *\n * @remarks\n * - SidebarContainer \uB0B4\uBD80\uC5D0\uC11C \uC0AC\uC6A9\uD574\uC57C \uD568 (`position: absolute`\uB85C \uCEE8\uD14C\uC774\uB108\uC5D0 \uC885\uC18D)\n * - Context\uC5D0\uC11C toggle \uC0C1\uD0DC\uB97C \uC77D\uC5B4 \uC5F4\uB9BC/\uB2EB\uD798 \uC560\uB2C8\uBA54\uC774\uC158 \uC801\uC6A9\n * - \uD1A0\uAE00 \uBC84\uD2BC \uBBF8\uD3EC\uD568 - useSidebarContext().setToggle\uB85C \uC678\uBD80\uC5D0\uC11C \uC81C\uC5B4\n *\n * @example\n * ```tsx\n * <Sidebar>\n * <Sidebar.User menus={userMenus}>\n * <span>\uC0AC\uC6A9\uC790</span>\n * </Sidebar.User>\n * <Sidebar.Menu menus={menuItems} />\n * </Sidebar>\n * ```\n */\ninterface SidebarComponent extends ParentComponent<SidebarProps> {\n Container: typeof SidebarContainer;\n Menu: typeof SidebarMenu;\n User: typeof SidebarUser;\n}\n\nconst SidebarBase: ParentComponent<SidebarProps> = (props) => {\n const [local, rest] = splitProps(props, [\"children\", \"class\", \"style\"]);\n\n const { toggle } = useSidebarContext();\n\n // Tailwind sm: breakpoint \uAC10\uC9C0\n const isDesktop = createMediaQuery(SM_MEDIA_QUERY);\n\n // \uC0AC\uC774\uB4DC\uBC14 \uC5F4\uB9BC \uC5EC\uBD80 \uACC4\uC0B0\n const isOpen = createMemo(() => {\n if (isDesktop()) {\n return !toggle();\n }\n return toggle();\n });\n\n // transform \uACC4\uC0B0: \uB2EB\uD798 \uC2DC \uC67C\uCABD\uC73C\uB85C \uC228\uAE40\n const getTransform = () => {\n return isOpen() ? \"translateX(0)\" : \"translateX(-100%)\";\n };\n\n const getClassName = () => twMerge(baseClass, !isDesktop() && isOpen() && mobileOpenClass, local.class);\n\n return (\n <aside\n {...rest}\n data-sidebar\n class={getClassName()}\n style={mergeStyles(local.style, { transform: getTransform() })}\n aria-hidden={!isOpen()}\n inert={!isOpen() || undefined}\n >\n {local.children}\n </aside>\n );\n};\n\nexport const Sidebar = SidebarBase as SidebarComponent;\nSidebar.Container = SidebarContainer;\nSidebar.Menu = SidebarMenu;\nSidebar.User = SidebarUser;\n"],
5
+ "mappings": "AAAA,SAAyC,YAAY,kBAAkB;AACvE,SAAS,wBAAwB;AACjC,OAAO,UAAU;AACjB,SAAS,eAAe;AACxB,SAAS,mBAAmB,sBAAsB;AAClD,SAAS,mBAAmB;AAC5B,SAAS,wBAAwB;AACjC,SAAS,mBAAmB;AAC5B,SAAS,mBAAmB;AAM5B,MAAM,YAAY;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,MAAM,kBAAkB,KAAK,WAAW;AA8BxC,MAAM,cAA6C,CAAC,UAAU;AAC5D,QAAM,CAAC,OAAO,IAAI,IAAI,WAAW,OAAO,CAAC,YAAY,SAAS,OAAO,CAAC;AAEtE,QAAM,EAAE,OAAO,IAAI,kBAAkB;AAGrC,QAAM,YAAY,iBAAiB,cAAc;AAGjD,QAAM,SAAS,WAAW,MAAM;AAC9B,QAAI,UAAU,GAAG;AACf,aAAO,CAAC,OAAO;AAAA,IACjB;AACA,WAAO,OAAO;AAAA,EAChB,CAAC;AAGD,QAAM,eAAe,MAAM;AACzB,WAAO,OAAO,IAAI,kBAAkB;AAAA,EACtC;AAEA,QAAM,eAAe,MAAM,QAAQ,WAAW,CAAC,UAAU,KAAK,OAAO,KAAK,iBAAiB,MAAM,KAAK;AAEtG,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,gBAAY;AAAA,MACZ,OAAO,aAAa;AAAA,MACpB,OAAO,YAAY,MAAM,OAAO,EAAE,WAAW,aAAa,EAAE,CAAC;AAAA,MAC7D,eAAa,CAAC,OAAO;AAAA,MACrB,OAAO,CAAC,OAAO,KAAK;AAAA;AAAA,IAEnB,MAAM;AAAA,EACT;AAEJ;AAEO,MAAM,UAAU;AACvB,QAAQ,YAAY;AACpB,QAAQ,OAAO;AACf,QAAQ,OAAO;",
6
+ "names": []
7
+ }
@@ -0,0 +1,70 @@
1
+ import { Show, splitProps, createMemo } from "solid-js";
2
+ import { useBeforeLeave } from "@solidjs/router";
3
+ import { createMediaQuery } from "@solid-primitives/media";
4
+ import clsx from "clsx";
5
+ import { twMerge } from "tailwind-merge";
6
+ import { SidebarContext, SM_MEDIA_QUERY } from "./SidebarContext";
7
+ import { usePersisted } from "../../../hooks/usePersisted";
8
+ import { mergeStyles } from "../../../helpers/mergeStyles";
9
+ const backdropClass = clsx(
10
+ "absolute",
11
+ "top-0",
12
+ "left-0",
13
+ "right-0",
14
+ "bottom-0",
15
+ "z-sidebar-backdrop",
16
+ "bg-black/50",
17
+ "sm:hidden"
18
+ );
19
+ const containerClass = clsx("relative h-full transition-[padding-left] duration-100");
20
+ const SidebarContainer = (props) => {
21
+ const [local, rest] = splitProps(props, ["children", "class", "style"]);
22
+ const [toggle, setToggle] = usePersisted("sidebar.toggle", false);
23
+ const isDesktop = createMediaQuery(SM_MEDIA_QUERY);
24
+ const isOpen = createMemo(() => {
25
+ if (isDesktop()) {
26
+ return !toggle();
27
+ }
28
+ return toggle();
29
+ });
30
+ const handleBackdropClick = () => {
31
+ setToggle(false);
32
+ };
33
+ useBeforeLeave(() => {
34
+ if (!isDesktop() && toggle()) {
35
+ setToggle(false);
36
+ }
37
+ });
38
+ const getPaddingLeft = () => {
39
+ if (isDesktop() && isOpen()) {
40
+ return "16rem";
41
+ }
42
+ return void 0;
43
+ };
44
+ const getClassName = () => twMerge(containerClass, local.class);
45
+ return /* @__PURE__ */ React.createElement(SidebarContext.Provider, { value: { toggle, setToggle } }, /* @__PURE__ */ React.createElement(
46
+ "div",
47
+ {
48
+ ...rest,
49
+ "data-sidebar-container": true,
50
+ class: getClassName(),
51
+ style: mergeStyles(local.style, { "padding-left": getPaddingLeft() })
52
+ },
53
+ local.children,
54
+ /* @__PURE__ */ React.createElement(Show, { when: !isDesktop() && isOpen() }, /* @__PURE__ */ React.createElement(
55
+ "div",
56
+ {
57
+ class: backdropClass,
58
+ onClick: handleBackdropClick,
59
+ onKeyDown: (e) => e.key === "Escape" && handleBackdropClick(),
60
+ role: "button",
61
+ "aria-label": "\uC0AC\uC774\uB4DC\uBC14 \uB2EB\uAE30",
62
+ tabIndex: 0
63
+ }
64
+ ))
65
+ ));
66
+ };
67
+ export {
68
+ SidebarContainer
69
+ };
70
+ //# sourceMappingURL=SidebarContainer.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/layout/sidebar/SidebarContainer.tsx"],
4
+ "sourcesContent": ["import { type JSX, type ParentComponent, Show, splitProps, createMemo } from \"solid-js\";\nimport { useBeforeLeave } from \"@solidjs/router\";\nimport { createMediaQuery } from \"@solid-primitives/media\";\nimport clsx from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nimport { SidebarContext, SM_MEDIA_QUERY } from \"./SidebarContext\";\nimport { usePersisted } from \"../../../hooks/usePersisted\";\nimport { mergeStyles } from \"../../../helpers/mergeStyles\";\n\nconst backdropClass = clsx(\n \"absolute\",\n \"top-0\",\n \"left-0\",\n \"right-0\",\n \"bottom-0\",\n \"z-sidebar-backdrop\",\n \"bg-black/50\",\n \"sm:hidden\",\n);\n\nconst containerClass = clsx(\"relative h-full transition-[padding-left] duration-100\");\n\nexport interface SidebarContainerProps extends JSX.HTMLAttributes<HTMLDivElement> {\n children: JSX.Element;\n}\n\n/**\n * \uC0AC\uC774\uB4DC\uBC14 \uCEE8\uD14C\uC774\uB108 \uCEF4\uD3EC\uB10C\uD2B8\n *\n * @remarks\n * - `position: relative`\uB85C Sidebar\uB97C \uD3EC\uD568\uD558\uB294 \uCEE8\uD14C\uC774\uB108 \uC5ED\uD560\n * - \uBD80\uBAA8 \uC694\uC18C\uC5D0 \uB192\uC774\uAC00 \uC9C0\uC815\uB418\uC5B4\uC57C \uD568 (`h-full` \uC0AC\uC6A9)\n * - \uCF58\uD150\uCE20 \uC601\uC5ED\uC758 `overflow-auto`\uB294 \uC0AC\uC6A9\uC790\uAC00 \uC9C1\uC811 \uC801\uC6A9\uD574\uC57C \uD568\n * - SidebarContext.Provider\uB85C toggle \uC0C1\uD0DC \uACF5\uC720\n * - usePersisted\uB85C toggle \uC0C1\uD0DC localStorage \uC800\uC7A5 (\uD0A4: sidebar.toggle)\n * - \uB370\uC2A4\uD06C\uD0D1(640px+)\uC5D0\uC11C padding-left + transition\uC73C\uB85C \uCF58\uD150\uCE20 \uD655\uC7A5/\uCD95\uC18C\n * - \uBAA8\uBC14\uC77C(640px-)\uC5D0\uC11C backdrop \uB80C\uB354\uB9C1 \uBC0F \uD074\uB9AD \uC2DC \uB2EB\uAE30\n * - \uD398\uC774\uC9C0 \uC774\uB3D9 \uC2DC \uBAA8\uBC14\uC77C\uC5D0\uC11C \uC790\uB3D9 \uB2EB\uAE30\n *\n * @example\n * ```tsx\n * <div class=\"h-screen\">\n * <SidebarContainer>\n * <Sidebar>\n * <SidebarUser menus={userMenus}>\n * <span>\uC0AC\uC6A9\uC790</span>\n * </SidebarUser>\n * <SidebarMenu menus={menuItems} />\n * </Sidebar>\n * <main class=\"h-full overflow-auto\">\uCF58\uD150\uCE20</main>\n * </SidebarContainer>\n * </div>\n * ```\n */\nexport const SidebarContainer: ParentComponent<SidebarContainerProps> = (props) => {\n const [local, rest] = splitProps(props, [\"children\", \"class\", \"style\"]);\n\n const [toggle, setToggle] = usePersisted(\"sidebar.toggle\", false);\n\n // Tailwind sm: breakpoint \uAC10\uC9C0\n const isDesktop = createMediaQuery(SM_MEDIA_QUERY);\n\n // \uC0AC\uC774\uB4DC\uBC14 \uC5F4\uB9BC \uC5EC\uBD80 \uACC4\uC0B0\n const isOpen = createMemo(() => {\n if (isDesktop()) {\n return !toggle();\n }\n return toggle();\n });\n\n // backdrop \uD074\uB9AD \uC2DC \uB2EB\uAE30\n const handleBackdropClick = () => {\n setToggle(false);\n };\n\n // \uBAA8\uBC14\uC77C\uC5D0\uC11C \uD398\uC774\uC9C0 \uC774\uB3D9 \uC2DC \uC790\uB3D9 \uB2EB\uAE30\n useBeforeLeave(() => {\n if (!isDesktop() && toggle()) {\n setToggle(false);\n }\n });\n\n // \uB370\uC2A4\uD06C\uD0D1\uC5D0\uC11C \uC0AC\uC774\uB4DC\uBC14 \uC5F4\uB9BC \uC2DC padding-left \uC801\uC6A9 (16rem = w-64)\n const getPaddingLeft = () => {\n if (isDesktop() && isOpen()) {\n return \"16rem\";\n }\n return undefined;\n };\n\n const getClassName = () => twMerge(containerClass, local.class);\n\n return (\n <SidebarContext.Provider value={{ toggle, setToggle }}>\n <div\n {...rest}\n data-sidebar-container\n class={getClassName()}\n style={mergeStyles(local.style, { \"padding-left\": getPaddingLeft() })}\n >\n {local.children}\n <Show when={!isDesktop() && isOpen()}>\n <div\n class={backdropClass}\n onClick={handleBackdropClick}\n onKeyDown={(e) => e.key === \"Escape\" && handleBackdropClick()}\n role=\"button\"\n aria-label=\"\uC0AC\uC774\uB4DC\uBC14 \uB2EB\uAE30\"\n tabIndex={0}\n />\n </Show>\n </div>\n </SidebarContext.Provider>\n );\n};\n"],
5
+ "mappings": "AAAA,SAAyC,MAAM,YAAY,kBAAkB;AAC7E,SAAS,sBAAsB;AAC/B,SAAS,wBAAwB;AACjC,OAAO,UAAU;AACjB,SAAS,eAAe;AACxB,SAAS,gBAAgB,sBAAsB;AAC/C,SAAS,oBAAoB;AAC7B,SAAS,mBAAmB;AAE5B,MAAM,gBAAgB;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,MAAM,iBAAiB,KAAK,wDAAwD;AAkC7E,MAAM,mBAA2D,CAAC,UAAU;AACjF,QAAM,CAAC,OAAO,IAAI,IAAI,WAAW,OAAO,CAAC,YAAY,SAAS,OAAO,CAAC;AAEtE,QAAM,CAAC,QAAQ,SAAS,IAAI,aAAa,kBAAkB,KAAK;AAGhE,QAAM,YAAY,iBAAiB,cAAc;AAGjD,QAAM,SAAS,WAAW,MAAM;AAC9B,QAAI,UAAU,GAAG;AACf,aAAO,CAAC,OAAO;AAAA,IACjB;AACA,WAAO,OAAO;AAAA,EAChB,CAAC;AAGD,QAAM,sBAAsB,MAAM;AAChC,cAAU,KAAK;AAAA,EACjB;AAGA,iBAAe,MAAM;AACnB,QAAI,CAAC,UAAU,KAAK,OAAO,GAAG;AAC5B,gBAAU,KAAK;AAAA,IACjB;AAAA,EACF,CAAC;AAGD,QAAM,iBAAiB,MAAM;AAC3B,QAAI,UAAU,KAAK,OAAO,GAAG;AAC3B,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,MAAM,QAAQ,gBAAgB,MAAM,KAAK;AAE9D,SACE,oCAAC,eAAe,UAAf,EAAwB,OAAO,EAAE,QAAQ,UAAU,KAClD;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,0BAAsB;AAAA,MACtB,OAAO,aAAa;AAAA,MACpB,OAAO,YAAY,MAAM,OAAO,EAAE,gBAAgB,eAAe,EAAE,CAAC;AAAA;AAAA,IAEnE,MAAM;AAAA,IACP,oCAAC,QAAK,MAAM,CAAC,UAAU,KAAK,OAAO,KACjC;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,QACP,SAAS;AAAA,QACT,WAAW,CAAC,MAAM,EAAE,QAAQ,YAAY,oBAAoB;AAAA,QAC5D,MAAK;AAAA,QACL,cAAW;AAAA,QACX,UAAU;AAAA;AAAA,IACZ,CACF;AAAA,EACF,CACF;AAEJ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,20 @@
1
+ import { createContext, useContext } from "solid-js";
2
+ const SM_MEDIA_QUERY = "(min-width: 640px)";
3
+ const SidebarContext = createContext();
4
+ function useSidebarContext() {
5
+ const context = useContext(SidebarContext);
6
+ if (!context) {
7
+ throw new Error("useSidebarContext\uB294 SidebarContainer \uB0B4\uBD80\uC5D0\uC11C\uB9CC \uC0AC\uC6A9\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4");
8
+ }
9
+ return context;
10
+ }
11
+ function useSidebarContextOptional() {
12
+ return useContext(SidebarContext);
13
+ }
14
+ export {
15
+ SM_MEDIA_QUERY,
16
+ SidebarContext,
17
+ useSidebarContext,
18
+ useSidebarContextOptional
19
+ };
20
+ //# sourceMappingURL=SidebarContext.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/layout/sidebar/SidebarContext.ts"],
4
+ "sourcesContent": ["import { createContext, useContext, type Accessor, type Setter } from \"solid-js\";\n\n/**\n * Tailwind sm: breakpoint\uC5D0 \uD574\uB2F9\uD558\uB294 \uBBF8\uB514\uC5B4 \uCFFC\uB9AC\n * @see tailwind.config.ts screens.sm (640px)\n */\nexport const SM_MEDIA_QUERY = \"(min-width: 640px)\";\n\n/**\n * \uC0AC\uC774\uB4DC\uBC14 toggle \uC0C1\uD0DC \uACF5\uC720 Context\n *\n * @remarks\n * toggle \uC2DC\uB9E8\uD2F1:\n * - `toggle=false` (\uAE30\uBCF8\uAC12): \uB370\uC2A4\uD06C\uD0D1(640px+)\uC5D0\uC11C \uC5F4\uB9BC, \uBAA8\uBC14\uC77C(640px-)\uC5D0\uC11C \uB2EB\uD798\n * - `toggle=true`: \uB370\uC2A4\uD06C\uD0D1(640px+)\uC5D0\uC11C \uB2EB\uD798, \uBAA8\uBC14\uC77C(640px-)\uC5D0\uC11C \uC5F4\uB9BC (\uC624\uBC84\uB808\uC774)\n */\nexport interface SidebarContextValue {\n toggle: Accessor<boolean>;\n setToggle: Setter<boolean>;\n}\n\nexport const SidebarContext = createContext<SidebarContextValue>();\n\nexport function useSidebarContext(): SidebarContextValue {\n const context = useContext(SidebarContext);\n if (!context) {\n throw new Error(\"useSidebarContext\uB294 SidebarContainer \uB0B4\uBD80\uC5D0\uC11C\uB9CC \uC0AC\uC6A9\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4\");\n }\n return context;\n}\n\n/**\n * SidebarContext\uB97C \uC120\uD0DD\uC801\uC73C\uB85C \uC0AC\uC6A9 (Context \uC5C6\uC73C\uBA74 undefined \uBC18\uD658)\n *\n * @remarks\n * SidebarContainer \uC678\uBD80\uC5D0\uC11C\uB3C4 \uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uCEF4\uD3EC\uB10C\uD2B8(\uC608: Topbar)\uC5D0\uC11C \uC0AC\uC6A9\n */\nexport function useSidebarContextOptional(): SidebarContextValue | undefined {\n return useContext(SidebarContext);\n}\n"],
5
+ "mappings": "AAAA,SAAS,eAAe,kBAA8C;AAM/D,MAAM,iBAAiB;AAevB,MAAM,iBAAiB,cAAmC;AAE1D,SAAS,oBAAyC;AACvD,QAAM,UAAU,WAAW,cAAc;AACzC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,4HAAsD;AAAA,EACxE;AACA,SAAO;AACT;AAQO,SAAS,4BAA6D;AAC3E,SAAO,WAAW,cAAc;AAClC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,84 @@
1
+ import {
2
+ For,
3
+ Show,
4
+ splitProps,
5
+ createSignal,
6
+ createMemo,
7
+ createEffect,
8
+ createContext,
9
+ useContext
10
+ } from "solid-js";
11
+ import { useLocation, useNavigate } from "@solidjs/router";
12
+ import clsx from "clsx";
13
+ import { twMerge } from "tailwind-merge";
14
+ import { Icon } from "../../display/Icon";
15
+ import { List } from "../../data/list/List";
16
+ import { ListItem } from "../../data/list/ListItem";
17
+ const headerClass = clsx(
18
+ "px-4",
19
+ "py-2",
20
+ "text-xs",
21
+ "font-semibold",
22
+ "text-base-500",
23
+ "dark:text-base-400",
24
+ "uppercase",
25
+ "tracking-wider"
26
+ );
27
+ const MenuContext = createContext();
28
+ const SidebarMenu = (props) => {
29
+ const [local, rest] = splitProps(props, ["menus", "class"]);
30
+ const location = useLocation();
31
+ const findSelectedPath = (menus, pathname, path = []) => {
32
+ for (const menu of menus) {
33
+ const currentPath = [...path, menu];
34
+ if (menu.href === pathname) {
35
+ return currentPath;
36
+ }
37
+ if (menu.children) {
38
+ const found = findSelectedPath(menu.children, pathname, currentPath);
39
+ if (found) return found;
40
+ }
41
+ }
42
+ return null;
43
+ };
44
+ const initialOpenItems = createMemo(() => {
45
+ const selectedPath = findSelectedPath(local.menus, location.pathname);
46
+ return selectedPath ? new Set(selectedPath.slice(0, -1)) : /* @__PURE__ */ new Set();
47
+ });
48
+ const getClassName = () => twMerge("flex-1 overflow-y-auto", local.class);
49
+ return /* @__PURE__ */ React.createElement(MenuContext.Provider, { value: { initialOpenItems } }, /* @__PURE__ */ React.createElement("div", { ...rest, "data-sidebar-menu": true, class: getClassName() }, /* @__PURE__ */ React.createElement("div", { class: headerClass }, "MENU"), /* @__PURE__ */ React.createElement(List, { inset: true }, /* @__PURE__ */ React.createElement(For, { each: local.menus }, (menu) => /* @__PURE__ */ React.createElement(MenuItem, { menu, size: "lg" })))));
50
+ };
51
+ const MenuItem = (props) => {
52
+ const location = useLocation();
53
+ const navigate = useNavigate();
54
+ const menuContext = useContext(MenuContext);
55
+ const hasChildren = () => props.menu.children !== void 0 && props.menu.children.length > 0;
56
+ const isExternalLink = () => {
57
+ var _a;
58
+ return ((_a = props.menu.href) == null ? void 0 : _a.includes("://")) ?? false;
59
+ };
60
+ const isSelected = () => props.menu.href === location.pathname;
61
+ const shouldBeOpen = () => menuContext.initialOpenItems().has(props.menu);
62
+ const [open, setOpen] = createSignal(false);
63
+ createEffect(() => {
64
+ if (shouldBeOpen()) {
65
+ setOpen(true);
66
+ }
67
+ });
68
+ const handleClick = () => {
69
+ if (hasChildren()) {
70
+ setOpen((v) => !v);
71
+ } else if (props.menu.href !== void 0) {
72
+ if (isExternalLink()) {
73
+ window.open(props.menu.href, "_blank", "noopener,noreferrer");
74
+ } else {
75
+ navigate(props.menu.href);
76
+ }
77
+ }
78
+ };
79
+ return /* @__PURE__ */ React.createElement(ListItem, { selected: isSelected(), open: open(), onOpenChange: setOpen, onClick: handleClick, size: props.size }, /* @__PURE__ */ React.createElement(Show, { when: props.menu.icon }, /* @__PURE__ */ React.createElement(Icon, { icon: props.menu.icon })), /* @__PURE__ */ React.createElement("span", { class: "truncate" }, props.menu.title), /* @__PURE__ */ React.createElement(Show, { when: hasChildren() }, /* @__PURE__ */ React.createElement(ListItem.Children, null, /* @__PURE__ */ React.createElement(For, { each: props.menu.children }, (child) => /* @__PURE__ */ React.createElement(MenuItem, { menu: child })))));
80
+ };
81
+ export {
82
+ SidebarMenu
83
+ };
84
+ //# sourceMappingURL=SidebarMenu.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/layout/sidebar/SidebarMenu.tsx"],
4
+ "sourcesContent": ["import {\n type Component,\n type JSX,\n For,\n Show,\n splitProps,\n createSignal,\n createMemo,\n createEffect,\n createContext,\n useContext,\n type Accessor,\n} from \"solid-js\";\nimport { useLocation, useNavigate } from \"@solidjs/router\";\nimport clsx from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nimport type { IconProps } from \"@tabler/icons-solidjs\";\nimport type { ComponentSize } from \"../../../styles/tokens.styles\";\nimport { Icon } from \"../../display/Icon\";\nimport { List } from \"../../data/list/List\";\nimport { ListItem } from \"../../data/list/ListItem\";\n\nconst headerClass = clsx(\n \"px-4\",\n \"py-2\",\n \"text-xs\",\n \"font-semibold\",\n \"text-base-500\",\n \"dark:text-base-400\",\n \"uppercase\",\n \"tracking-wider\",\n);\n\nexport interface SidebarMenuItem {\n title: string;\n href?: string;\n icon?: Component<IconProps>;\n children?: SidebarMenuItem[];\n}\n\nexport interface SidebarMenuProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, \"children\"> {\n /**\n * \uBA54\uB274 \uC544\uC774\uD15C \uBC30\uC5F4\n */\n menus: SidebarMenuItem[];\n}\n\n// \uB0B4\uBD80 Context: \uCD08\uAE30 \uD3BC\uCE68 \uC0C1\uD0DC \uACF5\uC720\ninterface MenuContextValue {\n initialOpenItems: Accessor<Set<SidebarMenuItem>>;\n}\n\nconst MenuContext = createContext<MenuContextValue>();\n\n/**\n * \uC0AC\uC774\uB4DC\uBC14 \uBA54\uB274 \uCEF4\uD3EC\uB10C\uD2B8\n *\n * @remarks\n * - \"MENU\" \uD5E4\uB354 \uACE0\uC815 \uD45C\uC2DC\n * - List/ListItem\uC73C\uB85C \uC7AC\uADC0\uC801 \uBA54\uB274 \uB80C\uB354\uB9C1\n * - pathname \uC815\uD655 \uC77C\uCE58\uB85C \uC120\uD0DD \uC0C1\uD0DC \uD310\uB2E8 (query string \uBB34\uC2DC)\n * - \uC120\uD0DD\uB41C \uBA54\uB274\uC758 \uBD80\uBAA8\uB4E4\uC740 \uCD08\uAE30 \uB80C\uB354\uB9C1 \uC2DC \uC790\uB3D9 \uD3BC\uCE68\n * - \uC678\uBD80 \uB9C1\uD06C(://\uD3EC\uD568)\uB294 \uC0C8 \uD0ED\uC5D0\uC11C \uC5F4\uAE30\n *\n * @example\n * ```tsx\n * <SidebarMenu menus={[\n * { title: \"\uB300\uC2DC\uBCF4\uB4DC\", href: \"/dashboard\", icon: IconHome },\n * {\n * title: \"\uC124\uC815\",\n * icon: IconSettings,\n * children: [\n * { title: \"\uD504\uB85C\uD544\", href: \"/settings/profile\" },\n * { title: \"\uBCF4\uC548\", href: \"/settings/security\" },\n * ],\n * },\n * ]} />\n * ```\n */\nexport const SidebarMenu: Component<SidebarMenuProps> = (props) => {\n const [local, rest] = splitProps(props, [\"menus\", \"class\"]);\n\n const location = useLocation();\n\n // \uD604\uC7AC pathname\uACFC \uC77C\uCE58\uD558\uB294 \uBA54\uB274\uC758 \uBD80\uBAA8\uB4E4\uC744 \uCC3E\uC544 \uD3BC\uCE68 \uC0C1\uD0DC \uACC4\uC0B0\n const findSelectedPath = (\n menus: SidebarMenuItem[],\n pathname: string,\n path: SidebarMenuItem[] = [],\n ): SidebarMenuItem[] | null => {\n for (const menu of menus) {\n const currentPath = [...path, menu];\n if (menu.href === pathname) {\n return currentPath;\n }\n if (menu.children) {\n const found = findSelectedPath(menu.children, pathname, currentPath);\n if (found) return found;\n }\n }\n return null;\n };\n\n // pathname \uBCC0\uACBD\uC5D0 \uBC18\uC751\uD558\uC5EC \uD3BC\uCE68 \uC0C1\uD0DC \uC7AC\uACC4\uC0B0\n const initialOpenItems = createMemo(() => {\n const selectedPath = findSelectedPath(local.menus, location.pathname);\n return selectedPath\n ? new Set(selectedPath.slice(0, -1)) // \uB9C8\uC9C0\uB9C9 \uD56D\uBAA9(\uC120\uD0DD\uB41C \uBA54\uB274)\uC740 \uC81C\uC678\uD558\uACE0 \uBD80\uBAA8\uB4E4\uB9CC \uD3BC\uCE68\n : new Set<SidebarMenuItem>();\n });\n\n const getClassName = () => twMerge(\"flex-1 overflow-y-auto\", local.class);\n\n return (\n <MenuContext.Provider value={{ initialOpenItems }}>\n <div {...rest} data-sidebar-menu class={getClassName()}>\n <div class={headerClass}>MENU</div>\n <List inset>\n <For each={local.menus}>{(menu) => <MenuItem menu={menu} size=\"lg\" />}</For>\n </List>\n </div>\n </MenuContext.Provider>\n );\n};\n\ninterface MenuItemProps {\n menu: SidebarMenuItem;\n size?: ComponentSize;\n}\n\nconst MenuItem: Component<MenuItemProps> = (props) => {\n const location = useLocation();\n const navigate = useNavigate();\n const menuContext = useContext(MenuContext)!;\n\n const hasChildren = () => props.menu.children !== undefined && props.menu.children.length > 0;\n\n // \uC678\uBD80 \uB9C1\uD06C \uC5EC\uBD80 \uD655\uC778\n const isExternalLink = () => props.menu.href?.includes(\"://\") ?? false;\n\n // \uC120\uD0DD \uC0C1\uD0DC\n const isSelected = () => props.menu.href === location.pathname;\n\n // \uD3BC\uCE68 \uC0C1\uD0DC \uACC4\uC0B0 (object reference\uB85C \uBE44\uAD50)\n const shouldBeOpen = () => menuContext.initialOpenItems().has(props.menu);\n\n const [open, setOpen] = createSignal(false);\n\n // pathname \uBCC0\uACBD\uC5D0 \uBC18\uC751\uD558\uC5EC \uD3BC\uCE68 \uC0C1\uD0DC \uC5C5\uB370\uC774\uD2B8\n createEffect(() => {\n if (shouldBeOpen()) {\n setOpen(true);\n }\n });\n\n const handleClick = () => {\n if (hasChildren()) {\n setOpen((v) => !v);\n } else if (props.menu.href !== undefined) {\n if (isExternalLink()) {\n window.open(props.menu.href, \"_blank\", \"noopener,noreferrer\");\n } else {\n navigate(props.menu.href);\n }\n }\n };\n\n return (\n <ListItem selected={isSelected()} open={open()} onOpenChange={setOpen} onClick={handleClick} size={props.size}>\n <Show when={props.menu.icon}>\n <Icon icon={props.menu.icon!} />\n </Show>\n <span class=\"truncate\">{props.menu.title}</span>\n <Show when={hasChildren()}>\n <ListItem.Children>\n <For each={props.menu.children}>{(child) => <MenuItem menu={child} />}</For>\n </ListItem.Children>\n </Show>\n </ListItem>\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }