@bexis2/bexis2-core-ui 0.4.18 → 0.4.20

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 (58) hide show
  1. package/README.md +16 -8
  2. package/dist/components/CodeEditor/CodeEditor.svelte +4 -0
  3. package/dist/components/Facets/Facets.svelte +57 -20
  4. package/dist/components/Facets/Facets.svelte.d.ts +5 -1
  5. package/dist/components/Facets/ShowMore.svelte +31 -18
  6. package/dist/components/Facets/ShowMore.svelte.d.ts +2 -2
  7. package/dist/components/File/FileUploader.svelte +1 -1
  8. package/dist/components/Table/ColumnsMenu.svelte +5 -0
  9. package/dist/components/Table/TableContent.svelte +32 -16
  10. package/dist/components/Table/TableFilter.svelte +12 -0
  11. package/dist/components/Table/TableFilterServer.svelte +13 -1
  12. package/dist/components/Table/TablePagination.svelte +11 -6
  13. package/dist/components/Table/TablePaginationServer.svelte +8 -0
  14. package/dist/components/form/Checkbox.svelte +1 -1
  15. package/dist/components/form/CheckboxKvPList.svelte +2 -1
  16. package/dist/components/form/CheckboxList.svelte +2 -2
  17. package/dist/components/form/DateInput.svelte +1 -1
  18. package/dist/components/form/DropdownKvP.svelte +1 -1
  19. package/dist/components/form/InputContainer.svelte +7 -1
  20. package/dist/components/form/MultiSelect.svelte +100 -106
  21. package/dist/components/form/NumberInput.svelte +1 -1
  22. package/dist/components/form/TextArea.svelte +1 -1
  23. package/dist/components/form/TextInput.svelte +1 -1
  24. package/dist/components/page/Alert.svelte +1 -1
  25. package/dist/components/page/BackToTop.svelte +1 -1
  26. package/dist/components/page/Docs.svelte +1 -1
  27. package/dist/components/page/GoToTop.svelte +1 -0
  28. package/dist/components/page/HelpPopUp.svelte +1 -0
  29. package/dist/components/page/Page.svelte +14 -19
  30. package/dist/components/page/menu/MenuSublist.svelte +7 -5
  31. package/package.json +114 -114
  32. package/src/lib/components/CodeEditor/CodeEditor.svelte +4 -0
  33. package/src/lib/components/Facets/Facets.svelte +74 -25
  34. package/src/lib/components/Facets/ShowMore.svelte +33 -19
  35. package/src/lib/components/File/FileUploader.svelte +1 -1
  36. package/src/lib/components/Table/ColumnsMenu.svelte +5 -0
  37. package/src/lib/components/Table/TableContent.svelte +32 -16
  38. package/src/lib/components/Table/TableFilter.svelte +12 -0
  39. package/src/lib/components/Table/TableFilterServer.svelte +13 -1
  40. package/src/lib/components/Table/TablePagination.svelte +11 -6
  41. package/src/lib/components/Table/TablePaginationServer.svelte +8 -0
  42. package/src/lib/components/form/Checkbox.svelte +1 -1
  43. package/src/lib/components/form/CheckboxKvPList.svelte +2 -1
  44. package/src/lib/components/form/CheckboxList.svelte +2 -2
  45. package/src/lib/components/form/DateInput.svelte +1 -1
  46. package/src/lib/components/form/DropdownKvP.svelte +1 -1
  47. package/src/lib/components/form/InputContainer.svelte +7 -1
  48. package/src/lib/components/form/MultiSelect.svelte +100 -106
  49. package/src/lib/components/form/NumberInput.svelte +1 -1
  50. package/src/lib/components/form/TextArea.svelte +1 -1
  51. package/src/lib/components/form/TextInput.svelte +1 -1
  52. package/src/lib/components/page/Alert.svelte +1 -1
  53. package/src/lib/components/page/BackToTop.svelte +1 -1
  54. package/src/lib/components/page/Docs.svelte +1 -1
  55. package/src/lib/components/page/GoToTop.svelte +1 -0
  56. package/src/lib/components/page/HelpPopUp.svelte +1 -0
  57. package/src/lib/components/page/Page.svelte +15 -20
  58. package/src/lib/components/page/menu/MenuSublist.svelte +11 -8
package/package.json CHANGED
@@ -1,114 +1,114 @@
1
- {
2
- "name": "@bexis2/bexis2-core-ui",
3
- "version": "0.4.18",
4
- "private": false,
5
- "scripts": {
6
- "dev": "vite dev",
7
- "build": "vite build",
8
- "build package": "svelte-kit sync && svelte-package --watch",
9
- "preview": "vite preview",
10
- "test": "playwright test",
11
- "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
12
- "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
13
- "test:unit": "vitest",
14
- "lint": "prettier --plugin-search-dir . --check . && eslint .",
15
- "format": "prettier --plugin-search-dir . --write .",
16
- "check outdated": "npm outdated",
17
- "upgrade all": "ncu --upgrade",
18
- "1.npm - update package infos": "npm init --scope bexis2",
19
- "2.npm - package": "svelte-package",
20
- "3.npm - publish": "npm publish --access public"
21
- },
22
- "devDependencies": {
23
- "@playwright/test": "^1.45.3",
24
- "@skeletonlabs/skeleton": "^2.10.2",
25
- "@skeletonlabs/tw-plugin": "^0.4.0",
26
- "@sveltejs/adapter-auto": "^3.2.2",
27
- "@sveltejs/adapter-static": "^3.0.2",
28
- "@sveltejs/package": "^2.3.2",
29
- "@tailwindcss/forms": "^0.5.7",
30
- "@tailwindcss/typography": "^0.5.13",
31
- "@types/node": "^22.0.2",
32
- "@typescript-eslint/eslint-plugin": "^8.0.0",
33
- "@typescript-eslint/parser": "^8.0.0",
34
- "autoprefixer": "^10.4.19",
35
- "eslint": "^9.8.0",
36
- "eslint-config-prettier": "^9.1.0",
37
- "postcss": "^8.4.40",
38
- "prettier": "^3.3.3",
39
- "prettier-plugin-svelte": "^3.2.6",
40
- "raw-loader": "^4.0.2",
41
- "svelte": "^4.2.18",
42
- "svelte-check": "^3.8.5",
43
- "tailwindcss": "^3.4.7",
44
- "tslib": "^2.6.3",
45
- "typescript": "^5.5.4",
46
- "vite": "^5.3.5",
47
- "vitest": "^2.0.5"
48
- },
49
- "type": "module",
50
- "module": "./src/lib/index.ts",
51
- "types": "./src/lib/index.d.ts",
52
- "description": "Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte).",
53
- "main": "./src/lib/index.d.ts",
54
- "directories": {
55
- "test": "tests"
56
- },
57
- "files": [
58
- "dist",
59
- "src/lib"
60
- ],
61
- "dependencies": {
62
- "@codemirror/lang-html": "^6.4.9",
63
- "@codemirror/lang-javascript": "^6.2.2",
64
- "@codemirror/lang-json": "^6.0.1",
65
- "@codemirror/lint": "^6.8.1",
66
- "@codemirror/theme-one-dark": "^6.1.2",
67
- "@floating-ui/dom": "^1.6.8",
68
- "@fortawesome/fontawesome-free": "^6.6.0",
69
- "@fortawesome/fontawesome-svg-core": "^6.6.0",
70
- "@fortawesome/free-regular-svg-icons": "^6.6.0",
71
- "@fortawesome/free-solid-svg-icons": "^6.6.0",
72
- "@sveltejs/kit": "^2.5.19",
73
- "@sveltejs/vite-plugin-svelte": "^3.1.1",
74
- "axios": "^1.7.3",
75
- "codemirror": "^6.0.1",
76
- "dateformat": "^5.0.3",
77
- "delay": "^6.0.0",
78
- "dotenv": "^16.4.5",
79
- "eslint4b-prebuilt": "^6.7.2",
80
- "highlight.js": "^11.10.0",
81
- "highlightjs-svelte": "^1.0.6",
82
- "svelte": "^4.2.18",
83
- "svelte-codemirror-editor": "^1.4.0",
84
- "svelte-fa": "^4.0.2",
85
- "svelte-file-dropzone": "^2.0.7",
86
- "svelte-headless-table": "^0.18.2",
87
- "svelte-select": "5.8.3",
88
- "vest": "^5.4.0"
89
- },
90
- "author": "David Schöne",
91
- "license": "ISC",
92
- "repository": {
93
- "type": "git",
94
- "url": "git+https://github.com/BEXIS2/bexis2-core-ui.git"
95
- },
96
- "bugs": {
97
- "url": "https://github.com/BEXIS2/bexis2-core-ui/issues"
98
- },
99
- "homepage": "https://github.com/BEXIS2/bexis2-core-ui#readme",
100
- "keywords": [
101
- "bexis2",
102
- "libary"
103
- ],
104
- "exports": {
105
- ".": {
106
- "types": "./dist/index.d.ts",
107
- "svelte": "./dist/index.js"
108
- },
109
- "./dist/index.css": {
110
- "import": "./dist/index.css",
111
- "require": "./dist/index.css"
112
- }
113
- }
114
- }
1
+ {
2
+ "name": "@bexis2/bexis2-core-ui",
3
+ "version": "0.4.20",
4
+ "private": false,
5
+ "scripts": {
6
+ "dev": "vite dev",
7
+ "build": "vite build",
8
+ "build package": "svelte-kit sync && svelte-package --watch",
9
+ "preview": "vite preview",
10
+ "test": "playwright test",
11
+ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
12
+ "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
13
+ "test:unit": "vitest",
14
+ "lint": "prettier --plugin-search-dir . --check . && eslint .",
15
+ "format": "prettier --plugin-search-dir . --write .",
16
+ "check outdated": "npm outdated",
17
+ "upgrade all": "ncu --upgrade",
18
+ "1.npm - update package infos": "npm init --scope bexis2",
19
+ "2.npm - package": "svelte-package",
20
+ "3.npm - publish": "npm publish --access public"
21
+ },
22
+ "devDependencies": {
23
+ "@playwright/test": "^1.45.3",
24
+ "@skeletonlabs/skeleton": "^2.10.2",
25
+ "@skeletonlabs/tw-plugin": "^0.4.0",
26
+ "@sveltejs/adapter-auto": "^3.2.2",
27
+ "@sveltejs/adapter-static": "^3.0.2",
28
+ "@sveltejs/package": "^2.3.2",
29
+ "@tailwindcss/forms": "^0.5.7",
30
+ "@tailwindcss/typography": "^0.5.13",
31
+ "@types/node": "^22.0.2",
32
+ "@typescript-eslint/eslint-plugin": "^8.0.0",
33
+ "@typescript-eslint/parser": "^8.0.0",
34
+ "autoprefixer": "^10.4.19",
35
+ "eslint": "^9.8.0",
36
+ "eslint-config-prettier": "^9.1.0",
37
+ "postcss": "^8.4.40",
38
+ "prettier": "^3.3.3",
39
+ "prettier-plugin-svelte": "^3.2.6",
40
+ "raw-loader": "^4.0.2",
41
+ "svelte": "^4.2.18",
42
+ "svelte-check": "^3.8.5",
43
+ "tailwindcss": "^3.4.7",
44
+ "tslib": "^2.6.3",
45
+ "typescript": "^5.5.4",
46
+ "vite": "^5.3.5",
47
+ "vitest": "^2.0.5"
48
+ },
49
+ "type": "module",
50
+ "module": "./src/lib/index.ts",
51
+ "types": "./src/lib/index.d.ts",
52
+ "description": "Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte).",
53
+ "main": "./src/lib/index.d.ts",
54
+ "directories": {
55
+ "test": "tests"
56
+ },
57
+ "files": [
58
+ "dist",
59
+ "src/lib"
60
+ ],
61
+ "dependencies": {
62
+ "@codemirror/lang-html": "^6.4.9",
63
+ "@codemirror/lang-javascript": "^6.2.2",
64
+ "@codemirror/lang-json": "^6.0.1",
65
+ "@codemirror/lint": "^6.8.1",
66
+ "@codemirror/theme-one-dark": "^6.1.2",
67
+ "@floating-ui/dom": "^1.6.8",
68
+ "@fortawesome/fontawesome-free": "^6.6.0",
69
+ "@fortawesome/fontawesome-svg-core": "^6.6.0",
70
+ "@fortawesome/free-regular-svg-icons": "^6.6.0",
71
+ "@fortawesome/free-solid-svg-icons": "^6.6.0",
72
+ "@sveltejs/kit": "^2.5.19",
73
+ "@sveltejs/vite-plugin-svelte": "^3.1.1",
74
+ "axios": "^1.7.3",
75
+ "codemirror": "^6.0.1",
76
+ "dateformat": "^5.0.3",
77
+ "delay": "^6.0.0",
78
+ "dotenv": "^16.4.5",
79
+ "eslint4b-prebuilt": "^6.7.2",
80
+ "highlight.js": "^11.10.0",
81
+ "highlightjs-svelte": "^1.0.6",
82
+ "svelte": "^4.2.18",
83
+ "svelte-codemirror-editor": "^1.4.0",
84
+ "svelte-fa": "^4.0.2",
85
+ "svelte-file-dropzone": "^2.0.7",
86
+ "svelte-headless-table": "^0.18.2",
87
+ "svelte-select": "5.8.3",
88
+ "vest": "^5.4.0"
89
+ },
90
+ "author": "David Schöne",
91
+ "license": "ISC",
92
+ "repository": {
93
+ "type": "git",
94
+ "url": "git+https://github.com/BEXIS2/bexis2-core-ui.git"
95
+ },
96
+ "bugs": {
97
+ "url": "https://github.com/BEXIS2/bexis2-core-ui/issues"
98
+ },
99
+ "homepage": "https://github.com/BEXIS2/bexis2-core-ui#readme",
100
+ "keywords": [
101
+ "bexis2",
102
+ "libary"
103
+ ],
104
+ "exports": {
105
+ ".": {
106
+ "types": "./dist/index.d.ts",
107
+ "svelte": "./dist/index.js"
108
+ },
109
+ "./dist/index.css": {
110
+ "import": "./dist/index.css",
111
+ "require": "./dist/index.css"
112
+ }
113
+ }
114
+ }
@@ -100,6 +100,7 @@
100
100
  <div class="flex gap-2">
101
101
  <button
102
102
  class="btn variant-filled-warning"
103
+ title="Reset"
103
104
  id="{id}-reset"
104
105
  on:click|preventDefault={() => modalStore.trigger(modal)}
105
106
  ><Fa icon={faArrowRotateLeft} /></button
@@ -108,6 +109,7 @@
108
109
  class="btn border"
109
110
  class:bg-slate-700={dark}
110
111
  class:bg-white={!dark}
112
+ title="Toggle dark mode"
111
113
  id="{id}-toggle"
112
114
  on:click|preventDefault={() => (dark = !dark)}
113
115
  >
@@ -124,11 +126,13 @@
124
126
  <div class="flex gap-2">
125
127
  <button
126
128
  class="btn variant-filled-warning"
129
+ title="Cancel"
127
130
  id="{id}-cancel"
128
131
  on:click|preventDefault={() => dispatch('cancel')}><Fa icon={faXmark} /></button
129
132
  >
130
133
  <button
131
134
  class="btn variant-filled-primary"
135
+ title="Save"
132
136
  id="{id}-save"
133
137
  disabled={!isValid}
134
138
  on:click|preventDefault={() => dispatch('save')}><Fa icon={faSave} /></button
@@ -11,18 +11,14 @@
11
11
  export let showAll = false;
12
12
  export let open = false;
13
13
 
14
- let selected: { [key: string]: SelectedFacetGroup };
15
- let selectedItems: {
16
- [key: string]: {
17
- [key: string]: boolean;
18
- };
19
- } = {};
20
- let selectedGroups: { [key: string]: boolean } = {};
14
+ export const showMore = (groupName: string) => {
15
+ const group: SelectedFacetGroup = selected[groupName];
21
16
 
22
- const dispatch = createEventDispatcher();
17
+ dispatch('showMoreOpenChange', {
18
+ group: group.name,
19
+ open: true
20
+ });
23
21
 
24
- const modalStore = getModalStore();
25
- const showMore = (group: SelectedFacetGroup) => {
26
22
  modalStore.trigger({
27
23
  type: 'component',
28
24
  title: `${group.displayName}`,
@@ -30,21 +26,57 @@
30
26
  ref: ShowMore,
31
27
  props: {
32
28
  group,
33
- handleSave,
29
+ handleApply,
34
30
  handleCancel
35
31
  }
36
32
  }
37
33
  });
38
34
  };
39
35
 
40
- const handleSave = (group: SelectedFacetGroup) => {
41
- Object.keys(group.children).forEach((key) => {
42
- selectedItems[group.name][key] = group.children[key].selected || false;
36
+ let selected: { [key: string]: SelectedFacetGroup };
37
+ let selectedItems: {
38
+ [key: string]: {
39
+ [key: string]: boolean;
40
+ };
41
+ } = {};
42
+ let selectedGroups: { [key: string]: boolean } = {};
43
+
44
+ const dispatch = createEventDispatcher();
45
+
46
+ const modalStore = getModalStore();
47
+
48
+ const handleApply = (group: SelectedFacetGroup) => {
49
+ const { name: groupName, children } = group;
50
+
51
+ dispatch('showMoreOpenChange', {
52
+ group: groupName,
53
+ open: false
43
54
  });
55
+
56
+ for (const key in children) {
57
+ const selectedValue = children[key].selected || false;
58
+ selectedItems[groupName][key] = selectedValue;
59
+
60
+ if (selected[groupName].children[key].selected !== selectedValue) {
61
+ selected[groupName].children[key].selected = selectedValue;
62
+ }
63
+ }
64
+
65
+ dispatch('showMoreSelect', [
66
+ {
67
+ parent: groupName,
68
+ selected: Object.keys(children).map((key) => children[key].selected)
69
+ }
70
+ ]);
71
+
44
72
  modalStore.close();
45
73
  };
46
74
 
47
- const handleCancel = () => {
75
+ const handleCancel = (groupName: string) => {
76
+ dispatch('showMoreOpenChange', {
77
+ group: groupName,
78
+ open: false
79
+ });
48
80
  modalStore.close();
49
81
  };
50
82
 
@@ -75,11 +107,11 @@
75
107
  });
76
108
  }
77
109
 
78
- changed.length && dispatch('change', changed);
110
+ changed.length && dispatch('facetSelect', changed);
79
111
  };
80
112
 
81
113
  const sortOptions = () => {
82
- // Sort facets in a descending order if count exits, or sort alphabetically
114
+ // Sort facets in a descending order if count exits
83
115
  Object.keys(selected).forEach((group) => {
84
116
  const checked = Object.keys(selected[group].children)
85
117
  .filter((item) => selected[group].children[item].selected)
@@ -88,13 +120,20 @@
88
120
  if (a.count != undefined && b.count != undefined) {
89
121
  return b.count - a.count;
90
122
  }
91
- return a.displayName.localeCompare(b.displayName);
123
+ return 0;
92
124
  })
93
125
  .map((item) => item.name);
94
126
 
95
- const unchecked = Object.keys(selected[group].children).filter(
96
- (item) => !checked.includes(item)
97
- );
127
+ const unchecked = Object.keys(selected[group].children)
128
+ .filter((item) => !checked.includes(item))
129
+ .map((item) => selected[group].children[item])
130
+ .sort((a, b) => {
131
+ if (a.count != undefined && b.count != undefined) {
132
+ return b.count - a.count;
133
+ }
134
+ return 0;
135
+ })
136
+ .map((item) => item.name);
98
137
 
99
138
  const groupIndex = displayedGroups.findIndex((g) => g.name === group);
100
139
 
@@ -153,7 +192,7 @@
153
192
  bind:checked={selectedGroups[group.name]}
154
193
  bind:group={selectedGroups}
155
194
  >
156
- <p class="font-semibold">
195
+ <p class="font-semibold whitespace-nowrap">
157
196
  {group.displayName}{group.count !== undefined ? ` (${group.count})` : ''}
158
197
  </p>
159
198
 
@@ -171,13 +210,18 @@
171
210
  selection
172
211
  multiple
173
212
  >
174
- <p>{item.displayName} ({item.count})</p>
213
+ <div class="flex gap-2">
214
+ <p class="w-max grow truncate">
215
+ <span title={item.displayName}>{item.displayName}</span>
216
+ </p>
217
+ <span>({item.count})</span>
218
+ </div>
175
219
  </TreeViewItem>
176
220
  {/each}
177
221
  <!-- Trigger for the Modal to view all options -->
178
222
  {#if group.children.length > 5}
179
223
  <TreeViewItem hyphenOpacity="opacity-0">
180
- <button class="anchor" on:click={() => showMore(selected[group.name])}>more</button
224
+ <button class="anchor" on:click={() => showMore(group.name)}>more</button
181
225
  ></TreeViewItem
182
226
  >
183
227
  {/if}
@@ -193,7 +237,12 @@
193
237
  selection
194
238
  multiple
195
239
  >
196
- <p>{item.displayName} ({item.count})</p>
240
+ <div class="flex gap-2">
241
+ <p class="w-max grow truncate">
242
+ <span title={item.displayName}>{item.displayName}</span>
243
+ </p>
244
+ <span>({item.count})</span>
245
+ </div>
197
246
  </TreeViewItem>
198
247
  {/each}
199
248
  {/if}
@@ -2,8 +2,8 @@
2
2
  import type { SelectedFacetGroup } from '$models/Models';
3
3
 
4
4
  export let group: SelectedFacetGroup;
5
- export let handleSave: (group: SelectedFacetGroup) => {};
6
- export let handleCancel: () => {};
5
+ export let handleApply: (group: SelectedFacetGroup) => {};
6
+ export let handleCancel: (groupName: string) => {};
7
7
 
8
8
  let selected = structuredClone(group.children);
9
9
 
@@ -15,8 +15,8 @@
15
15
  Object.keys(selected).forEach((key) => (selected[key].selected = false));
16
16
  };
17
17
 
18
- const onSave = () => {
19
- handleSave({
18
+ const onApply = () => {
19
+ handleApply({
20
20
  ...group,
21
21
  children: selected
22
22
  });
@@ -25,36 +25,50 @@
25
25
  const onCancel = () => {
26
26
  console.log(selected, group.children);
27
27
  selected = structuredClone(group.children);
28
- handleCancel();
28
+ handleCancel(group.name);
29
29
  };
30
30
 
31
31
  const gridClass = (items: any[]) => {
32
- if (items.length >= 50) {
33
- return 'grid-cols-5';
34
- } else if (items.length >= 30) {
35
- return 'grid-cols-4';
36
- } else if (items.length >= 20) {
37
- return 'grid-cols-3';
38
- }
32
+ const ceil = Math.ceil(Math.sqrt(items.length));
33
+ const max = Math.max(ceil, Math.floor(items.length / 3));
39
34
 
40
- return 'grid-cols-2';
35
+ const classes = [
36
+ 'grid-rows-1',
37
+ 'grid-rows-2',
38
+ 'grid-rows-3',
39
+ 'grid-rows-4',
40
+ 'grid-rows-5',
41
+ 'grid-rows-6',
42
+ 'grid-rows-7',
43
+ 'grid-rows-8',
44
+ 'grid-rows-9',
45
+ 'grid-rows-10',
46
+ 'grid-rows-11',
47
+ 'grid-rows-12'
48
+ ];
49
+
50
+ if (max > 12) {
51
+ return 'grid-rows-12';
52
+ } else return classes[max - 1 || 1];
41
53
  };
42
54
  </script>
43
55
 
44
- <div class="p-5 rounded-md bg-surface-50 dark:bg-surface-800 border-primary-500 border-2">
56
+ <div class="p-5 rounded-md max-w-6xl bg-surface-50 dark:bg-surface-800 border-primary-500 border-2">
45
57
  <!-- Header -->
46
58
  <h2 class="text-xl font-semibold">{group.displayName}</h2>
47
59
 
48
60
  <!-- Items -->
49
61
  <div
50
- class="grid {gridClass(
62
+ class="{gridClass(
51
63
  Object.keys(selected)
52
- )} !gap-x-20 gap-y-2 py-10 px-2 max-h-[1000px] overflow-x-auto max-w-6xl"
64
+ )} grid grid-flow-col gap-x-10 gap-y-2 py-10 px-2 h-full overflow-x-auto"
53
65
  >
54
66
  {#each Object.keys(selected) as key}
55
- <label class="flex gap-3 items-center">
67
+ <label class="flex gap-3 items-center w-48">
56
68
  <input type="checkbox" class="checkbox" bind:checked={selected[key].selected} />
57
- <span class="whitespace-nowrap break-before-avoid break-after-avoid"
69
+ <span
70
+ title={selected[key].displayName}
71
+ class="whitespace-nowrap break-before-avoid break-after-avoid truncate"
58
72
  >{selected[key].displayName}</span
59
73
  >
60
74
  </label>
@@ -68,7 +82,7 @@
68
82
  <button class="btn btn-sm variant-filled-tertiary" on:click={selectAll}>All</button>
69
83
  </div>
70
84
  <div class="flex gap-3">
71
- <button class="btn btn-sm variant-filled-primary" on:click={onSave}>Save</button>
85
+ <button class="btn btn-sm variant-filled-primary" on:click={onApply}>Apply</button>
72
86
  <button class="btn btn-sm variant-filled-secondary" on:click={onCancel}>Cancel</button>
73
87
  </div>
74
88
  </div>
@@ -193,7 +193,7 @@
193
193
  {/if}
194
194
  </div>
195
195
 
196
- <button id={submitBt} color="primary" style="display:none"><Fa icon={faSave} /></button>
196
+ <button title="Submit" id={submitBt} color="primary" style="display:none"><Fa icon={faSave} /></button>
197
197
  {:else}
198
198
  <!-- while data is not loaded show a loading information -->
199
199
 
@@ -14,7 +14,9 @@
14
14
 
15
15
  <button
16
16
  type="button"
17
+ title="Hide or show columns"
17
18
  class="btn btn-sm variant-filled-primary rounded-full order-last"
19
+ aria-label="Open menu to hide/show columns"
18
20
  use:popup={popupCombobox}>Columns</button
19
21
  >
20
22
 
@@ -24,8 +26,11 @@
24
26
  >
25
27
  {#each columns as column}
26
28
  <div class="flex gap-3 items-center">
29
+ <label for={column.id} class="cursor-pointer" title={column.label}></label>
27
30
  <input
31
+ aria-label="Toggle column visibility for column {column.label}"
28
32
  type="checkbox"
33
+ id = {column.id}
29
34
  bind:checked={column.visible}
30
35
  disabled={columns.filter((c) => c.visible).length === 1 && column.visible}
31
36
  />