torch-glare 2.4.0 → 2.4.2
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 +21 -20
- package/apps/lib/components/ButtonGroup.tsx +31 -41
- package/apps/lib/components/Calendar.tsx +51 -29
- package/apps/lib/components/Card.tsx +40 -24
- package/apps/lib/components/Checkbox.tsx +9 -16
- package/apps/lib/components/ColorPicker.tsx +441 -0
- package/apps/lib/components/ConclusionHeader.tsx +148 -0
- 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 +200 -196
- package/apps/lib/components/Dialog.tsx +92 -105
- package/apps/lib/components/Divider.tsx +21 -24
- package/apps/lib/components/Drawer.tsx +124 -142
- 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/FormBuilder/DisplayField.tsx +40 -0
- package/apps/lib/components/FormBuilder/context.ts +71 -0
- package/apps/lib/components/FormBuilder/fields/ChoiceFields.tsx +65 -0
- package/apps/lib/components/FormBuilder/fields/ColorField.tsx +76 -0
- package/apps/lib/components/FormBuilder/fields/CustomField.tsx +16 -0
- package/apps/lib/components/FormBuilder/fields/DateField.tsx +34 -0
- package/apps/lib/components/FormBuilder/fields/FieldArray.tsx +79 -0
- package/apps/lib/components/FormBuilder/fields/FieldShell.tsx +174 -0
- package/apps/lib/components/FormBuilder/fields/FileField.tsx +40 -0
- package/apps/lib/components/FormBuilder/fields/OptionListFields.tsx +139 -0
- package/apps/lib/components/FormBuilder/fields/OtpField.tsx +32 -0
- package/apps/lib/components/FormBuilder/fields/PhoneField.tsx +82 -0
- package/apps/lib/components/FormBuilder/fields/RichTextEditorField.tsx +37 -0
- package/apps/lib/components/FormBuilder/fields/SelectField.tsx +101 -0
- package/apps/lib/components/FormBuilder/fields/SignatureField.tsx +175 -0
- package/apps/lib/components/FormBuilder/fields/SliderField.tsx +72 -0
- package/apps/lib/components/FormBuilder/fields/SwitchBoxField.tsx +42 -0
- package/apps/lib/components/FormBuilder/fields/TableField.tsx +312 -0
- package/apps/lib/components/FormBuilder/fields/TextField.tsx +222 -0
- package/apps/lib/components/FormBuilder/fields/TreeSelectField.tsx +49 -0
- package/apps/lib/components/FormBuilder/fields/countries.ts +303 -0
- package/apps/lib/components/FormBuilder/fields/index.ts +25 -0
- package/apps/lib/components/FormBuilder/form-builder.tsx +292 -0
- package/apps/lib/components/FormBuilder/header.tsx +105 -0
- package/apps/lib/components/FormBuilder/index.ts +37 -0
- package/apps/lib/components/FormBuilder/numberFormat.ts +16 -0
- package/apps/lib/components/FormBuilder/stepper.tsx +217 -0
- package/apps/lib/components/FormBuilder/submit.tsx +41 -0
- package/apps/lib/components/FormBuilder/types.ts +264 -0
- package/apps/lib/components/FormBuilder/viewFormat.tsx +137 -0
- package/apps/lib/components/FormRenderer/FormDrawer.tsx +121 -0
- package/apps/lib/components/FormRenderer/form-renderer.tsx +113 -0
- package/apps/lib/components/FormRenderer/index.ts +9 -0
- package/apps/lib/components/FormRenderer/types.ts +79 -0
- package/apps/lib/components/FormStepper.tsx +9 -39
- package/apps/lib/components/FormSummary.tsx +282 -0
- package/apps/lib/components/HeaderBar.tsx +1 -9
- package/apps/lib/components/ImageAttachment.tsx +106 -93
- 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 +61 -58
- 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 +11 -28
- package/apps/lib/components/ScrollArea.tsx +45 -43
- package/apps/lib/components/SearchField.tsx +49 -39
- package/apps/lib/components/SearchableSelect.tsx +16 -16
- 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 +19 -23
- package/apps/lib/components/Select.tsx +80 -186
- 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/{ChartBlockTool.ts → TextEditor/ChartBlockTool.ts} +17 -52
- package/apps/lib/components/TextEditor/RichTextField.tsx +46 -0
- package/apps/lib/components/{TableDnDWrapper.ts → TextEditor/TableDnDWrapper.ts} +15 -48
- package/apps/lib/components/{TextEditor.tsx → TextEditor/TextEditor.tsx} +156 -113
- package/apps/lib/components/TextEditor/TextEditorToolbar.tsx +429 -0
- package/apps/lib/components/TextEditor/editor-tools/AlignmentTune.ts +70 -0
- package/apps/lib/components/TextEditor/editor-tools/ColorInlineTool.ts +50 -0
- package/apps/lib/components/TextEditor/editor-tools/StrikethroughInlineTool.ts +48 -0
- package/apps/lib/components/TextEditor/editor-tools/inlineFormat.ts +98 -0
- package/apps/lib/{types → components/TextEditor}/editorjs.d.ts +19 -0
- package/apps/lib/components/TextEditor/index.ts +7 -0
- package/apps/lib/{utils → components/TextEditor}/markdownParser.ts +2 -7
- package/apps/lib/components/Textarea.tsx +9 -13
- 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 +997 -0
- package/apps/lib/tsconfig.json +9 -0
- package/apps/lib/tsconfig.tsbuildinfo +1 -0
- package/apps/lib/utils/cn.ts +1 -1
- package/apps/lib/utils/color.ts +175 -0
- 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/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 +23 -18
- package/docs/components/chart-block-tool.md +129 -0
- package/docs/components/checkbox.md +16 -8
- package/docs/components/cn-layout.md +7 -1
- package/docs/components/color-picker.md +101 -0
- package/docs/components/conclusion-header.md +80 -0
- 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 +161 -135
- 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-builder.md +270 -0
- package/docs/components/form-renderer.md +228 -0
- package/docs/components/form-stepper.md +6 -0
- package/docs/components/form-summary.md +123 -0
- package/docs/components/form.md +17 -20
- package/docs/components/header-bar.md +6 -0
- package/docs/components/image-attachment.md +43 -45
- 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 +107 -0
- package/docs/components/table-view.md +15 -5
- package/docs/components/table.md +28 -28
- package/docs/components/text-editor.md +37 -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/form-and-list-recipes.md +26 -19
- package/docs/how-to/forms-with-form-builder.md +408 -0
- package/docs/how-to/guides.md +177 -197
- 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 +170 -172
- 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",
|
|
@@ -133,16 +133,12 @@ export default class ChartBlockTool {
|
|
|
133
133
|
}
|
|
134
134
|
|
|
135
135
|
// Click on the block → expand editing panel
|
|
136
|
-
this.wrapper.addEventListener("click", (
|
|
136
|
+
this.wrapper.addEventListener("click", () => {
|
|
137
137
|
if (
|
|
138
138
|
this.editorPanel &&
|
|
139
|
-
this.editorPanel.classList.contains(
|
|
140
|
-
"cdx-chart-block__editor-panel--hidden",
|
|
141
|
-
)
|
|
139
|
+
this.editorPanel.classList.contains("cdx-chart-block__editor-panel--hidden")
|
|
142
140
|
) {
|
|
143
|
-
this.editorPanel.classList.remove(
|
|
144
|
-
"cdx-chart-block__editor-panel--hidden",
|
|
145
|
-
);
|
|
141
|
+
this.editorPanel.classList.remove("cdx-chart-block__editor-panel--hidden");
|
|
146
142
|
// Re-create chart since canvas may have been resized
|
|
147
143
|
this.createChart();
|
|
148
144
|
}
|
|
@@ -150,14 +146,8 @@ export default class ChartBlockTool {
|
|
|
150
146
|
|
|
151
147
|
// Click outside → collapse
|
|
152
148
|
this.boundOnClickOutside = (e: MouseEvent) => {
|
|
153
|
-
if (
|
|
154
|
-
this.
|
|
155
|
-
this.editorPanel &&
|
|
156
|
-
!this.wrapper.contains(e.target as Node)
|
|
157
|
-
) {
|
|
158
|
-
this.editorPanel.classList.add(
|
|
159
|
-
"cdx-chart-block__editor-panel--hidden",
|
|
160
|
-
);
|
|
149
|
+
if (this.wrapper && this.editorPanel && !this.wrapper.contains(e.target as Node)) {
|
|
150
|
+
this.editorPanel.classList.add("cdx-chart-block__editor-panel--hidden");
|
|
161
151
|
// Re-create chart to fit new size
|
|
162
152
|
this.createChart();
|
|
163
153
|
}
|
|
@@ -407,8 +397,7 @@ export default class ChartBlockTool {
|
|
|
407
397
|
dataInput.className = "cdx-chart-block__data-input";
|
|
408
398
|
dataInput.value = String(dataset.data[colIdx] ?? 0);
|
|
409
399
|
dataInput.addEventListener("input", () => {
|
|
410
|
-
this.data.datasets[rowIdx].data[colIdx] =
|
|
411
|
-
parseFloat(dataInput.value) || 0;
|
|
400
|
+
this.data.datasets[rowIdx].data[colIdx] = parseFloat(dataInput.value) || 0;
|
|
412
401
|
this.scheduleChartUpdate();
|
|
413
402
|
});
|
|
414
403
|
td.appendChild(dataInput);
|
|
@@ -425,14 +414,8 @@ export default class ChartBlockTool {
|
|
|
425
414
|
colorPicker.value = this.rgbaToHex(dataset.backgroundColor);
|
|
426
415
|
colorPicker.title = "Dataset color";
|
|
427
416
|
colorPicker.addEventListener("input", () => {
|
|
428
|
-
this.data.datasets[rowIdx].backgroundColor = this.hexToRgba(
|
|
429
|
-
|
|
430
|
-
0.5,
|
|
431
|
-
);
|
|
432
|
-
this.data.datasets[rowIdx].borderColor = this.hexToRgba(
|
|
433
|
-
colorPicker.value,
|
|
434
|
-
1,
|
|
435
|
-
);
|
|
417
|
+
this.data.datasets[rowIdx].backgroundColor = this.hexToRgba(colorPicker.value, 0.5);
|
|
418
|
+
this.data.datasets[rowIdx].borderColor = this.hexToRgba(colorPicker.value, 1);
|
|
436
419
|
this.scheduleChartUpdate();
|
|
437
420
|
});
|
|
438
421
|
controlsCell.appendChild(colorPicker);
|
|
@@ -470,9 +453,7 @@ export default class ChartBlockTool {
|
|
|
470
453
|
const gridColor = dark ? "rgba(255, 255, 255, 0.1)" : "rgba(0, 0, 0, 0.1)";
|
|
471
454
|
const legendColor = dark ? "#ccc" : "#666";
|
|
472
455
|
|
|
473
|
-
const isPieType = ["pie", "doughnut", "polarArea"].includes(
|
|
474
|
-
this.data.chartType,
|
|
475
|
-
);
|
|
456
|
+
const isPieType = ["pie", "doughnut", "polarArea"].includes(this.data.chartType);
|
|
476
457
|
|
|
477
458
|
// For pie/doughnut/polar, use per-segment colors from all datasets flattened
|
|
478
459
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -482,12 +463,8 @@ export default class ChartBlockTool {
|
|
|
482
463
|
label: ds.label,
|
|
483
464
|
data: [...ds.data],
|
|
484
465
|
borderWidth: 2,
|
|
485
|
-
backgroundColor: ds.data.map(
|
|
486
|
-
|
|
487
|
-
),
|
|
488
|
-
borderColor: ds.data.map(
|
|
489
|
-
(_, i) => COLOR_PALETTE[i % COLOR_PALETTE.length].border,
|
|
490
|
-
),
|
|
466
|
+
backgroundColor: ds.data.map((_, i) => COLOR_PALETTE[i % COLOR_PALETTE.length].bg),
|
|
467
|
+
borderColor: ds.data.map((_, i) => COLOR_PALETTE[i % COLOR_PALETTE.length].border),
|
|
491
468
|
};
|
|
492
469
|
}
|
|
493
470
|
return {
|
|
@@ -557,9 +534,7 @@ export default class ChartBlockTool {
|
|
|
557
534
|
this.updateTimeout = null;
|
|
558
535
|
if (!this.chart) return;
|
|
559
536
|
|
|
560
|
-
const isPieType = ["pie", "doughnut", "polarArea"].includes(
|
|
561
|
-
this.data.chartType,
|
|
562
|
-
);
|
|
537
|
+
const isPieType = ["pie", "doughnut", "polarArea"].includes(this.data.chartType);
|
|
563
538
|
|
|
564
539
|
this.chart.data.labels = [...this.data.labels];
|
|
565
540
|
this.chart.data.datasets = this.data.datasets.map((ds) => {
|
|
@@ -571,12 +546,8 @@ export default class ChartBlockTool {
|
|
|
571
546
|
};
|
|
572
547
|
|
|
573
548
|
if (isPieType) {
|
|
574
|
-
base.backgroundColor = ds.data.map(
|
|
575
|
-
|
|
576
|
-
);
|
|
577
|
-
base.borderColor = ds.data.map(
|
|
578
|
-
(_, i) => COLOR_PALETTE[i % COLOR_PALETTE.length].border,
|
|
579
|
-
);
|
|
549
|
+
base.backgroundColor = ds.data.map((_, i) => COLOR_PALETTE[i % COLOR_PALETTE.length].bg);
|
|
550
|
+
base.borderColor = ds.data.map((_, i) => COLOR_PALETTE[i % COLOR_PALETTE.length].border);
|
|
580
551
|
} else {
|
|
581
552
|
base.backgroundColor = ds.backgroundColor;
|
|
582
553
|
base.borderColor = ds.borderColor;
|
|
@@ -637,9 +608,7 @@ export default class ChartBlockTool {
|
|
|
637
608
|
|
|
638
609
|
private updateTypeSelector(): void {
|
|
639
610
|
if (!this.wrapper) return;
|
|
640
|
-
const buttons = this.wrapper.querySelectorAll<HTMLButtonElement>(
|
|
641
|
-
".cdx-chart-block__type-btn",
|
|
642
|
-
);
|
|
611
|
+
const buttons = this.wrapper.querySelectorAll<HTMLButtonElement>(".cdx-chart-block__type-btn");
|
|
643
612
|
buttons.forEach((btn) => {
|
|
644
613
|
btn.classList.toggle(
|
|
645
614
|
"cdx-chart-block__type-btn--active",
|
|
@@ -651,17 +620,13 @@ export default class ChartBlockTool {
|
|
|
651
620
|
private normalizeData(data: Partial<ChartBlockData>): ChartBlockData {
|
|
652
621
|
const chartType =
|
|
653
622
|
data.chartType &&
|
|
654
|
-
["bar", "line", "pie", "doughnut", "radar", "polarArea"].includes(
|
|
655
|
-
data.chartType,
|
|
656
|
-
)
|
|
623
|
+
["bar", "line", "pie", "doughnut", "radar", "polarArea"].includes(data.chartType)
|
|
657
624
|
? data.chartType
|
|
658
625
|
: DEFAULT_DATA.chartType;
|
|
659
626
|
|
|
660
627
|
const title = data.title ?? DEFAULT_DATA.title;
|
|
661
628
|
const labels =
|
|
662
|
-
Array.isArray(data.labels) && data.labels.length > 0
|
|
663
|
-
? data.labels
|
|
664
|
-
: [...DEFAULT_DATA.labels];
|
|
629
|
+
Array.isArray(data.labels) && data.labels.length > 0 ? data.labels : [...DEFAULT_DATA.labels];
|
|
665
630
|
|
|
666
631
|
const datasets =
|
|
667
632
|
Array.isArray(data.datasets) && data.datasets.length > 0
|