@simplysm/solid 13.0.0-beta.45 → 13.0.0-beta.46

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 (130) hide show
  1. package/dist/components/data/Pagination.js +100 -54
  2. package/dist/components/data/Pagination.js.map +2 -2
  3. package/dist/components/data/Table.js +16 -8
  4. package/dist/components/data/Table.js.map +2 -2
  5. package/dist/components/data/calendar/Calendar.js +72 -20
  6. package/dist/components/data/calendar/Calendar.js.map +3 -3
  7. package/dist/components/data/kanban/Kanban.js +175 -97
  8. package/dist/components/data/kanban/Kanban.js.map +3 -3
  9. package/dist/components/data/list/List.js +30 -21
  10. package/dist/components/data/list/List.js.map +3 -3
  11. package/dist/components/data/list/ListItem.js +101 -52
  12. package/dist/components/data/list/ListItem.js.map +3 -3
  13. package/dist/components/data/permission-table/PermissionTable.js +102 -35
  14. package/dist/components/data/permission-table/PermissionTable.js.map +3 -3
  15. package/dist/components/data/sheet/DataSheet.js +646 -430
  16. package/dist/components/data/sheet/DataSheet.js.map +3 -3
  17. package/dist/components/data/sheet/DataSheetColumn.js.map +3 -3
  18. package/dist/components/data/sheet/DataSheetConfigDialog.js +86 -12
  19. package/dist/components/data/sheet/DataSheetConfigDialog.js.map +3 -3
  20. package/dist/components/disclosure/Collapse.js +39 -22
  21. package/dist/components/disclosure/Collapse.js.map +3 -3
  22. package/dist/components/disclosure/Dialog.js +126 -134
  23. package/dist/components/disclosure/Dialog.js.map +3 -3
  24. package/dist/components/disclosure/DialogProvider.js +90 -38
  25. package/dist/components/disclosure/DialogProvider.js.map +3 -3
  26. package/dist/components/disclosure/Dropdown.js +58 -43
  27. package/dist/components/disclosure/Dropdown.js.map +3 -3
  28. package/dist/components/disclosure/Tabs.js +56 -28
  29. package/dist/components/disclosure/Tabs.js.map +3 -3
  30. package/dist/components/display/Alert.js +15 -1
  31. package/dist/components/display/Alert.js.map +2 -2
  32. package/dist/components/display/Barcode.js +16 -1
  33. package/dist/components/display/Barcode.js.map +2 -2
  34. package/dist/components/display/Card.js +16 -10
  35. package/dist/components/display/Card.js.map +2 -2
  36. package/dist/components/display/Echarts.js +19 -2
  37. package/dist/components/display/Echarts.js.map +3 -3
  38. package/dist/components/display/Icon.js +12 -1
  39. package/dist/components/display/Icon.js.map +2 -2
  40. package/dist/components/display/Tag.js +16 -4
  41. package/dist/components/display/Tag.js.map +2 -2
  42. package/dist/components/feedback/Progress.js +42 -11
  43. package/dist/components/feedback/Progress.js.map +2 -2
  44. package/dist/components/feedback/loading/LoadingContainer.js +107 -43
  45. package/dist/components/feedback/loading/LoadingContainer.js.map +3 -3
  46. package/dist/components/feedback/loading/LoadingProvider.js +30 -10
  47. package/dist/components/feedback/loading/LoadingProvider.js.map +2 -2
  48. package/dist/components/feedback/notification/NotificationBanner.js +61 -27
  49. package/dist/components/feedback/notification/NotificationBanner.js.map +3 -3
  50. package/dist/components/feedback/notification/NotificationBell.js +114 -46
  51. package/dist/components/feedback/notification/NotificationBell.js.map +3 -3
  52. package/dist/components/feedback/notification/NotificationProvider.js +41 -17
  53. package/dist/components/feedback/notification/NotificationProvider.js.map +3 -3
  54. package/dist/components/feedback/print/Print.js +10 -2
  55. package/dist/components/feedback/print/Print.js.map +2 -2
  56. package/dist/components/form-control/Button.js +33 -54
  57. package/dist/components/form-control/Button.js.map +3 -3
  58. package/dist/components/form-control/Invalid.js +27 -23
  59. package/dist/components/form-control/Invalid.js.map +3 -3
  60. package/dist/components/form-control/ThemeToggle.js +72 -27
  61. package/dist/components/form-control/ThemeToggle.js.map +3 -3
  62. package/dist/components/form-control/checkbox/Checkbox.js +57 -47
  63. package/dist/components/form-control/checkbox/Checkbox.js.map +3 -3
  64. package/dist/components/form-control/checkbox/CheckboxGroup.js +47 -25
  65. package/dist/components/form-control/checkbox/CheckboxGroup.js.map +3 -3
  66. package/dist/components/form-control/checkbox/Radio.js +56 -47
  67. package/dist/components/form-control/checkbox/Radio.js.map +3 -3
  68. package/dist/components/form-control/checkbox/RadioGroup.js +47 -25
  69. package/dist/components/form-control/checkbox/RadioGroup.js.map +3 -3
  70. package/dist/components/form-control/color-picker/ColorPicker.js +29 -20
  71. package/dist/components/form-control/color-picker/ColorPicker.js.map +3 -3
  72. package/dist/components/form-control/combobox/Combobox.js +162 -74
  73. package/dist/components/form-control/combobox/Combobox.js.map +3 -3
  74. package/dist/components/form-control/combobox/ComboboxItem.js +36 -29
  75. package/dist/components/form-control/combobox/ComboboxItem.js.map +3 -3
  76. package/dist/components/form-control/date-range-picker/DateRangePicker.js +102 -64
  77. package/dist/components/form-control/date-range-picker/DateRangePicker.js.map +3 -3
  78. package/dist/components/form-control/editor/EditorToolbar.js +210 -247
  79. package/dist/components/form-control/editor/EditorToolbar.js.map +3 -3
  80. package/dist/components/form-control/editor/RichTextEditor.js +69 -53
  81. package/dist/components/form-control/editor/RichTextEditor.js.map +3 -3
  82. package/dist/components/form-control/field/DatePicker.js +122 -87
  83. package/dist/components/form-control/field/DatePicker.js.map +3 -3
  84. package/dist/components/form-control/field/DateTimePicker.js +122 -104
  85. package/dist/components/form-control/field/DateTimePicker.js.map +3 -3
  86. package/dist/components/form-control/field/NumberInput.js +135 -97
  87. package/dist/components/form-control/field/NumberInput.js.map +3 -3
  88. package/dist/components/form-control/field/TextInput.js +130 -92
  89. package/dist/components/form-control/field/TextInput.js.map +3 -3
  90. package/dist/components/form-control/field/Textarea.js +144 -122
  91. package/dist/components/form-control/field/Textarea.js.map +3 -3
  92. package/dist/components/form-control/field/TimePicker.js +114 -83
  93. package/dist/components/form-control/field/TimePicker.js.map +3 -3
  94. package/dist/components/form-control/numpad/Numpad.js +185 -27
  95. package/dist/components/form-control/numpad/Numpad.js.map +3 -3
  96. package/dist/components/form-control/select/Select.js +178 -76
  97. package/dist/components/form-control/select/Select.js.map +3 -3
  98. package/dist/components/form-control/select/SelectItem.js +73 -32
  99. package/dist/components/form-control/select/SelectItem.js.map +3 -3
  100. package/dist/components/form-control/state-preset/StatePreset.js +90 -75
  101. package/dist/components/form-control/state-preset/StatePreset.js.map +3 -3
  102. package/dist/components/layout/FormGroup.js +47 -11
  103. package/dist/components/layout/FormGroup.js.map +2 -2
  104. package/dist/components/layout/FormTable.js +15 -1
  105. package/dist/components/layout/FormTable.js.map +3 -3
  106. package/dist/components/layout/sidebar/Sidebar.js +32 -31
  107. package/dist/components/layout/sidebar/Sidebar.js.map +3 -3
  108. package/dist/components/layout/sidebar/SidebarContainer.js +44 -30
  109. package/dist/components/layout/sidebar/SidebarContainer.js.map +3 -3
  110. package/dist/components/layout/sidebar/SidebarMenu.js +88 -22
  111. package/dist/components/layout/sidebar/SidebarMenu.js.map +3 -3
  112. package/dist/components/layout/sidebar/SidebarUser.js +91 -21
  113. package/dist/components/layout/sidebar/SidebarUser.js.map +3 -3
  114. package/dist/components/layout/topbar/Topbar.js +34 -1
  115. package/dist/components/layout/topbar/Topbar.js.map +3 -3
  116. package/dist/components/layout/topbar/TopbarContainer.js +16 -1
  117. package/dist/components/layout/topbar/TopbarContainer.js.map +3 -3
  118. package/dist/components/layout/topbar/TopbarMenu.js +195 -23
  119. package/dist/components/layout/topbar/TopbarMenu.js.map +3 -3
  120. package/dist/components/layout/topbar/TopbarUser.js +78 -11
  121. package/dist/components/layout/topbar/TopbarUser.js.map +3 -3
  122. package/dist/providers/InitializeProvider.js +28 -1
  123. package/dist/providers/InitializeProvider.js.map +3 -3
  124. package/dist/providers/ServiceClientProvider.js +25 -19
  125. package/dist/providers/ServiceClientProvider.js.map +3 -3
  126. package/dist/providers/ThemeContext.js +8 -4
  127. package/dist/providers/ThemeContext.js.map +3 -3
  128. package/dist/providers/shared-data/SharedDataProvider.js +14 -14
  129. package/dist/providers/shared-data/SharedDataProvider.js.map +3 -3
  130. package/package.json +3 -3
@@ -1,3 +1,10 @@
1
+ import { template as _$template } from "solid-js/web";
2
+ import { memo as _$memo } from "solid-js/web";
3
+ import { insert as _$insert } from "solid-js/web";
4
+ import { createComponent as _$createComponent } from "solid-js/web";
5
+ import { spread as _$spread } from "solid-js/web";
6
+ import { mergeProps as _$mergeProps } from "solid-js/web";
7
+ var _tmpl$ = /* @__PURE__ */ _$template(`<nav>`);
1
8
  import { For, splitProps } from "solid-js";
2
9
  import clsx from "clsx";
3
10
  import { twMerge } from "tailwind-merge";
@@ -12,14 +19,7 @@ const gapClasses = {
12
19
  lg: "gap-1.5"
13
20
  };
14
21
  const Pagination = (props) => {
15
- const [local, rest] = splitProps(props, [
16
- "class",
17
- "pageIndex",
18
- "onPageIndexChange",
19
- "totalPageCount",
20
- "displayPageCount",
21
- "size"
22
- ]);
22
+ const [local, rest] = splitProps(props, ["class", "pageIndex", "onPageIndexChange", "totalPageCount", "displayPageCount", "size"]);
23
23
  const visibleCount = () => local.displayPageCount ?? 10;
24
24
  const pages = () => {
25
25
  const from = Math.floor(local.pageIndex / visibleCount()) * visibleCount();
@@ -33,76 +33,122 @@ const Pagination = (props) => {
33
33
  const hasPrev = () => (pages()[0] ?? 0) > 0;
34
34
  const hasNext = () => (pages()[pages().length - 1] ?? 0) < local.totalPageCount - 1;
35
35
  const getClassName = () => twMerge(baseClass, gapClasses[local.size ?? "default"], local.class);
36
- return /* @__PURE__ */ React.createElement("nav", { ...rest, "data-pagination": true, class: getClassName() }, /* @__PURE__ */ React.createElement(
37
- Button,
38
- {
39
- class: btnClass,
36
+ return (() => {
37
+ var _el$ = _tmpl$();
38
+ _$spread(_el$, _$mergeProps(rest, {
39
+ "data-pagination": "",
40
+ get ["class"]() {
41
+ return getClassName();
42
+ }
43
+ }), false, true);
44
+ _$insert(_el$, _$createComponent(Button, {
45
+ "class": btnClass,
40
46
  theme: "base",
41
47
  variant: "ghost",
42
- size: local.size,
43
- disabled: !hasPrev(),
48
+ get size() {
49
+ return local.size;
50
+ },
51
+ get disabled() {
52
+ return !hasPrev();
53
+ },
44
54
  onClick: () => {
45
55
  var _a;
46
56
  return (_a = local.onPageIndexChange) == null ? void 0 : _a.call(local, 0);
57
+ },
58
+ get children() {
59
+ return _$createComponent(Icon, {
60
+ icon: IconChevronsLeft,
61
+ size: "1em"
62
+ });
47
63
  }
48
- },
49
- /* @__PURE__ */ React.createElement(Icon, { icon: IconChevronsLeft, size: "1em" })
50
- ), /* @__PURE__ */ React.createElement(
51
- Button,
52
- {
53
- class: btnClass,
64
+ }), null);
65
+ _$insert(_el$, _$createComponent(Button, {
66
+ "class": btnClass,
54
67
  theme: "base",
55
68
  variant: "ghost",
56
- size: local.size,
57
- disabled: !hasPrev(),
69
+ get size() {
70
+ return local.size;
71
+ },
72
+ get disabled() {
73
+ return !hasPrev();
74
+ },
58
75
  onClick: () => {
59
76
  var _a;
60
77
  return (_a = local.onPageIndexChange) == null ? void 0 : _a.call(local, (pages()[0] ?? 1) - 1);
78
+ },
79
+ get children() {
80
+ return _$createComponent(Icon, {
81
+ icon: IconChevronLeft,
82
+ size: "1em"
83
+ });
61
84
  }
62
- },
63
- /* @__PURE__ */ React.createElement(Icon, { icon: IconChevronLeft, size: "1em" })
64
- ), /* @__PURE__ */ React.createElement(For, { each: pages() }, (p) => /* @__PURE__ */ React.createElement(
65
- Button,
66
- {
67
- class: btnClass,
68
- theme: p === local.pageIndex ? "primary" : "base",
69
- variant: p === local.pageIndex ? "solid" : "ghost",
70
- size: local.size,
71
- onClick: () => {
72
- var _a;
73
- return (_a = local.onPageIndexChange) == null ? void 0 : _a.call(local, p);
74
- }
75
- },
76
- p + 1
77
- )), /* @__PURE__ */ React.createElement(
78
- Button,
79
- {
80
- class: btnClass,
85
+ }), null);
86
+ _$insert(_el$, _$createComponent(For, {
87
+ get each() {
88
+ return pages();
89
+ },
90
+ children: (p) => _$createComponent(Button, {
91
+ "class": btnClass,
92
+ get theme() {
93
+ return p === local.pageIndex ? "primary" : "base";
94
+ },
95
+ get variant() {
96
+ return p === local.pageIndex ? "solid" : "ghost";
97
+ },
98
+ get size() {
99
+ return local.size;
100
+ },
101
+ onClick: () => {
102
+ var _a;
103
+ return (_a = local.onPageIndexChange) == null ? void 0 : _a.call(local, p);
104
+ },
105
+ children: p + 1
106
+ })
107
+ }), null);
108
+ _$insert(_el$, _$createComponent(Button, {
109
+ "class": btnClass,
81
110
  theme: "base",
82
111
  variant: "ghost",
83
- size: local.size,
84
- disabled: !hasNext(),
112
+ get size() {
113
+ return local.size;
114
+ },
115
+ get disabled() {
116
+ return !hasNext();
117
+ },
85
118
  onClick: () => {
86
119
  var _a;
87
120
  return (_a = local.onPageIndexChange) == null ? void 0 : _a.call(local, (pages()[pages().length - 1] ?? 0) + 1);
121
+ },
122
+ get children() {
123
+ return _$createComponent(Icon, {
124
+ icon: IconChevronRight,
125
+ size: "1em"
126
+ });
88
127
  }
89
- },
90
- /* @__PURE__ */ React.createElement(Icon, { icon: IconChevronRight, size: "1em" })
91
- ), /* @__PURE__ */ React.createElement(
92
- Button,
93
- {
94
- class: btnClass,
128
+ }), null);
129
+ _$insert(_el$, _$createComponent(Button, {
130
+ "class": btnClass,
95
131
  theme: "base",
96
132
  variant: "ghost",
97
- size: local.size,
98
- disabled: !hasNext(),
133
+ get size() {
134
+ return local.size;
135
+ },
136
+ get disabled() {
137
+ return !hasNext();
138
+ },
99
139
  onClick: () => {
100
140
  var _a;
101
141
  return (_a = local.onPageIndexChange) == null ? void 0 : _a.call(local, local.totalPageCount - 1);
142
+ },
143
+ get children() {
144
+ return _$createComponent(Icon, {
145
+ icon: IconChevronsRight,
146
+ size: "1em"
147
+ });
102
148
  }
103
- },
104
- /* @__PURE__ */ React.createElement(Icon, { icon: IconChevronsRight, size: "1em" })
105
- ));
149
+ }), null);
150
+ return _el$;
151
+ })();
106
152
  };
107
153
  export {
108
154
  Pagination
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/data/Pagination.tsx"],
4
4
  "sourcesContent": ["import { type Component, For, type JSX, splitProps } from \"solid-js\";\nimport clsx from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nimport { IconChevronLeft, IconChevronRight, IconChevronsLeft, IconChevronsRight } from \"@tabler/icons-solidjs\";\nimport { Button } from \"../form-control/Button\";\nimport { Icon } from \"../display/Icon\";\n\ntype PaginationSize = \"sm\" | \"lg\";\n\nexport interface PaginationProps extends JSX.HTMLAttributes<HTMLElement> {\n pageIndex: number;\n onPageIndexChange?: (pageIndex: number) => void;\n totalPageCount: number;\n displayPageCount?: number;\n size?: PaginationSize;\n}\n\nconst baseClass = clsx(\"inline-flex items-center\");\n\nconst btnClass = clsx(\"border-none font-normal\");\n\nconst gapClasses: Record<PaginationSize | \"default\", string> = {\n default: \"gap-1\",\n sm: \"gap-0.5\",\n lg: \"gap-1.5\",\n};\n\nexport const Pagination: Component<PaginationProps> = (props) => {\n const [local, rest] = splitProps(props, [\n \"class\",\n \"pageIndex\",\n \"onPageIndexChange\",\n \"totalPageCount\",\n \"displayPageCount\",\n \"size\",\n ]);\n\n const visibleCount = () => local.displayPageCount ?? 10;\n\n const pages = () => {\n const from = Math.floor(local.pageIndex / visibleCount()) * visibleCount();\n const to = Math.min(from + visibleCount(), local.totalPageCount);\n const result: number[] = [];\n for (let i = from; i < to; i++) {\n result.push(i);\n }\n return result;\n };\n\n const hasPrev = () => (pages()[0] ?? 0) > 0;\n const hasNext = () => (pages()[pages().length - 1] ?? 0) < local.totalPageCount - 1;\n\n const getClassName = () => twMerge(baseClass, gapClasses[local.size ?? \"default\"], local.class);\n\n return (\n <nav {...rest} data-pagination class={getClassName()}>\n <Button\n class={btnClass}\n theme=\"base\"\n variant=\"ghost\"\n size={local.size}\n disabled={!hasPrev()}\n onClick={() => local.onPageIndexChange?.(0)}\n >\n <Icon icon={IconChevronsLeft} size=\"1em\" />\n </Button>\n <Button\n class={btnClass}\n theme=\"base\"\n variant=\"ghost\"\n size={local.size}\n disabled={!hasPrev()}\n onClick={() => local.onPageIndexChange?.((pages()[0] ?? 1) - 1)}\n >\n <Icon icon={IconChevronLeft} size=\"1em\" />\n </Button>\n <For each={pages()}>\n {(p) => (\n <Button\n class={btnClass}\n theme={p === local.pageIndex ? \"primary\" : \"base\"}\n variant={p === local.pageIndex ? \"solid\" : \"ghost\"}\n size={local.size}\n onClick={() => local.onPageIndexChange?.(p)}\n >\n {p + 1}\n </Button>\n )}\n </For>\n <Button\n class={btnClass}\n theme=\"base\"\n variant=\"ghost\"\n size={local.size}\n disabled={!hasNext()}\n onClick={() => local.onPageIndexChange?.((pages()[pages().length - 1] ?? 0) + 1)}\n >\n <Icon icon={IconChevronRight} size=\"1em\" />\n </Button>\n <Button\n class={btnClass}\n theme=\"base\"\n variant=\"ghost\"\n size={local.size}\n disabled={!hasNext()}\n onClick={() => local.onPageIndexChange?.(local.totalPageCount - 1)}\n >\n <Icon icon={IconChevronsRight} size=\"1em\" />\n </Button>\n </nav>\n );\n};\n"],
5
- "mappings": "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",
6
- "names": []
5
+ "mappings": "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",
6
+ "names": ["For", "splitProps", "clsx", "twMerge", "IconChevronLeft", "IconChevronRight", "IconChevronsLeft", "IconChevronsRight", "Button", "Icon", "baseClass", "btnClass", "gapClasses", "default", "sm", "lg", "Pagination", "props", "local", "rest", "visibleCount", "displayPageCount", "pages", "from", "Math", "floor", "pageIndex", "to", "min", "totalPageCount", "result", "i", "push", "hasPrev", "hasNext", "length", "getClassName", "size", "class", "_el$", "_tmpl$", "_$spread", "_$mergeProps", "_$insert", "_$createComponent", "theme", "variant", "disabled", "onClick", "onPageIndexChange", "children", "icon", "each", "p"]
7
7
  }
@@ -1,3 +1,8 @@
1
+ import { template as _$template } from "solid-js/web";
2
+ import { insert as _$insert } from "solid-js/web";
3
+ import { spread as _$spread } from "solid-js/web";
4
+ import { mergeProps as _$mergeProps } from "solid-js/web";
5
+ var _tmpl$ = /* @__PURE__ */ _$template(`<table data-table>`);
1
6
  import { splitProps } from "solid-js";
2
7
  import clsx from "clsx";
3
8
  import { twMerge } from "tailwind-merge";
@@ -16,17 +21,20 @@ const baseClass = clsx(
16
21
  "[&_td]:border-l [&_td]:border-t [&_td]:border-base-300 [&_td]:dark:border-base-600",
17
22
  "[&_td]:px-2 [&_td]:py-1"
18
23
  );
19
- const insetClass = clsx(
20
- "border-b-0 border-r-0",
21
- "[&>*>tr>*:first-child]:border-l-0",
22
- "[&>*:first-child>tr:first-child>*]:border-t-0",
23
- "rounded-none",
24
- "overflow-auto"
25
- );
24
+ const insetClass = clsx("border-b-0 border-r-0", "[&>*>tr>*:first-child]:border-l-0", "[&>*:first-child>tr:first-child>*]:border-t-0", "rounded-none", "overflow-auto");
26
25
  const Table = (props) => {
27
26
  const [local, rest] = splitProps(props, ["children", "class", "inset"]);
28
27
  const getClassName = () => twMerge(baseClass, local.inset && insetClass, local.class);
29
- return /* @__PURE__ */ React.createElement("table", { "data-table": true, class: getClassName(), ...rest }, local.children);
28
+ return (() => {
29
+ var _el$ = _tmpl$();
30
+ _$spread(_el$, _$mergeProps({
31
+ get ["class"]() {
32
+ return getClassName();
33
+ }
34
+ }, rest), false, true);
35
+ _$insert(_el$, () => local.children);
36
+ return _el$;
37
+ })();
30
38
  };
31
39
  export {
32
40
  Table
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/data/Table.tsx"],
4
4
  "sourcesContent": ["import { type JSX, type ParentComponent, splitProps } from \"solid-js\";\nimport clsx from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport interface TableProps extends JSX.HTMLAttributes<HTMLTableElement> {\n inset?: boolean;\n}\n\nconst baseClass = clsx(\n \"w-auto\",\n \"border-separate border-spacing-0\",\n \"border-b border-r border-base-300 dark:border-base-600\",\n \"rounded\",\n \"overflow-hidden\",\n // th\n \"[&_th]:border-l [&_th]:border-t [&_th]:border-base-300 [&_th]:dark:border-base-600\",\n \"[&_th]:px-2 [&_th]:py-1\",\n \"[&_th]:bg-base-100 [&_th]:text-left [&_th]:font-semibold\",\n \"[&_th]:dark:bg-base-800\",\n // td\n \"[&_td]:border-l [&_td]:border-t [&_td]:border-base-300 [&_td]:dark:border-base-600\",\n \"[&_td]:px-2 [&_td]:py-1\",\n);\n\nconst insetClass = clsx(\n \"border-b-0 border-r-0\",\n \"[&>*>tr>*:first-child]:border-l-0\",\n \"[&>*:first-child>tr:first-child>*]:border-t-0\",\n \"rounded-none\",\n \"overflow-auto\",\n);\n\nexport const Table: ParentComponent<TableProps> = (props) => {\n const [local, rest] = splitProps(props, [\"children\", \"class\", \"inset\"]);\n\n const getClassName = () => twMerge(baseClass, local.inset && insetClass, local.class);\n\n return (\n <table data-table class={getClassName()} {...rest}>\n {local.children}\n </table>\n );\n};\n"],
5
- "mappings": "AAAA,SAAyC,kBAAkB;AAC3D,OAAO,UAAU;AACjB,SAAS,eAAe;AAMxB,MAAM,YAAY;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AACF;AAEA,MAAM,aAAa;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,MAAM,QAAqC,CAAC,UAAU;AAC3D,QAAM,CAAC,OAAO,IAAI,IAAI,WAAW,OAAO,CAAC,YAAY,SAAS,OAAO,CAAC;AAEtE,QAAM,eAAe,MAAM,QAAQ,WAAW,MAAM,SAAS,YAAY,MAAM,KAAK;AAEpF,SACE,oCAAC,WAAM,cAAU,MAAC,OAAO,aAAa,GAAI,GAAG,QAC1C,MAAM,QACT;AAEJ;",
6
- "names": []
5
+ "mappings": ";;;;;AAAA,SAAyCA,kBAAkB;AAC3D,OAAOC,UAAU;AACjB,SAASC,eAAe;AAMxB,MAAMC,YAAYF;EAChB;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;;EAEA;EACA;AACF;AAEA,MAAMG,aAAaH,KACjB,yBACA,qCACA,iDACA,gBACA,eACF;AAEO,MAAMI,QAAsCC,WAAU;AAC3D,QAAM,CAACC,OAAOC,IAAI,IAAIR,WAAWM,OAAO,CAAC,YAAY,SAAS,OAAO,CAAC;AAEtE,QAAMG,eAAeA,MAAMP,QAAQC,WAAWI,MAAMG,SAASN,YAAYG,MAAMI,KAAK;AAEpF,UAAA,MAAA;AAAA,QAAAC,OAAAC,OAAA;AAAAC,aAAAF,MAAAG,aAAA;MAAA,KAAA,OAAA,IAAA;AAAA,eAC2BN,aAAa;MAAC;IAAA,GAAMD,IAAI,GAAA,OAAA,IAAA;AAAAQ,aAAAJ,MAAA,MAC9CL,MAAMU,QAAQ;AAAA,WAAAL;EAAA,GAAA;AAGrB;",
6
+ "names": ["splitProps", "clsx", "twMerge", "baseClass", "insetClass", "Table", "props", "local", "rest", "getClassName", "inset", "class", "_el$", "_tmpl$", "_$spread", "_$mergeProps", "_$insert", "children"]
7
7
  }
@@ -1,3 +1,11 @@
1
+ import { template as _$template } from "solid-js/web";
2
+ import { effect as _$effect } from "solid-js/web";
3
+ import { className as _$className } from "solid-js/web";
4
+ import { insert as _$insert } from "solid-js/web";
5
+ import { createComponent as _$createComponent } from "solid-js/web";
6
+ import { spread as _$spread } from "solid-js/web";
7
+ import { mergeProps as _$mergeProps } from "solid-js/web";
8
+ var _tmpl$ = /* @__PURE__ */ _$template(`<table data-calendar><thead><tr></tr></thead><tbody>`), _tmpl$2 = /* @__PURE__ */ _$template(`<th>`), _tmpl$3 = /* @__PURE__ */ _$template(`<tr>`), _tmpl$4 = /* @__PURE__ */ _$template(`<td><div></div><div>`);
1
9
  import { createMemo, For, splitProps } from "solid-js";
2
10
  import { DateOnly } from "@simplysm/core-common";
3
11
  import clsx from "clsx";
@@ -24,16 +32,7 @@ const dayClass = clsx("mb-1 text-sm text-base-500", "dark:text-base-400");
24
32
  const notCurrentDayClass = clsx("text-base-300", "dark:text-base-600");
25
33
  const contentClass = clsx("flex flex-col gap-1");
26
34
  function CalendarBase(props) {
27
- const [local, rest] = splitProps(props, [
28
- "class",
29
- "items",
30
- "getItemDate",
31
- "renderItem",
32
- "yearMonth",
33
- "onYearMonthChange",
34
- "weekStartDay",
35
- "minDaysInFirstWeek"
36
- ]);
35
+ const [local, rest] = splitProps(props, ["class", "items", "getItemDate", "renderItem", "yearMonth", "onYearMonthChange", "weekStartDay", "minDaysInFirstWeek"]);
37
36
  const weekStartDay = () => local.weekStartDay ?? 0;
38
37
  const minDaysInFirstWeek = () => local.minDaysInFirstWeek ?? 1;
39
38
  const [yearMonth] = createControllableSignal({
@@ -42,7 +41,9 @@ function CalendarBase(props) {
42
41
  });
43
42
  const weekHeaders = createMemo(() => {
44
43
  const start = weekStartDay();
45
- return Array.from({ length: 7 }, (_, i) => WEEKS[(start + i) % 7]);
44
+ return Array.from({
45
+ length: 7
46
+ }, (_, i) => WEEKS[(start + i) % 7]);
46
47
  });
47
48
  const dataTable = createMemo(() => {
48
49
  const ym = yearMonth();
@@ -54,9 +55,15 @@ function CalendarBase(props) {
54
55
  const key = date.tick;
55
56
  const arr = itemMap.get(key);
56
57
  if (arr) {
57
- arr.push({ item: items[i], index: i });
58
+ arr.push({
59
+ item: items[i],
60
+ index: i
61
+ });
58
62
  } else {
59
- itemMap.set(key, [{ item: items[i], index: i }]);
63
+ itemMap.set(key, [{
64
+ item: items[i],
65
+ index: i
66
+ }]);
60
67
  }
61
68
  }
62
69
  const firstDate = ym.getWeekSeqStartDate(weekStartDay(), minDaysInFirstWeek());
@@ -75,13 +82,58 @@ function CalendarBase(props) {
75
82
  return result;
76
83
  });
77
84
  const getClassName = () => twMerge(baseClass, local.class);
78
- return /* @__PURE__ */ React.createElement("table", { "data-calendar": true, class: getClassName(), ...rest }, /* @__PURE__ */ React.createElement("thead", null, /* @__PURE__ */ React.createElement("tr", null, /* @__PURE__ */ React.createElement(For, { each: weekHeaders() }, (header) => /* @__PURE__ */ React.createElement("th", null, header)))), /* @__PURE__ */ React.createElement("tbody", null, /* @__PURE__ */ React.createElement(For, { each: dataTable() }, (row) => /* @__PURE__ */ React.createElement("tr", null, /* @__PURE__ */ React.createElement(For, { each: row }, (cell) => /* @__PURE__ */ React.createElement("td", { class: twMerge(notCurrentClass, cell.date.month !== yearMonth().month && "not-current") }, /* @__PURE__ */ React.createElement(
79
- "div",
80
- {
81
- class: cell.date.month !== yearMonth().month ? twMerge(dayClass, notCurrentDayClass) : dayClass
82
- },
83
- cell.date.day
84
- ), /* @__PURE__ */ React.createElement("div", { class: contentClass }, /* @__PURE__ */ React.createElement(For, { each: cell.items }, (entry) => local.renderItem(entry.item, entry.index)))))))));
85
+ return (() => {
86
+ var _el$ = _tmpl$(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$2.nextSibling;
87
+ _$spread(_el$, _$mergeProps({
88
+ get ["class"]() {
89
+ return getClassName();
90
+ }
91
+ }, rest), false, true);
92
+ _$insert(_el$3, _$createComponent(For, {
93
+ get each() {
94
+ return weekHeaders();
95
+ },
96
+ children: (header) => (() => {
97
+ var _el$5 = _tmpl$2();
98
+ _$insert(_el$5, header);
99
+ return _el$5;
100
+ })()
101
+ }));
102
+ _$insert(_el$4, _$createComponent(For, {
103
+ get each() {
104
+ return dataTable();
105
+ },
106
+ children: (row) => (() => {
107
+ var _el$6 = _tmpl$3();
108
+ _$insert(_el$6, _$createComponent(For, {
109
+ each: row,
110
+ children: (cell) => (() => {
111
+ var _el$7 = _tmpl$4(), _el$8 = _el$7.firstChild, _el$9 = _el$8.nextSibling;
112
+ _$insert(_el$8, () => cell.date.day);
113
+ _$className(_el$9, contentClass);
114
+ _$insert(_el$9, _$createComponent(For, {
115
+ get each() {
116
+ return cell.items;
117
+ },
118
+ children: (entry) => local.renderItem(entry.item, entry.index)
119
+ }));
120
+ _$effect((_p$) => {
121
+ var _v$ = twMerge(notCurrentClass, cell.date.month !== yearMonth().month && "not-current"), _v$2 = cell.date.month !== yearMonth().month ? twMerge(dayClass, notCurrentDayClass) : dayClass;
122
+ _v$ !== _p$.e && _$className(_el$7, _p$.e = _v$);
123
+ _v$2 !== _p$.t && _$className(_el$8, _p$.t = _v$2);
124
+ return _p$;
125
+ }, {
126
+ e: void 0,
127
+ t: void 0
128
+ });
129
+ return _el$7;
130
+ })()
131
+ }));
132
+ return _el$6;
133
+ })()
134
+ }));
135
+ return _el$;
136
+ })();
85
137
  }
86
138
  const Calendar = CalendarBase;
87
139
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/data/calendar/Calendar.tsx"],
4
- "sourcesContent": ["import { createMemo, For, type JSX, splitProps } from \"solid-js\";\nimport { DateOnly } from \"@simplysm/core-common\";\nimport clsx from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nimport { createControllableSignal } from \"../../../hooks/createControllableSignal\";\n\nexport interface CalendarProps<T> extends Omit<JSX.HTMLAttributes<HTMLTableElement>, \"children\"> {\n items: T[];\n getItemDate: (item: T, index: number) => DateOnly;\n renderItem: (item: T, index: number) => JSX.Element;\n yearMonth?: DateOnly;\n onYearMonthChange?: (value: DateOnly) => void;\n weekStartDay?: number;\n minDaysInFirstWeek?: number;\n}\n\nconst WEEKS = [\"\uC77C\", \"\uC6D4\", \"\uD654\", \"\uC218\", \"\uBAA9\", \"\uAE08\", \"\uD1A0\"];\n\nconst baseClass = clsx(\n \"w-full\",\n \"border-separate border-spacing-0\",\n \"border-b border-r border-base-300\",\n \"dark:border-base-600\",\n \"overflow-hidden rounded\",\n // th\n \"[&_th]:border-l [&_th]:border-t [&_th]:border-base-300 [&_th]:dark:border-base-600\",\n \"[&_th]:px-2 [&_th]:py-1\",\n \"[&_th]:bg-base-100 [&_th]:text-center [&_th]:text-sm [&_th]:font-semibold\",\n \"[&_th]:dark:bg-base-800\",\n // td\n \"[&_td]:border-l [&_td]:border-t [&_td]:border-base-300 [&_td]:dark:border-base-600\",\n \"[&_td]:p-1 [&_td]:align-top\",\n);\n\nconst notCurrentClass = clsx(\"[&.not-current]:bg-base-50\", \"[&.not-current]:dark:bg-base-900\");\n\nconst dayClass = clsx(\"mb-1 text-sm text-base-500\", \"dark:text-base-400\");\n\nconst notCurrentDayClass = clsx(\"text-base-300\", \"dark:text-base-600\");\n\nconst contentClass = clsx(\"flex flex-col gap-1\");\n\nfunction CalendarBase<T>(props: CalendarProps<T>) {\n const [local, rest] = splitProps(props, [\n \"class\",\n \"items\",\n \"getItemDate\",\n \"renderItem\",\n \"yearMonth\",\n \"onYearMonthChange\",\n \"weekStartDay\",\n \"minDaysInFirstWeek\",\n ]);\n\n const weekStartDay = () => local.weekStartDay ?? 0;\n const minDaysInFirstWeek = () => local.minDaysInFirstWeek ?? 1;\n\n const [yearMonth] = createControllableSignal({\n value: () => local.yearMonth ?? new DateOnly().setDay(1),\n onChange: () => local.onYearMonthChange,\n });\n\n const weekHeaders = createMemo(() => {\n const start = weekStartDay();\n return Array.from({ length: 7 }, (_, i) => WEEKS[(start + i) % 7]);\n });\n\n const dataTable = createMemo(() => {\n const ym = yearMonth();\n const items = local.items;\n const getDate = local.getItemDate;\n\n // \uC544\uC774\uD15C\uC744 \uB0A0\uC9DC\uBCC4\uB85C \uADF8\uB8F9\uD551 (O(N))\n const itemMap = new Map<number, { item: T; index: number }[]>();\n for (let i = 0; i < items.length; i++) {\n const date = getDate(items[i], i);\n const key = date.tick;\n const arr = itemMap.get(key);\n if (arr) {\n arr.push({ item: items[i], index: i });\n } else {\n itemMap.set(key, [{ item: items[i], index: i }]);\n }\n }\n\n const firstDate = ym.getWeekSeqStartDate(weekStartDay(), minDaysInFirstWeek());\n const result: { date: DateOnly; items: { item: T; index: number }[] }[][] = [];\n\n for (let r = 0; r < 6; r++) {\n const row: { date: DateOnly; items: { item: T; index: number }[] }[] = [];\n for (let c = 0; c < 7; c++) {\n const date = firstDate.addDays(r * 7 + c);\n row.push({\n date,\n items: itemMap.get(date.tick) ?? [],\n });\n }\n result.push(row);\n }\n\n return result;\n });\n\n const getClassName = () => twMerge(baseClass, local.class);\n\n return (\n <table data-calendar class={getClassName()} {...rest}>\n <thead>\n <tr>\n <For each={weekHeaders()}>{(header) => <th>{header}</th>}</For>\n </tr>\n </thead>\n <tbody>\n <For each={dataTable()}>\n {(row) => (\n <tr>\n <For each={row}>\n {(cell) => (\n <td class={twMerge(notCurrentClass, cell.date.month !== yearMonth().month && \"not-current\")}>\n <div\n class={cell.date.month !== yearMonth().month ? twMerge(dayClass, notCurrentDayClass) : dayClass}\n >\n {cell.date.day}\n </div>\n <div class={contentClass}>\n <For each={cell.items}>{(entry) => local.renderItem(entry.item, entry.index)}</For>\n </div>\n </td>\n )}\n </For>\n </tr>\n )}\n </For>\n </tbody>\n </table>\n );\n}\n\nexport const Calendar = CalendarBase;\n"],
5
- "mappings": "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",
6
- "names": []
4
+ "sourcesContent": ["import { createMemo, For, type JSX, splitProps } from \"solid-js\";\nimport { DateOnly } from \"@simplysm/core-common\";\nimport clsx from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nimport { createControllableSignal } from \"../../../hooks/createControllableSignal\";\n\nexport interface CalendarProps<T> extends Omit<JSX.HTMLAttributes<HTMLTableElement>, \"children\"> {\n items: T[];\n getItemDate: (item: T, index: number) => DateOnly;\n renderItem: (item: T, index: number) => JSX.Element;\n yearMonth?: DateOnly;\n onYearMonthChange?: (value: DateOnly) => void;\n weekStartDay?: number;\n minDaysInFirstWeek?: number;\n}\n\nconst WEEKS = [\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\"];\n\nconst baseClass = clsx(\n \"w-full\",\n \"border-separate border-spacing-0\",\n \"border-b border-r border-base-300\",\n \"dark:border-base-600\",\n \"overflow-hidden rounded\",\n // th\n \"[&_th]:border-l [&_th]:border-t [&_th]:border-base-300 [&_th]:dark:border-base-600\",\n \"[&_th]:px-2 [&_th]:py-1\",\n \"[&_th]:bg-base-100 [&_th]:text-center [&_th]:text-sm [&_th]:font-semibold\",\n \"[&_th]:dark:bg-base-800\",\n // td\n \"[&_td]:border-l [&_td]:border-t [&_td]:border-base-300 [&_td]:dark:border-base-600\",\n \"[&_td]:p-1 [&_td]:align-top\",\n);\n\nconst notCurrentClass = clsx(\"[&.not-current]:bg-base-50\", \"[&.not-current]:dark:bg-base-900\");\n\nconst dayClass = clsx(\"mb-1 text-sm text-base-500\", \"dark:text-base-400\");\n\nconst notCurrentDayClass = clsx(\"text-base-300\", \"dark:text-base-600\");\n\nconst contentClass = clsx(\"flex flex-col gap-1\");\n\nfunction CalendarBase<T>(props: CalendarProps<T>) {\n const [local, rest] = splitProps(props, [\n \"class\",\n \"items\",\n \"getItemDate\",\n \"renderItem\",\n \"yearMonth\",\n \"onYearMonthChange\",\n \"weekStartDay\",\n \"minDaysInFirstWeek\",\n ]);\n\n const weekStartDay = () => local.weekStartDay ?? 0;\n const minDaysInFirstWeek = () => local.minDaysInFirstWeek ?? 1;\n\n const [yearMonth] = createControllableSignal({\n value: () => local.yearMonth ?? new DateOnly().setDay(1),\n onChange: () => local.onYearMonthChange,\n });\n\n const weekHeaders = createMemo(() => {\n const start = weekStartDay();\n return Array.from({ length: 7 }, (_, i) => WEEKS[(start + i) % 7]);\n });\n\n const dataTable = createMemo(() => {\n const ym = yearMonth();\n const items = local.items;\n const getDate = local.getItemDate;\n\n // 아이템을 날짜별로 그룹핑 (O(N))\n const itemMap = new Map<number, { item: T; index: number }[]>();\n for (let i = 0; i < items.length; i++) {\n const date = getDate(items[i], i);\n const key = date.tick;\n const arr = itemMap.get(key);\n if (arr) {\n arr.push({ item: items[i], index: i });\n } else {\n itemMap.set(key, [{ item: items[i], index: i }]);\n }\n }\n\n const firstDate = ym.getWeekSeqStartDate(weekStartDay(), minDaysInFirstWeek());\n const result: { date: DateOnly; items: { item: T; index: number }[] }[][] = [];\n\n for (let r = 0; r < 6; r++) {\n const row: { date: DateOnly; items: { item: T; index: number }[] }[] = [];\n for (let c = 0; c < 7; c++) {\n const date = firstDate.addDays(r * 7 + c);\n row.push({\n date,\n items: itemMap.get(date.tick) ?? [],\n });\n }\n result.push(row);\n }\n\n return result;\n });\n\n const getClassName = () => twMerge(baseClass, local.class);\n\n return (\n <table data-calendar class={getClassName()} {...rest}>\n <thead>\n <tr>\n <For each={weekHeaders()}>{(header) => <th>{header}</th>}</For>\n </tr>\n </thead>\n <tbody>\n <For each={dataTable()}>\n {(row) => (\n <tr>\n <For each={row}>\n {(cell) => (\n <td class={twMerge(notCurrentClass, cell.date.month !== yearMonth().month && \"not-current\")}>\n <div\n class={cell.date.month !== yearMonth().month ? twMerge(dayClass, notCurrentDayClass) : dayClass}\n >\n {cell.date.day}\n </div>\n <div class={contentClass}>\n <For each={cell.items}>{(entry) => local.renderItem(entry.item, entry.index)}</For>\n </div>\n </td>\n )}\n </For>\n </tr>\n )}\n </For>\n </tbody>\n </table>\n );\n}\n\nexport const Calendar = CalendarBase;\n"],
5
+ "mappings": "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",
6
+ "names": ["createMemo", "For", "splitProps", "DateOnly", "clsx", "twMerge", "createControllableSignal", "WEEKS", "baseClass", "notCurrentClass", "dayClass", "notCurrentDayClass", "contentClass", "CalendarBase", "props", "local", "rest", "weekStartDay", "minDaysInFirstWeek", "yearMonth", "value", "setDay", "onChange", "onYearMonthChange", "weekHeaders", "start", "Array", "from", "length", "_", "i", "dataTable", "ym", "items", "getDate", "getItemDate", "itemMap", "Map", "date", "key", "tick", "arr", "get", "push", "item", "index", "set", "firstDate", "getWeekSeqStartDate", "result", "r", "row", "c", "addDays", "getClassName", "class", "_el$", "_tmpl$", "_el$2", "firstChild", "_el$3", "_el$4", "nextSibling", "_$spread", "_$mergeProps", "_$insert", "_$createComponent", "each", "children", "header", "_el$5", "_tmpl$2", "_el$6", "_tmpl$3", "cell", "_el$7", "_tmpl$4", "_el$8", "_el$9", "day", "_$className", "entry", "renderItem", "_$effect", "_p$", "_v$", "month", "_v$2", "e", "t", "undefined", "Calendar"]
7
7
  }