torch-glare 2.5.6 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -3
- package/dist/bin/index.js +9 -24
- package/dist/bin/index.js.map +1 -1
- package/dist/src/commands/add.d.ts +2 -2
- package/dist/src/commands/add.d.ts.map +1 -1
- package/dist/src/commands/add.js +4 -70
- package/dist/src/commands/add.js.map +1 -1
- package/dist/src/commands/hook.d.ts +5 -4
- package/dist/src/commands/hook.d.ts.map +1 -1
- package/dist/src/commands/hook.js +7 -75
- package/dist/src/commands/hook.js.map +1 -1
- package/dist/src/commands/init.js +1 -1
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/layout.d.ts +5 -4
- package/dist/src/commands/layout.d.ts.map +1 -1
- package/dist/src/commands/layout.js +7 -75
- package/dist/src/commands/layout.js.map +1 -1
- package/dist/src/commands/provider.d.ts +5 -4
- package/dist/src/commands/provider.d.ts.map +1 -1
- package/dist/src/commands/provider.js +7 -75
- package/dist/src/commands/provider.js.map +1 -1
- package/dist/src/commands/update.d.ts.map +1 -1
- package/dist/src/commands/update.js +78 -43
- package/dist/src/commands/update.js.map +1 -1
- package/dist/src/commands/utils.d.ts +5 -4
- package/dist/src/commands/utils.d.ts.map +1 -1
- package/dist/src/commands/utils.js +7 -80
- package/dist/src/commands/utils.js.map +1 -1
- package/dist/src/shared/addFromRegistry.d.ts +16 -0
- package/dist/src/shared/addFromRegistry.d.ts.map +1 -0
- package/dist/src/shared/addFromRegistry.js +88 -0
- package/dist/src/shared/addFromRegistry.js.map +1 -0
- package/dist/src/shared/getInstallCommand.d.ts.map +1 -1
- package/dist/src/shared/getInstallCommand.js +5 -0
- package/dist/src/shared/getInstallCommand.js.map +1 -1
- package/dist/src/shared/installDependencies.d.ts +0 -10
- package/dist/src/shared/installDependencies.d.ts.map +1 -1
- package/dist/src/shared/installDependencies.js +0 -17
- package/dist/src/shared/installDependencies.js.map +1 -1
- package/dist/src/shared/installFromPlan.d.ts +7 -5
- package/dist/src/shared/installFromPlan.d.ts.map +1 -1
- package/dist/src/shared/installFromPlan.js +103 -36
- package/dist/src/shared/installFromPlan.js.map +1 -1
- package/dist/src/shared/loadRegistry.d.ts +12 -3
- package/dist/src/shared/loadRegistry.d.ts.map +1 -1
- package/dist/src/shared/loadRegistry.js +19 -20
- package/dist/src/shared/loadRegistry.js.map +1 -1
- package/dist/src/shared/registryClient.d.ts +19 -0
- package/dist/src/shared/registryClient.d.ts.map +1 -0
- package/dist/src/shared/registryClient.js +128 -0
- package/dist/src/shared/registryClient.js.map +1 -0
- package/dist/src/shared/resolveEntry.d.ts +10 -7
- package/dist/src/shared/resolveEntry.d.ts.map +1 -1
- package/dist/src/shared/resolveEntry.js +18 -13
- package/dist/src/shared/resolveEntry.js.map +1 -1
- package/dist/src/shared/suggestOtherCommand.d.ts +7 -1
- package/dist/src/shared/suggestOtherCommand.d.ts.map +1 -1
- package/dist/src/shared/suggestOtherCommand.js +29 -23
- package/dist/src/shared/suggestOtherCommand.js.map +1 -1
- package/dist/src/types/main.d.ts +31 -2
- package/dist/src/types/main.d.ts.map +1 -1
- package/package.json +6 -11
- package/apps/lib/components/ActionButton.tsx +0 -93
- package/apps/lib/components/ActionsGroup.tsx +0 -27
- package/apps/lib/components/AlertDialog.tsx +0 -204
- package/apps/lib/components/Avatar.tsx +0 -46
- package/apps/lib/components/Badge.tsx +0 -250
- package/apps/lib/components/BadgeField.tsx +0 -403
- package/apps/lib/components/Breadcrumb.tsx +0 -280
- package/apps/lib/components/Button.tsx +0 -325
- package/apps/lib/components/ButtonGroup.tsx +0 -190
- package/apps/lib/components/Calendar.tsx +0 -115
- package/apps/lib/components/Card.tsx +0 -95
- package/apps/lib/components/Checkbox.tsx +0 -42
- package/apps/lib/components/ColorPicker.tsx +0 -441
- package/apps/lib/components/ConclusionHeader.tsx +0 -148
- package/apps/lib/components/ContextMenu.tsx +0 -571
- package/apps/lib/components/CountBadge.tsx +0 -52
- package/apps/lib/components/DataTable.tsx +0 -213
- package/apps/lib/components/DataViews/badge.ts +0 -49
- package/apps/lib/components/DataViews/cell.tsx +0 -324
- package/apps/lib/components/DataViews/context.ts +0 -144
- package/apps/lib/components/DataViews/data-views.tsx +0 -395
- package/apps/lib/components/DataViews/filters/children.tsx +0 -98
- package/apps/lib/components/DataViews/filters/custom.tsx +0 -34
- package/apps/lib/components/DataViews/filters/filters.tsx +0 -157
- package/apps/lib/components/DataViews/filters/index.ts +0 -4
- package/apps/lib/components/DataViews/filters/labelled.tsx +0 -20
- package/apps/lib/components/DataViews/filters/presets.tsx +0 -65
- package/apps/lib/components/DataViews/filters/sync.tsx +0 -35
- package/apps/lib/components/DataViews/filters/values.ts +0 -173
- package/apps/lib/components/DataViews/header.tsx +0 -220
- package/apps/lib/components/DataViews/hooks/index.ts +0 -5
- package/apps/lib/components/DataViews/hooks/useActiveRow.ts +0 -22
- package/apps/lib/components/DataViews/hooks/useControllable.ts +0 -52
- package/apps/lib/components/DataViews/index.ts +0 -88
- package/apps/lib/components/DataViews/panel/columns.tsx +0 -153
- package/apps/lib/components/DataViews/panel/controls.tsx +0 -106
- package/apps/lib/components/DataViews/panel/index.ts +0 -3
- package/apps/lib/components/DataViews/panel/panel.tsx +0 -164
- package/apps/lib/components/DataViews/panel/saved-views.tsx +0 -67
- package/apps/lib/components/DataViews/panel/section.tsx +0 -81
- package/apps/lib/components/DataViews/panel/sort.tsx +0 -42
- package/apps/lib/components/DataViews/panel/tab.tsx +0 -31
- package/apps/lib/components/DataViews/slots.ts +0 -72
- package/apps/lib/components/DataViews/states.tsx +0 -73
- package/apps/lib/components/DataViews/types.ts +0 -510
- package/apps/lib/components/DataViews/views/board-view.tsx +0 -381
- package/apps/lib/components/DataViews/views/card-rows.tsx +0 -36
- package/apps/lib/components/DataViews/views/inbox-view.tsx +0 -260
- package/apps/lib/components/DataViews/views/pane-views.tsx +0 -196
- package/apps/lib/components/DataViews/views/table-view.tsx +0 -493
- package/apps/lib/components/DataViews/views/tree-view.tsx +0 -367
- package/apps/lib/components/DatePicker.tsx +0 -232
- package/apps/lib/components/Dialog.tsx +0 -116
- package/apps/lib/components/Divider.tsx +0 -28
- package/apps/lib/components/Drawer.tsx +0 -451
- package/apps/lib/components/DropdownMenu.tsx +0 -554
- package/apps/lib/components/FieldHint.tsx +0 -69
- package/apps/lib/components/Form.tsx +0 -182
- package/apps/lib/components/FormBuilder/context.ts +0 -85
- package/apps/lib/components/FormBuilder/field-kind.ts +0 -28
- package/apps/lib/components/FormBuilder/fields/ChoiceFields.tsx +0 -60
- package/apps/lib/components/FormBuilder/fields/ColorField.tsx +0 -59
- package/apps/lib/components/FormBuilder/fields/CustomField.tsx +0 -11
- package/apps/lib/components/FormBuilder/fields/DateField.tsx +0 -32
- package/apps/lib/components/FormBuilder/fields/FieldArray.tsx +0 -74
- package/apps/lib/components/FormBuilder/fields/FieldShell.tsx +0 -168
- package/apps/lib/components/FormBuilder/fields/FileField.tsx +0 -39
- package/apps/lib/components/FormBuilder/fields/OptionListFields.tsx +0 -132
- package/apps/lib/components/FormBuilder/fields/OtpField.tsx +0 -31
- package/apps/lib/components/FormBuilder/fields/PhoneField.tsx +0 -109
- package/apps/lib/components/FormBuilder/fields/RichTextEditorField.tsx +0 -31
- package/apps/lib/components/FormBuilder/fields/SelectField.tsx +0 -114
- package/apps/lib/components/FormBuilder/fields/SignatureField.tsx +0 -157
- package/apps/lib/components/FormBuilder/fields/SliderField.tsx +0 -67
- package/apps/lib/components/FormBuilder/fields/SwitchBoxField.tsx +0 -41
- package/apps/lib/components/FormBuilder/fields/TableField.tsx +0 -336
- package/apps/lib/components/FormBuilder/fields/TextField.tsx +0 -213
- package/apps/lib/components/FormBuilder/fields/TreeSelectField.tsx +0 -43
- package/apps/lib/components/FormBuilder/fields/countries.ts +0 -303
- package/apps/lib/components/FormBuilder/fields/index.ts +0 -25
- package/apps/lib/components/FormBuilder/form-builder.tsx +0 -198
- package/apps/lib/components/FormBuilder/index.ts +0 -31
- package/apps/lib/components/FormBuilder/numberFormat.ts +0 -16
- package/apps/lib/components/FormBuilder/submit.tsx +0 -67
- package/apps/lib/components/FormBuilder/types.ts +0 -316
- package/apps/lib/components/FormRenderer/FormDrawer.tsx +0 -250
- package/apps/lib/components/FormRenderer/detail.tsx +0 -256
- package/apps/lib/components/FormRenderer/form-renderer.tsx +0 -358
- package/apps/lib/components/FormRenderer/header.tsx +0 -88
- package/apps/lib/components/FormRenderer/index.ts +0 -17
- package/apps/lib/components/FormRenderer/notch-action.tsx +0 -64
- package/apps/lib/components/FormRenderer/section.tsx +0 -39
- package/apps/lib/components/FormRenderer/stepper.tsx +0 -393
- package/apps/lib/components/FormRenderer/types.ts +0 -115
- package/apps/lib/components/FormSummary.tsx +0 -282
- package/apps/lib/components/HeaderBar.tsx +0 -117
- package/apps/lib/components/ImageAttachment.tsx +0 -209
- package/apps/lib/components/InnerLabelField.tsx +0 -154
- package/apps/lib/components/Input.tsx +0 -224
- package/apps/lib/components/InputField.tsx +0 -147
- package/apps/lib/components/InputOTP.tsx +0 -84
- package/apps/lib/components/Label.tsx +0 -129
- package/apps/lib/components/LabelField.tsx +0 -76
- package/apps/lib/components/LabeledCheckBox.tsx +0 -51
- package/apps/lib/components/LabeledRadio.tsx +0 -51
- package/apps/lib/components/LinkButton.tsx +0 -94
- package/apps/lib/components/LoginButton.tsx +0 -51
- package/apps/lib/components/PasswordLevel.tsx +0 -58
- package/apps/lib/components/Popover.tsx +0 -312
- package/apps/lib/components/ProfileMenu.tsx +0 -85
- package/apps/lib/components/Radio.tsx +0 -59
- package/apps/lib/components/RadioCard.tsx +0 -50
- package/apps/lib/components/ScrollArea.tsx +0 -54
- package/apps/lib/components/SearchField.tsx +0 -62
- package/apps/lib/components/SearchableSelect.tsx +0 -318
- package/apps/lib/components/SearchableTable.tsx +0 -344
- package/apps/lib/components/SearchableTree.tsx +0 -485
- package/apps/lib/components/SearchableTreeDialog.tsx +0 -502
- package/apps/lib/components/SectionBlock.tsx +0 -168
- package/apps/lib/components/Select.tsx +0 -347
- package/apps/lib/components/SimpleSelect.tsx +0 -225
- package/apps/lib/components/Skeleton.tsx +0 -12
- package/apps/lib/components/SlideDatePicker.tsx +0 -255
- package/apps/lib/components/SpinLoading.tsx +0 -174
- package/apps/lib/components/Stepper.tsx +0 -480
- package/apps/lib/components/Switch.tsx +0 -82
- package/apps/lib/components/TabFormItem.tsx +0 -153
- package/apps/lib/components/TabSwitch.tsx +0 -172
- package/apps/lib/components/Table.tsx +0 -597
- package/apps/lib/components/TextEditor/ChartBlockTool.ts +0 -676
- package/apps/lib/components/TextEditor/RichTextField.tsx +0 -46
- package/apps/lib/components/TextEditor/TableDnDWrapper.ts +0 -462
- package/apps/lib/components/TextEditor/TextEditor.tsx +0 -1164
- package/apps/lib/components/TextEditor/TextEditorToolbar.tsx +0 -429
- package/apps/lib/components/TextEditor/editor-tools/AlignmentTune.ts +0 -70
- package/apps/lib/components/TextEditor/editor-tools/ColorInlineTool.ts +0 -50
- package/apps/lib/components/TextEditor/editor-tools/StrikethroughInlineTool.ts +0 -48
- package/apps/lib/components/TextEditor/editor-tools/inlineFormat.ts +0 -98
- package/apps/lib/components/TextEditor/editorjs.d.ts +0 -60
- package/apps/lib/components/TextEditor/index.ts +0 -7
- package/apps/lib/components/TextEditor/markdownParser.ts +0 -346
- package/apps/lib/components/Textarea.tsx +0 -117
- package/apps/lib/components/Timeline.tsx +0 -263
- package/apps/lib/components/Toast.tsx +0 -87
- package/apps/lib/components/Toggle.tsx +0 -125
- package/apps/lib/components/ToggleButton.tsx +0 -140
- package/apps/lib/components/Tooltip.tsx +0 -116
- package/apps/lib/components/TransparentLabel.tsx +0 -71
- package/apps/lib/components/TreeDropDown.tsx +0 -115
- package/apps/lib/components/TreeFolder/TreeFolder.tsx +0 -380
- package/apps/lib/components/TreeFolder/TreeFolderBreadcrumb.tsx +0 -75
- package/apps/lib/components/TreeFolder/TreeFolderRow.tsx +0 -354
- package/apps/lib/components/TreeFolder/TreeFolderStyles.tsx +0 -60
- package/apps/lib/components/TreeFolder/icons.tsx +0 -60
- package/apps/lib/components/TreeFolder/index.ts +0 -24
- package/apps/lib/components/TreeFolder/treeFolderUtils.ts +0 -109
- package/apps/lib/components/TreeFolder/types.ts +0 -77
- package/apps/lib/components/TreeFolder/useTreeFolderDnD.ts +0 -118
- package/apps/lib/hooks/useActiveTreeItem.ts +0 -61
- package/apps/lib/hooks/useClickOutside.ts +0 -27
- package/apps/lib/hooks/useDragDrop.tsx +0 -365
- package/apps/lib/hooks/useHtmlDir.ts +0 -31
- package/apps/lib/hooks/useInfiniteScroll.ts +0 -108
- package/apps/lib/hooks/useIsMobile.ts +0 -21
- package/apps/lib/hooks/useResize.ts +0 -67
- package/apps/lib/hooks/useTagSelection.ts +0 -300
- package/apps/lib/layouts/CNLayout.tsx +0 -372
- package/apps/lib/layouts/DataViewCard.tsx +0 -62
- package/apps/lib/layouts/FieldSection.tsx +0 -91
- package/apps/lib/layouts/TreeSubLayout.tsx +0 -173
- package/apps/lib/providers/ThemeProvider.tsx +0 -84
- package/apps/lib/registry.json +0 -1217
- package/apps/lib/tsconfig.json +0 -9
- package/apps/lib/tsconfig.tsbuildinfo +0 -1
- package/apps/lib/utils/cn.ts +0 -6
- package/apps/lib/utils/color.ts +0 -175
- package/apps/lib/utils/dataViews/path.ts +0 -67
- package/apps/lib/utils/dataViews/query.ts +0 -73
- package/apps/lib/utils/dataViews/types.ts +0 -187
- package/apps/lib/utils/dateFormat.ts +0 -108
- package/apps/lib/utils/resize.ts +0 -31
- package/apps/lib/utils/scroller.ts +0 -26
- package/apps/lib/utils/types.ts +0 -16
- package/docs/BLOCKS.md +0 -129
- package/docs/CHANGELOG-1.1.16.md +0 -108
- package/docs/Cover.png +0 -0
- package/docs/README.md +0 -215
- package/docs/components/action-button.md +0 -638
- package/docs/components/actions-group.md +0 -708
- package/docs/components/alert-dialog.md +0 -920
- package/docs/components/avatar.md +0 -709
- package/docs/components/badge-field.md +0 -738
- package/docs/components/badge.md +0 -301
- package/docs/components/breadcrumb.md +0 -930
- package/docs/components/button-group.md +0 -650
- package/docs/components/button.md +0 -639
- package/docs/components/calendar.md +0 -555
- package/docs/components/card.md +0 -622
- package/docs/components/chart-block-tool.md +0 -129
- package/docs/components/checkbox.md +0 -699
- package/docs/components/cn-layout.md +0 -854
- package/docs/components/color-picker.md +0 -101
- package/docs/components/conclusion-header.md +0 -80
- package/docs/components/context-menu.md +0 -483
- package/docs/components/count-badge.md +0 -560
- package/docs/components/data-table.md +0 -854
- package/docs/components/data-views/backend-response.md +0 -324
- package/docs/components/data-views/examples/a11y-rtl.md +0 -250
- package/docs/components/data-views/examples/api-orders-route.md +0 -130
- package/docs/components/data-views/examples/fields.md +0 -362
- package/docs/components/data-views/examples/filters.md +0 -307
- package/docs/components/data-views/examples/inbox-routing.md +0 -218
- package/docs/components/data-views/examples/index.md +0 -29
- package/docs/components/data-views/examples/overview.md +0 -244
- package/docs/components/data-views/examples/panel.md +0 -212
- package/docs/components/data-views/examples/scale.md +0 -231
- package/docs/components/data-views/examples/server-side.md +0 -210
- package/docs/components/data-views/examples/state.md +0 -250
- package/docs/components/data-views/examples/tree-custom.md +0 -388
- package/docs/components/data-views/examples/view-registry.md +0 -313
- package/docs/components/data-views/examples/views.md +0 -534
- package/docs/components/data-views/guide.md +0 -405
- package/docs/components/data-views/index.md +0 -1521
- package/docs/components/data-views/migration.md +0 -81
- package/docs/components/date-picker.md +0 -857
- package/docs/components/dialog.md +0 -929
- package/docs/components/divider.md +0 -766
- package/docs/components/drawer.md +0 -654
- package/docs/components/dropdown-menu.md +0 -668
- package/docs/components/field-hint.md +0 -898
- package/docs/components/field-section.md +0 -781
- package/docs/components/form-builder.md +0 -284
- package/docs/components/form-renderer.md +0 -396
- package/docs/components/form-summary.md +0 -138
- package/docs/components/form.md +0 -785
- package/docs/components/header-bar.md +0 -188
- package/docs/components/image-attachment.md +0 -906
- package/docs/components/inner-label-field.md +0 -819
- package/docs/components/input-field.md +0 -623
- package/docs/components/input-otp.md +0 -756
- package/docs/components/input.md +0 -634
- package/docs/components/label-field.md +0 -770
- package/docs/components/label.md +0 -761
- package/docs/components/labeled-check-box.md +0 -642
- package/docs/components/labeled-radio.md +0 -796
- package/docs/components/link-button.md +0 -685
- package/docs/components/login-button.md +0 -872
- package/docs/components/password-level.md +0 -803
- package/docs/components/popover.md +0 -649
- package/docs/components/profile-menu.md +0 -656
- package/docs/components/radio-card.md +0 -801
- package/docs/components/radio.md +0 -735
- package/docs/components/scroll-area.md +0 -691
- package/docs/components/search-field.md +0 -702
- package/docs/components/searchable-select.md +0 -368
- package/docs/components/searchable-table.md +0 -438
- package/docs/components/searchable-tree-dialog.md +0 -190
- package/docs/components/searchable-tree.md +0 -200
- package/docs/components/section-block.md +0 -483
- package/docs/components/select.md +0 -709
- package/docs/components/simple-select.md +0 -741
- package/docs/components/skeleton.md +0 -706
- package/docs/components/slide-date-picker.md +0 -837
- package/docs/components/spin-loading.md +0 -696
- package/docs/components/stepper.md +0 -316
- package/docs/components/switch.md +0 -770
- package/docs/components/tab-form-item.md +0 -773
- package/docs/components/tab-switch.md +0 -170
- package/docs/components/table-dnd-wrapper.md +0 -107
- package/docs/components/table.md +0 -1088
- package/docs/components/text-editor.md +0 -735
- package/docs/components/textarea.md +0 -681
- package/docs/components/timeline.md +0 -254
- package/docs/components/toast.md +0 -773
- package/docs/components/toggle-button.md +0 -643
- package/docs/components/toggle.md +0 -882
- package/docs/components/tooltip.md +0 -513
- package/docs/components/transparent-label.md +0 -721
- package/docs/components/tree-drop-down.md +0 -740
- package/docs/components/tree-folder.md +0 -110
- package/docs/components/tree-sub-layout.md +0 -707
- package/docs/explanation/architecture.md +0 -54
- package/docs/explanation/design-system.md +0 -52
- package/docs/how-to/form-and-list-recipes.md +0 -386
- package/docs/how-to/forms-with-form-builder.md +0 -472
- package/docs/how-to/guides.md +0 -1027
- package/docs/migration/changelog.md +0 -60
- package/docs/migration/form-builder-2.5.2.md +0 -113
- package/docs/reference/cli.md +0 -112
- package/docs/reference/components.md +0 -572
- package/docs/reference/hooks.md +0 -1523
- package/docs/reference/providers.md +0 -866
- package/docs/reference/tailwind-plugins.md +0 -942
- package/docs/reference/theme.md +0 -85
- package/docs/reference/types.md +0 -1016
- package/docs/reference/utilities.md +0 -726
- package/docs/tutorials/building-first-form.md +0 -846
- package/docs/tutorials/component-composition.md +0 -882
- package/docs/tutorials/getting-started.md +0 -302
- package/docs/tutorials/theming-basics.md +0 -785
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import React, { createContext, useContext } from "react";
|
|
4
|
-
import { LayoutGrid, Table2 } from "lucide-react";
|
|
5
|
-
import { DataViewCard } from "../../../layouts/DataViewCard";
|
|
6
|
-
import type { FieldConfig } from "../../../utils/dataViews/types";
|
|
7
|
-
import { useDataViewsData } from "../context";
|
|
8
|
-
import { Cell } from "../cell";
|
|
9
|
-
import { buildCardRows } from "./card-rows";
|
|
10
|
-
import { TableView } from "./table-view";
|
|
11
|
-
import type {
|
|
12
|
-
TreePaneCardsProps,
|
|
13
|
-
TreePaneTabProps,
|
|
14
|
-
TreePaneTableProps,
|
|
15
|
-
TreePaneViewBase,
|
|
16
|
-
} from "../types";
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* The tree pane's own views, written the way every other part of this component is: **you render
|
|
20
|
-
* them, and that is what makes them exist**.
|
|
21
|
-
*
|
|
22
|
-
* ```tsx
|
|
23
|
-
* <DataViews.Tree nodes={nodes} labelPath="name">
|
|
24
|
-
* <DataViews.Tree.Table selectable renderCell={cell} />
|
|
25
|
-
* <DataViews.Tree.Cards renderCard={card} />
|
|
26
|
-
* <DataViews.Tree.Tab value="timeline" label="Timeline" icon={<Clock />}>
|
|
27
|
-
* <Timeline />
|
|
28
|
-
* </DataViews.Tree.Tab>
|
|
29
|
-
* </DataViews.Tree>
|
|
30
|
-
* ```
|
|
31
|
-
*
|
|
32
|
-
* Render one and the switch disappears, exactly as the header's `ViewSwitch` does with a single
|
|
33
|
-
* view — a switch with one option is a label. Render none and there is no pane at all: the tree
|
|
34
|
-
* is then a hierarchy and nothing else, and it takes the whole width.
|
|
35
|
-
*
|
|
36
|
-
* All three sit inside the pane's data scope, so `useDataViewsData()` in any of them returns the
|
|
37
|
-
* **selected node's** rows rather than the whole set.
|
|
38
|
-
*/
|
|
39
|
-
|
|
40
|
-
const PANE_VIEW = "__dvTreePaneView";
|
|
41
|
-
|
|
42
|
-
interface PaneViewMeta {
|
|
43
|
-
defaultValue: string;
|
|
44
|
-
defaultLabel: string;
|
|
45
|
-
defaultIcon?: React.ReactNode;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* The tab's own props, stripped off before the rest reaches the view underneath.
|
|
50
|
-
*
|
|
51
|
-
* `label` and `icon` name the *tab*; `DataViews.Table` reads the same two to name itself in the
|
|
52
|
-
* root's switcher, so leaving them on would register the pane's table up in the header.
|
|
53
|
-
*/
|
|
54
|
-
function withoutTabProps<T extends TreePaneViewBase>(props: T) {
|
|
55
|
-
const rest = { ...props };
|
|
56
|
-
delete rest.value;
|
|
57
|
-
delete rest.label;
|
|
58
|
-
delete rest.icon;
|
|
59
|
-
return rest;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
interface PaneContextValue {
|
|
63
|
-
mode: string;
|
|
64
|
-
/** Which field labels a row — the tree's `labelPath`, already resolved. */
|
|
65
|
-
labelField?: FieldConfig;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
const PaneContext = createContext<PaneContextValue>({ mode: "table" });
|
|
69
|
-
|
|
70
|
-
export const TreePaneProvider = PaneContext.Provider;
|
|
71
|
-
|
|
72
|
-
function markPaneView<P extends object>(component: React.ComponentType<P>, meta: PaneViewMeta) {
|
|
73
|
-
(component as unknown as Record<string, PaneViewMeta>)[PANE_VIEW] = meta;
|
|
74
|
-
return component;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
export type PaneViewElement = React.ReactElement<{
|
|
78
|
-
value?: string;
|
|
79
|
-
label?: string;
|
|
80
|
-
icon?: React.ReactNode;
|
|
81
|
-
}>;
|
|
82
|
-
|
|
83
|
-
export function paneViewMetaOf(node: React.ReactNode): PaneViewMeta | undefined {
|
|
84
|
-
if (!React.isValidElement(node)) return undefined;
|
|
85
|
-
return (node.type as unknown as Record<string, PaneViewMeta | undefined>)[PANE_VIEW];
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
export function isPaneViewElement(node: React.ReactNode): node is PaneViewElement {
|
|
89
|
-
return paneViewMetaOf(node) !== undefined;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Children, with fragments opened out.
|
|
94
|
-
*
|
|
95
|
-
* `React.Children.toArray` stops at a `<>…</>`, so tabs grouped in one — which is what writing
|
|
96
|
-
* them behind a condition produces — would arrive as a single unrecognised child and be read as a
|
|
97
|
-
* whole-pane override. Flattening first is what lets `{cond ? <><Table/><Cards/></> : <Mine/>}`
|
|
98
|
-
* mean what it looks like.
|
|
99
|
-
*/
|
|
100
|
-
export function flattenChildren(children: React.ReactNode): React.ReactNode[] {
|
|
101
|
-
return React.Children.toArray(children).flatMap((child) =>
|
|
102
|
-
React.isValidElement(child) && child.type === React.Fragment
|
|
103
|
-
? flattenChildren((child.props as { children?: React.ReactNode }).children)
|
|
104
|
-
: [child],
|
|
105
|
-
);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/** `value`, `label` and `icon` as the switch will show them — defaults filled in. */
|
|
109
|
-
export function paneViewOption(element: PaneViewElement) {
|
|
110
|
-
const meta = paneViewMetaOf(element)!;
|
|
111
|
-
return {
|
|
112
|
-
value: element.props.value ?? meta.defaultValue,
|
|
113
|
-
label: element.props.label ?? meta.defaultLabel,
|
|
114
|
-
icon: element.props.icon ?? meta.defaultIcon,
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
/** True while this element is the pane's selected mode. */
|
|
119
|
-
function useIsActive(element: { value?: string }, defaultValue: string) {
|
|
120
|
-
const { mode } = useContext(PaneContext);
|
|
121
|
-
return mode === (element.value ?? defaultValue);
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
// ─── The three ────────────────────────────────────────────────────────────────
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* The pane as a table — the **real `DataViews.Table`**, not a copy, so it keeps sortable headers,
|
|
128
|
-
* selection, `renderCell`, the drag grip, `+ Add New` and virtualization past 300 rows. It reads
|
|
129
|
-
* its rows from the pane's scope, which is what points it at the selected node.
|
|
130
|
-
*
|
|
131
|
-
* One consequence worth knowing: its headers sort by writing to the **query**, which is how the
|
|
132
|
-
* root fetches. Sort the pane's rows in `paneRows` if you want the order self-contained.
|
|
133
|
-
*/
|
|
134
|
-
export const PaneTable = markPaneView(function PaneTable(props: TreePaneTableProps) {
|
|
135
|
-
const active = useIsActive({ value: props.value }, "table");
|
|
136
|
-
if (!active) return null;
|
|
137
|
-
// Standalone, `TableView` draws its own border and radius so it reads as a separated surface.
|
|
138
|
-
// In here it is not standalone: the pane around it already draws exactly that border and radius
|
|
139
|
-
// (`tree-view.tsx`), so leaving the table's on nests one inside the other a pixel apart.
|
|
140
|
-
// `TreePaneTableProps` omits `className`, so there is no caller value to merge with.
|
|
141
|
-
return <TableView {...withoutTabProps(props)} className="rounded-none border-0" />;
|
|
142
|
-
}, { defaultValue: "table", defaultLabel: "List", defaultIcon: <Table2 /> });
|
|
143
|
-
|
|
144
|
-
/**
|
|
145
|
-
* The pane as cards — the same `DataViewCard` the board paints, so a row looks the same in both.
|
|
146
|
-
* `renderCard` replaces it outright with markup of your own.
|
|
147
|
-
*/
|
|
148
|
-
export const PaneCards = markPaneView(function PaneCards({
|
|
149
|
-
value,
|
|
150
|
-
renderCard,
|
|
151
|
-
className,
|
|
152
|
-
}: TreePaneCardsProps) {
|
|
153
|
-
const { labelField } = useContext(PaneContext);
|
|
154
|
-
const { rows, visibleFields, getRowId } = useDataViewsData();
|
|
155
|
-
const active = useIsActive({ value }, "cards");
|
|
156
|
-
if (!active) return null;
|
|
157
|
-
|
|
158
|
-
return (
|
|
159
|
-
<div
|
|
160
|
-
className={
|
|
161
|
-
className ??
|
|
162
|
-
"grid grid-cols-1 content-start gap-3 p-4 sm:grid-cols-2 lg:grid-cols-3"
|
|
163
|
-
}
|
|
164
|
-
>
|
|
165
|
-
{rows.map((row, index) => {
|
|
166
|
-
const id = getRowId(row, index);
|
|
167
|
-
return (
|
|
168
|
-
<React.Fragment key={id}>
|
|
169
|
-
{renderCard ? (
|
|
170
|
-
renderCard({ row, id, index, fields: visibleFields })
|
|
171
|
-
) : (
|
|
172
|
-
<DataViewCard
|
|
173
|
-
title={labelField ? <Cell field={labelField} row={row} /> : undefined}
|
|
174
|
-
rows={buildCardRows(
|
|
175
|
-
visibleFields.filter((f) => f.path !== labelField?.path),
|
|
176
|
-
row,
|
|
177
|
-
)}
|
|
178
|
-
/>
|
|
179
|
-
)}
|
|
180
|
-
</React.Fragment>
|
|
181
|
-
);
|
|
182
|
-
})}
|
|
183
|
-
</div>
|
|
184
|
-
);
|
|
185
|
-
}, { defaultValue: "cards", defaultLabel: "Cards", defaultIcon: <LayoutGrid /> });
|
|
186
|
-
|
|
187
|
-
/**
|
|
188
|
-
* A mode of your own. Unlike the two above it has no default content — its `children` are the
|
|
189
|
-
* pane while it is selected, and nothing while it is not.
|
|
190
|
-
*
|
|
191
|
-
* `value` is required here: there is no sensible default name for a view only you know about.
|
|
192
|
-
*/
|
|
193
|
-
export const PaneTab = markPaneView(function PaneTab({ value, children }: TreePaneTabProps) {
|
|
194
|
-
if (!useIsActive({ value }, value)) return null;
|
|
195
|
-
return <>{children}</>;
|
|
196
|
-
}, { defaultValue: "", defaultLabel: "Tab" });
|