@declarion/react 0.1.33 → 0.1.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/dist-lib/JsonEditor-ByVfvrpB.js +71 -0
  2. package/dist-lib/JsonEditor-ByVfvrpB.js.map +1 -0
  3. package/dist-lib/api/params.d.ts +16 -2
  4. package/dist-lib/components/columns/ColumnPicker.d.ts +0 -5
  5. package/dist-lib/components/detail/DetailPage.d.ts +30 -0
  6. package/dist-lib/components/fields/MultilangField.d.ts +1 -1
  7. package/dist-lib/components/fields/MultilangTextField.d.ts +1 -1
  8. package/dist-lib/components/fields/RefField.d.ts +1 -1
  9. package/dist-lib/components/filters/FilterChips.d.ts +0 -6
  10. package/dist-lib/components/filters/FilterDrawer.d.ts +0 -6
  11. package/dist-lib/components/layout/Rail.d.ts +16 -0
  12. package/dist-lib/components/layout/Sidebar.d.ts +11 -1
  13. package/dist-lib/components/layout/TabStrip.d.ts +4 -0
  14. package/dist-lib/components/layout/TenantChip.d.ts +17 -0
  15. package/dist-lib/components/layout/TopBar.d.ts +11 -1
  16. package/dist-lib/components/list/BulkBar.d.ts +18 -0
  17. package/dist-lib/components/list/InlineEditCell.d.ts +15 -0
  18. package/dist-lib/components/list/ListPage.d.ts +34 -0
  19. package/dist-lib/components/list/QuickPeek.d.ts +36 -0
  20. package/dist-lib/components/list/RowMenu.d.ts +23 -0
  21. package/dist-lib/components/list/resolveActions.d.ts +67 -0
  22. package/dist-lib/components/pages/auth/AuthShell.d.ts +13 -0
  23. package/dist-lib/components/pages/auth/Forgot.d.ts +1 -0
  24. package/dist-lib/components/pages/auth/SignIn.d.ts +1 -0
  25. package/dist-lib/components/pages/auth/SignUp.d.ts +1 -0
  26. package/dist-lib/components/pages/auth/TwoFA.d.ts +1 -0
  27. package/dist-lib/components/pages/auth/icons.d.ts +6 -0
  28. package/dist-lib/components/pages/home/HomeStub.d.ts +6 -0
  29. package/dist-lib/components/pages/jobs/Jobs.d.ts +1 -0
  30. package/dist-lib/components/pages/pipeline/Pipeline.d.ts +1 -0
  31. package/dist-lib/components/pages/profile/Preferences.d.ts +1 -0
  32. package/dist-lib/components/pages/profile/Profile.d.ts +1 -0
  33. package/dist-lib/components/primitives/Avatar.d.ts +6 -0
  34. package/dist-lib/components/primitives/BoolToggle.d.ts +5 -0
  35. package/dist-lib/components/primitives/Btn.d.ts +19 -0
  36. package/dist-lib/components/primitives/Check.d.ts +7 -0
  37. package/dist-lib/components/primitives/Chip.d.ts +9 -0
  38. package/dist-lib/components/primitives/Dropdown.d.ts +11 -0
  39. package/dist-lib/components/primitives/Fields.d.ts +82 -0
  40. package/dist-lib/components/primitives/IconBtn.d.ts +11 -0
  41. package/dist-lib/components/primitives/Icons.d.ts +87 -0
  42. package/dist-lib/components/primitives/Kbd.d.ts +4 -0
  43. package/dist-lib/components/primitives/MenuItem.d.ts +11 -0
  44. package/dist-lib/components/primitives/Pill.d.ts +11 -0
  45. package/dist-lib/components/primitives/RecordIdBadge.d.ts +8 -0
  46. package/dist-lib/components/primitives/RowField.d.ts +10 -0
  47. package/dist-lib/components/primitives/SectionCard.d.ts +19 -0
  48. package/dist-lib/components/primitives/Spinner.d.ts +3 -0
  49. package/dist-lib/components/primitives/cx.d.ts +1 -0
  50. package/dist-lib/components/primitives/index.d.ts +31 -0
  51. package/dist-lib/components/shared/ActionConfirmDialog.d.ts +1 -1
  52. package/dist-lib/components/shared/ActionDialog.d.ts +1 -11
  53. package/dist-lib/components/shared/ActionResultDialog.d.ts +1 -1
  54. package/dist-lib/components/shared/ActionRunner.d.ts +21 -0
  55. package/dist-lib/components/shared/Breadcrumbs.d.ts +14 -0
  56. package/dist-lib/components/shared/ChangePasswordDialog.d.ts +9 -0
  57. package/dist-lib/components/shared/ConfirmDialog.d.ts +1 -1
  58. package/dist-lib/components/shared/CopyButton.d.ts +1 -1
  59. package/dist-lib/components/shared/DynamicIcon.d.ts +6 -3
  60. package/dist-lib/components/shared/ErrorBoundary.d.ts +0 -5
  61. package/dist-lib/components/shell/AIPanel.d.ts +6 -0
  62. package/dist-lib/components/shell/CommandPalette.d.ts +18 -0
  63. package/dist-lib/components/views/ViewSwitcher.d.ts +1 -7
  64. package/dist-lib/declarion-react.css +1 -1
  65. package/dist-lib/hooks/useParams.d.ts +1 -1
  66. package/dist-lib/index.d.ts +47 -0
  67. package/dist-lib/index.js +14587 -8270
  68. package/dist-lib/index.js.map +1 -1
  69. package/dist-lib/lib/child-config.d.ts +1 -0
  70. package/dist-lib/stores/appearance.d.ts +31 -0
  71. package/dist-lib/stores/tabs.d.ts +13 -0
  72. package/dist-lib/types/api.d.ts +21 -1
  73. package/dist-lib/types/ordmap.d.ts +32 -0
  74. package/dist-lib/types/schema.d.ts +108 -37
  75. package/package.json +1 -2
  76. package/dist-lib/JsonEditor-C5NOzsey.js +0 -71
  77. package/dist-lib/JsonEditor-C5NOzsey.js.map +0 -1
  78. package/dist-lib/components/layout/TabBar.d.ts +0 -1
  79. package/dist-lib/components/layout/ThemeToggle.d.ts +0 -1
  80. package/dist-lib/components/pages/LoginPage.d.ts +0 -1
  81. package/dist-lib/components/pages/SignupPage.d.ts +0 -1
  82. package/dist-lib/components/shared/BatchActionProgress.d.ts +0 -18
  83. package/dist-lib/components/ui/alert-dialog.d.ts +0 -14
  84. package/dist-lib/components/ui/badge.d.ts +0 -9
  85. package/dist-lib/components/ui/button.d.ts +0 -11
  86. package/dist-lib/components/ui/card.d.ts +0 -8
  87. package/dist-lib/components/ui/dialog.d.ts +0 -13
  88. package/dist-lib/components/ui/dropdown-menu.d.ts +0 -24
  89. package/dist-lib/components/ui/input.d.ts +0 -3
  90. package/dist-lib/components/ui/label.d.ts +0 -5
  91. package/dist-lib/components/ui/select.d.ts +0 -13
  92. package/dist-lib/components/ui/separator.d.ts +0 -4
  93. package/dist-lib/components/ui/skeleton.d.ts +0 -2
  94. package/dist-lib/components/ui/table.d.ts +0 -10
  95. package/dist-lib/components/ui/textarea.d.ts +0 -3
  96. package/dist-lib/lib/theme-utils.d.ts +0 -3
  97. package/dist-lib/stores/theme.d.ts +0 -10
@@ -13,6 +13,7 @@ export interface ResolvedChildConfig {
13
13
  quick_add?: ChildQuickAdd;
14
14
  editable: boolean;
15
15
  position_field?: string;
16
+ interaction: "navigate" | "inline_edit" | "readonly";
16
17
  }
17
18
  export declare function resolveChildConfig(relation: ChildRelation, childEntity: Entity, screenNode?: LayoutNode): ResolvedChildConfig;
18
19
  export declare function inferSort(entity: Entity): string;
@@ -0,0 +1,31 @@
1
+ export type ThemeId = "light" | "dark";
2
+ export type AccentId = "violet" | "blue" | "teal" | "amber" | "rose";
3
+ export type Density = "compact" | "comfortable" | "cozy";
4
+ export type SidebarMode = "wide" | "collapsed";
5
+ export type TabsPosition = "top" | "bottom";
6
+ export type AiSurface = "command" | "panel" | "both" | "off";
7
+ export interface Appearance {
8
+ theme: ThemeId;
9
+ accent: AccentId;
10
+ density: Density;
11
+ sidebar: SidebarMode;
12
+ tabsPosition: TabsPosition;
13
+ tabsMaxOpen: number;
14
+ /** When false, tabs are not persisted across reloads (mirrors ui_tabs_persist). */
15
+ tabsPersist: boolean;
16
+ radius: number;
17
+ zebra: boolean;
18
+ aiSurface: AiSurface;
19
+ }
20
+ export declare function applyAppearance(a: Appearance): void;
21
+ interface AppearanceState extends Appearance {
22
+ set: <K extends keyof Appearance>(key: K, value: Appearance[K]) => void;
23
+ setMany: (patch: Partial<Appearance>) => void;
24
+ /** Apply tenant defaults from server params. ONLY fills keys the user has
25
+ * not already set locally — any field present in localStorage wins.
26
+ * That preserves the user's Tweaks choices across reloads while still
27
+ * picking up tenant defaults on first visit. */
28
+ hydrateFromParams: (params: Record<string, unknown>) => void;
29
+ }
30
+ export declare const useAppearanceStore: import("zustand").UseBoundStore<import("zustand").StoreApi<AppearanceState>>;
31
+ export {};
@@ -1,3 +1,4 @@
1
+ export type TabMode = "view" | "edit" | "create";
1
2
  export interface TabItem {
2
3
  id: string;
3
4
  pathname: string;
@@ -5,6 +6,13 @@ export interface TabItem {
5
6
  title: string;
6
7
  icon?: string;
7
8
  closable: boolean;
9
+ area?: string;
10
+ screen?: string;
11
+ navId?: string;
12
+ entity?: string;
13
+ record?: Record<string, unknown>;
14
+ mode?: TabMode;
15
+ dirty?: boolean;
8
16
  }
9
17
  interface TabState {
10
18
  tabs: TabItem[];
@@ -16,6 +24,11 @@ interface TabState {
16
24
  findTabByPathname: (pathname: string) => TabItem | undefined;
17
25
  updateTabTitle: (id: string, title: string) => void;
18
26
  updateTabSearch: (id: string, search: string) => void;
27
+ setDirty: (id: string, dirty: boolean) => void;
28
+ setMode: (id: string, mode: TabMode) => void;
29
+ updateTab: (id: string, patch: Partial<TabItem>) => void;
30
+ setScope: (tenantId: string | null, userId: string | null) => void;
31
+ hydrate: () => void;
19
32
  }
20
33
  export declare const useTabStore: import("zustand").UseBoundStore<import("zustand").StoreApi<TabState>>;
21
34
  export {};
@@ -1,4 +1,4 @@
1
- import type { LocalizedString } from "./schema";
1
+ import type { AccentDef, LocalizedString } from "./schema";
2
2
  export interface ListMeta {
3
3
  total: number;
4
4
  page: number;
@@ -29,11 +29,13 @@ export declare class ApiError extends Error {
29
29
  index?: number;
30
30
  constructor(status: number, message: string, code: string, index?: number);
31
31
  }
32
+ export type TenantEnv = "production" | "staging" | "dev" | string;
32
33
  export interface Tenant {
33
34
  id: string;
34
35
  code: string;
35
36
  name: string;
36
37
  role: string;
38
+ env?: TenantEnv;
37
39
  }
38
40
  export interface AuthUser {
39
41
  id: string;
@@ -77,6 +79,24 @@ export interface PublicParam {
77
79
  description?: LocalizedString;
78
80
  value: unknown;
79
81
  }
82
+ /** Subset of branding exposed pre-login by /api/params/public. */
83
+ export interface PublicBranding {
84
+ app_name?: string;
85
+ app_logo?: string;
86
+ app_initial?: string;
87
+ accent_color?: string;
88
+ wordmark?: string;
89
+ version_label?: string;
90
+ auth_tagline?: LocalizedString;
91
+ auth_subtagline?: LocalizedString;
92
+ auth_badges?: LocalizedString[];
93
+ }
94
+ /** Envelope returned by GET /api/params/public. */
95
+ export interface PublicParamsResponse {
96
+ parameters: PublicParam[];
97
+ accents?: Record<string, AccentDef>;
98
+ branding?: PublicBranding;
99
+ }
80
100
  export interface ResolvedParam {
81
101
  code: string;
82
102
  name: LocalizedString;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * OrderedMap preserves the insertion order of a string-keyed map while
3
+ * keeping O(1) lookup. It mirrors the Go `ordmap.OrderedMap[T]` container
4
+ * on the server side. Use it for schema sub-maps (entity fields, handler
5
+ * params, resolved_params) where YAML/JSON declaration order is part of
6
+ * the UI contract.
7
+ *
8
+ * JS objects already preserve insertion order for string keys (ES2015+),
9
+ * but the Go side emits JSON that is parsed into a plain object by
10
+ * default — this class wraps the hydrated object so call sites get a
11
+ * consistent API (`get`, `has`, iteration as `[name, value]` tuples) and
12
+ * the type system enforces read-only access.
13
+ */
14
+ export declare class OrderedMap<T extends {
15
+ name?: string;
16
+ }> implements Iterable<[string, T]> {
17
+ #private;
18
+ constructor(items: readonly T[]);
19
+ /** Build from a `{ name: value }` object, populating each value's `name`
20
+ * field from the object key. Insertion order is the JS property order. */
21
+ static fromObject<T extends {
22
+ name?: string;
23
+ }>(raw: Readonly<Record<string, unknown>> | null | undefined): OrderedMap<T>;
24
+ get length(): number;
25
+ has(name: string): boolean;
26
+ get(name: string): T | undefined;
27
+ /** Read-only items in declaration order. */
28
+ items(): readonly T[];
29
+ /** Names in declaration order. */
30
+ names(): readonly string[];
31
+ [Symbol.iterator](): IterableIterator<[string, T]>;
32
+ }
@@ -1,3 +1,5 @@
1
+ import { OrderedMap } from "./ordmap";
2
+ export { OrderedMap };
1
3
  export type LocalizedString = Record<string, string>;
2
4
  /**
3
5
  * Reserved sentinel value for Screen.detail_screen (list screens). Disables
@@ -21,6 +23,11 @@ export interface UnitConfig {
21
23
  display?: string;
22
24
  }
23
25
  export interface EntityField {
26
+ /**
27
+ * Populated by the schema hydrator from the enclosing map key. Tests and
28
+ * fixtures may omit it; production code always receives it set.
29
+ */
30
+ name?: string;
24
31
  type: string;
25
32
  required?: boolean;
26
33
  primary?: boolean;
@@ -54,8 +61,7 @@ export interface EntityField {
54
61
  export interface StructureDef {
55
62
  name: LocalizedString;
56
63
  description?: LocalizedString;
57
- fields: Record<string, EntityField>;
58
- field_order: string[];
64
+ fields: OrderedMap<EntityField>;
59
65
  }
60
66
  export type ChildDisplayMode = "table" | "timeline" | "list" | "cards";
61
67
  export interface TimelineConfig {
@@ -92,6 +98,15 @@ export interface ChildDisplay {
92
98
  searchable?: boolean;
93
99
  filters?: string[];
94
100
  position_field?: string;
101
+ /**
102
+ * Row interaction for `mode: table`.
103
+ * - `navigate`: identity cell (first column) is a link to the child's
104
+ * detail; other cells read-only. Default for associated entities
105
+ * (child has its own detail screen).
106
+ * - `inline_edit`: cells are inline-editable (aggregate children).
107
+ * - `readonly`: pure display.
108
+ */
109
+ interaction?: "navigate" | "inline_edit" | "readonly";
95
110
  }
96
111
  export interface ChildRelation {
97
112
  entity: string;
@@ -143,6 +158,8 @@ export interface ParameterDef {
143
158
  default?: unknown;
144
159
  is_public?: boolean;
145
160
  category?: string;
161
+ /** Override scopes accepted on writes. Subset of: env, tenant, role, user, object. Empty = all. */
162
+ scopes?: string[];
146
163
  }
147
164
  export interface AssociationDisplay {
148
165
  name?: LocalizedString;
@@ -167,8 +184,7 @@ export interface Entity {
167
184
  icon: string;
168
185
  display_field?: string;
169
186
  };
170
- fields: Record<string, EntityField>;
171
- field_order: string[];
187
+ fields: OrderedMap<EntityField>;
172
188
  soft_delete?: string;
173
189
  tenant_key?: string;
174
190
  children?: ChildRelation[];
@@ -186,11 +202,18 @@ export declare function extractPkValues(entity: Entity, record: Record<string, u
186
202
  export declare function pkValuesToId(pkValues: PkValues): string;
187
203
  export declare function isCompositePk(entity: Entity): boolean;
188
204
  export type SizeValue = string;
205
+ export interface SectionBadgeConfig {
206
+ text: LocalizedString;
207
+ tone?: "indigo" | "emerald" | "amber" | "rose" | "sky" | "violet" | "slate" | "teal";
208
+ dot?: boolean;
209
+ }
189
210
  export interface SectionNode {
190
211
  name: LocalizedString;
191
212
  items: LayoutNode[];
192
213
  collapsed?: boolean;
193
214
  columns?: number;
215
+ icon?: string;
216
+ badge?: SectionBadgeConfig;
194
217
  }
195
218
  export interface RowConfig {
196
219
  items: LayoutNode[];
@@ -240,6 +263,7 @@ export interface LayoutNode {
240
263
  searchable?: boolean;
241
264
  filters?: string[];
242
265
  position_field?: string;
266
+ interaction?: "navigate" | "inline_edit" | "readonly";
243
267
  }
244
268
  export interface Screen {
245
269
  type: "list" | "detail" | "custom" | "record_list";
@@ -267,6 +291,45 @@ export interface Screen {
267
291
  detail_screen?: string;
268
292
  fixed_filters?: Record<string, unknown>;
269
293
  views?: ViewDefinition[];
294
+ /** Action slot promotion (rule-of-2). UI honors first 2. */
295
+ primary_actions?: string[];
296
+ primary_bulk_actions?: string[];
297
+ primary_record_actions?: string[];
298
+ /** "open" (default) navigates to detail; "peek" opens QuickPeek drawer. */
299
+ on_row_click?: "open" | "peek";
300
+ quick_peek?: QuickPeekConfig;
301
+ inline_edit?: InlineEditConfig;
302
+ column_overrides?: Record<string, ColumnSpec>;
303
+ activity_rail?: ActivityRailConfig;
304
+ }
305
+ export interface QuickPeekConfig {
306
+ enabled?: boolean;
307
+ width?: number;
308
+ /**
309
+ * Explicit list of field codes to show. Highest precedence. When absent,
310
+ * `sections` is consulted; when that's also absent the platform falls back
311
+ * to all simple scalar fields on the entity (capped at 8).
312
+ */
313
+ fields?: string[];
314
+ /** Section names from the detail-layout. Their `fields:` get flattened. */
315
+ sections?: string[];
316
+ inline_editable?: boolean;
317
+ primary_action?: string;
318
+ }
319
+ export interface InlineEditConfig {
320
+ enabled?: boolean;
321
+ /** dblclick | enter | always */
322
+ trigger?: string;
323
+ }
324
+ export interface ColumnSpec {
325
+ inline_edit?: boolean;
326
+ width?: string;
327
+ }
328
+ export interface ActivityRailConfig {
329
+ children: string;
330
+ /** left | right (default right) */
331
+ position?: string;
332
+ width?: number;
270
333
  }
271
334
  /** System view (preset) defined in screen YAML. Read-only. */
272
335
  export interface ViewDefinition {
@@ -286,6 +349,24 @@ export interface NavNode {
286
349
  name?: LocalizedString;
287
350
  icon?: string;
288
351
  items?: NavNode[];
352
+ area?: string;
353
+ badge?: string;
354
+ children?: NavNode[];
355
+ }
356
+ export interface AreaDef {
357
+ code: string;
358
+ name?: LocalizedString;
359
+ icon?: string;
360
+ home_screen?: string;
361
+ required_permission?: string;
362
+ }
363
+ export interface AccentDef {
364
+ color?: string;
365
+ color_2?: string;
366
+ soft?: string;
367
+ ring?: string;
368
+ on_dark?: string;
369
+ on_light?: string;
289
370
  }
290
371
  export interface HandlerParamDisplay {
291
372
  name?: LocalizedString;
@@ -293,6 +374,8 @@ export interface HandlerParamDisplay {
293
374
  widget?: string;
294
375
  }
295
376
  export interface HandlerParam {
377
+ /** Populated by the schema hydrator from the enclosing map key. */
378
+ name?: string;
296
379
  type?: string;
297
380
  required?: boolean;
298
381
  default?: unknown;
@@ -346,8 +429,17 @@ export interface Action {
346
429
  visibility?: string[];
347
430
  confirmation?: LocalizedString;
348
431
  conditions?: ActionCondition[];
349
- resolved_params?: Record<string, HandlerParam>;
350
- resolved_param_order?: string[];
432
+ /** Promote to header/bulk-bar button (max 2 per slot honored by UI). */
433
+ primary?: boolean;
434
+ /** Forces confirm + danger styling. */
435
+ destructive?: boolean;
436
+ /** UI shows a toast instead of a blocking result modal; adds a navigation link if progress_screen is set. */
437
+ long_running?: boolean;
438
+ /** Screen code to navigate to after a long_running action starts (resolved via schema.screens). */
439
+ progress_screen?: string;
440
+ /** When true, action shown grayed until >=1 row selected. */
441
+ bulk_selection_required?: boolean;
442
+ resolved_params?: OrderedMap<HandlerParam>;
351
443
  /**
352
444
  * Default values of params marked hidden+default by the action. The UI
353
445
  * seeds formData with these so filter templates resolve references to
@@ -369,8 +461,7 @@ export interface HandlerDef {
369
461
  name?: LocalizedString;
370
462
  icon?: string;
371
463
  };
372
- params?: Record<string, HandlerParam>;
373
- param_order?: string[];
464
+ params?: OrderedMap<HandlerParam>;
374
465
  success_event?: string;
375
466
  }
376
467
  export interface Branding {
@@ -378,34 +469,13 @@ export interface Branding {
378
469
  app_logo?: string;
379
470
  app_initial?: string;
380
471
  accent_color?: string;
381
- }
382
- export interface ThemeDef {
383
- extends?: string;
384
- background?: string;
385
- foreground?: string;
386
- card?: string;
387
- card_foreground?: string;
388
- popover?: string;
389
- popover_foreground?: string;
390
- primary?: string;
391
- primary_foreground?: string;
392
- secondary?: string;
393
- secondary_foreground?: string;
394
- muted?: string;
395
- muted_foreground?: string;
396
- accent?: string;
397
- accent_foreground?: string;
398
- destructive?: string;
399
- destructive_foreground?: string;
400
- border?: string;
401
- input?: string;
402
- ring?: string;
403
- sidebar?: string;
404
- sidebar_foreground?: string;
405
- sidebar_border?: string;
406
- sidebar_accent?: string;
407
- sidebar_muted?: string;
408
- radius?: string;
472
+ wordmark?: string;
473
+ version_label?: string;
474
+ status_url?: string;
475
+ auth_tagline?: LocalizedString;
476
+ auth_subtagline?: LocalizedString;
477
+ auth_badges?: LocalizedString[];
478
+ css_url?: string;
409
479
  }
410
480
  export interface Schema {
411
481
  languages: LanguageDef[];
@@ -418,5 +488,6 @@ export interface Schema {
418
488
  enums: Record<string, EnumDef>;
419
489
  parameters: Record<string, ParameterDef>;
420
490
  branding?: Branding;
421
- themes?: Record<string, ThemeDef>;
491
+ areas?: AreaDef[];
492
+ accents?: Record<string, AccentDef>;
422
493
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@declarion/react",
3
- "version": "0.1.33",
3
+ "version": "0.1.44",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "description": "React SDK for Declarion, the schema-driven business apps platform.",
@@ -45,7 +45,6 @@
45
45
  "@tanstack/react-virtual": "^3.11.0",
46
46
  "class-variance-authority": "^0.7.0",
47
47
  "clsx": "^2.1.0",
48
- "lucide-react": "^0.468.0",
49
48
  "react-markdown": "^10.1.0",
50
49
  "react-router-dom": "^6.28.0",
51
50
  "recharts": "^2.15.0",
@@ -1,71 +0,0 @@
1
- import { jsx as b } from "react/jsx-runtime";
2
- import { useRef as i, useEffect as a } from "react";
3
- import { Mode as d, createJSONEditor as E } from "vanilla-jsoneditor";
4
- import "vanilla-jsoneditor/themes/jse-theme-dark.css";
5
- function p(t) {
6
- if (t == null) return { text: "" };
7
- if (typeof t == "string")
8
- try {
9
- return { json: JSON.parse(t) };
10
- } catch {
11
- return { text: t };
12
- }
13
- return { json: t };
14
- }
15
- function R({ value: t, onChange: c, readOnly: r }) {
16
- const o = i(null), s = i(null), n = i(c);
17
- return a(() => {
18
- n.current = c;
19
- }, [c]), a(() => {
20
- if (!o.current) return;
21
- const j = {
22
- content: p(t),
23
- readOnly: r ?? !1,
24
- mode: r ? d.tree : d.text,
25
- mainMenuBar: !r,
26
- navigationBar: !1,
27
- statusBar: !1,
28
- onChange: (e, u, x) => {
29
- if (!(r || !n.current) && !x.contentErrors) {
30
- if ("json" in e)
31
- n.current(e.json);
32
- else if ("text" in e)
33
- try {
34
- n.current(JSON.parse(e.text));
35
- } catch {
36
- n.current(e.text);
37
- }
38
- }
39
- }
40
- }, f = () => {
41
- var u;
42
- const e = document.documentElement.classList.contains("dark");
43
- (u = o.current) == null || u.classList.toggle("jse-theme-dark", e);
44
- };
45
- f();
46
- const m = new MutationObserver(f);
47
- m.observe(document.documentElement, {
48
- attributes: !0,
49
- attributeFilter: ["class"]
50
- });
51
- const l = E({
52
- target: o.current,
53
- props: j
54
- });
55
- return s.current = l, () => {
56
- m.disconnect(), l.destroy(), s.current = null;
57
- };
58
- }, [r]), a(() => {
59
- !s.current || !r || s.current.updateProps({ content: p(t) });
60
- }, [t, r]), /* @__PURE__ */ b(
61
- "div",
62
- {
63
- ref: o,
64
- className: r ? "json-editor-readonly" : "json-editor-editable"
65
- }
66
- );
67
- }
68
- export {
69
- R as JsonEditor
70
- };
71
- //# sourceMappingURL=JsonEditor-C5NOzsey.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"JsonEditor-C5NOzsey.js","sources":["../src/components/fields/JsonEditor.tsx"],"sourcesContent":["import { useRef, useEffect } from \"react\";\nimport {\n createJSONEditor,\n Mode,\n type Content,\n type OnChangeStatus,\n type JSONEditorPropsOptional,\n} from \"vanilla-jsoneditor\";\n// Dark theme CSS vars for vanilla-jsoneditor (sets --jse-* custom properties)\nimport \"vanilla-jsoneditor/themes/jse-theme-dark.css\";\n\ninterface JsonEditorProps {\n value: unknown;\n onChange?: (value: unknown) => void;\n readOnly?: boolean;\n // Future: JSON Schema for in-editor validation (Ajv). Accept now, wire later.\n schema?: Record<string, unknown>;\n}\n\nfunction toContent(v: unknown): Content {\n if (v == null) return { text: \"\" };\n if (typeof v === \"string\") {\n try {\n return { json: JSON.parse(v) };\n } catch {\n return { text: v };\n }\n }\n return { json: v };\n}\n\nexport function JsonEditor({ value, onChange, readOnly }: JsonEditorProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const editorRef = useRef<ReturnType<typeof createJSONEditor> | null>(null);\n const onChangeRef = useRef(onChange);\n useEffect(() => { onChangeRef.current = onChange; }, [onChange]);\n\n // Create / recreate editor when readOnly changes\n useEffect(() => {\n if (!containerRef.current) return;\n\n const props: JSONEditorPropsOptional = {\n content: toContent(value),\n readOnly: readOnly ?? false,\n mode: readOnly ? Mode.tree : Mode.text,\n mainMenuBar: !readOnly,\n navigationBar: false,\n statusBar: false,\n onChange: (content: Content, _prev: Content, status: OnChangeStatus) => {\n if (readOnly || !onChangeRef.current) return;\n if (status.contentErrors) return;\n if (\"json\" in content) {\n onChangeRef.current(content.json);\n } else if (\"text\" in content) {\n try {\n onChangeRef.current(JSON.parse(content.text));\n } catch {\n onChangeRef.current(content.text);\n }\n }\n },\n };\n\n const syncDarkClass = () => {\n const isDark = document.documentElement.classList.contains(\"dark\");\n containerRef.current?.classList.toggle(\"jse-theme-dark\", isDark);\n };\n syncDarkClass();\n\n // Watch for dark mode toggles\n const observer = new MutationObserver(syncDarkClass);\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [\"class\"],\n });\n\n const editor = createJSONEditor({\n target: containerRef.current,\n props,\n });\n editorRef.current = editor;\n\n return () => {\n observer.disconnect();\n editor.destroy();\n editorRef.current = null;\n };\n }, [readOnly]); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Update content when value changes externally (read-only mode only)\n useEffect(() => {\n if (!editorRef.current || !readOnly) return;\n editorRef.current.updateProps({ content: toContent(value) });\n }, [value, readOnly]);\n\n return (\n <div\n ref={containerRef}\n className={readOnly ? \"json-editor-readonly\" : \"json-editor-editable\"}\n />\n );\n}\n"],"names":["toContent","v","JsonEditor","value","onChange","readOnly","containerRef","useRef","editorRef","onChangeRef","useEffect","props","Mode","content","_prev","status","syncDarkClass","isDark","_a","observer","editor","createJSONEditor","jsx"],"mappings":";;;;AAmBA,SAASA,EAAUC,GAAqB;AACtC,MAAIA,KAAK,KAAM,QAAO,EAAE,MAAM,GAAA;AAC9B,MAAI,OAAOA,KAAM;AACf,QAAI;AACF,aAAO,EAAE,MAAM,KAAK,MAAMA,CAAC,EAAA;AAAA,IAC7B,QAAQ;AACN,aAAO,EAAE,MAAMA,EAAA;AAAA,IACjB;AAEF,SAAO,EAAE,MAAMA,EAAA;AACjB;AAEO,SAASC,EAAW,EAAE,OAAAC,GAAO,UAAAC,GAAU,UAAAC,KAA6B;AACzE,QAAMC,IAAeC,EAAuB,IAAI,GAC1CC,IAAYD,EAAmD,IAAI,GACnEE,IAAcF,EAAOH,CAAQ;AACnC,SAAAM,EAAU,MAAM;AAAE,IAAAD,EAAY,UAAUL;AAAA,EAAU,GAAG,CAACA,CAAQ,CAAC,GAG/DM,EAAU,MAAM;AACd,QAAI,CAACJ,EAAa,QAAS;AAE3B,UAAMK,IAAiC;AAAA,MACrC,SAASX,EAAUG,CAAK;AAAA,MACxB,UAAUE,KAAY;AAAA,MACtB,MAAMA,IAAWO,EAAK,OAAOA,EAAK;AAAA,MAClC,aAAa,CAACP;AAAA,MACd,eAAe;AAAA,MACf,WAAW;AAAA,MACX,UAAU,CAACQ,GAAkBC,GAAgBC,MAA2B;AACtE,YAAI,EAAAV,KAAY,CAACI,EAAY,YACzB,CAAAM,EAAO;AACX,cAAI,UAAUF;AACZ,YAAAJ,EAAY,QAAQI,EAAQ,IAAI;AAAA,mBACvB,UAAUA;AACnB,gBAAI;AACF,cAAAJ,EAAY,QAAQ,KAAK,MAAMI,EAAQ,IAAI,CAAC;AAAA,YAC9C,QAAQ;AACN,cAAAJ,EAAY,QAAQI,EAAQ,IAAI;AAAA,YAClC;AAAA;AAAA,MAEJ;AAAA,IAAA,GAGIG,IAAgB,MAAM;;AAC1B,YAAMC,IAAS,SAAS,gBAAgB,UAAU,SAAS,MAAM;AACjE,OAAAC,IAAAZ,EAAa,YAAb,QAAAY,EAAsB,UAAU,OAAO,kBAAkBD;AAAA,IAC3D;AACA,IAAAD,EAAA;AAGA,UAAMG,IAAW,IAAI,iBAAiBH,CAAa;AACnD,IAAAG,EAAS,QAAQ,SAAS,iBAAiB;AAAA,MACzC,YAAY;AAAA,MACZ,iBAAiB,CAAC,OAAO;AAAA,IAAA,CAC1B;AAED,UAAMC,IAASC,EAAiB;AAAA,MAC9B,QAAQf,EAAa;AAAA,MACrB,OAAAK;AAAA,IAAA,CACD;AACD,WAAAH,EAAU,UAAUY,GAEb,MAAM;AACX,MAAAD,EAAS,WAAA,GACTC,EAAO,QAAA,GACPZ,EAAU,UAAU;AAAA,IACtB;AAAA,EACF,GAAG,CAACH,CAAQ,CAAC,GAGbK,EAAU,MAAM;AACd,IAAI,CAACF,EAAU,WAAW,CAACH,KAC3BG,EAAU,QAAQ,YAAY,EAAE,SAASR,EAAUG,CAAK,GAAG;AAAA,EAC7D,GAAG,CAACA,GAAOE,CAAQ,CAAC,GAGlB,gBAAAiB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKhB;AAAA,MACL,WAAWD,IAAW,yBAAyB;AAAA,IAAA;AAAA,EAAA;AAGrD;"}
@@ -1 +0,0 @@
1
- export declare function TabBar(): import("react/jsx-runtime").JSX.Element | null;
@@ -1 +0,0 @@
1
- export declare function ThemeToggle(): import("react/jsx-runtime").JSX.Element;
@@ -1 +0,0 @@
1
- export declare function LoginPage(): import("react/jsx-runtime").JSX.Element;
@@ -1 +0,0 @@
1
- export declare function SignupPage(): import("react/jsx-runtime").JSX.Element;
@@ -1,18 +0,0 @@
1
- interface BatchActionProgressProps {
2
- /** Number of items being processed. */
3
- count: number;
4
- /** Whether the action is currently executing. */
5
- isPending: boolean;
6
- /** Whether the last execution succeeded. */
7
- isSuccess?: boolean;
8
- /** Whether the last execution errored. */
9
- isError?: boolean;
10
- /** Whether the last execution partially succeeded (some items failed/skipped). */
11
- isPartial?: boolean;
12
- }
13
- /**
14
- * Inline progress indicator for batch actions.
15
- * Shows selected count, a spinner during execution, and success/error/partial state.
16
- */
17
- export declare function BatchActionProgress({ count, isPending, isSuccess, isError, isPartial, }: BatchActionProgressProps): import("react/jsx-runtime").JSX.Element | null;
18
- export {};
@@ -1,14 +0,0 @@
1
- import * as React from "react";
2
- import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
3
- declare const AlertDialog: React.FC<AlertDialogPrimitive.AlertDialogProps>;
4
- declare const AlertDialogTrigger: React.ForwardRefExoticComponent<AlertDialogPrimitive.AlertDialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
5
- declare const AlertDialogPortal: React.FC<AlertDialogPrimitive.AlertDialogPortalProps>;
6
- declare const AlertDialogOverlay: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
7
- declare const AlertDialogContent: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
8
- declare function AlertDialogHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
9
- declare function AlertDialogFooter({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
10
- declare const AlertDialogTitle: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
11
- declare const AlertDialogDescription: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
12
- declare const AlertDialogAction: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogActionProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
13
- declare const AlertDialogCancel: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogCancelProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
14
- export { AlertDialog, AlertDialogPortal, AlertDialogOverlay, AlertDialogTrigger, AlertDialogContent, AlertDialogHeader, AlertDialogFooter, AlertDialogTitle, AlertDialogDescription, AlertDialogAction, AlertDialogCancel, };
@@ -1,9 +0,0 @@
1
- import { type VariantProps } from "class-variance-authority";
2
- declare const badgeVariants: (props?: ({
3
- variant?: "default" | "destructive" | "outline" | "secondary" | null | undefined;
4
- } & import("class-variance-authority/types").ClassProp) | undefined) => string;
5
- export interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {
6
- color?: string;
7
- }
8
- declare function Badge({ className, variant, color, style, ...props }: BadgeProps): import("react/jsx-runtime").JSX.Element;
9
- export { Badge, badgeVariants };
@@ -1,11 +0,0 @@
1
- import * as React from "react";
2
- import { type VariantProps } from "class-variance-authority";
3
- declare const buttonVariants: (props?: ({
4
- variant?: "link" | "ghost" | "default" | "destructive" | "outline" | "secondary" | null | undefined;
5
- size?: "icon" | "default" | "sm" | "lg" | null | undefined;
6
- } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
- export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
8
- asChild?: boolean;
9
- }
10
- declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
11
- export { Button, buttonVariants };
@@ -1,8 +0,0 @@
1
- import * as React from "react";
2
- declare const Card: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
3
- declare const CardHeader: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
4
- declare const CardTitle: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
5
- declare const CardDescription: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
6
- declare const CardContent: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
7
- declare const CardFooter: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
8
- export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };
@@ -1,13 +0,0 @@
1
- import * as React from "react";
2
- import * as DialogPrimitive from "@radix-ui/react-dialog";
3
- declare const Dialog: React.FC<DialogPrimitive.DialogProps>;
4
- declare const DialogTrigger: React.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
5
- declare const DialogPortal: React.FC<DialogPrimitive.DialogPortalProps>;
6
- declare const DialogClose: React.ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & React.RefAttributes<HTMLButtonElement>>;
7
- declare const DialogOverlay: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
8
- declare const DialogContent: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
9
- declare function DialogHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
10
- declare function DialogFooter({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
11
- declare const DialogTitle: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
12
- declare const DialogDescription: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
13
- export { Dialog, DialogPortal, DialogOverlay, DialogTrigger, DialogClose, DialogContent, DialogHeader, DialogFooter, DialogTitle, DialogDescription, };
@@ -1,24 +0,0 @@
1
- import * as React from "react";
2
- import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
3
- declare const DropdownMenu: React.FC<DropdownMenuPrimitive.DropdownMenuProps>;
4
- declare const DropdownMenuTrigger: React.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuTriggerProps & React.RefAttributes<HTMLButtonElement>>;
5
- declare const DropdownMenuGroup: React.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuGroupProps & React.RefAttributes<HTMLDivElement>>;
6
- declare const DropdownMenuPortal: React.FC<DropdownMenuPrimitive.DropdownMenuPortalProps>;
7
- declare const DropdownMenuSub: React.FC<DropdownMenuPrimitive.DropdownMenuSubProps>;
8
- declare const DropdownMenuRadioGroup: React.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuRadioGroupProps & React.RefAttributes<HTMLDivElement>>;
9
- declare const DropdownMenuSubTrigger: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSubTriggerProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
10
- inset?: boolean;
11
- } & React.RefAttributes<HTMLDivElement>>;
12
- declare const DropdownMenuSubContent: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSubContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
13
- declare const DropdownMenuContent: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
14
- declare const DropdownMenuItem: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
15
- inset?: boolean;
16
- } & React.RefAttributes<HTMLDivElement>>;
17
- declare const DropdownMenuCheckboxItem: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuCheckboxItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
18
- declare const DropdownMenuRadioItem: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuRadioItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
19
- declare const DropdownMenuLabel: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuLabelProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
20
- inset?: boolean;
21
- } & React.RefAttributes<HTMLDivElement>>;
22
- declare const DropdownMenuSeparator: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSeparatorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
23
- declare function DropdownMenuShortcut({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>): import("react/jsx-runtime").JSX.Element;
24
- export { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuGroup, DropdownMenuPortal, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuRadioGroup, };
@@ -1,3 +0,0 @@
1
- import * as React from "react";
2
- declare const Input: React.ForwardRefExoticComponent<React.InputHTMLAttributes<HTMLInputElement> & React.RefAttributes<HTMLInputElement>>;
3
- export { Input };
@@ -1,5 +0,0 @@
1
- import * as React from "react";
2
- import * as LabelPrimitive from "@radix-ui/react-label";
3
- import { type VariantProps } from "class-variance-authority";
4
- declare const Label: React.ForwardRefExoticComponent<Omit<LabelPrimitive.LabelProps & React.RefAttributes<HTMLLabelElement>, "ref"> & VariantProps<(props?: import("class-variance-authority/types").ClassProp | undefined) => string> & React.RefAttributes<HTMLLabelElement>>;
5
- export { Label };
@@ -1,13 +0,0 @@
1
- import * as React from "react";
2
- import * as SelectPrimitive from "@radix-ui/react-select";
3
- declare const Select: React.FC<SelectPrimitive.SelectProps>;
4
- declare const SelectGroup: React.ForwardRefExoticComponent<SelectPrimitive.SelectGroupProps & React.RefAttributes<HTMLDivElement>>;
5
- declare const SelectValue: React.ForwardRefExoticComponent<SelectPrimitive.SelectValueProps & React.RefAttributes<HTMLSpanElement>>;
6
- declare const SelectTrigger: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
7
- declare const SelectScrollUpButton: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollUpButtonProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
8
- declare const SelectScrollDownButton: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollDownButtonProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
9
- declare const SelectContent: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
10
- declare const SelectItem: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
11
- declare const SelectLabel: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectLabelProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
12
- declare const SelectSeparator: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectSeparatorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
13
- export { Select, SelectGroup, SelectValue, SelectTrigger, SelectContent, SelectItem, SelectLabel, SelectSeparator, SelectScrollUpButton, SelectScrollDownButton, };