@sylwellsoftware/fray 0.1.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 (94) hide show
  1. package/EXPERIMENTAL.md +75 -0
  2. package/LICENSE +55 -0
  3. package/NOTICE +2 -0
  4. package/README.md +521 -0
  5. package/dist/Components/Placeholder.d.ts +14 -0
  6. package/dist/Components/Placeholder.d.ts.map +1 -0
  7. package/dist/Components/component.d.ts +187 -0
  8. package/dist/Components/component.d.ts.map +1 -0
  9. package/dist/Components/controlUtils.d.ts +20 -0
  10. package/dist/Components/controlUtils.d.ts.map +1 -0
  11. package/dist/Components/data/descriptionList.d.ts +21 -0
  12. package/dist/Components/data/descriptionList.d.ts.map +1 -0
  13. package/dist/Components/data/listview/listview.d.ts +39 -0
  14. package/dist/Components/data/listview/listview.d.ts.map +1 -0
  15. package/dist/Components/data/selectionhandler.d.ts +68 -0
  16. package/dist/Components/data/selectionhandler.d.ts.map +1 -0
  17. package/dist/Components/data/table/DataTable.d.ts +72 -0
  18. package/dist/Components/data/table/DataTable.d.ts.map +1 -0
  19. package/dist/Components/data/table/FilterPanel.d.ts +35 -0
  20. package/dist/Components/data/table/FilterPanel.d.ts.map +1 -0
  21. package/dist/Components/data/table/TableHeader.d.ts +21 -0
  22. package/dist/Components/data/table/TableHeader.d.ts.map +1 -0
  23. package/dist/Components/data/table/TableHeaderCell.d.ts +39 -0
  24. package/dist/Components/data/table/TableHeaderCell.d.ts.map +1 -0
  25. package/dist/Components/data/table/tableQuery.d.ts +25 -0
  26. package/dist/Components/data/table/tableQuery.d.ts.map +1 -0
  27. package/dist/Components/data/treeview/treeitem.d.ts +20 -0
  28. package/dist/Components/data/treeview/treeitem.d.ts.map +1 -0
  29. package/dist/Components/data/treeview/treeview.d.ts +42 -0
  30. package/dist/Components/data/treeview/treeview.d.ts.map +1 -0
  31. package/dist/Components/dialog/dialog.d.ts +37 -0
  32. package/dist/Components/dialog/dialog.d.ts.map +1 -0
  33. package/dist/Components/layout/panel.d.ts +20 -0
  34. package/dist/Components/layout/panel.d.ts.map +1 -0
  35. package/dist/Components/layout/sidebar.d.ts +18 -0
  36. package/dist/Components/layout/sidebar.d.ts.map +1 -0
  37. package/dist/Components/layout/splitView.d.ts +18 -0
  38. package/dist/Components/layout/splitView.d.ts.map +1 -0
  39. package/dist/Components/layout/tabpanel/tab.d.ts +12 -0
  40. package/dist/Components/layout/tabpanel/tab.d.ts.map +1 -0
  41. package/dist/Components/layout/tabpanel/tabline.d.ts +32 -0
  42. package/dist/Components/layout/tabpanel/tabline.d.ts.map +1 -0
  43. package/dist/Components/layout/tabpanel/tabpanel.d.ts +34 -0
  44. package/dist/Components/layout/tabpanel/tabpanel.d.ts.map +1 -0
  45. package/dist/Components/lineinputs/checkbox/Checkbox.d.ts +35 -0
  46. package/dist/Components/lineinputs/checkbox/Checkbox.d.ts.map +1 -0
  47. package/dist/Components/lineinputs/checkbox/QuadCheckbox.d.ts +12 -0
  48. package/dist/Components/lineinputs/checkbox/QuadCheckbox.d.ts.map +1 -0
  49. package/dist/Components/lineinputs/checkbox/TriCheckbox.d.ts +12 -0
  50. package/dist/Components/lineinputs/checkbox/TriCheckbox.d.ts.map +1 -0
  51. package/dist/Components/lineinputs/dropdown.d.ts +37 -0
  52. package/dist/Components/lineinputs/dropdown.d.ts.map +1 -0
  53. package/dist/Components/lineinputs/textbox.d.ts +36 -0
  54. package/dist/Components/lineinputs/textbox.d.ts.map +1 -0
  55. package/dist/Components/lineinputs/toggle.d.ts +30 -0
  56. package/dist/Components/lineinputs/toggle.d.ts.map +1 -0
  57. package/dist/Components/menu/button.d.ts +24 -0
  58. package/dist/Components/menu/button.d.ts.map +1 -0
  59. package/dist/Components/menu/toolbar.d.ts +15 -0
  60. package/dist/Components/menu/toolbar.d.ts.map +1 -0
  61. package/dist/Components/status/progressBar.d.ts +21 -0
  62. package/dist/Components/status/progressBar.d.ts.map +1 -0
  63. package/dist/button-BRDkmR1C.js +203 -0
  64. package/dist/button-BRDkmR1C.js.map +1 -0
  65. package/dist/experimental.d.ts +16 -0
  66. package/dist/experimental.d.ts.map +1 -0
  67. package/dist/experimental.js +1361 -0
  68. package/dist/experimental.js.map +1 -0
  69. package/dist/index.d.ts +23 -0
  70. package/dist/index.d.ts.map +1 -0
  71. package/dist/index.js +1014 -0
  72. package/dist/index.js.map +1 -0
  73. package/dist/jsx-dev-runtime-CarwHDyL.js +1155 -0
  74. package/dist/jsx-dev-runtime-CarwHDyL.js.map +1 -0
  75. package/dist/jsx-dev-runtime.d.ts +2 -0
  76. package/dist/jsx-dev-runtime.d.ts.map +1 -0
  77. package/dist/jsx-dev-runtime.js +6 -0
  78. package/dist/jsx-dev-runtime.js.map +1 -0
  79. package/dist/jsx-runtime.d.ts +26 -0
  80. package/dist/jsx-runtime.d.ts.map +1 -0
  81. package/dist/jsx-runtime.js +9 -0
  82. package/dist/jsx-runtime.js.map +1 -0
  83. package/dist/runtime.d.ts +29 -0
  84. package/dist/runtime.d.ts.map +1 -0
  85. package/dist/styling/baseStyleDefinitions.d.ts +154 -0
  86. package/dist/styling/baseStyleDefinitions.d.ts.map +1 -0
  87. package/dist/styling/styleRegistry.d.ts +19 -0
  88. package/dist/styling/styleRegistry.d.ts.map +1 -0
  89. package/dist/util/filterMode.d.ts +13 -0
  90. package/dist/util/filterMode.d.ts.map +1 -0
  91. package/package.json +83 -0
  92. package/themes/README.md +30 -0
  93. package/themes/dark.css +39 -0
  94. package/themes/light.css +39 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/Components/layout/tabpanel/tab.ts","../src/Components/layout/tabpanel/tabline.tsx","../src/Components/layout/tabpanel/tabpanel.tsx","../src/Components/layout/panel.tsx","../src/Components/layout/sidebar.tsx","../src/Components/layout/splitView.tsx","../src/Components/data/descriptionList.tsx","../src/Components/lineinputs/checkbox/QuadCheckbox.ts","../src/Components/lineinputs/checkbox/TriCheckbox.ts","../src/Components/lineinputs/dropdown.tsx","../src/Components/lineinputs/textbox.tsx","../src/Components/lineinputs/toggle.tsx","../src/Components/menu/toolbar.tsx","../src/Components/status/progressBar.tsx"],"sourcesContent":["import {Component} from '../../component.js'\nimport type {ComponentProps, FrayChild, Key} from '../../component.js'\n\nexport interface TabProps extends ComponentProps {\n id?: Key\n label?: FrayChild\n disabled?: boolean\n}\n\n/** Declarative content marker consumed by TabPanel. */\nexport class Tab extends Component<TabProps> {\n render(): FrayChild {\n return this.props.children ?? []\n }\n}\n","import {Component, css} from '../../component.js'\nimport type {ComponentProps, FrayChild, Key} from '../../component.js'\nimport {\n componentClass,\n createValueEmitter,\n invoke,\n} from '../../controlUtils.js'\nimport type {ValueControlProps, ValueEmitter} from '../../controlUtils.js'\n\nexport interface TabLineTab {\n id: Key\n label?: FrayChild\n disabled?: boolean\n}\n\nexport interface TabLineProps extends ValueControlProps<Key | null> {\n tabs?: readonly TabLineTab[]\n activeTabEmitter?: ValueEmitter<Key | null>\n initialActiveTabId?: Key | null\n label?: string\n baseId?: string\n onChange?: (value: Key, event: Event | null) => void\n}\n\nexport class TabLine extends Component<TabLineProps> {\n readonly valueEmitter: ValueEmitter<Key | null>\n readonly activeTabEmitter: ValueEmitter<Key | null>\n\n constructor(props: TabLineProps = {}) {\n super(props)\n const tabs = props.tabs ?? []\n validateTabs(tabs)\n const emitterProps: TabLineProps = {...props}\n if (emitterProps.valueEmitter == null && props.activeTabEmitter != null) {\n emitterProps.valueEmitter = props.activeTabEmitter\n }\n if (emitterProps.defaultValue == null && props.initialActiveTabId != null) {\n emitterProps.defaultValue = props.initialActiveTabId\n }\n this.valueEmitter = createValueEmitter<Key | null>(\n this,\n emitterProps,\n tabs.find((tab) => !tab.disabled)?.id ?? null,\n 'active tab',\n )\n this.activeTabEmitter = this.valueEmitter\n }\n\n initialize(): void {\n this.watch(this.valueEmitter)\n }\n\n selectTab(tab: TabLineTab | undefined, event: Event | null = null): void {\n if (tab == null || tab.disabled) return\n this.valueEmitter.set(tab.id, 'tab selected')\n invoke(this.props.onChange, tab.id, event)\n }\n\n render(): FrayChild {\n const {tabs = [], label = 'Sections', baseId = 'fray-tabs'} = this.props\n validateTabs(tabs)\n const activeTabId = this.valueEmitter.get()\n\n const Host = this.Host\n return <Host\n role=\"tablist\"\n className={componentClass(this.props) || null}\n aria-label={label}\n >\n {tabs.map((tab, index) => <button\n key={String(tab.id)}\n id={tabButtonId(baseId, tab.id)}\n type=\"button\"\n role=\"tab\"\n disabled={Boolean(tab.disabled)}\n data-part=\"tab\"\n aria-selected={Object.is(activeTabId, tab.id) ? 'true' : 'false'}\n aria-controls={tabPanelId(baseId, tab.id)}\n tabIndex={Object.is(activeTabId, tab.id) ? 0 : -1}\n onClick={(event: MouseEvent) => this.selectTab(tab, event)}\n onKeyDown={(event: KeyboardEvent) => this.handleKeyDown(event, index, tabs)}\n >{tab.label ?? String(tab.id)}</button>)}\n </Host>\n }\n\n handleKeyDown(event: KeyboardEvent, index: number, tabs: readonly TabLineTab[]): void {\n const enabled = tabs\n .map((tab, tabIndex) => ({tab, tabIndex}))\n .filter(({tab}) => !tab.disabled)\n if (enabled.length === 0) return\n const current = Math.max(0,\n enabled.findIndex(({tabIndex}) => tabIndex === index))\n let next: {tab: TabLineTab; tabIndex: number} | undefined\n if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {\n next = enabled[(current + 1) % enabled.length]\n } else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {\n next = enabled[(current - 1 + enabled.length) % enabled.length]\n } else if (event.key === 'Home') next = enabled[0]\n else if (event.key === 'End') next = enabled.at(-1)\n else return\n\n if (next == null) return\n event.preventDefault()\n this.selectTab(next.tab, event)\n if (this.dom instanceof Element) {\n const tab = this.dom.querySelectorAll<HTMLElement>('[role=\"tab\"]')[next.tabIndex]\n tab?.focus()\n }\n }\n\n static override hostName = 'tab-line'\n static override standaloneHostName = 'tab-line'\n\n static baseStyles = [\n ['& > [data-part=\"tab\"]', ['uiline', 'button']],\n ]\n\n static css = css`\n & {\n display: flex;\n flex-flow: row wrap;\n padding-top: 3px;\n background: var(--tabline-bg, #f5f5f5);\n }\n\n & > [data-part=\"tab\"] {\n border-radius: var(--ui-border-radius) var(--ui-border-radius) 0 0;\n }\n\n & > [data-part=\"tab\"][aria-selected=\"true\"] {\n background: var(--tab-bg-active, var(--panel-bg, #fff));\n }\n `\n}\n\nexport function tabButtonId(baseId: string, id: Key): string {\n return `${baseId}-tab-${safeId(id)}`\n}\n\nexport function tabPanelId(baseId: string, id: Key): string {\n return `${baseId}-panel-${safeId(id)}`\n}\n\nfunction safeId(value: Key): string {\n return encodeURIComponent(String(value)).replaceAll('%', '-')\n}\n\nfunction validateTabs(tabs: unknown): asserts tabs is readonly TabLineTab[] {\n if (!Array.isArray(tabs)) throw new TypeError('TabLine tabs must be an array')\n const ids = new Set<Key>()\n for (const tab of tabs) {\n if (tab == null || tab.id == null) throw new TypeError('Each tab requires an id')\n if (ids.has(tab.id)) throw new Error(`Duplicate tab id: ${String(tab.id)}`)\n ids.add(tab.id)\n }\n}\n","import {Component, css, isVNode} from '../../component.js'\nimport type {ComponentProps, FrayChild, Key} from '../../component.js'\nimport {\n componentClass,\n controlId,\n createValueEmitter,\n} from '../../controlUtils.js'\nimport type {ValueControlProps, ValueEmitter} from '../../controlUtils.js'\nimport {Tab} from './tab.js'\nimport type {TabProps} from './tab.js'\nimport {TabLine, tabButtonId, tabPanelId} from './tabline.js'\n\nexport interface TabDefinition {\n id: Key\n label?: FrayChild\n disabled?: boolean\n content?: FrayChild\n component?: FrayChild\n}\n\nexport interface TabPanelProps extends ValueControlProps<Key | null> {\n id?: string | number | null\n tabs?: readonly TabDefinition[]\n activeTabEmitter?: ValueEmitter<Key | null>\n initialActiveTabId?: Key | null\n label?: string\n onChange?: (value: Key, event: Event | null) => void\n}\n\ninterface NormalizedTab {\n id: Key\n label: FrayChild\n disabled: boolean\n content: FrayChild\n}\n\nexport class TabPanel extends Component<TabPanelProps> {\n readonly valueEmitter: ValueEmitter<Key | null>\n readonly activeTabEmitter: ValueEmitter<Key | null>\n readonly baseId: string\n\n constructor(props: TabPanelProps = {}) {\n super(props)\n const tabs = extractTabs(props)\n const emitterProps: TabPanelProps = {...props}\n if (emitterProps.valueEmitter == null && props.activeTabEmitter != null) {\n emitterProps.valueEmitter = props.activeTabEmitter\n }\n if (emitterProps.defaultValue == null && props.initialActiveTabId != null) {\n emitterProps.defaultValue = props.initialActiveTabId\n }\n this.valueEmitter = createValueEmitter<Key | null>(\n this,\n emitterProps,\n tabs.find((tab) => !tab.disabled)?.id ?? null,\n 'active tab',\n )\n this.activeTabEmitter = this.valueEmitter\n this.baseId = controlId('tabs', props.id)\n }\n\n initialize(): void {\n const tabs = extractTabs(this.props)\n if (!tabs.some(({id}) => Object.is(id, this.valueEmitter.get()))) {\n this.valueEmitter.set(tabs.find((tab) => !tab.disabled)?.id ?? null)\n }\n this.watch(this.valueEmitter)\n }\n\n setProps(nextProps: TabPanelProps): this {\n super.setProps(nextProps)\n const tabs = extractTabs(nextProps)\n if (!tabs.some(({id}) => Object.is(id, this.valueEmitter.get()))) {\n this.valueEmitter.set(tabs.find((tab) => !tab.disabled)?.id ?? null)\n }\n return this\n }\n\n render(): FrayChild {\n const tabs = extractTabs(this.props)\n const selected = tabs.find(({id}) => Object.is(id, this.valueEmitter.get()))\n ?? tabs.find((tab) => !tab.disabled)\n ?? null\n const Host = this.Host\n return <Host\n id={this.baseId}\n className={componentClass(this.props) || null}\n >\n <TabLine\n key=\"tab-list\"\n tabs={tabs.map(({id, label, disabled}) => ({id, label, disabled}))}\n valueEmitter={this.valueEmitter}\n baseId={this.baseId}\n {...(this.props.label == null ? {} : {label: this.props.label})}\n {...(this.props.onChange == null ? {} : {onChange: this.props.onChange})}\n />\n {selected == null ? null : <div\n key={String(selected.id)}\n id={tabPanelId(this.baseId, selected.id)}\n role=\"tabpanel\"\n data-part=\"content\"\n aria-labelledby={tabButtonId(this.baseId, selected.id)}\n tabIndex={0}\n >{selected.content}</div>}\n </Host>\n }\n\n static dependencies = [TabLine, Tab]\n\n static override hostName = 'tab-panel'\n static override standaloneHostName = 'tab-panel'\n\n static css = css`\n & {\n display: flex;\n flex-direction: column;\n width: 100%;\n min-height: 0;\n overflow: hidden;\n background: var(--panel-bg, white);\n border-radius: var(--panel-radius, var(--ui-border-radius));\n box-shadow: var(--panel-shadow, none);\n }\n\n & > [data-part=\"content\"] {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: auto;\n background: var(--panel-bg, white);\n }\n `\n}\n\nfunction extractTabs(props: TabPanelProps): NormalizedTab[] {\n const direct = props.tabs ?? []\n if (!Array.isArray(direct)) throw new TypeError('TabPanel tabs must be an array')\n const children = Array.isArray(props.children)\n ? props.children\n : props.children == null ? [] : [props.children]\n const declarative: NormalizedTab[] = children\n .filter((child) => isVNode(child) && child.type === Tab)\n .map((child, index) => {\n if (!isVNode(child)) throw new TypeError('TabPanel children must be Tab nodes')\n // The preceding vnode type check identifies the declarative Tab;\n // its public constructor contract supplies the corresponding props.\n const tabProps = child.props as TabProps\n return {\n id: tabProps.id ?? `tab-${index + 1}`,\n label: tabProps.label ?? `Tab ${index + 1}`,\n disabled: Boolean(tabProps.disabled),\n content: tabProps.children ?? [],\n }\n })\n const tabs: NormalizedTab[] = direct.length > 0\n ? direct.map((tab: TabDefinition) => ({\n ...tab,\n label: tab.label ?? String(tab.id),\n disabled: Boolean(tab.disabled),\n content: tab.content ?? tab.component ?? [],\n }))\n : declarative\n const ids = new Set<Key>()\n for (const tab of tabs) {\n if (tab?.id == null) throw new TypeError('Each tab requires an id')\n if (ids.has(tab.id)) throw new Error(`Duplicate tab id: ${String(tab.id)}`)\n ids.add(tab.id)\n }\n return tabs\n}\n","import {Component, css} from '../component.js'\nimport type {ComponentProps, FrayChild} from '../component.js'\nimport {componentClass, controlId} from '../controlUtils.js'\n\nexport interface PanelProps extends ComponentProps {\n id?: string | number | null\n header?: FrayChild\n toolbar?: FrayChild\n orientation?: 'horizontal' | 'vertical'\n disabled?: boolean\n}\n\nexport class Panel extends Component<PanelProps> {\n readonly panelId: string\n readonly headerId: string\n\n constructor(props: PanelProps = {}) {\n super(props)\n this.panelId = controlId('panel', props.id)\n this.headerId = `${this.panelId}-title`\n }\n\n render() {\n const {\n header = null,\n toolbar = null,\n children = [],\n orientation = 'vertical',\n disabled = false,\n } = this.props\n if (!['horizontal', 'vertical'].includes(orientation)) {\n throw new TypeError('Panel orientation must be horizontal or vertical')\n }\n\n const Host = this.Host\n const title = header == null\n ? null\n : <header data-part=\"header\">\n {typeof header === 'string' || typeof header === 'number'\n ? <h2 id={this.headerId}>{header}</h2>\n : <div id={this.headerId}>{header}</div>}\n </header>\n\n return <Host\n id={this.panelId}\n role={header == null ? null : 'region'}\n className={componentClass(this.props) || null}\n data-orientation={orientation}\n data-disabled={disabled ? '' : null}\n aria-disabled={disabled ? 'true' : null}\n aria-labelledby={header == null ? null : this.headerId}\n >\n {title}\n {toolbar}\n <div data-part=\"content\" data-orientation={orientation}>{children}</div>\n </Host>\n }\n\n static override hostName = 'panel'\n static override standaloneHostName = 'layout-panel'\n\n static baseStyles = [\n ['&', ['panel']],\n ['& > [data-part=\"header\"]', ['sectionheader']],\n ]\n\n static css = css`\n & {\n display: flex;\n flex-direction: column;\n overflow: auto;\n flex: 0 0 auto;\n }\n\n & > [data-part=\"header\"] h2 {\n margin: 0;\n font: inherit;\n }\n\n & > [data-part=\"content\"] {\n display: flex;\n flex: 1;\n overflow: auto;\n padding: var(--panel-padding, 0.75rem);\n gap: var(--spacing-medium, 1rem);\n }\n\n & > [data-part=\"content\"][data-orientation=\"horizontal\"] {\n flex-direction: row;\n }\n\n & > [data-part=\"content\"][data-orientation=\"vertical\"] {\n flex-direction: column;\n }\n `\n}\n","import {Component, css} from '../component.js'\nimport type {ComponentProps, FrayChild} from '../component.js'\nimport {componentClass, controlId} from '../controlUtils.js'\n\nexport interface SidebarProps extends ComponentProps {\n id?: string | number | null\n header?: FrayChild\n toolbar?: FrayChild\n ariaLabel?: string\n}\n\n/** Labelled side region whose content owns vertical scrolling. */\nexport class Sidebar extends Component<SidebarProps> {\n readonly sidebarId: string\n readonly headerId: string\n\n constructor(props: SidebarProps = {}) {\n super(props)\n this.sidebarId = controlId('sidebar', props.id)\n this.headerId = `${this.sidebarId}-title`\n }\n\n render(): FrayChild {\n const {\n header = null,\n toolbar = null,\n ariaLabel,\n children = [],\n } = this.props\n const title = header == null\n ? null\n : <header data-part=\"header\">\n {typeof header === 'string' || typeof header === 'number'\n ? <h2 id={this.headerId}>{header}</h2>\n : <div id={this.headerId}>{header}</div>}\n </header>\n\n return <aside\n id={this.sidebarId}\n className={componentClass(this.props) || undefined}\n data-fray-component=\"sidebar\"\n aria-label={header == null ? ariaLabel : null}\n aria-labelledby={header == null ? null : this.headerId}\n >\n {title}\n {toolbar == null ? null : <div data-part=\"toolbar\">{toolbar}</div>}\n <div data-part=\"content\" tabIndex={0}>{children}</div>\n </aside>\n }\n\n static baseStyles = [\n ['aside[data-fray-component=\"sidebar\"]', ['panel']],\n ['aside[data-fray-component=\"sidebar\"] > [data-part=\"header\"]', ['sectionheader']],\n ]\n\n static css = css`\n aside[data-fray-component=\"sidebar\"] {\n display: flex;\n flex-direction: column;\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n }\n\n aside[data-fray-component=\"sidebar\"] > [data-part=\"header\"],\n aside[data-fray-component=\"sidebar\"] > [data-part=\"toolbar\"] {\n flex: 0 0 auto;\n }\n\n aside[data-fray-component=\"sidebar\"] > [data-part=\"header\"] h2 {\n margin: 0;\n font: inherit;\n }\n\n aside[data-fray-component=\"sidebar\"] > [data-part=\"content\"] {\n flex: 1 1 auto;\n min-width: 0;\n min-height: 0;\n overflow-x: hidden;\n overflow-y: auto;\n }\n `\n}\n","import {Component, css} from '../component.js'\nimport type {ComponentProps, FrayChild} from '../component.js'\nimport {componentClass} from '../controlUtils.js'\n\nexport interface SplitViewProps extends ComponentProps {\n primary?: FrayChild\n secondary?: FrayChild\n direction?: 'horizontal' | 'vertical'\n primarySize?: string\n primaryLabel?: string\n secondaryLabel?: string\n}\n\n/** Two-pane layout with explicit overflow ownership and no resizing behavior. */\nexport class SplitView extends Component<SplitViewProps> {\n render(): FrayChild {\n const {\n primary = null,\n secondary = null,\n direction = 'horizontal',\n primarySize,\n primaryLabel,\n secondaryLabel,\n } = this.props\n if (direction !== 'horizontal' && direction !== 'vertical') {\n throw new TypeError('SplitView direction must be horizontal or vertical')\n }\n if (primarySize != null && (typeof primarySize !== 'string' || primarySize.length === 0)) {\n throw new TypeError('SplitView primarySize must be a non-empty CSS size')\n }\n const Host = this.Host\n return <Host\n className={componentClass(this.props) || null}\n data-direction={direction}\n style={primarySize == null ? undefined : {'--split-primary-size': primarySize}}\n >\n <div\n data-part=\"primary\"\n role={primaryLabel == null ? null : 'region'}\n aria-label={primaryLabel}\n >{primary}</div>\n <div\n data-part=\"secondary\"\n role={secondaryLabel == null ? null : 'region'}\n aria-label={secondaryLabel}\n >{secondary ?? this.props.children ?? []}</div>\n </Host>\n }\n\n static override hostName = 'split-view'\n static override standaloneHostName = 'split-view'\n\n static css = css`\n & {\n display: grid;\n flex: 1 1 auto;\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n }\n\n &[data-direction=\"horizontal\"] {\n grid-template-columns:\n var(--split-primary-size, minmax(16rem, 0.8fr))\n minmax(0, 1.2fr);\n }\n\n &[data-direction=\"vertical\"] {\n grid-template-rows:\n var(--split-primary-size, minmax(12rem, 0.8fr))\n minmax(0, 1.2fr);\n }\n\n & > [data-part] {\n min-width: 0;\n min-height: 0;\n overflow: auto;\n }\n\n &[data-direction=\"horizontal\"] > [data-part=\"primary\"] {\n border-inline-end: 1px solid var(--ui-border-color);\n }\n\n &[data-direction=\"vertical\"] > [data-part=\"primary\"] {\n border-block-end: 1px solid var(--ui-border-color);\n }\n `\n}\n","import {Component, css} from '../component.js'\nimport type {ComponentProps, FrayChild} from '../component.js'\nimport {componentClass} from '../controlUtils.js'\n\nexport interface DescriptionItemProps extends ComponentProps {\n term: FrayChild\n value?: FrayChild\n}\n\n/** A term/value group with standards-valid `dl` children. */\nexport class DescriptionItem extends Component<DescriptionItemProps> {\n render(): FrayChild {\n const {term, value, children = []} = this.props\n return <div\n className={componentClass(this.props) || undefined}\n data-fray-component=\"description-item\"\n >\n <dt>{term}</dt>\n <dd>{value ?? children}</dd>\n </div>\n }\n\n static css = css`\n div[data-fray-component=\"description-item\"] {\n display: grid;\n grid-template-columns: minmax(7rem, 0.7fr) minmax(0, 1.3fr);\n gap: var(--spacing-small, 0.5rem);\n padding-block: var(--spacing-small, 0.5rem);\n border-block-end: 1px solid var(--ui-border-color);\n }\n\n div[data-fray-component=\"description-item\"] > dt {\n color: var(--ui-muted-text-color, var(--ui-text-color));\n font-weight: 600;\n }\n\n div[data-fray-component=\"description-item\"] > dd {\n min-width: 0;\n margin: 0;\n overflow-wrap: anywhere;\n }\n\n @media (max-width: 36rem) {\n div[data-fray-component=\"description-item\"] {\n grid-template-columns: minmax(0, 1fr);\n gap: 0.15rem;\n }\n }\n `\n}\n\nexport interface DescriptionListProps extends ComponentProps {\n label?: string\n}\n\n/** Semantic description-list container for compact record summaries. */\nexport class DescriptionList extends Component<DescriptionListProps> {\n render(): FrayChild {\n return <dl\n className={componentClass(this.props) || undefined}\n data-fray-component=\"description-list\"\n aria-label={this.props.label}\n >{this.props.children ?? []}</dl>\n }\n\n static dependencies = [DescriptionItem]\n\n static css = css`\n dl[data-fray-component=\"description-list\"] {\n display: grid;\n margin: 0;\n }\n `\n}\n","import {FilterMode} from '../../../util/filterMode.js'\nimport type {FilterModeValue} from '../../../util/filterMode.js'\nimport {Checkbox} from './Checkbox.js'\nimport type {CheckboxProps, CheckboxSymbol} from './Checkbox.js'\n\nexport type QuadCheckboxProps = Omit<CheckboxProps<FilterModeValue>, 'symbols'>\n\n// QuadCheckbox: (Deny ✖) → (Neutral ☐) → (Prefer ✓) → (Require +)\n// Must have all [+]\n// Must not have any [✖]\n// Should have at least one [✓] (if any are marked [✓])\nexport class QuadCheckbox extends Checkbox<FilterModeValue> {\n static override hostName = 'quad-checkbox'\n static override standaloneHostName = 'quad-checkbox'\n\n static symbols = [\n ['✖', FilterMode.Deny],\n ['☐', FilterMode.Neutral],\n ['✓', FilterMode.Prefer],\n ['+', FilterMode.Require],\n ] as const satisfies readonly CheckboxSymbol<FilterModeValue>[]\n\n static defaultSemanticState = FilterMode.Neutral\n\n constructor(props: QuadCheckboxProps = {}) {\n super({...props, symbols: QuadCheckbox.symbols})\n }\n}\n","import {FilterMode} from '../../../util/filterMode.js'\nimport type {FilterModeValue} from '../../../util/filterMode.js'\nimport {Checkbox} from './Checkbox.js'\nimport type {CheckboxProps, CheckboxSymbol} from './Checkbox.js'\n\nexport type TriCheckboxProps = Omit<CheckboxProps<FilterModeValue>, 'symbols'>\n\nexport class TriCheckbox extends Checkbox<FilterModeValue> {\n static override hostName = 'tri-checkbox'\n static override standaloneHostName = 'tri-checkbox'\n\n static symbols = [\n ['✖', FilterMode.Deny],\n ['☐', FilterMode.Neutral],\n ['✓', FilterMode.Prefer],\n ] as const satisfies readonly CheckboxSymbol<FilterModeValue>[]\n\n static defaultSemanticState = FilterMode.Neutral\n\n constructor(props: TriCheckboxProps = {}) {\n super({...props, symbols: TriCheckbox.symbols})\n }\n}\n","import {Emitter} from '@sylwellsoftware/glue'\nimport type {ReadableEmitter} from '@sylwellsoftware/glue'\nimport {Component, css} from '../component.js'\nimport type {FrayChild} from '../component.js'\nimport {\n assertOptions,\n componentClass,\n controlId,\n createValueEmitter,\n invoke,\n} from '../controlUtils.js'\nimport type {ValueControlProps, ValueEmitter} from '../controlUtils.js'\n\nexport type DropdownValue = string | number\n\nexport interface DropdownOption<TValue extends DropdownValue = string> {\n value: TValue\n label?: FrayChild\n disabled?: boolean\n}\n\nexport interface DropdownProps<TValue extends DropdownValue = string>\n extends ValueControlProps<TValue> {\n id?: string | number | null\n options?: readonly DropdownOption<TValue>[]\n | ReadableEmitter<readonly DropdownOption<TValue>[], unknown>\n label?: FrayChild\n name?: string\n disabled?: boolean\n required?: boolean\n error?: unknown\n placeholder?: FrayChild\n ariaLabel?: string\n onChange?: (value: TValue, event: Event) => void\n}\n\nexport class Dropdown<TValue extends DropdownValue = string>\n extends Component<DropdownProps<TValue>> {\n readonly inputId: string\n readonly errorId: string\n readonly optionsEmitter: ReadableEmitter<readonly DropdownOption<TValue>[], unknown>\n readonly valueEmitter: ValueEmitter<TValue>\n private readonly ownsOptionsEmitter: boolean\n\n constructor(props: DropdownProps<TValue> = {}) {\n super(props)\n this.inputId = controlId('dropdown', props.id)\n this.errorId = `${this.inputId}-error`\n const suppliedOptions = props.options ?? []\n if (isReadableEmitter<readonly DropdownOption<TValue>[]>(suppliedOptions)) {\n this.optionsEmitter = suppliedOptions\n this.ownsOptionsEmitter = false\n } else {\n assertOptions<DropdownOption<TValue>>(suppliedOptions)\n this.optionsEmitter = new Emitter<readonly DropdownOption<TValue>[]>(suppliedOptions, {\n owner: this,\n purpose: 'dropdown options',\n })\n this.ownsOptionsEmitter = true\n }\n // The empty string is the DOM select's no-option sentinel. It is only\n // observed when no controlled/default value and no option are present.\n const firstValue = this.optionsEmitter.get()[0]?.value ?? '' as TValue\n this.valueEmitter = createValueEmitter<TValue>(this, props, firstValue, 'dropdown value')\n }\n\n initialize(): void {\n this.watch(this.valueEmitter, this.optionsEmitter)\n }\n\n render(): FrayChild {\n const {\n label,\n name,\n disabled = false,\n required = false,\n error = null,\n placeholder = 'Select…',\n ariaLabel,\n onChange,\n } = this.props\n const options = this.optionsEmitter.get() ?? []\n assertOptions<DropdownOption<TValue>>(options)\n const currentValue = this.valueEmitter.get()\n\n const Host = this.Host\n return <Host\n className={componentClass(this.props) || null}\n data-disabled={disabled ? '' : null}\n data-required={required ? '' : null}\n data-error={error == null ? null : ''}\n >\n {label == null ? null : <label htmlFor={this.inputId}>{label}</label>}\n <select\n id={this.inputId}\n name={name}\n value={currentValue == null ? '' : String(currentValue)}\n disabled={disabled}\n required={required}\n aria-label={label == null ? ariaLabel : null}\n aria-invalid={error == null ? null : 'true'}\n aria-describedby={error == null ? null : this.errorId}\n onChange={(event: Event) => {\n const raw = eventValue(event, 'dropdown change')\n const option = options.find(({value}) => String(value) === raw)\n // A declared option restores TValue; raw is the fallback for\n // JavaScript callers that mutate the select outside that list.\n const nextValue = option?.value ?? raw as TValue\n this.valueEmitter.set(nextValue, 'dropdown selection')\n invoke(onChange, nextValue, event)\n }}\n >\n {currentValue == null || currentValue === ''\n ? <option value=\"\" disabled={required} selected={true}>{placeholder}</option>\n : null}\n {options.map((option) => {\n if (option == null || !Object.hasOwn(option, 'value')) {\n throw new TypeError('Dropdown options require value and label fields')\n }\n return <option\n key={String(option.value)}\n value={String(option.value)}\n disabled={Boolean(option.disabled)}\n selected={Object.is(currentValue, option.value)}\n >{option.label ?? String(option.value)}</option>\n })}\n </select>\n {error == null ? null : <p\n id={this.errorId}\n data-part=\"error\"\n role=\"alert\"\n >{String(error)}</p>}\n </Host>\n }\n\n static override hostName = 'dropdown'\n static override standaloneHostName = 'drop-down'\n\n static baseStyles = [\n ['&', ['labeledinput', 'inputline']],\n ['& > label', ['label']],\n ['& > select', ['input', 'inputline']],\n ['&[data-disabled]', ['disabled']],\n ['&[data-error]', ['error']],\n ]\n\n static css = css`\n & {\n position: relative;\n }\n `\n}\n\nfunction isReadableEmitter<TValue>(value: unknown): value is ReadableEmitter<TValue, unknown> {\n return value != null\n && (typeof value === 'object' || typeof value === 'function')\n && typeof Reflect.get(value, 'get') === 'function'\n && typeof Reflect.get(value, 'subscribe') === 'function'\n}\n\nfunction eventValue(event: Event, purpose: string): string {\n const target = event.currentTarget\n if (target == null || typeof Reflect.get(target, 'value') !== 'string') {\n throw new TypeError(`${purpose} requires a value-bearing event target`)\n }\n return Reflect.get(target, 'value') as string\n}\n","import {Component, css} from '../component.js'\nimport type {FrayChild, Ref} from '../component.js'\nimport {\n componentClass,\n controlId,\n createValueEmitter,\n invoke,\n} from '../controlUtils.js'\nimport type {ValueControlProps, ValueEmitter} from '../controlUtils.js'\n\nexport interface TextboxProps extends ValueControlProps<string> {\n id?: string | number | null\n label?: FrayChild\n placeholder?: string\n type?: string\n name?: string\n disabled?: boolean\n required?: boolean\n readOnly?: boolean\n error?: unknown\n autoComplete?: string\n inputMode?: string\n minLength?: number\n maxLength?: number\n pattern?: string\n ariaLabel?: string\n inputRef?: Ref<HTMLInputElement>\n onInput?: (value: string, event: Event) => void\n onChange?: (value: string, event: Event) => void\n}\n\nexport class Textbox extends Component<TextboxProps> {\n readonly inputId: string\n readonly errorId: string\n readonly valueEmitter: ValueEmitter<string>\n\n constructor(props: TextboxProps = {}) {\n super(props)\n this.inputId = controlId('textbox', props.id)\n this.errorId = `${this.inputId}-error`\n this.valueEmitter = createValueEmitter(this, props, '', 'textbox value')\n }\n\n initialize(): void {\n this.watch(this.valueEmitter)\n }\n\n render(): FrayChild {\n const {\n label,\n placeholder,\n type = 'text',\n name,\n disabled = false,\n required = false,\n readOnly = false,\n error = null,\n autoComplete,\n inputMode,\n minLength,\n maxLength,\n pattern,\n ariaLabel,\n inputRef,\n onInput,\n onChange,\n } = this.props\n const value = this.valueEmitter.get() ?? ''\n\n const Host = this.Host\n return <Host\n className={componentClass(this.props) || null}\n data-disabled={disabled ? '' : null}\n data-required={required ? '' : null}\n data-error={error == null ? null : ''}\n >\n {label == null ? null : <label htmlFor={this.inputId}>{label}</label>}\n <input\n id={this.inputId}\n name={name}\n type={type}\n value={value}\n placeholder={placeholder}\n disabled={disabled}\n required={required}\n readOnly={readOnly}\n autoComplete={autoComplete}\n inputMode={inputMode}\n minLength={minLength}\n maxLength={maxLength}\n pattern={pattern}\n ref={inputRef}\n aria-label={label == null ? ariaLabel : null}\n aria-invalid={error == null ? null : 'true'}\n aria-describedby={error == null ? null : this.errorId}\n onInput={(event: Event) => {\n const nextValue = eventValue(event, 'textbox input')\n this.valueEmitter.set(nextValue, 'textbox input')\n invoke(onInput, nextValue, event)\n }}\n onChange={(event: Event) => invoke(\n onChange,\n eventValue(event, 'textbox change'),\n event,\n )}\n />\n {error == null ? null : <p\n id={this.errorId}\n data-part=\"error\"\n role=\"alert\"\n >{String(error)}</p>}\n </Host>\n }\n\n static override hostName = 'textbox'\n static override standaloneHostName = 'text-box'\n\n static baseStyles = [\n ['&', ['labeledinput', 'inputline']],\n ['& > label', ['label']],\n ['& > input', ['input', 'inputline']],\n ['&[data-disabled]', ['disabled']],\n ['&[data-error]', ['error']],\n ]\n\n static css = css`\n & input {\n cursor: text;\n }\n\n & > [data-part=\"error\"] {\n margin: 0;\n color: var(--error-color, #b00020);\n }\n `\n}\n\nfunction eventValue(event: Event, purpose: string): string {\n const target = event.currentTarget\n if (target == null || typeof Reflect.get(target, 'value') !== 'string') {\n throw new TypeError(`${purpose} requires a value-bearing event target`)\n }\n return Reflect.get(target, 'value') as string\n}\n","import {Component, css} from '../component.js'\nimport type {FrayChild, Key} from '../component.js'\nimport {\n assertOptions,\n componentClass,\n controlId,\n createValueEmitter,\n invoke,\n} from '../controlUtils.js'\nimport type {ValueControlProps, ValueEmitter} from '../controlUtils.js'\n\nexport type ToggleOption<TValue extends Key = string> = readonly [\n value: TValue,\n label: FrayChild,\n]\n\nexport interface ToggleProps<TValue extends Key = string>\n extends ValueControlProps<TValue> {\n id?: string | number | null\n options?: readonly ToggleOption<TValue>[]\n label?: FrayChild\n ariaLabel?: string\n disabled?: boolean\n required?: boolean\n onChange?: (value: TValue, event: Event | null) => void\n}\n\n/** Mutually exclusive button group with radio-group semantics. */\nexport class Toggle<TValue extends Key = string> extends Component<ToggleProps<TValue>> {\n readonly valueEmitter: ValueEmitter<TValue>\n readonly groupId: string\n readonly legendId: string\n\n constructor(props: ToggleProps<TValue> = {}) {\n super(props)\n const options = props.options ?? []\n validateToggleOptions(options)\n const firstValue = options[0]?.[0] ?? null\n // Null is the runtime no-option sentinel and is used only when no\n // controlled/default value exists for an empty option set.\n this.valueEmitter = createValueEmitter<TValue>(\n this,\n props,\n firstValue ?? null as unknown as TValue,\n 'toggle value',\n )\n this.groupId = controlId('toggle', props.id)\n this.legendId = `${this.groupId}-label`\n }\n\n initialize(): void {\n this.watch(this.valueEmitter)\n }\n\n selectOption(value: TValue, event: Event | null = null): void {\n if (this.props.disabled) return\n this.valueEmitter.set(value, 'toggle option selected')\n invoke(this.props.onChange, value, event)\n }\n\n render(): FrayChild {\n const {\n options = [],\n label,\n disabled = false,\n required = false,\n } = this.props\n validateToggleOptions(options)\n const selectedValue = this.valueEmitter.get()\n const selectedIndex = Math.max(0,\n options.findIndex(([value]) => Object.is(value, selectedValue)))\n\n return <fieldset\n id={this.groupId}\n disabled={disabled}\n className={componentClass(this.props) || undefined}\n data-fray-component=\"toggle\"\n data-disabled={disabled ? '' : null}\n aria-required={required ? 'true' : null}\n >\n {label == null ? null : <legend id={this.legendId}>{label}</legend>}\n <div\n data-part=\"options\"\n role=\"radiogroup\"\n aria-label={label == null ? this.props.ariaLabel : null}\n aria-labelledby={label == null ? null : this.legendId}\n >\n {options.map(([value, optionLabel], index) => <button\n key={String(value)}\n type=\"button\"\n role=\"radio\"\n disabled={disabled}\n data-part=\"option\"\n aria-checked={Object.is(selectedValue, value) ? 'true' : 'false'}\n data-value={String(value)}\n tabIndex={index === selectedIndex ? 0 : -1}\n onClick={(event: MouseEvent) => this.selectOption(value, event)}\n onKeyDown={(event: KeyboardEvent) =>\n this.handleKeyDown(event, index, options)}\n >{optionLabel}</button>)}\n </div>\n </fieldset>\n }\n\n handleKeyDown(\n event: KeyboardEvent,\n index: number,\n options: readonly ToggleOption<TValue>[],\n ): void {\n const {key} = event\n let nextIndex\n if (key === 'ArrowRight' || key === 'ArrowDown') nextIndex = (index + 1) % options.length\n else if (key === 'ArrowLeft' || key === 'ArrowUp') {\n nextIndex = (index - 1 + options.length) % options.length\n } else if (key === 'Home') nextIndex = 0\n else if (key === 'End') nextIndex = options.length - 1\n else return\n\n event.preventDefault()\n const option = options[nextIndex]\n if (option == null) return\n this.selectOption(option[0], event)\n if (this.dom instanceof Element) {\n const radio = this.dom.querySelectorAll<HTMLElement>('[role=\"radio\"]')[nextIndex]\n radio?.focus()\n }\n }\n\n static baseStyles = [\n ['fieldset[data-fray-component=\"toggle\"] > [data-part=\"options\"]', ['uiline']],\n ['fieldset[data-fray-component=\"toggle\"] [data-part=\"option\"]', ['uiline', 'button']],\n ]\n\n static css = css`\n fieldset[data-fray-component=\"toggle\"] {\n margin: 0;\n padding: 0;\n border: 0;\n }\n\n fieldset[data-fray-component=\"toggle\"] > [data-part=\"options\"] {\n display: flex;\n padding: 0;\n }\n\n fieldset[data-fray-component=\"toggle\"] [data-part=\"option\"] {\n border-radius: 0;\n }\n\n fieldset[data-fray-component=\"toggle\"] [data-part=\"option\"]:first-child {\n border-radius: var(--ui-border-radius) 0 0 var(--ui-border-radius);\n }\n\n fieldset[data-fray-component=\"toggle\"] [data-part=\"option\"]:last-child {\n border-radius: 0 var(--ui-border-radius) var(--ui-border-radius) 0;\n }\n\n fieldset[data-fray-component=\"toggle\"] [data-part=\"option\"][aria-checked=\"true\"] {\n background: var(--toggle-selected-bg, var(--ui-accent-color));\n color: var(--toggle-selected-text, white);\n }\n `\n}\n\nfunction validateToggleOptions<TValue extends Key>(\n options: unknown,\n): asserts options is readonly ToggleOption<TValue>[] {\n assertOptions<unknown>(options)\n for (const option of options) {\n if (!Array.isArray(option) || option.length < 2) {\n throw new TypeError('Toggle options must be [value, label] tuples')\n }\n }\n}\n","import {Component, css} from '../component.js'\nimport type {ComponentProps, FrayChild} from '../component.js'\nimport {componentClass} from '../controlUtils.js'\n\nexport interface ToolbarProps extends ComponentProps {\n id?: string\n label?: string\n orientation?: 'horizontal' | 'vertical'\n}\n\nexport class Toolbar extends Component<ToolbarProps> {\n render(): FrayChild {\n const {\n children = [],\n id,\n label = 'Actions',\n orientation = 'horizontal',\n } = this.props\n if (!['horizontal', 'vertical'].includes(orientation)) {\n throw new TypeError('Toolbar orientation must be horizontal or vertical')\n }\n\n const Host = this.Host\n return <Host\n id={id}\n role=\"toolbar\"\n className={componentClass(this.props) || null}\n data-orientation={orientation}\n aria-label={label}\n aria-orientation={orientation}\n >{children}</Host>\n }\n\n static override hostName = 'toolbar'\n static override standaloneHostName = 'tool-bar'\n\n static baseStyles = [\n ['&', ['toolbar']],\n ]\n\n static css = css`\n & {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--spacing-small, 0.5rem);\n padding: var(--ui-padding);\n }\n\n &[data-orientation=\"vertical\"] {\n flex-direction: column;\n align-items: stretch;\n }\n `\n}\n","import type {ReadableEmitter} from '@sylwellsoftware/glue'\n\nimport {Component, css} from '../component.js'\nimport type {ComponentProps, FrayChild} from '../component.js'\nimport {componentClass, controlId} from '../controlUtils.js'\n\nexport interface ProgressBarProps extends ComponentProps {\n id?: string | number | null\n label: FrayChild\n value?: number | null\n valueEmitter?: ReadableEmitter<number | null, unknown>\n max?: number\n valueText?: string\n}\n\n/** Labelled native progress indicator with determinate and indeterminate modes. */\nexport class ProgressBar extends Component<ProgressBarProps> {\n readonly progressId: string\n\n constructor(props: ProgressBarProps) {\n super(props)\n this.progressId = controlId('progress', props.id)\n if (props.valueEmitter != null && !isReadableEmitter(props.valueEmitter)) {\n throw new TypeError('ProgressBar valueEmitter must be a readable emitter')\n }\n }\n\n render(): FrayChild {\n const max = this.props.max ?? 100\n if (!Number.isFinite(max) || max <= 0) {\n throw new RangeError('ProgressBar max must be a positive finite number')\n }\n const sourceValue = this.props.valueEmitter == null\n ? (this.props.value ?? null)\n : this.read(this.props.valueEmitter)\n if (sourceValue != null && (!Number.isFinite(sourceValue) || sourceValue < 0)) {\n throw new RangeError('ProgressBar value must be null or a non-negative finite number')\n }\n const value = sourceValue == null ? null : Math.min(sourceValue, max)\n const valueText = this.props.valueText ?? (value == null\n ? 'In progress'\n : `${Math.round(value / max * 100)}%`)\n const Host = this.Host\n return <Host className={componentClass(this.props) || null}>\n <div data-part=\"label-line\">\n <label htmlFor={this.progressId}>{this.props.label}</label>\n <span data-part=\"value\">{valueText}</span>\n </div>\n <progress\n id={this.progressId}\n value={value == null ? undefined : value}\n max={max}\n aria-valuetext={valueText}\n >{valueText}</progress>\n </Host>\n }\n\n static override hostName = 'progress-bar'\n static override standaloneHostName = 'progress-bar'\n\n static css = css`\n & {\n display: grid;\n gap: var(--spacing-small, 0.5rem);\n }\n\n & > [data-part=\"label-line\"] {\n display: flex;\n justify-content: space-between;\n gap: var(--spacing-medium, 1rem);\n }\n\n & > [data-part=\"label-line\"] > label {\n font-weight: 600;\n }\n\n & > progress {\n width: 100%;\n min-height: 0.8rem;\n accent-color: var(--ui-accent-color);\n }\n\n @media (forced-colors: active) {\n & > progress {\n forced-color-adjust: auto;\n }\n }\n `\n}\n\nfunction isReadableEmitter(value: unknown): value is ReadableEmitter<number | null, unknown> {\n return value != null\n && (typeof value === 'object' || typeof value === 'function')\n && typeof Reflect.get(value, 'get') === 'function'\n && typeof Reflect.get(value, 'subscribe') === 'function'\n}\n"],"names":["Tab","Component","TabLine","props","__publicField","tabs","validateTabs","emitterProps","createValueEmitter","_a","tab","event","invoke","label","baseId","activeTabId","Host","jsx","componentClass","index","tabButtonId","tabPanelId","enabled","tabIndex","current","next","css","id","safeId","value","ids","TabPanel","extractTabs","controlId","nextProps","selected","jsxs","disabled","direct","declarative","child","isVNode","tabProps","Panel","header","toolbar","children","orientation","title","Sidebar","ariaLabel","SplitView","primary","secondary","direction","primarySize","primaryLabel","secondaryLabel","DescriptionItem","term","DescriptionList","_QuadCheckbox","Checkbox","FilterMode","QuadCheckbox","_TriCheckbox","TriCheckbox","Dropdown","suppliedOptions","isReadableEmitter","assertOptions","Emitter","firstValue","name","required","error","placeholder","onChange","options","currentValue","raw","eventValue","option","nextValue","purpose","target","Textbox","type","readOnly","autoComplete","inputMode","minLength","maxLength","pattern","inputRef","onInput","Toggle","validateToggleOptions","selectedValue","selectedIndex","optionLabel","key","nextIndex","radio","Toolbar","ProgressBar","max","sourceValue","valueText"],"mappings":"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"}