@simplysm/solid 13.0.55 → 13.0.56

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 (181) hide show
  1. package/README.md +3 -1
  2. package/dist/components/data/crud-detail/CrudDetail.d.ts +14 -0
  3. package/dist/components/data/crud-detail/CrudDetail.d.ts.map +1 -0
  4. package/dist/components/data/crud-detail/CrudDetail.js +348 -0
  5. package/dist/components/data/crud-detail/CrudDetail.js.map +6 -0
  6. package/dist/components/data/crud-detail/CrudDetailAfter.d.ts +7 -0
  7. package/dist/components/data/crud-detail/CrudDetailAfter.d.ts.map +1 -0
  8. package/dist/components/data/crud-detail/CrudDetailAfter.js +14 -0
  9. package/dist/components/data/crud-detail/CrudDetailAfter.js.map +6 -0
  10. package/dist/components/data/crud-detail/CrudDetailBefore.d.ts +7 -0
  11. package/dist/components/data/crud-detail/CrudDetailBefore.d.ts.map +1 -0
  12. package/dist/components/data/crud-detail/CrudDetailBefore.js +14 -0
  13. package/dist/components/data/crud-detail/CrudDetailBefore.js.map +6 -0
  14. package/dist/components/data/crud-detail/CrudDetailTools.d.ts +7 -0
  15. package/dist/components/data/crud-detail/CrudDetailTools.d.ts.map +1 -0
  16. package/dist/components/data/crud-detail/CrudDetailTools.js +14 -0
  17. package/dist/components/data/crud-detail/CrudDetailTools.js.map +6 -0
  18. package/dist/components/data/crud-detail/types.d.ts +45 -0
  19. package/dist/components/data/crud-detail/types.d.ts.map +1 -0
  20. package/dist/components/data/crud-detail/types.js +1 -0
  21. package/dist/components/data/crud-detail/types.js.map +6 -0
  22. package/dist/components/data/crud-sheet/CrudSheet.d.ts +17 -0
  23. package/dist/components/data/crud-sheet/CrudSheet.d.ts.map +1 -0
  24. package/dist/components/data/crud-sheet/CrudSheet.js +679 -0
  25. package/dist/components/data/crud-sheet/CrudSheet.js.map +6 -0
  26. package/dist/components/data/crud-sheet/CrudSheetColumn.d.ts +5 -0
  27. package/dist/components/data/crud-sheet/CrudSheetColumn.d.ts.map +1 -0
  28. package/dist/components/data/crud-sheet/CrudSheetColumn.js +29 -0
  29. package/dist/components/data/crud-sheet/CrudSheetColumn.js.map +6 -0
  30. package/dist/components/data/crud-sheet/CrudSheetFilter.d.ts +7 -0
  31. package/dist/components/data/crud-sheet/CrudSheetFilter.d.ts.map +1 -0
  32. package/dist/components/data/crud-sheet/CrudSheetFilter.js +14 -0
  33. package/dist/components/data/crud-sheet/CrudSheetFilter.js.map +6 -0
  34. package/dist/components/data/crud-sheet/CrudSheetHeader.d.ts +7 -0
  35. package/dist/components/data/crud-sheet/CrudSheetHeader.d.ts.map +1 -0
  36. package/dist/components/data/crud-sheet/CrudSheetHeader.js +14 -0
  37. package/dist/components/data/crud-sheet/CrudSheetHeader.js.map +6 -0
  38. package/dist/components/data/crud-sheet/CrudSheetTools.d.ts +7 -0
  39. package/dist/components/data/crud-sheet/CrudSheetTools.d.ts.map +1 -0
  40. package/dist/components/data/crud-sheet/CrudSheetTools.js +14 -0
  41. package/dist/components/data/crud-sheet/CrudSheetTools.js.map +6 -0
  42. package/dist/components/data/crud-sheet/types.d.ts +109 -0
  43. package/dist/components/data/crud-sheet/types.d.ts.map +1 -0
  44. package/dist/components/data/crud-sheet/types.js +1 -0
  45. package/dist/components/data/crud-sheet/types.js.map +6 -0
  46. package/dist/components/data/kanban/Kanban.d.ts.map +1 -1
  47. package/dist/components/data/kanban/Kanban.js +137 -138
  48. package/dist/components/data/kanban/Kanban.js.map +2 -2
  49. package/dist/components/data/kanban/KanbanContext.d.ts +5 -1
  50. package/dist/components/data/kanban/KanbanContext.d.ts.map +1 -1
  51. package/dist/components/data/kanban/KanbanContext.js.map +1 -1
  52. package/dist/components/data/list/ListItem.d.ts.map +1 -1
  53. package/dist/components/data/list/ListItem.js +109 -99
  54. package/dist/components/data/list/ListItem.js.map +2 -2
  55. package/dist/components/data/sheet/DataSheet.js +1 -1
  56. package/dist/components/data/sheet/DataSheet.js.map +2 -2
  57. package/dist/components/data/sheet/DataSheet.styles.d.ts.map +1 -1
  58. package/dist/components/data/sheet/DataSheet.styles.js +1 -1
  59. package/dist/components/data/sheet/DataSheet.styles.js.map +1 -1
  60. package/dist/components/disclosure/Dialog.d.ts +16 -10
  61. package/dist/components/disclosure/Dialog.d.ts.map +1 -1
  62. package/dist/components/disclosure/Dialog.js +126 -91
  63. package/dist/components/disclosure/Dialog.js.map +2 -2
  64. package/dist/components/disclosure/DialogContext.d.ts +2 -4
  65. package/dist/components/disclosure/DialogContext.d.ts.map +1 -1
  66. package/dist/components/disclosure/DialogContext.js.map +1 -1
  67. package/dist/components/disclosure/DialogProvider.d.ts.map +1 -1
  68. package/dist/components/disclosure/DialogProvider.js +14 -9
  69. package/dist/components/disclosure/DialogProvider.js.map +2 -2
  70. package/dist/components/disclosure/Dropdown.d.ts +46 -22
  71. package/dist/components/disclosure/Dropdown.d.ts.map +1 -1
  72. package/dist/components/disclosure/Dropdown.js +100 -65
  73. package/dist/components/disclosure/Dropdown.js.map +2 -2
  74. package/dist/components/feedback/notification/NotificationBanner.d.ts.map +1 -1
  75. package/dist/components/feedback/notification/NotificationBanner.js +3 -3
  76. package/dist/components/feedback/notification/NotificationBanner.js.map +1 -1
  77. package/dist/components/feedback/notification/NotificationBell.d.ts.map +1 -1
  78. package/dist/components/feedback/notification/NotificationBell.js +84 -84
  79. package/dist/components/feedback/notification/NotificationBell.js.map +2 -2
  80. package/dist/components/form-control/combobox/Combobox.d.ts +6 -3
  81. package/dist/components/form-control/combobox/Combobox.d.ts.map +1 -1
  82. package/dist/components/form-control/combobox/Combobox.js +150 -168
  83. package/dist/components/form-control/combobox/Combobox.js.map +2 -2
  84. package/dist/components/form-control/combobox/ComboboxContext.d.ts +3 -0
  85. package/dist/components/form-control/combobox/ComboboxContext.d.ts.map +1 -1
  86. package/dist/components/form-control/combobox/ComboboxContext.js.map +1 -1
  87. package/dist/components/form-control/date-range-picker/DateRangePicker.d.ts +0 -2
  88. package/dist/components/form-control/date-range-picker/DateRangePicker.d.ts.map +1 -1
  89. package/dist/components/form-control/date-range-picker/DateRangePicker.js +9 -17
  90. package/dist/components/form-control/date-range-picker/DateRangePicker.js.map +2 -2
  91. package/dist/components/form-control/field/Field.styles.d.ts.map +1 -1
  92. package/dist/components/form-control/field/Field.styles.js +2 -1
  93. package/dist/components/form-control/field/Field.styles.js.map +1 -1
  94. package/dist/components/form-control/field/NumberInput.d.ts +15 -5
  95. package/dist/components/form-control/field/NumberInput.d.ts.map +1 -1
  96. package/dist/components/form-control/field/NumberInput.js +181 -141
  97. package/dist/components/form-control/field/NumberInput.js.map +2 -2
  98. package/dist/components/form-control/field/TextInput.d.ts +9 -5
  99. package/dist/components/form-control/field/TextInput.d.ts.map +1 -1
  100. package/dist/components/form-control/field/TextInput.js +199 -154
  101. package/dist/components/form-control/field/TextInput.js.map +2 -2
  102. package/dist/components/form-control/select/Select.d.ts +3 -3
  103. package/dist/components/form-control/select/Select.d.ts.map +1 -1
  104. package/dist/components/form-control/select/Select.js +116 -100
  105. package/dist/components/form-control/select/Select.js.map +2 -2
  106. package/dist/components/form-control/select/SelectContext.d.ts +9 -1
  107. package/dist/components/form-control/select/SelectContext.d.ts.map +1 -1
  108. package/dist/components/form-control/select/SelectContext.js.map +1 -1
  109. package/dist/components/form-control/select/SelectItem.d.ts.map +1 -1
  110. package/dist/components/form-control/select/SelectItem.js +77 -67
  111. package/dist/components/form-control/select/SelectItem.js.map +2 -2
  112. package/dist/components/layout/topbar/TopbarMenu.d.ts.map +1 -1
  113. package/dist/components/layout/topbar/TopbarMenu.js +63 -57
  114. package/dist/components/layout/topbar/TopbarMenu.js.map +2 -2
  115. package/dist/components/layout/topbar/TopbarUser.d.ts.map +1 -1
  116. package/dist/components/layout/topbar/TopbarUser.js +53 -54
  117. package/dist/components/layout/topbar/TopbarUser.js.map +2 -2
  118. package/dist/hooks/createControllableStore.d.ts +29 -0
  119. package/dist/hooks/createControllableStore.d.ts.map +1 -0
  120. package/dist/hooks/createControllableStore.js +19 -0
  121. package/dist/hooks/createControllableStore.js.map +6 -0
  122. package/dist/index.d.ts +5 -1
  123. package/dist/index.d.ts.map +1 -1
  124. package/dist/index.js +6 -2
  125. package/dist/index.js.map +1 -1
  126. package/dist/styles/patterns.styles.d.ts.map +1 -1
  127. package/dist/styles/patterns.styles.js +7 -1
  128. package/dist/styles/patterns.styles.js.map +1 -1
  129. package/docs/data-components.md +428 -0
  130. package/docs/disclosure.md +65 -35
  131. package/docs/form-controls.md +18 -3
  132. package/docs/helpers.md +0 -39
  133. package/docs/hooks.md +39 -0
  134. package/package.json +4 -3
  135. package/src/components/data/crud-detail/CrudDetail.tsx +346 -0
  136. package/src/components/data/crud-detail/CrudDetailAfter.tsx +19 -0
  137. package/src/components/data/crud-detail/CrudDetailBefore.tsx +19 -0
  138. package/src/components/data/crud-detail/CrudDetailTools.tsx +19 -0
  139. package/src/components/data/crud-detail/types.ts +58 -0
  140. package/src/components/data/crud-sheet/CrudSheet.tsx +628 -0
  141. package/src/components/data/crud-sheet/CrudSheetColumn.tsx +34 -0
  142. package/src/components/data/crud-sheet/CrudSheetFilter.tsx +21 -0
  143. package/src/components/data/crud-sheet/CrudSheetHeader.tsx +19 -0
  144. package/src/components/data/crud-sheet/CrudSheetTools.tsx +21 -0
  145. package/src/components/data/crud-sheet/types.ts +133 -0
  146. package/src/components/data/kanban/Kanban.tsx +72 -65
  147. package/src/components/data/kanban/KanbanContext.ts +7 -1
  148. package/src/components/data/list/ListItem.tsx +31 -18
  149. package/src/components/data/sheet/DataSheet.styles.ts +1 -1
  150. package/src/components/data/sheet/DataSheet.tsx +1 -1
  151. package/src/components/disclosure/Dialog.tsx +143 -105
  152. package/src/components/disclosure/DialogContext.ts +2 -4
  153. package/src/components/disclosure/DialogProvider.tsx +4 -2
  154. package/src/components/disclosure/Dropdown.tsx +174 -86
  155. package/src/components/feedback/notification/NotificationBanner.tsx +3 -9
  156. package/src/components/feedback/notification/NotificationBell.tsx +51 -57
  157. package/src/components/form-control/combobox/Combobox.tsx +109 -134
  158. package/src/components/form-control/combobox/ComboboxContext.ts +4 -1
  159. package/src/components/form-control/date-range-picker/DateRangePicker.tsx +6 -16
  160. package/src/components/form-control/field/Field.styles.ts +1 -0
  161. package/src/components/form-control/field/NumberInput.tsx +131 -88
  162. package/src/components/form-control/field/TextInput.tsx +139 -88
  163. package/src/components/form-control/select/Select.tsx +85 -67
  164. package/src/components/form-control/select/SelectContext.ts +12 -1
  165. package/src/components/form-control/select/SelectItem.tsx +39 -18
  166. package/src/components/layout/topbar/TopbarMenu.tsx +52 -55
  167. package/src/components/layout/topbar/TopbarUser.tsx +28 -31
  168. package/src/hooks/createControllableStore.ts +47 -0
  169. package/src/index.ts +5 -1
  170. package/src/styles/patterns.styles.ts +7 -1
  171. package/tailwind.css +4 -0
  172. package/dist/helpers/splitSlots.d.ts +0 -25
  173. package/dist/helpers/splitSlots.d.ts.map +0 -1
  174. package/dist/helpers/splitSlots.js +0 -25
  175. package/dist/helpers/splitSlots.js.map +0 -6
  176. package/dist/hooks/createItemTemplate.d.ts +0 -17
  177. package/dist/hooks/createItemTemplate.d.ts.map +0 -1
  178. package/dist/hooks/createItemTemplate.js +0 -40
  179. package/dist/hooks/createItemTemplate.js.map +0 -6
  180. package/src/helpers/splitSlots.ts +0 -51
  181. package/src/hooks/createItemTemplate.tsx +0 -42
@@ -0,0 +1,679 @@
1
+ import { template as _$template } from "solid-js/web";
2
+ import { delegateEvents as _$delegateEvents } from "solid-js/web";
3
+ import { use as _$use } from "solid-js/web";
4
+ import { insert as _$insert } from "solid-js/web";
5
+ import { createComponent as _$createComponent } from "solid-js/web";
6
+ import { memo as _$memo } from "solid-js/web";
7
+ var _tmpl$ = /* @__PURE__ */ _$template(`<button class="flex items-center px-2 text-base-400 hover:text-base-600">`), _tmpl$2 = /* @__PURE__ */ _$template(`<div class="flex gap-2 p-2 pb-0">`), _tmpl$3 = /* @__PURE__ */ _$template(`<form class="flex-1 overflow-hidden p-2 pt-1">`), _tmpl$4 = /* @__PURE__ */ _$template(`<div class="flex gap-2 border-t p-2"><div class=flex-1>`), _tmpl$5 = /* @__PURE__ */ _$template(`<form class=p-2>`), _tmpl$6 = /* @__PURE__ */ _$template(`<div class="flex items-center justify-center px-1 py-0.5">`);
8
+ import { children, createEffect, createMemo, createSignal, For, Show, splitProps, useContext } from "solid-js";
9
+ import { createStore, produce, reconcile } from "solid-js/store";
10
+ import { createControllableStore } from "../../../hooks/createControllableStore.js";
11
+ import { objClone } from "@simplysm/core-common";
12
+ import "@simplysm/core-common";
13
+ import { DataSheet } from "../sheet/DataSheet.js";
14
+ import { DataSheetColumn } from "../sheet/DataSheetColumn.js";
15
+ import { BusyContainer } from "../../feedback/busy/BusyContainer.js";
16
+ import { useNotification } from "../../feedback/notification/NotificationContext.js";
17
+ import { Button } from "../../form-control/Button.js";
18
+ import { Icon } from "../../display/Icon.js";
19
+ import { FormGroup } from "../../layout/FormGroup.js";
20
+ import { TopbarContext, createTopbarActions } from "../../layout/topbar/TopbarContext.js";
21
+ import { useDialogInstance } from "../../disclosure/DialogInstanceContext.js";
22
+ import { Dialog } from "../../disclosure/Dialog.js";
23
+ import { Link } from "../../display/Link.js";
24
+ import { createEventListener } from "@solid-primitives/event-listener";
25
+ import clsx from "clsx";
26
+ import { IconDeviceFloppy, IconFileExcel, IconPlus, IconRefresh, IconSearch, IconTrash, IconTrashOff, IconUpload } from "@tabler/icons-solidjs";
27
+ import { isCrudSheetColumnDef, CrudSheetColumn } from "./CrudSheetColumn.js";
28
+ import { isCrudSheetFilterDef, CrudSheetFilter } from "./CrudSheetFilter.js";
29
+ import { isCrudSheetToolsDef, CrudSheetTools } from "./CrudSheetTools.js";
30
+ import { isCrudSheetHeaderDef, CrudSheetHeader } from "./CrudSheetHeader.js";
31
+ const CrudSheetBase = (props) => {
32
+ const [local, _rest] = splitProps(props, ["search", "getItemKey", "persistKey", "itemsPerPage", "editable", "itemEditable", "itemDeletable", "filterInitial", "items", "onItemsChange", "inlineEdit", "modalEdit", "excel", "selectMode", "onSelect", "hideAutoTools", "class", "children"]);
33
+ const noti = useNotification();
34
+ const topbarCtx = useContext(TopbarContext);
35
+ const dialogInstance = useDialogInstance();
36
+ const isModal = dialogInstance !== void 0;
37
+ const isSelectMode = () => local.selectMode != null;
38
+ const canEdit = () => isSelectMode() ? false : local.editable ?? true;
39
+ const resolved = children(() => local.children);
40
+ const defs = createMemo(() => {
41
+ const arr = resolved.toArray();
42
+ return {
43
+ filter: arr.find(isCrudSheetFilterDef),
44
+ columns: arr.filter(isCrudSheetColumnDef),
45
+ tools: arr.find(isCrudSheetToolsDef),
46
+ header: arr.find(isCrudSheetHeaderDef)
47
+ };
48
+ });
49
+ const [items, setItems] = createControllableStore({
50
+ value: () => local.items ?? [],
51
+ onChange: () => local.onItemsChange
52
+ });
53
+ let originalItems = [];
54
+ const [filter, setFilter] = createStore(local.filterInitial ?? {});
55
+ const [lastFilter, setLastFilter] = createSignal(objClone(filter));
56
+ const [page, setPage] = createSignal(1);
57
+ const [totalPageCount, setTotalPageCount] = createSignal(0);
58
+ const [sorts, setSorts] = createSignal([]);
59
+ const [busyCount, setBusyCount] = createSignal(0);
60
+ const [ready, setReady] = createSignal(false);
61
+ const [selectedItems, setSelectedItems] = createSignal([]);
62
+ let formRef;
63
+ createEffect(() => {
64
+ const currLastFilter = lastFilter();
65
+ const currSorts = sorts();
66
+ const currPage = page();
67
+ queueMicrotask(async () => {
68
+ setBusyCount((c) => c + 1);
69
+ await noti.try(async () => {
70
+ await refresh(currLastFilter, currSorts, currPage);
71
+ }, "\uC870\uD68C \uC2E4\uD328");
72
+ setBusyCount((c) => c - 1);
73
+ setReady(true);
74
+ });
75
+ });
76
+ async function refresh(currLastFilter, currSorts, currPage) {
77
+ const usePagination = local.itemsPerPage != null;
78
+ const result = await local.search(currLastFilter, usePagination ? currPage : 0, currSorts);
79
+ setItems(reconcile(result.items));
80
+ originalItems = objClone(result.items);
81
+ setTotalPageCount(result.pageCount ?? 0);
82
+ }
83
+ function getItemDiffs() {
84
+ return items.oneWayDiffs(originalItems, (item) => {
85
+ return local.getItemKey(item);
86
+ });
87
+ }
88
+ function handleFilterSubmit(e) {
89
+ e.preventDefault();
90
+ setPage(1);
91
+ setLastFilter(() => objClone(filter));
92
+ }
93
+ function handleRefresh() {
94
+ setLastFilter(() => ({
95
+ ...lastFilter()
96
+ }));
97
+ }
98
+ function handleAddRow() {
99
+ if (!local.inlineEdit) return;
100
+ setItems(produce((draft) => {
101
+ draft.unshift(local.inlineEdit.newItem());
102
+ }));
103
+ }
104
+ function handleToggleDelete(item, index) {
105
+ var _a, _b;
106
+ if (!(((_a = local.itemDeletable) == null ? void 0 : _a.call(local, item)) ?? true)) return;
107
+ if (((_b = local.inlineEdit) == null ? void 0 : _b.deleteProp) == null) return;
108
+ const dp = local.inlineEdit.deleteProp;
109
+ if (local.getItemKey(item) == null) {
110
+ setItems(produce((draft) => {
111
+ draft.splice(index, 1);
112
+ }));
113
+ return;
114
+ }
115
+ setItems(index, dp, !item[dp]);
116
+ }
117
+ async function handleSave() {
118
+ if (busyCount() > 0) return;
119
+ if (!canEdit()) return;
120
+ if (!local.inlineEdit) return;
121
+ const diffs = getItemDiffs();
122
+ if (diffs.length === 0) {
123
+ noti.info("\uC548\uB0B4", "\uBCC0\uACBD\uC0AC\uD56D\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.");
124
+ return;
125
+ }
126
+ const currLastFilter = lastFilter();
127
+ const currSorts = sorts();
128
+ const currPage = page();
129
+ setBusyCount((c) => c + 1);
130
+ await noti.try(async () => {
131
+ await local.inlineEdit.submit(diffs);
132
+ noti.success("\uC800\uC7A5 \uC644\uB8CC", "\uC800\uC7A5\uB418\uC5C8\uC2B5\uB2C8\uB2E4.");
133
+ await refresh(currLastFilter, currSorts, currPage);
134
+ }, "\uC800\uC7A5 \uC2E4\uD328");
135
+ setBusyCount((c) => c - 1);
136
+ }
137
+ async function handleFormSubmit(e) {
138
+ e.preventDefault();
139
+ await handleSave();
140
+ }
141
+ async function handleEditItem(item) {
142
+ if (!local.modalEdit) return;
143
+ const result = await local.modalEdit.editItem(item);
144
+ if (!result) return;
145
+ setBusyCount((c) => c + 1);
146
+ await noti.try(async () => {
147
+ await refresh(lastFilter(), sorts(), page());
148
+ }, "\uC870\uD68C \uC2E4\uD328");
149
+ setBusyCount((c) => c - 1);
150
+ }
151
+ async function handleDeleteItems() {
152
+ var _a;
153
+ if (!((_a = local.modalEdit) == null ? void 0 : _a.deleteItems)) return;
154
+ const result = await local.modalEdit.deleteItems(selectedItems());
155
+ if (!result) return;
156
+ setBusyCount((c) => c + 1);
157
+ await noti.try(async () => {
158
+ await refresh(lastFilter(), sorts(), page());
159
+ noti.success("\uC0AD\uC81C \uC644\uB8CC", "\uC0AD\uC81C\uB418\uC5C8\uC2B5\uB2C8\uB2E4.");
160
+ }, "\uC0AD\uC81C \uC2E4\uD328");
161
+ setBusyCount((c) => c - 1);
162
+ }
163
+ async function handleExcelDownload() {
164
+ if (!local.excel) return;
165
+ setBusyCount((c) => c + 1);
166
+ await noti.try(async () => {
167
+ const result = await local.search(lastFilter(), 0, sorts());
168
+ await local.excel.download(result.items);
169
+ }, "\uC5D1\uC140 \uB2E4\uC6B4\uB85C\uB4DC \uC2E4\uD328");
170
+ setBusyCount((c) => c - 1);
171
+ }
172
+ function handleExcelUpload() {
173
+ var _a;
174
+ if (!((_a = local.excel) == null ? void 0 : _a.upload)) return;
175
+ const input = document.createElement("input");
176
+ input.type = "file";
177
+ input.accept = ".xlsx";
178
+ input.onchange = async () => {
179
+ var _a2;
180
+ const file = (_a2 = input.files) == null ? void 0 : _a2[0];
181
+ if (file == null) return;
182
+ setBusyCount((c) => c + 1);
183
+ await noti.try(async () => {
184
+ await local.excel.upload(file);
185
+ noti.success("\uC644\uB8CC", "\uC5D1\uC140 \uC5C5\uB85C\uB4DC\uAC00 \uC644\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4.");
186
+ await refresh(lastFilter(), sorts(), page());
187
+ }, "\uC5D1\uC140 \uC5C5\uB85C\uB4DC \uC2E4\uD328");
188
+ setBusyCount((c) => c - 1);
189
+ };
190
+ input.click();
191
+ }
192
+ function handleSelectConfirm() {
193
+ var _a;
194
+ (_a = local.onSelect) == null ? void 0 : _a.call(local, {
195
+ items: selectedItems(),
196
+ keys: selectedItems().map((item) => local.getItemKey(item)).filter((k) => k != null)
197
+ });
198
+ }
199
+ function handleSelectCancel() {
200
+ var _a;
201
+ (_a = local.onSelect) == null ? void 0 : _a.call(local, {
202
+ items: [],
203
+ keys: []
204
+ });
205
+ }
206
+ createEventListener(document, "keydown", (e) => {
207
+ if (e.ctrlKey && e.key === "s" && !isSelectMode()) {
208
+ e.preventDefault();
209
+ formRef == null ? void 0 : formRef.requestSubmit();
210
+ }
211
+ if (e.ctrlKey && e.altKey && e.key === "l") {
212
+ e.preventDefault();
213
+ handleRefresh();
214
+ }
215
+ });
216
+ if (topbarCtx) {
217
+ createTopbarActions(() => [_$createComponent(Show, {
218
+ get when() {
219
+ return _$memo(() => !!canEdit())() && local.inlineEdit;
220
+ },
221
+ get children() {
222
+ return _$createComponent(Button, {
223
+ size: "lg",
224
+ variant: "ghost",
225
+ theme: "primary",
226
+ onClick: () => formRef == null ? void 0 : formRef.requestSubmit(),
227
+ get children() {
228
+ return [_$createComponent(Icon, {
229
+ icon: IconDeviceFloppy,
230
+ "class": "mr-1"
231
+ }), "\uC800\uC7A5"];
232
+ }
233
+ });
234
+ }
235
+ }), _$createComponent(Button, {
236
+ size: "lg",
237
+ variant: "ghost",
238
+ theme: "info",
239
+ onClick: handleRefresh,
240
+ get children() {
241
+ return [_$createComponent(Icon, {
242
+ icon: IconRefresh,
243
+ "class": "mr-1"
244
+ }), "\uC0C8\uB85C\uACE0\uCE68"];
245
+ }
246
+ })]);
247
+ }
248
+ const ctx = {
249
+ items: () => items,
250
+ selectedItems,
251
+ page,
252
+ sorts,
253
+ busy: () => busyCount() > 0,
254
+ hasChanges: () => {
255
+ if (!local.inlineEdit) return false;
256
+ return getItemDiffs().length > 0;
257
+ },
258
+ save: handleSave,
259
+ refresh: async () => {
260
+ handleRefresh();
261
+ await Promise.resolve();
262
+ },
263
+ addItem: handleAddRow,
264
+ setPage,
265
+ setSorts
266
+ };
267
+ const deleteProp = () => {
268
+ var _a;
269
+ return (_a = local.inlineEdit) == null ? void 0 : _a.deleteProp;
270
+ };
271
+ return [_$createComponent(Show, {
272
+ when: isModal,
273
+ get children() {
274
+ return _$createComponent(Dialog.Action, {
275
+ get children() {
276
+ var _el$ = _tmpl$();
277
+ _el$.$$click = handleRefresh;
278
+ _$insert(_el$, _$createComponent(Icon, {
279
+ icon: IconRefresh
280
+ }));
281
+ return _el$;
282
+ }
283
+ });
284
+ }
285
+ }), _$createComponent(BusyContainer, {
286
+ get ready() {
287
+ return ready();
288
+ },
289
+ get busy() {
290
+ return busyCount() > 0;
291
+ },
292
+ get ["class"]() {
293
+ return clsx("flex h-full flex-col", local.class);
294
+ },
295
+ get children() {
296
+ return [_$createComponent(Show, {
297
+ get when() {
298
+ return _$memo(() => !!(!isModal && !topbarCtx && canEdit()))() && local.inlineEdit;
299
+ },
300
+ get children() {
301
+ var _el$2 = _tmpl$2();
302
+ _$insert(_el$2, _$createComponent(Button, {
303
+ size: "sm",
304
+ theme: "primary",
305
+ variant: "ghost",
306
+ onClick: () => formRef == null ? void 0 : formRef.requestSubmit(),
307
+ get children() {
308
+ return [_$createComponent(Icon, {
309
+ icon: IconDeviceFloppy,
310
+ "class": "mr-1"
311
+ }), "\uC800\uC7A5"];
312
+ }
313
+ }), null);
314
+ _$insert(_el$2, _$createComponent(Button, {
315
+ size: "sm",
316
+ theme: "info",
317
+ variant: "ghost",
318
+ onClick: handleRefresh,
319
+ get children() {
320
+ return [_$createComponent(Icon, {
321
+ icon: IconRefresh,
322
+ "class": "mr-1"
323
+ }), "\uC0C8\uB85C\uACE0\uCE68"];
324
+ }
325
+ }), null);
326
+ return _el$2;
327
+ }
328
+ }), _$createComponent(Show, {
329
+ get when() {
330
+ return defs().header;
331
+ },
332
+ children: (headerDef) => headerDef().children
333
+ }), _$createComponent(Show, {
334
+ get when() {
335
+ return defs().filter;
336
+ },
337
+ children: (filterDef) => (() => {
338
+ var _el$7 = _tmpl$5();
339
+ _el$7.addEventListener("submit", handleFilterSubmit);
340
+ _$insert(_el$7, _$createComponent(FormGroup, {
341
+ inline: true,
342
+ get children() {
343
+ return [_$createComponent(FormGroup.Item, {
344
+ get children() {
345
+ return _$createComponent(Button, {
346
+ type: "submit",
347
+ theme: "info",
348
+ variant: "solid",
349
+ get children() {
350
+ return [_$createComponent(Icon, {
351
+ icon: IconSearch,
352
+ "class": "mr-1"
353
+ }), "\uC870\uD68C"];
354
+ }
355
+ });
356
+ }
357
+ }), _$memo(() => filterDef().children(filter, setFilter))];
358
+ }
359
+ }));
360
+ return _el$7;
361
+ })()
362
+ }), _$createComponent(Show, {
363
+ get when() {
364
+ return !isSelectMode();
365
+ },
366
+ get children() {
367
+ var _el$3 = _tmpl$2();
368
+ _$insert(_el$3, _$createComponent(Show, {
369
+ get when() {
370
+ return !local.hideAutoTools;
371
+ },
372
+ get children() {
373
+ return [_$createComponent(Show, {
374
+ get when() {
375
+ return _$memo(() => !!canEdit())() && local.inlineEdit;
376
+ },
377
+ get children() {
378
+ return _$createComponent(Button, {
379
+ size: "sm",
380
+ theme: "primary",
381
+ variant: "ghost",
382
+ onClick: handleAddRow,
383
+ get children() {
384
+ return [_$createComponent(Icon, {
385
+ icon: IconPlus,
386
+ "class": "mr-1"
387
+ }), "\uD589 \uCD94\uAC00"];
388
+ }
389
+ });
390
+ }
391
+ }), _$createComponent(Show, {
392
+ get when() {
393
+ return _$memo(() => !!canEdit())() && local.modalEdit;
394
+ },
395
+ get children() {
396
+ return _$createComponent(Button, {
397
+ size: "sm",
398
+ theme: "primary",
399
+ variant: "ghost",
400
+ onClick: () => void handleEditItem(),
401
+ get children() {
402
+ return [_$createComponent(Icon, {
403
+ icon: IconPlus,
404
+ "class": "mr-1"
405
+ }), "\uB4F1\uB85D"];
406
+ }
407
+ });
408
+ }
409
+ }), _$createComponent(Show, {
410
+ get when() {
411
+ var _a;
412
+ return _$memo(() => !!canEdit())() && ((_a = local.modalEdit) == null ? void 0 : _a.deleteItems);
413
+ },
414
+ get children() {
415
+ return _$createComponent(Button, {
416
+ size: "sm",
417
+ theme: "danger",
418
+ variant: "ghost",
419
+ onClick: handleDeleteItems,
420
+ get disabled() {
421
+ return selectedItems().length === 0 || !selectedItems().some((item) => {
422
+ var _a;
423
+ return ((_a = local.itemDeletable) == null ? void 0 : _a.call(local, item)) ?? true;
424
+ });
425
+ },
426
+ get children() {
427
+ return [_$createComponent(Icon, {
428
+ icon: IconTrash,
429
+ "class": "mr-1"
430
+ }), "\uC120\uD0DD \uC0AD\uC81C"];
431
+ }
432
+ });
433
+ }
434
+ }), _$createComponent(Show, {
435
+ get when() {
436
+ var _a;
437
+ return _$memo(() => !!canEdit())() && ((_a = local.excel) == null ? void 0 : _a.upload);
438
+ },
439
+ get children() {
440
+ return _$createComponent(Button, {
441
+ size: "sm",
442
+ theme: "success",
443
+ variant: "ghost",
444
+ onClick: handleExcelUpload,
445
+ get children() {
446
+ return [_$createComponent(Icon, {
447
+ icon: IconUpload,
448
+ "class": "mr-1"
449
+ }), "\uC5D1\uC140 \uC5C5\uB85C\uB4DC"];
450
+ }
451
+ });
452
+ }
453
+ }), _$createComponent(Show, {
454
+ get when() {
455
+ return local.excel;
456
+ },
457
+ get children() {
458
+ return _$createComponent(Button, {
459
+ size: "sm",
460
+ theme: "success",
461
+ variant: "ghost",
462
+ onClick: handleExcelDownload,
463
+ get children() {
464
+ return [_$createComponent(Icon, {
465
+ icon: IconFileExcel,
466
+ "class": "mr-1"
467
+ }), "\uC5D1\uC140 \uB2E4\uC6B4\uB85C\uB4DC"];
468
+ }
469
+ });
470
+ }
471
+ })];
472
+ }
473
+ }), null);
474
+ _$insert(_el$3, _$createComponent(Show, {
475
+ get when() {
476
+ return defs().tools;
477
+ },
478
+ children: (toolsDef) => toolsDef().children(ctx)
479
+ }), null);
480
+ return _el$3;
481
+ }
482
+ }), (() => {
483
+ var _el$4 = _tmpl$3();
484
+ _el$4.addEventListener("submit", handleFormSubmit);
485
+ var _ref$ = formRef;
486
+ typeof _ref$ === "function" ? _$use(_ref$, _el$4) : formRef = _el$4;
487
+ _$insert(_el$4, _$createComponent(DataSheet, {
488
+ "class": "h-full",
489
+ items,
490
+ get persistKey() {
491
+ return _$memo(() => local.persistKey != null)() ? `${local.persistKey}-sheet` : void 0;
492
+ },
493
+ get page() {
494
+ return _$memo(() => local.itemsPerPage != null)() ? page() : void 0;
495
+ },
496
+ onPageChange: setPage,
497
+ get totalPageCount() {
498
+ return totalPageCount();
499
+ },
500
+ get itemsPerPage() {
501
+ return local.itemsPerPage;
502
+ },
503
+ get sorts() {
504
+ return sorts();
505
+ },
506
+ onSortsChange: setSorts,
507
+ get selectMode() {
508
+ var _a;
509
+ return _$memo(() => !!isSelectMode())() ? local.selectMode === "multi" ? "multiple" : "single" : ((_a = local.modalEdit) == null ? void 0 : _a.deleteItems) != null ? "multiple" : void 0;
510
+ },
511
+ get selectedItems() {
512
+ return selectedItems();
513
+ },
514
+ onSelectedItemsChange: setSelectedItems,
515
+ get autoSelect() {
516
+ return isSelectMode() && local.selectMode === "single" ? "click" : void 0;
517
+ },
518
+ cellClass: (item, _colKey) => {
519
+ const dp = deleteProp();
520
+ if (dp != null && Boolean(item[dp])) {
521
+ return clsx("line-through");
522
+ }
523
+ return void 0;
524
+ },
525
+ get children() {
526
+ return [_$createComponent(Show, {
527
+ get when() {
528
+ return _$memo(() => !!(deleteProp() != null && canEdit()))() ? deleteProp() : void 0;
529
+ },
530
+ children: (dp) => _$createComponent(DataSheetColumn, {
531
+ key: "__delete",
532
+ header: "",
533
+ fixed: true,
534
+ sortable: false,
535
+ resizable: false,
536
+ children: (dsCtx) => (() => {
537
+ var _el$8 = _tmpl$6();
538
+ _$insert(_el$8, _$createComponent(Link, {
539
+ theme: "danger",
540
+ get disabled() {
541
+ var _a;
542
+ return !(((_a = local.itemDeletable) == null ? void 0 : _a.call(local, dsCtx.item)) ?? true);
543
+ },
544
+ onClick: () => handleToggleDelete(dsCtx.item, dsCtx.index),
545
+ get children() {
546
+ return _$createComponent(Icon, {
547
+ get icon() {
548
+ return Boolean(dsCtx.item[dp()]) ? IconTrashOff : IconTrash;
549
+ }
550
+ });
551
+ }
552
+ }));
553
+ return _el$8;
554
+ })()
555
+ })
556
+ }), _$createComponent(For, {
557
+ get each() {
558
+ return defs().columns;
559
+ },
560
+ children: (col) => _$createComponent(DataSheetColumn, {
561
+ get key() {
562
+ return col.key;
563
+ },
564
+ get header() {
565
+ return col.header;
566
+ },
567
+ get headerContent() {
568
+ return col.headerContent;
569
+ },
570
+ get headerStyle() {
571
+ return col.headerStyle;
572
+ },
573
+ get summary() {
574
+ return col.summary;
575
+ },
576
+ get tooltip() {
577
+ return col.tooltip;
578
+ },
579
+ get fixed() {
580
+ return col.fixed;
581
+ },
582
+ get hidden() {
583
+ return col.hidden;
584
+ },
585
+ get collapse() {
586
+ return col.collapse;
587
+ },
588
+ get width() {
589
+ return col.width;
590
+ },
591
+ get ["class"]() {
592
+ return col.class;
593
+ },
594
+ get sortable() {
595
+ return col.sortable;
596
+ },
597
+ get resizable() {
598
+ return col.resizable;
599
+ },
600
+ children: (dsCtx) => {
601
+ var _a;
602
+ const crudCtx = {
603
+ ...dsCtx,
604
+ setItem: (key, value) => {
605
+ setItems(dsCtx.index, key, value);
606
+ }
607
+ };
608
+ if (local.modalEdit && col.editable && canEdit() && (((_a = local.itemEditable) == null ? void 0 : _a.call(local, dsCtx.item)) ?? true)) {
609
+ return _$createComponent(Link, {
610
+ "class": "flex w-full",
611
+ onClick: (e) => {
612
+ e.preventDefault();
613
+ e.stopPropagation();
614
+ void handleEditItem(dsCtx.item);
615
+ },
616
+ get children() {
617
+ return col.cell(crudCtx);
618
+ }
619
+ });
620
+ }
621
+ return col.cell(crudCtx);
622
+ }
623
+ })
624
+ })];
625
+ }
626
+ }));
627
+ return _el$4;
628
+ })(), _$createComponent(Show, {
629
+ get when() {
630
+ return isModal && isSelectMode();
631
+ },
632
+ get children() {
633
+ var _el$5 = _tmpl$4(), _el$6 = _el$5.firstChild;
634
+ _$insert(_el$5, _$createComponent(Show, {
635
+ get when() {
636
+ return selectedItems().length > 0;
637
+ },
638
+ get children() {
639
+ return _$createComponent(Button, {
640
+ size: "sm",
641
+ theme: "danger",
642
+ onClick: handleSelectCancel,
643
+ get children() {
644
+ return [_$memo(() => local.selectMode === "multi" ? "\uBAA8\uB450" : "\uC120\uD0DD"), " \uD574\uC81C"];
645
+ }
646
+ });
647
+ }
648
+ }), null);
649
+ _$insert(_el$5, _$createComponent(Show, {
650
+ get when() {
651
+ return local.selectMode === "multi";
652
+ },
653
+ get children() {
654
+ return _$createComponent(Button, {
655
+ size: "sm",
656
+ theme: "primary",
657
+ onClick: handleSelectConfirm,
658
+ get children() {
659
+ return ["\uD655\uC778(", _$memo(() => selectedItems().length), ")"];
660
+ }
661
+ });
662
+ }
663
+ }), null);
664
+ return _el$5;
665
+ }
666
+ })];
667
+ }
668
+ })];
669
+ };
670
+ const CrudSheet = CrudSheetBase;
671
+ CrudSheet.Column = CrudSheetColumn;
672
+ CrudSheet.Filter = CrudSheetFilter;
673
+ CrudSheet.Tools = CrudSheetTools;
674
+ CrudSheet.Header = CrudSheetHeader;
675
+ _$delegateEvents(["click"]);
676
+ export {
677
+ CrudSheet
678
+ };
679
+ //# sourceMappingURL=CrudSheet.js.map