@base-framework/ui 1.0.2014 → 1.0.2016

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/copilot.md CHANGED
@@ -5,11 +5,12 @@ This repo is a UI component library for the Base Framework, organized with Atomi
5
5
  ## How things fit together
6
6
  - Runtime primitives come from external packages:
7
7
  - `@base-framework/base` supplies Component, Atom, Data, Jot, Events, router, NavLink, etc.
8
- - `@base-framework/atoms` supplies DOM tag helpers (Div, Button, Input, Ul, Li, etc.) and reactive helpers (On, OnState, UseParent, OnStateOpen).
8
+ - `@base-framework/atoms` supplies DOM tag helpers (Div, Button, Input, Ul, Li, I, etc.) and reactive helpers (On, OnState, UseParent, OnStateOpen).
9
9
  - Local exports aggregate in `src/ui.js` and sub-entries in `vite.config.js`:
10
10
  - `@base-framework/ui` (index) exports everything from `components/*` and `utils/*`.
11
11
  - Subpath imports are enabled: `@base-framework/ui/atoms`, `.../icons`, `.../molecules`, `.../organisms`, `.../pages`, `.../templates`, `.../utils`.
12
12
  - Styling is Tailwind 4 with custom CSS vars (see `tailwind.config.js`). Use existing design tokens like `text-muted-foreground`, `bg-muted/10`, `border`, `ring`.
13
+ - Icons are provided via the `Icons` object from `@base-framework/ui/icons` and rendered using the `Icon` atom or raw `I` element from `@base-framework/atoms`.
13
14
 
14
15
  ## Build and dev workflow
15
16
  - Install: npm i
@@ -33,6 +34,16 @@ This repo is a UI component library for the Base Framework, organized with Atomi
33
34
  - Subscriptions: `On('key', callback)` or `OnState/Open` utilities to react to state.
34
35
  - Parent context: `UseParent(({ state, ... }) => ...)` to access parent component refs.
35
36
 
37
+ ### Important: Atom argument patterns
38
+ Atoms created with `Atom()` support flexible argument patterns:
39
+ - **Props only**: `Div({ class: 'text' })`
40
+ - **Text child only**: `Div('test')`
41
+ - **Array children only**: `Div([Div('test')])`
42
+ - **Props and text**: `Div({ class: 'text' }, 'test')`
43
+ - **Props and array children**: `Div({ class: 'text' }, [Div('test')])`
44
+
45
+ CRITICAL: When children is an array, pass it as the SECOND argument after props, NOT inside props.
46
+
36
47
  ## File layout to know
37
48
  - `src/components/atoms/**`: Base-level atoms and atom variants (e.g., buttons, icons, badges, tooltips, skeleton, veil).
38
49
  - `src/components/molecules/**`: Composition of atoms with light state (alerts, dropdowns, date/time pickers, theme toggle, counters, uploaders, etc.).
@@ -41,29 +52,239 @@ This repo is a UI component library for the Base Framework, organized with Atomi
41
52
  - `src/utils/**`: Utilities (formatting, image-scaler with pointer/zoom/drag helpers).
42
53
  - `src/ui.js`: Re-exports public surface used by `vite` lib entries.
43
54
 
55
+ ## Working with Icons (CRITICAL)
56
+
57
+ Icons in this library come from Heroicons and are defined in `src/components/icons/icons.js`. They are stored as SVG strings in a nested object structure.
58
+
59
+ ### Icon Structure
60
+ - Icons are organized hierarchically: `Icons.home`, `Icons.chat.default`, `Icons.chat.text`, `Icons.arrows.left`, etc.
61
+ - Each icon is a raw SVG string with Heroicon styling
62
+
63
+ ### How to Use Icons (3 methods)
64
+
65
+ #### Method 1: Using the Icon atom (RECOMMENDED)
66
+ ```javascript
67
+ import { Icon } from '@base-framework/ui/atoms';
68
+ import { Icons } from '@base-framework/ui/icons';
69
+
70
+ // Pass icon SVG string as child
71
+ Icon({ size: 'sm', class: 'text-blue-500' }, Icons.home)
72
+ Icon({ size: 'md' }, Icons.chat.default)
73
+ Icon({ size: 'lg' }, Icons.arrows.left)
74
+
75
+ // Sizes: xs, sm, md, lg, xl, 2xl, 3xl (default: sm)
76
+ ```
77
+
78
+ #### Method 2: Using raw I element
79
+ ```javascript
80
+ import { I } from '@base-framework/atoms';
81
+ import { Icons } from '@base-framework/ui/icons';
82
+
83
+ // Use html prop to inject SVG
84
+ I({ html: Icons.home, class: 'w-6 h-6' })
85
+ I({ html: Icons.chat.dots })
86
+ ```
87
+
88
+ #### Method 3: In Button with icon prop
89
+ ```javascript
90
+ import { Button } from '@base-framework/ui/atoms';
91
+ import { Icons } from '@base-framework/ui/icons';
92
+
93
+ // Icon appears on left by default
94
+ Button({ variant: 'withIcon', icon: Icons.plus }, 'Add Item')
95
+
96
+ // Icon on right
97
+ Button({ variant: 'withIcon', icon: Icons.arrows.right, position: 'right' }, 'Next')
98
+ ```
99
+
100
+ ### Common Icon Access Patterns
101
+ ```javascript
102
+ // Simple icons (top-level)
103
+ Icons.home, Icons.star, Icons.help, Icons.plus
104
+
105
+ // Nested icons (use dot notation)
106
+ Icons.chat.default, Icons.chat.text, Icons.chat.dots
107
+ Icons.arrows.left, Icons.arrows.right, Icons.arrows.upDown
108
+ Icons.adjustments.vertical, Icons.adjustments.horizontal
109
+
110
+ // Icons with states
111
+ Icons.locked, Icons.unlocked
112
+ Icons.play, Icons.stop, Icons.playing
113
+ ```
114
+
115
+ ### CRITICAL MISTAKES TO AVOID
116
+ ❌ **WRONG**: `Icon(Icons.home)` - Missing props object
117
+ ❌ **WRONG**: `Icon({ icon: Icons.home })` - Don't use `icon` prop
118
+ ❌ **WRONG**: `I(Icons.home)` - Must use `html` prop
119
+ ❌ **WRONG**: `Icons['home']` - Use dot notation, not bracket
120
+ ❌ **WRONG**: `Icons.chat` - Incomplete path for nested icons
121
+
122
+ ✅ **CORRECT**: `Icon({ size: 'sm' }, Icons.home)`
123
+ ✅ **CORRECT**: `I({ html: Icons.home })`
124
+ ✅ **CORRECT**: `Icons.chat.default` (for nested icons)
125
+
44
126
  ## Tailwind and theming
45
127
  - Tailwind scans `./src/ui.js` and `./src/**/*.{js,ts,jsx,tsx}`. If you add files, keep them under `src` and referenced by exports for purge to include classes.
46
128
  - Use semantic tokens configured in `tailwind.config.js`: `primary`, `secondary`, `destructive`, `warning`, `muted`, `accent`, `popover`, `card`, `border`, `foreground`, with `DEFAULT` and `foreground` pairs.
47
129
  - Dark mode is `media`. Prefer classes already used (`data-[state=active]:...`, rounded tokens via `--radius`).
48
130
 
49
131
  ## Patterns by example
50
- - Functional Atom example (from `molecules/alert.js`):
51
- - Compose small atoms: `Div` containers + `I` for icons + `H5/P` for text
52
- - Type variants use lookup table → apply Tailwind classes from map
53
- - Variant pattern (from `atoms/buttons/buttons.js`):
54
- - Define variant factories, then export a single `Button` Atom that dispatches by `props.variant`
55
- - Icon handling via a shared `IconButton` Atom; support `position: 'right'`
56
- - Data-driven lists (from `molecules/dropdowns/dropdown.js`):
57
- - `for: ['groups', (group) => ...]` to render nested collections
58
- - Stateful Component (from `organisms/panel.js`):
59
- - `class Panel extends Component { declareProps() { this.class = '' } render() { return Div({ class: this.class }, this.children) } }`
60
-
61
- ## Coding rules (do/don’t)
62
- - Do: import primitives from `@base-framework/atoms` and state tools from `@base-framework/base`; keep them as externals.
63
- - Do: export new public pieces from the appropriate barrel files (`components/*/atoms.js`, `.../molecules.js`, `.../organisms.js`, `pages.js`, `templates.js`, `utils.js`) so they are part of the library entry.
64
- - Do: keep Tailwind classes consistent with existing tokens; avoid raw hex colors.
65
- - Don’t: introduce React/Vue/JSX; this project uses Base’s declarative atoms/components.
66
- - Don’t: mutate DOM directly; use Atom/Component APIs and Data bindings.
132
+
133
+ ### Functional Atom (from `molecules/alert.js`)
134
+ Compose small atoms: `Div` containers + `I` for icons + `H5/P` for text. Type variants use lookup table → apply Tailwind classes from map.
135
+
136
+ ```javascript
137
+ import { Div, H5, I, P } from '@base-framework/atoms';
138
+ import { Atom } from '@base-framework/base';
139
+
140
+ const AlertIcon = (icon, iconColor) => (
141
+ Div({ class: `flex items-center justify-center h-6 w-6 mr-3 ${iconColor}` }, [
142
+ I({ html: icon })
143
+ ])
144
+ );
145
+
146
+ export const Alert = Atom(({ title, description, icon, type = 'default' }) => {
147
+ const { borderColor, bgColor, iconColor } = typeStyles[type];
148
+ return Div({ class: `flex items-start p-4 border rounded-lg ${bgColor} ${borderColor}` }, [
149
+ icon && AlertIcon(icon, iconColor),
150
+ Div({ class: 'flex flex-col' }, [
151
+ H5({ class: 'font-semibold' }, title),
152
+ P({ class: 'text-sm text-muted-foreground' }, description)
153
+ ])
154
+ ]);
155
+ });
156
+ ```
157
+
158
+ ### Variant pattern (from `atoms/buttons/buttons.js`)
159
+ Define variant factories, then export a single `Button` Atom that dispatches by `props.variant`. Icon handling via a shared `IconButton` Atom; support `position: 'right'`.
160
+
161
+ ```javascript
162
+ import { Button as BaseButton } from '@base-framework/atoms';
163
+ import { Atom } from '@base-framework/base';
164
+ import { Icon } from '../icon.js';
165
+
166
+ const IconButton = Atom((props, children) => (
167
+ BaseButton({
168
+ ...props,
169
+ class: props.class
170
+ }, [
171
+ props.icon && props.position !== 'right' ? Icon({ size: 'sm' }, props.icon) : null,
172
+ ...(children || []),
173
+ props.icon && props.position === 'right' ? Icon({ size: 'sm' }, props.icon) : null
174
+ ])
175
+ ));
176
+
177
+ const BUTTON_VARIANTS = {
178
+ primary: DefaultVariant({ class: 'primary' }),
179
+ withIcon: WithIconVariant({ class: 'with-icon' })
180
+ };
181
+
182
+ export const Button = Atom((props, children) => {
183
+ const VariantButton = BUTTON_VARIANTS[props.variant] || BUTTON_VARIANTS.primary;
184
+ return VariantButton(props, children);
185
+ });
186
+ ```
187
+
188
+ ### Data-driven lists (from `molecules/dropdowns/dropdown.js`)
189
+ Use `for: ['collectionKey', (item) => ...]` to render nested collections from component state.
190
+
191
+ ```javascript
192
+ export const Dropdown = (onSelect) => (
193
+ Div({ class: 'w-full z-10' }, [
194
+ Div({
195
+ class: 'max-h-60 border rounded-md',
196
+ for: ['groups', (group) => Group(group, onSelect)]
197
+ })
198
+ ])
199
+ );
200
+ ```
201
+
202
+ ### Stateful Component (from `organisms/lists/data-table.js`)
203
+ Use `Component` with `Data` for state management and `declareProps()` for type hints.
204
+
205
+ ```javascript
206
+ import { Component, Data } from '@base-framework/base';
207
+
208
+ export class DataTable extends Component {
209
+ declareProps() {
210
+ this.rows = [];
211
+ this.headers = [];
212
+ }
213
+
214
+ setData() {
215
+ return new Data({
216
+ selectedRows: [],
217
+ hasItems: this.rows && this.rows.length > 0
218
+ });
219
+ }
220
+
221
+ render() {
222
+ return Div({ class: 'w-full' }, [
223
+ Table([
224
+ TableHeader({ headers: this.headers }),
225
+ DataTableBody({ rows: this.rows })
226
+ ])
227
+ ]);
228
+ }
229
+ }
230
+ ```
231
+
232
+ ## Import Patterns (CRITICAL)
233
+
234
+ ### External Framework Imports
235
+ ```javascript
236
+ // DOM elements and reactive utilities
237
+ import { Div, Button, Input, I, Ul, Li, H5, P } from '@base-framework/atoms';
238
+ import { On, OnState, UseParent } from '@base-framework/atoms';
239
+
240
+ // Core framework classes and utilities
241
+ import { Atom, Component, Data, Jot } from '@base-framework/base';
242
+ ```
243
+
244
+ ### Internal Library Imports
245
+ ```javascript
246
+ // Icons (most common mistake area)
247
+ import { Icons } from '@base-framework/ui/icons';
248
+ import { Icon } from '@base-framework/ui/atoms';
249
+
250
+ // Components from this library
251
+ import { Button, Alert } from '@base-framework/ui/atoms';
252
+ import { Form, Dropdown } from '@base-framework/ui/molecules';
253
+ import { DataTable } from '@base-framework/ui/organisms';
254
+ ```
255
+
256
+ ### Relative Imports (when authoring components IN this library)
257
+ ```javascript
258
+ // From within src/components/
259
+ import { Icons } from '../../icons/icons.js';
260
+ import { Icon } from '../icon.js';
261
+ import { Button as BaseButton } from '@base-framework/atoms';
262
+ ```
263
+
264
+ ## Coding rules (do/don't)
265
+
266
+ ### DO:
267
+ - ✅ Import primitives from `@base-framework/atoms` (Div, Button, I, etc.)
268
+ - ✅ Import framework tools from `@base-framework/base` (Atom, Component, Data)
269
+ - ✅ Pass children array as SECOND argument: `Div({ class: 'wrapper' }, [child1, child2])`
270
+ - ✅ Use `Icons` object from `@base-framework/ui/icons` for all icons
271
+ - ✅ Use `Icon` atom with SVG string as child: `Icon({ size: 'sm' }, Icons.home)`
272
+ - ✅ Use `I({ html: iconString })` for raw icon rendering
273
+ - ✅ Export new components from appropriate barrel files
274
+ - ✅ Use Tailwind semantic tokens (primary, muted-foreground, etc.)
275
+ - ✅ Use `map: [array, fn]` or `for: ['key', fn]` for lists
276
+ - ✅ Use `bind: 'path'` or `bind: [state, 'key']` for two-way binding
277
+
278
+ ### DON'T:
279
+ - ❌ Pass children inside props object: `Div({ children: [...] })`
280
+ - ❌ Use `icon` prop on Icon atom: `Icon({ icon: Icons.home })`
281
+ - ❌ Pass icon directly without props: `Icon(Icons.home)`
282
+ - ❌ Use React/Vue/JSX syntax
283
+ - ❌ Mutate DOM directly (use Data bindings instead)
284
+ - ❌ Use raw hex colors (use Tailwind tokens)
285
+ - ❌ Import Icons from wrong path
286
+ - ❌ Create new icon implementations (use existing Icon atom)
287
+ - ❌ Forget to spread props: always use `{ ...defaultProps, ...props }`
67
288
 
68
289
  ## Adding a new component (checklist)
69
290
  1) Decide Atom vs Component (stateless vs stateful/interactive)
@@ -72,9 +293,131 @@ This repo is a UI component library for the Base Framework, organized with Atomi
72
293
  4) If it needs data/state, use `Data`/`Jot`, `On`, `bind`, `for` as seen in existing components
73
294
  5) Run dev server and verify render; run build to ensure types emit
74
295
 
296
+ ## Common Mistakes & Troubleshooting
297
+
298
+ ### Issue: Icons not rendering
299
+ **Symptoms**: Icons appear as blank or broken
300
+ **Causes**:
301
+ 1. Wrong import path for Icons
302
+ 2. Incorrect Icon usage syntax
303
+ 3. Missing `html` prop on I element
304
+
305
+ **Solutions**:
306
+ ```javascript
307
+ // ✅ Correct ways
308
+ import { Icons } from '@base-framework/ui/icons';
309
+ Icon({ size: 'sm' }, Icons.home)
310
+ I({ html: Icons.home })
311
+
312
+ // ❌ Wrong ways
313
+ Icon(Icons.home) // Missing props object
314
+ Icon({ icon: Icons.home }) // Wrong prop name
315
+ I(Icons.home) // Missing html prop
316
+ ```
317
+
318
+ ### Issue: Children not rendering
319
+ **Symptoms**: Child components/text not appearing
320
+ **Cause**: Passing children in props object instead of as second argument
321
+
322
+ **Solution**:
323
+ ```javascript
324
+ // ✅ Correct
325
+ Div({ class: 'wrapper' }, [
326
+ Div('child 1'),
327
+ Div('child 2')
328
+ ])
329
+
330
+ // ❌ Wrong
331
+ Div({
332
+ class: 'wrapper',
333
+ children: [Div('child')]
334
+ })
335
+ ```
336
+
337
+ ### Issue: Component not reactive
338
+ **Symptoms**: UI doesn't update when data changes
339
+ **Cause**: Not using Data or proper bindings
340
+
341
+ **Solution**:
342
+ ```javascript
343
+ // ✅ Use Data in Component
344
+ setData() {
345
+ return new Data({ count: 0 });
346
+ }
347
+
348
+ // ✅ Use bind for two-way binding
349
+ Input({ bind: 'username' })
350
+ Input({ bind: [externalState, 'email'] })
351
+ ```
352
+
353
+ ### Issue: List not rendering
354
+ **Symptoms**: Array of items not displaying
355
+ **Cause**: Using regular map instead of Base's reactive patterns
356
+
357
+ **Solution**:
358
+ ```javascript
359
+ // ✅ Use map prop
360
+ Ul({ map: [items, (item) => Li(item.name)] })
361
+
362
+ // ✅ Use for with state key
363
+ Div({ for: ['items', (item) => ItemComponent(item)] })
364
+
365
+ // ❌ Wrong - regular JS map
366
+ Ul([items.map(item => Li(item.name))])
367
+ ```
368
+
75
369
  ## Commands reference
76
370
  - Dev: `npm run dev`
77
371
  - Build: `npm run build`
78
372
  - Preview: `npm run preview`
79
373
 
374
+ ## Quick Reference Card
375
+
376
+ ### Component Creation
377
+ ```javascript
378
+ // Atom (stateless)
379
+ export const MyAtom = Atom((props, children) => (
380
+ Div({ class: props.class }, children)
381
+ ));
382
+
383
+ // Component (stateful)
384
+ export class MyComponent extends Component {
385
+ declareProps() {
386
+ this.items = [];
387
+ }
388
+
389
+ setData() {
390
+ return new Data({ selected: null });
391
+ }
392
+
393
+ render() {
394
+ return Div([/* ... */]);
395
+ }
396
+ }
397
+ ```
398
+
399
+ ### Icon Usage Quick Reference
400
+ ```javascript
401
+ // In Button
402
+ Button({ variant: 'withIcon', icon: Icons.plus }, 'Add')
403
+
404
+ // Standalone
405
+ Icon({ size: 'md', class: 'text-primary' }, Icons.home)
406
+
407
+ // Raw SVG
408
+ I({ html: Icons.check, class: 'w-5 h-5' })
409
+ ```
410
+
411
+ ### Event Handlers
412
+ ```javascript
413
+ // Click
414
+ Button({ click: (e) => console.log('clicked') }, 'Click')
415
+
416
+ // Submit (in Form)
417
+ Form({ submit: (e, parent) => handleSubmit(e) }, [...])
418
+
419
+ // State-based callbacks
420
+ Button({ onState: ['key', { key: 'value' }] }, 'State Button')
421
+ ```
422
+
80
423
  If anything seems unclear (e.g., preferred binding patterns or where to export), ask for confirmation before large changes.
@@ -1,6 +1,6 @@
1
1
  import { Div as n, H5 as X, P as b, I as x, Li as q, Span as a, Ul as Y, Button as m, OnState as D, Label as A, H2 as S, Form as Z, Header as F, Footer as M, A as V, H3 as ee, Checkbox as te, Input as f, Img as _, Nav as se, UseParent as W, OnStateOpen as P, Time as oe, Dialog as ne } from "@base-framework/atoms";
2
2
  import { Atom as c, Component as y, Html as O, Dom as re, base as le, Data as T, Builder as G, Jot as w, Events as p, DateTime as L } from "@base-framework/base";
3
- import { P as I, b as ie, R as ae } from "./range-calendar-CCVC3e9d.js";
3
+ import { P as I, b as ie, R as ae } from "./range-calendar-DqVS8ooC.js";
4
4
  import { C as ce, F as ue } from "./form-group-CJzpq9Us.js";
5
5
  import { B as h, I as g } from "./buttons-CHEs54Wl.js";
6
6
  import { Icons as u } from "./icons.es.js";
package/dist/index.es.js CHANGED
@@ -4,9 +4,9 @@ import { C as T, F as b } from "./form-group-CJzpq9Us.js";
4
4
  import { C as I, d as S, D as F, c as B, E as P, F as k, H as M, I as x, M as f, N as v, P as N, R as y, T as h, a as U, b as L, U as W, W as H } from "./inputs-9udyzkHR.js";
5
5
  import { V as w, a as A } from "./veil-CqnAmj-D.js";
6
6
  import { Icons as O } from "./icons.es.js";
7
- import { A as V, B as j, C as q, w as J, K as z, y as K, z as Q, E as _, G as X, D as Y, m as Z, n as $, Q as aa, O as ea, v as sa, c as oa, a as ta, b as ra, R as na, l as la, g as ia, i as pa, h as da, j as ma, e as ua, k as ga, F as Ca, d as ca, f as Ta, I as ba, L as Da, x as Ia, M as Sa, o as Fa, N as Ba, P as Pa, s as ka, t as Ma, S as xa, q as fa, r as va, T as Na, H as ya, J as ha, p as Ua, u as La } from "./empty-state-CkoAZpy0.js";
8
- import { A as Ha, b as Ra, C as wa, D as Aa, a as Ga, F as Oa, M as Ea, P as Va, R as ja, c as qa, g as Ja, p as za } from "./range-calendar-CCVC3e9d.js";
9
- import { B as Qa, p as _a, C as Xa, j as Ya, D as Za, m as $a, k as ae, H as ee, I as se, N as oe, O as te, P as re, S as ne, n as le, o as ie, x as pe, s as de, q as me, r as ue, T as ge, t as Ce, w as ce, u as Te, v as be, l as De, U as Ie, W as Se, f as Fe, h as Be, i as Pe, c as ke, d as Me, b as xe, e as fe, a as ve, g as Ne } from "./signature-panel-DIFmtS0f.js";
7
+ import { A as V, B as j, C as q, w as J, K as z, y as K, z as Q, E as _, G as X, D as Y, m as Z, n as $, Q as aa, O as ea, v as sa, c as oa, a as ta, b as ra, R as na, l as la, g as ia, i as pa, h as da, j as ma, e as ua, k as ga, F as Ca, d as ca, f as Ta, I as ba, L as Da, x as Ia, M as Sa, o as Fa, N as Ba, P as Pa, s as ka, t as Ma, S as xa, q as fa, r as va, T as Na, H as ya, J as ha, p as Ua, u as La } from "./empty-state-B2M6T2d1.js";
8
+ import { A as Ha, b as Ra, C as wa, D as Aa, a as Ga, F as Oa, M as Ea, P as Va, R as ja, c as qa, g as Ja, p as za } from "./range-calendar-DqVS8ooC.js";
9
+ import { B as Qa, p as _a, C as Xa, j as Ya, D as Za, m as $a, k as ae, H as ee, I as se, N as oe, O as te, P as re, S as ne, n as le, o as ie, x as pe, s as de, q as me, r as ue, T as ge, t as Ce, w as ce, u as Te, v as be, l as De, U as Ie, W as Se, f as Fe, h as Be, i as Pe, c as ke, d as Me, b as xe, e as fe, a as ve, g as Ne } from "./signature-panel-C50P9GW4.js";
10
10
  import { B as he, I as Ue, M as Le, d as We, e as He, g as Re, N as we, b as Ae, a as Ge, f as Oe, P as Ee, c as Ve, S as je, T as qe } from "./mobile-nav-wrapper-Dm9DinRD.js";
11
11
  import { B as ze, a as Ke, C as Qe, F as _e, b as Xe, c as Ye, M as Ze, P as $e, S as as } from "./sidebar-menu-page-D4WMgz5U.js";
12
12
  import { A as ss, F as os, M as ts, a as rs, T as ns } from "./aside-template-sUm-F2f0.js";
@@ -1,5 +1,5 @@
1
- import { A as s, B as t, C as e, w as r, K as i, y as n, z as m, E as l, G as d, D as C, m as p, n as S, Q as g, O as u, v as D, c, a as F, b as T, R as P, l as A, g as I, i as f, h as w, j as b, e as y, k as B, F as M, d as k, f as x, I as L, L as R, x as U, M as v, o as E, N, P as h, s as G, t as O, S as j, q, r as z, T as H, H as J, J as K, p as Q, u as _ } from "./empty-state-CkoAZpy0.js";
2
- import { A as W, P as X, g as Y } from "./range-calendar-CCVC3e9d.js";
1
+ import { A as s, B as t, C as e, w as r, K as i, y as n, z as m, E as l, G as d, D as C, m as p, n as S, Q as g, O as u, v as D, c, a as F, b as T, R as P, l as A, g as I, i as f, h as w, j as b, e as y, k as B, F as M, d as k, f as x, I as L, L as R, x as U, M as v, o as E, N, P as h, s as G, t as O, S as j, q, r as z, T as H, H as J, J as K, p as Q, u as _ } from "./empty-state-B2M6T2d1.js";
2
+ import { A as W, P as X, g as Y } from "./range-calendar-DqVS8ooC.js";
3
3
  export {
4
4
  s as Alert,
5
5
  W as Avatar,
@@ -1,5 +1,5 @@
1
- import { B as s, p as n, C as t, j as o, D as r, m as l, k as i, H as d, I as b, N as u, O as v, P as g, S as p, n as T, o as D, x as N, s as k, q as C, r as c, T as B, t as M, w as m, u as y, v as W, l as h, U as S, W as H, f as P, h as U, i as x, c as I, d as f, b as L, e as O, a as F, g as G } from "./signature-panel-DIFmtS0f.js";
2
- import { b as R, C as j, D as q, a as z, F as A, M as E, R as J, c as K, p as Q } from "./range-calendar-CCVC3e9d.js";
1
+ import { B as s, p as n, C as t, j as o, D as r, m as l, k as i, H as d, I as b, N as u, O as v, P as g, S as p, n as T, o as D, x as N, s as k, q as C, r as c, T as B, t as M, w as m, u as y, v as W, l as h, U as S, W as H, f as P, h as U, i as x, c as I, d as f, b as L, e as O, a as F, g as G } from "./signature-panel-C50P9GW4.js";
2
+ import { b as R, C as j, D as q, a as z, F as A, M as E, R as J, c as K, p as Q } from "./range-calendar-DqVS8ooC.js";
3
3
  import { B as X, I as Y, M as Z, d as _, e as $, g as aa, N as ea, b as sa, a as na, f as ta, P as oa, c as ra, S as la, T as ia } from "./mobile-nav-wrapper-Dm9DinRD.js";
4
4
  export {
5
5
  s as BackButton,
@@ -1,21 +1,21 @@
1
1
  import { Div as h, Img as _, Span as H, Button as L, OnState as J, On as z } from "@base-framework/atoms";
2
- import { Component as Y, Data as B, Atom as j, DateTime as T } from "@base-framework/base";
2
+ import { Component as B, Data as j, Atom as T, DateTime as O } from "@base-framework/base";
3
3
  import { B as m } from "./buttons-CHEs54Wl.js";
4
4
  import { Icons as P } from "./icons.es.js";
5
- const U = (n, t) => {
6
- const e = n ? n.getBoundingClientRect() : { top: 0, bottom: 0, left: 0 }, a = t.getBoundingClientRect(), s = 10, r = globalThis.scrollX, l = globalThis.scrollY;
7
- let i = e.left + r, d = e.bottom + l;
8
- const g = globalThis.innerHeight - e.bottom, f = e.top;
9
- return i + a.width > globalThis.innerWidth && (i = globalThis.innerWidth - a.width - s), g < a.height && f > g ? d = e.top + l - a.height - s : g < a.height && (d = e.bottom + l - (a.height - g) - s), { x: i, y: d };
5
+ const U = (e, t) => {
6
+ const n = e ? e.getBoundingClientRect() : { top: 0, bottom: 0, left: 0 }, a = t.getBoundingClientRect(), s = 10, r = globalThis.scrollX, l = globalThis.scrollY;
7
+ let i = n.left + r, d = n.bottom + l;
8
+ const g = globalThis.innerHeight - n.bottom, f = n.top;
9
+ return i + a.width > globalThis.innerWidth && (i = globalThis.innerWidth - a.width - s), g < a.height && f > g ? d = n.top + l - a.height - s : g < a.height && (d = n.bottom + l - (a.height - g) - s), { x: i, y: d };
10
10
  };
11
- class Pt extends Y {
11
+ class Tt extends B {
12
12
  /**
13
13
  * This will set up the data.
14
14
  *
15
15
  * @returns {object}
16
16
  */
17
17
  setData() {
18
- const t = this.parent.data || new B();
18
+ const t = this.parent.data || new j();
19
19
  return t.set({
20
20
  position: { x: 0, y: 0 }
21
21
  }), t;
@@ -59,7 +59,7 @@ class Pt extends Y {
59
59
  return h({
60
60
  class: `absolute inset-auto fadeIn mt-2 rounded-md p-0 shadow-lg bg-popover min-h-12 backdrop:bg-transparent text-inherit r z-30 ${t}`,
61
61
  popover: "manual",
62
- toggle: (e, { state: a }) => e.newState === "closed" ? a.open = !1 : null,
62
+ toggle: (n, { state: a }) => n.newState === "closed" ? a.open = !1 : null,
63
63
  style: "top: [[position.y]]px; left: [[position.x]]px"
64
64
  }, this.children);
65
65
  }
@@ -84,7 +84,7 @@ class Pt extends Y {
84
84
  * @returns {void}
85
85
  */
86
86
  updatePosition() {
87
- const t = this.button ?? null, e = this.panel, a = U(t, e);
87
+ const t = this.button ?? null, n = this.panel, a = U(t, n);
88
88
  this.data.position = a;
89
89
  }
90
90
  /**
@@ -136,17 +136,20 @@ class Pt extends Y {
136
136
  this.panel.hidePopover();
137
137
  }
138
138
  }
139
- const q = j(({ src: n, alt: t }) => !n || n.indexOf(".") === -1 && n.indexOf("[[") === -1 ? null : _({
140
- class: "absolute w-full h-full rounded-full object-cover fadeIn",
141
- src: n,
139
+ const q = T(({ src: e, alt: t, class: n }) => !e || (n = n || "", e.indexOf(".") === -1 && e.indexOf("[[") === -1) ? null : _({
140
+ class: `absolute w-full h-full rounded-full object-cover fadeIn ${n}`,
141
+ src: e,
142
142
  alt: t,
143
- load: (e) => e.target.style.visibility = "visible",
143
+ load: (a) => a.target.style.visibility = "visible",
144
144
  /**
145
145
  * If there's an error loading the image, hide it.
146
146
  */
147
- error: (e) => e.target.style.visibility = "hidden"
148
- })), K = (n) => n && (Array.isArray(n) && (n = n.join(" ")), typeof n != "string" && (n = String(n)), n.split(" ").map((t) => t.charAt(0)).join("").toUpperCase()), G = (n) => !n || n.length < 2 ? n : K(n), Q = (n) => H([n, (t, e) => {
149
- e.textContent = G(t);
147
+ error: (a) => a.target.style.visibility = "hidden"
148
+ })), K = T(({ src: e, alt: t }) => !e || e.indexOf(".") === -1 && e.indexOf("[[") === -1 ? null : q({
149
+ src: e,
150
+ alt: t
151
+ })), Q = (e) => e && (Array.isArray(e) && (e = e.join(" ")), typeof e != "string" && (e = String(e)), e.split(" ").map((t) => t.charAt(0)).join("").toUpperCase()), G = (e) => !e || e.length < 2 ? e : Q(e), V = (e) => H([e, (t, n) => {
152
+ n.textContent = G(t);
150
153
  }]), A = {
151
154
  xs: "h-6 w-6",
152
155
  sm: "h-8 w-8",
@@ -167,8 +170,8 @@ const q = j(({ src: n, alt: t }) => !n || n.indexOf(".") === -1 && n.indexOf("[[
167
170
  "3xl": "text-4xl",
168
171
  "4xl": "text-5xl",
169
172
  default: "text-base"
170
- }, V = (n) => A[n] || A.default, Z = (n) => I[n] || I.default, tt = (n, t = null, e = "md") => {
171
- const a = G(n), s = Z(e);
173
+ }, Z = (e) => A[e] || A.default, tt = (e) => I[e] || I.default, et = (e, t = null, n = "md") => {
174
+ const a = G(e), s = tt(n);
172
175
  return h(
173
176
  {
174
177
  class: `
@@ -178,52 +181,52 @@ const q = j(({ src: n, alt: t }) => !n || n.indexOf(".") === -1 && n.indexOf("[[
178
181
  `
179
182
  },
180
183
  [
181
- t ? Q(t) : H({ class: "uppercase" }, a)
184
+ t ? V(t) : H({ class: "uppercase" }, a)
182
185
  ]
183
186
  );
184
- }, Tt = j(({ src: n, alt: t, fallbackText: e, watcherFallback: a, size: s }) => {
185
- const r = V(s);
187
+ }, Ot = T(({ src: e, alt: t, fallbackText: n, watcherFallback: a, size: s }) => {
188
+ const r = Z(s);
186
189
  return h(
187
190
  {
188
191
  class: `relative flex items-center justify-center ${r}`
189
192
  },
190
193
  [
191
- q({ src: n, alt: t }),
192
- tt(e, a, s)
194
+ K({ src: e, alt: t }),
195
+ et(n, a, s)
193
196
  ]
194
197
  );
195
- }), et = ({ currentMonth: n, currentYear: t, onSelect: e }) => h(
198
+ }), nt = ({ currentMonth: e, currentYear: t, onSelect: n }) => h(
196
199
  { class: "grid grid-cols-3 gap-2" },
197
- T.monthNames.map(
200
+ O.monthNames.map(
198
201
  (a, s) => m(
199
202
  {
200
203
  click: (r) => {
201
- r.preventDefault(), r.stopPropagation(), e(s);
204
+ r.preventDefault(), r.stopPropagation(), n(s);
202
205
  },
203
- variant: n === s ? "primary" : "ghost",
206
+ variant: e === s ? "primary" : "ghost",
204
207
  "aria-label": `Select ${a} ${t}`
205
208
  },
206
209
  a.substring(0, 3)
207
210
  )
208
211
  )
209
- ), D = (n) => (n *= 1, n < 10 ? `0${n}` : String(n)), nt = (n) => (n.indexOf("T") === -1 && n.indexOf(" ") === -1 && (n += "T00:00:01"), n.replace(" ", "T"), n), w = (n, t, e) => `${n}-${D(t + 1)}-${D(e)}`, at = (n) => n ? "bg-accent text-primary" : "", st = (n) => n ? "text-muted-foreground opacity-50" : "", rt = (n, t) => n === t, ot = (n, t) => rt(n, t) ? "bg-primary text-primary-foreground" : "", it = (n, t, e, a) => {
210
- const s = ot(t, a);
211
- return s || (n ? at(n) : e ? st(e) : "text-foreground");
212
- }, N = (n) => {
212
+ ), D = (e) => (e *= 1, e < 10 ? `0${e}` : String(e)), at = (e) => (e.indexOf("T") === -1 && e.indexOf(" ") === -1 && (e += "T00:00:01"), e.replace(" ", "T"), e), w = (e, t, n) => `${e}-${D(t + 1)}-${D(n)}`, st = (e) => e ? "bg-accent text-primary" : "", rt = (e) => e ? "text-muted-foreground opacity-50" : "", ot = (e, t) => e === t, it = (e, t) => ot(e, t) ? "bg-primary text-primary-foreground" : "", lt = (e, t, n, a) => {
213
+ const s = it(t, a);
214
+ return s || (e ? st(e) : n ? rt(n) : "text-foreground");
215
+ }, N = (e) => {
213
216
  const {
214
217
  day: t,
215
- currentDate: e,
218
+ currentDate: n,
216
219
  date: a,
217
220
  isToday: s,
218
221
  isOutsideMonth: r,
219
222
  select: l,
220
223
  disabled: i
221
- } = n;
224
+ } = e;
222
225
  return L(
223
226
  {
224
227
  class: `
225
228
  flex items-center justify-center h-9 w-auto p-0 font-normal text-sm rounded-md
226
- ${it(s, e, r, a)}
229
+ ${lt(s, n, r, a)}
227
230
  hover:bg-muted/50 hover:text-muted-foreground focus:z-10
228
231
  disabled:pointer-events-none disabled:opacity-50
229
232
  `,
@@ -234,10 +237,10 @@ const q = j(({ src: n, alt: t }) => !n || n.indexOf(".") === -1 && n.indexOf("[[
234
237
  },
235
238
  t.toString()
236
239
  );
237
- }, O = (n, t, e, a) => n === a.date && t === a.month && e === a.year, lt = (n, t, e, a = !1) => {
238
- const { year: s, month: r } = n, l = w(s, r, n.date), i = new Date(s, r, 1).getDay(), d = new Date(s, r + 1, 0).getDate(), g = new Date(s, r, 0).getDate(), f = [], C = r === 0 ? 11 : r - 1, v = r === 0 ? s - 1 : s;
240
+ }, Y = (e, t, n, a) => e === a.date && t === a.month && n === a.year, ct = (e, t, n, a = !1) => {
241
+ const { year: s, month: r } = e, l = w(s, r, e.date), i = new Date(s, r, 1).getDay(), d = new Date(s, r + 1, 0).getDate(), g = new Date(s, r, 0).getDate(), f = [], C = r === 0 ? 11 : r - 1, v = r === 0 ? s - 1 : s;
239
242
  for (let o = i - 1; o >= 0; o--) {
240
- const u = g - o, p = O(u, C, v, t), y = new Date(v, C, u) < new Date(t.year, t.month, t.date), x = a && y;
243
+ const u = g - o, p = Y(u, C, v, t), y = new Date(v, C, u) < new Date(t.year, t.month, t.date), x = a && y;
241
244
  f.push(
242
245
  N({
243
246
  day: u,
@@ -245,13 +248,13 @@ const q = j(({ src: n, alt: t }) => !n || n.indexOf(".") === -1 && n.indexOf("[[
245
248
  date: w(v, C, u),
246
249
  isToday: p,
247
250
  isOutsideMonth: !0,
248
- select: e,
251
+ select: n,
249
252
  disabled: x
250
253
  })
251
254
  );
252
255
  }
253
256
  for (let o = 1; o <= d; o++) {
254
- const u = O(o, r, s, t), p = new Date(s, r, o) < new Date(t.year, t.month, t.date), y = a && p;
257
+ const u = Y(o, r, s, t), p = new Date(s, r, o) < new Date(t.year, t.month, t.date), y = a && p;
255
258
  f.push(
256
259
  N({
257
260
  day: o,
@@ -259,14 +262,14 @@ const q = j(({ src: n, alt: t }) => !n || n.indexOf(".") === -1 && n.indexOf("[[
259
262
  date: w(s, r, o),
260
263
  isToday: u,
261
264
  isOutsideMonth: !1,
262
- select: e,
265
+ select: n,
263
266
  disabled: y
264
267
  })
265
268
  );
266
269
  }
267
270
  const b = r === 11 ? 0 : r + 1, $ = r === 11 ? s + 1 : s, c = (7 - f.length % 7) % 7;
268
271
  for (let o = 1; o <= c; o++) {
269
- const u = O(o, b, $, t), p = new Date($, b, o) < new Date(t.year, t.month, t.date), y = a && p;
272
+ const u = Y(o, b, $, t), p = new Date($, b, o) < new Date(t.year, t.month, t.date), y = a && p;
270
273
  f.push(
271
274
  N({
272
275
  day: o,
@@ -274,59 +277,59 @@ const q = j(({ src: n, alt: t }) => !n || n.indexOf(".") === -1 && n.indexOf("[[
274
277
  date: w($, b, o),
275
278
  isToday: u,
276
279
  isOutsideMonth: !0,
277
- select: e,
280
+ select: n,
278
281
  disabled: y
279
282
  })
280
283
  );
281
284
  }
282
285
  return f;
283
- }, R = ({ label: n, click: t }) => m(
286
+ }, R = ({ label: e, click: t }) => m(
284
287
  {
285
288
  class: `
286
289
  inline-flex items-center justify-center h-7 w-7 bg-transparent p-0
287
290
  opacity-50 hover:opacity-100 text-muted-foreground absolute
288
- ${n === "Previous" ? "left-1" : "right-1"}
291
+ ${e === "Previous" ? "left-1" : "right-1"}
289
292
  focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2
290
293
  `,
291
294
  click: t,
292
- "aria-label": `${n} month`,
295
+ "aria-label": `${e} month`,
293
296
  variant: "icon",
294
- icon: n === "Previous" ? P.chevron.single.left : P.chevron.single.right
297
+ icon: e === "Previous" ? P.chevron.single.left : P.chevron.single.right
295
298
  }
296
- ), ct = ({ onMonthClick: n, onYearClick: t, next: e, previous: a }) => h({ class: "flex items-center justify-center gap-x-2 relative min-h-12 text-sm font-medium" }, [
297
- m({ click: n, variant: "ghost", "aria-label": "Select month" }, "[[monthName]]"),
299
+ ), ht = ({ onMonthClick: e, onYearClick: t, next: n, previous: a }) => h({ class: "flex items-center justify-center gap-x-2 relative min-h-12 text-sm font-medium" }, [
300
+ m({ click: e, variant: "ghost", "aria-label": "Select month" }, "[[monthName]]"),
298
301
  m({ click: t, variant: "ghost", "aria-label": "Select year" }, "[[current.year]]"),
299
302
  R({ label: "Previous", click: a }),
300
- R({ label: "Next", click: e })
301
- ]), ht = (n) => h(
303
+ R({ label: "Next", click: n })
304
+ ]), ut = (e) => h(
302
305
  { class: "flex items-center justify-center h-9 w-auto text-[0.8rem] font-normal text-muted-foreground" },
303
- n
304
- ), ut = () => ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"].map(ht), dt = (n) => h({ class: "rdp flex flex-auto flex-col w-full gap-y-1" }, [
305
- ct({
306
- onMonthClick: n.onMonthClick,
307
- onYearClick: n.onYearClick,
308
- next: n.next,
309
- previous: n.previous
306
+ e
307
+ ), dt = () => ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"].map(ut), gt = (e) => h({ class: "rdp flex flex-auto flex-col w-full gap-y-1" }, [
308
+ ht({
309
+ onMonthClick: e.onMonthClick,
310
+ onYearClick: e.onYearClick,
311
+ next: e.next,
312
+ previous: e.previous
310
313
  }),
311
314
  h({
312
315
  class: "flex flex-auto flex-col w-full",
313
316
  onSet: [
314
317
  "currentDate",
315
318
  () => [
316
- h({ class: "grid grid-cols-7" }, ut()),
319
+ h({ class: "grid grid-cols-7" }, dt()),
317
320
  h(
318
321
  { class: "grid grid-cols-7" },
319
- lt(
320
- n.current,
321
- n.today,
322
- n.select,
323
- n.blockPriorDates
322
+ ct(
323
+ e.current,
324
+ e.today,
325
+ e.select,
326
+ e.blockPriorDates
324
327
  )
325
328
  )
326
329
  ]
327
330
  ]
328
331
  })
329
- ]), gt = ({ currentMonth: n, currentYear: t, onSelect: e }) => {
332
+ ]), ft = ({ currentMonth: e, currentYear: t, onSelect: n }) => {
330
333
  const a = t - 50, s = Array.from({ length: 101 }, (r, l) => a + l);
331
334
  return h(
332
335
  { class: "grid grid-cols-4 gap-2 overflow-y-auto max-h-72" },
@@ -334,7 +337,7 @@ const q = j(({ src: n, alt: t }) => !n || n.indexOf(".") === -1 && n.indexOf("[[
334
337
  (r) => m(
335
338
  {
336
339
  click: (l) => {
337
- l.preventDefault(), l.stopPropagation(), e(r);
340
+ l.preventDefault(), l.stopPropagation(), n(r);
338
341
  },
339
342
  variant: r === t ? "primary" : "ghost",
340
343
  "aria-label": `Select ${r}`
@@ -344,7 +347,7 @@ const q = j(({ src: n, alt: t }) => !n || n.indexOf(".") === -1 && n.indexOf("[[
344
347
  )
345
348
  );
346
349
  };
347
- class Nt extends Y {
350
+ class Nt extends B {
348
351
  /**
349
352
  * This will declare the props for the compiler.
350
353
  *
@@ -360,8 +363,8 @@ class Nt extends Y {
360
363
  * @returns {Date}
361
364
  */
362
365
  getSelectedDate(t) {
363
- const e = this.selectedDate ? new Date(nt(this.selectedDate)) : t;
364
- return new Date(e.getFullYear(), e.getMonth(), e.getDate());
366
+ const n = this.selectedDate ? new Date(at(this.selectedDate)) : t;
367
+ return new Date(n.getFullYear(), n.getMonth(), n.getDate());
365
368
  }
366
369
  /**
367
370
  * This will set up the data for the calendar.
@@ -369,13 +372,13 @@ class Nt extends Y {
369
372
  * @returns {Data}
370
373
  */
371
374
  setData() {
372
- const t = /* @__PURE__ */ new Date(), e = this.getSelectedDate(t), a = e.getMonth();
373
- return new B({
375
+ const t = /* @__PURE__ */ new Date(), n = this.getSelectedDate(t), a = n.getMonth();
376
+ return new j({
374
377
  monthName: this.getMonthName(a),
375
- currentDate: `${e.getFullYear()}-${a + 1}-${e.getDate()}`,
378
+ currentDate: `${n.getFullYear()}-${a + 1}-${n.getDate()}`,
376
379
  current: {
377
- date: e.getDate(),
378
- year: e.getFullYear(),
380
+ date: n.getDate(),
381
+ year: n.getFullYear(),
379
382
  month: a
380
383
  },
381
384
  today: {
@@ -403,7 +406,7 @@ class Nt extends Y {
403
406
  * @returns {string}
404
407
  */
405
408
  getMonthName(t) {
406
- return T.monthNames[t];
409
+ return O.monthNames[t];
407
410
  }
408
411
  /**
409
412
  * This will go to the previous month.
@@ -412,8 +415,8 @@ class Nt extends Y {
412
415
  */
413
416
  goToPreviousMonth() {
414
417
  const t = this.data;
415
- let e = t.current.month, a = t.current.year;
416
- e === 0 ? (e = 11, a--) : e--, this.setCurrentDate(e, a);
418
+ let n = t.current.month, a = t.current.year;
419
+ n === 0 ? (n = 11, a--) : n--, this.setCurrentDate(n, a);
417
420
  }
418
421
  /**
419
422
  * This will go to the next month.
@@ -422,8 +425,8 @@ class Nt extends Y {
422
425
  */
423
426
  goToNextMonth() {
424
427
  const t = this.data;
425
- let e = t.current.month, a = t.current.year;
426
- e === 11 ? (e = 0, a++) : e++, this.setCurrentDate(e, a);
428
+ let n = t.current.month, a = t.current.year;
429
+ n === 11 ? (n = 0, a++) : n++, this.setCurrentDate(n, a);
427
430
  }
428
431
  /**
429
432
  * This will set the current month and year.
@@ -433,9 +436,9 @@ class Nt extends Y {
433
436
  * @param {number} [date=null]
434
437
  * @returns {void}
435
438
  */
436
- setCurrentDate(t, e, a = null) {
439
+ setCurrentDate(t, n, a = null) {
437
440
  const s = this.data;
438
- s.current.month = t, s.current.year = e, typeof a == "number" && (s.current.date = D(a)), s.currentDate = `${e}-${D(t + 1)}-${s.current.date}`, s.monthName = this.getMonthName(t);
441
+ s.current.month = t, s.current.year = n, typeof a == "number" && (s.current.date = D(a)), s.currentDate = `${n}-${D(t + 1)}-${s.current.date}`, s.monthName = this.getMonthName(t);
439
442
  }
440
443
  /**
441
444
  * This will select a date.
@@ -444,8 +447,8 @@ class Nt extends Y {
444
447
  * @returns {void}
445
448
  */
446
449
  selectDate(t) {
447
- const e = /* @__PURE__ */ new Date(t + "T00:00:00");
448
- this.setCurrentDate(e.getMonth(), e.getFullYear(), e.getDate()), typeof this.selectedCallBack == "function" && this.selectedCallBack(this.data.currentDate);
450
+ const n = /* @__PURE__ */ new Date(t + "T00:00:00");
451
+ this.setCurrentDate(n.getMonth(), n.getFullYear(), n.getDate()), typeof this.selectedCallBack == "function" && this.selectedCallBack(this.data.currentDate);
449
452
  }
450
453
  /**
451
454
  * This will render the calendar.
@@ -457,38 +460,38 @@ class Nt extends Y {
457
460
  J("view", (t) => {
458
461
  switch (t) {
459
462
  case "months":
460
- return et(
463
+ return nt(
461
464
  {
462
465
  currentMonth: this.data.current.month,
463
466
  currentYear: this.data.current.year,
464
- onSelect: (e) => {
465
- this.setCurrentDate(e, this.data.current.year), this.state.view = "calendar";
467
+ onSelect: (n) => {
468
+ this.setCurrentDate(n, this.data.current.year), this.state.view = "calendar";
466
469
  }
467
470
  }
468
471
  );
469
472
  case "years":
470
- return gt(
473
+ return ft(
471
474
  {
472
475
  currentMonth: this.data.current.month,
473
476
  currentYear: this.data.current.year,
474
- onSelect: (e) => {
475
- this.setCurrentDate(this.data.current.month, e), this.state.view = "calendar";
477
+ onSelect: (n) => {
478
+ this.setCurrentDate(this.data.current.month, n), this.state.view = "calendar";
476
479
  }
477
480
  }
478
481
  );
479
482
  default:
480
- return dt({
483
+ return gt({
481
484
  current: this.data.current,
482
485
  today: this.data.today,
483
- select: (e) => this.selectDate(e),
486
+ select: (n) => this.selectDate(n),
484
487
  next: () => this.goToNextMonth(),
485
488
  previous: () => this.goToPreviousMonth(),
486
489
  blockPriorDates: this.blockPriorDates || !1,
487
- onMonthClick: (e) => {
488
- e.preventDefault(), e.stopPropagation(), this.state.view = "months";
490
+ onMonthClick: (n) => {
491
+ n.preventDefault(), n.stopPropagation(), this.state.view = "months";
489
492
  },
490
- onYearClick: (e) => {
491
- e.preventDefault(), e.stopPropagation(), this.state.view = "years";
493
+ onYearClick: (n) => {
494
+ n.preventDefault(), n.stopPropagation(), this.state.view = "years";
492
495
  }
493
496
  });
494
497
  }
@@ -496,44 +499,44 @@ class Nt extends Y {
496
499
  ]);
497
500
  }
498
501
  }
499
- const W = ({ label: n, click: t }) => m(
502
+ const W = ({ label: e, click: t }) => m(
500
503
  {
501
504
  class: `
502
505
  inline-flex items-center justify-center h-7 w-7 bg-transparent p-0
503
506
  opacity-50 hover:opacity-100 text-muted-foreground absolute
504
- ${n === "Previous" ? "left-1" : "right-1"}
507
+ ${e === "Previous" ? "left-1" : "right-1"}
505
508
  focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2
506
509
  `,
507
510
  click: t,
508
- "aria-label": `${n} month`,
511
+ "aria-label": `${e} month`,
509
512
  variant: "icon",
510
- icon: n === "Previous" ? P.chevron.single.left : P.chevron.single.right
513
+ icon: e === "Previous" ? P.chevron.single.left : P.chevron.single.right
511
514
  }
512
- ), ft = ({ onMonthClick: n, onYearClick: t, next: e, previous: a }) => h({ class: "flex items-center justify-center gap-x-2 relative min-h-12 text-sm font-medium" }, [
513
- m({ click: n, variant: "ghost", "aria-label": "Select month" }, "[[monthName]]"),
515
+ ), mt = ({ onMonthClick: e, onYearClick: t, next: n, previous: a }) => h({ class: "flex items-center justify-center gap-x-2 relative min-h-12 text-sm font-medium" }, [
516
+ m({ click: e, variant: "ghost", "aria-label": "Select month" }, "[[monthName]]"),
514
517
  m({ click: t, variant: "ghost", "aria-label": "Select year" }, "[[current.year]]"),
515
518
  W({ label: "Previous", click: a }),
516
- W({ label: "Next", click: e })
517
- ]), mt = (n) => h({ class: "h-9 flex items-center justify-center font-medium" }, n), pt = () => h(
519
+ W({ label: "Next", click: n })
520
+ ]), pt = (e) => h({ class: "h-9 flex items-center justify-center font-medium" }, e), yt = () => h(
518
521
  { class: "grid grid-cols-7 gap-1 text-center text-xs font-medium text-muted-foreground mb-2" },
519
- ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"].map(mt)
520
- ), yt = ({ day: n, iso: t, disabled: e, isStart: a, isEnd: s, isBetween: r, isOtherMonth: l, click: i }) => {
522
+ ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"].map(pt)
523
+ ), Dt = ({ day: e, iso: t, disabled: n, isStart: a, isEnd: s, isBetween: r, isOtherMonth: l, click: i }) => {
521
524
  let d = "ghost", g = "";
522
- return a || s ? (d = "default", g = "bg-primary text-primary-foreground hover:bg-primary/90") : r && (g = "bg-accent text-accent-foreground hover:bg-accent/80"), e && (g += " opacity-50 cursor-not-allowed"), l && (g += " text-muted-foreground opacity-50"), m(
525
+ return a || s ? (d = "default", g = "bg-primary text-primary-foreground hover:bg-primary/90") : r && (g = "bg-accent text-accent-foreground hover:bg-accent/80"), n && (g += " opacity-50 cursor-not-allowed"), l && (g += " text-muted-foreground opacity-50"), m(
523
526
  {
524
527
  class: `flex items-center justify-center p-0 text-sm font-medium rounded-md transition-colors ${g}`,
525
528
  variant: d,
526
- disabled: e,
529
+ disabled: n,
527
530
  click: (f) => {
528
- f.preventDefault(), f.stopPropagation(), e || i();
531
+ f.preventDefault(), f.stopPropagation(), n || i();
529
532
  }
530
533
  },
531
- n.toString()
534
+ e.toString()
532
535
  );
533
- }, Dt = ({ today: n, current: t, blockPriorDates: e, onDateClick: a }) => {
536
+ }, xt = ({ today: e, current: t, blockPriorDates: n, onDateClick: a }) => {
534
537
  const { start: s, end: r } = t, l = new Date(t.year, t.month, 1).getDay(), i = new Date(t.year, t.month + 1, 0).getDate(), d = [], g = t.month === 0 ? 11 : t.month - 1, f = t.month === 0 ? t.year - 1 : t.year, C = new Date(f, g + 1, 0).getDate(), v = t.month === 11 ? 0 : t.month + 1, b = t.month === 11 ? t.year + 1 : t.year;
535
538
  for (let c = l - 1; c >= 0; c--) {
536
- const o = C - c, u = w(f, g, o), p = new Date(f, g, o), y = new Date(n.year, n.month, n.date), x = p < y, M = e && x, S = s === u, k = r === u, X = s && r && u > s && u < r;
539
+ const o = C - c, u = w(f, g, o), p = new Date(f, g, o), y = new Date(e.year, e.month, e.date), x = p < y, M = n && x, S = s === u, k = r === u, X = s && r && u > s && u < r;
537
540
  d.push({
538
541
  day: o,
539
542
  iso: u,
@@ -546,7 +549,7 @@ const W = ({ label: n, click: t }) => m(
546
549
  });
547
550
  }
548
551
  for (let c = 1; c <= i; c++) {
549
- const o = w(t.year, t.month, c), u = new Date(t.year, t.month, c), p = new Date(n.year, n.month, n.date), y = u < p, x = e && y, M = s === o, S = r === o, k = s && r && o > s && o < r;
552
+ const o = w(t.year, t.month, c), u = new Date(t.year, t.month, c), p = new Date(e.year, e.month, e.date), y = u < p, x = n && y, M = s === o, S = r === o, k = s && r && o > s && o < r;
550
553
  d.push({
551
554
  day: c,
552
555
  iso: o,
@@ -562,7 +565,7 @@ const W = ({ label: n, click: t }) => m(
562
565
  }
563
566
  const F = (7 - d.length % 7) % 7;
564
567
  for (let c = 1; c <= F; c++) {
565
- const o = w(b, v, c), u = new Date(b, v, c), p = new Date(n.year, n.month, n.date), y = u < p, x = e && y, M = s === o, S = r === o, k = s && r && o > s && o < r;
568
+ const o = w(b, v, c), u = new Date(b, v, c), p = new Date(e.year, e.month, e.date), y = u < p, x = n && y, M = s === o, S = r === o, k = s && r && o > s && o < r;
566
569
  d.push({
567
570
  day: c,
568
571
  iso: o,
@@ -577,7 +580,7 @@ const W = ({ label: n, click: t }) => m(
577
580
  return h(
578
581
  { class: "grid grid-cols-7 gap-1" },
579
582
  d.map(
580
- (c, o) => yt({
583
+ (c, o) => Dt({
581
584
  day: c.day,
582
585
  iso: c.iso,
583
586
  disabled: c.disabled,
@@ -589,43 +592,43 @@ const W = ({ label: n, click: t }) => m(
589
592
  })
590
593
  )
591
594
  );
592
- }, xt = j((n, t) => h({ class: "flex flex-auto flex-col" }, [
593
- ft({
594
- onMonthClick: n.onMonthClick,
595
- onYearClick: n.onYearClick,
596
- next: n.next,
597
- previous: n.previous
595
+ }, wt = T((e, t) => h({ class: "flex flex-auto flex-col" }, [
596
+ mt({
597
+ onMonthClick: e.onMonthClick,
598
+ onYearClick: e.onYearClick,
599
+ next: e.next,
600
+ previous: e.previous
598
601
  }),
599
602
  h({
600
603
  class: "flex flex-auto flex-col w-full",
601
604
  onSet: [
602
605
  "currentDate",
603
606
  () => [
604
- pt(),
605
- Dt({
606
- today: n.today,
607
- current: n.current,
608
- blockPriorDates: n.blockPriorDates,
609
- onDateClick: n.onDateClick
607
+ yt(),
608
+ xt({
609
+ today: e.today,
610
+ current: e.current,
611
+ blockPriorDates: e.blockPriorDates,
612
+ onDateClick: e.onDateClick
610
613
  })
611
614
  ]
612
615
  ]
613
616
  })
614
- ])), wt = ({ currentMonth: n, currentYear: t, onSelect: e }) => h(
617
+ ])), vt = ({ currentMonth: e, currentYear: t, onSelect: n }) => h(
615
618
  { class: "grid grid-cols-3 gap-2" },
616
- T.monthNames.map(
619
+ O.monthNames.map(
617
620
  (a, s) => m(
618
621
  {
619
622
  click: (r) => {
620
- r.preventDefault(), r.stopPropagation(), e(s);
623
+ r.preventDefault(), r.stopPropagation(), n(s);
621
624
  },
622
- variant: n === s ? "primary" : "ghost",
625
+ variant: e === s ? "primary" : "ghost",
623
626
  "aria-label": `Select ${a} ${t}`
624
627
  },
625
628
  a.substring(0, 3)
626
629
  )
627
630
  )
628
- ), vt = ({ start: n, end: t, selecting: e, onSelectStart: a, onSelectEnd: s }) => h({ class: "flex gap-x-2 mb-4" }, [
631
+ ), bt = ({ start: e, end: t, selecting: n, onSelectStart: a, onSelectEnd: s }) => h({ class: "flex gap-x-2 mb-4" }, [
629
632
  z("selecting", (r) => m({
630
633
  click: a,
631
634
  variant: r === "start" ? "primary" : "outline",
@@ -640,11 +643,11 @@ const W = ({ label: n, click: t }) => m(
640
643
  }, [
641
644
  h({ class: "font-medium" }, E("current.end", "End Date"))
642
645
  ]))
643
- ]), E = (n, t) => [`[[${n}]]`, (e) => e == null ? t : bt(e)], bt = (n) => {
644
- const t = /* @__PURE__ */ new Date(n + "T00:00:00"), e = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], a = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
645
- return `${e[t.getDay()]}, ${t.getDate()} ${a[t.getMonth()]}`;
646
- }, Ct = ({ currentYear: n, onSelect: t }) => {
647
- const e = n - 50, a = Array.from({ length: 101 }, (s, r) => e + r);
646
+ ]), E = (e, t) => [`[[${e}]]`, (n) => n == null ? t : Ct(n)], Ct = (e) => {
647
+ const t = /* @__PURE__ */ new Date(e + "T00:00:00"), n = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], a = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
648
+ return `${n[t.getDay()]}, ${t.getDate()} ${a[t.getMonth()]}`;
649
+ }, Mt = ({ currentYear: e, onSelect: t }) => {
650
+ const n = e - 50, a = Array.from({ length: 101 }, (s, r) => n + r);
648
651
  return h(
649
652
  { class: "grid grid-cols-4 gap-2 overflow-y-auto max-h-72" },
650
653
  a.map(
@@ -653,7 +656,7 @@ const W = ({ label: n, click: t }) => m(
653
656
  click: (r) => {
654
657
  r.preventDefault(), r.stopPropagation(), t(s);
655
658
  },
656
- variant: s === n ? "primary" : "ghost",
659
+ variant: s === e ? "primary" : "ghost",
657
660
  "aria-label": `Select ${s}`
658
661
  },
659
662
  s.toString()
@@ -661,7 +664,7 @@ const W = ({ label: n, click: t }) => m(
661
664
  )
662
665
  );
663
666
  };
664
- class Ot extends Y {
667
+ class Yt extends B {
665
668
  /**
666
669
  * Declare compiler props.
667
670
  *
@@ -676,15 +679,15 @@ class Ot extends Y {
676
679
  * @returns {Data}
677
680
  */
678
681
  setData() {
679
- const t = /* @__PURE__ */ new Date(), e = this.startDate ? /* @__PURE__ */ new Date(this.startDate + "T00:00:00") : t, a = e.getMonth(), s = e.getFullYear();
680
- return new B({
682
+ const t = /* @__PURE__ */ new Date(), n = this.startDate ? /* @__PURE__ */ new Date(this.startDate + "T00:00:00") : t, a = n.getMonth(), s = n.getFullYear();
683
+ return new j({
681
684
  today: {
682
685
  date: t.getDate(),
683
686
  month: t.getMonth(),
684
687
  year: t.getFullYear()
685
688
  },
686
689
  monthName: this.getMonthName(a),
687
- currentData: `${e.getFullYear()}-${D(e.getMonth() + 1)}-${D(e.getDate())}`,
690
+ currentData: `${n.getFullYear()}-${D(n.getMonth() + 1)}-${D(n.getDate())}`,
688
691
  current: {
689
692
  date: t.getDate(),
690
693
  month: a,
@@ -702,7 +705,7 @@ class Ot extends Y {
702
705
  * @returns {string}
703
706
  */
704
707
  getMonthName(t) {
705
- return T.monthNames[t];
708
+ return O.monthNames[t];
706
709
  }
707
710
  /**
708
711
  * Initialize component state.
@@ -724,19 +727,19 @@ class Ot extends Y {
724
727
  handleClick(t) {
725
728
  if (this.data.selecting === "start") {
726
729
  this.data.current.start = t, this.data.current.end = null, this.data.selecting = "end";
727
- const e = /* @__PURE__ */ new Date(t + "T00:00:00");
730
+ const n = /* @__PURE__ */ new Date(t + "T00:00:00");
728
731
  this.setCurrent({
729
- month: e.getMonth(),
730
- year: e.getFullYear(),
731
- date: e.getDate()
732
+ month: n.getMonth(),
733
+ year: n.getFullYear(),
734
+ date: n.getDate()
732
735
  });
733
736
  } else {
734
737
  this.data.current.start && t < this.data.current.start ? (this.data.current.end = this.data.current.start, this.data.current.start = t) : this.data.current.end = t, this.data.selecting = "start";
735
- const e = /* @__PURE__ */ new Date(t + "T00:00:00");
738
+ const n = /* @__PURE__ */ new Date(t + "T00:00:00");
736
739
  this.setCurrent({
737
- month: e.getMonth(),
738
- year: e.getFullYear(),
739
- date: e.getDate()
740
+ month: n.getMonth(),
741
+ year: n.getFullYear(),
742
+ date: n.getDate()
740
743
  }), typeof this.onRangeSelect == "function" && this.onRangeSelect(this.data.current.start, this.data.current.end);
741
744
  }
742
745
  }
@@ -746,9 +749,9 @@ class Ot extends Y {
746
749
  * @param {object} obj
747
750
  * @returns {void}
748
751
  */
749
- setCurrent({ month: t, year: e, date: a = null }) {
752
+ setCurrent({ month: t, year: n, date: a = null }) {
750
753
  const s = this.data.current;
751
- s.month = (t + 12) % 12, s.year = e + (t < 0 ? -1 : t > 11 ? 1 : 0), a !== null && (s.date = a), this.data.monthName = this.getMonthName(s.month), this.data.currentDate = `${e}-${D(t + 1)}-${D(s.date)}`;
754
+ s.month = (t + 12) % 12, s.year = n + (t < 0 ? -1 : t > 11 ? 1 : 0), a !== null && (s.date = a), this.data.monthName = this.getMonthName(s.month), this.data.currentDate = `${n}-${D(t + 1)}-${D(s.date)}`;
752
755
  }
753
756
  /**
754
757
  * Render the range calendar.
@@ -756,9 +759,9 @@ class Ot extends Y {
756
759
  * @returns {object}
757
760
  */
758
761
  render() {
759
- const { today: t, current: e, selecting: a } = this.data, { start: s, end: r } = e;
762
+ const { today: t, current: n, selecting: a } = this.data, { start: s, end: r } = n;
760
763
  return h({ class: "range-calendar border border-border rounded-lg shadow-md p-4 w-full max-w-sm min-w-80" }, [
761
- vt({
764
+ bt({
762
765
  start: s,
763
766
  end: r,
764
767
  selecting: a,
@@ -772,30 +775,30 @@ class Ot extends Y {
772
775
  J("view", (l) => {
773
776
  switch (l) {
774
777
  case "months":
775
- return wt(
778
+ return vt(
776
779
  {
777
- currentMonth: e.month,
778
- currentYear: e.year,
780
+ currentMonth: n.month,
781
+ currentYear: n.year,
779
782
  onSelect: (i) => {
780
- this.setCurrent({ month: i, year: e.year }), this.state.view = "calendar";
783
+ this.setCurrent({ month: i, year: n.year }), this.state.view = "calendar";
781
784
  }
782
785
  }
783
786
  );
784
787
  case "years":
785
- return Ct(
788
+ return Mt(
786
789
  {
787
- currentYear: e.year,
790
+ currentYear: n.year,
788
791
  onSelect: (i) => {
789
- this.setCurrent({ month: e.month, year: i }), this.state.view = "calendar";
792
+ this.setCurrent({ month: n.month, year: i }), this.state.view = "calendar";
790
793
  }
791
794
  }
792
795
  );
793
796
  default:
794
- return xt({
797
+ return wt({
795
798
  monthName: this.data.monthName,
796
- year: e.year,
799
+ year: n.year,
797
800
  today: t,
798
- current: e,
801
+ current: n,
799
802
  blockPriorDates: this.blockPriorDates,
800
803
  onDateClick: (i) => this.handleClick(i),
801
804
  onMonthClick: (i) => {
@@ -819,16 +822,16 @@ class Ot extends Y {
819
822
  }
820
823
  }
821
824
  export {
822
- Tt as A,
823
- lt as C,
825
+ Ot as A,
826
+ ct as C,
824
827
  N as D,
825
828
  w as F,
826
- dt as M,
827
- Pt as P,
828
- Ot as R,
829
- ht as a,
829
+ gt as M,
830
+ Tt as P,
831
+ Yt as R,
832
+ ut as a,
830
833
  Nt as b,
831
- nt as c,
834
+ at as c,
832
835
  U as g,
833
836
  D as p
834
837
  };
@@ -4,7 +4,7 @@ import { B as P, I as J } from "./buttons-CHEs54Wl.js";
4
4
  import { Icons as S } from "./icons.es.js";
5
5
  import { TableBody as Z, DataTableBody as ee, ScrollableTableBody as te, List as se, IntervalTimer as ae } from "@base-framework/organisms";
6
6
  import { C as ie, I as ne, H as oe } from "./inputs-9udyzkHR.js";
7
- import { A as le, P as re } from "./range-calendar-CCVC3e9d.js";
7
+ import { A as le, P as re } from "./range-calendar-DqVS8ooC.js";
8
8
  import { V as g } from "./veil-CqnAmj-D.js";
9
9
  d((t, e) => ({
10
10
  class: "flex items-center px-4 py-2",
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Image
3
+ *
4
+ * Creates an image element, hiding it on error.
5
+ *
6
+ * @param {object} props
7
+ * @returns {object}
8
+ */
9
+ export const Image: Function;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@base-framework/ui",
3
- "version": "1.0.2014",
3
+ "version": "1.0.2016",
4
4
  "description": "This is a UI package that adds components and atoms that use Tailwind CSS and a theme based on Shadcn.",
5
5
  "main": "./dist/index.es.js",
6
6
  "scripts": {