@cardstack/boxel-cli 0.10.0 → 0.10.1-unstable.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled-realms/pretui/README.md +49 -0
- package/bundled-realms/pretui/color/LICENSE +21 -0
- package/bundled-realms/pretui/color/README.md +155 -0
- package/bundled-realms/pretui/color/index.js +78 -0
- package/bundled-realms/pretui/color-engine.ts +1243 -0
- package/bundled-realms/pretui/components/accordion.gts +58 -0
- package/bundled-realms/pretui/components/accordion.md +60 -0
- package/bundled-realms/pretui/components/accordion.usage.gts +129 -0
- package/bundled-realms/pretui/components/action-bar.gts +407 -0
- package/bundled-realms/pretui/components/action-bar.md +48 -0
- package/bundled-realms/pretui/components/action-bar.usage.gts +213 -0
- package/bundled-realms/pretui/components/affix.gts +116 -0
- package/bundled-realms/pretui/components/affix.md +54 -0
- package/bundled-realms/pretui/components/affix.usage.gts +73 -0
- package/bundled-realms/pretui/components/agent-question.gts +116 -0
- package/bundled-realms/pretui/components/agent-question.md +50 -0
- package/bundled-realms/pretui/components/agent-question.usage.gts +22 -0
- package/bundled-realms/pretui/components/ai-instructions.gts +378 -0
- package/bundled-realms/pretui/components/ai-instructions.md +49 -0
- package/bundled-realms/pretui/components/ai-instructions.usage.gts +101 -0
- package/bundled-realms/pretui/components/alert-dialog.gts +223 -0
- package/bundled-realms/pretui/components/alert-dialog.md +76 -0
- package/bundled-realms/pretui/components/alert-dialog.usage.gts +128 -0
- package/bundled-realms/pretui/components/alert.gts +163 -0
- package/bundled-realms/pretui/components/alert.md +57 -0
- package/bundled-realms/pretui/components/alert.usage.gts +99 -0
- package/bundled-realms/pretui/components/amount-input.gts +621 -0
- package/bundled-realms/pretui/components/amount-input.md +63 -0
- package/bundled-realms/pretui/components/amount-input.usage.gts +170 -0
- package/bundled-realms/pretui/components/angle-dial.gts +367 -0
- package/bundled-realms/pretui/components/angle-dial.md +56 -0
- package/bundled-realms/pretui/components/angle-dial.usage.gts +166 -0
- package/bundled-realms/pretui/components/animated-image.gts +291 -0
- package/bundled-realms/pretui/components/animated-image.md +49 -0
- package/bundled-realms/pretui/components/animated-image.usage.gts +127 -0
- package/bundled-realms/pretui/components/app-shell.gts +19 -0
- package/bundled-realms/pretui/components/app-shell.md +43 -0
- package/bundled-realms/pretui/components/app-shell.usage.gts +52 -0
- package/bundled-realms/pretui/components/approval-footer.gts +69 -0
- package/bundled-realms/pretui/components/approval-footer.md +49 -0
- package/bundled-realms/pretui/components/approval-footer.usage.gts +22 -0
- package/bundled-realms/pretui/components/aspect-ratio.gts +328 -0
- package/bundled-realms/pretui/components/aspect-ratio.md +72 -0
- package/bundled-realms/pretui/components/aspect-ratio.usage.gts +174 -0
- package/bundled-realms/pretui/components/asset-grid.gts +542 -0
- package/bundled-realms/pretui/components/asset-grid.md +54 -0
- package/bundled-realms/pretui/components/asset-grid.usage.gts +171 -0
- package/bundled-realms/pretui/components/asset-well.gts +731 -0
- package/bundled-realms/pretui/components/asset-well.md +72 -0
- package/bundled-realms/pretui/components/asset-well.usage.gts +264 -0
- package/bundled-realms/pretui/components/audio-player.gts +152 -0
- package/bundled-realms/pretui/components/audio-player.md +51 -0
- package/bundled-realms/pretui/components/audio-player.usage.gts +118 -0
- package/bundled-realms/pretui/components/autocomplete.gts +1150 -0
- package/bundled-realms/pretui/components/autocomplete.md +67 -0
- package/bundled-realms/pretui/components/autocomplete.usage.gts +339 -0
- package/bundled-realms/pretui/components/avatar-group.gts +30 -0
- package/bundled-realms/pretui/components/avatar-group.md +48 -0
- package/bundled-realms/pretui/components/avatar-group.usage.gts +39 -0
- package/bundled-realms/pretui/components/avatar.gts +134 -0
- package/bundled-realms/pretui/components/avatar.md +69 -0
- package/bundled-realms/pretui/components/avatar.usage.gts +101 -0
- package/bundled-realms/pretui/components/backdrop.gts +179 -0
- package/bundled-realms/pretui/components/backdrop.md +56 -0
- package/bundled-realms/pretui/components/backdrop.usage.gts +223 -0
- package/bundled-realms/pretui/components/background-field.gts +743 -0
- package/bundled-realms/pretui/components/background-field.md +62 -0
- package/bundled-realms/pretui/components/background-field.usage.gts +328 -0
- package/bundled-realms/pretui/components/badge.gts +188 -0
- package/bundled-realms/pretui/components/badge.md +62 -0
- package/bundled-realms/pretui/components/badge.usage.gts +73 -0
- package/bundled-realms/pretui/components/bar-list.gts +255 -0
- package/bundled-realms/pretui/components/bar-list.md +49 -0
- package/bundled-realms/pretui/components/bar-list.usage.gts +129 -0
- package/bundled-realms/pretui/components/board.gts +108 -0
- package/bundled-realms/pretui/components/board.md +54 -0
- package/bundled-realms/pretui/components/board.usage.gts +321 -0
- package/bundled-realms/pretui/components/bottom-nav.gts +217 -0
- package/bundled-realms/pretui/components/bottom-nav.md +64 -0
- package/bundled-realms/pretui/components/bottom-nav.usage.gts +68 -0
- package/bundled-realms/pretui/components/breadcrumb.gts +56 -0
- package/bundled-realms/pretui/components/breadcrumb.md +52 -0
- package/bundled-realms/pretui/components/breadcrumb.usage.gts +24 -0
- package/bundled-realms/pretui/components/broken-link.gts +46 -0
- package/bundled-realms/pretui/components/broken-link.md +50 -0
- package/bundled-realms/pretui/components/broken-link.usage.gts +57 -0
- package/bundled-realms/pretui/components/button-group.gts +246 -0
- package/bundled-realms/pretui/components/button-group.md +46 -0
- package/bundled-realms/pretui/components/button-group.usage.gts +137 -0
- package/bundled-realms/pretui/components/button.examples.gts +67 -0
- package/bundled-realms/pretui/components/button.gts +594 -0
- package/bundled-realms/pretui/components/button.md +81 -0
- package/bundled-realms/pretui/components/button.usage.gts +159 -0
- package/bundled-realms/pretui/components/calendar.gts +457 -0
- package/bundled-realms/pretui/components/calendar.md +57 -0
- package/bundled-realms/pretui/components/calendar.usage.gts +161 -0
- package/bundled-realms/pretui/components/callout.gts +2 -0
- package/bundled-realms/pretui/components/callout.md +40 -0
- package/bundled-realms/pretui/components/callout.usage.gts +48 -0
- package/bundled-realms/pretui/components/card.gts +637 -0
- package/bundled-realms/pretui/components/card.md +105 -0
- package/bundled-realms/pretui/components/card.usage.gts +279 -0
- package/bundled-realms/pretui/components/carousel.gts +583 -0
- package/bundled-realms/pretui/components/carousel.md +53 -0
- package/bundled-realms/pretui/components/carousel.usage.gts +220 -0
- package/bundled-realms/pretui/components/cascader.gts +436 -0
- package/bundled-realms/pretui/components/cascader.md +61 -0
- package/bundled-realms/pretui/components/cascader.usage.gts +79 -0
- package/bundled-realms/pretui/components/channel-slider.gts +251 -0
- package/bundled-realms/pretui/components/channel-slider.md +51 -0
- package/bundled-realms/pretui/components/channel-slider.usage.gts +104 -0
- package/bundled-realms/pretui/components/chart.gts +1011 -0
- package/bundled-realms/pretui/components/chart.md +60 -0
- package/bundled-realms/pretui/components/chart.usage.gts +660 -0
- package/bundled-realms/pretui/components/checkbox-card.gts +82 -0
- package/bundled-realms/pretui/components/checkbox-card.md +73 -0
- package/bundled-realms/pretui/components/checkbox-card.usage.gts +114 -0
- package/bundled-realms/pretui/components/checkbox.examples.gts +61 -0
- package/bundled-realms/pretui/components/checkbox.gts +123 -0
- package/bundled-realms/pretui/components/checkbox.md +55 -0
- package/bundled-realms/pretui/components/checkbox.usage.gts +31 -0
- package/bundled-realms/pretui/components/chip.gts +136 -0
- package/bundled-realms/pretui/components/chip.md +54 -0
- package/bundled-realms/pretui/components/chip.usage.gts +97 -0
- package/bundled-realms/pretui/components/code-block.gts +888 -0
- package/bundled-realms/pretui/components/code-block.md +61 -0
- package/bundled-realms/pretui/components/code-block.usage.gts +374 -0
- package/bundled-realms/pretui/components/collapsed-turn.gts +44 -0
- package/bundled-realms/pretui/components/collapsed-turn.md +48 -0
- package/bundled-realms/pretui/components/collapsed-turn.usage.gts +21 -0
- package/bundled-realms/pretui/components/collapsible.gts +283 -0
- package/bundled-realms/pretui/components/collapsible.md +69 -0
- package/bundled-realms/pretui/components/collapsible.usage.gts +173 -0
- package/bundled-realms/pretui/components/color-area.gts +339 -0
- package/bundled-realms/pretui/components/color-area.md +49 -0
- package/bundled-realms/pretui/components/color-area.usage.gts +72 -0
- package/bundled-realms/pretui/components/color-field.gts +179 -0
- package/bundled-realms/pretui/components/color-field.md +47 -0
- package/bundled-realms/pretui/components/color-field.usage.gts +87 -0
- package/bundled-realms/pretui/components/color-palette.gts +198 -0
- package/bundled-realms/pretui/components/color-palette.md +48 -0
- package/bundled-realms/pretui/components/color-picker.gts +721 -0
- package/bundled-realms/pretui/components/color-picker.md +59 -0
- package/bundled-realms/pretui/components/color-picker.usage.gts +122 -0
- package/bundled-realms/pretui/components/color-stop-editor.gts +184 -0
- package/bundled-realms/pretui/components/color-stop-editor.md +46 -0
- package/bundled-realms/pretui/components/color-stop-editor.usage.gts +75 -0
- package/bundled-realms/pretui/components/combobox.gts +333 -0
- package/bundled-realms/pretui/components/combobox.md +49 -0
- package/bundled-realms/pretui/components/combobox.usage.gts +143 -0
- package/bundled-realms/pretui/components/command-palette.gts +982 -0
- package/bundled-realms/pretui/components/command-palette.md +47 -0
- package/bundled-realms/pretui/components/command-palette.usage.gts +95 -0
- package/bundled-realms/pretui/components/command.gts +2 -0
- package/bundled-realms/pretui/components/command.md +45 -0
- package/bundled-realms/pretui/components/command.usage.gts +58 -0
- package/bundled-realms/pretui/components/compaction-chip.gts +273 -0
- package/bundled-realms/pretui/components/compaction-chip.md +45 -0
- package/bundled-realms/pretui/components/compaction-chip.usage.gts +110 -0
- package/bundled-realms/pretui/components/comparison.gts +223 -0
- package/bundled-realms/pretui/components/comparison.md +46 -0
- package/bundled-realms/pretui/components/comparison.usage.gts +148 -0
- package/bundled-realms/pretui/components/composer.gts +566 -0
- package/bundled-realms/pretui/components/composer.md +59 -0
- package/bundled-realms/pretui/components/composer.usage.gts +173 -0
- package/bundled-realms/pretui/components/compound-field.gts +289 -0
- package/bundled-realms/pretui/components/compound-field.md +66 -0
- package/bundled-realms/pretui/components/compound-field.usage.gts +378 -0
- package/bundled-realms/pretui/components/contact-link.gts +583 -0
- package/bundled-realms/pretui/components/contact-link.md +53 -0
- package/bundled-realms/pretui/components/contact-link.usage.gts +273 -0
- package/bundled-realms/pretui/components/context-menu.gts +811 -0
- package/bundled-realms/pretui/components/context-menu.md +74 -0
- package/bundled-realms/pretui/components/context-menu.usage.gts +244 -0
- package/bundled-realms/pretui/components/copy-button.gts +237 -0
- package/bundled-realms/pretui/components/copy-button.md +71 -0
- package/bundled-realms/pretui/components/copy-button.usage.gts +135 -0
- package/bundled-realms/pretui/components/copy-fit.gts +396 -0
- package/bundled-realms/pretui/components/copy-fit.md +60 -0
- package/bundled-realms/pretui/components/copy-fit.usage.gts +200 -0
- package/bundled-realms/pretui/components/cta-band.gts +285 -0
- package/bundled-realms/pretui/components/cta-band.md +50 -0
- package/bundled-realms/pretui/components/cta-band.usage.gts +208 -0
- package/bundled-realms/pretui/components/cue.gts +180 -0
- package/bundled-realms/pretui/components/cue.md +53 -0
- package/bundled-realms/pretui/components/cue.usage.gts +88 -0
- package/bundled-realms/pretui/components/cursor-trail.gts +221 -0
- package/bundled-realms/pretui/components/cursor-trail.md +56 -0
- package/bundled-realms/pretui/components/cursor-trail.usage.gts +218 -0
- package/bundled-realms/pretui/components/dashboard-grid.gts +939 -0
- package/bundled-realms/pretui/components/dashboard-grid.md +60 -0
- package/bundled-realms/pretui/components/dashboard-grid.usage.gts +307 -0
- package/bundled-realms/pretui/components/dashboard-item.gts +286 -0
- package/bundled-realms/pretui/components/dashboard-item.md +52 -0
- package/bundled-realms/pretui/components/dashboard-item.usage.gts +87 -0
- package/bundled-realms/pretui/components/data-grid.gts +263 -0
- package/bundled-realms/pretui/components/data-grid.md +64 -0
- package/bundled-realms/pretui/components/data-grid.usage.gts +50 -0
- package/bundled-realms/pretui/components/data-table.gts +1618 -0
- package/bundled-realms/pretui/components/data-table.md +104 -0
- package/bundled-realms/pretui/components/data-table.usage.gts +324 -0
- package/bundled-realms/pretui/components/date-picker.gts +98 -0
- package/bundled-realms/pretui/components/date-picker.md +59 -0
- package/bundled-realms/pretui/components/date-picker.usage.gts +66 -0
- package/bundled-realms/pretui/components/date-range-picker.gts +131 -0
- package/bundled-realms/pretui/components/date-range-picker.md +55 -0
- package/bundled-realms/pretui/components/date-range-picker.usage.gts +125 -0
- package/bundled-realms/pretui/components/date-time-picker.gts +227 -0
- package/bundled-realms/pretui/components/date-time-picker.md +60 -0
- package/bundled-realms/pretui/components/date-time-picker.usage.gts +64 -0
- package/bundled-realms/pretui/components/defer.gts +374 -0
- package/bundled-realms/pretui/components/defer.md +61 -0
- package/bundled-realms/pretui/components/defer.usage.gts +174 -0
- package/bundled-realms/pretui/components/delta.gts +45 -0
- package/bundled-realms/pretui/components/delta.md +53 -0
- package/bundled-realms/pretui/components/delta.usage.gts +31 -0
- package/bundled-realms/pretui/components/descriptions.gts +365 -0
- package/bundled-realms/pretui/components/descriptions.md +73 -0
- package/bundled-realms/pretui/components/descriptions.usage.gts +123 -0
- package/bundled-realms/pretui/components/dialog.gts +153 -0
- package/bundled-realms/pretui/components/dialog.md +60 -0
- package/bundled-realms/pretui/components/dialog.usage.gts +86 -0
- package/bundled-realms/pretui/components/diff-block.gts +89 -0
- package/bundled-realms/pretui/components/diff-block.md +51 -0
- package/bundled-realms/pretui/components/diff-block.usage.gts +27 -0
- package/bundled-realms/pretui/components/disclosure.gts +2 -0
- package/bundled-realms/pretui/components/disclosure.md +45 -0
- package/bundled-realms/pretui/components/disclosure.usage.gts +47 -0
- package/bundled-realms/pretui/components/divider.gts +75 -0
- package/bundled-realms/pretui/components/divider.md +49 -0
- package/bundled-realms/pretui/components/divider.usage.gts +98 -0
- package/bundled-realms/pretui/components/doc-report.gts +306 -0
- package/bundled-realms/pretui/components/doc-report.md +45 -0
- package/bundled-realms/pretui/components/doc-report.usage.gts +126 -0
- package/bundled-realms/pretui/components/dock.gts +165 -0
- package/bundled-realms/pretui/components/dock.md +42 -0
- package/bundled-realms/pretui/components/dock.usage.gts +114 -0
- package/bundled-realms/pretui/components/drawer.gts +166 -0
- package/bundled-realms/pretui/components/drawer.md +66 -0
- package/bundled-realms/pretui/components/drawer.usage.gts +111 -0
- package/bundled-realms/pretui/components/dropzone.gts +314 -0
- package/bundled-realms/pretui/components/dropzone.md +56 -0
- package/bundled-realms/pretui/components/dropzone.usage.gts +203 -0
- package/bundled-realms/pretui/components/dueling-picklist.gts +991 -0
- package/bundled-realms/pretui/components/dueling-picklist.md +67 -0
- package/bundled-realms/pretui/components/dueling-picklist.usage.gts +182 -0
- package/bundled-realms/pretui/components/dynamic-island.gts +264 -0
- package/bundled-realms/pretui/components/dynamic-island.md +45 -0
- package/bundled-realms/pretui/components/dynamic-island.usage.gts +195 -0
- package/bundled-realms/pretui/components/easing-curve.gts +629 -0
- package/bundled-realms/pretui/components/easing-curve.md +46 -0
- package/bundled-realms/pretui/components/easing-curve.usage.gts +122 -0
- package/bundled-realms/pretui/components/edit-in-place.gts +559 -0
- package/bundled-realms/pretui/components/edit-in-place.md +63 -0
- package/bundled-realms/pretui/components/edit-in-place.usage.gts +209 -0
- package/bundled-realms/pretui/components/editable.gts +299 -0
- package/bundled-realms/pretui/components/editable.md +79 -0
- package/bundled-realms/pretui/components/editable.usage.gts +68 -0
- package/bundled-realms/pretui/components/email-input.gts +83 -0
- package/bundled-realms/pretui/components/email-input.md +52 -0
- package/bundled-realms/pretui/components/email-input.usage.gts +90 -0
- package/bundled-realms/pretui/components/emoji-button.gts +162 -0
- package/bundled-realms/pretui/components/emoji-button.md +46 -0
- package/bundled-realms/pretui/components/emoji-button.usage.gts +174 -0
- package/bundled-realms/pretui/components/emoji-picker.gts +1396 -0
- package/bundled-realms/pretui/components/emoji-picker.md +53 -0
- package/bundled-realms/pretui/components/emoji-picker.usage.gts +235 -0
- package/bundled-realms/pretui/components/empty-state.gts +162 -0
- package/bundled-realms/pretui/components/empty-state.md +63 -0
- package/bundled-realms/pretui/components/empty-state.usage.gts +113 -0
- package/bundled-realms/pretui/components/empty.gts +2 -0
- package/bundled-realms/pretui/components/empty.md +43 -0
- package/bundled-realms/pretui/components/empty.usage.gts +33 -0
- package/bundled-realms/pretui/components/entity-display.gts +126 -0
- package/bundled-realms/pretui/components/entity-display.md +50 -0
- package/bundled-realms/pretui/components/error-summary.gts +321 -0
- package/bundled-realms/pretui/components/error-summary.md +60 -0
- package/bundled-realms/pretui/components/error-summary.usage.gts +155 -0
- package/bundled-realms/pretui/components/expression-builder.gts +1211 -0
- package/bundled-realms/pretui/components/expression-builder.md +60 -0
- package/bundled-realms/pretui/components/expression-builder.usage.gts +246 -0
- package/bundled-realms/pretui/components/fab.gts +2 -0
- package/bundled-realms/pretui/components/fab.md +38 -0
- package/bundled-realms/pretui/components/fab.usage.gts +38 -0
- package/bundled-realms/pretui/components/feature-voting.gts +365 -0
- package/bundled-realms/pretui/components/feature-voting.md +44 -0
- package/bundled-realms/pretui/components/feature-voting.usage.gts +114 -0
- package/bundled-realms/pretui/components/feed.gts +244 -0
- package/bundled-realms/pretui/components/feed.md +56 -0
- package/bundled-realms/pretui/components/feed.usage.gts +250 -0
- package/bundled-realms/pretui/components/field-error.gts +127 -0
- package/bundled-realms/pretui/components/field-error.md +60 -0
- package/bundled-realms/pretui/components/field-error.usage.gts +146 -0
- package/bundled-realms/pretui/components/field.gts +185 -0
- package/bundled-realms/pretui/components/field.md +60 -0
- package/bundled-realms/pretui/components/field.usage.gts +73 -0
- package/bundled-realms/pretui/components/fieldset.gts +124 -0
- package/bundled-realms/pretui/components/fieldset.md +65 -0
- package/bundled-realms/pretui/components/fieldset.usage.gts +105 -0
- package/bundled-realms/pretui/components/file-trigger.gts +185 -0
- package/bundled-realms/pretui/components/file-trigger.md +53 -0
- package/bundled-realms/pretui/components/file-trigger.usage.gts +121 -0
- package/bundled-realms/pretui/components/file-upload.gts +353 -0
- package/bundled-realms/pretui/components/file-upload.md +63 -0
- package/bundled-realms/pretui/components/file-upload.usage.gts +64 -0
- package/bundled-realms/pretui/components/filmstrip.gts +465 -0
- package/bundled-realms/pretui/components/filmstrip.md +53 -0
- package/bundled-realms/pretui/components/filmstrip.usage.gts +115 -0
- package/bundled-realms/pretui/components/filter-chips.gts +236 -0
- package/bundled-realms/pretui/components/filter-chips.md +58 -0
- package/bundled-realms/pretui/components/filter-chips.usage.gts +102 -0
- package/bundled-realms/pretui/components/filter-set.gts +293 -0
- package/bundled-realms/pretui/components/filter-set.md +60 -0
- package/bundled-realms/pretui/components/filter-set.usage.gts +145 -0
- package/bundled-realms/pretui/components/float-button.gts +339 -0
- package/bundled-realms/pretui/components/float-button.md +69 -0
- package/bundled-realms/pretui/components/float-button.usage.gts +134 -0
- package/bundled-realms/pretui/components/fold.gts +86 -0
- package/bundled-realms/pretui/components/fold.md +54 -0
- package/bundled-realms/pretui/components/fold.usage.gts +19 -0
- package/bundled-realms/pretui/components/form-field.gts +609 -0
- package/bundled-realms/pretui/components/form-field.md +77 -0
- package/bundled-realms/pretui/components/form-field.usage.gts +279 -0
- package/bundled-realms/pretui/components/form-footer.gts +246 -0
- package/bundled-realms/pretui/components/form-footer.md +59 -0
- package/bundled-realms/pretui/components/form-footer.usage.gts +217 -0
- package/bundled-realms/pretui/components/form-layout.gts +130 -0
- package/bundled-realms/pretui/components/form-layout.md +52 -0
- package/bundled-realms/pretui/components/form-layout.usage.gts +200 -0
- package/bundled-realms/pretui/components/form-section.gts +434 -0
- package/bundled-realms/pretui/components/form-section.md +67 -0
- package/bundled-realms/pretui/components/form-section.usage.gts +402 -0
- package/bundled-realms/pretui/components/form.gts +315 -0
- package/bundled-realms/pretui/components/form.md +82 -0
- package/bundled-realms/pretui/components/form.usage.gts +306 -0
- package/bundled-realms/pretui/components/format-bytes.gts +212 -0
- package/bundled-realms/pretui/components/format-bytes.md +47 -0
- package/bundled-realms/pretui/components/format-bytes.usage.gts +274 -0
- package/bundled-realms/pretui/components/format-date.gts +249 -0
- package/bundled-realms/pretui/components/format-date.md +55 -0
- package/bundled-realms/pretui/components/format-date.usage.gts +245 -0
- package/bundled-realms/pretui/components/format-number.gts +138 -0
- package/bundled-realms/pretui/components/format-number.md +51 -0
- package/bundled-realms/pretui/components/format-number.usage.gts +261 -0
- package/bundled-realms/pretui/components/formatted-value.gts +65 -0
- package/bundled-realms/pretui/components/freestyle-usage.gts +311 -0
- package/bundled-realms/pretui/components/freestyle-usage.md +49 -0
- package/bundled-realms/pretui/components/gallery.gts +819 -0
- package/bundled-realms/pretui/components/gallery.md +65 -0
- package/bundled-realms/pretui/components/gallery.usage.gts +212 -0
- package/bundled-realms/pretui/components/gradient-editor.gts +682 -0
- package/bundled-realms/pretui/components/gradient-editor.md +43 -0
- package/bundled-realms/pretui/components/gradient-editor.usage.gts +69 -0
- package/bundled-realms/pretui/components/graph-layout.md +54 -0
- package/bundled-realms/pretui/components/graph-layout.usage.gts +343 -0
- package/bundled-realms/pretui/components/graph-outline.gts +553 -0
- package/bundled-realms/pretui/components/graph-outline.md +50 -0
- package/bundled-realms/pretui/components/graph-outline.usage.gts +88 -0
- package/bundled-realms/pretui/components/grid.gts +68 -0
- package/bundled-realms/pretui/components/grid.md +54 -0
- package/bundled-realms/pretui/components/grid.usage.gts +144 -0
- package/bundled-realms/pretui/components/handle.gts +192 -0
- package/bundled-realms/pretui/components/handle.md +55 -0
- package/bundled-realms/pretui/components/handle.usage.gts +174 -0
- package/bundled-realms/pretui/components/hero-split.gts +307 -0
- package/bundled-realms/pretui/components/hero-split.md +50 -0
- package/bundled-realms/pretui/components/hero-split.usage.gts +200 -0
- package/bundled-realms/pretui/components/hover-actions.gts +485 -0
- package/bundled-realms/pretui/components/hover-actions.md +55 -0
- package/bundled-realms/pretui/components/hover-actions.usage.gts +224 -0
- package/bundled-realms/pretui/components/hover-card.gts +347 -0
- package/bundled-realms/pretui/components/hover-card.md +72 -0
- package/bundled-realms/pretui/components/hover-card.usage.gts +174 -0
- package/bundled-realms/pretui/components/hover-video-player.gts +315 -0
- package/bundled-realms/pretui/components/hover-video-player.md +57 -0
- package/bundled-realms/pretui/components/hover-video-player.usage.gts +152 -0
- package/bundled-realms/pretui/components/icon-button.examples.gts +69 -0
- package/bundled-realms/pretui/components/icon-button.gts +153 -0
- package/bundled-realms/pretui/components/icon-button.md +72 -0
- package/bundled-realms/pretui/components/icon-button.usage.gts +208 -0
- package/bundled-realms/pretui/components/image-cropper.gts +693 -0
- package/bundled-realms/pretui/components/image-cropper.md +52 -0
- package/bundled-realms/pretui/components/image-cropper.usage.gts +108 -0
- package/bundled-realms/pretui/components/image-frame.gts +91 -0
- package/bundled-realms/pretui/components/image-frame.md +42 -0
- package/bundled-realms/pretui/components/image-frame.usage.gts +28 -0
- package/bundled-realms/pretui/components/image.gts +326 -0
- package/bundled-realms/pretui/components/image.md +71 -0
- package/bundled-realms/pretui/components/image.usage.gts +126 -0
- package/bundled-realms/pretui/components/in-view.gts +245 -0
- package/bundled-realms/pretui/components/in-view.md +53 -0
- package/bundled-realms/pretui/components/in-view.usage.gts +264 -0
- package/bundled-realms/pretui/components/indicator.gts +137 -0
- package/bundled-realms/pretui/components/indicator.md +60 -0
- package/bundled-realms/pretui/components/indicator.usage.gts +66 -0
- package/bundled-realms/pretui/components/infinite-scroll.gts +163 -0
- package/bundled-realms/pretui/components/infinite-scroll.md +54 -0
- package/bundled-realms/pretui/components/infinite-scroll.usage.gts +73 -0
- package/bundled-realms/pretui/components/input-group.gts +264 -0
- package/bundled-realms/pretui/components/input-group.md +55 -0
- package/bundled-realms/pretui/components/input-group.usage.gts +283 -0
- package/bundled-realms/pretui/components/input.examples.gts +61 -0
- package/bundled-realms/pretui/components/input.gts +202 -0
- package/bundled-realms/pretui/components/input.md +67 -0
- package/bundled-realms/pretui/components/input.usage.gts +208 -0
- package/bundled-realms/pretui/components/interactive-input.gts +343 -0
- package/bundled-realms/pretui/components/interactive-input.md +45 -0
- package/bundled-realms/pretui/components/interactive-input.usage.gts +98 -0
- package/bundled-realms/pretui/components/item.gts +218 -0
- package/bundled-realms/pretui/components/item.md +66 -0
- package/bundled-realms/pretui/components/item.usage.gts +121 -0
- package/bundled-realms/pretui/components/joystick.gts +381 -0
- package/bundled-realms/pretui/components/joystick.md +52 -0
- package/bundled-realms/pretui/components/joystick.usage.gts +140 -0
- package/bundled-realms/pretui/components/json-editor.gts +1016 -0
- package/bundled-realms/pretui/components/json-editor.md +51 -0
- package/bundled-realms/pretui/components/json-editor.usage.gts +230 -0
- package/bundled-realms/pretui/components/json-tree.gts +596 -0
- package/bundled-realms/pretui/components/json-tree.md +52 -0
- package/bundled-realms/pretui/components/json-tree.usage.gts +217 -0
- package/bundled-realms/pretui/components/jump-chip.gts +230 -0
- package/bundled-realms/pretui/components/jump-chip.md +44 -0
- package/bundled-realms/pretui/components/jump-chip.usage.gts +151 -0
- package/bundled-realms/pretui/components/kbd.gts +60 -0
- package/bundled-realms/pretui/components/kbd.md +50 -0
- package/bundled-realms/pretui/components/kbd.usage.gts +98 -0
- package/bundled-realms/pretui/components/key-value.gts +150 -0
- package/bundled-realms/pretui/components/key-value.md +81 -0
- package/bundled-realms/pretui/components/key-value.usage.gts +125 -0
- package/bundled-realms/pretui/components/known-date.gts +770 -0
- package/bundled-realms/pretui/components/known-date.md +56 -0
- package/bundled-realms/pretui/components/known-date.usage.gts +192 -0
- package/bundled-realms/pretui/components/label.gts +60 -0
- package/bundled-realms/pretui/components/label.md +56 -0
- package/bundled-realms/pretui/components/label.usage.gts +63 -0
- package/bundled-realms/pretui/components/layer-manager.gts +1884 -0
- package/bundled-realms/pretui/components/layer-manager.md +59 -0
- package/bundled-realms/pretui/components/layer-manager.usage.gts +233 -0
- package/bundled-realms/pretui/components/lightbox.gts +461 -0
- package/bundled-realms/pretui/components/lightbox.md +57 -0
- package/bundled-realms/pretui/components/lightbox.usage.gts +180 -0
- package/bundled-realms/pretui/components/line-grid.examples.gts +156 -0
- package/bundled-realms/pretui/components/line-grid.gts +523 -0
- package/bundled-realms/pretui/components/line-grid.md +55 -0
- package/bundled-realms/pretui/components/line-grid.usage.gts +181 -0
- package/bundled-realms/pretui/components/list.gts +679 -0
- package/bundled-realms/pretui/components/list.md +90 -0
- package/bundled-realms/pretui/components/list.usage.gts +203 -0
- package/bundled-realms/pretui/components/loader.gts +2 -0
- package/bundled-realms/pretui/components/loader.md +33 -0
- package/bundled-realms/pretui/components/loader.usage.gts +35 -0
- package/bundled-realms/pretui/components/loading-overlay.gts +120 -0
- package/bundled-realms/pretui/components/loading-overlay.md +68 -0
- package/bundled-realms/pretui/components/loading-overlay.usage.gts +102 -0
- package/bundled-realms/pretui/components/loading-state.gts +124 -0
- package/bundled-realms/pretui/components/loading-state.md +48 -0
- package/bundled-realms/pretui/components/loading-state.usage.gts +16 -0
- package/bundled-realms/pretui/components/lookup.gts +451 -0
- package/bundled-realms/pretui/components/lookup.md +59 -0
- package/bundled-realms/pretui/components/lookup.usage.gts +235 -0
- package/bundled-realms/pretui/components/magnetic.gts +158 -0
- package/bundled-realms/pretui/components/magnetic.md +48 -0
- package/bundled-realms/pretui/components/magnetic.usage.gts +125 -0
- package/bundled-realms/pretui/components/marquee.gts +141 -0
- package/bundled-realms/pretui/components/marquee.md +43 -0
- package/bundled-realms/pretui/components/marquee.usage.gts +116 -0
- package/bundled-realms/pretui/components/masonry.gts +95 -0
- package/bundled-realms/pretui/components/masonry.md +59 -0
- package/bundled-realms/pretui/components/masonry.usage.gts +238 -0
- package/bundled-realms/pretui/components/media-inspector.gts +145 -0
- package/bundled-realms/pretui/components/media-inspector.md +46 -0
- package/bundled-realms/pretui/components/media-inspector.usage.gts +83 -0
- package/bundled-realms/pretui/components/media-player.gts +1133 -0
- package/bundled-realms/pretui/components/media-player.md +74 -0
- package/bundled-realms/pretui/components/media-player.usage.gts +265 -0
- package/bundled-realms/pretui/components/media-viewer.gts +136 -0
- package/bundled-realms/pretui/components/media-viewer.md +47 -0
- package/bundled-realms/pretui/components/media-viewer.usage.gts +70 -0
- package/bundled-realms/pretui/components/mentions.gts +340 -0
- package/bundled-realms/pretui/components/mentions.md +65 -0
- package/bundled-realms/pretui/components/mentions.usage.gts +73 -0
- package/bundled-realms/pretui/components/menu-panel.gts +367 -0
- package/bundled-realms/pretui/components/menu.gts +652 -0
- package/bundled-realms/pretui/components/menu.md +69 -0
- package/bundled-realms/pretui/components/menu.usage.gts +116 -0
- package/bundled-realms/pretui/components/menubar.gts +1200 -0
- package/bundled-realms/pretui/components/menubar.md +49 -0
- package/bundled-realms/pretui/components/menubar.usage.gts +220 -0
- package/bundled-realms/pretui/components/meter.gts +113 -0
- package/bundled-realms/pretui/components/meter.md +50 -0
- package/bundled-realms/pretui/components/meter.usage.gts +50 -0
- package/bundled-realms/pretui/components/modal.gts +2 -0
- package/bundled-realms/pretui/components/modal.md +41 -0
- package/bundled-realms/pretui/components/modal.usage.gts +50 -0
- package/bundled-realms/pretui/components/model-viewer.gts +658 -0
- package/bundled-realms/pretui/components/model-viewer.md +57 -0
- package/bundled-realms/pretui/components/model-viewer.usage.gts +123 -0
- package/bundled-realms/pretui/components/money-input.gts +66 -0
- package/bundled-realms/pretui/components/money-input.md +43 -0
- package/bundled-realms/pretui/components/money-input.usage.gts +293 -0
- package/bundled-realms/pretui/components/morphing-dialog.gts +173 -0
- package/bundled-realms/pretui/components/morphing-dialog.md +46 -0
- package/bundled-realms/pretui/components/morphing-dialog.usage.gts +168 -0
- package/bundled-realms/pretui/components/morphing-popover.gts +245 -0
- package/bundled-realms/pretui/components/morphing-popover.md +47 -0
- package/bundled-realms/pretui/components/morphing-popover.usage.gts +176 -0
- package/bundled-realms/pretui/components/multi-select.gts +392 -0
- package/bundled-realms/pretui/components/multi-select.md +57 -0
- package/bundled-realms/pretui/components/multi-select.usage.gts +97 -0
- package/bundled-realms/pretui/components/native-select.gts +212 -0
- package/bundled-realms/pretui/components/native-select.md +77 -0
- package/bundled-realms/pretui/components/native-select.usage.gts +109 -0
- package/bundled-realms/pretui/components/navigation-menu.gts +351 -0
- package/bundled-realms/pretui/components/navigation-menu.md +65 -0
- package/bundled-realms/pretui/components/navigation-menu.usage.gts +61 -0
- package/bundled-realms/pretui/components/node-canvas.gts +1174 -0
- package/bundled-realms/pretui/components/node-canvas.md +57 -0
- package/bundled-realms/pretui/components/node-canvas.usage.gts +548 -0
- package/bundled-realms/pretui/components/node-card.gts +181 -0
- package/bundled-realms/pretui/components/node-card.md +53 -0
- package/bundled-realms/pretui/components/node-card.usage.gts +156 -0
- package/bundled-realms/pretui/components/notification.gts +242 -0
- package/bundled-realms/pretui/components/notification.md +69 -0
- package/bundled-realms/pretui/components/notification.usage.gts +125 -0
- package/bundled-realms/pretui/components/number-input.gts +191 -0
- package/bundled-realms/pretui/components/number-input.md +54 -0
- package/bundled-realms/pretui/components/number-input.usage.gts +132 -0
- package/bundled-realms/pretui/components/odometer.gts +349 -0
- package/bundled-realms/pretui/components/odometer.md +55 -0
- package/bundled-realms/pretui/components/odometer.usage.gts +258 -0
- package/bundled-realms/pretui/components/onboarding.gts +298 -0
- package/bundled-realms/pretui/components/onboarding.md +48 -0
- package/bundled-realms/pretui/components/onboarding.usage.gts +155 -0
- package/bundled-realms/pretui/components/origin-grid.gts +486 -0
- package/bundled-realms/pretui/components/origin-grid.md +47 -0
- package/bundled-realms/pretui/components/origin-grid.usage.gts +87 -0
- package/bundled-realms/pretui/components/otp-input.gts +289 -0
- package/bundled-realms/pretui/components/otp-input.md +47 -0
- package/bundled-realms/pretui/components/otp-input.usage.gts +131 -0
- package/bundled-realms/pretui/components/page-scaffold.gts +343 -0
- package/bundled-realms/pretui/components/page-scaffold.md +57 -0
- package/bundled-realms/pretui/components/page-scaffold.usage.gts +391 -0
- package/bundled-realms/pretui/components/pagination.gts +150 -0
- package/bundled-realms/pretui/components/pagination.md +56 -0
- package/bundled-realms/pretui/components/pagination.usage.gts +33 -0
- package/bundled-realms/pretui/components/panel-section.gts +301 -0
- package/bundled-realms/pretui/components/panel-section.md +48 -0
- package/bundled-realms/pretui/components/panel-section.usage.gts +137 -0
- package/bundled-realms/pretui/components/panel.gts +158 -0
- package/bundled-realms/pretui/components/panel.md +58 -0
- package/bundled-realms/pretui/components/panel.usage.gts +82 -0
- package/bundled-realms/pretui/components/password-input.gts +329 -0
- package/bundled-realms/pretui/components/password-input.md +58 -0
- package/bundled-realms/pretui/components/password-input.usage.gts +156 -0
- package/bundled-realms/pretui/components/password-strength.gts +485 -0
- package/bundled-realms/pretui/components/password-strength.md +50 -0
- package/bundled-realms/pretui/components/password-strength.usage.gts +34 -0
- package/bundled-realms/pretui/components/path-text.gts +288 -0
- package/bundled-realms/pretui/components/path-text.md +58 -0
- package/bundled-realms/pretui/components/path-text.usage.gts +239 -0
- package/bundled-realms/pretui/components/period-input.gts +1100 -0
- package/bundled-realms/pretui/components/period-input.md +54 -0
- package/bundled-realms/pretui/components/period-input.usage.gts +299 -0
- package/bundled-realms/pretui/components/phone-input.gts +80 -0
- package/bundled-realms/pretui/components/phone-input.md +55 -0
- package/bundled-realms/pretui/components/phone-input.usage.gts +91 -0
- package/bundled-realms/pretui/components/pin-input.gts +2 -0
- package/bundled-realms/pretui/components/pin-input.md +45 -0
- package/bundled-realms/pretui/components/pin-input.usage.gts +39 -0
- package/bundled-realms/pretui/components/pip-scale.gts +717 -0
- package/bundled-realms/pretui/components/pip-scale.md +55 -0
- package/bundled-realms/pretui/components/pip-scale.usage.gts +318 -0
- package/bundled-realms/pretui/components/popconfirm.gts +380 -0
- package/bundled-realms/pretui/components/popconfirm.md +78 -0
- package/bundled-realms/pretui/components/popconfirm.usage.gts +171 -0
- package/bundled-realms/pretui/components/popover.gts +198 -0
- package/bundled-realms/pretui/components/popover.md +57 -0
- package/bundled-realms/pretui/components/popover.usage.gts +106 -0
- package/bundled-realms/pretui/components/popup.gts +85 -0
- package/bundled-realms/pretui/components/popup.md +42 -0
- package/bundled-realms/pretui/components/popup.usage.gts +23 -0
- package/bundled-realms/pretui/components/presence.gts +156 -0
- package/bundled-realms/pretui/components/presence.md +55 -0
- package/bundled-realms/pretui/components/presence.usage.gts +204 -0
- package/bundled-realms/pretui/components/progress-bar.gts +177 -0
- package/bundled-realms/pretui/components/progress-bar.md +63 -0
- package/bundled-realms/pretui/components/progress-bar.usage.gts +172 -0
- package/bundled-realms/pretui/components/progress-radial.gts +67 -0
- package/bundled-realms/pretui/components/progress-radial.md +55 -0
- package/bundled-realms/pretui/components/progress-radial.usage.gts +76 -0
- package/bundled-realms/pretui/components/prompt-library.gts +358 -0
- package/bundled-realms/pretui/components/prompt-library.md +45 -0
- package/bundled-realms/pretui/components/prompt-library.usage.gts +117 -0
- package/bundled-realms/pretui/components/property-row.gts +316 -0
- package/bundled-realms/pretui/components/property-row.md +55 -0
- package/bundled-realms/pretui/components/property-row.usage.gts +146 -0
- package/bundled-realms/pretui/components/property-sheet.gts +133 -0
- package/bundled-realms/pretui/components/property-sheet.md +48 -0
- package/bundled-realms/pretui/components/property-sheet.usage.gts +132 -0
- package/bundled-realms/pretui/components/prose.gts +31 -0
- package/bundled-realms/pretui/components/prose.md +57 -0
- package/bundled-realms/pretui/components/prose.usage.gts +15 -0
- package/bundled-realms/pretui/components/pulsing-border.gts +297 -0
- package/bundled-realms/pretui/components/pulsing-border.md +65 -0
- package/bundled-realms/pretui/components/pulsing-border.usage.gts +253 -0
- package/bundled-realms/pretui/components/qr-code.gts +660 -0
- package/bundled-realms/pretui/components/qr-code.md +58 -0
- package/bundled-realms/pretui/components/qr-code.usage.gts +224 -0
- package/bundled-realms/pretui/components/queued-message.gts +83 -0
- package/bundled-realms/pretui/components/queued-message.md +53 -0
- package/bundled-realms/pretui/components/queued-message.usage.gts +21 -0
- package/bundled-realms/pretui/components/radio-card.gts +88 -0
- package/bundled-realms/pretui/components/radio-card.md +72 -0
- package/bundled-realms/pretui/components/radio-card.usage.gts +148 -0
- package/bundled-realms/pretui/components/radio-group.gts +119 -0
- package/bundled-realms/pretui/components/radio-group.md +46 -0
- package/bundled-realms/pretui/components/radio-group.usage.gts +80 -0
- package/bundled-realms/pretui/components/range-slider.gts +34 -0
- package/bundled-realms/pretui/components/range-slider.md +47 -0
- package/bundled-realms/pretui/components/range-slider.usage.gts +46 -0
- package/bundled-realms/pretui/components/rating.examples.gts +67 -0
- package/bundled-realms/pretui/components/rating.gts +266 -0
- package/bundled-realms/pretui/components/rating.md +55 -0
- package/bundled-realms/pretui/components/rating.usage.gts +96 -0
- package/bundled-realms/pretui/components/readiness-panel.gts +856 -0
- package/bundled-realms/pretui/components/readiness-panel.md +64 -0
- package/bundled-realms/pretui/components/readiness-panel.usage.gts +372 -0
- package/bundled-realms/pretui/components/recommendation.gts +316 -0
- package/bundled-realms/pretui/components/recommendation.md +49 -0
- package/bundled-realms/pretui/components/recommendation.usage.gts +103 -0
- package/bundled-realms/pretui/components/record-detail.gts +1170 -0
- package/bundled-realms/pretui/components/record-detail.md +63 -0
- package/bundled-realms/pretui/components/record-detail.usage.gts +533 -0
- package/bundled-realms/pretui/components/record-face.gts +153 -0
- package/bundled-realms/pretui/components/record-pill.gts +116 -0
- package/bundled-realms/pretui/components/record-pill.md +55 -0
- package/bundled-realms/pretui/components/record-pill.usage.gts +108 -0
- package/bundled-realms/pretui/components/relative-time.gts +88 -0
- package/bundled-realms/pretui/components/relative-time.md +58 -0
- package/bundled-realms/pretui/components/relative-time.usage.gts +89 -0
- package/bundled-realms/pretui/components/reorder.gts +620 -0
- package/bundled-realms/pretui/components/reorder.md +47 -0
- package/bundled-realms/pretui/components/reorder.usage.gts +171 -0
- package/bundled-realms/pretui/components/resizable.gts +2 -0
- package/bundled-realms/pretui/components/resizable.md +37 -0
- package/bundled-realms/pretui/components/resizable.usage.gts +53 -0
- package/bundled-realms/pretui/components/result-card.gts +68 -0
- package/bundled-realms/pretui/components/result-card.md +45 -0
- package/bundled-realms/pretui/components/result-card.usage.gts +29 -0
- package/bundled-realms/pretui/components/result.gts +204 -0
- package/bundled-realms/pretui/components/result.md +67 -0
- package/bundled-realms/pretui/components/result.usage.gts +85 -0
- package/bundled-realms/pretui/components/rule-row.gts +462 -0
- package/bundled-realms/pretui/components/rule-row.md +60 -0
- package/bundled-realms/pretui/components/rule-row.usage.gts +157 -0
- package/bundled-realms/pretui/components/scroll-area.gts +121 -0
- package/bundled-realms/pretui/components/scroll-area.md +59 -0
- package/bundled-realms/pretui/components/scroll-area.usage.gts +175 -0
- package/bundled-realms/pretui/components/scroll-progress.gts +222 -0
- package/bundled-realms/pretui/components/scroll-progress.md +48 -0
- package/bundled-realms/pretui/components/scroll-progress.usage.gts +162 -0
- package/bundled-realms/pretui/components/scroller.gts +323 -0
- package/bundled-realms/pretui/components/scroller.md +44 -0
- package/bundled-realms/pretui/components/scroller.usage.gts +184 -0
- package/bundled-realms/pretui/components/scrub-input.gts +691 -0
- package/bundled-realms/pretui/components/scrub-input.md +61 -0
- package/bundled-realms/pretui/components/scrub-input.usage.gts +275 -0
- package/bundled-realms/pretui/components/search-input.gts +141 -0
- package/bundled-realms/pretui/components/search-input.md +56 -0
- package/bundled-realms/pretui/components/search-input.usage.gts +91 -0
- package/bundled-realms/pretui/components/segmented-control.gts +198 -0
- package/bundled-realms/pretui/components/segmented-control.md +39 -0
- package/bundled-realms/pretui/components/segmented-control.usage.gts +66 -0
- package/bundled-realms/pretui/components/select.examples.gts +80 -0
- package/bundled-realms/pretui/components/select.gts +481 -0
- package/bundled-realms/pretui/components/select.md +71 -0
- package/bundled-realms/pretui/components/select.usage.gts +109 -0
- package/bundled-realms/pretui/components/separator.gts +2 -0
- package/bundled-realms/pretui/components/separator.md +36 -0
- package/bundled-realms/pretui/components/separator.usage.gts +32 -0
- package/bundled-realms/pretui/components/session-prep.gts +164 -0
- package/bundled-realms/pretui/components/session-prep.md +48 -0
- package/bundled-realms/pretui/components/session-prep.usage.gts +122 -0
- package/bundled-realms/pretui/components/sheet-toolbar.gts +130 -0
- package/bundled-realms/pretui/components/sheet-toolbar.md +51 -0
- package/bundled-realms/pretui/components/sheet-toolbar.usage.gts +151 -0
- package/bundled-realms/pretui/components/sheet.gts +1166 -0
- package/bundled-realms/pretui/components/sheet.md +78 -0
- package/bundled-realms/pretui/components/sheet.usage.gts +318 -0
- package/bundled-realms/pretui/components/sidebar.gts +1165 -0
- package/bundled-realms/pretui/components/sidebar.md +88 -0
- package/bundled-realms/pretui/components/sidebar.usage.gts +360 -0
- package/bundled-realms/pretui/components/signature-pad.gts +840 -0
- package/bundled-realms/pretui/components/signature-pad.md +57 -0
- package/bundled-realms/pretui/components/signature-pad.usage.gts +222 -0
- package/bundled-realms/pretui/components/skeleton.gts +46 -0
- package/bundled-realms/pretui/components/skeleton.md +56 -0
- package/bundled-realms/pretui/components/skeleton.usage.gts +56 -0
- package/bundled-realms/pretui/components/skip-link.gts +65 -0
- package/bundled-realms/pretui/components/skip-link.md +49 -0
- package/bundled-realms/pretui/components/skip-link.usage.gts +47 -0
- package/bundled-realms/pretui/components/slide-over.gts +2 -0
- package/bundled-realms/pretui/components/slide-over.md +41 -0
- package/bundled-realms/pretui/components/slide-over.usage.gts +50 -0
- package/bundled-realms/pretui/components/slider.examples.gts +61 -0
- package/bundled-realms/pretui/components/slider.gts +331 -0
- package/bundled-realms/pretui/components/slider.md +59 -0
- package/bundled-realms/pretui/components/slider.usage.gts +99 -0
- package/bundled-realms/pretui/components/sliding-highlight.gts +249 -0
- package/bundled-realms/pretui/components/sliding-highlight.md +58 -0
- package/bundled-realms/pretui/components/sliding-highlight.usage.gts +184 -0
- package/bundled-realms/pretui/components/snackbar.gts +2 -0
- package/bundled-realms/pretui/components/snackbar.md +34 -0
- package/bundled-realms/pretui/components/snackbar.usage.gts +31 -0
- package/bundled-realms/pretui/components/sonner.gts +2 -0
- package/bundled-realms/pretui/components/sonner.md +42 -0
- package/bundled-realms/pretui/components/sonner.usage.gts +43 -0
- package/bundled-realms/pretui/components/sparkline.gts +233 -0
- package/bundled-realms/pretui/components/sparkline.md +58 -0
- package/bundled-realms/pretui/components/sparkline.usage.gts +74 -0
- package/bundled-realms/pretui/components/spinner.gts +57 -0
- package/bundled-realms/pretui/components/spinner.md +49 -0
- package/bundled-realms/pretui/components/spinner.usage.gts +65 -0
- package/bundled-realms/pretui/components/split-panes.gts +69 -0
- package/bundled-realms/pretui/components/split-panes.md +54 -0
- package/bundled-realms/pretui/components/split-panes.usage.gts +171 -0
- package/bundled-realms/pretui/components/spotlight.gts +174 -0
- package/bundled-realms/pretui/components/spotlight.md +51 -0
- package/bundled-realms/pretui/components/spotlight.usage.gts +197 -0
- package/bundled-realms/pretui/components/stack-divider.gts +58 -0
- package/bundled-realms/pretui/components/stack.gts +284 -0
- package/bundled-realms/pretui/components/stack.md +81 -0
- package/bundled-realms/pretui/components/stack.usage.gts +228 -0
- package/bundled-realms/pretui/components/stacking-cards.gts +137 -0
- package/bundled-realms/pretui/components/stacking-cards.md +40 -0
- package/bundled-realms/pretui/components/stacking-cards.usage.gts +124 -0
- package/bundled-realms/pretui/components/stat.gts +216 -0
- package/bundled-realms/pretui/components/stat.md +57 -0
- package/bundled-realms/pretui/components/stat.usage.gts +16 -0
- package/bundled-realms/pretui/components/statement-table.examples.gts +185 -0
- package/bundled-realms/pretui/components/statement-table.gts +792 -0
- package/bundled-realms/pretui/components/statement-table.md +58 -0
- package/bundled-realms/pretui/components/statement-table.usage.gts +252 -0
- package/bundled-realms/pretui/components/status-chip.gts +37 -0
- package/bundled-realms/pretui/components/status-chip.md +48 -0
- package/bundled-realms/pretui/components/status-chip.usage.gts +36 -0
- package/bundled-realms/pretui/components/step-list.gts +624 -0
- package/bundled-realms/pretui/components/step-list.md +50 -0
- package/bundled-realms/pretui/components/step-list.usage.gts +166 -0
- package/bundled-realms/pretui/components/stepper.gts +201 -0
- package/bundled-realms/pretui/components/stepper.md +54 -0
- package/bundled-realms/pretui/components/stepper.usage.gts +103 -0
- package/bundled-realms/pretui/components/steps-with-media.gts +254 -0
- package/bundled-realms/pretui/components/steps-with-media.md +54 -0
- package/bundled-realms/pretui/components/steps-with-media.usage.gts +208 -0
- package/bundled-realms/pretui/components/streaming-text.gts +77 -0
- package/bundled-realms/pretui/components/streaming-text.md +55 -0
- package/bundled-realms/pretui/components/streaming-text.usage.gts +15 -0
- package/bundled-realms/pretui/components/swatch-chip.gts +104 -0
- package/bundled-realms/pretui/components/swatch-chip.md +47 -0
- package/bundled-realms/pretui/components/swatch-chip.usage.gts +21 -0
- package/bundled-realms/pretui/components/swatch.gts +141 -0
- package/bundled-realms/pretui/components/swatch.md +50 -0
- package/bundled-realms/pretui/components/swatch.usage.gts +80 -0
- package/bundled-realms/pretui/components/switch.examples.gts +53 -0
- package/bundled-realms/pretui/components/switch.gts +118 -0
- package/bundled-realms/pretui/components/switch.md +62 -0
- package/bundled-realms/pretui/components/switch.usage.gts +59 -0
- package/bundled-realms/pretui/components/table-of-contents.gts +384 -0
- package/bundled-realms/pretui/components/table-of-contents.md +75 -0
- package/bundled-realms/pretui/components/table-of-contents.usage.gts +270 -0
- package/bundled-realms/pretui/components/table.gts +158 -0
- package/bundled-realms/pretui/components/table.md +80 -0
- package/bundled-realms/pretui/components/table.usage.gts +44 -0
- package/bundled-realms/pretui/components/tabs.gts +117 -0
- package/bundled-realms/pretui/components/tabs.md +58 -0
- package/bundled-realms/pretui/components/tabs.usage.gts +94 -0
- package/bundled-realms/pretui/components/tags-input.gts +52 -0
- package/bundled-realms/pretui/components/tags-input.md +48 -0
- package/bundled-realms/pretui/components/tags-input.usage.gts +56 -0
- package/bundled-realms/pretui/components/task-row.gts +483 -0
- package/bundled-realms/pretui/components/task-row.md +48 -0
- package/bundled-realms/pretui/components/task-row.usage.gts +119 -0
- package/bundled-realms/pretui/components/terminal-animation.gts +355 -0
- package/bundled-realms/pretui/components/terminal-animation.md +49 -0
- package/bundled-realms/pretui/components/terminal-animation.usage.gts +110 -0
- package/bundled-realms/pretui/components/text-effects.gts +339 -0
- package/bundled-realms/pretui/components/text-effects.md +49 -0
- package/bundled-realms/pretui/components/text-effects.usage.gts +192 -0
- package/bundled-realms/pretui/components/text-morph.gts +292 -0
- package/bundled-realms/pretui/components/text-morph.md +45 -0
- package/bundled-realms/pretui/components/text-morph.usage.gts +117 -0
- package/bundled-realms/pretui/components/text-rotate.gts +121 -0
- package/bundled-realms/pretui/components/text-rotate.md +44 -0
- package/bundled-realms/pretui/components/text-rotate.usage.gts +73 -0
- package/bundled-realms/pretui/components/text-scramble.gts +189 -0
- package/bundled-realms/pretui/components/text-scramble.md +42 -0
- package/bundled-realms/pretui/components/text-scramble.usage.gts +80 -0
- package/bundled-realms/pretui/components/text-shimmer.gts +89 -0
- package/bundled-realms/pretui/components/text-shimmer.md +42 -0
- package/bundled-realms/pretui/components/text-shimmer.usage.gts +69 -0
- package/bundled-realms/pretui/components/textarea.gts +112 -0
- package/bundled-realms/pretui/components/textarea.md +51 -0
- package/bundled-realms/pretui/components/textarea.usage.gts +100 -0
- package/bundled-realms/pretui/components/theme-frame.gts +272 -0
- package/bundled-realms/pretui/components/theme-frame.md +48 -0
- package/bundled-realms/pretui/components/thinking.gts +431 -0
- package/bundled-realms/pretui/components/thinking.md +47 -0
- package/bundled-realms/pretui/components/thinking.usage.gts +134 -0
- package/bundled-realms/pretui/components/tilt.gts +194 -0
- package/bundled-realms/pretui/components/tilt.md +50 -0
- package/bundled-realms/pretui/components/tilt.usage.gts +174 -0
- package/bundled-realms/pretui/components/time-input.gts +583 -0
- package/bundled-realms/pretui/components/time-input.md +51 -0
- package/bundled-realms/pretui/components/time-input.usage.gts +110 -0
- package/bundled-realms/pretui/components/timeline.gts +269 -0
- package/bundled-realms/pretui/components/timeline.md +63 -0
- package/bundled-realms/pretui/components/timeline.usage.gts +180 -0
- package/bundled-realms/pretui/components/toast.gts +85 -0
- package/bundled-realms/pretui/components/toast.md +57 -0
- package/bundled-realms/pretui/components/toast.usage.gts +18 -0
- package/bundled-realms/pretui/components/toaster.gts +808 -0
- package/bundled-realms/pretui/components/toaster.md +83 -0
- package/bundled-realms/pretui/components/toaster.usage.gts +256 -0
- package/bundled-realms/pretui/components/toggle-group.gts +435 -0
- package/bundled-realms/pretui/components/toggle-group.md +59 -0
- package/bundled-realms/pretui/components/toggle-group.usage.gts +260 -0
- package/bundled-realms/pretui/components/toggle-matrix.gts +994 -0
- package/bundled-realms/pretui/components/toggle-matrix.md +44 -0
- package/bundled-realms/pretui/components/toggle-matrix.usage.gts +243 -0
- package/bundled-realms/pretui/components/toggle.gts +235 -0
- package/bundled-realms/pretui/components/toggle.md +59 -0
- package/bundled-realms/pretui/components/toggle.usage.gts +244 -0
- package/bundled-realms/pretui/components/token-input.gts +483 -0
- package/bundled-realms/pretui/components/token-input.md +50 -0
- package/bundled-realms/pretui/components/token-input.usage.gts +137 -0
- package/bundled-realms/pretui/components/token.gts +197 -0
- package/bundled-realms/pretui/components/token.md +63 -0
- package/bundled-realms/pretui/components/token.usage.gts +128 -0
- package/bundled-realms/pretui/components/toolbar.gts +62 -0
- package/bundled-realms/pretui/components/toolbar.md +50 -0
- package/bundled-realms/pretui/components/toolbar.usage.gts +78 -0
- package/bundled-realms/pretui/components/tooltip.gts +212 -0
- package/bundled-realms/pretui/components/tooltip.md +53 -0
- package/bundled-realms/pretui/components/tooltip.usage.gts +64 -0
- package/bundled-realms/pretui/components/tour.gts +436 -0
- package/bundled-realms/pretui/components/tour.md +62 -0
- package/bundled-realms/pretui/components/tour.usage.gts +70 -0
- package/bundled-realms/pretui/components/transfer.gts +2 -0
- package/bundled-realms/pretui/components/transfer.md +39 -0
- package/bundled-realms/pretui/components/transfer.usage.gts +52 -0
- package/bundled-realms/pretui/components/transmute.gts +103 -0
- package/bundled-realms/pretui/components/transmute.md +49 -0
- package/bundled-realms/pretui/components/transmute.usage.gts +16 -0
- package/bundled-realms/pretui/components/tree-select.gts +596 -0
- package/bundled-realms/pretui/components/tree-select.md +70 -0
- package/bundled-realms/pretui/components/tree-select.usage.gts +75 -0
- package/bundled-realms/pretui/components/tree.gts +532 -0
- package/bundled-realms/pretui/components/tree.md +68 -0
- package/bundled-realms/pretui/components/tree.usage.gts +278 -0
- package/bundled-realms/pretui/components/trim-bar.gts +611 -0
- package/bundled-realms/pretui/components/trim-bar.md +48 -0
- package/bundled-realms/pretui/components/trim-bar.usage.gts +112 -0
- package/bundled-realms/pretui/components/typewriter.gts +122 -0
- package/bundled-realms/pretui/components/typewriter.md +45 -0
- package/bundled-realms/pretui/components/typewriter.usage.gts +105 -0
- package/bundled-realms/pretui/components/typography.gts +379 -0
- package/bundled-realms/pretui/components/typography.md +77 -0
- package/bundled-realms/pretui/components/typography.usage.gts +52 -0
- package/bundled-realms/pretui/components/url-input.gts +130 -0
- package/bundled-realms/pretui/components/url-input.md +58 -0
- package/bundled-realms/pretui/components/url-input.usage.gts +97 -0
- package/bundled-realms/pretui/components/usage-action.gts +16 -0
- package/bundled-realms/pretui/components/usage-argument.gts +109 -0
- package/bundled-realms/pretui/components/usage-argument.md +44 -0
- package/bundled-realms/pretui/components/usage-array.gts +80 -0
- package/bundled-realms/pretui/components/usage-array.md +47 -0
- package/bundled-realms/pretui/components/usage-bool.gts +62 -0
- package/bundled-realms/pretui/components/usage-bool.md +47 -0
- package/bundled-realms/pretui/components/usage-component-arg.gts +16 -0
- package/bundled-realms/pretui/components/usage-css-variable.gts +56 -0
- package/bundled-realms/pretui/components/usage-css-variable.md +48 -0
- package/bundled-realms/pretui/components/usage-number.gts +127 -0
- package/bundled-realms/pretui/components/usage-number.md +48 -0
- package/bundled-realms/pretui/components/usage-object.gts +58 -0
- package/bundled-realms/pretui/components/usage-object.md +48 -0
- package/bundled-realms/pretui/components/usage-string.gts +89 -0
- package/bundled-realms/pretui/components/usage-string.md +46 -0
- package/bundled-realms/pretui/components/usage-yield.gts +16 -0
- package/bundled-realms/pretui/components/value-input.gts +265 -0
- package/bundled-realms/pretui/components/value-input.md +49 -0
- package/bundled-realms/pretui/components/value-input.usage.gts +176 -0
- package/bundled-realms/pretui/components/video-player.gts +80 -0
- package/bundled-realms/pretui/components/video-player.md +46 -0
- package/bundled-realms/pretui/components/video-player.usage.gts +107 -0
- package/bundled-realms/pretui/components/viewport.gts +520 -0
- package/bundled-realms/pretui/components/viewport.md +55 -0
- package/bundled-realms/pretui/components/visually-hidden.gts +49 -0
- package/bundled-realms/pretui/components/visually-hidden.md +47 -0
- package/bundled-realms/pretui/components/visually-hidden.usage.gts +27 -0
- package/bundled-realms/pretui/components/watermark.gts +141 -0
- package/bundled-realms/pretui/components/watermark.md +58 -0
- package/bundled-realms/pretui/components/watermark.usage.gts +63 -0
- package/bundled-realms/pretui/components/waveform.gts +376 -0
- package/bundled-realms/pretui/components/waveform.md +56 -0
- package/bundled-realms/pretui/components/waveform.usage.gts +131 -0
- package/bundled-realms/pretui/components/wizard.gts +677 -0
- package/bundled-realms/pretui/components/wizard.md +58 -0
- package/bundled-realms/pretui/components/wizard.usage.gts +188 -0
- package/bundled-realms/pretui/components/work-item.gts +207 -0
- package/bundled-realms/pretui/components/work-item.md +58 -0
- package/bundled-realms/pretui/components/work-item.usage.gts +103 -0
- package/bundled-realms/pretui/components/zoomable-frame.gts +541 -0
- package/bundled-realms/pretui/components/zoomable-frame.md +50 -0
- package/bundled-realms/pretui/components/zoomable-frame.usage.gts +175 -0
- package/bundled-realms/pretui/cropper/LICENSE +21 -0
- package/bundled-realms/pretui/cropper/README.md +92 -0
- package/bundled-realms/pretui/cropper/index.js +81 -0
- package/bundled-realms/pretui/data-component.gts +1161 -0
- package/bundled-realms/pretui/demo-design-layers.gts +112 -0
- package/bundled-realms/pretui/demo-design-tools.gts +463 -0
- package/bundled-realms/pretui/demo-design-value.gts +9 -0
- package/bundled-realms/pretui/demo-forms-core.gts +82 -0
- package/bundled-realms/pretui/demo-forms-expression.gts +76 -0
- package/bundled-realms/pretui/demo-forms-record.gts +16 -0
- package/bundled-realms/pretui/demo-foundations-more.gts +10 -0
- package/bundled-realms/pretui/demo-foundations.gts +8 -0
- package/bundled-realms/pretui/demo-ink-feedback.gts +12 -0
- package/bundled-realms/pretui/demo-json.gts +17 -0
- package/bundled-realms/pretui/demo-locations.ts +103 -0
- package/bundled-realms/pretui/demo-media-library.gts +101 -0
- package/bundled-realms/pretui/demo-media.gts +6 -0
- package/bundled-realms/pretui/demo-menu.gts +182 -0
- package/bundled-realms/pretui/demo-motion-core.gts +4 -0
- package/bundled-realms/pretui/demo-motion-pointer.gts +21 -0
- package/bundled-realms/pretui/demo-reading-format.gts +10 -0
- package/bundled-realms/pretui/demo-structure-dashboard.gts +212 -0
- package/bundled-realms/pretui/demo-structure-data.gts +4 -0
- package/bundled-realms/pretui/demo-structure-scroll.gts +19 -0
- package/bundled-realms/pretui/demo-structure.gts +21 -0
- package/bundled-realms/pretui/demo-surfaces-grid.gts +104 -0
- package/bundled-realms/pretui/demo-texture.gts +21 -0
- package/bundled-realms/pretui/docs/catalog-taxonomy.md +200 -0
- package/bundled-realms/pretui/docs/composites.md +13 -0
- package/bundled-realms/pretui/docs/reading.md +12 -0
- package/bundled-realms/pretui/docs/structure.md +8 -0
- package/bundled-realms/pretui/emoji-data/LICENSE +202 -0
- package/bundled-realms/pretui/emoji-data/LICENSE.data +202 -0
- package/bundled-realms/pretui/emoji-data/LICENSE.emojibase +21 -0
- package/bundled-realms/pretui/emoji-data/LICENSE.unicode +39 -0
- package/bundled-realms/pretui/emoji-data/README.md +360 -0
- package/bundled-realms/pretui/emoji-data/data.ts +45 -0
- package/bundled-realms/pretui/emoji-data/engine.ts +465 -0
- package/bundled-realms/pretui/example-gallery.gts +129 -0
- package/bundled-realms/pretui/examples-kit.gts +228 -0
- package/bundled-realms/pretui/examples-listing.gts +51 -0
- package/bundled-realms/pretui/examples.gts +584 -0
- package/bundled-realms/pretui/focus.gts +459 -0
- package/bundled-realms/pretui/gridstack/LICENSE +21 -0
- package/bundled-realms/pretui/gridstack/README.md +103 -0
- package/bundled-realms/pretui/gridstack/index.js +169 -0
- package/bundled-realms/pretui/icon-registry.gts +753 -0
- package/bundled-realms/pretui/index.json +11 -0
- package/bundled-realms/pretui/internal/agentic-chat.gts +101 -0
- package/bundled-realms/pretui/internal/blocks.gts +35 -0
- package/bundled-realms/pretui/internal/choice-cards.gts +258 -0
- package/bundled-realms/pretui/internal/color-fixtures.gts +3 -0
- package/bundled-realms/pretui/internal/composites-fixtures.gts +16 -0
- package/bundled-realms/pretui/internal/corner-mark.gts +83 -0
- package/bundled-realms/pretui/internal/design-tools.gts +881 -0
- package/bundled-realms/pretui/internal/extras.gts +31 -0
- package/bundled-realms/pretui/internal/feedback.gts +27 -0
- package/bundled-realms/pretui/internal/file-intake-fixtures.gts +17 -0
- package/bundled-realms/pretui/internal/file-intake.gts +193 -0
- package/bundled-realms/pretui/internal/forms-core.gts +394 -0
- package/bundled-realms/pretui/internal/forms-expression.gts +837 -0
- package/bundled-realms/pretui/internal/forms-picker-fixtures.gts +10 -0
- package/bundled-realms/pretui/internal/forms-picker.gts +129 -0
- package/bundled-realms/pretui/internal/forms-record.gts +173 -0
- package/bundled-realms/pretui/internal/freestyle.gts +117 -0
- package/bundled-realms/pretui/internal/ink.gts +25 -0
- package/bundled-realms/pretui/internal/json-tree.gts +526 -0
- package/bundled-realms/pretui/internal/keep-style.gts +168 -0
- package/bundled-realms/pretui/internal/media-assets.gts +10 -0
- package/bundled-realms/pretui/internal/media-library.gts +14 -0
- package/bundled-realms/pretui/internal/media-viewer.gts +322 -0
- package/bundled-realms/pretui/internal/media-wave.gts +270 -0
- package/bundled-realms/pretui/internal/menu.gts +522 -0
- package/bundled-realms/pretui/internal/money-fixtures.gts +6 -0
- package/bundled-realms/pretui/internal/money.gts +477 -0
- package/bundled-realms/pretui/internal/motion-core.gts +54 -0
- package/bundled-realms/pretui/internal/motion-pointer.gts +234 -0
- package/bundled-realms/pretui/internal/overlay-confirm.gts +35 -0
- package/bundled-realms/pretui/internal/overlay.gts +291 -0
- package/bundled-realms/pretui/internal/reading-extras.gts +56 -0
- package/bundled-realms/pretui/internal/reading-format.gts +232 -0
- package/bundled-realms/pretui/internal/reading-listing.gts +232 -0
- package/bundled-realms/pretui/internal/structure-chart.gts +414 -0
- package/bundled-realms/pretui/internal/structure-dashboard.gts +503 -0
- package/bundled-realms/pretui/internal/structure-flow.gts +48 -0
- package/bundled-realms/pretui/internal/structure-layout-fixtures.gts +36 -0
- package/bundled-realms/pretui/internal/structure-layout.gts +99 -0
- package/bundled-realms/pretui/internal/structure-morph.gts +140 -0
- package/bundled-realms/pretui/internal/structure-scenes.gts +25 -0
- package/bundled-realms/pretui/internal/structure-scroll.gts +72 -0
- package/bundled-realms/pretui/internal/structure-shell-fixtures.gts +25 -0
- package/bundled-realms/pretui/internal/surfaces-canvas-fixtures.gts +5 -0
- package/bundled-realms/pretui/internal/surfaces-canvas.gts +283 -0
- package/bundled-realms/pretui/internal/texture.gts +81 -0
- package/bundled-realms/pretui/internal/toggle-controls-fixtures.gts +7 -0
- package/bundled-realms/pretui/internal/toggle-controls.gts +81 -0
- package/bundled-realms/pretui/json-model.ts +1981 -0
- package/bundled-realms/pretui/media-chrome/LICENSE +19 -0
- package/bundled-realms/pretui/media-chrome/README.md +111 -0
- package/bundled-realms/pretui/media-chrome/index.js +1647 -0
- package/bundled-realms/pretui/media-examples.gts +315 -0
- package/bundled-realms/pretui/model-viewer/LICENSE +202 -0
- package/{LICENSE → bundled-realms/pretui/model-viewer/LICENSE-gainmap-js} +1 -1
- package/bundled-realms/pretui/model-viewer/LICENSE-lit +28 -0
- package/bundled-realms/pretui/model-viewer/LICENSE-three +21 -0
- package/bundled-realms/pretui/model-viewer/NOTICE +67 -0
- package/bundled-realms/pretui/model-viewer/README.md +122 -0
- package/bundled-realms/pretui/model-viewer/index.js +6413 -0
- package/bundled-realms/pretui/package.json +51 -0
- package/bundled-realms/pretui/photoswipe/LICENSE +21 -0
- package/bundled-realms/pretui/photoswipe/README.md +91 -0
- package/bundled-realms/pretui/photoswipe/index.js +149 -0
- package/bundled-realms/pretui/photoswipe/style.ts +465 -0
- package/bundled-realms/pretui/plot/LICENSE +13 -0
- package/bundled-realms/pretui/plot/LICENSE.d3 +13 -0
- package/bundled-realms/pretui/plot/LICENSE.interval-tree-1d +22 -0
- package/bundled-realms/pretui/plot/LICENSE.isoformat +13 -0
- package/bundled-realms/pretui/plot/README.md +35 -0
- package/bundled-realms/pretui/plot/index.d.ts +31 -0
- package/bundled-realms/pretui/plot/index.js +449 -0
- package/bundled-realms/pretui/pretui-component.gts +1336 -0
- package/bundled-realms/pretui/pretui-css.gts +380 -0
- package/bundled-realms/pretui/pretui-primitives.gts +162 -0
- package/bundled-realms/pretui/qrcode/LICENSE +34 -0
- package/bundled-realms/pretui/qrcode/README.md +87 -0
- package/bundled-realms/pretui/qrcode/index.js +35 -0
- package/bundled-realms/pretui/realm.json +16 -0
- package/bundled-realms/pretui/registry.ts +40 -0
- package/bundled-realms/pretui/sigpad/LICENSE +21 -0
- package/bundled-realms/pretui/sigpad/README.md +103 -0
- package/bundled-realms/pretui/sigpad/index.js +30 -0
- package/bundled-realms/pretui/structure-dashboard-css.ts +166 -0
- package/bundled-realms/pretui/surfaces/README.md +37 -0
- package/bundled-realms/pretui/surfaces/canvas/LICENSE.d3 +168 -0
- package/bundled-realms/pretui/surfaces/canvas/LICENSE.xyflow +21 -0
- package/bundled-realms/pretui/surfaces/canvas/index.js +25420 -0
- package/bundled-realms/pretui/surfaces/grid/LICENSE.tanstack +50 -0
- package/bundled-realms/pretui/surfaces/grid/index.js +21478 -0
- package/bundled-realms/pretui/surfaces/layout/index.js +9036 -0
- package/bundled-realms/pretui/surfaces-canvas-css.ts +1640 -0
- package/bundled-realms/pretui/surfaces-canvas-layout.ts +607 -0
- package/bundled-realms/pretui/tsconfig.json +54 -0
- package/bundled-realms/pretui/wavesurfer/LICENSE +29 -0
- package/bundled-realms/pretui/wavesurfer/README.md +85 -0
- package/bundled-realms/pretui/wavesurfer/index.js +184 -0
- package/bundled-realms/pretui/zxcvbn/LICENSE +21 -0
- package/bundled-realms/pretui/zxcvbn/README.md +192 -0
- package/bundled-realms/pretui/zxcvbn/index.d.ts +28 -0
- package/bundled-realms/pretui/zxcvbn/index.js +5931 -0
- package/bundled-test-harness/index.html +1 -1
- package/bundled-test-harness/tests/index.html +1 -1
- package/dist/api.js +1 -1
- package/dist/index.js +33 -33
- package/package.json +1 -1
- package/src/lib/test-engine.ts +14 -4
|
@@ -0,0 +1,1133 @@
|
|
|
1
|
+
// Pretui — MediaPlayer: native audio and video on Media Chrome, with captions, chapters and a transcript.
|
|
2
|
+
//
|
|
3
|
+
// `MediaPlayer` is one contract for audio and video, built on Media Chrome
|
|
4
|
+
// 4.19.2 (MIT, vendored at ./media-chrome — see that folder's README for the
|
|
5
|
+
// licence, the build command and the audit). `AudioPlayer` and `VideoPlayer`
|
|
6
|
+
// are skins over it, in the wrap-and-curry idiom Law 10 names (Tag wraps
|
|
7
|
+
// Pill): they add defaults and a little chrome of their own and forward
|
|
8
|
+
// everything else.
|
|
9
|
+
//
|
|
10
|
+
// WHY MEDIA CHROME AND NOT A PLAYER — it is the foundation every skin can
|
|
11
|
+
// ride, and a checkout confirms why:
|
|
12
|
+
//
|
|
13
|
+
// • Pure Web Components. In Glimmer a custom element is just a tag, so
|
|
14
|
+
// there is no adapter, no wrapper component per control, and no React.
|
|
15
|
+
// • It is themed exclusively through `--media-*` custom properties, which
|
|
16
|
+
// cross the shadow boundary. That is our theming contract exactly:
|
|
17
|
+
// every value below is a Pretui token, so a theme change re-dresses
|
|
18
|
+
// the player and there is not one dark branch anywhere in this file.
|
|
19
|
+
// • It disposes itself. `disconnectedCallback` stops the one rAF loop
|
|
20
|
+
// (the time-range playhead), clears the auto-hide timeout, disconnects
|
|
21
|
+
// both observers and unbinds every listener. Glimmer destroying the
|
|
22
|
+
// element is enough: the element lifecycle owns the frame loop, so
|
|
23
|
+
// nothing here needs a modifier to police it.
|
|
24
|
+
//
|
|
25
|
+
// BETTER THAN THE INSPIRATION — what Media Chrome's own defaults get wrong,
|
|
26
|
+
// and what this file does instead:
|
|
27
|
+
//
|
|
28
|
+
// 1. `autohide` is ON by default, so after two seconds the controls are
|
|
29
|
+
// invisible but still focusable, which is worse than no control. Pretui defaults to `noautohide`, and
|
|
30
|
+
// when a caller opts into cinema behaviour an outer-tree rule re-shows
|
|
31
|
+
// the bar on `:focus-within`. (Outer-tree rules on a slotted child beat
|
|
32
|
+
// the shadow root's `::slotted()` rules, whatever their specificity.)
|
|
33
|
+
// 2. The captions, PiP and fullscreen buttons render whether or not they
|
|
34
|
+
// can do anything. Here they are conditional: no text tracks, no
|
|
35
|
+
// captions button.
|
|
36
|
+
// 3. Buffering is a spinning glyph and nothing else, and the spinner keeps
|
|
37
|
+
// spinning under `prefers-reduced-motion`. Here every transport state
|
|
38
|
+
// also has a text channel, and reduced motion hides the spinner and
|
|
39
|
+
// leans on the text (Law 5's end state).
|
|
40
|
+
// 4. There is no transcript surface at all, and a player without a track
|
|
41
|
+
// channel is incomplete; this one renders a real,
|
|
42
|
+
// seekable transcript in a native `<details>`, with the active cue
|
|
43
|
+
// marked by `aria-current`.
|
|
44
|
+
// 5. Nothing reserves space, so the layout jumps when the poster resolves.
|
|
45
|
+
// Here the stage carries `aspect-ratio` from the first paint.
|
|
46
|
+
//
|
|
47
|
+
// DELIBERATELY NOT HERE: autoplay (there is no `@autoplay` arg and there
|
|
48
|
+
// will not be one), and any object-URL creation — `@src` is passed through
|
|
49
|
+
// untouched, so if you hand it a blob URL you still own revoking it.
|
|
50
|
+
import Component from '@glimmer/component';
|
|
51
|
+
import { tracked } from '@glimmer/tracking';
|
|
52
|
+
import { on } from '@ember/modifier';
|
|
53
|
+
import { fn } from '@ember/helper';
|
|
54
|
+
import { htmlSafe } from '@ember/template';
|
|
55
|
+
import type { SafeString } from '@ember/template';
|
|
56
|
+
import { modifier } from 'ember-modifier';
|
|
57
|
+
import { formatClock } from '../internal/reading-format';
|
|
58
|
+
|
|
59
|
+
// Side-effect import: evaluating the bundle DEFINES the custom elements.
|
|
60
|
+
// It is DOM-free (Media Chrome ships a server-safe globals shim), which is
|
|
61
|
+
// why it is safe at module scope in a realm — verified by evaluating this
|
|
62
|
+
// exact file under plain Node. See ./media-chrome/README.md.
|
|
63
|
+
import '../media-chrome/index.js';
|
|
64
|
+
|
|
65
|
+
// ── Shared media vocabulary ──────────────────────────────────────────────
|
|
66
|
+
|
|
67
|
+
/** What a `MediaPlayer` is playing. Image and model kinds live on
|
|
68
|
+
* `MediaViewer`, which routes them to their own adapters. */
|
|
69
|
+
export type MediaKind = 'audio' | 'video';
|
|
70
|
+
|
|
71
|
+
/** Presets for how much chrome the player wears. */
|
|
72
|
+
export type MediaChrome = 'full' | 'compact' | 'minimal' | 'none';
|
|
73
|
+
|
|
74
|
+
/** One `<track>`. `isDefault` rather than `default` because `default` reads
|
|
75
|
+
* badly as a property in both TypeScript and a Glimmer path. */
|
|
76
|
+
export interface MediaTrackSpec {
|
|
77
|
+
/** URL of the WebVTT file. */
|
|
78
|
+
src: string;
|
|
79
|
+
/** Human label shown in the captions UI ("English", "Deutsch"). */
|
|
80
|
+
label: string;
|
|
81
|
+
/** BCP-47 language tag. */
|
|
82
|
+
srclang: string;
|
|
83
|
+
/** WebVTT track kind. Defaults to `'captions'`. */
|
|
84
|
+
kind?: 'captions' | 'subtitles' | 'descriptions' | 'chapters';
|
|
85
|
+
/** Mark this the default track for its kind. */
|
|
86
|
+
isDefault?: boolean;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/** One transcript line. Times are seconds from the start of the media. */
|
|
90
|
+
export interface TranscriptCue {
|
|
91
|
+
/** Start time in seconds. */
|
|
92
|
+
start: number;
|
|
93
|
+
/** End time in seconds; used only to decide which cue is current. */
|
|
94
|
+
end: number;
|
|
95
|
+
/** The spoken text. */
|
|
96
|
+
text: string;
|
|
97
|
+
/** Optional speaker attribution, rendered as a separate channel. */
|
|
98
|
+
speaker?: string;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/** The transport state a `MediaPlayer` reports. Every value has a text
|
|
102
|
+
* channel in the UI — none of them is signalled by colour alone. */
|
|
103
|
+
export type MediaPhase =
|
|
104
|
+
| 'idle'
|
|
105
|
+
| 'loading'
|
|
106
|
+
| 'buffering'
|
|
107
|
+
| 'playing'
|
|
108
|
+
| 'paused'
|
|
109
|
+
| 'ended'
|
|
110
|
+
| 'error';
|
|
111
|
+
|
|
112
|
+
/** An immutable read of the media element, pushed on media events only. */
|
|
113
|
+
export interface MediaSnapshot {
|
|
114
|
+
phase: MediaPhase;
|
|
115
|
+
currentTime: number;
|
|
116
|
+
duration: number;
|
|
117
|
+
errorMessage: string;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const IDLE_SNAPSHOT: MediaSnapshot = {
|
|
121
|
+
phase: 'idle',
|
|
122
|
+
currentTime: 0,
|
|
123
|
+
duration: 0,
|
|
124
|
+
errorMessage: '',
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
// Monotonic per module load; see `transcriptId`.
|
|
128
|
+
let TRANSCRIPT_SEQ = 0;
|
|
129
|
+
|
|
130
|
+
const EMPTY_TRACKS: readonly MediaTrackSpec[] = [];
|
|
131
|
+
const EMPTY_CUES: readonly TranscriptCue[] = [];
|
|
132
|
+
|
|
133
|
+
// The four `MediaError` codes, in plain language. The browser's own
|
|
134
|
+
// `message` is empty in most engines, so a mapping is not a nicety.
|
|
135
|
+
const MEDIA_ERROR_TEXT: Record<number, string> = {
|
|
136
|
+
1: 'Playback was stopped before the media finished loading.',
|
|
137
|
+
2: 'The network dropped while the media was loading.',
|
|
138
|
+
3: 'The media is damaged, or uses a codec this browser cannot decode.',
|
|
139
|
+
4: 'This media format or address cannot be played here.',
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
/** An ISO-8601 duration for `<time datetime>`, so a transcript timestamp is
|
|
143
|
+
* machine-readable and not just ink. */
|
|
144
|
+
export function isoMediaTime(seconds: number): string {
|
|
145
|
+
const whole = Math.max(0, Math.floor(seconds));
|
|
146
|
+
const hours = Math.floor(whole / 3600);
|
|
147
|
+
const mins = Math.floor(whole / 60) % 60;
|
|
148
|
+
const secs = whole % 60;
|
|
149
|
+
return `PT${hours}H${mins}M${secs}S`;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// A caller string lands in a custom property, so it is filtered rather than
|
|
153
|
+
// trusted: digits, dot, slash and space are everything `aspect-ratio` needs,
|
|
154
|
+
// and nothing in that set can close a declaration.
|
|
155
|
+
const ASPECT_ALLOWED = /[^0-9./ ]/g;
|
|
156
|
+
function safeAspect(value: string | undefined): string {
|
|
157
|
+
const cleaned = (value ?? '').replace(ASPECT_ALLOWED, '').trim();
|
|
158
|
+
return cleaned.length > 0 ? cleaned : '16 / 9';
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// ── The one modifier: element capture + event subscription ───────────────
|
|
162
|
+
//
|
|
163
|
+
// Everything this player knows about playback arrives on media events —
|
|
164
|
+
// there is no polling and no frame loop, because event-driven state is
|
|
165
|
+
// preferred wherever it exists. The modifier
|
|
166
|
+
// owns the listeners and removes every one of them in its destructor.
|
|
167
|
+
//
|
|
168
|
+
// It deliberately does NOT push a snapshot on install: a modifier body runs
|
|
169
|
+
// inside the render transaction, and a tracked write there is the
|
|
170
|
+
// backtracking-rerender assertion. The first real snapshot arrives with
|
|
171
|
+
// `loadedmetadata`, a few milliseconds later, and `IDLE_SNAPSHOT` is a
|
|
172
|
+
// truthful description of the gap.
|
|
173
|
+
const BASE_EVENTS = [
|
|
174
|
+
'loadedmetadata',
|
|
175
|
+
'durationchange',
|
|
176
|
+
'canplay',
|
|
177
|
+
'play',
|
|
178
|
+
'playing',
|
|
179
|
+
'pause',
|
|
180
|
+
'ended',
|
|
181
|
+
'waiting',
|
|
182
|
+
'stalled',
|
|
183
|
+
'emptied',
|
|
184
|
+
'error',
|
|
185
|
+
];
|
|
186
|
+
const TIME_EVENTS = ['timeupdate', 'seeked'];
|
|
187
|
+
|
|
188
|
+
function readSnapshot(el: HTMLMediaElement): MediaSnapshot {
|
|
189
|
+
const failure = el.error;
|
|
190
|
+
const currentTime = Number.isFinite(el.currentTime) ? el.currentTime : 0;
|
|
191
|
+
const duration = Number.isFinite(el.duration) ? el.duration : 0;
|
|
192
|
+
if (failure) {
|
|
193
|
+
return {
|
|
194
|
+
phase: 'error',
|
|
195
|
+
currentTime,
|
|
196
|
+
duration,
|
|
197
|
+
errorMessage:
|
|
198
|
+
MEDIA_ERROR_TEXT[failure.code] ?? 'This media could not be played.',
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
let phase: MediaPhase;
|
|
202
|
+
if (el.ended) {
|
|
203
|
+
phase = 'ended';
|
|
204
|
+
} else if (el.readyState < 1 && el.networkState === 2) {
|
|
205
|
+
phase = 'loading';
|
|
206
|
+
} else if (!el.paused && el.readyState < 3) {
|
|
207
|
+
phase = 'buffering';
|
|
208
|
+
} else if (el.paused) {
|
|
209
|
+
phase = el.readyState < 1 ? 'idle' : 'paused';
|
|
210
|
+
} else {
|
|
211
|
+
phase = 'playing';
|
|
212
|
+
}
|
|
213
|
+
return { phase, currentTime, duration, errorMessage: '' };
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
const mediaBridge = modifier(
|
|
217
|
+
(
|
|
218
|
+
el: HTMLMediaElement,
|
|
219
|
+
[onElement, onSnapshot, withTime]: [
|
|
220
|
+
(media: HTMLMediaElement | null) => void,
|
|
221
|
+
(snapshot: MediaSnapshot) => void,
|
|
222
|
+
boolean,
|
|
223
|
+
],
|
|
224
|
+
) => {
|
|
225
|
+
// Untracked write, so this is safe inside the render transaction.
|
|
226
|
+
onElement(el);
|
|
227
|
+
const push = () => onSnapshot(readSnapshot(el));
|
|
228
|
+
const names = withTime ? BASE_EVENTS.concat(TIME_EVENTS) : BASE_EVENTS;
|
|
229
|
+
for (const name of names) {
|
|
230
|
+
el.addEventListener(name, push);
|
|
231
|
+
}
|
|
232
|
+
return () => {
|
|
233
|
+
for (const name of names) {
|
|
234
|
+
el.removeEventListener(name, push);
|
|
235
|
+
}
|
|
236
|
+
onElement(null);
|
|
237
|
+
};
|
|
238
|
+
},
|
|
239
|
+
);
|
|
240
|
+
|
|
241
|
+
// ── MediaPlayer ──────────────────────────────────────────────────────────
|
|
242
|
+
|
|
243
|
+
export interface MediaPlayerSignature {
|
|
244
|
+
Args: {
|
|
245
|
+
/** URL of the media. Passed through untouched — the player never builds
|
|
246
|
+
* or revokes an object URL, so a blob URL stays the caller's to revoke. */
|
|
247
|
+
src?: string;
|
|
248
|
+
/** `'video'` (default) or `'audio'`. Audio mode lays the transport out
|
|
249
|
+
* in normal flow instead of over a picture. */
|
|
250
|
+
kind?: MediaKind;
|
|
251
|
+
/** Accessible name for the player region, and the heading when one is
|
|
252
|
+
* shown. Strongly recommended: an unnamed region is a dead end for a
|
|
253
|
+
* screen-reader user moving by landmark. */
|
|
254
|
+
label?: string;
|
|
255
|
+
/** Poster image for video. Also the thing that makes the reserved space
|
|
256
|
+
* useful rather than merely blank. */
|
|
257
|
+
poster?: string;
|
|
258
|
+
/** A tiny inline placeholder (data URI or blurhash-style image) painted
|
|
259
|
+
* under the poster while the poster itself loads. */
|
|
260
|
+
placeholder?: string;
|
|
261
|
+
/** Aspect ratio for the stage, as a CSS `aspect-ratio` value. Reserved
|
|
262
|
+
* from the first paint so nothing reflows (Law 8's corollary).
|
|
263
|
+
* @default '16 / 9' */
|
|
264
|
+
aspectRatio?: string;
|
|
265
|
+
/** Text tracks. Captions/subtitles get a captions button; descriptions
|
|
266
|
+
* and chapters ride along for the browser and the scrubber. */
|
|
267
|
+
tracks?: readonly MediaTrackSpec[];
|
|
268
|
+
/** URL of a WebVTT thumbnails track. Present ⇒ the scrubber shows a
|
|
269
|
+
* preview image while seeking. */
|
|
270
|
+
thumbnails?: string;
|
|
271
|
+
/** A seekable transcript. Rendered in a native `<details>`; the cue
|
|
272
|
+
* containing the playhead carries `aria-current`. */
|
|
273
|
+
transcript?: readonly TranscriptCue[];
|
|
274
|
+
/** Open the transcript disclosure on first paint. @default false */
|
|
275
|
+
transcriptOpen?: boolean;
|
|
276
|
+
/** Turn on the first subtitles track without the reader asking.
|
|
277
|
+
* @default false */
|
|
278
|
+
captionsDefault?: boolean;
|
|
279
|
+
/** How much chrome to wear. `'none'` renders an empty bar for the
|
|
280
|
+
* `<:controls>` block to fill. @default 'full' */
|
|
281
|
+
chrome?: MediaChrome;
|
|
282
|
+
/** Seconds for the skip buttons and the ←/→ hotkeys. @default 10 */
|
|
283
|
+
seekOffset?: number;
|
|
284
|
+
/** Let the controls fade out during playback (Media Chrome's own
|
|
285
|
+
* default, which Pretui inverts). Focus always brings them back.
|
|
286
|
+
* @default false */
|
|
287
|
+
autoHide?: boolean;
|
|
288
|
+
/** Loop the media. @default false */
|
|
289
|
+
loop?: boolean;
|
|
290
|
+
/** Start muted. Not autoplay — there is no autoplay here. @default false */
|
|
291
|
+
muted?: boolean;
|
|
292
|
+
/** `<video preload>`. @default 'metadata' */
|
|
293
|
+
preload?: 'none' | 'metadata' | 'auto';
|
|
294
|
+
/** `crossorigin` on the media element. Cross-origin `<track>` files
|
|
295
|
+
* need `'anonymous'` here or the browser drops them silently. */
|
|
296
|
+
crossOrigin?: 'anonymous' | 'use-credentials';
|
|
297
|
+
/** Hide the status line under the transport. The line is the text
|
|
298
|
+
* channel for buffering and error state — turn it off only when the
|
|
299
|
+
* host shows the same thing elsewhere. @default false */
|
|
300
|
+
quietStatus?: boolean;
|
|
301
|
+
/** Fires on every media event with the current snapshot. */
|
|
302
|
+
onSnapshot?: (snapshot: MediaSnapshot) => void;
|
|
303
|
+
};
|
|
304
|
+
Blocks: {
|
|
305
|
+
/** Floats over the picture, top-left: a live pill, a rights badge. Not
|
|
306
|
+
* pointer-interactive by default so it never steals a click from the
|
|
307
|
+
* gesture layer — set `pointer-events: auto` on your own control. */
|
|
308
|
+
overlay: [];
|
|
309
|
+
/** Appended INSIDE the control bar, just before fullscreen. Combine
|
|
310
|
+
* with `@chrome='none'` to own the bar completely. */
|
|
311
|
+
controls: [];
|
|
312
|
+
/** Under the transport, above the transcript. */
|
|
313
|
+
footer: [];
|
|
314
|
+
};
|
|
315
|
+
Element: HTMLDivElement;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
interface TranscriptRow {
|
|
319
|
+
index: number;
|
|
320
|
+
start: number;
|
|
321
|
+
clock: string;
|
|
322
|
+
iso: string;
|
|
323
|
+
speaker: string;
|
|
324
|
+
text: string;
|
|
325
|
+
isActive: boolean;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
export class MediaPlayer extends Component<MediaPlayerSignature> {
|
|
329
|
+
/** Snapshot of the media element. Written only from media events, which
|
|
330
|
+
* are asynchronous — never during render. */
|
|
331
|
+
@tracked private snapshot: MediaSnapshot = IDLE_SNAPSHOT;
|
|
332
|
+
|
|
333
|
+
/** Plain field on purpose: it is a handle for event handlers to act on,
|
|
334
|
+
* never something the template reads, so making it tracked would turn
|
|
335
|
+
* every install into a re-render dependency. */
|
|
336
|
+
private media: HTMLMediaElement | null = null;
|
|
337
|
+
|
|
338
|
+
private takeElement = (media: HTMLMediaElement | null) => {
|
|
339
|
+
this.media = media;
|
|
340
|
+
};
|
|
341
|
+
|
|
342
|
+
private takeSnapshot = (snapshot: MediaSnapshot) => {
|
|
343
|
+
this.snapshot = snapshot;
|
|
344
|
+
this.args.onSnapshot?.(snapshot);
|
|
345
|
+
};
|
|
346
|
+
|
|
347
|
+
seekTo = (seconds: number) => {
|
|
348
|
+
const media = this.media;
|
|
349
|
+
if (media && Number.isFinite(seconds)) {
|
|
350
|
+
media.currentTime = Math.max(0, seconds);
|
|
351
|
+
}
|
|
352
|
+
};
|
|
353
|
+
|
|
354
|
+
// ── shape ──────────────────────────────────────────────────────────────
|
|
355
|
+
|
|
356
|
+
get kind(): MediaKind {
|
|
357
|
+
return this.args.kind ?? 'video';
|
|
358
|
+
}
|
|
359
|
+
get isAudio(): boolean {
|
|
360
|
+
return this.kind === 'audio';
|
|
361
|
+
}
|
|
362
|
+
get chrome(): MediaChrome {
|
|
363
|
+
return this.args.chrome ?? 'full';
|
|
364
|
+
}
|
|
365
|
+
get seekOffset(): number {
|
|
366
|
+
return this.args.seekOffset ?? 10;
|
|
367
|
+
}
|
|
368
|
+
get seekOffsetText(): string {
|
|
369
|
+
return String(this.seekOffset);
|
|
370
|
+
}
|
|
371
|
+
get preload(): string {
|
|
372
|
+
return this.args.preload ?? 'metadata';
|
|
373
|
+
}
|
|
374
|
+
get hostStyle(): SafeString {
|
|
375
|
+
return htmlSafe(`--pretui-media-aspect: ${safeAspect(this.args.aspectRatio)}`);
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
// Boolean attributes, and the trap under them. Glimmer binds a dynamic
|
|
379
|
+
// attribute through the PROPERTY when the element has one — and every
|
|
380
|
+
// name here is a property: `details.open`, `video.loop`, `video.muted`,
|
|
381
|
+
// and Media Chrome's own `audio`/`noautohide`/`defaultsubtitles`
|
|
382
|
+
// accessors. So the value has to be truthy as a *value*, not merely
|
|
383
|
+
// present as an attribute: `''` sets `el.open = ''`, which is false, and
|
|
384
|
+
// the element silently does nothing. `true` is correct on both paths —
|
|
385
|
+
// it sets the property, or writes `="true"`, which is present.
|
|
386
|
+
// (`false` would be wrong the other way: it writes the string "false",
|
|
387
|
+
// and a present attribute is true. Hence `undefined` to remove.)
|
|
388
|
+
private flag(wanted: boolean): true | undefined {
|
|
389
|
+
return wanted ? true : undefined;
|
|
390
|
+
}
|
|
391
|
+
get audioAttr(): true | undefined {
|
|
392
|
+
return this.flag(this.isAudio);
|
|
393
|
+
}
|
|
394
|
+
get noAutohideAttr(): true | undefined {
|
|
395
|
+
return this.flag(!(this.args.autoHide ?? false));
|
|
396
|
+
}
|
|
397
|
+
get defaultSubtitlesAttr(): true | undefined {
|
|
398
|
+
return this.flag(this.args.captionsDefault ?? false);
|
|
399
|
+
}
|
|
400
|
+
get loopAttr(): true | undefined {
|
|
401
|
+
return this.flag(this.args.loop ?? false);
|
|
402
|
+
}
|
|
403
|
+
get mutedAttr(): true | undefined {
|
|
404
|
+
return this.flag(this.args.muted ?? false);
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
// ── tracks ─────────────────────────────────────────────────────────────
|
|
408
|
+
|
|
409
|
+
get tracks(): readonly MediaTrackSpec[] {
|
|
410
|
+
return this.args.tracks ?? EMPTY_TRACKS;
|
|
411
|
+
}
|
|
412
|
+
get hasCaptions(): boolean {
|
|
413
|
+
return this.tracks.some((track) => {
|
|
414
|
+
const kind = track.kind ?? 'captions';
|
|
415
|
+
return kind === 'captions' || kind === 'subtitles';
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
get captionCount(): number {
|
|
419
|
+
return this.tracks.length;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
// ── chrome presets ─────────────────────────────────────────────────────
|
|
423
|
+
// Four named steps rather than nine booleans (Law 7 wants named knobs, not
|
|
424
|
+
// a switchboard); anything finer is `@chrome='none'` plus `<:controls>`.
|
|
425
|
+
|
|
426
|
+
get showScrubber(): boolean {
|
|
427
|
+
return this.chrome !== 'none';
|
|
428
|
+
}
|
|
429
|
+
get showSkip(): boolean {
|
|
430
|
+
return this.chrome === 'full';
|
|
431
|
+
}
|
|
432
|
+
get showTime(): boolean {
|
|
433
|
+
return this.chrome === 'full' || this.chrome === 'compact';
|
|
434
|
+
}
|
|
435
|
+
get showVolume(): boolean {
|
|
436
|
+
return this.chrome === 'full' || this.chrome === 'compact';
|
|
437
|
+
}
|
|
438
|
+
get showRate(): boolean {
|
|
439
|
+
return this.chrome === 'full';
|
|
440
|
+
}
|
|
441
|
+
get showCaptions(): boolean {
|
|
442
|
+
return this.chrome !== 'none' && this.hasCaptions;
|
|
443
|
+
}
|
|
444
|
+
get showPip(): boolean {
|
|
445
|
+
return this.chrome === 'full' && !this.isAudio;
|
|
446
|
+
}
|
|
447
|
+
get showFullscreen(): boolean {
|
|
448
|
+
return this.chrome !== 'none' && !this.isAudio;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
// ── status: the text channel ───────────────────────────────────────────
|
|
452
|
+
|
|
453
|
+
get phase(): MediaPhase {
|
|
454
|
+
return this.snapshot.phase;
|
|
455
|
+
}
|
|
456
|
+
get statusText(): string {
|
|
457
|
+
switch (this.phase) {
|
|
458
|
+
case 'loading':
|
|
459
|
+
return 'Loading media';
|
|
460
|
+
case 'buffering':
|
|
461
|
+
return 'Buffering';
|
|
462
|
+
case 'playing':
|
|
463
|
+
return 'Playing';
|
|
464
|
+
case 'paused':
|
|
465
|
+
return 'Paused';
|
|
466
|
+
case 'ended':
|
|
467
|
+
return 'Ended';
|
|
468
|
+
case 'error':
|
|
469
|
+
return this.snapshot.errorMessage;
|
|
470
|
+
default:
|
|
471
|
+
return 'Ready';
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
get statusGlyph(): string {
|
|
475
|
+
switch (this.phase) {
|
|
476
|
+
case 'loading':
|
|
477
|
+
case 'buffering':
|
|
478
|
+
return '···';
|
|
479
|
+
case 'playing':
|
|
480
|
+
return '▶';
|
|
481
|
+
case 'paused':
|
|
482
|
+
return '❚❚';
|
|
483
|
+
case 'ended':
|
|
484
|
+
return '■';
|
|
485
|
+
case 'error':
|
|
486
|
+
return '!';
|
|
487
|
+
default:
|
|
488
|
+
return '○';
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
get showStatus(): boolean {
|
|
492
|
+
return !(this.args.quietStatus ?? false);
|
|
493
|
+
}
|
|
494
|
+
/** The live region says one thing and says it rarely: a failure. Play,
|
|
495
|
+
* pause and seek are already announced by the transport buttons' own
|
|
496
|
+
* labels, and repeating them would be the "announces per keystroke"
|
|
497
|
+
* failure. */
|
|
498
|
+
get announcement(): string {
|
|
499
|
+
return this.phase === 'error' ? this.snapshot.errorMessage : '';
|
|
500
|
+
}
|
|
501
|
+
get durationText(): string {
|
|
502
|
+
return formatClock(this.snapshot.duration);
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
// ── transcript ─────────────────────────────────────────────────────────
|
|
506
|
+
|
|
507
|
+
get transcript(): readonly TranscriptCue[] {
|
|
508
|
+
return this.args.transcript ?? EMPTY_CUES;
|
|
509
|
+
}
|
|
510
|
+
get hasTranscript(): boolean {
|
|
511
|
+
return this.transcript.length > 0;
|
|
512
|
+
}
|
|
513
|
+
/** Subscribing to `timeupdate` costs a re-render four times a second, so
|
|
514
|
+
* it is only subscribed when something on screen actually moves with the
|
|
515
|
+
* playhead. */
|
|
516
|
+
get wantsTime(): boolean {
|
|
517
|
+
return this.hasTranscript;
|
|
518
|
+
}
|
|
519
|
+
/** Uncontrolled disclosure state: `undefined` means "@transcriptOpen
|
|
520
|
+
* still applies", so a caller flipping the arg is still obeyed until the
|
|
521
|
+
* reader touches the toggle. */
|
|
522
|
+
@tracked private transcriptToggled: boolean | undefined = undefined;
|
|
523
|
+
|
|
524
|
+
get transcriptExpanded(): boolean {
|
|
525
|
+
return this.transcriptToggled ?? (this.args.transcriptOpen ?? false);
|
|
526
|
+
}
|
|
527
|
+
toggleTranscript = () => {
|
|
528
|
+
this.transcriptToggled = !this.transcriptExpanded;
|
|
529
|
+
};
|
|
530
|
+
/** A per-instance id for `aria-controls`. A module counter, not a random
|
|
531
|
+
* or a timestamp — both are forbidden, and neither is needed: the id has
|
|
532
|
+
* to be unique in a document, not unguessable. */
|
|
533
|
+
private uid = ++TRANSCRIPT_SEQ;
|
|
534
|
+
get transcriptId(): string {
|
|
535
|
+
return `pretui-transcript-${this.uid}`;
|
|
536
|
+
}
|
|
537
|
+
get transcriptRows(): TranscriptRow[] {
|
|
538
|
+
const now = this.snapshot.currentTime;
|
|
539
|
+
return this.transcript.map((cue, index) => ({
|
|
540
|
+
index,
|
|
541
|
+
start: cue.start,
|
|
542
|
+
clock: formatClock(cue.start),
|
|
543
|
+
iso: isoMediaTime(cue.start),
|
|
544
|
+
speaker: cue.speaker ?? '',
|
|
545
|
+
text: cue.text,
|
|
546
|
+
isActive: now >= cue.start && now < cue.end,
|
|
547
|
+
}));
|
|
548
|
+
}
|
|
549
|
+
get transcriptSummary(): string {
|
|
550
|
+
const count = this.transcript.length;
|
|
551
|
+
return count === 1 ? '1 line' : `${count} lines`;
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
<template>
|
|
555
|
+
<div
|
|
556
|
+
class='pretui-media'
|
|
557
|
+
role={{if @label 'region'}}
|
|
558
|
+
aria-label={{@label}}
|
|
559
|
+
style={{this.hostStyle}}
|
|
560
|
+
data-kind={{this.kind}}
|
|
561
|
+
data-phase={{this.phase}}
|
|
562
|
+
data-test-pretui-media-player
|
|
563
|
+
...attributes
|
|
564
|
+
>
|
|
565
|
+
<media-controller
|
|
566
|
+
class='pretui-media-stage'
|
|
567
|
+
audio={{this.audioAttr}}
|
|
568
|
+
noautohide={{this.noAutohideAttr}}
|
|
569
|
+
defaultsubtitles={{this.defaultSubtitlesAttr}}
|
|
570
|
+
keyboardforwardseekoffset={{this.seekOffsetText}}
|
|
571
|
+
keyboardbackwardseekoffset={{this.seekOffsetText}}
|
|
572
|
+
data-test-pretui-media-controller
|
|
573
|
+
>
|
|
574
|
+
{{#if this.isAudio}}
|
|
575
|
+
<audio
|
|
576
|
+
slot='media'
|
|
577
|
+
aria-label={{@label}}
|
|
578
|
+
src={{@src}}
|
|
579
|
+
preload={{this.preload}}
|
|
580
|
+
crossorigin={{@crossOrigin}}
|
|
581
|
+
loop={{this.loopAttr}}
|
|
582
|
+
muted={{this.mutedAttr}}
|
|
583
|
+
data-test-pretui-media-element
|
|
584
|
+
{{mediaBridge this.takeElement this.takeSnapshot this.wantsTime}}
|
|
585
|
+
>
|
|
586
|
+
{{#each this.tracks as |part|}}
|
|
587
|
+
<track
|
|
588
|
+
kind={{if part.kind part.kind 'captions'}}
|
|
589
|
+
src={{part.src}}
|
|
590
|
+
srclang={{part.srclang}}
|
|
591
|
+
label={{part.label}}
|
|
592
|
+
default={{if part.isDefault true}}
|
|
593
|
+
/>
|
|
594
|
+
{{/each}}
|
|
595
|
+
</audio>
|
|
596
|
+
{{else}}
|
|
597
|
+
<video
|
|
598
|
+
slot='media'
|
|
599
|
+
aria-label={{@label}}
|
|
600
|
+
src={{@src}}
|
|
601
|
+
preload={{this.preload}}
|
|
602
|
+
crossorigin={{@crossOrigin}}
|
|
603
|
+
loop={{this.loopAttr}}
|
|
604
|
+
muted={{this.mutedAttr}}
|
|
605
|
+
playsinline
|
|
606
|
+
data-test-pretui-media-element
|
|
607
|
+
{{mediaBridge this.takeElement this.takeSnapshot this.wantsTime}}
|
|
608
|
+
>
|
|
609
|
+
{{#each this.tracks as |part|}}
|
|
610
|
+
<track
|
|
611
|
+
kind={{if part.kind part.kind 'captions'}}
|
|
612
|
+
src={{part.src}}
|
|
613
|
+
srclang={{part.srclang}}
|
|
614
|
+
label={{part.label}}
|
|
615
|
+
default={{if part.isDefault true}}
|
|
616
|
+
/>
|
|
617
|
+
{{/each}}
|
|
618
|
+
{{#if @thumbnails}}
|
|
619
|
+
<track kind='metadata' label='thumbnails' src={{@thumbnails}} />
|
|
620
|
+
{{/if}}
|
|
621
|
+
</video>
|
|
622
|
+
{{/if}}
|
|
623
|
+
|
|
624
|
+
{{#unless this.isAudio}}
|
|
625
|
+
{{#if @poster}}
|
|
626
|
+
<media-poster-image
|
|
627
|
+
slot='poster'
|
|
628
|
+
src={{@poster}}
|
|
629
|
+
placeholdersrc={{@placeholder}}
|
|
630
|
+
></media-poster-image>
|
|
631
|
+
{{/if}}
|
|
632
|
+
<media-loading-indicator
|
|
633
|
+
slot='centered-chrome'
|
|
634
|
+
noautohide
|
|
635
|
+
></media-loading-indicator>
|
|
636
|
+
{{/unless}}
|
|
637
|
+
|
|
638
|
+
<media-error-dialog></media-error-dialog>
|
|
639
|
+
|
|
640
|
+
{{! the overlay collapses to nothing when the block is empty — see
|
|
641
|
+
.pretui-media-overlay:empty, which is why the yield is written
|
|
642
|
+
flush against the tags }}
|
|
643
|
+
<div
|
|
644
|
+
class='pretui-media-overlay'
|
|
645
|
+
slot='centered-chrome'
|
|
646
|
+
>{{yield to='overlay'}}</div>
|
|
647
|
+
|
|
648
|
+
{{#if this.showScrubber}}
|
|
649
|
+
<media-control-bar class='pretui-media-scrub'>
|
|
650
|
+
<media-time-range></media-time-range>
|
|
651
|
+
</media-control-bar>
|
|
652
|
+
{{/if}}
|
|
653
|
+
|
|
654
|
+
<media-control-bar class='pretui-media-bar'>
|
|
655
|
+
{{#if this.showScrubber}}
|
|
656
|
+
<media-play-button></media-play-button>
|
|
657
|
+
{{/if}}
|
|
658
|
+
{{#if this.showSkip}}
|
|
659
|
+
<media-seek-backward-button
|
|
660
|
+
seekoffset={{this.seekOffsetText}}
|
|
661
|
+
></media-seek-backward-button>
|
|
662
|
+
<media-seek-forward-button
|
|
663
|
+
seekoffset={{this.seekOffsetText}}
|
|
664
|
+
></media-seek-forward-button>
|
|
665
|
+
{{/if}}
|
|
666
|
+
{{#if this.showTime}}
|
|
667
|
+
<media-time-display showduration></media-time-display>
|
|
668
|
+
{{/if}}
|
|
669
|
+
<span class='pretui-media-gap'></span>
|
|
670
|
+
<span class='pretui-media-slot'>{{yield to='controls'}}</span>
|
|
671
|
+
{{#if this.showCaptions}}
|
|
672
|
+
<media-captions-button></media-captions-button>
|
|
673
|
+
{{/if}}
|
|
674
|
+
{{#if this.showRate}}
|
|
675
|
+
<media-playback-rate-button
|
|
676
|
+
rates='0.5 1 1.25 1.5 2'
|
|
677
|
+
></media-playback-rate-button>
|
|
678
|
+
{{/if}}
|
|
679
|
+
{{#if this.showVolume}}
|
|
680
|
+
<media-mute-button></media-mute-button>
|
|
681
|
+
<media-volume-range class='pretui-media-volume'></media-volume-range>
|
|
682
|
+
{{/if}}
|
|
683
|
+
{{#if this.showPip}}
|
|
684
|
+
<media-pip-button></media-pip-button>
|
|
685
|
+
{{/if}}
|
|
686
|
+
{{#if this.showFullscreen}}
|
|
687
|
+
<media-fullscreen-button></media-fullscreen-button>
|
|
688
|
+
{{/if}}
|
|
689
|
+
</media-control-bar>
|
|
690
|
+
</media-controller>
|
|
691
|
+
|
|
692
|
+
{{#if this.showStatus}}
|
|
693
|
+
<p class='pretui-media-status' data-test-pretui-media-status>
|
|
694
|
+
<span class='pretui-media-statusGlyph' aria-hidden='true'>{{this.statusGlyph}}</span>
|
|
695
|
+
<span class='pretui-media-statusText'>{{this.statusText}}</span>
|
|
696
|
+
{{#if this.snapshot.duration}}
|
|
697
|
+
<span class='pretui-media-statusDur'>{{this.durationText}}</span>
|
|
698
|
+
{{/if}}
|
|
699
|
+
</p>
|
|
700
|
+
{{/if}}
|
|
701
|
+
|
|
702
|
+
{{! always present, always empty until a load fails — an aria-live
|
|
703
|
+
element inserted with text already in it is not reliably announced }}
|
|
704
|
+
<p
|
|
705
|
+
class='pretui-media-live'
|
|
706
|
+
role='status'
|
|
707
|
+
aria-live='polite'
|
|
708
|
+
>{{this.announcement}}</p>
|
|
709
|
+
|
|
710
|
+
<div class='pretui-media-footer'>{{yield to='footer'}}</div>
|
|
711
|
+
|
|
712
|
+
{{! An APG disclosure rather than <details>/<summary>, and NOT by
|
|
713
|
+
preference: realm lint's `no-nested-interactive` counts <details>
|
|
714
|
+
as interactive and rejects any <button> inside it, cue buttons
|
|
715
|
+
included. The platform element would have been the better answer
|
|
716
|
+
(platform behaviour before JS re-implementation) — it
|
|
717
|
+
is unavailable here, so the replacement carries the full
|
|
718
|
+
contract instead: a real button, aria-expanded, aria-controls,
|
|
719
|
+
and a region that stays in the DOM and hides with `hidden`, so
|
|
720
|
+
the id aria-controls names always resolves. }}
|
|
721
|
+
{{#if this.hasTranscript}}
|
|
722
|
+
<div
|
|
723
|
+
class='pretui-media-transcript'
|
|
724
|
+
data-open={{if this.transcriptExpanded 'true' 'false'}}
|
|
725
|
+
data-test-pretui-media-transcript
|
|
726
|
+
>
|
|
727
|
+
<button
|
|
728
|
+
type='button'
|
|
729
|
+
class='pretui-media-transcriptHead'
|
|
730
|
+
aria-expanded={{if this.transcriptExpanded 'true' 'false'}}
|
|
731
|
+
aria-controls={{this.transcriptId}}
|
|
732
|
+
data-test-pretui-media-transcript-toggle
|
|
733
|
+
{{on 'click' this.toggleTranscript}}
|
|
734
|
+
>
|
|
735
|
+
<span class='pretui-media-transcriptCaret' aria-hidden='true'>▸</span>
|
|
736
|
+
<span class='pretui-media-transcriptTitle'>Transcript</span>
|
|
737
|
+
<span class='pretui-media-transcriptCount'>{{this.transcriptSummary}}</span>
|
|
738
|
+
</button>
|
|
739
|
+
<ol
|
|
740
|
+
class='pretui-media-cues'
|
|
741
|
+
id={{this.transcriptId}}
|
|
742
|
+
hidden={{unless this.transcriptExpanded true}}
|
|
743
|
+
>
|
|
744
|
+
{{#each this.transcriptRows key='index' as |row|}}
|
|
745
|
+
<li class='pretui-media-cue'>
|
|
746
|
+
<button
|
|
747
|
+
type='button'
|
|
748
|
+
class='pretui-media-cueBtn'
|
|
749
|
+
aria-current={{if row.isActive 'true'}}
|
|
750
|
+
data-active={{if row.isActive 'true'}}
|
|
751
|
+
data-test-pretui-media-cue
|
|
752
|
+
{{on 'click' (fn this.seekTo row.start)}}
|
|
753
|
+
>
|
|
754
|
+
<span class='pretui-media-cueClock'>{{row.clock}}</span>
|
|
755
|
+
<span class='pretui-media-cueBody'>
|
|
756
|
+
{{#if row.speaker}}<span
|
|
757
|
+
class='pretui-media-cueSpeaker'
|
|
758
|
+
>{{row.speaker}}</span>{{/if}}
|
|
759
|
+
<span class='pretui-media-cueText'>{{row.text}}</span>
|
|
760
|
+
</span>
|
|
761
|
+
</button>
|
|
762
|
+
</li>
|
|
763
|
+
{{/each}}
|
|
764
|
+
</ol>
|
|
765
|
+
</div>
|
|
766
|
+
{{/if}}
|
|
767
|
+
</div>
|
|
768
|
+
|
|
769
|
+
<style scoped>
|
|
770
|
+
@layer PretComponent {
|
|
771
|
+
/* ── The token bridge ────────────────────────────────────────────
|
|
772
|
+
Media Chrome is themed ONLY through --media-* custom properties,
|
|
773
|
+
which is the one channel that crosses a shadow boundary. Every
|
|
774
|
+
value below is a Pretui token with a light-value fallback, so the
|
|
775
|
+
player re-tints with a theme it has never seen and there is not
|
|
776
|
+
one dark branch in this file. */
|
|
777
|
+
.pretui-media {
|
|
778
|
+
--pretui-media-aspect: 16 / 9;
|
|
779
|
+
--pretui-media-ink: var(--card);
|
|
780
|
+
--pretui-media-scrim: color-mix(
|
|
781
|
+
in oklch,
|
|
782
|
+
var(--foreground) 62%,
|
|
783
|
+
transparent
|
|
784
|
+
);
|
|
785
|
+
--pretui-media-radius: var(--radius);
|
|
786
|
+
|
|
787
|
+
--media-font-family: var(--font-sans);
|
|
788
|
+
--media-font-size: var(--text-ui-sm, 11.5px);
|
|
789
|
+
--media-font-weight: 500;
|
|
790
|
+
--media-primary-color: var(--pretui-media-ink, var(--boxel-light));
|
|
791
|
+
--media-secondary-color: transparent;
|
|
792
|
+
--media-control-background: transparent;
|
|
793
|
+
--media-control-hover-background: color-mix(
|
|
794
|
+
in oklch,
|
|
795
|
+
var(--pretui-media-ink, var(--boxel-light)) 18%,
|
|
796
|
+
transparent
|
|
797
|
+
);
|
|
798
|
+
--media-control-height: 16px;
|
|
799
|
+
--media-control-padding: 8px;
|
|
800
|
+
--media-focus-box-shadow: inset 0 0 0 2px var(--ring);
|
|
801
|
+
--media-range-track-height: 4px;
|
|
802
|
+
--media-range-track-border-radius: 999px;
|
|
803
|
+
--media-range-track-background: color-mix(
|
|
804
|
+
in oklch,
|
|
805
|
+
var(--pretui-media-ink, var(--boxel-light)) 26%,
|
|
806
|
+
transparent
|
|
807
|
+
);
|
|
808
|
+
--media-range-bar-color: var(--primary);
|
|
809
|
+
--media-time-range-buffered-color: color-mix(
|
|
810
|
+
in oklch,
|
|
811
|
+
var(--pretui-media-ink, var(--boxel-light)) 42%,
|
|
812
|
+
transparent
|
|
813
|
+
);
|
|
814
|
+
--media-range-thumb-background: var(--pretui-media-ink, var(--boxel-light));
|
|
815
|
+
--media-range-thumb-width: 12px;
|
|
816
|
+
--media-range-thumb-height: 12px;
|
|
817
|
+
--media-tooltip-background: var(--popover);
|
|
818
|
+
--media-tooltip-border-radius: var(--radius-sm, 6px);
|
|
819
|
+
--media-object-fit: contain;
|
|
820
|
+
|
|
821
|
+
container-type: inline-size;
|
|
822
|
+
display: flex;
|
|
823
|
+
flex-direction: column;
|
|
824
|
+
gap: 8px;
|
|
825
|
+
min-width: 0;
|
|
826
|
+
font-family: var(--font-sans);
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
/* Audio wears the page's ink, because its transport sits on the page
|
|
830
|
+
rather than over a picture. One property flip, no second theme. */
|
|
831
|
+
.pretui-media[data-kind='audio'] {
|
|
832
|
+
--pretui-media-ink: var(--foreground);
|
|
833
|
+
--media-control-hover-background: var(
|
|
834
|
+
--hover,
|
|
835
|
+
color-mix(in oklch, var(--foreground) 8%, transparent)
|
|
836
|
+
);
|
|
837
|
+
}
|
|
838
|
+
|
|
839
|
+
.pretui-media-stage {
|
|
840
|
+
--media-background-color: color-mix(
|
|
841
|
+
in oklch,
|
|
842
|
+
var(--foreground) 92%,
|
|
843
|
+
var(--card)
|
|
844
|
+
);
|
|
845
|
+
aspect-ratio: var(--pretui-media-aspect);
|
|
846
|
+
width: 100%;
|
|
847
|
+
overflow: hidden;
|
|
848
|
+
border-radius: var(--pretui-media-radius);
|
|
849
|
+
box-shadow: var(--pretui-shadow-card, 0 0 0 1px var(--border));
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
.pretui-media[data-kind='audio'] .pretui-media-stage {
|
|
853
|
+
--media-background-color: transparent;
|
|
854
|
+
aspect-ratio: auto;
|
|
855
|
+
background: var(--card);
|
|
856
|
+
padding: 4px 4px 2px;
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
/* Law 8 — the picture is judged in a still frame, so the transport
|
|
860
|
+
gets a legible ground rather than relying on the video being dark
|
|
861
|
+
under it. A gradient, not a bar: the picture keeps its edge. */
|
|
862
|
+
.pretui-media[data-kind='video'] .pretui-media-bar,
|
|
863
|
+
.pretui-media[data-kind='video'] .pretui-media-scrub {
|
|
864
|
+
background: linear-gradient(
|
|
865
|
+
to top,
|
|
866
|
+
var(--pretui-media-scrim),
|
|
867
|
+
transparent
|
|
868
|
+
);
|
|
869
|
+
}
|
|
870
|
+
.pretui-media[data-kind='video'] .pretui-media-scrub {
|
|
871
|
+
background: none;
|
|
872
|
+
padding-bottom: 0;
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
.pretui-media-bar {
|
|
876
|
+
--media-control-bar-display: flex;
|
|
877
|
+
align-items: center;
|
|
878
|
+
gap: 2px;
|
|
879
|
+
padding: 4px 6px 6px;
|
|
880
|
+
}
|
|
881
|
+
.pretui-media-scrub {
|
|
882
|
+
padding: 0 6px;
|
|
883
|
+
}
|
|
884
|
+
.pretui-media-scrub media-time-range {
|
|
885
|
+
width: 100%;
|
|
886
|
+
}
|
|
887
|
+
.pretui-media-gap {
|
|
888
|
+
flex: 1 1 auto;
|
|
889
|
+
}
|
|
890
|
+
/* display: contents so an unfilled slot adds no box to the flex row */
|
|
891
|
+
.pretui-media-slot {
|
|
892
|
+
display: contents;
|
|
893
|
+
}
|
|
894
|
+
.pretui-media-volume {
|
|
895
|
+
width: 68px;
|
|
896
|
+
}
|
|
897
|
+
|
|
898
|
+
/* A control that is focusable and invisible is worse
|
|
899
|
+
than no control. When a caller opts into auto-hide, focus brings the
|
|
900
|
+
bar straight back. Rules in the outer tree beat the shadow root's
|
|
901
|
+
::slotted() rules on a slotted child, so this needs no !important
|
|
902
|
+
and no :deep(). */
|
|
903
|
+
.pretui-media-stage:focus-within .pretui-media-bar,
|
|
904
|
+
.pretui-media-stage:focus-within .pretui-media-scrub {
|
|
905
|
+
opacity: 1;
|
|
906
|
+
pointer-events: auto;
|
|
907
|
+
visibility: visible;
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
.pretui-media-overlay {
|
|
911
|
+
display: flex;
|
|
912
|
+
align-self: start;
|
|
913
|
+
justify-self: start;
|
|
914
|
+
gap: 6px;
|
|
915
|
+
margin: 8px;
|
|
916
|
+
pointer-events: none;
|
|
917
|
+
}
|
|
918
|
+
.pretui-media-overlay:empty {
|
|
919
|
+
display: none;
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
/* ── the text channel ─────────────────────────────────────────── */
|
|
923
|
+
.pretui-media-status {
|
|
924
|
+
display: flex;
|
|
925
|
+
align-items: baseline;
|
|
926
|
+
gap: 8px;
|
|
927
|
+
margin: 0;
|
|
928
|
+
min-height: 1.4em;
|
|
929
|
+
font-size: var(--text-ui-sm, 11.5px);
|
|
930
|
+
color: var(--muted-foreground);
|
|
931
|
+
}
|
|
932
|
+
.pretui-media-statusGlyph {
|
|
933
|
+
font-size: 9px;
|
|
934
|
+
line-height: 1;
|
|
935
|
+
color: var(--muted-foreground);
|
|
936
|
+
}
|
|
937
|
+
.pretui-media-statusText {
|
|
938
|
+
min-width: 0;
|
|
939
|
+
}
|
|
940
|
+
.pretui-media[data-phase='error'] .pretui-media-statusText,
|
|
941
|
+
.pretui-media[data-phase='error'] .pretui-media-statusGlyph {
|
|
942
|
+
color: var(--pretui-destructive-ink, var(--boxel-danger));
|
|
943
|
+
font-weight: 600;
|
|
944
|
+
}
|
|
945
|
+
.pretui-media-statusDur {
|
|
946
|
+
margin-inline-start: auto;
|
|
947
|
+
font-variant-numeric: tabular-nums;
|
|
948
|
+
letter-spacing: 0.01em;
|
|
949
|
+
}
|
|
950
|
+
.pretui-media-live {
|
|
951
|
+
position: absolute;
|
|
952
|
+
width: 1px;
|
|
953
|
+
height: 1px;
|
|
954
|
+
margin: -1px;
|
|
955
|
+
padding: 0;
|
|
956
|
+
overflow: hidden;
|
|
957
|
+
clip-path: inset(50%);
|
|
958
|
+
white-space: nowrap;
|
|
959
|
+
}
|
|
960
|
+
.pretui-media-footer:empty {
|
|
961
|
+
display: none;
|
|
962
|
+
}
|
|
963
|
+
|
|
964
|
+
/* ── transcript ───────────────────────────────────────────────── */
|
|
965
|
+
.pretui-media-transcript {
|
|
966
|
+
border-radius: var(--radius);
|
|
967
|
+
box-shadow: var(--pretui-shadow-hairline, 0 0 0 1px var(--border));
|
|
968
|
+
background: var(--card);
|
|
969
|
+
}
|
|
970
|
+
.pretui-media-transcriptHead {
|
|
971
|
+
display: flex;
|
|
972
|
+
align-items: baseline;
|
|
973
|
+
gap: 10px;
|
|
974
|
+
width: 100%;
|
|
975
|
+
padding: 8px 12px;
|
|
976
|
+
margin: 0;
|
|
977
|
+
border: 0;
|
|
978
|
+
background: transparent;
|
|
979
|
+
cursor: pointer;
|
|
980
|
+
font-family: inherit;
|
|
981
|
+
font-size: var(--text-ui-sm, 11.5px);
|
|
982
|
+
font-weight: 600;
|
|
983
|
+
letter-spacing: 0.06em;
|
|
984
|
+
text-align: start;
|
|
985
|
+
text-transform: uppercase;
|
|
986
|
+
color: var(--foreground);
|
|
987
|
+
border-radius: var(--radius);
|
|
988
|
+
}
|
|
989
|
+
.pretui-media-transcriptHead:hover {
|
|
990
|
+
background: var(
|
|
991
|
+
--hover,
|
|
992
|
+
color-mix(in oklch, var(--foreground) 5%, transparent)
|
|
993
|
+
);
|
|
994
|
+
}
|
|
995
|
+
.pretui-media-transcriptHead:focus-visible {
|
|
996
|
+
outline: 2px solid var(--ring);
|
|
997
|
+
outline-offset: -2px;
|
|
998
|
+
}
|
|
999
|
+
/* The caret turns because the disclosure changed state — Law 5's
|
|
1000
|
+
"encodes a state transition", and the end state under reduced
|
|
1001
|
+
motion is simply the turned caret. */
|
|
1002
|
+
.pretui-media-transcriptCaret {
|
|
1003
|
+
display: inline-block;
|
|
1004
|
+
font-size: 9px;
|
|
1005
|
+
color: var(--muted-foreground);
|
|
1006
|
+
transition: rotate 140ms ease;
|
|
1007
|
+
}
|
|
1008
|
+
.pretui-media-transcript[data-open='true'] .pretui-media-transcriptCaret {
|
|
1009
|
+
rotate: 90deg;
|
|
1010
|
+
}
|
|
1011
|
+
.pretui-media-transcriptCount {
|
|
1012
|
+
font-weight: 400;
|
|
1013
|
+
letter-spacing: 0;
|
|
1014
|
+
text-transform: none;
|
|
1015
|
+
color: var(--muted-foreground);
|
|
1016
|
+
font-variant-numeric: tabular-nums;
|
|
1017
|
+
}
|
|
1018
|
+
.pretui-media-cues {
|
|
1019
|
+
list-style: none;
|
|
1020
|
+
margin: 0;
|
|
1021
|
+
padding: 0 6px 6px;
|
|
1022
|
+
max-height: 15rem;
|
|
1023
|
+
overflow-y: auto;
|
|
1024
|
+
}
|
|
1025
|
+
.pretui-media-cueBtn {
|
|
1026
|
+
display: flex;
|
|
1027
|
+
gap: 10px;
|
|
1028
|
+
width: 100%;
|
|
1029
|
+
padding: 5px 8px;
|
|
1030
|
+
border: 0;
|
|
1031
|
+
border-radius: var(--radius-sm, 6px);
|
|
1032
|
+
background: transparent;
|
|
1033
|
+
color: var(--foreground);
|
|
1034
|
+
font: inherit;
|
|
1035
|
+
font-size: var(--text-body, 14px);
|
|
1036
|
+
line-height: 1.5;
|
|
1037
|
+
text-align: start;
|
|
1038
|
+
cursor: pointer;
|
|
1039
|
+
}
|
|
1040
|
+
.pretui-media-cueBtn:hover {
|
|
1041
|
+
background: var(
|
|
1042
|
+
--hover,
|
|
1043
|
+
color-mix(in oklch, var(--foreground) 6%, transparent)
|
|
1044
|
+
);
|
|
1045
|
+
}
|
|
1046
|
+
.pretui-media-cueBtn:focus-visible {
|
|
1047
|
+
outline: 2px solid var(--ring);
|
|
1048
|
+
outline-offset: -2px;
|
|
1049
|
+
}
|
|
1050
|
+
/* The active cue is marked three ways — weight, a rule down the
|
|
1051
|
+
inline start, and aria-current — because state is never colour
|
|
1052
|
+
alone and this one has to survive greyscale. */
|
|
1053
|
+
.pretui-media-cueBtn[data-active='true'] {
|
|
1054
|
+
background: color-mix(
|
|
1055
|
+
in oklch,
|
|
1056
|
+
var(--primary) 10%,
|
|
1057
|
+
var(--card)
|
|
1058
|
+
);
|
|
1059
|
+
box-shadow: inset 2px 0 0 0 var(--primary);
|
|
1060
|
+
font-weight: 600;
|
|
1061
|
+
}
|
|
1062
|
+
.pretui-media-cueClock {
|
|
1063
|
+
flex: 0 0 auto;
|
|
1064
|
+
min-width: 4ch;
|
|
1065
|
+
font-family: var(--font-mono);
|
|
1066
|
+
font-size: var(--text-ui-sm, 11.5px);
|
|
1067
|
+
font-variant-numeric: tabular-nums;
|
|
1068
|
+
color: var(--muted-foreground);
|
|
1069
|
+
padding-top: 0.15em;
|
|
1070
|
+
}
|
|
1071
|
+
.pretui-media-cueBody {
|
|
1072
|
+
min-width: 0;
|
|
1073
|
+
}
|
|
1074
|
+
.pretui-media-cueSpeaker {
|
|
1075
|
+
display: block;
|
|
1076
|
+
font-size: var(--text-ui-sm, 11.5px);
|
|
1077
|
+
font-weight: 600;
|
|
1078
|
+
letter-spacing: 0.04em;
|
|
1079
|
+
text-transform: uppercase;
|
|
1080
|
+
color: var(--muted-foreground);
|
|
1081
|
+
}
|
|
1082
|
+
.pretui-media-cueText {
|
|
1083
|
+
display: block;
|
|
1084
|
+
}
|
|
1085
|
+
|
|
1086
|
+
/* ── touch ────────────────────────────────────────────────────── */
|
|
1087
|
+
@media (any-pointer: coarse) {
|
|
1088
|
+
.pretui-media {
|
|
1089
|
+
--media-control-height: 22px;
|
|
1090
|
+
--media-control-padding: 11px;
|
|
1091
|
+
--media-range-thumb-width: 16px;
|
|
1092
|
+
--media-range-thumb-height: 16px;
|
|
1093
|
+
}
|
|
1094
|
+
.pretui-media-cueBtn {
|
|
1095
|
+
padding: 11px 8px;
|
|
1096
|
+
}
|
|
1097
|
+
}
|
|
1098
|
+
|
|
1099
|
+
/* ── narrow panes ─────────────────────────────────────────────
|
|
1100
|
+
Unnamed container query only: a named one silently deletes every
|
|
1101
|
+
rule after it. Rules match descendants of the container, never the
|
|
1102
|
+
container element itself. */
|
|
1103
|
+
@container (max-width: 420px) {
|
|
1104
|
+
.pretui-media-volume {
|
|
1105
|
+
display: none;
|
|
1106
|
+
}
|
|
1107
|
+
.pretui-media-statusDur {
|
|
1108
|
+
display: none;
|
|
1109
|
+
}
|
|
1110
|
+
}
|
|
1111
|
+
|
|
1112
|
+
/* ── Law 5 ────────────────────────────────────────────────────
|
|
1113
|
+
Reduced motion lands on the END state: the transport stops
|
|
1114
|
+
transitioning, and the spinner — which cannot be slowed from out
|
|
1115
|
+
here, it lives in a shadow root — is replaced by the text channel
|
|
1116
|
+
that is already on screen. */
|
|
1117
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1118
|
+
.pretui-media {
|
|
1119
|
+
--media-control-transition-in: none;
|
|
1120
|
+
--media-control-transition-out: none;
|
|
1121
|
+
--media-range-thumb-transition: none;
|
|
1122
|
+
--media-range-track-transition: none;
|
|
1123
|
+
--media-loading-indicator-display: none;
|
|
1124
|
+
}
|
|
1125
|
+
.pretui-media-cueBtn,
|
|
1126
|
+
.pretui-media-transcriptCaret {
|
|
1127
|
+
transition: none;
|
|
1128
|
+
}
|
|
1129
|
+
}
|
|
1130
|
+
}
|
|
1131
|
+
</style>
|
|
1132
|
+
</template>
|
|
1133
|
+
}
|