@limetech/lime-elements 35.0.0-next.2 → 35.0.0-next.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 (230) hide show
  1. package/dist/cjs/checkbox.template-7f83d0b4.js +41 -0
  2. package/dist/cjs/{component-f7ef9087.js → component-66df95e7.js} +190 -132
  3. package/dist/cjs/{component-f532119f.js → component-67144c1c.js} +47 -3
  4. package/dist/cjs/{component-ed21410d.js → component-ae3bfacf.js} +367 -235
  5. package/dist/cjs/{component-2faaa141.js → component-cf490570.js} +213 -143
  6. package/dist/cjs/{component-10dbdd60.js → component-dd795ff0.js} +7 -5
  7. package/dist/cjs/{index-e63a89d7.js → index-43283636.js} +23 -0
  8. package/dist/cjs/lime-elements.cjs.js +3 -3
  9. package/dist/cjs/limel-badge.cjs.entry.js +3 -3
  10. package/dist/cjs/limel-banner.cjs.entry.js +1 -1
  11. package/dist/cjs/limel-button-group.cjs.entry.js +2 -2
  12. package/dist/cjs/limel-button.cjs.entry.js +2 -2
  13. package/dist/cjs/limel-checkbox.cjs.entry.js +131 -86
  14. package/dist/cjs/limel-chip-set.cjs.entry.js +234 -190
  15. package/dist/cjs/limel-circular-progress.cjs.entry.js +2 -2
  16. package/dist/cjs/limel-code-editor.cjs.entry.js +49 -22
  17. package/dist/cjs/limel-collapsible-section.cjs.entry.js +1 -1
  18. package/dist/cjs/limel-color-picker-palette_2.cjs.entry.js +1 -1
  19. package/dist/cjs/limel-color-picker.cjs.entry.js +1 -1
  20. package/dist/cjs/limel-config.cjs.entry.js +1 -1
  21. package/dist/cjs/limel-date-picker.cjs.entry.js +5 -5
  22. package/dist/cjs/limel-dialog.cjs.entry.js +8 -9
  23. package/dist/cjs/limel-file.cjs.entry.js +5 -5
  24. package/dist/cjs/limel-flatpickr-adapter.cjs.entry.js +1 -1
  25. package/dist/cjs/limel-flex-container.cjs.entry.js +5 -1
  26. package/dist/cjs/limel-form.cjs.entry.js +7547 -8994
  27. package/dist/cjs/limel-grid.cjs.entry.js +1 -1
  28. package/dist/cjs/limel-header.cjs.entry.js +1 -1
  29. package/dist/cjs/limel-icon-button.cjs.entry.js +5 -5
  30. package/dist/cjs/limel-icon.cjs.entry.js +1 -1
  31. package/dist/cjs/limel-input-field.cjs.entry.js +6 -6
  32. package/dist/cjs/limel-linear-progress.cjs.entry.js +3 -3
  33. package/dist/cjs/limel-list_3.cjs.entry.js +133 -78
  34. package/dist/cjs/limel-menu-list.cjs.entry.js +85 -69
  35. package/dist/cjs/limel-menu.cjs.entry.js +1 -1
  36. package/dist/cjs/limel-picker.cjs.entry.js +2 -2
  37. package/dist/cjs/limel-popover-surface.cjs.entry.js +2 -2
  38. package/dist/cjs/limel-progress-flow-item.cjs.entry.js +1 -1
  39. package/dist/cjs/limel-progress-flow.cjs.entry.js +1 -1
  40. package/dist/cjs/limel-select.cjs.entry.js +5 -5
  41. package/dist/cjs/limel-slider.cjs.entry.js +33 -6
  42. package/dist/cjs/limel-snackbar.cjs.entry.js +78 -72
  43. package/dist/cjs/limel-spinner.cjs.entry.js +1 -1
  44. package/dist/cjs/limel-switch.cjs.entry.js +497 -201
  45. package/dist/cjs/limel-tab-bar.cjs.entry.js +262 -185
  46. package/dist/cjs/limel-tab-panel.cjs.entry.js +1 -1
  47. package/dist/cjs/limel-table.cjs.entry.js +363 -11
  48. package/dist/cjs/limel-tooltip_2.cjs.entry.js +1 -1
  49. package/dist/cjs/loader.cjs.js +3 -3
  50. package/dist/collection/collection-manifest.json +2 -2
  51. package/dist/collection/components/badge/badge.css +9 -15
  52. package/dist/collection/components/badge/badge.js +2 -2
  53. package/dist/collection/components/button/button.css +333 -145
  54. package/dist/collection/components/button-group/button-group.css +30 -5
  55. package/dist/collection/components/checkbox/checkbox.css +46 -16
  56. package/dist/collection/components/checkbox/checkbox.template.js +22 -20
  57. package/dist/collection/components/chip-set/chip-set.css +367 -34
  58. package/dist/collection/components/circular-progress/circular-progress.css +2 -2
  59. package/dist/collection/components/code-editor/code-editor.css +8 -13
  60. package/dist/collection/components/dialog/dialog.css +153 -109
  61. package/dist/collection/components/flex-container/flex-container.js +10 -0
  62. package/dist/collection/components/form/form.css +3 -1
  63. package/dist/collection/components/form/templates/common.js +4 -1
  64. package/dist/collection/components/icon-button/icon-button.css +116 -59
  65. package/dist/collection/components/icon-button/icon-button.js +1 -0
  66. package/dist/collection/components/input-field/input-field.css +351 -29
  67. package/dist/collection/components/linear-progress/linear-progress.css +14 -2
  68. package/dist/collection/components/list/list.css +912 -89
  69. package/dist/collection/components/menu-list/menu-list.css +912 -89
  70. package/dist/collection/components/menu-surface/menu-surface.css +31 -7
  71. package/dist/collection/components/picker/picker.js +1 -1
  72. package/dist/collection/components/popover-surface/popover-surface.css +1 -0
  73. package/dist/collection/components/select/select.css +430 -20
  74. package/dist/collection/components/select/select.template.js +1 -1
  75. package/dist/collection/components/slider/slider.css +54 -2
  76. package/dist/collection/components/snackbar/snackbar.css +588 -301
  77. package/dist/collection/components/switch/switch.css +592 -222
  78. package/dist/collection/components/switch/switch.js +18 -12
  79. package/dist/collection/components/tab-bar/tab-bar.css +77 -48
  80. package/dist/collection/components/table/columns.js +1 -1
  81. package/dist/collection/components/table/selection.js +111 -0
  82. package/dist/collection/components/table/table-selection.js +125 -0
  83. package/dist/collection/components/table/table.css +125 -36
  84. package/dist/collection/components/table/table.js +212 -7
  85. package/dist/collection/style/functions.scss +3 -1
  86. package/dist/collection/style/internal/lime-theme.scss +30 -31
  87. package/dist/collection/style/internal/lime-typography.scss +55 -56
  88. package/dist/collection/style/internal/shared_input-select-picker.scss +1 -0
  89. package/dist/collection/style/internal/z-index.scss +2 -1
  90. package/dist/esm/checkbox.template-f429c5b6.js +39 -0
  91. package/dist/esm/{component-89e0ce26.js → component-19eb6e2b.js} +7 -5
  92. package/dist/esm/{component-2630c3d7.js → component-288691f3.js} +367 -235
  93. package/dist/esm/{component-d682c974.js → component-410aad5a.js} +44 -4
  94. package/dist/esm/{component-429e92ee.js → component-5b4ac85a.js} +213 -143
  95. package/dist/esm/{component-2eb4e07b.js → component-fffa3419.js} +191 -133
  96. package/dist/esm/{index-2316f345.js → index-4456d4ad.js} +23 -0
  97. package/dist/esm/lime-elements.js +3 -3
  98. package/dist/esm/limel-badge.entry.js +3 -3
  99. package/dist/esm/limel-banner.entry.js +1 -1
  100. package/dist/esm/limel-button-group.entry.js +2 -2
  101. package/dist/esm/limel-button.entry.js +2 -2
  102. package/dist/esm/limel-checkbox.entry.js +132 -87
  103. package/dist/esm/limel-chip-set.entry.js +234 -190
  104. package/dist/esm/limel-circular-progress.entry.js +2 -2
  105. package/dist/esm/limel-code-editor.entry.js +49 -22
  106. package/dist/esm/limel-collapsible-section.entry.js +1 -1
  107. package/dist/esm/limel-color-picker-palette_2.entry.js +1 -1
  108. package/dist/esm/limel-color-picker.entry.js +1 -1
  109. package/dist/esm/limel-config.entry.js +1 -1
  110. package/dist/esm/limel-date-picker.entry.js +5 -5
  111. package/dist/esm/limel-dialog.entry.js +8 -9
  112. package/dist/esm/limel-file.entry.js +5 -5
  113. package/dist/esm/limel-flatpickr-adapter.entry.js +1 -1
  114. package/dist/esm/limel-flex-container.entry.js +5 -1
  115. package/dist/esm/limel-form.entry.js +7550 -8997
  116. package/dist/esm/limel-grid.entry.js +1 -1
  117. package/dist/esm/limel-header.entry.js +1 -1
  118. package/dist/esm/limel-icon-button.entry.js +5 -5
  119. package/dist/esm/limel-icon.entry.js +1 -1
  120. package/dist/esm/limel-input-field.entry.js +6 -6
  121. package/dist/esm/limel-linear-progress.entry.js +4 -4
  122. package/dist/esm/limel-list_3.entry.js +134 -79
  123. package/dist/esm/limel-menu-list.entry.js +86 -70
  124. package/dist/esm/limel-menu.entry.js +1 -1
  125. package/dist/esm/limel-picker.entry.js +2 -2
  126. package/dist/esm/limel-popover-surface.entry.js +2 -2
  127. package/dist/esm/limel-progress-flow-item.entry.js +1 -1
  128. package/dist/esm/limel-progress-flow.entry.js +1 -1
  129. package/dist/esm/limel-select.entry.js +5 -5
  130. package/dist/esm/limel-slider.entry.js +34 -7
  131. package/dist/esm/limel-snackbar.entry.js +78 -72
  132. package/dist/esm/limel-spinner.entry.js +1 -1
  133. package/dist/esm/limel-switch.entry.js +497 -201
  134. package/dist/esm/limel-tab-bar.entry.js +262 -185
  135. package/dist/esm/limel-tab-panel.entry.js +1 -1
  136. package/dist/esm/limel-table.entry.js +363 -11
  137. package/dist/esm/limel-tooltip_2.entry.js +1 -1
  138. package/dist/esm/loader.js +3 -3
  139. package/dist/esm/polyfills/css-shim.js +1 -1
  140. package/dist/esm/{util-71a23335.js → util-f1bde91c.js} +1 -1
  141. package/dist/lime-elements/lime-elements.esm.js +1 -1
  142. package/dist/lime-elements/{p-a4c532a7.entry.js → p-00d485d8.entry.js} +1 -1
  143. package/dist/lime-elements/p-062a9599.entry.js +131 -0
  144. package/dist/lime-elements/{p-597cbe05.entry.js → p-0ea1cbf6.entry.js} +1 -1
  145. package/dist/lime-elements/p-1c284626.js +73 -0
  146. package/dist/lime-elements/{p-a2cf74c1.entry.js → p-255084bd.entry.js} +1 -1
  147. package/dist/lime-elements/{p-e881e98d.entry.js → p-2550ff27.entry.js} +1 -1
  148. package/dist/lime-elements/{p-31fecf5d.entry.js → p-3bef288b.entry.js} +1 -1
  149. package/dist/lime-elements/{p-58cbe99d.entry.js → p-3f440859.entry.js} +1 -1
  150. package/dist/lime-elements/{p-4b5af81b.entry.js → p-41ec08c9.entry.js} +1 -1
  151. package/dist/lime-elements/{p-92146da6.js → p-44f9b6d5.js} +0 -0
  152. package/dist/lime-elements/{p-1fb5340d.entry.js → p-45689f25.entry.js} +1 -1
  153. package/dist/lime-elements/p-47ef0ebb.entry.js +1 -0
  154. package/dist/lime-elements/{p-076bd4dc.js → p-48d4ef20.js} +3 -3
  155. package/dist/lime-elements/p-4e9869f4.entry.js +126 -0
  156. package/dist/lime-elements/{p-6003f817.entry.js → p-549190f6.entry.js} +1 -1
  157. package/dist/lime-elements/p-555f774c.entry.js +82 -0
  158. package/dist/lime-elements/p-63516991.entry.js +1 -0
  159. package/dist/lime-elements/{p-13f0e4f4.entry.js → p-687429fb.entry.js} +1 -1
  160. package/dist/lime-elements/p-6acee2e5.entry.js +73 -0
  161. package/dist/lime-elements/p-6fc9a0be.entry.js +59 -0
  162. package/dist/lime-elements/{p-64549ba6.entry.js → p-70a4d004.entry.js} +3 -3
  163. package/dist/lime-elements/{p-468e940e.entry.js → p-75846313.entry.js} +1 -1
  164. package/dist/lime-elements/p-779d1567.entry.js +1 -0
  165. package/dist/lime-elements/p-7d4eb67f.entry.js +1 -0
  166. package/dist/lime-elements/p-8777324f.entry.js +1 -0
  167. package/dist/lime-elements/{p-714fde78.entry.js → p-897a7f8a.entry.js} +1 -1
  168. package/dist/lime-elements/{p-fc30b8e3.entry.js → p-8a5ca741.entry.js} +1 -1
  169. package/dist/lime-elements/{p-8a2c1038.entry.js → p-9607b6f9.entry.js} +2 -2
  170. package/dist/lime-elements/p-9caf28bd.entry.js +1 -0
  171. package/dist/lime-elements/{p-152a6d5f.js → p-9faad6eb.js} +1 -1
  172. package/dist/lime-elements/{p-34c7872e.entry.js → p-a35e6b8a.entry.js} +1 -1
  173. package/dist/lime-elements/{p-041ae00c.entry.js → p-b808ba3d.entry.js} +1 -1
  174. package/dist/lime-elements/p-be2bd743.js +1 -0
  175. package/dist/lime-elements/p-be351178.entry.js +37 -0
  176. package/dist/lime-elements/p-c40f5030.entry.js +82 -0
  177. package/dist/lime-elements/p-c4e2eb42.entry.js +1 -0
  178. package/dist/lime-elements/{p-1876a96a.entry.js → p-c5168bda.entry.js} +1 -1
  179. package/dist/lime-elements/p-cbc43682.js +81 -0
  180. package/dist/lime-elements/{p-ace9affc.js → p-d0a7de87.js} +2 -2
  181. package/dist/lime-elements/{p-be56ffab.entry.js → p-d5f17adb.entry.js} +1 -1
  182. package/dist/lime-elements/p-d70f1c00.entry.js +59 -0
  183. package/dist/lime-elements/p-dbd61714.entry.js +1 -0
  184. package/dist/lime-elements/{p-8ad5e143.entry.js → p-dd62c71b.entry.js} +1 -1
  185. package/dist/lime-elements/p-dfba92de.js +126 -0
  186. package/dist/lime-elements/p-e55144ec.entry.js +1 -0
  187. package/dist/lime-elements/{p-dfe0a58b.entry.js → p-e6f39a71.entry.js} +1 -1
  188. package/dist/lime-elements/p-e8453bcb.entry.js +16 -0
  189. package/dist/lime-elements/p-f777d8a3.entry.js +82 -0
  190. package/dist/lime-elements/style/functions.scss +3 -1
  191. package/dist/lime-elements/style/internal/lime-theme.scss +30 -31
  192. package/dist/lime-elements/style/internal/lime-typography.scss +55 -56
  193. package/dist/lime-elements/style/internal/shared_input-select-picker.scss +1 -0
  194. package/dist/lime-elements/style/internal/z-index.scss +2 -1
  195. package/dist/types/components/badge/badge.d.ts +1 -1
  196. package/dist/types/components/flex-container/flex-container.d.ts +7 -0
  197. package/dist/types/components/switch/switch.d.ts +2 -2
  198. package/dist/types/components/table/columns.d.ts +7 -0
  199. package/dist/types/components/table/selection.d.ts +79 -0
  200. package/dist/types/components/table/table-selection.d.ts +57 -0
  201. package/dist/types/components/table/table.d.ts +39 -7
  202. package/dist/types/components/table/table.types.d.ts +13 -0
  203. package/dist/types/components.d.ts +33 -1
  204. package/dist/types/stencil-public-runtime.d.ts +6 -4
  205. package/package.json +19 -19
  206. package/dist/cjs/checkbox.template-50eb8b76.js +0 -39
  207. package/dist/esm/checkbox.template-50f7c07b.js +0 -37
  208. package/dist/lime-elements/p-0ce9165f.entry.js +0 -1
  209. package/dist/lime-elements/p-0fd208f3.entry.js +0 -82
  210. package/dist/lime-elements/p-143705b1.entry.js +0 -1
  211. package/dist/lime-elements/p-250f55be.js +0 -1
  212. package/dist/lime-elements/p-31299106.js +0 -126
  213. package/dist/lime-elements/p-4932c029.entry.js +0 -1
  214. package/dist/lime-elements/p-510bb5a4.entry.js +0 -1
  215. package/dist/lime-elements/p-6215e45e.entry.js +0 -37
  216. package/dist/lime-elements/p-668795a7.js +0 -73
  217. package/dist/lime-elements/p-6cfb45a1.entry.js +0 -1
  218. package/dist/lime-elements/p-7476efe0.entry.js +0 -1
  219. package/dist/lime-elements/p-902347b9.js +0 -81
  220. package/dist/lime-elements/p-90f3e17c.entry.js +0 -37
  221. package/dist/lime-elements/p-96e44a1e.entry.js +0 -82
  222. package/dist/lime-elements/p-a77cbb08.entry.js +0 -1
  223. package/dist/lime-elements/p-b5faa40d.entry.js +0 -59
  224. package/dist/lime-elements/p-bc0dcf01.entry.js +0 -73
  225. package/dist/lime-elements/p-c35874db.entry.js +0 -1
  226. package/dist/lime-elements/p-c8c8a946.entry.js +0 -59
  227. package/dist/lime-elements/p-d2c74396.entry.js +0 -1
  228. package/dist/lime-elements/p-d48ad9f7.entry.js +0 -126
  229. package/dist/lime-elements/p-d93a3b07.entry.js +0 -16
  230. package/dist/lime-elements/p-f2c706b8.entry.js +0 -131
@@ -24,9 +24,9 @@ export class Switch {
24
24
  */
25
25
  this.value = false;
26
26
  this.fieldId = createRandomString();
27
- this.onChange = (event) => {
27
+ this.handleClick = (event) => {
28
28
  event.stopPropagation();
29
- this.change.emit(event.target.checked);
29
+ this.change.emit(!this.value);
30
30
  };
31
31
  }
32
32
  connectedCallback() {
@@ -48,25 +48,31 @@ export class Switch {
48
48
  }
49
49
  render() {
50
50
  return [
51
- h("div", { class: {
51
+ h("button", { id: this.fieldId, class: {
52
52
  'mdc-switch': true,
53
- 'mdc-switch--disabled': this.disabled || this.readonly,
54
53
  'lime-switch--readonly': this.readonly,
55
- } },
54
+ 'mdc-switch--unselected': !this.value,
55
+ 'mdc-switch--selected': this.value,
56
+ }, type: "button", role: "switch", "aria-checked": this.value, disabled: this.disabled || this.readonly, onClick: this.handleClick },
56
57
  h("div", { class: "mdc-switch__track" }),
57
- h("div", { class: "mdc-switch__thumb-underlay" },
58
- h("div", { class: "mdc-switch__thumb" },
59
- h("input", { type: "checkbox", class: "mdc-switch__native-control", id: this.fieldId, role: "switch", onChange: this.onChange, disabled: this.disabled || this.readonly, checked: this.value })))),
58
+ h("div", { class: "mdc-switch__handle-track" },
59
+ h("div", { class: "mdc-switch__handle" },
60
+ h("div", { class: "mdc-switch__shadow" },
61
+ h("div", { class: "mdc-elevation-overlay" })),
62
+ h("div", { class: "mdc-switch__ripple" }),
63
+ h("div", { class: "mdc-switch__icons" },
64
+ h("svg", { class: "mdc-switch__icon mdc-switch__icon--on", viewBox: "0 0 24 24" },
65
+ h("path", { d: "M19.69,5.23L8.96,15.96l-4.23-4.23L2.96,13.5l6,6L21.46,7L19.69,5.23z" })),
66
+ h("svg", { class: "mdc-switch__icon mdc-switch__icon--off", viewBox: "0 0 24 24" },
67
+ h("path", { d: "M20 13H4v-2h16v2z" })))))),
60
68
  h("label", { class: `${this.disabled || this.readonly ? 'disabled' : ''}`, htmlFor: this.fieldId }, this.label),
61
69
  ];
62
70
  }
63
- valueWatcher(newValue, oldValue) {
71
+ valueWatcher(newValue) {
64
72
  if (!this.mdcSwitch) {
65
73
  return;
66
74
  }
67
- if (newValue !== oldValue) {
68
- this.mdcSwitch.checked = newValue;
69
- }
75
+ this.mdcSwitch.selected = newValue;
70
76
  }
71
77
  static get is() { return "limel-switch"; }
72
78
  static get encapsulation() { return "shadow"; }
@@ -192,17 +192,6 @@
192
192
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
193
193
  * THE SOFTWARE.
194
194
  */
195
- .mdc-tab-indicator {
196
- display: flex;
197
- position: absolute;
198
- top: 0;
199
- left: 0;
200
- justify-content: center;
201
- width: 100%;
202
- height: 100%;
203
- pointer-events: none;
204
- z-index: 1;
205
- }
206
195
  .mdc-tab-indicator .mdc-tab-indicator__content--underline {
207
196
  border-color: #26a69a;
208
197
  /* @alternate */
@@ -221,6 +210,18 @@
221
210
  font-size: 34px;
222
211
  }
223
212
 
213
+ .mdc-tab-indicator {
214
+ display: flex;
215
+ position: absolute;
216
+ top: 0;
217
+ left: 0;
218
+ justify-content: center;
219
+ width: 100%;
220
+ height: 100%;
221
+ pointer-events: none;
222
+ z-index: 1;
223
+ }
224
+
224
225
  .mdc-tab-indicator__content {
225
226
  transform-origin: left;
226
227
  opacity: 0;
@@ -282,10 +283,46 @@
282
283
  text-transform: none;
283
284
  /* @alternate */
284
285
  text-transform: var(--mdc-typography-button-text-transform, none);
286
+ position: relative;
287
+ }
288
+ .mdc-tab .mdc-tab__text-label {
289
+ color: rgba(0, 0, 0, 0.6);
290
+ }
291
+ .mdc-tab .mdc-tab__icon {
292
+ color: rgba(0, 0, 0, 0.54);
293
+ fill: currentColor;
294
+ }
295
+
296
+ .mdc-tab__content {
297
+ position: relative;
298
+ }
299
+
300
+ .mdc-tab__icon {
301
+ width: 24px;
302
+ height: 24px;
303
+ font-size: 24px;
304
+ }
305
+
306
+ .mdc-tab--active .mdc-tab__text-label {
307
+ color: #26a69a;
308
+ /* @alternate */
309
+ color: var(--mdc-theme-primary, #26a69a);
310
+ }
311
+ .mdc-tab--active .mdc-tab__icon {
312
+ color: #26a69a;
313
+ /* @alternate */
314
+ color: var(--mdc-theme-primary, #26a69a);
315
+ fill: currentColor;
316
+ }
317
+
318
+ .mdc-tab {
319
+ background: none;
320
+ }
321
+
322
+ .mdc-tab {
323
+ min-width: 90px;
285
324
  padding-right: 24px;
286
325
  padding-left: 24px;
287
- min-width: 90px;
288
- position: relative;
289
326
  display: flex;
290
327
  flex: 1 0 auto;
291
328
  justify-content: center;
@@ -295,20 +332,12 @@
295
332
  padding-bottom: 0;
296
333
  border: none;
297
334
  outline: none;
298
- background: none;
299
335
  text-align: center;
300
336
  white-space: nowrap;
301
337
  cursor: pointer;
302
338
  -webkit-appearance: none;
303
339
  z-index: 1;
304
340
  }
305
- .mdc-tab .mdc-tab__text-label {
306
- color: rgba(0, 0, 0, 0.6);
307
- }
308
- .mdc-tab .mdc-tab__icon {
309
- color: rgba(0, 0, 0, 0.54);
310
- fill: currentColor;
311
- }
312
341
  .mdc-tab::-moz-focus-inner {
313
342
  padding: 0;
314
343
  border: 0;
@@ -319,7 +348,6 @@
319
348
  }
320
349
 
321
350
  .mdc-tab__content {
322
- position: relative;
323
351
  display: flex;
324
352
  align-items: center;
325
353
  justify-content: center;
@@ -336,9 +364,6 @@
336
364
 
337
365
  .mdc-tab__icon {
338
366
  transition: 150ms color linear;
339
- width: 24px;
340
- height: 24px;
341
- font-size: 24px;
342
367
  z-index: 2;
343
368
  }
344
369
 
@@ -352,17 +377,6 @@
352
377
  padding-bottom: 4px;
353
378
  }
354
379
 
355
- .mdc-tab--active .mdc-tab__text-label {
356
- color: #26a69a;
357
- /* @alternate */
358
- color: var(--mdc-theme-primary, #26a69a);
359
- }
360
- .mdc-tab--active .mdc-tab__icon {
361
- color: #26a69a;
362
- /* @alternate */
363
- color: var(--mdc-theme-primary, #26a69a);
364
- fill: currentColor;
365
- }
366
380
  .mdc-tab--active .mdc-tab__text-label,
367
381
  .mdc-tab--active .mdc-tab__icon {
368
382
  transition-delay: 100ms;
@@ -370,15 +384,21 @@
370
384
 
371
385
  .mdc-tab:not(.mdc-tab--stacked) .mdc-tab__icon + .mdc-tab__text-label {
372
386
  /* @noflip */
387
+ /*rtl:ignore*/
373
388
  padding-left: 8px;
374
389
  /* @noflip */
390
+ /*rtl:ignore*/
375
391
  padding-right: 0;
376
392
  }
377
393
  [dir=rtl] .mdc-tab:not(.mdc-tab--stacked) .mdc-tab__icon + .mdc-tab__text-label, .mdc-tab:not(.mdc-tab--stacked) .mdc-tab__icon + .mdc-tab__text-label[dir=rtl] {
394
+ /*rtl:begin:ignore*/
378
395
  /* @noflip */
396
+ /*rtl:ignore*/
379
397
  padding-left: 0;
380
398
  /* @noflip */
399
+ /*rtl:ignore*/
381
400
  padding-right: 8px;
401
+ /*rtl:end:ignore*/
382
402
  }
383
403
 
384
404
  @keyframes mdc-ripple-fg-radius-in {
@@ -442,6 +462,7 @@
442
462
  .mdc-tab.mdc-ripple-upgraded .mdc-tab__ripple::after {
443
463
  top: 0;
444
464
  /* @noflip */
465
+ /*rtl:ignore*/
445
466
  left: 0;
446
467
  transform: scale(0);
447
468
  transform-origin: center center;
@@ -449,6 +470,7 @@
449
470
  .mdc-tab.mdc-ripple-upgraded--unbounded .mdc-tab__ripple::after {
450
471
  top: var(--mdc-ripple-top, 0);
451
472
  /* @noflip */
473
+ /*rtl:ignore*/
452
474
  left: var(--mdc-ripple-left, 0);
453
475
  }
454
476
  .mdc-tab.mdc-ripple-upgraded--foreground-activation .mdc-tab__ripple::after {
@@ -462,6 +484,7 @@
462
484
  .mdc-tab .mdc-tab__ripple::after {
463
485
  top: calc(50% - 100%);
464
486
  /* @noflip */
487
+ /*rtl:ignore*/
465
488
  left: calc(50% - 100%);
466
489
  width: 200%;
467
490
  height: 200%;
@@ -587,19 +610,10 @@
587
610
  flex: 1 0 auto;
588
611
  }
589
612
 
590
- .mdc-tab__icon {
591
- margin-right: 0.5rem;
592
- }
593
-
594
613
  .mdc-tab-indicator .mdc-tab-indicator__content {
595
614
  border: none;
596
615
  }
597
616
 
598
- .mdc-tab--active .mdc-ripple-upgraded--background-focused:before {
599
- background-color: transparent;
600
- transition: background-color 1s ease;
601
- }
602
-
603
617
  .mdc-tab__ripple {
604
618
  box-sizing: border-box;
605
619
  border-radius: 0.625rem;
@@ -615,12 +629,15 @@
615
629
  .mdc-tab {
616
630
  border-radius: 0;
617
631
  letter-spacing: normal;
618
- }
619
-
620
- .mdc-tab {
632
+ padding-right: 1.25rem;
633
+ padding-left: 1.25rem;
634
+ min-width: 2.5rem;
621
635
  background-color: transparent;
622
636
  flex: 0 0 auto;
623
637
  }
638
+ .mdc-tab:not(.mdc-tab--active) {
639
+ --badge-background-color: rgb(var(--contrast-600));
640
+ }
624
641
  .mdc-tab:not(.mdc-tab--active):after {
625
642
  content: "";
626
643
  display: block;
@@ -660,4 +677,16 @@
660
677
  }
661
678
  .mdc-tab--active:after {
662
679
  right: -0.75rem;
680
+ }
681
+ .mdc-tab--active .mdc-ripple-upgraded--background-focused:before {
682
+ background-color: transparent;
683
+ transition: background-color 1s ease;
684
+ }
685
+
686
+ .mdc-tab__content {
687
+ gap: 0.375rem;
688
+ }
689
+
690
+ .mdc-tab__text-label {
691
+ padding-left: 0 !important;
663
692
  }
@@ -134,7 +134,7 @@ export function createCustomComponent(cell, column, value, pool) {
134
134
  * @param {HTMLElement} element the custom element
135
135
  * @param {object} props object of properties and event listeners
136
136
  */
137
- function setElementProperties(element, props) {
137
+ export function setElementProperties(element, props) {
138
138
  const properties = pickBy(props, negate(isEventListener));
139
139
  Object.assign(element, properties);
140
140
  const listeners = pickBy(props, isEventListener);
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Contains a set of selected data objects with methods for adding and removing
3
+ * items to the selection by referring to them by their index/position.
4
+ * Maintains a memory of the last toggled item which can be used to select or
5
+ * deselect a range of items between the last toggled item and a given item.
6
+ */
7
+ export class Selection {
8
+ /**
9
+ * Creates an instance of the Selection class.
10
+ * The provided function `getDataByIndex` is used to provide data for the
11
+ * selected items when selection is toggled by using the item index,
12
+ * which can be the row position in a table.
13
+ *
14
+ * @param {Function} getDataByIndex A function that returns the data at the given index
15
+ */
16
+ constructor(getDataByIndex) {
17
+ this.getDataByIndex = getDataByIndex;
18
+ this.toggleRange = (fromIndex, toIndex) => {
19
+ const select = !this.selectedItems.has(this.getDataByIndex(toIndex));
20
+ const lowerBound = Math.min(fromIndex, toIndex);
21
+ const upperBound = Math.max(fromIndex, toIndex);
22
+ const updatedIndexes = [];
23
+ const updatedItems = [];
24
+ for (let index = lowerBound; index <= upperBound; index++) {
25
+ const data = this.getDataByIndex(index);
26
+ if (!data) {
27
+ continue;
28
+ }
29
+ const isSelected = this.selectedItems.has(data);
30
+ if (isSelected === select) {
31
+ continue;
32
+ }
33
+ if (select) {
34
+ this.selectedItems.add(data);
35
+ }
36
+ else {
37
+ this.selectedItems.delete(data);
38
+ }
39
+ updatedIndexes.push(index);
40
+ updatedItems.push(data);
41
+ }
42
+ this.lastToggledIndex = toIndex;
43
+ return {
44
+ selected: select,
45
+ items: updatedItems,
46
+ indexes: updatedIndexes,
47
+ };
48
+ };
49
+ this.clear();
50
+ }
51
+ /**
52
+ * @returns {number} The size of the selection
53
+ */
54
+ get size() {
55
+ return this.selectedItems.size;
56
+ }
57
+ /**
58
+ * @returns {any[]} The selected items
59
+ */
60
+ get items() {
61
+ return Array.from(this.selectedItems);
62
+ }
63
+ /**
64
+ * @param {any[]} items The selected items
65
+ */
66
+ set items(items) {
67
+ this.selectedItems = new Set(items);
68
+ this.lastToggledIndex = -1;
69
+ }
70
+ /**
71
+ * Checks whether the given item exist in the selection
72
+ *
73
+ * @param {any} data The data to look up
74
+ * @returns {boolean} `true` if the given data exist in the selection, otherwise `false`
75
+ */
76
+ has(data) {
77
+ return this.selectedItems.has(data);
78
+ }
79
+ /**
80
+ * Toggles the item at the given index in the selection
81
+ *
82
+ * @param {number} index The index of the item to toggle
83
+ * @returns {SelectionChangeSet} The changes made to the selection
84
+ */
85
+ toggleSelection(index) {
86
+ return this.toggleRange(index, index);
87
+ }
88
+ /**
89
+ * Toggles the items from the last toggled index to the given index in the selection.
90
+ * The toggled items will be toggled as the item at the given index no matter
91
+ * their current state in the selection.
92
+ * Initially, when no last toggled index exist, this function behaves like
93
+ * `toggleSelection`.
94
+ *
95
+ * @param {number} index The index of the item to toggle
96
+ * @returns {SelectionChangeSet} The changes made to the selection
97
+ */
98
+ toggleSelectionFromLastIndex(index) {
99
+ if (this.lastToggledIndex < 0) {
100
+ return this.toggleSelection(index);
101
+ }
102
+ return this.toggleRange(this.lastToggledIndex, index);
103
+ }
104
+ /**
105
+ * Clears the current selection and resets last toggled index
106
+ */
107
+ clear() {
108
+ this.selectedItems = new Set();
109
+ this.lastToggledIndex = -1;
110
+ }
111
+ }
@@ -0,0 +1,125 @@
1
+ import { setElementProperties } from './columns';
2
+ import { Selection } from './selection';
3
+ import { isEqual } from 'lodash-es';
4
+ const LIMEL_CHECKBOX = 'limel-checkbox';
5
+ /**
6
+ * Provides row selection to Tabulator with shift-click support for range selections
7
+ */
8
+ export class TableSelection {
9
+ /**
10
+ * Creates an instance of the TableSelection class
11
+ *
12
+ * @param {Function} getTable Function that returns the Tabulator instance
13
+ * @param {ElementPool} pool The element pool used to cache the checkbox components
14
+ * @param {EventEmitter<object[]>} selectEvent The event emitter to use when checkboxes are toggled
15
+ */
16
+ constructor(getTable, pool, selectEvent) {
17
+ this.getTable = getTable;
18
+ this.pool = pool;
19
+ this.selectEvent = selectEvent;
20
+ /**
21
+ * Tabulator cell click handler that updates the selection for the clicked
22
+ * row and toggles the selection from the last clicked row if the shift key
23
+ * is pressed down.
24
+ *
25
+ * @param {PointerEvent} ev The pointer event
26
+ * @param {Tabulator.CellComponent} cell The clicked cell component
27
+ */
28
+ this.rowSelectorCellClick = (ev, cell) => {
29
+ ev.stopPropagation();
30
+ ev.preventDefault();
31
+ const clickedRow = cell.getRow();
32
+ const rowPosition = clickedRow.getPosition(true);
33
+ if (ev.shiftKey) {
34
+ this.updateRowSelectors(this.selection.toggleSelectionFromLastIndex(rowPosition));
35
+ }
36
+ else {
37
+ this.updateRowSelectors(this.selection.toggleSelection(rowPosition));
38
+ }
39
+ this.selectEvent.emit(this.selection.items);
40
+ };
41
+ this.updateRowSelectors = (changeSet) => {
42
+ changeSet.indexes
43
+ .map(this.getRowByIndex)
44
+ .forEach((row) => this.updateRowSelector(row, changeSet.selected));
45
+ };
46
+ this.updateRowSelector = (row, checked) => {
47
+ const cell = row.getCells()[0];
48
+ if (cell) {
49
+ const checkBox = cell.getElement().querySelector(LIMEL_CHECKBOX);
50
+ checkBox.checked = checked;
51
+ }
52
+ };
53
+ this.getActiveRows = () => {
54
+ const table = this.getTable();
55
+ if (!table) {
56
+ return [];
57
+ }
58
+ return table.getRows('active');
59
+ };
60
+ this.getRowByIndex = (index) => {
61
+ return this.getTable().getRowFromPosition(index, true);
62
+ };
63
+ this.selection = new Selection((index) => this.getRowByIndex(index).getData());
64
+ }
65
+ /**
66
+ * @returns {boolean} Returns `true` when the selection is non-empty, otherwise `false`
67
+ */
68
+ get hasSelection() {
69
+ return this.selection.size > 0;
70
+ }
71
+ /**
72
+ * Clears the selection
73
+ */
74
+ clear() {
75
+ this.selection.clear();
76
+ }
77
+ /**
78
+ * Sets the selected items
79
+ *
80
+ * @param {any[]} data The selected items
81
+ */
82
+ setSelection(data) {
83
+ if (isEqual(this.selection.items, data)) {
84
+ return;
85
+ }
86
+ this.selection.items = data;
87
+ const rows = this.getActiveRows();
88
+ rows.forEach((row) => this.updateRowSelector(row, this.selection.has(row.getData())));
89
+ }
90
+ /**
91
+ * Prepends a checkbox column used for row selection to the given column definitions
92
+ *
93
+ * @param {Tabulator.ColumnDefinition[]} columnDefinitions The column definition for the table
94
+ * @returns {Tabulator.ColumnDefinition[]} The column definitions with the checkbox column prepended to it
95
+ */
96
+ getColumnDefinitions(columnDefinitions) {
97
+ return [this.getRowSelectorColumnDefinition(), ...columnDefinitions];
98
+ }
99
+ getRowSelectorColumnDefinition() {
100
+ return {
101
+ title: '',
102
+ formatter: this.getRowSelectorFormatter(),
103
+ cellClick: this.rowSelectorCellClick,
104
+ headerClick: this.headerClick,
105
+ headerSort: false,
106
+ cssClass: 'limel-table--row-selector',
107
+ resizable: false,
108
+ htmlOutput: false,
109
+ clipboard: false,
110
+ };
111
+ }
112
+ headerClick(ev) {
113
+ ev.stopPropagation();
114
+ }
115
+ getRowSelectorFormatter() {
116
+ return (cell) => {
117
+ const element = this.pool.get(LIMEL_CHECKBOX);
118
+ setElementProperties(element, {
119
+ checked: this.selection.has(cell.getData()),
120
+ });
121
+ element.style.display = 'inline-block';
122
+ return element;
123
+ };
124
+ }
125
+ }