@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,881 @@
|
|
|
1
|
+
// Pretui — the shared math and gesture modifiers behind the design-tools components.
|
|
2
|
+
// Interaction design ported (not vendored) from figui3 v8.1.0 by Rogie King, MIT.
|
|
3
|
+
import { modifier } from 'ember-modifier';
|
|
4
|
+
|
|
5
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
6
|
+
// Pure math — no DOM, no component state. Unit-tested in design-tools.test.gts
|
|
7
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
8
|
+
|
|
9
|
+
/** The modifier keys a scrub/drag gesture reads. Kept as a plain shape so
|
|
10
|
+
* the math functions can be called from a test with an object literal
|
|
11
|
+
* instead of a synthesized PointerEvent. */
|
|
12
|
+
export interface DragModifiers {
|
|
13
|
+
shift?: boolean;
|
|
14
|
+
alt?: boolean;
|
|
15
|
+
meta?: boolean;
|
|
16
|
+
ctrl?: boolean;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** Coarse multiplier applied when Shift is held. */
|
|
20
|
+
export const COARSE = 10;
|
|
21
|
+
/** Fine multiplier applied when Alt (or ⌘) is held. */
|
|
22
|
+
export const FINE = 0.1;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* The step multiplier for a set of modifier keys.
|
|
26
|
+
*
|
|
27
|
+
* Shift coarsens by ×10, Alt/⌘ refines by ×0.1, and holding both cancels
|
|
28
|
+
* out to ×1 rather than compounding — a design tool must never surprise the
|
|
29
|
+
* hand that is already holding two keys.
|
|
30
|
+
*/
|
|
31
|
+
export function scrubMultiplier(keys: DragModifiers): number {
|
|
32
|
+
let coarse = keys.shift ? COARSE : 1;
|
|
33
|
+
let fine = keys.alt || keys.meta ? FINE : 1;
|
|
34
|
+
return coarse * fine;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* The value delta for a horizontal pointer delta.
|
|
39
|
+
*
|
|
40
|
+
* @param dx pointer movement in CSS pixels (signed, rightward +)
|
|
41
|
+
* @param step the control's step — one step per `pixelsPerStep` px
|
|
42
|
+
* @param keys modifier keys held during the move
|
|
43
|
+
* @param pixelsPerStep how many pixels of travel buy one step (default 1,
|
|
44
|
+
* which is figui3's rate; raise it for a slower scrub)
|
|
45
|
+
*/
|
|
46
|
+
export function scrubDelta(
|
|
47
|
+
dx: number,
|
|
48
|
+
step: number,
|
|
49
|
+
keys: DragModifiers = {},
|
|
50
|
+
pixelsPerStep = 1,
|
|
51
|
+
): number {
|
|
52
|
+
let rate = pixelsPerStep > 0 ? pixelsPerStep : 1;
|
|
53
|
+
return (dx / rate) * step * scrubMultiplier(keys);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* What a keyboard press means to a draggable thing.
|
|
58
|
+
*
|
|
59
|
+
* `dx`/`dy` are SCREEN-space (right is +x, **down** is +y) — the frame a 2D
|
|
60
|
+
* surface, a reorder list or a grid tile thinks in. `delta` is VALUE-space
|
|
61
|
+
* (Right *and* Up both increase) — the frame a spinbutton or a slider
|
|
62
|
+
* thinks in. Keeping both on one intent is what stops the two conventions
|
|
63
|
+
* being re-derived, and re-derived differently, per control.
|
|
64
|
+
*/
|
|
65
|
+
export interface NudgeIntent {
|
|
66
|
+
/** false when the key was not one of ours — do not preventDefault */
|
|
67
|
+
handled: boolean;
|
|
68
|
+
dx: number;
|
|
69
|
+
dy: number;
|
|
70
|
+
delta: number;
|
|
71
|
+
/** Home: jump to the low end of the range */
|
|
72
|
+
toMin: boolean;
|
|
73
|
+
/** End: jump to the high end of the range */
|
|
74
|
+
toMax: boolean;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const NO_NUDGE: NudgeIntent = {
|
|
78
|
+
handled: false,
|
|
79
|
+
dx: 0,
|
|
80
|
+
dy: 0,
|
|
81
|
+
delta: 0,
|
|
82
|
+
toMin: false,
|
|
83
|
+
toMax: false,
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* **The keyboard half of every drag in the kit.** Any control that moves
|
|
88
|
+
* something with a pointer must accept the same key set, and this is the
|
|
89
|
+
* single place that decides what those keys mean:
|
|
90
|
+
*
|
|
91
|
+
* | key | meaning |
|
|
92
|
+
* |----------------------|--------------------------------------------|
|
|
93
|
+
* | ← → ↑ ↓ | one `step`, scaled by the modifier keys |
|
|
94
|
+
* | Shift + arrow | ×10 (coarse) |
|
|
95
|
+
* | Alt/⌘ + arrow | ×0.1 (fine) |
|
|
96
|
+
* | PageUp / PageDown | ×10, regardless of modifiers |
|
|
97
|
+
* | Home / End | jump to the range ends |
|
|
98
|
+
*
|
|
99
|
+
* Consume it from a `keydown` handler and `preventDefault()` when
|
|
100
|
+
* `handled` is true. Exported for any other component adding a drag —
|
|
101
|
+
* a reorder list, a resizable grid tile, a timeline scrubber — so the
|
|
102
|
+
* keyboard contract is shared rather than reinvented.
|
|
103
|
+
*/
|
|
104
|
+
export function keyboardNudge(
|
|
105
|
+
key: string,
|
|
106
|
+
keys: DragModifiers = {},
|
|
107
|
+
step = 1,
|
|
108
|
+
): NudgeIntent {
|
|
109
|
+
let unit = step * scrubMultiplier(keys);
|
|
110
|
+
let coarse = step * COARSE;
|
|
111
|
+
switch (key) {
|
|
112
|
+
case 'ArrowLeft':
|
|
113
|
+
return {
|
|
114
|
+
handled: true,
|
|
115
|
+
dx: -unit,
|
|
116
|
+
dy: 0,
|
|
117
|
+
delta: -unit,
|
|
118
|
+
toMin: false,
|
|
119
|
+
toMax: false,
|
|
120
|
+
};
|
|
121
|
+
case 'ArrowRight':
|
|
122
|
+
return {
|
|
123
|
+
handled: true,
|
|
124
|
+
dx: unit,
|
|
125
|
+
dy: 0,
|
|
126
|
+
delta: unit,
|
|
127
|
+
toMin: false,
|
|
128
|
+
toMax: false,
|
|
129
|
+
};
|
|
130
|
+
case 'ArrowUp':
|
|
131
|
+
return {
|
|
132
|
+
handled: true,
|
|
133
|
+
dx: 0,
|
|
134
|
+
dy: -unit,
|
|
135
|
+
delta: unit,
|
|
136
|
+
toMin: false,
|
|
137
|
+
toMax: false,
|
|
138
|
+
};
|
|
139
|
+
case 'ArrowDown':
|
|
140
|
+
return {
|
|
141
|
+
handled: true,
|
|
142
|
+
dx: 0,
|
|
143
|
+
dy: unit,
|
|
144
|
+
delta: -unit,
|
|
145
|
+
toMin: false,
|
|
146
|
+
toMax: false,
|
|
147
|
+
};
|
|
148
|
+
case 'PageUp':
|
|
149
|
+
return {
|
|
150
|
+
handled: true,
|
|
151
|
+
dx: 0,
|
|
152
|
+
dy: -coarse,
|
|
153
|
+
delta: coarse,
|
|
154
|
+
toMin: false,
|
|
155
|
+
toMax: false,
|
|
156
|
+
};
|
|
157
|
+
case 'PageDown':
|
|
158
|
+
return {
|
|
159
|
+
handled: true,
|
|
160
|
+
dx: 0,
|
|
161
|
+
dy: coarse,
|
|
162
|
+
delta: -coarse,
|
|
163
|
+
toMin: false,
|
|
164
|
+
toMax: false,
|
|
165
|
+
};
|
|
166
|
+
case 'Home':
|
|
167
|
+
return {
|
|
168
|
+
handled: true,
|
|
169
|
+
dx: 0,
|
|
170
|
+
dy: 0,
|
|
171
|
+
delta: 0,
|
|
172
|
+
toMin: true,
|
|
173
|
+
toMax: false,
|
|
174
|
+
};
|
|
175
|
+
case 'End':
|
|
176
|
+
return {
|
|
177
|
+
handled: true,
|
|
178
|
+
dx: 0,
|
|
179
|
+
dy: 0,
|
|
180
|
+
delta: 0,
|
|
181
|
+
toMin: false,
|
|
182
|
+
toMax: true,
|
|
183
|
+
};
|
|
184
|
+
default:
|
|
185
|
+
return NO_NUDGE;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/** Clamps to an optional range. `undefined` bounds are open. */
|
|
190
|
+
export function clampRange(value: number, min?: number, max?: number): number {
|
|
191
|
+
let next = value;
|
|
192
|
+
if (min !== undefined && Number.isFinite(min)) {
|
|
193
|
+
next = Math.max(min, next);
|
|
194
|
+
}
|
|
195
|
+
if (max !== undefined && Number.isFinite(max)) {
|
|
196
|
+
next = Math.min(max, next);
|
|
197
|
+
}
|
|
198
|
+
return next;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/** Moves a number's decimal point by `places`, via its exponent rather than
|
|
202
|
+
* a multiply. `1.005 * 100` is `100.49999999999999`; `1.005e2` is `100.5`. */
|
|
203
|
+
function shiftPoint(value: number, places: number): number {
|
|
204
|
+
let parts = String(value).split('e');
|
|
205
|
+
let exponent = parts[1] ? Number(parts[1]) + places : places;
|
|
206
|
+
return Number(parts[0] + 'e' + exponent);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Rounds to `precision` decimal places, returning a NUMBER.
|
|
211
|
+
*
|
|
212
|
+
* Shifts the decimal exponent instead of multiplying by 10ⁿ. The multiply
|
|
213
|
+
* form — which is what figui3's `#formatNumber` does — silently rounds
|
|
214
|
+
* `1.005` at 2dp DOWN to `1`, because `1.005 * 100` is
|
|
215
|
+
* `100.49999999999999` in binary floating point. On a control whose whole
|
|
216
|
+
* job is exact numbers that is not an acceptable rounding error.
|
|
217
|
+
*/
|
|
218
|
+
export function roundTo(value: number, precision = 2): number {
|
|
219
|
+
if (!Number.isFinite(value)) {
|
|
220
|
+
return value;
|
|
221
|
+
}
|
|
222
|
+
let places = Math.max(0, Math.min(20, Math.trunc(precision)));
|
|
223
|
+
return shiftPoint(Math.round(shiftPoint(value, places)), -places);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/** Snaps to the nearest multiple of `step`, offset by `origin`. */
|
|
227
|
+
export function quantize(value: number, step: number, origin = 0): number {
|
|
228
|
+
if (!Number.isFinite(step) || step <= 0) {
|
|
229
|
+
return value;
|
|
230
|
+
}
|
|
231
|
+
return origin + Math.round((value - origin) / step) * step;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* The nearest member of `points` within `tolerance`, or `value` unchanged.
|
|
236
|
+
* This is the origin-grid / gradient-stop snap: discrete anchors that pull
|
|
237
|
+
* only when the pointer is already close, so free positioning still works.
|
|
238
|
+
*/
|
|
239
|
+
export function snapToPoints(
|
|
240
|
+
value: number,
|
|
241
|
+
points: readonly number[],
|
|
242
|
+
tolerance: number,
|
|
243
|
+
): number {
|
|
244
|
+
let best = value;
|
|
245
|
+
let bestGap = tolerance;
|
|
246
|
+
for (let point of points) {
|
|
247
|
+
let gap = Math.abs(point - value);
|
|
248
|
+
if (gap <= bestGap) {
|
|
249
|
+
best = point;
|
|
250
|
+
bestGap = gap;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
return best;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// ── Stepped scales ─────────────────────────────────────────────────────
|
|
257
|
+
// A property is often numeric WITHOUT being continuous. Photographic
|
|
258
|
+
// apertures run 1.4, 1.8, 2, 2.8, 4, 5.6, 8, 11, 16, 22 — an ordered list
|
|
259
|
+
// with non-uniform gaps, where the legal values are the whole domain and
|
|
260
|
+
// "f/5.6" is the value's name. `quantize` cannot express that (its grid is
|
|
261
|
+
// uniform) and `snapToPoints` only pulls when you are already close. A
|
|
262
|
+
// scale is therefore addressed by INDEX: a gesture moves n stops, and the
|
|
263
|
+
// value is whatever sits there.
|
|
264
|
+
|
|
265
|
+
/** One legal value on a stepped scale, with the name it goes by. */
|
|
266
|
+
export interface ScaleStop {
|
|
267
|
+
value: number;
|
|
268
|
+
/** what the user reads: 'f/5.6', 'ISO 400', '2×'. Falls back to the
|
|
269
|
+
* formatted number. */
|
|
270
|
+
label?: string;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/** A scale as a caller writes it: bare numbers when the number is its own
|
|
274
|
+
* name, `{ value, label }` when it is not. Mixing the two is legal. */
|
|
275
|
+
export type ScaleStops = readonly (number | ScaleStop)[];
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Sorts a scale ascending, drops non-finite entries, and collapses exact
|
|
279
|
+
* duplicates (first label wins).
|
|
280
|
+
*
|
|
281
|
+
* Sorting is not fussiness: every index operation below assumes monotonic
|
|
282
|
+
* order, so a caller who lists apertures widest-first — which is how a lens
|
|
283
|
+
* barrel is printed — would otherwise get an inverted scrub direction.
|
|
284
|
+
*/
|
|
285
|
+
export function normalizeStops(stops: ScaleStops | undefined): ScaleStop[] {
|
|
286
|
+
if (!stops || stops.length === 0) {
|
|
287
|
+
return [];
|
|
288
|
+
}
|
|
289
|
+
let mapped: ScaleStop[] = [];
|
|
290
|
+
for (let stop of stops) {
|
|
291
|
+
let entry: ScaleStop =
|
|
292
|
+
typeof stop === 'number' ? { value: stop } : { ...stop };
|
|
293
|
+
if (Number.isFinite(entry.value)) {
|
|
294
|
+
mapped.push(entry);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
mapped.sort((a, b) => a.value - b.value);
|
|
298
|
+
let out: ScaleStop[] = [];
|
|
299
|
+
for (let entry of mapped) {
|
|
300
|
+
let previous = out.length > 0 ? out[out.length - 1] : undefined;
|
|
301
|
+
if (previous && previous.value === entry.value) {
|
|
302
|
+
continue;
|
|
303
|
+
}
|
|
304
|
+
out.push(entry);
|
|
305
|
+
}
|
|
306
|
+
return out;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
* The index of the stop nearest `value`, or −1 when there is nothing to
|
|
311
|
+
* choose from (an empty scale, or a null/mixed value).
|
|
312
|
+
*
|
|
313
|
+
* Ties go to the LOWER stop, deliberately: typing "3" into an aperture
|
|
314
|
+
* lands on f/2.8 rather than f/4, and opening up is the safer default when
|
|
315
|
+
* a photographer is guessing.
|
|
316
|
+
*/
|
|
317
|
+
export function stopIndexFor(
|
|
318
|
+
value: number | null | undefined,
|
|
319
|
+
stops: readonly ScaleStop[],
|
|
320
|
+
): number {
|
|
321
|
+
if (stops.length === 0 || value === null || value === undefined) {
|
|
322
|
+
return -1;
|
|
323
|
+
}
|
|
324
|
+
if (!Number.isFinite(value)) {
|
|
325
|
+
return -1;
|
|
326
|
+
}
|
|
327
|
+
let best = 0;
|
|
328
|
+
let bestGap = Infinity;
|
|
329
|
+
for (let index = 0; index < stops.length; index++) {
|
|
330
|
+
let gap = Math.abs(stops[index].value - value);
|
|
331
|
+
if (gap < bestGap) {
|
|
332
|
+
bestGap = gap;
|
|
333
|
+
best = index;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
return best;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
/** The stop at `index`, clamped into the scale. Clamping rather than
|
|
340
|
+
* wrapping is what makes a long drag rest against the end of the barrel
|
|
341
|
+
* instead of teleporting from f/22 back to f/0.95. */
|
|
342
|
+
export function stopAt(
|
|
343
|
+
index: number,
|
|
344
|
+
stops: readonly ScaleStop[],
|
|
345
|
+
): ScaleStop | undefined {
|
|
346
|
+
if (stops.length === 0) {
|
|
347
|
+
return undefined;
|
|
348
|
+
}
|
|
349
|
+
let clamped = Math.max(0, Math.min(stops.length - 1, Math.round(index)));
|
|
350
|
+
return stops[clamped];
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/**
|
|
354
|
+
* How many stops a value-space `delta` should travel.
|
|
355
|
+
*
|
|
356
|
+
* A discrete scale has no half-stop, so a FINE modifier cannot subdivide
|
|
357
|
+
* one — it slows the hand instead, and the guaranteed minimum of one stop
|
|
358
|
+
* is what stops Alt+Arrow being a dead key. Coarse still multiplies, so
|
|
359
|
+
* Shift+Arrow crosses ten stops exactly as it crosses ten pixels.
|
|
360
|
+
*/
|
|
361
|
+
export function stopStride(delta: number): number {
|
|
362
|
+
if (!Number.isFinite(delta) || delta === 0) {
|
|
363
|
+
return 0;
|
|
364
|
+
}
|
|
365
|
+
let magnitude = Math.max(1, Math.round(Math.abs(delta)));
|
|
366
|
+
return delta < 0 ? -magnitude : magnitude;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
/** The text a stop goes by — its label, or the formatted number. */
|
|
370
|
+
export function stopText(
|
|
371
|
+
stop: ScaleStop | undefined,
|
|
372
|
+
precision = 2,
|
|
373
|
+
unit = '',
|
|
374
|
+
unitPosition: 'prefix' | 'suffix' = 'suffix',
|
|
375
|
+
): string {
|
|
376
|
+
if (!stop) {
|
|
377
|
+
return '';
|
|
378
|
+
}
|
|
379
|
+
return stop.label ?? formatMeasure(stop.value, precision, unit, unitPosition);
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
// ── Token lists ────────────────────────────────────────────────────────
|
|
383
|
+
// The other shape a property takes: not one value but an open-ended SET of
|
|
384
|
+
// short ones — mood keywords, materials, props, powers. The list is not
|
|
385
|
+
// drawn from a fixed vocabulary, so it is not a multi-select; it is free
|
|
386
|
+
// text that accumulates. The arithmetic lives here so "what happens when
|
|
387
|
+
// you add a duplicate" is a unit test rather than a claim about a DOM.
|
|
388
|
+
|
|
389
|
+
/** The outcome of a list edit: the new list, and the sentence a screen
|
|
390
|
+
* reader should hear. A rejected edit returns the list unchanged AND a
|
|
391
|
+
* reason — silence is what makes a rejected add feel like a broken key. */
|
|
392
|
+
export interface TokenEdit {
|
|
393
|
+
list: string[];
|
|
394
|
+
status: string;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
/**
|
|
398
|
+
* Appends `raw` to `list`, trimmed, subject to a duplicate rule and a cap.
|
|
399
|
+
*
|
|
400
|
+
* Duplicates are compared case-insensitively and REJECTED by default,
|
|
401
|
+
* because every one of these lists is a set in disguise — "Velvet" twice
|
|
402
|
+
* is a typo, not an intention.
|
|
403
|
+
*/
|
|
404
|
+
export function addToken(
|
|
405
|
+
list: readonly string[],
|
|
406
|
+
raw: string,
|
|
407
|
+
options: { allowDuplicates?: boolean; max?: number } = {},
|
|
408
|
+
): TokenEdit {
|
|
409
|
+
let text = (raw ?? '').trim();
|
|
410
|
+
let next = [...list];
|
|
411
|
+
if (!text) {
|
|
412
|
+
return { list: next, status: '' };
|
|
413
|
+
}
|
|
414
|
+
let max = options.max;
|
|
415
|
+
if (
|
|
416
|
+
max !== undefined &&
|
|
417
|
+
Number.isFinite(max) &&
|
|
418
|
+
max > 0 &&
|
|
419
|
+
list.length >= max
|
|
420
|
+
) {
|
|
421
|
+
return { list: next, status: 'List is full at ' + max + ' items' };
|
|
422
|
+
}
|
|
423
|
+
if (!options.allowDuplicates) {
|
|
424
|
+
let lower = text.toLowerCase();
|
|
425
|
+
if (list.some((item) => item.toLowerCase() === lower)) {
|
|
426
|
+
return { list: next, status: text + ' is already in the list' };
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
next.push(text);
|
|
430
|
+
return {
|
|
431
|
+
list: next,
|
|
432
|
+
status: 'Added ' + text + ', ' + next.length + ' items',
|
|
433
|
+
};
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
/** Removes the member at `index`. An out-of-range index is a no-op with an
|
|
437
|
+
* empty status, never a hole in the array. */
|
|
438
|
+
export function removeTokenAt(
|
|
439
|
+
list: readonly string[],
|
|
440
|
+
index: number,
|
|
441
|
+
): TokenEdit {
|
|
442
|
+
if (!Number.isInteger(index) || index < 0 || index >= list.length) {
|
|
443
|
+
return { list: [...list], status: '' };
|
|
444
|
+
}
|
|
445
|
+
let removed = list[index];
|
|
446
|
+
let next = list.filter((_item, position) => position !== index);
|
|
447
|
+
return {
|
|
448
|
+
list: next,
|
|
449
|
+
status: 'Removed ' + removed + ', ' + next.length + ' items',
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
/** Splits pasted text on commas / newlines so a list pasted from a
|
|
454
|
+
* spreadsheet arrives as members rather than as one long member. */
|
|
455
|
+
export function splitTokens(
|
|
456
|
+
raw: string,
|
|
457
|
+
separators?: readonly string[],
|
|
458
|
+
): string[] {
|
|
459
|
+
return (raw ?? '')
|
|
460
|
+
.split(tokenBreaks(separators))
|
|
461
|
+
.map((part) => part.trim())
|
|
462
|
+
.filter((part) => part.length > 0);
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
const REGEX_SPECIAL = new RegExp('[.*+?^$' + '{}()|[\\]\\\\]', 'g');
|
|
466
|
+
|
|
467
|
+
/** The characters that end a token: the separators (default a comma), plus
|
|
468
|
+
* a newline or tab, so a list pasted from a spreadsheet splits too. */
|
|
469
|
+
export function tokenBreaks(separators?: readonly string[]): RegExp {
|
|
470
|
+
let chars = (separators ?? [','])
|
|
471
|
+
.filter((c) => c.length > 0)
|
|
472
|
+
.map((c) => c.replace(REGEX_SPECIAL, '\\$&'));
|
|
473
|
+
return new RegExp('(?:' + [...chars, '\\n', '\\r', '\\t'].join('|') + ')+');
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
/** Normalizes degrees into [0, 360). */
|
|
477
|
+
export function wrapDegrees(degrees: number): number {
|
|
478
|
+
return ((degrees % 360) + 360) % 360;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
/**
|
|
482
|
+
* The SHORTEST signed rotation from `from` to `to`, in (-180, 180].
|
|
483
|
+
*
|
|
484
|
+
* This is what makes an angle dial wind past 360° instead of snapping
|
|
485
|
+
* backwards: the accumulated value is the running sum of shortest deltas,
|
|
486
|
+
* so dragging clockwise through 359°→1° adds +2, not −358.
|
|
487
|
+
*/
|
|
488
|
+
export function shortestAngleDelta(from: number, to: number): number {
|
|
489
|
+
let delta = wrapDegrees(to) - wrapDegrees(from);
|
|
490
|
+
if (delta > 180) {
|
|
491
|
+
delta -= 360;
|
|
492
|
+
}
|
|
493
|
+
if (delta <= -180) {
|
|
494
|
+
delta += 360;
|
|
495
|
+
}
|
|
496
|
+
return delta;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
/** Degrees of the vector from a centre to a point; 0° points right, and
|
|
500
|
+
* angles increase clockwise (screen coordinates, y down). */
|
|
501
|
+
export function pointerDegrees(
|
|
502
|
+
centreX: number,
|
|
503
|
+
centreY: number,
|
|
504
|
+
x: number,
|
|
505
|
+
y: number,
|
|
506
|
+
): number {
|
|
507
|
+
return wrapDegrees((Math.atan2(y - centreY, x - centreX) * 180) / Math.PI);
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
/** Cubic-Bézier ordinate for the canonical (0,0)→(1,1) easing curve, at
|
|
511
|
+
* curve parameter `t` (NOT at x = t). Used to draw the curve. */
|
|
512
|
+
export function bezierAt(t: number, a: number, b: number): number {
|
|
513
|
+
let u = 1 - t;
|
|
514
|
+
return 3 * u * u * t * a + 3 * u * t * t * b + t * t * t;
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
/**
|
|
518
|
+
* The eased output `y` for an input progress `x` of a `cubic-bezier(x1, y1,
|
|
519
|
+
* x2, y2)`. Solves x(t) = x for t by bisection — 24 halvings puts the error
|
|
520
|
+
* under 1e-7, which is finer than a pixel on any curve editor, and unlike
|
|
521
|
+
* Newton–Raphson it cannot diverge on the pathological control points a
|
|
522
|
+
* user is free to drag to.
|
|
523
|
+
*/
|
|
524
|
+
export function bezierEase(
|
|
525
|
+
x: number,
|
|
526
|
+
x1: number,
|
|
527
|
+
y1: number,
|
|
528
|
+
x2: number,
|
|
529
|
+
y2: number,
|
|
530
|
+
): number {
|
|
531
|
+
let target = Math.min(1, Math.max(0, x));
|
|
532
|
+
let low = 0;
|
|
533
|
+
let high = 1;
|
|
534
|
+
let t = target;
|
|
535
|
+
for (let i = 0; i < 24; i++) {
|
|
536
|
+
let guess = bezierAt(t, x1, x2);
|
|
537
|
+
if (guess < target) {
|
|
538
|
+
low = t;
|
|
539
|
+
} else {
|
|
540
|
+
high = t;
|
|
541
|
+
}
|
|
542
|
+
t = (low + high) / 2;
|
|
543
|
+
}
|
|
544
|
+
return bezierAt(t, y1, y2);
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
/** Formats a numeric value for display: rounded, with an optional unit on
|
|
548
|
+
* the requested side. Returns '' for a null/blank value. */
|
|
549
|
+
export function formatMeasure(
|
|
550
|
+
value: number | null | undefined,
|
|
551
|
+
precision = 2,
|
|
552
|
+
unit = '',
|
|
553
|
+
unitPosition: 'prefix' | 'suffix' = 'suffix',
|
|
554
|
+
): string {
|
|
555
|
+
if (value === null || value === undefined || !Number.isFinite(value)) {
|
|
556
|
+
return '';
|
|
557
|
+
}
|
|
558
|
+
let text = String(roundTo(value, precision));
|
|
559
|
+
if (!unit) {
|
|
560
|
+
return text;
|
|
561
|
+
}
|
|
562
|
+
return unitPosition === 'prefix' ? unit + text : text + unit;
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
/**
|
|
566
|
+
* Parses a measure the user typed. Tolerates a leading/trailing unit, a
|
|
567
|
+
* leading `+`, thin/regular spaces, and a stray second decimal point (which
|
|
568
|
+
* is what a fast typist actually produces). Returns null when nothing
|
|
569
|
+
* numeric is present, so an emptied field can round-trip as "no value".
|
|
570
|
+
*/
|
|
571
|
+
export function parseMeasure(text: string): number | null {
|
|
572
|
+
// Exponent letters are deliberately NOT in the keep-set: nobody types
|
|
573
|
+
// `1e3` into an inspector, but everybody types `12.5deg` — and keeping
|
|
574
|
+
// `e` turns that into `12.5e`, which is NaN. (figui3 keeps `e` and has
|
|
575
|
+
// exactly this bug on `deg`, `rem` and `em`.)
|
|
576
|
+
let cleaned = (text ?? '').replace(/[^\d.+-]/g, '');
|
|
577
|
+
// Keep only the first decimal point: "1.2.3" reads as 1.23, never NaN.
|
|
578
|
+
let dot = cleaned.indexOf('.');
|
|
579
|
+
if (dot !== -1) {
|
|
580
|
+
cleaned =
|
|
581
|
+
cleaned.slice(0, dot + 1) + cleaned.slice(dot + 1).replace(/\./g, '');
|
|
582
|
+
}
|
|
583
|
+
// A single leading sign and one run of digits — a trailing sign or a
|
|
584
|
+
// second number is dropped rather than poisoning the whole parse.
|
|
585
|
+
let match = cleaned.match(/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)/);
|
|
586
|
+
if (!match) {
|
|
587
|
+
return null;
|
|
588
|
+
}
|
|
589
|
+
let value = Number(match[0]);
|
|
590
|
+
return Number.isFinite(value) ? value : null;
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
594
|
+
// Gestures — ember-modifiers that own their listeners and their capture
|
|
595
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
596
|
+
|
|
597
|
+
/** One frame of a horizontal scrub. */
|
|
598
|
+
export interface ScrubFrame {
|
|
599
|
+
/** total signed travel in px since pointerdown */
|
|
600
|
+
dx: number;
|
|
601
|
+
/** signed travel in px since the previous frame */
|
|
602
|
+
stepX: number;
|
|
603
|
+
shift: boolean;
|
|
604
|
+
alt: boolean;
|
|
605
|
+
meta: boolean;
|
|
606
|
+
ctrl: boolean;
|
|
607
|
+
/** `end` commits; `cancel` (Escape, `pointercancel`) puts the value back */
|
|
608
|
+
phase: 'start' | 'move' | 'end' | 'cancel';
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
/**
|
|
612
|
+
* Horizontal scrub-to-change, with pointer capture.
|
|
613
|
+
*
|
|
614
|
+
* `pointerdown` is bound inside the modifier rather than with `{{on}}` in a
|
|
615
|
+
* template: the realm's remote lint forbids template `pointerdown` bindings,
|
|
616
|
+
* and a captured gesture needs its `pointerup`/`pointercancel` teardown to
|
|
617
|
+
* be owned by the same lifetime anyway.
|
|
618
|
+
*
|
|
619
|
+
* The gesture is cancelled — not committed — on Escape, which is the one
|
|
620
|
+
* affordance every direct-manipulation tool needs and figui3 lacks.
|
|
621
|
+
*
|
|
622
|
+
* @param onFrame called with every phase; the component decides what a
|
|
623
|
+
* frame means. MUST be a stable reference (an arrow class
|
|
624
|
+
* property), or the modifier re-installs every render.
|
|
625
|
+
* @param disabled when true the gesture never starts.
|
|
626
|
+
*/
|
|
627
|
+
export const scrubs = modifier(
|
|
628
|
+
(
|
|
629
|
+
el: HTMLElement,
|
|
630
|
+
[onFrame, disabled]: [(frame: ScrubFrame) => void, boolean | undefined],
|
|
631
|
+
) => {
|
|
632
|
+
let pointerId: number | undefined;
|
|
633
|
+
let originX = 0;
|
|
634
|
+
let lastX = 0;
|
|
635
|
+
let previousCursor = '';
|
|
636
|
+
|
|
637
|
+
let release = (phase: 'end' | 'cancel' | undefined) => {
|
|
638
|
+
if (pointerId === undefined) {
|
|
639
|
+
return;
|
|
640
|
+
}
|
|
641
|
+
if (el.hasPointerCapture(pointerId)) {
|
|
642
|
+
el.releasePointerCapture(pointerId);
|
|
643
|
+
}
|
|
644
|
+
pointerId = undefined;
|
|
645
|
+
document.body.style.cursor = previousCursor;
|
|
646
|
+
el.removeAttribute('data-scrubbing');
|
|
647
|
+
if (phase) {
|
|
648
|
+
onFrame({
|
|
649
|
+
dx: lastX - originX,
|
|
650
|
+
stepX: 0,
|
|
651
|
+
shift: false,
|
|
652
|
+
alt: false,
|
|
653
|
+
meta: false,
|
|
654
|
+
ctrl: false,
|
|
655
|
+
phase,
|
|
656
|
+
});
|
|
657
|
+
}
|
|
658
|
+
};
|
|
659
|
+
|
|
660
|
+
let down = (event: Event) => {
|
|
661
|
+
let pointer = event as PointerEvent;
|
|
662
|
+
if (disabled || pointer.button !== 0 || pointerId !== undefined) {
|
|
663
|
+
return;
|
|
664
|
+
}
|
|
665
|
+
pointer.preventDefault();
|
|
666
|
+
pointerId = pointer.pointerId;
|
|
667
|
+
originX = pointer.clientX;
|
|
668
|
+
lastX = pointer.clientX;
|
|
669
|
+
try {
|
|
670
|
+
el.setPointerCapture(pointerId);
|
|
671
|
+
} catch {
|
|
672
|
+
// Only synthetic events reach this: a real pointer is always active
|
|
673
|
+
// during its own pointerdown. A synthetic pointerId has no active
|
|
674
|
+
// pointer, so capture throws, and the gesture stays armed for the
|
|
675
|
+
// pointermove/pointerup the same caller dispatches on this element.
|
|
676
|
+
}
|
|
677
|
+
previousCursor = document.body.style.cursor;
|
|
678
|
+
document.body.style.cursor = 'ew-resize';
|
|
679
|
+
el.setAttribute('data-scrubbing', 'true');
|
|
680
|
+
onFrame({
|
|
681
|
+
dx: 0,
|
|
682
|
+
stepX: 0,
|
|
683
|
+
shift: pointer.shiftKey,
|
|
684
|
+
alt: pointer.altKey,
|
|
685
|
+
meta: pointer.metaKey,
|
|
686
|
+
ctrl: pointer.ctrlKey,
|
|
687
|
+
phase: 'start',
|
|
688
|
+
});
|
|
689
|
+
};
|
|
690
|
+
|
|
691
|
+
let move = (event: Event) => {
|
|
692
|
+
let pointer = event as PointerEvent;
|
|
693
|
+
if (pointerId === undefined || pointer.pointerId !== pointerId) {
|
|
694
|
+
return;
|
|
695
|
+
}
|
|
696
|
+
let stepX = pointer.clientX - lastX;
|
|
697
|
+
lastX = pointer.clientX;
|
|
698
|
+
onFrame({
|
|
699
|
+
dx: lastX - originX,
|
|
700
|
+
stepX,
|
|
701
|
+
shift: pointer.shiftKey,
|
|
702
|
+
alt: pointer.altKey,
|
|
703
|
+
meta: pointer.metaKey,
|
|
704
|
+
ctrl: pointer.ctrlKey,
|
|
705
|
+
phase: 'move',
|
|
706
|
+
});
|
|
707
|
+
};
|
|
708
|
+
|
|
709
|
+
let up = (event: Event) => {
|
|
710
|
+
let pointer = event as PointerEvent;
|
|
711
|
+
if (pointerId === undefined || pointer.pointerId !== pointerId) {
|
|
712
|
+
return;
|
|
713
|
+
}
|
|
714
|
+
release(event.type === 'pointercancel' ? 'cancel' : 'end');
|
|
715
|
+
};
|
|
716
|
+
|
|
717
|
+
// window capture runs before any overlay's document listener, so the
|
|
718
|
+
// Escape that cancels a scrub doesn't also close the dialog around it
|
|
719
|
+
let key = (event: Event) => {
|
|
720
|
+
if (
|
|
721
|
+
(event as KeyboardEvent).key === 'Escape' &&
|
|
722
|
+
pointerId !== undefined
|
|
723
|
+
) {
|
|
724
|
+
event.preventDefault();
|
|
725
|
+
event.stopImmediatePropagation();
|
|
726
|
+
release('cancel');
|
|
727
|
+
}
|
|
728
|
+
};
|
|
729
|
+
|
|
730
|
+
el.addEventListener('pointerdown', down);
|
|
731
|
+
el.addEventListener('pointermove', move);
|
|
732
|
+
el.addEventListener('pointerup', up);
|
|
733
|
+
el.addEventListener('pointercancel', up);
|
|
734
|
+
window.addEventListener('keydown', key, true);
|
|
735
|
+
|
|
736
|
+
return () => {
|
|
737
|
+
release(undefined);
|
|
738
|
+
el.removeEventListener('pointerdown', down);
|
|
739
|
+
el.removeEventListener('pointermove', move);
|
|
740
|
+
el.removeEventListener('pointerup', up);
|
|
741
|
+
el.removeEventListener('pointercancel', up);
|
|
742
|
+
window.removeEventListener('keydown', key, true);
|
|
743
|
+
};
|
|
744
|
+
},
|
|
745
|
+
);
|
|
746
|
+
|
|
747
|
+
/** One frame of a drag inside a 2D surface. */
|
|
748
|
+
export interface SurfaceFrame {
|
|
749
|
+
/** pointer position normalized to the surface box, clamped to 0…1 */
|
|
750
|
+
nx: number;
|
|
751
|
+
ny: number;
|
|
752
|
+
/** unclamped normalized position — a gradient stop dragged off the end
|
|
753
|
+
* still needs to know how far off it went */
|
|
754
|
+
rawX: number;
|
|
755
|
+
rawY: number;
|
|
756
|
+
width: number;
|
|
757
|
+
height: number;
|
|
758
|
+
shift: boolean;
|
|
759
|
+
alt: boolean;
|
|
760
|
+
meta: boolean;
|
|
761
|
+
/** the element the gesture STARTED on, held stable for the whole drag so
|
|
762
|
+
* a multi-handle surface knows which handle it grabbed */
|
|
763
|
+
origin: Element | null;
|
|
764
|
+
phase: 'start' | 'move' | 'end';
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
/**
|
|
768
|
+
* Drag (and click-to-jump) inside a 2D surface, with pointer capture.
|
|
769
|
+
*
|
|
770
|
+
* Installed on the SURFACE, not on the handles: one listener set for any
|
|
771
|
+
* number of handles, click-anywhere-to-jump falls out for free, and a
|
|
772
|
+
* handle dragged past the edge keeps tracking instead of losing the pointer.
|
|
773
|
+
* The handle under the initial press arrives as `origin`. With
|
|
774
|
+
* `handle='<selector>'` only a press inside a matching element starts the
|
|
775
|
+
* gesture; every other press keeps its default, so controls on the surface
|
|
776
|
+
* stay focusable by pointer.
|
|
777
|
+
*/
|
|
778
|
+
export const dragsSurface = modifier(
|
|
779
|
+
(
|
|
780
|
+
el: HTMLElement,
|
|
781
|
+
[onFrame, disabled]: [(frame: SurfaceFrame) => void, boolean | undefined],
|
|
782
|
+
{ handle }: { handle?: string },
|
|
783
|
+
) => {
|
|
784
|
+
let pointerId: number | undefined;
|
|
785
|
+
let origin: Element | null = null;
|
|
786
|
+
|
|
787
|
+
let frameFor = (
|
|
788
|
+
pointer: PointerEvent,
|
|
789
|
+
phase: SurfaceFrame['phase'],
|
|
790
|
+
): SurfaceFrame => {
|
|
791
|
+
let rect = el.getBoundingClientRect();
|
|
792
|
+
let width = Math.max(rect.width, 1);
|
|
793
|
+
let height = Math.max(rect.height, 1);
|
|
794
|
+
let rawX = (pointer.clientX - rect.left) / width;
|
|
795
|
+
let rawY = (pointer.clientY - rect.top) / height;
|
|
796
|
+
return {
|
|
797
|
+
nx: Math.min(1, Math.max(0, rawX)),
|
|
798
|
+
ny: Math.min(1, Math.max(0, rawY)),
|
|
799
|
+
rawX,
|
|
800
|
+
rawY,
|
|
801
|
+
width,
|
|
802
|
+
height,
|
|
803
|
+
shift: pointer.shiftKey,
|
|
804
|
+
alt: pointer.altKey,
|
|
805
|
+
meta: pointer.metaKey,
|
|
806
|
+
origin,
|
|
807
|
+
phase,
|
|
808
|
+
};
|
|
809
|
+
};
|
|
810
|
+
|
|
811
|
+
let release = (pointer: PointerEvent | undefined) => {
|
|
812
|
+
if (pointerId === undefined) {
|
|
813
|
+
return;
|
|
814
|
+
}
|
|
815
|
+
if (el.hasPointerCapture(pointerId)) {
|
|
816
|
+
el.releasePointerCapture(pointerId);
|
|
817
|
+
}
|
|
818
|
+
pointerId = undefined;
|
|
819
|
+
el.removeAttribute('data-dragging');
|
|
820
|
+
if (pointer) {
|
|
821
|
+
onFrame(frameFor(pointer, 'end'));
|
|
822
|
+
}
|
|
823
|
+
origin = null;
|
|
824
|
+
};
|
|
825
|
+
|
|
826
|
+
let down = (event: Event) => {
|
|
827
|
+
let pointer = event as PointerEvent;
|
|
828
|
+
if (disabled || pointer.button !== 0 || pointerId !== undefined) {
|
|
829
|
+
return;
|
|
830
|
+
}
|
|
831
|
+
let target = pointer.target as Element | null;
|
|
832
|
+
// with a handle selector, a press elsewhere is left alone, so controls
|
|
833
|
+
// inside the surface keep their own focus-on-press
|
|
834
|
+
if (handle && !target?.closest?.(handle)) {
|
|
835
|
+
return;
|
|
836
|
+
}
|
|
837
|
+
pointer.preventDefault();
|
|
838
|
+
pointerId = pointer.pointerId;
|
|
839
|
+
origin = target?.closest ? target : null;
|
|
840
|
+
try {
|
|
841
|
+
el.setPointerCapture(pointerId);
|
|
842
|
+
} catch {
|
|
843
|
+
// Only synthetic events reach this: a real pointer is always active
|
|
844
|
+
// during its own pointerdown. A synthetic pointerId has no active
|
|
845
|
+
// pointer, so capture throws, and the gesture stays armed for the
|
|
846
|
+
// pointermove/pointerup the same caller dispatches on this element.
|
|
847
|
+
}
|
|
848
|
+
el.setAttribute('data-dragging', 'true');
|
|
849
|
+
onFrame(frameFor(pointer, 'start'));
|
|
850
|
+
};
|
|
851
|
+
|
|
852
|
+
let move = (event: Event) => {
|
|
853
|
+
let pointer = event as PointerEvent;
|
|
854
|
+
if (pointerId === undefined || pointer.pointerId !== pointerId) {
|
|
855
|
+
return;
|
|
856
|
+
}
|
|
857
|
+
onFrame(frameFor(pointer, 'move'));
|
|
858
|
+
};
|
|
859
|
+
|
|
860
|
+
let up = (event: Event) => {
|
|
861
|
+
let pointer = event as PointerEvent;
|
|
862
|
+
if (pointerId === undefined || pointer.pointerId !== pointerId) {
|
|
863
|
+
return;
|
|
864
|
+
}
|
|
865
|
+
release(pointer);
|
|
866
|
+
};
|
|
867
|
+
|
|
868
|
+
el.addEventListener('pointerdown', down);
|
|
869
|
+
el.addEventListener('pointermove', move);
|
|
870
|
+
el.addEventListener('pointerup', up);
|
|
871
|
+
el.addEventListener('pointercancel', up);
|
|
872
|
+
|
|
873
|
+
return () => {
|
|
874
|
+
release(undefined);
|
|
875
|
+
el.removeEventListener('pointerdown', down);
|
|
876
|
+
el.removeEventListener('pointermove', move);
|
|
877
|
+
el.removeEventListener('pointerup', up);
|
|
878
|
+
el.removeEventListener('pointercancel', up);
|
|
879
|
+
};
|
|
880
|
+
},
|
|
881
|
+
);
|