@coreui/react 5.9.2 → 5.10.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.
Files changed (34) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +2 -2
  3. package/dist/cjs/components/chip/CChip.d.ts +76 -0
  4. package/dist/cjs/components/chip/CChip.js +178 -0
  5. package/dist/cjs/components/chip/CChip.js.map +1 -0
  6. package/dist/cjs/components/chip/index.d.ts +2 -0
  7. package/dist/cjs/components/form/CChipInput.d.ts +92 -0
  8. package/dist/cjs/components/form/CChipInput.js +253 -0
  9. package/dist/cjs/components/form/CChipInput.js.map +1 -0
  10. package/dist/cjs/components/form/index.d.ts +2 -1
  11. package/dist/cjs/components/index.d.ts +1 -0
  12. package/dist/cjs/index.js +4 -0
  13. package/dist/cjs/index.js.map +1 -1
  14. package/dist/esm/components/chip/CChip.d.ts +76 -0
  15. package/dist/esm/components/chip/CChip.js +176 -0
  16. package/dist/esm/components/chip/CChip.js.map +1 -0
  17. package/dist/esm/components/chip/index.d.ts +2 -0
  18. package/dist/esm/components/form/CChipInput.d.ts +92 -0
  19. package/dist/esm/components/form/CChipInput.js +251 -0
  20. package/dist/esm/components/form/CChipInput.js.map +1 -0
  21. package/dist/esm/components/form/index.d.ts +2 -1
  22. package/dist/esm/components/index.d.ts +1 -0
  23. package/dist/esm/index.js +2 -0
  24. package/dist/esm/index.js.map +1 -1
  25. package/package.json +5 -5
  26. package/src/components/chip/CChip.tsx +372 -0
  27. package/src/components/chip/__tests__/CChip.spec.tsx +113 -0
  28. package/src/components/chip/__tests__/__snapshots__/CChip.spec.tsx.snap +65 -0
  29. package/src/components/chip/index.ts +3 -0
  30. package/src/components/form/CChipInput.tsx +477 -0
  31. package/src/components/form/__tests__/CChipInput.spec.tsx +62 -0
  32. package/src/components/form/__tests__/__snapshots__/CChipInput.spec.tsx.snap +91 -0
  33. package/src/components/form/index.ts +2 -0
  34. package/src/components/index.ts +1 -0
@@ -1,5 +1,6 @@
1
1
  import { CForm } from './CForm';
2
2
  import { CFormCheck } from './CFormCheck';
3
+ import { CChipInput } from './CChipInput';
3
4
  import { CFormControlValidation } from './CFormControlValidation';
4
5
  import { CFormControlWrapper } from './CFormControlWrapper';
5
6
  import { CFormFeedback } from './CFormFeedback';
@@ -13,4 +14,4 @@ import { CFormText } from './CFormText';
13
14
  import { CFormTextarea } from './CFormTextarea';
14
15
  import { CInputGroup } from './CInputGroup';
15
16
  import { CInputGroupText } from './CInputGroupText';
16
- export { CForm, CFormCheck, CFormControlValidation, CFormControlWrapper, CFormFeedback, CFormFloating, CFormInput, CFormLabel, CFormRange, CFormSelect, CFormSwitch, CFormText, CFormTextarea, CInputGroup, CInputGroupText, };
17
+ export { CForm, CFormCheck, CChipInput, CFormControlValidation, CFormControlWrapper, CFormFeedback, CFormFloating, CFormInput, CFormLabel, CFormRange, CFormSelect, CFormSwitch, CFormText, CFormTextarea, CInputGroup, CInputGroupText, };
@@ -9,6 +9,7 @@ export * from './button-group';
9
9
  export * from './callout';
10
10
  export * from './card';
11
11
  export * from './carousel';
12
+ export * from './chip';
12
13
  export * from './close-button';
13
14
  export * from './collapse';
14
15
  export * from './conditional-portal';
package/dist/cjs/index.js CHANGED
@@ -31,6 +31,7 @@ var CCardTitle = require('./components/card/CCardTitle.js');
31
31
  var CCarousel = require('./components/carousel/CCarousel.js');
32
32
  var CCarouselCaption = require('./components/carousel/CCarouselCaption.js');
33
33
  var CCarouselItem = require('./components/carousel/CCarouselItem.js');
34
+ var CChip = require('./components/chip/CChip.js');
34
35
  var CCloseButton = require('./components/close-button/CCloseButton.js');
35
36
  var CCollapse = require('./components/collapse/CCollapse.js');
36
37
  var CConditionalPortal = require('./components/conditional-portal/CConditionalPortal.js');
@@ -45,6 +46,7 @@ var CFocusTrap = require('./components/focus-trap/CFocusTrap.js');
45
46
  var CFooter = require('./components/footer/CFooter.js');
46
47
  var CForm = require('./components/form/CForm.js');
47
48
  var CFormCheck = require('./components/form/CFormCheck.js');
49
+ var CChipInput = require('./components/form/CChipInput.js');
48
50
  var CFormControlValidation = require('./components/form/CFormControlValidation.js');
49
51
  var CFormControlWrapper = require('./components/form/CFormControlWrapper.js');
50
52
  var CFormFeedback = require('./components/form/CFormFeedback.js');
@@ -171,6 +173,7 @@ exports.CCardTitle = CCardTitle.CCardTitle;
171
173
  exports.CCarousel = CCarousel.CCarousel;
172
174
  exports.CCarouselCaption = CCarouselCaption.CCarouselCaption;
173
175
  exports.CCarouselItem = CCarouselItem.CCarouselItem;
176
+ exports.CChip = CChip.CChip;
174
177
  exports.CCloseButton = CCloseButton.CCloseButton;
175
178
  exports.CCollapse = CCollapse.CCollapse;
176
179
  exports.CConditionalPortal = CConditionalPortal.CConditionalPortal;
@@ -185,6 +188,7 @@ exports.CFocusTrap = CFocusTrap.CFocusTrap;
185
188
  exports.CFooter = CFooter.CFooter;
186
189
  exports.CForm = CForm.CForm;
187
190
  exports.CFormCheck = CFormCheck.CFormCheck;
191
+ exports.CChipInput = CChipInput.CChipInput;
188
192
  exports.CFormControlValidation = CFormControlValidation.CFormControlValidation;
189
193
  exports.CFormControlWrapper = CFormControlWrapper.CFormControlWrapper;
190
194
  exports.CFormFeedback = CFormFeedback.CFormFeedback;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,76 @@
1
+ import { ElementType, HTMLAttributes, KeyboardEvent, MouseEvent, ReactNode } from 'react';
2
+ import { PolymorphicRefForwardingComponent } from '../../helpers';
3
+ import type { Colors } from '../../types';
4
+ export interface CChipProps extends HTMLAttributes<HTMLSpanElement | HTMLButtonElement> {
5
+ /**
6
+ * Toggles the active state of the React Chip component for non-selectable usage.
7
+ */
8
+ active?: boolean;
9
+ /**
10
+ * Provides an accessible label for the remove button in the React Chip component.
11
+ */
12
+ ariaRemoveLabel?: string;
13
+ /**
14
+ * Specifies the root element or custom component used by the React Chip component.
15
+ */
16
+ as?: ElementType;
17
+ /**
18
+ * Adds custom classes to the React Chip root element.
19
+ */
20
+ className?: string;
21
+ /**
22
+ * Enables interactive hover styling and pointer cursor for the React Chip component.
23
+ */
24
+ clickable?: boolean;
25
+ /**
26
+ * Sets the contextual color of the React Chip component using CoreUI theme colors.
27
+ *
28
+ * @type 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'dark' | 'light' | string
29
+ */
30
+ color?: Colors;
31
+ /**
32
+ * Disables the React Chip component and removes interactive behavior.
33
+ */
34
+ disabled?: boolean;
35
+ /**
36
+ * Callback fired when the React Chip component becomes deselected.
37
+ */
38
+ onDeselect?: (event: MouseEvent<HTMLElement> | KeyboardEvent<HTMLElement>) => void;
39
+ /**
40
+ * Callback fired when the React Chip component requests removal by button click or keyboard action.
41
+ */
42
+ onRemove?: (event: MouseEvent<HTMLButtonElement> | KeyboardEvent<HTMLElement>) => void;
43
+ /**
44
+ * Callback fired when the React Chip component becomes selected.
45
+ */
46
+ onSelect?: (event: MouseEvent<HTMLElement> | KeyboardEvent<HTMLElement>) => void;
47
+ /**
48
+ * Callback fired when the selected state of the React Chip component changes.
49
+ */
50
+ onSelectedChange?: (selected: boolean, event: MouseEvent<HTMLElement> | KeyboardEvent<HTMLElement>) => void;
51
+ /**
52
+ * Displays a remove button inside the React Chip component.
53
+ */
54
+ removable?: boolean;
55
+ /**
56
+ * Replaces the default remove icon with a custom icon node in the React Chip component.
57
+ */
58
+ removeIcon?: ReactNode;
59
+ /**
60
+ * Enables selectable behavior and keyboard toggle support for the React Chip component.
61
+ */
62
+ selectable?: boolean;
63
+ /**
64
+ * Controls the selected state of a selectable React Chip component.
65
+ */
66
+ selected?: boolean;
67
+ /**
68
+ * Sets the size of the React Chip component to small or large.
69
+ */
70
+ size?: 'sm' | 'lg';
71
+ /**
72
+ * Sets the visual variant of the React Chip component to outline style.
73
+ */
74
+ variant?: 'outline';
75
+ }
76
+ export declare const CChip: PolymorphicRefForwardingComponent<'span', CChipProps>;
@@ -0,0 +1,176 @@
1
+ import { __rest } from '../../node_modules/tslib/tslib.es6.js';
2
+ import React, { forwardRef, useRef, useState, useEffect, useMemo } from 'react';
3
+ import PropTypes from 'prop-types';
4
+ import classNames from '../../_virtual/index.js';
5
+ import { useForkedRef } from '../../hooks/useForkedRef.js';
6
+ import '@popperjs/core';
7
+ import { colorPropType } from '../../props.js';
8
+
9
+ const SELECTOR_FOCUSABLE_ITEMS = '[data-coreui-chip-focusable="true"]:not(.disabled)';
10
+ const CChip = forwardRef((_a, ref) => {
11
+ var { active, ariaRemoveLabel = 'Remove', children, as: Component = 'span', className, clickable, color, disabled, onClick, onDeselect, onKeyDown, onRemove, onSelect, onSelectedChange, removable, removeIcon, selectable, selected, size, tabIndex, variant } = _a, rest = __rest(_a, ["active", "ariaRemoveLabel", "children", "as", "className", "clickable", "color", "disabled", "onClick", "onDeselect", "onKeyDown", "onRemove", "onSelect", "onSelectedChange", "removable", "removeIcon", "selectable", "selected", "size", "tabIndex", "variant"]);
12
+ const chipRef = useRef(null);
13
+ const forkedRef = useForkedRef(ref, chipRef);
14
+ const isSelectedControlled = selected !== undefined;
15
+ const [_selected, setSelected] = useState(Boolean(selected));
16
+ const selectedState = isSelectedControlled ? Boolean(selected) : _selected;
17
+ useEffect(() => {
18
+ if (isSelectedControlled) {
19
+ setSelected(Boolean(selected));
20
+ }
21
+ }, [isSelectedControlled, selected]);
22
+ const isFocusable = useMemo(() => Boolean(!disabled && (selectable || removable)), [disabled, selectable, removable]);
23
+ const getFocusableSibling = (shouldGetNext) => {
24
+ var _a;
25
+ const currentElement = chipRef.current;
26
+ if (!(currentElement === null || currentElement === void 0 ? void 0 : currentElement.parentElement)) {
27
+ return null;
28
+ }
29
+ const chips = Array.from(currentElement.parentElement.querySelectorAll(SELECTOR_FOCUSABLE_ITEMS));
30
+ const index = chips.indexOf(currentElement);
31
+ if (index === -1 || chips.length <= 1) {
32
+ return null;
33
+ }
34
+ const targetIndex = shouldGetNext ? index + 1 : index - 1;
35
+ return (_a = chips[targetIndex]) !== null && _a !== void 0 ? _a : null;
36
+ };
37
+ const navigateToEdge = (targetIndex) => {
38
+ const currentElement = chipRef.current;
39
+ if (!(currentElement === null || currentElement === void 0 ? void 0 : currentElement.parentElement)) {
40
+ return;
41
+ }
42
+ const chips = Array.from(currentElement.parentElement.querySelectorAll(SELECTOR_FOCUSABLE_ITEMS));
43
+ const edgeChip = targetIndex === -1 ? chips[chips.length - 1] : chips[0];
44
+ edgeChip === null || edgeChip === void 0 ? void 0 : edgeChip.focus();
45
+ };
46
+ const setSelectableState = (nextSelected, event) => {
47
+ if (!selectable || disabled || nextSelected === selectedState) {
48
+ return;
49
+ }
50
+ if (!isSelectedControlled) {
51
+ setSelected(nextSelected);
52
+ }
53
+ if (nextSelected) {
54
+ onSelect === null || onSelect === void 0 ? void 0 : onSelect(event);
55
+ }
56
+ else {
57
+ onDeselect === null || onDeselect === void 0 ? void 0 : onDeselect(event);
58
+ }
59
+ onSelectedChange === null || onSelectedChange === void 0 ? void 0 : onSelectedChange(nextSelected, event);
60
+ };
61
+ const toggleSelectedState = (event) => {
62
+ setSelectableState(!selectedState, event);
63
+ };
64
+ const handleRemove = (event) => {
65
+ onRemove === null || onRemove === void 0 ? void 0 : onRemove(event);
66
+ };
67
+ const handleRemoveClick = (event) => {
68
+ event.stopPropagation();
69
+ handleRemove(event);
70
+ };
71
+ const handleClick = (event) => {
72
+ if (disabled) {
73
+ return;
74
+ }
75
+ if (event.target.closest('.chip-remove')) {
76
+ return;
77
+ }
78
+ if (selectable) {
79
+ toggleSelectedState(event);
80
+ }
81
+ onClick === null || onClick === void 0 ? void 0 : onClick(event);
82
+ };
83
+ const handleKeyDown = (event) => {
84
+ if (disabled) {
85
+ onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(event);
86
+ return;
87
+ }
88
+ switch (event.key) {
89
+ case 'Enter':
90
+ case ' ':
91
+ case 'Spacebar': {
92
+ if (selectable) {
93
+ event.preventDefault();
94
+ toggleSelectedState(event);
95
+ }
96
+ break;
97
+ }
98
+ case 'Backspace':
99
+ case 'Delete': {
100
+ if (removable) {
101
+ event.preventDefault();
102
+ const sibling = getFocusableSibling(false) || getFocusableSibling(true);
103
+ sibling === null || sibling === void 0 ? void 0 : sibling.focus();
104
+ handleRemove(event);
105
+ }
106
+ break;
107
+ }
108
+ case 'ArrowLeft': {
109
+ event.preventDefault();
110
+ const sibling = getFocusableSibling(false);
111
+ sibling === null || sibling === void 0 ? void 0 : sibling.focus();
112
+ if (selectedState && event.shiftKey) {
113
+ sibling === null || sibling === void 0 ? void 0 : sibling.dispatchEvent(new CustomEvent('coreui-chip-select'));
114
+ }
115
+ break;
116
+ }
117
+ case 'ArrowRight': {
118
+ event.preventDefault();
119
+ const sibling = getFocusableSibling(true);
120
+ sibling === null || sibling === void 0 ? void 0 : sibling.focus();
121
+ if (selectedState && event.shiftKey) {
122
+ sibling === null || sibling === void 0 ? void 0 : sibling.dispatchEvent(new CustomEvent('coreui-chip-select'));
123
+ }
124
+ break;
125
+ }
126
+ case 'Home': {
127
+ event.preventDefault();
128
+ navigateToEdge(0);
129
+ break;
130
+ }
131
+ case 'End': {
132
+ event.preventDefault();
133
+ navigateToEdge(-1);
134
+ break;
135
+ }
136
+ // No default
137
+ }
138
+ onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(event);
139
+ };
140
+ return (React.createElement(Component, Object.assign({ className: classNames('chip', {
141
+ active: selectable ? selectedState : active,
142
+ disabled,
143
+ [`chip-${color}`]: color,
144
+ [`chip-${size}`]: size,
145
+ 'chip-clickable': clickable || selectable || Boolean(onClick),
146
+ 'chip-outline': variant === 'outline',
147
+ }, className), "data-coreui-chip-focusable": isFocusable || undefined }, (disabled && { 'aria-disabled': true }), (selectable && { 'aria-selected': selectedState }), (isFocusable && tabIndex === undefined && { tabIndex: 0 }), { onClick: handleClick, onKeyDown: handleKeyDown }, (Component === 'button' && { disabled }), rest, { ref: forkedRef }),
148
+ children,
149
+ removable && (React.createElement("button", { type: "button", className: "chip-remove", "aria-label": ariaRemoveLabel, onClick: handleRemoveClick, tabIndex: -1, disabled: disabled }, removeIcon !== null && removeIcon !== void 0 ? removeIcon : (React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" },
150
+ React.createElement("line", { x1: "4", y1: "4", x2: "12", y2: "12" }),
151
+ React.createElement("line", { x1: "12", y1: "4", x2: "4", y2: "12" })))))));
152
+ });
153
+ CChip.propTypes = {
154
+ active: PropTypes.bool,
155
+ ariaRemoveLabel: PropTypes.string,
156
+ as: PropTypes.elementType,
157
+ children: PropTypes.node,
158
+ className: PropTypes.string,
159
+ clickable: PropTypes.bool,
160
+ color: colorPropType,
161
+ disabled: PropTypes.bool,
162
+ onDeselect: PropTypes.func,
163
+ onRemove: PropTypes.func,
164
+ onSelect: PropTypes.func,
165
+ onSelectedChange: PropTypes.func,
166
+ removable: PropTypes.bool,
167
+ removeIcon: PropTypes.node,
168
+ selectable: PropTypes.bool,
169
+ selected: PropTypes.bool,
170
+ size: PropTypes.oneOf(['sm', 'lg']),
171
+ variant: PropTypes.oneOf(['outline']),
172
+ };
173
+ CChip.displayName = 'CChip';
174
+
175
+ export { CChip };
176
+ //# sourceMappingURL=CChip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CChip.js","sources":["../../../../src/components/chip/CChip.tsx"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { CChip } from './CChip';
2
+ export { CChip };
@@ -0,0 +1,92 @@
1
+ import React, { HTMLAttributes, ReactNode } from 'react';
2
+ type ChipClassName = string | ((value: string) => string);
3
+ export interface CChipInputProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'onInput' | 'onSelect'> {
4
+ /**
5
+ * Adds custom classes to the React Chip Input component root element.
6
+ */
7
+ className?: string;
8
+ /**
9
+ * Adds custom classes to chips rendered by the React Chip Input component. Accepts a static className or a resolver function based on chip value.
10
+ */
11
+ chipClassName?: ChipClassName;
12
+ /**
13
+ * Creates a new chip when the React Chip Input component loses focus with a pending value.
14
+ */
15
+ createOnBlur?: boolean;
16
+ /**
17
+ * Sets the initial uncontrolled values rendered by the React Chip Input component.
18
+ */
19
+ defaultValue?: string[];
20
+ /**
21
+ * Disables the React Chip Input component and prevents adding, removing, or selecting chips.
22
+ */
23
+ disabled?: boolean;
24
+ /**
25
+ * Sets the `id` of the internal text input rendered by the React Chip Input component.
26
+ */
27
+ id?: string;
28
+ /**
29
+ * Renders an inline label inside the React Chip Input component container.
30
+ */
31
+ label?: ReactNode;
32
+ /**
33
+ * Sets the maximum number of chips that can be created in the React Chip Input component.
34
+ */
35
+ maxChips?: number | null;
36
+ /**
37
+ * Sets the name of the hidden input used by the React Chip Input component for form submission.
38
+ */
39
+ name?: string;
40
+ /**
41
+ * Callback fired when the React Chip Input component adds a new chip.
42
+ */
43
+ onAdd?: (value: string) => void;
44
+ /**
45
+ * Callback fired when the value list of the React Chip Input component changes.
46
+ */
47
+ onChange?: (values: string[]) => void;
48
+ /**
49
+ * Callback fired when the internal text input value changes in the React Chip Input component.
50
+ */
51
+ onInput?: (value: string) => void;
52
+ /**
53
+ * Callback fired when the React Chip Input component removes a chip.
54
+ */
55
+ onRemove?: (value: string) => void;
56
+ /**
57
+ * Callback fired when the selected chip values change in the React Chip Input component.
58
+ */
59
+ onSelect?: (selected: string[]) => void;
60
+ /**
61
+ * Sets placeholder text for the internal input of the React Chip Input component.
62
+ */
63
+ placeholder?: string;
64
+ /**
65
+ * Makes the React Chip Input component readonly while keeping values visible.
66
+ */
67
+ readOnly?: boolean;
68
+ /**
69
+ * Displays remove buttons on chips managed by the React Chip Input component.
70
+ */
71
+ removable?: boolean;
72
+ /**
73
+ * Enables chip selection behavior in the React Chip Input component.
74
+ */
75
+ selectable?: boolean;
76
+ /**
77
+ * Sets the separator character used to create chips while typing or pasting in the React Chip Input component.
78
+ */
79
+ separator?: string | null;
80
+ /**
81
+ * Sets the size of the React Chip Input component to small or large.
82
+ */
83
+ size?: 'sm' | 'lg';
84
+ /**
85
+ * Controls the values rendered by the React Chip Input component.
86
+ *
87
+ * @controllable onChange
88
+ */
89
+ value?: string[];
90
+ }
91
+ export declare const CChipInput: React.ForwardRefExoticComponent<CChipInputProps & React.RefAttributes<HTMLDivElement>>;
92
+ export {};