@bettercms-ai/kit 1.0.0 → 2.0.0-next.1
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/README.md +33 -0
- package/dist/adapters/dock-values.d.ts +28 -0
- package/dist/adapters/dock-values.js +41 -0
- package/dist/adapters/dock-values.js.map +1 -0
- package/{adapters → dist/adapters}/icons.js +2 -2
- package/dist/adapters/icons.js.map +1 -0
- package/{adapters → dist/adapters}/lossy.d.ts +94 -31
- package/dist/adapters/lossy.js +419 -0
- package/dist/adapters/lossy.js.map +1 -0
- package/{adapters → dist/adapters}/prod-types.d.ts +91 -26
- package/{adapters → dist/adapters}/prod-types.js +82 -13
- package/dist/adapters/prod-types.js.map +1 -0
- package/{adapters → dist/adapters}/schema.d.ts +40 -1
- package/{adapters → dist/adapters}/schema.js +1038 -204
- package/dist/adapters/schema.js.map +1 -0
- package/{adapters → dist/adapters}/values.d.ts +26 -5
- package/{adapters → dist/adapters}/values.js +87 -17
- package/dist/adapters/values.js.map +1 -0
- package/dist/brand/logo.js +96 -0
- package/dist/brand/logo.js.map +1 -0
- package/{context.d.ts → dist/context.d.ts} +131 -2
- package/{context.js → dist/context.js} +44 -2
- package/dist/context.js.map +1 -0
- package/{controls → dist/controls}/button.d.ts +19 -5
- package/{controls → dist/controls}/button.js +125 -54
- package/dist/controls/button.js.map +1 -0
- package/{controls → dist/controls}/c1.js +1 -1
- package/dist/controls/c1.js.map +1 -0
- package/{controls → dist/controls}/c2.js +1 -1
- package/dist/controls/c2.js.map +1 -0
- package/{controls → dist/controls}/choice.d.ts +7 -2
- package/{controls → dist/controls}/choice.js +71 -18
- package/dist/controls/choice.js.map +1 -0
- package/{controls → dist/controls}/code-register.js +1 -1
- package/dist/controls/code-register.js.map +1 -0
- package/{controls → dist/controls}/code.js +10 -9
- package/dist/controls/code.js.map +1 -0
- package/{controls → dist/controls}/color.js +8 -8
- package/dist/controls/color.js.map +1 -0
- package/{controls → dist/controls}/component-services.d.ts +42 -0
- package/dist/controls/component-services.js +7 -0
- package/dist/controls/component-services.js.map +1 -0
- package/{controls → dist/controls}/date-register.js +1 -1
- package/dist/controls/date-register.js.map +1 -0
- package/{controls → dist/controls}/date-zone.js +8 -2
- package/dist/controls/date-zone.js.map +1 -0
- package/{controls → dist/controls}/date.js +32 -24
- package/dist/controls/date.js.map +1 -0
- package/dist/controls/form-picker-register.d.ts +7 -0
- package/{controls → dist/controls}/form-picker-register.js +2 -6
- package/dist/controls/form-picker-register.js.map +1 -0
- package/{controls → dist/controls}/form-picker.js +11 -9
- package/dist/controls/form-picker.js.map +1 -0
- package/{controls → dist/controls}/icon-register.js +1 -1
- package/dist/controls/icon-register.js.map +1 -0
- package/{controls → dist/controls}/icon.d.ts +4 -2
- package/{controls → dist/controls}/icon.js +32 -27
- package/dist/controls/icon.js.map +1 -0
- package/{controls → dist/controls}/index.d.ts +1 -1
- package/{controls → dist/controls}/index.js +4 -3
- package/dist/controls/index.js.map +1 -0
- package/{controls → dist/controls}/json-register.js +1 -1
- package/dist/controls/json-register.js.map +1 -0
- package/{controls → dist/controls}/json.js +13 -3
- package/dist/controls/json.js.map +1 -0
- package/{controls → dist/controls}/link.js +116 -200
- package/dist/controls/link.js.map +1 -0
- package/{controls → dist/controls}/location-register.js +1 -1
- package/dist/controls/location-register.js.map +1 -0
- package/{controls → dist/controls}/location.js +59 -40
- package/dist/controls/location.js.map +1 -0
- package/{controls → dist/controls}/media-register.js +1 -1
- package/dist/controls/media-register.js.map +1 -0
- package/{controls → dist/controls}/media-services.d.ts +6 -0
- package/dist/controls/media-services.js +0 -0
- package/{controls → dist/controls}/media.d.ts +21 -4
- package/{controls → dist/controls}/media.js +407 -130
- package/dist/controls/media.js.map +1 -0
- package/{controls → dist/controls}/number.js +10 -9
- package/dist/controls/number.js.map +1 -0
- package/{controls → dist/controls}/reference-register.js +1 -1
- package/dist/controls/reference-register.js.map +1 -0
- package/{controls → dist/controls}/reference-services.d.ts +4 -0
- package/dist/controls/reference-services.js +0 -0
- package/{controls → dist/controls}/reference.d.ts +1 -1
- package/{controls → dist/controls}/reference.js +93 -77
- package/dist/controls/reference.js.map +1 -0
- package/dist/controls/rich-text/article-shell.d.ts +145 -0
- package/dist/controls/rich-text/article-shell.js +510 -0
- package/dist/controls/rich-text/article-shell.js.map +1 -0
- package/dist/controls/rich-text/author.d.ts +25 -0
- package/dist/controls/rich-text/author.js +104 -0
- package/dist/controls/rich-text/author.js.map +1 -0
- package/dist/controls/rich-text/blocks.d.ts +60 -0
- package/{controls → dist/controls}/rich-text/blocks.js +164 -389
- package/dist/controls/rich-text/blocks.js.map +1 -0
- package/dist/controls/rich-text/button.d.ts +23 -0
- package/dist/controls/rich-text/button.js +85 -0
- package/dist/controls/rich-text/button.js.map +1 -0
- package/{controls → dist/controls}/rich-text/catalog.d.ts +7 -4
- package/{controls → dist/controls}/rich-text/catalog.js +94 -68
- package/dist/controls/rich-text/catalog.js.map +1 -0
- package/dist/controls/rich-text/checklist.d.ts +24 -0
- package/dist/controls/rich-text/checklist.js +115 -0
- package/dist/controls/rich-text/checklist.js.map +1 -0
- package/{controls → dist/controls}/rich-text/codec.d.ts +9 -1
- package/{controls → dist/controls}/rich-text/codec.js +7 -2
- package/dist/controls/rich-text/codec.js.map +1 -0
- package/dist/controls/rich-text/columns.d.ts +41 -0
- package/dist/controls/rich-text/columns.js +181 -0
- package/dist/controls/rich-text/columns.js.map +1 -0
- package/{controls → dist/controls}/rich-text/component-card.d.ts +1 -1
- package/{controls → dist/controls}/rich-text/component-card.js +417 -99
- package/dist/controls/rich-text/component-card.js.map +1 -0
- package/dist/controls/rich-text/component-panel.d.ts +47 -0
- package/dist/controls/rich-text/component-panel.js +141 -0
- package/dist/controls/rich-text/component-panel.js.map +1 -0
- package/{controls → dist/controls}/rich-text/control.d.ts +1 -2
- package/{controls → dist/controls}/rich-text/control.js +84 -42
- package/dist/controls/rich-text/control.js.map +1 -0
- package/{controls → dist/controls}/rich-text/dom.d.ts +53 -9
- package/{controls → dist/controls}/rich-text/dom.js +388 -50
- package/dist/controls/rich-text/dom.js.map +1 -0
- package/{controls → dist/controls}/rich-text/editor.d.ts +7 -0
- package/{controls → dist/controls}/rich-text/editor.js +226 -44
- package/dist/controls/rich-text/editor.js.map +1 -0
- package/dist/controls/rich-text/embed.d.ts +28 -0
- package/dist/controls/rich-text/embed.js +210 -0
- package/dist/controls/rich-text/embed.js.map +1 -0
- package/{controls → dist/controls}/rich-text/floating.d.ts +6 -1
- package/{controls → dist/controls}/rich-text/floating.js +35 -18
- package/dist/controls/rich-text/floating.js.map +1 -0
- package/dist/controls/rich-text/footnote.d.ts +41 -0
- package/dist/controls/rich-text/footnote.js +185 -0
- package/dist/controls/rich-text/footnote.js.map +1 -0
- package/dist/controls/rich-text/gallery.d.ts +28 -0
- package/dist/controls/rich-text/gallery.js +167 -0
- package/dist/controls/rich-text/gallery.js.map +1 -0
- package/{controls → dist/controls}/rich-text/index.js +1 -1
- package/dist/controls/rich-text/index.js.map +1 -0
- package/{controls → dist/controls}/rich-text/link-form.d.ts +3 -1
- package/dist/controls/rich-text/link-form.js +147 -0
- package/dist/controls/rich-text/link-form.js.map +1 -0
- package/{controls → dist/controls}/rich-text/markdown.js +4 -2
- package/dist/controls/rich-text/markdown.js.map +1 -0
- package/{controls → dist/controls}/rich-text/ops.js +17 -15
- package/dist/controls/rich-text/ops.js.map +1 -0
- package/dist/controls/rich-text/plain.d.ts +17 -0
- package/dist/controls/rich-text/plain.js +44 -0
- package/dist/controls/rich-text/plain.js.map +1 -0
- package/dist/controls/rich-text/related.d.ts +36 -0
- package/dist/controls/rich-text/related.js +213 -0
- package/dist/controls/rich-text/related.js.map +1 -0
- package/dist/controls/rich-text/toc.d.ts +46 -0
- package/dist/controls/rich-text/toc.js +161 -0
- package/dist/controls/rich-text/toc.js.map +1 -0
- package/{controls → dist/controls}/rich-text/toolbar.d.ts +6 -2
- package/{controls → dist/controls}/rich-text/toolbar.js +12 -7
- package/dist/controls/rich-text/toolbar.js.map +1 -0
- package/{controls → dist/controls}/scale.js +5 -5
- package/dist/controls/scale.js.map +1 -0
- package/dist/controls/slot-register.d.ts +6 -0
- package/{controls → dist/controls}/slot-register.js +2 -5
- package/dist/controls/slot-register.js.map +1 -0
- package/{controls → dist/controls}/slot-services.d.ts +25 -0
- package/dist/controls/slot-services.js +155 -0
- package/dist/controls/slot-services.js.map +1 -0
- package/{controls → dist/controls}/slot.js +42 -24
- package/dist/controls/slot.js.map +1 -0
- package/{controls → dist/controls}/table/index.js +1 -1
- package/dist/controls/table/index.js.map +1 -0
- package/{controls → dist/controls}/table/prod.js +3 -3
- package/dist/controls/table/prod.js.map +1 -0
- package/{controls → dist/controls}/table/refs.js +13 -2
- package/dist/controls/table/refs.js.map +1 -0
- package/{controls → dist/controls}/table/stored.js +1 -1
- package/dist/controls/table/stored.js.map +1 -0
- package/{controls → dist/controls}/table/table-editor.js +51 -48
- package/dist/controls/table/table-editor.js.map +1 -0
- package/{controls → dist/controls}/table/table-link.js +3 -3
- package/dist/controls/table/table-link.js.map +1 -0
- package/{controls → dist/controls}/table/table.js +3 -3
- package/dist/controls/table/table.js.map +1 -0
- package/{controls → dist/controls}/text.d.ts +2 -2
- package/{controls → dist/controls}/text.js +78 -43
- package/dist/controls/text.js.map +1 -0
- package/dist/controls/unknown-value.d.ts +17 -0
- package/dist/controls/unknown-value.js +66 -0
- package/dist/controls/unknown-value.js.map +1 -0
- package/dist/core/core.d.ts +70 -0
- package/dist/core/core.js +187 -0
- package/dist/core/core.js.map +1 -0
- package/dist/core/facets.d.ts +355 -0
- package/dist/core/facets.js +342 -0
- package/dist/core/facets.js.map +1 -0
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.js +3 -0
- package/{engine → dist/engine}/array.js +34 -21
- package/dist/engine/array.js.map +1 -0
- package/{engine → dist/engine}/bits.js +1 -1
- package/dist/engine/bits.js.map +1 -0
- package/{engine → dist/engine}/breadcrumb.d.ts +3 -3
- package/{engine → dist/engine}/breadcrumb.js +12 -36
- package/dist/engine/breadcrumb.js.map +1 -0
- package/{engine → dist/engine}/expand.d.ts +2 -4
- package/{engine → dist/engine}/expand.js +5 -22
- package/dist/engine/expand.js.map +1 -0
- package/{engine → dist/engine}/field-list.js +1 -1
- package/dist/engine/field-list.js.map +1 -0
- package/{engine → dist/engine}/field-shell.js +249 -121
- package/dist/engine/field-shell.js.map +1 -0
- package/{engine → dist/engine}/frame.d.ts +3 -1
- package/{engine → dist/engine}/frame.js +16 -14
- package/dist/engine/frame.js.map +1 -0
- package/{engine → dist/engine}/group-summary.d.ts +2 -1
- package/{engine → dist/engine}/group-summary.js +7 -3
- package/dist/engine/group-summary.js.map +1 -0
- package/{engine → dist/engine}/grouping.d.ts +19 -5
- package/{engine → dist/engine}/grouping.js +193 -21
- package/dist/engine/grouping.js.map +1 -0
- package/{engine → dist/engine}/item-list.d.ts +11 -1
- package/{engine → dist/engine}/item-list.js +35 -13
- package/dist/engine/item-list.js.map +1 -0
- package/{engine → dist/engine}/kit-field.js +45 -10
- package/dist/engine/kit-field.js.map +1 -0
- package/{engine → dist/engine}/schema-form.d.ts +27 -2
- package/{engine → dist/engine}/schema-form.js +182 -40
- package/dist/engine/schema-form.js.map +1 -0
- package/{engine → dist/engine}/slot.js +5 -15
- package/dist/engine/slot.js.map +1 -0
- package/dist/index.js +58 -0
- package/dist/index.js.map +1 -0
- package/{kit.css → dist/kit.css} +19 -0
- package/{lib → dist/lib}/cn.js +7 -4
- package/dist/lib/cn.js.map +1 -0
- package/{lib → dist/lib}/columns.js +4 -1
- package/dist/lib/columns.js.map +1 -0
- package/{lib → dist/lib}/frames.js +2 -2
- package/dist/lib/frames.js.map +1 -0
- package/dist/lib/icon-image.d.ts +10 -0
- package/dist/lib/icon-image.js +8 -0
- package/dist/lib/icon-image.js.map +1 -0
- package/{lib → dist/lib}/icons.js +4 -3
- package/dist/lib/icons.js.map +1 -0
- package/dist/lib/input-modality.d.ts +11 -0
- package/dist/lib/input-modality.js +47 -0
- package/dist/lib/input-modality.js.map +1 -0
- package/dist/lib/key-event.d.ts +11 -0
- package/dist/lib/key-event.js +16 -0
- package/dist/lib/key-event.js.map +1 -0
- package/{lib → dist/lib}/path.js +4 -2
- package/dist/lib/path.js.map +1 -0
- package/{lib → dist/lib}/schema.d.ts +34 -3
- package/{lib → dist/lib}/schema.js +110 -13
- package/dist/lib/schema.js.map +1 -0
- package/{lib → dist/lib}/utils.js +1 -1
- package/dist/lib/utils.js.map +1 -0
- package/{lib → dist/lib}/validate.d.ts +11 -1
- package/{lib → dist/lib}/validate.js +85 -11
- package/dist/lib/validate.js.map +1 -0
- package/dist/library/analysis.d.ts +23 -0
- package/dist/library/analysis.js +160 -0
- package/dist/library/analysis.js.map +1 -0
- package/dist/library/catalog.d.ts +57 -0
- package/dist/library/catalog.js +307 -0
- package/dist/library/catalog.js.map +1 -0
- package/dist/library/coreNotes.d.ts +8 -0
- package/dist/library/coreNotes.js +111 -0
- package/dist/library/coreNotes.js.map +1 -0
- package/dist/library/coverage.d.ts +40 -0
- package/dist/library/coverage.js +59 -0
- package/dist/library/coverage.js.map +1 -0
- package/dist/library/entries/advanced.entries.d.ts +2 -0
- package/dist/library/entries/advanced.entries.js +6579 -0
- package/dist/library/entries/advanced.entries.js.map +1 -0
- package/dist/library/entries/commerce.entries.d.ts +2 -0
- package/dist/library/entries/commerce.entries.js +4140 -0
- package/dist/library/entries/commerce.entries.js.map +1 -0
- package/dist/library/entries/company.entries.d.ts +2 -0
- package/dist/library/entries/company.entries.js +2731 -0
- package/dist/library/entries/company.entries.js.map +1 -0
- package/dist/library/entries/conversion.entries.d.ts +2 -0
- package/dist/library/entries/conversion.entries.js +3707 -0
- package/dist/library/entries/conversion.entries.js.map +1 -0
- package/dist/library/entries/data.entries.d.ts +7 -0
- package/dist/library/entries/data.entries.js +4613 -0
- package/dist/library/entries/data.entries.js.map +1 -0
- package/dist/library/entries/events.entries.d.ts +2 -0
- package/dist/library/entries/events.entries.js +3428 -0
- package/dist/library/entries/events.entries.js.map +1 -0
- package/dist/library/entries/features.entries.d.ts +2 -0
- package/dist/library/entries/features.entries.js +3157 -0
- package/dist/library/entries/features.entries.js.map +1 -0
- package/dist/library/entries/heroes.entries.d.ts +2 -0
- package/dist/library/entries/heroes.entries.js +3401 -0
- package/dist/library/entries/heroes.entries.js.map +1 -0
- package/dist/library/entries/index.d.ts +3 -0
- package/dist/library/entries/index.js +35 -0
- package/dist/library/entries/index.js.map +1 -0
- package/dist/library/entries/listings.entries.d.ts +2 -0
- package/dist/library/entries/listings.entries.js +2976 -0
- package/dist/library/entries/listings.entries.js.map +1 -0
- package/dist/library/entries/longform.entries.d.ts +2 -0
- package/dist/library/entries/longform.entries.js +4227 -0
- package/dist/library/entries/longform.entries.js.map +1 -0
- package/dist/library/entries/media.entries.d.ts +2 -0
- package/dist/library/entries/media.entries.js +2781 -0
- package/dist/library/entries/media.entries.js.map +1 -0
- package/dist/library/entries/navigation.entries.d.ts +2 -0
- package/dist/library/entries/navigation.entries.js +4011 -0
- package/dist/library/entries/navigation.entries.js.map +1 -0
- package/dist/library/entries/pricing.entries.d.ts +2 -0
- package/dist/library/entries/pricing.entries.js +2383 -0
- package/dist/library/entries/pricing.entries.js.map +1 -0
- package/dist/library/entries/social-proof.entries.d.ts +2 -0
- package/dist/library/entries/social-proof.entries.js +2297 -0
- package/dist/library/entries/social-proof.entries.js.map +1 -0
- package/dist/library/examples/bento.d.ts +92 -0
- package/dist/library/examples/bento.js +201 -0
- package/dist/library/examples/bento.js.map +1 -0
- package/dist/library/examples/blocks.d.ts +14 -0
- package/dist/library/examples/blocks.js +313 -0
- package/dist/library/examples/blocks.js.map +1 -0
- package/dist/library/examples/faq.d.ts +28 -0
- package/dist/library/examples/faq.js +230 -0
- package/dist/library/examples/faq.js.map +1 -0
- package/dist/library/examples/hero.d.ts +43 -0
- package/dist/library/examples/hero.js +222 -0
- package/dist/library/examples/hero.js.map +1 -0
- package/dist/library/examples/index.d.ts +36 -0
- package/dist/library/examples/index.js +109 -0
- package/dist/library/examples/index.js.map +1 -0
- package/dist/library/examples/journalStory.d.ts +93 -0
- package/dist/library/examples/journalStory.js +338 -0
- package/dist/library/examples/journalStory.js.map +1 -0
- package/dist/library/examples/megaMenu.d.ts +134 -0
- package/dist/library/examples/megaMenu.js +442 -0
- package/dist/library/examples/megaMenu.js.map +1 -0
- package/dist/library/examples/pricing.d.ts +103 -0
- package/dist/library/examples/pricing.js +479 -0
- package/dist/library/examples/pricing.js.map +1 -0
- package/dist/library/examples/tabs.d.ts +87 -0
- package/dist/library/examples/tabs.js +180 -0
- package/dist/library/examples/tabs.js.map +1 -0
- package/dist/library/export.d.ts +42 -0
- package/dist/library/export.js +80 -0
- package/dist/library/export.js.map +1 -0
- package/dist/library/index.d.ts +13 -0
- package/dist/library/index.js +6 -0
- package/dist/library/kit-catalog.json +1511 -0
- package/dist/library/types.d.ts +42 -0
- package/dist/library/types.js +0 -0
- package/{schema → dist/schema}/adapters.js +1 -2
- package/dist/schema/adapters.js.map +1 -0
- package/{schema → dist/schema}/help.d.ts +2 -0
- package/{schema → dist/schema}/help.js +6 -4
- package/dist/schema/help.js.map +1 -0
- package/{schema → dist/schema}/scale.js +1 -1
- package/dist/schema/scale.js.map +1 -0
- package/{schema → dist/schema}/sources.js +1 -1
- package/dist/schema/sources.js.map +1 -0
- package/{schema → dist/schema}/table.js +11 -10
- package/dist/schema/table.js.map +1 -0
- package/{schema → dist/schema}/types.d.ts +36 -1
- package/{schema → dist/schema}/types.js +1 -1
- package/dist/schema/types.js.map +1 -0
- package/dist/styles.css +2 -0
- package/dist/table/table-view.d.ts +14 -0
- package/dist/table/table-view.js +140 -0
- package/dist/table/table-view.js.map +1 -0
- package/dist/table/table.css +73 -0
- package/dist/testing/corpus.d.ts +63 -0
- package/dist/testing/corpus.js +129 -0
- package/dist/testing/corpus.js.map +1 -0
- package/dist/testing/test-form.d.ts +11 -0
- package/dist/testing/test-form.js +38 -0
- package/dist/testing/test-form.js.map +1 -0
- package/dist/theme.css +345 -0
- package/dist/theme.d.ts +22 -0
- package/dist/theme.js +43 -0
- package/dist/theme.js.map +1 -0
- package/dist/tokens.css +542 -0
- package/dist/types.js +0 -0
- package/{ui → dist/ui}/action-tray.d.ts +1 -1
- package/{ui → dist/ui}/action-tray.js +20 -19
- package/dist/ui/action-tray.js.map +1 -0
- package/dist/ui/autocomplete.d.ts +58 -0
- package/dist/ui/autocomplete.js +194 -0
- package/dist/ui/autocomplete.js.map +1 -0
- package/{ui → dist/ui}/button.d.ts +3 -3
- package/{ui → dist/ui}/button.js +8 -11
- package/dist/ui/button.js.map +1 -0
- package/{ui → dist/ui}/choice-switch.js +1 -1
- package/dist/ui/choice-switch.js.map +1 -0
- package/{ui → dist/ui}/controls.js +51 -39
- package/dist/ui/controls.js.map +1 -0
- package/{ui → dist/ui}/display.d.ts +10 -3
- package/{ui → dist/ui}/display.js +57 -46
- package/dist/ui/display.js.map +1 -0
- package/{ui → dist/ui}/expanded-editor-modal.d.ts +2 -2
- package/{ui → dist/ui}/expanded-editor-modal.js +6 -6
- package/dist/ui/expanded-editor-modal.js.map +1 -0
- package/{ui → dist/ui}/field-context.js +1 -1
- package/dist/ui/field-context.js.map +1 -0
- package/{ui → dist/ui}/floating-panel.d.ts +1 -1
- package/{ui → dist/ui}/floating-panel.js +28 -12
- package/dist/ui/floating-panel.js.map +1 -0
- package/{ui → dist/ui}/index.d.ts +4 -0
- package/dist/ui/index.js +18 -0
- package/{ui → dist/ui}/input.d.ts +1 -1
- package/{ui → dist/ui}/input.js +9 -9
- package/dist/ui/input.js.map +1 -0
- package/{ui → dist/ui}/mode-bar.js +3 -3
- package/dist/ui/mode-bar.js.map +1 -0
- package/{ui → dist/ui}/overlay.d.ts +77 -5
- package/dist/ui/overlay.js +697 -0
- package/dist/ui/overlay.js.map +1 -0
- package/{ui → dist/ui}/path-crumbs.js +37 -3
- package/dist/ui/path-crumbs.js.map +1 -0
- package/{ui → dist/ui}/presence.js +2 -2
- package/dist/ui/presence.js.map +1 -0
- package/{ui → dist/ui}/select.js +89 -87
- package/dist/ui/select.js.map +1 -0
- package/{ui → dist/ui}/shortcut-hint.js +1 -1
- package/dist/ui/shortcut-hint.js.map +1 -0
- package/dist/ui/spinner.d.ts +24 -0
- package/dist/ui/spinner.js +42 -0
- package/dist/ui/spinner.js.map +1 -0
- package/dist/ui/split-button.d.ts +32 -0
- package/dist/ui/split-button.js +60 -0
- package/dist/ui/split-button.js.map +1 -0
- package/{ui → dist/ui}/surfaces.js +1 -1
- package/dist/ui/surfaces.js.map +1 -0
- package/dist/ui/tab.d.ts +38 -0
- package/dist/ui/tab.js +87 -0
- package/dist/ui/tab.js.map +1 -0
- package/dist/ui/toast.d.ts +20 -0
- package/dist/ui/toast.js +115 -0
- package/dist/ui/toast.js.map +1 -0
- package/{ui → dist/ui}/tooltip-root.d.ts +4 -3
- package/{ui → dist/ui}/tooltip-root.js +9 -8
- package/dist/ui/tooltip-root.js.map +1 -0
- package/{ui → dist/ui}/variants.js +1 -1
- package/dist/ui/variants.js.map +1 -0
- package/package.json +83 -23
- package/adapters/icons.js.map +0 -1
- package/adapters/lossy.js +0 -233
- package/adapters/lossy.js.map +0 -1
- package/adapters/prod-types.js.map +0 -1
- package/adapters/schema.js.map +0 -1
- package/adapters/values.js.map +0 -1
- package/brand/logo.js +0 -9
- package/brand/logo.js.map +0 -1
- package/context.js.map +0 -1
- package/controls/button.js.map +0 -1
- package/controls/c1.js.map +0 -1
- package/controls/c2.js.map +0 -1
- package/controls/choice.js.map +0 -1
- package/controls/code-register.js.map +0 -1
- package/controls/code.js.map +0 -1
- package/controls/color.js.map +0 -1
- package/controls/date-register.js.map +0 -1
- package/controls/date-zone.js.map +0 -1
- package/controls/date.js.map +0 -1
- package/controls/form-picker-register.d.ts +0 -1
- package/controls/form-picker-register.js.map +0 -1
- package/controls/form-picker.js.map +0 -1
- package/controls/icon-register.js.map +0 -1
- package/controls/icon.js.map +0 -1
- package/controls/index.js.map +0 -1
- package/controls/json-register.js.map +0 -1
- package/controls/json.js.map +0 -1
- package/controls/link.js.map +0 -1
- package/controls/location-register.js.map +0 -1
- package/controls/location.js.map +0 -1
- package/controls/media-register.js.map +0 -1
- package/controls/media.js.map +0 -1
- package/controls/number.js.map +0 -1
- package/controls/reference-register.js.map +0 -1
- package/controls/reference.js.map +0 -1
- package/controls/rich-text/blocks.d.ts +0 -28
- package/controls/rich-text/blocks.js.map +0 -1
- package/controls/rich-text/catalog.js.map +0 -1
- package/controls/rich-text/codec.js.map +0 -1
- package/controls/rich-text/component-card.js.map +0 -1
- package/controls/rich-text/control.js.map +0 -1
- package/controls/rich-text/dom.js.map +0 -1
- package/controls/rich-text/editor.js.map +0 -1
- package/controls/rich-text/floating.js.map +0 -1
- package/controls/rich-text/index.js.map +0 -1
- package/controls/rich-text/link-form.js +0 -111
- package/controls/rich-text/link-form.js.map +0 -1
- package/controls/rich-text/markdown.js.map +0 -1
- package/controls/rich-text/ops.js.map +0 -1
- package/controls/rich-text/toolbar.js.map +0 -1
- package/controls/scale.js.map +0 -1
- package/controls/slot-register.d.ts +0 -1
- package/controls/slot-register.js.map +0 -1
- package/controls/slot-services.js +0 -38
- package/controls/slot-services.js.map +0 -1
- package/controls/slot.js.map +0 -1
- package/controls/table/index.js.map +0 -1
- package/controls/table/prod.js.map +0 -1
- package/controls/table/refs.js.map +0 -1
- package/controls/table/stored.js.map +0 -1
- package/controls/table/table-editor.js.map +0 -1
- package/controls/table/table-link.js.map +0 -1
- package/controls/table/table.js.map +0 -1
- package/controls/text.js.map +0 -1
- package/engine/array.js.map +0 -1
- package/engine/bits.js.map +0 -1
- package/engine/breadcrumb.js.map +0 -1
- package/engine/expand.js.map +0 -1
- package/engine/field-list.js.map +0 -1
- package/engine/field-shell.js.map +0 -1
- package/engine/frame.js.map +0 -1
- package/engine/group-summary.js.map +0 -1
- package/engine/grouping.js.map +0 -1
- package/engine/item-list.js.map +0 -1
- package/engine/kit-field.js.map +0 -1
- package/engine/schema-form.js.map +0 -1
- package/engine/slot.js.map +0 -1
- package/index.js +0 -55
- package/index.js.map +0 -1
- package/lib/cn.js.map +0 -1
- package/lib/columns.js.map +0 -1
- package/lib/frames.js.map +0 -1
- package/lib/icons.js.map +0 -1
- package/lib/path.js.map +0 -1
- package/lib/schema.js.map +0 -1
- package/lib/utils.js.map +0 -1
- package/lib/validate.js.map +0 -1
- package/schema/adapters.js.map +0 -1
- package/schema/help.js.map +0 -1
- package/schema/scale.js.map +0 -1
- package/schema/sources.js.map +0 -1
- package/schema/table.js.map +0 -1
- package/schema/types.js.map +0 -1
- package/ui/action-tray.js.map +0 -1
- package/ui/button.js.map +0 -1
- package/ui/choice-switch.js.map +0 -1
- package/ui/controls.js.map +0 -1
- package/ui/display.js.map +0 -1
- package/ui/expanded-editor-modal.js.map +0 -1
- package/ui/field-context.js.map +0 -1
- package/ui/floating-panel.js.map +0 -1
- package/ui/index.js +0 -13
- package/ui/input.js.map +0 -1
- package/ui/mode-bar.js.map +0 -1
- package/ui/overlay.js +0 -378
- package/ui/overlay.js.map +0 -1
- package/ui/path-crumbs.js.map +0 -1
- package/ui/presence.js.map +0 -1
- package/ui/select.js.map +0 -1
- package/ui/shortcut-hint.js.map +0 -1
- package/ui/surfaces.js.map +0 -1
- package/ui/tooltip-root.js.map +0 -1
- package/ui/variants.js.map +0 -1
- /package/{_virtual → dist/_virtual}/_rolldown/runtime.js +0 -0
- /package/{adapters → dist/adapters}/icons.d.ts +0 -0
- /package/{brand → dist/brand}/logo.d.ts +0 -0
- /package/{controls → dist/controls}/c1.d.ts +0 -0
- /package/{controls → dist/controls}/c2.d.ts +0 -0
- /package/{controls → dist/controls}/code-register.d.ts +0 -0
- /package/{controls → dist/controls}/code.d.ts +0 -0
- /package/{controls → dist/controls}/color.d.ts +0 -0
- /package/{controls → dist/controls}/date-register.d.ts +0 -0
- /package/{controls → dist/controls}/date-zone.d.ts +0 -0
- /package/{controls → dist/controls}/date.d.ts +0 -0
- /package/{controls → dist/controls}/form-picker.d.ts +0 -0
- /package/{controls → dist/controls}/icon-register.d.ts +0 -0
- /package/{controls → dist/controls}/json-register.d.ts +0 -0
- /package/{controls → dist/controls}/json.d.ts +0 -0
- /package/{controls → dist/controls}/link.d.ts +0 -0
- /package/{controls → dist/controls}/location-register.d.ts +0 -0
- /package/{controls → dist/controls}/location.d.ts +0 -0
- /package/{controls → dist/controls}/media-register.d.ts +0 -0
- /package/{controls → dist/controls}/number.d.ts +0 -0
- /package/{controls → dist/controls}/reference-register.d.ts +0 -0
- /package/{controls → dist/controls}/rich-text/index.d.ts +0 -0
- /package/{controls → dist/controls}/rich-text/markdown.d.ts +0 -0
- /package/{controls → dist/controls}/rich-text/ops.d.ts +0 -0
- /package/{controls → dist/controls}/scale.d.ts +0 -0
- /package/{controls → dist/controls}/slot.d.ts +0 -0
- /package/{controls → dist/controls}/table/index.d.ts +0 -0
- /package/{controls → dist/controls}/table/prod.d.ts +0 -0
- /package/{controls → dist/controls}/table/refs.d.ts +0 -0
- /package/{controls → dist/controls}/table/stored.d.ts +0 -0
- /package/{controls → dist/controls}/table/table-editor.d.ts +0 -0
- /package/{controls → dist/controls}/table/table-link.d.ts +0 -0
- /package/{controls → dist/controls}/table/table.d.ts +0 -0
- /package/{engine → dist/engine}/array.d.ts +0 -0
- /package/{engine → dist/engine}/bits.d.ts +0 -0
- /package/{engine → dist/engine}/field-list.d.ts +0 -0
- /package/{engine → dist/engine}/field-shell.d.ts +0 -0
- /package/{engine → dist/engine}/kit-field.d.ts +0 -0
- /package/{engine → dist/engine}/slot.d.ts +0 -0
- /package/{index.d.ts → dist/index.d.ts} +0 -0
- /package/{lib → dist/lib}/cn.d.ts +0 -0
- /package/{lib → dist/lib}/columns.d.ts +0 -0
- /package/{lib → dist/lib}/frames.d.ts +0 -0
- /package/{lib → dist/lib}/icons.d.ts +0 -0
- /package/{lib → dist/lib}/path.d.ts +0 -0
- /package/{lib → dist/lib}/utils.d.ts +0 -0
- /package/{schema → dist/schema}/adapters.d.ts +0 -0
- /package/{schema → dist/schema}/scale.d.ts +0 -0
- /package/{schema → dist/schema}/sources.d.ts +0 -0
- /package/{schema → dist/schema}/table.d.ts +0 -0
- /package/{types.d.ts → dist/types.d.ts} +0 -0
- /package/{ui → dist/ui}/choice-switch.d.ts +0 -0
- /package/{ui → dist/ui}/controls.d.ts +0 -0
- /package/{ui → dist/ui}/field-context.d.ts +0 -0
- /package/{ui → dist/ui}/mode-bar.d.ts +0 -0
- /package/{ui → dist/ui}/path-crumbs.d.ts +0 -0
- /package/{ui → dist/ui}/presence.d.ts +0 -0
- /package/{ui → dist/ui}/select.d.ts +0 -0
- /package/{ui → dist/ui}/shortcut-hint.d.ts +0 -0
- /package/{ui → dist/ui}/surfaces.d.ts +0 -0
- /package/{ui → dist/ui}/variants.d.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expand.js","names":[],"sources":["../../src/engine/expand.tsx"],"sourcesContent":["/**\n * Expanded editing (CPO D49), owned by the engine: rich text, code and tables open in the ONE shared\n * ExpandedEditorModal (ui/expanded-editor-modal.tsx). V2 did this per control (RichTextControl + RichTextExpandAction,\n * TableControl + TableFullScreenAction); the engine opens the modal around WHATEVER control the field has: the kit\n * control from CONTROLS, or the host's when a control hands a stored value off (LegacyFallback). The modal body is that same control on the same value and the same onChange, so the field underneath\n * and the expanded one stay in sync and every write keeps the exact stored shape the inline control writes.\n *\n * Ways in (V2): the ⤢ button in the field's label row (shown on hover, always on touch), and ⌘↵ / Ctrl+↵ while the\n * field's control has focus. Inside the modal ⌘↵ or Esc closes it (menus and popovers inside close first) and focus\n * returns to whatever opened it. A control lane may open or close it from its own toolbar with `openExpanded`.\n *\n * Offered only where expanding edits something: never read-only, never a type whose control behind it cannot edit\n * (code and tables expand only once a kit control is registered for them; the host draws those read-only today).\n */\nimport * as React from \"react\";\nimport type { ComponentType } from \"react\";\nimport { IconArrowsMaximize } from \"@tabler/icons-react\";\nimport { cn } from \"../lib/cn\";\nimport { resolveFrames } from \"../lib/frames\";\nimport { isObj, pathKey } from \"../lib/path\";\nimport type { FieldPath, FieldSchema, SchemaType } from \"../schema/types\";\nimport type { ControlProps } from \"../types\";\nimport { useForm, useKitEnv } from \"../context\";\nimport { Tooltip } from \"../ui/overlay\";\nimport { ExpandedEditorModal } from \"../ui/expanded-editor-modal\";\n\nexport interface ExpandSpec {\n /** \"reading\" centres a ~720px writing column; \"wide\" uses the whole dialog (tables, code) */\n layout: \"reading\" | \"wide\";\n /** the header's quiet meta line for this value (\"12 lines\", \"6 rows · 4 columns\") */\n meta?: (value: unknown) => string;\n /** the label-row button's name and tooltip */\n label: \"Expand editor\" | \"Edit in full screen\";\n /** V2: the document variant already draws the full editor in its column, so writing types offer no ⤢ there */\n panelOnly?: boolean;\n /** expanding needs a kit control: the host's control for this type cannot edit it (read-only card) */\n needsKitControl?: boolean;\n}\n\nconst count = (n: number, one: string, many = `${one}s`) => `${n} ${n === 1 ? one : many}`;\nfunction codeLines(v: unknown) {\n const src = typeof v === \"string\" ? v : isObj(v) && typeof v.code === \"string\" ? v.code : \"\";\n return count(src ? src.split(\"\\n\").length : 0, \"line\");\n}\nfunction tableSize(v: unknown) {\n const rows = isObj(v) && Array.isArray(v.rows) ? v.rows.length : 0;\n const cols = isObj(v) && Array.isArray(v.columns) ? v.columns.length : 0;\n return `${count(rows, \"row\")} · ${count(cols, \"column\")}`;\n}\n\n/** Type → how it expands. Additive like CONTROLS: one entry per type. Plain long text (`text`) has none: V2's\n * TextControl is a bare textarea that grows to its value, so an extra ⤢ would only add a tab stop V2 lacks. */\nexport const EXPANDABLE: Partial<Record<SchemaType, ExpandSpec>> = {\n richtext: { layout: \"reading\", label: \"Expand editor\", panelOnly: true },\n code: { layout: \"wide\", meta: codeLines, label: \"Expand editor\", needsKitControl: true },\n table: { layout: \"wide\", meta: tableSize, label: \"Edit in full screen\", needsKitControl: true },\n};\n\n/** The spec when this field can expand here, else null. */\nexport function expandSpecFor(field: FieldSchema, opts: { readOnly: boolean; hasKitControl: boolean; variant: string }): ExpandSpec | null {\n const spec = EXPANDABLE[field.type];\n if (!spec || opts.readOnly) return null;\n if (spec.needsKitControl && !opts.hasKitControl) return null;\n if (spec.panelOnly && opts.variant === \"document\") return null;\n return spec;\n}\n\n/* ── which field (docId:pathKey) has its expanded editor open: one at a time, shared with toolbar buttons ── */\nlet openKey: string | null = null;\nconst subs = new Set<() => void>();\nexport function openExpanded(key: string | null) {\n if (openKey === key) return;\n openKey = key;\n subs.forEach((s) => s());\n}\nexport const expandKey = (docId: string, path: FieldPath) => `${docId}:${pathKey(path)}`;\nexport function useExpandedKey() {\n return React.useSyncExternalStore(\n (cb) => {\n subs.add(cb);\n return () => subs.delete(cb);\n },\n () => openKey,\n () => openKey,\n );\n}\n\n/** ⌘↵ / Ctrl+↵ (no Shift or Alt): the expand shortcut. */\nexport const isExpandShortcut = (e: React.KeyboardEvent | KeyboardEvent) => e.key === \"Enter\" && (e.metaKey || e.ctrlKey) && !e.shiftKey && !e.altKey;\n\n/** The label-row ⤢ (V2 RichTextExpandAction / TableFullScreenButton): hidden at rest until hover, always on touch. */\nexport function ExpandAction({ field, path, spec }: { field: FieldSchema; path: FieldPath; spec: ExpandSpec }) {\n const env = useKitEnv();\n const wide = spec.label === \"Edit in full screen\";\n return (\n <Tooltip content={spec.label} shortcut=\"⌘↵\">\n <button\n type=\"button\"\n aria-label={wide ? `Edit ${field.title} in full screen` : `Expand ${field.title}`}\n aria-haspopup=\"dialog\"\n data-kit-expand=\"\"\n onClick={() => openExpanded(expandKey(env.docId, path))}\n className={cn(\n \"-my-0.5 inline-flex size-6 shrink-0 items-center justify-center rounded-kit-md text-kit-fg-3 outline-none hover:bg-kit-hover hover:text-kit-fg\",\n \"focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-kit-focus-ring focus-visible:[outline-style:solid]\",\n // V2: quiet at rest (hover / touch shows it). Keyboard focus keeps it visible, so Tab never lands on nothing.\n \"opacity-0 group-hover/field:opacity-100 focus-visible:opacity-100 [@media(pointer:coarse)]:opacity-100\",\n )}\n >\n <IconArrowsMaximize aria-hidden className=\"size-3.5\" stroke={1.5} />\n </button>\n </Tooltip>\n );\n}\n\n/** The modal's breadcrumb: the document, the frames down to this field's parent, then the field. */\nfunction useCrumbs(field: FieldSchema, path: FieldPath): string[] {\n const form = useForm();\n const env = useKitEnv();\n if (!form) return [env.docTitle, field.title].filter(Boolean) as string[];\n const { frames } = resolveFrames(form.schema, form.value, path.slice(0, -1), form.resolveSchema);\n const titles = frames.filter((f) => f.kind !== \"history\").map((f, i) => (i === 0 ? env.docTitle || f.title : f.title));\n return [...titles, field.title].filter(Boolean);\n}\n\n/**\n * The field's expanded editor: the same control, value and onChange in the modal. Mounted only while open, so the\n * inline control and this one never fight over the same DOM id (the modal one gets `${id}-expanded`).\n */\nexport function ExpandedField({\n field,\n path,\n spec,\n Control,\n value,\n onChange,\n onBlur,\n invalid,\n id,\n parent,\n}: {\n field: FieldSchema;\n path: FieldPath;\n spec: ExpandSpec;\n Control: ComponentType<ControlProps>;\n value: unknown;\n onChange: (v: unknown) => void;\n onBlur?: () => void;\n invalid?: boolean;\n id: string;\n parent?: Record<string, unknown>;\n}) {\n const env = useKitEnv();\n const key = expandKey(env.docId, path);\n const open = useExpandedKey() === key;\n const crumbs = useCrumbs(field, path);\n // close when this field goes away (block deselected, drilled elsewhere, schema changed)\n React.useEffect(\n () => () => {\n if (openKey === key) openExpanded(null);\n },\n [key],\n );\n return (\n <ExpandedEditorModal\n open={open}\n onOpenChange={(o) => openExpanded(o ? key : null)}\n crumbs={crumbs}\n meta={spec.meta?.(value)}\n layout={spec.layout}\n returnFocus={() =>\n document.querySelector<HTMLElement>(`[data-field-key=\"${CSS.escape(pathKey(path))}\"] [data-kit-expand]`) ??\n document.getElementById(id)\n }\n >\n {open ? (\n <div\n data-kit-expanded={field.type}\n className={cn(\"min-w-0\", spec.layout === \"wide\" && \"flex min-h-0 flex-1 flex-col\")}\n onBlur={onBlur}\n onKeyDown={(e) => {\n if (!isExpandShortcut(e)) return;\n e.preventDefault();\n openExpanded(null);\n }}\n >\n <Control field={field} value={value} onChange={onChange} id={`${id}-expanded`} invalid={invalid} path={path} parent={parent} onBlur={onBlur} />\n </div>\n ) : null}\n </ExpandedEditorModal>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { FieldList as FieldList$1 } from "./grouping.js";
|
|
2
2
|
import { KitField } from "./kit-field.js";
|
|
3
3
|
import { jsx } from "react/jsx-runtime";
|
|
4
|
-
//#region src/
|
|
4
|
+
//#region src/engine/field-list.tsx
|
|
5
5
|
var renderKitField = (field, path, parent) => /* @__PURE__ */ jsx(KitField, {
|
|
6
6
|
field,
|
|
7
7
|
path,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-list.js","names":[],"sources":["../../src/engine/field-list.tsx"],"sourcesContent":["/**\n * FieldList — lays out one frame's fields (CPO D45 grouping; V2 HEAD 9829bf1 kit/engine/field-list.tsx): group TABS\n * (with error dots) at the top of the frame only, FIELDSETS as <FieldSection>, breakpoint objects as ONE\n * <BreakpointGroup>, an auto \"Advanced\" section, and `hidden` conditions that appear / disappear with a height animation.\n *\n * The layout itself lives in grouping.tsx (`FieldList` there takes `renderField`, so grouping never imports KitField).\n * This module is V2's FieldList as the rest of the engine uses it: the same props, each field drawn by KitField — which\n * is where an object too big to inset becomes its drill row (NavRow), an array its rows, a slot its blocks.\n * Frames (frame.tsx `FrameSlots.FieldList`), expanded array rows and popovers render this.\n */\nimport type { FieldGroup, FieldPath, FieldSchema, Fieldset } from \"../schema/types\";\nimport { FieldList as GroupedFieldList, type RenderField } from \"./grouping\";\nimport { KitField } from \"./kit-field\";\n\nexport interface FieldListProps {\n fields: FieldSchema[];\n fieldsets?: Fieldset[];\n groups?: FieldGroup[];\n basePath: FieldPath;\n /** where to remember the selected tab / open fieldsets */\n memoryKey: string;\n}\n\nconst renderKitField: RenderField = (field, path, parent) => <KitField field={field} path={path} parent={parent} />;\n\nexport function FieldList(props: FieldListProps) {\n return <GroupedFieldList {...props} renderField={renderKitField} />;\n}\n"],"mappings":";;;;AAuBA,IAAM,kBAA+B,OAAO,MAAM,WAAW,oBAAC,UAAD;CAAiB;CAAa;CAAc;AAAS,CAAA;AAElH,SAAgB,UAAU,OAAuB;CAC/C,OAAO,oBAAC,aAAD;EAAkB,GAAI;EAAO,aAAa;CAAiB,CAAA;AACpE"}
|
|
@@ -1,22 +1,21 @@
|
|
|
1
1
|
import { cn } from "../lib/cn.js";
|
|
2
|
+
import { AI_PRESETS, FieldHeaderSlot, KitSectionTitle, seesDevSurfaces, useForm, useKitEnv, useKitServices } from "../context.js";
|
|
2
3
|
import { pathKey, same } from "../lib/path.js";
|
|
3
|
-
import { AI_PRESETS, FieldHeaderSlot, seesDevSurfaces, useForm, useKitEnv, useKitServices } from "../context.js";
|
|
4
4
|
import { Button, Sparkle } from "../ui/button.js";
|
|
5
5
|
import { Menu, MenuContent, MenuItem, MenuSeparator, MenuTrigger, Popover, PopoverAnchor, PopoverContent, Tooltip } from "../ui/overlay.js";
|
|
6
6
|
import { isTextual, plainText } from "../lib/schema.js";
|
|
7
7
|
import { RowChrome } from "./bits.js";
|
|
8
8
|
import { Avatar, avatarRingSpread } from "../ui/display.js";
|
|
9
|
-
import { HelpMore } from "../ui/input.js";
|
|
10
9
|
import { presenceColor } from "../ui/presence.js";
|
|
11
10
|
import { HISTORY_SEGMENT } from "../schema/types.js";
|
|
12
11
|
import { resolveHelp } from "../schema/help.js";
|
|
13
12
|
import { textLength } from "../lib/validate.js";
|
|
14
13
|
import * as React from "react";
|
|
15
|
-
import { IconAlertCircle, IconAlertTriangle, IconArrowBackUp, IconBraces, IconClipboard, IconCopy, IconDots, IconHistory, IconMessage, IconMessagePlus, IconRefresh, IconRotate, IconWorld } from "@tabler/icons-react";
|
|
16
14
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
15
|
+
import { IconAlertCircle, IconAlertTriangle, IconArrowBackUp, IconBraces, IconClipboard, IconCopy, IconDots, IconHistory, IconInfoCircle, IconLock, IconMessage, IconMessagePlus, IconRefresh, IconRotate, IconWorld } from "@tabler/icons-react";
|
|
17
16
|
import { AnimatePresence, motion } from "framer-motion";
|
|
18
17
|
import { createPortal } from "react-dom";
|
|
19
|
-
//#region src/
|
|
18
|
+
//#region src/engine/field-shell.tsx
|
|
20
19
|
/**
|
|
21
20
|
* FIELD SHELL — the one field chrome (V2 HEAD 9829bf1 kit/engine/field-shell.tsx; production FieldShell + CPO D8).
|
|
22
21
|
*
|
|
@@ -99,13 +98,19 @@ function FieldShell({ field, path, id, value, onChange, readOnly, issue, action,
|
|
|
99
98
|
const peers = env.presence[key] ?? [];
|
|
100
99
|
const editor = peers.find((p) => p.status !== "viewing");
|
|
101
100
|
const InPlaceComments = services.FieldComments;
|
|
102
|
-
const
|
|
101
|
+
const quiet = env.fieldChrome === "quiet";
|
|
102
|
+
const bare = quiet || env.fieldChrome === "preview";
|
|
103
|
+
const canComment = !noComments && !bare && (!!env.onComment || !!InPlaceComments);
|
|
103
104
|
const openCount = env.comments[key] ?? 0;
|
|
104
105
|
const useStoreCount = env.onComment ? void 0 : services.useFieldCommentCount;
|
|
105
106
|
const changed = !!form?.hasPublished && !same(value, form.publishedAt(path));
|
|
106
107
|
const inh = form?.inherited && path.length === 1 ? form.inherited : void 0;
|
|
107
108
|
const overridden = !!inh && inh.isOverridden(key);
|
|
108
|
-
const
|
|
109
|
+
const reviewing = !!env.review;
|
|
110
|
+
const bar = env.review && env.review.count(path) > 0 ? env.review.bar(path, field) : null;
|
|
111
|
+
const sectionTitle = React.useContext(KitSectionTitle);
|
|
112
|
+
const repeatsSection = quiet && layout === "stack" && !!sectionTitle && sectionTitle.trim().toLowerCase() === field.title.trim().toLowerCase();
|
|
113
|
+
const canUndo = !bare && !!form?.canUndo(key) && !readOnly;
|
|
109
114
|
const synced = field.synced?.from;
|
|
110
115
|
const limit = field.validation?.max ?? field.validation?.recommendedMax;
|
|
111
116
|
const len = textLength(value);
|
|
@@ -120,11 +125,24 @@ function FieldShell({ field, path, id, value, onChange, readOnly, issue, action,
|
|
|
120
125
|
]
|
|
121
126
|
}) : null;
|
|
122
127
|
const dense = env.helpDisplay === "tooltip";
|
|
123
|
-
const
|
|
128
|
+
const lockedHere = !!readOnly && !!field.access?.edit && !env.readOnly && !env.can(field.access.edit);
|
|
129
|
+
const help = lockedHere ? (field.lockReason?.trim() || "Set by developers").replace(/\.?$/, ".") : resolveHelp(field);
|
|
130
|
+
const helpNode = lockedHere ? /* @__PURE__ */ jsxs("span", {
|
|
131
|
+
"data-locked": "",
|
|
132
|
+
className: "inline-flex items-start gap-1",
|
|
133
|
+
children: [/* @__PURE__ */ jsx(IconLock, {
|
|
134
|
+
className: "mt-px size-3 shrink-0",
|
|
135
|
+
stroke: 1.75,
|
|
136
|
+
"aria-hidden": true
|
|
137
|
+
}), /* @__PURE__ */ jsxs("span", { children: [/* @__PURE__ */ jsx("span", {
|
|
138
|
+
className: "sr-only",
|
|
139
|
+
children: "Locked. "
|
|
140
|
+
}), help] })]
|
|
141
|
+
}) : help;
|
|
124
142
|
const more = field.helpMore || void 0;
|
|
125
143
|
const erroring = issue?.level === "error";
|
|
126
|
-
const helpInline = !!help && !dense && !erroring;
|
|
127
|
-
const tip = dense ? [help, more].filter(Boolean).join(" ") : more;
|
|
144
|
+
const helpInline = !!help && (!dense || lockedHere) && !erroring;
|
|
145
|
+
const tip = dense && !lockedHere ? [help, more].filter(Boolean).join(" ") : more;
|
|
128
146
|
const helpId = `${id}-help`;
|
|
129
147
|
const moreId = `${id}-more`;
|
|
130
148
|
const msgId = `${id}-msg`;
|
|
@@ -140,10 +158,25 @@ function FieldShell({ field, path, id, value, onChange, readOnly, issue, action,
|
|
|
140
158
|
if (next) el.setAttribute("aria-describedby", next);
|
|
141
159
|
else el.removeAttribute("aria-describedby");
|
|
142
160
|
}, [id, describedBy]);
|
|
143
|
-
const info = tip ? /* @__PURE__ */ jsx(
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
161
|
+
const info = tip ? /* @__PURE__ */ jsx(Tooltip, {
|
|
162
|
+
content: /* @__PURE__ */ jsx("span", {
|
|
163
|
+
className: "block max-w-[260px] whitespace-normal font-normal leading-4",
|
|
164
|
+
children: tip
|
|
165
|
+
}),
|
|
166
|
+
children: /* @__PURE__ */ jsxs("button", {
|
|
167
|
+
type: "button",
|
|
168
|
+
"aria-label": `About ${field.title}`,
|
|
169
|
+
className: "-my-0.5 inline-flex size-4 shrink-0 items-center justify-center rounded-kit-sm text-kit-fg-4 hover:text-kit-fg-2",
|
|
170
|
+
children: [/* @__PURE__ */ jsx(IconInfoCircle, {
|
|
171
|
+
className: "size-3.5",
|
|
172
|
+
stroke: 1.5,
|
|
173
|
+
"aria-hidden": true
|
|
174
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
175
|
+
id: moreId,
|
|
176
|
+
className: "sr-only",
|
|
177
|
+
children: tip
|
|
178
|
+
})]
|
|
179
|
+
})
|
|
147
180
|
}) : null;
|
|
148
181
|
const label = /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
|
|
149
182
|
className: "truncate",
|
|
@@ -158,14 +191,14 @@ function FieldShell({ field, path, id, value, onChange, readOnly, issue, action,
|
|
|
158
191
|
})] }) : null] });
|
|
159
192
|
const badges = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
160
193
|
overridden ? /* @__PURE__ */ jsx(Tooltip, {
|
|
161
|
-
content: `Overrides ${inh.from}. Changes to the
|
|
194
|
+
content: `Overrides ${inh.from}. Changes to the block no longer reach this field.`,
|
|
162
195
|
children: /* @__PURE__ */ jsx("span", {
|
|
163
196
|
role: "img",
|
|
164
197
|
className: "size-1.5 shrink-0 rounded-full bg-kit-accent",
|
|
165
198
|
"aria-label": `Overrides ${inh.from}`
|
|
166
199
|
})
|
|
167
200
|
}) : null,
|
|
168
|
-
changed ? /* @__PURE__ */ jsx(Tooltip, {
|
|
201
|
+
changed && !reviewing ? /* @__PURE__ */ jsx(Tooltip, {
|
|
169
202
|
content: "Changed since publish",
|
|
170
203
|
children: /* @__PURE__ */ jsx("span", {
|
|
171
204
|
role: "img",
|
|
@@ -185,7 +218,7 @@ function FieldShell({ field, path, id, value, onChange, readOnly, issue, action,
|
|
|
185
218
|
})
|
|
186
219
|
}) : null,
|
|
187
220
|
field.localized ? /* @__PURE__ */ jsx(Tooltip, {
|
|
188
|
-
content: "Translatable
|
|
221
|
+
content: "Translatable: this field can hold a value for each of the site's languages.",
|
|
189
222
|
children: /* @__PURE__ */ jsxs("span", {
|
|
190
223
|
className: "inline-flex h-4 shrink-0 items-center gap-0.5 rounded-kit-md bg-kit-muted px-1 text-kit-2xs font-medium text-kit-fg-3",
|
|
191
224
|
children: [/* @__PURE__ */ jsx(IconWorld, {
|
|
@@ -238,7 +271,7 @@ function FieldShell({ field, path, id, value, onChange, readOnly, issue, action,
|
|
|
238
271
|
}
|
|
239
272
|
}) : null,
|
|
240
273
|
/* @__PURE__ */ jsx(PeerStack, { peers }),
|
|
241
|
-
/* @__PURE__ */ jsx(FieldMenu, {
|
|
274
|
+
bare ? null : /* @__PURE__ */ jsx(FieldMenu, {
|
|
242
275
|
field,
|
|
243
276
|
path,
|
|
244
277
|
value,
|
|
@@ -277,7 +310,15 @@ function FieldShell({ field, path, id, value, onChange, readOnly, issue, action,
|
|
|
277
310
|
className: "mt-px size-3.5 shrink-0",
|
|
278
311
|
stroke: 1.5,
|
|
279
312
|
"aria-hidden": true
|
|
280
|
-
}),
|
|
313
|
+
}), /* @__PURE__ */ jsxs("span", {
|
|
314
|
+
className: "min-w-0",
|
|
315
|
+
children: [issue.message, issue.fix && !readOnly ? /* @__PURE__ */ jsxs(Fragment, { children: [" ", /* @__PURE__ */ jsx("button", {
|
|
316
|
+
type: "button",
|
|
317
|
+
onClick: issue.fix.apply,
|
|
318
|
+
className: "font-medium text-kit-fg underline-offset-2 hover:underline",
|
|
319
|
+
children: issue.fix.label
|
|
320
|
+
})] }) : null]
|
|
321
|
+
})]
|
|
281
322
|
}, issue.message) : /* @__PURE__ */ jsx("span", {})
|
|
282
323
|
}), meta ? /* @__PURE__ */ jsx("span", {
|
|
283
324
|
className: "flex shrink-0 items-center gap-2",
|
|
@@ -291,6 +332,162 @@ function FieldShell({ field, path, id, value, onChange, readOnly, issue, action,
|
|
|
291
332
|
title: field.title.length > 28 ? field.title : void 0,
|
|
292
333
|
children: label
|
|
293
334
|
});
|
|
335
|
+
const body = layout === "row" ? /* @__PURE__ */ jsxs("div", {
|
|
336
|
+
className: cn("group/field relative flex min-w-0 flex-col gap-1.5", className),
|
|
337
|
+
"data-field-key": key,
|
|
338
|
+
"data-field": path.length === 1 ? key : void 0,
|
|
339
|
+
"data-slot": "kit-field",
|
|
340
|
+
children: [
|
|
341
|
+
bar,
|
|
342
|
+
/* @__PURE__ */ jsx(RowChrome.Provider, {
|
|
343
|
+
value: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
344
|
+
info,
|
|
345
|
+
badges,
|
|
346
|
+
accessories
|
|
347
|
+
] }),
|
|
348
|
+
children: control
|
|
349
|
+
}),
|
|
350
|
+
message
|
|
351
|
+
]
|
|
352
|
+
}) : layout === "card" && quiet ? /* @__PURE__ */ jsxs("div", {
|
|
353
|
+
className: cn("group/field relative flex flex-col gap-1", className),
|
|
354
|
+
"data-field-key": key,
|
|
355
|
+
"data-field": path.length === 1 ? key : void 0,
|
|
356
|
+
"data-slot": "kit-field",
|
|
357
|
+
children: [
|
|
358
|
+
bar,
|
|
359
|
+
/* @__PURE__ */ jsxs("div", {
|
|
360
|
+
"data-field-head": "",
|
|
361
|
+
className: "flex min-h-8 items-center gap-3",
|
|
362
|
+
children: [
|
|
363
|
+
/* @__PURE__ */ jsxs("label", {
|
|
364
|
+
htmlFor: id,
|
|
365
|
+
id: `${id}-label`,
|
|
366
|
+
className: "min-w-0 flex-1 cursor-pointer",
|
|
367
|
+
children: [/* @__PURE__ */ jsxs("span", {
|
|
368
|
+
className: "flex min-w-0 items-center gap-1 text-kit-sm font-medium text-kit-fg-2 transition-colors group-focus-within/field:text-kit-fg",
|
|
369
|
+
children: [
|
|
370
|
+
label,
|
|
371
|
+
info,
|
|
372
|
+
badges
|
|
373
|
+
]
|
|
374
|
+
}), helpInline ? /* @__PURE__ */ jsx("span", {
|
|
375
|
+
id: helpId,
|
|
376
|
+
"data-slot": "field-help",
|
|
377
|
+
className: "mt-0.5 block text-kit-xs leading-4 text-kit-fg-3",
|
|
378
|
+
children: helpNode
|
|
379
|
+
}) : null]
|
|
380
|
+
}),
|
|
381
|
+
/* @__PURE__ */ jsx("span", {
|
|
382
|
+
className: "flex shrink-0 items-center gap-0.5 empty:hidden",
|
|
383
|
+
children: accessories
|
|
384
|
+
}),
|
|
385
|
+
/* @__PURE__ */ jsx("span", {
|
|
386
|
+
className: "flex shrink-0 items-center",
|
|
387
|
+
children: readOnly ? /* @__PURE__ */ jsx("span", {
|
|
388
|
+
className: "text-kit-sm text-kit-fg-2",
|
|
389
|
+
children: value ? "On" : "Off"
|
|
390
|
+
}) : control
|
|
391
|
+
})
|
|
392
|
+
]
|
|
393
|
+
}),
|
|
394
|
+
message
|
|
395
|
+
]
|
|
396
|
+
}) : layout === "card" ? /* @__PURE__ */ jsxs("div", {
|
|
397
|
+
className: cn("group/field relative flex flex-col gap-1.5", className),
|
|
398
|
+
"data-field-key": key,
|
|
399
|
+
"data-field": path.length === 1 ? key : void 0,
|
|
400
|
+
"data-slot": "kit-field",
|
|
401
|
+
children: [
|
|
402
|
+
bar,
|
|
403
|
+
/* @__PURE__ */ jsxs("div", {
|
|
404
|
+
"data-field-head": "",
|
|
405
|
+
className: cn("flex items-center gap-3 rounded-kit-lg border bg-kit-surface px-3 py-2.5 transition-colors", issue?.level === "error" ? "border-[var(--kit-field-invalid)]" : "border-kit-line hover:border-kit-line-strong"),
|
|
406
|
+
children: [
|
|
407
|
+
control,
|
|
408
|
+
/* @__PURE__ */ jsxs("label", {
|
|
409
|
+
htmlFor: id,
|
|
410
|
+
id: `${id}-label`,
|
|
411
|
+
className: "min-w-0 flex-1 cursor-pointer",
|
|
412
|
+
children: [/* @__PURE__ */ jsxs("span", {
|
|
413
|
+
className: "flex min-w-0 items-center gap-1.5 text-kit-sm font-medium text-kit-fg",
|
|
414
|
+
children: [
|
|
415
|
+
label,
|
|
416
|
+
info,
|
|
417
|
+
badges
|
|
418
|
+
]
|
|
419
|
+
}), helpInline ? /* @__PURE__ */ jsx("span", {
|
|
420
|
+
id: helpId,
|
|
421
|
+
"data-slot": "field-help",
|
|
422
|
+
className: "block text-kit-xs leading-4 text-kit-fg-3",
|
|
423
|
+
children: helpNode
|
|
424
|
+
}) : null]
|
|
425
|
+
}),
|
|
426
|
+
/* @__PURE__ */ jsx("span", {
|
|
427
|
+
className: "shrink-0 text-kit-xs text-kit-fg-3",
|
|
428
|
+
children: value ? "On" : "Off"
|
|
429
|
+
}),
|
|
430
|
+
/* @__PURE__ */ jsx("span", {
|
|
431
|
+
className: "flex shrink-0 items-center gap-0.5 empty:hidden",
|
|
432
|
+
children: accessories
|
|
433
|
+
})
|
|
434
|
+
]
|
|
435
|
+
}),
|
|
436
|
+
message
|
|
437
|
+
]
|
|
438
|
+
}) : /* @__PURE__ */ jsxs("div", {
|
|
439
|
+
className: cn("group/field relative flex min-w-0 flex-col gap-1.5", className),
|
|
440
|
+
"data-field-key": key,
|
|
441
|
+
"data-field": path.length === 1 ? key : void 0,
|
|
442
|
+
"data-slot": "kit-field",
|
|
443
|
+
"data-inherited": inh && !overridden ? "" : void 0,
|
|
444
|
+
"data-overridden": overridden ? "" : void 0,
|
|
445
|
+
children: [
|
|
446
|
+
bar,
|
|
447
|
+
repeatsSection ? /* @__PURE__ */ jsx("label", {
|
|
448
|
+
htmlFor: id,
|
|
449
|
+
id: `${id}-label`,
|
|
450
|
+
className: "sr-only",
|
|
451
|
+
children: label
|
|
452
|
+
}) : lifted ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("label", {
|
|
453
|
+
htmlFor: id,
|
|
454
|
+
id: `${id}-label`,
|
|
455
|
+
className: "sr-only",
|
|
456
|
+
children: label
|
|
457
|
+
}), createPortal(/* @__PURE__ */ jsxs("span", {
|
|
458
|
+
className: "flex items-center gap-0.5 [&>button]:!inline-flex",
|
|
459
|
+
children: [
|
|
460
|
+
info,
|
|
461
|
+
badges,
|
|
462
|
+
counter,
|
|
463
|
+
accessories
|
|
464
|
+
]
|
|
465
|
+
}), lifted)] }) : /* @__PURE__ */ jsxs("div", {
|
|
466
|
+
"data-slot": "field-label-row",
|
|
467
|
+
"data-field-head": "",
|
|
468
|
+
className: "flex min-h-5 min-w-0 items-center gap-1.5",
|
|
469
|
+
children: [
|
|
470
|
+
labelEl,
|
|
471
|
+
info,
|
|
472
|
+
badges,
|
|
473
|
+
/* @__PURE__ */ jsx("span", { className: "flex-1" }),
|
|
474
|
+
counter,
|
|
475
|
+
/* @__PURE__ */ jsx("span", {
|
|
476
|
+
className: "flex shrink-0 items-center gap-0.5",
|
|
477
|
+
children: accessories
|
|
478
|
+
})
|
|
479
|
+
]
|
|
480
|
+
}),
|
|
481
|
+
helpInline ? /* @__PURE__ */ jsx("p", {
|
|
482
|
+
id: helpId,
|
|
483
|
+
"data-slot": "field-help",
|
|
484
|
+
className: "-mt-0.5 text-kit-xs leading-4 text-kit-fg-3",
|
|
485
|
+
children: helpNode
|
|
486
|
+
}) : null,
|
|
487
|
+
control,
|
|
488
|
+
message
|
|
489
|
+
]
|
|
490
|
+
});
|
|
294
491
|
return /* @__PURE__ */ jsxs(Popover, {
|
|
295
492
|
open: ai,
|
|
296
493
|
onOpenChange: setAi,
|
|
@@ -304,102 +501,7 @@ function FieldShell({ field, path, id, value, onChange, readOnly, issue, action,
|
|
|
304
501
|
},
|
|
305
502
|
children: [/* @__PURE__ */ jsx(PopoverAnchor, {
|
|
306
503
|
className: "min-w-0",
|
|
307
|
-
children:
|
|
308
|
-
className: cn("group/field flex min-w-0 flex-col gap-1.5", className),
|
|
309
|
-
"data-field-key": key,
|
|
310
|
-
"data-field": path.length === 1 ? key : void 0,
|
|
311
|
-
"data-slot": "kit-field",
|
|
312
|
-
children: [/* @__PURE__ */ jsx(RowChrome.Provider, {
|
|
313
|
-
value: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
314
|
-
info,
|
|
315
|
-
badges,
|
|
316
|
-
accessories
|
|
317
|
-
] }),
|
|
318
|
-
children: control
|
|
319
|
-
}), message]
|
|
320
|
-
}) : layout === "card" ? /* @__PURE__ */ jsxs("div", {
|
|
321
|
-
className: cn("group/field flex flex-col gap-1.5", className),
|
|
322
|
-
"data-field-key": key,
|
|
323
|
-
"data-field": path.length === 1 ? key : void 0,
|
|
324
|
-
"data-slot": "kit-field",
|
|
325
|
-
children: [/* @__PURE__ */ jsxs("div", {
|
|
326
|
-
className: cn("flex items-center gap-3 rounded-kit-lg border bg-kit-surface px-3 py-2.5 transition-colors", issue?.level === "error" ? "border-[var(--kit-field-invalid)]" : "border-kit-line hover:border-kit-line-strong"),
|
|
327
|
-
children: [
|
|
328
|
-
control,
|
|
329
|
-
/* @__PURE__ */ jsxs("label", {
|
|
330
|
-
htmlFor: id,
|
|
331
|
-
id: `${id}-label`,
|
|
332
|
-
className: "min-w-0 flex-1 cursor-pointer",
|
|
333
|
-
children: [/* @__PURE__ */ jsxs("span", {
|
|
334
|
-
className: "flex min-w-0 items-center gap-1.5 text-kit-sm font-medium text-kit-fg",
|
|
335
|
-
children: [
|
|
336
|
-
label,
|
|
337
|
-
info,
|
|
338
|
-
badges
|
|
339
|
-
]
|
|
340
|
-
}), helpInline ? /* @__PURE__ */ jsx("span", {
|
|
341
|
-
id: helpId,
|
|
342
|
-
"data-slot": "field-help",
|
|
343
|
-
className: "block text-kit-xs leading-4 text-kit-fg-3",
|
|
344
|
-
children: help
|
|
345
|
-
}) : null]
|
|
346
|
-
}),
|
|
347
|
-
/* @__PURE__ */ jsx("span", {
|
|
348
|
-
className: "shrink-0 text-kit-xs text-kit-fg-3",
|
|
349
|
-
children: value ? "On" : "Off"
|
|
350
|
-
}),
|
|
351
|
-
/* @__PURE__ */ jsx("span", {
|
|
352
|
-
className: "flex shrink-0 items-center gap-0.5 empty:hidden",
|
|
353
|
-
children: accessories
|
|
354
|
-
})
|
|
355
|
-
]
|
|
356
|
-
}), message]
|
|
357
|
-
}) : /* @__PURE__ */ jsxs("div", {
|
|
358
|
-
className: cn("group/field flex min-w-0 flex-col gap-1.5", className),
|
|
359
|
-
"data-field-key": key,
|
|
360
|
-
"data-field": path.length === 1 ? key : void 0,
|
|
361
|
-
"data-slot": "kit-field",
|
|
362
|
-
"data-inherited": inh && !overridden ? "" : void 0,
|
|
363
|
-
"data-overridden": overridden ? "" : void 0,
|
|
364
|
-
children: [
|
|
365
|
-
lifted ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("label", {
|
|
366
|
-
htmlFor: id,
|
|
367
|
-
id: `${id}-label`,
|
|
368
|
-
className: "sr-only",
|
|
369
|
-
children: label
|
|
370
|
-
}), createPortal(/* @__PURE__ */ jsxs("span", {
|
|
371
|
-
className: "flex items-center gap-0.5 [&>button]:!inline-flex",
|
|
372
|
-
children: [
|
|
373
|
-
info,
|
|
374
|
-
badges,
|
|
375
|
-
counter,
|
|
376
|
-
accessories
|
|
377
|
-
]
|
|
378
|
-
}), lifted)] }) : /* @__PURE__ */ jsxs("div", {
|
|
379
|
-
"data-slot": "field-label-row",
|
|
380
|
-
className: "flex min-h-5 min-w-0 items-center gap-1.5",
|
|
381
|
-
children: [
|
|
382
|
-
labelEl,
|
|
383
|
-
info,
|
|
384
|
-
badges,
|
|
385
|
-
/* @__PURE__ */ jsx("span", { className: "flex-1" }),
|
|
386
|
-
counter,
|
|
387
|
-
/* @__PURE__ */ jsx("span", {
|
|
388
|
-
className: "flex shrink-0 items-center gap-0.5",
|
|
389
|
-
children: accessories
|
|
390
|
-
})
|
|
391
|
-
]
|
|
392
|
-
}),
|
|
393
|
-
helpInline ? /* @__PURE__ */ jsx("p", {
|
|
394
|
-
id: helpId,
|
|
395
|
-
"data-slot": "field-help",
|
|
396
|
-
className: "-mt-0.5 text-kit-xs leading-4 text-kit-fg-3",
|
|
397
|
-
children: help
|
|
398
|
-
}) : null,
|
|
399
|
-
control,
|
|
400
|
-
message
|
|
401
|
-
]
|
|
402
|
-
})
|
|
504
|
+
children: body
|
|
403
505
|
}), commentsOpen && InPlaceComments ? /* @__PURE__ */ jsx(PopoverContent, {
|
|
404
506
|
align: "start",
|
|
405
507
|
sideOffset: 8,
|
|
@@ -471,10 +573,10 @@ function CountedCommentButton({ count, label, open, onOpen }) {
|
|
|
471
573
|
onClick: (e) => onOpen(e.currentTarget),
|
|
472
574
|
"data-state": open ? "open" : "closed",
|
|
473
575
|
"aria-label": `${count} open comments on ${label}`,
|
|
474
|
-
className: "inline-flex h-5 items-center gap-
|
|
576
|
+
className: "-my-0.5 inline-flex h-5 items-center gap-0.5 rounded-kit-md px-1 text-kit-2xs font-medium text-kit-fg-3 hover:bg-kit-hover hover:text-kit-fg data-[state=open]:bg-kit-hover data-[state=open]:text-kit-fg",
|
|
475
577
|
children: [/* @__PURE__ */ jsx(IconMessage, {
|
|
476
|
-
className: "size-3",
|
|
477
|
-
stroke:
|
|
578
|
+
className: "size-3.5",
|
|
579
|
+
stroke: 1.5,
|
|
478
580
|
"aria-hidden": true
|
|
479
581
|
}), /* @__PURE__ */ jsx("span", {
|
|
480
582
|
className: "tabular-nums",
|
|
@@ -567,7 +669,7 @@ function PeerStack({ peers, size = 16 }) {
|
|
|
567
669
|
function FieldMenu({ field, path, value, onChange, readOnly, changed, onAi }) {
|
|
568
670
|
const form = useForm();
|
|
569
671
|
const env = useKitEnv();
|
|
570
|
-
const { toast, aiRewrite, richText } = useKitServices();
|
|
672
|
+
const { toast, aiRewrite, richText, FieldMenuExtras } = useKitServices();
|
|
571
673
|
const key = pathKey(path);
|
|
572
674
|
const api = apiName(form?.schema.name ?? "doc", path);
|
|
573
675
|
const textual = isTextual(field.type);
|
|
@@ -631,6 +733,11 @@ function FieldMenu({ field, path, value, onChange, readOnly, changed, onAi }) {
|
|
|
631
733
|
onClick: () => form.navigate([...path, HISTORY_SEGMENT]),
|
|
632
734
|
children: "History"
|
|
633
735
|
}) : null,
|
|
736
|
+
FieldMenuExtras ? /* @__PURE__ */ jsx(FieldMenuExtras, {
|
|
737
|
+
field,
|
|
738
|
+
path,
|
|
739
|
+
readOnly
|
|
740
|
+
}) : null,
|
|
634
741
|
editable && prose && aiRewrite ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
635
742
|
/* @__PURE__ */ jsx(MenuSeparator, {}),
|
|
636
743
|
form?.aiKeys.has(key) ? /* @__PURE__ */ jsx(MenuItem, {
|
|
@@ -839,9 +946,23 @@ function Shimmer({ children }) {
|
|
|
839
946
|
children
|
|
840
947
|
});
|
|
841
948
|
}
|
|
949
|
+
/**
|
|
950
|
+
* Reduced motion as the app reads it: the OS query or the in-app preference (which stamps `data-reduce-motion` on
|
|
951
|
+
* <html>; the kit cannot import the app's hook). Read per render, so a toggle applies to the next answer.
|
|
952
|
+
*/
|
|
953
|
+
function motionReduced() {
|
|
954
|
+
if (typeof window === "undefined") return false;
|
|
955
|
+
return document.documentElement.hasAttribute("data-reduce-motion") || !!window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;
|
|
956
|
+
}
|
|
957
|
+
/** Reduced: the whole answer at once, with no caret (canvas revamp V701, lib/motion TypeOut semantics). */
|
|
842
958
|
function TypeOut({ text, speed = 14 }) {
|
|
843
|
-
const
|
|
959
|
+
const reduce = motionReduced();
|
|
960
|
+
const [n, setN] = React.useState(reduce ? text.length : 0);
|
|
844
961
|
React.useEffect(() => {
|
|
962
|
+
if (reduce) {
|
|
963
|
+
setN(text.length);
|
|
964
|
+
return;
|
|
965
|
+
}
|
|
845
966
|
setN(0);
|
|
846
967
|
const id = setInterval(() => {
|
|
847
968
|
setN((x) => {
|
|
@@ -851,8 +972,15 @@ function TypeOut({ text, speed = 14 }) {
|
|
|
851
972
|
});
|
|
852
973
|
}, speed);
|
|
853
974
|
return () => clearInterval(id);
|
|
854
|
-
}, [
|
|
855
|
-
|
|
975
|
+
}, [
|
|
976
|
+
text,
|
|
977
|
+
speed,
|
|
978
|
+
reduce
|
|
979
|
+
]);
|
|
980
|
+
return /* @__PURE__ */ jsxs("span", { children: [text.slice(0, n), n < text.length ? /* @__PURE__ */ jsx("span", {
|
|
981
|
+
"data-typeout-caret": true,
|
|
982
|
+
className: "ml-0.5 inline-block h-[1em] w-[2px] translate-y-[2px] bg-kit-fg motion-safe:animate-pulse"
|
|
983
|
+
}) : null] });
|
|
856
984
|
}
|
|
857
985
|
//#endregion
|
|
858
986
|
export { FieldShell, LABEL_HINT_AT, PeerStack, apiName, resetFieldClipboard };
|