@brightspot/ui 1.5.0 → 1.7.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 (105) hide show
  1. package/dist/components/dropdown/Dropdown.d.ts +172 -0
  2. package/dist/components/dropdown/Dropdown.d.ts.map +1 -0
  3. package/dist/components/dropdown/Dropdown.js +407 -0
  4. package/dist/components/dropdown/Dropdown.js.map +1 -0
  5. package/dist/components/dropdown/DropdownItem.d.ts +108 -0
  6. package/dist/components/dropdown/DropdownItem.d.ts.map +1 -0
  7. package/dist/components/dropdown/DropdownItem.js +210 -0
  8. package/dist/components/dropdown/DropdownItem.js.map +1 -0
  9. package/dist/components/dropdown/DropdownMenu.d.ts +117 -0
  10. package/dist/components/dropdown/DropdownMenu.d.ts.map +1 -0
  11. package/dist/components/dropdown/DropdownMenu.js +295 -0
  12. package/dist/components/dropdown/DropdownMenu.js.map +1 -0
  13. package/dist/components/pagination/Pagination.d.ts +109 -0
  14. package/dist/components/pagination/Pagination.d.ts.map +1 -0
  15. package/dist/components/pagination/Pagination.js +351 -0
  16. package/dist/components/pagination/Pagination.js.map +1 -0
  17. package/dist/custom-elements.json +1642 -182
  18. package/dist/storybook/assets/Avatar.stories-BAaSlDF7.js +213 -0
  19. package/dist/storybook/assets/AvatarGroup.stories-CgoDB4N4.js +225 -0
  20. package/dist/storybook/assets/{Badge.stories-Bbnc6fRy.js → Badge.stories-uexxdmo6.js} +3 -3
  21. package/dist/storybook/assets/{Button.stories-CRJ5n2y4.js → Button.stories-T9UJUPHI.js} +1 -1
  22. package/dist/storybook/assets/{CircularProgress.stories-D9vBj3JJ.js → CircularProgress.stories-DW-VJA5j.js} +6 -6
  23. package/dist/storybook/assets/{ClipboardMixin.stories-Dm-Jm4yb.js → ClipboardMixin.stories-DzU4vxu5.js} +1 -1
  24. package/dist/storybook/assets/{Color-6BZIO3FS-BcNIJY1U.js → Color-6BZIO3FS-DRk2xjoN.js} +1 -1
  25. package/dist/storybook/assets/{Colors.stories-B9_090wL.js → Colors.stories-_UPdvuhY.js} +1 -1
  26. package/dist/storybook/assets/{ComponentStatesMixin-ChiFBCuo.js → ComponentStatesMixin-BIu5SKeV.js} +1 -1
  27. package/dist/storybook/assets/{ComponentStatesMixin.stories-DHv9MHmE.js → ComponentStatesMixin.stories-C0FLaqLu.js} +1 -1
  28. package/dist/storybook/assets/{CopyToClipboard.stories-gtJlTP1l.js → CopyToClipboard.stories-D31zoUVI.js} +1 -1
  29. package/dist/storybook/assets/{Debounce.stories-BBNX7mJA.js → Debounce.stories-CgPPl5Ee.js} +1 -1
  30. package/dist/storybook/assets/{DocsRenderer-LL677BLK-D-E99pXl.js → DocsRenderer-LL677BLK-iwiwOzX9.js} +6 -6
  31. package/dist/storybook/assets/Dropdown.stories-CDcl6rmG.js +697 -0
  32. package/dist/storybook/assets/{Events.stories-DDmydlh_.js → Events.stories-DS6UC9dZ.js} +1 -1
  33. package/dist/storybook/assets/{Heading.stories-BLGfko-i.js → Heading.stories-CAQfEGE2.js} +1 -1
  34. package/dist/storybook/assets/{Icon.stories-BHnAGcFF.js → Icon.stories-C7msWlHs.js} +11 -11
  35. package/dist/storybook/assets/{LinearProgress.stories-Dx26a0P_.js → LinearProgress.stories-DBGJ5a2-.js} +7 -7
  36. package/dist/storybook/assets/Pagination.stories-C58bGOdf.js +272 -0
  37. package/dist/storybook/assets/{Popover.stories-CbqpY6YR.js → Popover.stories-C9zU0sEX.js} +5 -5
  38. package/dist/storybook/assets/{ReadyMixin-BHiHoIbr.js → ReadyMixin-qf8SAjMu.js} +1 -1
  39. package/dist/storybook/assets/{Rtc.stories-CAjDv_Ub.js → Rtc.stories-k9tKHNhD.js} +1 -1
  40. package/dist/storybook/assets/{ScrollShadow.stories-BSV4U-tq.js → ScrollShadow.stories-Bp42zyLH.js} +1 -1
  41. package/dist/storybook/assets/{Throttle.stories-kaxXQ8RZ.js → Throttle.stories-B5YU-Nms.js} +1 -1
  42. package/dist/storybook/assets/Tooltip.stories-COQcvOnL.js +143 -0
  43. package/dist/storybook/assets/{Widget.stories-DqATHnSq.js → Widget.stories-D3Sq5-_A.js} +13 -13
  44. package/dist/storybook/assets/{WithTooltip-65CFNBJE-BtbbFYSA.js → WithTooltip-65CFNBJE-Cox81aM_.js} +1 -1
  45. package/dist/storybook/assets/{formatter-EIJCOSYU-C87Csnpu.js → formatter-EIJCOSYU-3ErcoV9q.js} +1 -1
  46. package/dist/storybook/assets/if-defined-Bv2_qPJg.js +1 -0
  47. package/dist/storybook/assets/{iframe-CcloOV09.js → iframe-CM6gBkqA.js} +170 -170
  48. package/dist/storybook/assets/iframe-D3r2Ciu8.css +1 -0
  49. package/dist/storybook/assets/{index-DP7vnJf7.js → index-iwfnMgqg.js} +1 -1
  50. package/dist/storybook/assets/{onFind.stories-BxvoC-Z-.js → onFind.stories-CDtoTN6S.js} +1 -1
  51. package/dist/storybook/assets/{onRemove.stories-Dwoixzb0.js → onRemove.stories-CSTeFCLU.js} +1 -1
  52. package/dist/storybook/assets/{onVisible.stories-CinmRF9w.js → onVisible.stories-C-yiw9n4.js} +1 -1
  53. package/dist/storybook/assets/style-map-BJGdSb_D.js +1 -0
  54. package/dist/storybook/assets/{syntaxhighlighter-ED5Y7EFY-BHLkDkOn.js → syntaxhighlighter-ED5Y7EFY-BEudYlVi.js} +1 -1
  55. package/dist/storybook/iframe.html +2 -2
  56. package/dist/storybook/index.json +1 -1
  57. package/dist/storybook/project.json +1 -1
  58. package/dist/tailwind-plugin-button.js +10 -0
  59. package/dist/tailwind-plugin-button.js.map +1 -1
  60. package/dist/tailwind-plugin-button.ts +10 -0
  61. package/dist/tailwind-plugin-dropdown.d.ts +2 -0
  62. package/dist/tailwind-plugin-dropdown.d.ts.map +1 -0
  63. package/dist/tailwind-plugin-dropdown.js +223 -0
  64. package/dist/tailwind-plugin-dropdown.js.map +1 -0
  65. package/dist/tailwind-plugin-dropdown.ts +249 -0
  66. package/dist/tailwind-plugin-pagination.d.ts +2 -0
  67. package/dist/tailwind-plugin-pagination.d.ts.map +1 -0
  68. package/dist/tailwind-plugin-pagination.js +164 -0
  69. package/dist/tailwind-plugin-pagination.js.map +1 -0
  70. package/dist/tailwind-plugin-pagination.ts +179 -0
  71. package/dist/tailwind.config.d.ts +1 -4
  72. package/dist/tailwind.config.d.ts.map +1 -1
  73. package/dist/tailwind.config.js +1 -0
  74. package/dist/tailwind.config.js.map +1 -1
  75. package/dist/tailwind.config.ts +1 -0
  76. package/dist/util/EventEmitterMixin.d.ts +22 -0
  77. package/dist/util/EventEmitterMixin.d.ts.map +1 -1
  78. package/dist/util/EventEmitterMixin.js.map +1 -1
  79. package/dist/util/aria.d.ts.map +1 -1
  80. package/dist/util/aria.js +2 -1
  81. package/dist/util/aria.js.map +1 -1
  82. package/dist/util/i18n.d.ts +13 -0
  83. package/dist/util/i18n.d.ts.map +1 -0
  84. package/dist/util/i18n.js +21 -0
  85. package/dist/util/i18n.js.map +1 -0
  86. package/docs/components/Avatar.md +62 -0
  87. package/docs/components/AvatarGroup.md +52 -0
  88. package/docs/components/Badge.md +58 -0
  89. package/docs/components/CircularProgress.md +55 -0
  90. package/docs/components/CopyToClipboard.md +54 -0
  91. package/docs/components/Dropdown.md +100 -0
  92. package/docs/components/DropdownItem.md +64 -0
  93. package/docs/components/DropdownMenu.md +81 -0
  94. package/docs/components/Icon.md +61 -0
  95. package/docs/components/LinearProgress.md +40 -0
  96. package/docs/components/Pagination.md +95 -0
  97. package/docs/components/Popover.md +71 -0
  98. package/docs/components/README.md +24 -0
  99. package/docs/components/Widget.md +79 -0
  100. package/package.json +4 -3
  101. package/dist/storybook/assets/Avatar.stories-CPVNxsaA.js +0 -214
  102. package/dist/storybook/assets/AvatarGroup.stories-Bl65NGHl.js +0 -225
  103. package/dist/storybook/assets/Tooltip.stories-CsxXkztr.js +0 -143
  104. package/dist/storybook/assets/if-defined-COHr0XBn.js +0 -1
  105. package/dist/storybook/assets/iframe-BkDGeDre.css +0 -1
@@ -0,0 +1,295 @@
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, nothing } from 'lit';
8
+ import { property } from 'lit/decorators.js';
9
+ import { EventEmitterMixin } from '../../util/EventEmitterMixin.js';
10
+ import { ReadyMixin } from '../../util/ReadyMixin.js';
11
+ /**
12
+ * A menu container component that provides keyboard navigation and ARIA menu semantics.
13
+ *
14
+ * Contains `btu-dropdown-item` children and manages roving tabindex, typeahead search,
15
+ * and keyboard navigation following the WAI-ARIA Menu Button Pattern.
16
+ *
17
+ * @element btu-dropdown-menu
18
+ *
19
+ * @fires {CustomEvent} btu-dropdown-menu-ready - Fired after first render
20
+ *
21
+ * @slot - Menu items (`btu-dropdown-item` elements)
22
+ *
23
+ * @cssprop --dropdown-empty-color - Empty state text color (default: gray-400)
24
+ *
25
+ * @example
26
+ * ```html
27
+ * <btu-dropdown-menu name="Sort By" header checkbox>
28
+ * <btu-dropdown-item label="Name" selected></btu-dropdown-item>
29
+ * <btu-dropdown-item label="Date"></btu-dropdown-item>
30
+ * <btu-dropdown-item label="Size"></btu-dropdown-item>
31
+ * </btu-dropdown-menu>
32
+ * ```
33
+ */
34
+ export default class DropdownMenu extends EventEmitterMixin(ReadyMixin(LitElement)) {
35
+ constructor() {
36
+ super(...arguments);
37
+ /**
38
+ * Accessible name for the menu, displayed in header when header is true.
39
+ * @attr
40
+ */
41
+ this.name = '';
42
+ /**
43
+ * Show header bar with menu name.
44
+ * @attr
45
+ */
46
+ this.header = false;
47
+ /**
48
+ * Enable checkbox mode for items (menuitemcheckbox role).
49
+ * @attr
50
+ */
51
+ this.checkbox = false;
52
+ /**
53
+ * Show icons before each item.
54
+ * @attr
55
+ */
56
+ this.icon = false;
57
+ /**
58
+ * Fallback Lucide icon symbol for items without their own.
59
+ * @attr icon-symbol
60
+ */
61
+ this.iconSymbol = '';
62
+ /**
63
+ * Show favorite toggle on each item.
64
+ * @attr
65
+ */
66
+ this.favorites = false;
67
+ /**
68
+ * Show keyboard shortcut text on each item.
69
+ * @attr
70
+ */
71
+ this.shortcuts = false;
72
+ /**
73
+ * Message displayed when the menu has no focusable items.
74
+ * @attr empty-message
75
+ */
76
+ this.emptyMessage = 'No items available';
77
+ /** @internal */
78
+ this._typeaheadBuffer = '';
79
+ /** @internal */
80
+ this._typeaheadTimeout = null;
81
+ /** @internal */
82
+ this._handleKeydown = (e) => {
83
+ const focusable = this._getFocusableItems();
84
+ if (focusable.length === 0)
85
+ return;
86
+ const currentIndex = this._getCurrentFocusIndex(focusable);
87
+ switch (e.key) {
88
+ case 'ArrowDown': {
89
+ e.preventDefault();
90
+ const next = this._findNextIndex(focusable, currentIndex, 1);
91
+ this.focusItem(focusable[next]);
92
+ break;
93
+ }
94
+ case 'ArrowUp': {
95
+ e.preventDefault();
96
+ const prev = this._findNextIndex(focusable, currentIndex, -1);
97
+ this.focusItem(focusable[prev]);
98
+ break;
99
+ }
100
+ case 'Home': {
101
+ e.preventDefault();
102
+ this.focusItem(focusable[0]);
103
+ break;
104
+ }
105
+ case 'End': {
106
+ e.preventDefault();
107
+ this.focusItem(focusable[focusable.length - 1]);
108
+ break;
109
+ }
110
+ case 'Enter': {
111
+ e.preventDefault();
112
+ if (currentIndex >= 0) {
113
+ focusable[currentIndex].activate();
114
+ }
115
+ break;
116
+ }
117
+ case ' ': {
118
+ e.preventDefault();
119
+ if (currentIndex >= 0) {
120
+ focusable[currentIndex].activate();
121
+ }
122
+ break;
123
+ }
124
+ case 'Escape': {
125
+ // Bubble up to Dropdown to handle close
126
+ break;
127
+ }
128
+ case 'Tab': {
129
+ // Bubble up to Dropdown to handle close + focus restore
130
+ break;
131
+ }
132
+ default: {
133
+ // Typeahead: printable characters
134
+ if (e.key.length === 1 && !e.ctrlKey && !e.metaKey && !e.altKey) {
135
+ this._handleTypeahead(e.key, focusable);
136
+ }
137
+ break;
138
+ }
139
+ }
140
+ };
141
+ }
142
+ createRenderRoot() {
143
+ this.renderOptions.renderBefore ??= this.firstChild;
144
+ return this;
145
+ }
146
+ connectedCallback() {
147
+ super.connectedCallback();
148
+ this.setAttribute('role', 'menu');
149
+ if (this.name) {
150
+ this.setAttribute('aria-label', this.name);
151
+ }
152
+ this.addEventListener('keydown', this._handleKeydown);
153
+ }
154
+ disconnectedCallback() {
155
+ super.disconnectedCallback();
156
+ this.removeEventListener('keydown', this._handleKeydown);
157
+ if (this._typeaheadTimeout) {
158
+ clearTimeout(this._typeaheadTimeout);
159
+ }
160
+ }
161
+ firstUpdated() {
162
+ this._configureItems();
163
+ this.emit('btu-dropdown-menu-ready');
164
+ }
165
+ updated() {
166
+ this._configureItems();
167
+ if (this.name) {
168
+ this.setAttribute('aria-label', this.name);
169
+ }
170
+ else {
171
+ this.removeAttribute('aria-label');
172
+ }
173
+ }
174
+ /** Configure all child items with menu-level settings */
175
+ _configureItems() {
176
+ const items = this._getAllItems();
177
+ items.forEach(item => {
178
+ item._configure({
179
+ checkbox: this.checkbox,
180
+ icon: this.icon,
181
+ iconSymbol: this.iconSymbol,
182
+ favorites: this.favorites,
183
+ shortcuts: this.shortcuts,
184
+ });
185
+ });
186
+ }
187
+ /** Get all btu-dropdown-item children */
188
+ _getAllItems() {
189
+ return Array.from(this.querySelectorAll('btu-dropdown-item'));
190
+ }
191
+ /** Get only focusable items (default type, skip dividers/subheads) */
192
+ _getFocusableItems() {
193
+ return this._getAllItems().filter(item => item.focusable);
194
+ }
195
+ /** @internal Focus a specific item by updating tabindex */
196
+ focusItem(item) {
197
+ const focusable = this._getFocusableItems();
198
+ focusable.forEach(i => {
199
+ const el = i.querySelector('[role="menuitem"], [role="menuitemcheckbox"]');
200
+ if (el)
201
+ el.setAttribute('tabindex', '-1');
202
+ });
203
+ const target = item.querySelector('[role="menuitem"], [role="menuitemcheckbox"]');
204
+ if (target) {
205
+ target.setAttribute('tabindex', '0');
206
+ target.focus();
207
+ }
208
+ }
209
+ /** @internal Focus the first non-disabled focusable item (or first checked in checkbox mode) */
210
+ focusFirst() {
211
+ const items = this._getFocusableItems();
212
+ if (this.checkbox) {
213
+ const checked = items.find(i => i.selected && !i.disabled);
214
+ if (checked) {
215
+ this.focusItem(checked);
216
+ return;
217
+ }
218
+ }
219
+ const first = items.find(i => !i.disabled) || items[0];
220
+ if (first)
221
+ this.focusItem(first);
222
+ }
223
+ /** @internal Focus the last non-disabled focusable item */
224
+ focusLast() {
225
+ const items = this._getFocusableItems();
226
+ const last = [...items].reverse().find(i => !i.disabled) || items[items.length - 1];
227
+ if (last)
228
+ this.focusItem(last);
229
+ }
230
+ /** Find the current focused item index */
231
+ _getCurrentFocusIndex(focusable) {
232
+ const active = document.activeElement;
233
+ return focusable.findIndex(item => item.contains(active));
234
+ }
235
+ /** Find next index wrapping around, moving in direction (+1 or -1) */
236
+ _findNextIndex(focusable, current, direction) {
237
+ const len = focusable.length;
238
+ if (current < 0)
239
+ return direction === 1 ? 0 : len - 1;
240
+ const next = (current + direction + len) % len;
241
+ return next;
242
+ }
243
+ /** Typeahead character matching with 500ms accumulation */
244
+ _handleTypeahead(char, focusable) {
245
+ this._typeaheadBuffer += char.toLowerCase();
246
+ if (this._typeaheadTimeout) {
247
+ clearTimeout(this._typeaheadTimeout);
248
+ }
249
+ this._typeaheadTimeout = setTimeout(() => {
250
+ this._typeaheadBuffer = '';
251
+ }, 500);
252
+ const match = focusable.find(item => item.label.toLowerCase().startsWith(this._typeaheadBuffer));
253
+ if (match) {
254
+ this.focusItem(match);
255
+ }
256
+ }
257
+ /** Check whether the menu has zero focusable items */
258
+ get _isEmpty() {
259
+ return this._getFocusableItems().length === 0;
260
+ }
261
+ render() {
262
+ return html `${this.header && this.name ? html `<div class="btu-dropdown-header">${this.name}</div>` : nothing}${this
263
+ ._isEmpty
264
+ ? html `<div class="btu-dropdown-empty" role="status">${this.emptyMessage}</div>`
265
+ : nothing}`;
266
+ }
267
+ }
268
+ __decorate([
269
+ property({ type: String })
270
+ ], DropdownMenu.prototype, "name", void 0);
271
+ __decorate([
272
+ property({ type: Boolean })
273
+ ], DropdownMenu.prototype, "header", void 0);
274
+ __decorate([
275
+ property({ type: Boolean })
276
+ ], DropdownMenu.prototype, "checkbox", void 0);
277
+ __decorate([
278
+ property({ type: Boolean })
279
+ ], DropdownMenu.prototype, "icon", void 0);
280
+ __decorate([
281
+ property({ type: String, attribute: 'icon-symbol' })
282
+ ], DropdownMenu.prototype, "iconSymbol", void 0);
283
+ __decorate([
284
+ property({ type: Boolean })
285
+ ], DropdownMenu.prototype, "favorites", void 0);
286
+ __decorate([
287
+ property({ type: Boolean })
288
+ ], DropdownMenu.prototype, "shortcuts", void 0);
289
+ __decorate([
290
+ property({ type: String, attribute: 'empty-message' })
291
+ ], DropdownMenu.prototype, "emptyMessage", void 0);
292
+ if (!customElements.get('btu-dropdown-menu')) {
293
+ customElements.define('btu-dropdown-menu', DropdownMenu);
294
+ }
295
+ //# sourceMappingURL=DropdownMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DropdownMenu.js","sourceRoot":"","sources":["../../../src/components/dropdown/DropdownMenu.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ import { LitElement } from 'lit';
2
+ import '../circular-progress/CircularProgress.js';
3
+ import '../icon/Icon.js';
4
+ declare const Pagination_base: (new (...args: any[]) => import("../../util/EventEmitterMixin.js").EventEmitterMixinInterface) & (new (...args: any[]) => import("../../util/ReadyMixin.js").ReadyMixinInterface) & typeof LitElement;
5
+ /**
6
+ * A pagination component for navigating through paged content.
7
+ *
8
+ * Supports multiple layout variants (Search, Widget, Widget Small, Calendar)
9
+ * through configurable props and pseudo-slots.
10
+ *
11
+ * @element btu-pagination
12
+ *
13
+ * @slot page-size - Custom page-size selector (replaces built-in select)
14
+ * @slot jumper - Custom jumper content (e.g., page dropdown, "Today" button)
15
+ *
16
+ * @fires {CustomEvent} btu-pagination-ready - Fired after first render
17
+ * @fires {CustomEvent<{page: number, pageSize: number}>} btu-pagination-change - Fired on page navigation
18
+ * @fires {CustomEvent<{page: number, pageSize: number}>} btu-pagination-page-size-change - Fired on page size change
19
+ *
20
+ * @cssprop --pagination-color-background - Background color for select, buttons, and jumper
21
+ * @cssprop --pagination-color-foreground - Text/icon color
22
+ */
23
+ export default class Pagination extends Pagination_base {
24
+ /**
25
+ * Current page number (1-based)
26
+ * @attr
27
+ */
28
+ page: number;
29
+ /**
30
+ * Number of items per page
31
+ * @attr page-size
32
+ */
33
+ pageSize: number;
34
+ /**
35
+ * Disables all pagination controls
36
+ * @attr
37
+ */
38
+ disabled: boolean;
39
+ /**
40
+ * Shows loading spinner and dims controls
41
+ * @attr
42
+ */
43
+ loading: boolean;
44
+ /**
45
+ * Hide controls when there is only one page
46
+ * @attr hide-on-single-page
47
+ */
48
+ hideOnSinglePage: boolean;
49
+ /**
50
+ * Show the page size dropdown
51
+ * @attr page-size-changer
52
+ */
53
+ pageSizeChanger: boolean;
54
+ /**
55
+ * Comma-separated page size options
56
+ * @attr page-size-options
57
+ */
58
+ pageSizeOptions: string;
59
+ /**
60
+ * Total number of items across all pages
61
+ * @attr total-items
62
+ */
63
+ totalItems: number;
64
+ /**
65
+ * Show first and last page buttons
66
+ * @attr boundary-buttons
67
+ */
68
+ boundaryButtons: boolean;
69
+ /**
70
+ * Hide the item count display (e.g., "1-10 of 200")
71
+ * @attr hide-total-count
72
+ */
73
+ hideTotalCount: boolean;
74
+ /**
75
+ * Accessible label for the pagination nav landmark
76
+ * @attr
77
+ */
78
+ label: string | undefined;
79
+ /** @internal */
80
+ private _userInitiated;
81
+ /** @internal */
82
+ private initialClasses;
83
+ /** @internal */
84
+ private _hideControls;
85
+ private get _parsedPageSizeOptions();
86
+ private get _totalPages();
87
+ private get _startItem();
88
+ private get _endItem();
89
+ connectedCallback(): void;
90
+ createRenderRoot(): this;
91
+ willUpdate(): void;
92
+ firstUpdated(): void;
93
+ updated(changed: Map<string, unknown>): void;
94
+ private _setupSlots;
95
+ private _goToFirstPage;
96
+ private _goToPreviousPage;
97
+ private _goToNextPage;
98
+ private _goToLastPage;
99
+ private _manageBoundaryFocus;
100
+ private _onPageSizeChange;
101
+ render(): import("lit-html").TemplateResult<1>;
102
+ }
103
+ declare global {
104
+ interface HTMLElementTagNameMap {
105
+ 'btu-pagination': Pagination;
106
+ }
107
+ }
108
+ export {};
109
+ //# sourceMappingURL=Pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pagination.d.ts","sourceRoot":"","sources":["../../../src/components/pagination/Pagination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAiB,MAAM,KAAK,CAAA;AAK/C,OAAO,0CAA0C,CAAA;AACjD,OAAO,iBAAiB,CAAA;;AAExB;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,eAAyC;IAC/E;;;OAGG;IAEH,IAAI,SAAI;IAER;;;OAGG;IAEH,QAAQ,SAAI;IAEZ;;;OAGG;IAEH,QAAQ,UAAQ;IAEhB;;;OAGG;IAEH,OAAO,UAAQ;IAEf;;;OAGG;IAEH,gBAAgB,UAAO;IAEvB;;;OAGG;IAEH,eAAe,UAAO;IAEtB;;;OAGG;IAEH,eAAe,SAAe;IAE9B;;;OAGG;IAEH,UAAU,SAAI;IAEd;;;OAGG;IAEH,eAAe,UAAO;IAEtB;;;OAGG;IAEH,cAAc,UAAQ;IAEtB;;;OAGG;IAEH,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IAEzB,gBAAgB;IAChB,OAAO,CAAC,cAAc,CAAQ;IAE9B,gBAAgB;IAChB,OAAO,CAAC,cAAc,CAAe;IAErC,gBAAgB;IAChB,OAAO,CAAC,aAAa,CAAQ;IAE7B,OAAO,KAAK,sBAAsB,GAMjC;IAED,OAAO,KAAK,WAAW,GAGtB;IAED,OAAO,KAAK,UAAU,GAGrB;IAED,OAAO,KAAK,QAAQ,GAGnB;IAED,iBAAiB,IAAI,IAAI;IAOzB,gBAAgB;IAIhB,UAAU,IAAI,IAAI;IAmClB,YAAY,IAAI,IAAI;IAIpB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAe5C,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,iBAAiB;IAezB,MAAM;CAkFP;AAMD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,gBAAgB,EAAE,UAAU,CAAA;KAC7B;CACF"}