@devjuliovilla/jv-ui 1.5.6 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -44,7 +44,8 @@ export class App {}
44
44
  | Buttons | `JvButton`, `JvButtonGroup`, `JvIconButton` |
45
45
  | Forms | `JvInput`, `JvTextarea`, `JvSelect`, `JvCheckbox`, `JvRadio`, `JvSwitch`, `JvFormContainer` |
46
46
  | Data Grid | `JvGrid` — full-featured data table (see below) |
47
- | Containers | `JvCard`, `JvSection`, `JvDivider` |
47
+ | Containeres | `JvCard`, `JvSection`, `JvDivider` |
48
+ | List | `JvList`, `JvListItem` — list with title, description, icons, badges, and interactive items |
48
49
  | Feedback | `JvAlert`, `JvBadge`, `JvLoader`, `JvToast` |
49
50
  | Dialogs | `JvDialog`, `JvConfirmDialog` |
50
51
  | Layout | `JvDashboardShell`, `JvSidebar`, `JvTopbar`, `JvBreadcrumb`, `JvPage` |
@@ -196,6 +197,83 @@ export class ProductsComponent {
196
197
  }
197
198
  ```
198
199
 
200
+ ## List API
201
+
202
+ ```typescript
203
+ import { JvListComponent, JvListItemComponent } from '@devjuliovilla/jv-ui';
204
+ ```
205
+
206
+ **JvList inputs:**
207
+
208
+ | Input | Type | Default | Description |
209
+ |---|---|---|---|
210
+ | `role` | `'list' \| 'navigation'` | `'list'` | ARIA role for the list |
211
+ | `variant` | `'bordered' \| null` | `null` | Outer border + border-radius around the list (items always have bottom border) |
212
+ | `ariaLabel` | `string` | `''` | Accessible label |
213
+
214
+ **JvListItem inputs:**
215
+
216
+ | Input | Type | Default | Description |
217
+ |---|---|---|---|
218
+ | `title` | `string` (required) | — | Primary text |
219
+ | `description` | `string` | `''` | Secondary text below title |
220
+ | `leadingIcon` | `string \| null` | `null` | Lucide icon name on the left |
221
+ | `disabled` | `boolean` | `false` | Gray out and block interaction |
222
+ | `active` | `boolean` | `false` | Highlight with primary color and left border |
223
+
224
+ **JvListItem outputs:**
225
+
226
+ | Output | Type |
227
+ |---|---|
228
+ | `activated` | `void` |
229
+
230
+ **Content projection:** use the `meta` attribute selector for badges, icons, or any content on the right side:
231
+
232
+ ```html
233
+ <jv-list-item title="Inbox" description="New messages">
234
+ <jv-badge tone="primary" meta>3</jv-badge>
235
+ <jv-icon name="chevron-right" meta />
236
+ </jv-list-item>
237
+ ```
238
+
239
+ ### Example
240
+
241
+ ```typescript
242
+ import { Component } from '@angular/core';
243
+ import { JvListComponent, JvListItemComponent, JvBadgeComponent } from '@devjuliovilla/jv-ui';
244
+
245
+ @Component({
246
+ selector: 'app-nav-list',
247
+ standalone: true,
248
+ imports: [JvListComponent, JvListItemComponent, JvBadgeComponent],
249
+ template: `
250
+ <jv-list variant="bordered">
251
+ <jv-list-item
252
+ title="Dashboard"
253
+ description="Main overview"
254
+ leadingIcon="layout-dashboard"
255
+ [active]="true"
256
+ />
257
+ <jv-list-item
258
+ title="Notifications"
259
+ description="3 pending"
260
+ (activated)="onOpen()"
261
+ >
262
+ <jv-badge tone="primary" meta>3</jv-badge>
263
+ </jv-list-item>
264
+ <jv-list-item
265
+ title="Reports"
266
+ description="Coming soon"
267
+ [disabled]="true"
268
+ />
269
+ </jv-list>
270
+ `,
271
+ })
272
+ export class NavListComponent {
273
+ onOpen() { /* handle activation */ }
274
+ }
275
+ ```
276
+
199
277
  ## Pagination API
200
278
 
201
279
  ```typescript
@@ -18886,6 +18886,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
18886
18886
  }] });
18887
18887
 
18888
18888
  const ES = {
18889
+ 'list.emptyMessage': 'No hay elementos',
18889
18890
  'grid.emptyMessage': 'No hay registros',
18890
18891
  'grid.noResults': 'No se encontraron resultados',
18891
18892
  'grid.searchPlaceholder': 'Buscar...',
@@ -18921,6 +18922,7 @@ const ES = {
18921
18922
  };
18922
18923
 
18923
18924
  const EN = {
18925
+ 'list.emptyMessage': 'No items',
18924
18926
  'grid.emptyMessage': 'No records found',
18925
18927
  'grid.noResults': 'No results found',
18926
18928
  'grid.searchPlaceholder': 'Search...',
@@ -19425,24 +19427,24 @@ class JvTextareaComponent {
19425
19427
  useExisting: forwardRef(() => JvTextareaComponent),
19426
19428
  multi: true,
19427
19429
  },
19428
- ], ngImport: i0, template: `
19429
- <textarea
19430
- class="jv-textarea"
19431
- [class.is-invalid]="invalid()"
19432
- [id]="inputId()"
19433
- [value]="value"
19434
- [placeholder]="placeholder()"
19435
- [required]="required()"
19436
- [disabled]="disabled"
19437
- [readonly]="readonly()"
19438
- [rows]="rows()"
19439
- [cols]="cols()"
19440
- [attr.maxlength]="maxlength() ?? null"
19441
- [attr.aria-invalid]="invalid() ? 'true' : null"
19442
- [attr.aria-describedby]="describedBy() || null"
19443
- (input)="handleInput($event)"
19444
- (blur)="handleBlur()"
19445
- ></textarea>
19430
+ ], ngImport: i0, template: `
19431
+ <textarea
19432
+ class="jv-textarea"
19433
+ [class.is-invalid]="invalid()"
19434
+ [id]="inputId()"
19435
+ [value]="value"
19436
+ [placeholder]="placeholder()"
19437
+ [required]="required()"
19438
+ [disabled]="disabled"
19439
+ [readonly]="readonly()"
19440
+ [rows]="rows()"
19441
+ [cols]="cols()"
19442
+ [attr.maxlength]="maxlength() ?? null"
19443
+ [attr.aria-invalid]="invalid() ? 'true' : null"
19444
+ [attr.aria-describedby]="describedBy() || null"
19445
+ (input)="handleInput($event)"
19446
+ (blur)="handleBlur()"
19447
+ ></textarea>
19446
19448
  `, isInline: true, styles: [".jv-textarea{width:100%;min-height:var(--jv-density-control-height);padding:var(--jv-spacing-sm) var(--jv-spacing-md);border:1px solid var(--jv-color-border);border-radius:var(--jv-radius-md);background:var(--jv-color-surface);color:var(--jv-color-foreground);resize:vertical;font-family:inherit;font-size:inherit;line-height:inherit;box-sizing:border-box}.jv-textarea::placeholder{color:var(--jv-color-foreground-muted)}.jv-textarea.is-invalid{border-color:var(--jv-color-danger)}.jv-textarea:disabled{opacity:.7;cursor:not-allowed}.jv-textarea:read-only{background:var(--jv-color-surface-muted);cursor:default}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
19447
19449
  }
19448
19450
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: JvTextareaComponent, decorators: [{
@@ -19453,24 +19455,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
19453
19455
  useExisting: forwardRef(() => JvTextareaComponent),
19454
19456
  multi: true,
19455
19457
  },
19456
- ], template: `
19457
- <textarea
19458
- class="jv-textarea"
19459
- [class.is-invalid]="invalid()"
19460
- [id]="inputId()"
19461
- [value]="value"
19462
- [placeholder]="placeholder()"
19463
- [required]="required()"
19464
- [disabled]="disabled"
19465
- [readonly]="readonly()"
19466
- [rows]="rows()"
19467
- [cols]="cols()"
19468
- [attr.maxlength]="maxlength() ?? null"
19469
- [attr.aria-invalid]="invalid() ? 'true' : null"
19470
- [attr.aria-describedby]="describedBy() || null"
19471
- (input)="handleInput($event)"
19472
- (blur)="handleBlur()"
19473
- ></textarea>
19458
+ ], template: `
19459
+ <textarea
19460
+ class="jv-textarea"
19461
+ [class.is-invalid]="invalid()"
19462
+ [id]="inputId()"
19463
+ [value]="value"
19464
+ [placeholder]="placeholder()"
19465
+ [required]="required()"
19466
+ [disabled]="disabled"
19467
+ [readonly]="readonly()"
19468
+ [rows]="rows()"
19469
+ [cols]="cols()"
19470
+ [attr.maxlength]="maxlength() ?? null"
19471
+ [attr.aria-invalid]="invalid() ? 'true' : null"
19472
+ [attr.aria-describedby]="describedBy() || null"
19473
+ (input)="handleInput($event)"
19474
+ (blur)="handleBlur()"
19475
+ ></textarea>
19474
19476
  `, styles: [".jv-textarea{width:100%;min-height:var(--jv-density-control-height);padding:var(--jv-spacing-sm) var(--jv-spacing-md);border:1px solid var(--jv-color-border);border-radius:var(--jv-radius-md);background:var(--jv-color-surface);color:var(--jv-color-foreground);resize:vertical;font-family:inherit;font-size:inherit;line-height:inherit;box-sizing:border-box}.jv-textarea::placeholder{color:var(--jv-color-foreground-muted)}.jv-textarea.is-invalid{border-color:var(--jv-color-danger)}.jv-textarea:disabled{opacity:.7;cursor:not-allowed}.jv-textarea:read-only{background:var(--jv-color-surface-muted);cursor:default}\n"] }]
19475
19477
  }], propDecorators: { placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], describedBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "describedBy", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], cols: [{ type: i0.Input, args: [{ isSignal: true, alias: "cols", required: false }] }], maxlength: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxlength", required: false }] }], inputId: [{ type: i0.Input, args: [{ isSignal: true, alias: "inputId", required: false }] }] } });
19476
19478
 
@@ -20281,6 +20283,108 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
20281
20283
  `, styles: [".jv-page{display:grid;gap:var(--jv-spacing-lg);min-width:0}.jv-page-header{display:grid;gap:var(--jv-spacing-sm)}.jv-page-content{min-width:0}.eyebrow{margin:0;color:var(--jv-color-primary);font-size:.75rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase}h1,.description{margin:0}.description{color:var(--jv-color-foreground-muted);max-width:72ch}\n"] }]
20282
20284
  }], propDecorators: { eyebrow: [{ type: i0.Input, args: [{ isSignal: true, alias: "eyebrow", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }], breadcrumbs: [{ type: i0.Input, args: [{ isSignal: true, alias: "breadcrumbs", required: false }] }] } });
20283
20285
 
20286
+ class JvListComponent {
20287
+ role = input('list', ...(ngDevMode ? [{ debugName: "role" }] : /* istanbul ignore next */ []));
20288
+ variant = input(null, ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
20289
+ ariaLabel = input('', ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
20290
+ variantClass = computed(() => {
20291
+ const v = this.variant();
20292
+ return v ? `jv-list--${v}` : '';
20293
+ }, ...(ngDevMode ? [{ debugName: "variantClass" }] : /* istanbul ignore next */ []));
20294
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: JvListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
20295
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.17", type: JvListComponent, isStandalone: true, selector: "jv-list", inputs: { role: { classPropertyName: "role", publicName: "role", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
20296
+ <ul
20297
+ class="jv-list"
20298
+ [class]="variantClass()"
20299
+ [attr.role]="role() === 'navigation' ? 'list' : null"
20300
+ [attr.aria-label]="ariaLabel()"
20301
+ >
20302
+ <ng-content />
20303
+ </ul>
20304
+ `, isInline: true, styles: [".jv-list{display:block;list-style:none;margin:0;padding:0}.jv-list>:not(:last-child){border-bottom:1px solid var(--jv-color-border)}.jv-list--bordered{border:1px solid var(--jv-color-border);border-radius:var(--jv-radius-md)}\n"] });
20305
+ }
20306
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: JvListComponent, decorators: [{
20307
+ type: Component,
20308
+ args: [{ selector: 'jv-list', standalone: true, template: `
20309
+ <ul
20310
+ class="jv-list"
20311
+ [class]="variantClass()"
20312
+ [attr.role]="role() === 'navigation' ? 'list' : null"
20313
+ [attr.aria-label]="ariaLabel()"
20314
+ >
20315
+ <ng-content />
20316
+ </ul>
20317
+ `, styles: [".jv-list{display:block;list-style:none;margin:0;padding:0}.jv-list>:not(:last-child){border-bottom:1px solid var(--jv-color-border)}.jv-list--bordered{border:1px solid var(--jv-color-border);border-radius:var(--jv-radius-md)}\n"] }]
20318
+ }], propDecorators: { role: [{ type: i0.Input, args: [{ isSignal: true, alias: "role", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }] } });
20319
+
20320
+ class JvListItemComponent {
20321
+ title = input.required(...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
20322
+ description = input('', ...(ngDevMode ? [{ debugName: "description" }] : /* istanbul ignore next */ []));
20323
+ leadingIcon = input(null, ...(ngDevMode ? [{ debugName: "leadingIcon" }] : /* istanbul ignore next */ []));
20324
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
20325
+ active = input(false, ...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
20326
+ activated = output();
20327
+ onActivate() {
20328
+ if (!this.disabled()) {
20329
+ this.activated.emit();
20330
+ }
20331
+ }
20332
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: JvListItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
20333
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: JvListItemComponent, isStandalone: true, selector: "jv-list-item", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, leadingIcon: { classPropertyName: "leadingIcon", publicName: "leadingIcon", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activated: "activated" }, ngImport: i0, template: `
20334
+ <li
20335
+ class="jv-list-item"
20336
+ [class.jv-list-item--disabled]="disabled()"
20337
+ [class.jv-list-item--active]="active()"
20338
+ tabindex="0"
20339
+ role="listitem"
20340
+ (click)="onActivate()"
20341
+ (keydown.enter)="onActivate()"
20342
+ (keydown.space)="onActivate(); $event.preventDefault()"
20343
+ >
20344
+ @if (leadingIcon()) {
20345
+ <jv-icon [name]="leadingIcon()!" class="jv-list-item-leading" [size]="18" />
20346
+ }
20347
+ <div class="jv-list-item-text">
20348
+ <span class="jv-list-item-title">{{ title() }}</span>
20349
+ @if (description()) {
20350
+ <span class="jv-list-item-description">{{ description() }}</span>
20351
+ }
20352
+ </div>
20353
+ <div class="jv-list-item-meta">
20354
+ <ng-content select="[meta]" />
20355
+ </div>
20356
+ </li>
20357
+ `, isInline: true, styles: [":host{display:block}.jv-list-item{display:flex;align-items:center;gap:var(--jv-spacing-md);padding:var(--jv-spacing-md);background:var(--jv-color-surface);cursor:default;outline:none;transition:background-color .16s ease}.jv-list-item:hover{background:var(--jv-color-surface-muted)}.jv-list-item:focus-visible{outline:2px solid var(--jv-color-primary);outline-offset:-2px}.jv-list-item--disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.jv-list-item--active{background:color-mix(in srgb,var(--jv-color-primary) 10%,var(--jv-color-surface));border-left:3px solid var(--jv-color-primary);padding-left:calc(var(--jv-spacing-md) - 3px)}.jv-list-item-text{flex:1;display:flex;flex-direction:column;gap:.125rem;min-width:0}.jv-list-item-title{font-weight:600;font-size:var(--jv-density-font-size);color:var(--jv-color-foreground);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.jv-list-item-description{font-size:.85rem;color:var(--jv-color-foreground-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.jv-list-item-meta{display:flex;align-items:center;gap:var(--jv-spacing-sm);flex-shrink:0}.jv-list-item-leading{flex-shrink:0;color:var(--jv-color-foreground-muted)}\n"], dependencies: [{ kind: "component", type: JvIconComponent, selector: "jv-icon", inputs: ["name", "size", "strokeWidth", "decorative", "ariaLabel"] }] });
20358
+ }
20359
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: JvListItemComponent, decorators: [{
20360
+ type: Component,
20361
+ args: [{ selector: 'jv-list-item', standalone: true, imports: [JvIconComponent], template: `
20362
+ <li
20363
+ class="jv-list-item"
20364
+ [class.jv-list-item--disabled]="disabled()"
20365
+ [class.jv-list-item--active]="active()"
20366
+ tabindex="0"
20367
+ role="listitem"
20368
+ (click)="onActivate()"
20369
+ (keydown.enter)="onActivate()"
20370
+ (keydown.space)="onActivate(); $event.preventDefault()"
20371
+ >
20372
+ @if (leadingIcon()) {
20373
+ <jv-icon [name]="leadingIcon()!" class="jv-list-item-leading" [size]="18" />
20374
+ }
20375
+ <div class="jv-list-item-text">
20376
+ <span class="jv-list-item-title">{{ title() }}</span>
20377
+ @if (description()) {
20378
+ <span class="jv-list-item-description">{{ description() }}</span>
20379
+ }
20380
+ </div>
20381
+ <div class="jv-list-item-meta">
20382
+ <ng-content select="[meta]" />
20383
+ </div>
20384
+ </li>
20385
+ `, styles: [":host{display:block}.jv-list-item{display:flex;align-items:center;gap:var(--jv-spacing-md);padding:var(--jv-spacing-md);background:var(--jv-color-surface);cursor:default;outline:none;transition:background-color .16s ease}.jv-list-item:hover{background:var(--jv-color-surface-muted)}.jv-list-item:focus-visible{outline:2px solid var(--jv-color-primary);outline-offset:-2px}.jv-list-item--disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.jv-list-item--active{background:color-mix(in srgb,var(--jv-color-primary) 10%,var(--jv-color-surface));border-left:3px solid var(--jv-color-primary);padding-left:calc(var(--jv-spacing-md) - 3px)}.jv-list-item-text{flex:1;display:flex;flex-direction:column;gap:.125rem;min-width:0}.jv-list-item-title{font-weight:600;font-size:var(--jv-density-font-size);color:var(--jv-color-foreground);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.jv-list-item-description{font-size:.85rem;color:var(--jv-color-foreground-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.jv-list-item-meta{display:flex;align-items:center;gap:var(--jv-spacing-sm);flex-shrink:0}.jv-list-item-leading{flex-shrink:0;color:var(--jv-color-foreground-muted)}\n"] }]
20386
+ }], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: true }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }], leadingIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "leadingIcon", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], active: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: false }] }], activated: [{ type: i0.Output, args: ["activated"] }] } });
20387
+
20284
20388
  const JV_GRID_DEFAULT_OPTIONS = {
20285
20389
  searchable: true,
20286
20390
  sortable: true,
@@ -21680,5 +21784,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
21680
21784
  * Generated bundle index. Do not edit.
21681
21785
  */
21682
21786
 
21683
- export { EN, ES, JV_DEFAULT_LOCALE, JV_FALLBACK_ICON_NAME, JV_GRID_DEFAULT_OPTIONS, JV_LOCALE_DICTIONARIES, JV_LUCIDE_ICON_REGISTRY, JV_UI_CONFIG, JV_UI_CONFIG_DEFAULTS, JV_UI_DEFAULT_CONFIG, JvAlertComponent, JvAnnouncementService, JvBadgeComponent, JvBreadcrumbComponent, JvButtonComponent, JvButtonGroupComponent, JvCardComponent, JvChangePasswordPageComponent, JvCheckboxComponent, JvConfirmDialogComponent, JvDashboardShellComponent, JvDialogComponent, JvDialogService, JvDividerComponent, JvForgotPasswordPageComponent, JvFormContainerComponent, JvGridComponent, JvIconButtonComponent, JvIconComponent, JvInputComponent, JvLoaderComponent, JvLoaderService, JvLoginPageComponent, JvPageComponent, JvPaginationComponent, JvRadioComponent, JvSectionComponent, JvSelectComponent, JvSidebarComponent, JvSwitchComponent, JvTextareaComponent, JvThemeService, JvToastComponent, JvToastService, JvTopbarComponent, JvTranslationService, provideJvUi };
21787
+ export { EN, ES, JV_DEFAULT_LOCALE, JV_FALLBACK_ICON_NAME, JV_GRID_DEFAULT_OPTIONS, JV_LOCALE_DICTIONARIES, JV_LUCIDE_ICON_REGISTRY, JV_UI_CONFIG, JV_UI_CONFIG_DEFAULTS, JV_UI_DEFAULT_CONFIG, JvAlertComponent, JvAnnouncementService, JvBadgeComponent, JvBreadcrumbComponent, JvButtonComponent, JvButtonGroupComponent, JvCardComponent, JvChangePasswordPageComponent, JvCheckboxComponent, JvConfirmDialogComponent, JvDashboardShellComponent, JvDialogComponent, JvDialogService, JvDividerComponent, JvForgotPasswordPageComponent, JvFormContainerComponent, JvGridComponent, JvIconButtonComponent, JvIconComponent, JvInputComponent, JvListComponent, JvListItemComponent, JvLoaderComponent, JvLoaderService, JvLoginPageComponent, JvPageComponent, JvPaginationComponent, JvRadioComponent, JvSectionComponent, JvSelectComponent, JvSidebarComponent, JvSwitchComponent, JvTextareaComponent, JvThemeService, JvToastComponent, JvToastService, JvTopbarComponent, JvTranslationService, provideJvUi };
21684
21788
  //# sourceMappingURL=devjuliovilla-jv-ui.mjs.map