@brightspot/ui 1.0.1-wc.4 → 1.2.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 (131) hide show
  1. package/README.md +7 -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 +82 -0
  8. package/dist/components/avatar/Avatar.d.ts.map +1 -0
  9. package/dist/components/avatar/Avatar.js +162 -0
  10. package/dist/components/avatar/Avatar.js.map +1 -0
  11. package/dist/components/avatar/AvatarGroup.d.ts +70 -0
  12. package/dist/components/avatar/AvatarGroup.d.ts.map +1 -0
  13. package/dist/components/avatar/AvatarGroup.js +145 -0
  14. package/dist/components/avatar/AvatarGroup.js.map +1 -0
  15. package/dist/components/badge/Badge.d.ts +75 -0
  16. package/dist/components/badge/Badge.d.ts.map +1 -0
  17. package/dist/components/badge/Badge.js +118 -0
  18. package/dist/components/badge/Badge.js.map +1 -0
  19. package/dist/components/circular-progress/CircularProgress.d.ts +57 -0
  20. package/dist/components/circular-progress/CircularProgress.d.ts.map +1 -0
  21. package/dist/components/circular-progress/CircularProgress.js +173 -0
  22. package/dist/components/circular-progress/CircularProgress.js.map +1 -0
  23. package/dist/components/icon/Icon.d.ts +90 -0
  24. package/dist/components/icon/Icon.d.ts.map +1 -0
  25. package/dist/components/icon/Icon.js +172 -0
  26. package/dist/components/icon/Icon.js.map +1 -0
  27. package/dist/components/linear-progress/LinearProgress.d.ts +40 -0
  28. package/dist/components/linear-progress/LinearProgress.d.ts.map +1 -0
  29. package/dist/components/linear-progress/LinearProgress.js +95 -0
  30. package/dist/components/linear-progress/LinearProgress.js.map +1 -0
  31. package/dist/custom-elements.json +772 -0
  32. package/dist/global.d.ts +4 -0
  33. package/dist/storybook/assets/Avatar.stories-BlxrclP0.js +209 -0
  34. package/dist/storybook/assets/AvatarGroup.stories-E3VUvBae.js +211 -0
  35. package/dist/storybook/assets/Badge.stories-f4YvPz0W.js +121 -0
  36. package/dist/storybook/assets/Button.stories-N66xrq4q.js +63 -0
  37. package/dist/storybook/assets/CircularProgress.stories-zWyELtfc.js +451 -0
  38. package/dist/storybook/assets/{Color-64QXVMR3-BV_8WWIP.js → Color-64QXVMR3-B3Y5c9dl.js} +1 -1
  39. package/dist/storybook/assets/{Colors.stories-CcpJ2Txp.js → Colors.stories-nEoNeHhf.js} +1 -1
  40. package/dist/storybook/assets/Events.stories-BP3ensxX.js +108 -0
  41. package/dist/storybook/assets/Heading.stories-DGqWaBpi.js +3 -0
  42. package/dist/storybook/assets/Icon.stories-BWWjh4NZ.js +245 -0
  43. package/dist/storybook/assets/LinearProgress.stories-DMVolkoE.js +397 -0
  44. package/dist/storybook/assets/ReadyMixin.stories-DavcxbQ0.js +55 -0
  45. package/dist/storybook/assets/ScrollShadow.stories-BmwSRNje.js +17 -0
  46. package/dist/storybook/assets/Throttle.stories-DBj-9rhV.js +303 -0
  47. package/dist/storybook/assets/{WithTooltip-SK46ZJ2J-DyavE1Bj.js → WithTooltip-SK46ZJ2J-DW4NXFWt.js} +5 -5
  48. package/dist/storybook/assets/formatter-OMEEQ6HG-BBn014aZ.js +1 -0
  49. package/dist/storybook/assets/iframe-CxsKJSj-.css +1 -0
  50. package/dist/storybook/assets/{iframe-mIh0R_Av.js → iframe-Z4F0Cgki.js} +87 -100
  51. package/dist/storybook/assets/{index-C8IjQgz6.js → index-BUj5S-B7.js} +1 -1
  52. package/dist/storybook/assets/{syntaxhighlighter-CAVLW7PM-36bUIV4n.js → syntaxhighlighter-CAVLW7PM-CsQveU1N.js} +1 -1
  53. package/dist/storybook/iframe.html +2 -2
  54. package/dist/storybook/index.json +1 -1
  55. package/dist/storybook/project.json +1 -1
  56. package/dist/tailwind-plugin-avatar.d.ts +2 -0
  57. package/dist/tailwind-plugin-avatar.d.ts.map +1 -0
  58. package/dist/tailwind-plugin-avatar.js +130 -0
  59. package/dist/tailwind-plugin-avatar.js.map +1 -0
  60. package/dist/tailwind-plugin-avatar.ts +181 -0
  61. package/dist/tailwind-plugin-badge.js +24 -9
  62. package/dist/tailwind-plugin-badge.js.map +1 -1
  63. package/dist/tailwind-plugin-badge.ts +30 -11
  64. package/dist/tailwind-plugin-button.js +14 -15
  65. package/dist/tailwind-plugin-button.js.map +1 -1
  66. package/dist/tailwind-plugin-button.ts +14 -17
  67. package/dist/tailwind-plugin-contrast.d.ts +2 -0
  68. package/dist/tailwind-plugin-contrast.d.ts.map +1 -0
  69. package/dist/tailwind-plugin-contrast.js +17 -0
  70. package/dist/tailwind-plugin-contrast.js.map +1 -0
  71. package/dist/tailwind-plugin-contrast.ts +18 -0
  72. package/dist/tailwind-plugin-icon.js +17 -10
  73. package/dist/tailwind-plugin-icon.js.map +1 -1
  74. package/dist/tailwind-plugin-icon.ts +17 -10
  75. package/dist/tailwind-plugin-ring-contrast.d.ts +2 -0
  76. package/dist/tailwind-plugin-ring-contrast.d.ts.map +1 -0
  77. package/dist/tailwind-plugin-ring-contrast.js +76 -0
  78. package/dist/tailwind-plugin-ring-contrast.js.map +1 -0
  79. package/dist/tailwind-plugin-ring-contrast.ts +90 -0
  80. package/dist/tailwind.config.d.ts +21 -0
  81. package/dist/tailwind.config.d.ts.map +1 -1
  82. package/dist/tailwind.config.js +27 -2
  83. package/dist/tailwind.config.js.map +1 -1
  84. package/dist/tailwind.config.ts +27 -2
  85. package/dist/{utils → util}/EventEmitterMixin.d.ts +23 -17
  86. package/dist/util/EventEmitterMixin.d.ts.map +1 -0
  87. package/dist/{utils → util}/EventEmitterMixin.js +7 -7
  88. package/dist/util/EventEmitterMixin.js.map +1 -0
  89. package/dist/util/ProgressMixin.d.ts +52 -0
  90. package/dist/util/ProgressMixin.d.ts.map +1 -0
  91. package/dist/util/ProgressMixin.js +190 -0
  92. package/dist/util/ProgressMixin.js.map +1 -0
  93. package/dist/util/ReadyMixin.d.ts +31 -0
  94. package/dist/util/ReadyMixin.d.ts.map +1 -0
  95. package/dist/util/ReadyMixin.js +42 -0
  96. package/dist/util/ReadyMixin.js.map +1 -0
  97. package/dist/util/aria.d.ts +3 -0
  98. package/dist/util/aria.d.ts.map +1 -0
  99. package/dist/util/aria.js +44 -0
  100. package/dist/util/aria.js.map +1 -0
  101. package/dist/util/svg.d.ts +9 -0
  102. package/dist/util/svg.d.ts.map +1 -1
  103. package/dist/util/svg.js +22 -0
  104. package/dist/util/svg.js.map +1 -1
  105. package/dist/util/throttle.d.ts +4 -0
  106. package/dist/util/throttle.d.ts.map +1 -0
  107. package/dist/util/throttle.js +30 -0
  108. package/dist/util/throttle.js.map +1 -0
  109. package/package.json +7 -6
  110. package/custom-elements.json +0 -214
  111. package/dist/components/widget/Widget.css +0 -118
  112. package/dist/components/widget/Widget.d.ts +0 -90
  113. package/dist/components/widget/Widget.d.ts.map +0 -1
  114. package/dist/components/widget/Widget.js +0 -196
  115. package/dist/components/widget/Widget.js.map +0 -1
  116. package/dist/components/widget/WidgetUtils.d.ts +0 -14
  117. package/dist/components/widget/WidgetUtils.d.ts.map +0 -1
  118. package/dist/components/widget/WidgetUtils.js +0 -42
  119. package/dist/components/widget/WidgetUtils.js.map +0 -1
  120. package/dist/storybook/assets/Badge.stories-cKvztBhm.js +0 -43
  121. package/dist/storybook/assets/Button.stories-BH3fEuOH.js +0 -63
  122. package/dist/storybook/assets/Heading.stories-cqZamo-6.js +0 -3
  123. package/dist/storybook/assets/Icon.stories-uPhO3RBG.js +0 -28543
  124. package/dist/storybook/assets/Loader.stories-D7Bl-LN9.js +0 -3
  125. package/dist/storybook/assets/ScrollShadow.stories-CWKYDYLk.js +0 -17
  126. package/dist/storybook/assets/Widget-CRTwFkFc.css +0 -1
  127. package/dist/storybook/assets/Widget.stories-CcjywoYR.js +0 -300
  128. package/dist/storybook/assets/formatter-OMEEQ6HG-DBJ97XaR.js +0 -1
  129. package/dist/storybook/assets/iframe-BdHEYpHD.css +0 -1
  130. package/dist/utils/EventEmitterMixin.d.ts.map +0 -1
  131. package/dist/utils/EventEmitterMixin.js.map +0 -1
@@ -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,63 +0,0 @@
1
- import{x as v}from"./iframe-mIh0R_Av.js";import"./preload-helper-PPVm8Dsz.js";const I=({color:r="primary",pressed:a,fill:i,contained:c,outlined:l,size:d="sm",label:u,icon:b,hideText:p,disabled:m})=>{const g=i?"":"btu-button-fill-none",y=c?"":"btu-button-container-none",h=l?"btu-button-outline":"",f=p?"btu-button-text-hidden":"",x=b?["before:btu-icon","before:btu-icon-smile"]:[];return v`
2
- <button
3
- type="button"
4
- class=${["btu-button",`btu-button-${r}`,`btu-button-${d}`,g,y,h,f,...x].join(" ")}
5
- ?disabled=${m}
6
- aria-pressed=${a?"true":"false"}
7
- >
8
- ${u}
9
- </button>
10
- `},B=["ai","black","white","primary","teal","gray","purple","rose","error","warning","success"],S={title:"Components/Button",component:"btu-button",tags:["autodocs"],parameters:{docs:{subtitle:"btu-button"},controls:{expanded:!0}},render:r=>I(r),argTypes:{color:{control:{type:"select"},options:B},contained:{control:{type:"boolean"},description:"Does the button have a container?"},disabled:{control:{type:"boolean"},description:"Is the button disabled?"},fill:{control:{type:"boolean"},description:"Is the button filled?"},hideText:{control:{type:"boolean"},description:"Icon only mode (hides label)"},icon:{table:{disable:!0}},label:{control:{type:"text"},description:"Button label text"},outlined:{control:{type:"boolean"},description:"Is the button outlined?"},pressed:{control:{type:"boolean"},description:"Is the button pressed?"},size:{control:{type:"select"},options:["sm","md","lg","xl","2xl"]}},args:{color:"primary",contained:!0,disabled:!1,fill:!0,hideText:!1,icon:"",label:"Button",outlined:!1,pressed:!1,size:"md"}},e={args:{}},t={args:{label:"Search",icon:"before:btu-icon-smile"},parameters:{docs:{description:{story:"Button with an icon alongside text."}}}},o={args:{icon:"before:btu-icon-smile",hideText:!0},parameters:{docs:{description:{story:"Icon-only button. Uses `btu-button-text-hidden` to hide the label."}}}},s={args:{label:"Disabled Button",disabled:!0},parameters:{docs:{description:{story:"Disabled button state. Uses the `[disabled]` attribute to trigger disabled styling with reduced opacity and pointer events disabled."}}}},n={args:{label:"Active Button",pressed:!0,fill:!1,icon:"before:btu-icon-smile",hideText:!0},parameters:{docs:{description:{story:'Active/pressed button state. Uses `[aria-pressed="true"]` attribute to trigger the pressed styling, typically used for toggle buttons or to show an active state.'}}}};e.parameters={...e.parameters,docs:{...e.parameters?.docs,source:{originalSource:`{
11
- args: {}
12
- }`,...e.parameters?.docs?.source}}};t.parameters={...t.parameters,docs:{...t.parameters?.docs,source:{originalSource:`{
13
- args: {
14
- label: 'Search',
15
- icon: 'before:btu-icon-smile'
16
- },
17
- parameters: {
18
- docs: {
19
- description: {
20
- story: \`Button with an icon alongside text.\`
21
- }
22
- }
23
- }
24
- }`,...t.parameters?.docs?.source}}};o.parameters={...o.parameters,docs:{...o.parameters?.docs,source:{originalSource:`{
25
- args: {
26
- icon: 'before:btu-icon-smile',
27
- hideText: true
28
- },
29
- parameters: {
30
- docs: {
31
- description: {
32
- story: \`Icon-only button. Uses \\\`btu-button-text-hidden\\\` to hide the label.\`
33
- }
34
- }
35
- }
36
- }`,...o.parameters?.docs?.source}}};s.parameters={...s.parameters,docs:{...s.parameters?.docs,source:{originalSource:`{
37
- args: {
38
- label: 'Disabled Button',
39
- disabled: true
40
- },
41
- parameters: {
42
- docs: {
43
- description: {
44
- story: \`Disabled button state. Uses the \\\`[disabled]\\\` attribute to trigger disabled styling with reduced opacity and pointer events disabled.\`
45
- }
46
- }
47
- }
48
- }`,...s.parameters?.docs?.source}}};n.parameters={...n.parameters,docs:{...n.parameters?.docs,source:{originalSource:`{
49
- args: {
50
- label: 'Active Button',
51
- pressed: true,
52
- fill: false,
53
- icon: 'before:btu-icon-smile',
54
- hideText: true
55
- },
56
- parameters: {
57
- docs: {
58
- description: {
59
- story: \`Active/pressed button state. Uses \\\`[aria-pressed="true"]\\\` attribute to trigger the pressed styling, typically used for toggle buttons or to show an active state.\`
60
- }
61
- }
62
- }
63
- }`,...n.parameters?.docs?.source}}};const T=["Default","WithIcon","IconOnly","Disabled","ActivePressed"];export{n as ActivePressed,e as Default,s as Disabled,o as IconOnly,t as WithIcon,T as __namedExportsOrder,S as default};
@@ -1,3 +0,0 @@
1
- import{x as s}from"./iframe-mIh0R_Av.js";import"./preload-helper-PPVm8Dsz.js";const a=({size:t})=>s` <div class=${[`btu-heading-${t}`].join(" ")}>Heading</div> `,n={title:"Components/Heading",component:"btu-heading",tags:["autodocs"],parameters:{docs:{subtitle:"btu-heading"},controls:{expanded:!0}},render:t=>a(t),argTypes:{size:{control:{type:"range",min:1,max:5,step:1},description:"Heading size from 1 to 5, where 1 is the largest and 5 is the smallest."}},args:{size:1}},e={args:{}};e.parameters={...e.parameters,docs:{...e.parameters?.docs,source:{originalSource:`{
2
- args: {}
3
- }`,...e.parameters?.docs?.source}}};const i=["Default"];export{e as Default,i as __namedExportsOrder,n as default};