@ketvietlab/design-system 0.1.3

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 (106) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +48 -0
  3. package/dist/catalogue/catalogue.css +344 -0
  4. package/dist/catalogue/index.d.ts +22 -0
  5. package/dist/catalogue/index.d.ts.map +1 -0
  6. package/dist/catalogue/index.js +421 -0
  7. package/dist/catalogue/index.js.map +1 -0
  8. package/dist/catalogue/page-surfaces.d.ts +15 -0
  9. package/dist/catalogue/page-surfaces.d.ts.map +1 -0
  10. package/dist/catalogue/page-surfaces.js +162 -0
  11. package/dist/catalogue/page-surfaces.js.map +1 -0
  12. package/dist/catalogue/styles.css +2 -0
  13. package/dist/contract/index.d.ts +3 -0
  14. package/dist/contract/index.d.ts.map +1 -0
  15. package/dist/contract/index.js +37 -0
  16. package/dist/contract/index.js.map +1 -0
  17. package/dist/foundations/reset.css +42 -0
  18. package/dist/foundations/tokens.css +305 -0
  19. package/dist/index.d.ts +35 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +20 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/layouts/index.d.ts +68 -0
  24. package/dist/layouts/index.d.ts.map +1 -0
  25. package/dist/layouts/index.js +66 -0
  26. package/dist/layouts/index.js.map +1 -0
  27. package/dist/layouts/layouts.css +332 -0
  28. package/dist/layouts/shell.css +154 -0
  29. package/dist/layouts/shell.d.ts +27 -0
  30. package/dist/layouts/shell.d.ts.map +1 -0
  31. package/dist/layouts/shell.js +24 -0
  32. package/dist/layouts/shell.js.map +1 -0
  33. package/dist/patterns/board-page.d.ts +14 -0
  34. package/dist/patterns/board-page.d.ts.map +1 -0
  35. package/dist/patterns/board-page.js +28 -0
  36. package/dist/patterns/board-page.js.map +1 -0
  37. package/dist/patterns/dashboard-page.d.ts +13 -0
  38. package/dist/patterns/dashboard-page.d.ts.map +1 -0
  39. package/dist/patterns/dashboard-page.js +25 -0
  40. package/dist/patterns/dashboard-page.js.map +1 -0
  41. package/dist/patterns/data-table.d.ts +26 -0
  42. package/dist/patterns/data-table.d.ts.map +1 -0
  43. package/dist/patterns/data-table.js +6 -0
  44. package/dist/patterns/data-table.js.map +1 -0
  45. package/dist/patterns/form-page.d.ts +8 -0
  46. package/dist/patterns/form-page.d.ts.map +1 -0
  47. package/dist/patterns/form-page.js +22 -0
  48. package/dist/patterns/form-page.js.map +1 -0
  49. package/dist/patterns/list-page.d.ts +31 -0
  50. package/dist/patterns/list-page.d.ts.map +1 -0
  51. package/dist/patterns/list-page.js +41 -0
  52. package/dist/patterns/list-page.js.map +1 -0
  53. package/dist/patterns/modal-sheet.d.ts +11 -0
  54. package/dist/patterns/modal-sheet.d.ts.map +1 -0
  55. package/dist/patterns/modal-sheet.js +11 -0
  56. package/dist/patterns/modal-sheet.js.map +1 -0
  57. package/dist/patterns/page-shell.d.ts +24 -0
  58. package/dist/patterns/page-shell.d.ts.map +1 -0
  59. package/dist/patterns/page-shell.js +11 -0
  60. package/dist/patterns/page-shell.js.map +1 -0
  61. package/dist/patterns/patterns.css +1435 -0
  62. package/dist/patterns/pipeline.d.ts +29 -0
  63. package/dist/patterns/pipeline.d.ts.map +1 -0
  64. package/dist/patterns/pipeline.js +26 -0
  65. package/dist/patterns/pipeline.js.map +1 -0
  66. package/dist/patterns/record-form.d.ts +18 -0
  67. package/dist/patterns/record-form.d.ts.map +1 -0
  68. package/dist/patterns/record-form.js +14 -0
  69. package/dist/patterns/record-form.js.map +1 -0
  70. package/dist/patterns/record-page.d.ts +30 -0
  71. package/dist/patterns/record-page.d.ts.map +1 -0
  72. package/dist/patterns/record-page.js +29 -0
  73. package/dist/patterns/record-page.js.map +1 -0
  74. package/dist/patterns/workspace-page.d.ts +23 -0
  75. package/dist/patterns/workspace-page.d.ts.map +1 -0
  76. package/dist/patterns/workspace-page.js +26 -0
  77. package/dist/patterns/workspace-page.js.map +1 -0
  78. package/dist/primitives/actions.d.ts +30 -0
  79. package/dist/primitives/actions.d.ts.map +1 -0
  80. package/dist/primitives/actions.js +8 -0
  81. package/dist/primitives/actions.js.map +1 -0
  82. package/dist/primitives/feedback.d.ts +19 -0
  83. package/dist/primitives/feedback.d.ts.map +1 -0
  84. package/dist/primitives/feedback.js +23 -0
  85. package/dist/primitives/feedback.js.map +1 -0
  86. package/dist/primitives/field.d.ts +22 -0
  87. package/dist/primitives/field.d.ts.map +1 -0
  88. package/dist/primitives/field.js +29 -0
  89. package/dist/primitives/field.js.map +1 -0
  90. package/dist/primitives/navigation.css +99 -0
  91. package/dist/primitives/navigation.d.ts +26 -0
  92. package/dist/primitives/navigation.d.ts.map +1 -0
  93. package/dist/primitives/navigation.js +16 -0
  94. package/dist/primitives/navigation.js.map +1 -0
  95. package/dist/primitives/primitives.css +489 -0
  96. package/dist/primitives/progress.css +46 -0
  97. package/dist/primitives/progress.d.ts +10 -0
  98. package/dist/primitives/progress.d.ts.map +1 -0
  99. package/dist/primitives/progress.js +13 -0
  100. package/dist/primitives/progress.js.map +1 -0
  101. package/dist/primitives/status.d.ts +27 -0
  102. package/dist/primitives/status.d.ts.map +1 -0
  103. package/dist/primitives/status.js +16 -0
  104. package/dist/primitives/status.js.map +1 -0
  105. package/dist/styles.css +9 -0
  106. package/package.json +58 -0
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@ketvietlab/ketjs-view/jsx-runtime";
2
+ export const HOOKS = [
3
+ 'app-shell',
4
+ 'app-sidebar',
5
+ 'app-main',
6
+ 'app-right-rail',
7
+ 'page',
8
+ 'page-header',
9
+ 'page-heading',
10
+ 'page-title',
11
+ 'page-description',
12
+ 'page-actions',
13
+ 'page-body',
14
+ 'record-canvas',
15
+ 'record-content',
16
+ 'record-section',
17
+ 'record-section-title',
18
+ ];
19
+ export const AppShell = (props) => (_jsxs("div", { "data-ui": "app-shell", "data-has-right-rail": String(props.rightRail !== undefined), "data-mode": props.mode ?? 'viewport', children: [_jsx("aside", { "data-ui": "app-sidebar", children: props.sidebar }), _jsx("main", { "data-ui": "app-main", children: props.main }), props.rightRail !== undefined && _jsx("aside", { "data-ui": "app-right-rail", children: props.rightRail })] }));
20
+ export const PageHeader = (props) => (_jsxs("header", { "data-ui": "page-header", children: [_jsxs("div", { "data-ui": "page-heading", children: [_jsx("h1", { "data-ui": "page-title", children: props.title }), !!props.description && _jsx("p", { "data-ui": "page-description", children: props.description })] }), props.actions !== undefined && _jsx("div", { "data-ui": "page-actions", children: props.actions })] }));
21
+ export const Page = (props) => (_jsxs("section", { "data-ui": "page", children: [_jsx(PageHeader, { title: props.title, description: props.description, actions: props.actions }), _jsx("div", { "data-ui": "page-body", children: props.body })] }));
22
+ export const RecordCanvas = (props) => (_jsx("div", { "data-ui": "record-canvas", children: _jsx("div", { "data-ui": "record-content", children: props.body }) }));
23
+ export const RecordSection = (props) => (_jsxs("section", { "data-ui": "record-section", children: [!!props.title && _jsx("h2", { "data-ui": "record-section-title", children: props.title }), props.body] }));
24
+ //# sourceMappingURL=shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../../../../packages/design-system/src/layouts/shell.tsx"],"names":[],"mappings":";AAEA,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,WAAW;IACX,aAAa;IACb,UAAU;IACV,gBAAgB;IAChB,MAAM;IACN,aAAa;IACb,cAAc;IACd,YAAY;IACZ,kBAAkB;IAClB,cAAc;IACd,WAAW;IACX,eAAe;IACf,gBAAgB;IAChB,gBAAgB;IAChB,sBAAsB;CACd,CAAA;AAEV,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAKxB,EAAkB,EAAE,CAAC,CACpB,0BACU,WAAW,yBACE,MAAM,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,eAC/C,KAAK,CAAC,IAAI,IAAI,UAAU,aAEnC,2BAAe,aAAa,YAAE,KAAK,CAAC,OAAO,GAAS,EACpD,0BAAc,UAAU,YAAE,KAAK,CAAC,IAAI,GAAQ,EAC3C,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,2BAAe,gBAAgB,YAAE,KAAK,CAAC,SAAS,GAAS,IACvF,CACP,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAI1B,EAAkB,EAAE,CAAC,CACpB,6BAAgB,aAAa,aAC3B,0BAAa,cAAc,aACzB,wBAAY,YAAY,YAAE,KAAK,CAAC,KAAK,GAAM,EAC1C,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,uBAAW,kBAAkB,YAAE,KAAK,CAAC,WAAW,GAAK,IACzE,EACL,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,yBAAa,cAAc,YAAE,KAAK,CAAC,OAAO,GAAO,IAC1E,CACV,CAAA;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,KAKpB,EAAkB,EAAE,CAAC,CACpB,8BAAiB,MAAM,aACrB,KAAC,UAAU,IAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,GAAI,EAC1F,yBAAa,WAAW,YAAE,KAAK,CAAC,IAAI,GAAO,IACnC,CACX,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAyB,EAAkB,EAAE,CAAC,CACzE,yBAAa,eAAe,YAC1B,yBAAa,gBAAgB,YAAE,KAAK,CAAC,IAAI,GAAO,GAC5C,CACP,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAgD,EAAkB,EAAE,CAAC,CACjG,8BAAiB,gBAAgB,aAC9B,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,wBAAY,sBAAsB,YAAE,KAAK,CAAC,KAAK,GAAM,EACtE,KAAK,CAAC,IAAI,IACH,CACX,CAAA"}
@@ -0,0 +1,14 @@
1
+ import type { TemplateResult } from '@ketvietlab/ketjs-view';
2
+ import { type WorkspacePageProps } from './workspace-page.tsx';
3
+ export declare const HOOKS: readonly ['board-page', 'board-page-context', 'board-page-header', 'board-page-heading', 'board-page-eyebrow', 'board-page-title-row', 'board-page-title', 'board-page-subline', 'board-page-status', 'board-page-description', 'board-page-actions', 'board-page-meta', 'board-page-toolbar', 'board-page-controls', 'board-page-body'];
4
+ export type BoardPageProps = Omit<WorkspacePageProps, 'layout'>;
5
+ /**
6
+ * The baseline for kanban, schedule and timeline workspaces.
7
+ *
8
+ * A board needs more horizontal room than a collection or form, but it still
9
+ * belongs to the same application hierarchy. The pattern keeps location,
10
+ * identity and global controls in stable compact bands while leaving scrolling,
11
+ * columns and interaction to the specialised board supplied by the application.
12
+ */
13
+ export declare const BoardPage: (props: BoardPageProps) => TemplateResult;
14
+ //# sourceMappingURL=board-page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board-page.d.ts","sourceRoot":"","sources":["../../../../../packages/design-system/src/patterns/board-page.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAiB,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAE7E,eAAO,MAAM,KAAK,YAChB,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,CACT,CAAA;AAEV,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAA;AAE/D;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,UAAW,cAAc,KAAG,cACW,CAAA"}
@@ -0,0 +1,28 @@
1
+ import { workspacePage } from './workspace-page.js';
2
+ export const HOOKS = [
3
+ 'board-page',
4
+ 'board-page-context',
5
+ 'board-page-header',
6
+ 'board-page-heading',
7
+ 'board-page-eyebrow',
8
+ 'board-page-title-row',
9
+ 'board-page-title',
10
+ 'board-page-subline',
11
+ 'board-page-status',
12
+ 'board-page-description',
13
+ 'board-page-actions',
14
+ 'board-page-meta',
15
+ 'board-page-toolbar',
16
+ 'board-page-controls',
17
+ 'board-page-body',
18
+ ];
19
+ /**
20
+ * The baseline for kanban, schedule and timeline workspaces.
21
+ *
22
+ * A board needs more horizontal room than a collection or form, but it still
23
+ * belongs to the same application hierarchy. The pattern keeps location,
24
+ * identity and global controls in stable compact bands while leaving scrolling,
25
+ * columns and interaction to the specialised board supplied by the application.
26
+ */
27
+ export const BoardPage = (props) => workspacePage({ ...props, layout: 'canvas' }, 'board-page');
28
+ //# sourceMappingURL=board-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board-page.js","sourceRoot":"","sources":["../../../../../../packages/design-system/src/patterns/board-page.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAA2B,MAAM,qBAAsB,CAAA;AAE7E,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,YAAY;IACZ,oBAAoB;IACpB,mBAAmB;IACnB,oBAAoB;IACpB,oBAAoB;IACpB,sBAAsB;IACtB,kBAAkB;IAClB,oBAAoB;IACpB,mBAAmB;IACnB,wBAAwB;IACxB,oBAAoB;IACpB,iBAAiB;IACjB,oBAAoB;IACpB,qBAAqB;IACrB,iBAAiB;CACT,CAAA;AAIV;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAqB,EAAkB,EAAE,CACjE,aAAa,CAAC,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,YAAY,CAAC,CAAA"}
@@ -0,0 +1,13 @@
1
+ import type { TemplateResult } from '@ketvietlab/ketjs-view';
2
+ import { type WorkspacePageProps } from './workspace-page.tsx';
3
+ export declare const HOOKS: readonly ['dashboard-page', 'dashboard-page-context', 'dashboard-page-header', 'dashboard-page-heading', 'dashboard-page-eyebrow', 'dashboard-page-title-row', 'dashboard-page-title', 'dashboard-page-subline', 'dashboard-page-status', 'dashboard-page-description', 'dashboard-page-actions', 'dashboard-page-meta', 'dashboard-page-body'];
4
+ export type DashboardPageProps = Omit<WorkspacePageProps, 'layout' | 'controls'>;
5
+ /**
6
+ * The baseline for KPI, workflow and analytical overview screens.
7
+ *
8
+ * Applications own the translated copy, business actions and dashboard blocks.
9
+ * This pattern keeps location, identity and the overview canvas in a stable,
10
+ * compact hierarchy without pretending that the dashboard is a business record.
11
+ */
12
+ export declare const DashboardPage: (props: DashboardPageProps) => TemplateResult;
13
+ //# sourceMappingURL=dashboard-page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-page.d.ts","sourceRoot":"","sources":["../../../../../packages/design-system/src/patterns/dashboard-page.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAiB,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAE7E,eAAO,MAAM,KAAK,YAChB,gBAAgB,EAChB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,wBAAwB,EACxB,0BAA0B,EAC1B,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,4BAA4B,EAC5B,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,CACb,CAAA;AAEV,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,EAAE,QAAQ,GAAG,UAAU,CAAC,CAAA;AAEhF;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,UAAW,kBAAkB,KAAG,cACK,CAAA"}
@@ -0,0 +1,25 @@
1
+ import { workspacePage } from './workspace-page.js';
2
+ export const HOOKS = [
3
+ 'dashboard-page',
4
+ 'dashboard-page-context',
5
+ 'dashboard-page-header',
6
+ 'dashboard-page-heading',
7
+ 'dashboard-page-eyebrow',
8
+ 'dashboard-page-title-row',
9
+ 'dashboard-page-title',
10
+ 'dashboard-page-subline',
11
+ 'dashboard-page-status',
12
+ 'dashboard-page-description',
13
+ 'dashboard-page-actions',
14
+ 'dashboard-page-meta',
15
+ 'dashboard-page-body',
16
+ ];
17
+ /**
18
+ * The baseline for KPI, workflow and analytical overview screens.
19
+ *
20
+ * Applications own the translated copy, business actions and dashboard blocks.
21
+ * This pattern keeps location, identity and the overview canvas in a stable,
22
+ * compact hierarchy without pretending that the dashboard is a business record.
23
+ */
24
+ export const DashboardPage = (props) => workspacePage({ ...props, layout: 'flow' }, 'dashboard-page');
25
+ //# sourceMappingURL=dashboard-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-page.js","sourceRoot":"","sources":["../../../../../../packages/design-system/src/patterns/dashboard-page.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAA2B,MAAM,qBAAsB,CAAA;AAE7E,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,gBAAgB;IAChB,wBAAwB;IACxB,uBAAuB;IACvB,wBAAwB;IACxB,wBAAwB;IACxB,0BAA0B;IAC1B,sBAAsB;IACtB,wBAAwB;IACxB,uBAAuB;IACvB,4BAA4B;IAC5B,wBAAwB;IACxB,qBAAqB;IACrB,qBAAqB;CACb,CAAA;AAIV;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAyB,EAAkB,EAAE,CACzE,aAAa,CAAC,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAA"}
@@ -0,0 +1,26 @@
1
+ import type { JSXChild, TemplateResult } from '@ketvietlab/ketjs-view';
2
+ export type Cell = JSXChild;
3
+ export type Column<Row> = {
4
+ key: string;
5
+ label: string;
6
+ cell: (row: Row) => Cell;
7
+ align?: 'start' | 'end';
8
+ kind?: 'text' | 'number' | 'currency' | 'date' | 'status' | 'identifier' | 'person';
9
+ priority?: 'primary' | 'secondary' | 'tertiary';
10
+ width?: 'narrow' | 'medium' | 'wide';
11
+ };
12
+ export type DataTableProps<Row> = {
13
+ columns: readonly Column<Row>[];
14
+ rows: readonly Row[];
15
+ id: (row: Row) => string;
16
+ caption?: string | null;
17
+ rowHref?: (row: Row) => string;
18
+ selected?: (row: Row) => boolean;
19
+ emptyTitle?: string;
20
+ emptyMessage?: string;
21
+ /** Stack labelled cells on narrow screens, or retain horizontal scrolling. */
22
+ responsive?: 'scroll' | 'stack';
23
+ };
24
+ export declare const HOOKS: readonly ['table-scroll', 'table', 'table-caption', 'col', 'row', 'cell', 'row-link'];
25
+ export declare const DataTable: <Row>(props: DataTableProps<Row>) => TemplateResult;
26
+ //# sourceMappingURL=data-table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table.d.ts","sourceRoot":"","sources":["../../../../../packages/design-system/src/patterns/data-table.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAGtE,MAAM,MAAM,IAAI,GAAG,QAAQ,CAAA;AAC3B,MAAM,MAAM,MAAM,CAAC,GAAG,IAAI;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAA;IACxB,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,YAAY,GAAG,QAAQ,CAAA;IACnF,QAAQ,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,CAAA;IAC/C,KAAK,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAA;CACrC,CAAA;AAED,MAAM,MAAM,cAAc,CAAC,GAAG,IAAI;IAChC,OAAO,EAAE,SAAS,MAAM,CAAC,GAAG,CAAC,EAAE,CAAA;IAC/B,IAAI,EAAE,SAAS,GAAG,EAAE,CAAA;IACpB,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAA;IACxB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAA;IAC9B,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAA;IAChC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;CAChC,CAAA;AAED,eAAO,MAAM,KAAK,YAAI,cAAc,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAU,CAAA;AAE1G,eAAO,MAAM,SAAS,GAAI,GAAG,SAAU,cAAc,CAAC,GAAG,CAAC,KAAG,cAgE1D,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@ketvietlab/ketjs-view/jsx-runtime";
2
+ import { each } from '@ketvietlab/ketjs-view';
3
+ import { EmptyState } from '../primitives/feedback.js';
4
+ export const HOOKS = ['table-scroll', 'table', 'table-caption', 'col', 'row', 'cell', 'row-link'];
5
+ export const DataTable = (props) => props.rows.length === 0 ? (_jsx(EmptyState, { title: props.emptyTitle ?? 'No records', message: props.emptyMessage ?? 'There is nothing to show yet.' })) : (_jsx("div", { "data-ui": "table-scroll", "data-responsive": props.responsive ?? 'scroll', children: _jsxs("table", { "data-ui": "table", children: [!!props.caption && _jsx("caption", { "data-ui": "table-caption", children: props.caption }), _jsx("thead", { children: _jsx("tr", { children: each(props.columns, (column) => column.key, (column) => (_jsx("th", { "data-ui": "col", "data-col": column.key, "data-align": column.align ?? 'start', "data-kind": column.kind ?? 'text', "data-width": column.width ?? null, scope: "col", children: column.label }))) }) }), _jsx("tbody", { children: each(props.rows, props.id, (row) => (_jsx("tr", { "data-ui": "row", "data-row": props.id(row), "data-selected": props.selected?.(row) === true ? 'true' : null, children: each(props.columns, (column) => column.key, (column, index) => (_jsx("td", { "data-ui": "cell", "data-col": column.key, "data-align": column.align ?? 'start', "data-kind": column.kind ?? 'text', "data-priority": column.priority ?? 'secondary', "data-label": props.responsive === 'stack' ? column.label : null, children: props.rowHref && index === 0 ? (_jsx("a", { "data-ui": "row-link", href: props.rowHref(row), children: column.cell(row) })) : (column.cell(row)) }))) }))) })] }) }));
6
+ //# sourceMappingURL=data-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table.js","sourceRoot":"","sources":["../../../../../../packages/design-system/src/patterns/data-table.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAA;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA4B,CAAA;AA0BvD,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,cAAc,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAU,CAAA;AAE1G,MAAM,CAAC,MAAM,SAAS,GAAG,CAAO,KAA0B,EAAkB,EAAE,CAC5E,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACxB,KAAC,UAAU,IACT,KAAK,EAAE,KAAK,CAAC,UAAU,IAAI,YAAY,EACvC,OAAO,EAAE,KAAK,CAAC,YAAY,IAAI,+BAA+B,GAC9D,CACH,CAAC,CAAC,CAAC,CACF,yBAAa,cAAc,qBAAkB,KAAK,CAAC,UAAU,IAAI,QAAQ,YACvE,4BAAe,OAAO,aACnB,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,6BAAiB,eAAe,YAAE,KAAK,CAAC,OAAO,GAAW,EAC9E,0BACE,uBACG,IAAI,CACH,KAAK,CAAC,OAAO,EACb,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EACtB,CAAC,MAAM,EAAE,EAAE,CAAC,CACV,wBACU,KAAK,cACH,MAAM,CAAC,GAAG,gBACR,MAAM,CAAC,KAAK,IAAI,OAAO,eACxB,MAAM,CAAC,IAAI,IAAI,MAAM,gBACpB,MAAM,CAAC,KAAK,IAAI,IAAI,EAChC,KAAK,EAAC,KAAK,YAEV,MAAM,CAAC,KAAK,GACV,CACN,CACF,GACE,GACC,EACR,0BACG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CACnC,wBACU,KAAK,cACH,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,mBACR,KAAK,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,YAE5D,IAAI,CACH,KAAK,CAAC,OAAO,EACb,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EACtB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CACjB,wBACU,MAAM,cACJ,MAAM,CAAC,GAAG,gBACR,MAAM,CAAC,KAAK,IAAI,OAAO,eACxB,MAAM,CAAC,IAAI,IAAI,MAAM,mBACjB,MAAM,CAAC,QAAQ,IAAI,WAAW,gBACjC,KAAK,CAAC,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,YAE7D,KAAK,CAAC,OAAO,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAC9B,uBAAW,UAAU,EAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,YAC3C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GACf,CACL,CAAC,CAAC,CAAC,CACF,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CACjB,GACE,CACN,CACF,GACE,CACN,CAAC,GACI,IACF,GACJ,CACP,CAAA"}
@@ -0,0 +1,8 @@
1
+ import type { TemplateResult } from '@ketvietlab/ketjs-view';
2
+ import { type RecordPageProps, type RecordPageSlots } from './record-page.tsx';
3
+ export declare const HOOKS: readonly ['form-page', 'form-page-context', 'form-page-header', 'form-page-title-row', 'form-page-heading', 'form-page-title', 'form-page-subline', 'form-page-status', 'form-page-description', 'form-page-actions', 'form-page-meta', 'form-page-controller', 'form-page-navigation', 'form-page-layout', 'form-page-body', 'form-page-aside'];
4
+ export type FormPageSlots = RecordPageSlots;
5
+ export type FormPageProps = RecordPageProps;
6
+ /** @deprecated Use RecordPage. Retained while application call sites migrate. */
7
+ export declare const FormPage: (props: FormPageProps) => TemplateResult;
8
+ //# sourceMappingURL=form-page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-page.d.ts","sourceRoot":"","sources":["../../../../../packages/design-system/src/patterns/form-page.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAc,KAAK,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAE1F,eAAO,MAAM,KAAK,YAChB,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,sBAAsB,EACtB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,CACT,CAAA;AAEV,MAAM,MAAM,aAAa,GAAG,eAAe,CAAA;AAC3C,MAAM,MAAM,aAAa,GAAG,eAAe,CAAA;AAE3C,iFAAiF;AACjF,eAAO,MAAM,QAAQ,UAAW,aAAa,KAAG,cAAgD,CAAA"}
@@ -0,0 +1,22 @@
1
+ import { recordPage } from './record-page.js';
2
+ export const HOOKS = [
3
+ 'form-page',
4
+ 'form-page-context',
5
+ 'form-page-header',
6
+ 'form-page-title-row',
7
+ 'form-page-heading',
8
+ 'form-page-title',
9
+ 'form-page-subline',
10
+ 'form-page-status',
11
+ 'form-page-description',
12
+ 'form-page-actions',
13
+ 'form-page-meta',
14
+ 'form-page-controller',
15
+ 'form-page-navigation',
16
+ 'form-page-layout',
17
+ 'form-page-body',
18
+ 'form-page-aside',
19
+ ];
20
+ /** @deprecated Use RecordPage. Retained while application call sites migrate. */
21
+ export const FormPage = (props) => recordPage(props, 'form-page');
22
+ //# sourceMappingURL=form-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-page.js","sourceRoot":"","sources":["../../../../../../packages/design-system/src/patterns/form-page.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAA8C,MAAM,kBAAmB,CAAA;AAE1F,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,WAAW;IACX,mBAAmB;IACnB,kBAAkB;IAClB,qBAAqB;IACrB,mBAAmB;IACnB,iBAAiB;IACjB,mBAAmB;IACnB,kBAAkB;IAClB,uBAAuB;IACvB,mBAAmB;IACnB,gBAAgB;IAChB,sBAAsB;IACtB,sBAAsB;IACtB,kBAAkB;IAClB,gBAAgB;IAChB,iBAAiB;CACT,CAAA;AAKV,iFAAiF;AACjF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAoB,EAAkB,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA"}
@@ -0,0 +1,31 @@
1
+ import type { JSXChild, TemplateResult } from '@ketvietlab/ketjs-view';
2
+ export declare const HOOKS: readonly ['list-page', 'list-page-context', 'list-page-header', 'list-page-heading', 'list-page-title-row', 'list-page-eyebrow', 'list-page-title', 'list-page-description', 'list-page-actions', 'list-page-toolbar', 'list-page-controls', 'list-page-status', 'list-page-body', 'list-page-footer'];
3
+ export type ListPageProps = {
4
+ title: string;
5
+ body: JSXChild;
6
+ /**
7
+ * A narrow application context strip above the page identity. The application
8
+ * owns its breadcrumbs and organisation switcher; the pattern owns the slot.
9
+ */
10
+ context?: JSXChild;
11
+ /**
12
+ * `operational` is the full workspace composition used by application collection
13
+ * screens. The unadorned variant remains available for embedded specimens.
14
+ */
15
+ variant?: 'operational';
16
+ eyebrow?: string | null;
17
+ description?: string | null;
18
+ actions?: JSXChild;
19
+ controls?: JSXChild;
20
+ status?: JSXChild;
21
+ footer?: JSXChild;
22
+ };
23
+ /**
24
+ * The baseline for an operational collection screen.
25
+ *
26
+ * Applications own the translated copy, URL-driven controls and records. This
27
+ * pattern owns their order and rhythm: identity and primary action first, query
28
+ * controls second, then the result status and the collection itself.
29
+ */
30
+ export declare const ListPage: (props: ListPageProps) => TemplateResult;
31
+ //# sourceMappingURL=list-page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-page.d.ts","sourceRoot":"","sources":["../../../../../packages/design-system/src/patterns/list-page.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAGtE,eAAO,MAAM,KAAK,YAChB,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,CACV,CAAA;AAEV,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,QAAQ,CAAA;IACd;;;OAGG;IACH,OAAO,CAAC,EAAE,QAAQ,CAAA;IAClB;;;OAGG;IACH,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,OAAO,CAAC,EAAE,QAAQ,CAAA;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,MAAM,CAAC,EAAE,QAAQ,CAAA;IACjB,MAAM,CAAC,EAAE,QAAQ,CAAA;CAClB,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,UAAW,aAAa,KAAG,cA2B/C,CAAA"}
@@ -0,0 +1,41 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@ketvietlab/ketjs-view/jsx-runtime";
2
+ import { pageIdentity } from './page-shell.js';
3
+ export const HOOKS = [
4
+ 'list-page',
5
+ 'list-page-context',
6
+ 'list-page-header',
7
+ 'list-page-heading',
8
+ 'list-page-title-row',
9
+ 'list-page-eyebrow',
10
+ 'list-page-title',
11
+ 'list-page-description',
12
+ 'list-page-actions',
13
+ 'list-page-toolbar',
14
+ 'list-page-controls',
15
+ 'list-page-status',
16
+ 'list-page-body',
17
+ 'list-page-footer',
18
+ ];
19
+ /**
20
+ * The baseline for an operational collection screen.
21
+ *
22
+ * Applications own the translated copy, URL-driven controls and records. This
23
+ * pattern owns their order and rhythm: identity and primary action first, query
24
+ * controls second, then the result status and the collection itself.
25
+ */
26
+ export const ListPage = (props) => {
27
+ const operational = props.variant === 'operational';
28
+ // Result summaries close the collection in an operational workspace. Keeping
29
+ // the legacy `status` prop as the input lets existing screens migrate without
30
+ // duplicating their translated count as a separate footer value.
31
+ const toolbarStatus = operational ? undefined : props.status;
32
+ const footer = props.footer ?? (operational ? props.status : undefined);
33
+ return (_jsxs("section", { "data-ui": "list-page", "data-variant": props.variant ?? null, "data-pattern": "list", children: [pageIdentity('list-page', {
34
+ context: props.context,
35
+ eyebrow: props.eyebrow,
36
+ title: props.title,
37
+ description: props.description,
38
+ actions: props.actions,
39
+ }), (props.controls !== undefined || toolbarStatus !== undefined) && (_jsxs("div", { "data-ui": "list-page-toolbar", children: [toolbarStatus !== undefined && _jsx("div", { "data-ui": "list-page-status", children: toolbarStatus }), props.controls !== undefined && _jsx("div", { "data-ui": "list-page-controls", children: props.controls })] })), _jsx("div", { "data-ui": "list-page-body", children: props.body }), footer !== undefined && _jsx("footer", { "data-ui": "list-page-footer", children: footer })] }));
40
+ };
41
+ //# sourceMappingURL=list-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-page.js","sourceRoot":"","sources":["../../../../../../packages/design-system/src/patterns/list-page.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAkB,CAAA;AAE/C,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,WAAW;IACX,mBAAmB;IACnB,kBAAkB;IAClB,mBAAmB;IACnB,qBAAqB;IACrB,mBAAmB;IACnB,iBAAiB;IACjB,uBAAuB;IACvB,mBAAmB;IACnB,mBAAmB;IACnB,oBAAoB;IACpB,kBAAkB;IAClB,gBAAgB;IAChB,kBAAkB;CACV,CAAA;AAuBV;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAoB,EAAkB,EAAE;IAC/D,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,KAAK,aAAa,CAAA;IACnD,6EAA6E;IAC7E,8EAA8E;IAC9E,iEAAiE;IACjE,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAA;IAC5D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAEvE,OAAO,CACL,8BAAiB,WAAW,kBAAe,KAAK,CAAC,OAAO,IAAI,IAAI,kBAAe,MAAM,aAClF,YAAY,CAAC,WAAW,EAAE;gBACzB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC,EACD,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,aAAa,KAAK,SAAS,CAAC,IAAI,CAChE,0BAAa,mBAAmB,aAC7B,aAAa,KAAK,SAAS,IAAI,yBAAa,kBAAkB,YAAE,aAAa,GAAO,EACpF,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,yBAAa,oBAAoB,YAAE,KAAK,CAAC,QAAQ,GAAO,IACrF,CACP,EACD,yBAAa,gBAAgB,YAAE,KAAK,CAAC,IAAI,GAAO,EAC/C,MAAM,KAAK,SAAS,IAAI,4BAAgB,kBAAkB,YAAE,MAAM,GAAU,IACrE,CACX,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,11 @@
1
+ import type { JSXChild, TemplateResult } from '@ketvietlab/ketjs-view';
2
+ export declare const HOOKS: readonly ['modal-backdrop', 'modal-sheet', 'modal-head', 'modal-title', 'modal-close', 'modal-body'];
3
+ export declare const ModalSheet: (props: {
4
+ id: string;
5
+ title: string;
6
+ body: JSXChild;
7
+ closeHref: string;
8
+ closeLabel: string;
9
+ mode?: 'overlay' | 'embedded';
10
+ }) => TemplateResult;
11
+ //# sourceMappingURL=modal-sheet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modal-sheet.d.ts","sourceRoot":"","sources":["../../../../../packages/design-system/src/patterns/modal-sheet.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEtE,eAAO,MAAM,KAAK,YAChB,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,aAAa,EACb,aAAa,EACb,YAAY,CACJ,CAAA;AAEV,eAAO,MAAM,UAAU,UAAW;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,QAAQ,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,CAAA;CAC9B,KAAG,cAwBH,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@ketvietlab/ketjs-view/jsx-runtime";
2
+ export const HOOKS = [
3
+ 'modal-backdrop',
4
+ 'modal-sheet',
5
+ 'modal-head',
6
+ 'modal-title',
7
+ 'modal-close',
8
+ 'modal-body',
9
+ ];
10
+ export const ModalSheet = (props) => (_jsx("div", { "data-ui": "modal-backdrop", "data-mode": props.mode ?? 'overlay', children: _jsxs("section", { "data-ui": "modal-sheet", role: "dialog", "aria-modal": props.mode === 'embedded' ? 'false' : 'true', "aria-labelledby": `${props.id}-title`, children: [_jsxs("header", { "data-ui": "modal-head", children: [_jsx("h2", { "data-ui": "modal-title", id: `${props.id}-title`, children: props.title }), _jsx("a", { "data-ui": "modal-close", href: props.closeHref, "aria-label": props.closeLabel, title: props.closeLabel, children: "\u00D7" })] }), _jsx("div", { "data-ui": "modal-body", children: props.body })] }) }));
11
+ //# sourceMappingURL=modal-sheet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modal-sheet.js","sourceRoot":"","sources":["../../../../../../packages/design-system/src/patterns/modal-sheet.tsx"],"names":[],"mappings":";AAEA,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,gBAAgB;IAChB,aAAa;IACb,YAAY;IACZ,aAAa;IACb,aAAa;IACb,YAAY;CACJ,CAAA;AAEV,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAO1B,EAAkB,EAAE,CAAC,CACpB,yBAAa,gBAAgB,eAAY,KAAK,CAAC,IAAI,IAAI,SAAS,YAC9D,8BACU,aAAa,EACrB,IAAI,EAAC,QAAQ,gBACD,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,qBACvC,GAAG,KAAK,CAAC,EAAE,QAAQ,aAEpC,6BAAgB,YAAY,aAC1B,wBAAY,aAAa,EAAC,EAAE,EAAE,GAAG,KAAK,CAAC,EAAE,QAAQ,YAC9C,KAAK,CAAC,KAAK,GACT,EACL,uBACU,aAAa,EACrB,IAAI,EAAE,KAAK,CAAC,SAAS,gBACT,KAAK,CAAC,UAAU,EAC5B,KAAK,EAAE,KAAK,CAAC,UAAU,uBAGrB,IACG,EACT,yBAAa,YAAY,YAAE,KAAK,CAAC,IAAI,GAAO,IACpC,GACN,CACP,CAAA"}
@@ -0,0 +1,24 @@
1
+ import type { JSXChild, TemplateResult } from '@ketvietlab/ketjs-view';
2
+ export type PageIdentityKind = 'list-page' | 'record-page' | 'form-page' | 'workspace-page' | 'dashboard-page' | 'board-page';
3
+ export type PageIdentityProps = {
4
+ context?: JSXChild;
5
+ eyebrow?: string | null;
6
+ title: string;
7
+ description?: string | null;
8
+ status?: JSXChild;
9
+ actions?: JSXChild;
10
+ meta?: JSXChild;
11
+ };
12
+ type PageIdentityContentProps = PageIdentityProps & {
13
+ groupDescription?: boolean;
14
+ };
15
+ /**
16
+ * The single identity band shared by every full-page pattern.
17
+ *
18
+ * The pattern name remains in each hook so consumers can style the content
19
+ * contract without reimplementing breadcrumbs, title hierarchy or actions.
20
+ */
21
+ export declare const pageIdentityContent: (kind: PageIdentityKind, props: PageIdentityContentProps) => TemplateResult;
22
+ export declare const pageIdentity: (kind: PageIdentityKind, props: PageIdentityProps) => TemplateResult;
23
+ export {};
24
+ //# sourceMappingURL=page-shell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-shell.d.ts","sourceRoot":"","sources":["../../../../../packages/design-system/src/patterns/page-shell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEtE,MAAM,MAAM,gBAAgB,GACxB,WAAW,GACX,aAAa,GACb,WAAW,GACX,gBAAgB,GAChB,gBAAgB,GAChB,YAAY,CAAA;AAEhB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,CAAC,EAAE,QAAQ,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,MAAM,CAAC,EAAE,QAAQ,CAAA;IACjB,OAAO,CAAC,EAAE,QAAQ,CAAA;IAClB,IAAI,CAAC,EAAE,QAAQ,CAAA;CAChB,CAAA;AAED,KAAK,wBAAwB,GAAG,iBAAiB,GAAG;IAClD,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,SACxB,gBAAgB,SACf,wBAAwB,KAC9B,cAoBF,CAAA;AAED,eAAO,MAAM,YAAY,SAAU,gBAAgB,SAAS,iBAAiB,KAAG,cAK/E,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "@ketvietlab/ketjs-view/jsx-runtime";
2
+ /**
3
+ * The single identity band shared by every full-page pattern.
4
+ *
5
+ * The pattern name remains in each hook so consumers can style the content
6
+ * contract without reimplementing breadcrumbs, title hierarchy or actions.
7
+ */
8
+ export const pageIdentityContent = (kind, props) => (_jsxs(_Fragment, { children: [_jsxs("div", { "data-ui": `${kind}-heading`, children: [!!props.eyebrow && _jsx("p", { "data-ui": `${kind}-eyebrow`, children: props.eyebrow }), _jsxs("div", { "data-ui": `${kind}-title-row`, children: [_jsx("h1", { "data-ui": `${kind}-title`, children: props.title }), props.actions !== undefined && _jsx("div", { "data-ui": `${kind}-actions`, children: props.actions })] }), (props.groupDescription || props.status !== undefined) &&
9
+ (!!props.description || props.status !== undefined) ? (_jsxs("div", { "data-ui": `${kind}-subline`, children: [!!props.description && _jsx("p", { "data-ui": `${kind}-description`, children: props.description }), props.status !== undefined && _jsx("span", { "data-ui": `${kind}-status`, children: props.status })] })) : (!!props.description && _jsx("p", { "data-ui": `${kind}-description`, children: props.description }))] }), props.meta !== undefined && _jsx("div", { "data-ui": `${kind}-meta`, children: props.meta })] }));
10
+ export const pageIdentity = (kind, props) => (_jsxs(_Fragment, { children: [props.context !== undefined && _jsx("div", { "data-ui": `${kind}-context`, children: props.context }), _jsx("header", { "data-ui": `${kind}-header`, children: pageIdentityContent(kind, props) })] }));
11
+ //# sourceMappingURL=page-shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-shell.js","sourceRoot":"","sources":["../../../../../../packages/design-system/src/patterns/page-shell.tsx"],"names":[],"mappings":";AAwBA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,IAAsB,EACtB,KAA+B,EACf,EAAE,CAAC,CACnB,8BACE,0BAAc,GAAG,IAAI,UAAU,aAC5B,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,uBAAY,GAAG,IAAI,UAAU,YAAG,KAAK,CAAC,OAAO,GAAK,EACtE,0BAAc,GAAG,IAAI,YAAY,aAC/B,wBAAa,GAAG,IAAI,QAAQ,YAAG,KAAK,CAAC,KAAK,GAAM,EAC/C,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,yBAAc,GAAG,IAAI,UAAU,YAAG,KAAK,CAAC,OAAO,GAAO,IAClF,EACL,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC;oBACvD,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CACpD,0BAAc,GAAG,IAAI,UAAU,aAC5B,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,uBAAY,GAAG,IAAI,cAAc,YAAG,KAAK,CAAC,WAAW,GAAK,EACjF,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,0BAAe,GAAG,IAAI,SAAS,YAAG,KAAK,CAAC,MAAM,GAAQ,IACjF,CACP,CAAC,CAAC,CAAC,CACF,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,uBAAY,GAAG,IAAI,cAAc,YAAG,KAAK,CAAC,WAAW,GAAK,CAClF,IACG,EACL,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,yBAAc,GAAG,IAAI,OAAO,YAAG,KAAK,CAAC,IAAI,GAAO,IAC5E,CACJ,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAsB,EAAE,KAAwB,EAAkB,EAAE,CAAC,CAChG,8BACG,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,yBAAc,GAAG,IAAI,UAAU,YAAG,KAAK,CAAC,OAAO,GAAO,EACtF,4BAAiB,GAAG,IAAI,SAAS,YAAG,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,GAAU,IAC7E,CACJ,CAAA"}