@redvars/peacock 3.2.10 → 3.3.1

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 (242) hide show
  1. package/dist/{PeacockComponent-CxJc63xj.js → IndividualComponent-tDnXrOLV.js} +3 -3
  2. package/dist/IndividualComponent-tDnXrOLV.js.map +1 -0
  3. package/dist/assets/components.css +1 -1
  4. package/dist/assets/components.css.map +1 -1
  5. package/dist/assets/styles.css +1 -1
  6. package/dist/assets/styles.css.map +1 -1
  7. package/dist/button-group-DA7xoziD.js +292 -0
  8. package/dist/button-group-DA7xoziD.js.map +1 -0
  9. package/dist/button-group.js +6 -107
  10. package/dist/button-group.js.map +1 -1
  11. package/dist/{button-DaL4va7Q.js → button-trIfcqC7.js} +21 -35
  12. package/dist/button-trIfcqC7.js.map +1 -0
  13. package/dist/button.js +5 -5
  14. package/dist/chart-donut.js +307 -0
  15. package/dist/chart-donut.js.map +1 -0
  16. package/dist/chart-doughnut.js +307 -0
  17. package/dist/chart-doughnut.js.map +1 -0
  18. package/dist/chart-pie.js +259 -0
  19. package/dist/chart-pie.js.map +1 -0
  20. package/dist/{class-map-BvQRv7eW.js → class-map-hJdvjl-W.js} +9 -3
  21. package/dist/class-map-hJdvjl-W.js.map +1 -0
  22. package/dist/clock.js +5 -6
  23. package/dist/clock.js.map +1 -1
  24. package/dist/code-editor.js +38 -25
  25. package/dist/code-editor.js.map +1 -1
  26. package/dist/code-highlighter.js +10 -14
  27. package/dist/code-highlighter.js.map +1 -1
  28. package/dist/custom-elements-jsdocs.json +8144 -3654
  29. package/dist/custom-elements.json +7925 -3901
  30. package/dist/{dispatch-event-utils-vbdiOSeC.js → dispatch-event-utils-B4odODQf.js} +2 -15
  31. package/dist/dispatch-event-utils-B4odODQf.js.map +1 -0
  32. package/dist/index.js +13 -10
  33. package/dist/index.js.map +1 -1
  34. package/dist/number-counter.js +12 -10
  35. package/dist/number-counter.js.map +1 -1
  36. package/dist/{observe-theme-change-NneLARW8.js → observe-theme-change-BISF-Gl5.js} +2 -2
  37. package/dist/{observe-theme-change-NneLARW8.js.map → observe-theme-change-BISF-Gl5.js.map} +1 -1
  38. package/dist/peacock-loader.js +94 -502
  39. package/dist/peacock-loader.js.map +1 -1
  40. package/dist/query-QBcUV-L_.js +15 -0
  41. package/dist/query-QBcUV-L_.js.map +1 -0
  42. package/dist/src/IndividualComponent.d.ts +1 -0
  43. package/dist/src/accordion/{accordion-item/accordion-item.d.ts → accordion-item.d.ts} +5 -4
  44. package/dist/src/accordion/{accordion/accordion.d.ts → accordion.d.ts} +6 -6
  45. package/dist/src/accordion/{accordion-item/index.d.ts → index.d.ts} +1 -0
  46. package/dist/src/avatar/avatar.d.ts +2 -2
  47. package/dist/src/badge/badge.d.ts +2 -2
  48. package/dist/src/breadcrumb/breadcrumb/breadcrumb.d.ts +9 -8
  49. package/dist/src/breadcrumb/breadcrumb-item/breadcrumb-item.d.ts +4 -3
  50. package/dist/src/button/button/button.d.ts +2 -2
  51. package/dist/src/button/button-group/button-group.d.ts +9 -5
  52. package/dist/src/button/icon-button/icon-button.d.ts +2 -2
  53. package/dist/src/chart-donut/chart-donut.d.ts +53 -0
  54. package/dist/src/chart-donut/index.d.ts +1 -0
  55. package/dist/src/chart-doughnut/chart-doughnut.d.ts +53 -0
  56. package/dist/src/chart-doughnut/index.d.ts +1 -0
  57. package/dist/src/chart-pie/chart-pie.d.ts +50 -0
  58. package/dist/src/chart-pie/index.d.ts +1 -0
  59. package/dist/src/checkbox/checkbox.d.ts +3 -6
  60. package/dist/src/chip/chip/chip.d.ts +4 -4
  61. package/dist/src/chip/tag/tag.d.ts +3 -3
  62. package/dist/src/clock/clock.d.ts +3 -4
  63. package/dist/src/code-editor/code-editor.d.ts +13 -10
  64. package/dist/src/code-highlighter/code-highlighter.d.ts +4 -7
  65. package/dist/src/container/container.d.ts +6 -11
  66. package/dist/src/date-picker/date-picker.d.ts +3 -3
  67. package/dist/src/divider/divider.d.ts +2 -2
  68. package/dist/src/elevation/elevation.d.ts +2 -2
  69. package/dist/src/empty-state/empty-state.d.ts +9 -2
  70. package/dist/src/field/field.d.ts +17 -0
  71. package/dist/src/focus-ring/focus-ring.d.ts +1 -1
  72. package/dist/src/icon/icon.d.ts +2 -2
  73. package/dist/src/image/image.d.ts +4 -12
  74. package/dist/src/index.d.ts +9 -1
  75. package/dist/src/input/input.d.ts +2 -2
  76. package/dist/src/link/link.d.ts +4 -5
  77. package/dist/src/menu/index.d.ts +3 -0
  78. package/dist/src/menu/menu/MenuSurfaceController.d.ts +18 -0
  79. package/dist/src/menu/menu/menu.d.ts +66 -8
  80. package/dist/src/menu/menu-item/menu-item.d.ts +24 -5
  81. package/dist/src/menu/sub-menu/sub-menu.d.ts +36 -0
  82. package/dist/src/number-counter/number-counter.d.ts +9 -7
  83. package/dist/src/number-field/number-field.d.ts +1 -1
  84. package/dist/src/pagination/index.d.ts +1 -0
  85. package/dist/src/pagination/pagination.d.ts +38 -0
  86. package/dist/src/popover/PopoverController.d.ts +4 -1
  87. package/dist/src/popover/index.d.ts +1 -1
  88. package/dist/src/progress/circular-progress/circular-progress.d.ts +3 -3
  89. package/dist/src/progress/linear-progress/linear-progress.d.ts +3 -3
  90. package/dist/src/ripple/ripple.d.ts +60 -4
  91. package/dist/src/skeleton/skeleton.d.ts +6 -5
  92. package/dist/src/slider/index.d.ts +1 -0
  93. package/dist/src/slider/slider.d.ts +52 -0
  94. package/dist/src/spinner/spinner.d.ts +2 -2
  95. package/dist/src/switch/switch.d.ts +2 -2
  96. package/dist/src/table/index.d.ts +1 -0
  97. package/dist/src/table/table.d.ts +110 -0
  98. package/dist/src/tabs/index.d.ts +4 -0
  99. package/dist/src/tabs/tab-group.d.ts +45 -0
  100. package/dist/src/tabs/tab-panel.d.ts +22 -0
  101. package/dist/src/tabs/tab.d.ts +59 -0
  102. package/dist/src/tabs/tabs.d.ts +29 -0
  103. package/dist/src/textarea/textarea.d.ts +3 -3
  104. package/dist/src/time-picker/time-picker.d.ts +3 -3
  105. package/dist/src/{popover/tooltip → tooltip}/tooltip.d.ts +4 -3
  106. package/dist/src/tree-view/index.d.ts +2 -0
  107. package/dist/src/tree-view/tree-node.d.ts +69 -0
  108. package/dist/src/tree-view/tree-view.d.ts +40 -0
  109. package/dist/src/tree-view/wc-tree-view.d.ts +6 -0
  110. package/dist/{style-map-B8xgVEc9.js → style-map-CfNHEkQp.js} +2 -2
  111. package/dist/{style-map-B8xgVEc9.js.map → style-map-CfNHEkQp.js.map} +1 -1
  112. package/dist/test/icon.test.d.ts +1 -1
  113. package/dist/test/menu.test.d.ts +1 -0
  114. package/dist/test/sub-menu.test.d.ts +1 -0
  115. package/dist/test/tree-view.test.d.ts +1 -0
  116. package/dist/transform-DRuHEvar.js +3312 -0
  117. package/dist/transform-DRuHEvar.js.map +1 -0
  118. package/dist/{image-v3BujlY5.js → tree-view-CLolVlU0.js} +4088 -672
  119. package/dist/tree-view-CLolVlU0.js.map +1 -0
  120. package/dist/tsconfig.tsbuildinfo +1 -1
  121. package/dist/{unsafe-html-B-dV3Jps.js → unsafe-html-CV6Je6HL.js} +2 -2
  122. package/dist/{unsafe-html-B-dV3Jps.js.map → unsafe-html-CV6Je6HL.js.map} +1 -1
  123. package/package.json +3 -1
  124. package/readme.md +40 -40
  125. package/src/{PeacockComponent.ts → IndividualComponent.ts} +1 -1
  126. package/src/accordion/{accordion-item/accordion-item.scss → accordion-item.scss} +1 -1
  127. package/src/accordion/{accordion-item/accordion-item.ts → accordion-item.ts} +7 -6
  128. package/src/accordion/{accordion/accordion.scss → accordion.scss} +2 -1
  129. package/src/accordion/{accordion/accordion.ts → accordion.ts} +6 -6
  130. package/src/accordion/{accordion-item/index.ts → index.ts} +2 -0
  131. package/src/avatar/avatar.ts +2 -2
  132. package/src/badge/badge.ts +2 -2
  133. package/src/breadcrumb/breadcrumb/breadcrumb.ts +10 -8
  134. package/src/breadcrumb/breadcrumb-item/breadcrumb-item.ts +4 -3
  135. package/src/button/BaseButton.ts +1 -1
  136. package/src/button/button/button.scss +9 -23
  137. package/src/button/button/button.ts +8 -8
  138. package/src/button/button-group/button-group.ts +13 -7
  139. package/src/button/icon-button/icon-button.ts +8 -8
  140. package/src/chart-donut/chart-donut.scss +37 -0
  141. package/src/chart-donut/chart-donut.ts +287 -0
  142. package/src/chart-donut/demo/index.html +51 -0
  143. package/src/chart-donut/index.ts +1 -0
  144. package/src/chart-doughnut/chart-donut.scss +37 -0
  145. package/src/chart-doughnut/chart-doughnut.ts +287 -0
  146. package/src/chart-doughnut/demo/index.html +51 -0
  147. package/src/chart-doughnut/index.ts +1 -0
  148. package/src/chart-pie/chart-pie.scss +27 -0
  149. package/src/chart-pie/chart-pie.ts +256 -0
  150. package/src/chart-pie/demo/index.html +51 -0
  151. package/src/chart-pie/index.ts +1 -0
  152. package/src/checkbox/checkbox.ts +3 -6
  153. package/src/chip/chip/chip.ts +6 -6
  154. package/src/chip/tag/tag.ts +6 -6
  155. package/src/clock/clock.ts +5 -6
  156. package/src/code-editor/code-editor.scss +3 -5
  157. package/src/code-editor/code-editor.ts +32 -16
  158. package/src/code-highlighter/code-highlighter.ts +8 -11
  159. package/src/container/container.ts +6 -11
  160. package/src/date-picker/date-picker.ts +7 -7
  161. package/src/divider/divider.scss +2 -2
  162. package/src/divider/divider.ts +2 -2
  163. package/src/elevation/elevation.ts +2 -2
  164. package/src/empty-state/empty-state.scss +1 -1
  165. package/src/empty-state/empty-state.ts +10 -3
  166. package/src/field/field.scss +4 -4
  167. package/src/field/field.ts +19 -2
  168. package/src/focus-ring/focus-ring.scss +2 -1
  169. package/src/focus-ring/focus-ring.ts +1 -1
  170. package/src/icon/icon.ts +2 -2
  171. package/src/icon/p-icon.ts +1 -1
  172. package/src/image/image.ts +4 -12
  173. package/src/index.ts +11 -3
  174. package/src/input/input.ts +6 -6
  175. package/src/link/link.ts +4 -5
  176. package/src/menu/index.ts +3 -0
  177. package/src/menu/menu/MenuSurfaceController.ts +61 -0
  178. package/src/menu/{menu-list/menu-list.scss → menu/menu.scss} +19 -4
  179. package/src/menu/menu/menu.ts +401 -77
  180. package/src/menu/menu-item/menu-item-colors.scss +2 -2
  181. package/src/menu/menu-item/menu-item.ts +128 -37
  182. package/src/menu/sub-menu/sub-menu.scss +7 -0
  183. package/src/menu/sub-menu/sub-menu.ts +243 -0
  184. package/src/number-counter/demo/index.html +1 -1
  185. package/src/number-counter/number-counter.ts +11 -9
  186. package/src/number-field/number-field.ts +7 -7
  187. package/src/pagination/index.ts +1 -0
  188. package/src/pagination/pagination.scss +59 -0
  189. package/src/pagination/pagination.ts +135 -0
  190. package/src/peacock-loader.ts +92 -51
  191. package/src/popover/PopoverController.ts +13 -7
  192. package/src/popover/index.ts +1 -1
  193. package/src/progress/circular-progress/circular-progress.scss +1 -1
  194. package/src/progress/circular-progress/circular-progress.ts +3 -3
  195. package/src/progress/linear-progress/linear-progress.ts +3 -3
  196. package/src/ripple/ripple.ts +478 -94
  197. package/src/skeleton/skeleton.ts +6 -5
  198. package/src/slider/index.ts +1 -0
  199. package/src/slider/slider.scss +130 -0
  200. package/src/slider/slider.ts +178 -0
  201. package/src/spinner/spinner.ts +2 -2
  202. package/src/switch/switch.ts +4 -4
  203. package/src/table/index.ts +1 -0
  204. package/src/table/table.scss +174 -0
  205. package/src/table/table.ts +475 -0
  206. package/src/tabs/index.ts +4 -0
  207. package/src/tabs/tab-group.scss +10 -0
  208. package/src/tabs/tab-group.ts +143 -0
  209. package/src/tabs/tab-panel.scss +12 -0
  210. package/src/tabs/tab-panel.ts +29 -0
  211. package/src/tabs/tab.scss +157 -0
  212. package/src/tabs/tab.ts +243 -0
  213. package/src/tabs/tabs.scss +19 -0
  214. package/src/tabs/tabs.ts +66 -0
  215. package/src/text/text.css-component.scss +6 -3
  216. package/src/textarea/textarea.ts +5 -5
  217. package/src/time-picker/time-picker.ts +7 -7
  218. package/src/{popover/tooltip → tooltip}/tooltip.scss +17 -14
  219. package/src/{popover/tooltip → tooltip}/tooltip.ts +12 -10
  220. package/src/tree-view/demo/index.html +57 -0
  221. package/src/tree-view/index.ts +2 -0
  222. package/src/tree-view/tree-node.scss +101 -0
  223. package/src/tree-view/tree-node.ts +268 -0
  224. package/src/tree-view/tree-view.scss +12 -0
  225. package/src/tree-view/tree-view.ts +182 -0
  226. package/src/tree-view/wc-tree-view.ts +9 -0
  227. package/dist/PeacockComponent-CxJc63xj.js.map +0 -1
  228. package/dist/button-DaL4va7Q.js.map +0 -1
  229. package/dist/class-map-BvQRv7eW.js.map +0 -1
  230. package/dist/dispatch-event-utils-vbdiOSeC.js.map +0 -1
  231. package/dist/image-v3BujlY5.js.map +0 -1
  232. package/dist/src/PeacockComponent.d.ts +0 -1
  233. package/dist/src/accordion/accordion/index.d.ts +0 -1
  234. package/dist/src/avatar/p-avatar.d.ts +0 -3
  235. package/dist/src/badge/p-badge.d.ts +0 -3
  236. package/dist/src/menu/menu-list/menu-list.d.ts +0 -7
  237. package/dist/state-B09bP3XH.js +0 -10
  238. package/dist/state-B09bP3XH.js.map +0 -1
  239. package/src/accordion/accordion/index.ts +0 -1
  240. package/src/avatar/p-avatar.ts +0 -5
  241. package/src/badge/p-badge.ts +0 -5
  242. package/src/menu/menu-list/menu-list.ts +0 -33
@@ -0,0 +1,130 @@
1
+ :host {
2
+ --_track-height: 4px;
3
+ --_thumb-size: 20px;
4
+ --thumb-half: 10px;
5
+ --_active-track-color: var(--color-primary);
6
+ --_inactive-track-color: var(--color-secondary-container);
7
+ --_thumb-color: var(--color-primary);
8
+ --_label-color: var(--color-primary);
9
+ --_label-text-color: var(--color-on-primary);
10
+
11
+ display: inline-block;
12
+ width: 100%;
13
+ min-width: 200px;
14
+ vertical-align: middle;
15
+ touch-action: none; // Prevent scrolling while dragging
16
+ }
17
+
18
+ .slider-container {
19
+ position: relative;
20
+ display: flex;
21
+ align-items: center;
22
+ width: 100%;
23
+ height: 48px; // Touch target size
24
+ cursor: pointer;
25
+
26
+ &.disabled {
27
+ pointer-events: none;
28
+ opacity: 0.38;
29
+ }
30
+ }
31
+
32
+ .track {
33
+ position: absolute;
34
+ width: 100%;
35
+ height: var(--_track-height);
36
+ background-color: var(--_inactive-track-color);
37
+ border-radius: var(--_track-height);
38
+ overflow: hidden;
39
+ pointer-events: none;
40
+
41
+ .track-active {
42
+ position: absolute;
43
+ height: 100%;
44
+ background-color: var(--_active-track-color);
45
+ transition: width 0.1s ease-out;
46
+ will-change: width;
47
+ }
48
+ }
49
+
50
+ .thumb {
51
+ position: absolute;
52
+ top: 50%;
53
+ transform: translateY(-50%);
54
+ width: var(--_thumb-size);
55
+ height: var(--_thumb-size);
56
+ background-color: var(--_thumb-color);
57
+ border-radius: 50%;
58
+ box-shadow: var(--md-sys-elevation-1);
59
+ outline: none;
60
+ cursor: grab;
61
+ transition: left 0.05s cubic-bezier(0.25, 0.46, 0.45, 0.94), box-shadow 0.2s ease;
62
+ will-change: left;
63
+ z-index: 2;
64
+
65
+ display: flex;
66
+ align-items: center;
67
+ justify-content: center;
68
+
69
+ // State Layer (Hover/Focus halo)
70
+ &::before {
71
+ content: '';
72
+ position: absolute;
73
+ top: 50%;
74
+ left: 50%;
75
+ width: 40px;
76
+ height: 40px;
77
+ transform: translate(-50%, -50%);
78
+ border-radius: 50%;
79
+ background-color: var(--_thumb-color);
80
+ opacity: 0;
81
+ transition: opacity 0.2s;
82
+ }
83
+
84
+ &:hover::before { opacity: 0.08; }
85
+ &:focus-visible::before { opacity: 0.12; }
86
+ &:active {
87
+ cursor: grabbing;
88
+ box-shadow: var(--md-sys-elevation-5);
89
+ }
90
+
91
+ // Disable transition while dragging
92
+ &.dragging {
93
+ transition: none;
94
+ }
95
+ }
96
+
97
+ // Value Label (Tooltip)
98
+ .value-label {
99
+ position: absolute;
100
+ bottom: 100%;
101
+ margin-bottom: 8px;
102
+ padding: 4px 8px;
103
+ background-color: var(--_label-color);
104
+ color: var(--_label-text-color);
105
+ border-radius: 4px;
106
+ font-size: 12px;
107
+ white-space: nowrap;
108
+ opacity: 0;
109
+ transform: translateY(4px);
110
+ transition: opacity 0.1s, transform 0.1s;
111
+ pointer-events: none;
112
+
113
+ // Tooltip triangle
114
+ &::after {
115
+ content: '';
116
+ position: absolute;
117
+ top: 100%;
118
+ left: 50%;
119
+ transform: translateX(-50%);
120
+ border: 6px solid transparent;
121
+ border-top-color: var(--_label-color);
122
+ }
123
+ }
124
+
125
+ .slider-container.dragging .value-label,
126
+ .slider-container:active .value-label,
127
+ .thumb:focus-visible .value-label {
128
+ opacity: 1;
129
+ transform: translateY(0);
130
+ }
@@ -0,0 +1,178 @@
1
+ import { LitElement, html } from 'lit';
2
+ import { property, state, query } from 'lit/decorators.js';
3
+ import { styleMap } from 'lit/directives/style-map.js';
4
+ import sliderStyles from './slider.scss';
5
+
6
+ /**
7
+ * @label Slider
8
+ * @tag wc-slider
9
+ * @rawTag slider
10
+ *
11
+ * @summary Sliders allow users to make selections from a range of values.
12
+ *
13
+ * @fires {CustomEvent} input - Dispatched when the slider value changes during interaction.
14
+ * @fires {CustomEvent} change - Dispatched when the slider interaction ends.
15
+ *
16
+ * @example
17
+ * ```html
18
+ * <wc-slider min="0" max="100" value="50"></wc-slider>
19
+ * ```
20
+ */
21
+ export class Slider extends LitElement {
22
+ static styles = [sliderStyles];
23
+
24
+ /**
25
+ * The minimum value of the slider.
26
+ */
27
+ @property({ type: Number }) min = 0;
28
+
29
+ /**
30
+ * The maximum value of the slider.
31
+ */
32
+ @property({ type: Number }) max = 100;
33
+
34
+ /**
35
+ * The current value of the slider.
36
+ */
37
+ @property({ type: Number, reflect: true }) value = 50;
38
+
39
+ /**
40
+ * The step increment for the slider.
41
+ */
42
+ @property({ type: Number }) step = 1;
43
+
44
+ /**
45
+ * Whether the slider is disabled.
46
+ */
47
+ @property({ type: Boolean, reflect: true }) disabled = false;
48
+
49
+ /**
50
+ * Whether to show labels on the slider.
51
+ */
52
+ @property({ type: Boolean }) labeled = true;
53
+
54
+ @state() private isDragging = false;
55
+
56
+ @query('.slider-container') private container!: HTMLElement;
57
+ @query('.thumb') private thumbElement!: HTMLElement;
58
+
59
+ private handleInput(event: MouseEvent | TouchEvent) {
60
+ if (this.disabled) return;
61
+
62
+ const rect = this.container.getBoundingClientRect();
63
+ const clientX = 'touches' in event ? event.touches[0].clientX : (event as MouseEvent).clientX;
64
+
65
+ // Calculate percentage relative to track width
66
+ let percentage = (clientX - rect.left) / rect.width;
67
+ percentage = Math.max(0, Math.min(1, percentage));
68
+
69
+ const rawValue = this.min + percentage * (this.max - this.min);
70
+ const steppedValue = Math.round(rawValue / this.step) * this.step;
71
+
72
+ const oldValue = this.value;
73
+ this.value = Math.max(this.min, Math.min(this.max, steppedValue));
74
+
75
+ if (oldValue !== this.value) {
76
+ this.dispatchEvent(new CustomEvent('input', { detail: { value: this.value }, bubbles: true, composed: true }));
77
+ }
78
+ }
79
+
80
+ private onMouseDown(e: MouseEvent | TouchEvent) {
81
+ if (this.disabled) return;
82
+
83
+ e.preventDefault();
84
+ this.isDragging = true;
85
+
86
+ // Add dragging class for CSS state
87
+ this.container.classList.add('dragging');
88
+ this.thumbElement.classList.add('dragging');
89
+
90
+ this.handleInput(e);
91
+
92
+ window.addEventListener('mousemove', this.onMouseMove);
93
+ window.addEventListener('mouseup', this.onMouseUp);
94
+ window.addEventListener('touchmove', this.onMouseMove, { passive: false });
95
+ window.addEventListener('touchend', this.onMouseUp);
96
+ window.addEventListener('touchcancel', this.onMouseUp);
97
+ }
98
+
99
+ private onMouseMove = (e: MouseEvent | TouchEvent) => {
100
+ if (this.isDragging) {
101
+ e.preventDefault();
102
+ this.handleInput(e);
103
+ }
104
+ };
105
+
106
+ private onMouseUp = () => {
107
+ if (!this.isDragging) return;
108
+
109
+ this.isDragging = false;
110
+ this.container.classList.remove('dragging');
111
+ this.thumbElement.classList.remove('dragging');
112
+
113
+ this.dispatchEvent(new CustomEvent('change', { detail: { value: this.value }, bubbles: true, composed: true }));
114
+
115
+ window.removeEventListener('mousemove', this.onMouseMove);
116
+ window.removeEventListener('mouseup', this.onMouseUp);
117
+ window.removeEventListener('touchmove', this.onMouseMove);
118
+ window.removeEventListener('touchend', this.onMouseUp);
119
+ window.removeEventListener('touchcancel', this.onMouseUp);
120
+ };
121
+
122
+ private handleKeyDown(e: KeyboardEvent) {
123
+ if (this.disabled) return;
124
+
125
+ const increment = e.shiftKey ? this.step * 10 : this.step;
126
+ let newValue = this.value;
127
+
128
+ if (e.key === 'ArrowRight' || e.key === 'ArrowUp') {
129
+ newValue = Math.min(this.max, this.value + increment);
130
+ e.preventDefault();
131
+ } else if (e.key === 'ArrowLeft' || e.key === 'ArrowDown') {
132
+ newValue = Math.max(this.min, this.value - increment);
133
+ e.preventDefault();
134
+ } else if (e.key === 'Home') {
135
+ newValue = this.min;
136
+ e.preventDefault();
137
+ } else if (e.key === 'End') {
138
+ newValue = this.max;
139
+ e.preventDefault();
140
+ }
141
+
142
+ if (newValue !== this.value) {
143
+ this.value = newValue;
144
+ this.dispatchEvent(new CustomEvent('input', { detail: { value: this.value }, bubbles: true, composed: true }));
145
+ this.dispatchEvent(new CustomEvent('change', { detail: { value: this.value }, bubbles: true, composed: true }));
146
+ }
147
+ }
148
+
149
+ render() {
150
+ const percentage = ((this.value - this.min) / (this.max - this.min)) * 100;
151
+
152
+ return html`
153
+ <div
154
+ class="slider-container ${this.disabled ? 'disabled' : ''}"
155
+ @mousedown=${this.onMouseDown}
156
+ @touchstart=${this.onMouseDown}
157
+ >
158
+ <div class="track">
159
+ <div class="track-active" style=${styleMap({ width: `${percentage}%` })}></div>
160
+ </div>
161
+
162
+ <div
163
+ class="thumb"
164
+ role="slider"
165
+ tabindex="${this.disabled ? -1 : 0}"
166
+ aria-valuemin=${this.min}
167
+ aria-valuemax=${this.max}
168
+ aria-valuenow=${this.value}
169
+ aria-disabled=${this.disabled}
170
+ style=${styleMap({ left: `calc(${percentage}% - var(--thumb-half))` })}
171
+ @keydown=${this.handleKeyDown}
172
+ >
173
+ ${this.labeled ? html`<div class="value-label">${this.value}</div>` : ''}
174
+ </div>
175
+ </div>
176
+ `;
177
+ }
178
+ }
@@ -4,7 +4,7 @@ import styles from './spinner.scss';
4
4
 
5
5
  /**
6
6
  * @label Spinner
7
- * @tag base-spinner
7
+ * @tag wc-spinner
8
8
  * @rawTag spinner
9
9
  * @summary A spinner component that animates a circular shape.
10
10
  * @cssprop --spinner-track-color - The color of the track.
@@ -13,7 +13,7 @@ import styles from './spinner.scss';
13
13
  *
14
14
  * @example
15
15
  * ```html
16
- * <base-spinner></base-spinner>
16
+ * <wc-spinner></wc-spinner>
17
17
  * ```
18
18
  */
19
19
  export class Spinner extends LitElement {
@@ -7,7 +7,7 @@ import BaseInput from '../input/BaseInput.js';
7
7
 
8
8
  /**
9
9
  * @label Switch
10
- * @tag base-switch
10
+ * @tag wc-switch
11
11
  * @rawTag switch
12
12
  *
13
13
  * @summary Captures boolean input with an on/off switch interaction.
@@ -27,7 +27,7 @@ import BaseInput from '../input/BaseInput.js';
27
27
  *
28
28
  * @example
29
29
  * ```html
30
- * <base-switch value="true"></base-switch>
30
+ * <wc-switch value="true"></wc-switch>
31
31
  * ```
32
32
  * @tags input, form
33
33
  */
@@ -213,8 +213,8 @@ export class Switch extends BaseInput {
213
213
  __renderIcon() {
214
214
  if (this.withIcon) {
215
215
  if (this.value)
216
- return html`<base-icon name="check" class="icon"></base-icon>`;
217
- return html`<base-icon name="close" class="icon"></base-icon>`;
216
+ return html`<wc-icon name="check" class="icon"></wc-icon>`;
217
+ return html`<wc-icon name="close" class="icon"></wc-icon>`;
218
218
  }
219
219
  return nothing;
220
220
  }
@@ -0,0 +1 @@
1
+ export { Table } from './table.js';
@@ -0,0 +1,174 @@
1
+ @use '../../scss/mixin';
2
+
3
+ @include mixin.base-styles;
4
+
5
+ :host {
6
+ display: block;
7
+ height: 100%;
8
+ min-height: 20em;
9
+ --table-border-color: var(--color-outline-variant);
10
+ --table-border: 1px solid var(--table-border-color);
11
+ --table-col-content-padding: var(--spacing-150, 0.75rem) var(--spacing-200, 1rem);
12
+ }
13
+
14
+ .table {
15
+ height: 100%;
16
+ display: flex;
17
+ flex-direction: column;
18
+ background: var(--color-surface, #fff);
19
+
20
+ @include mixin.get-typography-not-important('body-medium');
21
+
22
+ .table-scroll-container {
23
+ position: relative;
24
+ overflow: auto;
25
+ height: 100%;
26
+ }
27
+
28
+ .empty-table {
29
+ height: 80%;
30
+ display: flex;
31
+ align-items: center;
32
+ justify-content: center;
33
+
34
+ .empty-state {
35
+ width: 10rem;
36
+ }
37
+ }
38
+
39
+ wc-pagination {
40
+ border-top: 1px solid var(--table-border-color);
41
+ }
42
+
43
+ &.horizontal-scrolled {
44
+ .fixed-columns::after {
45
+ box-shadow: 10px 0 20px -20px var(--color-outline) inset;
46
+ content: ' ';
47
+ height: 100%;
48
+ position: absolute;
49
+ top: 0;
50
+ right: -20px;
51
+ width: 20px;
52
+ }
53
+ }
54
+ }
55
+
56
+ .row {
57
+ display: flex;
58
+ box-sizing: border-box;
59
+ width: max-content;
60
+ min-width: 100%;
61
+
62
+ .columns-container {
63
+ display: flex;
64
+ }
65
+
66
+ .col {
67
+ margin: 0;
68
+ color: var(--color-on-surface);
69
+ flex-shrink: 0;
70
+
71
+ .col-content {
72
+ display: flex;
73
+ align-items: center;
74
+ height: 100%;
75
+
76
+ .col-text {
77
+ padding: var(--table-col-content-padding);
78
+ flex: 1;
79
+ overflow: hidden;
80
+ white-space: nowrap;
81
+ text-overflow: ellipsis;
82
+ }
83
+
84
+ .col-template {
85
+ width: 100%;
86
+ }
87
+
88
+ .col-action {
89
+ --button-border-radius: 0;
90
+
91
+ &.has-focus {
92
+ z-index: 12;
93
+ }
94
+ }
95
+
96
+ .checkbox {
97
+ padding: 0 var(--spacing-100, 0.5rem);
98
+ }
99
+ }
100
+
101
+ &.center .col-content {
102
+ justify-content: center;
103
+ }
104
+
105
+ &:last-child {
106
+ flex: 1;
107
+ }
108
+ }
109
+
110
+ .fixed-columns {
111
+ position: sticky;
112
+ left: 0;
113
+ z-index: 1;
114
+ }
115
+
116
+ .scrollable-columns {
117
+ flex: 0 0 auto;
118
+ }
119
+ }
120
+
121
+ .header {
122
+ z-index: 2;
123
+ position: sticky;
124
+ top: 0;
125
+
126
+ @include mixin.get-typography-not-important('label-medium');
127
+
128
+ .col {
129
+ background: var(--color-surface-variant, #f4f4f4);
130
+
131
+ &.sort {
132
+ background: var(--color-secondary-container, #e8eaf6);
133
+ }
134
+ }
135
+ }
136
+
137
+ .body {
138
+ .row {
139
+ .col {
140
+ cursor: pointer;
141
+ background: var(--color-surface, #fff);
142
+ border-bottom: 1px solid var(--color-surface-variant, #f4f4f4);
143
+
144
+ &.col-checkbox .col-content {
145
+ border: 0;
146
+ }
147
+
148
+ .col-content {
149
+ border: 2px solid transparent;
150
+ border-bottom: 1px solid transparent;
151
+
152
+ .col-text {
153
+ text-wrap: wrap;
154
+ }
155
+ }
156
+
157
+ &:focus {
158
+ outline: none;
159
+ border-bottom-color: var(--color-primary);
160
+ z-index: 1;
161
+
162
+ .col-content {
163
+ border-color: var(--color-primary);
164
+ }
165
+ }
166
+ }
167
+
168
+ &:hover {
169
+ .col {
170
+ background-color: var(--color-surface-container-low, #f8f8f8);
171
+ }
172
+ }
173
+ }
174
+ }