@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/index.d.ts
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @openelement/ui - openElement UI Component Library
|
|
3
|
+
*
|
|
4
|
+
* Swiss International Style: Pure B&W, minimal, typography-driven.
|
|
5
|
+
* Zero Lit dependency - built on DsdElement (native HTMLElement).
|
|
6
|
+
*
|
|
7
|
+
* Components:
|
|
8
|
+
* - open-button: Button with variants (default, primary, ghost, accent)
|
|
9
|
+
* - open-card: Card container with optional header/footer
|
|
10
|
+
* - open-input: Input field with label and error states
|
|
11
|
+
* - open-code-block: Code block with copy button
|
|
12
|
+
* - open-badge: Open Props status badge
|
|
13
|
+
* - open-brand-mark: Aperture O brand mark
|
|
14
|
+
* - open-lab-panel: Standards-lab artifact/spec panel
|
|
15
|
+
* - open-lab-stage: Kinetic standards-lab hero primitive
|
|
16
|
+
* - open-standards-visual: Product-art standards diagrams
|
|
17
|
+
* - open-layout: App layout with header, sidebar, footer
|
|
18
|
+
* - open-theme-toggle: Theme toggle Island (Dark/Light)
|
|
19
|
+
* - open-dialog: Dialog component using native <dialog>
|
|
20
|
+
* - open-callout: Callout/notice box (info/warning/danger/tip)
|
|
21
|
+
* - open-step-card: Step card with numbered indicator
|
|
22
|
+
* - open-dropdown: Dropdown toggle with trigger slot and content slot
|
|
23
|
+
* - open-modal: Modal dialog using signal-driven open attribute
|
|
24
|
+
* - open-tabs: Tab interface with tab and panel slots
|
|
25
|
+
*
|
|
26
|
+
* Usage:
|
|
27
|
+
* ```ts
|
|
28
|
+
* // Import all components
|
|
29
|
+
* import '@openelement/ui';
|
|
30
|
+
*
|
|
31
|
+
* // Or import specific components
|
|
32
|
+
* import { OpenButton } from '@openelement/ui/open-button';
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* @module @openelement/ui
|
|
36
|
+
*/ export { openPropsTokenSheet } from "./open-props-tokens.js";
|
|
37
|
+
export { daisyClassSheet } from "./daisy-classes.js";
|
|
38
|
+
export { OpenButton, tagName as openButtonTagName } from "./open-button.js";
|
|
39
|
+
export { OpenCard, tagName as openCardTagName } from "./open-card.js";
|
|
40
|
+
export { OpenInput, tagName as openInputTagName } from "./open-input.js";
|
|
41
|
+
export { OpenCodeBlock, tagName as openCodeBlockTagName } from "./open-code-block.js";
|
|
42
|
+
export { OpenBadge, tagName as openBadgeTagName } from "./open-badge.js";
|
|
43
|
+
export { OpenBrandMark, tagName as openBrandMarkTagName } from "./open-brand-mark.js";
|
|
44
|
+
export { OpenLabPanel, tagName as openLabPanelTagName } from "./open-lab-panel.js";
|
|
45
|
+
export { OpenLabStage, tagName as openLabStageTagName } from "./open-lab-stage.js";
|
|
46
|
+
export { OpenStandardsVisual, tagName as openStandardsVisualTagName } from "./open-standards-visual.js";
|
|
47
|
+
export { OpenLayout, tagName as openLayoutTagName } from "./open-layout.js";
|
|
48
|
+
export type { HeaderNavLink, NavItem, NavSection } from "./open-layout.js";
|
|
49
|
+
export { OpenThemeToggle, tagName as openThemeToggleTagName } from "./open-theme-toggle.js";
|
|
50
|
+
export { default as OpenHeroPing, tagName as openHeroPingTagName } from "./open-hero-ping.js";
|
|
51
|
+
export { OpenDialog, tagName as openDialogTagName } from "./open-dialog.js";
|
|
52
|
+
export { OpenCallout, tagName as openCalloutTagName } from "./open-callout.js";
|
|
53
|
+
export { OpenStepCard, tagName as openStepCardTagName } from "./open-step-card.js";
|
|
54
|
+
export { OpenDropdown, tagName as openDropdownTagName } from "./open-dropdown.js";
|
|
55
|
+
export { OpenModal, tagName as openModalTagName } from "./open-modal.js";
|
|
56
|
+
export { OpenTabs, tagName as openTabsTagName } from "./open-tabs.js";
|
|
57
|
+
export { manifest } from "./manifest.js";
|
package/src/index.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @openelement/ui - openElement UI Component Library
|
|
3
|
+
*
|
|
4
|
+
* Swiss International Style: Pure B&W, minimal, typography-driven.
|
|
5
|
+
* Zero Lit dependency - built on DsdElement (native HTMLElement).
|
|
6
|
+
*
|
|
7
|
+
* Components:
|
|
8
|
+
* - open-button: Button with variants (default, primary, ghost, accent)
|
|
9
|
+
* - open-card: Card container with optional header/footer
|
|
10
|
+
* - open-input: Input field with label and error states
|
|
11
|
+
* - open-code-block: Code block with copy button
|
|
12
|
+
* - open-badge: Open Props status badge
|
|
13
|
+
* - open-brand-mark: Aperture O brand mark
|
|
14
|
+
* - open-lab-panel: Standards-lab artifact/spec panel
|
|
15
|
+
* - open-lab-stage: Kinetic standards-lab hero primitive
|
|
16
|
+
* - open-standards-visual: Product-art standards diagrams
|
|
17
|
+
* - open-layout: App layout with header, sidebar, footer
|
|
18
|
+
* - open-theme-toggle: Theme toggle Island (Dark/Light)
|
|
19
|
+
* - open-dialog: Dialog component using native <dialog>
|
|
20
|
+
* - open-callout: Callout/notice box (info/warning/danger/tip)
|
|
21
|
+
* - open-step-card: Step card with numbered indicator
|
|
22
|
+
* - open-dropdown: Dropdown toggle with trigger slot and content slot
|
|
23
|
+
* - open-modal: Modal dialog using signal-driven open attribute
|
|
24
|
+
* - open-tabs: Tab interface with tab and panel slots
|
|
25
|
+
*
|
|
26
|
+
* Usage:
|
|
27
|
+
* ```ts
|
|
28
|
+
* // Import all components
|
|
29
|
+
* import '@openelement/ui';
|
|
30
|
+
*
|
|
31
|
+
* // Or import specific components
|
|
32
|
+
* import { OpenButton } from '@openelement/ui/open-button';
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* @module @openelement/ui
|
|
36
|
+
*/ // Design tokens (CSSStyleSheet, zero Lit dependency)
|
|
37
|
+
export { openPropsTokenSheet } from './open-props-tokens.js';
|
|
38
|
+
// daisyUI forked class sheet (Pure CSS, Open Props tokens)
|
|
39
|
+
export { daisyClassSheet } from './daisy-classes.js';
|
|
40
|
+
// Components
|
|
41
|
+
export { OpenButton, tagName as openButtonTagName } from './open-button.js';
|
|
42
|
+
export { OpenCard, tagName as openCardTagName } from './open-card.js';
|
|
43
|
+
export { OpenInput, tagName as openInputTagName } from './open-input.js';
|
|
44
|
+
export { OpenCodeBlock, tagName as openCodeBlockTagName } from './open-code-block.js';
|
|
45
|
+
export { OpenBadge, tagName as openBadgeTagName } from './open-badge.js';
|
|
46
|
+
export { OpenBrandMark, tagName as openBrandMarkTagName } from './open-brand-mark.js';
|
|
47
|
+
export { OpenLabPanel, tagName as openLabPanelTagName } from './open-lab-panel.js';
|
|
48
|
+
export { OpenLabStage, tagName as openLabStageTagName } from './open-lab-stage.js';
|
|
49
|
+
export { OpenStandardsVisual, tagName as openStandardsVisualTagName } from './open-standards-visual.js';
|
|
50
|
+
export { OpenLayout, tagName as openLayoutTagName } from './open-layout.js';
|
|
51
|
+
export { OpenThemeToggle, tagName as openThemeToggleTagName } from './open-theme-toggle.js';
|
|
52
|
+
export { default as OpenHeroPing, tagName as openHeroPingTagName } from './open-hero-ping.js';
|
|
53
|
+
export { OpenDialog, tagName as openDialogTagName } from './open-dialog.js';
|
|
54
|
+
export { OpenCallout, tagName as openCalloutTagName } from './open-callout.js';
|
|
55
|
+
export { OpenStepCard, tagName as openStepCardTagName } from './open-step-card.js';
|
|
56
|
+
export { OpenDropdown, tagName as openDropdownTagName } from './open-dropdown.js';
|
|
57
|
+
export { OpenModal, tagName as openModalTagName } from './open-modal.js';
|
|
58
|
+
export { OpenTabs, tagName as openTabsTagName } from './open-tabs.js';
|
|
59
|
+
// Package manifest (WC Package Protocol)
|
|
60
|
+
// Consumers (adapter-vite) read manifest.declarations to derive island metadata.
|
|
61
|
+
export { manifest } from './manifest.js';
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy91aS9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAb3BlbmVsZW1lbnQvdWkgLSBvcGVuRWxlbWVudCBVSSBDb21wb25lbnQgTGlicmFyeVxuICpcbiAqIFN3aXNzIEludGVybmF0aW9uYWwgU3R5bGU6IFB1cmUgQiZXLCBtaW5pbWFsLCB0eXBvZ3JhcGh5LWRyaXZlbi5cbiAqIFplcm8gTGl0IGRlcGVuZGVuY3kgLSBidWlsdCBvbiBEc2RFbGVtZW50IChuYXRpdmUgSFRNTEVsZW1lbnQpLlxuICpcbiAqIENvbXBvbmVudHM6XG4gKiAtIG9wZW4tYnV0dG9uOiBCdXR0b24gd2l0aCB2YXJpYW50cyAoZGVmYXVsdCwgcHJpbWFyeSwgZ2hvc3QsIGFjY2VudClcbiAqIC0gb3Blbi1jYXJkOiBDYXJkIGNvbnRhaW5lciB3aXRoIG9wdGlvbmFsIGhlYWRlci9mb290ZXJcbiAqIC0gb3Blbi1pbnB1dDogSW5wdXQgZmllbGQgd2l0aCBsYWJlbCBhbmQgZXJyb3Igc3RhdGVzXG4gKiAtIG9wZW4tY29kZS1ibG9jazogQ29kZSBibG9jayB3aXRoIGNvcHkgYnV0dG9uXG4gKiAtIG9wZW4tYmFkZ2U6IE9wZW4gUHJvcHMgc3RhdHVzIGJhZGdlXG4gKiAtIG9wZW4tYnJhbmQtbWFyazogQXBlcnR1cmUgTyBicmFuZCBtYXJrXG4gKiAtIG9wZW4tbGFiLXBhbmVsOiBTdGFuZGFyZHMtbGFiIGFydGlmYWN0L3NwZWMgcGFuZWxcbiAqIC0gb3Blbi1sYWItc3RhZ2U6IEtpbmV0aWMgc3RhbmRhcmRzLWxhYiBoZXJvIHByaW1pdGl2ZVxuICogLSBvcGVuLXN0YW5kYXJkcy12aXN1YWw6IFByb2R1Y3QtYXJ0IHN0YW5kYXJkcyBkaWFncmFtc1xuICogLSBvcGVuLWxheW91dDogQXBwIGxheW91dCB3aXRoIGhlYWRlciwgc2lkZWJhciwgZm9vdGVyXG4gKiAtIG9wZW4tdGhlbWUtdG9nZ2xlOiBUaGVtZSB0b2dnbGUgSXNsYW5kIChEYXJrL0xpZ2h0KVxuICogLSBvcGVuLWRpYWxvZzogRGlhbG9nIGNvbXBvbmVudCB1c2luZyBuYXRpdmUgPGRpYWxvZz5cbiAqIC0gb3Blbi1jYWxsb3V0OiBDYWxsb3V0L25vdGljZSBib3ggKGluZm8vd2FybmluZy9kYW5nZXIvdGlwKVxuICogLSBvcGVuLXN0ZXAtY2FyZDogU3RlcCBjYXJkIHdpdGggbnVtYmVyZWQgaW5kaWNhdG9yXG4gKiAtIG9wZW4tZHJvcGRvd246IERyb3Bkb3duIHRvZ2dsZSB3aXRoIHRyaWdnZXIgc2xvdCBhbmQgY29udGVudCBzbG90XG4gKiAtIG9wZW4tbW9kYWw6IE1vZGFsIGRpYWxvZyB1c2luZyBzaWduYWwtZHJpdmVuIG9wZW4gYXR0cmlidXRlXG4gKiAtIG9wZW4tdGFiczogVGFiIGludGVyZmFjZSB3aXRoIHRhYiBhbmQgcGFuZWwgc2xvdHNcbiAqXG4gKiBVc2FnZTpcbiAqIGBgYHRzXG4gKiAvLyBJbXBvcnQgYWxsIGNvbXBvbmVudHNcbiAqIGltcG9ydCAnQG9wZW5lbGVtZW50L3VpJztcbiAqXG4gKiAvLyBPciBpbXBvcnQgc3BlY2lmaWMgY29tcG9uZW50c1xuICogaW1wb3J0IHsgT3BlbkJ1dHRvbiB9IGZyb20gJ0BvcGVuZWxlbWVudC91aS9vcGVuLWJ1dHRvbic7XG4gKiBgYGBcbiAqXG4gKiBAbW9kdWxlIEBvcGVuZWxlbWVudC91aVxuICovXG5cbi8vIERlc2lnbiB0b2tlbnMgKENTU1N0eWxlU2hlZXQsIHplcm8gTGl0IGRlcGVuZGVuY3kpXG5leHBvcnQgeyBvcGVuUHJvcHNUb2tlblNoZWV0IH0gZnJvbSAnLi9vcGVuLXByb3BzLXRva2Vucy5qcyc7XG5cbi8vIGRhaXN5VUkgZm9ya2VkIGNsYXNzIHNoZWV0IChQdXJlIENTUywgT3BlbiBQcm9wcyB0b2tlbnMpXG5leHBvcnQgeyBkYWlzeUNsYXNzU2hlZXQgfSBmcm9tICcuL2RhaXN5LWNsYXNzZXMuanMnO1xuXG4vLyBDb21wb25lbnRzXG5leHBvcnQgeyBPcGVuQnV0dG9uLCB0YWdOYW1lIGFzIG9wZW5CdXR0b25UYWdOYW1lIH0gZnJvbSAnLi9vcGVuLWJ1dHRvbi5qcyc7XG5leHBvcnQgeyBPcGVuQ2FyZCwgdGFnTmFtZSBhcyBvcGVuQ2FyZFRhZ05hbWUgfSBmcm9tICcuL29wZW4tY2FyZC5qcyc7XG5leHBvcnQgeyBPcGVuSW5wdXQsIHRhZ05hbWUgYXMgb3BlbklucHV0VGFnTmFtZSB9IGZyb20gJy4vb3Blbi1pbnB1dC5qcyc7XG5leHBvcnQgeyBPcGVuQ29kZUJsb2NrLCB0YWdOYW1lIGFzIG9wZW5Db2RlQmxvY2tUYWdOYW1lIH0gZnJvbSAnLi9vcGVuLWNvZGUtYmxvY2suanMnO1xuZXhwb3J0IHsgT3BlbkJhZGdlLCB0YWdOYW1lIGFzIG9wZW5CYWRnZVRhZ05hbWUgfSBmcm9tICcuL29wZW4tYmFkZ2UuanMnO1xuZXhwb3J0IHsgT3BlbkJyYW5kTWFyaywgdGFnTmFtZSBhcyBvcGVuQnJhbmRNYXJrVGFnTmFtZSB9IGZyb20gJy4vb3Blbi1icmFuZC1tYXJrLmpzJztcbmV4cG9ydCB7IE9wZW5MYWJQYW5lbCwgdGFnTmFtZSBhcyBvcGVuTGFiUGFuZWxUYWdOYW1lIH0gZnJvbSAnLi9vcGVuLWxhYi1wYW5lbC5qcyc7XG5leHBvcnQgeyBPcGVuTGFiU3RhZ2UsIHRhZ05hbWUgYXMgb3BlbkxhYlN0YWdlVGFnTmFtZSB9IGZyb20gJy4vb3Blbi1sYWItc3RhZ2UuanMnO1xuZXhwb3J0IHtcbiAgT3BlblN0YW5kYXJkc1Zpc3VhbCxcbiAgdGFnTmFtZSBhcyBvcGVuU3RhbmRhcmRzVmlzdWFsVGFnTmFtZSxcbn0gZnJvbSAnLi9vcGVuLXN0YW5kYXJkcy12aXN1YWwuanMnO1xuZXhwb3J0IHsgT3BlbkxheW91dCwgdGFnTmFtZSBhcyBvcGVuTGF5b3V0VGFnTmFtZSB9IGZyb20gJy4vb3Blbi1sYXlvdXQuanMnO1xuZXhwb3J0IHR5cGUgeyBIZWFkZXJOYXZMaW5rLCBOYXZJdGVtLCBOYXZTZWN0aW9uIH0gZnJvbSAnLi9vcGVuLWxheW91dC5qcyc7XG5leHBvcnQgeyBPcGVuVGhlbWVUb2dnbGUsIHRhZ05hbWUgYXMgb3BlblRoZW1lVG9nZ2xlVGFnTmFtZSB9IGZyb20gJy4vb3Blbi10aGVtZS10b2dnbGUuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBPcGVuSGVyb1BpbmcsIHRhZ05hbWUgYXMgb3Blbkhlcm9QaW5nVGFnTmFtZSB9IGZyb20gJy4vb3Blbi1oZXJvLXBpbmcuanMnO1xuZXhwb3J0IHsgT3BlbkRpYWxvZywgdGFnTmFtZSBhcyBvcGVuRGlhbG9nVGFnTmFtZSB9IGZyb20gJy4vb3Blbi1kaWFsb2cuanMnO1xuZXhwb3J0IHsgT3BlbkNhbGxvdXQsIHRhZ05hbWUgYXMgb3BlbkNhbGxvdXRUYWdOYW1lIH0gZnJvbSAnLi9vcGVuLWNhbGxvdXQuanMnO1xuZXhwb3J0IHsgT3BlblN0ZXBDYXJkLCB0YWdOYW1lIGFzIG9wZW5TdGVwQ2FyZFRhZ05hbWUgfSBmcm9tICcuL29wZW4tc3RlcC1jYXJkLmpzJztcbmV4cG9ydCB7IE9wZW5Ecm9wZG93biwgdGFnTmFtZSBhcyBvcGVuRHJvcGRvd25UYWdOYW1lIH0gZnJvbSAnLi9vcGVuLWRyb3Bkb3duLmpzJztcbmV4cG9ydCB7IE9wZW5Nb2RhbCwgdGFnTmFtZSBhcyBvcGVuTW9kYWxUYWdOYW1lIH0gZnJvbSAnLi9vcGVuLW1vZGFsLmpzJztcbmV4cG9ydCB7IE9wZW5UYWJzLCB0YWdOYW1lIGFzIG9wZW5UYWJzVGFnTmFtZSB9IGZyb20gJy4vb3Blbi10YWJzLmpzJztcblxuLy8gUGFja2FnZSBtYW5pZmVzdCAoV0MgUGFja2FnZSBQcm90b2NvbClcbi8vIENvbnN1bWVycyAoYWRhcHRlci12aXRlKSByZWFkIG1hbmlmZXN0LmRlY2xhcmF0aW9ucyB0byBkZXJpdmUgaXNsYW5kIG1ldGFkYXRhLlxuZXhwb3J0IHsgbWFuaWZlc3QgfSBmcm9tICcuL21hbmlmZXN0LmpzJztcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FtQ0MsR0FFRCxxREFBcUQ7QUFDckQsU0FBUyxtQkFBbUIsUUFBUSx5QkFBeUI7QUFFN0QsMkRBQTJEO0FBQzNELFNBQVMsZUFBZSxRQUFRLHFCQUFxQjtBQUVyRCxhQUFhO0FBQ2IsU0FBUyxVQUFVLEVBQUUsV0FBVyxpQkFBaUIsUUFBUSxtQkFBbUI7QUFDNUUsU0FBUyxRQUFRLEVBQUUsV0FBVyxlQUFlLFFBQVEsaUJBQWlCO0FBQ3RFLFNBQVMsU0FBUyxFQUFFLFdBQVcsZ0JBQWdCLFFBQVEsa0JBQWtCO0FBQ3pFLFNBQVMsYUFBYSxFQUFFLFdBQVcsb0JBQW9CLFFBQVEsdUJBQXVCO0FBQ3RGLFNBQVMsU0FBUyxFQUFFLFdBQVcsZ0JBQWdCLFFBQVEsa0JBQWtCO0FBQ3pFLFNBQVMsYUFBYSxFQUFFLFdBQVcsb0JBQW9CLFFBQVEsdUJBQXVCO0FBQ3RGLFNBQVMsWUFBWSxFQUFFLFdBQVcsbUJBQW1CLFFBQVEsc0JBQXNCO0FBQ25GLFNBQVMsWUFBWSxFQUFFLFdBQVcsbUJBQW1CLFFBQVEsc0JBQXNCO0FBQ25GLFNBQ0UsbUJBQW1CLEVBQ25CLFdBQVcsMEJBQTBCLFFBQ2hDLDZCQUE2QjtBQUNwQyxTQUFTLFVBQVUsRUFBRSxXQUFXLGlCQUFpQixRQUFRLG1CQUFtQjtBQUU1RSxTQUFTLGVBQWUsRUFBRSxXQUFXLHNCQUFzQixRQUFRLHlCQUF5QjtBQUM1RixTQUFTLFdBQVcsWUFBWSxFQUFFLFdBQVcsbUJBQW1CLFFBQVEsc0JBQXNCO0FBQzlGLFNBQVMsVUFBVSxFQUFFLFdBQVcsaUJBQWlCLFFBQVEsbUJBQW1CO0FBQzVFLFNBQVMsV0FBVyxFQUFFLFdBQVcsa0JBQWtCLFFBQVEsb0JBQW9CO0FBQy9FLFNBQVMsWUFBWSxFQUFFLFdBQVcsbUJBQW1CLFFBQVEsc0JBQXNCO0FBQ25GLFNBQVMsWUFBWSxFQUFFLFdBQVcsbUJBQW1CLFFBQVEscUJBQXFCO0FBQ2xGLFNBQVMsU0FBUyxFQUFFLFdBQVcsZ0JBQWdCLFFBQVEsa0JBQWtCO0FBQ3pFLFNBQVMsUUFBUSxFQUFFLFdBQVcsZUFBZSxRQUFRLGlCQUFpQjtBQUV0RSx5Q0FBeUM7QUFDekMsaUZBQWlGO0FBQ2pGLFNBQVMsUUFBUSxRQUFRLGdCQUFnQiJ9
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @openelement/ui - Generated Package Manifest
|
|
3
|
+
*
|
|
4
|
+
* Scans component source files at runtime and builds a CEM-compatible
|
|
5
|
+
* OpenElementPackageManifest. Keeps the same export shape as the previous
|
|
6
|
+
* hand-written manifest so consumers continue to work.
|
|
7
|
+
*/ import type { OpenElementPackageManifest } from '@openelement/protocol/manifest';
|
|
8
|
+
export declare const manifest: OpenElementPackageManifest;
|
package/src/manifest.js
ADDED
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import { Deno } from "@deno/shim-deno";
|
|
2
|
+
const pkgVersion = '0.40.8';
|
|
3
|
+
const COMPONENT_ORDER = [
|
|
4
|
+
'open-card',
|
|
5
|
+
'open-callout',
|
|
6
|
+
'open-step-card',
|
|
7
|
+
'open-button',
|
|
8
|
+
'open-input',
|
|
9
|
+
'open-theme-toggle',
|
|
10
|
+
'open-code-block',
|
|
11
|
+
'open-badge',
|
|
12
|
+
'open-brand-mark',
|
|
13
|
+
'open-lab-panel',
|
|
14
|
+
'open-standards-visual',
|
|
15
|
+
'open-lab-stage',
|
|
16
|
+
'open-dialog',
|
|
17
|
+
'open-layout',
|
|
18
|
+
'open-dropdown',
|
|
19
|
+
'open-modal',
|
|
20
|
+
'open-tabs',
|
|
21
|
+
'open-hero-ping'
|
|
22
|
+
];
|
|
23
|
+
function layerFromClass(className) {
|
|
24
|
+
const interactive = new Set([
|
|
25
|
+
'OpenButton',
|
|
26
|
+
'OpenInput',
|
|
27
|
+
'OpenThemeToggle',
|
|
28
|
+
'OpenDialog',
|
|
29
|
+
'OpenLayout',
|
|
30
|
+
'OpenDropdown',
|
|
31
|
+
'OpenModal',
|
|
32
|
+
'OpenTabs',
|
|
33
|
+
'OpenHeroPing'
|
|
34
|
+
]);
|
|
35
|
+
return interactive.has(className) ? 'dsd-interactive' : 'dsd-static';
|
|
36
|
+
}
|
|
37
|
+
function hydrateFromClass(className) {
|
|
38
|
+
const load = new Set([
|
|
39
|
+
'OpenButton',
|
|
40
|
+
'OpenInput',
|
|
41
|
+
'OpenThemeToggle',
|
|
42
|
+
'OpenLayout',
|
|
43
|
+
'OpenDropdown',
|
|
44
|
+
'OpenModal',
|
|
45
|
+
'OpenTabs'
|
|
46
|
+
]);
|
|
47
|
+
return load.has(className) ? 'load' : 'idle';
|
|
48
|
+
}
|
|
49
|
+
function inferAttributeType(name) {
|
|
50
|
+
if (name === 'disabled' || name === 'compact' || name === 'open' || name === 'home' || name === 'required') {
|
|
51
|
+
return 'boolean';
|
|
52
|
+
}
|
|
53
|
+
if (name === 'step') return 'number';
|
|
54
|
+
if (name === 'nav-items' || name === 'header-nav' || name === 'locales') return 'array';
|
|
55
|
+
return 'string';
|
|
56
|
+
}
|
|
57
|
+
function parseObservedAttributes(text) {
|
|
58
|
+
const match = text.match(/static\s+(?:override\s+)?observedAttributes\s*=\s*\[([\s\S]*?)\]/);
|
|
59
|
+
if (!match) return [];
|
|
60
|
+
return match[1].split(/,\s*/).map((s)=>s.trim().replace(/^['"]|['"]$/g, '')).filter(Boolean);
|
|
61
|
+
}
|
|
62
|
+
function parseTagName(text) {
|
|
63
|
+
const match = text.match(/export\s+const\s+tagName\s*=\s*['"]([^'"]+)['"]/);
|
|
64
|
+
if (!match) throw new Error('Could not find tagName export');
|
|
65
|
+
return match[1];
|
|
66
|
+
}
|
|
67
|
+
function parseClassName(text, file) {
|
|
68
|
+
const match = text.match(/export\s+(?:default\s+)?class\s+(\w+)\s+extends\s+OpenElement/);
|
|
69
|
+
if (!match) throw new Error(`Could not find exported class in ${file}`);
|
|
70
|
+
return match[1];
|
|
71
|
+
}
|
|
72
|
+
function parseCssParts(text) {
|
|
73
|
+
const parts = [];
|
|
74
|
+
const seen = new Set();
|
|
75
|
+
for (const m of text.matchAll(/\*\s*@csspart\s+(\S+)\s*-+(.*)/g)){
|
|
76
|
+
const name = m[1].trim();
|
|
77
|
+
const description = m[2].trim();
|
|
78
|
+
if (!seen.has(name)) {
|
|
79
|
+
seen.add(name);
|
|
80
|
+
parts.push({
|
|
81
|
+
name,
|
|
82
|
+
description
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return parts;
|
|
87
|
+
}
|
|
88
|
+
function parseSlots(text) {
|
|
89
|
+
const slots = [];
|
|
90
|
+
const seen = new Set();
|
|
91
|
+
for (const m of text.matchAll(/\*\s*@slot\s+(\S*)\s*-+(.*)/g)){
|
|
92
|
+
const name = m[1].trim();
|
|
93
|
+
const description = m[2].trim();
|
|
94
|
+
if (!seen.has(name)) {
|
|
95
|
+
seen.add(name);
|
|
96
|
+
slots.push({
|
|
97
|
+
name,
|
|
98
|
+
description
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Default slot fallback when render includes <slot></slot> but no @slot -
|
|
103
|
+
if (text.includes('<slot></slot>') || text.includes('<slot ')) {
|
|
104
|
+
if (!seen.has('')) {
|
|
105
|
+
slots.unshift({
|
|
106
|
+
name: '',
|
|
107
|
+
description: 'Default slot'
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return slots;
|
|
112
|
+
}
|
|
113
|
+
function parseEvents(text) {
|
|
114
|
+
const events = [];
|
|
115
|
+
const seen = new Set();
|
|
116
|
+
for (const m of text.matchAll(/new\s+CustomEvent\(['"]([^'"]+)['"],?\s*(?:\{([^}]*)\})?/g)){
|
|
117
|
+
const name = m[1];
|
|
118
|
+
if (seen.has(name)) continue;
|
|
119
|
+
seen.add(name);
|
|
120
|
+
const detail = (m[2] || '').match(/detail\s*:\s*\{([^}]*)\}/);
|
|
121
|
+
events.push({
|
|
122
|
+
name,
|
|
123
|
+
type: detail ? `CustomEvent<{ ${detail[1].trim()} }>` : 'CustomEvent',
|
|
124
|
+
description: `Fired on ${name}`
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
return events;
|
|
128
|
+
}
|
|
129
|
+
function parseDescription(text) {
|
|
130
|
+
const lines = text.split('\n');
|
|
131
|
+
for(let i = 0; i < lines.length; i++){
|
|
132
|
+
const line = lines[i].trim();
|
|
133
|
+
if (line.startsWith('* @openelement/ui')) {
|
|
134
|
+
const next = lines[i + 1]?.replace(/^\s*\*\s?/, '').trim();
|
|
135
|
+
if (next && !next.startsWith('*') && !next.startsWith('@')) return next;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return '';
|
|
139
|
+
}
|
|
140
|
+
function buildMeta(file, source) {
|
|
141
|
+
const tagName = parseTagName(source);
|
|
142
|
+
const className = parseClassName(source, file);
|
|
143
|
+
const observed = parseObservedAttributes(source);
|
|
144
|
+
const attributes = observed.map((name)=>({
|
|
145
|
+
name,
|
|
146
|
+
type: inferAttributeType(name),
|
|
147
|
+
description: `${name} attribute`
|
|
148
|
+
}));
|
|
149
|
+
// Provide defaults for known boolean attributes
|
|
150
|
+
for (const attr of attributes){
|
|
151
|
+
if (attr.type === 'boolean') {
|
|
152
|
+
attr.default = 'false';
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
file,
|
|
157
|
+
tagName,
|
|
158
|
+
className,
|
|
159
|
+
description: parseDescription(source),
|
|
160
|
+
attributes,
|
|
161
|
+
events: parseEvents(source),
|
|
162
|
+
slots: parseSlots(source),
|
|
163
|
+
cssParts: parseCssParts(source),
|
|
164
|
+
layer: layerFromClass(className),
|
|
165
|
+
hydrate: hydrateFromClass(className)
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
function readComponentSources() {
|
|
169
|
+
const dir = new URL('.', import.meta.url);
|
|
170
|
+
const metas = [];
|
|
171
|
+
for (const entry of Deno.readDirSync(dir)){
|
|
172
|
+
if (!entry.isFile || !entry.name.startsWith('open-') || !entry.name.endsWith('.tsx')) continue;
|
|
173
|
+
const file = entry.name;
|
|
174
|
+
const source = new TextDecoder().decode(Deno.readFileSync(new URL(file, dir)));
|
|
175
|
+
if (!source.includes('extends OpenElement')) continue;
|
|
176
|
+
metas.push(buildMeta(file, source));
|
|
177
|
+
}
|
|
178
|
+
const order = new Map(COMPONENT_ORDER.map((t, i)=>[
|
|
179
|
+
t,
|
|
180
|
+
i
|
|
181
|
+
]));
|
|
182
|
+
metas.sort((a, b)=>(order.get(a.tagName) ?? 999) - (order.get(b.tagName) ?? 999));
|
|
183
|
+
return metas;
|
|
184
|
+
}
|
|
185
|
+
function buildDeclaration(meta) {
|
|
186
|
+
return {
|
|
187
|
+
tagName: meta.tagName,
|
|
188
|
+
className: meta.className,
|
|
189
|
+
superclassName: 'OpenElement',
|
|
190
|
+
description: meta.description,
|
|
191
|
+
attributes: meta.attributes.length ? meta.attributes : undefined,
|
|
192
|
+
events: meta.events.length ? meta.events : undefined,
|
|
193
|
+
slots: meta.slots.length ? meta.slots : undefined,
|
|
194
|
+
cssParts: meta.cssParts.length ? meta.cssParts : undefined,
|
|
195
|
+
openElement: {
|
|
196
|
+
ssr: true,
|
|
197
|
+
dsd: true,
|
|
198
|
+
layer: meta.layer,
|
|
199
|
+
hydrate: meta.hydrate,
|
|
200
|
+
module: `@openelement/ui/${meta.file.replace(/\.tsx$/, '')}`,
|
|
201
|
+
export: meta.className
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
function buildManifest() {
|
|
206
|
+
const metas = readComponentSources();
|
|
207
|
+
const declarations = metas.map(buildDeclaration);
|
|
208
|
+
const modules = metas.map((meta)=>({
|
|
209
|
+
path: `./${meta.file.replace(/\.tsx$/, '.js')}`,
|
|
210
|
+
exports: [
|
|
211
|
+
{
|
|
212
|
+
name: meta.className,
|
|
213
|
+
path: `./${meta.file.replace(/\.tsx$/, '.js')}`
|
|
214
|
+
}
|
|
215
|
+
],
|
|
216
|
+
declarations: [
|
|
217
|
+
meta.tagName
|
|
218
|
+
]
|
|
219
|
+
}));
|
|
220
|
+
return {
|
|
221
|
+
schemaVersion: '1.0.0',
|
|
222
|
+
packageName: '@openelement/ui',
|
|
223
|
+
version: pkgVersion,
|
|
224
|
+
description: 'Open Props Web Component library for openElement',
|
|
225
|
+
author: 'openElement',
|
|
226
|
+
license: 'MIT',
|
|
227
|
+
homepage: 'https://openelement.org',
|
|
228
|
+
repository: 'https://github.com/open-element/openelement',
|
|
229
|
+
openElement: {
|
|
230
|
+
adapter: 'vanilla',
|
|
231
|
+
hasStylesheet: true,
|
|
232
|
+
cssPrefix: 'open'
|
|
233
|
+
},
|
|
234
|
+
declarations,
|
|
235
|
+
modules
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
// ponytail: lazy-initialized to keep Deno runtime calls out of client bundles.
|
|
239
|
+
// buildManifest() scans the filesystem and must only execute at build time.
|
|
240
|
+
let _manifest;
|
|
241
|
+
export const manifest = new Proxy({}, {
|
|
242
|
+
get (_target, prop) {
|
|
243
|
+
if (!_manifest) _manifest = buildManifest();
|
|
244
|
+
return _manifest[prop];
|
|
245
|
+
},
|
|
246
|
+
ownKeys () {
|
|
247
|
+
if (!_manifest) _manifest = buildManifest();
|
|
248
|
+
return Reflect.ownKeys(_manifest);
|
|
249
|
+
},
|
|
250
|
+
getOwnPropertyDescriptor (_target, prop) {
|
|
251
|
+
if (!_manifest) _manifest = buildManifest();
|
|
252
|
+
return Reflect.getOwnPropertyDescriptor(_manifest, prop);
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy91aS9zcmMvbWFuaWZlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVubyB9IGZyb20gXCJAZGVuby9zaGltLWRlbm9cIjtcbi8qKlxuICogQG9wZW5lbGVtZW50L3VpIC0gR2VuZXJhdGVkIFBhY2thZ2UgTWFuaWZlc3RcbiAqXG4gKiBTY2FucyBjb21wb25lbnQgc291cmNlIGZpbGVzIGF0IHJ1bnRpbWUgYW5kIGJ1aWxkcyBhIENFTS1jb21wYXRpYmxlXG4gKiBPcGVuRWxlbWVudFBhY2thZ2VNYW5pZmVzdC4gS2VlcHMgdGhlIHNhbWUgZXhwb3J0IHNoYXBlIGFzIHRoZSBwcmV2aW91c1xuICogaGFuZC13cml0dGVuIG1hbmlmZXN0IHNvIGNvbnN1bWVycyBjb250aW51ZSB0byB3b3JrLlxuICovXG4vLyBkZW5vLWFwaS1mcmVlOmlnbm9yZSDigJQgRGVubyBBUElzIHVzZWQgb25seSBpbiBsYXp5LWluaXRpYWxpemVkIFByb3h5IGZvciBidWlsZC10aW1lIG1hbmlmZXN0IGdlbmVyYXRpb25cblxuaW1wb3J0IHR5cGUge1xuICBPcGVuRWxlbWVudEF0dHJpYnV0ZSxcbiAgT3BlbkVsZW1lbnRDc3NQYXJ0LFxuICBPcGVuRWxlbWVudERlY2xhcmF0aW9uLFxuICBPcGVuRWxlbWVudEV2ZW50LFxuICBPcGVuRWxlbWVudFBhY2thZ2VNYW5pZmVzdCxcbiAgT3BlbkVsZW1lbnRTbG90LFxufSBmcm9tICdAb3BlbmVsZW1lbnQvcHJvdG9jb2wvbWFuaWZlc3QnO1xuXG5jb25zdCBwa2dWZXJzaW9uID0gJzAuNDAuOCc7XG5cbmludGVyZmFjZSBDb21wb25lbnRNZXRhIHtcbiAgZmlsZTogc3RyaW5nO1xuICB0YWdOYW1lOiBzdHJpbmc7XG4gIGNsYXNzTmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBhdHRyaWJ1dGVzOiBPcGVuRWxlbWVudEF0dHJpYnV0ZVtdO1xuICBldmVudHM6IE9wZW5FbGVtZW50RXZlbnRbXTtcbiAgc2xvdHM6IE9wZW5FbGVtZW50U2xvdFtdO1xuICBjc3NQYXJ0czogT3BlbkVsZW1lbnRDc3NQYXJ0W107XG4gIGxheWVyOiAnZHNkLXN0YXRpYycgfCAnZHNkLWludGVyYWN0aXZlJztcbiAgaHlkcmF0ZTogJ2xvYWQnIHwgJ2lkbGUnIHwgJ3Zpc2libGUnO1xufVxuXG5jb25zdCBDT01QT05FTlRfT1JERVIgPSBbXG4gICdvcGVuLWNhcmQnLFxuICAnb3Blbi1jYWxsb3V0JyxcbiAgJ29wZW4tc3RlcC1jYXJkJyxcbiAgJ29wZW4tYnV0dG9uJyxcbiAgJ29wZW4taW5wdXQnLFxuICAnb3Blbi10aGVtZS10b2dnbGUnLFxuICAnb3Blbi1jb2RlLWJsb2NrJyxcbiAgJ29wZW4tYmFkZ2UnLFxuICAnb3Blbi1icmFuZC1tYXJrJyxcbiAgJ29wZW4tbGFiLXBhbmVsJyxcbiAgJ29wZW4tc3RhbmRhcmRzLXZpc3VhbCcsXG4gICdvcGVuLWxhYi1zdGFnZScsXG4gICdvcGVuLWRpYWxvZycsXG4gICdvcGVuLWxheW91dCcsXG4gICdvcGVuLWRyb3Bkb3duJyxcbiAgJ29wZW4tbW9kYWwnLFxuICAnb3Blbi10YWJzJyxcbiAgJ29wZW4taGVyby1waW5nJyxcbl07XG5cbmZ1bmN0aW9uIGxheWVyRnJvbUNsYXNzKGNsYXNzTmFtZTogc3RyaW5nKTogQ29tcG9uZW50TWV0YVsnbGF5ZXInXSB7XG4gIGNvbnN0IGludGVyYWN0aXZlID0gbmV3IFNldChbXG4gICAgJ09wZW5CdXR0b24nLFxuICAgICdPcGVuSW5wdXQnLFxuICAgICdPcGVuVGhlbWVUb2dnbGUnLFxuICAgICdPcGVuRGlhbG9nJyxcbiAgICAnT3BlbkxheW91dCcsXG4gICAgJ09wZW5Ecm9wZG93bicsXG4gICAgJ09wZW5Nb2RhbCcsXG4gICAgJ09wZW5UYWJzJyxcbiAgICAnT3Blbkhlcm9QaW5nJyxcbiAgXSk7XG4gIHJldHVybiBpbnRlcmFjdGl2ZS5oYXMoY2xhc3NOYW1lKSA/ICdkc2QtaW50ZXJhY3RpdmUnIDogJ2RzZC1zdGF0aWMnO1xufVxuXG5mdW5jdGlvbiBoeWRyYXRlRnJvbUNsYXNzKGNsYXNzTmFtZTogc3RyaW5nKTogQ29tcG9uZW50TWV0YVsnaHlkcmF0ZSddIHtcbiAgY29uc3QgbG9hZCA9IG5ldyBTZXQoW1xuICAgICdPcGVuQnV0dG9uJyxcbiAgICAnT3BlbklucHV0JyxcbiAgICAnT3BlblRoZW1lVG9nZ2xlJyxcbiAgICAnT3BlbkxheW91dCcsXG4gICAgJ09wZW5Ecm9wZG93bicsXG4gICAgJ09wZW5Nb2RhbCcsXG4gICAgJ09wZW5UYWJzJyxcbiAgXSk7XG4gIHJldHVybiBsb2FkLmhhcyhjbGFzc05hbWUpID8gJ2xvYWQnIDogJ2lkbGUnO1xufVxuXG5mdW5jdGlvbiBpbmZlckF0dHJpYnV0ZVR5cGUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKFxuICAgIG5hbWUgPT09ICdkaXNhYmxlZCcgfHwgbmFtZSA9PT0gJ2NvbXBhY3QnIHx8IG5hbWUgPT09ICdvcGVuJyB8fCBuYW1lID09PSAnaG9tZScgfHxcbiAgICBuYW1lID09PSAncmVxdWlyZWQnXG4gICkge1xuICAgIHJldHVybiAnYm9vbGVhbic7XG4gIH1cbiAgaWYgKG5hbWUgPT09ICdzdGVwJykgcmV0dXJuICdudW1iZXInO1xuICBpZiAobmFtZSA9PT0gJ25hdi1pdGVtcycgfHwgbmFtZSA9PT0gJ2hlYWRlci1uYXYnIHx8IG5hbWUgPT09ICdsb2NhbGVzJykgcmV0dXJuICdhcnJheSc7XG4gIHJldHVybiAnc3RyaW5nJztcbn1cblxuZnVuY3Rpb24gcGFyc2VPYnNlcnZlZEF0dHJpYnV0ZXModGV4dDogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCBtYXRjaCA9IHRleHQubWF0Y2goL3N0YXRpY1xccysoPzpvdmVycmlkZVxccyspP29ic2VydmVkQXR0cmlidXRlc1xccyo9XFxzKlxcWyhbXFxzXFxTXSo/KVxcXS8pO1xuICBpZiAoIW1hdGNoKSByZXR1cm4gW107XG4gIHJldHVybiBtYXRjaFsxXVxuICAgIC5zcGxpdCgvLFxccyovKVxuICAgIC5tYXAoKHMpID0+IHMudHJpbSgpLnJlcGxhY2UoL15bJ1wiXXxbJ1wiXSQvZywgJycpKVxuICAgIC5maWx0ZXIoQm9vbGVhbik7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVGFnTmFtZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IHRleHQubWF0Y2goL2V4cG9ydFxccytjb25zdFxccyt0YWdOYW1lXFxzKj1cXHMqWydcIl0oW14nXCJdKylbJ1wiXS8pO1xuICBpZiAoIW1hdGNoKSB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIHRhZ05hbWUgZXhwb3J0Jyk7XG4gIHJldHVybiBtYXRjaFsxXTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDbGFzc05hbWUodGV4dDogc3RyaW5nLCBmaWxlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IHRleHQubWF0Y2goL2V4cG9ydFxccysoPzpkZWZhdWx0XFxzKyk/Y2xhc3NcXHMrKFxcdyspXFxzK2V4dGVuZHNcXHMrT3BlbkVsZW1lbnQvKTtcbiAgaWYgKCFtYXRjaCkgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBleHBvcnRlZCBjbGFzcyBpbiAke2ZpbGV9YCk7XG4gIHJldHVybiBtYXRjaFsxXTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDc3NQYXJ0cyh0ZXh0OiBzdHJpbmcpOiBPcGVuRWxlbWVudENzc1BhcnRbXSB7XG4gIGNvbnN0IHBhcnRzOiBPcGVuRWxlbWVudENzc1BhcnRbXSA9IFtdO1xuICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgbSBvZiB0ZXh0Lm1hdGNoQWxsKC9cXCpcXHMqQGNzc3BhcnRcXHMrKFxcUyspXFxzKi0rKC4qKS9nKSkge1xuICAgIGNvbnN0IG5hbWUgPSBtWzFdLnRyaW0oKTtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IG1bMl0udHJpbSgpO1xuICAgIGlmICghc2Vlbi5oYXMobmFtZSkpIHtcbiAgICAgIHNlZW4uYWRkKG5hbWUpO1xuICAgICAgcGFydHMucHVzaCh7IG5hbWUsIGRlc2NyaXB0aW9uIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcGFydHM7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU2xvdHModGV4dDogc3RyaW5nKTogT3BlbkVsZW1lbnRTbG90W10ge1xuICBjb25zdCBzbG90czogT3BlbkVsZW1lbnRTbG90W10gPSBbXTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IG0gb2YgdGV4dC5tYXRjaEFsbCgvXFwqXFxzKkBzbG90XFxzKyhcXFMqKVxccyotKyguKikvZykpIHtcbiAgICBjb25zdCBuYW1lID0gbVsxXS50cmltKCk7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBtWzJdLnRyaW0oKTtcbiAgICBpZiAoIXNlZW4uaGFzKG5hbWUpKSB7XG4gICAgICBzZWVuLmFkZChuYW1lKTtcbiAgICAgIHNsb3RzLnB1c2goeyBuYW1lLCBkZXNjcmlwdGlvbiB9KTtcbiAgICB9XG4gIH1cbiAgLy8gRGVmYXVsdCBzbG90IGZhbGxiYWNrIHdoZW4gcmVuZGVyIGluY2x1ZGVzIDxzbG90Pjwvc2xvdD4gYnV0IG5vIEBzbG90IC1cbiAgaWYgKHRleHQuaW5jbHVkZXMoJzxzbG90Pjwvc2xvdD4nKSB8fCB0ZXh0LmluY2x1ZGVzKCc8c2xvdCAnKSkge1xuICAgIGlmICghc2Vlbi5oYXMoJycpKSB7XG4gICAgICBzbG90cy51bnNoaWZ0KHsgbmFtZTogJycsIGRlc2NyaXB0aW9uOiAnRGVmYXVsdCBzbG90JyB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNsb3RzO1xufVxuXG5mdW5jdGlvbiBwYXJzZUV2ZW50cyh0ZXh0OiBzdHJpbmcpOiBPcGVuRWxlbWVudEV2ZW50W10ge1xuICBjb25zdCBldmVudHM6IE9wZW5FbGVtZW50RXZlbnRbXSA9IFtdO1xuICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgbSBvZiB0ZXh0Lm1hdGNoQWxsKC9uZXdcXHMrQ3VzdG9tRXZlbnRcXChbJ1wiXShbXidcIl0rKVsnXCJdLD9cXHMqKD86XFx7KFtefV0qKVxcfSk/L2cpKSB7XG4gICAgY29uc3QgbmFtZSA9IG1bMV07XG4gICAgaWYgKHNlZW4uaGFzKG5hbWUpKSBjb250aW51ZTtcbiAgICBzZWVuLmFkZChuYW1lKTtcbiAgICBjb25zdCBkZXRhaWwgPSAobVsyXSB8fCAnJykubWF0Y2goL2RldGFpbFxccyo6XFxzKlxceyhbXn1dKilcXH0vKTtcbiAgICBldmVudHMucHVzaCh7XG4gICAgICBuYW1lLFxuICAgICAgdHlwZTogZGV0YWlsID8gYEN1c3RvbUV2ZW50PHsgJHtkZXRhaWxbMV0udHJpbSgpfSB9PmAgOiAnQ3VzdG9tRXZlbnQnLFxuICAgICAgZGVzY3JpcHRpb246IGBGaXJlZCBvbiAke25hbWV9YCxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZXZlbnRzO1xufVxuXG5mdW5jdGlvbiBwYXJzZURlc2NyaXB0aW9uKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGxpbmVzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xuICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoJyogQG9wZW5lbGVtZW50L3VpJykpIHtcbiAgICAgIGNvbnN0IG5leHQgPSBsaW5lc1tpICsgMV0/LnJlcGxhY2UoL15cXHMqXFwqXFxzPy8sICcnKS50cmltKCk7XG4gICAgICBpZiAobmV4dCAmJiAhbmV4dC5zdGFydHNXaXRoKCcqJykgJiYgIW5leHQuc3RhcnRzV2l0aCgnQCcpKSByZXR1cm4gbmV4dDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBidWlsZE1ldGEoZmlsZTogc3RyaW5nLCBzb3VyY2U6IHN0cmluZyk6IENvbXBvbmVudE1ldGEge1xuICBjb25zdCB0YWdOYW1lID0gcGFyc2VUYWdOYW1lKHNvdXJjZSk7XG4gIGNvbnN0IGNsYXNzTmFtZSA9IHBhcnNlQ2xhc3NOYW1lKHNvdXJjZSwgZmlsZSk7XG4gIGNvbnN0IG9ic2VydmVkID0gcGFyc2VPYnNlcnZlZEF0dHJpYnV0ZXMoc291cmNlKTtcbiAgY29uc3QgYXR0cmlidXRlczogT3BlbkVsZW1lbnRBdHRyaWJ1dGVbXSA9IG9ic2VydmVkLm1hcCgobmFtZSkgPT4gKHtcbiAgICBuYW1lLFxuICAgIHR5cGU6IGluZmVyQXR0cmlidXRlVHlwZShuYW1lKSxcbiAgICBkZXNjcmlwdGlvbjogYCR7bmFtZX0gYXR0cmlidXRlYCxcbiAgfSkpO1xuXG4gIC8vIFByb3ZpZGUgZGVmYXVsdHMgZm9yIGtub3duIGJvb2xlYW4gYXR0cmlidXRlc1xuICBmb3IgKGNvbnN0IGF0dHIgb2YgYXR0cmlidXRlcykge1xuICAgIGlmIChhdHRyLnR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgYXR0ci5kZWZhdWx0ID0gJ2ZhbHNlJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZpbGUsXG4gICAgdGFnTmFtZSxcbiAgICBjbGFzc05hbWUsXG4gICAgZGVzY3JpcHRpb246IHBhcnNlRGVzY3JpcHRpb24oc291cmNlKSxcbiAgICBhdHRyaWJ1dGVzLFxuICAgIGV2ZW50czogcGFyc2VFdmVudHMoc291cmNlKSxcbiAgICBzbG90czogcGFyc2VTbG90cyhzb3VyY2UpLFxuICAgIGNzc1BhcnRzOiBwYXJzZUNzc1BhcnRzKHNvdXJjZSksXG4gICAgbGF5ZXI6IGxheWVyRnJvbUNsYXNzKGNsYXNzTmFtZSksXG4gICAgaHlkcmF0ZTogaHlkcmF0ZUZyb21DbGFzcyhjbGFzc05hbWUpLFxuICB9O1xufVxuXG5mdW5jdGlvbiByZWFkQ29tcG9uZW50U291cmNlcygpOiBDb21wb25lbnRNZXRhW10ge1xuICBjb25zdCBkaXIgPSBuZXcgVVJMKCcuJywgaW1wb3J0Lm1ldGEudXJsKTtcbiAgY29uc3QgbWV0YXM6IENvbXBvbmVudE1ldGFbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIERlbm8ucmVhZERpclN5bmMoZGlyKSkge1xuICAgIGlmICghZW50cnkuaXNGaWxlIHx8ICFlbnRyeS5uYW1lLnN0YXJ0c1dpdGgoJ29wZW4tJykgfHwgIWVudHJ5Lm5hbWUuZW5kc1dpdGgoJy50c3gnKSkgY29udGludWU7XG4gICAgY29uc3QgZmlsZSA9IGVudHJ5Lm5hbWU7XG4gICAgY29uc3Qgc291cmNlID0gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKERlbm8ucmVhZEZpbGVTeW5jKG5ldyBVUkwoZmlsZSwgZGlyKSkpO1xuICAgIGlmICghc291cmNlLmluY2x1ZGVzKCdleHRlbmRzIE9wZW5FbGVtZW50JykpIGNvbnRpbnVlO1xuICAgIG1ldGFzLnB1c2goYnVpbGRNZXRhKGZpbGUsIHNvdXJjZSkpO1xuICB9XG4gIGNvbnN0IG9yZGVyID0gbmV3IE1hcChDT01QT05FTlRfT1JERVIubWFwKCh0LCBpKSA9PiBbdCwgaV0pKTtcbiAgbWV0YXMuc29ydCgoYSwgYikgPT4gKG9yZGVyLmdldChhLnRhZ05hbWUpID8/IDk5OSkgLSAob3JkZXIuZ2V0KGIudGFnTmFtZSkgPz8gOTk5KSk7XG4gIHJldHVybiBtZXRhcztcbn1cblxuZnVuY3Rpb24gYnVpbGREZWNsYXJhdGlvbihtZXRhOiBDb21wb25lbnRNZXRhKTogT3BlbkVsZW1lbnREZWNsYXJhdGlvbiB7XG4gIHJldHVybiB7XG4gICAgdGFnTmFtZTogbWV0YS50YWdOYW1lLFxuICAgIGNsYXNzTmFtZTogbWV0YS5jbGFzc05hbWUsXG4gICAgc3VwZXJjbGFzc05hbWU6ICdPcGVuRWxlbWVudCcsXG4gICAgZGVzY3JpcHRpb246IG1ldGEuZGVzY3JpcHRpb24sXG4gICAgYXR0cmlidXRlczogbWV0YS5hdHRyaWJ1dGVzLmxlbmd0aCA/IG1ldGEuYXR0cmlidXRlcyA6IHVuZGVmaW5lZCxcbiAgICBldmVudHM6IG1ldGEuZXZlbnRzLmxlbmd0aCA/IG1ldGEuZXZlbnRzIDogdW5kZWZpbmVkLFxuICAgIHNsb3RzOiBtZXRhLnNsb3RzLmxlbmd0aCA/IG1ldGEuc2xvdHMgOiB1bmRlZmluZWQsXG4gICAgY3NzUGFydHM6IG1ldGEuY3NzUGFydHMubGVuZ3RoID8gbWV0YS5jc3NQYXJ0cyA6IHVuZGVmaW5lZCxcbiAgICBvcGVuRWxlbWVudDoge1xuICAgICAgc3NyOiB0cnVlLFxuICAgICAgZHNkOiB0cnVlLFxuICAgICAgbGF5ZXI6IG1ldGEubGF5ZXIsXG4gICAgICBoeWRyYXRlOiBtZXRhLmh5ZHJhdGUsXG4gICAgICBtb2R1bGU6IGBAb3BlbmVsZW1lbnQvdWkvJHttZXRhLmZpbGUucmVwbGFjZSgvXFwudHN4JC8sICcnKX1gLFxuICAgICAgZXhwb3J0OiBtZXRhLmNsYXNzTmFtZSxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBidWlsZE1hbmlmZXN0KCk6IE9wZW5FbGVtZW50UGFja2FnZU1hbmlmZXN0IHtcbiAgY29uc3QgbWV0YXMgPSByZWFkQ29tcG9uZW50U291cmNlcygpO1xuICBjb25zdCBkZWNsYXJhdGlvbnMgPSBtZXRhcy5tYXAoYnVpbGREZWNsYXJhdGlvbik7XG4gIGNvbnN0IG1vZHVsZXMgPSBtZXRhcy5tYXAoKG1ldGEpID0+ICh7XG4gICAgcGF0aDogYC4vJHttZXRhLmZpbGUucmVwbGFjZSgvXFwudHN4JC8sICcuanMnKX1gLFxuICAgIGV4cG9ydHM6IFt7IG5hbWU6IG1ldGEuY2xhc3NOYW1lLCBwYXRoOiBgLi8ke21ldGEuZmlsZS5yZXBsYWNlKC9cXC50c3gkLywgJy5qcycpfWAgfV0sXG4gICAgZGVjbGFyYXRpb25zOiBbbWV0YS50YWdOYW1lXSxcbiAgfSkpO1xuXG4gIHJldHVybiB7XG4gICAgc2NoZW1hVmVyc2lvbjogJzEuMC4wJyxcbiAgICBwYWNrYWdlTmFtZTogJ0BvcGVuZWxlbWVudC91aScsXG4gICAgdmVyc2lvbjogcGtnVmVyc2lvbixcbiAgICBkZXNjcmlwdGlvbjogJ09wZW4gUHJvcHMgV2ViIENvbXBvbmVudCBsaWJyYXJ5IGZvciBvcGVuRWxlbWVudCcsXG4gICAgYXV0aG9yOiAnb3BlbkVsZW1lbnQnLFxuICAgIGxpY2Vuc2U6ICdNSVQnLFxuICAgIGhvbWVwYWdlOiAnaHR0cHM6Ly9vcGVuZWxlbWVudC5vcmcnLFxuICAgIHJlcG9zaXRvcnk6ICdodHRwczovL2dpdGh1Yi5jb20vb3Blbi1lbGVtZW50L29wZW5lbGVtZW50JyxcbiAgICBvcGVuRWxlbWVudDoge1xuICAgICAgYWRhcHRlcjogJ3ZhbmlsbGEnLFxuICAgICAgaGFzU3R5bGVzaGVldDogdHJ1ZSxcbiAgICAgIGNzc1ByZWZpeDogJ29wZW4nLFxuICAgIH0sXG4gICAgZGVjbGFyYXRpb25zLFxuICAgIG1vZHVsZXMsXG4gIH07XG59XG5cbi8vIHBvbnl0YWlsOiBsYXp5LWluaXRpYWxpemVkIHRvIGtlZXAgRGVubyBydW50aW1lIGNhbGxzIG91dCBvZiBjbGllbnQgYnVuZGxlcy5cbi8vIGJ1aWxkTWFuaWZlc3QoKSBzY2FucyB0aGUgZmlsZXN5c3RlbSBhbmQgbXVzdCBvbmx5IGV4ZWN1dGUgYXQgYnVpbGQgdGltZS5cbmxldCBfbWFuaWZlc3Q6IE9wZW5FbGVtZW50UGFja2FnZU1hbmlmZXN0IHwgdW5kZWZpbmVkO1xuZXhwb3J0IGNvbnN0IG1hbmlmZXN0OiBPcGVuRWxlbWVudFBhY2thZ2VNYW5pZmVzdCA9IG5ldyBQcm94eShcbiAge30gYXMgT3BlbkVsZW1lbnRQYWNrYWdlTWFuaWZlc3QsXG4gIHtcbiAgICBnZXQoX3RhcmdldCwgcHJvcCkge1xuICAgICAgaWYgKCFfbWFuaWZlc3QpIF9tYW5pZmVzdCA9IGJ1aWxkTWFuaWZlc3QoKTtcbiAgICAgIHJldHVybiAoKF9tYW5pZmVzdCBhcyB1bmtub3duKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbcHJvcCBhcyBzdHJpbmddO1xuICAgIH0sXG4gICAgb3duS2V5cygpIHtcbiAgICAgIGlmICghX21hbmlmZXN0KSBfbWFuaWZlc3QgPSBidWlsZE1hbmlmZXN0KCk7XG4gICAgICByZXR1cm4gUmVmbGVjdC5vd25LZXlzKF9tYW5pZmVzdCEpO1xuICAgIH0sXG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKF90YXJnZXQsIHByb3ApIHtcbiAgICAgIGlmICghX21hbmlmZXN0KSBfbWFuaWZlc3QgPSBidWlsZE1hbmlmZXN0KCk7XG4gICAgICByZXR1cm4gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoX21hbmlmZXN0ISwgcHJvcCk7XG4gICAgfSxcbiAgfSxcbik7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxJQUFJLFFBQVEsa0JBQWtCO0FBbUJ2QyxNQUFNLGFBQWE7QUFlbkIsTUFBTSxrQkFBa0I7RUFDdEI7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0NBQ0Q7QUFFRCxTQUFTLGVBQWUsU0FBaUI7RUFDdkMsTUFBTSxjQUFjLElBQUksSUFBSTtJQUMxQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7R0FDRDtFQUNELE9BQU8sWUFBWSxHQUFHLENBQUMsYUFBYSxvQkFBb0I7QUFDMUQ7QUFFQSxTQUFTLGlCQUFpQixTQUFpQjtFQUN6QyxNQUFNLE9BQU8sSUFBSSxJQUFJO0lBQ25CO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0dBQ0Q7RUFDRCxPQUFPLEtBQUssR0FBRyxDQUFDLGFBQWEsU0FBUztBQUN4QztBQUVBLFNBQVMsbUJBQW1CLElBQVk7RUFDdEMsSUFDRSxTQUFTLGNBQWMsU0FBUyxhQUFhLFNBQVMsVUFBVSxTQUFTLFVBQ3pFLFNBQVMsWUFDVDtJQUNBLE9BQU87RUFDVDtFQUNBLElBQUksU0FBUyxRQUFRLE9BQU87RUFDNUIsSUFBSSxTQUFTLGVBQWUsU0FBUyxnQkFBZ0IsU0FBUyxXQUFX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
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** @jsxImportSource @openelement/core */ /**
|
|
2
|
+
* @openelement/ui - open-badge
|
|
3
|
+
*
|
|
4
|
+
* Compact status badge backed by Open Props semantic tokens.
|
|
5
|
+
*/ import { OpenElement } from '@openelement/element';
|
|
6
|
+
import { type StyleSheetLike } from '@openelement/core/style-sheet';
|
|
7
|
+
export declare const tagName: 'open-badge';
|
|
8
|
+
declare const sheet: StyleSheetLike;
|
|
9
|
+
export declare class OpenBadge extends OpenElement {
|
|
10
|
+
static override styles: [];
|
|
11
|
+
static override observedAttributes: [string, string];
|
|
12
|
+
override render(): ReturnType<typeof OpenElement.prototype.render>;
|
|
13
|
+
private _getStr: any;
|
|
14
|
+
}
|
|
15
|
+
export default OpenBadge;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/** @jsxImportSource @openelement/core */ /**
|
|
2
|
+
* @openelement/ui - open-badge
|
|
3
|
+
*
|
|
4
|
+
* Compact status badge backed by Open Props semantic tokens.
|
|
5
|
+
*/ import { OpenElement } from '@openelement/element';
|
|
6
|
+
import { StyleSheet } from '@openelement/core/style-sheet';
|
|
7
|
+
export const tagName = 'open-badge';
|
|
8
|
+
const sheet = new StyleSheet();
|
|
9
|
+
sheet.replaceSync(`
|
|
10
|
+
:host {
|
|
11
|
+
display: inline-flex;
|
|
12
|
+
vertical-align: middle;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.badge {
|
|
16
|
+
display: inline-flex;
|
|
17
|
+
align-items: center;
|
|
18
|
+
justify-content: center;
|
|
19
|
+
min-height: var(--size-6);
|
|
20
|
+
padding: var(--badge-padding-y) var(--badge-padding-x);
|
|
21
|
+
border: var(--border-size-1) solid var(--border);
|
|
22
|
+
border-radius: var(--badge-radius);
|
|
23
|
+
background: var(--bg-surface);
|
|
24
|
+
color: var(--text-secondary);
|
|
25
|
+
font-family: var(--font-mono);
|
|
26
|
+
font-size: var(--badge-font-size);
|
|
27
|
+
font-weight: var(--font-weight-8);
|
|
28
|
+
line-height: var(--font-lineheight-3);
|
|
29
|
+
letter-spacing: 0;
|
|
30
|
+
white-space: nowrap;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.badge--brand {
|
|
34
|
+
border-color: var(--brand);
|
|
35
|
+
background: var(--brand-subtle);
|
|
36
|
+
color: var(--brand);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.badge--success {
|
|
40
|
+
border-color: var(--success);
|
|
41
|
+
background: var(--success-subtle);
|
|
42
|
+
color: var(--success);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.badge--warning {
|
|
46
|
+
border-color: var(--warning);
|
|
47
|
+
background: var(--warning-subtle);
|
|
48
|
+
color: var(--warning);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.badge--info {
|
|
52
|
+
border-color: var(--info);
|
|
53
|
+
background: var(--info-subtle);
|
|
54
|
+
color: var(--info);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.badge--sm {
|
|
58
|
+
min-height: var(--size-5);
|
|
59
|
+
padding-inline: var(--size-2);
|
|
60
|
+
}
|
|
61
|
+
`);
|
|
62
|
+
export class OpenBadge extends OpenElement {
|
|
63
|
+
static styles = [
|
|
64
|
+
sheet
|
|
65
|
+
];
|
|
66
|
+
static observedAttributes = [
|
|
67
|
+
'tone',
|
|
68
|
+
'size'
|
|
69
|
+
];
|
|
70
|
+
render() {
|
|
71
|
+
const tone = this._getStr('tone', 'neutral');
|
|
72
|
+
const size = this._getStr('size', 'md');
|
|
73
|
+
return <span className={`badge badge--${tone} badge--${size}`} part='badge'>
|
|
74
|
+
<slot></slot>
|
|
75
|
+
</span>;
|
|
76
|
+
}
|
|
77
|
+
_getStr(attr, def) {
|
|
78
|
+
const camel = attr.replace(/-([a-z])/g, (_, c)=>c.toUpperCase());
|
|
79
|
+
const prop = this[camel] ?? this[attr];
|
|
80
|
+
if (prop !== undefined && prop !== null) return String(prop);
|
|
81
|
+
return this.getAttribute(attr) || def;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
export default OpenBadge;
|
|
85
|
+
if (typeof customElements !== 'undefined' && !customElements.get(tagName)) {
|
|
86
|
+
customElements.define(tagName, OpenBadge);
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy91aS9zcmMvb3Blbi1iYWRnZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBqc3hJbXBvcnRTb3VyY2UgQG9wZW5lbGVtZW50L2NvcmUgKi9cbi8qKlxuICogQG9wZW5lbGVtZW50L3VpIC0gb3Blbi1iYWRnZVxuICpcbiAqIENvbXBhY3Qgc3RhdHVzIGJhZGdlIGJhY2tlZCBieSBPcGVuIFByb3BzIHNlbWFudGljIHRva2Vucy5cbiAqL1xuXG5pbXBvcnQgeyBPcGVuRWxlbWVudCB9IGZyb20gJ0BvcGVuZWxlbWVudC9lbGVtZW50JztcbmltcG9ydCB7IFN0eWxlU2hlZXQsIHR5cGUgU3R5bGVTaGVldExpa2UgfSBmcm9tICdAb3BlbmVsZW1lbnQvY29yZS9zdHlsZS1zaGVldCc7XG5cbmV4cG9ydCBjb25zdCB0YWdOYW1lID0gJ29wZW4tYmFkZ2UnO1xuXG5jb25zdCBzaGVldDogU3R5bGVTaGVldExpa2UgPSBuZXcgU3R5bGVTaGVldCgpO1xuc2hlZXQucmVwbGFjZVN5bmMoYFxuICA6aG9zdCB7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuXG4gIC5iYWRnZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBtaW4taGVpZ2h0OiB2YXIoLS1zaXplLTYpO1xuICAgIHBhZGRpbmc6IHZhcigtLWJhZGdlLXBhZGRpbmcteSkgdmFyKC0tYmFkZ2UtcGFkZGluZy14KTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlci1zaXplLTEpIHNvbGlkIHZhcigtLWJvcmRlcik7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYmFkZ2UtcmFkaXVzKTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1zdXJmYWNlKTtcbiAgICBjb2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LW1vbm8pO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tYmFkZ2UtZm9udC1zaXplKTtcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtOCk7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWZvbnQtbGluZWhlaWdodC0zKTtcbiAgICBsZXR0ZXItc3BhY2luZzogMDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG5cbiAgLmJhZGdlLS1icmFuZCB7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1icmFuZCk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tYnJhbmQtc3VidGxlKTtcbiAgICBjb2xvcjogdmFyKC0tYnJhbmQpO1xuICB9XG5cbiAgLmJhZGdlLS1zdWNjZXNzIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLXN1Y2Nlc3MpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLXN1Y2Nlc3Mtc3VidGxlKTtcbiAgICBjb2xvcjogdmFyKC0tc3VjY2Vzcyk7XG4gIH1cblxuICAuYmFkZ2UtLXdhcm5pbmcge1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0td2FybmluZyk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0td2FybmluZy1zdWJ0bGUpO1xuICAgIGNvbG9yOiB2YXIoLS13YXJuaW5nKTtcbiAgfVxuXG4gIC5iYWRnZS0taW5mbyB7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pbmZvKTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pbmZvLXN1YnRsZSk7XG4gICAgY29sb3I6IHZhcigtLWluZm8pO1xuICB9XG5cbiAgLmJhZGdlLS1zbSB7XG4gICAgbWluLWhlaWdodDogdmFyKC0tc2l6ZS01KTtcbiAgICBwYWRkaW5nLWlubGluZTogdmFyKC0tc2l6ZS0yKTtcbiAgfVxuYCk7XG5cbmV4cG9ydCBjbGFzcyBPcGVuQmFkZ2UgZXh0ZW5kcyBPcGVuRWxlbWVudCB7XG4gIHN0YXRpYyBvdmVycmlkZSBzdHlsZXMgPSBbc2hlZXRdO1xuICBzdGF0aWMgb3ZlcnJpZGUgb2JzZXJ2ZWRBdHRyaWJ1dGVzID0gWyd0b25lJywgJ3NpemUnXTtcblxuICBvdmVycmlkZSByZW5kZXIoKTogUmV0dXJuVHlwZTx0eXBlb2YgT3BlbkVsZW1lbnQucHJvdG90eXBlLnJlbmRlcj4ge1xuICAgIGNvbnN0IHRvbmUgPSB0aGlzLl9nZXRTdHIoJ3RvbmUnLCAnbmV1dHJhbCcpO1xuICAgIGNvbnN0IHNpemUgPSB0aGlzLl9nZXRTdHIoJ3NpemUnLCAnbWQnKTtcbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgYmFkZ2UgYmFkZ2UtLSR7dG9uZX0gYmFkZ2UtLSR7c2l6ZX1gfSBwYXJ0PSdiYWRnZSc+XG4gICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0U3RyKGF0dHI6IHN0cmluZywgZGVmOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNhbWVsID0gYXR0ci5yZXBsYWNlKC8tKFthLXpdKS9nLCAoXywgYzogc3RyaW5nKSA9PiBjLnRvVXBwZXJDYXNlKCkpO1xuICAgIGNvbnN0IHByb3AgPSAodGhpcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbY2FtZWxdID8/XG4gICAgICAodGhpcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbYXR0cl07XG4gICAgaWYgKHByb3AgIT09IHVuZGVmaW5lZCAmJiBwcm9wICE9PSBudWxsKSByZXR1cm4gU3RyaW5nKHByb3ApO1xuICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZShhdHRyKSB8fCBkZWY7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgT3BlbkJhZGdlO1xuXG5pZiAodHlwZW9mIGN1c3RvbUVsZW1lbnRzICE9PSAndW5kZWZpbmVkJyAmJiAhY3VzdG9tRWxlbWVudHMuZ2V0KHRhZ05hbWUpKSB7XG4gIGN1c3RvbUVsZW1lbnRzLmRlZmluZSh0YWdOYW1lLCBPcGVuQmFkZ2UpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVDQUF1QyxHQUN2Qzs7OztDQUlDLEdBRUQsU0FBUyxXQUFXLFFBQVEsdUJBQXVCO0FBQ25ELFNBQVMsVUFBVSxRQUE2QixnQ0FBZ0M7QUFFaEYsT0FBTyxNQUFNLFVBQVUsYUFBYTtBQUVwQyxNQUFNLFFBQXdCLElBQUk7QUFDbEMsTUFBTSxXQUFXLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9EbkIsQ0FBQztBQUVELE9BQU8sTUFBTSxrQkFBa0I7RUFDN0IsT0FBZ0IsU0FBUztJQUFDO0dBQU0sQ0FBQztFQUNqQyxPQUFnQixxQkFBcUI7SUFBQztJQUFRO0dBQU8sQ0FBQztFQUU3QyxTQUEwRDtJQUNqRSxNQUFNLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRO0lBQ2xDLE1BQU0sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVE7SUFDbEMsUUFDRyxLQUFLLFdBQVcsQ0FBQyxhQUFhLEVBQUUsS0FBSyxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssUUFBUTtRQUNuRSxDQUFDLE9BQU8sS0FBSztNQUNmLEVBQUU7RUFFTjtFQUVRLFFBQVEsSUFBWSxFQUFFLEdBQVcsRUFBVTtJQUNqRCxNQUFNLFFBQVEsS0FBSyxPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBYyxFQUFFLFdBQVc7SUFDdkUsTUFBTSxPQUFPLEFBQUMsSUFBSSxBQUE0QixDQUFDLE1BQU0sSUFDbkQsQUFBQyxJQUFJLEFBQTRCLENBQUMsS0FBSztJQUN6QyxJQUFJLFNBQVMsYUFBYSxTQUFTLE1BQU0sT0FBTyxPQUFPO0lBQ3ZELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTO0VBQ3BDO0FBQ0Y7QUFFQSxlQUFlLFVBQVU7QUFFekIsSUFBSSxPQUFPLG1CQUFtQixlQUFlLENBQUMsZUFBZSxHQUFHLENBQUMsVUFBVTtFQUN6RSxlQUFlLE1BQU0sQ0FBQyxTQUFTO0FBQ2pDIn0=
|
|
@@ -0,0 +1,14 @@
|
|
|
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 { type StyleSheetLike } from '@openelement/core/style-sheet';
|
|
7
|
+
export declare const tagName: 'open-brand-mark';
|
|
8
|
+
declare const sheet: StyleSheetLike;
|
|
9
|
+
export declare class OpenBrandMark extends OpenElement {
|
|
10
|
+
static override styles: [];
|
|
11
|
+
static override observedAttributes: [string, string];
|
|
12
|
+
override render(): ReturnType<typeof OpenElement.prototype.render>;
|
|
13
|
+
}
|
|
14
|
+
export default OpenBrandMark;
|