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,766 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Divider
|
|
3
|
-
description: Versatile separator component for creating visual divisions in horizontal or vertical layouts.
|
|
4
|
-
component: true
|
|
5
|
-
group: Layout & Containers
|
|
6
|
-
keywords: [divider, separator, hr, line, spacer, visual, section]
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Divider
|
|
10
|
-
|
|
11
|
-
A flexible separator component for creating visual divisions between content sections. Supports both horizontal and vertical orientations with proper accessibility attributes.
|
|
12
|
-
|
|
13
|
-
## Installation
|
|
14
|
-
|
|
15
|
-
TORCH Glare is a copy-in library: the CLI copies this component's source into your project
|
|
16
|
-
(you do **not** install it from the npm package). Run `init` once, then `add`:
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
npx torch-glare@latest init
|
|
20
|
-
npx torch-glare@latest add Divider
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
`add` also copies any components, hooks, and utilities that `Divider` depends on.
|
|
24
|
-
|
|
25
|
-
## Imports
|
|
26
|
-
|
|
27
|
-
```typescript
|
|
28
|
-
import { Divider } from '@/components/Divider'
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Basic Usage
|
|
32
|
-
|
|
33
|
-
```tsx
|
|
34
|
-
import { Divider } from '@/components/Divider'
|
|
35
|
-
|
|
36
|
-
export function BasicDivider() {
|
|
37
|
-
return (
|
|
38
|
-
<div>
|
|
39
|
-
<p>Content above divider</p>
|
|
40
|
-
<Divider />
|
|
41
|
-
<p>Content below divider</p>
|
|
42
|
-
</div>
|
|
43
|
-
)
|
|
44
|
-
}
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
## Examples
|
|
48
|
-
|
|
49
|
-
### Horizontal Divider
|
|
50
|
-
|
|
51
|
-
Standard horizontal separator between content sections.
|
|
52
|
-
|
|
53
|
-
```tsx
|
|
54
|
-
export function HorizontalDivider() {
|
|
55
|
-
return (
|
|
56
|
-
<div className="space-y-4">
|
|
57
|
-
<section>
|
|
58
|
-
<h2 className="text-xl font-bold">Profile Information</h2>
|
|
59
|
-
<p>Manage your personal details and preferences</p>
|
|
60
|
-
</section>
|
|
61
|
-
|
|
62
|
-
<Divider />
|
|
63
|
-
|
|
64
|
-
<section>
|
|
65
|
-
<h2 className="text-xl font-bold">Account Settings</h2>
|
|
66
|
-
<p>Configure your account security and privacy</p>
|
|
67
|
-
</section>
|
|
68
|
-
|
|
69
|
-
<Divider />
|
|
70
|
-
|
|
71
|
-
<section>
|
|
72
|
-
<h2 className="text-xl font-bold">Billing</h2>
|
|
73
|
-
<p>Manage subscriptions and payment methods</p>
|
|
74
|
-
</section>
|
|
75
|
-
</div>
|
|
76
|
-
)
|
|
77
|
-
}
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
### Vertical Divider
|
|
81
|
-
|
|
82
|
-
Vertical separator for inline content.
|
|
83
|
-
|
|
84
|
-
```tsx
|
|
85
|
-
export function VerticalDivider() {
|
|
86
|
-
return (
|
|
87
|
-
<div className="flex items-center gap-4 h-12">
|
|
88
|
-
<button className="px-4">Home</button>
|
|
89
|
-
|
|
90
|
-
<Divider orientation="vertical" />
|
|
91
|
-
|
|
92
|
-
<button className="px-4">About</button>
|
|
93
|
-
|
|
94
|
-
<Divider orientation="vertical" />
|
|
95
|
-
|
|
96
|
-
<button className="px-4">Contact</button>
|
|
97
|
-
|
|
98
|
-
<Divider orientation="vertical" />
|
|
99
|
-
|
|
100
|
-
<button className="px-4">Help</button>
|
|
101
|
-
</div>
|
|
102
|
-
)
|
|
103
|
-
}
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
### In Navigation Bar
|
|
107
|
-
|
|
108
|
-
Separating navigation groups.
|
|
109
|
-
|
|
110
|
-
```tsx
|
|
111
|
-
export function NavigationWithDividers() {
|
|
112
|
-
return (
|
|
113
|
-
<nav className="flex items-center gap-2 p-4 bg-background-system-body-secondary rounded-lg">
|
|
114
|
-
{/* Primary actions */}
|
|
115
|
-
<button className="px-3 py-2">Dashboard</button>
|
|
116
|
-
<button className="px-3 py-2">Projects</button>
|
|
117
|
-
<button className="px-3 py-2">Tasks</button>
|
|
118
|
-
|
|
119
|
-
<Divider orientation="vertical" className="h-8" />
|
|
120
|
-
|
|
121
|
-
{/* Secondary actions */}
|
|
122
|
-
<button className="px-3 py-2">Settings</button>
|
|
123
|
-
<button className="px-3 py-2">Profile</button>
|
|
124
|
-
|
|
125
|
-
{/* Spacer */}
|
|
126
|
-
<div className="flex-1" />
|
|
127
|
-
|
|
128
|
-
<Divider orientation="vertical" className="h-8" />
|
|
129
|
-
|
|
130
|
-
{/* Account actions */}
|
|
131
|
-
<button className="px-3 py-2">
|
|
132
|
-
<i className="ri-notification-line"></i>
|
|
133
|
-
</button>
|
|
134
|
-
<button className="px-3 py-2">
|
|
135
|
-
<i className="ri-user-line"></i>
|
|
136
|
-
</button>
|
|
137
|
-
</nav>
|
|
138
|
-
)
|
|
139
|
-
}
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
### In Card Components
|
|
143
|
-
|
|
144
|
-
Dividing card sections.
|
|
145
|
-
|
|
146
|
-
```tsx
|
|
147
|
-
export function CardWithDividers() {
|
|
148
|
-
return (
|
|
149
|
-
<div className="border border-border-presentation-global-primary rounded-lg">
|
|
150
|
-
<div className="p-4">
|
|
151
|
-
<h3 className="text-lg font-bold">Product Details</h3>
|
|
152
|
-
<p className="text-sm text-content-presentation-global-secondary">
|
|
153
|
-
Premium subscription plan
|
|
154
|
-
</p>
|
|
155
|
-
</div>
|
|
156
|
-
|
|
157
|
-
<Divider />
|
|
158
|
-
|
|
159
|
-
<div className="p-4">
|
|
160
|
-
<div className="flex justify-between items-center mb-2">
|
|
161
|
-
<span>Monthly Price</span>
|
|
162
|
-
<span className="font-bold">$29.99</span>
|
|
163
|
-
</div>
|
|
164
|
-
<div className="flex justify-between items-center mb-2">
|
|
165
|
-
<span>Annual Price</span>
|
|
166
|
-
<span className="font-bold">$299.99</span>
|
|
167
|
-
</div>
|
|
168
|
-
<div className="flex justify-between items-center">
|
|
169
|
-
<span>Savings</span>
|
|
170
|
-
<span className="text-green-500 font-bold">$59.89 (16%)</span>
|
|
171
|
-
</div>
|
|
172
|
-
</div>
|
|
173
|
-
|
|
174
|
-
<Divider />
|
|
175
|
-
|
|
176
|
-
<div className="p-4">
|
|
177
|
-
<ul className="space-y-2">
|
|
178
|
-
<li className="flex items-center gap-2">
|
|
179
|
-
<i className="ri-check-line text-green-500"></i>
|
|
180
|
-
Unlimited projects
|
|
181
|
-
</li>
|
|
182
|
-
<li className="flex items-center gap-2">
|
|
183
|
-
<i className="ri-check-line text-green-500"></i>
|
|
184
|
-
Priority support
|
|
185
|
-
</li>
|
|
186
|
-
<li className="flex items-center gap-2">
|
|
187
|
-
<i className="ri-check-line text-green-500"></i>
|
|
188
|
-
Advanced analytics
|
|
189
|
-
</li>
|
|
190
|
-
</ul>
|
|
191
|
-
</div>
|
|
192
|
-
|
|
193
|
-
<Divider />
|
|
194
|
-
|
|
195
|
-
<div className="p-4">
|
|
196
|
-
<button className="w-full bg-blue-500 text-white py-2 rounded">
|
|
197
|
-
Subscribe Now
|
|
198
|
-
</button>
|
|
199
|
-
</div>
|
|
200
|
-
</div>
|
|
201
|
-
)
|
|
202
|
-
}
|
|
203
|
-
```
|
|
204
|
-
|
|
205
|
-
### In Lists
|
|
206
|
-
|
|
207
|
-
Separating list items.
|
|
208
|
-
|
|
209
|
-
```tsx
|
|
210
|
-
export function ListWithDividers() {
|
|
211
|
-
const notifications = [
|
|
212
|
-
{ id: 1, title: 'New message from John', time: '2 min ago', icon: 'ri-message-3-line' },
|
|
213
|
-
{ id: 2, title: 'Project deadline approaching', time: '1 hour ago', icon: 'ri-calendar-line' },
|
|
214
|
-
{ id: 3, title: 'Team member joined', time: '3 hours ago', icon: 'ri-user-add-line' },
|
|
215
|
-
{ id: 4, title: 'Report generated', time: '1 day ago', icon: 'ri-file-chart-line' },
|
|
216
|
-
]
|
|
217
|
-
|
|
218
|
-
return (
|
|
219
|
-
<div className="border border-border-presentation-global-primary rounded-lg">
|
|
220
|
-
{notifications.map((notification, index) => (
|
|
221
|
-
<React.Fragment key={notification.id}>
|
|
222
|
-
<div className="p-4 hover:bg-background-presentation-global-secondary transition-colors cursor-pointer">
|
|
223
|
-
<div className="flex items-start gap-3">
|
|
224
|
-
<div className="w-10 h-10 bg-blue-100 rounded-full flex items-center justify-center">
|
|
225
|
-
<i className={`${notification.icon} text-blue-500`}></i>
|
|
226
|
-
</div>
|
|
227
|
-
<div className="flex-1">
|
|
228
|
-
<h4 className="font-medium">{notification.title}</h4>
|
|
229
|
-
<p className="text-sm text-content-presentation-global-secondary">
|
|
230
|
-
{notification.time}
|
|
231
|
-
</p>
|
|
232
|
-
</div>
|
|
233
|
-
</div>
|
|
234
|
-
</div>
|
|
235
|
-
{index < notifications.length - 1 && <Divider />}
|
|
236
|
-
</React.Fragment>
|
|
237
|
-
))}
|
|
238
|
-
</div>
|
|
239
|
-
)
|
|
240
|
-
}
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
### In Forms
|
|
244
|
-
|
|
245
|
-
Grouping form sections.
|
|
246
|
-
|
|
247
|
-
```tsx
|
|
248
|
-
export function FormWithDividers() {
|
|
249
|
-
return (
|
|
250
|
-
<form className="max-w-2xl space-y-6">
|
|
251
|
-
{/* Personal Information */}
|
|
252
|
-
<div>
|
|
253
|
-
<h2 className="text-lg font-semibold mb-4">Personal Information</h2>
|
|
254
|
-
<div className="space-y-3">
|
|
255
|
-
<InputField label="First Name" placeholder="John" />
|
|
256
|
-
<InputField label="Last Name" placeholder="Doe" />
|
|
257
|
-
<InputField label="Email" type="email" placeholder="john@example.com" />
|
|
258
|
-
</div>
|
|
259
|
-
</div>
|
|
260
|
-
|
|
261
|
-
<Divider />
|
|
262
|
-
|
|
263
|
-
{/* Address */}
|
|
264
|
-
<div>
|
|
265
|
-
<h2 className="text-lg font-semibold mb-4">Address</h2>
|
|
266
|
-
<div className="space-y-3">
|
|
267
|
-
<InputField label="Street Address" placeholder="123 Main St" />
|
|
268
|
-
<div className="grid grid-cols-2 gap-3">
|
|
269
|
-
<InputField label="City" placeholder="New York" />
|
|
270
|
-
<InputField label="State" placeholder="NY" />
|
|
271
|
-
</div>
|
|
272
|
-
<InputField label="ZIP Code" placeholder="10001" />
|
|
273
|
-
</div>
|
|
274
|
-
</div>
|
|
275
|
-
|
|
276
|
-
<Divider />
|
|
277
|
-
|
|
278
|
-
{/* Preferences */}
|
|
279
|
-
<div>
|
|
280
|
-
<h2 className="text-lg font-semibold mb-4">Preferences</h2>
|
|
281
|
-
<div className="space-y-2">
|
|
282
|
-
<LabeledCheckBox id="marketing" label="Receive marketing emails" />
|
|
283
|
-
<LabeledCheckBox id="newsletter" label="Subscribe to newsletter" />
|
|
284
|
-
<LabeledCheckBox id="updates" label="Product updates" />
|
|
285
|
-
</div>
|
|
286
|
-
</div>
|
|
287
|
-
|
|
288
|
-
<Divider />
|
|
289
|
-
|
|
290
|
-
<div className="flex justify-end gap-3">
|
|
291
|
-
<Button variant="BluSecStyle">Cancel</Button>
|
|
292
|
-
<Button variant="PrimeStyle">Save Changes</Button>
|
|
293
|
-
</div>
|
|
294
|
-
</form>
|
|
295
|
-
)
|
|
296
|
-
}
|
|
297
|
-
```
|
|
298
|
-
|
|
299
|
-
### With Text Label
|
|
300
|
-
|
|
301
|
-
Divider with centered text.
|
|
302
|
-
|
|
303
|
-
```tsx
|
|
304
|
-
export function DividerWithText() {
|
|
305
|
-
return (
|
|
306
|
-
<div className="space-y-6">
|
|
307
|
-
{/* Login section */}
|
|
308
|
-
<div className="space-y-3">
|
|
309
|
-
<InputField type="email" placeholder="Email" className="w-full" />
|
|
310
|
-
<InputField type="password" placeholder="Password" className="w-full" />
|
|
311
|
-
<Button className="w-full">Sign In</Button>
|
|
312
|
-
</div>
|
|
313
|
-
|
|
314
|
-
{/* Divider with text */}
|
|
315
|
-
<div className="relative">
|
|
316
|
-
<Divider />
|
|
317
|
-
<div className="absolute inset-0 flex items-center justify-center">
|
|
318
|
-
<span className="bg-background-system-body-primary px-2 text-sm text-content-presentation-global-secondary">
|
|
319
|
-
OR
|
|
320
|
-
</span>
|
|
321
|
-
</div>
|
|
322
|
-
</div>
|
|
323
|
-
|
|
324
|
-
{/* Social login */}
|
|
325
|
-
<div className="space-y-2">
|
|
326
|
-
<Button className="w-full" variant="BluSecStyle">
|
|
327
|
-
<i className="ri-google-fill mr-2"></i>
|
|
328
|
-
Continue with Google
|
|
329
|
-
</Button>
|
|
330
|
-
<Button className="w-full" variant="BluSecStyle">
|
|
331
|
-
<i className="ri-github-fill mr-2"></i>
|
|
332
|
-
Continue with GitHub
|
|
333
|
-
</Button>
|
|
334
|
-
</div>
|
|
335
|
-
</div>
|
|
336
|
-
)
|
|
337
|
-
}
|
|
338
|
-
```
|
|
339
|
-
|
|
340
|
-
### In Toolbars
|
|
341
|
-
|
|
342
|
-
Grouping toolbar actions.
|
|
343
|
-
|
|
344
|
-
```tsx
|
|
345
|
-
export function ToolbarWithDividers() {
|
|
346
|
-
return (
|
|
347
|
-
<div className="flex items-center gap-1 p-2 border border-border-presentation-global-primary rounded-lg">
|
|
348
|
-
{/* Text formatting */}
|
|
349
|
-
<ActionButton size="S" title="Bold">
|
|
350
|
-
<i className="ri-bold"></i>
|
|
351
|
-
</ActionButton>
|
|
352
|
-
<ActionButton size="S" title="Italic">
|
|
353
|
-
<i className="ri-italic"></i>
|
|
354
|
-
</ActionButton>
|
|
355
|
-
<ActionButton size="S" title="Underline">
|
|
356
|
-
<i className="ri-underline"></i>
|
|
357
|
-
</ActionButton>
|
|
358
|
-
|
|
359
|
-
<Divider orientation="vertical" className="h-6 mx-1" />
|
|
360
|
-
|
|
361
|
-
{/* Alignment */}
|
|
362
|
-
<ActionButton size="S" title="Align Left">
|
|
363
|
-
<i className="ri-align-left"></i>
|
|
364
|
-
</ActionButton>
|
|
365
|
-
<ActionButton size="S" title="Align Center">
|
|
366
|
-
<i className="ri-align-center"></i>
|
|
367
|
-
</ActionButton>
|
|
368
|
-
<ActionButton size="S" title="Align Right">
|
|
369
|
-
<i className="ri-align-right"></i>
|
|
370
|
-
</ActionButton>
|
|
371
|
-
|
|
372
|
-
<Divider orientation="vertical" className="h-6 mx-1" />
|
|
373
|
-
|
|
374
|
-
{/* Lists */}
|
|
375
|
-
<ActionButton size="S" title="Bullet List">
|
|
376
|
-
<i className="ri-list-unordered"></i>
|
|
377
|
-
</ActionButton>
|
|
378
|
-
<ActionButton size="S" title="Numbered List">
|
|
379
|
-
<i className="ri-list-ordered"></i>
|
|
380
|
-
</ActionButton>
|
|
381
|
-
|
|
382
|
-
<Divider orientation="vertical" className="h-6 mx-1" />
|
|
383
|
-
|
|
384
|
-
{/* Insert */}
|
|
385
|
-
<ActionButton size="S" title="Insert Link">
|
|
386
|
-
<i className="ri-link"></i>
|
|
387
|
-
</ActionButton>
|
|
388
|
-
<ActionButton size="S" title="Insert Image">
|
|
389
|
-
<i className="ri-image-line"></i>
|
|
390
|
-
</ActionButton>
|
|
391
|
-
</div>
|
|
392
|
-
)
|
|
393
|
-
}
|
|
394
|
-
```
|
|
395
|
-
|
|
396
|
-
### In Sidebars
|
|
397
|
-
|
|
398
|
-
Visual separation in sidebar content.
|
|
399
|
-
|
|
400
|
-
```tsx
|
|
401
|
-
export function SidebarWithDividers() {
|
|
402
|
-
return (
|
|
403
|
-
<aside className="w-64 border-r border-border-presentation-global-primary h-screen p-4">
|
|
404
|
-
{/* User profile */}
|
|
405
|
-
<div className="flex items-center gap-3 mb-4">
|
|
406
|
-
<Avatar size="M" src="/avatar.jpg" />
|
|
407
|
-
<div>
|
|
408
|
-
<div className="font-medium">John Doe</div>
|
|
409
|
-
<div className="text-xs text-content-presentation-global-secondary">
|
|
410
|
-
john@example.com
|
|
411
|
-
</div>
|
|
412
|
-
</div>
|
|
413
|
-
</div>
|
|
414
|
-
|
|
415
|
-
<Divider className="my-4" />
|
|
416
|
-
|
|
417
|
-
{/* Main navigation */}
|
|
418
|
-
<nav className="space-y-1 mb-4">
|
|
419
|
-
<SideBarItem active>
|
|
420
|
-
<i className="ri-dashboard-line mr-2"></i>
|
|
421
|
-
Dashboard
|
|
422
|
-
</SideBarItem>
|
|
423
|
-
<SideBarItem>
|
|
424
|
-
<i className="ri-folder-line mr-2"></i>
|
|
425
|
-
Projects
|
|
426
|
-
</SideBarItem>
|
|
427
|
-
<SideBarItem>
|
|
428
|
-
<i className="ri-task-line mr-2"></i>
|
|
429
|
-
Tasks
|
|
430
|
-
</SideBarItem>
|
|
431
|
-
</nav>
|
|
432
|
-
|
|
433
|
-
<Divider className="my-4" />
|
|
434
|
-
|
|
435
|
-
{/* Secondary navigation */}
|
|
436
|
-
<nav className="space-y-1">
|
|
437
|
-
<SideBarItem>
|
|
438
|
-
<i className="ri-settings-3-line mr-2"></i>
|
|
439
|
-
Settings
|
|
440
|
-
</SideBarItem>
|
|
441
|
-
<SideBarItem>
|
|
442
|
-
<i className="ri-question-line mr-2"></i>
|
|
443
|
-
Help
|
|
444
|
-
</SideBarItem>
|
|
445
|
-
<SideBarItem>
|
|
446
|
-
<i className="ri-logout-box-line mr-2"></i>
|
|
447
|
-
Sign Out
|
|
448
|
-
</SideBarItem>
|
|
449
|
-
</nav>
|
|
450
|
-
</aside>
|
|
451
|
-
)
|
|
452
|
-
}
|
|
453
|
-
```
|
|
454
|
-
|
|
455
|
-
### Custom Styling
|
|
456
|
-
|
|
457
|
-
Styled dividers with custom colors and thickness.
|
|
458
|
-
|
|
459
|
-
```tsx
|
|
460
|
-
export function StyledDividers() {
|
|
461
|
-
return (
|
|
462
|
-
<div className="space-y-8">
|
|
463
|
-
{/* Thick divider */}
|
|
464
|
-
<div>
|
|
465
|
-
<h3>Thick Divider</h3>
|
|
466
|
-
<Divider className="h-[2px]" />
|
|
467
|
-
</div>
|
|
468
|
-
|
|
469
|
-
{/* Colored dividers */}
|
|
470
|
-
<div>
|
|
471
|
-
<h3>Colored Dividers</h3>
|
|
472
|
-
<Divider className="bg-blue-500" />
|
|
473
|
-
<br />
|
|
474
|
-
<Divider className="bg-green-500" />
|
|
475
|
-
<br />
|
|
476
|
-
<Divider className="bg-red-500" />
|
|
477
|
-
</div>
|
|
478
|
-
|
|
479
|
-
{/* Gradient divider */}
|
|
480
|
-
<div>
|
|
481
|
-
<h3>Gradient Divider</h3>
|
|
482
|
-
<Divider className="h-[2px] bg-gradient-to-r from-transparent via-blue-500 to-transparent" />
|
|
483
|
-
</div>
|
|
484
|
-
|
|
485
|
-
{/* Dashed divider */}
|
|
486
|
-
<div>
|
|
487
|
-
<h3>Dashed Divider</h3>
|
|
488
|
-
<Divider className="border-t border-dashed border-border-presentation-global-primary bg-transparent" />
|
|
489
|
-
</div>
|
|
490
|
-
|
|
491
|
-
{/* Dotted divider */}
|
|
492
|
-
<div>
|
|
493
|
-
<h3>Dotted Divider</h3>
|
|
494
|
-
<Divider className="border-t border-dotted border-border-presentation-global-primary bg-transparent" />
|
|
495
|
-
</div>
|
|
496
|
-
</div>
|
|
497
|
-
)
|
|
498
|
-
}
|
|
499
|
-
```
|
|
500
|
-
|
|
501
|
-
## API Reference
|
|
502
|
-
|
|
503
|
-
### Divider Props
|
|
504
|
-
|
|
505
|
-
| Prop | Type | Default | Description |
|
|
506
|
-
|------|------|---------|-------------|
|
|
507
|
-
| orientation | `'horizontal' \| 'vertical'` | `'horizontal'` | Divider orientation |
|
|
508
|
-
| decorative | `boolean` | `true` | Whether divider is purely visual |
|
|
509
|
-
| className | `string` | - | Additional CSS classes |
|
|
510
|
-
| ref | `Ref<HTMLDivElement>` | - | Forward ref to div element |
|
|
511
|
-
|
|
512
|
-
### Decorative vs Semantic
|
|
513
|
-
|
|
514
|
-
| decorative | role | aria-orientation | Use Case |
|
|
515
|
-
|------------|------|------------------|----------|
|
|
516
|
-
| `true` | `"none"` | `undefined` | Visual separation only |
|
|
517
|
-
| `false` | `"separator"` | orientation value | Semantic content separation |
|
|
518
|
-
|
|
519
|
-
## Styling
|
|
520
|
-
|
|
521
|
-
### Default Styles
|
|
522
|
-
|
|
523
|
-
- **Horizontal**: `height: 1px`, `width: 100%`
|
|
524
|
-
- **Vertical**: `height: 100%`, `width: 1px`
|
|
525
|
-
- **Color**: `--border-presentation-global-primary`
|
|
526
|
-
- **Background**: Solid color fill
|
|
527
|
-
|
|
528
|
-
### Customization
|
|
529
|
-
|
|
530
|
-
```tsx
|
|
531
|
-
// Adjust thickness
|
|
532
|
-
<Divider className="h-[2px]" />
|
|
533
|
-
<Divider orientation="vertical" className="w-[2px]" />
|
|
534
|
-
|
|
535
|
-
// Custom colors
|
|
536
|
-
<Divider className="bg-blue-500" />
|
|
537
|
-
|
|
538
|
-
// With margins
|
|
539
|
-
<Divider className="my-6" />
|
|
540
|
-
<Divider orientation="vertical" className="mx-3" />
|
|
541
|
-
|
|
542
|
-
// Custom height for vertical
|
|
543
|
-
<Divider orientation="vertical" className="h-8" />
|
|
544
|
-
```
|
|
545
|
-
|
|
546
|
-
## TypeScript Types
|
|
547
|
-
|
|
548
|
-
```typescript
|
|
549
|
-
interface DividerProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
550
|
-
orientation?: 'horizontal' | 'vertical'
|
|
551
|
-
decorative?: boolean
|
|
552
|
-
}
|
|
553
|
-
```
|
|
554
|
-
|
|
555
|
-
## Common Patterns
|
|
556
|
-
|
|
557
|
-
### Conditional Dividers
|
|
558
|
-
|
|
559
|
-
```tsx
|
|
560
|
-
function ConditionalDivider({ items }) {
|
|
561
|
-
return (
|
|
562
|
-
<div>
|
|
563
|
-
{items.map((item, index) => (
|
|
564
|
-
<React.Fragment key={item.id}>
|
|
565
|
-
<div>{item.content}</div>
|
|
566
|
-
{index < items.length - 1 && <Divider className="my-2" />}
|
|
567
|
-
</React.Fragment>
|
|
568
|
-
))}
|
|
569
|
-
</div>
|
|
570
|
-
)
|
|
571
|
-
}
|
|
572
|
-
```
|
|
573
|
-
|
|
574
|
-
### Responsive Dividers
|
|
575
|
-
|
|
576
|
-
```tsx
|
|
577
|
-
function ResponsiveDivider() {
|
|
578
|
-
return (
|
|
579
|
-
<>
|
|
580
|
-
{/* Horizontal on mobile, vertical on desktop */}
|
|
581
|
-
<Divider className="md:hidden" />
|
|
582
|
-
<Divider orientation="vertical" className="hidden md:block" />
|
|
583
|
-
</>
|
|
584
|
-
)
|
|
585
|
-
}
|
|
586
|
-
```
|
|
587
|
-
|
|
588
|
-
### Divider Group
|
|
589
|
-
|
|
590
|
-
```tsx
|
|
591
|
-
function DividerGroup({ children, spacing = 'md' }) {
|
|
592
|
-
const spacingClasses = {
|
|
593
|
-
sm: 'space-y-2',
|
|
594
|
-
md: 'space-y-4',
|
|
595
|
-
lg: 'space-y-6',
|
|
596
|
-
}
|
|
597
|
-
|
|
598
|
-
return (
|
|
599
|
-
<div className={spacingClasses[spacing]}>
|
|
600
|
-
{React.Children.map(children, (child, index) => (
|
|
601
|
-
<React.Fragment>
|
|
602
|
-
{child}
|
|
603
|
-
{index < React.Children.count(children) - 1 && <Divider />}
|
|
604
|
-
</React.Fragment>
|
|
605
|
-
))}
|
|
606
|
-
</div>
|
|
607
|
-
)
|
|
608
|
-
}
|
|
609
|
-
```
|
|
610
|
-
|
|
611
|
-
## Testing
|
|
612
|
-
|
|
613
|
-
```typescript
|
|
614
|
-
import { render, screen } from '@testing-library/react'
|
|
615
|
-
import { Divider } from '@/components/Divider'
|
|
616
|
-
|
|
617
|
-
describe('Divider', () => {
|
|
618
|
-
it('renders horizontal divider by default', () => {
|
|
619
|
-
const { container } = render(<Divider />)
|
|
620
|
-
const divider = container.firstChild
|
|
621
|
-
|
|
622
|
-
expect(divider).toHaveClass('h-[1px]', 'w-full')
|
|
623
|
-
})
|
|
624
|
-
|
|
625
|
-
it('renders vertical divider', () => {
|
|
626
|
-
const { container } = render(<Divider orientation="vertical" />)
|
|
627
|
-
const divider = container.firstChild
|
|
628
|
-
|
|
629
|
-
expect(divider).toHaveClass('h-full', 'w-[1px]')
|
|
630
|
-
})
|
|
631
|
-
|
|
632
|
-
it('applies decorative role by default', () => {
|
|
633
|
-
const { container } = render(<Divider />)
|
|
634
|
-
const divider = container.firstChild
|
|
635
|
-
|
|
636
|
-
expect(divider).toHaveAttribute('role', 'none')
|
|
637
|
-
expect(divider).not.toHaveAttribute('aria-orientation')
|
|
638
|
-
})
|
|
639
|
-
|
|
640
|
-
it('applies separator role when not decorative', () => {
|
|
641
|
-
const { container } = render(
|
|
642
|
-
<Divider decorative={false} orientation="horizontal" />
|
|
643
|
-
)
|
|
644
|
-
const divider = container.firstChild
|
|
645
|
-
|
|
646
|
-
expect(divider).toHaveAttribute('role', 'separator')
|
|
647
|
-
expect(divider).toHaveAttribute('aria-orientation', 'horizontal')
|
|
648
|
-
})
|
|
649
|
-
|
|
650
|
-
it('forwards ref correctly', () => {
|
|
651
|
-
const ref = React.createRef<HTMLDivElement>()
|
|
652
|
-
render(<Divider ref={ref} />)
|
|
653
|
-
|
|
654
|
-
expect(ref.current).toBeInstanceOf(HTMLDivElement)
|
|
655
|
-
})
|
|
656
|
-
|
|
657
|
-
it('applies custom className', () => {
|
|
658
|
-
const { container } = render(<Divider className="custom-class" />)
|
|
659
|
-
const divider = container.firstChild
|
|
660
|
-
|
|
661
|
-
expect(divider).toHaveClass('custom-class')
|
|
662
|
-
})
|
|
663
|
-
})
|
|
664
|
-
```
|
|
665
|
-
|
|
666
|
-
## Accessibility
|
|
667
|
-
|
|
668
|
-
- **Semantic Role**: Uses `role="separator"` for semantic dividers
|
|
669
|
-
- **Decorative**: Uses `role="none"` for purely visual dividers
|
|
670
|
-
- **ARIA Orientation**: Properly indicates orientation for screen readers
|
|
671
|
-
- **Visual Clarity**: Clear visual separation for all users
|
|
672
|
-
- **Keyboard Navigation**: Does not interfere with keyboard navigation
|
|
673
|
-
|
|
674
|
-
### Accessibility Best Practices
|
|
675
|
-
|
|
676
|
-
```tsx
|
|
677
|
-
// Decorative divider (default) - purely visual
|
|
678
|
-
<Divider />
|
|
679
|
-
|
|
680
|
-
// Semantic divider - meaningful content separation
|
|
681
|
-
<section>
|
|
682
|
-
<h2>Section 1</h2>
|
|
683
|
-
<p>Content...</p>
|
|
684
|
-
</section>
|
|
685
|
-
|
|
686
|
-
<Divider decorative={false} />
|
|
687
|
-
|
|
688
|
-
<section>
|
|
689
|
-
<h2>Section 2</h2>
|
|
690
|
-
<p>Content...</p>
|
|
691
|
-
</section>
|
|
692
|
-
```
|
|
693
|
-
|
|
694
|
-
## Performance
|
|
695
|
-
|
|
696
|
-
- **Lightweight**: Minimal DOM footprint (single div element)
|
|
697
|
-
- **CSS-Only**: No JavaScript logic or event handlers
|
|
698
|
-
- **Reflow Impact**: Minimal - simple 1px height/width
|
|
699
|
-
- **Bundle Size**: ~0.3 KB gzipped (including types)
|
|
700
|
-
- **Render Performance**: < 0.1ms average render time
|
|
701
|
-
|
|
702
|
-
### Performance Tips
|
|
703
|
-
|
|
704
|
-
```tsx
|
|
705
|
-
// Use CSS classes instead of inline styles
|
|
706
|
-
<Divider className="my-4" /> // Good
|
|
707
|
-
|
|
708
|
-
// Memoize in lists
|
|
709
|
-
const MemoizedDivider = React.memo(Divider)
|
|
710
|
-
|
|
711
|
-
// Avoid unnecessary dividers
|
|
712
|
-
{items.length > 1 && <Divider />} // Conditional rendering
|
|
713
|
-
```
|
|
714
|
-
|
|
715
|
-
## Migration Guide
|
|
716
|
-
|
|
717
|
-
### From HTML hr Element
|
|
718
|
-
|
|
719
|
-
```tsx
|
|
720
|
-
// Before: HTML hr
|
|
721
|
-
<hr className="my-4 border-gray-300" />
|
|
722
|
-
|
|
723
|
-
// After: Divider component
|
|
724
|
-
<Divider className="my-4" />
|
|
725
|
-
```
|
|
726
|
-
|
|
727
|
-
### From Custom Divider
|
|
728
|
-
|
|
729
|
-
```tsx
|
|
730
|
-
// Before: Custom div
|
|
731
|
-
<div className="h-[1px] w-full bg-gray-300" />
|
|
732
|
-
|
|
733
|
-
// After: Divider component
|
|
734
|
-
<Divider />
|
|
735
|
-
```
|
|
736
|
-
|
|
737
|
-
### From Material-UI Divider
|
|
738
|
-
|
|
739
|
-
```tsx
|
|
740
|
-
// Before: Material-UI
|
|
741
|
-
<Divider orientation="vertical" flexItem />
|
|
742
|
-
|
|
743
|
-
// After: Divider component
|
|
744
|
-
<Divider orientation="vertical" className="h-full" />
|
|
745
|
-
```
|
|
746
|
-
|
|
747
|
-
### From Radix Separator
|
|
748
|
-
|
|
749
|
-
```tsx
|
|
750
|
-
// Before: Radix Separator
|
|
751
|
-
<Separator.Root orientation="horizontal" decorative />
|
|
752
|
-
|
|
753
|
-
// After: Divider component
|
|
754
|
-
<Divider orientation="horizontal" decorative />
|
|
755
|
-
```
|
|
756
|
-
|
|
757
|
-
## Best Practices
|
|
758
|
-
|
|
759
|
-
1. **Use decorative by default**: Most dividers are purely visual
|
|
760
|
-
2. **Semantic dividers for content**: Use `decorative={false}` when dividing meaningful content sections
|
|
761
|
-
3. **Consistent spacing**: Apply consistent margin classes for uniform spacing
|
|
762
|
-
4. **Group related content**: Use dividers to create visual hierarchy
|
|
763
|
-
5. **Avoid overuse**: Too many dividers can clutter the interface
|
|
764
|
-
6. **Vertical height**: Always specify height for vertical dividers
|
|
765
|
-
7. **Responsive consideration**: Consider different orientations for mobile/desktop
|
|
766
|
-
8. **Color consistency**: Use theme colors for consistent appearance
|