@redvars/peacock 3.5.0 → 3.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (314) hide show
  1. package/dist/BaseButton-BNFAYn-S.js +219 -0
  2. package/dist/BaseButton-BNFAYn-S.js.map +1 -0
  3. package/dist/BaseHyperlinkMixin-BNuwbiEf.js +65 -0
  4. package/dist/BaseHyperlinkMixin-BNuwbiEf.js.map +1 -0
  5. package/dist/BaseInput-14YmcfK7.js +27 -0
  6. package/dist/BaseInput-14YmcfK7.js.map +1 -0
  7. package/dist/assets/components.css +1 -1
  8. package/dist/assets/components.css.map +1 -1
  9. package/dist/assets/styles.css +1 -1
  10. package/dist/assets/styles.css.map +1 -1
  11. package/dist/banner.js +14 -30
  12. package/dist/banner.js.map +1 -1
  13. package/dist/{button-DMN1dPAg.js → button-colors-Ccys3hvS.js} +5 -468
  14. package/dist/button-colors-Ccys3hvS.js.map +1 -0
  15. package/dist/button-group.js +228 -8
  16. package/dist/button-group.js.map +1 -1
  17. package/dist/button.js +294 -8
  18. package/dist/button.js.map +1 -1
  19. package/dist/calendar-column-view.js +634 -0
  20. package/dist/calendar-column-view.js.map +1 -0
  21. package/dist/calendar-event-BrQ_SEKD.js +199 -0
  22. package/dist/calendar-event-BrQ_SEKD.js.map +1 -0
  23. package/dist/calendar-month-view.js +376 -0
  24. package/dist/calendar-month-view.js.map +1 -0
  25. package/dist/calendar.js +339 -0
  26. package/dist/calendar.js.map +1 -0
  27. package/dist/canvas.js +361 -0
  28. package/dist/canvas.js.map +1 -0
  29. package/dist/card.js +18 -73
  30. package/dist/card.js.map +1 -1
  31. package/dist/cb-compound-expression.js +125 -0
  32. package/dist/cb-compound-expression.js.map +1 -0
  33. package/dist/cb-divider.js +150 -0
  34. package/dist/cb-divider.js.map +1 -0
  35. package/dist/cb-expression.js +75 -0
  36. package/dist/cb-expression.js.map +1 -0
  37. package/dist/cb-predicate.js +137 -0
  38. package/dist/cb-predicate.js.map +1 -0
  39. package/dist/chart-bar.js.map +1 -1
  40. package/dist/chart-doughnut.js +2 -2
  41. package/dist/chart-doughnut.js.map +1 -1
  42. package/dist/chart-pie.js +2 -2
  43. package/dist/chart-pie.js.map +1 -1
  44. package/dist/chart-stacked-bar.js.map +1 -1
  45. package/dist/code-editor.js +2 -1
  46. package/dist/code-editor.js.map +1 -1
  47. package/dist/code-highlighter.js +2 -1
  48. package/dist/code-highlighter.js.map +1 -1
  49. package/dist/condition-builder.js +58 -0
  50. package/dist/condition-builder.js.map +1 -0
  51. package/dist/custom-elements-jsdocs.json +10860 -5567
  52. package/dist/custom-elements.json +16180 -7996
  53. package/dist/dropdown-button.js +216 -0
  54. package/dist/dropdown-button.js.map +1 -0
  55. package/dist/event-manager-D-QCmUgR.js +113 -0
  56. package/dist/event-manager-D-QCmUgR.js.map +1 -0
  57. package/dist/fab.js +421 -9
  58. package/dist/fab.js.map +1 -1
  59. package/dist/flow-designer-dZnLJOQT.js +1656 -0
  60. package/dist/flow-designer-dZnLJOQT.js.map +1 -0
  61. package/dist/flow-designer-node-XMe-jlKg.js +548 -0
  62. package/dist/flow-designer-node-XMe-jlKg.js.map +1 -0
  63. package/dist/flow-designer-node.js +4 -0
  64. package/dist/flow-designer-node.js.map +1 -0
  65. package/dist/flow-designer.js +16 -0
  66. package/dist/flow-designer.js.map +1 -0
  67. package/dist/html-editor.js +358 -0
  68. package/dist/html-editor.js.map +1 -0
  69. package/dist/icon-button-CK1ZuE-2.js +247 -0
  70. package/dist/icon-button-CK1ZuE-2.js.map +1 -0
  71. package/dist/index.js +31 -8
  72. package/dist/index.js.map +1 -1
  73. package/dist/{is-dark-mode-DicqGkCJ.js → is-dark-mode-DOcaw4Yq.js} +2 -27
  74. package/dist/is-dark-mode-DOcaw4Yq.js.map +1 -0
  75. package/dist/modal.js +418 -0
  76. package/dist/modal.js.map +1 -0
  77. package/dist/{select-4pl4XBj7.js → navigation-rail-DyO0oAZU.js} +2000 -2767
  78. package/dist/navigation-rail-DyO0oAZU.js.map +1 -0
  79. package/dist/notification-manager.js +268 -0
  80. package/dist/notification-manager.js.map +1 -0
  81. package/dist/notification.js +3 -2
  82. package/dist/notification.js.map +1 -1
  83. package/dist/peacock-loader.js +102 -14
  84. package/dist/peacock-loader.js.map +1 -1
  85. package/dist/popover-NC7b1lTq.js +1971 -0
  86. package/dist/popover-NC7b1lTq.js.map +1 -0
  87. package/dist/popover-content.js +125 -0
  88. package/dist/popover-content.js.map +1 -0
  89. package/dist/popover.js +4 -0
  90. package/dist/popover.js.map +1 -0
  91. package/dist/search.js +4 -0
  92. package/dist/search.js.map +1 -1
  93. package/dist/split-button.js +388 -0
  94. package/dist/split-button.js.map +1 -0
  95. package/dist/src/__controllers/floating-controller.d.ts +35 -0
  96. package/dist/src/__mixins/BaseButtonMixin.d.ts +20 -0
  97. package/dist/src/__mixins/BaseHyperlinkMixin.d.ts +18 -0
  98. package/dist/src/__mixins/MixinConstructor.d.ts +1 -0
  99. package/dist/src/banner/banner.d.ts +0 -4
  100. package/dist/src/button/BaseButton.d.ts +4 -47
  101. package/dist/src/button/button/button.d.ts +32 -3
  102. package/dist/src/button/button-group/button-group.d.ts +2 -2
  103. package/dist/src/button/icon-button/icon-button.d.ts +33 -8
  104. package/dist/src/calendar/base-event.d.ts +10 -0
  105. package/dist/src/calendar/calendar-column-view.d.ts +41 -0
  106. package/dist/src/calendar/calendar-event.d.ts +7 -0
  107. package/dist/src/calendar/calendar-month-view.d.ts +31 -0
  108. package/dist/src/calendar/calendar.d.ts +65 -0
  109. package/dist/src/calendar/event-manager.d.ts +17 -0
  110. package/dist/src/calendar/index.d.ts +4 -0
  111. package/dist/src/calendar/types.d.ts +13 -0
  112. package/dist/src/calendar/utils.d.ts +31 -0
  113. package/dist/src/canvas/canvas.d.ts +92 -0
  114. package/dist/src/canvas/index.d.ts +2 -0
  115. package/dist/src/card/card.d.ts +4 -15
  116. package/dist/src/condition-builder/cb-compound-expression.d.ts +31 -0
  117. package/dist/src/condition-builder/cb-divider.d.ts +26 -0
  118. package/dist/src/condition-builder/cb-expression.d.ts +31 -0
  119. package/dist/src/condition-builder/cb-predicate.d.ts +30 -0
  120. package/dist/src/condition-builder/condition-builder.d.ts +27 -0
  121. package/dist/src/condition-builder/index.d.ts +5 -0
  122. package/dist/src/dropdown-button/dropdown-button.d.ts +68 -0
  123. package/dist/src/dropdown-button/index.d.ts +1 -0
  124. package/dist/src/fab/fab.d.ts +4 -35
  125. package/dist/src/flow-designer/commands.d.ts +66 -0
  126. package/dist/src/flow-designer/flow-designer-node.d.ts +46 -0
  127. package/dist/src/flow-designer/flow-designer.d.ts +133 -0
  128. package/dist/src/flow-designer/index.d.ts +7 -0
  129. package/dist/src/flow-designer/layout.d.ts +30 -0
  130. package/dist/src/flow-designer/types.d.ts +142 -0
  131. package/dist/src/flow-designer/validation.d.ts +43 -0
  132. package/dist/src/flow-designer/workflow-utils.d.ts +40 -0
  133. package/dist/src/focus-ring/focus-ring.d.ts +11 -5
  134. package/dist/src/html-editor/html-editor.d.ts +56 -0
  135. package/dist/src/html-editor/index.d.ts +2 -0
  136. package/dist/src/index.d.ts +16 -1
  137. package/dist/src/link/link.d.ts +1 -1
  138. package/dist/src/menu/menu/menu.d.ts +5 -7
  139. package/dist/src/menu/menu-item/menu-item.d.ts +14 -13
  140. package/dist/src/modal/index.d.ts +1 -0
  141. package/dist/src/modal/modal.d.ts +63 -0
  142. package/dist/src/navigation-rail/index.d.ts +2 -0
  143. package/dist/src/navigation-rail/navigation-rail-item.d.ts +55 -0
  144. package/dist/src/navigation-rail/navigation-rail.d.ts +71 -0
  145. package/dist/src/notification-manager/index.d.ts +1 -0
  146. package/dist/src/notification-manager/notification-manager.d.ts +44 -0
  147. package/dist/src/popover/index.d.ts +2 -0
  148. package/dist/src/popover/popover-content.d.ts +29 -0
  149. package/dist/src/popover/popover.d.ts +62 -0
  150. package/dist/src/sidebar-menu/index.d.ts +3 -0
  151. package/dist/src/sidebar-menu/sidebar-menu-item.d.ts +58 -0
  152. package/dist/src/sidebar-menu/sidebar-menu.d.ts +38 -0
  153. package/dist/src/sidebar-menu/sidebar-sub-menu.d.ts +35 -0
  154. package/dist/src/split-button/index.d.ts +1 -0
  155. package/dist/src/split-button/split-button.d.ts +72 -0
  156. package/dist/src/toolbar/toolbar.d.ts +10 -10
  157. package/dist/src/tooltip/tooltip.d.ts +5 -15
  158. package/dist/src/url-field/index.d.ts +1 -0
  159. package/dist/src/url-field/url-field.d.ts +48 -0
  160. package/dist/test/flow-designer.test.d.ts +1 -0
  161. package/dist/test/sidebar-menu.test.d.ts +1 -0
  162. package/dist/toolbar.js +10 -10
  163. package/dist/toolbar.js.map +1 -1
  164. package/dist/tsconfig.tsbuildinfo +1 -1
  165. package/package.json +4 -2
  166. package/readme.md +73 -65
  167. package/scss/mixin.scss +16 -0
  168. package/src/__controllers/floating-controller.ts +237 -0
  169. package/src/__mixins/BaseButtonMixin.ts +83 -0
  170. package/src/__mixins/BaseHyperlinkMixin.ts +68 -0
  171. package/src/__mixins/MixinConstructor.ts +1 -0
  172. package/src/{__base_element → __mixins}/README.md +2 -2
  173. package/src/banner/banner.scss +20 -25
  174. package/src/banner/banner.ts +1 -7
  175. package/src/button/BaseButton.ts +11 -100
  176. package/src/button/button/button-sizes.scss +4 -2
  177. package/src/button/button/button.ts +77 -23
  178. package/src/button/button-group/button-group.ts +2 -2
  179. package/src/button/icon-button/icon-button.ts +75 -33
  180. package/src/calendar/base-event.ts +49 -0
  181. package/src/calendar/calendar-column-view.scss +326 -0
  182. package/src/calendar/calendar-column-view.ts +392 -0
  183. package/src/calendar/calendar-event.ts +20 -0
  184. package/src/calendar/calendar-month-view.scss +192 -0
  185. package/src/calendar/calendar-month-view.ts +244 -0
  186. package/src/calendar/calendar.scss +71 -0
  187. package/src/calendar/calendar.ts +298 -0
  188. package/src/calendar/event-manager.ts +117 -0
  189. package/src/calendar/index.ts +4 -0
  190. package/src/calendar/types.ts +14 -0
  191. package/src/calendar/utils.ts +180 -0
  192. package/src/canvas/canvas.scss +60 -0
  193. package/src/canvas/canvas.ts +391 -0
  194. package/src/canvas/index.ts +2 -0
  195. package/src/card/card.ts +11 -71
  196. package/src/chart-bar/chart-bar.ts +9 -14
  197. package/src/chart-bar/chart-stacked-bar.ts +12 -18
  198. package/src/chart-doughnut/chart-doughnut.ts +23 -27
  199. package/src/chart-pie/chart-pie.ts +19 -23
  200. package/src/checkbox/checkbox.scss +17 -34
  201. package/src/checkbox/checkbox.ts +3 -1
  202. package/src/code-highlighter/code-highlighter.scss +1 -0
  203. package/src/code-highlighter/code-highlighter.ts +1 -1
  204. package/src/condition-builder/cb-compound-expression.scss +37 -0
  205. package/src/condition-builder/cb-compound-expression.ts +80 -0
  206. package/src/condition-builder/cb-divider.scss +93 -0
  207. package/src/condition-builder/cb-divider.ts +56 -0
  208. package/src/condition-builder/cb-expression.scss +14 -0
  209. package/src/condition-builder/cb-expression.ts +49 -0
  210. package/src/condition-builder/cb-predicate.scss +35 -0
  211. package/src/condition-builder/cb-predicate.ts +102 -0
  212. package/src/condition-builder/condition-builder.scss +13 -0
  213. package/src/condition-builder/condition-builder.ts +38 -0
  214. package/src/condition-builder/index.ts +5 -0
  215. package/src/date-picker/date-picker.ts +1 -1
  216. package/src/dropdown-button/demo/index.html +110 -0
  217. package/src/dropdown-button/dropdown-button.scss +22 -0
  218. package/src/dropdown-button/dropdown-button.ts +206 -0
  219. package/src/dropdown-button/index.ts +1 -0
  220. package/src/elevation/elevation.scss +5 -5
  221. package/src/fab/fab.ts +29 -100
  222. package/src/flow-designer/DEMO.md +239 -0
  223. package/src/flow-designer/commands.ts +278 -0
  224. package/src/flow-designer/flow-designer-node.ts +172 -0
  225. package/src/flow-designer/flow-designer.scss +457 -0
  226. package/src/flow-designer/flow-designer.ts +611 -0
  227. package/src/flow-designer/index.ts +41 -0
  228. package/src/flow-designer/layout.ts +357 -0
  229. package/src/flow-designer/types.ts +166 -0
  230. package/src/flow-designer/validation.ts +284 -0
  231. package/src/flow-designer/workflow-utils.ts +282 -0
  232. package/src/focus-ring/focus-ring.ts +47 -40
  233. package/src/html-editor/html-editor.scss +146 -0
  234. package/src/html-editor/html-editor.ts +276 -0
  235. package/src/html-editor/index.ts +3 -0
  236. package/src/index.ts +28 -1
  237. package/src/input/input.ts +3 -1
  238. package/src/link/link.ts +2 -2
  239. package/src/menu/menu/menu.scss +2 -2
  240. package/src/menu/menu/menu.ts +91 -101
  241. package/src/menu/menu-item/menu-item.scss +4 -0
  242. package/src/menu/menu-item/menu-item.ts +85 -79
  243. package/src/modal/index.ts +1 -0
  244. package/src/modal/modal.scss +206 -0
  245. package/src/modal/modal.ts +201 -0
  246. package/src/navigation-rail/index.ts +2 -0
  247. package/src/navigation-rail/navigation-rail-item.scss +216 -0
  248. package/src/navigation-rail/navigation-rail-item.ts +223 -0
  249. package/src/navigation-rail/navigation-rail.scss +72 -0
  250. package/src/navigation-rail/navigation-rail.ts +149 -0
  251. package/src/notification/notification.ts +3 -2
  252. package/src/notification-manager/index.ts +1 -0
  253. package/src/notification-manager/notification-manager.scss +113 -0
  254. package/src/notification-manager/notification-manager.ts +199 -0
  255. package/src/number-field/number-field.ts +6 -4
  256. package/src/pagination/pagination.ts +6 -4
  257. package/src/peacock-loader.ts +93 -5
  258. package/src/popover/index.ts +2 -0
  259. package/src/popover/popover-content.scss +69 -0
  260. package/src/popover/popover-content.ts +51 -0
  261. package/src/popover/popover.scss +7 -0
  262. package/src/popover/popover.ts +170 -0
  263. package/src/search/search.ts +4 -0
  264. package/src/sidebar-menu/demo/index.html +68 -0
  265. package/src/sidebar-menu/index.ts +3 -0
  266. package/src/sidebar-menu/sidebar-menu-item.scss +102 -0
  267. package/src/sidebar-menu/sidebar-menu-item.ts +151 -0
  268. package/src/{tree-view/tree-view.scss → sidebar-menu/sidebar-menu.scss} +1 -1
  269. package/src/sidebar-menu/sidebar-menu.ts +182 -0
  270. package/src/sidebar-menu/sidebar-sub-menu.scss +130 -0
  271. package/src/sidebar-menu/sidebar-sub-menu.ts +160 -0
  272. package/src/skeleton/skeleton.scss +18 -24
  273. package/src/snackbar/snackbar.ts +1 -1
  274. package/src/split-button/index.ts +1 -0
  275. package/src/split-button/split-button-colors.scss +56 -0
  276. package/src/split-button/split-button-sizes.scss +28 -0
  277. package/src/split-button/split-button.scss +79 -0
  278. package/src/split-button/split-button.ts +236 -0
  279. package/src/table/table.ts +2 -2
  280. package/src/tabs/tab.ts +4 -3
  281. package/src/text/text.css-component.scss +7 -1
  282. package/src/time-picker/time-picker.ts +1 -1
  283. package/src/toolbar/toolbar.ts +10 -10
  284. package/src/tooltip/tooltip.scss +4 -3
  285. package/src/tooltip/tooltip.ts +64 -98
  286. package/src/url-field/index.ts +1 -0
  287. package/src/url-field/url-field.scss +50 -0
  288. package/src/url-field/url-field.ts +239 -0
  289. package/dist/button-DMN1dPAg.js.map +0 -1
  290. package/dist/button-group-CX9CUUXk.js +0 -435
  291. package/dist/button-group-CX9CUUXk.js.map +0 -1
  292. package/dist/fab-C5Nzxk0E.js +0 -497
  293. package/dist/fab-C5Nzxk0E.js.map +0 -1
  294. package/dist/is-dark-mode-DicqGkCJ.js.map +0 -1
  295. package/dist/select-4pl4XBj7.js.map +0 -1
  296. package/dist/spread-B5cgadZl.js +0 -32
  297. package/dist/spread-B5cgadZl.js.map +0 -1
  298. package/dist/src/__base_element/BaseHyperlink.d.ts +0 -20
  299. package/dist/src/menu/menu/MenuSurfaceController.d.ts +0 -18
  300. package/dist/src/tree-view/index.d.ts +0 -2
  301. package/dist/src/tree-view/tree-node.d.ts +0 -69
  302. package/dist/src/tree-view/tree-view.d.ts +0 -40
  303. package/dist/src/tree-view/wc-tree-view.d.ts +0 -6
  304. package/dist/test/tree-view.test.d.ts +0 -1
  305. package/dist/throttle-C7ZAPqtu.js +0 -24
  306. package/dist/throttle-C7ZAPqtu.js.map +0 -1
  307. package/src/__base_element/BaseHyperlink.ts +0 -42
  308. package/src/menu/menu/MenuSurfaceController.ts +0 -61
  309. package/src/tree-view/demo/index.html +0 -57
  310. package/src/tree-view/index.ts +0 -2
  311. package/src/tree-view/tree-node.scss +0 -101
  312. package/src/tree-view/tree-node.ts +0 -268
  313. package/src/tree-view/tree-view.ts +0 -182
  314. package/src/tree-view/wc-tree-view.ts +0 -9
@@ -1,7 +1,7 @@
1
1
  import { html, LitElement, PropertyValues } from 'lit';
2
2
  import { property, query } from 'lit/decorators.js';
3
3
  import { styleMap } from 'lit/directives/style-map.js';
4
- import * as d3 from 'd3';
4
+ import { select, max, scaleBand, scaleLinear, scaleOrdinal, axisLeft, axisBottom, stack, Series, SeriesPoint, ScaleOrdinal } from 'd3';
5
5
 
6
6
  import IndividualComponent from '@/IndividualComponent.js';
7
7
 
@@ -135,15 +135,14 @@ export class ChartStackedBar extends LitElement {
135
135
  }
136
136
 
137
137
  private _getColorScale(keys: string[]) {
138
- return d3
139
- .scaleOrdinal<string, string>()
138
+ return scaleOrdinal<string, string>()
140
139
  .domain(keys)
141
140
  .range(chartColors);
142
141
  }
143
142
 
144
143
  private _getColorMap(
145
144
  keys: string[],
146
- scale: d3.ScaleOrdinal<string, string>,
145
+ scale: ScaleOrdinal<string, string>,
147
146
  ) {
148
147
  const map = new Map<string, string>();
149
148
  keys.forEach(key => {
@@ -176,7 +175,7 @@ export class ChartStackedBar extends LitElement {
176
175
  const margin = Math.max(this.margin, 16);
177
176
  const data = this.data ?? [];
178
177
 
179
- const svg = d3.select(this.svgElement);
178
+ const svg = select(this.svgElement);
180
179
  svg.attr('width', width).attr('height', height);
181
180
 
182
181
  const innerWidth = Math.max(width - margin * 2, 0);
@@ -198,20 +197,17 @@ export class ChartStackedBar extends LitElement {
198
197
  const colorMap = this._getColorMap(keys, colorScale);
199
198
 
200
199
  const totals = this._getTotals();
201
- const xScale = d3
202
- .scaleBand<string>()
200
+ const xScale = scaleBand<string>()
203
201
  .domain(data.map(d => d.name))
204
202
  .range([0, innerWidth])
205
203
  .padding(0.3);
206
- const maxValue = d3.max(totals) ?? 0;
207
- const yScale = d3
208
- .scaleLinear()
204
+ const maxValue = max(totals) ?? 0;
205
+ const yScale = scaleLinear()
209
206
  .domain([0, maxValue || 1])
210
207
  .nice()
211
208
  .range([innerHeight, 0]);
212
209
 
213
- const stackedSeries = d3
214
- .stack<ChartStackedBarItem, string>()
210
+ const stackedSeries = stack<ChartStackedBarItem, string>()
215
211
  .keys(keys)
216
212
  .value(
217
213
  (d, key) => d.segments.find(segment => segment.name === key)?.value ?? 0,
@@ -220,8 +216,7 @@ export class ChartStackedBar extends LitElement {
220
216
  const yGrid = container.select<SVGGElement>('.y-grid');
221
217
  yGrid
222
218
  .call(
223
- d3
224
- .axisLeft(yScale)
219
+ axisLeft(yScale)
225
220
  .ticks(5)
226
221
  .tickSize(-innerWidth)
227
222
  .tickFormat(() => ''),
@@ -235,8 +230,7 @@ export class ChartStackedBar extends LitElement {
235
230
  xAxis
236
231
  .attr('transform', `translate(0,${innerHeight})`)
237
232
  .call(
238
- d3
239
- .axisBottom(xScale)
233
+ axisBottom(xScale)
240
234
  .tickSizeOuter(0)
241
235
  .tickFormat(name => {
242
236
  const entry = data.find(d => d.name === name);
@@ -252,7 +246,7 @@ export class ChartStackedBar extends LitElement {
252
246
 
253
247
  const barGroups = container
254
248
  .select('.bars')
255
- .selectAll<SVGGElement, d3.Series<ChartStackedBarItem, string>>(
249
+ .selectAll<SVGGElement, Series<ChartStackedBarItem, string>>(
256
250
  '.bar-group',
257
251
  )
258
252
  .data(stackedSeries, series => series.key)
@@ -268,7 +262,7 @@ export class ChartStackedBar extends LitElement {
268
262
  .style('fill', series => colorMap.get(series.key) ?? colorScale(series.key));
269
263
 
270
264
  const segmentJoin = barGroups
271
- .selectAll<SVGRectElement, d3.SeriesPoint<ChartStackedBarItem>>('rect')
265
+ .selectAll<SVGRectElement, SeriesPoint<ChartStackedBarItem>>('rect')
272
266
  .data(series => series, d => d.data.name)
273
267
  .join(
274
268
  enter =>
@@ -1,7 +1,7 @@
1
1
  import { html, LitElement, PropertyValues } from 'lit';
2
2
  import { property, query } from 'lit/decorators.js';
3
+ import { select, arc, pie, scaleOrdinal, easeCubicInOut, interpolateNumber, PieArcDatum, BaseType } from 'd3';
3
4
  import IndividualComponent from '@/IndividualComponent.js';
4
- import * as d3 from 'd3';
5
5
  import styles from './chart-donut.scss';
6
6
 
7
7
  export type ChartDoughnutColor = {
@@ -24,7 +24,7 @@ const chartColors: ChartDoughnutColor[] = [];
24
24
 
25
25
  /** SVGPathElement augmented with the last rendered arc datum for smooth tween interpolation. */
26
26
  interface ArcPathElement extends SVGPathElement {
27
- _prevDatum?: d3.PieArcDatum<ChartDoughnutItem>;
27
+ _prevDatum?: PieArcDatum<ChartDoughnutItem>;
28
28
  }
29
29
 
30
30
  function debounce<T extends (...args: any[]) => void>(fn: T, wait: number): T {
@@ -108,16 +108,14 @@ export class ChartDoughnut extends LitElement {
108
108
  }
109
109
 
110
110
  private _getPieData() {
111
- const pie = d3
112
- .pie<ChartDoughnutItem>()
111
+ const pieGenerator = pie<ChartDoughnutItem>()
113
112
  .sort(null)
114
113
  .value(d => d.value);
115
- return pie(this.data);
114
+ return pieGenerator(this.data);
116
115
  }
117
116
 
118
117
  private _getColorScale() {
119
- return d3
120
- .scaleOrdinal<string, ChartDoughnutColor>()
118
+ return scaleOrdinal<string, ChartDoughnutColor>()
121
119
  .domain(this.data.map(d => d.name))
122
120
  .range(chartColors);
123
121
  }
@@ -131,15 +129,13 @@ export class ChartDoughnut extends LitElement {
131
129
  const colorScale = this._getColorScale();
132
130
  const total = this._getTotal();
133
131
 
134
- const svg = d3.select(this.svgElement);
132
+ const svg = select(this.svgElement);
135
133
 
136
- const doughnutArc = d3
137
- .arc<d3.PieArcDatum<ChartDoughnutItem>>()
134
+ const doughnutArc = arc<PieArcDatum<ChartDoughnutItem>>()
138
135
  .innerRadius(radius * 0.72)
139
136
  .outerRadius(radius);
140
137
 
141
- const labelsArc = d3
142
- .arc<d3.PieArcDatum<ChartDoughnutItem>>()
138
+ const labelsArc = arc<PieArcDatum<ChartDoughnutItem>>()
143
139
  .innerRadius(radius + 10)
144
140
  .outerRadius(radius + 10);
145
141
 
@@ -152,7 +148,7 @@ export class ChartDoughnut extends LitElement {
152
148
  // Arc paths — keyed by name so D3 matches elements across updates
153
149
  const $paths = svg
154
150
  .select('.arc-container')
155
- .selectAll<SVGPathElement, d3.PieArcDatum<ChartDoughnutItem>>('.arc')
151
+ .selectAll<SVGPathElement, PieArcDatum<ChartDoughnutItem>>('.arc')
156
152
  .data(pieData, d => d.data.name)
157
153
  .join('path')
158
154
  .attr('class', 'arc')
@@ -162,7 +158,7 @@ export class ChartDoughnut extends LitElement {
162
158
  $paths
163
159
  .transition()
164
160
  .duration(DURATION)
165
- .ease(d3.easeCubicInOut)
161
+ .ease(easeCubicInOut)
166
162
  .attrTween('d', function (this: SVGPathElement, d) {
167
163
  const self = this as ArcPathElement;
168
164
  // Interpolate from the last rendered angles to the new ones.
@@ -173,8 +169,8 @@ export class ChartDoughnut extends LitElement {
173
169
  endAngle: d.startAngle,
174
170
  };
175
171
  self._prevDatum = d;
176
- const iStart = d3.interpolateNumber(prev.startAngle, d.startAngle);
177
- const iEnd = d3.interpolateNumber(prev.endAngle, d.endAngle);
172
+ const iStart = interpolateNumber(prev.startAngle, d.startAngle);
173
+ const iEnd = interpolateNumber(prev.endAngle, d.endAngle);
178
174
  return (t: number) =>
179
175
  doughnutArc({ ...d, startAngle: iStart(t), endAngle: iEnd(t) }) ??
180
176
  '';
@@ -194,11 +190,11 @@ export class ChartDoughnut extends LitElement {
194
190
  $title
195
191
  .transition()
196
192
  .duration(DURATION)
197
- .ease(d3.easeCubicInOut)
198
- .tween('text', function (this: d3.BaseType) {
199
- const sel = d3.select(this as SVGTextElement);
193
+ .ease(easeCubicInOut)
194
+ .tween('text', function (this: BaseType) {
195
+ const sel = select(this as SVGTextElement);
200
196
  const start = parseFloat(sel.text()) || 0;
201
- const interp = d3.interpolateNumber(start, total);
197
+ const interp = interpolateNumber(start, total);
202
198
  return function (t: number) {
203
199
  sel.text(Math.round(interp(t)));
204
200
  };
@@ -211,7 +207,7 @@ export class ChartDoughnut extends LitElement {
211
207
  const $chartContainer = svg.select('.chart-container');
212
208
 
213
209
  if (this.showLabels) {
214
- const pointsFn = (d: d3.PieArcDatum<ChartDoughnutItem>) => {
210
+ const pointsFn = (d: PieArcDatum<ChartDoughnutItem>) => {
215
211
  const posA = doughnutArc.centroid(d);
216
212
  const posB = labelsArc.centroid(d);
217
213
  const posC = posB.slice() as [number, number];
@@ -220,20 +216,20 @@ export class ChartDoughnut extends LitElement {
220
216
  return [posA, posB, posC].map(p => p.join(',')).join(' ');
221
217
  };
222
218
 
223
- const transformFn = (d: d3.PieArcDatum<ChartDoughnutItem>) => {
219
+ const transformFn = (d: PieArcDatum<ChartDoughnutItem>) => {
224
220
  const pos = labelsArc.centroid(d);
225
221
  const midAngle = d.startAngle + (d.endAngle - d.startAngle) / 2;
226
222
  pos[0] = radius * (midAngle < Math.PI ? 1 : -1);
227
223
  return `translate(${pos})`;
228
224
  };
229
225
 
230
- const anchorFn = (d: d3.PieArcDatum<ChartDoughnutItem>) => {
226
+ const anchorFn = (d: PieArcDatum<ChartDoughnutItem>) => {
231
227
  const midAngle = d.startAngle + (d.endAngle - d.startAngle) / 2;
232
228
  return midAngle < Math.PI ? 'start' : 'end';
233
229
  };
234
230
 
235
231
  const $polylines = $chartContainer
236
- .selectAll<SVGPolylineElement, d3.PieArcDatum<ChartDoughnutItem>>(
232
+ .selectAll<SVGPolylineElement, PieArcDatum<ChartDoughnutItem>>(
237
233
  '.item-polyline',
238
234
  )
239
235
  .data(pieData, d => d.data.name)
@@ -241,7 +237,7 @@ export class ChartDoughnut extends LitElement {
241
237
  .attr('class', 'item-polyline');
242
238
 
243
239
  const $labels = $chartContainer
244
- .selectAll<SVGTextElement, d3.PieArcDatum<ChartDoughnutItem>>('.item-label')
240
+ .selectAll<SVGTextElement, PieArcDatum<ChartDoughnutItem>>('.item-label')
245
241
  .data(pieData, d => d.data.name)
246
242
  .join('text')
247
243
  .attr('class', 'item-label')
@@ -251,12 +247,12 @@ export class ChartDoughnut extends LitElement {
251
247
  $polylines
252
248
  .transition()
253
249
  .duration(DURATION)
254
- .ease(d3.easeCubicInOut)
250
+ .ease(easeCubicInOut)
255
251
  .attr('points', pointsFn);
256
252
  $labels
257
253
  .transition()
258
254
  .duration(DURATION)
259
- .ease(d3.easeCubicInOut)
255
+ .ease(easeCubicInOut)
260
256
  .attr('transform', transformFn)
261
257
  .style('text-anchor', anchorFn);
262
258
  } else {
@@ -1,7 +1,7 @@
1
1
  import { html, LitElement, PropertyValues } from 'lit';
2
2
  import { property, query } from 'lit/decorators.js';
3
+ import { select, arc, pie, scaleOrdinal, PieArcDatum, easeCubicInOut, interpolateNumber } from 'd3';
3
4
  import IndividualComponent from '@/IndividualComponent.js';
4
- import * as d3 from 'd3';
5
5
  import styles from './chart-pie.scss';
6
6
 
7
7
  export type ChartPieColor = {
@@ -24,7 +24,7 @@ const chartColors: ChartPieColor[] = [];
24
24
 
25
25
  /** SVGPathElement augmented with the last rendered arc datum for smooth tween interpolation. */
26
26
  interface ArcPathElement extends SVGPathElement {
27
- _prevDatum?: d3.PieArcDatum<ChartPieItem>;
27
+ _prevDatum?: PieArcDatum<ChartPieItem>;
28
28
  }
29
29
 
30
30
  function debounce<T extends (...args: any[]) => void>(fn: T, wait: number): T {
@@ -102,16 +102,14 @@ export class ChartPie extends LitElement {
102
102
  }
103
103
 
104
104
  private _getPieData() {
105
- const pie = d3
106
- .pie<ChartPieItem>()
105
+ const pieGenerator = pie<ChartPieItem>()
107
106
  .sort(null)
108
107
  .value(d => d.value);
109
- return pie(this.data);
108
+ return pieGenerator(this.data);
110
109
  }
111
110
 
112
111
  private _getColorScale() {
113
- return d3
114
- .scaleOrdinal<string, ChartPieColor>()
112
+ return scaleOrdinal<string, ChartPieColor>()
115
113
  .domain(this.data.map(d => d.name))
116
114
  .range(chartColors);
117
115
  }
@@ -124,15 +122,13 @@ export class ChartPie extends LitElement {
124
122
  const pieData = this._getPieData();
125
123
  const colorScale = this._getColorScale();
126
124
 
127
- const svg = d3.select(this.svgElement);
125
+ const svg = select(this.svgElement);
128
126
 
129
- const pieArc = d3
130
- .arc<d3.PieArcDatum<ChartPieItem>>()
127
+ const pieArc = arc<PieArcDatum<ChartPieItem>>()
131
128
  .innerRadius(0)
132
129
  .outerRadius(radius);
133
130
 
134
- const labelsArc = d3
135
- .arc<d3.PieArcDatum<ChartPieItem>>()
131
+ const labelsArc = arc<PieArcDatum<ChartPieItem>>()
136
132
  .innerRadius(radius + 10)
137
133
  .outerRadius(radius + 10);
138
134
 
@@ -145,7 +141,7 @@ export class ChartPie extends LitElement {
145
141
  // Arc paths — keyed by name so D3 matches elements across updates
146
142
  const $paths = svg
147
143
  .select('.arc-container')
148
- .selectAll<SVGPathElement, d3.PieArcDatum<ChartPieItem>>('.arc')
144
+ .selectAll<SVGPathElement, PieArcDatum<ChartPieItem>>('.arc')
149
145
  .data(pieData, d => d.data.name)
150
146
  .join('path')
151
147
  .attr('class', 'arc')
@@ -155,7 +151,7 @@ export class ChartPie extends LitElement {
155
151
  $paths
156
152
  .transition()
157
153
  .duration(DURATION)
158
- .ease(d3.easeCubicInOut)
154
+ .ease(easeCubicInOut)
159
155
  .attrTween('d', function (this: SVGPathElement, d) {
160
156
  const self = this as ArcPathElement;
161
157
  // Interpolate from the last rendered angles to the new ones.
@@ -166,8 +162,8 @@ export class ChartPie extends LitElement {
166
162
  endAngle: d.startAngle,
167
163
  };
168
164
  self._prevDatum = d;
169
- const iStart = d3.interpolateNumber(prev.startAngle, d.startAngle);
170
- const iEnd = d3.interpolateNumber(prev.endAngle, d.endAngle);
165
+ const iStart = interpolateNumber(prev.startAngle, d.startAngle);
166
+ const iEnd = interpolateNumber(prev.endAngle, d.endAngle);
171
167
  return (t: number) =>
172
168
  pieArc({ ...d, startAngle: iStart(t), endAngle: iEnd(t) }) ?? '';
173
169
  });
@@ -184,7 +180,7 @@ export class ChartPie extends LitElement {
184
180
  const $chartContainer = svg.select('.chart-container');
185
181
 
186
182
  if (this.showLabels) {
187
- const pointsFn = (d: d3.PieArcDatum<ChartPieItem>) => {
183
+ const pointsFn = (d: PieArcDatum<ChartPieItem>) => {
188
184
  const posA = pieArc.centroid(d);
189
185
  const posB = labelsArc.centroid(d);
190
186
  const posC = posB.slice() as [number, number];
@@ -193,20 +189,20 @@ export class ChartPie extends LitElement {
193
189
  return [posA, posB, posC].map(p => p.join(',')).join(' ');
194
190
  };
195
191
 
196
- const transformFn = (d: d3.PieArcDatum<ChartPieItem>) => {
192
+ const transformFn = (d: PieArcDatum<ChartPieItem>) => {
197
193
  const pos = labelsArc.centroid(d);
198
194
  const midAngle = d.startAngle + (d.endAngle - d.startAngle) / 2;
199
195
  pos[0] = radius * (midAngle < Math.PI ? 1 : -1);
200
196
  return `translate(${pos})`;
201
197
  };
202
198
 
203
- const anchorFn = (d: d3.PieArcDatum<ChartPieItem>) => {
199
+ const anchorFn = (d: PieArcDatum<ChartPieItem>) => {
204
200
  const midAngle = d.startAngle + (d.endAngle - d.startAngle) / 2;
205
201
  return midAngle < Math.PI ? 'start' : 'end';
206
202
  };
207
203
 
208
204
  const $polylines = $chartContainer
209
- .selectAll<SVGPolylineElement, d3.PieArcDatum<ChartPieItem>>(
205
+ .selectAll<SVGPolylineElement, PieArcDatum<ChartPieItem>>(
210
206
  '.item-polyline',
211
207
  )
212
208
  .data(pieData, d => d.data.name)
@@ -214,7 +210,7 @@ export class ChartPie extends LitElement {
214
210
  .attr('class', 'item-polyline');
215
211
 
216
212
  const $labels = $chartContainer
217
- .selectAll<SVGTextElement, d3.PieArcDatum<ChartPieItem>>('.item-label')
213
+ .selectAll<SVGTextElement, PieArcDatum<ChartPieItem>>('.item-label')
218
214
  .data(pieData, d => d.data.name)
219
215
  .join('text')
220
216
  .attr('class', 'item-label')
@@ -224,12 +220,12 @@ export class ChartPie extends LitElement {
224
220
  $polylines
225
221
  .transition()
226
222
  .duration(DURATION)
227
- .ease(d3.easeCubicInOut)
223
+ .ease(easeCubicInOut)
228
224
  .attr('points', pointsFn);
229
225
  $labels
230
226
  .transition()
231
227
  .duration(DURATION)
232
- .ease(d3.easeCubicInOut)
228
+ .ease(easeCubicInOut)
233
229
  .attr('transform', transformFn)
234
230
  .style('text-anchor', anchorFn);
235
231
  } else {
@@ -51,12 +51,9 @@
51
51
  flex-shrink: 0;
52
52
  }
53
53
 
54
- .state-layer {
55
- position: absolute;
56
- inset: 0;
54
+ .ripple {
57
55
  border-radius: 50%;
58
- opacity: 0;
59
- transition: opacity var(--duration-short2) var(--easing-standard);
56
+ --ripple-pressed-color: var(--color-on-surface);
60
57
  }
61
58
 
62
59
  .outline {
@@ -115,46 +112,32 @@
115
112
 
116
113
  // Hover state
117
114
  &:hover:not(.disabled):not(.readonly) {
118
- .state-layer {
119
- opacity: 0.08;
120
- background: var(--color-on-surface);
115
+ &.state-checked .ripple,
116
+ &.state-indeterminate .ripple {
117
+ --ripple-pressed-color: var(--checkbox-selected-color);
121
118
  }
119
+ }
122
120
 
123
- &.state-checked .state-layer,
124
- &.state-indeterminate .state-layer {
125
- background: var(--checkbox-selected-color);
126
- }
121
+ .focus-ring {
122
+ --focus-ring-container-shape-start-start: 50%;
123
+ --focus-ring-container-shape-start-end: 50%;
124
+ --focus-ring-container-shape-end-start: 50%;
125
+ --focus-ring-container-shape-end-end: 50%;
127
126
  }
128
127
 
129
128
  // Focus state
130
129
  &.has-focus:not(.active):not(.disabled):not(.readonly) {
131
- .state-layer {
132
- opacity: 0.12;
133
- background: var(--color-on-surface);
134
- }
135
-
136
- .container {
137
- outline: 3px solid var(--color-primary);
138
- outline-offset: 2px;
139
- border-radius: 50%;
140
- }
141
-
142
- &.state-checked .state-layer,
143
- &.state-indeterminate .state-layer {
144
- background: var(--checkbox-selected-color);
130
+ &.state-checked .ripple,
131
+ &.state-indeterminate .ripple {
132
+ --ripple-pressed-color: var(--checkbox-selected-color);
145
133
  }
146
134
  }
147
135
 
148
136
  // Active/pressed state
149
137
  &.active:not(.disabled):not(.readonly) {
150
- .state-layer {
151
- opacity: 0.12;
152
- background: var(--color-on-surface);
153
- }
154
-
155
- &.state-checked .state-layer,
156
- &.state-indeterminate .state-layer {
157
- background: var(--checkbox-selected-color);
138
+ &.state-checked .ripple,
139
+ &.state-indeterminate .ripple {
140
+ --ripple-pressed-color: var(--checkbox-selected-color);
158
141
  }
159
142
  }
160
143
 
@@ -238,6 +238,7 @@ export class Checkbox extends LitElement {
238
238
  return html`
239
239
  <label class=${classMap(cssClasses)}>
240
240
  <div
241
+ id="container"
241
242
  class="container"
242
243
  tabindex=${this.tabindex || 0}
243
244
  @keyup=${this.handleKeyUp}
@@ -255,7 +256,8 @@ export class Checkbox extends LitElement {
255
256
  : 'false'}
256
257
  ${spread(this.configAria)}
257
258
  >
258
- <div class="state-layer"></div>
259
+ <wc-ripple class="ripple"></wc-ripple>
260
+ <wc-focus-ring class="focus-ring" for='container'></wc-focus-ring>
259
261
  <div class="outline"></div>
260
262
  <div class="background"></div>
261
263
  <svg class="icon" viewBox="0 0 12 12">
@@ -58,6 +58,7 @@
58
58
  padding: var(--spacing-200);
59
59
  width: fit-content;
60
60
  background: transparent !important;
61
+ font-family: var(--font-family-monospace);
61
62
  --shiki-dark-bg: transparent !important;
62
63
 
63
64
  code {
@@ -175,10 +175,10 @@ export class CodeHighlighter extends LitElement {
175
175
  variant="text"
176
176
  size="xs"
177
177
  aria-label=${locale.copyToClipboard}
178
- name="content_copy"
179
178
  tooltip=${locale.copyToClipboard}
180
179
  @click=${this.__handleCopyClick}
181
180
  >
181
+ <wc-icon name="content_copy"></wc-icon>
182
182
  </wc-icon-button>
183
183
  </div>
184
184
  </div>
@@ -0,0 +1,37 @@
1
+ @use '../../scss/mixin';
2
+
3
+ @include mixin.base-styles;
4
+
5
+ :host {
6
+ display: block;
7
+ }
8
+
9
+ .compound-expression {
10
+ display: flex;
11
+ padding-top: var(--spacing-200);
12
+
13
+ .field-name-container {
14
+ display: flex;
15
+ flex-direction: column;
16
+ padding-top: var(--spacing-100);
17
+ padding-right: var(--spacing-200);
18
+
19
+ .field-label {
20
+ @include mixin.get-typography-not-important(label-medium);
21
+ color: var(--color-on-surface-variant);
22
+ }
23
+
24
+ .field-compound-type {
25
+ flex: 1;
26
+ padding-bottom: var(--spacing-250);
27
+ }
28
+ }
29
+
30
+ .conditions {
31
+ flex: 1;
32
+ }
33
+ }
34
+
35
+ .slot-end {
36
+ display: block;
37
+ }
@@ -0,0 +1,80 @@
1
+ import { html, LitElement, nothing } from 'lit';
2
+ import { property } from 'lit/decorators.js';
3
+ import IndividualComponent from '@/IndividualComponent.js';
4
+ import styles from './cb-compound-expression.scss';
5
+
6
+ /**
7
+ * @label CB Compound Expression
8
+ * @tag wc-cb-compound-expression
9
+ * @rawTag cb-compound-expression
10
+ * @summary A compound expression group in a condition builder that displays a field label, an optional condition operator divider, and slots for child expressions.
11
+ * @tags condition-builder
12
+ * @parentRawTag compound-builder
13
+ *
14
+ * @example
15
+ * ```html
16
+ * <wc-cb-compound-expression field-label="Age" condition-operator="or">
17
+ * <wc-cb-expression>
18
+ * <wc-input placeholder="Enter value"></wc-input>
19
+ * </wc-cb-expression>
20
+ * </wc-cb-compound-expression>
21
+ * ```
22
+ */
23
+ @IndividualComponent
24
+ export class CbCompoundExpression extends LitElement {
25
+ static styles = [styles];
26
+
27
+ /** The logical operator joining conditions in this group ('and' or 'or'). */
28
+ @property({ type: String, attribute: 'condition-operator', reflect: true })
29
+ conditionOperator?: 'and' | 'or';
30
+
31
+ /** The field name for the compound expression. */
32
+ @property({ type: String, attribute: 'field-name' })
33
+ fieldName = '';
34
+
35
+ /** The display label for the field. */
36
+ @property({ type: String, attribute: 'field-label' })
37
+ fieldLabel = '';
38
+
39
+ override updated() {
40
+ this.__adjustSlotEndPadding();
41
+ }
42
+
43
+ private __adjustSlotEndPadding() {
44
+ const slotEnd = this.renderRoot.querySelector<HTMLElement>('.slot-end');
45
+ const fieldNameContainer =
46
+ this.renderRoot.querySelector<HTMLElement>('.field-name-container');
47
+ if (slotEnd && fieldNameContainer) {
48
+ slotEnd.style.paddingInlineStart =
49
+ fieldNameContainer.getBoundingClientRect().width + 'px';
50
+ }
51
+ }
52
+
53
+ private __renderOperatorDivider() {
54
+ if (!this.conditionOperator) return nothing;
55
+ return html`
56
+ <wc-cb-divider connect-end>
57
+ <wc-tag color="yellow" size="sm">${this.conditionOperator}</wc-tag>
58
+ </wc-cb-divider>
59
+ `;
60
+ }
61
+
62
+ render() {
63
+ return html`
64
+ <div class="compound-expression" field-name=${this.fieldName}>
65
+ <div class="field-name-container">
66
+ <span class="field-label">${this.fieldLabel}</span>
67
+ <div class="field-compound-type">
68
+ ${this.__renderOperatorDivider()}
69
+ </div>
70
+ </div>
71
+ <div class="conditions">
72
+ <slot></slot>
73
+ </div>
74
+ </div>
75
+ <div class="slot-end">
76
+ <slot name="end"></slot>
77
+ </div>
78
+ `;
79
+ }
80
+ }