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
package/docs/components/badge.md
DELETED
|
@@ -1,301 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Badge
|
|
3
|
-
description: Status indicator and label component with solid/subtle styles, ten color options, and an optional close button.
|
|
4
|
-
component: true
|
|
5
|
-
group: Data Display
|
|
6
|
-
keywords: [badge, tag, label, status, chip, pill, indicator]
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Badge
|
|
10
|
-
|
|
11
|
-
Compact label for status, categories, and tags. Two visual styles (`solid`, `subtle`), ten colors, three sizes, and an optional close button for chip-style use.
|
|
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 Badge
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
`add` also copies any components, hooks, and utilities that `Badge` depends on.
|
|
24
|
-
|
|
25
|
-
## Imports
|
|
26
|
-
|
|
27
|
-
```typescript
|
|
28
|
-
import { Badge, badgeStyles } from '@/components/Badge'
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Basic Usage
|
|
32
|
-
|
|
33
|
-
```tsx
|
|
34
|
-
import { Badge } from '@/components/Badge'
|
|
35
|
-
|
|
36
|
-
export function BasicBadge() {
|
|
37
|
-
return <Badge label="Active" color="green" />
|
|
38
|
-
}
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
Defaults: `badgeStyle="subtle"`, `color="gray"`, `size="S"`, `showIcon=true`.
|
|
42
|
-
|
|
43
|
-
## Examples
|
|
44
|
-
|
|
45
|
-
### Styles
|
|
46
|
-
|
|
47
|
-
`subtle` (default) tints the background and renders text/icons in a single neutral foreground color (`--Content-Presentation-Global-subtle`) blended with `mix-blend-mode: luminosity`. `solid` fills the badge and uses a light primary foreground.
|
|
48
|
-
|
|
49
|
-
```tsx
|
|
50
|
-
export function BadgeStyles() {
|
|
51
|
-
return (
|
|
52
|
-
<div className="flex flex-col gap-3">
|
|
53
|
-
<div className="flex flex-wrap gap-2">
|
|
54
|
-
<Badge badgeStyle="subtle" color="gray" label="Subtle" />
|
|
55
|
-
<Badge badgeStyle="subtle" color="blue" label="Subtle" />
|
|
56
|
-
<Badge badgeStyle="subtle" color="green" label="Subtle" />
|
|
57
|
-
<Badge badgeStyle="subtle" color="red" label="Subtle" />
|
|
58
|
-
</div>
|
|
59
|
-
|
|
60
|
-
<div className="flex flex-wrap gap-2">
|
|
61
|
-
<Badge badgeStyle="solid" color="gray" label="Solid" />
|
|
62
|
-
<Badge badgeStyle="solid" color="blue" label="Solid" />
|
|
63
|
-
<Badge badgeStyle="solid" color="green" label="Solid" />
|
|
64
|
-
<Badge badgeStyle="solid" color="red" label="Solid" />
|
|
65
|
-
</div>
|
|
66
|
-
</div>
|
|
67
|
-
)
|
|
68
|
-
}
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### Colors
|
|
72
|
-
|
|
73
|
-
Ten colors. Color drives the background only — foreground is uniform per `badgeStyle`.
|
|
74
|
-
|
|
75
|
-
```tsx
|
|
76
|
-
const COLORS = [
|
|
77
|
-
'gray', 'slate', 'red', 'orange', 'yellow',
|
|
78
|
-
'green', 'ocean', 'blue', 'purple', 'rose',
|
|
79
|
-
] as const
|
|
80
|
-
|
|
81
|
-
export function BadgeColors() {
|
|
82
|
-
return (
|
|
83
|
-
<div className="flex flex-wrap gap-2">
|
|
84
|
-
{COLORS.map(color => (
|
|
85
|
-
<Badge key={color} color={color} label={color} />
|
|
86
|
-
))}
|
|
87
|
-
</div>
|
|
88
|
-
)
|
|
89
|
-
}
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
### Sizes
|
|
93
|
-
|
|
94
|
-
```tsx
|
|
95
|
-
export function BadgeSizes() {
|
|
96
|
-
return (
|
|
97
|
-
<div className="flex items-center gap-3">
|
|
98
|
-
<Badge size="XS" color="blue" label="XS" />
|
|
99
|
-
<Badge size="S" color="blue" label="S" />
|
|
100
|
-
<Badge size="M" color="blue" label="M" />
|
|
101
|
-
</div>
|
|
102
|
-
)
|
|
103
|
-
}
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
| Size | Height | Default icon | Typography |
|
|
107
|
-
|------|--------|--------------|------------|
|
|
108
|
-
| XS | 18px | 12px | body-small-medium |
|
|
109
|
-
| S | 22px | 12px | body-small-medium |
|
|
110
|
-
| M | 26px | 16px | body-medium-medium |
|
|
111
|
-
|
|
112
|
-
### Hide the dot
|
|
113
|
-
|
|
114
|
-
Set `showIcon={false}` for a label-only badge.
|
|
115
|
-
|
|
116
|
-
```tsx
|
|
117
|
-
<Badge color="orange" showIcon={false} label="No icon" />
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
### Custom icon
|
|
121
|
-
|
|
122
|
-
Replace the default dot via `badgeIcon`.
|
|
123
|
-
|
|
124
|
-
```tsx
|
|
125
|
-
export function BadgesWithIcons() {
|
|
126
|
-
return (
|
|
127
|
-
<div className="flex flex-wrap gap-2">
|
|
128
|
-
<Badge color="green" badgeIcon={<i className="ri-check-line" />} label="Verified" />
|
|
129
|
-
<Badge color="purple" badgeIcon={<i className="ri-vip-crown-line" />} label="Premium" />
|
|
130
|
-
<Badge color="gray" badgeIcon={<i className="ri-lock-line" />} label="Locked" />
|
|
131
|
-
</div>
|
|
132
|
-
)
|
|
133
|
-
}
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
### Closable (chips / tags)
|
|
137
|
-
|
|
138
|
-
Set `isClosable` and pass `onClose`. The close button uses an inline 12×12 SVG (14×14 on size `S`, 16×16 on size `M`), gets a `4px`-radius hover background (`--Background-Presentation-Action-Secondary`), and inherits the same `mix-blend-luminosity` treatment as the rest of subtle foreground.
|
|
139
|
-
|
|
140
|
-
```tsx
|
|
141
|
-
import { useState } from 'react'
|
|
142
|
-
|
|
143
|
-
export function RemovableTags() {
|
|
144
|
-
const [tags, setTags] = useState([
|
|
145
|
-
{ id: 1, label: 'React', color: 'blue' },
|
|
146
|
-
{ id: 2, label: 'TypeScript', color: 'purple' },
|
|
147
|
-
{ id: 3, label: 'Next.js', color: 'slate' },
|
|
148
|
-
{ id: 4, label: 'Tailwind', color: 'ocean' },
|
|
149
|
-
] as const)
|
|
150
|
-
|
|
151
|
-
return (
|
|
152
|
-
<div className="flex flex-wrap gap-2">
|
|
153
|
-
{tags.map(tag => (
|
|
154
|
-
<Badge
|
|
155
|
-
key={tag.id}
|
|
156
|
-
label={tag.label}
|
|
157
|
-
color={tag.color}
|
|
158
|
-
isClosable
|
|
159
|
-
onClose={() => setTags(prev => prev.filter(t => t.id !== tag.id))}
|
|
160
|
-
/>
|
|
161
|
-
))}
|
|
162
|
-
</div>
|
|
163
|
-
)
|
|
164
|
-
}
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
### Status indicators
|
|
168
|
-
|
|
169
|
-
Pair semantic colors with status states.
|
|
170
|
-
|
|
171
|
-
```tsx
|
|
172
|
-
const STATUS = {
|
|
173
|
-
active: { label: 'Active', color: 'green' },
|
|
174
|
-
pending: { label: 'Pending', color: 'yellow' },
|
|
175
|
-
inactive: { label: 'Inactive', color: 'gray' },
|
|
176
|
-
error: { label: 'Error', color: 'red' },
|
|
177
|
-
} as const
|
|
178
|
-
|
|
179
|
-
export function StatusBadges({ status }: { status: keyof typeof STATUS }) {
|
|
180
|
-
const { label, color } = STATUS[status]
|
|
181
|
-
return <Badge label={label} color={color} />
|
|
182
|
-
}
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
## API Reference
|
|
186
|
-
|
|
187
|
-
### Props
|
|
188
|
-
|
|
189
|
-
| Prop | Type | Default | Description |
|
|
190
|
-
| ------------- | ----------------------------------------------------------------------------------------------------- | ------------ | -------------------------------------------- |
|
|
191
|
-
| `label` | `string` | — | Badge text content. |
|
|
192
|
-
| `badgeStyle` | `'subtle' \| 'solid'` | `'subtle'` | Visual style. |
|
|
193
|
-
| `color` | `'gray' \| 'slate' \| 'red' \| 'orange' \| 'yellow' \| 'green' \| 'ocean' \| 'blue' \| 'purple' \| 'rose'` | `'gray'` | Background color. |
|
|
194
|
-
| `size` | `'XS' \| 'S' \| 'M'` | `'S'` | Badge size. |
|
|
195
|
-
| `showIcon` | `boolean` | `true` | Show the leading dot. Ignored when `badgeIcon` is set. |
|
|
196
|
-
| `badgeIcon` | `ReactNode` | — | Custom leading icon (replaces the default dot). |
|
|
197
|
-
| `isClosable` | `boolean` | `false` | Render the trailing close button. |
|
|
198
|
-
| `onClose` | `() => void` | — | Close handler. Called on click and on Enter/Space. |
|
|
199
|
-
| `theme` | `Themes` | — | Theme override (`'dark' \| 'light' \| 'default'`). |
|
|
200
|
-
| `className` | `string` | — | Extra classes merged onto the root `<span>`. |
|
|
201
|
-
|
|
202
|
-
The Badge root is a `<span>`. Standard `HTMLAttributes<HTMLSpanElement>` (minus `color`, which is overloaded as the variant prop) are forwarded.
|
|
203
|
-
|
|
204
|
-
## Styling
|
|
205
|
-
|
|
206
|
-
### Foreground rules
|
|
207
|
-
|
|
208
|
-
- **Subtle**: text and icons use `text-content-presentation-global-subtle` (`#494949`). The label `<div>`, any inner `<i>`, and the close `<button>` all carry `mix-blend-mode: luminosity`, so the foreground harmonizes with whichever color background sits behind it.
|
|
209
|
-
- **Solid**: text and icons use `text-content-presentation-global-primary-light`. No blend mode.
|
|
210
|
-
|
|
211
|
-
### Backgrounds (CSS variables)
|
|
212
|
-
|
|
213
|
-
Each color resolves to a pair of tokens:
|
|
214
|
-
|
|
215
|
-
```
|
|
216
|
-
--background-presentation-badge-{color}-subtle
|
|
217
|
-
--background-presentation-badge-{color}-solid
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
### Override via className
|
|
221
|
-
|
|
222
|
-
```tsx
|
|
223
|
-
<Badge label="Custom" className="!bg-purple-500 !text-white" />
|
|
224
|
-
<Badge label="Wide" className="w-full justify-center" />
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
## TypeScript Types
|
|
228
|
-
|
|
229
|
-
```typescript
|
|
230
|
-
import type { VariantProps } from 'class-variance-authority'
|
|
231
|
-
import type { badgeStyles } from '@/components/Badge'
|
|
232
|
-
|
|
233
|
-
type BadgeVariants = VariantProps<typeof badgeStyles>
|
|
234
|
-
// {
|
|
235
|
-
// badgeStyle?: 'subtle' | 'solid'
|
|
236
|
-
// color?: 'gray' | 'slate' | 'red' | 'orange' | 'yellow' | 'green' | 'ocean' | 'blue' | 'purple' | 'rose'
|
|
237
|
-
// size?: 'XS' | 'S' | 'M'
|
|
238
|
-
// }
|
|
239
|
-
|
|
240
|
-
interface BadgeProps
|
|
241
|
-
extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'color'>,
|
|
242
|
-
BadgeVariants {
|
|
243
|
-
label?: string
|
|
244
|
-
badgeIcon?: React.ReactNode
|
|
245
|
-
showIcon?: boolean
|
|
246
|
-
isClosable?: boolean
|
|
247
|
-
onClose?: () => void
|
|
248
|
-
theme?: Themes
|
|
249
|
-
className?: string
|
|
250
|
-
}
|
|
251
|
-
```
|
|
252
|
-
|
|
253
|
-
## Testing
|
|
254
|
-
|
|
255
|
-
```tsx
|
|
256
|
-
import { render, screen, fireEvent } from '@testing-library/react'
|
|
257
|
-
import { Badge } from '@/components/Badge'
|
|
258
|
-
|
|
259
|
-
describe('Badge', () => {
|
|
260
|
-
it('renders the label', () => {
|
|
261
|
-
render(<Badge label="Active" />)
|
|
262
|
-
expect(screen.getByText('Active')).toBeInTheDocument()
|
|
263
|
-
})
|
|
264
|
-
|
|
265
|
-
it('shows the close button when closable', () => {
|
|
266
|
-
render(<Badge label="Tag" isClosable onClose={() => {}} />)
|
|
267
|
-
expect(screen.getByRole('button', { name: 'Remove badge' })).toBeInTheDocument()
|
|
268
|
-
})
|
|
269
|
-
|
|
270
|
-
it('fires onClose on click', () => {
|
|
271
|
-
const onClose = jest.fn()
|
|
272
|
-
render(<Badge label="Tag" isClosable onClose={onClose} />)
|
|
273
|
-
fireEvent.click(screen.getByRole('button', { name: 'Remove badge' }))
|
|
274
|
-
expect(onClose).toHaveBeenCalledTimes(1)
|
|
275
|
-
})
|
|
276
|
-
|
|
277
|
-
it('fires onClose on Enter and Space', () => {
|
|
278
|
-
const onClose = jest.fn()
|
|
279
|
-
render(<Badge label="Tag" isClosable onClose={onClose} />)
|
|
280
|
-
const btn = screen.getByRole('button', { name: 'Remove badge' })
|
|
281
|
-
fireEvent.keyDown(btn, { key: 'Enter' })
|
|
282
|
-
fireEvent.keyDown(btn, { key: ' ' })
|
|
283
|
-
expect(onClose).toHaveBeenCalledTimes(2)
|
|
284
|
-
})
|
|
285
|
-
})
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
## Accessibility
|
|
289
|
-
|
|
290
|
-
- The close button has `aria-label="Remove badge"` and is keyboard-focusable.
|
|
291
|
-
- Enter and Space trigger `onClose`.
|
|
292
|
-
- The close-icon SVG is `aria-hidden`; the accessible name comes from the button label.
|
|
293
|
-
- Color is never the sole signal — always pair `color` with a `label` or icon.
|
|
294
|
-
|
|
295
|
-
## Best Practices
|
|
296
|
-
|
|
297
|
-
1. Use the same `color` for the same meaning across the app (e.g. `green` = success).
|
|
298
|
-
2. Match `size` to surrounding text — `XS` for inline metadata, `M` for standalone status.
|
|
299
|
-
3. Prefer `subtle` in dense UIs; reserve `solid` for emphasis.
|
|
300
|
-
4. Only set `isClosable` when removal is a real user action — don't fake it for visual flair.
|
|
301
|
-
5. Provide a meaningful `label`; never rely on color alone.
|