@openelement/ui 0.41.0-alpha.1
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/LICENSE +21 -0
- package/README.md +78 -0
- package/package.json +142 -0
- package/src/daisy-classes.d.ts +7 -0
- package/src/daisy-classes.js +770 -0
- package/src/index.d.ts +57 -0
- package/src/index.js +62 -0
- package/src/manifest.d.ts +8 -0
- package/src/manifest.js +255 -0
- package/src/open-badge.d.ts +15 -0
- package/src/open-badge.js +88 -0
- package/src/open-brand-mark.d.ts +14 -0
- package/src/open-brand-mark.js +107 -0
- package/src/open-button.d.ts +38 -0
- package/src/open-button.js +219 -0
- package/src/open-callout.d.ts +26 -0
- package/src/open-callout.js +99 -0
- package/src/open-card.d.ts +33 -0
- package/src/open-card.js +107 -0
- package/src/open-code-block.d.ts +44 -0
- package/src/open-code-block.js +267 -0
- package/src/open-dialog.d.ts +47 -0
- package/src/open-dialog.js +235 -0
- package/src/open-dropdown.d.ts +25 -0
- package/src/open-dropdown.js +45 -0
- package/src/open-hero-ping.d.ts +27 -0
- package/src/open-hero-ping.js +136 -0
- package/src/open-input.d.ts +51 -0
- package/src/open-input.js +233 -0
- package/src/open-lab-panel.d.ts +16 -0
- package/src/open-lab-panel.js +151 -0
- package/src/open-lab-stage.d.ts +15 -0
- package/src/open-lab-stage.js +622 -0
- package/src/open-layout.d.ts +111 -0
- package/src/open-layout.js +1377 -0
- package/src/open-modal.d.ts +25 -0
- package/src/open-modal.js +48 -0
- package/src/open-props-tokens.d.ts +7 -0
- package/src/open-props-tokens.js +474 -0
- package/src/open-standards-visual.d.ts +20 -0
- package/src/open-standards-visual.js +425 -0
- package/src/open-step-card.d.ts +34 -0
- package/src/open-step-card.js +117 -0
- package/src/open-tabs.d.ts +27 -0
- package/src/open-tabs.js +56 -0
- package/src/open-theme-toggle.d.ts +38 -0
- package/src/open-theme-toggle.js +223 -0
package/src/open-card.js
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/** @jsxImportSource @openelement/core */ /**
|
|
2
|
+
* @openelement/ui - open-card
|
|
3
|
+
*
|
|
4
|
+
* Minimal card container with optional header and footer.
|
|
5
|
+
* Swiss International Style: borders are whispers, not shouts.
|
|
6
|
+
*
|
|
7
|
+
* v0.20.0: Migrated from DsdLitElement to DsdElement (Ocean component).
|
|
8
|
+
* v0.24.1: Migrated from html`` template to JSX (ADR-0057).
|
|
9
|
+
*
|
|
10
|
+
* @csspart container - The article wrapper
|
|
11
|
+
* @csspart body - The card body content area
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* ```html
|
|
15
|
+
* <open-card>
|
|
16
|
+
* <h3 slot="header">Card Title</h3>
|
|
17
|
+
* <p>Card content goes here.</p>
|
|
18
|
+
* </open-card>
|
|
19
|
+
*
|
|
20
|
+
* <open-card variant="elevated">
|
|
21
|
+
* <p>Elevated card with shadow.</p>
|
|
22
|
+
* </open-card>
|
|
23
|
+
* ```
|
|
24
|
+
*/ import { OpenElement } from '@openelement/element';
|
|
25
|
+
import { StyleSheet } from '@openelement/core/style-sheet';
|
|
26
|
+
export const tagName = 'open-card';
|
|
27
|
+
const sheet = new StyleSheet();
|
|
28
|
+
sheet.replaceSync(`
|
|
29
|
+
:host {
|
|
30
|
+
display: block;
|
|
31
|
+
background:
|
|
32
|
+
linear-gradient(135deg, color-mix(in srgb, var(--violet-1) 14%, transparent), transparent 48%),
|
|
33
|
+
var(--bg-card);
|
|
34
|
+
color: var(--text-primary);
|
|
35
|
+
border: var(--border-size-1) solid var(--border);
|
|
36
|
+
border-radius: var(--card-radius);
|
|
37
|
+
overflow: hidden;
|
|
38
|
+
transition: border-color var(--ease-3) var(--duration-2), background var(--ease-3) var(--duration-2), box-shadow var(--ease-3) var(--duration-2);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
:host([variant="elevated"]) {
|
|
42
|
+
box-shadow: 0 var(--size-2) var(--size-8) color-mix(in srgb, var(--brand) 8%, transparent);
|
|
43
|
+
border-color: var(--border);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
:host([variant="elevated"]:hover) {
|
|
47
|
+
border-color: var(--brand);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
:host([variant="borderless"]) {
|
|
51
|
+
border-color: transparent;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
:host([variant="muted"]) {
|
|
55
|
+
background: var(--bg-surface);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
:host([variant="artifact"]) {
|
|
59
|
+
background: var(--bg-code, var(--gray-11));
|
|
60
|
+
color: var(--gray-2);
|
|
61
|
+
border-color: var(--code-border, var(--gray-8));
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
::slotted([slot="header"]) {
|
|
65
|
+
padding: var(--size-4) var(--size-5);
|
|
66
|
+
border-bottom: var(--border-size-1) solid var(--border);
|
|
67
|
+
font-size: var(--font-size-2);
|
|
68
|
+
font-weight: var(--font-weight-6);
|
|
69
|
+
color: var(--text-primary);
|
|
70
|
+
margin: 0;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.card-body {
|
|
74
|
+
padding: var(--size-5);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
::slotted([slot="footer"]) {
|
|
78
|
+
padding: var(--size-3) var(--size-5);
|
|
79
|
+
border-top: var(--border-size-1) solid var(--border);
|
|
80
|
+
font-size: var(--font-size-0);
|
|
81
|
+
color: var(--text-muted);
|
|
82
|
+
margin: 0;
|
|
83
|
+
}
|
|
84
|
+
`);
|
|
85
|
+
export class OpenCard extends OpenElement {
|
|
86
|
+
static styles = [
|
|
87
|
+
sheet
|
|
88
|
+
];
|
|
89
|
+
static observedAttributes = [
|
|
90
|
+
'variant'
|
|
91
|
+
];
|
|
92
|
+
render() {
|
|
93
|
+
return <article part='container'>
|
|
94
|
+
<slot name='header'></slot>
|
|
95
|
+
<div className='card-body' part='body'>
|
|
96
|
+
<slot></slot>
|
|
97
|
+
</div>
|
|
98
|
+
<slot name='footer'></slot>
|
|
99
|
+
</article>;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
export default OpenCard;
|
|
103
|
+
// Guard: idempotent across SSR paths
|
|
104
|
+
if (typeof customElements !== 'undefined' && !customElements.get(tagName)) {
|
|
105
|
+
customElements.define(tagName, OpenCard);
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy91aS9zcmMvb3Blbi1jYXJkLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQGpzeEltcG9ydFNvdXJjZSBAb3BlbmVsZW1lbnQvY29yZSAqL1xuLyoqXG4gKiBAb3BlbmVsZW1lbnQvdWkgLSBvcGVuLWNhcmRcbiAqXG4gKiBNaW5pbWFsIGNhcmQgY29udGFpbmVyIHdpdGggb3B0aW9uYWwgaGVhZGVyIGFuZCBmb290ZXIuXG4gKiBTd2lzcyBJbnRlcm5hdGlvbmFsIFN0eWxlOiBib3JkZXJzIGFyZSB3aGlzcGVycywgbm90IHNob3V0cy5cbiAqXG4gKiB2MC4yMC4wOiBNaWdyYXRlZCBmcm9tIERzZExpdEVsZW1lbnQgdG8gRHNkRWxlbWVudCAoT2NlYW4gY29tcG9uZW50KS5cbiAqIHYwLjI0LjE6IE1pZ3JhdGVkIGZyb20gaHRtbGBgIHRlbXBsYXRlIHRvIEpTWCAoQURSLTAwNTcpLlxuICpcbiAqIEBjc3NwYXJ0IGNvbnRhaW5lciAtIFRoZSBhcnRpY2xlIHdyYXBwZXJcbiAqIEBjc3NwYXJ0IGJvZHkgLSBUaGUgY2FyZCBib2R5IGNvbnRlbnQgYXJlYVxuICpcbiAqIFVzYWdlOlxuICogYGBgaHRtbFxuICogPG9wZW4tY2FyZD5cbiAqICAgPGgzIHNsb3Q9XCJoZWFkZXJcIj5DYXJkIFRpdGxlPC9oMz5cbiAqICAgPHA+Q2FyZCBjb250ZW50IGdvZXMgaGVyZS48L3A+XG4gKiA8L29wZW4tY2FyZD5cbiAqXG4gKiA8b3Blbi1jYXJkIHZhcmlhbnQ9XCJlbGV2YXRlZFwiPlxuICogICA8cD5FbGV2YXRlZCBjYXJkIHdpdGggc2hhZG93LjwvcD5cbiAqIDwvb3Blbi1jYXJkPlxuICogYGBgXG4gKi9cblxuaW1wb3J0IHsgT3BlbkVsZW1lbnQgfSBmcm9tICdAb3BlbmVsZW1lbnQvZWxlbWVudCc7XG5pbXBvcnQgeyBTdHlsZVNoZWV0LCB0eXBlIFN0eWxlU2hlZXRMaWtlIH0gZnJvbSAnQG9wZW5lbGVtZW50L2NvcmUvc3R5bGUtc2hlZXQnO1xuZXhwb3J0IGNvbnN0IHRhZ05hbWUgPSAnb3Blbi1jYXJkJztcblxuY29uc3Qgc2hlZXQ6IFN0eWxlU2hlZXRMaWtlID0gbmV3IFN0eWxlU2hlZXQoKTtcbnNoZWV0LnJlcGxhY2VTeW5jKGBcbiAgOmhvc3Qge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGJhY2tncm91bmQ6XG4gICAgICBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tdmlvbGV0LTEpIDE0JSwgdHJhbnNwYXJlbnQpLCB0cmFuc3BhcmVudCA0OCUpLFxuICAgICAgdmFyKC0tYmctY2FyZCk7XG4gICAgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXItc2l6ZS0xKSBzb2xpZCB2YXIoLS1ib3JkZXIpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWNhcmQtcmFkaXVzKTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciB2YXIoLS1lYXNlLTMpIHZhcigtLWR1cmF0aW9uLTIpLCBiYWNrZ3JvdW5kIHZhcigtLWVhc2UtMykgdmFyKC0tZHVyYXRpb24tMiksIGJveC1zaGFkb3cgdmFyKC0tZWFzZS0zKSB2YXIoLS1kdXJhdGlvbi0yKTtcbiAgfVxuXG4gIDpob3N0KFt2YXJpYW50PVwiZWxldmF0ZWRcIl0pIHtcbiAgICBib3gtc2hhZG93OiAwIHZhcigtLXNpemUtMikgdmFyKC0tc2l6ZS04KSBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYnJhbmQpIDglLCB0cmFuc3BhcmVudCk7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ib3JkZXIpO1xuICB9XG5cbiAgOmhvc3QoW3ZhcmlhbnQ9XCJlbGV2YXRlZFwiXTpob3Zlcikge1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tYnJhbmQpO1xuICB9XG5cbiAgOmhvc3QoW3ZhcmlhbnQ9XCJib3JkZXJsZXNzXCJdKSB7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxuXG4gIDpob3N0KFt2YXJpYW50PVwibXV0ZWRcIl0pIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1zdXJmYWNlKTtcbiAgfVxuXG4gIDpob3N0KFt2YXJpYW50PVwiYXJ0aWZhY3RcIl0pIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1jb2RlLCB2YXIoLS1ncmF5LTExKSk7XG4gICAgY29sb3I6IHZhcigtLWdyYXktMik7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2RlLWJvcmRlciwgdmFyKC0tZ3JheS04KSk7XG4gIH1cblxuICA6OnNsb3R0ZWQoW3Nsb3Q9XCJoZWFkZXJcIl0pIHtcbiAgICBwYWRkaW5nOiB2YXIoLS1zaXplLTQpIHZhcigtLXNpemUtNSk7XG4gICAgYm9yZGVyLWJvdHRvbTogdmFyKC0tYm9yZGVyLXNpemUtMSkgc29saWQgdmFyKC0tYm9yZGVyKTtcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS0yKTtcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtNik7XG4gICAgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7XG4gICAgbWFyZ2luOiAwO1xuICB9XG5cbiAgLmNhcmQtYm9keSB7XG4gICAgcGFkZGluZzogdmFyKC0tc2l6ZS01KTtcbiAgfVxuXG4gIDo6c2xvdHRlZChbc2xvdD1cImZvb3RlclwiXSkge1xuICAgIHBhZGRpbmc6IHZhcigtLXNpemUtMykgdmFyKC0tc2l6ZS01KTtcbiAgICBib3JkZXItdG9wOiB2YXIoLS1ib3JkZXItc2l6ZS0xKSBzb2xpZCB2YXIoLS1ib3JkZXIpO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLTApO1xuICAgIGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTtcbiAgICBtYXJnaW46IDA7XG4gIH1cbmApO1xuXG5leHBvcnQgY2xhc3MgT3BlbkNhcmQgZXh0ZW5kcyBPcGVuRWxlbWVudCB7XG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbc2hlZXRdO1xuICBzdGF0aWMgb3ZlcnJpZGUgb2JzZXJ2ZWRBdHRyaWJ1dGVzID0gWyd2YXJpYW50J107XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCk6IFJldHVyblR5cGU8dHlwZW9mIE9wZW5FbGVtZW50LnByb3RvdHlwZS5yZW5kZXI+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGFydGljbGUgcGFydD0nY29udGFpbmVyJz5cbiAgICAgICAgPHNsb3QgbmFtZT0naGVhZGVyJz48L3Nsb3Q+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjYXJkLWJvZHknIHBhcnQ9J2JvZHknPlxuICAgICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzbG90IG5hbWU9J2Zvb3Rlcic+PC9zbG90PlxuICAgICAgPC9hcnRpY2xlPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgT3BlbkNhcmQ7XG5cbi8vIEd1YXJkOiBpZGVtcG90ZW50IGFjcm9zcyBTU1IgcGF0aHNcbmlmICh0eXBlb2YgY3VzdG9tRWxlbWVudHMgIT09ICd1bmRlZmluZWQnICYmICFjdXN0b21FbGVtZW50cy5nZXQodGFnTmFtZSkpIHtcbiAgY3VzdG9tRWxlbWVudHMuZGVmaW5lKHRhZ05hbWUsIE9wZW5DYXJkKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1Q0FBdUMsR0FDdkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBdUJDLEdBRUQsU0FBUyxXQUFXLFFBQVEsdUJBQXVCO0FBQ25ELFNBQVMsVUFBVSxRQUE2QixnQ0FBZ0M7QUFDaEYsT0FBTyxNQUFNLFVBQVUsWUFBWTtBQUVuQyxNQUFNLFFBQXdCLElBQUk7QUFDbEMsTUFBTSxXQUFXLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF3RG5CLENBQUM7QUFFRCxPQUFPLE1BQU0saUJBQWlCO0VBQzVCLE9BQWdCLFNBQVM7SUFBQztHQUFNLENBQUM7RUFDakMsT0FBZ0IscUJBQXFCO0lBQUM7R0FBVSxDQUFDO0VBRXhDLFNBQTBEO0lBQ2pFLFFBQ0csUUFBUSxLQUFLLFlBQVk7UUFDeEIsQ0FBQyxLQUFLLEtBQUssV0FBVyxLQUFLO1FBQzNCLENBQUMsSUFBSSxVQUFVLFlBQVksS0FBSyxPQUFPO1VBQ3JDLENBQUMsT0FBTyxLQUFLO1FBQ2YsRUFBRSxJQUFJO1FBQ04sQ0FBQyxLQUFLLEtBQUssV0FBVyxLQUFLO01BQzdCLEVBQUU7RUFFTjtBQUNGO0FBRUEsZUFBZSxTQUFTO0FBRXhCLHFDQUFxQztBQUNyQyxJQUFJLE9BQU8sbUJBQW1CLGVBQWUsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxVQUFVO0VBQ3pFLGVBQWUsTUFBTSxDQUFDLFNBQVM7QUFDakMifQ==
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/** @jsxImportSource @openelement/core */ /**
|
|
2
|
+
* @openelement/ui - open-code-block
|
|
3
|
+
*
|
|
4
|
+
* Code block with copy button AND syntax highlighting via Prism.
|
|
5
|
+
*
|
|
6
|
+
* v0.20.0: Migrated from DsdLitElement to DsdElement (Ocean component).
|
|
7
|
+
* - Self-contained Prism highlighting injected into shadow root
|
|
8
|
+
* - Copy button uses ElementInternals :state(copied) for CSS feedback
|
|
9
|
+
* - DSD renders <slot> for SSR (no JS content fallback)
|
|
10
|
+
* v0.24.1: Migrated from html`` template to JSX (ADR-0057).
|
|
11
|
+
*
|
|
12
|
+
* @csspart copy - The copy button
|
|
13
|
+
*
|
|
14
|
+
* Usage:
|
|
15
|
+
* ```html
|
|
16
|
+
* <open-code-block>
|
|
17
|
+
* <pre><code>const x = 1;</code></pre>
|
|
18
|
+
* </open-code-block>
|
|
19
|
+
* ```
|
|
20
|
+
*/ import { OpenElement } from '@openelement/element';
|
|
21
|
+
import { type StyleSheetLike } from '@openelement/core/style-sheet';
|
|
22
|
+
export declare const tagName: 'open-code-block';
|
|
23
|
+
declare const sheet: StyleSheetLike;
|
|
24
|
+
export declare class OpenCodeBlock extends OpenElement {
|
|
25
|
+
static override styles: [];
|
|
26
|
+
private _copyState: any;
|
|
27
|
+
private _copyTimer: any;
|
|
28
|
+
private _highlightTimer: any;
|
|
29
|
+
private _highlightedInShadow: any;
|
|
30
|
+
private _highlightRetries: any;
|
|
31
|
+
private static MAX_HIGHLIGHT_RETRIES: any;
|
|
32
|
+
override render(): ReturnType<typeof OpenElement.prototype.render>;
|
|
33
|
+
override connectedCallback(): void;
|
|
34
|
+
override onDsdHydrated(): void;
|
|
35
|
+
override onCsrRendered(): void;
|
|
36
|
+
override disconnectedCallback(): void;
|
|
37
|
+
private _prismGlobal: any;
|
|
38
|
+
private _tryHighlight: any;
|
|
39
|
+
private _injectHighlighted: any;
|
|
40
|
+
private _getCodeText: any;
|
|
41
|
+
private _copy: any;
|
|
42
|
+
private _updateCopyButtonDOM: any;
|
|
43
|
+
}
|
|
44
|
+
export default OpenCodeBlock;
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
/** @jsxImportSource @openelement/core */ /**
|
|
2
|
+
* @openelement/ui - open-code-block
|
|
3
|
+
*
|
|
4
|
+
* Code block with copy button AND syntax highlighting via Prism.
|
|
5
|
+
*
|
|
6
|
+
* v0.20.0: Migrated from DsdLitElement to DsdElement (Ocean component).
|
|
7
|
+
* - Self-contained Prism highlighting injected into shadow root
|
|
8
|
+
* - Copy button uses ElementInternals :state(copied) for CSS feedback
|
|
9
|
+
* - DSD renders <slot> for SSR (no JS content fallback)
|
|
10
|
+
* v0.24.1: Migrated from html`` template to JSX (ADR-0057).
|
|
11
|
+
*
|
|
12
|
+
* @csspart copy - The copy button
|
|
13
|
+
*
|
|
14
|
+
* Usage:
|
|
15
|
+
* ```html
|
|
16
|
+
* <open-code-block>
|
|
17
|
+
* <pre><code>const x = 1;</code></pre>
|
|
18
|
+
* </open-code-block>
|
|
19
|
+
* ```
|
|
20
|
+
*/ import { OpenElement } from '@openelement/element';
|
|
21
|
+
import { StyleSheet } from '@openelement/core/style-sheet';
|
|
22
|
+
import { createLogger } from '@openelement/core/logger';
|
|
23
|
+
export const tagName = 'open-code-block';
|
|
24
|
+
const log = createLogger('ui');
|
|
25
|
+
const sheet = new StyleSheet();
|
|
26
|
+
sheet.replaceSync(`
|
|
27
|
+
:host {
|
|
28
|
+
display: block;
|
|
29
|
+
position: relative;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
pre {
|
|
33
|
+
margin: 0;
|
|
34
|
+
padding: var(--size-5);
|
|
35
|
+
background: var(--bg-code);
|
|
36
|
+
border: var(--border-size-1) solid var(--code-border);
|
|
37
|
+
border-radius: var(--radius-3);
|
|
38
|
+
overflow-x: auto;
|
|
39
|
+
font-family: var(--font-mono);
|
|
40
|
+
font-size: var(--font-size-0);
|
|
41
|
+
line-height: var(--font-lineheight-4);
|
|
42
|
+
color: var(--text-secondary);
|
|
43
|
+
scrollbar-width: thin;
|
|
44
|
+
scrollbar-color: var(--brand-subtle) transparent;
|
|
45
|
+
white-space: pre-wrap;
|
|
46
|
+
word-break: break-word;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
::slotted(pre) {
|
|
50
|
+
margin: 0;
|
|
51
|
+
padding: var(--size-5);
|
|
52
|
+
background: var(--bg-code);
|
|
53
|
+
border: var(--border-size-1) solid var(--code-border);
|
|
54
|
+
border-radius: var(--radius-3);
|
|
55
|
+
overflow-x: auto;
|
|
56
|
+
font-family: var(--font-mono);
|
|
57
|
+
font-size: var(--font-size-0);
|
|
58
|
+
line-height: var(--font-lineheight-4);
|
|
59
|
+
color: var(--text-secondary);
|
|
60
|
+
scrollbar-width: thin;
|
|
61
|
+
scrollbar-color: var(--brand-subtle) transparent;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.lang-badge {
|
|
65
|
+
position: absolute;
|
|
66
|
+
top: var(--size-2);
|
|
67
|
+
left: var(--size-3);
|
|
68
|
+
font-size: var(--font-size-00);
|
|
69
|
+
font-weight: var(--font-weight-7);
|
|
70
|
+
text-transform: uppercase;
|
|
71
|
+
letter-spacing: var(--font-letterspacing-5);
|
|
72
|
+
color: var(--text-muted);
|
|
73
|
+
pointer-events: none;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.copy-btn {
|
|
77
|
+
position: absolute;
|
|
78
|
+
top: var(--size-2);
|
|
79
|
+
right: var(--size-2);
|
|
80
|
+
background: var(--brand-subtle);
|
|
81
|
+
color: var(--text-muted);
|
|
82
|
+
padding: var(--size-1) var(--size-3);
|
|
83
|
+
font-size: var(--font-size-00);
|
|
84
|
+
font-family: var(--font-sans);
|
|
85
|
+
font-weight: var(--font-weight-6);
|
|
86
|
+
border: 0.5px solid transparent;
|
|
87
|
+
cursor: pointer;
|
|
88
|
+
border-radius: var(--radius-1);
|
|
89
|
+
transition: all var(--ease-2) var(--duration-2);
|
|
90
|
+
z-index: 1;
|
|
91
|
+
letter-spacing: var(--font-letterspacing-4);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.copy-btn:hover {
|
|
95
|
+
color: var(--text-primary);
|
|
96
|
+
background: var(--brand-glow);
|
|
97
|
+
border-color: var(--brand);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
:host(:state(copied)) .copy-btn {
|
|
101
|
+
color: #22c55e;
|
|
102
|
+
border-color: rgba(34,197,94,0.3);
|
|
103
|
+
background: rgba(34,197,94,0.08);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
:host(:state(failed)) .copy-btn {
|
|
107
|
+
color: var(--error);
|
|
108
|
+
border-color: var(--error);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/* Prism token colors (dark theme) */
|
|
112
|
+
.token.cdata, .token.comment, .token.doctype, .token.prolog { color: #6a737d; }
|
|
113
|
+
.token.punctuation { color: #8b949e; }
|
|
114
|
+
.token.namespace { opacity: 0.7; }
|
|
115
|
+
.token.boolean, .token.constant, .token.deleted, .token.number, .token.property, .token.symbol, .token.tag { color: #79c0ff; }
|
|
116
|
+
.token.attr-name, .token.builtin, .token.char, .token.inserted, .token.selector, .token.string { color: #a5d6ff; }
|
|
117
|
+
.token.entity, .token.operator, .token.url, .language-css .token.string, .style .token.string { color: #d2a8ff; }
|
|
118
|
+
.token.atrule, .token.attr-value, .token.keyword { color: #ff7b72; }
|
|
119
|
+
.token.class-name, .token.function { color: #d2a8ff; }
|
|
120
|
+
.token.important, .token.regex, .token.variable { color: #ffa657; }
|
|
121
|
+
.token.bold, .token.important { font-weight: 700; }
|
|
122
|
+
.token.italic { font-style: italic; }
|
|
123
|
+
.token.entity { cursor: help; }
|
|
124
|
+
`);
|
|
125
|
+
export class OpenCodeBlock extends OpenElement {
|
|
126
|
+
static styles = [
|
|
127
|
+
sheet
|
|
128
|
+
];
|
|
129
|
+
_copyState = 'idle';
|
|
130
|
+
_copyTimer;
|
|
131
|
+
_highlightTimer;
|
|
132
|
+
_highlightedInShadow = false;
|
|
133
|
+
_highlightRetries = 0;
|
|
134
|
+
static MAX_HIGHLIGHT_RETRIES = 120;
|
|
135
|
+
render() {
|
|
136
|
+
return <>
|
|
137
|
+
<slot></slot>
|
|
138
|
+
<button type='button' className='copy-btn' part='copy' onClick={()=>this._copy()}>
|
|
139
|
+
Copy
|
|
140
|
+
</button>
|
|
141
|
+
</>;
|
|
142
|
+
}
|
|
143
|
+
connectedCallback() {
|
|
144
|
+
super.connectedCallback();
|
|
145
|
+
}
|
|
146
|
+
onDsdHydrated() {
|
|
147
|
+
super.onDsdHydrated();
|
|
148
|
+
this._tryHighlight();
|
|
149
|
+
}
|
|
150
|
+
onCsrRendered() {
|
|
151
|
+
super.onCsrRendered();
|
|
152
|
+
this._tryHighlight();
|
|
153
|
+
}
|
|
154
|
+
disconnectedCallback() {
|
|
155
|
+
super.disconnectedCallback();
|
|
156
|
+
if (this._copyTimer !== undefined) {
|
|
157
|
+
clearTimeout(this._copyTimer);
|
|
158
|
+
this._copyTimer = undefined;
|
|
159
|
+
}
|
|
160
|
+
if (this._highlightTimer !== undefined) {
|
|
161
|
+
clearTimeout(this._highlightTimer);
|
|
162
|
+
this._highlightTimer = undefined;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
_prismGlobal() {
|
|
166
|
+
return globalThis.Prism;
|
|
167
|
+
}
|
|
168
|
+
_tryHighlight() {
|
|
169
|
+
const p = this._prismGlobal();
|
|
170
|
+
if (typeof p === 'undefined') {
|
|
171
|
+
if (this._highlightRetries++ < OpenCodeBlock.MAX_HIGHLIGHT_RETRIES) {
|
|
172
|
+
// Exponential backoff: 10, 20, 40, 80, 160, 320, 500ms cap
|
|
173
|
+
const delay = Math.min(10 * Math.pow(2, Math.min(this._highlightRetries, 6)), 500);
|
|
174
|
+
this._highlightTimer = globalThis.setTimeout(()=>this._tryHighlight(), delay);
|
|
175
|
+
}
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
const pre = this.querySelector(':scope > pre') || Array.from(this.children).find((c)=>c.tagName === 'PRE');
|
|
179
|
+
if (!pre) return;
|
|
180
|
+
const codeEl = pre.querySelector('code');
|
|
181
|
+
if (!codeEl) return;
|
|
182
|
+
let lang = 'typescript';
|
|
183
|
+
const classes = codeEl.classList;
|
|
184
|
+
for(let i = 0; i < classes.length; i++){
|
|
185
|
+
if (classes[i].startsWith('language-')) {
|
|
186
|
+
lang = classes[i].slice(9);
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
const raw = codeEl.textContent || '';
|
|
191
|
+
const grammar = p.languages?.[lang];
|
|
192
|
+
if (!grammar) {
|
|
193
|
+
if (this._highlightRetries++ < OpenCodeBlock.MAX_HIGHLIGHT_RETRIES) {
|
|
194
|
+
const delay = Math.min(20 * Math.pow(2, Math.min(this._highlightRetries, 6)), 1000);
|
|
195
|
+
this._highlightTimer = globalThis.setTimeout(()=>this._tryHighlight(), delay);
|
|
196
|
+
}
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
this._highlightRetries = 0;
|
|
200
|
+
const highlightedHtml = p.highlight(raw, grammar, lang);
|
|
201
|
+
this._injectHighlighted(highlightedHtml);
|
|
202
|
+
}
|
|
203
|
+
_injectHighlighted(html) {
|
|
204
|
+
if (!this.shadowRoot || this._highlightedInShadow) return;
|
|
205
|
+
this._highlightedInShadow = true;
|
|
206
|
+
const slot1 = this.shadowRoot.querySelector('slot');
|
|
207
|
+
if (!slot1) return;
|
|
208
|
+
const highlightedPre = document.createElement('pre');
|
|
209
|
+
const highlightedCode = document.createElement('code');
|
|
210
|
+
highlightedCode.className = 'language-typescript';
|
|
211
|
+
highlightedCode.innerHTML = html;
|
|
212
|
+
highlightedPre.appendChild(highlightedCode);
|
|
213
|
+
slot1.replaceWith(highlightedPre);
|
|
214
|
+
const lightPre = this.querySelector('pre');
|
|
215
|
+
if (lightPre) lightPre.style.display = 'none';
|
|
216
|
+
}
|
|
217
|
+
_getCodeText() {
|
|
218
|
+
if (this.shadowRoot) {
|
|
219
|
+
const shadowCode = this.shadowRoot.querySelector('pre code');
|
|
220
|
+
if (shadowCode) return shadowCode.textContent || '';
|
|
221
|
+
}
|
|
222
|
+
return this.textContent || '';
|
|
223
|
+
}
|
|
224
|
+
async _copy() {
|
|
225
|
+
try {
|
|
226
|
+
const text = this._getCodeText();
|
|
227
|
+
await navigator.clipboard.writeText(text);
|
|
228
|
+
this._copyState = 'copied';
|
|
229
|
+
this._internals?.states.add('copied');
|
|
230
|
+
this._internals?.states.delete('failed');
|
|
231
|
+
this._updateCopyButtonDOM();
|
|
232
|
+
this._copyTimer = globalThis.setTimeout(()=>{
|
|
233
|
+
this._copyState = 'idle';
|
|
234
|
+
this._internals?.states.delete('copied');
|
|
235
|
+
this._updateCopyButtonDOM();
|
|
236
|
+
this._copyTimer = undefined;
|
|
237
|
+
}, 2000);
|
|
238
|
+
} catch (e) {
|
|
239
|
+
log.warn('Clipboard write failed:', e);
|
|
240
|
+
this._internals?.states.add('failed');
|
|
241
|
+
this._internals?.states.delete('copied');
|
|
242
|
+
this._updateCopyButtonDOM();
|
|
243
|
+
this._copyTimer = globalThis.setTimeout(()=>{
|
|
244
|
+
this._copyState = 'idle';
|
|
245
|
+
this._internals?.states.delete('failed');
|
|
246
|
+
this._updateCopyButtonDOM();
|
|
247
|
+
this._copyTimer = undefined;
|
|
248
|
+
}, 2000);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
_updateCopyButtonDOM() {
|
|
252
|
+
if (!this.shadowRoot) return;
|
|
253
|
+
const btn = this.shadowRoot.querySelector('button.copy-btn');
|
|
254
|
+
if (!btn) return;
|
|
255
|
+
btn.classList.toggle('copied', this._copyState === 'copied');
|
|
256
|
+
btn.classList.toggle('failed', this._copyState === 'failed');
|
|
257
|
+
if (this._copyState === 'copied') btn.textContent = 'Copied!';
|
|
258
|
+
else if (this._copyState === 'failed') btn.textContent = 'Failed';
|
|
259
|
+
else btn.textContent = 'Copy';
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
export default OpenCodeBlock;
|
|
263
|
+
// Guard: idempotent across SSR paths
|
|
264
|
+
if (typeof customElements !== 'undefined' && !customElements.get(tagName)) {
|
|
265
|
+
customElements.define(tagName, OpenCodeBlock);
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy91aS9zcmMvb3Blbi1jb2RlLWJsb2NrLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQGpzeEltcG9ydFNvdXJjZSBAb3BlbmVsZW1lbnQvY29yZSAqL1xuLyoqXG4gKiBAb3BlbmVsZW1lbnQvdWkgLSBvcGVuLWNvZGUtYmxvY2tcbiAqXG4gKiBDb2RlIGJsb2NrIHdpdGggY29weSBidXR0b24gQU5EIHN5bnRheCBoaWdobGlnaHRpbmcgdmlhIFByaXNtLlxuICpcbiAqIHYwLjIwLjA6IE1pZ3JhdGVkIGZyb20gRHNkTGl0RWxlbWVudCB0byBEc2RFbGVtZW50IChPY2VhbiBjb21wb25lbnQpLlxuICogICAtIFNlbGYtY29udGFpbmVkIFByaXNtIGhpZ2hsaWdodGluZyBpbmplY3RlZCBpbnRvIHNoYWRvdyByb290XG4gKiAgIC0gQ29weSBidXR0b24gdXNlcyBFbGVtZW50SW50ZXJuYWxzIDpzdGF0ZShjb3BpZWQpIGZvciBDU1MgZmVlZGJhY2tcbiAqICAgLSBEU0QgcmVuZGVycyA8c2xvdD4gZm9yIFNTUiAobm8gSlMgY29udGVudCBmYWxsYmFjaylcbiAqIHYwLjI0LjE6IE1pZ3JhdGVkIGZyb20gaHRtbGBgIHRlbXBsYXRlIHRvIEpTWCAoQURSLTAwNTcpLlxuICpcbiAqIEBjc3NwYXJ0IGNvcHkgLSBUaGUgY29weSBidXR0b25cbiAqXG4gKiBVc2FnZTpcbiAqIGBgYGh0bWxcbiAqIDxvcGVuLWNvZGUtYmxvY2s+XG4gKiAgIDxwcmU+PGNvZGU+Y29uc3QgeCA9IDE7PC9jb2RlPjwvcHJlPlxuICogPC9vcGVuLWNvZGUtYmxvY2s+XG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgeyBPcGVuRWxlbWVudCB9IGZyb20gJ0BvcGVuZWxlbWVudC9lbGVtZW50JztcbmltcG9ydCB7IFN0eWxlU2hlZXQsIHR5cGUgU3R5bGVTaGVldExpa2UgfSBmcm9tICdAb3BlbmVsZW1lbnQvY29yZS9zdHlsZS1zaGVldCc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICdAb3BlbmVsZW1lbnQvY29yZS9sb2dnZXInO1xuZXhwb3J0IGNvbnN0IHRhZ05hbWUgPSAnb3Blbi1jb2RlLWJsb2NrJztcblxuY29uc3QgbG9nID0gY3JlYXRlTG9nZ2VyKCd1aScpO1xuXG5jb25zdCBzaGVldDogU3R5bGVTaGVldExpa2UgPSBuZXcgU3R5bGVTaGVldCgpO1xuc2hlZXQucmVwbGFjZVN5bmMoYFxuICA6aG9zdCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG5cbiAgcHJlIHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogdmFyKC0tc2l6ZS01KTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1jb2RlKTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlci1zaXplLTEpIHNvbGlkIHZhcigtLWNvZGUtYm9yZGVyKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtMyk7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1tb25vKTtcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS0wKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5laGVpZ2h0LTQpO1xuICAgIGNvbG9yOiB2YXIoLS10ZXh0LXNlY29uZGFyeSk7XG4gICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluO1xuICAgIHNjcm9sbGJhci1jb2xvcjogdmFyKC0tYnJhbmQtc3VidGxlKSB0cmFuc3BhcmVudDtcbiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG4gICAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgfVxuXG4gIDo6c2xvdHRlZChwcmUpIHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogdmFyKC0tc2l6ZS01KTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1jb2RlKTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlci1zaXplLTEpIHNvbGlkIHZhcigtLWNvZGUtYm9yZGVyKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtMyk7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1tb25vKTtcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS0wKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5laGVpZ2h0LTQpO1xuICAgIGNvbG9yOiB2YXIoLS10ZXh0LXNlY29uZGFyeSk7XG4gICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluO1xuICAgIHNjcm9sbGJhci1jb2xvcjogdmFyKC0tYnJhbmQtc3VidGxlKSB0cmFuc3BhcmVudDtcbiAgfVxuXG4gIC5sYW5nLWJhZGdlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiB2YXIoLS1zaXplLTIpO1xuICAgIGxlZnQ6IHZhcigtLXNpemUtMyk7XG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtMDApO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC03KTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlcnNwYWNpbmctNSk7XG4gICAgY29sb3I6IHZhcigtLXRleHQtbXV0ZWQpO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG5cbiAgLmNvcHktYnRuIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiB2YXIoLS1zaXplLTIpO1xuICAgIHJpZ2h0OiB2YXIoLS1zaXplLTIpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWJyYW5kLXN1YnRsZSk7XG4gICAgY29sb3I6IHZhcigtLXRleHQtbXV0ZWQpO1xuICAgIHBhZGRpbmc6IHZhcigtLXNpemUtMSkgdmFyKC0tc2l6ZS0zKTtcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS0wMCk7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc2Fucyk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LTYpO1xuICAgIGJvcmRlcjogMC41cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy0xKTtcbiAgICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tZWFzZS0yKSB2YXIoLS1kdXJhdGlvbi0yKTtcbiAgICB6LWluZGV4OiAxO1xuICAgIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlcnNwYWNpbmctNCk7XG4gIH1cblxuICAuY29weS1idG46aG92ZXIge1xuICAgIGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnkpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWJyYW5kLWdsb3cpO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tYnJhbmQpO1xuICB9XG5cbiAgOmhvc3QoOnN0YXRlKGNvcGllZCkpIC5jb3B5LWJ0biB7XG4gICAgY29sb3I6ICMyMmM1NWU7XG4gICAgYm9yZGVyLWNvbG9yOiByZ2JhKDM0LDE5Nyw5NCwwLjMpO1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMzQsMTk3LDk0LDAuMDgpO1xuICB9XG5cbiAgOmhvc3QoOnN0YXRlKGZhaWxlZCkpIC5jb3B5LWJ0biB7XG4gICAgY29sb3I6IHZhcigtLWVycm9yKTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWVycm9yKTtcbiAgfVxuXG4gIC8qIFByaXNtIHRva2VuIGNvbG9ycyAoZGFyayB0aGVtZSkgKi9cbiAgLnRva2VuLmNkYXRhLCAudG9rZW4uY29tbWVudCwgLnRva2VuLmRvY3R5cGUsIC50b2tlbi5wcm9sb2cgeyBjb2xvcjogIzZhNzM3ZDsgfVxuICAudG9rZW4ucHVuY3R1YXRpb24geyBjb2xvcjogIzhiOTQ5ZTsgfVxuICAudG9rZW4ubmFtZXNwYWNlIHsgb3BhY2l0eTogMC43OyB9XG4gIC50b2tlbi5ib29sZWFuLCAudG9rZW4uY29uc3RhbnQsIC50b2tlbi5kZWxldGVkLCAudG9rZW4ubnVtYmVyLCAudG9rZW4ucHJvcGVydHksIC50b2tlbi5zeW1ib2wsIC50b2tlbi50YWcgeyBjb2xvcjogIzc5YzBmZjsgfVxuICAudG9rZW4uYXR0ci1uYW1lLCAudG9rZW4uYnVpbHRpbiwgLnRva2VuLmNoYXIsIC50b2tlbi5pbnNlcnRlZCwgLnRva2VuLnNlbGVjdG9yLCAudG9rZW4uc3RyaW5nIHsgY29sb3I6ICNhNWQ2ZmY7IH1cbiAgLnRva2VuLmVudGl0eSwgLnRva2VuLm9wZXJhdG9yLCAudG9rZW4udXJsLCAubGFuZ3VhZ2UtY3NzIC50b2tlbi5zdHJpbmcsIC5zdHlsZSAudG9rZW4uc3RyaW5nIHsgY29sb3I6ICNkMmE4ZmY7IH1cbiAgLnRva2VuLmF0cnVsZSwgLnRva2VuLmF0dHItdmFsdWUsIC50b2tlbi5rZXl3b3JkIHsgY29sb3I6ICNmZjdiNzI7IH1cbiAgLnRva2VuLmNsYXNzLW5hbWUsIC50b2tlbi5mdW5jdGlvbiB7IGNvbG9yOiAjZDJhOGZmOyB9XG4gIC50b2tlbi5pbXBvcnRhbnQsIC50b2tlbi5yZWdleCwgLnRva2VuLnZhcmlhYmxlIHsgY29sb3I6ICNmZmE2NTc7IH1cbiAgLnRva2VuLmJvbGQsIC50b2tlbi5pbXBvcnRhbnQgeyBmb250LXdlaWdodDogNzAwOyB9XG4gIC50b2tlbi5pdGFsaWMgeyBmb250LXN0eWxlOiBpdGFsaWM7IH1cbiAgLnRva2VuLmVudGl0eSB7IGN1cnNvcjogaGVscDsgfVxuYCk7XG5cbmV4cG9ydCBjbGFzcyBPcGVuQ29kZUJsb2NrIGV4dGVuZHMgT3BlbkVsZW1lbnQge1xuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gW3NoZWV0XTtcblxuICBwcml2YXRlIF9jb3B5U3RhdGU6ICdpZGxlJyB8ICdjb3BpZWQnIHwgJ2ZhaWxlZCcgPSAnaWRsZSc7XG4gIHByaXZhdGUgX2NvcHlUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX2hpZ2hsaWdodFRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfaGlnaGxpZ2h0ZWRJblNoYWRvdyA9IGZhbHNlO1xuICBwcml2YXRlIF9oaWdobGlnaHRSZXRyaWVzID0gMDtcbiAgcHJpdmF0ZSBzdGF0aWMgTUFYX0hJR0hMSUdIVF9SRVRSSUVTID0gMTIwO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpOiBSZXR1cm5UeXBlPHR5cGVvZiBPcGVuRWxlbWVudC5wcm90b3R5cGUucmVuZGVyPiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSdidXR0b24nIGNsYXNzTmFtZT0nY29weS1idG4nIHBhcnQ9J2NvcHknIG9uQ2xpY2s9eygpID0+IHRoaXMuX2NvcHkoKX0+XG4gICAgICAgICAgQ29weVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICB9XG5cbiAgb3ZlcnJpZGUgb25Ec2RIeWRyYXRlZCgpOiB2b2lkIHtcbiAgICBzdXBlci5vbkRzZEh5ZHJhdGVkKCk7XG4gICAgdGhpcy5fdHJ5SGlnaGxpZ2h0KCk7XG4gIH1cblxuICBvdmVycmlkZSBvbkNzclJlbmRlcmVkKCk6IHZvaWQge1xuICAgIHN1cGVyLm9uQ3NyUmVuZGVyZWQoKTtcbiAgICB0aGlzLl90cnlIaWdobGlnaHQoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgaWYgKHRoaXMuX2NvcHlUaW1lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fY29weVRpbWVyKTtcbiAgICAgIHRoaXMuX2NvcHlUaW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2hpZ2hsaWdodFRpbWVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9oaWdobGlnaHRUaW1lcik7XG4gICAgICB0aGlzLl9oaWdobGlnaHRUaW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9wcmlzbUdsb2JhbCgpOiB1bmtub3duIHtcbiAgICByZXR1cm4gKGdsb2JhbFRoaXMgYXMgdHlwZW9mIGdsb2JhbFRoaXMgJiB7IFByaXNtPzogdW5rbm93biB9KS5QcmlzbTtcbiAgfVxuXG4gIHByaXZhdGUgX3RyeUhpZ2hsaWdodCgpOiB2b2lkIHtcbiAgICBjb25zdCBwID0gdGhpcy5fcHJpc21HbG9iYWwoKTtcbiAgICBpZiAodHlwZW9mIHAgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodGhpcy5faGlnaGxpZ2h0UmV0cmllcysrIDwgT3BlbkNvZGVCbG9jay5NQVhfSElHSExJR0hUX1JFVFJJRVMpIHtcbiAgICAgICAgLy8gRXhwb25lbnRpYWwgYmFja29mZjogMTAsIDIwLCA0MCwgODAsIDE2MCwgMzIwLCA1MDBtcyBjYXBcbiAgICAgICAgY29uc3QgZGVsYXkgPSBNYXRoLm1pbigxMCAqIE1hdGgucG93KDIsIE1hdGgubWluKHRoaXMuX2hpZ2hsaWdodFJldHJpZXMsIDYpKSwgNTAwKTtcbiAgICAgICAgdGhpcy5faGlnaGxpZ2h0VGltZXIgPSBnbG9iYWxUaGlzLnNldFRpbWVvdXQoKCkgPT4gdGhpcy5fdHJ5SGlnaGxpZ2h0KCksIGRlbGF5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwcmUgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJzpzY29wZSA+IHByZScpIHx8XG4gICAgICBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pLmZpbmQoKGMpID0+IGMudGFnTmFtZSA9PT0gJ1BSRScpO1xuICAgIGlmICghcHJlKSByZXR1cm47XG4gICAgY29uc3QgY29kZUVsID0gcHJlLnF1ZXJ5U2VsZWN0b3IoJ2NvZGUnKTtcbiAgICBpZiAoIWNvZGVFbCkgcmV0dXJuO1xuXG4gICAgbGV0IGxhbmcgPSAndHlwZXNjcmlwdCc7XG4gICAgY29uc3QgY2xhc3NlcyA9IGNvZGVFbC5jbGFzc0xpc3Q7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoY2xhc3Nlc1tpXS5zdGFydHNXaXRoKCdsYW5ndWFnZS0nKSkge1xuICAgICAgICBsYW5nID0gY2xhc3Nlc1tpXS5zbGljZSg5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcmF3ID0gY29kZUVsLnRleHRDb250ZW50IHx8ICcnO1xuICAgIGNvbnN0IGdyYW1tYXIgPSAocCBhcyBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4pLmxhbmd1YWdlcz8uW2xhbmddIGFzXG4gICAgICB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICB8IHVuZGVmaW5lZDtcbiAgICBpZiAoIWdyYW1tYXIpIHtcbiAgICAgIGlmICh0aGlzLl9oaWdobGlnaHRSZXRyaWVzKysgPCBPcGVuQ29kZUJsb2NrLk1BWF9ISUdITElHSFRfUkVUUklFUykge1xuICAgICAgICBjb25zdCBkZWxheSA9IE1hdGgubWluKDIwICogTWF0aC5wb3coMiwgTWF0aC5taW4odGhpcy5faGlnaGxpZ2h0UmV0cmllcywgNikpLCAxMDAwKTtcbiAgICAgICAgdGhpcy5faGlnaGxpZ2h0VGltZXIgPSBnbG9iYWxUaGlzLnNldFRpbWVvdXQoKCkgPT4gdGhpcy5fdHJ5SGlnaGxpZ2h0KCksIGRlbGF5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faGlnaGxpZ2h0UmV0cmllcyA9IDA7XG4gICAgY29uc3QgaGlnaGxpZ2h0ZWRIdG1sID1cbiAgICAgIChwIGFzIHsgaGlnaGxpZ2h0OiAoY29kZTogc3RyaW5nLCBncmFtbWFyOiB1bmtub3duLCBsYW5nOiBzdHJpbmcpID0+IHN0cmluZyB9KS5oaWdobGlnaHQoXG4gICAgICAgIHJhdyxcbiAgICAgICAgZ3JhbW1hcixcbiAgICAgICAgbGFuZyxcbiAgICAgICk7XG4gICAgdGhpcy5faW5qZWN0SGlnaGxpZ2h0ZWQoaGlnaGxpZ2h0ZWRIdG1sKTtcbiAgfVxuXG4gIHByaXZhdGUgX2luamVjdEhpZ2hsaWdodGVkKGh0bWw6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zaGFkb3dSb290IHx8IHRoaXMuX2hpZ2hsaWdodGVkSW5TaGFkb3cpIHJldHVybjtcbiAgICB0aGlzLl9oaWdobGlnaHRlZEluU2hhZG93ID0gdHJ1ZTtcblxuICAgIGNvbnN0IHNsb3QgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcignc2xvdCcpO1xuICAgIGlmICghc2xvdCkgcmV0dXJuO1xuXG4gICAgY29uc3QgaGlnaGxpZ2h0ZWRQcmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUnKTtcbiAgICBjb25zdCBoaWdobGlnaHRlZENvZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjb2RlJyk7XG4gICAgaGlnaGxpZ2h0ZWRDb2RlLmNsYXNzTmFtZSA9ICdsYW5ndWFnZS10eXBlc2NyaXB0JztcbiAgICBoaWdobGlnaHRlZENvZGUuaW5uZXJIVE1MID0gaHRtbDtcbiAgICBoaWdobGlnaHRlZFByZS5hcHBlbmRDaGlsZChoaWdobGlnaHRlZENvZGUpO1xuICAgIHNsb3QucmVwbGFjZVdpdGgoaGlnaGxpZ2h0ZWRQcmUpO1xuXG4gICAgY29uc3QgbGlnaHRQcmUgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3ByZScpO1xuICAgIGlmIChsaWdodFByZSkgKGxpZ2h0UHJlIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0Q29kZVRleHQoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5zaGFkb3dSb290KSB7XG4gICAgICBjb25zdCBzaGFkb3dDb2RlID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ3ByZSBjb2RlJyk7XG4gICAgICBpZiAoc2hhZG93Q29kZSkgcmV0dXJuIHNoYWRvd0NvZGUudGV4dENvbnRlbnQgfHwgJyc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRleHRDb250ZW50IHx8ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfY29weSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdGV4dCA9IHRoaXMuX2dldENvZGVUZXh0KCk7XG4gICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0KTtcbiAgICAgIHRoaXMuX2NvcHlTdGF0ZSA9ICdjb3BpZWQnO1xuICAgICAgdGhpcy5faW50ZXJuYWxzPy5zdGF0ZXMuYWRkKCdjb3BpZWQnKTtcbiAgICAgIHRoaXMuX2ludGVybmFscz8uc3RhdGVzLmRlbGV0ZSgnZmFpbGVkJyk7XG4gICAgICB0aGlzLl91cGRhdGVDb3B5QnV0dG9uRE9NKCk7XG4gICAgICB0aGlzLl9jb3B5VGltZXIgPSBnbG9iYWxUaGlzLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9jb3B5U3RhdGUgPSAnaWRsZSc7XG4gICAgICAgIHRoaXMuX2ludGVybmFscz8uc3RhdGVzLmRlbGV0ZSgnY29waWVkJyk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUNvcHlCdXR0b25ET00oKTtcbiAgICAgICAgdGhpcy5fY29weVRpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgfSwgMjAwMCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLndhcm4oJ0NsaXBib2FyZCB3cml0ZSBmYWlsZWQ6JywgZSk7XG4gICAgICB0aGlzLl9pbnRlcm5hbHM/LnN0YXRlcy5hZGQoJ2ZhaWxlZCcpO1xuICAgICAgdGhpcy5faW50ZXJuYWxzPy5zdGF0ZXMuZGVsZXRlKCdjb3BpZWQnKTtcbiAgICAgIHRoaXMuX3VwZGF0ZUNvcHlCdXR0b25ET00oKTtcbiAgICAgIHRoaXMuX2NvcHlUaW1lciA9IGdsb2JhbFRoaXMuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NvcHlTdGF0ZSA9ICdpZGxlJztcbiAgICAgICAgdGhpcy5faW50ZXJuYWxzPy5zdGF0ZXMuZGVsZXRlKCdmYWlsZWQnKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlQ29weUJ1dHRvbkRPTSgpO1xuICAgICAgICB0aGlzLl9jb3B5VGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICB9LCAyMDAwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVDb3B5QnV0dG9uRE9NKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zaGFkb3dSb290KSByZXR1cm47XG4gICAgY29uc3QgYnRuID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbi5jb3B5LWJ0bicpO1xuICAgIGlmICghYnRuKSByZXR1cm47XG4gICAgYnRuLmNsYXNzTGlzdC50b2dnbGUoJ2NvcGllZCcsIHRoaXMuX2NvcHlTdGF0ZSA9PT0gJ2NvcGllZCcpO1xuICAgIGJ0bi5jbGFzc0xpc3QudG9nZ2xlKCdmYWlsZWQnLCB0aGlzLl9jb3B5U3RhdGUgPT09ICdmYWlsZWQnKTtcbiAgICBpZiAodGhpcy5fY29weVN0YXRlID09PSAnY29waWVkJykgYnRuLnRleHRDb250ZW50ID0gJ0NvcGllZCEnO1xuICAgIGVsc2UgaWYgKHRoaXMuX2NvcHlTdGF0ZSA9PT0gJ2ZhaWxlZCcpIGJ0bi50ZXh0Q29udGVudCA9ICdGYWlsZWQnO1xuICAgIGVsc2UgYnRuLnRleHRDb250ZW50ID0gJ0NvcHknO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE9wZW5Db2RlQmxvY2s7XG5cbi8vIEd1YXJkOiBpZGVtcG90ZW50IGFjcm9zcyBTU1IgcGF0aHNcbmlmICh0eXBlb2YgY3VzdG9tRWxlbWVudHMgIT09ICd1bmRlZmluZWQnICYmICFjdXN0b21FbGVtZW50cy5nZXQodGFnTmFtZSkpIHtcbiAgY3VzdG9tRWxlbWVudHMuZGVmaW5lKHRhZ05hbWUsIE9wZW5Db2RlQmxvY2spO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVDQUF1QyxHQUN2Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW1CQyxHQUVELFNBQVMsV0FBVyxRQUFRLHVCQUF1QjtBQUNuRCxTQUFTLFVBQVUsUUFBNkIsZ0NBQWdDO0FBQ2hGLFNBQVMsWUFBWSxRQUFRLDJCQUEyQjtBQUN4RCxPQUFPLE1BQU0sVUFBVSxrQkFBa0I7QUFFekMsTUFBTSxNQUFNLGFBQWE7QUFFekIsTUFBTSxRQUF3QixJQUFJO0FBQ2xDLE1BQU0sV0FBVyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0duQixDQUFDO0FBRUQsT0FBTyxNQUFNLHNCQUFzQjtFQUNqQyxPQUFnQixTQUFTO0lBQUM7R0FBTSxDQUFDO0VBRXpCLGFBQTJDLE9BQU87RUFDbEQsV0FBc0Q7RUFDdEQsZ0JBQTJEO0VBQzNELHVCQUF1QixNQUFNO0VBQzdCLG9CQUFvQixFQUFFO0VBQzlCLE9BQWUsd0JBQXdCLElBQUk7RUFFbEMsU0FBMEQ7SUFDakUsU0FDSTtRQUNBLENBQUMsT0FBTyxLQUFLO1FBQ2IsQ0FBQyxPQUFPLEtBQUssU0FBUyxVQUFVLFdBQVcsS0FBSyxPQUFPLFNBQVMsSUFBTSxJQUFJLENBQUMsS0FBSyxJQUFJOztRQUVwRixFQUFFLE9BQU87TUFDWDtFQUVKO0VBRVMsb0JBQTBCO0lBQ2pDLEtBQUssQ0FBQztFQUNSO0VBRVMsZ0JBQXNCO0lBQzdCLEtBQUssQ0FBQztJQUNOLElBQUksQ0FBQyxhQUFhO0VBQ3BCO0VBRVMsZ0JBQXNCO0lBQzdCLEtBQUssQ0FB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
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/** @jsxImportSource @openelement/core */ /**
|
|
2
|
+
* @openelement/ui - open-dialog
|
|
3
|
+
*
|
|
4
|
+
* Dialog component using native <dialog> element + popover API.
|
|
5
|
+
* Per WHATWG HTML Living Standard sections 4.11.4 (dialog) and 6.9.2 (popover).
|
|
6
|
+
*
|
|
7
|
+
* v0.20.0: Migrated from DsdLitElement to DsdElement (Ocean component).
|
|
8
|
+
* v0.24.1: Migrated from html`` template to JSX (ADR-0057).
|
|
9
|
+
*
|
|
10
|
+
* @csspart overlay - The dialog backdrop/element
|
|
11
|
+
* @csspart header -The header bar
|
|
12
|
+
* @csspart close -The close button
|
|
13
|
+
* @csspart body -The content area (<slot>)
|
|
14
|
+
* @csspart footer -The optional footer slot
|
|
15
|
+
*
|
|
16
|
+
* Usage:
|
|
17
|
+
* ```html
|
|
18
|
+
* <open-dialog>
|
|
19
|
+
* <button slot="trigger">Open Dialog</button>
|
|
20
|
+
* <div>Dialog content here</div>
|
|
21
|
+
* </open-dialog>
|
|
22
|
+
* ```
|
|
23
|
+
*/ import { OpenElement } from '@openelement/element';
|
|
24
|
+
import { type StyleSheetLike } from '@openelement/core/style-sheet';
|
|
25
|
+
export declare const tagName: 'open-dialog';
|
|
26
|
+
declare const sheet: StyleSheetLike;
|
|
27
|
+
export declare class OpenDialog extends OpenElement {
|
|
28
|
+
static override styles: [];
|
|
29
|
+
static delegatesFocus: boolean;
|
|
30
|
+
static override observedAttributes: [string, string];
|
|
31
|
+
private static _originalInertStates: any;
|
|
32
|
+
override render(): ReturnType<typeof OpenElement.prototype.render>;
|
|
33
|
+
override attributeChangedCallback(name: string, old: string | null, val: string | null): void;
|
|
34
|
+
private _updateStates: any;
|
|
35
|
+
show(): void;
|
|
36
|
+
close(): void;
|
|
37
|
+
toggle(): void;
|
|
38
|
+
private _syncDialogElement: any;
|
|
39
|
+
private _syncInert: any;
|
|
40
|
+
override disconnectedCallback(): void;
|
|
41
|
+
private _handleClose: any;
|
|
42
|
+
private _handleCancel: any;
|
|
43
|
+
private _handleTrigger: any;
|
|
44
|
+
private _esc: any;
|
|
45
|
+
private _escAttr: any;
|
|
46
|
+
}
|
|
47
|
+
export default OpenDialog;
|