@bettercms-ai/kit 0.1.0 → 1.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/_virtual/_rolldown/runtime.js +13 -0
- package/adapters/icons.d.ts +15 -0
- package/adapters/icons.js +27 -0
- package/adapters/icons.js.map +1 -0
- package/adapters/lossy.d.ts +267 -0
- package/adapters/lossy.js +233 -0
- package/adapters/lossy.js.map +1 -0
- package/adapters/prod-types.d.ts +468 -0
- package/adapters/prod-types.js +646 -0
- package/adapters/prod-types.js.map +1 -0
- package/adapters/schema.d.ts +115 -0
- package/adapters/schema.js +2203 -0
- package/adapters/schema.js.map +1 -0
- package/adapters/values.d.ts +200 -0
- package/adapters/values.js +553 -0
- package/adapters/values.js.map +1 -0
- package/brand/logo.d.ts +17 -0
- package/brand/logo.js +9 -0
- package/brand/logo.js.map +1 -0
- package/context.d.ts +269 -0
- package/context.js +214 -0
- package/context.js.map +1 -0
- package/controls/button.d.ts +58 -0
- package/controls/button.js +507 -0
- package/controls/button.js.map +1 -0
- package/controls/c1.d.ts +11 -0
- package/controls/c1.js +24 -0
- package/controls/c1.js.map +1 -0
- package/controls/c2.d.ts +10 -0
- package/controls/c2.js +19 -0
- package/controls/c2.js.map +1 -0
- package/controls/choice.d.ts +39 -0
- package/controls/choice.js +410 -0
- package/controls/choice.js.map +1 -0
- package/controls/code-register.d.ts +1 -0
- package/controls/code-register.js +8 -0
- package/controls/code-register.js.map +1 -0
- package/controls/code.d.ts +42 -0
- package/controls/code.js +396 -0
- package/controls/code.js.map +1 -0
- package/controls/color.d.ts +5 -0
- package/controls/color.js +130 -0
- package/controls/color.js.map +1 -0
- package/controls/component-services.d.ts +114 -0
- package/controls/date-register.d.ts +1 -0
- package/controls/date-register.js +9 -0
- package/controls/date-register.js.map +1 -0
- package/controls/date-zone.d.ts +104 -0
- package/controls/date-zone.js +272 -0
- package/controls/date-zone.js.map +1 -0
- package/controls/date.d.ts +7 -0
- package/controls/date.js +458 -0
- package/controls/date.js.map +1 -0
- package/controls/form-picker-register.d.ts +1 -0
- package/controls/form-picker-register.js +19 -0
- package/controls/form-picker-register.js.map +1 -0
- package/controls/form-picker.d.ts +43 -0
- package/controls/form-picker.js +83 -0
- package/controls/form-picker.js.map +1 -0
- package/controls/icon-register.d.ts +1 -0
- package/controls/icon-register.js +8 -0
- package/controls/icon-register.js.map +1 -0
- package/controls/icon.d.ts +38 -0
- package/controls/icon.js +355 -0
- package/controls/icon.js.map +1 -0
- package/controls/index.d.ts +5 -0
- package/controls/index.js +37 -0
- package/controls/index.js.map +1 -0
- package/controls/json-register.d.ts +1 -0
- package/controls/json-register.js +8 -0
- package/controls/json-register.js.map +1 -0
- package/controls/json.d.ts +2 -0
- package/controls/json.js +72 -0
- package/controls/json.js.map +1 -0
- package/controls/link.d.ts +260 -0
- package/controls/link.js +1186 -0
- package/controls/link.js.map +1 -0
- package/controls/location-register.d.ts +1 -0
- package/controls/location-register.js +8 -0
- package/controls/location-register.js.map +1 -0
- package/controls/location.d.ts +16 -0
- package/controls/location.js +197 -0
- package/controls/location.js.map +1 -0
- package/controls/media-register.d.ts +1 -0
- package/controls/media-register.js +12 -0
- package/controls/media-register.js.map +1 -0
- package/controls/media-services.d.ts +40 -0
- package/controls/media.d.ts +73 -0
- package/controls/media.js +1076 -0
- package/controls/media.js.map +1 -0
- package/controls/number.d.ts +22 -0
- package/controls/number.js +195 -0
- package/controls/number.js.map +1 -0
- package/controls/reference-register.d.ts +1 -0
- package/controls/reference-register.js +10 -0
- package/controls/reference-register.js.map +1 -0
- package/controls/reference-services.d.ts +54 -0
- package/controls/reference.d.ts +23 -0
- package/controls/reference.js +761 -0
- package/controls/reference.js.map +1 -0
- package/controls/rich-text/blocks.d.ts +28 -0
- package/controls/rich-text/blocks.js +1532 -0
- package/controls/rich-text/blocks.js.map +1 -0
- package/controls/rich-text/catalog.d.ts +98 -0
- package/controls/rich-text/catalog.js +613 -0
- package/controls/rich-text/catalog.js.map +1 -0
- package/controls/rich-text/codec.d.ts +56 -0
- package/controls/rich-text/codec.js +32 -0
- package/controls/rich-text/codec.js.map +1 -0
- package/controls/rich-text/component-card.d.ts +14 -0
- package/controls/rich-text/component-card.js +706 -0
- package/controls/rich-text/component-card.js.map +1 -0
- package/controls/rich-text/control.d.ts +21 -0
- package/controls/rich-text/control.js +254 -0
- package/controls/rich-text/control.js.map +1 -0
- package/controls/rich-text/dom.d.ts +190 -0
- package/controls/rich-text/dom.js +690 -0
- package/controls/rich-text/dom.js.map +1 -0
- package/controls/rich-text/editor.d.ts +50 -0
- package/controls/rich-text/editor.js +1530 -0
- package/controls/rich-text/editor.js.map +1 -0
- package/controls/rich-text/floating.d.ts +23 -0
- package/controls/rich-text/floating.js +137 -0
- package/controls/rich-text/floating.js.map +1 -0
- package/controls/rich-text/index.d.ts +1 -0
- package/controls/rich-text/index.js +12 -0
- package/controls/rich-text/index.js.map +1 -0
- package/controls/rich-text/link-form.d.ts +13 -0
- package/controls/rich-text/link-form.js +111 -0
- package/controls/rich-text/link-form.js.map +1 -0
- package/controls/rich-text/markdown.d.ts +6 -0
- package/controls/rich-text/markdown.js +179 -0
- package/controls/rich-text/markdown.js.map +1 -0
- package/controls/rich-text/ops.d.ts +35 -0
- package/controls/rich-text/ops.js +314 -0
- package/controls/rich-text/ops.js.map +1 -0
- package/controls/rich-text/toolbar.d.ts +85 -0
- package/controls/rich-text/toolbar.js +338 -0
- package/controls/rich-text/toolbar.js.map +1 -0
- package/controls/scale.d.ts +56 -0
- package/controls/scale.js +563 -0
- package/controls/scale.js.map +1 -0
- package/controls/slot-register.d.ts +1 -0
- package/controls/slot-register.js +16 -0
- package/controls/slot-register.js.map +1 -0
- package/controls/slot-services.d.ts +97 -0
- package/controls/slot-services.js +38 -0
- package/controls/slot-services.js.map +1 -0
- package/controls/slot.d.ts +33 -0
- package/controls/slot.js +348 -0
- package/controls/slot.js.map +1 -0
- package/controls/table/index.d.ts +1 -0
- package/controls/table/index.js +12 -0
- package/controls/table/index.js.map +1 -0
- package/controls/table/prod.d.ts +21 -0
- package/controls/table/prod.js +79 -0
- package/controls/table/prod.js.map +1 -0
- package/controls/table/refs.d.ts +50 -0
- package/controls/table/refs.js +68 -0
- package/controls/table/refs.js.map +1 -0
- package/controls/table/stored.d.ts +15 -0
- package/controls/table/stored.js +44 -0
- package/controls/table/stored.js.map +1 -0
- package/controls/table/table-editor.d.ts +103 -0
- package/controls/table/table-editor.js +2722 -0
- package/controls/table/table-editor.js.map +1 -0
- package/controls/table/table-link.d.ts +24 -0
- package/controls/table/table-link.js +180 -0
- package/controls/table/table-link.js.map +1 -0
- package/controls/table/table.d.ts +9 -0
- package/controls/table/table.js +103 -0
- package/controls/table/table.js.map +1 -0
- package/controls/text.d.ts +17 -0
- package/controls/text.js +287 -0
- package/controls/text.js.map +1 -0
- package/engine/array.d.ts +101 -0
- package/engine/array.js +893 -0
- package/engine/array.js.map +1 -0
- package/engine/bits.d.ts +24 -0
- package/engine/bits.js +60 -0
- package/engine/bits.js.map +1 -0
- package/engine/breadcrumb.d.ts +45 -0
- package/engine/breadcrumb.js +87 -0
- package/engine/breadcrumb.js.map +1 -0
- package/engine/expand.d.ts +68 -0
- package/engine/expand.js +170 -0
- package/engine/expand.js.map +1 -0
- package/engine/field-list.d.ts +20 -0
- package/engine/field-list.js +19 -0
- package/engine/field-list.js.map +1 -0
- package/engine/field-shell.d.ts +49 -0
- package/engine/field-shell.js +860 -0
- package/engine/field-shell.js.map +1 -0
- package/engine/frame.d.ts +120 -0
- package/engine/frame.js +599 -0
- package/engine/frame.js.map +1 -0
- package/engine/group-summary.d.ts +4 -0
- package/engine/group-summary.js +66 -0
- package/engine/group-summary.js.map +1 -0
- package/engine/grouping.d.ts +224 -0
- package/engine/grouping.js +824 -0
- package/engine/grouping.js.map +1 -0
- package/engine/item-list.d.ts +89 -0
- package/engine/item-list.js +703 -0
- package/engine/item-list.js.map +1 -0
- package/engine/kit-field.d.ts +72 -0
- package/engine/kit-field.js +523 -0
- package/engine/kit-field.js.map +1 -0
- package/engine/schema-form.d.ts +91 -0
- package/engine/schema-form.js +320 -0
- package/engine/schema-form.js.map +1 -0
- package/engine/slot.d.ts +13 -0
- package/engine/slot.js +226 -0
- package/engine/slot.js.map +1 -0
- package/index.d.ts +46 -0
- package/index.js +55 -0
- package/index.js.map +1 -0
- package/kit.css +56 -0
- package/lib/cn.d.ts +4 -0
- package/lib/cn.js +53 -0
- package/lib/cn.js.map +1 -0
- package/lib/columns.d.ts +14 -0
- package/lib/columns.js +27 -0
- package/lib/columns.js.map +1 -0
- package/lib/frames.d.ts +36 -0
- package/lib/frames.js +214 -0
- package/lib/frames.js.map +1 -0
- package/lib/icons.d.ts +16 -0
- package/lib/icons.js +172 -0
- package/lib/icons.js.map +1 -0
- package/lib/path.d.ts +29 -0
- package/lib/path.js +64 -0
- package/lib/path.js.map +1 -0
- package/lib/schema.d.ts +49 -0
- package/lib/schema.js +287 -0
- package/lib/schema.js.map +1 -0
- package/lib/utils.d.ts +7 -0
- package/lib/utils.js +37 -0
- package/lib/utils.js.map +1 -0
- package/lib/validate.d.ts +20 -0
- package/lib/validate.js +150 -0
- package/lib/validate.js.map +1 -0
- package/package.json +31 -59
- package/schema/adapters.d.ts +28 -0
- package/schema/adapters.js +493 -0
- package/schema/adapters.js.map +1 -0
- package/schema/help.d.ts +25 -0
- package/schema/help.js +54 -0
- package/schema/help.js.map +1 -0
- package/schema/scale.d.ts +69 -0
- package/schema/scale.js +250 -0
- package/schema/scale.js.map +1 -0
- package/schema/sources.d.ts +103 -0
- package/schema/sources.js +65 -0
- package/schema/sources.js.map +1 -0
- package/schema/table.d.ts +319 -0
- package/schema/table.js +1198 -0
- package/schema/table.js.map +1 -0
- package/schema/types.d.ts +269 -0
- package/schema/types.js +14 -0
- package/schema/types.js.map +1 -0
- package/types.d.ts +17 -0
- package/ui/action-tray.d.ts +54 -0
- package/ui/action-tray.js +153 -0
- package/ui/action-tray.js.map +1 -0
- package/ui/button.d.ts +57 -0
- package/ui/button.js +202 -0
- package/ui/button.js.map +1 -0
- package/ui/choice-switch.d.ts +36 -0
- package/ui/choice-switch.js +57 -0
- package/ui/choice-switch.js.map +1 -0
- package/ui/controls.d.ts +83 -0
- package/ui/controls.js +319 -0
- package/ui/controls.js.map +1 -0
- package/ui/display.d.ts +156 -0
- package/ui/display.js +444 -0
- package/ui/display.js.map +1 -0
- package/ui/expanded-editor-modal.d.ts +26 -0
- package/ui/expanded-editor-modal.js +140 -0
- package/ui/expanded-editor-modal.js.map +1 -0
- package/ui/field-context.d.ts +12 -0
- package/ui/field-context.js +23 -0
- package/ui/field-context.js.map +1 -0
- package/ui/floating-panel.d.ts +152 -0
- package/ui/floating-panel.js +912 -0
- package/ui/floating-panel.js.map +1 -0
- package/ui/index.d.ts +12 -0
- package/ui/index.js +13 -0
- package/ui/input.d.ts +78 -0
- package/ui/input.js +250 -0
- package/ui/input.js.map +1 -0
- package/ui/mode-bar.d.ts +31 -0
- package/ui/mode-bar.js +65 -0
- package/ui/mode-bar.js.map +1 -0
- package/ui/overlay.d.ts +123 -0
- package/ui/overlay.js +378 -0
- package/ui/overlay.js.map +1 -0
- package/ui/path-crumbs.d.ts +90 -0
- package/ui/path-crumbs.js +532 -0
- package/ui/path-crumbs.js.map +1 -0
- package/ui/presence.d.ts +16 -0
- package/ui/presence.js +65 -0
- package/ui/presence.js.map +1 -0
- package/ui/select.d.ts +66 -0
- package/ui/select.js +405 -0
- package/ui/select.js.map +1 -0
- package/ui/shortcut-hint.d.ts +14 -0
- package/ui/shortcut-hint.js +35 -0
- package/ui/shortcut-hint.js.map +1 -0
- package/ui/surfaces.d.ts +23 -0
- package/ui/surfaces.js +26 -0
- package/ui/surfaces.js.map +1 -0
- package/ui/tooltip-root.d.ts +12 -0
- package/ui/tooltip-root.js +76 -0
- package/ui/tooltip-root.js.map +1 -0
- package/ui/variants.d.ts +15 -0
- package/ui/variants.js +14 -0
- package/ui/variants.js.map +1 -0
- package/LICENSE +0 -21
- package/README.md +0 -27
- 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.d.ts +0 -3140
- package/dist/index.js +0 -2036
- package/dist/index.mjs +0 -2044
- package/dist/theme.d.mts +0 -1506
- package/dist/theme.d.ts +0 -1506
- package/dist/theme.js +0 -4126
- 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":"c2.js","names":[],"sources":["../../src/kit/controls/c2.ts"],"sourcesContent":["/**\n * Lane C2 (boolean, select, multiselect, tags, and the scale capsule for a number with a scale): the controls this lane\n * ports, keyed by kit type, for the engine's CONTROLS table. `registerC2Controls()` puts them in and hands the scale\n * control to the number control (lane C1's NUMBER_SCALE hook); a registered type stops drawing the host's legacy control.\n */\nimport type { ComponentType } from \"react\";\nimport type { SchemaType } from \"../schema/types\";\nimport type { ControlProps } from \"../types\";\nimport { CONTROLS } from \"../engine/kit-field\";\nimport { BooleanControl, MultiSelectControl, SelectControl, TagsControl } from \"./choice\";\nimport { NUMBER_SCALE } from \"./number\";\nimport { ScaleControl } from \"./scale\";\n\nexport const C2_CONTROLS: Partial<Record<SchemaType, ComponentType<ControlProps>>> = {\n boolean: BooleanControl,\n select: SelectControl,\n multiselect: MultiSelectControl,\n tags: TagsControl,\n};\n\nexport function registerC2Controls() {\n Object.assign(CONTROLS, C2_CONTROLS);\n NUMBER_SCALE.control = ScaleControl;\n}\n"],"mappings":";;;;;AAaA,IAAa,cAAwE;CACnF,SAAS;CACT,QAAQ;CACR,aAAa;CACb,MAAM;CACP;AAED,SAAgB,qBAAqB;AACnC,QAAO,OAAO,UAAU,YAAY;AACpC,cAAa,UAAU"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CHOICE — boolean · select · multiselect · tags (V2 HEAD 9829bf1 kit/controls/choice.tsx, DESIGN 8.10–8.12).
|
|
3
|
+
* Rule (production): few options → segmented, many → dropdown, many values → checkboxes, on/off → switch card.
|
|
4
|
+
* D46: `layout: "segmented"` is a request, not a promise. With 4+ options, or labels that would wrap or truncate
|
|
5
|
+
* in a 340px inspector (`fitsSegmented`), it renders the dropdown instead, so every schema follows the rule.
|
|
6
|
+
*
|
|
7
|
+
* Values are the ones production stores, untouched by any adapter (schema.ts plans them AS_IS): boolean, the option's
|
|
8
|
+
* string, a string[] of option values, a string[] of tags. Tags are written the way the backend judges them
|
|
9
|
+
* (tagsValueProblem: trimmed, case-insensitively unique, at most TAG_VALUE_MAX_LENGTH characters), and a tag the
|
|
10
|
+
* control will not add says why under the box instead of vanishing.
|
|
11
|
+
*
|
|
12
|
+
* Option icons are all or none per list (the schema adapter's rule): a list draws icons only when every option names an
|
|
13
|
+
* icon that can be drawn, so labels stay aligned and no option gets a stand-in glyph. The host's glyphs come first
|
|
14
|
+
* (KitServices.IconGlyph, the BetterCMS set the site renders: every stored option icon is one of its names); with no
|
|
15
|
+
* host renderer, the kit's own drawn icons.
|
|
16
|
+
*/
|
|
17
|
+
import * as React from "react";
|
|
18
|
+
import type { Option } from "../schema/types";
|
|
19
|
+
import { type KitServices } from "../context";
|
|
20
|
+
import type { ControlProps } from "../types";
|
|
21
|
+
/**
|
|
22
|
+
* Icons for a list: every option's icon when all of them resolve, otherwise none (never a fallback glyph). `Glyph` is
|
|
23
|
+
* the host's renderer (KitServices.IconGlyph): it draws every BetterCMS icon name (the option's kit name read back
|
|
24
|
+
* through dockIconOf); without it, or when a name is not in that set, the kit's own drawn icons.
|
|
25
|
+
*/
|
|
26
|
+
export declare function optionIcons(options: Option[], className?: string, Glyph?: KitServices["IconGlyph"]): (React.ReactNode | undefined)[];
|
|
27
|
+
/**
|
|
28
|
+
* Adds or removes one id of the control's own in aria-describedby, leaving the ids FieldShell wires (help, issue)
|
|
29
|
+
* in place (as ScaleSlider does).
|
|
30
|
+
*/
|
|
31
|
+
export declare function useOwnDescription(ref: React.RefObject<HTMLElement | null>, ownId: string | null): void;
|
|
32
|
+
/** Boolean switch (used inside the switch card the shell draws). Commits immediately. */
|
|
33
|
+
export declare function BooleanControl({ field, value, onChange, readOnly, id }: ControlProps): import("react/jsx-runtime").JSX.Element;
|
|
34
|
+
export declare function SelectControl({ field, value, onChange, readOnly, id }: ControlProps): import("react/jsx-runtime").JSX.Element;
|
|
35
|
+
export declare function MultiSelectControl({ field, value, onChange, readOnly, id }: ControlProps): import("react/jsx-runtime").JSX.Element;
|
|
36
|
+
/** Why a typed tag is not added, or null when it is (the backend's own checks, said in words). */
|
|
37
|
+
export declare function tagRefusal(tag: string, list: string[]): string | null;
|
|
38
|
+
/** Chip input. Says so at its limit, and says why a tag was not added, instead of silently dropping it. */
|
|
39
|
+
export declare function TagsControl({ field, value, onChange, readOnly, id, onBlur }: ControlProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
import { cn } from "../lib/cn.js";
|
|
2
|
+
import { KitIcon, iconKey } from "../lib/icons.js";
|
|
3
|
+
import { useKitEnv, useKitServices } from "../context.js";
|
|
4
|
+
import { shortcutHintsOn } from "../ui/shortcut-hint.js";
|
|
5
|
+
import { Checkbox, Segmented, Switch } from "../ui/controls.js";
|
|
6
|
+
import { Popover, PopoverContent, PopoverTrigger } from "../ui/overlay.js";
|
|
7
|
+
import { Select } from "../ui/select.js";
|
|
8
|
+
import { fitsSegmented } from "../ui/choice-switch.js";
|
|
9
|
+
import { dockIconOf } from "../adapters/icons.js";
|
|
10
|
+
import * as React from "react";
|
|
11
|
+
import { IconCheck, IconPlus, IconX } from "@tabler/icons-react";
|
|
12
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
13
|
+
//#region src/kit/controls/choice.tsx
|
|
14
|
+
/**
|
|
15
|
+
* CHOICE — boolean · select · multiselect · tags (V2 HEAD 9829bf1 kit/controls/choice.tsx, DESIGN 8.10–8.12).
|
|
16
|
+
* Rule (production): few options → segmented, many → dropdown, many values → checkboxes, on/off → switch card.
|
|
17
|
+
* D46: `layout: "segmented"` is a request, not a promise. With 4+ options, or labels that would wrap or truncate
|
|
18
|
+
* in a 340px inspector (`fitsSegmented`), it renders the dropdown instead, so every schema follows the rule.
|
|
19
|
+
*
|
|
20
|
+
* Values are the ones production stores, untouched by any adapter (schema.ts plans them AS_IS): boolean, the option's
|
|
21
|
+
* string, a string[] of option values, a string[] of tags. Tags are written the way the backend judges them
|
|
22
|
+
* (tagsValueProblem: trimmed, case-insensitively unique, at most TAG_VALUE_MAX_LENGTH characters), and a tag the
|
|
23
|
+
* control will not add says why under the box instead of vanishing.
|
|
24
|
+
*
|
|
25
|
+
* Option icons are all or none per list (the schema adapter's rule): a list draws icons only when every option names an
|
|
26
|
+
* icon that can be drawn, so labels stay aligned and no option gets a stand-in glyph. The host's glyphs come first
|
|
27
|
+
* (KitServices.IconGlyph, the BetterCMS set the site renders: every stored option icon is one of its names); with no
|
|
28
|
+
* host renderer, the kit's own drawn icons.
|
|
29
|
+
*/
|
|
30
|
+
var str = (v) => typeof v === "string" ? v : v == null ? "" : String(v);
|
|
31
|
+
var opts = (o) => o ?? [];
|
|
32
|
+
/**
|
|
33
|
+
* Icons for a list: every option's icon when all of them resolve, otherwise none (never a fallback glyph). `Glyph` is
|
|
34
|
+
* the host's renderer (KitServices.IconGlyph): it draws every BetterCMS icon name (the option's kit name read back
|
|
35
|
+
* through dockIconOf); without it, or when a name is not in that set, the kit's own drawn icons.
|
|
36
|
+
*/
|
|
37
|
+
function optionIcons(options, className, Glyph) {
|
|
38
|
+
if (options.length === 0) return [];
|
|
39
|
+
const dock = options.map((o) => dockIconOf(o.icon));
|
|
40
|
+
if (Glyph && dock.every((n) => n !== void 0)) return dock.map((n) => /* @__PURE__ */ jsx(Glyph, {
|
|
41
|
+
name: n,
|
|
42
|
+
className: cn("flex", className)
|
|
43
|
+
}));
|
|
44
|
+
const all = options.every((o) => iconKey(o.icon) !== void 0);
|
|
45
|
+
return options.map((o) => all ? /* @__PURE__ */ jsx(KitIcon, {
|
|
46
|
+
name: o.icon,
|
|
47
|
+
className
|
|
48
|
+
}) : void 0);
|
|
49
|
+
}
|
|
50
|
+
/** The limit sentence (DESIGN 8.12), shared by multiselect and tags. */
|
|
51
|
+
function LimitLine({ max }) {
|
|
52
|
+
return /* @__PURE__ */ jsxs("span", {
|
|
53
|
+
className: "px-0.5 text-kit-xs text-kit-fg-3",
|
|
54
|
+
children: [
|
|
55
|
+
"That's the limit of ",
|
|
56
|
+
max,
|
|
57
|
+
". Remove one to add another."
|
|
58
|
+
]
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Roving focus for a radiogroup of buttons (WAI-ARIA radio group, as Segmented does): Tab lands on the selected option
|
|
63
|
+
* (or the first), arrows move and select, Home / End jump.
|
|
64
|
+
*/
|
|
65
|
+
function useRadioKeys(values, current, onPick, readOnly) {
|
|
66
|
+
const focusable = values.includes(current) ? current : values[0];
|
|
67
|
+
const onKeyDown = (e, i) => {
|
|
68
|
+
if (readOnly || !values.length) return;
|
|
69
|
+
const n = values.length;
|
|
70
|
+
const next = e.key === "ArrowRight" || e.key === "ArrowDown" ? (i + 1) % n : e.key === "ArrowLeft" || e.key === "ArrowUp" ? (i - 1 + n) % n : e.key === "Home" ? 0 : e.key === "End" ? n - 1 : -1;
|
|
71
|
+
if (next < 0) return;
|
|
72
|
+
e.preventDefault();
|
|
73
|
+
onPick(values[next]);
|
|
74
|
+
e.currentTarget.closest("[role=radiogroup]")?.querySelector(`[data-choice-value="${CSS.escape(values[next])}"]`)?.focus();
|
|
75
|
+
};
|
|
76
|
+
return {
|
|
77
|
+
tabIndexOf: (v) => v === focusable ? 0 : -1,
|
|
78
|
+
onKeyDown
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Adds or removes one id of the control's own in aria-describedby, leaving the ids FieldShell wires (help, issue)
|
|
83
|
+
* in place (as ScaleSlider does).
|
|
84
|
+
*/
|
|
85
|
+
function useOwnDescription(ref, ownId) {
|
|
86
|
+
const last = React.useRef(null);
|
|
87
|
+
React.useEffect(() => {
|
|
88
|
+
const el = ref.current;
|
|
89
|
+
if (!el) return;
|
|
90
|
+
const ids = (el.getAttribute("aria-describedby") ?? "").split(" ").filter((t) => t && t !== last.current && t !== ownId);
|
|
91
|
+
if (ownId) ids.push(ownId);
|
|
92
|
+
if (ids.length) el.setAttribute("aria-describedby", ids.join(" "));
|
|
93
|
+
else el.removeAttribute("aria-describedby");
|
|
94
|
+
last.current = ownId;
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
/** Boolean switch (used inside the switch card the shell draws). Commits immediately. */
|
|
98
|
+
function BooleanControl({ field, value, onChange, readOnly, id }) {
|
|
99
|
+
if (field.layout === "checkbox") return /* @__PURE__ */ jsx(Checkbox, {
|
|
100
|
+
id,
|
|
101
|
+
checked: Boolean(value),
|
|
102
|
+
disabled: readOnly,
|
|
103
|
+
onCheckedChange: (c) => onChange(c === true),
|
|
104
|
+
"aria-label": field.title
|
|
105
|
+
});
|
|
106
|
+
return /* @__PURE__ */ jsx(Switch, {
|
|
107
|
+
id,
|
|
108
|
+
checked: Boolean(value),
|
|
109
|
+
disabled: readOnly,
|
|
110
|
+
onCheckedChange: (c) => onChange(c),
|
|
111
|
+
"aria-label": field.title,
|
|
112
|
+
nativeButton: true,
|
|
113
|
+
render: /* @__PURE__ */ jsx("button", { type: "button" })
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
function SelectControl({ field, value, onChange, readOnly, id }) {
|
|
117
|
+
const { variant } = useKitEnv();
|
|
118
|
+
const { IconGlyph } = useKitServices();
|
|
119
|
+
const options = opts(field.options);
|
|
120
|
+
const v = str(value);
|
|
121
|
+
const fits = fitsSegmented(options.map((o) => o.label));
|
|
122
|
+
const layout = field.layout ?? (fits ? "segmented" : "dropdown");
|
|
123
|
+
const pick = (n) => {
|
|
124
|
+
if (!readOnly && n !== v) onChange(n);
|
|
125
|
+
};
|
|
126
|
+
const keys = useRadioKeys(options.map((o) => o.value), v, pick, readOnly);
|
|
127
|
+
if (layout === "segmented" && fits) {
|
|
128
|
+
const icons = optionIcons(options, "size-3.5", IconGlyph);
|
|
129
|
+
return /* @__PURE__ */ jsx(Segmented, {
|
|
130
|
+
"aria-label": field.title,
|
|
131
|
+
value: v,
|
|
132
|
+
onChange: pick,
|
|
133
|
+
items: options.map((o, i) => ({
|
|
134
|
+
value: o.value,
|
|
135
|
+
label: o.label,
|
|
136
|
+
icon: icons[i],
|
|
137
|
+
disabled: readOnly
|
|
138
|
+
})),
|
|
139
|
+
className: "w-full [&>button]:min-w-0 [&>button]:flex-1"
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
if (layout === "radio") return /* @__PURE__ */ jsx("div", {
|
|
143
|
+
role: "radiogroup",
|
|
144
|
+
id,
|
|
145
|
+
"aria-label": field.title,
|
|
146
|
+
className: "flex flex-col gap-0.5",
|
|
147
|
+
children: options.map((o, i) => /* @__PURE__ */ jsxs("button", {
|
|
148
|
+
type: "button",
|
|
149
|
+
role: "radio",
|
|
150
|
+
"data-choice-value": o.value,
|
|
151
|
+
"aria-checked": o.value === v,
|
|
152
|
+
tabIndex: keys.tabIndexOf(o.value),
|
|
153
|
+
disabled: readOnly,
|
|
154
|
+
onClick: () => pick(o.value),
|
|
155
|
+
onKeyDown: (e) => keys.onKeyDown(e, i),
|
|
156
|
+
className: "flex items-start gap-2.5 rounded-kit-md px-1.5 py-1.5 text-left hover:bg-kit-hover",
|
|
157
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
158
|
+
className: cn("mt-0.5 flex size-4 shrink-0 items-center justify-center rounded-full border transition-colors", o.value === v ? "border-kit-accent" : "border-kit-line-strong"),
|
|
159
|
+
children: o.value === v ? /* @__PURE__ */ jsx("span", { className: "size-2 rounded-full bg-kit-accent" }) : null
|
|
160
|
+
}), /* @__PURE__ */ jsxs("span", {
|
|
161
|
+
className: "min-w-0",
|
|
162
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
163
|
+
className: "block text-kit-sm text-kit-fg",
|
|
164
|
+
children: o.label
|
|
165
|
+
}), o.description ? /* @__PURE__ */ jsx("span", {
|
|
166
|
+
className: "block text-kit-xs text-kit-fg-3",
|
|
167
|
+
children: o.description
|
|
168
|
+
}) : null]
|
|
169
|
+
})]
|
|
170
|
+
}, o.value))
|
|
171
|
+
});
|
|
172
|
+
if (layout === "cards" || layout === "grid") {
|
|
173
|
+
const icons = optionIcons(options, "size-4", IconGlyph);
|
|
174
|
+
return /* @__PURE__ */ jsx("div", {
|
|
175
|
+
role: "radiogroup",
|
|
176
|
+
id,
|
|
177
|
+
"aria-label": field.title,
|
|
178
|
+
className: cn("grid gap-1.5", variant === "document" ? "grid-cols-3" : "grid-cols-2"),
|
|
179
|
+
children: options.map((o, i) => {
|
|
180
|
+
const on = o.value === v;
|
|
181
|
+
return /* @__PURE__ */ jsxs("button", {
|
|
182
|
+
type: "button",
|
|
183
|
+
role: "radio",
|
|
184
|
+
"data-choice-value": o.value,
|
|
185
|
+
"aria-checked": on,
|
|
186
|
+
tabIndex: keys.tabIndexOf(o.value),
|
|
187
|
+
disabled: readOnly,
|
|
188
|
+
onClick: () => pick(o.value),
|
|
189
|
+
onKeyDown: (e) => keys.onKeyDown(e, i),
|
|
190
|
+
className: cn("relative flex flex-col items-start gap-1.5 rounded-kit-lg border p-2.5 text-left transition-[border-color,box-shadow] duration-150 focus-visible:outline-offset-[-2px]", on ? "border-[var(--kit-emphasis-line)] bg-kit-control-bg shadow-kit-xs" : "border-kit-line hover:border-kit-line-strong"),
|
|
191
|
+
children: [
|
|
192
|
+
icons[i] ? /* @__PURE__ */ jsx("span", {
|
|
193
|
+
className: cn("[&_svg]:size-4", on ? "text-kit-fg" : "text-kit-fg-3"),
|
|
194
|
+
children: icons[i]
|
|
195
|
+
}) : null,
|
|
196
|
+
/* @__PURE__ */ jsx("span", {
|
|
197
|
+
className: "text-kit-sm font-medium text-kit-fg",
|
|
198
|
+
children: o.label
|
|
199
|
+
}),
|
|
200
|
+
o.description ? /* @__PURE__ */ jsx("span", {
|
|
201
|
+
className: "text-kit-xs leading-4 text-kit-fg-3",
|
|
202
|
+
children: o.description
|
|
203
|
+
}) : null,
|
|
204
|
+
on ? /* @__PURE__ */ jsx(IconCheck, {
|
|
205
|
+
"aria-hidden": true,
|
|
206
|
+
className: "absolute right-2 top-2 size-3.5 text-kit-fg",
|
|
207
|
+
stroke: 2
|
|
208
|
+
}) : null
|
|
209
|
+
]
|
|
210
|
+
}, o.value);
|
|
211
|
+
})
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
const icons = optionIcons(options, void 0, IconGlyph);
|
|
215
|
+
return /* @__PURE__ */ jsx(Select, {
|
|
216
|
+
id,
|
|
217
|
+
"aria-label": field.title,
|
|
218
|
+
size: variant === "document" ? "lg" : "md",
|
|
219
|
+
value: v || void 0,
|
|
220
|
+
disabled: readOnly,
|
|
221
|
+
onValueChange: pick,
|
|
222
|
+
placeholder: field.placeholder ?? "Select…",
|
|
223
|
+
options: options.map((o, i) => ({
|
|
224
|
+
value: o.value,
|
|
225
|
+
label: o.label,
|
|
226
|
+
description: o.description,
|
|
227
|
+
icon: icons[i]
|
|
228
|
+
}))
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
function MultiSelectControl({ field, value, onChange, readOnly, id }) {
|
|
232
|
+
const list = Array.isArray(value) ? value.filter((x) => typeof x === "string") : [];
|
|
233
|
+
const options = opts(field.options);
|
|
234
|
+
const max = field.validation?.max;
|
|
235
|
+
const full = max != null && list.length >= max;
|
|
236
|
+
const toggle = (o) => {
|
|
237
|
+
if (readOnly) return;
|
|
238
|
+
if (list.includes(o)) onChange(list.filter((x) => x !== o));
|
|
239
|
+
else if (!full) onChange([...list, o]);
|
|
240
|
+
};
|
|
241
|
+
const label = (val) => options.find((o) => o.value === val)?.label ?? val;
|
|
242
|
+
const withLimit = (body) => full && !readOnly ? /* @__PURE__ */ jsxs("div", {
|
|
243
|
+
className: "flex flex-col gap-1",
|
|
244
|
+
children: [body, /* @__PURE__ */ jsx(LimitLine, { max })]
|
|
245
|
+
}) : body;
|
|
246
|
+
if (field.layout === "checkbox" || field.layout === "list") return withLimit(/* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("div", {
|
|
247
|
+
id,
|
|
248
|
+
role: "group",
|
|
249
|
+
"aria-label": field.title,
|
|
250
|
+
className: "flex flex-col gap-0.5",
|
|
251
|
+
children: options.map((o) => {
|
|
252
|
+
const on = list.includes(o.value);
|
|
253
|
+
return /* @__PURE__ */ jsxs("label", {
|
|
254
|
+
className: cn("flex items-center gap-2.5 rounded-kit-md px-1.5 py-1.5", !on && full ? "cursor-not-allowed" : "cursor-pointer hover:bg-kit-hover"),
|
|
255
|
+
children: [/* @__PURE__ */ jsx(Checkbox, {
|
|
256
|
+
checked: on,
|
|
257
|
+
disabled: readOnly || !on && full,
|
|
258
|
+
onCheckedChange: () => toggle(o.value)
|
|
259
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
260
|
+
className: "text-kit-sm text-kit-fg",
|
|
261
|
+
children: o.label
|
|
262
|
+
})]
|
|
263
|
+
}, o.value);
|
|
264
|
+
})
|
|
265
|
+
}) }));
|
|
266
|
+
return withLimit(/* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(Popover, { children: [/* @__PURE__ */ jsxs("div", {
|
|
267
|
+
id: readOnly ? id : void 0,
|
|
268
|
+
role: readOnly ? "group" : void 0,
|
|
269
|
+
"aria-label": readOnly ? field.title : void 0,
|
|
270
|
+
className: "flex min-h-8 flex-wrap items-center gap-1 rounded-kit-md border border-kit-line-strong bg-kit-field-bg p-1 transition-colors hover:border-kit-line-strong",
|
|
271
|
+
children: [list.map((o) => /* @__PURE__ */ jsxs("span", {
|
|
272
|
+
className: "inline-flex h-6 items-center gap-1 rounded-kit-md border border-kit-line bg-kit-control-bg pl-2 pr-1 text-kit-sm text-kit-fg shadow-kit-xs",
|
|
273
|
+
children: [label(o), readOnly ? null : /* @__PURE__ */ jsx("button", {
|
|
274
|
+
type: "button",
|
|
275
|
+
"aria-label": `Remove ${label(o)}`,
|
|
276
|
+
onClick: () => toggle(o),
|
|
277
|
+
className: "flex rounded-kit-md p-0.5 text-kit-fg-3 hover:bg-kit-hover hover:text-kit-fg",
|
|
278
|
+
children: /* @__PURE__ */ jsx(IconX, {
|
|
279
|
+
className: "size-3",
|
|
280
|
+
stroke: 1.5
|
|
281
|
+
})
|
|
282
|
+
})]
|
|
283
|
+
}, o)), readOnly ? null : /* @__PURE__ */ jsxs(PopoverTrigger, {
|
|
284
|
+
id,
|
|
285
|
+
className: "inline-flex h-6 items-center gap-1 rounded-kit-md px-1.5 text-kit-sm text-kit-fg-3 hover:bg-kit-hover hover:text-kit-fg",
|
|
286
|
+
children: [/* @__PURE__ */ jsx(IconPlus, {
|
|
287
|
+
"aria-hidden": true,
|
|
288
|
+
className: "size-3.5",
|
|
289
|
+
stroke: 1.5
|
|
290
|
+
}), list.length ? "Add" : field.placeholder ?? "Choose…"]
|
|
291
|
+
})]
|
|
292
|
+
}), /* @__PURE__ */ jsxs(PopoverContent, {
|
|
293
|
+
className: "w-60 p-1",
|
|
294
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
295
|
+
role: "group",
|
|
296
|
+
"aria-label": field.title,
|
|
297
|
+
children: options.map((o) => {
|
|
298
|
+
const on = list.includes(o.value);
|
|
299
|
+
return /* @__PURE__ */ jsxs("button", {
|
|
300
|
+
type: "button",
|
|
301
|
+
role: "checkbox",
|
|
302
|
+
"aria-checked": on,
|
|
303
|
+
disabled: !on && full,
|
|
304
|
+
onClick: () => toggle(o.value),
|
|
305
|
+
className: "flex h-8 w-full items-center gap-2 rounded-kit-md px-2 text-left text-kit-sm hover:bg-kit-hover disabled:opacity-40 disabled:hover:bg-transparent",
|
|
306
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
307
|
+
className: cn("flex size-4 items-center justify-center rounded-kit-md border", on ? "border-kit-accent bg-kit-accent text-kit-accent-on" : "border-kit-line-strong"),
|
|
308
|
+
children: on ? /* @__PURE__ */ jsx(IconCheck, {
|
|
309
|
+
"aria-hidden": true,
|
|
310
|
+
className: "size-3",
|
|
311
|
+
stroke: 3
|
|
312
|
+
}) : null
|
|
313
|
+
}), o.label]
|
|
314
|
+
}, o.value);
|
|
315
|
+
})
|
|
316
|
+
}), full ? /* @__PURE__ */ jsx("div", {
|
|
317
|
+
className: "px-2 pb-1 pt-1.5",
|
|
318
|
+
children: /* @__PURE__ */ jsx(LimitLine, { max })
|
|
319
|
+
}) : null]
|
|
320
|
+
})] }) }));
|
|
321
|
+
}
|
|
322
|
+
/** Why a typed tag is not added, or null when it is (the backend's own checks, said in words). */
|
|
323
|
+
function tagRefusal(tag, list) {
|
|
324
|
+
if (Array.from(tag).length > 64) return `A tag can be up to 64 characters.`;
|
|
325
|
+
const folded = tag.toLowerCase();
|
|
326
|
+
const twin = list.find((t) => t.trim().toLowerCase() === folded);
|
|
327
|
+
if (twin !== void 0) return `"${twin}" is already a tag.`;
|
|
328
|
+
return null;
|
|
329
|
+
}
|
|
330
|
+
/** Chip input. Says so at its limit, and says why a tag was not added, instead of silently dropping it. */
|
|
331
|
+
function TagsControl({ field, value, onChange, readOnly, id, onBlur }) {
|
|
332
|
+
const list = Array.isArray(value) ? value.map((x) => str(x)) : [];
|
|
333
|
+
const [draft, setDraft] = React.useState("");
|
|
334
|
+
const [refusal, setRefusal] = React.useState(null);
|
|
335
|
+
const reasonId = React.useId();
|
|
336
|
+
const inputRef = React.useRef(null);
|
|
337
|
+
useOwnDescription(inputRef, refusal ? reasonId : null);
|
|
338
|
+
const max = field.validation?.max;
|
|
339
|
+
const full = max != null && list.length >= max;
|
|
340
|
+
const add = () => {
|
|
341
|
+
const t = draft.trim().replace(/,$/, "").trim();
|
|
342
|
+
if (!t || full) {
|
|
343
|
+
setDraft("");
|
|
344
|
+
setRefusal(null);
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
const why = tagRefusal(t, list);
|
|
348
|
+
if (why) {
|
|
349
|
+
setRefusal(why);
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
onChange([...list, t]);
|
|
353
|
+
setDraft("");
|
|
354
|
+
setRefusal(null);
|
|
355
|
+
};
|
|
356
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
357
|
+
className: "flex flex-col gap-1",
|
|
358
|
+
children: [
|
|
359
|
+
/* @__PURE__ */ jsxs("div", {
|
|
360
|
+
className: "flex min-h-8 flex-wrap items-center gap-1 rounded-kit-md border border-kit-line-strong bg-kit-field-bg p-1 transition-colors focus-within:border-kit-line-strong focus-within:bg-kit-field-bg hover:border-kit-line-strong",
|
|
361
|
+
children: [list.map((t, i) => /* @__PURE__ */ jsxs("span", {
|
|
362
|
+
className: "inline-flex h-6 items-center gap-1 rounded-kit-md bg-kit-selected pl-2 pr-1 text-kit-sm text-kit-fg",
|
|
363
|
+
children: [t, readOnly ? null : /* @__PURE__ */ jsx("button", {
|
|
364
|
+
type: "button",
|
|
365
|
+
"aria-label": `Remove ${t}`,
|
|
366
|
+
onClick: () => onChange(list.filter((_, j) => j !== i)),
|
|
367
|
+
className: "flex rounded-kit-md p-0.5 text-kit-fg-3 hover:bg-kit-hover hover:text-kit-fg",
|
|
368
|
+
children: /* @__PURE__ */ jsx(IconX, {
|
|
369
|
+
className: "size-3",
|
|
370
|
+
stroke: 1.5
|
|
371
|
+
})
|
|
372
|
+
})]
|
|
373
|
+
}, `${t}-${i}`)), readOnly ? null : /* @__PURE__ */ jsx("input", {
|
|
374
|
+
ref: inputRef,
|
|
375
|
+
id,
|
|
376
|
+
value: draft,
|
|
377
|
+
disabled: full,
|
|
378
|
+
onChange: (e) => {
|
|
379
|
+
setDraft(e.target.value);
|
|
380
|
+
if (refusal) setRefusal(null);
|
|
381
|
+
},
|
|
382
|
+
onBlur: () => {
|
|
383
|
+
add();
|
|
384
|
+
onBlur?.();
|
|
385
|
+
},
|
|
386
|
+
onKeyDown: (e) => {
|
|
387
|
+
if (e.key === "Enter" || e.key === ",") {
|
|
388
|
+
e.preventDefault();
|
|
389
|
+
add();
|
|
390
|
+
} else if (e.key === "Backspace" && !draft && list.length) onChange(list.slice(0, -1));
|
|
391
|
+
},
|
|
392
|
+
placeholder: full ? "" : list.length ? "Add…" : field.placeholder ?? (shortcutHintsOn() ? "Type and press Enter" : "Add…"),
|
|
393
|
+
className: "h-6 min-w-20 flex-1 bg-transparent px-1.5 text-kit-sm text-kit-fg outline-none placeholder:text-kit-fg-3"
|
|
394
|
+
})]
|
|
395
|
+
}),
|
|
396
|
+
refusal && !readOnly ? /* @__PURE__ */ jsx("span", {
|
|
397
|
+
id: reasonId,
|
|
398
|
+
role: "status",
|
|
399
|
+
"aria-live": "polite",
|
|
400
|
+
className: "px-0.5 text-kit-xs text-kit-fg-3",
|
|
401
|
+
children: refusal
|
|
402
|
+
}) : null,
|
|
403
|
+
full && !readOnly ? /* @__PURE__ */ jsx(LimitLine, { max }) : null
|
|
404
|
+
]
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
//#endregion
|
|
408
|
+
export { BooleanControl, MultiSelectControl, SelectControl, TagsControl };
|
|
409
|
+
|
|
410
|
+
//# sourceMappingURL=choice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"choice.js","names":[],"sources":["../../src/kit/controls/choice.tsx"],"sourcesContent":["/**\n * CHOICE — boolean · select · multiselect · tags (V2 HEAD 9829bf1 kit/controls/choice.tsx, DESIGN 8.10–8.12).\n * Rule (production): few options → segmented, many → dropdown, many values → checkboxes, on/off → switch card.\n * D46: `layout: \"segmented\"` is a request, not a promise. With 4+ options, or labels that would wrap or truncate\n * in a 340px inspector (`fitsSegmented`), it renders the dropdown instead, so every schema follows the rule.\n *\n * Values are the ones production stores, untouched by any adapter (schema.ts plans them AS_IS): boolean, the option's\n * string, a string[] of option values, a string[] of tags. Tags are written the way the backend judges them\n * (tagsValueProblem: trimmed, case-insensitively unique, at most TAG_VALUE_MAX_LENGTH characters), and a tag the\n * control will not add says why under the box instead of vanishing.\n *\n * Option icons are all or none per list (the schema adapter's rule): a list draws icons only when every option names an\n * icon that can be drawn, so labels stay aligned and no option gets a stand-in glyph. The host's glyphs come first\n * (KitServices.IconGlyph, the BetterCMS set the site renders: every stored option icon is one of its names); with no\n * host renderer, the kit's own drawn icons.\n */\nimport * as React from \"react\";\nimport { IconCheck, IconPlus, IconX } from \"@tabler/icons-react\";\nimport { Checkbox, Segmented, Switch } from \"../ui/controls\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../ui/overlay\";\nimport { Select } from \"../ui/select\";\nimport { fitsSegmented } from \"../ui/choice-switch\";\nimport { shortcutHintsOn } from \"../ui/shortcut-hint\";\nimport { cn } from \"../lib/cn\";\nimport { KitIcon, iconKey } from \"../lib/icons\";\nimport type { Option } from \"../schema/types\";\nimport { useKitEnv, useKitServices, type KitServices } from \"../context\";\nimport { dockIconOf } from \"../adapters/icons\";\nimport type { ControlProps } from \"../types\";\nimport { TAG_VALUE_MAX_LENGTH } from \"../adapters/prod-types\";\n\nconst str = (v: unknown) => (typeof v === \"string\" ? v : v == null ? \"\" : String(v));\nconst opts = (o?: Option[]) => o ?? [];\n\n/**\n * Icons for a list: every option's icon when all of them resolve, otherwise none (never a fallback glyph). `Glyph` is\n * the host's renderer (KitServices.IconGlyph): it draws every BetterCMS icon name (the option's kit name read back\n * through dockIconOf); without it, or when a name is not in that set, the kit's own drawn icons.\n */\nexport function optionIcons(options: Option[], className?: string, Glyph?: KitServices[\"IconGlyph\"]): (React.ReactNode | undefined)[] {\n if (options.length === 0) return [];\n const dock = options.map((o) => dockIconOf(o.icon));\n // a block box, as the kit's own <svg> is under preflight: an inline glyph would sit on a line box and grow the row\n if (Glyph && dock.every((n) => n !== undefined)) return dock.map((n) => <Glyph name={n!} className={cn(\"flex\", className)} />);\n const all = options.every((o) => iconKey(o.icon) !== undefined);\n return options.map((o) => (all ? <KitIcon name={o.icon} className={className} /> : undefined));\n}\n\n/** The limit sentence (DESIGN 8.12), shared by multiselect and tags. */\nfunction LimitLine({ max }: { max: number }) {\n return <span className=\"px-0.5 text-kit-xs text-kit-fg-3\">That's the limit of {max}. Remove one to add another.</span>;\n}\n\n/**\n * Roving focus for a radiogroup of buttons (WAI-ARIA radio group, as Segmented does): Tab lands on the selected option\n * (or the first), arrows move and select, Home / End jump.\n */\nfunction useRadioKeys(values: string[], current: string, onPick: (v: string) => void, readOnly?: boolean) {\n const focusable = values.includes(current) ? current : values[0];\n const onKeyDown = (e: React.KeyboardEvent, i: number) => {\n if (readOnly || !values.length) return;\n const n = values.length;\n const next =\n e.key === \"ArrowRight\" || e.key === \"ArrowDown\"\n ? (i + 1) % n\n : e.key === \"ArrowLeft\" || e.key === \"ArrowUp\"\n ? (i - 1 + n) % n\n : e.key === \"Home\"\n ? 0\n : e.key === \"End\"\n ? n - 1\n : -1;\n if (next < 0) return;\n e.preventDefault();\n onPick(values[next]);\n const group = (e.currentTarget as HTMLElement).closest(\"[role=radiogroup]\");\n group?.querySelector<HTMLElement>(`[data-choice-value=\"${CSS.escape(values[next])}\"]`)?.focus();\n };\n return { tabIndexOf: (v: string) => (v === focusable ? 0 : -1), onKeyDown };\n}\n\n/**\n * Adds or removes one id of the control's own in aria-describedby, leaving the ids FieldShell wires (help, issue)\n * in place (as ScaleSlider does).\n */\nexport function useOwnDescription(ref: React.RefObject<HTMLElement | null>, ownId: string | null) {\n const last = React.useRef<string | null>(null);\n React.useEffect(() => {\n const el = ref.current;\n if (!el) return;\n const ids = (el.getAttribute(\"aria-describedby\") ?? \"\").split(\" \").filter((t) => t && t !== last.current && t !== ownId);\n if (ownId) ids.push(ownId);\n if (ids.length) el.setAttribute(\"aria-describedby\", ids.join(\" \"));\n else el.removeAttribute(\"aria-describedby\");\n last.current = ownId;\n });\n}\n\n/** Boolean switch (used inside the switch card the shell draws). Commits immediately. */\nexport function BooleanControl({ field, value, onChange, readOnly, id }: ControlProps) {\n if (field.layout === \"checkbox\")\n return <Checkbox id={id} checked={Boolean(value)} disabled={readOnly} onCheckedChange={(c) => onChange(c === true)} aria-label={field.title} />;\n /* V2's switch is a native <button role=\"switch\"> (Radix); Base UI draws a <span> unless asked for the button */\n return <Switch id={id} checked={Boolean(value)} disabled={readOnly} onCheckedChange={(c) => onChange(c)} aria-label={field.title} nativeButton render={<button type=\"button\" />} />;\n}\n\nexport function SelectControl({ field, value, onChange, readOnly, id }: ControlProps) {\n const { variant } = useKitEnv();\n const { IconGlyph } = useKitServices();\n const options = opts(field.options);\n const v = str(value);\n const fits = fitsSegmented(options.map((o) => o.label));\n const layout = field.layout ?? (fits ? \"segmented\" : \"dropdown\");\n const pick = (n: string) => {\n if (!readOnly && n !== v) onChange(n);\n };\n const keys = useRadioKeys(\n options.map((o) => o.value),\n v,\n pick,\n readOnly,\n );\n\n if (layout === \"segmented\" && fits) {\n const icons = optionIcons(options, \"size-3.5\", IconGlyph);\n return (\n <Segmented\n aria-label={field.title}\n value={v}\n onChange={pick}\n items={options.map((o, i) => ({ value: o.value, label: o.label, icon: icons[i], disabled: readOnly }))}\n className=\"w-full [&>button]:min-w-0 [&>button]:flex-1\"\n />\n );\n }\n if (layout === \"radio\")\n return (\n <div role=\"radiogroup\" id={id} aria-label={field.title} className=\"flex flex-col gap-0.5\">\n {options.map((o, i) => (\n <button\n key={o.value}\n type=\"button\"\n role=\"radio\"\n data-choice-value={o.value}\n aria-checked={o.value === v}\n tabIndex={keys.tabIndexOf(o.value)}\n disabled={readOnly}\n onClick={() => pick(o.value)}\n onKeyDown={(e) => keys.onKeyDown(e, i)}\n className=\"flex items-start gap-2.5 rounded-kit-md px-1.5 py-1.5 text-left hover:bg-kit-hover\"\n >\n <span className={cn(\"mt-0.5 flex size-4 shrink-0 items-center justify-center rounded-full border transition-colors\", o.value === v ? \"border-kit-accent\" : \"border-kit-line-strong\")}>\n {o.value === v ? <span className=\"size-2 rounded-full bg-kit-accent\" /> : null}\n </span>\n <span className=\"min-w-0\">\n <span className=\"block text-kit-sm text-kit-fg\">{o.label}</span>\n {o.description ? <span className=\"block text-kit-xs text-kit-fg-3\">{o.description}</span> : null}\n </span>\n </button>\n ))}\n </div>\n );\n if (layout === \"cards\" || layout === \"grid\") {\n const icons = optionIcons(options, \"size-4\", IconGlyph);\n return (\n <div role=\"radiogroup\" id={id} aria-label={field.title} className={cn(\"grid gap-1.5\", variant === \"document\" ? \"grid-cols-3\" : \"grid-cols-2\")}>\n {options.map((o, i) => {\n const on = o.value === v;\n return (\n <button\n key={o.value}\n type=\"button\"\n role=\"radio\"\n data-choice-value={o.value}\n aria-checked={on}\n tabIndex={keys.tabIndexOf(o.value)}\n disabled={readOnly}\n onClick={() => pick(o.value)}\n onKeyDown={(e) => keys.onKeyDown(e, i)}\n className={cn(\n \"relative flex flex-col items-start gap-1.5 rounded-kit-lg border p-2.5 text-left transition-[border-color,box-shadow] duration-150 focus-visible:outline-offset-[-2px]\",\n on ? \"border-[var(--kit-emphasis-line)] bg-kit-control-bg shadow-kit-xs\" : \"border-kit-line hover:border-kit-line-strong\",\n )}\n >\n {icons[i] ? <span className={cn(\"[&_svg]:size-4\", on ? \"text-kit-fg\" : \"text-kit-fg-3\")}>{icons[i]}</span> : null}\n <span className=\"text-kit-sm font-medium text-kit-fg\">{o.label}</span>\n {o.description ? <span className=\"text-kit-xs leading-4 text-kit-fg-3\">{o.description}</span> : null}\n {on ? <IconCheck aria-hidden className=\"absolute right-2 top-2 size-3.5 text-kit-fg\" stroke={2} /> : null}\n </button>\n );\n })}\n </div>\n );\n }\n const icons = optionIcons(options, undefined, IconGlyph);\n return (\n <Select\n id={id}\n aria-label={field.title}\n size={variant === \"document\" ? \"lg\" : \"md\"}\n value={v || undefined}\n disabled={readOnly}\n onValueChange={pick}\n placeholder={field.placeholder ?? \"Select…\"}\n options={options.map((o, i) => ({ value: o.value, label: o.label, description: o.description, icon: icons[i] }))}\n />\n );\n}\n\nexport function MultiSelectControl({ field, value, onChange, readOnly, id }: ControlProps) {\n const list = Array.isArray(value) ? (value as unknown[]).filter((x): x is string => typeof x === \"string\") : [];\n const options = opts(field.options);\n const max = field.validation?.max;\n const full = max != null && list.length >= max;\n const toggle = (o: string) => {\n if (readOnly) return;\n if (list.includes(o)) onChange(list.filter((x) => x !== o));\n else if (!full) onChange([...list, o]);\n };\n const label = (val: string) => options.find((o) => o.value === val)?.label ?? val;\n /* V2 draws the control bare; the limit line (ours: say why the next pick is refused) wraps it only while it shows */\n const withLimit = (body: React.ReactElement) =>\n full && !readOnly ? (\n <div className=\"flex flex-col gap-1\">\n {body}\n <LimitLine max={max!} />\n </div>\n ) : (\n body\n );\n if (field.layout === \"checkbox\" || field.layout === \"list\")\n return withLimit(\n <>\n <div id={id} role=\"group\" aria-label={field.title} className=\"flex flex-col gap-0.5\">\n {options.map((o) => {\n const on = list.includes(o.value);\n return (\n <label key={o.value} className={cn(\"flex items-center gap-2.5 rounded-kit-md px-1.5 py-1.5\", !on && full ? \"cursor-not-allowed\" : \"cursor-pointer hover:bg-kit-hover\")}>\n <Checkbox checked={on} disabled={readOnly || (!on && full)} onCheckedChange={() => toggle(o.value)} />\n <span className=\"text-kit-sm text-kit-fg\">{o.label}</span>\n </label>\n );\n })}\n </div>\n </>,\n );\n return withLimit(\n <>\n <Popover>\n {/* read-only there is no trigger to carry the field id, so the chip row is the named group */}\n <div\n id={readOnly ? id : undefined}\n role={readOnly ? \"group\" : undefined}\n aria-label={readOnly ? field.title : undefined}\n className=\"flex min-h-8 flex-wrap items-center gap-1 rounded-kit-md border border-kit-line-strong bg-kit-field-bg p-1 transition-colors hover:border-kit-line-strong\">\n {list.map((o) => (\n <span key={o} className=\"inline-flex h-6 items-center gap-1 rounded-kit-md border border-kit-line bg-kit-control-bg pl-2 pr-1 text-kit-sm text-kit-fg shadow-kit-xs\">\n {label(o)}\n {readOnly ? null : (\n <button type=\"button\" aria-label={`Remove ${label(o)}`} onClick={() => toggle(o)} className=\"flex rounded-kit-md p-0.5 text-kit-fg-3 hover:bg-kit-hover hover:text-kit-fg\">\n <IconX className=\"size-3\" stroke={1.5} />\n </button>\n )}\n </span>\n ))}\n {readOnly ? null : (\n <PopoverTrigger id={id} className=\"inline-flex h-6 items-center gap-1 rounded-kit-md px-1.5 text-kit-sm text-kit-fg-3 hover:bg-kit-hover hover:text-kit-fg\">\n <IconPlus aria-hidden className=\"size-3.5\" stroke={1.5} />\n {list.length ? \"Add\" : field.placeholder ?? \"Choose…\"}\n </PopoverTrigger>\n )}\n </div>\n <PopoverContent className=\"w-60 p-1\">\n <div role=\"group\" aria-label={field.title}>\n {options.map((o) => {\n const on = list.includes(o.value);\n const blocked = !on && full;\n return (\n <button\n key={o.value}\n type=\"button\"\n role=\"checkbox\"\n aria-checked={on}\n disabled={blocked}\n onClick={() => toggle(o.value)}\n className=\"flex h-8 w-full items-center gap-2 rounded-kit-md px-2 text-left text-kit-sm hover:bg-kit-hover disabled:opacity-40 disabled:hover:bg-transparent\"\n >\n <span className={cn(\"flex size-4 items-center justify-center rounded-kit-md border\", on ? \"border-kit-accent bg-kit-accent text-kit-accent-on\" : \"border-kit-line-strong\")}>\n {on ? <IconCheck aria-hidden className=\"size-3\" stroke={3} /> : null}\n </span>\n {o.label}\n </button>\n );\n })}\n </div>\n {full ? <div className=\"px-2 pb-1 pt-1.5\"><LimitLine max={max!} /></div> : null}\n </PopoverContent>\n </Popover>\n </>,\n );\n}\n\n/** Why a typed tag is not added, or null when it is (the backend's own checks, said in words). */\nexport function tagRefusal(tag: string, list: string[]): string | null {\n if (Array.from(tag).length > TAG_VALUE_MAX_LENGTH) return `A tag can be up to ${TAG_VALUE_MAX_LENGTH} characters.`;\n const folded = tag.toLowerCase();\n const twin = list.find((t) => t.trim().toLowerCase() === folded);\n if (twin !== undefined) return `\"${twin}\" is already a tag.`;\n return null;\n}\n\n/** Chip input. Says so at its limit, and says why a tag was not added, instead of silently dropping it. */\nexport function TagsControl({ field, value, onChange, readOnly, id, onBlur }: ControlProps) {\n const list = Array.isArray(value) ? (value as unknown[]).map((x) => str(x)) : [];\n const [draft, setDraft] = React.useState(\"\");\n const [refusal, setRefusal] = React.useState<string | null>(null);\n const reasonId = React.useId();\n const inputRef = React.useRef<HTMLInputElement>(null);\n useOwnDescription(inputRef, refusal ? reasonId : null);\n const max = field.validation?.max;\n const full = max != null && list.length >= max;\n const add = () => {\n const t = draft.trim().replace(/,$/, \"\").trim();\n if (!t || full) {\n setDraft(\"\");\n setRefusal(null);\n return;\n }\n const why = tagRefusal(t, list);\n if (why) {\n // keep the text so it can be fixed; the reason reads under the box\n setRefusal(why);\n return;\n }\n onChange([...list, t]);\n setDraft(\"\");\n setRefusal(null);\n };\n return (\n <div className=\"flex flex-col gap-1\">\n <div className=\"flex min-h-8 flex-wrap items-center gap-1 rounded-kit-md border border-kit-line-strong bg-kit-field-bg p-1 transition-colors focus-within:border-kit-line-strong focus-within:bg-kit-field-bg hover:border-kit-line-strong\">\n {list.map((t, i) => (\n <span key={`${t}-${i}`} className=\"inline-flex h-6 items-center gap-1 rounded-kit-md bg-kit-selected pl-2 pr-1 text-kit-sm text-kit-fg\">\n {t}\n {readOnly ? null : (\n <button type=\"button\" aria-label={`Remove ${t}`} onClick={() => onChange(list.filter((_, j) => j !== i))} className=\"flex rounded-kit-md p-0.5 text-kit-fg-3 hover:bg-kit-hover hover:text-kit-fg\">\n <IconX className=\"size-3\" stroke={1.5} />\n </button>\n )}\n </span>\n ))}\n {readOnly ? null : (\n <input\n ref={inputRef}\n id={id}\n value={draft}\n disabled={full}\n onChange={(e) => {\n setDraft(e.target.value);\n if (refusal) setRefusal(null);\n }}\n onBlur={() => {\n add();\n onBlur?.();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \",\") {\n e.preventDefault();\n add();\n } else if (e.key === \"Backspace\" && !draft && list.length) onChange(list.slice(0, -1));\n }}\n placeholder={full ? \"\" : list.length ? \"Add…\" : field.placeholder ?? (shortcutHintsOn() ? \"Type and press Enter\" : \"Add…\")}\n className=\"h-6 min-w-20 flex-1 bg-transparent px-1.5 text-kit-sm text-kit-fg outline-none placeholder:text-kit-fg-3\"\n />\n )}\n </div>\n {refusal && !readOnly ? (\n <span id={reasonId} role=\"status\" aria-live=\"polite\" className=\"px-0.5 text-kit-xs text-kit-fg-3\">\n {refusal}\n </span>\n ) : null}\n {full && !readOnly ? <LimitLine max={max!} /> : null}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { CodeControl } from "./code.js";
|
|
2
|
+
import { CONTROLS } from "../engine/kit-field.js";
|
|
3
|
+
//#region src/kit/controls/code-register.ts
|
|
4
|
+
/** Lane C3: the code field in the engine's dispatch table (one line per type; merge with other lanes by line). */
|
|
5
|
+
CONTROLS.code = CodeControl;
|
|
6
|
+
//#endregion
|
|
7
|
+
|
|
8
|
+
//# sourceMappingURL=code-register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-register.js","names":[],"sources":["../../src/kit/controls/code-register.ts"],"sourcesContent":["/** Lane C3: the code field in the engine's dispatch table (one line per type; merge with other lanes by line). */\nimport { CONTROLS } from \"../engine/kit-field\";\nimport { CodeControl } from \"./code\";\n\nCONTROLS.code = CodeControl;\n"],"mappings":";;;;AAIA,SAAS,OAAO"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { ControlProps } from "../types";
|
|
2
|
+
/** Why a JSON text does not parse ("" when it does, or is empty). */
|
|
3
|
+
export declare function jsonProblem(text: string): string;
|
|
4
|
+
export interface CodeSurfaceProps {
|
|
5
|
+
/** "json": the JSON header, Format and the parse footer. "code": the language list. */
|
|
6
|
+
kind: "json" | "code";
|
|
7
|
+
value: string;
|
|
8
|
+
onChange: (v: string) => void;
|
|
9
|
+
/** code: the language shown in the header ("" = none) and what picking one does; absent = no list */
|
|
10
|
+
language?: string;
|
|
11
|
+
onLanguage?: (language: string) => void;
|
|
12
|
+
/** code: the only languages the field allows (its config.languages); absent = the built-in list */
|
|
13
|
+
languages?: string[];
|
|
14
|
+
readOnly?: boolean;
|
|
15
|
+
id?: string;
|
|
16
|
+
invalid?: boolean;
|
|
17
|
+
minRows?: number;
|
|
18
|
+
label?: string;
|
|
19
|
+
describedBy?: string;
|
|
20
|
+
}
|
|
21
|
+
export declare function CodeSurface({ kind, value, onChange, language, onLanguage, languages, readOnly, id, invalid, minRows, label, describedBy }: CodeSurfaceProps): import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
export declare function CodeDialogField({ kind, title, description, text, readOnly, id, invalid, language, languages, onDone, }: {
|
|
23
|
+
kind: "json" | "code";
|
|
24
|
+
title: string;
|
|
25
|
+
description?: string;
|
|
26
|
+
text: string;
|
|
27
|
+
readOnly?: boolean;
|
|
28
|
+
id: string;
|
|
29
|
+
invalid?: boolean;
|
|
30
|
+
language?: string;
|
|
31
|
+
languages?: string[];
|
|
32
|
+
/** commit the draft; returns the reason it can't be saved, or null when saved */
|
|
33
|
+
onDone: (draft: string, language: string | undefined) => string | null;
|
|
34
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
35
|
+
export declare function CodeControl({ field, value, onChange, readOnly, id, invalid }: ControlProps): import("react/jsx-runtime").JSX.Element;
|
|
36
|
+
/** A stored value the control cannot read: named, shown, kept as it is (never replaced by a stray edit). */
|
|
37
|
+
export declare function UnreadableValue({ id, title, kind, value }: {
|
|
38
|
+
id: string;
|
|
39
|
+
title: string;
|
|
40
|
+
kind: string;
|
|
41
|
+
value: unknown;
|
|
42
|
+
}): import("react/jsx-runtime").JSX.Element;
|