@dreamtree-org/twreact-ui 1.2.1 → 1.3.1

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 (215) hide show
  1. package/DESIGN.md +118 -0
  2. package/README.md +231 -44
  3. package/ai-skills/dreamtree-ui.md +98 -12
  4. package/dist/ai-schema.json +452 -17
  5. package/dist/components/blocks/AppShell.d.ts +4 -0
  6. package/dist/components/blocks/AppShell.d.ts.map +1 -0
  7. package/dist/components/blocks/ConfirmDialog.d.ts +4 -0
  8. package/dist/components/blocks/ConfirmDialog.d.ts.map +1 -0
  9. package/dist/components/blocks/EmptyState.d.ts +4 -0
  10. package/dist/components/blocks/EmptyState.d.ts.map +1 -0
  11. package/dist/components/blocks/ErrorState.d.ts +4 -0
  12. package/dist/components/blocks/ErrorState.d.ts.map +1 -0
  13. package/dist/components/blocks/LoadingState.d.ts +9 -0
  14. package/dist/components/blocks/LoadingState.d.ts.map +1 -0
  15. package/dist/components/blocks/PageHeader.d.ts +4 -0
  16. package/dist/components/blocks/PageHeader.d.ts.map +1 -0
  17. package/dist/components/blocks/StatCard.d.ts +4 -0
  18. package/dist/components/blocks/StatCard.d.ts.map +1 -0
  19. package/dist/components/blocks/StatusPill.d.ts +5 -0
  20. package/dist/components/blocks/StatusPill.d.ts.map +1 -0
  21. package/dist/components/core/Accordion.d.ts.map +1 -1
  22. package/dist/components/core/Button.d.ts.map +1 -1
  23. package/dist/components/core/Checkbox.d.ts.map +1 -1
  24. package/dist/components/core/ColorPicker.d.ts.map +1 -1
  25. package/dist/components/core/DatePicker.d.ts.map +1 -1
  26. package/dist/components/core/DateRangePicker.d.ts.map +1 -1
  27. package/dist/components/core/Form.d.ts.map +1 -1
  28. package/dist/components/core/Input.d.ts.map +1 -1
  29. package/dist/components/core/LocationPicker.d.ts.map +1 -1
  30. package/dist/components/core/Popover.d.ts +4 -0
  31. package/dist/components/core/Popover.d.ts.map +1 -0
  32. package/dist/components/core/PriceRangePicker.d.ts.map +1 -1
  33. package/dist/components/core/ProgressBar.d.ts.map +1 -1
  34. package/dist/components/core/Radio.d.ts.map +1 -1
  35. package/dist/components/core/Rate.d.ts.map +1 -1
  36. package/dist/components/core/Select.d.ts.map +1 -1
  37. package/dist/components/core/Skeleton.d.ts.map +1 -1
  38. package/dist/components/core/Slider.d.ts +4 -0
  39. package/dist/components/core/Slider.d.ts.map +1 -0
  40. package/dist/components/core/SpeechToText.d.ts.map +1 -1
  41. package/dist/components/core/Switch.d.ts.map +1 -1
  42. package/dist/components/core/Table/ActionMenu.d.ts.map +1 -1
  43. package/dist/components/core/Table/ColumnMenu.d.ts +2 -1
  44. package/dist/components/core/Table/ColumnMenu.d.ts.map +1 -1
  45. package/dist/components/core/Table/MobileCard.d.ts +2 -2
  46. package/dist/components/core/Table/MobileCard.d.ts.map +1 -1
  47. package/dist/components/core/Table/Table.d.ts.map +1 -1
  48. package/dist/components/core/Table/TableRow.d.ts +4 -2
  49. package/dist/components/core/Table/TableRow.d.ts.map +1 -1
  50. package/dist/components/core/Tabs.d.ts.map +1 -1
  51. package/dist/components/core/Textarea.d.ts +4 -0
  52. package/dist/components/core/Textarea.d.ts.map +1 -0
  53. package/dist/components/core/ThreeDotPopover.d.ts.map +1 -1
  54. package/dist/components/core/Tooltip.d.ts.map +1 -1
  55. package/dist/components/feedback/Dialog.d.ts.map +1 -1
  56. package/dist/components/feedback/Drawer.d.ts +4 -0
  57. package/dist/components/feedback/Drawer.d.ts.map +1 -0
  58. package/dist/components/feedback/Toast.d.ts +14 -5
  59. package/dist/components/feedback/Toast.d.ts.map +1 -1
  60. package/dist/components/feedback/Tour.d.ts +4 -0
  61. package/dist/components/feedback/Tour.d.ts.map +1 -0
  62. package/dist/components/feedback/TourSpotlight.d.ts +9 -0
  63. package/dist/components/feedback/TourSpotlight.d.ts.map +1 -0
  64. package/dist/components/navigation/Breadcrumbs.d.ts.map +1 -1
  65. package/dist/components/navigation/FootNav.d.ts.map +1 -1
  66. package/dist/components/navigation/Navbar.d.ts.map +1 -1
  67. package/dist/components/navigation/Sidebar.d.ts +8 -2
  68. package/dist/components/navigation/Sidebar.d.ts.map +1 -1
  69. package/dist/components/utility/Badge.d.ts.map +1 -1
  70. package/dist/components/utility/FileUpload.d.ts.map +1 -1
  71. package/dist/components/utility/Sortable.d.ts +4 -0
  72. package/dist/components/utility/Sortable.d.ts.map +1 -0
  73. package/dist/esm/_vendor/object-assign/index.js +99 -0
  74. package/dist/esm/_vendor/prop-types/_vendor/react-is/cjs/react-is.development.js +190 -0
  75. package/dist/esm/_vendor/prop-types/_vendor/react-is/cjs/react-is.production.min.js +26 -0
  76. package/dist/esm/_vendor/prop-types/_vendor/react-is/index.js +19 -0
  77. package/dist/esm/_vendor/prop-types/checkPropTypes.js +115 -0
  78. package/dist/esm/_vendor/prop-types/factoryWithThrowingShims.js +74 -0
  79. package/dist/esm/_vendor/prop-types/factoryWithTypeCheckers.js +625 -0
  80. package/dist/esm/_vendor/prop-types/index.js +30 -0
  81. package/dist/esm/_vendor/prop-types/lib/ReactPropTypesSecret.js +21 -0
  82. package/dist/esm/_vendor/prop-types/lib/has.js +11 -0
  83. package/dist/esm/_virtual/_commonjsHelpers.js +5 -0
  84. package/dist/esm/_virtual/_rollupPluginBabelHelpers.js +329 -0
  85. package/dist/esm/_virtual/index.js +3 -0
  86. package/dist/esm/_virtual/index2.js +3 -0
  87. package/dist/esm/_virtual/react-is.development.js +3 -0
  88. package/dist/esm/_virtual/react-is.production.min.js +3 -0
  89. package/dist/esm/components/blocks/AppShell.js +205 -0
  90. package/dist/esm/components/blocks/ConfirmDialog.js +57 -0
  91. package/dist/esm/components/blocks/EmptyState.js +44 -0
  92. package/dist/esm/components/blocks/ErrorState.js +53 -0
  93. package/dist/esm/components/blocks/LoadingState.js +134 -0
  94. package/dist/esm/components/blocks/PageHeader.js +51 -0
  95. package/dist/esm/components/blocks/StatCard.js +79 -0
  96. package/dist/esm/components/blocks/StatusPill.js +55 -0
  97. package/dist/esm/components/core/Accordion.js +260 -0
  98. package/dist/esm/components/core/Button.js +59 -0
  99. package/dist/esm/components/core/Checkbox.js +188 -0
  100. package/dist/esm/components/core/ColorPicker.js +348 -0
  101. package/dist/esm/components/core/DatePicker.js +436 -0
  102. package/dist/esm/components/core/DateRangePicker.js +494 -0
  103. package/dist/esm/components/core/Form.js +522 -0
  104. package/dist/esm/components/core/Input.js +179 -0
  105. package/dist/esm/components/core/Loader.js +141 -0
  106. package/dist/esm/components/core/LocationPicker.js +161 -0
  107. package/dist/esm/components/core/Popover.js +171 -0
  108. package/dist/esm/components/core/PriceRangePicker.js +376 -0
  109. package/dist/esm/components/core/ProgressBar.js +152 -0
  110. package/dist/esm/components/core/Radio.js +156 -0
  111. package/dist/esm/components/core/Rate.js +197 -0
  112. package/dist/esm/components/core/RoundedTag.js +118 -0
  113. package/dist/esm/components/core/Select.js +857 -0
  114. package/dist/esm/components/core/Skeleton.js +100 -0
  115. package/dist/esm/components/core/Slider.js +134 -0
  116. package/dist/esm/components/core/SpeechToText.js +226 -0
  117. package/dist/esm/components/core/Switch.js +207 -0
  118. package/dist/esm/components/core/Table/ActionMenu.js +251 -0
  119. package/dist/esm/components/core/Table/ColumnMenu.js +55 -0
  120. package/dist/esm/components/core/Table/FieldInput.js +157 -0
  121. package/dist/esm/components/core/Table/MobileCard.js +187 -0
  122. package/dist/esm/components/core/Table/MobileFilters.js +72 -0
  123. package/dist/esm/components/core/Table/Pagination.js +157 -0
  124. package/dist/esm/components/core/Table/Table.js +1533 -0
  125. package/dist/esm/components/core/Table/TableRow.js +254 -0
  126. package/dist/esm/components/core/Table/constants.js +35 -0
  127. package/dist/esm/components/core/Table/helpers.js +124 -0
  128. package/dist/esm/components/core/Table/useClickOutside.js +26 -0
  129. package/dist/esm/components/core/Tabs.js +289 -0
  130. package/dist/esm/components/core/TextToSpeech.js +52 -0
  131. package/dist/esm/components/core/Textarea.js +125 -0
  132. package/dist/esm/components/core/ThreeDotPopover.js +160 -0
  133. package/dist/esm/components/core/Tooltip.js +372 -0
  134. package/dist/esm/components/feedback/Alert.js +96 -0
  135. package/dist/esm/components/feedback/Dialog.js +200 -0
  136. package/dist/esm/components/feedback/Drawer.js +171 -0
  137. package/dist/esm/components/feedback/Toast.js +362 -0
  138. package/dist/esm/components/feedback/Tour.js +214 -0
  139. package/dist/esm/components/feedback/TourSpotlight.js +71 -0
  140. package/dist/esm/components/navigation/Breadcrumbs.js +75 -0
  141. package/dist/esm/components/navigation/Dropdown.js +53 -0
  142. package/dist/esm/components/navigation/FootNav.js +51 -0
  143. package/dist/esm/components/navigation/Navbar.js +437 -0
  144. package/dist/esm/components/navigation/Sidebar.js +567 -0
  145. package/dist/esm/components/utility/Avatar.js +89 -0
  146. package/dist/esm/components/utility/Badge.js +47 -0
  147. package/dist/esm/components/utility/Card.js +85 -0
  148. package/dist/esm/components/utility/Carousel.js +97 -0
  149. package/dist/esm/components/utility/Condition.js +9 -0
  150. package/dist/esm/components/utility/FileUpload.js +177 -0
  151. package/dist/esm/components/utility/Pagination.js +111 -0
  152. package/dist/esm/components/utility/Sortable.js +190 -0
  153. package/dist/esm/components/utility/Stepper.js +101 -0
  154. package/dist/esm/hooks/useApi.js +169 -0
  155. package/dist/esm/hooks/useControllableState.js +32 -0
  156. package/dist/esm/hooks/useFocusTrap.js +85 -0
  157. package/dist/esm/hooks/useLatestRef.js +20 -0
  158. package/dist/esm/hooks/useMixins.js +100 -0
  159. package/dist/esm/hooks/useScrollLock.js +26 -0
  160. package/dist/esm/hooks/useSliderValues.js +135 -0
  161. package/dist/esm/hooks/useSortable.js +188 -0
  162. package/dist/esm/hooks/useTheme.js +53 -0
  163. package/dist/esm/hooks/useTourTarget.js +92 -0
  164. package/dist/esm/index.js +65 -0
  165. package/dist/esm/store/index.js +26 -0
  166. package/dist/esm/store/store.js +107 -0
  167. package/dist/esm/store/storeSlice.js +45 -0
  168. package/dist/esm/utils/cn.js +11 -0
  169. package/dist/esm/utils/emitter.js +169 -0
  170. package/dist/esm/utils/helpers.js +161 -0
  171. package/dist/esm/utils/position.js +134 -0
  172. package/dist/hooks/useApi.d.ts +2 -1
  173. package/dist/hooks/useApi.d.ts.map +1 -1
  174. package/dist/hooks/useControllableState.d.ts +11 -0
  175. package/dist/hooks/useControllableState.d.ts.map +1 -0
  176. package/dist/hooks/useFocusTrap.d.ts +15 -0
  177. package/dist/hooks/useFocusTrap.d.ts.map +1 -0
  178. package/dist/hooks/useLatestRef.d.ts +8 -0
  179. package/dist/hooks/useLatestRef.d.ts.map +1 -0
  180. package/dist/hooks/useMixins.d.ts.map +1 -1
  181. package/dist/hooks/useScrollLock.d.ts +2 -0
  182. package/dist/hooks/useScrollLock.d.ts.map +1 -0
  183. package/dist/hooks/useSliderValues.d.ts +43 -0
  184. package/dist/hooks/useSliderValues.d.ts.map +1 -0
  185. package/dist/hooks/useSortable.d.ts +32 -0
  186. package/dist/hooks/useSortable.d.ts.map +1 -0
  187. package/dist/hooks/useTheme.d.ts.map +1 -1
  188. package/dist/hooks/useTourTarget.d.ts +15 -0
  189. package/dist/hooks/useTourTarget.d.ts.map +1 -0
  190. package/dist/index.css +1 -1
  191. package/dist/index.d.ts +55 -39
  192. package/dist/index.esm.css +1 -1
  193. package/dist/index.esm.js +7937 -4659
  194. package/dist/index.js +7950 -4657
  195. package/dist/tokens/brands/default.css +1 -0
  196. package/dist/tokens/brands/default.json +5 -0
  197. package/dist/tokens/brands/practicepro.css +17 -0
  198. package/dist/tokens/brands/practicepro.json +27 -0
  199. package/dist/tokens/tailwind3-preset.cjs +214 -0
  200. package/dist/tokens/theme.css +193 -0
  201. package/dist/tokens/tokens.json +373 -0
  202. package/dist/tokens/vars.css +98 -0
  203. package/dist/types/blocks.d.ts +109 -0
  204. package/dist/types/blocks.d.ts.map +1 -0
  205. package/dist/types/index.d.ts +194 -5
  206. package/dist/types/index.d.ts.map +1 -1
  207. package/dist/utils/position.d.ts +30 -0
  208. package/dist/utils/position.d.ts.map +1 -0
  209. package/doc/README.md +26 -1
  210. package/mcp/catalog.snapshot.json +1643 -549
  211. package/package.json +24 -6
  212. package/tokens/brands/default.json +5 -0
  213. package/tokens/brands/practicepro.json +27 -0
  214. package/tokens/lib.cjs +128 -0
  215. package/tokens/tokens.json +133 -0
@@ -0,0 +1,197 @@
1
+ 'use client';
2
+ import { objectWithoutProperties as _objectWithoutProperties, slicedToArray as _slicedToArray, objectSpread2 as _objectSpread2 } from '../../_virtual/_rollupPluginBabelHelpers.js';
3
+ import { jsx, jsxs } from 'react/jsx-runtime';
4
+ import { forwardRef, useState } from 'react';
5
+ import { cn } from '../../utils/cn.js';
6
+
7
+ var _excluded = ["count", "value", "defaultValue", "readOnly", "icon", "toggledIcon", "activeColor", "inactiveColor", "size", "onChange", "onClick", "text", "className", "id", "name"];
8
+ function StarFilled(_ref) {
9
+ var _ref$size = _ref.size,
10
+ size = _ref$size === void 0 ? 20 : _ref$size;
11
+ return jsx("svg", {
12
+ width: size,
13
+ height: size,
14
+ viewBox: "0 0 24 24",
15
+ "aria-hidden": "true",
16
+ focusable: "false",
17
+ className: "block",
18
+ children: jsx("path", {
19
+ d: "M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z",
20
+ fill: "currentColor"
21
+ })
22
+ });
23
+ }
24
+ function StarOutline(_ref2) {
25
+ var _ref2$size = _ref2.size,
26
+ size = _ref2$size === void 0 ? 20 : _ref2$size;
27
+ return jsx("svg", {
28
+ width: size,
29
+ height: size,
30
+ viewBox: "0 0 24 24",
31
+ "aria-hidden": "true",
32
+ focusable: "false",
33
+ className: "block",
34
+ children: jsx("path", {
35
+ d: "M22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.64-7.03L22 9.24z",
36
+ fill: "none",
37
+ stroke: "currentColor",
38
+ strokeWidth: "1.2"
39
+ })
40
+ });
41
+ }
42
+ var Rate = /*#__PURE__*/forwardRef(function Rate(_ref3, ref) {
43
+ var _ref3$count = _ref3.count,
44
+ count = _ref3$count === void 0 ? 5 : _ref3$count,
45
+ value = _ref3.value,
46
+ _ref3$defaultValue = _ref3.defaultValue,
47
+ defaultValue = _ref3$defaultValue === void 0 ? 0 : _ref3$defaultValue,
48
+ _ref3$readOnly = _ref3.readOnly,
49
+ readOnly = _ref3$readOnly === void 0 ? false : _ref3$readOnly,
50
+ icon = _ref3.icon,
51
+ toggledIcon = _ref3.toggledIcon,
52
+ activeColor = _ref3.activeColor,
53
+ inactiveColor = _ref3.inactiveColor,
54
+ _ref3$size = _ref3.size,
55
+ size = _ref3$size === void 0 ? 20 : _ref3$size,
56
+ onChange = _ref3.onChange,
57
+ onClick = _ref3.onClick,
58
+ text = _ref3.text,
59
+ _ref3$className = _ref3.className,
60
+ className = _ref3$className === void 0 ? "" : _ref3$className,
61
+ id = _ref3.id,
62
+ name = _ref3.name,
63
+ rest = _objectWithoutProperties(_ref3, _excluded);
64
+ var _useState = useState(Math.max(0, Math.min(count, Math.floor(defaultValue || 0)))),
65
+ _useState2 = _slicedToArray(_useState, 2),
66
+ internalValue = _useState2[0],
67
+ setInternalValue = _useState2[1];
68
+ var _useState3 = useState(null),
69
+ _useState4 = _slicedToArray(_useState3, 2),
70
+ hoverValue = _useState4[0],
71
+ setHoverValue = _useState4[1];
72
+ var _useState5 = useState(null),
73
+ _useState6 = _slicedToArray(_useState5, 2),
74
+ focusValue = _useState6[0],
75
+ setFocusValue = _useState6[1];
76
+ var isControlled = value != null;
77
+ var selectedValue = isControlled ? value : internalValue;
78
+ var displayValue = hoverValue != null ? hoverValue : focusValue != null ? focusValue : selectedValue;
79
+ var InactiveIcon = icon !== null && icon !== void 0 ? icon : jsx(StarOutline, {
80
+ size: size
81
+ });
82
+ var ActiveIcon = toggledIcon !== null && toggledIcon !== void 0 ? toggledIcon : jsx(StarFilled, {
83
+ size: size
84
+ });
85
+ var commit = function commit(n) {
86
+ if (readOnly) return;
87
+ if (!isControlled) setInternalValue(n);
88
+ if (typeof onChange === "function") onChange(n);
89
+ if (typeof onClick === "function") onClick(n);
90
+ };
91
+ var handleMouseEnter = function handleMouseEnter(n) {
92
+ if (readOnly) return;
93
+ setHoverValue(n);
94
+ };
95
+ var handleMouseMove = function handleMouseMove(n) {
96
+ if (readOnly) return;
97
+ setHoverValue(n);
98
+ };
99
+ var handleMouseLeave = function handleMouseLeave() {
100
+ if (readOnly) return;
101
+ setHoverValue(null);
102
+ };
103
+ var handleFocus = function handleFocus(n) {
104
+ if (readOnly) return;
105
+ setFocusValue(n);
106
+ };
107
+ var handleBlur = function handleBlur() {
108
+ if (readOnly) return;
109
+ setFocusValue(null);
110
+ };
111
+ var handleKeyDown = function handleKeyDown(e, n) {
112
+ if (readOnly) return;
113
+ if (e.key === "Enter" || e.key === " ") {
114
+ e.preventDefault();
115
+ commit(n);
116
+ return;
117
+ }
118
+ if (e.key === "ArrowLeft") {
119
+ e.preventDefault();
120
+ setFocusValue(function (prev) {
121
+ var base = prev != null ? prev : selectedValue || 0;
122
+ return Math.max(0, base - 1);
123
+ });
124
+ return;
125
+ }
126
+ if (e.key === "ArrowRight") {
127
+ e.preventDefault();
128
+ setFocusValue(function (prev) {
129
+ var base = prev != null ? prev : selectedValue || 0;
130
+ return Math.min(count, base + 1);
131
+ });
132
+ return;
133
+ }
134
+ };
135
+ return jsxs("div", _objectSpread2(_objectSpread2({
136
+ ref: ref,
137
+ id: id,
138
+ className: cn("inline-flex items-center gap-2", className),
139
+ "aria-live": "polite"
140
+ }, rest), {}, {
141
+ children: [jsx("div", {
142
+ role: "radiogroup",
143
+ "aria-label": name || "Rating",
144
+ className: "inline-flex gap-1",
145
+ onMouseLeave: handleMouseLeave,
146
+ children: Array.from({
147
+ length: count
148
+ }, function (_, i) {
149
+ var starNumber = i + 1;
150
+ var filled = starNumber <= (displayValue || 0);
151
+ var color = filled ? activeColor : inactiveColor;
152
+ // Token classes unless a colour override is passed, so brands and dark mode apply (STUDIO-59).
153
+ var colorClass = color ? "" : filled ? " text-warning-400" : " text-gray-200";
154
+ return jsx("button", {
155
+ type: "button",
156
+ role: "radio",
157
+ "aria-checked": filled,
158
+ "aria-label": "".concat(starNumber, " star").concat(starNumber > 1 ? "s" : ""),
159
+ tabIndex: readOnly ? -1 : 0,
160
+ onClick: function onClick() {
161
+ return commit(starNumber);
162
+ },
163
+ onKeyDown: function onKeyDown(e) {
164
+ return handleKeyDown(e, starNumber);
165
+ },
166
+ onMouseEnter: function onMouseEnter() {
167
+ return handleMouseEnter(starNumber);
168
+ },
169
+ onMouseMove: function onMouseMove() {
170
+ return handleMouseMove(starNumber);
171
+ },
172
+ onFocus: function onFocus() {
173
+ return handleFocus(starNumber);
174
+ },
175
+ onBlur: handleBlur,
176
+ disabled: readOnly,
177
+ title: "".concat(starNumber, " of ").concat(count),
178
+ className: "p-0 m-0 bg-transparent border-0 inline-flex items-center justify-center leading-0 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-slate-300 rounded".concat(colorClass),
179
+ style: color ? {
180
+ color: color
181
+ } : undefined,
182
+ children: filled ? ActiveIcon : InactiveIcon
183
+ }, i);
184
+ })
185
+ }), text ? jsx("div", {
186
+ "aria-hidden": true,
187
+ className: "ml-1 text-sm text-primary-700 select-none",
188
+ style: {
189
+ fontSize: Math.max(12, Math.round(size * 0.9))
190
+ },
191
+ children: text
192
+ }) : null]
193
+ }));
194
+ });
195
+ Rate.displayName = "Rate";
196
+
197
+ export { Rate as default };
@@ -0,0 +1,118 @@
1
+ 'use client';
2
+ import { objectWithoutProperties as _objectWithoutProperties, objectSpread2 as _objectSpread2 } from '../../_virtual/_rollupPluginBabelHelpers.js';
3
+ import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
4
+ import { forwardRef } from 'react';
5
+ import { cn } from '../../utils/cn.js';
6
+
7
+ var _excluded = ["label", "avatarSrc", "avatarAlt", "initials", "size", "onRemove", "onClick", "className", "closeClass", "ariaLabel", "avatarPosition", "avatarClassname", "initialClassname"];
8
+ var RoundedTag = /*#__PURE__*/forwardRef(function RoundedTag(_ref, ref) {
9
+ var label = _ref.label,
10
+ _ref$avatarSrc = _ref.avatarSrc,
11
+ avatarSrc = _ref$avatarSrc === void 0 ? null : _ref$avatarSrc,
12
+ _ref$avatarAlt = _ref.avatarAlt,
13
+ avatarAlt = _ref$avatarAlt === void 0 ? "avatar" : _ref$avatarAlt,
14
+ _ref$initials = _ref.initials,
15
+ initials = _ref$initials === void 0 ? "" : _ref$initials,
16
+ _ref$size = _ref.size,
17
+ size = _ref$size === void 0 ? "md" : _ref$size,
18
+ _ref$onRemove = _ref.onRemove,
19
+ onRemove = _ref$onRemove === void 0 ? null : _ref$onRemove,
20
+ _ref$onClick = _ref.onClick,
21
+ _onClick = _ref$onClick === void 0 ? null : _ref$onClick,
22
+ _ref$className = _ref.className,
23
+ className = _ref$className === void 0 ? "" : _ref$className,
24
+ _ref$closeClass = _ref.closeClass,
25
+ closeClass = _ref$closeClass === void 0 ? "" : _ref$closeClass,
26
+ _ref$ariaLabel = _ref.ariaLabel,
27
+ ariaLabel = _ref$ariaLabel === void 0 ? "tag" : _ref$ariaLabel,
28
+ _ref$avatarPosition = _ref.avatarPosition,
29
+ avatarPosition = _ref$avatarPosition === void 0 ? "left" : _ref$avatarPosition,
30
+ _ref$avatarClassname = _ref.avatarClassname,
31
+ avatarClassname = _ref$avatarClassname === void 0 ? "" : _ref$avatarClassname,
32
+ _ref$initialClassname = _ref.initialClassname,
33
+ initialClassname = _ref$initialClassname === void 0 ? "" : _ref$initialClassname,
34
+ rest = _objectWithoutProperties(_ref, _excluded);
35
+ var showAvatar = Boolean(avatarSrc || initials);
36
+ var sizes = {
37
+ sm: {
38
+ avatar: "w-5 h-5 text-xs",
39
+ paddingWithAvatar: "pr-2 pl-1.5 py-1",
40
+ paddingNoAvatar: "px-2 py-1",
41
+ text: "text-xs",
42
+ gapWithAvatar: "gap-1",
43
+ gapNoAvatar: "gap-1"
44
+ },
45
+ md: {
46
+ avatar: "w-6 h-6 text-sm",
47
+ paddingWithAvatar: "pr-2 pl-1.5 py-1",
48
+ paddingNoAvatar: "px-3 py-1",
49
+ text: "text-sm",
50
+ gapWithAvatar: "gap-2",
51
+ gapNoAvatar: "gap-1"
52
+ },
53
+ lg: {
54
+ avatar: "w-8 h-8 text-sm",
55
+ paddingWithAvatar: "pr-2 pl-1.5 py-1",
56
+ paddingNoAvatar: "px-4 py-1.5",
57
+ text: "text-base",
58
+ gapWithAvatar: "gap-2",
59
+ gapNoAvatar: "gap-2"
60
+ }
61
+ };
62
+ function handleRemove(e) {
63
+ e && e.stopPropagation();
64
+ onRemove && onRemove({});
65
+ }
66
+ var s = sizes[size] || sizes.md;
67
+ var paddingClass = showAvatar ? s.paddingWithAvatar : s.paddingNoAvatar;
68
+ var gapClass = showAvatar ? s.gapWithAvatar : s.gapNoAvatar;
69
+ var AvatarNode = showAvatar && jsx(Fragment, {
70
+ children: avatarSrc ? jsx("div", {
71
+ className: "flex-shrink-0 rounded-full overflow-hidden bg-gray-300 flex items-center justify-center ".concat(s.avatar, " ").concat(avatarClassname),
72
+ "aria-hidden": avatarSrc ? undefined : "true",
73
+ children: jsx("img", {
74
+ src: avatarSrc,
75
+ alt: avatarAlt,
76
+ className: "w-full h-full object-cover"
77
+ })
78
+ }) : jsx("div", {
79
+ className: "flex-shrink-0 rounded-full overflow-hidden bg-gray-300 flex items-center justify-center ".concat(s.avatar, " ").concat(initialClassname),
80
+ "aria-hidden": avatarSrc ? undefined : "true",
81
+ children: initials
82
+ })
83
+ });
84
+ return jsxs("div", _objectSpread2(_objectSpread2({
85
+ ref: ref,
86
+ className: cn("inline-flex items-center rounded-full bg-gray-100 text-primary-800", paddingClass, gapClass, s.text, className),
87
+ role: "group",
88
+ "aria-label": ariaLabel,
89
+ onClick: function onClick(e) {
90
+ return _onClick && _onClick(e);
91
+ }
92
+ }, rest), {}, {
93
+ children: [avatarPosition === "left" && AvatarNode, jsx("div", {
94
+ className: "truncate max-w-[10rem]",
95
+ children: label
96
+ }), avatarPosition === "right" && AvatarNode, onRemove && jsx("button", {
97
+ type: "button",
98
+ "aria-label": "Remove",
99
+ onClick: handleRemove,
100
+ className: "inline-flex items-center justify-center rounded-full p-1 hover:bg-gray-200 focus:outline-none ".concat(closeClass),
101
+ children: jsx("svg", {
102
+ className: "w-3 h-3",
103
+ viewBox: "0 0 24 24",
104
+ fill: "none",
105
+ stroke: "currentColor",
106
+ strokeWidth: "2",
107
+ children: jsx("path", {
108
+ strokeLinecap: "round",
109
+ strokeLinejoin: "round",
110
+ d: "M6 6l12 12M18 6L6 18"
111
+ })
112
+ })
113
+ })]
114
+ }));
115
+ });
116
+ RoundedTag.displayName = "RoundedTag";
117
+
118
+ export { RoundedTag as default };