@nar-bus/ui-kit 1.2.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,55 @@
1
+ import { ReactNode } from 'react';
2
+ export interface FileRejection {
3
+ file: File;
4
+ reason: "type" | "size";
5
+ }
6
+ export interface DropzoneProps {
7
+ /** Fires with the accepted files whenever a selection is made (click or drop). */
8
+ onFilesSelected: (files: File[]) => void;
9
+ /** Native `accept` string, also used to filter dropped files (extensions and/or mime, incl. `image/*`). */
10
+ accept?: string;
11
+ /** Allow selecting more than one file. Default `false`. */
12
+ multiple?: boolean;
13
+ /** Max size in bytes; larger files are rejected via {@link onReject}. */
14
+ maxSize?: number;
15
+ /** Fires with files rejected by `accept` / `maxSize`. */
16
+ onReject?: (rejections: FileRejection[]) => void;
17
+ /** Inert + dimmed; click / drop / keyboard are disabled. */
18
+ disabled?: boolean;
19
+ /** Controlled selected file(s) — renders a preview card when `showPreview`. */
20
+ value?: File | File[] | null;
21
+ /** Show the built-in preview card(s). Defaults to `true` when `value` is provided. */
22
+ showPreview?: boolean;
23
+ /** Preview remove handler. Falls back to `onFilesSelected([])` when omitted. */
24
+ onRemove?: (file: File) => void;
25
+ /** Custom preview renderer — replaces the built-in card(s) (e.g. spreadsheet icon + extension badge). Receives the files and a `remove` callback. */
26
+ renderPreview?: (files: File[], remove: (file: File) => void) => ReactNode;
27
+ /** aria-label for the built-in preview's remove button. Default `"Kaldır"`. */
28
+ removeLabel?: string;
29
+ /** Leading icon in the empty zone. Default `<Upload />`. */
30
+ icon?: ReactNode;
31
+ /** Primary text in the empty zone. */
32
+ title?: ReactNode;
33
+ /** Secondary muted text (e.g. accepted types / max size). */
34
+ hint?: ReactNode;
35
+ /** Error message rendered under the zone. */
36
+ error?: ReactNode;
37
+ /** Custom empty-zone body (replaces icon/title/hint). */
38
+ children?: ReactNode;
39
+ className?: string;
40
+ id?: string;
41
+ "aria-label"?: string;
42
+ }
43
+ /**
44
+ * Dropzone — unified file drop area for both consumers.
45
+ *
46
+ * Drop-in for HES `FileDropZone` / `FirmwareFormPanel` and MDM
47
+ * `CoefficientUploadPanel`: dashed click/drag zone with keyboard activation,
48
+ * a drag-over state, optional `accept` / `maxSize` validation (rejects surface
49
+ * via `onReject`, so the i18n message stays consumer-owned), a controlled
50
+ * selected-file preview card with a remove button, and an `error` slot. The
51
+ * button-triggered upload flavour (MDM `FileUploadButton`) stays a trivial
52
+ * `Button` + `Progress` composition and is intentionally out of scope here.
53
+ */
54
+ export declare const Dropzone: import('react').ForwardRefExoticComponent<DropzoneProps & import('react').RefAttributes<HTMLInputElement>>;
55
+ //# sourceMappingURL=Dropzone.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dropzone.d.ts","sourceRoot":"","sources":["../../src/molecules/Dropzone.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAKf,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,kFAAkF;IAClF,eAAe,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IACzC,2GAA2G;IAC3G,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,KAAK,IAAI,CAAC;IACjD,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+EAA+E;IAC/E,KAAK,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;IAC7B,sFAAsF;IACtF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAChC,qJAAqJ;IACrJ,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,KAAK,SAAS,CAAC;IAC3E,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,sCAAsC;IACtC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,6DAA6D;IAC7D,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA0BD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,QAAQ,4GAyLpB,CAAC"}
@@ -13,6 +13,18 @@ export interface KpiCardProps {
13
13
  accentColor?: string;
14
14
  size?: "default" | "compact";
15
15
  className?: string;
16
+ /** Interactive card — role=button, Enter/Space, focus halo, hover elevation, cursor-pointer. */
17
+ onClick?: () => void;
18
+ /** Renders a Skeleton in place of the value (and suppresses the trend delta). */
19
+ isLoading?: boolean;
20
+ /** Inert + dimmed; disables click / tab when combined with `onClick`. */
21
+ disabled?: boolean;
22
+ /** Accessible name for the card — primarily labels the role=button when `onClick` is set (richer than the visible label+value). */
23
+ "aria-label"?: string;
24
+ /** Error state — value shows "—", an alert icon, and `errorMessage`. Takes precedence over `isLoading`; makes the card non-interactive. */
25
+ isError?: boolean;
26
+ /** Consumer-supplied error text shown under the value in the error state (message stays consumer-owned; the package owns only the chrome). */
27
+ errorMessage?: ReactNode;
16
28
  }
17
- export declare function KpiCard({ value, unit, label, trend, icon: IconComponent, accentColor, size, className, }: KpiCardProps): import("react").JSX.Element;
29
+ export declare function KpiCard({ value, unit, label, trend, icon: IconComponent, accentColor, size, className, onClick, isLoading, disabled, "aria-label": ariaLabel, isError, errorMessage, }: KpiCardProps): import("react").JSX.Element;
18
30
  //# sourceMappingURL=KpiCard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"KpiCard.d.ts","sourceRoot":"","sources":["../../src/molecules/KpiCard.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAgC,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAqC7E,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,SAAS,CAAC;IACjB,wGAAwG;IACxG,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,IAAI,GAAG,MAAM,CAAA;KAAE,CAAC;IACpD,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAqCD,wBAAgB,OAAO,CAAC,EACtB,KAAK,EACL,IAAI,EACJ,KAAK,EACL,KAAK,EACL,IAAI,EAAE,aAAa,EACnB,WAAW,EACX,IAAgB,EAChB,SAAS,GACV,EAAE,YAAY,+BAsEd"}
1
+ {"version":3,"file":"KpiCard.d.ts","sourceRoot":"","sources":["../../src/molecules/KpiCard.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA0C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC/E,OAAO,EAA+C,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAsC5F,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,SAAS,CAAC;IACjB,wGAAwG;IACxG,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,IAAI,GAAG,MAAM,CAAA;KAAE,CAAC;IACpD,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gGAAgG;IAChG,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,iFAAiF;IACjF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mIAAmI;IACnI,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2IAA2I;IAC3I,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8IAA8I;IAC9I,YAAY,CAAC,EAAE,SAAS,CAAC;CAC1B;AAqCD,wBAAgB,OAAO,CAAC,EACtB,KAAK,EACL,IAAI,EACJ,KAAK,EACL,KAAK,EACL,IAAI,EAAE,aAAa,EACnB,WAAW,EACX,IAAgB,EAChB,SAAS,EACT,OAAO,EACP,SAAS,EACT,QAAQ,EACR,YAAY,EAAE,SAAS,EACvB,OAAO,EACP,YAAY,GACb,EAAE,YAAY,+BA2Hd"}
@@ -0,0 +1,37 @@
1
+ import { HTMLAttributes, ReactNode } from 'react';
2
+ export type MetricTileTone = "default" | "ok" | "warn" | "crit";
3
+ /** Legacy StatCard status vocabulary — mapped onto {@link MetricTileTone}. */
4
+ export type MetricTileStatus = "online" | "warning" | "error" | "neutral";
5
+ /** Trend indicator (legacy StatCard parity). */
6
+ export interface MetricTileTrend {
7
+ value: number;
8
+ direction: "up" | "down" | "neutral";
9
+ }
10
+ export interface MetricTileProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
11
+ /** Small leading icon (rendered muted, next to the label). */
12
+ icon?: ReactNode;
13
+ /** Metric label (package convention) — small, muted, uppercase. Alias: `title`. */
14
+ label?: ReactNode;
15
+ /** Legacy StatCard alias for `label`. Ignored when `label` is set. */
16
+ title?: ReactNode;
17
+ /** Metric value — large, semibold, tabular mono. */
18
+ value: ReactNode;
19
+ /** Optional unit suffix rendered muted next to the value. */
20
+ unit?: ReactNode;
21
+ /** Value tone — tints the value for ok/warn/crit telemetry states. Takes precedence over `status`. Default `"default"`. */
22
+ tone?: MetricTileTone;
23
+ /** Legacy StatCard status — mapped to a tone (online→ok, warning→warn, error→crit, neutral→default). Ignored when `tone` is set. */
24
+ status?: MetricTileStatus;
25
+ /** Trend indicator (StatCard parity). up→success arrow, down→danger, neutral→muted. */
26
+ trend?: MetricTileTrend;
27
+ /** Small caption next to the trend (e.g. "vs geçen hafta"). Renders even without `trend`. */
28
+ trendLabel?: string;
29
+ /** Inline mini sparkline series (StatCard parity). Needs ≥2 points to draw. */
30
+ sparklineData?: number[];
31
+ /** Entry-stagger delay in ms (legacy StatCard parity). Applies a subtle fade-in; no-op under reduced motion. */
32
+ animationDelay?: number;
33
+ /** Shows a Skeleton in place of the value. */
34
+ isLoading?: boolean;
35
+ }
36
+ export declare const MetricTile: import('react').ForwardRefExoticComponent<MetricTileProps & import('react').RefAttributes<HTMLDivElement>>;
37
+ //# sourceMappingURL=MetricTile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetricTile.d.ts","sourceRoot":"","sources":["../../src/molecules/MetricTile.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAK5F,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;AAChE,8EAA8E;AAC9E,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAE1E,gDAAgD;AAChD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IACpF,8DAA8D;IAC9D,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,mFAAmF;IACnF,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,sEAAsE;IACtE,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,oDAAoD;IACpD,KAAK,EAAE,SAAS,CAAC;IACjB,6DAA6D;IAC7D,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,2HAA2H;IAC3H,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,oIAAoI;IACpI,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,uFAAuF;IACvF,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,6FAA6F;IAC7F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,gHAAgH;IAChH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAwDD,eAAO,MAAM,UAAU,4GAsHtB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { HTMLAttributes, ReactNode } from 'react';
2
+ export interface SectionCardProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
3
+ /** Section heading. */
4
+ title: ReactNode;
5
+ /** Section body. */
6
+ children: ReactNode;
7
+ /** Optional right-aligned header slot (actions). */
8
+ actions?: ReactNode;
9
+ }
10
+ /**
11
+ * SectionCard — a titled Card, the common "bordered section with a heading"
12
+ * surface. Thin convenience wrapper composed from the Card family (no bespoke
13
+ * chrome) — packages HES's app-local `SectionCard` ({title, children}) so both
14
+ * consumers adopt it override-free.
15
+ */
16
+ export declare const SectionCard: import('react').ForwardRefExoticComponent<SectionCardProps & import('react').RefAttributes<HTMLDivElement>>;
17
+ //# sourceMappingURL=SectionCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SectionCard.d.ts","sourceRoot":"","sources":["../../src/molecules/SectionCard.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGxE,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IACrF,uBAAuB;IACvB,KAAK,EAAE,SAAS,CAAC;IACjB,oBAAoB;IACpB,QAAQ,EAAE,SAAS,CAAC;IACpB,oDAAoD;IACpD,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED;;;;;GAKG;AACH,eAAO,MAAM,WAAW,6GAUvB,CAAC"}
@@ -1,9 +1,39 @@
1
1
  import { BadgeProps } from '../atoms/Badge';
2
- type StatusVariant = "success" | "warning" | "error" | "info" | "default";
3
- export interface StatusBadgeProps extends Omit<BadgeProps, "variant"> {
4
- status: string;
5
- statusMap?: Record<string, StatusVariant>;
2
+ type BadgeVariant = NonNullable<BadgeProps["variant"]>;
3
+ /**
4
+ * Legacy-parity status tone union — mirrors the legacy `@nar-bus/lena-ui-shared`
5
+ * `StatusColor` type exactly so a consumer's existing `Record<string, StatusColor>`
6
+ * color maps (e.g. MDM `status-maps.ts`) type-check and drop straight into
7
+ * `StatusBadge`'s `colorMap` without a rewrite.
8
+ */
9
+ export type StatusColor = "success" | "warning" | "error" | "info" | "neutral" | "accent" | "purple";
10
+ /** Tones accepted in a StatusBadge color map: legacy StatusColor + package tones. */
11
+ export type StatusTone = StatusColor | "default" | "muted";
12
+ /**
13
+ * Migration helper — maps a legacy `StatusColor` (or package tone) to a ui-kit
14
+ * `Badge` variant. Exported so a consumer migrating a legacy `Record<string, StatusColor>`
15
+ * map to a bare ui-kit `Badge` (without StatusBadge) can reuse the exact same tone mapping.
16
+ *
17
+ * `neutral`/`muted` → `default` (the package's subdued grey). `accent`/`purple` have no
18
+ * dedicated package tone yet — mapped to the nearest (`info`/`primary-subtle`).
19
+ */
20
+ export declare function statusColorToBadgeVariant(color: StatusTone | string | undefined | null): BadgeVariant;
21
+ export interface StatusBadgeProps extends Omit<BadgeProps, "variant" | "dot" | "pulse"> {
22
+ /** Status/enum value to display (legacy `value` parity). Takes precedence over `status`. */
23
+ value?: string | null;
24
+ /** Back-compat alias for `value` (existing package convention). Ignored when `value` is set. */
25
+ status?: string | null;
26
+ /** Map status value → tone. Accepts legacy `StatusColor` names + package tones. Takes precedence over `statusMap`. */
27
+ colorMap?: Record<string, StatusTone>;
28
+ /** Back-compat alias for `colorMap`. Ignored when `colorMap` is set. */
29
+ statusMap?: Record<string, StatusTone>;
30
+ /** Map status value → display label (legacy `labelMap` parity). */
31
+ labelMap?: Record<string, string>;
32
+ /** Show the leading status dot. Default: false (matches legacy showDot default). */
33
+ showDot?: boolean;
34
+ /** Pulse the dot for active/critical states (legacy `pulse` parity, boolean only). */
35
+ pulse?: boolean;
6
36
  }
7
- export declare function StatusBadge({ status, statusMap, style, ...props }: StatusBadgeProps): import("react").JSX.Element;
37
+ export declare function StatusBadge({ value, status, colorMap, statusMap, labelMap, showDot, pulse, style, ...props }: StatusBadgeProps): import("react").JSX.Element;
8
38
  export {};
9
39
  //# sourceMappingURL=StatusBadge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"StatusBadge.d.ts","sourceRoot":"","sources":["../../src/molecules/StatusBadge.tsx"],"names":[],"mappings":"AACA,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAExD,KAAK,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AA0C1E,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC;IACnE,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAC3C;AAED,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,+BAenF"}
1
+ {"version":3,"file":"StatusBadge.d.ts","sourceRoot":"","sources":["../../src/molecules/StatusBadge.tsx"],"names":[],"mappings":"AACA,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAExD,KAAK,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErG,qFAAqF;AACrF,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC;AAc3D;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,YAAY,CAErG;AA0CD,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,UAAU,EAAE,SAAS,GAAG,KAAK,GAAG,OAAO,CAAC;IACrF,4FAA4F;IAC5F,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,gGAAgG;IAChG,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,sHAAsH;IACtH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACtC,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACvC,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,oFAAoF;IACpF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sFAAsF;IACtF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,MAAM,EACN,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,OAAe,EACf,KAAK,EACL,KAAK,EACL,GAAG,KAAK,EACT,EAAE,gBAAgB,+BAqBlB"}
@@ -5,11 +5,14 @@ export { RelativeTimeCell, type RelativeTimeCellProps } from './RelativeTimeCell
5
5
  export { FormField, type FormFieldProps } from './FormField';
6
6
  export { SearchInput, type SearchInputProps } from './SearchInput';
7
7
  export { CopyableText, type CopyableTextProps } from './CopyableText';
8
- export { StatusBadge, type StatusBadgeProps } from './StatusBadge';
8
+ export { StatusBadge, statusColorToBadgeVariant, type StatusBadgeProps, type StatusColor, type StatusTone } from './StatusBadge';
9
9
  export { KpiCard, type KpiCardProps } from './KpiCard';
10
10
  export { EmptyState, type EmptyStateProps } from './EmptyState';
11
11
  export { ConfirmDialog, type ConfirmDialogProps } from './ConfirmDialog';
12
12
  export { DatePicker, type DatePickerProps } from './DatePicker';
13
13
  export { DateRangePicker, type DateRangePickerProps, type DateRange } from './DateRangePicker';
14
14
  export { Combobox, type ComboboxProps, type ComboboxOption } from './Combobox';
15
+ export { MetricTile, type MetricTileProps, type MetricTileTone, type MetricTileStatus, type MetricTileTrend } from './MetricTile';
16
+ export { SectionCard, type SectionCardProps } from './SectionCard';
17
+ export { Dropzone, type DropzoneProps, type FileRejection } from './Dropzone';
15
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/molecules/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC/F,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/molecules/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,yBAAyB,EAAE,KAAK,gBAAgB,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AACjI,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC/F,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAClI,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC"}
@@ -5,6 +5,16 @@ export interface FilterField {
5
5
  label: string;
6
6
  type: FilterFieldType;
7
7
  options?: SelectOption[];
8
+ /** For `type: "select"` — render a searchable (type-to-filter) dropdown.
9
+ * Forwarded to the underlying `Select`; ignored for other field types. */
10
+ searchable?: boolean;
11
+ /**
12
+ * Key of the field this one depends on. When the parent field's value
13
+ * changes, this field's staged value is auto-cleared (e.g. city → district).
14
+ * The panel does NOT own the dependent options — recompute them externally
15
+ * (via {@link FilterPanelProps.onDraftChange}) and re-pass `fields`.
16
+ */
17
+ dependsOn?: string;
8
18
  }
9
19
  export interface FilterValue {
10
20
  field: string;
@@ -17,6 +27,24 @@ export interface FilterPanelProps {
17
27
  onApply: (filters: FilterValue[]) => void;
18
28
  onClear: () => void;
19
29
  onClose: () => void;
30
+ /**
31
+ * Fires on every in-panel draft mutation (edit / operator change / clear /
32
+ * initial seed), BEFORE Apply. The payload is the current draft — every
33
+ * seeded or edited field, INCLUDING ones cleared to empty (so an explicit
34
+ * clear is visible); a field never seeded and never touched is absent. Use it
35
+ * to react to a staged field — e.g. recompute a dependent field's options off
36
+ * the staged parent value, then re-pass `fields` (that re-pass does NOT
37
+ * re-fire this — the fire effect keys only on the internal draft). May fire
38
+ * more than once for the same draft (e.g. React StrictMode double-invoke), so
39
+ * treat the handler as idempotent. Does NOT replace `onApply` (which still
40
+ * only fires from Apply, filtering out empties).
41
+ */
42
+ onDraftChange?: (draft: FilterValue[]) => void;
43
+ /** Render the per-field operator picker. Default `true`. Set `false` for a
44
+ * plain value-only filter: the picker is hidden, but each field still carries
45
+ * an operator at Apply — the type default for freshly-edited fields, or a
46
+ * seeded operator (from `values`) which is preserved as-is. */
47
+ showOperators?: boolean;
20
48
  }
21
- export declare function FilterPanel({ fields, values: externalValues, onApply, onClear, onClose }: FilterPanelProps): import("react").JSX.Element;
49
+ export declare function FilterPanel({ fields, values: externalValues, onApply, onClear, onClose, onDraftChange, showOperators, }: FilterPanelProps): import("react").JSX.Element;
22
50
  //# sourceMappingURL=FilterPanel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilterPanel.d.ts","sourceRoot":"","sources":["../../src/organisms/FilterPanel.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAU,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAqB5D,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEpE,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAmJD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;IAC1C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,gBAAgB,+BA+H1G"}
1
+ {"version":3,"file":"FilterPanel.d.ts","sourceRoot":"","sources":["../../src/organisms/FilterPanel.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAU,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAqB5D,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEpE,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB;+EAC2E;IAC3E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAwJD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;IAC1C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;;;;;;;;;;;OAWG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;IAC/C;;;oEAGgE;IAChE,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,MAAM,EAAE,cAAc,EACtB,OAAO,EACP,OAAO,EACP,OAAO,EACP,aAAa,EACb,aAAoB,GACrB,EAAE,gBAAgB,+BA+IlB"}
@@ -0,0 +1,34 @@
1
+ import { ComponentType, ReactNode } from 'react';
2
+ export interface PageHeaderProps {
3
+ /** Page title (required). */
4
+ title: string;
5
+ /**
6
+ * Optional hero icon (a lucide-react component reference). Legacy required it;
7
+ * optional here is a strict superset — MDM always passes it, and icon-less
8
+ * reuse is allowed. When omitted the hero icon box is not rendered.
9
+ */
10
+ icon?: ComponentType<{
11
+ className?: string;
12
+ }>;
13
+ /** Optional subtitle/description under the title. */
14
+ description?: string;
15
+ /** Right-aligned actions slot (a Button, a custom control, etc.). */
16
+ actions?: ReactNode;
17
+ className?: string;
18
+ }
19
+ /**
20
+ * PageHeader — standalone icon + title + actions page header with a bottom
21
+ * divider, for custom / non-list / non-report pages that don't get their title
22
+ * from a layout template's breadcrumb.
23
+ *
24
+ * Drop-in for MDM's legacy `@nar-bus/lena-ui-shared` PageHeader (34 files):
25
+ * same `title` / `icon` / `actions` / `description` prop names. Standalone by
26
+ * design — it does NOT compose Breadcrumb (host chrome owns that via
27
+ * `useBreadcrumb`) and is not embedded in the layout templates, whose title
28
+ * lives in the breadcrumb. The legacy hardcoded `accent-cyan` hero styling is
29
+ * translated to the package's `--color-primary` tokens (Badge `primary-subtle`
30
+ * vocabulary); the title uses the neutral `--color-text-primary` convention
31
+ * shared by `CardTitle`.
32
+ */
33
+ export declare function PageHeader({ title, icon: Icon, description, actions, className }: PageHeaderProps): import("react").JSX.Element;
34
+ //# sourceMappingURL=PageHeader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PageHeader.d.ts","sourceRoot":"","sources":["../../src/organisms/PageHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG3D,MAAM,WAAW,eAAe;IAC9B,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,IAAI,CAAC,EAAE,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7C,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,eAAe,+BAgCjG"}
@@ -1,4 +1,4 @@
1
- import { ReactNode } from 'react';
1
+ import { CSSProperties, ReactNode } from 'react';
2
2
  export interface SheetProps {
3
3
  open: boolean;
4
4
  onClose: () => void;
@@ -11,6 +11,14 @@ export interface SheetProps {
11
11
  footer?: ReactNode;
12
12
  /** Optional actions rendered in the header, left of the close button. */
13
13
  headerActions?: ReactNode;
14
+ /** Extra classes on the header container (e.g. a gradient FormSheet header). */
15
+ headerClassName?: string;
16
+ /**
17
+ * Inline style on the header container. Setting `--color-text-primary` /
18
+ * `--color-text-secondary` here re-themes the title/description (and the ghost
19
+ * close button, which reads `--color-text-secondary`) for dark/gradient headers.
20
+ */
21
+ headerStyle?: CSSProperties;
14
22
  }
15
- export declare function Sheet({ open, onClose, side, width, title, description, className, children, footer, headerActions, }: SheetProps): import('react').ReactPortal | null;
23
+ export declare function Sheet({ open, onClose, side, width, title, description, className, children, footer, headerActions, headerClassName, headerStyle, }: SheetProps): import('react').ReactPortal | null;
16
24
  //# sourceMappingURL=Sheet.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Sheet.d.ts","sourceRoot":"","sources":["../../src/organisms/Sheet.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAqB5F,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,yEAAyE;IACzE,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;AAED,wBAAgB,KAAK,CAAC,EACpB,IAAI,EACJ,OAAO,EACP,IAAc,EACd,KAAK,EACL,KAAK,EACL,WAAW,EACX,SAAS,EACT,QAAQ,EACR,MAAM,EACN,aAAa,GACd,EAAE,UAAU,sCAkJZ"}
1
+ {"version":3,"file":"Sheet.d.ts","sourceRoot":"","sources":["../../src/organisms/Sheet.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuD,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAqBhH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,yEAAyE;IACzE,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,gFAAgF;IAChF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,WAAW,CAAC,EAAE,aAAa,CAAC;CAC7B;AAED,wBAAgB,KAAK,CAAC,EACpB,IAAI,EACJ,OAAO,EACP,IAAc,EACd,KAAK,EACL,KAAK,EACL,WAAW,EACX,SAAS,EACT,QAAQ,EACR,MAAM,EACN,aAAa,EACb,eAAe,EACf,WAAW,GACZ,EAAE,UAAU,sCAkJZ"}
@@ -9,4 +9,5 @@ export { DataTable, DataTableColumnHeader, type DataTableProps, type DataTableCo
9
9
  export { Table, TableHeader, TableBody, TableFooter, TableRow, TableHead, TableCell, TableCaption, type TableProps, type TableHeaderProps, type TableBodyProps, type TableFooterProps, type TableRowProps, type TableHeadProps, type TableCellProps, type TableCaptionProps, } from './Table';
10
10
  export { FilterPanel, type FilterPanelProps, type FilterField, type FilterValue, type FilterFieldType } from './FilterPanel';
11
11
  export { JsonEditor, type JsonEditorProps } from './JsonEditor';
12
+ export { PageHeader, type PageHeaderProps } from './PageHeader';
12
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/organisms/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,KAAK,OAAO,EAAE,MAAM,QAAQ,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,KAAK,cAAc,EAAE,KAAK,0BAA0B,EAAE,KAAK,UAAU,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AACvN,OAAO,EACL,KAAK,EACL,WAAW,EACX,SAAS,EACT,WAAW,EACX,QAAQ,EACR,SAAS,EACT,SAAS,EACT,YAAY,EACZ,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,iBAAiB,GACvB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAC7H,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/organisms/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,KAAK,OAAO,EAAE,MAAM,QAAQ,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,KAAK,cAAc,EAAE,KAAK,0BAA0B,EAAE,KAAK,UAAU,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AACvN,OAAO,EACL,KAAK,EACL,WAAW,EACX,SAAS,EACT,WAAW,EACX,QAAQ,EACR,SAAS,EACT,SAAS,EACT,YAAY,EACZ,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,iBAAiB,GACvB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAC7H,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC"}