@dreamtree-org/twreact-ui 1.3.0 → 1.3.2

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 (234) hide show
  1. package/DESIGN.md +2 -2
  2. package/README.md +258 -10
  3. package/ai-skills/dreamtree-ui.md +111 -15
  4. package/charts/package.json +5 -0
  5. package/dist/_shared/cn-DPPQUJu1.js +138 -0
  6. package/dist/ai-schema.json +1252 -179
  7. package/dist/charts/index.d.ts +9 -0
  8. package/dist/charts/index.d.ts.map +1 -0
  9. package/dist/charts/index.js +769 -0
  10. package/dist/components/charts/AreaChart.d.ts +4 -0
  11. package/dist/components/charts/AreaChart.d.ts.map +1 -0
  12. package/dist/components/charts/BarChart.d.ts +4 -0
  13. package/dist/components/charts/BarChart.d.ts.map +1 -0
  14. package/dist/components/charts/CartesianChart.d.ts +5 -0
  15. package/dist/components/charts/CartesianChart.d.ts.map +1 -0
  16. package/dist/components/charts/ChartFrame.d.ts +18 -0
  17. package/dist/components/charts/ChartFrame.d.ts.map +1 -0
  18. package/dist/components/charts/DonutChart.d.ts +4 -0
  19. package/dist/components/charts/DonutChart.d.ts.map +1 -0
  20. package/dist/components/charts/LineChart.d.ts +4 -0
  21. package/dist/components/charts/LineChart.d.ts.map +1 -0
  22. package/dist/components/charts/Sparkline.d.ts +5 -0
  23. package/dist/components/charts/Sparkline.d.ts.map +1 -0
  24. package/dist/components/charts/chartTheme.d.ts +26 -0
  25. package/dist/components/charts/chartTheme.d.ts.map +1 -0
  26. package/dist/components/core/Accordion.d.ts.map +1 -1
  27. package/dist/components/core/Button.d.ts.map +1 -1
  28. package/dist/components/core/Checkbox.d.ts.map +1 -1
  29. package/dist/components/core/ColorPicker.d.ts.map +1 -1
  30. package/dist/components/core/DatePicker.d.ts.map +1 -1
  31. package/dist/components/core/DateRangePicker.d.ts.map +1 -1
  32. package/dist/components/core/Form.d.ts.map +1 -1
  33. package/dist/components/core/Input.d.ts.map +1 -1
  34. package/dist/components/core/LocationPicker.d.ts.map +1 -1
  35. package/dist/components/core/Popover.d.ts +4 -0
  36. package/dist/components/core/Popover.d.ts.map +1 -0
  37. package/dist/components/core/PriceRangePicker.d.ts.map +1 -1
  38. package/dist/components/core/ProgressBar.d.ts.map +1 -1
  39. package/dist/components/core/Radio.d.ts.map +1 -1
  40. package/dist/components/core/Rate.d.ts.map +1 -1
  41. package/dist/components/core/Select.d.ts.map +1 -1
  42. package/dist/components/core/Skeleton.d.ts.map +1 -1
  43. package/dist/components/core/Slider.d.ts +4 -0
  44. package/dist/components/core/Slider.d.ts.map +1 -0
  45. package/dist/components/core/SpeechToText.d.ts.map +1 -1
  46. package/dist/components/core/Switch.d.ts.map +1 -1
  47. package/dist/components/core/Table/ActionMenu.d.ts.map +1 -1
  48. package/dist/components/core/Table/ColumnMenu.d.ts +2 -1
  49. package/dist/components/core/Table/ColumnMenu.d.ts.map +1 -1
  50. package/dist/components/core/Table/MobileCard.d.ts +2 -2
  51. package/dist/components/core/Table/MobileCard.d.ts.map +1 -1
  52. package/dist/components/core/Table/Table.d.ts.map +1 -1
  53. package/dist/components/core/Table/TableRow.d.ts +4 -2
  54. package/dist/components/core/Table/TableRow.d.ts.map +1 -1
  55. package/dist/components/core/Tabs.d.ts.map +1 -1
  56. package/dist/components/core/Textarea.d.ts +4 -0
  57. package/dist/components/core/Textarea.d.ts.map +1 -0
  58. package/dist/components/core/ThreeDotPopover.d.ts.map +1 -1
  59. package/dist/components/core/Tooltip.d.ts.map +1 -1
  60. package/dist/components/feedback/Dialog.d.ts.map +1 -1
  61. package/dist/components/feedback/Drawer.d.ts +4 -0
  62. package/dist/components/feedback/Drawer.d.ts.map +1 -0
  63. package/dist/components/feedback/Toast.d.ts +14 -5
  64. package/dist/components/feedback/Toast.d.ts.map +1 -1
  65. package/dist/components/feedback/Tour.d.ts +4 -0
  66. package/dist/components/feedback/Tour.d.ts.map +1 -0
  67. package/dist/components/feedback/TourSpotlight.d.ts +9 -0
  68. package/dist/components/feedback/TourSpotlight.d.ts.map +1 -0
  69. package/dist/components/navigation/Breadcrumbs.d.ts.map +1 -1
  70. package/dist/components/navigation/FootNav.d.ts.map +1 -1
  71. package/dist/components/navigation/Navbar.d.ts.map +1 -1
  72. package/dist/components/navigation/Sidebar.d.ts +8 -2
  73. package/dist/components/navigation/Sidebar.d.ts.map +1 -1
  74. package/dist/components/rich-text/RichTextEditor.d.ts +4 -0
  75. package/dist/components/rich-text/RichTextEditor.d.ts.map +1 -0
  76. package/dist/components/rich-text/RichTextToolbar.d.ts +219 -0
  77. package/dist/components/rich-text/RichTextToolbar.d.ts.map +1 -0
  78. package/dist/components/utility/Badge.d.ts.map +1 -1
  79. package/dist/components/utility/FileUpload.d.ts.map +1 -1
  80. package/dist/components/utility/Sortable.d.ts +4 -0
  81. package/dist/components/utility/Sortable.d.ts.map +1 -0
  82. package/dist/esm/_vendor/object-assign/index.js +99 -0
  83. package/dist/esm/_vendor/prop-types/_vendor/react-is/cjs/react-is.development.js +190 -0
  84. package/dist/esm/_vendor/prop-types/_vendor/react-is/cjs/react-is.production.min.js +26 -0
  85. package/dist/esm/_vendor/prop-types/_vendor/react-is/index.js +19 -0
  86. package/dist/esm/_vendor/prop-types/checkPropTypes.js +115 -0
  87. package/dist/esm/_vendor/prop-types/factoryWithThrowingShims.js +74 -0
  88. package/dist/esm/_vendor/prop-types/factoryWithTypeCheckers.js +625 -0
  89. package/dist/esm/_vendor/prop-types/index.js +30 -0
  90. package/dist/esm/_vendor/prop-types/lib/ReactPropTypesSecret.js +21 -0
  91. package/dist/esm/_vendor/prop-types/lib/has.js +11 -0
  92. package/dist/esm/_virtual/_commonjsHelpers.js +5 -0
  93. package/dist/esm/_virtual/_rollupPluginBabelHelpers.js +329 -0
  94. package/dist/esm/_virtual/index.js +3 -0
  95. package/dist/esm/_virtual/index2.js +3 -0
  96. package/dist/esm/_virtual/react-is.development.js +3 -0
  97. package/dist/esm/_virtual/react-is.production.min.js +3 -0
  98. package/dist/esm/charts/index.js +5 -0
  99. package/dist/esm/components/blocks/AppShell.js +205 -0
  100. package/dist/esm/components/blocks/ConfirmDialog.js +57 -0
  101. package/dist/esm/components/blocks/EmptyState.js +44 -0
  102. package/dist/esm/components/blocks/ErrorState.js +53 -0
  103. package/dist/esm/components/blocks/LoadingState.js +134 -0
  104. package/dist/esm/components/blocks/PageHeader.js +51 -0
  105. package/dist/esm/components/blocks/StatCard.js +79 -0
  106. package/dist/esm/components/blocks/StatusPill.js +55 -0
  107. package/dist/esm/components/charts/AreaChart.js +16 -0
  108. package/dist/esm/components/charts/BarChart.js +16 -0
  109. package/dist/esm/components/charts/CartesianChart.js +250 -0
  110. package/dist/esm/components/charts/ChartFrame.js +170 -0
  111. package/dist/esm/components/charts/DonutChart.js +119 -0
  112. package/dist/esm/components/charts/LineChart.js +16 -0
  113. package/dist/esm/components/charts/Sparkline.js +110 -0
  114. package/dist/esm/components/charts/chartTheme.js +109 -0
  115. package/dist/esm/components/core/Accordion.js +260 -0
  116. package/dist/esm/components/core/Button.js +59 -0
  117. package/dist/esm/components/core/Checkbox.js +188 -0
  118. package/dist/esm/components/core/ColorPicker.js +348 -0
  119. package/dist/esm/components/core/DatePicker.js +436 -0
  120. package/dist/esm/components/core/DateRangePicker.js +494 -0
  121. package/dist/esm/components/core/Form.js +522 -0
  122. package/dist/esm/components/core/Input.js +179 -0
  123. package/dist/esm/components/core/Loader.js +141 -0
  124. package/dist/esm/components/core/LocationPicker.js +161 -0
  125. package/dist/esm/components/core/Popover.js +171 -0
  126. package/dist/esm/components/core/PriceRangePicker.js +376 -0
  127. package/dist/esm/components/core/ProgressBar.js +152 -0
  128. package/dist/esm/components/core/Radio.js +156 -0
  129. package/dist/esm/components/core/Rate.js +197 -0
  130. package/dist/esm/components/core/RoundedTag.js +118 -0
  131. package/dist/esm/components/core/Select.js +857 -0
  132. package/dist/esm/components/core/Skeleton.js +100 -0
  133. package/dist/esm/components/core/Slider.js +134 -0
  134. package/dist/esm/components/core/SpeechToText.js +226 -0
  135. package/dist/esm/components/core/Switch.js +207 -0
  136. package/dist/esm/components/core/Table/ActionMenu.js +251 -0
  137. package/dist/esm/components/core/Table/ColumnMenu.js +55 -0
  138. package/dist/esm/components/core/Table/FieldInput.js +157 -0
  139. package/dist/esm/components/core/Table/MobileCard.js +187 -0
  140. package/dist/esm/components/core/Table/MobileFilters.js +72 -0
  141. package/dist/esm/components/core/Table/Pagination.js +157 -0
  142. package/dist/esm/components/core/Table/Table.js +1533 -0
  143. package/dist/esm/components/core/Table/TableRow.js +254 -0
  144. package/dist/esm/components/core/Table/constants.js +35 -0
  145. package/dist/esm/components/core/Table/helpers.js +124 -0
  146. package/dist/esm/components/core/Table/useClickOutside.js +26 -0
  147. package/dist/esm/components/core/Tabs.js +289 -0
  148. package/dist/esm/components/core/TextToSpeech.js +52 -0
  149. package/dist/esm/components/core/Textarea.js +125 -0
  150. package/dist/esm/components/core/ThreeDotPopover.js +160 -0
  151. package/dist/esm/components/core/Tooltip.js +372 -0
  152. package/dist/esm/components/feedback/Alert.js +96 -0
  153. package/dist/esm/components/feedback/Dialog.js +200 -0
  154. package/dist/esm/components/feedback/Drawer.js +171 -0
  155. package/dist/esm/components/feedback/Toast.js +362 -0
  156. package/dist/esm/components/feedback/Tour.js +214 -0
  157. package/dist/esm/components/feedback/TourSpotlight.js +71 -0
  158. package/dist/esm/components/navigation/Breadcrumbs.js +75 -0
  159. package/dist/esm/components/navigation/Dropdown.js +53 -0
  160. package/dist/esm/components/navigation/FootNav.js +51 -0
  161. package/dist/esm/components/navigation/Navbar.js +437 -0
  162. package/dist/esm/components/navigation/Sidebar.js +567 -0
  163. package/dist/esm/components/rich-text/RichTextEditor.js +244 -0
  164. package/dist/esm/components/rich-text/RichTextToolbar.js +397 -0
  165. package/dist/esm/components/utility/Avatar.js +89 -0
  166. package/dist/esm/components/utility/Badge.js +47 -0
  167. package/dist/esm/components/utility/Card.js +85 -0
  168. package/dist/esm/components/utility/Carousel.js +97 -0
  169. package/dist/esm/components/utility/Condition.js +9 -0
  170. package/dist/esm/components/utility/FileUpload.js +177 -0
  171. package/dist/esm/components/utility/Pagination.js +111 -0
  172. package/dist/esm/components/utility/Sortable.js +190 -0
  173. package/dist/esm/components/utility/Stepper.js +101 -0
  174. package/dist/esm/hooks/useApi.js +169 -0
  175. package/dist/esm/hooks/useControllableState.js +32 -0
  176. package/dist/esm/hooks/useFocusTrap.js +85 -0
  177. package/dist/esm/hooks/useLatestRef.js +20 -0
  178. package/dist/esm/hooks/useMixins.js +100 -0
  179. package/dist/esm/hooks/useScrollLock.js +26 -0
  180. package/dist/esm/hooks/useSliderValues.js +135 -0
  181. package/dist/esm/hooks/useSortable.js +188 -0
  182. package/dist/esm/hooks/useTheme.js +53 -0
  183. package/dist/esm/hooks/useTourTarget.js +92 -0
  184. package/dist/esm/index.js +65 -0
  185. package/dist/esm/rich-text/index.js +1 -0
  186. package/dist/esm/store/index.js +26 -0
  187. package/dist/esm/store/store.js +107 -0
  188. package/dist/esm/store/storeSlice.js +45 -0
  189. package/dist/esm/utils/cn.js +11 -0
  190. package/dist/esm/utils/emitter.js +169 -0
  191. package/dist/esm/utils/helpers.js +161 -0
  192. package/dist/esm/utils/position.js +134 -0
  193. package/dist/hooks/useApi.d.ts +2 -1
  194. package/dist/hooks/useApi.d.ts.map +1 -1
  195. package/dist/hooks/useControllableState.d.ts +11 -0
  196. package/dist/hooks/useControllableState.d.ts.map +1 -0
  197. package/dist/hooks/useFocusTrap.d.ts +15 -0
  198. package/dist/hooks/useFocusTrap.d.ts.map +1 -0
  199. package/dist/hooks/useLatestRef.d.ts +8 -0
  200. package/dist/hooks/useLatestRef.d.ts.map +1 -0
  201. package/dist/hooks/useMixins.d.ts.map +1 -1
  202. package/dist/hooks/useScrollLock.d.ts +2 -0
  203. package/dist/hooks/useScrollLock.d.ts.map +1 -0
  204. package/dist/hooks/useSliderValues.d.ts +43 -0
  205. package/dist/hooks/useSliderValues.d.ts.map +1 -0
  206. package/dist/hooks/useSortable.d.ts +32 -0
  207. package/dist/hooks/useSortable.d.ts.map +1 -0
  208. package/dist/hooks/useTheme.d.ts.map +1 -1
  209. package/dist/hooks/useTourTarget.d.ts +15 -0
  210. package/dist/hooks/useTourTarget.d.ts.map +1 -0
  211. package/dist/index.css +1 -1
  212. package/dist/index.d.ts +8 -2
  213. package/dist/index.esm.css +1 -1
  214. package/dist/index.esm.js +4817 -2216
  215. package/dist/index.js +4822 -2214
  216. package/dist/rich-text/index.d.ts +5 -0
  217. package/dist/rich-text/index.d.ts.map +1 -0
  218. package/dist/rich-text/index.js +654 -0
  219. package/dist/tokens/brands/studio.css +14 -0
  220. package/dist/tokens/brands/studio.json +20 -0
  221. package/dist/types/charts.d.ts +97 -0
  222. package/dist/types/charts.d.ts.map +1 -0
  223. package/dist/types/index.d.ts +193 -5
  224. package/dist/types/index.d.ts.map +1 -1
  225. package/dist/types/rich-text.d.ts +50 -0
  226. package/dist/types/rich-text.d.ts.map +1 -0
  227. package/dist/utils/position.d.ts +30 -0
  228. package/dist/utils/position.d.ts.map +1 -0
  229. package/doc/README.md +20 -1
  230. package/mcp/catalog.snapshot.json +2505 -800
  231. package/mcp/server-core.mjs +30 -1
  232. package/package.json +51 -3
  233. package/rich-text/package.json +5 -0
  234. package/tokens/brands/studio.json +20 -0
@@ -0,0 +1,89 @@
1
+ 'use client';
2
+ import { objectWithoutProperties as _objectWithoutProperties, objectSpread2 as _objectSpread2 } from '../../_virtual/_rollupPluginBabelHelpers.js';
3
+ import { jsxs, jsx } from 'react/jsx-runtime';
4
+ import React from 'react';
5
+ import { cn } from '../../utils/cn.js';
6
+ import { User } from 'lucide-react';
7
+
8
+ var _excluded = ["src", "alt", "name", "size", "shape", "status", "className"];
9
+ var Avatar = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
10
+ var src = _ref.src,
11
+ alt = _ref.alt,
12
+ name = _ref.name,
13
+ _ref$size = _ref.size,
14
+ size = _ref$size === void 0 ? 'md' : _ref$size,
15
+ _ref$shape = _ref.shape,
16
+ shape = _ref$shape === void 0 ? 'circle' : _ref$shape,
17
+ status = _ref.status,
18
+ className = _ref.className,
19
+ props = _objectWithoutProperties(_ref, _excluded);
20
+ var sizes = {
21
+ xs: 'h-6 w-6 text-xs',
22
+ sm: 'h-8 w-8 text-sm',
23
+ md: 'h-10 w-10 text-base',
24
+ lg: 'h-12 w-12 text-lg',
25
+ xl: 'h-16 w-16 text-xl',
26
+ '2xl': 'h-20 w-20 text-2xl'
27
+ };
28
+ var getInitials = function getInitials(name) {
29
+ if (!name) return '';
30
+ return name.split(' ').map(function (word) {
31
+ return word.charAt(0);
32
+ }).join('').toUpperCase().slice(0, 2);
33
+ };
34
+ var statusColors = {
35
+ online: 'bg-success-500',
36
+ offline: 'bg-gray-400',
37
+ away: 'bg-warning-500',
38
+ busy: 'bg-error-500'
39
+ };
40
+ var statusSizes = {
41
+ xs: 'h-1.5 w-1.5',
42
+ sm: 'h-2 w-2',
43
+ md: 'h-2.5 w-2.5',
44
+ lg: 'h-3 w-3',
45
+ xl: 'h-4 w-4',
46
+ '2xl': 'h-5 w-5'
47
+ };
48
+ return jsxs("div", {
49
+ ref: ref,
50
+ className: "relative inline-block",
51
+ children: [jsxs("div", _objectSpread2(_objectSpread2({
52
+ className: cn('flex items-center justify-center bg-gray-100 text-primary-600 font-medium', sizes[size], {
53
+ 'rounded-full': shape === 'circle',
54
+ 'rounded-md': shape === 'square',
55
+ 'rounded-lg': shape === 'rounded'
56
+ }, className)
57
+ }, props), {}, {
58
+ children: [src ? jsx("img", {
59
+ src: src,
60
+ alt: alt || name,
61
+ className: cn('h-full w-full object-cover', {
62
+ 'rounded-full': shape === 'circle',
63
+ 'rounded-md': shape === 'square',
64
+ 'rounded-lg': shape === 'rounded'
65
+ }),
66
+ onError: function onError(e) {
67
+ e.target.style.display = 'none';
68
+ e.target.nextSibling.style.display = 'flex';
69
+ }
70
+ }) : null, jsx("div", {
71
+ className: cn('flex items-center justify-center h-full w-full', {
72
+ 'rounded-full': shape === 'circle',
73
+ 'rounded-md': shape === 'square',
74
+ 'rounded-lg': shape === 'rounded'
75
+ }, {
76
+ 'hidden': src
77
+ }),
78
+ children: name ? getInitials(name) : jsx(User, {
79
+ className: "h-1/2 w-1/2"
80
+ })
81
+ })]
82
+ })), status && jsx("span", {
83
+ className: cn('absolute bottom-0 right-0 rounded-full border-2 border-white', statusColors[status], statusSizes[size])
84
+ })]
85
+ });
86
+ });
87
+ Avatar.displayName = 'Avatar';
88
+
89
+ export { Avatar as default };
@@ -0,0 +1,47 @@
1
+ 'use client';
2
+ import { objectWithoutProperties as _objectWithoutProperties, objectSpread2 as _objectSpread2 } from '../../_virtual/_rollupPluginBabelHelpers.js';
3
+ import { jsx } from 'react/jsx-runtime';
4
+ import React from 'react';
5
+ import { cn } from '../../utils/cn.js';
6
+
7
+ var _excluded = ["children", "variant", "size", "rounded", "className"];
8
+ var Badge = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
9
+ var children = _ref.children,
10
+ _ref$variant = _ref.variant,
11
+ variant = _ref$variant === void 0 ? 'default' : _ref$variant,
12
+ _ref$size = _ref.size,
13
+ size = _ref$size === void 0 ? 'md' : _ref$size,
14
+ _ref$rounded = _ref.rounded,
15
+ rounded = _ref$rounded === void 0 ? true : _ref$rounded,
16
+ className = _ref.className,
17
+ props = _objectWithoutProperties(_ref, _excluded);
18
+ var variants = {
19
+ "default": 'bg-gray-100 text-primary-800',
20
+ primary: 'bg-primary-100 text-primary-800',
21
+ secondary: 'bg-secondary-100 text-secondary-800',
22
+ success: 'bg-success-100 text-success-800',
23
+ warning: 'bg-warning-100 text-warning-800',
24
+ error: 'bg-error-100 text-error-800',
25
+ outline: 'border border-gray-300'
26
+ };
27
+ var sizes = {
28
+ xs: 'px-1.5 py-px text-xs',
29
+ sm: 'px-2 py-0.5 text-xs',
30
+ md: 'px-2.5 py-0.5 text-sm',
31
+ lg: 'px-3 py-1 text-base',
32
+ xl: 'px-3.5 py-1 text-lg',
33
+ '2xl': 'px-4 py-1.5 text-xl'
34
+ };
35
+ return jsx("span", _objectSpread2(_objectSpread2({
36
+ ref: ref,
37
+ className: cn('inline-flex items-center font-medium', variants[variant], sizes[size] || sizes.md, {
38
+ 'rounded-full': rounded,
39
+ 'rounded-md': !rounded
40
+ }, className)
41
+ }, props), {}, {
42
+ children: children
43
+ }));
44
+ });
45
+ Badge.displayName = 'Badge';
46
+
47
+ export { Badge as default };
@@ -0,0 +1,85 @@
1
+ 'use client';
2
+ import { objectWithoutProperties as _objectWithoutProperties, objectSpread2 as _objectSpread2 } from '../../_virtual/_rollupPluginBabelHelpers.js';
3
+ import { jsx } from 'react/jsx-runtime';
4
+ import React from 'react';
5
+ import { cn } from '../../utils/cn.js';
6
+
7
+ var _excluded = ["children", "className", "hover"],
8
+ _excluded2 = ["children", "className"],
9
+ _excluded3 = ["children", "className"],
10
+ _excluded4 = ["children", "className"],
11
+ _excluded5 = ["children", "className"],
12
+ _excluded6 = ["children", "className"];
13
+ var Card = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
14
+ var children = _ref.children,
15
+ className = _ref.className,
16
+ _ref$hover = _ref.hover,
17
+ hover = _ref$hover === void 0 ? false : _ref$hover,
18
+ props = _objectWithoutProperties(_ref, _excluded);
19
+ return jsx("div", _objectSpread2(_objectSpread2({
20
+ ref: ref,
21
+ className: cn('rounded-lg border border-gray-200 bg-white shadow-sm', {
22
+ 'hover:shadow-md transition-shadow': hover
23
+ }, className)
24
+ }, props), {}, {
25
+ children: children
26
+ }));
27
+ });
28
+ Card.displayName = 'Card';
29
+ var CardHeader = function CardHeader(_ref2) {
30
+ var children = _ref2.children,
31
+ className = _ref2.className,
32
+ props = _objectWithoutProperties(_ref2, _excluded2);
33
+ return jsx("div", _objectSpread2(_objectSpread2({
34
+ className: cn('px-6 py-4 border-b border-gray-200', className)
35
+ }, props), {}, {
36
+ children: children
37
+ }));
38
+ };
39
+ var CardTitle = function CardTitle(_ref3) {
40
+ var children = _ref3.children,
41
+ className = _ref3.className,
42
+ props = _objectWithoutProperties(_ref3, _excluded3);
43
+ return jsx("h3", _objectSpread2(_objectSpread2({
44
+ className: cn('text-lg font-semibold text-primary-900', className)
45
+ }, props), {}, {
46
+ children: children
47
+ }));
48
+ };
49
+ var CardDescription = function CardDescription(_ref4) {
50
+ var children = _ref4.children,
51
+ className = _ref4.className,
52
+ props = _objectWithoutProperties(_ref4, _excluded4);
53
+ return jsx("p", _objectSpread2(_objectSpread2({
54
+ className: cn('text-sm text-primary-600', className)
55
+ }, props), {}, {
56
+ children: children
57
+ }));
58
+ };
59
+ var CardContent = function CardContent(_ref5) {
60
+ var children = _ref5.children,
61
+ className = _ref5.className,
62
+ props = _objectWithoutProperties(_ref5, _excluded5);
63
+ return jsx("div", _objectSpread2(_objectSpread2({
64
+ className: cn('px-6 py-4', className)
65
+ }, props), {}, {
66
+ children: children
67
+ }));
68
+ };
69
+ var CardFooter = function CardFooter(_ref6) {
70
+ var children = _ref6.children,
71
+ className = _ref6.className,
72
+ props = _objectWithoutProperties(_ref6, _excluded6);
73
+ return jsx("div", _objectSpread2(_objectSpread2({
74
+ className: cn('px-6 py-4 border-t border-gray-200', className)
75
+ }, props), {}, {
76
+ children: children
77
+ }));
78
+ };
79
+ Card.Header = CardHeader;
80
+ Card.Title = CardTitle;
81
+ Card.Description = CardDescription;
82
+ Card.Content = CardContent;
83
+ Card.Footer = CardFooter;
84
+
85
+ export { Card as default };
@@ -0,0 +1,97 @@
1
+ 'use client';
2
+ import { slicedToArray as _slicedToArray } from '../../_virtual/_rollupPluginBabelHelpers.js';
3
+ import { jsxs, jsx } from 'react/jsx-runtime';
4
+ import React from 'react';
5
+ import { ChevronLeft, ChevronRight } from 'lucide-react';
6
+ import { cn } from '../../utils/cn.js';
7
+
8
+ var Carousel = /*#__PURE__*/React.forwardRef(function Carousel(props, ref) {
9
+ var children = props.children,
10
+ _props$autoPlay = props.autoPlay,
11
+ autoPlay = _props$autoPlay === void 0 ? false : _props$autoPlay,
12
+ _props$interval = props.interval,
13
+ interval = _props$interval === void 0 ? 5000 : _props$interval,
14
+ _props$showDots = props.showDots,
15
+ showDots = _props$showDots === void 0 ? true : _props$showDots,
16
+ className = props.className,
17
+ itemClassName = props.itemClassName;
18
+ var _React$useState = React.useState(0),
19
+ _React$useState2 = _slicedToArray(_React$useState, 2),
20
+ currentIndex = _React$useState2[0],
21
+ setCurrentIndex = _React$useState2[1];
22
+ var _React$useState3 = React.useState(false),
23
+ _React$useState4 = _slicedToArray(_React$useState3, 2),
24
+ isPaused = _React$useState4[0],
25
+ setIsPaused = _React$useState4[1];
26
+ var timerRef = React.useRef(null);
27
+ var next = React.useCallback(function () {
28
+ setCurrentIndex(function (prevIndex) {
29
+ return (prevIndex + 1) % React.Children.count(children);
30
+ });
31
+ }, [children]);
32
+ var prev = React.useCallback(function () {
33
+ var count = React.Children.count(children);
34
+ setCurrentIndex(function (prevIndex) {
35
+ return (prevIndex - 1 + count) % count;
36
+ });
37
+ }, [children]);
38
+ React.useEffect(function () {
39
+ if (autoPlay && !isPaused) {
40
+ timerRef.current = setInterval(next, interval);
41
+ }
42
+ return function () {
43
+ if (timerRef.current) clearInterval(timerRef.current);
44
+ };
45
+ }, [autoPlay, isPaused, next, interval]);
46
+ var childrenArray = React.Children.toArray(children);
47
+ return jsxs("div", {
48
+ ref: ref,
49
+ className: cn("relative group overflow-hidden rounded-xl bg-card border border-border/50 shadow-sm", className),
50
+ onMouseEnter: function onMouseEnter() {
51
+ return setIsPaused(true);
52
+ },
53
+ onMouseLeave: function onMouseLeave() {
54
+ return setIsPaused(false);
55
+ },
56
+ children: [jsx("div", {
57
+ className: "flex transition-transform duration-500 ease-out",
58
+ style: {
59
+ transform: "translateX(-".concat(currentIndex * 100, "%)")
60
+ },
61
+ children: childrenArray.map(function (child, index) {
62
+ return jsx("div", {
63
+ className: cn("w-full flex-shrink-0 min-w-full", itemClassName),
64
+ children: child
65
+ }, index);
66
+ })
67
+ }), jsx("button", {
68
+ onClick: prev,
69
+ className: "absolute left-4 top-1/2 -translate-y-1/2 z-10 p-2 rounded-full bg-background/80 backdrop-blur-md border border-border/50 text-foreground opacity-0 group-hover:opacity-100 transition-all hover:bg-background shadow-lg focus:outline-none focus:ring-2 focus:ring-primary",
70
+ "aria-label": "Previous slide",
71
+ children: jsx(ChevronLeft, {
72
+ className: "w-5 h-5 text-white"
73
+ })
74
+ }), jsx("button", {
75
+ onClick: next,
76
+ className: "absolute right-4 top-1/2 -translate-y-1/2 z-10 p-2 rounded-full bg-background/80 backdrop-blur-md border border-border/50 text-foreground opacity-0 group-hover:opacity-100 transition-all hover:bg-background shadow-lg focus:outline-none focus:ring-2 focus:ring-primary",
77
+ "aria-label": "Next slide",
78
+ children: jsx(ChevronRight, {
79
+ className: "w-5 h-5 text-white"
80
+ })
81
+ }), showDots && jsx("div", {
82
+ className: "absolute bottom-4 left-1/2 -translate-x-1/2 flex gap-2 z-10",
83
+ children: childrenArray.map(function (_, index) {
84
+ return jsx("button", {
85
+ onClick: function onClick() {
86
+ return setCurrentIndex(index);
87
+ },
88
+ className: cn("w-2 h-2 rounded-full transition-all duration-300", currentIndex === index ? "bg-primary w-6" : "bg-muted-foreground/30 hover:bg-muted-foreground/50"),
89
+ "aria-label": "Go to slide ".concat(index + 1)
90
+ }, index);
91
+ })
92
+ })]
93
+ });
94
+ });
95
+ Carousel.displayName = "Carousel";
96
+
97
+ export { Carousel, Carousel as default };
@@ -0,0 +1,9 @@
1
+ var Condition = function Condition(_ref) {
2
+ var condition = _ref.condition,
3
+ children = _ref.children,
4
+ _ref$fallback = _ref.fallback,
5
+ fallback = _ref$fallback === void 0 ? null : _ref$fallback;
6
+ return condition ? children : fallback;
7
+ };
8
+
9
+ export { Condition, Condition as default };
@@ -0,0 +1,177 @@
1
+ 'use client';
2
+ import { objectWithoutProperties as _objectWithoutProperties, slicedToArray as _slicedToArray, objectSpread2 as _objectSpread2 } from '../../_virtual/_rollupPluginBabelHelpers.js';
3
+ import { jsxs, jsx } from 'react/jsx-runtime';
4
+ import React, { useState, useRef, useCallback } from 'react';
5
+ import { cn } from '../../utils/cn.js';
6
+ import { Upload, X, Image, FileText, File } from 'lucide-react';
7
+
8
+ var _excluded = ["accept", "multiple", "maxSize", "onFileSelect", "onFileRemove", "files", "disabled", "className"];
9
+ function formatFileSize(bytes) {
10
+ if (bytes === 0) return '0 Bytes';
11
+ var k = 1024;
12
+ var sizes = ['Bytes', 'KB', 'MB', 'GB'];
13
+ var i = Math.floor(Math.log(bytes) / Math.log(k));
14
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
15
+ }
16
+ var FileUpload = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
17
+ var accept = _ref.accept,
18
+ _ref$multiple = _ref.multiple,
19
+ multiple = _ref$multiple === void 0 ? false : _ref$multiple,
20
+ maxSize = _ref.maxSize,
21
+ onFileSelect = _ref.onFileSelect,
22
+ onFileRemove = _ref.onFileRemove,
23
+ _ref$files = _ref.files,
24
+ files = _ref$files === void 0 ? [] : _ref$files,
25
+ _ref$disabled = _ref.disabled,
26
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
27
+ className = _ref.className,
28
+ props = _objectWithoutProperties(_ref, _excluded);
29
+ var _useState = useState(false),
30
+ _useState2 = _slicedToArray(_useState, 2),
31
+ isDragOver = _useState2[0],
32
+ setIsDragOver = _useState2[1];
33
+ var _useState3 = useState(''),
34
+ _useState4 = _slicedToArray(_useState3, 2),
35
+ error = _useState4[0],
36
+ setError = _useState4[1];
37
+ var fileInputRef = useRef(null);
38
+ var validateFile = useCallback(function (file) {
39
+ if (maxSize && file.size > maxSize) {
40
+ setError("File size must be less than ".concat(formatFileSize(maxSize)));
41
+ return false;
42
+ }
43
+ setError('');
44
+ return true;
45
+ }, [maxSize]);
46
+ var getFileIcon = function getFileIcon(file) {
47
+ if (file.type.startsWith('image/')) {
48
+ return jsx(Image, {
49
+ className: "h-8 w-8 text-primary-500"
50
+ });
51
+ }
52
+ if (file.type.includes('text') || file.type.includes('document')) {
53
+ return jsx(FileText, {
54
+ className: "h-8 w-8 text-success-500"
55
+ });
56
+ }
57
+ return jsx(File, {
58
+ className: "h-8 w-8 text-primary-500"
59
+ });
60
+ };
61
+ var handleFiles = useCallback(function (newFiles) {
62
+ var fileArray = Array.from(newFiles);
63
+ var validFiles = fileArray.filter(validateFile);
64
+ if (validFiles.length > 0) {
65
+ onFileSelect === null || onFileSelect === void 0 || onFileSelect(validFiles);
66
+ }
67
+ }, [onFileSelect, validateFile]);
68
+ var handleDrop = useCallback(function (e) {
69
+ e.preventDefault();
70
+ setIsDragOver(false);
71
+ if (disabled) return;
72
+ var droppedFiles = e.dataTransfer.files;
73
+ handleFiles(droppedFiles);
74
+ }, [handleFiles, disabled]);
75
+ var handleDragOver = useCallback(function (e) {
76
+ e.preventDefault();
77
+ if (!disabled) {
78
+ setIsDragOver(true);
79
+ }
80
+ }, [disabled]);
81
+ var handleDragLeave = useCallback(function (e) {
82
+ e.preventDefault();
83
+ setIsDragOver(false);
84
+ }, []);
85
+ var handleFileInputChange = function handleFileInputChange(e) {
86
+ var selectedFiles = e.target.files;
87
+ if (selectedFiles.length > 0) {
88
+ handleFiles(selectedFiles);
89
+ }
90
+ };
91
+ var handleRemoveFile = function handleRemoveFile(fileIndex) {
92
+ onFileRemove === null || onFileRemove === void 0 || onFileRemove(fileIndex);
93
+ };
94
+ var openFileDialog = function openFileDialog() {
95
+ if (!disabled) {
96
+ var _fileInputRef$current;
97
+ (_fileInputRef$current = fileInputRef.current) === null || _fileInputRef$current === void 0 || _fileInputRef$current.click();
98
+ }
99
+ };
100
+ return jsxs("div", _objectSpread2(_objectSpread2({
101
+ ref: ref,
102
+ className: cn('w-full', className)
103
+ }, props), {}, {
104
+ children: [jsxs("div", {
105
+ className: cn('relative border-2 border-dashed rounded-lg p-6 text-center transition-colors cursor-pointer', {
106
+ 'border-primary-500 bg-primary-50': isDragOver && !disabled,
107
+ 'border-gray-300 hover:border-gray-400': !isDragOver && !disabled,
108
+ 'border-gray-200 bg-gray-50 cursor-not-allowed': disabled
109
+ }),
110
+ onDrop: handleDrop,
111
+ onDragOver: handleDragOver,
112
+ onDragLeave: handleDragLeave,
113
+ onClick: openFileDialog,
114
+ children: [jsx("input", {
115
+ ref: fileInputRef,
116
+ type: "file",
117
+ accept: accept,
118
+ multiple: multiple,
119
+ onChange: handleFileInputChange,
120
+ className: "hidden",
121
+ disabled: disabled
122
+ }), jsx(Upload, {
123
+ className: cn('mx-auto h-12 w-12', {
124
+ 'text-primary-500': !disabled,
125
+ 'text-primary-400': disabled
126
+ })
127
+ }), jsxs("div", {
128
+ className: "mt-4",
129
+ children: [jsx("p", {
130
+ className: cn('text-sm font-medium', {
131
+ 'text-primary-900': !disabled,
132
+ 'text-primary-500': disabled
133
+ }),
134
+ children: isDragOver ? 'Drop files here' : 'Click to upload or drag and drop'
135
+ }), jsxs("p", {
136
+ className: "text-xs text-primary-500 mt-1",
137
+ children: [accept && "Accepted formats: ".concat(accept), maxSize && " \u2022 Max size: ".concat(formatFileSize(maxSize))]
138
+ })]
139
+ })]
140
+ }), error && jsx("p", {
141
+ className: "mt-2 text-sm text-error-500",
142
+ children: error
143
+ }), files.length > 0 && jsx("div", {
144
+ className: "mt-4 space-y-2",
145
+ children: files.map(function (file, index) {
146
+ return jsxs("div", {
147
+ className: "flex items-center justify-between rounded-md border border-gray-200 bg-white p-3",
148
+ children: [jsxs("div", {
149
+ className: "flex items-center space-x-3",
150
+ children: [getFileIcon(file), jsxs("div", {
151
+ children: [jsx("p", {
152
+ className: "text-sm font-medium text-primary-900",
153
+ children: file.name
154
+ }), jsx("p", {
155
+ className: "text-xs text-primary-500",
156
+ children: formatFileSize(file.size)
157
+ })]
158
+ })]
159
+ }), jsx("button", {
160
+ type: "button",
161
+ className: "rounded-md p-1 text-primary-400 hover:text-primary-600 hover:bg-gray-100",
162
+ onClick: function onClick() {
163
+ return handleRemoveFile(index);
164
+ },
165
+ disabled: disabled,
166
+ children: jsx(X, {
167
+ className: "h-4 w-4"
168
+ })
169
+ })]
170
+ }, index);
171
+ })
172
+ })]
173
+ }));
174
+ });
175
+ FileUpload.displayName = 'FileUpload';
176
+
177
+ export { FileUpload as default };
@@ -0,0 +1,111 @@
1
+ 'use client';
2
+ import { objectWithoutProperties as _objectWithoutProperties, objectSpread2 as _objectSpread2 } from '../../_virtual/_rollupPluginBabelHelpers.js';
3
+ import { jsxs, jsx } from 'react/jsx-runtime';
4
+ import React from 'react';
5
+ import { cn } from '../../utils/cn.js';
6
+ import { ChevronLeft, ChevronRight } from 'lucide-react';
7
+
8
+ var _excluded = ["currentPage", "totalPages", "onPageChange", "showFirstLast", "showPrevNext", "maxVisiblePages", "className"];
9
+ var Pagination = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
10
+ var _ref$currentPage = _ref.currentPage,
11
+ currentPage = _ref$currentPage === void 0 ? 1 : _ref$currentPage,
12
+ _ref$totalPages = _ref.totalPages,
13
+ totalPages = _ref$totalPages === void 0 ? 1 : _ref$totalPages,
14
+ onPageChange = _ref.onPageChange,
15
+ _ref$showFirstLast = _ref.showFirstLast,
16
+ showFirstLast = _ref$showFirstLast === void 0 ? true : _ref$showFirstLast,
17
+ _ref$showPrevNext = _ref.showPrevNext,
18
+ showPrevNext = _ref$showPrevNext === void 0 ? true : _ref$showPrevNext,
19
+ _ref$maxVisiblePages = _ref.maxVisiblePages,
20
+ maxVisiblePages = _ref$maxVisiblePages === void 0 ? 5 : _ref$maxVisiblePages,
21
+ className = _ref.className,
22
+ props = _objectWithoutProperties(_ref, _excluded);
23
+ var getVisiblePages = function getVisiblePages() {
24
+ var pages = [];
25
+ var halfVisible = Math.floor(maxVisiblePages / 2);
26
+ var startPage = Math.max(1, currentPage - halfVisible);
27
+ var endPage = Math.min(totalPages, currentPage + halfVisible);
28
+ // Adjust if we're near the beginning or end
29
+ if (endPage - startPage + 1 < maxVisiblePages) {
30
+ if (startPage === 1) {
31
+ endPage = Math.min(totalPages, startPage + maxVisiblePages - 1);
32
+ } else {
33
+ startPage = Math.max(1, endPage - maxVisiblePages + 1);
34
+ }
35
+ }
36
+ for (var i = startPage; i <= endPage; i++) {
37
+ pages.push(i);
38
+ }
39
+ return pages;
40
+ };
41
+ var visiblePages = getVisiblePages();
42
+ var handlePageClick = function handlePageClick(page) {
43
+ if (page >= 1 && page <= totalPages && page !== currentPage) {
44
+ onPageChange === null || onPageChange === void 0 || onPageChange(page);
45
+ }
46
+ };
47
+ if (totalPages <= 1) return null;
48
+ return jsxs("nav", _objectSpread2(_objectSpread2({
49
+ ref: ref,
50
+ className: cn('flex items-center justify-center space-x-1', className),
51
+ "aria-label": "Pagination"
52
+ }, props), {}, {
53
+ children: [showFirstLast && currentPage > 1 && jsx("button", {
54
+ className: "rounded-md border border-gray-300 bg-white px-3 py-2 text-sm font-medium hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2",
55
+ onClick: function onClick() {
56
+ return handlePageClick(1);
57
+ },
58
+ "aria-label": "Go to first page",
59
+ children: "1"
60
+ }), showPrevNext && jsx("button", {
61
+ className: "rounded-md border border-gray-300 bg-white px-3 py-2 text-sm font-medium hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed",
62
+ onClick: function onClick() {
63
+ return handlePageClick(currentPage - 1);
64
+ },
65
+ disabled: currentPage === 1,
66
+ "aria-label": "Go to previous page",
67
+ children: jsx(ChevronLeft, {
68
+ className: "h-4 w-4"
69
+ })
70
+ }), showFirstLast && visiblePages[0] > 2 && jsx("span", {
71
+ className: "px-3 py-2 text-sm text-primary-500",
72
+ children: "..."
73
+ }), visiblePages.map(function (page) {
74
+ return jsx("button", {
75
+ className: cn('rounded-md border px-3 py-2 text-sm font-medium focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2', {
76
+ 'border-primary-500 bg-primary-50 text-primary-600': page === currentPage,
77
+ 'border-gray-300 bg-white hover:bg-gray-50': page !== currentPage
78
+ }),
79
+ onClick: function onClick() {
80
+ return handlePageClick(page);
81
+ },
82
+ "aria-label": "Go to page ".concat(page),
83
+ "aria-current": page === currentPage ? 'page' : undefined,
84
+ children: page
85
+ }, page);
86
+ }), showFirstLast && visiblePages[visiblePages.length - 1] < totalPages - 1 && jsx("span", {
87
+ className: "px-3 py-2 text-sm text-primary-500",
88
+ children: "..."
89
+ }), showPrevNext && jsx("button", {
90
+ className: "rounded-md border border-gray-300 bg-white px-3 py-2 text-sm font-medium hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed",
91
+ onClick: function onClick() {
92
+ return handlePageClick(currentPage + 1);
93
+ },
94
+ disabled: currentPage === totalPages,
95
+ "aria-label": "Go to next page",
96
+ children: jsx(ChevronRight, {
97
+ className: "h-4 w-4"
98
+ })
99
+ }), showFirstLast && currentPage < totalPages && jsx("button", {
100
+ className: "rounded-md border border-gray-300 bg-white px-3 py-2 text-sm font-medium hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2",
101
+ onClick: function onClick() {
102
+ return handlePageClick(totalPages);
103
+ },
104
+ "aria-label": "Go to last page",
105
+ children: totalPages
106
+ })]
107
+ }));
108
+ });
109
+ Pagination.displayName = 'Pagination';
110
+
111
+ export { Pagination as default };