@adia-ai/web-components 0.4.5 → 0.4.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +63 -24
- package/USAGE.md +604 -0
- package/components/accordion/accordion.d.ts +17 -0
- package/components/accordion/accordion.js +10 -117
- package/components/accordion/class.js +132 -0
- package/components/action-list/action-list.d.ts +15 -0
- package/components/action-list/action-list.js +9 -140
- package/components/action-list/class.js +156 -0
- package/components/agent-artifact/agent-artifact.d.ts +25 -0
- package/components/agent-artifact/agent-artifact.js +8 -181
- package/components/agent-artifact/class.js +200 -0
- package/components/agent-feedback-bar/agent-feedback-bar.d.ts +21 -0
- package/components/agent-feedback-bar/agent-feedback-bar.js +8 -143
- package/components/agent-feedback-bar/class.js +162 -0
- package/components/agent-questions/agent-questions.d.ts +23 -0
- package/components/agent-questions/agent-questions.js +8 -180
- package/components/agent-questions/class.js +199 -0
- package/components/agent-reasoning/agent-reasoning.d.ts +23 -0
- package/components/agent-reasoning/agent-reasoning.js +8 -494
- package/components/agent-reasoning/class.js +513 -0
- package/components/agent-suggestions/agent-suggestions.d.ts +21 -0
- package/components/agent-suggestions/agent-suggestions.js +8 -78
- package/components/agent-suggestions/class.js +97 -0
- package/components/agent-trace/agent-trace.d.ts +19 -0
- package/components/alert/alert.d.ts +29 -0
- package/components/alert/alert.js +8 -175
- package/components/alert/class.js +194 -0
- package/components/avatar/avatar.d.ts +27 -0
- package/components/avatar/avatar.js +9 -159
- package/components/avatar/class.js +173 -0
- package/components/badge/badge.d.ts +27 -0
- package/components/badge/badge.js +9 -75
- package/components/badge/class.js +93 -0
- package/components/block/block.d.ts +19 -0
- package/components/block/block.js +9 -15
- package/components/block/class.js +33 -0
- package/components/breadcrumb/breadcrumb.d.ts +23 -0
- package/components/breadcrumb/breadcrumb.js +8 -113
- package/components/breadcrumb/class.js +132 -0
- package/components/button/button.d.ts +34 -0
- package/components/button/button.js +15 -66
- package/components/button/class.js +80 -0
- package/components/calendar-picker/calendar-picker.a2ui.json +6 -1
- package/components/calendar-picker/calendar-picker.d.ts +27 -0
- package/components/calendar-picker/calendar-picker.js +8 -332
- package/components/calendar-picker/calendar-picker.yaml +51 -177
- package/components/calendar-picker/class.js +351 -0
- package/components/canvas/canvas.a2ui.json +6 -1
- package/components/canvas/canvas.d.ts +17 -0
- package/components/canvas/canvas.yaml +19 -36
- package/components/card/card.a2ui.json +3 -0
- package/components/card/card.d.ts +27 -0
- package/components/card/card.js +9 -50
- package/components/card/card.yaml +171 -433
- package/components/card/class.js +68 -0
- package/components/chart/chart.d.ts +41 -0
- package/components/chart/chart.js +8 -2131
- package/components/chart/class.js +2150 -0
- package/components/chart-legend/chart-legend.d.ts +27 -0
- package/components/chart-legend/chart-legend.js +8 -197
- package/components/chart-legend/class.js +215 -0
- package/components/chat-thread/chat-thread.d.ts +17 -0
- package/components/chat-thread/chat-thread.js +8 -157
- package/components/chat-thread/class.js +176 -0
- package/components/check/check.d.ts +30 -0
- package/components/check/check.js +11 -52
- package/components/check/class.js +68 -0
- package/components/code/class.js +501 -0
- package/components/code/code.d.ts +39 -0
- package/components/code/code.js +8 -482
- package/components/col/class.js +30 -0
- package/components/col/col.d.ts +23 -0
- package/components/col/col.js +10 -13
- package/components/color-picker/class.js +550 -0
- package/components/color-picker/color-picker.d.ts +37 -0
- package/components/color-picker/color-picker.js +8 -531
- package/components/command/class.js +364 -0
- package/components/command/command.a2ui.json +3 -0
- package/components/command/command.d.ts +19 -0
- package/components/command/command.js +8 -345
- package/components/command/command.yaml +105 -124
- package/components/demo-toggle/class.js +153 -0
- package/components/demo-toggle/demo-toggle.d.ts +23 -0
- package/components/demo-toggle/demo-toggle.js +8 -135
- package/components/description-list/class.js +86 -0
- package/components/description-list/description-list.d.ts +21 -0
- package/components/description-list/description-list.js +8 -67
- package/components/divider/class.js +57 -0
- package/components/divider/divider.d.ts +19 -0
- package/components/divider/divider.js +10 -40
- package/components/drawer/class.js +306 -0
- package/components/drawer/drawer.d.ts +25 -0
- package/components/drawer/drawer.js +8 -287
- package/components/embed/class.js +73 -0
- package/components/embed/embed.d.ts +23 -0
- package/components/embed/embed.js +9 -55
- package/components/empty-state/class.js +108 -0
- package/components/empty-state/empty-state.d.ts +21 -0
- package/components/empty-state/empty-state.js +9 -90
- package/components/feed/class.js +381 -0
- package/components/feed/feed.d.ts +19 -0
- package/components/feed/feed.js +9 -367
- package/components/field/class.js +266 -0
- package/components/field/field.d.ts +23 -0
- package/components/field/field.js +8 -247
- package/components/fields/class.js +106 -0
- package/components/fields/fields.d.ts +19 -0
- package/components/fields/fields.js +8 -87
- package/components/grid/class.js +31 -0
- package/components/grid/grid.d.ts +23 -0
- package/components/grid/grid.js +10 -14
- package/components/heatmap/class.js +305 -0
- package/components/heatmap/heatmap.d.ts +31 -0
- package/components/heatmap/heatmap.js +8 -286
- package/components/icon/class.js +54 -0
- package/components/icon/icon.d.ts +23 -0
- package/components/icon/icon.js +13 -40
- package/components/image/class.js +112 -0
- package/components/image/image.d.ts +33 -0
- package/components/image/image.js +9 -94
- package/components/index.js +1 -0
- package/components/input/class.js +773 -0
- package/components/input/input.a2ui.json +3 -0
- package/components/input/input.d.ts +61 -0
- package/components/input/input.js +8 -755
- package/components/input/input.yaml +171 -442
- package/components/inspector/class.js +142 -0
- package/components/inspector/inspector.a2ui.json +8 -1
- package/components/inspector/inspector.d.ts +17 -0
- package/components/inspector/inspector.js +8 -124
- package/components/inspector/inspector.yaml +15 -30
- package/components/kbd/class.js +34 -0
- package/components/kbd/kbd.a2ui.json +3 -0
- package/components/kbd/kbd.d.ts +17 -0
- package/components/kbd/kbd.js +10 -17
- package/components/kbd/kbd.yaml +54 -185
- package/components/link/class.js +187 -0
- package/components/link/link.d.ts +55 -0
- package/components/link/link.js +8 -168
- package/components/list/class.js +249 -0
- package/components/list/list.d.ts +23 -0
- package/components/list/list.js +9 -231
- package/components/menu/class.js +332 -0
- package/components/menu/menu.d.ts +21 -0
- package/components/menu/menu.js +11 -316
- package/components/modal/class.js +231 -0
- package/components/modal/modal.a2ui.json +5 -1
- package/components/modal/modal.d.ts +23 -0
- package/components/modal/modal.js +8 -212
- package/components/modal/modal.yaml +19 -39
- package/components/nav/class.js +150 -0
- package/components/nav/nav.d.ts +31 -0
- package/components/nav/nav.js +8 -131
- package/components/nav-group/class.js +152 -0
- package/components/nav-group/nav-group.d.ts +35 -0
- package/components/nav-group/nav-group.js +9 -134
- package/components/nav-item/class.js +86 -0
- package/components/nav-item/nav-item.d.ts +37 -0
- package/components/nav-item/nav-item.js +10 -69
- package/components/noodles/class.js +510 -0
- package/components/noodles/noodles.d.ts +33 -0
- package/components/noodles/noodles.js +9 -493
- package/components/option-card/class.js +167 -0
- package/components/option-card/option-card.d.ts +30 -0
- package/components/option-card/option-card.js +8 -149
- package/components/otp-input/class.js +180 -0
- package/components/otp-input/otp-input.a2ui.json +5 -1
- package/components/otp-input/otp-input.d.ts +25 -0
- package/components/otp-input/otp-input.js +9 -162
- package/components/otp-input/otp-input.yaml +45 -174
- package/components/page/class.js +97 -0
- package/components/page/page.d.ts +46 -0
- package/components/page/page.js +8 -79
- package/components/pagination/class.js +195 -0
- package/components/pagination/pagination.d.ts +23 -0
- package/components/pagination/pagination.js +9 -177
- package/components/pane/class.js +186 -0
- package/components/pane/pane.a2ui.json +12 -1
- package/components/pane/pane.css +10 -0
- package/components/pane/pane.d.ts +31 -0
- package/components/pane/pane.js +8 -143
- package/components/pane/pane.yaml +57 -157
- package/components/pipeline-status/class.js +189 -0
- package/components/pipeline-status/pipeline-status.a2ui.json +7 -1
- package/components/pipeline-status/pipeline-status.d.ts +21 -0
- package/components/pipeline-status/pipeline-status.js +9 -172
- package/components/pipeline-status/pipeline-status.yaml +34 -72
- package/components/popover/class.js +194 -0
- package/components/popover/popover.d.ts +23 -0
- package/components/popover/popover.js +9 -176
- package/components/progress/class.js +74 -0
- package/components/progress/progress.a2ui.json +3 -0
- package/components/progress/progress.d.ts +19 -0
- package/components/progress/progress.js +10 -57
- package/components/progress/progress.yaml +124 -287
- package/components/progress-row/class.js +110 -0
- package/components/progress-row/progress-row.d.ts +23 -0
- package/components/progress-row/progress-row.js +8 -92
- package/components/radio/class.js +83 -0
- package/components/radio/radio.d.ts +28 -0
- package/components/radio/radio.js +11 -67
- package/components/range/class.js +194 -0
- package/components/range/range.d.ts +31 -0
- package/components/range/range.js +9 -176
- package/components/rating/class.js +148 -0
- package/components/rating/rating.d.ts +33 -0
- package/components/rating/rating.js +9 -130
- package/components/richtext/class.js +87 -0
- package/components/richtext/richtext.a2ui.json +7 -1
- package/components/richtext/richtext.d.ts +19 -0
- package/components/richtext/richtext.js +8 -68
- package/components/richtext/richtext.yaml +30 -65
- package/components/row/class.js +50 -0
- package/components/row/row.d.ts +27 -0
- package/components/row/row.js +10 -33
- package/components/search/class.js +134 -0
- package/components/search/search.d.ts +35 -0
- package/components/search/search.js +10 -117
- package/components/segment/class.js +62 -0
- package/components/segment/segment.d.ts +25 -0
- package/components/segment/segment.js +10 -45
- package/components/segmented/class.js +165 -0
- package/components/segmented/segmented.a2ui.json +4 -0
- package/components/segmented/segmented.d.ts +24 -0
- package/components/segmented/segmented.js +10 -148
- package/components/segmented/segmented.yaml +41 -59
- package/components/select/class.js +408 -0
- package/components/select/select.d.ts +57 -0
- package/components/select/select.js +15 -396
- package/components/skeleton/class.js +52 -0
- package/components/skeleton/skeleton.d.ts +23 -0
- package/components/skeleton/skeleton.js +8 -34
- package/components/slider/class.js +184 -0
- package/components/slider/slider.d.ts +31 -0
- package/components/slider/slider.js +9 -166
- package/components/stack/class.js +28 -0
- package/components/stack/stack.d.ts +17 -0
- package/components/stack/stack.js +10 -11
- package/components/step-progress/class.js +98 -0
- package/components/step-progress/step-progress.d.ts +27 -0
- package/components/step-progress/step-progress.js +8 -79
- package/components/stepper/class.js +126 -0
- package/components/stepper/stepper.d.ts +19 -0
- package/components/stepper/stepper.js +9 -112
- package/components/stream/class.js +109 -0
- package/components/stream/stream.d.ts +19 -0
- package/components/stream/stream.js +8 -90
- package/components/swatch/class.js +131 -0
- package/components/swatch/swatch.d.ts +28 -0
- package/components/swatch/swatch.js +8 -112
- package/components/swiper/class.js +373 -0
- package/components/swiper/swiper.a2ui.json +4 -0
- package/components/swiper/swiper.d.ts +31 -0
- package/components/swiper/swiper.js +8 -354
- package/components/swiper/swiper.yaml +68 -212
- package/components/switch/class.js +63 -0
- package/components/switch/switch.a2ui.json +6 -1
- package/components/switch/switch.d.ts +30 -0
- package/components/switch/switch.js +11 -47
- package/components/switch/switch.yaml +70 -265
- package/components/table/class.js +1453 -0
- package/components/table/table.d.ts +37 -0
- package/components/table/table.js +8 -1435
- package/components/table-toolbar/class.js +680 -0
- package/components/table-toolbar/table-toolbar.d.ts +33 -0
- package/components/table-toolbar/table-toolbar.js +8 -689
- package/components/tabs/class.js +242 -0
- package/components/tabs/tabs.d.ts +21 -0
- package/components/tabs/tabs.js +8 -223
- package/components/tag/class.js +99 -0
- package/components/tag/tag.d.ts +27 -0
- package/components/tag/tag.js +8 -80
- package/components/text/class.js +46 -0
- package/components/text/text.d.ts +25 -0
- package/components/text/text.js +9 -28
- package/components/textarea/class.js +134 -0
- package/components/textarea/textarea.d.ts +31 -0
- package/components/textarea/textarea.js +11 -118
- package/components/timeline/class.js +176 -0
- package/components/timeline/timeline.d.ts +19 -0
- package/components/timeline/timeline.js +9 -162
- package/components/toast/class.js +92 -0
- package/components/toast/toast.d.ts +23 -0
- package/components/toast/toast.js +9 -76
- package/components/toggle-group/class.js +154 -0
- package/components/toggle-group/toggle-group.d.ts +19 -0
- package/components/toggle-group/toggle-group.js +11 -140
- package/components/toggle-scheme/class.js +286 -0
- package/components/toggle-scheme/toggle-scheme.a2ui.json +197 -0
- package/components/toggle-scheme/toggle-scheme.css +20 -0
- package/components/toggle-scheme/toggle-scheme.d.ts +41 -0
- package/components/toggle-scheme/toggle-scheme.js +17 -0
- package/components/toggle-scheme/toggle-scheme.yaml +173 -0
- package/components/toolbar/class.js +388 -0
- package/components/toolbar/toolbar.d.ts +23 -0
- package/components/toolbar/toolbar.js +10 -376
- package/components/tooltip/class.js +299 -0
- package/components/tooltip/tooltip.d.ts +27 -0
- package/components/tooltip/tooltip.js +8 -280
- package/components/tree/class.js +245 -0
- package/components/tree/tree.d.ts +15 -0
- package/components/tree/tree.js +9 -244
- package/components/upload/class.js +199 -0
- package/components/upload/upload.d.ts +27 -0
- package/components/upload/upload.js +11 -183
- package/core/element.d.ts +174 -0
- package/core/form.d.ts +108 -0
- package/core/index.d.ts +11 -0
- package/core/index.js +1 -0
- package/core/register.d.ts +25 -0
- package/core/register.js +58 -0
- package/core/signals.d.ts +94 -0
- package/core/template.d.ts +70 -0
- package/index.d.ts +315 -0
- package/package.json +25 -6
- package/traits/CATEGORIES.md +1 -1
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<pagination-ui>` — Page navigation with prev/next buttons, page numbers, and ellipsis.
|
|
3
|
+
*
|
|
4
|
+
* @see https://ui-kit.exe.xyz/site/components/pagination
|
|
5
|
+
*
|
|
6
|
+
* Type declarations generated by scripts/build/dts-codegen.mjs from
|
|
7
|
+
* the component's `.a2ui.json` sidecar. Edit the source `.yaml`,
|
|
8
|
+
* run `npm run components`, then `npm run codegen:dts` to regenerate;
|
|
9
|
+
* or hand-author this file fully if rich event types are needed.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { UIElement } from '../../core/element.js';
|
|
13
|
+
|
|
14
|
+
export class UIPagination extends UIElement {
|
|
15
|
+
/** Current active page number. */
|
|
16
|
+
page: number;
|
|
17
|
+
/** Number of page buttons to show on each side of the current page. */
|
|
18
|
+
siblings: number;
|
|
19
|
+
/** Total number of pages. */
|
|
20
|
+
total: number;
|
|
21
|
+
/** Visual variant */
|
|
22
|
+
variant: string;
|
|
23
|
+
}
|
|
@@ -1,185 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* `<pagination-ui>` — auto-registers the tag on import.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* For non-side-effect class import (test isolation, tag override), use
|
|
5
|
+
* the `class` subpath:
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
7
|
+
* import { UIPagination } from '@adia-ai/web-components/components/pagination/class';
|
|
8
|
+
*
|
|
9
|
+
* @see ../../USAGE.md#registration--auto-vs-explicit
|
|
9
10
|
*/
|
|
10
11
|
|
|
11
|
-
import {
|
|
12
|
-
|
|
13
|
-
class UIPagination extends UIElement {
|
|
14
|
-
static properties = {
|
|
15
|
-
page: { type: Number, default: 1, reflect: true },
|
|
16
|
-
total: { type: Number, default: 1, reflect: true },
|
|
17
|
-
siblings: { type: Number, default: 1, reflect: true },
|
|
18
|
-
variant: { type: String, default: 'default', reflect: true },
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
static template = () => null;
|
|
22
|
-
|
|
23
|
-
#nav = null;
|
|
24
|
-
#bound = false;
|
|
25
|
-
|
|
26
|
-
connected() {
|
|
27
|
-
if (!this.#nav) {
|
|
28
|
-
this.#nav = document.createElement('nav');
|
|
29
|
-
this.#nav.setAttribute('slot', 'nav');
|
|
30
|
-
this.#nav.setAttribute('aria-label', 'Pagination');
|
|
31
|
-
this.appendChild(this.#nav);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
if (!this.#bound) {
|
|
35
|
-
this.#bound = true;
|
|
36
|
-
this.#nav.addEventListener('click', this.#onClick);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
disconnected() {
|
|
41
|
-
this.#nav?.removeEventListener('click', this.#onClick);
|
|
42
|
-
this.#nav = null;
|
|
43
|
-
this.#bound = false;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
render() {
|
|
47
|
-
if (!this.#nav) return;
|
|
48
|
-
|
|
49
|
-
const page = Math.max(1, Math.min(this.page, this.total));
|
|
50
|
-
const total = Math.max(1, this.total);
|
|
51
|
-
const siblings = Math.max(0, this.siblings);
|
|
52
|
-
|
|
53
|
-
const range = this.#buildRange(page, total, siblings);
|
|
54
|
-
|
|
55
|
-
this.reconcile(
|
|
56
|
-
this.#nav,
|
|
57
|
-
range,
|
|
58
|
-
(item) => item.key,
|
|
59
|
-
(item, i, existing) => {
|
|
60
|
-
if (existing) {
|
|
61
|
-
this.#updateItem(existing, item, page);
|
|
62
|
-
return existing;
|
|
63
|
-
}
|
|
64
|
-
return this.#createItem(item, page);
|
|
65
|
-
},
|
|
66
|
-
);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
#buildRange(page, total, siblings) {
|
|
70
|
-
const items = [];
|
|
71
|
-
|
|
72
|
-
// Prev button
|
|
73
|
-
items.push({ key: 'prev', type: 'prev', value: page - 1 });
|
|
74
|
-
|
|
75
|
-
// Always show first
|
|
76
|
-
items.push({ key: 'page-1', type: 'page', value: 1 });
|
|
77
|
-
|
|
78
|
-
const start = Math.max(2, page - siblings);
|
|
79
|
-
const end = Math.min(total - 1, page + siblings);
|
|
80
|
-
|
|
81
|
-
// Left ellipsis
|
|
82
|
-
if (start > 2) {
|
|
83
|
-
items.push({ key: 'ellipsis-start', type: 'ellipsis' });
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
// Sibling pages
|
|
87
|
-
for (let i = start; i <= end; i++) {
|
|
88
|
-
items.push({ key: `page-${i}`, type: 'page', value: i });
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// Right ellipsis
|
|
92
|
-
if (end < total - 1) {
|
|
93
|
-
items.push({ key: 'ellipsis-end', type: 'ellipsis' });
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// Always show last (if more than 1 page)
|
|
97
|
-
if (total > 1) {
|
|
98
|
-
items.push({ key: `page-${total}`, type: 'page', value: total });
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
// Next button
|
|
102
|
-
items.push({ key: 'next', type: 'next', value: page + 1 });
|
|
103
|
-
|
|
104
|
-
return items;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
#createItem(item, page) {
|
|
108
|
-
if (item.type === 'ellipsis') {
|
|
109
|
-
const span = document.createElement('span');
|
|
110
|
-
span.setAttribute('data-ellipsis', '');
|
|
111
|
-
span.textContent = '\u2026';
|
|
112
|
-
return span;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
const btn = document.createElement('button');
|
|
116
|
-
btn.setAttribute('type', 'button');
|
|
117
|
-
|
|
118
|
-
if (item.type === 'prev') {
|
|
119
|
-
btn.setAttribute('data-prev', '');
|
|
120
|
-
btn.setAttribute('aria-label', 'Previous page');
|
|
121
|
-
btn.textContent = '\u2039';
|
|
122
|
-
} else if (item.type === 'next') {
|
|
123
|
-
btn.setAttribute('data-next', '');
|
|
124
|
-
btn.setAttribute('aria-label', 'Next page');
|
|
125
|
-
btn.textContent = '\u203A';
|
|
126
|
-
} else {
|
|
127
|
-
btn.setAttribute('data-page', '');
|
|
128
|
-
btn.dataset.value = String(item.value);
|
|
129
|
-
btn.textContent = String(item.value);
|
|
130
|
-
btn.setAttribute('aria-label', `Page ${item.value}`);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
this.#updateItem(btn, item, page);
|
|
134
|
-
return btn;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
#updateItem(el, item, page) {
|
|
138
|
-
if (item.type === 'ellipsis') return;
|
|
139
|
-
|
|
140
|
-
if (item.type === 'prev') {
|
|
141
|
-
if (page <= 1) { el.setAttribute('disabled', ''); el.setAttribute('tabindex', '-1'); }
|
|
142
|
-
else { el.removeAttribute('disabled'); el.setAttribute('tabindex', '0'); }
|
|
143
|
-
} else if (item.type === 'next') {
|
|
144
|
-
if (page >= this.total) { el.setAttribute('disabled', ''); el.setAttribute('tabindex', '-1'); }
|
|
145
|
-
else { el.removeAttribute('disabled'); el.setAttribute('tabindex', '0'); }
|
|
146
|
-
} else {
|
|
147
|
-
el.dataset.value = String(item.value);
|
|
148
|
-
el.textContent = String(item.value);
|
|
149
|
-
el.setAttribute('aria-label', `Page ${item.value}`);
|
|
150
|
-
if (item.value === page) {
|
|
151
|
-
el.setAttribute('data-active', '');
|
|
152
|
-
el.setAttribute('aria-current', 'page');
|
|
153
|
-
} else {
|
|
154
|
-
el.removeAttribute('data-active');
|
|
155
|
-
el.removeAttribute('aria-current');
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
#onClick = (e) => {
|
|
161
|
-
const btn = e.target.closest('[data-prev], [data-next], [data-page]');
|
|
162
|
-
if (!btn || btn.hasAttribute('disabled') || !this.#nav.contains(btn)) return;
|
|
163
|
-
|
|
164
|
-
let newPage;
|
|
165
|
-
|
|
166
|
-
if (btn.hasAttribute('data-prev')) {
|
|
167
|
-
newPage = this.page - 1;
|
|
168
|
-
} else if (btn.hasAttribute('data-next')) {
|
|
169
|
-
newPage = this.page + 1;
|
|
170
|
-
} else if (btn.hasAttribute('data-page')) {
|
|
171
|
-
newPage = Number(btn.dataset.value);
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
if (newPage == null || newPage < 1 || newPage > this.total || newPage === this.page) return;
|
|
12
|
+
import { defineIfFree } from '../../core/register.js';
|
|
13
|
+
import { UIPagination } from './class.js';
|
|
175
14
|
|
|
176
|
-
|
|
177
|
-
this.dispatchEvent(new CustomEvent('page-change', {
|
|
178
|
-
bubbles: true,
|
|
179
|
-
detail: { page: this.page },
|
|
180
|
-
}));
|
|
181
|
-
};
|
|
182
|
-
}
|
|
183
|
-
customElements.define('pagination-ui', UIPagination);
|
|
15
|
+
defineIfFree('pagination-ui', UIPagination);
|
|
184
16
|
|
|
185
17
|
export { UIPagination };
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Non-side-effect class export for `<pane-ui>`.
|
|
3
|
+
*
|
|
4
|
+
* Importing this file gives you the class(es) without auto-registering the tag.
|
|
5
|
+
* Useful for test isolation, subclassing with tag-name override, or selective
|
|
6
|
+
* composition.
|
|
7
|
+
*
|
|
8
|
+
* The auto-register path stays at `@adia-ai/web-components/components/pane`
|
|
9
|
+
* (which imports this file + calls `defineIfFree()`).
|
|
10
|
+
*
|
|
11
|
+
* @see ../../USAGE.md#registration--auto-vs-explicit
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* <pane-ui> — Collapsible, resizable panel.
|
|
16
|
+
*
|
|
17
|
+
* Structure:
|
|
18
|
+
* <pane-ui>
|
|
19
|
+
* <header>Pane Title</header>
|
|
20
|
+
* <section>
|
|
21
|
+
* <header>Section Title</header>
|
|
22
|
+
* <div data-col>
|
|
23
|
+
* ...content...
|
|
24
|
+
* </div>
|
|
25
|
+
* </section>
|
|
26
|
+
* <section>...</section>
|
|
27
|
+
* <footer>...</footer>
|
|
28
|
+
* </pane-ui>
|
|
29
|
+
*
|
|
30
|
+
* Attributes:
|
|
31
|
+
* collapsed — boolean, hides content and footer
|
|
32
|
+
* resizable — boolean, enables drag-to-resize (width)
|
|
33
|
+
* min-width — minimum width when resizing (default: 200)
|
|
34
|
+
* max-width — maximum width when resizing (default: 600)
|
|
35
|
+
* side — 'leading' | 'trailing' | '' (default). When set, the
|
|
36
|
+
* pane is treated as a horizontal sibling: the default
|
|
37
|
+
* four-sided border is suppressed, only the inner-edge
|
|
38
|
+
* border is drawn, the resize grabber moves to that
|
|
39
|
+
* inner edge, and the resize-drag direction flips so
|
|
40
|
+
* trailing panes grow when dragged leftward.
|
|
41
|
+
*
|
|
42
|
+
* JS API:
|
|
43
|
+
* pane.collapsed = true/false
|
|
44
|
+
* pane.toggle()
|
|
45
|
+
*/
|
|
46
|
+
|
|
47
|
+
import { UIElement } from '../../core/element.js';
|
|
48
|
+
|
|
49
|
+
export class UIPane extends UIElement {
|
|
50
|
+
static properties = {
|
|
51
|
+
collapsed: { type: Boolean, default: false, reflect: true },
|
|
52
|
+
resizable: { type: Boolean, default: false, reflect: true },
|
|
53
|
+
minWidth: { type: Number, default: 200, attribute: 'min-width', reflect: true },
|
|
54
|
+
maxWidth: { type: Number, default: 9999, attribute: 'max-width', reflect: true },
|
|
55
|
+
side: { type: String, default: '', reflect: true },
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
static template = () => null;
|
|
59
|
+
|
|
60
|
+
#resizeEl = null;
|
|
61
|
+
#dragging = false;
|
|
62
|
+
#startX = 0;
|
|
63
|
+
#startW = 0;
|
|
64
|
+
#pointerId = null;
|
|
65
|
+
#prevDocCursor = '';
|
|
66
|
+
#bound = false;
|
|
67
|
+
|
|
68
|
+
connected() {
|
|
69
|
+
if (!this.#bound) {
|
|
70
|
+
this.#bound = true;
|
|
71
|
+
|
|
72
|
+
// Click on pane header toggles collapse
|
|
73
|
+
this.addEventListener('click', this.#onClick);
|
|
74
|
+
this.addEventListener('keydown', this.#onKey);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Stamp resize handle if resizable and not present
|
|
78
|
+
if (this.resizable && !this.querySelector('[slot="resize"]')) {
|
|
79
|
+
this.#resizeEl = document.createElement('div');
|
|
80
|
+
this.#resizeEl.setAttribute('slot', 'resize');
|
|
81
|
+
this.appendChild(this.#resizeEl);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (this.#resizeEl || this.resizable) {
|
|
85
|
+
this.#resizeEl = this.#resizeEl || this.querySelector('[slot="resize"]');
|
|
86
|
+
this.#resizeEl?.addEventListener('pointerdown', this.#onResizeDown);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
render() {
|
|
91
|
+
const header = this.querySelector(':scope > header');
|
|
92
|
+
if (header) {
|
|
93
|
+
header.setAttribute('role', 'button');
|
|
94
|
+
header.setAttribute('tabindex', '0');
|
|
95
|
+
header.setAttribute('aria-expanded', String(!this.collapsed));
|
|
96
|
+
|
|
97
|
+
// Stamp chevron icon if not present
|
|
98
|
+
if (!header.querySelector('[slot="chevron"]')) {
|
|
99
|
+
const chevron = document.createElement('icon-ui');
|
|
100
|
+
chevron.setAttribute('slot', 'chevron');
|
|
101
|
+
chevron.setAttribute('name', 'caret-right');
|
|
102
|
+
header.append(chevron);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
toggle() {
|
|
108
|
+
this.collapsed = !this.collapsed;
|
|
109
|
+
this.dispatchEvent(new Event('toggle', { bubbles: true }));
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
#onClick = (e) => {
|
|
113
|
+
const header = this.querySelector(':scope > header');
|
|
114
|
+
if (header && (e.target === header || header.contains(e.target))) {
|
|
115
|
+
this.toggle();
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
#onKey = (e) => {
|
|
120
|
+
if (e.target !== this.querySelector(':scope > header')) return;
|
|
121
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
122
|
+
e.preventDefault();
|
|
123
|
+
this.toggle();
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
// ── Resize ──
|
|
128
|
+
//
|
|
129
|
+
// Pointer capture + handle-level listeners (not document-level): keeps
|
|
130
|
+
// pointer events flowing to the grabber even when the cursor races past
|
|
131
|
+
// it, and works under touch. Cursor is locked at the documentElement
|
|
132
|
+
// level so it stays `col-resize` across the whole viewport during drag,
|
|
133
|
+
// not just over the 4px handle. CSS bypasses any width transition while
|
|
134
|
+
// `[data-resizing]` is set, so resizes track the pointer 1:1.
|
|
135
|
+
|
|
136
|
+
#onResizeDown = (e) => {
|
|
137
|
+
if (!e.isPrimary) return;
|
|
138
|
+
e.preventDefault();
|
|
139
|
+
this.#dragging = true;
|
|
140
|
+
this.#startX = e.clientX;
|
|
141
|
+
this.#startW = this.getBoundingClientRect().width;
|
|
142
|
+
this.#pointerId = e.pointerId;
|
|
143
|
+
this.setAttribute('data-resizing', '');
|
|
144
|
+
|
|
145
|
+
try { this.#resizeEl.setPointerCapture(e.pointerId); } catch {}
|
|
146
|
+
this.#resizeEl.addEventListener('pointermove', this.#onResizeMove);
|
|
147
|
+
this.#resizeEl.addEventListener('pointerup', this.#onResizeUp, { once: true });
|
|
148
|
+
this.#resizeEl.addEventListener('pointercancel', this.#onResizeUp, { once: true });
|
|
149
|
+
|
|
150
|
+
this.#prevDocCursor = document.documentElement.style.cursor;
|
|
151
|
+
document.documentElement.style.cursor = 'col-resize';
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
#onResizeMove = (e) => {
|
|
155
|
+
if (!this.#dragging) return;
|
|
156
|
+
// For a trailing pane the grabber sits on the LEFT edge but the pane
|
|
157
|
+
// is anchored on the RIGHT side of its flex row — dragging leftward
|
|
158
|
+
// should GROW the pane (grabber moves further left = more width),
|
|
159
|
+
// not shrink it. Negate dx in that case.
|
|
160
|
+
const sign = this.side === 'trailing' ? -1 : 1;
|
|
161
|
+
const dx = (e.clientX - this.#startX) * sign;
|
|
162
|
+
const w = Math.max(this.minWidth, Math.min(this.maxWidth, this.#startW + dx));
|
|
163
|
+
this.style.width = `${w}px`;
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
#onResizeUp = () => {
|
|
167
|
+
if (!this.#dragging) return;
|
|
168
|
+
this.#dragging = false;
|
|
169
|
+
this.removeAttribute('data-resizing');
|
|
170
|
+
try { this.#resizeEl?.releasePointerCapture(this.#pointerId); } catch {}
|
|
171
|
+
this.#pointerId = null;
|
|
172
|
+
this.#resizeEl?.removeEventListener('pointermove', this.#onResizeMove);
|
|
173
|
+
document.documentElement.style.cursor = this.#prevDocCursor;
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
disconnected() {
|
|
177
|
+
this.removeEventListener('click', this.#onClick);
|
|
178
|
+
this.removeEventListener('keydown', this.#onKey);
|
|
179
|
+
this.#resizeEl?.removeEventListener('pointerdown', this.#onResizeDown);
|
|
180
|
+
this.#resizeEl?.removeEventListener('pointermove', this.#onResizeMove);
|
|
181
|
+
if (this.#dragging) {
|
|
182
|
+
document.documentElement.style.cursor = this.#prevDocCursor;
|
|
183
|
+
}
|
|
184
|
+
this.#bound = false;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
@@ -85,7 +85,18 @@
|
|
|
85
85
|
"name": "idle"
|
|
86
86
|
}
|
|
87
87
|
],
|
|
88
|
-
"synonyms": {
|
|
88
|
+
"synonyms": {
|
|
89
|
+
"tags": [
|
|
90
|
+
"split-pane",
|
|
91
|
+
"side-panel",
|
|
92
|
+
"resizable-panel",
|
|
93
|
+
"detail-pane",
|
|
94
|
+
"list-pane",
|
|
95
|
+
"context-pane",
|
|
96
|
+
"Panel",
|
|
97
|
+
"Pane"
|
|
98
|
+
]
|
|
99
|
+
},
|
|
89
100
|
"tag": "pane-ui",
|
|
90
101
|
"tokens": {},
|
|
91
102
|
"traits": [],
|
package/components/pane/pane.css
CHANGED
|
@@ -54,6 +54,15 @@
|
|
|
54
54
|
overflow: hidden;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
+
/* During an active drag-resize: kill all transitions so pointer-driven
|
|
58
|
+
width updates track 1:1 instead of interpolating through a consumer-
|
|
59
|
+
declared width transition (e.g. editor-shell's collapse animation).
|
|
60
|
+
Mirrors the admin-sidebar pattern. */
|
|
61
|
+
:scope[data-resizing] {
|
|
62
|
+
user-select: none;
|
|
63
|
+
transition: none;
|
|
64
|
+
}
|
|
65
|
+
|
|
57
66
|
/* Side-aware border treatment.
|
|
58
67
|
`leading` — pane sits at the leading edge of a horizontal row, so
|
|
59
68
|
the only visual separator it needs is on its trailing
|
|
@@ -187,6 +196,7 @@
|
|
|
187
196
|
cursor: col-resize;
|
|
188
197
|
background: transparent;
|
|
189
198
|
transition: background var(--pane-duration) var(--pane-easing);
|
|
199
|
+
touch-action: none;
|
|
190
200
|
z-index: 1;
|
|
191
201
|
}
|
|
192
202
|
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<pane-ui>` — Collapsible, resizable panel.
|
|
3
|
+
*
|
|
4
|
+
* @see https://ui-kit.exe.xyz/site/components/pane
|
|
5
|
+
*
|
|
6
|
+
* Type declarations generated by scripts/build/dts-codegen.mjs from
|
|
7
|
+
* the component's `.a2ui.json` sidecar. Edit the source `.yaml`,
|
|
8
|
+
* run `npm run components`, then `npm run codegen:dts` to regenerate;
|
|
9
|
+
* or hand-author this file fully if rich event types are needed.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { UIElement } from '../../core/element.js';
|
|
13
|
+
|
|
14
|
+
export class UIPane extends UIElement {
|
|
15
|
+
/** Component property: collapsed. */
|
|
16
|
+
collapsed: boolean;
|
|
17
|
+
/** Component property: maxWidth. */
|
|
18
|
+
maxWidth: number;
|
|
19
|
+
/** Component property: minWidth. */
|
|
20
|
+
minWidth: number;
|
|
21
|
+
/** Component property: resizable. */
|
|
22
|
+
resizable: boolean;
|
|
23
|
+
/** Opts a pane into horizontal-sibling chrome: suppresses the default
|
|
24
|
+
four-sided border and moves the resize grabber to the inner edge
|
|
25
|
+
(right edge for `leading`, left edge for `trailing`). Also flips the
|
|
26
|
+
resize-drag direction so `trailing` panes grow when dragged leftward.
|
|
27
|
+
Unset keeps the pane-intrinsic chrome (full border, right-edge
|
|
28
|
+
grabber when resizable).
|
|
29
|
+
*/
|
|
30
|
+
side: '' | 'leading' | 'trailing';
|
|
31
|
+
}
|
package/components/pane/pane.js
CHANGED
|
@@ -1,152 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* `<pane-ui>` — auto-registers the tag on import.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* <header>Pane Title</header>
|
|
7
|
-
* <section>
|
|
8
|
-
* <header>Section Title</header>
|
|
9
|
-
* <div data-col>
|
|
10
|
-
* ...content...
|
|
11
|
-
* </div>
|
|
12
|
-
* </section>
|
|
13
|
-
* <section>...</section>
|
|
14
|
-
* <footer>...</footer>
|
|
15
|
-
* </pane-ui>
|
|
4
|
+
* For non-side-effect class import (test isolation, tag override), use
|
|
5
|
+
* the `class` subpath:
|
|
16
6
|
*
|
|
17
|
-
*
|
|
18
|
-
* collapsed — boolean, hides content and footer
|
|
19
|
-
* resizable — boolean, enables drag-to-resize (width)
|
|
20
|
-
* min-width — minimum width when resizing (default: 200)
|
|
21
|
-
* max-width — maximum width when resizing (default: 600)
|
|
22
|
-
* side — 'leading' | 'trailing' | '' (default). When set, the
|
|
23
|
-
* pane is treated as a horizontal sibling: the default
|
|
24
|
-
* four-sided border is suppressed, only the inner-edge
|
|
25
|
-
* border is drawn, the resize grabber moves to that
|
|
26
|
-
* inner edge, and the resize-drag direction flips so
|
|
27
|
-
* trailing panes grow when dragged leftward.
|
|
7
|
+
* import { UIPane } from '@adia-ai/web-components/components/pane/class';
|
|
28
8
|
*
|
|
29
|
-
*
|
|
30
|
-
* pane.collapsed = true/false
|
|
31
|
-
* pane.toggle()
|
|
9
|
+
* @see ../../USAGE.md#registration--auto-vs-explicit
|
|
32
10
|
*/
|
|
33
11
|
|
|
34
|
-
import {
|
|
12
|
+
import { defineIfFree } from '../../core/register.js';
|
|
13
|
+
import { UIPane } from './class.js';
|
|
35
14
|
|
|
36
|
-
|
|
37
|
-
static properties = {
|
|
38
|
-
collapsed: { type: Boolean, default: false, reflect: true },
|
|
39
|
-
resizable: { type: Boolean, default: false, reflect: true },
|
|
40
|
-
minWidth: { type: Number, default: 200, attribute: 'min-width', reflect: true },
|
|
41
|
-
maxWidth: { type: Number, default: 9999, attribute: 'max-width', reflect: true },
|
|
42
|
-
side: { type: String, default: '', reflect: true },
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
static template = () => null;
|
|
46
|
-
|
|
47
|
-
#resizeEl = null;
|
|
48
|
-
#dragging = false;
|
|
49
|
-
#startX = 0;
|
|
50
|
-
#startW = 0;
|
|
51
|
-
#bound = false;
|
|
52
|
-
|
|
53
|
-
connected() {
|
|
54
|
-
if (!this.#bound) {
|
|
55
|
-
this.#bound = true;
|
|
56
|
-
|
|
57
|
-
// Click on pane header toggles collapse
|
|
58
|
-
this.addEventListener('click', this.#onClick);
|
|
59
|
-
this.addEventListener('keydown', this.#onKey);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// Stamp resize handle if resizable and not present
|
|
63
|
-
if (this.resizable && !this.querySelector('[slot="resize"]')) {
|
|
64
|
-
this.#resizeEl = document.createElement('div');
|
|
65
|
-
this.#resizeEl.setAttribute('slot', 'resize');
|
|
66
|
-
this.appendChild(this.#resizeEl);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
if (this.#resizeEl || this.resizable) {
|
|
70
|
-
this.#resizeEl = this.#resizeEl || this.querySelector('[slot="resize"]');
|
|
71
|
-
this.#resizeEl?.addEventListener('pointerdown', this.#onResizeDown);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
render() {
|
|
76
|
-
const header = this.querySelector(':scope > header');
|
|
77
|
-
if (header) {
|
|
78
|
-
header.setAttribute('role', 'button');
|
|
79
|
-
header.setAttribute('tabindex', '0');
|
|
80
|
-
header.setAttribute('aria-expanded', String(!this.collapsed));
|
|
81
|
-
|
|
82
|
-
// Stamp chevron icon if not present
|
|
83
|
-
if (!header.querySelector('[slot="chevron"]')) {
|
|
84
|
-
const chevron = document.createElement('icon-ui');
|
|
85
|
-
chevron.setAttribute('slot', 'chevron');
|
|
86
|
-
chevron.setAttribute('name', 'caret-right');
|
|
87
|
-
header.append(chevron);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
toggle() {
|
|
93
|
-
this.collapsed = !this.collapsed;
|
|
94
|
-
this.dispatchEvent(new Event('toggle', { bubbles: true }));
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
#onClick = (e) => {
|
|
98
|
-
const header = this.querySelector(':scope > header');
|
|
99
|
-
if (header && (e.target === header || header.contains(e.target))) {
|
|
100
|
-
this.toggle();
|
|
101
|
-
}
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
#onKey = (e) => {
|
|
105
|
-
if (e.target !== this.querySelector(':scope > header')) return;
|
|
106
|
-
if (e.key === 'Enter' || e.key === ' ') {
|
|
107
|
-
e.preventDefault();
|
|
108
|
-
this.toggle();
|
|
109
|
-
}
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
// ── Resize ──
|
|
113
|
-
|
|
114
|
-
#onResizeDown = (e) => {
|
|
115
|
-
e.preventDefault();
|
|
116
|
-
this.#dragging = true;
|
|
117
|
-
this.#startX = e.clientX;
|
|
118
|
-
this.#startW = this.getBoundingClientRect().width;
|
|
119
|
-
this.setAttribute('data-resizing', '');
|
|
120
|
-
document.addEventListener('pointermove', this.#onResizeMove);
|
|
121
|
-
document.addEventListener('pointerup', this.#onResizeUp, { once: true });
|
|
122
|
-
};
|
|
123
|
-
|
|
124
|
-
#onResizeMove = (e) => {
|
|
125
|
-
if (!this.#dragging) return;
|
|
126
|
-
// For a trailing pane the grabber sits on the LEFT edge but the pane
|
|
127
|
-
// is anchored on the RIGHT side of its flex row — dragging leftward
|
|
128
|
-
// should GROW the pane (grabber moves further left = more width),
|
|
129
|
-
// not shrink it. Negate dx in that case.
|
|
130
|
-
const sign = this.side === 'trailing' ? -1 : 1;
|
|
131
|
-
const dx = (e.clientX - this.#startX) * sign;
|
|
132
|
-
const w = Math.max(this.minWidth, Math.min(this.maxWidth, this.#startW + dx));
|
|
133
|
-
this.style.width = `${w}px`;
|
|
134
|
-
};
|
|
135
|
-
|
|
136
|
-
#onResizeUp = () => {
|
|
137
|
-
this.#dragging = false;
|
|
138
|
-
this.removeAttribute('data-resizing');
|
|
139
|
-
document.removeEventListener('pointermove', this.#onResizeMove);
|
|
140
|
-
};
|
|
141
|
-
|
|
142
|
-
disconnected() {
|
|
143
|
-
this.removeEventListener('click', this.#onClick);
|
|
144
|
-
this.removeEventListener('keydown', this.#onKey);
|
|
145
|
-
this.#resizeEl?.removeEventListener('pointerdown', this.#onResizeDown);
|
|
146
|
-
document.removeEventListener('pointermove', this.#onResizeMove);
|
|
147
|
-
this.#bound = false;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
customElements.define('pane-ui', UIPane);
|
|
15
|
+
defineIfFree('pane-ui', UIPane);
|
|
151
16
|
|
|
152
17
|
export { UIPane };
|