@bettercms-ai/kit 1.0.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +90 -31
- package/dist/adapters/lossy.js +414 -0
- package/dist/adapters/lossy.js.map +1 -0
- package/{adapters → dist/adapters}/prod-types.d.ts +82 -4
- package/{adapters → dist/adapters}/prod-types.js +71 -3
- package/dist/adapters/prod-types.js.map +1 -0
- package/{adapters → dist/adapters}/schema.d.ts +40 -1
- package/{adapters → dist/adapters}/schema.js +996 -179
- 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} +92 -2
- package/{context.js → dist/context.js} +5 -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/{controls → dist/controls}/form-picker-register.js +1 -1
- 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 +6 -6
- 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 +64 -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 +35 -4
- package/{controls → dist/controls}/media.js +491 -171
- 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/blocks.d.ts +49 -0
- package/{controls → dist/controls}/rich-text/blocks.js +471 -144
- package/dist/controls/rich-text/blocks.js.map +1 -0
- package/{controls → dist/controls}/rich-text/catalog.d.ts +4 -1
- package/{controls → dist/controls}/rich-text/catalog.js +75 -65
- package/dist/controls/rich-text/catalog.js.map +1 -0
- package/{controls → dist/controls}/rich-text/codec.d.ts +9 -1
- package/{controls → dist/controls}/rich-text/codec.js +3 -1
- package/dist/controls/rich-text/codec.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 +52 -9
- package/{controls → dist/controls}/rich-text/dom.js +379 -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 +148 -48
- package/dist/controls/rich-text/editor.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/{controls → dist/controls}/rich-text/index.js +1 -1
- package/dist/controls/rich-text/index.js.map +1 -0
- 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/{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/{controls → dist/controls}/slot-register.js +1 -1
- 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 +63 -0
- package/dist/core/core.js +171 -0
- package/dist/core/core.js.map +1 -0
- package/dist/core/facets.d.ts +347 -0
- package/dist/core/facets.js +334 -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 +47 -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 +1510 -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 +29 -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 +30 -0
- package/dist/ui/autocomplete.js +139 -0
- package/dist/ui/autocomplete.js.map +1 -0
- package/{ui → dist/ui}/button.d.ts +3 -3
- package/{ui → dist/ui}/button.js +6 -7
- 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 +77 -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.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.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-register.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/link-form.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-register.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
|
@@ -5,21 +5,24 @@ import { shortcutHintsOn } from "../../ui/shortcut-hint.js";
|
|
|
5
5
|
import { Menu, MenuContent, MenuItem, MenuSeparator, MenuSub, MenuSubContent, MenuSubTrigger, MenuTrigger, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Tooltip } from "../../ui/overlay.js";
|
|
6
6
|
import { Textarea } from "../../ui/input.js";
|
|
7
7
|
import { ExpandedEditorModal } from "../../ui/expanded-editor-modal.js";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
8
|
+
import { COMPONENT_INSERT_TOAST } from "../component-services.js";
|
|
9
|
+
import { eventKey } from "../../lib/key-event.js";
|
|
10
|
+
import { closestBlock, createIsland, defaultModel, editingHost, esc, hydrate, isEmptyHtml, placeCaret, rangeRect, rid, sanitize, serialize, textBeforeCaret, topBlock } from "./dom.js";
|
|
10
11
|
import { LinkForm } from "./link-form.js";
|
|
11
|
-
import { Island } from "./blocks.js";
|
|
12
12
|
import { CatalogComponentsProvider, InsertMenuContent, SlashMenuPanel, blockAllowed, catalogKey, noteRecent, useCatalog } from "./catalog.js";
|
|
13
|
+
import { openComponentPanel } from "./component-panel.js";
|
|
14
|
+
import { Island } from "./blocks.js";
|
|
15
|
+
import { ALL_FEATURES } from "./codec.js";
|
|
13
16
|
import { htmlToMarkdown, looksLikeMarkdown, markdownToHtml } from "./markdown.js";
|
|
14
17
|
import { duplicateBlock, ensureLineAfter, insertBasic, insertIsland, liveInlineCode, liveMarkdown, moveBlock, restrictHtml, turnInto } from "./ops.js";
|
|
15
18
|
import { EMPTY_FMT, FormatToolbar, MARK_FEATURE, stylesFor } from "./toolbar.js";
|
|
16
19
|
import { SelectionBubble } from "./floating.js";
|
|
17
20
|
import * as React from "react";
|
|
18
|
-
import { IconArrowBarToDown, IconArrowBarToUp, IconCopy, IconGripVertical, IconPlus, IconTransform, IconTrash } from "@tabler/icons-react";
|
|
19
21
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
20
|
-
import {
|
|
22
|
+
import { IconArrowBarToDown, IconArrowBarToUp, IconCopy, IconGripVertical, IconPlus, IconTransform, IconTrash } from "@tabler/icons-react";
|
|
23
|
+
import { AnimatePresence, motion, useReducedMotion } from "framer-motion";
|
|
21
24
|
import { createPortal, flushSync } from "react-dom";
|
|
22
|
-
//#region src/
|
|
25
|
+
//#region src/controls/rich-text/editor.tsx
|
|
23
26
|
/**
|
|
24
27
|
* RICH TEXT — the boxed rich-text editor (V2 HEAD controls/rich-text-editor.tsx, Figma 60995-5431, CPO D49 / D54 / D55).
|
|
25
28
|
*
|
|
@@ -38,9 +41,9 @@ import { createPortal, flushSync } from "react-dom";
|
|
|
38
41
|
* Everything the editor offers is limited to what the field accepts (`features`): a toolbar button, a slash command, a
|
|
39
42
|
* Markdown shortcut or pasted markup the field cannot hold is not offered, or is turned into what it can hold and said so.
|
|
40
43
|
*/
|
|
41
|
-
var RT_PROSE = "text-kit-base leading-[1.6] text-kit-fg [&>*+*]:mt-3 [&_h1]:text-[28px] [&_h1]:font-semibold [&_h1]:leading-9 [&_h1]:tracking-[-0.01em] [&_h2]:text-[22px] [&_h2]:font-semibold [&_h2]:leading-8 [&_h2]:tracking-[-0.01em] [&_h3]:text-kit-lg [&_h3]:font-semibold [&_h4]:text-kit-md [&_h4]:font-semibold [&_h5]:text-kit-base [&_h5]:font-semibold [&_h6]:text-kit-sm [&_h6]:font-semibold [&_h6]:uppercase [&_h6]:tracking-wide [&_h6]:text-kit-fg-2 [&>h1]:mt-6 [&>h2]:mt-6 [&>h3]:mt-5 [&>*:first-child]:mt-0 [&_ul:not([data-rt-isolate]_*)]:list-disc [&_ul:not([data-rt-isolate]_*)]:pl-5 [&_ol:not([data-rt-isolate]_*)]:list-decimal [&_ol:not([data-rt-isolate]_*)]:pl-5 [&_li:not([data-rt-isolate]_*)]:pl-1 [&_li+li:not([data-rt-isolate]_*)]:mt-1 [&_li:not([data-rt-isolate]_*)]:marker:text-kit-fg-3 [&_blockquote]:border-l-2 [&_blockquote]:border-kit-line-strong [&_blockquote]:pl-4 [&_blockquote]:text-kit-fg-2 [&_blockquote]:italic [&_a]:text-kit-accent-fg [&_a]:underline [&_a]:decoration-kit-accent-line [&_a]:underline-offset-2 [&_abbr]:cursor-help [&_abbr]:underline [&_abbr]:decoration-dotted [&_abbr]:underline-offset-2 [&_sup]:text-[0.7em] [&_sup]:leading-none [&_code]:rounded-kit-md [&_code]:bg-kit-muted [&_code]:px-1 [&_code]:py-px [&_code]:font-kit-mono [&_code]:text-[0.9em] [&_pre]:overflow-x-auto [&_pre]:whitespace-pre-wrap [&_pre]:rounded-kit-lg [&_pre]:border [&_pre]:border-kit-line [&_pre]:bg-kit-code [&_pre]:p-3 [&_pre]:font-kit-mono [&_pre]:text-kit-sm [&_pre_code]:rounded-none [&_pre_code]:bg-transparent [&_pre_code]:p-0 [&_pre_code]:text-[1em] [&_hr]:my-6 [&_hr]:border-kit-line [&_table]:w-full [&_table]:border-collapse [&_table]:text-kit-sm [&_td]:border [&_td]:border-kit-line [&_td]:px-2.5 [&_td]:py-1.5 [&_td]:align-top [&_th]:border [&_th]:border-kit-line [&_th]:bg-kit-subtle [&_th]:px-2.5 [&_th]:py-1.5 [&_th]:text-left [&_th]:align-top [&_th]:font-medium";
|
|
44
|
+
var RT_PROSE = "text-kit-base leading-[1.6] text-kit-fg [&>*+*]:mt-3 [&_span[class]:not([data-rt-isolate]_*)]:!text-inherit [&_span[class]:not([data-rt-isolate]_*)]:![-webkit-text-fill-color:currentColor] [&_span[class]:not([data-rt-isolate]_*)]:!bg-none [&_span[class]:not([data-rt-isolate]_*)]:!opacity-100 [&_span[class]:not([data-rt-isolate]_*)]:!visible [&_h1:not([data-rt-isolate]_*)]:text-[28px] [&_h1:not([data-rt-isolate]_*)]:font-semibold [&_h1:not([data-rt-isolate]_*)]:leading-9 [&_h1:not([data-rt-isolate]_*)]:tracking-[-0.01em] [&_h2:not([data-rt-isolate]_*)]:text-[22px] [&_h2:not([data-rt-isolate]_*)]:font-semibold [&_h2:not([data-rt-isolate]_*)]:leading-8 [&_h2:not([data-rt-isolate]_*)]:tracking-[-0.01em] [&_h3:not([data-rt-isolate]_*)]:text-kit-lg [&_h3:not([data-rt-isolate]_*)]:font-semibold [&_h4:not([data-rt-isolate]_*)]:text-kit-md [&_h4:not([data-rt-isolate]_*)]:font-semibold [&_h5:not([data-rt-isolate]_*)]:text-kit-base [&_h5:not([data-rt-isolate]_*)]:font-semibold [&_h6:not([data-rt-isolate]_*)]:text-kit-sm [&_h6:not([data-rt-isolate]_*)]:font-semibold [&_h6:not([data-rt-isolate]_*)]:uppercase [&_h6:not([data-rt-isolate]_*)]:tracking-wide [&_h6:not([data-rt-isolate]_*)]:text-kit-fg-2 [&>h1]:mt-6 [&>h2]:mt-6 [&>h3]:mt-5 [&>*:first-child]:mt-0 [&_ul:not([data-rt-isolate]_*)]:list-disc [&_ul:not([data-rt-isolate]_*)]:pl-5 [&_ol:not([data-rt-isolate]_*)]:list-decimal [&_ol:not([data-rt-isolate]_*)]:pl-5 [&_li:not([data-rt-isolate]_*)]:pl-1 [&_li+li:not([data-rt-isolate]_*)]:mt-1 [&_li:not([data-rt-isolate]_*)]:marker:text-kit-fg-3 [&_ul[data-task]:not([data-rt-isolate]_*)]:list-none [&_ul[data-task]:not([data-rt-isolate]_*)]:pl-0 [&_ul[data-task]>li:not([data-rt-isolate]_*)]:relative [&_ul[data-task]>li:not([data-rt-isolate]_*)]:pl-7 [&_ul[data-task]>li:not([data-rt-isolate]_*)]:before:absolute [&_ul[data-task]>li:not([data-rt-isolate]_*)]:before:left-0 [&_ul[data-task]>li:not([data-rt-isolate]_*)]:before:top-[0.2em] [&_ul[data-task]>li:not([data-rt-isolate]_*)]:before:flex [&_ul[data-task]>li:not([data-rt-isolate]_*)]:before:size-4 [&_ul[data-task]>li:not([data-rt-isolate]_*)]:before:items-center [&_ul[data-task]>li:not([data-rt-isolate]_*)]:before:justify-center [&_ul[data-task]>li:not([data-rt-isolate]_*)]:before:rounded-kit-md [&_ul[data-task]>li:not([data-rt-isolate]_*)]:before:border [&_ul[data-task]>li:not([data-rt-isolate]_*)]:before:border-kit-line-strong [&_ul[data-task]>li:not([data-rt-isolate]_*)]:before:bg-kit-surface [&_ul[data-task]>li:not([data-rt-isolate]_*)]:before:text-[11px] [&_ul[data-task]>li:not([data-rt-isolate]_*)]:before:font-semibold [&_ul[data-task]>li:not([data-rt-isolate]_*)]:before:leading-none [&_ul[data-task]>li:not([data-rt-isolate]_*)]:before:content-[''] [&_ul[data-task]>li[data-checked=true]:not([data-rt-isolate]_*)]:text-kit-fg-3 [&_ul[data-task]>li[data-checked=true]:not([data-rt-isolate]_*)]:line-through [&_ul[data-task]>li[data-checked=true]:not([data-rt-isolate]_*)]:before:border-kit-inverse [&_ul[data-task]>li[data-checked=true]:not([data-rt-isolate]_*)]:before:bg-kit-inverse [&_ul[data-task]>li[data-checked=true]:not([data-rt-isolate]_*)]:before:text-kit-fg-inverse [&_ul[data-task]>li[data-checked=true]:not([data-rt-isolate]_*)]:before:content-['✓'] [&_blockquote:not([data-rt-isolate]_*)]:border-l-2 [&_blockquote:not([data-rt-isolate]_*)]:border-kit-line-strong [&_blockquote:not([data-rt-isolate]_*)]:pl-4 [&_blockquote:not([data-rt-isolate]_*)]:text-kit-fg-2 [&_blockquote:not([data-rt-isolate]_*)]:italic [&_a:not([data-rt-isolate]_*)]:text-kit-accent-fg [&_a:not([data-rt-isolate]_*)]:underline [&_a:not([data-rt-isolate]_*)]:decoration-kit-accent-line [&_a:not([data-rt-isolate]_*)]:underline-offset-2 [&_a[data-button]:not([data-rt-isolate]_*)]:inline-flex [&_a[data-button]:not([data-rt-isolate]_*)]:h-9 [&_a[data-button]:not([data-rt-isolate]_*)]:items-center [&_a[data-button]:not([data-rt-isolate]_*)]:rounded-kit-md [&_a[data-button]:not([data-rt-isolate]_*)]:bg-kit-inverse [&_a[data-button]:not([data-rt-isolate]_*)]:px-3.5 [&_a[data-button]:not([data-rt-isolate]_*)]:text-kit-sm [&_a[data-button]:not([data-rt-isolate]_*)]:font-medium [&_a[data-button]:not([data-rt-isolate]_*)]:text-kit-fg-inverse [&_a[data-button]:not([data-rt-isolate]_*)]:no-underline [&_abbr:not([data-rt-isolate]_*)]:cursor-help [&_abbr:not([data-rt-isolate]_*)]:underline [&_abbr:not([data-rt-isolate]_*)]:decoration-dotted [&_abbr:not([data-rt-isolate]_*)]:underline-offset-2 [&_sup:not([data-rt-isolate]_*)]:text-[0.7em] [&_sup:not([data-rt-isolate]_*)]:leading-none [&_code:not([data-rt-isolate]_*)]:rounded-kit-md [&_code:not([data-rt-isolate]_*)]:bg-kit-muted [&_code:not([data-rt-isolate]_*)]:px-1 [&_code:not([data-rt-isolate]_*)]:py-px [&_code:not([data-rt-isolate]_*)]:font-kit-mono [&_code:not([data-rt-isolate]_*)]:text-[0.9em] [&_pre:not([data-rt-isolate]_*)]:overflow-x-auto [&_pre:not([data-rt-isolate]_*)]:whitespace-pre-wrap [&_pre:not([data-rt-isolate]_*)]:rounded-kit-lg [&_pre:not([data-rt-isolate]_*)]:bg-kit-code [&_pre:not([data-rt-isolate]_*)]:text-kit-code-fg [&_pre:not([data-rt-isolate]_*)]:p-3 [&_pre:not([data-rt-isolate]_*)]:font-kit-mono [&_pre:not([data-rt-isolate]_*)]:text-kit-sm [&_pre:not([data-rt-isolate]_*)]:border [&_pre:not([data-rt-isolate]_*)]:border-kit-line [&_pre_code:not([data-rt-isolate]_*)]:rounded-none [&_pre_code:not([data-rt-isolate]_*)]:bg-transparent [&_pre_code:not([data-rt-isolate]_*)]:p-0 [&_pre_code:not([data-rt-isolate]_*)]:text-[1em] [&_hr:not([data-rt-isolate]_*)]:my-6 [&_hr:not([data-rt-isolate]_*)]:border-kit-line [&_figure:not([data-rt-isolate]_*)]:my-4 [&_img:not([data-rt-isolate]_*)]:rounded-kit-lg [&_img:not([data-rt-isolate]_*)]:border [&_img:not([data-rt-isolate]_*)]:border-kit-line [&_figcaption:not([data-rt-isolate]_*)]:mt-1.5 [&_figcaption:not([data-rt-isolate]_*)]:text-center [&_figcaption:not([data-rt-isolate]_*)]:text-kit-sm [&_figcaption:not([data-rt-isolate]_*)]:text-kit-fg-3 [&_figure_img:not([data-rt-isolate]_*)]:block [&_figure[data-size=s]_img:not([data-rt-isolate]_*)]:w-1/3 [&_figure[data-size=m]_img:not([data-rt-isolate]_*)]:w-1/2 [&_figure[data-size=l]_img:not([data-rt-isolate]_*)]:w-3/4 [&_figure[data-align=center]_img:not([data-rt-isolate]_*)]:mx-auto [&_figure[data-align=right]_img:not([data-rt-isolate]_*)]:ml-auto [&_figure[data-align=full]_img:not([data-rt-isolate]_*)]:w-full [&_div[data-callout]:not([data-rt-isolate]_*)]:rounded-kit-lg [&_div[data-callout]:not([data-rt-isolate]_*)]:border [&_div[data-callout]:not([data-rt-isolate]_*)]:border-kit-info-line [&_div[data-callout]:not([data-rt-isolate]_*)]:bg-kit-info-soft [&_div[data-callout]:not([data-rt-isolate]_*)]:px-4 [&_div[data-callout]:not([data-rt-isolate]_*)]:py-3 [&_div[data-callout]:not([data-rt-isolate]_*)]:text-kit-fg [&_div[data-callout=tip]:not([data-rt-isolate]_*)]:border-kit-success-line [&_div[data-callout=tip]:not([data-rt-isolate]_*)]:bg-kit-success-soft [&_div[data-callout=warning]:not([data-rt-isolate]_*)]:border-kit-warning-line [&_div[data-callout=warning]:not([data-rt-isolate]_*)]:bg-kit-warning-soft [&_div[data-callout]>p[data-title]:not([data-rt-isolate]_*)]:font-medium [&_details:not([data-rt-isolate]_*)]:rounded-kit-md [&_summary:not([data-rt-isolate]_*)]:cursor-pointer [&_summary:not([data-rt-isolate]_*)]:font-medium [&_details>div:not([data-rt-isolate]_*)]:mt-1 [&_details>div:not([data-rt-isolate]_*)]:border-l [&_details>div:not([data-rt-isolate]_*)]:border-kit-line [&_details>div:not([data-rt-isolate]_*)]:pl-4 [&_details>div:not([data-rt-isolate]_*)]:ml-1 [&_div[data-rt=columns]:not([data-rt-isolate]_*)]:grid [&_div[data-rt=columns]:not([data-rt-isolate]_*)]:gap-4 [&_div[data-cols='2']:not([data-rt-isolate]_*)]:grid-cols-2 [&_div[data-cols='3']:not([data-rt-isolate]_*)]:grid-cols-3 [&_div[data-cols='4']:not([data-rt-isolate]_*)]:grid-cols-4 [&_div[data-gap=s]:not([data-rt-isolate]_*)]:gap-2 [&_div[data-gap=l]:not([data-rt-isolate]_*)]:gap-7 [&_div[data-rt=file]:not([data-rt-isolate]_*)]:rounded-kit-lg [&_div[data-rt=file]:not([data-rt-isolate]_*)]:border [&_div[data-rt=file]:not([data-rt-isolate]_*)]:border-kit-line [&_div[data-rt=file]:not([data-rt-isolate]_*)]:px-3 [&_div[data-rt=file]:not([data-rt-isolate]_*)]:py-2.5 [&_div[data-rt=file]:not([data-rt-isolate]_*)]:text-kit-sm [&_div[data-embed]:not([data-rt-isolate]_*)]:flex [&_div[data-embed]:not([data-rt-isolate]_*)]:aspect-video [&_div[data-embed]:not([data-rt-isolate]_*)]:items-center [&_div[data-embed]:not([data-rt-isolate]_*)]:justify-center [&_div[data-embed]:not([data-rt-isolate]_*)]:rounded-kit-lg [&_div[data-embed]:not([data-rt-isolate]_*)]:border [&_div[data-embed]:not([data-rt-isolate]_*)]:border-kit-line [&_div[data-embed]:not([data-rt-isolate]_*)]:bg-kit-subtle [&_div[data-embed]:not([data-rt-isolate]_*)]:text-kit-sm [&_div[data-embed]:not([data-rt-isolate]_*)]:text-kit-fg-3 [&_div[data-block]:not([data-rt-isolate]_*)]:flex [&_div[data-block]:not([data-rt-isolate]_*)]:items-center [&_div[data-block]:not([data-rt-isolate]_*)]:gap-2 [&_div[data-block]:not([data-rt-isolate]_*)]:rounded-kit-lg [&_div[data-block]:not([data-rt-isolate]_*)]:border [&_div[data-block]:not([data-rt-isolate]_*)]:border-dashed [&_div[data-block]:not([data-rt-isolate]_*)]:border-kit-accent-line [&_div[data-block]:not([data-rt-isolate]_*)]:bg-kit-accent-softer [&_div[data-block]:not([data-rt-isolate]_*)]:px-3 [&_div[data-block]:not([data-rt-isolate]_*)]:py-3 [&_div[data-block]:not([data-rt-isolate]_*)]:text-kit-sm [&_div[data-block]:not([data-rt-isolate]_*)]:text-kit-accent-fg [&_table:not([data-rt-isolate]_*)]:w-full [&_table:not([data-rt-isolate]_*)]:border-collapse [&_table:not([data-rt-isolate]_*)]:text-kit-sm [&_td:not([data-rt-isolate]_*)]:border [&_td:not([data-rt-isolate]_*)]:border-kit-line [&_td:not([data-rt-isolate]_*)]:px-2.5 [&_td:not([data-rt-isolate]_*)]:py-1.5 [&_td:not([data-rt-isolate]_*)]:align-top [&_th:not([data-rt-isolate]_*)]:border [&_th:not([data-rt-isolate]_*)]:border-kit-line [&_th:not([data-rt-isolate]_*)]:bg-kit-subtle [&_th:not([data-rt-isolate]_*)]:px-2.5 [&_th:not([data-rt-isolate]_*)]:py-1.5 [&_th:not([data-rt-isolate]_*)]:text-left [&_th:not([data-rt-isolate]_*)]:align-top [&_th:not([data-rt-isolate]_*)]:font-medium";
|
|
42
45
|
/** Panel density (≈340px inspector): 13px text, smaller headings. */
|
|
43
|
-
var RT_PANEL = "text-kit-sm leading-[1.6] [&_h1]:text-kit-xl [&_h1]:leading-7 [&_h2]:text-kit-lg [&_h2]:leading-7 [&_h3]:text-kit-md [&_h4]:text-kit-base [&_h5]:text-kit-sm [&_h6]:text-kit-xs";
|
|
46
|
+
var RT_PANEL = "text-kit-sm leading-[1.6] [&_h1:not([data-rt-isolate]_*)]:text-kit-xl [&_h1:not([data-rt-isolate]_*)]:leading-7 [&_h2:not([data-rt-isolate]_*)]:text-kit-lg [&_h2:not([data-rt-isolate]_*)]:leading-7 [&_h3:not([data-rt-isolate]_*)]:text-kit-md [&_h4:not([data-rt-isolate]_*)]:text-kit-base [&_h5:not([data-rt-isolate]_*)]:text-kit-sm [&_h6:not([data-rt-isolate]_*)]:text-kit-xs";
|
|
44
47
|
/** execCommand, where the engine has it (it returns false where it does not). */
|
|
45
48
|
var exec = (cmd, arg) => {
|
|
46
49
|
try {
|
|
@@ -49,6 +52,41 @@ var exec = (cmd, arg) => {
|
|
|
49
52
|
return false;
|
|
50
53
|
}
|
|
51
54
|
};
|
|
55
|
+
/** A footnote marker (`<sup data-footnote>`, or the table's `<sup><a href="#…-fn-n">`): never an x² mark. */
|
|
56
|
+
var FOOTNOTE_SUP = "sup[data-footnote], sup:has(> a[href*='-fn-'])";
|
|
57
|
+
/** x² / x₂ (V2): on inside the same mark takes it off (unwrap, keeping the words selected); inside the other one swaps;
|
|
58
|
+
* otherwise the browser wraps the selection. Footnote markers are never touched. */
|
|
59
|
+
function toggleScript(root, tag) {
|
|
60
|
+
const s = window.getSelection();
|
|
61
|
+
if (!s || !s.rangeCount) return;
|
|
62
|
+
const at = (n) => n?.nodeType === 1 ? n : n?.parentElement ?? null;
|
|
63
|
+
const find = (t) => {
|
|
64
|
+
const el = at(s.anchorNode)?.closest(t === "sup" ? `sup:not(${FOOTNOTE_SUP})` : "sub");
|
|
65
|
+
return el && root.contains(el) ? el : null;
|
|
66
|
+
};
|
|
67
|
+
const unwrap = (el) => {
|
|
68
|
+
const first = el.firstChild;
|
|
69
|
+
const last = el.lastChild;
|
|
70
|
+
el.replaceWith(...Array.from(el.childNodes));
|
|
71
|
+
if (first && last) {
|
|
72
|
+
const r = document.createRange();
|
|
73
|
+
r.setStartBefore(first);
|
|
74
|
+
r.setEndAfter(last);
|
|
75
|
+
s.removeAllRanges();
|
|
76
|
+
s.addRange(r);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
const same = find(tag);
|
|
80
|
+
if (same) return unwrap(same);
|
|
81
|
+
const other = find(tag === "sup" ? "sub" : "sup");
|
|
82
|
+
if (other) unwrap(other);
|
|
83
|
+
exec(tag === "sup" ? "superscript" : "subscript");
|
|
84
|
+
}
|
|
85
|
+
/** Focus is in another text field (the comment composer, a link input) while the page's selection stays in this editor. */
|
|
86
|
+
var typingElsewhere = (el) => {
|
|
87
|
+
const ae = document.activeElement;
|
|
88
|
+
return !!el && !!ae && ae !== el && !el.contains(ae) && ae.matches("input, textarea, [contenteditable='true']");
|
|
89
|
+
};
|
|
52
90
|
var queryState = (c) => {
|
|
53
91
|
try {
|
|
54
92
|
return typeof document.queryCommandState === "function" && document.queryCommandState(c);
|
|
@@ -74,6 +112,24 @@ function insertHtmlAtCaret(html) {
|
|
|
74
112
|
s.addRange(r);
|
|
75
113
|
}
|
|
76
114
|
}
|
|
115
|
+
var NOT_COUNTED = "[data-rt=component],[data-rt=pullquote],[data-rt=takeaways],[data-rt=embed],[data-rt=video],[data-rt=file]";
|
|
116
|
+
var WORDS = (s) => s.replace(/\u200b/g, "").trim().split(/\s+/).filter(Boolean).length;
|
|
117
|
+
function countWords(html) {
|
|
118
|
+
if (!html) return 0;
|
|
119
|
+
if (!/data-rt="(?:component|pullquote|takeaways|embed|video|file)"/.test(html) || typeof DOMParser === "undefined") return WORDS(html.replace(/<\/(p|li|h[1-6]|blockquote|pre|figcaption|td|th|summary|div)>|<br\s*\/?>/g, " ").replace(/<[^>]+>/g, "").replace(/ |&[a-z]+;/g, " "));
|
|
120
|
+
const doc = new DOMParser().parseFromString(`<body>${html}</body>`, "text/html");
|
|
121
|
+
doc.body.querySelectorAll(NOT_COUNTED).forEach((n) => n.remove());
|
|
122
|
+
doc.body.querySelectorAll("p,li,h1,h2,h3,h4,h5,h6,td,th,figcaption,summary,pre,blockquote,div").forEach((n) => n.append(" "));
|
|
123
|
+
return WORDS(doc.body.textContent ?? "");
|
|
124
|
+
}
|
|
125
|
+
/** Linked component instances in the body. */
|
|
126
|
+
var countComponents = (html) => (html.match(/data-rt="component"/g) ?? []).length;
|
|
127
|
+
/** "1,840 words · 3 components" */
|
|
128
|
+
var bodyCountLabel = (html) => {
|
|
129
|
+
const w = countWords(html);
|
|
130
|
+
const c = countComponents(html);
|
|
131
|
+
return `${w.toLocaleString("en-US")} ${w === 1 ? "word" : "words"}${c ? ` · ${c} ${c === 1 ? "block" : "blocks"}` : ""}`;
|
|
132
|
+
};
|
|
77
133
|
function insertTextAtCaret(text) {
|
|
78
134
|
if (exec("insertText", text)) return;
|
|
79
135
|
const s = window.getSelection();
|
|
@@ -135,7 +191,21 @@ function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, featur
|
|
|
135
191
|
const setModalOpen = (o) => onExpandedOpenChange ? onExpandedOpenChange(o) : setModalOwn(o);
|
|
136
192
|
const [md, setMd] = React.useState(null);
|
|
137
193
|
const [mdConfirm, setMdConfirm] = React.useState(false);
|
|
194
|
+
const reduceMotion = useReducedMotion();
|
|
138
195
|
const [bubble, setBubble] = React.useState(null);
|
|
196
|
+
/** Comment was picked: the toolbar stays away until the next click or key inside this editor */
|
|
197
|
+
const [quiet, setQuiet] = React.useState(false);
|
|
198
|
+
React.useEffect(() => {
|
|
199
|
+
const el = ref.current;
|
|
200
|
+
if (!quiet || !el) return;
|
|
201
|
+
const wake = () => setQuiet(false);
|
|
202
|
+
el.addEventListener("mousedown", wake);
|
|
203
|
+
el.addEventListener("keydown", wake);
|
|
204
|
+
return () => {
|
|
205
|
+
el.removeEventListener("mousedown", wake);
|
|
206
|
+
el.removeEventListener("keydown", wake);
|
|
207
|
+
};
|
|
208
|
+
}, [quiet]);
|
|
139
209
|
const [slash, setSlash] = React.useState(null);
|
|
140
210
|
const [gutter, setGutter] = React.useState(null);
|
|
141
211
|
const [blockMenu, setBlockMenu] = React.useState(false);
|
|
@@ -269,7 +339,8 @@ function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, featur
|
|
|
269
339
|
if (cs.overflowX !== "visible" || cs.overflowY !== "visible") break;
|
|
270
340
|
a = a.parentElement;
|
|
271
341
|
}
|
|
272
|
-
|
|
342
|
+
const left = w.getBoundingClientRect().left - (a ? a.getBoundingClientRect().left : 0);
|
|
343
|
+
setGutterRoom(left >= 48);
|
|
273
344
|
};
|
|
274
345
|
const ro = new ResizeObserver(([e]) => {
|
|
275
346
|
setWidth(Math.round(e.contentRect.width));
|
|
@@ -325,13 +396,17 @@ function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, featur
|
|
|
325
396
|
cancelAnimationFrame(raf);
|
|
326
397
|
raf = requestAnimationFrame(() => {
|
|
327
398
|
const s = window.getSelection();
|
|
328
|
-
|
|
399
|
+
const ok = s && s.rangeCount && !s.isCollapsed && ref.current?.contains(s.anchorNode) && !typingElsewhere(ref.current);
|
|
400
|
+
setBubble(ok ? rangeRect(s.getRangeAt(0), ref.current) : null);
|
|
329
401
|
});
|
|
330
402
|
};
|
|
331
403
|
window.addEventListener("scroll", on, true);
|
|
332
404
|
window.addEventListener("resize", on);
|
|
405
|
+
const box = new ResizeObserver(on);
|
|
406
|
+
if (wrap.current) box.observe(wrap.current);
|
|
333
407
|
return () => {
|
|
334
408
|
cancelAnimationFrame(raf);
|
|
409
|
+
box.disconnect();
|
|
335
410
|
window.removeEventListener("scroll", on, true);
|
|
336
411
|
window.removeEventListener("resize", on);
|
|
337
412
|
};
|
|
@@ -358,6 +433,10 @@ function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, featur
|
|
|
358
433
|
const el = ref.current;
|
|
359
434
|
const s = window.getSelection();
|
|
360
435
|
if (!el || !s || !s.rangeCount || !el.contains(s.anchorNode)) return;
|
|
436
|
+
if (typingElsewhere(el)) {
|
|
437
|
+
setBubble(null);
|
|
438
|
+
return;
|
|
439
|
+
}
|
|
361
440
|
saved.current = s.getRangeAt(0).cloneRange();
|
|
362
441
|
const anchorEl = s.anchorNode?.nodeType === 1 ? s.anchorNode : s.anchorNode?.parentElement;
|
|
363
442
|
const inIsland = !!anchorEl?.closest("[data-rt-island]");
|
|
@@ -369,6 +448,8 @@ function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, featur
|
|
|
369
448
|
italic: queryState("italic"),
|
|
370
449
|
underline: queryState("underline"),
|
|
371
450
|
strike: queryState("strikeThrough"),
|
|
451
|
+
sup: !!anchorEl?.closest(`sup:not(${FOOTNOTE_SUP})`),
|
|
452
|
+
sub: !!anchorEl?.closest("sub"),
|
|
372
453
|
ul: !inIsland && tb?.tagName === "UL",
|
|
373
454
|
ol: !inIsland && tb?.tagName === "OL",
|
|
374
455
|
block: inIsland ? "island" : tb?.tagName.toLowerCase() ?? "p",
|
|
@@ -382,8 +463,13 @@ function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, featur
|
|
|
382
463
|
}, []);
|
|
383
464
|
React.useEffect(() => {
|
|
384
465
|
const on = () => refresh();
|
|
466
|
+
const away = () => typingElsewhere(ref.current) && setBubble(null);
|
|
385
467
|
document.addEventListener("selectionchange", on);
|
|
386
|
-
|
|
468
|
+
document.addEventListener("focusin", away);
|
|
469
|
+
return () => {
|
|
470
|
+
document.removeEventListener("selectionchange", on);
|
|
471
|
+
document.removeEventListener("focusin", away);
|
|
472
|
+
};
|
|
387
473
|
}, [refresh]);
|
|
388
474
|
const run = (fn) => {
|
|
389
475
|
restoreSel();
|
|
@@ -465,8 +551,9 @@ function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, featur
|
|
|
465
551
|
if (it.kind === "component" && it.component) {
|
|
466
552
|
const c = it.component;
|
|
467
553
|
noteRecent(it);
|
|
554
|
+
const made = { el: null };
|
|
468
555
|
oneStep(`Insert ${c.name}`, () => {
|
|
469
|
-
const isl = insertIsland(el, "component", {
|
|
556
|
+
const isl = made.el = insertIsland(el, "component", {
|
|
470
557
|
...defaultModel("component"),
|
|
471
558
|
ref: c.id,
|
|
472
559
|
name: c.name
|
|
@@ -475,6 +562,8 @@ function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, featur
|
|
|
475
562
|
return isl;
|
|
476
563
|
});
|
|
477
564
|
refresh();
|
|
565
|
+
if (made.el && services.useComponentInfo) openComponentPanel(made.el);
|
|
566
|
+
services.toast?.(`${c.name} added`, { description: COMPONENT_INSERT_TOAST });
|
|
478
567
|
return;
|
|
479
568
|
}
|
|
480
569
|
if (!it.id || !blockAllowed(it.id, allows)) return;
|
|
@@ -555,7 +644,7 @@ function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, featur
|
|
|
555
644
|
}
|
|
556
645
|
}
|
|
557
646
|
const mod = e.metaKey || e.ctrlKey;
|
|
558
|
-
const k = e
|
|
647
|
+
const k = eventKey(e);
|
|
559
648
|
if (mod && !e.altKey && k === "k") {
|
|
560
649
|
e.preventDefault();
|
|
561
650
|
saveSel();
|
|
@@ -621,7 +710,8 @@ function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, featur
|
|
|
621
710
|
rest.setStart(s.anchorNode, s.anchorOffset);
|
|
622
711
|
if (!rest.toString().trim()) {
|
|
623
712
|
e.preventDefault();
|
|
624
|
-
|
|
713
|
+
const p = ensureLineAfter(b);
|
|
714
|
+
placeCaret(p, false);
|
|
625
715
|
emit();
|
|
626
716
|
}
|
|
627
717
|
}
|
|
@@ -641,7 +731,7 @@ function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, featur
|
|
|
641
731
|
if (!ref.current?.contains(t) || t.tagName === "INPUT" || t.tagName === "TEXTAREA") return;
|
|
642
732
|
if (undoKey(e)) return;
|
|
643
733
|
if (single) return;
|
|
644
|
-
if (mod && !e.shiftKey && !e.altKey && e
|
|
734
|
+
if (mod && !e.shiftKey && !e.altKey && eventKey(e) === "d") {
|
|
645
735
|
e.preventDefault();
|
|
646
736
|
const b = currentBlock();
|
|
647
737
|
if (b) duplicateBlock$1(b);
|
|
@@ -811,7 +901,8 @@ function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, featur
|
|
|
811
901
|
};
|
|
812
902
|
const toggleMarkdown = () => {
|
|
813
903
|
if (!md) {
|
|
814
|
-
const
|
|
904
|
+
const html = ref.current ? serialize(ref.current) : value;
|
|
905
|
+
const text = htmlToMarkdown(html);
|
|
815
906
|
setMd({
|
|
816
907
|
text,
|
|
817
908
|
original: text
|
|
@@ -950,7 +1041,7 @@ function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, featur
|
|
|
950
1041
|
h.future = [];
|
|
951
1042
|
};
|
|
952
1043
|
const undoKey = (e) => {
|
|
953
|
-
if (!(e.metaKey || e.ctrlKey) || e.altKey || e
|
|
1044
|
+
if (!(e.metaKey || e.ctrlKey) || e.altKey || eventKey(e) !== "z") return false;
|
|
954
1045
|
if (e.shiftKey) {
|
|
955
1046
|
if (!islandRedo()) return false;
|
|
956
1047
|
e.preventDefault();
|
|
@@ -980,7 +1071,8 @@ function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, featur
|
|
|
980
1071
|
duplicateBlock: duplicateBlock$1,
|
|
981
1072
|
moveBlock: moveBlock$1,
|
|
982
1073
|
islandUndo,
|
|
983
|
-
islandRedo
|
|
1074
|
+
islandRedo,
|
|
1075
|
+
startDrag
|
|
984
1076
|
});
|
|
985
1077
|
api.current = {
|
|
986
1078
|
emit,
|
|
@@ -992,7 +1084,8 @@ function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, featur
|
|
|
992
1084
|
duplicateBlock: duplicateBlock$1,
|
|
993
1085
|
moveBlock: moveBlock$1,
|
|
994
1086
|
islandUndo,
|
|
995
|
-
islandRedo
|
|
1087
|
+
islandRedo,
|
|
1088
|
+
startDrag
|
|
996
1089
|
};
|
|
997
1090
|
const islandCtx = React.useMemo(() => ({
|
|
998
1091
|
readOnly,
|
|
@@ -1006,14 +1099,17 @@ function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, featur
|
|
|
1006
1099
|
duplicate: (x) => api.current.duplicateBlock(x),
|
|
1007
1100
|
move: (x, dir) => api.current.moveBlock(x, dir),
|
|
1008
1101
|
undo: () => api.current.islandUndo(),
|
|
1009
|
-
redo: () => api.current.islandRedo()
|
|
1102
|
+
redo: () => api.current.islandRedo(),
|
|
1103
|
+
drag: (x, e) => api.current.startDrag(x, e)
|
|
1010
1104
|
}), [readOnly, dense]);
|
|
1011
1105
|
const commentSel = onComment ? () => {
|
|
1012
1106
|
restoreSel();
|
|
1013
1107
|
const q = window.getSelection()?.toString().trim();
|
|
1108
|
+
setBubble(null);
|
|
1109
|
+
setQuiet(true);
|
|
1014
1110
|
if (q) onComment(q);
|
|
1015
1111
|
} : void 0;
|
|
1016
|
-
const onMark = (cmd) => allows(MARK_FEATURE[cmd]) && run(() => exec(cmd));
|
|
1112
|
+
const onMark = (cmd) => allows(MARK_FEATURE[cmd]) && run(() => cmd === "superscript" || cmd === "subscript" ? ref.current && toggleScript(ref.current, cmd === "superscript" ? "sup" : "sub") : exec(cmd));
|
|
1017
1113
|
const onStyle = (tag) => {
|
|
1018
1114
|
restoreSel();
|
|
1019
1115
|
turnInto$1(currentBlock(), tag);
|
|
@@ -1025,7 +1121,7 @@ function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, featur
|
|
|
1025
1121
|
};
|
|
1026
1122
|
const gBlock = gutter?.el;
|
|
1027
1123
|
const gIsText = !!gBlock && !gBlock.hasAttribute("data-rt-island") && gBlock.tagName !== "HR";
|
|
1028
|
-
const btn = dense ? "size-5 [&_svg]:size-3.5" : "size-[22px] [&_svg]:size-3.5";
|
|
1124
|
+
const btn = dense ? "size-5 [&_svg:not([data-rt-isolate]_*)]:size-3.5" : "size-[22px] [&_svg:not([data-rt-isolate]_*)]:size-3.5";
|
|
1029
1125
|
const gutterMode = readOnly || dense || single ? "none" : gutterRoom ? "outside" : "inset";
|
|
1030
1126
|
const showGutter = gutterMode !== "none";
|
|
1031
1127
|
const minH = expanded ? "min-h-[60vh]" : single ? "min-h-9" : dense ? "min-h-[120px]" : "min-h-[190px]";
|
|
@@ -1041,7 +1137,7 @@ function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, featur
|
|
|
1041
1137
|
children: /* @__PURE__ */ jsxs("div", {
|
|
1042
1138
|
ref: wrap,
|
|
1043
1139
|
"data-rt-editor": "",
|
|
1044
|
-
className: cn("relative
|
|
1140
|
+
className: cn("relative [--rt-toolbar-h:2rem] pointer-coarse:[--rt-toolbar-h:2.75rem]", "rounded-kit-lg border transition-colors duration-150", expanded ? "bg-[var(--kit-surface-raised)]" : "bg-kit-surface", invalid ? "border-[var(--kit-field-invalid)]" : toolbarOpen ? "border-kit-line-strong" : "border-kit-line"),
|
|
1045
1141
|
style: { "--rt-sticky-top": toolbarOpen && !dense ? `calc(${stickyTop}px + var(--rt-toolbar-h))` : "var(--kit-sticky-top, 0px)" },
|
|
1046
1142
|
onMouseLeave: () => !blockMenu && !gutterInsert && !drag && setGutter(null),
|
|
1047
1143
|
onKeyDown: onWrapKeyDown,
|
|
@@ -1143,7 +1239,7 @@ function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, featur
|
|
|
1143
1239
|
children: mdConfirm ? /* @__PURE__ */ jsxs(motion.div, {
|
|
1144
1240
|
initial: {
|
|
1145
1241
|
opacity: 0,
|
|
1146
|
-
y: 4
|
|
1242
|
+
y: reduceMotion ? 0 : 4
|
|
1147
1243
|
},
|
|
1148
1244
|
animate: {
|
|
1149
1245
|
opacity: 1,
|
|
@@ -1151,7 +1247,7 @@ function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, featur
|
|
|
1151
1247
|
},
|
|
1152
1248
|
exit: {
|
|
1153
1249
|
opacity: 0,
|
|
1154
|
-
y: 4
|
|
1250
|
+
y: reduceMotion ? 0 : 4
|
|
1155
1251
|
},
|
|
1156
1252
|
transition: { duration: .15 },
|
|
1157
1253
|
role: "alertdialog",
|
|
@@ -1187,7 +1283,8 @@ function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, featur
|
|
|
1187
1283
|
if (drag || blockMenu || gutterInsert || !showGutter) return;
|
|
1188
1284
|
const t = e.target;
|
|
1189
1285
|
if (t.closest("[data-rt-gutter]")) return;
|
|
1190
|
-
|
|
1286
|
+
const b = topBlock(ref.current, t);
|
|
1287
|
+
placeGutter(b?.getAttribute("data-rt-island") === "component" ? null : b);
|
|
1191
1288
|
},
|
|
1192
1289
|
children: [
|
|
1193
1290
|
/* @__PURE__ */ jsx("div", {
|
|
@@ -1196,7 +1293,7 @@ function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, featur
|
|
|
1196
1293
|
role: "textbox",
|
|
1197
1294
|
"aria-multiline": !single,
|
|
1198
1295
|
"aria-labelledby": !inModal && id ? `${id}-label` : void 0,
|
|
1199
|
-
"aria-label":
|
|
1296
|
+
"aria-label": "Rich text",
|
|
1200
1297
|
"aria-placeholder": ph,
|
|
1201
1298
|
"aria-readonly": readOnly || void 0,
|
|
1202
1299
|
"aria-invalid": invalid || void 0,
|
|
@@ -1255,11 +1352,11 @@ function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, featur
|
|
|
1255
1352
|
notify("That drop is not an image from the media library");
|
|
1256
1353
|
}
|
|
1257
1354
|
},
|
|
1258
|
-
className: cn(RT_PROSE, dense &&
|
|
1355
|
+
className: cn(RT_PROSE, dense && "text-kit-sm leading-[1.6] [&_h1:not([data-rt-isolate]_*)]:text-kit-xl [&_h1:not([data-rt-isolate]_*)]:leading-7 [&_h2:not([data-rt-isolate]_*)]:text-kit-lg [&_h2:not([data-rt-isolate]_*)]:leading-7 [&_h3:not([data-rt-isolate]_*)]:text-kit-md [&_h4:not([data-rt-isolate]_*)]:text-kit-base [&_h5:not([data-rt-isolate]_*)]:text-kit-sm [&_h6:not([data-rt-isolate]_*)]:text-kit-xs", "peer relative outline-none focus-visible:shadow-none [&_*:not([data-rt-isolate]_*)]:outline-none", "[&>p[data-hint]]:before:pointer-events-none [&>p[data-hint]]:before:float-left [&>p[data-hint]]:before:h-0 [&>p[data-hint]]:before:text-kit-fg-4 [&>p[data-hint]]:before:content-[attr(data-hint)]", "[&_a[data-button]:not([data-rt-isolate]_*)]:cursor-pointer [&_ul[data-task]>li:not([data-rt-isolate]_*)]:before:cursor-pointer", "[&_sup[data-rt=fn]]:mx-px [&_sup[data-rt=fn]]:cursor-pointer [&_sup[data-rt=fn]]:rounded-kit-sm [&_sup[data-rt=fn]]:px-0.5 [&_sup[data-rt=fn]]:text-[0.72em] [&_sup[data-rt=fn]]:font-semibold [&_sup[data-rt=fn]]:text-kit-accent-fg [&_sup[data-rt=fn]:hover]:bg-kit-accent-soft", dense ? "px-2.5 py-2" : "px-4 py-3.5", minH)
|
|
1259
1356
|
}),
|
|
1260
1357
|
empty ? /* @__PURE__ */ jsx("div", {
|
|
1261
1358
|
"aria-hidden": true,
|
|
1262
|
-
className: cn("pointer-events-none absolute text-kit-fg-4 peer-focus:hidden", dense ? "left-2.5 top-2
|
|
1359
|
+
className: cn("pointer-events-none absolute text-kit-fg-4 peer-focus:hidden", dense ? "text-kit-sm" : "text-kit-base", dense ? "left-2.5 top-2" : "left-4 top-3.5"),
|
|
1263
1360
|
children: ph
|
|
1264
1361
|
}) : null,
|
|
1265
1362
|
gutter && showGutter ? /* @__PURE__ */ jsxs("div", {
|
|
@@ -1320,7 +1417,7 @@ function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, featur
|
|
|
1320
1417
|
setBlockMenu(true);
|
|
1321
1418
|
}
|
|
1322
1419
|
},
|
|
1323
|
-
className: cn("flex cursor-grab items-center justify-center rounded-kit-md text-kit-fg-3 hover:bg-kit-hover hover:text-kit-fg active:cursor-grabbing", gutterMode === "inset" ? "h-[22px] w-4 rounded-kit-sm [&_svg]:size-3.5" : btn, (blockMenu || drag) && "bg-kit-hover text-kit-fg"),
|
|
1420
|
+
className: cn("flex cursor-grab items-center justify-center rounded-kit-md text-kit-fg-3 hover:bg-kit-hover hover:text-kit-fg active:cursor-grabbing", gutterMode === "inset" ? "h-[22px] w-4 rounded-kit-sm [&_svg:not([data-rt-isolate]_*)]:size-3.5" : btn, (blockMenu || drag) && "bg-kit-hover text-kit-fg"),
|
|
1324
1421
|
children: /* @__PURE__ */ jsx(IconGripVertical, {
|
|
1325
1422
|
stroke: 1.5,
|
|
1326
1423
|
"aria-hidden": true
|
|
@@ -1385,7 +1482,7 @@ function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, featur
|
|
|
1385
1482
|
]
|
|
1386
1483
|
}),
|
|
1387
1484
|
/* @__PURE__ */ jsxs("div", {
|
|
1388
|
-
className: "flex
|
|
1485
|
+
className: "flex h-7 items-center justify-end gap-3 rounded-b-kit-lg border-t border-kit-line-subtle px-3 text-kit-2xs text-kit-fg-3",
|
|
1389
1486
|
children: [notice ? /* @__PURE__ */ jsxs("span", {
|
|
1390
1487
|
role: "status",
|
|
1391
1488
|
"aria-live": "polite",
|
|
@@ -1404,19 +1501,19 @@ function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, featur
|
|
|
1404
1501
|
}) : null
|
|
1405
1502
|
]
|
|
1406
1503
|
}) : null, /* @__PURE__ */ jsxs("span", {
|
|
1407
|
-
className: "
|
|
1504
|
+
className: "tabular-nums",
|
|
1408
1505
|
children: [
|
|
1409
1506
|
words.toLocaleString("en-US"),
|
|
1410
1507
|
" ",
|
|
1411
1508
|
words === 1 ? "word" : "words",
|
|
1412
|
-
comps ? ` · ${comps} ${comps === 1 ? "
|
|
1509
|
+
comps ? ` · ${comps} ${comps === 1 ? "block" : "blocks"}` : "",
|
|
1413
1510
|
" · ",
|
|
1414
1511
|
Math.max(1, Math.round(words / 220)),
|
|
1415
1512
|
" min read"
|
|
1416
1513
|
]
|
|
1417
1514
|
})]
|
|
1418
1515
|
}),
|
|
1419
|
-
bubble && !readOnly && !slash && !link && !md && !menus.style && !menus.more && !insertOpen ? /* @__PURE__ */ jsx(SelectionBubble, {
|
|
1516
|
+
bubble && !quiet && !readOnly && !slash && !link && !md && !menus.style && !menus.more && !insertOpen ? /* @__PURE__ */ jsx(SelectionBubble, {
|
|
1420
1517
|
rect: bubble,
|
|
1421
1518
|
avoid: toolbarOpen ? wrap.current?.querySelector("[role=\"toolbar\"][aria-label=\"Text formatting\"]")?.getBoundingClientRect() : null,
|
|
1422
1519
|
fmt,
|
|
@@ -1434,7 +1531,7 @@ function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, featur
|
|
|
1434
1531
|
}) : null,
|
|
1435
1532
|
slash && !md ? createPortal(/* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("div", {
|
|
1436
1533
|
"data-floating-layer": "",
|
|
1437
|
-
className: "pointer-events-auto fixed inset-0 z-[84]",
|
|
1534
|
+
className: "pointer-events-auto fixed inset-0 z-[var(--kit-z-popover,84)]",
|
|
1438
1535
|
onMouseDown: () => setSlash(null)
|
|
1439
1536
|
}), /* @__PURE__ */ jsx(motion.div, {
|
|
1440
1537
|
initial: {
|
|
@@ -1451,7 +1548,7 @@ function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, featur
|
|
|
1451
1548
|
...flipUp ? { bottom: window.innerHeight - slash.rect.top + 6 } : { top: slash.rect.bottom + 6 }
|
|
1452
1549
|
},
|
|
1453
1550
|
"data-floating-layer": "",
|
|
1454
|
-
className: "pointer-events-auto fixed z-[
|
|
1551
|
+
className: "pointer-events-auto fixed z-[calc(var(--kit-z-popover,84)_+_1)]",
|
|
1455
1552
|
children: /* @__PURE__ */ jsx(SlashMenuPanel, {
|
|
1456
1553
|
query: slash.query,
|
|
1457
1554
|
folder: slash.folder,
|
|
@@ -1482,17 +1579,20 @@ function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, featur
|
|
|
1482
1579
|
}) }), /* @__PURE__ */ jsx(PopoverContent, {
|
|
1483
1580
|
className: "w-[340px] rounded-kit-lg p-3",
|
|
1484
1581
|
finalFocus: false,
|
|
1485
|
-
children: link ? /* @__PURE__ */ jsx(
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1582
|
+
children: link ? /* @__PURE__ */ jsx("div", {
|
|
1583
|
+
className: "flex flex-col gap-2",
|
|
1584
|
+
children: /* @__PURE__ */ jsx(LinkForm, {
|
|
1585
|
+
initial: link.initial,
|
|
1586
|
+
allowNewTab,
|
|
1587
|
+
onSave: saveLink,
|
|
1588
|
+
onCancel: () => setLink(null),
|
|
1589
|
+
onDetach: link.existing ? () => {
|
|
1590
|
+
const a = link.existing;
|
|
1591
|
+
a.replaceWith(...Array.from(a.childNodes));
|
|
1592
|
+
setLink(null);
|
|
1593
|
+
emit();
|
|
1594
|
+
} : void 0
|
|
1595
|
+
})
|
|
1496
1596
|
}) : null
|
|
1497
1597
|
})]
|
|
1498
1598
|
}),
|
|
@@ -1525,6 +1625,6 @@ function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, featur
|
|
|
1525
1625
|
});
|
|
1526
1626
|
}
|
|
1527
1627
|
//#endregion
|
|
1528
|
-
export { RichTextEditor };
|
|
1628
|
+
export { RT_PANEL, RT_PROSE, RichTextEditor, bodyCountLabel, countComponents, countWords, slashPlacement };
|
|
1529
1629
|
|
|
1530
1630
|
//# sourceMappingURL=editor.js.map
|