@dreamtree-org/twreact-ui 1.3.0 → 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.
- package/README.md +179 -10
- package/ai-skills/dreamtree-ui.md +71 -12
- package/dist/ai-schema.json +452 -17
- package/dist/components/core/Accordion.d.ts.map +1 -1
- package/dist/components/core/Button.d.ts.map +1 -1
- package/dist/components/core/Checkbox.d.ts.map +1 -1
- package/dist/components/core/ColorPicker.d.ts.map +1 -1
- package/dist/components/core/DatePicker.d.ts.map +1 -1
- package/dist/components/core/DateRangePicker.d.ts.map +1 -1
- package/dist/components/core/Form.d.ts.map +1 -1
- package/dist/components/core/Input.d.ts.map +1 -1
- package/dist/components/core/LocationPicker.d.ts.map +1 -1
- package/dist/components/core/Popover.d.ts +4 -0
- package/dist/components/core/Popover.d.ts.map +1 -0
- package/dist/components/core/PriceRangePicker.d.ts.map +1 -1
- package/dist/components/core/ProgressBar.d.ts.map +1 -1
- package/dist/components/core/Radio.d.ts.map +1 -1
- package/dist/components/core/Rate.d.ts.map +1 -1
- package/dist/components/core/Select.d.ts.map +1 -1
- package/dist/components/core/Skeleton.d.ts.map +1 -1
- package/dist/components/core/Slider.d.ts +4 -0
- package/dist/components/core/Slider.d.ts.map +1 -0
- package/dist/components/core/SpeechToText.d.ts.map +1 -1
- package/dist/components/core/Switch.d.ts.map +1 -1
- package/dist/components/core/Table/ActionMenu.d.ts.map +1 -1
- package/dist/components/core/Table/ColumnMenu.d.ts +2 -1
- package/dist/components/core/Table/ColumnMenu.d.ts.map +1 -1
- package/dist/components/core/Table/MobileCard.d.ts +2 -2
- package/dist/components/core/Table/MobileCard.d.ts.map +1 -1
- package/dist/components/core/Table/Table.d.ts.map +1 -1
- package/dist/components/core/Table/TableRow.d.ts +4 -2
- package/dist/components/core/Table/TableRow.d.ts.map +1 -1
- package/dist/components/core/Tabs.d.ts.map +1 -1
- package/dist/components/core/Textarea.d.ts +4 -0
- package/dist/components/core/Textarea.d.ts.map +1 -0
- package/dist/components/core/ThreeDotPopover.d.ts.map +1 -1
- package/dist/components/core/Tooltip.d.ts.map +1 -1
- package/dist/components/feedback/Dialog.d.ts.map +1 -1
- package/dist/components/feedback/Drawer.d.ts +4 -0
- package/dist/components/feedback/Drawer.d.ts.map +1 -0
- package/dist/components/feedback/Toast.d.ts +14 -5
- package/dist/components/feedback/Toast.d.ts.map +1 -1
- package/dist/components/feedback/Tour.d.ts +4 -0
- package/dist/components/feedback/Tour.d.ts.map +1 -0
- package/dist/components/feedback/TourSpotlight.d.ts +9 -0
- package/dist/components/feedback/TourSpotlight.d.ts.map +1 -0
- package/dist/components/navigation/Breadcrumbs.d.ts.map +1 -1
- package/dist/components/navigation/FootNav.d.ts.map +1 -1
- package/dist/components/navigation/Navbar.d.ts.map +1 -1
- package/dist/components/navigation/Sidebar.d.ts +8 -2
- package/dist/components/navigation/Sidebar.d.ts.map +1 -1
- package/dist/components/utility/Badge.d.ts.map +1 -1
- package/dist/components/utility/FileUpload.d.ts.map +1 -1
- package/dist/components/utility/Sortable.d.ts +4 -0
- package/dist/components/utility/Sortable.d.ts.map +1 -0
- package/dist/esm/_vendor/object-assign/index.js +99 -0
- package/dist/esm/_vendor/prop-types/_vendor/react-is/cjs/react-is.development.js +190 -0
- package/dist/esm/_vendor/prop-types/_vendor/react-is/cjs/react-is.production.min.js +26 -0
- package/dist/esm/_vendor/prop-types/_vendor/react-is/index.js +19 -0
- package/dist/esm/_vendor/prop-types/checkPropTypes.js +115 -0
- package/dist/esm/_vendor/prop-types/factoryWithThrowingShims.js +74 -0
- package/dist/esm/_vendor/prop-types/factoryWithTypeCheckers.js +625 -0
- package/dist/esm/_vendor/prop-types/index.js +30 -0
- package/dist/esm/_vendor/prop-types/lib/ReactPropTypesSecret.js +21 -0
- package/dist/esm/_vendor/prop-types/lib/has.js +11 -0
- package/dist/esm/_virtual/_commonjsHelpers.js +5 -0
- package/dist/esm/_virtual/_rollupPluginBabelHelpers.js +329 -0
- package/dist/esm/_virtual/index.js +3 -0
- package/dist/esm/_virtual/index2.js +3 -0
- package/dist/esm/_virtual/react-is.development.js +3 -0
- package/dist/esm/_virtual/react-is.production.min.js +3 -0
- package/dist/esm/components/blocks/AppShell.js +205 -0
- package/dist/esm/components/blocks/ConfirmDialog.js +57 -0
- package/dist/esm/components/blocks/EmptyState.js +44 -0
- package/dist/esm/components/blocks/ErrorState.js +53 -0
- package/dist/esm/components/blocks/LoadingState.js +134 -0
- package/dist/esm/components/blocks/PageHeader.js +51 -0
- package/dist/esm/components/blocks/StatCard.js +79 -0
- package/dist/esm/components/blocks/StatusPill.js +55 -0
- package/dist/esm/components/core/Accordion.js +260 -0
- package/dist/esm/components/core/Button.js +59 -0
- package/dist/esm/components/core/Checkbox.js +188 -0
- package/dist/esm/components/core/ColorPicker.js +348 -0
- package/dist/esm/components/core/DatePicker.js +436 -0
- package/dist/esm/components/core/DateRangePicker.js +494 -0
- package/dist/esm/components/core/Form.js +522 -0
- package/dist/esm/components/core/Input.js +179 -0
- package/dist/esm/components/core/Loader.js +141 -0
- package/dist/esm/components/core/LocationPicker.js +161 -0
- package/dist/esm/components/core/Popover.js +171 -0
- package/dist/esm/components/core/PriceRangePicker.js +376 -0
- package/dist/esm/components/core/ProgressBar.js +152 -0
- package/dist/esm/components/core/Radio.js +156 -0
- package/dist/esm/components/core/Rate.js +197 -0
- package/dist/esm/components/core/RoundedTag.js +118 -0
- package/dist/esm/components/core/Select.js +857 -0
- package/dist/esm/components/core/Skeleton.js +100 -0
- package/dist/esm/components/core/Slider.js +134 -0
- package/dist/esm/components/core/SpeechToText.js +226 -0
- package/dist/esm/components/core/Switch.js +207 -0
- package/dist/esm/components/core/Table/ActionMenu.js +251 -0
- package/dist/esm/components/core/Table/ColumnMenu.js +55 -0
- package/dist/esm/components/core/Table/FieldInput.js +157 -0
- package/dist/esm/components/core/Table/MobileCard.js +187 -0
- package/dist/esm/components/core/Table/MobileFilters.js +72 -0
- package/dist/esm/components/core/Table/Pagination.js +157 -0
- package/dist/esm/components/core/Table/Table.js +1533 -0
- package/dist/esm/components/core/Table/TableRow.js +254 -0
- package/dist/esm/components/core/Table/constants.js +35 -0
- package/dist/esm/components/core/Table/helpers.js +124 -0
- package/dist/esm/components/core/Table/useClickOutside.js +26 -0
- package/dist/esm/components/core/Tabs.js +289 -0
- package/dist/esm/components/core/TextToSpeech.js +52 -0
- package/dist/esm/components/core/Textarea.js +125 -0
- package/dist/esm/components/core/ThreeDotPopover.js +160 -0
- package/dist/esm/components/core/Tooltip.js +372 -0
- package/dist/esm/components/feedback/Alert.js +96 -0
- package/dist/esm/components/feedback/Dialog.js +200 -0
- package/dist/esm/components/feedback/Drawer.js +171 -0
- package/dist/esm/components/feedback/Toast.js +362 -0
- package/dist/esm/components/feedback/Tour.js +214 -0
- package/dist/esm/components/feedback/TourSpotlight.js +71 -0
- package/dist/esm/components/navigation/Breadcrumbs.js +75 -0
- package/dist/esm/components/navigation/Dropdown.js +53 -0
- package/dist/esm/components/navigation/FootNav.js +51 -0
- package/dist/esm/components/navigation/Navbar.js +437 -0
- package/dist/esm/components/navigation/Sidebar.js +567 -0
- package/dist/esm/components/utility/Avatar.js +89 -0
- package/dist/esm/components/utility/Badge.js +47 -0
- package/dist/esm/components/utility/Card.js +85 -0
- package/dist/esm/components/utility/Carousel.js +97 -0
- package/dist/esm/components/utility/Condition.js +9 -0
- package/dist/esm/components/utility/FileUpload.js +177 -0
- package/dist/esm/components/utility/Pagination.js +111 -0
- package/dist/esm/components/utility/Sortable.js +190 -0
- package/dist/esm/components/utility/Stepper.js +101 -0
- package/dist/esm/hooks/useApi.js +169 -0
- package/dist/esm/hooks/useControllableState.js +32 -0
- package/dist/esm/hooks/useFocusTrap.js +85 -0
- package/dist/esm/hooks/useLatestRef.js +20 -0
- package/dist/esm/hooks/useMixins.js +100 -0
- package/dist/esm/hooks/useScrollLock.js +26 -0
- package/dist/esm/hooks/useSliderValues.js +135 -0
- package/dist/esm/hooks/useSortable.js +188 -0
- package/dist/esm/hooks/useTheme.js +53 -0
- package/dist/esm/hooks/useTourTarget.js +92 -0
- package/dist/esm/index.js +65 -0
- package/dist/esm/store/index.js +26 -0
- package/dist/esm/store/store.js +107 -0
- package/dist/esm/store/storeSlice.js +45 -0
- package/dist/esm/utils/cn.js +11 -0
- package/dist/esm/utils/emitter.js +169 -0
- package/dist/esm/utils/helpers.js +161 -0
- package/dist/esm/utils/position.js +134 -0
- package/dist/hooks/useApi.d.ts +2 -1
- package/dist/hooks/useApi.d.ts.map +1 -1
- package/dist/hooks/useControllableState.d.ts +11 -0
- package/dist/hooks/useControllableState.d.ts.map +1 -0
- package/dist/hooks/useFocusTrap.d.ts +15 -0
- package/dist/hooks/useFocusTrap.d.ts.map +1 -0
- package/dist/hooks/useLatestRef.d.ts +8 -0
- package/dist/hooks/useLatestRef.d.ts.map +1 -0
- package/dist/hooks/useMixins.d.ts.map +1 -1
- package/dist/hooks/useScrollLock.d.ts +2 -0
- package/dist/hooks/useScrollLock.d.ts.map +1 -0
- package/dist/hooks/useSliderValues.d.ts +43 -0
- package/dist/hooks/useSliderValues.d.ts.map +1 -0
- package/dist/hooks/useSortable.d.ts +32 -0
- package/dist/hooks/useSortable.d.ts.map +1 -0
- package/dist/hooks/useTheme.d.ts.map +1 -1
- package/dist/hooks/useTourTarget.d.ts +15 -0
- package/dist/hooks/useTourTarget.d.ts.map +1 -0
- package/dist/index.css +1 -1
- package/dist/index.d.ts +8 -2
- package/dist/index.esm.css +1 -1
- package/dist/index.esm.js +4800 -2212
- package/dist/index.js +4805 -2210
- package/dist/types/index.d.ts +193 -5
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/position.d.ts +30 -0
- package/dist/utils/position.d.ts.map +1 -0
- package/doc/README.md +7 -1
- package/mcp/catalog.snapshot.json +911 -212
- package/package.json +14 -2
|
@@ -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 };
|