torch-glare 2.4.0 → 2.4.1
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 +8 -0
- package/apps/lib/components/ActionButton.tsx +7 -12
- package/apps/lib/components/ActionsGroup.tsx +4 -15
- package/apps/lib/components/AlertDialog.tsx +173 -191
- package/apps/lib/components/Avatar.tsx +13 -16
- package/apps/lib/components/Badge.tsx +1 -3
- package/apps/lib/components/BadgeField.tsx +76 -71
- package/apps/lib/components/Breadcrumb.tsx +49 -85
- package/apps/lib/components/Button.tsx +20 -19
- package/apps/lib/components/ButtonGroup.tsx +31 -41
- package/apps/lib/components/Calendar.tsx +51 -29
- package/apps/lib/components/Card.tsx +2 -13
- package/apps/lib/components/ChartBlockTool.ts +17 -52
- package/apps/lib/components/Checkbox.tsx +9 -16
- package/apps/lib/components/ContextMenu.tsx +97 -96
- package/apps/lib/components/CountBadge.tsx +4 -6
- package/apps/lib/components/DataTable.tsx +196 -216
- package/apps/lib/components/DataViews/DataViewRadio.tsx +1 -6
- package/apps/lib/components/DataViews/DataViewsConfigPanel.tsx +13 -47
- package/apps/lib/components/DataViews/DataViewsHeader.tsx +1 -3
- package/apps/lib/components/DataViews/DataViewsLayout.tsx +5 -12
- package/apps/lib/components/DataViews/FilterPanel.tsx +155 -149
- package/apps/lib/components/DataViews/HeaderSearch.tsx +1 -5
- package/apps/lib/components/DataViews/InboxView.tsx +22 -68
- package/apps/lib/components/DataViews/InboxViewCard.tsx +68 -77
- package/apps/lib/components/DataViews/KanbanView.tsx +8 -25
- package/apps/lib/components/DataViews/PanelControls.tsx +3 -13
- package/apps/lib/components/DataViews/SettingsPanel.tsx +83 -89
- package/apps/lib/components/DataViews/TableView.tsx +8 -28
- package/apps/lib/components/DataViews/TreeView.tsx +12 -40
- package/apps/lib/components/DataViews/badgeAdapter.ts +32 -28
- package/apps/lib/components/DataViews/fieldRenderers.tsx +106 -141
- package/apps/lib/components/DataViews/filters/DatePickerRangeFilter.tsx +30 -23
- package/apps/lib/components/DataViews/filters/DateRangePopover.tsx +39 -32
- package/apps/lib/components/DataViews/filters/PresetChips.tsx +15 -15
- package/apps/lib/components/DataViews/filters/RangeSliderWithInputs.tsx +69 -58
- package/apps/lib/components/DataViews/index.ts +26 -26
- package/apps/lib/components/DataViews/tree/TreeDrawer.tsx +12 -16
- package/apps/lib/components/DataViews/tree/TreeSidebar.tsx +28 -31
- package/apps/lib/components/DataViews/types.ts +104 -115
- package/apps/lib/components/DatePicker.tsx +198 -196
- package/apps/lib/components/Dialog.tsx +92 -105
- package/apps/lib/components/Divider.tsx +21 -24
- package/apps/lib/components/Drawer.tsx +79 -139
- package/apps/lib/components/DropdownMenu.tsx +131 -171
- package/apps/lib/components/FieldHint.tsx +4 -11
- package/apps/lib/components/Form.tsx +146 -155
- package/apps/lib/components/FormStepper.tsx +9 -39
- package/apps/lib/components/HeaderBar.tsx +1 -9
- package/apps/lib/components/ImageAttachment.tsx +111 -73
- package/apps/lib/components/InnerLabelField.tsx +20 -16
- package/apps/lib/components/Input.tsx +171 -172
- package/apps/lib/components/InputField.tsx +44 -45
- package/apps/lib/components/InputOTP.tsx +68 -69
- package/apps/lib/components/Label.tsx +31 -35
- package/apps/lib/components/LabelField.tsx +4 -5
- package/apps/lib/components/LabeledCheckBox.tsx +8 -12
- package/apps/lib/components/LabeledRadio.tsx +7 -5
- package/apps/lib/components/LinkButton.tsx +2 -9
- package/apps/lib/components/LoginButton.tsx +4 -9
- package/apps/lib/components/PasswordLevel.tsx +5 -5
- package/apps/lib/components/Popover.tsx +15 -33
- package/apps/lib/components/ProfileMenu.tsx +67 -72
- package/apps/lib/components/Radio.tsx +1 -5
- package/apps/lib/components/RadioCard.tsx +9 -28
- package/apps/lib/components/ScrollArea.tsx +45 -43
- package/apps/lib/components/SearchField.tsx +49 -39
- package/apps/lib/components/SearchableSelect.tsx +8 -14
- package/apps/lib/components/SearchableTable.tsx +108 -118
- package/apps/lib/components/SearchableTree.tsx +469 -0
- package/apps/lib/components/SearchableTreeDialog.tsx +493 -0
- package/apps/lib/components/SectionBlock.tsx +4 -16
- package/apps/lib/components/Select.tsx +53 -80
- package/apps/lib/components/SimpleSelect.tsx +196 -187
- package/apps/lib/components/Skeleton.tsx +9 -12
- package/apps/lib/components/SlideDatePicker.tsx +215 -166
- package/apps/lib/components/SpinLoading.tsx +33 -49
- package/apps/lib/components/Stepper.tsx +13 -56
- package/apps/lib/components/Switch.tsx +8 -10
- package/apps/lib/components/TabFormItem.tsx +3 -12
- package/apps/lib/components/TabSwitch.tsx +7 -34
- package/apps/lib/components/Table.tsx +60 -75
- package/apps/lib/components/TableDnDWrapper.ts +15 -48
- package/apps/lib/components/TextEditor.tsx +93 -104
- package/apps/lib/components/Textarea.tsx +8 -12
- package/apps/lib/components/Timeline.tsx +21 -41
- package/apps/lib/components/Toast.tsx +83 -83
- package/apps/lib/components/Toggle.tsx +112 -114
- package/apps/lib/components/ToggleButton.tsx +1 -1
- package/apps/lib/components/Tooltip.tsx +24 -19
- package/apps/lib/components/TransparentLabel.tsx +61 -62
- package/apps/lib/components/TreeDropDown.tsx +86 -52
- package/apps/lib/components/TreeFolder/TreeFolder.tsx +15 -48
- package/apps/lib/components/TreeFolder/TreeFolderBreadcrumb.tsx +16 -21
- package/apps/lib/components/TreeFolder/TreeFolderRow.tsx +9 -20
- package/apps/lib/components/TreeFolder/TreeFolderStyles.tsx +3 -3
- package/apps/lib/components/TreeFolder/icons.tsx +14 -17
- package/apps/lib/components/TreeFolder/index.ts +15 -8
- package/apps/lib/components/TreeFolder/treeFolderUtils.ts +47 -52
- package/apps/lib/components/TreeFolder/types.ts +32 -32
- package/apps/lib/components/TreeFolder/useTreeFolderDnD.ts +117 -123
- package/apps/lib/hooks/useActiveTreeItem.ts +52 -55
- package/apps/lib/hooks/useClickOutside.ts +21 -20
- package/apps/lib/hooks/useDataViewsState.ts +86 -80
- package/apps/lib/hooks/useIsMobile.ts +12 -12
- package/apps/lib/hooks/useResize.ts +54 -65
- package/apps/lib/hooks/useTagSelection.ts +201 -201
- package/apps/lib/layouts/CNLayout.tsx +181 -140
- package/apps/lib/layouts/DataViewCard.tsx +4 -18
- package/apps/lib/layouts/FieldSection.tsx +2 -6
- package/apps/lib/layouts/TreeSubLayout.tsx +24 -38
- package/apps/lib/providers/ThemeProvider.tsx +8 -23
- package/apps/lib/registry.json +1004 -0
- package/apps/lib/tsconfig.json +9 -0
- package/apps/lib/utils/cn.ts +1 -1
- package/apps/lib/utils/dataViews/columnUtils.ts +46 -44
- package/apps/lib/utils/dataViews/fieldUtils.ts +70 -71
- package/apps/lib/utils/dataViews/nestedDataUtils.tsx +129 -122
- package/apps/lib/utils/dataViews/pathUtils.ts +74 -67
- package/apps/lib/utils/dataViews/rangeUtils.ts +121 -112
- package/apps/lib/utils/dataViews/treeUtils.ts +204 -211
- package/apps/lib/utils/dateFormat.ts +64 -54
- package/apps/lib/utils/markdownParser.ts +2 -7
- package/apps/lib/utils/resize.ts +21 -25
- package/apps/lib/utils/types.ts +13 -13
- package/dist/bin/index.js +8 -2
- package/dist/bin/index.js.map +1 -1
- package/dist/src/shared/getAvailableFiles.d.ts.map +1 -1
- package/dist/src/shared/getAvailableFiles.js +6 -1
- package/dist/src/shared/getAvailableFiles.js.map +1 -1
- package/dist/src/shared/loadRegistry.d.ts +7 -0
- package/dist/src/shared/loadRegistry.d.ts.map +1 -0
- package/dist/src/shared/loadRegistry.js +31 -0
- package/dist/src/shared/loadRegistry.js.map +1 -0
- package/dist/src/shared/resolveInstallPlan.d.ts +12 -0
- package/dist/src/shared/resolveInstallPlan.d.ts.map +1 -0
- package/dist/src/shared/resolveInstallPlan.js +39 -0
- package/dist/src/shared/resolveInstallPlan.js.map +1 -0
- package/dist/src/types/main.d.ts +24 -0
- package/dist/src/types/main.d.ts.map +1 -1
- package/docs/README.md +10 -2
- package/docs/components/action-button.md +30 -24
- package/docs/components/actions-group.md +26 -20
- package/docs/components/alert-dialog.md +45 -45
- package/docs/components/avatar.md +6 -2
- package/docs/components/badge-field.md +6 -2
- package/docs/components/badge.md +7 -1
- package/docs/components/breadcrumb.md +15 -40
- package/docs/components/button-group.md +13 -10
- package/docs/components/button.md +58 -33
- package/docs/components/calendar.md +26 -19
- package/docs/components/card.md +19 -16
- package/docs/components/chart-block-tool.md +128 -0
- package/docs/components/checkbox.md +16 -8
- package/docs/components/cn-layout.md +7 -1
- package/docs/components/context-menu.md +18 -25
- package/docs/components/count-badge.md +7 -1
- package/docs/components/data-table.md +45 -33
- package/docs/components/data-views-config-panel.md +15 -11
- package/docs/components/data-views-layout.md +13 -16
- package/docs/components/date-picker.md +30 -23
- package/docs/components/dialog.md +43 -42
- package/docs/components/divider.md +10 -4
- package/docs/components/drawer.md +8 -33
- package/docs/components/dropdown-menu.md +25 -34
- package/docs/components/field-hint.md +37 -25
- package/docs/components/field-section.md +9 -3
- package/docs/components/form-stepper.md +6 -0
- package/docs/components/form.md +17 -20
- package/docs/components/header-bar.md +6 -0
- package/docs/components/image-attachment.md +33 -41
- package/docs/components/inbox-view.md +16 -5
- package/docs/components/inner-label-field.md +34 -24
- package/docs/components/input-field.md +18 -10
- package/docs/components/input-otp.md +14 -11
- package/docs/components/input.md +22 -16
- package/docs/components/kanban-view.md +15 -5
- package/docs/components/label-field.md +32 -22
- package/docs/components/label.md +43 -32
- package/docs/components/labeled-check-box.md +16 -8
- package/docs/components/labeled-radio.md +18 -11
- package/docs/components/link-button.md +7 -1
- package/docs/components/login-button.md +8 -2
- package/docs/components/password-level.md +37 -24
- package/docs/components/popover.md +26 -23
- package/docs/components/profile-menu.md +38 -27
- package/docs/components/radio-card.md +16 -9
- package/docs/components/radio.md +16 -8
- package/docs/components/scroll-area.md +6 -2
- package/docs/components/search-field.md +14 -6
- package/docs/components/searchable-select.md +19 -14
- package/docs/components/searchable-table.md +18 -13
- package/docs/components/searchable-tree-dialog.md +190 -0
- package/docs/components/searchable-tree.md +200 -0
- package/docs/components/section-block.md +12 -4
- package/docs/components/select.md +23 -18
- package/docs/components/simple-select.md +14 -10
- package/docs/components/skeleton.md +43 -33
- package/docs/components/slide-date-picker.md +37 -29
- package/docs/components/spin-loading.md +32 -23
- package/docs/components/stepper.md +6 -0
- package/docs/components/switch.md +14 -6
- package/docs/components/tab-form-item.md +7 -1
- package/docs/components/tab-switch.md +13 -6
- package/docs/components/table-dnd-wrapper.md +105 -0
- package/docs/components/table-view.md +15 -5
- package/docs/components/table.md +28 -28
- package/docs/components/text-editor.md +19 -13
- package/docs/components/textarea.md +15 -7
- package/docs/components/timeline.md +6 -0
- package/docs/components/toast.md +35 -26
- package/docs/components/toggle-button.md +24 -21
- package/docs/components/toggle.md +23 -15
- package/docs/components/tooltip.md +42 -30
- package/docs/components/transparent-label.md +29 -20
- package/docs/components/tree-drop-down.md +31 -23
- package/docs/components/tree-sub-layout.md +6 -2
- package/docs/components/tree-view.md +16 -5
- package/docs/explanation/architecture.md +54 -0
- package/docs/explanation/design-system.md +52 -0
- package/docs/how-to/data-views-from-backend-response.md +6 -4
- package/docs/how-to/guides.md +24 -18
- package/docs/migration/changelog.md +38 -0
- package/docs/reference/cli.md +87 -0
- package/docs/reference/components.md +11 -12
- package/docs/reference/hooks.md +8 -8
- package/docs/reference/providers.md +22 -22
- package/docs/reference/tailwind-plugins.md +2 -2
- package/docs/reference/theme.md +85 -0
- package/docs/reference/types.md +4 -4
- package/docs/reference/utilities.md +19 -26
- package/docs/tutorials/building-first-form.md +20 -13
- package/docs/tutorials/component-composition.md +34 -50
- package/docs/tutorials/getting-started.md +2 -2
- package/docs/tutorials/theming-basics.md +13 -10
- package/package.json +31 -3
- package/dist/src/commands/block.d.ts +0 -5
- package/dist/src/commands/block.d.ts.map +0 -1
- package/dist/src/commands/block.js +0 -255
- package/dist/src/commands/block.js.map +0 -1
- package/dist/src/shared/configureFonts.d.ts +0 -6
- package/dist/src/shared/configureFonts.d.ts.map +0 -1
- package/dist/src/shared/configureFonts.js +0 -106
- package/dist/src/shared/configureFonts.js.map +0 -1
- package/dist/src/shared/configureGlobalCss.d.ts +0 -6
- package/dist/src/shared/configureGlobalCss.d.ts.map +0 -1
- package/dist/src/shared/configureGlobalCss.js +0 -154
- package/dist/src/shared/configureGlobalCss.js.map +0 -1
- package/dist/src/shared/configureTailwind.d.ts +0 -7
- package/dist/src/shared/configureTailwind.d.ts.map +0 -1
- package/dist/src/shared/configureTailwind.js +0 -163
- package/dist/src/shared/configureTailwind.js.map +0 -1
- package/dist/src/shared/detectFramework.d.ts +0 -23
- package/dist/src/shared/detectFramework.d.ts.map +0 -1
- package/dist/src/shared/detectFramework.js +0 -119
- package/dist/src/shared/detectFramework.js.map +0 -1
- package/dist/src/shared/installBaseUtils.d.ts +0 -5
- package/dist/src/shared/installBaseUtils.d.ts.map +0 -1
- package/dist/src/shared/installBaseUtils.js +0 -79
- package/dist/src/shared/installBaseUtils.js.map +0 -1
- package/dist/src/shared/resolveAliases.d.ts +0 -24
- package/dist/src/shared/resolveAliases.d.ts.map +0 -1
- package/dist/src/shared/resolveAliases.js +0 -98
- package/dist/src/shared/resolveAliases.js.map +0 -1
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import React, {
|
|
4
|
-
forwardRef,
|
|
5
|
-
HTMLAttributes,
|
|
6
|
-
ReactNode,
|
|
7
|
-
createContext,
|
|
8
|
-
useContext,
|
|
9
|
-
} from "react";
|
|
3
|
+
import React, { forwardRef, HTMLAttributes, ReactNode, createContext, useContext } from "react";
|
|
10
4
|
import { cva, type VariantProps } from "class-variance-authority";
|
|
11
5
|
import { cn } from "../utils/cn";
|
|
12
6
|
import { Themes } from "../utils/types";
|
|
@@ -41,25 +35,14 @@ const stepperStyles = cva(["flex gap-0"], {
|
|
|
41
35
|
},
|
|
42
36
|
});
|
|
43
37
|
|
|
44
|
-
interface StepperProps
|
|
45
|
-
extends HTMLAttributes<HTMLDivElement>, VariantProps<typeof stepperStyles> {
|
|
38
|
+
interface StepperProps extends HTMLAttributes<HTMLDivElement>, VariantProps<typeof stepperStyles> {
|
|
46
39
|
theme?: Themes;
|
|
47
40
|
activeStep?: number;
|
|
48
41
|
size?: "S" | "M" | "L";
|
|
49
42
|
}
|
|
50
43
|
|
|
51
44
|
const Stepper = forwardRef<HTMLDivElement, StepperProps>(
|
|
52
|
-
(
|
|
53
|
-
{
|
|
54
|
-
className,
|
|
55
|
-
orientation = "horizontal",
|
|
56
|
-
theme,
|
|
57
|
-
activeStep = 0,
|
|
58
|
-
size = "M",
|
|
59
|
-
...props
|
|
60
|
-
},
|
|
61
|
-
ref,
|
|
62
|
-
) => (
|
|
45
|
+
({ className, orientation = "horizontal", theme, activeStep = 0, size = "M", ...props }, ref) => (
|
|
63
46
|
<StepperContext.Provider
|
|
64
47
|
value={{
|
|
65
48
|
activeStep,
|
|
@@ -89,18 +72,7 @@ interface StepProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
89
72
|
}
|
|
90
73
|
|
|
91
74
|
const Step = forwardRef<HTMLDivElement, StepProps>(
|
|
92
|
-
(
|
|
93
|
-
{
|
|
94
|
-
className,
|
|
95
|
-
index = 0,
|
|
96
|
-
isCompleted,
|
|
97
|
-
isActive,
|
|
98
|
-
isError,
|
|
99
|
-
children,
|
|
100
|
-
...props
|
|
101
|
-
},
|
|
102
|
-
ref,
|
|
103
|
-
) => {
|
|
75
|
+
({ className, index = 0, isCompleted, isActive, isError, children, ...props }, ref) => {
|
|
104
76
|
const { activeStep, orientation } = useStepperContext();
|
|
105
77
|
|
|
106
78
|
const computedActive = isActive ?? index === activeStep;
|
|
@@ -116,16 +88,14 @@ const Step = forwardRef<HTMLDivElement, StepProps>(
|
|
|
116
88
|
data-orientation={orientation}
|
|
117
89
|
className={cn(
|
|
118
90
|
"flex group/step",
|
|
119
|
-
orientation === "horizontal"
|
|
120
|
-
? "shrink-0 flex-col items-center gap-2"
|
|
121
|
-
: "flex-row gap-3",
|
|
91
|
+
orientation === "horizontal" ? "shrink-0 flex-col items-center gap-2" : "flex-row gap-3",
|
|
122
92
|
className,
|
|
123
93
|
)}
|
|
124
94
|
{...props}
|
|
125
95
|
>
|
|
126
96
|
{React.Children.map(children, (child) => {
|
|
127
97
|
if (!React.isValidElement(child)) return child;
|
|
128
|
-
return React.cloneElement(child as React.ReactElement<
|
|
98
|
+
return React.cloneElement(child as React.ReactElement<Record<string, unknown>>, {
|
|
129
99
|
_active: computedActive,
|
|
130
100
|
_completed: computedCompleted,
|
|
131
101
|
_error: computedError,
|
|
@@ -213,13 +183,7 @@ const StepIndicator = forwardRef<HTMLDivElement, StepIndicatorProps>(
|
|
|
213
183
|
) => {
|
|
214
184
|
const { size } = useStepperContext();
|
|
215
185
|
|
|
216
|
-
const state = _error
|
|
217
|
-
? "error"
|
|
218
|
-
: _completed
|
|
219
|
-
? "completed"
|
|
220
|
-
: _active
|
|
221
|
-
? "active"
|
|
222
|
-
: "pending";
|
|
186
|
+
const state = _error ? "error" : _completed ? "completed" : _active ? "active" : "pending";
|
|
223
187
|
|
|
224
188
|
const renderContent = () => {
|
|
225
189
|
if (_error && errorIcon) return errorIcon;
|
|
@@ -232,11 +196,7 @@ const StepIndicator = forwardRef<HTMLDivElement, StepIndicatorProps>(
|
|
|
232
196
|
};
|
|
233
197
|
|
|
234
198
|
return (
|
|
235
|
-
<div
|
|
236
|
-
ref={ref}
|
|
237
|
-
className={cn(stepIndicatorStyles({ state, size }), className)}
|
|
238
|
-
{...props}
|
|
239
|
-
>
|
|
199
|
+
<div ref={ref} className={cn(stepIndicatorStyles({ state, size }), className)} {...props}>
|
|
240
200
|
{renderContent()}
|
|
241
201
|
</div>
|
|
242
202
|
);
|
|
@@ -277,10 +237,8 @@ interface StepConnectorProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
277
237
|
}
|
|
278
238
|
|
|
279
239
|
const StepConnector = forwardRef<HTMLDivElement, StepConnectorProps>(
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
ref,
|
|
283
|
-
) => {
|
|
240
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars -- excluded from {...props} spread
|
|
241
|
+
({ className, _completed, _active: _a, _error: _e, _index: _i, ...props }, ref) => {
|
|
284
242
|
const { orientation } = useStepperContext();
|
|
285
243
|
|
|
286
244
|
return (
|
|
@@ -310,6 +268,7 @@ interface StepLabelProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
310
268
|
}
|
|
311
269
|
|
|
312
270
|
const StepLabel = forwardRef<HTMLDivElement, StepLabelProps>(
|
|
271
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars -- excluded from {...props} spread
|
|
313
272
|
({ className, _active, _completed, _error, _index: _i, ...props }, ref) => (
|
|
314
273
|
<div
|
|
315
274
|
ref={ref}
|
|
@@ -340,10 +299,8 @@ interface StepDescriptionProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
340
299
|
}
|
|
341
300
|
|
|
342
301
|
const StepDescription = forwardRef<HTMLDivElement, StepDescriptionProps>(
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
ref,
|
|
346
|
-
) => (
|
|
302
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars -- excluded from {...props} spread
|
|
303
|
+
({ className, _active, _completed: _c, _error: _e, _index: _i, ...props }, ref) => (
|
|
347
304
|
<div
|
|
348
305
|
ref={ref}
|
|
349
306
|
className={cn(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
"use client";
|
|
2
2
|
import { cn } from "../utils/cn";
|
|
3
|
-
import * as SwitchPrimitives from "@radix-ui/react-switch"
|
|
3
|
+
import * as SwitchPrimitives from "@radix-ui/react-switch";
|
|
4
4
|
import React from "react";
|
|
5
5
|
|
|
6
6
|
const Switch = React.forwardRef<
|
|
@@ -10,7 +10,7 @@ const Switch = React.forwardRef<
|
|
|
10
10
|
<SwitchPrimitives.Root
|
|
11
11
|
className={cn(
|
|
12
12
|
"peer inline-flex w-[48px] h-[27px] shrink-0 cursor-pointer items-center rounded-[20px] border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-background-presentation-switcher-active data-[state=unchecked]:bg-background-presentation-switcher-disabled",
|
|
13
|
-
className
|
|
13
|
+
className,
|
|
14
14
|
)}
|
|
15
15
|
{...props}
|
|
16
16
|
ref={ref}
|
|
@@ -19,16 +19,14 @@ const Switch = React.forwardRef<
|
|
|
19
19
|
className={cn(
|
|
20
20
|
"pointer-events-none block w-[24px] h-[24px] rounded-full bg-background-presentation-switcher-knob shadow-lg ring-0 transition-transform",
|
|
21
21
|
"data-[state=checked]:translate-x-[21px] data-[state=unchecked]:translate-x-0",
|
|
22
|
-
"rtl:data-[state=checked]:-translate-x-[21px] rtl:data-[state=unchecked]:translate-x-0"
|
|
22
|
+
"rtl:data-[state=checked]:-translate-x-[21px] rtl:data-[state=unchecked]:translate-x-0",
|
|
23
23
|
)}
|
|
24
24
|
/>
|
|
25
25
|
</SwitchPrimitives.Root>
|
|
26
|
-
))
|
|
27
|
-
Switch.displayName = SwitchPrimitives.Root.displayName
|
|
28
|
-
|
|
29
|
-
export { Switch }
|
|
30
|
-
|
|
26
|
+
));
|
|
27
|
+
Switch.displayName = SwitchPrimitives.Root.displayName;
|
|
31
28
|
|
|
29
|
+
export { Switch };
|
|
32
30
|
|
|
33
31
|
/* interface Props extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
34
32
|
active: boolean;
|
|
@@ -81,4 +79,4 @@ function Switchers({
|
|
|
81
79
|
)}
|
|
82
80
|
</section>
|
|
83
81
|
);
|
|
84
|
-
} */
|
|
82
|
+
} */
|
|
@@ -12,7 +12,6 @@ interface Props extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
|
12
12
|
as?: React.ElementType;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
|
|
16
15
|
const TabFormItem: React.FC<Props> = ({
|
|
17
16
|
componentType,
|
|
18
17
|
active,
|
|
@@ -23,17 +22,13 @@ const TabFormItem: React.FC<Props> = ({
|
|
|
23
22
|
as: Tag = "button",
|
|
24
23
|
...props
|
|
25
24
|
}) => {
|
|
26
|
-
|
|
27
25
|
const Component = asChild ? Slot : Tag;
|
|
28
26
|
|
|
29
27
|
return (
|
|
30
28
|
<Component
|
|
31
29
|
data-theme={theme}
|
|
32
30
|
{...props}
|
|
33
|
-
className={cn(
|
|
34
|
-
formBarItemStyles({ componentType, active, buttonType }),
|
|
35
|
-
className
|
|
36
|
-
)}
|
|
31
|
+
className={cn(formBarItemStyles({ componentType, active, buttonType }), className)}
|
|
37
32
|
>
|
|
38
33
|
{props.children}
|
|
39
34
|
</Component>
|
|
@@ -42,9 +37,6 @@ const TabFormItem: React.FC<Props> = ({
|
|
|
42
37
|
|
|
43
38
|
export default TabFormItem;
|
|
44
39
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
40
|
export const formBarItemStyles = cva(
|
|
49
41
|
[
|
|
50
42
|
"flex",
|
|
@@ -156,7 +148,6 @@ export const formBarItemStyles = cva(
|
|
|
156
148
|
"text-content-presentation-tab-action-selected hover:text-content-presentation-tab-action-selected",
|
|
157
149
|
],
|
|
158
150
|
},
|
|
159
|
-
|
|
160
151
|
],
|
|
161
|
-
}
|
|
162
|
-
);
|
|
152
|
+
},
|
|
153
|
+
);
|
|
@@ -59,21 +59,9 @@ const optionStyles = cva(
|
|
|
59
59
|
{
|
|
60
60
|
variants: {
|
|
61
61
|
size: {
|
|
62
|
-
S: [
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
"[&_i]:text-[12px]",
|
|
66
|
-
],
|
|
67
|
-
M: [
|
|
68
|
-
"h-6 px-3 text-[14px]",
|
|
69
|
-
"[&_svg]:h-[14px] [&_svg]:w-[14px]",
|
|
70
|
-
"[&_i]:text-[14px]",
|
|
71
|
-
],
|
|
72
|
-
L: [
|
|
73
|
-
"h-8 px-4 text-[16px]",
|
|
74
|
-
"[&_svg]:h-4 [&_svg]:w-4",
|
|
75
|
-
"[&_i]:text-[16px]",
|
|
76
|
-
],
|
|
62
|
+
S: ["h-5 px-2 text-[12px]", "[&_svg]:h-3 [&_svg]:w-3", "[&_i]:text-[12px]"],
|
|
63
|
+
M: ["h-6 px-3 text-[14px]", "[&_svg]:h-[14px] [&_svg]:w-[14px]", "[&_i]:text-[14px]"],
|
|
64
|
+
L: ["h-8 px-4 text-[16px]", "[&_svg]:h-4 [&_svg]:w-4", "[&_i]:text-[16px]"],
|
|
77
65
|
},
|
|
78
66
|
active: {
|
|
79
67
|
// Active option = a solid raised WHITE pill with dark text, in every
|
|
@@ -102,9 +90,7 @@ const optionStyles = cva(
|
|
|
102
90
|
);
|
|
103
91
|
|
|
104
92
|
interface Props<T extends string = string>
|
|
105
|
-
extends
|
|
106
|
-
Omit<React.HTMLAttributes<HTMLDivElement>, "onChange">,
|
|
107
|
-
VariantProps<typeof trackStyles> {
|
|
93
|
+
extends Omit<React.HTMLAttributes<HTMLDivElement>, "onChange">, VariantProps<typeof trackStyles> {
|
|
108
94
|
options: TabSwitchOption<T>[];
|
|
109
95
|
/** Controlled selected value. */
|
|
110
96
|
value: T;
|
|
@@ -114,16 +100,7 @@ interface Props<T extends string = string>
|
|
|
114
100
|
}
|
|
115
101
|
|
|
116
102
|
function TabSwitchInner<T extends string = string>(
|
|
117
|
-
{
|
|
118
|
-
options,
|
|
119
|
-
value,
|
|
120
|
-
onValueChange,
|
|
121
|
-
size,
|
|
122
|
-
theme,
|
|
123
|
-
disabled,
|
|
124
|
-
className,
|
|
125
|
-
...props
|
|
126
|
-
}: Props<T>,
|
|
103
|
+
{ options, value, onValueChange, size, theme, disabled, className, ...props }: Props<T>,
|
|
127
104
|
ref: React.ForwardedRef<HTMLDivElement>,
|
|
128
105
|
) {
|
|
129
106
|
return (
|
|
@@ -157,9 +134,7 @@ function TabSwitchInner<T extends string = string>(
|
|
|
157
134
|
className={cn(optionStyles({ size, active }))}
|
|
158
135
|
>
|
|
159
136
|
{option.icon && (
|
|
160
|
-
<span className="flex items-center justify-center">
|
|
161
|
-
{option.icon}
|
|
162
|
-
</span>
|
|
137
|
+
<span className="flex items-center justify-center">{option.icon}</span>
|
|
163
138
|
)}
|
|
164
139
|
{option.label}
|
|
165
140
|
</button>
|
|
@@ -171,9 +146,7 @@ function TabSwitchInner<T extends string = string>(
|
|
|
171
146
|
}
|
|
172
147
|
|
|
173
148
|
// forwardRef loses the generic, so we cast to preserve `<TabSwitch<T> />` typing.
|
|
174
|
-
export const TabSwitch = forwardRef(TabSwitchInner) as <
|
|
175
|
-
T extends string = string,
|
|
176
|
-
>(
|
|
149
|
+
export const TabSwitch = forwardRef(TabSwitchInner) as <T extends string = string>(
|
|
177
150
|
props: Props<T> & { ref?: React.ForwardedRef<HTMLDivElement> },
|
|
178
151
|
) => ReturnType<typeof TabSwitchInner>;
|
|
179
152
|
|
|
@@ -18,10 +18,7 @@ const Table = React.forwardRef<
|
|
|
18
18
|
<table
|
|
19
19
|
data-theme={theme}
|
|
20
20
|
ref={ref}
|
|
21
|
-
className={cn(
|
|
22
|
-
"overflow-hidden w-auto [border-collapse:separate] border-spacing-0",
|
|
23
|
-
className,
|
|
24
|
-
)}
|
|
21
|
+
className={cn("overflow-hidden w-auto [border-collapse:separate] border-spacing-0", className)}
|
|
25
22
|
{...props}
|
|
26
23
|
>
|
|
27
24
|
{props.children}
|
|
@@ -54,9 +51,7 @@ TableBody.displayName = "TableBody";
|
|
|
54
51
|
const TableFooter = React.forwardRef<
|
|
55
52
|
HTMLTableSectionElement,
|
|
56
53
|
React.HTMLAttributes<HTMLTableSectionElement>
|
|
57
|
-
>(({ className, ...props }, ref) => (
|
|
58
|
-
<tfoot ref={ref} className={cn(className)} {...props} />
|
|
59
|
-
));
|
|
54
|
+
>(({ className, ...props }, ref) => <tfoot ref={ref} className={cn(className)} {...props} />);
|
|
60
55
|
TableFooter.displayName = "TableFooter";
|
|
61
56
|
|
|
62
57
|
const TableRow = React.forwardRef<
|
|
@@ -103,68 +98,61 @@ TableRow.displayName = "TableRow";
|
|
|
103
98
|
const TableHead = React.forwardRef<
|
|
104
99
|
HTMLTableCellElement,
|
|
105
100
|
React.ThHTMLAttributes<HTMLTableCellElement> &
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
>(
|
|
113
|
-
(
|
|
114
|
-
|
|
115
|
-
forwardedRef,
|
|
116
|
-
) => {
|
|
117
|
-
const headRef = useRef<any>(null);
|
|
118
|
-
const { width, handleStartResize } = useResize(headRef);
|
|
101
|
+
TableHeadVariantsProps &
|
|
102
|
+
React.ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
103
|
+
sortType?: "asc" | "desc" | undefined;
|
|
104
|
+
onSort?: () => void;
|
|
105
|
+
isDummy?: boolean;
|
|
106
|
+
}
|
|
107
|
+
>(({ className, size = "M", disabled, sortType, onSort, isDummy, ...props }, forwardedRef) => {
|
|
108
|
+
const headRef = useRef<HTMLTableCellElement>(null);
|
|
109
|
+
const { width, handleStartResize } = useResize(headRef as React.RefObject<HTMLElement>);
|
|
119
110
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
111
|
+
// Combine refs using useEffect
|
|
112
|
+
React.useEffect(() => {
|
|
113
|
+
if (!forwardedRef) return;
|
|
114
|
+
if (typeof forwardedRef === "function") forwardedRef(headRef.current);
|
|
115
|
+
else forwardedRef.current = headRef.current;
|
|
116
|
+
}, [forwardedRef]);
|
|
126
117
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
118
|
+
return (
|
|
119
|
+
<th
|
|
120
|
+
ref={headRef}
|
|
121
|
+
className={cn(
|
|
122
|
+
"relative py-[6px] px-[4px] border-b-[2px] border-border-presentation-table-header",
|
|
123
|
+
)}
|
|
124
|
+
>
|
|
125
|
+
<div
|
|
126
|
+
{...props}
|
|
130
127
|
className={cn(
|
|
131
|
-
|
|
128
|
+
tableHeadVariants({ size, disabled, isDummy }),
|
|
129
|
+
{ "min-w-[100px]": !isDummy },
|
|
130
|
+
className,
|
|
132
131
|
)}
|
|
133
132
|
>
|
|
134
133
|
<div
|
|
135
|
-
{
|
|
136
|
-
className={cn(
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
className,
|
|
140
|
-
)}
|
|
134
|
+
style={{ width: `${width}px` }}
|
|
135
|
+
className={cn("flex items-center justify-between flex-1", {
|
|
136
|
+
"justify-center": isDummy,
|
|
137
|
+
})}
|
|
141
138
|
>
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
className={cn("flex items-center justify-between flex-1", {
|
|
145
|
-
"justify-center": isDummy,
|
|
146
|
-
})}
|
|
147
|
-
>
|
|
148
|
-
{props.children}
|
|
149
|
-
{isDummy || !onSort ? null : (
|
|
150
|
-
<SortButton onSort={onSort} sortType={sortType} />
|
|
151
|
-
)}
|
|
152
|
-
</div>
|
|
139
|
+
{props.children}
|
|
140
|
+
{isDummy || !onSort ? null : <SortButton onSort={onSort} sortType={sortType} />}
|
|
153
141
|
</div>
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
</
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
);
|
|
142
|
+
</div>
|
|
143
|
+
<button
|
|
144
|
+
disabled={isDummy}
|
|
145
|
+
className="absolute top-[50%] translate-y-[-50%] right-[-1px] rtl:left-[-1px] rtl:right-[unset] h-[20px] w-[2px] rounded-full bg-border-presentation-action-primary"
|
|
146
|
+
>
|
|
147
|
+
<ResizeIcon
|
|
148
|
+
className={cn({ "!opacity-0 cursor-default": isDummy })}
|
|
149
|
+
onMouseDown={handleStartResize}
|
|
150
|
+
onTouchStart={handleStartResize}
|
|
151
|
+
/>
|
|
152
|
+
</button>
|
|
153
|
+
</th>
|
|
154
|
+
);
|
|
155
|
+
});
|
|
168
156
|
TableHead.displayName = "TableHead";
|
|
169
157
|
|
|
170
158
|
const TableCell = React.forwardRef<
|
|
@@ -209,6 +197,7 @@ const TableCheckbox = React.forwardRef<
|
|
|
209
197
|
React.ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
210
198
|
id: string;
|
|
211
199
|
}
|
|
200
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars -- id destructured to exclude it from the props spread onto Checkbox
|
|
212
201
|
>(({ className, id, ...props }, ref) => {
|
|
213
202
|
return (
|
|
214
203
|
<div className={cn(["flex items-center justify-center"], className)}>
|
|
@@ -222,11 +211,7 @@ const TableCaption = React.forwardRef<
|
|
|
222
211
|
HTMLTableCaptionElement,
|
|
223
212
|
React.HTMLAttributes<HTMLTableCaptionElement>
|
|
224
213
|
>(({ className, ...props }, ref) => (
|
|
225
|
-
<caption
|
|
226
|
-
ref={ref}
|
|
227
|
-
className={cn("mt-4 text-sm text-muted-foreground", className)}
|
|
228
|
-
{...props}
|
|
229
|
-
/>
|
|
214
|
+
<caption ref={ref} className={cn("mt-4 text-sm text-muted-foreground", className)} {...props} />
|
|
230
215
|
));
|
|
231
216
|
TableCaption.displayName = "TableCaption";
|
|
232
217
|
|
|
@@ -308,7 +293,13 @@ export {
|
|
|
308
293
|
TableFooterButton,
|
|
309
294
|
};
|
|
310
295
|
|
|
311
|
-
|
|
296
|
+
interface ResizeIconProps {
|
|
297
|
+
className?: string;
|
|
298
|
+
onMouseDown?: React.MouseEventHandler<SVGElement>;
|
|
299
|
+
onTouchStart?: React.TouchEventHandler<SVGElement>;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
const ResizeIcon = (props: ResizeIconProps) => {
|
|
312
303
|
return (
|
|
313
304
|
<svg
|
|
314
305
|
{...props}
|
|
@@ -343,10 +334,7 @@ const SortButton = ({
|
|
|
343
334
|
sortType?: "asc" | "desc" | undefined;
|
|
344
335
|
}) => {
|
|
345
336
|
return (
|
|
346
|
-
<button
|
|
347
|
-
className={cn("cursor-pointer text-[16px] z-10")}
|
|
348
|
-
onPointerDown={onSort}
|
|
349
|
-
>
|
|
337
|
+
<button className={cn("cursor-pointer text-[16px] z-10")} onPointerDown={onSort}>
|
|
350
338
|
{sortType === "asc" ? (
|
|
351
339
|
<i className="ri-arrow-up-line text-border-presentation-state-focus" />
|
|
352
340
|
) : sortType === "desc" ? (
|
|
@@ -389,10 +377,7 @@ const tableHeadVariants = cva(
|
|
|
389
377
|
],
|
|
390
378
|
},
|
|
391
379
|
isDummy: {
|
|
392
|
-
true: [
|
|
393
|
-
"hover:bg-transparent",
|
|
394
|
-
"hover:text-content-presentation-global-primary",
|
|
395
|
-
],
|
|
380
|
+
true: ["hover:bg-transparent", "hover:text-content-presentation-global-primary"],
|
|
396
381
|
},
|
|
397
382
|
defaultVariants: {
|
|
398
383
|
size: "M",
|
|
@@ -27,9 +27,7 @@ interface DragState {
|
|
|
27
27
|
startY: number;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
export default function createTableDnDClass(
|
|
31
|
-
OriginalTable: TableClass,
|
|
32
|
-
): TableClass {
|
|
30
|
+
export default function createTableDnDClass(OriginalTable: TableClass): TableClass {
|
|
33
31
|
return class TableDnD extends OriginalTable {
|
|
34
32
|
private _drag: DragState = {
|
|
35
33
|
active: false,
|
|
@@ -101,9 +99,7 @@ export default function createTableDnDClass(
|
|
|
101
99
|
|
|
102
100
|
// Proximity-based toolbox visibility:
|
|
103
101
|
// Only show row handle near left edge, column handle near top edge
|
|
104
|
-
wrapper.addEventListener("mousemove", (e) =>
|
|
105
|
-
this._onWrapperMouseMove(e),
|
|
106
|
-
);
|
|
102
|
+
wrapper.addEventListener("mousemove", (e) => this._onWrapperMouseMove(e));
|
|
107
103
|
wrapper.addEventListener("mouseleave", () => {
|
|
108
104
|
wrapper.classList.remove("tc-dnd--show-row", "tc-dnd--show-col");
|
|
109
105
|
});
|
|
@@ -140,8 +136,7 @@ export default function createTableDnDClass(
|
|
|
140
136
|
// ─── Proximity-based toolbox visibility ──────────────────────────────
|
|
141
137
|
|
|
142
138
|
private _onWrapperMouseMove(e: MouseEvent): void {
|
|
143
|
-
const tableEl =
|
|
144
|
-
this._wrapperRef?.querySelector<HTMLElement>(".tc-table");
|
|
139
|
+
const tableEl = this._wrapperRef?.querySelector<HTMLElement>(".tc-table");
|
|
145
140
|
if (!tableEl || !this._wrapperRef) return;
|
|
146
141
|
|
|
147
142
|
const tableRect = tableEl.getBoundingClientRect();
|
|
@@ -172,20 +167,13 @@ export default function createTableDnDClass(
|
|
|
172
167
|
this._wrapperRef.classList.add("tc-dnd--show-col");
|
|
173
168
|
this._wrapperRef.classList.remove("tc-dnd--show-row");
|
|
174
169
|
} else {
|
|
175
|
-
this._wrapperRef.classList.remove(
|
|
176
|
-
"tc-dnd--show-row",
|
|
177
|
-
"tc-dnd--show-col",
|
|
178
|
-
);
|
|
170
|
+
this._wrapperRef.classList.remove("tc-dnd--show-row", "tc-dnd--show-col");
|
|
179
171
|
}
|
|
180
172
|
}
|
|
181
173
|
|
|
182
174
|
// ─── Toggler pointerdown (start pending drag) ───────────────────────
|
|
183
175
|
|
|
184
|
-
private _onTogglerDown(
|
|
185
|
-
type: "row" | "col",
|
|
186
|
-
wrapper: HTMLElement,
|
|
187
|
-
e: PointerEvent,
|
|
188
|
-
): void {
|
|
176
|
+
private _onTogglerDown(type: "row" | "col", wrapper: HTMLElement, e: PointerEvent): void {
|
|
189
177
|
// Detect which row/col is currently hovered by the table plugin
|
|
190
178
|
const index = this._detectHoveredIndex(type, wrapper);
|
|
191
179
|
if (index < 0) return;
|
|
@@ -208,10 +196,7 @@ export default function createTableDnDClass(
|
|
|
208
196
|
|
|
209
197
|
// ─── Detect hovered row/col index ───────────────────────────────────
|
|
210
198
|
|
|
211
|
-
private _detectHoveredIndex(
|
|
212
|
-
type: "row" | "col",
|
|
213
|
-
wrapper: HTMLElement,
|
|
214
|
-
): number {
|
|
199
|
+
private _detectHoveredIndex(type: "row" | "col", wrapper: HTMLElement): number {
|
|
215
200
|
const tableEl = wrapper.querySelector<HTMLElement>(".tc-table");
|
|
216
201
|
if (!tableEl) return -1;
|
|
217
202
|
|
|
@@ -230,9 +215,7 @@ export default function createTableDnDClass(
|
|
|
230
215
|
}
|
|
231
216
|
return -1;
|
|
232
217
|
} else {
|
|
233
|
-
const toolbox = wrapper.querySelector<HTMLElement>(
|
|
234
|
-
".tc-toolbox--column",
|
|
235
|
-
);
|
|
218
|
+
const toolbox = wrapper.querySelector<HTMLElement>(".tc-toolbox--column");
|
|
236
219
|
if (!toolbox) return -1;
|
|
237
220
|
const toolboxRect = toolbox.getBoundingClientRect();
|
|
238
221
|
const toolboxMid = toolboxRect.left + toolboxRect.width / 2;
|
|
@@ -265,8 +248,7 @@ export default function createTableDnDClass(
|
|
|
265
248
|
d.active = true;
|
|
266
249
|
|
|
267
250
|
// Close any open popover from the table plugin
|
|
268
|
-
const openPopover =
|
|
269
|
-
this._wrapperRef?.querySelector<HTMLElement>(".tc-popover--opened");
|
|
251
|
+
const openPopover = this._wrapperRef?.querySelector<HTMLElement>(".tc-popover--opened");
|
|
270
252
|
openPopover?.classList.remove("tc-popover--opened");
|
|
271
253
|
|
|
272
254
|
this._highlight(d.type!, d.index, true);
|
|
@@ -338,13 +320,10 @@ export default function createTableDnDClass(
|
|
|
338
320
|
// ─── Move Row / Column ──────────────────────────────────────────────
|
|
339
321
|
|
|
340
322
|
private _moveRow(from: number, to: number): void {
|
|
341
|
-
const tableEl =
|
|
342
|
-
this._wrapperRef?.querySelector<HTMLElement>(".tc-table");
|
|
323
|
+
const tableEl = this._wrapperRef?.querySelector<HTMLElement>(".tc-table");
|
|
343
324
|
if (!tableEl) return;
|
|
344
325
|
|
|
345
|
-
const rows = Array.from(
|
|
346
|
-
tableEl.querySelectorAll<HTMLElement>(".tc-row"),
|
|
347
|
-
);
|
|
326
|
+
const rows = Array.from(tableEl.querySelectorAll<HTMLElement>(".tc-row"));
|
|
348
327
|
if (from < 0 || from >= rows.length) return;
|
|
349
328
|
|
|
350
329
|
const target = to > from ? to - 1 : to;
|
|
@@ -360,17 +339,14 @@ export default function createTableDnDClass(
|
|
|
360
339
|
}
|
|
361
340
|
|
|
362
341
|
private _moveCol(from: number, to: number): void {
|
|
363
|
-
const tableEl =
|
|
364
|
-
this._wrapperRef?.querySelector<HTMLElement>(".tc-table");
|
|
342
|
+
const tableEl = this._wrapperRef?.querySelector<HTMLElement>(".tc-table");
|
|
365
343
|
if (!tableEl) return;
|
|
366
344
|
|
|
367
345
|
const target = to > from ? to - 1 : to;
|
|
368
346
|
if (target === from) return;
|
|
369
347
|
|
|
370
348
|
tableEl.querySelectorAll<HTMLElement>(".tc-row").forEach((row) => {
|
|
371
|
-
const cells = Array.from(
|
|
372
|
-
row.querySelectorAll<HTMLElement>(".tc-cell"),
|
|
373
|
-
);
|
|
349
|
+
const cells = Array.from(row.querySelectorAll<HTMLElement>(".tc-cell"));
|
|
374
350
|
if (from >= cells.length) return;
|
|
375
351
|
|
|
376
352
|
const cell = cells[from];
|
|
@@ -385,11 +361,7 @@ export default function createTableDnDClass(
|
|
|
385
361
|
|
|
386
362
|
// ─── Drop Index Calc ────────────────────────────────────────────────
|
|
387
363
|
|
|
388
|
-
private _calcDrop(
|
|
389
|
-
wrapper: HTMLElement,
|
|
390
|
-
cx: number,
|
|
391
|
-
cy: number,
|
|
392
|
-
): number {
|
|
364
|
+
private _calcDrop(wrapper: HTMLElement, cx: number, cy: number): number {
|
|
393
365
|
const tableEl = wrapper.querySelector<HTMLElement>(".tc-table");
|
|
394
366
|
if (!tableEl) return this._drag.index;
|
|
395
367
|
|
|
@@ -414,13 +386,8 @@ export default function createTableDnDClass(
|
|
|
414
386
|
|
|
415
387
|
// ─── Visual Feedback ────────────────────────────────────────────────
|
|
416
388
|
|
|
417
|
-
private _highlight(
|
|
418
|
-
|
|
419
|
-
idx: number,
|
|
420
|
-
on: boolean,
|
|
421
|
-
): void {
|
|
422
|
-
const tableEl =
|
|
423
|
-
this._wrapperRef?.querySelector<HTMLElement>(".tc-table");
|
|
389
|
+
private _highlight(type: "row" | "col", idx: number, on: boolean): void {
|
|
390
|
+
const tableEl = this._wrapperRef?.querySelector<HTMLElement>(".tc-table");
|
|
424
391
|
if (!tableEl) return;
|
|
425
392
|
|
|
426
393
|
if (type === "row") {
|