@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.
Files changed (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +78 -0
  3. package/package.json +142 -0
  4. package/src/daisy-classes.d.ts +7 -0
  5. package/src/daisy-classes.js +770 -0
  6. package/src/index.d.ts +57 -0
  7. package/src/index.js +62 -0
  8. package/src/manifest.d.ts +8 -0
  9. package/src/manifest.js +255 -0
  10. package/src/open-badge.d.ts +15 -0
  11. package/src/open-badge.js +88 -0
  12. package/src/open-brand-mark.d.ts +14 -0
  13. package/src/open-brand-mark.js +107 -0
  14. package/src/open-button.d.ts +38 -0
  15. package/src/open-button.js +219 -0
  16. package/src/open-callout.d.ts +26 -0
  17. package/src/open-callout.js +99 -0
  18. package/src/open-card.d.ts +33 -0
  19. package/src/open-card.js +107 -0
  20. package/src/open-code-block.d.ts +44 -0
  21. package/src/open-code-block.js +267 -0
  22. package/src/open-dialog.d.ts +47 -0
  23. package/src/open-dialog.js +235 -0
  24. package/src/open-dropdown.d.ts +25 -0
  25. package/src/open-dropdown.js +45 -0
  26. package/src/open-hero-ping.d.ts +27 -0
  27. package/src/open-hero-ping.js +136 -0
  28. package/src/open-input.d.ts +51 -0
  29. package/src/open-input.js +233 -0
  30. package/src/open-lab-panel.d.ts +16 -0
  31. package/src/open-lab-panel.js +151 -0
  32. package/src/open-lab-stage.d.ts +15 -0
  33. package/src/open-lab-stage.js +622 -0
  34. package/src/open-layout.d.ts +111 -0
  35. package/src/open-layout.js +1377 -0
  36. package/src/open-modal.d.ts +25 -0
  37. package/src/open-modal.js +48 -0
  38. package/src/open-props-tokens.d.ts +7 -0
  39. package/src/open-props-tokens.js +474 -0
  40. package/src/open-standards-visual.d.ts +20 -0
  41. package/src/open-standards-visual.js +425 -0
  42. package/src/open-step-card.d.ts +34 -0
  43. package/src/open-step-card.js +117 -0
  44. package/src/open-tabs.d.ts +27 -0
  45. package/src/open-tabs.js +56 -0
  46. package/src/open-theme-toggle.d.ts +38 -0
  47. 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;
@@ -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;