@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,156 @@
|
|
|
1
|
+
// Pretui — PasswordInput usage page.
|
|
2
|
+
import Component from '@glimmer/component';
|
|
3
|
+
import { tracked } from '@glimmer/tracking';
|
|
4
|
+
import { FreestyleUsage } from './freestyle-usage';
|
|
5
|
+
import { PasswordInput } from './password-input';
|
|
6
|
+
|
|
7
|
+
// ── PasswordInput — typed-input split, fresh page ────────────────────────
|
|
8
|
+
// Type-specific knobs: revealable (the eye toggle on/off), autocomplete
|
|
9
|
+
// (current-password / new-password / off / one-time-code), and strength
|
|
10
|
+
// (the opt-in zxcvbn meter — off by default, and the 839 KB estimator is
|
|
11
|
+
// not fetched until it is switched on and something is typed).
|
|
12
|
+
const AUTOCOMPLETE_OPTIONS = [
|
|
13
|
+
'current-password',
|
|
14
|
+
'new-password',
|
|
15
|
+
'off',
|
|
16
|
+
'one-time-code',
|
|
17
|
+
];
|
|
18
|
+
|
|
19
|
+
// What a signup form would already know about the user. zxcvbn scores
|
|
20
|
+
// against these, which is why 'chris1985' reads as weak here.
|
|
21
|
+
const DEMO_USER_INPUTS = ['Chris', 'Tse', 'chris@example.com', 'Cardstack'];
|
|
22
|
+
|
|
23
|
+
class PasswordInputUsage extends Component {
|
|
24
|
+
autocompleteOptions = AUTOCOMPLETE_OPTIONS;
|
|
25
|
+
@tracked value = 'hunter2';
|
|
26
|
+
@tracked placeholder = 'Password';
|
|
27
|
+
@tracked autocomplete = 'current-password';
|
|
28
|
+
@tracked revealable = true;
|
|
29
|
+
@tracked disabled = false;
|
|
30
|
+
@tracked required = false;
|
|
31
|
+
@tracked strength = true;
|
|
32
|
+
@tracked userInputs: string[] = DEMO_USER_INPUTS;
|
|
33
|
+
setValue = (v: string) => (this.value = v);
|
|
34
|
+
setPlaceholder = (v: string) => (this.placeholder = v);
|
|
35
|
+
setAutocomplete = (v: string) => (this.autocomplete = v);
|
|
36
|
+
setRevealable = (v: boolean) => (this.revealable = v);
|
|
37
|
+
setDisabled = (v: boolean) => (this.disabled = v);
|
|
38
|
+
setRequired = (v: boolean) => (this.required = v);
|
|
39
|
+
setStrength = (v: boolean) => (this.strength = v);
|
|
40
|
+
setUserInputs = (v: string[]) => (this.userInputs = v);
|
|
41
|
+
/** The demo never echoes the value — a password readout is a password in
|
|
42
|
+
* the DOM as text, which is exactly what the component is careful not to
|
|
43
|
+
* do. Length is enough to show that @onInput fired. */
|
|
44
|
+
get readout() {
|
|
45
|
+
return this.value.length;
|
|
46
|
+
}
|
|
47
|
+
get usage() {
|
|
48
|
+
let bits = [`@value='${this.value}'`];
|
|
49
|
+
if (this.autocomplete !== 'current-password')
|
|
50
|
+
bits.push(`@autocomplete='${this.autocomplete}'`);
|
|
51
|
+
if (!this.revealable) bits.push('@revealable={{false}}');
|
|
52
|
+
if (this.strength) bits.push('@strength={{true}}');
|
|
53
|
+
if (this.strength && this.userInputs.length)
|
|
54
|
+
bits.push('@userInputs={{this.userInputs}}');
|
|
55
|
+
bits.push('@onInput={{this.setValue}}');
|
|
56
|
+
return `<PasswordInput ${bits.join(' ')} />`;
|
|
57
|
+
}
|
|
58
|
+
<template>
|
|
59
|
+
<FreestyleUsage
|
|
60
|
+
@name='PasswordInput'
|
|
61
|
+
@description="Password entry riding boxel-ui BoxelInput (@type=password) plus the reveal toggle boxel-ui doesn't ship — the eye button flips the native type to text while pressed state holds (aria-pressed carries it for assistive tech). Strength estimation is opt-in: switch it on and the zxcvbn estimator is fetched on the first settled keystroke, never before. It is advice — nothing here gates submission, and per NIST 800-63B a long passphrase with no symbols beats a short one that has them. Try 'chris1985' with and without userInputs."
|
|
62
|
+
@source={{this.usage}}
|
|
63
|
+
>
|
|
64
|
+
<:example>
|
|
65
|
+
<PasswordInput
|
|
66
|
+
@value={{this.value}}
|
|
67
|
+
@placeholder={{this.placeholder}}
|
|
68
|
+
@autocomplete={{this.autocomplete}}
|
|
69
|
+
@revealable={{this.revealable}}
|
|
70
|
+
@disabled={{this.disabled}}
|
|
71
|
+
@required={{this.required}}
|
|
72
|
+
@strength={{this.strength}}
|
|
73
|
+
@userInputs={{this.userInputs}}
|
|
74
|
+
@onInput={{this.setValue}}
|
|
75
|
+
/>
|
|
76
|
+
<p class='pretui-demo-readout' data-test-password-readout>
|
|
77
|
+
onInput fired — {{this.readout}} characters (never echoed)
|
|
78
|
+
</p>
|
|
79
|
+
</:example>
|
|
80
|
+
<:api as |Args|>
|
|
81
|
+
<Args.Bool
|
|
82
|
+
@name='revealable'
|
|
83
|
+
@defaultValue={{true}}
|
|
84
|
+
@value={{this.revealable}}
|
|
85
|
+
@description='Show the reveal (eye) toggle. Off for high-security contexts.'
|
|
86
|
+
@onInput={{this.setRevealable}}
|
|
87
|
+
/>
|
|
88
|
+
<Args.String
|
|
89
|
+
@name='autocomplete'
|
|
90
|
+
@defaultValue='current-password'
|
|
91
|
+
@value={{this.autocomplete}}
|
|
92
|
+
@options={{this.autocompleteOptions}}
|
|
93
|
+
@description='Autocomplete hint — new-password asks the browser to suggest one; off opts out.'
|
|
94
|
+
@onInput={{this.setAutocomplete}}
|
|
95
|
+
/>
|
|
96
|
+
<Args.String
|
|
97
|
+
@name='value'
|
|
98
|
+
@value={{this.value}}
|
|
99
|
+
@onInput={{this.setValue}}
|
|
100
|
+
/>
|
|
101
|
+
<Args.String
|
|
102
|
+
@name='placeholder'
|
|
103
|
+
@value={{this.placeholder}}
|
|
104
|
+
@onInput={{this.setPlaceholder}}
|
|
105
|
+
/>
|
|
106
|
+
<Args.Bool
|
|
107
|
+
@name='disabled'
|
|
108
|
+
@value={{this.disabled}}
|
|
109
|
+
@onInput={{this.setDisabled}}
|
|
110
|
+
/>
|
|
111
|
+
<Args.Bool
|
|
112
|
+
@name='required'
|
|
113
|
+
@value={{this.required}}
|
|
114
|
+
@onInput={{this.setRequired}}
|
|
115
|
+
/>
|
|
116
|
+
<Args.Bool
|
|
117
|
+
@name='strength'
|
|
118
|
+
@defaultValue={{false}}
|
|
119
|
+
@value={{this.strength}}
|
|
120
|
+
@description='Render the strength meter. Opt-in (Law 9) — with it off the zxcvbn estimator is not on the import graph at all, and with it on the bundle is fetched by the first estimate rather than by render.'
|
|
121
|
+
@onInput={{this.setStrength}}
|
|
122
|
+
/>
|
|
123
|
+
<Args.Array
|
|
124
|
+
@name='userInputs'
|
|
125
|
+
@value={{this.userInputs}}
|
|
126
|
+
@description="What you already know about the user — name, email, handle, company. zxcvbn scores against them, so 'chris1985' stops reading as strong. The single highest-value arg: clear this field and watch the same password score higher."
|
|
127
|
+
@onInput={{this.setUserInputs}}
|
|
128
|
+
/>
|
|
129
|
+
<Args.String
|
|
130
|
+
@name='controlId'
|
|
131
|
+
@description="The input's id for label wiring — supplied by a wrapping Field's yielded controlId."
|
|
132
|
+
/>
|
|
133
|
+
<Args.Action
|
|
134
|
+
@name='onInput'
|
|
135
|
+
@description='Receives the changed value as a string.'
|
|
136
|
+
/>
|
|
137
|
+
<Args.Action
|
|
138
|
+
@name='onStrength'
|
|
139
|
+
@description='Receives each settled estimate. Advice, not a gate — do not wire it to a submit button.'
|
|
140
|
+
/>
|
|
141
|
+
</:api>
|
|
142
|
+
</FreestyleUsage>
|
|
143
|
+
<style scoped>
|
|
144
|
+
.pretui-demo-readout {
|
|
145
|
+
margin: 8px 0 0;
|
|
146
|
+
font-family: var(--font-mono);
|
|
147
|
+
font-size: var(--text-ui-xs, 11px);
|
|
148
|
+
color: var(--muted-foreground);
|
|
149
|
+
}
|
|
150
|
+
</style>
|
|
151
|
+
</template>
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
export const DEMOS_PASSWORD_INPUT: Record<string, unknown> = {
|
|
155
|
+
PasswordInput: PasswordInputUsage,
|
|
156
|
+
};
|
|
@@ -0,0 +1,485 @@
|
|
|
1
|
+
// Pretui — PasswordStrength: the strength indicator, the pure score→label machinery behind it, and the lazily-attached zxcvbn estimator.
|
|
2
|
+
//
|
|
3
|
+
// Three separations, and they are the whole design:
|
|
4
|
+
//
|
|
5
|
+
// 1. **The indicator does not estimate.** `PasswordStrength` takes a score and
|
|
6
|
+
// feedback strings and renders them. It never sees a password, never loads
|
|
7
|
+
// a dictionary, and can be rendered — and tested — with nothing behind it.
|
|
8
|
+
// The estimator stays swappable (a breach check, a server-side score, a
|
|
9
|
+
// different library) without touching the UI.
|
|
10
|
+
// 2. **The estimator is lazy.** `loadPasswordEstimator()` is the only path to
|
|
11
|
+
// `./zxcvbn/index.js`, which is 1.59 MiB / 839 KiB gzipped — see
|
|
12
|
+
// `zxcvbn/README.md`. Nothing in this module's static import graph touches
|
|
13
|
+
// it, so `PasswordInput` renders and works with no meter at all and pays
|
|
14
|
+
// nothing until someone asks for a score. A password field that cannot
|
|
15
|
+
// render until a dictionary downloads is a worse component than one
|
|
16
|
+
// without a meter.
|
|
17
|
+
// 3. **The timer is owned.** `OneShotDebounce` is a plain class with injected
|
|
18
|
+
// schedule/cancel (so it is unit-testable with no real clock), and
|
|
19
|
+
// `estimateWhenIdle` is the `ember-modifier` that owns one instance and
|
|
20
|
+
// cancels it in its destructor. It is one-shot by construction: the
|
|
21
|
+
// scheduled callback clears its own handle and schedules nothing, so there
|
|
22
|
+
// is no path from a fired timer to another timer and it can never hold
|
|
23
|
+
// `await settled()` open.
|
|
24
|
+
//
|
|
25
|
+
// Guidance correctness — the part of this that is not styling:
|
|
26
|
+
//
|
|
27
|
+
// - **Strength is advice, never a gate.** Nothing here disables, blocks, or
|
|
28
|
+
// reports validity. Current NIST 800-63B guidance is explicit that
|
|
29
|
+
// composition rules (must contain a symbol, a digit, a capital) are
|
|
30
|
+
// counterproductive and that length plus not-being-breached is what
|
|
31
|
+
// matters. A meter that refuses a long passphrase for lacking a symbol is
|
|
32
|
+
// actively wrong. zxcvbn agrees in its own words — one of its stock
|
|
33
|
+
// suggestions is "You can create strong passwords without using symbols,
|
|
34
|
+
// numbers, or uppercase letters."
|
|
35
|
+
// - **Never colour alone.** Every score carries a text label and zxcvbn's own
|
|
36
|
+
// `warning` / `suggestions` prose. A coloured bar with no words fails WCAG
|
|
37
|
+
// 1.4.1 and fails the user, who cannot act on a colour. The same reason the
|
|
38
|
+
// bars collapse 0 and 1 to one lit segment: the distinction between them is
|
|
39
|
+
// carried by the label, which is the channel that survives greyscale.
|
|
40
|
+
// - **Announce politely, on settled state.** One `role='status'`
|
|
41
|
+
// `aria-live='polite'` region carrying one composed sentence, updated after
|
|
42
|
+
// the debounce settles — never per keystroke, and silent mid-flight, so a
|
|
43
|
+
// screen-reader user hears a result rather than a stream.
|
|
44
|
+
// - **The password never leaves memory.** It is not echoed into
|
|
45
|
+
// `aria-valuetext`, a `title`, a `data-` attribute, or any test hook; it is
|
|
46
|
+
// not logged; it is not sent anywhere. The vendored bundle contains no
|
|
47
|
+
// network call and none is added here, and the reduced `estimate()` surface
|
|
48
|
+
// cannot return password substrings at all (`zxcvbn/README.md` explains why
|
|
49
|
+
// the raw zxcvbn result is not exported).
|
|
50
|
+
//
|
|
51
|
+
// Better than the inspiration: the meters this was measured against (zxcvbn's
|
|
52
|
+
// own demo, the shadcn / Web Awesome strength-meter recipes) ship a coloured
|
|
53
|
+
// bar and at best a label — the actionable `suggestions` array zxcvbn already
|
|
54
|
+
// computed is dropped on the floor, the meter is wired to a submit gate, and
|
|
55
|
+
// the announcement is per-keystroke or absent. All four are fixed here.
|
|
56
|
+
import Component from '@glimmer/component';
|
|
57
|
+
import { modifier } from 'ember-modifier';
|
|
58
|
+
import { Meter } from './meter';
|
|
59
|
+
|
|
60
|
+
// ── The pure layer (unit-tested without a dictionary or a clock) ─────────
|
|
61
|
+
|
|
62
|
+
/** The number of zxcvbn score bands; scores run 0…SCORE_MAX. */
|
|
63
|
+
export const SCORE_MAX = 4;
|
|
64
|
+
|
|
65
|
+
/** Segments the meter draws. Four bands, five scores — see `barLevel`. */
|
|
66
|
+
const SEGMENTS = 4;
|
|
67
|
+
|
|
68
|
+
/** Equal-height bars: this reads as a level track, not the ascending
|
|
69
|
+
* signal-strength staircase `Meter` draws by default. */
|
|
70
|
+
const FLAT_BARS: number[] = [10, 10, 10, 10];
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Default labels, index = score. Deliberately five rather than four: zxcvbn's
|
|
74
|
+
* 0 and 1 are genuinely different ("too guessable" vs "very guessable") and
|
|
75
|
+
* collapsing them throws away a distinction the user can act on.
|
|
76
|
+
*/
|
|
77
|
+
export const SCORE_LABELS: readonly string[] = Object.freeze([
|
|
78
|
+
'Very weak',
|
|
79
|
+
'Weak',
|
|
80
|
+
'Fair',
|
|
81
|
+
'Strong',
|
|
82
|
+
'Very strong',
|
|
83
|
+
]);
|
|
84
|
+
|
|
85
|
+
/** What an estimator has to give this component. `PasswordEstimate` from the
|
|
86
|
+
* vendored bundle satisfies it structurally, which is what keeps the
|
|
87
|
+
* estimator swappable — and declaring it here rather than importing the
|
|
88
|
+
* bundle's type keeps `./zxcvbn/index.js` off the static import graph
|
|
89
|
+
* outright, instead of relying on `import type` erasure to do it. */
|
|
90
|
+
export interface StrengthReading {
|
|
91
|
+
/** zxcvbn score, 0 (too guessable) … 4 (very unguessable) */
|
|
92
|
+
score: number;
|
|
93
|
+
/** the headline warning, '' when there is none */
|
|
94
|
+
warning?: string;
|
|
95
|
+
/** actionable suggestions, possibly empty */
|
|
96
|
+
suggestions?: string[];
|
|
97
|
+
/** humanised crack time */
|
|
98
|
+
crackTime?: string;
|
|
99
|
+
/** log10 of the estimated guess count — the continuous signal behind the
|
|
100
|
+
* five bands, for anyone who wants to reason about it rather than show it */
|
|
101
|
+
guessesLog10?: number;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Coerce anything to a whole score in 0…4. Every consumer of a score in this
|
|
106
|
+
* file goes through this, so a score reaches an attribute or a CSS lookup
|
|
107
|
+
* only after clamping and no caller value is ever interpolated anywhere.
|
|
108
|
+
*/
|
|
109
|
+
export function clampScore(value: unknown): number {
|
|
110
|
+
let n = Number(value);
|
|
111
|
+
if (!Number.isFinite(n)) {
|
|
112
|
+
return 0;
|
|
113
|
+
}
|
|
114
|
+
return Math.min(SCORE_MAX, Math.max(0, Math.round(n)));
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/** The text label for a score. Never returns '' — colour is never alone. */
|
|
118
|
+
export function strengthLabel(
|
|
119
|
+
value: unknown,
|
|
120
|
+
labels: readonly string[] = SCORE_LABELS,
|
|
121
|
+
): string {
|
|
122
|
+
let i = clampScore(value);
|
|
123
|
+
return labels[i] ?? SCORE_LABELS[i] ?? '';
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Lit segments for a score. Score 0 lights one rather than none, because an
|
|
128
|
+
* empty track is indistinguishable from "not estimated yet" — the difference
|
|
129
|
+
* between 0 and 1 is carried by the label instead.
|
|
130
|
+
*/
|
|
131
|
+
export function barLevel(value: unknown): number {
|
|
132
|
+
return Math.max(1, clampScore(value));
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* The single sentence the live region announces. Composed rather than left as
|
|
137
|
+
* several live nodes, because several nodes changing at once is what turns a
|
|
138
|
+
* screen reader into a stream. `undefined` in means '' out — which is what an
|
|
139
|
+
* unestimated or in-flight field wants to announce.
|
|
140
|
+
*/
|
|
141
|
+
export function strengthAnnouncement(
|
|
142
|
+
reading: StrengthReading | undefined,
|
|
143
|
+
labels: readonly string[] = SCORE_LABELS,
|
|
144
|
+
prefix = 'Password strength',
|
|
145
|
+
): string {
|
|
146
|
+
if (!reading) {
|
|
147
|
+
return '';
|
|
148
|
+
}
|
|
149
|
+
let parts = [prefix + ': ' + strengthLabel(reading.score, labels) + '.'];
|
|
150
|
+
if (reading.warning) {
|
|
151
|
+
parts.push(reading.warning);
|
|
152
|
+
}
|
|
153
|
+
for (let suggestion of reading.suggestions ?? []) {
|
|
154
|
+
parts.push(suggestion);
|
|
155
|
+
}
|
|
156
|
+
return parts.join(' ');
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// ── The timer (owned, one-shot, self-cancelling) ─────────────────────────
|
|
160
|
+
|
|
161
|
+
/** The scheduling surface a `OneShotDebounce` needs. Injected so a test can
|
|
162
|
+
* drive it with a fake clock and create no real timer at all. */
|
|
163
|
+
export interface TimerHost {
|
|
164
|
+
schedule(callback: () => void, ms: number): unknown;
|
|
165
|
+
cancel(handle: unknown): void;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/** The real one. `setTimeout` is legal here only because the modifier below
|
|
169
|
+
* owns the instance and cancels it in its destructor. */
|
|
170
|
+
export const REAL_TIMERS: TimerHost = {
|
|
171
|
+
schedule: (callback: () => void, ms: number) =>
|
|
172
|
+
setTimeout(callback, ms) as unknown,
|
|
173
|
+
cancel: (handle: unknown) =>
|
|
174
|
+
clearTimeout(handle as ReturnType<typeof setTimeout>),
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* A debounce holding at most one pending call, which can never re-arm itself:
|
|
179
|
+
* the scheduled callback clears its own handle and schedules nothing, so
|
|
180
|
+
* there is no path from a fired timer to another timer. `arm()` cancels any
|
|
181
|
+
* pending call first and `cancel()` is idempotent, which is what makes it
|
|
182
|
+
* safe to call from a modifier destructor.
|
|
183
|
+
*/
|
|
184
|
+
export class OneShotDebounce {
|
|
185
|
+
private handle: unknown = undefined;
|
|
186
|
+
private timers: TimerHost;
|
|
187
|
+
|
|
188
|
+
constructor(timers: TimerHost = REAL_TIMERS) {
|
|
189
|
+
this.timers = timers;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/** True while a call is pending. */
|
|
193
|
+
get pending(): boolean {
|
|
194
|
+
return this.handle !== undefined;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/** Cancel anything pending, then schedule exactly one call. */
|
|
198
|
+
arm(callback: () => void, ms: number): void {
|
|
199
|
+
this.cancel();
|
|
200
|
+
this.handle = this.timers.schedule(() => {
|
|
201
|
+
this.handle = undefined;
|
|
202
|
+
callback();
|
|
203
|
+
}, Math.max(0, ms));
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/** Cancel anything pending. Safe to call any number of times. */
|
|
207
|
+
cancel(): void {
|
|
208
|
+
if (this.handle !== undefined) {
|
|
209
|
+
this.timers.cancel(this.handle);
|
|
210
|
+
this.handle = undefined;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Runs `run(value)` once `value` has stopped changing for `delay` ms.
|
|
217
|
+
*
|
|
218
|
+
* The function form of `modifier` runs its destructor before re-running on an
|
|
219
|
+
* arg change, so each new value cancels the previous pending call and arms
|
|
220
|
+
* exactly one more; teardown cancels the last. Nothing survives the element.
|
|
221
|
+
*
|
|
222
|
+
* `run` arrives as a positional arg rather than through a captured closure so
|
|
223
|
+
* that identity churn in the caller cannot retrigger this modifier and re-arm
|
|
224
|
+
* the timer every render.
|
|
225
|
+
*
|
|
226
|
+
* The optional fourth positional is a **change key**: anything else that
|
|
227
|
+
* should force a re-estimate, expressed as a primitive. It must be a value,
|
|
228
|
+
* not an object — an inline `@userInputs={{array 'a' 'b'}}` mints a fresh
|
|
229
|
+
* array every render, so passing the array itself would re-arm the timer
|
|
230
|
+
* forever, whereas its joined string compares equal and does not.
|
|
231
|
+
*/
|
|
232
|
+
export const estimateWhenIdle = modifier(
|
|
233
|
+
(
|
|
234
|
+
_el: HTMLElement,
|
|
235
|
+
[value, delay, run, _key]: [
|
|
236
|
+
string,
|
|
237
|
+
number,
|
|
238
|
+
(value: string) => void,
|
|
239
|
+
(string | number | undefined)?,
|
|
240
|
+
],
|
|
241
|
+
) => {
|
|
242
|
+
let debounce = new OneShotDebounce();
|
|
243
|
+
debounce.arm(() => run(value), delay);
|
|
244
|
+
return () => debounce.cancel();
|
|
245
|
+
},
|
|
246
|
+
);
|
|
247
|
+
|
|
248
|
+
// ── The lazy estimator ───────────────────────────────────────────────────
|
|
249
|
+
|
|
250
|
+
type EstimateFn = (
|
|
251
|
+
password: string,
|
|
252
|
+
userInputs?: (string | number)[],
|
|
253
|
+
) => StrengthReading;
|
|
254
|
+
|
|
255
|
+
let estimatorPromise: Promise<EstimateFn> | undefined;
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Resolve the zxcvbn estimator, fetching the vendored bundle on first call
|
|
259
|
+
* and reusing the same promise for every later one. This dynamic `import()`
|
|
260
|
+
* is the only reference to `./zxcvbn/index.js` in the kit — keep it that way
|
|
261
|
+
* or the bundle joins the static graph and the laziness evaporates.
|
|
262
|
+
*
|
|
263
|
+
* Estimation is entirely local. The bundle contains no network call and none
|
|
264
|
+
* is added here: a password must never be sent anywhere.
|
|
265
|
+
*/
|
|
266
|
+
export function loadPasswordEstimator(): Promise<EstimateFn> {
|
|
267
|
+
if (!estimatorPromise) {
|
|
268
|
+
estimatorPromise = import('../zxcvbn/index.js').then((mod) => mod.estimate);
|
|
269
|
+
}
|
|
270
|
+
return estimatorPromise;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/** True once the estimator has been requested in this session — exposed so a
|
|
274
|
+
* demo (or a test) can show that nothing loads until it is asked for. */
|
|
275
|
+
export function passwordEstimatorRequested(): boolean {
|
|
276
|
+
return estimatorPromise !== undefined;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
// ── PasswordStrength ─────────────────────────────────────────────────────
|
|
280
|
+
|
|
281
|
+
export interface PasswordStrengthSignature {
|
|
282
|
+
Args: {
|
|
283
|
+
/** zxcvbn score 0…4. Clamped; anything unusable reads as 0. Leave it
|
|
284
|
+
* undefined for "not estimated yet" — the meter says so rather than
|
|
285
|
+
* lying at the bottom of the scale. */
|
|
286
|
+
score?: number;
|
|
287
|
+
/** the estimator's headline warning, if it produced one */
|
|
288
|
+
warning?: string;
|
|
289
|
+
/** the estimator's actionable suggestions, if it produced any */
|
|
290
|
+
suggestions?: string[];
|
|
291
|
+
/** humanised crack time, shown as a quiet aside when supplied */
|
|
292
|
+
crackTime?: string;
|
|
293
|
+
/** replace the five default labels (localisation, or a house voice) */
|
|
294
|
+
labels?: readonly string[];
|
|
295
|
+
/** what the live region says before the label */
|
|
296
|
+
announcePrefix?: string;
|
|
297
|
+
/** true while an estimate is in flight — the meter greys and the live
|
|
298
|
+
* region stays silent, so nothing is announced mid-flight */
|
|
299
|
+
busy?: boolean;
|
|
300
|
+
/** render nothing until there is something to say (default true); pass
|
|
301
|
+
* false to reserve the row's height from first paint */
|
|
302
|
+
hideWhenEmpty?: boolean;
|
|
303
|
+
};
|
|
304
|
+
Element: HTMLDivElement;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
export class PasswordStrength extends Component<PasswordStrengthSignature> {
|
|
308
|
+
get scored(): boolean {
|
|
309
|
+
return this.args.score !== undefined && this.args.score !== null;
|
|
310
|
+
}
|
|
311
|
+
get score(): number {
|
|
312
|
+
return clampScore(this.args.score);
|
|
313
|
+
}
|
|
314
|
+
get labels(): readonly string[] {
|
|
315
|
+
return this.args.labels ?? SCORE_LABELS;
|
|
316
|
+
}
|
|
317
|
+
get label(): string {
|
|
318
|
+
return this.scored ? strengthLabel(this.score, this.labels) : '—';
|
|
319
|
+
}
|
|
320
|
+
get level(): number {
|
|
321
|
+
return this.scored ? barLevel(this.score) : 0;
|
|
322
|
+
}
|
|
323
|
+
get suggestions(): string[] {
|
|
324
|
+
return this.args.suggestions ?? [];
|
|
325
|
+
}
|
|
326
|
+
get hidden(): boolean {
|
|
327
|
+
return (this.args.hideWhenEmpty ?? true) && !this.scored && !this.args.busy;
|
|
328
|
+
}
|
|
329
|
+
/** Silent while busy or unscored: a live region carries settled results
|
|
330
|
+
* only. */
|
|
331
|
+
get announcement(): string {
|
|
332
|
+
if (this.args.busy || !this.scored) {
|
|
333
|
+
return '';
|
|
334
|
+
}
|
|
335
|
+
return strengthAnnouncement(
|
|
336
|
+
{
|
|
337
|
+
score: this.score,
|
|
338
|
+
warning: this.args.warning,
|
|
339
|
+
suggestions: this.suggestions,
|
|
340
|
+
},
|
|
341
|
+
this.labels,
|
|
342
|
+
this.args.announcePrefix ?? 'Password strength',
|
|
343
|
+
);
|
|
344
|
+
}
|
|
345
|
+
<template>
|
|
346
|
+
{{#unless this.hidden}}
|
|
347
|
+
<div
|
|
348
|
+
class='pretui-pwstrength'
|
|
349
|
+
data-score={{this.score}}
|
|
350
|
+
data-scored={{if this.scored 'true'}}
|
|
351
|
+
data-busy={{if @busy 'true'}}
|
|
352
|
+
data-test-pretui-password-strength
|
|
353
|
+
...attributes
|
|
354
|
+
>
|
|
355
|
+
{{! The visible layer is aria-hidden and mirrored sr-only below, so a
|
|
356
|
+
screen reader hears one composed sentence rather than a meter, a
|
|
357
|
+
paragraph and a list all announcing separately. }}
|
|
358
|
+
<div class='pretui-pwstrength-row' aria-hidden='true'>
|
|
359
|
+
<Meter
|
|
360
|
+
class='pretui-pwstrength-meter'
|
|
361
|
+
@level={{this.level}}
|
|
362
|
+
@segments={{SEGMENTS}}
|
|
363
|
+
@label={{this.label}}
|
|
364
|
+
@heights={{FLAT_BARS}}
|
|
365
|
+
/>
|
|
366
|
+
{{#if @crackTime}}
|
|
367
|
+
<span class='pretui-pwstrength-time'>{{@crackTime}} to crack</span>
|
|
368
|
+
{{/if}}
|
|
369
|
+
</div>
|
|
370
|
+
{{#if @warning}}
|
|
371
|
+
<p
|
|
372
|
+
class='pretui-pwstrength-warning'
|
|
373
|
+
aria-hidden='true'
|
|
374
|
+
>{{@warning}}</p>
|
|
375
|
+
{{/if}}
|
|
376
|
+
{{#if this.suggestions}}
|
|
377
|
+
<ul class='pretui-pwstrength-tips' aria-hidden='true'>
|
|
378
|
+
{{#each this.suggestions as |suggestion|}}
|
|
379
|
+
<li>{{suggestion}}</li>
|
|
380
|
+
{{/each}}
|
|
381
|
+
</ul>
|
|
382
|
+
{{/if}}
|
|
383
|
+
<p
|
|
384
|
+
class='pretui-pwstrength-sr'
|
|
385
|
+
role='status'
|
|
386
|
+
aria-live='polite'
|
|
387
|
+
>{{this.announcement}}</p>
|
|
388
|
+
</div>
|
|
389
|
+
{{/unless}}
|
|
390
|
+
<style scoped>
|
|
391
|
+
/* above Meter's layer, so these win by layer order, not file order */
|
|
392
|
+
@layer PretComponent, PretComposite;
|
|
393
|
+
@layer PretComposite {
|
|
394
|
+
.pretui-pwstrength {
|
|
395
|
+
display: grid;
|
|
396
|
+
gap: var(--space-2, 5px);
|
|
397
|
+
width: 100%;
|
|
398
|
+
font-size: var(--text-ui-sm, 11.5px);
|
|
399
|
+
letter-spacing: var(--track-ui, 0.01em);
|
|
400
|
+
/* Score → hue lives entirely in CSS, keyed off a clamped numeric
|
|
401
|
+
attribute: no string is ever interpolated into a style. The bars
|
|
402
|
+
inherit `--pretui-meter-hue` from here, so `Meter` re-dresses
|
|
403
|
+
itself through the token channel and nothing reaches into its
|
|
404
|
+
markup. Each band is a documented knob, so a theme re-tints
|
|
405
|
+
without a fork. */
|
|
406
|
+
--pretui-meter-hue: var(
|
|
407
|
+
--pretui-password-strength-unscored,
|
|
408
|
+
var(--line-strong, var(--boxel-400))
|
|
409
|
+
);
|
|
410
|
+
}
|
|
411
|
+
.pretui-pwstrength[data-scored][data-score='0'],
|
|
412
|
+
.pretui-pwstrength[data-scored][data-score='1'] {
|
|
413
|
+
--pretui-meter-hue: var(
|
|
414
|
+
--pretui-password-strength-weak,
|
|
415
|
+
var(--destructive)
|
|
416
|
+
);
|
|
417
|
+
}
|
|
418
|
+
.pretui-pwstrength[data-scored][data-score='2'] {
|
|
419
|
+
--pretui-meter-hue: var(
|
|
420
|
+
--pretui-password-strength-fair,
|
|
421
|
+
var(--warning, var(--boxel-warning))
|
|
422
|
+
);
|
|
423
|
+
}
|
|
424
|
+
.pretui-pwstrength[data-scored][data-score='3'] {
|
|
425
|
+
--pretui-meter-hue: var(
|
|
426
|
+
--pretui-password-strength-strong,
|
|
427
|
+
color-mix(
|
|
428
|
+
in oklch,
|
|
429
|
+
var(--success, var(--boxel-success)) 70%,
|
|
430
|
+
var(--warning, var(--boxel-warning))
|
|
431
|
+
)
|
|
432
|
+
);
|
|
433
|
+
}
|
|
434
|
+
.pretui-pwstrength[data-scored][data-score='4'] {
|
|
435
|
+
--pretui-meter-hue: var(
|
|
436
|
+
--pretui-password-strength-best,
|
|
437
|
+
var(--success, var(--boxel-success))
|
|
438
|
+
);
|
|
439
|
+
}
|
|
440
|
+
.pretui-pwstrength[data-busy] {
|
|
441
|
+
opacity: 0.55;
|
|
442
|
+
}
|
|
443
|
+
.pretui-pwstrength-row {
|
|
444
|
+
display: flex;
|
|
445
|
+
align-items: center;
|
|
446
|
+
justify-content: space-between;
|
|
447
|
+
gap: var(--space-3, 8px);
|
|
448
|
+
}
|
|
449
|
+
/* Law 8: judged in a still frame — the bars carry a label and the
|
|
450
|
+
label carries weight, so the treatment survives greyscale. */
|
|
451
|
+
.pretui-pwstrength-meter {
|
|
452
|
+
font-weight: 500;
|
|
453
|
+
}
|
|
454
|
+
.pretui-pwstrength-time {
|
|
455
|
+
color: var(--ink-3, var(--boxel-400));
|
|
456
|
+
font-variant-numeric: tabular-nums;
|
|
457
|
+
}
|
|
458
|
+
.pretui-pwstrength-warning {
|
|
459
|
+
margin: 0;
|
|
460
|
+
color: var(--foreground);
|
|
461
|
+
}
|
|
462
|
+
.pretui-pwstrength-tips {
|
|
463
|
+
margin: 0;
|
|
464
|
+
padding-inline-start: var(--space-5, 15px);
|
|
465
|
+
display: grid;
|
|
466
|
+
gap: 2px;
|
|
467
|
+
color: var(--muted-foreground);
|
|
468
|
+
}
|
|
469
|
+
/* sr-only: the composed announcement, and the only thing a screen
|
|
470
|
+
reader reads in this component. */
|
|
471
|
+
.pretui-pwstrength-sr {
|
|
472
|
+
position: absolute;
|
|
473
|
+
width: 1px;
|
|
474
|
+
height: 1px;
|
|
475
|
+
margin: -1px;
|
|
476
|
+
padding: 0;
|
|
477
|
+
overflow: hidden;
|
|
478
|
+
clip-path: inset(50%);
|
|
479
|
+
white-space: nowrap;
|
|
480
|
+
border: 0;
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
</style>
|
|
484
|
+
</template>
|
|
485
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
## What it is
|
|
2
|
+
|
|
3
|
+
A password strength meter: a five-step score with a label, the estimator's warning and suggestions, and an optional crack-time aside.
|
|
4
|
+
|
|
5
|
+
## The contract
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
@score? — zxcvbn score 0…4. Clamped; anything unusable reads as 0. Leave it
|
|
9
|
+
UNDEFINED for "not estimated yet"
|
|
10
|
+
@warning? — the estimator's headline warning, if it produced one
|
|
11
|
+
@suggestions? — the estimator's actionable suggestions, if it produced any
|
|
12
|
+
@crackTime? — humanised crack time, shown as a quiet aside when supplied
|
|
13
|
+
@labels? — replace the five default labels, for localisation or a house voice
|
|
14
|
+
@announcePrefix? — what the live region says before the label
|
|
15
|
+
@busy? — true while an estimate is in flight
|
|
16
|
+
@hideWhenEmpty? — render nothing until there is something to say. Default true;
|
|
17
|
+
pass false to reserve the row's height from first paint
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**Undefined and 0 are different, and the meter says so.** "Not estimated yet" reads as exactly that rather than lying at the bottom of the scale — which is what a meter defaulting to zero tells someone who has typed nothing.
|
|
21
|
+
|
|
22
|
+
**`@busy` greys the meter and silences the live region**, so nothing is announced mid-flight. A meter that announces every intermediate estimate as the estimator catches up is unusable.
|
|
23
|
+
|
|
24
|
+
**It does not estimate.** The score, warning and suggestions all come from the caller's estimator — this component displays a judgement, it does not make one.
|
|
25
|
+
|
|
26
|
+
**`@hideWhenEmpty={{false}}` reserves the height**, which is the right choice when the meter sits in a form that should not jump as it appears.
|
|
27
|
+
|
|
28
|
+
## Prior art
|
|
29
|
+
|
|
30
|
+
The zxcvbn-backed meters in sign-up forms.
|
|
31
|
+
|
|
32
|
+
Where Pretui is better: the undefined/zero distinction, the busy silence, and suggestions being first-class rather than a tooltip. Most meters are a coloured bar and nothing else, which tells someone their password is bad without telling them how to fix it.
|
|
33
|
+
|
|
34
|
+
Where it is thinner: no estimator bundled — deliberately, since zxcvbn is large — no policy enforcement, and no per-rule checklist.
|
|
35
|
+
|
|
36
|
+
## Accessibility
|
|
37
|
+
|
|
38
|
+
- **The strength is a word, not a colour.** The label is what carries the judgement; the bar is the visual shorthand.
|
|
39
|
+
- **The live region announces on change with `@announcePrefix`**, so a reader typing is told when the assessment moves rather than having to go looking.
|
|
40
|
+
- **`@busy` keeping the region silent is the detail that makes the live region tolerable** — announcing every intermediate state would make it the loudest thing on the page.
|
|
41
|
+
- **Suggestions are text, and they are the useful part.** A meter that says "weak" and nothing else is an obstacle; one that says what to change is help.
|
|
42
|
+
- **Colour reinforces the label** and never replaces it, so the meter works in greyscale.
|
|
43
|
+
|
|
44
|
+
## Theming
|
|
45
|
+
|
|
46
|
+
The five steps take the kit's semantic hues, and the meter's geometry the shared control tokens.
|
|
47
|
+
|
|
48
|
+
Using the semantic scale rather than a bespoke red-to-green means the theme's danger and success colors govern the ends — and a theme that has chosen accessible versions of those gets an accessible meter for free.
|
|
49
|
+
|
|
50
|
+
The styles sit in `@layer PretComposite`, above Meter's `PretComponent` layer, so what this component sets on Meter wins by layer order. A caller's unlayered CSS overrides both without a more specific selector.
|