@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.
- package/dist/BaseButton-BNFAYn-S.js +219 -0
- package/dist/BaseButton-BNFAYn-S.js.map +1 -0
- package/dist/BaseHyperlinkMixin-BNuwbiEf.js +65 -0
- package/dist/BaseHyperlinkMixin-BNuwbiEf.js.map +1 -0
- package/dist/BaseInput-14YmcfK7.js +27 -0
- package/dist/BaseInput-14YmcfK7.js.map +1 -0
- package/dist/assets/components.css +1 -1
- package/dist/assets/components.css.map +1 -1
- package/dist/assets/styles.css +1 -1
- package/dist/assets/styles.css.map +1 -1
- package/dist/banner.js +14 -30
- package/dist/banner.js.map +1 -1
- package/dist/{button-DMN1dPAg.js → button-colors-Ccys3hvS.js} +5 -468
- package/dist/button-colors-Ccys3hvS.js.map +1 -0
- package/dist/button-group.js +228 -8
- package/dist/button-group.js.map +1 -1
- package/dist/button.js +294 -8
- package/dist/button.js.map +1 -1
- package/dist/calendar-column-view.js +634 -0
- package/dist/calendar-column-view.js.map +1 -0
- package/dist/calendar-event-BrQ_SEKD.js +199 -0
- package/dist/calendar-event-BrQ_SEKD.js.map +1 -0
- package/dist/calendar-month-view.js +376 -0
- package/dist/calendar-month-view.js.map +1 -0
- package/dist/calendar.js +339 -0
- package/dist/calendar.js.map +1 -0
- package/dist/canvas.js +361 -0
- package/dist/canvas.js.map +1 -0
- package/dist/card.js +18 -73
- package/dist/card.js.map +1 -1
- package/dist/cb-compound-expression.js +125 -0
- package/dist/cb-compound-expression.js.map +1 -0
- package/dist/cb-divider.js +150 -0
- package/dist/cb-divider.js.map +1 -0
- package/dist/cb-expression.js +75 -0
- package/dist/cb-expression.js.map +1 -0
- package/dist/cb-predicate.js +137 -0
- package/dist/cb-predicate.js.map +1 -0
- package/dist/chart-bar.js.map +1 -1
- package/dist/chart-doughnut.js +2 -2
- package/dist/chart-doughnut.js.map +1 -1
- package/dist/chart-pie.js +2 -2
- package/dist/chart-pie.js.map +1 -1
- package/dist/chart-stacked-bar.js.map +1 -1
- package/dist/code-editor.js +2 -1
- package/dist/code-editor.js.map +1 -1
- package/dist/code-highlighter.js +2 -1
- package/dist/code-highlighter.js.map +1 -1
- package/dist/condition-builder.js +58 -0
- package/dist/condition-builder.js.map +1 -0
- package/dist/custom-elements-jsdocs.json +10860 -5567
- package/dist/custom-elements.json +16180 -7996
- package/dist/dropdown-button.js +216 -0
- package/dist/dropdown-button.js.map +1 -0
- package/dist/event-manager-D-QCmUgR.js +113 -0
- package/dist/event-manager-D-QCmUgR.js.map +1 -0
- package/dist/fab.js +421 -9
- package/dist/fab.js.map +1 -1
- package/dist/flow-designer-dZnLJOQT.js +1656 -0
- package/dist/flow-designer-dZnLJOQT.js.map +1 -0
- package/dist/flow-designer-node-XMe-jlKg.js +548 -0
- package/dist/flow-designer-node-XMe-jlKg.js.map +1 -0
- package/dist/flow-designer-node.js +4 -0
- package/dist/flow-designer-node.js.map +1 -0
- package/dist/flow-designer.js +16 -0
- package/dist/flow-designer.js.map +1 -0
- package/dist/html-editor.js +358 -0
- package/dist/html-editor.js.map +1 -0
- package/dist/icon-button-CK1ZuE-2.js +247 -0
- package/dist/icon-button-CK1ZuE-2.js.map +1 -0
- package/dist/index.js +31 -8
- package/dist/index.js.map +1 -1
- package/dist/{is-dark-mode-DicqGkCJ.js → is-dark-mode-DOcaw4Yq.js} +2 -27
- package/dist/is-dark-mode-DOcaw4Yq.js.map +1 -0
- package/dist/modal.js +418 -0
- package/dist/modal.js.map +1 -0
- package/dist/{select-4pl4XBj7.js → navigation-rail-DyO0oAZU.js} +2000 -2767
- package/dist/navigation-rail-DyO0oAZU.js.map +1 -0
- package/dist/notification-manager.js +268 -0
- package/dist/notification-manager.js.map +1 -0
- package/dist/notification.js +3 -2
- package/dist/notification.js.map +1 -1
- package/dist/peacock-loader.js +102 -14
- package/dist/peacock-loader.js.map +1 -1
- package/dist/popover-NC7b1lTq.js +1971 -0
- package/dist/popover-NC7b1lTq.js.map +1 -0
- package/dist/popover-content.js +125 -0
- package/dist/popover-content.js.map +1 -0
- package/dist/popover.js +4 -0
- package/dist/popover.js.map +1 -0
- package/dist/search.js +4 -0
- package/dist/search.js.map +1 -1
- package/dist/split-button.js +388 -0
- package/dist/split-button.js.map +1 -0
- package/dist/src/__controllers/floating-controller.d.ts +35 -0
- package/dist/src/__mixins/BaseButtonMixin.d.ts +20 -0
- package/dist/src/__mixins/BaseHyperlinkMixin.d.ts +18 -0
- package/dist/src/__mixins/MixinConstructor.d.ts +1 -0
- package/dist/src/banner/banner.d.ts +0 -4
- package/dist/src/button/BaseButton.d.ts +4 -47
- package/dist/src/button/button/button.d.ts +32 -3
- package/dist/src/button/button-group/button-group.d.ts +2 -2
- package/dist/src/button/icon-button/icon-button.d.ts +33 -8
- package/dist/src/calendar/base-event.d.ts +10 -0
- package/dist/src/calendar/calendar-column-view.d.ts +41 -0
- package/dist/src/calendar/calendar-event.d.ts +7 -0
- package/dist/src/calendar/calendar-month-view.d.ts +31 -0
- package/dist/src/calendar/calendar.d.ts +65 -0
- package/dist/src/calendar/event-manager.d.ts +17 -0
- package/dist/src/calendar/index.d.ts +4 -0
- package/dist/src/calendar/types.d.ts +13 -0
- package/dist/src/calendar/utils.d.ts +31 -0
- package/dist/src/canvas/canvas.d.ts +92 -0
- package/dist/src/canvas/index.d.ts +2 -0
- package/dist/src/card/card.d.ts +4 -15
- package/dist/src/condition-builder/cb-compound-expression.d.ts +31 -0
- package/dist/src/condition-builder/cb-divider.d.ts +26 -0
- package/dist/src/condition-builder/cb-expression.d.ts +31 -0
- package/dist/src/condition-builder/cb-predicate.d.ts +30 -0
- package/dist/src/condition-builder/condition-builder.d.ts +27 -0
- package/dist/src/condition-builder/index.d.ts +5 -0
- package/dist/src/dropdown-button/dropdown-button.d.ts +68 -0
- package/dist/src/dropdown-button/index.d.ts +1 -0
- package/dist/src/fab/fab.d.ts +4 -35
- package/dist/src/flow-designer/commands.d.ts +66 -0
- package/dist/src/flow-designer/flow-designer-node.d.ts +46 -0
- package/dist/src/flow-designer/flow-designer.d.ts +133 -0
- package/dist/src/flow-designer/index.d.ts +7 -0
- package/dist/src/flow-designer/layout.d.ts +30 -0
- package/dist/src/flow-designer/types.d.ts +142 -0
- package/dist/src/flow-designer/validation.d.ts +43 -0
- package/dist/src/flow-designer/workflow-utils.d.ts +40 -0
- package/dist/src/focus-ring/focus-ring.d.ts +11 -5
- package/dist/src/html-editor/html-editor.d.ts +56 -0
- package/dist/src/html-editor/index.d.ts +2 -0
- package/dist/src/index.d.ts +16 -1
- package/dist/src/link/link.d.ts +1 -1
- package/dist/src/menu/menu/menu.d.ts +5 -7
- package/dist/src/menu/menu-item/menu-item.d.ts +14 -13
- package/dist/src/modal/index.d.ts +1 -0
- package/dist/src/modal/modal.d.ts +63 -0
- package/dist/src/navigation-rail/index.d.ts +2 -0
- package/dist/src/navigation-rail/navigation-rail-item.d.ts +55 -0
- package/dist/src/navigation-rail/navigation-rail.d.ts +71 -0
- package/dist/src/notification-manager/index.d.ts +1 -0
- package/dist/src/notification-manager/notification-manager.d.ts +44 -0
- package/dist/src/popover/index.d.ts +2 -0
- package/dist/src/popover/popover-content.d.ts +29 -0
- package/dist/src/popover/popover.d.ts +62 -0
- package/dist/src/sidebar-menu/index.d.ts +3 -0
- package/dist/src/sidebar-menu/sidebar-menu-item.d.ts +58 -0
- package/dist/src/sidebar-menu/sidebar-menu.d.ts +38 -0
- package/dist/src/sidebar-menu/sidebar-sub-menu.d.ts +35 -0
- package/dist/src/split-button/index.d.ts +1 -0
- package/dist/src/split-button/split-button.d.ts +72 -0
- package/dist/src/toolbar/toolbar.d.ts +10 -10
- package/dist/src/tooltip/tooltip.d.ts +5 -15
- package/dist/src/url-field/index.d.ts +1 -0
- package/dist/src/url-field/url-field.d.ts +48 -0
- package/dist/test/flow-designer.test.d.ts +1 -0
- package/dist/test/sidebar-menu.test.d.ts +1 -0
- package/dist/toolbar.js +10 -10
- package/dist/toolbar.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -2
- package/readme.md +73 -65
- package/scss/mixin.scss +16 -0
- package/src/__controllers/floating-controller.ts +237 -0
- package/src/__mixins/BaseButtonMixin.ts +83 -0
- package/src/__mixins/BaseHyperlinkMixin.ts +68 -0
- package/src/__mixins/MixinConstructor.ts +1 -0
- package/src/{__base_element → __mixins}/README.md +2 -2
- package/src/banner/banner.scss +20 -25
- package/src/banner/banner.ts +1 -7
- package/src/button/BaseButton.ts +11 -100
- package/src/button/button/button-sizes.scss +4 -2
- package/src/button/button/button.ts +77 -23
- package/src/button/button-group/button-group.ts +2 -2
- package/src/button/icon-button/icon-button.ts +75 -33
- package/src/calendar/base-event.ts +49 -0
- package/src/calendar/calendar-column-view.scss +326 -0
- package/src/calendar/calendar-column-view.ts +392 -0
- package/src/calendar/calendar-event.ts +20 -0
- package/src/calendar/calendar-month-view.scss +192 -0
- package/src/calendar/calendar-month-view.ts +244 -0
- package/src/calendar/calendar.scss +71 -0
- package/src/calendar/calendar.ts +298 -0
- package/src/calendar/event-manager.ts +117 -0
- package/src/calendar/index.ts +4 -0
- package/src/calendar/types.ts +14 -0
- package/src/calendar/utils.ts +180 -0
- package/src/canvas/canvas.scss +60 -0
- package/src/canvas/canvas.ts +391 -0
- package/src/canvas/index.ts +2 -0
- package/src/card/card.ts +11 -71
- package/src/chart-bar/chart-bar.ts +9 -14
- package/src/chart-bar/chart-stacked-bar.ts +12 -18
- package/src/chart-doughnut/chart-doughnut.ts +23 -27
- package/src/chart-pie/chart-pie.ts +19 -23
- package/src/checkbox/checkbox.scss +17 -34
- package/src/checkbox/checkbox.ts +3 -1
- package/src/code-highlighter/code-highlighter.scss +1 -0
- package/src/code-highlighter/code-highlighter.ts +1 -1
- package/src/condition-builder/cb-compound-expression.scss +37 -0
- package/src/condition-builder/cb-compound-expression.ts +80 -0
- package/src/condition-builder/cb-divider.scss +93 -0
- package/src/condition-builder/cb-divider.ts +56 -0
- package/src/condition-builder/cb-expression.scss +14 -0
- package/src/condition-builder/cb-expression.ts +49 -0
- package/src/condition-builder/cb-predicate.scss +35 -0
- package/src/condition-builder/cb-predicate.ts +102 -0
- package/src/condition-builder/condition-builder.scss +13 -0
- package/src/condition-builder/condition-builder.ts +38 -0
- package/src/condition-builder/index.ts +5 -0
- package/src/date-picker/date-picker.ts +1 -1
- package/src/dropdown-button/demo/index.html +110 -0
- package/src/dropdown-button/dropdown-button.scss +22 -0
- package/src/dropdown-button/dropdown-button.ts +206 -0
- package/src/dropdown-button/index.ts +1 -0
- package/src/elevation/elevation.scss +5 -5
- package/src/fab/fab.ts +29 -100
- package/src/flow-designer/DEMO.md +239 -0
- package/src/flow-designer/commands.ts +278 -0
- package/src/flow-designer/flow-designer-node.ts +172 -0
- package/src/flow-designer/flow-designer.scss +457 -0
- package/src/flow-designer/flow-designer.ts +611 -0
- package/src/flow-designer/index.ts +41 -0
- package/src/flow-designer/layout.ts +357 -0
- package/src/flow-designer/types.ts +166 -0
- package/src/flow-designer/validation.ts +284 -0
- package/src/flow-designer/workflow-utils.ts +282 -0
- package/src/focus-ring/focus-ring.ts +47 -40
- package/src/html-editor/html-editor.scss +146 -0
- package/src/html-editor/html-editor.ts +276 -0
- package/src/html-editor/index.ts +3 -0
- package/src/index.ts +28 -1
- package/src/input/input.ts +3 -1
- package/src/link/link.ts +2 -2
- package/src/menu/menu/menu.scss +2 -2
- package/src/menu/menu/menu.ts +91 -101
- package/src/menu/menu-item/menu-item.scss +4 -0
- package/src/menu/menu-item/menu-item.ts +85 -79
- package/src/modal/index.ts +1 -0
- package/src/modal/modal.scss +206 -0
- package/src/modal/modal.ts +201 -0
- package/src/navigation-rail/index.ts +2 -0
- package/src/navigation-rail/navigation-rail-item.scss +216 -0
- package/src/navigation-rail/navigation-rail-item.ts +223 -0
- package/src/navigation-rail/navigation-rail.scss +72 -0
- package/src/navigation-rail/navigation-rail.ts +149 -0
- package/src/notification/notification.ts +3 -2
- package/src/notification-manager/index.ts +1 -0
- package/src/notification-manager/notification-manager.scss +113 -0
- package/src/notification-manager/notification-manager.ts +199 -0
- package/src/number-field/number-field.ts +6 -4
- package/src/pagination/pagination.ts +6 -4
- package/src/peacock-loader.ts +93 -5
- package/src/popover/index.ts +2 -0
- package/src/popover/popover-content.scss +69 -0
- package/src/popover/popover-content.ts +51 -0
- package/src/popover/popover.scss +7 -0
- package/src/popover/popover.ts +170 -0
- package/src/search/search.ts +4 -0
- package/src/sidebar-menu/demo/index.html +68 -0
- package/src/sidebar-menu/index.ts +3 -0
- package/src/sidebar-menu/sidebar-menu-item.scss +102 -0
- package/src/sidebar-menu/sidebar-menu-item.ts +151 -0
- package/src/{tree-view/tree-view.scss → sidebar-menu/sidebar-menu.scss} +1 -1
- package/src/sidebar-menu/sidebar-menu.ts +182 -0
- package/src/sidebar-menu/sidebar-sub-menu.scss +130 -0
- package/src/sidebar-menu/sidebar-sub-menu.ts +160 -0
- package/src/skeleton/skeleton.scss +18 -24
- package/src/snackbar/snackbar.ts +1 -1
- package/src/split-button/index.ts +1 -0
- package/src/split-button/split-button-colors.scss +56 -0
- package/src/split-button/split-button-sizes.scss +28 -0
- package/src/split-button/split-button.scss +79 -0
- package/src/split-button/split-button.ts +236 -0
- package/src/table/table.ts +2 -2
- package/src/tabs/tab.ts +4 -3
- package/src/text/text.css-component.scss +7 -1
- package/src/time-picker/time-picker.ts +1 -1
- package/src/toolbar/toolbar.ts +10 -10
- package/src/tooltip/tooltip.scss +4 -3
- package/src/tooltip/tooltip.ts +64 -98
- package/src/url-field/index.ts +1 -0
- package/src/url-field/url-field.scss +50 -0
- package/src/url-field/url-field.ts +239 -0
- package/dist/button-DMN1dPAg.js.map +0 -1
- package/dist/button-group-CX9CUUXk.js +0 -435
- package/dist/button-group-CX9CUUXk.js.map +0 -1
- package/dist/fab-C5Nzxk0E.js +0 -497
- package/dist/fab-C5Nzxk0E.js.map +0 -1
- package/dist/is-dark-mode-DicqGkCJ.js.map +0 -1
- package/dist/select-4pl4XBj7.js.map +0 -1
- package/dist/spread-B5cgadZl.js +0 -32
- package/dist/spread-B5cgadZl.js.map +0 -1
- package/dist/src/__base_element/BaseHyperlink.d.ts +0 -20
- package/dist/src/menu/menu/MenuSurfaceController.d.ts +0 -18
- package/dist/src/tree-view/index.d.ts +0 -2
- package/dist/src/tree-view/tree-node.d.ts +0 -69
- package/dist/src/tree-view/tree-view.d.ts +0 -40
- package/dist/src/tree-view/wc-tree-view.d.ts +0 -6
- package/dist/test/tree-view.test.d.ts +0 -1
- package/dist/throttle-C7ZAPqtu.js +0 -24
- package/dist/throttle-C7ZAPqtu.js.map +0 -1
- package/src/__base_element/BaseHyperlink.ts +0 -42
- package/src/menu/menu/MenuSurfaceController.ts +0 -61
- package/src/tree-view/demo/index.html +0 -57
- package/src/tree-view/index.ts +0 -2
- package/src/tree-view/tree-node.scss +0 -101
- package/src/tree-view/tree-node.ts +0 -268
- package/src/tree-view/tree-view.ts +0 -182
- 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
|
|
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
|
|
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:
|
|
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 =
|
|
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 =
|
|
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 =
|
|
207
|
-
const yScale =
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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,
|
|
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?:
|
|
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
|
|
112
|
-
.pie<ChartDoughnutItem>()
|
|
111
|
+
const pieGenerator = pie<ChartDoughnutItem>()
|
|
113
112
|
.sort(null)
|
|
114
113
|
.value(d => d.value);
|
|
115
|
-
return
|
|
114
|
+
return pieGenerator(this.data);
|
|
116
115
|
}
|
|
117
116
|
|
|
118
117
|
private _getColorScale() {
|
|
119
|
-
return
|
|
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 =
|
|
132
|
+
const svg = select(this.svgElement);
|
|
135
133
|
|
|
136
|
-
const doughnutArc =
|
|
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 =
|
|
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,
|
|
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(
|
|
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 =
|
|
177
|
-
const iEnd =
|
|
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(
|
|
198
|
-
.tween('text', function (this:
|
|
199
|
-
const sel =
|
|
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 =
|
|
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:
|
|
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:
|
|
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:
|
|
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,
|
|
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,
|
|
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(
|
|
250
|
+
.ease(easeCubicInOut)
|
|
255
251
|
.attr('points', pointsFn);
|
|
256
252
|
$labels
|
|
257
253
|
.transition()
|
|
258
254
|
.duration(DURATION)
|
|
259
|
-
.ease(
|
|
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?:
|
|
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
|
|
106
|
-
.pie<ChartPieItem>()
|
|
105
|
+
const pieGenerator = pie<ChartPieItem>()
|
|
107
106
|
.sort(null)
|
|
108
107
|
.value(d => d.value);
|
|
109
|
-
return
|
|
108
|
+
return pieGenerator(this.data);
|
|
110
109
|
}
|
|
111
110
|
|
|
112
111
|
private _getColorScale() {
|
|
113
|
-
return
|
|
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 =
|
|
125
|
+
const svg = select(this.svgElement);
|
|
128
126
|
|
|
129
|
-
const pieArc =
|
|
130
|
-
.arc<d3.PieArcDatum<ChartPieItem>>()
|
|
127
|
+
const pieArc = arc<PieArcDatum<ChartPieItem>>()
|
|
131
128
|
.innerRadius(0)
|
|
132
129
|
.outerRadius(radius);
|
|
133
130
|
|
|
134
|
-
const labelsArc =
|
|
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,
|
|
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(
|
|
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 =
|
|
170
|
-
const iEnd =
|
|
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:
|
|
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:
|
|
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:
|
|
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,
|
|
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,
|
|
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(
|
|
223
|
+
.ease(easeCubicInOut)
|
|
228
224
|
.attr('points', pointsFn);
|
|
229
225
|
$labels
|
|
230
226
|
.transition()
|
|
231
227
|
.duration(DURATION)
|
|
232
|
-
.ease(
|
|
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
|
-
.
|
|
55
|
-
position: absolute;
|
|
56
|
-
inset: 0;
|
|
54
|
+
.ripple {
|
|
57
55
|
border-radius: 50%;
|
|
58
|
-
|
|
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
|
-
|
|
119
|
-
|
|
120
|
-
|
|
115
|
+
&.state-checked .ripple,
|
|
116
|
+
&.state-indeterminate .ripple {
|
|
117
|
+
--ripple-pressed-color: var(--checkbox-selected-color);
|
|
121
118
|
}
|
|
119
|
+
}
|
|
122
120
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
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
|
-
|
|
132
|
-
|
|
133
|
-
|
|
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
|
-
|
|
151
|
-
|
|
152
|
-
|
|
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
|
|
package/src/checkbox/checkbox.ts
CHANGED
|
@@ -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
|
-
<
|
|
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">
|
|
@@ -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
|
+
}
|