@ketvietlab/design-system 0.1.25 → 0.1.30

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 (208) hide show
  1. package/README.md +130 -5
  2. package/dist/atlas/island-runtime.d.mts +2 -0
  3. package/dist/atlas/island-runtime.d.mts.map +1 -0
  4. package/dist/atlas/island-runtime.mjs +2 -0
  5. package/dist/atlas/island-runtime.mjs.map +1 -0
  6. package/dist/atlas/relation-select-hydration.d.ts +2 -0
  7. package/dist/atlas/relation-select-hydration.d.ts.map +1 -0
  8. package/dist/atlas/relation-select-hydration.js +40 -0
  9. package/dist/atlas/relation-select-hydration.js.map +1 -0
  10. package/dist/atlas-cli.d.ts.map +1 -1
  11. package/dist/atlas-cli.js +28 -10
  12. package/dist/atlas-cli.js.map +1 -1
  13. package/dist/catalogue/date-pickers.d.ts +6 -0
  14. package/dist/catalogue/date-pickers.d.ts.map +1 -0
  15. package/dist/catalogue/date-pickers.js +16 -0
  16. package/dist/catalogue/date-pickers.js.map +1 -0
  17. package/dist/catalogue/index.d.ts +7 -2
  18. package/dist/catalogue/index.d.ts.map +1 -1
  19. package/dist/catalogue/index.js +20 -4
  20. package/dist/catalogue/index.js.map +1 -1
  21. package/dist/catalogue/inventory-policy.json +49 -0
  22. package/dist/catalogue/inventory.generated.js +1 -1
  23. package/dist/catalogue/inventory.generated.js.map +1 -1
  24. package/dist/catalogue/inventory.generated.json +2815 -1108
  25. package/dist/catalogue/layering.d.ts +10 -0
  26. package/dist/catalogue/layering.d.ts.map +1 -0
  27. package/dist/catalogue/layering.js +67 -0
  28. package/dist/catalogue/layering.js.map +1 -0
  29. package/dist/catalogue/primitives.css +77 -0
  30. package/dist/catalogue/primitives.d.ts +34 -0
  31. package/dist/catalogue/primitives.d.ts.map +1 -0
  32. package/dist/catalogue/primitives.js +149 -0
  33. package/dist/catalogue/primitives.js.map +1 -0
  34. package/dist/catalogue/registry.d.ts.map +1 -1
  35. package/dist/catalogue/registry.js +18 -0
  36. package/dist/catalogue/registry.js.map +1 -1
  37. package/dist/catalogue/specimens.d.ts.map +1 -1
  38. package/dist/catalogue/specimens.js +142 -22
  39. package/dist/catalogue/specimens.js.map +1 -1
  40. package/dist/catalogue/styles.css +1 -0
  41. package/dist/contract/index.d.ts +2 -0
  42. package/dist/contract/index.d.ts.map +1 -1
  43. package/dist/contract/index.js +11 -0
  44. package/dist/contract/index.js.map +1 -1
  45. package/dist/contract/layout-audit.d.ts +32 -0
  46. package/dist/contract/layout-audit.d.ts.map +1 -0
  47. package/dist/contract/layout-audit.js +204 -0
  48. package/dist/contract/layout-audit.js.map +1 -0
  49. package/dist/forms/date-time/date-math.d.ts +23 -0
  50. package/dist/forms/date-time/date-math.d.ts.map +1 -0
  51. package/dist/forms/date-time/date-math.js +83 -0
  52. package/dist/forms/date-time/date-math.js.map +1 -0
  53. package/dist/forms/date-time/index.d.ts +37 -6
  54. package/dist/forms/date-time/index.d.ts.map +1 -1
  55. package/dist/forms/date-time/index.js +140 -6
  56. package/dist/forms/date-time/index.js.map +1 -1
  57. package/dist/forms/date-time/runtime.d.ts +4 -0
  58. package/dist/forms/date-time/runtime.d.ts.map +1 -0
  59. package/dist/forms/date-time/runtime.js +637 -0
  60. package/dist/forms/date-time/runtime.js.map +1 -0
  61. package/dist/forms/date-time/styles.css +251 -12
  62. package/dist/foundations/tokens.css +48 -28
  63. package/dist/index.d.ts +15 -4
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +8 -3
  66. package/dist/index.js.map +1 -1
  67. package/dist/interactions/ket-table/demo.d.ts +4 -0
  68. package/dist/interactions/ket-table/demo.d.ts.map +1 -0
  69. package/dist/interactions/ket-table/demo.js +147 -0
  70. package/dist/interactions/ket-table/demo.js.map +1 -0
  71. package/dist/interactions/ket-table/index.d.ts +199 -0
  72. package/dist/interactions/ket-table/index.d.ts.map +1 -0
  73. package/dist/interactions/ket-table/index.js +376 -0
  74. package/dist/interactions/ket-table/index.js.map +1 -0
  75. package/dist/interactions/ket-table/styles.css +282 -0
  76. package/dist/interactions/lightbox/demo.d.ts +3 -0
  77. package/dist/interactions/lightbox/demo.d.ts.map +1 -0
  78. package/dist/interactions/lightbox/demo.js +21 -0
  79. package/dist/interactions/lightbox/demo.js.map +1 -0
  80. package/dist/interactions/lightbox/index.d.ts +58 -0
  81. package/dist/interactions/lightbox/index.d.ts.map +1 -0
  82. package/dist/interactions/lightbox/index.js +220 -0
  83. package/dist/interactions/lightbox/index.js.map +1 -0
  84. package/dist/interactions/lightbox/styles.css +153 -0
  85. package/dist/interactions/relation-select/demo.d.ts +3 -0
  86. package/dist/interactions/relation-select/demo.d.ts.map +1 -0
  87. package/dist/interactions/relation-select/demo.js +36 -0
  88. package/dist/interactions/relation-select/demo.js.map +1 -0
  89. package/dist/interactions/relation-select/index.d.ts +87 -0
  90. package/dist/interactions/relation-select/index.d.ts.map +1 -0
  91. package/dist/interactions/relation-select/index.js +307 -0
  92. package/dist/interactions/relation-select/index.js.map +1 -0
  93. package/dist/interactions/relation-select/styles.css +299 -0
  94. package/dist/interactions/reorder-list/index.d.ts +23 -0
  95. package/dist/interactions/reorder-list/index.d.ts.map +1 -0
  96. package/dist/interactions/reorder-list/index.js +15 -0
  97. package/dist/interactions/reorder-list/index.js.map +1 -0
  98. package/dist/interactions/reorder-list/runtime.d.ts +5 -0
  99. package/dist/interactions/reorder-list/runtime.d.ts.map +1 -0
  100. package/dist/interactions/reorder-list/runtime.js +85 -0
  101. package/dist/interactions/reorder-list/runtime.js.map +1 -0
  102. package/dist/interactions/reorder-list/styles.css +33 -0
  103. package/dist/interactions/search-filter/demo.d.ts +3 -0
  104. package/dist/interactions/search-filter/demo.d.ts.map +1 -0
  105. package/dist/interactions/search-filter/demo.js +74 -0
  106. package/dist/interactions/search-filter/demo.js.map +1 -0
  107. package/dist/interactions/search-filter/index.d.ts +153 -0
  108. package/dist/interactions/search-filter/index.d.ts.map +1 -0
  109. package/dist/interactions/search-filter/index.js +824 -0
  110. package/dist/interactions/search-filter/index.js.map +1 -0
  111. package/dist/interactions/search-filter/styles.css +568 -0
  112. package/dist/layout-audit-cli.d.ts +7 -0
  113. package/dist/layout-audit-cli.d.ts.map +1 -0
  114. package/dist/layout-audit-cli.js +63 -0
  115. package/dist/layout-audit-cli.js.map +1 -0
  116. package/dist/layouts/app-navigation/index.d.ts +11 -5
  117. package/dist/layouts/app-navigation/index.d.ts.map +1 -1
  118. package/dist/layouts/app-navigation/index.js +5 -3
  119. package/dist/layouts/app-navigation/index.js.map +1 -1
  120. package/dist/layouts/app-navigation/styles.css +47 -0
  121. package/dist/layouts/grouped/styles.css +5 -36
  122. package/dist/layouts/layering/styles.css +159 -0
  123. package/dist/layouts/layout/index.d.ts +6 -0
  124. package/dist/layouts/layout/index.d.ts.map +1 -1
  125. package/dist/layouts/layout/index.js +6 -1
  126. package/dist/layouts/layout/index.js.map +1 -1
  127. package/dist/layouts/layout/styles.css +15 -6
  128. package/dist/layouts/page-identity/index.d.ts +10 -7
  129. package/dist/layouts/page-identity/index.d.ts.map +1 -1
  130. package/dist/layouts/page-identity/index.js +9 -4
  131. package/dist/layouts/page-identity/index.js.map +1 -1
  132. package/dist/layouts/shell/index.d.ts +34 -1
  133. package/dist/layouts/shell/index.d.ts.map +1 -1
  134. package/dist/layouts/shell/index.js +26 -3
  135. package/dist/layouts/shell/index.js.map +1 -1
  136. package/dist/layouts/shell/styles.css +284 -2
  137. package/dist/patterns/board-page/index.d.ts +1 -1
  138. package/dist/patterns/board-page/index.d.ts.map +1 -1
  139. package/dist/patterns/board-page/index.js +0 -1
  140. package/dist/patterns/board-page/index.js.map +1 -1
  141. package/dist/patterns/board-page/styles.css +0 -12
  142. package/dist/patterns/dashboard-page/index.d.ts +1 -1
  143. package/dist/patterns/dashboard-page/index.d.ts.map +1 -1
  144. package/dist/patterns/dashboard-page/index.js +0 -1
  145. package/dist/patterns/dashboard-page/index.js.map +1 -1
  146. package/dist/patterns/dashboard-page/styles.css +0 -13
  147. package/dist/patterns/data-table/styles.css +1 -1
  148. package/dist/patterns/form-page/index.d.ts +1 -1
  149. package/dist/patterns/form-page/index.d.ts.map +1 -1
  150. package/dist/patterns/form-page/index.js +0 -1
  151. package/dist/patterns/form-page/index.js.map +1 -1
  152. package/dist/patterns/form-page/styles.css +0 -12
  153. package/dist/patterns/list-page/index.d.ts +10 -4
  154. package/dist/patterns/list-page/index.d.ts.map +1 -1
  155. package/dist/patterns/list-page/index.js +10 -8
  156. package/dist/patterns/list-page/index.js.map +1 -1
  157. package/dist/patterns/list-page/responsive.css +1 -13
  158. package/dist/patterns/list-page/styles.css +20 -20
  159. package/dist/patterns/modal-sheet/index.d.ts +2 -0
  160. package/dist/patterns/modal-sheet/index.d.ts.map +1 -1
  161. package/dist/patterns/modal-sheet/index.js +3 -1
  162. package/dist/patterns/modal-sheet/index.js.map +1 -1
  163. package/dist/patterns/modal-sheet/styles.css +1 -1
  164. package/dist/patterns/page-shell/styles.css +0 -12
  165. package/dist/patterns/record-form/styles.css +34 -0
  166. package/dist/patterns/record-page/index.d.ts +1 -2
  167. package/dist/patterns/record-page/index.d.ts.map +1 -1
  168. package/dist/patterns/record-page/index.js +2 -3
  169. package/dist/patterns/record-page/index.js.map +1 -1
  170. package/dist/patterns/record-page/styles.css +0 -12
  171. package/dist/patterns/workspace-page/index.d.ts +1 -2
  172. package/dist/patterns/workspace-page/index.d.ts.map +1 -1
  173. package/dist/patterns/workspace-page/index.js +0 -1
  174. package/dist/patterns/workspace-page/index.js.map +1 -1
  175. package/dist/primitives/actions/index.d.ts +4 -0
  176. package/dist/primitives/actions/index.d.ts.map +1 -1
  177. package/dist/primitives/actions/index.js +2 -2
  178. package/dist/primitives/actions/index.js.map +1 -1
  179. package/dist/primitives/actions/styles.css +3 -1
  180. package/dist/primitives/feedback/styles.css +11 -6
  181. package/dist/primitives/field/index.d.ts +5 -0
  182. package/dist/primitives/field/index.d.ts.map +1 -1
  183. package/dist/primitives/field/index.js +1 -1
  184. package/dist/primitives/field/index.js.map +1 -1
  185. package/dist/primitives/field/native-control.d.ts.map +1 -1
  186. package/dist/primitives/field/native-control.js +3 -3
  187. package/dist/primitives/field/native-control.js.map +1 -1
  188. package/dist/primitives/field/styles.css +124 -2
  189. package/dist/primitives/progress/styles.css +3 -0
  190. package/dist/primitives/status/index.d.ts +12 -1
  191. package/dist/primitives/status/index.d.ts.map +1 -1
  192. package/dist/primitives/status/index.js +16 -1
  193. package/dist/primitives/status/index.js.map +1 -1
  194. package/dist/primitives/status/styles.css +34 -2
  195. package/dist/record/display/index.d.ts +6 -0
  196. package/dist/record/display/index.d.ts.map +1 -1
  197. package/dist/record/display/index.js +6 -1
  198. package/dist/record/display/index.js.map +1 -1
  199. package/dist/record/display/styles.css +25 -0
  200. package/dist/record/formatted-values/index.d.ts +2 -1
  201. package/dist/record/formatted-values/index.d.ts.map +1 -1
  202. package/dist/record/formatted-values/index.js +2 -1
  203. package/dist/record/formatted-values/index.js.map +1 -1
  204. package/dist/runtime/index.d.ts.map +1 -1
  205. package/dist/runtime/index.js +132 -2
  206. package/dist/runtime/index.js.map +1 -1
  207. package/dist/styles.css +1 -1
  208. package/package.json +4 -3
@@ -1,3 +1,4 @@
1
1
  @import "../styles.css";
2
2
  @import "./catalogue.css";
3
3
  @import "./inventory.css";
4
+ @import "./primitives.css";
@@ -1,3 +1,5 @@
1
1
  export declare const HOOKS: readonly string[];
2
2
  export declare const OWNERS: Readonly<Record<string, string[]>>;
3
+ export { auditLayoutCss } from './layout-audit.ts';
4
+ export type { LayoutRule, LayoutViolation } from './layout-audit.ts';
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/design-system/src/contract/index.ts"],"names":[],"mappings":"AA4FA,eAAO,MAAM,KAAK,EAAE,SAAS,MAAM,EAAsD,CAAA;AAEzF,eAAO,MAAM,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAErD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/design-system/src/contract/index.ts"],"names":[],"mappings":"AAsGA,eAAO,MAAM,KAAK,EAAE,SAAS,MAAM,EAAsD,CAAA;AAEzF,eAAO,MAAM,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAErD,CAAA;AAED,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA"}
@@ -4,6 +4,7 @@ import { HOOKS as fieldHooks } from '../primitives/field/index.js';
4
4
  import { HOOKS as statusHooks } from '../primitives/status/index.js';
5
5
  import { HOOKS as navigationHooks } from '../primitives/navigation/index.js';
6
6
  import { HOOKS as progressHooks } from '../primitives/progress/index.js';
7
+ import { HOOKS as reorderListHooks } from '../interactions/reorder-list/index.js';
7
8
  import { HOOKS as menuHooks } from '../interactions/menu/index.js';
8
9
  import { HOOKS as popoverHooks } from '../interactions/popover/index.js';
9
10
  import { HOOKS as tooltipHooks } from '../interactions/tooltip/index.js';
@@ -11,6 +12,10 @@ import { HOOKS as dialogHooks } from '../interactions/dialog/index.js';
11
12
  import { HOOKS as toastHooks } from '../interactions/toast/index.js';
12
13
  import { HOOKS as spinnerHooks } from '../interactions/spinner/index.js';
13
14
  import { HOOKS as skeletonHooks } from '../interactions/skeleton/index.js';
15
+ import { HOOKS as lightboxHooks } from '../interactions/lightbox/index.js';
16
+ import { HOOKS as relationSelectHooks } from '../interactions/relation-select/index.js';
17
+ import { HOOKS as searchFilterHooks } from '../interactions/search-filter/index.js';
18
+ import { HOOKS as ketTableHooks } from '../interactions/ket-table/index.js';
14
19
  import { HOOKS as scalarFieldHooks } from '../forms/scalar-fields/index.js';
15
20
  import { HOOKS as comboboxHooks } from '../forms/combobox/index.js';
16
21
  import { HOOKS as dateTimeHooks } from '../forms/date-time/index.js';
@@ -50,12 +55,17 @@ const GROUPS = {
50
55
  navigation: navigationHooks,
51
56
  progress: progressHooks,
52
57
  menu: menuHooks,
58
+ reorderList: reorderListHooks,
53
59
  popover: popoverHooks,
54
60
  tooltip: tooltipHooks,
55
61
  dialog: dialogHooks,
56
62
  toast: toastHooks,
57
63
  spinner: spinnerHooks,
58
64
  skeleton: skeletonHooks,
65
+ lightbox: lightboxHooks,
66
+ relationSelect: relationSelectHooks,
67
+ searchFilter: searchFilterHooks,
68
+ ketTable: ketTableHooks,
59
69
  scalarFields: scalarFieldHooks,
60
70
  combobox: comboboxHooks,
61
71
  dateTime: dateTimeHooks,
@@ -90,4 +100,5 @@ const GROUPS = {
90
100
  };
91
101
  export const HOOKS = [...new Set(Object.values(GROUPS).flat())].sort();
92
102
  export const OWNERS = Object.freeze(Object.fromEntries(Object.entries(GROUPS).map(([owner, hooks]) => [owner, [...hooks]])));
103
+ export { auditLayoutCss } from './layout-audit.js';
93
104
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/design-system/src/contract/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/design-system/src/contract/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * The consumer half of LAYOUT.md: a check an application runs over its own CSS.
3
+ *
4
+ * The design system decides what a container looks like where it sits (a frame on
5
+ * the canvas, flat inside a white region). An application that restyles those
6
+ * containers answers the same question a second time, screen by screen, and the
7
+ * answers drift. So an enforced stylesheet may not:
8
+ *
9
+ * - `owned-hook` (L8): set frame, spacing or heading type on an element the design
10
+ * system renders, that is, a selector whose subject carries `data-ui` or
11
+ * `data-pattern`;
12
+ * - `hand-made-frame` (L2): draw its own card, a rule with a visible border on all
13
+ * sides together with a radius or a fill;
14
+ * - `revert-layer` (L8): undo the design system's layer to style it again.
15
+ *
16
+ * Dividers (`border-block-start` and similar single sides) stay available to app
17
+ * content, because L3 allows a hairline between peer sections.
18
+ *
19
+ * The parser is deliberately small: comments, strings, at-rule blocks and CSS
20
+ * nesting are handled; anything it cannot read is skipped, never reported.
21
+ */
22
+ export type LayoutRule = 'owned-hook' | 'hand-made-frame' | 'revert-layer';
23
+ export type LayoutViolation = {
24
+ rule: LayoutRule;
25
+ line: number;
26
+ selector: string;
27
+ property: string;
28
+ message: string;
29
+ };
30
+ /** Every layout-rule violation in one stylesheet, in source order. */
31
+ export declare const auditLayoutCss: (source: string) => LayoutViolation[];
32
+ //# sourceMappingURL=layout-audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-audit.d.ts","sourceRoot":"","sources":["../../../../../packages/design-system/src/contract/layout-audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,iBAAiB,GAAG,cAAc,CAAA;AAE1E,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,UAAU,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAuMD,sEAAsE;AACtE,eAAO,MAAM,cAAc,WAAY,MAAM,KAAG,eAAe,EAI9D,CAAA"}
@@ -0,0 +1,204 @@
1
+ /**
2
+ * The consumer half of LAYOUT.md: a check an application runs over its own CSS.
3
+ *
4
+ * The design system decides what a container looks like where it sits (a frame on
5
+ * the canvas, flat inside a white region). An application that restyles those
6
+ * containers answers the same question a second time, screen by screen, and the
7
+ * answers drift. So an enforced stylesheet may not:
8
+ *
9
+ * - `owned-hook` (L8): set frame, spacing or heading type on an element the design
10
+ * system renders, that is, a selector whose subject carries `data-ui` or
11
+ * `data-pattern`;
12
+ * - `hand-made-frame` (L2): draw its own card, a rule with a visible border on all
13
+ * sides together with a radius or a fill;
14
+ * - `revert-layer` (L8): undo the design system's layer to style it again.
15
+ *
16
+ * Dividers (`border-block-start` and similar single sides) stay available to app
17
+ * content, because L3 allows a hairline between peer sections.
18
+ *
19
+ * The parser is deliberately small: comments, strings, at-rule blocks and CSS
20
+ * nesting are handled; anything it cannot read is skipped, never reported.
21
+ */
22
+ /** Properties that decide how a container is framed, spaced or titled. */
23
+ const OWNED_PROPERTY = /^(?:border(?:-.+)?|outline(?:-.+)?|background(?:-.+)?|box-shadow|padding(?:-.+)?|margin(?:-.+)?|gap|row-gap|column-gap|font-size|font-weight|line-height|inset(?:-.+)?)$/u;
24
+ /** At-rules whose block holds ordinary rules. Every other at-rule block is skipped. */
25
+ const CONDITIONAL_AT_RULE = /^@(?:media|supports|layer|container|scope|document)\b/u;
26
+ const blank = (text) => text.replace(/[^\n]/gu, ' ');
27
+ /** Replaces comments and string contents with spaces, keeping every offset and line. */
28
+ const mask = (source) => source
29
+ .replace(/\/\*[\s\S]*?\*\//gu, blank)
30
+ .replace(/"(?:\\.|[^"\\\n])*"|'(?:\\.|[^'\\\n])*'/gu, (text) => `${text[0]}${blank(text.slice(1, -1))}${text[0]}`);
31
+ /** Splits at `separator` where it is not inside brackets or parentheses. */
32
+ const splitTopLevel = (text, separator) => {
33
+ const parts = [];
34
+ let depth = 0;
35
+ let start = 0;
36
+ for (let index = 0; index < text.length; index++) {
37
+ const char = text[index];
38
+ if (char === '(' || char === '[')
39
+ depth++;
40
+ else if (char === ')' || char === ']')
41
+ depth--;
42
+ else if (char === separator && depth === 0) {
43
+ parts.push({ part: text.slice(start, index), offset: start });
44
+ start = index + 1;
45
+ }
46
+ }
47
+ parts.push({ part: text.slice(start), offset: start });
48
+ return parts;
49
+ };
50
+ /** Removes the arguments of `:not(...)` and `:has(...)`, which name other elements. */
51
+ const stripRelational = (compound) => {
52
+ let result = compound;
53
+ for (;;) {
54
+ const match = /:(?:not|has)\(/u.exec(result);
55
+ if (!match)
56
+ return result;
57
+ let depth = 1;
58
+ let end = match.index + match[0].length;
59
+ while (end < result.length && depth > 0) {
60
+ if (result[end] === '(')
61
+ depth++;
62
+ else if (result[end] === ')')
63
+ depth--;
64
+ end++;
65
+ }
66
+ result = result.slice(0, match.index) + result.slice(end);
67
+ }
68
+ };
69
+ /**
70
+ * The compound a rule styles. A universal subject (`*`, `:not(...)`, `:first-child`)
71
+ * styles the children of the compound before it, so it belongs to whoever owns
72
+ * that one: `[data-ui="surface"] > :not(.x)` restyles the surface's own parts,
73
+ * while `.my-list > * + *` spaces the app's own list.
74
+ */
75
+ const subjectOf = (selector) => {
76
+ const compounds = [];
77
+ let depth = 0;
78
+ let start = 0;
79
+ for (let index = 0; index <= selector.length; index++) {
80
+ const char = selector[index] ?? ' ';
81
+ if (char === '(' || char === '[')
82
+ depth++;
83
+ else if (char === ')' || char === ']')
84
+ depth--;
85
+ else if (depth === 0 && /[\s>+~]/u.test(char)) {
86
+ if (index > start)
87
+ compounds.push(selector.slice(start, index));
88
+ start = index + 1;
89
+ }
90
+ }
91
+ for (let index = compounds.length - 1; index >= 0; index--) {
92
+ const compound = stripRelational(compounds[index]);
93
+ const identity = compound
94
+ .replace(/::?(?!is\(|where\()[\w-]+(?:\([^)]*\))?/gu, '')
95
+ .replace(/\*/gu, '')
96
+ .trim();
97
+ if (identity)
98
+ return compound;
99
+ }
100
+ return '';
101
+ };
102
+ const ownsHook = (selector) => /\[\s*data-(?:ui|pattern)\b/u.test(subjectOf(selector));
103
+ const lineAt = (source, offset) => source.slice(0, offset).split('\n').length;
104
+ const visibleBorder = (value) => !/^(?:0(?:px)?|none|hidden|initial|unset|revert|revert-layer)(?:\s|$)/u.test(value.trim());
105
+ const check = (selectors, declarations, violations) => {
106
+ const selector = selectors.join(', ');
107
+ for (const declaration of declarations) {
108
+ if (/\brevert-layer\b/u.test(declaration.value))
109
+ violations.push({
110
+ rule: 'revert-layer',
111
+ line: declaration.line,
112
+ selector,
113
+ property: declaration.property,
114
+ message: 'revert-layer undoes the design system to restyle it; change the component instead',
115
+ });
116
+ }
117
+ const owned = selectors.filter(ownsHook);
118
+ if (owned.length > 0)
119
+ for (const declaration of declarations)
120
+ if (OWNED_PROPERTY.test(declaration.property))
121
+ violations.push({
122
+ rule: 'owned-hook',
123
+ line: declaration.line,
124
+ selector: owned.join(', '),
125
+ property: declaration.property,
126
+ message: `${declaration.property} on a design-system element; the component owns its frame, spacing and headings`,
127
+ });
128
+ const border = declarations.find((declaration) => declaration.property === 'border' && visibleBorder(declaration.value));
129
+ const shaped = declarations.some((declaration) => /^(?:border-radius|background|background-color)$/u.test(declaration.property));
130
+ if (border && shaped && owned.length === 0)
131
+ violations.push({
132
+ rule: 'hand-made-frame',
133
+ line: border.line,
134
+ selector,
135
+ property: border.property,
136
+ message: 'a bordered, rounded or filled box is a hand-made card; use Surface, Section or a divider',
137
+ });
138
+ };
139
+ const walk = (source, masked, from, to, parents, violations) => {
140
+ let cursor = from;
141
+ let statementStart = from;
142
+ const declarations = [];
143
+ const flush = (text, offset) => {
144
+ const colon = text.indexOf(':');
145
+ if (colon < 0)
146
+ return;
147
+ const property = text.slice(0, colon).trim().toLowerCase();
148
+ if (!/^-?[a-z][a-z-]*$/u.test(property))
149
+ return;
150
+ const valueStart = offset + colon + 1;
151
+ const value = source.slice(valueStart, offset + text.length).trim();
152
+ declarations.push({ property, value, line: lineAt(source, offset + text.search(/\S/u)) });
153
+ };
154
+ while (cursor < to) {
155
+ const char = masked[cursor];
156
+ if (char === ';') {
157
+ if (parents)
158
+ flush(masked.slice(statementStart, cursor), statementStart);
159
+ statementStart = cursor + 1;
160
+ }
161
+ else if (char === '{') {
162
+ let depth = 1;
163
+ let end = cursor + 1;
164
+ while (end < to && depth > 0) {
165
+ if (masked[end] === '{')
166
+ depth++;
167
+ else if (masked[end] === '}')
168
+ depth--;
169
+ end++;
170
+ }
171
+ const prelude = masked.slice(statementStart, cursor).trim();
172
+ const bodyStart = cursor + 1;
173
+ const bodyEnd = end - 1;
174
+ if (prelude.startsWith('@')) {
175
+ if (CONDITIONAL_AT_RULE.test(prelude))
176
+ walk(source, masked, bodyStart, bodyEnd, parents, violations);
177
+ }
178
+ else if (prelude) {
179
+ const own = splitTopLevel(source.slice(statementStart, cursor).replace(/\/\*[\s\S]*?\*\//gu, ' '), ',')
180
+ .map(({ part }) => part.replace(/\s+/gu, ' ').trim())
181
+ .filter(Boolean);
182
+ const selectors = parents
183
+ ? parents.flatMap((parent) => own.map((child) => child.includes('&') ? child.replaceAll('&', parent) : `${parent} ${child}`))
184
+ : own;
185
+ walk(source, masked, bodyStart, bodyEnd, selectors, violations);
186
+ }
187
+ cursor = end;
188
+ statementStart = end;
189
+ continue;
190
+ }
191
+ cursor++;
192
+ }
193
+ if (parents) {
194
+ flush(masked.slice(statementStart, to), statementStart);
195
+ check(parents, declarations, violations);
196
+ }
197
+ };
198
+ /** Every layout-rule violation in one stylesheet, in source order. */
199
+ export const auditLayoutCss = (source) => {
200
+ const violations = [];
201
+ walk(source, mask(source), 0, source.length, null, violations);
202
+ return violations.sort((left, right) => left.line - right.line);
203
+ };
204
+ //# sourceMappingURL=layout-audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-audit.js","sourceRoot":"","sources":["../../../../../../packages/design-system/src/contract/layout-audit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /** @param {string} value */
2
+ export declare const parseDate: (value: string) => Date | null;
3
+ /** @param {Date} date */
4
+ export declare const dateText: (date: Date) => string;
5
+ /** @param {string} value @param {number} days */
6
+ export declare const addDays: (value: string, days: number) => string;
7
+ /** @param {string} value @param {number} offset */
8
+ export declare const moveMonth: (value: string, offset: number) => string;
9
+ /** @param {string} value */
10
+ export declare const monthStart: (value: string) => string;
11
+ /** @param {string} value */
12
+ export declare const monthEnd: (value: string) => string;
13
+ export declare const presetIds: string[];
14
+ /** @param {string} id @param {string} today @returns {[string, string] | null} */
15
+ export declare const presetRange: (id: string, today: string) => [string, string] | null;
16
+ /** @param {string} value @param {string} [min] @param {string} [max] */
17
+ export declare const withinBounds: (value: string, min?: string, max?: string) => boolean;
18
+ /** @param {string} start @param {string} end @returns {[string, string]} */
19
+ export declare const orderedRange: (start: string, end: string) => [string, string];
20
+ /** Compact display keeps the shared year once; submitted values remain ISO civil dates.
21
+ * @param {string} start @param {string} end */
22
+ export declare const formatRange: (start: string, end: string) => string;
23
+ //# sourceMappingURL=date-math.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-math.d.ts","sourceRoot":"","sources":["../../../../../../packages/design-system/src/forms/date-time/date-math.js"],"names":[],"mappings":"AAEA,4BAA4B;AAC5B,eAAO,MAAM,SAAS,UADV,MAAM,gBAWjB,CAAA;AACD,yBAAyB;AACzB,eAAO,MAAM,QAAQ,SADT,IAAI,WAMH,CAAA;AACb,iDAAiD;AACjD,eAAO,MAAM,OAAO,UADR,MAAM,QAAgB,MAAM,WAOvC,CAAA;AACD,mDAAmD;AACnD,eAAO,MAAM,SAAS,UADV,MAAM,UAAgB,MAAM,WAYvC,CAAA;AACD,4BAA4B;AAC5B,eAAO,MAAM,UAAU,UADX,MAAM,WAC4C,CAAA;AAC9D,4BAA4B;AAC5B,eAAO,MAAM,QAAQ,UADT,MAAM,WAMjB,CAAA;AACD,eAAO,MAAM,SAAS,UAAgF,CAAA;AACtG,kFAAkF;AAClF,eAAO,MAAM,WAAW,OADZ,MAAM,SAAa,MAAM,KAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAgBzE,CAAA;AACD,wEAAwE;AACxE,eAAO,MAAM,YAAY,UADb,MAAM,QAAgB,MAAM,QAAgB,MAAM,YAEgC,CAAA;AAC9F,4EAA4E;AAC5E,eAAO,MAAM,YAAY,UADb,MAAM,OAAgB,MAAM,KAAgB,CAAC,MAAM,EAAE,MAAM,CACiB,CAAA;AAExF;+CAC+C;AAC/C,eAAO,MAAM,WAAW,UADb,MAAM,OAAgB,MAAM,WAMtC,CAAA"}
@@ -0,0 +1,83 @@
1
+ // @ts-check
2
+ // UTC is only a stable axis for civil-date arithmetic, never a timezone conversion.
3
+ /** @param {string} value */
4
+ export const parseDate = (value) => {
5
+ if (!/^\d{4}-\d{2}-\d{2}$/.test(value)) return null
6
+ const [year, month, day] = value.split('-').map(Number)
7
+ if (year < 1 || year > 9999) return null
8
+ const date = new Date(0)
9
+ date.setUTCFullYear(year, month - 1, day)
10
+ date.setUTCHours(0, 0, 0, 0)
11
+ return date.getUTCFullYear() === year && date.getUTCMonth() === month - 1 && date.getUTCDate() === day
12
+ ? date
13
+ : null
14
+ }
15
+ /** @param {Date} date */
16
+ export const dateText = (date) =>
17
+ [
18
+ String(date.getUTCFullYear()).padStart(4, '0'),
19
+ String(date.getUTCMonth() + 1).padStart(2, '0'),
20
+ String(date.getUTCDate()).padStart(2, '0'),
21
+ ].join('-')
22
+ /** @param {string} value @param {number} days */
23
+ export const addDays = (value, days) => {
24
+ const date = parseDate(value)
25
+ if (!date) return ''
26
+ date.setUTCDate(date.getUTCDate() + days)
27
+ const result = dateText(date)
28
+ return parseDate(result) ? result : ''
29
+ }
30
+ /** @param {string} value @param {number} offset */
31
+ export const moveMonth = (value, offset) => {
32
+ const date = parseDate(value)
33
+ if (!date) return ''
34
+ const day = date.getUTCDate()
35
+ date.setUTCDate(1)
36
+ date.setUTCMonth(date.getUTCMonth() + offset)
37
+ const last = new Date(date)
38
+ last.setUTCMonth(last.getUTCMonth() + 1, 0)
39
+ date.setUTCDate(Math.min(day, last.getUTCDate()))
40
+ const result = dateText(date)
41
+ return parseDate(result) ? result : ''
42
+ }
43
+ /** @param {string} value */
44
+ export const monthStart = (value) => `${value.slice(0, 7)}-01`
45
+ /** @param {string} value */
46
+ export const monthEnd = (value) => {
47
+ const date = parseDate(value)
48
+ if (!date) return ''
49
+ date.setUTCMonth(date.getUTCMonth() + 1, 0)
50
+ return dateText(date)
51
+ }
52
+ export const presetIds = ['today', 'yesterday', 'last7', 'thisMonth', 'lastMonth', 'last30', 'last90']
53
+ /** @param {string} id @param {string} today @returns {[string, string] | null} */
54
+ export const presetRange = (id, today) => {
55
+ if (!parseDate(today)) return null
56
+ if (id === 'today') return [today, today]
57
+ if (id === 'yesterday') {
58
+ const day = addDays(today, -1)
59
+ return day ? [day, day] : null
60
+ }
61
+ if (id === 'thisMonth') return [monthStart(today), monthEnd(today)]
62
+ if (id === 'lastMonth') {
63
+ const day = moveMonth(today, -1)
64
+ return day ? [monthStart(day), monthEnd(day)] : null
65
+ }
66
+ const days = { last7: 7, last30: 30, last90: 90 }[/** @type {'last7'|'last30'|'last90'} */ (id)]
67
+ const start = days ? addDays(today, 1 - days) : ''
68
+ return start ? [start, today] : null
69
+ }
70
+ /** @param {string} value @param {string} [min] @param {string} [max] */
71
+ export const withinBounds = (value, min = '', max = '') =>
72
+ !!parseDate(value) && (!parseDate(min) || value >= min) && (!parseDate(max) || value <= max)
73
+ /** @param {string} start @param {string} end @returns {[string, string]} */
74
+ export const orderedRange = (start, end) => (start <= end ? [start, end] : [end, start])
75
+
76
+ /** Compact display keeps the shared year once; submitted values remain ISO civil dates.
77
+ * @param {string} start @param {string} end */
78
+ export const formatRange = (start, end) => {
79
+ if (!parseDate(start) || !parseDate(end)) return ''
80
+ const date = (/** @type {string} */ value, /** @type {boolean} */ year = true) =>
81
+ `${value.slice(8, 10)}/${value.slice(5, 7)}${year ? `/${value.slice(0, 4)}` : ''}`
82
+ return `${date(start, start.slice(0, 4) !== end.slice(0, 4))} – ${date(end)}`
83
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-math.js","sourceRoot":"","sources":["../../../../../../../packages/design-system/src/forms/date-time/date-math.js"],"names":[],"mappings":"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"}
@@ -1,14 +1,40 @@
1
1
  import type { TemplateResult } from '@ketvietlab/ketjs-view';
2
2
  import type { FieldProps } from '../../primitives/field/index.tsx';
3
3
  import type { FieldIssue } from '../shared.tsx';
4
- export declare const HOOKS: readonly ['date-range'];
5
- type TemporalProps = Omit<FieldProps, 'type' | 'fields' | 'control' | 'error'> & {
4
+ export declare const HOOKS: readonly ['date-picker', 'date-range', 'date-inputs', 'date-control-row', 'date-tools', 'date-range-error', 'date-calendar', 'date-calendar-head', 'date-calendar-title', 'date-calendar-body', 'date-field-control', 'date-range-preset', 'date-boundary', 'date-calendar-months', 'date-month', 'date-month-title', 'date-grid', 'date-weekday', 'date-cell', 'date-day', 'date-calendar-footer', 'date-calendar-status'];
5
+ export type DateRangePreset = 'today' | 'yesterday' | 'last7' | 'thisMonth' | 'lastMonth' | 'last30' | 'last90';
6
+ export type DatePickerLabels = {
7
+ open: string;
8
+ title: string;
9
+ previous: string;
10
+ next: string;
11
+ apply: string;
12
+ cancel: string;
13
+ chooseStart: string;
14
+ chooseEnd: string;
15
+ chooseDate: string;
16
+ invalidRange: string;
17
+ presets: string;
18
+ customRange: string;
19
+ invalidSelection: string;
20
+ presetLabels: Record<DateRangePreset, string>;
21
+ };
22
+ type CalendarOptions = {
23
+ /** Native inputs retain the browser's date format. Calendar labels default to Vietnamese. */
24
+ locale?: 'vi' | 'en';
25
+ /** Business-timezone civil date; omit for the browser's local today at opening. */
26
+ today?: string;
27
+ weekStartsOn?: 0 | 1;
28
+ calendarLabels?: Partial<Omit<DatePickerLabels, 'presetLabels'>> & {
29
+ presetLabels?: Partial<DatePickerLabels['presetLabels']>;
30
+ };
31
+ };
32
+ export type TemporalProps = Omit<FieldProps, 'type' | 'fields' | 'control' | 'error'> & {
6
33
  issues?: readonly FieldIssue[];
7
34
  error?: string | null;
8
35
  };
9
- /** Civil dates are passed through as YYYY-MM-DD text and are never converted through UTC. */
10
- export declare const DatePicker: (props: TemporalProps) => TemplateResult;
11
- export type DateRangePickerProps = {
36
+ export type DatePickerProps = TemporalProps & CalendarOptions;
37
+ export type DateRangePickerProps = CalendarOptions & {
12
38
  id: string;
13
39
  label: string;
14
40
  start: Omit<TemporalProps, 'label' | 'span'>;
@@ -16,10 +42,15 @@ export type DateRangePickerProps = {
16
42
  startLabel: string;
17
43
  endLabel: string;
18
44
  span?: 'half' | 'full';
45
+ /** All seven presets by default; false hides quick ranges. */
46
+ presets?: readonly DateRangePreset[] | false;
19
47
  };
48
+ /** Civil dates submit unchanged. Native fields also provide the no-JavaScript fallback. */
49
+ export declare const DatePicker: (props: DatePickerProps) => TemplateResult;
50
+ /** One visible range field; the two named civil-date boundaries remain the form contract. */
20
51
  export declare const DateRangePicker: (props: DateRangePickerProps) => TemplateResult;
21
52
  /** Local date-time text is submitted unchanged; the app adapter owns timezone interpretation. */
22
53
  export declare const DateTimePicker: (props: TemporalProps) => TemplateResult;
23
54
  export declare const TimePicker: (props: TemporalProps) => TemplateResult;
24
- export type { TemporalProps };
55
+ export {};
25
56
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/design-system/src/forms/date-time/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAE5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAElE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE/C,eAAO,MAAM,KAAK,YAAI,YAAY,CAAU,CAAA;AAE5C,KAAK,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC,GAAG;IAC/E,MAAM,CAAC,EAAE,SAAS,UAAU,EAAE,CAAA;IAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB,CAAA;AAOD,6FAA6F;AAC7F,eAAO,MAAM,UAAU,UAAW,aAAa,KAAG,cAA4D,CAAA;AAE9G,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,GAAG,MAAM,CAAC,CAAA;IAC5C,GAAG,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,GAAG,MAAM,CAAC,CAAA;IAC1C,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CACvB,CAAA;AAED,eAAO,MAAM,eAAe,UAAW,oBAAoB,KAAG,cAM7D,CAAA;AAED,iGAAiG;AACjG,eAAO,MAAM,cAAc,UAAW,aAAa,KAAG,cAErD,CAAA;AAED,eAAO,MAAM,UAAU,UAAW,aAAa,KAAG,cAA4D,CAAA;AAE9G,YAAY,EAAE,aAAa,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/design-system/src/forms/date-time/index.tsx"],"names":[],"mappings":"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"}