@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
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import { cn } from "../../lib/cn.js";
|
|
2
2
|
import { useKitServices } from "../../context.js";
|
|
3
3
|
import { Button, IconButton } from "../../ui/button.js";
|
|
4
|
-
import { Menu, MenuContent, MenuItem,
|
|
4
|
+
import { Menu, MenuContent, MenuItem, MenuTrigger, Popover, PopoverContent, PopoverTrigger, Tooltip } from "../../ui/overlay.js";
|
|
5
5
|
import { Input, Textarea } from "../../ui/input.js";
|
|
6
6
|
import { TableEditor } from "../table/table-editor.js";
|
|
7
|
-
import {
|
|
7
|
+
import { VideoPreview } from "../media.js";
|
|
8
|
+
import { ArticleActions, ArticleCard, ArticleForm, ArticlePanel, articleCardKeyDown, useArticleOpen } from "./article-shell.js";
|
|
8
9
|
import { CALLOUT_TONES, placeCaret } from "./dom.js";
|
|
9
|
-
import { FloatingPanel } from "../../ui/floating-panel.js";
|
|
10
10
|
import { LinkForm } from "./link-form.js";
|
|
11
|
+
import { EmbedBlock } from "./embed.js";
|
|
11
12
|
import { ComponentCard } from "./component-card.js";
|
|
12
13
|
import * as React from "react";
|
|
13
|
-
import { IconAlertTriangle, IconAlt, IconArrowsHorizontal, IconArrowsMove, IconBulb, IconCheck, IconChevronDown, IconChevronRight, IconComponents, IconCopy, IconDimensions, IconDots, IconFileText, IconInfoCircle, IconLayoutAlignCenter, IconLayoutAlignLeft, IconLayoutAlignRight, IconLayoutSidebar, IconLayoutSidebarRight, IconLibraryPhoto, IconLink, IconPhoto, IconQuote, IconReplace, IconSettings, IconTrash, IconVideo, IconWorld, IconX } from "@tabler/icons-react";
|
|
14
14
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
15
|
-
|
|
15
|
+
import { IconAlertTriangle, IconAlt, IconArrowsHorizontal, IconBulb, IconCheck, IconChevronDown, IconChevronRight, IconComponents, IconCopy, IconFileText, IconFileUpload, IconInfoCircle, IconLayoutAlignCenter, IconLayoutAlignLeft, IconLayoutAlignRight, IconLibraryPhoto, IconLink, IconPhoto, IconQuote, IconReplace, IconTrash, IconWorld } from "@tabler/icons-react";
|
|
16
|
+
//#region src/controls/rich-text/blocks.tsx
|
|
16
17
|
/**
|
|
17
18
|
* RICH TEXT · rich blocks ("islands", V2 HEAD controls/rich-text/blocks.tsx). Each renders through a portal into a
|
|
18
19
|
* contenteditable=false element inside the editor surface; its model lives on that element (`el.__rt`) so serialize()
|
|
@@ -28,6 +29,7 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
|
28
29
|
* block (article-blocks.tsx ArticleBlock + PullQuotePreview): drawn as the reader sees it, edited in the floating
|
|
29
30
|
* properties panel (4 settings → panel, CPO D54) through the kit SchemaForm. Key takeaways are V2's article block too,
|
|
30
31
|
* written in the text itself (article-blocks.tsx TakeawaysEditor, surface "inline"): a title line and a line per point.
|
|
32
|
+
* The embed island draws embed.tsx's block (V2's article Embed: Link, Title, Shape), keeping the keys it lacks absent.
|
|
31
33
|
*/
|
|
32
34
|
function Island({ el, ctx }) {
|
|
33
35
|
const kind = el.getAttribute("data-rt-island");
|
|
@@ -111,6 +113,12 @@ function Island({ el, ctx }) {
|
|
|
111
113
|
autoFocus,
|
|
112
114
|
m: model,
|
|
113
115
|
set
|
|
116
|
+
}) : kind === "embed" ? /* @__PURE__ */ jsx(EmbedIsland, {
|
|
117
|
+
el,
|
|
118
|
+
ctx,
|
|
119
|
+
autoFocus,
|
|
120
|
+
m: model,
|
|
121
|
+
set
|
|
114
122
|
}) : kind === "file" ? /* @__PURE__ */ jsx(FileBlock, {
|
|
115
123
|
el,
|
|
116
124
|
ctx,
|
|
@@ -126,6 +134,32 @@ function Island({ el, ctx }) {
|
|
|
126
134
|
}) : null
|
|
127
135
|
});
|
|
128
136
|
}
|
|
137
|
+
/** The island's stored embed (keys absent when the block lacks them) through embed.tsx's block (V2's model). */
|
|
138
|
+
function EmbedIsland({ m, set, el, ctx, autoFocus }) {
|
|
139
|
+
return /* @__PURE__ */ jsx(EmbedBlock, {
|
|
140
|
+
m: {
|
|
141
|
+
url: m.url ?? "",
|
|
142
|
+
title: m.title ?? "",
|
|
143
|
+
aspect: m.aspect ?? "16:9"
|
|
144
|
+
},
|
|
145
|
+
set: (fn, label) => set((prev) => {
|
|
146
|
+
const next = fn({
|
|
147
|
+
url: prev.url ?? "",
|
|
148
|
+
title: prev.title ?? "",
|
|
149
|
+
aspect: prev.aspect ?? "16:9"
|
|
150
|
+
});
|
|
151
|
+
const out = { ...prev };
|
|
152
|
+
if (next.url !== (prev.url ?? "")) out.url = next.url;
|
|
153
|
+
if (next.title !== (prev.title ?? "")) out.title = next.title;
|
|
154
|
+
if (next.aspect !== (prev.aspect ?? "16:9")) out.aspect = next.aspect;
|
|
155
|
+
return out;
|
|
156
|
+
}, label),
|
|
157
|
+
el,
|
|
158
|
+
ctx,
|
|
159
|
+
autoFocus,
|
|
160
|
+
shape: ctx.allows?.("embedAspect") ?? false
|
|
161
|
+
});
|
|
162
|
+
}
|
|
129
163
|
var Sep = () => /* @__PURE__ */ jsx("span", {
|
|
130
164
|
"aria-hidden": true,
|
|
131
165
|
className: "mx-0.5 h-4 w-px shrink-0 bg-kit-line"
|
|
@@ -172,10 +206,10 @@ function PlainEditable({ value, onChange, label, placeholder, readOnly, autoFocu
|
|
|
172
206
|
e.preventDefault();
|
|
173
207
|
onEnter?.();
|
|
174
208
|
},
|
|
175
|
-
className: cn("min-w-0 cursor-text whitespace-pre-wrap break-words outline-none empty:before:pointer-events-none empty:before:text-kit-fg-4 empty:before:content-[attr(data-placeholder)]", className)
|
|
209
|
+
className: cn("min-w-0 cursor-text whitespace-pre-wrap break-words outline-none focus-visible:shadow-none empty:before:pointer-events-none empty:before:text-kit-fg-4 empty:before:content-[attr(data-placeholder)]", className)
|
|
176
210
|
});
|
|
177
211
|
}
|
|
178
|
-
var RemoveBtn = ({ onClick, label }) => /* @__PURE__ */ jsx(IconButton, {
|
|
212
|
+
var RemoveBtn = ({ onClick, label = "Remove block" }) => /* @__PURE__ */ jsx(IconButton, {
|
|
179
213
|
size: "xs",
|
|
180
214
|
label,
|
|
181
215
|
onClick,
|
|
@@ -274,19 +308,9 @@ function ImageBlock({ m, set, el, ctx }) {
|
|
|
274
308
|
children: MediaPicker ? "Pick one from the media library or paste a link." : "Paste a link to the image."
|
|
275
309
|
})]
|
|
276
310
|
}),
|
|
277
|
-
ro ? null : /* @__PURE__ */ jsx(
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
type: "button",
|
|
281
|
-
"aria-label": "Remove image",
|
|
282
|
-
onClick: () => ctx.remove(el),
|
|
283
|
-
className: "flex size-6 items-center justify-center rounded-kit-md text-kit-fg-3 hover:bg-kit-hover hover:text-kit-danger-fg",
|
|
284
|
-
children: /* @__PURE__ */ jsx(IconTrash, {
|
|
285
|
-
className: "size-3.5",
|
|
286
|
-
stroke: 1.5,
|
|
287
|
-
"aria-hidden": true
|
|
288
|
-
})
|
|
289
|
-
})
|
|
311
|
+
ro ? null : /* @__PURE__ */ jsx(RemoveBtn, {
|
|
312
|
+
onClick: () => ctx.remove(el),
|
|
313
|
+
label: "Remove image"
|
|
290
314
|
})
|
|
291
315
|
]
|
|
292
316
|
}),
|
|
@@ -357,8 +381,7 @@ function ImageBlock({ m, set, el, ctx }) {
|
|
|
357
381
|
ro ? null : /* @__PURE__ */ jsxs("div", {
|
|
358
382
|
role: "toolbar",
|
|
359
383
|
"aria-label": "Image tools",
|
|
360
|
-
"
|
|
361
|
-
className: cn("absolute left-1/2 top-2 z-[3] flex h-8 max-w-[calc(100%-16px)] -translate-x-1/2 items-center gap-0.5 overflow-x-auto rounded-kit-lg border border-kit-line bg-kit-surface px-1 opacity-0 shadow-kit-sm transition-opacity duration-150 motion-reduce:transition-none", "group-hover/blk:opacity-100 group-focus-within/blk:opacity-100 pointer-coarse:opacity-100", busy && "opacity-100"),
|
|
384
|
+
className: cn("glass-strong absolute left-1/2 top-2 z-[3] flex h-8 -translate-x-1/2 items-center gap-0.5 rounded-kit-lg border border-kit-line px-1 opacity-0 transition-opacity duration-150", "group-hover/blk:opacity-100 group-focus-within/blk:opacity-100 pointer-coarse:opacity-100", busy && "opacity-100"),
|
|
362
385
|
children: [
|
|
363
386
|
MediaPicker ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Tooltip, {
|
|
364
387
|
content: "Replace image",
|
|
@@ -440,7 +463,7 @@ function ImageBlock({ m, set, el, ctx }) {
|
|
|
440
463
|
})
|
|
441
464
|
})
|
|
442
465
|
}), /* @__PURE__ */ jsxs(PopoverContent, {
|
|
443
|
-
className: "w-[340px] p-3",
|
|
466
|
+
className: "w-[340px] rounded-kit-lg p-3",
|
|
444
467
|
finalFocus: false,
|
|
445
468
|
children: [/* @__PURE__ */ jsx("p", {
|
|
446
469
|
className: "mb-2 text-kit-xs font-medium text-kit-fg-2",
|
|
@@ -507,7 +530,7 @@ function ImageBlock({ m, set, el, ctx }) {
|
|
|
507
530
|
placeholder: ro ? "" : "Add a caption…",
|
|
508
531
|
onChange: (caption) => set({ caption }, "Edit caption"),
|
|
509
532
|
onEnter: () => ctx.exit(el),
|
|
510
|
-
className: "mt-1.5 text-center text-kit-sm text-kit-fg-3"
|
|
533
|
+
className: "mt-1.5 text-center text-kit-sm text-kit-fg-3 empty:before:text-kit-fg-4"
|
|
511
534
|
}),
|
|
512
535
|
pickerEl
|
|
513
536
|
]
|
|
@@ -642,7 +665,7 @@ function CalloutBlock({ m, set, el, ctx, autoFocus }) {
|
|
|
642
665
|
})] }),
|
|
643
666
|
/* @__PURE__ */ jsx("span", { className: "flex-1" }),
|
|
644
667
|
ro ? null : /* @__PURE__ */ jsx("div", {
|
|
645
|
-
className: "opacity-0 transition-opacity
|
|
668
|
+
className: "opacity-0 transition-opacity group-hover/blk:opacity-100 group-focus-within/blk:opacity-100 pointer-coarse:opacity-100",
|
|
646
669
|
children: /* @__PURE__ */ jsx(RemoveBtn, {
|
|
647
670
|
onClick: () => ctx.remove(el),
|
|
648
671
|
label: "Remove callout"
|
|
@@ -673,7 +696,7 @@ function CalloutBlock({ m, set, el, ctx, autoFocus }) {
|
|
|
673
696
|
readOnly: ro,
|
|
674
697
|
placeholder: "Write a message…",
|
|
675
698
|
onChange: (b) => set({ body: b }, "Edit callout message"),
|
|
676
|
-
className: "mt-0.5 text-kit-fg-2"
|
|
699
|
+
className: "mt-0.5 text-kit-fg-2 [&_p+p]:mt-2"
|
|
677
700
|
})
|
|
678
701
|
})
|
|
679
702
|
]
|
|
@@ -698,7 +721,7 @@ function ToggleBlock({ m, set, el, ctx, autoFocus }) {
|
|
|
698
721
|
onClick: () => setOpen((o) => !o),
|
|
699
722
|
className: "mt-0.5 flex size-6 shrink-0 items-center justify-center rounded-kit-md text-kit-fg-2 hover:bg-kit-hover hover:text-kit-fg",
|
|
700
723
|
children: /* @__PURE__ */ jsx(IconChevronRight, {
|
|
701
|
-
className: cn("size-4 transition-transform duration-150
|
|
724
|
+
className: cn("size-4 transition-transform duration-150", open && "rotate-90"),
|
|
702
725
|
stroke: 1.5,
|
|
703
726
|
"aria-hidden": true
|
|
704
727
|
})
|
|
@@ -721,7 +744,7 @@ function ToggleBlock({ m, set, el, ctx, autoFocus }) {
|
|
|
721
744
|
className: "flex-1 py-0.5 font-medium text-kit-fg"
|
|
722
745
|
}),
|
|
723
746
|
ro ? null : /* @__PURE__ */ jsx("div", {
|
|
724
|
-
className: "opacity-0 transition-opacity
|
|
747
|
+
className: "opacity-0 transition-opacity group-hover/blk:opacity-100 group-focus-within/blk:opacity-100 pointer-coarse:opacity-100",
|
|
725
748
|
children: /* @__PURE__ */ jsx(RemoveBtn, {
|
|
726
749
|
onClick: () => ctx.remove(el),
|
|
727
750
|
label: "Remove toggle"
|
|
@@ -740,19 +763,12 @@ function ToggleBlock({ m, set, el, ctx, autoFocus }) {
|
|
|
740
763
|
readOnly: ro,
|
|
741
764
|
placeholder: "Hidden content. Click to write…",
|
|
742
765
|
onChange: (b) => set({ body: b }, "Edit toggle body"),
|
|
743
|
-
className: "py-0.5 text-kit-fg-2"
|
|
766
|
+
className: "py-0.5 text-kit-fg-2 [&_p+p]:mt-2"
|
|
744
767
|
})
|
|
745
768
|
})]
|
|
746
769
|
});
|
|
747
770
|
}
|
|
748
771
|
var videoUrlOk = (u) => /^https?:\/\/\S+$/i.test(u) || /^\/(?!\/)\S*$/.test(u);
|
|
749
|
-
function videoEmbedSrc(url) {
|
|
750
|
-
const yt = /(?:youtube\.com\/(?:watch\?(?:.*&)?v=|embed\/|shorts\/|live\/)|youtu\.be\/)([\w-]{6,})/i.exec(url);
|
|
751
|
-
if (yt) return `https://www.youtube-nocookie.com/embed/${yt[1]}`;
|
|
752
|
-
const vimeo = /vimeo\.com\/(?:video\/)?(\d+)/i.exec(url);
|
|
753
|
-
if (vimeo) return `https://player.vimeo.com/video/${vimeo[1]}`;
|
|
754
|
-
return null;
|
|
755
|
-
}
|
|
756
772
|
function VideoBlock({ m, set, el, ctx, autoFocus }) {
|
|
757
773
|
const [draft, setDraft] = React.useState(m.url ?? "");
|
|
758
774
|
React.useEffect(() => setDraft(m.url ?? ""), [m.url]);
|
|
@@ -766,7 +782,6 @@ function VideoBlock({ m, set, el, ctx, autoFocus }) {
|
|
|
766
782
|
set({ url: u }, "Set video link");
|
|
767
783
|
};
|
|
768
784
|
const ro = ctx.readOnly;
|
|
769
|
-
const frame = m.url ? videoEmbedSrc(m.url) : null;
|
|
770
785
|
return /* @__PURE__ */ jsxs("div", {
|
|
771
786
|
className: "group/blk rounded-kit-lg border border-kit-line bg-kit-subtle p-2.5",
|
|
772
787
|
"data-rt-isolate": "",
|
|
@@ -804,32 +819,17 @@ function VideoBlock({ m, set, el, ctx, autoFocus }) {
|
|
|
804
819
|
className: "mb-2 px-1 text-kit-xs text-kit-danger-fg",
|
|
805
820
|
children: error
|
|
806
821
|
}) : null,
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
title:
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
referrerPolicy: "strict-origin-when-cross-origin",
|
|
814
|
-
className: "pointer-events-none aspect-video w-full rounded-kit-md border-0 bg-kit-muted"
|
|
815
|
-
}) : m.url ? /* @__PURE__ */ jsx("video", {
|
|
816
|
-
src: m.url,
|
|
817
|
-
title: m.title || "Video preview",
|
|
818
|
-
controls: true,
|
|
819
|
-
preload: "metadata",
|
|
820
|
-
className: "aspect-video w-full rounded-kit-md bg-kit-muted"
|
|
821
|
-
}) : /* @__PURE__ */ jsxs("p", {
|
|
822
|
-
className: "flex items-center gap-1.5 px-1 pb-0.5 text-kit-xs text-kit-fg-3",
|
|
823
|
-
children: [/* @__PURE__ */ jsx(IconVideo, {
|
|
824
|
-
className: "size-3.5",
|
|
825
|
-
stroke: 1.5,
|
|
826
|
-
"aria-hidden": true
|
|
827
|
-
}), "No video yet."]
|
|
822
|
+
m.url ? /* @__PURE__ */ jsx(VideoPreview, {
|
|
823
|
+
url: m.url,
|
|
824
|
+
title: "Video"
|
|
825
|
+
}) : /* @__PURE__ */ jsx("p", {
|
|
826
|
+
className: "px-1 pb-0.5 text-kit-xs text-kit-fg-3",
|
|
827
|
+
children: "No video yet."
|
|
828
828
|
})
|
|
829
829
|
]
|
|
830
830
|
});
|
|
831
831
|
}
|
|
832
|
-
var formatBytes = (n) => n < 1024 ? `${n} B` : n <
|
|
832
|
+
var formatBytes = (n) => n < 1024 ? `${n} B` : n < 1048576 ? `${(n / 1024).toFixed(0)} KB` : `${(n / 1024 / 1024).toFixed(1)} MB`;
|
|
833
833
|
function FileBlock({ m, set, el, ctx, autoFocus }) {
|
|
834
834
|
const { MediaPicker } = useKitServices();
|
|
835
835
|
const [picker, setPicker] = React.useState(false);
|
|
@@ -848,45 +848,47 @@ function FileBlock({ m, set, el, ctx, autoFocus }) {
|
|
|
848
848
|
}, "Choose file")
|
|
849
849
|
}) : null;
|
|
850
850
|
if (has) return /* @__PURE__ */ jsxs("div", {
|
|
851
|
-
className: "group/blk
|
|
851
|
+
className: "group/blk",
|
|
852
852
|
"data-rt-isolate": "",
|
|
853
|
-
children: [
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
className: "size-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
className: "
|
|
866
|
-
children:
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
853
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
854
|
+
className: "flex items-center gap-3 rounded-kit-lg border border-kit-line bg-kit-surface px-3 py-2.5",
|
|
855
|
+
children: [
|
|
856
|
+
/* @__PURE__ */ jsx("span", {
|
|
857
|
+
className: "flex size-9 shrink-0 items-center justify-center rounded-kit-md bg-kit-muted text-kit-fg-2",
|
|
858
|
+
children: /* @__PURE__ */ jsx(IconFileText, {
|
|
859
|
+
className: "size-[18px]",
|
|
860
|
+
stroke: 1.5,
|
|
861
|
+
"aria-hidden": true
|
|
862
|
+
})
|
|
863
|
+
}),
|
|
864
|
+
/* @__PURE__ */ jsxs("div", {
|
|
865
|
+
className: "min-w-0 flex-1",
|
|
866
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
867
|
+
className: "truncate text-kit-sm font-medium text-kit-fg",
|
|
868
|
+
children: m.name
|
|
869
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
870
|
+
className: "truncate text-kit-xs text-kit-fg-3",
|
|
871
|
+
children: [m.size ? `${formatBytes(m.size)} · ` : "", (m.name.includes(".") ? m.name.split(".").pop() : "file").toUpperCase()]
|
|
872
|
+
})]
|
|
873
|
+
}),
|
|
874
|
+
ro ? null : /* @__PURE__ */ jsxs(Fragment, { children: [MediaPicker ? /* @__PURE__ */ jsx(Button, {
|
|
875
|
+
size: "xs",
|
|
876
|
+
variant: "ghost",
|
|
877
|
+
onClick: () => setPicker(true),
|
|
878
|
+
children: "Replace"
|
|
879
|
+
}) : null, /* @__PURE__ */ jsx(RemoveBtn, {
|
|
880
|
+
onClick: () => ctx.remove(el),
|
|
881
|
+
label: "Remove file"
|
|
882
|
+
})] })
|
|
883
|
+
]
|
|
884
|
+
}), pickerEl]
|
|
883
885
|
});
|
|
884
886
|
return /* @__PURE__ */ jsxs("div", {
|
|
885
|
-
className: "group/blk
|
|
887
|
+
className: "group/blk",
|
|
886
888
|
"data-rt-isolate": "",
|
|
887
889
|
children: [
|
|
888
890
|
/* @__PURE__ */ jsxs("div", {
|
|
889
|
-
className: "flex items-center gap-3",
|
|
891
|
+
className: "flex items-center gap-3 rounded-kit-lg border border-dashed border-kit-line-strong bg-kit-subtle px-3 py-2.5",
|
|
890
892
|
children: [
|
|
891
893
|
/* @__PURE__ */ jsx("span", {
|
|
892
894
|
className: "flex size-9 shrink-0 items-center justify-center rounded-kit-md border border-kit-line bg-kit-control-bg text-kit-fg-3",
|
|
@@ -908,7 +910,7 @@ function FileBlock({ m, set, el, ctx, autoFocus }) {
|
|
|
908
910
|
}),
|
|
909
911
|
ro ? null : /* @__PURE__ */ jsxs(Fragment, { children: [MediaPicker ? /* @__PURE__ */ jsx(Button, {
|
|
910
912
|
size: "sm",
|
|
911
|
-
leftIcon: /* @__PURE__ */ jsx(
|
|
913
|
+
leftIcon: /* @__PURE__ */ jsx(IconFileUpload, { stroke: 1.5 }),
|
|
912
914
|
onClick: () => setPicker(true),
|
|
913
915
|
children: "Choose file"
|
|
914
916
|
}) : null, /* @__PURE__ */ jsx(RemoveBtn, {
|
|
@@ -982,10 +984,10 @@ function ComponentBlock({ m, el, ctx, set }) {
|
|
|
982
984
|
set
|
|
983
985
|
});
|
|
984
986
|
const count = Object.keys(overrides).length;
|
|
985
|
-
const name = m.name || "
|
|
987
|
+
const name = m.name || "Block";
|
|
986
988
|
return /* @__PURE__ */ jsxs("div", {
|
|
987
989
|
role: "group",
|
|
988
|
-
"aria-label": `${name}, ${m.detached ? "separate copy" : "linked
|
|
990
|
+
"aria-label": `${name}, ${m.detached ? "separate copy" : "linked block"}`,
|
|
989
991
|
className: "group/blk flex items-center gap-3 rounded-kit-lg border border-kit-line bg-kit-surface px-3 py-2.5",
|
|
990
992
|
"data-rt-isolate": "",
|
|
991
993
|
children: [
|
|
@@ -1004,8 +1006,8 @@ function ComponentBlock({ m, el, ctx, set }) {
|
|
|
1004
1006
|
children: name
|
|
1005
1007
|
}), /* @__PURE__ */ jsx("div", {
|
|
1006
1008
|
className: "truncate text-kit-xs text-kit-fg-3",
|
|
1007
|
-
children: m.detached ? "Separate copy · edits to the
|
|
1008
|
-
m.ref ? "Linked
|
|
1009
|
+
children: m.detached ? "Separate copy · edits to the block don't reach it" : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1010
|
+
m.ref ? "Linked block" : "Block with no source",
|
|
1009
1011
|
count ? ` · ${count} ${count === 1 ? "override" : "overrides"}` : "",
|
|
1010
1012
|
" · edits to the component show here too"
|
|
1011
1013
|
] })
|
|
@@ -1027,24 +1029,28 @@ function ComponentBlock({ m, el, ctx, set }) {
|
|
|
1027
1029
|
});
|
|
1028
1030
|
}
|
|
1029
1031
|
/**
|
|
1030
|
-
* What production's rich-text table keeps:
|
|
1031
|
-
*
|
|
1032
|
+
* What production's rich-text table keeps: typed columns (V2's Text, Number, Price, Yes / No, Link and Rating with their unit,
|
|
1033
|
+
* currency, decimals, alignment, yes / no words, scale and description; a row's and a cell's type and a cell's value: a
|
|
1034
|
+
* first-row cell's `column`, a row's / cell's `type`, a cell's `value`), the header row and row headers, an optional caption,
|
|
1035
|
+
* the note under the table, row groups, the totals row and the row and column highlights (`caption`, `notes`,
|
|
1036
|
+
* `rowGroups`, a row's `footer` / `highlight`, a first-row cell's `highlight` / `sortable`, the table's `filterable`).
|
|
1037
|
+
* the table's `jsonLd` and `design` (On phones, Keep column names in view)). Footnotes are stored as the table's `footnotes` and a cell's `note` (V2's default, allowFootnotes on). No setting is
|
|
1038
|
+
* pinned: V2's island passes no options, so its editor offers GENERAL_TABLE (sort, search and the JSON-LD choice on,
|
|
1039
|
+
* everything else at its default), and so does this.
|
|
1032
1040
|
*/
|
|
1033
1041
|
var STORED_TABLE = {
|
|
1034
|
-
columnTypes: ["text", "link"],
|
|
1035
1042
|
requireCaption: false,
|
|
1036
1043
|
allowGroups: true,
|
|
1037
|
-
allowFootnotes: false,
|
|
1038
1044
|
allowNote: true,
|
|
1039
1045
|
settings: {
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1046
|
+
sort: true,
|
|
1047
|
+
search: true
|
|
1048
|
+
},
|
|
1049
|
+
jsonLd: [
|
|
1050
|
+
"ItemList",
|
|
1051
|
+
"Dataset",
|
|
1052
|
+
"Offers"
|
|
1053
|
+
]
|
|
1048
1054
|
};
|
|
1049
1055
|
function TableBlock({ m, set, el, ctx }) {
|
|
1050
1056
|
return /* @__PURE__ */ jsx("div", {
|
|
@@ -1101,132 +1107,52 @@ var PULL_QUOTE_SCHEMA = {
|
|
|
1101
1107
|
}
|
|
1102
1108
|
]
|
|
1103
1109
|
};
|
|
1104
|
-
var openArticle = null;
|
|
1105
|
-
var articleSubs = /* @__PURE__ */ new Set();
|
|
1106
|
-
var setOpenArticle = (next) => {
|
|
1107
|
-
openArticle = next;
|
|
1108
|
-
articleSubs.forEach((f) => f());
|
|
1109
|
-
};
|
|
1110
|
-
function useOpenArticle() {
|
|
1111
|
-
return React.useSyncExternalStore((cb) => (articleSubs.add(cb), () => void articleSubs.delete(cb)), () => openArticle, () => openArticle);
|
|
1112
|
-
}
|
|
1113
|
-
var controlOf = (el) => Array.from(el.querySelectorAll("textarea, input:not([type=hidden]), [contenteditable=true], [role=combobox]")).find((n) => n.getClientRects().length) ?? Array.from(el.querySelectorAll(":scope > :not(:first-child) button")).find((n) => n.getClientRects().length);
|
|
1114
|
-
function focusField(root, key) {
|
|
1115
|
-
if (!root) return;
|
|
1116
|
-
const rows = Array.from(root.querySelectorAll("[data-field-key]"));
|
|
1117
|
-
const row = key && rows.find((r) => r.getAttribute("data-field-key") === key) || rows[0];
|
|
1118
|
-
if (!row) return;
|
|
1119
|
-
row.scrollIntoView({ block: "nearest" });
|
|
1120
|
-
controlOf(row)?.focus({ preventScroll: true });
|
|
1121
|
-
}
|
|
1122
1110
|
function PullQuoteBlock({ m, set, el, ctx, autoFocus }) {
|
|
1123
1111
|
const label = PULL_QUOTE_LABEL;
|
|
1124
|
-
const uid = React.useId();
|
|
1125
1112
|
const card = React.useRef(null);
|
|
1126
1113
|
const [cardEl, setCardEl] = React.useState(null);
|
|
1127
|
-
const
|
|
1128
|
-
const editing
|
|
1114
|
+
const ro = !!ctx.readOnly;
|
|
1115
|
+
const { open, editing, openPanel, close } = useArticleOpen({
|
|
1116
|
+
ro,
|
|
1117
|
+
autoFocus
|
|
1118
|
+
});
|
|
1129
1119
|
const cardRef = React.useCallback((n) => {
|
|
1130
1120
|
card.current = n;
|
|
1131
1121
|
if (n) setCardEl(n);
|
|
1132
1122
|
}, []);
|
|
1133
|
-
const ro = !!ctx.readOnly;
|
|
1134
1123
|
const modelRef = React.useRef(m);
|
|
1135
1124
|
modelRef.current = m;
|
|
1136
|
-
const openPanel = React.useCallback((k) => {
|
|
1137
|
-
if (!ro) setOpenArticle({
|
|
1138
|
-
id: uid,
|
|
1139
|
-
focusKey: k ?? null,
|
|
1140
|
-
nonce: (openArticle?.nonce ?? 0) + 1
|
|
1141
|
-
});
|
|
1142
|
-
}, [uid, ro]);
|
|
1143
|
-
const close = React.useCallback(() => {
|
|
1144
|
-
if (openArticle?.id === uid) setOpenArticle(null);
|
|
1145
|
-
}, [uid]);
|
|
1146
1125
|
const focusCard = React.useCallback(() => requestAnimationFrame(() => card.current?.focus({ preventScroll: true })), []);
|
|
1147
|
-
React.useEffect(() => () => {
|
|
1148
|
-
if (openArticle?.id === uid) setOpenArticle(null);
|
|
1149
|
-
}, [uid]);
|
|
1150
|
-
React.useEffect(() => {
|
|
1151
|
-
if (autoFocus && !ro) openPanel();
|
|
1152
|
-
}, []);
|
|
1153
1126
|
/** a form edit joins the body's one undo history (D54); typing coalesces per field */
|
|
1154
1127
|
const commit = (next) => {
|
|
1155
1128
|
const prev = modelRef.current;
|
|
1156
1129
|
const field = Object.keys(next).find((k) => next[k] !== prev[k]) ?? "";
|
|
1157
1130
|
set(() => next, `Edit ${label.toLowerCase()} ${field}`);
|
|
1158
1131
|
};
|
|
1159
|
-
|
|
1160
|
-
if (e.defaultPrevented || e.target !== card.current) return;
|
|
1161
|
-
const mod = e.metaKey || e.ctrlKey;
|
|
1162
|
-
const k = e.key.toLowerCase();
|
|
1163
|
-
if (mod && k === "z") {
|
|
1164
|
-
e.preventDefault();
|
|
1165
|
-
e.stopPropagation();
|
|
1166
|
-
if (e.shiftKey) ctx.redo?.();
|
|
1167
|
-
else ctx.undo?.();
|
|
1168
|
-
return;
|
|
1169
|
-
}
|
|
1170
|
-
if (e.key === "Enter" || e.key === " ") {
|
|
1171
|
-
e.preventDefault();
|
|
1172
|
-
openPanel();
|
|
1173
|
-
return;
|
|
1174
|
-
}
|
|
1175
|
-
if (e.key === "Escape") {
|
|
1176
|
-
e.preventDefault();
|
|
1177
|
-
e.stopPropagation();
|
|
1178
|
-
if (editing) close();
|
|
1179
|
-
else ctx.exit(el);
|
|
1180
|
-
return;
|
|
1181
|
-
}
|
|
1182
|
-
if (ro) return;
|
|
1183
|
-
if (mod && k === "d" && ctx.duplicate) {
|
|
1184
|
-
e.preventDefault();
|
|
1185
|
-
e.stopPropagation();
|
|
1186
|
-
ctx.duplicate(el);
|
|
1187
|
-
} else if (e.altKey && (e.key === "ArrowUp" || e.key === "ArrowDown") && ctx.move) {
|
|
1188
|
-
e.preventDefault();
|
|
1189
|
-
ctx.move(el, e.key === "ArrowUp" ? -1 : 1);
|
|
1190
|
-
focusCard();
|
|
1191
|
-
} else if (e.key === "Backspace" || e.key === "Delete") {
|
|
1192
|
-
e.preventDefault();
|
|
1193
|
-
ctx.remove(el);
|
|
1194
|
-
}
|
|
1195
|
-
};
|
|
1196
|
-
const actions = ro ? null : /* @__PURE__ */ jsxs("div", {
|
|
1197
|
-
className: cn("absolute -top-3.5 right-2 z-[2] flex items-center gap-0.5 rounded-kit-md border border-kit-line bg-kit-surface-raised p-0.5 opacity-0 shadow-kit-sm transition-opacity", "group-hover/art:opacity-100 group-focus-within/art:opacity-100 pointer-coarse:opacity-100", editing && "opacity-100"),
|
|
1198
|
-
children: [/* @__PURE__ */ jsx(IconButton, {
|
|
1199
|
-
size: "xs",
|
|
1200
|
-
label: `Edit ${label.toLowerCase()}`,
|
|
1201
|
-
onClick: () => editing ? close() : openPanel(),
|
|
1202
|
-
children: /* @__PURE__ */ jsx(IconSettings, { stroke: 1.5 })
|
|
1203
|
-
}), /* @__PURE__ */ jsx(IconButton, {
|
|
1204
|
-
size: "xs",
|
|
1205
|
-
label: `Remove ${label.toLowerCase()}`,
|
|
1206
|
-
onClick: () => ctx.remove(el),
|
|
1207
|
-
className: "hover:text-kit-danger-fg",
|
|
1208
|
-
children: /* @__PURE__ */ jsx(IconTrash, { stroke: 1.5 })
|
|
1209
|
-
})]
|
|
1210
|
-
});
|
|
1211
|
-
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs("div", {
|
|
1132
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs(ArticleCard, {
|
|
1212
1133
|
ref: cardRef,
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
},
|
|
1228
|
-
|
|
1229
|
-
|
|
1134
|
+
label,
|
|
1135
|
+
kind: "pullquote",
|
|
1136
|
+
ro,
|
|
1137
|
+
editing,
|
|
1138
|
+
onOpen: openPanel,
|
|
1139
|
+
onKeyDown: articleCardKeyDown({
|
|
1140
|
+
card,
|
|
1141
|
+
ctx,
|
|
1142
|
+
el,
|
|
1143
|
+
ro,
|
|
1144
|
+
editing,
|
|
1145
|
+
onOpen: openPanel,
|
|
1146
|
+
onClose: close,
|
|
1147
|
+
focusCard
|
|
1148
|
+
}),
|
|
1149
|
+
children: [/* @__PURE__ */ jsx(PullQuotePreview, { m }), /* @__PURE__ */ jsx(ArticleActions, {
|
|
1150
|
+
label,
|
|
1151
|
+
ctx,
|
|
1152
|
+
el,
|
|
1153
|
+
editing,
|
|
1154
|
+
onEdit: () => editing ? close() : openPanel()
|
|
1155
|
+
})]
|
|
1230
1156
|
}), editing ? /* @__PURE__ */ jsx(ArticlePanel, {
|
|
1231
1157
|
label,
|
|
1232
1158
|
anchor: cardEl,
|
|
@@ -1236,22 +1162,12 @@ function PullQuoteBlock({ m, set, el, ctx, autoFocus }) {
|
|
|
1236
1162
|
focusBack: focusCard,
|
|
1237
1163
|
ctx,
|
|
1238
1164
|
el,
|
|
1239
|
-
children: /* @__PURE__ */
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
onChange: (v) => commit(v),
|
|
1246
|
-
variant: "panel",
|
|
1247
|
-
scroll: false,
|
|
1248
|
-
readOnly: ro,
|
|
1249
|
-
rootLabel: label,
|
|
1250
|
-
env: {
|
|
1251
|
-
docId: `article:${PULL_QUOTE_SCHEMA.name}`,
|
|
1252
|
-
docTitle: label
|
|
1253
|
-
}
|
|
1254
|
-
}), /* @__PURE__ */ jsx("style", { children: `[data-article-form] [data-kit-form] section:first-of-type { border-top-width: 0; margin-top: 0; padding-top: 0; }` })]
|
|
1165
|
+
children: /* @__PURE__ */ jsx(ArticleForm, {
|
|
1166
|
+
schema: PULL_QUOTE_SCHEMA,
|
|
1167
|
+
label,
|
|
1168
|
+
value: m,
|
|
1169
|
+
onChange: (v) => commit(v),
|
|
1170
|
+
ro
|
|
1255
1171
|
})
|
|
1256
1172
|
}) : null] });
|
|
1257
1173
|
}
|
|
@@ -1274,47 +1190,19 @@ function TakeawaysBlock({ m, set, el, ctx, autoFocus }) {
|
|
|
1274
1190
|
});
|
|
1275
1191
|
const setPoint = (i, v) => set({ points: m.points.map((p, j) => j === i ? v : p) }, `Edit key takeaways point ${i + 1}`);
|
|
1276
1192
|
/** V2 ArticleBlock onKeyDown, on the block itself (its lines handle their own keys) */
|
|
1277
|
-
const onKeyDown = (
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
else ctx.undo?.();
|
|
1286
|
-
return;
|
|
1287
|
-
}
|
|
1288
|
-
if (e.key === "Escape") {
|
|
1289
|
-
e.preventDefault();
|
|
1290
|
-
e.stopPropagation();
|
|
1291
|
-
ctx.exit(el);
|
|
1292
|
-
return;
|
|
1293
|
-
}
|
|
1294
|
-
if (ro) return;
|
|
1295
|
-
if (mod && k === "d" && ctx.duplicate) {
|
|
1296
|
-
e.preventDefault();
|
|
1297
|
-
e.stopPropagation();
|
|
1298
|
-
ctx.duplicate(el);
|
|
1299
|
-
} else if (e.altKey && (e.key === "ArrowUp" || e.key === "ArrowDown") && ctx.move) {
|
|
1300
|
-
e.preventDefault();
|
|
1301
|
-
ctx.move(el, e.key === "ArrowUp" ? -1 : 1);
|
|
1302
|
-
focusCard();
|
|
1303
|
-
} else if (e.key === "Backspace" || e.key === "Delete") {
|
|
1304
|
-
e.preventDefault();
|
|
1305
|
-
ctx.remove(el);
|
|
1306
|
-
}
|
|
1307
|
-
};
|
|
1308
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
1193
|
+
const onKeyDown = articleCardKeyDown({
|
|
1194
|
+
card,
|
|
1195
|
+
ctx,
|
|
1196
|
+
el,
|
|
1197
|
+
ro,
|
|
1198
|
+
focusCard
|
|
1199
|
+
});
|
|
1200
|
+
return /* @__PURE__ */ jsxs(ArticleCard, {
|
|
1309
1201
|
ref: card,
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
"aria-roledescription": "block",
|
|
1314
|
-
"data-rt-isolate": "",
|
|
1315
|
-
"data-article-block": "takeaways",
|
|
1202
|
+
label,
|
|
1203
|
+
kind: "takeaways",
|
|
1204
|
+
ro,
|
|
1316
1205
|
onKeyDown,
|
|
1317
|
-
className: "group/art relative rounded-kit-lg outline-none transition-shadow duration-150 focus-visible:shadow-[0_0_0_1px_var(--kit-line-strong)]",
|
|
1318
1206
|
children: [/* @__PURE__ */ jsxs("aside", {
|
|
1319
1207
|
className: "rounded-kit-lg border border-kit-line bg-kit-subtle px-4 py-3",
|
|
1320
1208
|
"aria-label": m.title || label,
|
|
@@ -1370,126 +1258,13 @@ function TakeawaysBlock({ m, set, el, ctx, autoFocus }) {
|
|
|
1370
1258
|
})]
|
|
1371
1259
|
}, i))
|
|
1372
1260
|
})]
|
|
1373
|
-
}),
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
label: `Remove ${label.toLowerCase()}`,
|
|
1378
|
-
onClick: () => ctx.remove(el),
|
|
1379
|
-
className: "hover:text-kit-danger-fg",
|
|
1380
|
-
children: /* @__PURE__ */ jsx(IconTrash, { stroke: 1.5 })
|
|
1381
|
-
})
|
|
1261
|
+
}), /* @__PURE__ */ jsx(ArticleActions, {
|
|
1262
|
+
label,
|
|
1263
|
+
ctx,
|
|
1264
|
+
el
|
|
1382
1265
|
})]
|
|
1383
1266
|
});
|
|
1384
1267
|
}
|
|
1385
|
-
function ArticlePanel({ label, anchor, nonce, focusKey, onClose, focusBack, ctx, el, children }) {
|
|
1386
|
-
const panel = React.useRef(null);
|
|
1387
|
-
const titleId = React.useId();
|
|
1388
|
-
const container = anchor?.closest("[data-expanded-editor]") ?? null;
|
|
1389
|
-
React.useEffect(() => {
|
|
1390
|
-
const timers = [];
|
|
1391
|
-
let landed = false;
|
|
1392
|
-
for (const ms of [
|
|
1393
|
-
40,
|
|
1394
|
-
90,
|
|
1395
|
-
160,
|
|
1396
|
-
260,
|
|
1397
|
-
420,
|
|
1398
|
-
640
|
|
1399
|
-
]) timers.push(window.setTimeout(() => {
|
|
1400
|
-
const root = panel.current?.el() ?? null;
|
|
1401
|
-
if (!root?.querySelector("[data-field-key]")) return;
|
|
1402
|
-
const a = document.activeElement;
|
|
1403
|
-
const lost = !a || a === document.body || a.hasAttribute("data-expanded-editor") || a.hasAttribute("data-article-block");
|
|
1404
|
-
if (root.contains(a)) return void (landed = true);
|
|
1405
|
-
if (!landed || lost) focusField(root, focusKey);
|
|
1406
|
-
if (root.contains(document.activeElement)) landed = true;
|
|
1407
|
-
}, ms));
|
|
1408
|
-
return () => timers.forEach((t) => window.clearTimeout(t));
|
|
1409
|
-
}, [nonce]);
|
|
1410
|
-
React.useEffect(() => panel.current?.announce(`${label} properties.`), [label]);
|
|
1411
|
-
return /* @__PURE__ */ jsx(FloatingPanel, {
|
|
1412
|
-
ref: panel,
|
|
1413
|
-
id: "article-properties",
|
|
1414
|
-
labelledBy: titleId,
|
|
1415
|
-
anchor,
|
|
1416
|
-
container,
|
|
1417
|
-
header: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1418
|
-
/* @__PURE__ */ jsx("span", {
|
|
1419
|
-
id: titleId,
|
|
1420
|
-
className: "min-w-0 flex-1 truncate text-kit-sm font-medium text-kit-fg",
|
|
1421
|
-
children: label
|
|
1422
|
-
}),
|
|
1423
|
-
/* @__PURE__ */ jsxs(Menu, { children: [/* @__PURE__ */ jsx(MenuTrigger, { render: /* @__PURE__ */ jsx(IconButton, {
|
|
1424
|
-
size: "sm",
|
|
1425
|
-
label: `${label} actions`,
|
|
1426
|
-
children: /* @__PURE__ */ jsx(IconDots, { stroke: 1.5 })
|
|
1427
|
-
}) }), /* @__PURE__ */ jsxs(MenuContent, {
|
|
1428
|
-
align: "end",
|
|
1429
|
-
className: "w-52",
|
|
1430
|
-
children: [
|
|
1431
|
-
ctx.readOnly || !ctx.duplicate ? null : /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(MenuItem, {
|
|
1432
|
-
icon: /* @__PURE__ */ jsx(IconCopy, { stroke: 1.5 }),
|
|
1433
|
-
onClick: () => ctx.duplicate?.(el),
|
|
1434
|
-
children: "Duplicate"
|
|
1435
|
-
}), /* @__PURE__ */ jsx(MenuSeparator, {})] }),
|
|
1436
|
-
/* @__PURE__ */ jsx(MenuItem, {
|
|
1437
|
-
icon: /* @__PURE__ */ jsx(IconArrowsMove, { stroke: 1.5 }),
|
|
1438
|
-
onClick: () => panel.current?.keyboard("move"),
|
|
1439
|
-
children: "Move panel"
|
|
1440
|
-
}),
|
|
1441
|
-
/* @__PURE__ */ jsx(MenuItem, {
|
|
1442
|
-
icon: /* @__PURE__ */ jsx(IconDimensions, { stroke: 1.5 }),
|
|
1443
|
-
onClick: () => panel.current?.keyboard("resize"),
|
|
1444
|
-
children: "Resize panel"
|
|
1445
|
-
}),
|
|
1446
|
-
/* @__PURE__ */ jsx(MenuItem, {
|
|
1447
|
-
icon: /* @__PURE__ */ jsx(IconLayoutSidebar, { stroke: 1.5 }),
|
|
1448
|
-
onClick: () => panel.current?.dock("left"),
|
|
1449
|
-
children: "Dock left"
|
|
1450
|
-
}),
|
|
1451
|
-
/* @__PURE__ */ jsx(MenuItem, {
|
|
1452
|
-
icon: /* @__PURE__ */ jsx(IconLayoutSidebarRight, { stroke: 1.5 }),
|
|
1453
|
-
onClick: () => panel.current?.dock("right"),
|
|
1454
|
-
children: "Dock right"
|
|
1455
|
-
}),
|
|
1456
|
-
ctx.readOnly ? null : /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(MenuSeparator, {}), /* @__PURE__ */ jsx(MenuItem, {
|
|
1457
|
-
danger: true,
|
|
1458
|
-
icon: /* @__PURE__ */ jsx(IconTrash, { stroke: 1.5 }),
|
|
1459
|
-
onClick: () => ctx.remove(el),
|
|
1460
|
-
children: "Remove"
|
|
1461
|
-
})] })
|
|
1462
|
-
]
|
|
1463
|
-
})] }),
|
|
1464
|
-
/* @__PURE__ */ jsx(IconButton, {
|
|
1465
|
-
size: "sm",
|
|
1466
|
-
label: "Close properties",
|
|
1467
|
-
tooltip: "Close",
|
|
1468
|
-
onClick: () => (onClose(), focusBack()),
|
|
1469
|
-
children: /* @__PURE__ */ jsx(IconX, { stroke: 1.5 })
|
|
1470
|
-
})
|
|
1471
|
-
] }),
|
|
1472
|
-
onClose,
|
|
1473
|
-
focusBack,
|
|
1474
|
-
onPanelKeyDown: (e) => {
|
|
1475
|
-
if ((e.metaKey || e.ctrlKey) && !e.altKey && e.key.toLowerCase() === "z" && !e.defaultPrevented) {
|
|
1476
|
-
e.preventDefault();
|
|
1477
|
-
if (e.shiftKey) ctx.redo?.();
|
|
1478
|
-
else ctx.undo?.();
|
|
1479
|
-
}
|
|
1480
|
-
},
|
|
1481
|
-
sheetFooter: /* @__PURE__ */ jsx(Button, {
|
|
1482
|
-
size: "sm",
|
|
1483
|
-
variant: "primary",
|
|
1484
|
-
onClick: () => (onClose(), focusBack()),
|
|
1485
|
-
children: "Done"
|
|
1486
|
-
}),
|
|
1487
|
-
children: /* @__PURE__ */ jsx("div", {
|
|
1488
|
-
className: "pb-3 pt-1",
|
|
1489
|
-
children
|
|
1490
|
-
})
|
|
1491
|
-
});
|
|
1492
|
-
}
|
|
1493
1268
|
function PullQuotePreview({ m }) {
|
|
1494
1269
|
return /* @__PURE__ */ jsxs("figure", {
|
|
1495
1270
|
className: "m-0 py-2 pl-5 pr-10",
|