@bettercms-ai/kit 0.1.1 → 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 +22 -16
- package/dist/_virtual/_rolldown/runtime.js +13 -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/dist/adapters/icons.d.ts +15 -0
- package/dist/adapters/icons.js +27 -0
- package/dist/adapters/icons.js.map +1 -0
- package/dist/adapters/lossy.d.ts +326 -0
- package/dist/adapters/lossy.js +414 -0
- package/dist/adapters/lossy.js.map +1 -0
- package/dist/adapters/prod-types.d.ts +546 -0
- package/dist/adapters/prod-types.js +714 -0
- package/dist/adapters/prod-types.js.map +1 -0
- package/dist/adapters/schema.d.ts +154 -0
- package/dist/adapters/schema.js +3020 -0
- package/dist/adapters/schema.js.map +1 -0
- package/dist/adapters/values.d.ts +221 -0
- package/dist/adapters/values.js +623 -0
- package/dist/adapters/values.js.map +1 -0
- package/dist/brand/logo.d.ts +17 -0
- package/dist/brand/logo.js +96 -0
- package/dist/brand/logo.js.map +1 -0
- package/dist/context.d.ts +359 -0
- package/dist/context.js +217 -0
- package/dist/context.js.map +1 -0
- package/dist/controls/button.d.ts +72 -0
- package/dist/controls/button.js +578 -0
- package/dist/controls/button.js.map +1 -0
- package/dist/controls/c1.d.ts +11 -0
- package/dist/controls/c1.js +24 -0
- package/dist/controls/c1.js.map +1 -0
- package/dist/controls/c2.d.ts +10 -0
- package/dist/controls/c2.js +19 -0
- package/dist/controls/c2.js.map +1 -0
- package/dist/controls/choice.d.ts +44 -0
- package/dist/controls/choice.js +463 -0
- package/dist/controls/choice.js.map +1 -0
- package/dist/controls/code-register.d.ts +1 -0
- package/dist/controls/code-register.js +8 -0
- package/dist/controls/code-register.js.map +1 -0
- package/dist/controls/code.d.ts +42 -0
- package/dist/controls/code.js +397 -0
- package/dist/controls/code.js.map +1 -0
- package/dist/controls/color.d.ts +5 -0
- package/dist/controls/color.js +130 -0
- package/dist/controls/color.js.map +1 -0
- package/dist/controls/component-services.d.ts +156 -0
- package/dist/controls/component-services.js +7 -0
- package/dist/controls/component-services.js.map +1 -0
- package/dist/controls/date-register.d.ts +1 -0
- package/dist/controls/date-register.js +9 -0
- package/dist/controls/date-register.js.map +1 -0
- package/dist/controls/date-zone.d.ts +104 -0
- package/dist/controls/date-zone.js +278 -0
- package/dist/controls/date-zone.js.map +1 -0
- package/dist/controls/date.d.ts +7 -0
- package/dist/controls/date.js +466 -0
- package/dist/controls/date.js.map +1 -0
- package/dist/controls/form-picker-register.d.ts +1 -0
- package/dist/controls/form-picker-register.js +19 -0
- package/dist/controls/form-picker-register.js.map +1 -0
- package/dist/controls/form-picker.d.ts +43 -0
- package/dist/controls/form-picker.js +85 -0
- package/dist/controls/form-picker.js.map +1 -0
- package/dist/controls/icon-register.d.ts +1 -0
- package/dist/controls/icon-register.js +8 -0
- package/dist/controls/icon-register.js.map +1 -0
- package/dist/controls/icon.d.ts +40 -0
- package/dist/controls/icon.js +360 -0
- package/dist/controls/icon.js.map +1 -0
- package/dist/controls/index.d.ts +5 -0
- package/dist/controls/index.js +38 -0
- package/dist/controls/index.js.map +1 -0
- package/dist/controls/json-register.d.ts +1 -0
- package/dist/controls/json-register.js +8 -0
- package/dist/controls/json-register.js.map +1 -0
- package/dist/controls/json.d.ts +2 -0
- package/dist/controls/json.js +82 -0
- package/dist/controls/json.js.map +1 -0
- package/dist/controls/link.d.ts +260 -0
- package/dist/controls/link.js +1186 -0
- package/dist/controls/link.js.map +1 -0
- package/dist/controls/location-register.d.ts +1 -0
- package/dist/controls/location-register.js +8 -0
- package/dist/controls/location-register.js.map +1 -0
- package/dist/controls/location.d.ts +16 -0
- package/dist/controls/location.js +221 -0
- package/dist/controls/location.js.map +1 -0
- package/dist/controls/media-register.d.ts +1 -0
- package/dist/controls/media-register.js +12 -0
- package/dist/controls/media-register.js.map +1 -0
- package/dist/controls/media-services.d.ts +46 -0
- package/dist/controls/media-services.js +0 -0
- package/dist/controls/media.d.ts +104 -0
- package/dist/controls/media.js +1396 -0
- package/dist/controls/media.js.map +1 -0
- package/dist/controls/number.d.ts +22 -0
- package/dist/controls/number.js +196 -0
- package/dist/controls/number.js.map +1 -0
- package/dist/controls/reference-register.d.ts +1 -0
- package/dist/controls/reference-register.js +10 -0
- package/dist/controls/reference-register.js.map +1 -0
- package/dist/controls/reference-services.d.ts +58 -0
- package/dist/controls/reference-services.js +0 -0
- package/dist/controls/reference.d.ts +23 -0
- package/dist/controls/reference.js +777 -0
- package/dist/controls/reference.js.map +1 -0
- package/dist/controls/rich-text/blocks.d.ts +49 -0
- package/dist/controls/rich-text/blocks.js +1859 -0
- package/dist/controls/rich-text/blocks.js.map +1 -0
- package/dist/controls/rich-text/catalog.d.ts +101 -0
- package/dist/controls/rich-text/catalog.js +623 -0
- package/dist/controls/rich-text/catalog.js.map +1 -0
- package/dist/controls/rich-text/codec.d.ts +64 -0
- package/dist/controls/rich-text/codec.js +34 -0
- package/dist/controls/rich-text/codec.js.map +1 -0
- package/dist/controls/rich-text/component-card.d.ts +14 -0
- package/dist/controls/rich-text/component-card.js +1024 -0
- 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/dist/controls/rich-text/control.d.ts +20 -0
- package/dist/controls/rich-text/control.js +296 -0
- package/dist/controls/rich-text/control.js.map +1 -0
- package/dist/controls/rich-text/dom.d.ts +233 -0
- package/dist/controls/rich-text/dom.js +1019 -0
- package/dist/controls/rich-text/dom.js.map +1 -0
- package/dist/controls/rich-text/editor.d.ts +57 -0
- package/dist/controls/rich-text/editor.js +1630 -0
- package/dist/controls/rich-text/editor.js.map +1 -0
- package/dist/controls/rich-text/floating.d.ts +28 -0
- package/dist/controls/rich-text/floating.js +154 -0
- package/dist/controls/rich-text/floating.js.map +1 -0
- package/dist/controls/rich-text/index.d.ts +1 -0
- package/dist/controls/rich-text/index.js +12 -0
- package/dist/controls/rich-text/index.js.map +1 -0
- package/dist/controls/rich-text/link-form.d.ts +13 -0
- package/dist/controls/rich-text/link-form.js +147 -0
- package/dist/controls/rich-text/link-form.js.map +1 -0
- package/dist/controls/rich-text/markdown.d.ts +6 -0
- package/dist/controls/rich-text/markdown.js +181 -0
- package/dist/controls/rich-text/markdown.js.map +1 -0
- package/dist/controls/rich-text/ops.d.ts +35 -0
- package/dist/controls/rich-text/ops.js +316 -0
- 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/toolbar.d.ts +89 -0
- package/dist/controls/rich-text/toolbar.js +343 -0
- package/dist/controls/rich-text/toolbar.js.map +1 -0
- package/dist/controls/scale.d.ts +56 -0
- package/dist/controls/scale.js +563 -0
- package/dist/controls/scale.js.map +1 -0
- package/dist/controls/slot-register.d.ts +1 -0
- package/dist/controls/slot-register.js +16 -0
- package/dist/controls/slot-register.js.map +1 -0
- package/dist/controls/slot-services.d.ts +122 -0
- package/dist/controls/slot-services.js +155 -0
- package/dist/controls/slot-services.js.map +1 -0
- package/dist/controls/slot.d.ts +33 -0
- package/dist/controls/slot.js +366 -0
- package/dist/controls/slot.js.map +1 -0
- package/dist/controls/table/index.d.ts +1 -0
- package/dist/controls/table/index.js +12 -0
- package/dist/controls/table/index.js.map +1 -0
- package/dist/controls/table/prod.d.ts +21 -0
- package/dist/controls/table/prod.js +79 -0
- package/dist/controls/table/prod.js.map +1 -0
- package/dist/controls/table/refs.d.ts +50 -0
- package/dist/controls/table/refs.js +79 -0
- package/dist/controls/table/refs.js.map +1 -0
- package/dist/controls/table/stored.d.ts +15 -0
- package/dist/controls/table/stored.js +44 -0
- package/dist/controls/table/stored.js.map +1 -0
- package/dist/controls/table/table-editor.d.ts +103 -0
- package/dist/controls/table/table-editor.js +2725 -0
- package/dist/controls/table/table-editor.js.map +1 -0
- package/dist/controls/table/table-link.d.ts +24 -0
- package/dist/controls/table/table-link.js +180 -0
- package/dist/controls/table/table-link.js.map +1 -0
- package/dist/controls/table/table.d.ts +9 -0
- package/dist/controls/table/table.js +103 -0
- package/dist/controls/table/table.js.map +1 -0
- package/dist/controls/text.d.ts +17 -0
- package/dist/controls/text.js +322 -0
- 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/dist/engine/array.d.ts +101 -0
- package/dist/engine/array.js +906 -0
- package/dist/engine/array.js.map +1 -0
- package/dist/engine/bits.d.ts +24 -0
- package/dist/engine/bits.js +60 -0
- package/dist/engine/bits.js.map +1 -0
- package/dist/engine/breadcrumb.d.ts +45 -0
- package/dist/engine/breadcrumb.js +63 -0
- package/dist/engine/breadcrumb.js.map +1 -0
- package/dist/engine/expand.d.ts +66 -0
- package/dist/engine/expand.js +153 -0
- package/dist/engine/expand.js.map +1 -0
- package/dist/engine/field-list.d.ts +20 -0
- package/dist/engine/field-list.js +19 -0
- package/dist/engine/field-list.js.map +1 -0
- package/dist/engine/field-shell.d.ts +49 -0
- package/dist/engine/field-shell.js +988 -0
- package/dist/engine/field-shell.js.map +1 -0
- package/dist/engine/frame.d.ts +122 -0
- package/dist/engine/frame.js +601 -0
- package/dist/engine/frame.js.map +1 -0
- package/dist/engine/group-summary.d.ts +5 -0
- package/dist/engine/group-summary.js +70 -0
- package/dist/engine/group-summary.js.map +1 -0
- package/dist/engine/grouping.d.ts +238 -0
- package/dist/engine/grouping.js +996 -0
- package/dist/engine/grouping.js.map +1 -0
- package/dist/engine/item-list.d.ts +99 -0
- package/dist/engine/item-list.js +725 -0
- package/dist/engine/item-list.js.map +1 -0
- package/dist/engine/kit-field.d.ts +72 -0
- package/dist/engine/kit-field.js +558 -0
- package/dist/engine/kit-field.js.map +1 -0
- package/dist/engine/schema-form.d.ts +116 -0
- package/dist/engine/schema-form.js +462 -0
- package/dist/engine/schema-form.js.map +1 -0
- package/dist/engine/slot.d.ts +13 -0
- package/dist/engine/slot.js +216 -0
- package/dist/engine/slot.js.map +1 -0
- package/dist/index.d.ts +45 -3139
- package/dist/index.js +47 -2036
- package/dist/index.js.map +1 -0
- package/dist/kit.css +75 -0
- package/dist/lib/cn.d.ts +4 -0
- package/dist/lib/cn.js +56 -0
- package/dist/lib/cn.js.map +1 -0
- package/dist/lib/columns.d.ts +14 -0
- package/dist/lib/columns.js +30 -0
- package/dist/lib/columns.js.map +1 -0
- package/dist/lib/frames.d.ts +36 -0
- package/dist/lib/frames.js +214 -0
- 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/dist/lib/icons.d.ts +16 -0
- package/dist/lib/icons.js +173 -0
- 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/dist/lib/path.d.ts +29 -0
- package/dist/lib/path.js +66 -0
- package/dist/lib/path.js.map +1 -0
- package/dist/lib/schema.d.ts +80 -0
- package/dist/lib/schema.js +384 -0
- package/dist/lib/schema.js.map +1 -0
- package/dist/lib/utils.d.ts +7 -0
- package/dist/lib/utils.js +37 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/lib/validate.d.ts +30 -0
- package/dist/lib/validate.js +224 -0
- 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/dist/schema/adapters.d.ts +28 -0
- package/dist/schema/adapters.js +492 -0
- package/dist/schema/adapters.js.map +1 -0
- package/dist/schema/help.d.ts +27 -0
- package/dist/schema/help.js +56 -0
- package/dist/schema/help.js.map +1 -0
- package/dist/schema/scale.d.ts +69 -0
- package/dist/schema/scale.js +250 -0
- package/dist/schema/scale.js.map +1 -0
- package/dist/schema/sources.d.ts +103 -0
- package/dist/schema/sources.js +65 -0
- package/dist/schema/sources.js.map +1 -0
- package/dist/schema/table.d.ts +319 -0
- package/dist/schema/table.js +1199 -0
- package/dist/schema/table.js.map +1 -0
- package/dist/schema/types.d.ts +297 -0
- package/dist/schema/types.js +14 -0
- 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 +20 -1504
- package/dist/theme.js +43 -4126
- package/dist/theme.js.map +1 -0
- package/dist/tokens.css +542 -0
- package/dist/types.d.ts +17 -0
- package/dist/types.js +0 -0
- package/dist/ui/action-tray.d.ts +54 -0
- package/dist/ui/action-tray.js +154 -0
- 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/dist/ui/button.d.ts +57 -0
- package/dist/ui/button.js +201 -0
- package/dist/ui/button.js.map +1 -0
- package/dist/ui/choice-switch.d.ts +36 -0
- package/dist/ui/choice-switch.js +57 -0
- package/dist/ui/choice-switch.js.map +1 -0
- package/dist/ui/controls.d.ts +83 -0
- package/dist/ui/controls.js +331 -0
- package/dist/ui/controls.js.map +1 -0
- package/dist/ui/display.d.ts +163 -0
- package/dist/ui/display.js +455 -0
- package/dist/ui/display.js.map +1 -0
- package/dist/ui/expanded-editor-modal.d.ts +26 -0
- package/dist/ui/expanded-editor-modal.js +140 -0
- package/dist/ui/expanded-editor-modal.js.map +1 -0
- package/dist/ui/field-context.d.ts +12 -0
- package/dist/ui/field-context.js +23 -0
- package/dist/ui/field-context.js.map +1 -0
- package/dist/ui/floating-panel.d.ts +152 -0
- package/dist/ui/floating-panel.js +928 -0
- package/dist/ui/floating-panel.js.map +1 -0
- package/dist/ui/index.d.ts +16 -0
- package/dist/ui/index.js +18 -0
- package/dist/ui/input.d.ts +78 -0
- package/dist/ui/input.js +250 -0
- package/dist/ui/input.js.map +1 -0
- package/dist/ui/mode-bar.d.ts +31 -0
- package/dist/ui/mode-bar.js +65 -0
- package/dist/ui/mode-bar.js.map +1 -0
- package/dist/ui/overlay.d.ts +195 -0
- package/dist/ui/overlay.js +697 -0
- package/dist/ui/overlay.js.map +1 -0
- package/dist/ui/path-crumbs.d.ts +90 -0
- package/dist/ui/path-crumbs.js +566 -0
- package/dist/ui/path-crumbs.js.map +1 -0
- package/dist/ui/presence.d.ts +16 -0
- package/dist/ui/presence.js +65 -0
- package/dist/ui/presence.js.map +1 -0
- package/dist/ui/select.d.ts +66 -0
- package/dist/ui/select.js +407 -0
- package/dist/ui/select.js.map +1 -0
- package/dist/ui/shortcut-hint.d.ts +14 -0
- package/dist/ui/shortcut-hint.js +35 -0
- 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/dist/ui/surfaces.d.ts +23 -0
- package/dist/ui/surfaces.js +26 -0
- 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/dist/ui/tooltip-root.d.ts +13 -0
- package/dist/ui/tooltip-root.js +77 -0
- package/dist/ui/tooltip-root.js.map +1 -0
- package/dist/ui/variants.d.ts +15 -0
- package/dist/ui/variants.js +14 -0
- package/dist/ui/variants.js.map +1 -0
- package/package.json +76 -50
- package/LICENSE +0 -21
- package/dist/_chunks-cjs/_visual-editing.js +0 -5898
- package/dist/_chunks-cjs/refractor.js +0 -22
- package/dist/_chunks-es/_visual-editing.mjs +0 -5904
- package/dist/_chunks-es/refractor.mjs +0 -25
- package/dist/_color.d.mts +0 -119
- package/dist/_color.d.ts +0 -119
- package/dist/_color.js +0 -1412
- package/dist/_color.mjs +0 -1411
- package/dist/_visual-editing.d.mts +0 -1126
- package/dist/_visual-editing.d.ts +0 -1126
- package/dist/_visual-editing.js +0 -30
- package/dist/_visual-editing.mjs +0 -30
- package/dist/index.d.mts +0 -3140
- package/dist/index.mjs +0 -2044
- package/dist/theme.d.mts +0 -1506
- package/dist/theme.mjs +0 -4126
- package/exports/_visual-editing.ts +0 -31
- package/exports/index.ts +0 -1
- package/exports/theme.ts +0 -1
- package/src/color/index.d.mts +0 -119
- package/src/color/index.mjs +0 -1411
- package/src/core/__workshop__/constants.ts +0 -293
- package/src/core/_compat.ts +0 -264
- package/src/core/components/autocomplete/__mocks__/apiStore.ts +0 -49
- package/src/core/components/autocomplete/__mocks__/countries.ts +0 -245
- package/src/core/components/autocomplete/__workshop__/async.tsx +0 -156
- package/src/core/components/autocomplete/__workshop__/constrainedHeight.tsx +0 -137
- package/src/core/components/autocomplete/__workshop__/custom.tsx +0 -89
- package/src/core/components/autocomplete/__workshop__/example.tsx +0 -79
- package/src/core/components/autocomplete/__workshop__/focusAndBlur.tsx +0 -36
- package/src/core/components/autocomplete/__workshop__/fullscreen.tsx +0 -294
- package/src/core/components/autocomplete/__workshop__/index.ts +0 -39
- package/src/core/components/autocomplete/__workshop__/types.ts +0 -4
- package/src/core/components/autocomplete/autocomplete.styles.tsx +0 -39
- package/src/core/components/autocomplete/autocomplete.tsx +0 -767
- package/src/core/components/autocomplete/autocompleteOption.tsx +0 -45
- package/src/core/components/autocomplete/autocompleteReducer.ts +0 -47
- package/src/core/components/autocomplete/constants.ts +0 -28
- package/src/core/components/autocomplete/index.ts +0 -2
- package/src/core/components/autocomplete/types.ts +0 -108
- package/src/core/components/breadcrumbs/__workshop__/example.tsx +0 -62
- package/src/core/components/breadcrumbs/__workshop__/index.ts +0 -14
- package/src/core/components/breadcrumbs/breadcrumbs.styles.ts +0 -18
- package/src/core/components/breadcrumbs/breadcrumbs.test.tsx +0 -51
- package/src/core/components/breadcrumbs/breadcrumbs.tsx +0 -133
- package/src/core/components/breadcrumbs/index.ts +0 -1
- package/src/core/components/dialog/__workshop__/activate.tsx +0 -134
- package/src/core/components/dialog/__workshop__/autoFocus.tsx +0 -29
- package/src/core/components/dialog/__workshop__/index.ts +0 -19
- package/src/core/components/dialog/__workshop__/layering.tsx +0 -41
- package/src/core/components/dialog/__workshop__/nested.tsx +0 -72
- package/src/core/components/dialog/__workshop__/onScroll.tsx +0 -39
- package/src/core/components/dialog/__workshop__/panes.tsx +0 -82
- package/src/core/components/dialog/__workshop__/position.tsx +0 -30
- package/src/core/components/dialog/__workshop__/props.tsx +0 -75
- package/src/core/components/dialog/__workshop__/provider.tsx +0 -11
- package/src/core/components/dialog/__workshop__/wrapped.tsx +0 -76
- package/src/core/components/dialog/dialog.tsx +0 -430
- package/src/core/components/dialog/dialogContext.ts +0 -20
- package/src/core/components/dialog/dialogProvider.tsx +0 -35
- package/src/core/components/dialog/index.ts +0 -4
- package/src/core/components/dialog/styles.ts +0 -77
- package/src/core/components/dialog/useDialog.ts +0 -11
- package/src/core/components/hotkeys/__workshop__/index.ts +0 -14
- package/src/core/components/hotkeys/__workshop__/plain.tsx +0 -9
- package/src/core/components/hotkeys/hotkeys.test.tsx +0 -42
- package/src/core/components/hotkeys/hotkeys.tsx +0 -66
- package/src/core/components/hotkeys/index.ts +0 -1
- package/src/core/components/index.ts +0 -9
- package/src/core/components/menu/__workshop__/asComponent.tsx +0 -45
- package/src/core/components/menu/__workshop__/avatarMenu.tsx +0 -51
- package/src/core/components/menu/__workshop__/closableMenuButton.tsx +0 -46
- package/src/core/components/menu/__workshop__/constrainedInBoundary.tsx +0 -134
- package/src/core/components/menu/__workshop__/customMenuItem.tsx +0 -45
- package/src/core/components/menu/__workshop__/customSelectedState.tsx +0 -39
- package/src/core/components/menu/__workshop__/disableFocusOnClose.tsx +0 -40
- package/src/core/components/menu/__workshop__/groups.tsx +0 -156
- package/src/core/components/menu/__workshop__/index.ts +0 -89
- package/src/core/components/menu/__workshop__/menuButton.tsx +0 -80
- package/src/core/components/menu/__workshop__/menuGroupRight.tsx +0 -58
- package/src/core/components/menu/__workshop__/nestedMenu.tsx +0 -22
- package/src/core/components/menu/__workshop__/onCloseMenuButton.tsx +0 -41
- package/src/core/components/menu/__workshop__/selectedItem.tsx +0 -69
- package/src/core/components/menu/__workshop__/shouldFocus.tsx +0 -47
- package/src/core/components/menu/__workshop__/tones.tsx +0 -25
- package/src/core/components/menu/__workshop__/withoutArrow.tsx +0 -32
- package/src/core/components/menu/helpers.ts +0 -82
- package/src/core/components/menu/index.ts +0 -5
- package/src/core/components/menu/menu.spacing.test.tsx +0 -63
- package/src/core/components/menu/menu.test.tsx +0 -125
- package/src/core/components/menu/menu.tsx +0 -178
- package/src/core/components/menu/menuButton.tsx +0 -268
- package/src/core/components/menu/menuContext.ts +0 -18
- package/src/core/components/menu/menuDivider.ts +0 -23
- package/src/core/components/menu/menuGroup.spacing.test.tsx +0 -63
- package/src/core/components/menu/menuGroup.tsx +0 -233
- package/src/core/components/menu/menuItem.spacing.test.tsx +0 -59
- package/src/core/components/menu/menuItem.tsx +0 -197
- package/src/core/components/menu/useMenu.ts +0 -21
- package/src/core/components/menu/useMenuController.ts +0 -231
- package/src/core/components/skeleton/__workshop__/delay.tsx +0 -70
- package/src/core/components/skeleton/__workshop__/index.ts +0 -11
- package/src/core/components/skeleton/__workshop__/skeleton.tsx +0 -64
- package/src/core/components/skeleton/index.ts +0 -2
- package/src/core/components/skeleton/skeleton.tsx +0 -57
- package/src/core/components/skeleton/styles.ts +0 -50
- package/src/core/components/skeleton/textSkeleton.tsx +0 -122
- package/src/core/components/tab/__workshop__/example.tsx +0 -79
- package/src/core/components/tab/__workshop__/index.ts +0 -14
- package/src/core/components/tab/index.ts +0 -3
- package/src/core/components/tab/tab.tsx +0 -101
- package/src/core/components/tab/tabList.test.tsx +0 -48
- package/src/core/components/tab/tabList.tsx +0 -70
- package/src/core/components/tab/tabPanel.tsx +0 -39
- package/src/core/components/toast/__workshop__/hook.tsx +0 -71
- package/src/core/components/toast/__workshop__/index.ts +0 -19
- package/src/core/components/toast/__workshop__/toast.tsx +0 -26
- package/src/core/components/toast/index.ts +0 -4
- package/src/core/components/toast/styles.ts +0 -77
- package/src/core/components/toast/toast.test.tsx +0 -101
- package/src/core/components/toast/toast.tsx +0 -198
- package/src/core/components/toast/toastContext.ts +0 -7
- package/src/core/components/toast/toastLayer.tsx +0 -51
- package/src/core/components/toast/toastProvider.tsx +0 -113
- package/src/core/components/toast/toastState.ts +0 -6
- package/src/core/components/toast/types.ts +0 -26
- package/src/core/components/toast/useToast.ts +0 -25
- package/src/core/components/tree/__workshop__/basic.perf.ts +0 -19
- package/src/core/components/tree/__workshop__/basic.tsx +0 -105
- package/src/core/components/tree/__workshop__/index.ts +0 -21
- package/src/core/components/tree/__workshop__/tabFromElement.tsx +0 -84
- package/src/core/components/tree/helpers.ts +0 -105
- package/src/core/components/tree/index.ts +0 -4
- package/src/core/components/tree/style.ts +0 -105
- package/src/core/components/tree/tree.test.tsx +0 -55
- package/src/core/components/tree/tree.tsx +0 -240
- package/src/core/components/tree/treeContext.ts +0 -10
- package/src/core/components/tree/treeGroup.tsx +0 -28
- package/src/core/components/tree/treeItem.test.tsx +0 -65
- package/src/core/components/tree/treeItem.tsx +0 -224
- package/src/core/components/tree/types.ts +0 -25
- package/src/core/components/tree/useTree.ts +0 -17
- package/src/core/constants.ts +0 -79
- package/src/core/helpers/animation.ts +0 -27
- package/src/core/helpers/element.ts +0 -55
- package/src/core/helpers/focus.ts +0 -100
- package/src/core/helpers/index.ts +0 -4
- package/src/core/helpers/scroll.ts +0 -15
- package/src/core/hooks/index.ts +0 -12
- package/src/core/hooks/useArrayProp.ts +0 -17
- package/src/core/hooks/useClickOutside.test.tsx +0 -482
- package/src/core/hooks/useClickOutside.ts +0 -118
- package/src/core/hooks/useClickOutsideEvent.test.tsx +0 -115
- package/src/core/hooks/useClickOutsideEvent.ts +0 -73
- package/src/core/hooks/useCustomValidity.ts +0 -13
- package/src/core/hooks/useDelayed.test.ts +0 -88
- package/src/core/hooks/useDelayedState.ts +0 -36
- package/src/core/hooks/useElementRect/__workshop__/example.tsx +0 -32
- package/src/core/hooks/useElementRect/__workshop__/index.ts +0 -14
- package/src/core/hooks/useElementRect/index.ts +0 -1
- package/src/core/hooks/useElementRect/useElementRect.ts +0 -13
- package/src/core/hooks/useElementSize.ts +0 -19
- package/src/core/hooks/useForwardedRef.ts +0 -19
- package/src/core/hooks/useGlobalKeyDown.ts +0 -24
- package/src/core/hooks/useIsomorphicEffect.ts +0 -7
- package/src/core/hooks/useMatchMedia.ts +0 -28
- package/src/core/hooks/useMediaIndex/__workshop__/index.ts +0 -14
- package/src/core/hooks/useMediaIndex/__workshop__/test.tsx +0 -14
- package/src/core/hooks/useMediaIndex/index.ts +0 -1
- package/src/core/hooks/useMediaIndex/useMediaIndex.test.tsx +0 -36
- package/src/core/hooks/useMediaIndex/useMediaIndex.ts +0 -102
- package/src/core/hooks/useMounted.ts +0 -15
- package/src/core/hooks/usePrefersDark.hydration.test.tsx +0 -56
- package/src/core/hooks/usePrefersDark.test.tsx +0 -19
- package/src/core/hooks/usePrefersDark.ts +0 -16
- package/src/core/hooks/usePrefersReducedMotion.hydration.test.tsx +0 -56
- package/src/core/hooks/usePrefersReducedMotion.test.tsx +0 -19
- package/src/core/hooks/usePrefersReducedMotion.ts +0 -16
- package/src/core/index.ts +0 -10
- package/src/core/lib/createGlobalScopedContext.ts +0 -36
- package/src/core/lib/globalScope.ts +0 -19
- package/src/core/lib/isRecord.ts +0 -3
- package/src/core/middleware/origin.ts +0 -47
- package/src/core/observers/elementSizeObserver.ts +0 -116
- package/src/core/observers/index.ts +0 -2
- package/src/core/observers/resizeObserver.ts +0 -9
- package/src/core/primitives/_selectable/index.ts +0 -1
- package/src/core/primitives/_selectable/selectable.tsx +0 -15
- package/src/core/primitives/_selectable/style.ts +0 -115
- package/src/core/primitives/avatar/__workshop__/asButton.tsx +0 -14
- package/src/core/primitives/avatar/__workshop__/index.ts +0 -29
- package/src/core/primitives/avatar/__workshop__/stack.tsx +0 -25
- package/src/core/primitives/avatar/__workshop__/withinButton.tsx +0 -63
- package/src/core/primitives/avatar/__workshop__/withinMenuItem.tsx +0 -70
- package/src/core/primitives/avatar/avatar.tsx +0 -200
- package/src/core/primitives/avatar/avatarCounter.tsx +0 -91
- package/src/core/primitives/avatar/avatarStack.tsx +0 -100
- package/src/core/primitives/avatar/index.ts +0 -4
- package/src/core/primitives/avatar/styles.ts +0 -167
- package/src/core/primitives/avatar/types.ts +0 -17
- package/src/core/primitives/badge/__workshop__/index.ts +0 -19
- package/src/core/primitives/badge/__workshop__/props.tsx +0 -30
- package/src/core/primitives/badge/__workshop__/tones.tsx +0 -21
- package/src/core/primitives/badge/badge.test.tsx +0 -16
- package/src/core/primitives/badge/badge.tsx +0 -70
- package/src/core/primitives/badge/index.ts +0 -1
- package/src/core/primitives/badge/styles.ts +0 -20
- package/src/core/primitives/badge/types.ts +0 -8
- package/src/core/primitives/box/__workshop__/asComponent.tsx +0 -31
- package/src/core/primitives/box/__workshop__/index.ts +0 -24
- package/src/core/primitives/box/__workshop__/props.tsx +0 -20
- package/src/core/primitives/box/__workshop__/responsive.tsx +0 -20
- package/src/core/primitives/box/box.test.tsx +0 -142
- package/src/core/primitives/box/box.tsx +0 -154
- package/src/core/primitives/box/index.ts +0 -1
- package/src/core/primitives/button/__workshop__/custom.tsx +0 -51
- package/src/core/primitives/button/__workshop__/customIcons.tsx +0 -30
- package/src/core/primitives/button/__workshop__/disabled.tsx +0 -74
- package/src/core/primitives/button/__workshop__/index.ts +0 -59
- package/src/core/primitives/button/__workshop__/labelUploadButton.tsx +0 -36
- package/src/core/primitives/button/__workshop__/mixedChildren.tsx +0 -12
- package/src/core/primitives/button/__workshop__/props.tsx +0 -55
- package/src/core/primitives/button/__workshop__/stacked.tsx +0 -58
- package/src/core/primitives/button/__workshop__/styled1.tsx +0 -17
- package/src/core/primitives/button/__workshop__/styled2.tsx +0 -19
- package/src/core/primitives/button/__workshop__/uploadButton.tsx +0 -28
- package/src/core/primitives/button/button.test.tsx +0 -82
- package/src/core/primitives/button/button.tsx +0 -210
- package/src/core/primitives/button/index.ts +0 -1
- package/src/core/primitives/button/styles.ts +0 -117
- package/src/core/primitives/card/__workshop__/allTones.tsx +0 -25
- package/src/core/primitives/card/__workshop__/asButton.tsx +0 -107
- package/src/core/primitives/card/__workshop__/asComponent.tsx +0 -27
- package/src/core/primitives/card/__workshop__/checkered.tsx +0 -26
- package/src/core/primitives/card/__workshop__/index.ts +0 -18
- package/src/core/primitives/card/__workshop__/interactive.tsx +0 -30
- package/src/core/primitives/card/__workshop__/listNavigation.tsx +0 -80
- package/src/core/primitives/card/__workshop__/props.tsx +0 -53
- package/src/core/primitives/card/__workshop__/selected.tsx +0 -94
- package/src/core/primitives/card/__workshop__/styled.tsx +0 -14
- package/src/core/primitives/card/card.tsx +0 -128
- package/src/core/primitives/card/index.ts +0 -2
- package/src/core/primitives/card/styles.ts +0 -147
- package/src/core/primitives/card/types.ts +0 -11
- package/src/core/primitives/checkbox/__workshop__/example.tsx +0 -25
- package/src/core/primitives/checkbox/__workshop__/index.ts +0 -13
- package/src/core/primitives/checkbox/__workshop__/props.tsx +0 -33
- package/src/core/primitives/checkbox/__workshop__/readOnly.tsx +0 -16
- package/src/core/primitives/checkbox/__workshop__/tones.tsx +0 -28
- package/src/core/primitives/checkbox/checkbox.tsx +0 -73
- package/src/core/primitives/checkbox/index.ts +0 -1
- package/src/core/primitives/checkbox/styles.ts +0 -128
- package/src/core/primitives/code/__workshop__/index.ts +0 -19
- package/src/core/primitives/code/__workshop__/opticalAlignment.tsx +0 -48
- package/src/core/primitives/code/__workshop__/props.tsx +0 -21
- package/src/core/primitives/code/code.tsx +0 -55
- package/src/core/primitives/code/index.ts +0 -1
- package/src/core/primitives/code/refractor.tsx +0 -20
- package/src/core/primitives/code/styles.ts +0 -77
- package/src/core/primitives/container/__workshop__/example.tsx +0 -20
- package/src/core/primitives/container/__workshop__/index.ts +0 -8
- package/src/core/primitives/container/container.tsx +0 -54
- package/src/core/primitives/container/index.ts +0 -2
- package/src/core/primitives/container/styles.ts +0 -23
- package/src/core/primitives/container/types.ts +0 -6
- package/src/core/primitives/flex/__workshop__/example.tsx +0 -34
- package/src/core/primitives/flex/__workshop__/gap.tsx +0 -25
- package/src/core/primitives/flex/__workshop__/index.ts +0 -11
- package/src/core/primitives/flex/flex.tsx +0 -64
- package/src/core/primitives/flex/index.ts +0 -1
- package/src/core/primitives/grid/__workshop__/index.ts +0 -10
- package/src/core/primitives/grid/__workshop__/responsive.tsx +0 -54
- package/src/core/primitives/grid/grid.test.tsx +0 -80
- package/src/core/primitives/grid/grid.tsx +0 -74
- package/src/core/primitives/grid/index.ts +0 -1
- package/src/core/primitives/heading/__workshop__/index.ts +0 -19
- package/src/core/primitives/heading/__workshop__/opticalAlignment.tsx +0 -54
- package/src/core/primitives/heading/__workshop__/plain.tsx +0 -32
- package/src/core/primitives/heading/heading.tsx +0 -88
- package/src/core/primitives/heading/index.ts +0 -1
- package/src/core/primitives/heading/styles.ts +0 -64
- package/src/core/primitives/heading/types.ts +0 -7
- package/src/core/primitives/index.ts +0 -27
- package/src/core/primitives/inline/__workshop__/index.ts +0 -8
- package/src/core/primitives/inline/__workshop__/plain.tsx +0 -27
- package/src/core/primitives/inline/index.ts +0 -1
- package/src/core/primitives/inline/inline.test.tsx +0 -51
- package/src/core/primitives/inline/inline.tsx +0 -63
- package/src/core/primitives/inline/styles.ts +0 -32
- package/src/core/primitives/inline/types.ts +0 -6
- package/src/core/primitives/kbd/__workshop__/index.ts +0 -8
- package/src/core/primitives/kbd/__workshop__/plain.tsx +0 -9
- package/src/core/primitives/kbd/index.ts +0 -1
- package/src/core/primitives/kbd/kbd.tsx +0 -69
- package/src/core/primitives/label/__workshop__/index.ts +0 -19
- package/src/core/primitives/label/__workshop__/opticalAlignment.tsx +0 -48
- package/src/core/primitives/label/__workshop__/plain.tsx +0 -24
- package/src/core/primitives/label/index.ts +0 -1
- package/src/core/primitives/label/label.tsx +0 -87
- package/src/core/primitives/label/styles.ts +0 -45
- package/src/core/primitives/popover/__workshop__/AlignedStory.tsx +0 -77
- package/src/core/primitives/popover/__workshop__/MarginsStory.tsx +0 -31
- package/src/core/primitives/popover/__workshop__/MatchReferenceWidthStory.tsx +0 -32
- package/src/core/primitives/popover/__workshop__/OpenOnMountStory.tsx +0 -11
- package/src/core/primitives/popover/__workshop__/PlainStory.tsx +0 -71
- package/src/core/primitives/popover/__workshop__/RecursiveStory.tsx +0 -71
- package/src/core/primitives/popover/__workshop__/SidePanelStory.tsx +0 -89
- package/src/core/primitives/popover/__workshop__/TestStory.tsx +0 -97
- package/src/core/primitives/popover/__workshop__/index.ts +0 -49
- package/src/core/primitives/popover/constants.ts +0 -22
- package/src/core/primitives/popover/floating-ui/size.ts +0 -99
- package/src/core/primitives/popover/helpers.ts +0 -31
- package/src/core/primitives/popover/index.ts +0 -2
- package/src/core/primitives/popover/popover.tsx +0 -511
- package/src/core/primitives/popover/popoverCard.tsx +0 -166
- package/src/core/primitives/popover/types.ts +0 -7
- package/src/core/primitives/radio/__workshop__/example.tsx +0 -63
- package/src/core/primitives/radio/__workshop__/index.ts +0 -11
- package/src/core/primitives/radio/__workshop__/plain.tsx +0 -28
- package/src/core/primitives/radio/index.ts +0 -1
- package/src/core/primitives/radio/radio.tsx +0 -51
- package/src/core/primitives/radio/styles.ts +0 -117
- package/src/core/primitives/select/__workshop__/index.ts +0 -11
- package/src/core/primitives/select/__workshop__/plain.tsx +0 -27
- package/src/core/primitives/select/__workshop__/readOnly.tsx +0 -23
- package/src/core/primitives/select/index.ts +0 -1
- package/src/core/primitives/select/select.test.tsx +0 -52
- package/src/core/primitives/select/select.tsx +0 -94
- package/src/core/primitives/select/styles.ts +0 -166
- package/src/core/primitives/spinner/__workshop__/Props.tsx +0 -15
- package/src/core/primitives/spinner/__workshop__/index.ts +0 -14
- package/src/core/primitives/spinner/index.ts +0 -1
- package/src/core/primitives/spinner/spinner.tsx +0 -46
- package/src/core/primitives/stack/__workshop__/index.ts +0 -14
- package/src/core/primitives/stack/__workshop__/plain.tsx +0 -32
- package/src/core/primitives/stack/index.ts +0 -1
- package/src/core/primitives/stack/stack.test.tsx +0 -57
- package/src/core/primitives/stack/stack.tsx +0 -57
- package/src/core/primitives/stack/styles.ts +0 -32
- package/src/core/primitives/switch/__workshop__/example.tsx +0 -23
- package/src/core/primitives/switch/__workshop__/index.ts +0 -11
- package/src/core/primitives/switch/__workshop__/props.tsx +0 -21
- package/src/core/primitives/switch/index.ts +0 -1
- package/src/core/primitives/switch/styles.ts +0 -173
- package/src/core/primitives/switch/switch.tsx +0 -68
- package/src/core/primitives/text/__workshop__/colored.tsx +0 -30
- package/src/core/primitives/text/__workshop__/example.tsx +0 -39
- package/src/core/primitives/text/__workshop__/index.ts +0 -24
- package/src/core/primitives/text/__workshop__/opticalAlignment.tsx +0 -48
- package/src/core/primitives/text/index.ts +0 -1
- package/src/core/primitives/text/styles.ts +0 -74
- package/src/core/primitives/text/text.tsx +0 -89
- package/src/core/primitives/textArea/__workshop__/index.ts +0 -14
- package/src/core/primitives/textArea/__workshop__/plain.tsx +0 -50
- package/src/core/primitives/textArea/index.ts +0 -1
- package/src/core/primitives/textArea/textArea.tsx +0 -120
- package/src/core/primitives/textInput/__workshop__/clearButton.tsx +0 -30
- package/src/core/primitives/textInput/__workshop__/customValidity.tsx +0 -17
- package/src/core/primitives/textInput/__workshop__/index.ts +0 -44
- package/src/core/primitives/textInput/__workshop__/plain.tsx +0 -98
- package/src/core/primitives/textInput/__workshop__/readOnly.tsx +0 -9
- package/src/core/primitives/textInput/__workshop__/states.tsx +0 -53
- package/src/core/primitives/textInput/__workshop__/tones.tsx +0 -277
- package/src/core/primitives/textInput/__workshop__/typed.tsx +0 -23
- package/src/core/primitives/textInput/index.ts +0 -1
- package/src/core/primitives/textInput/textInput.test.tsx +0 -48
- package/src/core/primitives/textInput/textInput.tsx +0 -395
- package/src/core/primitives/tooltip/__workshop__/customPortal.tsx +0 -102
- package/src/core/primitives/tooltip/__workshop__/index.ts +0 -29
- package/src/core/primitives/tooltip/__workshop__/overflowingBoundary.tsx +0 -74
- package/src/core/primitives/tooltip/__workshop__/props.tsx +0 -107
- package/src/core/primitives/tooltip/__workshop__/resizableBoundary.tsx +0 -86
- package/src/core/primitives/tooltip/constants.ts +0 -23
- package/src/core/primitives/tooltip/index.ts +0 -2
- package/src/core/primitives/tooltip/tooltip.test.tsx +0 -452
- package/src/core/primitives/tooltip/tooltip.tsx +0 -495
- package/src/core/primitives/tooltip/tooltipCard.tsx +0 -109
- package/src/core/primitives/tooltip/tooltipDelayGroup/index.ts +0 -4
- package/src/core/primitives/tooltip/tooltipDelayGroup/tooltipDelayGroupContext.tsx +0 -11
- package/src/core/primitives/tooltip/tooltipDelayGroup/tooltipDelayGroupProvider.tsx +0 -57
- package/src/core/primitives/tooltip/tooltipDelayGroup/types.ts +0 -10
- package/src/core/primitives/tooltip/tooltipDelayGroup/useTooltipDelayGroup.ts +0 -13
- package/src/core/primitives/types.ts +0 -179
- package/src/core/styles/border/borderStyle.ts +0 -56
- package/src/core/styles/border/index.ts +0 -2
- package/src/core/styles/border/types.ts +0 -10
- package/src/core/styles/box/boxStyle.ts +0 -69
- package/src/core/styles/box/index.ts +0 -2
- package/src/core/styles/box/types.ts +0 -11
- package/src/core/styles/card/_cardColorStyle.ts +0 -108
- package/src/core/styles/card/index.ts +0 -1
- package/src/core/styles/flex/flexItemStyle.ts +0 -27
- package/src/core/styles/flex/flexStyle.ts +0 -70
- package/src/core/styles/flex/index.ts +0 -3
- package/src/core/styles/flex/types.ts +0 -25
- package/src/core/styles/focusRing/index.ts +0 -25
- package/src/core/styles/font/codeFontStyle.ts +0 -13
- package/src/core/styles/font/headingFontStyle.ts +0 -13
- package/src/core/styles/font/index.ts +0 -6
- package/src/core/styles/font/labelFontStyle.ts +0 -13
- package/src/core/styles/font/responsiveFont.ts +0 -103
- package/src/core/styles/font/textAlignStyle.ts +0 -19
- package/src/core/styles/font/textFontStyle.ts +0 -13
- package/src/core/styles/font/types.ts +0 -35
- package/src/core/styles/grid/gridItemStyle.ts +0 -82
- package/src/core/styles/grid/gridStyle.ts +0 -108
- package/src/core/styles/grid/index.ts +0 -3
- package/src/core/styles/grid/types.ts +0 -37
- package/src/core/styles/helpers.ts +0 -72
- package/src/core/styles/index.ts +0 -5
- package/src/core/styles/input/index.ts +0 -2
- package/src/core/styles/input/responsiveInputPaddingStyle.ts +0 -78
- package/src/core/styles/input/textInputStyle.ts +0 -263
- package/src/core/styles/internal.ts +0 -12
- package/src/core/styles/margin/index.ts +0 -2
- package/src/core/styles/margin/marginStyle.ts +0 -21
- package/src/core/styles/margin/marginsStyle.test.ts +0 -33
- package/src/core/styles/margin/types.ts +0 -9
- package/src/core/styles/padding/index.ts +0 -2
- package/src/core/styles/padding/paddingStyle.test.ts +0 -33
- package/src/core/styles/padding/paddingStyle.ts +0 -21
- package/src/core/styles/padding/types.ts +0 -12
- package/src/core/styles/radius/index.ts +0 -2
- package/src/core/styles/radius/radiusStyle.ts +0 -23
- package/src/core/styles/radius/types.ts +0 -8
- package/src/core/styles/shadow/index.ts +0 -2
- package/src/core/styles/shadow/shadowStyle.ts +0 -29
- package/src/core/styles/shadow/types.ts +0 -6
- package/src/core/styles/types.ts +0 -8
- package/src/core/theme/__workshop__/build/Root.tsx +0 -367
- package/src/core/theme/__workshop__/build/helpers.ts +0 -46
- package/src/core/theme/__workshop__/build/story.tsx +0 -465
- package/src/core/theme/__workshop__/canvas.tsx +0 -352
- package/src/core/theme/__workshop__/color.tsx +0 -62
- package/src/core/theme/__workshop__/debug/story.tsx +0 -408
- package/src/core/theme/__workshop__/index.ts +0 -39
- package/src/core/theme/__workshop__/layer.tsx +0 -78
- package/src/core/theme/__workshop__/nestedProvider.tsx +0 -15
- package/src/core/theme/index.ts +0 -5
- package/src/core/theme/theme.test.tsx +0 -73
- package/src/core/theme/themeColorProvider.tsx +0 -29
- package/src/core/theme/themeContext.ts +0 -10
- package/src/core/theme/themeProvider.tsx +0 -62
- package/src/core/theme/types.ts +0 -12
- package/src/core/theme/useRootTheme.ts +0 -17
- package/src/core/theme/useTheme.ts +0 -16
- package/src/core/types/avatar.ts +0 -14
- package/src/core/types/badge.ts +0 -12
- package/src/core/types/box.ts +0 -19
- package/src/core/types/button.ts +0 -21
- package/src/core/types/card.ts +0 -6
- package/src/core/types/component.ts +0 -32
- package/src/core/types/dialog.ts +0 -4
- package/src/core/types/flex.ts +0 -30
- package/src/core/types/grid.ts +0 -14
- package/src/core/types/gridItem.ts +0 -29
- package/src/core/types/index.ts +0 -15
- package/src/core/types/placement.ts +0 -18
- package/src/core/types/popover.ts +0 -4
- package/src/core/types/radius.ts +0 -4
- package/src/core/types/selectable.ts +0 -6
- package/src/core/types/text.ts +0 -4
- package/src/core/utils/arrow/arrow.tsx +0 -123
- package/src/core/utils/arrow/cmds.ts +0 -91
- package/src/core/utils/arrow/index.ts +0 -1
- package/src/core/utils/boundaryElement/__workshop__/index.ts +0 -14
- package/src/core/utils/boundaryElement/__workshop__/plain.tsx +0 -19
- package/src/core/utils/boundaryElement/boundaryElement.test.tsx +0 -100
- package/src/core/utils/boundaryElement/boundaryElementContext.ts +0 -7
- package/src/core/utils/boundaryElement/boundaryElementProvider.tsx +0 -24
- package/src/core/utils/boundaryElement/index.ts +0 -3
- package/src/core/utils/boundaryElement/types.ts +0 -7
- package/src/core/utils/boundaryElement/useBoundaryElement.ts +0 -26
- package/src/core/utils/conditionalWrapper/conditionalWrapper.tsx +0 -21
- package/src/core/utils/conditionalWrapper/index.ts +0 -1
- package/src/core/utils/elementQuery/__workshop__/customMedia.tsx +0 -30
- package/src/core/utils/elementQuery/__workshop__/index.ts +0 -14
- package/src/core/utils/elementQuery/elementQuery.tsx +0 -53
- package/src/core/utils/elementQuery/helpers.ts +0 -27
- package/src/core/utils/elementQuery/index.ts +0 -1
- package/src/core/utils/errorBoundary.tsx +0 -48
- package/src/core/utils/getElementRef.ts +0 -26
- package/src/core/utils/index.ts +0 -9
- package/src/core/utils/layer/__workshop__/_debug.tsx +0 -17
- package/src/core/utils/layer/__workshop__/index.ts +0 -24
- package/src/core/utils/layer/__workshop__/multipleRoots.tsx +0 -49
- package/src/core/utils/layer/__workshop__/nested.tsx +0 -98
- package/src/core/utils/layer/__workshop__/responsiveZOffset.tsx +0 -13
- package/src/core/utils/layer/getLayerContext.test.ts +0 -30
- package/src/core/utils/layer/getLayerContext.ts +0 -21
- package/src/core/utils/layer/index.ts +0 -4
- package/src/core/utils/layer/layer.test.tsx +0 -108
- package/src/core/utils/layer/layer.tsx +0 -98
- package/src/core/utils/layer/layerContext.ts +0 -7
- package/src/core/utils/layer/layerProvider.tsx +0 -111
- package/src/core/utils/layer/types.ts +0 -9
- package/src/core/utils/layer/useLayer.ts +0 -26
- package/src/core/utils/portal/__workshop__/index.ts +0 -14
- package/src/core/utils/portal/__workshop__/named.tsx +0 -63
- package/src/core/utils/portal/index.ts +0 -4
- package/src/core/utils/portal/portal.test.tsx +0 -103
- package/src/core/utils/portal/portal.ts +0 -32
- package/src/core/utils/portal/portalContext.ts +0 -31
- package/src/core/utils/portal/portalProvider.tsx +0 -47
- package/src/core/utils/portal/types.ts +0 -9
- package/src/core/utils/portal/usePortal.ts +0 -25
- package/src/core/utils/spanWithTextOverflow.tsx +0 -10
- package/src/core/utils/srOnly/index.ts +0 -1
- package/src/core/utils/srOnly/srOnly.tsx +0 -36
- package/src/core/utils/virtualList/__workshop__/changingProps.tsx +0 -36
- package/src/core/utils/virtualList/__workshop__/elementScroll.tsx +0 -24
- package/src/core/utils/virtualList/__workshop__/index.ts +0 -29
- package/src/core/utils/virtualList/__workshop__/infiniteList.tsx +0 -48
- package/src/core/utils/virtualList/__workshop__/windowScrolll.tsx +0 -22
- package/src/core/utils/virtualList/index.ts +0 -1
- package/src/core/utils/virtualList/virtualList.tsx +0 -200
- package/src/theme/build/_deprecated/color/_selectable/createSelectableTones.ts +0 -76
- package/src/theme/build/_deprecated/color/_solid/createSolidTones.ts +0 -54
- package/src/theme/build/_deprecated/color/button/createButtonModes.ts +0 -22
- package/src/theme/build/_deprecated/color/button/createButtonTones.ts +0 -55
- package/src/theme/build/_deprecated/color/card/createCardStates.ts +0 -60
- package/src/theme/build/_deprecated/color/color.test.ts +0 -63
- package/src/theme/build/_deprecated/color/defaults.ts +0 -390
- package/src/theme/build/_deprecated/color/factory.ts +0 -142
- package/src/theme/build/_deprecated/color/index.ts +0 -1
- package/src/theme/build/_deprecated/color/input/createInputModes.ts +0 -81
- package/src/theme/build/_deprecated/color/muted/createMuted.ts +0 -54
- package/src/theme/build/_deprecated/color/spot/createSpot.ts +0 -20
- package/src/theme/build/buildColorTheme.test.ts +0 -183
- package/src/theme/build/buildColorTheme.ts +0 -499
- package/src/theme/build/buildTheme.test.ts +0 -87
- package/src/theme/build/buildTheme.ts +0 -36
- package/src/theme/build/colorToken/colorToken.ts +0 -19
- package/src/theme/build/colorToken/compileColorToken.ts +0 -21
- package/src/theme/build/colorToken/index.ts +0 -2
- package/src/theme/build/colorToken/types.ts +0 -6
- package/src/theme/build/index.ts +0 -3
- package/src/theme/build/lib/color-fns/blend/index.ts +0 -3
- package/src/theme/build/lib/color-fns/blend/mix.ts +0 -21
- package/src/theme/build/lib/color-fns/blend/multiply.ts +0 -18
- package/src/theme/build/lib/color-fns/blend/screen.ts +0 -18
- package/src/theme/build/lib/color-fns/color-fns.test.ts +0 -68
- package/src/theme/build/lib/color-fns/contrastRatio.ts +0 -31
- package/src/theme/build/lib/color-fns/convert.ts +0 -150
- package/src/theme/build/lib/color-fns/index.ts +0 -6
- package/src/theme/build/lib/color-fns/parse.ts +0 -60
- package/src/theme/build/lib/color-fns/rgba.ts +0 -10
- package/src/theme/build/lib/color-fns/types.ts +0 -28
- package/src/theme/build/lib/isRecord.ts +0 -3
- package/src/theme/build/lib/lazy.ts +0 -30
- package/src/theme/build/lib/utils.ts +0 -19
- package/src/theme/build/merge.ts +0 -26
- package/src/theme/build/mixThemeColor.test.ts +0 -21
- package/src/theme/build/mixThemeColor.ts +0 -53
- package/src/theme/build/renderColorTheme.ts +0 -532
- package/src/theme/build/renderColorValue.ts +0 -85
- package/src/theme/build/resolveColorTokens.ts +0 -268
- package/src/theme/build/theme.test.ts +0 -27
- package/src/theme/config/helpers.ts +0 -55
- package/src/theme/config/index.ts +0 -4
- package/src/theme/config/system.ts +0 -115
- package/src/theme/config/tokens/color/index.ts +0 -1
- package/src/theme/config/tokens/color/types.ts +0 -133
- package/src/theme/config/tokens/index.ts +0 -4
- package/src/theme/config/tokens/parseTokenKey.test.ts +0 -64
- package/src/theme/config/tokens/parseTokenKey.ts +0 -67
- package/src/theme/config/tokens/parseTokenValue.test.ts +0 -42
- package/src/theme/config/tokens/parseTokenValue.ts +0 -133
- package/src/theme/config/tokens/types.ts +0 -53
- package/src/theme/config/types.ts +0 -46
- package/src/theme/defaults/colorPalette.ts +0 -5
- package/src/theme/defaults/colorTokens.ts +0 -648
- package/src/theme/defaults/config.ts +0 -84
- package/src/theme/defaults/fonts.ts +0 -227
- package/src/theme/getScopedTheme.ts +0 -98
- package/src/theme/index.ts +0 -5
- package/src/theme/system/avatar.ts +0 -14
- package/src/theme/system/color/_constants.ts +0 -45
- package/src/theme/system/color/_helpers.ts +0 -24
- package/src/theme/system/color/_system.ts +0 -40
- package/src/theme/system/color/avatar.ts +0 -15
- package/src/theme/system/color/badge.ts +0 -16
- package/src/theme/system/color/button.ts +0 -17
- package/src/theme/system/color/color.ts +0 -34
- package/src/theme/system/color/index.ts +0 -13
- package/src/theme/system/color/input.ts +0 -25
- package/src/theme/system/color/kbd.ts +0 -8
- package/src/theme/system/color/selectable.ts +0 -12
- package/src/theme/system/color/shadow.ts +0 -7
- package/src/theme/system/color/state.ts +0 -43
- package/src/theme/system/color/syntax.ts +0 -41
- package/src/theme/system/css.ts +0 -14
- package/src/theme/system/focusRing.ts +0 -7
- package/src/theme/system/font.ts +0 -52
- package/src/theme/system/index.ts +0 -11
- package/src/theme/system/input.ts +0 -33
- package/src/theme/system/layer.ts +0 -8
- package/src/theme/system/shadow.ts +0 -19
- package/src/theme/system/styles.ts +0 -13
- package/src/theme/system/theme.ts +0 -138
- package/src/theme/system/v0/avatar.ts +0 -10
- package/src/theme/system/v0/color/_generic.ts +0 -35
- package/src/theme/system/v0/color/_system.ts +0 -17
- package/src/theme/system/v0/color/base.ts +0 -21
- package/src/theme/system/v0/color/button.ts +0 -42
- package/src/theme/system/v0/color/card.ts +0 -19
- package/src/theme/system/v0/color/color.ts +0 -40
- package/src/theme/system/v0/color/index.ts +0 -11
- package/src/theme/system/v0/color/input.ts +0 -34
- package/src/theme/system/v0/color/muted.ts +0 -26
- package/src/theme/system/v0/color/selectable.ts +0 -31
- package/src/theme/system/v0/color/solid.ts +0 -26
- package/src/theme/system/v0/color/spot.ts +0 -13
- package/src/theme/system/v0/index.ts +0 -3
- package/src/theme/system/v0/input.ts +0 -23
- package/src/theme/versioning/getTheme_v2.ts +0 -57
- package/src/theme/versioning/index.ts +0 -5
- package/src/theme/versioning/is_v0.ts +0 -6
- package/src/theme/versioning/is_v2.ts +0 -6
- package/src/theme/versioning/themeColor_v0_v2.ts +0 -243
- package/src/theme/versioning/themeColor_v2_v2_9.ts +0 -49
- package/src/theme/versioning/v0_v2.ts +0 -94
- package/src/theme/versioning/v2_v0.ts +0 -135
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-card.js","names":[],"sources":["../../../src/controls/rich-text/component-card.tsx"],"sourcesContent":["/**\n * The embedded component card (V2 features/blocks/instance-card.tsx + instance-ui.tsx StateChip / MissingNote / dialogs),\n * drawn when the host can look the component up (KitServices.useComponentInfo, component-services.ts):\n *\n * ┌ [icon] Inline CTA 🔗 2 places · ● Edited here ⋯ ┐ 36px strip\n * ├ ⚠ The original \"Product card\" was deleted. … [Keep as a separate copy] [Remove] ┤ missing only\n * │ the component itself, drawn live with this place's values (KitServices.ComponentPreview), else │\n * │ its snapshot where this place shows exactly that, else its fields; at most 240px, faded │\n * └──────────────────────────────────────────────────────────────────────────────┘\n *\n * Every state comes from the lookup or the stored copy: \"Missing component\" only when the library says there is no\n * such component, the count only when the host measured it, \"Edited here\" only for overrides of fields the component\n * has, \"Detached\" for a separate copy (V2 instances.ts `detached`), and \"Shared version changed\" only when the\n * component's current version (`info.publishedAt`) differs from the one the copy was taken from.\n *\n * A separate copy is made through the host (`copyComponent`, which answers what readers see now) and written as ONE\n * undo step (V2 detachNow: \"Make a separate copy\"); \"Use shared version again\" (V2 RelinkDialog) keeps this place's\n * edits as overrides or drops them, also one step. A host without `copyComponent` offers neither.\n *\n * Deviation from V2: V2 shows \"Shared version changed\" on a LINKED instance after a breaking release (instances.ts\n * `pending`). A linked instance here follows every publish of its component, so there is nothing to review; the\n * notice is drawn on a separate copy instead, whose source moved on, and it opens \"Use shared version again\".\n */\nimport * as React from \"react\";\nimport {\n IconAdjustmentsHorizontal, IconAlertTriangle, IconArrowBarToDown, IconArrowBarToUp, IconArrowUpRight, IconCheck, IconComponents, IconCopy, IconDots,\n IconGripVertical, IconLayoutNavbarCollapse, IconLayoutNavbarExpand, IconLink, IconRefresh, IconReplace, IconRestore, IconTrash, IconUnlink,\n} from \"@tabler/icons-react\";\nimport { cn } from \"../../lib/cn\";\nimport { eventKey } from \"../../lib/key-event\";\nimport { useKitServices, type KitServices } from \"../../context\";\nimport { Button, IconButton } from \"../../ui/button\";\nimport {\n Menu, MenuContent, MenuItem, MenuSeparator, MenuSub, MenuSubContent, MenuSubTrigger, MenuTrigger, Modal, ModalBody, ModalContent, ModalFooter, ModalHeader, Tooltip,\n} from \"../../ui/overlay\";\nimport type { KitComponentField, KitComponentInfo, KitComponentPreviewProps, KitInsertableComponent } from \"../component-services\";\nimport type { ComponentModel, IslandEl } from \"./dom\";\nimport type { IslandCtx } from \"./blocks\";\nimport { useCatalogComponents } from \"./catalog\";\nimport { ComponentPanel, closeComponentPanel, openComponentPanel, useComponentPanel } from \"./component-panel\";\n\n/** V2 NARROW: at or under this card width the scope chip shows its icon only. */\nconst NARROW = 480;\n/** V2 PREVIEW_CAP: the preview at rest is at most this tall, faded when its content is taller. */\nconst PREVIEW_H = 240;\n\nconst placesShort = (n: number) => `${n} ${n === 1 ? \"place\" : \"places\"}`;\n\nfunction useWidth(ref: React.RefObject<HTMLElement | null>) {\n const [w, setW] = React.useState(0);\n React.useLayoutEffect(() => {\n const el = ref.current;\n if (!el) return;\n setW(el.clientWidth);\n if (typeof ResizeObserver === \"undefined\") return;\n const ro = new ResizeObserver(() => setW(el.clientWidth));\n ro.observe(el);\n return () => ro.disconnect();\n }, [ref]);\n return w;\n}\n\n/** A stored value as one line of reading text, or null when it has none (lists, empty values, flags). */\nfunction readable(v: unknown): string | null {\n if (typeof v === \"number\") return String(v);\n if (typeof v === \"string\") {\n // an inline image (an icon prop) is kilobytes of base64, never readable text\n if (v.startsWith(\"data:image/\")) return \"Image\";\n // tags become spaces; the parser then decodes what is left (`l'Excellence` → l'Excellence, → space)\n const decoded = new DOMParser().parseFromString(v.replace(/<[^>]+>/g, \" \"), \"text/html\").body.textContent ?? \"\";\n const t = decoded.replace(/\\s+/g, \" \").trim();\n return t || null;\n }\n if (v && typeof v === \"object\" && !Array.isArray(v)) {\n // a rich-text value is { html, value, format }; an image { url, altText }\n // truthy, not `??`: an empty label must not hide the html or url after it\n const o = v as { label?: unknown; text?: unknown; title?: unknown; altText?: unknown; href?: unknown; url?: unknown; html?: unknown };\n return readable(o.label || o.text || o.title || o.altText || o.href || o.url || o.html);\n }\n return null;\n}\n\nconst parseObj = (s: string | undefined): Record<string, unknown> => {\n try {\n const v = s ? (JSON.parse(s) as unknown) : {};\n return v && typeof v === \"object\" && !Array.isArray(v) ? (v as Record<string, unknown>) : {};\n } catch {\n return {};\n }\n};\n/** True when `a` is a later instant than `b`; false when either is absent or unreadable (never a made-up \"changed\"). */\nconst laterThan = (a: string | null | undefined, b: string | undefined) => {\n const x = a ? Date.parse(a) : NaN;\n const y = b ? Date.parse(b) : NaN;\n return Number.isFinite(x) && Number.isFinite(y) && x > y;\n};\nconst same = (a: unknown, b: unknown) => a === b || JSON.stringify(a) === JSON.stringify(b);\n\ntype UseComponentInfo = NonNullable<KitServices[\"useComponentInfo\"]>;\n/**\n * \"Collapse preview\", remembered per component (V2 instance-card): read before the first render, so a reload never\n * draws the preview and then folds it away. Storage that is absent or throws reads as expanded.\n */\nfunction useCollapsed(ref: string | undefined): [boolean, (next: boolean) => void] {\n const key = ref ? `bcms:card-collapsed:${ref}` : null;\n const [collapsed, setState] = React.useState(() => {\n try {\n return !!key && globalThis.localStorage?.getItem(key) === \"1\";\n } catch {\n return false;\n }\n });\n const set = React.useCallback(\n (next: boolean) => {\n setState(next);\n if (!key) return;\n try {\n if (next) globalThis.localStorage?.setItem(key, \"1\");\n else globalThis.localStorage?.removeItem(key);\n } catch {\n // not remembered; the card still folds for this session\n }\n },\n [key],\n );\n return [collapsed, set];\n}\n\ntype SetComponent = (patch: Partial<ComponentModel> | ((m: ComponentModel) => ComponentModel), label: string, record?: boolean) => void;\n\nexport function ComponentCard({\n m, el, ctx, use, overrides, set,\n}: { m: ComponentModel; el: IslandEl; ctx: IslandCtx; use: UseComponentInfo; overrides: Record<string, unknown>; set: SetComponent }) {\n const { copyComponent, toast, ComponentPreview, IconGlyph, componentVariantMember, ComponentSettings, openComponent, componentHref } = useKitServices();\n // a linked place's layout is its family's member component (a variant is its own component): the card reads and\n // draws that member, as V2 draws the instance in its variant. No member → the layout stays named in the rows.\n const member = !m.detached && m.ref && m.variant ? componentVariantMember?.(m.ref, m.variant) : undefined;\n const ref = member ?? m.ref;\n const variant = member ? undefined : m.variant;\n const { info, loading, error } = use(ref ?? \"\");\n const card = React.useRef<HTMLDivElement | null>(null);\n const width = useWidth(card);\n const narrow = !!width && width <= NARROW;\n const [collapsed, setCollapsed] = useCollapsed(m.ref);\n const [dialog, setDialog] = React.useState<null | \"detach\" | \"relink\">(null);\n const [busy, setBusy] = React.useState(false);\n const detached = !!m.detached;\n const own = React.useMemo(() => parseObj(m.props), [m.props]);\n const missing = !ref || !!info?.missing;\n const name = info && !info.missing ? info.name : m.name || info?.name || \"Block\";\n const fieldKeys = new Set((info?.fields ?? []).map((f) => f.key));\n const edited = missing || detached ? 0 : Object.keys(overrides).filter((k) => fieldKeys.has(k)).length;\n const places = info?.places;\n const known = !!info || missing;\n // compared as instants, not strings: the same publish can be spelled two ways (precision, offset)\n const changed = detached && !missing && laterThan(info?.publishedAt, m.sourcePublishedAt);\n const state = detached ? `Detached${changed ? \", Shared version changed\" : \"\"}` : missing ? \"Missing block\" : edited || m.variant ? \"Edited here\" : \"Shared\";\n // V2 instance-ui: a required prop this place leaves empty marks the scope chip, never by colour alone\n const requiredEmpty = !missing && !detached && (info?.fields ?? []).some((f) => f.required && blank(f.key in overrides ? overrides[f.key] : f.value));\n const label = `${name} block${known ? `, ${state}` : \"\"}${known && !missing && !detached && places != null ? `, ${placesShort(places)}` : \"\"}${requiredEmpty ? `. ${REQUIRED_EMPTY}` : \"\"}`;\n const rows = detached ? copyRows(own, info?.fields, m.variant) : previewRows(missing, info?.fields, overrides, variant);\n // the picture is the component with its own values (the host's snapshot): drawn only where this place shows exactly\n // that. A separate copy, an edited place or another layout would be shown content it doesn't have, so those list\n // their values instead.\n const image = missing || detached || edited || variant ? null : info?.image || null;\n // V2 draws the component itself in the card, with this place's values (linked, edited or a separate copy): the host's\n // live renderer where it has one. Another layout lists its values (the renderer draws the component's own layout).\n const liveProps = React.useMemo(\n () => (detached ? own : { ...Object.fromEntries((info?.fields ?? []).flatMap((f) => (f.value !== undefined ? [[f.key, f.value]] : []))), ...overrides }),\n [detached, own, info?.fields, overrides],\n );\n const live = ComponentPreview && ref && info && !missing && !variant ? { Preview: ComponentPreview, ref } : null;\n const preview = live ? (\n <LivePreview Preview={live.Preview} componentId={live.ref} title={name} props={liveProps} rows={rows} />\n ) : image || rows.length ? (\n <PreviewWindow image={image} rows={rows} />\n ) : null;\n const canCopy = !!copyComponent && !!m.ref && !ctx.readOnly;\n const ro = !!ctx.readOnly;\n const linked = !missing && !detached;\n const open = useComponentPanel(el);\n const editing = !!open;\n const [cardEl, setCardEl] = React.useState<HTMLDivElement | null>(null);\n const cardRef = React.useCallback((n: HTMLDivElement | null) => {\n card.current = n;\n if (n) setCardEl(n);\n }, []);\n const openPanel = React.useCallback((focusKey?: string | null) => openComponentPanel(el, focusKey ?? null), [el]);\n const closePanel = React.useCallback(() => closeComponentPanel(el), [el]);\n const focusCard = React.useCallback(() => requestAnimationFrame(() => card.current?.focus({ preventScroll: true })), []);\n // removing the component closes its panel\n React.useEffect(() => () => closeComponentPanel(el), [el]);\n const swappable = useCatalogComponents()?.components ?? [];\n const [swapTo, setSwapTo] = React.useState<KitInsertableComponent | null>(null);\n const editAll = openComponent && m.ref && info && linked\n ? { label: places != null && places > 1 ? `Edit for all ${places} places` : \"Edit the shared block\", run: () => openComponent(m.ref!) }\n : undefined;\n const href = m.ref ? componentHref?.(m.ref, m.id) : undefined;\n const hasEdits = linked && (Object.keys(overrides).length > 0 || !!m.variant);\n\n /**\n * The change as ONE undo step (IslandCtx.step: the dock's toolbar Undo, this toast's Undo and ⌘Z in the body are one\n * undo), and the toast that offers it back.\n */\n const commit = (patch: (cur: ComponentModel) => ComponentModel, label: string, title: string, description: string) => {\n const before = el.__rt as ComponentModel | undefined;\n const undo = ctx.step\n ? ctx.step(label, () => (set(patch, label, false), el), before)\n : (set(patch, label), () => (ctx.undo?.() ? (true as const) : \"Changes made after it come first. Press ⌘Z to undo them.\"));\n toast?.(title, {\n description,\n action: {\n label: \"Undo\",\n onClick: () => {\n const r = undo();\n if (r !== true) ctx.notify(\"Nothing was undone\", r);\n },\n },\n });\n };\n\n /** V2 detachNow: this place keeps what readers see now and stops following the component, as one undo step. */\n const detach = async (title: string) => {\n if (!copyComponent || !m.ref || busy) return;\n setBusy(true);\n try {\n const copy = await copyComponent(m.ref, { overrides, ...(m.variant ? { variant: m.variant } : {}) });\n commit(\n (cur) => ({\n id: cur.id,\n ref: cur.ref,\n ...(cur.name !== undefined || info?.name ? { name: cur.name ?? info?.name } : {}),\n ...(cur.variant !== undefined ? { variant: cur.variant } : {}),\n detached: true,\n props: JSON.stringify(copy.props),\n ...(copy.blocks !== undefined ? { blocks: copy.blocks } : {}),\n ...(copy.sourcePublishedAt ? { sourcePublishedAt: copy.sourcePublishedAt } : {}),\n ...(cur.extra !== undefined ? { extra: cur.extra } : {}),\n }),\n \"Make a separate copy\",\n title,\n \"It keeps its content and no longer follows the shared block.\",\n );\n } catch (e) {\n ctx.notify(\"This place couldn't keep its own copy\", e instanceof Error ? e.message : String(e));\n } finally {\n setBusy(false);\n }\n };\n\n /** V2 instanceOps.relink: keep = what differs from the component becomes overrides; reset = the component's content. */\n const relink = (mode: \"keep\" | \"reset\") => {\n const kept = copyEdits(m, own, info?.fields);\n const n = Object.keys(kept).length;\n commit(\n (cur) => ({\n id: cur.id,\n ref: cur.ref,\n ...(cur.name !== undefined ? { name: info?.name ?? cur.name } : {}),\n ...(mode === \"keep\" && Object.keys(kept).length ? { overrides: JSON.stringify(kept) } : {}),\n ...(mode === \"keep\" && cur.variant !== undefined ? { variant: cur.variant } : {}),\n ...(cur.extra !== undefined ? { extra: cur.extra } : {}),\n }),\n \"Use shared version again\",\n `${name} is shared again`,\n mode === \"keep\" && n ? `${n} ${n === 1 ? \"edit\" : \"edits\"} kept here.` : \"It shows the block's content.\",\n );\n };\n\n /** V2 instanceOps.resetAll: this place's overrides and its layout go, as one undo step. */\n const resetAll = () =>\n commit(\n (cur) => {\n const { variant: _v, ...rest } = cur;\n return { ...rest, overrides: \"{}\" };\n },\n \"Reset all edits here\",\n `Back to the shared ${name}`,\n \"This place shows the block's content again.\",\n );\n\n /**\n * V2 instanceOps.swap, once the new component's fields are known (SwapResolver): this place's edits stay only where the\n * new component declares a field with that key; everything else is the new component's own content. One undo step.\n */\n const swap = (to: KitInsertableComponent, next: KitComponentInfo) => {\n const keys = new Set((next.fields ?? []).map((f) => f.key));\n const src = detached ? own : overrides;\n const kept = Object.fromEntries(Object.entries(src).filter(([k]) => keys.has(k)));\n const n = Object.keys(kept).length;\n commit(\n (cur) => ({ id: cur.id, ref: to.id, name: next.name || to.name, overrides: JSON.stringify(kept), ...(cur.extra !== undefined ? { extra: cur.extra } : {}) }),\n `Swap to ${to.name}`,\n `Swapped to ${to.name}`,\n n ? `Kept ${n} ${n === 1 ? \"edit\" : \"edits\"} made here.` : \"It shows the block's own content.\",\n );\n };\n\n const copyLink = () => {\n if (!href) return;\n void navigator.clipboard?.writeText(href).catch(() => {});\n toast?.success(\"Link copied\", { description: `Opens this page scrolled to the ${name}.` });\n };\n\n /** The panel's form writes this place: overrides (or the layout) as one undo step each, through the island's model. */\n const onOverrides = (next: Record<string, unknown>) => {\n const changed = [...new Set([...Object.keys(next), ...Object.keys(overrides)])].find((k) => !same(next[k], overrides[k]));\n // an object patch with one label per field: the editor's history merges a burst of typing into ONE step (V2 D54)\n set({ overrides: JSON.stringify(next) }, changed ? `Edit ${changed}` : \"Edit block properties\");\n };\n const onVariant = (variant: string | undefined) =>\n set(\n (cur) => {\n const { variant: _v, ...rest } = cur;\n return variant ? { ...rest, variant } : rest;\n },\n \"Change layout\",\n );\n\n /** V2 instance card keys, on the focused card itself (fields and the portalled panel keep their own). */\n const onKeyDown = (e: React.KeyboardEvent) => {\n if (e.defaultPrevented || e.target !== card.current) return;\n const mod = e.metaKey || e.ctrlKey;\n const k = eventKey(e);\n if (mod && k === \"z\") {\n e.preventDefault();\n e.stopPropagation();\n if (e.shiftKey) ctx.redo?.();\n else ctx.undo?.();\n return;\n }\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n openPanel();\n return;\n }\n if (e.key === \"Escape\") {\n e.preventDefault();\n e.stopPropagation();\n if (editing) closePanel();\n else ctx.exit(el);\n return;\n }\n if (ro) return;\n if (mod && k === \"d\" && ctx.duplicate) {\n e.preventDefault();\n e.stopPropagation();\n ctx.duplicate(el);\n } else if (e.altKey && (e.key === \"ArrowUp\" || e.key === \"ArrowDown\") && ctx.move) {\n e.preventDefault();\n ctx.move(el, e.key === \"ArrowUp\" ? -1 : 1);\n focusCard();\n } else if (e.key === \"Backspace\" || e.key === \"Delete\") {\n e.preventDefault();\n ctx.remove(el);\n }\n };\n\n const chip = (compact: boolean) =>\n detached ? (\n <>\n <DetachedChip name={name} compact={compact} />\n {changed ? <ChangedChip name={name} compact={compact} onReview={canCopy ? () => setDialog(\"relink\") : undefined} /> : null}\n </>\n ) : known ? (\n <StateChip missing={missing} places={places} edited={edited} layout={!!m.variant} requiredEmpty={requiredEmpty} compact={compact} />\n ) : null;\n\n return (\n <div\n ref={cardRef}\n role=\"group\"\n tabIndex={0}\n aria-label={label}\n aria-roledescription=\"component\"\n aria-haspopup=\"dialog\"\n aria-expanded={editing}\n aria-busy={busy || undefined}\n data-instance-card=\"\"\n data-rt-isolate=\"\"\n data-state={detached ? \"detached\" : missing ? \"missing\" : known ? \"linked\" : undefined}\n onKeyDown={onKeyDown}\n onClick={(e) => {\n // a click on the card (not on its controls) opens its properties, V2 instance card\n if (!e.currentTarget.contains(e.target as Node) || (e.target as HTMLElement).closest(\"button,a,[role=menuitem],[role=note],[role=alert]\")) return;\n // on a listed value, with that field focused (the live preview is inert, so it is found by position)\n openPanel(propKeyAt(e.currentTarget, e.clientX, e.clientY));\n }}\n className={cn(\n // V2 instance-card.tsx:223 transition-colors (the focus ring stays the kit's keyboard ring, DESIGN focus rule)\n \"group/inst relative cursor-pointer rounded-kit-lg border bg-kit-control-bg text-left focus-visible:outline-offset-2 transition-colors duration-150 motion-reduce:transition-none\",\n editing\n ? \"border-transparent shadow-[0_0_0_2px_var(--kit-accent)]\"\n : missing && !detached\n ? \"border-kit-warning-line\"\n : \"border-kit-line hover:border-kit-line-strong\",\n )}\n >\n {/* Strip (V2): drag grip (hover / focus, always on touch) · icon · name · scope chip · ⋯ */}\n <div className=\"flex h-9 select-none items-center gap-1.5 pl-1 pr-1\">\n {ro || !ctx.drag ? (\n <span className=\"w-1\" />\n ) : (\n <Tooltip content=\"Drag to move\">\n <button\n type=\"button\"\n aria-label={`Move ${name}`}\n tabIndex={-1}\n onPointerDown={(e) => ctx.drag?.(el, e)}\n className=\"flex h-7 w-4 shrink-0 cursor-grab touch-none pointer-coarse:size-11 items-center justify-center rounded-kit-sm text-kit-fg-4 opacity-0 transition-opacity duration-150 hover:text-kit-fg-2 active:cursor-grabbing motion-reduce:transition-none group-hover/inst:opacity-100 group-focus-within/inst:opacity-100 pointer-coarse:opacity-100 [&_svg]:size-3.5\"\n >\n <IconGripVertical stroke={1.5} />\n </button>\n </Tooltip>\n )}\n {info?.icon && IconGlyph ? (\n <span aria-hidden className=\"flex size-[15px] shrink-0 text-kit-fg-2 [&_svg]:size-full\">\n <IconGlyph name={info.icon} className=\"size-[15px]\" />\n </span>\n ) : (\n <IconComponents size={15} stroke={1.5} className=\"shrink-0 text-kit-fg-2\" aria-hidden />\n )}\n <span className=\"min-w-0 shrink truncate text-kit-sm font-medium text-kit-fg\">{name}</span>\n {chip(narrow)}\n <span className=\"flex-1\" />\n <Menu>\n <MenuTrigger\n render={\n <IconButton size=\"sm\" className=\"shrink-0\" label={`${name} actions`}>\n <IconDots stroke={1.5} />\n </IconButton>\n }\n />\n <MenuContent align=\"end\" className=\"w-64\">\n {ComponentSettings ? (\n <MenuItem icon={<IconAdjustmentsHorizontal stroke={1.5} />} onClick={() => openPanel()}>\n Edit properties\n </MenuItem>\n ) : null}\n {editAll ? (\n <MenuItem icon={<IconArrowUpRight stroke={1.5} />} onClick={editAll.run}>\n {editAll.label}\n </MenuItem>\n ) : null}\n {!ro && hasEdits ? (\n <MenuItem icon={<IconRestore stroke={1.5} />} onClick={resetAll}>\n Reset all edits here\n </MenuItem>\n ) : null}\n {canCopy && info && !missing && !detached ? (\n <MenuItem icon={<IconUnlink stroke={1.5} />} disabled={busy} onClick={() => setDialog(\"detach\")}>\n Make a separate copy\n </MenuItem>\n ) : null}\n {canCopy && missing && !detached ? (\n <MenuItem icon={<IconUnlink stroke={1.5} />} disabled={busy} onClick={() => void detach(\"Kept as a separate copy\")}>\n Keep as a separate copy\n </MenuItem>\n ) : null}\n {canCopy && info && !missing && detached ? (\n <MenuItem icon={<IconLink stroke={1.5} />} onClick={() => setDialog(\"relink\")}>\n Use shared version again\n </MenuItem>\n ) : null}\n {!ro && swappable.length ? (\n <MenuSub>\n <MenuSubTrigger icon={<IconReplace stroke={1.5} />}>Swap block</MenuSubTrigger>\n <MenuSubContent className=\"max-h-[320px] w-60 overflow-y-auto\">\n {swappable.map((c) => {\n const on = c.id === m.ref;\n return (\n <MenuItem key={c.id} icon={<IconComponents stroke={1.5} />} disabled={on || !!swapTo} onClick={() => setSwapTo(c)}>\n <span className=\"flex w-full items-center justify-between gap-2\">\n <span className=\"truncate\">{c.name}</span>\n {on ? <IconCheck className=\"size-3.5 shrink-0 text-kit-fg-2\" stroke={2} aria-label=\"Current\" /> : null}\n </span>\n </MenuItem>\n );\n })}\n </MenuSubContent>\n </MenuSub>\n ) : null}\n {preview ? (\n <MenuItem icon={collapsed ? <IconLayoutNavbarExpand stroke={1.5} /> : <IconLayoutNavbarCollapse stroke={1.5} />} onClick={() => setCollapsed(!collapsed)}>\n {collapsed ? \"Show preview\" : \"Collapse preview\"}\n </MenuItem>\n ) : null}\n <MenuSeparator />\n {!ro && ctx.duplicate ? (\n <MenuItem icon={<IconCopy stroke={1.5} />} shortcut=\"⌘D\" onClick={() => ctx.duplicate?.(el)}>\n Duplicate\n </MenuItem>\n ) : null}\n {!ro && ctx.move ? (\n <>\n <MenuItem icon={<IconArrowBarToUp stroke={1.5} />} shortcut=\"⌥↑\" disabled={!el.previousElementSibling} onClick={() => ctx.move?.(el, -1)}>\n Move up\n </MenuItem>\n <MenuItem icon={<IconArrowBarToDown stroke={1.5} />} shortcut=\"⌥↓\" disabled={!el.nextElementSibling} onClick={() => ctx.move?.(el, 1)}>\n Move down\n </MenuItem>\n </>\n ) : null}\n {href ? (\n <MenuItem icon={<IconLink stroke={1.5} />} onClick={copyLink}>\n Copy link\n </MenuItem>\n ) : null}\n {!ro ? (\n <>\n <MenuSeparator />\n <MenuItem danger icon={<IconTrash stroke={1.5} />} shortcut=\"⌫\" onClick={() => ctx.remove(el)}>\n Remove\n </MenuItem>\n </>\n ) : null}\n </MenuContent>\n </Menu>\n </div>\n {error ? (\n <div role=\"alert\" className=\"flex items-center gap-2 border-t border-kit-line-subtle px-3 py-2.5 text-kit-sm text-kit-fg-2\">\n <IconAlertTriangle className=\"size-4 shrink-0 text-kit-warning-fg\" stroke={1.5} aria-hidden />\n <span className=\"min-w-0 flex-1\">{error}</span>\n </div>\n ) : null}\n {missing && !detached && !loading ? (\n <div className=\"flex flex-wrap items-center gap-2 border-t border-kit-line-subtle px-3 py-2.5 text-kit-sm\" role=\"note\">\n <IconAlertTriangle className=\"size-4 shrink-0 text-kit-warning-fg\" stroke={1.5} aria-hidden />\n <span className=\"min-w-0 flex-1 text-kit-fg-2\">The original “{name}” was deleted. Readers see nothing in this place.</span>\n {ctx.readOnly ? null : (\n <span className=\"flex shrink-0 items-center gap-1.5\">\n {canCopy ? (\n <Button size=\"xs\" variant=\"secondary\" loading={busy} onClick={() => void detach(\"Kept as a separate copy\")}>\n Keep as a separate copy\n </Button>\n ) : null}\n <Button size=\"xs\" variant=\"danger-ghost\" onClick={() => ctx.remove(el)}>\n Remove\n </Button>\n </span>\n )}\n </div>\n ) : null}\n {collapsed ? null : preview}\n {canCopy ? (\n <>\n <DetachDialog\n open={dialog === \"detach\"}\n name={name}\n places={places}\n onClose={() => setDialog(null)}\n onConfirm={() => {\n setDialog(null);\n void detach(`Separate copy of ${name}`);\n }}\n />\n <RelinkDialog\n open={dialog === \"relink\"}\n name={name}\n kept={Object.keys(copyEdits(m, own, info?.fields)).length}\n onClose={() => setDialog(null)}\n onConfirm={(mode) => {\n setDialog(null);\n relink(mode);\n }}\n />\n </>\n ) : null}\n {swapTo ? (\n <SwapResolver\n use={use}\n to={swapTo}\n onReady={(next) => {\n setSwapTo(null);\n swap(swapTo, next);\n }}\n onFail={(why) => {\n setSwapTo(null);\n ctx.notify(`Couldn't swap to ${swapTo.name}`, why);\n }}\n />\n ) : null}\n {open ? (\n <ComponentPanel\n name={name}\n chip={chip(false)}\n anchor={cardEl}\n open={open}\n editAll={editAll}\n onClose={closePanel}\n focusBack={focusCard}\n settings={{\n componentId: m.ref ?? \"\",\n overrides,\n ...(m.variant ? { variant: m.variant } : {}),\n ...(detached ? { detached: { props: own } } : {}),\n // a separate copy keeps the values it was made with (its frozen blocks are drawn from them): read-only here\n readOnly: ro || detached || missing,\n onOverrides,\n onVariant,\n }}\n />\n ) : null}\n </div>\n );\n}\n\n/**\n * A separate copy's EDITS, which it keeps as overrides when it follows the component again: its values that differ from\n * the snapshot taken when the copy was made, never from the component as it is now (a republish since is not an edit\n * of this place; the owner saw \"2 fields stay as they are\" with nothing edited).\n *\n * A copy made here stores that snapshot: its values (`props`) with the blocks drawn from them (`blocks`), and no\n * surface edits a copy's values afterwards, so it has no edits. Copy markup from V2 stores no snapshot (no `blocks`):\n * its values that differ from the component's, on fields the component has (V2 instanceOps.relink).\n */\nfunction copyEdits(m: ComponentModel, own: Record<string, unknown>, fields: KitComponentField[] | undefined): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n if (m.blocks !== undefined) return out;\n for (const f of fields ?? []) if (f.key in own && !same(own[f.key], f.value)) out[f.key] = own[f.key];\n return out;\n}\n\nconst REQUIRED_EMPTY = \"Required field empty.\";\n/** Nothing an author would call filled in: no value, blank text, an empty list. */\nconst blank = (v: unknown) => v == null || (typeof v === \"string\" && !v.trim()) || (Array.isArray(v) && v.length === 0);\n\n/** V2 StateChip: 13px, neutral, not a pill; the missing chip is the one tinted state. */\nfunction StateChip({ missing, places, edited, layout, requiredEmpty, compact }: { missing: boolean; places?: number; edited: number; layout?: boolean; requiredEmpty?: boolean; compact: boolean }) {\n const base = CHIP;\n if (missing) {\n return (\n <Tooltip content=\"The block was deleted. Readers see nothing in this place.\">\n <span className={cn(base, \"bg-kit-warning-soft px-1.5 text-kit-warning-fg\")}>\n <IconAlertTriangle className=\"size-3.5 shrink-0\" stroke={1.5} aria-hidden />\n {compact ? <span className=\"sr-only\">Missing block</span> : \"Missing block\"}\n </span>\n </Tooltip>\n );\n }\n const count = places ? placesShort(places) : null;\n const tip = `Changes here apply only to this place. Edit the block to change ${places && places > 1 ? `all ${places}` : \"it everywhere\"}.${\n edited ? ` ${edited} ${edited === 1 ? \"field\" : \"fields\"} edited here.` : \"\"}${layout ? \" Its layout is set here.\" : \"\"}${requiredEmpty ? ` ${REQUIRED_EMPTY}` : \"\"\n }`;\n return (\n <Tooltip content={tip}>\n <span className={cn(base, \"px-1 text-kit-fg-2\")} tabIndex={-1}>\n {requiredEmpty ? <span data-required-empty className=\"size-1.5 shrink-0 rounded-full bg-kit-danger-fg\" aria-hidden /> : null}\n <IconLink className=\"size-3.5 shrink-0\" stroke={1.5} aria-hidden />\n {compact ? <span className=\"sr-only\">Shared{count ? `, ${count}` : \"\"}</span> : count ?? \"Shared\"}\n {!compact && count ? <span className=\"sr-only\">, shared</span> : null}\n {edited || layout ? (\n <>\n <span className=\"ml-1 size-1.5 shrink-0 rounded-full bg-kit-accent\" aria-hidden />\n {compact ? <span className=\"sr-only\">, edited here</span> : <span>Edited here</span>}\n </>\n ) : null}\n </span>\n </Tooltip>\n );\n}\n\nconst CHIP = \"inline-flex h-6 shrink-0 items-center gap-1 rounded-kit-md text-[13px] leading-none whitespace-nowrap\";\n\n/** V2 StateChip, detached: fg-3, the unlink glyph. */\nfunction DetachedChip({ name, compact }: { name: string; compact: boolean }) {\n return (\n <Tooltip content={`A separate copy. Changes to ${name} don't reach it.`}>\n <span className={cn(CHIP, \"px-1 text-kit-fg-3\")} tabIndex={-1}>\n <IconUnlink className=\"size-3.5 shrink-0\" stroke={1.5} aria-hidden />\n {compact ? <span className=\"sr-only\">Detached</span> : \"Detached\"}\n </span>\n </Tooltip>\n );\n}\n\n/** V2 StateChip, update: a quiet button that opens the way back to the shared version. */\nfunction ChangedChip({ name, compact, onReview }: { name: string; compact: boolean; onReview?: () => void }) {\n return (\n <Tooltip content={`${name} changed since this copy was made.`}>\n <button\n type=\"button\"\n onClick={onReview}\n disabled={!onReview}\n className={cn(CHIP, \"px-1 text-kit-fg-2 hover:bg-kit-hover hover:text-kit-fg disabled:hover:bg-transparent\")}\n >\n <IconRefresh className=\"size-3.5 shrink-0\" stroke={1.5} aria-hidden />\n {compact ? <span className=\"sr-only\">Shared version changed</span> : \"Shared version changed\"}\n </button>\n </Tooltip>\n );\n}\n\n/** V2 useInstanceDialogs \"detach\": confirm before this place stops following the component. */\nfunction DetachDialog({ open, name, places, onClose, onConfirm }: { open: boolean; name: string; places?: number; onClose: () => void; onConfirm: () => void }) {\n const others = places != null ? places - 1 : null;\n return (\n <Modal open={open} onOpenChange={(o) => !o && onClose()}>\n <ModalContent size=\"sm\">\n <ModalHeader title={`Make a separate copy of ${name}?`} description=\"This place keeps its current content and stops following the shared block.\" />\n {others != null ? (\n <ModalBody className=\"pt-2 text-kit-sm text-kit-fg-2\">\n {others > 0 ? `The other ${others === 1 ? \"place stays\" : `${others} places stay`} shared.` : \"No other place uses it.\"}\n </ModalBody>\n ) : null}\n <ModalFooter>\n <Button variant=\"ghost\" onClick={onClose}>\n Cancel\n </Button>\n <Button variant=\"primary\" autoFocus onClick={onConfirm}>\n Make a copy\n </Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n );\n}\n\n/** V2 RelinkDialog: keep this place's edits as overrides, or take the component's content. */\nfunction RelinkDialog({ open, name, kept, onClose, onConfirm }: { open: boolean; name: string; kept: number; onClose: () => void; onConfirm: (mode: \"keep\" | \"reset\") => void }) {\n const [mode, setMode] = React.useState<\"keep\" | \"reset\">(\"keep\");\n React.useEffect(() => {\n if (open) setMode(\"keep\");\n }, [open]);\n const rows: { v: \"keep\" | \"reset\"; title: string; line: string }[] = [\n {\n v: \"keep\",\n title: \"Keep my edits here\",\n line: kept ? `${kept} ${kept === 1 ? \"field stays\" : \"fields stay\"} as ${kept === 1 ? \"it is\" : \"they are\"}; everything else follows ${name} again.` : `Nothing differs, so it simply follows ${name} again.`,\n },\n { v: \"reset\", title: `Use ${name}'s content`, line: \"Drops the edits made here. Undo is one click away.\" },\n ];\n return (\n <Modal open={open} onOpenChange={(o) => !o && onClose()}>\n <ModalContent size=\"sm\">\n <ModalHeader title={`Use the shared ${name} again?`} description=\"This place follows the shared block again.\" />\n <ModalBody className=\"pt-3\">\n <div\n role=\"radiogroup\"\n aria-label=\"Use shared version again\"\n className=\"flex flex-col divide-y divide-kit-line overflow-hidden rounded-kit-lg border border-kit-line\"\n onKeyDown={(e) => {\n // a radio group moves with the arrow keys (one tab stop, the checked row)\n if (![\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"].includes(e.key)) return;\n e.preventDefault();\n const next = mode === \"keep\" ? \"reset\" : \"keep\";\n setMode(next);\n (e.currentTarget.querySelector(`[data-mode=\"${next}\"]`) as HTMLElement | null)?.focus();\n }}\n >\n {rows.map((row) => (\n <button\n key={row.v}\n type=\"button\"\n role=\"radio\"\n data-mode={row.v}\n tabIndex={mode === row.v ? 0 : -1}\n aria-checked={mode === row.v}\n onClick={() => setMode(row.v)}\n className={cn(\"flex min-h-14 items-start gap-3 px-3 py-2.5 text-left transition-colors hover:bg-kit-hover\", mode === row.v && \"bg-kit-subtle\")}\n >\n <span className={cn(\"mt-0.5 flex size-4 shrink-0 items-center justify-center rounded-full border\", mode === row.v ? \"border-kit-control-checked\" : \"border-kit-line-strong\")}>\n {mode === row.v ? <span className=\"size-2 rounded-full bg-kit-fg\" /> : null}\n </span>\n <span className=\"min-w-0\">\n <span className=\"block text-kit-sm font-medium text-kit-fg\">{row.title}</span>\n <span className=\"block text-kit-xs text-kit-fg-3\">{row.line}</span>\n </span>\n </button>\n ))}\n </div>\n </ModalBody>\n <ModalFooter>\n <Button variant=\"ghost\" onClick={onClose}>\n Cancel\n </Button>\n <Button variant=\"primary\" onClick={() => onConfirm(mode)}>\n Use shared version\n </Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n );\n}\n\ninterface Row {\n key: string;\n label: string;\n text: string;\n}\n\n/**\n * What the window lists when there is no picture: each field's value as this place shows it (its override, else the\n * component's own), then the layout this place draws it in. A missing component has only what this place stored: its\n * overrides, named by their keys, and its layout.\n */\n/** A choice field's value as its option's label (BUG-8: a select whose values are ids listed the id); others as they are. */\nfunction chosen(f: KitComponentField, v: unknown): unknown {\n if (!f.options) return v;\n const label = (x: unknown) => f.options!.find((o) => o.value === x)?.label ?? x;\n return Array.isArray(v) ? v.map(label).join(\", \") : label(v);\n}\n\nfunction previewRows(missing: boolean, fields: KitComponentField[] | undefined, overrides: Record<string, unknown>, variant?: string): Row[] {\n const out: Row[] = [];\n if (missing || !fields) {\n for (const [key, v] of Object.entries(overrides)) {\n const text = readable(v);\n if (text) out.push({ key, label: key, text });\n }\n } else {\n for (const f of fields) {\n const text = readable(chosen(f, f.key in overrides ? overrides[f.key] : f.value));\n if (text) out.push({ key: f.key, label: f.label, text });\n }\n }\n if (variant) out.push({ key: \"__variant\", label: \"Layout\", text: variant });\n return out;\n}\n\n/**\n * A separate copy's values (V2 `props`) in the component's field order. A field the copy doesn't hold draws the\n * component's value for it, as V2's renderer does for a copy (it draws the def with `props`, defaults for the rest);\n * a value the component no longer has a field for follows, under its key. Then its layout.\n */\nfunction copyRows(own: Record<string, unknown>, fields: KitComponentField[] | undefined, variant?: string): Row[] {\n const out: Row[] = [];\n const push = (key: string, label: string, v: unknown) => {\n const text = readable(v);\n if (text) out.push({ key, label, text });\n };\n for (const f of fields ?? []) push(f.key, f.label, chosen(f, f.key in own ? own[f.key] : f.value));\n for (const [key, v] of Object.entries(own)) if (!fields?.some((f) => f.key === key)) push(key, key, v);\n if (variant) out.push({ key: \"__variant\", label: \"Layout\", text: variant });\n return out;\n}\n\n/**\n * The preview's frame: under the card's header, capped at PREVIEW_H (its top border inside, as V2's CappedPreview).\n * The cap lifts instantly on hover: a height animation is layout work every frame (canvas revamp V937).\n */\nconst PREVIEW_CHROME = \"group/cap relative max-h-[240px] overflow-hidden rounded-b-kit-lg border-t border-kit-line-subtle\";\n\n/**\n * V2 instance-card CappedPreview: at most 240px, faded at its foot when the content is taller; hover shows its full\n * height. Measured a frame after each resize, so a frame or picture that sizes itself late is read once settled.\n */\nfunction CappedPreview({ live, children }: { live?: boolean; children: React.ReactNode }) {\n const inner = React.useRef<HTMLDivElement>(null);\n const [tall, setTall] = React.useState(false);\n // a live frame is the site: on V2's light site paper in both themes; a listing or picture stays on the themed chrome\n const [site, setSite] = React.useState(false);\n React.useLayoutEffect(() => {\n const el = inner.current;\n if (!el) return;\n let raf = 0;\n const measure = () => {\n cancelAnimationFrame(raf);\n raf = requestAnimationFrame(() => {\n setTall(el.offsetHeight > PREVIEW_H + 1);\n setSite(!!el.querySelector(\"iframe\"));\n });\n };\n measure();\n const ro = typeof ResizeObserver === \"undefined\" ? null : new ResizeObserver(measure);\n ro?.observe(el);\n // the frame can mount without a size change (the shell keeps its remembered height), so a mount re-measures too\n const mo = typeof MutationObserver === \"undefined\" ? null : new MutationObserver(measure);\n mo?.observe(el, { childList: true, subtree: true });\n return () => {\n ro?.disconnect();\n mo?.disconnect();\n cancelAnimationFrame(raf);\n };\n }, []);\n return (\n <div\n data-instance-preview=\"\"\n data-live={live ? \"\" : undefined}\n data-tall={tall ? \"\" : undefined}\n data-site={site ? \"\" : undefined}\n className={cn(PREVIEW_CHROME, site ? \"bg-kit-site-paper\" : \"bg-kit-subtle\", tall && \"can-hover:hover:max-h-[2400px]\")}\n >\n <div ref={inner}>{children}</div>\n {/* V2's fade: inside the capped box, into its paper (the site paper under a live frame, else the chrome) */}\n {tall ? (\n <div\n aria-hidden\n className={cn(\n \"pointer-events-none absolute inset-x-0 bottom-0 h-6 bg-gradient-to-b from-transparent transition-opacity duration-150 ease-out can-hover:group-hover/cap:opacity-0 motion-reduce:transition-none\",\n site ? \"to-kit-site-paper\" : \"to-kit-subtle\",\n )}\n />\n ) : null}\n </div>\n );\n}\n\nfunction PreviewWindow({ image, rows }: { image: string | null; rows: Row[] }) {\n return (\n <CappedPreview>\n <PreviewBody image={image} rows={rows} />\n </CappedPreview>\n );\n}\n\n/**\n * The component drawn live by the host (KitServices.ComponentPreview), mounted once the card is on screen. Its height is\n * reserved from the start (PREVIEW_H), so the card never moves while it loads; where the host cannot draw it, the values\n * are listed under the reason.\n */\nfunction LivePreview({\n Preview,\n componentId,\n title,\n props,\n rows,\n}: {\n Preview: React.ComponentType<KitComponentPreviewProps>;\n componentId: string;\n title: string;\n props: Record<string, unknown>;\n rows: Row[];\n}) {\n const box = React.useRef<HTMLDivElement>(null);\n const [seen, setSeen] = React.useState(() => typeof IntersectionObserver === \"undefined\");\n React.useEffect(() => {\n const el = box.current;\n if (seen || !el) return;\n const io = new IntersectionObserver((entries) => {\n if (entries.some((e) => e.isIntersecting)) setSeen(true);\n });\n io.observe(el);\n return () => io.disconnect();\n }, [seen]);\n return (\n <CappedPreview live>\n <div ref={box}>\n {seen ? (\n <Preview componentId={componentId} title={title} props={props} fallback={(reason) => <PreviewBody image={null} rows={rows} note={reason} />} />\n ) : (\n <div aria-hidden style={{ height: PREVIEW_H }} />\n )}\n </div>\n </CappedPreview>\n );\n}\n\nfunction PreviewBody({ image, rows, note }: { image: string | null; rows: Row[]; note?: string }) {\n // a picture's height is unknown until it loads: the cap is held until then, so the card doesn't jump when it lands\n const [loaded, setLoaded] = React.useState(!image);\n return (\n <div style={!loaded ? { height: PREVIEW_H } : undefined}>\n {image ? (\n // the whole width, scaled to the card like V2's frame (top-left origin): never cropped at the sides\n <img src={image} alt=\"\" className=\"block h-auto w-full\" draggable={false} onLoad={() => setLoaded(true)} onError={() => setLoaded(true)} />\n ) : (\n <>\n {note ? <p className=\"px-4 pt-3 text-kit-xs text-kit-fg-3\">{note}</p> : null}\n <dl className=\"flex flex-col gap-3 px-4 py-3.5\">\n {rows.map((r) => (\n // a click on a listed value opens the panel on that field (the card reads it by position: propKeyAt)\n <div key={r.key} data-prop-key={r.key === \"__variant\" ? undefined : r.key} className=\"min-w-0\">\n <dt className=\"truncate text-kit-xs text-kit-fg-3\">{r.label}</dt>\n <dd className=\"mt-0.5 line-clamp-3 text-kit-sm text-kit-fg\">{r.text}</dd>\n </div>\n ))}\n </dl>\n </>\n )}\n </div>\n );\n}\n\n/** The listed value (`data-prop-key`) under a point of the card, else null. */\nfunction propKeyAt(root: HTMLElement, x: number, y: number): string | null {\n for (const row of root.querySelectorAll<HTMLElement>(\"[data-prop-key]\")) {\n const r = row.getBoundingClientRect();\n if (x >= r.left && x <= r.right && y >= r.top && y <= r.bottom) return row.dataset.propKey ?? null;\n }\n return null;\n}\n\n/**\n * Swap component: the new component's fields come from the same lookup the card reads (KitServices.useComponentInfo, a\n * hook, so it is asked from a component of its own). Answers once, when they are known.\n */\nfunction SwapResolver({\n use, to, onReady, onFail,\n}: {\n use: UseComponentInfo;\n to: KitInsertableComponent;\n onReady: (info: KitComponentInfo) => void;\n onFail: (why: string) => void;\n}) {\n const { info, error } = use(to.id);\n const done = React.useRef(false);\n React.useEffect(() => {\n if (done.current) return;\n if (error) {\n done.current = true;\n onFail(error);\n } else if (info?.missing) {\n done.current = true;\n onFail(\"The library has no such block.\");\n } else if (info) {\n done.current = true;\n onReady(info);\n }\n });\n return null;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA,IAAM,SAAS;;AAEf,IAAM,YAAY;AAElB,IAAM,eAAe,MAAc,GAAG,EAAE,GAAG,MAAM,IAAI,UAAU;AAE/D,SAAS,SAAS,KAA0C;CAC1D,MAAM,CAAC,GAAG,QAAQ,MAAM,SAAS,CAAC;CAClC,MAAM,sBAAsB;EAC1B,MAAM,KAAK,IAAI;EACf,IAAI,CAAC,IAAI;EACT,KAAK,GAAG,WAAW;EACnB,IAAI,OAAO,mBAAmB,aAAa;EAC3C,MAAM,KAAK,IAAI,qBAAqB,KAAK,GAAG,WAAW,CAAC;EACxD,GAAG,QAAQ,EAAE;EACb,aAAa,GAAG,WAAW;CAC7B,GAAG,CAAC,GAAG,CAAC;CACR,OAAO;AACT;;AAGA,SAAS,SAAS,GAA2B;CAC3C,IAAI,OAAO,MAAM,UAAU,OAAO,OAAO,CAAC;CAC1C,IAAI,OAAO,MAAM,UAAU;EAEzB,IAAI,EAAE,WAAW,aAAa,GAAG,OAAO;EAIxC,QAFgB,IAAI,UAAU,CAAC,CAAC,gBAAgB,EAAE,QAAQ,YAAY,GAAG,GAAG,WAAW,CAAC,CAAC,KAAK,eAAe,GAAA,CAC3F,QAAQ,QAAQ,GAAG,CAAC,CAAC,KAChC,KAAK;CACd;CACA,IAAI,KAAK,OAAO,MAAM,YAAY,CAAC,MAAM,QAAQ,CAAC,GAAG;EAGnD,MAAM,IAAI;EACV,OAAO,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI;CACxF;CACA,OAAO;AACT;AAEA,IAAM,YAAY,MAAmD;CACnE,IAAI;EACF,MAAM,IAAI,IAAK,KAAK,MAAM,CAAC,IAAgB,CAAC;EAC5C,OAAO,KAAK,OAAO,MAAM,YAAY,CAAC,MAAM,QAAQ,CAAC,IAAK,IAAgC,CAAC;CAC7F,QAAQ;EACN,OAAO,CAAC;CACV;AACF;;AAEA,IAAM,aAAa,GAA8B,MAA0B;CACzE,MAAM,IAAI,IAAI,KAAK,MAAM,CAAC,IAAI;CAC9B,MAAM,IAAI,IAAI,KAAK,MAAM,CAAC,IAAI;CAC9B,OAAO,OAAO,SAAS,CAAC,KAAK,OAAO,SAAS,CAAC,KAAK,IAAI;AACzD;AACA,IAAM,QAAQ,GAAY,MAAe,MAAM,KAAK,KAAK,UAAU,CAAC,MAAM,KAAK,UAAU,CAAC;;;;;AAO1F,SAAS,aAAa,KAA6D;CACjF,MAAM,MAAM,MAAM,uBAAuB,QAAQ;CACjD,MAAM,CAAC,WAAW,YAAY,MAAM,eAAe;EACjD,IAAI;GACF,OAAO,CAAC,CAAC,OAAO,WAAW,cAAc,QAAQ,GAAG,MAAM;EAC5D,QAAQ;GACN,OAAO;EACT;CACF,CAAC;CAcD,OAAO,CAAC,WAbI,MAAM,aACf,SAAkB;EACjB,SAAS,IAAI;EACb,IAAI,CAAC,KAAK;EACV,IAAI;GACF,IAAI,MAAM,WAAW,cAAc,QAAQ,KAAK,GAAG;QAC9C,WAAW,cAAc,WAAW,GAAG;EAC9C,QAAQ,CAER;CACF,GACA,CAAC,GAAG,CAEa,CAAG;AACxB;AAIA,SAAgB,cAAc,EAC5B,GAAG,IAAI,KAAK,KAAK,WAAW,OACwG;CACpI,MAAM,EAAE,eAAe,OAAO,kBAAkB,WAAW,wBAAwB,mBAAmB,eAAe,kBAAkB,eAAe;CAGtJ,MAAM,SAAS,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,yBAAyB,EAAE,KAAK,EAAE,OAAO,IAAI,KAAA;CAChG,MAAM,MAAM,UAAU,EAAE;CACxB,MAAM,UAAU,SAAS,KAAA,IAAY,EAAE;CACvC,MAAM,EAAE,MAAM,SAAS,UAAU,IAAI,OAAO,EAAE;CAC9C,MAAM,OAAO,MAAM,OAA8B,IAAI;CACrD,MAAM,QAAQ,SAAS,IAAI;CAC3B,MAAM,SAAS,CAAC,CAAC,SAAS,SAAS;CACnC,MAAM,CAAC,WAAW,gBAAgB,aAAa,EAAE,GAAG;CACpD,MAAM,CAAC,QAAQ,aAAa,MAAM,SAAqC,IAAI;CAC3E,MAAM,CAAC,MAAM,WAAW,MAAM,SAAS,KAAK;CAC5C,MAAM,WAAW,CAAC,CAAC,EAAE;CACrB,MAAM,MAAM,MAAM,cAAc,SAAS,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC;CAC5D,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM;CAChC,MAAM,OAAO,QAAQ,CAAC,KAAK,UAAU,KAAK,OAAO,EAAE,QAAQ,MAAM,QAAQ;CACzE,MAAM,YAAY,IAAI,KAAK,MAAM,UAAU,CAAC,EAAA,CAAG,KAAK,MAAM,EAAE,GAAG,CAAC;CAChE,MAAM,SAAS,WAAW,WAAW,IAAI,OAAO,KAAK,SAAS,CAAC,CAAC,QAAQ,MAAM,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC;CAChG,MAAM,SAAS,MAAM;CACrB,MAAM,QAAQ,CAAC,CAAC,QAAQ;CAExB,MAAM,UAAU,YAAY,CAAC,WAAW,UAAU,MAAM,aAAa,EAAE,iBAAiB;CACxF,MAAM,QAAQ,WAAW,WAAW,UAAU,6BAA6B,OAAO,UAAU,kBAAkB,UAAU,EAAE,UAAU,gBAAgB;CAEpJ,MAAM,gBAAgB,CAAC,WAAW,CAAC,aAAa,MAAM,UAAU,CAAC,EAAA,CAAG,MAAM,MAAM,EAAE,YAAY,MAAM,EAAE,OAAO,YAAY,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC;CACpJ,MAAM,QAAQ,GAAG,KAAK,QAAQ,QAAQ,KAAK,UAAU,KAAK,SAAS,CAAC,WAAW,CAAC,YAAY,UAAU,OAAO,KAAK,YAAY,MAAM,MAAM,KAAK,gBAAgB,KAAK,mBAAmB;CACvL,MAAM,OAAO,WAAW,SAAS,KAAK,MAAM,QAAQ,EAAE,OAAO,IAAI,YAAY,SAAS,MAAM,QAAQ,WAAW,OAAO;CAItH,MAAM,QAAQ,WAAW,YAAY,UAAU,UAAU,OAAO,MAAM,SAAS;CAG/E,MAAM,YAAY,MAAM,cACf,WAAW,MAAM;EAAE,GAAG,OAAO,aAAa,MAAM,UAAU,CAAC,EAAA,CAAG,SAAS,MAAO,EAAE,UAAU,KAAA,IAAY,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAE,CAAC;EAAG,GAAG;CAAU,GACtJ;EAAC;EAAU;EAAK,MAAM;EAAQ;CAAS,CACzC;CACA,MAAM,OAAO,oBAAoB,OAAO,QAAQ,CAAC,WAAW,CAAC,UAAU;EAAE,SAAS;EAAkB;CAAI,IAAI;CAC5G,MAAM,UAAU,OACd,oBAAC,aAAD;EAAa,SAAS,KAAK;EAAS,aAAa,KAAK;EAAK,OAAO;EAAM,OAAO;EAAiB;CAAO,CAAA,IACrG,SAAS,KAAK,SAChB,oBAAC,eAAD;EAAsB;EAAa;CAAO,CAAA,IACxC;CACJ,MAAM,UAAU,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI;CACnD,MAAM,KAAK,CAAC,CAAC,IAAI;CACjB,MAAM,SAAS,CAAC,WAAW,CAAC;CAC5B,MAAM,OAAO,kBAAkB,EAAE;CACjC,MAAM,UAAU,CAAC,CAAC;CAClB,MAAM,CAAC,QAAQ,aAAa,MAAM,SAAgC,IAAI;CACtE,MAAM,UAAU,MAAM,aAAa,MAA6B;EAC9D,KAAK,UAAU;EACf,IAAI,GAAG,UAAU,CAAC;CACpB,GAAG,CAAC,CAAC;CACL,MAAM,YAAY,MAAM,aAAa,aAA6B,mBAAmB,IAAI,YAAY,IAAI,GAAG,CAAC,EAAE,CAAC;CAChH,MAAM,aAAa,MAAM,kBAAkB,oBAAoB,EAAE,GAAG,CAAC,EAAE,CAAC;CACxE,MAAM,YAAY,MAAM,kBAAkB,4BAA4B,KAAK,SAAS,MAAM,EAAE,eAAe,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;CAEvH,MAAM,sBAAsB,oBAAoB,EAAE,GAAG,CAAC,EAAE,CAAC;CACzD,MAAM,YAAY,qBAAqB,CAAC,EAAE,cAAc,CAAC;CACzD,MAAM,CAAC,QAAQ,aAAa,MAAM,SAAwC,IAAI;CAC9E,MAAM,UAAU,iBAAiB,EAAE,OAAO,QAAQ,SAC9C;EAAE,OAAO,UAAU,QAAQ,SAAS,IAAI,gBAAgB,OAAO,WAAW;EAAyB,WAAW,cAAc,EAAE,GAAI;CAAE,IACpI,KAAA;CACJ,MAAM,OAAO,EAAE,MAAM,gBAAgB,EAAE,KAAK,EAAE,EAAE,IAAI,KAAA;CACpD,MAAM,WAAW,WAAW,OAAO,KAAK,SAAS,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,EAAE;;;;;CAMrE,MAAM,UAAU,OAAgD,OAAe,OAAe,gBAAwB;EACpH,MAAM,SAAS,GAAG;EAClB,MAAM,OAAO,IAAI,OACb,IAAI,KAAK,cAAc,IAAI,OAAO,OAAO,KAAK,GAAG,KAAK,MAAM,KAC3D,IAAI,OAAO,KAAK,SAAU,IAAI,OAAO,IAAK,OAAiB;EAChE,QAAQ,OAAO;GACb;GACA,QAAQ;IACN,OAAO;IACP,eAAe;KACb,MAAM,IAAI,KAAK;KACf,IAAI,MAAM,MAAM,IAAI,OAAO,sBAAsB,CAAC;IACpD;GACF;EACF,CAAC;CACH;;CAGA,MAAM,SAAS,OAAO,UAAkB;EACtC,IAAI,CAAC,iBAAiB,CAAC,EAAE,OAAO,MAAM;EACtC,QAAQ,IAAI;EACZ,IAAI;GACF,MAAM,OAAO,MAAM,cAAc,EAAE,KAAK;IAAE;IAAW,GAAI,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,IAAI,CAAC;GAAG,CAAC;GACnG,QACG,SAAS;IACR,IAAI,IAAI;IACR,KAAK,IAAI;IACT,GAAI,IAAI,SAAS,KAAA,KAAa,MAAM,OAAO,EAAE,MAAM,IAAI,QAAQ,MAAM,KAAK,IAAI,CAAC;IAC/E,GAAI,IAAI,YAAY,KAAA,IAAY,EAAE,SAAS,IAAI,QAAQ,IAAI,CAAC;IAC5D,UAAU;IACV,OAAO,KAAK,UAAU,KAAK,KAAK;IAChC,GAAI,KAAK,WAAW,KAAA,IAAY,EAAE,QAAQ,KAAK,OAAO,IAAI,CAAC;IAC3D,GAAI,KAAK,oBAAoB,EAAE,mBAAmB,KAAK,kBAAkB,IAAI,CAAC;IAC9E,GAAI,IAAI,UAAU,KAAA,IAAY,EAAE,OAAO,IAAI,MAAM,IAAI,CAAC;GACxD,IACA,wBACA,OACA,8DACF;EACF,SAAS,GAAG;GACV,IAAI,OAAO,yCAAyC,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC,CAAC;EAChG,UAAU;GACR,QAAQ,KAAK;EACf;CACF;;CAGA,MAAM,UAAU,SAA2B;EACzC,MAAM,OAAO,UAAU,GAAG,KAAK,MAAM,MAAM;EAC3C,MAAM,IAAI,OAAO,KAAK,IAAI,CAAC,CAAC;EAC5B,QACG,SAAS;GACR,IAAI,IAAI;GACR,KAAK,IAAI;GACT,GAAI,IAAI,SAAS,KAAA,IAAY,EAAE,MAAM,MAAM,QAAQ,IAAI,KAAK,IAAI,CAAC;GACjE,GAAI,SAAS,UAAU,OAAO,KAAK,IAAI,CAAC,CAAC,SAAS,EAAE,WAAW,KAAK,UAAU,IAAI,EAAE,IAAI,CAAC;GACzF,GAAI,SAAS,UAAU,IAAI,YAAY,KAAA,IAAY,EAAE,SAAS,IAAI,QAAQ,IAAI,CAAC;GAC/E,GAAI,IAAI,UAAU,KAAA,IAAY,EAAE,OAAO,IAAI,MAAM,IAAI,CAAC;EACxD,IACA,4BACA,GAAG,KAAK,mBACR,SAAS,UAAU,IAAI,GAAG,EAAE,GAAG,MAAM,IAAI,SAAS,QAAQ,eAAe,+BAC3E;CACF;;CAGA,MAAM,iBACJ,QACG,QAAQ;EACP,MAAM,EAAE,SAAS,IAAI,GAAG,SAAS;EACjC,OAAO;GAAE,GAAG;GAAM,WAAW;EAAK;CACpC,GACA,wBACA,sBAAsB,QACtB,6CACF;;;;;CAMF,MAAM,QAAQ,IAA4B,SAA2B;EACnE,MAAM,OAAO,IAAI,KAAK,KAAK,UAAU,CAAC,EAAA,CAAG,KAAK,MAAM,EAAE,GAAG,CAAC;EAE1D,MAAM,OAAO,OAAO,YAAY,OAAO,QAD3B,WAAW,MAAM,SACqB,CAAC,CAAC,QAAQ,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC;EAChF,MAAM,IAAI,OAAO,KAAK,IAAI,CAAC,CAAC;EAC5B,QACG,SAAS;GAAE,IAAI,IAAI;GAAI,KAAK,GAAG;GAAI,MAAM,KAAK,QAAQ,GAAG;GAAM,WAAW,KAAK,UAAU,IAAI;GAAG,GAAI,IAAI,UAAU,KAAA,IAAY,EAAE,OAAO,IAAI,MAAM,IAAI,CAAC;EAAG,IAC1J,WAAW,GAAG,QACd,cAAc,GAAG,QACjB,IAAI,QAAQ,EAAE,GAAG,MAAM,IAAI,SAAS,QAAQ,eAAe,mCAC7D;CACF;CAEA,MAAM,iBAAiB;EACrB,IAAI,CAAC,MAAM;EACX,UAAe,WAAW,UAAU,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC;EACxD,OAAO,QAAQ,eAAe,EAAE,aAAa,mCAAmC,KAAK,GAAG,CAAC;CAC3F;;CAGA,MAAM,eAAe,SAAkC;EACrD,MAAM,UAAU,CAAC,mBAAG,IAAI,IAAI,CAAC,GAAG,OAAO,KAAK,IAAI,GAAG,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,KAAK,KAAK,IAAI,UAAU,EAAE,CAAC;EAExH,IAAI,EAAE,WAAW,KAAK,UAAU,IAAI,EAAE,GAAG,UAAU,QAAQ,YAAY,uBAAuB;CAChG;CACA,MAAM,aAAa,YACjB,KACG,QAAQ;EACP,MAAM,EAAE,SAAS,IAAI,GAAG,SAAS;EACjC,OAAO,UAAU;GAAE,GAAG;GAAM;EAAQ,IAAI;CAC1C,GACA,eACF;;CAGF,MAAM,aAAa,MAA2B;EAC5C,IAAI,EAAE,oBAAoB,EAAE,WAAW,KAAK,SAAS;EACrD,MAAM,MAAM,EAAE,WAAW,EAAE;EAC3B,MAAM,IAAI,SAAS,CAAC;EACpB,IAAI,OAAO,MAAM,KAAK;GACpB,EAAE,eAAe;GACjB,EAAE,gBAAgB;GAClB,IAAI,EAAE,UAAU,IAAI,OAAO;QACtB,IAAI,OAAO;GAChB;EACF;EACA,IAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;GACtC,EAAE,eAAe;GACjB,UAAU;GACV;EACF;EACA,IAAI,EAAE,QAAQ,UAAU;GACtB,EAAE,eAAe;GACjB,EAAE,gBAAgB;GAClB,IAAI,SAAS,WAAW;QACnB,IAAI,KAAK,EAAE;GAChB;EACF;EACA,IAAI,IAAI;EACR,IAAI,OAAO,MAAM,OAAO,IAAI,WAAW;GACrC,EAAE,eAAe;GACjB,EAAE,gBAAgB;GAClB,IAAI,UAAU,EAAE;EAClB,OAAO,IAAI,EAAE,WAAW,EAAE,QAAQ,aAAa,EAAE,QAAQ,gBAAgB,IAAI,MAAM;GACjF,EAAE,eAAe;GACjB,IAAI,KAAK,IAAI,EAAE,QAAQ,YAAY,KAAK,CAAC;GACzC,UAAU;EACZ,OAAO,IAAI,EAAE,QAAQ,eAAe,EAAE,QAAQ,UAAU;GACtD,EAAE,eAAe;GACjB,IAAI,OAAO,EAAE;EACf;CACF;CAEA,MAAM,QAAQ,YACZ,WACE,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,cAAD;EAAoB;EAAe;CAAU,CAAA,GAC5C,UAAU,oBAAC,aAAD;EAAmB;EAAe;EAAS,UAAU,gBAAgB,UAAU,QAAQ,IAAI,KAAA;CAAY,CAAA,IAAI,IACtH,EAAA,CAAA,IACA,QACF,oBAAC,WAAD;EAAoB;EAAiB;EAAgB;EAAQ,QAAQ,CAAC,CAAC,EAAE;EAAwB;EAAwB;CAAU,CAAA,IACjI;CAEN,OACE,qBAAC,OAAD;EACE,KAAK;EACL,MAAK;EACL,UAAU;EACV,cAAY;EACZ,wBAAqB;EACrB,iBAAc;EACd,iBAAe;EACf,aAAW,QAAQ,KAAA;EACnB,sBAAmB;EACnB,mBAAgB;EAChB,cAAY,WAAW,aAAa,UAAU,YAAY,QAAQ,WAAW,KAAA;EAClE;EACX,UAAU,MAAM;GAEd,IAAI,CAAC,EAAE,cAAc,SAAS,EAAE,MAAc,KAAM,EAAE,OAAuB,QAAQ,mDAAmD,GAAG;GAE3I,UAAU,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,CAAC;EAC5D;EACA,WAAW,GAET,oLACA,UACI,4DACA,WAAW,CAAC,WACV,4BACA,8CACR;EA3BF,UAAA;GA8BE,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACG,MAAM,CAAC,IAAI,OACV,oBAAC,QAAD,EAAM,WAAU,MAAO,CAAA,IAEvB,oBAAC,SAAD;MAAS,SAAQ;MACf,UAAA,oBAAC,UAAD;OACE,MAAK;OACL,cAAY,QAAQ;OACpB,UAAU;OACV,gBAAgB,MAAM,IAAI,OAAO,IAAI,CAAC;OACtC,WAAU;OAEV,UAAA,oBAAC,kBAAD,EAAkB,QAAQ,IAAM,CAAA;MAC1B,CAAA;KACD,CAAA;KAEV,MAAM,QAAQ,YACb,oBAAC,QAAD;MAAM,eAAA;MAAY,WAAU;MAC1B,UAAA,oBAAC,WAAD;OAAW,MAAM,KAAK;OAAM,WAAU;MAAe,CAAA;KACjD,CAAA,IAEN,oBAAC,gBAAD;MAAgB,MAAM;MAAI,QAAQ;MAAK,WAAU;MAAyB,eAAA;KAAa,CAAA;KAEzF,oBAAC,QAAD;MAAM,WAAU;MAA+D,UAAA;KAAW,CAAA;KACzF,KAAK,MAAM;KACZ,oBAAC,QAAD,EAAM,WAAU,SAAU,CAAA;KAC1B,qBAAC,MAAD,EAAA,UAAA,CACE,oBAAC,aAAD,EACE,QACE,oBAAC,YAAD;MAAY,MAAK;MAAK,WAAU;MAAW,OAAO,GAAG,KAAK;MACxD,UAAA,oBAAC,UAAD,EAAU,QAAQ,IAAM,CAAA;KACd,CAAA,EAEf,CAAA,GACD,qBAAC,aAAD;MAAa,OAAM;MAAM,WAAU;MAAnC,UAAA;OACG,oBACC,oBAAC,UAAD;QAAU,MAAM,oBAAC,2BAAD,EAA2B,QAAQ,IAAM,CAAA;QAAG,eAAe,UAAU;QAAG,UAAA;OAE9E,CAAA,IACR;OACH,UACC,oBAAC,UAAD;QAAU,MAAM,oBAAC,kBAAD,EAAkB,QAAQ,IAAM,CAAA;QAAG,SAAS,QAAQ;QACjE,UAAA,QAAQ;OACD,CAAA,IACR;OACH,CAAC,MAAM,WACN,oBAAC,UAAD;QAAU,MAAM,oBAAC,aAAD,EAAa,QAAQ,IAAM,CAAA;QAAG,SAAS;QAAU,UAAA;OAEvD,CAAA,IACR;OACH,WAAW,QAAQ,CAAC,WAAW,CAAC,WAC/B,oBAAC,UAAD;QAAU,MAAM,oBAAC,YAAD,EAAY,QAAQ,IAAM,CAAA;QAAG,UAAU;QAAM,eAAe,UAAU,QAAQ;QAAG,UAAA;OAEvF,CAAA,IACR;OACH,WAAW,WAAW,CAAC,WACtB,oBAAC,UAAD;QAAU,MAAM,oBAAC,YAAD,EAAY,QAAQ,IAAM,CAAA;QAAG,UAAU;QAAM,eAAe,KAAK,OAAO,yBAAyB;QAAG,UAAA;OAE1G,CAAA,IACR;OACH,WAAW,QAAQ,CAAC,WAAW,WAC9B,oBAAC,UAAD;QAAU,MAAM,oBAAC,UAAD,EAAU,QAAQ,IAAM,CAAA;QAAG,eAAe,UAAU,QAAQ;QAAG,UAAA;OAErE,CAAA,IACR;OACH,CAAC,MAAM,UAAU,SAChB,qBAAC,SAAD,EAAA,UAAA,CACE,oBAAC,gBAAD;QAAgB,MAAM,oBAAC,aAAD,EAAa,QAAQ,IAAM,CAAA;QAAG,UAAA;OAA0B,CAAA,GAC9E,oBAAC,gBAAD;QAAgB,WAAU;QACvB,UAAA,UAAU,KAAK,MAAM;SACpB,MAAM,KAAK,EAAE,OAAO,EAAE;SACtB,OACE,oBAAC,UAAD;UAAqB,MAAM,oBAAC,gBAAD,EAAgB,QAAQ,IAAM,CAAA;UAAG,UAAU,MAAM,CAAC,CAAC;UAAQ,eAAe,UAAU,CAAC;UAC9G,UAAA,qBAAC,QAAD;WAAM,WAAU;WAAhB,UAAA,CACE,oBAAC,QAAD;YAAM,WAAU;YAAY,UAAA,EAAE;WAAW,CAAA,GACxC,KAAK,oBAAC,WAAD;YAAW,WAAU;YAAkC,QAAQ;YAAG,cAAW;WAAW,CAAA,IAAI,IAC9F;;SACE,GALK,EAAE,EAKP;QAEd,CAAC;OACa,CAAA,CACT,EAAA,CAAA,IACP;OACH,UACC,oBAAC,UAAD;QAAU,MAAM,YAAY,oBAAC,wBAAD,EAAwB,QAAQ,IAAM,CAAA,IAAI,oBAAC,0BAAD,EAA0B,QAAQ,IAAM,CAAA;QAAG,eAAe,aAAa,CAAC,SAAS;QACpJ,UAAA,YAAY,iBAAiB;OACtB,CAAA,IACR;OACJ,oBAAC,eAAD,CAAgB,CAAA;OACf,CAAC,MAAM,IAAI,YACV,oBAAC,UAAD;QAAU,MAAM,oBAAC,UAAD,EAAU,QAAQ,IAAM,CAAA;QAAG,UAAS;QAAK,eAAe,IAAI,YAAY,EAAE;QAAG,UAAA;OAEnF,CAAA,IACR;OACH,CAAC,MAAM,IAAI,OACV,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,UAAD;QAAU,MAAM,oBAAC,kBAAD,EAAkB,QAAQ,IAAM,CAAA;QAAG,UAAS;QAAK,UAAU,CAAC,GAAG;QAAwB,eAAe,IAAI,OAAO,IAAI,EAAE;QAAG,UAAA;OAEhI,CAAA,GACV,oBAAC,UAAD;QAAU,MAAM,oBAAC,oBAAD,EAAoB,QAAQ,IAAM,CAAA;QAAG,UAAS;QAAK,UAAU,CAAC,GAAG;QAAoB,eAAe,IAAI,OAAO,IAAI,CAAC;QAAG,UAAA;OAE7H,CAAA,CACV,EAAA,CAAA,IACA;OACH,OACC,oBAAC,UAAD;QAAU,MAAM,oBAAC,UAAD,EAAU,QAAQ,IAAM,CAAA;QAAG,SAAS;QAAU,UAAA;OAEpD,CAAA,IACR;OACH,CAAC,KACA,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,eAAD,CAAgB,CAAA,GAChB,oBAAC,UAAD;QAAU,QAAA;QAAO,MAAM,oBAAC,WAAD,EAAW,QAAQ,IAAM,CAAA;QAAG,UAAS;QAAI,eAAe,IAAI,OAAO,EAAE;QAAG,UAAA;OAErF,CAAA,CACV,EAAA,CAAA,IACA;MACO;KACT,CAAA,CAAA,EAAA,CAAA;IACH;;GACJ,QACC,qBAAC,OAAD;IAAK,MAAK;IAAQ,WAAU;IAA5B,UAAA,CACE,oBAAC,mBAAD;KAAmB,WAAU;KAAsC,QAAQ;KAAK,eAAA;IAAa,CAAA,GAC7F,oBAAC,QAAD;KAAM,WAAU;KAAkB,UAAA;IAAY,CAAA,CAC3C;GACH,CAAA,IAAA;GACH,WAAW,CAAC,YAAY,CAAC,UACxB,qBAAC,OAAD;IAAK,WAAU;IAA4F,MAAK;IAAhH,UAAA;KACE,oBAAC,mBAAD;MAAmB,WAAU;MAAsC,QAAQ;MAAK,eAAA;KAAa,CAAA;KAC7F,qBAAC,QAAD;MAAM,WAAU;MAAhB,UAAA;OAA+C;OAAe;OAAK;MAAuD;;KACzH,IAAI,WAAW,OACd,qBAAC,QAAD;MAAM,WAAU;MAAhB,UAAA,CACG,UACC,oBAAC,QAAD;OAAQ,MAAK;OAAK,SAAQ;OAAY,SAAS;OAAM,eAAe,KAAK,OAAO,yBAAyB;OAAG,UAAA;MAEpG,CAAA,IACN,MACJ,oBAAC,QAAD;OAAQ,MAAK;OAAK,SAAQ;OAAe,eAAe,IAAI,OAAO,EAAE;OAAG,UAAA;MAEhE,CAAA,CACJ;;IAEL;GACH,CAAA,IAAA;GACH,YAAY,OAAO;GACnB,UACC,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,cAAD;IACE,MAAM,WAAW;IACX;IACE;IACR,eAAe,UAAU,IAAI;IAC7B,iBAAiB;KACf,UAAU,IAAI;KACd,OAAY,oBAAoB,MAAM;IACxC;GACD,CAAA,GACD,oBAAC,cAAD;IACE,MAAM,WAAW;IACX;IACN,MAAM,OAAO,KAAK,UAAU,GAAG,KAAK,MAAM,MAAM,CAAC,CAAC,CAAC;IACnD,eAAe,UAAU,IAAI;IAC7B,YAAY,SAAS;KACnB,UAAU,IAAI;KACd,OAAO,IAAI;IACb;GACD,CAAA,CACD,EAAA,CAAA,IACA;GACH,SACC,oBAAC,cAAD;IACO;IACL,IAAI;IACJ,UAAU,SAAS;KACjB,UAAU,IAAI;KACd,KAAK,QAAQ,IAAI;IACnB;IACA,SAAS,QAAQ;KACf,UAAU,IAAI;KACd,IAAI,OAAO,oBAAoB,OAAO,QAAQ,GAAG;IACnD;GACD,CAAA,IACC;GACH,OACC,oBAAC,gBAAD;IACQ;IACN,MAAM,KAAK,KAAK;IAChB,QAAQ;IACF;IACG;IACT,SAAS;IACT,WAAW;IACX,UAAU;KACR,aAAa,EAAE,OAAO;KACtB;KACA,GAAI,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,IAAI,CAAC;KAC1C,GAAI,WAAW,EAAE,UAAU,EAAE,OAAO,IAAI,EAAE,IAAI,CAAC;KAE/C,UAAU,MAAM,YAAY;KAC5B;KACA;IACF;GACD,CAAA,IACC;EACD;;AAET;;;;;;;;;;AAWA,SAAS,UAAU,GAAmB,KAA8B,QAAkE;CACpI,MAAM,MAA+B,CAAC;CACtC,IAAI,EAAE,WAAW,KAAA,GAAW,OAAO;CACnC,KAAK,MAAM,KAAK,UAAU,CAAC,GAAG,IAAI,EAAE,OAAO,OAAO,CAAC,KAAK,IAAI,EAAE,MAAM,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,IAAI,EAAE;CACjG,OAAO;AACT;AAEA,IAAM,iBAAiB;;AAEvB,IAAM,SAAS,MAAe,KAAK,QAAS,OAAO,MAAM,YAAY,CAAC,EAAE,KAAK,KAAO,MAAM,QAAQ,CAAC,KAAK,EAAE,WAAW;;AAGrH,SAAS,UAAU,EAAE,SAAS,QAAQ,QAAQ,QAAQ,eAAe,WAA+H;CAClM,MAAM,OAAO;CACb,IAAI,SACF,OACE,oBAAC,SAAD;EAAS,SAAQ;EACf,UAAA,qBAAC,QAAD;GAAM,WAAW,GAAG,MAAM,gDAAgD;GAA1E,UAAA,CACE,oBAAC,mBAAD;IAAmB,WAAU;IAAoB,QAAQ;IAAK,eAAA;GAAa,CAAA,GAC1E,UAAU,oBAAC,QAAD;IAAM,WAAU;IAAU,UAAA;GAAmB,CAAA,IAAI,eACxD;;CACC,CAAA;CAGb,MAAM,QAAQ,SAAS,YAAY,MAAM,IAAI;CAC7C,MAAM,MAAM,mEAAmE,UAAU,SAAS,IAAI,OAAO,WAAW,gBAAgB,GACtI,SAAS,IAAI,OAAO,GAAG,WAAW,IAAI,UAAU,SAAS,iBAAiB,KAAK,SAAS,6BAA6B,KAAK,gBAAgB,IAAI,mBAAmB;CAEnK,OACE,oBAAC,SAAD;EAAS,SAAS;EAChB,UAAA,qBAAC,QAAD;GAAM,WAAW,GAAG,MAAM,oBAAoB;GAAG,UAAU;GAA3D,UAAA;IACG,gBAAgB,oBAAC,QAAD;KAAM,uBAAA;KAAoB,WAAU;KAAkD,eAAA;IAAa,CAAA,IAAI;IACxH,oBAAC,UAAD;KAAU,WAAU;KAAoB,QAAQ;KAAK,eAAA;IAAa,CAAA;IACjE,UAAU,qBAAC,QAAD;KAAM,WAAU;KAAhB,UAAA,CAA0B,UAAO,QAAQ,KAAK,UAAU,EAAS;IAAI,CAAA,IAAA,SAAS;IACxF,CAAC,WAAW,QAAQ,oBAAC,QAAD;KAAM,WAAU;KAAU,UAAA;IAAc,CAAA,IAAI;IAChE,UAAU,SACT,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,QAAD;KAAM,WAAU;KAAoD,eAAA;IAAa,CAAA,GAChF,UAAU,oBAAC,QAAD;KAAM,WAAU;KAAU,UAAA;IAAmB,CAAA,IAAI,oBAAC,QAAD,EAAA,UAAM,cAAiB,CAAA,CACnF,EAAA,CAAA,IACA;GACA;;CACC,CAAA;AAEb;AAEA,IAAM,OAAO;;AAGb,SAAS,aAAa,EAAE,MAAM,WAA+C;CAC3E,OACE,oBAAC,SAAD;EAAS,SAAS,+BAA+B,KAAK;EACpD,UAAA,qBAAC,QAAD;GAAM,WAAW,GAAG,MAAM,oBAAoB;GAAG,UAAU;GAA3D,UAAA,CACE,oBAAC,YAAD;IAAY,WAAU;IAAoB,QAAQ;IAAK,eAAA;GAAa,CAAA,GACnE,UAAU,oBAAC,QAAD;IAAM,WAAU;IAAU,UAAA;GAAc,CAAA,IAAI,UACnD;;CACC,CAAA;AAEb;;AAGA,SAAS,YAAY,EAAE,MAAM,SAAS,YAAuE;CAC3G,OACE,oBAAC,SAAD;EAAS,SAAS,GAAG,KAAK;EACxB,UAAA,qBAAC,UAAD;GACE,MAAK;GACL,SAAS;GACT,UAAU,CAAC;GACX,WAAW,GAAG,MAAM,uFAAuF;GAJ7G,UAAA,CAME,oBAAC,aAAD;IAAa,WAAU;IAAoB,QAAQ;IAAK,eAAA;GAAa,CAAA,GACpE,UAAU,oBAAC,QAAD;IAAM,WAAU;IAAU,UAAA;GAA4B,CAAA,IAAI,wBAC/D;;CACD,CAAA;AAEb;;AAGA,SAAS,aAAa,EAAE,MAAM,MAAM,QAAQ,SAAS,aAA2G;CAC9J,MAAM,SAAS,UAAU,OAAO,SAAS,IAAI;CAC7C,OACE,oBAAC,OAAD;EAAa;EAAM,eAAe,MAAM,CAAC,KAAK,QAAQ;EACpD,UAAA,qBAAC,cAAD;GAAc,MAAK;GAAnB,UAAA;IACE,oBAAC,aAAD;KAAa,OAAO,2BAA2B,KAAK;KAAI,aAAY;IAA8E,CAAA;IACjJ,UAAU,OACT,oBAAC,WAAD;KAAW,WAAU;KAClB,UAAA,SAAS,IAAI,aAAa,WAAW,IAAI,gBAAgB,GAAG,OAAO,cAAc,YAAY;IACrF,CAAA,IACT;IACJ,qBAAC,aAAD,EAAA,UAAA,CACE,oBAAC,QAAD;KAAQ,SAAQ;KAAQ,SAAS;KAAS,UAAA;IAElC,CAAA,GACR,oBAAC,QAAD;KAAQ,SAAQ;KAAU,WAAA;KAAU,SAAS;KAAW,UAAA;IAEhD,CAAA,CACG,EAAA,CAAA;GACD;;CACT,CAAA;AAEX;;AAGA,SAAS,aAAa,EAAE,MAAM,MAAM,MAAM,SAAS,aAA8H;CAC/K,MAAM,CAAC,MAAM,WAAW,MAAM,SAA2B,MAAM;CAC/D,MAAM,gBAAgB;EACpB,IAAI,MAAM,QAAQ,MAAM;CAC1B,GAAG,CAAC,IAAI,CAAC;CACT,MAAM,OAA+D,CACnE;EACE,GAAG;EACH,OAAO;EACP,MAAM,OAAO,GAAG,KAAK,GAAG,SAAS,IAAI,gBAAgB,cAAc,MAAM,SAAS,IAAI,UAAU,WAAW,4BAA4B,KAAK,WAAW,yCAAyC,KAAK;CACvM,GACA;EAAE,GAAG;EAAS,OAAO,OAAO,KAAK;EAAa,MAAM;CAAqD,CAC3G;CACA,OACE,oBAAC,OAAD;EAAa;EAAM,eAAe,MAAM,CAAC,KAAK,QAAQ;EACpD,UAAA,qBAAC,cAAD;GAAc,MAAK;GAAnB,UAAA;IACE,oBAAC,aAAD;KAAa,OAAO,kBAAkB,KAAK;KAAU,aAAY;IAA8C,CAAA;IAC/G,oBAAC,WAAD;KAAW,WAAU;KACnB,UAAA,oBAAC,OAAD;MACE,MAAK;MACL,cAAW;MACX,WAAU;MACV,YAAY,MAAM;OAEhB,IAAI,CAAC;QAAC;QAAW;QAAa;QAAa;OAAY,CAAC,CAAC,SAAS,EAAE,GAAG,GAAG;OAC1E,EAAE,eAAe;OACjB,MAAM,OAAO,SAAS,SAAS,UAAU;OACzC,QAAQ,IAAI;OACZ,EAAG,cAAc,cAAc,eAAe,KAAK,GAAG,CAAC,EAAyB,MAAM;MACxF;MAEC,UAAA,KAAK,KAAK,QACT,qBAAC,UAAD;OAEE,MAAK;OACL,MAAK;OACL,aAAW,IAAI;OACf,UAAU,SAAS,IAAI,IAAI,IAAI;OAC/B,gBAAc,SAAS,IAAI;OAC3B,eAAe,QAAQ,IAAI,CAAC;OAC5B,WAAW,GAAG,8FAA8F,SAAS,IAAI,KAAK,eAAe;OAR/I,UAAA,CAUE,oBAAC,QAAD;QAAM,WAAW,GAAG,+EAA+E,SAAS,IAAI,IAAI,+BAA+B,wBAAwB;QACxK,UAAA,SAAS,IAAI,IAAI,oBAAC,QAAD,EAAM,WAAU,gCAAiC,CAAA,IAAI;OACnE,CAAA,GACN,qBAAC,QAAD;QAAM,WAAU;QAAhB,UAAA,CACE,oBAAC,QAAD;SAAM,WAAU;SAA6C,UAAA,IAAI;QAAY,CAAA,GAC7E,oBAAC,QAAD;SAAM,WAAU;SAAmC,UAAA,IAAI;QAAW,CAAA,CAC9D;OACA,CAAA,CAAA;MAhBD,GAAA,IAAI,CAgBH,CACT;KACE,CAAA;IACI,CAAA;IACX,qBAAC,aAAD,EAAA,UAAA,CACE,oBAAC,QAAD;KAAQ,SAAQ;KAAQ,SAAS;KAAS,UAAA;IAElC,CAAA,GACR,oBAAC,QAAD;KAAQ,SAAQ;KAAU,eAAe,UAAU,IAAI;KAAG,UAAA;IAElD,CAAA,CACG,EAAA,CAAA;GACD;;CACT,CAAA;AAEX;;;;;;;AAcA,SAAS,OAAO,GAAsB,GAAqB;CACzD,IAAI,CAAC,EAAE,SAAS,OAAO;CACvB,MAAM,SAAS,MAAe,EAAE,QAAS,MAAM,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,SAAS;CAC9E,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC;AAC7D;AAEA,SAAS,YAAY,SAAkB,QAAyC,WAAoC,SAAyB;CAC3I,MAAM,MAAa,CAAC;CACpB,IAAI,WAAW,CAAC,QACd,KAAK,MAAM,CAAC,KAAK,MAAM,OAAO,QAAQ,SAAS,GAAG;EAChD,MAAM,OAAO,SAAS,CAAC;EACvB,IAAI,MAAM,IAAI,KAAK;GAAE;GAAK,OAAO;GAAK;EAAK,CAAC;CAC9C;MAEA,KAAK,MAAM,KAAK,QAAQ;EACtB,MAAM,OAAO,SAAS,OAAO,GAAG,EAAE,OAAO,YAAY,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC;EAChF,IAAI,MAAM,IAAI,KAAK;GAAE,KAAK,EAAE;GAAK,OAAO,EAAE;GAAO;EAAK,CAAC;CACzD;CAEF,IAAI,SAAS,IAAI,KAAK;EAAE,KAAK;EAAa,OAAO;EAAU,MAAM;CAAQ,CAAC;CAC1E,OAAO;AACT;;;;;;AAOA,SAAS,SAAS,KAA8B,QAAyC,SAAyB;CAChH,MAAM,MAAa,CAAC;CACpB,MAAM,QAAQ,KAAa,OAAe,MAAe;EACvD,MAAM,OAAO,SAAS,CAAC;EACvB,IAAI,MAAM,IAAI,KAAK;GAAE;GAAK;GAAO;EAAK,CAAC;CACzC;CACA,KAAK,MAAM,KAAK,UAAU,CAAC,GAAG,KAAK,EAAE,KAAK,EAAE,OAAO,OAAO,GAAG,EAAE,OAAO,MAAM,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC;CACjG,KAAK,MAAM,CAAC,KAAK,MAAM,OAAO,QAAQ,GAAG,GAAG,IAAI,CAAC,QAAQ,MAAM,MAAM,EAAE,QAAQ,GAAG,GAAG,KAAK,KAAK,KAAK,CAAC;CACrG,IAAI,SAAS,IAAI,KAAK;EAAE,KAAK;EAAa,OAAO;EAAU,MAAM;CAAQ,CAAC;CAC1E,OAAO;AACT;;;;;AAMA,IAAM,iBAAiB;;;;;AAMvB,SAAS,cAAc,EAAE,MAAM,YAA2D;CACxF,MAAM,QAAQ,MAAM,OAAuB,IAAI;CAC/C,MAAM,CAAC,MAAM,WAAW,MAAM,SAAS,KAAK;CAE5C,MAAM,CAAC,MAAM,WAAW,MAAM,SAAS,KAAK;CAC5C,MAAM,sBAAsB;EAC1B,MAAM,KAAK,MAAM;EACjB,IAAI,CAAC,IAAI;EACT,IAAI,MAAM;EACV,MAAM,gBAAgB;GACpB,qBAAqB,GAAG;GACxB,MAAM,4BAA4B;IAChC,QAAQ,GAAG,eAAe,GAAa;IACvC,QAAQ,CAAC,CAAC,GAAG,cAAc,QAAQ,CAAC;GACtC,CAAC;EACH;EACA,QAAQ;EACR,MAAM,KAAK,OAAO,mBAAmB,cAAc,OAAO,IAAI,eAAe,OAAO;EACpF,IAAI,QAAQ,EAAE;EAEd,MAAM,KAAK,OAAO,qBAAqB,cAAc,OAAO,IAAI,iBAAiB,OAAO;EACxF,IAAI,QAAQ,IAAI;GAAE,WAAW;GAAM,SAAS;EAAK,CAAC;EAClD,aAAa;GACX,IAAI,WAAW;GACf,IAAI,WAAW;GACf,qBAAqB,GAAG;EAC1B;CACF,GAAG,CAAC,CAAC;CACL,OACE,qBAAC,OAAD;EACE,yBAAsB;EACtB,aAAW,OAAO,KAAK,KAAA;EACvB,aAAW,OAAO,KAAK,KAAA;EACvB,aAAW,OAAO,KAAK,KAAA;EACvB,WAAW,GAAG,gBAAgB,OAAO,sBAAsB,iBAAiB,QAAQ,gCAAgC;EALtH,UAAA,CAOE,oBAAC,OAAD;GAAK,KAAK;GAAQ;EAAc,CAAA,GAE/B,OACC,oBAAC,OAAD;GACE,eAAA;GACA,WAAW,GACT,oMACA,OAAO,sBAAsB,eAC/B;EACD,CAAA,IACC,IACD;;AAET;AAEA,SAAS,cAAc,EAAE,OAAO,QAA+C;CAC7E,OACE,oBAAC,eAAD,EAAA,UACE,oBAAC,aAAD;EAAoB;EAAa;CAAO,CAAA,EAC3B,CAAA;AAEnB;;;;;;AAOA,SAAS,YAAY,EACnB,SACA,aACA,OACA,OACA,QAOC;CACD,MAAM,MAAM,MAAM,OAAuB,IAAI;CAC7C,MAAM,CAAC,MAAM,WAAW,MAAM,eAAe,OAAO,yBAAyB,WAAW;CACxF,MAAM,gBAAgB;EACpB,MAAM,KAAK,IAAI;EACf,IAAI,QAAQ,CAAC,IAAI;EACjB,MAAM,KAAK,IAAI,sBAAsB,YAAY;GAC/C,IAAI,QAAQ,MAAM,MAAM,EAAE,cAAc,GAAG,QAAQ,IAAI;EACzD,CAAC;EACD,GAAG,QAAQ,EAAE;EACb,aAAa,GAAG,WAAW;CAC7B,GAAG,CAAC,IAAI,CAAC;CACT,OACE,oBAAC,eAAD;EAAe,MAAA;EACb,UAAA,oBAAC,OAAD;GAAK,KAAK;GACP,UAAA,OACC,oBAAC,SAAD;IAAsB;IAAoB;IAAc;IAAO,WAAW,WAAW,oBAAC,aAAD;KAAa,OAAO;KAAY;KAAM,MAAM;IAAS,CAAA;GAAI,CAAA,IAE9I,oBAAC,OAAD;IAAK,eAAA;IAAY,OAAO,EAAE,QAAQ,UAAU;GAAI,CAAA;EAE/C,CAAA;CACQ,CAAA;AAEnB;AAEA,SAAS,YAAY,EAAE,OAAO,MAAM,QAA8D;CAEhG,MAAM,CAAC,QAAQ,aAAa,MAAM,SAAS,CAAC,KAAK;CACjD,OACE,oBAAC,OAAD;EAAK,OAAO,CAAC,SAAS,EAAE,QAAQ,UAAU,IAAI,KAAA;EAC3C,UAAA,QAEC,oBAAC,OAAD;GAAK,KAAK;GAAO,KAAI;GAAG,WAAU;GAAsB,WAAW;GAAO,cAAc,UAAU,IAAI;GAAG,eAAe,UAAU,IAAI;EAAI,CAAA,IAE1I,qBAAA,UAAA,EAAA,UAAA,CACG,OAAO,oBAAC,KAAD;GAAG,WAAU;GAAuC,UAAA;EAAQ,CAAA,IAAI,MACxE,oBAAC,MAAD;GAAI,WAAU;GACX,UAAA,KAAK,KAAK,MAET,qBAAC,OAAD;IAAiB,iBAAe,EAAE,QAAQ,cAAc,KAAA,IAAY,EAAE;IAAK,WAAU;IAArF,UAAA,CACE,oBAAC,MAAD;KAAI,WAAU;KAAsC,UAAA,EAAE;IAAU,CAAA,GAChE,oBAAC,MAAD;KAAI,WAAU;KAA+C,UAAA,EAAE;IAAS,CAAA,CACrE;GAHK,GAAA,EAAE,GAGP,CACN;EACC,CAAA,CACJ,EAAA,CAAA;CAED,CAAA;AAET;;AAGA,SAAS,UAAU,MAAmB,GAAW,GAA0B;CACzE,KAAK,MAAM,OAAO,KAAK,iBAA8B,iBAAiB,GAAG;EACvE,MAAM,IAAI,IAAI,sBAAsB;EACpC,IAAI,KAAK,EAAE,QAAQ,KAAK,EAAE,SAAS,KAAK,EAAE,OAAO,KAAK,EAAE,QAAQ,OAAO,IAAI,QAAQ,WAAW;CAChG;CACA,OAAO;AACT;;;;;AAMA,SAAS,aAAa,EACpB,KAAK,IAAI,SAAS,UAMjB;CACD,MAAM,EAAE,MAAM,UAAU,IAAI,GAAG,EAAE;CACjC,MAAM,OAAO,MAAM,OAAO,KAAK;CAC/B,MAAM,gBAAgB;EACpB,IAAI,KAAK,SAAS;EAClB,IAAI,OAAO;GACT,KAAK,UAAU;GACf,OAAO,KAAK;EACd,OAAO,IAAI,MAAM,SAAS;GACxB,KAAK,UAAU;GACf,OAAO,gCAAgC;EACzC,OAAO,IAAI,MAAM;GACf,KAAK,UAAU;GACf,QAAQ,IAAI;EACd;CACF,CAAC;CACD,OAAO;AACT"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An embedded component's properties panel (V2 features/blocks/instance-panel.tsx, CPO D54): this place's settings in
|
|
3
|
+
* the kit FloatingPanel beside the text. One panel at a time: opening another card's panel refills it at the same spot
|
|
4
|
+
* and size, with no entrance animation.
|
|
5
|
+
*
|
|
6
|
+
* header (40px, the drag handle) name · scope chip · [Show in editor] (only while the card is out of view) · ×
|
|
7
|
+
* body the host's settings form (KitServices.ComponentSettings), else a sentence and
|
|
8
|
+
* "Edit for all N places"
|
|
9
|
+
*
|
|
10
|
+
* Opens from a click on the card, Enter on the focused card, ⋯ › Edit properties, or a fresh insert
|
|
11
|
+
* (`openComponentPanel`, which the editor calls before the card has mounted). Closes with Esc (menus and drafts first),
|
|
12
|
+
* ×, or removing the component; focus goes back to the card.
|
|
13
|
+
*/
|
|
14
|
+
import * as React from "react";
|
|
15
|
+
import type { KitComponentSettingsProps } from "../component-services";
|
|
16
|
+
import type { IslandEl } from "./dom";
|
|
17
|
+
interface PanelState {
|
|
18
|
+
el: IslandEl;
|
|
19
|
+
/** the field to focus on open; `nonce` lets the same field be asked for twice */
|
|
20
|
+
focusKey: string | null;
|
|
21
|
+
nonce: number;
|
|
22
|
+
/** another card's panel was open: refill in place, no entrance animation */
|
|
23
|
+
refill: boolean;
|
|
24
|
+
}
|
|
25
|
+
export declare function openComponentPanel(el: IslandEl, focusKey?: string | null): void;
|
|
26
|
+
/** Closes `el`'s panel (any panel when `el` is omitted). */
|
|
27
|
+
export declare function closeComponentPanel(el?: IslandEl): void;
|
|
28
|
+
/** The open panel when it is `el`'s, else null. */
|
|
29
|
+
export declare function useComponentPanel(el: IslandEl): PanelState | null;
|
|
30
|
+
export declare function ComponentPanel({ name, chip, anchor, open, settings, editAll, onClose, focusBack, }: {
|
|
31
|
+
name: string;
|
|
32
|
+
/** the card's scope chip (V2 StateChip) */
|
|
33
|
+
chip: React.ReactNode;
|
|
34
|
+
/** the card: the panel docks beside its column and follows it */
|
|
35
|
+
anchor: HTMLElement | null;
|
|
36
|
+
open: PanelState;
|
|
37
|
+
/** what the host's settings form edits; the panel fills in `focusKey` */
|
|
38
|
+
settings: Omit<KitComponentSettingsProps, "focusKey">;
|
|
39
|
+
/** "Edit for all N places", when the host can open the component */
|
|
40
|
+
editAll?: {
|
|
41
|
+
label: string;
|
|
42
|
+
run: () => void;
|
|
43
|
+
};
|
|
44
|
+
onClose: () => void;
|
|
45
|
+
focusBack: () => void;
|
|
46
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
47
|
+
export {};
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { useKitServices } from "../../context.js";
|
|
2
|
+
import { Button, IconButton } from "../../ui/button.js";
|
|
3
|
+
import { FloatingPanel } from "../../ui/floating-panel.js";
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
import { IconArrowUpRight, IconCrosshair, IconX } from "@tabler/icons-react";
|
|
7
|
+
//#region src/controls/rich-text/component-panel.tsx
|
|
8
|
+
/**
|
|
9
|
+
* An embedded component's properties panel (V2 features/blocks/instance-panel.tsx, CPO D54): this place's settings in
|
|
10
|
+
* the kit FloatingPanel beside the text. One panel at a time: opening another card's panel refills it at the same spot
|
|
11
|
+
* and size, with no entrance animation.
|
|
12
|
+
*
|
|
13
|
+
* header (40px, the drag handle) name · scope chip · [Show in editor] (only while the card is out of view) · ×
|
|
14
|
+
* body the host's settings form (KitServices.ComponentSettings), else a sentence and
|
|
15
|
+
* "Edit for all N places"
|
|
16
|
+
*
|
|
17
|
+
* Opens from a click on the card, Enter on the focused card, ⋯ › Edit properties, or a fresh insert
|
|
18
|
+
* (`openComponentPanel`, which the editor calls before the card has mounted). Closes with Esc (menus and drafts first),
|
|
19
|
+
* ×, or removing the component; focus goes back to the card.
|
|
20
|
+
*/
|
|
21
|
+
var state = null;
|
|
22
|
+
var nonce = 0;
|
|
23
|
+
var subs = /* @__PURE__ */ new Set();
|
|
24
|
+
var publish = (next) => {
|
|
25
|
+
state = next;
|
|
26
|
+
subs.forEach((f) => f());
|
|
27
|
+
};
|
|
28
|
+
function openComponentPanel(el, focusKey = null) {
|
|
29
|
+
publish({
|
|
30
|
+
el,
|
|
31
|
+
focusKey,
|
|
32
|
+
nonce: ++nonce,
|
|
33
|
+
refill: !!state && state.el !== el
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
/** Closes `el`'s panel (any panel when `el` is omitted). */
|
|
37
|
+
function closeComponentPanel(el) {
|
|
38
|
+
if (state && (!el || state.el === el)) publish(null);
|
|
39
|
+
}
|
|
40
|
+
/** The open panel when it is `el`'s, else null. */
|
|
41
|
+
function useComponentPanel(el) {
|
|
42
|
+
const s = React.useSyncExternalStore((cb) => (subs.add(cb), () => void subs.delete(cb)), () => state, () => state);
|
|
43
|
+
return s && s.el === el ? s : null;
|
|
44
|
+
}
|
|
45
|
+
function useInView(el) {
|
|
46
|
+
const [seen, setSeen] = React.useState(true);
|
|
47
|
+
React.useEffect(() => {
|
|
48
|
+
if (!el || typeof IntersectionObserver === "undefined") return;
|
|
49
|
+
const io = new IntersectionObserver((list) => setSeen(list.some((x) => x.isIntersecting)), { threshold: 0 });
|
|
50
|
+
io.observe(el);
|
|
51
|
+
return () => io.disconnect();
|
|
52
|
+
}, [el]);
|
|
53
|
+
return seen;
|
|
54
|
+
}
|
|
55
|
+
var FOCUSABLE = "input:not([type=hidden]), textarea, select, [contenteditable=true], button, [tabindex]:not([tabindex='-1'])";
|
|
56
|
+
function ComponentPanel({ name, chip, anchor, open, settings, editAll, onClose, focusBack }) {
|
|
57
|
+
const { ComponentSettings } = useKitServices();
|
|
58
|
+
const panel = React.useRef(null);
|
|
59
|
+
const titleId = React.useId();
|
|
60
|
+
const inView = useInView(anchor);
|
|
61
|
+
const container = anchor?.closest("[data-expanded-editor]") ?? null;
|
|
62
|
+
React.useEffect(() => panel.current?.announce(`${name} properties.`), [name]);
|
|
63
|
+
React.useEffect(() => {
|
|
64
|
+
const t = window.setTimeout(() => {
|
|
65
|
+
const root = panel.current?.el();
|
|
66
|
+
if (!root || root.contains(document.activeElement)) return;
|
|
67
|
+
const body = root.querySelector("[data-panel-body]");
|
|
68
|
+
const row = open.focusKey ? Array.from(body?.querySelectorAll("[data-field-key]") ?? []).find((r) => r.getAttribute("data-field-key") === open.focusKey) : null;
|
|
69
|
+
const list = Array.from((row ?? body)?.querySelectorAll(FOCUSABLE) ?? []);
|
|
70
|
+
(list.find((n) => n.getClientRects().length) ?? list[0] ?? root).focus({ preventScroll: true });
|
|
71
|
+
}, 60);
|
|
72
|
+
return () => window.clearTimeout(t);
|
|
73
|
+
}, [open.nonce]);
|
|
74
|
+
const close = () => (onClose(), focusBack());
|
|
75
|
+
return /* @__PURE__ */ jsx(FloatingPanel, {
|
|
76
|
+
ref: panel,
|
|
77
|
+
id: "component-properties",
|
|
78
|
+
labelledBy: titleId,
|
|
79
|
+
anchor,
|
|
80
|
+
container,
|
|
81
|
+
header: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
82
|
+
/* @__PURE__ */ jsx("span", {
|
|
83
|
+
id: titleId,
|
|
84
|
+
className: "min-w-0 shrink truncate text-kit-sm font-medium text-kit-fg",
|
|
85
|
+
children: name
|
|
86
|
+
}),
|
|
87
|
+
chip,
|
|
88
|
+
/* @__PURE__ */ jsx("span", { className: "flex-1" }),
|
|
89
|
+
!inView && anchor ? /* @__PURE__ */ jsx(IconButton, {
|
|
90
|
+
size: "sm",
|
|
91
|
+
label: "Show in editor",
|
|
92
|
+
tooltip: "Show in editor",
|
|
93
|
+
onClick: () => anchor.scrollIntoView({
|
|
94
|
+
block: "center",
|
|
95
|
+
behavior: window.matchMedia?.("(prefers-reduced-motion: reduce)").matches ? "auto" : "smooth"
|
|
96
|
+
}),
|
|
97
|
+
children: /* @__PURE__ */ jsx(IconCrosshair, { stroke: 1.5 })
|
|
98
|
+
}) : null,
|
|
99
|
+
/* @__PURE__ */ jsx(IconButton, {
|
|
100
|
+
size: "sm",
|
|
101
|
+
label: "Close properties",
|
|
102
|
+
tooltip: "Close",
|
|
103
|
+
onClick: close,
|
|
104
|
+
children: /* @__PURE__ */ jsx(IconX, { stroke: 1.5 })
|
|
105
|
+
})
|
|
106
|
+
] }),
|
|
107
|
+
onClose,
|
|
108
|
+
focusBack,
|
|
109
|
+
instant: open.refill,
|
|
110
|
+
sheetFooter: /* @__PURE__ */ jsx(Button, {
|
|
111
|
+
size: "sm",
|
|
112
|
+
variant: "primary",
|
|
113
|
+
onClick: close,
|
|
114
|
+
children: "Done"
|
|
115
|
+
}),
|
|
116
|
+
children: ComponentSettings ? /* @__PURE__ */ jsx("div", {
|
|
117
|
+
"data-component-settings": "",
|
|
118
|
+
className: "min-w-0 pb-3 pt-1",
|
|
119
|
+
children: /* @__PURE__ */ jsx(ComponentSettings, {
|
|
120
|
+
...settings,
|
|
121
|
+
focusKey: open.focusKey
|
|
122
|
+
})
|
|
123
|
+
}) : /* @__PURE__ */ jsxs("div", {
|
|
124
|
+
className: "flex flex-col items-start gap-3 px-3 py-3 text-kit-sm text-kit-fg-2",
|
|
125
|
+
children: [/* @__PURE__ */ jsx("p", { children: "This place's fields are edited in the block." }), editAll ? /* @__PURE__ */ jsxs(Button, {
|
|
126
|
+
size: "sm",
|
|
127
|
+
variant: "secondary",
|
|
128
|
+
onClick: editAll.run,
|
|
129
|
+
children: [/* @__PURE__ */ jsx(IconArrowUpRight, {
|
|
130
|
+
stroke: 1.5,
|
|
131
|
+
className: "size-4",
|
|
132
|
+
"aria-hidden": true
|
|
133
|
+
}), editAll.label]
|
|
134
|
+
}) : null]
|
|
135
|
+
})
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
//#endregion
|
|
139
|
+
export { ComponentPanel, closeComponentPanel, openComponentPanel, useComponentPanel };
|
|
140
|
+
|
|
141
|
+
//# sourceMappingURL=component-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-panel.js","names":[],"sources":["../../../src/controls/rich-text/component-panel.tsx"],"sourcesContent":["/**\n * An embedded component's properties panel (V2 features/blocks/instance-panel.tsx, CPO D54): this place's settings in\n * the kit FloatingPanel beside the text. One panel at a time: opening another card's panel refills it at the same spot\n * and size, with no entrance animation.\n *\n * header (40px, the drag handle) name · scope chip · [Show in editor] (only while the card is out of view) · ×\n * body the host's settings form (KitServices.ComponentSettings), else a sentence and\n * \"Edit for all N places\"\n *\n * Opens from a click on the card, Enter on the focused card, ⋯ › Edit properties, or a fresh insert\n * (`openComponentPanel`, which the editor calls before the card has mounted). Closes with Esc (menus and drafts first),\n * ×, or removing the component; focus goes back to the card.\n */\nimport * as React from \"react\";\nimport { IconArrowUpRight, IconCrosshair, IconX } from \"@tabler/icons-react\";\nimport { useKitServices } from \"../../context\";\nimport { Button, IconButton } from \"../../ui/button\";\nimport { FloatingPanel, type FloatingPanelHandle } from \"../../ui/floating-panel\";\nimport type { KitComponentSettingsProps } from \"../component-services\";\nimport type { IslandEl } from \"./dom\";\n\n/* ── Which card's panel is open (one at a time), keyed by the island element so an insert can open it before the card mounts ── */\ninterface PanelState {\n el: IslandEl;\n /** the field to focus on open; `nonce` lets the same field be asked for twice */\n focusKey: string | null;\n nonce: number;\n /** another card's panel was open: refill in place, no entrance animation */\n refill: boolean;\n}\nlet state: PanelState | null = null;\nlet nonce = 0;\nconst subs = new Set<() => void>();\nconst publish = (next: PanelState | null) => {\n state = next;\n subs.forEach((f) => f());\n};\nexport function openComponentPanel(el: IslandEl, focusKey: string | null = null) {\n publish({ el, focusKey, nonce: ++nonce, refill: !!state && state.el !== el });\n}\n/** Closes `el`'s panel (any panel when `el` is omitted). */\nexport function closeComponentPanel(el?: IslandEl) {\n if (state && (!el || state.el === el)) publish(null);\n}\n/** The open panel when it is `el`'s, else null. */\nexport function useComponentPanel(el: IslandEl): PanelState | null {\n const s = React.useSyncExternalStore(\n (cb) => (subs.add(cb), () => void subs.delete(cb)),\n () => state,\n () => state,\n );\n return s && s.el === el ? s : null;\n}\n\nfunction useInView(el: HTMLElement | null) {\n const [seen, setSeen] = React.useState(true);\n React.useEffect(() => {\n if (!el || typeof IntersectionObserver === \"undefined\") return;\n const io = new IntersectionObserver((list) => setSeen(list.some((x) => x.isIntersecting)), { threshold: 0 });\n io.observe(el);\n return () => io.disconnect();\n }, [el]);\n return seen;\n}\n\nconst FOCUSABLE = \"input:not([type=hidden]), textarea, select, [contenteditable=true], button, [tabindex]:not([tabindex='-1'])\";\n\nexport function ComponentPanel({\n name, chip, anchor, open, settings, editAll, onClose, focusBack,\n}: {\n name: string;\n /** the card's scope chip (V2 StateChip) */\n chip: React.ReactNode;\n /** the card: the panel docks beside its column and follows it */\n anchor: HTMLElement | null;\n open: PanelState;\n /** what the host's settings form edits; the panel fills in `focusKey` */\n settings: Omit<KitComponentSettingsProps, \"focusKey\">;\n /** \"Edit for all N places\", when the host can open the component */\n editAll?: { label: string; run: () => void };\n onClose: () => void;\n focusBack: () => void;\n}) {\n const { ComponentSettings } = useKitServices();\n const panel = React.useRef<FloatingPanelHandle>(null);\n const titleId = React.useId();\n const inView = useInView(anchor);\n const container = anchor?.closest<HTMLElement>(\"[data-expanded-editor]\") ?? null;\n React.useEffect(() => panel.current?.announce(`${name} properties.`), [name]);\n React.useEffect(() => {\n // the panel mounts (and, inside the expanded editor, docks) over a few frames: focus lands on the field asked for,\n // else the first control in the body, never taken from somewhere the person already went inside it\n const t = window.setTimeout(() => {\n const root = panel.current?.el();\n if (!root || root.contains(document.activeElement)) return;\n const body = root.querySelector<HTMLElement>(\"[data-panel-body]\");\n const row = open.focusKey ? Array.from(body?.querySelectorAll<HTMLElement>(\"[data-field-key]\") ?? []).find((r) => r.getAttribute(\"data-field-key\") === open.focusKey) : null;\n const list = Array.from((row ?? body)?.querySelectorAll<HTMLElement>(FOCUSABLE) ?? []);\n (list.find((n) => n.getClientRects().length) ?? list[0] ?? root).focus({ preventScroll: true });\n }, 60);\n return () => window.clearTimeout(t);\n }, [open.nonce]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const close = () => (onClose(), focusBack());\n const header = (\n <>\n <span id={titleId} className=\"min-w-0 shrink truncate text-kit-sm font-medium text-kit-fg\">{name}</span>\n {chip}\n <span className=\"flex-1\" />\n {!inView && anchor ? (\n <IconButton size=\"sm\" label=\"Show in editor\" tooltip=\"Show in editor\" onClick={() => anchor.scrollIntoView({ block: \"center\", behavior: window.matchMedia?.(\"(prefers-reduced-motion: reduce)\").matches ? \"auto\" : \"smooth\" })}>\n <IconCrosshair stroke={1.5} />\n </IconButton>\n ) : null}\n <IconButton size=\"sm\" label=\"Close properties\" tooltip=\"Close\" onClick={close}>\n <IconX stroke={1.5} />\n </IconButton>\n </>\n );\n return (\n <FloatingPanel\n ref={panel}\n id=\"component-properties\"\n labelledBy={titleId}\n anchor={anchor}\n container={container}\n header={header}\n onClose={onClose}\n focusBack={focusBack}\n instant={open.refill}\n sheetFooter={\n <Button size=\"sm\" variant=\"primary\" onClick={close}>\n Done\n </Button>\n }\n >\n {ComponentSettings ? (\n <div data-component-settings=\"\" className=\"min-w-0 pb-3 pt-1\">\n <ComponentSettings {...settings} focusKey={open.focusKey} />\n </div>\n ) : (\n <div className=\"flex flex-col items-start gap-3 px-3 py-3 text-kit-sm text-kit-fg-2\">\n <p>This place's fields are edited in the block.</p>\n {editAll ? (\n <Button size=\"sm\" variant=\"secondary\" onClick={editAll.run}>\n <IconArrowUpRight stroke={1.5} className=\"size-4\" aria-hidden />\n {editAll.label}\n </Button>\n ) : null}\n </div>\n )}\n </FloatingPanel>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ControlProps } from "../../types";
|
|
2
|
+
import type { KitRichTextCodec, RichTextRead } from "./codec";
|
|
3
|
+
export declare function setFullEditor(key: string | null): void;
|
|
4
|
+
/** What the control decided for one stored value. */
|
|
5
|
+
type Opened = {
|
|
6
|
+
ok: true;
|
|
7
|
+
read: RichTextRead;
|
|
8
|
+
html: string;
|
|
9
|
+
} | {
|
|
10
|
+
ok: false;
|
|
11
|
+
reason: string;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Open a stored value: read it, then prove the editor carries it unchanged (load → serialize → write === stored).
|
|
15
|
+
* A codec that throws, or a value that does not survive, is handed to the host's own control with the reason.
|
|
16
|
+
*/
|
|
17
|
+
export declare function openValue(codec: KitRichTextCodec, value: unknown, at: Parameters<KitRichTextCodec["read"]>[1]): Opened;
|
|
18
|
+
export declare function RichTextControl(props: ControlProps): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
export declare function RichTextExpandAction({ path, field, value }: ControlProps): import("react/jsx-runtime").JSX.Element | null;
|
|
20
|
+
export {};
|