@medyll/idae-slotui-svelte 0.67.0 → 0.69.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 (156) hide show
  1. package/dist/base/alert/Alert.demo.svelte +10 -8
  2. package/dist/base/alert/Alert.svelte +56 -48
  3. package/dist/base/avatar/Avatar.demo.svelte +12 -8
  4. package/dist/base/avatar/Avatar.preview.svelte +3 -2
  5. package/dist/base/avatar/Avatar.svelte +24 -19
  6. package/dist/base/backdrop/Backdrop.demo.svelte +13 -9
  7. package/dist/base/backdrop/Backdrop.svelte +45 -37
  8. package/dist/base/badge/Badge.svelte +22 -18
  9. package/dist/base/box/Box.demo.svelte +12 -9
  10. package/dist/base/box/Box.svelte +44 -36
  11. package/dist/base/breadCrumb/BreadCrumb.svelte +12 -8
  12. package/dist/base/cartouche/Cartouche.demo.svelte +13 -9
  13. package/dist/base/cartouche/Cartouche.svelte +52 -44
  14. package/dist/base/chipper/Chipper.demo.svelte +14 -10
  15. package/dist/base/chipper/Chipper.svelte +19 -14
  16. package/dist/base/columner/Column.svelte +39 -31
  17. package/dist/base/columner/Columner.demo.svelte +4 -3
  18. package/dist/base/columner/Columner.svelte +12 -5
  19. package/dist/base/contentSwitcher/ContentSwitcher.demo.svelte +11 -8
  20. package/dist/base/contentSwitcher/ContentSwitcher.svelte +40 -30
  21. package/dist/base/debug/Debug.svelte +14 -11
  22. package/dist/base/demoer/DemoPage.svelte +18 -12
  23. package/dist/base/demoer/Demoer.svelte +20 -15
  24. package/dist/base/demoer/DemoerCode.svelte +28 -6
  25. package/dist/base/demoer/DemoerComponent.svelte +33 -13
  26. package/dist/base/divider/Divider.demo.svelte +12 -6
  27. package/dist/base/divider/Divider.svelte +58 -41
  28. package/dist/base/icon/Icon.demo.svelte +8 -5
  29. package/dist/base/icon/Icon.svelte +36 -27
  30. package/dist/base/icon/Icon.svelte.d.ts +1 -0
  31. package/dist/base/icon/types.d.ts +44 -9
  32. package/dist/base/paper/Paper.demo.svelte +12 -9
  33. package/dist/base/paper/Paper.svelte +13 -9
  34. package/dist/base/titleBar/TitleBar.demo.svelte +11 -9
  35. package/dist/base/titleBar/TitleBar.svelte +16 -12
  36. package/dist/controls/autocomplete/AutoComplete.demo.svelte +21 -16
  37. package/dist/controls/autocomplete/AutoComplete.svelte +81 -62
  38. package/dist/controls/button/Button.demo.svelte +50 -44
  39. package/dist/controls/button/Button.svelte +38 -33
  40. package/dist/controls/button/ButtonAction.svelte +32 -19
  41. package/dist/controls/button/ButtonMenu.svelte +22 -16
  42. package/dist/controls/button/IconButton.svelte +40 -13
  43. package/dist/controls/checkbox/Checkbox.demo.svelte +13 -9
  44. package/dist/controls/checkbox/Checkbox.svelte +18 -14
  45. package/dist/controls/confirm/Confirm.demo.svelte +12 -8
  46. package/dist/controls/confirm/Confirm.preview.svelte +3 -2
  47. package/dist/controls/confirm/Confirm.svelte +90 -67
  48. package/dist/controls/inplaceedit/InPlaceEdit.demo.svelte +12 -8
  49. package/dist/controls/inplaceedit/InPlaceEdit.svelte +74 -55
  50. package/dist/controls/progress/Progress.demo.svelte +14 -9
  51. package/dist/controls/progress/Progress.svelte +19 -13
  52. package/dist/controls/rating/Rating.demo.svelte +11 -8
  53. package/dist/controls/rating/Rating.svelte +21 -16
  54. package/dist/controls/select/Select.demo.svelte +46 -37
  55. package/dist/controls/select/Select.svelte +76 -29
  56. package/dist/controls/slider/Slider.demo.svelte +14 -7
  57. package/dist/controls/slider/Slider.svelte +104 -89
  58. package/dist/controls/stepper/Stepper.demo.svelte +9 -6
  59. package/dist/controls/stepper/Stepper.svelte +19 -13
  60. package/dist/controls/switch/Switch.demo.svelte +31 -24
  61. package/dist/controls/switch/Switch.svelte +20 -15
  62. package/dist/controls/textfield/TextField.demo.svelte +28 -23
  63. package/dist/controls/textfield/TextField.svelte +83 -75
  64. package/dist/controls/textfield/textfield.scss +15 -13
  65. package/dist/data/dataList/DataList.demo.svelte +44 -37
  66. package/dist/data/dataList/DataList.preview.svelte +8 -6
  67. package/dist/data/dataList/DataList.svelte +139 -115
  68. package/dist/data/dataList/DataListCell.svelte +146 -96
  69. package/dist/data/dataList/DataListHead.svelte +52 -36
  70. package/dist/data/dataList/DataListRow.svelte +57 -43
  71. package/dist/data/finder/Finder.demo.svelte +15 -11
  72. package/dist/data/finder/Finder.svelte +64 -46
  73. package/dist/data/grouper/Grouper.demo.svelte +14 -8
  74. package/dist/data/grouper/Grouper.svelte +62 -50
  75. package/dist/data/jsoner/Jsoner.svelte +14 -10
  76. package/dist/data/list/List.svelte +6 -2
  77. package/dist/data/list/ListItem.svelte +5 -2
  78. package/dist/data/list/ListTitle.svelte +5 -2
  79. package/dist/data/loader/Loader.demo.svelte +16 -8
  80. package/dist/data/loader/Loader.preview.svelte +2 -1
  81. package/dist/data/loader/Loader.svelte +56 -49
  82. package/dist/data/sorter/Sorter.demo.svelte +20 -17
  83. package/dist/data/sorter/Sorter.svelte +40 -33
  84. package/dist/data/sorter/Sorterer.svelte +17 -15
  85. package/dist/index.d.ts +1 -1
  86. package/dist/index.js +1 -1
  87. package/dist/navigation/drawer/Drawer.demo.svelte +11 -7
  88. package/dist/navigation/drawer/Drawer.svelte +92 -81
  89. package/dist/navigation/tabs/Tabs.demo.svelte +23 -18
  90. package/dist/navigation/tabs/Tabs.preview.svelte +17 -14
  91. package/dist/navigation/tabs/Tabs.svelte +73 -61
  92. package/dist/slotui-css/marquee.css +8 -8
  93. package/dist/slotui-css/marquee.min.css +8 -8
  94. package/dist/slotui-css/menu-list.css +47 -43
  95. package/dist/slotui-css/menu-list.min.css +47 -43
  96. package/dist/slotui-css/slotui-css.css +128 -124
  97. package/dist/slotui-css/slotui-min-css.css +128 -124
  98. package/dist/slotui-css/textfield.css +37 -37
  99. package/dist/slotui-css/textfield.min.css +37 -37
  100. package/dist/styles/slotuisheet/SlotuiSheet.svelte +14 -11
  101. package/dist/styles/slotuisheet/SlotyuiSheet.demo.svelte +21 -17
  102. package/dist/ui/bootstrapp/BootStrApp.svelte +21 -15
  103. package/dist/ui/chromeFrame/ChromeFrame.svelte +19 -10
  104. package/dist/ui/chromeFrame/ChromeFrameButtonList.svelte +6 -4
  105. package/dist/ui/chromeFrame/ChromeFrameList.svelte +97 -58
  106. package/dist/ui/frame/Frame.demo.svelte +6 -4
  107. package/dist/ui/frame/Frame.svelte +51 -44
  108. package/dist/ui/login/Login.demo.svelte +29 -21
  109. package/dist/ui/login/Login.svelte +49 -41
  110. package/dist/ui/marquee/Marquee.demo.svelte +11 -8
  111. package/dist/ui/marquee/Marquee.svelte +77 -35
  112. package/dist/ui/marquee/marquee.scss +11 -15
  113. package/dist/ui/menu/Menu.svelte +6 -2
  114. package/dist/ui/menu/MenuItem.svelte +6 -2
  115. package/dist/ui/menu/MenuTitle.svelte +5 -2
  116. package/dist/ui/menuList/MenuList.demo.svelte +14 -9
  117. package/dist/ui/menuList/MenuList.svelte +157 -140
  118. package/dist/ui/menuList/MenuListItem.svelte +132 -113
  119. package/dist/ui/menuList/MenuListTitle.svelte +52 -45
  120. package/dist/ui/menuList/menu-list.scss +65 -60
  121. package/dist/ui/panel/Panel.demo.svelte +37 -28
  122. package/dist/ui/panel/Panel.svelte +44 -34
  123. package/dist/ui/panel/PanelGrid.svelte +18 -14
  124. package/dist/ui/panel/PanelSlide.svelte +121 -79
  125. package/dist/ui/panel/Paneler.svelte +51 -24
  126. package/dist/ui/popper/Popper.demo.svelte +33 -25
  127. package/dist/ui/popper/Popper.svelte +105 -87
  128. package/dist/ui/preview/Preview.svelte +18 -14
  129. package/dist/ui/serviceBox/ServiceBox.svelte +8 -6
  130. package/dist/ui/startMenu/BootMenu.svelte +32 -24
  131. package/dist/ui/taskbar/TaskBarContent.svelte +8 -7
  132. package/dist/ui/taskbar/Taskbar.svelte +15 -10
  133. package/dist/ui/themeswitcher/ThemeSwitcher.svelte +9 -7
  134. package/dist/ui/toast/Toast.demo.svelte +15 -10
  135. package/dist/ui/toast/Toast.svelte +53 -41
  136. package/dist/ui/toast/Toaster.svelte +4 -2
  137. package/dist/ui/toggleBar/ToggleBar.demo.svelte +69 -60
  138. package/dist/ui/toggleBar/ToggleBar.svelte +27 -23
  139. package/dist/ui/toolBar/ToolBar.demo.svelte +48 -38
  140. package/dist/ui/toolBar/ToolBar.svelte +16 -11
  141. package/dist/ui/tree/Tree.demo.svelte +53 -42
  142. package/dist/ui/tree/Tree.preview.svelte +14 -11
  143. package/dist/ui/tree/Tree.svelte +120 -67
  144. package/dist/ui/window/Window.demo.svelte +27 -19
  145. package/dist/ui/window/Window.svelte +95 -85
  146. package/dist/utils/content/Content.svelte +49 -43
  147. package/dist/utils/contextRooter/ContextRooter.demo.svelte +12 -8
  148. package/dist/utils/contextRooter/ContextRooter.svelte +5 -3
  149. package/dist/utils/css/Css.demo.svelte +2 -1
  150. package/dist/utils/css/Css.svelte +2 -1
  151. package/dist/utils/looper/Looper.demo.svelte +8 -6
  152. package/dist/utils/looper/Looper.svelte +27 -22
  153. package/dist/utils/slotted/Slotted.svelte +10 -1
  154. package/dist/utils/stylesheet/StyleSheet.demo.svelte +21 -17
  155. package/dist/utils/stylesheet/StyleSheet.svelte +14 -11
  156. package/package.json +46 -46
@@ -1,118 +1,142 @@
1
- <script lang="ts" generics="T=Data">import { getContext, hasContext, setContext } from "svelte";
2
- import { writable } from "svelte/store";
3
- import DataListRow from "./DataListRow.svelte";
4
- import { dataOp } from "../../utils/engine/utils.js";
5
- import DataListHead from "./DataListHead.svelte";
6
- import Icon from "../../base/icon/Icon.svelte";
7
- import Button from "../../controls/button/Button.svelte";
8
- import ContextRooter from "../../utils/contextRooter/ContextRooter.svelte";
9
- import sanitizeHtml from "sanitize-html";
10
- import Slotted from "../../utils/slotted/Slotted.svelte";
11
- export const sortingIcons = {
12
- default: ["mdi:dots-horizontal", "mdi:sort-bool-ascending", "mdi:sort-bool-descending"],
13
- numeric: ["mdi:dots-horizontal", "mdi:sort-bool-ascending", "mdi:sort-bool-descending"]
14
- };
15
- let {
16
- class: className = "",
17
- style = "",
18
- element = null,
19
- showHeader = true,
20
- isSortable = true,
21
- sortByOrder = "none",
22
- groupByField = void 0,
23
- groupByOptions = {
24
- showMainHeader: true,
25
- showSubGroupsHeader: true,
26
- showEmptyGroup: false
27
- },
28
- selectorField = "id",
29
- selectorFieldValue = void 0,
30
- activeCommonSortField = "",
31
- noWrap = true,
32
- noWrapHeader = true,
33
- dataTypes = void 0,
34
- data = [],
35
- idField = void 0,
36
- columns = {},
37
- virtualizer = false,
38
- isLoading = false,
39
- fieldValue,
40
- dataListRow,
41
- dataListHead,
42
- dataListCell,
43
- dataListFooter,
44
- groupTitleSlot
45
- } = $props();
46
- let hidedGroups = {};
47
- let sortedData = $derived(data?.filter((x) => x));
48
- let groups = $derived(
49
- groupByField ? dataOp.groupBy(data, groupByField, {
50
- keepUngroupedData: Boolean(groupByOptions.showEmptyGroup)
51
- }) : {}
52
- );
53
- let dataListContext;
54
- if (hasContext("dataListContext")) {
55
- getContext("dataListContext");
56
- } else {
57
- let dataListStore = writable({
58
- config: {
59
- isSortable,
60
- defaultSortByField: void 0,
61
- defaultSortByOrder: sortByOrder,
62
- sortingIcons,
63
- noWrap,
64
- dataTypes
65
- },
66
- sortBy: {
67
- activeSortByField: void 0,
68
- activeSortByOrder: "none"
69
- },
70
- groupBy: {
71
- groupByField,
72
- groupByOptions
73
- },
74
- idField,
75
- columns,
76
- hasColumnsProps: Boolean(Object.keys(columns).length),
77
- data
78
- });
79
- setContext("dataListContext", dataListStore);
80
- }
81
- function doSort(e) {
82
- if (e.detail.field) {
83
- activeCommonSortField = e.detail.field;
84
- sortByOrder = e.detail.order;
85
- if (e.detail.order === "none") {
86
- } else {
87
- }
88
- }
89
- }
90
- function doSelect(e) {
91
- const selectedItem = e.detail;
92
- selectorFieldValue = selectedItem?.[selectorField];
93
- }
94
- function getGroupProps(content) {
95
- return {
96
- ...content,
97
- columns,
98
- style,
99
- groupByField: void 0,
100
- groupByOptions,
101
- showHeader: groupByOptions.showSubGroupsHeader,
102
- selectorField,
103
- selectorFieldValue,
104
- virtualizer,
105
- isLoading
106
- };
107
- }
108
- function checkGetter(columns2, field, data2) {
109
- const ret = columns2[field]?.getter ? columns2[field]?.getter(data2) : dataOp.resolveDotPath(data2, field);
110
- return sanitizeHtml(ret);
111
- }
112
- $effect(() => {
113
- element?.addEventListener("datalist:sorted", doSort);
114
- element?.addEventListener("datalist:select", doSelect);
115
- });
1
+ <script lang="ts" generics="T=Data">
2
+ import { getContext, hasContext, setContext } from 'svelte';
3
+ import { writable, type Writable } from 'svelte/store';
4
+ import DataListRow from './DataListRow.svelte';
5
+ import type { DataCellType, DataListProps, DataListStoreType } from './types.js';
6
+ import { dataOp } from '../../utils/engine/utils.js';
7
+ import DataListHead from './DataListHead.svelte';
8
+ import Icon from '../../base/icon/Icon.svelte';
9
+ import Button from '../../controls/button/Button.svelte';
10
+ import type { Data, ExpandProps } from '../../types/index.js';
11
+ import ContextRooter from '../../utils/contextRooter/ContextRooter.svelte';
12
+ import sanitizeHtml from 'sanitize-html';
13
+ import Slotted from '../../utils/slotted/Slotted.svelte';
14
+
15
+ export const sortingIcons = {
16
+ default: ['mdi:dots-horizontal', 'mdi:sort-bool-ascending', 'mdi:sort-bool-descending'],
17
+ numeric: ['mdi:dots-horizontal', 'mdi:sort-bool-ascending', 'mdi:sort-bool-descending']
18
+ };
19
+
20
+ let {
21
+ class: className = '',
22
+ style = '',
23
+ element = null,
24
+ showHeader = true,
25
+ isSortable = true,
26
+ sortByOrder = 'none',
27
+ groupByField = undefined,
28
+ groupByOptions = {
29
+ showMainHeader: true,
30
+ showSubGroupsHeader: true,
31
+ showEmptyGroup: false
32
+ },
33
+ selectorField = 'id',
34
+ selectorFieldValue = undefined,
35
+ activeCommonSortField = '',
36
+ noWrap = true,
37
+ noWrapHeader = true,
38
+ dataTypes = undefined,
39
+ data = [],
40
+ idField = undefined,
41
+ columns = {},
42
+ virtualizer = false,
43
+ isLoading = false,
44
+ fieldValue,
45
+ dataListRow,
46
+ dataListHead,
47
+ dataListCell,
48
+ dataListFooter,
49
+ groupTitleSlot
50
+ }: ExpandProps<DataListProps<T>> = $props();
51
+
52
+ let hidedGroups: Data = {};
53
+
54
+ let sortedData: any[] = $derived(data?.filter((x) => x));
55
+
56
+ let groups = $derived(
57
+ groupByField
58
+ ? dataOp.groupBy(data, groupByField, {
59
+ keepUngroupedData: Boolean(groupByOptions.showEmptyGroup)
60
+ })
61
+ : {}
62
+ );
63
+
64
+ let dataListContext: Writable<DataListStoreType>;
65
+
66
+ if (hasContext('dataListContext')) {
67
+ getContext<Writable<DataListStoreType>>('dataListContext');
68
+ } else {
69
+ /** context store for dataList config and state */
70
+ let dataListStore = writable<DataListStoreType>({
71
+ config: {
72
+ isSortable,
73
+ defaultSortByField: undefined,
74
+ defaultSortByOrder: sortByOrder,
75
+ sortingIcons,
76
+ noWrap,
77
+ dataTypes
78
+ },
79
+ sortBy: {
80
+ activeSortByField: undefined,
81
+ activeSortByOrder: 'none'
82
+ },
83
+ groupBy: {
84
+ groupByField,
85
+ groupByOptions
86
+ },
87
+ idField,
88
+ columns,
89
+ hasColumnsProps: Boolean(Object.keys(columns).length),
90
+ data
91
+ });
92
+
93
+ setContext<Writable<DataListStoreType>>('dataListContext', dataListStore);
94
+ }
95
+
96
+ function doSort(e: CustomEvent<{ field: string; order: string }>) {
97
+ if (e.detail.field) {
98
+ activeCommonSortField = e.detail.field;
99
+ sortByOrder = e.detail.order;
100
+
101
+ if (e.detail.order === 'none') {
102
+ //sortedData = data;
103
+ } else {
104
+ //sortedData = dataOp.sortBy(data, e.detail.field, e.detail.order);
105
+ }
106
+ }
107
+ }
108
+
109
+ function doSelect(e: CustomEvent<Data>) {
110
+ const selectedItem = e.detail;
111
+ selectorFieldValue = selectedItem?.[selectorField];
112
+ }
113
+
114
+ function getGroupProps(content: any) {
115
+ return {
116
+ ...content,
117
+ columns,
118
+ style,
119
+ groupByField: undefined,
120
+ groupByOptions,
121
+ showHeader: groupByOptions.showSubGroupsHeader,
122
+ selectorField,
123
+ selectorFieldValue,
124
+ virtualizer,
125
+ isLoading
126
+ };
127
+ }
128
+
129
+ function checkGetter(columns: Record<string, DataCellType>, field: string, data: Data) {
130
+ const ret = columns[field]?.getter
131
+ ? columns[field]?.getter(data)
132
+ : dataOp.resolveDotPath(data, field);
133
+ return sanitizeHtml(ret);
134
+ }
135
+
136
+ $effect(() => {
137
+ element?.addEventListener('datalist:sorted', doSort);
138
+ element?.addEventListener('datalist:select', doSelect);
139
+ });
116
140
  </script>
117
141
 
118
142
  {#snippet listCell(item, inItem)}
@@ -1,102 +1,152 @@
1
1
  <svelte:options />
2
2
 
3
3
  <!-- trigger action on datalist -->
4
- <script lang="ts" generics="T=Data">import { getContext, tick } from "svelte";
5
- import { resizer } from "../../utils/uses/resizer/resizer.js";
6
- import Icon from "../../base/icon/Icon.svelte";
7
- import Chipper from "../../base/chipper/Chipper.svelte";
8
- import Slotted from "../../utils/slotted/Slotted.svelte";
9
- import { onEvent } from "../../utils/uses/event.js";
10
- const dataListContext = getContext("dataListContext");
11
- const inHeader = getContext("dataListHead");
12
- const rowContext = getContext("dataListRow");
13
- let className = "";
14
- export { className as class };
15
- let {
16
- element = $bindable(),
17
- field,
18
- style,
19
- fieldType,
20
- columnId = field ?? crypto.randomUUID(),
21
- noWrap = true,
22
- title,
23
- children,
24
- ...rest
25
- } = $props();
26
- let colIndex;
27
- let minWidth = "80px";
28
- $effect(() => {
29
- if (inHeader) {
30
- colIndex = element ? [...element.parentElement?.children ?? []].indexOf(element) : -1;
31
- if ($dataListContext.hasColumnsProps && field) {
32
- if (!$dataListContext.columns[field]) {
33
- tick();
34
- createColumnsDef(element, field, colIndex);
35
- }
36
- if (!$dataListContext.columns[field]?.width) {
37
- tick();
38
- $dataListContext.columns[field].width = element.offsetWidth + "px";
39
- }
40
- } else if ($dataListContext.hasColumnsProps) {
41
- tick();
42
- field = getAutoFields($dataListContext.data)[colIndex];
43
- } else if (field) {
44
- createColumnsDef(element, field, colIndex);
45
- } else {
46
- createColumnsDef(element, crypto.randomUUID(), colIndex);
47
- }
48
- }
49
- return () => {
50
- columnId = void 0;
51
- };
52
- });
53
- const createColumnsDef = async (element, field, index) => {
54
- if (!element) return;
55
- await tick();
56
- $dataListContext.columns[field] = {
57
- field,
58
- style: element.getAttribute("style") ?? "",
59
- width: element.offsetWidth + "px",
60
- order: Boolean(element.style?.order) ? eval(element.style.order) : index,
61
- index,
62
- columnId: field
63
- };
64
- $dataListContext.hasColumnsProps = true;
65
- };
66
- const updateColumnsDef = async (field2, payload) => {
67
- await tick();
68
- $dataListContext.columns[field2] = {
69
- ...$dataListContext.columns[field2],
70
- ...payload
71
- };
72
- };
73
- const getAutoFields = (data) => {
74
- return Object.keys(data[0]);
75
- };
76
- const onSort = (field2) => {
77
- const event = new CustomEvent("datalist:sort:clicked", { detail: { field: field2 }, bubbles: true });
78
- if (element) element.dispatchEvent(event);
79
- };
80
- const useResizer = (node, opt) => {
81
- if (inHeader) resizer(node, opt);
82
- };
83
- function resizeStart() {
84
- }
85
- async function resizeOn(data) {
86
- await tick();
87
- $dataListContext.columns[field].width = data.detail.width + "px";
88
- }
89
- function resizeEnd() {
90
- }
91
- const sortState = ["none", "asc", "desc"];
92
- let sorticon;
93
- let showChip;
94
- let timerWidth;
95
- let finalWidthStyle = "";
96
- $effect(() => {
97
- sorticon = $dataListContext.sortBy.activeSortByField === field ? $dataListContext?.config?.sortingIcons?.default[sortState.indexOf($dataListContext?.sortBy?.activeSortByOrder)] : "mdi:dots-horizontal";
98
- showChip = $dataListContext.sortBy.activeSortByField === field;
99
- });
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
+ } */
100
150
  </script>
101
151
 
102
152
  {#if inHeader}
@@ -1,39 +1,55 @@
1
- <script lang="ts">import { getContext, setContext } from "svelte";
2
- import { writable } from "svelte/store";
3
- import DataListCell from "./DataListCell.svelte";
4
- import Slotted from "../../utils/slotted/Slotted.svelte";
5
- import { onEvent } from "../../utils/uses/event.js";
6
- let {
7
- style,
8
- element,
9
- stickyHeader = true,
10
- onSort = () => {
11
- },
12
- children
13
- } = $props();
14
- const dataListContext = getContext("dataListContext");
15
- const headerer = writable([]);
16
- setContext("dataListHead", headerer);
17
- function doSort(e) {
18
- let activeSortByOrder = $dataListContext.sortBy.activeSortByOrder;
19
- const sortByOrder = activeSortByOrder === "none" ? "desc" : activeSortByOrder === "asc" ? "desc" : "asc";
20
- $dataListContext.sortBy.activeSortByField = e.detail.field;
21
- $dataListContext.sortBy.activeSortByOrder = sortByOrder;
22
- const event = new CustomEvent("datalist:sorted", {
23
- detail: { field: e.detail.field, order: sortByOrder },
24
- bubbles: true
25
- });
26
- if (element) element.dispatchEvent(event);
27
- }
28
- function setCssGrid(columns) {
29
- if (Object.values(columns ?? []).every((e) => e.width)) {
30
- return Object.values(columns ?? []).reduce((previous, current, currentIndex) => {
31
- const witdh = current?.width ?? "auto";
32
- return `${previous} minmax(${witdh},${witdh})`;
33
- }, "--template-columns:");
34
- }
35
- }
36
- let cssVars = setCssGrid($dataListContext.columns ?? []);
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 ?? []);
37
53
  </script>
38
54
 
39
55
  <thead