@brightspot/ui 1.1.0 → 1.3.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 (133) hide show
  1. package/README.md +3 -90
  2. package/dist/LucideDynamicLoader.d.ts +1 -0
  3. package/dist/LucideDynamicLoader.d.ts.map +1 -1
  4. package/dist/LucideDynamicLoader.js +2 -0
  5. package/dist/LucideDynamicLoader.js.map +1 -1
  6. package/dist/LucideDynamicLoader.ts +3 -0
  7. package/dist/components/avatar/Avatar.d.ts +1 -1
  8. package/dist/components/avatar/Avatar.js +2 -2
  9. package/dist/components/avatar/Avatar.js.map +1 -1
  10. package/dist/components/avatar/AvatarGroup.d.ts +1 -1
  11. package/dist/components/avatar/AvatarGroup.js +2 -2
  12. package/dist/components/avatar/AvatarGroup.js.map +1 -1
  13. package/dist/components/badge/Badge.d.ts +1 -1
  14. package/dist/components/badge/Badge.js +2 -2
  15. package/dist/components/badge/Badge.js.map +1 -1
  16. package/dist/components/circular-progress/CircularProgress.d.ts +57 -0
  17. package/dist/components/circular-progress/CircularProgress.d.ts.map +1 -0
  18. package/dist/components/circular-progress/CircularProgress.js +173 -0
  19. package/dist/components/circular-progress/CircularProgress.js.map +1 -0
  20. package/dist/components/copy-to-clipboard/CopyToClipboard.d.ts +57 -0
  21. package/dist/components/copy-to-clipboard/CopyToClipboard.d.ts.map +1 -0
  22. package/dist/components/copy-to-clipboard/CopyToClipboard.js +84 -0
  23. package/dist/components/copy-to-clipboard/CopyToClipboard.js.map +1 -0
  24. package/dist/components/icon/Icon.d.ts +90 -0
  25. package/dist/components/icon/Icon.d.ts.map +1 -0
  26. package/dist/components/icon/Icon.js +172 -0
  27. package/dist/components/icon/Icon.js.map +1 -0
  28. package/dist/components/linear-progress/LinearProgress.d.ts +40 -0
  29. package/dist/components/linear-progress/LinearProgress.d.ts.map +1 -0
  30. package/dist/components/linear-progress/LinearProgress.js +95 -0
  31. package/dist/components/linear-progress/LinearProgress.js.map +1 -0
  32. package/dist/custom-elements.json +455 -6
  33. package/dist/global.d.ts +4 -0
  34. package/dist/storybook/assets/{Avatar.stories-BONZm4v8.js → Avatar.stories-CpXI9mXR.js} +2 -2
  35. package/dist/storybook/assets/{AvatarGroup.stories-DDKujPh2.js → AvatarGroup.stories-D4NymG47.js} +1 -1
  36. package/dist/storybook/assets/{Badge.stories-C8Ahfpp6.js → Badge.stories-BP4Yixze.js} +5 -18
  37. package/dist/storybook/assets/Button.stories-DDpQzCOq.js +63 -0
  38. package/dist/storybook/assets/CircularProgress.stories-B82LXwfS.js +451 -0
  39. package/dist/storybook/assets/ClipboardMixin.stories-Cr3efF-v.js +228 -0
  40. package/dist/storybook/assets/Color-64QXVMR3-BucypS4O.js +1 -0
  41. package/dist/storybook/assets/{Colors.stories-BajWDIwn.js → Colors.stories-CeKs5FaB.js} +1 -1
  42. package/dist/storybook/assets/ComponentStatesMixin-BkLj42wt.js +1 -0
  43. package/dist/storybook/assets/ComponentStatesMixin.stories--YPoyrpQ.js +313 -0
  44. package/dist/storybook/assets/CopyToClipboard.stories-6vqDwd-F.js +277 -0
  45. package/dist/storybook/assets/{Events.stories-B32yjxgf.js → Events.stories-DD9wfoHi.js} +1 -1
  46. package/dist/storybook/assets/Heading.stories-D-Pvm7NG.js +3 -0
  47. package/dist/storybook/assets/Icon.stories-BbR3S56H.js +245 -0
  48. package/dist/storybook/assets/LinearProgress.stories-B9XHLvVn.js +397 -0
  49. package/dist/storybook/assets/ScrollShadow.stories-CHFpB4Zf.js +17 -0
  50. package/dist/storybook/assets/Throttle.stories-BGNJSyDp.js +303 -0
  51. package/dist/storybook/assets/{WithTooltip-SK46ZJ2J-BO-IGPcG.js → WithTooltip-SK46ZJ2J-QQZnlVfm.js} +43 -43
  52. package/dist/storybook/assets/_commonjsHelpers-CqkleIqs.js +1 -0
  53. package/dist/storybook/assets/formatter-OMEEQ6HG-D3LRXsK-.js +1 -0
  54. package/dist/storybook/assets/iframe-CpEKhsmw.css +1 -0
  55. package/dist/storybook/assets/{iframe-BIFmrRK7.js → iframe-D-tG1MVV.js} +101 -141
  56. package/dist/storybook/assets/index-mcT8sPvs.js +1 -0
  57. package/dist/storybook/assets/onFind.stories-Dagoyfc5.js +284 -0
  58. package/dist/storybook/assets/syntaxhighlighter-CAVLW7PM-BoS99i_u.js +6 -0
  59. package/dist/storybook/iframe.html +2 -2
  60. package/dist/storybook/index.json +1 -1
  61. package/dist/storybook/project.json +1 -1
  62. package/dist/tailwind-plugin-button.js +11 -9
  63. package/dist/tailwind-plugin-button.js.map +1 -1
  64. package/dist/tailwind-plugin-button.ts +11 -10
  65. package/dist/tailwind-plugin-contrast.d.ts +2 -0
  66. package/dist/tailwind-plugin-contrast.d.ts.map +1 -0
  67. package/dist/tailwind-plugin-contrast.js +17 -0
  68. package/dist/tailwind-plugin-contrast.js.map +1 -0
  69. package/dist/tailwind-plugin-contrast.ts +18 -0
  70. package/dist/tailwind-plugin-icon.js +17 -10
  71. package/dist/tailwind-plugin-icon.js.map +1 -1
  72. package/dist/tailwind-plugin-icon.ts +17 -10
  73. package/dist/tailwind-plugin-ring-contrast.d.ts +2 -0
  74. package/dist/tailwind-plugin-ring-contrast.d.ts.map +1 -0
  75. package/dist/tailwind-plugin-ring-contrast.js +76 -0
  76. package/dist/tailwind-plugin-ring-contrast.js.map +1 -0
  77. package/dist/tailwind-plugin-ring-contrast.ts +90 -0
  78. package/dist/tailwind.config.d.ts +21 -0
  79. package/dist/tailwind.config.d.ts.map +1 -1
  80. package/dist/tailwind.config.js +25 -0
  81. package/dist/tailwind.config.js.map +1 -1
  82. package/dist/tailwind.config.ts +25 -0
  83. package/dist/util/ClipboardMixin.d.ts +39 -0
  84. package/dist/util/ClipboardMixin.d.ts.map +1 -0
  85. package/dist/util/ClipboardMixin.js +77 -0
  86. package/dist/util/ClipboardMixin.js.map +1 -0
  87. package/dist/util/ComponentStatesMixin.d.ts +54 -0
  88. package/dist/util/ComponentStatesMixin.d.ts.map +1 -0
  89. package/dist/util/ComponentStatesMixin.js +58 -0
  90. package/dist/util/ComponentStatesMixin.js.map +1 -0
  91. package/dist/{utils → util}/EventEmitterMixin.d.ts +7 -2
  92. package/dist/util/EventEmitterMixin.d.ts.map +1 -0
  93. package/dist/util/EventEmitterMixin.js.map +1 -0
  94. package/dist/util/ProgressMixin.d.ts +52 -0
  95. package/dist/util/ProgressMixin.d.ts.map +1 -0
  96. package/dist/util/ProgressMixin.js +190 -0
  97. package/dist/util/ProgressMixin.js.map +1 -0
  98. package/dist/util/ReadyMixin.d.ts.map +1 -0
  99. package/dist/util/ReadyMixin.js.map +1 -0
  100. package/dist/util/aria.d.ts +3 -0
  101. package/dist/util/aria.d.ts.map +1 -0
  102. package/dist/util/aria.js +44 -0
  103. package/dist/util/aria.js.map +1 -0
  104. package/dist/util/onFind.d.ts +11 -0
  105. package/dist/util/onFind.d.ts.map +1 -0
  106. package/dist/util/onFind.js +210 -0
  107. package/dist/util/onFind.js.map +1 -0
  108. package/dist/util/svg.d.ts +9 -0
  109. package/dist/util/svg.d.ts.map +1 -1
  110. package/dist/util/svg.js +22 -0
  111. package/dist/util/svg.js.map +1 -1
  112. package/dist/util/throttle.d.ts +4 -0
  113. package/dist/util/throttle.d.ts.map +1 -0
  114. package/dist/util/throttle.js +30 -0
  115. package/dist/util/throttle.js.map +1 -0
  116. package/package.json +3 -2
  117. package/dist/storybook/assets/Button.stories-Cwdvbnu1.js +0 -63
  118. package/dist/storybook/assets/Color-64QXVMR3-CqLd5_0n.js +0 -1
  119. package/dist/storybook/assets/Heading.stories-C0ji1wRG.js +0 -3
  120. package/dist/storybook/assets/Icon.stories-DeEHMd7f.js +0 -28543
  121. package/dist/storybook/assets/Loader.stories-NxZ0SGA0.js +0 -3
  122. package/dist/storybook/assets/ScrollShadow.stories-1W8nsrPe.js +0 -17
  123. package/dist/storybook/assets/formatter-OMEEQ6HG-wqmAyL2n.js +0 -1
  124. package/dist/storybook/assets/iframe-BEH5EoNR.css +0 -1
  125. package/dist/storybook/assets/index-B4dkQq9N.js +0 -1
  126. package/dist/storybook/assets/syntaxhighlighter-CAVLW7PM-kyZrfiLk.js +0 -6
  127. package/dist/utils/EventEmitterMixin.d.ts.map +0 -1
  128. package/dist/utils/EventEmitterMixin.js.map +0 -1
  129. package/dist/utils/ReadyMixin.d.ts.map +0 -1
  130. package/dist/utils/ReadyMixin.js.map +0 -1
  131. /package/dist/{utils → util}/EventEmitterMixin.js +0 -0
  132. /package/dist/{utils → util}/ReadyMixin.d.ts +0 -0
  133. /package/dist/{utils → util}/ReadyMixin.js +0 -0
@@ -0,0 +1,190 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { property } from 'lit/decorators.js';
8
+ import { announce } from '../util/aria';
9
+ /**
10
+ * Mixin that adds common progress indicator properties.
11
+ * Used by progress components like CircularProgress and LinearProgress.
12
+ *
13
+ * @mixin
14
+ *
15
+ * @param Base - The base class to extend
16
+ * @returns Extended class with progress properties
17
+ *
18
+ * @fires {CustomEvent} btu-progress-ready - Fired after first render and initialization
19
+ * @fires {CustomEvent} btu-progress-complete - Fired when progress reaches 100
20
+ *
21
+ * @cssprop --progress-color - Progress indicator color (overrides theme color)
22
+ * @cssprop --track-color - Track/background color (overrides default gray-100)
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * class MyProgress extends ProgressMixin(LitElement) {
27
+ * // Component now has color, size, thickness, and progress properties
28
+ * }
29
+ * ```
30
+ */
31
+ export const ProgressMixin = (Base) => {
32
+ class ProgressMixinClass extends Base {
33
+ constructor() {
34
+ super(...arguments);
35
+ /**
36
+ * Color theme of the progress indicator.
37
+ * Supports: black, white, primary, teal, gray, purple, rose, error, warning, success
38
+ * @attr
39
+ */
40
+ this.color = 'primary';
41
+ /**
42
+ * Progress value for determinate variant.
43
+ * Value between 0 and 100.
44
+ * @attr
45
+ */
46
+ this._progress = 0;
47
+ /**
48
+ * Whether to animate progress from 0 to target value when component first becomes visible.
49
+ * @attr initial-animation
50
+ */
51
+ this.initialAnimation = true;
52
+ /**
53
+ * Optional aria-label attribute for screen readers.
54
+ * Describes what the progress indicator represents.
55
+ * @attr aria-label
56
+ */
57
+ this.ariaLabel = null;
58
+ /**
59
+ * Optional aria-labelledby attribute for screen readers.
60
+ * References the ID of an element that labels the progress indicator.
61
+ * @attr aria-labelledby
62
+ */
63
+ this.ariaLabelledBy = null;
64
+ /**
65
+ * Optional aria-valuetext attribute for screen readers.
66
+ * Provides human-readable text alternative for progress value.
67
+ * @attr aria-valuetext
68
+ */
69
+ this.ariaValueText = null;
70
+ this._isAnimationInitialized = false;
71
+ this._hasCompletedAt100 = false;
72
+ }
73
+ get progress() {
74
+ return this._progress;
75
+ }
76
+ set progress(value) {
77
+ const numValue = isNaN(value) ? 0 : value;
78
+ this._progress = Math.min(Math.max(numValue, 0), 100);
79
+ }
80
+ /**
81
+ * Get the color value with --progress-color custom property override support.
82
+ * Returns a CSS color string that checks for custom property first, then falls back to theme color.
83
+ */
84
+ _getProgressColorValue() {
85
+ // Handle special colors (white, black)
86
+ if (this.color === 'white' || this.color === 'black') {
87
+ return `var(--progress-color, var(--btu-theme-${this.color}))`;
88
+ }
89
+ // Standard theme colors use -600 variant
90
+ return `var(--progress-color, oklch(var(--btu-theme-${this.color}-600)))`;
91
+ }
92
+ /**
93
+ * Get the animated progress value.
94
+ * Returns 0 if initialAnimation is enabled and animation hasn't started yet, otherwise returns actual progress.
95
+ */
96
+ _getAnimatedProgress() {
97
+ if (this.initialAnimation && !this._isAnimationInitialized) {
98
+ return 0;
99
+ }
100
+ return this._progress;
101
+ }
102
+ /**
103
+ * Setup initial animation with IntersectionObserver when component first becomes visible.
104
+ * Should be called from component's firstUpdated() or updated() methods.
105
+ * Safe to call multiple times - will skip if already initialized.
106
+ */
107
+ _setupInitialAnimation() {
108
+ if (!this.initialAnimation || this._isAnimationInitialized) {
109
+ this._isAnimationInitialized = true;
110
+ return;
111
+ }
112
+ this._cleanupInitialAnimation();
113
+ this._intersectionObserver = new IntersectionObserver(entries => {
114
+ entries.forEach(entry => {
115
+ if (entry.isIntersecting && !this._isAnimationInitialized) {
116
+ requestAnimationFrame(() => {
117
+ this._isAnimationInitialized = true;
118
+ this.requestUpdate();
119
+ });
120
+ this._intersectionObserver?.disconnect();
121
+ }
122
+ });
123
+ }, { threshold: 0.1 });
124
+ this._intersectionObserver.observe(this);
125
+ }
126
+ /**
127
+ * Cleanup intersection observer.
128
+ * Should be called from component's disconnectedCallback() method.
129
+ */
130
+ _cleanupInitialAnimation() {
131
+ this._intersectionObserver?.disconnect();
132
+ }
133
+ /**
134
+ * Lifecycle callback fired after the first render.
135
+ * Emits btu-progress-ready event.
136
+ * @internal
137
+ */
138
+ firstUpdated(changedProperties) {
139
+ super.firstUpdated(changedProperties);
140
+ this.emit('btu-progress-ready');
141
+ }
142
+ /**
143
+ * Track progress completion and emit event when reaching 100%.
144
+ * Should be called from component's updated() method.
145
+ */
146
+ _trackCompletion() {
147
+ if (this._progress === 100 && !this._hasCompletedAt100) {
148
+ this._hasCompletedAt100 = true;
149
+ this.emit('btu-progress-complete');
150
+ // Announce completion to screen readers if message provided
151
+ if (this.completionAnnouncement) {
152
+ announce(this.completionAnnouncement);
153
+ }
154
+ }
155
+ else if (this._progress < 100 && this._hasCompletedAt100) {
156
+ // Reset flag if progress drops below 100 (allows re-triggering)
157
+ this._hasCompletedAt100 = false;
158
+ }
159
+ }
160
+ }
161
+ __decorate([
162
+ property({ type: String })
163
+ ], ProgressMixinClass.prototype, "color", void 0);
164
+ __decorate([
165
+ property({ type: Number })
166
+ ], ProgressMixinClass.prototype, "thickness", void 0);
167
+ __decorate([
168
+ property({ type: Number })
169
+ ], ProgressMixinClass.prototype, "progress", null);
170
+ __decorate([
171
+ property({ type: String })
172
+ ], ProgressMixinClass.prototype, "label", void 0);
173
+ __decorate([
174
+ property({ type: Boolean, attribute: 'initial-animation' })
175
+ ], ProgressMixinClass.prototype, "initialAnimation", void 0);
176
+ __decorate([
177
+ property({ type: String, attribute: 'aria-label' })
178
+ ], ProgressMixinClass.prototype, "ariaLabel", void 0);
179
+ __decorate([
180
+ property({ type: String, attribute: 'aria-labelledby' })
181
+ ], ProgressMixinClass.prototype, "ariaLabelledBy", void 0);
182
+ __decorate([
183
+ property({ type: String, attribute: 'aria-valuetext' })
184
+ ], ProgressMixinClass.prototype, "ariaValueText", void 0);
185
+ __decorate([
186
+ property({ type: String, attribute: 'completion-announcement' })
187
+ ], ProgressMixinClass.prototype, "completionAnnouncement", void 0);
188
+ return ProgressMixinClass;
189
+ };
190
+ //# sourceMappingURL=ProgressMixin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProgressMixin.js","sourceRoot":"","sources":["../../src/util/ProgressMixin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReadyMixin.d.ts","sourceRoot":"","sources":["../../src/util/ReadyMixin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAChC,KAAK,WAAW,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;AAExD,MAAM,CAAC,OAAO,OAAO,mBAAmB;CAAG;AAE3C;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,WAAW,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC,KAc/C,WAAW,CAAC,mBAAmB,CAAC,GAAG,CAC9D,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReadyMixin.js","sourceRoot":"","sources":["../../src/util/ReadyMixin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAKhC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAoC,UAAa,EAAE,EAAE;IAC7E,MAAM,eAAgB,SAAQ,UAAU;QACtC,iBAAiB;YACf,MAAM,IAAI,GAAG,GAAG,EAAE;gBAChB,KAAK,CAAC,iBAAiB,EAAE,CAAA;YAC3B,CAAC,CAAA;YAED,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBACtC,IAAI,EAAE,CAAA;YACR,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAA;YAC7D,CAAC;QACH,CAAC;KACF;IACD,OAAO,eAAuD,CAAA;AAChE,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ export declare function replaceWithEach(template: string, data: string[]): string;
2
+ export declare function announce(message: string, data?: string[]): void;
3
+ //# sourceMappingURL=aria.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aria.d.ts","sourceRoot":"","sources":["../../src/util/aria.ts"],"names":[],"mappings":"AAUA,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAQ/D;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,QA+BxD"}
@@ -0,0 +1,44 @@
1
+ /*
2
+ Simple string replacement utility.
3
+ Find all instances of "___" in the string
4
+ and replace with each string in the list of data.
5
+ eg:
6
+ template = 'Today is ___ and the weather is ___.'
7
+ data = ['Friday', 'sunnny']
8
+ --------------------------
9
+ <- 'Today is Friday and the weather is sunny.'
10
+ */
11
+ export function replaceWithEach(template, data) {
12
+ return template.replace(/_{3}/g, (i => (_) => data[i++])(0));
13
+ }
14
+ export function announce(message, data) {
15
+ let container = document.getElementById('aria-live-container');
16
+ if (!container) {
17
+ container = document.createElement('div');
18
+ container.setAttribute('id', 'aria-live-container');
19
+ document.body.appendChild(container);
20
+ }
21
+ const status = document.createElement('div');
22
+ const id = 'speak-' + Date.now();
23
+ status.setAttribute('id', id);
24
+ status.setAttribute('aria-atomic', 'true');
25
+ status.setAttribute('aria-live', 'polite');
26
+ status.style.cssText =
27
+ 'position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border-width: 0;';
28
+ if (data && data.length) {
29
+ message = replaceWithEach(`${message}`, data);
30
+ }
31
+ container.appendChild(status);
32
+ setTimeout(() => {
33
+ const liveRegion = document.getElementById(id);
34
+ if (liveRegion)
35
+ liveRegion.innerHTML = message;
36
+ }, 150);
37
+ if (window.BRIGHTSPOT?.ariaDebug === true) {
38
+ console.log(`ARIA Announced: "${message}"`);
39
+ }
40
+ setTimeout(() => {
41
+ document.getElementById(id)?.remove();
42
+ }, 2000);
43
+ }
44
+ //# sourceMappingURL=aria.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aria.js","sourceRoot":"","sources":["../../src/util/aria.ts"],"names":[],"mappings":"AAAA;;;;;;;;;EASE;AACF,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,IAAc;IAC9D,OAAO,QAAQ,CAAC,OAAO,CACrB,OAAO,EACP,CACE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAS,EAAE,EAAE,CACjB,IAAI,CAAC,CAAC,EAAE,CAAC,CACZ,CAAC,CAAC,CAAC,CACL,CAAA;AACH,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,IAAe;IACvD,IAAI,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAA;IAC9D,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;QACzC,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAA;QACnD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;IACtC,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IAC5C,MAAM,EAAE,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAChC,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAC7B,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IAC1C,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;IAC1C,MAAM,CAAC,KAAK,CAAC,OAAO;QAClB,wJAAwJ,CAAA;IAC1J,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACxB,OAAO,GAAG,eAAe,CAAC,GAAG,OAAO,EAAE,EAAE,IAAI,CAAC,CAAA;IAC/C,CAAC;IACD,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;IAE7B,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,UAAU,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;QAC9C,IAAI,UAAU;YAAE,UAAU,CAAC,SAAS,GAAG,OAAO,CAAA;IAChD,CAAC,EAAE,GAAG,CAAC,CAAA;IAEP,IAAI,MAAM,CAAC,UAAU,EAAE,SAAS,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,GAAG,CAAC,CAAA;IAC7C,CAAC;IAED,UAAU,CAAC,GAAG,EAAE;QACd,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAA;IACvC,CAAC,EAAE,IAAI,CAAC,CAAA;AACV,CAAC"}
@@ -0,0 +1,11 @@
1
+ export type CallbackFunction<E extends Element> = (element: E) => void;
2
+ export type Selectors = string | string[];
3
+ declare function onFind<E extends Element>(root: ParentNode, selectors: Selectors, fn: CallbackFunction<E>): void;
4
+ declare function onFind<E extends Element>(selectors: Selectors, fn: CallbackFunction<E>): void;
5
+ declare namespace onFind {
6
+ var triggerCallbacks: (mutations?: MutationRecord[]) => void;
7
+ var pause: () => void;
8
+ var resume: () => void;
9
+ }
10
+ export default onFind;
11
+ //# sourceMappingURL=onFind.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onFind.d.ts","sourceRoot":"","sources":["../../src/util/onFind.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,CAAA;AACtE,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,EAAE,CAAA;AAqNzC,iBAAS,MAAM,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;AAEzG,iBAAS,MAAM,CAAC,CAAC,SAAS,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;kBAA9E,MAAM;uCA1GuB,cAAc,EAAE;;;;AAiJtD,eAAe,MAAM,CAAA"}
@@ -0,0 +1,210 @@
1
+ import log from 'loglevel';
2
+ let calledIndex = 0;
3
+ class Callback {
4
+ #root;
5
+ #called;
6
+ #selectors;
7
+ #fn;
8
+ #matches;
9
+ constructor(root, selectors, fn) {
10
+ this.#root = root;
11
+ this.#called = `data-ofc${calledIndex++}`;
12
+ if (!Array.isArray(selectors)) {
13
+ selectors = [selectors];
14
+ }
15
+ this.#selectors = selectors
16
+ .map(selectors.some(s => s.indexOf(',') > -1) ? s => s : s => `${s}:not([${this.#called}])`)
17
+ .join(',');
18
+ this.#fn = fn;
19
+ const matches = selectors.map(s => s.trim()).filter(s => s.indexOf(' ') < 0 && s.indexOf(',') < 0);
20
+ if (matches.length === selectors.length) {
21
+ this.#matches = matches;
22
+ }
23
+ }
24
+ addTriggerElements(triggerElements, element) {
25
+ if (this.#root.contains(element)) {
26
+ if (element.matches(this.#selectors)) {
27
+ triggerElements.push(element);
28
+ }
29
+ for (const e of element.querySelectorAll(this.#selectors)) {
30
+ triggerElements.push(e);
31
+ }
32
+ }
33
+ }
34
+ trigger(elements) {
35
+ if (document.readyState === 'loading') {
36
+ return;
37
+ }
38
+ if (this.#matches && Array.isArray(elements)) {
39
+ for (const element of elements) {
40
+ if (this.#matches.some(m => element.matches(m))) {
41
+ this.#callCallback(element);
42
+ }
43
+ }
44
+ }
45
+ else {
46
+ for (const element of this.#root.querySelectorAll(this.#selectors)) {
47
+ this.#callCallback(element);
48
+ }
49
+ }
50
+ }
51
+ #callCallback(element) {
52
+ if (inBlacklist(element)) {
53
+ return;
54
+ }
55
+ if (!element.hasAttribute(this.#called)) {
56
+ element.setAttribute(this.#called, '');
57
+ try {
58
+ this.#fn(element);
59
+ }
60
+ catch (error) {
61
+ log.error('Failed callback!', element, error);
62
+ }
63
+ }
64
+ }
65
+ }
66
+ let triggerPaused = false;
67
+ let triggerOnResume = false;
68
+ let triggerAll = false;
69
+ let triggerElements = [];
70
+ let triggerFrame;
71
+ const callbacks = [];
72
+ function inBlacklist(node) {
73
+ if (!(node instanceof Element))
74
+ return false;
75
+ return (node.closest('.CIG-wordCount') !== null ||
76
+ node.closest('.ContentEdit-previewDisplay') !== null ||
77
+ node.closest('.ContentLabel') !== null ||
78
+ node.closest('.PreviewFrame-typeDisplay') !== null ||
79
+ node.closest('.ProseMirrorToolbar') !== null ||
80
+ node.closest('.ProseMirror') !== null ||
81
+ node.closest('.ProseMirrorContainer') !== null ||
82
+ node.closest('.ProseMirror-fullscreen-container') !== null ||
83
+ node.closest('.ProseMirror-comments') !== null ||
84
+ node.closest('.RichTextEditor') !== null ||
85
+ node.closest('.WorkInProgressSaveStatus') !== null ||
86
+ node.closest('#aria-live-container') !== null ||
87
+ node.closest('.widget-urlsAutomatic') !== null);
88
+ }
89
+ const every = Array.prototype.every;
90
+ const isText = (node) => node.nodeType === Node.TEXT_NODE;
91
+ function triggerCallbacks(mutations) {
92
+ if (triggerPaused) {
93
+ triggerOnResume = true;
94
+ return;
95
+ }
96
+ const checkMutations = Array.isArray(mutations);
97
+ const validMutations = [];
98
+ if (checkMutations) {
99
+ for (const mutation of mutations) {
100
+ const target = mutation.target;
101
+ if (inBlacklist(target)) {
102
+ continue;
103
+ }
104
+ switch (mutation.type) {
105
+ case 'attributes':
106
+ if (mutation.oldValue !== target.getAttribute(mutation.attributeName)) {
107
+ validMutations.push(mutation);
108
+ }
109
+ break;
110
+ case 'childList':
111
+ if (!every.call(mutation.addedNodes, isText) || !every.call(mutation.removedNodes, isText)) {
112
+ validMutations.push(mutation);
113
+ }
114
+ break;
115
+ }
116
+ }
117
+ if (validMutations.length === 0) {
118
+ return;
119
+ }
120
+ }
121
+ if (validMutations.length > 500) {
122
+ triggerAll = true;
123
+ }
124
+ if (!triggerAll) {
125
+ if (checkMutations) {
126
+ for (const mutation of validMutations) {
127
+ const element = mutation.target;
128
+ switch (mutation.type) {
129
+ case 'attributes':
130
+ triggerElements.push(element);
131
+ break;
132
+ case 'childList':
133
+ for (const callback of callbacks) {
134
+ callback.addTriggerElements(triggerElements, element);
135
+ }
136
+ break;
137
+ }
138
+ }
139
+ }
140
+ else {
141
+ triggerAll = true;
142
+ }
143
+ }
144
+ if ((triggerAll || triggerElements.length > 0) && !triggerFrame) {
145
+ triggerFrame = window.requestAnimationFrame(() => {
146
+ const elements = triggerAll ? undefined : triggerElements;
147
+ triggerAll = false;
148
+ triggerElements = [];
149
+ triggerFrame = 0;
150
+ callbacks.forEach(callback => callback.trigger(elements));
151
+ });
152
+ }
153
+ }
154
+ function initialize() {
155
+ document.documentElement.hidden = false;
156
+ triggerCallbacks();
157
+ new MutationObserver(triggerCallbacks).observe(document, {
158
+ attributes: true,
159
+ attributeFilter: [
160
+ 'class',
161
+ 'data-bsp-autosubmit',
162
+ 'data-chart-type',
163
+ 'data-code-type',
164
+ 'data-internal-name',
165
+ 'data-tab',
166
+ 'name',
167
+ 'rel',
168
+ 'target',
169
+ ],
170
+ attributeOldValue: true,
171
+ childList: true,
172
+ subtree: true,
173
+ });
174
+ }
175
+ document.documentElement.hidden = true;
176
+ if (document.readyState === 'loading') {
177
+ document.addEventListener('DOMContentLoaded', initialize);
178
+ }
179
+ else {
180
+ initialize();
181
+ }
182
+ function onFind(rootOrSelectors, selectorsOrFn, fn) {
183
+ let root;
184
+ let selectors;
185
+ if (typeof fn !== 'undefined') {
186
+ root = rootOrSelectors;
187
+ selectors = selectorsOrFn;
188
+ }
189
+ else {
190
+ root = document;
191
+ selectors = rootOrSelectors;
192
+ fn = selectorsOrFn;
193
+ }
194
+ const callback = new Callback(root, selectors, fn);
195
+ callback.trigger();
196
+ callbacks.push(callback);
197
+ }
198
+ onFind.triggerCallbacks = triggerCallbacks;
199
+ onFind.pause = () => {
200
+ triggerPaused = true;
201
+ };
202
+ onFind.resume = () => {
203
+ triggerPaused = false;
204
+ if (triggerOnResume) {
205
+ triggerOnResume = false;
206
+ setTimeout(triggerCallbacks, 100);
207
+ }
208
+ };
209
+ export default onFind;
210
+ //# sourceMappingURL=onFind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onFind.js","sourceRoot":"","sources":["../../src/util/onFind.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,12 @@
1
1
  export declare function addNameSpaceXML(data: string): string;
2
+ /**
3
+ * Adds a mask element to an SVG string. The mask is inserted immediately after the opening <svg> tag
4
+ * and wraps the existing SVG content, ending before the closing </svg> tag.
5
+ *
6
+ * @param {string} svg - The SVG string to which the mask will be added. Must contain valid <svg> tags.
7
+ * @param {string} maskId - The ID to assign to the <mask> element.
8
+ * @returns {string} - The modified SVG string with the mask element added.
9
+ */
10
+ export declare function addMask(svg: string, maskId: string): string;
2
11
  export declare function encodeSVG(data: string): string;
3
12
  //# sourceMappingURL=svg.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"svg.d.ts","sourceRoot":"","sources":["../../src/util/svg.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKpD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK9C"}
1
+ {"version":3,"file":"svg.d.ts","sourceRoot":"","sources":["../../src/util/svg.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKpD;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAe3D;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK9C"}
package/dist/util/svg.js CHANGED
@@ -5,6 +5,28 @@ export function addNameSpaceXML(data) {
5
5
  }
6
6
  return data;
7
7
  }
8
+ /**
9
+ * Adds a mask element to an SVG string. The mask is inserted immediately after the opening <svg> tag
10
+ * and wraps the existing SVG content, ending before the closing </svg> tag.
11
+ *
12
+ * @param {string} svg - The SVG string to which the mask will be added. Must contain valid <svg> tags.
13
+ * @param {string} maskId - The ID to assign to the <mask> element.
14
+ * @returns {string} - The modified SVG string with the mask element added.
15
+ */
16
+ export function addMask(svg, maskId) {
17
+ // Insert <mask id="..."> right after <svg ...>
18
+ const openingSvgTagMatch = svg.match(/<svg[^>]*>/);
19
+ if (!openingSvgTagMatch)
20
+ return svg;
21
+ const openingSvgTag = openingSvgTagMatch[0];
22
+ const maskOpen = `<mask id="${maskId}">`;
23
+ const maskClose = `</mask>`;
24
+ // Find positions
25
+ const start = svg.indexOf(openingSvgTag) + openingSvgTag.length;
26
+ const end = svg.lastIndexOf('</svg>');
27
+ // Insert mask tags
28
+ return svg.slice(0, start) + maskOpen + svg.slice(start, end) + maskClose + svg.slice(end);
29
+ }
8
30
  export function encodeSVG(data) {
9
31
  data = data.replace(/"/g, `'`);
10
32
  data = data.replace(/>\s{1,}</g, `><`);
@@ -1 +1 @@
1
- {"version":3,"file":"svg.js","sourceRoot":"","sources":["../../src/util/svg.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG,0BAA0B,CAAA;AAE1C,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,IAAI,IAAI,CAAC,OAAO,CAAC,4BAA4B,CAAC,GAAG,CAAC,EAAE,CAAC;QACnD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,yCAAyC,CAAC,CAAA;IACzE,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC9B,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;IACtC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;IACnC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAA;AAClD,CAAC"}
1
+ {"version":3,"file":"svg.js","sourceRoot":"","sources":["../../src/util/svg.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG,0BAA0B,CAAA;AAE1C,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,IAAI,IAAI,CAAC,OAAO,CAAC,4BAA4B,CAAC,GAAG,CAAC,EAAE,CAAC;QACnD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,yCAAyC,CAAC,CAAA;IACzE,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,OAAO,CAAC,GAAW,EAAE,MAAc;IACjD,+CAA+C;IAC/C,MAAM,kBAAkB,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IAClD,IAAI,CAAC,kBAAkB;QAAE,OAAO,GAAG,CAAA;IAEnC,MAAM,aAAa,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAA;IAC3C,MAAM,QAAQ,GAAG,aAAa,MAAM,IAAI,CAAA;IACxC,MAAM,SAAS,GAAG,SAAS,CAAA;IAE3B,iBAAiB;IACjB,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,CAAC,MAAM,CAAA;IAC/D,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;IAErC,mBAAmB;IACnB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AAC5F,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC9B,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;IACtC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;IACnC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAA;AAClD,CAAC"}
@@ -0,0 +1,4 @@
1
+ type UnknownFunction = (...args: unknown[]) => unknown;
2
+ export declare function throttle(interval: number, fn: UnknownFunction): UnknownFunction;
3
+ export {};
4
+ //# sourceMappingURL=throttle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"throttle.d.ts","sourceRoot":"","sources":["../../src/util/throttle.ts"],"names":[],"mappings":"AAAA,KAAK,eAAe,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAA;AAGtD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,eAAe,GAAG,eAAe,CA8B/E"}
@@ -0,0 +1,30 @@
1
+ /* eslint-disable prefer-rest-params */
2
+ export function throttle(interval, fn) {
3
+ if (interval <= 0) {
4
+ return fn;
5
+ }
6
+ let timeoutId;
7
+ let lastTrigger = 0;
8
+ return function () {
9
+ // Already scheduled to run.
10
+ if (timeoutId) {
11
+ return;
12
+ }
13
+ const now = Date.now();
14
+ const delay = interval - now + lastTrigger;
15
+ // Waited long enough so execute.
16
+ if (delay <= 0) {
17
+ lastTrigger = now;
18
+ fn.apply(this, [...arguments]);
19
+ }
20
+ else {
21
+ // Schedule for later.
22
+ timeoutId = setTimeout(() => {
23
+ lastTrigger = now;
24
+ timeoutId = undefined;
25
+ fn.apply(this, [...arguments]);
26
+ }, delay);
27
+ }
28
+ };
29
+ }
30
+ //# sourceMappingURL=throttle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"throttle.js","sourceRoot":"","sources":["../../src/util/throttle.ts"],"names":[],"mappings":"AAEA,uCAAuC;AACvC,MAAM,UAAU,QAAQ,CAAC,QAAgB,EAAE,EAAmB;IAC5D,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QAClB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,SAAoD,CAAA;IACxD,IAAI,WAAW,GAAG,CAAC,CAAA;IAEnB,OAAO;QACL,4BAA4B;QAC5B,IAAI,SAAS,EAAE,CAAC;YACd,OAAM;QACR,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,MAAM,KAAK,GAAG,QAAQ,GAAG,GAAG,GAAG,WAAW,CAAA;QAE1C,iCAAiC;QACjC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,WAAW,GAAG,GAAG,CAAA;YACjB,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAA;QAChC,CAAC;aAAM,CAAC;YACN,sBAAsB;YACtB,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC1B,WAAW,GAAG,GAAG,CAAA;gBACjB,SAAS,GAAG,SAAS,CAAA;gBACrB,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAA;YAChC,CAAC,EAAE,KAAK,CAAC,CAAA;QACX,CAAC;IACH,CAAC,CAAA;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brightspot/ui",
3
- "version": "1.1.0",
3
+ "version": "1.3.0",
4
4
  "type": "module",
5
5
  "license": "UNLICENSED",
6
6
  "description": "A UI library for building Brightspot CMS components.",
@@ -46,6 +46,7 @@
46
46
  "husky": "^9.1.7",
47
47
  "lint-staged": "^16.2.6",
48
48
  "lit": "^3.3.0",
49
+ "loglevel": "^1.8.0",
49
50
  "mini-css-extract-plugin": "^2.6.1",
50
51
  "postcss-import": "^16.0.0",
51
52
  "postcss-loader": "^8.0.0",
@@ -80,7 +81,7 @@
80
81
  "src/components/**/*.ts": [
81
82
  "node scripts/run-cem.cjs",
82
83
  "node scripts/generate-docs.mjs",
83
- "git add docs/api.md"
84
+ "git add docs/components/"
84
85
  ],
85
86
  "*": "yarn format"
86
87
  }