@homlista-devs/ui 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +295 -0
- package/dist/design-system.cjs.js +83 -0
- package/dist/design-system.cjs.js.map +1 -0
- package/dist/design-system.es.js +4538 -0
- package/dist/design-system.es.js.map +1 -0
- package/dist/vite.svg +1 -0
- package/package.json +122 -0
package/README.md
ADDED
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# 🏡 HomLista Design System
|
|
4
|
+
|
|
5
|
+
**A world-class, production-ready design system for modern React applications**
|
|
6
|
+
|
|
7
|
+
[](https://www.npmjs.com/package/@homlista/ui)
|
|
8
|
+
[](https://opensource.org/licenses/MIT)
|
|
9
|
+
[](https://www.typescriptlang.org/)
|
|
10
|
+
[](https://github.com/team-homlista/ui)
|
|
11
|
+
[](https://github.com/team-homlista/ui)
|
|
12
|
+
[](https://github.com/team-homlista/ui)
|
|
13
|
+
|
|
14
|
+
[Documentation](https://team-homlista.github.io/ui) • [Storybook](https://team-homlista.github.io/ui/storybook) • [NPM](https://www.npmjs.com/package/@homlista/ui) • [GitHub](https://github.com/team-homlista/ui)
|
|
15
|
+
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## ✨ Features
|
|
21
|
+
|
|
22
|
+
<table>
|
|
23
|
+
<tr>
|
|
24
|
+
<td width="50%">
|
|
25
|
+
|
|
26
|
+
### 🎨 **Theming**
|
|
27
|
+
- 4 built-in themes (light, dark, corporate, minimal)
|
|
28
|
+
- CSS custom properties for easy customization
|
|
29
|
+
- Dynamic theme switching
|
|
30
|
+
- Full Tailwind CSS v4 integration
|
|
31
|
+
|
|
32
|
+
### 🧩 **Architecture**
|
|
33
|
+
- Feature-Sliced Design principles
|
|
34
|
+
- Clean, maintainable codebase
|
|
35
|
+
- Effector for state management
|
|
36
|
+
- Tree-shakeable exports
|
|
37
|
+
|
|
38
|
+
</td>
|
|
39
|
+
<td width="50%">
|
|
40
|
+
|
|
41
|
+
### ♿ **Accessibility**
|
|
42
|
+
- WCAG 2.1 AA compliant
|
|
43
|
+
- Keyboard navigation support
|
|
44
|
+
- Screen reader compatible
|
|
45
|
+
- Focus management
|
|
46
|
+
|
|
47
|
+
### 🚀 **Developer Experience**
|
|
48
|
+
- Full TypeScript support
|
|
49
|
+
- Comprehensive Storybook docs
|
|
50
|
+
- 43 automated tests
|
|
51
|
+
- ESM + CJS support
|
|
52
|
+
|
|
53
|
+
</td>
|
|
54
|
+
</tr>
|
|
55
|
+
</table>
|
|
56
|
+
|
|
57
|
+
## Installation
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
npm install @homlista/ui
|
|
61
|
+
# or
|
|
62
|
+
yarn add @homlista/ui
|
|
63
|
+
# or
|
|
64
|
+
pnpm add @homlista/ui
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Quick Start
|
|
68
|
+
|
|
69
|
+
### 1. Import the CSS
|
|
70
|
+
|
|
71
|
+
First, import the design system styles in your application entry point:
|
|
72
|
+
|
|
73
|
+
```tsx
|
|
74
|
+
// In your main.tsx or App.tsx
|
|
75
|
+
import '@homlista/ui/styles.css';
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### 2. Use Components
|
|
79
|
+
|
|
80
|
+
```tsx
|
|
81
|
+
import { Button, ThemeProvider } from '@homlista/ui';
|
|
82
|
+
|
|
83
|
+
function App() {
|
|
84
|
+
return (
|
|
85
|
+
<ThemeProvider>
|
|
86
|
+
<Button variant="default">Hello World</Button>
|
|
87
|
+
</ThemeProvider>
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**Note**: The `ThemeProvider` is optional. If you don't need dynamic theme switching, you can use components directly.
|
|
93
|
+
|
|
94
|
+
## Theme Customization
|
|
95
|
+
|
|
96
|
+
### Using CSS Custom Properties (Recommended)
|
|
97
|
+
|
|
98
|
+
Your design system uses CSS custom properties for theming. Simply override the CSS variables in your application:
|
|
99
|
+
|
|
100
|
+
```css
|
|
101
|
+
/* Light theme (default) */
|
|
102
|
+
:root {
|
|
103
|
+
--background: 0 0% 100%;
|
|
104
|
+
--foreground: 222.2 84% 4.9%;
|
|
105
|
+
--primary: 221.2 83.2% 53.3%;
|
|
106
|
+
/* ... other variables */
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/* Dark theme */
|
|
110
|
+
.dark {
|
|
111
|
+
--background: 222.2 84% 4.9%;
|
|
112
|
+
--foreground: 210 40% 98%;
|
|
113
|
+
--primary: 217.2 91.2% 59.8%;
|
|
114
|
+
/* ... other variables */
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Dynamic Theme Switching
|
|
119
|
+
|
|
120
|
+
```tsx
|
|
121
|
+
// Toggle dark mode
|
|
122
|
+
const toggleTheme = () => {
|
|
123
|
+
document.documentElement.classList.toggle('dark');
|
|
124
|
+
};
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Components
|
|
128
|
+
|
|
129
|
+
### Button
|
|
130
|
+
|
|
131
|
+
```tsx
|
|
132
|
+
import { Button } from '@homlista:ui/design-system';
|
|
133
|
+
|
|
134
|
+
<Button variant="primary" size="md">
|
|
135
|
+
Click me
|
|
136
|
+
</Button>
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
#### Button Props
|
|
140
|
+
|
|
141
|
+
| Prop | Type | Default | Description |
|
|
142
|
+
|------|------|---------|-------------|
|
|
143
|
+
| `variant` | `'primary' \| 'secondary' \| 'success' \| 'warning' \| 'error' \| 'info'` | `'primary'` | Visual style variant |
|
|
144
|
+
| `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | Size of the button |
|
|
145
|
+
| `children` | `ReactNode` | - | Button content |
|
|
146
|
+
| `disabled` | `boolean` | `false` | Whether the button is disabled |
|
|
147
|
+
|
|
148
|
+
### PropertyCard
|
|
149
|
+
|
|
150
|
+
```tsx
|
|
151
|
+
import { PropertyCard } from '@homlista/ui';
|
|
152
|
+
|
|
153
|
+
const property = {
|
|
154
|
+
id: '1',
|
|
155
|
+
title: 'Casa de lujo en Cancún',
|
|
156
|
+
price: { amount: 8500000, currency: 'MXN' },
|
|
157
|
+
location: { city: 'Cancún', state: 'Quintana Roo' },
|
|
158
|
+
coordinates: { lat: 21.1619, lng: -86.8515 },
|
|
159
|
+
images: ['/path/to/image1.jpg', '/path/to/image2.jpg'],
|
|
160
|
+
transactionTypes: [{ type: 'Venta', variant: 'primary' }],
|
|
161
|
+
features: { bedrooms: 4, bathrooms: 3, parking: 2, area: 280 },
|
|
162
|
+
amenities: ['alberca', 'jardín', 'terraza'],
|
|
163
|
+
href: '/properties/1',
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
<PropertyCard
|
|
167
|
+
property={property}
|
|
168
|
+
onLike={(id, liked) => console.log(`Property ${id} ${liked ? 'liked' : 'unliked'}`)}
|
|
169
|
+
onImageClick={(index, id) => console.log(`Image ${index} clicked for ${id}`)}
|
|
170
|
+
/>
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
#### PropertyCard Props
|
|
174
|
+
|
|
175
|
+
| Prop | Type | Default | Description |
|
|
176
|
+
|------|------|---------|-------------|
|
|
177
|
+
| `property` | `PropertyCardData` | - | Property data object |
|
|
178
|
+
| `className` | `string` | - | Additional CSS classes |
|
|
179
|
+
| `onLike` | `(propertyId: string, isLiked: boolean) => void` | - | Like button click handler |
|
|
180
|
+
| `onImageClick` | `(imageIndex: number, propertyId: string) => void` | - | Image click handler |
|
|
181
|
+
| `showLikeButton` | `boolean` | `true` | Whether to show the like button |
|
|
182
|
+
| `showNavigation` | `boolean` | `true` | Whether to show image navigation |
|
|
183
|
+
| `imageAspectRatio` | `'4/3' \| '16/9' \| '1/1'` | `'4/3'` | Aspect ratio of property images |
|
|
184
|
+
|
|
185
|
+
#### PropertyCardData Type
|
|
186
|
+
|
|
187
|
+
```typescript
|
|
188
|
+
interface PropertyCardData {
|
|
189
|
+
id: string;
|
|
190
|
+
title: string;
|
|
191
|
+
price: PropertyPrice;
|
|
192
|
+
location: PropertyLocation;
|
|
193
|
+
coordinates: PropertyCoordinates;
|
|
194
|
+
images: string[];
|
|
195
|
+
transactionTypes: PropertyTransactionType[];
|
|
196
|
+
features: PropertyFeatures;
|
|
197
|
+
amenities: string[];
|
|
198
|
+
href?: string;
|
|
199
|
+
}
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## Development
|
|
203
|
+
|
|
204
|
+
### Setup
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
npm install
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### Development Server
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
npm run dev
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Storybook
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
npm run storybook
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### Building the Library
|
|
223
|
+
|
|
224
|
+
```bash
|
|
225
|
+
npm run build:lib
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Testing
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
npm test
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
## Architecture
|
|
235
|
+
|
|
236
|
+
This design system follows the **Feature-Sliced Design** architecture:
|
|
237
|
+
|
|
238
|
+
```
|
|
239
|
+
src/
|
|
240
|
+
├── features/ # Feature modules
|
|
241
|
+
│ ├── button/ # Button feature
|
|
242
|
+
│ ├── card/ # Card components
|
|
243
|
+
│ ├── modal/ # Modal components
|
|
244
|
+
│ ├── text/ # Text components
|
|
245
|
+
│ ├── theme/ # Theme management (optional)
|
|
246
|
+
│ └── property-card/ # Property-specific components
|
|
247
|
+
├── shared/ # Shared code
|
|
248
|
+
│ ├── lib/ # Shared utilities (cn, design-system.ts)
|
|
249
|
+
│ ├── types/ # TypeScript types
|
|
250
|
+
│ └── config/ # Configuration & tokens
|
|
251
|
+
├── entities/ # Business entities
|
|
252
|
+
├── widgets/ # Composite components
|
|
253
|
+
├── pages/ # Page components
|
|
254
|
+
└── lib/ # Application libraries
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
## Design Tokens
|
|
258
|
+
|
|
259
|
+
The design system uses CSS custom properties for theming. All components automatically adapt to theme changes through these variables:
|
|
260
|
+
|
|
261
|
+
```css
|
|
262
|
+
/* Available CSS Custom Properties */
|
|
263
|
+
--background: 0 0% 100%;
|
|
264
|
+
--foreground: 222.2 84% 4.9%;
|
|
265
|
+
--primary: 221.2 83.2% 53.3%;
|
|
266
|
+
--secondary: 210 40% 96%;
|
|
267
|
+
--success: 142.1 70.6% 45.3%;
|
|
268
|
+
--warning: 38 92% 50.2%;
|
|
269
|
+
--error: 0 84.2% 60.2%;
|
|
270
|
+
--info: 199.2 89.1% 50.2%;
|
|
271
|
+
--border: 214.3 31.8% 91.4%;
|
|
272
|
+
--radius: 0.5rem;
|
|
273
|
+
/* ... and many more */
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### Token Categories
|
|
277
|
+
|
|
278
|
+
- **Colors**: Brand, semantic, and neutral color palettes
|
|
279
|
+
- **Typography**: Font families, sizes, weights, and spacing
|
|
280
|
+
- **Spacing**: Consistent spacing scale (0.25rem increments)
|
|
281
|
+
- **Shadows**: Elevation system for depth
|
|
282
|
+
- **Border Radius**: Consistent corner rounding
|
|
283
|
+
- **Breakpoints**: Responsive design breakpoints
|
|
284
|
+
|
|
285
|
+
## Contributing
|
|
286
|
+
|
|
287
|
+
1. Follow the existing code style and architecture patterns
|
|
288
|
+
2. Add Storybook stories for new components
|
|
289
|
+
3. Write tests for new functionality
|
|
290
|
+
4. Update documentation as needed
|
|
291
|
+
5. Ensure TypeScript types are properly exported
|
|
292
|
+
|
|
293
|
+
## License
|
|
294
|
+
|
|
295
|
+
MIT
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const A=require("react"),gr=require("effector-react"),be=require("effector");function hr(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:()=>e[r]})}}return t.default=e,Object.freeze(t)}const M=hr(A);var ge={exports:{}},ue={};/**
|
|
2
|
+
* @license React
|
|
3
|
+
* react-jsx-runtime.production.js
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
6
|
+
*
|
|
7
|
+
* This source code is licensed under the MIT license found in the
|
|
8
|
+
* LICENSE file in the root directory of this source tree.
|
|
9
|
+
*/var Se;function xr(){if(Se)return ue;Se=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function r(o,n,i){var l=null;if(i!==void 0&&(l=""+i),n.key!==void 0&&(l=""+n.key),"key"in n){i={};for(var c in n)c!=="key"&&(i[c]=n[c])}else i=n;return n=i.ref,{$$typeof:e,type:o,key:l,ref:n!==void 0?n:null,props:i}}return ue.Fragment=t,ue.jsx=r,ue.jsxs=r,ue}var me={};/**
|
|
10
|
+
* @license React
|
|
11
|
+
* react-jsx-runtime.development.js
|
|
12
|
+
*
|
|
13
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
14
|
+
*
|
|
15
|
+
* This source code is licensed under the MIT license found in the
|
|
16
|
+
* LICENSE file in the root directory of this source tree.
|
|
17
|
+
*/var Te;function br(){return Te||(Te=1,process.env.NODE_ENV!=="production"&&(function(){function e(s){if(s==null)return null;if(typeof s=="function")return s.$$typeof===te?null:s.displayName||s.name||null;if(typeof s=="string")return s;switch(s){case P:return"Fragment";case Y:return"Profiler";case O:return"StrictMode";case $:return"Suspense";case U:return"SuspenseList";case re:return"Activity"}if(typeof s=="object")switch(typeof s.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),s.$$typeof){case E:return"Portal";case V:return s.displayName||"Context";case W:return(s._context.displayName||"Context")+".Consumer";case L:var h=s.render;return s=s.displayName,s||(s=h.displayName||h.name||"",s=s!==""?"ForwardRef("+s+")":"ForwardRef"),s;case g:return h=s.displayName||null,h!==null?h:e(s.type)||"Memo";case z:h=s._payload,s=s._init;try{return e(s(h))}catch{}}return null}function t(s){return""+s}function r(s){try{t(s);var h=!1}catch{h=!0}if(h){h=console;var b=h.error,j=typeof Symbol=="function"&&Symbol.toStringTag&&s[Symbol.toStringTag]||s.constructor.name||"Object";return b.call(h,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",j),t(s)}}function o(s){if(s===P)return"<>";if(typeof s=="object"&&s!==null&&s.$$typeof===z)return"<...>";try{var h=e(s);return h?"<"+h+">":"<...>"}catch{return"<...>"}}function n(){var s=F.A;return s===null?null:s.getOwner()}function i(){return Error("react-stack-top-frame")}function l(s){if(G.call(s,"key")){var h=Object.getOwnPropertyDescriptor(s,"key").get;if(h&&h.isReactWarning)return!1}return s.key!==void 0}function c(s,h){function b(){k||(k=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",h))}b.isReactWarning=!0,Object.defineProperty(s,"key",{get:b,configurable:!0})}function d(){var s=e(this.type);return R[s]||(R[s]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),s=this.props.ref,s!==void 0?s:null}function p(s,h,b,j,D,oe){var v=b.ref;return s={$$typeof:N,type:s,key:h,props:b,_owner:j},(v!==void 0?v:null)!==null?Object.defineProperty(s,"ref",{enumerable:!1,get:d}):Object.defineProperty(s,"ref",{enumerable:!1,value:null}),s._store={},Object.defineProperty(s._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(s,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(s,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:D}),Object.defineProperty(s,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:oe}),Object.freeze&&(Object.freeze(s.props),Object.freeze(s)),s}function y(s,h,b,j,D,oe){var v=h.children;if(v!==void 0)if(j)if(Z(v)){for(j=0;j<v.length;j++)C(v[j]);Object.freeze&&Object.freeze(v)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else C(v);if(G.call(h,"key")){v=e(s);var B=Object.keys(h).filter(function(ne){return ne!=="key"});j=0<B.length?"{key: someKey, "+B.join(": ..., ")+": ...}":"{key: someKey}",de[v+j]||(B=0<B.length?"{"+B.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
|
|
18
|
+
let props = %s;
|
|
19
|
+
<%s {...props} />
|
|
20
|
+
React keys must be passed directly to JSX without using spread:
|
|
21
|
+
let props = %s;
|
|
22
|
+
<%s key={someKey} {...props} />`,j,v,B,v),de[v+j]=!0)}if(v=null,b!==void 0&&(r(b),v=""+b),l(h)&&(r(h.key),v=""+h.key),"key"in h){b={};for(var q in h)q!=="key"&&(b[q]=h[q])}else b=h;return v&&c(b,typeof s=="function"?s.displayName||s.name||"Unknown":s),p(s,v,b,n(),D,oe)}function C(s){S(s)?s._store&&(s._store.validated=1):typeof s=="object"&&s!==null&&s.$$typeof===z&&(s._payload.status==="fulfilled"?S(s._payload.value)&&s._payload.value._store&&(s._payload.value._store.validated=1):s._store&&(s._store.validated=1))}function S(s){return typeof s=="object"&&s!==null&&s.$$typeof===N}var _=A,N=Symbol.for("react.transitional.element"),E=Symbol.for("react.portal"),P=Symbol.for("react.fragment"),O=Symbol.for("react.strict_mode"),Y=Symbol.for("react.profiler"),W=Symbol.for("react.consumer"),V=Symbol.for("react.context"),L=Symbol.for("react.forward_ref"),$=Symbol.for("react.suspense"),U=Symbol.for("react.suspense_list"),g=Symbol.for("react.memo"),z=Symbol.for("react.lazy"),re=Symbol.for("react.activity"),te=Symbol.for("react.client.reference"),F=_.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,G=Object.prototype.hasOwnProperty,Z=Array.isArray,I=console.createTask?console.createTask:function(){return null};_={react_stack_bottom_frame:function(s){return s()}};var k,R={},f=_.react_stack_bottom_frame.bind(_,i)(),ce=I(o(i)),de={};me.Fragment=P,me.jsx=function(s,h,b){var j=1e4>F.recentlyCreatedOwnerStacks++;return y(s,h,b,!1,j?Error("react-stack-top-frame"):f,j?I(o(s)):ce)},me.jsxs=function(s,h,b){var j=1e4>F.recentlyCreatedOwnerStacks++;return y(s,h,b,!0,j?Error("react-stack-top-frame"):f,j?I(o(s)):ce)}})()),me}var _e;function vr(){return _e||(_e=1,process.env.NODE_ENV==="production"?ge.exports=xr():ge.exports=br()),ge.exports}var a=vr();function Pe(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function yr(...e){return t=>{let r=!1;const o=e.map(n=>{const i=Pe(n,t);return!r&&typeof i=="function"&&(r=!0),i});if(r)return()=>{for(let n=0;n<o.length;n++){const i=o[n];typeof i=="function"?i():Pe(e[n],null)}}}}function wr(e){const t=jr(e),r=M.forwardRef((o,n)=>{const{children:i,...l}=o,c=M.Children.toArray(i),d=c.find(Nr);if(d){const p=d.props.children,y=c.map(C=>C===d?M.Children.count(p)>1?M.Children.only(null):M.isValidElement(p)?p.props.children:null:C);return a.jsx(t,{...l,ref:n,children:M.isValidElement(p)?M.cloneElement(p,void 0,y):null})}return a.jsx(t,{...l,ref:n,children:i})});return r.displayName=`${e}.Slot`,r}var kr=wr("Slot");function jr(e){const t=M.forwardRef((r,o)=>{const{children:n,...i}=r;if(M.isValidElement(n)){const l=Er(n),c=Rr(i,n.props);return n.type!==M.Fragment&&(c.ref=o?yr(o,l):l),M.cloneElement(n,c)}return M.Children.count(n)>1?M.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var Cr=Symbol("radix.slottable");function Nr(e){return M.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===Cr}function Rr(e,t){const r={...t};for(const o in t){const n=e[o],i=t[o];/^on[A-Z]/.test(o)?n&&i?r[o]=(...c)=>{const d=i(...c);return n(...c),d}:n&&(r[o]=n):o==="style"?r[o]={...n,...i}:o==="className"&&(r[o]=[n,i].filter(Boolean).join(" "))}return{...e,...r}}function Er(e){let t=Object.getOwnPropertyDescriptor(e.props,"ref")?.get,r=t&&"isReactWarning"in t&&t.isReactWarning;return r?e.ref:(t=Object.getOwnPropertyDescriptor(e,"ref")?.get,r=t&&"isReactWarning"in t&&t.isReactWarning,r?e.props.ref:e.props.ref||e.ref)}function Ve(e){var t,r,o="";if(typeof e=="string"||typeof e=="number")o+=e;else if(typeof e=="object")if(Array.isArray(e)){var n=e.length;for(t=0;t<n;t++)e[t]&&(r=Ve(e[t]))&&(o&&(o+=" "),o+=r)}else for(r in e)e[r]&&(o&&(o+=" "),o+=r);return o}function Fe(){for(var e,t,r=0,o="",n=arguments.length;r<n;r++)(e=arguments[r])&&(t=Ve(e))&&(o&&(o+=" "),o+=t);return o}const Ee="-",Sr=e=>{const t=_r(e),{conflictingClassGroups:r,conflictingClassGroupModifiers:o}=e;return{getClassGroupId:l=>{const c=l.split(Ee);return c[0]===""&&c.length!==1&&c.shift(),Ge(c,t)||Tr(l)},getConflictingClassGroupIds:(l,c)=>{const d=r[l]||[];return c&&o[l]?[...d,...o[l]]:d}}},Ge=(e,t)=>{if(e.length===0)return t.classGroupId;const r=e[0],o=t.nextPart.get(r),n=o?Ge(e.slice(1),o):void 0;if(n)return n;if(t.validators.length===0)return;const i=e.join(Ee);return t.validators.find(({validator:l})=>l(i))?.classGroupId},Ae=/^\[(.+)\]$/,Tr=e=>{if(Ae.test(e)){const t=Ae.exec(e)[1],r=t?.substring(0,t.indexOf(":"));if(r)return"arbitrary.."+r}},_r=e=>{const{theme:t,classGroups:r}=e,o={nextPart:new Map,validators:[]};for(const n in r)Ce(r[n],o,n,t);return o},Ce=(e,t,r,o)=>{e.forEach(n=>{if(typeof n=="string"){const i=n===""?t:ze(t,n);i.classGroupId=r;return}if(typeof n=="function"){if(Pr(n)){Ce(n(o),t,r,o);return}t.validators.push({validator:n,classGroupId:r});return}Object.entries(n).forEach(([i,l])=>{Ce(l,ze(t,i),r,o)})})},ze=(e,t)=>{let r=e;return t.split(Ee).forEach(o=>{r.nextPart.has(o)||r.nextPart.set(o,{nextPart:new Map,validators:[]}),r=r.nextPart.get(o)}),r},Pr=e=>e.isThemeGetter,Ar=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,r=new Map,o=new Map;const n=(i,l)=>{r.set(i,l),t++,t>e&&(t=0,o=r,r=new Map)};return{get(i){let l=r.get(i);if(l!==void 0)return l;if((l=o.get(i))!==void 0)return n(i,l),l},set(i,l){r.has(i)?r.set(i,l):n(i,l)}}},Ne="!",Re=":",zr=Re.length,Mr=e=>{const{prefix:t,experimentalParseClassName:r}=e;let o=n=>{const i=[];let l=0,c=0,d=0,p;for(let N=0;N<n.length;N++){let E=n[N];if(l===0&&c===0){if(E===Re){i.push(n.slice(d,N)),d=N+zr;continue}if(E==="/"){p=N;continue}}E==="["?l++:E==="]"?l--:E==="("?c++:E===")"&&c--}const y=i.length===0?n:n.substring(d),C=Ir(y),S=C!==y,_=p&&p>d?p-d:void 0;return{modifiers:i,hasImportantModifier:S,baseClassName:C,maybePostfixModifierPosition:_}};if(t){const n=t+Re,i=o;o=l=>l.startsWith(n)?i(l.substring(n.length)):{isExternal:!0,modifiers:[],hasImportantModifier:!1,baseClassName:l,maybePostfixModifierPosition:void 0}}if(r){const n=o;o=i=>r({className:i,parseClassName:n})}return o},Ir=e=>e.endsWith(Ne)?e.substring(0,e.length-1):e.startsWith(Ne)?e.substring(1):e,Or=e=>{const t=Object.fromEntries(e.orderSensitiveModifiers.map(o=>[o,!0]));return o=>{if(o.length<=1)return o;const n=[];let i=[];return o.forEach(l=>{l[0]==="["||t[l]?(n.push(...i.sort(),l),i=[]):i.push(l)}),n.push(...i.sort()),n}},Lr=e=>({cache:Ar(e.cacheSize),parseClassName:Mr(e),sortModifiers:Or(e),...Sr(e)}),$r=/\s+/,Vr=(e,t)=>{const{parseClassName:r,getClassGroupId:o,getConflictingClassGroupIds:n,sortModifiers:i}=t,l=[],c=e.trim().split($r);let d="";for(let p=c.length-1;p>=0;p-=1){const y=c[p],{isExternal:C,modifiers:S,hasImportantModifier:_,baseClassName:N,maybePostfixModifierPosition:E}=r(y);if(C){d=y+(d.length>0?" "+d:d);continue}let P=!!E,O=o(P?N.substring(0,E):N);if(!O){if(!P){d=y+(d.length>0?" "+d:d);continue}if(O=o(N),!O){d=y+(d.length>0?" "+d:d);continue}P=!1}const Y=i(S).join(":"),W=_?Y+Ne:Y,V=W+O;if(l.includes(V))continue;l.push(V);const L=n(O,P);for(let $=0;$<L.length;++$){const U=L[$];l.push(W+U)}d=y+(d.length>0?" "+d:d)}return d};function Fr(){let e=0,t,r,o="";for(;e<arguments.length;)(t=arguments[e++])&&(r=We(t))&&(o&&(o+=" "),o+=r);return o}const We=e=>{if(typeof e=="string")return e;let t,r="";for(let o=0;o<e.length;o++)e[o]&&(t=We(e[o]))&&(r&&(r+=" "),r+=t);return r};function Gr(e,...t){let r,o,n,i=l;function l(d){const p=t.reduce((y,C)=>C(y),e());return r=Lr(p),o=r.cache.get,n=r.cache.set,i=c,c(d)}function c(d){const p=o(d);if(p)return p;const y=Vr(d,r);return n(d,y),y}return function(){return i(Fr.apply(null,arguments))}}const T=e=>{const t=r=>r[e]||[];return t.isThemeGetter=!0,t},Ue=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,De=/^\((?:(\w[\w-]*):)?(.+)\)$/i,Wr=/^\d+\/\d+$/,Ur=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,Dr=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,Br=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,Hr=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,Yr=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,se=e=>Wr.test(e),x=e=>!!e&&!Number.isNaN(Number(e)),J=e=>!!e&&Number.isInteger(Number(e)),we=e=>e.endsWith("%")&&x(e.slice(0,-1)),H=e=>Ur.test(e),qr=()=>!0,Jr=e=>Dr.test(e)&&!Br.test(e),Be=()=>!1,Xr=e=>Hr.test(e),Zr=e=>Yr.test(e),Qr=e=>!u(e)&&!m(e),Kr=e=>ie(e,qe,Be),u=e=>Ue.test(e),Q=e=>ie(e,Je,Jr),ke=e=>ie(e,nt,x),Me=e=>ie(e,He,Be),et=e=>ie(e,Ye,Zr),he=e=>ie(e,Xe,Xr),m=e=>De.test(e),fe=e=>le(e,Je),rt=e=>le(e,st),Ie=e=>le(e,He),tt=e=>le(e,qe),ot=e=>le(e,Ye),xe=e=>le(e,Xe,!0),ie=(e,t,r)=>{const o=Ue.exec(e);return o?o[1]?t(o[1]):r(o[2]):!1},le=(e,t,r=!1)=>{const o=De.exec(e);return o?o[1]?t(o[1]):r:!1},He=e=>e==="position"||e==="percentage",Ye=e=>e==="image"||e==="url",qe=e=>e==="length"||e==="size"||e==="bg-size",Je=e=>e==="length",nt=e=>e==="number",st=e=>e==="family-name",Xe=e=>e==="shadow",at=()=>{const e=T("color"),t=T("font"),r=T("text"),o=T("font-weight"),n=T("tracking"),i=T("leading"),l=T("breakpoint"),c=T("container"),d=T("spacing"),p=T("radius"),y=T("shadow"),C=T("inset-shadow"),S=T("text-shadow"),_=T("drop-shadow"),N=T("blur"),E=T("perspective"),P=T("aspect"),O=T("ease"),Y=T("animate"),W=()=>["auto","avoid","all","avoid-page","page","left","right","column"],V=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],L=()=>[...V(),m,u],$=()=>["auto","hidden","clip","visible","scroll"],U=()=>["auto","contain","none"],g=()=>[m,u,d],z=()=>[se,"full","auto",...g()],re=()=>[J,"none","subgrid",m,u],te=()=>["auto",{span:["full",J,m,u]},J,m,u],F=()=>[J,"auto",m,u],G=()=>["auto","min","max","fr",m,u],Z=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],I=()=>["start","end","center","stretch","center-safe","end-safe"],k=()=>["auto",...g()],R=()=>[se,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...g()],f=()=>[e,m,u],ce=()=>[...V(),Ie,Me,{position:[m,u]}],de=()=>["no-repeat",{repeat:["","x","y","space","round"]}],s=()=>["auto","cover","contain",tt,Kr,{size:[m,u]}],h=()=>[we,fe,Q],b=()=>["","none","full",p,m,u],j=()=>["",x,fe,Q],D=()=>["solid","dashed","dotted","double"],oe=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],v=()=>[x,we,Ie,Me],B=()=>["","none",N,m,u],q=()=>["none",x,m,u],ne=()=>["none",x,m,u],ye=()=>[x,m,u],pe=()=>[se,"full",...g()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[H],breakpoint:[H],color:[qr],container:[H],"drop-shadow":[H],ease:["in","out","in-out"],font:[Qr],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[H],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[H],shadow:[H],spacing:["px",x],text:[H],"text-shadow":[H],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",se,u,m,P]}],container:["container"],columns:[{columns:[x,u,m,c]}],"break-after":[{"break-after":W()}],"break-before":[{"break-before":W()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:L()}],overflow:[{overflow:$()}],"overflow-x":[{"overflow-x":$()}],"overflow-y":[{"overflow-y":$()}],overscroll:[{overscroll:U()}],"overscroll-x":[{"overscroll-x":U()}],"overscroll-y":[{"overscroll-y":U()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:z()}],"inset-x":[{"inset-x":z()}],"inset-y":[{"inset-y":z()}],start:[{start:z()}],end:[{end:z()}],top:[{top:z()}],right:[{right:z()}],bottom:[{bottom:z()}],left:[{left:z()}],visibility:["visible","invisible","collapse"],z:[{z:[J,"auto",m,u]}],basis:[{basis:[se,"full","auto",c,...g()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[x,se,"auto","initial","none",u]}],grow:[{grow:["",x,m,u]}],shrink:[{shrink:["",x,m,u]}],order:[{order:[J,"first","last","none",m,u]}],"grid-cols":[{"grid-cols":re()}],"col-start-end":[{col:te()}],"col-start":[{"col-start":F()}],"col-end":[{"col-end":F()}],"grid-rows":[{"grid-rows":re()}],"row-start-end":[{row:te()}],"row-start":[{"row-start":F()}],"row-end":[{"row-end":F()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":G()}],"auto-rows":[{"auto-rows":G()}],gap:[{gap:g()}],"gap-x":[{"gap-x":g()}],"gap-y":[{"gap-y":g()}],"justify-content":[{justify:[...Z(),"normal"]}],"justify-items":[{"justify-items":[...I(),"normal"]}],"justify-self":[{"justify-self":["auto",...I()]}],"align-content":[{content:["normal",...Z()]}],"align-items":[{items:[...I(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...I(),{baseline:["","last"]}]}],"place-content":[{"place-content":Z()}],"place-items":[{"place-items":[...I(),"baseline"]}],"place-self":[{"place-self":["auto",...I()]}],p:[{p:g()}],px:[{px:g()}],py:[{py:g()}],ps:[{ps:g()}],pe:[{pe:g()}],pt:[{pt:g()}],pr:[{pr:g()}],pb:[{pb:g()}],pl:[{pl:g()}],m:[{m:k()}],mx:[{mx:k()}],my:[{my:k()}],ms:[{ms:k()}],me:[{me:k()}],mt:[{mt:k()}],mr:[{mr:k()}],mb:[{mb:k()}],ml:[{ml:k()}],"space-x":[{"space-x":g()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":g()}],"space-y-reverse":["space-y-reverse"],size:[{size:R()}],w:[{w:[c,"screen",...R()]}],"min-w":[{"min-w":[c,"screen","none",...R()]}],"max-w":[{"max-w":[c,"screen","none","prose",{screen:[l]},...R()]}],h:[{h:["screen","lh",...R()]}],"min-h":[{"min-h":["screen","lh","none",...R()]}],"max-h":[{"max-h":["screen","lh",...R()]}],"font-size":[{text:["base",r,fe,Q]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[o,m,ke]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",we,u]}],"font-family":[{font:[rt,u,t]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[n,m,u]}],"line-clamp":[{"line-clamp":[x,"none",m,ke]}],leading:[{leading:[i,...g()]}],"list-image":[{"list-image":["none",m,u]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",m,u]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:f()}],"text-color":[{text:f()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...D(),"wavy"]}],"text-decoration-thickness":[{decoration:[x,"from-font","auto",m,Q]}],"text-decoration-color":[{decoration:f()}],"underline-offset":[{"underline-offset":[x,"auto",m,u]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:g()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",m,u]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",m,u]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:ce()}],"bg-repeat":[{bg:de()}],"bg-size":[{bg:s()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},J,m,u],radial:["",m,u],conic:[J,m,u]},ot,et]}],"bg-color":[{bg:f()}],"gradient-from-pos":[{from:h()}],"gradient-via-pos":[{via:h()}],"gradient-to-pos":[{to:h()}],"gradient-from":[{from:f()}],"gradient-via":[{via:f()}],"gradient-to":[{to:f()}],rounded:[{rounded:b()}],"rounded-s":[{"rounded-s":b()}],"rounded-e":[{"rounded-e":b()}],"rounded-t":[{"rounded-t":b()}],"rounded-r":[{"rounded-r":b()}],"rounded-b":[{"rounded-b":b()}],"rounded-l":[{"rounded-l":b()}],"rounded-ss":[{"rounded-ss":b()}],"rounded-se":[{"rounded-se":b()}],"rounded-ee":[{"rounded-ee":b()}],"rounded-es":[{"rounded-es":b()}],"rounded-tl":[{"rounded-tl":b()}],"rounded-tr":[{"rounded-tr":b()}],"rounded-br":[{"rounded-br":b()}],"rounded-bl":[{"rounded-bl":b()}],"border-w":[{border:j()}],"border-w-x":[{"border-x":j()}],"border-w-y":[{"border-y":j()}],"border-w-s":[{"border-s":j()}],"border-w-e":[{"border-e":j()}],"border-w-t":[{"border-t":j()}],"border-w-r":[{"border-r":j()}],"border-w-b":[{"border-b":j()}],"border-w-l":[{"border-l":j()}],"divide-x":[{"divide-x":j()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":j()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...D(),"hidden","none"]}],"divide-style":[{divide:[...D(),"hidden","none"]}],"border-color":[{border:f()}],"border-color-x":[{"border-x":f()}],"border-color-y":[{"border-y":f()}],"border-color-s":[{"border-s":f()}],"border-color-e":[{"border-e":f()}],"border-color-t":[{"border-t":f()}],"border-color-r":[{"border-r":f()}],"border-color-b":[{"border-b":f()}],"border-color-l":[{"border-l":f()}],"divide-color":[{divide:f()}],"outline-style":[{outline:[...D(),"none","hidden"]}],"outline-offset":[{"outline-offset":[x,m,u]}],"outline-w":[{outline:["",x,fe,Q]}],"outline-color":[{outline:f()}],shadow:[{shadow:["","none",y,xe,he]}],"shadow-color":[{shadow:f()}],"inset-shadow":[{"inset-shadow":["none",C,xe,he]}],"inset-shadow-color":[{"inset-shadow":f()}],"ring-w":[{ring:j()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:f()}],"ring-offset-w":[{"ring-offset":[x,Q]}],"ring-offset-color":[{"ring-offset":f()}],"inset-ring-w":[{"inset-ring":j()}],"inset-ring-color":[{"inset-ring":f()}],"text-shadow":[{"text-shadow":["none",S,xe,he]}],"text-shadow-color":[{"text-shadow":f()}],opacity:[{opacity:[x,m,u]}],"mix-blend":[{"mix-blend":[...oe(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":oe()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[x]}],"mask-image-linear-from-pos":[{"mask-linear-from":v()}],"mask-image-linear-to-pos":[{"mask-linear-to":v()}],"mask-image-linear-from-color":[{"mask-linear-from":f()}],"mask-image-linear-to-color":[{"mask-linear-to":f()}],"mask-image-t-from-pos":[{"mask-t-from":v()}],"mask-image-t-to-pos":[{"mask-t-to":v()}],"mask-image-t-from-color":[{"mask-t-from":f()}],"mask-image-t-to-color":[{"mask-t-to":f()}],"mask-image-r-from-pos":[{"mask-r-from":v()}],"mask-image-r-to-pos":[{"mask-r-to":v()}],"mask-image-r-from-color":[{"mask-r-from":f()}],"mask-image-r-to-color":[{"mask-r-to":f()}],"mask-image-b-from-pos":[{"mask-b-from":v()}],"mask-image-b-to-pos":[{"mask-b-to":v()}],"mask-image-b-from-color":[{"mask-b-from":f()}],"mask-image-b-to-color":[{"mask-b-to":f()}],"mask-image-l-from-pos":[{"mask-l-from":v()}],"mask-image-l-to-pos":[{"mask-l-to":v()}],"mask-image-l-from-color":[{"mask-l-from":f()}],"mask-image-l-to-color":[{"mask-l-to":f()}],"mask-image-x-from-pos":[{"mask-x-from":v()}],"mask-image-x-to-pos":[{"mask-x-to":v()}],"mask-image-x-from-color":[{"mask-x-from":f()}],"mask-image-x-to-color":[{"mask-x-to":f()}],"mask-image-y-from-pos":[{"mask-y-from":v()}],"mask-image-y-to-pos":[{"mask-y-to":v()}],"mask-image-y-from-color":[{"mask-y-from":f()}],"mask-image-y-to-color":[{"mask-y-to":f()}],"mask-image-radial":[{"mask-radial":[m,u]}],"mask-image-radial-from-pos":[{"mask-radial-from":v()}],"mask-image-radial-to-pos":[{"mask-radial-to":v()}],"mask-image-radial-from-color":[{"mask-radial-from":f()}],"mask-image-radial-to-color":[{"mask-radial-to":f()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":V()}],"mask-image-conic-pos":[{"mask-conic":[x]}],"mask-image-conic-from-pos":[{"mask-conic-from":v()}],"mask-image-conic-to-pos":[{"mask-conic-to":v()}],"mask-image-conic-from-color":[{"mask-conic-from":f()}],"mask-image-conic-to-color":[{"mask-conic-to":f()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:ce()}],"mask-repeat":[{mask:de()}],"mask-size":[{mask:s()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",m,u]}],filter:[{filter:["","none",m,u]}],blur:[{blur:B()}],brightness:[{brightness:[x,m,u]}],contrast:[{contrast:[x,m,u]}],"drop-shadow":[{"drop-shadow":["","none",_,xe,he]}],"drop-shadow-color":[{"drop-shadow":f()}],grayscale:[{grayscale:["",x,m,u]}],"hue-rotate":[{"hue-rotate":[x,m,u]}],invert:[{invert:["",x,m,u]}],saturate:[{saturate:[x,m,u]}],sepia:[{sepia:["",x,m,u]}],"backdrop-filter":[{"backdrop-filter":["","none",m,u]}],"backdrop-blur":[{"backdrop-blur":B()}],"backdrop-brightness":[{"backdrop-brightness":[x,m,u]}],"backdrop-contrast":[{"backdrop-contrast":[x,m,u]}],"backdrop-grayscale":[{"backdrop-grayscale":["",x,m,u]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[x,m,u]}],"backdrop-invert":[{"backdrop-invert":["",x,m,u]}],"backdrop-opacity":[{"backdrop-opacity":[x,m,u]}],"backdrop-saturate":[{"backdrop-saturate":[x,m,u]}],"backdrop-sepia":[{"backdrop-sepia":["",x,m,u]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":g()}],"border-spacing-x":[{"border-spacing-x":g()}],"border-spacing-y":[{"border-spacing-y":g()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",m,u]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[x,"initial",m,u]}],ease:[{ease:["linear","initial",O,m,u]}],delay:[{delay:[x,m,u]}],animate:[{animate:["none",Y,m,u]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[E,m,u]}],"perspective-origin":[{"perspective-origin":L()}],rotate:[{rotate:q()}],"rotate-x":[{"rotate-x":q()}],"rotate-y":[{"rotate-y":q()}],"rotate-z":[{"rotate-z":q()}],scale:[{scale:ne()}],"scale-x":[{"scale-x":ne()}],"scale-y":[{"scale-y":ne()}],"scale-z":[{"scale-z":ne()}],"scale-3d":["scale-3d"],skew:[{skew:ye()}],"skew-x":[{"skew-x":ye()}],"skew-y":[{"skew-y":ye()}],transform:[{transform:[m,u,"","none","gpu","cpu"]}],"transform-origin":[{origin:L()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:pe()}],"translate-x":[{"translate-x":pe()}],"translate-y":[{"translate-y":pe()}],"translate-z":[{"translate-z":pe()}],"translate-none":["translate-none"],accent:[{accent:f()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:f()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",m,u]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":g()}],"scroll-mx":[{"scroll-mx":g()}],"scroll-my":[{"scroll-my":g()}],"scroll-ms":[{"scroll-ms":g()}],"scroll-me":[{"scroll-me":g()}],"scroll-mt":[{"scroll-mt":g()}],"scroll-mr":[{"scroll-mr":g()}],"scroll-mb":[{"scroll-mb":g()}],"scroll-ml":[{"scroll-ml":g()}],"scroll-p":[{"scroll-p":g()}],"scroll-px":[{"scroll-px":g()}],"scroll-py":[{"scroll-py":g()}],"scroll-ps":[{"scroll-ps":g()}],"scroll-pe":[{"scroll-pe":g()}],"scroll-pt":[{"scroll-pt":g()}],"scroll-pr":[{"scroll-pr":g()}],"scroll-pb":[{"scroll-pb":g()}],"scroll-pl":[{"scroll-pl":g()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",m,u]}],fill:[{fill:["none",...f()]}],"stroke-w":[{stroke:[x,fe,Q,ke]}],stroke:[{stroke:["none",...f()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},it=Gr(at);function w(...e){return it(Fe(e))}const Oe=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,Le=Fe,lt=(e,t)=>r=>{var o;if(t?.variants==null)return Le(e,r?.class,r?.className);const{variants:n,defaultVariants:i}=t,l=Object.keys(n).map(p=>{const y=r?.[p],C=i?.[p];if(y===null)return null;const S=Oe(y)||Oe(C);return n[p][S]}),c=r&&Object.entries(r).reduce((p,y)=>{let[C,S]=y;return S===void 0||(p[C]=S),p},{}),d=t==null||(o=t.compoundVariants)===null||o===void 0?void 0:o.reduce((p,y)=>{let{class:C,className:S,..._}=y;return Object.entries(_).every(N=>{let[E,P]=N;return Array.isArray(P)?P.includes({...i,...c}[E]):{...i,...c}[E]===P})?[...p,C,S]:p},[]);return Le(e,l,d,r?.class,r?.className)},ct=lt("inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),ae=M.forwardRef(({className:e,variant:t,size:r,asChild:o=!1,disabled:n,...i},l)=>{const c=o?kr:"button";return a.jsx(c,{className:w(ct({variant:t,size:r,className:e})),ref:l,type:i.type||"button",disabled:n,"aria-disabled":n?"true":void 0,...i})});ae.displayName="Button";const dt=e=>{switch(e){case"h1":return"text-4xl font-bold leading-tight tracking-tight";case"h2":return"text-3xl font-bold leading-tight tracking-tight";case"h3":return"text-2xl font-semibold leading-tight tracking-normal";case"h4":return"text-xl font-semibold leading-snug tracking-normal";case"h5":return"text-lg font-medium leading-snug tracking-normal";case"h6":return"text-base font-medium leading-normal tracking-normal";case"body":return"text-base font-normal leading-normal";case"body-sm":return"text-sm font-normal leading-normal";case"body-lg":return"text-lg font-normal leading-relaxed";case"caption":return"text-xs font-normal leading-normal tracking-wide";case"label":return"text-sm font-medium leading-normal tracking-wide";default:return"text-base font-normal leading-normal"}},ut=e=>{switch(e){case"primary":return"text-foreground";case"secondary":return"text-muted-foreground";case"muted":return"text-muted-foreground";case"error":return"text-destructive";case"success":return"text-success";case"warning":return"text-warning";default:return"text-foreground"}},mt=e=>{switch(e){case"light":return"font-light";case"normal":return"font-normal";case"medium":return"font-medium";case"semibold":return"font-semibold";case"bold":return"font-bold";default:return""}},ft=e=>{switch(e){case"left":return"text-left";case"center":return"text-center";case"right":return"text-right";case"justify":return"text-justify";default:return"text-left"}},K=({variant:e="body",color:t="primary",weight:r,align:o="left",truncate:n=!1,children:i,className:l,as:c,...d})=>{const p=c||pt(e),y=w("m-0",dt(e),ut(t),mt(r),ft(o),n&&"truncate",l);return a.jsx(p,{className:y,...d,children:i})};function pt(e){switch(e){case"h1":return"h1";case"h2":return"h2";case"h3":return"h3";case"h4":return"h4";case"h5":return"h5";case"h6":return"h6";default:return"p"}}const gt=e=>{switch(e){case"sm":return"p-4";case"md":return"p-6";case"lg":return"p-8";default:return"p-0"}},ht=e=>{switch(e){case"sm":return"shadow-sm";case"md":return"shadow-md";case"lg":return"shadow-lg";default:return"shadow-none"}},xt=e=>{switch(e){case"sm":return"rounded-sm";case"md":return"rounded-md";case"lg":return"rounded-lg";default:return"rounded-none"}},Ze=({children:e,title:t,subtitle:r,className:o,padding:n="md",shadow:i="md",borderRadius:l="md",onClick:c})=>{const d=!!c,p=w("bg-card",gt(n),ht(i),xt(l),"transition-all duration-200 ease-in-out",d&&"cursor-pointer hover:-translate-y-0.5 hover:shadow-lg active:translate-y-0",o);return a.jsxs("div",{className:p,onClick:c,children:[(t||r)&&a.jsxs("div",{className:"mb-4",children:[t&&a.jsx("div",{className:"mb-2",children:a.jsx(K,{variant:"h3",children:t})}),r&&a.jsx("div",{className:"text-muted-foreground",children:a.jsx(K,{variant:"body-sm",color:"muted",children:r})})]}),a.jsx("div",{className:"flex-1",children:e})]})},bt=({children:e})=>a.jsx("div",{className:"mt-4 pt-4 border-t border-border",children:e}),vt=Object.assign(Ze,{Footer:bt}),yt=e=>{switch(e){case"sm":return"max-w-md";case"md":return"max-w-2xl";case"lg":return"max-w-4xl";case"xl":return"max-w-6xl";default:return"max-w-2xl"}},Qe=({isOpen:e,onClose:t,title:r,children:o,size:n="md",showCloseButton:i=!0,closeOnOverlayClick:l=!0,closeOnEscape:c=!0})=>{const d=A.useRef(null);if(A.useEffect(()=>{if(!e||!c)return;const N=E=>{E.key==="Escape"&&t()};return document.addEventListener("keydown",N),()=>document.removeEventListener("keydown",N)},[e,c,t]),A.useEffect(()=>(e?document.body.style.overflow="hidden":document.body.style.overflow="unset",()=>{document.body.style.overflow="unset"}),[e]),A.useEffect(()=>{e&&d.current&&d.current.focus()},[e]),!e)return null;const p=w("fixed inset-0 bg-black/50 flex items-center justify-center z-50 p-4"),y=w("bg-card rounded-lg shadow-xl w-full max-h-[90vh] overflow-hidden flex flex-col",yt(n)),C=w("p-6 border-b border-border flex items-center justify-between"),S=w("p-6 overflow-y-auto flex-1"),_=w("bg-none border-none text-xl cursor-pointer text-muted-foreground p-1 rounded-sm flex items-center justify-center hover:bg-accent hover:text-accent-foreground focus:outline-2 focus:outline-primary focus:outline-offset-2");return a.jsx("div",{className:p,onClick:l?t:void 0,children:a.jsxs("div",{ref:d,className:y,onClick:N=>N.stopPropagation(),tabIndex:-1,role:"dialog","aria-modal":"true","aria-labelledby":r?"modal-title":void 0,children:[(r||i)&&a.jsxs("div",{className:C,children:[r&&a.jsx(K,{variant:"h3",className:"text-foreground",children:r}),i&&a.jsx("button",{onClick:t,"aria-label":"Close modal",className:_,children:"×"})]}),a.jsx("div",{className:S,children:o})]})})},Ke=({children:e,actions:t,...r})=>a.jsxs(Qe,{...r,children:[a.jsx("div",{className:"p-6 overflow-y-auto flex-1",children:e}),t&&a.jsx("div",{className:"p-6 border-t border-border flex justify-end gap-3",children:t})]}),wt=({isOpen:e,onClose:t,onConfirm:r,title:o,message:n,confirmText:i="Confirm",cancelText:l="Cancel"})=>a.jsx(Ke,{isOpen:e,onClose:t,title:o,actions:a.jsxs(a.Fragment,{children:[a.jsx(ae,{variant:"secondary",onClick:t,children:l}),a.jsx(ae,{variant:"default",onClick:r,children:i})]}),children:a.jsx(K,{children:n})});/**
|
|
23
|
+
* @license lucide-react v0.547.0 - ISC
|
|
24
|
+
*
|
|
25
|
+
* This source code is licensed under the ISC license.
|
|
26
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
27
|
+
*/const kt=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),jt=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(t,r,o)=>o?o.toUpperCase():r.toLowerCase()),$e=e=>{const t=jt(e);return t.charAt(0).toUpperCase()+t.slice(1)},er=(...e)=>e.filter((t,r,o)=>!!t&&t.trim()!==""&&o.indexOf(t)===r).join(" ").trim(),Ct=e=>{for(const t in e)if(t.startsWith("aria-")||t==="role"||t==="title")return!0};/**
|
|
28
|
+
* @license lucide-react v0.547.0 - ISC
|
|
29
|
+
*
|
|
30
|
+
* This source code is licensed under the ISC license.
|
|
31
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
32
|
+
*/var Nt={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/**
|
|
33
|
+
* @license lucide-react v0.547.0 - ISC
|
|
34
|
+
*
|
|
35
|
+
* This source code is licensed under the ISC license.
|
|
36
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
37
|
+
*/const Rt=A.forwardRef(({color:e="currentColor",size:t=24,strokeWidth:r=2,absoluteStrokeWidth:o,className:n="",children:i,iconNode:l,...c},d)=>A.createElement("svg",{ref:d,...Nt,width:t,height:t,stroke:e,strokeWidth:o?Number(r)*24/Number(t):r,className:er("lucide",n),...!i&&!Ct(c)&&{"aria-hidden":"true"},...c},[...l.map(([p,y])=>A.createElement(p,y)),...Array.isArray(i)?i:[i]]));/**
|
|
38
|
+
* @license lucide-react v0.547.0 - ISC
|
|
39
|
+
*
|
|
40
|
+
* This source code is licensed under the ISC license.
|
|
41
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
42
|
+
*/const X=(e,t)=>{const r=A.forwardRef(({className:o,...n},i)=>A.createElement(Rt,{ref:i,iconNode:t,className:er(`lucide-${kt($e(e))}`,`lucide-${e}`,o),...n}));return r.displayName=$e(e),r};/**
|
|
43
|
+
* @license lucide-react v0.547.0 - ISC
|
|
44
|
+
*
|
|
45
|
+
* This source code is licensed under the ISC license.
|
|
46
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
47
|
+
*/const Et=[["path",{d:"M10 4 8 6",key:"1rru8s"}],["path",{d:"M17 19v2",key:"ts1sot"}],["path",{d:"M2 12h20",key:"9i4pu4"}],["path",{d:"M7 19v2",key:"12npes"}],["path",{d:"M9 5 7.621 3.621A2.121 2.121 0 0 0 4 5v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-5",key:"14ym8i"}]],St=X("bath",Et);/**
|
|
48
|
+
* @license lucide-react v0.547.0 - ISC
|
|
49
|
+
*
|
|
50
|
+
* This source code is licensed under the ISC license.
|
|
51
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
52
|
+
*/const Tt=[["path",{d:"M2 4v16",key:"vw9hq8"}],["path",{d:"M2 8h18a2 2 0 0 1 2 2v10",key:"1dgv2r"}],["path",{d:"M2 17h20",key:"18nfp3"}],["path",{d:"M6 8v9",key:"1yriud"}]],_t=X("bed",Tt);/**
|
|
53
|
+
* @license lucide-react v0.547.0 - ISC
|
|
54
|
+
*
|
|
55
|
+
* This source code is licensed under the ISC license.
|
|
56
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
57
|
+
*/const Pt=[["path",{d:"M19 17h2c.6 0 1-.4 1-1v-3c0-.9-.7-1.7-1.5-1.9C18.7 10.6 16 10 16 10s-1.3-1.4-2.2-2.3c-.5-.4-1.1-.7-1.8-.7H5c-.6 0-1.1.4-1.4.9l-1.4 2.9A3.7 3.7 0 0 0 2 12v4c0 .6.4 1 1 1h2",key:"5owen"}],["circle",{cx:"7",cy:"17",r:"2",key:"u2ysq9"}],["path",{d:"M9 17h6",key:"r8uit2"}],["circle",{cx:"17",cy:"17",r:"2",key:"axvx0g"}]],At=X("car",Pt);/**
|
|
58
|
+
* @license lucide-react v0.547.0 - ISC
|
|
59
|
+
*
|
|
60
|
+
* This source code is licensed under the ISC license.
|
|
61
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
62
|
+
*/const zt=[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]],Mt=X("chevron-left",zt);/**
|
|
63
|
+
* @license lucide-react v0.547.0 - ISC
|
|
64
|
+
*
|
|
65
|
+
* This source code is licensed under the ISC license.
|
|
66
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
67
|
+
*/const It=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],Ot=X("chevron-right",It);/**
|
|
68
|
+
* @license lucide-react v0.547.0 - ISC
|
|
69
|
+
*
|
|
70
|
+
* This source code is licensed under the ISC license.
|
|
71
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
72
|
+
*/const Lt=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 9h18",key:"1pudct"}],["path",{d:"M3 15h18",key:"5xshup"}],["path",{d:"M9 3v18",key:"fh3hqa"}],["path",{d:"M15 3v18",key:"14nvp0"}]],$t=X("grid-3x3",Lt);/**
|
|
73
|
+
* @license lucide-react v0.547.0 - ISC
|
|
74
|
+
*
|
|
75
|
+
* This source code is licensed under the ISC license.
|
|
76
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
77
|
+
*/const Vt=[["path",{d:"M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5",key:"mvr1a0"}]],Ft=X("heart",Vt);/**
|
|
78
|
+
* @license lucide-react v0.547.0 - ISC
|
|
79
|
+
*
|
|
80
|
+
* This source code is licensed under the ISC license.
|
|
81
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
82
|
+
*/const Gt=[["path",{d:"M8 3H5a2 2 0 0 0-2 2v3",key:"1dcmit"}],["path",{d:"M21 8V5a2 2 0 0 0-2-2h-3",key:"1e4gt3"}],["path",{d:"M3 16v3a2 2 0 0 0 2 2h3",key:"wsl5sc"}],["path",{d:"M16 21h3a2 2 0 0 0 2-2v-3",key:"18trek"}]],Wt=X("maximize",Gt),Ut=e=>{switch(e.variant||Dt(e.type)){case"primary":return"bg-primary text-primary-foreground";case"secondary":return"bg-secondary text-secondary-foreground";case"success":return"bg-success text-success-foreground";case"warning":return"bg-warning text-warning-foreground";case"error":return"bg-error text-error-foreground";case"info":return"bg-info text-info-foreground";default:return"bg-secondary text-secondary-foreground"}},Dt=e=>{switch(e){case"Venta":return"primary";case"Desarrollo":return"success";case"Renta":return"info";case"Remate":return"warning";default:return"secondary"}},Bt=({property:e,className:t,onLike:r,onImageClick:o,showLikeButton:n=!0,showNavigation:i=!0})=>{const[l,c]=A.useState(0),[d,p]=A.useState(!1),y=()=>{c(k=>k===e.images.length-1?0:k+1)},C=()=>{c(k=>k===0?e.images.length-1:k-1)},S=k=>{k.preventDefault(),k.stopPropagation();const R=!d;p(R),r?.(e.id,R)},_=k=>{k.preventDefault(),k.stopPropagation(),o?.(l,e.id)},N=(k,R)=>`$${k.toLocaleString()} ${R}`,E=w("relative overflow-hidden bg-card rounded-2xl shadow-md transition-all duration-300 ease-out cursor-pointer hover:-translate-y-1 hover:shadow-xl",t),P=w("relative overflow-hidden"),O=w("w-full h-full object-cover transition-transform duration-300 hover:scale-105"),Y=w("absolute top-4 left-4 flex flex-wrap gap-1 z-10"),W=w("px-2 py-1 rounded-lg text-xs font-medium uppercase tracking-wide"),V=w("absolute top-4 right-4 z-10 bg-background/90 backdrop-blur-sm border border-border/20 text-foreground rounded-full w-10 h-10 flex items-center justify-center cursor-pointer transition-all duration-200 hover:bg-background hover:scale-105"),L=w("absolute top-1/2 -translate-y-1/2 z-10 bg-background/90 backdrop-blur-sm border border-border/20 text-foreground w-10 h-10 rounded-full p-0 flex items-center justify-center cursor-pointer transition-all duration-200 hover:bg-background hover:scale-105"),$=w("absolute bottom-4 left-1/2 -translate-x-1/2 flex gap-1 z-10"),U=w("w-2 h-2 rounded-full border-none cursor-pointer transition-all duration-200 hover:scale-120"),g=w("p-6"),z=w("text-lg font-bold text-foreground mb-2 line-clamp-2 leading-tight"),re=w("text-xl font-bold text-primary mb-2"),te=w("text-base text-muted-foreground mb-4"),F=w("flex items-center gap-4 mb-4"),G=w("flex items-center gap-1 text-sm text-muted-foreground"),Z=w("text-sm text-muted-foreground line-clamp-2"),I=a.jsxs("div",{className:E,children:[a.jsxs("div",{className:w(P,"aspect-[4/3] bg-red-500"),children:[a.jsx("img",{src:e.images[l],alt:e.title,className:O,onClick:o?_:void 0}),a.jsx("div",{className:Y,children:e.transactionTypes.map((k,R)=>a.jsx("span",{className:w(W,Ut(k)),children:k.type},R))}),n&&a.jsx("button",{onClick:S,className:V,"aria-label":d?"Unlike property":"Like property",children:a.jsx(Ft,{size:20,fill:d?"currentColor":"none",className:d?"text-destructive":""})}),i&&e.images.length>1&&a.jsxs(a.Fragment,{children:[a.jsx(ae,{onClick:k=>{k.preventDefault(),k.stopPropagation(),C()},className:w(L,"left-4"),"aria-label":"Previous image",children:a.jsx(Mt,{size:20})}),a.jsx(ae,{onClick:k=>{k.preventDefault(),k.stopPropagation(),y()},className:w(L,"right-4"),"aria-label":"Next image",children:a.jsx(Ot,{size:20})}),a.jsx("div",{className:$,children:e.images.map((k,R)=>a.jsx("button",{className:w(U,R===l?"bg-background":"bg-background/50"),onClick:f=>{f.preventDefault(),f.stopPropagation(),c(R)},"aria-label":`Go to image ${R+1}`,"aria-current":R===l},R))})]})]}),a.jsxs("div",{className:g,children:[a.jsx("h3",{className:z,children:e.title}),a.jsx("p",{className:re,children:N(e.price.amount,e.price.currency)}),a.jsxs("p",{className:te,children:[e.location.city,", ",e.location.state]}),a.jsxs("div",{className:F,children:[a.jsxs("div",{className:G,children:[a.jsx(_t,{size:16}),a.jsx("span",{children:e.features.bedrooms})]}),a.jsxs("div",{className:G,children:[a.jsx(St,{size:16}),a.jsx("span",{children:e.features.bathrooms})]}),a.jsxs("div",{className:G,children:[a.jsx(At,{size:16}),a.jsx("span",{children:e.features.parking})]}),a.jsxs("div",{className:G,children:[a.jsx(Wt,{size:16}),a.jsxs("span",{children:[e.features.area," m²"]})]})]}),e.amenities.length>0&&a.jsx("p",{className:Z,children:e.amenities.join(", ")})]})]});return e.href?a.jsx("a",{href:e.href,className:"no-underline text-inherit",children:I}):I},rr=A.forwardRef(({images:e,transactionType:t,totalPhotos:r,onViewAllClick:o,onImageClick:n,className:i},l)=>{const c=e.slice(0,5);c.length>=5;const d=p=>{n?.(p)};return a.jsxs("div",{ref:l,className:w("w-full h-full grid grid-cols-2 gap-2",i),children:[a.jsx("div",{className:"relative col-span-1 row-span-2 rounded-2xl overflow-hidden group cursor-pointer",children:c[0]?a.jsxs(a.Fragment,{children:[a.jsx("img",{src:c[0],alt:"Property main view",className:"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105",onClick:()=>d(0)}),t&&a.jsx("div",{className:"absolute top-4 left-4 bg-white rounded-full px-4 py-2 shadow-md",children:a.jsx("span",{className:"text-sm font-medium text-foreground",children:t})})]}):a.jsx("div",{className:"w-full h-full bg-muted flex items-center justify-center",children:a.jsx("span",{className:"text-muted-foreground",children:"No image"})})}),a.jsx("div",{className:"relative col-span-1 row-span-1 rounded-2xl overflow-hidden group cursor-pointer",children:c[1]?a.jsx("img",{src:c[1],alt:"Property view 2",className:"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105",onClick:()=>d(1)}):a.jsx("div",{className:"w-full h-full bg-muted"})}),a.jsx("div",{className:"relative col-span-1 row-span-1 rounded-2xl overflow-hidden group cursor-pointer",children:c[2]?a.jsx("img",{src:c[2],alt:"Property view 3",className:"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105",onClick:()=>d(2)}):a.jsx("div",{className:"w-full h-full bg-muted"})}),a.jsx("div",{className:"relative col-span-1 row-span-1 rounded-2xl overflow-hidden group cursor-pointer",children:c[3]?a.jsx("img",{src:c[3],alt:"Property view 4",className:"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105",onClick:()=>d(3)}):a.jsx("div",{className:"w-full h-full bg-muted"})}),a.jsx("div",{className:"relative col-span-1 row-span-1 rounded-2xl overflow-hidden group cursor-pointer",children:c[4]?a.jsxs(a.Fragment,{children:[a.jsx("img",{src:c[4],alt:"Property view 5",className:"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105",onClick:()=>d(4)}),r&&r>5&&a.jsx("div",{className:"absolute bottom-4 right-4",children:a.jsxs("button",{onClick:p=>{p.stopPropagation(),o?.()},className:"flex items-center gap-2 bg-white rounded-full px-4 py-2 shadow-md hover:shadow-lg transition-all duration-200 hover:scale-105",children:[a.jsx($t,{className:"w-4 h-4 text-foreground"}),a.jsxs("span",{className:"text-sm font-medium text-foreground",children:["Ver las ",r," fotos"]})]})})]}):a.jsx("div",{className:"w-full h-full bg-muted"})})]})});rr.displayName="PropertyGallery";const Ht=e=>{switch(e){case"sm":return"p-4";case"md":return"p-6";case"lg":return"p-8";default:return"p-0"}},ve=({children:e,header:t,sidebar:r,footer:o,padding:n="md"})=>{const i=w("min-h-screen flex flex-col"),l=w("bg-card border-b border-border z-10"),c=w("flex flex-1"),d=w("w-70 bg-card border-r border-border p-6"),p=w("flex-1 flex flex-col"),y=w("flex-1 mx-auto w-full max-w-7xl",Ht(n));return a.jsxs("div",{className:i,children:[t&&a.jsx("header",{className:l,children:t}),a.jsxs("div",{className:c,children:[r&&a.jsx("aside",{className:d,children:r}),a.jsx("div",{className:p,children:a.jsx("main",{className:y,children:e})})]}),o&&a.jsx("footer",{className:"bg-card border-t border-border mt-auto",children:o})]})},Yt=({children:e,header:t,sidebar:r})=>a.jsx(ve,{header:t,sidebar:r,padding:"lg",children:a.jsx("div",{className:"max-w-screen-2xl",children:e})}),qt=({children:e,title:t,subtitle:r})=>a.jsx(ve,{padding:"lg",children:a.jsxs("div",{className:"max-w-md mx-auto",children:[a.jsxs("div",{className:"text-center mb-8",children:[t&&a.jsx(K,{variant:"h2",className:"mb-2",children:t}),r&&a.jsx(K,{variant:"body",color:"muted",children:r})]}),e]})}),Jt=({children:e,header:t,footer:r})=>a.jsx(ve,{header:t,footer:r,padding:"none",children:e}),Xt={name:"light",colors:{primary:"#007bff",secondary:"#6c757d",success:"#28a745",warning:"#ffc107",error:"#dc3545",info:"#17a2b8",background:"#ffffff",surface:"#f8f9fa",text:"#212529",textSecondary:"#6c757d",border:"#dee2e6",borderLight:"#e9ecef"},shapes:{borderRadius:{small:"4px",medium:"8px",large:"12px",round:"50%"},borderWidth:{thin:"1px",medium:"2px",thick:"3px"}},typography:{fontFamily:'Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',fontSize:{xs:"0.75rem",sm:"0.875rem",md:"1rem",lg:"1.125rem",xl:"1.25rem",xxl:"1.5rem"},fontWeight:{light:300,regular:400,medium:500,bold:700},lineHeight:{tight:1.25,normal:1.5,relaxed:1.75}},spacing:{xs:"0.25rem",sm:"0.5rem",md:"1rem",lg:"1.5rem",xl:"2rem",xxl:"3rem"},shadows:{none:"none",small:"0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24)",medium:"0 3px 6px rgba(0, 0, 0, 0.15), 0 2px 4px rgba(0, 0, 0, 0.12)",large:"0 10px 20px rgba(0, 0, 0, 0.15), 0 3px 6px rgba(0, 0, 0, 0.10)",xl:"0 15px 25px rgba(0, 0, 0, 0.15), 0 5px 10px rgba(0, 0, 0, 0.05)"}},Zt={name:"dark",colors:{primary:"#0d6efd",secondary:"#6c757d",success:"#198754",warning:"#fd7e14",error:"#dc3545",info:"#0dcaf0",background:"#121212",surface:"#1e1e1e",text:"#ffffff",textSecondary:"#adb5bd",border:"#495057",borderLight:"#343a40"},shapes:{borderRadius:{small:"4px",medium:"8px",large:"12px",round:"50%"},borderWidth:{thin:"1px",medium:"2px",thick:"3px"}},typography:{fontFamily:'Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',fontSize:{xs:"0.75rem",sm:"0.875rem",md:"1rem",lg:"1.125rem",xl:"1.25rem",xxl:"1.5rem"},fontWeight:{light:300,regular:400,medium:500,bold:700},lineHeight:{tight:1.25,normal:1.5,relaxed:1.75}},spacing:{xs:"0.25rem",sm:"0.5rem",md:"1rem",lg:"1.5rem",xl:"2rem",xxl:"3rem"},shadows:{none:"none",small:"0 1px 3px rgba(0, 0, 0, 0.3), 0 1px 2px rgba(0, 0, 0, 0.4)",medium:"0 3px 6px rgba(0, 0, 0, 0.4), 0 2px 4px rgba(0, 0, 0, 0.3)",large:"0 10px 20px rgba(0, 0, 0, 0.4), 0 3px 6px rgba(0, 0, 0, 0.3)",xl:"0 15px 25px rgba(0, 0, 0, 0.4), 0 5px 10px rgba(0, 0, 0, 0.3)"}},Qt={name:"corporate",colors:{primary:"#1a365d",secondary:"#2d3748",success:"#38a169",warning:"#d69e2e",error:"#e53e3e",info:"#3182ce",background:"#f7fafc",surface:"#ffffff",text:"#1a202c",textSecondary:"#4a5568",border:"#e2e8f0",borderLight:"#edf2f7"},shapes:{borderRadius:{small:"2px",medium:"4px",large:"6px",round:"50%"},borderWidth:{thin:"1px",medium:"2px",thick:"3px"}},typography:{fontFamily:'Georgia, "Times New Roman", serif',fontSize:{xs:"0.75rem",sm:"0.875rem",md:"1rem",lg:"1.125rem",xl:"1.25rem",xxl:"1.5rem"},fontWeight:{light:300,regular:400,medium:500,bold:700},lineHeight:{tight:1.25,normal:1.5,relaxed:1.75}},spacing:{xs:"0.25rem",sm:"0.5rem",md:"1rem",lg:"1.5rem",xl:"2rem",xxl:"3rem"},shadows:{none:"none",small:"0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06)",medium:"0 4px 6px rgba(0, 0, 0, 0.07), 0 2px 4px rgba(0, 0, 0, 0.06)",large:"0 10px 15px rgba(0, 0, 0, 0.1), 0 4px 6px rgba(0, 0, 0, 0.05)",xl:"0 20px 25px rgba(0, 0, 0, 0.1), 0 10px 10px rgba(0, 0, 0, 0.04)"}},Kt={name:"minimal",colors:{primary:"#000000",secondary:"#666666",success:"#00aa00",warning:"#ffaa00",error:"#aa0000",info:"#00aaaa",background:"#ffffff",surface:"#fafafa",text:"#000000",textSecondary:"#666666",border:"#cccccc",borderLight:"#e0e0e0"},shapes:{borderRadius:{small:"0px",medium:"0px",large:"0px",round:"50%"},borderWidth:{thin:"1px",medium:"2px",thick:"3px"}},typography:{fontFamily:"Helvetica, Arial, sans-serif",fontSize:{xs:"0.75rem",sm:"0.875rem",md:"1rem",lg:"1.125rem",xl:"1.25rem",xxl:"1.5rem"},fontWeight:{light:300,regular:400,medium:500,bold:700},lineHeight:{tight:1.25,normal:1.5,relaxed:1.75}},spacing:{xs:"0.25rem",sm:"0.5rem",md:"1rem",lg:"1.5rem",xl:"2rem",xxl:"3rem"},shadows:{none:"none",small:"none",medium:"none",large:"none",xl:"none"}},je={light:Xt,dark:Zt,corporate:Qt,minimal:Kt},tr=be.createEvent(),or=be.createEvent(),nr=be.createEvent(),ee=be.createStore(je.light).on(tr,(e,t)=>je[t]||e).on(or,(e,t)=>t).on(nr,()=>je.light);ee.map(e=>e.name);ee.map(e=>e.colors);ee.map(e=>e.shapes);ee.map(e=>e.typography);ee.map(e=>e.spacing);ee.map(e=>e.shadows);const sr=A.createContext(null),eo=()=>{const e=A.useContext(sr);if(!e)throw new Error("useTheme must be used within a ThemeProvider");return e},ro=({children:e})=>{const r={theme:gr.useUnit(ee)};return a.jsx(sr.Provider,{value:r,children:e})},to={spacing:{xs:"0.25rem",sm:"0.5rem",md:"1rem",lg:"1.5rem",xl:"2rem","2xl":"3rem","3xl":"4rem"},radius:{none:"0",sm:"0.125rem",DEFAULT:"0.25rem",md:"0.375rem",lg:"0.5rem",xl:"0.75rem","2xl":"1rem","3xl":"1.5rem",full:"9999px"},typography:{fontSize:{xs:["0.75rem",{lineHeight:"1rem"}],sm:["0.875rem",{lineHeight:"1.25rem"}],base:["1rem",{lineHeight:"1.5rem"}],lg:["1.125rem",{lineHeight:"1.75rem"}],xl:["1.25rem",{lineHeight:"1.75rem"}],"2xl":["1.5rem",{lineHeight:"2rem"}],"3xl":["1.875rem",{lineHeight:"2.25rem"}],"4xl":["2.25rem",{lineHeight:"2.5rem"}]},fontWeight:{thin:"100",light:"300",normal:"400",medium:"500",semibold:"600",bold:"700",extrabold:"800",black:"900"}},shadows:{none:"none",xs:"0 1px 2px 0 rgb(0 0 0 / 0.05)",sm:"0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)",DEFAULT:"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",md:"0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)",lg:"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)",xl:"0 25px 50px -12px rgb(0 0 0 / 0.25)"},zIndex:{dropdown:1e3,sticky:1020,fixed:1030,modalBackdrop:1040,modal:1050,popover:1060,tooltip:1070,toast:1080},duration:{instant:"0ms",fast:"150ms",normal:"300ms",slow:"500ms"},easing:{linear:"linear",in:"ease-in",out:"ease-out",inOut:"ease-in-out"}},ar={button:{size:{sm:"h-9 px-3 text-sm",md:"h-10 px-4 py-2",lg:"h-11 px-8",icon:"h-10 w-10"},variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"}},input:{size:{sm:"h-9 px-3 text-sm",md:"h-10 px-3 py-2",lg:"h-11 px-3 py-2"}},card:{variant:{default:"bg-card text-card-foreground",elevated:"bg-card text-card-foreground shadow-lg",outlined:"bg-card text-card-foreground border-2"}}},ir={sm:"640px",md:"768px",lg:"1024px",xl:"1280px","2xl":"1536px"},lr={withOpacity:(e,t)=>t!==void 0?`hsl(var(${e}) / ${t})`:`hsl(var(${e}))`,get:e=>`hsl(var(--${e}))`},cr={generateId:(e="ds")=>`${e}-${Math.random().toString(36).substr(2,9)}`,focus:{visible:"focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",within:"focus-within:outline-none focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2"},sr:{only:"absolute w-px h-px p-0 -m-px overflow-hidden whitespace-nowrap border-0",not:"not-sr-only"}},dr={icon:{xs:"w-3 h-3",sm:"w-4 h-4",md:"w-5 h-5",lg:"w-6 h-6",xl:"w-8 h-8"},avatar:{xs:"w-6 h-6",sm:"w-8 h-8",md:"w-10 h-10",lg:"w-12 h-12",xl:"w-16 h-16"}},ur={fade:{in:"animate-in fade-in duration-200",out:"animate-out fade-out duration-200"},slide:{inFromLeft:"animate-in slide-in-from-left duration-200",inFromRight:"animate-in slide-in-from-right duration-200",inFromTop:"animate-in slide-in-from-top duration-200",inFromBottom:"animate-in slide-in-from-bottom duration-200"},scale:{in:"animate-in scale-in duration-200",out:"animate-out scale-out duration-200"}},mr={container:{responsive:"container mx-auto px-4 sm:px-6 lg:px-8",fluid:"w-full max-w-none",centered:"container mx-auto px-4 flex items-center justify-center min-h-screen"},grid:{responsive:"grid gap-4 sm:gap-6 lg:gap-8",cols:{1:"grid-cols-1",2:"grid-cols-1 sm:grid-cols-2",3:"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",4:"grid-cols-1 sm:grid-cols-2 lg:grid-cols-4",5:"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5",6:"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-6"}},flex:{center:"flex items-center justify-center",between:"flex items-center justify-between",start:"flex items-center justify-start",end:"flex items-center justify-end",col:"flex flex-col",colCenter:"flex flex-col items-center justify-center"}},fr={isDark:()=>typeof window>"u"?!1:document.documentElement.classList.contains("dark"),toggle:()=>{typeof window>"u"||document.documentElement.classList.toggle("dark")},set:e=>{typeof window>"u"||document.documentElement.classList.toggle("dark",e==="dark")}},pr={debounce:(e,t)=>{let r;return(...o)=>{clearTimeout(r),r=setTimeout(()=>e(...o),t)}},throttle:(e,t)=>{let r;return(...o)=>{r||(e(...o),r=!0,setTimeout(()=>r=!1,t))}}};exports.AuthLayout=qt;exports.Button=ae;exports.Card=Ze;exports.CompoundCard=vt;exports.ConfirmModal=wt;exports.DashboardLayout=Yt;exports.MarketingLayout=Jt;exports.Modal=Qe;exports.ModalWithActions=Ke;exports.PageLayout=ve;exports.PropertyCard=Bt;exports.PropertyGallery=rr;exports.Text=K;exports.ThemeProvider=ro;exports.a11y=cr;exports.accessibilityUtils=cr;exports.animationUtils=ur;exports.animations=ur;exports.breakpoints=ir;exports.cn=w;exports.colorUtils=lr;exports.colors=lr;exports.componentSizes=dr;exports.componentVariants=ar;exports.designSystem=to;exports.layout=mr;exports.layoutUtils=mr;exports.performance=pr;exports.performanceUtils=pr;exports.resetTheme=nr;exports.responsiveBreakpoints=ir;exports.setCustomTheme=or;exports.setTheme=tr;exports.sizes=dr;exports.theme=fr;exports.themeUtils=fr;exports.useTheme=eo;exports.variants=ar;
|
|
83
|
+
//# sourceMappingURL=design-system.cjs.js.map
|