@lssm/lib.design-system 0.0.0-canary-20251219202229 → 0.0.0-canary-20251220002821

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 (58) hide show
  1. package/README.md +1 -0
  2. package/dist/components/agent/ApprovalQueue.js.map +1 -1
  3. package/dist/components/atoms/ActionButtons.d.ts +2 -2
  4. package/dist/components/atoms/ActionButtons.d.ts.map +1 -1
  5. package/dist/components/atoms/ActionButtons.js.map +1 -1
  6. package/dist/components/atoms/Button.d.ts.map +1 -1
  7. package/dist/components/atoms/Button.js.map +1 -1
  8. package/dist/components/atoms/Cta.d.ts.map +1 -1
  9. package/dist/components/atoms/Cta.js +1 -1
  10. package/dist/components/atoms/Cta.js.map +1 -1
  11. package/dist/components/atoms/Link.web.d.ts +3 -2
  12. package/dist/components/atoms/Link.web.d.ts.map +1 -1
  13. package/dist/components/atoms/Link.web.js +1 -1
  14. package/dist/components/atoms/Link.web.js.map +1 -1
  15. package/dist/components/atoms/Textarea.js.map +1 -1
  16. package/dist/components/data-view/DataViewRenderer.d.ts +2 -2
  17. package/dist/components/data-view/DataViewRenderer.d.ts.map +1 -1
  18. package/dist/components/data-view/DataViewRenderer.js +4 -3
  19. package/dist/components/data-view/DataViewRenderer.js.map +1 -1
  20. package/dist/components/forms/ZodForm.d.ts +2 -2
  21. package/dist/components/forms/ZodForm.d.ts.map +1 -1
  22. package/dist/components/forms/ZodForm.js.map +1 -1
  23. package/dist/components/legal/atoms/LegalHeading.js.map +1 -1
  24. package/dist/components/legal/atoms/LegalList.js.map +1 -1
  25. package/dist/components/legal/atoms/LegalText.js.map +1 -1
  26. package/dist/components/legal/molecules/Consent.js.map +1 -1
  27. package/dist/components/legal/molecules/LegalTOC.js +1 -1
  28. package/dist/components/legal/molecules/LegalTOC.js.map +1 -1
  29. package/dist/components/molecules/AiLinkButton.js +3 -3
  30. package/dist/components/molecules/AiLinkButton.js.map +1 -1
  31. package/dist/components/molecules/CommandPalette.js +1 -1
  32. package/dist/components/molecules/CommandPalette.js.map +1 -1
  33. package/dist/components/molecules/EntityCard.js.map +1 -1
  34. package/dist/components/molecules/NavItemCard.js.map +1 -1
  35. package/dist/components/molecules/StatusChip.js.map +1 -1
  36. package/dist/components/organisms/FAQSection.js +1 -1
  37. package/dist/components/organisms/FAQSection.js.map +1 -1
  38. package/dist/components/organisms/Footer.js.map +1 -1
  39. package/dist/components/organisms/HeroSection.js.map +1 -1
  40. package/dist/components/organisms/ListGridPage.js +0 -1
  41. package/dist/components/organisms/ListGridPage.js.map +1 -1
  42. package/dist/components/organisms/MarketingHeaderMobile.js.map +1 -1
  43. package/dist/components/organisms/PageHeaderResponsive.d.ts +1 -1
  44. package/dist/components/organisms/PageHeaderResponsive.d.ts.map +1 -1
  45. package/dist/components/organisms/PageHeaderResponsive.js.map +1 -1
  46. package/dist/components/templates/lists/ListPageTemplate/index.web.d.ts +1 -1
  47. package/dist/components/templates/lists/ListPageTemplate/index.web.js.map +1 -1
  48. package/dist/components/templates/lists/ListPageTemplate/types.d.ts +1 -1
  49. package/dist/contracts/dist/client/react/drivers/shadcn.js.map +1 -1
  50. package/dist/contracts/dist/client/react/form-render.js.map +1 -1
  51. package/dist/contracts/dist/forms.js +3 -2
  52. package/dist/contracts/dist/forms.js.map +1 -1
  53. package/dist/hooks/useListUrlState.d.ts.map +1 -1
  54. package/dist/hooks/useListUrlState.js.map +1 -1
  55. package/dist/renderers/form-contract.d.ts.map +1 -1
  56. package/dist/renderers/form-contract.js +2 -2
  57. package/dist/renderers/form-contract.js.map +1 -1
  58. package/package.json +17 -11
package/README.md CHANGED
@@ -113,5 +113,6 @@ export function SignupForm() {
113
113
 
114
114
 
115
115
 
116
+
116
117
 
117
118
 
@@ -1 +1 @@
1
- {"version":3,"file":"ApprovalQueue.js","names":[],"sources":["../../../src/components/agent/ApprovalQueue.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport type { ApprovalRequest } from '@lssm/lib.ai-agent/approval';\nimport {\n Table,\n TableHead,\n TableRow,\n TableHeader,\n TableBody,\n TableCell,\n} from '@lssm/lib.ui-kit-web/ui/table';\nimport { Card, CardHeader, CardContent } from '@lssm/lib.ui-kit-web/ui/card';\nimport { Badge } from '@lssm/lib.ui-kit-web/ui/badge';\nimport { Button } from '@lssm/lib.ui-kit-web/ui/button';\nimport { cn } from '@lssm/lib.ui-kit-web/ui/utils';\n\nexport interface ApprovalQueueProps {\n title?: string;\n description?: string;\n requests: ApprovalRequest[];\n onApprove?: (request: ApprovalRequest) => void;\n onReject?: (request: ApprovalRequest) => void;\n className?: string;\n emptyState?: React.ReactNode;\n}\n\nexport function ApprovalQueue({\n title = 'Approvals',\n description = 'Requests escalated by AI agents',\n requests,\n onApprove,\n onReject,\n className,\n emptyState = (\n <p className=\"text-muted-foreground\">Nothing waiting for review.</p>\n ),\n}: ApprovalQueueProps) {\n return (\n <Card className={className}>\n <CardHeader>\n <div className=\"space-y-1\">\n <h3 className=\"text-xl font-semibold\">{title}</h3>\n <p className=\"text-muted-foreground text-sm\">{description}</p>\n </div>\n </CardHeader>\n <CardContent>\n {requests.length === 0 ? (\n emptyState\n ) : (\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Agent</TableHead>\n <TableHead>Reason</TableHead>\n <TableHead>Tenant</TableHead>\n <TableHead>Requested</TableHead>\n <TableHead>Status</TableHead>\n <TableHead className=\"text-right\">Actions</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {requests.map((request) => (\n <TableRow key={request.id}>\n <TableCell className=\"font-medium\">\n {request.agentId}\n </TableCell>\n <TableCell className=\"max-w-sm truncate\">\n {request.reason}\n </TableCell>\n <TableCell>{request.tenantId ?? '—'}</TableCell>\n <TableCell>{formatRelative(request.requestedAt)}</TableCell>\n <TableCell>\n <Badge variant={badgeVariant(request.status)}>\n {request.status}\n </Badge>\n </TableCell>\n <TableCell>\n <div className=\"flex justify-end gap-2\">\n <Button\n size=\"sm\"\n variant=\"secondary\"\n disabled={request.status !== 'pending'}\n onClick={() => onReject?.(request)}\n >\n Reject\n </Button>\n <Button\n size=\"sm\"\n disabled={request.status !== 'pending'}\n onClick={() => onApprove?.(request)}\n >\n Approve\n </Button>\n </div>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )}\n </CardContent>\n </Card>\n );\n}\n\nfunction badgeVariant(\n status: ApprovalRequest['status']\n): 'default' | 'secondary' | 'outline' | 'destructive' {\n switch (status) {\n case 'approved':\n return 'default';\n case 'rejected':\n return 'destructive';\n default:\n return 'secondary';\n }\n}\n\nfunction formatRelative(date: Date) {\n const formatter = new Intl.RelativeTimeFormat(undefined, { numeric: 'auto' });\n const deltaMinutes = Math.round(\n (Date.now() - new Date(date).getTime()) / 60000\n );\n if (Math.abs(deltaMinutes) < 60) {\n return formatter.format(-deltaMinutes, 'minute');\n }\n const deltaHours = Math.round(deltaMinutes / 60);\n if (Math.abs(deltaHours) < 24) {\n return formatter.format(-deltaHours, 'hour');\n }\n const deltaDays = Math.round(deltaHours / 24);\n return formatter.format(-deltaDays, 'day');\n}\n"],"mappings":";;;;;;;;;;AA2BA,SAAgB,cAAc,EAC5B,QAAQ,aACR,cAAc,mCACd,UACA,WACA,UACA,WACA,aACE,oBAAC;CAAE,WAAU;WAAwB;EAA+B,IAEjD;AACrB,QACE,qBAAC;EAAgB;aACf,oBAAC,wBACC,qBAAC;GAAI,WAAU;cACb,oBAAC;IAAG,WAAU;cAAyB;KAAW,EAClD,oBAAC;IAAE,WAAU;cAAiC;KAAgB;IAC1D,GACK,EACb,oBAAC,yBACE,SAAS,WAAW,IACnB,aAEA,qBAAC,oBACC,oBAAC,yBACC,qBAAC;GACC,oBAAC,uBAAU,UAAiB;GAC5B,oBAAC,uBAAU,WAAkB;GAC7B,oBAAC,uBAAU,WAAkB;GAC7B,oBAAC,uBAAU,cAAqB;GAChC,oBAAC,uBAAU,WAAkB;GAC7B,oBAAC;IAAU,WAAU;cAAa;KAAmB;MAC5C,GACC,EACd,oBAAC,uBACE,SAAS,KAAK,YACb,qBAAC;GACC,oBAAC;IAAU,WAAU;cAClB,QAAQ;KACC;GACZ,oBAAC;IAAU,WAAU;cAClB,QAAQ;KACC;GACZ,oBAAC,uBAAW,QAAQ,YAAY,MAAgB;GAChD,oBAAC,uBAAW,eAAe,QAAQ,YAAY,GAAa;GAC5D,oBAAC,uBACC,oBAAC;IAAM,SAAS,aAAa,QAAQ,OAAO;cACzC,QAAQ;KACH,GACE;GACZ,oBAAC,uBACC,qBAAC;IAAI,WAAU;eACb,oBAAC;KACC,MAAK;KACL,SAAQ;KACR,UAAU,QAAQ,WAAW;KAC7B,eAAe,WAAW,QAAQ;eACnC;MAEQ,EACT,oBAAC;KACC,MAAK;KACL,UAAU,QAAQ,WAAW;KAC7B,eAAe,YAAY,QAAQ;eACpC;MAEQ;KACL,GACI;OAhCC,QAAQ,GAiCZ,CACX,GACQ,IACN,GAEE;GACT;;AAIX,SAAS,aACP,QACqD;AACrD,SAAQ,QAAR;EACE,KAAK,WACH,QAAO;EACT,KAAK,WACH,QAAO;EACT,QACE,QAAO;;;AAIb,SAAS,eAAe,MAAY;CAClC,MAAM,YAAY,IAAI,KAAK,mBAAmB,QAAW,EAAE,SAAS,QAAQ,CAAC;CAC7E,MAAM,eAAe,KAAK,OACvB,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,SAAS,IAAI,IAC3C;AACD,KAAI,KAAK,IAAI,aAAa,GAAG,GAC3B,QAAO,UAAU,OAAO,CAAC,cAAc,SAAS;CAElD,MAAM,aAAa,KAAK,MAAM,eAAe,GAAG;AAChD,KAAI,KAAK,IAAI,WAAW,GAAG,GACzB,QAAO,UAAU,OAAO,CAAC,YAAY,OAAO;CAE9C,MAAM,YAAY,KAAK,MAAM,aAAa,GAAG;AAC7C,QAAO,UAAU,OAAO,CAAC,WAAW,MAAM"}
1
+ {"version":3,"file":"ApprovalQueue.js","names":[],"sources":["../../../src/components/agent/ApprovalQueue.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport type { ApprovalRequest } from '@lssm/lib.ai-agent/approval';\nimport {\n Table,\n TableHead,\n TableRow,\n TableHeader,\n TableBody,\n TableCell,\n} from '@lssm/lib.ui-kit-web/ui/table';\nimport { Card, CardHeader, CardContent } from '@lssm/lib.ui-kit-web/ui/card';\nimport { Badge } from '@lssm/lib.ui-kit-web/ui/badge';\nimport { Button } from '@lssm/lib.ui-kit-web/ui/button';\nimport { cn as _cn } from '@lssm/lib.ui-kit-web/ui/utils';\n\nexport interface ApprovalQueueProps {\n title?: string;\n description?: string;\n requests: ApprovalRequest[];\n onApprove?: (request: ApprovalRequest) => void;\n onReject?: (request: ApprovalRequest) => void;\n className?: string;\n emptyState?: React.ReactNode;\n}\n\nexport function ApprovalQueue({\n title = 'Approvals',\n description = 'Requests escalated by AI agents',\n requests,\n onApprove,\n onReject,\n className,\n emptyState = (\n <p className=\"text-muted-foreground\">Nothing waiting for review.</p>\n ),\n}: ApprovalQueueProps) {\n return (\n <Card className={className}>\n <CardHeader>\n <div className=\"space-y-1\">\n <h3 className=\"text-xl font-semibold\">{title}</h3>\n <p className=\"text-muted-foreground text-sm\">{description}</p>\n </div>\n </CardHeader>\n <CardContent>\n {requests.length === 0 ? (\n emptyState\n ) : (\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Agent</TableHead>\n <TableHead>Reason</TableHead>\n <TableHead>Tenant</TableHead>\n <TableHead>Requested</TableHead>\n <TableHead>Status</TableHead>\n <TableHead className=\"text-right\">Actions</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {requests.map((request) => (\n <TableRow key={request.id}>\n <TableCell className=\"font-medium\">\n {request.agentId}\n </TableCell>\n <TableCell className=\"max-w-sm truncate\">\n {request.reason}\n </TableCell>\n <TableCell>{request.tenantId ?? '—'}</TableCell>\n <TableCell>{formatRelative(request.requestedAt)}</TableCell>\n <TableCell>\n <Badge variant={badgeVariant(request.status)}>\n {request.status}\n </Badge>\n </TableCell>\n <TableCell>\n <div className=\"flex justify-end gap-2\">\n <Button\n size=\"sm\"\n variant=\"secondary\"\n disabled={request.status !== 'pending'}\n onClick={() => onReject?.(request)}\n >\n Reject\n </Button>\n <Button\n size=\"sm\"\n disabled={request.status !== 'pending'}\n onClick={() => onApprove?.(request)}\n >\n Approve\n </Button>\n </div>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )}\n </CardContent>\n </Card>\n );\n}\n\nfunction badgeVariant(\n status: ApprovalRequest['status']\n): 'default' | 'secondary' | 'outline' | 'destructive' {\n switch (status) {\n case 'approved':\n return 'default';\n case 'rejected':\n return 'destructive';\n default:\n return 'secondary';\n }\n}\n\nfunction formatRelative(date: Date) {\n const formatter = new Intl.RelativeTimeFormat(undefined, { numeric: 'auto' });\n const deltaMinutes = Math.round(\n (Date.now() - new Date(date).getTime()) / 60000\n );\n if (Math.abs(deltaMinutes) < 60) {\n return formatter.format(-deltaMinutes, 'minute');\n }\n const deltaHours = Math.round(deltaMinutes / 60);\n if (Math.abs(deltaHours) < 24) {\n return formatter.format(-deltaHours, 'hour');\n }\n const deltaDays = Math.round(deltaHours / 24);\n return formatter.format(-deltaDays, 'day');\n}\n"],"mappings":";;;;;;;;;;AA2BA,SAAgB,cAAc,EAC5B,QAAQ,aACR,cAAc,mCACd,UACA,WACA,UACA,WACA,aACE,oBAAC;CAAE,WAAU;WAAwB;EAA+B,IAEjD;AACrB,QACE,qBAAC;EAAgB;aACf,oBAAC,wBACC,qBAAC;GAAI,WAAU;cACb,oBAAC;IAAG,WAAU;cAAyB;KAAW,EAClD,oBAAC;IAAE,WAAU;cAAiC;KAAgB;IAC1D,GACK,EACb,oBAAC,yBACE,SAAS,WAAW,IACnB,aAEA,qBAAC,oBACC,oBAAC,yBACC,qBAAC;GACC,oBAAC,uBAAU,UAAiB;GAC5B,oBAAC,uBAAU,WAAkB;GAC7B,oBAAC,uBAAU,WAAkB;GAC7B,oBAAC,uBAAU,cAAqB;GAChC,oBAAC,uBAAU,WAAkB;GAC7B,oBAAC;IAAU,WAAU;cAAa;KAAmB;MAC5C,GACC,EACd,oBAAC,uBACE,SAAS,KAAK,YACb,qBAAC;GACC,oBAAC;IAAU,WAAU;cAClB,QAAQ;KACC;GACZ,oBAAC;IAAU,WAAU;cAClB,QAAQ;KACC;GACZ,oBAAC,uBAAW,QAAQ,YAAY,MAAgB;GAChD,oBAAC,uBAAW,eAAe,QAAQ,YAAY,GAAa;GAC5D,oBAAC,uBACC,oBAAC;IAAM,SAAS,aAAa,QAAQ,OAAO;cACzC,QAAQ;KACH,GACE;GACZ,oBAAC,uBACC,qBAAC;IAAI,WAAU;eACb,oBAAC;KACC,MAAK;KACL,SAAQ;KACR,UAAU,QAAQ,WAAW;KAC7B,eAAe,WAAW,QAAQ;eACnC;MAEQ,EACT,oBAAC;KACC,MAAK;KACL,UAAU,QAAQ,WAAW;KAC7B,eAAe,YAAY,QAAQ;eACpC;MAEQ;KACL,GACI;OAhCC,QAAQ,GAiCZ,CACX,GACQ,IACN,GAEE;GACT;;AAIX,SAAS,aACP,QACqD;AACrD,SAAQ,QAAR;EACE,KAAK,WACH,QAAO;EACT,KAAK,WACH,QAAO;EACT,QACE,QAAO;;;AAIb,SAAS,eAAe,MAAY;CAClC,MAAM,YAAY,IAAI,KAAK,mBAAmB,QAAW,EAAE,SAAS,QAAQ,CAAC;CAC7E,MAAM,eAAe,KAAK,OACvB,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,SAAS,IAAI,IAC3C;AACD,KAAI,KAAK,IAAI,aAAa,GAAG,GAC3B,QAAO,UAAU,OAAO,CAAC,cAAc,SAAS;CAElD,MAAM,aAAa,KAAK,MAAM,eAAe,GAAG;AAChD,KAAI,KAAK,IAAI,WAAW,GAAG,GACzB,QAAO,UAAU,OAAO,CAAC,YAAY,OAAO;CAE9C,MAAM,YAAY,KAAK,MAAM,aAAa,GAAG;AAC7C,QAAO,UAAU,OAAO,CAAC,WAAW,MAAM"}
@@ -5,11 +5,11 @@ import { VariantProps } from "class-variance-authority";
5
5
  import * as class_variance_authority_types1 from "class-variance-authority/types";
6
6
 
7
7
  //#region src/components/atoms/ActionButtons.d.ts
8
- declare const actionBtn: (props?: ({
8
+ declare const _actionBtn: (props?: ({
9
9
  tone?: "subtle" | "neutral" | "danger" | "outline" | null | undefined;
10
10
  size?: "sm" | "md" | "lg" | "icon" | null | undefined;
11
11
  } & class_variance_authority_types1.ClassProp) | undefined) => string;
12
- type ActionBtnProps = Omit<ButtonProps, 'size' | 'variant'> & VariantProps<typeof actionBtn> & {
12
+ type ActionBtnProps = Omit<ButtonProps, 'size' | 'variant'> & VariantProps<typeof _actionBtn> & {
13
13
  label?: React$1.ReactNode;
14
14
  iconLeft?: React$1.ReactNode;
15
15
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ActionButtons.d.ts","names":[],"sources":["../../../src/components/atoms/ActionButtons.tsx"],"sourcesContent":[],"mappings":";;;;;;;cAaM;;;IAgBJ,+BAAA,CAAA;AA3BgE,KA6B7D,cAAA,GAAiB,IAFpB,CAEyB,WAFzB,EAAA,MAAA,GAAA,SAAA,CAAA,GAGA,YAHA,CAAA,OAGoB,SAHpB,CAAA,GAAA;EAEG,KAAA,CAAA,EAEO,OAAA,CAAM,SAFC;EAAQ,QAAA,CAAA,EAGZ,OAAA,CAAM,SAHM;CAAL;AACA,iBAwDN,UAAA,CAxDM,KAAA,EAwDY,IAxDZ,CAwDiB,cAxDjB,EAAA,UAAA,GAAA,MAAA,CAAA,CAAA,EAwDqD,kBAAA,CAAA,GAAA,CAAA,OAxDrD;AAApB,iBA8Dc,YAAA,CA9Dd,KAAA,EA8DkC,IA9DlC,CA8DuC,cA9DvC,EAAA,UAAA,CAAA,CAAA,EA8DkE,kBAAA,CAAA,GAAA,CAAA,OA9DlE;AACU,iBAuEI,UAAA,CAvEE,KAAA,EAuEgB,IAvEhB,CAuEqB,cAvErB,EAAA,UAAA,CAAA,CAAA,EAuEgD,kBAAA,CAAA,GAAA,CAAA,OAvEhD;AACH,iBA4EC,YAAA,CA5EK,KAAA,EA6EZ,IA7EY,CA6EP,cA7EO,EAAA,UAAA,CAAA,GAAA;EAAS,MAAA,CAAA,EAAA,OAAA;AAsD9B,CAAA,CAAA,EAuBgE,kBAAA,CAAA,GAAA,CAAA,OAvBtC;AAAa,iBAwCvB,gBAAA,CAxCuB,KAAA,EAwCC,IAxCD,CAwCM,cAxCN,EAAA,UAAA,CAAA,CAAA,EAwCiC,kBAAA,CAAA,GAAA,CAAA,OAxCjC;AAAL,iBAiDlB,iBAAA,CAjDkB,KAAA,EAiDO,IAjDP,CAiDY,cAjDZ,EAAA,UAAA,CAAA,CAAA,EAiDuC,kBAAA,CAAA,GAAA,CAAA,OAjDvC"}
1
+ {"version":3,"file":"ActionButtons.d.ts","names":[],"sources":["../../../src/components/atoms/ActionButtons.tsx"],"sourcesContent":[],"mappings":";;;;;;;cAaM;;;IAgBJ,+BAAA,CAAA;AA3BgE,KA6B7D,cAAA,GAAiB,IAFpB,CAEyB,WAFzB,EAAA,MAAA,GAAA,SAAA,CAAA,GAGA,YAHA,CAAA,OAGoB,UAHpB,CAAA,GAAA;EAEG,KAAA,CAAA,EAEO,OAAA,CAAM,SAFC;EAAQ,QAAA,CAAA,EAGZ,OAAA,CAAM,SAHM;CAAL;AACA,iBAwDN,UAAA,CAxDM,KAAA,EAwDY,IAxDZ,CAwDiB,cAxDjB,EAAA,UAAA,GAAA,MAAA,CAAA,CAAA,EAwDqD,kBAAA,CAAA,GAAA,CAAA,OAxDrD;AAApB,iBA8Dc,YAAA,CA9Dd,KAAA,EA8DkC,IA9DlC,CA8DuC,cA9DvC,EAAA,UAAA,CAAA,CAAA,EA8DkE,kBAAA,CAAA,GAAA,CAAA,OA9DlE;AACU,iBAuEI,UAAA,CAvEE,KAAA,EAuEgB,IAvEhB,CAuEqB,cAvErB,EAAA,UAAA,CAAA,CAAA,EAuEgD,kBAAA,CAAA,GAAA,CAAA,OAvEhD;AACH,iBA4EC,YAAA,CA5EK,KAAA,EA6EZ,IA7EY,CA6EP,cA7EO,EAAA,UAAA,CAAA,GAAA;EAAS,MAAA,CAAA,EAAA,OAAA;AAsD9B,CAAA,CAAA,EAuBgE,kBAAA,CAAA,GAAA,CAAA,OAvBtC;AAAa,iBAwCvB,gBAAA,CAxCuB,KAAA,EAwCC,IAxCD,CAwCM,cAxCN,EAAA,UAAA,CAAA,CAAA,EAwCiC,kBAAA,CAAA,GAAA,CAAA,OAxCjC;AAAL,iBAiDlB,iBAAA,CAjDkB,KAAA,EAiDO,IAjDP,CAiDY,cAjDZ,EAAA,UAAA,CAAA,CAAA,EAiDuC,kBAAA,CAAA,GAAA,CAAA,OAjDvC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ActionButtons.js","names":["EditIcon","DeleteIcon","ViewIcon","ToggleLeftIcon","ToggleRightIcon"],"sources":["../../../src/components/atoms/ActionButtons.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Button, type ButtonProps } from './Button';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport {\n Edit as EditIcon,\n Eye as ViewIcon,\n ToggleLeft as ToggleLeftIcon,\n ToggleRight as ToggleRightIcon,\n Trash2 as DeleteIcon,\n} from 'lucide-react';\nimport { Box } from '@lssm/lib.ui-kit-web/ui/stack';\nimport { Text } from '@lssm/lib.ui-kit-web/ui/text';\n\nconst actionBtn = cva('', {\n variants: {\n tone: {\n neutral: 'default',\n danger: 'destructive',\n subtle: 'secondary',\n outline: 'outline',\n },\n size: {\n sm: 'sm',\n md: 'default',\n lg: 'lg',\n icon: 'icon',\n },\n },\n defaultVariants: { tone: 'neutral', size: 'md' },\n});\n\ntype ActionBtnProps = Omit<ButtonProps, 'size' | 'variant'> &\n VariantProps<typeof actionBtn> & {\n label?: React.ReactNode;\n iconLeft?: React.ReactNode;\n };\n\nfunction toVariant(\n tone: NonNullable<VariantProps<typeof actionBtn>['tone']>\n): ButtonProps['variant'] {\n switch (tone) {\n case 'danger':\n return 'destructive';\n case 'subtle':\n return 'secondary';\n case 'outline':\n return 'outline';\n default:\n return 'default';\n }\n}\n\nfunction toSize(\n size: NonNullable<VariantProps<typeof actionBtn>['size']>\n): ButtonProps['size'] {\n switch (size) {\n case 'sm':\n return 'sm';\n case 'lg':\n return 'lg';\n case 'icon':\n return 'icon';\n default:\n return 'default';\n }\n}\n\nfunction ActionButtonBase({\n tone = 'neutral',\n size = 'md',\n label,\n iconLeft,\n ...props\n}: ActionBtnProps) {\n return (\n <Button\n variant={toVariant(tone || 'neutral')}\n size={toSize(size || 'md')}\n {...props}\n >\n {iconLeft ? (\n <Box className=\"mr-2 inline-flex h-4 w-4\">{iconLeft}</Box>\n ) : null}\n <Text>{label}</Text>\n </Button>\n );\n}\n\nexport function EditButton(props: Omit<ActionBtnProps, 'iconLeft' | 'tone'>) {\n return (\n <ActionButtonBase iconLeft={<EditIcon className=\"h-4 w-4\" />} {...props} />\n );\n}\n\nexport function DeleteButton(props: Omit<ActionBtnProps, 'iconLeft'>) {\n return (\n <ActionButtonBase\n iconLeft={<DeleteIcon className=\"h-4 w-4\" />}\n tone=\"danger\"\n {...props}\n />\n );\n}\n\nexport function ViewButton(props: Omit<ActionBtnProps, 'iconLeft'>) {\n return (\n <ActionButtonBase iconLeft={<ViewIcon className=\"h-4 w-4\" />} {...props} />\n );\n}\n\nexport function ToggleButton(\n props: Omit<ActionBtnProps, 'iconLeft'> & { active?: boolean }\n) {\n const { active, ...rest } = props;\n return (\n <ActionButtonBase\n iconLeft={\n active ? (\n <ToggleLeftIcon className=\"h-4 w-4\" />\n ) : (\n <ToggleRightIcon className=\"h-4 w-4\" />\n )\n }\n {...rest}\n />\n );\n}\n\nexport function ToggleLeftButton(props: Omit<ActionBtnProps, 'iconLeft'>) {\n return (\n <ActionButtonBase\n iconLeft={<ToggleLeftIcon className=\"h-4 w-4\" />}\n {...props}\n />\n );\n}\n\nexport function ToggleRightButton(props: Omit<ActionBtnProps, 'iconLeft'>) {\n return (\n <ActionButtonBase\n iconLeft={<ToggleRightIcon className=\"h-4 w-4\" />}\n {...props}\n />\n );\n}\n"],"mappings":";;;;;;;;;AAakB,IAAI,IAAI;CACxB,UAAU;EACR,MAAM;GACJ,SAAS;GACT,QAAQ;GACR,QAAQ;GACR,SAAS;GACV;EACD,MAAM;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,MAAM;GACP;EACF;CACD,iBAAiB;EAAE,MAAM;EAAW,MAAM;EAAM;CACjD,CAAC;AAQF,SAAS,UACP,MACwB;AACxB,SAAQ,MAAR;EACE,KAAK,SACH,QAAO;EACT,KAAK,SACH,QAAO;EACT,KAAK,UACH,QAAO;EACT,QACE,QAAO;;;AAIb,SAAS,OACP,MACqB;AACrB,SAAQ,MAAR;EACE,KAAK,KACH,QAAO;EACT,KAAK,KACH,QAAO;EACT,KAAK,OACH,QAAO;EACT,QACE,QAAO;;;AAIb,SAAS,iBAAiB,EACxB,OAAO,WACP,OAAO,MACP,OACA,UACA,GAAG,SACc;AACjB,QACE,qBAAC;EACC,SAAS,UAAU,QAAQ,UAAU;EACrC,MAAM,OAAO,QAAQ,KAAK;EAC1B,GAAI;aAEH,WACC,oBAAC;GAAI,WAAU;aAA4B;IAAe,GACxD,MACJ,oBAAC,kBAAM,QAAa;GACb;;AAIb,SAAgB,WAAW,OAAkD;AAC3E,QACE,oBAAC;EAAiB,UAAU,oBAACA,QAAS,WAAU,YAAY;EAAE,GAAI;GAAS;;AAI/E,SAAgB,aAAa,OAAyC;AACpE,QACE,oBAAC;EACC,UAAU,oBAACC,UAAW,WAAU,YAAY;EAC5C,MAAK;EACL,GAAI;GACJ;;AAIN,SAAgB,WAAW,OAAyC;AAClE,QACE,oBAAC;EAAiB,UAAU,oBAACC,OAAS,WAAU,YAAY;EAAE,GAAI;GAAS;;AAI/E,SAAgB,aACd,OACA;CACA,MAAM,EAAE,QAAQ,GAAG,SAAS;AAC5B,QACE,oBAAC;EACC,UACE,SACE,oBAACC,cAAe,WAAU,YAAY,GAEtC,oBAACC,eAAgB,WAAU,YAAY;EAG3C,GAAI;GACJ;;AAIN,SAAgB,iBAAiB,OAAyC;AACxE,QACE,oBAAC;EACC,UAAU,oBAACD,cAAe,WAAU,YAAY;EAChD,GAAI;GACJ;;AAIN,SAAgB,kBAAkB,OAAyC;AACzE,QACE,oBAAC;EACC,UAAU,oBAACC,eAAgB,WAAU,YAAY;EACjD,GAAI;GACJ"}
1
+ {"version":3,"file":"ActionButtons.js","names":["EditIcon","DeleteIcon","ViewIcon","ToggleLeftIcon","ToggleRightIcon"],"sources":["../../../src/components/atoms/ActionButtons.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Button, type ButtonProps } from './Button';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport {\n Edit as EditIcon,\n Eye as ViewIcon,\n ToggleLeft as ToggleLeftIcon,\n ToggleRight as ToggleRightIcon,\n Trash2 as DeleteIcon,\n} from 'lucide-react';\nimport { Box } from '@lssm/lib.ui-kit-web/ui/stack';\nimport { Text } from '@lssm/lib.ui-kit-web/ui/text';\n\nconst _actionBtn = cva('', {\n variants: {\n tone: {\n neutral: 'default',\n danger: 'destructive',\n subtle: 'secondary',\n outline: 'outline',\n },\n size: {\n sm: 'sm',\n md: 'default',\n lg: 'lg',\n icon: 'icon',\n },\n },\n defaultVariants: { tone: 'neutral', size: 'md' },\n});\n\ntype ActionBtnProps = Omit<ButtonProps, 'size' | 'variant'> &\n VariantProps<typeof _actionBtn> & {\n label?: React.ReactNode;\n iconLeft?: React.ReactNode;\n };\n\nfunction toVariant(\n tone: NonNullable<VariantProps<typeof _actionBtn>['tone']>\n): ButtonProps['variant'] {\n switch (tone) {\n case 'danger':\n return 'destructive';\n case 'subtle':\n return 'secondary';\n case 'outline':\n return 'outline';\n default:\n return 'default';\n }\n}\n\nfunction toSize(\n size: NonNullable<VariantProps<typeof _actionBtn>['size']>\n): ButtonProps['size'] {\n switch (size) {\n case 'sm':\n return 'sm';\n case 'lg':\n return 'lg';\n case 'icon':\n return 'icon';\n default:\n return 'default';\n }\n}\n\nfunction ActionButtonBase({\n tone = 'neutral',\n size = 'md',\n label,\n iconLeft,\n ...props\n}: ActionBtnProps) {\n return (\n <Button\n variant={toVariant(tone || 'neutral')}\n size={toSize(size || 'md')}\n {...props}\n >\n {iconLeft ? (\n <Box className=\"mr-2 inline-flex h-4 w-4\">{iconLeft}</Box>\n ) : null}\n <Text>{label}</Text>\n </Button>\n );\n}\n\nexport function EditButton(props: Omit<ActionBtnProps, 'iconLeft' | 'tone'>) {\n return (\n <ActionButtonBase iconLeft={<EditIcon className=\"h-4 w-4\" />} {...props} />\n );\n}\n\nexport function DeleteButton(props: Omit<ActionBtnProps, 'iconLeft'>) {\n return (\n <ActionButtonBase\n iconLeft={<DeleteIcon className=\"h-4 w-4\" />}\n tone=\"danger\"\n {...props}\n />\n );\n}\n\nexport function ViewButton(props: Omit<ActionBtnProps, 'iconLeft'>) {\n return (\n <ActionButtonBase iconLeft={<ViewIcon className=\"h-4 w-4\" />} {...props} />\n );\n}\n\nexport function ToggleButton(\n props: Omit<ActionBtnProps, 'iconLeft'> & { active?: boolean }\n) {\n const { active, ...rest } = props;\n return (\n <ActionButtonBase\n iconLeft={\n active ? (\n <ToggleLeftIcon className=\"h-4 w-4\" />\n ) : (\n <ToggleRightIcon className=\"h-4 w-4\" />\n )\n }\n {...rest}\n />\n );\n}\n\nexport function ToggleLeftButton(props: Omit<ActionBtnProps, 'iconLeft'>) {\n return (\n <ActionButtonBase\n iconLeft={<ToggleLeftIcon className=\"h-4 w-4\" />}\n {...props}\n />\n );\n}\n\nexport function ToggleRightButton(props: Omit<ActionBtnProps, 'iconLeft'>) {\n return (\n <ActionButtonBase\n iconLeft={<ToggleRightIcon className=\"h-4 w-4\" />}\n {...props}\n />\n );\n}\n"],"mappings":";;;;;;;;;AAamB,IAAI,IAAI;CACzB,UAAU;EACR,MAAM;GACJ,SAAS;GACT,QAAQ;GACR,QAAQ;GACR,SAAS;GACV;EACD,MAAM;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,MAAM;GACP;EACF;CACD,iBAAiB;EAAE,MAAM;EAAW,MAAM;EAAM;CACjD,CAAC;AAQF,SAAS,UACP,MACwB;AACxB,SAAQ,MAAR;EACE,KAAK,SACH,QAAO;EACT,KAAK,SACH,QAAO;EACT,KAAK,UACH,QAAO;EACT,QACE,QAAO;;;AAIb,SAAS,OACP,MACqB;AACrB,SAAQ,MAAR;EACE,KAAK,KACH,QAAO;EACT,KAAK,KACH,QAAO;EACT,KAAK,OACH,QAAO;EACT,QACE,QAAO;;;AAIb,SAAS,iBAAiB,EACxB,OAAO,WACP,OAAO,MACP,OACA,UACA,GAAG,SACc;AACjB,QACE,qBAAC;EACC,SAAS,UAAU,QAAQ,UAAU;EACrC,MAAM,OAAO,QAAQ,KAAK;EAC1B,GAAI;aAEH,WACC,oBAAC;GAAI,WAAU;aAA4B;IAAe,GACxD,MACJ,oBAAC,kBAAM,QAAa;GACb;;AAIb,SAAgB,WAAW,OAAkD;AAC3E,QACE,oBAAC;EAAiB,UAAU,oBAACA,QAAS,WAAU,YAAY;EAAE,GAAI;GAAS;;AAI/E,SAAgB,aAAa,OAAyC;AACpE,QACE,oBAAC;EACC,UAAU,oBAACC,UAAW,WAAU,YAAY;EAC5C,MAAK;EACL,GAAI;GACJ;;AAIN,SAAgB,WAAW,OAAyC;AAClE,QACE,oBAAC;EAAiB,UAAU,oBAACC,OAAS,WAAU,YAAY;EAAE,GAAI;GAAS;;AAI/E,SAAgB,aACd,OACA;CACA,MAAM,EAAE,QAAQ,GAAG,SAAS;AAC5B,QACE,oBAAC;EACC,UACE,SACE,oBAACC,cAAe,WAAU,YAAY,GAEtC,oBAACC,eAAgB,WAAU,YAAY;EAG3C,GAAI;GACJ;;AAIN,SAAgB,iBAAiB,OAAyC;AACxE,QACE,oBAAC;EACC,UAAU,oBAACD,cAAe,WAAU,YAAY;EAChD,GAAI;GACJ;;AAIN,SAAgB,kBAAkB,OAAyC;AACzE,QACE,oBAAC;EACC,UAAU,oBAACC,eAAgB,WAAU,YAAY;EACjD,GAAI;GACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"Button.d.ts","names":[],"sources":["../../../src/components/atoms/Button.tsx"],"sourcesContent":[],"mappings":";;;;;KASK,gBAAA;KAOO,aAAA,GAAc,KACxB;YAIU,OAAA,CAAM;EAZb,OAAA,CAAA,EAAA,OAAA;EAOO,WAAA,CAAA,EAAA,MAAW;EACrB,gBAAA,CAAA,EAOmB,gBAPnB;EADwB,OAAA,CAAA,EAAA,GAAA,GAAA,IAAA;EAKd,SAAM,CAAA,EAAA,GAAA,GAAA,IAAA;EAGG,UAAA,CAAA,EAAA,GAAA,GAAA,IAAA;EAOe,WAAA,CAAA,EAAA,GAAA,GAAA,IAAA;EAAxB,OAAM,CAAA,EAAN,OAAA,CAAM,iBAAA,CAAkB,iBAAlB,CAAA;EAAiB,QAAA,CAAA,EAAA,OAAA;AAInC,CAAA;AACE,iBADc,MAAA,CACd;EAAA,QAAA;EAAA,OAAA;EAAA,gBAAA;EAAA,OAAA;EAAA,SAAA;EAAA,UAAA;EAAA,WAAA;EAAA,YAAA;EAAA,UAAA;EAAA,aAAA;EAAA,WAAA;EAAA,SAAA;EAAA,OAAA;EAAA,SAAA;EAAA,QAAA;EAAA,GAAA;AAAA,CAAA,EAgBC,aAhBD,CAAA,EAgBY,kBAAA,CAAA,GAAA,CAAA,OAhBZ"}
1
+ {"version":3,"file":"Button.d.ts","names":[],"sources":["../../../src/components/atoms/Button.tsx"],"sourcesContent":[],"mappings":";;;;;KASK,gBAAA;KAEO,aAAA,GAAc,KACxB;YAIU,OAAA,CAAM;EAPb,OAAA,CAAA,EAAA,OAAA;EAEO,WAAA,CAAA,EAAA,MAAW;EACrB,gBAAA,CAAA,EAOmB,gBAPnB;EADwB,OAAA,CAAA,EAAA,GAAA,GAAA,IAAA;EAKd,SAAM,CAAA,EAAA,GAAA,GAAA,IAAA;EAGG,UAAA,CAAA,EAAA,GAAA,GAAA,IAAA;EAOe,WAAA,CAAA,EAAA,GAAA,GAAA,IAAA;EAAxB,OAAM,CAAA,EAAN,OAAA,CAAM,iBAAA,CAAkB,iBAAlB,CAAA;EAAiB,QAAA,CAAA,EAAA,OAAA;AAInC,CAAA;AACE,iBADc,MAAA,CACd;EAAA,QAAA;EAAA,OAAA;EAAA,gBAAA;EAAA,OAAA;EAAA,SAAA;EAAA,UAAA;EAAA,WAAA;EAAA,YAAA;EAAA,UAAA;EAAA,aAAA;EAAA,WAAA;EAAA,SAAA;EAAA,OAAA;EAAA,SAAA;EAAA,QAAA;EAAA,GAAA;AAAA,CAAA,EAgBC,aAhBD,CAAA,EAgBY,kBAAA,CAAA,GAAA,CAAA,OAhBZ"}
@@ -1 +1 @@
1
- {"version":3,"file":"Button.js","names":["WebButton"],"sources":["../../../src/components/atoms/Button.tsx"],"sourcesContent":["import * as React from 'react';\nimport {\n Button as WebButton,\n type ButtonProps as WebButtonProps,\n} from '@lssm/lib.ui-kit-web/ui/button';\nimport { Loader2 } from 'lucide-react';\n// type-only import to avoid bundling RN on web\nimport type { PressableProps as RNPressableProps } from 'react-native';\n\ntype SpinnerPlacement = 'start' | 'end';\n\ntype PressableBridgeProps = Omit<\n RNPressableProps,\n 'onPress' | 'onPressIn' | 'onPressOut' | 'onLongPress'\n>;\n\nexport type ButtonProps = Omit<\n WebButtonProps,\n 'onClick' | 'disabled' | 'children'\n> & {\n // PressableBridgeProps & {\n children: React.ReactNode;\n loading?: boolean;\n loadingText?: string; // ignored on web, present for API symmetry\n spinnerPlacement?: SpinnerPlacement;\n // Normalized events\n onPress?: () => void;\n onPressIn?: () => void;\n onPressOut?: () => void;\n onLongPress?: () => void;\n // Web-only optional onClick for compatibility\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n disabled?: boolean;\n};\n\nexport function Button({\n children,\n loading,\n spinnerPlacement = 'start',\n onPress,\n onPressIn,\n onPressOut,\n onLongPress,\n onTouchStart,\n onTouchEnd,\n onTouchCancel,\n onMouseDown,\n onMouseUp,\n onClick,\n className,\n disabled,\n ...rest\n}: ButtonProps) {\n const isDisabled = Boolean(disabled || loading);\n\n const content = !rest.asChild ? (\n <>\n {loading && spinnerPlacement === 'start' ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : null}\n {children}\n {loading && spinnerPlacement === 'end' ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : null}\n </>\n ) : (\n children\n );\n\n return (\n <WebButton\n {...(rest as any)}\n className={className}\n disabled={isDisabled}\n aria-busy={loading ? true : undefined}\n aria-disabled={isDisabled ? true : undefined}\n // normalized + bridged events\n onPress={onPress || onClick}\n onClick={onPress || onClick}\n onMouseDown={onMouseDown || onPressIn}\n onMouseUp={onMouseUp || onPressOut}\n onTouchStart={onTouchStart}\n onTouchEnd={onTouchEnd || onPressOut}\n onTouchCancel={onTouchCancel || onPressOut}\n type={(rest as any)?.type ?? 'button'}\n >\n {content}\n </WebButton>\n );\n}\n\nexport default Button;\n"],"mappings":";;;;;;AAmCA,SAAgB,OAAO,EACrB,UACA,SACA,mBAAmB,SACnB,SACA,WACA,YACA,aACA,cACA,YACA,eACA,aACA,WACA,SACA,WACA,UACA,GAAG,QACW;CACd,MAAM,aAAa,QAAQ,YAAY,QAAQ;CAE/C,MAAM,UAAU,CAAC,KAAK,UACpB;EACG,WAAW,qBAAqB,UAC/B,oBAAC,WAAQ,WAAU,yBAAyB,GAC1C;EACH;EACA,WAAW,qBAAqB,QAC/B,oBAAC,WAAQ,WAAU,yBAAyB,GAC1C;KACH,GAEH;AAGF,QACE,oBAACA;EACC,GAAK;EACM;EACX,UAAU;EACV,aAAW,UAAU,OAAO;EAC5B,iBAAe,aAAa,OAAO;EAEnC,SAAS,WAAW;EACpB,SAAS,WAAW;EACpB,aAAa,eAAe;EAC5B,WAAW,aAAa;EACV;EACd,YAAY,cAAc;EAC1B,eAAe,iBAAiB;EAChC,MAAO,MAAc,QAAQ;YAE5B;GACS"}
1
+ {"version":3,"file":"Button.js","names":["WebButton"],"sources":["../../../src/components/atoms/Button.tsx"],"sourcesContent":["import * as React from 'react';\nimport {\n Button as WebButton,\n type ButtonProps as WebButtonProps,\n} from '@lssm/lib.ui-kit-web/ui/button';\nimport { Loader2 } from 'lucide-react';\n// type-only import to avoid bundling RN on web\nimport type { PressableProps as _RNPressableProps } from 'react-native';\n\ntype SpinnerPlacement = 'start' | 'end';\n\nexport type ButtonProps = Omit<\n WebButtonProps,\n 'onClick' | 'disabled' | 'children'\n> & {\n // PressableBridgeProps & {\n children: React.ReactNode;\n loading?: boolean;\n loadingText?: string; // ignored on web, present for API symmetry\n spinnerPlacement?: SpinnerPlacement;\n // Normalized events\n onPress?: () => void;\n onPressIn?: () => void;\n onPressOut?: () => void;\n onLongPress?: () => void;\n // Web-only optional onClick for compatibility\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n disabled?: boolean;\n};\n\nexport function Button({\n children,\n loading,\n spinnerPlacement = 'start',\n onPress,\n onPressIn,\n onPressOut,\n onLongPress,\n onTouchStart,\n onTouchEnd,\n onTouchCancel,\n onMouseDown,\n onMouseUp,\n onClick,\n className,\n disabled,\n ...rest\n}: ButtonProps) {\n const isDisabled = Boolean(disabled || loading);\n\n const content = !rest.asChild ? (\n <>\n {loading && spinnerPlacement === 'start' ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : null}\n {children}\n {loading && spinnerPlacement === 'end' ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : null}\n </>\n ) : (\n children\n );\n\n return (\n <WebButton\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n {...(rest as any)}\n className={className}\n disabled={isDisabled}\n aria-busy={loading ? true : undefined}\n aria-disabled={isDisabled ? true : undefined}\n // normalized + bridged events\n onPress={onPress || onClick}\n onClick={onPress || onClick}\n onMouseDown={onMouseDown || onPressIn}\n onMouseUp={onMouseUp || onPressOut}\n onTouchStart={onTouchStart}\n onTouchEnd={onTouchEnd || onPressOut}\n onTouchCancel={onTouchCancel || onPressOut}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n type={(rest as any)?.type ?? 'button'}\n >\n {content}\n </WebButton>\n );\n}\n\nexport default Button;\n"],"mappings":";;;;;;AA8BA,SAAgB,OAAO,EACrB,UACA,SACA,mBAAmB,SACnB,SACA,WACA,YACA,aACA,cACA,YACA,eACA,aACA,WACA,SACA,WACA,UACA,GAAG,QACW;CACd,MAAM,aAAa,QAAQ,YAAY,QAAQ;CAE/C,MAAM,UAAU,CAAC,KAAK,UACpB;EACG,WAAW,qBAAqB,UAC/B,oBAAC,WAAQ,WAAU,yBAAyB,GAC1C;EACH;EACA,WAAW,qBAAqB,QAC/B,oBAAC,WAAQ,WAAU,yBAAyB,GAC1C;KACH,GAEH;AAGF,QACE,oBAACA;EAEC,GAAK;EACM;EACX,UAAU;EACV,aAAW,UAAU,OAAO;EAC5B,iBAAe,aAAa,OAAO;EAEnC,SAAS,WAAW;EACpB,SAAS,WAAW;EACpB,aAAa,eAAe;EAC5B,WAAW,aAAa;EACV;EACd,YAAY,cAAc;EAC1B,eAAe,iBAAiB;EAEhC,MAAO,MAAc,QAAQ;YAE5B;GACS"}
@@ -1 +1 @@
1
- {"version":3,"file":"Cta.d.ts","names":[],"sources":["../../../src/components/atoms/Cta.tsx"],"sourcesContent":[],"mappings":";;;;;;;;cAsBa,KAAG,OAAA,CAAA,0BAAA,KA8Ef,+BAAA,CA9Ee,WAAA;EAHD,QAAM,mBAAA;;;;EAGL,OAAA,CAAA,EAAA,GAAA,GAAA,IAAA;EAAA,SAAA,CAAA,EAAA,GAAA,GAAA,IAAA;;;;;;;;;;;;;aAHD,OAAA,CAAM"}
1
+ {"version":3,"file":"Cta.d.ts","names":[],"sources":["../../../src/components/atoms/Cta.tsx"],"sourcesContent":[],"mappings":";;;;;;;;cAsBa,KAAG,OAAA,CAAA,0BAAA,KAgFf,+BAAA,CAhFe,WAAA;EAHD,QAAM,mBAAA;;;;EAGL,OAAA,CAAA,EAAA,GAAA,GAAA,IAAA;EAAA,SAAA,CAAA,EAAA,GAAA,GAAA,IAAA;;;;;;;;;;;;;aAHD,OAAA,CAAM"}
@@ -24,7 +24,7 @@ cva("", {
24
24
  emphasis: "default"
25
25
  }
26
26
  });
27
- const Cta = React$1.forwardRef(({ capture, ctaName, as = "button", href, onClick, size = "touch", emphasis = "default", children, ...props }, ref) => {
27
+ const Cta = React$1.forwardRef(({ capture, ctaName, as = "button", href, onClick, size = "touch", emphasis = "default", children, ...props }, _ref) => {
28
28
  const handleClick = (e) => {
29
29
  if (ctaName) try {
30
30
  if (capture) capture(ctaName);
@@ -1 +1 @@
1
- {"version":3,"file":"Cta.js","names":["React","handleClick: React.MouseEventHandler<\n HTMLButtonElement | HTMLAnchorElement\n >"],"sources":["../../../src/components/atoms/Cta.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Button, type ButtonProps } from './Button';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { ButtonLink } from './ButtonLink';\n\nconst ctaVariants = cva('', {\n variants: {\n size: { sm: 'sm', md: 'md', lg: 'lg', touch: 'touch' },\n emphasis: { default: 'default', subtle: 'secondary', strong: 'default' },\n },\n defaultVariants: { size: 'touch', emphasis: 'default' },\n});\n\nexport type CtaProps = ButtonProps &\n VariantProps<typeof ctaVariants> & {\n capture?: (cta: string) => void;\n ctaName?: string;\n as?: 'button' | 'a';\n href?: string;\n children?: React.ReactNode;\n };\n\nexport const Cta = React.forwardRef<\n HTMLButtonElement | HTMLAnchorElement,\n CtaProps\n>(\n (\n {\n capture,\n ctaName,\n as = 'button',\n href,\n onClick,\n size = 'touch',\n emphasis = 'default',\n children,\n ...props\n },\n ref\n ) => {\n const handleClick: React.MouseEventHandler<\n HTMLButtonElement | HTMLAnchorElement\n > = (e) => {\n if (ctaName) {\n try {\n if (capture) capture(ctaName);\n // Optional PostHog fallback if present globally\n const ph = (globalThis as unknown as { posthog?: unknown }).posthog;\n if (\n ph &&\n typeof (ph as { capture?: unknown }).capture === 'function'\n ) {\n (\n ph as {\n capture: (\n event: string,\n props?: Record<string, unknown>\n ) => void;\n }\n ).capture('cta_click', { cta: ctaName });\n }\n } catch {}\n }\n onClick?.(e as unknown as React.MouseEvent<HTMLButtonElement>);\n };\n\n const uiSize = size as ButtonProps['size'];\n const uiVariant = (\n emphasis === 'subtle' ? 'secondary' : 'default'\n ) as ButtonProps['variant'];\n\n if (as === 'a') {\n return (\n <ButtonLink\n size={uiSize}\n variant={uiVariant}\n {...props}\n href={href}\n onClick={\n handleClick as unknown as React.MouseEventHandler<HTMLAnchorElement>\n }\n >\n {children}\n </ButtonLink>\n );\n }\n\n return (\n <Button\n size={uiSize}\n variant={uiVariant}\n onClick={\n handleClick as unknown as React.MouseEventHandler<HTMLButtonElement>\n }\n {...props}\n >\n {children}\n </Button>\n );\n }\n);\nCta.displayName = 'Cta';\n"],"mappings":";;;;;;;AAKoB,IAAI,IAAI;CAC1B,UAAU;EACR,MAAM;GAAE,IAAI;GAAM,IAAI;GAAM,IAAI;GAAM,OAAO;GAAS;EACtD,UAAU;GAAE,SAAS;GAAW,QAAQ;GAAa,QAAQ;GAAW;EACzE;CACD,iBAAiB;EAAE,MAAM;EAAS,UAAU;EAAW;CACxD,CAAC;AAWF,MAAa,MAAMA,QAAM,YAKrB,EACE,SACA,SACA,KAAK,UACL,MACA,SACA,OAAO,SACP,WAAW,WACX,UACA,GAAG,SAEL,QACG;CACH,MAAMC,eAED,MAAM;AACT,MAAI,QACF,KAAI;AACF,OAAI,QAAS,SAAQ,QAAQ;GAE7B,MAAM,KAAM,WAAgD;AAC5D,OACE,MACA,OAAQ,GAA6B,YAAY,WAEjD,CACE,GAMA,QAAQ,aAAa,EAAE,KAAK,SAAS,CAAC;UAEpC;AAEV,YAAU,EAAoD;;CAGhE,MAAM,SAAS;CACf,MAAM,YACJ,aAAa,WAAW,cAAc;AAGxC,KAAI,OAAO,IACT,QACE,oBAAC;EACC,MAAM;EACN,SAAS;EACT,GAAI;EACE;EACN,SACE;EAGD;GACU;AAIjB,QACE,oBAAC;EACC,MAAM;EACN,SAAS;EACT,SACE;EAEF,GAAI;EAEH;GACM;EAGd;AACD,IAAI,cAAc"}
1
+ {"version":3,"file":"Cta.js","names":["React","handleClick: React.MouseEventHandler<\n HTMLButtonElement | HTMLAnchorElement\n >"],"sources":["../../../src/components/atoms/Cta.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Button, type ButtonProps } from './Button';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { ButtonLink } from './ButtonLink';\n\nconst _ctaVariants = cva('', {\n variants: {\n size: { sm: 'sm', md: 'md', lg: 'lg', touch: 'touch' },\n emphasis: { default: 'default', subtle: 'secondary', strong: 'default' },\n },\n defaultVariants: { size: 'touch', emphasis: 'default' },\n});\n\nexport type CtaProps = ButtonProps &\n VariantProps<typeof _ctaVariants> & {\n capture?: (cta: string) => void;\n ctaName?: string;\n as?: 'button' | 'a';\n href?: string;\n children?: React.ReactNode;\n };\n\nexport const Cta = React.forwardRef<\n HTMLButtonElement | HTMLAnchorElement,\n CtaProps\n>(\n (\n {\n capture,\n ctaName,\n as = 'button',\n href,\n onClick,\n size = 'touch',\n emphasis = 'default',\n children,\n ...props\n },\n _ref\n ) => {\n const handleClick: React.MouseEventHandler<\n HTMLButtonElement | HTMLAnchorElement\n > = (e) => {\n if (ctaName) {\n try {\n if (capture) capture(ctaName);\n // Optional PostHog fallback if present globally\n const ph = (globalThis as unknown as { posthog?: unknown }).posthog;\n if (\n ph &&\n typeof (ph as { capture?: unknown }).capture === 'function'\n ) {\n (\n ph as {\n capture: (\n event: string,\n props?: Record<string, unknown>\n ) => void;\n }\n ).capture('cta_click', { cta: ctaName });\n }\n } catch {\n /* noop */\n }\n }\n onClick?.(e as unknown as React.MouseEvent<HTMLButtonElement>);\n };\n\n const uiSize = size as ButtonProps['size'];\n const uiVariant = (\n emphasis === 'subtle' ? 'secondary' : 'default'\n ) as ButtonProps['variant'];\n\n if (as === 'a') {\n return (\n <ButtonLink\n size={uiSize}\n variant={uiVariant}\n {...props}\n href={href}\n onClick={\n handleClick as unknown as React.MouseEventHandler<HTMLAnchorElement>\n }\n >\n {children}\n </ButtonLink>\n );\n }\n\n return (\n <Button\n size={uiSize}\n variant={uiVariant}\n onClick={\n handleClick as unknown as React.MouseEventHandler<HTMLButtonElement>\n }\n {...props}\n >\n {children}\n </Button>\n );\n }\n);\nCta.displayName = 'Cta';\n"],"mappings":";;;;;;;AAKqB,IAAI,IAAI;CAC3B,UAAU;EACR,MAAM;GAAE,IAAI;GAAM,IAAI;GAAM,IAAI;GAAM,OAAO;GAAS;EACtD,UAAU;GAAE,SAAS;GAAW,QAAQ;GAAa,QAAQ;GAAW;EACzE;CACD,iBAAiB;EAAE,MAAM;EAAS,UAAU;EAAW;CACxD,CAAC;AAWF,MAAa,MAAMA,QAAM,YAKrB,EACE,SACA,SACA,KAAK,UACL,MACA,SACA,OAAO,SACP,WAAW,WACX,UACA,GAAG,SAEL,SACG;CACH,MAAMC,eAED,MAAM;AACT,MAAI,QACF,KAAI;AACF,OAAI,QAAS,SAAQ,QAAQ;GAE7B,MAAM,KAAM,WAAgD;AAC5D,OACE,MACA,OAAQ,GAA6B,YAAY,WAEjD,CACE,GAMA,QAAQ,aAAa,EAAE,KAAK,SAAS,CAAC;UAEpC;AAIV,YAAU,EAAoD;;CAGhE,MAAM,SAAS;CACf,MAAM,YACJ,aAAa,WAAW,cAAc;AAGxC,KAAI,OAAO,IACT,QACE,oBAAC;EACC,MAAM;EACN,SAAS;EACT,GAAI;EACE;EACN,SACE;EAGD;GACU;AAIjB,QACE,oBAAC;EACC,MAAM;EACN,SAAS;EACT,SACE;EAEF,GAAI;EAEH;GACM;EAGd;AACD,IAAI,cAAc"}
@@ -1,9 +1,10 @@
1
1
  import * as React$1 from "react";
2
2
  import "react/jsx-runtime";
3
+ import { UrlObject } from "url";
3
4
 
4
5
  //#region src/components/atoms/Link.web.d.ts
5
6
  type LinkProps = {
6
- href: any;
7
+ href?: string | UrlObject;
7
8
  children?: React$1.ReactNode;
8
9
  className?: string;
9
10
  prefetch?: boolean;
@@ -13,7 +14,7 @@ type LinkProps = {
13
14
  target?: string;
14
15
  rel?: string;
15
16
  onClick?: React$1.MouseEventHandler<HTMLAnchorElement>;
16
- } & Record<string, any>;
17
+ } & Record<string, unknown>;
17
18
  //#endregion
18
19
  export { LinkProps };
19
20
  //# sourceMappingURL=Link.web.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Link.web.d.ts","names":[],"sources":["../../../src/components/atoms/Link.web.tsx"],"sourcesContent":[],"mappings":";;;;KAGY,SAAA;;aAEC,OAAA,CAAM;EAFP,SAAA,CAAA,EAAS,MAAA;EAER,QAAM,CAAA,EAAA,OAAA;EAQiB,OAAA,CAAA,EAAA,OAAA;EAAxB,MAAM,CAAA,EAAA,OAAA;EACd,OAAA,CAAA,EAAA,OAAA;EAAM,MAAA,CAAA,EAAA,MAAA;;YADE,OAAA,CAAM,kBAAkB;IAChC"}
1
+ {"version":3,"file":"Link.web.d.ts","names":[],"sources":["../../../src/components/atoms/Link.web.tsx"],"sourcesContent":[],"mappings":";;;;;KAIY,SAAA;kBACM;aACL,OAAA,CAAM;EAFP,SAAA,CAAA,EAAS,MAAA;EACH,QAAA,CAAA,EAAA,OAAA;EACL,OAAM,CAAA,EAAA,OAAA;EAQiB,MAAA,CAAA,EAAA,OAAA;EAAxB,OAAM,CAAA,EAAA,OAAA;EACd,MAAA,CAAA,EAAA,MAAA;EAAM,GAAA,CAAA,EAAA,MAAA;YADE,OAAA,CAAM,kBAAkB;IAChC"}
@@ -5,7 +5,7 @@ import Link from "next/link";
5
5
  //#region src/components/atoms/Link.web.tsx
6
6
  function Link$1({ href, children, ...props }) {
7
7
  return /* @__PURE__ */ jsx(Link, {
8
- href,
8
+ href: href || "#",
9
9
  ...props,
10
10
  children
11
11
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Link.web.js","names":["Link","NextLink"],"sources":["../../../src/components/atoms/Link.web.tsx"],"sourcesContent":["import * as React from 'react';\nimport NextLink from 'next/link';\n\nexport type LinkProps = {\n href: any; // keep loose to avoid type coupling with Next.js types\n children?: React.ReactNode;\n className?: string;\n prefetch?: boolean;\n replace?: boolean;\n scroll?: boolean;\n shallow?: boolean;\n target?: string;\n rel?: string;\n onClick?: React.MouseEventHandler<HTMLAnchorElement>;\n} & Record<string, any>;\n\nexport function Link({ href, children, ...props }: LinkProps) {\n return (\n <NextLink href={href} {...props}>\n {children}\n </NextLink>\n );\n}\n"],"mappings":";;;;;AAgBA,SAAgBA,OAAK,EAAE,MAAM,UAAU,GAAG,SAAoB;AAC5D,QACE,oBAACC;EAAe;EAAM,GAAI;EACvB;GACQ"}
1
+ {"version":3,"file":"Link.web.js","names":["Link","NextLink"],"sources":["../../../src/components/atoms/Link.web.tsx"],"sourcesContent":["import * as React from 'react';\nimport NextLink from 'next/link';\nimport type { UrlObject } from 'url';\n\nexport type LinkProps = {\n href?: string | UrlObject;\n children?: React.ReactNode;\n className?: string;\n prefetch?: boolean;\n replace?: boolean;\n scroll?: boolean;\n shallow?: boolean;\n target?: string;\n rel?: string;\n onClick?: React.MouseEventHandler<HTMLAnchorElement>;\n} & Record<string, unknown>;\n\nexport function Link({ href, children, ...props }: LinkProps) {\n return (\n <NextLink href={href || '#'} {...props}>\n {children}\n </NextLink>\n );\n}\n"],"mappings":";;;;;AAiBA,SAAgBA,OAAK,EAAE,MAAM,UAAU,GAAG,SAAoB;AAC5D,QACE,oBAACC;EAAS,MAAM,QAAQ;EAAK,GAAI;EAC9B;GACQ"}
@@ -1 +1 @@
1
- {"version":3,"file":"Textarea.js","names":["React","WebTextarea"],"sources":["../../../src/components/atoms/Textarea.tsx"],"sourcesContent":["import * as React from 'react';\nimport {\n Textarea as WebTextarea,\n type TextareaProps as WebTextareaProps,\n} from '@lssm/lib.ui-kit-web/ui/textarea';\nimport { type KeyboardOptions, mapKeyboardToWeb } from '../../lib/keyboard';\n\ninterface BaseFieldProps {\n value?: string;\n defaultValue?: string;\n // onChange?: (text: string) => void;\n // onSubmit?: () => void;\n // onFocus?: () => void;\n // onBlur?: () => void;\n placeholder?: string;\n disabled?: boolean;\n readOnly?: boolean;\n maxLength?: number;\n name?: string;\n className?: string;\n rows?: number;\n keyboard?: KeyboardOptions;\n}\n\nexport type TextareaProps = WebTextareaProps & BaseFieldProps;\n\n// export type TextareaProps = Omit<\n// WebTextareaProps,\n// // 'onChange' | 'value' | 'defaultValue'\n// > &\n// BaseFieldProps;\n\nexport function Textarea({\n value,\n defaultValue,\n onChange,\n onSubmit,\n onFocus,\n onBlur,\n placeholder,\n disabled,\n readOnly,\n maxLength,\n name,\n className,\n rows,\n keyboard,\n ...rest\n}: TextareaProps) {\n const webKeyboard = mapKeyboardToWeb(keyboard);\n\n const handleChange = React.useCallback<\n React.ChangeEventHandler<HTMLTextAreaElement>\n >((e) => onChange?.(e), [onChange]);\n\n const handleKeyDown = React.useCallback<\n React.KeyboardEventHandler<HTMLTextAreaElement>\n >(\n (e) => {\n if (e.key === 'Enter' && webKeyboard.type !== 'search') {\n // For textarea, Enter inserts newline; onSubmit could be used with modifier\n if (e.metaKey || e.ctrlKey) onSubmit?.(e);\n }\n },\n [onSubmit, webKeyboard.type]\n );\n\n return (\n <WebTextarea\n {...(rest as any)}\n className={className}\n value={value as any}\n defaultValue={defaultValue as any}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onFocus={onFocus as any}\n onBlur={onBlur as any}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n maxLength={maxLength}\n name={name}\n rows={rows}\n {...webKeyboard}\n />\n );\n}\n\nexport default Textarea;\n"],"mappings":";;;;;;AAgCA,SAAgB,SAAS,EACvB,OACA,cACA,UACA,UACA,SACA,QACA,aACA,UACA,UACA,WACA,MACA,WACA,MACA,UACA,GAAG,QACa;CAChB,MAAM,cAAc,iBAAiB,SAAS;CAE9C,MAAM,eAAeA,QAAM,aAExB,MAAM,WAAW,EAAE,EAAE,CAAC,SAAS,CAAC;CAEnC,MAAM,gBAAgBA,QAAM,aAGzB,MAAM;AACL,MAAI,EAAE,QAAQ,WAAW,YAAY,SAAS,UAE5C;OAAI,EAAE,WAAW,EAAE,QAAS,YAAW,EAAE;;IAG7C,CAAC,UAAU,YAAY,KAAK,CAC7B;AAED,QACE,oBAACC;EACC,GAAK;EACM;EACJ;EACO;EACd,UAAU;EACV,WAAW;EACF;EACD;EACK;EACH;EACA;EACC;EACL;EACA;EACN,GAAI;GACJ"}
1
+ {"version":3,"file":"Textarea.js","names":["React","WebTextarea"],"sources":["../../../src/components/atoms/Textarea.tsx"],"sourcesContent":["import * as React from 'react';\nimport {\n Textarea as WebTextarea,\n type TextareaProps as WebTextareaProps,\n} from '@lssm/lib.ui-kit-web/ui/textarea';\nimport { type KeyboardOptions, mapKeyboardToWeb } from '../../lib/keyboard';\n\ninterface BaseFieldProps {\n value?: string;\n defaultValue?: string;\n // onChange?: (text: string) => void;\n // onSubmit?: () => void;\n // onFocus?: () => void;\n // onBlur?: () => void;\n placeholder?: string;\n disabled?: boolean;\n readOnly?: boolean;\n maxLength?: number;\n name?: string;\n className?: string;\n rows?: number;\n keyboard?: KeyboardOptions;\n}\n\nexport type TextareaProps = WebTextareaProps & BaseFieldProps;\n\n// export type TextareaProps = Omit<\n// WebTextareaProps,\n// // 'onChange' | 'value' | 'defaultValue'\n// > &\n// BaseFieldProps;\n\nexport function Textarea({\n value,\n defaultValue,\n onChange,\n onSubmit,\n onFocus,\n onBlur,\n placeholder,\n disabled,\n readOnly,\n maxLength,\n name,\n className,\n rows,\n keyboard,\n ...rest\n}: TextareaProps) {\n const webKeyboard = mapKeyboardToWeb(keyboard);\n\n const handleChange = React.useCallback<\n React.ChangeEventHandler<HTMLTextAreaElement>\n >((e) => onChange?.(e), [onChange]);\n\n const handleKeyDown = React.useCallback<\n React.KeyboardEventHandler<HTMLTextAreaElement>\n >(\n (e) => {\n if (e.key === 'Enter' && webKeyboard.type !== 'search') {\n // For textarea, Enter inserts newline; onSubmit could be used with modifier\n if (e.metaKey || e.ctrlKey) onSubmit?.(e);\n }\n },\n [onSubmit, webKeyboard.type]\n );\n\n return (\n <WebTextarea\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n {...(rest as any)}\n className={className}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value={value as any}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n defaultValue={defaultValue as any}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onFocus={onFocus as any}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onBlur={onBlur as any}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n maxLength={maxLength}\n name={name}\n rows={rows}\n {...webKeyboard}\n />\n );\n}\n\nexport default Textarea;\n"],"mappings":";;;;;;AAgCA,SAAgB,SAAS,EACvB,OACA,cACA,UACA,UACA,SACA,QACA,aACA,UACA,UACA,WACA,MACA,WACA,MACA,UACA,GAAG,QACa;CAChB,MAAM,cAAc,iBAAiB,SAAS;CAE9C,MAAM,eAAeA,QAAM,aAExB,MAAM,WAAW,EAAE,EAAE,CAAC,SAAS,CAAC;CAEnC,MAAM,gBAAgBA,QAAM,aAGzB,MAAM;AACL,MAAI,EAAE,QAAQ,WAAW,YAAY,SAAS,UAE5C;OAAI,EAAE,WAAW,EAAE,QAAS,YAAW,EAAE;;IAG7C,CAAC,UAAU,YAAY,KAAK,CAC7B;AAED,QACE,oBAACC;EAEC,GAAK;EACM;EAEJ;EAEO;EACd,UAAU;EACV,WAAW;EAEF;EAED;EACK;EACH;EACA;EACC;EACL;EACA;EACN,GAAI;GACJ"}
@@ -16,8 +16,8 @@ interface DataViewRendererProps {
16
16
  footer?: React$1.ReactNode;
17
17
  search?: string;
18
18
  onSearchChange?: (value: string) => void;
19
- filters?: Record<string, any>;
20
- onFilterChange?: (filters: Record<string, any>) => void;
19
+ filters?: Record<string, unknown>;
20
+ onFilterChange?: (filters: Record<string, unknown>) => void;
21
21
  pagination?: {
22
22
  page: number;
23
23
  pageSize: number;
@@ -1 +1 @@
1
- {"version":3,"file":"DataViewRenderer.d.ts","names":[],"sources":["../../../src/components/data-view/DataViewRenderer.tsx"],"sourcesContent":[],"mappings":";;;;;UAsBiB,qBAAA;QACT;UACE;EAFO,IAAA,CAAA,EAGR,MAHQ,CAAA,MAAA,EAAA,OAAqB,CAAA,GAAA,IAAA;EAC9B,SAAA,CAAA,EAAA,MAAA;EACE,aAAA,CAAA,EAAA,CAAA,IAAA,EAGe,MAHf,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,GAG2C,OAAA,CAAM,SAHjD;EACD,QAAA,CAAA,EAAA,CAAA,IAAA,EAGW,MAHX,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,GAAA,IAAA;EAEgB,UAAA,CAAA,EAAA,CAAA,IAAA,EAEH,MAFG,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,GAAA,IAAA;EAA4B,aAAM,CAAA,EAGzC,OAAA,CAAM,SAHmC;EACvC,UAAA,CAAA,EAGL,OAAA,CAAM,SAHD;EACE,MAAA,CAAA,EAGX,OAAA,CAAM,SAHK;EACJ,MAAM,CAAA,EAAA,MAAA;EACT,cAAM,CAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,GAAA,IAAA;EACV,OAAM,CAAA,EAKL,MALK,CAAA,MAAA,EAAA,GAAA,CAAA;EAKL,cAAA,CAAA,EAAA,CAAA,OAAA,EACiB,MADjB,CAAA,MAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA;EACiB,UAAA,CAAA,EAAA;IAAM,IAAA,EAAA,MAAA;IAWnB,QAAA,EAAA,MAAgB;IAC9B,KAAA,EAAA,MAAA;EACA,CAAA;EACA,YAAA,CAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,GAAA,IAAA;;AAEA,iBALc,gBAAA,CAKd;EAAA,IAAA;EAAA,KAAA;EAAA,IAAA;EAAA,SAAA;EAAA,aAAA;EAAA,QAAA;EAAA,UAAA;EAAA,aAAA;EAAA,UAAA;EAAA,MAAA;EAAA,MAAA;EAAA,cAAA;EAAA,OAAA;EAAA,cAAA;EAAA,UAAA;EAAA;AAAA,CAAA,EAYC,qBAZD,CAAA,EAYsB,kBAAA,CAAA,GAAA,CAAA,OAZtB"}
1
+ {"version":3,"file":"DataViewRenderer.d.ts","names":[],"sources":["../../../src/components/data-view/DataViewRenderer.tsx"],"sourcesContent":[],"mappings":";;;;;UAqBiB,qBAAA;QACT;UACE;EAFO,IAAA,CAAA,EAGR,MAHQ,CAAA,MAAA,EAAA,OAAqB,CAAA,GAAA,IAAA;EAC9B,SAAA,CAAA,EAAA,MAAA;EACE,aAAA,CAAA,EAAA,CAAA,IAAA,EAGe,MAHf,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,GAG2C,OAAA,CAAM,SAHjD;EACD,QAAA,CAAA,EAAA,CAAA,IAAA,EAGW,MAHX,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,GAAA,IAAA;EAEgB,UAAA,CAAA,EAAA,CAAA,IAAA,EAEH,MAFG,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,GAAA,IAAA;EAA4B,aAAM,CAAA,EAGzC,OAAA,CAAM,SAHmC;EACvC,UAAA,CAAA,EAGL,OAAA,CAAM,SAHD;EACE,MAAA,CAAA,EAGX,OAAA,CAAM,SAHK;EACJ,MAAM,CAAA,EAAA,MAAA;EACT,cAAM,CAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,GAAA,IAAA;EACV,OAAM,CAAA,EAKL,MALK,CAAA,MAAA,EAAA,OAAA,CAAA;EAKL,cAAA,CAAA,EAAA,CAAA,OAAA,EACiB,MADjB,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,GAAA,IAAA;EACiB,UAAA,CAAA,EAAA;IAAM,IAAA,EAAA,MAAA;IAWnB,QAAA,EAAA,MAAgB;IAC9B,KAAA,EAAA,MAAA;EACA,CAAA;EACA,YAAA,CAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,GAAA,IAAA;;AAEA,iBALc,gBAAA,CAKd;EAAA,IAAA;EAAA,KAAA;EAAA,IAAA;EAAA,SAAA;EAAA,aAAA;EAAA,QAAA;EAAA,UAAA;EAAA,aAAA;EAAA,UAAA;EAAA,MAAA;EAAA,MAAA;EAAA,cAAA;EAAA,OAAA;EAAA,cAAA;EAAA,UAAA;EAAA;AAAA,CAAA,EAYC,qBAZD,CAAA,EAYsB,kBAAA,CAAA,GAAA,CAAA,OAZtB"}
@@ -88,9 +88,10 @@ function DataViewRenderer({ spec, items = [], item = null, className, renderActi
88
88
  key,
89
89
  label: `${key}: ${value}`,
90
90
  onRemove: () => {
91
- const newFilters = { ...filters };
92
- delete newFilters[key];
93
- onFilterChange?.(newFilters);
91
+ if (filters) {
92
+ const { [key]: _, ...rest } = filters;
93
+ onFilterChange?.(rest);
94
+ }
94
95
  }
95
96
  })) : [],
96
97
  onClearAll: filters && Object.keys(filters).length > 0 ? () => onFilterChange?.({}) : void 0,
@@ -1 +1 @@
1
- {"version":3,"file":"DataViewRenderer.js","names":["React","listView: DataViewListConfig"],"sources":["../../../src/components/data-view/DataViewRenderer.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport type {\n DataViewGridConfig,\n DataViewListConfig,\n DataViewSpec,\n} from '@lssm/lib.contracts/data-views';\nimport { DataViewList } from './DataViewList';\nimport { DataViewTable } from './DataViewTable';\nimport { DataViewDetail } from './DataViewDetail';\nimport { FiltersToolbar } from '../molecules/FiltersToolbar';\nimport {\n Pagination,\n PaginationContent,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n PaginationEllipsis,\n} from '@lssm/lib.ui-kit-web/ui/pagination';\n\nexport interface DataViewRendererProps {\n spec: DataViewSpec;\n items?: Record<string, unknown>[];\n item?: Record<string, unknown> | null;\n className?: string;\n renderActions?: (item: Record<string, unknown>) => React.ReactNode;\n onSelect?: (item: Record<string, unknown>) => void;\n onRowClick?: (item: Record<string, unknown>) => void;\n headerActions?: React.ReactNode;\n emptyState?: React.ReactNode;\n footer?: React.ReactNode;\n\n // Filters & Search\n search?: string;\n onSearchChange?: (value: string) => void;\n filters?: Record<string, any>;\n onFilterChange?: (filters: Record<string, any>) => void;\n\n // Pagination\n pagination?: {\n page: number;\n pageSize: number;\n total: number;\n };\n onPageChange?: (page: number) => void;\n}\n\nexport function DataViewRenderer({\n spec,\n items = [],\n item = null,\n className,\n renderActions,\n onSelect,\n onRowClick,\n headerActions,\n emptyState,\n footer,\n search,\n onSearchChange,\n filters,\n onFilterChange,\n pagination,\n onPageChange,\n}: DataViewRendererProps) {\n const viewContent = React.useMemo(() => {\n switch (spec.view.kind) {\n case 'list':\n return (\n <DataViewList\n spec={spec}\n items={items}\n className={className}\n renderActions={renderActions}\n onSelect={onSelect}\n emptyState={emptyState}\n />\n );\n case 'table':\n return (\n <DataViewTable\n spec={spec}\n items={items}\n className={className}\n onRowClick={onRowClick}\n emptyState={emptyState}\n headerActions={headerActions}\n footer={footer}\n />\n );\n case 'detail':\n return (\n <DataViewDetail\n spec={spec}\n item={item}\n className={className}\n emptyState={emptyState}\n headerActions={headerActions}\n />\n );\n case 'grid': {\n const grid = spec.view as DataViewGridConfig;\n const listView: DataViewListConfig = {\n kind: 'list',\n layout: 'card',\n fields: grid.fields,\n filters: grid.filters,\n actions: grid.actions,\n primaryField: grid.primaryField,\n secondaryFields: grid.secondaryFields,\n };\n const listSpec = {\n ...spec,\n view: listView,\n } satisfies DataViewSpec;\n return (\n <DataViewList\n spec={listSpec}\n items={items}\n className={className}\n renderActions={renderActions}\n onSelect={onSelect}\n emptyState={emptyState}\n />\n );\n }\n default:\n return <div className={className}>Unsupported data view kind</div>;\n }\n }, [\n spec,\n items,\n item,\n className,\n renderActions,\n onSelect,\n onRowClick,\n headerActions,\n emptyState,\n footer,\n ]);\n\n // Only render toolbar/pagination if it's a collection view\n const isCollection =\n spec.view.kind === 'list' ||\n spec.view.kind === 'table' ||\n spec.view.kind === 'grid';\n\n if (!isCollection) {\n return <>{viewContent}</>;\n }\n\n return (\n <div className=\"space-y-4\">\n {(spec.view.filters?.length || onSearchChange) && (\n <FiltersToolbar\n searchValue={search}\n onSearchChange={onSearchChange}\n searchPlaceholder=\"Search...\"\n activeChips={\n filters\n ? Object.entries(filters).map(([key, value]) => ({\n key,\n label: `${key}: ${value}`,\n onRemove: () => {\n const newFilters = { ...filters };\n delete newFilters[key];\n onFilterChange?.(newFilters);\n },\n }))\n : []\n }\n onClearAll={\n filters && Object.keys(filters).length > 0\n ? () => onFilterChange?.({})\n : undefined\n }\n right={headerActions}\n >\n {/* Render filter dropdowns here if needed */}\n </FiltersToolbar>\n )}\n\n {viewContent}\n\n {pagination && pagination.total > 0 && (\n <div className=\"py-4\">\n <Pagination>\n <PaginationContent>\n <PaginationItem>\n <PaginationPrevious\n href=\"#\"\n onClick={(e) => {\n e.preventDefault();\n if (pagination.page > 1) {\n onPageChange?.(pagination.page - 1);\n }\n }}\n aria-disabled={pagination.page <= 1}\n className={\n pagination.page <= 1 ? 'pointer-events-none opacity-50' : ''\n }\n />\n </PaginationItem>\n\n {/* Simplified pagination: show current page */}\n <PaginationItem>\n <PaginationLink href=\"#\" isActive>\n {pagination.page}\n </PaginationLink>\n </PaginationItem>\n\n <PaginationItem>\n <PaginationNext\n href=\"#\"\n onClick={(e) => {\n e.preventDefault();\n const totalPages = Math.ceil(\n pagination.total / pagination.pageSize\n );\n if (pagination.page < totalPages) {\n onPageChange?.(pagination.page + 1);\n }\n }}\n aria-disabled={\n pagination.page >=\n Math.ceil(pagination.total / pagination.pageSize)\n }\n className={\n pagination.page >=\n Math.ceil(pagination.total / pagination.pageSize)\n ? 'pointer-events-none opacity-50'\n : ''\n }\n />\n </PaginationItem>\n </PaginationContent>\n </Pagination>\n <div className=\"text-muted-foreground mt-2 text-center text-sm\">\n Page {pagination.page} of{' '}\n {Math.ceil(pagination.total / pagination.pageSize)} (\n {pagination.total} items)\n </div>\n </div>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;AAiDA,SAAgB,iBAAiB,EAC/B,MACA,QAAQ,EAAE,EACV,OAAO,MACP,WACA,eACA,UACA,YACA,eACA,YACA,QACA,QACA,gBACA,SACA,gBACA,YACA,gBACwB;CACxB,MAAM,cAAcA,QAAM,cAAc;AACtC,UAAQ,KAAK,KAAK,MAAlB;GACE,KAAK,OACH,QACE,oBAAC;IACO;IACC;IACI;IACI;IACL;IACE;KACZ;GAEN,KAAK,QACH,QACE,oBAAC;IACO;IACC;IACI;IACC;IACA;IACG;IACP;KACR;GAEN,KAAK,SACH,QACE,oBAAC;IACO;IACA;IACK;IACC;IACG;KACf;GAEN,KAAK,QAAQ;IACX,MAAM,OAAO,KAAK;IAClB,MAAMC,WAA+B;KACnC,MAAM;KACN,QAAQ;KACR,QAAQ,KAAK;KACb,SAAS,KAAK;KACd,SAAS,KAAK;KACd,cAAc,KAAK;KACnB,iBAAiB,KAAK;KACvB;AAKD,WACE,oBAAC;KACC,MANa;MACf,GAAG;MACH,MAAM;MACP;KAIU;KACI;KACI;KACL;KACE;MACZ;;GAGN,QACE,QAAO,oBAAC;IAAe;cAAW;KAAgC;;IAErE;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;AAQF,KAAI,EAJF,KAAK,KAAK,SAAS,UACnB,KAAK,KAAK,SAAS,WACnB,KAAK,KAAK,SAAS,QAGnB,QAAO,0CAAG,cAAe;AAG3B,QACE,qBAAC;EAAI,WAAU;;IACX,KAAK,KAAK,SAAS,UAAU,mBAC7B,oBAAC;IACC,aAAa;IACG;IAChB,mBAAkB;IAClB,aACE,UACI,OAAO,QAAQ,QAAQ,CAAC,KAAK,CAAC,KAAK,YAAY;KAC7C;KACA,OAAO,GAAG,IAAI,IAAI;KAClB,gBAAgB;MACd,MAAM,aAAa,EAAE,GAAG,SAAS;AACjC,aAAO,WAAW;AAClB,uBAAiB,WAAW;;KAE/B,EAAE,GACH,EAAE;IAER,YACE,WAAW,OAAO,KAAK,QAAQ,CAAC,SAAS,UAC/B,iBAAiB,EAAE,CAAC,GAC1B;IAEN,OAAO;KAGQ;GAGlB;GAEA,cAAc,WAAW,QAAQ,KAChC,qBAAC;IAAI,WAAU;eACb,oBAAC,wBACC,qBAAC;KACC,oBAAC,4BACC,oBAAC;MACC,MAAK;MACL,UAAU,MAAM;AACd,SAAE,gBAAgB;AAClB,WAAI,WAAW,OAAO,EACpB,gBAAe,WAAW,OAAO,EAAE;;MAGvC,iBAAe,WAAW,QAAQ;MAClC,WACE,WAAW,QAAQ,IAAI,mCAAmC;OAE5D,GACa;KAGjB,oBAAC,4BACC,oBAAC;MAAe,MAAK;MAAI;gBACtB,WAAW;OACG,GACF;KAEjB,oBAAC,4BACC,oBAAC;MACC,MAAK;MACL,UAAU,MAAM;AACd,SAAE,gBAAgB;OAClB,MAAM,aAAa,KAAK,KACtB,WAAW,QAAQ,WAAW,SAC/B;AACD,WAAI,WAAW,OAAO,WACpB,gBAAe,WAAW,OAAO,EAAE;;MAGvC,iBACE,WAAW,QACX,KAAK,KAAK,WAAW,QAAQ,WAAW,SAAS;MAEnD,WACE,WAAW,QACX,KAAK,KAAK,WAAW,QAAQ,WAAW,SAAS,GAC7C,mCACA;OAEN,GACa;QACC,GACT,EACb,qBAAC;KAAI,WAAU;;MAAiD;MACxD,WAAW;MAAK;MAAI;MACzB,KAAK,KAAK,WAAW,QAAQ,WAAW,SAAS;MAAC;MAClD,WAAW;MAAM;;MACd;KACF;;GAEJ"}
1
+ {"version":3,"file":"DataViewRenderer.js","names":["React","listView: DataViewListConfig"],"sources":["../../../src/components/data-view/DataViewRenderer.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport type {\n DataViewGridConfig,\n DataViewListConfig,\n DataViewSpec,\n} from '@lssm/lib.contracts/data-views';\nimport { DataViewList } from './DataViewList';\nimport { DataViewTable } from './DataViewTable';\nimport { DataViewDetail } from './DataViewDetail';\nimport { FiltersToolbar } from '../molecules/FiltersToolbar';\nimport {\n Pagination,\n PaginationContent,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n} from '@lssm/lib.ui-kit-web/ui/pagination';\n\nexport interface DataViewRendererProps {\n spec: DataViewSpec;\n items?: Record<string, unknown>[];\n item?: Record<string, unknown> | null;\n className?: string;\n renderActions?: (item: Record<string, unknown>) => React.ReactNode;\n onSelect?: (item: Record<string, unknown>) => void;\n onRowClick?: (item: Record<string, unknown>) => void;\n headerActions?: React.ReactNode;\n emptyState?: React.ReactNode;\n footer?: React.ReactNode;\n\n // Filters & Search\n search?: string;\n onSearchChange?: (value: string) => void;\n filters?: Record<string, unknown>;\n onFilterChange?: (filters: Record<string, unknown>) => void;\n\n // Pagination\n pagination?: {\n page: number;\n pageSize: number;\n total: number;\n };\n onPageChange?: (page: number) => void;\n}\n\nexport function DataViewRenderer({\n spec,\n items = [],\n item = null,\n className,\n renderActions,\n onSelect,\n onRowClick,\n headerActions,\n emptyState,\n footer,\n search,\n onSearchChange,\n filters,\n onFilterChange,\n pagination,\n onPageChange,\n}: DataViewRendererProps) {\n const viewContent = React.useMemo(() => {\n switch (spec.view.kind) {\n case 'list':\n return (\n <DataViewList\n spec={spec}\n items={items}\n className={className}\n renderActions={renderActions}\n onSelect={onSelect}\n emptyState={emptyState}\n />\n );\n case 'table':\n return (\n <DataViewTable\n spec={spec}\n items={items}\n className={className}\n onRowClick={onRowClick}\n emptyState={emptyState}\n headerActions={headerActions}\n footer={footer}\n />\n );\n case 'detail':\n return (\n <DataViewDetail\n spec={spec}\n item={item}\n className={className}\n emptyState={emptyState}\n headerActions={headerActions}\n />\n );\n case 'grid': {\n const grid = spec.view as DataViewGridConfig;\n const listView: DataViewListConfig = {\n kind: 'list',\n layout: 'card',\n fields: grid.fields,\n filters: grid.filters,\n actions: grid.actions,\n primaryField: grid.primaryField,\n secondaryFields: grid.secondaryFields,\n };\n const listSpec = {\n ...spec,\n view: listView,\n } satisfies DataViewSpec;\n return (\n <DataViewList\n spec={listSpec}\n items={items}\n className={className}\n renderActions={renderActions}\n onSelect={onSelect}\n emptyState={emptyState}\n />\n );\n }\n default:\n return <div className={className}>Unsupported data view kind</div>;\n }\n }, [\n spec,\n items,\n item,\n className,\n renderActions,\n onSelect,\n onRowClick,\n headerActions,\n emptyState,\n footer,\n ]);\n\n // Only render toolbar/pagination if it's a collection view\n const isCollection =\n spec.view.kind === 'list' ||\n spec.view.kind === 'table' ||\n spec.view.kind === 'grid';\n\n if (!isCollection) {\n return <>{viewContent}</>;\n }\n\n return (\n <div className=\"space-y-4\">\n {(spec.view.filters?.length || onSearchChange) && (\n <FiltersToolbar\n searchValue={search}\n onSearchChange={onSearchChange}\n searchPlaceholder=\"Search...\"\n activeChips={\n filters\n ? Object.entries(filters).map(([key, value]) => ({\n key,\n label: `${key}: ${value}`,\n onRemove: () => {\n if (filters) {\n const { [key]: _, ...rest } = filters;\n onFilterChange?.(rest);\n }\n },\n }))\n : []\n }\n onClearAll={\n filters && Object.keys(filters).length > 0\n ? () => onFilterChange?.({})\n : undefined\n }\n right={headerActions}\n >\n {/* Render filter dropdowns here if needed */}\n </FiltersToolbar>\n )}\n\n {viewContent}\n\n {pagination && pagination.total > 0 && (\n <div className=\"py-4\">\n <Pagination>\n <PaginationContent>\n <PaginationItem>\n <PaginationPrevious\n href=\"#\"\n onClick={(e) => {\n e.preventDefault();\n if (pagination.page > 1) {\n onPageChange?.(pagination.page - 1);\n }\n }}\n aria-disabled={pagination.page <= 1}\n className={\n pagination.page <= 1 ? 'pointer-events-none opacity-50' : ''\n }\n />\n </PaginationItem>\n\n {/* Simplified pagination: show current page */}\n <PaginationItem>\n <PaginationLink href=\"#\" isActive>\n {pagination.page}\n </PaginationLink>\n </PaginationItem>\n\n <PaginationItem>\n <PaginationNext\n href=\"#\"\n onClick={(e) => {\n e.preventDefault();\n const totalPages = Math.ceil(\n pagination.total / pagination.pageSize\n );\n if (pagination.page < totalPages) {\n onPageChange?.(pagination.page + 1);\n }\n }}\n aria-disabled={\n pagination.page >=\n Math.ceil(pagination.total / pagination.pageSize)\n }\n className={\n pagination.page >=\n Math.ceil(pagination.total / pagination.pageSize)\n ? 'pointer-events-none opacity-50'\n : ''\n }\n />\n </PaginationItem>\n </PaginationContent>\n </Pagination>\n <div className=\"text-muted-foreground mt-2 text-center text-sm\">\n Page {pagination.page} of{' '}\n {Math.ceil(pagination.total / pagination.pageSize)} (\n {pagination.total} items)\n </div>\n </div>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;AAgDA,SAAgB,iBAAiB,EAC/B,MACA,QAAQ,EAAE,EACV,OAAO,MACP,WACA,eACA,UACA,YACA,eACA,YACA,QACA,QACA,gBACA,SACA,gBACA,YACA,gBACwB;CACxB,MAAM,cAAcA,QAAM,cAAc;AACtC,UAAQ,KAAK,KAAK,MAAlB;GACE,KAAK,OACH,QACE,oBAAC;IACO;IACC;IACI;IACI;IACL;IACE;KACZ;GAEN,KAAK,QACH,QACE,oBAAC;IACO;IACC;IACI;IACC;IACA;IACG;IACP;KACR;GAEN,KAAK,SACH,QACE,oBAAC;IACO;IACA;IACK;IACC;IACG;KACf;GAEN,KAAK,QAAQ;IACX,MAAM,OAAO,KAAK;IAClB,MAAMC,WAA+B;KACnC,MAAM;KACN,QAAQ;KACR,QAAQ,KAAK;KACb,SAAS,KAAK;KACd,SAAS,KAAK;KACd,cAAc,KAAK;KACnB,iBAAiB,KAAK;KACvB;AAKD,WACE,oBAAC;KACC,MANa;MACf,GAAG;MACH,MAAM;MACP;KAIU;KACI;KACI;KACL;KACE;MACZ;;GAGN,QACE,QAAO,oBAAC;IAAe;cAAW;KAAgC;;IAErE;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;AAQF,KAAI,EAJF,KAAK,KAAK,SAAS,UACnB,KAAK,KAAK,SAAS,WACnB,KAAK,KAAK,SAAS,QAGnB,QAAO,0CAAG,cAAe;AAG3B,QACE,qBAAC;EAAI,WAAU;;IACX,KAAK,KAAK,SAAS,UAAU,mBAC7B,oBAAC;IACC,aAAa;IACG;IAChB,mBAAkB;IAClB,aACE,UACI,OAAO,QAAQ,QAAQ,CAAC,KAAK,CAAC,KAAK,YAAY;KAC7C;KACA,OAAO,GAAG,IAAI,IAAI;KAClB,gBAAgB;AACd,UAAI,SAAS;OACX,MAAM,GAAG,MAAM,GAAG,GAAG,SAAS;AAC9B,wBAAiB,KAAK;;;KAG3B,EAAE,GACH,EAAE;IAER,YACE,WAAW,OAAO,KAAK,QAAQ,CAAC,SAAS,UAC/B,iBAAiB,EAAE,CAAC,GAC1B;IAEN,OAAO;KAGQ;GAGlB;GAEA,cAAc,WAAW,QAAQ,KAChC,qBAAC;IAAI,WAAU;eACb,oBAAC,wBACC,qBAAC;KACC,oBAAC,4BACC,oBAAC;MACC,MAAK;MACL,UAAU,MAAM;AACd,SAAE,gBAAgB;AAClB,WAAI,WAAW,OAAO,EACpB,gBAAe,WAAW,OAAO,EAAE;;MAGvC,iBAAe,WAAW,QAAQ;MAClC,WACE,WAAW,QAAQ,IAAI,mCAAmC;OAE5D,GACa;KAGjB,oBAAC,4BACC,oBAAC;MAAe,MAAK;MAAI;gBACtB,WAAW;OACG,GACF;KAEjB,oBAAC,4BACC,oBAAC;MACC,MAAK;MACL,UAAU,MAAM;AACd,SAAE,gBAAgB;OAClB,MAAM,aAAa,KAAK,KACtB,WAAW,QAAQ,WAAW,SAC/B;AACD,WAAI,WAAW,OAAO,WACpB,gBAAe,WAAW,OAAO,EAAE;;MAGvC,iBACE,WAAW,QACX,KAAK,KAAK,WAAW,QAAQ,WAAW,SAAS;MAEnD,WACE,WAAW,QACX,KAAK,KAAK,WAAW,QAAQ,WAAW,SAAS,GAC7C,mCACA;OAEN,GACa;QACC,GACT,EACb,qBAAC;KAAI,WAAU;;MAAiD;MACxD,WAAW;MAAK;MAAI;MACzB,KAAK,KAAK,WAAW,QAAQ,WAAW,SAAS;MAAC;MAClD,WAAW;MAAM;;MACd;KACF;;GAEJ"}
@@ -5,13 +5,13 @@ import * as z from "zod";
5
5
  import { UseFormReturn } from "@lssm/lib.ui-kit-web/ui/form";
6
6
 
7
7
  //#region src/components/forms/ZodForm.d.ts
8
- interface ZodFormProps<TSchema extends z.ZodType<any, FieldValues>, TFieldValues extends FieldValues = z.input<TSchema>, TOutput = z.output<TSchema>> {
8
+ interface ZodFormProps<TSchema extends z.ZodType<any, any, any>, TFieldValues extends FieldValues = z.input<TSchema>, TOutput = z.output<TSchema>> {
9
9
  schema: TSchema;
10
10
  defaultValues?: Partial<TFieldValues> | Promise<Partial<TFieldValues>>;
11
11
  onSubmit: (data: TOutput) => Promise<void> | void;
12
12
  children: (f: UseFormReturn<TFieldValues, any, TOutput>) => React$1.ReactNode;
13
13
  }
14
- declare function ZodForm<TSchema extends z.ZodType<any, FieldValues>, TFieldValues extends FieldValues = z.input<TSchema>, TOutput = z.output<TSchema>>({
14
+ declare function ZodForm<TSchema extends z.ZodType<any, any, any>, TFieldValues extends FieldValues = z.input<TSchema>, TOutput = z.output<TSchema>>({
15
15
  schema,
16
16
  defaultValues,
17
17
  onSubmit,
@@ -1 +1 @@
1
- {"version":3,"file":"ZodForm.d.ts","names":[],"sources":["../../../src/components/forms/ZodForm.tsx"],"sourcesContent":[],"mappings":";;;;;;;UAciB,6BACC,CAAA,CAAE,aAAa,mCACV,cAAc,CAAA,CAAE,MAAM,oBACjC,CAAA,CAAE,OAAO;UAEX;kBACQ,QAAQ,gBAAgB,QAAQ,QAAQ;EANzC,QAAA,EAAA,CAAA,IAAY,EAOV,OAPU,EAAA,GAOE,OAPF,CAAA,IAAA,CAAA,GAAA,IAAA;EACI,QAAA,EAAA,CAAA,CAAA,EAOjB,aAPiB,CAOH,YAPG,EAAA,GAAA,EAOgB,OAPhB,CAAA,EAAA,GAO6B,OAAA,CAAM,SAPnC;;AACV,iBASP,OATO,CAAA,gBAUL,CAAA,CAAE,OAVG,CAAA,GAAA,EAUU,WAVV,CAAA,EAAA,qBAWA,WAXA,GAWc,CAAA,CAAE,KAXhB,CAWsB,OAXtB,CAAA,EAAA,UAYX,CAAA,CAAE,MAZS,CAYF,OAZE,CAAA,CAAA,CAAA;EAAA,MAAA;EAAA,aAAA;EAAA,QAAA;EAAA;AAAA,CAAA,EAkBpB,YAlBoB,CAkBP,OAlBO,EAkBE,YAlBF,EAkBgB,OAlBhB,CAAA,CAAA,EAkBwB,mBAAA,CAAA,GAAA,CAAA,OAlBxB"}
1
+ {"version":3,"file":"ZodForm.d.ts","names":[],"sources":["../../../src/components/forms/ZodForm.tsx"],"sourcesContent":[],"mappings":";;;;;;;UAciB,6BAEC,CAAA,CAAE,6CACG,cAAc,CAAA,CAAE,MAAM,oBACjC,CAAA,CAAE,OAAO;UAEX;kBACQ,QAAQ,gBAAgB,QAAQ,QAAQ;EAPzC,QAAA,EAAA,CAAA,IAAY,EAQV,OARU,EAAA,GAQE,OARF,CAAA,IAAA,CAAA,GAAA,IAAA;EAET,QAAA,EAAA,CAAA,CAAA,EAQJ,aARI,CAQU,YARV,EAAA,GAAA,EAQ6B,OAR7B,CAAA,EAAA,GAQ0C,OAAA,CAAM,SARhD;;AACyB,iBAU7B,OAV6B,CAAA,gBAY3B,CAAA,CAAE,OAZyB,CAAA,GAAA,EAAA,GAAA,EAAA,GAAA,CAAA,EAAA,qBAatB,WAbsB,GAaR,CAAA,CAAE,KAbM,CAaA,OAbA,CAAA,EAAA,UAcjC,CAAA,CAAE,MAd+B,CAcxB,OAdwB,CAAA,CAAA,CAAA;EAAA,MAAA;EAAA,aAAA;EAAA,QAAA;EAAA;AAAA,CAAA,EAoB1C,YApB0C,CAoB7B,OApB6B,EAoBpB,YApBoB,EAoBN,OApBM,CAAA,CAAA,EAoBE,mBAAA,CAAA,GAAA,CAAA,OApBF"}
@@ -1 +1 @@
1
- {"version":3,"file":"ZodForm.js","names":[],"sources":["../../../src/components/forms/ZodForm.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport {\n Form,\n useForm,\n type UseFormReturn,\n zodResolver,\n} from '@lssm/lib.ui-kit-web/ui/form';\nimport type { FieldValues } from 'react-hook-form';\nimport * as z from 'zod';\n\n// import { useForm, type UseFormReturn } from 'react-hook-form';\n\nexport interface ZodFormProps<\n TSchema extends z.ZodType<any, FieldValues>,\n TFieldValues extends FieldValues = z.input<TSchema>,\n TOutput = z.output<TSchema>,\n> {\n schema: TSchema;\n defaultValues?: Partial<TFieldValues> | Promise<Partial<TFieldValues>>;\n onSubmit: (data: TOutput) => Promise<void> | void;\n children: (f: UseFormReturn<TFieldValues, any, TOutput>) => React.ReactNode;\n}\n\nexport function ZodForm<\n TSchema extends z.ZodType<any, FieldValues>,\n TFieldValues extends FieldValues = z.input<TSchema>,\n TOutput = z.output<TSchema>,\n>({\n schema,\n defaultValues,\n onSubmit,\n children,\n}: ZodFormProps<TSchema, TFieldValues, TOutput>) {\n const form = useForm<TFieldValues, any, TOutput>({\n resolver: zodResolver<TFieldValues, any, TOutput>(schema as any),\n defaultValues: defaultValues as any,\n });\n return (\n <Form {...form}>\n <form onSubmit={form.handleSubmit(onSubmit)}>{children(form)}</form>\n </Form>\n );\n}\n"],"mappings":";;;;;;;;AAyBA,SAAgB,QAId,EACA,QACA,eACA,UACA,YAC+C;CAC/C,MAAM,OAAO,QAAoC;EAC/C,UAAU,YAAwC,OAAc;EACjD;EAChB,CAAC;AACF,QACE,oBAAC;EAAK,GAAI;YACR,oBAAC;GAAK,UAAU,KAAK,aAAa,SAAS;aAAG,SAAS,KAAK;IAAQ;GAC/D"}
1
+ {"version":3,"file":"ZodForm.js","names":[],"sources":["../../../src/components/forms/ZodForm.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport {\n Form,\n useForm,\n type UseFormReturn,\n zodResolver,\n} from '@lssm/lib.ui-kit-web/ui/form';\nimport type { FieldValues } from 'react-hook-form';\nimport * as z from 'zod';\n\n// import { useForm, type UseFormReturn } from 'react-hook-form';\n\nexport interface ZodFormProps<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n TSchema extends z.ZodType<any, any, any>,\n TFieldValues extends FieldValues = z.input<TSchema>,\n TOutput = z.output<TSchema>,\n> {\n schema: TSchema;\n defaultValues?: Partial<TFieldValues> | Promise<Partial<TFieldValues>>;\n onSubmit: (data: TOutput) => Promise<void> | void;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n children: (f: UseFormReturn<TFieldValues, any, TOutput>) => React.ReactNode;\n}\n\nexport function ZodForm<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n TSchema extends z.ZodType<any, any, any>,\n TFieldValues extends FieldValues = z.input<TSchema>,\n TOutput = z.output<TSchema>,\n>({\n schema,\n defaultValues,\n onSubmit,\n children,\n}: ZodFormProps<TSchema, TFieldValues, TOutput>) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const form = useForm<TFieldValues, any, TOutput>({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n resolver: zodResolver(schema as any),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n defaultValues: defaultValues as any,\n });\n return (\n <Form {...form}>\n <form onSubmit={form.handleSubmit(onSubmit)}>{children(form)}</form>\n </Form>\n );\n}\n"],"mappings":";;;;;;;;AA2BA,SAAgB,QAKd,EACA,QACA,eACA,UACA,YAC+C;CAE/C,MAAM,OAAO,QAAoC;EAE/C,UAAU,YAAY,OAAc;EAErB;EAChB,CAAC;AACF,QACE,oBAAC;EAAK,GAAI;YACR,oBAAC;GAAK,UAAU,KAAK,aAAa,SAAS;aAAG,SAAS,KAAK;IAAQ;GAC/D"}
@@ -1 +1 @@
1
- {"version":3,"file":"LegalHeading.js","names":[],"sources":["../../../../src/components/legal/atoms/LegalHeading.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@lssm/lib.ui-kit-web/ui/utils';\n\nconst headingVariants = cva('text-foreground tracking-tight', {\n variants: {\n level: {\n h1: 'text-3xl font-semibold md:text-4xl',\n h2: 'text-2xl font-semibold md:text-3xl',\n h3: 'text-xl font-semibold md:text-2xl',\n h4: 'text-lg font-semibold md:text-xl',\n },\n tone: {\n default: '',\n muted: 'text-muted-foreground',\n accent: 'text-primary',\n },\n spacing: {\n none: '',\n sm: 'mt-4',\n md: 'mt-6',\n lg: 'mt-8',\n },\n },\n defaultVariants: {\n level: 'h2',\n tone: 'default',\n spacing: 'md',\n },\n});\n\nexport type LegalHeadingProps = React.HTMLAttributes<HTMLHeadingElement> &\n VariantProps<typeof headingVariants> & {\n as?: 'h1' | 'h2' | 'h3' | 'h4';\n };\n\nexport function LegalHeading({\n as,\n level,\n tone,\n spacing,\n className,\n ...props\n}: LegalHeadingProps) {\n const Comp = (as ?? level ?? 'h2') as any;\n return (\n <Comp\n className={cn(headingVariants({ level, tone, spacing }), className)}\n {...props}\n />\n );\n}\n\nexport { headingVariants };\n"],"mappings":";;;;;;AAIA,MAAM,kBAAkB,IAAI,kCAAkC;CAC5D,UAAU;EACR,OAAO;GACL,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACL;EACD,MAAM;GACJ,SAAS;GACT,OAAO;GACP,QAAQ;GACT;EACD,SAAS;GACP,MAAM;GACN,IAAI;GACJ,IAAI;GACJ,IAAI;GACL;EACF;CACD,iBAAiB;EACf,OAAO;EACP,MAAM;EACN,SAAS;EACV;CACF,CAAC;AAOF,SAAgB,aAAa,EAC3B,IACA,OACA,MACA,SACA,WACA,GAAG,SACiB;AAEpB,QACE,oBAFY,MAAM,SAAS;EAGzB,WAAW,GAAG,gBAAgB;GAAE;GAAO;GAAM;GAAS,CAAC,EAAE,UAAU;EACnE,GAAI;GACJ"}
1
+ {"version":3,"file":"LegalHeading.js","names":[],"sources":["../../../../src/components/legal/atoms/LegalHeading.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@lssm/lib.ui-kit-web/ui/utils';\n\nconst headingVariants = cva('text-foreground tracking-tight', {\n variants: {\n level: {\n h1: 'text-3xl font-semibold md:text-4xl',\n h2: 'text-2xl font-semibold md:text-3xl',\n h3: 'text-xl font-semibold md:text-2xl',\n h4: 'text-lg font-semibold md:text-xl',\n },\n tone: {\n default: '',\n muted: 'text-muted-foreground',\n accent: 'text-primary',\n },\n spacing: {\n none: '',\n sm: 'mt-4',\n md: 'mt-6',\n lg: 'mt-8',\n },\n },\n defaultVariants: {\n level: 'h2',\n tone: 'default',\n spacing: 'md',\n },\n});\n\nexport type LegalHeadingProps = React.HTMLAttributes<HTMLHeadingElement> &\n VariantProps<typeof headingVariants> & {\n as?: 'h1' | 'h2' | 'h3' | 'h4';\n };\n\nexport function LegalHeading({\n as,\n level,\n tone,\n spacing,\n className,\n ...props\n}: LegalHeadingProps) {\n const Comp = (as ?? level ?? 'h2') as 'h1' | 'h2' | 'h3' | 'h4';\n return (\n <Comp\n className={cn(headingVariants({ level, tone, spacing }), className)}\n {...props}\n />\n );\n}\n\nexport { headingVariants };\n"],"mappings":";;;;;;AAIA,MAAM,kBAAkB,IAAI,kCAAkC;CAC5D,UAAU;EACR,OAAO;GACL,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACL;EACD,MAAM;GACJ,SAAS;GACT,OAAO;GACP,QAAQ;GACT;EACD,SAAS;GACP,MAAM;GACN,IAAI;GACJ,IAAI;GACJ,IAAI;GACL;EACF;CACD,iBAAiB;EACf,OAAO;EACP,MAAM;EACN,SAAS;EACV;CACF,CAAC;AAOF,SAAgB,aAAa,EAC3B,IACA,OACA,MACA,SACA,WACA,GAAG,SACiB;AAEpB,QACE,oBAFY,MAAM,SAAS;EAGzB,WAAW,GAAG,gBAAgB;GAAE;GAAO;GAAM;GAAS,CAAC,EAAE,UAAU;EACnE,GAAI;GACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"LegalList.js","names":[],"sources":["../../../../src/components/legal/atoms/LegalList.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@lssm/lib.ui-kit-web/ui/utils';\n\nconst listVariants = cva('', {\n variants: {\n type: {\n unordered: 'list-disc pl-6',\n ordered: 'list-decimal pl-6',\n none: 'pl-0',\n },\n spacing: {\n sm: 'space-y-1',\n md: 'space-y-2',\n lg: 'space-y-3',\n },\n },\n defaultVariants: {\n type: 'unordered',\n spacing: 'md',\n },\n});\n\nexport type LegalListProps = React.HTMLAttributes<\n HTMLUListElement | HTMLOListElement\n> &\n VariantProps<typeof listVariants>;\n\nexport function LegalList({\n type,\n spacing,\n className,\n children,\n ...props\n}: LegalListProps) {\n const Comp: any = type === 'ordered' ? 'ol' : 'ul';\n return (\n <Comp className={cn(listVariants({ type, spacing }), className)} {...props}>\n {children}\n </Comp>\n );\n}\n\nexport { listVariants };\n"],"mappings":";;;;;;AAIA,MAAM,eAAe,IAAI,IAAI;CAC3B,UAAU;EACR,MAAM;GACJ,WAAW;GACX,SAAS;GACT,MAAM;GACP;EACD,SAAS;GACP,IAAI;GACJ,IAAI;GACJ,IAAI;GACL;EACF;CACD,iBAAiB;EACf,MAAM;EACN,SAAS;EACV;CACF,CAAC;AAOF,SAAgB,UAAU,EACxB,MACA,SACA,WACA,UACA,GAAG,SACc;AAEjB,QACE,oBAFgB,SAAS,YAAY,OAAO;EAEtC,WAAW,GAAG,aAAa;GAAE;GAAM;GAAS,CAAC,EAAE,UAAU;EAAE,GAAI;EAClE;GACI"}
1
+ {"version":3,"file":"LegalList.js","names":[],"sources":["../../../../src/components/legal/atoms/LegalList.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@lssm/lib.ui-kit-web/ui/utils';\n\nconst listVariants = cva('', {\n variants: {\n type: {\n unordered: 'list-disc pl-6',\n ordered: 'list-decimal pl-6',\n none: 'pl-0',\n },\n spacing: {\n sm: 'space-y-1',\n md: 'space-y-2',\n lg: 'space-y-3',\n },\n },\n defaultVariants: {\n type: 'unordered',\n spacing: 'md',\n },\n});\n\nexport type LegalListProps = React.HTMLAttributes<\n HTMLUListElement | HTMLOListElement\n> &\n VariantProps<typeof listVariants>;\n\nexport function LegalList({\n type,\n spacing,\n className,\n children,\n ...props\n}: LegalListProps) {\n const Comp = (type === 'ordered' ? 'ol' : 'ul') as React.ElementType;\n return (\n <Comp className={cn(listVariants({ type, spacing }), className)} {...props}>\n {children}\n </Comp>\n );\n}\n\nexport { listVariants };\n"],"mappings":";;;;;;AAIA,MAAM,eAAe,IAAI,IAAI;CAC3B,UAAU;EACR,MAAM;GACJ,WAAW;GACX,SAAS;GACT,MAAM;GACP;EACD,SAAS;GACP,IAAI;GACJ,IAAI;GACJ,IAAI;GACL;EACF;CACD,iBAAiB;EACf,MAAM;EACN,SAAS;EACV;CACF,CAAC;AAOF,SAAgB,UAAU,EACxB,MACA,SACA,WACA,UACA,GAAG,SACc;AAEjB,QACE,oBAFY,SAAS,YAAY,OAAO;EAElC,WAAW,GAAG,aAAa;GAAE;GAAM;GAAS,CAAC,EAAE,UAAU;EAAE,GAAI;EAClE;GACI"}
@@ -1 +1 @@
1
- {"version":3,"file":"LegalText.js","names":[],"sources":["../../../../src/components/legal/atoms/LegalText.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@lssm/lib.ui-kit-web/ui/utils';\n\nconst textVariants = cva('text-base leading-relaxed', {\n variants: {\n tone: {\n default: 'text-foreground',\n muted: 'text-muted-foreground',\n danger: 'text-destructive',\n },\n size: {\n base: 'text-base',\n sm: 'text-sm',\n lg: 'text-lg',\n },\n spacing: {\n none: '',\n sm: 'mt-2',\n md: 'mt-3',\n lg: 'mt-4',\n },\n },\n defaultVariants: {\n tone: 'default',\n size: 'base',\n spacing: 'sm',\n },\n});\n\nexport type LegalTextProps = React.HTMLAttributes<HTMLParagraphElement> &\n VariantProps<typeof textVariants> & { as?: 'p' | 'div' | 'span' };\n\nexport function LegalText({\n as = 'p',\n tone,\n size,\n spacing,\n className,\n ...props\n}: LegalTextProps) {\n const Comp: any = as;\n return (\n <Comp\n className={cn(textVariants({ tone, size, spacing }), className)}\n {...props}\n />\n );\n}\n\nexport { textVariants };\n"],"mappings":";;;;;;AAIA,MAAM,eAAe,IAAI,6BAA6B;CACpD,UAAU;EACR,MAAM;GACJ,SAAS;GACT,OAAO;GACP,QAAQ;GACT;EACD,MAAM;GACJ,MAAM;GACN,IAAI;GACJ,IAAI;GACL;EACD,SAAS;GACP,MAAM;GACN,IAAI;GACJ,IAAI;GACJ,IAAI;GACL;EACF;CACD,iBAAiB;EACf,MAAM;EACN,MAAM;EACN,SAAS;EACV;CACF,CAAC;AAKF,SAAgB,UAAU,EACxB,KAAK,KACL,MACA,MACA,SACA,WACA,GAAG,SACc;AAEjB,QACE,oBAFgB;EAGd,WAAW,GAAG,aAAa;GAAE;GAAM;GAAM;GAAS,CAAC,EAAE,UAAU;EAC/D,GAAI;GACJ"}
1
+ {"version":3,"file":"LegalText.js","names":[],"sources":["../../../../src/components/legal/atoms/LegalText.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@lssm/lib.ui-kit-web/ui/utils';\n\nconst textVariants = cva('text-base leading-relaxed', {\n variants: {\n tone: {\n default: 'text-foreground',\n muted: 'text-muted-foreground',\n danger: 'text-destructive',\n },\n size: {\n base: 'text-base',\n sm: 'text-sm',\n lg: 'text-lg',\n },\n spacing: {\n none: '',\n sm: 'mt-2',\n md: 'mt-3',\n lg: 'mt-4',\n },\n },\n defaultVariants: {\n tone: 'default',\n size: 'base',\n spacing: 'sm',\n },\n});\n\nexport type LegalTextProps = React.HTMLAttributes<HTMLParagraphElement> &\n VariantProps<typeof textVariants> & { as?: 'p' | 'div' | 'span' };\n\nexport function LegalText({\n as = 'p',\n tone,\n size,\n spacing,\n className,\n ...props\n}: LegalTextProps) {\n const Comp = as as React.ElementType;\n return (\n <Comp\n className={cn(textVariants({ tone, size, spacing }), className)}\n {...props}\n />\n );\n}\n\nexport { textVariants };\n"],"mappings":";;;;;;AAIA,MAAM,eAAe,IAAI,6BAA6B;CACpD,UAAU;EACR,MAAM;GACJ,SAAS;GACT,OAAO;GACP,QAAQ;GACT;EACD,MAAM;GACJ,MAAM;GACN,IAAI;GACJ,IAAI;GACL;EACD,SAAS;GACP,MAAM;GACN,IAAI;GACJ,IAAI;GACJ,IAAI;GACL;EACF;CACD,iBAAiB;EACf,MAAM;EACN,MAAM;EACN,SAAS;EACV;CACF,CAAC;AAKF,SAAgB,UAAU,EACxB,KAAK,KACL,MACA,MACA,SACA,WACA,GAAG,SACc;AAEjB,QACE,oBAFW;EAGT,WAAW,GAAG,aAAa;GAAE;GAAM;GAAM;GAAS,CAAC,EAAE,UAAU;EAC/D,GAAI;GACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"Consent.js","names":[],"sources":["../../../../src/components/legal/molecules/Consent.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Checkbox } from '@lssm/lib.ui-kit-web/ui/checkbox';\nimport { cn } from '@lssm/lib.ui-kit-web/ui/utils';\n\nexport function ConsentItem({\n id,\n label,\n description,\n checked,\n onChange,\n className,\n}: {\n id: string;\n label: React.ReactNode;\n description?: React.ReactNode;\n checked: boolean;\n onChange: (checked: boolean) => void;\n className?: string;\n}) {\n return (\n <div className={cn('flex items-start gap-3', className)}>\n <Checkbox\n id={id}\n checked={checked}\n onCheckedChange={(v: any) => onChange(Boolean(v))}\n />\n <div>\n <label htmlFor={id} className=\"text-base font-medium\">\n {label}\n </label>\n {description && (\n <div className=\"text-muted-foreground text-base\">{description}</div>\n )}\n </div>\n </div>\n );\n}\n\nexport function ConsentList({\n items,\n onChange,\n className,\n}: {\n items: {\n id: string;\n label: React.ReactNode;\n description?: React.ReactNode;\n checked: boolean;\n }[];\n onChange: (id: string, checked: boolean) => void;\n className?: string;\n}) {\n return (\n <div className={cn('space-y-3', className)}>\n {items.map((it) => (\n <ConsentItem key={it.id} {...it} onChange={(c) => onChange(it.id, c)} />\n ))}\n </div>\n );\n}\n"],"mappings":";;;;;;AAIA,SAAgB,YAAY,EAC1B,IACA,OACA,aACA,SACA,UACA,aAQC;AACD,QACE,qBAAC;EAAI,WAAW,GAAG,0BAA0B,UAAU;aACrD,oBAAC;GACK;GACK;GACT,kBAAkB,MAAW,SAAS,QAAQ,EAAE,CAAC;IACjD,EACF,qBAAC,oBACC,oBAAC;GAAM,SAAS;GAAI,WAAU;aAC3B;IACK,EACP,eACC,oBAAC;GAAI,WAAU;aAAmC;IAAkB,IAElE;GACF;;AAIV,SAAgB,YAAY,EAC1B,OACA,UACA,aAUC;AACD,QACE,oBAAC;EAAI,WAAW,GAAG,aAAa,UAAU;YACvC,MAAM,KAAK,OACV,oBAAC;GAAwB,GAAI;GAAI,WAAW,MAAM,SAAS,GAAG,IAAI,EAAE;KAAlD,GAAG,GAAmD,CACxE;GACE"}
1
+ {"version":3,"file":"Consent.js","names":[],"sources":["../../../../src/components/legal/molecules/Consent.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Checkbox } from '@lssm/lib.ui-kit-web/ui/checkbox';\nimport { cn } from '@lssm/lib.ui-kit-web/ui/utils';\n\nexport function ConsentItem({\n id,\n label,\n description,\n checked,\n onChange,\n className,\n}: {\n id: string;\n label: React.ReactNode;\n description?: React.ReactNode;\n checked: boolean;\n onChange: (checked: boolean) => void;\n className?: string;\n}) {\n return (\n <div className={cn('flex items-start gap-3', className)}>\n <Checkbox\n id={id}\n checked={checked}\n onCheckedChange={(v: boolean | 'indeterminate') => onChange(Boolean(v))}\n />\n <div>\n <label htmlFor={id} className=\"text-base font-medium\">\n {label}\n </label>\n {description && (\n <div className=\"text-muted-foreground text-base\">{description}</div>\n )}\n </div>\n </div>\n );\n}\n\nexport function ConsentList({\n items,\n onChange,\n className,\n}: {\n items: {\n id: string;\n label: React.ReactNode;\n description?: React.ReactNode;\n checked: boolean;\n }[];\n onChange: (id: string, checked: boolean) => void;\n className?: string;\n}) {\n return (\n <div className={cn('space-y-3', className)}>\n {items.map((it) => (\n <ConsentItem key={it.id} {...it} onChange={(c) => onChange(it.id, c)} />\n ))}\n </div>\n );\n}\n"],"mappings":";;;;;;AAIA,SAAgB,YAAY,EAC1B,IACA,OACA,aACA,SACA,UACA,aAQC;AACD,QACE,qBAAC;EAAI,WAAW,GAAG,0BAA0B,UAAU;aACrD,oBAAC;GACK;GACK;GACT,kBAAkB,MAAiC,SAAS,QAAQ,EAAE,CAAC;IACvE,EACF,qBAAC,oBACC,oBAAC;GAAM,SAAS;GAAI,WAAU;aAC3B;IACK,EACP,eACC,oBAAC;GAAI,WAAU;aAAmC;IAAkB,IAElE;GACF;;AAIV,SAAgB,YAAY,EAC1B,OACA,UACA,aAUC;AACD,QACE,oBAAC;EAAI,WAAW,GAAG,aAAa,UAAU;YACvC,MAAM,KAAK,OACV,oBAAC;GAAwB,GAAI;GAAI,WAAW,MAAM,SAAS,GAAG,IAAI,EAAE;KAAlD,GAAG,GAAmD,CACxE;GACE"}
@@ -30,7 +30,7 @@ function LegalTOC({ items, activeHref, onNavigate, variant, size, className, ...
30
30
  ...props,
31
31
  children: variant === "inline" ? items.map((it) => /* @__PURE__ */ jsx("a", {
32
32
  href: it.href,
33
- onClick: (e) => {
33
+ onClick: (_e) => {
34
34
  onNavigate?.(it.href);
35
35
  },
36
36
  className: cn("hover:bg-accent hover:text-accent-foreground rounded-xs px-2 py-1", activeHref === it.href && "bg-accent text-accent-foreground"),
@@ -1 +1 @@
1
- {"version":3,"file":"LegalTOC.js","names":[],"sources":["../../../../src/components/legal/molecules/LegalTOC.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@lssm/lib.ui-kit-web/ui/utils';\n\nexport interface TocItem {\n href: string;\n label: React.ReactNode;\n}\n\nconst tocVariants = cva('text-base', {\n variants: {\n variant: {\n sidebar: 'space-y-2',\n inline: 'flex flex-wrap gap-3',\n },\n size: {\n sm: '',\n md: 'text-base',\n },\n },\n defaultVariants: { variant: 'sidebar', size: 'md' },\n});\n\nexport type LegalTOCProps = {\n items: TocItem[];\n activeHref?: string;\n onNavigate?: (href: string) => void;\n} & VariantProps<typeof tocVariants> &\n React.HTMLAttributes<HTMLDivElement>;\n\nexport function LegalTOC({\n items,\n activeHref,\n onNavigate,\n variant,\n size,\n className,\n ...props\n}: LegalTOCProps) {\n return (\n <nav\n aria-label=\"Table of contents\"\n className={cn(tocVariants({ variant, size }), className)}\n {...props}\n >\n {variant === 'inline' ? (\n items.map((it) => (\n <a\n key={it.href}\n href={it.href}\n onClick={(e) => {\n onNavigate?.(it.href);\n // allow default anchor behaviour too\n }}\n className={cn(\n 'hover:bg-accent hover:text-accent-foreground rounded-xs px-2 py-1',\n activeHref === it.href && 'bg-accent text-accent-foreground'\n )}\n >\n {it.label}\n </a>\n ))\n ) : (\n <ul className=\"list-none space-y-2 pl-0\">\n {items.map((it) => (\n <li key={it.href}>\n <a\n href={it.href}\n onClick={() => onNavigate?.(it.href)}\n className={cn(\n 'hover:bg-accent hover:text-accent-foreground block rounded-xs px-2 py-1',\n activeHref === it.href && 'bg-accent text-accent-foreground'\n )}\n >\n {it.label}\n </a>\n </li>\n ))}\n </ul>\n )}\n </nav>\n );\n}\n\nexport { tocVariants };\n"],"mappings":";;;;;;AASA,MAAM,cAAc,IAAI,aAAa;CACnC,UAAU;EACR,SAAS;GACP,SAAS;GACT,QAAQ;GACT;EACD,MAAM;GACJ,IAAI;GACJ,IAAI;GACL;EACF;CACD,iBAAiB;EAAE,SAAS;EAAW,MAAM;EAAM;CACpD,CAAC;AASF,SAAgB,SAAS,EACvB,OACA,YACA,YACA,SACA,MACA,WACA,GAAG,SACa;AAChB,QACE,oBAAC;EACC,cAAW;EACX,WAAW,GAAG,YAAY;GAAE;GAAS;GAAM,CAAC,EAAE,UAAU;EACxD,GAAI;YAEH,YAAY,WACX,MAAM,KAAK,OACT,oBAAC;GAEC,MAAM,GAAG;GACT,UAAU,MAAM;AACd,iBAAa,GAAG,KAAK;;GAGvB,WAAW,GACT,qEACA,eAAe,GAAG,QAAQ,mCAC3B;aAEA,GAAG;KAXC,GAAG,KAYN,CACJ,GAEF,oBAAC;GAAG,WAAU;aACX,MAAM,KAAK,OACV,oBAAC,kBACC,oBAAC;IACC,MAAM,GAAG;IACT,eAAe,aAAa,GAAG,KAAK;IACpC,WAAW,GACT,2EACA,eAAe,GAAG,QAAQ,mCAC3B;cAEA,GAAG;KACF,IAVG,GAAG,KAWP,CACL;IACC;GAEH"}
1
+ {"version":3,"file":"LegalTOC.js","names":[],"sources":["../../../../src/components/legal/molecules/LegalTOC.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@lssm/lib.ui-kit-web/ui/utils';\n\nexport interface TocItem {\n href: string;\n label: React.ReactNode;\n}\n\nconst tocVariants = cva('text-base', {\n variants: {\n variant: {\n sidebar: 'space-y-2',\n inline: 'flex flex-wrap gap-3',\n },\n size: {\n sm: '',\n md: 'text-base',\n },\n },\n defaultVariants: { variant: 'sidebar', size: 'md' },\n});\n\nexport type LegalTOCProps = {\n items: TocItem[];\n activeHref?: string;\n onNavigate?: (href: string) => void;\n} & VariantProps<typeof tocVariants> &\n React.HTMLAttributes<HTMLDivElement>;\n\nexport function LegalTOC({\n items,\n activeHref,\n onNavigate,\n variant,\n size,\n className,\n ...props\n}: LegalTOCProps) {\n return (\n <nav\n aria-label=\"Table of contents\"\n className={cn(tocVariants({ variant, size }), className)}\n {...props}\n >\n {variant === 'inline' ? (\n items.map((it) => (\n <a\n key={it.href}\n href={it.href}\n onClick={(_e) => {\n onNavigate?.(it.href);\n // allow default anchor behaviour too\n }}\n className={cn(\n 'hover:bg-accent hover:text-accent-foreground rounded-xs px-2 py-1',\n activeHref === it.href && 'bg-accent text-accent-foreground'\n )}\n >\n {it.label}\n </a>\n ))\n ) : (\n <ul className=\"list-none space-y-2 pl-0\">\n {items.map((it) => (\n <li key={it.href}>\n <a\n href={it.href}\n onClick={() => onNavigate?.(it.href)}\n className={cn(\n 'hover:bg-accent hover:text-accent-foreground block rounded-xs px-2 py-1',\n activeHref === it.href && 'bg-accent text-accent-foreground'\n )}\n >\n {it.label}\n </a>\n </li>\n ))}\n </ul>\n )}\n </nav>\n );\n}\n\nexport { tocVariants };\n"],"mappings":";;;;;;AASA,MAAM,cAAc,IAAI,aAAa;CACnC,UAAU;EACR,SAAS;GACP,SAAS;GACT,QAAQ;GACT;EACD,MAAM;GACJ,IAAI;GACJ,IAAI;GACL;EACF;CACD,iBAAiB;EAAE,SAAS;EAAW,MAAM;EAAM;CACpD,CAAC;AASF,SAAgB,SAAS,EACvB,OACA,YACA,YACA,SACA,MACA,WACA,GAAG,SACa;AAChB,QACE,oBAAC;EACC,cAAW;EACX,WAAW,GAAG,YAAY;GAAE;GAAS;GAAM,CAAC,EAAE,UAAU;EACxD,GAAI;YAEH,YAAY,WACX,MAAM,KAAK,OACT,oBAAC;GAEC,MAAM,GAAG;GACT,UAAU,OAAO;AACf,iBAAa,GAAG,KAAK;;GAGvB,WAAW,GACT,qEACA,eAAe,GAAG,QAAQ,mCAC3B;aAEA,GAAG;KAXC,GAAG,KAYN,CACJ,GAEF,oBAAC;GAAG,WAAU;aACX,MAAM,KAAK,OACV,oBAAC,kBACC,oBAAC;IACC,MAAM,GAAG;IACT,eAAe,aAAa,GAAG,KAAK;IACpC,WAAW,GACT,2EACA,eAAe,GAAG,QAAQ,mCAC3B;cAEA,GAAG;KACF,IAVG,GAAG,KAWP,CACL;IACC;GAEH"}
@@ -19,20 +19,20 @@ function AiLinkButton({ href, className }) {
19
19
  const copyLink = React$1.useCallback(() => {
20
20
  try {
21
21
  navigator.clipboard?.writeText(href).catch(() => {});
22
- } catch {}
22
+ } catch (_e) {}
23
23
  }, [href]);
24
24
  const openChatGPT = React$1.useCallback(() => {
25
25
  const url = buildProviderUrl("chatgpt", href);
26
26
  try {
27
27
  navigator.clipboard?.writeText(href).catch(() => {});
28
- } catch {}
28
+ } catch (_e) {}
29
29
  window.open(url, "_blank", "noopener,noreferrer");
30
30
  }, [href]);
31
31
  const openClaude = React$1.useCallback(() => {
32
32
  const url = buildProviderUrl("claude", href);
33
33
  try {
34
34
  navigator.clipboard?.writeText(href).catch(() => {});
35
- } catch {}
35
+ } catch (_e) {}
36
36
  window.open(url, "_blank", "noopener,noreferrer");
37
37
  }, [href]);
38
38
  return /* @__PURE__ */ jsxs(DropdownMenu, { children: [/* @__PURE__ */ jsx(DropdownMenuTrigger, {
@@ -1 +1 @@
1
- {"version":3,"file":"AiLinkButton.js","names":["React"],"sources":["../../../src/components/molecules/AiLinkButton.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Button } from '../atoms/Button';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@lssm/lib.ui-kit-web/ui/dropdown-menu';\n// } from './DropdownMenu';\n\ntype Provider = 'chatgpt' | 'claude';\n\nexport interface AiLinkButtonProps {\n href: string; // canonical or .md URL\n provider?: Provider;\n className?: string;\n}\n\nfunction buildPrompt(href: string) {\n return `Please load and use this markdown context when answering: ${href}`;\n}\n\nfunction buildProviderUrl(provider: Provider, href: string) {\n const prompt = encodeURIComponent(buildPrompt(href));\n switch (provider) {\n case 'claude':\n return `https://claude.ai/new?prompt=${prompt}`;\n case 'chatgpt':\n default:\n return `https://chatgpt.com/?q=${prompt}`;\n }\n}\n\nexport function AiLinkButton({ href, className }: AiLinkButtonProps) {\n const copyLink = React.useCallback(() => {\n try {\n navigator.clipboard?.writeText(href).catch(() => {});\n } catch {}\n }, [href]);\n\n const openChatGPT = React.useCallback(() => {\n const url = buildProviderUrl('chatgpt', href);\n try {\n navigator.clipboard?.writeText(href).catch(() => {});\n } catch {}\n window.open(url, '_blank', 'noopener,noreferrer');\n }, [href]);\n\n const openClaude = React.useCallback(() => {\n const url = buildProviderUrl('claude', href);\n try {\n navigator.clipboard?.writeText(href).catch(() => {});\n } catch {}\n window.open(url, '_blank', 'noopener,noreferrer');\n }, [href]);\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n className={className}\n variant=\"secondary\"\n aria-label=\"AI actions\"\n >\n AI\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onClick={copyLink}>Get link for AI</DropdownMenuItem>\n <DropdownMenuItem onClick={openChatGPT}>\n Open in ChatGPT\n </DropdownMenuItem>\n <DropdownMenuItem onClick={openClaude}>Open in Claude</DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n"],"mappings":";;;;;;AAkBA,SAAS,YAAY,MAAc;AACjC,QAAO,6DAA6D;;AAGtE,SAAS,iBAAiB,UAAoB,MAAc;CAC1D,MAAM,SAAS,mBAAmB,YAAY,KAAK,CAAC;AACpD,SAAQ,UAAR;EACE,KAAK,SACH,QAAO,gCAAgC;EACzC,KAAK;EACL,QACE,QAAO,0BAA0B;;;AAIvC,SAAgB,aAAa,EAAE,MAAM,aAAgC;CACnE,MAAM,WAAWA,QAAM,kBAAkB;AACvC,MAAI;AACF,aAAU,WAAW,UAAU,KAAK,CAAC,YAAY,GAAG;UAC9C;IACP,CAAC,KAAK,CAAC;CAEV,MAAM,cAAcA,QAAM,kBAAkB;EAC1C,MAAM,MAAM,iBAAiB,WAAW,KAAK;AAC7C,MAAI;AACF,aAAU,WAAW,UAAU,KAAK,CAAC,YAAY,GAAG;UAC9C;AACR,SAAO,KAAK,KAAK,UAAU,sBAAsB;IAChD,CAAC,KAAK,CAAC;CAEV,MAAM,aAAaA,QAAM,kBAAkB;EACzC,MAAM,MAAM,iBAAiB,UAAU,KAAK;AAC5C,MAAI;AACF,aAAU,WAAW,UAAU,KAAK,CAAC,YAAY,GAAG;UAC9C;AACR,SAAO,KAAK,KAAK,UAAU,sBAAsB;IAChD,CAAC,KAAK,CAAC;AAEV,QACE,qBAAC,2BACC,oBAAC;EAAoB;YACnB,oBAAC;GACY;GACX,SAAQ;GACR,cAAW;aACZ;IAEQ;GACW,EACtB,qBAAC;EAAoB,OAAM;;GACzB,oBAAC;IAAiB,SAAS;cAAU;KAAkC;GACvE,oBAAC;IAAiB,SAAS;cAAa;KAErB;GACnB,oBAAC;IAAiB,SAAS;cAAY;KAAiC;;GACpD,IACT"}
1
+ {"version":3,"file":"AiLinkButton.js","names":["React"],"sources":["../../../src/components/molecules/AiLinkButton.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Button } from '../atoms/Button';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@lssm/lib.ui-kit-web/ui/dropdown-menu';\n// } from './DropdownMenu';\n\ntype Provider = 'chatgpt' | 'claude';\n\nexport interface AiLinkButtonProps {\n href: string; // canonical or .md URL\n provider?: Provider;\n className?: string;\n}\n\nfunction buildPrompt(href: string) {\n return `Please load and use this markdown context when answering: ${href}`;\n}\n\nfunction buildProviderUrl(provider: Provider, href: string) {\n const prompt = encodeURIComponent(buildPrompt(href));\n switch (provider) {\n case 'claude':\n return `https://claude.ai/new?prompt=${prompt}`;\n case 'chatgpt':\n default:\n return `https://chatgpt.com/?q=${prompt}`;\n }\n}\n\nexport function AiLinkButton({ href, className }: AiLinkButtonProps) {\n const copyLink = React.useCallback(() => {\n try {\n navigator.clipboard?.writeText(href).catch(() => {\n /* ignore */\n });\n } catch (_e) {\n /* ignore */\n }\n }, [href]);\n\n const openChatGPT = React.useCallback(() => {\n const url = buildProviderUrl('chatgpt', href);\n try {\n navigator.clipboard?.writeText(href).catch(() => {\n /* ignore */\n });\n } catch (_e) {\n /* ignore */\n }\n window.open(url, '_blank', 'noopener,noreferrer');\n }, [href]);\n\n const openClaude = React.useCallback(() => {\n const url = buildProviderUrl('claude', href);\n try {\n navigator.clipboard?.writeText(href).catch(() => {\n /* ignore */\n });\n } catch (_e) {\n /* ignore */\n }\n window.open(url, '_blank', 'noopener,noreferrer');\n }, [href]);\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n className={className}\n variant=\"secondary\"\n aria-label=\"AI actions\"\n >\n AI\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onClick={copyLink}>Get link for AI</DropdownMenuItem>\n <DropdownMenuItem onClick={openChatGPT}>\n Open in ChatGPT\n </DropdownMenuItem>\n <DropdownMenuItem onClick={openClaude}>Open in Claude</DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n"],"mappings":";;;;;;AAkBA,SAAS,YAAY,MAAc;AACjC,QAAO,6DAA6D;;AAGtE,SAAS,iBAAiB,UAAoB,MAAc;CAC1D,MAAM,SAAS,mBAAmB,YAAY,KAAK,CAAC;AACpD,SAAQ,UAAR;EACE,KAAK,SACH,QAAO,gCAAgC;EACzC,KAAK;EACL,QACE,QAAO,0BAA0B;;;AAIvC,SAAgB,aAAa,EAAE,MAAM,aAAgC;CACnE,MAAM,WAAWA,QAAM,kBAAkB;AACvC,MAAI;AACF,aAAU,WAAW,UAAU,KAAK,CAAC,YAAY,GAE/C;WACK,IAAI;IAGZ,CAAC,KAAK,CAAC;CAEV,MAAM,cAAcA,QAAM,kBAAkB;EAC1C,MAAM,MAAM,iBAAiB,WAAW,KAAK;AAC7C,MAAI;AACF,aAAU,WAAW,UAAU,KAAK,CAAC,YAAY,GAE/C;WACK,IAAI;AAGb,SAAO,KAAK,KAAK,UAAU,sBAAsB;IAChD,CAAC,KAAK,CAAC;CAEV,MAAM,aAAaA,QAAM,kBAAkB;EACzC,MAAM,MAAM,iBAAiB,UAAU,KAAK;AAC5C,MAAI;AACF,aAAU,WAAW,UAAU,KAAK,CAAC,YAAY,GAE/C;WACK,IAAI;AAGb,SAAO,KAAK,KAAK,UAAU,sBAAsB;IAChD,CAAC,KAAK,CAAC;AAEV,QACE,qBAAC,2BACC,oBAAC;EAAoB;YACnB,oBAAC;GACY;GACX,SAAQ;GACR,cAAW;aACZ;IAEQ;GACW,EACtB,qBAAC;EAAoB,OAAM;;GACzB,oBAAC;IAAiB,SAAS;cAAU;KAAkC;GACvE,oBAAC;IAAiB,SAAS;cAAa;KAErB;GACnB,oBAAC;IAAiB,SAAS;cAAY;KAAiC;;GACpD,IACT"}
@@ -9,7 +9,7 @@ function CommandPalette({ open, onOpenChange, groups, placeholder = "Type a comm
9
9
  const [internalOpen, setInternalOpen] = React$1.useState(false);
10
10
  const isControlled = typeof open === "boolean";
11
11
  const visible = isControlled ? open : internalOpen;
12
- const setVisible = isControlled ? onOpenChange : setInternalOpen;
12
+ const setVisible = isControlled && onOpenChange ? onOpenChange : setInternalOpen;
13
13
  React$1.useEffect(() => {
14
14
  const handler = (e) => {
15
15
  if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "k") {
@@ -1 +1 @@
1
- {"version":3,"file":"CommandPalette.js","names":["React"],"sources":["../../../src/components/molecules/CommandPalette.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport {\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n CommandShortcut,\n} from '@lssm/lib.ui-kit-web/ui/command';\n\nexport interface CommandPaletteProps {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n groups: {\n heading?: string;\n items: {\n id: string;\n label: string;\n shortcut?: string;\n onSelect?: () => void;\n }[];\n }[];\n placeholder?: string;\n kbd?: string; // e.g., ⌘K shown in UI copy\n}\n\nexport function CommandPalette({\n open,\n onOpenChange,\n groups,\n placeholder = 'Type a command or search…',\n}: CommandPaletteProps) {\n const [internalOpen, setInternalOpen] = React.useState(false);\n const isControlled = typeof open === 'boolean';\n const visible = isControlled ? open : internalOpen;\n const setVisible = isControlled ? onOpenChange! : setInternalOpen;\n\n React.useEffect(() => {\n const handler = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === 'k') {\n e.preventDefault();\n setVisible(!visible);\n }\n };\n document.addEventListener('keydown', handler);\n return () => document.removeEventListener('keydown', handler);\n }, [visible, setVisible]);\n\n return (\n <CommandDialog open={visible} onOpenChange={setVisible}>\n <CommandInput placeholder={placeholder} />\n <CommandList>\n <CommandEmpty>No results found.</CommandEmpty>\n {groups.map((g, gi) => (\n <CommandGroup key={gi} heading={g.heading}>\n {g.items.map((it) => (\n <CommandItem key={it.id} onSelect={it.onSelect}>\n <span>{it.label}</span>\n {it.shortcut && (\n <CommandShortcut>{it.shortcut}</CommandShortcut>\n )}\n </CommandItem>\n ))}\n </CommandGroup>\n ))}\n <CommandSeparator />\n </CommandList>\n </CommandDialog>\n );\n}\n"],"mappings":";;;;;;;AA8BA,SAAgB,eAAe,EAC7B,MACA,cACA,QACA,cAAc,+BACQ;CACtB,MAAM,CAAC,cAAc,mBAAmBA,QAAM,SAAS,MAAM;CAC7D,MAAM,eAAe,OAAO,SAAS;CACrC,MAAM,UAAU,eAAe,OAAO;CACtC,MAAM,aAAa,eAAe,eAAgB;AAElD,SAAM,gBAAgB;EACpB,MAAM,WAAW,MAAqB;AACpC,QAAK,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,aAAa,KAAK,KAAK;AAC3D,MAAE,gBAAgB;AAClB,eAAW,CAAC,QAAQ;;;AAGxB,WAAS,iBAAiB,WAAW,QAAQ;AAC7C,eAAa,SAAS,oBAAoB,WAAW,QAAQ;IAC5D,CAAC,SAAS,WAAW,CAAC;AAEzB,QACE,qBAAC;EAAc,MAAM;EAAS,cAAc;aAC1C,oBAAC,gBAA0B,cAAe,EAC1C,qBAAC;GACC,oBAAC,0BAAa,sBAAgC;GAC7C,OAAO,KAAK,GAAG,OACd,oBAAC;IAAsB,SAAS,EAAE;cAC/B,EAAE,MAAM,KAAK,OACZ,qBAAC;KAAwB,UAAU,GAAG;gBACpC,oBAAC,oBAAM,GAAG,QAAa,EACtB,GAAG,YACF,oBAAC,6BAAiB,GAAG,WAA2B;OAHlC,GAAG,GAKP,CACd;MARe,GASJ,CACf;GACF,oBAAC,qBAAmB;MACR;GACA"}
1
+ {"version":3,"file":"CommandPalette.js","names":["React"],"sources":["../../../src/components/molecules/CommandPalette.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport {\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n CommandShortcut,\n} from '@lssm/lib.ui-kit-web/ui/command';\n\nexport interface CommandPaletteProps {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n groups: {\n heading?: string;\n items: {\n id: string;\n label: string;\n shortcut?: string;\n onSelect?: () => void;\n }[];\n }[];\n placeholder?: string;\n kbd?: string; // e.g., ⌘K shown in UI copy\n}\n\nexport function CommandPalette({\n open,\n onOpenChange,\n groups,\n placeholder = 'Type a command or search…',\n}: CommandPaletteProps) {\n const [internalOpen, setInternalOpen] = React.useState(false);\n const isControlled = typeof open === 'boolean';\n const visible = isControlled ? open : internalOpen;\n const setVisible = (\n isControlled && onOpenChange ? onOpenChange : setInternalOpen\n ) as (open: boolean) => void;\n\n React.useEffect(() => {\n const handler = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === 'k') {\n e.preventDefault();\n setVisible(!visible);\n }\n };\n document.addEventListener('keydown', handler);\n return () => document.removeEventListener('keydown', handler);\n }, [visible, setVisible]);\n\n return (\n <CommandDialog open={visible} onOpenChange={setVisible}>\n <CommandInput placeholder={placeholder} />\n <CommandList>\n <CommandEmpty>No results found.</CommandEmpty>\n {groups.map((g, gi) => (\n <CommandGroup key={gi} heading={g.heading}>\n {g.items.map((it) => (\n <CommandItem key={it.id} onSelect={it.onSelect}>\n <span>{it.label}</span>\n {it.shortcut && (\n <CommandShortcut>{it.shortcut}</CommandShortcut>\n )}\n </CommandItem>\n ))}\n </CommandGroup>\n ))}\n <CommandSeparator />\n </CommandList>\n </CommandDialog>\n );\n}\n"],"mappings":";;;;;;;AA8BA,SAAgB,eAAe,EAC7B,MACA,cACA,QACA,cAAc,+BACQ;CACtB,MAAM,CAAC,cAAc,mBAAmBA,QAAM,SAAS,MAAM;CAC7D,MAAM,eAAe,OAAO,SAAS;CACrC,MAAM,UAAU,eAAe,OAAO;CACtC,MAAM,aACJ,gBAAgB,eAAe,eAAe;AAGhD,SAAM,gBAAgB;EACpB,MAAM,WAAW,MAAqB;AACpC,QAAK,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,aAAa,KAAK,KAAK;AAC3D,MAAE,gBAAgB;AAClB,eAAW,CAAC,QAAQ;;;AAGxB,WAAS,iBAAiB,WAAW,QAAQ;AAC7C,eAAa,SAAS,oBAAoB,WAAW,QAAQ;IAC5D,CAAC,SAAS,WAAW,CAAC;AAEzB,QACE,qBAAC;EAAc,MAAM;EAAS,cAAc;aAC1C,oBAAC,gBAA0B,cAAe,EAC1C,qBAAC;GACC,oBAAC,0BAAa,sBAAgC;GAC7C,OAAO,KAAK,GAAG,OACd,oBAAC;IAAsB,SAAS,EAAE;cAC/B,EAAE,MAAM,KAAK,OACZ,qBAAC;KAAwB,UAAU,GAAG;gBACpC,oBAAC,oBAAM,GAAG,QAAa,EACtB,GAAG,YACF,oBAAC,6BAAiB,GAAG,WAA2B;OAHlC,GAAG,GAKP,CACd;MARe,GASJ,CACf;GACF,oBAAC,qBAAmB;MACR;GACA"}
@@ -1 +1 @@
1
- {"version":3,"file":"EntityCard.js","names":["Wrapper: React.ElementType"],"sources":["../../../src/components/molecules/EntityCard.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Card, CardContent } from '@lssm/lib.ui-kit-web/ui/card';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@lssm/lib.ui-kit-web/ui/utils';\n\nconst entityCardVariants = cva('transition-all hover:shadow-2xs', {\n variants: {\n emphasis: {\n default: '',\n subtle: 'border-muted/60 bg-muted/20',\n strong: 'border-primary/50 bg-primary/5',\n },\n density: {\n compact: 'p-3',\n comfortable: 'p-4 md:p-5',\n },\n },\n defaultVariants: { emphasis: 'default', density: 'comfortable' },\n});\n\nexport type EntityCardProps = React.ComponentProps<typeof Card> &\n VariantProps<typeof entityCardVariants> & {\n cardTitle: React.ReactNode;\n cardSubtitle?: React.ReactNode;\n chips?: React.ReactNode; // right-aligned small chips\n meta?: React.ReactNode; // rows of icon+text data\n footer?: React.ReactNode; // actions area\n href?: string; // optional link wrapper\n contentClassName?: string;\n preview?: React.ReactNode; // hover preview content\n };\n\nexport function EntityCard({\n cardTitle,\n cardSubtitle,\n chips,\n meta,\n footer,\n emphasis,\n density,\n className,\n contentClassName,\n href,\n preview,\n ...cardProps\n}: EntityCardProps) {\n const Wrapper: React.ElementType = href ? 'a' : 'div';\n const cardContent = (\n <Card\n className={cn(entityCardVariants({ emphasis }), className)}\n {...cardProps}\n >\n <CardContent\n className={cn(entityCardVariants({ density }), contentClassName)}\n >\n <div className=\"space-y-3\">\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-lg font-medium\">{cardTitle}</div>\n {cardSubtitle && (\n <div className=\"text-muted-foreground text-base\">\n {cardSubtitle}\n </div>\n )}\n </div>\n {chips && (\n <div className=\"inline-flex shrink-0 items-center gap-1\">\n {chips}\n </div>\n )}\n </div>\n {meta && <div className=\"space-y-1\">{meta}</div>}\n {footer && (\n <div className=\"flex items-center justify-between\">{footer}</div>\n )}\n </div>\n </CardContent>\n </Card>\n );\n\n const maybePreview = (() => {\n if (!preview) return cardContent;\n try {\n const { HoverPreview } =\n require('./HoverPreview') as typeof import('./HoverPreview');\n return <HoverPreview trigger={cardContent} content={preview} />;\n } catch {\n return cardContent;\n }\n })();\n\n return (\n <Wrapper href={href} className={href ? 'block' : undefined}>\n {maybePreview}\n </Wrapper>\n );\n}\n"],"mappings":";;;;;;;;;;;AAOA,MAAM,qBAAqB,IAAI,mCAAmC;CAChE,UAAU;EACR,UAAU;GACR,SAAS;GACT,QAAQ;GACR,QAAQ;GACT;EACD,SAAS;GACP,SAAS;GACT,aAAa;GACd;EACF;CACD,iBAAiB;EAAE,UAAU;EAAW,SAAS;EAAe;CACjE,CAAC;AAcF,SAAgB,WAAW,EACzB,WACA,cACA,OACA,MACA,QACA,UACA,SACA,WACA,kBACA,MACA,SACA,GAAG,aACe;CAClB,MAAMA,UAA6B,OAAO,MAAM;CAChD,MAAM,cACJ,oBAAC;EACC,WAAW,GAAG,mBAAmB,EAAE,UAAU,CAAC,EAAE,UAAU;EAC1D,GAAI;YAEJ,oBAAC;GACC,WAAW,GAAG,mBAAmB,EAAE,SAAS,CAAC,EAAE,iBAAiB;aAEhE,qBAAC;IAAI,WAAU;;KACb,qBAAC;MAAI,WAAU;iBACb,qBAAC;OAAI,WAAU;kBACb,oBAAC;QAAI,WAAU;kBAAgC;SAAgB,EAC9D,gBACC,oBAAC;QAAI,WAAU;kBACZ;SACG;QAEJ,EACL,SACC,oBAAC;OAAI,WAAU;iBACZ;QACG;OAEJ;KACL,QAAQ,oBAAC;MAAI,WAAU;gBAAa;OAAW;KAC/C,UACC,oBAAC;MAAI,WAAU;gBAAqC;OAAa;;KAE/D;IACM;GACT;CAGT,MAAM,sBAAsB;AAC1B,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI;GACF,MAAM,EAAE;AAER,UAAO,oBAAC;IAAa,SAAS;IAAa,SAAS;KAAW;UACzD;AACN,UAAO;;KAEP;AAEJ,QACE,oBAAC;EAAc;EAAM,WAAW,OAAO,UAAU;YAC9C;GACO"}
1
+ {"version":3,"file":"EntityCard.js","names":["Wrapper: React.ElementType"],"sources":["../../../src/components/molecules/EntityCard.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Card, CardContent } from '@lssm/lib.ui-kit-web/ui/card';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@lssm/lib.ui-kit-web/ui/utils';\n\nconst entityCardVariants = cva('transition-all hover:shadow-2xs', {\n variants: {\n emphasis: {\n default: '',\n subtle: 'border-muted/60 bg-muted/20',\n strong: 'border-primary/50 bg-primary/5',\n },\n density: {\n compact: 'p-3',\n comfortable: 'p-4 md:p-5',\n },\n },\n defaultVariants: { emphasis: 'default', density: 'comfortable' },\n});\n\nexport type EntityCardProps = React.ComponentProps<typeof Card> &\n VariantProps<typeof entityCardVariants> & {\n cardTitle: React.ReactNode;\n cardSubtitle?: React.ReactNode;\n chips?: React.ReactNode; // right-aligned small chips\n meta?: React.ReactNode; // rows of icon+text data\n footer?: React.ReactNode; // actions area\n href?: string; // optional link wrapper\n contentClassName?: string;\n preview?: React.ReactNode; // hover preview content\n };\n\nexport function EntityCard({\n cardTitle,\n cardSubtitle,\n chips,\n meta,\n footer,\n emphasis,\n density,\n className,\n contentClassName,\n href,\n preview,\n ...cardProps\n}: EntityCardProps) {\n const Wrapper: React.ElementType = href ? 'a' : 'div';\n const cardContent = (\n <Card\n className={cn(entityCardVariants({ emphasis }), className)}\n {...cardProps}\n >\n <CardContent\n className={cn(entityCardVariants({ density }), contentClassName)}\n >\n <div className=\"space-y-3\">\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-lg font-medium\">{cardTitle}</div>\n {cardSubtitle && (\n <div className=\"text-muted-foreground text-base\">\n {cardSubtitle}\n </div>\n )}\n </div>\n {chips && (\n <div className=\"inline-flex shrink-0 items-center gap-1\">\n {chips}\n </div>\n )}\n </div>\n {meta && <div className=\"space-y-1\">{meta}</div>}\n {footer && (\n <div className=\"flex items-center justify-between\">{footer}</div>\n )}\n </div>\n </CardContent>\n </Card>\n );\n\n const maybePreview = (() => {\n if (!preview) return cardContent;\n try {\n /* eslint-disable @typescript-eslint/no-require-imports */\n const { HoverPreview } =\n require('./HoverPreview') as typeof import('./HoverPreview');\n /* eslint-enable @typescript-eslint/no-require-imports */\n return <HoverPreview trigger={cardContent} content={preview} />;\n } catch {\n return cardContent;\n }\n })();\n\n return (\n <Wrapper href={href} className={href ? 'block' : undefined}>\n {maybePreview}\n </Wrapper>\n );\n}\n"],"mappings":";;;;;;;;;;;AAOA,MAAM,qBAAqB,IAAI,mCAAmC;CAChE,UAAU;EACR,UAAU;GACR,SAAS;GACT,QAAQ;GACR,QAAQ;GACT;EACD,SAAS;GACP,SAAS;GACT,aAAa;GACd;EACF;CACD,iBAAiB;EAAE,UAAU;EAAW,SAAS;EAAe;CACjE,CAAC;AAcF,SAAgB,WAAW,EACzB,WACA,cACA,OACA,MACA,QACA,UACA,SACA,WACA,kBACA,MACA,SACA,GAAG,aACe;CAClB,MAAMA,UAA6B,OAAO,MAAM;CAChD,MAAM,cACJ,oBAAC;EACC,WAAW,GAAG,mBAAmB,EAAE,UAAU,CAAC,EAAE,UAAU;EAC1D,GAAI;YAEJ,oBAAC;GACC,WAAW,GAAG,mBAAmB,EAAE,SAAS,CAAC,EAAE,iBAAiB;aAEhE,qBAAC;IAAI,WAAU;;KACb,qBAAC;MAAI,WAAU;iBACb,qBAAC;OAAI,WAAU;kBACb,oBAAC;QAAI,WAAU;kBAAgC;SAAgB,EAC9D,gBACC,oBAAC;QAAI,WAAU;kBACZ;SACG;QAEJ,EACL,SACC,oBAAC;OAAI,WAAU;iBACZ;QACG;OAEJ;KACL,QAAQ,oBAAC;MAAI,WAAU;gBAAa;OAAW;KAC/C,UACC,oBAAC;MAAI,WAAU;gBAAqC;OAAa;;KAE/D;IACM;GACT;CAGT,MAAM,sBAAsB;AAC1B,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI;GAEF,MAAM,EAAE;AAGR,UAAO,oBAAC;IAAa,SAAS;IAAa,SAAS;KAAW;UACzD;AACN,UAAO;;KAEP;AAEJ,QACE,oBAAC;EAAc;EAAM,WAAW,OAAO,UAAU;YAC9C;GACO"}
@@ -1 +1 @@
1
- {"version":3,"file":"NavItemCard.js","names":[],"sources":["../../../src/components/molecules/NavItemCard.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { cn } from '@lssm/lib.ui-kit-web/ui/utils';\nimport type { NavLink } from '../../types/navigation';\n\nexport interface NavItemCardProps {\n item: NavLink;\n className?: string;\n}\n\nexport function NavItemCard({ item, className }: NavItemCardProps) {\n return (\n <a\n href={item.href}\n className={cn(\n 'hover:bg-accent block rounded-md p-2 transition-colors',\n className\n )}\n aria-label={typeof item.label === 'string' ? item.label : item.ariaLabel}\n target={item.target}\n rel={item.external ? 'noopener noreferrer' : undefined}\n >\n <div className=\"flex items-center gap-3\">\n {item.imageSrc ? (\n // keep generic img to avoid coupling to Next.js Image\n // eslint-disable-next-line @next/next/no-img-element\n <img\n src={item.imageSrc}\n alt={item.imageAlt || ''}\n className=\"h-12 w-12 rounded-xs object-cover\"\n />\n ) : (\n item.icon || null\n )}\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2 text-base font-medium\">\n {item.label}\n {item.badge && (\n <span className=\"text-muted-foreground ml-1 text-xs\">\n {item.badge}\n </span>\n )}\n </div>\n {item.description && (\n <div className=\"text-muted-foreground line-clamp-2 text-sm\">\n {item.description}\n </div>\n )}\n {item.categories && item.categories.length > 0 && (\n <div className=\"mt-1 flex flex-wrap items-center gap-1\">\n {item.categories.map((c, i) => (\n <span\n key={i}\n className=\"bg-muted text-muted-foreground rounded-xs px-1.5 py-0.5 text-[10px]\"\n >\n {c}\n </span>\n ))}\n </div>\n )}\n </div>\n </div>\n </a>\n );\n}\n"],"mappings":";;;;;;;AAWA,SAAgB,YAAY,EAAE,MAAM,aAA+B;AACjE,QACE,oBAAC;EACC,MAAM,KAAK;EACX,WAAW,GACT,0DACA,UACD;EACD,cAAY,OAAO,KAAK,UAAU,WAAW,KAAK,QAAQ,KAAK;EAC/D,QAAQ,KAAK;EACb,KAAK,KAAK,WAAW,wBAAwB;YAE7C,qBAAC;GAAI,WAAU;cACZ,KAAK,WAGJ,oBAAC;IACC,KAAK,KAAK;IACV,KAAK,KAAK,YAAY;IACtB,WAAU;KACV,GAEF,KAAK,QAAQ,MAEf,qBAAC;IAAI,WAAU;;KACb,qBAAC;MAAI,WAAU;iBACZ,KAAK,OACL,KAAK,SACJ,oBAAC;OAAK,WAAU;iBACb,KAAK;QACD;OAEL;KACL,KAAK,eACJ,oBAAC;MAAI,WAAU;gBACZ,KAAK;OACF;KAEP,KAAK,cAAc,KAAK,WAAW,SAAS,KAC3C,oBAAC;MAAI,WAAU;gBACZ,KAAK,WAAW,KAAK,GAAG,MACvB,oBAAC;OAEC,WAAU;iBAET;SAHI,EAIA,CACP;OACE;;KAEJ;IACF;GACJ"}
1
+ {"version":3,"file":"NavItemCard.js","names":[],"sources":["../../../src/components/molecules/NavItemCard.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { cn } from '@lssm/lib.ui-kit-web/ui/utils';\nimport type { NavLink } from '../../types/navigation';\n\nexport interface NavItemCardProps {\n item: NavLink;\n className?: string;\n}\n\nexport function NavItemCard({ item, className }: NavItemCardProps) {\n return (\n <a\n href={item.href}\n className={cn(\n 'hover:bg-accent block rounded-md p-2 transition-colors',\n className\n )}\n aria-label={typeof item.label === 'string' ? item.label : item.ariaLabel}\n target={item.target}\n rel={item.external ? 'noopener noreferrer' : undefined}\n >\n <div className=\"flex items-center gap-3\">\n {item.imageSrc ? (\n // keep generic img to avoid coupling to Next.js Image\n <img\n src={item.imageSrc}\n alt={item.imageAlt || ''}\n className=\"h-12 w-12 rounded-xs object-cover\"\n />\n ) : (\n item.icon || null\n )}\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2 text-base font-medium\">\n {item.label}\n {item.badge && (\n <span className=\"text-muted-foreground ml-1 text-xs\">\n {item.badge}\n </span>\n )}\n </div>\n {item.description && (\n <div className=\"text-muted-foreground line-clamp-2 text-sm\">\n {item.description}\n </div>\n )}\n {item.categories && item.categories.length > 0 && (\n <div className=\"mt-1 flex flex-wrap items-center gap-1\">\n {item.categories.map((c, i) => (\n <span\n key={i}\n className=\"bg-muted text-muted-foreground rounded-xs px-1.5 py-0.5 text-[10px]\"\n >\n {c}\n </span>\n ))}\n </div>\n )}\n </div>\n </div>\n </a>\n );\n}\n"],"mappings":";;;;;;;AAWA,SAAgB,YAAY,EAAE,MAAM,aAA+B;AACjE,QACE,oBAAC;EACC,MAAM,KAAK;EACX,WAAW,GACT,0DACA,UACD;EACD,cAAY,OAAO,KAAK,UAAU,WAAW,KAAK,QAAQ,KAAK;EAC/D,QAAQ,KAAK;EACb,KAAK,KAAK,WAAW,wBAAwB;YAE7C,qBAAC;GAAI,WAAU;cACZ,KAAK,WAEJ,oBAAC;IACC,KAAK,KAAK;IACV,KAAK,KAAK,YAAY;IACtB,WAAU;KACV,GAEF,KAAK,QAAQ,MAEf,qBAAC;IAAI,WAAU;;KACb,qBAAC;MAAI,WAAU;iBACZ,KAAK,OACL,KAAK,SACJ,oBAAC;OAAK,WAAU;iBACb,KAAK;QACD;OAEL;KACL,KAAK,eACJ,oBAAC;MAAI,WAAU;gBACZ,KAAK;OACF;KAEP,KAAK,cAAc,KAAK,WAAW,SAAS,KAC3C,oBAAC;MAAI,WAAU;gBACZ,KAAK,WAAW,KAAK,GAAG,MACvB,oBAAC;OAEC,WAAU;iBAET;SAHI,EAIA,CACP;OACE;;KAEJ;IACF;GACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"StatusChip.js","names":[],"sources":["../../../src/components/molecules/StatusChip.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@lssm/lib.ui-kit-web/ui/utils';\n\nconst chipVariants = cva(\n 'inline-flex items-center gap-1 rounded-md px-2 py-0.5 text-base font-medium',\n {\n variants: {\n tone: {\n neutral: 'bg-muted/40 text-foreground',\n info: 'bg-accent/15 text-accent',\n success: 'bg-green-100 text-green-700',\n warning: 'bg-warning/10 text-warning',\n danger: 'bg-destructive/10 text-destructive',\n },\n size: {\n sm: 'text-sm',\n md: 'text-base',\n },\n },\n defaultVariants: { tone: 'neutral', size: 'md' },\n }\n);\n\nexport type StatusChipProps = React.HTMLAttributes<HTMLSpanElement> &\n VariantProps<typeof chipVariants> & {\n icon?: React.ReactNode;\n label?: React.ReactNode;\n hoverContent?: React.ReactNode;\n };\n\nexport function StatusChip({\n tone,\n size,\n icon,\n label,\n className,\n hoverContent,\n ...props\n}: StatusChipProps) {\n const content = (\n <span className={cn(chipVariants({ tone, size }), className)} {...props}>\n {icon && (\n <span className=\"inline-flex h-4 w-4 items-center justify-center\">\n {icon}\n </span>\n )}\n {label}\n </span>\n );\n if (!hoverContent) return content;\n try {\n const { HoverPreview } =\n require('./HoverPreview') as typeof import('./HoverPreview');\n return <HoverPreview trigger={content} content={hoverContent} />;\n } catch {\n return content;\n }\n}\n"],"mappings":";;;;;;;;;;AAMA,MAAM,eAAe,IACnB,+EACA;CACE,UAAU;EACR,MAAM;GACJ,SAAS;GACT,MAAM;GACN,SAAS;GACT,SAAS;GACT,QAAQ;GACT;EACD,MAAM;GACJ,IAAI;GACJ,IAAI;GACL;EACF;CACD,iBAAiB;EAAE,MAAM;EAAW,MAAM;EAAM;CACjD,CACF;AASD,SAAgB,WAAW,EACzB,MACA,MACA,MACA,OACA,WACA,cACA,GAAG,SACe;CAClB,MAAM,UACJ,qBAAC;EAAK,WAAW,GAAG,aAAa;GAAE;GAAM;GAAM,CAAC,EAAE,UAAU;EAAE,GAAI;aAC/D,QACC,oBAAC;GAAK,WAAU;aACb;IACI,EAER;GACI;AAET,KAAI,CAAC,aAAc,QAAO;AAC1B,KAAI;EACF,MAAM,EAAE;AAER,SAAO,oBAAC;GAAa,SAAS;GAAS,SAAS;IAAgB;SAC1D;AACN,SAAO"}
1
+ {"version":3,"file":"StatusChip.js","names":[],"sources":["../../../src/components/molecules/StatusChip.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@lssm/lib.ui-kit-web/ui/utils';\n\nconst chipVariants = cva(\n 'inline-flex items-center gap-1 rounded-md px-2 py-0.5 text-base font-medium',\n {\n variants: {\n tone: {\n neutral: 'bg-muted/40 text-foreground',\n info: 'bg-accent/15 text-accent',\n success: 'bg-green-100 text-green-700',\n warning: 'bg-warning/10 text-warning',\n danger: 'bg-destructive/10 text-destructive',\n },\n size: {\n sm: 'text-sm',\n md: 'text-base',\n },\n },\n defaultVariants: { tone: 'neutral', size: 'md' },\n }\n);\n\nexport type StatusChipProps = React.HTMLAttributes<HTMLSpanElement> &\n VariantProps<typeof chipVariants> & {\n icon?: React.ReactNode;\n label?: React.ReactNode;\n hoverContent?: React.ReactNode;\n };\n\nexport function StatusChip({\n tone,\n size,\n icon,\n label,\n className,\n hoverContent,\n ...props\n}: StatusChipProps) {\n const content = (\n <span className={cn(chipVariants({ tone, size }), className)} {...props}>\n {icon && (\n <span className=\"inline-flex h-4 w-4 items-center justify-center\">\n {icon}\n </span>\n )}\n {label}\n </span>\n );\n if (!hoverContent) return content;\n try {\n /* eslint-disable @typescript-eslint/no-require-imports */\n const { HoverPreview } =\n require('./HoverPreview') as typeof import('./HoverPreview');\n /* eslint-enable @typescript-eslint/no-require-imports */\n return <HoverPreview trigger={content} content={hoverContent} />;\n } catch {\n return content;\n }\n}\n"],"mappings":";;;;;;;;;;AAMA,MAAM,eAAe,IACnB,+EACA;CACE,UAAU;EACR,MAAM;GACJ,SAAS;GACT,MAAM;GACN,SAAS;GACT,SAAS;GACT,QAAQ;GACT;EACD,MAAM;GACJ,IAAI;GACJ,IAAI;GACL;EACF;CACD,iBAAiB;EAAE,MAAM;EAAW,MAAM;EAAM;CACjD,CACF;AASD,SAAgB,WAAW,EACzB,MACA,MACA,MACA,OACA,WACA,cACA,GAAG,SACe;CAClB,MAAM,UACJ,qBAAC;EAAK,WAAW,GAAG,aAAa;GAAE;GAAM;GAAM,CAAC,EAAE,UAAU;EAAE,GAAI;aAC/D,QACC,oBAAC;GAAK,WAAU;aACb;IACI,EAER;GACI;AAET,KAAI,CAAC,aAAc,QAAO;AAC1B,KAAI;EAEF,MAAM,EAAE;AAGR,SAAO,oBAAC;GAAa,SAAS;GAAS,SAAS;IAAgB;SAC1D;AACN,SAAO"}
@@ -38,7 +38,7 @@ function FAQSection({ title, subtitle, children, className, items, accordionType
38
38
  collapsible,
39
39
  defaultValue,
40
40
  className: accordionClassName,
41
- children: items.map((faq, index) => /* @__PURE__ */ jsxs(AccordionItem, {
41
+ children: items?.map((faq, index) => /* @__PURE__ */ jsxs(AccordionItem, {
42
42
  value: `item-${index}`,
43
43
  children: [/* @__PURE__ */ jsx(AccordionTrigger, {
44
44
  className: "px-6",
@@ -1 +1 @@
1
- {"version":3,"file":"FAQSection.js","names":["React"],"sources":["../../../src/components/organisms/FAQSection.tsx"],"sourcesContent":["import * as React from 'react';\nimport { VStack } from '@lssm/lib.ui-kit-web/ui/stack';\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from '@lssm/lib.ui-kit-web/ui/accordion';\n\nexport interface FAQItem {\n question: React.ReactNode;\n answer: React.ReactNode;\n}\n\nexport function FAQSection({\n title,\n subtitle,\n children,\n className,\n items,\n accordionType = 'single',\n collapsible = true,\n defaultOpenIndex = 0,\n accordionClassName,\n}: {\n title: React.ReactNode;\n subtitle?: React.ReactNode;\n children?: React.ReactNode; // custom content (deprecated in favor of items)\n className?: string;\n items?: FAQItem[]; // when provided, renders an accordion list\n accordionType?: 'single' | 'multiple';\n collapsible?: boolean;\n defaultOpenIndex?: number; // for 'single' type\n accordionClassName?: string;\n}) {\n const hasItems = Array.isArray(items) && items.length > 0;\n\n const defaultValue = React.useMemo(() => {\n if (!hasItems) return undefined;\n if (accordionType === 'multiple') return undefined; // let UI kit default\n return `item-${Math.max(0, Math.min((items?.length ?? 1) - 1, defaultOpenIndex))}`;\n }, [hasItems, accordionType, defaultOpenIndex, items]);\n\n return (\n <section className={`py-12 sm:py-16 lg:py-24 ${className || ''}`}>\n <div className=\"container mx-auto px-4 sm:px-6 lg:px-8\">\n <VStack className=\"gap-2 text-center\">\n <h2 className=\"text-3xl font-bold md:text-4xl\">{title}</h2>\n {subtitle ? (\n <p className=\"text-muted-foreground mx-auto max-w-2xl text-base\">\n {subtitle}\n </p>\n ) : null}\n </VStack>\n <div className=\"mx-auto mt-8 max-w-3xl\">\n {hasItems ? (\n <VStack className=\"mt-8\">\n <Accordion\n type={accordionType}\n collapsible={collapsible}\n defaultValue={defaultValue as any}\n className={accordionClassName}\n >\n {items!.map((faq, index) => (\n <AccordionItem key={index} value={`item-${index}`}>\n <AccordionTrigger className=\"px-6\">\n <span className=\"text-foreground text-lg font-medium\">\n {faq.question}\n </span>\n </AccordionTrigger>\n <AccordionContent className=\"px-6\">\n <p className=\"text-muted-foreground\">{faq.answer}</p>\n </AccordionContent>\n </AccordionItem>\n ))}\n </Accordion>\n </VStack>\n ) : (\n children\n )}\n </div>\n </div>\n </section>\n );\n}\n"],"mappings":";;;;;;AAcA,SAAgB,WAAW,EACzB,OACA,UACA,UACA,WACA,OACA,gBAAgB,UAChB,cAAc,MACd,mBAAmB,GACnB,sBAWC;CACD,MAAM,WAAW,MAAM,QAAQ,MAAM,IAAI,MAAM,SAAS;CAExD,MAAM,eAAeA,QAAM,cAAc;AACvC,MAAI,CAAC,SAAU,QAAO;AACtB,MAAI,kBAAkB,WAAY,QAAO;AACzC,SAAO,QAAQ,KAAK,IAAI,GAAG,KAAK,KAAK,OAAO,UAAU,KAAK,GAAG,iBAAiB,CAAC;IAC/E;EAAC;EAAU;EAAe;EAAkB;EAAM,CAAC;AAEtD,QACE,oBAAC;EAAQ,WAAW,2BAA2B,aAAa;YAC1D,qBAAC;GAAI,WAAU;cACb,qBAAC;IAAO,WAAU;eAChB,oBAAC;KAAG,WAAU;eAAkC;MAAW,EAC1D,WACC,oBAAC;KAAE,WAAU;eACV;MACC,GACF;KACG,EACT,oBAAC;IAAI,WAAU;cACZ,WACC,oBAAC;KAAO,WAAU;eAChB,oBAAC;MACC,MAAM;MACO;MACC;MACd,WAAW;gBAEV,MAAO,KAAK,KAAK,UAChB,qBAAC;OAA0B,OAAO,QAAQ;kBACxC,oBAAC;QAAiB,WAAU;kBAC1B,oBAAC;SAAK,WAAU;mBACb,IAAI;UACA;SACU,EACnB,oBAAC;QAAiB,WAAU;kBAC1B,oBAAC;SAAE,WAAU;mBAAyB,IAAI;UAAW;SACpC;SARD,MASJ,CAChB;OACQ;MACL,GAET;KAEE;IACF;GACE"}
1
+ {"version":3,"file":"FAQSection.js","names":["React"],"sources":["../../../src/components/organisms/FAQSection.tsx"],"sourcesContent":["import * as React from 'react';\nimport { VStack } from '@lssm/lib.ui-kit-web/ui/stack';\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from '@lssm/lib.ui-kit-web/ui/accordion';\n\nexport interface FAQItem {\n question: React.ReactNode;\n answer: React.ReactNode;\n}\n\nexport function FAQSection({\n title,\n subtitle,\n children,\n className,\n items,\n accordionType = 'single',\n collapsible = true,\n defaultOpenIndex = 0,\n accordionClassName,\n}: {\n title: React.ReactNode;\n subtitle?: React.ReactNode;\n children?: React.ReactNode; // custom content (deprecated in favor of items)\n className?: string;\n items?: FAQItem[]; // when provided, renders an accordion list\n accordionType?: 'single' | 'multiple';\n collapsible?: boolean;\n defaultOpenIndex?: number; // for 'single' type\n accordionClassName?: string;\n}) {\n const hasItems = Array.isArray(items) && items.length > 0;\n\n const defaultValue = React.useMemo(() => {\n if (!hasItems) return undefined;\n if (accordionType === 'multiple') return undefined; // let UI kit default\n return `item-${Math.max(0, Math.min((items?.length ?? 1) - 1, defaultOpenIndex))}`;\n }, [hasItems, accordionType, defaultOpenIndex, items]);\n\n return (\n <section className={`py-12 sm:py-16 lg:py-24 ${className || ''}`}>\n <div className=\"container mx-auto px-4 sm:px-6 lg:px-8\">\n <VStack className=\"gap-2 text-center\">\n <h2 className=\"text-3xl font-bold md:text-4xl\">{title}</h2>\n {subtitle ? (\n <p className=\"text-muted-foreground mx-auto max-w-2xl text-base\">\n {subtitle}\n </p>\n ) : null}\n </VStack>\n <div className=\"mx-auto mt-8 max-w-3xl\">\n {hasItems ? (\n <VStack className=\"mt-8\">\n <Accordion\n type={accordionType}\n collapsible={collapsible}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n defaultValue={defaultValue as any}\n className={accordionClassName}\n >\n {items?.map((faq, index) => (\n <AccordionItem key={index} value={`item-${index}`}>\n <AccordionTrigger className=\"px-6\">\n <span className=\"text-foreground text-lg font-medium\">\n {faq.question}\n </span>\n </AccordionTrigger>\n <AccordionContent className=\"px-6\">\n <p className=\"text-muted-foreground\">{faq.answer}</p>\n </AccordionContent>\n </AccordionItem>\n ))}\n </Accordion>\n </VStack>\n ) : (\n children\n )}\n </div>\n </div>\n </section>\n );\n}\n"],"mappings":";;;;;;AAcA,SAAgB,WAAW,EACzB,OACA,UACA,UACA,WACA,OACA,gBAAgB,UAChB,cAAc,MACd,mBAAmB,GACnB,sBAWC;CACD,MAAM,WAAW,MAAM,QAAQ,MAAM,IAAI,MAAM,SAAS;CAExD,MAAM,eAAeA,QAAM,cAAc;AACvC,MAAI,CAAC,SAAU,QAAO;AACtB,MAAI,kBAAkB,WAAY,QAAO;AACzC,SAAO,QAAQ,KAAK,IAAI,GAAG,KAAK,KAAK,OAAO,UAAU,KAAK,GAAG,iBAAiB,CAAC;IAC/E;EAAC;EAAU;EAAe;EAAkB;EAAM,CAAC;AAEtD,QACE,oBAAC;EAAQ,WAAW,2BAA2B,aAAa;YAC1D,qBAAC;GAAI,WAAU;cACb,qBAAC;IAAO,WAAU;eAChB,oBAAC;KAAG,WAAU;eAAkC;MAAW,EAC1D,WACC,oBAAC;KAAE,WAAU;eACV;MACC,GACF;KACG,EACT,oBAAC;IAAI,WAAU;cACZ,WACC,oBAAC;KAAO,WAAU;eAChB,oBAAC;MACC,MAAM;MACO;MAEC;MACd,WAAW;gBAEV,OAAO,KAAK,KAAK,UAChB,qBAAC;OAA0B,OAAO,QAAQ;kBACxC,oBAAC;QAAiB,WAAU;kBAC1B,oBAAC;SAAK,WAAU;mBACb,IAAI;UACA;SACU,EACnB,oBAAC;QAAiB,WAAU;kBAC1B,oBAAC;SAAE,WAAU;mBAAyB,IAAI;UAAW;SACpC;SARD,MASJ,CAChB;OACQ;MACL,GAET;KAEE;IACF;GACE"}
@@ -1 +1 @@
1
- {"version":3,"file":"Footer.js","names":[],"sources":["../../../src/components/organisms/Footer.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cn } from '@lssm/lib.ui-kit-web/ui/utils';\nimport { cva } from 'class-variance-authority';\nimport { HStack, VStack } from '@lssm/lib.ui-kit-web/ui/stack';\n\nexport interface FooterProps {\n left?: React.ReactNode;\n center?: React.ReactNode;\n right?: React.ReactNode;\n links?: { label: React.ReactNode; href: string }[];\n className?: string;\n variant?: 'default' | 'marketing';\n}\n\nconst footerVariants = cva('border-t px-4 text-base', {\n variants: {\n variant: {\n default: '',\n marketing: 'bg-muted/30',\n },\n density: {\n compact: 'py-4',\n comfortable: 'py-6',\n },\n },\n defaultVariants: {\n density: 'comfortable',\n variant: 'default',\n },\n});\n\nexport function Footer({\n left,\n center,\n right,\n links,\n className,\n variant,\n}: FooterProps) {\n return (\n <footer className={cn(footerVariants({ variant }), className)}>\n <div className=\"grid grid-cols-1 items-center gap-3 sm:grid-cols-3\">\n <div className=\"flex items-center gap-3\">{left}</div>\n <div className=\"text-muted-foreground text-center\">{center}</div>\n <VStack>{right}</VStack>\n </div>\n\n {links && links.length > 0 && (\n <div className=\"text-muted-foreground mt-4 flex flex-wrap items-center justify-center gap-3 text-base\">\n {links.map((l) => (\n <a\n href={l.href}\n key={String(l.href)}\n className=\"hover:text-foreground\"\n >\n {l.label}\n </a>\n ))}\n </div>\n )}\n </footer>\n );\n}\n"],"mappings":";;;;;;;AAcA,MAAM,iBAAiB,IAAI,2BAA2B;CACpD,UAAU;EACR,SAAS;GACP,SAAS;GACT,WAAW;GACZ;EACD,SAAS;GACP,SAAS;GACT,aAAa;GACd;EACF;CACD,iBAAiB;EACf,SAAS;EACT,SAAS;EACV;CACF,CAAC;AAEF,SAAgB,OAAO,EACrB,MACA,QACA,OACA,OACA,WACA,WACc;AACd,QACE,qBAAC;EAAO,WAAW,GAAG,eAAe,EAAE,SAAS,CAAC,EAAE,UAAU;aAC3D,qBAAC;GAAI,WAAU;;IACb,oBAAC;KAAI,WAAU;eAA2B;MAAW;IACrD,oBAAC;KAAI,WAAU;eAAqC;MAAa;IACjE,oBAAC,oBAAQ,QAAe;;IACpB,EAEL,SAAS,MAAM,SAAS,KACvB,oBAAC;GAAI,WAAU;aACZ,MAAM,KAAK,MACV,oBAAC;IACC,MAAM,EAAE;IAER,WAAU;cAET,EAAE;MAHE,OAAO,EAAE,KAAK,CAIjB,CACJ;IACE;GAED"}
1
+ {"version":3,"file":"Footer.js","names":[],"sources":["../../../src/components/organisms/Footer.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cn } from '@lssm/lib.ui-kit-web/ui/utils';\nimport { cva } from 'class-variance-authority';\nimport { VStack } from '@lssm/lib.ui-kit-web/ui/stack';\n\nexport interface FooterProps {\n left?: React.ReactNode;\n center?: React.ReactNode;\n right?: React.ReactNode;\n links?: { label: React.ReactNode; href: string }[];\n className?: string;\n variant?: 'default' | 'marketing';\n}\n\nconst footerVariants = cva('border-t px-4 text-base', {\n variants: {\n variant: {\n default: '',\n marketing: 'bg-muted/30',\n },\n density: {\n compact: 'py-4',\n comfortable: 'py-6',\n },\n },\n defaultVariants: {\n density: 'comfortable',\n variant: 'default',\n },\n});\n\nexport function Footer({\n left,\n center,\n right,\n links,\n className,\n variant,\n}: FooterProps) {\n return (\n <footer className={cn(footerVariants({ variant }), className)}>\n <div className=\"grid grid-cols-1 items-center gap-3 sm:grid-cols-3\">\n <div className=\"flex items-center gap-3\">{left}</div>\n <div className=\"text-muted-foreground text-center\">{center}</div>\n <VStack>{right}</VStack>\n </div>\n\n {links && links.length > 0 && (\n <div className=\"text-muted-foreground mt-4 flex flex-wrap items-center justify-center gap-3 text-base\">\n {links.map((l) => (\n <a\n href={l.href}\n key={String(l.href)}\n className=\"hover:text-foreground\"\n >\n {l.label}\n </a>\n ))}\n </div>\n )}\n </footer>\n );\n}\n"],"mappings":";;;;;;;AAcA,MAAM,iBAAiB,IAAI,2BAA2B;CACpD,UAAU;EACR,SAAS;GACP,SAAS;GACT,WAAW;GACZ;EACD,SAAS;GACP,SAAS;GACT,aAAa;GACd;EACF;CACD,iBAAiB;EACf,SAAS;EACT,SAAS;EACV;CACF,CAAC;AAEF,SAAgB,OAAO,EACrB,MACA,QACA,OACA,OACA,WACA,WACc;AACd,QACE,qBAAC;EAAO,WAAW,GAAG,eAAe,EAAE,SAAS,CAAC,EAAE,UAAU;aAC3D,qBAAC;GAAI,WAAU;;IACb,oBAAC;KAAI,WAAU;eAA2B;MAAW;IACrD,oBAAC;KAAI,WAAU;eAAqC;MAAa;IACjE,oBAAC,oBAAQ,QAAe;;IACpB,EAEL,SAAS,MAAM,SAAS,KACvB,oBAAC;GAAI,WAAU;aACZ,MAAM,KAAK,MACV,oBAAC;IACC,MAAM,EAAE;IAER,WAAU;cAET,EAAE;MAHE,OAAO,EAAE,KAAK,CAIjB,CACJ;IACE;GAED"}
@@ -1 +1 @@
1
- {"version":3,"file":"HeroSection.js","names":[],"sources":["../../../src/components/organisms/HeroSection.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Hero } from '@lssm/lib.ui-kit-web/ui/marketing/Hero';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nconst sectionVariants = cva(\n 'relative overflow-hidden bg-linear-to-b from-background to-muted/20',\n {\n variants: {\n density: {\n compact: 'py-12',\n comfortable: 'py-16 sm:py-24 lg:py-32',\n },\n },\n defaultVariants: { density: 'comfortable' },\n }\n);\n\nexport function HeroSection({\n title,\n subtitle,\n primaryCta,\n secondaryCta,\n className,\n density,\n}: {\n title: React.ReactNode;\n subtitle?: React.ReactNode;\n primaryCta?: { label: string; href?: string; onClick?: () => void };\n secondaryCta?: { label: string; href?: string; onClick?: () => void };\n className?: string;\n density?: 'compact' | 'comfortable';\n}) {\n return (\n <section\n className={[sectionVariants({ density }), className]\n .filter(Boolean)\n .join(' ')}\n >\n <div className=\"container mx-auto px-4 sm:px-6 lg:px-8\">\n <Hero\n title={title}\n subtitle={subtitle}\n primaryCta={primaryCta}\n secondaryCta={secondaryCta}\n />\n </div>\n </section>\n );\n}\n"],"mappings":";;;;;;AAIA,MAAM,kBAAkB,IACtB,uEACA;CACE,UAAU,EACR,SAAS;EACP,SAAS;EACT,aAAa;EACd,EACF;CACD,iBAAiB,EAAE,SAAS,eAAe;CAC5C,CACF;AAED,SAAgB,YAAY,EAC1B,OACA,UACA,YACA,cACA,WACA,WAQC;AACD,QACE,oBAAC;EACC,WAAW,CAAC,gBAAgB,EAAE,SAAS,CAAC,EAAE,UAAU,CACjD,OAAO,QAAQ,CACf,KAAK,IAAI;YAEZ,oBAAC;GAAI,WAAU;aACb,oBAAC;IACQ;IACG;IACE;IACE;KACd;IACE;GACE"}
1
+ {"version":3,"file":"HeroSection.js","names":[],"sources":["../../../src/components/organisms/HeroSection.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Hero } from '@lssm/lib.ui-kit-web/ui/marketing/Hero';\nimport { cva } from 'class-variance-authority';\n\nconst sectionVariants = cva(\n 'relative overflow-hidden bg-linear-to-b from-background to-muted/20',\n {\n variants: {\n density: {\n compact: 'py-12',\n comfortable: 'py-16 sm:py-24 lg:py-32',\n },\n },\n defaultVariants: { density: 'comfortable' },\n }\n);\n\nexport function HeroSection({\n title,\n subtitle,\n primaryCta,\n secondaryCta,\n className,\n density,\n}: {\n title: React.ReactNode;\n subtitle?: React.ReactNode;\n primaryCta?: { label: string; href?: string; onClick?: () => void };\n secondaryCta?: { label: string; href?: string; onClick?: () => void };\n className?: string;\n density?: 'compact' | 'comfortable';\n}) {\n return (\n <section\n className={[sectionVariants({ density }), className]\n .filter(Boolean)\n .join(' ')}\n >\n <div className=\"container mx-auto px-4 sm:px-6 lg:px-8\">\n <Hero\n title={title}\n subtitle={subtitle}\n primaryCta={primaryCta}\n secondaryCta={secondaryCta}\n />\n </div>\n </section>\n );\n}\n"],"mappings":";;;;;;AAIA,MAAM,kBAAkB,IACtB,uEACA;CACE,UAAU,EACR,SAAS;EACP,SAAS;EACT,aAAa;EACd,EACF;CACD,iBAAiB,EAAE,SAAS,eAAe;CAC5C,CACF;AAED,SAAgB,YAAY,EAC1B,OACA,UACA,YACA,cACA,WACA,WAQC;AACD,QACE,oBAAC;EACC,WAAW,CAAC,gBAAgB,EAAE,SAAS,CAAC,EAAE,UAAU,CACjD,OAAO,QAAQ,CACf,KAAK,IAAI;YAEZ,oBAAC;GAAI,WAAU;aACb,oBAAC;IACQ;IACG;IACE;IACE;KACd;IACE;GACE"}
@@ -26,7 +26,6 @@ function ListGridPage({ title, subtitle, items, renderItem, className, columns,
26
26
  const { screen } = useResponsive();
27
27
  const cols = screen === "desktop" ? columns?.desktop ?? 3 : screen === "tablet" ? columns?.tablet ?? 2 : columns?.mobile ?? 1;
28
28
  const gridClass = `grid ${gridGapVariants({ size })}`;
29
- `${cols}`;
30
29
  const presetColsClass = cols === 1 ? "grid-cols-1" : cols === 2 ? "grid-cols-2" : cols === 3 ? "grid-cols-3" : cols === 4 ? "grid-cols-4" : "grid-cols-3";
31
30
  return /* @__PURE__ */ jsxs(VStack, {
32
31
  className: [containerVariants({ density }), className].filter(Boolean).join(" "),
@@ -1 +1 @@
1
- {"version":3,"file":"ListGridPage.js","names":[],"sources":["../../../src/components/organisms/ListGridPage.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { VStack } from '@lssm/lib.ui-kit-web/ui/stack';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useResponsive } from '../../platform/useResponsive';\n\nconst containerVariants = cva('', {\n variants: {\n density: {\n compact: 'gap-3',\n comfortable: 'gap-4 md:gap-5 lg:gap-6',\n },\n },\n defaultVariants: {\n density: 'comfortable',\n },\n});\n\nconst gridGapVariants = cva('', {\n variants: {\n size: {\n sm: 'gap-3',\n md: 'gap-4',\n lg: 'gap-6',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n});\n\nexport interface ListGridPageProps<T>\n extends\n VariantProps<typeof containerVariants>,\n VariantProps<typeof gridGapVariants> {\n title: React.ReactNode;\n subtitle?: React.ReactNode;\n items: T[];\n renderItem: (item: T, index: number) => React.ReactNode;\n className?: string;\n columns?: { mobile?: number; tablet?: number; desktop?: number };\n}\n\nexport function ListGridPage<T>({\n title,\n subtitle,\n items,\n renderItem,\n className,\n columns,\n density,\n size,\n}: ListGridPageProps<T>) {\n const { screen } = useResponsive();\n const cols =\n screen === 'desktop'\n ? (columns?.desktop ?? 3)\n : screen === 'tablet'\n ? (columns?.tablet ?? 2)\n : (columns?.mobile ?? 1);\n const gridClass = `grid ${gridGapVariants({ size })}`;\n const colsClass = `grid-cols-${cols}`;\n // Tailwind can't generate dynamic classes reliably; provide common presets\n const presetColsClass =\n cols === 1\n ? 'grid-cols-1'\n : cols === 2\n ? 'grid-cols-2'\n : cols === 3\n ? 'grid-cols-3'\n : cols === 4\n ? 'grid-cols-4'\n : 'grid-cols-3';\n\n return (\n <VStack\n className={[containerVariants({ density }), className]\n .filter(Boolean)\n .join(' ')}\n >\n <VStack className=\"gap-1\">\n <h1 className=\"text-2xl font-bold md:text-3xl\">{title}</h1>\n {subtitle ? (\n <p className=\"text-muted-foreground text-base\">{subtitle}</p>\n ) : null}\n </VStack>\n <div className={`${gridClass} ${presetColsClass}`}>\n {items.map((item, idx) => (\n <div key={idx}>{renderItem(item, idx)}</div>\n ))}\n </div>\n </VStack>\n );\n}\n"],"mappings":";;;;;;;;;AAOA,MAAM,oBAAoB,IAAI,IAAI;CAChC,UAAU,EACR,SAAS;EACP,SAAS;EACT,aAAa;EACd,EACF;CACD,iBAAiB,EACf,SAAS,eACV;CACF,CAAC;AAEF,MAAM,kBAAkB,IAAI,IAAI;CAC9B,UAAU,EACR,MAAM;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACL,EACF;CACD,iBAAiB,EACf,MAAM,MACP;CACF,CAAC;AAcF,SAAgB,aAAgB,EAC9B,OACA,UACA,OACA,YACA,WACA,SACA,SACA,QACuB;CACvB,MAAM,EAAE,WAAW,eAAe;CAClC,MAAM,OACJ,WAAW,YACN,SAAS,WAAW,IACrB,WAAW,WACR,SAAS,UAAU,IACnB,SAAS,UAAU;CAC5B,MAAM,YAAY,QAAQ,gBAAgB,EAAE,MAAM,CAAC;AACjC,IAAa,KAAb;CAElB,MAAM,kBACJ,SAAS,IACL,gBACA,SAAS,IACP,gBACA,SAAS,IACP,gBACA,SAAS,IACP,gBACA;AAEZ,QACE,qBAAC;EACC,WAAW,CAAC,kBAAkB,EAAE,SAAS,CAAC,EAAE,UAAU,CACnD,OAAO,QAAQ,CACf,KAAK,IAAI;aAEZ,qBAAC;GAAO,WAAU;cAChB,oBAAC;IAAG,WAAU;cAAkC;KAAW,EAC1D,WACC,oBAAC;IAAE,WAAU;cAAmC;KAAa,GAC3D;IACG,EACT,oBAAC;GAAI,WAAW,GAAG,UAAU,GAAG;aAC7B,MAAM,KAAK,MAAM,QAChB,oBAAC,mBAAe,WAAW,MAAM,IAAI,IAA3B,IAAkC,CAC5C;IACE;GACC"}
1
+ {"version":3,"file":"ListGridPage.js","names":[],"sources":["../../../src/components/organisms/ListGridPage.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { VStack } from '@lssm/lib.ui-kit-web/ui/stack';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useResponsive } from '../../platform/useResponsive';\n\nconst containerVariants = cva('', {\n variants: {\n density: {\n compact: 'gap-3',\n comfortable: 'gap-4 md:gap-5 lg:gap-6',\n },\n },\n defaultVariants: {\n density: 'comfortable',\n },\n});\n\nconst gridGapVariants = cva('', {\n variants: {\n size: {\n sm: 'gap-3',\n md: 'gap-4',\n lg: 'gap-6',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n});\n\nexport interface ListGridPageProps<T>\n extends\n VariantProps<typeof containerVariants>,\n VariantProps<typeof gridGapVariants> {\n title: React.ReactNode;\n subtitle?: React.ReactNode;\n items: T[];\n renderItem: (item: T, index: number) => React.ReactNode;\n className?: string;\n columns?: { mobile?: number; tablet?: number; desktop?: number };\n}\n\nexport function ListGridPage<T>({\n title,\n subtitle,\n items,\n renderItem,\n className,\n columns,\n density,\n size,\n}: ListGridPageProps<T>) {\n const { screen } = useResponsive();\n const cols =\n screen === 'desktop'\n ? (columns?.desktop ?? 3)\n : screen === 'tablet'\n ? (columns?.tablet ?? 2)\n : (columns?.mobile ?? 1);\n const gridClass = `grid ${gridGapVariants({ size })}`;\n // const colsClass = `grid-cols-${cols}`;\n // Tailwind can't generate dynamic classes reliably; provide common presets\n const presetColsClass =\n cols === 1\n ? 'grid-cols-1'\n : cols === 2\n ? 'grid-cols-2'\n : cols === 3\n ? 'grid-cols-3'\n : cols === 4\n ? 'grid-cols-4'\n : 'grid-cols-3';\n\n return (\n <VStack\n className={[containerVariants({ density }), className]\n .filter(Boolean)\n .join(' ')}\n >\n <VStack className=\"gap-1\">\n <h1 className=\"text-2xl font-bold md:text-3xl\">{title}</h1>\n {subtitle ? (\n <p className=\"text-muted-foreground text-base\">{subtitle}</p>\n ) : null}\n </VStack>\n <div className={`${gridClass} ${presetColsClass}`}>\n {items.map((item, idx) => (\n <div key={idx}>{renderItem(item, idx)}</div>\n ))}\n </div>\n </VStack>\n );\n}\n"],"mappings":";;;;;;;;;AAOA,MAAM,oBAAoB,IAAI,IAAI;CAChC,UAAU,EACR,SAAS;EACP,SAAS;EACT,aAAa;EACd,EACF;CACD,iBAAiB,EACf,SAAS,eACV;CACF,CAAC;AAEF,MAAM,kBAAkB,IAAI,IAAI;CAC9B,UAAU,EACR,MAAM;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACL,EACF;CACD,iBAAiB,EACf,MAAM,MACP;CACF,CAAC;AAcF,SAAgB,aAAgB,EAC9B,OACA,UACA,OACA,YACA,WACA,SACA,SACA,QACuB;CACvB,MAAM,EAAE,WAAW,eAAe;CAClC,MAAM,OACJ,WAAW,YACN,SAAS,WAAW,IACrB,WAAW,WACR,SAAS,UAAU,IACnB,SAAS,UAAU;CAC5B,MAAM,YAAY,QAAQ,gBAAgB,EAAE,MAAM,CAAC;CAGnD,MAAM,kBACJ,SAAS,IACL,gBACA,SAAS,IACP,gBACA,SAAS,IACP,gBACA,SAAS,IACP,gBACA;AAEZ,QACE,qBAAC;EACC,WAAW,CAAC,kBAAkB,EAAE,SAAS,CAAC,EAAE,UAAU,CACnD,OAAO,QAAQ,CACf,KAAK,IAAI;aAEZ,qBAAC;GAAO,WAAU;cAChB,oBAAC;IAAG,WAAU;cAAkC;KAAW,EAC1D,WACC,oBAAC;IAAE,WAAU;cAAmC;KAAa,GAC3D;IACG,EACT,oBAAC;GAAI,WAAW,GAAG,UAAU,GAAG;aAC7B,MAAM,KAAK,MAAM,QAChB,oBAAC,mBAAe,WAAW,MAAM,IAAI,IAA3B,IAAkC,CAC5C;IACE;GACC"}
@@ -1 +1 @@
1
- {"version":3,"file":"MarketingHeaderMobile.js","names":["React"],"sources":["../../../src/components/organisms/MarketingHeaderMobile.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { cn } from '@lssm/lib.ui-kit-web/ui/utils';\nimport { Button } from '../atoms/Button';\nimport {\n Sheet,\n SheetContent,\n SheetTrigger,\n SheetTitle,\n SheetHeader,\n SheetFooter,\n SheetDescription,\n} from '@lssm/lib.ui-kit-web/ui/sheet';\nimport { Menu } from 'lucide-react';\nimport type { MarketingHeaderProps } from './MarketingHeader';\nimport { MobileNavMenu } from '../molecules/MobileNavMenu';\nimport { CommandSearchTrigger } from '../molecules/CommandSearchTrigger';\nimport { LangSwitchDropdown } from '../molecules/LangSwitchDropdown';\nimport { VStack } from '@lssm/lib.ui-kit-web/ui/stack';\n\nexport function MarketingHeaderMobile({\n logo,\n nav = [],\n className,\n right,\n}: MarketingHeaderProps) {\n const [open, setOpen] = React.useState(false);\n return (\n <div\n className={cn(\n 'bg-background/95 supports-backdrop-filter:bg-background/60 w-full border-b backdrop-blur-xs md:hidden',\n className\n )}\n >\n <div className=\"mx-auto flex w-full max-w-7xl items-center justify-between px-3 py-2\">\n <div className=\"flex items-center gap-2\">\n <Sheet open={open} onOpenChange={setOpen}>\n <SheetTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" aria-label=\"Open menu\">\n <Menu className=\"h-5 w-5\" />\n </Button>\n </SheetTrigger>\n <SheetContent side=\"left\" className=\"w-[320px] p-4\">\n <SheetHeader>\n <SheetTitle>Menu</SheetTitle>\n <SheetDescription>\n <div className=\"mb-3\">\n <CommandSearchTrigger groups={[]} compact />\n </div>\n <MobileNavMenu items={nav} />\n </SheetDescription>\n </SheetHeader>\n <VStack>\n <MobileNavMenu items={nav} />\n </VStack>\n <SheetFooter>\n {right}\n {/* todo */}\n </SheetFooter>\n </SheetContent>\n </Sheet>\n {logo}\n </div>\n <div className=\"flex items-center gap-2\">\n <LangSwitchDropdown\n value={'en'}\n options={[\n { code: 'fr', label: 'FR' },\n { code: 'en', label: 'EN' },\n ]}\n onChange={() => {}}\n />\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AAqBA,SAAgB,sBAAsB,EACpC,MACA,MAAM,EAAE,EACR,WACA,SACuB;CACvB,MAAM,CAAC,MAAM,WAAWA,QAAM,SAAS,MAAM;AAC7C,QACE,oBAAC;EACC,WAAW,GACT,yGACA,UACD;YAED,qBAAC;GAAI,WAAU;cACb,qBAAC;IAAI,WAAU;eACb,qBAAC;KAAY;KAAM,cAAc;gBAC/B,oBAAC;MAAa;gBACZ,oBAAC;OAAO,SAAQ;OAAQ,MAAK;OAAO,cAAW;iBAC7C,oBAAC,QAAK,WAAU,YAAY;QACrB;OACI,EACf,qBAAC;MAAa,MAAK;MAAO,WAAU;;OAClC,qBAAC,0BACC,oBAAC,wBAAW,SAAiB,EAC7B,qBAAC,+BACC,oBAAC;QAAI,WAAU;kBACb,oBAAC;SAAqB,QAAQ,EAAE;SAAE;UAAU;SACxC,EACN,oBAAC,iBAAc,OAAO,MAAO,IACZ,IACP;OACd,oBAAC,oBACC,oBAAC,iBAAc,OAAO,MAAO,GACtB;OACT,oBAAC,yBACE,QAEW;;OACD;MACT,EACP;KACG,EACN,oBAAC;IAAI,WAAU;cACb,oBAAC;KACC,OAAO;KACP,SAAS,CACP;MAAE,MAAM;MAAM,OAAO;MAAM,EAC3B;MAAE,MAAM;MAAM,OAAO;MAAM,CAC5B;KACD,gBAAgB;MAChB;KACE;IACF;GACF"}
1
+ {"version":3,"file":"MarketingHeaderMobile.js","names":["React"],"sources":["../../../src/components/organisms/MarketingHeaderMobile.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { cn } from '@lssm/lib.ui-kit-web/ui/utils';\nimport { Button } from '../atoms/Button';\nimport {\n Sheet,\n SheetContent,\n SheetTrigger,\n SheetTitle,\n SheetHeader,\n SheetFooter,\n SheetDescription,\n} from '@lssm/lib.ui-kit-web/ui/sheet';\nimport { Menu } from 'lucide-react';\nimport type { MarketingHeaderProps } from './MarketingHeader';\nimport { MobileNavMenu } from '../molecules/MobileNavMenu';\nimport { CommandSearchTrigger } from '../molecules/CommandSearchTrigger';\nimport { LangSwitchDropdown } from '../molecules/LangSwitchDropdown';\nimport { VStack } from '@lssm/lib.ui-kit-web/ui/stack';\n\nexport function MarketingHeaderMobile({\n logo,\n nav = [],\n className,\n right,\n}: MarketingHeaderProps) {\n const [open, setOpen] = React.useState(false);\n return (\n <div\n className={cn(\n 'bg-background/95 supports-backdrop-filter:bg-background/60 w-full border-b backdrop-blur-xs md:hidden',\n className\n )}\n >\n <div className=\"mx-auto flex w-full max-w-7xl items-center justify-between px-3 py-2\">\n <div className=\"flex items-center gap-2\">\n <Sheet open={open} onOpenChange={setOpen}>\n <SheetTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" aria-label=\"Open menu\">\n <Menu className=\"h-5 w-5\" />\n </Button>\n </SheetTrigger>\n <SheetContent side=\"left\" className=\"w-[320px] p-4\">\n <SheetHeader>\n <SheetTitle>Menu</SheetTitle>\n <SheetDescription>\n <div className=\"mb-3\">\n <CommandSearchTrigger groups={[]} compact />\n </div>\n <MobileNavMenu items={nav} />\n </SheetDescription>\n </SheetHeader>\n <VStack>\n <MobileNavMenu items={nav} />\n </VStack>\n <SheetFooter>\n {right}\n {/* todo */}\n </SheetFooter>\n </SheetContent>\n </Sheet>\n {logo}\n </div>\n <div className=\"flex items-center gap-2\">\n <LangSwitchDropdown\n value={'en'}\n options={[\n { code: 'fr', label: 'FR' },\n { code: 'en', label: 'EN' },\n ]}\n onChange={() => {\n /* noop */\n }}\n />\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AAqBA,SAAgB,sBAAsB,EACpC,MACA,MAAM,EAAE,EACR,WACA,SACuB;CACvB,MAAM,CAAC,MAAM,WAAWA,QAAM,SAAS,MAAM;AAC7C,QACE,oBAAC;EACC,WAAW,GACT,yGACA,UACD;YAED,qBAAC;GAAI,WAAU;cACb,qBAAC;IAAI,WAAU;eACb,qBAAC;KAAY;KAAM,cAAc;gBAC/B,oBAAC;MAAa;gBACZ,oBAAC;OAAO,SAAQ;OAAQ,MAAK;OAAO,cAAW;iBAC7C,oBAAC,QAAK,WAAU,YAAY;QACrB;OACI,EACf,qBAAC;MAAa,MAAK;MAAO,WAAU;;OAClC,qBAAC,0BACC,oBAAC,wBAAW,SAAiB,EAC7B,qBAAC,+BACC,oBAAC;QAAI,WAAU;kBACb,oBAAC;SAAqB,QAAQ,EAAE;SAAE;UAAU;SACxC,EACN,oBAAC,iBAAc,OAAO,MAAO,IACZ,IACP;OACd,oBAAC,oBACC,oBAAC,iBAAc,OAAO,MAAO,GACtB;OACT,oBAAC,yBACE,QAEW;;OACD;MACT,EACP;KACG,EACN,oBAAC;IAAI,WAAU;cACb,oBAAC;KACC,OAAO;KACP,SAAS,CACP;MAAE,MAAM;MAAM,OAAO;MAAM,EAC3B;MAAE,MAAM;MAAM,OAAO;MAAM,CAC5B;KACD,gBAAgB;MAGhB;KACE;IACF;GACF"}
@@ -2,7 +2,7 @@ import * as react_jsx_runtime61 from "react/jsx-runtime";
2
2
  import { PageHeaderProps } from "@lssm/lib.ui-kit-web/ui/page-header";
3
3
 
4
4
  //#region src/components/organisms/PageHeaderResponsive.d.ts
5
- interface PageHeaderResponsiveProps extends PageHeaderProps {}
5
+ type PageHeaderResponsiveProps = PageHeaderProps;
6
6
  declare function PageHeaderResponsive(props: PageHeaderResponsiveProps): react_jsx_runtime61.JSX.Element;
7
7
  //#endregion
8
8
  export { PageHeaderResponsive };
@@ -1 +1 @@
1
- {"version":3,"file":"PageHeaderResponsive.d.ts","names":[],"sources":["../../../src/components/organisms/PageHeaderResponsive.tsx"],"sourcesContent":[],"mappings":";;;;UASiB,yBAAA,SAAkC;iBAEnC,oBAAA,QAA4B,4BAAyB,mBAAA,CAAA,GAAA,CAAA"}
1
+ {"version":3,"file":"PageHeaderResponsive.d.ts","names":[],"sources":["../../../src/components/organisms/PageHeaderResponsive.tsx"],"sourcesContent":[],"mappings":";;;;KASY,yBAAA,GAA4B;iBAExB,oBAAA,QAA4B,4BAAyB,mBAAA,CAAA,GAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"PageHeaderResponsive.js","names":["WebPageHeader"],"sources":["../../../src/components/organisms/PageHeaderResponsive.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport {\n PageHeader as WebPageHeader,\n type PageHeaderProps,\n} from '@lssm/lib.ui-kit-web/ui/page-header';\nimport { useResponsive } from '../../platform/useResponsive';\n\nexport interface PageHeaderResponsiveProps extends PageHeaderProps {}\n\nexport function PageHeaderResponsive(props: PageHeaderResponsiveProps) {\n const { screen } = useResponsive();\n const spacing =\n screen === 'desktop' ? 'lg' : screen === 'tablet' ? 'md' : 'sm';\n return (\n <WebPageHeader {...props} spacing={props.spacing ?? (spacing as any)} />\n );\n}\n"],"mappings":";;;;;;;;AAWA,SAAgB,qBAAqB,OAAkC;CACrE,MAAM,EAAE,WAAW,eAAe;CAClC,MAAM,UACJ,WAAW,YAAY,OAAO,WAAW,WAAW,OAAO;AAC7D,QACE,oBAACA;EAAc,GAAI;EAAO,SAAS,MAAM,WAAY;GAAmB"}
1
+ {"version":3,"file":"PageHeaderResponsive.js","names":["WebPageHeader"],"sources":["../../../src/components/organisms/PageHeaderResponsive.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport {\n PageHeader as WebPageHeader,\n type PageHeaderProps,\n} from '@lssm/lib.ui-kit-web/ui/page-header';\nimport { useResponsive } from '../../platform/useResponsive';\n\nexport type PageHeaderResponsiveProps = PageHeaderProps;\n\nexport function PageHeaderResponsive(props: PageHeaderResponsiveProps) {\n const { screen } = useResponsive();\n const spacing =\n screen === 'desktop' ? 'lg' : screen === 'tablet' ? 'md' : 'sm';\n return (\n <WebPageHeader\n {...props}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n spacing={props.spacing ?? (spacing as any)}\n />\n );\n}\n"],"mappings":";;;;;;;;AAWA,SAAgB,qBAAqB,OAAkC;CACrE,MAAM,EAAE,WAAW,eAAe;CAClC,MAAM,UACJ,WAAW,YAAY,OAAO,WAAW,WAAW,OAAO;AAC7D,QACE,oBAACA;EACC,GAAI;EAEJ,SAAS,MAAM,WAAY;GAC3B"}
@@ -2,7 +2,7 @@ import { ListPageTemplateProps } from "./types.js";
2
2
  import * as react_jsx_runtime110 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/templates/lists/ListPageTemplate/index.web.d.ts
5
- declare function ListPageTemplate<T = any>({
5
+ declare function ListPageTemplate<T = unknown>({
6
6
  children,
7
7
  title,
8
8
  description,
@@ -1 +1 @@
1
- {"version":3,"file":"index.web.js","names":["React"],"sources":["../../../../../src/components/templates/lists/ListPageTemplate/index.web.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cva } from 'class-variance-authority';\nimport { cn } from '@lssm/lib.ui-kit-web/ui/utils';\nimport { PageHeaderResponsive } from '../../../organisms/PageHeaderResponsive';\nimport { FiltersToolbar } from '../../../molecules/FiltersToolbar';\nimport { AiLinkButton } from '../../../molecules/AiLinkButton';\nimport type { ListPageTemplateProps } from './types';\nimport { Skeleton } from '@lssm/lib.ui-kit-web/ui/skeleton';\nimport { Card, CardContent } from '@lssm/lib.ui-kit-web/ui/card';\nimport { EmptyDataList } from '../../../organisms/EmptyDataList';\n\nconst containerVariants = cva('space-y-4 md:space-y-6');\n\nexport * from './types';\n\nexport function ListPageTemplate<T = any>({\n children,\n title,\n description,\n breadcrumb,\n actions,\n className,\n searchPlaceholder,\n searchValue,\n onSearchChange,\n onSearchSubmit,\n isLoading,\n data,\n renderItem,\n emptyProps,\n}: ListPageTemplateProps<T>) {\n const mdHref = React.useMemo(() => {\n if (typeof window === 'undefined') return undefined;\n const url = new URL(window.location.href);\n url.pathname = url.pathname.replace(/\\/$/, '') + '.md';\n return url.toString();\n }, []);\n\n const renderEmpty = () => {\n return (\n <Card>\n <CardContent>\n <EmptyDataList {...emptyProps} />\n </CardContent>\n </Card>\n );\n };\n\n return (\n <div className={cn(containerVariants(), className)}>\n <PageHeaderResponsive\n title={title}\n subtitle={description}\n breadcrumb={breadcrumb}\n actions={\n <>\n {actions}\n {mdHref && <AiLinkButton href={mdHref} />}\n </>\n }\n />\n <FiltersToolbar\n searchPlaceholder={searchPlaceholder}\n searchValue={searchValue}\n onSearchChange={onSearchChange}\n onSearchSubmit={onSearchSubmit}\n />\n <div className=\"space-y-2\">\n {data?.map((item, index) => (\n <div key={index}>{renderItem({ item, index })}</div>\n ))}\n {!data?.length &&\n (isLoading\n ? Array.from({ length: 10 }).map((_, index) => (\n <Skeleton key={index} className=\"h-20 w-full rounded-md\" />\n ))\n : renderEmpty())}\n </div>\n\n {children}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAWA,MAAM,oBAAoB,IAAI,yBAAyB;AAIvD,SAAgB,iBAA0B,EACxC,UACA,OACA,aACA,YACA,SACA,WACA,mBACA,aACA,gBACA,gBACA,WACA,MACA,YACA,cAC2B;CAC3B,MAAM,SAASA,QAAM,cAAc;AACjC,MAAI,OAAO,WAAW,YAAa,QAAO;EAC1C,MAAM,MAAM,IAAI,IAAI,OAAO,SAAS,KAAK;AACzC,MAAI,WAAW,IAAI,SAAS,QAAQ,OAAO,GAAG,GAAG;AACjD,SAAO,IAAI,UAAU;IACpB,EAAE,CAAC;CAEN,MAAM,oBAAoB;AACxB,SACE,oBAAC,kBACC,oBAAC,yBACC,oBAAC,iBAAc,GAAI,aAAc,GACrB,GACT;;AAIX,QACE,qBAAC;EAAI,WAAW,GAAG,mBAAmB,EAAE,UAAU;;GAChD,oBAAC;IACQ;IACP,UAAU;IACE;IACZ,SACE,4CACG,SACA,UAAU,oBAAC,gBAAa,MAAM,SAAU,IACxC;KAEL;GACF,oBAAC;IACoB;IACN;IACG;IACA;KAChB;GACF,qBAAC;IAAI,WAAU;eACZ,MAAM,KAAK,MAAM,UAChB,oBAAC,mBAAiB,WAAW;KAAE;KAAM;KAAO,CAAC,IAAnC,MAA0C,CACpD,EACD,CAAC,MAAM,WACL,YACG,MAAM,KAAK,EAAE,QAAQ,IAAI,CAAC,CAAC,KAAK,GAAG,UACjC,oBAAC,YAAqB,WAAU,4BAAjB,MAA4C,CAC3D,GACF,aAAa;KACf;GAEL;;GACG"}
1
+ {"version":3,"file":"index.web.js","names":["React"],"sources":["../../../../../src/components/templates/lists/ListPageTemplate/index.web.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cva } from 'class-variance-authority';\nimport { cn } from '@lssm/lib.ui-kit-web/ui/utils';\nimport { PageHeaderResponsive } from '../../../organisms/PageHeaderResponsive';\nimport { FiltersToolbar } from '../../../molecules/FiltersToolbar';\nimport { AiLinkButton } from '../../../molecules/AiLinkButton';\nimport type { ListPageTemplateProps } from './types';\nimport { Skeleton } from '@lssm/lib.ui-kit-web/ui/skeleton';\nimport { Card, CardContent } from '@lssm/lib.ui-kit-web/ui/card';\nimport { EmptyDataList } from '../../../organisms/EmptyDataList';\n\nconst containerVariants = cva('space-y-4 md:space-y-6');\n\nexport * from './types';\n\nexport function ListPageTemplate<T = unknown>({\n children,\n title,\n description,\n breadcrumb,\n actions,\n className,\n searchPlaceholder,\n searchValue,\n onSearchChange,\n onSearchSubmit,\n isLoading,\n data,\n renderItem,\n emptyProps,\n}: ListPageTemplateProps<T>) {\n const mdHref = React.useMemo(() => {\n if (typeof window === 'undefined') return undefined;\n const url = new URL(window.location.href);\n url.pathname = url.pathname.replace(/\\/$/, '') + '.md';\n return url.toString();\n }, []);\n\n const renderEmpty = () => {\n return (\n <Card>\n <CardContent>\n <EmptyDataList {...emptyProps} />\n </CardContent>\n </Card>\n );\n };\n\n return (\n <div className={cn(containerVariants(), className)}>\n <PageHeaderResponsive\n title={title}\n subtitle={description}\n breadcrumb={breadcrumb}\n actions={\n <>\n {actions}\n {mdHref && <AiLinkButton href={mdHref} />}\n </>\n }\n />\n <FiltersToolbar\n searchPlaceholder={searchPlaceholder}\n searchValue={searchValue}\n onSearchChange={onSearchChange}\n onSearchSubmit={onSearchSubmit}\n />\n <div className=\"space-y-2\">\n {data?.map((item, index) => (\n <div key={index}>{renderItem({ item, index })}</div>\n ))}\n {!data?.length &&\n (isLoading\n ? Array.from({ length: 10 }).map((_, index) => (\n <Skeleton key={index} className=\"h-20 w-full rounded-md\" />\n ))\n : renderEmpty())}\n </div>\n\n {children}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAWA,MAAM,oBAAoB,IAAI,yBAAyB;AAIvD,SAAgB,iBAA8B,EAC5C,UACA,OACA,aACA,YACA,SACA,WACA,mBACA,aACA,gBACA,gBACA,WACA,MACA,YACA,cAC2B;CAC3B,MAAM,SAASA,QAAM,cAAc;AACjC,MAAI,OAAO,WAAW,YAAa,QAAO;EAC1C,MAAM,MAAM,IAAI,IAAI,OAAO,SAAS,KAAK;AACzC,MAAI,WAAW,IAAI,SAAS,QAAQ,OAAO,GAAG,GAAG;AACjD,SAAO,IAAI,UAAU;IACpB,EAAE,CAAC;CAEN,MAAM,oBAAoB;AACxB,SACE,oBAAC,kBACC,oBAAC,yBACC,oBAAC,iBAAc,GAAI,aAAc,GACrB,GACT;;AAIX,QACE,qBAAC;EAAI,WAAW,GAAG,mBAAmB,EAAE,UAAU;;GAChD,oBAAC;IACQ;IACP,UAAU;IACE;IACZ,SACE,4CACG,SACA,UAAU,oBAAC,gBAAa,MAAM,SAAU,IACxC;KAEL;GACF,oBAAC;IACoB;IACN;IACG;IACA;KAChB;GACF,qBAAC;IAAI,WAAU;eACZ,MAAM,KAAK,MAAM,UAChB,oBAAC,mBAAiB,WAAW;KAAE;KAAM;KAAO,CAAC,IAAnC,MAA0C,CACpD,EACD,CAAC,MAAM,WACL,YACG,MAAM,KAAK,EAAE,QAAQ,IAAI,CAAC,CAAC,KAAK,GAAG,UACjC,oBAAC,YAAqB,WAAU,4BAAjB,MAA4C,CAC3D,GACF,aAAa;KACf;GAEL;;GACG"}
@@ -2,7 +2,7 @@ import { EmptyDataListProps } from "../../../organisms/EmptyDataList.types.js";
2
2
  import * as React$1 from "react";
3
3
 
4
4
  //#region src/components/templates/lists/ListPageTemplate/types.d.ts
5
- interface ListPageTemplateProps<T = any> {
5
+ interface ListPageTemplateProps<T = unknown> {
6
6
  children?: React$1.ReactNode;
7
7
  title: React$1.ReactNode;
8
8
  description?: React$1.ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"shadcn.js","names":[],"sources":["../../../../../../../contracts/dist/client/react/drivers/shadcn.js"],"sourcesContent":["//#region src/client/react/drivers/shadcn.ts\n/**\n* Create a shadcn/ui driver by mapping required slots to components.\n* Host apps should import their shadcn primitives and pass them here.\n*/\nfunction shadcnDriver(slots) {\n\treturn slots;\n}\n\n//#endregion\nexport { shadcnDriver };\n//# sourceMappingURL=shadcn.js.map"],"mappings":";;;;;AAKA,SAAS,aAAa,OAAO;AAC5B,QAAO"}
1
+ {"version":3,"file":"shadcn.js","names":[],"sources":["../../../../../../../contracts/dist/client/react/drivers/shadcn.js"],"sourcesContent":["//#region src/client/react/drivers/shadcn.ts\n/**\n* Create a shadcn/ui driver by mapping required slots to components.\n* Host apps should import their shadcn primitives and pass them here.\n*/\nfunction shadcnDriver(slots) {\n\treturn slots;\n}\n\n//#endregion\nexport { shadcnDriver };"],"mappings":";;;;;AAKA,SAAS,aAAa,OAAO;AAC5B,QAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"form-render.js","names":[],"sources":["../../../../../../contracts/dist/client/react/form-render.js"],"sourcesContent":["import { buildZodWithRelations, evalPredicate } from \"../../forms.js\";\nimport React, { useEffect, useMemo, useState } from \"react\";\nimport { Controller, useFieldArray, useForm } from \"react-hook-form\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\n\n//#region src/client/react/form-render.tsx\nfunction toOptionsArray(src) {\n\tif (!src) return void 0;\n\tif (Array.isArray(src)) return {\n\t\tkind: \"static\",\n\t\toptions: src\n\t};\n\treturn src;\n}\nfunction getAtPath(values, path) {\n\tif (!path) return void 0;\n\tconst segs = path.replace(/\\[(\\d+)\\]/g, \".$1\").split(\".\").filter(Boolean);\n\tlet cur = values;\n\tfor (const s of segs) {\n\t\tif (cur == null) return void 0;\n\t\tcur = cur[s];\n\t}\n\treturn cur;\n}\nfunction makeDepsKey(values, deps) {\n\tif (!deps || deps.length === 0) return \"[]\";\n\ttry {\n\t\treturn JSON.stringify(deps.map((d) => getAtPath(values, d)));\n\t} catch {\n\t\treturn \"[]\";\n\t}\n}\nfunction useResolvedOptions(values, source, resolvers) {\n\tconst [opts, setOpts] = useState([]);\n\tuseEffect(() => {\n\t\tlet mounted = true;\n\t\tconst run = async () => {\n\t\t\tif (!source) return setOpts([]);\n\t\t\tif (source.kind === \"static\") return setOpts([...source.options ?? []]);\n\t\t\tconst fn = resolvers?.[source.resolverKey];\n\t\t\tif (!fn) return setOpts([]);\n\t\t\tconst res = await fn(values, source.args);\n\t\t\tif (mounted) setOpts([...res ?? []]);\n\t\t};\n\t\trun();\n\t\treturn () => {\n\t\t\tmounted = false;\n\t\t};\n\t}, [useMemo(() => {\n\t\tif (!source) return \"nil\";\n\t\tif (source.kind === \"static\") return JSON.stringify(source.options ?? []);\n\t\treturn makeDepsKey(values, source.deps);\n\t}, [source, values]), source && source.kind === \"resolver\" ? source.resolverKey : void 0]);\n\treturn opts;\n}\nfunction fieldPath(parent, name, arrayIndex) {\n\tif (!name) return parent ?? \"\";\n\tconst child = typeof arrayIndex === \"number\" ? `${name.replace(/^\\$index$/, String(arrayIndex))}` : name;\n\treturn parent ? `${parent}${typeof arrayIndex === \"number\" ? `.${arrayIndex}` : \"\"}.${child}`.replace(/\\.+/g, \".\") : child;\n}\nfunction createFormRenderer(base) {\n\tconst conf = base;\n\tconst { driver } = conf;\n\tfunction InternalForm(props) {\n\t\tconst { spec, options, merged } = props;\n\t\tconst baseZod = useMemo(() => buildZodWithRelations(spec), [spec]);\n\t\tconst form = useForm({\n\t\t\t...merged.formOptions,\n\t\t\tresolver: zodResolver(baseZod),\n\t\t\tdefaultValues: options?.defaultValues\n\t\t});\n\t\tconst values = form.watch();\n\t\tconst renderOne = (f, parent, arrayIndex) => {\n\t\t\tconst DriverField = driver.Field;\n\t\t\tconst DriverLabel = driver.FieldLabel;\n\t\t\tconst DriverDesc = driver.FieldDescription;\n\t\t\tconst DriverError = driver.FieldError;\n\t\t\tconst name = fieldPath(parent, f.name, arrayIndex);\n\t\t\tconst visible = evalPredicate(values, f.visibleWhen);\n\t\t\tconst enabled = evalPredicate(values, f.enabledWhen);\n\t\t\tconst invalid = Boolean(form.getFieldState(name)?.invalid);\n\t\t\tif (!visible) return null;\n\t\t\tconst id = name?.replace(/\\./g, \"-\");\n\t\t\tconst commonWrapProps = {\n\t\t\t\t\"data-invalid\": invalid,\n\t\t\t\thidden: !visible,\n\t\t\t\tdisabled: !enabled\n\t\t\t};\n\t\t\tconst labelNode = f.labelI18n ? /* @__PURE__ */ jsx(DriverLabel, {\n\t\t\t\thtmlFor: id,\n\t\t\t\tchildren: f.labelI18n\n\t\t\t}) : null;\n\t\t\tconst descNode = f.descriptionI18n ? /* @__PURE__ */ jsx(DriverDesc, { children: f.descriptionI18n }) : null;\n\t\t\tif (f.kind === \"group\") {\n\t\t\t\tconst children = f.fields.map((c, i) => /* @__PURE__ */ jsx(React.Fragment, { children: renderOne(c, name, arrayIndex) }, `${name}-${i}`));\n\t\t\t\treturn /* @__PURE__ */ jsxs(DriverField, {\n\t\t\t\t\t...commonWrapProps,\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\tlabelNode,\n\t\t\t\t\t\tchildren,\n\t\t\t\t\t\tdescNode\n\t\t\t\t\t]\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (f.kind === \"array\") return renderArray(f, parent);\n\t\t\treturn /* @__PURE__ */ jsx(Controller, {\n\t\t\t\tname,\n\t\t\t\tcontrol: form.control,\n\t\t\t\trender: ({ field, fieldState }) => {\n\t\t\t\t\tconst err = fieldState.error ? [fieldState.error] : [];\n\t\t\t\t\tconst ariaInvalid = fieldState.invalid || void 0;\n\t\t\t\t\tif (f.kind === \"text\") {\n\t\t\t\t\t\tconst textField = f;\n\t\t\t\t\t\tconst Input = driver.Input;\n\t\t\t\t\t\treturn /* @__PURE__ */ jsxs(DriverField, {\n\t\t\t\t\t\t\t...commonWrapProps,\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\tlabelNode,\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(Input, {\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\t\"aria-invalid\": ariaInvalid,\n\t\t\t\t\t\t\t\t\tplaceholder: f.placeholderI18n,\n\t\t\t\t\t\t\t\t\tautoComplete: textField.autoComplete,\n\t\t\t\t\t\t\t\t\tinputMode: textField.inputMode,\n\t\t\t\t\t\t\t\t\tmaxLength: textField.maxLength,\n\t\t\t\t\t\t\t\t\tminLength: textField.minLength,\n\t\t\t\t\t\t\t\t\tdisabled: !enabled,\n\t\t\t\t\t\t\t\t\t...field,\n\t\t\t\t\t\t\t\t\t...f.uiProps\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tdescNode,\n\t\t\t\t\t\t\t\tfieldState.invalid ? /* @__PURE__ */ jsx(DriverError, { errors: err }) : null\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (f.kind === \"textarea\") {\n\t\t\t\t\t\tconst textareaField = f;\n\t\t\t\t\t\tconst Textarea = driver.Textarea;\n\t\t\t\t\t\treturn /* @__PURE__ */ jsxs(DriverField, {\n\t\t\t\t\t\t\t...commonWrapProps,\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\tlabelNode,\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(Textarea, {\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\t\"aria-invalid\": ariaInvalid,\n\t\t\t\t\t\t\t\t\tplaceholder: f.placeholderI18n,\n\t\t\t\t\t\t\t\t\trows: textareaField.rows,\n\t\t\t\t\t\t\t\t\tmaxLength: textareaField.maxLength,\n\t\t\t\t\t\t\t\t\tdisabled: !enabled,\n\t\t\t\t\t\t\t\t\t...field,\n\t\t\t\t\t\t\t\t\t...f.uiProps\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tdescNode,\n\t\t\t\t\t\t\t\tfieldState.invalid ? /* @__PURE__ */ jsx(DriverError, { errors: err }) : null\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (f.kind === \"select\") {\n\t\t\t\t\t\tconst selectField = f;\n\t\t\t\t\t\tconst Select = driver.Select;\n\t\t\t\t\t\tconst opts = useResolvedOptions(values, toOptionsArray(selectField.options), merged.resolvers);\n\t\t\t\t\t\treturn /* @__PURE__ */ jsxs(DriverField, {\n\t\t\t\t\t\t\t...commonWrapProps,\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\tlabelNode,\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(Select, {\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\t\"aria-invalid\": ariaInvalid,\n\t\t\t\t\t\t\t\t\tdisabled: !enabled,\n\t\t\t\t\t\t\t\t\tvalue: field.value,\n\t\t\t\t\t\t\t\t\tonChange: (v) => field.onChange(v),\n\t\t\t\t\t\t\t\t\toptions: opts,\n\t\t\t\t\t\t\t\t\t...f.uiProps\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tdescNode,\n\t\t\t\t\t\t\t\tfieldState.invalid ? /* @__PURE__ */ jsx(DriverError, { errors: err }) : null\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (f.kind === \"checkbox\") {\n\t\t\t\t\t\tconst Checkbox = driver.Checkbox;\n\t\t\t\t\t\treturn /* @__PURE__ */ jsxs(DriverField, {\n\t\t\t\t\t\t\t...commonWrapProps,\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\tlabelNode,\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(Checkbox, {\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\tdisabled: !enabled,\n\t\t\t\t\t\t\t\t\tchecked: !!field.value,\n\t\t\t\t\t\t\t\t\tonCheckedChange: (v) => field.onChange(v),\n\t\t\t\t\t\t\t\t\t...f.uiProps\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tdescNode,\n\t\t\t\t\t\t\t\tfieldState.invalid ? /* @__PURE__ */ jsx(DriverError, { errors: err }) : null\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (f.kind === \"radio\") {\n\t\t\t\t\t\tconst radioField = f;\n\t\t\t\t\t\tconst RadioGroup = driver.RadioGroup;\n\t\t\t\t\t\tconst opts = useResolvedOptions(values, toOptionsArray(radioField.options), merged.resolvers);\n\t\t\t\t\t\treturn /* @__PURE__ */ jsxs(DriverField, {\n\t\t\t\t\t\t\t...commonWrapProps,\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\tlabelNode,\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(RadioGroup, {\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\tdisabled: !enabled,\n\t\t\t\t\t\t\t\t\tvalue: field.value,\n\t\t\t\t\t\t\t\t\tonValueChange: (v) => field.onChange(v),\n\t\t\t\t\t\t\t\t\toptions: opts,\n\t\t\t\t\t\t\t\t\t...f.uiProps\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tdescNode,\n\t\t\t\t\t\t\t\tfieldState.invalid ? /* @__PURE__ */ jsx(DriverError, { errors: err }) : null\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (f.kind === \"switch\") {\n\t\t\t\t\t\tconst Switch = driver.Switch;\n\t\t\t\t\t\treturn /* @__PURE__ */ jsxs(DriverField, {\n\t\t\t\t\t\t\t...commonWrapProps,\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\tlabelNode,\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(Switch, {\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\tdisabled: !enabled,\n\t\t\t\t\t\t\t\t\tchecked: !!field.value,\n\t\t\t\t\t\t\t\t\tonCheckedChange: (v) => field.onChange(v),\n\t\t\t\t\t\t\t\t\t...f.uiProps\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tdescNode,\n\t\t\t\t\t\t\t\tfieldState.invalid ? /* @__PURE__ */ jsx(DriverError, { errors: err }) : null\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn /* @__PURE__ */ jsx(Fragment, {});\n\t\t\t\t}\n\t\t\t}, name);\n\t\t};\n\t\tconst renderArray = (f, parent) => {\n\t\t\tconst name = fieldPath(parent, f.name);\n\t\t\tconst { fields, append, remove } = useFieldArray({\n\t\t\t\tcontrol: form.control,\n\t\t\t\tname\n\t\t\t});\n\t\t\tconst canAdd = f.max == null || fields.length < f.max;\n\t\t\tconst canRemove = (idx) => (f.min == null ? fields.length > 0 : fields.length > f.min) && idx >= 0;\n\t\t\tconst Button$1 = driver.Button;\n\t\t\tconst Label = driver.FieldLabel;\n\t\t\treturn /* @__PURE__ */ jsxs(\"div\", { children: [\n\t\t\t\tf.labelI18n ? /* @__PURE__ */ jsx(Label, { children: f.labelI18n }) : null,\n\t\t\t\tfields.map((row, idx) => /* @__PURE__ */ jsxs(\"div\", { children: [renderOne(f.of, name, idx), canRemove(idx) ? /* @__PURE__ */ jsx(Button$1, {\n\t\t\t\t\ttype: \"button\",\n\t\t\t\t\tvariant: \"ghost\",\n\t\t\t\t\tsize: \"sm\",\n\t\t\t\t\tonClick: () => remove(idx),\n\t\t\t\t\tchildren: \"Remove\"\n\t\t\t\t}) : null] }, row.id ?? idx)),\n\t\t\t\tcanAdd ? /* @__PURE__ */ jsx(Button$1, {\n\t\t\t\t\ttype: \"button\",\n\t\t\t\t\tvariant: \"outline\",\n\t\t\t\t\tsize: \"sm\",\n\t\t\t\t\tonClick: () => append({}),\n\t\t\t\t\tchildren: \"Add\"\n\t\t\t\t}) : null\n\t\t\t] }, name);\n\t\t};\n\t\tconst onSubmit = async (data) => {\n\t\t\tconst actionKey = spec.actions?.[0]?.key ?? \"submit\";\n\t\t\tif (merged.onSubmitOverride) return merged.onSubmitOverride(data, actionKey);\n\t\t};\n\t\tconst Button = driver.Button;\n\t\treturn /* @__PURE__ */ jsxs(\"form\", {\n\t\t\tonSubmit: form.handleSubmit(onSubmit),\n\t\t\tchildren: [(spec.fields || []).map((f, i) => /* @__PURE__ */ jsx(React.Fragment, { children: renderOne(f) }, i)), spec.actions && spec.actions.length ? /* @__PURE__ */ jsx(\"div\", { children: spec.actions.map((a) => /* @__PURE__ */ jsx(Button, {\n\t\t\t\ttype: \"submit\",\n\t\t\t\tchildren: a.labelI18n\n\t\t\t}, a.key)) }) : null]\n\t\t});\n\t}\n\treturn { render: (spec, options) => /* @__PURE__ */ jsx(InternalForm, {\n\t\tspec,\n\t\toptions,\n\t\tmerged: {\n\t\t\t...conf,\n\t\t\t...options?.overrides ?? {}\n\t\t}\n\t}) };\n}\n\n//#endregion\nexport { createFormRenderer };\n//# sourceMappingURL=form-render.js.map"],"mappings":"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"}
1
+ {"version":3,"file":"form-render.js","names":[],"sources":["../../../../../../contracts/dist/client/react/form-render.js"],"sourcesContent":["import { buildZodWithRelations, evalPredicate } from \"../../forms.js\";\nimport React, { useEffect, useMemo, useState } from \"react\";\nimport { Controller, useFieldArray, useForm } from \"react-hook-form\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\n\n//#region src/client/react/form-render.tsx\nfunction toOptionsArray(src) {\n\tif (!src) return void 0;\n\tif (Array.isArray(src)) return {\n\t\tkind: \"static\",\n\t\toptions: src\n\t};\n\treturn src;\n}\nfunction getAtPath(values, path) {\n\tif (!path) return void 0;\n\tconst segs = path.replace(/\\[(\\d+)\\]/g, \".$1\").split(\".\").filter(Boolean);\n\tlet cur = values;\n\tfor (const s of segs) {\n\t\tif (cur == null) return void 0;\n\t\tcur = cur[s];\n\t}\n\treturn cur;\n}\nfunction makeDepsKey(values, deps) {\n\tif (!deps || deps.length === 0) return \"[]\";\n\ttry {\n\t\treturn JSON.stringify(deps.map((d) => getAtPath(values, d)));\n\t} catch {\n\t\treturn \"[]\";\n\t}\n}\nfunction useResolvedOptions(values, source, resolvers) {\n\tconst [opts, setOpts] = useState([]);\n\tuseEffect(() => {\n\t\tlet mounted = true;\n\t\tconst run = async () => {\n\t\t\tif (!source) return setOpts([]);\n\t\t\tif (source.kind === \"static\") return setOpts([...source.options ?? []]);\n\t\t\tconst fn = resolvers?.[source.resolverKey];\n\t\t\tif (!fn) return setOpts([]);\n\t\t\tconst res = await fn(values, source.args);\n\t\t\tif (mounted) setOpts([...res ?? []]);\n\t\t};\n\t\trun();\n\t\treturn () => {\n\t\t\tmounted = false;\n\t\t};\n\t}, [useMemo(() => {\n\t\tif (!source) return \"nil\";\n\t\tif (source.kind === \"static\") return JSON.stringify(source.options ?? []);\n\t\treturn makeDepsKey(values, source.deps);\n\t}, [source, values]), source && source.kind === \"resolver\" ? source.resolverKey : void 0]);\n\treturn opts;\n}\nfunction fieldPath(parent, name, arrayIndex) {\n\tif (!name) return parent ?? \"\";\n\tconst child = typeof arrayIndex === \"number\" ? `${name.replace(/^\\$index$/, String(arrayIndex))}` : name;\n\treturn parent ? `${parent}${typeof arrayIndex === \"number\" ? `.${arrayIndex}` : \"\"}.${child}`.replace(/\\.+/g, \".\") : child;\n}\nfunction createFormRenderer(base) {\n\tconst conf = base;\n\tconst { driver } = conf;\n\tfunction InternalForm(props) {\n\t\tconst { spec, options, merged } = props;\n\t\tconst baseZod = useMemo(() => buildZodWithRelations(spec), [spec]);\n\t\tconst form = useForm({\n\t\t\t...merged.formOptions,\n\t\t\tresolver: zodResolver(baseZod),\n\t\t\tdefaultValues: options?.defaultValues\n\t\t});\n\t\tconst values = form.watch();\n\t\tconst renderOne = (f, parent, arrayIndex) => {\n\t\t\tconst DriverField = driver.Field;\n\t\t\tconst DriverLabel = driver.FieldLabel;\n\t\t\tconst DriverDesc = driver.FieldDescription;\n\t\t\tconst DriverError = driver.FieldError;\n\t\t\tconst name = fieldPath(parent, f.name, arrayIndex);\n\t\t\tconst visible = evalPredicate(values, f.visibleWhen);\n\t\t\tconst enabled = evalPredicate(values, f.enabledWhen);\n\t\t\tconst invalid = Boolean(form.getFieldState(name)?.invalid);\n\t\t\tif (!visible) return null;\n\t\t\tconst id = name?.replace(/\\./g, \"-\");\n\t\t\tconst commonWrapProps = {\n\t\t\t\t\"data-invalid\": invalid,\n\t\t\t\thidden: !visible,\n\t\t\t\tdisabled: !enabled\n\t\t\t};\n\t\t\tconst labelNode = f.labelI18n ? /* @__PURE__ */ jsx(DriverLabel, {\n\t\t\t\thtmlFor: id,\n\t\t\t\tchildren: f.labelI18n\n\t\t\t}) : null;\n\t\t\tconst descNode = f.descriptionI18n ? /* @__PURE__ */ jsx(DriverDesc, { children: f.descriptionI18n }) : null;\n\t\t\tif (f.kind === \"group\") {\n\t\t\t\tconst children = f.fields.map((c, i) => /* @__PURE__ */ jsx(React.Fragment, { children: renderOne(c, name, arrayIndex) }, `${name}-${i}`));\n\t\t\t\treturn /* @__PURE__ */ jsxs(DriverField, {\n\t\t\t\t\t...commonWrapProps,\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\tlabelNode,\n\t\t\t\t\t\tchildren,\n\t\t\t\t\t\tdescNode\n\t\t\t\t\t]\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (f.kind === \"array\") return renderArray(f, parent);\n\t\t\treturn /* @__PURE__ */ jsx(Controller, {\n\t\t\t\tname,\n\t\t\t\tcontrol: form.control,\n\t\t\t\trender: ({ field, fieldState }) => {\n\t\t\t\t\tconst err = fieldState.error ? [fieldState.error] : [];\n\t\t\t\t\tconst ariaInvalid = fieldState.invalid || void 0;\n\t\t\t\t\tif (f.kind === \"text\") {\n\t\t\t\t\t\tconst textField = f;\n\t\t\t\t\t\tconst Input = driver.Input;\n\t\t\t\t\t\treturn /* @__PURE__ */ jsxs(DriverField, {\n\t\t\t\t\t\t\t...commonWrapProps,\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\tlabelNode,\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(Input, {\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\t\"aria-invalid\": ariaInvalid,\n\t\t\t\t\t\t\t\t\tplaceholder: f.placeholderI18n,\n\t\t\t\t\t\t\t\t\tautoComplete: textField.autoComplete,\n\t\t\t\t\t\t\t\t\tinputMode: textField.inputMode,\n\t\t\t\t\t\t\t\t\tmaxLength: textField.maxLength,\n\t\t\t\t\t\t\t\t\tminLength: textField.minLength,\n\t\t\t\t\t\t\t\t\tdisabled: !enabled,\n\t\t\t\t\t\t\t\t\t...field,\n\t\t\t\t\t\t\t\t\t...f.uiProps\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tdescNode,\n\t\t\t\t\t\t\t\tfieldState.invalid ? /* @__PURE__ */ jsx(DriverError, { errors: err }) : null\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (f.kind === \"textarea\") {\n\t\t\t\t\t\tconst textareaField = f;\n\t\t\t\t\t\tconst Textarea = driver.Textarea;\n\t\t\t\t\t\treturn /* @__PURE__ */ jsxs(DriverField, {\n\t\t\t\t\t\t\t...commonWrapProps,\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\tlabelNode,\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(Textarea, {\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\t\"aria-invalid\": ariaInvalid,\n\t\t\t\t\t\t\t\t\tplaceholder: f.placeholderI18n,\n\t\t\t\t\t\t\t\t\trows: textareaField.rows,\n\t\t\t\t\t\t\t\t\tmaxLength: textareaField.maxLength,\n\t\t\t\t\t\t\t\t\tdisabled: !enabled,\n\t\t\t\t\t\t\t\t\t...field,\n\t\t\t\t\t\t\t\t\t...f.uiProps\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tdescNode,\n\t\t\t\t\t\t\t\tfieldState.invalid ? /* @__PURE__ */ jsx(DriverError, { errors: err }) : null\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (f.kind === \"select\") {\n\t\t\t\t\t\tconst selectField = f;\n\t\t\t\t\t\tconst Select = driver.Select;\n\t\t\t\t\t\tconst opts = useResolvedOptions(values, toOptionsArray(selectField.options), merged.resolvers);\n\t\t\t\t\t\treturn /* @__PURE__ */ jsxs(DriverField, {\n\t\t\t\t\t\t\t...commonWrapProps,\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\tlabelNode,\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(Select, {\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\t\"aria-invalid\": ariaInvalid,\n\t\t\t\t\t\t\t\t\tdisabled: !enabled,\n\t\t\t\t\t\t\t\t\tvalue: field.value,\n\t\t\t\t\t\t\t\t\tonChange: (v) => field.onChange(v),\n\t\t\t\t\t\t\t\t\toptions: opts,\n\t\t\t\t\t\t\t\t\t...f.uiProps\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tdescNode,\n\t\t\t\t\t\t\t\tfieldState.invalid ? /* @__PURE__ */ jsx(DriverError, { errors: err }) : null\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (f.kind === \"checkbox\") {\n\t\t\t\t\t\tconst Checkbox = driver.Checkbox;\n\t\t\t\t\t\treturn /* @__PURE__ */ jsxs(DriverField, {\n\t\t\t\t\t\t\t...commonWrapProps,\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\tlabelNode,\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(Checkbox, {\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\tdisabled: !enabled,\n\t\t\t\t\t\t\t\t\tchecked: !!field.value,\n\t\t\t\t\t\t\t\t\tonCheckedChange: (v) => field.onChange(v),\n\t\t\t\t\t\t\t\t\t...f.uiProps\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tdescNode,\n\t\t\t\t\t\t\t\tfieldState.invalid ? /* @__PURE__ */ jsx(DriverError, { errors: err }) : null\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (f.kind === \"radio\") {\n\t\t\t\t\t\tconst radioField = f;\n\t\t\t\t\t\tconst RadioGroup = driver.RadioGroup;\n\t\t\t\t\t\tconst opts = useResolvedOptions(values, toOptionsArray(radioField.options), merged.resolvers);\n\t\t\t\t\t\treturn /* @__PURE__ */ jsxs(DriverField, {\n\t\t\t\t\t\t\t...commonWrapProps,\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\tlabelNode,\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(RadioGroup, {\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\tdisabled: !enabled,\n\t\t\t\t\t\t\t\t\tvalue: field.value,\n\t\t\t\t\t\t\t\t\tonValueChange: (v) => field.onChange(v),\n\t\t\t\t\t\t\t\t\toptions: opts,\n\t\t\t\t\t\t\t\t\t...f.uiProps\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tdescNode,\n\t\t\t\t\t\t\t\tfieldState.invalid ? /* @__PURE__ */ jsx(DriverError, { errors: err }) : null\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (f.kind === \"switch\") {\n\t\t\t\t\t\tconst Switch = driver.Switch;\n\t\t\t\t\t\treturn /* @__PURE__ */ jsxs(DriverField, {\n\t\t\t\t\t\t\t...commonWrapProps,\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\tlabelNode,\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(Switch, {\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\tdisabled: !enabled,\n\t\t\t\t\t\t\t\t\tchecked: !!field.value,\n\t\t\t\t\t\t\t\t\tonCheckedChange: (v) => field.onChange(v),\n\t\t\t\t\t\t\t\t\t...f.uiProps\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tdescNode,\n\t\t\t\t\t\t\t\tfieldState.invalid ? /* @__PURE__ */ jsx(DriverError, { errors: err }) : null\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn /* @__PURE__ */ jsx(Fragment, {});\n\t\t\t\t}\n\t\t\t}, name);\n\t\t};\n\t\tconst renderArray = (f, parent) => {\n\t\t\tconst name = fieldPath(parent, f.name);\n\t\t\tconst { fields, append, remove } = useFieldArray({\n\t\t\t\tcontrol: form.control,\n\t\t\t\tname\n\t\t\t});\n\t\t\tconst canAdd = f.max == null || fields.length < f.max;\n\t\t\tconst canRemove = (idx) => (f.min == null ? fields.length > 0 : fields.length > f.min) && idx >= 0;\n\t\t\tconst Button$1 = driver.Button;\n\t\t\tconst Label = driver.FieldLabel;\n\t\t\treturn /* @__PURE__ */ jsxs(\"div\", { children: [\n\t\t\t\tf.labelI18n ? /* @__PURE__ */ jsx(Label, { children: f.labelI18n }) : null,\n\t\t\t\tfields.map((row, idx) => /* @__PURE__ */ jsxs(\"div\", { children: [renderOne(f.of, name, idx), canRemove(idx) ? /* @__PURE__ */ jsx(Button$1, {\n\t\t\t\t\ttype: \"button\",\n\t\t\t\t\tvariant: \"ghost\",\n\t\t\t\t\tsize: \"sm\",\n\t\t\t\t\tonClick: () => remove(idx),\n\t\t\t\t\tchildren: \"Remove\"\n\t\t\t\t}) : null] }, row.id ?? idx)),\n\t\t\t\tcanAdd ? /* @__PURE__ */ jsx(Button$1, {\n\t\t\t\t\ttype: \"button\",\n\t\t\t\t\tvariant: \"outline\",\n\t\t\t\t\tsize: \"sm\",\n\t\t\t\t\tonClick: () => append({}),\n\t\t\t\t\tchildren: \"Add\"\n\t\t\t\t}) : null\n\t\t\t] }, name);\n\t\t};\n\t\tconst onSubmit = async (data) => {\n\t\t\tconst actionKey = spec.actions?.[0]?.key ?? \"submit\";\n\t\t\tif (merged.onSubmitOverride) return merged.onSubmitOverride(data, actionKey);\n\t\t};\n\t\tconst Button = driver.Button;\n\t\treturn /* @__PURE__ */ jsxs(\"form\", {\n\t\t\tonSubmit: form.handleSubmit(onSubmit),\n\t\t\tchildren: [(spec.fields || []).map((f, i) => /* @__PURE__ */ jsx(React.Fragment, { children: renderOne(f) }, i)), spec.actions && spec.actions.length ? /* @__PURE__ */ jsx(\"div\", { children: spec.actions.map((a) => /* @__PURE__ */ jsx(Button, {\n\t\t\t\ttype: \"submit\",\n\t\t\t\tchildren: a.labelI18n\n\t\t\t}, a.key)) }) : null]\n\t\t});\n\t}\n\treturn { render: (spec, options) => /* @__PURE__ */ jsx(InternalForm, {\n\t\tspec,\n\t\toptions,\n\t\tmerged: {\n\t\t\t...conf,\n\t\t\t...options?.overrides ?? {}\n\t\t}\n\t}) };\n}\n\n//#endregion\nexport { createFormRenderer };"],"mappings":"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"}
@@ -5,7 +5,8 @@ function getAtPath(values, path) {
5
5
  let cur = values;
6
6
  for (const s of segs) {
7
7
  if (cur == null) return void 0;
8
- cur = cur[s];
8
+ if (cur && typeof cur === "object" && s in cur) cur = cur[s];
9
+ else return;
9
10
  }
10
11
  return cur;
11
12
  }
@@ -13,7 +14,7 @@ function evalPredicate(values, pred) {
13
14
  if (!pred) return true;
14
15
  if (pred.not) return !evalPredicate(values, pred.not);
15
16
  if (pred.all && pred.all.length) return pred.all.every((p) => evalPredicate(values, p));
16
- if (pred.any && pred.any.length) return pred.any.some((p) => evalPredicate(values, p));
17
+ if (pred.anyOf && pred.anyOf.length) return pred.anyOf.some((p) => evalPredicate(values, p));
17
18
  if (pred.when) {
18
19
  const { path, op = "truthy", value } = pred.when;
19
20
  const v = getAtPath(values, path);
@@ -1 +1 @@
1
- {"version":3,"file":"forms.js","names":[],"sources":["../../../../contracts/dist/forms.js"],"sourcesContent":["//#region src/forms.ts\nfunction formKey(meta) {\n\treturn `${meta.key}.v${meta.version}`;\n}\nvar FormRegistry = class {\n\titems = /* @__PURE__ */ new Map();\n\tregister(spec) {\n\t\tconst key = formKey(spec.meta);\n\t\tif (this.items.has(key)) throw new Error(`Duplicate form ${key}`);\n\t\tthis.items.set(key, spec);\n\t\treturn this;\n\t}\n\tlist() {\n\t\treturn [...this.items.values()];\n\t}\n\tget(key, version) {\n\t\tif (version != null) return this.items.get(`${key}.v${version}`);\n\t\tlet candidate;\n\t\tlet max = -Infinity;\n\t\tfor (const [k, v] of this.items.entries()) {\n\t\t\tif (!k.startsWith(`${key}.v`)) continue;\n\t\t\tif (v.meta.version > max) {\n\t\t\t\tmax = v.meta.version;\n\t\t\t\tcandidate = v;\n\t\t\t}\n\t\t}\n\t\treturn candidate;\n\t}\n};\nfunction getAtPath(values, path) {\n\tif (!path) return void 0;\n\tconst segs = path.replace(/\\[(\\d+)\\]/g, \".$1\").split(\".\").filter(Boolean);\n\tlet cur = values;\n\tfor (const s of segs) {\n\t\tif (cur == null) return void 0;\n\t\tcur = cur[s];\n\t}\n\treturn cur;\n}\nfunction evalPredicate(values, pred) {\n\tif (!pred) return true;\n\tif (pred.not) return !evalPredicate(values, pred.not);\n\tif (pred.all && pred.all.length) return pred.all.every((p) => evalPredicate(values, p));\n\tif (pred.any && pred.any.length) return pred.any.some((p) => evalPredicate(values, p));\n\tif (pred.when) {\n\t\tconst { path, op = \"truthy\", value } = pred.when;\n\t\tconst v = getAtPath(values, path);\n\t\tswitch (op) {\n\t\t\tcase \"equals\": return v === value;\n\t\t\tcase \"notEquals\": return v !== value;\n\t\t\tcase \"in\": return Array.isArray(value) && value.includes(v);\n\t\t\tcase \"notIn\": return Array.isArray(value) && !value.includes(v);\n\t\t\tcase \"gt\": return Number(v) > Number(value);\n\t\t\tcase \"gte\": return Number(v) >= Number(value);\n\t\t\tcase \"lt\": return Number(v) < Number(value);\n\t\t\tcase \"lte\": return Number(v) <= Number(value);\n\t\t\tcase \"empty\": return v == null || (Array.isArray(v) ? v.length === 0 : String(v).length === 0);\n\t\t\tcase \"lengthGt\": return (Array.isArray(v) || typeof v === \"string\") && v.length > Number(value ?? 0);\n\t\t\tcase \"lengthGte\": return (Array.isArray(v) || typeof v === \"string\") && v.length >= Number(value ?? 0);\n\t\t\tcase \"lengthLt\": return (Array.isArray(v) || typeof v === \"string\") && v.length < Number(value ?? 0);\n\t\t\tcase \"lengthLte\": return (Array.isArray(v) || typeof v === \"string\") && v.length <= Number(value ?? 0);\n\t\t\tcase \"truthy\":\n\t\t\tdefault: return Boolean(v);\n\t\t}\n\t}\n\treturn true;\n}\n/**\n* Wrap the base zod schema with relation-driven refinements (requiredWhen, array min/max)\n* and optional custom constraints. Call this when wiring RHF resolver.\n*/\nfunction buildZodWithRelations(spec, handlers) {\n\treturn spec.model.getZod().superRefine((values, ctx) => {\n\t\tconst visit = (field, parentPath) => {\n\t\t\tconst path = field.name ? parentPath ? `${parentPath}.${field.name}` : field.name : parentPath ?? \"\";\n\t\t\tif (field.requiredWhen) {\n\t\t\t\tif (evalPredicate(values, field.requiredWhen)) {\n\t\t\t\t\tconst v = getAtPath(values, path);\n\t\t\t\t\tif (v == null || typeof v === \"string\" && v.trim().length === 0 || Array.isArray(v) && v.length === 0) ctx.addIssue({\n\t\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\t\tpath: path.split(\".\"),\n\t\t\t\t\t\tmessage: \"required\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (field.kind === \"array\") {\n\t\t\t\tconst arr = getAtPath(values, path);\n\t\t\t\tif (field.min != null && Array.isArray(arr) && arr.length < field.min) ctx.addIssue({\n\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\tpath: path.split(\".\"),\n\t\t\t\t\tmessage: `min:${field.min}`\n\t\t\t\t});\n\t\t\t\tif (field.max != null && Array.isArray(arr) && arr.length > field.max) ctx.addIssue({\n\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\tpath: path.split(\".\"),\n\t\t\t\t\tmessage: `max:${field.max}`\n\t\t\t\t});\n\t\t\t\tvisit(field.of, path);\n\t\t\t} else if (field.kind === \"group\") for (const child of field.fields) visit(child, path);\n\t\t};\n\t\tfor (const f of spec.fields) visit(f);\n\t\tif (spec.constraints && handlers) for (const c of spec.constraints) {\n\t\t\tconst fn = handlers[c.key];\n\t\t\tif (!fn) continue;\n\t\t\tconst res = fn(values, c.paths, c.args);\n\t\t\tif (!res.ok) ctx.addIssue({\n\t\t\t\tcode: \"custom\",\n\t\t\t\tpath: (res.path ?? c.paths[0] ?? \"\").split(\".\").filter(Boolean),\n\t\t\t\tmessage: res.message ?? c.messageI18n\n\t\t\t});\n\t\t}\n\t});\n}\nfunction defineFormSpec(spec) {\n\treturn spec;\n}\n\n//#endregion\nexport { FormRegistry, buildZodWithRelations, defineFormSpec, evalPredicate };\n//# sourceMappingURL=forms.js.map"],"mappings":"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"}
1
+ {"version":3,"file":"forms.js","names":[],"sources":["../../../../contracts/dist/forms.js"],"sourcesContent":["//#region src/forms.ts\nfunction formKey(meta) {\n\treturn `${meta.key}.v${meta.version}`;\n}\nvar FormRegistry = class {\n\titems = /* @__PURE__ */ new Map();\n\tregister(spec) {\n\t\tconst key = formKey(spec.meta);\n\t\tif (this.items.has(key)) throw new Error(`Duplicate form ${key}`);\n\t\tthis.items.set(key, spec);\n\t\treturn this;\n\t}\n\tlist() {\n\t\treturn [...this.items.values()];\n\t}\n\tget(key, version) {\n\t\tif (version != null) return this.items.get(`${key}.v${version}`);\n\t\tlet candidate;\n\t\tlet max = -Infinity;\n\t\tfor (const [k, v] of this.items.entries()) {\n\t\t\tif (!k.startsWith(`${key}.v`)) continue;\n\t\t\tif (v.meta.version > max) {\n\t\t\t\tmax = v.meta.version;\n\t\t\t\tcandidate = v;\n\t\t\t}\n\t\t}\n\t\treturn candidate;\n\t}\n};\nfunction getAtPath(values, path) {\n\tif (!path) return void 0;\n\tconst segs = path.replace(/\\[(\\d+)\\]/g, \".$1\").split(\".\").filter(Boolean);\n\tlet cur = values;\n\tfor (const s of segs) {\n\t\tif (cur == null) return void 0;\n\t\tif (cur && typeof cur === \"object\" && s in cur) cur = cur[s];\n\t\telse return;\n\t}\n\treturn cur;\n}\nfunction evalPredicate(values, pred) {\n\tif (!pred) return true;\n\tif (pred.not) return !evalPredicate(values, pred.not);\n\tif (pred.all && pred.all.length) return pred.all.every((p) => evalPredicate(values, p));\n\tif (pred.anyOf && pred.anyOf.length) return pred.anyOf.some((p) => evalPredicate(values, p));\n\tif (pred.when) {\n\t\tconst { path, op = \"truthy\", value } = pred.when;\n\t\tconst v = getAtPath(values, path);\n\t\tswitch (op) {\n\t\t\tcase \"equals\": return v === value;\n\t\t\tcase \"notEquals\": return v !== value;\n\t\t\tcase \"in\": return Array.isArray(value) && value.includes(v);\n\t\t\tcase \"notIn\": return Array.isArray(value) && !value.includes(v);\n\t\t\tcase \"gt\": return Number(v) > Number(value);\n\t\t\tcase \"gte\": return Number(v) >= Number(value);\n\t\t\tcase \"lt\": return Number(v) < Number(value);\n\t\t\tcase \"lte\": return Number(v) <= Number(value);\n\t\t\tcase \"empty\": return v == null || (Array.isArray(v) ? v.length === 0 : String(v).length === 0);\n\t\t\tcase \"lengthGt\": return (Array.isArray(v) || typeof v === \"string\") && v.length > Number(value ?? 0);\n\t\t\tcase \"lengthGte\": return (Array.isArray(v) || typeof v === \"string\") && v.length >= Number(value ?? 0);\n\t\t\tcase \"lengthLt\": return (Array.isArray(v) || typeof v === \"string\") && v.length < Number(value ?? 0);\n\t\t\tcase \"lengthLte\": return (Array.isArray(v) || typeof v === \"string\") && v.length <= Number(value ?? 0);\n\t\t\tcase \"truthy\":\n\t\t\tdefault: return Boolean(v);\n\t\t}\n\t}\n\treturn true;\n}\n/**\n* Wrap the base zod schema with relation-driven refinements (requiredWhen, array min/max)\n* and optional custom constraints. Call this when wiring RHF resolver.\n*/\nfunction buildZodWithRelations(spec, handlers) {\n\treturn spec.model.getZod().superRefine((values, ctx) => {\n\t\tconst visit = (field, parentPath) => {\n\t\t\tconst path = field.name ? parentPath ? `${parentPath}.${field.name}` : field.name : parentPath ?? \"\";\n\t\t\tif (field.requiredWhen) {\n\t\t\t\tif (evalPredicate(values, field.requiredWhen)) {\n\t\t\t\t\tconst v = getAtPath(values, path);\n\t\t\t\t\tif (v == null || typeof v === \"string\" && v.trim().length === 0 || Array.isArray(v) && v.length === 0) ctx.addIssue({\n\t\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\t\tpath: path.split(\".\"),\n\t\t\t\t\t\tmessage: \"required\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (field.kind === \"array\") {\n\t\t\t\tconst arr = getAtPath(values, path);\n\t\t\t\tif (field.min != null && Array.isArray(arr) && arr.length < field.min) ctx.addIssue({\n\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\tpath: path.split(\".\"),\n\t\t\t\t\tmessage: `min:${field.min}`\n\t\t\t\t});\n\t\t\t\tif (field.max != null && Array.isArray(arr) && arr.length > field.max) ctx.addIssue({\n\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\tpath: path.split(\".\"),\n\t\t\t\t\tmessage: `max:${field.max}`\n\t\t\t\t});\n\t\t\t\tvisit(field.of, path);\n\t\t\t} else if (field.kind === \"group\") for (const child of field.fields) visit(child, path);\n\t\t};\n\t\tfor (const f of spec.fields) visit(f);\n\t\tif (spec.constraints && handlers) for (const c of spec.constraints) {\n\t\t\tconst fn = handlers[c.key];\n\t\t\tif (!fn) continue;\n\t\t\tconst res = fn(values, c.paths, c.args);\n\t\t\tif (!res.ok) ctx.addIssue({\n\t\t\t\tcode: \"custom\",\n\t\t\t\tpath: (res.path ?? c.paths[0] ?? \"\").split(\".\").filter(Boolean),\n\t\t\t\tmessage: res.message ?? c.messageI18n\n\t\t\t});\n\t\t}\n\t});\n}\nfunction defineFormSpec(spec) {\n\treturn spec;\n}\n\n//#endregion\nexport { FormRegistry, buildZodWithRelations, defineFormSpec, evalPredicate };"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useListUrlState.d.ts","names":[],"sources":["../../src/hooks/useListUrlState.ts"],"sourcesContent":[],"mappings":";UAEiB,8BACE,0BAA0B;EAD5B,CAAA,EAAA,MAAA;EACE,IAAA,EAAA,MAAA;EAA0B,KAAA,EAAA,MAAA;EAMlC,IAAA,CAAA,EAAA,MAAA,GAAA,IAAA;EAAQ,OAAA,EAAR,QAAQ;AAGnB;AACmB,iBADH,eACG,CAAA,iBAAA,MAAA,CAAA,MAAA,EAAA,OAAA,CAAA,GAA0B,MAA1B,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA,CAAA;EAAA,QAAA;EAAA,SAAA;EAAA;CAAA,EAAA;EAA0B,QAAA,EAYjC,YAZiC,CAYpB,QAZoB,CAAA;EAE3C,SAAA,CAAA,EAAA;IACA,CAAA,EAAA,MAAA;IAOA,IAAA,EAAA,MAAA;IAEuB,KAAA,EAAA,MAAA;IAAb,IAAA,EAAA,MAAA;;;EAuCoB,YAAA,CAAA,EAAA,OAAA;CAAb,CAAA,EAAA;EAAR,SAAA,KAAA,cAAA,SAAA,CAAA;EAgCM,SAAA,QAAA,EAAA,CAAA,IAAA,EAhCN,OAgCM,CAhCE,YAgCF,CAhCe,QAgCf,CAAA,CAAA,EAAA,GAAA,IAAA;EACJ,SAAA,SAAA,EAAA,CAAA,GAAA,EAAA,MADI,QACJ,EAAA,KAAA,EAAA,QAAA,CAAA,MAAe,QAAf,CAAA,GAAA,SAAA,GAAA,IAAA,EAAA,GAAA,IAAA;EAAe,SAAA,YAAA,EAAA,GAAA,GAAA,IAAA;CAAQ"}
1
+ {"version":3,"file":"useListUrlState.d.ts","names":[],"sources":["../../src/hooks/useListUrlState.ts"],"sourcesContent":[],"mappings":";UAEiB,8BACE,0BAA0B;EAD5B,CAAA,EAAA,MAAA;EACE,IAAA,EAAA,MAAA;EAA0B,KAAA,EAAA,MAAA;EAMlC,IAAA,CAAA,EAAA,MAAA,GAAA,IAAA;EAAQ,OAAA,EAAR,QAAQ;AAGnB;AACmB,iBADH,eACG,CAAA,iBAAA,MAAA,CAAA,MAAA,EAAA,OAAA,CAAA,GAA0B,MAA1B,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA,CAAA;EAAA,QAAA;EAAA,SAAA;EAAA;CAAA,EAAA;EAA0B,QAAA,EAYjC,YAZiC,CAYpB,QAZoB,CAAA;EAE3C,SAAA,CAAA,EAAA;IACA,CAAA,EAAA,MAAA;IAOA,IAAA,EAAA,MAAA;IAEuB,KAAA,EAAA,MAAA;IAAb,IAAA,EAAA,MAAA;;;EAuCoB,YAAA,CAAA,EAAA,OAAA;CAAb,CAAA,EAAA;EAAR,SAAA,KAAA,cAAA,SAAA,CAAA;EAmCM,SAAA,QAAA,EAAA,CAAA,IAAA,EAnCN,OAmCM,CAnCE,YAmCF,CAnCe,QAmCf,CAAA,CAAA,EAAA,GAAA,IAAA;EACJ,SAAA,SAAA,EAAA,CAAA,GAAA,EAAA,MADI,QACJ,EAAA,KAAA,EAAA,QAAA,CAAA,MAAe,QAAf,CAAA,GAAA,SAAA,GAAA,IAAA,EAAA,GAAA,IAAA;EAAe,SAAA,YAAA,EAAA,GAAA,GAAA,IAAA;CAAQ"}
@@ -1 +1 @@
1
- {"version":3,"file":"useListUrlState.js","names":["React","filters: TFilters","merged: ListUrlState<TFilters>"],"sources":["../../src/hooks/useListUrlState.ts"],"sourcesContent":["import * as React from 'react';\n\nexport interface ListUrlState<\n TFilters extends Record<string, unknown> = Record<string, unknown>,\n> {\n q: string;\n page: number;\n limit: number;\n sort?: string | null;\n filters: TFilters;\n}\n\nexport function useListUrlState<\n TFilters extends Record<string, unknown> = Record<string, unknown>,\n>({\n defaults,\n paramKeys = {\n q: 'q',\n page: 'page',\n limit: 'limit',\n sort: 'sort',\n filters: 'f',\n },\n replaceState = true,\n}: {\n defaults: ListUrlState<TFilters>;\n paramKeys?: {\n q: string;\n page: string;\n limit: string;\n sort: string;\n filters: string;\n };\n replaceState?: boolean;\n}) {\n const read = React.useCallback((): ListUrlState<TFilters> => {\n if (typeof window === 'undefined') return defaults;\n const url = new URL(window.location.href);\n const qs = url.searchParams;\n const parseNum = (v: string | null, d: number) => {\n const n = v ? Number(v) : NaN;\n return Number.isFinite(n) && n > 0 ? n : d;\n };\n const filtersRaw = qs.get(paramKeys.filters);\n let filters: TFilters = defaults.filters;\n if (filtersRaw) {\n try {\n filters = JSON.parse(filtersRaw) as TFilters;\n } catch {\n filters = defaults.filters;\n }\n }\n return {\n q: qs.get(paramKeys.q) ?? defaults.q,\n page: parseNum(qs.get(paramKeys.page), defaults.page),\n limit: parseNum(qs.get(paramKeys.limit), defaults.limit),\n sort: qs.get(paramKeys.sort),\n filters,\n };\n }, [defaults, paramKeys]);\n\n const [state, setState] = React.useState<ListUrlState<TFilters>>(read);\n\n const write = React.useCallback(\n (next: Partial<ListUrlState<TFilters>>) => {\n if (typeof window === 'undefined') return;\n const url = new URL(window.location.href);\n const qs = url.searchParams;\n const merged: ListUrlState<TFilters> = { ...state, ...next } as any;\n\n const setOrDel = (key: string, value: string | null | undefined) => {\n if (value == null || value === '' || value === 'null') qs.delete(key);\n else qs.set(key, value);\n };\n\n setOrDel(paramKeys.q, merged.q || null);\n setOrDel(paramKeys.page, String(merged.page));\n setOrDel(paramKeys.limit, String(merged.limit));\n setOrDel(paramKeys.sort, merged.sort ?? null);\n try {\n const json = JSON.stringify(merged.filters ?? {});\n setOrDel(paramKeys.filters, json === '{}' ? null : json);\n } catch {\n // ignore\n }\n\n const newUrl = `${url.pathname}?${qs.toString()}${url.hash}`;\n if (replaceState) window.history.replaceState({}, '', newUrl);\n else window.history.pushState({}, '', newUrl);\n setState(merged);\n },\n [state, paramKeys, replaceState]\n );\n\n const setFilter = React.useCallback(\n (\n key: keyof TFilters,\n value: TFilters[keyof TFilters] | undefined | null\n ) => {\n write({\n filters: { ...(state.filters as any), [key]: value } as TFilters,\n });\n },\n [state.filters, write]\n );\n\n const clearFilters = React.useCallback(() => {\n write({ filters: {} as TFilters, page: 1 });\n }, [write]);\n\n React.useEffect(() => {\n const onPop = () => setState(read());\n window.addEventListener('popstate', onPop);\n return () => window.removeEventListener('popstate', onPop);\n }, [read]);\n\n return { state, setState: write, setFilter, clearFilters } as const;\n}\n"],"mappings":";;;AAYA,SAAgB,gBAEd,EACA,UACA,YAAY;CACV,GAAG;CACH,MAAM;CACN,OAAO;CACP,MAAM;CACN,SAAS;CACV,EACD,eAAe,QAWd;CACD,MAAM,OAAOA,QAAM,kBAA0C;AAC3D,MAAI,OAAO,WAAW,YAAa,QAAO;EAE1C,MAAM,KADM,IAAI,IAAI,OAAO,SAAS,KAAK,CAC1B;EACf,MAAM,YAAY,GAAkB,MAAc;GAChD,MAAM,IAAI,IAAI,OAAO,EAAE,GAAG;AAC1B,UAAO,OAAO,SAAS,EAAE,IAAI,IAAI,IAAI,IAAI;;EAE3C,MAAM,aAAa,GAAG,IAAI,UAAU,QAAQ;EAC5C,IAAIC,UAAoB,SAAS;AACjC,MAAI,WACF,KAAI;AACF,aAAU,KAAK,MAAM,WAAW;UAC1B;AACN,aAAU,SAAS;;AAGvB,SAAO;GACL,GAAG,GAAG,IAAI,UAAU,EAAE,IAAI,SAAS;GACnC,MAAM,SAAS,GAAG,IAAI,UAAU,KAAK,EAAE,SAAS,KAAK;GACrD,OAAO,SAAS,GAAG,IAAI,UAAU,MAAM,EAAE,SAAS,MAAM;GACxD,MAAM,GAAG,IAAI,UAAU,KAAK;GAC5B;GACD;IACA,CAAC,UAAU,UAAU,CAAC;CAEzB,MAAM,CAAC,OAAO,YAAYD,QAAM,SAAiC,KAAK;CAEtE,MAAM,QAAQA,QAAM,aACjB,SAA0C;AACzC,MAAI,OAAO,WAAW,YAAa;EACnC,MAAM,MAAM,IAAI,IAAI,OAAO,SAAS,KAAK;EACzC,MAAM,KAAK,IAAI;EACf,MAAME,SAAiC;GAAE,GAAG;GAAO,GAAG;GAAM;EAE5D,MAAM,YAAY,KAAa,UAAqC;AAClE,OAAI,SAAS,QAAQ,UAAU,MAAM,UAAU,OAAQ,IAAG,OAAO,IAAI;OAChE,IAAG,IAAI,KAAK,MAAM;;AAGzB,WAAS,UAAU,GAAG,OAAO,KAAK,KAAK;AACvC,WAAS,UAAU,MAAM,OAAO,OAAO,KAAK,CAAC;AAC7C,WAAS,UAAU,OAAO,OAAO,OAAO,MAAM,CAAC;AAC/C,WAAS,UAAU,MAAM,OAAO,QAAQ,KAAK;AAC7C,MAAI;GACF,MAAM,OAAO,KAAK,UAAU,OAAO,WAAW,EAAE,CAAC;AACjD,YAAS,UAAU,SAAS,SAAS,OAAO,OAAO,KAAK;UAClD;EAIR,MAAM,SAAS,GAAG,IAAI,SAAS,GAAG,GAAG,UAAU,GAAG,IAAI;AACtD,MAAI,aAAc,QAAO,QAAQ,aAAa,EAAE,EAAE,IAAI,OAAO;MACxD,QAAO,QAAQ,UAAU,EAAE,EAAE,IAAI,OAAO;AAC7C,WAAS,OAAO;IAElB;EAAC;EAAO;EAAW;EAAa,CACjC;CAED,MAAM,YAAYF,QAAM,aAEpB,KACA,UACG;AACH,QAAM,EACJ,SAAS;GAAE,GAAI,MAAM;IAAkB,MAAM;GAAO,EACrD,CAAC;IAEJ,CAAC,MAAM,SAAS,MAAM,CACvB;CAED,MAAM,eAAeA,QAAM,kBAAkB;AAC3C,QAAM;GAAE,SAAS,EAAE;GAAc,MAAM;GAAG,CAAC;IAC1C,CAAC,MAAM,CAAC;AAEX,SAAM,gBAAgB;EACpB,MAAM,cAAc,SAAS,MAAM,CAAC;AACpC,SAAO,iBAAiB,YAAY,MAAM;AAC1C,eAAa,OAAO,oBAAoB,YAAY,MAAM;IACzD,CAAC,KAAK,CAAC;AAEV,QAAO;EAAE;EAAO,UAAU;EAAO;EAAW;EAAc"}
1
+ {"version":3,"file":"useListUrlState.js","names":["React","filters: TFilters","merged: ListUrlState<TFilters>"],"sources":["../../src/hooks/useListUrlState.ts"],"sourcesContent":["import * as React from 'react';\n\nexport interface ListUrlState<\n TFilters extends Record<string, unknown> = Record<string, unknown>,\n> {\n q: string;\n page: number;\n limit: number;\n sort?: string | null;\n filters: TFilters;\n}\n\nexport function useListUrlState<\n TFilters extends Record<string, unknown> = Record<string, unknown>,\n>({\n defaults,\n paramKeys = {\n q: 'q',\n page: 'page',\n limit: 'limit',\n sort: 'sort',\n filters: 'f',\n },\n replaceState = true,\n}: {\n defaults: ListUrlState<TFilters>;\n paramKeys?: {\n q: string;\n page: string;\n limit: string;\n sort: string;\n filters: string;\n };\n replaceState?: boolean;\n}) {\n const read = React.useCallback((): ListUrlState<TFilters> => {\n if (typeof window === 'undefined') return defaults;\n const url = new URL(window.location.href);\n const qs = url.searchParams;\n const parseNum = (v: string | null, d: number) => {\n const n = v ? Number(v) : NaN;\n return Number.isFinite(n) && n > 0 ? n : d;\n };\n const filtersRaw = qs.get(paramKeys.filters);\n let filters: TFilters = defaults.filters;\n if (filtersRaw) {\n try {\n filters = JSON.parse(filtersRaw) as TFilters;\n } catch {\n filters = defaults.filters;\n }\n }\n return {\n q: qs.get(paramKeys.q) ?? defaults.q,\n page: parseNum(qs.get(paramKeys.page), defaults.page),\n limit: parseNum(qs.get(paramKeys.limit), defaults.limit),\n sort: qs.get(paramKeys.sort),\n filters,\n };\n }, [defaults, paramKeys]);\n\n const [state, setState] = React.useState<ListUrlState<TFilters>>(read);\n\n const write = React.useCallback(\n (next: Partial<ListUrlState<TFilters>>) => {\n if (typeof window === 'undefined') return;\n const url = new URL(window.location.href);\n const qs = url.searchParams;\n const merged: ListUrlState<TFilters> = {\n ...state,\n ...next,\n } as ListUrlState<TFilters>;\n\n const setOrDel = (key: string, value: string | null | undefined) => {\n if (value == null || value === '' || value === 'null') qs.delete(key);\n else qs.set(key, value);\n };\n\n setOrDel(paramKeys.q, merged.q || null);\n setOrDel(paramKeys.page, String(merged.page));\n setOrDel(paramKeys.limit, String(merged.limit));\n setOrDel(paramKeys.sort, merged.sort ?? null);\n try {\n const json = JSON.stringify(merged.filters ?? {});\n setOrDel(paramKeys.filters, json === '{}' ? null : json);\n } catch {\n // ignore\n }\n\n const newUrl = `${url.pathname}?${qs.toString()}${url.hash}`;\n if (replaceState) window.history.replaceState({}, '', newUrl);\n else window.history.pushState({}, '', newUrl);\n setState(merged);\n },\n [state, paramKeys, replaceState]\n );\n\n const setFilter = React.useCallback(\n (\n key: keyof TFilters,\n value: TFilters[keyof TFilters] | undefined | null\n ) => {\n write({\n filters: { ...state.filters, [key]: value } as TFilters,\n });\n },\n [state.filters, write]\n );\n\n const clearFilters = React.useCallback(() => {\n write({ filters: {} as TFilters, page: 1 });\n }, [write]);\n\n React.useEffect(() => {\n const onPop = () => setState(read());\n window.addEventListener('popstate', onPop);\n return () => window.removeEventListener('popstate', onPop);\n }, [read]);\n\n return { state, setState: write, setFilter, clearFilters } as const;\n}\n"],"mappings":";;;AAYA,SAAgB,gBAEd,EACA,UACA,YAAY;CACV,GAAG;CACH,MAAM;CACN,OAAO;CACP,MAAM;CACN,SAAS;CACV,EACD,eAAe,QAWd;CACD,MAAM,OAAOA,QAAM,kBAA0C;AAC3D,MAAI,OAAO,WAAW,YAAa,QAAO;EAE1C,MAAM,KADM,IAAI,IAAI,OAAO,SAAS,KAAK,CAC1B;EACf,MAAM,YAAY,GAAkB,MAAc;GAChD,MAAM,IAAI,IAAI,OAAO,EAAE,GAAG;AAC1B,UAAO,OAAO,SAAS,EAAE,IAAI,IAAI,IAAI,IAAI;;EAE3C,MAAM,aAAa,GAAG,IAAI,UAAU,QAAQ;EAC5C,IAAIC,UAAoB,SAAS;AACjC,MAAI,WACF,KAAI;AACF,aAAU,KAAK,MAAM,WAAW;UAC1B;AACN,aAAU,SAAS;;AAGvB,SAAO;GACL,GAAG,GAAG,IAAI,UAAU,EAAE,IAAI,SAAS;GACnC,MAAM,SAAS,GAAG,IAAI,UAAU,KAAK,EAAE,SAAS,KAAK;GACrD,OAAO,SAAS,GAAG,IAAI,UAAU,MAAM,EAAE,SAAS,MAAM;GACxD,MAAM,GAAG,IAAI,UAAU,KAAK;GAC5B;GACD;IACA,CAAC,UAAU,UAAU,CAAC;CAEzB,MAAM,CAAC,OAAO,YAAYD,QAAM,SAAiC,KAAK;CAEtE,MAAM,QAAQA,QAAM,aACjB,SAA0C;AACzC,MAAI,OAAO,WAAW,YAAa;EACnC,MAAM,MAAM,IAAI,IAAI,OAAO,SAAS,KAAK;EACzC,MAAM,KAAK,IAAI;EACf,MAAME,SAAiC;GACrC,GAAG;GACH,GAAG;GACJ;EAED,MAAM,YAAY,KAAa,UAAqC;AAClE,OAAI,SAAS,QAAQ,UAAU,MAAM,UAAU,OAAQ,IAAG,OAAO,IAAI;OAChE,IAAG,IAAI,KAAK,MAAM;;AAGzB,WAAS,UAAU,GAAG,OAAO,KAAK,KAAK;AACvC,WAAS,UAAU,MAAM,OAAO,OAAO,KAAK,CAAC;AAC7C,WAAS,UAAU,OAAO,OAAO,OAAO,MAAM,CAAC;AAC/C,WAAS,UAAU,MAAM,OAAO,QAAQ,KAAK;AAC7C,MAAI;GACF,MAAM,OAAO,KAAK,UAAU,OAAO,WAAW,EAAE,CAAC;AACjD,YAAS,UAAU,SAAS,SAAS,OAAO,OAAO,KAAK;UAClD;EAIR,MAAM,SAAS,GAAG,IAAI,SAAS,GAAG,GAAG,UAAU,GAAG,IAAI;AACtD,MAAI,aAAc,QAAO,QAAQ,aAAa,EAAE,EAAE,IAAI,OAAO;MACxD,QAAO,QAAQ,UAAU,EAAE,EAAE,IAAI,OAAO;AAC7C,WAAS,OAAO;IAElB;EAAC;EAAO;EAAW;EAAa,CACjC;CAED,MAAM,YAAYF,QAAM,aAEpB,KACA,UACG;AACH,QAAM,EACJ,SAAS;GAAE,GAAG,MAAM;IAAU,MAAM;GAAO,EAC5C,CAAC;IAEJ,CAAC,MAAM,SAAS,MAAM,CACvB;CAED,MAAM,eAAeA,QAAM,kBAAkB;AAC3C,QAAM;GAAE,SAAS,EAAE;GAAc,MAAM;GAAG,CAAC;IAC1C,CAAC,MAAM,CAAC;AAEX,SAAM,gBAAgB;EACpB,MAAM,cAAc,SAAS,MAAM,CAAC;AACpC,SAAO,iBAAiB,YAAY,MAAM;AAC1C,eAAa,OAAO,oBAAoB,YAAY,MAAM;IACzD,CAAC,KAAK,CAAC;AAEV,QAAO;EAAE;EAAO,UAAU;EAAO;EAAW;EAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"form-contract.d.ts","names":[],"sources":["../../src/renderers/form-contract.tsx"],"sourcesContent":[],"mappings":";;;;;;cAoFa;qDAiBX,iBAAA,CAAA,cAAA"}
1
+ {"version":3,"file":"form-contract.d.ts","names":[],"sources":["../../src/renderers/form-contract.tsx"],"sourcesContent":[],"mappings":";;;;;;cA+Fa;qDAsBX,iBAAA,CAAA,cAAA"}
@@ -38,7 +38,7 @@ const Checkbox = (props) => /* @__PURE__ */ jsx(Checkbox$1, {
38
38
  });
39
39
  const RadioGroup = (props) => /* @__PURE__ */ jsx(RadioGroup$1, {
40
40
  ...props,
41
- children: props.options?.map((o, i) => /* @__PURE__ */ jsxs("div", {
41
+ children: props.options?.map((o) => /* @__PURE__ */ jsxs("div", {
42
42
  className: "flex items-center gap-3",
43
43
  children: [/* @__PURE__ */ jsx(RadioGroupItem, {
44
44
  value: o.value,
@@ -47,7 +47,7 @@ const RadioGroup = (props) => /* @__PURE__ */ jsx(RadioGroup$1, {
47
47
  htmlFor: o.value,
48
48
  children: o.label
49
49
  })]
50
- }))
50
+ }, o.value))
51
51
  });
52
52
  const Switch = (props) => /* @__PURE__ */ jsx(Switch$1, {
53
53
  checked: !!props.checked,
@@ -1 +1 @@
1
- {"version":3,"file":"form-contract.js","names":["SelectUiKit","CheckboxUiKit","RadioGroupUiKit","SwitchUiKit","FieldWrap"],"sources":["../../src/renderers/form-contract.tsx"],"sourcesContent":["'use client';\nimport React from 'react';\nimport { createFormRenderer } from '@lssm/lib.contracts/client/react/form-render';\nimport { shadcnDriver } from '@lssm/lib.contracts/client/react/drivers/shadcn';\n\n// Minimal shadcn driver mapping: host must wire its components here.\n// Replace these placeholders with actual shadcn/ui imports in your app.\nimport {\n Field as FieldWrap,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from '@lssm/lib.ui-kit-web/ui/field';\nimport { Button } from '../components/atoms/Button';\nimport { Input } from '../components/atoms/Input';\nimport { Textarea } from '../components/atoms/Textarea';\nimport { Switch as SwitchUiKit } from '@lssm/lib.ui-kit-web/ui/switch';\nimport {\n RadioGroup as RadioGroupUiKit,\n RadioGroupItem,\n} from '@lssm/lib.ui-kit-web/ui/radio-group';\nimport { Checkbox as CheckboxUiKit } from '@lssm/lib.ui-kit-web/ui/checkbox';\nimport {\n Select as SelectUiKit,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@lssm/lib.ui-kit-web/ui/select';\nimport { Label } from '@lssm/lib.ui-kit-web/ui/label';\n\n// Select/Checkbox/Radio/Switch are app-specific; provide thin wrappers.\nconst Select = (props: any) => {\n const { options, value, onChange, ...rest } = props;\n return (\n <SelectUiKit\n value={value ?? ''}\n onValueChange={(v) => onChange?.(v)}\n {...rest}\n >\n <SelectTrigger className=\"w-[180px]\">\n <SelectValue placeholder={props.placeholder} />\n </SelectTrigger>\n <SelectContent>\n <SelectGroup>\n {/* <SelectLabel>Fruits</SelectLabel> */}\n {/* <SelectItem value=\"\" disabled hidden></SelectItem> */}\n {options?.map((o: any, i: number) => (\n <SelectItem key={i} value={o.value} disabled={o.disabled}>\n {o.labelI18n}\n </SelectItem>\n ))}\n </SelectGroup>\n </SelectContent>\n </SelectUiKit>\n );\n};\nconst Checkbox = (props: any) => (\n <CheckboxUiKit\n checked={!!props.checked}\n onCheckedChange={(v) => props.onCheckedChange?.(v)}\n {...props}\n />\n);\nconst RadioGroup = (props: any) => (\n <RadioGroupUiKit {...props}>\n {props.options?.map((o: any, i: number) => (\n <div className=\"flex items-center gap-3\">\n <RadioGroupItem value={o.value} id={o.value} />\n <Label htmlFor={o.value}>{o.label}</Label>\n </div>\n ))}\n </RadioGroupUiKit>\n);\nconst Switch = (props: any) => (\n <SwitchUiKit\n checked={!!props.checked}\n onCheckedChange={(v) => props.onCheckedChange?.(v)}\n {...props}\n />\n);\n\nexport const formRenderer = createFormRenderer({\n driver: shadcnDriver({\n Field: FieldWrap,\n FieldLabel: FieldLabel,\n FieldDescription: FieldDescription,\n FieldError: FieldError,\n FieldGroup: FieldGroup,\n FieldSet: (p: any) => <fieldset {...p} />,\n FieldLegend: (p: any) => <legend {...p} />,\n Input: Input as any,\n Textarea: Textarea as any,\n Select: Select,\n Checkbox: Checkbox,\n RadioGroup: RadioGroup,\n Switch: Switch,\n Button: Button as any,\n }),\n});\n"],"mappings":";;;;;;;;;;;;;;;;;AAkCA,MAAM,UAAU,UAAe;CAC7B,MAAM,EAAE,SAAS,OAAO,UAAU,GAAG,SAAS;AAC9C,QACE,qBAACA;EACC,OAAO,SAAS;EAChB,gBAAgB,MAAM,WAAW,EAAE;EACnC,GAAI;aAEJ,oBAAC;GAAc,WAAU;aACvB,oBAAC,eAAY,aAAa,MAAM,cAAe;IACjC,EAChB,oBAAC,2BACC,oBAAC,yBAGE,SAAS,KAAK,GAAQ,MACrB,oBAAC;GAAmB,OAAO,EAAE;GAAO,UAAU,EAAE;aAC7C,EAAE;KADY,EAEJ,CACb,GACU,GACA;GACJ;;AAGlB,MAAM,YAAY,UAChB,oBAACC;CACC,SAAS,CAAC,CAAC,MAAM;CACjB,kBAAkB,MAAM,MAAM,kBAAkB,EAAE;CAClD,GAAI;EACJ;AAEJ,MAAM,cAAc,UAClB,oBAACC;CAAgB,GAAI;WAClB,MAAM,SAAS,KAAK,GAAQ,MAC3B,qBAAC;EAAI,WAAU;aACb,oBAAC;GAAe,OAAO,EAAE;GAAO,IAAI,EAAE;IAAS,EAC/C,oBAAC;GAAM,SAAS,EAAE;aAAQ,EAAE;IAAc;GACtC,CACN;EACc;AAEpB,MAAM,UAAU,UACd,oBAACC;CACC,SAAS,CAAC,CAAC,MAAM;CACjB,kBAAkB,MAAM,MAAM,kBAAkB,EAAE;CAClD,GAAI;EACJ;AAGJ,MAAa,eAAe,mBAAmB,EAC7C,QAAQ,aAAa;CACZC;CACK;CACM;CACN;CACA;CACZ,WAAW,MAAW,oBAAC,cAAS,GAAI,IAAK;CACzC,cAAc,MAAW,oBAAC,YAAO,GAAI,IAAK;CACnC;CACG;CACF;CACE;CACE;CACJ;CACA;CACT,CAAC,EACH,CAAC"}
1
+ {"version":3,"file":"form-contract.js","names":["SelectUiKit","CheckboxUiKit","RadioGroupUiKit","SwitchUiKit","FieldWrap"],"sources":["../../src/renderers/form-contract.tsx"],"sourcesContent":["'use client';\nimport React from 'react';\nimport { createFormRenderer } from '@lssm/lib.contracts/client/react/form-render';\nimport { shadcnDriver } from '@lssm/lib.contracts/client/react/drivers/shadcn';\n\n// Minimal shadcn driver mapping: host must wire its components here.\n// Replace these placeholders with actual shadcn/ui imports in your app.\nimport {\n Field as FieldWrap,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from '@lssm/lib.ui-kit-web/ui/field';\nimport { Button } from '../components/atoms/Button';\nimport { Input } from '../components/atoms/Input';\nimport { Textarea } from '../components/atoms/Textarea';\nimport { Switch as SwitchUiKit } from '@lssm/lib.ui-kit-web/ui/switch';\nimport {\n RadioGroup as RadioGroupUiKit,\n RadioGroupItem,\n} from '@lssm/lib.ui-kit-web/ui/radio-group';\nimport { Checkbox as CheckboxUiKit } from '@lssm/lib.ui-kit-web/ui/checkbox';\nimport {\n Select as SelectUiKit,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@lssm/lib.ui-kit-web/ui/select';\nimport { Label } from '@lssm/lib.ui-kit-web/ui/label';\n\n// Select/Checkbox/Radio/Switch are app-specific; provide thin wrappers.\ninterface FormOption {\n value: string;\n label?: string;\n labelI18n?: string;\n disabled?: boolean;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst Select = (props: any) => {\n const { options, value, onChange, ...rest } = props;\n return (\n <SelectUiKit\n value={value ?? ''}\n onValueChange={(v) => onChange?.(v)}\n {...rest}\n >\n <SelectTrigger className=\"w-[180px]\">\n <SelectValue placeholder={props.placeholder} />\n </SelectTrigger>\n <SelectContent>\n <SelectGroup>\n {/* <SelectLabel>Fruits</SelectLabel> */}\n {/* <SelectItem value=\"\" disabled hidden></SelectItem> */}\n {(options as FormOption[] | undefined)?.map((o, i) => (\n <SelectItem key={i} value={o.value} disabled={o.disabled}>\n {o.labelI18n}\n </SelectItem>\n ))}\n </SelectGroup>\n </SelectContent>\n </SelectUiKit>\n );\n};\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst Checkbox = (props: any) => (\n <CheckboxUiKit\n checked={!!props.checked}\n onCheckedChange={(v) => props.onCheckedChange?.(v)}\n {...props}\n />\n);\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst RadioGroup = (props: any) => (\n <RadioGroupUiKit {...props}>\n {(props.options as FormOption[] | undefined)?.map((o) => (\n <div key={o.value} className=\"flex items-center gap-3\">\n <RadioGroupItem value={o.value} id={o.value} />\n <Label htmlFor={o.value}>{o.label}</Label>\n </div>\n ))}\n </RadioGroupUiKit>\n);\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst Switch = (props: any) => (\n <SwitchUiKit\n checked={!!props.checked}\n onCheckedChange={(v) => props.onCheckedChange?.(v)}\n {...props}\n />\n);\n\nexport const formRenderer = createFormRenderer({\n driver: shadcnDriver({\n Field: FieldWrap,\n FieldLabel: FieldLabel,\n FieldDescription: FieldDescription,\n FieldError: FieldError,\n FieldGroup: FieldGroup,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n FieldSet: (p: any) => <fieldset {...p} />,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n FieldLegend: (p: any) => <legend {...p} />,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Input: Input as any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Textarea: Textarea as any,\n Select: Select,\n Checkbox: Checkbox,\n RadioGroup: RadioGroup,\n Switch: Switch,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Button: Button as any,\n }),\n});\n"],"mappings":";;;;;;;;;;;;;;;;;AA0CA,MAAM,UAAU,UAAe;CAC7B,MAAM,EAAE,SAAS,OAAO,UAAU,GAAG,SAAS;AAC9C,QACE,qBAACA;EACC,OAAO,SAAS;EAChB,gBAAgB,MAAM,WAAW,EAAE;EACnC,GAAI;aAEJ,oBAAC;GAAc,WAAU;aACvB,oBAAC,eAAY,aAAa,MAAM,cAAe;IACjC,EAChB,oBAAC,2BACC,oBAAC,yBAGG,SAAsC,KAAK,GAAG,MAC9C,oBAAC;GAAmB,OAAO,EAAE;GAAO,UAAU,EAAE;aAC7C,EAAE;KADY,EAEJ,CACb,GACU,GACA;GACJ;;AAIlB,MAAM,YAAY,UAChB,oBAACC;CACC,SAAS,CAAC,CAAC,MAAM;CACjB,kBAAkB,MAAM,MAAM,kBAAkB,EAAE;CAClD,GAAI;EACJ;AAGJ,MAAM,cAAc,UAClB,oBAACC;CAAgB,GAAI;WACjB,MAAM,SAAsC,KAAK,MACjD,qBAAC;EAAkB,WAAU;aAC3B,oBAAC;GAAe,OAAO,EAAE;GAAO,IAAI,EAAE;IAAS,EAC/C,oBAAC;GAAM,SAAS,EAAE;aAAQ,EAAE;IAAc;IAFlC,EAAE,MAGN,CACN;EACc;AAGpB,MAAM,UAAU,UACd,oBAACC;CACC,SAAS,CAAC,CAAC,MAAM;CACjB,kBAAkB,MAAM,MAAM,kBAAkB,EAAE;CAClD,GAAI;EACJ;AAGJ,MAAa,eAAe,mBAAmB,EAC7C,QAAQ,aAAa;CACZC;CACK;CACM;CACN;CACA;CAEZ,WAAW,MAAW,oBAAC,cAAS,GAAI,IAAK;CAEzC,cAAc,MAAW,oBAAC,YAAO,GAAI,IAAK;CAEnC;CAEG;CACF;CACE;CACE;CACJ;CAEA;CACT,CAAC,EACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lssm/lib.design-system",
3
- "version": "0.0.0-canary-20251219202229",
3
+ "version": "0.0.0-canary-20251220002821",
4
4
  "scripts": {
5
5
  "publish:pkg": "bun publish --tolerate-republish --ignore-scripts --verbose",
6
6
  "publish:pkg:canary": "bun publish:pkg --tag canary",
@@ -21,23 +21,23 @@
21
21
  "tree-shake": true,
22
22
  "dependencies": {
23
23
  "@hookform/resolvers": "5.2.2",
24
- "@lssm/lib.ai-agent": "0.0.0-canary-20251219202229",
25
- "@lssm/lib.contracts": "0.0.0-canary-20251219202229",
26
- "@lssm/lib.ui-kit": "0.0.0-canary-20251219202229",
27
- "@lssm/lib.ui-kit-web": "0.0.0-canary-20251219202229",
24
+ "@lssm/lib.ai-agent": "0.0.0-canary-20251220002821",
25
+ "@lssm/lib.contracts": "0.0.0-canary-20251220002821",
26
+ "@lssm/lib.ui-kit": "0.0.0-canary-20251220002821",
27
+ "@lssm/lib.ui-kit-web": "0.0.0-canary-20251220002821",
28
28
  "class-variance-authority": "^0.7.1",
29
29
  "clsx": "^2.1.1",
30
30
  "lucide-react": "^0.535.0",
31
31
  "react": "19.2.3",
32
- "react-dom": "^19.2.3",
32
+ "react-dom": "19.2.3",
33
33
  "tailwind-merge": "^3.3.1",
34
34
  "tailwindcss-animate": "^1.0.7",
35
35
  "zod": "^4.1.13",
36
- "next": "16.0.10"
36
+ "next": "16.1.0"
37
37
  },
38
38
  "devDependencies": {
39
- "@lssm/tool.typescript": "0.0.0-canary-20251219202229",
40
- "@lssm/tool.tsdown": "0.0.0-canary-20251219202229",
39
+ "@lssm/tool.typescript": "0.0.0-canary-20251220002821",
40
+ "@lssm/tool.tsdown": "0.0.0-canary-20251220002821",
41
41
  "@types/node": "^24.9.0",
42
42
  "@types/react-dom": "^19.0.14",
43
43
  "postcss": "^8.5",
@@ -59,7 +59,13 @@
59
59
  "exports": {
60
60
  ".": "./dist/index.js",
61
61
  "./*": "./*"
62
- }
62
+ },
63
+ "registry": "https://registry.npmjs.org/"
63
64
  },
64
- "license": "MIT"
65
+ "license": "MIT",
66
+ "repository": {
67
+ "type": "git",
68
+ "url": "https://github.com/lssm-tech/contractspec.git",
69
+ "directory": "packages/libs/design-system"
70
+ }
65
71
  }