@bexis2/bexis2-core-ui 0.2.31 → 0.2.32

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 (87) hide show
  1. package/README.md +5 -0
  2. package/dist/TableView.svelte +1 -1
  3. package/dist/components/File/FileIcon.svelte +45 -45
  4. package/dist/components/File/FileInfo.svelte +13 -13
  5. package/dist/components/ListView.svelte +5 -5
  6. package/dist/components/Table/Table.svelte +87 -25
  7. package/dist/components/Table/TableFilter.svelte +1 -1
  8. package/dist/components/form/Checkbox.svelte +13 -13
  9. package/dist/components/form/CheckboxKvPList.svelte +16 -16
  10. package/dist/components/form/CheckboxList.svelte +10 -10
  11. package/dist/components/form/DateInput.svelte +14 -14
  12. package/dist/components/form/DropdownKvP.svelte +54 -54
  13. package/dist/components/form/MultiSelect.svelte +181 -181
  14. package/dist/components/form/NumberInput.svelte +15 -15
  15. package/dist/components/form/TextArea.svelte +14 -14
  16. package/dist/components/form/TextInput.svelte +15 -15
  17. package/dist/components/page/Alert.svelte +28 -28
  18. package/dist/components/page/BackToTop.svelte +30 -30
  19. package/dist/components/page/Docs.svelte +22 -22
  20. package/dist/components/page/ErrorMessage.svelte +8 -8
  21. package/dist/components/page/Footer.svelte +5 -5
  22. package/dist/components/page/Header.svelte +5 -5
  23. package/dist/components/page/HelpPopUp.svelte +30 -30
  24. package/dist/components/page/PageCaller.js +19 -19
  25. package/dist/components/page/Spinner.svelte +14 -14
  26. package/dist/components/page/breadcrumb/Breadcrumb.svelte +19 -19
  27. package/dist/components/page/menu/MenuDataCaller.js +10 -10
  28. package/dist/css/core.ui.postcss +17 -17
  29. package/dist/css/themes/theme-bexis2.css +96 -96
  30. package/dist/css/themes/theme-crimson.css +101 -101
  31. package/dist/css/themes/theme-gold-nouveau.css +140 -140
  32. package/dist/css/themes/theme-hamlindigo.css +112 -112
  33. package/dist/css/themes/theme-modern.css +127 -127
  34. package/dist/css/themes/theme-rocket.css +119 -119
  35. package/dist/css/themes/theme-sahara.css +128 -128
  36. package/dist/css/themes/theme-seafoam.css +122 -122
  37. package/dist/css/themes/theme-seasonal.css +115 -115
  38. package/dist/css/themes/theme-skeleton.css +118 -118
  39. package/dist/css/themes/theme-vintage.css +125 -125
  40. package/dist/models/Models.d.ts +3 -0
  41. package/dist/services/BaseCaller.js +16 -16
  42. package/package.json +1 -1
  43. package/src/lib/TableView.svelte +1 -1
  44. package/src/lib/components/ListView.svelte +11 -11
  45. package/src/lib/components/Table/Table.svelte +107 -26
  46. package/src/lib/components/Table/TableFilter.svelte +2 -1
  47. package/src/lib/components/Table/filter.ts +141 -141
  48. package/src/lib/components/{File → file}/FileIcon.svelte +45 -45
  49. package/src/lib/components/{File → file}/FileInfo.svelte +13 -13
  50. package/src/lib/components/form/Checkbox.svelte +24 -24
  51. package/src/lib/components/form/CheckboxKvPList.svelte +29 -29
  52. package/src/lib/components/form/CheckboxList.svelte +21 -21
  53. package/src/lib/components/form/DateInput.svelte +27 -27
  54. package/src/lib/components/form/DropdownKvP.svelte +54 -54
  55. package/src/lib/components/form/MultiSelect.svelte +181 -181
  56. package/src/lib/components/form/NumberInput.svelte +30 -30
  57. package/src/lib/components/form/TextArea.svelte +28 -28
  58. package/src/lib/components/form/TextInput.svelte +28 -28
  59. package/src/lib/components/page/Alert.svelte +41 -41
  60. package/src/lib/components/page/BackToTop.svelte +30 -30
  61. package/src/lib/components/page/Docs.svelte +46 -46
  62. package/src/lib/components/page/ErrorMessage.svelte +10 -10
  63. package/src/lib/components/page/Footer.svelte +18 -18
  64. package/src/lib/components/page/Header.svelte +18 -18
  65. package/src/lib/components/page/HelpPopUp.svelte +72 -72
  66. package/src/lib/components/page/PageCaller.js +19 -19
  67. package/src/lib/components/page/Spinner.svelte +20 -20
  68. package/src/lib/components/page/breadcrumb/Breadcrumb.svelte +39 -39
  69. package/src/lib/components/page/menu/MenuDataCaller.js +10 -10
  70. package/src/lib/css/core.ui.postcss +17 -17
  71. package/src/lib/css/themes/theme-bexis2.css +96 -96
  72. package/src/lib/css/themes/theme-crimson.css +101 -101
  73. package/src/lib/css/themes/theme-gold-nouveau.css +140 -140
  74. package/src/lib/css/themes/theme-hamlindigo.css +112 -112
  75. package/src/lib/css/themes/theme-modern.css +127 -127
  76. package/src/lib/css/themes/theme-rocket.css +119 -119
  77. package/src/lib/css/themes/theme-sahara.css +128 -128
  78. package/src/lib/css/themes/theme-seafoam.css +122 -122
  79. package/src/lib/css/themes/theme-seasonal.css +115 -115
  80. package/src/lib/css/themes/theme-skeleton.css +118 -118
  81. package/src/lib/css/themes/theme-vintage.css +125 -125
  82. package/src/lib/models/Models.ts +10 -7
  83. package/src/lib/models/Page.ts +40 -40
  84. package/src/lib/services/Api.ts +55 -55
  85. package/src/lib/services/BaseCaller.js +16 -16
  86. package/src/lib/stores/apiStores.ts +31 -31
  87. /package/src/lib/components/{File → file}/FileUploader.svelte +0 -0
@@ -1,125 +1,125 @@
1
- /* https://fonts.google.com/specimen/Abril+Fatface?query=Abril+Fatface&noto.query=Abril */
2
- @import url('https://fonts.googleapis.com/css2?family=Abril+Fatface&display=swap');
3
- /* https://fonts.google.com/noto/specimen/Noto+Sans?query=sans */
4
- @import url('https://fonts.googleapis.com/css2?family=Noto+Sans:ital,wght@0,100;0,200;0,300;0,400;1,100;1,200;1,300&display=swap');
5
-
6
- :root {
7
- /* =~= Theme Styles =~= */
8
- --theme-font-family-base: 'Noto Sans', sans-serif;
9
- --theme-font-family-heading: 'Abril Fatface', cursive;
10
- --theme-font-color-base: var(--color-primary-900);
11
- --theme-font-color-dark: var(--color-primary-100);
12
- --theme-rounded-base: 2px;
13
- --theme-rounded-container: 4px;
14
- --theme-border-base: 1px;
15
- /* =~= Theme On-X Colors =~= */
16
- --on-primary: 0 0 0;
17
- --on-secondary: 0 0 0;
18
- --on-tertiary: 0 0 0;
19
- --on-success: 0 0 0;
20
- --on-warning: 0 0 0;
21
- --on-error: 0 0 0;
22
- --on-surface: 255 255 255;
23
- /* =~= Theme Colors =~= */
24
- /* primary | #ea861a */
25
- --color-primary-50: 252 237 221; /* ⬅ #fceddd */
26
- --color-primary-100: 251 231 209; /* ⬅ #fbe7d1 */
27
- --color-primary-200: 250 225 198; /* ⬅ #fae1c6 */
28
- --color-primary-300: 247 207 163; /* ⬅ #f7cfa3 */
29
- --color-primary-400: 240 170 95; /* ⬅ #f0aa5f */
30
- --color-primary-500: 234 134 26; /* ⬅ #ea861a */
31
- --color-primary-600: 211 121 23; /* ⬅ #d37917 */
32
- --color-primary-700: 176 101 20; /* ⬅ #b06514 */
33
- --color-primary-800: 140 80 16; /* ⬅ #8c5010 */
34
- --color-primary-900: 115 66 13; /* ⬅ #73420d */
35
- /* secondary | #97cea5 */
36
- --color-secondary-50: 239 248 242; /* ⬅ #eff8f2 */
37
- --color-secondary-100: 234 245 237; /* ⬅ #eaf5ed */
38
- --color-secondary-200: 229 243 233; /* ⬅ #e5f3e9 */
39
- --color-secondary-300: 213 235 219; /* ⬅ #d5ebdb */
40
- --color-secondary-400: 182 221 192; /* ⬅ #b6ddc0 */
41
- --color-secondary-500: 151 206 165; /* ⬅ #97cea5 */
42
- --color-secondary-600: 136 185 149; /* ⬅ #88b995 */
43
- --color-secondary-700: 113 155 124; /* ⬅ #719b7c */
44
- --color-secondary-800: 91 124 99; /* ⬅ #5b7c63 */
45
- --color-secondary-900: 74 101 81; /* ⬅ #4a6551 */
46
- /* tertiary | #06b6d4 */
47
- --color-tertiary-50: 218 244 249; /* ⬅ #daf4f9 */
48
- --color-tertiary-100: 205 240 246; /* ⬅ #cdf0f6 */
49
- --color-tertiary-200: 193 237 244; /* ⬅ #c1edf4 */
50
- --color-tertiary-300: 155 226 238; /* ⬅ #9be2ee */
51
- --color-tertiary-400: 81 204 225; /* ⬅ #51cce1 */
52
- --color-tertiary-500: 6 182 212; /* ⬅ #06b6d4 */
53
- --color-tertiary-600: 5 164 191; /* ⬅ #05a4bf */
54
- --color-tertiary-700: 5 137 159; /* ⬅ #05899f */
55
- --color-tertiary-800: 4 109 127; /* ⬅ #046d7f */
56
- --color-tertiary-900: 3 89 104; /* ⬅ #035968 */
57
- /* success | #84cb5d */
58
- --color-success-50: 237 247 231; /* ⬅ #edf7e7 */
59
- --color-success-100: 230 245 223; /* ⬅ #e6f5df */
60
- --color-success-200: 224 242 215; /* ⬅ #e0f2d7 */
61
- --color-success-300: 206 234 190; /* ⬅ #ceeabe */
62
- --color-success-400: 169 219 142; /* ⬅ #a9db8e */
63
- --color-success-500: 132 203 93; /* ⬅ #84cb5d */
64
- --color-success-600: 119 183 84; /* ⬅ #77b754 */
65
- --color-success-700: 99 152 70; /* ⬅ #639846 */
66
- --color-success-800: 79 122 56; /* ⬅ #4f7a38 */
67
- --color-success-900: 65 99 46; /* ⬅ #41632e */
68
- /* warning | #f2ac23 */
69
- --color-warning-50: 253 243 222; /* ⬅ #fdf3de */
70
- --color-warning-100: 252 238 211; /* ⬅ #fceed3 */
71
- --color-warning-200: 252 234 200; /* ⬅ #fceac8 */
72
- --color-warning-300: 250 222 167; /* ⬅ #fadea7 */
73
- --color-warning-400: 246 197 101; /* ⬅ #f6c565 */
74
- --color-warning-500: 242 172 35; /* ⬅ #f2ac23 */
75
- --color-warning-600: 218 155 32; /* ⬅ #da9b20 */
76
- --color-warning-700: 182 129 26; /* ⬅ #b6811a */
77
- --color-warning-800: 145 103 21; /* ⬅ #916715 */
78
- --color-warning-900: 119 84 17; /* ⬅ #775411 */
79
- /* error | #d57e78 */
80
- --color-error-50: 249 236 235; /* ⬅ #f9eceb */
81
- --color-error-100: 247 229 228; /* ⬅ #f7e5e4 */
82
- --color-error-200: 245 223 221; /* ⬅ #f5dfdd */
83
- --color-error-300: 238 203 201; /* ⬅ #eecbc9 */
84
- --color-error-400: 226 165 161; /* ⬅ #e2a5a1 */
85
- --color-error-500: 213 126 120; /* ⬅ #d57e78 */
86
- --color-error-600: 192 113 108; /* ⬅ #c0716c */
87
- --color-error-700: 160 95 90; /* ⬅ #a05f5a */
88
- --color-error-800: 128 76 72; /* ⬅ #804c48 */
89
- --color-error-900: 104 62 59; /* ⬅ #683e3b */
90
- /* surface | #3f3731 */
91
- --color-surface-50: 226 225 224; /* ⬅ #e2e1e0 */
92
- --color-surface-100: 217 215 214; /* ⬅ #d9d7d6 */
93
- --color-surface-200: 207 205 204; /* ⬅ #cfcdcc */
94
- --color-surface-300: 178 175 173; /* ⬅ #b2afad */
95
- --color-surface-400: 121 115 111; /* ⬅ #79736f */
96
- --color-surface-500: 63 55 49; /* ⬅ #3f3731 */
97
- --color-surface-600: 57 50 44; /* ⬅ #39322c */
98
- --color-surface-700: 47 41 37; /* ⬅ #2f2925 */
99
- --color-surface-800: 38 33 29; /* ⬅ #26211d */
100
- --color-surface-900: 31 27 24; /* ⬅ #1f1b18 */
101
- }
102
-
103
- [data-theme='vintage'] h1,
104
- [data-theme='vintage'] h2,
105
- [data-theme='vintage'] h3,
106
- [data-theme='vintage'] h4,
107
- [data-theme='vintage'] h5,
108
- [data-theme='vintage'] h6 {
109
- letter-spacing: 1px;
110
- }
111
-
112
- /* Applied to body with `<body data-theme="vintage">` */
113
- /* Created with: https://csshero.org/mesher/ */
114
- [data-theme='vintage'] {
115
- /* prettier-ignore */
116
- background-image:
117
- radial-gradient(at 100% 0%, hsla(135,34%,70%,0.20) 0px, transparent 50%),
118
- radial-gradient(at 85% 100%, hsla(31,83%,50%,0.20) 0px, transparent 50%);
119
- }
120
- .dark [data-theme='vintage'] {
121
- /* prettier-ignore */
122
- background-image:
123
- radial-gradient(at 100% 0%, hsla(135,34%,70%,0.14) 0px, transparent 50%),
124
- radial-gradient(at 85% 100%, hsla(31,83%,50%,0.14) 0px, transparent 50%);
125
- }
1
+ /* https://fonts.google.com/specimen/Abril+Fatface?query=Abril+Fatface&noto.query=Abril */
2
+ @import url('https://fonts.googleapis.com/css2?family=Abril+Fatface&display=swap');
3
+ /* https://fonts.google.com/noto/specimen/Noto+Sans?query=sans */
4
+ @import url('https://fonts.googleapis.com/css2?family=Noto+Sans:ital,wght@0,100;0,200;0,300;0,400;1,100;1,200;1,300&display=swap');
5
+
6
+ :root {
7
+ /* =~= Theme Styles =~= */
8
+ --theme-font-family-base: 'Noto Sans', sans-serif;
9
+ --theme-font-family-heading: 'Abril Fatface', cursive;
10
+ --theme-font-color-base: var(--color-primary-900);
11
+ --theme-font-color-dark: var(--color-primary-100);
12
+ --theme-rounded-base: 2px;
13
+ --theme-rounded-container: 4px;
14
+ --theme-border-base: 1px;
15
+ /* =~= Theme On-X Colors =~= */
16
+ --on-primary: 0 0 0;
17
+ --on-secondary: 0 0 0;
18
+ --on-tertiary: 0 0 0;
19
+ --on-success: 0 0 0;
20
+ --on-warning: 0 0 0;
21
+ --on-error: 0 0 0;
22
+ --on-surface: 255 255 255;
23
+ /* =~= Theme Colors =~= */
24
+ /* primary | #ea861a */
25
+ --color-primary-50: 252 237 221; /* ⬅ #fceddd */
26
+ --color-primary-100: 251 231 209; /* ⬅ #fbe7d1 */
27
+ --color-primary-200: 250 225 198; /* ⬅ #fae1c6 */
28
+ --color-primary-300: 247 207 163; /* ⬅ #f7cfa3 */
29
+ --color-primary-400: 240 170 95; /* ⬅ #f0aa5f */
30
+ --color-primary-500: 234 134 26; /* ⬅ #ea861a */
31
+ --color-primary-600: 211 121 23; /* ⬅ #d37917 */
32
+ --color-primary-700: 176 101 20; /* ⬅ #b06514 */
33
+ --color-primary-800: 140 80 16; /* ⬅ #8c5010 */
34
+ --color-primary-900: 115 66 13; /* ⬅ #73420d */
35
+ /* secondary | #97cea5 */
36
+ --color-secondary-50: 239 248 242; /* ⬅ #eff8f2 */
37
+ --color-secondary-100: 234 245 237; /* ⬅ #eaf5ed */
38
+ --color-secondary-200: 229 243 233; /* ⬅ #e5f3e9 */
39
+ --color-secondary-300: 213 235 219; /* ⬅ #d5ebdb */
40
+ --color-secondary-400: 182 221 192; /* ⬅ #b6ddc0 */
41
+ --color-secondary-500: 151 206 165; /* ⬅ #97cea5 */
42
+ --color-secondary-600: 136 185 149; /* ⬅ #88b995 */
43
+ --color-secondary-700: 113 155 124; /* ⬅ #719b7c */
44
+ --color-secondary-800: 91 124 99; /* ⬅ #5b7c63 */
45
+ --color-secondary-900: 74 101 81; /* ⬅ #4a6551 */
46
+ /* tertiary | #06b6d4 */
47
+ --color-tertiary-50: 218 244 249; /* ⬅ #daf4f9 */
48
+ --color-tertiary-100: 205 240 246; /* ⬅ #cdf0f6 */
49
+ --color-tertiary-200: 193 237 244; /* ⬅ #c1edf4 */
50
+ --color-tertiary-300: 155 226 238; /* ⬅ #9be2ee */
51
+ --color-tertiary-400: 81 204 225; /* ⬅ #51cce1 */
52
+ --color-tertiary-500: 6 182 212; /* ⬅ #06b6d4 */
53
+ --color-tertiary-600: 5 164 191; /* ⬅ #05a4bf */
54
+ --color-tertiary-700: 5 137 159; /* ⬅ #05899f */
55
+ --color-tertiary-800: 4 109 127; /* ⬅ #046d7f */
56
+ --color-tertiary-900: 3 89 104; /* ⬅ #035968 */
57
+ /* success | #84cb5d */
58
+ --color-success-50: 237 247 231; /* ⬅ #edf7e7 */
59
+ --color-success-100: 230 245 223; /* ⬅ #e6f5df */
60
+ --color-success-200: 224 242 215; /* ⬅ #e0f2d7 */
61
+ --color-success-300: 206 234 190; /* ⬅ #ceeabe */
62
+ --color-success-400: 169 219 142; /* ⬅ #a9db8e */
63
+ --color-success-500: 132 203 93; /* ⬅ #84cb5d */
64
+ --color-success-600: 119 183 84; /* ⬅ #77b754 */
65
+ --color-success-700: 99 152 70; /* ⬅ #639846 */
66
+ --color-success-800: 79 122 56; /* ⬅ #4f7a38 */
67
+ --color-success-900: 65 99 46; /* ⬅ #41632e */
68
+ /* warning | #f2ac23 */
69
+ --color-warning-50: 253 243 222; /* ⬅ #fdf3de */
70
+ --color-warning-100: 252 238 211; /* ⬅ #fceed3 */
71
+ --color-warning-200: 252 234 200; /* ⬅ #fceac8 */
72
+ --color-warning-300: 250 222 167; /* ⬅ #fadea7 */
73
+ --color-warning-400: 246 197 101; /* ⬅ #f6c565 */
74
+ --color-warning-500: 242 172 35; /* ⬅ #f2ac23 */
75
+ --color-warning-600: 218 155 32; /* ⬅ #da9b20 */
76
+ --color-warning-700: 182 129 26; /* ⬅ #b6811a */
77
+ --color-warning-800: 145 103 21; /* ⬅ #916715 */
78
+ --color-warning-900: 119 84 17; /* ⬅ #775411 */
79
+ /* error | #d57e78 */
80
+ --color-error-50: 249 236 235; /* ⬅ #f9eceb */
81
+ --color-error-100: 247 229 228; /* ⬅ #f7e5e4 */
82
+ --color-error-200: 245 223 221; /* ⬅ #f5dfdd */
83
+ --color-error-300: 238 203 201; /* ⬅ #eecbc9 */
84
+ --color-error-400: 226 165 161; /* ⬅ #e2a5a1 */
85
+ --color-error-500: 213 126 120; /* ⬅ #d57e78 */
86
+ --color-error-600: 192 113 108; /* ⬅ #c0716c */
87
+ --color-error-700: 160 95 90; /* ⬅ #a05f5a */
88
+ --color-error-800: 128 76 72; /* ⬅ #804c48 */
89
+ --color-error-900: 104 62 59; /* ⬅ #683e3b */
90
+ /* surface | #3f3731 */
91
+ --color-surface-50: 226 225 224; /* ⬅ #e2e1e0 */
92
+ --color-surface-100: 217 215 214; /* ⬅ #d9d7d6 */
93
+ --color-surface-200: 207 205 204; /* ⬅ #cfcdcc */
94
+ --color-surface-300: 178 175 173; /* ⬅ #b2afad */
95
+ --color-surface-400: 121 115 111; /* ⬅ #79736f */
96
+ --color-surface-500: 63 55 49; /* ⬅ #3f3731 */
97
+ --color-surface-600: 57 50 44; /* ⬅ #39322c */
98
+ --color-surface-700: 47 41 37; /* ⬅ #2f2925 */
99
+ --color-surface-800: 38 33 29; /* ⬅ #26211d */
100
+ --color-surface-900: 31 27 24; /* ⬅ #1f1b18 */
101
+ }
102
+
103
+ [data-theme='vintage'] h1,
104
+ [data-theme='vintage'] h2,
105
+ [data-theme='vintage'] h3,
106
+ [data-theme='vintage'] h4,
107
+ [data-theme='vintage'] h5,
108
+ [data-theme='vintage'] h6 {
109
+ letter-spacing: 1px;
110
+ }
111
+
112
+ /* Applied to body with `<body data-theme="vintage">` */
113
+ /* Created with: https://csshero.org/mesher/ */
114
+ [data-theme='vintage'] {
115
+ /* prettier-ignore */
116
+ background-image:
117
+ radial-gradient(at 100% 0%, hsla(135,34%,70%,0.20) 0px, transparent 50%),
118
+ radial-gradient(at 85% 100%, hsla(31,83%,50%,0.20) 0px, transparent 50%);
119
+ }
120
+ .dark [data-theme='vintage'] {
121
+ /* prettier-ignore */
122
+ background-image:
123
+ radial-gradient(at 100% 0%, hsla(135,34%,70%,0.14) 0px, transparent 50%),
124
+ radial-gradient(at 85% 100%, hsla(31,83%,50%,0.14) 0px, transparent 50%);
125
+ }
@@ -74,6 +74,8 @@ export interface Column {
74
74
  disableSorting?: boolean;
75
75
  colFilterFn?: ColumnFilterFn;
76
76
  colFilterComponent?: typeof SvelteComponent;
77
+ minWidth?: number;
78
+ fixedWidth?: number;
77
79
  }
78
80
  export interface Columns {
79
81
  [key: string]: Column;
@@ -81,6 +83,7 @@ export interface Columns {
81
83
  export interface TableConfig<T> {
82
84
  id: string;
83
85
  data: Writable<T[]>;
86
+ resizable?: 'rows' | 'columns' | 'both';
84
87
  toggle?: boolean;
85
88
  fitToScreen?: boolean;
86
89
  height?: null | number;
@@ -1,16 +1,16 @@
1
- // Implementations for all the calls for the pokemon endpoints.
2
- //import Api from "./Api";
3
- import { host } from '../stores/apiStores';
4
-
5
- // go to a internal action
6
- export const goTo = async (url, intern = true) => {
7
- if (intern == true) {
8
- // go to inside bexis2
9
- if (window != null && host != null && url != null) {
10
- window.open(host + url, '_self')?.focus();
11
- }
12
- } // go to a external page
13
- else {
14
- window.open(url, '_blank')?.focus();
15
- }
16
- };
1
+ // Implementations for all the calls for the pokemon endpoints.
2
+ //import Api from "./Api";
3
+ import { host } from '../stores/apiStores';
4
+
5
+ // go to a internal action
6
+ export const goTo = async (url, intern = true) => {
7
+ if (intern == true) {
8
+ // go to inside bexis2
9
+ if (window != null && host != null && url != null) {
10
+ window.open(host + url, '_self')?.focus();
11
+ }
12
+ } // go to a external page
13
+ else {
14
+ window.open(url, '_blank')?.focus();
15
+ }
16
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bexis2/bexis2-core-ui",
3
- "version": "0.2.31",
3
+ "version": "0.2.32",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "dev": "vite dev",
@@ -1 +1 @@
1
- <h1>table</h1>
1
+ <h1>table</h1>
@@ -1,11 +1,11 @@
1
- <script lang="ts">
2
- type x = {
3
- name: string;
4
- };
5
-
6
- let result: x = { name: 'david' };
7
- </script>
8
-
9
- <h1>MyList</h1>
10
- {result.name}
11
- <b>from bexis-lib</b>
1
+ <script lang="ts">
2
+ type x = {
3
+ name: string;
4
+ };
5
+
6
+ let result: x = { name: 'david' };
7
+ </script>
8
+
9
+ <h1>MyList</h1>
10
+ {result.name}
11
+ <b>from bexis-lib</b>
@@ -24,6 +24,7 @@
24
24
  id: tableId,
25
25
  data,
26
26
  columns,
27
+ resizable = 'none',
27
28
  height = null,
28
29
  optionsComponent,
29
30
  defaultPageSize = 10,
@@ -48,7 +49,7 @@
48
49
  });
49
50
 
50
51
  const allCols: { [key: string]: any } = {};
51
-
52
+
52
53
  $data.forEach((item) => {
53
54
  Object.keys(item).forEach((key) => {
54
55
  if (!allCols[key]) {
@@ -133,7 +134,7 @@
133
134
  header: key,
134
135
  accessor: accessor,
135
136
  cell: ({ value }) => {
136
- return (value === undefined) ? "" : value;
137
+ return value ? value : '';
137
138
  },
138
139
  plugins: {
139
140
  sort: {
@@ -158,7 +159,7 @@
158
159
  if (optionsComponent !== undefined) {
159
160
  tableColumns.push(
160
161
  table.display({
161
- id: 'actionsColumn',
162
+ id: 'optionsColumn',
162
163
  header: '',
163
164
  cell: ({ row }, _) => {
164
165
  return createRender(optionsComponent!, {
@@ -175,13 +176,72 @@
175
176
  const { headerRows, pageRows, tableAttrs, tableBodyAttrs, pluginStates } =
176
177
  table.createViewModel(createdTableColumns);
177
178
  const { filterValue } = pluginStates.tableFilter;
179
+
180
+ const minWidth = (id: string) => {
181
+ if (columns && id in columns) {
182
+ return columns[id].minWidth ?? 0;
183
+ }
184
+ return 0;
185
+ };
186
+
187
+ const fixedWidth = (id: string) => {
188
+ if (columns && id in columns) {
189
+ return columns[id].fixedWidth ?? 0;
190
+ }
191
+ return 0;
192
+ };
193
+
194
+ const cellStyle = (id: string) => {
195
+ const minW = minWidth(id);
196
+ const fixedW = fixedWidth(id);
197
+ const styles: string[] = [];
198
+
199
+ minW && styles.push(`min-width: ${minW}px`);
200
+ fixedW && styles.push(`width: ${fixedW}px`);
201
+
202
+ return styles.join(';');
203
+ };
204
+
205
+ const resetResize = () => {
206
+ if (resizable === 'columns' || resizable === 'both') {
207
+ $headerRows.forEach((row) => {
208
+ row.cells.forEach((cell) => {
209
+ const minW = minWidth(cell.id);
210
+ const fixedW = fixedWidth(cell.id);
211
+
212
+ fixedW &&
213
+ document
214
+ .getElementById(`th-${tableId}-${cell.id}`)
215
+ ?.style.setProperty('width', `${fixedW}px`);
216
+ minW &&
217
+ document
218
+ .getElementById(`th-${tableId}-${cell.id}`)
219
+ ?.style.setProperty('min-width', `${minW}px`);
220
+
221
+ !minW &&
222
+ !fixedW &&
223
+ document.getElementById(`th-${tableId}-${cell.id}`)?.style.setProperty('width', 'auto');
224
+ });
225
+ });
226
+ }
227
+
228
+ if (resizable === 'rows' || resizable === 'both') {
229
+ $pageRows.forEach((row) => {
230
+ row.cells.forEach((cell) => {
231
+ document
232
+ .getElementById(`${tableId}-${cell.id}-${row.id}`)
233
+ ?.style.setProperty('height', 'auto');
234
+ });
235
+ });
236
+ }
237
+ };
178
238
  </script>
179
239
 
180
240
  <div class="grid gap-2 overflow-auto" class:w-fit={!fitToScreen} class:w-full={fitToScreen}>
181
241
  <div class="table-container">
182
242
  {#if $data.length > 0}
183
243
  <input
184
- class="input p-2 mb-2 border border-primary-500"
244
+ class="input p-2 border border-primary-500"
185
245
  type="text"
186
246
  bind:value={$filterValue}
187
247
  placeholder="Search rows..."
@@ -189,24 +249,37 @@
189
249
  />
190
250
  {/if}
191
251
 
192
- {#if toggle}
193
- <SlideToggle
194
- name="slider-label"
195
- active="bg-primary-500"
196
- size="sm"
197
- checked={fitToScreen}
198
- id="{tableId}-toggle"
199
- on:change={() => (fitToScreen = !fitToScreen)}>Fit to screen</SlideToggle
200
- >
201
- {/if}
252
+ <div class="flex justify-between items-center py-2 w-full">
253
+ <div>
254
+ {#if toggle}
255
+ <SlideToggle
256
+ name="slider-label"
257
+ active="bg-primary-500"
258
+ size="sm"
259
+ checked={fitToScreen}
260
+ id="{tableId}-toggle"
261
+ on:change={() => (fitToScreen = !fitToScreen)}>Fit to screen</SlideToggle
262
+ >
263
+ {/if}
264
+ </div>
265
+ <div>
266
+ {#if resizable !== 'none'}
267
+ <button
268
+ type="button"
269
+ class="btn btn-sm variant-filled-primary rounded-full order-last"
270
+ on:click|preventDefault={resetResize}>Reset sizing</button
271
+ >
272
+ {/if}
273
+ </div>
274
+ </div>
202
275
 
203
276
  <div class="overflow-auto" style="height: {height}px">
204
277
  <table
205
278
  {...$tableAttrs}
206
- class="table table-compact bg-tertiary-200 overflow-clip"
279
+ class="table table-auto table-compact bg-tertiary-500/30 overflow-clip"
207
280
  id="{tableId}-table"
208
281
  >
209
- <thead class={height != null ? `sticky top-0` : ''}>
282
+ <thead class=" {height != null ? `sticky top-0` : ''}">
210
283
  {#each $headerRows as headerRow (headerRow.id)}
211
284
  <Subscribe
212
285
  rowAttrs={headerRow.attrs()}
@@ -214,11 +287,19 @@
214
287
  rowProps={headerRow.props()}
215
288
  let:rowProps
216
289
  >
217
- <tr {...rowAttrs} class="bg-primary-300">
290
+ <tr {...rowAttrs} class="bg-primary-300 items-stretch">
218
291
  {#each headerRow.cells as cell (cell.id)}
219
292
  <Subscribe attrs={cell.attrs()} props={cell.props()} let:props let:attrs>
220
- <th scope="col" class="!p-2 w-min" {...attrs}>
221
- <div class="flex w-full justify-between items-center">
293
+ <th
294
+ scope="col"
295
+ class="!p-2 overflow-auto"
296
+ class:resize-x={(resizable === 'columns' || resizable === 'both') &&
297
+ !fixedWidth(cell.id)}
298
+ {...attrs}
299
+ id="th-{tableId}-{cell.id}"
300
+ style={cellStyle(cell.id)}
301
+ >
302
+ <div class="flex justify-between items-center">
222
303
  <div class="flex gap-1 whitespace-pre-wrap">
223
304
  <span
224
305
  class:underline={props.sort.order}
@@ -258,18 +339,18 @@
258
339
  <tbody class="overflow-auto" {...$tableBodyAttrs}>
259
340
  {#each $pageRows as row (row.id)}
260
341
  <Subscribe rowAttrs={row.attrs()} let:rowAttrs>
261
- <tr {...rowAttrs} id="{tableId}-row-{row.id}">
262
- {#each row.cells as cell (cell?.id)}
342
+ <tr {...rowAttrs} id="{tableId}-row-{row.id}" class="">
343
+ {#each row.cells as cell, index (cell?.id)}
263
344
  <Subscribe attrs={cell.attrs()} let:attrs>
264
345
  <td
265
346
  {...attrs}
266
- class="!p-2 w-max focus:resize"
347
+ class="!p-2 overflow-auto {index === 0 &&
348
+ (resizable === 'rows' || resizable === 'both')
349
+ ? 'resize-y'
350
+ : ''}"
267
351
  id="{tableId}-{cell.id}-{row.id}"
268
352
  >
269
- <div
270
- class="flex items-center h-max overflow-x-auto resize-none hover:resize"
271
- class:max-w-md={!fitToScreen}
272
- >
353
+ <div class="flex items-center h-max overflow-x-auto">
273
354
  <Render of={cell.render()} />
274
355
  </div>
275
356
  </td>
@@ -105,12 +105,13 @@
105
105
  placement: 'bottom-start'
106
106
  };
107
107
 
108
- let type: string = '';
108
+ let type: string = 'string';
109
109
  let isDate = false;
110
110
 
111
111
  $values.forEach((item) => {
112
112
  if (item) {
113
113
  type = typeof (toFilterableValueFn ? toFilterableValueFn(item) : item);
114
+
114
115
  if (type === 'object') {
115
116
  if (item instanceof Date) {
116
117
  isDate = true;