@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,837 @@
|
|
|
1
|
+
// Pretui — forms/expression territory: the rule & condition AUTHORING
|
|
2
|
+
// surface. Three components (ExpressionBuilder, RuleRow, FilterSet) plus the
|
|
3
|
+
// pure string/token helpers they share.
|
|
4
|
+
//
|
|
5
|
+
// Ported from Salesforce Lightning Design System `ui/components/expression/`
|
|
6
|
+
// (`base/`, `custom-logic/`, `filters/`; the `formula/` variant is dropped —
|
|
7
|
+
// see below). SLDS supplies the layout and the interaction vocabulary:
|
|
8
|
+
// condition rows of (resource, operator, value), an any/all joiner, a
|
|
9
|
+
// custom-logic string like `1 AND (2 OR 3)` that references row NUMBERS, and
|
|
10
|
+
// per-row add/delete controls.
|
|
11
|
+
//
|
|
12
|
+
// WHAT THIS COMPONENT DOES NOT DO — the hard architectural rule of the forms
|
|
13
|
+
// territory: **it never evaluates anything.** There is no BXL import here, no
|
|
14
|
+
// `prepareBxlSafe`, no `evaluate`. It edits rule DATA and composes a BXL
|
|
15
|
+
// STRING for the caller to persist. Evaluation happens elsewhere and fails
|
|
16
|
+
// closed. Anything that looks like a result in a demo was passed in canned
|
|
17
|
+
// (`@status` on RuleRow).
|
|
18
|
+
//
|
|
19
|
+
// The record it edits is the BXL guide rule, verbatim, no second shape:
|
|
20
|
+
// { ruleId, label, severity, targetPath, message, expression }
|
|
21
|
+
//
|
|
22
|
+
// ── What the inspiration got wrong, and what we fixed ────────────────────
|
|
23
|
+
//
|
|
24
|
+
// 1. SLDS has NO reorder. Rows can only be appended and deleted — yet the
|
|
25
|
+
// custom-logic string references row POSITIONS, so position is meaningful
|
|
26
|
+
// and un-editable. We add keyboard-first Move up / Move down.
|
|
27
|
+
// 2. SLDS renumbers nothing. Its examples are static JSX; the real Lightning
|
|
28
|
+
// builder is notorious for leaving dangling references after a delete.
|
|
29
|
+
// We remap the custom-logic string from STABLE ROW IDS on every structural
|
|
30
|
+
// change (never by arithmetic on the numbers), remove the operator orphaned
|
|
31
|
+
// by a dropped reference, collapse the resulting empty groups, and then
|
|
32
|
+
// VALIDATE and show what is still wrong rather than silently repairing it.
|
|
33
|
+
// 3. SLDS's row identity lives entirely in a `<legend>` whose assistive text
|
|
34
|
+
// ("Condition 1") most screen readers announce once, on entry to the
|
|
35
|
+
// fieldset. Every control inside is then labelled "Resource" / "Operator" /
|
|
36
|
+
// "Value" — identical in every row. We keep the fieldset+legend AND give
|
|
37
|
+
// every control its own accessible name carrying the row number
|
|
38
|
+
// ("Condition 3 resource"), so a control reached by Tab, by virtual cursor,
|
|
39
|
+
// or by a forms-mode jump always identifies its row.
|
|
40
|
+
// 4. SLDS never moves focus. Deleting a row destroys the focused button and
|
|
41
|
+
// drops focus to `<body>`. We move focus to the row that took the deleted
|
|
42
|
+
// row's place (or the previous row, or the Add button) and announce the
|
|
43
|
+
// change in a live region.
|
|
44
|
+
// 5. SLDS `disabled`s the delete button on the only remaining row — the
|
|
45
|
+
// classic focus-loss trap. Our end-of-list Move buttons use `aria-disabled`
|
|
46
|
+
// and stay focusable, so repeated Up presses never eject the user.
|
|
47
|
+
// 6. SLDS hardcodes `$size-small` / `$spacing-*` Sass at build time and cannot
|
|
48
|
+
// respond to its own pane. Every dimension here is a token with a light
|
|
49
|
+
// literal fallback, and the row collapses to a stacked layout on an
|
|
50
|
+
// unnamed container query.
|
|
51
|
+
// 7. The row count is nowhere in SLDS's accessibility tree. Ours is in the
|
|
52
|
+
// list's accessible name and in the live region.
|
|
53
|
+
//
|
|
54
|
+
// DROPPED from the upstream surface, and why:
|
|
55
|
+
// - `formula/` (the rich-text formula editor with an insertion toolbar). It
|
|
56
|
+
// needs a rich-text engine; Law 9 forbids vendoring one. A caller who wants
|
|
57
|
+
// free-form BXL edits `rule.expression` directly — RuleRow shows it.
|
|
58
|
+
// - Nested condition GROUPS (`ExpressionGroup`, `slds-expression__group`).
|
|
59
|
+
// Custom logic already expresses grouping with parentheses over one flat
|
|
60
|
+
// row list, and a flat list is what keeps stable-id remapping provable.
|
|
61
|
+
// Named here rather than half-shipped (Law 7).
|
|
62
|
+
// - The `Combobox`+`Listbox` type-ahead resource picker. Pretui `Select` is
|
|
63
|
+
// the one select in the kit and already grows a search box past 7 options.
|
|
64
|
+
// - `slds-is-new` / `slds-is-locked` filter-item states — no consumer yet.
|
|
65
|
+
//
|
|
66
|
+
// Pretui — the expression model, operator catalogue, custom-logic tokens and BXL composition.
|
|
67
|
+
import type { SelectOption } from '../components/select';
|
|
68
|
+
import { iconFor } from '../icon-registry';
|
|
69
|
+
|
|
70
|
+
export const AddIcon = iconFor('plus');
|
|
71
|
+
export const RemoveIcon = iconFor('circle-minus');
|
|
72
|
+
export const MoveIcon = iconFor('chevron-down');
|
|
73
|
+
export const MoreIcon = iconFor('ellipsis');
|
|
74
|
+
export const PencilIcon = iconFor('pencil');
|
|
75
|
+
export const FunnelIcon = iconFor('filter');
|
|
76
|
+
|
|
77
|
+
// ── The data model ───────────────────────────────────────────────────────
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* One rule in BXL guide shape — the record the caller persists. This is the
|
|
81
|
+
* SAME shape as `bxl-guide-validation`'s rule data and as `boxel-widgets`'
|
|
82
|
+
* message contract upstream of it; nothing here invents a variant of it.
|
|
83
|
+
*
|
|
84
|
+
* `expression` is a BXL source STRING. This module composes it
|
|
85
|
+
* (`expressionToBxl`) and never runs it.
|
|
86
|
+
*/
|
|
87
|
+
export interface GuideRule {
|
|
88
|
+
/** stable id, the provenance key an emitted issue points back to */
|
|
89
|
+
ruleId: string;
|
|
90
|
+
/** human name of the rule, shown in rule lists */
|
|
91
|
+
label: string;
|
|
92
|
+
/** 'error' blocks; anything else is advisory. Unknown values fail closed. */
|
|
93
|
+
severity: 'error' | 'warning' | 'info' | (string & {});
|
|
94
|
+
/** BXL label path the failure points at. Bare for simple labels (`Total`),
|
|
95
|
+
* quoted when it contains spaces (`"Approver Email"`), predicate form for
|
|
96
|
+
* rows (`"Line Item"[SKU = "DHP-04"].Quantity`). Treated as ONE opaque
|
|
97
|
+
* string everywhere in this file — never split on '.'. */
|
|
98
|
+
targetPath: string;
|
|
99
|
+
/** message rendered verbatim when the rule fails */
|
|
100
|
+
message: string;
|
|
101
|
+
/** BXL source. Composed from an ExpressionModel, or hand-written. */
|
|
102
|
+
expression: string;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/** How the condition rows combine. Mirrors SLDS's any/all/custom/always. */
|
|
106
|
+
export type ExpressionLogic = 'all' | 'any' | 'custom' | 'always';
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* One condition row. `id` is the row's identity for the lifetime of the edit
|
|
110
|
+
* session and is NEVER renumbered — the display number is derived from array
|
|
111
|
+
* position, and custom-logic references are remapped through these ids.
|
|
112
|
+
*/
|
|
113
|
+
export interface ExpressionCondition {
|
|
114
|
+
/** stable row id; not persisted in the guide rule */
|
|
115
|
+
id: string;
|
|
116
|
+
/** BXL label path of the left operand — opaque, never parsed */
|
|
117
|
+
targetPath: string;
|
|
118
|
+
/** operator token, matched against the row's operator catalogue */
|
|
119
|
+
operator: string;
|
|
120
|
+
/** right operand as the caller's value control produced it */
|
|
121
|
+
value: string;
|
|
122
|
+
/** what `value` MEANS. `literal` (the default) quotes it for BXL; `path`
|
|
123
|
+
* emits it verbatim, so a condition can compare two fields — "Total must
|
|
124
|
+
* not exceed the approved budget". SLDS's published component has no field-
|
|
125
|
+
* to-field comparison at all even though the shipping Lightning builder
|
|
126
|
+
* does; this is the smallest honest way to close that gap. */
|
|
127
|
+
valueKind?: 'literal' | 'path';
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/** The editor's working state. `expression` on the GuideRule is derived from
|
|
131
|
+
* this; this is not a second rule shape, it is the authoring projection. */
|
|
132
|
+
export interface ExpressionModel {
|
|
133
|
+
logic: ExpressionLogic;
|
|
134
|
+
/** row-number logic, meaningful only while `logic === 'custom'` */
|
|
135
|
+
customLogic: string;
|
|
136
|
+
conditions: ExpressionCondition[];
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/** A field the builder can put on the left of a condition. */
|
|
140
|
+
export interface ExpressionResource {
|
|
141
|
+
/** the BXL label path, already quoted if it needs quoting — used verbatim */
|
|
142
|
+
value: string;
|
|
143
|
+
/** what the picker shows */
|
|
144
|
+
label: string;
|
|
145
|
+
/** picks the default operator catalogue and how the value is quoted */
|
|
146
|
+
type?: ExpressionValueType;
|
|
147
|
+
/** choices handed to the value slot for picklist-typed resources */
|
|
148
|
+
options?: SelectOption[];
|
|
149
|
+
/** override the operator catalogue for this resource only */
|
|
150
|
+
operators?: ExpressionOperator[];
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
export type ExpressionValueType =
|
|
154
|
+
| 'text'
|
|
155
|
+
| 'number'
|
|
156
|
+
| 'currency'
|
|
157
|
+
| 'date'
|
|
158
|
+
| 'boolean'
|
|
159
|
+
| 'picklist';
|
|
160
|
+
|
|
161
|
+
/** One operator offered in the middle column. */
|
|
162
|
+
export interface ExpressionOperator {
|
|
163
|
+
/** the token stored on the condition */
|
|
164
|
+
value: string;
|
|
165
|
+
/** what the picker shows — SLDS wording ('equals', 'greater than') */
|
|
166
|
+
label: string;
|
|
167
|
+
/** 0 = unary (`is empty`); the value column is suppressed */
|
|
168
|
+
arity?: 0 | 1;
|
|
169
|
+
/** BXL template. `{path}`, `{op}` and `{value}` are substituted. Defaults
|
|
170
|
+
* to `{path} {op} {value}`, or `{path} {op}` when arity is 0. */
|
|
171
|
+
bxl?: string;
|
|
172
|
+
/** prose form used by `conditionSummary` / FilterSet. Defaults to `label`. */
|
|
173
|
+
summary?: string;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* An authoring-time problem with the expression being edited — a dangling
|
|
178
|
+
* custom-logic reference, an incomplete row.
|
|
179
|
+
*
|
|
180
|
+
* Deliberately NOT `FormIssue` (forms-core): a FormIssue is keyed by the
|
|
181
|
+
* `targetPath` of a record field that failed a rule at RUNTIME. These are
|
|
182
|
+
* keyed by condition id and describe the rule DOCUMENT, not any record. They
|
|
183
|
+
* meet at RuleRow, where `@status` accepts a canned runtime verdict.
|
|
184
|
+
*/
|
|
185
|
+
export interface ExpressionIssue {
|
|
186
|
+
severity: 'error' | 'warning' | 'info';
|
|
187
|
+
message: string;
|
|
188
|
+
/** the row it belongs to; absent means expression-level */
|
|
189
|
+
conditionId?: string;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/** Canned runtime verdict handed to RuleRow. Nothing here computes it. */
|
|
193
|
+
export type RuleStatus = 'pass' | 'fail' | 'error' | 'unknown';
|
|
194
|
+
|
|
195
|
+
// ── Operator catalogue ───────────────────────────────────────────────────
|
|
196
|
+
|
|
197
|
+
const TEXT_OPERATORS: ExpressionOperator[] = [
|
|
198
|
+
{ value: '=', label: 'equals' },
|
|
199
|
+
{ value: '!=', label: 'does not equal' },
|
|
200
|
+
{
|
|
201
|
+
value: 'contains',
|
|
202
|
+
label: 'contains',
|
|
203
|
+
bxl: '{path} | contains({value})',
|
|
204
|
+
summary: 'contains',
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
value: 'starts with',
|
|
208
|
+
label: 'starts with',
|
|
209
|
+
bxl: '{path} | startswith({value})',
|
|
210
|
+
summary: 'starts with',
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
value: 'is empty',
|
|
214
|
+
label: 'is empty',
|
|
215
|
+
arity: 0,
|
|
216
|
+
bxl: '({path} | length) = 0',
|
|
217
|
+
summary: 'is empty',
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
value: 'is not empty',
|
|
221
|
+
label: 'is not empty',
|
|
222
|
+
arity: 0,
|
|
223
|
+
bxl: '({path} | length) > 0',
|
|
224
|
+
summary: 'is not empty',
|
|
225
|
+
},
|
|
226
|
+
];
|
|
227
|
+
|
|
228
|
+
const NUMBER_OPERATORS: ExpressionOperator[] = [
|
|
229
|
+
{ value: '=', label: 'equals' },
|
|
230
|
+
{ value: '!=', label: 'does not equal' },
|
|
231
|
+
{ value: '>', label: 'greater than' },
|
|
232
|
+
{ value: '>=', label: 'at least' },
|
|
233
|
+
{ value: '<', label: 'less than' },
|
|
234
|
+
{ value: '<=', label: 'at most' },
|
|
235
|
+
];
|
|
236
|
+
|
|
237
|
+
const DATE_OPERATORS: ExpressionOperator[] = [
|
|
238
|
+
{ value: '=', label: 'on' },
|
|
239
|
+
{ value: '>', label: 'after' },
|
|
240
|
+
{ value: '>=', label: 'on or after' },
|
|
241
|
+
{ value: '<', label: 'before' },
|
|
242
|
+
{ value: '<=', label: 'on or before' },
|
|
243
|
+
];
|
|
244
|
+
|
|
245
|
+
const BOOLEAN_OPERATORS: ExpressionOperator[] = [
|
|
246
|
+
{ value: '=', label: 'is' },
|
|
247
|
+
{ value: '!=', label: 'is not' },
|
|
248
|
+
];
|
|
249
|
+
|
|
250
|
+
const PICKLIST_OPERATORS: ExpressionOperator[] = [
|
|
251
|
+
{ value: '=', label: 'equals' },
|
|
252
|
+
{ value: '!=', label: 'does not equal' },
|
|
253
|
+
];
|
|
254
|
+
|
|
255
|
+
/** The operator catalogue a resource type gets when it names none itself. */
|
|
256
|
+
export function defaultOperatorsFor(
|
|
257
|
+
type?: ExpressionValueType,
|
|
258
|
+
): ExpressionOperator[] {
|
|
259
|
+
switch (type) {
|
|
260
|
+
case 'number':
|
|
261
|
+
case 'currency':
|
|
262
|
+
return NUMBER_OPERATORS;
|
|
263
|
+
case 'date':
|
|
264
|
+
return DATE_OPERATORS;
|
|
265
|
+
case 'boolean':
|
|
266
|
+
return BOOLEAN_OPERATORS;
|
|
267
|
+
case 'picklist':
|
|
268
|
+
return PICKLIST_OPERATORS;
|
|
269
|
+
default:
|
|
270
|
+
return TEXT_OPERATORS;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
// Row ids must be stable and must not come from Math.random or Date.now
|
|
275
|
+
// (realm law). A module counter is deterministic per module load.
|
|
276
|
+
let CONDITION_SEQ = 0;
|
|
277
|
+
|
|
278
|
+
/** Mint an empty condition row. Pass `id` to keep an id across a rebuild. */
|
|
279
|
+
export function newCondition(
|
|
280
|
+
partial: Partial<ExpressionCondition> = {},
|
|
281
|
+
): ExpressionCondition {
|
|
282
|
+
CONDITION_SEQ += 1;
|
|
283
|
+
return {
|
|
284
|
+
id: partial.id ?? `xc${CONDITION_SEQ}`,
|
|
285
|
+
targetPath: partial.targetPath ?? '',
|
|
286
|
+
operator: partial.operator ?? '',
|
|
287
|
+
value: partial.value ?? '',
|
|
288
|
+
valueKind: partial.valueKind ?? 'literal',
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
// ── Custom-logic tokens ──────────────────────────────────────────────────
|
|
293
|
+
//
|
|
294
|
+
// The custom-logic string is the one place row POSITION is load-bearing, so
|
|
295
|
+
// it is the one place a delete or a move can corrupt data. We never rewrite
|
|
296
|
+
// it with string replacement or index arithmetic. We tokenise it, map each
|
|
297
|
+
// numeric reference through a caller-supplied id-derived remap, repair the
|
|
298
|
+
// structure the removal broke, and re-serialise. Anything we cannot repair is
|
|
299
|
+
// left in place for `validateCustomLogic` to report — a silent repair of a
|
|
300
|
+
// rule the user cannot see is worse than a visible error.
|
|
301
|
+
|
|
302
|
+
export type LogicTokenKind = 'ref' | 'op' | 'open' | 'close' | 'other';
|
|
303
|
+
|
|
304
|
+
export interface LogicToken {
|
|
305
|
+
kind: LogicTokenKind;
|
|
306
|
+
/** verbatim source text; operator casing survives a rewrite */
|
|
307
|
+
text: string;
|
|
308
|
+
/** 1-based row reference, `ref` tokens only */
|
|
309
|
+
index?: number;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
const LOGIC_SCAN = /\d+|\(|\)|[A-Za-z_]+|[^\s]/g;
|
|
313
|
+
const LOGIC_WORDS = new Set(['AND', 'OR', 'NOT']);
|
|
314
|
+
|
|
315
|
+
function isBinaryOp(token: LogicToken): boolean {
|
|
316
|
+
return token.kind === 'op' && token.text.toUpperCase() !== 'NOT';
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
/** Split a custom-logic string into tokens. Whitespace is dropped —
|
|
320
|
+
* serialisation regenerates it — and unrecognised text is preserved as
|
|
321
|
+
* `other` so the validator can point at it. */
|
|
322
|
+
export function tokenizeLogic(source: string): LogicToken[] {
|
|
323
|
+
let out: LogicToken[] = [];
|
|
324
|
+
LOGIC_SCAN.lastIndex = 0;
|
|
325
|
+
let match = LOGIC_SCAN.exec(source);
|
|
326
|
+
while (match) {
|
|
327
|
+
let text = match[0];
|
|
328
|
+
if (/^\d+$/.test(text)) {
|
|
329
|
+
out.push({ kind: 'ref', text, index: Number(text) });
|
|
330
|
+
} else if (text === '(') {
|
|
331
|
+
out.push({ kind: 'open', text });
|
|
332
|
+
} else if (text === ')') {
|
|
333
|
+
out.push({ kind: 'close', text });
|
|
334
|
+
} else if (LOGIC_WORDS.has(text.toUpperCase())) {
|
|
335
|
+
out.push({ kind: 'op', text });
|
|
336
|
+
} else {
|
|
337
|
+
out.push({ kind: 'other', text });
|
|
338
|
+
}
|
|
339
|
+
match = LOGIC_SCAN.exec(source);
|
|
340
|
+
}
|
|
341
|
+
return out;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
/** Tokens back to a canonically spaced string. */
|
|
345
|
+
export function serializeLogic(tokens: LogicToken[]): string {
|
|
346
|
+
let out = '';
|
|
347
|
+
for (let token of tokens) {
|
|
348
|
+
let space = out.length > 0 && token.kind !== 'close' && !out.endsWith('(');
|
|
349
|
+
out += space ? ` ${token.text}` : token.text;
|
|
350
|
+
}
|
|
351
|
+
return out;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
function significant(
|
|
355
|
+
tokens: LogicToken[],
|
|
356
|
+
removed: boolean[],
|
|
357
|
+
from: number,
|
|
358
|
+
step: number,
|
|
359
|
+
): number {
|
|
360
|
+
let i = from;
|
|
361
|
+
while (i >= 0 && i < tokens.length) {
|
|
362
|
+
if (!removed[i]) {
|
|
363
|
+
return i;
|
|
364
|
+
}
|
|
365
|
+
i += step;
|
|
366
|
+
}
|
|
367
|
+
return -1;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
// Structural repair after references were dropped: no dangling operators, no
|
|
371
|
+
// empty groups, no operator hanging off the start or end of a group.
|
|
372
|
+
function cleanupTokens(tokens: LogicToken[], removed: boolean[]): void {
|
|
373
|
+
let changed = true;
|
|
374
|
+
let guard = 0;
|
|
375
|
+
while (changed && guard < 32) {
|
|
376
|
+
changed = false;
|
|
377
|
+
guard += 1;
|
|
378
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
379
|
+
if (removed[i]) {
|
|
380
|
+
continue;
|
|
381
|
+
}
|
|
382
|
+
let token = tokens[i]!;
|
|
383
|
+
let prev = significant(tokens, removed, i - 1, -1);
|
|
384
|
+
let next = significant(tokens, removed, i + 1, 1);
|
|
385
|
+
// an empty group
|
|
386
|
+
if (token.kind === 'open' && next >= 0 && tokens[next]!.kind === 'close') {
|
|
387
|
+
removed[i] = true;
|
|
388
|
+
removed[next] = true;
|
|
389
|
+
let before = significant(tokens, removed, i - 1, -1);
|
|
390
|
+
let after = significant(tokens, removed, next + 1, 1);
|
|
391
|
+
if (before >= 0 && isBinaryOp(tokens[before]!)) {
|
|
392
|
+
removed[before] = true;
|
|
393
|
+
} else if (after >= 0 && isBinaryOp(tokens[after]!)) {
|
|
394
|
+
removed[after] = true;
|
|
395
|
+
}
|
|
396
|
+
changed = true;
|
|
397
|
+
continue;
|
|
398
|
+
}
|
|
399
|
+
if (!isBinaryOp(token)) {
|
|
400
|
+
continue;
|
|
401
|
+
}
|
|
402
|
+
// a binary operator with nothing to its left, or nothing to its right
|
|
403
|
+
let leftEmpty = prev < 0 || tokens[prev]!.kind === 'open';
|
|
404
|
+
let rightEmpty = next < 0 || tokens[next]!.kind === 'close';
|
|
405
|
+
if (leftEmpty || rightEmpty) {
|
|
406
|
+
removed[i] = true;
|
|
407
|
+
changed = true;
|
|
408
|
+
continue;
|
|
409
|
+
}
|
|
410
|
+
// two binary operators in a row — keep the first
|
|
411
|
+
if (isBinaryOp(tokens[next]!)) {
|
|
412
|
+
removed[next] = true;
|
|
413
|
+
changed = true;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
// a group wrapping exactly one reference adds nothing
|
|
417
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
418
|
+
if (removed[i] || tokens[i]!.kind !== 'open') {
|
|
419
|
+
continue;
|
|
420
|
+
}
|
|
421
|
+
let a = significant(tokens, removed, i + 1, 1);
|
|
422
|
+
if (a < 0 || tokens[a]!.kind !== 'ref') {
|
|
423
|
+
continue;
|
|
424
|
+
}
|
|
425
|
+
let b = significant(tokens, removed, a + 1, 1);
|
|
426
|
+
if (b >= 0 && tokens[b]!.kind === 'close') {
|
|
427
|
+
removed[i] = true;
|
|
428
|
+
removed[b] = true;
|
|
429
|
+
changed = true;
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
// a group wrapping the WHOLE expression adds nothing either
|
|
433
|
+
let head = significant(tokens, removed, 0, 1);
|
|
434
|
+
if (head >= 0 && tokens[head]!.kind === 'open') {
|
|
435
|
+
let depth = 0;
|
|
436
|
+
let match = -1;
|
|
437
|
+
for (let i = head; i < tokens.length; i++) {
|
|
438
|
+
if (removed[i]) {
|
|
439
|
+
continue;
|
|
440
|
+
}
|
|
441
|
+
if (tokens[i]!.kind === 'open') {
|
|
442
|
+
depth += 1;
|
|
443
|
+
} else if (tokens[i]!.kind === 'close') {
|
|
444
|
+
depth -= 1;
|
|
445
|
+
if (depth === 0) {
|
|
446
|
+
match = i;
|
|
447
|
+
break;
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
if (match >= 0 && match === significant(tokens, removed, tokens.length - 1, -1)) {
|
|
452
|
+
removed[head] = true;
|
|
453
|
+
removed[match] = true;
|
|
454
|
+
changed = true;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
/**
|
|
461
|
+
* Rewrite every row reference in a custom-logic string.
|
|
462
|
+
*
|
|
463
|
+
* `remap` receives a 1-based row number and returns its new 1-based number,
|
|
464
|
+
* or `null` if that row no longer exists. Callers derive it from STABLE ROW
|
|
465
|
+
* IDS (`before.indexOf(id)` → `after.indexOf(id)`), never from arithmetic —
|
|
466
|
+
* one code path serves delete, move, duplicate and sort, so there is one
|
|
467
|
+
* place for the renumbering bug to live and it is covered by all four.
|
|
468
|
+
*
|
|
469
|
+
* A reference the caller does not recognise is left untouched rather than
|
|
470
|
+
* dropped, so `validateCustomLogic` reports it instead of the editor quietly
|
|
471
|
+
* deleting a clause the author typed.
|
|
472
|
+
*/
|
|
473
|
+
export function remapCustomLogic(
|
|
474
|
+
source: string,
|
|
475
|
+
remap: (index: number) => number | null,
|
|
476
|
+
): string {
|
|
477
|
+
let tokens = tokenizeLogic(source);
|
|
478
|
+
let removed: boolean[] = tokens.map(() => false);
|
|
479
|
+
|
|
480
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
481
|
+
let token = tokens[i]!;
|
|
482
|
+
if (token.kind !== 'ref' || token.index === undefined) {
|
|
483
|
+
continue;
|
|
484
|
+
}
|
|
485
|
+
let next = remap(token.index);
|
|
486
|
+
if (next === null) {
|
|
487
|
+
removed[i] = true;
|
|
488
|
+
// the reference took an operator with it: prefer the one before it,
|
|
489
|
+
// stepping over any prefix NOTs, and fall back to the one after.
|
|
490
|
+
let prev = significant(tokens, removed, i - 1, -1);
|
|
491
|
+
while (prev >= 0 && tokens[prev]!.kind === 'op' && !isBinaryOp(tokens[prev]!)) {
|
|
492
|
+
removed[prev] = true;
|
|
493
|
+
prev = significant(tokens, removed, prev - 1, -1);
|
|
494
|
+
}
|
|
495
|
+
if (prev >= 0 && isBinaryOp(tokens[prev]!)) {
|
|
496
|
+
removed[prev] = true;
|
|
497
|
+
} else {
|
|
498
|
+
let after = significant(tokens, removed, i + 1, 1);
|
|
499
|
+
if (after >= 0 && isBinaryOp(tokens[after]!)) {
|
|
500
|
+
removed[after] = true;
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
} else {
|
|
504
|
+
tokens[i] = { kind: 'ref', text: String(next), index: next };
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
cleanupTokens(tokens, removed);
|
|
509
|
+
return serializeLogic(tokens.filter((_t, i) => !removed[i]));
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
/** `1 AND 2 AND 3` for `all`, `1 OR 2 OR 3` for `any`. */
|
|
513
|
+
export function seedCustomLogic(count: number, logic: ExpressionLogic): string {
|
|
514
|
+
if (count < 1) {
|
|
515
|
+
return '';
|
|
516
|
+
}
|
|
517
|
+
let joiner = logic === 'any' ? 'OR' : 'AND';
|
|
518
|
+
let parts: string[] = [];
|
|
519
|
+
for (let i = 1; i <= count; i++) {
|
|
520
|
+
parts.push(String(i));
|
|
521
|
+
}
|
|
522
|
+
return parts.join(` ${joiner} `);
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
/** Append a reference to a new row, reusing the joiner already in the string. */
|
|
526
|
+
export function appendLogicRef(source: string, index: number): string {
|
|
527
|
+
let trimmed = source.trim();
|
|
528
|
+
if (!trimmed) {
|
|
529
|
+
return String(index);
|
|
530
|
+
}
|
|
531
|
+
let tokens = tokenizeLogic(trimmed);
|
|
532
|
+
let joiner = 'AND';
|
|
533
|
+
for (let token of tokens) {
|
|
534
|
+
if (isBinaryOp(token)) {
|
|
535
|
+
joiner = token.text;
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
return `${trimmed} ${joiner} ${index}`;
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
/**
|
|
542
|
+
* Grammar + reference check for a custom-logic string. Returns issues; it
|
|
543
|
+
* never throws and never edits. `count` is the number of condition rows.
|
|
544
|
+
*/
|
|
545
|
+
export function validateCustomLogic(
|
|
546
|
+
source: string,
|
|
547
|
+
count: number,
|
|
548
|
+
): ExpressionIssue[] {
|
|
549
|
+
let issues: ExpressionIssue[] = [];
|
|
550
|
+
let tokens = tokenizeLogic(source);
|
|
551
|
+
if (tokens.length === 0) {
|
|
552
|
+
if (count > 0) {
|
|
553
|
+
issues.push({
|
|
554
|
+
severity: 'error',
|
|
555
|
+
message: 'Custom logic is empty. Reference each condition by number.',
|
|
556
|
+
});
|
|
557
|
+
}
|
|
558
|
+
return issues;
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
let depth = 0;
|
|
562
|
+
let expectTerm = true;
|
|
563
|
+
let seen = new Set<number>();
|
|
564
|
+
let structural = false;
|
|
565
|
+
|
|
566
|
+
for (let token of tokens) {
|
|
567
|
+
if (token.kind === 'other') {
|
|
568
|
+
issues.push({
|
|
569
|
+
severity: 'error',
|
|
570
|
+
message: `“${token.text}” is not valid in custom logic. Use condition numbers, AND, OR, NOT and parentheses.`,
|
|
571
|
+
});
|
|
572
|
+
structural = true;
|
|
573
|
+
continue;
|
|
574
|
+
}
|
|
575
|
+
if (token.kind === 'open') {
|
|
576
|
+
if (!expectTerm) {
|
|
577
|
+
structural = true;
|
|
578
|
+
}
|
|
579
|
+
depth += 1;
|
|
580
|
+
expectTerm = true;
|
|
581
|
+
} else if (token.kind === 'close') {
|
|
582
|
+
if (expectTerm) {
|
|
583
|
+
structural = true;
|
|
584
|
+
}
|
|
585
|
+
depth -= 1;
|
|
586
|
+
if (depth < 0) {
|
|
587
|
+
issues.push({
|
|
588
|
+
severity: 'error',
|
|
589
|
+
message: 'Custom logic has an unmatched “)”.',
|
|
590
|
+
});
|
|
591
|
+
return issues;
|
|
592
|
+
}
|
|
593
|
+
expectTerm = false;
|
|
594
|
+
} else if (token.kind === 'ref') {
|
|
595
|
+
if (!expectTerm) {
|
|
596
|
+
structural = true;
|
|
597
|
+
}
|
|
598
|
+
let index = token.index ?? 0;
|
|
599
|
+
seen.add(index);
|
|
600
|
+
if (index < 1 || index > count) {
|
|
601
|
+
issues.push({
|
|
602
|
+
severity: 'error',
|
|
603
|
+
message:
|
|
604
|
+
count > 0
|
|
605
|
+
? `Custom logic references condition ${index}, but there ${count === 1 ? 'is' : 'are'} only ${count}.`
|
|
606
|
+
: `Custom logic references condition ${index}, but there are no conditions.`,
|
|
607
|
+
});
|
|
608
|
+
}
|
|
609
|
+
expectTerm = false;
|
|
610
|
+
} else if (isBinaryOp(token)) {
|
|
611
|
+
if (expectTerm) {
|
|
612
|
+
structural = true;
|
|
613
|
+
}
|
|
614
|
+
expectTerm = true;
|
|
615
|
+
} else {
|
|
616
|
+
// NOT — a prefix operator, so a term is still expected after it
|
|
617
|
+
if (!expectTerm) {
|
|
618
|
+
structural = true;
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
if (depth > 0) {
|
|
624
|
+
issues.push({
|
|
625
|
+
severity: 'error',
|
|
626
|
+
message: `Custom logic is missing ${depth === 1 ? 'a closing “)”' : `${depth} closing parentheses`}.`,
|
|
627
|
+
});
|
|
628
|
+
}
|
|
629
|
+
if (expectTerm || structural) {
|
|
630
|
+
issues.push({
|
|
631
|
+
severity: 'error',
|
|
632
|
+
message:
|
|
633
|
+
'Custom logic is incomplete — every AND/OR needs a condition number on both sides.',
|
|
634
|
+
});
|
|
635
|
+
}
|
|
636
|
+
for (let i = 1; i <= count; i++) {
|
|
637
|
+
if (!seen.has(i)) {
|
|
638
|
+
issues.push({
|
|
639
|
+
severity: 'warning',
|
|
640
|
+
message: `Condition ${i} is not used by the custom logic and will be ignored.`,
|
|
641
|
+
});
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
return issues;
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
// ── BXL composition — string building, never evaluation ──────────────────
|
|
648
|
+
|
|
649
|
+
/** Quote a raw value for BXL. Numbers and booleans stay literal; everything
|
|
650
|
+
* else becomes a JSON double-quoted string, which is also how a stray quote
|
|
651
|
+
* or backslash stays safe. An unparseable number is quoted rather than
|
|
652
|
+
* emitted raw, so the failure is visible in the composed source. */
|
|
653
|
+
export function quoteBxlValue(raw: string, type?: ExpressionValueType): string {
|
|
654
|
+
let value = raw ?? '';
|
|
655
|
+
if (type === 'boolean') {
|
|
656
|
+
let lowered = value.trim().toLowerCase();
|
|
657
|
+
if (lowered === 'true' || lowered === 'false') {
|
|
658
|
+
return lowered;
|
|
659
|
+
}
|
|
660
|
+
return JSON.stringify(value);
|
|
661
|
+
}
|
|
662
|
+
if (type === 'number' || type === 'currency') {
|
|
663
|
+
let cleaned = value.replace(/[,\s]/g, '');
|
|
664
|
+
if (cleaned !== '' && Number.isFinite(Number(cleaned))) {
|
|
665
|
+
return cleaned;
|
|
666
|
+
}
|
|
667
|
+
return JSON.stringify(value);
|
|
668
|
+
}
|
|
669
|
+
return JSON.stringify(value);
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
/** Resolve the resource behind a condition's `targetPath` (whole-string
|
|
673
|
+
* match — predicate paths contain dots, brackets, quotes and spaces). */
|
|
674
|
+
export function resourceFor(
|
|
675
|
+
condition: ExpressionCondition,
|
|
676
|
+
resources: ExpressionResource[],
|
|
677
|
+
): ExpressionResource | undefined {
|
|
678
|
+
return resources.find((r) => r.value === condition.targetPath);
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
/** Resolve the operator spec behind a condition's operator token. */
|
|
682
|
+
export function operatorFor(
|
|
683
|
+
condition: ExpressionCondition,
|
|
684
|
+
operators: ExpressionOperator[],
|
|
685
|
+
): ExpressionOperator | undefined {
|
|
686
|
+
return operators.find((o) => o.value === condition.operator);
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
export function operatorCatalogue(
|
|
690
|
+
resource: ExpressionResource | undefined,
|
|
691
|
+
fallback: ExpressionOperator[] | undefined,
|
|
692
|
+
): ExpressionOperator[] {
|
|
693
|
+
return resource?.operators ?? fallback ?? defaultOperatorsFor(resource?.type);
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
/** BXL for one condition, or `''` when the row is not complete enough to
|
|
697
|
+
* compose. Composition only — nothing is parsed or run. */
|
|
698
|
+
export function conditionToBxl(
|
|
699
|
+
condition: ExpressionCondition,
|
|
700
|
+
resources: ExpressionResource[] = [],
|
|
701
|
+
fallbackOperators?: ExpressionOperator[],
|
|
702
|
+
): string {
|
|
703
|
+
if (!condition.targetPath || !condition.operator) {
|
|
704
|
+
return '';
|
|
705
|
+
}
|
|
706
|
+
let resource = resourceFor(condition, resources);
|
|
707
|
+
let operator = operatorFor(
|
|
708
|
+
condition,
|
|
709
|
+
operatorCatalogue(resource, fallbackOperators),
|
|
710
|
+
);
|
|
711
|
+
let unary = operator?.arity === 0;
|
|
712
|
+
if (!unary && (condition.value === undefined || condition.value === '')) {
|
|
713
|
+
return '';
|
|
714
|
+
}
|
|
715
|
+
let template =
|
|
716
|
+
operator?.bxl ?? (unary ? '{path} {op}' : '{path} {op} {value}');
|
|
717
|
+
// a `path` value is another BXL label path from the same catalogue and goes
|
|
718
|
+
// in verbatim; a `literal` is quoted for its type
|
|
719
|
+
let right =
|
|
720
|
+
condition.valueKind === 'path'
|
|
721
|
+
? condition.value
|
|
722
|
+
: quoteBxlValue(condition.value, resource?.type);
|
|
723
|
+
// replacer functions, so a `$` in a path or value is never a substitution pattern
|
|
724
|
+
return template
|
|
725
|
+
.replace('{path}', () => condition.targetPath)
|
|
726
|
+
.replace('{op}', () => condition.operator)
|
|
727
|
+
.replace('{value}', () => right);
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
/** Prose form of a condition — `Total greater than 10,000`. */
|
|
731
|
+
export function conditionSummary(
|
|
732
|
+
condition: ExpressionCondition,
|
|
733
|
+
resources: ExpressionResource[] = [],
|
|
734
|
+
fallbackOperators?: ExpressionOperator[],
|
|
735
|
+
): string {
|
|
736
|
+
let resource = resourceFor(condition, resources);
|
|
737
|
+
let operator = operatorFor(
|
|
738
|
+
condition,
|
|
739
|
+
operatorCatalogue(resource, fallbackOperators),
|
|
740
|
+
);
|
|
741
|
+
let left = resource?.label ?? condition.targetPath;
|
|
742
|
+
if (!left) {
|
|
743
|
+
return 'New condition';
|
|
744
|
+
}
|
|
745
|
+
let middle = operator?.summary ?? operator?.label ?? condition.operator;
|
|
746
|
+
if (!middle) {
|
|
747
|
+
return left;
|
|
748
|
+
}
|
|
749
|
+
if (operator?.arity === 0) {
|
|
750
|
+
return `${left} ${middle}`;
|
|
751
|
+
}
|
|
752
|
+
if (condition.value === '') {
|
|
753
|
+
return `${left} ${middle} …`;
|
|
754
|
+
}
|
|
755
|
+
if (condition.valueKind === 'path') {
|
|
756
|
+
let other = resources.find((r) => r.value === condition.value);
|
|
757
|
+
return `${left} ${middle} ${other?.label ?? condition.value}`;
|
|
758
|
+
}
|
|
759
|
+
return `${left} ${middle} “${condition.value}”`;
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
export interface BxlComposeOptions {
|
|
763
|
+
resources?: ExpressionResource[];
|
|
764
|
+
operators?: ExpressionOperator[];
|
|
765
|
+
/** BXL keyword for conjunction — default `and` */
|
|
766
|
+
and?: string;
|
|
767
|
+
/** BXL keyword for disjunction — default `or` */
|
|
768
|
+
or?: string;
|
|
769
|
+
/** BXL keyword for negation — default `not` */
|
|
770
|
+
not?: string;
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
/**
|
|
774
|
+
* Compose the whole expression into a BXL source string.
|
|
775
|
+
*
|
|
776
|
+
* This is the only bridge between the visual builder and `rule.expression`.
|
|
777
|
+
* It is pure string building: the result is handed to the caller to persist,
|
|
778
|
+
* and evaluated somewhere else, fail-closed.
|
|
779
|
+
*
|
|
780
|
+
* `always` composes to `true`. An expression whose rows are all incomplete
|
|
781
|
+
* composes to `''` — an empty expression fails closed downstream, which is
|
|
782
|
+
* the correct reading of "the author has not finished".
|
|
783
|
+
*/
|
|
784
|
+
export function expressionToBxl(
|
|
785
|
+
model: ExpressionModel,
|
|
786
|
+
options: BxlComposeOptions = {},
|
|
787
|
+
): string {
|
|
788
|
+
let and = options.and ?? 'and';
|
|
789
|
+
let or = options.or ?? 'or';
|
|
790
|
+
let not = options.not ?? 'not';
|
|
791
|
+
if (model.logic === 'always') {
|
|
792
|
+
return 'true';
|
|
793
|
+
}
|
|
794
|
+
let parts = model.conditions.map((c) =>
|
|
795
|
+
conditionToBxl(c, options.resources ?? [], options.operators),
|
|
796
|
+
);
|
|
797
|
+
|
|
798
|
+
if (model.logic === 'custom') {
|
|
799
|
+
let tokens = tokenizeLogic(model.customLogic ?? '');
|
|
800
|
+
if (tokens.length === 0) {
|
|
801
|
+
return '';
|
|
802
|
+
}
|
|
803
|
+
let out = '';
|
|
804
|
+
for (let token of tokens) {
|
|
805
|
+
let text: string;
|
|
806
|
+
if (token.kind === 'ref') {
|
|
807
|
+
let part = parts[(token.index ?? 0) - 1];
|
|
808
|
+
if (!part) {
|
|
809
|
+
// an unresolvable reference cannot be silently skipped — the
|
|
810
|
+
// composed source must not read as a weaker rule than authored
|
|
811
|
+
return '';
|
|
812
|
+
}
|
|
813
|
+
text = `(${part})`;
|
|
814
|
+
} else if (token.kind === 'op') {
|
|
815
|
+
let upper = token.text.toUpperCase();
|
|
816
|
+
text = upper === 'AND' ? and : upper === 'OR' ? or : not;
|
|
817
|
+
} else if (token.kind === 'other') {
|
|
818
|
+
return '';
|
|
819
|
+
} else {
|
|
820
|
+
text = token.text;
|
|
821
|
+
}
|
|
822
|
+
let space = out.length > 0 && token.kind !== 'close' && !out.endsWith('(');
|
|
823
|
+
out += space ? ` ${text}` : text;
|
|
824
|
+
}
|
|
825
|
+
return out;
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
let usable = parts.filter((p) => p !== '');
|
|
829
|
+
if (usable.length === 0) {
|
|
830
|
+
return '';
|
|
831
|
+
}
|
|
832
|
+
if (usable.length === 1) {
|
|
833
|
+
return usable[0]!;
|
|
834
|
+
}
|
|
835
|
+
let joiner = model.logic === 'any' ? or : and;
|
|
836
|
+
return usable.map((p) => `(${p})`).join(` ${joiner} `);
|
|
837
|
+
}
|