@lapismd/design-core 0.1.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/CHANGELOG.md +14 -0
- package/LICENSE.md +4 -0
- package/README.md +260 -0
- package/package.json +290 -0
- package/spec/src/styling-and-themes.md +188 -0
- package/src/lib/data-ui-contract.ts +263 -0
- package/src/lib/data-ui-host-catalog.ts +278 -0
- package/src/lib/data-ui-host.ts +69 -0
- package/src/lib/hooks/is-mobile.svelte.ts +9 -0
- package/src/lib/overlay-portal-context.ts +57 -0
- package/src/lib/utils.ts +18 -0
- package/src/shared/ai/chat.css +1551 -0
- package/src/shared/ai/chat.tokens.ts +25 -0
- package/src/shared/ai/chat.ts +70 -0
- package/src/shared/ai/composer/Composer.svelte +195 -0
- package/src/shared/ai/composer/index.ts +1 -0
- package/src/shared/ai/composer-behavior.ts +57 -0
- package/src/shared/ai/composer-drawer/ComposerDrawer.svelte +61 -0
- package/src/shared/ai/composer-drawer/index.ts +1 -0
- package/src/shared/ai/composer-input/ComposerInput.svelte +511 -0
- package/src/shared/ai/composer-input/index.ts +1 -0
- package/src/shared/ai/composer-token/ComposerToken.svelte +34 -0
- package/src/shared/ai/composer-token/index.ts +1 -0
- package/src/shared/ai/composer-tokens.ts +468 -0
- package/src/shared/ai/context.svelte.ts +83 -0
- package/src/shared/ai/dictation-button/DictationButton.svelte +77 -0
- package/src/shared/ai/dictation-button/index.ts +1 -0
- package/src/shared/ai/experimental/emoji-picker/EmojiPicker.svelte +177 -0
- package/src/shared/ai/experimental/emoji-picker/index.ts +5 -0
- package/src/shared/ai/experimental/index.ts +22 -0
- package/src/shared/ai/experimental/reaction-bar/ReactionBar.svelte +84 -0
- package/src/shared/ai/experimental/reaction-bar/index.ts +1 -0
- package/src/shared/ai/experimental/reasoning/Reasoning.svelte +70 -0
- package/src/shared/ai/experimental/reasoning/index.ts +1 -0
- package/src/shared/ai/experimental/typing-indicator/TypingIndicator.svelte +41 -0
- package/src/shared/ai/experimental/typing-indicator/index.ts +1 -0
- package/src/shared/ai/experimental/unread-divider/UnreadDivider.svelte +26 -0
- package/src/shared/ai/experimental/unread-divider/index.ts +1 -0
- package/src/shared/ai/index.ts +2 -0
- package/src/shared/ai/layout/Layout.svelte +141 -0
- package/src/shared/ai/layout/index.ts +1 -0
- package/src/shared/ai/layout-scroll-button/LayoutScrollButton.svelte +48 -0
- package/src/shared/ai/layout-scroll-button/index.ts +1 -0
- package/src/shared/ai/message/Message.svelte +71 -0
- package/src/shared/ai/message/index.ts +1 -0
- package/src/shared/ai/message-bubble/MessageBubble.svelte +62 -0
- package/src/shared/ai/message-bubble/index.ts +1 -0
- package/src/shared/ai/message-list/MessageList.svelte +133 -0
- package/src/shared/ai/message-list/index.ts +1 -0
- package/src/shared/ai/message-metadata/MessageMetadata.svelte +90 -0
- package/src/shared/ai/message-metadata/index.ts +1 -0
- package/src/shared/ai/new-messages.svelte.ts +80 -0
- package/src/shared/ai/send-button/SendButton.svelte +51 -0
- package/src/shared/ai/send-button/index.ts +1 -0
- package/src/shared/ai/speech-recognition.svelte.ts +329 -0
- package/src/shared/ai/stream-scroll.svelte.ts +238 -0
- package/src/shared/ai/system-message/SystemMessage.svelte +43 -0
- package/src/shared/ai/system-message/index.ts +1 -0
- package/src/shared/ai/tokenized-text/TokenizedText.svelte +76 -0
- package/src/shared/ai/tokenized-text/index.ts +1 -0
- package/src/shared/ai/tool-calls/ToolCalls.svelte +185 -0
- package/src/shared/ai/tool-calls/index.ts +1 -0
- package/src/shared/ai/trigger-menu.ts +154 -0
- package/src/shared/ai/types.ts +144 -0
- package/src/shared/diff/core/file-tree.ts +83 -0
- package/src/shared/diff/core/index.ts +58 -0
- package/src/shared/diff/core/merge/ATTRIBUTION.mergeweave.md +12 -0
- package/src/shared/diff/core/merge/actions.ts +142 -0
- package/src/shared/diff/core/merge/blocks.ts +120 -0
- package/src/shared/diff/core/merge/diff.ts +67 -0
- package/src/shared/diff/core/merge/index.ts +32 -0
- package/src/shared/diff/core/merge/inline-diff.ts +35 -0
- package/src/shared/diff/core/merge/lines.ts +44 -0
- package/src/shared/diff/core/merge/one-way.ts +101 -0
- package/src/shared/diff/core/merge/options.ts +25 -0
- package/src/shared/diff/core/merge/render-model.ts +591 -0
- package/src/shared/diff/core/merge/three-way.ts +267 -0
- package/src/shared/diff/core/merge/types.ts +61 -0
- package/src/shared/diff/core/unified-diff.ts +577 -0
- package/src/shared/diff/diff.tokens.css +59 -0
- package/src/shared/diff/diff.tokens.ts +23 -0
- package/src/shared/diff/file-change-stats/FileChangeStats.css +20 -0
- package/src/shared/diff/file-change-stats/FileChangeStats.svelte +35 -0
- package/src/shared/diff/file-change-stats/format-diff-delta.ts +3 -0
- package/src/shared/diff/file-change-stats/index.ts +2 -0
- package/src/shared/diff/file-diff/FileDiff.css +234 -0
- package/src/shared/diff/file-diff/FileDiff.svelte +381 -0
- package/src/shared/diff/file-diff/FileDiffComposer.svelte +61 -0
- package/src/shared/diff/file-diff/expand.ts +43 -0
- package/src/shared/diff/file-diff/highlight.ts +178 -0
- package/src/shared/diff/file-diff/index.ts +9 -0
- package/src/shared/diff/file-diff/language.ts +49 -0
- package/src/shared/diff/file-diff/types.ts +24 -0
- package/src/shared/diff/file-listing/FileListing.css +74 -0
- package/src/shared/diff/file-listing/FileListing.svelte +235 -0
- package/src/shared/diff/file-listing/FileListingViewModeToggle.css +14 -0
- package/src/shared/diff/file-listing/FileListingViewModeToggle.svelte +50 -0
- package/src/shared/diff/file-listing/file-icon.ts +35 -0
- package/src/shared/diff/file-listing/index.ts +9 -0
- package/src/shared/diff/file-listing/types.ts +25 -0
- package/src/shared/diff/index.ts +31 -0
- package/src/shared/diff/merge-editor/MergeEditor.css +481 -0
- package/src/shared/diff/merge-editor/MergeEditor.svelte +702 -0
- package/src/shared/diff/merge-editor/MergeEditorDemo.css +41 -0
- package/src/shared/diff/merge-editor/MergeEditorDemo.svelte +91 -0
- package/src/shared/diff/merge-editor/connector.ts +94 -0
- package/src/shared/diff/merge-editor/demo-fixtures.ts +428 -0
- package/src/shared/diff/merge-editor/index.ts +9 -0
- package/src/shared/diff/merge-editor/mismerge-quicksort-fixture.ts +12 -0
- package/src/shared/diff/merge-editor/quicksort-fixture.ts +6 -0
- package/src/shared/diff/merge-editor/types.ts +11 -0
- package/src/shared/filter/demo-ledger-filter-syntax.ts +132 -0
- package/src/shared/filter/filter-query/filters.ts +375 -0
- package/src/shared/filter/filter-query/highlight.ts +21 -0
- package/src/shared/filter/filter-query/index.ts +23 -0
- package/src/shared/filter/filter-query/parser.ts +710 -0
- package/src/shared/filter/filter-query/query.d.ts +3 -0
- package/src/shared/filter/filter-query/query.grammar +150 -0
- package/src/shared/filter/filter-query/query.js +60 -0
- package/src/shared/filter/filter-query/query.terms.js +32 -0
- package/src/shared/filter/index.ts +35 -0
- package/src/shared/filter/power-search/PowerSearch.css +245 -0
- package/src/shared/filter/power-search/PowerSearch.svelte +245 -0
- package/src/shared/filter/power-search/PowerSearchFieldCombobox.svelte +162 -0
- package/src/shared/filter/power-search/index.ts +10 -0
- package/src/shared/filter/power-search/power-search.ts +106 -0
- package/src/shared/filter/search-filter-bar/SearchFilterAutocompleteScrollArea.svelte +29 -0
- package/src/shared/filter/search-filter-bar/SearchFilterBar.css +924 -0
- package/src/shared/filter/search-filter-bar/SearchFilterBar.svelte +246 -0
- package/src/shared/filter/search-filter-bar/SearchFilterFieldAutocomplete.svelte +182 -0
- package/src/shared/filter/search-filter-bar/SearchFilterInput.svelte +412 -0
- package/src/shared/filter/search-filter-bar/SearchFilterPredicateEditor.svelte +270 -0
- package/src/shared/filter/search-filter-bar/SearchFilterValueAutocomplete.svelte +127 -0
- package/src/shared/filter/search-filter-bar/index.ts +15 -0
- package/src/shared/filter/search-filter-bar/search-filter-highlight.ts +56 -0
- package/src/shared/filter/search-filter-bar/search-filter-predicate-chips.ts +410 -0
- package/src/shared/filter/search-filter-bar/search-filter-syntax.ts +334 -0
- package/src/shared/forms/add-section-chooser/AddSectionChooser.css +135 -0
- package/src/shared/forms/add-section-chooser/AddSectionChooser.svelte +118 -0
- package/src/shared/forms/add-section-chooser/index.ts +1 -0
- package/src/shared/forms/autocomplete-input/AutocompleteInput.css +86 -0
- package/src/shared/forms/autocomplete-input/AutocompleteInput.svelte +253 -0
- package/src/shared/forms/autocomplete-input/index.ts +1 -0
- package/src/shared/forms/chip-autocomplete/ChipAutocomplete.css +142 -0
- package/src/shared/forms/chip-autocomplete/ChipAutocomplete.svelte +156 -0
- package/src/shared/forms/chip-autocomplete/index.ts +1 -0
- package/src/shared/forms/code-editor/CodeEditor.css +42 -0
- package/src/shared/forms/code-editor/CodeEditor.svelte +60 -0
- package/src/shared/forms/code-editor/code-editor-language.ts +63 -0
- package/src/shared/forms/code-editor/code-editor-syntax.ts +25 -0
- package/src/shared/forms/code-editor/index.ts +1 -0
- package/src/shared/forms/code-highlighter/CodeHighlighter.css +54 -0
- package/src/shared/forms/code-highlighter/CodeHighlighter.svelte +57 -0
- package/src/shared/forms/code-highlighter/code-highlighter.ts +36 -0
- package/src/shared/forms/code-highlighter/index.ts +2 -0
- package/src/shared/forms/collapsible-item-list/CollapsibleItemList.css +99 -0
- package/src/shared/forms/collapsible-item-list/CollapsibleItemList.svelte +56 -0
- package/src/shared/forms/collapsible-item-list/index.ts +1 -0
- package/src/shared/forms/color-picker/ColorPicker.css +150 -0
- package/src/shared/forms/color-picker/ColorPicker.svelte +149 -0
- package/src/shared/forms/color-picker/color-value.ts +36 -0
- package/src/shared/forms/color-picker/index.ts +6 -0
- package/src/shared/forms/complete-cv-form/CompleteCvForm.css +264 -0
- package/src/shared/forms/complete-cv-form/CompleteCvForm.svelte +305 -0
- package/src/shared/forms/complete-cv-form/PLAN.md +225 -0
- package/src/shared/forms/complete-cv-form/complete-cv-form.model.ts +387 -0
- package/src/shared/forms/complete-cv-form/complete-cv-form.typed-config.ts +1767 -0
- package/src/shared/forms/complete-cv-form/complete-cv-form.types.ts +255 -0
- package/src/shared/forms/complete-cv-form/sample-cv.fixture.ts +11 -0
- package/src/shared/forms/complete-cv-form/sample-cv.fixture.yml +211 -0
- package/src/shared/forms/core/autosize-textarea.ts +35 -0
- package/src/shared/forms/core/builders.ts +291 -0
- package/src/shared/forms/core/code-language-options.ts +28 -0
- package/src/shared/forms/core/core.ts +157 -0
- package/src/shared/forms/core/date-utils.ts +219 -0
- package/src/shared/forms/core/field-review.ts +15 -0
- package/src/shared/forms/core/form-controller.svelte.ts +449 -0
- package/src/shared/forms/core/index.ts +1 -0
- package/src/shared/forms/core/json-patch.ts +128 -0
- package/src/shared/forms/core/markdown-format.ts +39 -0
- package/src/shared/forms/core/patch-review.ts +591 -0
- package/src/shared/forms/core/path-config.ts +428 -0
- package/src/shared/forms/core/path-runtime.ts +70 -0
- package/src/shared/forms/core/path-types.ts +132 -0
- package/src/shared/forms/core/path-utils.ts +102 -0
- package/src/shared/forms/core/reference-utils.ts +168 -0
- package/src/shared/forms/core/registry.ts +101 -0
- package/src/shared/forms/core/review-diff.ts +199 -0
- package/src/shared/forms/core/types.ts +135 -0
- package/src/shared/forms/core/yaml-review-play.ts +16 -0
- package/src/shared/forms/cycle-picker/CyclePicker.css +89 -0
- package/src/shared/forms/cycle-picker/CyclePicker.svelte +165 -0
- package/src/shared/forms/cycle-picker/index.ts +2 -0
- package/src/shared/forms/date-picker/DatePicker.css +193 -0
- package/src/shared/forms/date-picker/DatePicker.svelte +251 -0
- package/src/shared/forms/date-picker/index.ts +17 -0
- package/src/shared/forms/entry-actions/EntryActions.css +93 -0
- package/src/shared/forms/entry-actions/EntryActions.svelte +62 -0
- package/src/shared/forms/entry-actions/index.ts +1 -0
- package/src/shared/forms/field-review-actions/FieldReviewActions.css +38 -0
- package/src/shared/forms/field-review-actions/FieldReviewActions.svelte +42 -0
- package/src/shared/forms/field-review-actions/index.ts +1 -0
- package/src/shared/forms/filter-command-picker/FilterCommandPicker.css +321 -0
- package/src/shared/forms/filter-command-picker/FilterCommandPicker.svelte +382 -0
- package/src/shared/forms/filter-command-picker/index.ts +10 -0
- package/src/shared/forms/filter-command-picker/picker-options.ts +13 -0
- package/src/shared/forms/filter-command-picker/picker-search.ts +123 -0
- package/src/shared/forms/form-add-button/FormAddButton.css +56 -0
- package/src/shared/forms/form-add-button/FormAddButton.svelte +28 -0
- package/src/shared/forms/form-control-row/FormControlRow.css +153 -0
- package/src/shared/forms/form-control-row/index.ts +2 -0
- package/src/shared/forms/form-field/FormField.css +156 -0
- package/src/shared/forms/form-field/FormField.svelte +87 -0
- package/src/shared/forms/form-field/index.ts +1 -0
- package/src/shared/forms/form-placeholder/FormPlaceholder.css +14 -0
- package/src/shared/forms/form-placeholder/FormPlaceholder.svelte +21 -0
- package/src/shared/forms/form-review/ReviewedStringListFormField.svelte +44 -0
- package/src/shared/forms/form-review/ReviewedTextFormField.svelte +64 -0
- package/src/shared/forms/form-review/index.ts +5 -0
- package/src/shared/forms/form-section-header/FormSectionHeader.css +177 -0
- package/src/shared/forms/form-section-header/FormSectionHeader.svelte +135 -0
- package/src/shared/forms/form-section-header/index.ts +1 -0
- package/src/shared/forms/form-sheet/FormSheet.css +99 -0
- package/src/shared/forms/form-sheet/FormSheet.svelte +132 -0
- package/src/shared/forms/form-toolbar/FormToolbar.css +49 -0
- package/src/shared/forms/form-toolbar/FormToolbar.svelte +59 -0
- package/src/shared/forms/form.tokens.css +41 -0
- package/src/shared/forms/form.tokens.ts +58 -0
- package/src/shared/forms/index.ts +131 -0
- package/src/shared/forms/inline-option-picker/InlineOptionPicker.css +147 -0
- package/src/shared/forms/inline-option-picker/InlineOptionPicker.svelte +153 -0
- package/src/shared/forms/inline-option-picker/index.ts +1 -0
- package/src/shared/forms/json-backed-form/JsonBackedForm.css +52 -0
- package/src/shared/forms/json-backed-form/JsonBackedForm.svelte +106 -0
- package/src/shared/forms/json-backed-form/index.ts +1 -0
- package/src/shared/forms/list-editor/ListEditor.css +171 -0
- package/src/shared/forms/list-editor/ListEditor.svelte +232 -0
- package/src/shared/forms/password-input/PasswordInput.css +48 -0
- package/src/shared/forms/password-input/PasswordInput.svelte +57 -0
- package/src/shared/forms/password-input/index.ts +1 -0
- package/src/shared/forms/patchable-form/PatchableForm.svelte +136 -0
- package/src/shared/forms/patchable-form/field-review-context.ts +78 -0
- package/src/shared/forms/patchable-form/index.ts +2 -0
- package/src/shared/forms/reference-picker/ReferencePicker.css +338 -0
- package/src/shared/forms/reference-picker/ReferencePicker.svelte +422 -0
- package/src/shared/forms/reference-picker/ReferencePreview.css +126 -0
- package/src/shared/forms/reference-picker/ReferencePreview.svelte +71 -0
- package/src/shared/forms/reference-picker/index.ts +1 -0
- package/src/shared/forms/secret-field/SecretField.css +29 -0
- package/src/shared/forms/secret-field/SecretField.svelte +101 -0
- package/src/shared/forms/secret-field/index.ts +8 -0
- package/src/shared/forms/secret-field/secret-field-value.ts +35 -0
- package/src/shared/forms/segmented-control/SegmentedControl.css +80 -0
- package/src/shared/forms/segmented-control/SegmentedControl.svelte +51 -0
- package/src/shared/forms/segmented-control/index.ts +1 -0
- package/src/shared/forms/sortable-array-item/SortableArrayItem.css +144 -0
- package/src/shared/forms/sortable-array-item/SortableArrayItem.svelte +94 -0
- package/src/shared/forms/structured-form/ConfiguredFormField.svelte +407 -0
- package/src/shared/forms/structured-form/ConfiguredFormGroup.svelte +100 -0
- package/src/shared/forms/structured-form/CurrencyFormControl.story.svelte +31 -0
- package/src/shared/forms/structured-form/FormFieldRenderer.css +86 -0
- package/src/shared/forms/structured-form/FormFieldRenderer.svelte +180 -0
- package/src/shared/forms/structured-form/FormViewRenderer.svelte +38 -0
- package/src/shared/forms/structured-form/RegisteredFieldControl.svelte +221 -0
- package/src/shared/forms/structured-form/StructuredForm.currency-kind.story.ts +9 -0
- package/src/shared/forms/structured-form/StructuredForm.svelte +128 -0
- package/src/shared/forms/structured-form/disclosure-policy.ts +19 -0
- package/src/shared/forms/structured-form/form-renderer-registry.ts +130 -0
- package/src/shared/forms/structured-form/index.ts +3 -0
- package/src/shared/forms/structured-form/structured-form.css +191 -0
- package/src/shared/forms/structured-form/wrapping-text-input.ts +20 -0
- package/src/shared/forms/task-due-calendar/TaskDueCalendar.css +117 -0
- package/src/shared/forms/task-due-calendar/TaskDueCalendar.svelte +72 -0
- package/src/shared/forms/task-due-calendar/index.ts +1 -0
- package/src/shared/forms/time-picker/TimePicker.css +76 -0
- package/src/shared/forms/time-picker/TimePicker.svelte +88 -0
- package/src/shared/forms/time-picker/index.ts +1 -0
- package/src/shared/forms/unified-review-diff/UnifiedReviewDiff.css +72 -0
- package/src/shared/forms/unified-review-diff/UnifiedReviewDiff.svelte +57 -0
- package/src/shared/forms/unified-review-diff/index.ts +1 -0
- package/src/shared/forms/yaml-backed-form/YamlBackedForm.css +52 -0
- package/src/shared/forms/yaml-backed-form/YamlBackedForm.svelte +112 -0
- package/src/shared/forms/yaml-backed-form/index.ts +1 -0
- package/src/shared/forms/yaml-editor/YamlEditor.css +50 -0
- package/src/shared/forms/yaml-editor/YamlEditor.svelte +407 -0
- package/src/shared/forms/yaml-editor/index.ts +1 -0
- package/src/shared/forms/yaml-editor/yaml-editor-runtime.ts +65 -0
- package/src/shared/shadcn/accordion/Accordion.story-sources.ts +12 -0
- package/src/shared/shadcn/accordion/accordion-content.svelte +28 -0
- package/src/shared/shadcn/accordion/accordion-item.svelte +18 -0
- package/src/shared/shadcn/accordion/accordion-trigger.svelte +70 -0
- package/src/shared/shadcn/accordion/accordion.docs-body.md +24 -0
- package/src/shared/shadcn/accordion/accordion.docs.md +30 -0
- package/src/shared/shadcn/accordion/accordion.provenance.json +52 -0
- package/src/shared/shadcn/accordion/accordion.svelte +408 -0
- package/src/shared/shadcn/accordion/accordion.tokens.css +13 -0
- package/src/shared/shadcn/accordion/accordion.tokens.ts +10 -0
- package/src/shared/shadcn/accordion/examples/preview.svelte +50 -0
- package/src/shared/shadcn/accordion/index.ts +21 -0
- package/src/shared/shadcn/alert/alert-action.svelte +22 -0
- package/src/shared/shadcn/alert/alert-description.svelte +22 -0
- package/src/shared/shadcn/alert/alert-title.svelte +22 -0
- package/src/shared/shadcn/alert/alert.docs-body.md +22 -0
- package/src/shared/shadcn/alert/alert.docs.md +28 -0
- package/src/shared/shadcn/alert/alert.provenance.json +52 -0
- package/src/shared/shadcn/alert/alert.svelte +307 -0
- package/src/shared/shadcn/alert/alert.tokens.css +13 -0
- package/src/shared/shadcn/alert/alert.tokens.ts +9 -0
- package/src/shared/shadcn/alert/examples/preview.svelte +36 -0
- package/src/shared/shadcn/alert/index.ts +19 -0
- package/src/shared/shadcn/alert-dialog/alert-dialog-action.svelte +29 -0
- package/src/shared/shadcn/alert-dialog/alert-dialog-cancel.svelte +29 -0
- package/src/shared/shadcn/alert-dialog/alert-dialog-content.svelte +623 -0
- package/src/shared/shadcn/alert-dialog/alert-dialog-description.svelte +18 -0
- package/src/shared/shadcn/alert-dialog/alert-dialog-footer.svelte +22 -0
- package/src/shared/shadcn/alert-dialog/alert-dialog-header.svelte +22 -0
- package/src/shared/shadcn/alert-dialog/alert-dialog-media.svelte +22 -0
- package/src/shared/shadcn/alert-dialog/alert-dialog-overlay.svelte +18 -0
- package/src/shared/shadcn/alert-dialog/alert-dialog-portal.svelte +7 -0
- package/src/shared/shadcn/alert-dialog/alert-dialog-title.svelte +18 -0
- package/src/shared/shadcn/alert-dialog/alert-dialog-trigger.svelte +14 -0
- package/src/shared/shadcn/alert-dialog/alert-dialog.docs-body.md +32 -0
- package/src/shared/shadcn/alert-dialog/alert-dialog.docs.md +38 -0
- package/src/shared/shadcn/alert-dialog/alert-dialog.provenance.json +84 -0
- package/src/shared/shadcn/alert-dialog/alert-dialog.svelte +10 -0
- package/src/shared/shadcn/alert-dialog/alert-dialog.tokens.css +13 -0
- package/src/shared/shadcn/alert-dialog/alert-dialog.tokens.ts +10 -0
- package/src/shared/shadcn/alert-dialog/examples/preview.svelte +25 -0
- package/src/shared/shadcn/alert-dialog/index.ts +44 -0
- package/src/shared/shadcn/badge/badge.docs-body.md +29 -0
- package/src/shared/shadcn/badge/badge.docs.md +35 -0
- package/src/shared/shadcn/badge/badge.provenance.json +40 -0
- package/src/shared/shadcn/badge/badge.svelte +491 -0
- package/src/shared/shadcn/badge/badge.tokens.css +13 -0
- package/src/shared/shadcn/badge/badge.tokens.ts +9 -0
- package/src/shared/shadcn/badge/examples/preview.svelte +35 -0
- package/src/shared/shadcn/badge/index.ts +4 -0
- package/src/shared/shadcn/breadcrumb/breadcrumb-ellipsis.svelte +30 -0
- package/src/shared/shadcn/breadcrumb/breadcrumb-item.svelte +22 -0
- package/src/shared/shadcn/breadcrumb/breadcrumb-link.svelte +33 -0
- package/src/shared/shadcn/breadcrumb/breadcrumb-list.svelte +22 -0
- package/src/shared/shadcn/breadcrumb/breadcrumb-page.svelte +25 -0
- package/src/shared/shadcn/breadcrumb/breadcrumb-separator.svelte +29 -0
- package/src/shared/shadcn/breadcrumb/breadcrumb.docs-body.md +150 -0
- package/src/shared/shadcn/breadcrumb/breadcrumb.docs.md +156 -0
- package/src/shared/shadcn/breadcrumb/breadcrumb.provenance.json +76 -0
- package/src/shared/shadcn/breadcrumb/breadcrumb.svelte +200 -0
- package/src/shared/shadcn/breadcrumb/breadcrumb.tokens.css +13 -0
- package/src/shared/shadcn/breadcrumb/breadcrumb.tokens.ts +10 -0
- package/src/shared/shadcn/breadcrumb/examples/collapsed.svelte +25 -0
- package/src/shared/shadcn/breadcrumb/examples/custom-separator.svelte +26 -0
- package/src/shared/shadcn/breadcrumb/examples/dropdown.svelte +38 -0
- package/src/shared/shadcn/breadcrumb/examples/link-component.svelte +21 -0
- package/src/shared/shadcn/breadcrumb/examples/preview.svelte +36 -0
- package/src/shared/shadcn/breadcrumb/index.ts +30 -0
- package/src/shared/shadcn/button/button.docs-body.md +287 -0
- package/src/shared/shadcn/button/button.docs.md +297 -0
- package/src/shared/shadcn/button/button.provenance.json +58 -0
- package/src/shared/shadcn/button/button.svelte +703 -0
- package/src/shared/shadcn/button/button.tokens.css +17 -0
- package/src/shared/shadcn/button/button.tokens.ts +14 -0
- package/src/shared/shadcn/button/examples/default.svelte +7 -0
- package/src/shared/shadcn/button/examples/destructive.svelte +7 -0
- package/src/shared/shadcn/button/examples/ghost.svelte +7 -0
- package/src/shared/shadcn/button/examples/icon.svelte +10 -0
- package/src/shared/shadcn/button/examples/link.svelte +7 -0
- package/src/shared/shadcn/button/examples/outline.svelte +7 -0
- package/src/shared/shadcn/button/examples/preview.svelte +13 -0
- package/src/shared/shadcn/button/examples/rounded.svelte +12 -0
- package/src/shared/shadcn/button/examples/secondary.svelte +7 -0
- package/src/shared/shadcn/button/examples/size.svelte +27 -0
- package/src/shared/shadcn/button/examples/spinner.svelte +11 -0
- package/src/shared/shadcn/button/examples/with-icon.svelte +10 -0
- package/src/shared/shadcn/button/index.ts +22 -0
- package/src/shared/shadcn/button-group/button-group-separator.svelte +20 -0
- package/src/shared/shadcn/button-group/button-group-text.svelte +35 -0
- package/src/shared/shadcn/button-group/button-group.docs-body.md +426 -0
- package/src/shared/shadcn/button-group/button-group.docs.md +432 -0
- package/src/shared/shadcn/button-group/button-group.provenance.json +60 -0
- package/src/shared/shadcn/button-group/button-group.svelte +358 -0
- package/src/shared/shadcn/button-group/button-group.tokens.css +13 -0
- package/src/shared/shadcn/button-group/button-group.tokens.ts +10 -0
- package/src/shared/shadcn/button-group/examples/dropdown-menu.svelte +63 -0
- package/src/shared/shadcn/button-group/examples/input-group.svelte +51 -0
- package/src/shared/shadcn/button-group/examples/input.svelte +15 -0
- package/src/shared/shadcn/button-group/examples/nested.svelte +26 -0
- package/src/shared/shadcn/button-group/examples/orientation.svelte +21 -0
- package/src/shared/shadcn/button-group/examples/popover.svelte +49 -0
- package/src/shared/shadcn/button-group/examples/preview.svelte +100 -0
- package/src/shared/shadcn/button-group/examples/select.svelte +50 -0
- package/src/shared/shadcn/button-group/examples/separator.svelte +12 -0
- package/src/shared/shadcn/button-group/examples/size.svelte +34 -0
- package/src/shared/shadcn/button-group/examples/split.svelte +15 -0
- package/src/shared/shadcn/button-group/index.ts +23 -0
- package/src/shared/shadcn/card/card-action.svelte +22 -0
- package/src/shared/shadcn/card/card-content.svelte +22 -0
- package/src/shared/shadcn/card/card-description.svelte +22 -0
- package/src/shared/shadcn/card/card-footer.svelte +22 -0
- package/src/shared/shadcn/card/card-header.svelte +22 -0
- package/src/shared/shadcn/card/card-title.svelte +22 -0
- package/src/shared/shadcn/card/card.docs-body.md +112 -0
- package/src/shared/shadcn/card/card.docs.md +118 -0
- package/src/shared/shadcn/card/card.provenance.json +64 -0
- package/src/shared/shadcn/card/card.svelte +400 -0
- package/src/shared/shadcn/card/card.tokens.css +13 -0
- package/src/shared/shadcn/card/card.tokens.ts +9 -0
- package/src/shared/shadcn/card/examples/image.svelte +28 -0
- package/src/shared/shadcn/card/examples/preview-2.svelte +46 -0
- package/src/shared/shadcn/card/examples/preview.svelte +46 -0
- package/src/shared/shadcn/card/examples/spacing-2.svelte +42 -0
- package/src/shared/shadcn/card/examples/spacing.svelte +93 -0
- package/src/shared/shadcn/card/index.ts +27 -0
- package/src/shared/shadcn/checkbox/checkbox.docs-body.md +17 -0
- package/src/shared/shadcn/checkbox/checkbox.docs.md +23 -0
- package/src/shared/shadcn/checkbox/checkbox.provenance.json +40 -0
- package/src/shared/shadcn/checkbox/checkbox.svelte +425 -0
- package/src/shared/shadcn/checkbox/checkbox.tokens.css +13 -0
- package/src/shared/shadcn/checkbox/checkbox.tokens.ts +10 -0
- package/src/shared/shadcn/checkbox/examples/preview.svelte +41 -0
- package/src/shared/shadcn/checkbox/index.ts +8 -0
- package/src/shared/shadcn/code/Code.svelte +39 -0
- package/src/shared/shadcn/code/code.css +30 -0
- package/src/shared/shadcn/code/code.docs.md +33 -0
- package/src/shared/shadcn/code/code.tokens.css +14 -0
- package/src/shared/shadcn/code/code.tokens.ts +12 -0
- package/src/shared/shadcn/code/index.ts +3 -0
- package/src/shared/shadcn/code-block/CodeBlock.svelte +456 -0
- package/src/shared/shadcn/code-block/code-block-helpers.ts +91 -0
- package/src/shared/shadcn/code-block/code-block.css +298 -0
- package/src/shared/shadcn/code-block/code-block.docs.md +48 -0
- package/src/shared/shadcn/code-block/code-block.tokens.css +48 -0
- package/src/shared/shadcn/code-block/code-block.tokens.ts +25 -0
- package/src/shared/shadcn/code-block/highlightRanges.ts +451 -0
- package/src/shared/shadcn/code-block/highlightStyles.ts +76 -0
- package/src/shared/shadcn/code-block/index.ts +59 -0
- package/src/shared/shadcn/code-block/syntax/SyntaxTheme.svelte +32 -0
- package/src/shared/shadcn/code-block/syntax/THIRD_PARTY_LICENSES.md +72 -0
- package/src/shared/shadcn/code-block/syntax/defineSyntaxTheme.ts +111 -0
- package/src/shared/shadcn/code-block/syntax/index.ts +39 -0
- package/src/shared/shadcn/code-block/syntax/presets.ts +293 -0
- package/src/shared/shadcn/code-block/syntax/syntax-theme-context.svelte.ts +17 -0
- package/src/shared/shadcn/code-block/syntax/tokens.css +20 -0
- package/src/shared/shadcn/code-block/syntax/tokens.ts +28 -0
- package/src/shared/shadcn/code-block/tokenizer.ts +534 -0
- package/src/shared/shadcn/collapsible/collapsible-content.svelte +16 -0
- package/src/shared/shadcn/collapsible/collapsible-trigger.svelte +16 -0
- package/src/shared/shadcn/collapsible/collapsible.docs-body.md +23 -0
- package/src/shared/shadcn/collapsible/collapsible.docs.md +29 -0
- package/src/shared/shadcn/collapsible/collapsible.provenance.json +49 -0
- package/src/shared/shadcn/collapsible/collapsible.svelte +18 -0
- package/src/shared/shadcn/collapsible/collapsible.tokens.css +13 -0
- package/src/shared/shadcn/collapsible/collapsible.tokens.ts +10 -0
- package/src/shared/shadcn/collapsible/examples/preview.svelte +30 -0
- package/src/shared/shadcn/collapsible/index.ts +18 -0
- package/src/shared/shadcn/column-canvas/RESPONSIVE_SCROLL_PLAN.md +167 -0
- package/src/shared/shadcn/column-canvas/STICKY_COLUMNS_PLAN.md +84 -0
- package/src/shared/shadcn/column-canvas/column-canvas-body.svelte +53 -0
- package/src/shared/shadcn/column-canvas/column-canvas-close.svelte +43 -0
- package/src/shared/shadcn/column-canvas/column-canvas-collapsed-column.svelte +57 -0
- package/src/shared/shadcn/column-canvas/column-canvas-column-context.svelte.ts +31 -0
- package/src/shared/shadcn/column-canvas/column-canvas-column.svelte +609 -0
- package/src/shared/shadcn/column-canvas/column-canvas-controller.svelte.ts +701 -0
- package/src/shared/shadcn/column-canvas/column-canvas-count.svelte +33 -0
- package/src/shared/shadcn/column-canvas/column-canvas-header-actions.svelte +27 -0
- package/src/shared/shadcn/column-canvas/column-canvas-header.svelte +27 -0
- package/src/shared/shadcn/column-canvas/column-canvas-item.svelte +32 -0
- package/src/shared/shadcn/column-canvas/column-canvas-layout.ts +156 -0
- package/src/shared/shadcn/column-canvas/column-canvas-persistence.ts +165 -0
- package/src/shared/shadcn/column-canvas/column-canvas-title.svelte +31 -0
- package/src/shared/shadcn/column-canvas/column-canvas-toggle.svelte +115 -0
- package/src/shared/shadcn/column-canvas/column-canvas-types.ts +20 -0
- package/src/shared/shadcn/column-canvas/column-canvas.css +498 -0
- package/src/shared/shadcn/column-canvas/column-canvas.demo-data.ts +192 -0
- package/src/shared/shadcn/column-canvas/column-canvas.docs.md +530 -0
- package/src/shared/shadcn/column-canvas/column-canvas.showcase-data.ts +606 -0
- package/src/shared/shadcn/column-canvas/column-canvas.svelte +997 -0
- package/src/shared/shadcn/column-canvas/column-canvas.tokens.css +48 -0
- package/src/shared/shadcn/column-canvas/column-canvas.tokens.ts +30 -0
- package/src/shared/shadcn/column-canvas/context.svelte.ts +70 -0
- package/src/shared/shadcn/column-canvas/index.ts +96 -0
- package/src/shared/shadcn/command/command-dialog.svelte +48 -0
- package/src/shared/shadcn/command/command-empty.svelte +18 -0
- package/src/shared/shadcn/command/command-group.svelte +35 -0
- package/src/shared/shadcn/command/command-input.svelte +34 -0
- package/src/shared/shadcn/command/command-item.svelte +27 -0
- package/src/shared/shadcn/command/command-link-item.svelte +18 -0
- package/src/shared/shadcn/command/command-list.svelte +18 -0
- package/src/shared/shadcn/command/command-loading.svelte +8 -0
- package/src/shared/shadcn/command/command-separator.svelte +18 -0
- package/src/shared/shadcn/command/command-shortcut.svelte +22 -0
- package/src/shared/shadcn/command/command.docs-body.md +79 -0
- package/src/shared/shadcn/command/command.docs.md +85 -0
- package/src/shared/shadcn/command/command.provenance.json +86 -0
- package/src/shared/shadcn/command/command.svelte +536 -0
- package/src/shared/shadcn/command/command.tokens.css +13 -0
- package/src/shared/shadcn/command/command.tokens.ts +10 -0
- package/src/shared/shadcn/command/examples/preview.svelte +50 -0
- package/src/shared/shadcn/command/index.ts +39 -0
- package/src/shared/shadcn/command-view/command-view-empty.svelte +13 -0
- package/src/shared/shadcn/command-view/command-view-filters.svelte +44 -0
- package/src/shared/shadcn/command-view/command-view-footer.svelte +13 -0
- package/src/shared/shadcn/command-view/command-view-group.svelte +8 -0
- package/src/shared/shadcn/command-view/command-view-input.svelte +41 -0
- package/src/shared/shadcn/command-view/command-view-item-description.svelte +22 -0
- package/src/shared/shadcn/command-view/command-view-item-icon.svelte +22 -0
- package/src/shared/shadcn/command-view/command-view-item-label.svelte +22 -0
- package/src/shared/shadcn/command-view/command-view-item.svelte +21 -0
- package/src/shared/shadcn/command-view/command-view-list.svelte +36 -0
- package/src/shared/shadcn/command-view/command-view-shortcut.svelte +22 -0
- package/src/shared/shadcn/command-view/command-view.css +210 -0
- package/src/shared/shadcn/command-view/command-view.docs.md +60 -0
- package/src/shared/shadcn/command-view/command-view.provenance.json +8 -0
- package/src/shared/shadcn/command-view/command-view.svelte +30 -0
- package/src/shared/shadcn/command-view/command-view.tokens.css +21 -0
- package/src/shared/shadcn/command-view/command-view.tokens.ts +20 -0
- package/src/shared/shadcn/command-view/index.ts +46 -0
- package/src/shared/shadcn/context-menu/context-menu-checkbox-item.svelte +704 -0
- package/src/shared/shadcn/context-menu/context-menu-content.svelte +42 -0
- package/src/shared/shadcn/context-menu/context-menu-group-heading.svelte +22 -0
- package/src/shared/shadcn/context-menu/context-menu-group.svelte +12 -0
- package/src/shared/shadcn/context-menu/context-menu-item.svelte +25 -0
- package/src/shared/shadcn/context-menu/context-menu-label.svelte +26 -0
- package/src/shared/shadcn/context-menu/context-menu-portal.svelte +7 -0
- package/src/shared/shadcn/context-menu/context-menu-radio-group.svelte +18 -0
- package/src/shared/shadcn/context-menu/context-menu-radio-item.svelte +38 -0
- package/src/shared/shadcn/context-menu/context-menu-separator.svelte +18 -0
- package/src/shared/shadcn/context-menu/context-menu-shortcut.svelte +22 -0
- package/src/shared/shadcn/context-menu/context-menu-sub-content.svelte +18 -0
- package/src/shared/shadcn/context-menu/context-menu-sub-trigger.svelte +36 -0
- package/src/shared/shadcn/context-menu/context-menu-sub.svelte +8 -0
- package/src/shared/shadcn/context-menu/context-menu-trigger.svelte +32 -0
- package/src/shared/shadcn/context-menu/context-menu.docs-body.md +25 -0
- package/src/shared/shadcn/context-menu/context-menu.docs.md +31 -0
- package/src/shared/shadcn/context-menu/context-menu.provenance.json +106 -0
- package/src/shared/shadcn/context-menu/context-menu.svelte +17 -0
- package/src/shared/shadcn/context-menu/context-menu.tokens.css +7 -0
- package/src/shared/shadcn/context-menu/context-menu.tokens.ts +10 -0
- package/src/shared/shadcn/context-menu/index.ts +57 -0
- package/src/shared/shadcn/dialog/dialog-close.svelte +16 -0
- package/src/shared/shadcn/dialog/dialog-content.svelte +539 -0
- package/src/shared/shadcn/dialog/dialog-description.svelte +18 -0
- package/src/shared/shadcn/dialog/dialog-footer.svelte +34 -0
- package/src/shared/shadcn/dialog/dialog-header.svelte +22 -0
- package/src/shared/shadcn/dialog/dialog-overlay.svelte +18 -0
- package/src/shared/shadcn/dialog/dialog-portal.svelte +7 -0
- package/src/shared/shadcn/dialog/dialog-title.svelte +18 -0
- package/src/shared/shadcn/dialog/dialog-trigger.svelte +16 -0
- package/src/shared/shadcn/dialog/dialog.docs-body.md +101 -0
- package/src/shared/shadcn/dialog/dialog.docs.md +107 -0
- package/src/shared/shadcn/dialog/dialog.provenance.json +76 -0
- package/src/shared/shadcn/dialog/dialog.svelte +8 -0
- package/src/shared/shadcn/dialog/dialog.tokens.css +14 -0
- package/src/shared/shadcn/dialog/dialog.tokens.ts +11 -0
- package/src/shared/shadcn/dialog/examples/custom-close-button.svelte +36 -0
- package/src/shared/shadcn/dialog/examples/preview.svelte +46 -0
- package/src/shared/shadcn/dialog/index.ts +35 -0
- package/src/shared/shadcn/drawer/drawer-close.svelte +8 -0
- package/src/shared/shadcn/drawer/drawer-content.svelte +440 -0
- package/src/shared/shadcn/drawer/drawer-description.svelte +18 -0
- package/src/shared/shadcn/drawer/drawer-footer.svelte +22 -0
- package/src/shared/shadcn/drawer/drawer-header.svelte +22 -0
- package/src/shared/shadcn/drawer/drawer-nested.svelte +17 -0
- package/src/shared/shadcn/drawer/drawer-overlay.svelte +18 -0
- package/src/shared/shadcn/drawer/drawer-portal.svelte +7 -0
- package/src/shared/shadcn/drawer/drawer-title.svelte +18 -0
- package/src/shared/shadcn/drawer/drawer-trigger.svelte +8 -0
- package/src/shared/shadcn/drawer/drawer.docs-body.md +92 -0
- package/src/shared/shadcn/drawer/drawer.docs.md +98 -0
- package/src/shared/shadcn/drawer/drawer.provenance.json +86 -0
- package/src/shared/shadcn/drawer/drawer.svelte +17 -0
- package/src/shared/shadcn/drawer/drawer.tokens.css +7 -0
- package/src/shared/shadcn/drawer/drawer.tokens.ts +10 -0
- package/src/shared/shadcn/drawer/examples/preview.svelte +71 -0
- package/src/shared/shadcn/drawer/examples/sides.svelte +50 -0
- package/src/shared/shadcn/drawer/index.ts +40 -0
- package/src/shared/shadcn/dropdown-menu/dropdown-menu-checkbox-group.svelte +16 -0
- package/src/shared/shadcn/dropdown-menu/dropdown-menu-checkbox-item.svelte +735 -0
- package/src/shared/shadcn/dropdown-menu/dropdown-menu-content.svelte +47 -0
- package/src/shared/shadcn/dropdown-menu/dropdown-menu-group-heading.svelte +23 -0
- package/src/shared/shadcn/dropdown-menu/dropdown-menu-group.svelte +14 -0
- package/src/shared/shadcn/dropdown-menu/dropdown-menu-item.svelte +25 -0
- package/src/shared/shadcn/dropdown-menu/dropdown-menu-label.svelte +26 -0
- package/src/shared/shadcn/dropdown-menu/dropdown-menu-portal.svelte +7 -0
- package/src/shared/shadcn/dropdown-menu/dropdown-menu-radio-group.svelte +16 -0
- package/src/shared/shadcn/dropdown-menu/dropdown-menu-radio-item.svelte +34 -0
- package/src/shared/shadcn/dropdown-menu/dropdown-menu-separator.svelte +18 -0
- package/src/shared/shadcn/dropdown-menu/dropdown-menu-shortcut.svelte +22 -0
- package/src/shared/shadcn/dropdown-menu/dropdown-menu-sub-content.svelte +18 -0
- package/src/shared/shadcn/dropdown-menu/dropdown-menu-sub-trigger.svelte +27 -0
- package/src/shared/shadcn/dropdown-menu/dropdown-menu-sub.svelte +10 -0
- package/src/shared/shadcn/dropdown-menu/dropdown-menu-trigger.svelte +28 -0
- package/src/shared/shadcn/dropdown-menu/dropdown-menu.docs-body.md +189 -0
- package/src/shared/shadcn/dropdown-menu/dropdown-menu.docs.md +195 -0
- package/src/shared/shadcn/dropdown-menu/dropdown-menu.provenance.json +104 -0
- package/src/shared/shadcn/dropdown-menu/dropdown-menu.svelte +17 -0
- package/src/shared/shadcn/dropdown-menu/dropdown-menu.tokens.css +13 -0
- package/src/shared/shadcn/dropdown-menu/dropdown-menu.tokens.ts +10 -0
- package/src/shared/shadcn/dropdown-menu/examples/checkboxes.svelte +33 -0
- package/src/shared/shadcn/dropdown-menu/examples/dialog.svelte +95 -0
- package/src/shared/shadcn/dropdown-menu/examples/preview.svelte +61 -0
- package/src/shared/shadcn/dropdown-menu/examples/radio-group.svelte +27 -0
- package/src/shared/shadcn/dropdown-menu/index.ts +59 -0
- package/src/shared/shadcn/empty/empty-content.svelte +22 -0
- package/src/shared/shadcn/empty/empty-description.svelte +22 -0
- package/src/shared/shadcn/empty/empty-header.svelte +22 -0
- package/src/shared/shadcn/empty/empty-media.svelte +39 -0
- package/src/shared/shadcn/empty/empty-title.svelte +22 -0
- package/src/shared/shadcn/empty/empty.docs-body.md +103 -0
- package/src/shared/shadcn/empty/empty.docs.md +109 -0
- package/src/shared/shadcn/empty/empty.provenance.json +76 -0
- package/src/shared/shadcn/empty/empty.svelte +257 -0
- package/src/shared/shadcn/empty/empty.tokens.css +13 -0
- package/src/shared/shadcn/empty/empty.tokens.ts +9 -0
- package/src/shared/shadcn/empty/examples/background.svelte +28 -0
- package/src/shared/shadcn/empty/examples/outline.svelte +22 -0
- package/src/shared/shadcn/empty/examples/preview.svelte +32 -0
- package/src/shared/shadcn/empty/index.ts +24 -0
- package/src/shared/shadcn/field/examples/checkbox.svelte +64 -0
- package/src/shared/shadcn/field/examples/field-group.svelte +48 -0
- package/src/shared/shadcn/field/examples/fieldset.svelte +31 -0
- package/src/shared/shadcn/field/examples/input.svelte +27 -0
- package/src/shared/shadcn/field/examples/preview.svelte +136 -0
- package/src/shared/shadcn/field/examples/responsive-layout.svelte +50 -0
- package/src/shared/shadcn/field/examples/select.svelte +43 -0
- package/src/shared/shadcn/field/examples/switch.svelte +19 -0
- package/src/shared/shadcn/field/examples/textarea.svelte +24 -0
- package/src/shared/shadcn/field/field-content.svelte +22 -0
- package/src/shared/shadcn/field/field-description.svelte +22 -0
- package/src/shared/shadcn/field/field-error.svelte +66 -0
- package/src/shared/shadcn/field/field-group.svelte +22 -0
- package/src/shared/shadcn/field/field-label.svelte +22 -0
- package/src/shared/shadcn/field/field-legend.svelte +26 -0
- package/src/shared/shadcn/field/field-separator.svelte +42 -0
- package/src/shared/shadcn/field/field-set.svelte +22 -0
- package/src/shared/shadcn/field/field-title.svelte +22 -0
- package/src/shared/shadcn/field/field.docs-body.md +412 -0
- package/src/shared/shadcn/field/field.docs.md +418 -0
- package/src/shared/shadcn/field/field.provenance.json +102 -0
- package/src/shared/shadcn/field/field.svelte +540 -0
- package/src/shared/shadcn/field/field.tokens.css +13 -0
- package/src/shared/shadcn/field/field.tokens.ts +9 -0
- package/src/shared/shadcn/field/index.ts +35 -0
- package/src/shared/shadcn/hover-card/examples/basic.svelte +12 -0
- package/src/shared/shadcn/hover-card/hover-card-content.svelte +348 -0
- package/src/shared/shadcn/hover-card/hover-card-portal.svelte +7 -0
- package/src/shared/shadcn/hover-card/hover-card-trigger.svelte +26 -0
- package/src/shared/shadcn/hover-card/hover-card.docs-body.md +22 -0
- package/src/shared/shadcn/hover-card/hover-card.docs.md +28 -0
- package/src/shared/shadcn/hover-card/hover-card.provenance.json +58 -0
- package/src/shared/shadcn/hover-card/hover-card.svelte +15 -0
- package/src/shared/shadcn/hover-card/hover-card.tokens.css +14 -0
- package/src/shared/shadcn/hover-card/hover-card.tokens.ts +11 -0
- package/src/shared/shadcn/hover-card/index.ts +20 -0
- package/src/shared/shadcn/input/examples/default.svelte +7 -0
- package/src/shared/shadcn/input/examples/disabled.svelte +7 -0
- package/src/shared/shadcn/input/examples/file.svelte +11 -0
- package/src/shared/shadcn/input/examples/preview.svelte +7 -0
- package/src/shared/shadcn/input/examples/with-button.svelte +11 -0
- package/src/shared/shadcn/input/examples/with-label.svelte +13 -0
- package/src/shared/shadcn/input/index.ts +11 -0
- package/src/shared/shadcn/input/input.docs-body.md +83 -0
- package/src/shared/shadcn/input/input.docs.md +89 -0
- package/src/shared/shadcn/input/input.provenance.json +47 -0
- package/src/shared/shadcn/input/input.svelte +398 -0
- package/src/shared/shadcn/input/input.tokens.css +13 -0
- package/src/shared/shadcn/input/input.tokens.ts +9 -0
- package/src/shared/shadcn/input-group/examples/custom-input.svelte +20 -0
- package/src/shared/shadcn/input-group/examples/dropdown.svelte +58 -0
- package/src/shared/shadcn/input-group/examples/icon.svelte +42 -0
- package/src/shared/shadcn/input-group/examples/label.svelte +43 -0
- package/src/shared/shadcn/input-group/examples/preview.svelte +95 -0
- package/src/shared/shadcn/input-group/examples/spinner.svelte +40 -0
- package/src/shared/shadcn/input-group/examples/text.svelte +40 -0
- package/src/shared/shadcn/input-group/examples/textarea.svelte +37 -0
- package/src/shared/shadcn/input-group/examples/tooltip.svelte +79 -0
- package/src/shared/shadcn/input-group/index.ts +27 -0
- package/src/shared/shadcn/input-group/input-group-addon.svelte +51 -0
- package/src/shared/shadcn/input-group/input-group-button.svelte +46 -0
- package/src/shared/shadcn/input-group/input-group-input.svelte +20 -0
- package/src/shared/shadcn/input-group/input-group-text.svelte +22 -0
- package/src/shared/shadcn/input-group/input-group-textarea.svelte +20 -0
- package/src/shared/shadcn/input-group/input-group.docs-body.md +431 -0
- package/src/shared/shadcn/input-group/input-group.docs.md +437 -0
- package/src/shared/shadcn/input-group/input-group.provenance.json +81 -0
- package/src/shared/shadcn/input-group/input-group.svelte +628 -0
- package/src/shared/shadcn/input-group/input-group.tokens.css +13 -0
- package/src/shared/shadcn/input-group/input-group.tokens.ts +10 -0
- package/src/shared/shadcn/label/examples/preview.svelte +13 -0
- package/src/shared/shadcn/label/index.ts +9 -0
- package/src/shared/shadcn/label/label.docs-body.md +17 -0
- package/src/shared/shadcn/label/label.docs.md +23 -0
- package/src/shared/shadcn/label/label.provenance.json +40 -0
- package/src/shared/shadcn/label/label.svelte +169 -0
- package/src/shared/shadcn/label/label.tokens.css +13 -0
- package/src/shared/shadcn/label/label.tokens.ts +9 -0
- package/src/shared/shadcn/pagination/examples/preview.svelte +34 -0
- package/src/shared/shadcn/pagination/index.ts +36 -0
- package/src/shared/shadcn/pagination/pagination-content.svelte +22 -0
- package/src/shared/shadcn/pagination/pagination-ellipsis.svelte +29 -0
- package/src/shared/shadcn/pagination/pagination-item.svelte +14 -0
- package/src/shared/shadcn/pagination/pagination-link.svelte +40 -0
- package/src/shared/shadcn/pagination/pagination-next-button.svelte +39 -0
- package/src/shared/shadcn/pagination/pagination-next.svelte +25 -0
- package/src/shared/shadcn/pagination/pagination-prev-button.svelte +39 -0
- package/src/shared/shadcn/pagination/pagination-previous.svelte +25 -0
- package/src/shared/shadcn/pagination/pagination.docs-body.md +39 -0
- package/src/shared/shadcn/pagination/pagination.docs.md +45 -0
- package/src/shared/shadcn/pagination/pagination.provenance.json +72 -0
- package/src/shared/shadcn/pagination/pagination.svelte +215 -0
- package/src/shared/shadcn/pagination/pagination.tokens.css +13 -0
- package/src/shared/shadcn/pagination/pagination.tokens.ts +10 -0
- package/src/shared/shadcn/popover/examples/preview.svelte +42 -0
- package/src/shared/shadcn/popover/index.ts +30 -0
- package/src/shared/shadcn/popover/popover-close.svelte +8 -0
- package/src/shared/shadcn/popover/popover-content.svelte +376 -0
- package/src/shared/shadcn/popover/popover-description.svelte +22 -0
- package/src/shared/shadcn/popover/popover-header.svelte +22 -0
- package/src/shared/shadcn/popover/popover-portal.svelte +7 -0
- package/src/shared/shadcn/popover/popover-title.svelte +22 -0
- package/src/shared/shadcn/popover/popover-trigger.svelte +32 -0
- package/src/shared/shadcn/popover/popover.docs-body.md +20 -0
- package/src/shared/shadcn/popover/popover.docs.md +26 -0
- package/src/shared/shadcn/popover/popover.provenance.json +68 -0
- package/src/shared/shadcn/popover/popover.svelte +15 -0
- package/src/shared/shadcn/popover/popover.tokens.css +17 -0
- package/src/shared/shadcn/popover/popover.tokens.ts +13 -0
- package/src/shared/shadcn/progress/examples/preview.svelte +15 -0
- package/src/shared/shadcn/progress/index.ts +9 -0
- package/src/shared/shadcn/progress/progress.docs-body.md +17 -0
- package/src/shared/shadcn/progress/progress.docs.md +23 -0
- package/src/shared/shadcn/progress/progress.provenance.json +40 -0
- package/src/shared/shadcn/progress/progress.svelte +173 -0
- package/src/shared/shadcn/progress/progress.tokens.css +10 -0
- package/src/shared/shadcn/progress/progress.tokens.ts +10 -0
- package/src/shared/shadcn/resizable/examples/handle.svelte +22 -0
- package/src/shared/shadcn/resizable/examples/preview.svelte +29 -0
- package/src/shared/shadcn/resizable/examples/vertical.svelte +22 -0
- package/src/shared/shadcn/resizable/index.ts +18 -0
- package/src/shared/shadcn/resizable/resizable-handle.svelte +401 -0
- package/src/shared/shadcn/resizable/resizable-pane-group.svelte +22 -0
- package/src/shared/shadcn/resizable/resizable-pane.svelte +23 -0
- package/src/shared/shadcn/resizable/resizable.docs-body.md +82 -0
- package/src/shared/shadcn/resizable/resizable.docs.md +88 -0
- package/src/shared/shadcn/resizable/resizable.provenance.json +44 -0
- package/src/shared/shadcn/resizable/resizable.tokens.css +17 -0
- package/src/shared/shadcn/resizable/resizable.tokens.ts +14 -0
- package/src/shared/shadcn/scroll-area/ScrollArea.local-example-sources.ts +30 -0
- package/src/shared/shadcn/scroll-area/ScrollAreaBehaviorFixture.svelte +152 -0
- package/src/shared/shadcn/scroll-area/ScrollAreaScrollableList.svelte +49 -0
- package/src/shared/shadcn/scroll-area/examples/horizontal-scrolling.svelte +52 -0
- package/src/shared/shadcn/scroll-area/examples/preview.svelte +22 -0
- package/src/shared/shadcn/scroll-area/index.ts +20 -0
- package/src/shared/shadcn/scroll-area/scroll-area-model.ts +122 -0
- package/src/shared/shadcn/scroll-area/scroll-area-overlay-scrollbar.svelte +362 -0
- package/src/shared/shadcn/scroll-area/scroll-area-scrollbar.svelte +30 -0
- package/src/shared/shadcn/scroll-area/scroll-area.docs-body.md +81 -0
- package/src/shared/shadcn/scroll-area/scroll-area.docs.md +87 -0
- package/src/shared/shadcn/scroll-area/scroll-area.provenance.json +44 -0
- package/src/shared/shadcn/scroll-area/scroll-area.svelte +544 -0
- package/src/shared/shadcn/scroll-area/scroll-area.tokens.css +13 -0
- package/src/shared/shadcn/scroll-area/scroll-area.tokens.ts +10 -0
- package/src/shared/shadcn/select/examples/scrollable.svelte +62 -0
- package/src/shared/shadcn/select/index.ts +39 -0
- package/src/shared/shadcn/select/select-content.svelte +764 -0
- package/src/shared/shadcn/select/select-group-heading.svelte +22 -0
- package/src/shared/shadcn/select/select-group.svelte +18 -0
- package/src/shared/shadcn/select/select-item.svelte +47 -0
- package/src/shared/shadcn/select/select-label.svelte +22 -0
- package/src/shared/shadcn/select/select-portal.svelte +7 -0
- package/src/shared/shadcn/select/select-scroll-down-button.svelte +22 -0
- package/src/shared/shadcn/select/select-scroll-up-button.svelte +22 -0
- package/src/shared/shadcn/select/select-separator.svelte +19 -0
- package/src/shared/shadcn/select/select-trigger.svelte +46 -0
- package/src/shared/shadcn/select/select.docs-body.md +92 -0
- package/src/shared/shadcn/select/select.docs.md +98 -0
- package/src/shared/shadcn/select/select.provenance.json +86 -0
- package/src/shared/shadcn/select/select.svelte +18 -0
- package/src/shared/shadcn/select/select.tokens.css +13 -0
- package/src/shared/shadcn/select/select.tokens.ts +10 -0
- package/src/shared/shadcn/separator/examples/preview.svelte +22 -0
- package/src/shared/shadcn/separator/index.ts +14 -0
- package/src/shared/shadcn/separator/separator.docs-body.md +17 -0
- package/src/shared/shadcn/separator/separator.docs.md +23 -0
- package/src/shared/shadcn/separator/separator.provenance.json +40 -0
- package/src/shared/shadcn/separator/separator.svelte +150 -0
- package/src/shared/shadcn/separator/separator.tokens.css +13 -0
- package/src/shared/shadcn/separator/separator.tokens.ts +10 -0
- package/src/shared/shadcn/sheet/examples/preview.svelte +39 -0
- package/src/shared/shadcn/sheet/index.ts +36 -0
- package/src/shared/shadcn/sheet/sheet-close.svelte +8 -0
- package/src/shared/shadcn/sheet/sheet-content.svelte +593 -0
- package/src/shared/shadcn/sheet/sheet-description.svelte +18 -0
- package/src/shared/shadcn/sheet/sheet-footer.svelte +22 -0
- package/src/shared/shadcn/sheet/sheet-header.svelte +22 -0
- package/src/shared/shadcn/sheet/sheet-overlay.svelte +18 -0
- package/src/shared/shadcn/sheet/sheet-portal.svelte +7 -0
- package/src/shared/shadcn/sheet/sheet-title.svelte +18 -0
- package/src/shared/shadcn/sheet/sheet-trigger.svelte +8 -0
- package/src/shared/shadcn/sheet/sheet.docs-body.md +53 -0
- package/src/shared/shadcn/sheet/sheet.docs.md +59 -0
- package/src/shared/shadcn/sheet/sheet.provenance.json +76 -0
- package/src/shared/shadcn/sheet/sheet.svelte +8 -0
- package/src/shared/shadcn/sheet/sheet.tokens.css +13 -0
- package/src/shared/shadcn/sheet/sheet.tokens.ts +9 -0
- package/src/shared/shadcn/sidebar/constants.ts +6 -0
- package/src/shared/shadcn/sidebar/context.svelte.ts +81 -0
- package/src/shared/shadcn/sidebar/examples/collapsible-sidebar-group.svelte +50 -0
- package/src/shared/shadcn/sidebar/examples/collapsible-sidebar-menu.svelte +179 -0
- package/src/shared/shadcn/sidebar/examples/controlled-sidebar.svelte +81 -0
- package/src/shared/shadcn/sidebar/examples/dropdownmenu.svelte +86 -0
- package/src/shared/shadcn/sidebar/examples/sidebar-footer.svelte +52 -0
- package/src/shared/shadcn/sidebar/examples/sidebar-group.svelte +33 -0
- package/src/shared/shadcn/sidebar/examples/sidebar-groupaction.svelte +60 -0
- package/src/shared/shadcn/sidebar/examples/sidebar-header.svelte +44 -0
- package/src/shared/shadcn/sidebar/examples/sidebar-menu.svelte +63 -0
- package/src/shared/shadcn/sidebar/examples/sidebar-menubadge.svelte +72 -0
- package/src/shared/shadcn/sidebar/examples/sidebar-menusub.svelte +170 -0
- package/src/shared/shadcn/sidebar/examples/your-first-sidebar.svelte +70 -0
- package/src/shared/shadcn/sidebar/index.ts +75 -0
- package/src/shared/shadcn/sidebar/sidebar-content.svelte +23 -0
- package/src/shared/shadcn/sidebar/sidebar-footer.svelte +23 -0
- package/src/shared/shadcn/sidebar/sidebar-group-action.svelte +38 -0
- package/src/shared/shadcn/sidebar/sidebar-group-content.svelte +23 -0
- package/src/shared/shadcn/sidebar/sidebar-group-label.svelte +38 -0
- package/src/shared/shadcn/sidebar/sidebar-group.svelte +23 -0
- package/src/shared/shadcn/sidebar/sidebar-header.svelte +23 -0
- package/src/shared/shadcn/sidebar/sidebar-input.svelte +21 -0
- package/src/shared/shadcn/sidebar/sidebar-inset.svelte +22 -0
- package/src/shared/shadcn/sidebar/sidebar-menu-action.svelte +41 -0
- package/src/shared/shadcn/sidebar/sidebar-menu-badge.svelte +23 -0
- package/src/shared/shadcn/sidebar/sidebar-menu-button.svelte +111 -0
- package/src/shared/shadcn/sidebar/sidebar-menu-item.svelte +23 -0
- package/src/shared/shadcn/sidebar/sidebar-menu-skeleton.svelte +43 -0
- package/src/shared/shadcn/sidebar/sidebar-menu-sub-button.svelte +44 -0
- package/src/shared/shadcn/sidebar/sidebar-menu-sub-item.svelte +23 -0
- package/src/shared/shadcn/sidebar/sidebar-menu-sub.svelte +23 -0
- package/src/shared/shadcn/sidebar/sidebar-menu.svelte +26 -0
- package/src/shared/shadcn/sidebar/sidebar-provider.svelte +52 -0
- package/src/shared/shadcn/sidebar/sidebar-rail.svelte +33 -0
- package/src/shared/shadcn/sidebar/sidebar-separator.svelte +19 -0
- package/src/shared/shadcn/sidebar/sidebar-trigger.svelte +36 -0
- package/src/shared/shadcn/sidebar/sidebar.docs-body.md +1634 -0
- package/src/shared/shadcn/sidebar/sidebar.docs.md +1648 -0
- package/src/shared/shadcn/sidebar/sidebar.provenance.json +149 -0
- package/src/shared/shadcn/sidebar/sidebar.svelte +1431 -0
- package/src/shared/shadcn/sidebar/sidebar.tokens.ts +22 -0
- package/src/shared/shadcn/skeleton/examples/card.svelte +13 -0
- package/src/shared/shadcn/skeleton/examples/preview.svelte +13 -0
- package/src/shared/shadcn/skeleton/index.ts +9 -0
- package/src/shared/shadcn/skeleton/skeleton.docs-body.md +35 -0
- package/src/shared/shadcn/skeleton/skeleton.docs.md +41 -0
- package/src/shared/shadcn/skeleton/skeleton.provenance.json +40 -0
- package/src/shared/shadcn/skeleton/skeleton.svelte +131 -0
- package/src/shared/shadcn/skeleton/skeleton.tokens.css +13 -0
- package/src/shared/shadcn/skeleton/skeleton.tokens.ts +10 -0
- package/src/shared/shadcn/slider/index.ts +9 -0
- package/src/shared/shadcn/slider/slider.docs-body.md +18 -0
- package/src/shared/shadcn/slider/slider.docs.md +24 -0
- package/src/shared/shadcn/slider/slider.provenance.json +46 -0
- package/src/shared/shadcn/slider/slider.svelte +399 -0
- package/src/shared/shadcn/slider/slider.tokens.css +11 -0
- package/src/shared/shadcn/slider/slider.tokens.ts +11 -0
- package/src/shared/shadcn/spinner/examples/badge.svelte +21 -0
- package/src/shared/shadcn/spinner/examples/button.svelte +21 -0
- package/src/shared/shadcn/spinner/examples/color.svelte +13 -0
- package/src/shared/shadcn/spinner/examples/customization.svelte +18 -0
- package/src/shared/shadcn/spinner/examples/empty.svelte +22 -0
- package/src/shared/shadcn/spinner/examples/input-group.svelte +26 -0
- package/src/shared/shadcn/spinner/examples/size.svelte +12 -0
- package/src/shared/shadcn/spinner/index.ts +3 -0
- package/src/shared/shadcn/spinner/spinner.docs-body.md +189 -0
- package/src/shared/shadcn/spinner/spinner.docs.md +195 -0
- package/src/shared/shadcn/spinner/spinner.provenance.json +59 -0
- package/src/shared/shadcn/spinner/spinner.svelte +50 -0
- package/src/shared/shadcn/spinner/spinner.tokens.css +13 -0
- package/src/shared/shadcn/spinner/spinner.tokens.ts +10 -0
- package/src/shared/shadcn/swipe-item/index.ts +30 -0
- package/src/shared/shadcn/swipe-item/swipe-item-action.svelte +40 -0
- package/src/shared/shadcn/swipe-item/swipe-item-actions.svelte +68 -0
- package/src/shared/shadcn/swipe-item/swipe-item-content.svelte +32 -0
- package/src/shared/shadcn/swipe-item/swipe-item-context.svelte.ts +612 -0
- package/src/shared/shadcn/swipe-item/swipe-item-gesture.ts +137 -0
- package/src/shared/shadcn/swipe-item/swipe-item-trigger.svelte +44 -0
- package/src/shared/shadcn/swipe-item/swipe-item.css +80 -0
- package/src/shared/shadcn/swipe-item/swipe-item.docs.md +75 -0
- package/src/shared/shadcn/swipe-item/swipe-item.svelte +76 -0
- package/src/shared/shadcn/swipe-item/swipe-item.tokens.css +15 -0
- package/src/shared/shadcn/swipe-item/swipe-item.tokens.ts +14 -0
- package/src/shared/shadcn/swipe-item/types.ts +31 -0
- package/src/shared/shadcn/switch/examples/preview.svelte +11 -0
- package/src/shared/shadcn/switch/index.ts +9 -0
- package/src/shared/shadcn/switch/switch.docs-body.md +17 -0
- package/src/shared/shadcn/switch/switch.docs.md +23 -0
- package/src/shared/shadcn/switch/switch.provenance.json +40 -0
- package/src/shared/shadcn/switch/switch.svelte +542 -0
- package/src/shared/shadcn/switch/switch.tokens.css +13 -0
- package/src/shared/shadcn/switch/switch.tokens.ts +10 -0
- package/src/shared/shadcn/table/examples/preview.svelte +78 -0
- package/src/shared/shadcn/table/index.ts +30 -0
- package/src/shared/shadcn/table/table-body.svelte +22 -0
- package/src/shared/shadcn/table/table-caption.svelte +22 -0
- package/src/shared/shadcn/table/table-cell.svelte +22 -0
- package/src/shared/shadcn/table/table-footer.svelte +22 -0
- package/src/shared/shadcn/table/table-head.svelte +22 -0
- package/src/shared/shadcn/table/table-header.svelte +22 -0
- package/src/shared/shadcn/table/table-row.svelte +22 -0
- package/src/shared/shadcn/table/table.docs-body.md +43 -0
- package/src/shared/shadcn/table/table.docs.md +49 -0
- package/src/shared/shadcn/table/table.provenance.json +68 -0
- package/src/shared/shadcn/table/table.svelte +249 -0
- package/src/shared/shadcn/table/table.tokens.css +13 -0
- package/src/shared/shadcn/table/table.tokens.ts +9 -0
- package/src/shared/shadcn/tabs/examples/preview.svelte +64 -0
- package/src/shared/shadcn/tabs/index.ts +23 -0
- package/src/shared/shadcn/tabs/tabs-content.svelte +18 -0
- package/src/shared/shadcn/tabs/tabs-list.svelte +35 -0
- package/src/shared/shadcn/tabs/tabs-trigger.svelte +18 -0
- package/src/shared/shadcn/tabs/tabs.docs-body.md +26 -0
- package/src/shared/shadcn/tabs/tabs.docs.md +32 -0
- package/src/shared/shadcn/tabs/tabs.provenance.json +52 -0
- package/src/shared/shadcn/tabs/tabs.svelte +748 -0
- package/src/shared/shadcn/tabs/tabs.tokens.css +13 -0
- package/src/shared/shadcn/tabs/tabs.tokens.ts +9 -0
- package/src/shared/shadcn/textarea/examples/default.svelte +7 -0
- package/src/shared/shadcn/textarea/examples/disabled.svelte +7 -0
- package/src/shared/shadcn/textarea/examples/preview.svelte +7 -0
- package/src/shared/shadcn/textarea/examples/with-button.svelte +11 -0
- package/src/shared/shadcn/textarea/examples/with-label.svelte +11 -0
- package/src/shared/shadcn/textarea/examples/with-text.svelte +14 -0
- package/src/shared/shadcn/textarea/index.ts +9 -0
- package/src/shared/shadcn/textarea/textarea.docs-body.md +84 -0
- package/src/shared/shadcn/textarea/textarea.docs.md +90 -0
- package/src/shared/shadcn/textarea/textarea.provenance.json +47 -0
- package/src/shared/shadcn/textarea/textarea.svelte +345 -0
- package/src/shared/shadcn/textarea/textarea.tokens.css +13 -0
- package/src/shared/shadcn/textarea/textarea.tokens.ts +10 -0
- package/src/shared/shadcn/toggle/examples/default.svelte +16 -0
- package/src/shared/shadcn/toggle/examples/disabled.svelte +10 -0
- package/src/shared/shadcn/toggle/examples/large.svelte +10 -0
- package/src/shared/shadcn/toggle/examples/outline.svelte +10 -0
- package/src/shared/shadcn/toggle/examples/preview.svelte +16 -0
- package/src/shared/shadcn/toggle/examples/small.svelte +10 -0
- package/src/shared/shadcn/toggle/examples/with-text.svelte +11 -0
- package/src/shared/shadcn/toggle/index.ts +15 -0
- package/src/shared/shadcn/toggle/toggle.docs-body.md +104 -0
- package/src/shared/shadcn/toggle/toggle.docs.md +110 -0
- package/src/shared/shadcn/toggle/toggle.provenance.json +48 -0
- package/src/shared/shadcn/toggle/toggle.svelte +411 -0
- package/src/shared/shadcn/toggle/toggle.tokens.css +13 -0
- package/src/shared/shadcn/toggle/toggle.tokens.ts +10 -0
- package/src/shared/shadcn/toggle-group/examples/disabled.svelte +20 -0
- package/src/shared/shadcn/toggle-group/examples/large.svelte +20 -0
- package/src/shared/shadcn/toggle-group/examples/outline.svelte +20 -0
- package/src/shared/shadcn/toggle-group/examples/single.svelte +20 -0
- package/src/shared/shadcn/toggle-group/examples/small.svelte +20 -0
- package/src/shared/shadcn/toggle-group/examples/spacing-2.svelte +35 -0
- package/src/shared/shadcn/toggle-group/examples/spacing.svelte +35 -0
- package/src/shared/shadcn/toggle-group/index.ts +15 -0
- package/src/shared/shadcn/toggle-group/toggle-group-item.svelte +164 -0
- package/src/shared/shadcn/toggle-group/toggle-group.docs-body.md +178 -0
- package/src/shared/shadcn/toggle-group/toggle-group.docs.md +184 -0
- package/src/shared/shadcn/toggle-group/toggle-group.provenance.json +52 -0
- package/src/shared/shadcn/toggle-group/toggle-group.svelte +436 -0
- package/src/shared/shadcn/toggle-group/toggle-group.tokens.css +13 -0
- package/src/shared/shadcn/toggle-group/toggle-group.tokens.ts +10 -0
- package/src/shared/shadcn/tooltip/examples/preview.svelte +17 -0
- package/src/shared/shadcn/tooltip/index.ts +21 -0
- package/src/shared/shadcn/tooltip/tooltip-content.svelte +369 -0
- package/src/shared/shadcn/tooltip/tooltip-portal.svelte +7 -0
- package/src/shared/shadcn/tooltip/tooltip-provider.svelte +8 -0
- package/src/shared/shadcn/tooltip/tooltip-trigger.svelte +24 -0
- package/src/shared/shadcn/tooltip/tooltip.docs-body.md +56 -0
- package/src/shared/shadcn/tooltip/tooltip.docs.md +62 -0
- package/src/shared/shadcn/tooltip/tooltip.provenance.json +56 -0
- package/src/shared/shadcn/tooltip/tooltip.svelte +15 -0
- package/src/shared/shadcn/tooltip/tooltip.tokens.css +13 -0
- package/src/shared/shadcn/tooltip/tooltip.tokens.ts +10 -0
- package/src/shared/shell/PLAN.md +121 -0
- package/src/shared/shell/app-shell/AppShell.css +579 -0
- package/src/shared/shell/app-shell/AppShellBody.svelte +72 -0
- package/src/shared/shell/app-shell/AppShellBodyContent.svelte +46 -0
- package/src/shared/shell/app-shell/AppShellBodySidebar.svelte +116 -0
- package/src/shared/shell/app-shell/AppShellBodyToggle.svelte +112 -0
- package/src/shared/shell/app-shell/AppShellMain.svelte +35 -0
- package/src/shared/shell/app-shell/AppShellMobilePanelSelector.svelte +63 -0
- package/src/shared/shell/app-shell/AppShellRoot.svelte +565 -0
- package/src/shared/shell/app-shell/AppShellSidebar.svelte +493 -0
- package/src/shared/shell/app-shell/AppShellSidebarBody.svelte +29 -0
- package/src/shared/shell/app-shell/AppShellSidebarClose.svelte +100 -0
- package/src/shared/shell/app-shell/AppShellSidebarFooter.svelte +26 -0
- package/src/shared/shell/app-shell/AppShellSidebarHeader.svelte +26 -0
- package/src/shared/shell/app-shell/AppShellSidebarToggle.svelte +242 -0
- package/src/shared/shell/app-shell/AppShellToolbar.svelte +29 -0
- package/src/shared/shell/app-shell/app-shell-body-context.svelte.ts +39 -0
- package/src/shared/shell/app-shell/app-shell-context.svelte.ts +27 -0
- package/src/shared/shell/app-shell/app-shell-controller.svelte.ts +683 -0
- package/src/shared/shell/app-shell/app-shell-persistence.ts +70 -0
- package/src/shared/shell/app-shell/app-shell-sidebar-context.svelte.ts +34 -0
- package/src/shared/shell/app-shell/app-shell-teleport.ts +38 -0
- package/src/shared/shell/app-shell/examples/AppShellBodyDemo.svelte +28 -0
- package/src/shared/shell/app-shell/examples/AppShellCompleteDemo.svelte +123 -0
- package/src/shared/shell/app-shell/examples/AppShellConversationDemo.svelte +143 -0
- package/src/shared/shell/app-shell/examples/AppShellFilesSidebarDemo.svelte +70 -0
- package/src/shared/shell/app-shell/examples/AppShellMarkdownDocumentDemo.svelte +112 -0
- package/src/shared/shell/app-shell/examples/AppShellMarkdownFilesDemo.svelte +67 -0
- package/src/shared/shell/app-shell/examples/AppShellModeSwitchDemo.svelte +42 -0
- package/src/shared/shell/app-shell/examples/AppShellProjectSidebarDemo.svelte +121 -0
- package/src/shared/shell/app-shell/examples/AppShellSidebarDemo.svelte +142 -0
- package/src/shared/shell/app-shell/examples/AppShellToolbarDemo.svelte +26 -0
- package/src/shared/shell/app-shell/index.ts +73 -0
- package/src/shared/shell/index.ts +1 -0
- package/src/shared/shell/shell.tokens.css +22 -0
- package/src/shared/shell/shell.tokens.ts +39 -0
- package/src/shared/workspace/PLAN.md +1052 -0
- package/src/shared/workspace/REFERENCE.md +122 -0
- package/src/shared/workspace/about-dialog/WorkspaceAboutDialog.css +163 -0
- package/src/shared/workspace/about-dialog/WorkspaceAboutDialog.svelte +113 -0
- package/src/shared/workspace/about-dialog/index.ts +1 -0
- package/src/shared/workspace/app-shell/AppShellAboutDialog.svelte +23 -0
- package/src/shared/workspace/app-shell/AppShellBottomPanel.svelte +15 -0
- package/src/shared/workspace/app-shell/AppShellCommandPalette.svelte +13 -0
- package/src/shared/workspace/app-shell/AppShellCorePluginsSettings.svelte +8 -0
- package/src/shared/workspace/app-shell/AppShellDesktopLayout.css +81 -0
- package/src/shared/workspace/app-shell/AppShellDesktopLayout.svelte +33 -0
- package/src/shared/workspace/app-shell/AppShellFloatingLayer.svelte +20 -0
- package/src/shared/workspace/app-shell/AppShellHotkeySettings.svelte +8 -0
- package/src/shared/workspace/app-shell/AppShellLeftSidebar.svelte +146 -0
- package/src/shared/workspace/app-shell/AppShellMain.svelte +14 -0
- package/src/shared/workspace/app-shell/AppShellNoticeToasts.svelte +41 -0
- package/src/shared/workspace/app-shell/AppShellNotices.svelte +8 -0
- package/src/shared/workspace/app-shell/AppShellOverlayLayer.svelte +34 -0
- package/src/shared/workspace/app-shell/AppShellPluginLayer.svelte +17 -0
- package/src/shared/workspace/app-shell/AppShellRibbon.svelte +10 -0
- package/src/shared/workspace/app-shell/AppShellRightSidebar.svelte +8 -0
- package/src/shared/workspace/app-shell/AppShellRoot.css +101 -0
- package/src/shared/workspace/app-shell/AppShellRoot.svelte +125 -0
- package/src/shared/workspace/app-shell/AppShellSettings.svelte +8 -0
- package/src/shared/workspace/app-shell/AppShellSettingsDialog.css +80 -0
- package/src/shared/workspace/app-shell/AppShellSettingsDialog.svelte +110 -0
- package/src/shared/workspace/app-shell/AppShellSidebar.svelte +10 -0
- package/src/shared/workspace/app-shell/AppShellStatusBar.svelte +8 -0
- package/src/shared/workspace/app-shell/AppShellSurface.svelte +139 -0
- package/src/shared/workspace/app-shell/AppShellTabs.svelte +29 -0
- package/src/shared/workspace/app-shell/AppShellWorkspace.css +19 -0
- package/src/shared/workspace/app-shell/AppShellWorkspace.svelte +67 -0
- package/src/shared/workspace/app-shell/app-shell-context.svelte.ts +37 -0
- package/src/shared/workspace/app-shell/index.ts +79 -0
- package/src/shared/workspace/app-shell/workspace-navigation.ts +16 -0
- package/src/shared/workspace/bottom-panel/WorkspaceBottomPanel.css +406 -0
- package/src/shared/workspace/bottom-panel/WorkspaceBottomPanel.svelte +412 -0
- package/src/shared/workspace/bottom-panel/WorkspaceBottomPanelEmpty.svelte +38 -0
- package/src/shared/workspace/bottom-panel/WorkspaceBottomPanelGroup.svelte +313 -0
- package/src/shared/workspace/bottom-panel/WorkspaceBottomPanelStoryView.svelte +21 -0
- package/src/shared/workspace/bottom-panel/WorkspaceBottomPanelToggle.svelte +68 -0
- package/src/shared/workspace/bottom-panel/index.ts +3 -0
- package/src/shared/workspace/command-palette/WorkspaceCommandPalette.css +33 -0
- package/src/shared/workspace/command-palette/WorkspaceCommandPalette.svelte +183 -0
- package/src/shared/workspace/command-palette/index.ts +1 -0
- package/src/shared/workspace/core/app-shell-controller.svelte.ts +687 -0
- package/src/shared/workspace/core/app-shell-ui-registry.svelte.ts +165 -0
- package/src/shared/workspace/core/app-workspace.ts +484 -0
- package/src/shared/workspace/core/built-in-settings.svelte.ts +467 -0
- package/src/shared/workspace/core/command-manager.svelte.ts +752 -0
- package/src/shared/workspace/core/editor-view-registry.ts +232 -0
- package/src/shared/workspace/core/event-dispatcher.ts +91 -0
- package/src/shared/workspace/core/index.ts +21 -0
- package/src/shared/workspace/core/layout.ts +463 -0
- package/src/shared/workspace/core/managed-plugin-settings.svelte.ts +142 -0
- package/src/shared/workspace/core/notice-manager.svelte.ts +122 -0
- package/src/shared/workspace/core/notification-manager.svelte.ts +631 -0
- package/src/shared/workspace/core/persistence.ts +21 -0
- package/src/shared/workspace/core/plugin-manager.svelte.ts +463 -0
- package/src/shared/workspace/core/popout.ts +38 -0
- package/src/shared/workspace/core/serializable.ts +16 -0
- package/src/shared/workspace/core/types.ts +357 -0
- package/src/shared/workspace/core/view-registry.ts +21 -0
- package/src/shared/workspace/core/workspace-controller.svelte.ts +1509 -0
- package/src/shared/workspace/core/workspace-json.ts +429 -0
- package/src/shared/workspace/core/workspace-menu.ts +121 -0
- package/src/shared/workspace/core/workspace-view.ts +241 -0
- package/src/shared/workspace/demo/ReusableFrameworkDemo.css +52 -0
- package/src/shared/workspace/demo/ReusableFrameworkDemo.svelte +19 -0
- package/src/shared/workspace/demo/framework-demo.ts +482 -0
- package/src/shared/workspace/demo/index.ts +5 -0
- package/src/shared/workspace/drag/index.ts +9 -0
- package/src/shared/workspace/drag/workspace-drag.svelte.ts +354 -0
- package/src/shared/workspace/drag/workspace-pointer-drag-policy.ts +18 -0
- package/src/shared/workspace/drop-overlay/WorkspaceDropOverlay.css +24 -0
- package/src/shared/workspace/drop-overlay/WorkspaceDropOverlay.svelte +48 -0
- package/src/shared/workspace/drop-overlay/WorkspaceTabsDrop.svelte +146 -0
- package/src/shared/workspace/drop-overlay/index.ts +7 -0
- package/src/shared/workspace/drop-overlay/workspace-tabs-drop.ts +59 -0
- package/src/shared/workspace/empty/WorkspaceEmpty.css +42 -0
- package/src/shared/workspace/empty/WorkspaceEmpty.svelte +88 -0
- package/src/shared/workspace/empty/index.ts +1 -0
- package/src/shared/workspace/empty/workspace-empty-actions.ts +127 -0
- package/src/shared/workspace/explorer/WorkspaceExplorer.css +275 -0
- package/src/shared/workspace/explorer/WorkspaceExplorer.svelte +662 -0
- package/src/shared/workspace/explorer/create-explorer-view.ts +31 -0
- package/src/shared/workspace/explorer/explorer-controller.svelte.ts +423 -0
- package/src/shared/workspace/explorer/index.ts +45 -0
- package/src/shared/workspace/explorer/memory-adapter.ts +290 -0
- package/src/shared/workspace/explorer/path.ts +37 -0
- package/src/shared/workspace/explorer/tree.ts +164 -0
- package/src/shared/workspace/explorer/types.ts +134 -0
- package/src/shared/workspace/floating-layer/WorkspaceFloatingLayer.css +19 -0
- package/src/shared/workspace/floating-layer/WorkspaceFloatingLayer.svelte +68 -0
- package/src/shared/workspace/floating-layer/index.ts +1 -0
- package/src/shared/workspace/floating-window/WorkspaceFloatingWindow.css +205 -0
- package/src/shared/workspace/floating-window/WorkspaceFloatingWindow.svelte +353 -0
- package/src/shared/workspace/floating-window/index.ts +1 -0
- package/src/shared/workspace/icon/WorkspaceIcon.css +21 -0
- package/src/shared/workspace/icon/WorkspaceIcon.svelte +38 -0
- package/src/shared/workspace/icon/WorkspaceIconPicker.css +69 -0
- package/src/shared/workspace/icon/WorkspaceIconPicker.svelte +168 -0
- package/src/shared/workspace/icon/icons.ts +92 -0
- package/src/shared/workspace/icon/index.ts +10 -0
- package/src/shared/workspace/index.ts +49 -0
- package/src/shared/workspace/menu/WorkspaceContextMenuItems.svelte +83 -0
- package/src/shared/workspace/menu/WorkspaceMenuItems.css +58 -0
- package/src/shared/workspace/menu/WorkspaceMenuItems.svelte +83 -0
- package/src/shared/workspace/menu/index.ts +2 -0
- package/src/shared/workspace/mobile/WorkspaceMobile.css +417 -0
- package/src/shared/workspace/mobile/WorkspaceMobile.svelte +429 -0
- package/src/shared/workspace/mobile/WorkspaceMobileActionSheet.css +101 -0
- package/src/shared/workspace/mobile/WorkspaceMobileActionSheet.svelte +59 -0
- package/src/shared/workspace/mobile/WorkspaceMobileActionsDrawer.svelte +133 -0
- package/src/shared/workspace/mobile/WorkspaceMobileDock.svelte +109 -0
- package/src/shared/workspace/mobile/WorkspaceMobileSidebar.svelte +144 -0
- package/src/shared/workspace/mobile/WorkspaceMobileTabTile.svelte +71 -0
- package/src/shared/workspace/mobile/WorkspaceMobileTabs.svelte +102 -0
- package/src/shared/workspace/mobile/WorkspaceMobileTabsActions.svelte +62 -0
- package/src/shared/workspace/mobile/WorkspaceMobileViewActions.svelte +56 -0
- package/src/shared/workspace/mobile/index.ts +9 -0
- package/src/shared/workspace/plugins/f-mode/FModeOverlay.css +158 -0
- package/src/shared/workspace/plugins/f-mode/FModeOverlay.svelte +210 -0
- package/src/shared/workspace/plugins/f-mode/f-mode-plugin.ts +152 -0
- package/src/shared/workspace/plugins/f-mode/f-mode-session.svelte.ts +57 -0
- package/src/shared/workspace/plugins/f-mode/hint-labels.ts +123 -0
- package/src/shared/workspace/plugins/f-mode/index.ts +6 -0
- package/src/shared/workspace/plugins/f-mode/settings.ts +191 -0
- package/src/shared/workspace/plugins/f-mode/types.ts +29 -0
- package/src/shared/workspace/plugins/notifications/NotificationCenter.svelte +225 -0
- package/src/shared/workspace/plugins/notifications/NotificationStatus.svelte +41 -0
- package/src/shared/workspace/plugins/notifications/NotificationToasts.svelte +41 -0
- package/src/shared/workspace/plugins/notifications/Notifications.css +331 -0
- package/src/shared/workspace/plugins/notifications/NotificationsOverlay.svelte +23 -0
- package/src/shared/workspace/plugins/notifications/NotificationsStorySurface.svelte +15 -0
- package/src/shared/workspace/plugins/notifications/index.ts +12 -0
- package/src/shared/workspace/plugins/notifications/notification-presentation.svelte.ts +15 -0
- package/src/shared/workspace/plugins/notifications/notification-status-model.ts +137 -0
- package/src/shared/workspace/plugins/notifications/notifications-plugin.ts +101 -0
- package/src/shared/workspace/plugins/notifications/types.ts +10 -0
- package/src/shared/workspace/popout/AppShellPopoutLayer.svelte +92 -0
- package/src/shared/workspace/popout/WorkspaceOverlayPortalFixture.svelte +49 -0
- package/src/shared/workspace/popout/WorkspacePopoutSurface.css +16 -0
- package/src/shared/workspace/popout/WorkspacePopoutSurface.svelte +50 -0
- package/src/shared/workspace/popout/index.ts +2 -0
- package/src/shared/workspace/problems/ProblemsQuickFix.svelte +53 -0
- package/src/shared/workspace/problems/WorkspaceProblems.css +568 -0
- package/src/shared/workspace/problems/WorkspaceProblems.svelte +352 -0
- package/src/shared/workspace/problems/WorkspaceProblemsTable.svelte +190 -0
- package/src/shared/workspace/problems/diagnostics-manager.svelte.ts +326 -0
- package/src/shared/workspace/problems/index.ts +43 -0
- package/src/shared/workspace/problems/problems-controller.svelte.ts +346 -0
- package/src/shared/workspace/problems/problems-plugin.ts +206 -0
- package/src/shared/workspace/problems/types.ts +151 -0
- package/src/shared/workspace/ribbon/WorkspaceRibbon.css +107 -0
- package/src/shared/workspace/ribbon/WorkspaceRibbon.svelte +89 -0
- package/src/shared/workspace/ribbon/index.ts +1 -0
- package/src/shared/workspace/settings/AppSettingsContent.svelte +210 -0
- package/src/shared/workspace/settings/AppSettingsNavigation.svelte +59 -0
- package/src/shared/workspace/settings/AppSettingsRoot.svelte +36 -0
- package/src/shared/workspace/settings/AppSettingsSearch.svelte +37 -0
- package/src/shared/workspace/settings/AppSettingsSection.svelte +72 -0
- package/src/shared/workspace/settings/AppShellHotkeySettings.svelte +403 -0
- package/src/shared/workspace/settings/AppShellPluginsSettings.svelte +104 -0
- package/src/shared/workspace/settings/WorkspaceSettingAddButton.svelte +24 -0
- package/src/shared/workspace/settings/WorkspaceSettingField.svelte +436 -0
- package/src/shared/workspace/settings/WorkspaceSettingList.svelte +95 -0
- package/src/shared/workspace/settings/WorkspaceSettingMultiSelect.svelte +147 -0
- package/src/shared/workspace/settings/WorkspaceSettingObjectTable.svelte +212 -0
- package/src/shared/workspace/settings/WorkspaceSettingSelect.svelte +120 -0
- package/src/shared/workspace/settings/WorkspaceSettingToggleTable.svelte +63 -0
- package/src/shared/workspace/settings/WorkspaceSettings.css +1190 -0
- package/src/shared/workspace/settings/WorkspaceSettingsStoryCustomField.svelte +17 -0
- package/src/shared/workspace/settings/WorkspaceSettingsSurface.svelte +28 -0
- package/src/shared/workspace/settings/app-settings-context.svelte.ts +33 -0
- package/src/shared/workspace/settings/configuration.ts +90 -0
- package/src/shared/workspace/settings/index.ts +39 -0
- package/src/shared/workspace/settings/multiselect.ts +40 -0
- package/src/shared/workspace/settings/object-collection.ts +54 -0
- package/src/shared/workspace/settings/persistence.ts +24 -0
- package/src/shared/workspace/settings/plugin-settings-target.ts +33 -0
- package/src/shared/workspace/settings/search-hit.ts +2 -0
- package/src/shared/workspace/settings/settings-controller.svelte.ts +629 -0
- package/src/shared/workspace/settings/types.ts +254 -0
- package/src/shared/workspace/sidebar/WorkspaceSidebar.css +368 -0
- package/src/shared/workspace/sidebar/WorkspaceSidebar.svelte +398 -0
- package/src/shared/workspace/sidebar/index.ts +1 -0
- package/src/shared/workspace/sidebar-empty/WorkspaceSidebarEmpty.css +50 -0
- package/src/shared/workspace/sidebar-empty/WorkspaceSidebarEmpty.svelte +48 -0
- package/src/shared/workspace/sidebar-empty/index.ts +1 -0
- package/src/shared/workspace/sidebar-group/WorkspaceSidebarGroup.css +214 -0
- package/src/shared/workspace/sidebar-group/WorkspaceSidebarGroup.svelte +339 -0
- package/src/shared/workspace/sidebar-group/WorkspaceSidebarGroupEditor.css +46 -0
- package/src/shared/workspace/sidebar-group/WorkspaceSidebarGroupEditor.svelte +164 -0
- package/src/shared/workspace/sidebar-group/WorkspaceSidebarGroupVisibilityDialog.css +18 -0
- package/src/shared/workspace/sidebar-group/WorkspaceSidebarGroupVisibilityDialog.svelte +97 -0
- package/src/shared/workspace/sidebar-group/index.ts +11 -0
- package/src/shared/workspace/sidebar-group/workspace-sidebar-layout.ts +82 -0
- package/src/shared/workspace/sidebar-toggle/WorkspaceSidebarToggle.css +74 -0
- package/src/shared/workspace/sidebar-toggle/WorkspaceSidebarToggle.svelte +68 -0
- package/src/shared/workspace/sidebar-toggle/index.ts +1 -0
- package/src/shared/workspace/split/WorkspaceSplit.css +110 -0
- package/src/shared/workspace/split/WorkspaceSplit.svelte +64 -0
- package/src/shared/workspace/split/index.ts +1 -0
- package/src/shared/workspace/stacked-tabs/WorkspaceStackedTabs.css +297 -0
- package/src/shared/workspace/stacked-tabs/WorkspaceStackedTabs.svelte +519 -0
- package/src/shared/workspace/stacked-tabs/index.ts +1 -0
- package/src/shared/workspace/startup/WorkspaceStartup.css +201 -0
- package/src/shared/workspace/startup/WorkspaceStartup.svelte +216 -0
- package/src/shared/workspace/startup/index.ts +7 -0
- package/src/shared/workspace/status-bar/WorkspaceStatusBar.css +40 -0
- package/src/shared/workspace/status-bar/WorkspaceStatusBar.svelte +36 -0
- package/src/shared/workspace/status-bar/index.ts +1 -0
- package/src/shared/workspace/status-item/WorkspaceStatusItem.css +67 -0
- package/src/shared/workspace/status-item/WorkspaceStatusItem.svelte +97 -0
- package/src/shared/workspace/status-item/index.ts +1 -0
- package/src/shared/workspace/tabs/WorkspaceTabs.css +467 -0
- package/src/shared/workspace/tabs/WorkspaceTabs.svelte +627 -0
- package/src/shared/workspace/tabs/WorkspaceTabsMove.svelte +152 -0
- package/src/shared/workspace/tabs/index.ts +2 -0
- package/src/shared/workspace/tree/WorkspaceTree.css +11 -0
- package/src/shared/workspace/tree/WorkspaceTree.svelte +86 -0
- package/src/shared/workspace/tree/index.ts +1 -0
- package/src/shared/workspace/view-header/WorkspaceViewHeader.css +170 -0
- package/src/shared/workspace/view-header/WorkspaceViewHeader.svelte +282 -0
- package/src/shared/workspace/view-header/WorkspaceViewLabel.css +48 -0
- package/src/shared/workspace/view-header/WorkspaceViewLabel.svelte +61 -0
- package/src/shared/workspace/view-header/index.ts +2 -0
- package/src/shared/workspace/view-header/workspace-view-label.ts +61 -0
- package/src/shared/workspace/view-host/ExampleWorkspaceView.svelte +35 -0
- package/src/shared/workspace/view-host/WorkspaceImperativeView.svelte +32 -0
- package/src/shared/workspace/view-host/WorkspaceViewHost.css +23 -0
- package/src/shared/workspace/view-host/WorkspaceViewHost.svelte +94 -0
- package/src/shared/workspace/view-host/index.ts +2 -0
- package/src/shared/workspace/workspace-desktop-drag.css +9 -0
- package/src/shared/workspace/workspace.tokens.css +181 -0
- package/src/shared/workspace/workspace.tokens.ts +224 -0
- package/src/storybook/catalog-layout.ts +28 -0
- package/src/storybook/visual-capture.ts +9 -0
- package/src/storybook.css +46 -0
- package/src/styles.css +81 -0
- package/src/theme.css +122 -0
- package/src/themes/lapis.css +225 -0
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
# Complete CV Form story
|
|
2
|
+
|
|
3
|
+
## Boundary
|
|
4
|
+
|
|
5
|
+
- Story: `UI Forms/Examples/Complete CV Form`.
|
|
6
|
+
- Composition: `AppShell.Root -> Main -> Body`; the Body does not add a shell-level Scroll Area. At wide widths the structured pane owns a shadcn Scroll Area and YAML owns its editor scroll. Compact widths mirror CV Studio with a Form/YAML tab switch so the visible pane remains the only scroll owner and the page stays locked.
|
|
7
|
+
- Source snapshot: `/Users/stevejuma/code/cv/data/cvs/sample-cv.yml`, copied on 2026-08-11 into `sample-cv.fixture.yml` (9578 source bytes before the final newline).
|
|
8
|
+
- Ownership: the App Shell, split workspace, YAML orchestration, fixture, and
|
|
9
|
+
four CV-domain configurations remain story-local. Typed path configuration,
|
|
10
|
+
controllers, repeaters, renderer registries, and presentation variants are
|
|
11
|
+
owned by Design Core. No dependency or CV repository change was made.
|
|
12
|
+
- Reference parity: the populated CV Studio Sample CV is the visual source. The wide layout keeps the structured form and active fragment YAML visible together; compact widths switch between the two full-height panes using the same mobile-tab pattern as CV Studio.
|
|
13
|
+
- Out of scope: persistence, routing, preview/rendering, evidence, and AI review.
|
|
14
|
+
|
|
15
|
+
## Checklist
|
|
16
|
+
|
|
17
|
+
- [x] Snapshot the complete John Doe fixture.
|
|
18
|
+
- [x] Add typed source, entry, path, UI identity, default factory, and movement helpers.
|
|
19
|
+
- [x] Add wrapped/unwrapped fragment YAML parsing, minimum structural validation, and invalid-text preservation.
|
|
20
|
+
- [x] Build the body-only App Shell, tabs, toolbar, and responsive form/YAML layout.
|
|
21
|
+
- [x] Replace the mode toggle and YAML header with a 48/52 resizable form/YAML split using the installed shadcn Resizable composition.
|
|
22
|
+
- [x] Keep the form pane in the installed shadcn Scroll Area at every width, with no native page or tab-panel scroll handoff.
|
|
23
|
+
- [x] Switch between full-height Form and YAML panes on compact viewports while retaining the resizable split at wide widths.
|
|
24
|
+
- [x] Retain the App Shell border, radius, and equal outer inset at compact and body-only desktop widths.
|
|
25
|
+
- [x] Remove the YAML editor's leading inset and preserve a stacked compact layout.
|
|
26
|
+
- [x] Render CV profile, networks, roles, all nine section types, and nested repeatables.
|
|
27
|
+
- [x] Match simple-entry presentation with bullets, forward numbering, reversed numbering, and visually hidden repeated field labels.
|
|
28
|
+
- [x] Match bullet, numbered, and reversed-numbered row focus treatment to the existing sortable list rows.
|
|
29
|
+
- [x] Let simple-entry dividers span their marker and field, align markers to the row start, and use wider Bullet marker spacing.
|
|
30
|
+
- [x] Remove duplicate and trailing dividers from sortable list rows, Social Networks, Target Roles, and Highlights.
|
|
31
|
+
- [x] Render Social Network with the same inline option picker as Theme, strengthen Add-action contrast, and make compact Add actions full width.
|
|
32
|
+
- [x] Keep the Text-section and Highlights-list add actions concise with the label `Add`.
|
|
33
|
+
- [x] Keep inline add actions subdued until hover/focus through shared FormAddButton and ListEditor styling.
|
|
34
|
+
- [x] Use the shared prominent Resizable handle variant for the CV-reference 4px separator and larger drag thumb.
|
|
35
|
+
- [x] Remove the redundant sibling-group top border so Design groups have one header divider instead of doubled boundaries.
|
|
36
|
+
- [x] Center disclosure chevrons against the title line box rather than title-row padding and divider space.
|
|
37
|
+
- [x] Keep configured section bodies visually attached to their headings with a shared 1px top inset.
|
|
38
|
+
- [x] Match Role History and Extra Details title dividers and full-width dashed add actions to the reference.
|
|
39
|
+
- [x] Render all Design, Locale, and Settings groups with CV Studio defaults.
|
|
40
|
+
- [x] Wire live per-tab YAML round-trip and deterministic reset.
|
|
41
|
+
- [x] Link a bounded consumer example from Forms Guidance.
|
|
42
|
+
- [x] Add the primary interaction story and deterministic reset-at-end coverage.
|
|
43
|
+
- [x] Run focused tests, repository checks, Storybook build, live wide/narrow/a11y acceptance, and compare-only visual checks.
|
|
44
|
+
- [x] Commit the model/YAML, shared layout, and rendered-story slices separately with Jujutsu.
|
|
45
|
+
|
|
46
|
+
## Type-safe configuration migration
|
|
47
|
+
|
|
48
|
+
- [x] Add `FieldValues`, typed object/array paths, exact path values, compatible
|
|
49
|
+
renderer kinds, and public `defineFormConfig<TValues>()` inference.
|
|
50
|
+
- [x] Cover optional and nullable paths, including nullish propagation through
|
|
51
|
+
optional ancestors such as `page.size`.
|
|
52
|
+
- [x] Add immutable path reads/writes, display-only defaults, and typed ancestor
|
|
53
|
+
materialization without dropping unknown YAML keys.
|
|
54
|
+
- [x] Add isolated renderer registries with typed module augmentation,
|
|
55
|
+
replacement/disposal, legacy-local precedence, and accessible missing-renderer
|
|
56
|
+
output.
|
|
57
|
+
- [x] Add `createFormController<TValues>()` with dirty, touched, validation,
|
|
58
|
+
focus, reset, disclosure, stable repeater identities, and async race handling.
|
|
59
|
+
- [x] Add collapsible groups, primitive/object arrays, discriminated variant
|
|
60
|
+
arrays, markers, editable titles, add/move/remove, and nested disclosure to
|
|
61
|
+
the shared renderer.
|
|
62
|
+
- [x] Add shared `stacked`, `subsection`, hidden-label, and panel add-button
|
|
63
|
+
variants. `CompleteCvForm.css` now contains only shell/workspace composition;
|
|
64
|
+
configured form styling is guarded by a unit boundary test.
|
|
65
|
+
- [x] Replace the custom Complete CV renderer, group renderer, callback configs,
|
|
66
|
+
path mutation, disclosure, and identity helpers with four literal typed maps:
|
|
67
|
+
CV, Design, Locale, and Settings.
|
|
68
|
+
- [x] Preserve all nine correlated entry variants, bullet/forward/reverse
|
|
69
|
+
markers, redundant single-value labels as visually hidden accessible labels,
|
|
70
|
+
locale default materialization, and YAML round-trip behavior.
|
|
71
|
+
- [x] Retain the legacy callback story and add typed path, explicit custom
|
|
72
|
+
registry, and missing-renderer Storybook coverage.
|
|
73
|
+
- [x] Update the consumer source, Forms guidance, StructuredForm docs,
|
|
74
|
+
`spec/src/forms/guidance.md`, and the component inventory.
|
|
75
|
+
- [x] Complete repository-wide build, live wide/narrow/a11y, and compare-only
|
|
76
|
+
visual validation for this migration. Do not write a baseline.
|
|
77
|
+
|
|
78
|
+
## Design picker follow-up
|
|
79
|
+
|
|
80
|
+
- [x] Add a shared controlled `ColorPicker` with a circular native color swatch,
|
|
81
|
+
editable serialized value, RGB-compatible display fallback, accessible
|
|
82
|
+
labels/errors, and `hex`/`hex-without-hash` output modes.
|
|
83
|
+
- [x] Add a shared `CyclePicker` for previous/current/next selection, option-list
|
|
84
|
+
disclosure, and optional font-family previews.
|
|
85
|
+
- [x] Keep the three cycle controls visually borderless with transparent borders,
|
|
86
|
+
independent 8px four-corner radii, and shared Button hover/focus behavior;
|
|
87
|
+
separate their hover surfaces with a 2px gap, and center/ellipsize the
|
|
88
|
+
current value without a center chevron.
|
|
89
|
+
- [x] Add typed `color` kind support and `options` cycle presentation to both
|
|
90
|
+
path maps and the retained callback configuration API.
|
|
91
|
+
- [x] Migrate all eight Design color values plus Theme and all five Font Family
|
|
92
|
+
values to the shared controls, using the current CV Studio theme and font
|
|
93
|
+
option catalogs.
|
|
94
|
+
- [x] Add public exports, consumer examples, component stories, documentation,
|
|
95
|
+
audit entries, and focused type/runtime/interaction coverage.
|
|
96
|
+
|
|
97
|
+
## Mira CodeMirror shell migration
|
|
98
|
+
|
|
99
|
+
- [x] Link `@lapismd/mira` from `../mira-mde/packages/mira` and remove the
|
|
100
|
+
aggregate `codemirror` dependency.
|
|
101
|
+
- [x] Keep Complete CV's public `YamlEditor` integration unchanged while moving
|
|
102
|
+
CodeMirror mounting, controlled synchronization, base chrome, sizing,
|
|
103
|
+
gutters, and scroller ownership into Mira's `MiraCodeEditor`.
|
|
104
|
+
- [x] Retain YAML language support, invalid state, active-selection formatting,
|
|
105
|
+
folding, review hunks, Keep/Undo actions, and form-token mappings in Design
|
|
106
|
+
Core.
|
|
107
|
+
- [x] Add targeted Svelte and CodeMirror peer-singleton resolution for the local
|
|
108
|
+
linked package, without a source alias, package patch, or global
|
|
109
|
+
`preserveSymlinks` behavior.
|
|
110
|
+
- [x] Add source-boundary, language-alias, syntax-diagnostic, folding, formatting,
|
|
111
|
+
sizing, and existing Complete CV interaction coverage.
|
|
112
|
+
- [x] Record final non-visual Mira, Design Core, and Lapis validation evidence.
|
|
113
|
+
- [x] Skip Visual Delta runs and baseline changes per the user's explicit
|
|
114
|
+
instruction.
|
|
115
|
+
|
|
116
|
+
## Validation evidence
|
|
117
|
+
|
|
118
|
+
- Config migration focused unit run: 8 files and 35 tests passed, covering path
|
|
119
|
+
types/utilities/runtime defaults, all validation modes, async races,
|
|
120
|
+
controller metadata, registry isolation, form layout ownership, YAML, and the
|
|
121
|
+
story CSS boundary.
|
|
122
|
+
- Config migration focused Storybook run: 2 files and 5 stories passed,
|
|
123
|
+
covering legacy callbacks, typed groups/repeaters, explicit/missing custom
|
|
124
|
+
renderers, and Complete CV parity interactions.
|
|
125
|
+
- `pnpm check`: passed with zero errors or warnings after migrating all four
|
|
126
|
+
fragments to literal `defineFormConfig` maps.
|
|
127
|
+
- Live Storybook geometry confirmed every profile field now spans the complete
|
|
128
|
+
form row through the shared `FormFieldRenderer` subgrid selector; the two
|
|
129
|
+
remaining tracks are only the intended label/value tracks inside each row.
|
|
130
|
+
|
|
131
|
+
- Focus-state follow-up: `pnpm exec vitest run --project storybook src/shared/forms/complete-cv-form/CompleteCvForm.stories.svelte` passed its interaction test, including computed focus-color parity between all three simple entry rows and `SortableArrayItem`.
|
|
132
|
+
- Focus-state follow-up: `pnpm check:no-tailwind` and `pnpm check` passed with zero errors or warnings. Live Storybook inspection confirmed BulletEntry, NumberedEntry, and ReversedNumberedEntry each retain keyboard/input focus and compute the same `--ui-form-accent` 8% background as Target Roles.
|
|
133
|
+
- `pnpm exec vitest run --project unit src/shared/forms/complete-cv-form/complete-cv-form.model.spec.ts src/shared/forms/form-field/FormField.layout.spec.ts`: 2 files and 14 tests passed, including marker ordering, root-scoped sortable borders, and responsive Add-action rules.
|
|
134
|
+
- `pnpm exec vitest run --project storybook src/shared/forms/complete-cv-form/CompleteCvForm.stories.svelte src/shared/shell/app-shell/AppShell.stories.svelte`: 2 files and 11 tests passed, including sample reset, compact Form/YAML switching, pane-only scroll ownership, equal shell insets, App Shell compact framing, YAML round-trip, and representative controls.
|
|
135
|
+
- `pnpm check` and `pnpm check:no-tailwind`: passed with zero errors or warnings.
|
|
136
|
+
- Scoped Prettier verification for every changed file: passed. Repository-wide `pnpm fmt:check` remains blocked only by six pre-existing unrelated files: `src/shared/shadcn/column-canvas/column-canvas-controller.svelte.ts`, `src/shared/workspace/about-dialog/WorkspaceAboutDialog.css`, `src/shared/workspace/about-dialog/WorkspaceAboutDialog.stories.svelte`, `src/shared/workspace/core/app-workspace.ts`, `src/shared/workspace/explorer/tree.ts`, and `src/shared/workspace/explorer/WorkspaceExplorer.css`.
|
|
137
|
+
- `pnpm checks`: reached the same pre-existing six-file `fmt:check` gate and stopped before its remaining commands, so the focused checks and compare-only visual run were executed separately.
|
|
138
|
+
- `pnpm build-storybook`: passed; Vite emitted only its existing large-chunk advisory.
|
|
139
|
+
- `pnpm workspace:visual:audit`: passed with 112 workspace stories, 0 visual failures, 0 orphan baselines, and 0 contract errors.
|
|
140
|
+
- Earlier live Storybook acceptance passed at 1426 x 990 and 386 x 835 for the resizable split, YAML alignment, simple-entry markers, and horizontal-overflow checks; the compact stacked-layout result from that pass was superseded by the Form/YAML mobile-tab follow-up below.
|
|
141
|
+
- Follow-up live acceptance against CV Studio's `CvWorkspaceHost` scroll chain passed at 1267 x 713 and 515 x 835. Wide mode kept both resizable panes visible; compact mode exposed Form/YAML tabs and only the selected full-height pane. The document, shell body, and top-level tab panel remained non-scrollable, while the form viewport reported `overflow-y: scroll`, hidden native scrollbar chrome, and a mounted shadcn scrollbar/thumb. The YAML view retained only CodeMirror scrolling.
|
|
142
|
+
- Live compact geometry confirmed equal 8px App Shell insets, a 14px shell radius and 1px border, full-width Social Networks and Target Roles Add actions, and full-width 46px dashed actions with title dividers for Role History and Extra Details.
|
|
143
|
+
- Live DOM inspection confirmed `•` for all five Selected Honors rows, `1.` through `3.` for Patents, `4.` through `1.` for Invited Talks, no visible `Text` label for the Welcome to RenderCV entries, one root divider per sortable row, and no trailing divider on the final list or Social Networks row.
|
|
144
|
+
- Live wide and compact inspection confirmed the Skills, Patents, and Invited Talks add actions align to the right with 12px of space above; at the compact breakpoint they span the repeater width. Text-section and Highlights-list actions render exactly `Add`, with no legacy `Add text`, `highlight`, or `Add highlight` labels remaining.
|
|
145
|
+
- Latest live inspection confirmed Bullet, Numbered, and Reversed Numbered dividers span the full marker-and-field row while nested field borders are suppressed. Every marker has a 0px leading inset; Bullet marker spacing is 10px versus the 6px numeric default. Inline Add actions rest at 62% foreground opacity and become fully opaque on hover. The prominent split separator measures 4px with a 10px by 40px thumb, matching the CV Studio reference proportions.
|
|
146
|
+
- Latest focused validation passed: 2 core unit files with 10 tests, `pnpm check`, `pnpm check:no-tailwind`, and 2 Storybook files covering Complete CV plus the base Resizable story. The Storybook run retained the global zero-confirmed-violation a11y gate.
|
|
147
|
+
- Design divider investigation found the shared group header and next-group wrapper both owned the same boundary. After removing the wrapper border upstream, live Design inspection confirmed all 22 groups have a 0px top border and retain one approximately 1px header divider. The focused unit and Complete CV Storybook regressions passed.
|
|
148
|
+
- Design chevrons were approximately 2.1px low because the absolute toggle used 50% of a row that included 3.2px bottom padding and the divider, while the title occupied the first 24px. The shared FormSectionHeader now centers against an overridable title-line-height token; live inspection reports a 0px center delta for all 22 Design groups, and the component plus Complete CV Storybook tests passed.
|
|
149
|
+
- Browser-marker inspection isolated the post-heading gap to the shared configured-array section body rather than FormSectionHeader. Its top inset is now 1px while the 20px left indent, 12px bottom inset, and original 3.2px header padding remain unchanged; the focused Complete CV interaction test and live computed-style check passed.
|
|
150
|
+
- Final migration validation passed `pnpm check`, `pnpm check:no-tailwind`, Docs MCP typechecking, the focused Complete CV Storybook interaction, `pnpm build-storybook`, and `pnpm workspace:visual:audit` with 112 stories, 0 visual failures, 0 orphan baselines, and 0 contract errors.
|
|
151
|
+
- `pnpm test:visual:affected` selected the full 422-scenario compare-only fallback because the uncommitted stack contains the globally scoped Forms Guidance input. The story remains a missing-baseline warning; no baseline was written.
|
|
152
|
+
- `pnpm test:visual`: all 422 compare-only capture scenarios executed successfully in 15.6 minutes. The new story produced `outcome: missing-baseline` with warning policy under the canonical Linux ARM64 profile; no reference image was written.
|
|
153
|
+
- Design picker follow-up: focused unit validation passed 3 files and 9 tests,
|
|
154
|
+
including color parsing/serialization and path-config kind inference. Focused
|
|
155
|
+
Storybook validation passed ColorPicker, CyclePicker, and Complete CV (3 files,
|
|
156
|
+
4 tests) with the global a11y gate enabled; the CyclePicker-only regression run
|
|
157
|
+
also passed its 2 stories after adding the long-label truncation assertion.
|
|
158
|
+
- Design picker follow-up: `pnpm check` passed with zero errors or warnings.
|
|
159
|
+
Live Complete CV inspection found all 8 color fields using 27.99px square
|
|
160
|
+
swatches clipped to `circle(50%)`, with the expected `#000000`, `#004f90`, and
|
|
161
|
+
`#808080` values. Theme and five font fields use the shared CyclePicker; its
|
|
162
|
+
current control has no icon or visible border, centers its contents, and uses
|
|
163
|
+
ellipsis/nowrap overflow behavior.
|
|
164
|
+
- Design picker follow-up: the final focused Storybook run passed all 3 files
|
|
165
|
+
and 4 tests after asserting a 2px control gap, transparent borders, independent
|
|
166
|
+
8px radii, the absent center chevron, and real long-label overflow. The scoped
|
|
167
|
+
Prettier check, `pnpm check:no-tailwind`, Docs MCP typecheck,
|
|
168
|
+
`pnpm build-storybook`, and workspace visual-contract audit all passed. The
|
|
169
|
+
repository-wide Prettier check remains blocked by 5 unrelated pre-existing
|
|
170
|
+
files; none were changed.
|
|
171
|
+
- Per the user's explicit stop request, the 428-scenario affected compare-only
|
|
172
|
+
visual run was interrupted during isolated dependency setup. No capture,
|
|
173
|
+
comparison, or baseline write was completed for this follow-up.
|
|
174
|
+
- Mira shell migration: `pnpm check:all`, `pnpm packages:pack`,
|
|
175
|
+
`pnpm packages:check`, `pnpm spec:check`, `pnpm catalog:check`, and
|
|
176
|
+
`pnpm build-storybook` passed. The package suite covered 57 Mira test files
|
|
177
|
+
and 330 tests, the catalog documents 157 public tokens, and the packed
|
|
178
|
+
six-package graph passed its install and leak checks.
|
|
179
|
+
- Design Core shell migration: `pnpm check`, Docs MCP typechecking,
|
|
180
|
+
`pnpm check:no-tailwind`, the 4-file/15-test focused unit run, the
|
|
181
|
+
7-file/15-test affected Storybook run, `pnpm build-storybook`, and the
|
|
182
|
+
workspace visual-contract audit passed. The audit reports 113 stories and
|
|
183
|
+
zero contract errors. The full unit run passed 545 of 547 tests; its two
|
|
184
|
+
failures are the pre-existing StructuredForm MDX fence and FormField docs
|
|
185
|
+
default expectations. Repository-wide Prettier remains blocked by the five
|
|
186
|
+
unrelated files listed above; the complete migration path passed scoped
|
|
187
|
+
Prettier verification.
|
|
188
|
+
- Live CodeEditor acceptance confirmed the editor, number gutter, Find panel,
|
|
189
|
+
and Find input compute to the same Design Core surface background. With Find
|
|
190
|
+
focused, both the field and framed editor have transparent borders and only
|
|
191
|
+
the mapped Design Core accent rings (2px and 1px respectively).
|
|
192
|
+
- Lapis consumer validation ran the repository's current `check:all` and
|
|
193
|
+
`build:all` equivalents because `check` and `build` scripts are not defined.
|
|
194
|
+
All 33 package-level check tasks passed; the aggregate then stopped only on
|
|
195
|
+
the unrelated root formatting issue in
|
|
196
|
+
`spec/src/10-architecture/monorepo-structure.md`. `build:all` stopped in the
|
|
197
|
+
unrelated Spellchecker build because Vite cannot parse
|
|
198
|
+
`packages/api/src/lib/components/editor/extensions/lint/lapis-lint-tooltip.svelte`;
|
|
199
|
+
neither consumer command changed the clean Lapis working copy.
|
|
200
|
+
- No Visual Delta command or baseline write was run for the Mira migration, per
|
|
201
|
+
the user's instruction.
|
|
202
|
+
- Search/Replace alignment follow-up: Mira now clears CodeMirror's independent
|
|
203
|
+
`.cm-panels-top` background as well as its divider. Design Core removed the
|
|
204
|
+
stale pre-pill radius, option-container, button-border, hover-border, and
|
|
205
|
+
active-state overrides so Mira owns the new shell chrome. Mira spec-first,
|
|
206
|
+
catalog, package check/build, 2 focused unit files with 9 tests, and the
|
|
207
|
+
3-story focused catalog run passed; Design Core check, no-Tailwind, the
|
|
208
|
+
4-test ownership unit file, 4 Code/YAML story tests, and static Storybook
|
|
209
|
+
build passed. Live YAML acceptance confirmed a transparent panel, 999px Find
|
|
210
|
+
pill, and transparent button borders. No visual test or baseline write was
|
|
211
|
+
run.
|
|
212
|
+
- Search typography follow-up: live comparison measured Find, Replace, and
|
|
213
|
+
their placeholders at 16px in Design Core versus 14px in Mira because the
|
|
214
|
+
search inputs inherited each consumer page's body size. Mira now owns a
|
|
215
|
+
compact `--mira-code-editor-search-font-size` default of `0.875rem`; after its
|
|
216
|
+
required root build, both linked stories computed 14px for both inputs and
|
|
217
|
+
placeholders. Mira spec-first, catalog, package check/build, 2 focused unit
|
|
218
|
+
files with 9 tests, and the 3-story focused catalog run passed. Design Core
|
|
219
|
+
check, no-Tailwind, 3 focused unit files with 9 tests, and 2 focused editor
|
|
220
|
+
story files with 4 tests passed; its static Storybook build also completed.
|
|
221
|
+
No visual test or baseline write was run.
|
|
222
|
+
|
|
223
|
+
## Visual baseline
|
|
224
|
+
|
|
225
|
+
Status: `visual-ready`. The canonical compare-only result is `missing-baseline`, pending human review. No reference screenshot was created or updated; the generated actual capture remains an ignored local artifact.
|
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
import { parse, stringify } from "yaml";
|
|
2
|
+
import { getFormValueAtPath } from "../core/path-utils";
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
CV_ENTRY_TYPES,
|
|
6
|
+
type AppliedYamlEdit,
|
|
7
|
+
type CompleteCvSource,
|
|
8
|
+
type CvEntry,
|
|
9
|
+
type CvEntryByType,
|
|
10
|
+
type CvEntryType,
|
|
11
|
+
type CvFragment,
|
|
12
|
+
type CvSection,
|
|
13
|
+
type CvStoryTab,
|
|
14
|
+
type FragmentValue,
|
|
15
|
+
type ParsedFragment,
|
|
16
|
+
type PathPart,
|
|
17
|
+
type StoryRecord,
|
|
18
|
+
} from "./complete-cv-form.types";
|
|
19
|
+
|
|
20
|
+
export const ENTRY_TYPE_OPTIONS: Array<{
|
|
21
|
+
value: CvEntryType;
|
|
22
|
+
label: string;
|
|
23
|
+
addLabel: string;
|
|
24
|
+
}> = [
|
|
25
|
+
{ value: "TextEntry", label: "Text", addLabel: "text" },
|
|
26
|
+
{
|
|
27
|
+
value: "ExperienceEntry",
|
|
28
|
+
label: "Experience Entry",
|
|
29
|
+
addLabel: "experience entry",
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
value: "EducationEntry",
|
|
33
|
+
label: "Education Entry",
|
|
34
|
+
addLabel: "education entry",
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
value: "PublicationEntry",
|
|
38
|
+
label: "Publication Entry",
|
|
39
|
+
addLabel: "publication entry",
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
value: "OneLineEntry",
|
|
43
|
+
label: "One-Line Entry",
|
|
44
|
+
addLabel: "one-line entry",
|
|
45
|
+
},
|
|
46
|
+
{ value: "BulletEntry", label: "Bullet Entry", addLabel: "bullet entry" },
|
|
47
|
+
{
|
|
48
|
+
value: "NumberedEntry",
|
|
49
|
+
label: "Numbered Entry",
|
|
50
|
+
addLabel: "numbered entry",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
value: "ReversedNumberedEntry",
|
|
54
|
+
label: "Reversed Numbered Entry",
|
|
55
|
+
addLabel: "reversed numbered entry",
|
|
56
|
+
},
|
|
57
|
+
{ value: "NormalEntry", label: "Normal Entry", addLabel: "normal entry" },
|
|
58
|
+
];
|
|
59
|
+
|
|
60
|
+
const UI_DEFAULTS = {
|
|
61
|
+
design: {},
|
|
62
|
+
locale: { language: "english" },
|
|
63
|
+
settings: {
|
|
64
|
+
current_date: "today",
|
|
65
|
+
pdf_title: "NAME - CV",
|
|
66
|
+
bold_keywords: [],
|
|
67
|
+
},
|
|
68
|
+
} satisfies Record<Exclude<CvStoryTab, "cv">, StoryRecord>;
|
|
69
|
+
|
|
70
|
+
export function isRecord(value: unknown): value is StoryRecord {
|
|
71
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export function cloneSource<T>(source: T): T {
|
|
75
|
+
return structuredClone(source);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export function uniqueId(base: string, existingIds: Iterable<string>): string {
|
|
79
|
+
const normalized =
|
|
80
|
+
base
|
|
81
|
+
.toLowerCase()
|
|
82
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
83
|
+
.replace(/(^-|-$)/g, "") || "item";
|
|
84
|
+
const existing = new Set(existingIds);
|
|
85
|
+
if (!existing.has(normalized)) return normalized;
|
|
86
|
+
let suffix = 2;
|
|
87
|
+
while (existing.has(`${normalized}-${suffix}`)) suffix += 1;
|
|
88
|
+
return `${normalized}-${suffix}`;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export function entryTypeLabel(entryType: CvEntryType): string {
|
|
92
|
+
return (
|
|
93
|
+
ENTRY_TYPE_OPTIONS.find((option) => option.value === entryType)?.label ??
|
|
94
|
+
entryType
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export function addEntryLabel(entryType: CvEntryType): string {
|
|
99
|
+
return (
|
|
100
|
+
ENTRY_TYPE_OPTIONS.find((option) => option.value === entryType)?.addLabel ??
|
|
101
|
+
"entry"
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export function simpleListEntryMarker(
|
|
106
|
+
entryType: CvEntryType,
|
|
107
|
+
index: number,
|
|
108
|
+
total: number,
|
|
109
|
+
): string | null {
|
|
110
|
+
if (entryType === "BulletEntry") return "•";
|
|
111
|
+
if (entryType === "NumberedEntry") return `${index + 1}.`;
|
|
112
|
+
if (entryType === "ReversedNumberedEntry") return `${total - index}.`;
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export function defaultEntry<TType extends CvEntryType>(
|
|
117
|
+
entryType: TType,
|
|
118
|
+
): CvEntryByType[TType] {
|
|
119
|
+
if (entryType === "TextEntry") return "" as CvEntryByType[TType];
|
|
120
|
+
if (entryType === "ExperienceEntry") {
|
|
121
|
+
return {
|
|
122
|
+
company: "New company",
|
|
123
|
+
position: "Role",
|
|
124
|
+
location: "",
|
|
125
|
+
start_date: "",
|
|
126
|
+
end_date: "",
|
|
127
|
+
display_date: "",
|
|
128
|
+
role_history: [],
|
|
129
|
+
extra_details: [],
|
|
130
|
+
highlights: [""],
|
|
131
|
+
} as unknown as CvEntryByType[TType];
|
|
132
|
+
}
|
|
133
|
+
if (entryType === "EducationEntry") {
|
|
134
|
+
return {
|
|
135
|
+
institution: "Institution",
|
|
136
|
+
degree: "",
|
|
137
|
+
area: "",
|
|
138
|
+
location: "",
|
|
139
|
+
start_date: "",
|
|
140
|
+
end_date: "",
|
|
141
|
+
display_date: "",
|
|
142
|
+
highlights: [],
|
|
143
|
+
} as unknown as CvEntryByType[TType];
|
|
144
|
+
}
|
|
145
|
+
if (entryType === "PublicationEntry") {
|
|
146
|
+
return {
|
|
147
|
+
title: "Publication title",
|
|
148
|
+
authors: [""],
|
|
149
|
+
journal: "",
|
|
150
|
+
date: "",
|
|
151
|
+
} as CvEntryByType[TType];
|
|
152
|
+
}
|
|
153
|
+
if (entryType === "OneLineEntry")
|
|
154
|
+
return { label: "Label", details: "" } as CvEntryByType[TType];
|
|
155
|
+
if (entryType === "BulletEntry")
|
|
156
|
+
return { bullet: "" } as CvEntryByType[TType];
|
|
157
|
+
if (entryType === "NumberedEntry")
|
|
158
|
+
return { number: "" } as CvEntryByType[TType];
|
|
159
|
+
if (entryType === "ReversedNumberedEntry")
|
|
160
|
+
return { reversed_number: "" } as CvEntryByType[TType];
|
|
161
|
+
return {
|
|
162
|
+
name: "New entry",
|
|
163
|
+
date: "",
|
|
164
|
+
location: "",
|
|
165
|
+
summary: "",
|
|
166
|
+
highlights: [],
|
|
167
|
+
} as unknown as CvEntryByType[TType];
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
export function defaultSection<TType extends CvEntryType>(
|
|
171
|
+
entryType: TType,
|
|
172
|
+
existingIds: Iterable<string> = [],
|
|
173
|
+
requestedTitle?: string,
|
|
174
|
+
): Extract<CvSection, { entry_type: TType }> {
|
|
175
|
+
const title =
|
|
176
|
+
requestedTitle?.trim() ||
|
|
177
|
+
(entryType === "TextEntry"
|
|
178
|
+
? "New Section"
|
|
179
|
+
: entryTypeLabel(entryType).replace(" Entry", ""));
|
|
180
|
+
return {
|
|
181
|
+
id: uniqueId(title, existingIds),
|
|
182
|
+
title,
|
|
183
|
+
entry_type: entryType,
|
|
184
|
+
entries: [defaultEntry(entryType)],
|
|
185
|
+
} as Extract<CvSection, { entry_type: TType }>;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
export function entryTitle(
|
|
189
|
+
entryType: CvEntryType,
|
|
190
|
+
entry: CvEntry,
|
|
191
|
+
index: number,
|
|
192
|
+
): string {
|
|
193
|
+
if (entryType === "TextEntry") {
|
|
194
|
+
return typeof entry === "string" && entry.trim()
|
|
195
|
+
? entry.trim().slice(0, 80)
|
|
196
|
+
: `Text ${index + 1}`;
|
|
197
|
+
}
|
|
198
|
+
if (!isRecord(entry)) return `${entryTypeLabel(entryType)} ${index + 1}`;
|
|
199
|
+
const record = entry as unknown as StoryRecord;
|
|
200
|
+
if (entryType === "ExperienceEntry") {
|
|
201
|
+
return (
|
|
202
|
+
[record.company, record.position].filter(Boolean).join(" — ") ||
|
|
203
|
+
`Experience ${index + 1}`
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
if (entryType === "EducationEntry") {
|
|
207
|
+
return (
|
|
208
|
+
[record.institution, record.area].filter(Boolean).join(" — ") ||
|
|
209
|
+
`Education ${index + 1}`
|
|
210
|
+
);
|
|
211
|
+
}
|
|
212
|
+
if (entryType === "PublicationEntry")
|
|
213
|
+
return String(record.title || `Publication ${index + 1}`);
|
|
214
|
+
if (entryType === "OneLineEntry")
|
|
215
|
+
return String(record.label || `One-line ${index + 1}`);
|
|
216
|
+
if (entryType === "BulletEntry")
|
|
217
|
+
return String(record.bullet || `Bullet ${index + 1}`).slice(0, 80);
|
|
218
|
+
if (entryType === "NumberedEntry")
|
|
219
|
+
return String(record.number || `Numbered ${index + 1}`).slice(0, 80);
|
|
220
|
+
if (entryType === "ReversedNumberedEntry") {
|
|
221
|
+
return String(
|
|
222
|
+
record.reversed_number || `Reversed numbered ${index + 1}`,
|
|
223
|
+
).slice(0, 80);
|
|
224
|
+
}
|
|
225
|
+
return String(record.name || `Entry ${index + 1}`);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
function assertString(value: unknown, path: string): string | null {
|
|
229
|
+
return value === undefined || typeof value === "string"
|
|
230
|
+
? null
|
|
231
|
+
: `${path} must be a string`;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
function validateCvFragment(value: StoryRecord): string | null {
|
|
235
|
+
for (const key of [
|
|
236
|
+
"name",
|
|
237
|
+
"headline",
|
|
238
|
+
"location",
|
|
239
|
+
"email",
|
|
240
|
+
"phone",
|
|
241
|
+
"website",
|
|
242
|
+
"last_updated",
|
|
243
|
+
]) {
|
|
244
|
+
const error = assertString(value[key], `cv.${key}`);
|
|
245
|
+
if (error) return error;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
if (value.target_roles !== undefined) {
|
|
249
|
+
if (
|
|
250
|
+
!Array.isArray(value.target_roles) ||
|
|
251
|
+
value.target_roles.some((item) => typeof item !== "string")
|
|
252
|
+
) {
|
|
253
|
+
return "cv.target_roles must be a list of strings";
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
if (value.social_networks !== undefined) {
|
|
257
|
+
if (
|
|
258
|
+
!Array.isArray(value.social_networks) ||
|
|
259
|
+
value.social_networks.some((item) => !isRecord(item))
|
|
260
|
+
) {
|
|
261
|
+
return "cv.social_networks must be a list of objects";
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
if (value.sections === undefined) return null;
|
|
265
|
+
if (!Array.isArray(value.sections)) return "cv.sections must be a list";
|
|
266
|
+
|
|
267
|
+
for (const [sectionIndex, rawSection] of value.sections.entries()) {
|
|
268
|
+
if (!isRecord(rawSection))
|
|
269
|
+
return `cv.sections[${sectionIndex}] must be an object`;
|
|
270
|
+
if (
|
|
271
|
+
typeof rawSection.id !== "string" ||
|
|
272
|
+
typeof rawSection.title !== "string"
|
|
273
|
+
) {
|
|
274
|
+
return `cv.sections[${sectionIndex}] needs string id and title fields`;
|
|
275
|
+
}
|
|
276
|
+
if (!CV_ENTRY_TYPES.includes(rawSection.entry_type as CvEntryType)) {
|
|
277
|
+
return `cv.sections[${sectionIndex}].entry_type is not supported`;
|
|
278
|
+
}
|
|
279
|
+
if (!Array.isArray(rawSection.entries)) {
|
|
280
|
+
return `cv.sections[${sectionIndex}].entries must be a list`;
|
|
281
|
+
}
|
|
282
|
+
const textEntries = rawSection.entry_type === "TextEntry";
|
|
283
|
+
const malformedEntry = rawSection.entries.some((entry) =>
|
|
284
|
+
textEntries ? typeof entry !== "string" : !isRecord(entry),
|
|
285
|
+
);
|
|
286
|
+
if (malformedEntry) {
|
|
287
|
+
return `cv.sections[${sectionIndex}].entries does not match ${rawSection.entry_type}`;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
return null;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
function validateKnownLists(
|
|
294
|
+
tab: CvStoryTab,
|
|
295
|
+
value: StoryRecord,
|
|
296
|
+
): string | null {
|
|
297
|
+
const listPath: [PathPart[], string] | null =
|
|
298
|
+
tab === "settings"
|
|
299
|
+
? [["bold_keywords"], "settings.bold_keywords"]
|
|
300
|
+
: tab === "design"
|
|
301
|
+
? [
|
|
302
|
+
["sections", "show_time_spans_in"],
|
|
303
|
+
"design.sections.show_time_spans_in",
|
|
304
|
+
]
|
|
305
|
+
: null;
|
|
306
|
+
if (!listPath) return null;
|
|
307
|
+
const [path, label] = listPath;
|
|
308
|
+
const list = getFormValueAtPath(value, path.join("."));
|
|
309
|
+
if (list === undefined) return null;
|
|
310
|
+
return Array.isArray(list) && list.every((item) => typeof item === "string")
|
|
311
|
+
? null
|
|
312
|
+
: `${label} must be a list of strings`;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
export function validateFragment(
|
|
316
|
+
tab: CvStoryTab,
|
|
317
|
+
value: unknown,
|
|
318
|
+
): string | null {
|
|
319
|
+
if (!isRecord(value)) return `${tab} must be an object`;
|
|
320
|
+
if (tab === "cv") return validateCvFragment(value);
|
|
321
|
+
return validateKnownLists(tab, value);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
export function parseFragment(tab: CvStoryTab, text: string): ParsedFragment {
|
|
325
|
+
try {
|
|
326
|
+
const parsed = parse(text) as unknown;
|
|
327
|
+
if (!isRecord(parsed))
|
|
328
|
+
return { ok: false, error: `${tab} must be an object` };
|
|
329
|
+
const candidate = Object.prototype.hasOwnProperty.call(parsed, tab)
|
|
330
|
+
? parsed[tab]
|
|
331
|
+
: parsed;
|
|
332
|
+
const validationError = validateFragment(tab, candidate);
|
|
333
|
+
if (validationError) return { ok: false, error: validationError };
|
|
334
|
+
return { ok: true, value: candidate as FragmentValue };
|
|
335
|
+
} catch (error) {
|
|
336
|
+
return {
|
|
337
|
+
ok: false,
|
|
338
|
+
error:
|
|
339
|
+
error instanceof Error ? error.message : "The YAML could not be parsed",
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
export function serializeFragment(
|
|
345
|
+
source: CompleteCvSource,
|
|
346
|
+
tab: CvStoryTab,
|
|
347
|
+
): string {
|
|
348
|
+
const value =
|
|
349
|
+
source[tab] ?? UI_DEFAULTS[tab as Exclude<CvStoryTab, "cv">] ?? {};
|
|
350
|
+
return stringify({ [tab]: value }, { lineWidth: 90 });
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
export function applyYamlEdit(
|
|
354
|
+
source: CompleteCvSource,
|
|
355
|
+
tab: CvStoryTab,
|
|
356
|
+
text: string,
|
|
357
|
+
): AppliedYamlEdit {
|
|
358
|
+
const parsed = parseFragment(tab, text);
|
|
359
|
+
if (!parsed.ok) return { source, text, error: parsed.error, applied: false };
|
|
360
|
+
return {
|
|
361
|
+
source: { ...source, [tab]: parsed.value },
|
|
362
|
+
text,
|
|
363
|
+
error: null,
|
|
364
|
+
applied: true,
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
export function parseCompleteSource(text: string): CompleteCvSource {
|
|
369
|
+
const parsed = parse(text) as unknown;
|
|
370
|
+
if (!isRecord(parsed)) throw new Error("The sample CV must be an object");
|
|
371
|
+
const cvError = validateFragment("cv", parsed.cv);
|
|
372
|
+
if (cvError) throw new Error(cvError);
|
|
373
|
+
for (const tab of ["design", "locale", "settings"] as const) {
|
|
374
|
+
if (parsed[tab] !== undefined) {
|
|
375
|
+
const error = validateFragment(tab, parsed[tab]);
|
|
376
|
+
if (error) throw new Error(error);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
return parsed as CompleteCvSource;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
export function fragmentWithDefaults(
|
|
383
|
+
source: CompleteCvSource,
|
|
384
|
+
tab: Exclude<CvStoryTab, "cv">,
|
|
385
|
+
): StoryRecord {
|
|
386
|
+
return { ...UI_DEFAULTS[tab], ...(source[tab] ?? {}) };
|
|
387
|
+
}
|