@simplysm/solid 13.0.27 → 13.0.29

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 (278) hide show
  1. package/README.md +6 -5
  2. package/dist/components/data/Pagination.d.ts.map +1 -1
  3. package/dist/components/data/Pagination.js.map +1 -1
  4. package/dist/components/data/calendar/Calendar.d.ts.map +1 -1
  5. package/dist/components/data/calendar/Calendar.js.map +1 -1
  6. package/dist/components/data/kanban/Kanban.d.ts.map +1 -1
  7. package/dist/components/data/kanban/Kanban.js +2 -2
  8. package/dist/components/data/kanban/Kanban.js.map +2 -2
  9. package/dist/components/data/list/List.d.ts.map +1 -1
  10. package/dist/components/data/list/List.js.map +1 -1
  11. package/dist/components/data/list/ListItem.d.ts.map +1 -1
  12. package/dist/components/data/list/ListItem.js.map +1 -1
  13. package/dist/components/data/permission-table/PermissionTable.d.ts.map +1 -1
  14. package/dist/components/data/permission-table/PermissionTable.js.map +1 -1
  15. package/dist/components/data/sheet/DataSheet.d.ts.map +1 -1
  16. package/dist/components/data/sheet/DataSheet.js.map +1 -1
  17. package/dist/components/data/sheet/DataSheet.styles.d.ts.map +1 -1
  18. package/dist/components/data/sheet/DataSheet.styles.js +23 -5
  19. package/dist/components/data/sheet/DataSheet.styles.js.map +1 -1
  20. package/dist/components/data/sheet/DataSheetColumn.d.ts.map +1 -1
  21. package/dist/components/data/sheet/DataSheetColumn.js.map +1 -1
  22. package/dist/components/data/sheet/DataSheetConfigDialog.d.ts.map +1 -1
  23. package/dist/components/data/sheet/DataSheetConfigDialog.js.map +1 -1
  24. package/dist/components/data/sheet/sheetUtils.d.ts.map +1 -1
  25. package/dist/components/data/sheet/sheetUtils.js.map +1 -1
  26. package/dist/components/disclosure/Collapse.d.ts.map +1 -1
  27. package/dist/components/disclosure/Collapse.js +0 -3
  28. package/dist/components/disclosure/Collapse.js.map +1 -1
  29. package/dist/components/disclosure/Dialog.d.ts.map +1 -1
  30. package/dist/components/disclosure/Dialog.js.map +1 -1
  31. package/dist/components/disclosure/DialogContext.d.ts.map +1 -1
  32. package/dist/components/disclosure/DialogContext.js.map +1 -1
  33. package/dist/components/disclosure/DialogProvider.d.ts.map +1 -1
  34. package/dist/components/disclosure/DialogProvider.js.map +1 -1
  35. package/dist/components/disclosure/Dropdown.d.ts.map +1 -1
  36. package/dist/components/disclosure/Dropdown.js.map +1 -1
  37. package/dist/components/disclosure/Tabs.d.ts.map +1 -1
  38. package/dist/components/disclosure/Tabs.js.map +1 -1
  39. package/dist/components/display/Alert.d.ts.map +1 -1
  40. package/dist/components/display/Alert.js.map +1 -1
  41. package/dist/components/display/Card.d.ts +0 -1
  42. package/dist/components/display/Card.d.ts.map +1 -1
  43. package/dist/components/display/Card.js +1 -2
  44. package/dist/components/display/Card.js.map +1 -1
  45. package/dist/components/display/Echarts.d.ts +1 -1
  46. package/dist/components/display/Echarts.d.ts.map +1 -1
  47. package/dist/components/display/Echarts.js +2 -2
  48. package/dist/components/display/Echarts.js.map +2 -2
  49. package/dist/components/display/Link.d.ts +5 -0
  50. package/dist/components/display/Link.d.ts.map +1 -0
  51. package/dist/components/display/Link.js +26 -0
  52. package/dist/components/display/Link.js.map +6 -0
  53. package/dist/components/feedback/busy/BusyContainer.d.ts +12 -0
  54. package/dist/components/feedback/busy/BusyContainer.d.ts.map +1 -0
  55. package/dist/components/feedback/{loading/LoadingContainer.js → busy/BusyContainer.js} +7 -7
  56. package/dist/components/feedback/busy/BusyContainer.js.map +6 -0
  57. package/dist/components/feedback/busy/BusyContext.d.ts +11 -0
  58. package/dist/components/feedback/busy/BusyContext.d.ts.map +1 -0
  59. package/dist/components/feedback/busy/BusyContext.js +14 -0
  60. package/dist/components/feedback/busy/BusyContext.js.map +6 -0
  61. package/dist/components/feedback/busy/BusyProvider.d.ts +7 -0
  62. package/dist/components/feedback/busy/BusyProvider.d.ts.map +1 -0
  63. package/dist/components/feedback/{loading/LoadingProvider.js → busy/BusyProvider.js} +7 -7
  64. package/dist/components/feedback/busy/BusyProvider.js.map +6 -0
  65. package/dist/components/feedback/notification/NotificationBanner.d.ts.map +1 -1
  66. package/dist/components/feedback/notification/NotificationBanner.js.map +1 -1
  67. package/dist/components/feedback/notification/NotificationBell.d.ts.map +1 -1
  68. package/dist/components/feedback/notification/NotificationBell.js.map +1 -1
  69. package/dist/components/feedback/notification/NotificationContext.d.ts.map +1 -1
  70. package/dist/components/feedback/notification/NotificationContext.js.map +1 -1
  71. package/dist/components/feedback/notification/NotificationProvider.d.ts.map +1 -1
  72. package/dist/components/feedback/notification/NotificationProvider.js.map +1 -1
  73. package/dist/components/form-control/Button.d.ts.map +1 -1
  74. package/dist/components/form-control/Button.js +2 -2
  75. package/dist/components/form-control/Button.js.map +1 -1
  76. package/dist/components/form-control/DropdownTrigger.styles.d.ts.map +1 -1
  77. package/dist/components/form-control/DropdownTrigger.styles.js +6 -1
  78. package/dist/components/form-control/DropdownTrigger.styles.js.map +1 -1
  79. package/dist/components/form-control/Invalid.d.ts.map +1 -1
  80. package/dist/components/form-control/Invalid.js +1 -1
  81. package/dist/components/form-control/Invalid.js.map +1 -1
  82. package/dist/components/form-control/ThemeToggle.d.ts.map +1 -1
  83. package/dist/components/form-control/ThemeToggle.js.map +1 -1
  84. package/dist/components/form-control/checkbox/Checkbox.styles.d.ts.map +1 -1
  85. package/dist/components/form-control/checkbox/Checkbox.styles.js +5 -1
  86. package/dist/components/form-control/checkbox/Checkbox.styles.js.map +1 -1
  87. package/dist/components/form-control/color-picker/ColorPicker.d.ts.map +1 -1
  88. package/dist/components/form-control/color-picker/ColorPicker.js.map +1 -1
  89. package/dist/components/form-control/combobox/Combobox.d.ts.map +1 -1
  90. package/dist/components/form-control/combobox/Combobox.js +5 -5
  91. package/dist/components/form-control/combobox/Combobox.js.map +2 -2
  92. package/dist/components/form-control/editor/EditorToolbar.d.ts.map +1 -1
  93. package/dist/components/form-control/editor/EditorToolbar.js.map +1 -1
  94. package/dist/components/form-control/editor/RichTextEditor.d.ts.map +1 -1
  95. package/dist/components/form-control/editor/RichTextEditor.js.map +1 -1
  96. package/dist/components/form-control/field/DatePicker.d.ts.map +1 -1
  97. package/dist/components/form-control/field/DatePicker.js.map +1 -1
  98. package/dist/components/form-control/field/DateTimePicker.d.ts.map +1 -1
  99. package/dist/components/form-control/field/DateTimePicker.js.map +1 -1
  100. package/dist/components/form-control/field/Field.styles.d.ts.map +1 -1
  101. package/dist/components/form-control/field/Field.styles.js +17 -3
  102. package/dist/components/form-control/field/Field.styles.js.map +1 -1
  103. package/dist/components/form-control/field/NumberInput.d.ts +3 -0
  104. package/dist/components/form-control/field/NumberInput.d.ts.map +1 -1
  105. package/dist/components/form-control/field/NumberInput.js +23 -5
  106. package/dist/components/form-control/field/NumberInput.js.map +2 -2
  107. package/dist/components/form-control/field/TextInput.d.ts +4 -1
  108. package/dist/components/form-control/field/TextInput.d.ts.map +1 -1
  109. package/dist/components/form-control/field/TextInput.js +23 -6
  110. package/dist/components/form-control/field/TextInput.js.map +2 -2
  111. package/dist/components/form-control/field/Textarea.d.ts.map +1 -1
  112. package/dist/components/form-control/field/Textarea.js.map +1 -1
  113. package/dist/components/form-control/field/TimePicker.d.ts.map +1 -1
  114. package/dist/components/form-control/field/TimePicker.js.map +1 -1
  115. package/dist/components/form-control/select/Select.d.ts.map +1 -1
  116. package/dist/components/form-control/select/Select.js.map +1 -1
  117. package/dist/components/form-control/select/SelectItem.d.ts.map +1 -1
  118. package/dist/components/form-control/select/SelectItem.js.map +1 -1
  119. package/dist/components/form-control/state-preset/StatePreset.d.ts.map +1 -1
  120. package/dist/components/form-control/state-preset/StatePreset.js.map +1 -1
  121. package/dist/components/layout/FormGroup.d.ts.map +1 -1
  122. package/dist/components/layout/FormGroup.js.map +1 -1
  123. package/dist/components/layout/sidebar/Sidebar.d.ts.map +1 -1
  124. package/dist/components/layout/sidebar/Sidebar.js +1 -1
  125. package/dist/components/layout/sidebar/Sidebar.js.map +1 -1
  126. package/dist/components/layout/sidebar/SidebarContainer.d.ts.map +1 -1
  127. package/dist/components/layout/sidebar/SidebarContainer.js.map +1 -1
  128. package/dist/components/layout/sidebar/SidebarMenu.js.map +1 -1
  129. package/dist/components/layout/sidebar/SidebarUser.d.ts.map +1 -1
  130. package/dist/components/layout/sidebar/SidebarUser.js +2 -2
  131. package/dist/components/layout/sidebar/SidebarUser.js.map +1 -1
  132. package/dist/components/layout/topbar/Topbar.js +1 -1
  133. package/dist/components/layout/topbar/TopbarMenu.d.ts.map +1 -1
  134. package/dist/components/layout/topbar/TopbarMenu.js.map +1 -1
  135. package/dist/components/layout/topbar/TopbarUser.d.ts.map +1 -1
  136. package/dist/components/layout/topbar/TopbarUser.js.map +1 -1
  137. package/dist/helpers/createAppStructure.d.ts.map +1 -1
  138. package/dist/helpers/createAppStructure.js +17 -12
  139. package/dist/helpers/createAppStructure.js.map +1 -1
  140. package/dist/helpers/mergeStyles.d.ts.map +1 -1
  141. package/dist/helpers/mergeStyles.js +4 -1
  142. package/dist/helpers/mergeStyles.js.map +1 -1
  143. package/dist/helpers/splitSlots.d.ts.map +1 -1
  144. package/dist/helpers/splitSlots.js.map +1 -1
  145. package/dist/hooks/createControllableSignal.d.ts.map +1 -1
  146. package/dist/hooks/createControllableSignal.js.map +1 -1
  147. package/dist/hooks/useClipboardValueCopy.js +3 -1
  148. package/dist/hooks/useClipboardValueCopy.js.map +1 -1
  149. package/dist/hooks/useLocalStorage.d.ts.map +1 -1
  150. package/dist/hooks/useLocalStorage.js.map +1 -1
  151. package/dist/hooks/usePrint.d.ts.map +1 -1
  152. package/dist/hooks/usePrint.js +5 -3
  153. package/dist/hooks/usePrint.js.map +1 -1
  154. package/dist/hooks/useRouterLink.d.ts.map +1 -1
  155. package/dist/hooks/useRouterLink.js.map +1 -1
  156. package/dist/hooks/useSyncConfig.d.ts +3 -3
  157. package/dist/hooks/useSyncConfig.js +4 -4
  158. package/dist/hooks/useSyncConfig.js.map +1 -1
  159. package/dist/index.d.ts +4 -3
  160. package/dist/index.d.ts.map +1 -1
  161. package/dist/index.js +4 -3
  162. package/dist/index.js.map +1 -1
  163. package/dist/providers/ConfigContext.d.ts +2 -2
  164. package/dist/providers/ConfigContext.d.ts.map +1 -1
  165. package/dist/providers/InitializeProvider.js +3 -3
  166. package/dist/providers/InitializeProvider.js.map +2 -2
  167. package/dist/providers/ServiceClientProvider.d.ts.map +1 -1
  168. package/dist/providers/ServiceClientProvider.js.map +1 -1
  169. package/dist/providers/ThemeContext.d.ts.map +1 -1
  170. package/dist/providers/ThemeContext.js.map +1 -1
  171. package/dist/providers/shared-data/SharedDataChangeEvent.d.ts.map +1 -1
  172. package/dist/providers/shared-data/SharedDataChangeEvent.js +1 -3
  173. package/dist/providers/shared-data/SharedDataChangeEvent.js.map +1 -1
  174. package/dist/providers/shared-data/SharedDataContext.d.ts +1 -1
  175. package/dist/providers/shared-data/SharedDataContext.d.ts.map +1 -1
  176. package/dist/providers/shared-data/SharedDataProvider.d.ts.map +1 -1
  177. package/dist/providers/shared-data/SharedDataProvider.js +6 -6
  178. package/dist/providers/shared-data/SharedDataProvider.js.map +2 -2
  179. package/dist/styles/patterns.styles.js +1 -1
  180. package/dist/styles/tokens.styles.d.ts +1 -1
  181. package/dist/styles/tokens.styles.js +1 -1
  182. package/docs/display.md +19 -2
  183. package/docs/feedback.md +10 -10
  184. package/docs/hooks.md +6 -6
  185. package/docs/layout.md +3 -3
  186. package/docs/providers.md +1 -1
  187. package/package.json +3 -3
  188. package/src/components/data/Pagination.tsx +6 -1
  189. package/src/components/data/calendar/Calendar.tsx +18 -4
  190. package/src/components/data/kanban/Kanban.tsx +62 -18
  191. package/src/components/data/list/List.tsx +11 -4
  192. package/src/components/data/list/ListItem.tsx +12 -2
  193. package/src/components/data/permission-table/PermissionTable.tsx +32 -5
  194. package/src/components/data/sheet/DataSheet.styles.ts +23 -5
  195. package/src/components/data/sheet/DataSheet.tsx +100 -25
  196. package/src/components/data/sheet/DataSheetColumn.tsx +5 -1
  197. package/src/components/data/sheet/DataSheetConfigDialog.tsx +27 -5
  198. package/src/components/data/sheet/sheetUtils.ts +12 -3
  199. package/src/components/disclosure/Collapse.tsx +14 -3
  200. package/src/components/disclosure/Dialog.tsx +35 -6
  201. package/src/components/disclosure/DialogContext.ts +4 -1
  202. package/src/components/disclosure/DialogProvider.tsx +15 -3
  203. package/src/components/disclosure/Dropdown.tsx +12 -2
  204. package/src/components/disclosure/Tabs.tsx +29 -5
  205. package/src/components/display/Alert.tsx +3 -4
  206. package/src/components/display/Card.tsx +1 -2
  207. package/src/components/display/Echarts.tsx +12 -5
  208. package/src/components/display/Link.tsx +22 -0
  209. package/src/components/feedback/{loading/LoadingContainer.tsx → busy/BusyContainer.tsx} +43 -14
  210. package/src/components/feedback/busy/BusyContext.ts +20 -0
  211. package/src/components/feedback/{loading/LoadingProvider.tsx → busy/BusyProvider.tsx} +10 -10
  212. package/src/components/feedback/notification/NotificationBanner.tsx +13 -2
  213. package/src/components/feedback/notification/NotificationBell.tsx +17 -3
  214. package/src/components/feedback/notification/NotificationContext.ts +4 -1
  215. package/src/components/feedback/notification/NotificationProvider.tsx +3 -1
  216. package/src/components/form-control/Button.tsx +8 -3
  217. package/src/components/form-control/DropdownTrigger.styles.ts +7 -1
  218. package/src/components/form-control/Invalid.tsx +5 -1
  219. package/src/components/form-control/ThemeToggle.tsx +6 -2
  220. package/src/components/form-control/checkbox/Checkbox.styles.ts +5 -1
  221. package/src/components/form-control/color-picker/ColorPicker.tsx +15 -2
  222. package/src/components/form-control/combobox/Combobox.tsx +16 -8
  223. package/src/components/form-control/editor/EditorToolbar.tsx +16 -5
  224. package/src/components/form-control/editor/RichTextEditor.tsx +22 -4
  225. package/src/components/form-control/field/DatePicker.tsx +5 -1
  226. package/src/components/form-control/field/DateTimePicker.tsx +8 -1
  227. package/src/components/form-control/field/Field.styles.ts +17 -3
  228. package/src/components/form-control/field/NumberInput.tsx +24 -0
  229. package/src/components/form-control/field/TextInput.tsx +28 -5
  230. package/src/components/form-control/field/Textarea.tsx +2 -1
  231. package/src/components/form-control/field/TimePicker.tsx +5 -1
  232. package/src/components/form-control/select/Select.tsx +32 -7
  233. package/src/components/form-control/select/SelectItem.tsx +3 -1
  234. package/src/components/form-control/state-preset/StatePreset.tsx +39 -14
  235. package/src/components/layout/FormGroup.tsx +11 -2
  236. package/src/components/layout/sidebar/Sidebar.tsx +3 -2
  237. package/src/components/layout/sidebar/SidebarContainer.tsx +8 -1
  238. package/src/components/layout/sidebar/SidebarMenu.tsx +7 -1
  239. package/src/components/layout/sidebar/SidebarUser.tsx +9 -4
  240. package/src/components/layout/topbar/Topbar.tsx +1 -1
  241. package/src/components/layout/topbar/TopbarMenu.tsx +27 -5
  242. package/src/components/layout/topbar/TopbarUser.tsx +5 -1
  243. package/src/helpers/createAppStructure.ts +29 -15
  244. package/src/helpers/mergeStyles.ts +6 -2
  245. package/src/helpers/splitSlots.ts +4 -1
  246. package/src/hooks/createControllableSignal.ts +2 -1
  247. package/src/hooks/useClipboardValueCopy.ts +5 -2
  248. package/src/hooks/useLocalStorage.ts +3 -1
  249. package/src/hooks/usePrint.ts +9 -4
  250. package/src/hooks/useRouterLink.ts +3 -1
  251. package/src/hooks/useSyncConfig.ts +7 -7
  252. package/src/index.ts +5 -4
  253. package/src/providers/ConfigContext.ts +2 -2
  254. package/src/providers/InitializeProvider.tsx +2 -2
  255. package/src/providers/ServiceClientProvider.tsx +14 -3
  256. package/src/providers/ThemeContext.tsx +10 -2
  257. package/src/providers/shared-data/SharedDataChangeEvent.ts +4 -3
  258. package/src/providers/shared-data/SharedDataContext.ts +1 -1
  259. package/src/providers/shared-data/SharedDataProvider.tsx +13 -8
  260. package/src/styles/patterns.styles.ts +1 -1
  261. package/src/styles/tokens.styles.ts +1 -1
  262. package/tailwind.config.ts +9 -0
  263. package/tailwind.css +1 -1
  264. package/dist/components/display/Card.css +0 -15
  265. package/dist/components/feedback/loading/LoadingContainer.d.ts +0 -12
  266. package/dist/components/feedback/loading/LoadingContainer.d.ts.map +0 -1
  267. package/dist/components/feedback/loading/LoadingContainer.js.map +0 -6
  268. package/dist/components/feedback/loading/LoadingContext.d.ts +0 -11
  269. package/dist/components/feedback/loading/LoadingContext.d.ts.map +0 -1
  270. package/dist/components/feedback/loading/LoadingContext.js +0 -14
  271. package/dist/components/feedback/loading/LoadingContext.js.map +0 -6
  272. package/dist/components/feedback/loading/LoadingProvider.d.ts +0 -7
  273. package/dist/components/feedback/loading/LoadingProvider.d.ts.map +0 -1
  274. package/dist/components/feedback/loading/LoadingProvider.js.map +0 -6
  275. package/src/components/display/Card.css +0 -15
  276. package/src/components/feedback/loading/LoadingContext.ts +0 -20
  277. /package/dist/components/feedback/{loading/LoadingContainer.css → busy/BusyContainer.css} +0 -0
  278. /package/src/components/feedback/{loading/LoadingContainer.css → busy/BusyContainer.css} +0 -0
@@ -1,4 +1,4 @@
1
- import { type Accessor, createMemo } from "solid-js";
1
+ import { type Accessor, createMemo, createRoot } from "solid-js";
2
2
  import type { Component } from "solid-js";
3
3
  import type { IconProps } from "@tabler/icons-solidjs";
4
4
  import type { SidebarMenuItem } from "../components/layout/sidebar/SidebarMenu";
@@ -26,7 +26,9 @@ export interface AppStructureLeafItem<TModule> {
26
26
  isNotMenu?: boolean;
27
27
  }
28
28
 
29
- export type AppStructureItem<TModule> = AppStructureGroupItem<TModule> | AppStructureLeafItem<TModule>;
29
+ export type AppStructureItem<TModule> =
30
+ | AppStructureGroupItem<TModule>
31
+ | AppStructureLeafItem<TModule>;
30
32
 
31
33
  export interface AppStructureSubPerm<TModule> {
32
34
  code: string;
@@ -59,7 +61,9 @@ export interface AppStructure<TModule> {
59
61
 
60
62
  // ── 내부 헬퍼 ──
61
63
 
62
- function isGroupItem<TModule>(item: AppStructureItem<TModule>): item is AppStructureGroupItem<TModule> {
64
+ function isGroupItem<TModule>(
65
+ item: AppStructureItem<TModule>,
66
+ ): item is AppStructureGroupItem<TModule> {
63
67
  return "children" in item;
64
68
  }
65
69
 
@@ -81,7 +85,11 @@ function checkModules<TModule>(
81
85
  return true;
82
86
  }
83
87
 
84
- function collectRoutes<TModule>(items: AppStructureItem<TModule>[], parentCodes: string[], routes: AppRoute[]): void {
88
+ function collectRoutes<TModule>(
89
+ items: AppStructureItem<TModule>[],
90
+ parentCodes: string[],
91
+ routes: AppRoute[],
92
+ ): void {
85
93
  for (const item of items) {
86
94
  const codes = [...parentCodes, item.code];
87
95
 
@@ -179,23 +187,29 @@ export function createAppStructure<TModule>(opts: {
179
187
 
180
188
  const routes = extractRoutes(opts.items);
181
189
 
182
- const usableMenus = createMemo(() => {
183
- const menus: SidebarMenuItem[] = [];
184
- for (const top of opts.items) {
185
- if (isGroupItem(top)) {
186
- menus.push(...buildMenus(top.children, "/" + top.code, opts.usableModules?.(), permRecord()));
190
+ const memos = createRoot(() => {
191
+ const usableMenus = createMemo(() => {
192
+ const menus: SidebarMenuItem[] = [];
193
+ for (const top of opts.items) {
194
+ if (isGroupItem(top)) {
195
+ menus.push(
196
+ ...buildMenus(top.children, "/" + top.code, opts.usableModules?.(), permRecord()),
197
+ );
198
+ }
187
199
  }
188
- }
189
- return menus;
190
- });
200
+ return menus;
201
+ });
191
202
 
192
- const usableFlatMenus = createMemo(() => flattenMenus(usableMenus()));
203
+ const usableFlatMenus = createMemo(() => flattenMenus(usableMenus()));
204
+
205
+ return { usableMenus, usableFlatMenus };
206
+ });
193
207
 
194
208
  return {
195
209
  items: opts.items,
196
210
  routes,
197
- usableMenus,
198
- usableFlatMenus,
211
+ usableMenus: memos.usableMenus,
212
+ usableFlatMenus: memos.usableFlatMenus,
199
213
  permRecord,
200
214
  getTitleChainByHref(href: string): string[] {
201
215
  const codes = href.split("/").filter(Boolean);
@@ -24,7 +24,9 @@ import { type JSX } from "solid-js";
24
24
  * // => { color: "red", background: "blue" }
25
25
  * ```
26
26
  */
27
- export function mergeStyles(...styles: (JSX.CSSProperties | string | undefined)[]): JSX.CSSProperties {
27
+ export function mergeStyles(
28
+ ...styles: (JSX.CSSProperties | string | undefined)[]
29
+ ): JSX.CSSProperties {
28
30
  const result: Record<string, string> = {};
29
31
 
30
32
  for (const style of styles) {
@@ -41,7 +43,9 @@ export function mergeStyles(...styles: (JSX.CSSProperties | string | undefined)[
41
43
  const value = declaration.slice(colonIndex + 1).trim();
42
44
  if (property && value) {
43
45
  // kebab-case를 camelCase로 변환
44
- const camelProperty = property.replace(/-([a-z])/g, (_, letter: string) => letter.toUpperCase());
46
+ const camelProperty = property.replace(/-([a-z])/g, (_, letter: string) =>
47
+ letter.toUpperCase(),
48
+ );
45
49
  result[camelProperty] = value;
46
50
  }
47
51
  }
@@ -26,7 +26,10 @@ export function splitSlots<K extends string>(
26
26
  ): [Accessor<Record<K, HTMLElement[]>>, Accessor<JSX.Element[]>] {
27
27
  const memo = createMemo(() => {
28
28
  const arr = resolved.toArray();
29
- const result = Object.fromEntries(keys.map((k) => [k, []])) as unknown as Record<K, HTMLElement[]>;
29
+ const result = Object.fromEntries(keys.map((k) => [k, []])) as unknown as Record<
30
+ K,
31
+ HTMLElement[]
32
+ >;
30
33
  const content: JSX.Element[] = [];
31
34
 
32
35
  for (const c of arr) {
@@ -50,7 +50,8 @@ export function createControllableSignal<TValue>(options: {
50
50
  const isControlled = () => options.onChange() !== undefined;
51
51
  const value = () => (isControlled() ? options.value() : internalValue());
52
52
  const setValue = (newValue: TValue | ((prev: TValue) => TValue)) => {
53
- const resolved = typeof newValue === "function" ? (newValue as (prev: TValue) => TValue)(value()) : newValue;
53
+ const resolved =
54
+ typeof newValue === "function" ? (newValue as (prev: TValue) => TValue)(value()) : newValue;
54
55
 
55
56
  if (isControlled()) {
56
57
  options.onChange()?.(resolved);
@@ -46,8 +46,11 @@ function extractTextFromRange(range: Range): string | null {
46
46
  if (!root) return null;
47
47
 
48
48
  // 선택 범위에 폼 컨트롤이 없으면 브라우저 기본 동작 사용
49
- const formSelector = 'input:not([type=hidden]), textarea, select, [role="checkbox"], [role="radio"]';
50
- const hasFormElements = [...root.querySelectorAll(formSelector)].some((el) => range.intersectsNode(el));
49
+ const formSelector =
50
+ 'input:not([type=hidden]), textarea, select, [role="checkbox"], [role="radio"]';
51
+ const hasFormElements = [...root.querySelectorAll(formSelector)].some((el) =>
52
+ range.intersectsNode(el),
53
+ );
51
54
  if (!hasFormElements) return null;
52
55
 
53
56
  const parts: string[] = [];
@@ -47,7 +47,9 @@ export function useLocalStorage<TValue>(
47
47
 
48
48
  const [value, setValue] = createSignal<TValue | undefined>(storedValue);
49
49
 
50
- const setAndStore = (newValue: TValue | undefined | ((prev: TValue | undefined) => TValue | undefined)) => {
50
+ const setAndStore = (
51
+ newValue: TValue | undefined | ((prev: TValue | undefined) => TValue | undefined),
52
+ ) => {
51
53
  let resolved: TValue | undefined;
52
54
 
53
55
  if (typeof newValue === "function") {
@@ -2,8 +2,11 @@ import type { JSX } from "solid-js";
2
2
  import { render } from "solid-js/web";
3
3
  import { jsPDF } from "jspdf";
4
4
  import * as htmlToImage from "html-to-image";
5
- import { useLoading } from "../components/feedback/loading/LoadingContext";
6
- import { PrintInstanceContext, type PrintInstance } from "../components/feedback/print/PrintInstanceContext";
5
+ import { useBusy } from "../components/feedback/busy/BusyContext";
6
+ import {
7
+ PrintInstanceContext,
8
+ type PrintInstance,
9
+ } from "../components/feedback/print/PrintInstanceContext";
7
10
 
8
11
  // --- Types ---
9
12
 
@@ -74,7 +77,9 @@ function waitForImages(container: HTMLElement): Promise<void> {
74
77
  ).then(() => undefined);
75
78
  }
76
79
 
77
- async function renderAndWait(factory: () => JSX.Element): Promise<{ container: HTMLElement; dispose: () => void }> {
80
+ async function renderAndWait(
81
+ factory: () => JSX.Element,
82
+ ): Promise<{ container: HTMLElement; dispose: () => void }> {
78
83
  const container = document.createElement("div");
79
84
  container.style.position = "fixed";
80
85
  container.style.left = "-9999px";
@@ -129,7 +134,7 @@ async function renderAndWait(factory: () => JSX.Element): Promise<{ container: H
129
134
  // --- Hook ---
130
135
 
131
136
  export function usePrint(): UsePrintReturn {
132
- const busy = useLoading();
137
+ const busy = useBusy();
133
138
 
134
139
  const toPrinter = async (factory: () => JSX.Element, options?: PrintOptions): Promise<void> => {
135
140
  busy.show();
@@ -39,7 +39,9 @@ export interface RouterLinkOptions {
39
39
  * </ListItem>
40
40
  * ```
41
41
  */
42
- export function useRouterLink(): (options: RouterLinkOptions) => (e: MouseEvent | KeyboardEvent) => void {
42
+ export function useRouterLink(): (
43
+ options: RouterLinkOptions,
44
+ ) => (e: MouseEvent | KeyboardEvent) => void {
43
45
  const navigate = useNavigate();
44
46
 
45
47
  return (options: RouterLinkOptions) => {
@@ -9,13 +9,13 @@ import { useConfig } from "../providers/ConfigContext";
9
9
  *
10
10
  * @param key - Storage key for the config value
11
11
  * @param defaultValue - Default value if no stored value exists
12
- * @returns Tuple of [value accessor, value setter, loading state accessor]
12
+ * @returns Tuple of [value accessor, value setter, busy state accessor]
13
13
  *
14
14
  * @example
15
15
  * ```tsx
16
- * const [theme, setTheme, loading] = useSyncConfig("user-theme", "light");
16
+ * const [theme, setTheme, busy] = useSyncConfig("user-theme", "light");
17
17
  *
18
- * <Show when={!loading()}>
18
+ * <Show when={!busy()}>
19
19
  * <button onClick={() => setTheme(theme() === "light" ? "dark" : "light")}>
20
20
  * Toggle theme
21
21
  * </button>
@@ -29,7 +29,7 @@ export function useSyncConfig<TValue>(
29
29
  const config = useConfig();
30
30
  const prefixedKey = `${config.clientName}.${key}`;
31
31
  const [value, setValue] = createSignal<TValue>(defaultValue);
32
- const [loading, setLoading] = createSignal(false);
32
+ const [busy, setBusy] = createSignal(false);
33
33
 
34
34
  // Initialize from storage
35
35
  const initializeFromStorage = async () => {
@@ -47,7 +47,7 @@ export function useSyncConfig<TValue>(
47
47
  }
48
48
 
49
49
  // Use syncStorage asynchronously
50
- setLoading(true);
50
+ setBusy(true);
51
51
  try {
52
52
  const stored = await config.syncStorage.getItem(prefixedKey);
53
53
  if (stored !== null) {
@@ -64,7 +64,7 @@ export function useSyncConfig<TValue>(
64
64
  // Ignore parse errors
65
65
  }
66
66
  } finally {
67
- setLoading(false);
67
+ setBusy(false);
68
68
  }
69
69
  };
70
70
 
@@ -98,5 +98,5 @@ export function useSyncConfig<TValue>(
98
98
  // No cleanup needed for storage operations
99
99
  });
100
100
 
101
- return [value, setValue, loading];
101
+ return [value, setValue, busy];
102
102
  }
package/src/index.ts CHANGED
@@ -72,6 +72,7 @@ export * from "./components/display/Card";
72
72
  export * from "./components/display/Echarts";
73
73
  export * from "./components/display/Icon";
74
74
  export * from "./components/display/Tag";
75
+ export * from "./components/display/Link";
75
76
  export * from "./components/display/Alert";
76
77
 
77
78
  //#endregion
@@ -96,10 +97,10 @@ export * from "./components/feedback/notification/NotificationBell";
96
97
  export * from "./components/feedback/notification/NotificationProvider";
97
98
  export * from "./components/feedback/notification/NotificationBanner";
98
99
 
99
- // Loading
100
- export * from "./components/feedback/loading/LoadingContext";
101
- export * from "./components/feedback/loading/LoadingContainer";
102
- export * from "./components/feedback/loading/LoadingProvider";
100
+ // Busy
101
+ export * from "./components/feedback/busy/BusyContext";
102
+ export * from "./components/feedback/busy/BusyContainer";
103
+ export * from "./components/feedback/busy/BusyProvider";
103
104
 
104
105
  // Print
105
106
  export * from "./components/feedback/print/Print";
@@ -44,9 +44,9 @@ export interface AppConfig {
44
44
  logger?: LogAdapter;
45
45
 
46
46
  /**
47
- * 루트 로딩 오버레이 변형 (기본값: "spinner")
47
+ * 루트 busy 오버레이 변형 (기본값: "spinner")
48
48
  */
49
- loadingVariant?: "spinner" | "bar";
49
+ busyVariant?: "spinner" | "bar";
50
50
  }
51
51
 
52
52
  /**
@@ -5,7 +5,7 @@ import { useClipboardValueCopy } from "../hooks/useClipboardValueCopy";
5
5
  import { ThemeProvider } from "./ThemeContext";
6
6
  import { NotificationProvider } from "../components/feedback/notification/NotificationProvider";
7
7
  import { NotificationBanner } from "../components/feedback/notification/NotificationBanner";
8
- import { LoadingProvider } from "../components/feedback/loading/LoadingProvider";
8
+ import { BusyProvider } from "../components/feedback/busy/BusyProvider";
9
9
 
10
10
  import { createPwaUpdate } from "../hooks/createPwaUpdate";
11
11
  import { useLogger } from "../hooks/useLogger";
@@ -70,7 +70,7 @@ export const InitializeProvider: ParentComponent<{ config: AppConfig }> = (props
70
70
  <NotificationBanner />
71
71
  <GlobalErrorLogger />
72
72
  <PwaUpdater />
73
- <LoadingProvider variant={props.config.loadingVariant}>{props.children}</LoadingProvider>
73
+ <BusyProvider variant={props.config.busyVariant}>{props.children}</BusyProvider>
74
74
  </NotificationProvider>
75
75
  </ThemeProvider>
76
76
  </ConfigContext.Provider>
@@ -1,5 +1,9 @@
1
1
  import { type ParentComponent, onCleanup } from "solid-js";
2
- import { createServiceClient, type ServiceClient, type ServiceConnectionConfig } from "@simplysm/service-client";
2
+ import {
3
+ createServiceClient,
4
+ type ServiceClient,
5
+ type ServiceConnectionConfig,
6
+ } from "@simplysm/service-client";
3
7
  import { ServiceClientContext, type ServiceClientContextValue } from "./ServiceClientContext";
4
8
  import { useConfig } from "./ConfigContext";
5
9
  import { useNotification } from "../components/feedback/notification/NotificationContext";
@@ -19,7 +23,10 @@ export const ServiceClientProvider: ParentComponent = (props) => {
19
23
  clientMap.clear();
20
24
  });
21
25
 
22
- const connect = async (key: string, options?: Partial<ServiceConnectionConfig>): Promise<void> => {
26
+ const connect = async (
27
+ key: string,
28
+ options?: Partial<ServiceConnectionConfig>,
29
+ ): Promise<void> => {
23
30
  if (clientMap.has(key)) {
24
31
  const existing = clientMap.get(key)!;
25
32
  if (!existing.connected) {
@@ -128,5 +135,9 @@ export const ServiceClientProvider: ParentComponent = (props) => {
128
135
  isConnected,
129
136
  };
130
137
 
131
- return <ServiceClientContext.Provider value={contextValue}>{props.children}</ServiceClientContext.Provider>;
138
+ return (
139
+ <ServiceClientContext.Provider value={contextValue}>
140
+ {props.children}
141
+ </ServiceClientContext.Provider>
142
+ );
132
143
  };
@@ -1,4 +1,11 @@
1
- import { createContext, useContext, type ParentComponent, createMemo, createEffect, onCleanup } from "solid-js";
1
+ import {
2
+ createContext,
3
+ useContext,
4
+ type ParentComponent,
5
+ createMemo,
6
+ createEffect,
7
+ onCleanup,
8
+ } from "solid-js";
2
9
  import { createMediaQuery } from "@solid-primitives/media";
3
10
  import { useSyncConfig } from "../hooks/useSyncConfig";
4
11
 
@@ -95,7 +102,8 @@ export const ThemeProvider: ParentComponent = (props) => {
95
102
  // 다음 모드로 순환
96
103
  const cycleMode = () => {
97
104
  const current = mode();
98
- const next: ThemeMode = current === "light" ? "system" : current === "system" ? "dark" : "light";
105
+ const next: ThemeMode =
106
+ current === "light" ? "system" : current === "system" ? "dark" : "light";
99
107
  setMode(next);
100
108
  };
101
109
 
@@ -1,5 +1,6 @@
1
1
  import { defineEvent } from "@simplysm/service-common";
2
2
 
3
- export const SharedDataChangeEvent = defineEvent<{ name: string; filter: unknown }, (string | number)[] | undefined>(
4
- "SharedDataChangeEvent",
5
- );
3
+ export const SharedDataChangeEvent = defineEvent<
4
+ { name: string; filter: unknown },
5
+ (string | number)[] | undefined
6
+ >("SharedDataChangeEvent");
@@ -18,7 +18,7 @@ export type SharedDataValue<TSharedData extends Record<string, unknown>> = {
18
18
  [K in keyof TSharedData]: SharedDataAccessor<TSharedData[K]>;
19
19
  } & {
20
20
  wait: () => Promise<void>;
21
- loading: Accessor<boolean>;
21
+ busy: Accessor<boolean>;
22
22
  };
23
23
 
24
24
  export const SharedDataContext = createContext<SharedDataValue<Record<string, unknown>>>();
@@ -19,8 +19,8 @@ export function SharedDataProvider<TSharedData extends Record<string, unknown>>(
19
19
  const notification = useNotification();
20
20
  const logger = useLogger();
21
21
 
22
- const [loadingCount, setLoadingCount] = createSignal(0);
23
- const loading: Accessor<boolean> = () => loadingCount() > 0;
22
+ const [busyCount, setBusyCount] = createSignal(0);
23
+ const busy: Accessor<boolean> = () => busyCount() > 0;
24
24
 
25
25
  const signalMap = new Map<string, ReturnType<typeof createSignal<unknown[]>>>();
26
26
  const memoMap = new Map<string, Accessor<Map<string | number, unknown>>>();
@@ -49,7 +49,7 @@ export function SharedDataProvider<TSharedData extends Record<string, unknown>>(
49
49
  const currentVersion = (versionMap.get(name) ?? 0) + 1;
50
50
  versionMap.set(name, currentVersion);
51
51
 
52
- setLoadingCount((c) => c + 1);
52
+ setBusyCount((c) => c + 1);
53
53
  try {
54
54
  const signal = signalMap.get(name);
55
55
  if (!signal) throw new Error(`'${name}'에 대한 공유데이터 저장소가 없습니다.`);
@@ -77,19 +77,22 @@ export function SharedDataProvider<TSharedData extends Record<string, unknown>>(
77
77
  err instanceof Error ? err.message : `'${name}' 데이터를 불러오는 중 오류가 발생했습니다.`,
78
78
  );
79
79
  } finally {
80
- setLoadingCount((c) => c - 1);
80
+ setBusyCount((c) => c - 1);
81
81
  }
82
82
  }
83
83
 
84
84
  async function wait(): Promise<void> {
85
85
  // eslint-disable-next-line solid/reactivity -- waitUntil은 폴링 기반이므로 tracked scope 불필요
86
- await waitUntil(() => loadingCount() <= 0);
86
+ await waitUntil(() => busyCount() <= 0);
87
87
  }
88
88
 
89
89
  const accessors: Record<string, SharedDataAccessor<unknown>> = {};
90
90
 
91
91
  // eslint-disable-next-line solid/reactivity -- definitions는 초기 설정용으로 마운트 시 1회만 읽음
92
- for (const [name, def] of Object.entries(props.definitions) as [string, SharedDataDefinition<unknown>][]) {
92
+ for (const [name, def] of Object.entries(props.definitions) as [
93
+ string,
94
+ SharedDataDefinition<unknown>,
95
+ ][]) {
93
96
  const [items, setItems] = createSignal<unknown[]>([]);
94
97
  // eslint-disable-next-line solid/reactivity -- signal 참조를 Map에 저장하는 것은 반응성 접근이 아님
95
98
  signalMap.set(name, [items, setItems]);
@@ -145,8 +148,10 @@ export function SharedDataProvider<TSharedData extends Record<string, unknown>>(
145
148
  const contextValue = {
146
149
  ...accessors,
147
150
  wait,
148
- loading,
151
+ busy,
149
152
  } as SharedDataValue<Record<string, unknown>>;
150
153
 
151
- return <SharedDataContext.Provider value={contextValue}>{props.children}</SharedDataContext.Provider>;
154
+ return (
155
+ <SharedDataContext.Provider value={contextValue}>{props.children}</SharedDataContext.Provider>
156
+ );
152
157
  }
@@ -25,7 +25,7 @@ export const fieldSurface = clsx(
25
25
  "border",
26
26
  borderDefault,
27
27
  "rounded",
28
- "focus-within:border-primary-500",
28
+ "focus-within:border-primary-500 dark:focus-within:border-primary-400",
29
29
  );
30
30
 
31
31
  // ── 입력 요소 공통 ──
@@ -1,6 +1,6 @@
1
1
  // ── 테두리 ──
2
2
  export const borderDefault = "border-base-300 dark:border-base-700";
3
- export const borderSubtle = "border-base-200 dark:border-base-800";
3
+ export const borderSubtle = "border-base-200 dark:border-base-700";
4
4
 
5
5
  // ── 표면 배경 ──
6
6
  export const bgSurface = "bg-white dark:bg-base-900";
@@ -35,6 +35,15 @@ export default {
35
35
  },
36
36
  height: fieldSizes,
37
37
  size: fieldSizes,
38
+ keyframes: {
39
+ "fade-in": {
40
+ from: { opacity: "0", transform: "translateY(-1rem)" },
41
+ to: { opacity: "1", transform: "translateY(0)" },
42
+ },
43
+ },
44
+ animation: {
45
+ "fade-in": "fade-in 0.6s ease-out both",
46
+ },
38
47
  zIndex: {
39
48
  "sidebar": "100",
40
49
  "sidebar-backdrop": "99",
package/tailwind.css CHANGED
@@ -8,7 +8,7 @@
8
8
  }
9
9
 
10
10
  html.dark {
11
- @apply bg-base-950 text-base-100;
11
+ @apply bg-base-900 text-base-100;
12
12
  }
13
13
 
14
14
  html,
@@ -1,15 +0,0 @@
1
- @keyframes card-in {
2
- from {
3
- opacity: 0;
4
- transform: translateY(-1rem);
5
- }
6
-
7
- to {
8
- opacity: 1;
9
- transform: none;
10
- }
11
- }
12
-
13
- .animate-card-in {
14
- animation: card-in 0.3s ease-out forwards;
15
- }
@@ -1,12 +0,0 @@
1
- import { type ParentComponent, type JSX } from "solid-js";
2
- import { type LoadingVariant } from "./LoadingContext";
3
- import "./LoadingContainer.css";
4
- export interface LoadingContainerProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, "children"> {
5
- busy?: boolean;
6
- variant?: LoadingVariant;
7
- message?: string;
8
- progressPercent?: number;
9
- children?: JSX.Element;
10
- }
11
- export declare const LoadingContainer: ParentComponent<LoadingContainerProps>;
12
- //# sourceMappingURL=LoadingContainer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LoadingContainer.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/loading/LoadingContainer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,GAAG,EAAyD,MAAM,UAAU,CAAC;AAGjH,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvE,OAAO,wBAAwB,CAAC;AAEhC,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC;IACjG,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;CACxB;AAmCD,eAAO,MAAM,gBAAgB,EAAE,eAAe,CAAC,qBAAqB,CAmFnE,CAAC"}
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/components/feedback/loading/LoadingContainer.tsx"],
4
- "mappings": "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",
5
- "names": ["splitProps", "createEffect", "onCleanup", "Show", "useContext", "clsx", "twMerge", "LoadingContext", "createMountTransition", "baseClass", "screenBaseClass", "spinnerClass", "messageClass", "progressTrackClass", "progressBarClass", "barIndicatorClass", "LoadingContainer", "props", "local", "rest", "loadingCtx", "currVariant", "variant", "mounted", "animating", "unmount", "busy", "handleTransitionEnd", "e", "propertyName", "containerRef", "handleKeyDownCapture", "preventDefault", "stopPropagation", "addEventListener", "capture", "removeEventListener", "screenClass", "rectClass", "_el$", "_tmpl$", "_ref$", "_$use", "_$spread", "_$mergeProps", "class", "_$insert", "_$createComponent", "when", "children", "_el$2", "_tmpl$4", "_el$3", "firstChild", "_el$4", "_$className", "_$memo", "_el$5", "_tmpl$2", "_el$6", "_el$7", "nextSibling", "_$effect", "_p$", "_v$", "_v$2", "t", "undefined", "message", "_el$8", "_tmpl$3", "_el$9", "progressPercent", "_el$0", "_el$1", "_$p", "_$setStyleProperty", "_v$3", "_v$4"]
6
- }
@@ -1,11 +0,0 @@
1
- import { type Accessor } from "solid-js";
2
- export type LoadingVariant = "spinner" | "bar";
3
- export interface LoadingContextValue {
4
- variant: Accessor<LoadingVariant>;
5
- show: (message?: string) => void;
6
- hide: () => void;
7
- setProgress: (percent: number | undefined) => void;
8
- }
9
- export declare const LoadingContext: import("solid-js").Context<LoadingContextValue | undefined>;
10
- export declare function useLoading(): LoadingContextValue;
11
- //# sourceMappingURL=LoadingContext.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LoadingContext.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/loading/LoadingContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpE,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,KAAK,CAAC;AAE/C,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IAClC,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CACpD;AAED,eAAO,MAAM,cAAc,6DAAuC,CAAC;AAEnE,wBAAgB,UAAU,IAAI,mBAAmB,CAMhD"}
@@ -1,14 +0,0 @@
1
- import { createContext, useContext } from "solid-js";
2
- const LoadingContext = createContext();
3
- function useLoading() {
4
- const context = useContext(LoadingContext);
5
- if (!context) {
6
- throw new Error("useLoading\uC740 LoadingProvider \uB0B4\uBD80\uC5D0\uC11C\uB9CC \uC0AC\uC6A9\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4");
7
- }
8
- return context;
9
- }
10
- export {
11
- LoadingContext,
12
- useLoading
13
- };
14
- //# sourceMappingURL=LoadingContext.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/components/feedback/loading/LoadingContext.ts"],
4
- "mappings": "AAAA,SAAS,eAAe,kBAAiC;AAWlD,MAAM,iBAAiB,cAAmC;AAE1D,SAAS,aAAkC;AAChD,QAAM,UAAU,WAAW,cAAc;AACzC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,oHAA8C;AAAA,EAChE;AACA,SAAO;AACT;",
5
- "names": []
6
- }
@@ -1,7 +0,0 @@
1
- import { type ParentComponent } from "solid-js";
2
- import { type LoadingVariant } from "./LoadingContext";
3
- export interface LoadingProviderProps {
4
- variant?: LoadingVariant;
5
- }
6
- export declare const LoadingProvider: ParentComponent<LoadingProviderProps>;
7
- //# sourceMappingURL=LoadingProvider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LoadingProvider.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/loading/LoadingProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAgB,MAAM,UAAU,CAAC;AAG9D,OAAO,EAA4C,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAKjG,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AAED,eAAO,MAAM,eAAe,EAAE,eAAe,CAAC,oBAAoB,CA6CjE,CAAC"}
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/components/feedback/loading/LoadingProvider.tsx"],
4
- "mappings": ";;AAAA,SAA+BA,oBAAoB;AACnD,SAASC,cAAc;AACvB,OAAOC,UAAU;AACjB,SAASC,sBAAqE;AAC9E,SAASC,wBAAwB;AAEjC,MAAMC,eAAeH,KAAK,sBAAsB,qBAAqB,iBAAiB;AAM/E,MAAMI,kBAA0DC,WAAU;AAC/E,QAAM,CAACC,WAAWC,YAAY,IAAIT,aAAa,CAAC;AAChD,QAAM,CAACU,SAASC,UAAU,IAAIX,aAAiC;AAC/D,QAAM,CAACY,UAAUC,WAAW,IAAIb,aAAiC;AAEjE,QAAMc,UAAUA,MAAsBP,MAAMO,WAAW;AAEvD,QAAMC,OAAQC,SAAuB;AACnCP,iBAAcQ,OAAMA,IAAI,CAAC;AACzB,QAAID,QAAQE,QAAW;AACrBP,iBAAWK,GAAG;IAChB;EACF;AAEA,QAAMG,OAAOA,MAAY;AACvB,UAAMC,WAAWC,KAAKC,IAAI,GAAGd,UAAU,IAAI,CAAC;AAC5CC,iBAAaW,QAAQ;AACrB,QAAIA,YAAY,GAAG;AACjBT,iBAAWO,MAAS;AACpBL,kBAAYK,MAAS;IACvB;EACF;AAEA,QAAMK,eAAoC;IACxCT;IACAC;IACAI;IACAN,aAAcW,aAAgCX,YAAYW,OAAO;EACnE;AAEA,SAAAC,kBACGtB,eAAeuB,UAAQ;IAACC,OAAOJ;IAAY,IAAAK,WAAA;AAAA,aAAA,CAAAC,OAAA,MACzCtB,MAAMqB,QAAQ,GAAAH,kBACdxB,QAAM;QAAA,IAAA2B,WAAA;AAAA,iBAAAH,kBACJrB,kBAAgB;YAAA,IACf0B,OAAI;AAAA,qBAAEtB,UAAU,IAAI;YAAC;YAAA,IACrBM,UAAO;AAAA,qBAAEA,QAAQ;YAAC;YAAA,IAClBJ,UAAO;AAAA,qBAAEA,QAAQ;YAAC;YAAA,IAClBqB,kBAAe;AAAA,qBAAEnB,SAAS;YAAC;YAAA,SACpBP;YAAY,IACnB2B,QAAK;AAAA,qBAAE;gBAAE,kBAAkBxB,UAAU,IAAI,IAAI,SAAS;cAAO;YAAC;UAAA,CAAA;QAAA;MAAA,CAAA,CAAA;IAAA;EAAA,CAAA;AAKxE;",
5
- "names": ["createSignal", "Portal", "clsx", "LoadingContext", "LoadingContainer", "overlayClass", "LoadingProvider", "props", "busyCount", "setBusyCount", "message", "setMessage", "progress", "setProgress", "variant", "show", "msg", "c", "undefined", "hide", "newCount", "Math", "max", "contextValue", "percent", "_$createComponent", "Provider", "value", "children", "_$memo", "busy", "progressPercent", "style"]
6
- }
@@ -1,15 +0,0 @@
1
- @keyframes card-in {
2
- from {
3
- opacity: 0;
4
- transform: translateY(-1rem);
5
- }
6
-
7
- to {
8
- opacity: 1;
9
- transform: none;
10
- }
11
- }
12
-
13
- .animate-card-in {
14
- animation: card-in 0.3s ease-out forwards;
15
- }