@limetech/lime-crm-building-blocks 1.109.2 → 1.110.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/CHANGELOG.md +19 -0
- package/dist/cjs/lime-crm-building-blocks.cjs.js +1 -1
- package/dist/cjs/limebb-data-cells.cjs.entry.js +137 -0
- package/dist/cjs/limebb-feed-timeline-item.cjs.entry.js +21 -4
- package/dist/cjs/limebb-kanban-group.cjs.entry.js +1 -1
- package/dist/cjs/limebb-kanban-item.cjs.entry.js +6 -3
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/data-cells/data-cells.css +210 -0
- package/dist/collection/components/data-cells/data-cells.js +217 -0
- package/dist/collection/components/data-cells/data-cells.types.js +1 -0
- package/dist/collection/components/feed/feed-item/feed-timeline-item.js +21 -4
- package/dist/collection/components/kanban/kanban-group/kanban-group.css +6 -3
- package/dist/collection/components/kanban/kanban-item/kanban-item.css +2 -3
- package/dist/collection/components/kanban/kanban-item/kanban-item.js +5 -2
- package/dist/collection/components/kanban/kanban.js +1 -1
- package/dist/collection/util/format-relative-date.js +30 -0
- package/dist/components/feed-timeline-item.js +21 -4
- package/dist/components/kanban-group.js +1 -1
- package/dist/components/kanban-item.js +6 -3
- package/dist/components/limebb-data-cells.d.ts +11 -0
- package/dist/components/limebb-data-cells.js +162 -0
- package/dist/components/limebb-percentage-visualizer.js +1 -217
- package/dist/components/percentage-visualizer.js +219 -0
- package/dist/esm/lime-crm-building-blocks.js +1 -1
- package/dist/esm/limebb-data-cells.entry.js +133 -0
- package/dist/esm/limebb-feed-timeline-item.entry.js +21 -4
- package/dist/esm/limebb-kanban-group.entry.js +1 -1
- package/dist/esm/limebb-kanban-item.entry.js +6 -3
- package/dist/esm/loader.js +1 -1
- package/dist/lime-crm-building-blocks/lime-crm-building-blocks.esm.js +1 -1
- package/dist/lime-crm-building-blocks/p-37982f06.entry.js +1 -0
- package/dist/lime-crm-building-blocks/p-4584e9c8.entry.js +1 -0
- package/dist/lime-crm-building-blocks/{p-97678875.entry.js → p-b38bc613.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/p-b47a03cd.entry.js +1 -0
- package/dist/types/components/data-cells/data-cells.d.ts +43 -0
- package/dist/types/components/data-cells/data-cells.types.d.ts +40 -0
- package/dist/types/components/feed/feed-item/feed-timeline-item.d.ts +1 -0
- package/dist/types/components/kanban/kanban.d.ts +1 -1
- package/dist/types/components.d.ts +87 -4
- package/dist/types/util/format-relative-date.d.ts +10 -0
- package/package.json +3 -3
- package/dist/lime-crm-building-blocks/p-52fb8909.entry.js +0 -1
- package/dist/lime-crm-building-blocks/p-a8c47132.entry.js +0 -1
|
@@ -3,7 +3,7 @@ import { c } from './index.esm.js';
|
|
|
3
3
|
import { d as defineCustomElement$2 } from './navigation-button.js';
|
|
4
4
|
import { d as defineCustomElement$1 } from './summary-popover.js';
|
|
5
5
|
|
|
6
|
-
const kanbanItemCss = "@charset \"UTF-8\";*,*:before,*:after{box-sizing:border-box}:host(limebb-kanban-item){position:relative;box-sizing:border-box;display:flex;flex-direction:column;border-radius:0.5rem}:host(limebb-kanban-item):before{content:\"\";display:block;position:absolute;top:1rem;bottom:1rem;right:0;transform:translateX(50%);width:0.25rem;border-radius:1rem;background-color:var(--limebb-kanban-item-color-code)}.content{padding-top:0.25rem
|
|
6
|
+
const kanbanItemCss = "@charset \"UTF-8\";*,*:before,*:after{box-sizing:border-box}:host(limebb-kanban-item){position:relative;box-sizing:border-box;display:flex;flex-direction:column;border-radius:0.5rem}:host(limebb-kanban-item):before{content:\"\";display:block;position:absolute;top:1rem;bottom:1rem;right:0;transform:translateX(50%);width:0.25rem;border-radius:1rem;background-color:var(--limebb-kanban-item-color-code)}.content{padding-top:0.25rem}.header{display:flex;align-items:flex-start;gap:0.5rem;min-height:1.75rem;padding:0.25rem 0.5rem;border-radius:0.5rem 0.5rem 0 0;background-color:rgb(var(--contrast-300))}.header a{position:relative;cursor:pointer;transition:color 0.2s ease;color:var(--mdc-theme-primary);text-decoration:none}.header a:before{transition:opacity 0.2s ease, transform 0.3s ease-out;content:\"\";position:absolute;inset:auto 0 0 0;width:calc(100% - 0.5rem);margin:auto;height:0.125rem;border-radius:1rem;background-color:currentColor;opacity:0;transform:scale(0.6)}.header a:hover{color:rgb(var(--color-teal-light))}.header a:hover:before{opacity:0.3;transform:scale(1)}.heading{--markdown-hyperlink-color:var(--mdc-theme-primary);--markdown-hyperlink-color--hovered:rgb(var(--color-teal-light))}.unpromoted-actions-menu{margin:-0.5rem -0.5rem -0.25rem auto}.body{--limel-top-edge-fade-height:0.5rem;--limel-bottom-edge-fade-height:0.5rem;display:block;padding-left:0.5rem;padding-right:0.5rem;margin-top:-0.5rem;color:rgb(var(--contrast-1100));max-height:12rem;--limel-overflow-mask-vertical:linear-gradient(\n to bottom,\n transparent 0%,\n black calc(0% + var(--limel-top-edge-fade-height, 1rem)),\n black calc(100% - var(--limel-bottom-edge-fade-height, 1rem)),\n transparent 100%\n );-webkit-mask-image:var(--limel-overflow-mask-vertical);mask-image:var(--limel-overflow-mask-vertical);padding-top:var(--limel-top-edge-fade-height, 1rem);padding-bottom:var(--limel-bottom-edge-fade-height, 1rem)}limel-chip-set{--limel-chip-size:1.5rem;display:block;margin-left:-0.5rem;margin-right:0.5rem;padding-bottom:0.5rem}.footer{position:relative;display:flex;align-items:center;gap:0.5rem;padding:0.25rem 0.25rem 0.125rem;margin:0 0.25rem;border-top:1px dashed rgb(var(--contrast-300))}.header limel-icon,.footer limel-icon{flex-shrink:0;width:1.25rem;height:1.25rem}.header .actions{margin:0.5rem 0.25rem 0}.header .actions:hover{transition:color var(--limel-clickable-transition-speed, 0.4s) ease, background-color var(--limel-clickable-transition-speed, 0.4s) ease, box-shadow var(--limel-clickable-transform-speed, 0.4s) ease, transform var(--limel-clickable-transform-speed, 0.4s) var(--limel-clickable-transform-timing-function, ease);cursor:pointer;color:var(--limel-theme-on-surface-color);background-color:var(--lime-elevated-surface-background-color);box-shadow:var(--button-shadow-normal)}.header .actions:hover:hover,.header .actions:hover:focus,.header .actions:hover:focus-visible{will-change:color, background-color, box-shadow, transform}.header .actions:hover:hover,.header .actions:hover:focus-visible{transform:translate3d(0, -0.04rem, 0);color:var(--limel-theme-on-surface-color);background-color:var(--lime-elevated-surface-background-color);box-shadow:var(--button-shadow-hovered)}.header .actions:hover:active{--limel-clickable-transform-timing-function:cubic-bezier(\n 0.83,\n -0.15,\n 0.49,\n 1.16\n );transform:translate3d(0, 0.05rem, 0);box-shadow:var(--button-shadow-pressed)}.header .actions:hover:hover,.header .actions:hover:active{--limel-clickable-transition-speed:0.2s;--limel-clickable-transform-speed:0.16s}.footer img{border-radius:50%;object-fit:cover;box-shadow:0 0 0 1px rgb(var(--contrast-800), 0.4);flex-shrink:0;width:1.25rem;height:1.25rem}.assignees{display:flex;align-items:center;gap:0.25rem}.assignees:has(>:nth-child(2)) span{display:none}.assignees:has(>:nth-child(2)) img,.assignees:has(>:nth-child(2)) limel-icon{margin-right:-0.5rem}.assignees:hover img,.assignees:hover limel-icon,.assignees:focus-within img,.assignees:focus-within limel-icon{margin-right:0rem}.assignees:hover .assignee:not(:hover):not(:focus-visible) img,.assignees:hover .assignee:not(:hover):not(:focus-visible) limel-icon,.assignees:focus-within .assignee:not(:hover):not(:focus-visible) img,.assignees:focus-within .assignee:not(:hover):not(:focus-visible) limel-icon{filter:grayscale(1);opacity:0.6}.assignee{transition:color var(--limel-clickable-transition-speed, 0.4s) ease, background-color var(--limel-clickable-transition-speed, 0.4s) ease, box-shadow var(--limel-clickable-transform-speed, 0.4s) ease, transform var(--limel-clickable-transform-speed, 0.4s) var(--limel-clickable-transform-timing-function, ease);cursor:pointer;color:var(--limel-theme-on-surface-color);background-color:transparent;display:flex;align-items:center;text-decoration:none;gap:0.25rem;margin-left:0;border-radius:1rem}.assignee:hover,.assignee:focus,.assignee:focus-visible{will-change:color, background-color, box-shadow, transform}.assignee:hover,.assignee:focus-visible{transform:translate3d(0, 0.01rem, 0);color:var(--limel-theme-on-surface-color);background-color:var(--lime-elevated-surface-background-color)}.assignee:hover{box-shadow:var(--button-shadow-hovered)}.assignee:active{--limel-clickable-transform-timing-function:cubic-bezier(\n 0.83,\n -0.15,\n 0.49,\n 1.16\n );transform:translate3d(0, 0.05rem, 0);box-shadow:var(--button-shadow-pressed)}.assignee:hover,.assignee:active{--limel-clickable-transition-speed:0.2s;--limel-clickable-transform-speed:0.16s}.assignee:focus{outline:none}.assignee:focus-visible{outline:none;box-shadow:var(--shadow-depth-8-focused)}.assignee limel-icon,.assignee img{transition:margin 0.2s ease, opacity 0.2s ease, filter 0.2s ease}.assignee limel-icon{padding:0.125rem;box-shadow:0 0 0 1px rgb(var(--contrast-800), 0.4);background-color:rgb(var(--contrast-100))}.assignee span{font-size:0.75rem;color:rgb(var(--contrast-900));padding-right:0.5rem;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}slot[name=body]{display:block;padding:0.5rem}";
|
|
7
7
|
const LimebbKanbanItemStyle0 = kanbanItemCss;
|
|
8
8
|
|
|
9
9
|
const KanbanItemComponent = /*@__PURE__*/ proxyCustomElement(class KanbanItemComponent extends HTMLElement {
|
|
@@ -65,7 +65,7 @@ const KanbanItemComponent = /*@__PURE__*/ proxyCustomElement(class KanbanItemCom
|
|
|
65
65
|
'is-selected': !!((_b = this.item) === null || _b === void 0 ? void 0 : _b.selected),
|
|
66
66
|
}, style: {
|
|
67
67
|
'--limebb-kanban-item-color-code': `${this.item.color}`,
|
|
68
|
-
}, onClick: this.handleKanbanItemClick, onKeyDown: this.handleKeyDown }, this.renderHeader(), this.renderContent(), this.renderSlot(), this.renderFooter()));
|
|
68
|
+
}, onClick: this.handleKanbanItemClick, onKeyDown: this.handleKeyDown }, this.renderHeader(), this.renderContent(), this.renderSlot(), this.renderRelations(), this.renderFooter()));
|
|
69
69
|
}
|
|
70
70
|
renderHeader() {
|
|
71
71
|
return (h("div", { class: "header" }, this.renderIcon(), this.renderHeading(), this.renderUnpromotedActionsMenu()));
|
|
@@ -81,7 +81,10 @@ const KanbanItemComponent = /*@__PURE__*/ proxyCustomElement(class KanbanItemCom
|
|
|
81
81
|
} }));
|
|
82
82
|
}
|
|
83
83
|
renderContent() {
|
|
84
|
-
|
|
84
|
+
if (!this.item.value) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
return h("div", { class: "content" }, this.renderValue());
|
|
85
88
|
}
|
|
86
89
|
renderHeading() {
|
|
87
90
|
if (!this.item.heading) {
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Components, JSX } from "../types/components";
|
|
2
|
+
|
|
3
|
+
interface LimebbDataCells extends Components.LimebbDataCells, HTMLElement {}
|
|
4
|
+
export const LimebbDataCells: {
|
|
5
|
+
prototype: LimebbDataCells;
|
|
6
|
+
new (): LimebbDataCells;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Used to define this component and all nested components recursively.
|
|
10
|
+
*/
|
|
11
|
+
export const defineCustomElement: () => void;
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { proxyCustomElement, HTMLElement, h } from '@stencil/core/internal/client';
|
|
2
|
+
import { c } from './index.esm.js';
|
|
3
|
+
import { d as defineCustomElement$2 } from './percentage-visualizer.js';
|
|
4
|
+
|
|
5
|
+
const SECOND = 1000;
|
|
6
|
+
const MINUTE = 60 * SECOND;
|
|
7
|
+
const HOUR = 60 * MINUTE;
|
|
8
|
+
const DAY = 24 * HOUR;
|
|
9
|
+
const WEEK = 7 * DAY;
|
|
10
|
+
const MONTH = 30 * DAY;
|
|
11
|
+
const YEAR = 365 * DAY;
|
|
12
|
+
const units = [
|
|
13
|
+
{ unit: 'year', ms: YEAR },
|
|
14
|
+
{ unit: 'month', ms: MONTH },
|
|
15
|
+
{ unit: 'week', ms: WEEK },
|
|
16
|
+
{ unit: 'day', ms: DAY },
|
|
17
|
+
{ unit: 'hour', ms: HOUR },
|
|
18
|
+
{ unit: 'minute', ms: MINUTE },
|
|
19
|
+
{ unit: 'second', ms: SECOND },
|
|
20
|
+
];
|
|
21
|
+
/**
|
|
22
|
+
* Formats a date as a localized relative time expression,
|
|
23
|
+
* e.g. "3 days ago" or "in 2 months".
|
|
24
|
+
*
|
|
25
|
+
* Uses the browser's native `Intl.RelativeTimeFormat` API.
|
|
26
|
+
* @param date
|
|
27
|
+
* @param language
|
|
28
|
+
*/
|
|
29
|
+
function formatRelativeDate(date, language) {
|
|
30
|
+
var _a;
|
|
31
|
+
const diff = date.getTime() - Date.now();
|
|
32
|
+
const { unit, ms } = (_a = units.find((u) => Math.abs(diff) >= u.ms)) !== null && _a !== void 0 ? _a : units.at(-1);
|
|
33
|
+
return new Intl.RelativeTimeFormat(language, { style: 'long' }).format(Math.round(diff / ms), unit);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const dataCellsCss = "@charset \"UTF-8\";*,*:before,*:after{box-sizing:border-box;min-width:0;min-height:0}:host(limebb-data-cells){box-sizing:border-box;display:flex;flex-direction:column;gap:0.5rem;padding:var(--limebb-data-cells-padding)}div{display:flex;flex-direction:column}dl{display:flex;flex-wrap:wrap;gap:0.75rem 1rem;margin:0;padding:0;list-style:none}dd,dt{display:flex;align-items:center}dd span,dt span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}dd{margin:0;font-size:var(--limel-theme-default-font-size);line-height:1.25rem;height:1.25rem;font-weight:500;color:rgb(var(--contrast-1100))}dd a{text-decoration:none;border-radius:1.25rem}dd a:focus{outline:none}dd a:focus-visible{outline:none;box-shadow:var(--shadow-depth-8-focused)}dd a:not(.belongs-to){position:relative;cursor:pointer;transition:color 0.2s ease;color:rgb(var(--color-blue-default))}dd a:not(.belongs-to):before{transition:opacity 0.2s ease, transform 0.3s ease-out;content:\"\";position:absolute;inset:auto 0 0 0;width:calc(100% - 0.5rem);margin:auto;height:0.125rem;border-radius:1rem;background-color:currentColor;opacity:0;transform:scale(0.6)}dd a:not(.belongs-to):hover{color:rgb(var(--color-blue-default))}dd a:not(.belongs-to):hover:before{opacity:0.3;transform:scale(1)}dd a.belongs-to{transition:color var(--limel-clickable-transition-speed, 0.4s) ease, background-color var(--limel-clickable-transition-speed, 0.4s) ease, box-shadow var(--limel-clickable-transform-speed, 0.4s) ease, transform var(--limel-clickable-transform-speed, 0.4s) var(--limel-clickable-transform-timing-function, ease);color:inherit;background-color:rgb(var(--contrast-400));padding:1px 0.375rem}dd a.belongs-to:hover,dd a.belongs-to:focus-visible{color:rgb(var(--color-white));background-color:rgb(var(--color-sky-default))}dd:has(.belongs-to){transform:translateX(-0.375rem)}dt{order:1;transition:color 0.2s ease;font-size:0.65rem;color:rgb(var(--contrast-800))}:host(:hover) dt,:host(:focus-within) dt{color:rgb(var(--contrast-900))}.primary+.secondary{padding-top:0.5rem;border-top:1px dashed rgb(var(--contrast-500))}.secondary dd{font-size:0.75rem;font-weight:400;line-height:1rem;height:1rem}";
|
|
37
|
+
const LimebbDataCellsStyle0 = dataCellsCss;
|
|
38
|
+
|
|
39
|
+
const DataCells = /*@__PURE__*/ proxyCustomElement(class DataCells extends HTMLElement {
|
|
40
|
+
constructor() {
|
|
41
|
+
super();
|
|
42
|
+
this.__registerHost();
|
|
43
|
+
this.__attachShadow();
|
|
44
|
+
/**
|
|
45
|
+
* The data cells to render.
|
|
46
|
+
*/
|
|
47
|
+
this.items = [];
|
|
48
|
+
this.renderCell = (item) => (h("div", null, h("dt", null, h("span", null, item.label)), h("dd", null, h("span", null, this.renderValue(item)))));
|
|
49
|
+
}
|
|
50
|
+
render() {
|
|
51
|
+
return [this.renderPrimary(), this.renderSecondary()];
|
|
52
|
+
}
|
|
53
|
+
renderPrimary() {
|
|
54
|
+
const items = this.items.filter((item) => item.value != null && item.value !== '' && !item.secondary);
|
|
55
|
+
if (items.length === 0) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
return h("dl", { class: "primary" }, items.map(this.renderCell));
|
|
59
|
+
}
|
|
60
|
+
renderSecondary() {
|
|
61
|
+
const items = this.items.filter((item) => item.value != null && item.value !== '' && item.secondary);
|
|
62
|
+
if (items.length === 0) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
return h("dl", { class: "secondary" }, items.map(this.renderCell));
|
|
66
|
+
}
|
|
67
|
+
renderValue(item) {
|
|
68
|
+
if (item.type === 'belongsto') {
|
|
69
|
+
const href = this.getBelongsToHref(item.field);
|
|
70
|
+
if (!href) {
|
|
71
|
+
return item.value;
|
|
72
|
+
}
|
|
73
|
+
return (h("a", { class: "belongs-to", href: href }, item.value));
|
|
74
|
+
}
|
|
75
|
+
if (item.type === 'phone') {
|
|
76
|
+
return h("a", { href: this.toTelUri(item.value) }, item.value);
|
|
77
|
+
}
|
|
78
|
+
if (item.type === 'email') {
|
|
79
|
+
return h("a", { href: `mailto:${item.value}` }, item.value);
|
|
80
|
+
}
|
|
81
|
+
if (item.type === 'link') {
|
|
82
|
+
return (h("a", { href: this.ensureUrlProtocol(item.value), target: "_blank", rel: "noopener" }, this.stripUrlPrefix(item.value)));
|
|
83
|
+
}
|
|
84
|
+
if (item.type === 'time' || item.type === 'date') {
|
|
85
|
+
return formatRelativeDate(new Date(item.value), this.language);
|
|
86
|
+
}
|
|
87
|
+
if (item.type === 'percent') {
|
|
88
|
+
return (h("limebb-percentage-visualizer", { value: Number(item.value), multiplier: 100, displayPercentageColors: true, reducePresence: false }));
|
|
89
|
+
}
|
|
90
|
+
return item.value;
|
|
91
|
+
}
|
|
92
|
+
toTelUri(phoneNumber) {
|
|
93
|
+
return `tel:${phoneNumber.replaceAll(' ', '')}`;
|
|
94
|
+
}
|
|
95
|
+
ensureUrlProtocol(url) {
|
|
96
|
+
if (/^https?:\/\//i.test(url)) {
|
|
97
|
+
return url;
|
|
98
|
+
}
|
|
99
|
+
return `https://${url}`;
|
|
100
|
+
}
|
|
101
|
+
stripUrlPrefix(url) {
|
|
102
|
+
return url.replace(/^https?:\/\//, '').replace(/^www\./, '');
|
|
103
|
+
}
|
|
104
|
+
getBelongsToHref(field) {
|
|
105
|
+
var _a;
|
|
106
|
+
if (!this.limeobject || !field) {
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
const relatedObject = this.limeobject.getValue(field);
|
|
111
|
+
if (!relatedObject || typeof relatedObject !== 'object') {
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
const limetype = (_a = relatedObject.getLimetype) === null || _a === void 0 ? void 0 : _a.call(relatedObject);
|
|
115
|
+
if (!(limetype === null || limetype === void 0 ? void 0 : limetype.name) || !relatedObject.id) {
|
|
116
|
+
return undefined;
|
|
117
|
+
}
|
|
118
|
+
return `object/${limetype.name}/${relatedObject.id}`;
|
|
119
|
+
}
|
|
120
|
+
catch (_b) {
|
|
121
|
+
return undefined;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
get language() {
|
|
125
|
+
var _a;
|
|
126
|
+
try {
|
|
127
|
+
return (_a = this.platform) === null || _a === void 0 ? void 0 : _a.get(c.Application).getLanguage();
|
|
128
|
+
}
|
|
129
|
+
catch (_b) {
|
|
130
|
+
return navigator.language;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
static get style() { return LimebbDataCellsStyle0; }
|
|
134
|
+
}, [1, "limebb-data-cells", {
|
|
135
|
+
"platform": [16],
|
|
136
|
+
"context": [16],
|
|
137
|
+
"limeobject": [8],
|
|
138
|
+
"items": [16]
|
|
139
|
+
}]);
|
|
140
|
+
function defineCustomElement$1() {
|
|
141
|
+
if (typeof customElements === "undefined") {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
const components = ["limebb-data-cells", "limebb-percentage-visualizer"];
|
|
145
|
+
components.forEach(tagName => { switch (tagName) {
|
|
146
|
+
case "limebb-data-cells":
|
|
147
|
+
if (!customElements.get(tagName)) {
|
|
148
|
+
customElements.define(tagName, DataCells);
|
|
149
|
+
}
|
|
150
|
+
break;
|
|
151
|
+
case "limebb-percentage-visualizer":
|
|
152
|
+
if (!customElements.get(tagName)) {
|
|
153
|
+
defineCustomElement$2();
|
|
154
|
+
}
|
|
155
|
+
break;
|
|
156
|
+
} });
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
const LimebbDataCells = DataCells;
|
|
160
|
+
const defineCustomElement = defineCustomElement$1;
|
|
161
|
+
|
|
162
|
+
export { LimebbDataCells, defineCustomElement };
|
|
@@ -1,220 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { g as getPercentageClass } from './percentage-class.js';
|
|
3
|
-
|
|
4
|
-
const percentageVisualizerCss = "@charset \"UTF-8\";*,::before,::after{box-sizing:border-box}:host(limebb-percentage-visualizer){width:100%}limel-notched-outline:not([invalid]:not([invalid=false])) .limel-notched-outline--outlines{--limel-notched-outline-border-color:transparent}div[slot=content]{display:flex;align-items:center;gap:0.5rem;border-radius:inherit;background-color:transparent !important}div[slot=content]:focus{outline:none}div[slot=content]:focus-visible{outline:none;box-shadow:var(--shadow-depth-8-focused)}:host(limebb-percentage-visualizer[invalid]:not([invalid=false])) div[slot=content]{border-color:rgb(var(--color-red-default))}:host(limebb-percentage-visualizer):has(label) div[slot=content]{min-height:2.5rem;padding:0 0.375rem 0 1rem}.percentage-text{flex-shrink:0;min-width:2.5rem}:host([range-min^=\"-\"]) .percentage-text{min-width:3.75rem}.percent-sign{opacity:0.4}.zero-point{content:\"\";position:absolute;transform:translateX(-50%);left:var(--limebb-percentage-visualizer-zero-point-position);height:0.25rem;width:0.25rem;border-radius:50%;box-shadow:0 0 0 0.125rem var(--limebb-percentage-visualizer-zero-point-color, rgb(var(--contrast-1200), 0.3));background-color:var(--limebb-percentage-visualizer-zero-point-color, rgb(var(--contrast-200), 0.9))}.percentage-bar{overflow:hidden;flex-grow:1;position:relative;display:flex;align-items:center;height:0.5rem;min-width:2rem;border-radius:0.5rem;background-color:rgb(var(--contrast-800), 0.6)}.percentage-fill{transition:width 0.2s ease;position:absolute;margin:auto;left:var(--limebb-percentage-visualizer-zero-point-position, 0);rotate:var(--limebb-percentage-visualizer-rotate, 0deg);transform-origin:left center;width:var(--limebb-percentage-visualizer-width);height:100%;border-radius:0.5rem}:host(limebb-percentage-visualizer:focus),:host(limebb-percentage-visualizer:focus-visible),:host(limebb-percentage-visualizer:focus-within){--limel-h-l-grid-template-rows-transition-speed:0.46s;--limel-h-l-grid-template-rows:1fr}:host(limebb-percentage-visualizer){--limel-h-l-grid-template-rows-transition-speed:0.3s;--limel-h-l-grid-template-rows:0fr}:host(limebb-percentage-visualizer:focus) limel-helper-line,:host(limebb-percentage-visualizer:focus-visible) limel-helper-line,:host(limebb-percentage-visualizer:focus-within) limel-helper-line,:host(limebb-percentage-visualizer:hover) limel-helper-line{will-change:grid-template-rows}.percentage-fill{background-color:var(--percentage-visualizer-color, var(--limebb-percentage-visualizer-color, var(--mdc-theme-primary)))}:host([range-min^=\"-\"][display-percentage-colors]:not([display-percentage-colors=false]).has-value-200or-larger-negative) .percentage-fill{--limebb-percentage-visualizer-color:rgb(var(--color-red-darker))}:host([range-min^=\"-\"][display-percentage-colors]:not([display-percentage-colors=false]).has-value-200to100-negative) .percentage-fill{--limebb-percentage-visualizer-color:rgb(var(--color-red-dark))}:host([range-min^=\"-\"][display-percentage-colors]:not([display-percentage-colors=false]).has-value-100to90-negative) .percentage-fill{--limebb-percentage-visualizer-color:rgb(var(--color-red-dark))}:host([range-min^=\"-\"][display-percentage-colors]:not([display-percentage-colors=false]).has-value-90to80-negative) .percentage-fill{--limebb-percentage-visualizer-color:rgb(var(--color-red-dark))}:host([range-min^=\"-\"][display-percentage-colors]:not([display-percentage-colors=false]).has-value-80to70-negative) .percentage-fill{--limebb-percentage-visualizer-color:rgb(var(--color-red-default))}:host([range-min^=\"-\"][display-percentage-colors]:not([display-percentage-colors=false]).has-value-70to60-negative) .percentage-fill{--limebb-percentage-visualizer-color:rgb(var(--color-red-default))}:host([range-min^=\"-\"][display-percentage-colors]:not([display-percentage-colors=false]).has-value-60to50-negative) .percentage-fill{--limebb-percentage-visualizer-color:rgb(var(--color-coral-default))}:host([range-min^=\"-\"][display-percentage-colors]:not([display-percentage-colors=false]).has-value-50to40-negative) .percentage-fill{--limebb-percentage-visualizer-color:rgb(var(--color-coral-default))}:host([range-min^=\"-\"][display-percentage-colors]:not([display-percentage-colors=false]).has-value-40to30-negative) .percentage-fill{--limebb-percentage-visualizer-color:rgb(var(--color-orange-default))}:host([range-min^=\"-\"][display-percentage-colors]:not([display-percentage-colors=false]).has-value-30to20-negative) .percentage-fill{--limebb-percentage-visualizer-color:rgb(var(--color-orange-default))}:host([range-min^=\"-\"][display-percentage-colors]:not([display-percentage-colors=false]).has-value-20to10-negative) .percentage-fill{--limebb-percentage-visualizer-color:rgb(var(--color-amber-default))}:host([range-min^=\"-\"][display-percentage-colors]:not([display-percentage-colors=false]).has-value-10to0-negative) .percentage-fill{--limebb-percentage-visualizer-color:rgb(var(--color-amber-default))}:host([range-min^=\"-\"][display-percentage-colors]:not([display-percentage-colors=false]).has-value-0) .percentage-fill{--limebb-percentage-visualizer-color:rgb(var(--contrast-800))}:host([range-min^=\"-\"][display-percentage-colors]:not([display-percentage-colors=false]).has-value-0to10-positive) .percentage-fill{--limebb-percentage-visualizer-color:rgb(var(--color-yellow-default))}:host([range-min^=\"-\"][display-percentage-colors]:not([display-percentage-colors=false]).has-value-10to20-positive) .percentage-fill{--limebb-percentage-visualizer-color:rgb(var(--color-yellow-default))}:host([range-min^=\"-\"][display-percentage-colors]:not([display-percentage-colors=false]).has-value-20to30-positive) .percentage-fill{--limebb-percentage-visualizer-color:rgb(var(--color-grass-default))}:host([range-min^=\"-\"][display-percentage-colors]:not([display-percentage-colors=false]).has-value-30to40-positive) .percentage-fill{--limebb-percentage-visualizer-color:rgb(var(--color-grass-default))}:host([range-min^=\"-\"][display-percentage-colors]:not([display-percentage-colors=false]).has-value-40to50-positive) .percentage-fill{--limebb-percentage-visualizer-color:rgb(var(--color-lime-default))}:host([range-min^=\"-\"][display-percentage-colors]:not([display-percentage-colors=false]).has-value-50to60-positive) .percentage-fill{--limebb-percentage-visualizer-color:rgb(var(--color-lime-default))}:host([range-min^=\"-\"][display-percentage-colors]:not([display-percentage-colors=false]).has-value-60to70-positive) .percentage-fill{--limebb-percentage-visualizer-color:rgb(var(--color-teal-default))}:host([range-min^=\"-\"][display-percentage-colors]:not([display-percentage-colors=false]).has-value-70to80-positive) .percentage-fill{--limebb-percentage-visualizer-color:rgb(var(--color-teal-default))}:host([range-min^=\"-\"][display-percentage-colors]:not([display-percentage-colors=false]).has-value-80to90-positive) .percentage-fill{--limebb-percentage-visualizer-color:rgb(var(--color-teal-dark))}:host([range-min^=\"-\"][display-percentage-colors]:not([display-percentage-colors=false]).has-value-90to100-positive) .percentage-fill{--limebb-percentage-visualizer-color:rgb(var(--color-teal-dark))}:host([range-min^=\"-\"][display-percentage-colors]:not([display-percentage-colors=false]).has-value-100to200-positive) .percentage-fill{--limebb-percentage-visualizer-color:rgb(var(--color-teal-dark))}:host([range-min^=\"-\"][display-percentage-colors]:not([display-percentage-colors=false]).has-value-200or-larger-positive) .percentage-fill{--limebb-percentage-visualizer-color:rgb(var(--color-teal-darker))}:host([display-percentage-colors]:not([display-percentage-colors=false]).has-value-0) .percentage-fill{--limebb-percentage-visualizer-color:rgb(var(--contrast-800))}:host([display-percentage-colors]:not([display-percentage-colors=false]).has-value-0to10-positive) .percentage-fill{--limebb-percentage-visualizer-color:var(--color-percent--0to10)}:host([display-percentage-colors]:not([display-percentage-colors=false]).has-value-10to20-positive) .percentage-fill{--limebb-percentage-visualizer-color:var(--color-percent--10to20)}:host([display-percentage-colors]:not([display-percentage-colors=false]).has-value-20to30-positive) .percentage-fill{--limebb-percentage-visualizer-color:var(--color-percent--20to30)}:host([display-percentage-colors]:not([display-percentage-colors=false]).has-value-30to40-positive) .percentage-fill{--limebb-percentage-visualizer-color:var(--color-percent--30to40)}:host([display-percentage-colors]:not([display-percentage-colors=false]).has-value-40to50-positive) .percentage-fill{--limebb-percentage-visualizer-color:var(--color-percent--40to50)}:host([display-percentage-colors]:not([display-percentage-colors=false]).has-value-50to60-positive) .percentage-fill{--limebb-percentage-visualizer-color:var(--color-percent--50to60)}:host([display-percentage-colors]:not([display-percentage-colors=false]).has-value-60to70-positive) .percentage-fill{--limebb-percentage-visualizer-color:var(--color-percent--60to70)}:host([display-percentage-colors]:not([display-percentage-colors=false]).has-value-70to80-positive) .percentage-fill{--limebb-percentage-visualizer-color:var(--color-percent--70to80)}:host([display-percentage-colors]:not([display-percentage-colors=false]).has-value-80to90-positive) .percentage-fill{--limebb-percentage-visualizer-color:var(--color-percent--80to90)}:host([display-percentage-colors]:not([display-percentage-colors=false]).has-value-90to100-positive) .percentage-fill{--limebb-percentage-visualizer-color:var(--color-percent--90to100)}:host([display-percentage-colors]:not([display-percentage-colors=false]).has-value-100to200-positive) .percentage-fill{--limebb-percentage-visualizer-color:rgb(var(--color-teal-dark))}:host([display-percentage-colors]:not([display-percentage-colors=false]).has-value-200or-larger-positive) .percentage-fill{--limebb-percentage-visualizer-color:rgb(var(--color-teal-darker))}";
|
|
5
|
-
const LimebbPercentageVisualizerStyle0 = percentageVisualizerCss;
|
|
6
|
-
|
|
7
|
-
const DEFAULT_MULTIPLIER_FACTOR = 1;
|
|
8
|
-
const DEFAULT_RANGE_MAX = 100;
|
|
9
|
-
const DEFAULT_RANGE_MIN = 0;
|
|
10
|
-
const PERCENTAGE = 100;
|
|
11
|
-
const DECIMALS = 10;
|
|
12
|
-
const EPSILON = 0.0001;
|
|
13
|
-
const PercentageVisualizer = /*@__PURE__*/ proxyCustomElement(class PercentageVisualizer extends HTMLElement {
|
|
14
|
-
valueChanged(newValue) {
|
|
15
|
-
this.numValue = this.parseValue(newValue);
|
|
16
|
-
}
|
|
17
|
-
constructor() {
|
|
18
|
-
super();
|
|
19
|
-
this.__registerHost();
|
|
20
|
-
this.__attachShadow();
|
|
21
|
-
/**
|
|
22
|
-
* The maximum value of the visualization range.
|
|
23
|
-
* This defines the upper bound of the scale used for visualization.
|
|
24
|
-
* Must be greater than rangeMin.
|
|
25
|
-
*/
|
|
26
|
-
this.rangeMax = DEFAULT_RANGE_MAX;
|
|
27
|
-
/**
|
|
28
|
-
* The minimum value of the visualization range.
|
|
29
|
-
* This defines the lower bound of the scale used for visualization.
|
|
30
|
-
* Must be less than rangeMax.
|
|
31
|
-
*/
|
|
32
|
-
this.rangeMin = DEFAULT_RANGE_MIN;
|
|
33
|
-
/**
|
|
34
|
-
* A multiplier factor to convert input values to percentages.
|
|
35
|
-
* For example, if your input is 0.75 and you want to display it as 75%, use a multiplier of 100.
|
|
36
|
-
*/
|
|
37
|
-
this.multiplier = DEFAULT_MULTIPLIER_FACTOR;
|
|
38
|
-
/**
|
|
39
|
-
* When set to `false`, if the `value` equals `0` or there is no value
|
|
40
|
-
* (_undefined_, _null_ or empty string), the component will
|
|
41
|
-
* render the visualization. See the examples for more details.
|
|
42
|
-
*/
|
|
43
|
-
this.reducePresence = true;
|
|
44
|
-
/**
|
|
45
|
-
* When set to `true`, makes the filled section showing the percentage colorful.
|
|
46
|
-
* Colors change follow Lime CRM's conventions:
|
|
47
|
-
* - with intervals of 10%, from 0% to 100% (when the range doesn't start with a negative value).
|
|
48
|
-
* - with intervals of 20%, from -200% to +200% (when the range starts with a negative value).
|
|
49
|
-
*/
|
|
50
|
-
this.displayPercentageColors = false;
|
|
51
|
-
this.labelId = 'label-' + crypto.randomUUID();
|
|
52
|
-
this.helperTextId = 'helper-text-' + crypto.randomUUID();
|
|
53
|
-
this.zeroPointId = 'zero-point-' + crypto.randomUUID();
|
|
54
|
-
this.renderHelperLine = () => {
|
|
55
|
-
if (!this.hasHelperText()) {
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
return (h("limel-helper-line", { helperTextId: this.helperTextId, helperText: this.helperText, invalid: this.invalid }));
|
|
59
|
-
};
|
|
60
|
-
this.hasHelperText = () => {
|
|
61
|
-
return this.helperText !== null && this.helperText !== undefined;
|
|
62
|
-
};
|
|
63
|
-
this.numValue = this.parseValue(this.value);
|
|
64
|
-
}
|
|
65
|
-
componentDidLoad() {
|
|
66
|
-
this.triggerRangeWarning();
|
|
67
|
-
}
|
|
68
|
-
componentWillUpdate() {
|
|
69
|
-
this.triggerRangeWarning();
|
|
70
|
-
}
|
|
71
|
-
triggerRangeWarning() {
|
|
72
|
-
if (this.rangeMin >= this.rangeMax) {
|
|
73
|
-
console.warn(`[limebb-percentage-visualizer] Invalid range: rangeMin (${this.rangeMin}) must be less than rangeMax (${this.rangeMax}). Visualization may not appear as expected.`);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
render() {
|
|
77
|
-
const normalizedValue = this.getNormalizedValue();
|
|
78
|
-
const zeroPoint = this.getZeroPointPosition();
|
|
79
|
-
return (h(Host, { key: 'a99a367379f75613f8f37824fae64d5425e13c92', class: this.getContainerClassList(), style: {
|
|
80
|
-
'--limebb-percentage-visualizer-zero-point-position': `${zeroPoint}%`,
|
|
81
|
-
'--limebb-percentage-visualizer-width': `${Math.abs(normalizedValue)}%`,
|
|
82
|
-
'--limebb-percentage-visualizer-rotate': `${normalizedValue >= 0 ? '0deg' : '180deg'}`,
|
|
83
|
-
} }, h("limel-notched-outline", { key: '498c23ad0ddd79219de646286f9958a84c2592c9', tabIndex: 0, role: "meter", "aria-valuemin": this.rangeMin, "aria-valuemax": this.rangeMax, "aria-valuenow": this.numValue, "aria-labelledby": this.labelId, "aria-describedby": this.helperTextId, label: this.label, labelId: this.labelId, invalid: this.invalid, required: this.required, hasValue: true, hasFloatingLabel: true, "aria-controls": this.helperTextId }, h("div", { key: 'f8ba78a9b92bb93fc107e04f3001413c7560431b', slot: "content" }, this.renderVisualization())), this.renderHelperLine()));
|
|
84
|
-
}
|
|
85
|
-
renderVisualization() {
|
|
86
|
-
if (this.reducePresence && (this.numValue === 0 || !this.hasValue())) {
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
if (!this.hasValue()) {
|
|
90
|
-
return h("span", { class: "no-value" }, "\u2013");
|
|
91
|
-
}
|
|
92
|
-
return [
|
|
93
|
-
h("div", { class: "percentage-bar" }, h("div", { class: "percentage-fill" }), this.renderZeroPoint()),
|
|
94
|
-
h("span", { class: "percentage-text" }, this.formatValue(this.numValue), h("span", { class: "percent-sign" }, "%")),
|
|
95
|
-
];
|
|
96
|
-
}
|
|
97
|
-
renderZeroPoint() {
|
|
98
|
-
if (this.rangeMin >= 0 || this.rangeMax <= 0) {
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
return [
|
|
102
|
-
h("div", { id: this.zeroPointId, class: "zero-point" }),
|
|
103
|
-
h("limel-tooltip", { elementId: this.zeroPointId, openDirection: "top", label: "0" }),
|
|
104
|
-
];
|
|
105
|
-
}
|
|
106
|
-
hasValue() {
|
|
107
|
-
return (this.value !== undefined && this.value !== null && this.value !== '');
|
|
108
|
-
}
|
|
109
|
-
getContainerClassList() {
|
|
110
|
-
if (!this.hasValue()) {
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
const processedValue = this.roundValue(this.multiplyByMultiplier(this.numValue));
|
|
114
|
-
const percentageClass = getPercentageClass(processedValue);
|
|
115
|
-
return Object.assign({}, (percentageClass && { [percentageClass]: true }));
|
|
116
|
-
}
|
|
117
|
-
getZeroPointPosition() {
|
|
118
|
-
const totalRange = this.rangeMax - this.rangeMin;
|
|
119
|
-
if (totalRange <= 0) {
|
|
120
|
-
// Handle invalid range by providing a safe default
|
|
121
|
-
return 0; // Align zero point at the start as a consistent fallback
|
|
122
|
-
}
|
|
123
|
-
return ((0 - this.rangeMin) / totalRange) * PERCENTAGE;
|
|
124
|
-
}
|
|
125
|
-
getNormalizedValue() {
|
|
126
|
-
const processedValue = this.roundValue(this.multiplyByMultiplier(this.numValue));
|
|
127
|
-
const totalRange = this.rangeMax - this.rangeMin;
|
|
128
|
-
if (totalRange <= 0) {
|
|
129
|
-
return 0;
|
|
130
|
-
}
|
|
131
|
-
const zeroRelativePosition = ((0 - this.rangeMin) / totalRange) * PERCENTAGE;
|
|
132
|
-
// Calculate the position relative to the zero point
|
|
133
|
-
// Using the EPSILON value serves several purposes:
|
|
134
|
-
// 1. Prevents Division by Zero:
|
|
135
|
-
// If this.maxValue or this.minValue is exactly 0,
|
|
136
|
-
// we'd get an infinity or NaN result without this protection.
|
|
137
|
-
// 2. Handles Edge Cases:
|
|
138
|
-
// Even though we validate that minValue < maxValue,
|
|
139
|
-
// there could still be cases where one of them is very close to zero,
|
|
140
|
-
// which could cause unstable calculations.
|
|
141
|
-
// 3. Defensive Programming:
|
|
142
|
-
// It ensures that the component degrades gracefully
|
|
143
|
-
// even in unexpected scenarios (like when a consumer sets maxValue to 0).
|
|
144
|
-
// .4 Numerical Stability:
|
|
145
|
-
// In floating-point math, using a small epsilon value
|
|
146
|
-
// is a best practice to avoid precision issues.
|
|
147
|
-
if (processedValue >= 0) {
|
|
148
|
-
return ((processedValue / Math.max(this.rangeMax, EPSILON)) *
|
|
149
|
-
(PERCENTAGE - zeroRelativePosition));
|
|
150
|
-
}
|
|
151
|
-
else {
|
|
152
|
-
return ((processedValue / Math.max(Math.abs(this.rangeMin), EPSILON)) *
|
|
153
|
-
zeroRelativePosition);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
multiplyByMultiplier(value) {
|
|
157
|
-
return value * this.multiplier;
|
|
158
|
-
}
|
|
159
|
-
roundValue(value) {
|
|
160
|
-
// Round to 1 decimal place
|
|
161
|
-
return Math.round(value * DECIMALS) / DECIMALS;
|
|
162
|
-
}
|
|
163
|
-
unifyMinusSign(input) {
|
|
164
|
-
// Replace Unicode minus sign (−) with ASCII hyphen-minus (-)
|
|
165
|
-
return input.replaceAll('−', '-');
|
|
166
|
-
}
|
|
167
|
-
convertToUnicodeMinus(input) {
|
|
168
|
-
// Replace ASCII hyphen-minus (-) with Unicode minus sign (−)
|
|
169
|
-
return input.replaceAll('-', '−');
|
|
170
|
-
}
|
|
171
|
-
parseValue(value) {
|
|
172
|
-
if (typeof value === 'string') {
|
|
173
|
-
return Number.parseFloat(this.unifyMinusSign(value));
|
|
174
|
-
}
|
|
175
|
-
return value;
|
|
176
|
-
}
|
|
177
|
-
formatValue(value) {
|
|
178
|
-
const processedValue = this.roundValue(this.multiplyByMultiplier(value));
|
|
179
|
-
const constructedValue = `${processedValue}`;
|
|
180
|
-
if (processedValue < 0) {
|
|
181
|
-
return this.convertToUnicodeMinus(constructedValue);
|
|
182
|
-
}
|
|
183
|
-
return constructedValue;
|
|
184
|
-
}
|
|
185
|
-
static get watchers() { return {
|
|
186
|
-
"value": ["valueChanged"]
|
|
187
|
-
}; }
|
|
188
|
-
static get style() { return LimebbPercentageVisualizerStyle0; }
|
|
189
|
-
}, [1, "limebb-percentage-visualizer", {
|
|
190
|
-
"platform": [16],
|
|
191
|
-
"context": [16],
|
|
192
|
-
"value": [520],
|
|
193
|
-
"rangeMax": [514, "range-max"],
|
|
194
|
-
"rangeMin": [514, "range-min"],
|
|
195
|
-
"multiplier": [514],
|
|
196
|
-
"label": [513],
|
|
197
|
-
"invalid": [516],
|
|
198
|
-
"required": [516],
|
|
199
|
-
"helperText": [513, "helper-text"],
|
|
200
|
-
"reducePresence": [516, "reduce-presence"],
|
|
201
|
-
"displayPercentageColors": [516, "display-percentage-colors"]
|
|
202
|
-
}, undefined, {
|
|
203
|
-
"value": ["valueChanged"]
|
|
204
|
-
}]);
|
|
205
|
-
function defineCustomElement$1() {
|
|
206
|
-
if (typeof customElements === "undefined") {
|
|
207
|
-
return;
|
|
208
|
-
}
|
|
209
|
-
const components = ["limebb-percentage-visualizer"];
|
|
210
|
-
components.forEach(tagName => { switch (tagName) {
|
|
211
|
-
case "limebb-percentage-visualizer":
|
|
212
|
-
if (!customElements.get(tagName)) {
|
|
213
|
-
customElements.define(tagName, PercentageVisualizer);
|
|
214
|
-
}
|
|
215
|
-
break;
|
|
216
|
-
} });
|
|
217
|
-
}
|
|
1
|
+
import { P as PercentageVisualizer, d as defineCustomElement$1 } from './percentage-visualizer.js';
|
|
218
2
|
|
|
219
3
|
const LimebbPercentageVisualizer = PercentageVisualizer;
|
|
220
4
|
const defineCustomElement = defineCustomElement$1;
|