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,560 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: CountBadge
|
|
3
|
-
description: Small circular notification counter for displaying numeric counts and alerts.
|
|
4
|
-
component: true
|
|
5
|
-
group: Data Display
|
|
6
|
-
keywords: [badge, counter, notification, count, number, indicator, alert]
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# CountBadge
|
|
10
|
-
|
|
11
|
-
A compact circular badge component designed specifically for displaying numeric counts. Perfect for notification indicators, unread counts, and numeric alerts.
|
|
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 CountBadge
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
`add` also copies any components, hooks, and utilities that `CountBadge` depends on.
|
|
24
|
-
|
|
25
|
-
## Imports
|
|
26
|
-
|
|
27
|
-
```typescript
|
|
28
|
-
import { CountBadge } from '@/components/CountBadge'
|
|
29
|
-
import { glareCounterStyles } from '@/components/CountBadge'
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
## Basic Usage
|
|
33
|
-
|
|
34
|
-
```tsx
|
|
35
|
-
import { CountBadge } from '@/components/CountBadge'
|
|
36
|
-
|
|
37
|
-
export function BasicCountBadge() {
|
|
38
|
-
return <CountBadge label={5} />
|
|
39
|
-
}
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
## Examples
|
|
43
|
-
|
|
44
|
-
### Notification Indicators
|
|
45
|
-
|
|
46
|
-
Display unread counts on navigation items.
|
|
47
|
-
|
|
48
|
-
```tsx
|
|
49
|
-
export function NotificationCounts() {
|
|
50
|
-
return (
|
|
51
|
-
<nav className="flex gap-4">
|
|
52
|
-
<button className="relative px-4 py-2 hover:bg-background-presentation-global-secondary rounded">
|
|
53
|
-
<i className="ri-message-3-line text-xl"></i>
|
|
54
|
-
<CountBadge label={3} className="absolute -top-1 -right-1" />
|
|
55
|
-
</button>
|
|
56
|
-
|
|
57
|
-
<button className="relative px-4 py-2 hover:bg-background-presentation-global-secondary rounded">
|
|
58
|
-
<i className="ri-notification-3-line text-xl"></i>
|
|
59
|
-
<CountBadge label={12} className="absolute -top-1 -right-1" />
|
|
60
|
-
</button>
|
|
61
|
-
|
|
62
|
-
<button className="relative px-4 py-2 hover:bg-background-presentation-global-secondary rounded">
|
|
63
|
-
<i className="ri-mail-line text-xl"></i>
|
|
64
|
-
<CountBadge label={99} className="absolute -top-1 -right-1" />
|
|
65
|
-
</button>
|
|
66
|
-
|
|
67
|
-
<button className="relative px-4 py-2 hover:bg-background-presentation-global-secondary rounded">
|
|
68
|
-
<i className="ri-shopping-cart-line text-xl"></i>
|
|
69
|
-
<CountBadge label={7} className="absolute -top-1 -right-1" />
|
|
70
|
-
</button>
|
|
71
|
-
</nav>
|
|
72
|
-
)
|
|
73
|
-
}
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
### Sidebar with Counts
|
|
77
|
-
|
|
78
|
-
Navigation sidebar with count indicators.
|
|
79
|
-
|
|
80
|
-
```tsx
|
|
81
|
-
export function SidebarWithCounts() {
|
|
82
|
-
const menuItems = [
|
|
83
|
-
{ icon: 'ri-dashboard-line', label: 'Dashboard', count: 0 },
|
|
84
|
-
{ icon: 'ri-inbox-line', label: 'Inbox', count: 24 },
|
|
85
|
-
{ icon: 'ri-task-line', label: 'Tasks', count: 8 },
|
|
86
|
-
{ icon: 'ri-team-line', label: 'Team', count: 3 },
|
|
87
|
-
{ icon: 'ri-folder-line', label: 'Projects', count: 0 },
|
|
88
|
-
]
|
|
89
|
-
|
|
90
|
-
return (
|
|
91
|
-
<aside className="w-64 border-r p-4">
|
|
92
|
-
<nav className="space-y-1">
|
|
93
|
-
{menuItems.map(item => (
|
|
94
|
-
<button
|
|
95
|
-
key={item.label}
|
|
96
|
-
className="w-full flex items-center justify-between px-3 py-2 rounded hover:bg-background-presentation-global-secondary"
|
|
97
|
-
>
|
|
98
|
-
<div className="flex items-center gap-3">
|
|
99
|
-
<i className={`${item.icon} text-lg`}></i>
|
|
100
|
-
<span>{item.label}</span>
|
|
101
|
-
</div>
|
|
102
|
-
{item.count > 0 && <CountBadge label={item.count} />}
|
|
103
|
-
</button>
|
|
104
|
-
))}
|
|
105
|
-
</nav>
|
|
106
|
-
</aside>
|
|
107
|
-
)
|
|
108
|
-
}
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
### Tab Navigation
|
|
112
|
-
|
|
113
|
-
Tabs with activity counts.
|
|
114
|
-
|
|
115
|
-
```tsx
|
|
116
|
-
export function TabsWithCounts() {
|
|
117
|
-
const [activeTab, setActiveTab] = useState('all')
|
|
118
|
-
|
|
119
|
-
const tabs = [
|
|
120
|
-
{ id: 'all', label: 'All Items', count: 42 },
|
|
121
|
-
{ id: 'active', label: 'Active', count: 15 },
|
|
122
|
-
{ id: 'pending', label: 'Pending Review', count: 8 },
|
|
123
|
-
{ id: 'completed', label: 'Completed', count: 19 },
|
|
124
|
-
]
|
|
125
|
-
|
|
126
|
-
return (
|
|
127
|
-
<div className="border-b">
|
|
128
|
-
<nav className="flex gap-1">
|
|
129
|
-
{tabs.map(tab => (
|
|
130
|
-
<button
|
|
131
|
-
key={tab.id}
|
|
132
|
-
onClick={() => setActiveTab(tab.id)}
|
|
133
|
-
className={cn(
|
|
134
|
-
"px-4 py-2 border-b-2 transition-colors relative",
|
|
135
|
-
activeTab === tab.id
|
|
136
|
-
? "border-blue-500 text-blue-600"
|
|
137
|
-
: "border-transparent hover:border-gray-300"
|
|
138
|
-
)}
|
|
139
|
-
>
|
|
140
|
-
<span className="mr-2">{tab.label}</span>
|
|
141
|
-
<CountBadge label={tab.count} className="inline-block" />
|
|
142
|
-
</button>
|
|
143
|
-
))}
|
|
144
|
-
</nav>
|
|
145
|
-
</div>
|
|
146
|
-
)
|
|
147
|
-
}
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
### Icon Buttons
|
|
151
|
-
|
|
152
|
-
Action buttons with pending counts.
|
|
153
|
-
|
|
154
|
-
```tsx
|
|
155
|
-
export function IconButtonsWithCounts() {
|
|
156
|
-
return (
|
|
157
|
-
<div className="flex items-center gap-2 p-4 bg-background-system-body-secondary rounded-lg">
|
|
158
|
-
<div className="relative">
|
|
159
|
-
<ActionButton size="M" title="Notifications">
|
|
160
|
-
<i className="ri-notification-line"></i>
|
|
161
|
-
</ActionButton>
|
|
162
|
-
<CountBadge label={5} className="absolute -top-1 -right-1" />
|
|
163
|
-
</div>
|
|
164
|
-
|
|
165
|
-
<div className="relative">
|
|
166
|
-
<ActionButton size="M" title="Messages">
|
|
167
|
-
<i className="ri-message-line"></i>
|
|
168
|
-
</ActionButton>
|
|
169
|
-
<CountBadge label={12} className="absolute -top-1 -right-1" />
|
|
170
|
-
</div>
|
|
171
|
-
|
|
172
|
-
<div className="relative">
|
|
173
|
-
<ActionButton size="M" title="Pending Approvals">
|
|
174
|
-
<i className="ri-check-double-line"></i>
|
|
175
|
-
</ActionButton>
|
|
176
|
-
<CountBadge label={3} className="absolute -top-1 -right-1" />
|
|
177
|
-
</div>
|
|
178
|
-
</div>
|
|
179
|
-
)
|
|
180
|
-
}
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
### Avatar with Count
|
|
184
|
-
|
|
185
|
-
User avatar showing unread count.
|
|
186
|
-
|
|
187
|
-
```tsx
|
|
188
|
-
export function AvatarWithCount() {
|
|
189
|
-
return (
|
|
190
|
-
<div className="flex items-center gap-4">
|
|
191
|
-
<div className="relative">
|
|
192
|
-
<Avatar size="L" src="/user.jpg" alt="User" />
|
|
193
|
-
<CountBadge label={9} className="absolute -top-1 -right-1" />
|
|
194
|
-
</div>
|
|
195
|
-
|
|
196
|
-
<div>
|
|
197
|
-
<h4 className="font-semibold">John Doe</h4>
|
|
198
|
-
<p className="text-sm text-content-presentation-global-secondary">
|
|
199
|
-
9 unread messages
|
|
200
|
-
</p>
|
|
201
|
-
</div>
|
|
202
|
-
</div>
|
|
203
|
-
)
|
|
204
|
-
}
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
### Large Numbers
|
|
208
|
-
|
|
209
|
-
Handling counts over 99.
|
|
210
|
-
|
|
211
|
-
```tsx
|
|
212
|
-
export function LargeNumberCounts() {
|
|
213
|
-
const formatCount = (count: number) => {
|
|
214
|
-
if (count > 99) return '99+'
|
|
215
|
-
return count
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
return (
|
|
219
|
-
<div className="space-y-4">
|
|
220
|
-
<div className="flex items-center gap-4">
|
|
221
|
-
<span>Normal count:</span>
|
|
222
|
-
<CountBadge label={45} />
|
|
223
|
-
</div>
|
|
224
|
-
|
|
225
|
-
<div className="flex items-center gap-4">
|
|
226
|
-
<span>Max display (99+):</span>
|
|
227
|
-
<div className="relative">
|
|
228
|
-
<button className="px-4 py-2 bg-blue-500 text-white rounded">
|
|
229
|
-
Notifications
|
|
230
|
-
</button>
|
|
231
|
-
<div className="absolute -top-2 -right-2 w-6 h-6 bg-red-500 text-white rounded-full flex items-center justify-center text-xs font-bold">
|
|
232
|
-
99+
|
|
233
|
-
</div>
|
|
234
|
-
</div>
|
|
235
|
-
</div>
|
|
236
|
-
|
|
237
|
-
<div className="flex items-center gap-4">
|
|
238
|
-
<span>With abbreviation:</span>
|
|
239
|
-
<div className="relative">
|
|
240
|
-
<button className="px-4 py-2 bg-blue-500 text-white rounded">
|
|
241
|
-
Followers
|
|
242
|
-
</button>
|
|
243
|
-
<div className="absolute -top-2 -right-2 px-2 h-6 bg-red-500 text-white rounded-full flex items-center justify-center text-xs font-bold">
|
|
244
|
-
1.2k
|
|
245
|
-
</div>
|
|
246
|
-
</div>
|
|
247
|
-
</div>
|
|
248
|
-
</div>
|
|
249
|
-
)
|
|
250
|
-
}
|
|
251
|
-
```
|
|
252
|
-
|
|
253
|
-
### Shopping Cart
|
|
254
|
-
|
|
255
|
-
E-commerce cart with item count.
|
|
256
|
-
|
|
257
|
-
```tsx
|
|
258
|
-
export function ShoppingCartCount() {
|
|
259
|
-
const [cartItems, setCartItems] = useState(3)
|
|
260
|
-
|
|
261
|
-
return (
|
|
262
|
-
<header className="flex items-center justify-between p-4 border-b">
|
|
263
|
-
<div className="text-2xl font-bold">Store</div>
|
|
264
|
-
|
|
265
|
-
<nav className="flex items-center gap-6">
|
|
266
|
-
<a href="/shop" className="hover:text-blue-500">Shop</a>
|
|
267
|
-
<a href="/about" className="hover:text-blue-500">About</a>
|
|
268
|
-
|
|
269
|
-
<button className="relative">
|
|
270
|
-
<i className="ri-shopping-cart-line text-2xl"></i>
|
|
271
|
-
{cartItems > 0 && (
|
|
272
|
-
<CountBadge label={cartItems} className="absolute -top-2 -right-2" />
|
|
273
|
-
)}
|
|
274
|
-
</button>
|
|
275
|
-
</nav>
|
|
276
|
-
</header>
|
|
277
|
-
)
|
|
278
|
-
}
|
|
279
|
-
```
|
|
280
|
-
|
|
281
|
-
### Filter Tags
|
|
282
|
-
|
|
283
|
-
Filter options with match counts.
|
|
284
|
-
|
|
285
|
-
```tsx
|
|
286
|
-
export function FilterWithCounts() {
|
|
287
|
-
const filters = [
|
|
288
|
-
{ label: 'All', count: 156 },
|
|
289
|
-
{ label: 'Active', count: 89 },
|
|
290
|
-
{ label: 'Pending', count: 45 },
|
|
291
|
-
{ label: 'Archived', count: 22 },
|
|
292
|
-
]
|
|
293
|
-
|
|
294
|
-
const [selected, setSelected] = useState('All')
|
|
295
|
-
|
|
296
|
-
return (
|
|
297
|
-
<div className="space-y-4">
|
|
298
|
-
<h3 className="font-semibold">Filter Results</h3>
|
|
299
|
-
|
|
300
|
-
<div className="flex flex-wrap gap-2">
|
|
301
|
-
{filters.map(filter => (
|
|
302
|
-
<button
|
|
303
|
-
key={filter.label}
|
|
304
|
-
onClick={() => setSelected(filter.label)}
|
|
305
|
-
className={cn(
|
|
306
|
-
"flex items-center gap-2 px-3 py-1.5 rounded-lg border transition-colors",
|
|
307
|
-
selected === filter.label
|
|
308
|
-
? "bg-blue-500 text-white border-blue-500"
|
|
309
|
-
: "bg-background-system-body-primary border-border-presentation-global-primary hover:border-blue-300"
|
|
310
|
-
)}
|
|
311
|
-
>
|
|
312
|
-
<span>{filter.label}</span>
|
|
313
|
-
<CountBadge
|
|
314
|
-
label={filter.count}
|
|
315
|
-
className={selected === filter.label ? "bg-blue-600" : ""}
|
|
316
|
-
/>
|
|
317
|
-
</button>
|
|
318
|
-
))}
|
|
319
|
-
</div>
|
|
320
|
-
</div>
|
|
321
|
-
)
|
|
322
|
-
}
|
|
323
|
-
```
|
|
324
|
-
|
|
325
|
-
### Real-time Updates
|
|
326
|
-
|
|
327
|
-
Live count updates with animation.
|
|
328
|
-
|
|
329
|
-
```tsx
|
|
330
|
-
export function LiveCountUpdates() {
|
|
331
|
-
const [count, setCount] = useState(5)
|
|
332
|
-
const [isAnimating, setIsAnimating] = useState(false)
|
|
333
|
-
|
|
334
|
-
const increment = () => {
|
|
335
|
-
setCount(prev => prev + 1)
|
|
336
|
-
setIsAnimating(true)
|
|
337
|
-
setTimeout(() => setIsAnimating(false), 300)
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
return (
|
|
341
|
-
<div className="space-y-4">
|
|
342
|
-
<div className="relative inline-block">
|
|
343
|
-
<button className="px-6 py-3 bg-blue-500 text-white rounded-lg">
|
|
344
|
-
Notifications
|
|
345
|
-
</button>
|
|
346
|
-
<CountBadge
|
|
347
|
-
label={count}
|
|
348
|
-
className={cn(
|
|
349
|
-
"absolute -top-2 -right-2 transition-transform",
|
|
350
|
-
isAnimating && "scale-125"
|
|
351
|
-
)}
|
|
352
|
-
/>
|
|
353
|
-
</div>
|
|
354
|
-
|
|
355
|
-
<button
|
|
356
|
-
onClick={increment}
|
|
357
|
-
className="px-4 py-2 bg-green-500 text-white rounded"
|
|
358
|
-
>
|
|
359
|
-
Simulate New Notification
|
|
360
|
-
</button>
|
|
361
|
-
</div>
|
|
362
|
-
)
|
|
363
|
-
}
|
|
364
|
-
```
|
|
365
|
-
|
|
366
|
-
## API Reference
|
|
367
|
-
|
|
368
|
-
### CountBadge Props
|
|
369
|
-
|
|
370
|
-
Extends all HTML div element props.
|
|
371
|
-
|
|
372
|
-
| Prop | Type | Default | Description |
|
|
373
|
-
|------|------|---------|-------------|
|
|
374
|
-
| label | `number` | - | **Required.** Numeric count to display |
|
|
375
|
-
| variant | `'default'` | `'default'` | Style variant |
|
|
376
|
-
| theme | `Themes` | - | Theme override |
|
|
377
|
-
| className | `string` | - | Additional CSS classes |
|
|
378
|
-
|
|
379
|
-
## Styling
|
|
380
|
-
|
|
381
|
-
### Default Styles
|
|
382
|
-
|
|
383
|
-
- **Size**: 15px × 15px circular
|
|
384
|
-
- **Background**: Negative/alert red color
|
|
385
|
-
- **Border**: 1px white/system border
|
|
386
|
-
- **Text**: White, 8px font size
|
|
387
|
-
- **Position**: Can be absolutely positioned
|
|
388
|
-
|
|
389
|
-
### Positioning
|
|
390
|
-
|
|
391
|
-
```tsx
|
|
392
|
-
// Top-right corner
|
|
393
|
-
<CountBadge className="absolute -top-1 -right-1" />
|
|
394
|
-
|
|
395
|
-
// Top-left corner
|
|
396
|
-
<CountBadge className="absolute -top-1 -left-1" />
|
|
397
|
-
|
|
398
|
-
// Inline with text
|
|
399
|
-
<CountBadge className="inline-block ml-2" />
|
|
400
|
-
```
|
|
401
|
-
|
|
402
|
-
### Custom Colors
|
|
403
|
-
|
|
404
|
-
```tsx
|
|
405
|
-
// Green success count
|
|
406
|
-
<CountBadge label={5} className="!bg-green-500" />
|
|
407
|
-
|
|
408
|
-
// Blue info count
|
|
409
|
-
<CountBadge label={12} className="!bg-blue-500" />
|
|
410
|
-
|
|
411
|
-
// Orange warning count
|
|
412
|
-
<CountBadge label={3} className="!bg-orange-500" />
|
|
413
|
-
```
|
|
414
|
-
|
|
415
|
-
## TypeScript Types
|
|
416
|
-
|
|
417
|
-
```typescript
|
|
418
|
-
import { VariantProps } from 'class-variance-authority'
|
|
419
|
-
|
|
420
|
-
interface CountBadgeProps
|
|
421
|
-
extends HTMLAttributes<HTMLDivElement>,
|
|
422
|
-
VariantProps<typeof glareCounterStyles> {
|
|
423
|
-
label: number
|
|
424
|
-
theme?: Themes
|
|
425
|
-
className?: string
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
type GlareCounterStylesProps = VariantProps<typeof glareCounterStyles>
|
|
429
|
-
```
|
|
430
|
-
|
|
431
|
-
## Common Patterns
|
|
432
|
-
|
|
433
|
-
### Conditional Display
|
|
434
|
-
|
|
435
|
-
```tsx
|
|
436
|
-
function ConditionalCount({ count }) {
|
|
437
|
-
return (
|
|
438
|
-
<div className="relative">
|
|
439
|
-
<button>Inbox</button>
|
|
440
|
-
{count > 0 && (
|
|
441
|
-
<CountBadge label={count} className="absolute -top-1 -right-1" />
|
|
442
|
-
)}
|
|
443
|
-
</div>
|
|
444
|
-
)
|
|
445
|
-
}
|
|
446
|
-
```
|
|
447
|
-
|
|
448
|
-
### Max Count Display
|
|
449
|
-
|
|
450
|
-
```tsx
|
|
451
|
-
function MaxCountBadge({ count, max = 99 }) {
|
|
452
|
-
const displayCount = count > max ? max : count
|
|
453
|
-
|
|
454
|
-
return (
|
|
455
|
-
<div className="relative">
|
|
456
|
-
<button>Notifications</button>
|
|
457
|
-
{count > 0 && (
|
|
458
|
-
<span className="absolute -top-2 -right-2 px-1.5 h-5 bg-red-500 text-white rounded-full flex items-center justify-center text-xs font-bold">
|
|
459
|
-
{count > max ? `${max}+` : count}
|
|
460
|
-
</span>
|
|
461
|
-
)}
|
|
462
|
-
</div>
|
|
463
|
-
)
|
|
464
|
-
}
|
|
465
|
-
```
|
|
466
|
-
|
|
467
|
-
## Testing
|
|
468
|
-
|
|
469
|
-
```typescript
|
|
470
|
-
import { render, screen } from '@testing-library/react'
|
|
471
|
-
import { CountBadge } from '@/components/CountBadge'
|
|
472
|
-
|
|
473
|
-
describe('CountBadge', () => {
|
|
474
|
-
it('renders count correctly', () => {
|
|
475
|
-
render(<CountBadge label={5} />)
|
|
476
|
-
expect(screen.getByText('5')).toBeInTheDocument()
|
|
477
|
-
})
|
|
478
|
-
|
|
479
|
-
it('applies custom className', () => {
|
|
480
|
-
const { container } = render(
|
|
481
|
-
<CountBadge label={10} className="custom-class" />
|
|
482
|
-
)
|
|
483
|
-
expect(container.firstChild).toHaveClass('custom-class')
|
|
484
|
-
})
|
|
485
|
-
|
|
486
|
-
it('displays large numbers', () => {
|
|
487
|
-
render(<CountBadge label={999} />)
|
|
488
|
-
expect(screen.getByText('999')).toBeInTheDocument()
|
|
489
|
-
})
|
|
490
|
-
|
|
491
|
-
it('applies default variant styles', () => {
|
|
492
|
-
const { container } = render(<CountBadge label={1} />)
|
|
493
|
-
expect(container.firstChild).toHaveClass('bg-background-system-state-negative')
|
|
494
|
-
})
|
|
495
|
-
})
|
|
496
|
-
```
|
|
497
|
-
|
|
498
|
-
## Accessibility
|
|
499
|
-
|
|
500
|
-
- **Color Independence**: Uses both color and number
|
|
501
|
-
- **Screen Readers**: Count is announced
|
|
502
|
-
- **High Contrast**: Red background with white text
|
|
503
|
-
- **Size**: Large enough for visibility (15px)
|
|
504
|
-
- **Context**: Should always be near related element
|
|
505
|
-
|
|
506
|
-
### Accessibility Example
|
|
507
|
-
|
|
508
|
-
```tsx
|
|
509
|
-
<button aria-label={`Notifications (${count} unread)`}>
|
|
510
|
-
<i className="ri-notification-line"></i>
|
|
511
|
-
<CountBadge label={count} />
|
|
512
|
-
</button>
|
|
513
|
-
```
|
|
514
|
-
|
|
515
|
-
## Performance
|
|
516
|
-
|
|
517
|
-
- **Lightweight**: Minimal DOM footprint
|
|
518
|
-
- **CSS-Only**: No JavaScript animations by default
|
|
519
|
-
- **Bundle Size**: < 0.5 KB gzipped
|
|
520
|
-
- **Render Performance**: < 0.1ms per badge
|
|
521
|
-
|
|
522
|
-
## Migration Guide
|
|
523
|
-
|
|
524
|
-
### From Custom Spans
|
|
525
|
-
|
|
526
|
-
```tsx
|
|
527
|
-
// Before: Custom counter
|
|
528
|
-
<span className="absolute -top-1 -right-1 w-4 h-4 bg-red-500 text-white rounded-full flex items-center justify-center text-xs">
|
|
529
|
-
{count}
|
|
530
|
-
</span>
|
|
531
|
-
|
|
532
|
-
// After: CountBadge
|
|
533
|
-
<CountBadge label={count} className="absolute -top-1 -right-1" />
|
|
534
|
-
```
|
|
535
|
-
|
|
536
|
-
### From Other Libraries
|
|
537
|
-
|
|
538
|
-
```tsx
|
|
539
|
-
// Before: Material-UI Badge
|
|
540
|
-
<Badge badgeContent={4} color="error">
|
|
541
|
-
<Icon />
|
|
542
|
-
</Badge>
|
|
543
|
-
|
|
544
|
-
// After: CountBadge
|
|
545
|
-
<div className="relative">
|
|
546
|
-
<Icon />
|
|
547
|
-
<CountBadge label={4} className="absolute -top-1 -right-1" />
|
|
548
|
-
</div>
|
|
549
|
-
```
|
|
550
|
-
|
|
551
|
-
## Best Practices
|
|
552
|
-
|
|
553
|
-
1. **Use for Numbers Only**: CountBadge is designed for numeric counts
|
|
554
|
-
2. **Positioning**: Use absolute positioning for overlay effect
|
|
555
|
-
3. **Max Counts**: Display "99+" for counts over 99
|
|
556
|
-
4. **Conditional Rendering**: Hide when count is 0
|
|
557
|
-
5. **Animation**: Add scale animation for real-time updates
|
|
558
|
-
6. **Accessibility**: Include count in parent element's aria-label
|
|
559
|
-
7. **Color Meaning**: Red typically indicates urgent/unread items
|
|
560
|
-
8. **Size Context**: Ensure badge is visible but not overwhelming
|