@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,1170 @@
|
|
|
1
|
+
// Pretui — RecordDetail: a record page where each field edits in place and a footer saves the batch.
|
|
2
|
+
import Component from '@glimmer/component';
|
|
3
|
+
import { tracked } from '@glimmer/tracking';
|
|
4
|
+
import { on } from '@ember/modifier';
|
|
5
|
+
import { hash } from '@ember/helper';
|
|
6
|
+
import { guidFor } from '@ember/object/internals';
|
|
7
|
+
import { IconButton } from './icon-button';
|
|
8
|
+
import { Label } from './label';
|
|
9
|
+
import { Tooltip } from './tooltip';
|
|
10
|
+
import { Alert } from './alert';
|
|
11
|
+
import { iconFor } from '../icon-registry';
|
|
12
|
+
import { focusWhen, listen } from '../focus';
|
|
13
|
+
import { isBlocking, issuesForPath, sortIssues } from '../internal/forms-core';
|
|
14
|
+
import type { FormIssue } from '../internal/forms-core';
|
|
15
|
+
import { CompoundField } from './compound-field';
|
|
16
|
+
import { FormFooter } from './form-footer';
|
|
17
|
+
import { displayText, plural, severityOf, showTrigger } from '../internal/forms-record';
|
|
18
|
+
import type { ContextualComponent, RecordBatchApi, RecordEditContext, RecordLayout } from '../internal/forms-record';
|
|
19
|
+
|
|
20
|
+
// ── RecordDetail's Field ─────────────────────────────────────────────────
|
|
21
|
+
//
|
|
22
|
+
// Ported from SLDS `RecordDetailField` + `FormElement` + `FormElementStatic`
|
|
23
|
+
// (`slds-form-element_edit`, `__static`, `__undo`, `slds-is-editing`,
|
|
24
|
+
// `slds-is-edited`).
|
|
25
|
+
//
|
|
26
|
+
// BETTER THAN THE INSPIRATION:
|
|
27
|
+
// • THE STATIC VALUE IS THE BUTTON. SLDS renders the value in a plain
|
|
28
|
+
// <div class="slds-form-element__static"> and hangs a separate pencil
|
|
29
|
+
// ButtonIcon beside it, so clicking the value does nothing and the field
|
|
30
|
+
// costs two tab stops. Ours makes the static row a real <button> with
|
|
31
|
+
// `aria-labelledby="{label} {value}"` — the screen reader hears the
|
|
32
|
+
// field name AND its current value, Enter/Space opens the editor, and a
|
|
33
|
+
// field is one tab stop.
|
|
34
|
+
// • ESCAPE EXISTS. SLDS ships no cancel path whatsoever. Escape here
|
|
35
|
+
// closes the editor, discards only the in-flight keystrokes, leaves this
|
|
36
|
+
// field's already-committed edit and every other field's untouched, and
|
|
37
|
+
// returns focus to the static trigger.
|
|
38
|
+
// • A POINTER CANCEL PATH. Keyboard users get Escape; SLDS gives pointer
|
|
39
|
+
// users nothing. The editor row carries a discard control whose
|
|
40
|
+
// mousedown is prevented, so it cannot be commit-on-blur'd out from
|
|
41
|
+
// under the click.
|
|
42
|
+
// • `slds-is-edited` is a hardcoded `$color-background-highlight` yellow
|
|
43
|
+
// with no token chain and no story for theming; its undo
|
|
44
|
+
// button is positioned with a negative magic number
|
|
45
|
+
// (`top: -$square-icon-utility-medium`). Ours tints with `color-mix()`
|
|
46
|
+
// off the theme's own `--warning` and puts undo in flow.
|
|
47
|
+
// • The required marker: SLDS's only required signal is
|
|
48
|
+
// `<abbr class="slds-required" aria-hidden="true">*</abbr>` — invisible
|
|
49
|
+
// to assistive tech. Ours keeps the abbr for sighted parity and adds an
|
|
50
|
+
// sr-only "(required)".
|
|
51
|
+
// • Responsive: SLDS's horizontal form pins a fixed label column that
|
|
52
|
+
// never collapses. Ours folds label-over-value on a real container
|
|
53
|
+
// query, measured on the FIELD.
|
|
54
|
+
//
|
|
55
|
+
// DROPPED FROM UPSTREAM (and why): `avatar` / `link` / `timestamp` value
|
|
56
|
+
// props — an avatar or a link is a rendering decision, so it belongs in the
|
|
57
|
+
// `<:display>` block (Law 7); the `column` (`slds-form-element_N-col`)
|
|
58
|
+
// modifier classes — grid auto-placement plus `@span` covers the same ground
|
|
59
|
+
// without a class per count; the `isDeprecated` legacy `slds-form_stacked`
|
|
60
|
+
// fork; and the help Tooltip's hand-positioned pixel offsets — the kit's
|
|
61
|
+
// Tooltip does its own positioning.
|
|
62
|
+
export interface RecordFieldSignature {
|
|
63
|
+
Args: {
|
|
64
|
+
/** Supplied by RecordDetail through the yielded contextual component.
|
|
65
|
+
* Never pass this by hand. */
|
|
66
|
+
api?: RecordBatchApi;
|
|
67
|
+
/** BXL label path. This is the string an issue's `targetPath` must
|
|
68
|
+
* EQUAL — quoted exactly as the guide rule wrote it. Required. */
|
|
69
|
+
path: string;
|
|
70
|
+
/** Human label for the field. Required. */
|
|
71
|
+
label: string;
|
|
72
|
+
/** The SAVED value. RecordDetail holds the pending edit separately, so
|
|
73
|
+
* this arg stays whatever the record currently has — which is the only
|
|
74
|
+
* reason undo has somewhere to go back to. */
|
|
75
|
+
value?: unknown;
|
|
76
|
+
/** Marks the field required: an asterisk plus an sr-only "(required)".
|
|
77
|
+
* Purely presentational — requiredness is enforced by a guide rule,
|
|
78
|
+
* never by this component. */
|
|
79
|
+
required?: boolean;
|
|
80
|
+
/** Help text revealed from a small info control beside the label. */
|
|
81
|
+
help?: string;
|
|
82
|
+
/** Suppress the pencil for this field only. */
|
|
83
|
+
readOnly?: boolean;
|
|
84
|
+
/** Render the static value as running text (SLDS `slds-text-longform`)
|
|
85
|
+
* instead of one clamped line — for textarea-shaped fields. */
|
|
86
|
+
longform?: boolean;
|
|
87
|
+
/** What to show when the value is empty. @default the record's '—' */
|
|
88
|
+
placeholder?: string;
|
|
89
|
+
/** 'full' makes the field span every column of the record grid.
|
|
90
|
+
* @default 'auto' */
|
|
91
|
+
span?: 'auto' | 'full';
|
|
92
|
+
};
|
|
93
|
+
Blocks: {
|
|
94
|
+
/** Custom static rendering — the avatar, link, Chip or formatted number
|
|
95
|
+
* SLDS spent three props on. Yields the currently shown value. */
|
|
96
|
+
display: [value: unknown];
|
|
97
|
+
/** The editor control. Omit it and the field is read-only: no pencil,
|
|
98
|
+
* no button — honest about being uneditable rather than flagged so. */
|
|
99
|
+
editor: [RecordEditContext];
|
|
100
|
+
};
|
|
101
|
+
Element: HTMLDivElement;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/** Stand-in so a Field rendered outside a RecordDetail degrades to a
|
|
105
|
+
* read-only display instead of throwing. */
|
|
106
|
+
const NO_BATCH: RecordBatchApi = {
|
|
107
|
+
readOnly: true,
|
|
108
|
+
layout: 'stacked',
|
|
109
|
+
placeholder: '—',
|
|
110
|
+
editingPath: null,
|
|
111
|
+
lastClosed: null,
|
|
112
|
+
scratch: undefined,
|
|
113
|
+
issuesFor: () => [],
|
|
114
|
+
isDirty: () => false,
|
|
115
|
+
committed: (_path: string, saved: unknown) => saved,
|
|
116
|
+
open: () => undefined,
|
|
117
|
+
setScratch: () => undefined,
|
|
118
|
+
close: () => undefined,
|
|
119
|
+
discard: () => undefined,
|
|
120
|
+
undo: () => undefined,
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
class RecordField extends Component<RecordFieldSignature> {
|
|
124
|
+
labelId = `${guidFor(this)}-lbl`;
|
|
125
|
+
valueId = `${guidFor(this)}-val`;
|
|
126
|
+
controlId = `${guidFor(this)}-ctl`;
|
|
127
|
+
hintId = `${guidFor(this)}-hint`;
|
|
128
|
+
msgId = `${guidFor(this)}-msg`;
|
|
129
|
+
|
|
130
|
+
get api(): RecordBatchApi {
|
|
131
|
+
return this.args.api ?? NO_BATCH;
|
|
132
|
+
}
|
|
133
|
+
get layout(): RecordLayout {
|
|
134
|
+
return this.api.layout;
|
|
135
|
+
}
|
|
136
|
+
get placeholder(): string {
|
|
137
|
+
return this.args.placeholder ?? this.api.placeholder;
|
|
138
|
+
}
|
|
139
|
+
get editable(): boolean {
|
|
140
|
+
return !this.args.readOnly && !this.api.readOnly;
|
|
141
|
+
}
|
|
142
|
+
get isEditing(): boolean {
|
|
143
|
+
return this.api.editingPath === this.args.path;
|
|
144
|
+
}
|
|
145
|
+
get isDirty(): boolean {
|
|
146
|
+
return this.api.isDirty(this.args.path);
|
|
147
|
+
}
|
|
148
|
+
/** True on the render where this field's editor closed by an EXPLICIT
|
|
149
|
+
* gesture (Enter or Escape) — the one render where focus travels back to
|
|
150
|
+
* the static trigger. A blur-out never sets it: the user is already on
|
|
151
|
+
* their way somewhere else and must not be yanked back. */
|
|
152
|
+
get shouldRestoreFocus(): boolean {
|
|
153
|
+
return this.api.lastClosed === this.args.path;
|
|
154
|
+
}
|
|
155
|
+
get issues(): FormIssue[] {
|
|
156
|
+
return this.api.issuesFor(this.args.path);
|
|
157
|
+
}
|
|
158
|
+
get invalid(): boolean {
|
|
159
|
+
return this.issues.some(isBlocking);
|
|
160
|
+
}
|
|
161
|
+
get describedBy(): string {
|
|
162
|
+
return this.issues.length ? `${this.hintId} ${this.msgId}` : this.hintId;
|
|
163
|
+
}
|
|
164
|
+
get labelledBy(): string {
|
|
165
|
+
return `${this.labelId} ${this.valueId}`;
|
|
166
|
+
}
|
|
167
|
+
/** What the STATIC row shows: the pending edit when there is one,
|
|
168
|
+
* otherwise what the record holds. */
|
|
169
|
+
get shownValue(): unknown {
|
|
170
|
+
return this.api.committed(this.args.path, this.args.value);
|
|
171
|
+
}
|
|
172
|
+
get shownText(): string {
|
|
173
|
+
return displayText(this.shownValue, this.placeholder);
|
|
174
|
+
}
|
|
175
|
+
get isEmpty(): boolean {
|
|
176
|
+
return this.shownText === this.placeholder;
|
|
177
|
+
}
|
|
178
|
+
/** The in-flight value while this field's editor is open. */
|
|
179
|
+
get scratchValue(): unknown {
|
|
180
|
+
return this.isEditing ? this.api.scratch : this.shownValue;
|
|
181
|
+
}
|
|
182
|
+
get undoLabel(): string {
|
|
183
|
+
return `Undo edit to ${this.args.label}`;
|
|
184
|
+
}
|
|
185
|
+
get discardLabel(): string {
|
|
186
|
+
return `Discard edit to ${this.args.label}`;
|
|
187
|
+
}
|
|
188
|
+
get helpLabel(): string {
|
|
189
|
+
return `Help for ${this.args.label}`;
|
|
190
|
+
}
|
|
191
|
+
// a field with no <:editor> block renders no trigger, so it is read-only too
|
|
192
|
+
hintText = (hasEditor: boolean): string => {
|
|
193
|
+
let base =
|
|
194
|
+
this.editable && hasEditor
|
|
195
|
+
? 'Editable field. Press Enter to edit.'
|
|
196
|
+
: 'Read only.';
|
|
197
|
+
return this.isDirty ? `${base} Unsaved change.` : base;
|
|
198
|
+
};
|
|
199
|
+
get state(): string {
|
|
200
|
+
if (this.isEditing) {
|
|
201
|
+
return 'editing';
|
|
202
|
+
}
|
|
203
|
+
return this.isDirty ? 'edited' : 'rest';
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
openEditor = (_event: Event) => {
|
|
207
|
+
this.api.open(this.args.path, this.args.value);
|
|
208
|
+
};
|
|
209
|
+
undo = (_event: Event) => {
|
|
210
|
+
this.api.undo(this.args.path);
|
|
211
|
+
};
|
|
212
|
+
setScratch = (value: unknown) => {
|
|
213
|
+
this.api.setScratch(value);
|
|
214
|
+
};
|
|
215
|
+
commit = () => {
|
|
216
|
+
this.api.close(this.args.path, true);
|
|
217
|
+
};
|
|
218
|
+
cancel = () => {
|
|
219
|
+
this.api.discard(this.args.path, true);
|
|
220
|
+
};
|
|
221
|
+
cancelFromPointer = (_event: Event) => {
|
|
222
|
+
this.pointerOverDiscard = false;
|
|
223
|
+
this.api.discard(this.args.path, true);
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
/** Guards the discard control against being commit-on-blur'd out from
|
|
227
|
+
* under the click. The obvious fix — preventDefault on mousedown — is a
|
|
228
|
+
* pointer-DOWN binding, which this codebase lints against, so instead we
|
|
229
|
+
* note that the pointer is sitting on the discard control and let
|
|
230
|
+
* `onEditorFocusOut` stand down. Deliberately NOT tracked: it is read
|
|
231
|
+
* only inside an event handler, so making it reactive would buy a
|
|
232
|
+
* re-render for nothing. (Browsers that focus a button on mousedown are
|
|
233
|
+
* already covered by the `wrap.contains(relatedTarget)` test; Safari,
|
|
234
|
+
* which does not, needs this.) */
|
|
235
|
+
pointerOverDiscard = false;
|
|
236
|
+
discardPointerIn = (_event: Event) => {
|
|
237
|
+
this.pointerOverDiscard = true;
|
|
238
|
+
};
|
|
239
|
+
discardPointerOut = (_event: Event) => {
|
|
240
|
+
this.pointerOverDiscard = false;
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
// One delegated listener per open editor (structure-data's `listen`), so
|
|
244
|
+
// no {{on}} lands on a non-interactive wrapper (lint: no-invalid-interactive).
|
|
245
|
+
onEditorKeydown = (event: Event) => {
|
|
246
|
+
let e = event as KeyboardEvent;
|
|
247
|
+
if (e.key === 'Escape') {
|
|
248
|
+
e.preventDefault();
|
|
249
|
+
e.stopPropagation();
|
|
250
|
+
this.cancel();
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
if (e.key === 'Enter') {
|
|
254
|
+
// A composite that owns Enter (an open listbox, a textarea) has
|
|
255
|
+
// already claimed it; never steal a newline or a selection.
|
|
256
|
+
let target = e.target as HTMLElement | null;
|
|
257
|
+
if (e.defaultPrevented || (target && target.tagName === 'TEXTAREA')) {
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
e.preventDefault();
|
|
261
|
+
this.commit();
|
|
262
|
+
}
|
|
263
|
+
};
|
|
264
|
+
/** Commit when focus leaves the editor entirely — the Lightning
|
|
265
|
+
* behaviour. A `relatedTarget` inside the wrapper (a Select's in-place
|
|
266
|
+
* dropdown, the discard control) is not a departure. */
|
|
267
|
+
onEditorFocusOut = (event: Event) => {
|
|
268
|
+
if (this.pointerOverDiscard) {
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
let e = event as FocusEvent;
|
|
272
|
+
let wrap = e.currentTarget as HTMLElement | null;
|
|
273
|
+
let next = e.relatedTarget as Node | null;
|
|
274
|
+
if (wrap && next && wrap.contains(next)) {
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
this.api.close(this.args.path, false);
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
get editContext(): RecordEditContext {
|
|
281
|
+
return {
|
|
282
|
+
value: this.scratchValue,
|
|
283
|
+
controlId: this.controlId,
|
|
284
|
+
set: this.setScratch,
|
|
285
|
+
commit: this.commit,
|
|
286
|
+
cancel: this.cancel,
|
|
287
|
+
invalid: this.invalid,
|
|
288
|
+
focus: focusWhen,
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
<template>
|
|
293
|
+
<div
|
|
294
|
+
class='pretui-rd-field'
|
|
295
|
+
data-layout={{this.layout}}
|
|
296
|
+
data-state={{this.state}}
|
|
297
|
+
data-span={{if @span @span 'auto'}}
|
|
298
|
+
data-invalid={{if this.invalid 'true'}}
|
|
299
|
+
data-test-pretui-record-field={{@path}}
|
|
300
|
+
...attributes
|
|
301
|
+
>
|
|
302
|
+
<div class='pretui-rd-inner'>
|
|
303
|
+
<div class='pretui-rd-labelcol'>
|
|
304
|
+
{{#if this.isEditing}}
|
|
305
|
+
<Label @tag='label' @for={{this.controlId}} id={{this.labelId}}>
|
|
306
|
+
{{@label}}{{#if @required}}<abbr
|
|
307
|
+
class='pretui-rd-req'
|
|
308
|
+
title='required'
|
|
309
|
+
aria-hidden='true'
|
|
310
|
+
>*</abbr><span class='pretui-rd-sr'>(required)</span>{{/if}}
|
|
311
|
+
</Label>
|
|
312
|
+
{{else}}
|
|
313
|
+
{{! SLDS swaps <label for> for a plain span in view mode, because
|
|
314
|
+
in view mode there is no control to point at. Same here. }}
|
|
315
|
+
<Label @tag='span' id={{this.labelId}}>
|
|
316
|
+
{{@label}}{{#if @required}}<abbr
|
|
317
|
+
class='pretui-rd-req'
|
|
318
|
+
title='required'
|
|
319
|
+
aria-hidden='true'
|
|
320
|
+
>*</abbr><span class='pretui-rd-sr'>(required)</span>{{/if}}
|
|
321
|
+
</Label>
|
|
322
|
+
{{/if}}
|
|
323
|
+
{{#if @help}}
|
|
324
|
+
<Tooltip @content={{@help}} @side='top'>
|
|
325
|
+
<button
|
|
326
|
+
type='button'
|
|
327
|
+
class='pretui-rd-help'
|
|
328
|
+
aria-label={{this.helpLabel}}
|
|
329
|
+
>?</button>
|
|
330
|
+
</Tooltip>
|
|
331
|
+
{{/if}}
|
|
332
|
+
</div>
|
|
333
|
+
|
|
334
|
+
<div class='pretui-rd-body'>
|
|
335
|
+
{{#if this.isEditing}}
|
|
336
|
+
<div
|
|
337
|
+
class='pretui-rd-editor'
|
|
338
|
+
data-test-pretui-record-editor
|
|
339
|
+
{{listen 'keydown' this.onEditorKeydown}}
|
|
340
|
+
{{listen 'focusout' this.onEditorFocusOut}}
|
|
341
|
+
>
|
|
342
|
+
<div class='pretui-rd-editorslot'>
|
|
343
|
+
{{yield this.editContext to='editor'}}
|
|
344
|
+
</div>
|
|
345
|
+
<IconButton
|
|
346
|
+
@label={{this.discardLabel}}
|
|
347
|
+
@variant='ghost'
|
|
348
|
+
class='pretui-rd-act'
|
|
349
|
+
{{on 'pointerenter' this.discardPointerIn}}
|
|
350
|
+
{{on 'pointerleave' this.discardPointerOut}}
|
|
351
|
+
{{on 'click' this.cancelFromPointer}}
|
|
352
|
+
data-test-pretui-record-discard
|
|
353
|
+
>✕</IconButton>
|
|
354
|
+
</div>
|
|
355
|
+
{{else if (showTrigger this.editable (has-block 'editor'))}}
|
|
356
|
+
<button
|
|
357
|
+
type='button'
|
|
358
|
+
class='pretui-rd-static pretui-rd-trigger'
|
|
359
|
+
data-empty={{if this.isEmpty 'true'}}
|
|
360
|
+
data-longform={{if @longform 'true'}}
|
|
361
|
+
aria-labelledby={{this.labelledBy}}
|
|
362
|
+
aria-describedby={{this.describedBy}}
|
|
363
|
+
{{focusWhen this.shouldRestoreFocus}}
|
|
364
|
+
{{on 'click' this.openEditor}}
|
|
365
|
+
data-test-pretui-record-trigger
|
|
366
|
+
>
|
|
367
|
+
<span class='pretui-rd-value' id={{this.valueId}}>
|
|
368
|
+
{{#if (has-block 'display')}}
|
|
369
|
+
{{yield this.shownValue to='display'}}
|
|
370
|
+
{{else}}
|
|
371
|
+
{{this.shownText}}
|
|
372
|
+
{{/if}}
|
|
373
|
+
</span>
|
|
374
|
+
{{#let (iconFor 'pencil') as |Pencil|}}
|
|
375
|
+
{{#if Pencil}}
|
|
376
|
+
<Pencil class='pretui-rd-pencil' aria-hidden='true' />
|
|
377
|
+
{{/if}}
|
|
378
|
+
{{/let}}
|
|
379
|
+
</button>
|
|
380
|
+
{{else}}
|
|
381
|
+
{{! No <:editor> block, or read-only: no affordance at all. }}
|
|
382
|
+
<div
|
|
383
|
+
class='pretui-rd-static'
|
|
384
|
+
data-empty={{if this.isEmpty 'true'}}
|
|
385
|
+
data-longform={{if @longform 'true'}}
|
|
386
|
+
aria-describedby={{this.describedBy}}
|
|
387
|
+
>
|
|
388
|
+
<span class='pretui-rd-value' id={{this.valueId}}>
|
|
389
|
+
{{#if (has-block 'display')}}
|
|
390
|
+
{{yield this.shownValue to='display'}}
|
|
391
|
+
{{else}}
|
|
392
|
+
{{this.shownText}}
|
|
393
|
+
{{/if}}
|
|
394
|
+
</span>
|
|
395
|
+
</div>
|
|
396
|
+
{{/if}}
|
|
397
|
+
|
|
398
|
+
{{#if this.isDirty}}
|
|
399
|
+
<IconButton
|
|
400
|
+
@label={{this.undoLabel}}
|
|
401
|
+
@variant='ghost'
|
|
402
|
+
class='pretui-rd-act'
|
|
403
|
+
{{on 'click' this.undo}}
|
|
404
|
+
data-test-pretui-record-undo
|
|
405
|
+
>
|
|
406
|
+
{{#let (iconFor 'DiagonalArrowLeftUp') as |UndoIcon|}}
|
|
407
|
+
{{#if UndoIcon}}
|
|
408
|
+
<UndoIcon class='pretui-rd-actglyph' aria-hidden='true' />
|
|
409
|
+
{{else}}
|
|
410
|
+
↺
|
|
411
|
+
{{/if}}
|
|
412
|
+
{{/let}}
|
|
413
|
+
</IconButton>
|
|
414
|
+
{{/if}}
|
|
415
|
+
</div>
|
|
416
|
+
|
|
417
|
+
<span class='pretui-rd-sr' id={{this.hintId}}>{{this.hintText (has-block 'editor')}}</span>
|
|
418
|
+
|
|
419
|
+
{{#if this.issues.length}}
|
|
420
|
+
<div
|
|
421
|
+
class='pretui-rd-msgs'
|
|
422
|
+
id={{this.msgId}}
|
|
423
|
+
data-test-pretui-record-issues
|
|
424
|
+
>
|
|
425
|
+
{{#each this.issues as |issue|}}
|
|
426
|
+
<p
|
|
427
|
+
class='pretui-rd-msg'
|
|
428
|
+
data-severity={{severityOf issue}}
|
|
429
|
+
><span class='pretui-rd-mark'>{{severityOf issue}}</span><span
|
|
430
|
+
class='pretui-rd-msgbody'
|
|
431
|
+
>{{issue.message}}</span></p>
|
|
432
|
+
{{/each}}
|
|
433
|
+
</div>
|
|
434
|
+
{{/if}}
|
|
435
|
+
</div>
|
|
436
|
+
</div>
|
|
437
|
+
|
|
438
|
+
<style scoped>
|
|
439
|
+
/* above IconButton's layer, so these win by layer order, not file order */
|
|
440
|
+
@layer PretComponent, PretComposite;
|
|
441
|
+
@layer PretComposite {
|
|
442
|
+
/* The field is its own container, so label-beside-value collapses on
|
|
443
|
+
the width of THIS field. The queries at the bottom of this sheet
|
|
444
|
+
therefore target .pretui-rd-inner, a DESCENDANT — an unnamed query
|
|
445
|
+
never matches its own container. (SLDS uses
|
|
446
|
+
`@media (max-width: 304px)` and admits in a source comment that it
|
|
447
|
+
is mimicking a container query.) */
|
|
448
|
+
.pretui-rd-field {
|
|
449
|
+
container-type: inline-size;
|
|
450
|
+
min-width: 0;
|
|
451
|
+
/* both knobs exist so CompoundField can flatten a nested field
|
|
452
|
+
without any CSS reaching across a component boundary */
|
|
453
|
+
padding: var(--pretui-record-fieldpad, 5px 0 8px);
|
|
454
|
+
border-radius: var(--radius-chip, 6px);
|
|
455
|
+
box-shadow: 0 1px 0 var(--pretui-record-rule, var(--border));
|
|
456
|
+
transition: background var(--pretui-dur-snap, 180ms)
|
|
457
|
+
var(--pretui-ease-snap, ease);
|
|
458
|
+
}
|
|
459
|
+
.pretui-rd-field[data-span='full'] {
|
|
460
|
+
grid-column: 1 / -1;
|
|
461
|
+
}
|
|
462
|
+
/* SLDS: a flat `background: $color-background-highlight` yellow with
|
|
463
|
+
no token chain. Here the dirty tint is mixed from the theme's own
|
|
464
|
+
warning hue against the card, so it survives a theme change. */
|
|
465
|
+
/* Two field states, two DIFFERENT channels — not one channel in two
|
|
466
|
+
hues. Before this, edited and invalid were both a 2px inset rule
|
|
467
|
+
plus a tint and were told apart by hue alone, so in greyscale (and
|
|
468
|
+
for a red/green-blind reader) they were the same mark.
|
|
469
|
+
|
|
470
|
+
`edited` is a WASH. You touched this; it is not wrong. A
|
|
471
|
+
luminance change across the whole field reads at a glance and
|
|
472
|
+
needs no rule of its own.
|
|
473
|
+
`invalid` is a RULE. This blocks. Geometry, not colour, is what
|
|
474
|
+
says so — which also makes a rule mean exactly one thing in this
|
|
475
|
+
component, so the two states can never be confused even when both
|
|
476
|
+
are true.
|
|
477
|
+
|
|
478
|
+
The wash keeps the warning hue mixed against the card so it still
|
|
479
|
+
re-tints with the theme; the hue is confirmation, not the signal. */
|
|
480
|
+
.pretui-rd-field[data-state='edited'] {
|
|
481
|
+
background: color-mix(
|
|
482
|
+
in oklch,
|
|
483
|
+
var(--warning, var(--boxel-warning)) var(--pretui-record-edited-mix, 9%),
|
|
484
|
+
var(--card)
|
|
485
|
+
);
|
|
486
|
+
}
|
|
487
|
+
.pretui-rd-field[data-invalid='true'] {
|
|
488
|
+
box-shadow: inset 2px 0 0 var(--destructive),
|
|
489
|
+
0 1px 0 var(--pretui-record-rule, var(--border));
|
|
490
|
+
padding-inline-start: var(--space-3, 8px);
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
.pretui-rd-inner {
|
|
494
|
+
display: grid;
|
|
495
|
+
gap: 2px;
|
|
496
|
+
align-content: start;
|
|
497
|
+
min-width: 0;
|
|
498
|
+
}
|
|
499
|
+
.pretui-rd-labelcol {
|
|
500
|
+
display: flex;
|
|
501
|
+
align-items: center;
|
|
502
|
+
gap: 4px;
|
|
503
|
+
min-width: 0;
|
|
504
|
+
}
|
|
505
|
+
.pretui-rd-req {
|
|
506
|
+
color: var(--pretui-destructive-ink, var(--boxel-danger));
|
|
507
|
+
margin-inline-start: 2px;
|
|
508
|
+
text-decoration: none;
|
|
509
|
+
}
|
|
510
|
+
.pretui-rd-help {
|
|
511
|
+
width: 14px;
|
|
512
|
+
height: 14px;
|
|
513
|
+
flex: none;
|
|
514
|
+
display: grid;
|
|
515
|
+
place-items: center;
|
|
516
|
+
border: 0;
|
|
517
|
+
padding: 0;
|
|
518
|
+
border-radius: 50%;
|
|
519
|
+
cursor: help;
|
|
520
|
+
font-family: inherit;
|
|
521
|
+
font-size: 9px;
|
|
522
|
+
font-weight: 700;
|
|
523
|
+
color: var(--muted-foreground);
|
|
524
|
+
background: var(--inset, var(--boxel-100));
|
|
525
|
+
box-shadow: var(
|
|
526
|
+
--pretui-shadow-hairline,
|
|
527
|
+
0 0 0 1px var(--border)
|
|
528
|
+
);
|
|
529
|
+
}
|
|
530
|
+
.pretui-rd-help:focus-visible {
|
|
531
|
+
outline: 2px solid var(--ring);
|
|
532
|
+
outline-offset: 1px;
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
.pretui-rd-body {
|
|
536
|
+
display: flex;
|
|
537
|
+
align-items: flex-start;
|
|
538
|
+
gap: var(--space-2, 5px);
|
|
539
|
+
min-width: 0;
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
/* The static row IS the trigger — one tab stop, and its accessible
|
|
543
|
+
name is the label plus the value (SLDS leaves the value out of the
|
|
544
|
+
edit button's name entirely).
|
|
545
|
+
|
|
546
|
+
GEOMETRY IS RESERVED, NOT REDRAWN. The static row occupies exactly
|
|
547
|
+
the box the editor control will occupy: the kit's control height,
|
|
548
|
+
and a text inset equal to the control's hairline plus its inner
|
|
549
|
+
padding (1px + 9px on a boxel-ui-backed Input, 0 + 10px on a Pretui
|
|
550
|
+
face). Nothing about the row's geometry changes when it flips to
|
|
551
|
+
edit; only its dress does — measured in a browser, opening one
|
|
552
|
+
field moves every getBoundingClientRect on the form by exactly 0.
|
|
553
|
+
|
|
554
|
+
The inset is spent as PADDING rather than as a transparent border,
|
|
555
|
+
deliberately: forced-colors mode forces border-color to a system
|
|
556
|
+
colour, so a reserved transparent border would paint a real box
|
|
557
|
+
around every read-only value in high contrast. Padding has no
|
|
558
|
+
colour to force. */
|
|
559
|
+
.pretui-rd-static {
|
|
560
|
+
flex: 1 1 auto;
|
|
561
|
+
min-width: 0;
|
|
562
|
+
display: flex;
|
|
563
|
+
align-items: center;
|
|
564
|
+
gap: 6px;
|
|
565
|
+
margin: 0;
|
|
566
|
+
min-height: var(--boxel-form-control-height-sm);
|
|
567
|
+
padding: var(--pretui-record-staticpad, 4px 10px);
|
|
568
|
+
border: 0;
|
|
569
|
+
border-radius: var(--radius-chip, 6px);
|
|
570
|
+
background: transparent;
|
|
571
|
+
text-align: start;
|
|
572
|
+
font-family: inherit;
|
|
573
|
+
font-size: var(--boxel-font-size-xs);
|
|
574
|
+
line-height: 18px;
|
|
575
|
+
color: var(--card-foreground);
|
|
576
|
+
}
|
|
577
|
+
.pretui-rd-trigger {
|
|
578
|
+
cursor: pointer;
|
|
579
|
+
transition: background var(--pretui-dur-snap, 180ms)
|
|
580
|
+
var(--pretui-ease-snap, ease);
|
|
581
|
+
}
|
|
582
|
+
.pretui-rd-trigger:hover {
|
|
583
|
+
background: var(--hover, var(--boxel-100));
|
|
584
|
+
}
|
|
585
|
+
.pretui-rd-trigger:focus-visible {
|
|
586
|
+
outline: 2px solid var(--ring);
|
|
587
|
+
outline-offset: 1px;
|
|
588
|
+
}
|
|
589
|
+
.pretui-rd-static[data-empty='true'] .pretui-rd-value {
|
|
590
|
+
color: var(--ink-3, var(--boxel-400));
|
|
591
|
+
}
|
|
592
|
+
.pretui-rd-value {
|
|
593
|
+
flex: 1 1 auto;
|
|
594
|
+
min-width: 0;
|
|
595
|
+
display: block;
|
|
596
|
+
overflow-wrap: anywhere;
|
|
597
|
+
}
|
|
598
|
+
/* SLDS's `.slds-text-longform` — running text keeps its wraps; a plain
|
|
599
|
+
value stays on one line and truncates. */
|
|
600
|
+
.pretui-rd-static:not([data-longform='true']) .pretui-rd-value {
|
|
601
|
+
white-space: nowrap;
|
|
602
|
+
overflow: hidden;
|
|
603
|
+
text-overflow: ellipsis;
|
|
604
|
+
}
|
|
605
|
+
.pretui-rd-static[data-longform='true'] .pretui-rd-value {
|
|
606
|
+
white-space: pre-wrap;
|
|
607
|
+
}
|
|
608
|
+
.pretui-rd-pencil {
|
|
609
|
+
width: 12px;
|
|
610
|
+
height: 12px;
|
|
611
|
+
flex: none;
|
|
612
|
+
opacity: 0;
|
|
613
|
+
color: var(--muted-foreground);
|
|
614
|
+
transition: opacity var(--pretui-dur-snap, 180ms)
|
|
615
|
+
var(--pretui-ease-snap, ease);
|
|
616
|
+
}
|
|
617
|
+
.pretui-rd-trigger:hover .pretui-rd-pencil,
|
|
618
|
+
.pretui-rd-trigger:focus-visible .pretui-rd-pencil {
|
|
619
|
+
opacity: 1;
|
|
620
|
+
}
|
|
621
|
+
/* Law 5 / the screenshot test: the pencil is a hover REVEAL, so behind
|
|
622
|
+
reduced-motion it simply rests visible — the END state, never a
|
|
623
|
+
frozen midpoint. */
|
|
624
|
+
@media (prefers-reduced-motion: reduce) {
|
|
625
|
+
.pretui-rd-pencil {
|
|
626
|
+
opacity: 0.55;
|
|
627
|
+
transition: none;
|
|
628
|
+
}
|
|
629
|
+
.pretui-rd-field,
|
|
630
|
+
.pretui-rd-trigger {
|
|
631
|
+
transition: none;
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
.pretui-rd-editor {
|
|
636
|
+
flex: 1 1 auto;
|
|
637
|
+
min-width: 0;
|
|
638
|
+
display: flex;
|
|
639
|
+
align-items: flex-start;
|
|
640
|
+
gap: var(--space-2, 5px);
|
|
641
|
+
}
|
|
642
|
+
.pretui-rd-editorslot {
|
|
643
|
+
flex: 1 1 auto;
|
|
644
|
+
min-width: 0;
|
|
645
|
+
}
|
|
646
|
+
/* No optical nudge here. The discard/undo control is the kit's 28px
|
|
647
|
+
IconButton, which is already exactly as tall as the control beside
|
|
648
|
+
it; the old 1px top margin pushed it 1px past the control's
|
|
649
|
+
bottom edge and made the whole editor row 29px against a 28px static
|
|
650
|
+
row — the last pixel of the view/edit shift. */
|
|
651
|
+
.pretui-rd-act {
|
|
652
|
+
flex: none;
|
|
653
|
+
}
|
|
654
|
+
.pretui-rd-actglyph {
|
|
655
|
+
width: 12px;
|
|
656
|
+
height: 12px;
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
.pretui-rd-msgs {
|
|
660
|
+
display: grid;
|
|
661
|
+
gap: 1px;
|
|
662
|
+
padding-inline: 5px;
|
|
663
|
+
}
|
|
664
|
+
/* The severity notation — the same treatment the expression builders
|
|
665
|
+
uses, so a field message and an expression issue about the same
|
|
666
|
+
thing read as one system. Severity is typeset: the state's own name
|
|
667
|
+
in the eyebrow treatment against a fixed gutter, the hue on that
|
|
668
|
+
word alone, the message itself at full --foreground contrast.
|
|
669
|
+
Printing a whole sentence in --destructive never made it more
|
|
670
|
+
legible; it only made it the kit's thinnest AA margin. */
|
|
671
|
+
.pretui-rd-msg {
|
|
672
|
+
margin: 0;
|
|
673
|
+
display: grid;
|
|
674
|
+
grid-template-columns: var(--pretui-rd-notegutter, 4.75em) minmax(0, 1fr);
|
|
675
|
+
column-gap: var(--space-2, 6px);
|
|
676
|
+
align-items: baseline;
|
|
677
|
+
font-size: var(--text-ui-sm, 11.5px);
|
|
678
|
+
line-height: 15px;
|
|
679
|
+
color: var(--foreground);
|
|
680
|
+
}
|
|
681
|
+
.pretui-rd-mark {
|
|
682
|
+
justify-self: end;
|
|
683
|
+
font-size: var(--text-ui-xs, 11px);
|
|
684
|
+
font-weight: 600;
|
|
685
|
+
letter-spacing: var(--track-eyebrow, 0.08em);
|
|
686
|
+
text-transform: uppercase;
|
|
687
|
+
white-space: nowrap;
|
|
688
|
+
color: var(--muted-foreground);
|
|
689
|
+
}
|
|
690
|
+
/* The hue is anchored in ink, never used raw — mixing toward
|
|
691
|
+
--foreground is what makes one declaration correct in both modes
|
|
692
|
+
and every theme, and it is what keeps a bold 11px mark above AA
|
|
693
|
+
when the raw --warning token is about 2:1 on --card. */
|
|
694
|
+
.pretui-rd-msg[data-severity='error'] .pretui-rd-mark {
|
|
695
|
+
color: color-mix(
|
|
696
|
+
in oklch,
|
|
697
|
+
var(--destructive) var(--pretui-note-hue-mix, 45%),
|
|
698
|
+
var(--foreground)
|
|
699
|
+
);
|
|
700
|
+
}
|
|
701
|
+
.pretui-rd-msg[data-severity='warning'] .pretui-rd-mark {
|
|
702
|
+
color: color-mix(
|
|
703
|
+
in oklch,
|
|
704
|
+
var(--warning, var(--boxel-warning)) var(--pretui-note-hue-mix, 45%),
|
|
705
|
+
var(--foreground)
|
|
706
|
+
);
|
|
707
|
+
}
|
|
708
|
+
.pretui-rd-msgbody {
|
|
709
|
+
min-width: 0;
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
.pretui-rd-sr {
|
|
713
|
+
position: absolute;
|
|
714
|
+
width: 1px;
|
|
715
|
+
height: 1px;
|
|
716
|
+
margin: -1px;
|
|
717
|
+
padding: 0;
|
|
718
|
+
overflow: hidden;
|
|
719
|
+
clip-path: inset(50%);
|
|
720
|
+
white-space: nowrap;
|
|
721
|
+
border: 0;
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
/* Horizontal layout: SLDS pins a fixed label column and never
|
|
725
|
+
collapses it. Ours is a real two-track grid that folds back to
|
|
726
|
+
stacked when the FIELD gets narrow. */
|
|
727
|
+
.pretui-rd-field[data-layout='horizontal'] .pretui-rd-inner {
|
|
728
|
+
grid-template-columns: minmax(5rem, 11rem) minmax(0, 1fr);
|
|
729
|
+
column-gap: var(--space-4, 11px);
|
|
730
|
+
align-items: start;
|
|
731
|
+
}
|
|
732
|
+
.pretui-rd-field[data-layout='horizontal'] .pretui-rd-labelcol {
|
|
733
|
+
padding-top: 4px;
|
|
734
|
+
}
|
|
735
|
+
.pretui-rd-field[data-layout='horizontal'] .pretui-rd-msgs {
|
|
736
|
+
grid-column: 2;
|
|
737
|
+
}
|
|
738
|
+
@container (max-width: 22rem) {
|
|
739
|
+
.pretui-rd-field[data-layout='horizontal'] .pretui-rd-inner {
|
|
740
|
+
grid-template-columns: minmax(0, 1fr);
|
|
741
|
+
}
|
|
742
|
+
.pretui-rd-field[data-layout='horizontal'] .pretui-rd-labelcol {
|
|
743
|
+
padding-top: 0;
|
|
744
|
+
}
|
|
745
|
+
.pretui-rd-field[data-layout='horizontal'] .pretui-rd-msgs {
|
|
746
|
+
grid-column: 1;
|
|
747
|
+
}
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
</style>
|
|
751
|
+
</template>
|
|
752
|
+
}
|
|
753
|
+
// ── RecordDetail ─────────────────────────────────────────────────────────
|
|
754
|
+
//
|
|
755
|
+
// Ported from SLDS `form-element/record-detail` (`.slds-form`,
|
|
756
|
+
// `.slds-form__row`, `.slds-form__item`, `.slds-is-edited`,
|
|
757
|
+
// `.slds-form-element__undo`).
|
|
758
|
+
//
|
|
759
|
+
// THE BATCHED-SAVE STATE MACHINE — three layers, and this is the whole
|
|
760
|
+
// design:
|
|
761
|
+
//
|
|
762
|
+
// saved the `@value` each field is handed. Never mutated here; the
|
|
763
|
+
// host owns it. Undo is only possible because we never touch it.
|
|
764
|
+
// draft committed-but-unsaved per-field edits, one entry per path.
|
|
765
|
+
// This is SLDS's `slds-is-edited`, and it is what the footer
|
|
766
|
+
// counts and what @onSave receives.
|
|
767
|
+
// scratch the in-flight value of the ONE open editor, before it commits.
|
|
768
|
+
// At most one exists, because at most one editor is open.
|
|
769
|
+
//
|
|
770
|
+
// open scratch ← draft[path] ?? saved
|
|
771
|
+
// type scratch ← keystroke (draft untouched)
|
|
772
|
+
// Enter draft[path] ← scratch; editor closes; focus returns to the
|
|
773
|
+
// trigger
|
|
774
|
+
// blur-out same commit, but focus is NOT restored — the user is already
|
|
775
|
+
// on their way somewhere else
|
|
776
|
+
// Escape scratch dropped; editor closes; focus returns to the trigger.
|
|
777
|
+
// draft[path] SURVIVES, and so does every other field's entry
|
|
778
|
+
// undo draft[path] deleted; the field snaps back to saved
|
|
779
|
+
// Save @onSave(draft); the draft clears optimistically and the host
|
|
780
|
+
// hands back new @values
|
|
781
|
+
// Cancel scratch AND the whole draft dropped; every field returns to
|
|
782
|
+
// saved
|
|
783
|
+
//
|
|
784
|
+
// A HALF-EDITED FIELD ON CANCEL: its keystrokes go with everything else.
|
|
785
|
+
// Two routes reach the same place — if focus leaves the editor on the way
|
|
786
|
+
// to the Cancel button, the blur commits the scratch into the draft first,
|
|
787
|
+
// and `cancelAll` then clears the entry it just made; if it does not, the
|
|
788
|
+
// scratch is dropped directly. Either way nothing survives Cancel.
|
|
789
|
+
//
|
|
790
|
+
// BETTER THAN THE INSPIRATION:
|
|
791
|
+
// • SLDS ships no state machine at all. `isEdited` is a literal in a
|
|
792
|
+
// snapshot data file, the undo button does nothing, there is no dirty
|
|
793
|
+
// count and no save wiring. The pattern is drawn but not built. Ours is
|
|
794
|
+
// the working machine, and it is the reason this component exists.
|
|
795
|
+
// • Rows: SLDS makes you hand-author `<div class="slds-form__row">`
|
|
796
|
+
// wrappers and pass a `column` count per field. Ours is grid
|
|
797
|
+
// auto-placement plus a per-field `@span` — no wrapper elements, no
|
|
798
|
+
// class per column count.
|
|
799
|
+
// • Responsiveness: `.slds-form__item` uses `min-width: 280px` on a
|
|
800
|
+
// wrapping flexbox "to mimic container query" (their words) and then a
|
|
801
|
+
// `@media (max-width: 304px)`. In a Boxel card a viewport query measures
|
|
802
|
+
// the browser window, not the pane the card is in. Ours is a real
|
|
803
|
+
// unnamed container query on the record itself.
|
|
804
|
+
// • SLDS never surfaces an issue that belongs to no rendered field. Ours
|
|
805
|
+
// renders a form-level summary, so an issue cannot be swallowed.
|
|
806
|
+
//
|
|
807
|
+
// DROPPED FROM UPSTREAM (and why): `snapshot` (a data-object API — blocks
|
|
808
|
+
// are how a Glimmer form takes its fields, and the editor MUST be a slot);
|
|
809
|
+
// the `isDeprecated` / `slds-form_stacked|horizontal` legacy fork;
|
|
810
|
+
// `isViewMode` as a separate mode — a field with no `<:editor>` block, or
|
|
811
|
+
// `@readOnly`, IS view mode and says so structurally instead of by flag; and
|
|
812
|
+
// `role='list'` / `role='listitem'` on the form and its items, because a
|
|
813
|
+
// compound `<fieldset>` is not a valid child of a list and the label/value
|
|
814
|
+
// pairing already carries the structure.
|
|
815
|
+
//
|
|
816
|
+
// HONEST LIMIT (Law 7 — name the unfinished edge rather than hide it): the
|
|
817
|
+
// issue summary lists EVERY issue, not only the ones matching no rendered
|
|
818
|
+
// field. Knowing which paths were rendered would require the fields to
|
|
819
|
+
// register themselves with the parent during render, which is exactly the
|
|
820
|
+
// render-phase mutation Ember asserts on. A complete list is the fail-safe
|
|
821
|
+
// choice: it cannot drop an error. Pass @summary={{false}} when the host
|
|
822
|
+
// renders its own.
|
|
823
|
+
export interface RecordDetailSignature {
|
|
824
|
+
Args: {
|
|
825
|
+
/** Already-computed issues for the whole record, from BXL guide rules.
|
|
826
|
+
* Routed to fields by whole-string `targetPath` equality; nothing here
|
|
827
|
+
* evaluates, parses or splits a path. */
|
|
828
|
+
issues?: FormIssue[];
|
|
829
|
+
/** Columns at full width; folds to fewer as the record narrows. Clamped
|
|
830
|
+
* to 1–4. @default 2 */
|
|
831
|
+
columns?: number;
|
|
832
|
+
/** 'stacked' puts each label above its value (the Salesforce default);
|
|
833
|
+
* 'horizontal' puts it beside. @default 'stacked' */
|
|
834
|
+
layout?: RecordLayout;
|
|
835
|
+
/** Turns every field read-only at once — no pencils anywhere. */
|
|
836
|
+
readOnly?: boolean;
|
|
837
|
+
/** Text shown for an empty value. @default '—' */
|
|
838
|
+
placeholder?: string;
|
|
839
|
+
/** Receives the batch as `{ [path]: value }` when the footer saves. The
|
|
840
|
+
* host writes it and hands back new `@value`s; the draft clears
|
|
841
|
+
* optimistically the moment this fires. */
|
|
842
|
+
onSave?: (changes: Record<string, unknown>) => void;
|
|
843
|
+
/** Fired after the batch is discarded. */
|
|
844
|
+
onCancel?: () => void;
|
|
845
|
+
/** Save is in flight — the footer locks. */
|
|
846
|
+
saving?: boolean;
|
|
847
|
+
/** Suppress the built-in docked footer; drive your own FormFooter from
|
|
848
|
+
* the yielded `state` instead. */
|
|
849
|
+
hideFooter?: boolean;
|
|
850
|
+
/** Suppress the form-level issue summary. @default true (shown) */
|
|
851
|
+
summary?: boolean;
|
|
852
|
+
};
|
|
853
|
+
Blocks: {
|
|
854
|
+
/** Yields `{ Field, Compound, state }`. `Field` and `Compound` come
|
|
855
|
+
* pre-bound to this record's batch and issues; `state` is
|
|
856
|
+
* `{ dirtyCount, dirtyPaths, editingPath, save, cancel }` for a custom
|
|
857
|
+
* footer or a header badge. */
|
|
858
|
+
default: [
|
|
859
|
+
{
|
|
860
|
+
Field: ContextualComponent;
|
|
861
|
+
Compound: ContextualComponent;
|
|
862
|
+
state: RecordDetailState;
|
|
863
|
+
},
|
|
864
|
+
];
|
|
865
|
+
};
|
|
866
|
+
Element: HTMLDivElement;
|
|
867
|
+
}
|
|
868
|
+
|
|
869
|
+
/** The batch, as seen from outside. */
|
|
870
|
+
export interface RecordDetailState {
|
|
871
|
+
/** How many fields carry a committed-but-unsaved edit. */
|
|
872
|
+
dirtyCount: number;
|
|
873
|
+
/** Which paths those are. */
|
|
874
|
+
dirtyPaths: string[];
|
|
875
|
+
/** The path whose editor is open, if any. */
|
|
876
|
+
editingPath: string | null;
|
|
877
|
+
/** Commit the batch (what the footer's Save calls). */
|
|
878
|
+
save: () => void;
|
|
879
|
+
/** Discard the batch (what the footer's Cancel calls). */
|
|
880
|
+
cancel: () => void;
|
|
881
|
+
}
|
|
882
|
+
|
|
883
|
+
export class RecordDetail extends Component<RecordDetailSignature> {
|
|
884
|
+
/** committed-but-unsaved edits. Replaced wholesale on write, so the
|
|
885
|
+
* tracked read stays a plain property read — no TrackedMap needed. */
|
|
886
|
+
@tracked draft: Record<string, unknown> = {};
|
|
887
|
+
/** the one open editor's path, or null */
|
|
888
|
+
@tracked editingPath: string | null = null;
|
|
889
|
+
/** the one open editor's in-flight value */
|
|
890
|
+
@tracked scratch: unknown = undefined;
|
|
891
|
+
/** the path whose editor closed by an EXPLICIT gesture — the single
|
|
892
|
+
* render where focus travels back to that field's trigger */
|
|
893
|
+
@tracked lastClosed: string | null = null;
|
|
894
|
+
|
|
895
|
+
get columns(): number {
|
|
896
|
+
let n = this.args.columns ?? 2;
|
|
897
|
+
return Math.min(4, Math.max(1, Math.round(n)));
|
|
898
|
+
}
|
|
899
|
+
get layout(): RecordLayout {
|
|
900
|
+
return this.args.layout === 'horizontal' ? 'horizontal' : 'stacked';
|
|
901
|
+
}
|
|
902
|
+
get placeholder(): string {
|
|
903
|
+
return this.args.placeholder ?? '—';
|
|
904
|
+
}
|
|
905
|
+
get dirtyPaths(): string[] {
|
|
906
|
+
return Object.keys(this.draft);
|
|
907
|
+
}
|
|
908
|
+
get dirtyCount(): number {
|
|
909
|
+
return this.dirtyPaths.length;
|
|
910
|
+
}
|
|
911
|
+
get summaryIssues(): FormIssue[] {
|
|
912
|
+
return sortIssues(this.args.issues ?? []);
|
|
913
|
+
}
|
|
914
|
+
get showSummary(): boolean {
|
|
915
|
+
return this.args.summary !== false && this.summaryIssues.length > 0;
|
|
916
|
+
}
|
|
917
|
+
get summaryTone(): 'info' | 'success' | 'warning' | 'danger' {
|
|
918
|
+
let worst = this.summaryIssues[0];
|
|
919
|
+
if (!worst) {
|
|
920
|
+
return 'info';
|
|
921
|
+
}
|
|
922
|
+
if (isBlocking(worst)) {
|
|
923
|
+
return 'danger';
|
|
924
|
+
}
|
|
925
|
+
return worst.severity === 'warning' ? 'warning' : 'info';
|
|
926
|
+
}
|
|
927
|
+
get summaryTitle(): string {
|
|
928
|
+
let n = this.summaryIssues.length;
|
|
929
|
+
return `${n} ${plural(n, 'issue', 'issues')} on this record`;
|
|
930
|
+
}
|
|
931
|
+
|
|
932
|
+
// ── the batch API handed to every field ───────────────────────────────
|
|
933
|
+
get api(): RecordBatchApi {
|
|
934
|
+
return {
|
|
935
|
+
readOnly: Boolean(this.args.readOnly),
|
|
936
|
+
layout: this.layout,
|
|
937
|
+
placeholder: this.placeholder,
|
|
938
|
+
editingPath: this.editingPath,
|
|
939
|
+
lastClosed: this.lastClosed,
|
|
940
|
+
scratch: this.scratch,
|
|
941
|
+
issuesFor: this.issuesFor,
|
|
942
|
+
isDirty: this.isDirty,
|
|
943
|
+
committed: this.committed,
|
|
944
|
+
open: this.open,
|
|
945
|
+
setScratch: this.setScratch,
|
|
946
|
+
close: this.close,
|
|
947
|
+
discard: this.discard,
|
|
948
|
+
undo: this.undo,
|
|
949
|
+
};
|
|
950
|
+
}
|
|
951
|
+
|
|
952
|
+
issuesFor = (path: string): FormIssue[] =>
|
|
953
|
+
issuesForPath(this.args.issues ?? [], path);
|
|
954
|
+
|
|
955
|
+
isDirty = (path: string): boolean =>
|
|
956
|
+
Object.prototype.hasOwnProperty.call(this.draft, path);
|
|
957
|
+
|
|
958
|
+
/** What a field should SHOW: its pending edit if it has one, else the
|
|
959
|
+
* saved value the host handed it. */
|
|
960
|
+
committed = (path: string, saved: unknown): unknown =>
|
|
961
|
+
this.isDirty(path) ? this.draft[path] : saved;
|
|
962
|
+
|
|
963
|
+
open = (path: string, saved: unknown) => {
|
|
964
|
+
this.lastClosed = null;
|
|
965
|
+
this.editingPath = path;
|
|
966
|
+
this.scratch = this.committed(path, saved);
|
|
967
|
+
};
|
|
968
|
+
|
|
969
|
+
setScratch = (value: unknown) => {
|
|
970
|
+
this.scratch = value;
|
|
971
|
+
};
|
|
972
|
+
|
|
973
|
+
/** Commit the in-flight value into the batch and close the editor. A
|
|
974
|
+
* second call for the same path is a no-op — which is what makes the
|
|
975
|
+
* Escape-then-focusout and Enter-then-focusout sequences safe, since
|
|
976
|
+
* removing a focused element can fire focusout on the way out. */
|
|
977
|
+
close = (path: string, restoreFocus: boolean) => {
|
|
978
|
+
if (this.editingPath !== path) {
|
|
979
|
+
return;
|
|
980
|
+
}
|
|
981
|
+
let next = { ...this.draft };
|
|
982
|
+
next[path] = this.scratch;
|
|
983
|
+
this.draft = next;
|
|
984
|
+
this.editingPath = null;
|
|
985
|
+
this.scratch = undefined;
|
|
986
|
+
this.lastClosed = restoreFocus ? path : null;
|
|
987
|
+
};
|
|
988
|
+
|
|
989
|
+
/** Throw the in-flight value away. The field's ALREADY-COMMITTED draft
|
|
990
|
+
* entry survives, and so does every other field's — that is the
|
|
991
|
+
* difference between cancelling an edit and cancelling the batch. */
|
|
992
|
+
discard = (path: string, restoreFocus: boolean) => {
|
|
993
|
+
if (this.editingPath !== path) {
|
|
994
|
+
return;
|
|
995
|
+
}
|
|
996
|
+
this.editingPath = null;
|
|
997
|
+
this.scratch = undefined;
|
|
998
|
+
this.lastClosed = restoreFocus ? path : null;
|
|
999
|
+
};
|
|
1000
|
+
|
|
1001
|
+
undo = (path: string) => {
|
|
1002
|
+
let next = { ...this.draft };
|
|
1003
|
+
delete next[path];
|
|
1004
|
+
this.draft = next;
|
|
1005
|
+
if (this.editingPath === path) {
|
|
1006
|
+
this.editingPath = null;
|
|
1007
|
+
this.scratch = undefined;
|
|
1008
|
+
}
|
|
1009
|
+
this.lastClosed = path;
|
|
1010
|
+
};
|
|
1011
|
+
|
|
1012
|
+
save = () => {
|
|
1013
|
+
let batch = { ...this.draft };
|
|
1014
|
+
this.editingPath = null;
|
|
1015
|
+
this.scratch = undefined;
|
|
1016
|
+
this.lastClosed = null;
|
|
1017
|
+
this.draft = {};
|
|
1018
|
+
this.args.onSave?.(batch);
|
|
1019
|
+
};
|
|
1020
|
+
|
|
1021
|
+
/** Discards EVERYTHING: the open editor's keystrokes and every committed
|
|
1022
|
+
* draft entry. If the pointer path commits the open field on its way to
|
|
1023
|
+
* this button, the entry it just made is cleared right here — so the
|
|
1024
|
+
* outcome is identical whichever way focus moved. */
|
|
1025
|
+
cancelAll = () => {
|
|
1026
|
+
this.editingPath = null;
|
|
1027
|
+
this.scratch = undefined;
|
|
1028
|
+
this.lastClosed = null;
|
|
1029
|
+
this.draft = {};
|
|
1030
|
+
this.args.onCancel?.();
|
|
1031
|
+
};
|
|
1032
|
+
|
|
1033
|
+
get state(): RecordDetailState {
|
|
1034
|
+
return {
|
|
1035
|
+
dirtyCount: this.dirtyCount,
|
|
1036
|
+
dirtyPaths: this.dirtyPaths,
|
|
1037
|
+
editingPath: this.editingPath,
|
|
1038
|
+
save: this.save,
|
|
1039
|
+
cancel: this.cancelAll,
|
|
1040
|
+
};
|
|
1041
|
+
}
|
|
1042
|
+
|
|
1043
|
+
<template>
|
|
1044
|
+
<div
|
|
1045
|
+
class='pretui-record'
|
|
1046
|
+
data-layout={{this.layout}}
|
|
1047
|
+
data-cols={{this.columns}}
|
|
1048
|
+
data-test-pretui-record-detail
|
|
1049
|
+
...attributes
|
|
1050
|
+
>
|
|
1051
|
+
{{#if this.showSummary}}
|
|
1052
|
+
<div class='pretui-record-summary'>
|
|
1053
|
+
<Alert
|
|
1054
|
+
@tone={{this.summaryTone}}
|
|
1055
|
+
@title={{this.summaryTitle}}
|
|
1056
|
+
data-test-pretui-record-summary
|
|
1057
|
+
>
|
|
1058
|
+
<ul class='pretui-record-summarylist'>
|
|
1059
|
+
{{#each this.summaryIssues as |issue|}}
|
|
1060
|
+
<li data-severity={{severityOf issue}}>
|
|
1061
|
+
<span
|
|
1062
|
+
class='pretui-record-summarypath'
|
|
1063
|
+
>{{issue.targetPath}}</span>
|
|
1064
|
+
{{issue.message}}
|
|
1065
|
+
</li>
|
|
1066
|
+
{{/each}}
|
|
1067
|
+
</ul>
|
|
1068
|
+
</Alert>
|
|
1069
|
+
</div>
|
|
1070
|
+
{{/if}}
|
|
1071
|
+
|
|
1072
|
+
<div class='pretui-record-grid' data-test-pretui-record-grid>
|
|
1073
|
+
{{yield
|
|
1074
|
+
(hash
|
|
1075
|
+
Field=(component RecordField api=this.api)
|
|
1076
|
+
Compound=(component CompoundField issues=@issues)
|
|
1077
|
+
state=this.state
|
|
1078
|
+
)
|
|
1079
|
+
}}
|
|
1080
|
+
</div>
|
|
1081
|
+
|
|
1082
|
+
{{#unless @hideFooter}}
|
|
1083
|
+
<FormFooter
|
|
1084
|
+
@count={{this.dirtyCount}}
|
|
1085
|
+
@issues={{@issues}}
|
|
1086
|
+
@saving={{@saving}}
|
|
1087
|
+
@onSave={{this.save}}
|
|
1088
|
+
@onCancel={{this.cancelAll}}
|
|
1089
|
+
/>
|
|
1090
|
+
{{/unless}}
|
|
1091
|
+
</div>
|
|
1092
|
+
|
|
1093
|
+
<style scoped>
|
|
1094
|
+
/* above IconButton's layer, so these win by layer order, not file order */
|
|
1095
|
+
@layer PretComponent, PretComposite;
|
|
1096
|
+
@layer PretComposite {
|
|
1097
|
+
/* The record is the container; the grid below it is what the queries
|
|
1098
|
+
match. An unnamed container query resolves against the nearest
|
|
1099
|
+
ANCESTOR container, so this pair has to be two elements.
|
|
1100
|
+
No overflow clipping: an in-place Select dropdown and the Tooltip
|
|
1101
|
+
must be able to leave the record's box. */
|
|
1102
|
+
.pretui-record {
|
|
1103
|
+
container-type: inline-size;
|
|
1104
|
+
display: flex;
|
|
1105
|
+
flex-direction: column;
|
|
1106
|
+
min-width: 0;
|
|
1107
|
+
background: var(--card);
|
|
1108
|
+
border-radius: var(--radius-surface, 10px);
|
|
1109
|
+
box-shadow: var(--pretui-shadow-card, 0 0 0 1px var(--border));
|
|
1110
|
+
}
|
|
1111
|
+
.pretui-record-summary {
|
|
1112
|
+
padding: var(--space-4, 11px) var(--space-5, 14px) 0;
|
|
1113
|
+
}
|
|
1114
|
+
.pretui-record-summarylist {
|
|
1115
|
+
margin: 0;
|
|
1116
|
+
padding-inline-start: 1.1em;
|
|
1117
|
+
display: grid;
|
|
1118
|
+
gap: 2px;
|
|
1119
|
+
}
|
|
1120
|
+
.pretui-record-summarylist li {
|
|
1121
|
+
font-size: var(--text-ui-sm, 11.5px);
|
|
1122
|
+
line-height: 16px;
|
|
1123
|
+
}
|
|
1124
|
+
/* Law 3 — a BXL label path is a machine value, so it is set mono and
|
|
1125
|
+
reads as one inside the prose of the message. */
|
|
1126
|
+
.pretui-record-summarypath {
|
|
1127
|
+
font-family: var(--font-mono);
|
|
1128
|
+
font-size: var(--text-ui-xs, 11px);
|
|
1129
|
+
margin-inline-end: 5px;
|
|
1130
|
+
}
|
|
1131
|
+
|
|
1132
|
+
.pretui-record-grid {
|
|
1133
|
+
display: grid;
|
|
1134
|
+
column-gap: var(--space-6, 19px);
|
|
1135
|
+
row-gap: 0;
|
|
1136
|
+
align-items: start;
|
|
1137
|
+
padding: var(--space-4, 11px) var(--space-5, 14px);
|
|
1138
|
+
min-width: 0;
|
|
1139
|
+
}
|
|
1140
|
+
/* Column counts as attribute rules rather than
|
|
1141
|
+
`repeat(var(--n), …)`: the fold rules below need to WIN, and they
|
|
1142
|
+
can only do that at matching specificity in later source order. */
|
|
1143
|
+
.pretui-record[data-cols='1'] .pretui-record-grid {
|
|
1144
|
+
grid-template-columns: minmax(0, 1fr);
|
|
1145
|
+
}
|
|
1146
|
+
.pretui-record[data-cols='2'] .pretui-record-grid {
|
|
1147
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
1148
|
+
}
|
|
1149
|
+
.pretui-record[data-cols='3'] .pretui-record-grid {
|
|
1150
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
1151
|
+
}
|
|
1152
|
+
.pretui-record[data-cols='4'] .pretui-record-grid {
|
|
1153
|
+
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
1154
|
+
}
|
|
1155
|
+
/* Two real breakpoints where SLDS has one viewport media query. */
|
|
1156
|
+
@container (max-width: 52rem) {
|
|
1157
|
+
.pretui-record[data-cols='3'] .pretui-record-grid,
|
|
1158
|
+
.pretui-record[data-cols='4'] .pretui-record-grid {
|
|
1159
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
1160
|
+
}
|
|
1161
|
+
}
|
|
1162
|
+
@container (max-width: 32rem) {
|
|
1163
|
+
.pretui-record[data-cols] .pretui-record-grid {
|
|
1164
|
+
grid-template-columns: minmax(0, 1fr);
|
|
1165
|
+
}
|
|
1166
|
+
}
|
|
1167
|
+
}
|
|
1168
|
+
</style>
|
|
1169
|
+
</template>
|
|
1170
|
+
}
|