@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
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/** @jsxImportSource @openelement/core */ /**
|
|
2
|
+
* @openelement/ui - open-brand-mark
|
|
3
|
+
*
|
|
4
|
+
* Flat Aperture O brand mark shared by header, docs surfaces, and assets.
|
|
5
|
+
*/ import { OpenElement } from '@openelement/element';
|
|
6
|
+
import { StyleSheet } from '@openelement/core/style-sheet';
|
|
7
|
+
export const tagName = 'open-brand-mark';
|
|
8
|
+
const sheet = new StyleSheet();
|
|
9
|
+
sheet.replaceSync(`
|
|
10
|
+
:host {
|
|
11
|
+
--mark-size: var(--size-10);
|
|
12
|
+
display: inline-grid;
|
|
13
|
+
width: var(--mark-size);
|
|
14
|
+
height: var(--mark-size);
|
|
15
|
+
flex: 0 0 auto;
|
|
16
|
+
vertical-align: middle;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
:host([size="sm"]) { --mark-size: var(--size-8); }
|
|
20
|
+
:host([size="lg"]) { --mark-size: var(--size-12); }
|
|
21
|
+
:host([size="xl"]) { --mark-size: var(--size-16); }
|
|
22
|
+
|
|
23
|
+
.mark {
|
|
24
|
+
position: relative;
|
|
25
|
+
display: grid;
|
|
26
|
+
place-items: center;
|
|
27
|
+
width: 100%;
|
|
28
|
+
height: 100%;
|
|
29
|
+
overflow: hidden;
|
|
30
|
+
border-radius: var(--radius-round);
|
|
31
|
+
background:
|
|
32
|
+
radial-gradient(circle at 50% 50%, var(--brand-mark-field, var(--bg-base)) 0 38%, transparent 39%),
|
|
33
|
+
conic-gradient(
|
|
34
|
+
from 218deg,
|
|
35
|
+
var(--brand-deep) 0 24%,
|
|
36
|
+
var(--brand) 24% 61%,
|
|
37
|
+
var(--brand-light) 61% 82%,
|
|
38
|
+
var(--brand-deep) 82% 100%
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
:host([tone="inverted"]) .mark {
|
|
43
|
+
--brand-mark-field: var(--gray-12);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.mark::before {
|
|
47
|
+
content: "";
|
|
48
|
+
position: absolute;
|
|
49
|
+
inset: 27%;
|
|
50
|
+
border: var(--border-size-1) solid color-mix(in srgb, var(--brand-light) 58%, var(--brand-mark-field, var(--bg-base)));
|
|
51
|
+
border-radius: var(--radius-round);
|
|
52
|
+
transform: rotate(-13deg);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.mark::after {
|
|
56
|
+
content: "";
|
|
57
|
+
position: absolute;
|
|
58
|
+
inset-inline-end: -2%;
|
|
59
|
+
inset-block-start: 7%;
|
|
60
|
+
width: 35%;
|
|
61
|
+
height: 44%;
|
|
62
|
+
border-radius: var(--radius-round) var(--radius-round) 0 0;
|
|
63
|
+
background: var(--brand-mark-field, var(--bg-base));
|
|
64
|
+
transform: rotate(24deg);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.boundary,
|
|
68
|
+
.route {
|
|
69
|
+
position: absolute;
|
|
70
|
+
inset-inline: 28% 22%;
|
|
71
|
+
height: var(--border-size-1);
|
|
72
|
+
border-radius: var(--radius-round);
|
|
73
|
+
background: var(--brand-deep);
|
|
74
|
+
z-index: 1;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.boundary { inset-block-start: 46%; }
|
|
78
|
+
.route {
|
|
79
|
+
inset-block-start: 57%;
|
|
80
|
+
background: var(--brand);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
:host([size="sm"]) .boundary,
|
|
84
|
+
:host([size="sm"]) .route {
|
|
85
|
+
inset-inline: 30% 24%;
|
|
86
|
+
}
|
|
87
|
+
`);
|
|
88
|
+
export class OpenBrandMark extends OpenElement {
|
|
89
|
+
static styles = [
|
|
90
|
+
sheet
|
|
91
|
+
];
|
|
92
|
+
static observedAttributes = [
|
|
93
|
+
'size',
|
|
94
|
+
'tone'
|
|
95
|
+
];
|
|
96
|
+
render() {
|
|
97
|
+
return <span className='mark' part='mark' aria-hidden='true'>
|
|
98
|
+
<span className='boundary'></span>
|
|
99
|
+
<span className='route'></span>
|
|
100
|
+
</span>;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
export default OpenBrandMark;
|
|
104
|
+
if (typeof customElements !== 'undefined' && !customElements.get(tagName)) {
|
|
105
|
+
customElements.define(tagName, OpenBrandMark);
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy91aS9zcmMvb3Blbi1icmFuZC1tYXJrLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQGpzeEltcG9ydFNvdXJjZSBAb3BlbmVsZW1lbnQvY29yZSAqL1xuLyoqXG4gKiBAb3BlbmVsZW1lbnQvdWkgLSBvcGVuLWJyYW5kLW1hcmtcbiAqXG4gKiBGbGF0IEFwZXJ0dXJlIE8gYnJhbmQgbWFyayBzaGFyZWQgYnkgaGVhZGVyLCBkb2NzIHN1cmZhY2VzLCBhbmQgYXNzZXRzLlxuICovXG5cbmltcG9ydCB7IE9wZW5FbGVtZW50IH0gZnJvbSAnQG9wZW5lbGVtZW50L2VsZW1lbnQnO1xuaW1wb3J0IHsgU3R5bGVTaGVldCwgdHlwZSBTdHlsZVNoZWV0TGlrZSB9IGZyb20gJ0BvcGVuZWxlbWVudC9jb3JlL3N0eWxlLXNoZWV0JztcblxuZXhwb3J0IGNvbnN0IHRhZ05hbWUgPSAnb3Blbi1icmFuZC1tYXJrJztcblxuY29uc3Qgc2hlZXQ6IFN0eWxlU2hlZXRMaWtlID0gbmV3IFN0eWxlU2hlZXQoKTtcbnNoZWV0LnJlcGxhY2VTeW5jKGBcbiAgOmhvc3Qge1xuICAgIC0tbWFyay1zaXplOiB2YXIoLS1zaXplLTEwKTtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZ3JpZDtcbiAgICB3aWR0aDogdmFyKC0tbWFyay1zaXplKTtcbiAgICBoZWlnaHQ6IHZhcigtLW1hcmstc2l6ZSk7XG4gICAgZmxleDogMCAwIGF1dG87XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuXG4gIDpob3N0KFtzaXplPVwic21cIl0pIHsgLS1tYXJrLXNpemU6IHZhcigtLXNpemUtOCk7IH1cbiAgOmhvc3QoW3NpemU9XCJsZ1wiXSkgeyAtLW1hcmstc2l6ZTogdmFyKC0tc2l6ZS0xMik7IH1cbiAgOmhvc3QoW3NpemU9XCJ4bFwiXSkgeyAtLW1hcmstc2l6ZTogdmFyKC0tc2l6ZS0xNik7IH1cblxuICAubWFyayB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtcm91bmQpO1xuICAgIGJhY2tncm91bmQ6XG4gICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDUwJSA1MCUsIHZhcigtLWJyYW5kLW1hcmstZmllbGQsIHZhcigtLWJnLWJhc2UpKSAwIDM4JSwgdHJhbnNwYXJlbnQgMzklKSxcbiAgICAgIGNvbmljLWdyYWRpZW50KFxuICAgICAgICBmcm9tIDIxOGRlZyxcbiAgICAgICAgdmFyKC0tYnJhbmQtZGVlcCkgMCAyNCUsXG4gICAgICAgIHZhcigtLWJyYW5kKSAyNCUgNjElLFxuICAgICAgICB2YXIoLS1icmFuZC1saWdodCkgNjElIDgyJSxcbiAgICAgICAgdmFyKC0tYnJhbmQtZGVlcCkgODIlIDEwMCVcbiAgICAgICk7XG4gIH1cblxuICA6aG9zdChbdG9uZT1cImludmVydGVkXCJdKSAubWFyayB7XG4gICAgLS1icmFuZC1tYXJrLWZpZWxkOiB2YXIoLS1ncmF5LTEyKTtcbiAgfVxuXG4gIC5tYXJrOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0OiAyNyU7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXItc2l6ZS0xKSBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYnJhbmQtbGlnaHQpIDU4JSwgdmFyKC0tYnJhbmQtbWFyay1maWVsZCwgdmFyKC0tYmctYmFzZSkpKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtcm91bmQpO1xuICAgIHRyYW5zZm9ybTogcm90YXRlKC0xM2RlZyk7XG4gIH1cblxuICAubWFyazo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0LWlubGluZS1lbmQ6IC0yJTtcbiAgICBpbnNldC1ibG9jay1zdGFydDogNyU7XG4gICAgd2lkdGg6IDM1JTtcbiAgICBoZWlnaHQ6IDQ0JTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtcm91bmQpIHZhcigtLXJhZGl1cy1yb3VuZCkgMCAwO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWJyYW5kLW1hcmstZmllbGQsIHZhcigtLWJnLWJhc2UpKTtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNGRlZyk7XG4gIH1cblxuICAuYm91bmRhcnksXG4gIC5yb3V0ZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0LWlubGluZTogMjglIDIyJTtcbiAgICBoZWlnaHQ6IHZhcigtLWJvcmRlci1zaXplLTEpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1yb3VuZCk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tYnJhbmQtZGVlcCk7XG4gICAgei1pbmRleDogMTtcbiAgfVxuXG4gIC5ib3VuZGFyeSB7IGluc2V0LWJsb2NrLXN0YXJ0OiA0NiU7IH1cbiAgLnJvdXRlIHtcbiAgICBpbnNldC1ibG9jay1zdGFydDogNTclO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWJyYW5kKTtcbiAgfVxuXG4gIDpob3N0KFtzaXplPVwic21cIl0pIC5ib3VuZGFyeSxcbiAgOmhvc3QoW3NpemU9XCJzbVwiXSkgLnJvdXRlIHtcbiAgICBpbnNldC1pbmxpbmU6IDMwJSAyNCU7XG4gIH1cbmApO1xuXG5leHBvcnQgY2xhc3MgT3BlbkJyYW5kTWFyayBleHRlbmRzIE9wZW5FbGVtZW50IHtcbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IFtzaGVldF07XG4gIHN0YXRpYyBvdmVycmlkZSBvYnNlcnZlZEF0dHJpYnV0ZXMgPSBbJ3NpemUnLCAndG9uZSddO1xuXG4gIG92ZXJyaWRlIHJlbmRlcigpOiBSZXR1cm5UeXBlPHR5cGVvZiBPcGVuRWxlbWVudC5wcm90b3R5cGUucmVuZGVyPiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuIGNsYXNzTmFtZT0nbWFyaycgcGFydD0nbWFyaycgYXJpYS1oaWRkZW49J3RydWUnPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9J2JvdW5kYXJ5Jz48L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT0ncm91dGUnPjwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE9wZW5CcmFuZE1hcms7XG5cbmlmICh0eXBlb2YgY3VzdG9tRWxlbWVudHMgIT09ICd1bmRlZmluZWQnICYmICFjdXN0b21FbGVtZW50cy5nZXQodGFnTmFtZSkpIHtcbiAgY3VzdG9tRWxlbWVudHMuZGVmaW5lKHRhZ05hbWUsIE9wZW5CcmFuZE1hcmspO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVDQUF1QyxHQUN2Qzs7OztDQUlDLEdBRUQsU0FBUyxXQUFXLFFBQVEsdUJBQXVCO0FBQ25ELFNBQVMsVUFBVSxRQUE2QixnQ0FBZ0M7QUFFaEYsT0FBTyxNQUFNLFVBQVUsa0JBQWtCO0FBRXpDLE1BQU0sUUFBd0IsSUFBSTtBQUNsQyxNQUFNLFdBQVcsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4RW5CLENBQUM7QUFFRCxPQUFPLE1BQU0sc0JBQXNCO0VBQ2pDLE9BQWdCLFNBQVM7SUFBQztHQUFNLENBQUM7RUFDakMsT0FBZ0IscUJBQXFCO0lBQUM7SUFBUTtHQUFPLENBQUM7RUFFN0MsU0FBMEQ7SUFDakUsUUFDRyxLQUFLLFVBQVUsT0FBTyxLQUFLLE9BQU8sWUFBWSxPQUFPO1FBQ3BELENBQUMsS0FBSyxVQUFVLGFBQWEsS0FBSztRQUNsQyxDQUFDLEtBQUssVUFBVSxVQUFVLEtBQUs7TUFDakMsRUFBRTtFQUVOO0FBQ0Y7QUFFQSxlQUFlLGNBQWM7QUFFN0IsSUFBSSxPQUFPLG1CQUFtQixlQUFlLENBQUMsZUFBZSxHQUFHLENBQUMsVUFBVTtFQUN6RSxlQUFlLE1BQU0sQ0FBQyxTQUFTO0FBQ2pDIn0=
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/** @jsxImportSource @openelement/core */ /**
|
|
2
|
+
* @openelement/ui - open-button
|
|
3
|
+
*
|
|
4
|
+
* Minimal button component following Swiss International Style.
|
|
5
|
+
* Pure B&W design with subtle hover states.
|
|
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
|
+
* Variants: default (outlined), primary (filled), ghost (no border), accent (gradient)
|
|
11
|
+
* Sizes: sm, md (default), lg
|
|
12
|
+
*
|
|
13
|
+
* @csspart control -The button or anchor element
|
|
14
|
+
*
|
|
15
|
+
* Usage:
|
|
16
|
+
* ```html
|
|
17
|
+
* <open-button>Click me</open-button>
|
|
18
|
+
* <open-button variant="primary">Submit</open-button>
|
|
19
|
+
* <open-button size="sm" disabled>Small</open-button>
|
|
20
|
+
* ```
|
|
21
|
+
*/ import { OpenElement } from '@openelement/element';
|
|
22
|
+
import { type StyleSheetLike } from '@openelement/core/style-sheet';
|
|
23
|
+
export declare const tagName: 'open-button';
|
|
24
|
+
declare const sheet: StyleSheetLike;
|
|
25
|
+
export declare class OpenButton extends OpenElement {
|
|
26
|
+
static override styles: [];
|
|
27
|
+
static delegatesFocus: boolean;
|
|
28
|
+
static formAssociated: boolean;
|
|
29
|
+
static override observedAttributes: [string, string, string, string, string, string];
|
|
30
|
+
override render(): ReturnType<typeof OpenElement.prototype.render>;
|
|
31
|
+
override attributeChangedCallback(name: string, old: string | null, val: string | null): void;
|
|
32
|
+
private _syncDOM: any;
|
|
33
|
+
private _reRender: any;
|
|
34
|
+
private _updateState: any;
|
|
35
|
+
private _handleClick: any;
|
|
36
|
+
private _escAttr: any;
|
|
37
|
+
}
|
|
38
|
+
export default OpenButton;
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/** @jsxImportSource @openelement/core */ /**
|
|
2
|
+
* @openelement/ui - open-button
|
|
3
|
+
*
|
|
4
|
+
* Minimal button component following Swiss International Style.
|
|
5
|
+
* Pure B&W design with subtle hover states.
|
|
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
|
+
* Variants: default (outlined), primary (filled), ghost (no border), accent (gradient)
|
|
11
|
+
* Sizes: sm, md (default), lg
|
|
12
|
+
*
|
|
13
|
+
* @csspart control -The button or anchor element
|
|
14
|
+
*
|
|
15
|
+
* Usage:
|
|
16
|
+
* ```html
|
|
17
|
+
* <open-button>Click me</open-button>
|
|
18
|
+
* <open-button variant="primary">Submit</open-button>
|
|
19
|
+
* <open-button size="sm" disabled>Small</open-button>
|
|
20
|
+
* ```
|
|
21
|
+
*/ import { OpenElement } from '@openelement/element';
|
|
22
|
+
import { StyleSheet } from '@openelement/core/style-sheet';
|
|
23
|
+
import { escapeAttr } from '@openelement/core';
|
|
24
|
+
export const tagName = 'open-button';
|
|
25
|
+
const sheet = new StyleSheet();
|
|
26
|
+
sheet.replaceSync(`
|
|
27
|
+
:host {
|
|
28
|
+
display: inline-block;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.btn {
|
|
32
|
+
display: inline-flex;
|
|
33
|
+
align-items: center;
|
|
34
|
+
justify-content: center;
|
|
35
|
+
gap: var(--size-2);
|
|
36
|
+
font-family: var(--font-sans);
|
|
37
|
+
font-weight: var(--font-weight-8);
|
|
38
|
+
text-decoration: none;
|
|
39
|
+
cursor: pointer;
|
|
40
|
+
border: var(--border-size-1) solid color-mix(in srgb, var(--border) 72%, var(--brand));
|
|
41
|
+
background: color-mix(in srgb, var(--bg-elevated) 78%, transparent);
|
|
42
|
+
color: var(--text-primary);
|
|
43
|
+
border-radius: var(--btn-radius);
|
|
44
|
+
box-shadow: inset 0 1px 0 color-mix(in srgb, var(--gray-0) 72%, transparent);
|
|
45
|
+
transition: color var(--ease-3) var(--duration-2), border-color var(--ease-3) var(--duration-2), background var(--ease-3) var(--duration-2), transform var(--ease-3) var(--duration-2), box-shadow var(--ease-3) var(--duration-2);
|
|
46
|
+
white-space: nowrap;
|
|
47
|
+
letter-spacing: 0;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/* Sizes */
|
|
51
|
+
.btn--sm {
|
|
52
|
+
padding: var(--size-1) var(--size-3);
|
|
53
|
+
font-size: var(--font-size-0);
|
|
54
|
+
min-height: 30px;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.btn--md {
|
|
58
|
+
padding: var(--size-2) var(--size-4);
|
|
59
|
+
font-size: var(--font-size-1);
|
|
60
|
+
min-height: 38px;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.btn--lg {
|
|
64
|
+
padding: var(--size-3) var(--size-5);
|
|
65
|
+
font-size: var(--font-size-2);
|
|
66
|
+
min-height: 48px;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/* Variants */
|
|
70
|
+
.btn--default:hover {
|
|
71
|
+
color: var(--brand-deep);
|
|
72
|
+
border-color: var(--brand-light);
|
|
73
|
+
background: color-mix(in srgb, var(--brand-pale) 52%, var(--bg-elevated));
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.btn--primary {
|
|
77
|
+
background: linear-gradient(135deg, var(--brand), var(--brand-light));
|
|
78
|
+
color: var(--on-brand);
|
|
79
|
+
border-color: transparent;
|
|
80
|
+
box-shadow: 0 var(--size-2) var(--size-5) color-mix(in srgb, var(--brand) 22%, transparent);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.btn--primary:hover {
|
|
84
|
+
background: linear-gradient(135deg, var(--brand-hover), var(--brand-light));
|
|
85
|
+
border-color: transparent;
|
|
86
|
+
transform: translateY(calc(var(--border-size-1) * -1));
|
|
87
|
+
box-shadow: 0 var(--size-3) var(--size-6) color-mix(in srgb, var(--brand) 28%, transparent);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.btn--ghost {
|
|
91
|
+
border-color: transparent;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.btn--ghost:hover {
|
|
95
|
+
background: color-mix(in srgb, var(--brand-pale) 38%, transparent);
|
|
96
|
+
border-color: transparent;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.btn--accent {
|
|
100
|
+
background: var(--brand);
|
|
101
|
+
color: var(--on-brand);
|
|
102
|
+
border-color: transparent;
|
|
103
|
+
}
|
|
104
|
+
.btn--accent:hover {
|
|
105
|
+
transform: translateY(-1px);
|
|
106
|
+
filter: brightness(1.05);
|
|
107
|
+
}
|
|
108
|
+
.btn--accent:active {
|
|
109
|
+
transform: translateY(0);
|
|
110
|
+
box-shadow: var(--shadow-1);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/* States */
|
|
114
|
+
.btn:disabled,
|
|
115
|
+
.btn[aria-disabled="true"] {
|
|
116
|
+
opacity: 0.5;
|
|
117
|
+
cursor: not-allowed;
|
|
118
|
+
pointer-events: none;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.btn:focus-visible {
|
|
122
|
+
outline: 2px solid var(--brand, var(--indigo-6));
|
|
123
|
+
outline-offset: 2px;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
:host(:state(disabled)) .btn {
|
|
127
|
+
opacity: 0.5;
|
|
128
|
+
cursor: not-allowed;
|
|
129
|
+
pointer-events: none;
|
|
130
|
+
}
|
|
131
|
+
`);
|
|
132
|
+
export class OpenButton extends OpenElement {
|
|
133
|
+
static styles = [
|
|
134
|
+
sheet
|
|
135
|
+
];
|
|
136
|
+
static delegatesFocus = true;
|
|
137
|
+
static formAssociated = true;
|
|
138
|
+
static observedAttributes = [
|
|
139
|
+
'variant',
|
|
140
|
+
'size',
|
|
141
|
+
'disabled',
|
|
142
|
+
'href',
|
|
143
|
+
'target',
|
|
144
|
+
'type'
|
|
145
|
+
];
|
|
146
|
+
render() {
|
|
147
|
+
const v = this.getAttribute('variant') || 'default';
|
|
148
|
+
const s = this.getAttribute('size') || 'md';
|
|
149
|
+
const d = this.hasAttribute('disabled');
|
|
150
|
+
const href = this.getAttribute('href') || '';
|
|
151
|
+
const target = this.getAttribute('target') || '';
|
|
152
|
+
const type = this.getAttribute('type') || 'button';
|
|
153
|
+
const classes = `btn btn--${v} btn--${s}`;
|
|
154
|
+
if (href) {
|
|
155
|
+
return <a className={classes} part='control' href={d ? '' : href} target={target || undefined} aria-disabled={d ? 'true' : undefined} rel={target === '_blank' ? 'noopener noreferrer' : undefined} onClick={this._handleClick}>
|
|
156
|
+
<slot></slot>
|
|
157
|
+
</a>;
|
|
158
|
+
}
|
|
159
|
+
return <button className={classes} part='control' disabled={d} type={type} onClick={this._handleClick}>
|
|
160
|
+
<slot></slot>
|
|
161
|
+
</button>;
|
|
162
|
+
}
|
|
163
|
+
attributeChangedCallback(name, old, val) {
|
|
164
|
+
if (old === val) return;
|
|
165
|
+
// href change may switch element type (a vs button) -full re-render
|
|
166
|
+
if (name === 'href') {
|
|
167
|
+
this._reRender();
|
|
168
|
+
} else if (name === 'disabled') {
|
|
169
|
+
this._syncDOM();
|
|
170
|
+
this._updateState();
|
|
171
|
+
} else {
|
|
172
|
+
this._syncDOM();
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
_syncDOM() {
|
|
176
|
+
const el = this.shadowRoot?.querySelector('.btn');
|
|
177
|
+
if (!el) return;
|
|
178
|
+
const v = this.getAttribute('variant') || 'default';
|
|
179
|
+
const s = this.getAttribute('size') || 'md';
|
|
180
|
+
el.className = `btn btn--${v} btn--${s}`;
|
|
181
|
+
if (el instanceof HTMLButtonElement) {
|
|
182
|
+
el.disabled = this.hasAttribute('disabled');
|
|
183
|
+
}
|
|
184
|
+
if (el instanceof HTMLAnchorElement && this.hasAttribute('disabled')) {
|
|
185
|
+
el.setAttribute('aria-disabled', 'true');
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
_reRender() {
|
|
189
|
+
// NOTE: We do NOT capture assignedNodes before innerHTML replacement.
|
|
190
|
+
// Light DOM children remain in the host element and automatically
|
|
191
|
+
// re-project to the new <slot> - no manual DOM manipulation needed.
|
|
192
|
+
// The previous approach (replaceChildren) incorrectly moved light DOM
|
|
193
|
+
// children into the shadow root, breaking slot projection.
|
|
194
|
+
this.update();
|
|
195
|
+
}
|
|
196
|
+
_updateState() {
|
|
197
|
+
if (!this._internals?.states) return;
|
|
198
|
+
if (this.hasAttribute('disabled')) {
|
|
199
|
+
this._internals.states.delete('enabled');
|
|
200
|
+
this._internals.states.add('disabled');
|
|
201
|
+
} else {
|
|
202
|
+
this._internals.states.delete('disabled');
|
|
203
|
+
this._internals.states.add('enabled');
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
_handleClick(_e) {
|
|
207
|
+
this.dispatchEvent(new CustomEvent('open-click', {
|
|
208
|
+
bubbles: true,
|
|
209
|
+
composed: true
|
|
210
|
+
}));
|
|
211
|
+
}
|
|
212
|
+
_escAttr = escapeAttr;
|
|
213
|
+
}
|
|
214
|
+
export default OpenButton;
|
|
215
|
+
// Guard: idempotent across SSR paths
|
|
216
|
+
if (typeof customElements !== 'undefined' && !customElements.get(tagName)) {
|
|
217
|
+
customElements.define(tagName, OpenButton);
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy91aS9zcmMvb3Blbi1idXR0b24udHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBAanN4SW1wb3J0U291cmNlIEBvcGVuZWxlbWVudC9jb3JlICovXG4vKipcbiAqIEBvcGVuZWxlbWVudC91aSAtIG9wZW4tYnV0dG9uXG4gKlxuICogTWluaW1hbCBidXR0b24gY29tcG9uZW50IGZvbGxvd2luZyBTd2lzcyBJbnRlcm5hdGlvbmFsIFN0eWxlLlxuICogUHVyZSBCJlcgZGVzaWduIHdpdGggc3VidGxlIGhvdmVyIHN0YXRlcy5cbiAqXG4gKiB2MC4yMC4wOiBNaWdyYXRlZCBmcm9tIERzZExpdEVsZW1lbnQgdG8gRHNkRWxlbWVudCAoT2NlYW4gY29tcG9uZW50KS5cbiAqIHYwLjI0LjE6IE1pZ3JhdGVkIGZyb20gaHRtbGBgIHRlbXBsYXRlIHRvIEpTWCAoQURSLTAwNTcpLlxuICpcbiAqIFZhcmlhbnRzOiBkZWZhdWx0IChvdXRsaW5lZCksIHByaW1hcnkgKGZpbGxlZCksIGdob3N0IChubyBib3JkZXIpLCBhY2NlbnQgKGdyYWRpZW50KVxuICogU2l6ZXM6IHNtLCBtZCAoZGVmYXVsdCksIGxnXG4gKlxuICogQGNzc3BhcnQgY29udHJvbCAtVGhlIGJ1dHRvbiBvciBhbmNob3IgZWxlbWVudFxuICpcbiAqIFVzYWdlOlxuICogYGBgaHRtbFxuICogPG9wZW4tYnV0dG9uPkNsaWNrIG1lPC9vcGVuLWJ1dHRvbj5cbiAqIDxvcGVuLWJ1dHRvbiB2YXJpYW50PVwicHJpbWFyeVwiPlN1Ym1pdDwvb3Blbi1idXR0b24+XG4gKiA8b3Blbi1idXR0b24gc2l6ZT1cInNtXCIgZGlzYWJsZWQ+U21hbGw8L29wZW4tYnV0dG9uPlxuICogYGBgXG4gKi9cblxuaW1wb3J0IHsgT3BlbkVsZW1lbnQgfSBmcm9tICdAb3BlbmVsZW1lbnQvZWxlbWVudCc7XG5pbXBvcnQgeyBTdHlsZVNoZWV0LCB0eXBlIFN0eWxlU2hlZXRMaWtlIH0gZnJvbSAnQG9wZW5lbGVtZW50L2NvcmUvc3R5bGUtc2hlZXQnO1xuaW1wb3J0IHsgZXNjYXBlQXR0ciB9IGZyb20gJ0BvcGVuZWxlbWVudC9jb3JlJztcblxuZXhwb3J0IGNvbnN0IHRhZ05hbWUgPSAnb3Blbi1idXR0b24nO1xuXG5jb25zdCBzaGVldDogU3R5bGVTaGVldExpa2UgPSBuZXcgU3R5bGVTaGVldCgpO1xuc2hlZXQucmVwbGFjZVN5bmMoYFxuICA6aG9zdCB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB9XG5cbiAgLmJ0biB7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLXNpemUtMik7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc2Fucyk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LTgpO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXItc2l6ZS0xKSBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYm9yZGVyKSA3MiUsIHZhcigtLWJyYW5kKSk7XG4gICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWJnLWVsZXZhdGVkKSA3OCUsIHRyYW5zcGFyZW50KTtcbiAgICBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1idG4tcmFkaXVzKTtcbiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1ncmF5LTApIDcyJSwgdHJhbnNwYXJlbnQpO1xuICAgIHRyYW5zaXRpb246IGNvbG9yIHZhcigtLWVhc2UtMykgdmFyKC0tZHVyYXRpb24tMiksIGJvcmRlci1jb2xvciB2YXIoLS1lYXNlLTMpIHZhcigtLWR1cmF0aW9uLTIpLCBiYWNrZ3JvdW5kIHZhcigtLWVhc2UtMykgdmFyKC0tZHVyYXRpb24tMiksIHRyYW5zZm9ybSB2YXIoLS1lYXNlLTMpIHZhcigtLWR1cmF0aW9uLTIpLCBib3gtc2hhZG93IHZhcigtLWVhc2UtMykgdmFyKC0tZHVyYXRpb24tMik7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBsZXR0ZXItc3BhY2luZzogMDtcbiAgfVxuXG4gIC8qIFNpemVzICovXG4gIC5idG4tLXNtIHtcbiAgICBwYWRkaW5nOiB2YXIoLS1zaXplLTEpIHZhcigtLXNpemUtMyk7XG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtMCk7XG4gICAgbWluLWhlaWdodDogMzBweDtcbiAgfVxuXG4gIC5idG4tLW1kIHtcbiAgICBwYWRkaW5nOiB2YXIoLS1zaXplLTIpIHZhcigtLXNpemUtNCk7XG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtMSk7XG4gICAgbWluLWhlaWdodDogMzhweDtcbiAgfVxuXG4gIC5idG4tLWxnIHtcbiAgICBwYWRkaW5nOiB2YXIoLS1zaXplLTMpIHZhcigtLXNpemUtNSk7XG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtMik7XG4gICAgbWluLWhlaWdodDogNDhweDtcbiAgfVxuXG4gIC8qIFZhcmlhbnRzICovXG4gIC5idG4tLWRlZmF1bHQ6aG92ZXIge1xuICAgIGNvbG9yOiB2YXIoLS1icmFuZC1kZWVwKTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWJyYW5kLWxpZ2h0KTtcbiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYnJhbmQtcGFsZSkgNTIlLCB2YXIoLS1iZy1lbGV2YXRlZCkpO1xuICB9XG5cbiAgLmJ0bi0tcHJpbWFyeSB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tYnJhbmQpLCB2YXIoLS1icmFuZC1saWdodCkpO1xuICAgIGNvbG9yOiB2YXIoLS1vbi1icmFuZCk7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBib3gtc2hhZG93OiAwIHZhcigtLXNpemUtMikgdmFyKC0tc2l6ZS01KSBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYnJhbmQpIDIyJSwgdHJhbnNwYXJlbnQpO1xuICB9XG5cbiAgLmJ0bi0tcHJpbWFyeTpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tYnJhbmQtaG92ZXIpLCB2YXIoLS1icmFuZC1saWdodCkpO1xuICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKGNhbGModmFyKC0tYm9yZGVyLXNpemUtMSkgKiAtMSkpO1xuICAgIGJveC1zaGFkb3c6IDAgdmFyKC0tc2l6ZS0zKSB2YXIoLS1zaXplLTYpIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1icmFuZCkgMjglLCB0cmFuc3BhcmVudCk7XG4gIH1cblxuICAuYnRuLS1naG9zdCB7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxuXG4gIC5idG4tLWdob3N0OmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYnJhbmQtcGFsZSkgMzglLCB0cmFuc3BhcmVudCk7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxuXG4gIC5idG4tLWFjY2VudCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tYnJhbmQpO1xuICAgIGNvbG9yOiB2YXIoLS1vbi1icmFuZCk7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxuICAuYnRuLS1hY2NlbnQ6aG92ZXIge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcbiAgICBmaWx0ZXI6IGJyaWdodG5lc3MoMS4wNSk7XG4gIH1cbiAgLmJ0bi0tYWNjZW50OmFjdGl2ZSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy0xKTtcbiAgfVxuXG4gIC8qIFN0YXRlcyAqL1xuICAuYnRuOmRpc2FibGVkLFxuICAuYnRuW2FyaWEtZGlzYWJsZWQ9XCJ0cnVlXCJdIHtcbiAgICBvcGFjaXR5OiAwLjU7XG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgfVxuXG4gIC5idG46Zm9jdXMtdmlzaWJsZSB7XG4gICAgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLWJyYW5kLCB2YXIoLS1pbmRpZ28tNikpO1xuICAgIG91dGxpbmUtb2Zmc2V0OiAycHg7XG4gIH1cblxuICA6aG9zdCg6c3RhdGUoZGlzYWJsZWQpKSAuYnRuIHtcbiAgICBvcGFjaXR5OiAwLjU7XG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgfVxuYCk7XG5cbmV4cG9ydCBjbGFzcyBPcGVuQnV0dG9uIGV4dGVuZHMgT3BlbkVsZW1lbnQge1xuICBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzID0gW3NoZWV0XTtcbiAgc3RhdGljIG92ZXJyaWRlIGRlbGVnYXRlc0ZvY3VzID0gdHJ1ZTtcbiAgc3RhdGljIG92ZXJyaWRlIGZvcm1Bc3NvY2lhdGVkID0gdHJ1ZTtcbiAgc3RhdGljIG92ZXJyaWRlIG9ic2VydmVkQXR0cmlidXRlcyA9IFsndmFyaWFudCcsICdzaXplJywgJ2Rpc2FibGVkJywgJ2hyZWYnLCAndGFyZ2V0JywgJ3R5cGUnXTtcblxuICBvdmVycmlkZSByZW5kZXIoKTogUmV0dXJuVHlwZTx0eXBlb2YgT3BlbkVsZW1lbnQucHJvdG90eXBlLnJlbmRlcj4ge1xuICAgIGNvbnN0IHYgPSB0aGlzLmdldEF0dHJpYnV0ZSgndmFyaWFudCcpIHx8ICdkZWZhdWx0JztcbiAgICBjb25zdCBzID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ3NpemUnKSB8fCAnbWQnO1xuICAgIGNvbnN0IGQgPSB0aGlzLmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICBjb25zdCBocmVmID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSB8fCAnJztcbiAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmdldEF0dHJpYnV0ZSgndGFyZ2V0JykgfHwgJyc7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0QXR0cmlidXRlKCd0eXBlJykgfHwgJ2J1dHRvbic7XG4gICAgY29uc3QgY2xhc3NlcyA9IGBidG4gYnRuLS0ke3Z9IGJ0bi0tJHtzfWA7XG5cbiAgICBpZiAoaHJlZikge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGFcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXN9XG4gICAgICAgICAgcGFydD0nY29udHJvbCdcbiAgICAgICAgICBocmVmPXtkID8gJycgOiBocmVmfVxuICAgICAgICAgIHRhcmdldD17dGFyZ2V0IHx8IHVuZGVmaW5lZH1cbiAgICAgICAgICBhcmlhLWRpc2FibGVkPXtkID8gJ3RydWUnIDogdW5kZWZpbmVkfVxuICAgICAgICAgIHJlbD17dGFyZ2V0ID09PSAnX2JsYW5rJyA/ICdub29wZW5lciBub3JlZmVycmVyJyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICBvbkNsaWNrPXt0aGlzLl9oYW5kbGVDbGlja31cbiAgICAgICAgPlxuICAgICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgICAgPC9hPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXN9XG4gICAgICAgIHBhcnQ9J2NvbnRyb2wnXG4gICAgICAgIGRpc2FibGVkPXtkfVxuICAgICAgICB0eXBlPXt0eXBlfVxuICAgICAgICBvbkNsaWNrPXt0aGlzLl9oYW5kbGVDbGlja31cbiAgICAgID5cbiAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuYW1lOiBzdHJpbmcsIG9sZDogc3RyaW5nIHwgbnVsbCwgdmFsOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKG9sZCA9PT0gdmFsKSByZXR1cm47XG4gICAgLy8gaHJlZiBjaGFuZ2UgbWF5IHN3aXRjaCBlbGVtZW50IHR5cGUgKGEgdnMgYnV0dG9uKSAtZnVsbCByZS1yZW5kZXJcbiAgICBpZiAobmFtZSA9PT0gJ2hyZWYnKSB7XG4gICAgICB0aGlzLl9yZVJlbmRlcigpO1xuICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ2Rpc2FibGVkJykge1xuICAgICAgdGhpcy5fc3luY0RPTSgpO1xuICAgICAgdGhpcy5fdXBkYXRlU3RhdGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc3luY0RPTSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3N5bmNET00oKTogdm9pZCB7XG4gICAgY29uc3QgZWwgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoJy5idG4nKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgaWYgKCFlbCkgcmV0dXJuO1xuICAgIGNvbnN0IHYgPSB0aGlzLmdldEF0dHJpYnV0ZSgndmFyaWFudCcpIHx8ICdkZWZhdWx0JztcbiAgICBjb25zdCBzID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ3NpemUnKSB8fCAnbWQnO1xuICAgIGVsLmNsYXNzTmFtZSA9IGBidG4gYnRuLS0ke3Z9IGJ0bi0tJHtzfWA7XG4gICAgaWYgKGVsIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQpIHtcbiAgICAgIGVsLmRpc2FibGVkID0gdGhpcy5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgfVxuICAgIGlmIChlbCBpbnN0YW5jZW9mIEhUTUxBbmNob3JFbGVtZW50ICYmIHRoaXMuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGlzYWJsZWQnLCAndHJ1ZScpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3JlUmVuZGVyKCk6IHZvaWQge1xuICAgIC8vIE5PVEU6IFdlIGRvIE5PVCBjYXB0dXJlIGFzc2lnbmVkTm9kZXMgYmVmb3JlIGlubmVySFRNTCByZXBsYWNlbWVudC5cbiAgICAvLyBMaWdodCBET00gY2hpbGRyZW4gcmVtYWluIGluIHRoZSBob3N0IGVsZW1lbnQgYW5kIGF1dG9tYXRpY2FsbHlcbiAgICAvLyByZS1wcm9qZWN0IHRvIHRoZSBuZXcgPHNsb3Q+IC0gbm8gbWFudWFsIERPTSBtYW5pcHVsYXRpb24gbmVlZGVkLlxuICAgIC8vIFRoZSBwcmV2aW91cyBhcHByb2FjaCAocmVwbGFjZUNoaWxkcmVuKSBpbmNvcnJlY3RseSBtb3ZlZCBsaWdodCBET01cbiAgICAvLyBjaGlsZHJlbiBpbnRvIHRoZSBzaGFkb3cgcm9vdCwgYnJlYWtpbmcgc2xvdCBwcm9qZWN0aW9uLlxuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVTdGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2ludGVybmFscz8uc3RhdGVzKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKSB7XG4gICAgICB0aGlzLl9pbnRlcm5hbHMuc3RhdGVzLmRlbGV0ZSgnZW5hYmxlZCcpO1xuICAgICAgdGhpcy5faW50ZXJuYWxzLnN0YXRlcy5hZGQoJ2Rpc2FibGVkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2ludGVybmFscy5zdGF0ZXMuZGVsZXRlKCdkaXNhYmxlZCcpO1xuICAgICAgdGhpcy5faW50ZXJuYWxzLnN0YXRlcy5hZGQoJ2VuYWJsZWQnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVDbGljayhfZTogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdvcGVuLWNsaWNrJywgeyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSB9KSk7XG4gIH1cblxuICBwcml2YXRlIF9lc2NBdHRyID0gZXNjYXBlQXR0cjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgT3BlbkJ1dHRvbjtcblxuLy8gR3VhcmQ6IGlkZW1wb3RlbnQgYWNyb3NzIFNTUiBwYXRoc1xuaWYgKHR5cGVvZiBjdXN0b21FbGVtZW50cyAhPT0gJ3VuZGVmaW5lZCcgJiYgIWN1c3RvbUVsZW1lbnRzLmdldCh0YWdOYW1lKSkge1xuICBjdXN0b21FbGVtZW50cy5kZWZpbmUodGFnTmFtZSwgT3BlbkJ1dHRvbik7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdUNBQXVDLEdBQ3ZDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW9CQyxHQUVELFNBQVMsV0FBVyxRQUFRLHVCQUF1QjtBQUNuRCxTQUFTLFVBQVUsUUFBNkIsZ0NBQWdDO0FBQ2hGLFNBQVMsVUFBVSxRQUFRLG9CQUFvQjtBQUUvQyxPQUFPLE1BQU0sVUFBVSxjQUFjO0FBRXJDLE1BQU0sUUFBd0IsSUFBSTtBQUNsQyxNQUFNLFdBQVcsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5R25CLENBQUM7QUFFRCxPQUFPLE1BQU0sbUJBQW1CO0VBQzlCLE9BQWdCLFNBQVM7SUFBQztHQUFNLENBQUM7RUFDakMsT0FBZ0IsaUJBQWlCLEtBQUs7RUFDdEMsT0FBZ0IsaUJBQWlCLEtBQUs7RUFDdEMsT0FBZ0IscUJBQXFCO0lBQUM7SUFBVztJQUFRO0lBQVk7SUFBUTtJQUFVO0dBQU8sQ0FBQztFQUV0RixTQUEwRDtJQUNqRSxNQUFNLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjO0lBQzFDLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVc7SUFDdkMsTUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLENB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
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/** @jsxImportSource @openelement/core */ /**
|
|
2
|
+
* @openelement/ui - OpenCallout Component
|
|
3
|
+
*
|
|
4
|
+
* Callout/notice box for inline documentation alerts.
|
|
5
|
+
* Supports 4 types: info, warning, danger, tip.
|
|
6
|
+
* All colors use semantic tokens and respond to theme changes.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* ```html
|
|
10
|
+
* <open-callout type="info" label="Note">
|
|
11
|
+
* This is an informational callout.
|
|
12
|
+
* </open-callout>
|
|
13
|
+
* ```
|
|
14
|
+
*/ import { OpenElement } from '@openelement/element';
|
|
15
|
+
import { type StyleSheetLike } from '@openelement/core/style-sheet';
|
|
16
|
+
export declare const tagName: 'open-callout';
|
|
17
|
+
declare const sheet: StyleSheetLike;
|
|
18
|
+
export declare class OpenCallout extends OpenElement {
|
|
19
|
+
static override styles: [];
|
|
20
|
+
static override observedAttributes: [string, string];
|
|
21
|
+
override render(): ReturnType<typeof OpenElement.prototype.render>;
|
|
22
|
+
override attributeChangedCallback(_name: string, old: string | null, val: string | null): void;
|
|
23
|
+
private _syncDOM: any;
|
|
24
|
+
private _esc: any;
|
|
25
|
+
}
|
|
26
|
+
export default OpenCallout;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/** @jsxImportSource @openelement/core */ /**
|
|
2
|
+
* @openelement/ui - OpenCallout Component
|
|
3
|
+
*
|
|
4
|
+
* Callout/notice box for inline documentation alerts.
|
|
5
|
+
* Supports 4 types: info, warning, danger, tip.
|
|
6
|
+
* All colors use semantic tokens and respond to theme changes.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* ```html
|
|
10
|
+
* <open-callout type="info" label="Note">
|
|
11
|
+
* This is an informational callout.
|
|
12
|
+
* </open-callout>
|
|
13
|
+
* ```
|
|
14
|
+
*/ import { OpenElement } from '@openelement/element';
|
|
15
|
+
import { StyleSheet } from '@openelement/core/style-sheet';
|
|
16
|
+
import { escapeHtml } from '@openelement/core';
|
|
17
|
+
export const tagName = 'open-callout';
|
|
18
|
+
const TYPE_CONFIG = {
|
|
19
|
+
info: {
|
|
20
|
+
icon: '\u2139\uFE0F',
|
|
21
|
+
cls: 'callout--info'
|
|
22
|
+
},
|
|
23
|
+
warning: {
|
|
24
|
+
icon: '\u26A0',
|
|
25
|
+
cls: 'callout--warn'
|
|
26
|
+
},
|
|
27
|
+
danger: {
|
|
28
|
+
icon: '\u2715',
|
|
29
|
+
cls: 'callout--danger'
|
|
30
|
+
},
|
|
31
|
+
tip: {
|
|
32
|
+
icon: '\u2713',
|
|
33
|
+
cls: 'callout--tip'
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
const sheet = new StyleSheet();
|
|
37
|
+
sheet.replaceSync(`
|
|
38
|
+
:host { display: block; }
|
|
39
|
+
.callout {
|
|
40
|
+
padding: var(--size-3) var(--size-4);
|
|
41
|
+
margin: var(--size-3) 0;
|
|
42
|
+
border-left: var(--border-size-2) solid var(--brand);
|
|
43
|
+
background: var(--brand-subtle);
|
|
44
|
+
border-radius: 0 var(--radius-2) var(--radius-2) 0;
|
|
45
|
+
}
|
|
46
|
+
.callout--warn { border-left-color: var(--warning); background: var(--warning-subtle); }
|
|
47
|
+
.callout--danger { border-left-color: var(--error); background: var(--error-subtle); }
|
|
48
|
+
.callout--tip { border-left-color: var(--success); background: var(--success-subtle); }
|
|
49
|
+
:host([data-theme="light"]) .callout--warn { background: rgba(245,158,11,0.06); }
|
|
50
|
+
:host([data-theme="light"]) .callout--danger { background: rgba(239,68,68,0.06); }
|
|
51
|
+
:host([data-theme="light"]) .callout--tip { background: rgba(34,197,94,0.06); }
|
|
52
|
+
.callout-header {
|
|
53
|
+
display: flex; align-items: center; gap: var(--size-1); margin-bottom: var(--size-1);
|
|
54
|
+
}
|
|
55
|
+
.callout-icon { font-size: var(--font-size-0); line-height: 1; flex-shrink: 0; }
|
|
56
|
+
.callout-title {
|
|
57
|
+
font-size: var(--font-size-0); font-weight: var(--font-weight-6); color: var(--text-primary);
|
|
58
|
+
}
|
|
59
|
+
.callout-body {
|
|
60
|
+
font-size: var(--font-size-1); line-height: var(--font-lineheight-4); color: var(--text-secondary);
|
|
61
|
+
}
|
|
62
|
+
.callout-body ::slotted(p) { margin: 0; }
|
|
63
|
+
`);
|
|
64
|
+
export class OpenCallout extends OpenElement {
|
|
65
|
+
static styles = [
|
|
66
|
+
sheet
|
|
67
|
+
];
|
|
68
|
+
static observedAttributes = [
|
|
69
|
+
'type',
|
|
70
|
+
'label'
|
|
71
|
+
];
|
|
72
|
+
render() {
|
|
73
|
+
const type = this.getAttribute('type') || 'info';
|
|
74
|
+
const label = this.getAttribute('label') || '';
|
|
75
|
+
const config = TYPE_CONFIG[type] || TYPE_CONFIG.info;
|
|
76
|
+
return <div className={`callout ${config.cls}`} part='container'>
|
|
77
|
+
{label && <div className='callout-header'>
|
|
78
|
+
<span className='callout-icon' part='icon'>{config.icon}</span>
|
|
79
|
+
<span className='callout-title'>{this._esc(label)}</span>
|
|
80
|
+
</div>}
|
|
81
|
+
<div className='callout-body' part='content'>
|
|
82
|
+
<slot></slot>
|
|
83
|
+
</div>
|
|
84
|
+
</div>;
|
|
85
|
+
}
|
|
86
|
+
attributeChangedCallback(_name, old, val) {
|
|
87
|
+
if (old === val) return;
|
|
88
|
+
this._syncDOM();
|
|
89
|
+
}
|
|
90
|
+
_syncDOM() {
|
|
91
|
+
this.update();
|
|
92
|
+
}
|
|
93
|
+
_esc = escapeHtml;
|
|
94
|
+
}
|
|
95
|
+
export default OpenCallout;
|
|
96
|
+
if (typeof customElements !== 'undefined' && !customElements.get(tagName)) {
|
|
97
|
+
customElements.define(tagName, OpenCallout);
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy91aS9zcmMvb3Blbi1jYWxsb3V0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQGpzeEltcG9ydFNvdXJjZSBAb3BlbmVsZW1lbnQvY29yZSAqL1xuLyoqXG4gKiBAb3BlbmVsZW1lbnQvdWkgLSBPcGVuQ2FsbG91dCBDb21wb25lbnRcbiAqXG4gKiBDYWxsb3V0L25vdGljZSBib3ggZm9yIGlubGluZSBkb2N1bWVudGF0aW9uIGFsZXJ0cy5cbiAqIFN1cHBvcnRzIDQgdHlwZXM6IGluZm8sIHdhcm5pbmcsIGRhbmdlciwgdGlwLlxuICogQWxsIGNvbG9ycyB1c2Ugc2VtYW50aWMgdG9rZW5zIGFuZCByZXNwb25kIHRvIHRoZW1lIGNoYW5nZXMuXG4gKlxuICogVXNhZ2U6XG4gKiBgYGBodG1sXG4gKiA8b3Blbi1jYWxsb3V0IHR5cGU9XCJpbmZvXCIgbGFiZWw9XCJOb3RlXCI+XG4gKiAgIFRoaXMgaXMgYW4gaW5mb3JtYXRpb25hbCBjYWxsb3V0LlxuICogPC9vcGVuLWNhbGxvdXQ+XG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgeyBPcGVuRWxlbWVudCB9IGZyb20gJ0BvcGVuZWxlbWVudC9lbGVtZW50JztcbmltcG9ydCB7IFN0eWxlU2hlZXQsIHR5cGUgU3R5bGVTaGVldExpa2UgfSBmcm9tICdAb3BlbmVsZW1lbnQvY29yZS9zdHlsZS1zaGVldCc7XG5pbXBvcnQgeyBlc2NhcGVIdG1sIH0gZnJvbSAnQG9wZW5lbGVtZW50L2NvcmUnO1xuXG5leHBvcnQgY29uc3QgdGFnTmFtZSA9ICdvcGVuLWNhbGxvdXQnO1xuXG5jb25zdCBUWVBFX0NPTkZJRzogUmVjb3JkPHN0cmluZywgeyBpY29uOiBzdHJpbmc7IGNsczogc3RyaW5nIH0+ID0ge1xuICBpbmZvOiB7IGljb246ICdcXHUyMTM5XFx1RkUwRicsIGNsczogJ2NhbGxvdXQtLWluZm8nIH0sXG4gIHdhcm5pbmc6IHsgaWNvbjogJ1xcdTI2QTAnLCBjbHM6ICdjYWxsb3V0LS13YXJuJyB9LFxuICBkYW5nZXI6IHsgaWNvbjogJ1xcdTI3MTUnLCBjbHM6ICdjYWxsb3V0LS1kYW5nZXInIH0sXG4gIHRpcDogeyBpY29uOiAnXFx1MjcxMycsIGNsczogJ2NhbGxvdXQtLXRpcCcgfSxcbn07XG5cbmNvbnN0IHNoZWV0OiBTdHlsZVNoZWV0TGlrZSA9IG5ldyBTdHlsZVNoZWV0KCk7XG5zaGVldC5yZXBsYWNlU3luYyhgXG4gIDpob3N0IHsgZGlzcGxheTogYmxvY2s7IH1cbiAgLmNhbGxvdXQge1xuICAgIHBhZGRpbmc6IHZhcigtLXNpemUtMykgdmFyKC0tc2l6ZS00KTtcbiAgICBtYXJnaW46IHZhcigtLXNpemUtMykgMDtcbiAgICBib3JkZXItbGVmdDogdmFyKC0tYm9yZGVyLXNpemUtMikgc29saWQgdmFyKC0tYnJhbmQpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWJyYW5kLXN1YnRsZSk7XG4gICAgYm9yZGVyLXJhZGl1czogMCB2YXIoLS1yYWRpdXMtMikgdmFyKC0tcmFkaXVzLTIpIDA7XG4gIH1cbiAgLmNhbGxvdXQtLXdhcm4geyBib3JkZXItbGVmdC1jb2xvcjogdmFyKC0td2FybmluZyk7IGJhY2tncm91bmQ6IHZhcigtLXdhcm5pbmctc3VidGxlKTsgfVxuICAuY2FsbG91dC0tZGFuZ2VyIHsgYm9yZGVyLWxlZnQtY29sb3I6IHZhcigtLWVycm9yKTsgYmFja2dyb3VuZDogdmFyKC0tZXJyb3Itc3VidGxlKTsgfVxuICAuY2FsbG91dC0tdGlwIHsgYm9yZGVyLWxlZnQtY29sb3I6IHZhcigtLXN1Y2Nlc3MpOyBiYWNrZ3JvdW5kOiB2YXIoLS1zdWNjZXNzLXN1YnRsZSk7IH1cbiAgOmhvc3QoW2RhdGEtdGhlbWU9XCJsaWdodFwiXSkgLmNhbGxvdXQtLXdhcm4geyBiYWNrZ3JvdW5kOiByZ2JhKDI0NSwxNTgsMTEsMC4wNik7IH1cbiAgOmhvc3QoW2RhdGEtdGhlbWU9XCJsaWdodFwiXSkgLmNhbGxvdXQtLWRhbmdlciB7IGJhY2tncm91bmQ6IHJnYmEoMjM5LDY4LDY4LDAuMDYpOyB9XG4gIDpob3N0KFtkYXRhLXRoZW1lPVwibGlnaHRcIl0pIC5jYWxsb3V0LS10aXAgeyBiYWNrZ3JvdW5kOiByZ2JhKDM0LDE5Nyw5NCwwLjA2KTsgfVxuICAuY2FsbG91dC1oZWFkZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogdmFyKC0tc2l6ZS0xKTsgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS0xKTtcbiAgfVxuICAuY2FsbG91dC1pY29uIHsgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtMCk7IGxpbmUtaGVpZ2h0OiAxOyBmbGV4LXNocmluazogMDsgfVxuICAuY2FsbG91dC10aXRsZSB7XG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtMCk7IGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC02KTsgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7XG4gIH1cbiAgLmNhbGxvdXQtYm9keSB7XG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtMSk7IGxpbmUtaGVpZ2h0OiB2YXIoLS1mb250LWxpbmVoZWlnaHQtNCk7IGNvbG9yOiB2YXIoLS10ZXh0LXNlY29uZGFyeSk7XG4gIH1cbiAgLmNhbGxvdXQtYm9keSA6OnNsb3R0ZWQocCkgeyBtYXJnaW46IDA7IH1cbmApO1xuXG5leHBvcnQgY2xhc3MgT3BlbkNhbGxvdXQgZXh0ZW5kcyBPcGVuRWxlbWVudCB7XG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbc2hlZXRdO1xuICBzdGF0aWMgb3ZlcnJpZGUgb2JzZXJ2ZWRBdHRyaWJ1dGVzID0gWyd0eXBlJywgJ2xhYmVsJ107XG5cbiAgb3ZlcnJpZGUgcmVuZGVyKCk6IFJldHVyblR5cGU8dHlwZW9mIE9wZW5FbGVtZW50LnByb3RvdHlwZS5yZW5kZXI+IHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSB8fCAnaW5mbyc7XG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLmdldEF0dHJpYnV0ZSgnbGFiZWwnKSB8fCAnJztcbiAgICBjb25zdCBjb25maWcgPSBUWVBFX0NPTkZJR1t0eXBlXSB8fCBUWVBFX0NPTkZJRy5pbmZvO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgY2FsbG91dCAke2NvbmZpZy5jbHN9YH0gcGFydD0nY29udGFpbmVyJz5cbiAgICAgICAge2xhYmVsICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nY2FsbG91dC1oZWFkZXInPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSdjYWxsb3V0LWljb24nIHBhcnQ9J2ljb24nPntjb25maWcuaWNvbn08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9J2NhbGxvdXQtdGl0bGUnPnt0aGlzLl9lc2MobGFiZWwpfTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NhbGxvdXQtYm9keScgcGFydD0nY29udGVudCc+XG4gICAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBvdmVycmlkZSBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soX25hbWU6IHN0cmluZywgb2xkOiBzdHJpbmcgfCBudWxsLCB2YWw6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAob2xkID09PSB2YWwpIHJldHVybjtcbiAgICB0aGlzLl9zeW5jRE9NKCk7XG4gIH1cblxuICBwcml2YXRlIF9zeW5jRE9NKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cbiAgcHJpdmF0ZSBfZXNjID0gZXNjYXBlSHRtbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgT3BlbkNhbGxvdXQ7XG5cbmlmICh0eXBlb2YgY3VzdG9tRWxlbWVudHMgIT09ICd1bmRlZmluZWQnICYmICFjdXN0b21FbGVtZW50cy5nZXQodGFnTmFtZSkpIHtcbiAgY3VzdG9tRWxlbWVudHMuZGVmaW5lKHRhZ05hbWUsIE9wZW5DYWxsb3V0KTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1Q0FBdUMsR0FDdkM7Ozs7Ozs7Ozs7Ozs7Q0FhQyxHQUVELFNBQVMsV0FBVyxRQUFRLHVCQUF1QjtBQUNuRCxTQUFTLFVBQVUsUUFBNkIsZ0NBQWdDO0FBQ2hGLFNBQVMsVUFBVSxRQUFRLG9CQUFvQjtBQUUvQyxPQUFPLE1BQU0sVUFBVSxlQUFlO0FBRXRDLE1BQU0sY0FBNkQ7RUFDakUsTUFBTTtJQUFFLE1BQU07SUFBZ0IsS0FBSztFQUFnQjtFQUNuRCxTQUFTO0lBQUUsTUFBTTtJQUFVLEtBQUs7RUFBZ0I7RUFDaEQsUUFBUTtJQUFFLE1BQU07SUFBVSxLQUFLO0VBQWtCO0VBQ2pELEtBQUs7SUFBRSxNQUFNO0lBQVUsS0FBSztFQUFlO0FBQzdDO0FBRUEsTUFBTSxRQUF3QixJQUFJO0FBQ2xDLE1BQU0sV0FBVyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMEJuQixDQUFDO0FBRUQsT0FBTyxNQUFNLG9CQUFvQjtFQUMvQixPQUFnQixTQUFTO0lBQUM7R0FBTSxDQUFDO0VBQ2pDLE9BQWdCLHFCQUFxQjtJQUFDO0lBQVE7R0FBUSxDQUFDO0VBRTlDLFNBQTBEO0lBQ2pFLE1BQU0sT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVc7SUFDMUMsTUFBTSxRQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWTtJQUM1QyxNQUFNLFNBQVMsV0FBVyxDQUFDLEtBQUssSUFBSSxZQUFZLElBQUk7SUFFcEQsUUFDRyxJQUFJLFdBQVcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRSxLQUFLLFlBQVk7UUFDeEQsQ0FBQyxVQUNFLElBQUksVUFBVSxpQkFBaUI7WUFDOUIsQ0FBQyxLQUFLLFVBQVUsZUFBZSxLQUFLLFFBQVEsT0FBTyxJQUFJLEdBQUcsS0FBSztZQUMvRCxDQUFDLEtBQUssVUFBVSxpQkFBaUIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUs7VUFDM0QsRUFBRSxLQUNGO1FBQ0YsQ0FBQyxJQUFJLFVBQVUsZUFBZSxLQUFLLFVBQVU7VUFDM0MsQ0FBQyxPQUFPLEtBQUs7UUFDZixFQUFFLElBQUk7TUFDUixFQUFFO0VBRU47RUFFUyx5QkFBeUIsS0FBYSxFQUFFLEdBQWtCLEVBQUUsR0FBa0IsRUFBUTtJQUM3RixJQUFJLFFBQVEsS0FBSztJQUNqQixJQUFJLENBQUMsUUFBUTtFQUNmO0VBRVEsV0FBaUI7SUFDdkIsSUFBSSxDQUFDLE1BQU07RUFDYjtFQUNRLE9BQU8sV0FBVztBQUM1QjtBQUVBLGVBQWUsWUFBWTtBQUUzQixJQUFJLE9BQU8sbUJBQW1CLGVBQWUsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxVQUFVO0VBQ3pFLGVBQWUsTUFBTSxDQUFDLFNBQVM7QUFDakMifQ==
|
|
@@ -0,0 +1,33 @@
|
|
|
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 { type StyleSheetLike } from '@openelement/core/style-sheet';
|
|
26
|
+
export declare const tagName: 'open-card';
|
|
27
|
+
declare const sheet: StyleSheetLike;
|
|
28
|
+
export declare class OpenCard extends OpenElement {
|
|
29
|
+
static override styles: [];
|
|
30
|
+
static override observedAttributes: [string];
|
|
31
|
+
override render(): ReturnType<typeof OpenElement.prototype.render>;
|
|
32
|
+
}
|
|
33
|
+
export default OpenCard;
|