@bettercms-ai/kit 1.0.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -0
- package/dist/adapters/dock-values.d.ts +28 -0
- package/dist/adapters/dock-values.js +41 -0
- package/dist/adapters/dock-values.js.map +1 -0
- package/{adapters → dist/adapters}/icons.js +2 -2
- package/dist/adapters/icons.js.map +1 -0
- package/{adapters → dist/adapters}/lossy.d.ts +90 -31
- package/dist/adapters/lossy.js +414 -0
- package/dist/adapters/lossy.js.map +1 -0
- package/{adapters → dist/adapters}/prod-types.d.ts +82 -4
- package/{adapters → dist/adapters}/prod-types.js +71 -3
- package/dist/adapters/prod-types.js.map +1 -0
- package/{adapters → dist/adapters}/schema.d.ts +40 -1
- package/{adapters → dist/adapters}/schema.js +996 -179
- package/dist/adapters/schema.js.map +1 -0
- package/{adapters → dist/adapters}/values.d.ts +26 -5
- package/{adapters → dist/adapters}/values.js +87 -17
- package/dist/adapters/values.js.map +1 -0
- package/dist/brand/logo.js +96 -0
- package/dist/brand/logo.js.map +1 -0
- package/{context.d.ts → dist/context.d.ts} +92 -2
- package/{context.js → dist/context.js} +5 -2
- package/dist/context.js.map +1 -0
- package/{controls → dist/controls}/button.d.ts +19 -5
- package/{controls → dist/controls}/button.js +125 -54
- package/dist/controls/button.js.map +1 -0
- package/{controls → dist/controls}/c1.js +1 -1
- package/dist/controls/c1.js.map +1 -0
- package/{controls → dist/controls}/c2.js +1 -1
- package/dist/controls/c2.js.map +1 -0
- package/{controls → dist/controls}/choice.d.ts +7 -2
- package/{controls → dist/controls}/choice.js +71 -18
- package/dist/controls/choice.js.map +1 -0
- package/{controls → dist/controls}/code-register.js +1 -1
- package/dist/controls/code-register.js.map +1 -0
- package/{controls → dist/controls}/code.js +10 -9
- package/dist/controls/code.js.map +1 -0
- package/{controls → dist/controls}/color.js +8 -8
- package/dist/controls/color.js.map +1 -0
- package/{controls → dist/controls}/component-services.d.ts +42 -0
- package/dist/controls/component-services.js +7 -0
- package/dist/controls/component-services.js.map +1 -0
- package/{controls → dist/controls}/date-register.js +1 -1
- package/dist/controls/date-register.js.map +1 -0
- package/{controls → dist/controls}/date-zone.js +8 -2
- package/dist/controls/date-zone.js.map +1 -0
- package/{controls → dist/controls}/date.js +32 -24
- package/dist/controls/date.js.map +1 -0
- package/{controls → dist/controls}/form-picker-register.js +1 -1
- package/dist/controls/form-picker-register.js.map +1 -0
- package/{controls → dist/controls}/form-picker.js +11 -9
- package/dist/controls/form-picker.js.map +1 -0
- package/{controls → dist/controls}/icon-register.js +1 -1
- package/dist/controls/icon-register.js.map +1 -0
- package/{controls → dist/controls}/icon.d.ts +4 -2
- package/{controls → dist/controls}/icon.js +32 -27
- package/dist/controls/icon.js.map +1 -0
- package/{controls → dist/controls}/index.d.ts +1 -1
- package/{controls → dist/controls}/index.js +4 -3
- package/dist/controls/index.js.map +1 -0
- package/{controls → dist/controls}/json-register.js +1 -1
- package/dist/controls/json-register.js.map +1 -0
- package/{controls → dist/controls}/json.js +13 -3
- package/dist/controls/json.js.map +1 -0
- package/{controls → dist/controls}/link.js +6 -6
- package/dist/controls/link.js.map +1 -0
- package/{controls → dist/controls}/location-register.js +1 -1
- package/dist/controls/location-register.js.map +1 -0
- package/{controls → dist/controls}/location.js +64 -40
- package/dist/controls/location.js.map +1 -0
- package/{controls → dist/controls}/media-register.js +1 -1
- package/dist/controls/media-register.js.map +1 -0
- package/{controls → dist/controls}/media-services.d.ts +6 -0
- package/dist/controls/media-services.js +0 -0
- package/{controls → dist/controls}/media.d.ts +35 -4
- package/{controls → dist/controls}/media.js +491 -171
- package/dist/controls/media.js.map +1 -0
- package/{controls → dist/controls}/number.js +10 -9
- package/dist/controls/number.js.map +1 -0
- package/{controls → dist/controls}/reference-register.js +1 -1
- package/dist/controls/reference-register.js.map +1 -0
- package/{controls → dist/controls}/reference-services.d.ts +4 -0
- package/dist/controls/reference-services.js +0 -0
- package/{controls → dist/controls}/reference.d.ts +1 -1
- package/{controls → dist/controls}/reference.js +93 -77
- package/dist/controls/reference.js.map +1 -0
- package/dist/controls/rich-text/blocks.d.ts +49 -0
- package/{controls → dist/controls}/rich-text/blocks.js +471 -144
- package/dist/controls/rich-text/blocks.js.map +1 -0
- package/{controls → dist/controls}/rich-text/catalog.d.ts +4 -1
- package/{controls → dist/controls}/rich-text/catalog.js +75 -65
- package/dist/controls/rich-text/catalog.js.map +1 -0
- package/{controls → dist/controls}/rich-text/codec.d.ts +9 -1
- package/{controls → dist/controls}/rich-text/codec.js +3 -1
- package/dist/controls/rich-text/codec.js.map +1 -0
- package/{controls → dist/controls}/rich-text/component-card.d.ts +1 -1
- package/{controls → dist/controls}/rich-text/component-card.js +417 -99
- package/dist/controls/rich-text/component-card.js.map +1 -0
- package/dist/controls/rich-text/component-panel.d.ts +47 -0
- package/dist/controls/rich-text/component-panel.js +141 -0
- package/dist/controls/rich-text/component-panel.js.map +1 -0
- package/{controls → dist/controls}/rich-text/control.d.ts +1 -2
- package/{controls → dist/controls}/rich-text/control.js +84 -42
- package/dist/controls/rich-text/control.js.map +1 -0
- package/{controls → dist/controls}/rich-text/dom.d.ts +52 -9
- package/{controls → dist/controls}/rich-text/dom.js +379 -50
- package/dist/controls/rich-text/dom.js.map +1 -0
- package/{controls → dist/controls}/rich-text/editor.d.ts +7 -0
- package/{controls → dist/controls}/rich-text/editor.js +148 -48
- package/dist/controls/rich-text/editor.js.map +1 -0
- package/{controls → dist/controls}/rich-text/floating.d.ts +6 -1
- package/{controls → dist/controls}/rich-text/floating.js +35 -18
- package/dist/controls/rich-text/floating.js.map +1 -0
- package/{controls → dist/controls}/rich-text/index.js +1 -1
- package/dist/controls/rich-text/index.js.map +1 -0
- package/dist/controls/rich-text/link-form.js +147 -0
- package/dist/controls/rich-text/link-form.js.map +1 -0
- package/{controls → dist/controls}/rich-text/markdown.js +4 -2
- package/dist/controls/rich-text/markdown.js.map +1 -0
- package/{controls → dist/controls}/rich-text/ops.js +17 -15
- package/dist/controls/rich-text/ops.js.map +1 -0
- package/dist/controls/rich-text/plain.d.ts +17 -0
- package/dist/controls/rich-text/plain.js +44 -0
- package/dist/controls/rich-text/plain.js.map +1 -0
- package/{controls → dist/controls}/rich-text/toolbar.d.ts +6 -2
- package/{controls → dist/controls}/rich-text/toolbar.js +12 -7
- package/dist/controls/rich-text/toolbar.js.map +1 -0
- package/{controls → dist/controls}/scale.js +5 -5
- package/dist/controls/scale.js.map +1 -0
- package/{controls → dist/controls}/slot-register.js +1 -1
- package/dist/controls/slot-register.js.map +1 -0
- package/{controls → dist/controls}/slot-services.d.ts +25 -0
- package/dist/controls/slot-services.js +155 -0
- package/dist/controls/slot-services.js.map +1 -0
- package/{controls → dist/controls}/slot.js +42 -24
- package/dist/controls/slot.js.map +1 -0
- package/{controls → dist/controls}/table/index.js +1 -1
- package/dist/controls/table/index.js.map +1 -0
- package/{controls → dist/controls}/table/prod.js +3 -3
- package/dist/controls/table/prod.js.map +1 -0
- package/{controls → dist/controls}/table/refs.js +13 -2
- package/dist/controls/table/refs.js.map +1 -0
- package/{controls → dist/controls}/table/stored.js +1 -1
- package/dist/controls/table/stored.js.map +1 -0
- package/{controls → dist/controls}/table/table-editor.js +51 -48
- package/dist/controls/table/table-editor.js.map +1 -0
- package/{controls → dist/controls}/table/table-link.js +3 -3
- package/dist/controls/table/table-link.js.map +1 -0
- package/{controls → dist/controls}/table/table.js +3 -3
- package/dist/controls/table/table.js.map +1 -0
- package/{controls → dist/controls}/text.d.ts +2 -2
- package/{controls → dist/controls}/text.js +78 -43
- package/dist/controls/text.js.map +1 -0
- package/dist/controls/unknown-value.d.ts +17 -0
- package/dist/controls/unknown-value.js +66 -0
- package/dist/controls/unknown-value.js.map +1 -0
- package/dist/core/core.d.ts +63 -0
- package/dist/core/core.js +171 -0
- package/dist/core/core.js.map +1 -0
- package/dist/core/facets.d.ts +347 -0
- package/dist/core/facets.js +334 -0
- package/dist/core/facets.js.map +1 -0
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.js +3 -0
- package/{engine → dist/engine}/array.js +34 -21
- package/dist/engine/array.js.map +1 -0
- package/{engine → dist/engine}/bits.js +1 -1
- package/dist/engine/bits.js.map +1 -0
- package/{engine → dist/engine}/breadcrumb.d.ts +3 -3
- package/{engine → dist/engine}/breadcrumb.js +12 -36
- package/dist/engine/breadcrumb.js.map +1 -0
- package/{engine → dist/engine}/expand.d.ts +2 -4
- package/{engine → dist/engine}/expand.js +5 -22
- package/dist/engine/expand.js.map +1 -0
- package/{engine → dist/engine}/field-list.js +1 -1
- package/dist/engine/field-list.js.map +1 -0
- package/{engine → dist/engine}/field-shell.js +249 -121
- package/dist/engine/field-shell.js.map +1 -0
- package/{engine → dist/engine}/frame.d.ts +3 -1
- package/{engine → dist/engine}/frame.js +16 -14
- package/dist/engine/frame.js.map +1 -0
- package/{engine → dist/engine}/group-summary.d.ts +2 -1
- package/{engine → dist/engine}/group-summary.js +7 -3
- package/dist/engine/group-summary.js.map +1 -0
- package/{engine → dist/engine}/grouping.d.ts +19 -5
- package/{engine → dist/engine}/grouping.js +193 -21
- package/dist/engine/grouping.js.map +1 -0
- package/{engine → dist/engine}/item-list.d.ts +11 -1
- package/{engine → dist/engine}/item-list.js +35 -13
- package/dist/engine/item-list.js.map +1 -0
- package/{engine → dist/engine}/kit-field.js +45 -10
- package/dist/engine/kit-field.js.map +1 -0
- package/{engine → dist/engine}/schema-form.d.ts +27 -2
- package/{engine → dist/engine}/schema-form.js +182 -40
- package/dist/engine/schema-form.js.map +1 -0
- package/{engine → dist/engine}/slot.js +5 -15
- package/dist/engine/slot.js.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/{kit.css → dist/kit.css} +19 -0
- package/{lib → dist/lib}/cn.js +7 -4
- package/dist/lib/cn.js.map +1 -0
- package/{lib → dist/lib}/columns.js +4 -1
- package/dist/lib/columns.js.map +1 -0
- package/{lib → dist/lib}/frames.js +2 -2
- package/dist/lib/frames.js.map +1 -0
- package/dist/lib/icon-image.d.ts +10 -0
- package/dist/lib/icon-image.js +8 -0
- package/dist/lib/icon-image.js.map +1 -0
- package/{lib → dist/lib}/icons.js +4 -3
- package/dist/lib/icons.js.map +1 -0
- package/dist/lib/input-modality.d.ts +11 -0
- package/dist/lib/input-modality.js +47 -0
- package/dist/lib/input-modality.js.map +1 -0
- package/dist/lib/key-event.d.ts +11 -0
- package/dist/lib/key-event.js +16 -0
- package/dist/lib/key-event.js.map +1 -0
- package/{lib → dist/lib}/path.js +4 -2
- package/dist/lib/path.js.map +1 -0
- package/{lib → dist/lib}/schema.d.ts +34 -3
- package/{lib → dist/lib}/schema.js +110 -13
- package/dist/lib/schema.js.map +1 -0
- package/{lib → dist/lib}/utils.js +1 -1
- package/dist/lib/utils.js.map +1 -0
- package/{lib → dist/lib}/validate.d.ts +11 -1
- package/{lib → dist/lib}/validate.js +85 -11
- package/dist/lib/validate.js.map +1 -0
- package/dist/library/analysis.d.ts +23 -0
- package/dist/library/analysis.js +160 -0
- package/dist/library/analysis.js.map +1 -0
- package/dist/library/catalog.d.ts +57 -0
- package/dist/library/catalog.js +307 -0
- package/dist/library/catalog.js.map +1 -0
- package/dist/library/coreNotes.d.ts +8 -0
- package/dist/library/coreNotes.js +111 -0
- package/dist/library/coreNotes.js.map +1 -0
- package/dist/library/coverage.d.ts +40 -0
- package/dist/library/coverage.js +59 -0
- package/dist/library/coverage.js.map +1 -0
- package/dist/library/entries/advanced.entries.d.ts +2 -0
- package/dist/library/entries/advanced.entries.js +6579 -0
- package/dist/library/entries/advanced.entries.js.map +1 -0
- package/dist/library/entries/commerce.entries.d.ts +2 -0
- package/dist/library/entries/commerce.entries.js +4140 -0
- package/dist/library/entries/commerce.entries.js.map +1 -0
- package/dist/library/entries/company.entries.d.ts +2 -0
- package/dist/library/entries/company.entries.js +2731 -0
- package/dist/library/entries/company.entries.js.map +1 -0
- package/dist/library/entries/conversion.entries.d.ts +2 -0
- package/dist/library/entries/conversion.entries.js +3707 -0
- package/dist/library/entries/conversion.entries.js.map +1 -0
- package/dist/library/entries/data.entries.d.ts +7 -0
- package/dist/library/entries/data.entries.js +4613 -0
- package/dist/library/entries/data.entries.js.map +1 -0
- package/dist/library/entries/events.entries.d.ts +2 -0
- package/dist/library/entries/events.entries.js +3428 -0
- package/dist/library/entries/events.entries.js.map +1 -0
- package/dist/library/entries/features.entries.d.ts +2 -0
- package/dist/library/entries/features.entries.js +3157 -0
- package/dist/library/entries/features.entries.js.map +1 -0
- package/dist/library/entries/heroes.entries.d.ts +2 -0
- package/dist/library/entries/heroes.entries.js +3401 -0
- package/dist/library/entries/heroes.entries.js.map +1 -0
- package/dist/library/entries/index.d.ts +3 -0
- package/dist/library/entries/index.js +35 -0
- package/dist/library/entries/index.js.map +1 -0
- package/dist/library/entries/listings.entries.d.ts +2 -0
- package/dist/library/entries/listings.entries.js +2976 -0
- package/dist/library/entries/listings.entries.js.map +1 -0
- package/dist/library/entries/longform.entries.d.ts +2 -0
- package/dist/library/entries/longform.entries.js +4227 -0
- package/dist/library/entries/longform.entries.js.map +1 -0
- package/dist/library/entries/media.entries.d.ts +2 -0
- package/dist/library/entries/media.entries.js +2781 -0
- package/dist/library/entries/media.entries.js.map +1 -0
- package/dist/library/entries/navigation.entries.d.ts +2 -0
- package/dist/library/entries/navigation.entries.js +4011 -0
- package/dist/library/entries/navigation.entries.js.map +1 -0
- package/dist/library/entries/pricing.entries.d.ts +2 -0
- package/dist/library/entries/pricing.entries.js +2383 -0
- package/dist/library/entries/pricing.entries.js.map +1 -0
- package/dist/library/entries/social-proof.entries.d.ts +2 -0
- package/dist/library/entries/social-proof.entries.js +2297 -0
- package/dist/library/entries/social-proof.entries.js.map +1 -0
- package/dist/library/examples/bento.d.ts +92 -0
- package/dist/library/examples/bento.js +201 -0
- package/dist/library/examples/bento.js.map +1 -0
- package/dist/library/examples/blocks.d.ts +14 -0
- package/dist/library/examples/blocks.js +313 -0
- package/dist/library/examples/blocks.js.map +1 -0
- package/dist/library/examples/faq.d.ts +28 -0
- package/dist/library/examples/faq.js +230 -0
- package/dist/library/examples/faq.js.map +1 -0
- package/dist/library/examples/hero.d.ts +43 -0
- package/dist/library/examples/hero.js +222 -0
- package/dist/library/examples/hero.js.map +1 -0
- package/dist/library/examples/index.d.ts +36 -0
- package/dist/library/examples/index.js +109 -0
- package/dist/library/examples/index.js.map +1 -0
- package/dist/library/examples/journalStory.d.ts +93 -0
- package/dist/library/examples/journalStory.js +338 -0
- package/dist/library/examples/journalStory.js.map +1 -0
- package/dist/library/examples/megaMenu.d.ts +134 -0
- package/dist/library/examples/megaMenu.js +442 -0
- package/dist/library/examples/megaMenu.js.map +1 -0
- package/dist/library/examples/pricing.d.ts +103 -0
- package/dist/library/examples/pricing.js +479 -0
- package/dist/library/examples/pricing.js.map +1 -0
- package/dist/library/examples/tabs.d.ts +87 -0
- package/dist/library/examples/tabs.js +180 -0
- package/dist/library/examples/tabs.js.map +1 -0
- package/dist/library/export.d.ts +42 -0
- package/dist/library/export.js +80 -0
- package/dist/library/export.js.map +1 -0
- package/dist/library/index.d.ts +13 -0
- package/dist/library/index.js +6 -0
- package/dist/library/kit-catalog.json +1510 -0
- package/dist/library/types.d.ts +42 -0
- package/dist/library/types.js +0 -0
- package/{schema → dist/schema}/adapters.js +1 -2
- package/dist/schema/adapters.js.map +1 -0
- package/{schema → dist/schema}/help.d.ts +2 -0
- package/{schema → dist/schema}/help.js +6 -4
- package/dist/schema/help.js.map +1 -0
- package/{schema → dist/schema}/scale.js +1 -1
- package/dist/schema/scale.js.map +1 -0
- package/{schema → dist/schema}/sources.js +1 -1
- package/dist/schema/sources.js.map +1 -0
- package/{schema → dist/schema}/table.js +11 -10
- package/dist/schema/table.js.map +1 -0
- package/{schema → dist/schema}/types.d.ts +29 -1
- package/{schema → dist/schema}/types.js +1 -1
- package/dist/schema/types.js.map +1 -0
- package/dist/styles.css +2 -0
- package/dist/table/table-view.d.ts +14 -0
- package/dist/table/table-view.js +140 -0
- package/dist/table/table-view.js.map +1 -0
- package/dist/table/table.css +73 -0
- package/dist/testing/corpus.d.ts +63 -0
- package/dist/testing/corpus.js +129 -0
- package/dist/testing/corpus.js.map +1 -0
- package/dist/testing/test-form.d.ts +11 -0
- package/dist/testing/test-form.js +38 -0
- package/dist/testing/test-form.js.map +1 -0
- package/dist/theme.css +345 -0
- package/dist/theme.d.ts +22 -0
- package/dist/theme.js +43 -0
- package/dist/theme.js.map +1 -0
- package/dist/tokens.css +542 -0
- package/dist/types.js +0 -0
- package/{ui → dist/ui}/action-tray.d.ts +1 -1
- package/{ui → dist/ui}/action-tray.js +20 -19
- package/dist/ui/action-tray.js.map +1 -0
- package/dist/ui/autocomplete.d.ts +30 -0
- package/dist/ui/autocomplete.js +139 -0
- package/dist/ui/autocomplete.js.map +1 -0
- package/{ui → dist/ui}/button.d.ts +3 -3
- package/{ui → dist/ui}/button.js +6 -7
- package/dist/ui/button.js.map +1 -0
- package/{ui → dist/ui}/choice-switch.js +1 -1
- package/dist/ui/choice-switch.js.map +1 -0
- package/{ui → dist/ui}/controls.js +51 -39
- package/dist/ui/controls.js.map +1 -0
- package/{ui → dist/ui}/display.d.ts +10 -3
- package/{ui → dist/ui}/display.js +57 -46
- package/dist/ui/display.js.map +1 -0
- package/{ui → dist/ui}/expanded-editor-modal.d.ts +2 -2
- package/{ui → dist/ui}/expanded-editor-modal.js +6 -6
- package/dist/ui/expanded-editor-modal.js.map +1 -0
- package/{ui → dist/ui}/field-context.js +1 -1
- package/dist/ui/field-context.js.map +1 -0
- package/{ui → dist/ui}/floating-panel.d.ts +1 -1
- package/{ui → dist/ui}/floating-panel.js +28 -12
- package/dist/ui/floating-panel.js.map +1 -0
- package/{ui → dist/ui}/index.d.ts +4 -0
- package/dist/ui/index.js +18 -0
- package/{ui → dist/ui}/input.d.ts +1 -1
- package/{ui → dist/ui}/input.js +9 -9
- package/dist/ui/input.js.map +1 -0
- package/{ui → dist/ui}/mode-bar.js +3 -3
- package/dist/ui/mode-bar.js.map +1 -0
- package/{ui → dist/ui}/overlay.d.ts +77 -5
- package/dist/ui/overlay.js +697 -0
- package/dist/ui/overlay.js.map +1 -0
- package/{ui → dist/ui}/path-crumbs.js +37 -3
- package/dist/ui/path-crumbs.js.map +1 -0
- package/{ui → dist/ui}/presence.js +2 -2
- package/dist/ui/presence.js.map +1 -0
- package/{ui → dist/ui}/select.js +89 -87
- package/dist/ui/select.js.map +1 -0
- package/{ui → dist/ui}/shortcut-hint.js +1 -1
- package/dist/ui/shortcut-hint.js.map +1 -0
- package/dist/ui/spinner.d.ts +24 -0
- package/dist/ui/spinner.js +42 -0
- package/dist/ui/spinner.js.map +1 -0
- package/dist/ui/split-button.d.ts +32 -0
- package/dist/ui/split-button.js +60 -0
- package/dist/ui/split-button.js.map +1 -0
- package/{ui → dist/ui}/surfaces.js +1 -1
- package/dist/ui/surfaces.js.map +1 -0
- package/dist/ui/tab.d.ts +38 -0
- package/dist/ui/tab.js +87 -0
- package/dist/ui/tab.js.map +1 -0
- package/dist/ui/toast.d.ts +20 -0
- package/dist/ui/toast.js +115 -0
- package/dist/ui/toast.js.map +1 -0
- package/{ui → dist/ui}/tooltip-root.d.ts +4 -3
- package/{ui → dist/ui}/tooltip-root.js +9 -8
- package/dist/ui/tooltip-root.js.map +1 -0
- package/{ui → dist/ui}/variants.js +1 -1
- package/dist/ui/variants.js.map +1 -0
- package/package.json +77 -23
- package/adapters/icons.js.map +0 -1
- package/adapters/lossy.js +0 -233
- package/adapters/lossy.js.map +0 -1
- package/adapters/prod-types.js.map +0 -1
- package/adapters/schema.js.map +0 -1
- package/adapters/values.js.map +0 -1
- package/brand/logo.js +0 -9
- package/brand/logo.js.map +0 -1
- package/context.js.map +0 -1
- package/controls/button.js.map +0 -1
- package/controls/c1.js.map +0 -1
- package/controls/c2.js.map +0 -1
- package/controls/choice.js.map +0 -1
- package/controls/code-register.js.map +0 -1
- package/controls/code.js.map +0 -1
- package/controls/color.js.map +0 -1
- package/controls/date-register.js.map +0 -1
- package/controls/date-zone.js.map +0 -1
- package/controls/date.js.map +0 -1
- package/controls/form-picker-register.js.map +0 -1
- package/controls/form-picker.js.map +0 -1
- package/controls/icon-register.js.map +0 -1
- package/controls/icon.js.map +0 -1
- package/controls/index.js.map +0 -1
- package/controls/json-register.js.map +0 -1
- package/controls/json.js.map +0 -1
- package/controls/link.js.map +0 -1
- package/controls/location-register.js.map +0 -1
- package/controls/location.js.map +0 -1
- package/controls/media-register.js.map +0 -1
- package/controls/media.js.map +0 -1
- package/controls/number.js.map +0 -1
- package/controls/reference-register.js.map +0 -1
- package/controls/reference.js.map +0 -1
- package/controls/rich-text/blocks.d.ts +0 -28
- package/controls/rich-text/blocks.js.map +0 -1
- package/controls/rich-text/catalog.js.map +0 -1
- package/controls/rich-text/codec.js.map +0 -1
- package/controls/rich-text/component-card.js.map +0 -1
- package/controls/rich-text/control.js.map +0 -1
- package/controls/rich-text/dom.js.map +0 -1
- package/controls/rich-text/editor.js.map +0 -1
- package/controls/rich-text/floating.js.map +0 -1
- package/controls/rich-text/index.js.map +0 -1
- package/controls/rich-text/link-form.js +0 -111
- package/controls/rich-text/link-form.js.map +0 -1
- package/controls/rich-text/markdown.js.map +0 -1
- package/controls/rich-text/ops.js.map +0 -1
- package/controls/rich-text/toolbar.js.map +0 -1
- package/controls/scale.js.map +0 -1
- package/controls/slot-register.js.map +0 -1
- package/controls/slot-services.js +0 -38
- package/controls/slot-services.js.map +0 -1
- package/controls/slot.js.map +0 -1
- package/controls/table/index.js.map +0 -1
- package/controls/table/prod.js.map +0 -1
- package/controls/table/refs.js.map +0 -1
- package/controls/table/stored.js.map +0 -1
- package/controls/table/table-editor.js.map +0 -1
- package/controls/table/table-link.js.map +0 -1
- package/controls/table/table.js.map +0 -1
- package/controls/text.js.map +0 -1
- package/engine/array.js.map +0 -1
- package/engine/bits.js.map +0 -1
- package/engine/breadcrumb.js.map +0 -1
- package/engine/expand.js.map +0 -1
- package/engine/field-list.js.map +0 -1
- package/engine/field-shell.js.map +0 -1
- package/engine/frame.js.map +0 -1
- package/engine/group-summary.js.map +0 -1
- package/engine/grouping.js.map +0 -1
- package/engine/item-list.js.map +0 -1
- package/engine/kit-field.js.map +0 -1
- package/engine/schema-form.js.map +0 -1
- package/engine/slot.js.map +0 -1
- package/index.js +0 -55
- package/index.js.map +0 -1
- package/lib/cn.js.map +0 -1
- package/lib/columns.js.map +0 -1
- package/lib/frames.js.map +0 -1
- package/lib/icons.js.map +0 -1
- package/lib/path.js.map +0 -1
- package/lib/schema.js.map +0 -1
- package/lib/utils.js.map +0 -1
- package/lib/validate.js.map +0 -1
- package/schema/adapters.js.map +0 -1
- package/schema/help.js.map +0 -1
- package/schema/scale.js.map +0 -1
- package/schema/sources.js.map +0 -1
- package/schema/table.js.map +0 -1
- package/schema/types.js.map +0 -1
- package/ui/action-tray.js.map +0 -1
- package/ui/button.js.map +0 -1
- package/ui/choice-switch.js.map +0 -1
- package/ui/controls.js.map +0 -1
- package/ui/display.js.map +0 -1
- package/ui/expanded-editor-modal.js.map +0 -1
- package/ui/field-context.js.map +0 -1
- package/ui/floating-panel.js.map +0 -1
- package/ui/index.js +0 -13
- package/ui/input.js.map +0 -1
- package/ui/mode-bar.js.map +0 -1
- package/ui/overlay.js +0 -378
- package/ui/overlay.js.map +0 -1
- package/ui/path-crumbs.js.map +0 -1
- package/ui/presence.js.map +0 -1
- package/ui/select.js.map +0 -1
- package/ui/shortcut-hint.js.map +0 -1
- package/ui/surfaces.js.map +0 -1
- package/ui/tooltip-root.js.map +0 -1
- package/ui/variants.js.map +0 -1
- /package/{_virtual → dist/_virtual}/_rolldown/runtime.js +0 -0
- /package/{adapters → dist/adapters}/icons.d.ts +0 -0
- /package/{brand → dist/brand}/logo.d.ts +0 -0
- /package/{controls → dist/controls}/c1.d.ts +0 -0
- /package/{controls → dist/controls}/c2.d.ts +0 -0
- /package/{controls → dist/controls}/code-register.d.ts +0 -0
- /package/{controls → dist/controls}/code.d.ts +0 -0
- /package/{controls → dist/controls}/color.d.ts +0 -0
- /package/{controls → dist/controls}/date-register.d.ts +0 -0
- /package/{controls → dist/controls}/date-zone.d.ts +0 -0
- /package/{controls → dist/controls}/date.d.ts +0 -0
- /package/{controls → dist/controls}/form-picker-register.d.ts +0 -0
- /package/{controls → dist/controls}/form-picker.d.ts +0 -0
- /package/{controls → dist/controls}/icon-register.d.ts +0 -0
- /package/{controls → dist/controls}/json-register.d.ts +0 -0
- /package/{controls → dist/controls}/json.d.ts +0 -0
- /package/{controls → dist/controls}/link.d.ts +0 -0
- /package/{controls → dist/controls}/location-register.d.ts +0 -0
- /package/{controls → dist/controls}/location.d.ts +0 -0
- /package/{controls → dist/controls}/media-register.d.ts +0 -0
- /package/{controls → dist/controls}/number.d.ts +0 -0
- /package/{controls → dist/controls}/reference-register.d.ts +0 -0
- /package/{controls → dist/controls}/rich-text/index.d.ts +0 -0
- /package/{controls → dist/controls}/rich-text/link-form.d.ts +0 -0
- /package/{controls → dist/controls}/rich-text/markdown.d.ts +0 -0
- /package/{controls → dist/controls}/rich-text/ops.d.ts +0 -0
- /package/{controls → dist/controls}/scale.d.ts +0 -0
- /package/{controls → dist/controls}/slot-register.d.ts +0 -0
- /package/{controls → dist/controls}/slot.d.ts +0 -0
- /package/{controls → dist/controls}/table/index.d.ts +0 -0
- /package/{controls → dist/controls}/table/prod.d.ts +0 -0
- /package/{controls → dist/controls}/table/refs.d.ts +0 -0
- /package/{controls → dist/controls}/table/stored.d.ts +0 -0
- /package/{controls → dist/controls}/table/table-editor.d.ts +0 -0
- /package/{controls → dist/controls}/table/table-link.d.ts +0 -0
- /package/{controls → dist/controls}/table/table.d.ts +0 -0
- /package/{engine → dist/engine}/array.d.ts +0 -0
- /package/{engine → dist/engine}/bits.d.ts +0 -0
- /package/{engine → dist/engine}/field-list.d.ts +0 -0
- /package/{engine → dist/engine}/field-shell.d.ts +0 -0
- /package/{engine → dist/engine}/kit-field.d.ts +0 -0
- /package/{engine → dist/engine}/slot.d.ts +0 -0
- /package/{index.d.ts → dist/index.d.ts} +0 -0
- /package/{lib → dist/lib}/cn.d.ts +0 -0
- /package/{lib → dist/lib}/columns.d.ts +0 -0
- /package/{lib → dist/lib}/frames.d.ts +0 -0
- /package/{lib → dist/lib}/icons.d.ts +0 -0
- /package/{lib → dist/lib}/path.d.ts +0 -0
- /package/{lib → dist/lib}/utils.d.ts +0 -0
- /package/{schema → dist/schema}/adapters.d.ts +0 -0
- /package/{schema → dist/schema}/scale.d.ts +0 -0
- /package/{schema → dist/schema}/sources.d.ts +0 -0
- /package/{schema → dist/schema}/table.d.ts +0 -0
- /package/{types.d.ts → dist/types.d.ts} +0 -0
- /package/{ui → dist/ui}/choice-switch.d.ts +0 -0
- /package/{ui → dist/ui}/controls.d.ts +0 -0
- /package/{ui → dist/ui}/field-context.d.ts +0 -0
- /package/{ui → dist/ui}/mode-bar.d.ts +0 -0
- /package/{ui → dist/ui}/path-crumbs.d.ts +0 -0
- /package/{ui → dist/ui}/presence.d.ts +0 -0
- /package/{ui → dist/ui}/select.d.ts +0 -0
- /package/{ui → dist/ui}/shortcut-hint.d.ts +0 -0
- /package/{ui → dist/ui}/surfaces.d.ts +0 -0
- /package/{ui → dist/ui}/variants.d.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-view.js","names":[],"sources":["../../src/table/table-view.tsx"],"sourcesContent":["/**\n * <TableView> — the live-page face of the ONE table renderer (CPO D42). It renders `renderTableHtml()` (the same\n * semantic HTML stored in rich text and written to published pages) and adds the visitor tools a static page can't:\n * sort buttons in sortable headers (aria-sort) and a filter box (live row count for screen readers). JSON-LD, when the\n * editor opted in, is written next to the table.\n */\nimport * as React from \"react\";\nimport { cellText, normalizeTable, renderTableHtml, tableJsonLd, type RefResolver, type TableValue } from \"../schema/table\";\nimport \"./table.css\";\n\nexport interface TableViewProps {\n value: TableValue | null | undefined;\n resolveRef?: RefResolver;\n /** Visitor tools (sort, filter). Off in thumbnails and editors. Default true. */\n interactive?: boolean;\n /** Write the table's JSON-LD (opt-in on the table). Default true. */\n jsonLd?: boolean;\n url?: string;\n className?: string;\n /** Makes element ids unique when the same table renders twice on one page (block id). Default: a React id. */\n idScope?: string;\n}\n\nexport function TableView({ value, resolveRef, interactive = true, jsonLd = true, url, className, idScope }: TableViewProps) {\n const uid = React.useId().replace(/[^\\w-]/g, \"\");\n const scope = (idScope ?? uid).replace(/[^\\w-]/g, \"\");\n const t = React.useMemo(() => {\n const n = normalizeTable(value);\n return { ...n, id: `${n.id}-${scope}` };\n }, [value, scope]);\n const [sort, setSort] = React.useState<{ key: string; dir: 1 | -1 } | null>(null);\n const [query, setQuery] = React.useState(\"\");\n const filterId = React.useId();\n const visible = React.useMemo(() => {\n const q = query.trim().toLowerCase();\n if (!q) return undefined;\n return new Set(t.rows.filter((r) => t.columns.some((c) => cellText(c, r, r.cells[c._key], resolveRef).toLowerCase().includes(q))).map((r) => r._key));\n }, [query, t, resolveRef]);\n const html = React.useMemo(\n () => renderTableHtml(t, { resolveRef, interactive, sort: interactive ? sort : null, visibleRows: visible, marks: false }),\n [t, resolveRef, interactive, sort, visible],\n );\n const ld = React.useMemo(() => (jsonLd ? tableJsonLd(t, { url, resolveRef }) : null), [jsonLd, t, url, resolveRef]);\n const onClick = (e: React.MouseEvent) => {\n const b = (e.target as HTMLElement).closest<HTMLButtonElement>(\"button.bt-sort\");\n if (!b) return;\n const key = b.dataset.sortKey!;\n e.stopPropagation();\n setSort((s) => (s?.key !== key ? { key, dir: 1 } : s.dir === 1 ? { key, dir: -1 } : null));\n refocus.current = key; // the header HTML is rewritten; keep focus on the same sort button\n };\n const refocus = React.useRef<string | null>(null);\n const host = React.useRef<HTMLDivElement>(null);\n React.useLayoutEffect(() => {\n const key = refocus.current;\n if (!key) return;\n refocus.current = null;\n host.current?.querySelector<HTMLButtonElement>(`button.bt-sort[data-sort-key=\"${CSS.escape(key)}\"]`)?.focus({ preventScroll: true });\n });\n const shown = visible ? visible.size : t.rows.length;\n return (\n <div ref={host} className={className} onClick={interactive ? onClick : undefined}>\n {interactive && t.filterable ? (\n <div className=\"bt-filter\">\n <label htmlFor={filterId} className=\"bt-sr\" style={{ position: \"absolute\", width: 1, height: 1, overflow: \"hidden\", clip: \"rect(0 0 0 0)\" }}>\n Filter {t.caption || \"table\"}\n </label>\n <input id={filterId} type=\"search\" placeholder=\"Filter rows…\" value={query} onChange={(e) => setQuery(e.target.value)} aria-controls={`${t.id}-caption`} />\n <span role=\"status\" aria-live=\"polite\" style={{ position: \"absolute\", width: 1, height: 1, overflow: \"hidden\", clip: \"rect(0 0 0 0)\" }}>\n {query ? `${shown} of ${t.rows.length} rows` : \"\"}\n </span>\n </div>\n ) : null}\n <div dangerouslySetInnerHTML={{ __html: html }} />\n {interactive && visible && !visible.size ? <p className=\"bt-empty-filter\">No rows match “{query}”.</p> : null}\n {ld ? <script type=\"application/ld+json\" dangerouslySetInnerHTML={{ __html: JSON.stringify(ld).replace(/</g, \"\\\\u003c\") }} /> : null}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* TABLE (CPO D42) — styles for the one semantic table renderer (src/schema/table.ts → renderTableHtml).
|
|
3
|
+
* Works on the Caldera site (--s* tokens), the Kit Library preview (--ks-*) and in the app: inside a kit scope
|
|
4
|
+
* (--kit-fg, --kit-line…), else the dashboard roles (--foreground, --border, --card). V2 path: src/kit/schema/table.ts.
|
|
5
|
+
* Responsive modes never change the DOM: Scroll (default) scrolls sideways with the row headers pinned; Stack and
|
|
6
|
+
* Cards re-lay the same rows below 560px of container width. Display changes can drop table semantics in some
|
|
7
|
+
* engines, so the renderer adds the equivalent ARIA roles only in those two modes (see docs/TABLES.md).
|
|
8
|
+
*/
|
|
9
|
+
.bt-table {
|
|
10
|
+
--bt-fg: var(--sfg, var(--ks-fg, var(--kit-fg)));
|
|
11
|
+
--bt-fg2: var(--sfg2, var(--ks-fg2, var(--kit-fg-2)));
|
|
12
|
+
--bt-line: var(--sline, var(--ks-line, var(--kit-line)));
|
|
13
|
+
--bt-bg: var(--sbg, var(--ks-card, var(--kit-surface)));
|
|
14
|
+
--bt-head: color-mix(in oklab, var(--bt-fg) 4%, var(--bt-bg));
|
|
15
|
+
--bt-accent: var(--sbtn, var(--ks-accent, var(--kit-fg)));
|
|
16
|
+
--bt-pad-y: 11px;
|
|
17
|
+
--bt-pad-x: 16px;
|
|
18
|
+
margin: 0;
|
|
19
|
+
container-type: inline-size;
|
|
20
|
+
color: var(--bt-fg);
|
|
21
|
+
font-variant-numeric: tabular-nums;
|
|
22
|
+
}
|
|
23
|
+
.bt-table[data-density="compact"] { --bt-pad-y: 7px; --bt-pad-x: 12px; }
|
|
24
|
+
.bt-table .bt-scroll { overflow-x: auto; border-radius: var(--cs-r, 10px); box-shadow: inset 0 0 0 1px var(--bt-line); background: var(--bt-bg); }
|
|
25
|
+
.bt-table .bt-scroll:focus-visible { outline: 2px solid var(--bt-fg2); outline-offset: 2px; }
|
|
26
|
+
.bt-table[data-sticky="true"] .bt-scroll { max-height: min(70vh, 640px); overflow: auto; }
|
|
27
|
+
.bt-table table { width: 100%; border-collapse: separate; border-spacing: 0; font-size: 15px; line-height: 1.45; }
|
|
28
|
+
.bt-table caption { caption-side: top; text-align: left; padding: 14px var(--bt-pad-x) 10px; font-weight: 600; font-size: 14px; color: var(--bt-fg); }
|
|
29
|
+
.bt-table th, .bt-table td { padding: var(--bt-pad-y) var(--bt-pad-x); text-align: left; vertical-align: top; border-top: 1px solid var(--bt-line); }
|
|
30
|
+
.bt-table [data-align="end"] { text-align: right; }
|
|
31
|
+
.bt-table [data-align="center"] { text-align: center; }
|
|
32
|
+
.bt-table thead th, .bt-table thead td { font-size: 12px; letter-spacing: 0.06em; text-transform: uppercase; font-weight: 600; color: var(--bt-fg2); background: var(--bt-head); vertical-align: bottom; }
|
|
33
|
+
.bt-table thead th[scope="colgroup"] { text-align: center; border-bottom: 1px solid var(--bt-line); letter-spacing: 0.04em; }
|
|
34
|
+
.bt-table[data-sticky="true"] thead th, .bt-table[data-sticky="true"] thead td { position: sticky; top: 0; z-index: 2; }
|
|
35
|
+
.bt-table tbody th[scope="row"], .bt-table tfoot th[scope="row"] { font-weight: 600; color: var(--bt-fg); }
|
|
36
|
+
.bt-table[data-header-col="true"] th[scope="row"], .bt-table[data-header-col="true"] thead tr:last-child > :first-child { position: sticky; left: 0; z-index: 1; background: var(--bt-bg); box-shadow: inset -1px 0 0 var(--bt-line); }
|
|
37
|
+
.bt-table[data-header-col="true"] thead tr:last-child > :first-child { background: var(--bt-head); z-index: 3; }
|
|
38
|
+
.bt-table tr.bt-group th { font-size: 12px; letter-spacing: 0.06em; text-transform: uppercase; font-weight: 600; color: var(--bt-fg); padding-top: calc(var(--bt-pad-y) + 8px); background: var(--bt-bg); }
|
|
39
|
+
.bt-table[data-striped="true"] tbody tr:not(.bt-group):nth-child(even) > * { background: color-mix(in oklab, var(--bt-fg) 2.5%, var(--bt-bg)); }
|
|
40
|
+
.bt-table tr[data-highlight="true"] > *, .bt-table [data-highlight="true"]:is(td, th) { background: color-mix(in oklab, var(--bt-accent) 7%, var(--bt-bg)); }
|
|
41
|
+
.bt-table tfoot th, .bt-table tfoot td { font-weight: 600; border-top: 2px solid var(--bt-line); }
|
|
42
|
+
.bt-table td a, .bt-table th a { color: inherit; text-decoration: underline; text-underline-offset: 2px; }
|
|
43
|
+
.bt-table sup { font-size: 0.7em; margin-left: 1px; }
|
|
44
|
+
.bt-table sup a { text-decoration: none; color: var(--bt-fg2); }
|
|
45
|
+
.bt-table .bt-bool[data-bool="true"] { color: var(--bt-accent); font-weight: 700; }
|
|
46
|
+
.bt-table .bt-bool[data-bool="false"], .bt-table .bt-dash, .bt-table .bt-dim { color: var(--bt-fg2); opacity: 0.7; }
|
|
47
|
+
.bt-table .bt-star { color: var(--kit-rating, #d29a1c); }
|
|
48
|
+
.bt-table .bt-sr { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
|
|
49
|
+
.bt-table .bt-sort { all: unset; cursor: pointer; display: inline-flex; gap: 4px; align-items: center; border-radius: 4px; }
|
|
50
|
+
.bt-table .bt-sort:focus-visible { outline: 2px solid var(--bt-fg2); outline-offset: 2px; }
|
|
51
|
+
.bt-table .bt-sort-icon { opacity: 0.55; font-size: 11px; }
|
|
52
|
+
.bt-table .bt-notes { margin-top: 10px; font-size: 13px; line-height: 1.5; color: var(--bt-fg2); }
|
|
53
|
+
.bt-table .bt-notes p { margin: 0; }
|
|
54
|
+
.bt-table .bt-notes ol { margin: 6px 0 0; padding-left: 1.4em; list-style: decimal; }
|
|
55
|
+
.bt-table .bt-notes li + li { margin-top: 2px; }
|
|
56
|
+
.bt-filter { display: flex; margin-bottom: 10px; }
|
|
57
|
+
.bt-filter input { width: min(280px, 100%); height: 34px; padding: 0 12px; border-radius: 8px; border: 1px solid var(--sline, var(--kit-line)); background: var(--sbg, var(--kit-surface)); color: inherit; font: inherit; font-size: 14px; }
|
|
58
|
+
.bt-empty-filter { padding: 16px; font-size: 14px; color: var(--sfg2, var(--kit-fg-2)); }
|
|
59
|
+
|
|
60
|
+
/* Stack + Cards: same DOM, rows become blocks under 560px; each cell shows its column label (data-label). */
|
|
61
|
+
@container (max-width: 560px) {
|
|
62
|
+
.bt-table[data-responsive="stack"] thead, .bt-table[data-responsive="cards"] thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
|
|
63
|
+
.bt-table[data-responsive="stack"] table, .bt-table[data-responsive="stack"] tbody, .bt-table[data-responsive="stack"] tfoot, .bt-table[data-responsive="stack"] tr,
|
|
64
|
+
.bt-table[data-responsive="cards"] table, .bt-table[data-responsive="cards"] tbody, .bt-table[data-responsive="cards"] tfoot, .bt-table[data-responsive="cards"] tr { display: block; }
|
|
65
|
+
.bt-table[data-responsive="stack"] th, .bt-table[data-responsive="stack"] td, .bt-table[data-responsive="cards"] th, .bt-table[data-responsive="cards"] td { display: block; border-top: 0; padding-top: 6px; padding-bottom: 6px; text-align: left; position: static; box-shadow: none; }
|
|
66
|
+
/* the label is an inline-block beside the value, so a cell's parts (icon + words, ★ + number) stay one line */
|
|
67
|
+
.bt-table[data-responsive="stack"] td::before, .bt-table[data-responsive="cards"] td::before { content: attr(data-label); display: inline-block; width: 40%; min-width: 96px; padding-right: 12px; vertical-align: top; font-size: 12px; font-weight: 600; color: var(--bt-fg2); }
|
|
68
|
+
.bt-table[data-responsive="stack"] th[scope="row"], .bt-table[data-responsive="cards"] th[scope="row"], .bt-table tr.bt-group th { display: block; font-size: 15px; padding-top: 12px; }
|
|
69
|
+
.bt-table[data-responsive="stack"] tr { border-top: 1px solid var(--bt-line); padding: 6px 0; }
|
|
70
|
+
.bt-table[data-responsive="cards"] .bt-scroll { box-shadow: none; background: transparent; overflow: visible; }
|
|
71
|
+
.bt-table[data-responsive="cards"] tbody tr:not(.bt-group), .bt-table[data-responsive="cards"] tfoot tr { margin: 10px 0; border-radius: var(--cs-r, 10px); box-shadow: inset 0 0 0 1px var(--bt-line); background: var(--bt-bg); padding: 6px 0; }
|
|
72
|
+
.bt-table[data-responsive="cards"] caption { display: block; padding-left: 0; }
|
|
73
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { TypeSchema } from "../schema/types";
|
|
2
|
+
import { type AdapterTarget } from "../adapters/schema";
|
|
3
|
+
import { type Backlog, type CatalogItem, type LossyItem } from "../adapters/lossy";
|
|
4
|
+
export declare const CORPUS: {
|
|
5
|
+
id: string;
|
|
6
|
+
schema: TypeSchema;
|
|
7
|
+
value: Record<string, unknown>;
|
|
8
|
+
}[];
|
|
9
|
+
/**
|
|
10
|
+
* Every leaf (JSON pointer) where `a` and `b` differ. A missing object or array is read as empty, so a dropped
|
|
11
|
+
* `{ required, max }` shows as its two leaves, and an undefined key equals an absent one.
|
|
12
|
+
*/
|
|
13
|
+
export declare function leafDiff(a: unknown, b: unknown, path?: string, out?: string[]): string[];
|
|
14
|
+
/**
|
|
15
|
+
* Round-trips one schema and returns what breaks "equals v2 minus exactly the lossy and catalog paths" (empty = holds).
|
|
16
|
+
*/
|
|
17
|
+
export declare function roundTrip(schema: TypeSchema, target: AdapterTarget): {
|
|
18
|
+
lossy: LossyItem[];
|
|
19
|
+
catalog: CatalogItem[];
|
|
20
|
+
/** a difference no lossy or catalog item names: a silent drop or a wrong mapping */
|
|
21
|
+
unreported: string[];
|
|
22
|
+
/** a lossy or catalog item with nothing lost under it: an over-report */
|
|
23
|
+
overreported: string[];
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* entry id → the sorted features, per lane: what prod drops (`lossy`) or what the host sets at seeding (`catalog`).
|
|
27
|
+
* The lossy summary also names each reported feature's backlog item, and lists the features per backlog item with
|
|
28
|
+
* their entry counts in both lanes (the generated backend order).
|
|
29
|
+
*/
|
|
30
|
+
export declare function computeLedger(kind: "lossy" | "catalog"): {
|
|
31
|
+
summary: {
|
|
32
|
+
fields: {
|
|
33
|
+
[k: string]: number;
|
|
34
|
+
};
|
|
35
|
+
props: {
|
|
36
|
+
[k: string]: number;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
entries: Record<string, {
|
|
40
|
+
fields: string[];
|
|
41
|
+
props: string[];
|
|
42
|
+
}>;
|
|
43
|
+
} | {
|
|
44
|
+
summary: {
|
|
45
|
+
backlog: Record<string, Backlog>;
|
|
46
|
+
byBacklog: {
|
|
47
|
+
[k: string]: Record<string, {
|
|
48
|
+
fields: number;
|
|
49
|
+
props: number;
|
|
50
|
+
}>;
|
|
51
|
+
};
|
|
52
|
+
fields: {
|
|
53
|
+
[k: string]: number;
|
|
54
|
+
};
|
|
55
|
+
props: {
|
|
56
|
+
[k: string]: number;
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
entries: Record<string, {
|
|
60
|
+
fields: string[];
|
|
61
|
+
props: string[];
|
|
62
|
+
}>;
|
|
63
|
+
};
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { FEATURES } from "../adapters/lossy.js";
|
|
2
|
+
import { fromTypeSchema, propsToTypeSchema, toTypeSchema } from "../adapters/schema.js";
|
|
3
|
+
import { EXAMPLES } from "../library/examples/index.js";
|
|
4
|
+
import { KIT_LIBRARY } from "../library/entries/index.js";
|
|
5
|
+
//#region src/testing/corpus.ts
|
|
6
|
+
/** The 149 schemas the adapters are held to (KIT_LIBRARY 142 + the 7 core examples) and the leaf diff the round trip uses. */
|
|
7
|
+
var CORPUS = [...KIT_LIBRARY.map((e) => ({
|
|
8
|
+
id: e.id,
|
|
9
|
+
schema: e.schema,
|
|
10
|
+
value: e.value
|
|
11
|
+
})), ...EXAMPLES.map((e) => ({
|
|
12
|
+
id: e.id,
|
|
13
|
+
schema: e.schema,
|
|
14
|
+
value: e.value
|
|
15
|
+
}))];
|
|
16
|
+
var isObj = (v) => !!v && typeof v === "object" && !Array.isArray(v);
|
|
17
|
+
/**
|
|
18
|
+
* Every leaf (JSON pointer) where `a` and `b` differ. A missing object or array is read as empty, so a dropped
|
|
19
|
+
* `{ required, max }` shows as its two leaves, and an undefined key equals an absent one.
|
|
20
|
+
*/
|
|
21
|
+
function leafDiff(a, b, path = "", out = []) {
|
|
22
|
+
if (isObj(a) || isObj(b)) {
|
|
23
|
+
if (a !== void 0 && !isObj(a) || b !== void 0 && !isObj(b)) {
|
|
24
|
+
out.push(path);
|
|
25
|
+
return out;
|
|
26
|
+
}
|
|
27
|
+
const A = a ?? {};
|
|
28
|
+
const B = b ?? {};
|
|
29
|
+
for (const k of /* @__PURE__ */ new Set([...Object.keys(A), ...Object.keys(B)])) leafDiff(A[k], B[k], `${path}/${k}`, out);
|
|
30
|
+
return out;
|
|
31
|
+
}
|
|
32
|
+
if (Array.isArray(a) || Array.isArray(b)) {
|
|
33
|
+
if (a !== void 0 && !Array.isArray(a) || b !== void 0 && !Array.isArray(b)) {
|
|
34
|
+
out.push(path);
|
|
35
|
+
return out;
|
|
36
|
+
}
|
|
37
|
+
const A = a ?? [];
|
|
38
|
+
const B = b ?? [];
|
|
39
|
+
for (let i = 0; i < Math.max(A.length, B.length); i++) leafDiff(A[i], B[i], `${path}/${i}`, out);
|
|
40
|
+
return out;
|
|
41
|
+
}
|
|
42
|
+
if (a !== b) out.push(path);
|
|
43
|
+
return out;
|
|
44
|
+
}
|
|
45
|
+
var under = (path, root) => path === root || path.startsWith(`${root}/`);
|
|
46
|
+
/**
|
|
47
|
+
* A V2 field with no group sits in the default group (engine/grouping.tsx: `f.group ?? defaultGroup(groups)`). Prop
|
|
48
|
+
* tabs store every top-level prop's tab, so the props lane reads that placement back as an explicit `group`: the same
|
|
49
|
+
* placement, compared as such.
|
|
50
|
+
*/
|
|
51
|
+
function withDefaultGroups(schema) {
|
|
52
|
+
const d = (schema.groups?.find((g) => g.default) ?? schema.groups?.[0])?.name;
|
|
53
|
+
return d === void 0 ? schema : {
|
|
54
|
+
...schema,
|
|
55
|
+
fields: schema.fields.map((f) => f.group === void 0 ? {
|
|
56
|
+
...f,
|
|
57
|
+
group: d
|
|
58
|
+
} : f)
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Round-trips one schema and returns what breaks "equals v2 minus exactly the lossy and catalog paths" (empty = holds).
|
|
63
|
+
*/
|
|
64
|
+
function roundTrip(schema, target) {
|
|
65
|
+
const { schema: prod, blockModels, lossy, catalog } = target === "fields" ? fromTypeSchema(schema, "fields") : fromTypeSchema(schema, "props");
|
|
66
|
+
const back = target === "fields" ? toTypeSchema(prod, { blockModels }) : propsToTypeSchema(prod);
|
|
67
|
+
const diffs = leafDiff(target === "props" ? withDefaultGroups(schema) : schema, back);
|
|
68
|
+
const named = [...lossy, ...catalog];
|
|
69
|
+
return {
|
|
70
|
+
lossy,
|
|
71
|
+
catalog,
|
|
72
|
+
/** a difference no lossy or catalog item names: a silent drop or a wrong mapping */
|
|
73
|
+
unreported: diffs.filter((d) => !named.some((l) => under(d, l.path))),
|
|
74
|
+
/** a lossy or catalog item with nothing lost under it: an over-report */
|
|
75
|
+
overreported: named.filter((l) => !diffs.some((d) => under(d, l.path))).map((l) => `${l.path} (${l.feature})`)
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* entry id → the sorted features, per lane: what prod drops (`lossy`) or what the host sets at seeding (`catalog`).
|
|
80
|
+
* The lossy summary also names each reported feature's backlog item, and lists the features per backlog item with
|
|
81
|
+
* their entry counts in both lanes (the generated backend order).
|
|
82
|
+
*/
|
|
83
|
+
function computeLedger(kind) {
|
|
84
|
+
const entries = {};
|
|
85
|
+
const summary = {
|
|
86
|
+
fields: {},
|
|
87
|
+
props: {}
|
|
88
|
+
};
|
|
89
|
+
for (const { id, schema } of CORPUS) {
|
|
90
|
+
const row = {
|
|
91
|
+
fields: [],
|
|
92
|
+
props: []
|
|
93
|
+
};
|
|
94
|
+
for (const t of ["fields", "props"]) {
|
|
95
|
+
row[t] = [...new Set(roundTrip(schema, t)[kind].map((l) => l.feature))].sort();
|
|
96
|
+
for (const f of row[t]) summary[t][f] = (summary[t][f] ?? 0) + 1;
|
|
97
|
+
}
|
|
98
|
+
entries[id] = row;
|
|
99
|
+
}
|
|
100
|
+
const sortedCounts = (o) => Object.fromEntries(Object.entries(o).sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0])));
|
|
101
|
+
const counts = {
|
|
102
|
+
fields: sortedCounts(summary.fields),
|
|
103
|
+
props: sortedCounts(summary.props)
|
|
104
|
+
};
|
|
105
|
+
if (kind === "catalog") return {
|
|
106
|
+
summary: counts,
|
|
107
|
+
entries
|
|
108
|
+
};
|
|
109
|
+
const reported = [.../* @__PURE__ */ new Set([...Object.keys(counts.fields), ...Object.keys(counts.props)])].sort();
|
|
110
|
+
const backlog = Object.fromEntries(reported.map((f) => [f, FEATURES[f]?.backlog]));
|
|
111
|
+
const byBacklog = {};
|
|
112
|
+
for (const f of reported) (byBacklog[backlog[f]] ??= {})[f] = {
|
|
113
|
+
fields: summary.fields[f] ?? 0,
|
|
114
|
+
props: summary.props[f] ?? 0
|
|
115
|
+
};
|
|
116
|
+
const sortedByBacklog = Object.fromEntries(Object.keys(byBacklog).sort().map((b) => [b, byBacklog[b]]));
|
|
117
|
+
return {
|
|
118
|
+
summary: {
|
|
119
|
+
...counts,
|
|
120
|
+
backlog,
|
|
121
|
+
byBacklog: sortedByBacklog
|
|
122
|
+
},
|
|
123
|
+
entries
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
//#endregion
|
|
127
|
+
export { CORPUS, computeLedger, leafDiff, roundTrip };
|
|
128
|
+
|
|
129
|
+
//# sourceMappingURL=corpus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"corpus.js","names":[],"sources":["../../src/testing/corpus.ts"],"sourcesContent":["/** The 149 schemas the adapters are held to (KIT_LIBRARY 142 + the 7 core examples) and the leaf diff the round trip uses. */\nimport { KIT_LIBRARY } from \"../library/entries\";\nimport { EXAMPLES } from \"../library/examples\";\nimport type { TypeSchema } from \"../schema/types\";\nimport { fromTypeSchema, propsToTypeSchema, toTypeSchema, type AdapterTarget } from \"../adapters/schema\";\nimport { FEATURES, type Backlog, type CatalogItem, type LossyFeature, type LossyItem } from \"../adapters/lossy\";\n\nexport const CORPUS: { id: string; schema: TypeSchema; value: Record<string, unknown> }[] = [\n ...KIT_LIBRARY.map((e) => ({ id: e.id, schema: e.schema, value: e.value })),\n ...EXAMPLES.map((e) => ({ id: e.id, schema: e.schema, value: e.value })),\n];\n\ntype Obj = Record<string, unknown>;\nconst isObj = (v: unknown): v is Obj => !!v && typeof v === \"object\" && !Array.isArray(v);\n\n/**\n * Every leaf (JSON pointer) where `a` and `b` differ. A missing object or array is read as empty, so a dropped\n * `{ required, max }` shows as its two leaves, and an undefined key equals an absent one.\n */\nexport function leafDiff(a: unknown, b: unknown, path = \"\", out: string[] = []): string[] {\n if (isObj(a) || isObj(b)) {\n if ((a !== undefined && !isObj(a)) || (b !== undefined && !isObj(b))) {\n out.push(path);\n return out;\n }\n const A = (a ?? {}) as Obj;\n const B = (b ?? {}) as Obj;\n for (const k of new Set([...Object.keys(A), ...Object.keys(B)])) leafDiff(A[k], B[k], `${path}/${k}`, out);\n return out;\n }\n if (Array.isArray(a) || Array.isArray(b)) {\n if ((a !== undefined && !Array.isArray(a)) || (b !== undefined && !Array.isArray(b))) {\n out.push(path);\n return out;\n }\n const A = (a ?? []) as unknown[];\n const B = (b ?? []) as unknown[];\n for (let i = 0; i < Math.max(A.length, B.length); i++) leafDiff(A[i], B[i], `${path}/${i}`, out);\n return out;\n }\n if (a !== b) out.push(path);\n return out;\n}\n\nconst under = (path: string, root: string) => path === root || path.startsWith(`${root}/`);\n\n/**\n * A V2 field with no group sits in the default group (engine/grouping.tsx: `f.group ?? defaultGroup(groups)`). Prop\n * tabs store every top-level prop's tab, so the props lane reads that placement back as an explicit `group`: the same\n * placement, compared as such.\n */\nfunction withDefaultGroups(schema: TypeSchema): TypeSchema {\n const d = (schema.groups?.find((g) => g.default) ?? schema.groups?.[0])?.name;\n return d === undefined ? schema : { ...schema, fields: schema.fields.map((f) => (f.group === undefined ? { ...f, group: d } : f)) };\n}\n\n/**\n * Round-trips one schema and returns what breaks \"equals v2 minus exactly the lossy and catalog paths\" (empty = holds).\n */\nexport function roundTrip(schema: TypeSchema, target: AdapterTarget) {\n const { schema: prod, blockModels, lossy, catalog } = target === \"fields\" ? fromTypeSchema(schema, \"fields\") : fromTypeSchema(schema, \"props\");\n const back =\n target === \"fields\"\n ? toTypeSchema(prod as Parameters<typeof toTypeSchema>[0], { blockModels })\n : propsToTypeSchema(prod as Parameters<typeof propsToTypeSchema>[0]);\n const diffs = leafDiff(target === \"props\" ? withDefaultGroups(schema) : schema, back);\n const named: (LossyItem | CatalogItem)[] = [...lossy, ...catalog];\n return {\n lossy,\n catalog,\n /** a difference no lossy or catalog item names: a silent drop or a wrong mapping */\n unreported: diffs.filter((d) => !named.some((l) => under(d, l.path))),\n /** a lossy or catalog item with nothing lost under it: an over-report */\n overreported: named.filter((l) => !diffs.some((d) => under(d, l.path))).map((l) => `${l.path} (${l.feature})`),\n };\n}\n\n/**\n * entry id → the sorted features, per lane: what prod drops (`lossy`) or what the host sets at seeding (`catalog`).\n * The lossy summary also names each reported feature's backlog item, and lists the features per backlog item with\n * their entry counts in both lanes (the generated backend order).\n */\nexport function computeLedger(kind: \"lossy\" | \"catalog\") {\n const entries: Record<string, { fields: string[]; props: string[] }> = {};\n const summary = { fields: {} as Record<string, number>, props: {} as Record<string, number> };\n for (const { id, schema } of CORPUS) {\n const row = { fields: [] as string[], props: [] as string[] };\n for (const t of [\"fields\", \"props\"] as const) {\n row[t] = [...new Set((roundTrip(schema, t)[kind] as { feature: string }[]).map((l) => l.feature))].sort();\n for (const f of row[t]) summary[t][f] = (summary[t][f] ?? 0) + 1;\n }\n entries[id] = row;\n }\n const sortedCounts = (o: Record<string, number>) =>\n Object.fromEntries(Object.entries(o).sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0])));\n const counts = { fields: sortedCounts(summary.fields), props: sortedCounts(summary.props) };\n if (kind === \"catalog\") return { summary: counts, entries };\n const reported = [...new Set([...Object.keys(counts.fields), ...Object.keys(counts.props)])].sort() as LossyFeature[];\n const backlog = Object.fromEntries(reported.map((f) => [f, FEATURES[f]?.backlog])) as Record<string, Backlog>;\n const byBacklog: Record<string, Record<string, { fields: number; props: number }>> = {};\n for (const f of reported) (byBacklog[backlog[f]] ??= {})[f] = { fields: summary.fields[f] ?? 0, props: summary.props[f] ?? 0 };\n const sortedByBacklog = Object.fromEntries(Object.keys(byBacklog).sort().map((b) => [b, byBacklog[b]]));\n return { summary: { ...counts, backlog, byBacklog: sortedByBacklog }, entries };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { FieldSchema } from "../schema/types";
|
|
2
|
+
import type { ControlProps } from "../types";
|
|
3
|
+
import { type SchemaFormProps } from "../engine/schema-form";
|
|
4
|
+
/** A controlled SchemaForm over `fields`, with the latest value readable from `onValue`. */
|
|
5
|
+
export declare function TestForm({ fields, initial, onValue, ...rest }: Omit<SchemaFormProps, "schema" | "value" | "onChange"> & {
|
|
6
|
+
fields: FieldSchema[];
|
|
7
|
+
initial?: Record<string, unknown>;
|
|
8
|
+
onValue?: (v: Record<string, unknown>) => void;
|
|
9
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
/** A plain input standing in for a real control: it sets an aria-describedby id of its own, which the shell keeps. */
|
|
11
|
+
export declare function TestInput({ id, value, onChange, invalid, readOnly }: ControlProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { SchemaForm } from "../engine/schema-form.js";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
//#region src/testing/test-form.tsx
|
|
5
|
+
/** A controlled SchemaForm over `fields`, with the latest value readable from `onValue`. */
|
|
6
|
+
function TestForm({ fields, initial = {}, onValue, ...rest }) {
|
|
7
|
+
const [value, setValue] = React.useState(initial);
|
|
8
|
+
const schema = React.useMemo(() => ({
|
|
9
|
+
name: "doc",
|
|
10
|
+
title: "Doc",
|
|
11
|
+
kind: "entry",
|
|
12
|
+
fields
|
|
13
|
+
}), [fields]);
|
|
14
|
+
return /* @__PURE__ */ jsx(SchemaForm, {
|
|
15
|
+
schema,
|
|
16
|
+
value,
|
|
17
|
+
onChange: (v) => {
|
|
18
|
+
setValue(v);
|
|
19
|
+
onValue?.(v);
|
|
20
|
+
},
|
|
21
|
+
...rest
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
/** A plain input standing in for a real control: it sets an aria-describedby id of its own, which the shell keeps. */
|
|
25
|
+
function TestInput({ id, value, onChange, invalid, readOnly }) {
|
|
26
|
+
return /* @__PURE__ */ jsx("input", {
|
|
27
|
+
id,
|
|
28
|
+
"aria-describedby": "own-id",
|
|
29
|
+
"aria-invalid": invalid || void 0,
|
|
30
|
+
readOnly,
|
|
31
|
+
value: typeof value === "string" ? value : "",
|
|
32
|
+
onChange: (e) => onChange(e.target.value)
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
//#endregion
|
|
36
|
+
export { TestForm, TestInput };
|
|
37
|
+
|
|
38
|
+
//# sourceMappingURL=test-form.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-form.js","names":[],"sources":["../../src/testing/test-form.tsx"],"sourcesContent":["import * as React from \"react\";\nimport type { FieldSchema } from \"../schema/types\";\nimport type { ControlProps } from \"../types\";\nimport { SchemaForm, type SchemaFormProps } from \"../engine/schema-form\";\n\n/** A controlled SchemaForm over `fields`, with the latest value readable from `onValue`. */\nexport function TestForm({\n fields,\n initial = {},\n onValue,\n ...rest\n}: Omit<SchemaFormProps, \"schema\" | \"value\" | \"onChange\"> & {\n fields: FieldSchema[];\n initial?: Record<string, unknown>;\n onValue?: (v: Record<string, unknown>) => void;\n}) {\n const [value, setValue] = React.useState(initial);\n const schema = React.useMemo(() => ({ name: \"doc\", title: \"Doc\", kind: \"entry\" as const, fields }), [fields]);\n return (\n <SchemaForm\n schema={schema}\n value={value}\n onChange={(v) => {\n setValue(v);\n onValue?.(v);\n }}\n {...rest}\n />\n );\n}\n\n/** A plain input standing in for a real control: it sets an aria-describedby id of its own, which the shell keeps. */\nexport function TestInput({ id, value, onChange, invalid, readOnly }: ControlProps) {\n return (\n <input\n id={id}\n aria-describedby=\"own-id\"\n aria-invalid={invalid || undefined}\n readOnly={readOnly}\n value={typeof value === \"string\" ? value : \"\"}\n onChange={(e) => onChange(e.target.value)}\n />\n );\n}\n"],"mappings":";;;;;AAMA,SAAgB,SAAS,EACvB,QACA,UAAU,CAAC,GACX,SACA,GAAG,QAKF;CACD,MAAM,CAAC,OAAO,YAAY,MAAM,SAAS,OAAO;CAChD,MAAM,SAAS,MAAM,eAAe;EAAE,MAAM;EAAO,OAAO;EAAO,MAAM;EAAkB;CAAO,IAAI,CAAC,MAAM,CAAC;CAC5G,OACE,oBAAC,YAAD;EACU;EACD;EACP,WAAW,MAAM;GACf,SAAS,CAAC;GACV,UAAU,CAAC;EACb;EACA,GAAI;CACL,CAAA;AAEL;;AAGA,SAAgB,UAAU,EAAE,IAAI,OAAO,UAAU,SAAS,YAA0B;CAClF,OACE,oBAAC,SAAD;EACM;EACJ,oBAAiB;EACjB,gBAAc,WAAW,KAAA;EACf;EACV,OAAO,OAAO,UAAU,WAAW,QAAQ;EAC3C,WAAW,MAAM,SAAS,EAAE,OAAO,KAAK;CACzC,CAAA;AAEL"}
|