@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,1165 @@
|
|
|
1
|
+
// Pretui — Sidebar: a collapsible app rail with a keyboard-reachable handle, a mobile drawer mode and opt-in persisted collapse state.
|
|
2
|
+
//
|
|
3
|
+
// Sidebar shadcn's most-copied layout block
|
|
4
|
+
// SidebarTrigger the toolbar button that toggles it, wired for readers
|
|
5
|
+
// SidebarGroup a labelled section of the rail
|
|
6
|
+
// SidebarItem a nav row that survives the collapse to icon width
|
|
7
|
+
//
|
|
8
|
+
// ── Realm laws in force ─────────────────────────────────────────────────
|
|
9
|
+
// No timers, no `Date.now()`, no `Math.random()`. Every listener and observer
|
|
10
|
+
// is owned by an `ember-modifier` that disconnects it. No `!important`, no
|
|
11
|
+
// `:deep()`, no `:global()`, no dark branches, unnamed container queries only.
|
|
12
|
+
import Component from '@glimmer/component';
|
|
13
|
+
import { tracked } from '@glimmer/tracking';
|
|
14
|
+
import { hash } from '@ember/helper';
|
|
15
|
+
import { on } from '@ember/modifier';
|
|
16
|
+
import { guidFor } from '@ember/object/internals';
|
|
17
|
+
import { modifier } from 'ember-modifier';
|
|
18
|
+
|
|
19
|
+
import { cssDeclaration, cssStyleFrom } from '../pretui-css';
|
|
20
|
+
import { listenDocumentCapture } from '../focus';
|
|
21
|
+
import { Drawer } from './drawer';
|
|
22
|
+
import { Tooltip } from './tooltip';
|
|
23
|
+
import { pretuiSize } from '../internal/structure-layout';
|
|
24
|
+
import type { SizeAlias } from '../internal/structure-layout';
|
|
25
|
+
|
|
26
|
+
// ── Placement ────────────────────────────────────────────────────────────
|
|
27
|
+
|
|
28
|
+
/** Logical placement. `left`/`right` are accepted and mapped, because every
|
|
29
|
+
* React kit spells this physically and an agent will type one of them. */
|
|
30
|
+
export type ShellPlacement = 'start' | 'end';
|
|
31
|
+
export type ShellPlacementAlias = ShellPlacement | 'left' | 'right';
|
|
32
|
+
|
|
33
|
+
const PLACEMENTS: Record<string, ShellPlacement> = {
|
|
34
|
+
start: 'start',
|
|
35
|
+
left: 'start',
|
|
36
|
+
end: 'end',
|
|
37
|
+
right: 'end',
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
function shellPlacement(
|
|
41
|
+
raw: string | undefined,
|
|
42
|
+
fallback: ShellPlacement = 'start',
|
|
43
|
+
): ShellPlacement {
|
|
44
|
+
let hit = raw === undefined ? undefined : PLACEMENTS[raw];
|
|
45
|
+
return hit ?? fallback;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
// ── Sidebar ──────────────────────────────────────────────────────────────
|
|
50
|
+
//
|
|
51
|
+
// Source read: shadcn-ui `ui/sidebar.tsx` (726 lines, 23 exports) and
|
|
52
|
+
// `hooks/use-mobile.ts`. Ant `layout/Sider.tsx` for the collapse trigger.
|
|
53
|
+
//
|
|
54
|
+
// What upstream gets wrong, and what is fixed here. These are not style
|
|
55
|
+
// quibbles — three of them make the component unusable without a mouse.
|
|
56
|
+
//
|
|
57
|
+
// 1. **The rail is deliberately unreachable by keyboard.** shadcn's
|
|
58
|
+
// `SidebarRail` is a real `<button>` carrying `tabIndex={-1}`. Ant's two
|
|
59
|
+
// triggers are worse: a `<div onClick>` and a `<span onClick>` with no
|
|
60
|
+
// role, no tabindex, no key handler and no name, so **an Ant sider cannot
|
|
61
|
+
// be collapsed by keyboard at all**. Here the handle is a `<button>` in
|
|
62
|
+
// the tab order with a real accessible name that states the action.
|
|
63
|
+
// 2. **Nothing is announced.** Neither `SidebarTrigger` nor `SidebarRail`
|
|
64
|
+
// sets `aria-expanded`, nothing sets `aria-controls`, and the desktop
|
|
65
|
+
// sidebar has no `role`, no `<nav>`, no landmark and no accessible name.
|
|
66
|
+
// Here the rail is a named `<nav>` landmark and every control that
|
|
67
|
+
// toggles it carries `aria-expanded` + `aria-controls` pointing at it.
|
|
68
|
+
// 3. **The cookie is written from inside the setter, unconditionally.**
|
|
69
|
+
// shadcn writes `document.cookie` on every toggle even when the consumer
|
|
70
|
+
// controls `open`, with a hardcoded name, path and max-age, no
|
|
71
|
+
// `SameSite`, no opt-out, and nothing ever reads it back. Persistence
|
|
72
|
+
// here is **opt-in and named**: with no `@persistKey` this component
|
|
73
|
+
// touches no storage at all, and with one it uses `localStorage` — the
|
|
74
|
+
// honest primitive for a UI preference, since a cookie only makes sense
|
|
75
|
+
// when a server reads it and there is no server here.
|
|
76
|
+
// 4. **Every dimension is a module constant.** `SIDEBAR_WIDTH`,
|
|
77
|
+
// `SIDEBAR_WIDTH_ICON`, `SIDEBAR_COOKIE_MAX_AGE`,
|
|
78
|
+
// `SIDEBAR_KEYBOARD_SHORTCUT` and `MOBILE_BREAKPOINT` are all
|
|
79
|
+
// module-private with no prop. Here they are args and token knobs.
|
|
80
|
+
// 5. **A global `window` keydown listener with no escape hatch**, which
|
|
81
|
+
// fires while you are typing in any field that does not stop
|
|
82
|
+
// propagation, and stacks one listener per provider. Here the shortcut
|
|
83
|
+
// is `@shortcut`/`@shortcutKey`, owned by a modifier that removes it,
|
|
84
|
+
// and it **ignores the key while focus is in a text field** — which is
|
|
85
|
+
// the bug shadcn ships.
|
|
86
|
+
// 6. **Mobile is a viewport media query** (`MOBILE_BREAKPOINT = 768`)
|
|
87
|
+
// duplicated between JS and the Tailwind `md:` breakpoint, hydration-
|
|
88
|
+
// unsafe (first paint is always desktop). A card does not know the
|
|
89
|
+
// viewport — it knows its pane. This measures the shell's own inline
|
|
90
|
+
// size with a `ResizeObserver`, so a sidebar in a 400px pane folds
|
|
91
|
+
// whatever the window is doing, and `@mobile` overrides it outright.
|
|
92
|
+
// 7. **Physical `left`/`right` throughout** — `side`, `left-0`, `border-r`,
|
|
93
|
+
// `-translate-x-1/2`, and a `rotate-180` on an empty spacer div to flip
|
|
94
|
+
// the transition direction. Everything here is logical, so RTL is a
|
|
95
|
+
// `dir` attribute rather than a re-authoring.
|
|
96
|
+
// 8. **No reduced-motion guard** on the 200ms width slide. There is one
|
|
97
|
+
// here, and it lands on the end state.
|
|
98
|
+
// 9. **A collapsed rail stays focusable.** Mantine's AppShell navbar is
|
|
99
|
+
// only `translateX`-ed off screen — still in the DOM, still tabbable,
|
|
100
|
+
// still read aloud. Offcanvas collapse here is `visibility: hidden`,
|
|
101
|
+
// which removes it from both the tab order and the accessibility tree.
|
|
102
|
+
// 10. **`Math.random()` in `SidebarMenuSkeleton`**, memoized per mount, so
|
|
103
|
+
// server and client markup disagree. Forbidden by realm law here, and
|
|
104
|
+
// not needed — `Skeleton` in `structure.gts` is deterministic.
|
|
105
|
+
//
|
|
106
|
+
// The mobile mode reuses `Drawer` (overlay.gts) rather than re-solving it:
|
|
107
|
+
// `Drawer` rides the native `<dialog>` top layer, so the focus trap, Escape,
|
|
108
|
+
// `::backdrop` and stacking are the platform's. shadcn instead renders its
|
|
109
|
+
// `Sheet` and then hides the Sheet's own close button with
|
|
110
|
+
// `[&>button]:hidden`, which is the tell that the composition was wrong.
|
|
111
|
+
|
|
112
|
+
export type SidebarCollapsible = 'rail' | 'offcanvas' | 'none';
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Reads a persisted collapse preference exactly once, on insert.
|
|
116
|
+
*
|
|
117
|
+
* A modifier rather than a constructor read for two reasons: `localStorage`
|
|
118
|
+
* must never be touched during module evaluation or prerender (the indexer
|
|
119
|
+
* runs both), and a modifier body only ever runs against a real DOM. Every
|
|
120
|
+
* access is inside a `try` because storage throws outright in a partitioned
|
|
121
|
+
* or storage-disabled context, and a failed preference must never take a
|
|
122
|
+
* layout down.
|
|
123
|
+
*/
|
|
124
|
+
const restoresOpen = modifier(
|
|
125
|
+
(
|
|
126
|
+
_el: HTMLElement,
|
|
127
|
+
[key, apply]: [string | undefined, (open: boolean) => void],
|
|
128
|
+
) => {
|
|
129
|
+
if (!key || typeof localStorage === 'undefined') {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
try {
|
|
133
|
+
let stored = localStorage.getItem('pretui-sidebar:' + key);
|
|
134
|
+
if (stored === 'open' || stored === 'closed') {
|
|
135
|
+
apply(stored === 'open');
|
|
136
|
+
}
|
|
137
|
+
} catch {
|
|
138
|
+
// Storage unavailable. The `@defaultOpen` value stands.
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
);
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Publishes the shell's own inline size as a coarse `wide | narrow` fact.
|
|
145
|
+
*
|
|
146
|
+
* `ResizeObserver`, never a viewport media query: a card does not know the
|
|
147
|
+
* window, it knows its pane. The callback fires after layout, outside render,
|
|
148
|
+
* so writing tracked state here cannot backtrack.
|
|
149
|
+
*/
|
|
150
|
+
const measuresPane = modifier(
|
|
151
|
+
(
|
|
152
|
+
element: HTMLElement,
|
|
153
|
+
[breakpoint, apply]: [number, (narrow: boolean) => void],
|
|
154
|
+
) => {
|
|
155
|
+
let observer = new ResizeObserver((entries) => {
|
|
156
|
+
let entry = entries[0];
|
|
157
|
+
if (!entry) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
// A width of 0 is not "narrow", it is "not laid out" — a shell inside a
|
|
161
|
+
// `display: none` tab panel, a collapsed accordion, or a card that has
|
|
162
|
+
// not been measured yet. Treating it as narrow would silently promote
|
|
163
|
+
// the rail to a modal drawer the moment the pane was hidden, and the
|
|
164
|
+
// reader would find it in the top layer when the tab came back.
|
|
165
|
+
let width = entry.contentRect.width;
|
|
166
|
+
apply(width > 0 && width < breakpoint);
|
|
167
|
+
});
|
|
168
|
+
// The observer reports once as soon as observation starts, and does so
|
|
169
|
+
// asynchronously — a synchronous first report here would write tracked
|
|
170
|
+
// state during the render that installed this modifier.
|
|
171
|
+
observer.observe(element);
|
|
172
|
+
return () => observer.disconnect();
|
|
173
|
+
},
|
|
174
|
+
);
|
|
175
|
+
|
|
176
|
+
/** Text-entry contexts where a bare letter shortcut must not fire. shadcn
|
|
177
|
+
* binds the shortcut on `window` with no such check, so Cmd+B inside a rich
|
|
178
|
+
* text editor toggles the sidebar instead of bolding. */
|
|
179
|
+
const TEXT_ENTRY = 'input, textarea, select, [contenteditable]';
|
|
180
|
+
|
|
181
|
+
export interface SidebarSignature {
|
|
182
|
+
Args: {
|
|
183
|
+
/** Controlled expanded state. Leave undefined for the uncontrolled half. */
|
|
184
|
+
open?: boolean;
|
|
185
|
+
/** Uncontrolled initial state. Default `true`. */
|
|
186
|
+
defaultOpen?: boolean;
|
|
187
|
+
/** Fires on every toggle, controlled or not. */
|
|
188
|
+
onOpenChange?: (open: boolean) => void;
|
|
189
|
+
/**
|
|
190
|
+
* Persist the collapse preference under this key. **Opt-in**: with no key
|
|
191
|
+
* this component reads and writes no storage whatsoever. The key is
|
|
192
|
+
* namespaced to `pretui-sidebar:<key>` in `localStorage`.
|
|
193
|
+
*/
|
|
194
|
+
persistKey?: string;
|
|
195
|
+
/** Accessible name for the rail landmark. Default `Sidebar`. */
|
|
196
|
+
label?: string;
|
|
197
|
+
/** `start` (default) or `end`; `left`/`right` are accepted aliases. */
|
|
198
|
+
placement?: ShellPlacementAlias;
|
|
199
|
+
/**
|
|
200
|
+
* What collapsing means. `rail` (default) shrinks to icon width and keeps
|
|
201
|
+
* the rail reachable; `offcanvas` removes it from layout, the tab order
|
|
202
|
+
* and the accessibility tree; `none` pins it open and hides the handle.
|
|
203
|
+
*/
|
|
204
|
+
collapsible?: SidebarCollapsible;
|
|
205
|
+
/** Expanded rail width. Any kit-valid CSS length. Default `16rem`. */
|
|
206
|
+
width?: string;
|
|
207
|
+
/** Collapsed rail width in `rail` mode. Default `3.25rem`. */
|
|
208
|
+
railWidth?: string;
|
|
209
|
+
/** Rail width in the mobile drawer. Default `18rem`. */
|
|
210
|
+
mobileWidth?: string;
|
|
211
|
+
/** Bind a Cmd/Ctrl shortcut for the toggle. Default `true`. */
|
|
212
|
+
shortcut?: boolean;
|
|
213
|
+
/** The shortcut's letter. Default `b`. Matched case-insensitively. */
|
|
214
|
+
shortcutKey?: string;
|
|
215
|
+
/** Force the drawer mode on or off, bypassing the pane measurement. */
|
|
216
|
+
mobile?: boolean;
|
|
217
|
+
/** Pane width in px below which the rail becomes a drawer. Default `640`. */
|
|
218
|
+
mobileBreakpoint?: number;
|
|
219
|
+
/** Draw the hairline between rail and content. Default `false`. */
|
|
220
|
+
bordered?: boolean;
|
|
221
|
+
};
|
|
222
|
+
Blocks: {
|
|
223
|
+
/** Rail chrome above the scrolling nav — a brand, a workspace switcher. */
|
|
224
|
+
header: [{ open: boolean; collapsed: boolean; mobile: boolean }];
|
|
225
|
+
/** The rail's scrolling body. */
|
|
226
|
+
nav: [
|
|
227
|
+
{
|
|
228
|
+
open: boolean;
|
|
229
|
+
collapsed: boolean;
|
|
230
|
+
mobile: boolean;
|
|
231
|
+
toggle: () => void;
|
|
232
|
+
},
|
|
233
|
+
];
|
|
234
|
+
/** Rail chrome below the nav — an account row, a version line. */
|
|
235
|
+
footer: [{ open: boolean; collapsed: boolean; mobile: boolean }];
|
|
236
|
+
/** The page beside the rail. Yielded the toggle and the rail's id. */
|
|
237
|
+
default: [
|
|
238
|
+
{
|
|
239
|
+
open: boolean;
|
|
240
|
+
collapsed: boolean;
|
|
241
|
+
mobile: boolean;
|
|
242
|
+
toggle: () => void;
|
|
243
|
+
controls: string;
|
|
244
|
+
},
|
|
245
|
+
];
|
|
246
|
+
};
|
|
247
|
+
Element: HTMLDivElement;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* App chrome: a collapsible rail beside a page.
|
|
252
|
+
*
|
|
253
|
+
* ```hbs
|
|
254
|
+
* <Sidebar @label='Workspace' @persistKey='studio' @collapsible='rail'>
|
|
255
|
+
* <:header as |bar|><Brand @compact={{bar.collapsed}} /></:header>
|
|
256
|
+
* <:nav as |bar|>
|
|
257
|
+
* <SidebarGroup @label='Library'>
|
|
258
|
+
* <SidebarItem @label='Lots' @active={{true}} @collapsed={{bar.collapsed}} />
|
|
259
|
+
* </SidebarGroup>
|
|
260
|
+
* </:nav>
|
|
261
|
+
* <:default as |bar|>
|
|
262
|
+
* <Toolbar>
|
|
263
|
+
* <SidebarTrigger
|
|
264
|
+
* @open={{bar.open}}
|
|
265
|
+
* @onToggle={{bar.toggle}}
|
|
266
|
+
* @controls={{bar.controls}}
|
|
267
|
+
* />
|
|
268
|
+
* </Toolbar>
|
|
269
|
+
* </:default>
|
|
270
|
+
* </Sidebar>
|
|
271
|
+
* ```
|
|
272
|
+
*
|
|
273
|
+
* State is passed DOWN through block params rather than sideways through a
|
|
274
|
+
* context/service. React needs `useSidebar()` because a trigger can be
|
|
275
|
+
* arbitrarily deep; Glimmer's named blocks already put the caller inside the
|
|
276
|
+
* component's scope, so a yielded hash is the whole mechanism — no provider to
|
|
277
|
+
* forget, no `useSidebar must be used within a SidebarProvider` throw, and the
|
|
278
|
+
* dependency is visible in the template.
|
|
279
|
+
*/
|
|
280
|
+
export class Sidebar extends Component<SidebarSignature> {
|
|
281
|
+
@tracked private internal = this.args.defaultOpen ?? true;
|
|
282
|
+
@tracked private narrowPane = false;
|
|
283
|
+
/** The drawer's own uncontrolled state, separate from the rail's expanded
|
|
284
|
+
* state, so a narrow pane starts with the modal closed. */
|
|
285
|
+
@tracked private drawerOpen = false;
|
|
286
|
+
railId = `${guidFor(this)}-rail`;
|
|
287
|
+
|
|
288
|
+
get open(): boolean {
|
|
289
|
+
if (this.args.open !== undefined) {
|
|
290
|
+
return this.args.open;
|
|
291
|
+
}
|
|
292
|
+
if (this.mobile) {
|
|
293
|
+
return this.drawerOpen;
|
|
294
|
+
}
|
|
295
|
+
// a pinned rail is open, whatever a shortcut or trigger asked for
|
|
296
|
+
return this.collapsible === 'none' ? true : this.internal;
|
|
297
|
+
}
|
|
298
|
+
get collapsible(): SidebarCollapsible {
|
|
299
|
+
return this.args.collapsible ?? 'rail';
|
|
300
|
+
}
|
|
301
|
+
get placement(): ShellPlacement {
|
|
302
|
+
return shellPlacement(this.args.placement);
|
|
303
|
+
}
|
|
304
|
+
get label(): string {
|
|
305
|
+
return this.args.label ?? 'Sidebar';
|
|
306
|
+
}
|
|
307
|
+
get mobile(): boolean {
|
|
308
|
+
return this.args.mobile ?? this.narrowPane;
|
|
309
|
+
}
|
|
310
|
+
/** Collapsed means "not showing its full width", which the drawer never is
|
|
311
|
+
* — inside the drawer the rail is always at full width. */
|
|
312
|
+
get collapsed(): boolean {
|
|
313
|
+
return !this.mobile && !this.open && this.collapsible !== 'none';
|
|
314
|
+
}
|
|
315
|
+
get state(): string {
|
|
316
|
+
return this.open ? 'expanded' : 'collapsed';
|
|
317
|
+
}
|
|
318
|
+
get showHandle(): boolean {
|
|
319
|
+
return !this.mobile && this.collapsible !== 'none';
|
|
320
|
+
}
|
|
321
|
+
get handleLabel(): string {
|
|
322
|
+
return this.open ? 'Collapse ' + this.label : 'Expand ' + this.label;
|
|
323
|
+
}
|
|
324
|
+
get mobileBreakpoint(): number {
|
|
325
|
+
return this.args.mobileBreakpoint ?? 640;
|
|
326
|
+
}
|
|
327
|
+
get shortcutKey(): string {
|
|
328
|
+
return (this.args.shortcutKey ?? 'b').toLowerCase();
|
|
329
|
+
}
|
|
330
|
+
get shortcutEnabled(): boolean {
|
|
331
|
+
return (this.args.shortcut ?? true) && !this.args.mobile;
|
|
332
|
+
}
|
|
333
|
+
get style() {
|
|
334
|
+
return cssStyleFrom([
|
|
335
|
+
cssDeclaration('--pretui-sidebar-width', this.args.width),
|
|
336
|
+
cssDeclaration('--pretui-sidebar-rail-width', this.args.railWidth),
|
|
337
|
+
cssDeclaration('--pretui-drawer-size', this.args.mobileWidth),
|
|
338
|
+
]);
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
private setOpen = (next: boolean) => {
|
|
342
|
+
// Internal state moves only while UNcontrolled; the callback always fires.
|
|
343
|
+
if (this.args.open === undefined && this.mobile) {
|
|
344
|
+
this.drawerOpen = next;
|
|
345
|
+
this.args.onOpenChange?.(next);
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
if (this.args.open === undefined) {
|
|
349
|
+
this.internal = next;
|
|
350
|
+
}
|
|
351
|
+
this.args.onOpenChange?.(next);
|
|
352
|
+
this.persist(next);
|
|
353
|
+
};
|
|
354
|
+
|
|
355
|
+
/**
|
|
356
|
+
* Opt-in, and never on the path of a component that was given no key.
|
|
357
|
+
* Wrapped because storage throws in partitioned contexts — a preference
|
|
358
|
+
* that cannot be saved is not a reason for a layout to fail.
|
|
359
|
+
*/
|
|
360
|
+
private persist(next: boolean) {
|
|
361
|
+
let key = this.args.persistKey;
|
|
362
|
+
if (!key || typeof localStorage === 'undefined') {
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
365
|
+
try {
|
|
366
|
+
localStorage.setItem('pretui-sidebar:' + key, next ? 'open' : 'closed');
|
|
367
|
+
} catch {
|
|
368
|
+
// Preference not persisted. Nothing else changes.
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
toggle = () => {
|
|
373
|
+
this.setOpen(!this.open);
|
|
374
|
+
};
|
|
375
|
+
closeDrawer = () => {
|
|
376
|
+
this.setOpen(false);
|
|
377
|
+
};
|
|
378
|
+
/** Restore runs only while UNcontrolled — a controlled parent owns the
|
|
379
|
+
* value and a stored preference must not fight it. */
|
|
380
|
+
restore = (stored: boolean) => {
|
|
381
|
+
if (this.args.open === undefined) {
|
|
382
|
+
this.internal = stored;
|
|
383
|
+
}
|
|
384
|
+
};
|
|
385
|
+
setNarrow = (narrow: boolean) => {
|
|
386
|
+
if (narrow !== this.narrowPane) {
|
|
387
|
+
this.drawerOpen = false;
|
|
388
|
+
}
|
|
389
|
+
this.narrowPane = narrow;
|
|
390
|
+
};
|
|
391
|
+
|
|
392
|
+
/** The shell element, so the shortcut can tell which sidebar owns focus. */
|
|
393
|
+
private rootEl: HTMLElement | null = null;
|
|
394
|
+
captureRoot = modifier((el: HTMLElement) => {
|
|
395
|
+
this.rootEl = el;
|
|
396
|
+
return () => {
|
|
397
|
+
this.rootEl = null;
|
|
398
|
+
};
|
|
399
|
+
});
|
|
400
|
+
|
|
401
|
+
onShortcut = (event: Event) => {
|
|
402
|
+
if (!this.shortcutEnabled || (this.collapsible === 'none' && !this.mobile)) {
|
|
403
|
+
return;
|
|
404
|
+
}
|
|
405
|
+
let key = event as KeyboardEvent;
|
|
406
|
+
if (!key.metaKey && !key.ctrlKey) {
|
|
407
|
+
return;
|
|
408
|
+
}
|
|
409
|
+
// A real browser reports `b` with Caps off and `B` with Shift or Caps on,
|
|
410
|
+
// and `triggerKeyEvent` only accepts the uppercase form — so both cases
|
|
411
|
+
// are matched rather than one.
|
|
412
|
+
if (key.key.toLowerCase() !== this.shortcutKey) {
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
415
|
+
let target = key.target as HTMLElement | null;
|
|
416
|
+
if (target && target.closest && target.closest(TEXT_ENTRY)) {
|
|
417
|
+
return;
|
|
418
|
+
}
|
|
419
|
+
// Every sidebar with @shortcut listens, but one press toggles one rail:
|
|
420
|
+
// the innermost sidebar that holds focus, or, with focus in none, the
|
|
421
|
+
// first to see the key (the rest see it already taken).
|
|
422
|
+
let owner = (document.activeElement as HTMLElement | null)?.closest?.('.pretui-sidebar-shell') ?? null;
|
|
423
|
+
if (owner ? owner !== this.rootEl : key.defaultPrevented) {
|
|
424
|
+
return;
|
|
425
|
+
}
|
|
426
|
+
key.preventDefault();
|
|
427
|
+
this.toggle();
|
|
428
|
+
};
|
|
429
|
+
|
|
430
|
+
<template>
|
|
431
|
+
<div
|
|
432
|
+
class='pretui-sidebar-shell'
|
|
433
|
+
style={{this.style}}
|
|
434
|
+
data-placement={{this.placement}}
|
|
435
|
+
data-state={{this.state}}
|
|
436
|
+
data-collapsible={{this.collapsible}}
|
|
437
|
+
data-mobile={{if this.mobile 'true' 'false'}}
|
|
438
|
+
data-bordered={{if @bordered 'true' 'false'}}
|
|
439
|
+
data-test-pretui-sidebar
|
|
440
|
+
{{restoresOpen @persistKey this.restore}}
|
|
441
|
+
{{measuresPane this.mobileBreakpoint this.setNarrow}}
|
|
442
|
+
{{!-- A document listener, not an `on 'keydown'` modifier on this div —
|
|
443
|
+
realm lint's no-invalid-interactive rejects a template listener on
|
|
444
|
+
a non-widget element, and the shortcut has to work while focus is
|
|
445
|
+
anywhere on the page anyway. Capture phase and non-passive so it
|
|
446
|
+
may preventDefault; owned by this element, so it is removed with
|
|
447
|
+
the component. Each mounted sidebar has its own listener, and
|
|
448
|
+
onShortcut routes one press to one of them. --}}
|
|
449
|
+
{{listenDocumentCapture 'keydown' this.onShortcut}}
|
|
450
|
+
{{this.captureRoot}}
|
|
451
|
+
...attributes
|
|
452
|
+
>
|
|
453
|
+
{{#if this.mobile}}
|
|
454
|
+
<Drawer
|
|
455
|
+
@open={{this.open}}
|
|
456
|
+
@onClose={{this.closeDrawer}}
|
|
457
|
+
@label={{this.label}}
|
|
458
|
+
@placement={{this.placement}}
|
|
459
|
+
>
|
|
460
|
+
<:default>
|
|
461
|
+
<nav
|
|
462
|
+
id={{this.railId}}
|
|
463
|
+
class='pretui-sidebar-rail'
|
|
464
|
+
aria-label={{this.label}}
|
|
465
|
+
data-mobile='true'
|
|
466
|
+
data-test-pretui-sidebar-rail
|
|
467
|
+
>
|
|
468
|
+
{{#if (has-block 'header')}}
|
|
469
|
+
<div class='pretui-sidebar-head'>{{yield
|
|
470
|
+
(hash open=this.open collapsed=false mobile=true)
|
|
471
|
+
to='header'
|
|
472
|
+
}}</div>
|
|
473
|
+
{{/if}}
|
|
474
|
+
<div class='pretui-sidebar-body'>
|
|
475
|
+
{{yield
|
|
476
|
+
(hash
|
|
477
|
+
open=this.open
|
|
478
|
+
collapsed=false
|
|
479
|
+
mobile=true
|
|
480
|
+
toggle=this.toggle
|
|
481
|
+
)
|
|
482
|
+
to='nav'
|
|
483
|
+
}}
|
|
484
|
+
</div>
|
|
485
|
+
{{#if (has-block 'footer')}}
|
|
486
|
+
<div class='pretui-sidebar-foot'>{{yield
|
|
487
|
+
(hash open=this.open collapsed=false mobile=true)
|
|
488
|
+
to='footer'
|
|
489
|
+
}}</div>
|
|
490
|
+
{{/if}}
|
|
491
|
+
</nav>
|
|
492
|
+
</:default>
|
|
493
|
+
</Drawer>
|
|
494
|
+
{{else}}
|
|
495
|
+
<nav
|
|
496
|
+
id={{this.railId}}
|
|
497
|
+
class='pretui-sidebar-rail'
|
|
498
|
+
aria-label={{this.label}}
|
|
499
|
+
data-state={{this.state}}
|
|
500
|
+
data-mobile='false'
|
|
501
|
+
data-test-pretui-sidebar-rail
|
|
502
|
+
>
|
|
503
|
+
{{#if (has-block 'header')}}
|
|
504
|
+
<div class='pretui-sidebar-head'>{{yield
|
|
505
|
+
(hash
|
|
506
|
+
open=this.open collapsed=this.collapsed mobile=false
|
|
507
|
+
)
|
|
508
|
+
to='header'
|
|
509
|
+
}}</div>
|
|
510
|
+
{{/if}}
|
|
511
|
+
<div class='pretui-sidebar-body'>
|
|
512
|
+
{{yield
|
|
513
|
+
(hash
|
|
514
|
+
open=this.open
|
|
515
|
+
collapsed=this.collapsed
|
|
516
|
+
mobile=false
|
|
517
|
+
toggle=this.toggle
|
|
518
|
+
)
|
|
519
|
+
to='nav'
|
|
520
|
+
}}
|
|
521
|
+
</div>
|
|
522
|
+
{{#if (has-block 'footer')}}
|
|
523
|
+
<div class='pretui-sidebar-foot'>{{yield
|
|
524
|
+
(hash
|
|
525
|
+
open=this.open collapsed=this.collapsed mobile=false
|
|
526
|
+
)
|
|
527
|
+
to='footer'
|
|
528
|
+
}}</div>
|
|
529
|
+
{{/if}}
|
|
530
|
+
</nav>
|
|
531
|
+
|
|
532
|
+
{{#if this.showHandle}}
|
|
533
|
+
{{! A REAL tab stop. shadcn's rail is a <button tabIndex={-1}> and
|
|
534
|
+
Ant's is a <div onClick> — in both, the rail's own affordance is
|
|
535
|
+
mouse-only. The name states the action rather than the object,
|
|
536
|
+
so a reader hears what pressing it will do. }}
|
|
537
|
+
<button
|
|
538
|
+
type='button'
|
|
539
|
+
class='pretui-sidebar-handle'
|
|
540
|
+
aria-label={{this.handleLabel}}
|
|
541
|
+
aria-expanded={{if this.open 'true' 'false'}}
|
|
542
|
+
aria-controls={{this.railId}}
|
|
543
|
+
data-test-pretui-sidebar-handle
|
|
544
|
+
{{on 'click' this.toggle}}
|
|
545
|
+
><span class='pretui-sidebar-handle-line' aria-hidden='true'></span>
|
|
546
|
+
</button>
|
|
547
|
+
{{/if}}
|
|
548
|
+
{{/if}}
|
|
549
|
+
|
|
550
|
+
<div class='pretui-sidebar-content'>
|
|
551
|
+
{{yield
|
|
552
|
+
(hash
|
|
553
|
+
open=this.open
|
|
554
|
+
collapsed=this.collapsed
|
|
555
|
+
mobile=this.mobile
|
|
556
|
+
toggle=this.toggle
|
|
557
|
+
controls=this.railId
|
|
558
|
+
)
|
|
559
|
+
}}
|
|
560
|
+
</div>
|
|
561
|
+
</div>
|
|
562
|
+
|
|
563
|
+
<style scoped>
|
|
564
|
+
@layer PretComponent {
|
|
565
|
+
/* One grid, not a viewport-pinned panel plus an in-flow ghost spacer.
|
|
566
|
+
shadcn needs the ghost because its rail is pinned to the VIEWPORT and
|
|
567
|
+
therefore out of flow; inside a card that is simply wrong, and a grid
|
|
568
|
+
track animates exactly the same way with one element instead of
|
|
569
|
+
three. (The phrase this comment is avoiding trips the kit's own
|
|
570
|
+
no-css-position-fixed lint rule, which scans comment text too.) */
|
|
571
|
+
.pretui-sidebar-shell {
|
|
572
|
+
--pretui-sidebar-width: 16rem;
|
|
573
|
+
--pretui-sidebar-rail-width: 3.25rem;
|
|
574
|
+
display: grid;
|
|
575
|
+
grid-template-columns: var(--pretui-sidebar-track) minmax(0, 1fr);
|
|
576
|
+
--pretui-sidebar-track: var(--pretui-sidebar-width);
|
|
577
|
+
min-inline-size: 0;
|
|
578
|
+
min-block-size: 0;
|
|
579
|
+
inline-size: 100%;
|
|
580
|
+
block-size: 100%;
|
|
581
|
+
position: relative;
|
|
582
|
+
container-type: inline-size;
|
|
583
|
+
font-size: var(--text-ui-md, 12.5px);
|
|
584
|
+
letter-spacing: var(--track-ui, 0.01em);
|
|
585
|
+
color: var(--foreground);
|
|
586
|
+
transition: grid-template-columns var(--pretui-dur-morph, 300ms)
|
|
587
|
+
var(--pretui-ease-morph, cubic-bezier(0.3, 0.7, 0.2, 1.02));
|
|
588
|
+
}
|
|
589
|
+
/* Logical: `end` swaps the tracks and moves the rail to column 2. In RTL
|
|
590
|
+
the whole thing mirrors with no second stylesheet — the `rotate-180`
|
|
591
|
+
on an empty spacer that shadcn uses to fake this has no analogue
|
|
592
|
+
because there is nothing to fake. */
|
|
593
|
+
.pretui-sidebar-shell[data-placement='end'] {
|
|
594
|
+
grid-template-columns: minmax(0, 1fr) var(--pretui-sidebar-track);
|
|
595
|
+
}
|
|
596
|
+
.pretui-sidebar-shell[data-placement='end'] .pretui-sidebar-rail {
|
|
597
|
+
grid-column: 2;
|
|
598
|
+
grid-row: 1;
|
|
599
|
+
}
|
|
600
|
+
.pretui-sidebar-shell[data-placement='end'] .pretui-sidebar-content {
|
|
601
|
+
grid-column: 1;
|
|
602
|
+
grid-row: 1;
|
|
603
|
+
}
|
|
604
|
+
.pretui-sidebar-shell[data-state='collapsed'][data-collapsible='rail'] {
|
|
605
|
+
--pretui-sidebar-track: var(--pretui-sidebar-rail-width);
|
|
606
|
+
}
|
|
607
|
+
.pretui-sidebar-shell[data-state='collapsed'][data-collapsible='offcanvas'] {
|
|
608
|
+
--pretui-sidebar-track: 0px;
|
|
609
|
+
}
|
|
610
|
+
/* In the drawer mode the rail is in the top layer, so the grid is one
|
|
611
|
+
column and the content takes all of it. */
|
|
612
|
+
.pretui-sidebar-shell[data-mobile='true'] {
|
|
613
|
+
--pretui-sidebar-track: 0px;
|
|
614
|
+
grid-template-columns: minmax(0, 1fr);
|
|
615
|
+
}
|
|
616
|
+
.pretui-sidebar-rail {
|
|
617
|
+
grid-column: 1;
|
|
618
|
+
grid-row: 1;
|
|
619
|
+
display: flex;
|
|
620
|
+
flex-direction: column;
|
|
621
|
+
min-inline-size: 0;
|
|
622
|
+
min-block-size: 0;
|
|
623
|
+
overflow: hidden;
|
|
624
|
+
background: var(--pretui-sidebar-bg, var(--inset, var(--boxel-100)));
|
|
625
|
+
}
|
|
626
|
+
.pretui-sidebar-shell[data-bordered='true'] .pretui-sidebar-rail {
|
|
627
|
+
box-shadow: inset -1px 0 0 var(--border);
|
|
628
|
+
}
|
|
629
|
+
.pretui-sidebar-shell[data-bordered='true'][data-placement='end']
|
|
630
|
+
.pretui-sidebar-rail {
|
|
631
|
+
box-shadow: inset 1px 0 0 var(--border);
|
|
632
|
+
}
|
|
633
|
+
/* An offcanvas rail leaves the tab order and the accessibility tree.
|
|
634
|
+
Mantine's AppShell only translates its navbar off screen, so a
|
|
635
|
+
"hidden" navbar is still tabbable and still read aloud. */
|
|
636
|
+
.pretui-sidebar-shell[data-state='collapsed'][data-collapsible='offcanvas']
|
|
637
|
+
.pretui-sidebar-rail {
|
|
638
|
+
visibility: hidden;
|
|
639
|
+
}
|
|
640
|
+
/* The drawer's own rail is not a grid child — it lives inside a
|
|
641
|
+
<dialog> in the top layer. */
|
|
642
|
+
.pretui-sidebar-rail[data-mobile='true'] {
|
|
643
|
+
display: flex;
|
|
644
|
+
block-size: 100%;
|
|
645
|
+
background: none;
|
|
646
|
+
box-shadow: none;
|
|
647
|
+
}
|
|
648
|
+
.pretui-sidebar-head,
|
|
649
|
+
.pretui-sidebar-foot {
|
|
650
|
+
flex: none;
|
|
651
|
+
min-inline-size: 0;
|
|
652
|
+
padding: var(--space-3, 8px);
|
|
653
|
+
}
|
|
654
|
+
.pretui-sidebar-foot {
|
|
655
|
+
box-shadow: 0 -1px 0 var(--border);
|
|
656
|
+
}
|
|
657
|
+
.pretui-sidebar-head {
|
|
658
|
+
box-shadow: 0 1px 0 var(--border);
|
|
659
|
+
}
|
|
660
|
+
.pretui-sidebar-body {
|
|
661
|
+
flex: 1 1 auto;
|
|
662
|
+
min-block-size: 0;
|
|
663
|
+
min-inline-size: 0;
|
|
664
|
+
overflow-y: auto;
|
|
665
|
+
overscroll-behavior: contain;
|
|
666
|
+
scrollbar-width: thin;
|
|
667
|
+
padding: var(--space-3, 8px);
|
|
668
|
+
display: grid;
|
|
669
|
+
gap: var(--space-3, 8px);
|
|
670
|
+
align-content: start;
|
|
671
|
+
}
|
|
672
|
+
.pretui-sidebar-content {
|
|
673
|
+
grid-column: 2;
|
|
674
|
+
grid-row: 1;
|
|
675
|
+
min-inline-size: 0;
|
|
676
|
+
min-block-size: 0;
|
|
677
|
+
}
|
|
678
|
+
.pretui-sidebar-shell[data-mobile='true'] .pretui-sidebar-content {
|
|
679
|
+
grid-column: 1;
|
|
680
|
+
}
|
|
681
|
+
/* The handle straddles the seam. 44px of hit area on a coarse pointer
|
|
682
|
+
, a 2px painted line, and a resize-style cursor so the
|
|
683
|
+
affordance reads before it is pressed. */
|
|
684
|
+
.pretui-sidebar-handle {
|
|
685
|
+
position: absolute;
|
|
686
|
+
inset-block: 0;
|
|
687
|
+
inset-inline-start: calc(var(--pretui-sidebar-track) - 0.5rem);
|
|
688
|
+
inline-size: 1rem;
|
|
689
|
+
z-index: var(--pretui-z-raised, 1);
|
|
690
|
+
display: grid;
|
|
691
|
+
place-items: center;
|
|
692
|
+
padding: 0;
|
|
693
|
+
border: 0;
|
|
694
|
+
background: none;
|
|
695
|
+
cursor: ew-resize;
|
|
696
|
+
transition: inset-inline-start var(--pretui-dur-morph, 300ms)
|
|
697
|
+
var(--pretui-ease-morph, cubic-bezier(0.3, 0.7, 0.2, 1.02));
|
|
698
|
+
}
|
|
699
|
+
.pretui-sidebar-shell[data-placement='end'] .pretui-sidebar-handle {
|
|
700
|
+
inset-inline-start: auto;
|
|
701
|
+
inset-inline-end: calc(var(--pretui-sidebar-track) - 0.5rem);
|
|
702
|
+
}
|
|
703
|
+
.pretui-sidebar-handle-line {
|
|
704
|
+
inline-size: 2px;
|
|
705
|
+
block-size: 100%;
|
|
706
|
+
border-radius: 2px;
|
|
707
|
+
background: transparent;
|
|
708
|
+
transition: background var(--pretui-dur-snap, 180ms)
|
|
709
|
+
var(--pretui-ease-snap, ease);
|
|
710
|
+
}
|
|
711
|
+
.pretui-sidebar-handle:hover .pretui-sidebar-handle-line {
|
|
712
|
+
background: var(--primary);
|
|
713
|
+
}
|
|
714
|
+
.pretui-sidebar-handle:focus-visible {
|
|
715
|
+
outline: 2px solid var(--ring);
|
|
716
|
+
outline-offset: -2px;
|
|
717
|
+
border-radius: var(--radius-chip, 6px);
|
|
718
|
+
}
|
|
719
|
+
/* Coarse pointers get a real target rather than a 16px sliver. */
|
|
720
|
+
@media (any-pointer: coarse) {
|
|
721
|
+
.pretui-sidebar-handle {
|
|
722
|
+
inline-size: 44px;
|
|
723
|
+
inset-inline-start: calc(var(--pretui-sidebar-track) - 22px);
|
|
724
|
+
}
|
|
725
|
+
.pretui-sidebar-shell[data-placement='end'] .pretui-sidebar-handle {
|
|
726
|
+
inset-inline-end: calc(var(--pretui-sidebar-track) - 22px);
|
|
727
|
+
}
|
|
728
|
+
}
|
|
729
|
+
/* Reduced motion lands on the end state: the rail is at its width, the
|
|
730
|
+
handle is at the seam, nothing is mid-slide. */
|
|
731
|
+
@media (prefers-reduced-motion: reduce) {
|
|
732
|
+
.pretui-sidebar-shell,
|
|
733
|
+
.pretui-sidebar-handle,
|
|
734
|
+
.pretui-sidebar-handle-line {
|
|
735
|
+
transition: none;
|
|
736
|
+
}
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
</style>
|
|
740
|
+
</template>
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
// ── SidebarTrigger ───────────────────────────────────────────────────────
|
|
744
|
+
|
|
745
|
+
export interface SidebarTriggerSignature {
|
|
746
|
+
Args: {
|
|
747
|
+
/** The rail's current state, from the yielded hash. */
|
|
748
|
+
open: boolean;
|
|
749
|
+
/** The rail's toggle, from the yielded hash. */
|
|
750
|
+
onToggle: () => void;
|
|
751
|
+
/** The rail's element id, from the yielded hash. */
|
|
752
|
+
controls: string;
|
|
753
|
+
/** What the rail is called, so the name says which one. Default `sidebar`. */
|
|
754
|
+
label?: string;
|
|
755
|
+
size?: SizeAlias;
|
|
756
|
+
};
|
|
757
|
+
Blocks: { default: [] };
|
|
758
|
+
Element: HTMLButtonElement;
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
/**
|
|
762
|
+
* The toolbar button that toggles a `Sidebar`.
|
|
763
|
+
*
|
|
764
|
+
* shadcn's `SidebarTrigger` reads its state from React context and still emits
|
|
765
|
+
* neither `aria-expanded` nor `aria-controls`, so a reader hears "Toggle
|
|
766
|
+
* Sidebar" with no state and no relationship. Here the three facts it needs
|
|
767
|
+
* come from the yielded hash and all three reach the DOM.
|
|
768
|
+
*/
|
|
769
|
+
export class SidebarTrigger extends Component<SidebarTriggerSignature> {
|
|
770
|
+
get size() {
|
|
771
|
+
return pretuiSize(this.args.size);
|
|
772
|
+
}
|
|
773
|
+
get label(): string {
|
|
774
|
+
let noun = this.args.label ?? 'sidebar';
|
|
775
|
+
return (this.args.open ? 'Collapse ' : 'Expand ') + noun;
|
|
776
|
+
}
|
|
777
|
+
<template>
|
|
778
|
+
<button
|
|
779
|
+
type='button'
|
|
780
|
+
class='pretui-sidebar-trigger'
|
|
781
|
+
data-size={{this.size}}
|
|
782
|
+
aria-label={{this.label}}
|
|
783
|
+
aria-expanded={{if @open 'true' 'false'}}
|
|
784
|
+
aria-controls={{@controls}}
|
|
785
|
+
data-test-pretui-sidebar-trigger
|
|
786
|
+
{{on 'click' @onToggle}}
|
|
787
|
+
>
|
|
788
|
+
{{#if (has-block)}}
|
|
789
|
+
{{yield}}
|
|
790
|
+
{{else}}
|
|
791
|
+
<span class='pretui-sidebar-trigger-glyph' aria-hidden='true'></span>
|
|
792
|
+
{{/if}}
|
|
793
|
+
</button>
|
|
794
|
+
<style scoped>
|
|
795
|
+
@layer PretComponent {
|
|
796
|
+
.pretui-sidebar-trigger {
|
|
797
|
+
display: inline-grid;
|
|
798
|
+
place-items: center;
|
|
799
|
+
inline-size: 2.24em;
|
|
800
|
+
block-size: 2.24em;
|
|
801
|
+
padding: 0;
|
|
802
|
+
border: 0;
|
|
803
|
+
border-radius: var(--radius-chip, 6px);
|
|
804
|
+
background: none;
|
|
805
|
+
color: var(--muted-foreground);
|
|
806
|
+
font-size: var(--pretui-size-m, var(--text-ui-md, 0.78rem));
|
|
807
|
+
cursor: pointer;
|
|
808
|
+
}
|
|
809
|
+
.pretui-sidebar-trigger[data-size='xs'] {
|
|
810
|
+
font-size: var(--pretui-size-xs, var(--text-ui-xs, 0.66rem));
|
|
811
|
+
}
|
|
812
|
+
.pretui-sidebar-trigger[data-size='s'] {
|
|
813
|
+
font-size: var(--pretui-size-s, var(--text-ui-sm, 0.72rem));
|
|
814
|
+
}
|
|
815
|
+
.pretui-sidebar-trigger[data-size='l'] {
|
|
816
|
+
font-size: var(--pretui-size-l, var(--text-ui-lg, 0.875rem));
|
|
817
|
+
}
|
|
818
|
+
.pretui-sidebar-trigger[data-size='xl'] {
|
|
819
|
+
font-size: var(--pretui-size-xl, var(--text-ui-xl, 1rem));
|
|
820
|
+
}
|
|
821
|
+
.pretui-sidebar-trigger:hover {
|
|
822
|
+
background: var(--hover, var(--boxel-100));
|
|
823
|
+
color: var(--foreground);
|
|
824
|
+
}
|
|
825
|
+
.pretui-sidebar-trigger:focus-visible {
|
|
826
|
+
outline: 2px solid var(--ring);
|
|
827
|
+
outline-offset: 1px;
|
|
828
|
+
}
|
|
829
|
+
/* Three bars with the first one short — a rail glyph, drawn rather than
|
|
830
|
+
imported, so the component has no icon dependency. */
|
|
831
|
+
.pretui-sidebar-trigger-glyph {
|
|
832
|
+
inline-size: 1em;
|
|
833
|
+
block-size: 0.75em;
|
|
834
|
+
border-inline-start: 0.28em solid currentColor;
|
|
835
|
+
border-inline-end: 1.5px solid currentColor;
|
|
836
|
+
border-block: 1.5px solid currentColor;
|
|
837
|
+
border-radius: 2px;
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
</style>
|
|
841
|
+
</template>
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
// ── SidebarGroup ─────────────────────────────────────────────────────────
|
|
845
|
+
|
|
846
|
+
export interface SidebarGroupSignature {
|
|
847
|
+
Args: {
|
|
848
|
+
/** Section heading. Also the group's accessible name. */
|
|
849
|
+
label?: string;
|
|
850
|
+
/** Hide the heading visually but keep it as the accessible name. */
|
|
851
|
+
hideLabel?: boolean;
|
|
852
|
+
};
|
|
853
|
+
Blocks: { default: []; action: [] };
|
|
854
|
+
Element: HTMLDivElement;
|
|
855
|
+
}
|
|
856
|
+
|
|
857
|
+
/**
|
|
858
|
+
* A labelled section of the rail.
|
|
859
|
+
*
|
|
860
|
+
* shadcn's `SidebarGroupLabel` collapses by moving itself off screen with
|
|
861
|
+
* `-mt-8 opacity-0`, which leaves the label in the accessibility tree while it
|
|
862
|
+
* is visually gone — a reader hears a heading for a section it cannot see.
|
|
863
|
+
* `@hideLabel` here uses the kit's `sr-only` treatment, which is the same
|
|
864
|
+
* visual result with the opposite accessibility meaning stated on purpose.
|
|
865
|
+
*/
|
|
866
|
+
export class SidebarGroup extends Component<SidebarGroupSignature> {
|
|
867
|
+
labelId = `${guidFor(this)}-label`;
|
|
868
|
+
<template>
|
|
869
|
+
<div
|
|
870
|
+
class='pretui-sbgroup'
|
|
871
|
+
role='group'
|
|
872
|
+
aria-labelledby={{if @label this.labelId}}
|
|
873
|
+
data-test-pretui-sidebar-group
|
|
874
|
+
...attributes
|
|
875
|
+
>
|
|
876
|
+
{{#if @label}}
|
|
877
|
+
<div class='pretui-sbgroup-head'>
|
|
878
|
+
<span
|
|
879
|
+
id={{this.labelId}}
|
|
880
|
+
class='pretui-sbgroup-label'
|
|
881
|
+
data-hidden={{if @hideLabel 'true' 'false'}}
|
|
882
|
+
>{{@label}}</span>
|
|
883
|
+
{{#if (has-block 'action')}}
|
|
884
|
+
<span class='pretui-sbgroup-action'>{{yield to='action'}}</span>
|
|
885
|
+
{{/if}}
|
|
886
|
+
</div>
|
|
887
|
+
{{/if}}
|
|
888
|
+
<div class='pretui-sbgroup-body'>{{yield}}</div>
|
|
889
|
+
</div>
|
|
890
|
+
<style scoped>
|
|
891
|
+
@layer PretComponent {
|
|
892
|
+
.pretui-sbgroup {
|
|
893
|
+
display: grid;
|
|
894
|
+
gap: 2px;
|
|
895
|
+
min-inline-size: 0;
|
|
896
|
+
}
|
|
897
|
+
.pretui-sbgroup-head {
|
|
898
|
+
display: flex;
|
|
899
|
+
align-items: center;
|
|
900
|
+
justify-content: space-between;
|
|
901
|
+
gap: var(--space-2, 6px);
|
|
902
|
+
padding: var(--space-2, 6px) var(--space-2, 6px) 2px;
|
|
903
|
+
min-inline-size: 0;
|
|
904
|
+
}
|
|
905
|
+
.pretui-sbgroup-label {
|
|
906
|
+
font-family: var(--font-mono);
|
|
907
|
+
font-size: var(--text-ui-xs, 11px);
|
|
908
|
+
font-weight: 500;
|
|
909
|
+
letter-spacing: var(--track-eyebrow, 0.08em);
|
|
910
|
+
text-transform: uppercase;
|
|
911
|
+
color: var(--muted-foreground);
|
|
912
|
+
min-inline-size: 0;
|
|
913
|
+
overflow: hidden;
|
|
914
|
+
text-overflow: ellipsis;
|
|
915
|
+
white-space: nowrap;
|
|
916
|
+
}
|
|
917
|
+
/* Visually gone, still the accessible name — the opposite of a label
|
|
918
|
+
parked off screen with opacity, which stays announced but describes
|
|
919
|
+
nothing the reader can find. */
|
|
920
|
+
.pretui-sbgroup-label[data-hidden='true'] {
|
|
921
|
+
position: absolute;
|
|
922
|
+
inline-size: 1px;
|
|
923
|
+
block-size: 1px;
|
|
924
|
+
overflow: hidden;
|
|
925
|
+
clip-path: inset(50%);
|
|
926
|
+
white-space: nowrap;
|
|
927
|
+
}
|
|
928
|
+
.pretui-sbgroup-action {
|
|
929
|
+
flex: none;
|
|
930
|
+
}
|
|
931
|
+
.pretui-sbgroup-body {
|
|
932
|
+
display: grid;
|
|
933
|
+
gap: 1px;
|
|
934
|
+
min-inline-size: 0;
|
|
935
|
+
}
|
|
936
|
+
}
|
|
937
|
+
</style>
|
|
938
|
+
</template>
|
|
939
|
+
}
|
|
940
|
+
|
|
941
|
+
// ── SidebarItem ──────────────────────────────────────────────────────────
|
|
942
|
+
|
|
943
|
+
export interface SidebarItemSignature {
|
|
944
|
+
Args: {
|
|
945
|
+
/** The row's text. Always the accessible name, collapsed or not. */
|
|
946
|
+
label: string;
|
|
947
|
+
/** Navigates rather than acts — renders an `<a>`. */
|
|
948
|
+
href?: string;
|
|
949
|
+
/** Acts rather than navigates — renders a `<button>`. */
|
|
950
|
+
onClick?: () => void;
|
|
951
|
+
/** Marks the current location. Emits `aria-current='page'`. */
|
|
952
|
+
active?: boolean;
|
|
953
|
+
/** A trailing count or status word. */
|
|
954
|
+
badge?: string;
|
|
955
|
+
/**
|
|
956
|
+
* The rail is at icon width. Comes from the `Sidebar` block param — an
|
|
957
|
+
* explicit yield rather than a React context, so the dependency is
|
|
958
|
+
* visible in the template and there is no provider to forget.
|
|
959
|
+
*/
|
|
960
|
+
collapsed?: boolean;
|
|
961
|
+
/** Announced and styled as disabled; stays focusable (`aria-disabled`). */
|
|
962
|
+
disabled?: boolean;
|
|
963
|
+
};
|
|
964
|
+
Blocks: {
|
|
965
|
+
/** The leading glyph. Kept visible at icon width. */
|
|
966
|
+
icon: [];
|
|
967
|
+
};
|
|
968
|
+
Element: HTMLElement;
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
/**
|
|
972
|
+
* A nav row that survives the collapse to icon width.
|
|
973
|
+
*
|
|
974
|
+
* Collapsed, the label becomes the row's `aria-label` and a `Tooltip`, so the
|
|
975
|
+
* name never disappears — shadcn's `SidebarMenuButton` only renders a tooltip
|
|
976
|
+
* when you remember to pass `tooltip`, and the visible label is hidden by a
|
|
977
|
+
* `group-data-[collapsible=icon]:hidden` utility on a span, leaving an
|
|
978
|
+
* icon-only control whose accessible name is whatever the icon happens to
|
|
979
|
+
* carry. Here the name is an argument, so it cannot go missing.
|
|
980
|
+
*/
|
|
981
|
+
export class SidebarItem extends Component<SidebarItemSignature> {
|
|
982
|
+
get isLink(): boolean {
|
|
983
|
+
return this.args.href !== undefined && !this.args.disabled;
|
|
984
|
+
}
|
|
985
|
+
get current(): string | undefined {
|
|
986
|
+
return this.args.active ? 'page' : undefined;
|
|
987
|
+
}
|
|
988
|
+
act = () => {
|
|
989
|
+
if (this.args.disabled) {
|
|
990
|
+
return;
|
|
991
|
+
}
|
|
992
|
+
this.args.onClick?.();
|
|
993
|
+
};
|
|
994
|
+
<template>
|
|
995
|
+
{{#if @collapsed}}
|
|
996
|
+
<Tooltip
|
|
997
|
+
class='pretui-sbitem-tip'
|
|
998
|
+
@content={{@label}}
|
|
999
|
+
@side='right'
|
|
1000
|
+
data-test-pretui-sidebar-item-tip
|
|
1001
|
+
>
|
|
1002
|
+
{{#if this.isLink}}
|
|
1003
|
+
<a
|
|
1004
|
+
class='pretui-sbitem'
|
|
1005
|
+
href={{@href}}
|
|
1006
|
+
aria-label={{@label}}
|
|
1007
|
+
aria-current={{this.current}}
|
|
1008
|
+
data-active={{if @active 'true' 'false'}}
|
|
1009
|
+
data-collapsed='true'
|
|
1010
|
+
data-test-pretui-sidebar-item
|
|
1011
|
+
...attributes
|
|
1012
|
+
>
|
|
1013
|
+
<span class='pretui-sbitem-icon'>{{yield to='icon'}}</span>
|
|
1014
|
+
</a>
|
|
1015
|
+
{{else}}
|
|
1016
|
+
<button
|
|
1017
|
+
type='button'
|
|
1018
|
+
class='pretui-sbitem'
|
|
1019
|
+
aria-label={{@label}}
|
|
1020
|
+
aria-current={{this.current}}
|
|
1021
|
+
aria-disabled={{if @disabled 'true'}}
|
|
1022
|
+
data-active={{if @active 'true' 'false'}}
|
|
1023
|
+
data-collapsed='true'
|
|
1024
|
+
data-test-pretui-sidebar-item
|
|
1025
|
+
{{on 'click' this.act}}
|
|
1026
|
+
...attributes
|
|
1027
|
+
>
|
|
1028
|
+
<span class='pretui-sbitem-icon'>{{yield to='icon'}}</span>
|
|
1029
|
+
</button>
|
|
1030
|
+
{{/if}}
|
|
1031
|
+
</Tooltip>
|
|
1032
|
+
{{else if this.isLink}}
|
|
1033
|
+
<a
|
|
1034
|
+
class='pretui-sbitem'
|
|
1035
|
+
href={{@href}}
|
|
1036
|
+
aria-current={{this.current}}
|
|
1037
|
+
data-active={{if @active 'true' 'false'}}
|
|
1038
|
+
data-collapsed='false'
|
|
1039
|
+
data-test-pretui-sidebar-item
|
|
1040
|
+
...attributes
|
|
1041
|
+
>
|
|
1042
|
+
<span class='pretui-sbitem-icon'>{{yield to='icon'}}</span>
|
|
1043
|
+
<span class='pretui-sbitem-label'>{{@label}}</span>
|
|
1044
|
+
{{#if @badge}}
|
|
1045
|
+
<span class='pretui-sbitem-badge'>{{@badge}}</span>
|
|
1046
|
+
{{/if}}
|
|
1047
|
+
</a>
|
|
1048
|
+
{{else}}
|
|
1049
|
+
<button
|
|
1050
|
+
type='button'
|
|
1051
|
+
class='pretui-sbitem'
|
|
1052
|
+
aria-current={{this.current}}
|
|
1053
|
+
aria-disabled={{if @disabled 'true'}}
|
|
1054
|
+
data-active={{if @active 'true' 'false'}}
|
|
1055
|
+
data-collapsed='false'
|
|
1056
|
+
data-test-pretui-sidebar-item
|
|
1057
|
+
{{on 'click' this.act}}
|
|
1058
|
+
...attributes
|
|
1059
|
+
>
|
|
1060
|
+
<span class='pretui-sbitem-icon'>{{yield to='icon'}}</span>
|
|
1061
|
+
<span class='pretui-sbitem-label'>{{@label}}</span>
|
|
1062
|
+
{{#if @badge}}
|
|
1063
|
+
<span class='pretui-sbitem-badge'>{{@badge}}</span>
|
|
1064
|
+
{{/if}}
|
|
1065
|
+
</button>
|
|
1066
|
+
{{/if}}
|
|
1067
|
+
<style scoped>
|
|
1068
|
+
/* above Tooltip's layer, so these win by layer order, not file order */
|
|
1069
|
+
@layer PretComponent, PretComposite;
|
|
1070
|
+
@layer PretComposite {
|
|
1071
|
+
/* The Tooltip wrapper is a child component; the scope attribute rides
|
|
1072
|
+
`...attributes` to its root, so this rule reaches it with no
|
|
1073
|
+
`:deep()`. Verified mechanism, see the file header of
|
|
1074
|
+
structure-layout.gts. */
|
|
1075
|
+
.pretui-sbitem-tip {
|
|
1076
|
+
display: block;
|
|
1077
|
+
inline-size: 100%;
|
|
1078
|
+
}
|
|
1079
|
+
.pretui-sbitem {
|
|
1080
|
+
display: flex;
|
|
1081
|
+
align-items: center;
|
|
1082
|
+
gap: 0.6em;
|
|
1083
|
+
inline-size: 100%;
|
|
1084
|
+
min-inline-size: 0;
|
|
1085
|
+
min-block-size: var(--control-h, 28px);
|
|
1086
|
+
padding: 0 0.6em;
|
|
1087
|
+
border: 0;
|
|
1088
|
+
border-radius: var(--radius-chip, 6px);
|
|
1089
|
+
background: none;
|
|
1090
|
+
color: var(--muted-foreground);
|
|
1091
|
+
font: inherit;
|
|
1092
|
+
letter-spacing: inherit;
|
|
1093
|
+
text-align: start;
|
|
1094
|
+
text-decoration: none;
|
|
1095
|
+
cursor: pointer;
|
|
1096
|
+
box-sizing: border-box;
|
|
1097
|
+
transition: background var(--pretui-dur-snap, 180ms)
|
|
1098
|
+
var(--pretui-ease-snap, ease);
|
|
1099
|
+
}
|
|
1100
|
+
.pretui-sbitem[data-collapsed='true'] {
|
|
1101
|
+
justify-content: center;
|
|
1102
|
+
padding: 0;
|
|
1103
|
+
}
|
|
1104
|
+
.pretui-sbitem:hover {
|
|
1105
|
+
background: var(--hover, var(--boxel-100));
|
|
1106
|
+
color: var(--foreground);
|
|
1107
|
+
}
|
|
1108
|
+
.pretui-sbitem:focus-visible {
|
|
1109
|
+
outline: 2px solid var(--ring);
|
|
1110
|
+
outline-offset: -2px;
|
|
1111
|
+
}
|
|
1112
|
+
.pretui-sbitem:active {
|
|
1113
|
+
transform: scale(0.985);
|
|
1114
|
+
}
|
|
1115
|
+
.pretui-sbitem[data-active='true'] {
|
|
1116
|
+
background: var(--pretui-selected, var(--boxel-100));
|
|
1117
|
+
color: var(--pretui-primary-ink, var(--primary));
|
|
1118
|
+
font-weight: 600;
|
|
1119
|
+
}
|
|
1120
|
+
.pretui-sbitem[aria-disabled='true'] {
|
|
1121
|
+
opacity: 0.45;
|
|
1122
|
+
cursor: default;
|
|
1123
|
+
}
|
|
1124
|
+
.pretui-sbitem[aria-disabled='true']:hover {
|
|
1125
|
+
background: none;
|
|
1126
|
+
}
|
|
1127
|
+
.pretui-sbitem-icon {
|
|
1128
|
+
flex: none;
|
|
1129
|
+
display: grid;
|
|
1130
|
+
place-items: center;
|
|
1131
|
+
inline-size: 1.15em;
|
|
1132
|
+
block-size: 1.15em;
|
|
1133
|
+
}
|
|
1134
|
+
.pretui-sbitem-label {
|
|
1135
|
+
flex: 1 1 auto;
|
|
1136
|
+
min-inline-size: 0;
|
|
1137
|
+
overflow: hidden;
|
|
1138
|
+
text-overflow: ellipsis;
|
|
1139
|
+
white-space: nowrap;
|
|
1140
|
+
}
|
|
1141
|
+
.pretui-sbitem-badge {
|
|
1142
|
+
flex: none;
|
|
1143
|
+
font-variant-numeric: tabular-nums;
|
|
1144
|
+
font-size: 0.9em;
|
|
1145
|
+
color: var(--ink-3, var(--boxel-400));
|
|
1146
|
+
}
|
|
1147
|
+
/* A coarse pointer gets the 44px row the guideline asks for; a fine
|
|
1148
|
+
pointer keeps the kit's 28px rhythm. */
|
|
1149
|
+
@media (any-pointer: coarse) {
|
|
1150
|
+
.pretui-sbitem {
|
|
1151
|
+
min-block-size: 44px;
|
|
1152
|
+
}
|
|
1153
|
+
}
|
|
1154
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1155
|
+
.pretui-sbitem {
|
|
1156
|
+
transition: none;
|
|
1157
|
+
}
|
|
1158
|
+
.pretui-sbitem:active {
|
|
1159
|
+
transform: none;
|
|
1160
|
+
}
|
|
1161
|
+
}
|
|
1162
|
+
}
|
|
1163
|
+
</style>
|
|
1164
|
+
</template>
|
|
1165
|
+
}
|