@simplysm/solid 13.0.78 → 13.0.81

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 (206) hide show
  1. package/README.md +23 -217
  2. package/dist/components/data/Pagination.js +2 -2
  3. package/dist/components/data/Pagination.js.map +2 -2
  4. package/dist/components/data/Table.js +2 -2
  5. package/dist/components/data/Table.js.map +2 -2
  6. package/dist/components/data/calendar/Calendar.js +2 -2
  7. package/dist/components/data/calendar/Calendar.js.map +2 -2
  8. package/dist/components/data/kanban/Kanban.js +3 -3
  9. package/dist/components/data/kanban/Kanban.js.map +2 -2
  10. package/dist/components/data/list/ListItem.js +1 -1
  11. package/dist/components/data/list/ListItem.js.map +1 -1
  12. package/dist/components/data/list/ListItem.styles.js +1 -1
  13. package/dist/components/data/list/ListItem.styles.js.map +1 -1
  14. package/dist/components/data/sheet/DataSheet.js +16 -16
  15. package/dist/components/data/sheet/DataSheet.js.map +2 -2
  16. package/dist/components/data/sheet/DataSheet.styles.d.ts.map +1 -1
  17. package/dist/components/data/sheet/DataSheet.styles.js +2 -2
  18. package/dist/components/data/sheet/DataSheet.styles.js.map +1 -1
  19. package/dist/components/data/sheet/DataSheetConfigDialog.js +5 -5
  20. package/dist/components/data/sheet/DataSheetConfigDialog.js.map +2 -2
  21. package/dist/components/data/sheet/hooks/{useDataSheetExpansion.d.ts → createDataSheetExpansion.d.ts} +4 -4
  22. package/dist/components/data/sheet/hooks/createDataSheetExpansion.d.ts.map +1 -0
  23. package/dist/components/data/sheet/hooks/{useDataSheetExpansion.js → createDataSheetExpansion.js} +3 -3
  24. package/dist/components/data/sheet/hooks/{useDataSheetExpansion.js.map → createDataSheetExpansion.js.map} +2 -2
  25. package/dist/components/data/sheet/hooks/{useDataSheetFixedColumns.d.ts → createDataSheetFixedColumns.d.ts} +3 -3
  26. package/dist/components/data/sheet/hooks/createDataSheetFixedColumns.d.ts.map +1 -0
  27. package/dist/components/data/sheet/hooks/{useDataSheetFixedColumns.js → createDataSheetFixedColumns.js} +3 -3
  28. package/dist/components/data/sheet/hooks/{useDataSheetFixedColumns.js.map → createDataSheetFixedColumns.js.map} +2 -2
  29. package/dist/components/data/sheet/hooks/{useDataSheetHeaderCell.d.ts → createDataSheetHeaderCell.d.ts} +3 -3
  30. package/dist/components/data/sheet/hooks/createDataSheetHeaderCell.d.ts.map +1 -0
  31. package/dist/components/data/sheet/hooks/{useDataSheetHeaderCell.js → createDataSheetHeaderCell.js} +3 -3
  32. package/dist/components/data/sheet/hooks/{useDataSheetHeaderCell.js.map → createDataSheetHeaderCell.js.map} +3 -3
  33. package/dist/components/data/sheet/hooks/{useDataSheetPaging.d.ts → createDataSheetPaging.d.ts} +4 -4
  34. package/dist/components/data/sheet/hooks/createDataSheetPaging.d.ts.map +1 -0
  35. package/dist/components/data/sheet/hooks/{useDataSheetPaging.js → createDataSheetPaging.js} +3 -3
  36. package/dist/components/data/sheet/hooks/{useDataSheetPaging.js.map → createDataSheetPaging.js.map} +2 -2
  37. package/dist/components/data/sheet/hooks/{useDataSheetReorder.d.ts → createDataSheetReorder.d.ts} +3 -3
  38. package/dist/components/data/sheet/hooks/createDataSheetReorder.d.ts.map +1 -0
  39. package/dist/components/data/sheet/hooks/{useDataSheetReorder.js → createDataSheetReorder.js} +3 -3
  40. package/dist/components/data/sheet/hooks/{useDataSheetReorder.js.map → createDataSheetReorder.js.map} +2 -2
  41. package/dist/components/data/sheet/hooks/{useDataSheetSelection.d.ts → createDataSheetSelection.d.ts} +4 -4
  42. package/dist/components/data/sheet/hooks/createDataSheetSelection.d.ts.map +1 -0
  43. package/dist/components/data/sheet/hooks/{useDataSheetSelection.js → createDataSheetSelection.js} +3 -3
  44. package/dist/components/data/sheet/hooks/{useDataSheetSelection.js.map → createDataSheetSelection.js.map} +2 -2
  45. package/dist/components/data/sheet/hooks/{useDataSheetSorting.d.ts → createDataSheetSorting.d.ts} +4 -4
  46. package/dist/components/data/sheet/hooks/createDataSheetSorting.d.ts.map +1 -0
  47. package/dist/components/data/sheet/hooks/{useDataSheetSorting.js → createDataSheetSorting.js} +3 -3
  48. package/dist/components/data/sheet/hooks/{useDataSheetSorting.js.map → createDataSheetSorting.js.map} +2 -2
  49. package/dist/components/disclosure/Dialog.d.ts +2 -2
  50. package/dist/components/disclosure/Dialog.d.ts.map +1 -1
  51. package/dist/components/disclosure/Dialog.js +4 -4
  52. package/dist/components/disclosure/Dialog.js.map +2 -2
  53. package/dist/components/disclosure/Tabs.js +3 -3
  54. package/dist/components/disclosure/Tabs.js.map +2 -2
  55. package/dist/components/features/crud-sheet/CrudSheet.js +3 -3
  56. package/dist/components/features/crud-sheet/CrudSheet.js.map +2 -2
  57. package/dist/components/features/data-select-button/DataSelectButton.d.ts +23 -9
  58. package/dist/components/features/data-select-button/DataSelectButton.d.ts.map +1 -1
  59. package/dist/components/features/data-select-button/DataSelectButton.js +1 -1
  60. package/dist/components/features/data-select-button/DataSelectButton.js.map +1 -1
  61. package/dist/components/features/permission-table/PermissionTable.js +2 -2
  62. package/dist/components/features/permission-table/PermissionTable.js.map +2 -2
  63. package/dist/components/features/shared-data/SharedDataSelect.d.ts +23 -9
  64. package/dist/components/features/shared-data/SharedDataSelect.d.ts.map +1 -1
  65. package/dist/components/features/shared-data/SharedDataSelect.js.map +1 -1
  66. package/dist/components/features/shared-data/SharedDataSelectButton.d.ts +25 -10
  67. package/dist/components/features/shared-data/SharedDataSelectButton.d.ts.map +1 -1
  68. package/dist/components/features/shared-data/SharedDataSelectButton.js.map +1 -1
  69. package/dist/components/features/shared-data/SharedDataSelectList.js +1 -1
  70. package/dist/components/features/shared-data/SharedDataSelectList.js.map +2 -2
  71. package/dist/components/feedback/Progress.d.ts +1 -1
  72. package/dist/components/feedback/Progress.d.ts.map +1 -1
  73. package/dist/components/feedback/Progress.js +3 -3
  74. package/dist/components/feedback/Progress.js.map +2 -2
  75. package/dist/components/form-control/Button.js +2 -2
  76. package/dist/components/form-control/Button.js.map +2 -2
  77. package/dist/components/form-control/DropdownTrigger.styles.js +2 -2
  78. package/dist/components/form-control/DropdownTrigger.styles.js.map +1 -1
  79. package/dist/components/form-control/ThemeToggle.js +4 -4
  80. package/dist/components/form-control/ThemeToggle.js.map +2 -2
  81. package/dist/components/form-control/checkbox/Checkbox.d.ts +3 -3
  82. package/dist/components/form-control/checkbox/Checkbox.d.ts.map +1 -1
  83. package/dist/components/form-control/checkbox/Checkbox.styles.d.ts.map +1 -1
  84. package/dist/components/form-control/checkbox/Checkbox.styles.js +3 -3
  85. package/dist/components/form-control/checkbox/Checkbox.styles.js.map +1 -1
  86. package/dist/components/form-control/checkbox/CheckboxGroup.js +2 -2
  87. package/dist/components/form-control/checkbox/CheckboxGroup.js.map +2 -2
  88. package/dist/components/form-control/checkbox/Radio.d.ts +3 -3
  89. package/dist/components/form-control/checkbox/Radio.d.ts.map +1 -1
  90. package/dist/components/form-control/checkbox/RadioGroup.js +2 -2
  91. package/dist/components/form-control/checkbox/RadioGroup.js.map +2 -2
  92. package/dist/components/form-control/checkbox/SelectableBase.d.ts +3 -3
  93. package/dist/components/form-control/checkbox/SelectableBase.d.ts.map +1 -1
  94. package/dist/components/form-control/checkbox/SelectableBase.js +10 -10
  95. package/dist/components/form-control/checkbox/SelectableBase.js.map +2 -2
  96. package/dist/components/form-control/color-picker/ColorPicker.js +2 -2
  97. package/dist/components/form-control/color-picker/ColorPicker.js.map +2 -2
  98. package/dist/components/form-control/date-range-picker/DateRangePicker.js +1 -1
  99. package/dist/components/form-control/date-range-picker/DateRangePicker.js.map +2 -2
  100. package/dist/components/form-control/editor/EditorToolbar.js +1 -1
  101. package/dist/components/form-control/editor/EditorToolbar.js.map +2 -2
  102. package/dist/components/form-control/editor/RichTextEditor.js +2 -2
  103. package/dist/components/form-control/editor/RichTextEditor.js.map +2 -2
  104. package/dist/components/form-control/field/Field.styles.js +7 -7
  105. package/dist/components/form-control/field/Field.styles.js.map +1 -1
  106. package/dist/components/form-control/field/NumberInput.js +1 -1
  107. package/dist/components/form-control/field/NumberInput.js.map +1 -1
  108. package/dist/components/form-control/field/TextInput.js +1 -1
  109. package/dist/components/form-control/field/TextInput.js.map +1 -1
  110. package/dist/components/form-control/field/Textarea.js +1 -1
  111. package/dist/components/form-control/field/Textarea.js.map +1 -1
  112. package/dist/components/form-control/numpad/Numpad.d.ts +2 -2
  113. package/dist/components/form-control/numpad/Numpad.d.ts.map +1 -1
  114. package/dist/components/form-control/numpad/Numpad.js +4 -4
  115. package/dist/components/form-control/numpad/Numpad.js.map +2 -2
  116. package/dist/components/form-control/select/Select.js +1 -1
  117. package/dist/components/form-control/select/Select.js.map +2 -2
  118. package/dist/components/form-control/state-preset/StatePreset.js +8 -8
  119. package/dist/components/form-control/state-preset/StatePreset.js.map +2 -2
  120. package/dist/components/layout/topbar/Topbar.js +3 -3
  121. package/dist/components/layout/topbar/Topbar.js.map +2 -2
  122. package/dist/providers/PwaUpdateProvider.d.ts.map +1 -1
  123. package/dist/providers/PwaUpdateProvider.js +11 -4
  124. package/dist/providers/PwaUpdateProvider.js.map +2 -2
  125. package/dist/styles/control.styles.d.ts +3 -3
  126. package/dist/styles/control.styles.d.ts.map +1 -1
  127. package/dist/styles/control.styles.js +2 -2
  128. package/dist/styles/control.styles.js.map +1 -1
  129. package/docs/data.md +204 -0
  130. package/docs/disclosure.md +139 -0
  131. package/docs/display.md +125 -0
  132. package/docs/features.md +282 -0
  133. package/docs/feedback.md +136 -0
  134. package/docs/form-controls.md +520 -0
  135. package/docs/helpers.md +172 -0
  136. package/docs/hooks.md +146 -0
  137. package/docs/layout.md +94 -0
  138. package/docs/providers.md +179 -0
  139. package/package.json +19 -18
  140. package/src/components/data/Pagination.tsx +2 -2
  141. package/src/components/data/Table.tsx +2 -2
  142. package/src/components/data/calendar/Calendar.tsx +2 -2
  143. package/src/components/data/kanban/Kanban.tsx +2 -2
  144. package/src/components/data/list/ListItem.styles.ts +1 -1
  145. package/src/components/data/list/ListItem.tsx +1 -1
  146. package/src/components/data/sheet/DataSheet.styles.ts +2 -2
  147. package/src/components/data/sheet/DataSheet.tsx +16 -16
  148. package/src/components/data/sheet/DataSheetConfigDialog.tsx +5 -5
  149. package/src/components/data/sheet/hooks/{useDataSheetExpansion.ts → createDataSheetExpansion.ts} +5 -5
  150. package/src/components/data/sheet/hooks/{useDataSheetFixedColumns.ts → createDataSheetFixedColumns.ts} +3 -3
  151. package/src/components/data/sheet/hooks/{useDataSheetHeaderCell.tsx → createDataSheetHeaderCell.tsx} +2 -2
  152. package/src/components/data/sheet/hooks/{useDataSheetPaging.ts → createDataSheetPaging.ts} +5 -5
  153. package/src/components/data/sheet/hooks/{useDataSheetReorder.ts → createDataSheetReorder.ts} +3 -3
  154. package/src/components/data/sheet/hooks/{useDataSheetSelection.ts → createDataSheetSelection.ts} +5 -5
  155. package/src/components/data/sheet/hooks/{useDataSheetSorting.ts → createDataSheetSorting.ts} +5 -5
  156. package/src/components/disclosure/Dialog.tsx +5 -5
  157. package/src/components/disclosure/Tabs.tsx +3 -3
  158. package/src/components/features/crud-sheet/CrudSheet.tsx +3 -3
  159. package/src/components/features/data-select-button/DataSelectButton.tsx +42 -11
  160. package/src/components/features/permission-table/PermissionTable.tsx +2 -2
  161. package/src/components/features/shared-data/SharedDataSelect.tsx +45 -14
  162. package/src/components/features/shared-data/SharedDataSelectButton.tsx +38 -11
  163. package/src/components/features/shared-data/SharedDataSelectList.tsx +1 -1
  164. package/src/components/feedback/Progress.tsx +4 -4
  165. package/src/components/form-control/Button.tsx +2 -2
  166. package/src/components/form-control/DropdownTrigger.styles.ts +2 -2
  167. package/src/components/form-control/ThemeToggle.tsx +4 -4
  168. package/src/components/form-control/checkbox/Checkbox.styles.ts +3 -3
  169. package/src/components/form-control/checkbox/Checkbox.tsx +3 -3
  170. package/src/components/form-control/checkbox/CheckboxGroup.tsx +2 -2
  171. package/src/components/form-control/checkbox/Radio.tsx +3 -3
  172. package/src/components/form-control/checkbox/RadioGroup.tsx +2 -2
  173. package/src/components/form-control/checkbox/SelectableBase.tsx +15 -15
  174. package/src/components/form-control/color-picker/ColorPicker.tsx +2 -2
  175. package/src/components/form-control/date-range-picker/DateRangePicker.tsx +1 -1
  176. package/src/components/form-control/editor/EditorToolbar.tsx +1 -1
  177. package/src/components/form-control/editor/RichTextEditor.tsx +2 -2
  178. package/src/components/form-control/field/Field.styles.ts +7 -7
  179. package/src/components/form-control/field/NumberInput.tsx +1 -1
  180. package/src/components/form-control/field/TextInput.tsx +1 -1
  181. package/src/components/form-control/field/Textarea.tsx +1 -1
  182. package/src/components/form-control/numpad/Numpad.tsx +6 -6
  183. package/src/components/form-control/select/Select.tsx +1 -1
  184. package/src/components/form-control/state-preset/StatePreset.tsx +9 -9
  185. package/src/components/layout/topbar/Topbar.tsx +3 -3
  186. package/src/providers/PwaUpdateProvider.tsx +12 -5
  187. package/src/styles/control.styles.ts +3 -3
  188. package/tests/components/data/sheet/hooks/{useDataSheetExpansion.spec.ts → createDataSheetExpansion.spec.ts} +16 -16
  189. package/tests/components/data/sheet/hooks/{useDataSheetFixedColumns.spec.ts → createDataSheetFixedColumns.spec.ts} +27 -27
  190. package/tests/components/data/sheet/hooks/{useDataSheetPaging.spec.ts → createDataSheetPaging.spec.ts} +16 -16
  191. package/tests/components/data/sheet/hooks/{useDataSheetReorder.spec.ts → createDataSheetReorder.spec.ts} +14 -14
  192. package/tests/components/data/sheet/hooks/{useDataSheetSelection.spec.ts → createDataSheetSelection.spec.ts} +26 -26
  193. package/tests/components/data/sheet/hooks/{useDataSheetSorting.spec.ts → createDataSheetSorting.spec.ts} +13 -13
  194. package/tests/components/disclosure/Dialog.spec.tsx +2 -2
  195. package/tests/components/features/data-select-button/DataSelectButton.spec.tsx +55 -6
  196. package/tests/components/features/shared-data/SharedDataSelect.spec.tsx +40 -0
  197. package/tests/components/form-control/checkbox/Checkbox.spec.tsx +8 -8
  198. package/tests/components/form-control/checkbox/Radio.spec.tsx +9 -9
  199. package/tests/components/form-control/numpad/Numpad.spec.tsx +10 -10
  200. package/dist/components/data/sheet/hooks/useDataSheetExpansion.d.ts.map +0 -1
  201. package/dist/components/data/sheet/hooks/useDataSheetFixedColumns.d.ts.map +0 -1
  202. package/dist/components/data/sheet/hooks/useDataSheetHeaderCell.d.ts.map +0 -1
  203. package/dist/components/data/sheet/hooks/useDataSheetPaging.d.ts.map +0 -1
  204. package/dist/components/data/sheet/hooks/useDataSheetReorder.d.ts.map +0 -1
  205. package/dist/components/data/sheet/hooks/useDataSheetSelection.d.ts.map +0 -1
  206. package/dist/components/data/sheet/hooks/useDataSheetSorting.d.ts.map +0 -1
package/docs/data.md ADDED
@@ -0,0 +1,204 @@
1
+ # Data
2
+
3
+ ## Table
4
+
5
+ ```typescript
6
+ interface TableProps extends JSX.HTMLAttributes<HTMLTableElement> {
7
+ inset?: boolean;
8
+ }
9
+ ```
10
+
11
+ Basic HTML table with consistent styling.
12
+
13
+ **Sub-components:** `Table.Row`, `Table.HeaderCell`, `Table.Cell`
14
+
15
+ ---
16
+
17
+ ## List
18
+
19
+ ```typescript
20
+ interface ListProps extends JSX.HTMLAttributes<HTMLDivElement> {
21
+ inset?: boolean;
22
+ }
23
+ ```
24
+
25
+ Vertical list with keyboard navigation (ArrowUp/Down, Home/End) and tree-view support (ArrowRight/Left to expand/collapse).
26
+
27
+ **Sub-component:** `List.Item`
28
+
29
+ ---
30
+
31
+ ## Pagination
32
+
33
+ ```typescript
34
+ interface PaginationProps extends JSX.HTMLAttributes<HTMLElement> {
35
+ page: number;
36
+ onPageChange?: (page: number) => void;
37
+ totalPageCount: number;
38
+ displayPageCount?: number;
39
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
40
+ }
41
+ ```
42
+
43
+ Page navigation control. `page` is 1-based. `displayPageCount` controls how many page numbers are visible at once.
44
+
45
+ ---
46
+
47
+ ## DataSheet
48
+
49
+ ```typescript
50
+ interface DataSheetProps<TItem> {
51
+ items?: TItem[];
52
+ storageKey?: string;
53
+ hideConfigBar?: boolean;
54
+ inset?: boolean;
55
+ contentStyle?: JSX.CSSProperties | string;
56
+
57
+ // Sorting
58
+ sorts?: SortingDef[];
59
+ onSortsChange?: (sorts: SortingDef[]) => void;
60
+ autoSort?: boolean;
61
+
62
+ // Pagination
63
+ page?: number;
64
+ onPageChange?: (page: number) => void;
65
+ totalPageCount?: number;
66
+ pageSize?: number;
67
+ displayPageCount?: number;
68
+
69
+ // Selection
70
+ selectionMode?: "single" | "multiple";
71
+ selection?: TItem[];
72
+ onSelectionChange?: (items: TItem[]) => void;
73
+ autoSelect?: boolean;
74
+ isItemSelectable?: (item: TItem) => boolean | string;
75
+
76
+ // Tree expansion
77
+ expandedItems?: TItem[];
78
+ onExpandedItemsChange?: (items: TItem[]) => void;
79
+ itemChildren?: (item: TItem, index: number) => TItem[] | undefined;
80
+
81
+ // Cell styling
82
+ cellClass?: (item: TItem, colKey: string) => string | undefined;
83
+ cellStyle?: (item: TItem, colKey: string) => string | undefined;
84
+
85
+ // Reordering
86
+ onItemsReorder?: (event: DataSheetReorderEvent<TItem>) => void;
87
+
88
+ class?: string;
89
+ children: JSX.Element;
90
+ }
91
+ ```
92
+
93
+ Advanced data grid with sorting, pagination, row selection, tree expansion, column reordering, and column configuration persistence.
94
+
95
+ - `storageKey` — persists column configuration (width, visibility, order) to sync storage
96
+ - `autoSort` — sorts items client-side without `onSortsChange`
97
+ - `autoSelect` — manages selection state internally
98
+ - `itemChildren` — enables tree-structured rows
99
+
100
+ **Sub-component:** `DataSheet.Column`
101
+
102
+ ```typescript
103
+ interface DataSheetColumnProps<TItem> {
104
+ key: string;
105
+ header?: string | string[];
106
+ headerContent?: () => JSX.Element;
107
+ headerStyle?: string;
108
+ summary?: () => JSX.Element;
109
+ tooltip?: string;
110
+ fixed?: boolean;
111
+ hidden?: boolean;
112
+ collapse?: boolean;
113
+ width?: string;
114
+ class?: string;
115
+ sortable?: boolean;
116
+ resizable?: boolean;
117
+ children: (ctx: DataSheetCellContext<TItem>) => JSX.Element;
118
+ }
119
+
120
+ interface DataSheetCellContext<TItem> {
121
+ item: TItem;
122
+ index: number;
123
+ row: number;
124
+ depth: number;
125
+ }
126
+
127
+ interface SortingDef {
128
+ key: string;
129
+ desc: boolean;
130
+ }
131
+
132
+ interface DataSheetReorderEvent<TItem> {
133
+ item: TItem;
134
+ targetItem: TItem;
135
+ position: "before" | "after" | "inside";
136
+ }
137
+ ```
138
+
139
+ ---
140
+
141
+ ## Calendar
142
+
143
+ ```typescript
144
+ interface CalendarProps<TValue> extends Omit<JSX.HTMLAttributes<HTMLTableElement>, "children"> {
145
+ items: TValue[];
146
+ getItemDate: (item: TValue, index: number) => DateOnly;
147
+ renderItem: (item: TValue, index: number) => JSX.Element;
148
+ yearMonth?: DateOnly;
149
+ onYearMonthChange?: (value: DateOnly) => void;
150
+ weekStartDay?: number;
151
+ minDaysInFirstWeek?: number;
152
+ }
153
+ ```
154
+
155
+ Monthly calendar view that renders items on their corresponding dates. `getItemDate` maps items to dates. `renderItem` renders each item cell.
156
+
157
+ ---
158
+
159
+ ## Kanban
160
+
161
+ ```typescript
162
+ interface KanbanProps<TCardValue, TLaneValue> extends Omit<JSX.HTMLAttributes<HTMLDivElement>, "children" | "onDrop"> {
163
+ onDrop?: (info: KanbanDropInfo<TLaneValue, TCardValue>) => void;
164
+ selectedValues?: TCardValue[];
165
+ onSelectedValuesChange?: (values: TCardValue[]) => void;
166
+ children?: JSX.Element;
167
+ }
168
+ ```
169
+
170
+ Kanban board with drag-and-drop card management.
171
+
172
+ **Sub-components:**
173
+ - `Kanban.Lane` — `{ value?: TLaneValue; busy?: boolean; collapsible?: boolean; collapsed?: boolean; onCollapsedChange?: (collapsed: boolean) => void }`
174
+ - `Kanban.Card` — `{ value?: TCardValue; draggable?: boolean; selectable?: boolean; contentClass?: string }`
175
+ - `Kanban.LaneTitle` — lane title slot
176
+ - `Kanban.LaneTools` — lane toolbar slot
177
+
178
+ ---
179
+
180
+ ## Usage Examples
181
+
182
+ ```typescript
183
+ import { DataSheet, Pagination } from "@simplysm/solid";
184
+
185
+ <DataSheet
186
+ items={data()}
187
+ sorts={sorts()}
188
+ onSortsChange={setSorts}
189
+ page={page()}
190
+ onPageChange={setPage}
191
+ totalPageCount={totalPages()}
192
+ selectionMode="multiple"
193
+ selection={selected()}
194
+ onSelectionChange={setSelected}
195
+ storageKey="my-table"
196
+ >
197
+ <DataSheet.Column key="name" header="Name" sortable>
198
+ {(ctx) => ctx.item.name}
199
+ </DataSheet.Column>
200
+ <DataSheet.Column key="age" header="Age" sortable width="80px">
201
+ {(ctx) => ctx.item.age}
202
+ </DataSheet.Column>
203
+ </DataSheet>
204
+ ```
@@ -0,0 +1,139 @@
1
+ # Disclosure
2
+
3
+ ## Collapse
4
+
5
+ ```typescript
6
+ interface CollapseProps extends JSX.HTMLAttributes<HTMLDivElement> {
7
+ open?: boolean;
8
+ }
9
+ ```
10
+
11
+ Collapsible content panel with CSS transition. Content is hidden when `open` is `false`.
12
+
13
+ ---
14
+
15
+ ## Dropdown
16
+
17
+ ```typescript
18
+ interface DropdownProps {
19
+ position?: { x: number; y: number };
20
+ open?: boolean;
21
+ onOpenChange?: (open: boolean) => void;
22
+ maxHeight?: number;
23
+ disabled?: boolean;
24
+ keyboardNav?: boolean;
25
+ class?: string;
26
+ style?: JSX.CSSProperties;
27
+ children: JSX.Element;
28
+ }
29
+ ```
30
+
31
+ Dropdown popup anchored to a trigger element. When `position` is provided instead of a trigger, the popup appears at the given absolute coordinates (useful for context menus). `keyboardNav` enables ArrowUp/Down navigation. Default `maxHeight` is 300px.
32
+
33
+ **Sub-components:**
34
+ - `Dropdown.Trigger` — the element that opens the dropdown on click
35
+ - `Dropdown.Content` — the popup content
36
+
37
+ ---
38
+
39
+ ## Dialog
40
+
41
+ ```typescript
42
+ interface DialogProps {
43
+ open?: boolean;
44
+ onOpenChange?: (open: boolean) => void;
45
+ withCloseButton?: boolean;
46
+ closeOnInteractOutside?: boolean;
47
+ closeOnEscape?: boolean;
48
+ resizable?: boolean;
49
+ draggable?: boolean;
50
+ mode?: "float" | "fill";
51
+ width?: number;
52
+ height?: number;
53
+ minWidth?: number;
54
+ minHeight?: number;
55
+ position?: "bottom-right" | "top-right";
56
+ headerStyle?: JSX.CSSProperties | string;
57
+ beforeClose?: () => boolean;
58
+ onCloseComplete?: () => void;
59
+ class?: string;
60
+ }
61
+ ```
62
+
63
+ Modal dialog with overlay. Supports both declarative (template) and programmatic usage.
64
+
65
+ - `mode="float"` — centered floating dialog (default)
66
+ - `mode="fill"` — full-screen dialog
67
+ - `beforeClose` — return `false` to prevent closing
68
+ - `resizable` / `draggable` — enable resize handles / drag-to-move
69
+
70
+ **Sub-components:**
71
+ - `Dialog.Header` — dialog title bar
72
+ - `Dialog.Action` — dialog action buttons area
73
+
74
+ ### Programmatic API
75
+
76
+ ```typescript
77
+ interface DialogContextValue {
78
+ show<P>(
79
+ component: Component<P>,
80
+ props: Omit<P, "close">,
81
+ options?: DialogShowOptions,
82
+ ): Promise<ExtractCloseResult<P> | undefined>;
83
+ }
84
+ ```
85
+
86
+ Use `DialogProvider` and `useDialog()` for programmatic dialog management. The shown component receives a `close(result?)` prop to close the dialog and return a value.
87
+
88
+ ```typescript
89
+ const dialog = useDialog();
90
+ const result = await dialog.show(MyDialogContent, { data }, {
91
+ width: 600,
92
+ withCloseButton: true,
93
+ });
94
+ ```
95
+
96
+ ---
97
+
98
+ ## Tabs
99
+
100
+ ```typescript
101
+ interface TabsProps {
102
+ value?: string;
103
+ onValueChange?: (value: string) => void;
104
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
105
+ class?: string;
106
+ style?: JSX.CSSProperties;
107
+ children?: JSX.Element;
108
+ }
109
+ ```
110
+
111
+ Tab navigation. Content rendering is managed externally based on the selected `value`.
112
+
113
+ **Sub-component:** `Tabs.Tab` — `{ value: string; disabled?: boolean; class?: string; children?: JSX.Element }`
114
+
115
+ ---
116
+
117
+ ## Usage Examples
118
+
119
+ ```typescript
120
+ import { Dialog, Dropdown, Tabs, Collapse } from "@simplysm/solid";
121
+
122
+ // Declarative dialog
123
+ <Dialog open={isOpen()} onOpenChange={setIsOpen} width={500} withCloseButton>
124
+ <Dialog.Header>Edit User</Dialog.Header>
125
+ <form>...</form>
126
+ <Dialog.Action>
127
+ <Button onClick={() => setIsOpen(false)}>Cancel</Button>
128
+ <Button theme="primary" onClick={save}>Save</Button>
129
+ </Dialog.Action>
130
+ </Dialog>
131
+
132
+ // Tabs
133
+ <Tabs value={tab()} onValueChange={setTab}>
134
+ <Tabs.Tab value="general">General</Tabs.Tab>
135
+ <Tabs.Tab value="settings">Settings</Tabs.Tab>
136
+ </Tabs>
137
+ <Show when={tab() === "general"}>General content</Show>
138
+ <Show when={tab() === "settings"}>Settings content</Show>
139
+ ```
@@ -0,0 +1,125 @@
1
+ # Display
2
+
3
+ ## Card
4
+
5
+ ```typescript
6
+ interface CardProps extends JSX.HTMLAttributes<HTMLDivElement> {}
7
+ ```
8
+
9
+ Simple card container with default border and background styling.
10
+
11
+ ---
12
+
13
+ ## Icon
14
+
15
+ ```typescript
16
+ interface IconProps extends Omit<TablerIconProps, "size"> {
17
+ icon: Component<TablerIconProps>;
18
+ size?: string | number;
19
+ }
20
+ ```
21
+
22
+ Renders a Tabler icon. Pass the icon component via the `icon` prop.
23
+
24
+ ```typescript
25
+ import { Icon } from "@simplysm/solid";
26
+ import { IconUser } from "@tabler/icons-solidjs";
27
+
28
+ <Icon icon={IconUser} size={24} />
29
+ ```
30
+
31
+ ---
32
+
33
+ ## Tag
34
+
35
+ ```typescript
36
+ interface TagProps extends JSX.HTMLAttributes<HTMLSpanElement> {
37
+ theme?: "base" | "primary" | "success" | "warning" | "danger" | "danger-light" | "neutral";
38
+ }
39
+ ```
40
+
41
+ Inline badge/tag with semantic theming.
42
+
43
+ ---
44
+
45
+ ## Link
46
+
47
+ ```typescript
48
+ interface LinkProps extends JSX.AnchorHTMLAttributes<HTMLAnchorElement> {
49
+ theme?: "base" | "primary" | "success" | "warning" | "danger" | "danger-light" | "neutral";
50
+ disabled?: boolean;
51
+ }
52
+ ```
53
+
54
+ Styled anchor link with theme and disabled state.
55
+
56
+ ---
57
+
58
+ ## Alert
59
+
60
+ ```typescript
61
+ interface AlertProps extends JSX.HTMLAttributes<HTMLDivElement> {
62
+ theme?: "base" | "primary" | "success" | "warning" | "danger" | "danger-light" | "neutral";
63
+ }
64
+ ```
65
+
66
+ Alert banner with semantic theming.
67
+
68
+ ---
69
+
70
+ ## Barcode
71
+
72
+ ```typescript
73
+ interface BarcodeProps extends JSX.HTMLAttributes<HTMLDivElement> {
74
+ type: BarcodeType;
75
+ value?: string;
76
+ }
77
+ ```
78
+
79
+ Renders barcodes and QR codes using bwip-js. `type` supports 111+ barcode formats including `"qrcode"`, `"code128"`, `"ean13"`, `"datamatrix"`, etc.
80
+
81
+ ---
82
+
83
+ ## Echarts
84
+
85
+ ```typescript
86
+ interface EchartsProps extends JSX.HTMLAttributes<HTMLDivElement> {
87
+ option: echarts.EChartsOption;
88
+ busy?: boolean;
89
+ }
90
+ ```
91
+
92
+ Apache ECharts wrapper. Requires `echarts` as a peer dependency. Set `busy` to show a loading overlay.
93
+
94
+ ---
95
+
96
+ ## Progress
97
+
98
+ ```typescript
99
+ interface ProgressProps extends JSX.HTMLAttributes<HTMLDivElement> {
100
+ value: number;
101
+ theme?: "base" | "primary" | "success" | "warning" | "danger" | "danger-light" | "neutral";
102
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
103
+ inset?: boolean;
104
+ }
105
+ ```
106
+
107
+ Progress bar. `value` is in the range 0–100 (0 = 0%, 100 = 100%). Pass `children` to display custom content instead of the default percentage text.
108
+
109
+ ---
110
+
111
+ ## Usage Examples
112
+
113
+ ```typescript
114
+ import { Card, Tag, Alert, Progress, Icon } from "@simplysm/solid";
115
+ import { IconCheck } from "@tabler/icons-solidjs";
116
+
117
+ <Card>
118
+ <Tag theme="success">Active</Tag>
119
+ <Progress value={75} theme="primary" />
120
+ </Card>
121
+
122
+ <Alert theme="warning">
123
+ <Icon icon={IconCheck} /> Operation completed with warnings.
124
+ </Alert>
125
+ ```