@nar-bus/ui-shared 1.9.0 → 1.11.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.
@@ -1,12 +1,17 @@
1
1
  import { MeterStatus } from '../types';
2
- export interface MeterStatusBadgeProps {
2
+ export type MeterStatusBadgeProps = {
3
3
  status: MeterStatus;
4
- connectionStatus?: "CONNECTED" | "DISCONNECTED" | "UNKNOWN";
5
- /** Localized display label for the meter status. When omitted, the raw code is rendered. */
6
- statusLabel?: string;
7
- /** Localized display label for the connection status. When omitted, the raw code is rendered. */
8
- connectionLabel?: string;
4
+ /** Localized display label for the meter status (required). */
5
+ statusLabel: string;
9
6
  className?: string;
10
- }
11
- export declare function MeterStatusBadge({ status, connectionStatus, statusLabel, connectionLabel, className, }: MeterStatusBadgeProps): import("react").JSX.Element;
7
+ } & ({
8
+ /** Connection status. When present, `connectionLabel` is required. */
9
+ connectionStatus: "CONNECTED" | "DISCONNECTED" | "UNKNOWN";
10
+ /** Localized display label for the connection status (required when `connectionStatus` is set). */
11
+ connectionLabel: string;
12
+ } | {
13
+ connectionStatus?: undefined;
14
+ connectionLabel?: undefined;
15
+ });
16
+ export declare function MeterStatusBadge(props: MeterStatusBadgeProps): import("react").JSX.Element;
12
17
  //# sourceMappingURL=MeterStatusBadge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MeterStatusBadge.d.ts","sourceRoot":"","sources":["../../src/components/MeterStatusBadge.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,WAAW,CAAC;IACpB,gBAAgB,CAAC,EAAE,WAAW,GAAG,cAAc,GAAG,SAAS,CAAC;IAC5D,4FAA4F;IAC5F,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iGAAiG;IACjG,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAqCD,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,SAAS,GACV,EAAE,qBAAqB,+BASvB"}
1
+ {"version":3,"file":"MeterStatusBadge.d.ts","sourceRoot":"","sources":["../../src/components/MeterStatusBadge.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,WAAW,CAAC;IACpB,+DAA+D;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,CACA;IACE,sEAAsE;IACtE,gBAAgB,EAAE,WAAW,GAAG,cAAc,GAAG,SAAS,CAAC;IAC3D,mGAAmG;IACnG,eAAe,EAAE,MAAM,CAAC;CACzB,GACD;IAAE,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAAC,eAAe,CAAC,EAAE,SAAS,CAAA;CAAE,CAChE,CAAC;AAqCF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,+BAU5D"}
@@ -3,12 +3,12 @@ export interface ModemStatusBadgeProps {
3
3
  lifecycleStatus: LifecycleStatus;
4
4
  networkStatus: NetworkStatus;
5
5
  powerStatus: PowerStatus;
6
- /** Localized display label for the lifecycle status. When omitted, the raw code is rendered. */
7
- lifecycleLabel?: string;
8
- /** Localized display label for the network status. When omitted, the raw code is rendered. */
9
- networkLabel?: string;
10
- /** Localized display label for the power status. When omitted, the raw code is rendered. */
11
- powerLabel?: string;
6
+ /** Localized display label for the lifecycle status (required). */
7
+ lifecycleLabel: string;
8
+ /** Localized display label for the network status (required). */
9
+ networkLabel: string;
10
+ /** Localized display label for the power status (required). */
11
+ powerLabel: string;
12
12
  className?: string;
13
13
  }
14
14
  export declare function ModemStatusBadge({ lifecycleStatus, networkStatus, powerStatus, lifecycleLabel, networkLabel, powerLabel, className, }: ModemStatusBadgeProps): import("react").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"ModemStatusBadge.d.ts","sourceRoot":"","sources":["../../src/components/ModemStatusBadge.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5E,MAAM,WAAW,qBAAqB;IACpC,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,gGAAgG;IAChG,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8FAA8F;IAC9F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4FAA4F;IAC5F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAmDD,wBAAgB,gBAAgB,CAAC,EAC/B,eAAe,EACf,aAAa,EACb,WAAW,EACX,cAAc,EACd,YAAY,EACZ,UAAU,EACV,SAAS,GACV,EAAE,qBAAqB,+BAQvB"}
1
+ {"version":3,"file":"ModemStatusBadge.d.ts","sourceRoot":"","sources":["../../src/components/ModemStatusBadge.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5E,MAAM,WAAW,qBAAqB;IACpC,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,mEAAmE;IACnE,cAAc,EAAE,MAAM,CAAC;IACvB,iEAAiE;IACjE,YAAY,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAmDD,wBAAgB,gBAAgB,CAAC,EAC/B,eAAe,EACf,aAAa,EACb,WAAW,EACX,cAAc,EACd,YAAY,EACZ,UAAU,EACV,SAAS,GACV,EAAE,qBAAqB,+BAQvB"}
@@ -1,8 +1,8 @@
1
1
  import { OrderStatus } from '../types';
2
2
  export interface OrderStatusBadgeProps {
3
3
  status: OrderStatus;
4
- /** Localized display label for the order status. When omitted, the raw code is rendered. */
5
- label?: string;
4
+ /** Localized display label for the order status (required). */
5
+ label: string;
6
6
  className?: string;
7
7
  }
8
8
  export declare function OrderStatusBadge({ status, label, className }: OrderStatusBadgeProps): import("react").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"OrderStatusBadge.d.ts","sourceRoot":"","sources":["../../src/components/OrderStatusBadge.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,WAAW,CAAC;IACpB,4FAA4F;IAC5F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAgBD,wBAAgB,gBAAgB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,qBAAqB,+BAQnF"}
1
+ {"version":3,"file":"OrderStatusBadge.d.ts","sourceRoot":"","sources":["../../src/components/OrderStatusBadge.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,WAAW,CAAC;IACpB,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAgBD,wBAAgB,gBAAgB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,qBAAqB,+BAQnF"}
@@ -1,5 +1,14 @@
1
1
  import { DashboardKpis } from '../types';
2
+ /**
3
+ * Presentational, fully prop-driven status bar. `kpis` is the SOLE data input —
4
+ * feed it from ANY source (React Query, polling, SSE, static/mocked state). The
5
+ * component has NO transport/SSE dependency and does not require a specific
6
+ * real-time data hook; the data source is the consumer's choice, not a contract.
7
+ * Renders nothing when `kpis` is undefined.
8
+ */
2
9
  export interface RealTimeStatusBarProps {
10
+ /** The KPI snapshot to render. Source-agnostic — wire it from React Query,
11
+ * a polling interval, an SSE stream, or static state. Bar renders null when absent. */
3
12
  kpis?: DashboardKpis;
4
13
  className?: string;
5
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RealTimeStatusBar.d.ts","sourceRoot":"","sources":["../../src/components/RealTimeStatusBar.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAoED,wBAAgB,iBAAiB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,sBAAsB,sCAwC5E"}
1
+ {"version":3,"file":"RealTimeStatusBar.d.ts","sourceRoot":"","sources":["../../src/components/RealTimeStatusBar.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C;;;;;;GAMG;AACH,MAAM,WAAW,sBAAsB;IACrC;4FACwF;IACxF,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAqED,wBAAgB,iBAAiB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,sBAAsB,sCAwC5E"}
@@ -26,7 +26,13 @@ export interface LoginFormProps {
26
26
  passwordError?: string;
27
27
  isLoading?: boolean;
28
28
  errorSlot?: ReactNode;
29
+ /** Optional control rendered directly after the password field, before the
30
+ * remember-me / forgot-password row — e.g. an env-gated LDAP/AD auth-type toggle. */
31
+ afterPassword?: ReactNode;
32
+ /** Optional control rendered just above the submit button (after errorSlot) —
33
+ * e.g. an SSO/LDAP notice or a secondary auth control. */
34
+ beforeSubmit?: ReactNode;
29
35
  autoFocusUsername?: boolean;
30
36
  }
31
- export declare function LoginForm({ labels, tone, align, username, onUsernameChange, password, onPasswordChange, rememberMe, onRememberMeChange, onSubmit, forgotPasswordHref, usernameError, passwordError, isLoading, errorSlot, autoFocusUsername, }: LoginFormProps): import("react").JSX.Element;
37
+ export declare function LoginForm({ labels, tone, align, username, onUsernameChange, password, onPasswordChange, rememberMe, onRememberMeChange, onSubmit, forgotPasswordHref, usernameError, passwordError, isLoading, errorSlot, afterPassword, beforeSubmit, autoFocusUsername, }: LoginFormProps): import("react").JSX.Element;
32
38
  //# sourceMappingURL=LoginForm.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LoginForm.d.ts","sourceRoot":"","sources":["../../../src/components/auth/LoginForm.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQlD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,eAAe,CAAC;IACxB,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,UAAU,EAAE,OAAO,CAAC;IACpB,kBAAkB,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,QAAQ,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;IACjC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAQD,wBAAgB,SAAS,CAAC,EACxB,MAAM,EACN,IAAgB,EAChB,KAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,QAAQ,EACR,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,QAAQ,EACR,kBAAuC,EACvC,aAAa,EACb,aAAa,EACb,SAAiB,EACjB,SAAS,EACT,iBAAwB,GACzB,EAAE,cAAc,+BAqJhB"}
1
+ {"version":3,"file":"LoginForm.d.ts","sourceRoot":"","sources":["../../../src/components/auth/LoginForm.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQlD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,eAAe,CAAC;IACxB,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,UAAU,EAAE,OAAO,CAAC;IACpB,kBAAkB,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,QAAQ,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;IACjC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;0FACsF;IACtF,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B;+DAC2D;IAC3D,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAQD,wBAAgB,SAAS,CAAC,EACxB,MAAM,EACN,IAAgB,EAChB,KAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,QAAQ,EACR,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,QAAQ,EACR,kBAAuC,EACvC,aAAa,EACb,aAAa,EACb,SAAiB,EACjB,SAAS,EACT,aAAa,EACb,YAAY,EACZ,iBAAwB,GACzB,EAAE,cAAc,+BAmJhB"}
@@ -1 +1 @@
1
- {"version":3,"file":"SlaReadout.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/hero/SlaReadout.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAInD,MAAM,WAAW,eAAe;IAC9B,yCAAyC;IACzC,GAAG,EAAE,cAAc,GAAG,SAAS,CAAC;IAChC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAUD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,UAAU,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,eAAe,+BAuFpE"}
1
+ {"version":3,"file":"SlaReadout.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/hero/SlaReadout.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAInD,MAAM,WAAW,eAAe;IAC9B,yCAAyC;IACzC,GAAG,EAAE,cAAc,GAAG,SAAS,CAAC;IAChC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAUD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,UAAU,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,eAAe,+BAgGpE"}
@@ -5,7 +5,9 @@ export interface DetailFieldRowProps {
5
5
  /** Field value (right, INK semibold). `null`/`undefined` falls back to
6
6
  * `fallback`, then an em dash. */
7
7
  value: ReactNode;
8
- /** Render the value in the monospace font (slugs, OBIS, timestamps). */
8
+ /** Render the value in the monospace font (slugs, OBIS, timestamps).
9
+ * Applies only to a real `value`; the fallback/em-dash placeholder is never
10
+ * monospaced (keeps the `—` proportional so it matches non-mono rows). */
9
11
  mono?: boolean;
10
12
  /** Value tone — `accent` tints the value cyan. Ignored when `accent` (the
11
13
  * arbitrary-color prop below) is given. */
@@ -1 +1 @@
1
- {"version":3,"file":"DetailFieldRow.d.ts","sourceRoot":"","sources":["../../../src/components/detail-glass/DetailFieldRow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,WAAW,mBAAmB;IAClC,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd;uCACmC;IACnC,KAAK,EAAE,SAAS,CAAC;IACjB,wEAAwE;IACxE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;gDAC4C;IAC5C,IAAI,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC5B,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;6EACyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,KAAK,EACL,IAAY,EACZ,IAAgB,EAChB,QAAQ,EACR,MAAM,EACN,MAAM,EACN,SAAS,GACV,EAAE,mBAAmB,+BAkBrB"}
1
+ {"version":3,"file":"DetailFieldRow.d.ts","sourceRoot":"","sources":["../../../src/components/detail-glass/DetailFieldRow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,WAAW,mBAAmB;IAClC,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd;uCACmC;IACnC,KAAK,EAAE,SAAS,CAAC;IACjB;;+EAE2E;IAC3E,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;gDAC4C;IAC5C,IAAI,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC5B,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;6EACyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,KAAK,EACL,IAAY,EACZ,IAAgB,EAChB,QAAQ,EACR,MAAM,EACN,MAAM,EACN,SAAS,GACV,EAAE,mBAAmB,+BAmBrB"}