@govnepal/ui 0.2.0 → 0.3.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.
Files changed (73) hide show
  1. package/dist/BackLink.d.ts +7 -0
  2. package/dist/BackLink.d.ts.map +1 -0
  3. package/dist/BackLink.js +14 -0
  4. package/dist/BackLink.js.map +1 -0
  5. package/dist/Breadcrumb.d.ts +16 -0
  6. package/dist/Breadcrumb.d.ts.map +1 -0
  7. package/dist/Breadcrumb.js +9 -0
  8. package/dist/Breadcrumb.js.map +1 -0
  9. package/dist/Card.d.ts +16 -0
  10. package/dist/Card.d.ts.map +1 -0
  11. package/dist/Card.js +7 -0
  12. package/dist/Card.js.map +1 -0
  13. package/dist/CharacterCount.d.ts +7 -0
  14. package/dist/CharacterCount.d.ts.map +1 -0
  15. package/dist/CharacterCount.js +26 -0
  16. package/dist/CharacterCount.js.map +1 -0
  17. package/dist/ConfirmationDialog.d.ts +24 -0
  18. package/dist/ConfirmationDialog.d.ts.map +1 -0
  19. package/dist/ConfirmationDialog.js +13 -0
  20. package/dist/ConfirmationDialog.js.map +1 -0
  21. package/dist/Footer.d.ts +22 -0
  22. package/dist/Footer.d.ts.map +1 -0
  23. package/dist/Footer.js +7 -0
  24. package/dist/Footer.js.map +1 -0
  25. package/dist/IconButton.d.ts +15 -0
  26. package/dist/IconButton.d.ts.map +1 -0
  27. package/dist/IconButton.js +6 -0
  28. package/dist/IconButton.js.map +1 -0
  29. package/dist/Modal.d.ts +18 -0
  30. package/dist/Modal.d.ts.map +1 -0
  31. package/dist/Modal.js +68 -0
  32. package/dist/Modal.js.map +1 -0
  33. package/dist/Pagination.d.ts +11 -0
  34. package/dist/Pagination.d.ts.map +1 -0
  35. package/dist/Pagination.js +26 -0
  36. package/dist/Pagination.js.map +1 -0
  37. package/dist/SkipLink.d.ts +6 -0
  38. package/dist/SkipLink.d.ts.map +1 -0
  39. package/dist/SkipLink.js +14 -0
  40. package/dist/SkipLink.js.map +1 -0
  41. package/dist/SummaryList.d.ts +18 -0
  42. package/dist/SummaryList.d.ts.map +1 -0
  43. package/dist/SummaryList.js +6 -0
  44. package/dist/SummaryList.js.map +1 -0
  45. package/dist/Tabs.d.ts +20 -0
  46. package/dist/Tabs.d.ts.map +1 -0
  47. package/dist/Tabs.js +38 -0
  48. package/dist/Tabs.js.map +1 -0
  49. package/dist/Tag.d.ts +11 -0
  50. package/dist/Tag.d.ts.map +1 -0
  51. package/dist/Tag.js +11 -0
  52. package/dist/Tag.js.map +1 -0
  53. package/dist/Textarea.d.ts +15 -0
  54. package/dist/Textarea.d.ts.map +1 -0
  55. package/dist/Textarea.js +13 -0
  56. package/dist/Textarea.js.map +1 -0
  57. package/dist/Toast.d.ts +11 -0
  58. package/dist/Toast.d.ts.map +1 -0
  59. package/dist/Toast.js +31 -0
  60. package/dist/Toast.js.map +1 -0
  61. package/dist/Toggle.d.ts +22 -0
  62. package/dist/Toggle.d.ts.map +1 -0
  63. package/dist/Toggle.js +9 -0
  64. package/dist/Toggle.js.map +1 -0
  65. package/dist/generated/statusTaxonomy.js +1 -1
  66. package/dist/index.d.ts +16 -0
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +19 -0
  69. package/dist/index.js.map +1 -1
  70. package/dist/themeCore.d.ts.map +1 -1
  71. package/dist/themeCore.js +8 -2
  72. package/dist/themeCore.js.map +1 -1
  73. package/package.json +2 -2
@@ -0,0 +1,7 @@
1
+ import type { AnchorHTMLAttributes, ReactNode } from "react";
2
+ interface BackLinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
3
+ children?: ReactNode;
4
+ }
5
+ export declare function BackLink({ children, className, ...rest }: BackLinkProps): import("react").JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=BackLink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BackLink.d.ts","sourceRoot":"","sources":["../src/BackLink.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAW7D,UAAU,aAAc,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IACrE,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,aAAa,+BAUvE"}
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cx } from "./cx.js";
3
+ import { useTheme } from "./ThemeProvider.js";
4
+ /**
5
+ * Back link (components/back-link.md) — return to the previous step of a task flow without losing
6
+ * data (§7.1). Renders above the page heading. It is an <a> when it maps to a URL; the browser Back
7
+ * button must also keep working (§7.2) — this is the in-page mirror of it.
8
+ */
9
+ const LABEL = { ne: "पछाडि", en: "Back" };
10
+ export function BackLink({ children, className, ...rest }) {
11
+ const { language } = useTheme();
12
+ return (_jsxs("a", { className: cx("gov-link", "gov-link--back", className), ...rest, children: [_jsx("svg", { width: "20", height: "20", viewBox: "0 0 24 24", "aria-hidden": "true", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: _jsx("path", { d: "M15 6l-6 6 6 6" }) }), children ?? LABEL[language]] }));
13
+ }
14
+ //# sourceMappingURL=BackLink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BackLink.js","sourceRoot":"","sources":["../src/BackLink.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C;;;;GAIG;AACH,MAAM,KAAK,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAW,CAAC;AAMnD,MAAM,UAAU,QAAQ,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAAiB;IACtE,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAC;IAChC,OAAO,CACL,aAAG,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,gBAAgB,EAAE,SAAS,CAAC,KAAM,IAAI,aACjE,cAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,iBAAa,MAAM,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAE,CAAC,EAAE,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,YAC/J,eAAM,CAAC,EAAC,gBAAgB,GAAG,GACvB,EACL,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,IAC1B,CACL,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { ReactNode } from "react";
2
+ /**
3
+ * Breadcrumb (components/breadcrumb.md) — where a page sits in the site hierarchy, with links to
4
+ * ancestors. Web/desktop only (a linear task flow uses the stepper + back link, §7.2). The current
5
+ * page is the last crumb, marked aria-current and not a link; separators are decorative.
6
+ */
7
+ export interface Crumb {
8
+ label: ReactNode;
9
+ href?: string;
10
+ }
11
+ export declare function Breadcrumb({ items, label, className }: {
12
+ items: Crumb[];
13
+ label?: string;
14
+ className?: string;
15
+ }): import("react").JSX.Element;
16
+ //# sourceMappingURL=Breadcrumb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Breadcrumb.d.ts","sourceRoot":"","sources":["../src/Breadcrumb.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC;;;;GAIG;AACH,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,KAAoB,EAAE,SAAS,EAAE,EAAE;IAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BA0B5H"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cx } from "./cx.js";
3
+ export function Breadcrumb({ items, label = "Breadcrumb", className }) {
4
+ return (_jsx("nav", { "aria-label": label, className: className, children: _jsx("ol", { className: "gov-breadcrumb", children: items.map((item, i) => {
5
+ const isLast = i === items.length - 1;
6
+ return (_jsxs("li", { style: { display: "inline-flex", alignItems: "center", gap: "var(--gov-space-2)" }, children: [i > 0 && (_jsx("span", { className: "gov-breadcrumb__sep", "aria-hidden": "true", children: "\u203A" })), isLast || !item.href ? (_jsx("span", { "aria-current": isLast ? "page" : undefined, children: item.label })) : (_jsx("a", { className: "gov-link", href: item.href, children: item.label }))] }, i));
7
+ }) }) }));
8
+ }
9
+ //# sourceMappingURL=Breadcrumb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Breadcrumb.js","sourceRoot":"","sources":["../src/Breadcrumb.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAY7B,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,YAAY,EAAE,SAAS,EAA0D;IAC3H,OAAO,CACL,4BAAiB,KAAK,EAAE,SAAS,EAAE,SAAS,YAC1C,aAAI,SAAS,EAAC,gBAAgB,YAC3B,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBACrB,MAAM,MAAM,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;gBACtC,OAAO,CACL,cAAY,KAAK,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,oBAAoB,EAAE,aAC3F,CAAC,GAAG,CAAC,IAAI,CACR,eAAM,SAAS,EAAC,qBAAqB,iBAAa,MAAM,uBAEjD,CACR,EACA,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CACtB,+BAAoB,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,YAAG,IAAI,CAAC,KAAK,GAAQ,CACrE,CAAC,CAAC,CAAC,CACF,YAAG,SAAS,EAAC,UAAU,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,YACpC,IAAI,CAAC,KAAK,GACT,CACL,KAZM,CAAC,CAaL,CACN,CAAC;YACJ,CAAC,CAAC,GACC,GACD,CACP,CAAC;AACJ,CAAC"}
package/dist/Card.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ import type { ElementType, HTMLAttributes, ReactNode } from "react";
2
+ /**
3
+ * Card (components/card.md) — group everything about one subject into one opaque surface. The
4
+ * `interactive` variant makes the WHOLE card a single link; never nest independent links inside a
5
+ * clickable card (a nested-interactive failure), so interactive cards render an <a> and expect
6
+ * their content to be non-interactive.
7
+ */
8
+ interface CardProps extends HTMLAttributes<HTMLElement> {
9
+ interactive?: boolean;
10
+ href?: string;
11
+ as?: ElementType;
12
+ children: ReactNode;
13
+ }
14
+ export declare function Card({ interactive, href, as, className, children, ...rest }: CardProps): import("react").JSX.Element;
15
+ export {};
16
+ //# sourceMappingURL=Card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../src/Card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGpE;;;;;GAKG;AACH,UAAU,SAAU,SAAQ,cAAc,CAAC,WAAW,CAAC;IACrD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,IAAI,CAAC,EAAE,WAAmB,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,SAAS,+BAW9F"}
package/dist/Card.js ADDED
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cx } from "./cx.js";
3
+ export function Card({ interactive = false, href, as, className, children, ...rest }) {
4
+ const Tag = interactive ? "a" : (as ?? "div");
5
+ return (_jsx(Tag, { className: cx("gov-card", interactive && "gov-card--interactive", className), ...(interactive ? { href } : {}), ...rest, children: children }));
6
+ }
7
+ //# sourceMappingURL=Card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card.js","sourceRoot":"","sources":["../src/Card.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAe7B,MAAM,UAAU,IAAI,CAAC,EAAE,WAAW,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAa;IAC7F,MAAM,GAAG,GAAgB,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,CAAC;IAC3D,OAAO,CACL,KAAC,GAAG,IACF,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,WAAW,IAAI,uBAAuB,EAAE,SAAS,CAAC,KACxE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC7B,IAAI,YAEP,QAAQ,GACL,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ReactNode } from "react";
2
+ export declare function CharacterCount({ current, max, id }: {
3
+ current: number;
4
+ max: number;
5
+ id?: string;
6
+ }): ReactNode;
7
+ //# sourceMappingURL=CharacterCount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CharacterCount.d.ts","sourceRoot":"","sources":["../src/CharacterCount.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAYvC,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAmB7G"}
@@ -0,0 +1,26 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { cx } from "./cx.js";
4
+ import { useTheme } from "./ThemeProvider.js";
5
+ /**
6
+ * Character count (components/character-count.md) — the remaining-characters message below a
7
+ * length-limited field, announced politely (aria-live="polite") so a screen reader hears it without
8
+ * interruption. Over the limit it uses the error style but never truncates the value.
9
+ */
10
+ const NE_DIGITS = ["०", "१", "२", "३", "४", "५", "६", "७", "८", "९"];
11
+ const toNe = (n) => String(Math.abs(n)).split("").map((d) => NE_DIGITS[Number(d)] ?? d).join("");
12
+ export function CharacterCount({ current, max, id }) {
13
+ const { language } = useTheme();
14
+ const remaining = max - current;
15
+ const over = remaining < 0;
16
+ const num = (n) => (language === "ne" ? toNe(n) : String(Math.abs(n)));
17
+ const message = over
18
+ ? language === "ne"
19
+ ? `${num(remaining)} अक्षर बढी छ`
20
+ : `${num(remaining)} characters too many`
21
+ : language === "ne"
22
+ ? `${num(remaining)} अक्षर बाँकी`
23
+ : `You have ${num(remaining)} characters remaining`;
24
+ return (_jsx("span", { id: id, className: cx("gov-character-count", over && "gov-character-count--over"), "aria-live": "polite", children: message }));
25
+ }
26
+ //# sourceMappingURL=CharacterCount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CharacterCount.js","sourceRoot":"","sources":["../src/CharacterCount.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C;;;;GAIG;AACH,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACrE,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAEzG,MAAM,UAAU,cAAc,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAiD;IAChG,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAC;IAChC,MAAM,SAAS,GAAG,GAAG,GAAG,OAAO,CAAC;IAChC,MAAM,IAAI,GAAG,SAAS,GAAG,CAAC,CAAC;IAC3B,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/E,MAAM,OAAO,GAAG,IAAI;QAClB,CAAC,CAAC,QAAQ,KAAK,IAAI;YACjB,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,cAAc;YACjC,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,sBAAsB;QAC3C,CAAC,CAAC,QAAQ,KAAK,IAAI;YACjB,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,cAAc;YACjC,CAAC,CAAC,YAAY,GAAG,CAAC,SAAS,CAAC,uBAAuB,CAAC;IAExD,OAAO,CACL,eAAM,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,IAAI,IAAI,2BAA2B,CAAC,eAAY,QAAQ,YACxG,OAAO,GACH,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { ReactNode } from "react";
2
+ /**
3
+ * Confirmation dialog (components/confirmation-dialog.md) — an explicit, informed confirmation before
4
+ * a high-risk or irreversible action (approve, reject, delete, submit, print, export — §9.1). Warning
5
+ * text alone is not a sufficient safeguard.
6
+ *
7
+ * Layers on Modal: role="alertdialog", focus starts on the SAFER (cancel) control, a destructive
8
+ * confirmation does not dismiss on scrim click, and the confirm button repeats the specific verb and
9
+ * object ("Reject application"). Nothing inside animates (§5.5).
10
+ */
11
+ interface ConfirmationDialogProps {
12
+ open: boolean;
13
+ onConfirm: () => void;
14
+ onCancel: () => void;
15
+ title: ReactNode;
16
+ children: ReactNode;
17
+ /** The confirm button label — the specific verb and object, e.g. "Reject application". */
18
+ confirmLabel: ReactNode;
19
+ cancelLabel?: ReactNode;
20
+ destructive?: boolean;
21
+ }
22
+ export declare function ConfirmationDialog({ open, onConfirm, onCancel, title, children, confirmLabel, cancelLabel, destructive, }: ConfirmationDialogProps): import("react").JSX.Element;
23
+ export {};
24
+ //# sourceMappingURL=ConfirmationDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfirmationDialog.d.ts","sourceRoot":"","sources":["../src/ConfirmationDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC;;;;;;;;GAQG;AACH,UAAU,uBAAuB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;IACpB,0FAA0F;IAC1F,YAAY,EAAE,SAAS,CAAC;IACxB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,kBAAkB,CAAC,EACjC,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,WAAmB,GACpB,EAAE,uBAAuB,+BA2BzB"}
@@ -0,0 +1,13 @@
1
+ "use client";
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Modal } from "./Modal.js";
4
+ import { Button } from "./Button.js";
5
+ import { useTheme } from "./ThemeProvider.js";
6
+ export function ConfirmationDialog({ open, onConfirm, onCancel, title, children, confirmLabel, cancelLabel, destructive = false, }) {
7
+ const { language } = useTheme();
8
+ const cancel = cancelLabel ?? (language === "ne" ? "रद्द गर्नुहोस्" : "Cancel");
9
+ return (_jsx(Modal, { open: open, onClose: onCancel, role: "alertdialog", title: title,
10
+ // A destructive decision must be read: no silent scrim dismissal.
11
+ dismissOnScrim: !destructive, actions: _jsxs(_Fragment, { children: [_jsx(Button, { variant: "secondary", type: "button", onClick: onCancel, children: cancel }), _jsx(Button, { variant: destructive ? "destructive" : "primary", type: "button", onClick: onConfirm, children: confirmLabel })] }), children: children }));
12
+ }
13
+ //# sourceMappingURL=ConfirmationDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfirmationDialog.js","sourceRoot":"","sources":["../src/ConfirmationDialog.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAuB9C,MAAM,UAAU,kBAAkB,CAAC,EACjC,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,WAAW,GAAG,KAAK,GACK;IACxB,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,WAAW,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAEhF,OAAO,CACL,KAAC,KAAK,IACJ,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,QAAQ,EACjB,IAAI,EAAC,aAAa,EAClB,KAAK,EAAE,KAAK;QACZ,kEAAkE;QAClE,cAAc,EAAE,CAAC,WAAW,EAC5B,OAAO,EACL,8BAEE,KAAC,MAAM,IAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,QAAQ,YACxD,MAAM,GACA,EACT,KAAC,MAAM,IAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,SAAS,YACvF,YAAY,GACN,IACR,YAGJ,QAAQ,GACH,CACT,CAAC;AACJ,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { ReactNode } from "react";
2
+ /**
3
+ * Government footer (components/footer.md, identity/footer) — the standing trust cues on every page:
4
+ * owning office (Nepali-first), a REAL verifiable phone and address, and the required accessibility
5
+ * and report-a-problem links. Its absence is itself a phishing tell (§9.2). Two columns, collapsing
6
+ * to one on mobile. No language switcher — that lives once, in the header.
7
+ */
8
+ interface FooterProps {
9
+ officeNe: string;
10
+ officeEn: string;
11
+ phone: string;
12
+ address: string;
13
+ links?: {
14
+ label: ReactNode;
15
+ href: string;
16
+ }[];
17
+ copyright?: ReactNode;
18
+ className?: string;
19
+ }
20
+ export declare function Footer({ officeNe, officeEn, phone, address, links, copyright, className }: FooterProps): import("react").JSX.Element;
21
+ export {};
22
+ //# sourceMappingURL=Footer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../src/Footer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC;;;;;GAKG;AACH,UAAU,WAAW;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7C,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,MAAM,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAU,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,WAAW,+BA+B3G"}
package/dist/Footer.js ADDED
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cx } from "./cx.js";
3
+ import { Container } from "./layout.js";
4
+ export function Footer({ officeNe, officeEn, phone, address, links = [], copyright, className }) {
5
+ return (_jsx("footer", { className: cx("gov-footer", className), role: "contentinfo", children: _jsx(Container, { children: _jsxs("div", { className: "gov-footer__grid", children: [_jsxs("div", { children: [_jsx("p", { style: { fontWeight: "var(--gov-font-weight-semibold)" }, lang: "ne", children: officeNe }), _jsx("p", { className: "gov-footer__office-en", lang: "en", children: officeEn }), _jsx("p", { children: phone }), _jsx("p", { children: address }), copyright && _jsx("p", { className: "gov-text-secondary gov-text-small", children: copyright })] }), links.length > 0 && (_jsx("ul", { className: "gov-footer__links", children: links.map((l, i) => (_jsx("li", { children: _jsx("a", { className: "gov-link", href: l.href, children: l.label }) }, i))) }))] }) }) }));
6
+ }
7
+ //# sourceMappingURL=Footer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Footer.js","sourceRoot":"","sources":["../src/Footer.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAkBxC,MAAM,UAAU,MAAM,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,GAAG,EAAE,EAAE,SAAS,EAAE,SAAS,EAAe;IAC1G,OAAO,CACL,iBAAQ,SAAS,EAAE,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,IAAI,EAAC,aAAa,YAChE,KAAC,SAAS,cACR,eAAK,SAAS,EAAC,kBAAkB,aAC/B,0BACE,YAAG,KAAK,EAAE,EAAE,UAAU,EAAE,iCAAiC,EAAE,EAAE,IAAI,EAAC,IAAI,YACnE,QAAQ,GACP,EACJ,YAAG,SAAS,EAAC,uBAAuB,EAAC,IAAI,EAAC,IAAI,YAC3C,QAAQ,GACP,EACJ,sBAAI,KAAK,GAAK,EACd,sBAAI,OAAO,GAAK,EACf,SAAS,IAAI,YAAG,SAAS,EAAC,mCAAmC,YAAE,SAAS,GAAK,IAC1E,EACL,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CACnB,aAAI,SAAS,EAAC,mBAAmB,YAC9B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACnB,uBACE,YAAG,SAAS,EAAC,UAAU,EAAC,IAAI,EAAE,CAAC,CAAC,IAAI,YACjC,CAAC,CAAC,KAAK,GACN,IAHG,CAAC,CAIL,CACN,CAAC,GACC,CACN,IACG,GACI,GACL,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { ButtonHTMLAttributes, ReactNode } from "react";
2
+ /**
3
+ * Icon button (components/icon-button.md) — an icon-only action. The `label` is REQUIRED and becomes
4
+ * the accessible name: an icon button with no accessible name is unusable by a screen reader. Never
5
+ * a primary action (§5.4). The 44x44 hit area holds even though the icon is smaller.
6
+ */
7
+ interface IconButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "aria-label"> {
8
+ /** The action, e.g. "Close" — becomes the accessible name and (via title) the tooltip. */
9
+ label: string;
10
+ icon: ReactNode;
11
+ variant?: "default" | "ghost";
12
+ }
13
+ export declare function IconButton({ label, icon, variant, className, type, ...rest }: IconButtonProps): import("react").JSX.Element;
14
+ export {};
15
+ //# sourceMappingURL=IconButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconButton.d.ts","sourceRoot":"","sources":["../src/IconButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAG7D;;;;GAIG;AACH,UAAU,eAAgB,SAAQ,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,YAAY,CAAC;IAC3F,0FAA0F;IAC1F,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;CAC/B;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAmB,EAAE,SAAS,EAAE,IAAe,EAAE,GAAG,IAAI,EAAE,EAAE,eAAe,+BAcpH"}
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cx } from "./cx.js";
3
+ export function IconButton({ label, icon, variant = "default", className, type = "button", ...rest }) {
4
+ return (_jsx("button", { type: type, className: cx("gov-icon-button", variant !== "default" && `gov-icon-button--${variant}`, className), "aria-label": label, title: label, ...rest, children: _jsx("span", { className: "gov-icon-button__icon", "aria-hidden": "true", children: icon }) }));
5
+ }
6
+ //# sourceMappingURL=IconButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconButton.js","sourceRoot":"","sources":["../src/IconButton.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAc7B,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,GAAG,SAAS,EAAE,SAAS,EAAE,IAAI,GAAG,QAAQ,EAAE,GAAG,IAAI,EAAmB;IACnH,OAAO,CACL,iBACE,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,EAAE,CAAC,iBAAiB,EAAE,OAAO,KAAK,SAAS,IAAI,oBAAoB,OAAO,EAAE,EAAE,SAAS,CAAC,gBACvF,KAAK,EACjB,KAAK,EAAE,KAAK,KACR,IAAI,YAER,eAAM,SAAS,EAAC,uBAAuB,iBAAa,MAAM,YACvD,IAAI,GACA,GACA,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { type ReactNode } from "react";
2
+ interface ModalProps {
3
+ open: boolean;
4
+ onClose: () => void;
5
+ title: ReactNode;
6
+ children: ReactNode;
7
+ /** The action row (buttons). */
8
+ actions?: ReactNode;
9
+ /** alertdialog for a decision that must be read (ConfirmationDialog sets this). */
10
+ role?: "dialog" | "alertdialog";
11
+ /** A destructive confirmation does not dismiss on scrim click or (optionally) Escape. */
12
+ dismissOnScrim?: boolean;
13
+ dismissOnEscape?: boolean;
14
+ className?: string;
15
+ }
16
+ export declare function Modal({ open, onClose, title, children, actions, role, dismissOnScrim, dismissOnEscape, className, }: ModalProps): import("react").JSX.Element | null;
17
+ export {};
18
+ //# sourceMappingURL=Modal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../src/Modal.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA4B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAiBjE,UAAU,UAAU;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;IACpB,gCAAgC;IAChC,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,mFAAmF;IACnF,IAAI,CAAC,EAAE,QAAQ,GAAG,aAAa,CAAC;IAChC,yFAAyF;IACzF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,KAAK,CAAC,EACpB,IAAI,EACJ,OAAO,EACP,KAAK,EACL,QAAQ,EACR,OAAO,EACP,IAAe,EACf,cAAqB,EACrB,eAAsB,EACtB,SAAS,GACV,EAAE,UAAU,sCAwEZ"}
package/dist/Modal.js ADDED
@@ -0,0 +1,68 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useEffect, useId, useRef } from "react";
4
+ import { cx } from "./cx.js";
5
+ /**
6
+ * Modal (components/modal.md) — focus the user on one short self-contained task without leaving the
7
+ * page. The whole value is the focus contract, which is easy to ship wrong:
8
+ * - on open, focus moves into the dialog;
9
+ * - while open, focus is TRAPPED inside it (Tab cycles within);
10
+ * - on close, focus returns to the element that opened it;
11
+ * - Escape closes a plain modal; the background is inert (aria-hidden handled by the app root).
12
+ *
13
+ * role="dialog" + aria-modal + an accessible name from the title. A destructive confirmation uses
14
+ * ConfirmationDialog, which layers alertdialog semantics on top of this.
15
+ */
16
+ const FOCUSABLE = 'a[href],button:not([disabled]),textarea:not([disabled]),input:not([disabled]),select:not([disabled]),[tabindex]:not([tabindex="-1"])';
17
+ export function Modal({ open, onClose, title, children, actions, role = "dialog", dismissOnScrim = true, dismissOnEscape = true, className, }) {
18
+ const titleId = useId();
19
+ const dialogRef = useRef(null);
20
+ const returnFocusRef = useRef(null);
21
+ useEffect(() => {
22
+ if (!open)
23
+ return;
24
+ // Remember what to return focus to, then move focus into the dialog.
25
+ returnFocusRef.current = document.activeElement ?? null;
26
+ const dialog = dialogRef.current;
27
+ const first = dialog?.querySelector(FOCUSABLE);
28
+ (first ?? dialog)?.focus();
29
+ const onKeyDown = (event) => {
30
+ if (event.key === "Escape" && dismissOnEscape) {
31
+ event.preventDefault();
32
+ onClose();
33
+ return;
34
+ }
35
+ if (event.key !== "Tab" || !dialog)
36
+ return;
37
+ // Trap focus within the dialog.
38
+ const focusable = Array.from(dialog.querySelectorAll(FOCUSABLE)).filter((el) => el.offsetParent !== null || el === document.activeElement);
39
+ if (focusable.length === 0) {
40
+ event.preventDefault();
41
+ return;
42
+ }
43
+ const firstEl = focusable[0];
44
+ const lastEl = focusable[focusable.length - 1];
45
+ if (event.shiftKey && document.activeElement === firstEl) {
46
+ event.preventDefault();
47
+ lastEl.focus();
48
+ }
49
+ else if (!event.shiftKey && document.activeElement === lastEl) {
50
+ event.preventDefault();
51
+ firstEl.focus();
52
+ }
53
+ };
54
+ document.addEventListener("keydown", onKeyDown);
55
+ return () => {
56
+ document.removeEventListener("keydown", onKeyDown);
57
+ // Restore focus to the trigger on close.
58
+ returnFocusRef.current?.focus?.();
59
+ };
60
+ }, [open, onClose, dismissOnEscape]);
61
+ if (!open)
62
+ return null;
63
+ return (_jsx("div", { className: "gov-modal__scrim", onClick: (e) => {
64
+ if (dismissOnScrim && e.target === e.currentTarget)
65
+ onClose();
66
+ }, children: _jsxs("div", { ref: dialogRef, role: role, "aria-modal": "true", "aria-labelledby": titleId, tabIndex: -1, className: cx("gov-modal", className), children: [_jsx("h2", { className: "gov-modal__title", id: titleId, children: title }), _jsx("div", { children: children }), actions && _jsx("div", { className: "gov-modal__actions", children: actions })] }) }));
67
+ }
68
+ //# sourceMappingURL=Modal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Modal.js","sourceRoot":"","sources":["../src/Modal.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ interface PaginationProps {
2
+ page: number;
3
+ totalPages: number;
4
+ /** Build the href for a page; omit for a button-driven handler via onNavigate. */
5
+ hrefFor?: (page: number) => string;
6
+ onNavigate?: (page: number) => void;
7
+ className?: string;
8
+ }
9
+ export declare function Pagination({ page, totalPages, hrefFor, onNavigate, className }: PaginationProps): import("react").JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=Pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pagination.d.ts","sourceRoot":"","sources":["../src/Pagination.tsx"],"names":[],"mappings":"AAcA,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,eAAe,+BAsC/F"}
@@ -0,0 +1,26 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { cx } from "./cx.js";
4
+ import { useTheme } from "./ThemeProvider.js";
5
+ /**
6
+ * Pagination (components/pagination.md) — move through a long list one page at a time, with the
7
+ * position visible ("Page X of Y"). nav[aria-label=Pagination]; the current page is aria-current;
8
+ * Previous/Next are disabled at the ends. Numerals follow the active language (§3.1).
9
+ */
10
+ const NE_DIGITS = ["०", "१", "२", "३", "४", "५", "६", "७", "८", "९"];
11
+ const toNe = (n) => String(n).split("").map((d) => NE_DIGITS[Number(d)] ?? d).join("");
12
+ export function Pagination({ page, totalPages, hrefFor, onNavigate, className }) {
13
+ const { language } = useTheme();
14
+ const num = (n) => (language === "ne" ? toNe(n) : String(n));
15
+ const prevLabel = language === "ne" ? "अघिल्लो" : "Previous";
16
+ const nextLabel = language === "ne" ? "अर्को" : "Next";
17
+ const position = language === "ne" ? `पृष्ठ ${num(page)} / ${num(totalPages)}` : `Page ${num(page)} of ${num(totalPages)}`;
18
+ const control = (target, label, disabled) => {
19
+ if (disabled) {
20
+ return (_jsx("span", { className: "gov-pagination__link", "aria-disabled": "true", children: label }));
21
+ }
22
+ return hrefFor ? (_jsx("a", { className: "gov-pagination__link", href: hrefFor(target), "aria-label": label, children: label })) : (_jsx("button", { type: "button", className: "gov-pagination__link", onClick: () => onNavigate?.(target), "aria-label": label, children: label }));
23
+ };
24
+ return (_jsx("nav", { "aria-label": "Pagination", className: className, children: _jsxs("ul", { className: "gov-pagination", children: [_jsx("li", { children: control(page - 1, prevLabel, page <= 1) }), _jsx("li", { "aria-current": "page", style: { padding: "0 var(--gov-space-3)" }, children: position }), _jsx("li", { children: control(page + 1, nextLabel, page >= totalPages) })] }) }));
25
+ }
26
+ //# sourceMappingURL=Pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pagination.js","sourceRoot":"","sources":["../src/Pagination.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C;;;;GAIG;AACH,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACrE,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAW/F,MAAM,UAAU,UAAU,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAmB;IAC9F,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAC;IAChC,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;IAC7D,MAAM,SAAS,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IACvD,MAAM,QAAQ,GACZ,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;IAE5G,MAAM,OAAO,GAAG,CAAC,MAAc,EAAE,KAAa,EAAE,QAAiB,EAAa,EAAE;QAC9E,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CACL,eAAM,SAAS,EAAC,sBAAsB,mBAAe,MAAM,YACxD,KAAK,GACD,CACR,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CAAC,CAAC,CAAC,CACf,YAAG,SAAS,EAAC,sBAAsB,EAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,gBAAc,KAAK,YACzE,KAAK,GACJ,CACL,CAAC,CAAC,CAAC,CACF,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,sBAAsB,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,gBAAc,KAAK,YAC1G,KAAK,GACC,CACV,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,CACL,4BAAgB,YAAY,EAAC,SAAS,EAAE,SAAS,YAC/C,cAAI,SAAS,EAAC,gBAAgB,aAC5B,uBAAK,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,GAAM,EAClD,6BAAiB,MAAM,EAAC,KAAK,EAAE,EAAE,OAAO,EAAE,sBAAsB,EAAE,YAC/D,QAAQ,GACN,EACL,uBAAK,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,UAAU,CAAC,GAAM,IACxD,GACD,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { ReactNode } from "react";
2
+ export declare function SkipLink({ targetId, children }: {
3
+ targetId?: string;
4
+ children?: ReactNode;
5
+ }): import("react").JSX.Element;
6
+ //# sourceMappingURL=SkipLink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkipLink.d.ts","sourceRoot":"","sources":["../src/SkipLink.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAWvC,wBAAgB,QAAQ,CAAC,EAAE,QAAiB,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,+BAOpG"}
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useTheme } from "./ThemeProvider.js";
3
+ /**
4
+ * Skip link (components/skip-link.md) — the first focusable element on the page, jumping keyboard
5
+ * users past the header to the main content. Visually hidden until focused (never display:none,
6
+ * which would drop it from the tab order). The Header renders one automatically; this standalone
7
+ * export is for pages that compose their own chrome.
8
+ */
9
+ const LABEL = { ne: "मुख्य सामग्रीमा जानुहोस्", en: "Skip to main content" };
10
+ export function SkipLink({ targetId = "main", children }) {
11
+ const { language } = useTheme();
12
+ return (_jsx("a", { className: "gov-skip-link", href: `#${targetId}`, children: children ?? LABEL[language] }));
13
+ }
14
+ //# sourceMappingURL=SkipLink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkipLink.js","sourceRoot":"","sources":["../src/SkipLink.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C;;;;;GAKG;AACH,MAAM,KAAK,GAAG,EAAE,EAAE,EAAE,0BAA0B,EAAE,EAAE,EAAE,sBAAsB,EAAW,CAAC;AAEtF,MAAM,UAAU,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,EAAE,QAAQ,EAA+C;IACnG,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAC;IAChC,OAAO,CACL,YAAG,SAAS,EAAC,eAAe,EAAC,IAAI,EAAE,IAAI,QAAQ,EAAE,YAC9C,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,GAC1B,CACL,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { ReactNode } from "react";
2
+ /**
3
+ * Summary list (components/summary-list.md) — the "check your answers" rows before submit: each the
4
+ * question, the citizen's answer, and a "Change" link back to the step that set it (§7.4). Rendered
5
+ * as a description list so the question/answer relationship is announced; each change link names
6
+ * what it changes, never a bare repeated "Change".
7
+ */
8
+ export interface SummaryRow {
9
+ key: ReactNode;
10
+ value: ReactNode;
11
+ /** The change link. Its accessible name should include what it changes. */
12
+ action?: ReactNode;
13
+ }
14
+ export declare function SummaryList({ rows, className }: {
15
+ rows: SummaryRow[];
16
+ className?: string;
17
+ }): import("react").JSX.Element;
18
+ //# sourceMappingURL=SummaryList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SummaryList.d.ts","sourceRoot":"","sources":["../src/SummaryList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;IACjB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;IAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAY1F"}
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cx } from "./cx.js";
3
+ export function SummaryList({ rows, className }) {
4
+ return (_jsx("dl", { className: cx("gov-summary-list", className), children: rows.map((row, i) => (_jsxs("div", { className: "gov-summary-list__row", children: [_jsx("dt", { className: "gov-summary-list__key", children: row.key }), _jsx("dd", { className: "gov-summary-list__value", children: row.value }), row.action && _jsx("dd", { className: "gov-summary-list__action", children: row.action })] }, i))) }));
5
+ }
6
+ //# sourceMappingURL=SummaryList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SummaryList.js","sourceRoot":"","sources":["../src/SummaryList.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAe7B,MAAM,UAAU,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,EAA8C;IACzF,OAAO,CACL,aAAI,SAAS,EAAE,EAAE,CAAC,kBAAkB,EAAE,SAAS,CAAC,YAC7C,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CACpB,eAAK,SAAS,EAAC,uBAAuB,aACpC,aAAI,SAAS,EAAC,uBAAuB,YAAE,GAAG,CAAC,GAAG,GAAM,EACpD,aAAI,SAAS,EAAC,yBAAyB,YAAE,GAAG,CAAC,KAAK,GAAM,EACvD,GAAG,CAAC,MAAM,IAAI,aAAI,SAAS,EAAC,0BAA0B,YAAE,GAAG,CAAC,MAAM,GAAM,KAH/B,CAAC,CAIvC,CACP,CAAC,GACC,CACN,CAAC;AACJ,CAAC"}
package/dist/Tabs.d.ts ADDED
@@ -0,0 +1,20 @@
1
+ import { type ReactNode } from "react";
2
+ /**
3
+ * Tabs (components/tabs.md) — switch between parallel views of one subject. Implements the WAI-ARIA
4
+ * tabs pattern: role tablist/tab/tabpanel, aria-selected, and a roving tabindex where the arrow
5
+ * keys move between tabs (Home/End to the ends) while Tab moves into the panel. The selected tab is
6
+ * marked by weight + an underline indicator, never colour alone (§4.1).
7
+ *
8
+ * Not for ordered steps (that is the Stepper) or page navigation (that is links).
9
+ */
10
+ export interface TabItem {
11
+ id: string;
12
+ label: ReactNode;
13
+ content: ReactNode;
14
+ }
15
+ export declare function Tabs({ tabs, defaultTab, className }: {
16
+ tabs: TabItem[];
17
+ defaultTab?: string;
18
+ className?: string;
19
+ }): import("react").JSX.Element;
20
+ //# sourceMappingURL=Tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../src/Tabs.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA+C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGpF;;;;;;;GAOG;AACH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,wBAAgB,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE;IAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAiEjH"}
package/dist/Tabs.js ADDED
@@ -0,0 +1,38 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useId, useRef, useState } from "react";
4
+ import { cx } from "./cx.js";
5
+ export function Tabs({ tabs, defaultTab, className }) {
6
+ const baseId = useId();
7
+ const [active, setActive] = useState(defaultTab ?? tabs[0]?.id);
8
+ const tabRefs = useRef({});
9
+ const focusTab = (id) => {
10
+ setActive(id);
11
+ tabRefs.current[id]?.focus();
12
+ };
13
+ const onKeyDown = (event, index) => {
14
+ const last = tabs.length - 1;
15
+ let next = null;
16
+ if (event.key === "ArrowRight")
17
+ next = index === last ? 0 : index + 1;
18
+ else if (event.key === "ArrowLeft")
19
+ next = index === 0 ? last : index - 1;
20
+ else if (event.key === "Home")
21
+ next = 0;
22
+ else if (event.key === "End")
23
+ next = last;
24
+ if (next !== null) {
25
+ event.preventDefault();
26
+ focusTab(tabs[next].id);
27
+ }
28
+ };
29
+ return (_jsxs("div", { className: cx("gov-tabs", className), children: [_jsx("div", { className: "gov-tabs__list", role: "tablist", children: tabs.map((tab, i) => {
30
+ const selected = tab.id === active;
31
+ return (_jsx("button", { ref: (el) => {
32
+ tabRefs.current[tab.id] = el;
33
+ }, role: "tab", id: `${baseId}-tab-${tab.id}`, "aria-selected": selected, "aria-controls": `${baseId}-panel-${tab.id}`,
34
+ // Roving tabindex: only the active tab is in the tab order; arrows move within.
35
+ tabIndex: selected ? 0 : -1, className: "gov-tabs__tab", type: "button", onClick: () => setActive(tab.id), onKeyDown: (e) => onKeyDown(e, i), children: tab.label }, tab.id));
36
+ }) }), tabs.map((tab) => (_jsx("div", { role: "tabpanel", id: `${baseId}-panel-${tab.id}`, "aria-labelledby": `${baseId}-tab-${tab.id}`, hidden: tab.id !== active, tabIndex: 0, className: "gov-tabs__panel", children: tab.content }, tab.id)))] }));
37
+ }
38
+ //# sourceMappingURL=Tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tabs.js","sourceRoot":"","sources":["../src/Tabs.tsx"],"names":[],"mappings":"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"}
package/dist/Tag.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ import type { ReactNode } from "react";
2
+ /**
3
+ * Tag (components/tag.md) — a neutral, non-status categorical label. It deliberately never uses a
4
+ * status colour (that is the Badge's job, drawn from the status taxonomy) so the two are never
5
+ * confused. Not interactive.
6
+ */
7
+ export declare function Tag({ children, className }: {
8
+ children: ReactNode;
9
+ className?: string;
10
+ }): import("react").JSX.Element;
11
+ //# sourceMappingURL=Tag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tag.d.ts","sourceRoot":"","sources":["../src/Tag.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC;;;;GAIG;AACH,wBAAgB,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAEvF"}
package/dist/Tag.js ADDED
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cx } from "./cx.js";
3
+ /**
4
+ * Tag (components/tag.md) — a neutral, non-status categorical label. It deliberately never uses a
5
+ * status colour (that is the Badge's job, drawn from the status taxonomy) so the two are never
6
+ * confused. Not interactive.
7
+ */
8
+ export function Tag({ children, className }) {
9
+ return _jsx("span", { className: cx("gov-tag", className), children: children });
10
+ }
11
+ //# sourceMappingURL=Tag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tag.js","sourceRoot":"","sources":["../src/Tag.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAE7B;;;;GAIG;AACH,MAAM,UAAU,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,EAA+C;IACtF,OAAO,eAAM,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,YAAG,QAAQ,GAAQ,CAAC;AACtE,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { type TextareaHTMLAttributes, type ReactNode } from "react";
2
+ /**
3
+ * Textarea (components/textarea.md) — multi-line free text. Same accessibility contract as
4
+ * TextInput: bound label, aria-describedby joining hint then error, aria-invalid on error, a stable
5
+ * id, and the value NEVER cleared on error (§7.1). Devanagari input is never blocked (§5.3).
6
+ */
7
+ interface TextareaProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, "id"> {
8
+ label: ReactNode;
9
+ id?: string;
10
+ hint?: ReactNode;
11
+ error?: ReactNode;
12
+ }
13
+ export declare function Textarea({ label, id, hint, error, className, ...rest }: TextareaProps): import("react").JSX.Element;
14
+ export {};
15
+ //# sourceMappingURL=Textarea.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Textarea.d.ts","sourceRoot":"","sources":["../src/Textarea.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAS,KAAK,sBAAsB,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG3E;;;;GAIG;AACH,UAAU,aAAc,SAAQ,IAAI,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,EAAE,IAAI,CAAC;IACrF,KAAK,EAAE,SAAS,CAAC;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,aAAa,+BAkCrF"}
@@ -0,0 +1,13 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useId } from "react";
4
+ import { cx } from "./cx.js";
5
+ export function Textarea({ label, id, hint, error, className, ...rest }) {
6
+ const generatedId = useId();
7
+ const fieldId = id ?? generatedId;
8
+ const hintId = hint ? `${fieldId}-hint` : undefined;
9
+ const errorId = error ? `${fieldId}-error` : undefined;
10
+ const describedBy = [hintId, errorId].filter(Boolean).join(" ") || undefined;
11
+ return (_jsxs("div", { className: cx("gov-field", error ? "gov-field--error" : undefined), children: [_jsx("label", { className: "gov-field__label", htmlFor: fieldId, children: label }), hint && (_jsx("span", { className: "gov-field__hint", id: hintId, children: hint })), _jsx("textarea", { id: fieldId, className: cx("gov-textarea", className), "aria-describedby": describedBy, "aria-invalid": error ? true : undefined, ...rest }), error && (_jsxs("span", { className: "gov-field__error", id: errorId, children: [_jsx("svg", { className: "gov-field__error-icon", viewBox: "0 0 24 24", "aria-hidden": "true", fill: "currentColor", children: _jsx("path", { d: "M12 2a10 10 0 100 20 10 10 0 000-20zm-1 5h2v6h-2V7zm0 8h2v2h-2v-2z" }) }), error] }))] }));
12
+ }
13
+ //# sourceMappingURL=Textarea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Textarea.js","sourceRoot":"","sources":["../src/Textarea.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,KAAK,EAA+C,MAAM,OAAO,CAAC;AAC3E,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAc7B,MAAM,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,EAAiB;IACpF,MAAM,WAAW,GAAG,KAAK,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,EAAE,IAAI,WAAW,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACpD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IACvD,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC;IAE7E,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,aACrE,gBAAO,SAAS,EAAC,kBAAkB,EAAC,OAAO,EAAE,OAAO,YACjD,KAAK,GACA,EACP,IAAI,IAAI,CACP,eAAM,SAAS,EAAC,iBAAiB,EAAC,EAAE,EAAE,MAAM,YACzC,IAAI,GACA,CACR,EACD,mBACE,EAAE,EAAE,OAAO,EACX,SAAS,EAAE,EAAE,CAAC,cAAc,EAAE,SAAS,CAAC,sBACtB,WAAW,kBACf,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,KAClC,IAAI,GACR,EACD,KAAK,IAAI,CACR,gBAAM,SAAS,EAAC,kBAAkB,EAAC,EAAE,EAAE,OAAO,aAC5C,cAAK,SAAS,EAAC,uBAAuB,EAAC,OAAO,EAAC,WAAW,iBAAa,MAAM,EAAC,IAAI,EAAC,cAAc,YAC/F,eAAM,CAAC,EAAC,oEAAoE,GAAG,GAC3E,EACL,KAAK,IACD,CACR,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { type ReactNode } from "react";
2
+ interface ToastContextValue {
3
+ /** Raise a transient confirmation. Never pass anything the user must keep. */
4
+ toast: (message: ReactNode, variant?: "success" | "info") => void;
5
+ }
6
+ export declare function ToastProvider({ children }: {
7
+ children: ReactNode;
8
+ }): import("react").JSX.Element;
9
+ export declare function useToast(): ToastContextValue;
10
+ export {};
11
+ //# sourceMappingURL=Toast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toast.d.ts","sourceRoot":"","sources":["../src/Toast.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA+D,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAepG,UAAU,iBAAiB;IACzB,8EAA8E;IAC9E,KAAK,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,SAAS,GAAG,MAAM,KAAK,IAAI,CAAC;CACnE;AAKD,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAyBlE;AAgBD,wBAAgB,QAAQ,IAAI,iBAAiB,CAI5C"}
package/dist/Toast.js ADDED
@@ -0,0 +1,31 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { createContext, useCallback, useContext, useEffect, useState } from "react";
4
+ const ToastContext = createContext(null);
5
+ const DISMISS_MS = 4000;
6
+ export function ToastProvider({ children }) {
7
+ const [toasts, setToasts] = useState([]);
8
+ // A monotonic counter would use Date.now(); keep a simple incrementing id in state instead.
9
+ const [nextId, setNextId] = useState(1);
10
+ const toast = useCallback((message, variant = "success") => {
11
+ setNextId((id) => {
12
+ setToasts((current) => [...current, { id, variant, message }]);
13
+ return id + 1;
14
+ });
15
+ }, []);
16
+ return (_jsxs(ToastContext.Provider, { value: { toast }, children: [children, _jsx("div", { className: "gov-toast-region", role: "status", "aria-live": "polite", children: toasts.map((t) => (_jsx(ToastItem, { toast: t, onDone: () => setToasts((c) => c.filter((x) => x.id !== t.id)) }, t.id))) })] }));
17
+ }
18
+ function ToastItem({ toast, onDone }) {
19
+ useEffect(() => {
20
+ const timer = setTimeout(onDone, DISMISS_MS);
21
+ return () => clearTimeout(timer);
22
+ }, [onDone]);
23
+ return (_jsxs("div", { className: `gov-toast gov-toast--${toast.variant}`, children: [_jsx("span", { "aria-hidden": "true", children: toast.variant === "success" ? "✓" : "ℹ" }), toast.message] }));
24
+ }
25
+ export function useToast() {
26
+ const value = useContext(ToastContext);
27
+ if (!value)
28
+ throw new Error("useToast must be used within a <ToastProvider>.");
29
+ return value;
30
+ }
31
+ //# sourceMappingURL=Toast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toast.js","sourceRoot":"","sources":["../src/Toast.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAoBpG,MAAM,YAAY,GAAG,aAAa,CAA2B,IAAI,CAAC,CAAC;AACnE,MAAM,UAAU,GAAG,IAAI,CAAC;AAExB,MAAM,UAAU,aAAa,CAAC,EAAE,QAAQ,EAA2B;IACjE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAiB,EAAE,CAAC,CAAC;IACzD,4FAA4F;IAC5F,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAExC,MAAM,KAAK,GAAG,WAAW,CACvB,CAAC,OAAkB,EAAE,UAA8B,SAAS,EAAE,EAAE;QAC9D,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE;YACf,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;YAC/D,OAAO,EAAE,GAAG,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,EACD,EAAE,CACH,CAAC;IAEF,OAAO,CACL,MAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,KAAK,EAAE,aACpC,QAAQ,EACT,cAAK,SAAS,EAAC,kBAAkB,EAAC,IAAI,EAAC,QAAQ,eAAW,QAAQ,YAC/D,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACjB,KAAC,SAAS,IAAY,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAA9E,CAAC,CAAC,EAAE,CAA8E,CACnG,CAAC,GACE,IACgB,CACzB,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAA+C;IAC/E,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC7C,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,OAAO,CACL,eAAK,SAAS,EAAE,wBAAwB,KAAK,CAAC,OAAO,EAAE,aACrD,8BAAkB,MAAM,YAAE,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAQ,EACxE,KAAK,CAAC,OAAO,IACV,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,MAAM,KAAK,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAC/E,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { type ReactNode } from "react";
2
+ /**
3
+ * Toggle switch (components/toggle.md) — a single on/off setting with IMMEDIATE effect (no separate
4
+ * save). A declaration or a form-submitted choice is a Checkbox, never a toggle (§7.1). The state is
5
+ * conveyed by more than colour — position plus an on/off word — never colour alone (§4.1). Renders
6
+ * role="switch" with aria-checked so the state is announced.
7
+ */
8
+ interface ToggleProps {
9
+ label: ReactNode;
10
+ checked: boolean;
11
+ onChange: (checked: boolean) => void;
12
+ /** On/off words shown beside the switch so state isn't carried by colour/position alone. */
13
+ stateLabels?: {
14
+ on: string;
15
+ off: string;
16
+ };
17
+ disabled?: boolean;
18
+ className?: string;
19
+ }
20
+ export declare function Toggle({ label, checked, onChange, stateLabels, disabled, className }: ToggleProps): import("react").JSX.Element;
21
+ export {};
22
+ //# sourceMappingURL=Toggle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toggle.d.ts","sourceRoot":"","sources":["../src/Toggle.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG9C;;;;;GAKG;AACH,UAAU,WAAW;IACnB,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,4FAA4F;IAC5F,WAAW,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,WAAW,+BAyBjG"}
package/dist/Toggle.js ADDED
@@ -0,0 +1,9 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useId } from "react";
4
+ import { cx } from "./cx.js";
5
+ export function Toggle({ label, checked, onChange, stateLabels, disabled, className }) {
6
+ const labelId = useId();
7
+ return (_jsxs("span", { className: cx("gov-toggle-field", className), style: { display: "inline-flex", alignItems: "center", gap: "var(--gov-space-3)" }, children: [_jsx("button", { type: "button", role: "switch", "aria-checked": checked, "aria-labelledby": labelId, disabled: disabled, className: "gov-toggle", onClick: () => onChange(!checked), children: _jsx("span", { className: "gov-toggle__track", "aria-hidden": "true", children: _jsx("span", { className: "gov-toggle__handle" }) }) }), _jsxs("span", { id: labelId, children: [label, stateLabels && (_jsxs("span", { className: "gov-text-secondary gov-text-small", children: [" \u2014 ", checked ? stateLabels.on : stateLabels.off] }))] })] }));
8
+ }
9
+ //# sourceMappingURL=Toggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toggle.js","sourceRoot":"","sources":["../src/Toggle.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,KAAK,EAAkB,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAkB7B,MAAM,UAAU,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAe;IAChG,MAAM,OAAO,GAAG,KAAK,EAAE,CAAC;IACxB,OAAO,CACL,gBAAM,SAAS,EAAE,EAAE,CAAC,kBAAkB,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,oBAAoB,EAAE,aACpI,iBACE,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,QAAQ,kBACC,OAAO,qBACJ,OAAO,EACxB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAC,YAAY,EACtB,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,YAEjC,eAAM,SAAS,EAAC,mBAAmB,iBAAa,MAAM,YACpD,eAAM,SAAS,EAAC,oBAAoB,GAAG,GAClC,GACA,EACT,gBAAM,EAAE,EAAE,OAAO,aACd,KAAK,EACL,WAAW,IAAI,CACd,gBAAM,SAAS,EAAC,mCAAmC,yBAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,IAAQ,CAC3G,IACI,IACF,CACR,CAAC;AACJ,CAAC"}
@@ -1,4 +1,4 @@
1
- // GENERATED from design-guidelines 0.2.0-dev (816565b5) — do not edit.
1
+ // GENERATED from design-guidelines 0.2.0-dev (417ba0b6) — do not edit.
2
2
  // Source: data/status-taxonomy.yaml (§7.3.2). Regenerate with build/generate.mjs.
3
3
  export const STATUS_TAXONOMY = {
4
4
  "draft": { label: "Draft", label_ne: "मस्यौदा", badge: "neutral", requiresAction: false },
package/dist/index.d.ts CHANGED
@@ -27,5 +27,21 @@ export { Stepper, type Step } from "./Stepper.js";
27
27
  export { LanguageSwitcher } from "./LanguageSwitcher.js";
28
28
  export { Emblem, Flag } from "./Emblem.js";
29
29
  export { Header } from "./Header.js";
30
+ export { SkipLink } from "./SkipLink.js";
31
+ export { BackLink } from "./BackLink.js";
32
+ export { Breadcrumb, type Crumb } from "./Breadcrumb.js";
33
+ export { Pagination } from "./Pagination.js";
34
+ export { Tabs, type TabItem } from "./Tabs.js";
35
+ export { Footer } from "./Footer.js";
36
+ export { Card } from "./Card.js";
37
+ export { IconButton } from "./IconButton.js";
38
+ export { Modal } from "./Modal.js";
39
+ export { ConfirmationDialog } from "./ConfirmationDialog.js";
40
+ export { ToastProvider, useToast } from "./Toast.js";
41
+ export { Toggle } from "./Toggle.js";
42
+ export { Textarea } from "./Textarea.js";
43
+ export { CharacterCount } from "./CharacterCount.js";
44
+ export { SummaryList, type SummaryRow } from "./SummaryList.js";
45
+ export { Tag } from "./Tag.js";
30
46
  export { STATUS_TAXONOMY, type StatusId, type StatusEntry, type BadgeVariant } from "./generated/statusTaxonomy.js";
31
47
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC7D,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC7D,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEhF,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,eAAe,EAAE,KAAK,QAAQ,EAAE,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC7D,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC7D,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEhF,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,KAAK,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGrD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,OAAO,EAAE,eAAe,EAAE,KAAK,QAAQ,EAAE,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,+BAA+B,CAAC"}
package/dist/index.js CHANGED
@@ -28,5 +28,24 @@ export { Stepper } from "./Stepper.js";
28
28
  export { LanguageSwitcher } from "./LanguageSwitcher.js";
29
29
  export { Emblem, Flag } from "./Emblem.js";
30
30
  export { Header } from "./Header.js";
31
+ // Navigation
32
+ export { SkipLink } from "./SkipLink.js";
33
+ export { BackLink } from "./BackLink.js";
34
+ export { Breadcrumb } from "./Breadcrumb.js";
35
+ export { Pagination } from "./Pagination.js";
36
+ export { Tabs } from "./Tabs.js";
37
+ export { Footer } from "./Footer.js";
38
+ // Core / overlays
39
+ export { Card } from "./Card.js";
40
+ export { IconButton } from "./IconButton.js";
41
+ export { Modal } from "./Modal.js";
42
+ export { ConfirmationDialog } from "./ConfirmationDialog.js";
43
+ export { ToastProvider, useToast } from "./Toast.js";
44
+ // Forms / data
45
+ export { Toggle } from "./Toggle.js";
46
+ export { Textarea } from "./Textarea.js";
47
+ export { CharacterCount } from "./CharacterCount.js";
48
+ export { SummaryList } from "./SummaryList.js";
49
+ export { Tag } from "./Tag.js";
31
50
  export { STATUS_TAXONOMY } from "./generated/statusTaxonomy.js";
32
51
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,gGAAgG;AAChG,kGAAkG;AAClG,0FAA0F;AAC1F,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG7D,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAoB,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAqB,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,YAAY,EAAmB,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAa,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,eAAe,EAAsD,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,gGAAgG;AAChG,kGAAkG;AAClG,0FAA0F;AAC1F,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG7D,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAoB,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAqB,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,YAAY,EAAmB,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAa,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,aAAa;AACb,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAc,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAgB,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,kBAAkB;AAClB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAErD,eAAe;AACf,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAmB,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,OAAO,EAAE,eAAe,EAAsD,MAAM,+BAA+B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"themeCore.d.ts","sourceRoot":"","sources":["../src/themeCore.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,iGAAiG;AACjG,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,eAAe,GAAG,kBAAkB,CAAC;AAChF,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC;AACnC,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC;AACnC,2CAA2C;AAC3C,MAAM,MAAM,OAAO,GAAG,iBAAiB,GAAG,oBAAoB,GAAG,qBAAqB,GAAG,eAAe,CAAC;AAEzG,MAAM,WAAW,UAAU;IACzB,+FAA+F;IAC/F,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,iBAAiB,cAAc,CAAC;AAE7C,eAAO,MAAM,cAAc,EAAE,UAO5B,CAAC;AAEF,qGAAqG;AACrG,wBAAgB,kBAAkB,IAAI,OAAO,CAAC,UAAU,CAAC,CAQxD;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAUrE;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,QAE8S,CAAC"}
1
+ {"version":3,"file":"themeCore.d.ts","sourceRoot":"","sources":["../src/themeCore.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,iGAAiG;AACjG,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,eAAe,GAAG,kBAAkB,CAAC;AAChF,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC;AACnC,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC;AACnC,2CAA2C;AAC3C,MAAM,MAAM,OAAO,GAAG,iBAAiB,GAAG,oBAAoB,GAAG,qBAAqB,GAAG,eAAe,CAAC;AAEzG,MAAM,WAAW,UAAU;IACzB,+FAA+F;IAC/F,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,iBAAiB,cAAc,CAAC;AAE7C,eAAO,MAAM,cAAc,EAAE,UAO5B,CAAC;AAEF,qGAAqG;AACrG,wBAAgB,kBAAkB,IAAI,OAAO,CAAC,UAAU,CAAC,CAQxD;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAcrE;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,QAEkT,CAAC"}
package/dist/themeCore.js CHANGED
@@ -38,7 +38,13 @@ export function applyTheme(root, state) {
38
38
  root.setAttribute("data-mode", state.colorMode);
39
39
  else
40
40
  root.removeAttribute("data-mode");
41
- root.toggleAttribute("data-large-text", state.largeText);
41
+ // These are set to the literal "true" to match the generated CSS selectors
42
+ // ([data-large-text="true"], [data-reduced-motion="true"]) — an empty attribute value would not
43
+ // match, which is why large-text silently did nothing before.
44
+ if (state.largeText)
45
+ root.setAttribute("data-large-text", "true");
46
+ else
47
+ root.removeAttribute("data-large-text");
42
48
  if (state.reducedMotion)
43
49
  root.setAttribute("data-reduced-motion", "true");
44
50
  else
@@ -51,5 +57,5 @@ export function applyTheme(root, state) {
51
57
  * any content renders — no flash of the wrong theme. A server layout renders this as a raw string;
52
58
  * it deliberately duplicates a little of applyTheme() because it must run without React.
53
59
  */
54
- export const themeInitScript = `(function(){try{var s=JSON.parse(localStorage.getItem(${JSON.stringify(THEME_STORAGE_KEY)})||"{}");var r=document.documentElement;if(s.colorMode)r.setAttribute("data-mode",s.colorMode);if(s.largeText)r.setAttribute("data-large-text","");if(s.reducedMotion)r.setAttribute("data-reduced-motion","true");r.setAttribute("data-density",s.density||"citizen-website");r.setAttribute("lang",s.language||"ne");}catch(e){}})();`;
60
+ export const themeInitScript = `(function(){try{var s=JSON.parse(localStorage.getItem(${JSON.stringify(THEME_STORAGE_KEY)})||"{}");var r=document.documentElement;if(s.colorMode)r.setAttribute("data-mode",s.colorMode);if(s.largeText)r.setAttribute("data-large-text","true");if(s.reducedMotion)r.setAttribute("data-reduced-motion","true");r.setAttribute("data-density",s.density||"citizen-website");r.setAttribute("lang",s.language||"ne");}catch(e){}})();`;
55
61
  //# sourceMappingURL=themeCore.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"themeCore.js","sourceRoot":"","sources":["../src/themeCore.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAmBH,MAAM,CAAC,MAAM,iBAAiB,GAAG,WAAW,CAAC;AAE7C,MAAM,CAAC,MAAM,cAAc,GAAe;IACxC,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,KAAK;IAChB,aAAa,EAAE,KAAK;IACpB,QAAQ,EAAE,IAAI,EAAE,wEAAwE;IACxF,QAAQ,EAAE,IAAI,EAAE,iEAAiE;IACjF,OAAO,EAAE,iBAAiB;CAC3B,CAAC;AAEF,qGAAqG;AACrG,MAAM,UAAU,kBAAkB;IAChC,IAAI,OAAO,YAAY,KAAK,WAAW;QAAE,OAAO,EAAE,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACpD,OAAO,GAAG,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAyB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,IAAiB,EAAE,KAAiB;IAC7D,IAAI,KAAK,CAAC,SAAS;QAAE,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;;QAChE,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IAEvC,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACzD,IAAI,KAAK,CAAC,aAAa;QAAE,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;;QACrE,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC;IAEjD,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,yDAAyD,IAAI,CAAC,SAAS,CACpG,iBAAiB,CAClB,yUAAyU,CAAC"}
1
+ {"version":3,"file":"themeCore.js","sourceRoot":"","sources":["../src/themeCore.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAmBH,MAAM,CAAC,MAAM,iBAAiB,GAAG,WAAW,CAAC;AAE7C,MAAM,CAAC,MAAM,cAAc,GAAe;IACxC,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,KAAK;IAChB,aAAa,EAAE,KAAK;IACpB,QAAQ,EAAE,IAAI,EAAE,wEAAwE;IACxF,QAAQ,EAAE,IAAI,EAAE,iEAAiE;IACjF,OAAO,EAAE,iBAAiB;CAC3B,CAAC;AAEF,qGAAqG;AACrG,MAAM,UAAU,kBAAkB;IAChC,IAAI,OAAO,YAAY,KAAK,WAAW;QAAE,OAAO,EAAE,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACpD,OAAO,GAAG,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAyB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,IAAiB,EAAE,KAAiB;IAC7D,IAAI,KAAK,CAAC,SAAS;QAAE,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;;QAChE,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IAEvC,2EAA2E;IAC3E,gGAAgG;IAChG,8DAA8D;IAC9D,IAAI,KAAK,CAAC,SAAS;QAAE,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;;QAC7D,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;IAC7C,IAAI,KAAK,CAAC,aAAa;QAAE,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;;QACrE,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC;IAEjD,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,yDAAyD,IAAI,CAAC,SAAS,CACpG,iBAAiB,CAClB,6UAA6U,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@govnepal/ui",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Civic Calm React components — the behavior layer (ARIA, keyboard, focus) over @govnepal/css.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -37,7 +37,7 @@
37
37
  "react-dom": ">=18"
38
38
  },
39
39
  "dependencies": {
40
- "@govnepal/css": "^0.2.0",
40
+ "@govnepal/css": "^0.3.0",
41
41
  "@govnepal/tokens": "^0.2.0"
42
42
  },
43
43
  "devDependencies": {