@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,171 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2
+ import { render, fireEvent } from "@solidjs/testing-library";
3
+ import { Sidebar, type SidebarUserMenu } from "../../../../src";
4
+
5
+ describe("SidebarUser", () => {
6
+ beforeEach(() => {
7
+ // requestAnimationFrame mock (Collapse 애니메이션용)
8
+ vi.spyOn(window, "requestAnimationFrame").mockImplementation((cb) => {
9
+ cb(0);
10
+ return 0;
11
+ });
12
+ });
13
+
14
+ afterEach(() => {
15
+ vi.restoreAllMocks();
16
+ });
17
+
18
+ describe("렌더링", () => {
19
+ it("children을 렌더링", () => {
20
+ const { getByText } = render(() => (
21
+ <Sidebar.User>
22
+ <span>사용자 이름</span>
23
+ </Sidebar.User>
24
+ ));
25
+
26
+ expect(getByText("사용자 이름")).toBeTruthy();
27
+ });
28
+
29
+ it("menus가 없을 때 버튼에 aria-expanded 없음", () => {
30
+ const { container } = render(() => (
31
+ <Sidebar.User>
32
+ <span>사용자</span>
33
+ </Sidebar.User>
34
+ ));
35
+
36
+ const button = container.querySelector("button");
37
+ expect(button?.hasAttribute("aria-expanded")).toBe(false);
38
+ });
39
+
40
+ it("menus가 있을 때 버튼에 aria-expanded=false", () => {
41
+ const menus: SidebarUserMenu[] = [{ title: "로그아웃", onClick: () => {} }];
42
+
43
+ const { container } = render(() => (
44
+ <Sidebar.User menus={menus}>
45
+ <span>사용자</span>
46
+ </Sidebar.User>
47
+ ));
48
+
49
+ const button = container.querySelector("button");
50
+ expect(button?.getAttribute("aria-expanded")).toBe("false");
51
+ });
52
+ });
53
+
54
+ describe("클릭 동작", () => {
55
+ it("menus가 없을 때 클릭해도 드롭다운이 열리지 않음", () => {
56
+ const { container } = render(() => (
57
+ <Sidebar.User>
58
+ <span>사용자</span>
59
+ </Sidebar.User>
60
+ ));
61
+
62
+ const button = container.querySelector("button")!;
63
+ fireEvent.click(button);
64
+
65
+ // aria-expanded가 없거나 변경되지 않음
66
+ expect(button.hasAttribute("aria-expanded")).toBe(false);
67
+ });
68
+
69
+ it("menus가 있을 때 클릭으로 드롭다운 토글", () => {
70
+ const menus: SidebarUserMenu[] = [{ title: "로그아웃", onClick: () => {} }];
71
+
72
+ const { container } = render(() => (
73
+ <Sidebar.User menus={menus}>
74
+ <span>사용자</span>
75
+ </Sidebar.User>
76
+ ));
77
+
78
+ const button = container.querySelector("button")!;
79
+
80
+ // 초기 상태: 닫힘
81
+ expect(button.getAttribute("aria-expanded")).toBe("false");
82
+
83
+ // 첫 번째 클릭: 열림
84
+ fireEvent.click(button);
85
+ expect(button.getAttribute("aria-expanded")).toBe("true");
86
+
87
+ // 두 번째 클릭: 닫힘
88
+ fireEvent.click(button);
89
+ expect(button.getAttribute("aria-expanded")).toBe("false");
90
+ });
91
+ });
92
+
93
+ describe("메뉴 아이템 클릭", () => {
94
+ it("메뉴 아이템 클릭 시 onClick 호출", () => {
95
+ const onLogout = vi.fn();
96
+ const menus: SidebarUserMenu[] = [{ title: "로그아웃", onClick: onLogout }];
97
+
98
+ const { container, getByText } = render(() => (
99
+ <Sidebar.User menus={menus}>
100
+ <span>사용자</span>
101
+ </Sidebar.User>
102
+ ));
103
+
104
+ // 드롭다운 열기
105
+ const button = container.querySelector("button")!;
106
+ fireEvent.click(button);
107
+
108
+ // 메뉴 아이템 클릭
109
+ fireEvent.click(getByText("로그아웃"));
110
+
111
+ expect(onLogout).toHaveBeenCalledTimes(1);
112
+ });
113
+
114
+ it("메뉴 아이템 클릭 시 드롭다운 닫힘", () => {
115
+ const menus: SidebarUserMenu[] = [{ title: "프로필", onClick: () => {} }];
116
+
117
+ const { container, getByText } = render(() => (
118
+ <Sidebar.User menus={menus}>
119
+ <span>사용자</span>
120
+ </Sidebar.User>
121
+ ));
122
+
123
+ const button = container.querySelector("button")!;
124
+
125
+ // 드롭다운 열기
126
+ fireEvent.click(button);
127
+ expect(button.getAttribute("aria-expanded")).toBe("true");
128
+
129
+ // 메뉴 아이템 클릭
130
+ fireEvent.click(getByText("프로필"));
131
+
132
+ // 드롭다운 닫힘
133
+ expect(button.getAttribute("aria-expanded")).toBe("false");
134
+ });
135
+ });
136
+
137
+ describe("menus 유무에 따른 스타일", () => {
138
+ it("menus prop에 따라 스타일이 달라진다", () => {
139
+ const menus: SidebarUserMenu[] = [{ title: "로그아웃", onClick: () => {} }];
140
+
141
+ const { container: withoutMenus } = render(() => (
142
+ <Sidebar.User>
143
+ <span>사용자</span>
144
+ </Sidebar.User>
145
+ ));
146
+ const { container: withMenus } = render(() => (
147
+ <Sidebar.User menus={menus}>
148
+ <span>사용자</span>
149
+ </Sidebar.User>
150
+ ));
151
+
152
+ const buttonWithout = withoutMenus.querySelector("button")!;
153
+ const buttonWith = withMenus.querySelector("button")!;
154
+
155
+ expect(buttonWithout.className).not.toBe(buttonWith.className);
156
+ });
157
+ });
158
+
159
+ describe("스타일 병합", () => {
160
+ it("사용자 정의 class가 병합된다", () => {
161
+ const { container } = render(() => (
162
+ // eslint-disable-next-line tailwindcss/no-custom-classname
163
+ <Sidebar.User class="my-custom-class">
164
+ <span>사용자</span>
165
+ </Sidebar.User>
166
+ ));
167
+
168
+ expect(container.querySelector(".my-custom-class")).toBeTruthy();
169
+ });
170
+ });
171
+ });
@@ -0,0 +1,130 @@
1
+ import { render, fireEvent } from "@solidjs/testing-library";
2
+ import { describe, it, expect } from "vitest";
3
+ import { Button } from "../../src/components/form-control/Button";
4
+
5
+ describe("ripple directive", () => {
6
+ it("버튼 클릭 시 ripple indicator가 생성된다", () => {
7
+ const { getByRole } = render(() => <Button>Click</Button>);
8
+ const button = getByRole("button");
9
+
10
+ fireEvent.pointerDown(button, { clientX: 50, clientY: 25 });
11
+
12
+ const ripple = button.querySelector(".rounded-full");
13
+ expect(ripple).toBeTruthy();
14
+ });
15
+
16
+ it("disabled 버튼은 ripple이 생성되지 않는다", () => {
17
+ const { getByRole } = render(() => <Button disabled>Click</Button>);
18
+ const button = getByRole("button");
19
+
20
+ fireEvent.pointerDown(button, { clientX: 50, clientY: 25 });
21
+
22
+ const ripple = button.querySelector(".rounded-full");
23
+ expect(ripple).toBeFalsy();
24
+ });
25
+
26
+ it("pointerup 후 ripple의 opacity가 0이 된다", () => {
27
+ const { getByRole } = render(() => <Button>Click</Button>);
28
+ const button = getByRole("button");
29
+
30
+ fireEvent.pointerDown(button, { clientX: 50, clientY: 25 });
31
+
32
+ const ripple = button.querySelector(".rounded-full") as HTMLElement;
33
+ expect(ripple).toBeTruthy();
34
+
35
+ fireEvent.pointerUp(button);
36
+
37
+ expect(ripple.style.opacity).toBe("0");
38
+ });
39
+
40
+ it("빠른 연속 클릭 시 이전 ripple이 제거되고 새 ripple이 생성된다", () => {
41
+ const { getByRole } = render(() => <Button>Click</Button>);
42
+ const button = getByRole("button");
43
+
44
+ // 첫 번째 클릭
45
+ fireEvent.pointerDown(button, { clientX: 30, clientY: 15 });
46
+ const firstRipple = button.querySelector(".rounded-full");
47
+ expect(firstRipple).toBeTruthy();
48
+
49
+ // 두 번째 클릭 (다른 위치)
50
+ fireEvent.pointerDown(button, { clientX: 70, clientY: 35 });
51
+ const ripples = button.querySelectorAll(".rounded-full");
52
+
53
+ // 단일 ripple만 존재해야 함
54
+ expect(ripples.length).toBe(1);
55
+ });
56
+
57
+ it("첫 pointerdown 시 ripple container가 생성되고 overflow: hidden이 적용된다", () => {
58
+ const { getByRole } = render(() => <Button>Click</Button>);
59
+ const button = getByRole("button");
60
+
61
+ // pointerdown 전에는 ripple container 없음
62
+ expect(button.children.length).toBe(0); // 텍스트 노드만 있음
63
+
64
+ fireEvent.pointerDown(button, { clientX: 50, clientY: 25 });
65
+
66
+ // pointerdown 후에는 ripple container가 생성됨
67
+ expect(button.children.length).toBeGreaterThan(0);
68
+ const container = button.firstElementChild as HTMLElement;
69
+ expect(container).toBeTruthy();
70
+ expect(container.style.overflow).toBe("hidden");
71
+ // 부모 버튼의 overflow는 변경되지 않음
72
+ expect(button.style.overflow).not.toBe("hidden");
73
+ });
74
+
75
+ it("마우스를 누르고 있는 동안 ripple이 유지된다", () => {
76
+ const { getByRole } = render(() => <Button>Click</Button>);
77
+ const button = getByRole("button");
78
+
79
+ fireEvent.pointerDown(button, { clientX: 50, clientY: 25 });
80
+
81
+ const ripple = button.querySelector(".rounded-full") as HTMLElement;
82
+ expect(ripple).toBeTruthy();
83
+
84
+ // pointerup 없이 ripple이 유지되어야 함
85
+ // opacity가 여전히 1이어야 함 (fade out 시작 안 함)
86
+ expect(ripple.style.opacity).toBe("1");
87
+ });
88
+
89
+ it("다크모드용 ripple 클래스가 적용된다", () => {
90
+ const { getByRole } = render(() => <Button>Click</Button>);
91
+ const button = getByRole("button");
92
+
93
+ fireEvent.pointerDown(button, { clientX: 50, clientY: 25 });
94
+
95
+ const ripple = button.querySelector(".rounded-full") as HTMLElement;
96
+ expect(ripple).toBeTruthy();
97
+
98
+ // 라이트/다크 모드 모두 지원하는 클래스 확인
99
+ expect(ripple.classList.contains("bg-black/20")).toBe(true);
100
+ expect(ripple.classList.contains("dark:bg-white/20")).toBe(true);
101
+ });
102
+
103
+ it("pointerleave 시에도 ripple이 fade out된다", () => {
104
+ const { getByRole } = render(() => <Button>Click</Button>);
105
+ const button = getByRole("button");
106
+
107
+ fireEvent.pointerDown(button, { clientX: 50, clientY: 25 });
108
+
109
+ const ripple = button.querySelector(".rounded-full") as HTMLElement;
110
+ expect(ripple).toBeTruthy();
111
+
112
+ fireEvent.pointerLeave(button);
113
+
114
+ expect(ripple.style.opacity).toBe("0");
115
+ });
116
+
117
+ it("pointercancel 시에도 ripple이 fade out된다", () => {
118
+ const { getByRole } = render(() => <Button>Click</Button>);
119
+ const button = getByRole("button");
120
+
121
+ fireEvent.pointerDown(button, { clientX: 50, clientY: 25 });
122
+
123
+ const ripple = button.querySelector(".rounded-full") as HTMLElement;
124
+ expect(ripple).toBeTruthy();
125
+
126
+ fireEvent.pointerCancel(button);
127
+
128
+ expect(ripple.style.opacity).toBe("0");
129
+ });
130
+ });
@@ -0,0 +1,338 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { createRoot, createSignal } from "solid-js";
3
+ import type { Component } from "solid-js";
4
+ import { createAppStructure, type AppStructureItem } from "../../src/helpers/createAppStructure";
5
+
6
+ // 테스트용 더미 컴포넌트
7
+ const DummyA: Component = () => null;
8
+ const DummyB: Component = () => null;
9
+ const DummyC: Component = () => null;
10
+ const DummyD: Component = () => null;
11
+
12
+ // 공통 테스트 구조
13
+ function createTestItems(): AppStructureItem<string>[] {
14
+ return [
15
+ {
16
+ code: "home",
17
+ title: "홈",
18
+ children: [
19
+ {
20
+ code: "sales",
21
+ title: "영업",
22
+ modules: ["sales"],
23
+ children: [
24
+ {
25
+ code: "invoice",
26
+ title: "송장",
27
+ component: DummyA,
28
+ perms: ["use", "edit"] as ("use" | "edit")[],
29
+ },
30
+ {
31
+ code: "order",
32
+ title: "주문",
33
+ component: DummyB,
34
+ perms: ["use"] as ("use" | "edit")[],
35
+ requiredModules: ["sales", "erp"],
36
+ },
37
+ ],
38
+ },
39
+ {
40
+ code: "admin",
41
+ title: "관리",
42
+ children: [
43
+ {
44
+ code: "users",
45
+ title: "사용자",
46
+ component: DummyC,
47
+ },
48
+ {
49
+ code: "hidden",
50
+ title: "숨김",
51
+ component: DummyD,
52
+ isNotMenu: true,
53
+ },
54
+ ],
55
+ },
56
+ ],
57
+ },
58
+ ];
59
+ }
60
+
61
+ describe("createAppStructure", () => {
62
+ describe("routes", () => {
63
+ it("리프 아이템의 상대 경로를 추출한다", () => {
64
+ createRoot((dispose) => {
65
+ const result = createAppStructure({ items: createTestItems() });
66
+
67
+ expect(result.routes).toEqual([
68
+ { path: "/sales/invoice", component: DummyA },
69
+ { path: "/sales/order", component: DummyB },
70
+ { path: "/admin/users", component: DummyC },
71
+ { path: "/admin/hidden", component: DummyD },
72
+ ]);
73
+
74
+ dispose();
75
+ });
76
+ });
77
+
78
+ it("component가 없는 아이템은 라우트에 포함되지 않는다", () => {
79
+ createRoot((dispose) => {
80
+ const items: AppStructureItem<string>[] = [
81
+ {
82
+ code: "home",
83
+ title: "홈",
84
+ children: [{ code: "about", title: "소개" }],
85
+ },
86
+ ];
87
+
88
+ const result = createAppStructure({ items });
89
+ expect(result.routes).toEqual([]);
90
+
91
+ dispose();
92
+ });
93
+ });
94
+ });
95
+
96
+ describe("usableMenus", () => {
97
+ it("permRecord가 없으면 perms가 있는 리프는 숨겨지고 perms가 없는 리프만 표시된다", () => {
98
+ // permRecord 기본값이 {}이므로, perms에 "use"가 있는 아이템은
99
+ // permRecord[href + "/use"]가 undefined(falsy)가 되어 필터링됨
100
+ createRoot((dispose) => {
101
+ const result = createAppStructure({ items: createTestItems() });
102
+ const menus = result.usableMenus();
103
+
104
+ // 영업 하위 아이템(송장, 주문)은 모두 perms에 "use"가 있어 숨겨짐
105
+ // → 영업 그룹 자체도 자식이 없으므로 숨겨짐
106
+ // 관리 하위 아이템: 사용자(perms 없음)만 표시, 숨김(isNotMenu)은 제외
107
+ expect(menus).toHaveLength(1);
108
+ expect(menus[0].title).toBe("관리");
109
+ expect(menus[0].children).toHaveLength(1);
110
+ expect(menus[0].children![0].title).toBe("사용자");
111
+
112
+ dispose();
113
+ });
114
+ });
115
+
116
+ it("모든 권한이 부여되면 isNotMenu를 제외한 모든 메뉴가 표시된다", () => {
117
+ createRoot((dispose) => {
118
+ const [perms] = createSignal<Record<string, boolean>>({
119
+ "/home/sales/invoice/use": true,
120
+ "/home/sales/order/use": true,
121
+ });
122
+
123
+ const [modules] = createSignal<string[]>(["sales", "erp"]);
124
+
125
+ const result = createAppStructure({
126
+ items: createTestItems(),
127
+ usableModules: modules,
128
+ permRecord: perms,
129
+ });
130
+
131
+ const menus = result.usableMenus();
132
+
133
+ expect(menus).toHaveLength(2);
134
+ expect(menus[0].title).toBe("영업");
135
+ expect(menus[0].children).toHaveLength(2);
136
+ expect(menus[1].title).toBe("관리");
137
+ expect(menus[1].children).toHaveLength(1);
138
+ expect(menus[1].children![0].title).toBe("사용자");
139
+
140
+ dispose();
141
+ });
142
+ });
143
+
144
+ it("href가 올바른 전체 경로로 생성된다", () => {
145
+ createRoot((dispose) => {
146
+ const [perms] = createSignal<Record<string, boolean>>({
147
+ "/home/sales/invoice/use": true,
148
+ "/home/sales/order/use": true,
149
+ });
150
+
151
+ const [modules] = createSignal<string[]>(["sales", "erp"]);
152
+
153
+ const result = createAppStructure({
154
+ items: createTestItems(),
155
+ usableModules: modules,
156
+ permRecord: perms,
157
+ });
158
+
159
+ const menus = result.usableMenus();
160
+
161
+ expect(menus[0].children![0].href).toBe("/home/sales/invoice");
162
+ expect(menus[1].children![0].href).toBe("/home/admin/users");
163
+
164
+ dispose();
165
+ });
166
+ });
167
+
168
+ it("modules OR 필터링: 모듈이 없으면 해당 그룹이 숨겨진다", () => {
169
+ createRoot((dispose) => {
170
+ const [modules] = createSignal<string[]>(["erp"]);
171
+
172
+ const result = createAppStructure({
173
+ items: createTestItems(),
174
+ usableModules: modules,
175
+ });
176
+
177
+ const menus = result.usableMenus();
178
+ // sales 그룹은 modules: ["sales"]인데 usableModules에 "sales"가 없으므로 숨겨짐
179
+ expect(menus).toHaveLength(1);
180
+ expect(menus[0].title).toBe("관리");
181
+
182
+ dispose();
183
+ });
184
+ });
185
+
186
+ it("requiredModules AND 필터링: 모든 모듈이 있어야 표시된다", () => {
187
+ createRoot((dispose) => {
188
+ const [modules] = createSignal<string[]>(["sales"]);
189
+ const [perms] = createSignal<Record<string, boolean>>({
190
+ "/home/sales/invoice/use": true,
191
+ "/home/sales/order/use": true,
192
+ });
193
+
194
+ const result = createAppStructure({
195
+ items: createTestItems(),
196
+ usableModules: modules,
197
+ permRecord: perms,
198
+ });
199
+
200
+ const menus = result.usableMenus();
201
+ // sales 그룹은 modules: ["sales"]에 매칭되어 표시됨
202
+ // order는 requiredModules: ["sales", "erp"]인데 "erp"가 없으므로 숨겨짐
203
+ // invoice는 requiredModules가 없으므로 표시됨
204
+ expect(menus[0].children).toHaveLength(1);
205
+ expect(menus[0].children![0].title).toBe("송장");
206
+
207
+ dispose();
208
+ });
209
+ });
210
+
211
+ it("permRecord 필터링: use 권한이 없으면 숨겨진다", () => {
212
+ createRoot((dispose) => {
213
+ const [perms] = createSignal<Record<string, boolean>>({
214
+ "/home/sales/invoice/use": false,
215
+ "/home/sales/order/use": true,
216
+ });
217
+
218
+ const [modules] = createSignal<string[]>(["sales", "erp"]);
219
+
220
+ const result = createAppStructure({
221
+ items: createTestItems(),
222
+ usableModules: modules,
223
+ permRecord: perms,
224
+ });
225
+
226
+ const menus = result.usableMenus();
227
+ expect(menus[0].children).toHaveLength(1);
228
+ expect(menus[0].children![0].title).toBe("주문");
229
+
230
+ dispose();
231
+ });
232
+ });
233
+
234
+ it("perms가 없는 리프는 권한 체크 없이 항상 표시된다", () => {
235
+ createRoot((dispose) => {
236
+ const [perms] = createSignal<Record<string, boolean>>({});
237
+
238
+ const result = createAppStructure({
239
+ items: createTestItems(),
240
+ permRecord: perms,
241
+ });
242
+
243
+ const menus = result.usableMenus();
244
+ // permRecord가 빈 객체이므로 perms: ["use"]가 있는 아이템은 모두 숨겨짐
245
+ // perms가 없는 사용자(DummyC)만 표시됨
246
+ // 관리 그룹만 남음 (인덱스 0)
247
+ expect(menus).toHaveLength(1);
248
+ expect(menus[0].title).toBe("관리");
249
+ expect(menus[0].children![0].title).toBe("사용자");
250
+
251
+ dispose();
252
+ });
253
+ });
254
+
255
+ it("자식이 모두 필터링되면 그룹도 숨겨진다", () => {
256
+ createRoot((dispose) => {
257
+ const [perms] = createSignal<Record<string, boolean>>({
258
+ "/home/sales/invoice/use": false,
259
+ "/home/sales/order/use": false,
260
+ });
261
+
262
+ const [modules] = createSignal<string[]>(["sales", "erp"]);
263
+
264
+ const result = createAppStructure({
265
+ items: createTestItems(),
266
+ usableModules: modules,
267
+ permRecord: perms,
268
+ });
269
+
270
+ const menus = result.usableMenus();
271
+ // 영업 하위 아이템이 모두 권한 없음으로 필터링 → 영업 그룹도 숨겨짐
272
+ expect(menus).toHaveLength(1);
273
+ expect(menus[0].title).toBe("관리");
274
+
275
+ dispose();
276
+ });
277
+ });
278
+
279
+ it("usableModules가 변경되면 메뉴가 재계산된다", () => {
280
+ createRoot((dispose) => {
281
+ const [modules, setModules] = createSignal<string[] | undefined>(undefined);
282
+ const [perms] = createSignal<Record<string, boolean>>({
283
+ "/home/sales/invoice/use": true,
284
+ "/home/sales/order/use": true,
285
+ });
286
+
287
+ const result = createAppStructure({
288
+ items: createTestItems(),
289
+ usableModules: modules,
290
+ permRecord: perms,
291
+ });
292
+
293
+ // usableModules가 undefined이면 모듈 필터링 없음 → 전부 표시
294
+ expect(result.usableMenus()).toHaveLength(2);
295
+
296
+ // usableModules를 ["sales"]로 설정하면 order의 requiredModules 불충족
297
+ setModules(["sales"]);
298
+ expect(result.usableMenus()[0].title).toBe("영업");
299
+ expect(result.usableMenus()[0].children).toHaveLength(1);
300
+ expect(result.usableMenus()[0].children![0].title).toBe("송장");
301
+
302
+ dispose();
303
+ });
304
+ });
305
+ });
306
+
307
+ describe("usableFlatMenus", () => {
308
+ it("트리를 평탄화하여 titleChain과 href를 반환한다", () => {
309
+ createRoot((dispose) => {
310
+ const [perms] = createSignal<Record<string, boolean>>({
311
+ "/home/sales/invoice/use": true,
312
+ "/home/sales/order/use": true,
313
+ });
314
+
315
+ const [modules] = createSignal<string[]>(["sales", "erp"]);
316
+
317
+ const result = createAppStructure({
318
+ items: createTestItems(),
319
+ usableModules: modules,
320
+ permRecord: perms,
321
+ });
322
+
323
+ const flat = result.usableFlatMenus();
324
+
325
+ expect(flat).toContainEqual({
326
+ titleChain: ["영업", "송장"],
327
+ href: "/home/sales/invoice",
328
+ });
329
+ expect(flat).toContainEqual({
330
+ titleChain: ["관리", "사용자"],
331
+ href: "/home/admin/users",
332
+ });
333
+
334
+ dispose();
335
+ });
336
+ });
337
+ });
338
+ });