@medyll/idae-slotui-svelte 0.120.0 → 0.122.0

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 (208) hide show
  1. package/README.md +47 -47
  2. package/dist/base/alert/Alert.demo.svelte +62 -62
  3. package/dist/base/alert/Alert.svelte +121 -121
  4. package/dist/base/alert/alert.scss +93 -93
  5. package/dist/base/avatar/Avatar.demo.svelte +41 -41
  6. package/dist/base/avatar/Avatar.preview.svelte +6 -6
  7. package/dist/base/avatar/Avatar.svelte +65 -65
  8. package/dist/base/avatar/avatar.scss +17 -17
  9. package/dist/base/backdrop/Backdrop.demo.svelte +49 -49
  10. package/dist/base/backdrop/Backdrop.svelte +78 -78
  11. package/dist/base/backdrop/backdrop.scss +34 -34
  12. package/dist/base/badge/Badge.svelte +31 -31
  13. package/dist/base/badge/badge.scss +19 -19
  14. package/dist/base/box/Box.demo.svelte +54 -54
  15. package/dist/base/box/Box.svelte +72 -72
  16. package/dist/base/box/box.scss +33 -33
  17. package/dist/base/breadCrumb/BreadCrumb.svelte +23 -23
  18. package/dist/base/breadCrumb/breadcrumb.scss +11 -11
  19. package/dist/base/cartouche/Cartouche.demo.svelte +108 -108
  20. package/dist/base/cartouche/Cartouche.svelte +114 -114
  21. package/dist/base/cartouche/cartouche.scss +114 -114
  22. package/dist/base/chipper/Chipper.demo.svelte +45 -45
  23. package/dist/base/chipper/Chipper.svelte +36 -36
  24. package/dist/base/chipper/chipper.scss +65 -65
  25. package/dist/base/columner/Column.svelte +62 -62
  26. package/dist/base/columner/Columner.demo.svelte +15 -15
  27. package/dist/base/columner/Columner.svelte +21 -21
  28. package/dist/base/contentSwitcher/ContentSwitcher.demo.svelte +45 -45
  29. package/dist/base/contentSwitcher/ContentSwitcher.svelte +63 -63
  30. package/dist/base/contentSwitcher/content-switcher.scss +22 -22
  31. package/dist/base/debug/Debug.svelte +21 -21
  32. package/dist/base/demoer/DemoPage.svelte +40 -40
  33. package/dist/base/demoer/Demoer.svelte +170 -170
  34. package/dist/base/demoer/DemoerCode.svelte +45 -45
  35. package/dist/base/demoer/DemoerComponent.svelte +50 -50
  36. package/dist/base/divider/Divider.demo.svelte +34 -34
  37. package/dist/base/divider/Divider.svelte +68 -68
  38. package/dist/base/divider/divider.scss +19 -19
  39. package/dist/base/icon/Icon.demo.svelte +24 -24
  40. package/dist/base/icon/Icon.svelte +117 -117
  41. package/dist/base/icon/Icon.svelte.d.ts +1 -1
  42. package/dist/base/icon/icon.scss +17 -17
  43. package/dist/base/paper/Paper.demo.svelte +31 -31
  44. package/dist/base/paper/Paper.svelte +20 -20
  45. package/dist/base/paper/paper.scss +15 -15
  46. package/dist/base/titleBar/TitleBar.demo.svelte +30 -30
  47. package/dist/base/titleBar/TitleBar.svelte +40 -40
  48. package/dist/base/titleBar/title-bar.scss +29 -29
  49. package/dist/controls/autocomplete/AutoComplete.demo.svelte +88 -88
  50. package/dist/controls/autocomplete/AutoComplete.svelte +152 -152
  51. package/dist/controls/autocomplete/auto-complete.scss +15 -15
  52. package/dist/controls/button/Button.demo.svelte +165 -165
  53. package/dist/controls/button/Button.svelte +95 -95
  54. package/dist/controls/button/Button.svelte.d.ts +1 -1
  55. package/dist/controls/button/ButtonAction.svelte +55 -55
  56. package/dist/controls/button/ButtonMenu.svelte +55 -55
  57. package/dist/controls/button/IconButton.svelte +45 -45
  58. package/dist/controls/button/button-action.scss +8 -8
  59. package/dist/controls/button/button-menu.scss +36 -36
  60. package/dist/controls/button/button.scss +293 -293
  61. package/dist/controls/checkbox/Checkbox.demo.svelte +29 -29
  62. package/dist/controls/checkbox/Checkbox.svelte +59 -59
  63. package/dist/controls/checkbox/checkbox.scss +115 -115
  64. package/dist/controls/confirm/Confirm.demo.svelte +60 -60
  65. package/dist/controls/confirm/Confirm.preview.svelte +14 -14
  66. package/dist/controls/confirm/Confirm.svelte +156 -156
  67. package/dist/controls/confirm/confirm.scss +12 -12
  68. package/dist/controls/inplaceedit/InPlaceEdit.demo.svelte +41 -41
  69. package/dist/controls/inplaceedit/InPlaceEdit.svelte +109 -109
  70. package/dist/controls/progress/Progress.demo.svelte +30 -30
  71. package/dist/controls/progress/Progress.svelte +26 -26
  72. package/dist/controls/progress/progress.scss +23 -23
  73. package/dist/controls/rating/Rating.demo.svelte +45 -45
  74. package/dist/controls/rating/Rating.svelte +44 -44
  75. package/dist/controls/rating/Rating.svelte.d.ts +1 -1
  76. package/dist/controls/rating/rating.scss +9 -9
  77. package/dist/controls/select/Select.demo.svelte +101 -101
  78. package/dist/controls/select/Select.svelte +125 -125
  79. package/dist/controls/select/select.scss +13 -13
  80. package/dist/controls/slider/Slider.demo.svelte +34 -34
  81. package/dist/controls/slider/Slider.svelte +153 -153
  82. package/dist/controls/slider/slider.scss +51 -51
  83. package/dist/controls/stepper/Stepper.demo.svelte +32 -32
  84. package/dist/controls/stepper/Stepper.svelte +30 -30
  85. package/dist/controls/stepper/stepper.scss +23 -23
  86. package/dist/controls/switch/Switch.demo.svelte +61 -61
  87. package/dist/controls/switch/Switch.svelte +45 -45
  88. package/dist/controls/switch/switch.scss +73 -73
  89. package/dist/controls/textfield/TextField.demo.svelte +79 -79
  90. package/dist/controls/textfield/TextField.svelte +86 -86
  91. package/dist/controls/textfield/TextField.svelte.d.ts +1 -1
  92. package/dist/controls/textfield/textfield.scss +68 -68
  93. package/dist/csss/csss.scss +10 -10
  94. package/dist/data/dataList/DataList.demo.svelte +151 -151
  95. package/dist/data/dataList/DataList.preview.svelte +23 -23
  96. package/dist/data/dataList/DataList.svelte +233 -233
  97. package/dist/data/dataList/DataListCell.svelte +212 -212
  98. package/dist/data/dataList/DataListHead.svelte +75 -75
  99. package/dist/data/dataList/DataListRow.svelte +93 -93
  100. package/dist/data/dataList/datalist.scss +157 -157
  101. package/dist/data/finder/Finder.demo.svelte +55 -55
  102. package/dist/data/finder/Finder.svelte +166 -166
  103. package/dist/data/finder/finder.scss +14 -14
  104. package/dist/data/grouper/Grouper.demo.svelte +36 -36
  105. package/dist/data/grouper/Grouper.svelte +85 -85
  106. package/dist/data/jsoner/Jsoner.svelte +40 -40
  107. package/dist/data/list/List.svelte +16 -16
  108. package/dist/data/list/ListItem.svelte +10 -10
  109. package/dist/data/list/ListTitle.svelte +8 -8
  110. package/dist/data/loader/Loader.demo.svelte +95 -95
  111. package/dist/data/loader/Loader.preview.svelte +7 -7
  112. package/dist/data/loader/Loader.svelte +99 -99
  113. package/dist/data/loader/loader.scss +50 -50
  114. package/dist/data/sorter/Sorter.demo.svelte +62 -62
  115. package/dist/data/sorter/Sorter.svelte +80 -80
  116. package/dist/data/sorter/Sorterer.svelte +27 -27
  117. package/dist/data/sorter/sorterer.scss +11 -11
  118. package/dist/index.d.ts +46 -47
  119. package/dist/index.js +46 -47
  120. package/dist/navigation/drawer/Drawer.demo.svelte +52 -52
  121. package/dist/navigation/drawer/Drawer.svelte +163 -163
  122. package/dist/navigation/drawer/drawer.scss +69 -69
  123. package/dist/navigation/tabs/Tabs.demo.svelte +83 -83
  124. package/dist/navigation/tabs/Tabs.preview.svelte +22 -22
  125. package/dist/navigation/tabs/Tabs.svelte +158 -158
  126. package/dist/navigation/tabs/tabs.scss +92 -92
  127. package/dist/slotui-css/slotui-css.css +288 -288
  128. package/dist/slotui-css/slotui-min-css.css +288 -288
  129. package/dist/styles/slotui-mixins.scss +168 -168
  130. package/dist/styles/slotui-presets.scss +56 -56
  131. package/dist/styles/slotuisheet/SlotuiSheet.svelte +36 -36
  132. package/dist/styles/slotuisheet/SlotyuiSheet.demo.svelte +28 -28
  133. package/dist/styles/slotuisheet/sheetConfig.scss +7 -7
  134. package/dist/styles/slotuisheet/slotui-sheet.scss +192 -192
  135. package/dist/styles/slotuisheet/stylesheet-container.scss +147 -147
  136. package/dist/styles/slotuisheet/stylesheet.scss +156 -156
  137. package/dist/types/slotui-ambient.d.ts +27 -27
  138. package/dist/ui/bootstrapp/BootStrApp.svelte +92 -92
  139. package/dist/ui/chromeFrame/ChromeFrame.svelte +43 -43
  140. package/dist/ui/chromeFrame/ChromeFrameButtonList.svelte +33 -33
  141. package/dist/ui/chromeFrame/ChromeFrameList.svelte +106 -106
  142. package/dist/ui/chromeFrame/chrome-frame.scss +34 -34
  143. package/dist/ui/frame/Frame.demo.svelte +48 -48
  144. package/dist/ui/frame/Frame.svelte +90 -90
  145. package/dist/ui/frame/frame.scss +46 -46
  146. package/dist/ui/login/Login.demo.svelte +62 -62
  147. package/dist/ui/login/Login.svelte +102 -102
  148. package/dist/ui/marquee/Marquee.demo.svelte +33 -33
  149. package/dist/ui/marquee/Marquee.svelte +97 -97
  150. package/dist/ui/marquee/marquee.scss +34 -34
  151. package/dist/ui/menu/Menu.svelte +9 -9
  152. package/dist/ui/menu/MenuItem.svelte +9 -9
  153. package/dist/ui/menu/MenuTitle.svelte +10 -10
  154. package/dist/ui/menu/menu.scss +61 -61
  155. package/dist/ui/menuList/MenuList.demo.svelte +73 -73
  156. package/dist/ui/menuList/MenuList.svelte +143 -143
  157. package/dist/ui/menuList/MenuListItem.svelte +134 -134
  158. package/dist/ui/menuList/MenuListTitle.svelte +10 -10
  159. package/dist/ui/menuList/menu-list.scss +120 -120
  160. package/dist/ui/panel/Panel.demo.svelte +169 -169
  161. package/dist/ui/panel/Panel.svelte +96 -96
  162. package/dist/ui/panel/PanelGrid.svelte +62 -62
  163. package/dist/ui/panel/PanelSlide.svelte +156 -156
  164. package/dist/ui/panel/Paneler.svelte +63 -63
  165. package/dist/ui/panel/panel.scss +32 -32
  166. package/dist/ui/popper/Popper.demo.svelte +92 -92
  167. package/dist/ui/popper/Popper.svelte +160 -160
  168. package/dist/ui/popper/popper.scss +108 -108
  169. package/dist/ui/preview/Preview.svelte +41 -41
  170. package/dist/ui/serviceBox/ServiceBox.svelte +24 -24
  171. package/dist/ui/startMenu/BootMenu.svelte +102 -102
  172. package/dist/ui/startMenu/boot-menu.scss +86 -86
  173. package/dist/ui/taskbar/TaskBarContent.svelte +20 -20
  174. package/dist/ui/taskbar/Taskbar.svelte +26 -26
  175. package/dist/ui/taskbar/taskbar.scss +28 -28
  176. package/dist/ui/themeswitcher/ThemeSwitcher.svelte +18 -18
  177. package/dist/ui/toast/Toast.demo.svelte +19 -19
  178. package/dist/ui/toast/Toast.svelte +60 -60
  179. package/dist/ui/toast/Toaster.svelte +18 -18
  180. package/dist/ui/toggleBar/ToggleBar.demo.svelte +114 -114
  181. package/dist/ui/toggleBar/ToggleBar.svelte +58 -58
  182. package/dist/ui/toggleBar/ToggleBar.svelte.d.ts +1 -1
  183. package/dist/ui/toggleBar/toggle-bar.scss +45 -45
  184. package/dist/ui/toolBar/ToolBar.demo.svelte +98 -98
  185. package/dist/ui/toolBar/ToolBar.svelte +30 -30
  186. package/dist/ui/toolBar/toolbar.scss +32 -32
  187. package/dist/ui/tree/Tree.demo.svelte +84 -84
  188. package/dist/ui/tree/Tree.preview.svelte +19 -19
  189. package/dist/ui/tree/Tree.svelte +182 -182
  190. package/dist/ui/tree/tree.scss +38 -38
  191. package/dist/ui/window/Window.demo.svelte +111 -111
  192. package/dist/ui/window/Window.svelte +177 -177
  193. package/dist/ui/window/window.scss +66 -66
  194. package/dist/utils/content/Content.svelte +78 -78
  195. package/dist/utils/contextRooter/ContextRooter.demo.svelte +33 -33
  196. package/dist/utils/contextRooter/ContextRooter.svelte +6 -6
  197. package/dist/utils/css/Css.demo.svelte +5 -5
  198. package/dist/utils/css/Css.svelte +64 -64
  199. package/dist/utils/effects/transitions.js +6 -6
  200. package/dist/utils/looper/Looper.demo.svelte +36 -36
  201. package/dist/utils/looper/Looper.svelte +47 -47
  202. package/dist/utils/slotted/Slotted.svelte +21 -21
  203. package/dist/utils/stylesheet/StyleSheet.demo.svelte +28 -28
  204. package/dist/utils/stylesheet/StyleSheet.svelte +30 -30
  205. package/dist/utils/stylesheet/containerConfig.scss +7 -7
  206. package/dist/utils/stylesheet/stylesheet.scss +147 -147
  207. package/dist/utils/uses/sx4u/sx4uPreprocess.js +34 -34
  208. package/package.json +4 -4
@@ -1,212 +1,212 @@
1
- <svelte:options />
2
-
3
- <!-- trigger action on datalist -->
4
- <script lang="ts" generics="T=Data">
5
- import type { DataCellType, DataListCellProps, DataListStoreType, RowType } from './types.js';
6
- import { getContext, tick } from 'svelte';
7
- import type { Writable } from 'svelte/store';
8
- import { resizer } from '../../utils/uses/resizer/resizer.js';
9
- import type { Data, ExpandProps } from '../../types/index.js';
10
- import Icon from '../../base/icon/Icon.svelte';
11
- import Chipper from '../../base/chipper/Chipper.svelte';
12
- import Slotted from '../../utils/slotted/Slotted.svelte';
13
- import { onEvent } from '../../utils/uses/event.js';
14
-
15
- const dataListContext = getContext<Writable<DataListStoreType>>('dataListContext');
16
- const inHeader = getContext<Writable<DataCellType[]>>('dataListHead');
17
- const rowContext = getContext<Writable<RowType>>('dataListRow');
18
-
19
- let className = '';
20
- export { className as class };
21
-
22
- let {
23
- element = $bindable(),
24
- field,
25
- style,
26
- fieldType,
27
- columnId = field ?? (crypto.randomUUID() as string),
28
- noWrap = true,
29
- title,
30
- children,
31
- ...rest
32
- }: ExpandProps<DataListCellProps<T>> = $props();
33
-
34
- let colIndex: number;
35
-
36
- let minWidth = '80px';
37
-
38
- $effect(() => {
39
- // if inHeader take the width from
40
- // - the columns and dataField : set it to the element
41
- // - the columns and element index : set it to the element
42
- // - the element with : don't do nothing, but should ! throw error ?
43
-
44
- if (inHeader) {
45
- colIndex = element ? [...(element.parentElement?.children ?? [])].indexOf(element) : -1;
46
- if ($dataListContext.hasColumnsProps && field) {
47
- // console.log('hasColumnsProps && field');
48
- if (!$dataListContext.columns[field]) {
49
- tick();
50
- // console.log(0);
51
- createColumnsDef(element, field, colIndex);
52
- }
53
- if (!$dataListContext.columns[field]?.width) {
54
- tick();
55
- // console.log(field, element.offsetWidth);
56
- $dataListContext.columns[field].width = element.offsetWidth + 'px';
57
- }
58
- } else if ($dataListContext.hasColumnsProps) {
59
- tick();
60
- // console.log(2);
61
- // grab and declare field from data
62
- field = getAutoFields($dataListContext.data)[colIndex];
63
- } else if (field) {
64
- // console.log(3);
65
-
66
- // throw new Error('props.field found without column declaration : '+field);
67
- createColumnsDef(element, field, colIndex);
68
- } else {
69
- // console.log(4);
70
- // create a dummy field for reference
71
- createColumnsDef(element, crypto.randomUUID(), colIndex);
72
- }
73
- }
74
-
75
- return () => {
76
- columnId = undefined;
77
- };
78
- });
79
-
80
- const createColumnsDef = async (element: HTMLElement, field: string, index: number) => {
81
- if (!element) return;
82
- await tick();
83
- $dataListContext.columns[field] = {
84
- field,
85
- style: element.getAttribute('style') ?? '',
86
- width: element.offsetWidth + 'px',
87
- order: Boolean(element.style?.order) ? eval(element.style.order) : index,
88
- index: index,
89
- columnId: field
90
- };
91
- $dataListContext.hasColumnsProps = true;
92
- };
93
-
94
- const updateColumnsDef = async (field: string, payload: Record<string, any>) => {
95
- await tick();
96
- $dataListContext.columns[field] = {
97
- ...$dataListContext.columns[field],
98
- ...payload
99
- };
100
- };
101
-
102
- /**
103
- * used if no columns and no props.field
104
- * @param data
105
- */
106
- const getAutoFields = (data: Record<string, any>[]): string[] => {
107
- return Object.keys(data[0]);
108
- };
109
-
110
- const onSort = (field: string) => {
111
- const event = new CustomEvent('datalist:sort:clicked', { detail: { field }, bubbles: true });
112
- if (element) element.dispatchEvent(event);
113
- };
114
-
115
- // not pure
116
- const useResizer = (node: HTMLElement, opt?: any) => {
117
- if (inHeader) resizer(node, opt);
118
- };
119
-
120
- function resizeStart() {}
121
-
122
- async function resizeOn(data: CustomEvent<{ width: any }>) {
123
- await tick();
124
- $dataListContext.columns[field].width = data.detail.width + 'px';
125
- }
126
- function resizeEnd() {}
127
-
128
- const sortState: string[] = ['none', 'asc', 'desc'];
129
- let sorticon: string;
130
- let showChip: boolean;
131
-
132
- let timerWidth: any;
133
- let finalWidthStyle: string = '';
134
-
135
- $effect(() => {
136
- sorticon =
137
- $dataListContext.sortBy.activeSortByField === field
138
- ? $dataListContext?.config?.sortingIcons?.default[
139
- sortState.indexOf($dataListContext?.sortBy?.activeSortByOrder)
140
- ]
141
- : 'mdi:dots-horizontal';
142
-
143
- showChip = $dataListContext.sortBy.activeSortByField === field;
144
- });
145
-
146
- /* $: if ($dataListContext.columns[field].width) {
147
- const w = $dataListContext.columns[field].width;
148
- finalWidthStyle = `min-width:${w};width:max-width:${w};`;
149
- } */
150
- </script>
151
-
152
- {#if inHeader}
153
- <td
154
- bind:this={element}
155
- use:onEvent={{ event: 'resizer:start', action: resizeStart }}
156
- use:onEvent={{ event: 'resizer:resize', action: resizeOn }}
157
- use:onEvent={{ event: 'resizer:end', action: resizeEnd }}
158
- data-sortable={true}
159
- data-column-id={columnId}
160
- data-noWrap={noWrap}
161
- class="dataListCell cellDimensions {className}"
162
- use:useResizer
163
- style="{style ??
164
- $dataListContext.columns[field]?.headerStyle ??
165
- $dataListContext.columns[field]?.style};}"
166
- style:width={$dataListContext.columns[field]?.width ?? minWidth}
167
- style:minWidth={$dataListContext.columns[field]?.width ?? minWidth}
168
- style:maxWidth={$dataListContext.columns[field]?.width ?? minWidth}
169
- {...rest}
170
- >
171
- <div onclick={() => onSort(field)} class="cellHeader">
172
- <div class="cellHeaderContent">
173
- <Slotted child={children} />
174
- </div>
175
- {#if field && $dataListContext?.config?.isSortable}
176
- <div class="cellHeaderSorter" title={sorticon}>
177
- <Chipper
178
- class="pad"
179
- {showChip}
180
- position={showChip && $dataListContext.sortBy?.activeSortByOrder === 'desc'
181
- ? 'top'
182
- : 'bottom'}
183
- >
184
- <Icon icon={sorticon} />
185
- </Chipper>
186
- </div>
187
- {/if}
188
- </div>
189
- </td>
190
- {:else}
191
- <td
192
- bind:this={element}
193
- data-column-id={columnId}
194
- data-noWrap={noWrap}
195
- class="dataListCell cellDimensions {className}"
196
- {style}
197
- {...rest}
198
- style:width={$dataListContext.columns[field]?.width ?? minWidth}
199
- style:minWidth={$dataListContext.columns[field]?.width ?? minWidth}
200
- style:maxWidth={$dataListContext.columns[field]?.width ?? minWidth}
201
- {title}
202
- >
203
- <Slotted
204
- child={children}
205
- slotArgs={{
206
- fieldData: $rowContext?.data?.[field] ?? {}
207
- }}
208
- />
209
- </td>
210
- {/if}
211
-
212
- <style></style>
1
+ <svelte:options />
2
+
3
+ <!-- trigger action on datalist -->
4
+ <script lang="ts" generics="T=Data">
5
+ import type { DataCellType, DataListCellProps, DataListStoreType, RowType } from './types.js';
6
+ import { getContext, tick } from 'svelte';
7
+ import type { Writable } from 'svelte/store';
8
+ import { resizer } from '../../utils/uses/resizer/resizer.js';
9
+ import type { Data, ExpandProps } from '../../types/index.js';
10
+ import Icon from '../../base/icon/Icon.svelte';
11
+ import Chipper from '../../base/chipper/Chipper.svelte';
12
+ import Slotted from '../../utils/slotted/Slotted.svelte';
13
+ import { onEvent } from '../../utils/uses/event.js';
14
+
15
+ const dataListContext = getContext<Writable<DataListStoreType>>('dataListContext');
16
+ const inHeader = getContext<Writable<DataCellType[]>>('dataListHead');
17
+ const rowContext = getContext<Writable<RowType>>('dataListRow');
18
+
19
+ let className = '';
20
+ export { className as class };
21
+
22
+ let {
23
+ element = $bindable(),
24
+ field,
25
+ style,
26
+ fieldType,
27
+ columnId = field ?? (crypto.randomUUID() as string),
28
+ noWrap = true,
29
+ title,
30
+ children,
31
+ ...rest
32
+ }: ExpandProps<DataListCellProps<T>> = $props();
33
+
34
+ let colIndex: number;
35
+
36
+ let minWidth = '80px';
37
+
38
+ $effect(() => {
39
+ // if inHeader take the width from
40
+ // - the columns and dataField : set it to the element
41
+ // - the columns and element index : set it to the element
42
+ // - the element with : don't do nothing, but should ! throw error ?
43
+
44
+ if (inHeader) {
45
+ colIndex = element ? [...(element.parentElement?.children ?? [])].indexOf(element) : -1;
46
+ if ($dataListContext.hasColumnsProps && field) {
47
+ // console.log('hasColumnsProps && field');
48
+ if (!$dataListContext.columns[field]) {
49
+ tick();
50
+ // console.log(0);
51
+ createColumnsDef(element, field, colIndex);
52
+ }
53
+ if (!$dataListContext.columns[field]?.width) {
54
+ tick();
55
+ // console.log(field, element.offsetWidth);
56
+ $dataListContext.columns[field].width = element.offsetWidth + 'px';
57
+ }
58
+ } else if ($dataListContext.hasColumnsProps) {
59
+ tick();
60
+ // console.log(2);
61
+ // grab and declare field from data
62
+ field = getAutoFields($dataListContext.data)[colIndex];
63
+ } else if (field) {
64
+ // console.log(3);
65
+
66
+ // throw new Error('props.field found without column declaration : '+field);
67
+ createColumnsDef(element, field, colIndex);
68
+ } else {
69
+ // console.log(4);
70
+ // create a dummy field for reference
71
+ createColumnsDef(element, crypto.randomUUID(), colIndex);
72
+ }
73
+ }
74
+
75
+ return () => {
76
+ columnId = undefined;
77
+ };
78
+ });
79
+
80
+ const createColumnsDef = async (element: HTMLElement, field: string, index: number) => {
81
+ if (!element) return;
82
+ await tick();
83
+ $dataListContext.columns[field] = {
84
+ field,
85
+ style: element.getAttribute('style') ?? '',
86
+ width: element.offsetWidth + 'px',
87
+ order: Boolean(element.style?.order) ? eval(element.style.order) : index,
88
+ index: index,
89
+ columnId: field
90
+ };
91
+ $dataListContext.hasColumnsProps = true;
92
+ };
93
+
94
+ const updateColumnsDef = async (field: string, payload: Record<string, any>) => {
95
+ await tick();
96
+ $dataListContext.columns[field] = {
97
+ ...$dataListContext.columns[field],
98
+ ...payload
99
+ };
100
+ };
101
+
102
+ /**
103
+ * used if no columns and no props.field
104
+ * @param data
105
+ */
106
+ const getAutoFields = (data: Record<string, any>[]): string[] => {
107
+ return Object.keys(data[0]);
108
+ };
109
+
110
+ const onSort = (field: string) => {
111
+ const event = new CustomEvent('datalist:sort:clicked', { detail: { field }, bubbles: true });
112
+ if (element) element.dispatchEvent(event);
113
+ };
114
+
115
+ // not pure
116
+ const useResizer = (node: HTMLElement, opt?: any) => {
117
+ if (inHeader) resizer(node, opt);
118
+ };
119
+
120
+ function resizeStart() {}
121
+
122
+ async function resizeOn(data: CustomEvent<{ width: any }>) {
123
+ await tick();
124
+ $dataListContext.columns[field].width = data.detail.width + 'px';
125
+ }
126
+ function resizeEnd() {}
127
+
128
+ const sortState: string[] = ['none', 'asc', 'desc'];
129
+ let sorticon: string;
130
+ let showChip: boolean;
131
+
132
+ let timerWidth: any;
133
+ let finalWidthStyle: string = '';
134
+
135
+ $effect(() => {
136
+ sorticon =
137
+ $dataListContext.sortBy.activeSortByField === field
138
+ ? $dataListContext?.config?.sortingIcons?.default[
139
+ sortState.indexOf($dataListContext?.sortBy?.activeSortByOrder)
140
+ ]
141
+ : 'mdi:dots-horizontal';
142
+
143
+ showChip = $dataListContext.sortBy.activeSortByField === field;
144
+ });
145
+
146
+ /* $: if ($dataListContext.columns[field].width) {
147
+ const w = $dataListContext.columns[field].width;
148
+ finalWidthStyle = `min-width:${w};width:max-width:${w};`;
149
+ } */
150
+ </script>
151
+
152
+ {#if inHeader}
153
+ <td
154
+ bind:this={element}
155
+ use:onEvent={{ event: 'resizer:start', action: resizeStart }}
156
+ use:onEvent={{ event: 'resizer:resize', action: resizeOn }}
157
+ use:onEvent={{ event: 'resizer:end', action: resizeEnd }}
158
+ data-sortable={true}
159
+ data-column-id={columnId}
160
+ data-noWrap={noWrap}
161
+ class="dataListCell cellDimensions {className}"
162
+ use:useResizer
163
+ style="{style ??
164
+ $dataListContext.columns[field]?.headerStyle ??
165
+ $dataListContext.columns[field]?.style};}"
166
+ style:width={$dataListContext.columns[field]?.width ?? minWidth}
167
+ style:minWidth={$dataListContext.columns[field]?.width ?? minWidth}
168
+ style:maxWidth={$dataListContext.columns[field]?.width ?? minWidth}
169
+ {...rest}
170
+ >
171
+ <div onclick={() => onSort(field)} class="cellHeader">
172
+ <div class="cellHeaderContent">
173
+ <Slotted child={children} />
174
+ </div>
175
+ {#if field && $dataListContext?.config?.isSortable}
176
+ <div class="cellHeaderSorter" title={sorticon}>
177
+ <Chipper
178
+ class="pad"
179
+ {showChip}
180
+ position={showChip && $dataListContext.sortBy?.activeSortByOrder === 'desc'
181
+ ? 'top'
182
+ : 'bottom'}
183
+ >
184
+ <Icon icon={sorticon} />
185
+ </Chipper>
186
+ </div>
187
+ {/if}
188
+ </div>
189
+ </td>
190
+ {:else}
191
+ <td
192
+ bind:this={element}
193
+ data-column-id={columnId}
194
+ data-noWrap={noWrap}
195
+ class="dataListCell cellDimensions {className}"
196
+ {style}
197
+ {...rest}
198
+ style:width={$dataListContext.columns[field]?.width ?? minWidth}
199
+ style:minWidth={$dataListContext.columns[field]?.width ?? minWidth}
200
+ style:maxWidth={$dataListContext.columns[field]?.width ?? minWidth}
201
+ {title}
202
+ >
203
+ <Slotted
204
+ child={children}
205
+ slotArgs={{
206
+ fieldData: $rowContext?.data?.[field] ?? {}
207
+ }}
208
+ />
209
+ </td>
210
+ {/if}
211
+
212
+ <style></style>
@@ -1,78 +1,78 @@
1
- <script lang="ts">
2
- import type { DataListHeadProps, DataListStoreType } from './types.js';
3
- import { getContext, setContext } from 'svelte';
4
- import { writable, type Writable } from 'svelte/store';
5
- import type { DataCellType } from './types.js';
6
- import DataListCell from './DataListCell.svelte';
7
- import Slotted from '../../utils/slotted/Slotted.svelte';
8
- import { onEvent } from '../../utils/uses/event.js';
9
- import type { ExpandProps } from '../../types/index.js';
10
-
11
- let {
12
- style,
13
- element,
14
- stickyHeader = true,
15
- onSort = () => {},
16
- children
17
- }: ExpandProps<DataListHeadProps> = $props();
18
-
19
- const dataListContext = getContext<Writable<DataListStoreType>>('dataListContext');
20
- // this head is a head
21
- // cells give width for the whole dataList
22
- const headerer = writable<DataCellType[]>([]);
23
-
24
- setContext('dataListHead', headerer);
25
-
26
- function doSort(e: CustomEvent<{ field: string }>) {
27
- let activeSortByOrder = $dataListContext.sortBy.activeSortByOrder;
28
- const sortByOrder =
29
- activeSortByOrder === 'none' ? 'desc' : activeSortByOrder === 'asc' ? 'desc' : 'asc';
30
-
31
- $dataListContext.sortBy.activeSortByField = e.detail.field;
32
- $dataListContext.sortBy.activeSortByOrder = sortByOrder;
33
-
34
- // fire event
35
- const event = new CustomEvent('datalist:sorted', {
36
- detail: { field: e.detail.field, order: sortByOrder },
37
- bubbles: true
38
- });
39
-
40
- if (element) element.dispatchEvent(event);
41
- }
42
-
43
- function setCssGrid(columns: DataCellType[]) {
44
- if (Object.values(columns ?? []).every((e) => e.width)) {
45
- return Object.values(columns ?? []).reduce((previous, current, currentIndex) => {
46
- const witdh = current?.width ?? 'auto';
47
- return `${previous} minmax(${witdh},${witdh})`;
48
- }, '--template-columns:');
49
- }
50
- }
51
-
52
- let cssVars = setCssGrid($dataListContext.columns ?? []);
53
- </script>
54
-
55
- <thead
56
- bind:this={element}
57
- use:onEvent={{ event: 'datalist:sort:clicked', action: doSort }}
58
- class:pos-sticky={stickyHeader}
59
- class="datalist-head"
60
- style="{style};{cssVars}"
61
- >
62
- <tr>
63
- <Slotted child={children}>
64
- {#if $dataListContext.hasColumnsProps}
65
- {#each Object.values($dataListContext.columns) as column}
66
- <DataListCell noWrap={true} field={column.field}>
67
- {column.fieldTitle ?? column.field}
68
- </DataListCell>
69
- {/each}
70
- {/if}
71
- </Slotted>
72
- </tr>
73
- </thead>
74
-
1
+ <script lang="ts">
2
+ import type { DataListHeadProps, DataListStoreType } from './types.js';
3
+ import { getContext, setContext } from 'svelte';
4
+ import { writable, type Writable } from 'svelte/store';
5
+ import type { DataCellType } from './types.js';
6
+ import DataListCell from './DataListCell.svelte';
7
+ import Slotted from '../../utils/slotted/Slotted.svelte';
8
+ import { onEvent } from '../../utils/uses/event.js';
9
+ import type { ExpandProps } from '../../types/index.js';
10
+
11
+ let {
12
+ style,
13
+ element,
14
+ stickyHeader = true,
15
+ onSort = () => {},
16
+ children
17
+ }: ExpandProps<DataListHeadProps> = $props();
18
+
19
+ const dataListContext = getContext<Writable<DataListStoreType>>('dataListContext');
20
+ // this head is a head
21
+ // cells give width for the whole dataList
22
+ const headerer = writable<DataCellType[]>([]);
23
+
24
+ setContext('dataListHead', headerer);
25
+
26
+ function doSort(e: CustomEvent<{ field: string }>) {
27
+ let activeSortByOrder = $dataListContext.sortBy.activeSortByOrder;
28
+ const sortByOrder =
29
+ activeSortByOrder === 'none' ? 'desc' : activeSortByOrder === 'asc' ? 'desc' : 'asc';
30
+
31
+ $dataListContext.sortBy.activeSortByField = e.detail.field;
32
+ $dataListContext.sortBy.activeSortByOrder = sortByOrder;
33
+
34
+ // fire event
35
+ const event = new CustomEvent('datalist:sorted', {
36
+ detail: { field: e.detail.field, order: sortByOrder },
37
+ bubbles: true
38
+ });
39
+
40
+ if (element) element.dispatchEvent(event);
41
+ }
42
+
43
+ function setCssGrid(columns: DataCellType[]) {
44
+ if (Object.values(columns ?? []).every((e) => e.width)) {
45
+ return Object.values(columns ?? []).reduce((previous, current, currentIndex) => {
46
+ const witdh = current?.width ?? 'auto';
47
+ return `${previous} minmax(${witdh},${witdh})`;
48
+ }, '--template-columns:');
49
+ }
50
+ }
51
+
52
+ let cssVars = setCssGrid($dataListContext.columns ?? []);
53
+ </script>
54
+
55
+ <thead
56
+ bind:this={element}
57
+ use:onEvent={{ event: 'datalist:sort:clicked', action: doSort }}
58
+ class:pos-sticky={stickyHeader}
59
+ class="datalist-head"
60
+ style="{style};{cssVars}"
61
+ >
62
+ <tr>
63
+ <Slotted child={children}>
64
+ {#if $dataListContext.hasColumnsProps}
65
+ {#each Object.values($dataListContext.columns) as column}
66
+ <DataListCell noWrap={true} field={column.field}>
67
+ {column.fieldTitle ?? column.field}
68
+ </DataListCell>
69
+ {/each}
70
+ {/if}
71
+ </Slotted>
72
+ </tr>
73
+ </thead>
74
+
75
75
  <style>.datalist-head {
76
76
  /* grid-template-columns: var(--template-columns) auto; grid-auto-columns: min-content;
77
77
  grid-auto-columns: min-content; */
78
- }</style>
78
+ }</style>