ics-ui-kit 0.1.12 → 0.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -36
- package/dist/AlertContext-CxjW1LVL.js.map +1 -1
- package/dist/{AlertIcon-5B6AgZpe.js → AlertIcon-BphnEYvV.js} +3 -3
- package/dist/AlertIcon-BphnEYvV.js.map +1 -0
- package/dist/Button-Dg89xRSi.js.map +1 -1
- package/dist/ButtonBase-e6qyv6mD.js.map +1 -1
- package/dist/{CheckboxField-cX09-eBX.js → CheckboxField-2zNFubvm.js} +2 -2
- package/dist/CheckboxField-2zNFubvm.js.map +1 -0
- package/dist/Combination-DeIugdgY.js +353 -0
- package/dist/Combination-DeIugdgY.js.map +1 -0
- package/dist/{Command-ClIm4U7r.js → Command-D5zgJ7-y.js} +3 -3
- package/dist/Command-D5zgJ7-y.js.map +1 -0
- package/dist/ComponentVariantProvider-brk0g-hm.js.map +1 -1
- package/dist/Description-BTPMlTT-.js.map +1 -1
- package/dist/{Dialog-Bs1B5Iu8.js → Dialog-CdnsGyJD.js} +3 -3
- package/dist/Dialog-CdnsGyJD.js.map +1 -0
- package/dist/Divider-DPW5ZhZ8.js.map +1 -1
- package/dist/EmptyState-DRKjscH-.js.map +1 -1
- package/dist/ErrorState-B26k67-z.js.map +1 -1
- package/dist/FeatureIcon-BGE0Orkc.js.map +1 -1
- package/dist/Field-CP_-li9L.js +90 -0
- package/dist/Field-CP_-li9L.js.map +1 -0
- package/dist/{FieldLabel-QJ4rJFOi.js → FieldLabel-eyKmeWRn.js} +2 -2
- package/dist/FieldLabel-eyKmeWRn.js.map +1 -0
- package/dist/FolderSvg-cw0DxNVy.js.map +1 -1
- package/dist/{FormFooterTemplate-DPB6Dkxn.js → FormFooterTemplate-Cfn5Nmge.js} +3 -3
- package/dist/FormFooterTemplate-Cfn5Nmge.js.map +1 -0
- package/dist/FormHeader--F6b2aRk.js.map +1 -1
- package/dist/{FormStack-DO15vBgd.js → FormStack-Cc_ELdWL.js} +3 -3
- package/dist/FormStack-Cc_ELdWL.js.map +1 -0
- package/dist/HintState-BxrCAWqq.js.map +1 -1
- package/dist/Icon-DH3ev9GK.js.map +1 -1
- package/dist/IconButton-DwkpNgn3.js.map +1 -1
- package/dist/{IconTooltip-CKJKGHbk.js → IconTooltip-RSxvnBgH.js} +2 -2
- package/dist/IconTooltip-RSxvnBgH.js.map +1 -0
- package/dist/Indicator-AqxHWPA9.js.map +1 -1
- package/dist/InputGroup-BvD9Igmt.js.map +1 -1
- package/dist/InputOTP-B2e1nfSO.js.map +1 -1
- package/dist/Loader-BpHiL6W-.js.map +1 -1
- package/dist/MenuItem-d19Ty84F.js.map +1 -1
- package/dist/MenuItemShortcut-D1faeIXp.js.map +1 -1
- package/dist/MenuItemText-CRpaPbvg.js.map +1 -1
- package/dist/Overlay-CVt011mY.js.map +1 -1
- package/dist/{Popover-CY_d3Ggn.js → Popover-CRVD7AtB.js} +20 -19
- package/dist/Popover-CRVD7AtB.js.map +1 -0
- package/dist/RichButton-DuPTenmS.js.map +1 -1
- package/dist/ScrollArea-CuuTeDn3.js.map +1 -1
- package/dist/ScrollShadowContainer-DdrnF8qU.js.map +1 -1
- package/dist/{SearchSelectTag-DFCX9zT1.js → SearchSelectTag-CA7Ie3Nx.js} +2 -2
- package/dist/SearchSelectTag-CA7Ie3Nx.js.map +1 -0
- package/dist/{Select-B2WcoFf5.js → Select-MLPTpIl5.js} +24 -23
- package/dist/Select-MLPTpIl5.js.map +1 -0
- package/dist/{Sheet-zTMuP7C8.js → Sheet-qTIXsqm0.js} +3 -3
- package/dist/Sheet-qTIXsqm0.js.map +1 -0
- package/dist/Shortcut-D8L15_ed.js.map +1 -1
- package/dist/Skeleton-y6I-i9q5.js.map +1 -1
- package/dist/TableFillHandle-C_yvCTSl.js +65 -0
- package/dist/TableFillHandle-C_yvCTSl.js.map +1 -0
- package/dist/Tag-DdHXTyKF.js.map +1 -1
- package/dist/Text-DeBE8AKl.js.map +1 -1
- package/dist/TextInput-Cj50ImXi.js.map +1 -1
- package/dist/{TextOverflowTooltip-DlUgic5y.js → TextOverflowTooltip-B1I5qwAT.js} +2 -2
- package/dist/TextOverflowTooltip-B1I5qwAT.js.map +1 -0
- package/dist/Toggle-v_HT3Gm2.js.map +1 -1
- package/dist/{Tooltip-C4rVuWr4.js → Tooltip-7Duaau0S.js} +3 -3
- package/dist/Tooltip-7Duaau0S.js.map +1 -0
- package/dist/TriggerButton-CfDObWP9.js.map +1 -1
- package/dist/blocks/auth/otp-form.js +1 -1
- package/dist/blocks/auth/otp-form.js.map +1 -1
- package/dist/circle-BbEzypQJ.js +14 -0
- package/dist/circle-BbEzypQJ.js.map +1 -0
- package/dist/cn-dsXlqdJg.js.map +1 -1
- package/dist/components/alert/Alert.d.ts +4 -0
- package/dist/components/alert/Alert.stories.d.ts +1 -0
- package/dist/components/alert-dialog.js +3 -3
- package/dist/components/alert-dialog.js.map +1 -1
- package/dist/components/alert.js +18 -18
- package/dist/components/alert.js.map +1 -1
- package/dist/components/avatar.js.map +1 -1
- package/dist/components/background-pattern.js.map +1 -1
- package/dist/components/badge.js.map +1 -1
- package/dist/components/banner.js.map +1 -1
- package/dist/components/breadcrumb.js.map +1 -1
- package/dist/components/button.js.map +1 -1
- package/dist/components/calendar.js.map +1 -1
- package/dist/components/card.js +1 -1
- package/dist/components/card.js.map +1 -1
- package/dist/components/carousel.js.map +1 -1
- package/dist/components/checkbox.js +1 -1
- package/dist/components/collapsible.js.map +1 -1
- package/dist/components/color-tile.js.map +1 -1
- package/dist/components/command/Command.stories.d.ts +1 -0
- package/dist/components/command.js +1 -1
- package/dist/components/container.js.map +1 -1
- package/dist/components/context-menu/ContextMenu.d.ts +27 -0
- package/dist/components/context-menu/ContextMenu.stories.d.ts +10 -0
- package/dist/components/context-menu/index.d.ts +1 -0
- package/dist/components/context-menu.d.ts +2 -0
- package/dist/components/context-menu.js +2675 -0
- package/dist/components/context-menu.js.map +1 -0
- package/dist/components/counter.js.map +1 -1
- package/dist/components/dialog.js +3 -3
- package/dist/components/dialog.js.map +1 -1
- package/dist/components/divider.js.map +1 -1
- package/dist/components/drawer.js +3 -3
- package/dist/components/drawer.js.map +1 -1
- package/dist/components/dropdown.js +26 -25
- package/dist/components/dropdown.js.map +1 -1
- package/dist/components/error-state.js.map +1 -1
- package/dist/components/field/Field.d.ts +4 -0
- package/dist/components/field/Field.stories.d.ts +1 -0
- package/dist/components/field.js +1 -1
- package/dist/components/file-upload.js +2 -2
- package/dist/components/file-upload.js.map +1 -1
- package/dist/components/form.js +3 -3
- package/dist/components/form.js.map +1 -1
- package/dist/components/glass-toolbar.js.map +1 -1
- package/dist/components/icon-tooltip.js +1 -1
- package/dist/components/image-placeholder.js.map +1 -1
- package/dist/components/image-preview.js.map +1 -1
- package/dist/components/image-uploader.js.map +1 -1
- package/dist/components/input.js.map +1 -1
- package/dist/components/label.js +1 -1
- package/dist/components/menu-item.js.map +1 -1
- package/dist/components/overflow-tooltip.js +1 -1
- package/dist/components/page-state.js.map +1 -1
- package/dist/components/popover.js +1 -1
- package/dist/components/portal-container.js +2 -2
- package/dist/components/portal-container.js.map +1 -1
- package/dist/components/progress-circle.js.map +1 -1
- package/dist/components/progress.js.map +1 -1
- package/dist/components/prose.js.map +1 -1
- package/dist/components/radio-group.js +63 -72
- package/dist/components/radio-group.js.map +1 -1
- package/dist/components/resizable.js.map +1 -1
- package/dist/components/scheduler.js +1 -1
- package/dist/components/scheduler.js.map +1 -1
- package/dist/components/search-select.js +4 -4
- package/dist/components/search-select.js.map +1 -1
- package/dist/components/select.js +1 -1
- package/dist/components/sheet.js +1 -1
- package/dist/components/sidebar.js +206 -212
- package/dist/components/sidebar.js.map +1 -1
- package/dist/components/slider.js.map +1 -1
- package/dist/components/stepper.js.map +1 -1
- package/dist/components/switch/Switch.d.ts +1 -1
- package/dist/components/switch.js +5 -2
- package/dist/components/switch.js.map +1 -1
- package/dist/components/system-state.js +1 -1
- package/dist/components/system-state.js.map +1 -1
- package/dist/components/table/Table.d.ts +109 -5
- package/dist/components/table/Table.stories.d.ts +285 -9
- package/dist/components/table/column-reorder/index.d.ts +1 -0
- package/dist/components/table/column-reorder/useColumnReorder.d.ts +82 -0
- package/dist/components/table/column-reorder.d.ts +2 -0
- package/dist/components/table/column-reorder.js +6 -0
- package/dist/components/table/column-reorder.js.map +1 -0
- package/dist/components/table/column-resize/columnAutoFit.d.ts +21 -0
- package/dist/components/table/column-resize/columnResizeSession.d.ts +9 -0
- package/dist/components/table/column-resize/index.d.ts +3 -0
- package/dist/components/table/column-resize/useColumnResize.d.ts +52 -0
- package/dist/components/table/column-resize.d.ts +2 -0
- package/dist/components/table/column-resize.js +7 -0
- package/dist/components/table/column-resize.js.map +1 -0
- package/dist/components/table/editable/TableFillHandle.d.ts +23 -0
- package/dist/components/table/editable/cellRange.d.ts +83 -0
- package/dist/components/table/editable/editableCell.d.ts +90 -0
- package/dist/components/table/editable/index.d.ts +3 -0
- package/dist/components/table/editable.d.ts +2 -0
- package/dist/components/table/editable.js +12 -0
- package/dist/components/table/editable.js.map +1 -0
- package/dist/components/table/index.d.ts +8 -1
- package/dist/components/table/opaqueCell.d.ts +47 -0
- package/dist/components/table/rowTint.d.ts +60 -0
- package/dist/components/table/sticky/index.d.ts +1 -0
- package/dist/components/table/sticky/stickyCell.d.ts +105 -0
- package/dist/components/table/sticky.d.ts +2 -0
- package/dist/components/table/sticky.js +22 -0
- package/dist/components/table/sticky.js.map +1 -0
- package/dist/components/table/tableStoryData.d.ts +84 -0
- package/dist/components/table/tableStoryParts.d.ts +72 -0
- package/dist/components/table/tree/TableTree.d.ts +106 -0
- package/dist/components/table/tree/index.d.ts +3 -0
- package/dist/components/table/tree/treeGeometry.d.ts +86 -0
- package/dist/components/table/tree/treeModel.d.ts +87 -0
- package/dist/components/table/tree.d.ts +2 -0
- package/dist/components/table/tree.js +19 -0
- package/dist/components/table/tree.js.map +1 -0
- package/dist/components/table.js +52 -79
- package/dist/components/table.js.map +1 -1
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/tag-input.js +2 -2
- package/dist/components/tag-input.js.map +1 -1
- package/dist/components/textarea.js.map +1 -1
- package/dist/components/timer.js.map +1 -1
- package/dist/components/toast.js.map +1 -1
- package/dist/components/toggle-group.js.map +1 -1
- package/dist/components/toolbar.js +1 -2
- package/dist/components/toolbar.js.map +1 -1
- package/dist/components/tooltip.js +1 -1
- package/dist/floating-ui.react-dom-BwDfy92G.js +1309 -0
- package/dist/floating-ui.react-dom-BwDfy92G.js.map +1 -0
- package/dist/formatBytes-C4QXq5lC.js.map +1 -1
- package/dist/hooks.js +1 -1
- package/dist/index-0ioNhtNM.js.map +1 -1
- package/dist/index-1SnkxfPR.js +230 -0
- package/dist/index-1SnkxfPR.js.map +1 -0
- package/dist/index-437EL2iq.js.map +1 -1
- package/dist/index-BDrapWDv.js.map +1 -1
- package/dist/index-BGQepRFJ.js.map +1 -1
- package/dist/index-BVqs-uqP.js.map +1 -1
- package/dist/index-BZPx6jYI.js.map +1 -1
- package/dist/index-Bb23HztA.js.map +1 -1
- package/dist/index-BjtNfqNq.js +333 -0
- package/dist/index-BjtNfqNq.js.map +1 -0
- package/dist/index-BpWB3aFK.js.map +1 -1
- package/dist/index-ByaXH_ih.js.map +1 -1
- package/dist/index-CCKe-Mpx.js.map +1 -1
- package/dist/index-CFaU3UXv.js.map +1 -1
- package/dist/index-CLuiUUQ8.js.map +1 -1
- package/dist/{index-CQD-Njgt.js → index-CMxHunQ4.js} +26 -25
- package/dist/index-CMxHunQ4.js.map +1 -0
- package/dist/index-CmBeyp2d.js.map +1 -1
- package/dist/index-DFZozV_h.js.map +1 -1
- package/dist/index-DHsfW5Rj.js.map +1 -1
- package/dist/index-DHyZ_0Ut.js.map +1 -1
- package/dist/index-DLcqcWxM.js.map +1 -1
- package/dist/index-DnnQs07z.js.map +1 -1
- package/dist/index-Uiy0Xwy2.js.map +1 -1
- package/dist/index-_ITz1IyW.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/inputBaseStyles-DbzD_jvq.js.map +1 -1
- package/dist/lib/utils/dom.d.ts +72 -0
- package/dist/lib/utils/styles.d.ts +1 -0
- package/dist/lib/utils.js.map +1 -1
- package/dist/opaqueCell-SGaiyL54.js +31 -0
- package/dist/opaqueCell-SGaiyL54.js.map +1 -0
- package/dist/plus-BpxYPnAG.js +15 -0
- package/dist/plus-BpxYPnAG.js.map +1 -0
- package/dist/styles-scoped.css +6684 -6413
- package/dist/styles.css +6423 -6152
- package/dist/theme.css +364 -362
- package/dist/treeModel-BlPWVj4W.js +319 -0
- package/dist/treeModel-BlPWVj4W.js.map +1 -0
- package/dist/types/css.d.ts +4 -4
- package/dist/useBreakpoints-DHvp74UL.js +31 -0
- package/dist/useBreakpoints-DHvp74UL.js.map +1 -0
- package/dist/useColumnReorder-BxVZQ_Y5.js +119 -0
- package/dist/useColumnReorder-BxVZQ_Y5.js.map +1 -0
- package/dist/useColumnResize-wjfEyBBg.js +130 -0
- package/dist/useColumnResize-wjfEyBBg.js.map +1 -0
- package/dist/useDebounce-BRah78CF.js.map +1 -1
- package/dist/useFileUpload-Bnl3P8mP.js.map +1 -1
- package/dist/useItemsKeyboardNavigation-CmeOR30y.js.map +1 -1
- package/dist/useMergeRefs-qoKniYqT.js.map +1 -1
- package/dist/usePortalContainer-BAIp0kSF.js +44 -0
- package/dist/usePortalContainer-BAIp0kSF.js.map +1 -0
- package/dist/vendors/date-fns/index.d.ts +7 -14
- package/dist/vendors/date-fns/locale/en-US/index.d.ts +4 -0
- package/dist/vendors/date-fns/locale/ru/index.d.ts +4 -0
- package/dist/vendors/react-day-picker/index.d.ts +8 -17
- package/dist/vendors/react-hook-form/index.d.ts +8 -15
- package/dist/vendors/tanstack/react-table/index.d.ts +12 -0
- package/dist/vendors/tanstack/react-table.js.map +1 -1
- package/dist/vendors/zod/index.d.ts +8 -9
- package/dist/zod-BMNoK3aM.js.map +1 -1
- package/package.json +207 -205
- package/tailwind.preset.js +452 -448
- package/dist/AlertIcon-5B6AgZpe.js.map +0 -1
- package/dist/CheckboxField-cX09-eBX.js.map +0 -1
- package/dist/Command-ClIm4U7r.js.map +0 -1
- package/dist/Dialog-Bs1B5Iu8.js.map +0 -1
- package/dist/Field-BiIWtq9o.js +0 -86
- package/dist/Field-BiIWtq9o.js.map +0 -1
- package/dist/FieldLabel-QJ4rJFOi.js.map +0 -1
- package/dist/FormFooterTemplate-DPB6Dkxn.js.map +0 -1
- package/dist/FormStack-DO15vBgd.js.map +0 -1
- package/dist/IconTooltip-CKJKGHbk.js.map +0 -1
- package/dist/Popover-CY_d3Ggn.js.map +0 -1
- package/dist/SearchSelectTag-DFCX9zT1.js.map +0 -1
- package/dist/Select-B2WcoFf5.js.map +0 -1
- package/dist/Sheet-zTMuP7C8.js.map +0 -1
- package/dist/TextOverflowTooltip-DlUgic5y.js.map +0 -1
- package/dist/Tooltip-C4rVuWr4.js.map +0 -1
- package/dist/components/data-table/DataTable.stories.d.ts +0 -8
- package/dist/design-tokens.source.json +0 -1
- package/dist/index-BzCriPiK.js +0 -671
- package/dist/index-BzCriPiK.js.map +0 -1
- package/dist/index-CQD-Njgt.js.map +0 -1
- package/dist/index-DRo26PBK.js +0 -1525
- package/dist/index-DRo26PBK.js.map +0 -1
- package/dist/useBreakpoints-D8wKOvil.js +0 -103
- package/dist/useBreakpoints-D8wKOvil.js.map +0 -1
- package/dist/usePortalContainer-ae6EzS08.js +0 -39
- package/dist/usePortalContainer-ae6EzS08.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"switch.js","sources":["../../node_modules/.pnpm/@radix-ui+react-switch@1.2._f3fb04ca0cb9718d2dd2dba40e11ef1d/node_modules/@radix-ui/react-switch/dist/index.mjs","../../src/components/switch/Switch.tsx","../../src/components/switch/switch-field/SwitchField.tsx"],"sourcesContent":["\"use client\";\n\n// src/switch.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProvider, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nvar Switch = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSwitch,\n name,\n checked: checkedProp,\n defaultChecked,\n required,\n disabled,\n value = \"on\",\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n const [button, setButton] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = button ? form || !!button.closest(\"form\") : true;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: SWITCH_NAME\n });\n return /* @__PURE__ */ jsxs(SwitchProvider, { scope: __scopeSwitch, checked, disabled, children: [\n /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"switch\",\n \"aria-checked\": checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...switchProps,\n ref: composedRefs,\n onClick: composeEventHandlers(props.onClick, (event) => {\n setChecked((prevChecked) => !prevChecked);\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n SwitchBubbleInput,\n {\n control: button,\n bubbles: !hasConsumerStoppedPropagationRef.current,\n name,\n value,\n checked,\n required,\n disabled,\n form,\n style: { transform: \"translateX(-100%)\" }\n }\n )\n ] });\n }\n);\nSwitch.displayName = SWITCH_NAME;\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...thumbProps,\n ref: forwardedRef\n }\n );\n }\n);\nSwitchThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SwitchBubbleInput\";\nvar SwitchBubbleInput = React.forwardRef(\n ({\n __scopeSwitch,\n control,\n checked,\n bubbles = true,\n ...props\n }, forwardedRef) => {\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(ref, forwardedRef);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = ref.current;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n return /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: checked,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0\n }\n }\n );\n }\n);\nSwitchBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\nvar Root = Switch;\nvar Thumb = SwitchThumb;\nexport {\n Root,\n Switch,\n SwitchThumb,\n Thumb,\n createSwitchScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\";\r\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\";\r\nimport { tv } from \"tailwind-variants\";\r\nimport { VariantsConfig } from \"@/lib/utils/variants\";\r\nimport { narrowVariant, useComponentVariant } from \"@/providers/component-variant-context\";\r\n\r\nexport interface SwitchVariants {\r\n\tsize?: \"xs\" | \"sm\" | \"md\";\r\n\ttheme?: \"inverse\";\r\n}\r\n\r\n/**\r\n * Варианты стилей для компонента Switch\r\n */\r\nconst switchStyles = tv({\r\n\tslots: {\r\n\t\troot: [\r\n\t\t\t\"peer relative inline-flex shrink-0 cursor-pointer items-center rounded-full\",\r\n\t\t\t\"transition-colors\",\r\n\t\t\t\"focus-visible:border-tertiary-accent focus-visible:shadow-focus focus-visible:outline-none\",\r\n\t\t\t\"disabled:cursor-not-allowed disabled:opacity-50\",\r\n\t\t\t\"data-[state=checked]:bg-primary-accent data-[state=unchecked]:bg-secondary-border\",\r\n\t\t\t\"data-[state=checked]:hover:enabled:bg-primary-accent-hover\",\r\n\t\t\t\"data-[state=unchecked]:hover:enabled:bg-primary-border\"\r\n\t\t],\r\n\t\tthumb: \"rounded-full bg-secondary-bg shadow-soft-base transition-transform\"\r\n\t},\r\n\tvariants: {\r\n\t\tsize: {\r\n\t\t\txs: {\r\n\t\t\t\troot: \"h-4 w-7\",\r\n\t\t\t\tthumb: \"h-3 w-3 data-[state=checked]:translate-x-[14px] data-[state=unchecked]:translate-x-0.5\"\r\n\t\t\t},\r\n\t\t\tsm: {\r\n\t\t\t\troot: \"h-5 w-9\",\r\n\t\t\t\tthumb: \"h-4 w-4 data-[state=checked]:translate-x-[18px] data-[state=unchecked]:translate-x-0.5\"\r\n\t\t\t},\r\n\t\t\tmd: {\r\n\t\t\t\troot: \"h-6 w-11\",\r\n\t\t\t\tthumb: \"h-5 w-5 data-[state=checked]:translate-x-[22px] data-[state=unchecked]:translate-x-0.5\"\r\n\t\t\t}\r\n\t\t},\r\n\t\ttheme: {\r\n\t\t\tinverse: {\r\n\t\t\t\troot: [\r\n\t\t\t\t\t\"focus-visible:shadow-inverse-focus\",\r\n\t\t\t\t\t\"data-[state=unchecked]:bg-inverse-active data-[state=unchecked]:hover:enabled:bg-inverse-muted\",\r\n\t\t\t\t\t\"data-[state=checked]:bg-inverse-primary-fg data-[state=checked]:hover:enabled:bg-inverse-secondary-fg\"\r\n\t\t\t\t],\r\n\t\t\t\tthumb: \"bg-inverse-primary-bg\"\r\n\t\t\t}\r\n\t\t}\r\n\t} satisfies VariantsConfig<SwitchVariants>,\r\n\tdefaultVariants: {\r\n\t\tsize: \"md\"\r\n\t}\r\n});\r\n\r\nexport type SwitchProps = React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root> & SwitchVariants;\r\n\r\nconst Switch = React.forwardRef<React.ElementRef<typeof SwitchPrimitives.Root>, SwitchProps>(\r\n\t({ className, size, ...props }, ref) => {\r\n\t\tconst { variant } = useComponentVariant();\r\n\t\tconst theme = narrowVariant(variant, [\"inverse\"]);\r\n\t\tconst { root, thumb } = switchStyles({ size, theme });\r\n\r\n\t\treturn (\r\n\t\t\t<SwitchPrimitives.Root className={root({ className })} {...props} ref={ref}>\r\n\t\t\t\t<SwitchPrimitives.Thumb className={thumb()} />\r\n\t\t\t</SwitchPrimitives.Root>\r\n\t\t);\r\n\t}\r\n);\r\nSwitch.displayName = SwitchPrimitives.Root.displayName;\r\n\r\nexport { Switch };\r\n","import * as SwitchPrimitives from \"@radix-ui/react-checkbox\";\r\nimport { tv } from \"tailwind-variants\";\r\nimport React, { useId } from \"react\";\r\nimport { FieldLabel } from \"@/components/label\";\r\nimport { Description } from \"@/components/description\";\r\nimport { Switch, SwitchProps } from \"../Switch\";\r\nimport { VariantsConfig } from \"@/lib/utils/variants\";\r\n\r\nexport interface SwitchFieldVariants {\r\n\toutline?: boolean;\r\n\talignment?: \"left\" | \"right\";\r\n\tdisabled?: boolean;\r\n\terror?: boolean;\r\n}\r\n\r\nconst switchFieldStyles = tv({\r\n\tslots: {\r\n\t\tcontainer: \"flex cursor-pointer items-center gap-3\",\r\n\t\ttextContainer: \"flex flex-col gap-1\",\r\n\t\tlabelWrapper: \"flex h-4 items-center\",\r\n\t\tlabel: \"cursor-pointer\"\r\n\t},\r\n\tvariants: {\r\n\t\toutline: {\r\n\t\t\ttrue: {\r\n\t\t\t\tcontainer: \"rounded-lg border border-secondary-border p-3 px-4\"\r\n\t\t\t}\r\n\t\t},\r\n\t\tdisabled: {\r\n\t\t\ttrue: {\r\n\t\t\t\tcontainer: \"cursor-default\",\r\n\t\t\t\ttextContainer: \"opacity-50\",\r\n\t\t\t\tlabel: \"cursor-default text-primary-fg\",\r\n\t\t\t\tdescription: \"text-muted\"\r\n\t\t\t}\r\n\t\t},\r\n\t\terror: {\r\n\t\t\ttrue: {\r\n\t\t\t\tlabel: \"text-status-error\"\r\n\t\t\t}\r\n\t\t},\r\n\t\talignment: {\r\n\t\t\tleft: {},\r\n\t\t\tright: {\r\n\t\t\t\tcontainer: \"flex-row-reverse space-x-reverse\"\r\n\t\t\t}\r\n\t\t},\r\n\t\twithDescription: { true: { container: \"items-start\" } }\r\n\t} satisfies VariantsConfig<SwitchFieldVariants & { withDescription?: boolean }>,\r\n\tdefaultVariants: {\r\n\t\talignment: \"left\"\r\n\t}\r\n});\r\n\r\ntype SwitchFieldProps = SwitchProps &\r\n\tSwitchFieldVariants & {\r\n\t\tlabel?: string | React.ReactNode;\r\n\t\tdescription?: string;\r\n\t};\r\n\r\nconst SwitchField = React.forwardRef<React.ElementRef<typeof SwitchPrimitives.Root>, SwitchFieldProps>(\r\n\t({ className, id, label, alignment: alignment, error, disabled, outline, description, ...props }, ref) => {\r\n\t\tconst {\r\n\t\t\tcontainer,\r\n\t\t\ttextContainer,\r\n\t\t\tlabel: labelStyles,\r\n\t\t\tlabelWrapper\r\n\t\t} = switchFieldStyles({ alignment, error, disabled, outline, withDescription: !!description });\r\n\r\n\t\tconst generatedId = useId();\r\n\t\tconst switchId = id || `switch-${generatedId}`;\r\n\r\n\t\treturn (\r\n\t\t\t<label htmlFor={switchId} className={container({ class: className })}>\r\n\t\t\t\t<Switch disabled={disabled} id={switchId} {...props} ref={ref} />\r\n\t\t\t\t{(label || description) && (\r\n\t\t\t\t\t<div className={textContainer()}>\r\n\t\t\t\t\t\t{label && (\r\n\t\t\t\t\t\t\t<div className={labelWrapper()}>\r\n\t\t\t\t\t\t\t\t<FieldLabel htmlFor={switchId} className={labelStyles()}>\r\n\t\t\t\t\t\t\t\t\t{label}\r\n\t\t\t\t\t\t\t\t</FieldLabel>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{description && <Description size=\"xs\">{description}</Description>}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t)}\r\n\t\t\t</label>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nSwitchField.displayName = \"SwitchField\";\r\n\r\nexport { SwitchField };\r\n"],"names":["SWITCH_NAME","createSwitchContext","createSwitchScope","createContextScope","SwitchProvider","useSwitchContext","Switch","React","props","forwardedRef","__scopeSwitch","name","checkedProp","defaultChecked","required","disabled","value","onCheckedChange","form","switchProps","button","setButton","composedRefs","useComposedRefs","node","hasConsumerStoppedPropagationRef","isFormControl","checked","setChecked","useControllableState","jsxs","jsx","Primitive","getState","composeEventHandlers","event","prevChecked","SwitchBubbleInput","THUMB_NAME","SwitchThumb","thumbProps","context","BUBBLE_INPUT_NAME","control","bubbles","ref","usePrevious","controlSize","useSize","input","inputProto","Root","Thumb","switchStyles","tv","className","size","variant","useComponentVariant","theme","narrowVariant","root","thumb","SwitchPrimitives.Root","SwitchPrimitives.Thumb","switchFieldStyles","SwitchField","id","label","alignment","error","outline","description","container","textContainer","labelStyles","labelWrapper","generatedId","useId","switchId","FieldLabel","Description"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"switch.js","sources":["../../node_modules/.pnpm/@radix-ui+react-switch@1.2.6_@types+react-dom@18.3.6_@types+react@18.3.20__@types+react_f3fb04ca0cb9718d2dd2dba40e11ef1d/node_modules/@radix-ui/react-switch/dist/index.mjs","../../src/components/switch/Switch.tsx","../../src/components/switch/switch-field/SwitchField.tsx"],"sourcesContent":["\"use client\";\n\n// src/switch.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProvider, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nvar Switch = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSwitch,\n name,\n checked: checkedProp,\n defaultChecked,\n required,\n disabled,\n value = \"on\",\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n const [button, setButton] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = button ? form || !!button.closest(\"form\") : true;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: SWITCH_NAME\n });\n return /* @__PURE__ */ jsxs(SwitchProvider, { scope: __scopeSwitch, checked, disabled, children: [\n /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"switch\",\n \"aria-checked\": checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...switchProps,\n ref: composedRefs,\n onClick: composeEventHandlers(props.onClick, (event) => {\n setChecked((prevChecked) => !prevChecked);\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n SwitchBubbleInput,\n {\n control: button,\n bubbles: !hasConsumerStoppedPropagationRef.current,\n name,\n value,\n checked,\n required,\n disabled,\n form,\n style: { transform: \"translateX(-100%)\" }\n }\n )\n ] });\n }\n);\nSwitch.displayName = SWITCH_NAME;\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...thumbProps,\n ref: forwardedRef\n }\n );\n }\n);\nSwitchThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SwitchBubbleInput\";\nvar SwitchBubbleInput = React.forwardRef(\n ({\n __scopeSwitch,\n control,\n checked,\n bubbles = true,\n ...props\n }, forwardedRef) => {\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(ref, forwardedRef);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = ref.current;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n return /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: checked,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0\n }\n }\n );\n }\n);\nSwitchBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\nvar Root = Switch;\nvar Thumb = SwitchThumb;\nexport {\n Root,\n Switch,\n SwitchThumb,\n Thumb,\n createSwitchScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\";\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\";\nimport { tv } from \"tailwind-variants\";\nimport { VariantsConfig } from \"@/lib/utils/variants\";\nimport { narrowVariant, useComponentVariant } from \"@/providers/component-variant-context\";\n\nexport interface SwitchVariants {\n\tsize?: \"xs\" | \"sm\" | \"md\";\n\ttheme?: \"inverse\" | \"glass\";\n}\n\n/**\n * Варианты стилей для компонента Switch\n */\nconst switchStyles = tv({\n\tslots: {\n\t\troot: [\n\t\t\t\"peer relative inline-flex shrink-0 cursor-pointer items-center rounded-full\",\n\t\t\t\"transition-colors\",\n\t\t\t\"focus-visible:border-tertiary-accent focus-visible:shadow-focus focus-visible:outline-none\",\n\t\t\t\"disabled:cursor-not-allowed disabled:opacity-50\",\n\t\t\t\"data-[state=checked]:bg-primary-accent data-[state=unchecked]:bg-secondary-border\",\n\t\t\t\"data-[state=checked]:hover:enabled:bg-primary-accent-hover\",\n\t\t\t\"data-[state=unchecked]:hover:enabled:bg-primary-border\"\n\t\t],\n\t\tthumb: \"rounded-full bg-secondary-bg shadow-soft-base transition-transform\"\n\t},\n\tvariants: {\n\t\tsize: {\n\t\t\txs: {\n\t\t\t\troot: \"h-4 w-7\",\n\t\t\t\tthumb: \"h-3 w-3 data-[state=checked]:translate-x-[14px] data-[state=unchecked]:translate-x-0.5\"\n\t\t\t},\n\t\t\tsm: {\n\t\t\t\troot: \"h-5 w-9\",\n\t\t\t\tthumb: \"h-4 w-4 data-[state=checked]:translate-x-[18px] data-[state=unchecked]:translate-x-0.5\"\n\t\t\t},\n\t\t\tmd: {\n\t\t\t\troot: \"h-6 w-11\",\n\t\t\t\tthumb: \"h-5 w-5 data-[state=checked]:translate-x-[22px] data-[state=unchecked]:translate-x-0.5\"\n\t\t\t}\n\t\t},\n\t\ttheme: {\n\t\t\tinverse: {\n\t\t\t\troot: [\n\t\t\t\t\t\"focus-visible:shadow-inverse-focus\",\n\t\t\t\t\t\"data-[state=unchecked]:bg-inverse-active data-[state=unchecked]:hover:enabled:bg-inverse-muted\",\n\t\t\t\t\t\"data-[state=checked]:bg-inverse-primary-fg data-[state=checked]:hover:enabled:bg-inverse-secondary-fg\"\n\t\t\t\t],\n\t\t\t\tthumb: \"bg-inverse-primary-bg\"\n\t\t\t},\n\t\t\tglass: {\n\t\t\t\troot: \"data-[state=unchecked]:bg-primary-border\"\n\t\t\t}\n\t\t}\n\t} satisfies VariantsConfig<SwitchVariants>,\n\tdefaultVariants: {\n\t\tsize: \"md\"\n\t}\n});\n\nexport type SwitchProps = React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root> & SwitchVariants;\n\nconst Switch = React.forwardRef<React.ElementRef<typeof SwitchPrimitives.Root>, SwitchProps>(\n\t({ className, size, ...props }, ref) => {\n\t\tconst { variant } = useComponentVariant();\n\t\tconst theme = narrowVariant(variant, [\"inverse\", \"glass\"]);\n\t\tconst { root, thumb } = switchStyles({ size, theme });\n\n\t\treturn (\n\t\t\t<SwitchPrimitives.Root className={root({ className })} {...props} ref={ref}>\n\t\t\t\t<SwitchPrimitives.Thumb className={thumb()} />\n\t\t\t</SwitchPrimitives.Root>\n\t\t);\n\t}\n);\nSwitch.displayName = SwitchPrimitives.Root.displayName;\n\nexport { Switch };\n","import * as SwitchPrimitives from \"@radix-ui/react-checkbox\";\nimport { tv } from \"tailwind-variants\";\nimport React, { useId } from \"react\";\nimport { FieldLabel } from \"@/components/label\";\nimport { Description } from \"@/components/description\";\nimport { Switch, SwitchProps } from \"../Switch\";\nimport { VariantsConfig } from \"@/lib/utils/variants\";\n\nexport interface SwitchFieldVariants {\n\toutline?: boolean;\n\talignment?: \"left\" | \"right\";\n\tdisabled?: boolean;\n\terror?: boolean;\n}\n\nconst switchFieldStyles = tv({\n\tslots: {\n\t\tcontainer: \"flex cursor-pointer items-center gap-3\",\n\t\ttextContainer: \"flex flex-col gap-1\",\n\t\tlabelWrapper: \"flex h-4 items-center\",\n\t\tlabel: \"cursor-pointer\"\n\t},\n\tvariants: {\n\t\toutline: {\n\t\t\ttrue: {\n\t\t\t\tcontainer: \"rounded-lg border border-secondary-border p-3 px-4\"\n\t\t\t}\n\t\t},\n\t\tdisabled: {\n\t\t\ttrue: {\n\t\t\t\tcontainer: \"cursor-default\",\n\t\t\t\ttextContainer: \"opacity-50\",\n\t\t\t\tlabel: \"cursor-default text-primary-fg\",\n\t\t\t\tdescription: \"text-muted\"\n\t\t\t}\n\t\t},\n\t\terror: {\n\t\t\ttrue: {\n\t\t\t\tlabel: \"text-status-error\"\n\t\t\t}\n\t\t},\n\t\talignment: {\n\t\t\tleft: {},\n\t\t\tright: {\n\t\t\t\tcontainer: \"flex-row-reverse space-x-reverse\"\n\t\t\t}\n\t\t},\n\t\twithDescription: { true: { container: \"items-start\" } }\n\t} satisfies VariantsConfig<SwitchFieldVariants & { withDescription?: boolean }>,\n\tdefaultVariants: {\n\t\talignment: \"left\"\n\t}\n});\n\ntype SwitchFieldProps = SwitchProps &\n\tSwitchFieldVariants & {\n\t\tlabel?: string | React.ReactNode;\n\t\tdescription?: string;\n\t};\n\nconst SwitchField = React.forwardRef<React.ElementRef<typeof SwitchPrimitives.Root>, SwitchFieldProps>(\n\t({ className, id, label, alignment: alignment, error, disabled, outline, description, ...props }, ref) => {\n\t\tconst {\n\t\t\tcontainer,\n\t\t\ttextContainer,\n\t\t\tlabel: labelStyles,\n\t\t\tlabelWrapper\n\t\t} = switchFieldStyles({ alignment, error, disabled, outline, withDescription: !!description });\n\n\t\tconst generatedId = useId();\n\t\tconst switchId = id || `switch-${generatedId}`;\n\n\t\treturn (\n\t\t\t<label htmlFor={switchId} className={container({ class: className })}>\n\t\t\t\t<Switch disabled={disabled} id={switchId} {...props} ref={ref} />\n\t\t\t\t{(label || description) && (\n\t\t\t\t\t<div className={textContainer()}>\n\t\t\t\t\t\t{label && (\n\t\t\t\t\t\t\t<div className={labelWrapper()}>\n\t\t\t\t\t\t\t\t<FieldLabel htmlFor={switchId} className={labelStyles()}>\n\t\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t\t</FieldLabel>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{description && <Description size=\"xs\">{description}</Description>}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</label>\n\t\t);\n\t}\n);\n\nSwitchField.displayName = \"SwitchField\";\n\nexport { SwitchField };\n"],"names":["SWITCH_NAME","createSwitchContext","createSwitchScope","createContextScope","SwitchProvider","useSwitchContext","Switch","React","props","forwardedRef","__scopeSwitch","name","checkedProp","defaultChecked","required","disabled","value","onCheckedChange","form","switchProps","button","setButton","composedRefs","useComposedRefs","node","hasConsumerStoppedPropagationRef","isFormControl","checked","setChecked","useControllableState","jsxs","jsx","Primitive","getState","composeEventHandlers","event","prevChecked","SwitchBubbleInput","THUMB_NAME","SwitchThumb","thumbProps","context","BUBBLE_INPUT_NAME","control","bubbles","ref","usePrevious","controlSize","useSize","input","inputProto","Root","Thumb","switchStyles","tv","className","size","variant","useComponentVariant","theme","narrowVariant","root","thumb","SwitchPrimitives.Root","SwitchPrimitives.Thumb","switchFieldStyles","SwitchField","id","label","alignment","error","outline","description","container","textContainer","labelStyles","labelWrapper","generatedId","useId","switchId","FieldLabel","Description"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -2,7 +2,7 @@ import { jsx as l } from "react/jsx-runtime";
|
|
|
2
2
|
import i from "react";
|
|
3
3
|
import { T as n } from "../index-BVqs-uqP.js";
|
|
4
4
|
import { B as f } from "../Button-Dg89xRSi.js";
|
|
5
|
-
import { e as y } from "../useBreakpoints-
|
|
5
|
+
import { e as y } from "../useBreakpoints-DHvp74UL.js";
|
|
6
6
|
const u = n({
|
|
7
7
|
base: "flex w-full max-w-[343px] flex-col items-center text-center lg:max-w-[672px]"
|
|
8
8
|
}), b = i.forwardRef(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-state.js","sources":["../../src/components/system-state/SystemState.tsx","../../src/components/system-state/components/SystemStateCode.tsx","../../src/components/system-state/components/SystemStateTitle.tsx","../../src/components/system-state/components/SystemStateDescription.tsx","../../src/components/system-state/components/SystemStateActions.tsx"],"sourcesContent":["import React from \"react\";\
|
|
1
|
+
{"version":3,"file":"system-state.js","sources":["../../src/components/system-state/SystemState.tsx","../../src/components/system-state/components/SystemStateCode.tsx","../../src/components/system-state/components/SystemStateTitle.tsx","../../src/components/system-state/components/SystemStateDescription.tsx","../../src/components/system-state/components/SystemStateActions.tsx"],"sourcesContent":["import React from \"react\";\nimport { tv } from \"tailwind-variants\";\n\nconst systemStateStyles = tv({\n\tbase: \"flex w-full max-w-[343px] flex-col items-center text-center lg:max-w-[672px]\"\n});\n\nexport type SystemStateProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const SystemState = React.forwardRef<HTMLDivElement, SystemStateProps>(\n\t({ className, children, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div ref={ref} className={systemStateStyles({ className })} {...props}>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nSystemState.displayName = \"SystemState\";\n","import React from \"react\";\nimport { tv } from \"tailwind-variants\";\n\nconst codeStyles = tv({\n\tbase: \"mb-8 align-middle text-sm font-medium text-muted\"\n});\n\nexport type SystemStateCodeProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const SystemStateCode = React.forwardRef<HTMLDivElement, SystemStateCodeProps>(\n\t({ className, children, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div ref={ref} className={codeStyles({ className })} {...props}>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nSystemStateCode.displayName = \"SystemStateCode\";\n","import React from \"react\";\nimport { tv } from \"tailwind-variants\";\n\nconst titleStyles = tv({\n\tbase: \"leading-3xl lg:leading-5xl letter-spacing-[-0.02em] pb-4 text-center align-middle text-3xl font-bold lg:text-5xl\"\n});\n\nexport type SystemStateTitleProps = React.HTMLAttributes<HTMLHeadingElement>;\n\nexport const SystemStateTitle = React.forwardRef<HTMLHeadingElement, SystemStateTitleProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn <h2 ref={ref} className={titleStyles({ className })} {...props} />;\n\t}\n);\n\nSystemStateTitle.displayName = \"SystemStateTitle\";\n","import React from \"react\";\nimport { tv } from \"tailwind-variants\";\n\nconst descriptionStyles = tv({\n\tbase: \"leading-base max-w-s text-base font-normal text-muted lg:max-w-xl\"\n});\n\nexport type SystemStateDescriptionProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const SystemStateDescription = React.forwardRef<HTMLDivElement, SystemStateDescriptionProps>(\n\t({ className, children, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div ref={ref} className={descriptionStyles({ className })} {...props}>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nSystemStateDescription.displayName = \"SystemStateDescription\";\n","import React from \"react\";\nimport { tv } from \"tailwind-variants\";\nimport { Button, ButtonProps } from \"@/components/button/button/Button\";\nimport { useIsMobile } from \"@/hooks/useBreakpoints\";\n\nconst actionsStyles = tv({\n\tslots: {\n\t\tcontainer: \"mt-8 flex w-full flex-col items-center gap-3 lg:flex-row lg:justify-center\",\n\t\tbutton: \"w-full lg:w-auto\"\n\t}\n});\n\nexport interface SystemStateActionsProps {\n\tclassName?: string;\n\tprimaryButton?: React.ReactNode;\n\tprimaryButtonProps?: ButtonProps;\n\tsecondaryButton?: React.ReactNode;\n\tsecondaryButtonProps?: ButtonProps;\n}\n\nexport const SystemStateActions = React.forwardRef<HTMLDivElement, SystemStateActionsProps>(\n\t({ className, primaryButton, secondaryButton, primaryButtonProps, secondaryButtonProps }, ref) => {\n\t\tconst isMobile = useIsMobile();\n\t\tconst { container, button } = actionsStyles();\n\n\t\tif (isMobile) {\n\t\t\tprimaryButtonProps = { ...primaryButtonProps, size: \"xl\", className: button({ className: className }) };\n\t\t\tsecondaryButtonProps = { ...secondaryButtonProps, size: \"xl\", className: button({ className: className }) };\n\t\t}\n\n\t\tconst primaryButtonElement = primaryButton && (\n\t\t\t<Button key=\"primary-button\" variant=\"primary\" {...primaryButtonProps}>\n\t\t\t\t{primaryButton}\n\t\t\t</Button>\n\t\t);\n\n\t\tconst secondaryButtonElement = secondaryButton && (\n\t\t\t<Button key=\"secondary-button\" variant=\"outline\" {...secondaryButtonProps}>\n\t\t\t\t{secondaryButton}\n\t\t\t</Button>\n\t\t);\n\n\t\treturn (\n\t\t\t<div ref={ref} className={container({ class: className })}>\n\t\t\t\t{isMobile\n\t\t\t\t\t? [primaryButtonElement, secondaryButtonElement]\n\t\t\t\t\t: [secondaryButtonElement, primaryButtonElement]}\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nSystemStateActions.displayName = \"SystemStateActions\";\n"],"names":["systemStateStyles","tv","SystemState","React","className","children","props","ref","jsx","codeStyles","SystemStateCode","titleStyles","SystemStateTitle","descriptionStyles","SystemStateDescription","actionsStyles","SystemStateActions","primaryButton","secondaryButton","primaryButtonProps","secondaryButtonProps","isMobile","useIsMobile","container","button","primaryButtonElement","Button","secondaryButtonElement"],"mappings":";;;;;AAGA,MAAMA,IAAoBC,EAAG;AAAA,EAC5B,MAAM;AACP,CAAC,GAIYC,IAAcC,EAAM;AAAA,EAChC,CAAC,EAAE,WAAAC,GAAW,UAAAC,GAAU,GAAGC,EAAA,GAASC,MAElC,gBAAAC,EAAC,OAAI,EAAA,KAAAD,GAAU,WAAWP,EAAkB,EAAE,WAAAI,GAAW,GAAI,GAAGE,GAC9D,UAAAD,EACF,CAAA;AAGH;AAEAH,EAAY,cAAc;AChB1B,MAAMO,IAAaR,EAAG;AAAA,EACrB,MAAM;AACP,CAAC,GAIYS,IAAkBP,EAAM;AAAA,EACpC,CAAC,EAAE,WAAAC,GAAW,UAAAC,GAAU,GAAGC,EAAA,GAASC,MAElC,gBAAAC,EAAC,OAAI,EAAA,KAAAD,GAAU,WAAWE,EAAW,EAAE,WAAAL,GAAW,GAAI,GAAGE,GACvD,UAAAD,EACF,CAAA;AAGH;AAEAK,EAAgB,cAAc;AChB9B,MAAMC,IAAcV,EAAG;AAAA,EACtB,MAAM;AACP,CAAC,GAIYW,IAAmBT,EAAM;AAAA,EACrC,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAClB,gBAAAC,EAAC,MAAG,EAAA,KAAAD,GAAU,WAAWI,EAAY,EAAE,WAAAP,EAAW,CAAA,GAAI,GAAGE,GAAO;AAEzE;AAEAM,EAAiB,cAAc;ACZ/B,MAAMC,IAAoBZ,EAAG;AAAA,EAC5B,MAAM;AACP,CAAC,GAIYa,IAAyBX,EAAM;AAAA,EAC3C,CAAC,EAAE,WAAAC,GAAW,UAAAC,GAAU,GAAGC,EAAA,GAASC,MAElC,gBAAAC,EAAC,OAAI,EAAA,KAAAD,GAAU,WAAWM,EAAkB,EAAE,WAAAT,GAAW,GAAI,GAAGE,GAC9D,UAAAD,EACF,CAAA;AAGH;AAEAS,EAAuB,cAAc;ACdrC,MAAMC,IAAgBd,EAAG;AAAA,EACxB,OAAO;AAAA,IACN,WAAW;AAAA,IACX,QAAQ;AAAA,EAAA;AAEV,CAAC,GAUYe,IAAqBb,EAAM;AAAA,EACvC,CAAC,EAAE,WAAAC,GAAW,eAAAa,GAAe,iBAAAC,GAAiB,oBAAAC,GAAoB,sBAAAC,KAAwBb,MAAQ;AACjG,UAAMc,IAAWC,EAAY,GACvB,EAAE,WAAAC,GAAW,QAAAC,EAAO,IAAIT,EAAc;AAE5C,IAAIM,MACkBF,IAAA,EAAE,GAAGA,GAAoB,MAAM,MAAM,WAAWK,EAAO,EAAE,WAAApB,EAAqB,CAAC,EAAE,GAC/EgB,IAAA,EAAE,GAAGA,GAAsB,MAAM,MAAM,WAAWI,EAAO,EAAE,WAAApB,EAAqB,CAAC,EAAE;AAGrG,UAAAqB,IAAuBR,KAC3B,gBAAAT,EAAAkB,GAAA,EAA4B,SAAQ,WAAW,GAAGP,GACjD,UAAAF,EAAA,GADU,gBAEZ,GAGKU,IAAyBT,KAC7B,gBAAAV,EAAAkB,GAAA,EAA8B,SAAQ,WAAW,GAAGN,GACnD,UAAAF,EAAA,GADU,kBAEZ;AAGD,6BACE,OAAI,EAAA,KAAAX,GAAU,WAAWgB,EAAU,EAAE,OAAOnB,EAAU,CAAC,GACtD,UAAAiB,IACE,CAACI,GAAsBE,CAAsB,IAC7C,CAACA,GAAwBF,CAAoB,GACjD;AAAA,EAAA;AAGH;AAEAT,EAAmB,cAAc;"}
|
|
@@ -1,7 +1,41 @@
|
|
|
1
1
|
import { ScrollShadowContainerProps } from '../scroll-shadow-container/ScrollShadowContainer';
|
|
2
2
|
import * as React from "react";
|
|
3
|
-
export
|
|
4
|
-
|
|
3
|
+
export type TableProps = React.HTMLAttributes<HTMLTableElement> & {
|
|
4
|
+
containerClassName?: string;
|
|
5
|
+
containerRef?: React.Ref<HTMLDivElement>;
|
|
6
|
+
};
|
|
7
|
+
export declare const Table: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLTableElement> & {
|
|
8
|
+
containerClassName?: string;
|
|
9
|
+
containerRef?: React.Ref<HTMLDivElement>;
|
|
10
|
+
} & React.RefAttributes<HTMLTableElement>>;
|
|
11
|
+
export type TableHeaderProps = React.HTMLAttributes<HTMLTableSectionElement> & {
|
|
12
|
+
/**
|
|
13
|
+
* Шапка остаётся на месте при вертикальной прокрутке.
|
|
14
|
+
*
|
|
15
|
+
* Прокручивается контейнер таблицы, поэтому ему нужна ограниченная высота
|
|
16
|
+
* (`containerClassName="max-h-80"`): без неё прокручивать нечего и `position: sticky`
|
|
17
|
+
* ничего не делает.
|
|
18
|
+
*
|
|
19
|
+
* Проп, а не набор классов в `className`, потому что вместе со `sticky` требуется
|
|
20
|
+
* `z-index`, согласованный с закреплёнными колонками, — это знание кита, а не
|
|
21
|
+
* потребителя (см. `STICKY_HEADER`).
|
|
22
|
+
*/
|
|
23
|
+
sticky?: boolean;
|
|
24
|
+
};
|
|
25
|
+
export declare const TableHeader: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLTableSectionElement> & {
|
|
26
|
+
/**
|
|
27
|
+
* Шапка остаётся на месте при вертикальной прокрутке.
|
|
28
|
+
*
|
|
29
|
+
* Прокручивается контейнер таблицы, поэтому ему нужна ограниченная высота
|
|
30
|
+
* (`containerClassName="max-h-80"`): без неё прокручивать нечего и `position: sticky`
|
|
31
|
+
* ничего не делает.
|
|
32
|
+
*
|
|
33
|
+
* Проп, а не набор классов в `className`, потому что вместе со `sticky` требуется
|
|
34
|
+
* `z-index`, согласованный с закреплёнными колонками, — это знание кита, а не
|
|
35
|
+
* потребителя (см. `STICKY_HEADER`).
|
|
36
|
+
*/
|
|
37
|
+
sticky?: boolean;
|
|
38
|
+
} & React.RefAttributes<HTMLTableSectionElement>>;
|
|
5
39
|
export declare const TableBody: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLTableSectionElement> & React.RefAttributes<HTMLTableSectionElement>>;
|
|
6
40
|
export type TableBodyContainerProps = React.HTMLAttributes<HTMLTableSectionElement> & {
|
|
7
41
|
containerClassName?: string;
|
|
@@ -11,8 +45,78 @@ export declare const TableBodyContainer: React.ForwardRefExoticComponent<React.H
|
|
|
11
45
|
containerClassName?: string;
|
|
12
46
|
shadowSize?: ScrollShadowContainerProps["shadowSize"];
|
|
13
47
|
} & React.RefAttributes<HTMLTableSectionElement>>;
|
|
14
|
-
export
|
|
15
|
-
|
|
16
|
-
|
|
48
|
+
export type TableFooterProps = React.HTMLAttributes<HTMLTableSectionElement> & {
|
|
49
|
+
/**
|
|
50
|
+
* Итоги остаются на месте при вертикальной прокрутке.
|
|
51
|
+
*
|
|
52
|
+
* Зеркало `sticky` у `TableHeader`, и требует того же: прокручивается контейнер таблицы,
|
|
53
|
+
* поэтому у него должна быть ограниченная высота — без неё прокручивать нечего.
|
|
54
|
+
*
|
|
55
|
+
* Проп, а не классы в `className`, по той же причине, что и у шапки: вместе со `sticky`
|
|
56
|
+
* нужен `z-index`, согласованный с закреплёнными колонками (см. `STICKY_FOOTER`).
|
|
57
|
+
*/
|
|
58
|
+
sticky?: boolean;
|
|
59
|
+
};
|
|
60
|
+
export declare const TableFooter: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLTableSectionElement> & {
|
|
61
|
+
/**
|
|
62
|
+
* Итоги остаются на месте при вертикальной прокрутке.
|
|
63
|
+
*
|
|
64
|
+
* Зеркало `sticky` у `TableHeader`, и требует того же: прокручивается контейнер таблицы,
|
|
65
|
+
* поэтому у него должна быть ограниченная высота — без неё прокручивать нечего.
|
|
66
|
+
*
|
|
67
|
+
* Проп, а не классы в `className`, по той же причине, что и у шапки: вместе со `sticky`
|
|
68
|
+
* нужен `z-index`, согласованный с закреплёнными колонками (см. `STICKY_FOOTER`).
|
|
69
|
+
*/
|
|
70
|
+
sticky?: boolean;
|
|
71
|
+
} & React.RefAttributes<HTMLTableSectionElement>>;
|
|
72
|
+
export type TableRowProps = React.HTMLAttributes<HTMLTableRowElement>;
|
|
73
|
+
/**
|
|
74
|
+
* Строка таблицы.
|
|
75
|
+
*
|
|
76
|
+
* **Как перекрасить.** Обычными классами: `className="bg-… hover:bg-…"`. Они выигрывают
|
|
77
|
+
* штатно — ни `!important`, ни повторения модификаторов не нужно. Кто хочет сохранить
|
|
78
|
+
* встроенное наведение и подменить только палитру — выставляет переменные `--table-row-bg`
|
|
79
|
+
* и `--table-row-bg-hover`.
|
|
80
|
+
*
|
|
81
|
+
* **Как подсветить.** Слоями: `style={tableRowTints(…)}`, готовые цвета — в `TABLE_ROW_TINT`.
|
|
82
|
+
* Слои складываются друг с другом и ложатся поверх заливки, какой бы она ни была, поэтому
|
|
83
|
+
* подсветка и перекраска не конфликтуют. Подробности — в `rowTint.ts`.
|
|
84
|
+
*
|
|
85
|
+
* **Почему цвет читают отдельные классы, а не состояния.** Раньше `base` красил строку
|
|
86
|
+
* четырьмя классами (`hover:bg-*`, `data-[state=selected]:bg-*`,
|
|
87
|
+
* `data-[state=selected]:hover:bg-*`), и перебить их снаружи было нечем: `tailwind-merge`
|
|
88
|
+
* снимает конфликт только между классами с одинаковым набором модификаторов, поэтому `bg-x`
|
|
89
|
+
* из `className` не вытеснял ни один из них, а `data-[state=selected]:bg-*` вдобавок выигрывал
|
|
90
|
+
* по специфичности — 0,2,0 против 0,1,0. Потребителю приходилось вручную повторять все четыре
|
|
91
|
+
* комбинации модификаторов.
|
|
92
|
+
*/
|
|
93
|
+
export declare const TableRow: React.ForwardRefExoticComponent<TableRowProps & React.RefAttributes<HTMLTableRowElement>>;
|
|
94
|
+
export type TableHeadProps = React.ThHTMLAttributes<HTMLTableCellElement> & {
|
|
95
|
+
/**
|
|
96
|
+
* Вся ячейка — интерактивная зона: меняет фон на наведении и на раскрытом меню,
|
|
97
|
+
* и снимает собственный паддинг в пользу растянутого на всю ячейку триггера.
|
|
98
|
+
*/
|
|
99
|
+
interactive?: boolean;
|
|
100
|
+
};
|
|
101
|
+
export declare const TableHead: React.ForwardRefExoticComponent<React.ThHTMLAttributes<HTMLTableCellElement> & {
|
|
102
|
+
/**
|
|
103
|
+
* Вся ячейка — интерактивная зона: меняет фон на наведении и на раскрытом меню,
|
|
104
|
+
* и снимает собственный паддинг в пользу растянутого на всю ячейку триггера.
|
|
105
|
+
*/
|
|
106
|
+
interactive?: boolean;
|
|
107
|
+
} & React.RefAttributes<HTMLTableCellElement>>;
|
|
17
108
|
export declare const TableCell: React.ForwardRefExoticComponent<React.TdHTMLAttributes<HTMLTableCellElement> & React.RefAttributes<HTMLTableCellElement>>;
|
|
109
|
+
export type TableResizeHandleProps = React.HTMLAttributes<HTMLDivElement> & {
|
|
110
|
+
/** Держит индикатор подсвеченным во время drag-сессии, когда курсор уже ушёл с ручки. */
|
|
111
|
+
active?: boolean;
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* Зона захвата для ресайза колонки. Кладётся внутрь `TableHead`, которому нужен `relative`.
|
|
115
|
+
* Саму ширину не считает — работает в паре с `useColumnResize` из `./column-resize`.
|
|
116
|
+
* Работает только если у `TableHead` нет `overflow: hidden`.
|
|
117
|
+
*/
|
|
118
|
+
export declare const TableResizeHandle: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & {
|
|
119
|
+
/** Держит индикатор подсвеченным во время drag-сессии, когда курсор уже ушёл с ручки. */
|
|
120
|
+
active?: boolean;
|
|
121
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
18
122
|
export declare const TableCaption: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLTableCaptionElement> & React.RefAttributes<HTMLTableCaptionElement>>;
|
|
@@ -3,13 +3,289 @@ import { Table } from './Table';
|
|
|
3
3
|
declare const meta: Meta<typeof Table>;
|
|
4
4
|
export default meta;
|
|
5
5
|
type Story = StoryObj<typeof Table>;
|
|
6
|
-
export declare const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
export declare const TableBase: Story;
|
|
7
|
+
/**
|
|
8
|
+
* Подсветка строк слоями. Механизм целиком описан в разделе «Раскраска строк».
|
|
9
|
+
*
|
|
10
|
+
* В примере три прикладных состояния: выделение чекбоксом, деактивация и просрочка.
|
|
11
|
+
* Для первых двух взяты готовые цвета кита (`TABLE_ROW_TINT`), для просрочки рядом положен
|
|
12
|
+
* свой — `hsl(var(--status-warning) / 12%)`. Колонка «Слои» перечисляет то, что применено
|
|
13
|
+
* к строке; на последней строке сходятся все три и видны разом.
|
|
14
|
+
*
|
|
15
|
+
* Две нижние строки вдобавок перекрашены целиком — своя заливка через
|
|
16
|
+
* `className="bg-… hover:bg-…"`. Слои ложатся на них так же, как на строки со штатной
|
|
17
|
+
* заливкой, и наведение продолжает работать.
|
|
18
|
+
*/
|
|
19
|
+
export declare const RowTints: StoryObj;
|
|
13
20
|
export declare const ScrollableTable: Story;
|
|
14
|
-
|
|
15
|
-
|
|
21
|
+
/**
|
|
22
|
+
* Итоговая строка и подпись таблицы.
|
|
23
|
+
*
|
|
24
|
+
* **Почему итоги — `TableFooter`, а не последняя строка тела.** Итог не запись, а сводка
|
|
25
|
+
* по записям, и из `tbody` он должен выпадать сам собой: сортировка, фильтр, выделение
|
|
26
|
+
* и «отметить все» работают со строками тела, и особая последняя строка каждый раз была бы
|
|
27
|
+
* исключением, про которое надо помнить. Скринридер читает `tfoot` так же — как итог,
|
|
28
|
+
* а не как ещё одного дистрибьютора.
|
|
29
|
+
*
|
|
30
|
+
* Считает итоги вызывающая сторона: кит не знает, что складывать, что усреднять, а что
|
|
31
|
+
* не сводится вовсе. Здесь суммируются штуки и рубли, а рост оставлен прочерком — среднее
|
|
32
|
+
* по процентам без весов врёт, и честнее показать это прямо в примере.
|
|
33
|
+
*
|
|
34
|
+
* Верхнюю линию итогов рисуют ячейки, а не сам `tfoot`: в раздельной модели границ
|
|
35
|
+
* (`border-separate` у `Table`) собственная граница групп строк игнорируется.
|
|
36
|
+
*
|
|
37
|
+
* **Подпись — `caption`, а не абзац рядом с таблицей.** `caption` связан с таблицей
|
|
38
|
+
* разметкой, а не соседством: скринридер называет им таблицу при входе, а перенос таблицы
|
|
39
|
+
* в другое место не оставляет подпись позади. Стоит она под таблицей (`caption-bottom`
|
|
40
|
+
* у `Table`) — сверху обычно уже есть заголовок раздела, и вторая надпись спорила бы с ним.
|
|
41
|
+
*/
|
|
42
|
+
export declare const TotalsAndCaption: Story;
|
|
43
|
+
/**
|
|
44
|
+
* Итоги, которые не уезжают: `sticky` у шапки держит её у верха контейнера, `sticky` у итогов —
|
|
45
|
+
* у низа. Между ними прокручивается тело.
|
|
46
|
+
*
|
|
47
|
+
* Прокручивается при этом контейнер таблицы, как в «Scrollable Table», поэтому таблица
|
|
48
|
+
* остаётся таблицей: ширины колонок считает браузер, `colSpan` в итогах работает, разметка
|
|
49
|
+
* ничем не отличается от обычной. Обоим пропам нужна ограниченная высота у контейнера
|
|
50
|
+
* (`containerClassName="h-80"`): без неё прокручивать нечего, а `position: sticky` без
|
|
51
|
+
* прокрутки ничего не делает.
|
|
52
|
+
*
|
|
53
|
+
* Слой у шапки и итогов один (`z-20`): друг с другом они не спорят — стоят по разные стороны
|
|
54
|
+
* тела, — но оба обязаны перекрывать проезжающие под ними строки.
|
|
55
|
+
*/
|
|
56
|
+
export declare const StickyTotals: Story;
|
|
57
|
+
/**
|
|
58
|
+
* Прокрутка по обеим осям: шапка прилипает сверху, первые две колонки — слева.
|
|
59
|
+
*
|
|
60
|
+
* Закреплённых колонок две, поэтому `left` второй равен ширине первой (`ACCOUNT_WIDTH`).
|
|
61
|
+
* Случай, когда ширины меняются на ходу, разобран в «Sticky + Resizable Columns».
|
|
62
|
+
*
|
|
63
|
+
* Ширину таблице диктует `w-max`: она растягивается по содержимому, а незакреплённые
|
|
64
|
+
* колонки сами берут нужный размер.
|
|
65
|
+
*/
|
|
66
|
+
export declare const StickyColumns: Story;
|
|
67
|
+
type ResizableColumnsArgs = {
|
|
68
|
+
handleScope: "header" | "table";
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Ресайз колонок перетаскиванием и автофит по двойному клику.
|
|
72
|
+
*
|
|
73
|
+
* Колонка «Условия работы» специально многострочная: автофит и `table-layout: fixed`
|
|
74
|
+
* проверяются в том числе на переносе текста.
|
|
75
|
+
*
|
|
76
|
+
* Заголовок обрезается вложенным `<span>`: `overflow: hidden` на самой ячейке срезал бы
|
|
77
|
+
* выступающую половину зоны захвата, и граница колонки перестала бы ловить курсор.
|
|
78
|
+
*
|
|
79
|
+
* `handleScope` переключает зону захвата. `header` — ручка только в шапке. `table` — ещё
|
|
80
|
+
* и в каждой ячейке тела, так что вдоль всей границы колонки получается непрерывная полоса,
|
|
81
|
+
* как в Excel.
|
|
82
|
+
*
|
|
83
|
+
* Полоса собрана из посегментных ручек намеренно. Растянуть одну ручку из шапки на всю
|
|
84
|
+
* высоту нельзя: она позиционирована абсолютно, и большая высота раздувает `scrollHeight`
|
|
85
|
+
* контейнера, добавляя пустую вертикальную прокрутку. Вариант с замером высоты таблицы
|
|
86
|
+
* через `ResizeObserver` добавляет к сторибучному примеру наблюдатель и лишний ререндер
|
|
87
|
+
* на каждое изменение размера — тут это не окупается. Цена посегментного варианта —
|
|
88
|
+
* по ручке на ячейку; для больших таблиц её стоит заменить на оверлей поверх таблицы.
|
|
89
|
+
*
|
|
90
|
+
* Чтобы подсвечивалась граница целиком, наведённая колонка хранится в состоянии
|
|
91
|
+
* и раздаётся всем её ручкам через `active`.
|
|
92
|
+
*
|
|
93
|
+
* Обёртке заданы `w-fit max-w-full`: по умолчанию она `w-full` и, когда таблица уже
|
|
94
|
+
* контейнера, справа остаётся пустая рамка. `w-fit` прижимает её к ширине таблицы,
|
|
95
|
+
* `max-w-full` не даёт вылезти за экран и включает горизонтальную прокрутку,
|
|
96
|
+
* когда колонки растянули шире доступного места.
|
|
97
|
+
*/
|
|
98
|
+
export declare const ResizableColumns: StoryObj<ResizableColumnsArgs>;
|
|
99
|
+
type StickyResizableColumnsArgs = {
|
|
100
|
+
pinnedCount: number;
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* Закреплённые колонки вместе с изменяемой шириной.
|
|
104
|
+
*
|
|
105
|
+
* Переключатель числа закреплённых колонок здесь ради того, что начинается со второй
|
|
106
|
+
* колонки: её `left` равен **сумме ширин всех предыдущих закреплённых**, и у каждой
|
|
107
|
+
* следующей значение своё. Считает его `stickyOffset`. Под заголовком закреплённой колонки
|
|
108
|
+
* показано текущее значение — переключите количество и посмотрите, как растёт ряд.
|
|
109
|
+
* Минимальный случай с одной колонкой и константой `left-0` — в «Sticky Columns».
|
|
110
|
+
*
|
|
111
|
+
* Отсюда два следствия, которые видны начиная со второй колонки:
|
|
112
|
+
*
|
|
113
|
+
* 1. Ширины обязаны быть известны заранее, поэтому таблице нужен `table-layout: fixed`.
|
|
114
|
+
* При `auto` браузер считает ширины по содержимому, заданные значения игнорирует,
|
|
115
|
+
* и вычисленный `left` промахивается.
|
|
116
|
+
* 2. Закреплённые колонки должны помещаться в контейнер — они занимают его левый край
|
|
117
|
+
* насовсем. Закрепите четыре и сузьте окно: прокручивать станет нечего.
|
|
118
|
+
*
|
|
119
|
+
* **Как это уживается с ресайзом.** Ширины берутся из `useColumnResize` — того же источника,
|
|
120
|
+
* которым таблица задаёт `width` колонкам, так что после каждой правки `left` пересчитывается
|
|
121
|
+
* сам. Есть ровно одна шероховатость: **во время** перетаскивания ручки хук пишет ширину прямо
|
|
122
|
+
* в DOM и React не трогает, поэтому вычисленный из состояния `left` отстаёт до отпускания
|
|
123
|
+
* кнопки — следующая закреплённая колонка на это время наезжает на предыдущую.
|
|
124
|
+
*
|
|
125
|
+
* Лечится тем же приёмом с другой стороны: пока ручку тянут, `left` дописывается прямо в DOM
|
|
126
|
+
* на тех же событиях мыши — тоже без единого ререндера. Слушатель вешается поверх
|
|
127
|
+
* `getResizeHandleProps` и снимается на `mouseup`; менять ширину закреплённой колонки больше
|
|
128
|
+
* нечему, поэтому наблюдать за раскладкой целиком (`ResizeObserver`) незачем.
|
|
129
|
+
*/
|
|
130
|
+
export declare const StickyResizableColumns: StoryObj<StickyResizableColumnsArgs>;
|
|
131
|
+
/**
|
|
132
|
+
* Ресайз плюс перетаскивание колонок.
|
|
133
|
+
*
|
|
134
|
+
* Перетаскивание — `useColumnReorder`: колонка едет за курсором, соседи разъезжаются,
|
|
135
|
+
* отпускание укладывает её в новый слот. Разбор, почему здесь это дешевле DnD-библиотеки,
|
|
136
|
+
* лежит в документации самого хука.
|
|
137
|
+
*
|
|
138
|
+
* Драг начинается с грипа: нажатие по всей ячейке конфликтовало бы с ресайзером, который
|
|
139
|
+
* тоже стартует в шапке.
|
|
140
|
+
*
|
|
141
|
+
* Размер шрифта оставлен `text-xs` от таблицы. В макете этот вариант шапки нарисован
|
|
142
|
+
* в размере `sm` (14/20), но вся остальная таблица собрана в `xs` (12/16), и мешать
|
|
143
|
+
* их в одной таблице было бы хуже, чем разойтись с документационным фреймом.
|
|
144
|
+
*/
|
|
145
|
+
export declare const ReorderableColumns: StoryObj;
|
|
146
|
+
/**
|
|
147
|
+
* Инлайн-редактирование: выделение диапазона, копирование, автозаполнение, readonly.
|
|
148
|
+
*
|
|
149
|
+
* Внешний вид сетки лежит в модуле `editable`: заливку ячейки даёт `cellStateStyles`, рамку
|
|
150
|
+
* диапазона — `cellRangeEdges`, ручку — `TableFillHandle`, поле правки — `cellEditorStyles`.
|
|
151
|
+
* Здесь остаётся механика: выделение, клавиатура, буфер обмена, автозаполнение.
|
|
152
|
+
*
|
|
153
|
+
* Состояния взяты из макета `Table / Cell` и разложены по токенам кита:
|
|
154
|
+
*
|
|
155
|
+
* | состояние | токен |
|
|
156
|
+
* |------------|-------|
|
|
157
|
+
* | read-only | `bg-secondary-bg-hover` (#f1f5f9) |
|
|
158
|
+
* | selected | рамка 2px `--primary-accent` по краю диапазона |
|
|
159
|
+
* | editing | `bg-status-warning-bg-hover` (#ffedd5) + `shadow-focus` |
|
|
160
|
+
* | modified | `bg-status-warning-bg-hover` (#ffedd5) |
|
|
161
|
+
* | fill-source| `bg-primary-bg-hover` (#e2e8f0) |
|
|
162
|
+
* | drag-range | рамка 1px `--primary-border` (#cbd5e1) с альфой 0.75 |
|
|
163
|
+
*
|
|
164
|
+
* Копирование отдаёт TSV: так вставка попадает в Excel и Google Sheets по ячейкам.
|
|
165
|
+
* `navigator.clipboard` в iframe Storybook может быть недоступен, поэтому есть запасной
|
|
166
|
+
* путь через скрытую `textarea` и `execCommand`.
|
|
167
|
+
*
|
|
168
|
+
* Над таблицей — `Toolbar` с откатом правок. Кнопка недоступна, пока правок нет, и держит
|
|
169
|
+
* в подписи их число: отмена оптом требует понимания, сколько именно будет потеряно.
|
|
170
|
+
* Откат возвращает исходные данные вместе с признаком изменённых ячеек и состоянием
|
|
171
|
+
* редактирования, поэтому таблица приходит ровно в тот вид, с которого стори открывается.
|
|
172
|
+
*
|
|
173
|
+
* **Каретка в точку двойного клика.** Поле ввода появляется уже после клика, поэтому
|
|
174
|
+
* по умолчанию каретка встаёт в начало. Координата запоминается на `dblclick` и применяется
|
|
175
|
+
* при фокусе через `placeCaretAtPoint` (`lib/utils/dom`). Содержимое `input` лежит вне
|
|
176
|
+
* DOM-дерева, и `caretPositionFromPoint` вернул бы сам элемент, поэтому индекс считается
|
|
177
|
+
* измерением текста на canvas. Приём взят из MDT (`_core/scripts/helpers/utils/placeCaret.ts`,
|
|
178
|
+
* применение — `inline/scripts/transformers/CellTransformer.ts`).
|
|
179
|
+
*
|
|
180
|
+
* У числовых колонок каретка может промахнуться на пару пикселей: на экране стоит
|
|
181
|
+
* отформатированное значение с разделителем разрядов, а в поле — сырое число, и ширины
|
|
182
|
+
* строк слегка разъезжаются.
|
|
183
|
+
*
|
|
184
|
+
* **Многострочная колонка.** «Комментарий» хранит текст с переносами и правится редактируемым
|
|
185
|
+
* `div` (`MultilineCellEditor`): у `textarea` собственная высота и свой скролл, из-за чего
|
|
186
|
+
* ячейка прыгала бы при входе в правку и держала бы фиксированный размер по мере набора.
|
|
187
|
+
* Каретка ставится штатным `caretPositionFromPoint` (`placeCaretAtClientPoint`) — содержимое
|
|
188
|
+
* `div` есть в DOM, поэтому точка попадает в нужную строку.
|
|
189
|
+
* Enter сохраняет, перенос — Shift+Enter или Alt+Enter, как в Excel. Вставка из буфера
|
|
190
|
+
* принудительно приводится к тексту: иначе `contenteditable` примет чужую разметку.
|
|
191
|
+
*
|
|
192
|
+
* В режиме просмотра текст обрезан тремя строками, чтобы одна ячейка не задирала высоту всей
|
|
193
|
+
* строки; из-за этого двойной клик по обрезанной третьей строке может поставить каретку
|
|
194
|
+
* на пару символов мимо. Копирование отдаёт такие значения в кавычках, по правилу CSV —
|
|
195
|
+
* иначе перенос развалил бы строку TSV при вставке.
|
|
196
|
+
*
|
|
197
|
+
* **Клавиатура.** Раскладка снята с MDT и Excel:
|
|
198
|
+
*
|
|
199
|
+
* | клавиши | действие |
|
|
200
|
+
* |---------|----------|
|
|
201
|
+
* | стрелки | активная ячейка; Shift — расширить выделение, Ctrl — прыжок к краю |
|
|
202
|
+
* | Home / End | первая / последняя колонка, с Ctrl — ещё и строка |
|
|
203
|
+
* | Enter, Tab | сохранить и перейти (Shift — в обратную сторону) |
|
|
204
|
+
* | F2 | редактирование, каретка в конце |
|
|
205
|
+
* | любой символ | быстрое редактирование: набранное заменяет значение |
|
|
206
|
+
* | Escape | отменить правку, иначе — снять выделение |
|
|
207
|
+
* | Delete | очистить выделенные ячейки |
|
|
208
|
+
* | Ctrl+C | скопировать выделение как TSV |
|
|
209
|
+
*
|
|
210
|
+
* Ключевое различие — «полное» и «быстрое» редактирование (`EditState.full`): в первом
|
|
211
|
+
* стрелки двигают каретку внутри поля, во втором сохраняют и переводят ячейку. Enter и Tab
|
|
212
|
+
* переводят активную ячейку, как в Excel.
|
|
213
|
+
*
|
|
214
|
+
* Tab перехватывается только при наличии активной ячейки — иначе фокус запирался бы
|
|
215
|
+
* в таблице. Выход с клавиатуры: Escape снимает выделение, следующий Tab уводит дальше.
|
|
216
|
+
*/
|
|
217
|
+
export declare const InlineEditing: StoryObj;
|
|
218
|
+
/**
|
|
219
|
+
* Список пользователей с шапкой раздела и тулбаром.
|
|
220
|
+
*
|
|
221
|
+
* Выделение чекбоксами и меню «Активность», которое реально включает и выключает
|
|
222
|
+
* отмеченные строки. Обе подсветки — слои `tableRowTints()` с готовыми цветами кита
|
|
223
|
+
* (`TABLE_ROW_TINT`); строка о состояниях ничего не знает, их собирает прикладной код.
|
|
224
|
+
*
|
|
225
|
+
* Слои складываются альфами, поэтому выделенная деактивированная строка видна и как
|
|
226
|
+
* выделенная, и как деактивированная. Так и должно быть — выделяют её обычно затем,
|
|
227
|
+
* чтобы включить обратно.
|
|
228
|
+
*
|
|
229
|
+
* Часть строк деактивирована и выделена изначально — так оба состояния видно сразу.
|
|
230
|
+
* Индексы деактивированных те же, что на макете. После применения действия выделение
|
|
231
|
+
* сбрасывается — так же, как на макете, где чекбоксы уже сняты.
|
|
232
|
+
*
|
|
233
|
+
* Контент — простой текст, как в остальных стори; бейджи и селекты из макета остаются
|
|
234
|
+
* отдельной задачей.
|
|
235
|
+
*/
|
|
236
|
+
export declare const UserListWithToolbar: StoryObj;
|
|
237
|
+
/**
|
|
238
|
+
* Колоночное меню: быстрый поиск, сортировка и фильтр по значениям.
|
|
239
|
+
*
|
|
240
|
+
* **Триггер — вся ячейка шапки**: заголовок сам служит кнопкой. Разметка триггера вместе
|
|
241
|
+
* с разбором, почему кликабельна кнопка внутри `th`, вынесена в `ColumnHeaderMenu`
|
|
242
|
+
* (`tableStoryParts.tsx`).
|
|
243
|
+
*
|
|
244
|
+
* **Фон ячейки** — два токена из макета шапки: наведение `secondary-bg-hover`, раскрытое
|
|
245
|
+
* меню `primary-bg-hover` (насыщеннее). Оба живут в `TableHead` под флагом `interactive`.
|
|
246
|
+
*
|
|
247
|
+
* **Содержимое меню** повторяет макет `Results`: группа сортировки, разделитель, группа
|
|
248
|
+
* фильтра с поиском по значениям и списком галочек, разделитель, «Очистить все». Сверху
|
|
249
|
+
* добавлена группа быстрого поиска по подстроке. Всё собрано из готовых примитивов кита —
|
|
250
|
+
* `DropdownMenuGroup` / `DropdownMenuLabel` / `DropdownMenuSearchItem` /
|
|
251
|
+
* `DropdownMenuRadioGroup` / `DropdownMenuCheckboxItem` / `DropdownMenuSeparator`;
|
|
252
|
+
* длинный список значений прокручивается в `ScrollShadowContainer`.
|
|
253
|
+
*
|
|
254
|
+
* Список галочек строится по всем строкам таблицы: при построении по видимым снятая галочка
|
|
255
|
+
* убирала бы из списка саму себя, и вернуть её было бы нечем.
|
|
256
|
+
*/
|
|
257
|
+
export declare const ColumnMenu: StoryObj;
|
|
258
|
+
/**
|
|
259
|
+
* Иерархия строк с линиями связи.
|
|
260
|
+
*
|
|
261
|
+
* **Отрисовка.** Ячейка — `position: relative` с растущим по глубине `padding-left`, внутри
|
|
262
|
+
* абсолютно позиционированные спаны толщиной 1px. Вертикали выходят за padding-box на 1px
|
|
263
|
+
* сверху и снизу: нижняя граница ячейки лежит вне его, и вынос делает линию сплошной.
|
|
264
|
+
* У `end` вертикаль обрывается на коннекторе — это и даёт уголок. Спуск к первому потомку
|
|
265
|
+
* рисует строка родителя: вертикаль потомка начинается от его собственной строки, поэтому
|
|
266
|
+
* участок под раскрывателем остаётся за родителем.
|
|
267
|
+
*
|
|
268
|
+
* Коннектор привязан к центру первой строки текста: при переносе длинной подписи он
|
|
269
|
+
* остаётся напротив узла.
|
|
270
|
+
*
|
|
271
|
+
* Раскрыватель центрируется точно на вертикали своего уровня
|
|
272
|
+
* (`padding-left = treeLineX(level) - TREE_TOGGLE / 2`), поэтому линии детей выходят ровно
|
|
273
|
+
* из его центра. У листьев на его месте распорка той же ширины, чтобы подписи соседних
|
|
274
|
+
* строк стояли на одной вертикали. Сторона квадрата равна стороне чекбокса, а зона нажатия
|
|
275
|
+
* расширена до 24px невидимым псевдоэлементом: сам квадрат остаётся на сетке линий.
|
|
276
|
+
*
|
|
277
|
+
* Вся разметка линий размечена data-атрибутами: на обёртке лежит модель строки целиком
|
|
278
|
+
* (`data-tree-lines="pass none end"`), на каждом спане — его роль и номер колонки. В DevTools
|
|
279
|
+
* рядом с нарисованным видно и то, что было велено нарисовать.
|
|
280
|
+
*
|
|
281
|
+
*/
|
|
282
|
+
export declare const RowHierarchy: StoryObj;
|
|
283
|
+
/**
|
|
284
|
+
* Группировка строк по двум полям.
|
|
285
|
+
*
|
|
286
|
+
* Группировка — это то же дерево, только узлы разного сорта.
|
|
287
|
+
* Данные сворачиваются в дерево `GroupNode` (группа → группа → строка), а дальше работают
|
|
288
|
+
* ровно те же `flattenTree` и `TableTreeCell`, что и в `RowHierarchy`, — линии считает
|
|
289
|
+
* модель.
|
|
290
|
+
*/
|
|
291
|
+
export declare const RowGrouping: StoryObj;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { useColumnReorder, COLUMN_KEY_ATTRIBUTE, type UseColumnReorderOptions, type UseColumnReorderResult } from './useColumnReorder';
|