@brightspot/ui 1.0.1-wc.4 → 1.1.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 (73) hide show
  1. package/README.md +4 -0
  2. package/dist/components/avatar/Avatar.d.ts +82 -0
  3. package/dist/components/avatar/Avatar.d.ts.map +1 -0
  4. package/dist/components/avatar/Avatar.js +162 -0
  5. package/dist/components/avatar/Avatar.js.map +1 -0
  6. package/dist/components/avatar/AvatarGroup.d.ts +70 -0
  7. package/dist/components/avatar/AvatarGroup.d.ts.map +1 -0
  8. package/dist/components/avatar/AvatarGroup.js +145 -0
  9. package/dist/components/avatar/AvatarGroup.js.map +1 -0
  10. package/dist/components/badge/Badge.d.ts +75 -0
  11. package/dist/components/badge/Badge.d.ts.map +1 -0
  12. package/dist/components/badge/Badge.js +118 -0
  13. package/dist/components/badge/Badge.js.map +1 -0
  14. package/dist/custom-elements.json +437 -0
  15. package/dist/storybook/assets/Avatar.stories-BONZm4v8.js +209 -0
  16. package/dist/storybook/assets/AvatarGroup.stories-DDKujPh2.js +211 -0
  17. package/dist/storybook/assets/Badge.stories-C8Ahfpp6.js +134 -0
  18. package/dist/storybook/assets/{Button.stories-BH3fEuOH.js → Button.stories-Cwdvbnu1.js} +1 -1
  19. package/dist/storybook/assets/{Color-64QXVMR3-BV_8WWIP.js → Color-64QXVMR3-CqLd5_0n.js} +1 -1
  20. package/dist/storybook/assets/{Colors.stories-CcpJ2Txp.js → Colors.stories-BajWDIwn.js} +1 -1
  21. package/dist/storybook/assets/Events.stories-B32yjxgf.js +108 -0
  22. package/dist/storybook/assets/{Heading.stories-cqZamo-6.js → Heading.stories-C0ji1wRG.js} +1 -1
  23. package/dist/storybook/assets/{Icon.stories-uPhO3RBG.js → Icon.stories-DeEHMd7f.js} +1 -1
  24. package/dist/storybook/assets/{Loader.stories-D7Bl-LN9.js → Loader.stories-NxZ0SGA0.js} +1 -1
  25. package/dist/storybook/assets/ReadyMixin.stories-DavcxbQ0.js +55 -0
  26. package/dist/storybook/assets/{ScrollShadow.stories-CWKYDYLk.js → ScrollShadow.stories-1W8nsrPe.js} +1 -1
  27. package/dist/storybook/assets/{WithTooltip-SK46ZJ2J-DyavE1Bj.js → WithTooltip-SK46ZJ2J-BO-IGPcG.js} +5 -5
  28. package/dist/storybook/assets/formatter-OMEEQ6HG-wqmAyL2n.js +1 -0
  29. package/dist/storybook/assets/iframe-BEH5EoNR.css +1 -0
  30. package/dist/storybook/assets/{iframe-mIh0R_Av.js → iframe-BIFmrRK7.js} +152 -125
  31. package/dist/storybook/assets/{index-C8IjQgz6.js → index-B4dkQq9N.js} +1 -1
  32. package/dist/storybook/assets/{syntaxhighlighter-CAVLW7PM-36bUIV4n.js → syntaxhighlighter-CAVLW7PM-kyZrfiLk.js} +1 -1
  33. package/dist/storybook/iframe.html +2 -2
  34. package/dist/storybook/index.json +1 -1
  35. package/dist/storybook/project.json +1 -1
  36. package/dist/tailwind-plugin-avatar.d.ts +2 -0
  37. package/dist/tailwind-plugin-avatar.d.ts.map +1 -0
  38. package/dist/tailwind-plugin-avatar.js +130 -0
  39. package/dist/tailwind-plugin-avatar.js.map +1 -0
  40. package/dist/tailwind-plugin-avatar.ts +181 -0
  41. package/dist/tailwind-plugin-badge.js +24 -9
  42. package/dist/tailwind-plugin-badge.js.map +1 -1
  43. package/dist/tailwind-plugin-badge.ts +30 -11
  44. package/dist/tailwind-plugin-button.js +3 -6
  45. package/dist/tailwind-plugin-button.js.map +1 -1
  46. package/dist/tailwind-plugin-button.ts +3 -7
  47. package/dist/tailwind.config.js +2 -2
  48. package/dist/tailwind.config.js.map +1 -1
  49. package/dist/tailwind.config.ts +2 -2
  50. package/dist/utils/EventEmitterMixin.d.ts +19 -16
  51. package/dist/utils/EventEmitterMixin.d.ts.map +1 -1
  52. package/dist/utils/EventEmitterMixin.js +7 -7
  53. package/dist/utils/EventEmitterMixin.js.map +1 -1
  54. package/dist/utils/ReadyMixin.d.ts +31 -0
  55. package/dist/utils/ReadyMixin.d.ts.map +1 -0
  56. package/dist/utils/ReadyMixin.js +42 -0
  57. package/dist/utils/ReadyMixin.js.map +1 -0
  58. package/package.json +7 -6
  59. package/custom-elements.json +0 -214
  60. package/dist/components/widget/Widget.css +0 -118
  61. package/dist/components/widget/Widget.d.ts +0 -90
  62. package/dist/components/widget/Widget.d.ts.map +0 -1
  63. package/dist/components/widget/Widget.js +0 -196
  64. package/dist/components/widget/Widget.js.map +0 -1
  65. package/dist/components/widget/WidgetUtils.d.ts +0 -14
  66. package/dist/components/widget/WidgetUtils.d.ts.map +0 -1
  67. package/dist/components/widget/WidgetUtils.js +0 -42
  68. package/dist/components/widget/WidgetUtils.js.map +0 -1
  69. package/dist/storybook/assets/Badge.stories-cKvztBhm.js +0 -43
  70. package/dist/storybook/assets/Widget-CRTwFkFc.css +0 -1
  71. package/dist/storybook/assets/Widget.stories-CcjywoYR.js +0 -300
  72. package/dist/storybook/assets/formatter-OMEEQ6HG-DBJ97XaR.js +0 -1
  73. package/dist/storybook/assets/iframe-BdHEYpHD.css +0 -1
@@ -1,90 +0,0 @@
1
- import { LitElement } from 'lit';
2
- export interface WidgetProps {
3
- collapsible?: boolean;
4
- heading?: string;
5
- internalname?: string;
6
- widgetid?: string;
7
- }
8
- declare const Widget_base: (new (...args: any[]) => import("../../utils/EventEmitterMixin.js").EventEmitterMixinInterface) & typeof LitElement;
9
- /**
10
- * A collapsible container component with persistent state management.
11
- *
12
- * Provides collapsible behavior with localStorage persistence, keyboard
13
- * accessibility, and automatic error expansion. Uses CSS Grid layout with
14
- * named columns for flexible content positioning.
15
- *
16
- * @element btu-widget
17
- *
18
- * @fires {CustomEvent} btu-brightspot-element-connected - Inherited from EventEmitterMixin, fired when element connects to DOM
19
- * @fires {CustomEvent} btu-brightspot-element-disconnected - Inherited from EventEmitterMixin, fired when element disconnects from DOM
20
- * @fires {CustomEvent<{error: Error}>} btu-brightspot-element-error - Inherited from EventEmitterMixin, fired on connection error
21
- * @fires {CustomEvent} btu-widget-ready - Fired after first render and initialization
22
- * @fires {CustomEvent<{collapsed: boolean}>} btu-widget-toggle - Fired when collapse state changes
23
- *
24
- * @slot - Default slot for widget content
25
- *
26
- * @cssprop --space - Horizontal padding for grid columns (default: theme(spacing.6))
27
- * @cssprop --Widget-padding - Internal padding variable (default: var(--gap-l))
28
- *
29
- * @example
30
- * ```html
31
- * <btu-widget
32
- * collapsible
33
- * heading="My Widget"
34
- * internalname="example"
35
- * widgetid="widget-001">
36
- * <p>Widget content goes here</p>
37
- * </btu-widget>
38
- * ```
39
- */
40
- export default class Widget extends Widget_base {
41
- private _collapsed;
42
- /**
43
- * Enable collapsible behavior with expand/collapse controls.
44
- * When enabled, displays a chevron icon and allows users to toggle content visibility.
45
- * @attr
46
- */
47
- collapsible: boolean;
48
- /**
49
- * Widget title displayed in the header.
50
- * @attr
51
- */
52
- heading?: string;
53
- /**
54
- * Internal identifier for localStorage key generation.
55
- * Used in format: BSP.ContentEdit.widgetCollapsed.{widgetid}.{internalname}
56
- * @attr
57
- */
58
- internalname?: string;
59
- /**
60
- * Internal state tracking whether widget contains error messages.
61
- * Widget automatically expands when errors are detected.
62
- * @private
63
- */
64
- invalid: boolean;
65
- /**
66
- * Widget type ID for localStorage key generation.
67
- * Combined with internalname to create unique storage keys.
68
- * @attr
69
- */
70
- widgetid?: string;
71
- /**
72
- * Controls the collapsed state of the widget.
73
- * When set, persists to localStorage and emits btu-widget-toggle event.
74
- * @attr
75
- */
76
- set collapsed(isCollapsed: boolean);
77
- get collapsed(): boolean;
78
- connectedCallback(): void;
79
- createRenderRoot(): this;
80
- firstUpdated(): void;
81
- private _collapsibleTemplate;
82
- render(): import("lit-html").TemplateResult<1>;
83
- }
84
- declare global {
85
- interface HTMLElementTagNameMap {
86
- 'btu-widget': Widget;
87
- }
88
- }
89
- export {};
90
- //# sourceMappingURL=Widget.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Widget.d.ts","sourceRoot":"","sources":["../../../src/components/widget/Widget.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAQ,MAAM,KAAK,CAAA;AAStC,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAA6B;IAC/D,OAAO,CAAC,UAAU,CAAQ;IAE1B;;;;OAIG;IAEH,WAAW,UAAQ;IAEnB;;;OAGG;IAEH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;;;OAIG;IAEH,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB;;;;OAIG;IAEH,OAAO,UAAQ;IAEf;;;;OAIG;IAEH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;;;OAIG;IACH,IACI,SAAS,CAAC,WAAW,EAAE,OAAO,EAcjC;IAED,IAAI,SAAS,IAhBc,OAAO,CAkBjC;IAED,iBAAiB,IAAI,IAAI;IAOzB,gBAAgB;IAIhB,YAAY,IAAI,IAAI;IAyBpB,OAAO,CAAC,oBAAoB;IAyC5B,MAAM;CAwBP;AAQD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,YAAY,EAAE,MAAM,CAAA;KACrB;CACF"}
@@ -1,196 +0,0 @@
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 { LitElement, html } from 'lit';
8
- import { property, state } from 'lit/decorators.js';
9
- import { EventEmitterMixin } from '../../utils/EventEmitterMixin.js';
10
- import { getComponentKey, ifUnmodified } from './WidgetUtils.js';
11
- const ls = window.localStorage;
12
- const collapseTooltip = window.BRIGHTSPOT?.ui?.tooltips?.collapse || 'Collapse';
13
- const expandTooltip = window.BRIGHTSPOT?.ui?.tooltips?.expand || 'Expand';
14
- /**
15
- * A collapsible container component with persistent state management.
16
- *
17
- * Provides collapsible behavior with localStorage persistence, keyboard
18
- * accessibility, and automatic error expansion. Uses CSS Grid layout with
19
- * named columns for flexible content positioning.
20
- *
21
- * @element btu-widget
22
- *
23
- * @fires {CustomEvent} btu-brightspot-element-connected - Inherited from EventEmitterMixin, fired when element connects to DOM
24
- * @fires {CustomEvent} btu-brightspot-element-disconnected - Inherited from EventEmitterMixin, fired when element disconnects from DOM
25
- * @fires {CustomEvent<{error: Error}>} btu-brightspot-element-error - Inherited from EventEmitterMixin, fired on connection error
26
- * @fires {CustomEvent} btu-widget-ready - Fired after first render and initialization
27
- * @fires {CustomEvent<{collapsed: boolean}>} btu-widget-toggle - Fired when collapse state changes
28
- *
29
- * @slot - Default slot for widget content
30
- *
31
- * @cssprop --space - Horizontal padding for grid columns (default: theme(spacing.6))
32
- * @cssprop --Widget-padding - Internal padding variable (default: var(--gap-l))
33
- *
34
- * @example
35
- * ```html
36
- * <btu-widget
37
- * collapsible
38
- * heading="My Widget"
39
- * internalname="example"
40
- * widgetid="widget-001">
41
- * <p>Widget content goes here</p>
42
- * </btu-widget>
43
- * ```
44
- */
45
- export default class Widget extends EventEmitterMixin(LitElement) {
46
- constructor() {
47
- super(...arguments);
48
- this._collapsed = false;
49
- /**
50
- * Enable collapsible behavior with expand/collapse controls.
51
- * When enabled, displays a chevron icon and allows users to toggle content visibility.
52
- * @attr
53
- */
54
- this.collapsible = false;
55
- /**
56
- * Internal state tracking whether widget contains error messages.
57
- * Widget automatically expands when errors are detected.
58
- * @private
59
- */
60
- this.invalid = false;
61
- }
62
- /**
63
- * Controls the collapsed state of the widget.
64
- * When set, persists to localStorage and emits btu-widget-toggle event.
65
- * @attr
66
- */
67
- set collapsed(isCollapsed) {
68
- this._collapsed = isCollapsed;
69
- const key = getComponentKey(this, 'data-internal-name');
70
- if (key) {
71
- if (isCollapsed) {
72
- ls.setItem(key, '1');
73
- }
74
- else {
75
- ls.removeItem(key);
76
- }
77
- }
78
- this.requestUpdate();
79
- this.emit('btu-widget-toggle');
80
- }
81
- get collapsed() {
82
- return this._collapsed;
83
- }
84
- connectedCallback() {
85
- super.connectedCallback();
86
- const key = getComponentKey(this, 'data-internal-name');
87
- this.collapsed = key && ls.getItem(key) ? true : false;
88
- }
89
- createRenderRoot() {
90
- return this;
91
- }
92
- firstUpdated() {
93
- this.emit('btu-widget-ready');
94
- this.invalid = this.querySelector('.Message.is-error') != null;
95
- if (!this.collapsible || this.invalid) {
96
- this.collapsed = false;
97
- }
98
- const widgetTitle = this.querySelector('.Widget-title');
99
- // Ensures that the title is always the first child of the widget.
100
- const firstChild = this.firstChild;
101
- if (firstChild instanceof Element && !firstChild.classList.contains('Widget-title')) {
102
- if (widgetTitle) {
103
- this.insertBefore(widgetTitle, firstChild);
104
- }
105
- }
106
- // Hide all children added after render of the widget if it is collapsed
107
- this.querySelectorAll(':scope > :not(.Widget-title, script, select)').forEach(el => {
108
- el.toggleAttribute('hidden', this.collapsed && !this.invalid);
109
- });
110
- }
111
- _collapsibleTemplate() {
112
- return html `<h2
113
- class="Widget-title ${this.invalid
114
- ? 'text-error-600'
115
- : ''} btu-heading-5 sticky top-0 z-10 cursor-pointer overflow-x-clip text-ellipsis whitespace-nowrap border-b border-b-gray-200 bg-white px-[--space] py-3.5 text-gray-900 [grid-column:fullbleed-start_/_fullbleed-end] hover:bg-gray-100 focus:ring-0"
116
- @click="${() => (this.collapsed = !this.collapsed)}"
117
- >
118
- <div
119
- class="Widget-expand ${this.invalid
120
- ? 'after:btu-icon after:btu-icon-circle-alert after:text-error-600'
121
- : ''} relative inline-flex w-full items-center gap-2 focus:ring-0"
122
- role="button"
123
- tabindex="0"
124
- aria-expanded=${!this.collapsed}
125
- title=${this.collapsed ? expandTooltip : collapseTooltip}
126
- @keydown=${ifUnmodified((e) => {
127
- if (e instanceof KeyboardEvent) {
128
- if (e.key === 'Enter' || e.key === ' ') {
129
- e.preventDefault();
130
- this.collapsed = !this.collapsed;
131
- }
132
- }
133
- })}
134
- >
135
- ${this.heading}
136
- <ul
137
- class="Widget-controls sticky top-0 z-[11] order-2 ms-auto flex items-center gap-2 border-b-0 border-b-gray-200 bg-inherit empty:hidden"
138
- aria-hidden="true"
139
- >
140
- <li
141
- class="Widget-collapse btu-button btu-button-text-hidden btu-button-fill-none btu-button-gray btu-button-sm before:btu-icon before:btu-icon-chevron-up ${this
142
- .collapsed
143
- ? 'before:rotate-180'
144
- : ''} before:transition-transform"
145
- title="${this.collapsed ? expandTooltip : collapseTooltip}"
146
- ></li>
147
- </ul>
148
- </div>
149
- </h2>`;
150
- }
151
- render() {
152
- this.classList.add('widget', 'Widget', 'relative', 'grid', 'bg-white');
153
- // Add the collapsible class if the widget can be collapsible.
154
- this.classList.toggle('is-collapsible', this.collapsible);
155
- this.classList.toggle('is-collapsed', this.collapsed);
156
- if (this.collapsed)
157
- this.classList.add('overflow-clip', 'border-b-0', 'pb-0');
158
- // If there are error messages, expand the widget.
159
- this.classList.toggle('is-error', this.invalid);
160
- // Hide all children of the widget if it is collapsed.
161
- this.querySelectorAll(':scope > :not(.Widget-title, script, select)').forEach(el => {
162
- el.toggleAttribute('hidden', this.collapsed);
163
- });
164
- if (this.collapsible) {
165
- this.classList.add('h-[min-content]');
166
- return this._collapsibleTemplate();
167
- }
168
- else {
169
- return html `<h2 class="Widget-title ${this.invalid ? 'text-error-600' : ''}">${this.heading}</h2>`;
170
- }
171
- }
172
- }
173
- __decorate([
174
- property({ type: Boolean })
175
- ], Widget.prototype, "collapsible", void 0);
176
- __decorate([
177
- property({ type: String })
178
- ], Widget.prototype, "heading", void 0);
179
- __decorate([
180
- property({ type: String })
181
- ], Widget.prototype, "internalname", void 0);
182
- __decorate([
183
- state()
184
- ], Widget.prototype, "invalid", void 0);
185
- __decorate([
186
- property({ type: String })
187
- ], Widget.prototype, "widgetid", void 0);
188
- __decorate([
189
- property({ type: Boolean })
190
- ], Widget.prototype, "collapsed", null);
191
- // Register custom element with guard to prevent double registration
192
- // (common with yarn link, HMR, or webpack bundle duplication)
193
- if (!customElements.get('btu-widget')) {
194
- customElements.define('btu-widget', Widget);
195
- }
196
- //# sourceMappingURL=Widget.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Widget.js","sourceRoot":"","sources":["../../../src/components/widget/Widget.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- /**
2
- * Generates a localStorage key for widget collapse state persistence.
3
- * @param component - The component element (typically btu-widget)
4
- * @param nameAttribute - The attribute name to read for component name
5
- * @returns localStorage key in format: BSP.ContentEdit.widgetCollapsed.{typeId}.{componentName}
6
- */
7
- export declare function getComponentKey(component: HTMLElement, nameAttribute: string): string | null;
8
- /**
9
- * Higher-order function that executes a callback only if keyboard event has no modifier keys.
10
- * @param fn - Function to execute if event is unmodified
11
- * @returns Wrapped function that checks for modifiers before executing
12
- */
13
- export declare function ifUnmodified(fn: (...args: unknown[]) => unknown): (...args: unknown[]) => void;
14
- //# sourceMappingURL=WidgetUtils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"WidgetUtils.d.ts","sourceRoot":"","sources":["../../../src/components/widget/WidgetUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkB5F;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,IAC7C,GAAG,MAAM,OAAO,EAAE,UASpC"}
@@ -1,42 +0,0 @@
1
- /**
2
- * Generates a localStorage key for widget collapse state persistence.
3
- * @param component - The component element (typically btu-widget)
4
- * @param nameAttribute - The attribute name to read for component name
5
- * @returns localStorage key in format: BSP.ContentEdit.widgetCollapsed.{typeId}.{componentName}
6
- */
7
- export function getComponentKey(component, nameAttribute) {
8
- const edit = component.closest('.ContentEdit') || component.closest('btu-widget');
9
- if (!edit)
10
- return null;
11
- let typeId;
12
- let componentName;
13
- if (edit.classList.contains('ContentEdit')) {
14
- typeId = edit.getAttribute('data-type-id');
15
- componentName = component.getAttribute(nameAttribute);
16
- if (!typeId || !componentName)
17
- return null;
18
- }
19
- else if (edit instanceof HTMLElement) {
20
- typeId = edit.getAttribute('widgetid');
21
- componentName = edit.getAttribute('internalname');
22
- if (!typeId || !componentName)
23
- return null;
24
- }
25
- return typeId && componentName ? `BSP.ContentEdit.widgetCollapsed.${typeId}.${componentName}` : null;
26
- }
27
- /**
28
- * Higher-order function that executes a callback only if keyboard event has no modifier keys.
29
- * @param fn - Function to execute if event is unmodified
30
- * @returns Wrapped function that checks for modifiers before executing
31
- */
32
- export function ifUnmodified(fn) {
33
- return function (...args) {
34
- if (args[0] instanceof KeyboardEvent) {
35
- const event = args[0];
36
- if (!event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
37
- fn.apply(event.target, args);
38
- }
39
- }
40
- };
41
- }
42
- //# sourceMappingURL=WidgetUtils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"WidgetUtils.js","sourceRoot":"","sources":["../../../src/components/widget/WidgetUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,SAAsB,EAAE,aAAqB;IAC3E,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;IACjF,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAA;IAEtB,IAAI,MAAM,CAAA;IACV,IAAI,aAAa,CAAA;IAEjB,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAC3C,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAA;QAC1C,aAAa,GAAG,SAAS,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA;QACrD,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAA;IAC5C,CAAC;SAAM,IAAI,IAAI,YAAY,WAAW,EAAE,CAAC;QACvC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA;QACtC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAA;QACjD,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAA;IAC5C,CAAC;IAED,OAAO,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,mCAAmC,MAAM,IAAI,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;AACtG,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,EAAmC;IAC9D,OAAO,UAAU,GAAG,IAAe;QACjC,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,aAAa,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;YAErB,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBACzE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YAC9B,CAAC;QACH,CAAC;IACH,CAAC,CAAA;AACH,CAAC"}
@@ -1,43 +0,0 @@
1
- import{x as i}from"./iframe-mIh0R_Av.js";import"./preload-helper-PPVm8Dsz.js";const p=({color:e="gray",affordance:a,size:u="sm",customForegroundColor:n,customBackgroundColor:c,label:g})=>{let l=!1,d=!1;a==="dot"?l=!0:a==="icon"&&(d=!0);const o=[];return n&&o.push(`--badge-color-foreground: ${n}`),c&&o.push(`--badge-color-background: ${c}`),i`
2
- <span
3
- class=${["btu-badge",`btu-badge-${u}`,`btu-badge-${e}`,l?"before:size-2 before:rounded-lg before:bg-[currentColor]":"",d?"before:btu-icon before:btu-icon-xs before:btu-icon-salad":""].join(" ")}
4
- style=${o.length>0?o.join("; "):""}
5
- >
6
- ${g}
7
- </span>
8
- `},m=["black","white","primary","teal","gray","purple","rose","error","warning","success"],f={title:"Components/Badge",component:"btu-badge",tags:["autodocs"],parameters:{docs:{subtitle:"btu-badge"},controls:{expanded:!0}},render:e=>p(e),argTypes:{color:{control:{type:"select"},options:m},affordance:{control:{type:"select"},options:["dot","icon"],description:"Display a design affordance next to the label"},size:{control:{type:"select"},options:["sm","md","lg"]},customForegroundColor:{control:{type:"color"},description:"Custom foreground (text) color - overrides the theme color"},customBackgroundColor:{control:{type:"color"},description:"Custom background color - overrides the theme color"}},args:{color:"purple",affordance:"dot",size:"sm",customForegroundColor:"",customBackgroundColor:"",label:"Badge"}},r={args:{}},s={args:{color:"primary",size:"lg",label:"Custom Colors Badge",customForegroundColor:"#a04b4b",customBackgroundColor:"#dce34d"},parameters:{docs:{description:{story:"Badge supports custom colors using the btu-badge-foreground and btu-badge-background utilities. Setting these values will override any theme colors."}}}},t={args:{color:"success",size:"lg",label:"Linked Badge"},decorators:[e=>i`<a href="#" class="hover:text-primary inline-flex items-center gap-2 hover:underline"
9
- >Hover over me to see the ${e()} in action.</a
10
- >`],parameters:{docs:{description:{story:"Badges inside anchor elements automatically handle underlines properly. The underline uses the badge background color instead of the default link color, ensuring proper visual hierarchy when badges are used as clickable elements."}}}};r.parameters={...r.parameters,docs:{...r.parameters?.docs,source:{originalSource:`{
11
- args: {}
12
- }`,...r.parameters?.docs?.source}}};s.parameters={...s.parameters,docs:{...s.parameters?.docs,source:{originalSource:`{
13
- args: {
14
- color: 'primary',
15
- size: 'lg',
16
- label: 'Custom Colors Badge',
17
- customForegroundColor: '#a04b4b',
18
- customBackgroundColor: '#dce34d'
19
- },
20
- parameters: {
21
- docs: {
22
- description: {
23
- story: \`Badge supports custom colors using the btu-badge-foreground and btu-badge-background utilities. Setting these values will override any theme colors.\`
24
- }
25
- }
26
- }
27
- }`,...s.parameters?.docs?.source}}};t.parameters={...t.parameters,docs:{...t.parameters?.docs,source:{originalSource:`{
28
- args: {
29
- color: 'success',
30
- size: 'lg',
31
- label: 'Linked Badge'
32
- },
33
- decorators: [story => html\`<a href="#" class="hover:text-primary inline-flex items-center gap-2 hover:underline"
34
- >Hover over me to see the \${story()} in action.</a
35
- >\`],
36
- parameters: {
37
- docs: {
38
- description: {
39
- story: \`Badges inside anchor elements automatically handle underlines properly. The underline uses the badge background color instead of the default link color, ensuring proper visual hierarchy when badges are used as clickable elements.\`
40
- }
41
- }
42
- }
43
- }`,...t.parameters?.docs?.source}}};const y=["Default","CustomColors","InsideAnchor"];export{s as CustomColors,r as Default,t as InsideAnchor,y as __namedExportsOrder,f as default};
@@ -1 +0,0 @@
1
- .Widget{--Widget-padding: var(--gap-l);--space: 1.5rem;grid-template-columns:[fullbleed-start] var(--space) [content-start] 1fr auto [content-end] var(--space) [fullbleed-end]}.Widget>*:not(.ContentEdit-preview){grid-column:content-start / content-end}.Widget-title .Label{display:inline-flex}.Widget-controls.is-locked{display:none!important}.Widget:not(.is-collapsible):has(.Widget-controls:not(:empty))>.Widget-title{padding-inline-end:.5rem;grid-column:fullbleed-start / span 2}.Widget:not(.is-collapsible) .Widget-controls{padding-inline-end:var(--space);grid-column:span 2 / fullbleed-end;grid-row:1}.Admin-main .Widget:not(.is-collapsible) .Widget-controls:has(>button:not(.FormFilter-icon)){margin-top:-3.35rem;background-color:var(--btu-theme-white)}.Widget-actionsToggle{--button-bg-gradient: none;--button-color: ;--button-text-color: ;--button-pressed: initial;--button-fill-none: initial;--button-padding-xs: .25rem .5rem;--button-padding-sm: .5rem .875rem;--button-padding-md: .625rem 1rem;--button-padding-lg: .625rem 1.125rem;--button-padding-xl: .75rem 1.25rem;--button-padding-2xl: 1rem 1.75rem;--button-font-size: .875rem;--button-line-height: 1.25rem;display:inline-flex;cursor:pointer;align-items:center;justify-content:center;gap:.5rem;background:var(--button-bg-gradient),var(--button-pressed-color, var(--button-disabled-color, var(--button-color)));border-radius:var(--button-border-radius, .5rem);color:var(--button-pressed-text-color, var(--button-disabled-text-color, var(--button-text-color)));padding:var(--button-padding-sm);font-size:var(--button-font-size);line-height:var(--button-line-height);font-weight:600;position:relative;height:var(--button-size-sm, auto);width:var(--button-size-sm, auto)}.Widget-actionsToggle[aria-pressed=true]{--button-pressed: }.Widget-actionsToggle:disabled{--button-bg-gradient: none;--button-disabled-color: var(--button-disabled-color-fill-none, var(--button-disabled-color-fill, oklch(var(--btu-theme-gray-100))));--button-disabled-text-color: var(--button-disabled-text-color-fill-none, var(--button-text-color, oklch(var(--btu-theme-gray-400))));pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.Widget-actionsToggle[disabled]{--button-bg-gradient: none;--button-disabled-color: var(--button-disabled-color-fill-none, var(--button-disabled-color-fill, oklch(var(--btu-theme-gray-100))));--button-disabled-text-color: var(--button-disabled-text-color-fill-none, var(--button-text-color, oklch(var(--btu-theme-gray-400))));pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.Widget-actionsToggle{text-decoration:none}.Widget-actionsToggle:focus{color:var(--button-pressed-text-color, var(--button-disabled-text-color, var(--button-text-color)))}.Widget-actionsToggle:hover{color:var(--button-pressed-text-color, var(--button-disabled-text-color, var(--button-text-color)))}.Widget-actionsToggle{--button-padding-xs: .25rem;--button-padding-sm: .5rem;--button-padding-md: .625rem;--button-padding-lg: .75rem;--button-padding-xl: .875rem;--button-padding-2xl: 1rem;--button-icon-font-size: 0px;--button-icon-line-height: 1;--button-font-size: var(--button-icon-font-size);--button-line-height: var(--button-icon-line-height);--button-size-xs: 1.75rem;--button-size-sm: 2.25rem;--button-size-md: 2.5rem;--button-size-lg: 2.75rem;--button-size-xl: 3rem;--button-size-2xl: 3.5rem;overflow:hidden;gap:0;--button-fill-none: ;background-color:var(--button-pressed-color, var(--button-fill-none-color));color:var(--button-pressed-text-color, var(--button-disabled-text-color, var(--button-fill-none-text-color)))}.Widget-actionsToggle:focus{color:var(--button-pressed-text-color, var(--button-disabled-text-color, var(--button-fill-none-text-color)))}.Widget-actionsToggle:hover{color:var(--button-pressed-text-color, var(--button-disabled-text-color, var(--button-fill-none-text-color)))}.Widget-actionsToggle{--button-bg-gradient: var(--button-fill-none, none);--button-color: oklch(var(--btu-theme-gray-100));--button-text-color: oklch(var(--btu-theme-gray-700));--button-fill-none-color: transparent;--button-fill-none-text-color: oklch(var(--btu-theme-gray-700));--button-outline-color: oklch(var(--btu-theme-gray-300));--button-disabled-color-fill: oklch(var(--btu-theme-gray-100));--button-disabled-color-fill-none: var(--button-fill-none) oklch(var(--btu-theme-white));--button-disabled-text-color-fill-none: var(--button-fill-none) oklch(var(--btu-theme-gray-400));--button-pressed-color: var(--button-pressed) var(--button-disabled-color, oklch(var(--btu-theme-primary-50)));--button-pressed-text-color: var(--button-pressed) var(--button-disabled-text-color, oklch(var(--btu-theme-primary-800)))}.Widget-actionsToggle:hover{--button-color: oklch(var(--btu-theme-gray-200));--button-fill-none-color: oklch(var(--btu-theme-gray-200));--button-fill-none-text-color: oklch(var(--btu-theme-gray-900))}.Widget-actionsToggle:focus{--button-color: oklch(var(--btu-theme-gray-100));--button-fill-none-color: transparent;--button-fill-none-text-color: oklch(var(--btu-theme-gray-700));--tw-ring-opacity: 1;--tw-ring-color: oklch(var(--btu-theme-primary-100));--tw-ring-offset-width: 1px;--tw-ring-offset-color: oklch(var(--btu-theme-primary-800))}.Widget-actionsToggle.is-focused{--button-color: oklch(var(--btu-theme-gray-100));--button-fill-none-color: transparent;--button-fill-none-text-color: oklch(var(--btu-theme-gray-700));--tw-ring-opacity: 1;--tw-ring-color: oklch(var(--btu-theme-primary-100));--tw-ring-offset-width: 1px;--tw-ring-offset-color: oklch(var(--btu-theme-primary-800))}.Widget-actionsToggle{font-size:var(--button-icon-font-size, .875rem);line-height:var(--button-icon-line-height, 1.25rem);padding:var(--button-padding-sm);width:var(--button-size-sm, auto);height:var(--button-size-sm, auto)}.Widget-actionsToggle:before{font-family:lucide;direction:ltr;display:inline-flex;font-feature-settings:"liga" 0;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-size:var(--Icon-size);font-style:normal;font-weight:400;letter-spacing:normal;line-height:var(--Icon-size);text-transform:none;white-space:nowrap;word-wrap:normal;vertical-align:top;--tw-content: "";content:var(--tw-content);--Icon-size: 1.25rem}.Widget-actionsList{z-index:10000}.Widget-actions.is-open .Widget-actionsToggle{--button-pressed: }.Widget :is(.widget-urls.is-readOnly,.widget-urlsRepeatable.is-readOnly,.ContentEditSites-owner.is-readOnly,.ContentEditSites-access.is-readOnly){pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.75}.Widget .is-readOnly .UrlsWidget-itemLabel a,.widget .is-readOnly .RCIG-title:after,.widget .is-readOnly .ContentSummary-info,.widget .is-readOnly .ContentSelector-edit{pointer-events:auto;cursor:pointer}.Widget.is-collapsible .Widget-title:has(.Widget-expand:focus-visible){--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-inset: inset;--tw-ring-opacity: 1;--tw-ring-color: oklch(var(--btu-theme-primary-600) / var(--tw-ring-opacity, 1));--tw-ring-offset-width: 4px;--tw-ring-offset-color: oklch(var(--btu-theme-primary-100) / 1)}.Widget-heading{padding-top:.5rem;padding-bottom:.5rem;font-size:.875rem;line-height:1.25rem;font-weight:600;--tw-text-opacity: 1;color:oklch(var(--btu-theme-gray-900) / var(--tw-text-opacity, 1))}.Widget-restoreButton{--button-bg-gradient: none;--button-color: ;--button-text-color: ;--button-pressed: initial;--button-fill-none: initial;--button-padding-xs: .25rem .5rem;--button-padding-sm: .5rem .875rem;--button-padding-md: .625rem 1rem;--button-padding-lg: .625rem 1.125rem;--button-padding-xl: .75rem 1.25rem;--button-padding-2xl: 1rem 1.75rem;--button-font-size: .875rem;--button-line-height: 1.25rem;display:inline-flex;cursor:pointer;align-items:center;justify-content:center;gap:.5rem;background:var(--button-bg-gradient),var(--button-pressed-color, var(--button-disabled-color, var(--button-color)));border-radius:var(--button-border-radius, .5rem);color:var(--button-pressed-text-color, var(--button-disabled-text-color, var(--button-text-color)));padding:var(--button-padding-sm);font-size:var(--button-font-size);line-height:var(--button-line-height);font-weight:600;position:relative;height:var(--button-size-sm, auto);width:var(--button-size-sm, auto)}.Widget-restoreButton[aria-pressed=true]{--button-pressed: }.Widget-restoreButton:disabled{--button-bg-gradient: none;--button-disabled-color: var(--button-disabled-color-fill-none, var(--button-disabled-color-fill, oklch(var(--btu-theme-gray-100))));--button-disabled-text-color: var(--button-disabled-text-color-fill-none, var(--button-text-color, oklch(var(--btu-theme-gray-400))));pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.Widget-restoreButton[disabled]{--button-bg-gradient: none;--button-disabled-color: var(--button-disabled-color-fill-none, var(--button-disabled-color-fill, oklch(var(--btu-theme-gray-100))));--button-disabled-text-color: var(--button-disabled-text-color-fill-none, var(--button-text-color, oklch(var(--btu-theme-gray-400))));pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.Widget-restoreButton{text-decoration:none}.Widget-restoreButton:focus{color:var(--button-pressed-text-color, var(--button-disabled-text-color, var(--button-text-color)))}.Widget-restoreButton:hover{color:var(--button-pressed-text-color, var(--button-disabled-text-color, var(--button-text-color)))}.Widget-restoreButton{--button-padding-xs: .25rem;--button-padding-sm: .5rem;--button-padding-md: .625rem;--button-padding-lg: .75rem;--button-padding-xl: .875rem;--button-padding-2xl: 1rem;--button-icon-font-size: 0px;--button-icon-line-height: 1;--button-font-size: var(--button-icon-font-size);--button-line-height: var(--button-icon-line-height);--button-size-xs: 1.75rem;--button-size-sm: 2.25rem;--button-size-md: 2.5rem;--button-size-lg: 2.75rem;--button-size-xl: 3rem;--button-size-2xl: 3.5rem;overflow:hidden;gap:0;--button-bg-gradient: var(--button-fill-none, none);--button-color: oklch(var(--btu-theme-gray-100));--button-text-color: oklch(var(--btu-theme-gray-700));--button-fill-none-color: transparent;--button-fill-none-text-color: oklch(var(--btu-theme-gray-700));--button-outline-color: oklch(var(--btu-theme-gray-300));--button-disabled-color-fill: oklch(var(--btu-theme-gray-100));--button-disabled-color-fill-none: var(--button-fill-none) oklch(var(--btu-theme-white));--button-disabled-text-color-fill-none: var(--button-fill-none) oklch(var(--btu-theme-gray-400));--button-pressed-color: var(--button-pressed) var(--button-disabled-color, oklch(var(--btu-theme-primary-50)));--button-pressed-text-color: var(--button-pressed) var(--button-disabled-text-color, oklch(var(--btu-theme-primary-800)))}.Widget-restoreButton:hover{--button-color: oklch(var(--btu-theme-gray-200));--button-fill-none-color: oklch(var(--btu-theme-gray-200));--button-fill-none-text-color: oklch(var(--btu-theme-gray-900))}.Widget-restoreButton:focus{--button-color: oklch(var(--btu-theme-gray-100));--button-fill-none-color: transparent;--button-fill-none-text-color: oklch(var(--btu-theme-gray-700));--tw-ring-opacity: 1;--tw-ring-color: oklch(var(--btu-theme-primary-100));--tw-ring-offset-width: 1px;--tw-ring-offset-color: oklch(var(--btu-theme-primary-800))}.Widget-restoreButton.is-focused{--button-color: oklch(var(--btu-theme-gray-100));--button-fill-none-color: transparent;--button-fill-none-text-color: oklch(var(--btu-theme-gray-700));--tw-ring-opacity: 1;--tw-ring-color: oklch(var(--btu-theme-primary-100));--tw-ring-offset-width: 1px;--tw-ring-offset-color: oklch(var(--btu-theme-primary-800))}.Widget-restoreButton:before{font-family:lucide;direction:ltr;display:inline-flex;font-feature-settings:"liga" 0;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-size:var(--Icon-size);font-style:normal;font-weight:400;letter-spacing:normal;line-height:var(--Icon-size);text-transform:none;white-space:nowrap;word-wrap:normal;vertical-align:top;--tw-content: "";content:var(--tw-content);--Icon-size: 1.25rem}.Widget-filters,.Widget-filter{display:flex;align-items:center;justify-content:space-between}.Widget-filters{position:relative;padding-top:.75rem}.Widget-filters:before{position:absolute;inset:-.75rem -1rem;border-bottom-width:1px;--tw-border-opacity: 1;border-bottom-color:oklch(var(--btu-theme-gray-200) / var(--tw-border-opacity, 1));content:var(--tw-content);--tw-bg-opacity: 1;background-color:oklch(var(--btu-theme-gray-50) / var(--tw-bg-opacity, 1))}.Widget-filter{z-index:0;flex-direction:row-reverse}.Widget-filterLabel{font-size:.875rem;line-height:1.25rem;font-weight:500}.Widget.is-collapsed>div,.Widget.is-collapsed>table{display:none}