@acta-dev/web 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/LICENSE +21 -0
  2. package/astro.config.mjs +31 -0
  3. package/package.json +62 -0
  4. package/public/favicon.png +0 -0
  5. package/src/components/DocumentSearchList.astro +150 -0
  6. package/src/components/DocumentView.astro +198 -0
  7. package/src/components/LanguageSwitcher.tsx +115 -0
  8. package/src/components/SidebarToggle.tsx +42 -0
  9. package/src/components/ThemeToggle.tsx +129 -0
  10. package/src/components/graph/DocumentGraphIsland.tsx +226 -0
  11. package/src/components/graph/GraphContext.ts +15 -0
  12. package/src/components/graph/graph.css +330 -0
  13. package/src/components/graph/layout.ts +48 -0
  14. package/src/components/graph/nodes.tsx +80 -0
  15. package/src/components/ui/Button.astro +105 -0
  16. package/src/components/ui/Chip.astro +147 -0
  17. package/src/components/ui/Field.astro +29 -0
  18. package/src/components/ui/Input.astro +34 -0
  19. package/src/components/ui/Pill.astro +71 -0
  20. package/src/components/ui/SegmentedControl.astro +105 -0
  21. package/src/components/ui/Select.astro +41 -0
  22. package/src/components/ui/Tooltip.astro +94 -0
  23. package/src/layouts/BaseLayout.astro +147 -0
  24. package/src/lib/documents.test.ts +175 -0
  25. package/src/lib/documents.ts +156 -0
  26. package/src/lib/i18n-client.ts +32 -0
  27. package/src/lib/i18n.ts +92 -0
  28. package/src/lib/project.test.ts +24 -0
  29. package/src/lib/project.ts +120 -0
  30. package/src/lib/search-client.ts +192 -0
  31. package/src/lib/search.test.ts +94 -0
  32. package/src/lib/search.ts +153 -0
  33. package/src/locales/en/common.json +6 -0
  34. package/src/locales/en/dashboard.json +8 -0
  35. package/src/locales/en/documents.json +63 -0
  36. package/src/locales/en/graph.json +19 -0
  37. package/src/locales/en/search.json +7 -0
  38. package/src/locales/en/sidebar.json +25 -0
  39. package/src/locales/en/validation.json +13 -0
  40. package/src/locales/ru/common.json +6 -0
  41. package/src/locales/ru/dashboard.json +8 -0
  42. package/src/locales/ru/documents.json +63 -0
  43. package/src/locales/ru/graph.json +19 -0
  44. package/src/locales/ru/search.json +7 -0
  45. package/src/locales/ru/sidebar.json +25 -0
  46. package/src/locales/ru/validation.json +13 -0
  47. package/src/pages/documents/[id]/index.astro +39 -0
  48. package/src/pages/graph.astro +54 -0
  49. package/src/pages/index.astro +41 -0
  50. package/src/pages/ru/documents/[id]/index.astro +39 -0
  51. package/src/pages/ru/graph.astro +54 -0
  52. package/src/pages/ru/index.astro +41 -0
  53. package/src/pages/ru/search-index-full.json.ts +1 -0
  54. package/src/pages/ru/search.astro +27 -0
  55. package/src/pages/ru/validation.astro +63 -0
  56. package/src/pages/search-index-full.json.ts +12 -0
  57. package/src/pages/search-index.json.ts +12 -0
  58. package/src/pages/search.astro +27 -0
  59. package/src/pages/validation.astro +63 -0
  60. package/src/styles/global.css +1391 -0
  61. package/src/styles/themes/dark.css +61 -0
  62. package/src/styles/themes/light.css +63 -0
  63. package/src/styles/tokens/primitives.css +32 -0
  64. package/src/styles/tokens/semantic.css +34 -0
  65. package/src/styles/tokens/typography.css +28 -0
  66. package/tsconfig.json +11 -0
@@ -0,0 +1,61 @@
1
+ /* Direction A · Press — dark theme (night-mode treatment, accent unchanged) */
2
+ [data-theme="dark"] {
3
+ --color-bg: #15130f;
4
+ --color-panel: #221e17;
5
+ --color-panel-muted: #1b1813;
6
+ --color-text: #ede6d2;
7
+ --color-text-muted: #8a8273;
8
+ --color-border: #2c2820;
9
+ --color-border-soft: #23201a;
10
+ --color-accent: #4cae7d;
11
+ --color-accent-ink: #15130f;
12
+ --color-danger: #ff8a80;
13
+ --color-warning: #e0b15d;
14
+
15
+ --kind-adr-color: var(--color-text);
16
+ --kind-spec-color: var(--color-text-muted);
17
+
18
+ --status-active-fg: #67c089;
19
+ --status-accepted-fg: #8ab7ff;
20
+ --status-draft-fg: #e0b15d;
21
+ --status-implemented-fg: #7ac0e0;
22
+ --status-proposed-fg: #baa8ff;
23
+ --status-paused-fg: #e0b15d;
24
+ --status-rejected-fg: #ff8a80;
25
+ --status-deprecated-fg: #8a8273;
26
+ --status-superseded-fg: #8a8273;
27
+ --status-obsolete-fg: #8a8273;
28
+
29
+ --status-active-bg: color-mix(in srgb, var(--status-active-fg) 18%, var(--color-panel));
30
+ --status-active-border: color-mix(in srgb, var(--status-active-fg) 45%, var(--color-panel));
31
+ --status-accepted-bg: color-mix(in srgb, var(--status-accepted-fg) 18%, var(--color-panel));
32
+ --status-accepted-border: color-mix(in srgb, var(--status-accepted-fg) 45%, var(--color-panel));
33
+ --status-draft-bg: color-mix(in srgb, var(--status-draft-fg) 18%, var(--color-panel));
34
+ --status-draft-border: color-mix(in srgb, var(--status-draft-fg) 45%, var(--color-panel));
35
+ --status-implemented-bg: color-mix(in srgb, var(--status-implemented-fg) 18%, var(--color-panel));
36
+ --status-implemented-border: color-mix(
37
+ in srgb,
38
+ var(--status-implemented-fg) 45%,
39
+ var(--color-panel)
40
+ );
41
+ --status-proposed-bg: color-mix(in srgb, var(--status-proposed-fg) 18%, var(--color-panel));
42
+ --status-proposed-border: color-mix(in srgb, var(--status-proposed-fg) 45%, var(--color-panel));
43
+ --status-paused-bg: color-mix(in srgb, var(--status-paused-fg) 18%, var(--color-panel));
44
+ --status-paused-border: color-mix(in srgb, var(--status-paused-fg) 45%, var(--color-panel));
45
+ --status-rejected-bg: color-mix(in srgb, var(--status-rejected-fg) 18%, var(--color-panel));
46
+ --status-rejected-border: color-mix(in srgb, var(--status-rejected-fg) 45%, var(--color-panel));
47
+ --status-deprecated-bg: color-mix(in srgb, var(--status-deprecated-fg) 18%, var(--color-panel));
48
+ --status-deprecated-border: color-mix(
49
+ in srgb,
50
+ var(--status-deprecated-fg) 45%,
51
+ var(--color-panel)
52
+ );
53
+ --status-superseded-bg: color-mix(in srgb, var(--status-superseded-fg) 18%, var(--color-panel));
54
+ --status-superseded-border: color-mix(
55
+ in srgb,
56
+ var(--status-superseded-fg) 45%,
57
+ var(--color-panel)
58
+ );
59
+ --status-obsolete-bg: color-mix(in srgb, var(--status-obsolete-fg) 18%, var(--color-panel));
60
+ --status-obsolete-border: color-mix(in srgb, var(--status-obsolete-fg) 45%, var(--color-panel));
61
+ }
@@ -0,0 +1,63 @@
1
+ /* Direction A · Press — light theme (neutral warmth, emerald accent) */
2
+ [data-theme="light"] {
3
+ --color-bg: #f1efe6;
4
+ --color-panel: #fcfaf1;
5
+ --color-panel-muted: #f8f5ec;
6
+ --color-text: #1a1612;
7
+ --color-text-muted: #6e665b;
8
+ --color-border: #d8d2be;
9
+ --color-border-soft: #e6dfcb;
10
+ --color-accent: #1f8a5b;
11
+ --color-accent-ink: #ffffff;
12
+ --color-danger: #b42318;
13
+ --color-warning: #8a5a00;
14
+
15
+ --kind-adr-color: var(--color-text);
16
+ --kind-spec-color: var(--color-text-muted);
17
+
18
+ /* Press status tones — colored ink + dot, no fill on the list */
19
+ --status-active-fg: #2f6a3e;
20
+ --status-accepted-fg: #355e8a;
21
+ --status-draft-fg: #8a5a00;
22
+ --status-implemented-fg: #3a6b86;
23
+ --status-proposed-fg: #6b5baa;
24
+ --status-paused-fg: #8a5a00;
25
+ --status-rejected-fg: #b42318;
26
+ --status-deprecated-fg: #6e665b;
27
+ --status-superseded-fg: #6e665b;
28
+ --status-obsolete-fg: #6e665b;
29
+
30
+ /* Soft fills + borders kept for the graph view (uses the same tones) */
31
+ --status-active-bg: color-mix(in srgb, var(--status-active-fg) 12%, var(--color-panel));
32
+ --status-active-border: color-mix(in srgb, var(--status-active-fg) 36%, var(--color-panel));
33
+ --status-accepted-bg: color-mix(in srgb, var(--status-accepted-fg) 12%, var(--color-panel));
34
+ --status-accepted-border: color-mix(in srgb, var(--status-accepted-fg) 36%, var(--color-panel));
35
+ --status-draft-bg: color-mix(in srgb, var(--status-draft-fg) 12%, var(--color-panel));
36
+ --status-draft-border: color-mix(in srgb, var(--status-draft-fg) 36%, var(--color-panel));
37
+ --status-implemented-bg: color-mix(in srgb, var(--status-implemented-fg) 12%, var(--color-panel));
38
+ --status-implemented-border: color-mix(
39
+ in srgb,
40
+ var(--status-implemented-fg) 36%,
41
+ var(--color-panel)
42
+ );
43
+ --status-proposed-bg: color-mix(in srgb, var(--status-proposed-fg) 12%, var(--color-panel));
44
+ --status-proposed-border: color-mix(in srgb, var(--status-proposed-fg) 36%, var(--color-panel));
45
+ --status-paused-bg: color-mix(in srgb, var(--status-paused-fg) 12%, var(--color-panel));
46
+ --status-paused-border: color-mix(in srgb, var(--status-paused-fg) 36%, var(--color-panel));
47
+ --status-rejected-bg: color-mix(in srgb, var(--status-rejected-fg) 12%, var(--color-panel));
48
+ --status-rejected-border: color-mix(in srgb, var(--status-rejected-fg) 36%, var(--color-panel));
49
+ --status-deprecated-bg: color-mix(in srgb, var(--status-deprecated-fg) 12%, var(--color-panel));
50
+ --status-deprecated-border: color-mix(
51
+ in srgb,
52
+ var(--status-deprecated-fg) 36%,
53
+ var(--color-panel)
54
+ );
55
+ --status-superseded-bg: color-mix(in srgb, var(--status-superseded-fg) 12%, var(--color-panel));
56
+ --status-superseded-border: color-mix(
57
+ in srgb,
58
+ var(--status-superseded-fg) 36%,
59
+ var(--color-panel)
60
+ );
61
+ --status-obsolete-bg: color-mix(in srgb, var(--status-obsolete-fg) 12%, var(--color-panel));
62
+ --status-obsolete-border: color-mix(in srgb, var(--status-obsolete-fg) 36%, var(--color-panel));
63
+ }
@@ -0,0 +1,32 @@
1
+ :root {
2
+ --space-1: 4px;
3
+ --space-1-5: 6px;
4
+ --space-2: 8px;
5
+ --space-3: 12px;
6
+ --space-3-5: 14px;
7
+ --space-4: 16px;
8
+ --space-4-5: 18px;
9
+ --space-5: 20px;
10
+ --space-6: 24px;
11
+ --space-7: 28px;
12
+ --space-8: 32px;
13
+ --space-9: 36px;
14
+ --space-10: 40px;
15
+ --space-11: 48px;
16
+ --space-12: 56px;
17
+
18
+ --radius-sm: 4px;
19
+ --radius-md: 6px;
20
+ --radius-lg: 8px;
21
+ --radius-pill: 999px;
22
+
23
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.06);
24
+ --shadow-md: 0 6px 16px rgba(0, 0, 0, 0.1);
25
+
26
+ /* motion — strong custom curves; built-in easings lack punch */
27
+ --ease-out: cubic-bezier(0.23, 1, 0.32, 1);
28
+ --ease-in-out: cubic-bezier(0.77, 0, 0.175, 1);
29
+ --duration-press: 140ms;
30
+ --duration-hover: 160ms;
31
+ --duration-popover: 180ms;
32
+ }
@@ -0,0 +1,34 @@
1
+ /* Semantic token contract. Actual values set per-theme in themes/light.css and themes/dark.css. */
2
+ :root {
3
+ /* surfaces */
4
+ --color-bg: initial;
5
+ --color-panel: initial;
6
+ --color-panel-muted: initial;
7
+
8
+ /* text */
9
+ --color-text: initial;
10
+ --color-text-muted: initial;
11
+
12
+ /* lines */
13
+ --color-border: initial;
14
+ --color-border-soft: initial;
15
+
16
+ /* feedback */
17
+ --color-accent: initial;
18
+ --color-accent-ink: initial;
19
+ --color-danger: initial;
20
+ --color-warning: initial;
21
+
22
+ /* legacy aliases (kept for any consumers not yet migrated) */
23
+ --bg: var(--color-bg);
24
+ --panel: var(--color-panel);
25
+ --panel-muted: var(--color-panel-muted);
26
+ --text: var(--color-text);
27
+ --muted: var(--color-text-muted);
28
+ --border: var(--color-border);
29
+ --border-soft: var(--color-border-soft);
30
+ --accent: var(--color-accent);
31
+ --danger: var(--color-danger);
32
+ --warning: var(--color-warning);
33
+ --radius: var(--radius-lg);
34
+ }
@@ -0,0 +1,28 @@
1
+ :root {
2
+ /* Press direction: editorial serif body + grotesque sans for UI chrome */
3
+ --font-serif: "Newsreader", "Source Serif 4", Georgia, serif;
4
+ --font-sans:
5
+ "Inter Tight", Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",
6
+ sans-serif;
7
+ --font-mono: "JetBrains Mono", ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;
8
+
9
+ --text-xs: 11px;
10
+ --text-sm: 12px;
11
+ --text-base: 13px;
12
+ --text-md: 14px;
13
+ --text-lg: 16px;
14
+ --text-xl: 20px;
15
+ --text-2xl: 30px;
16
+ --text-3xl: 56px;
17
+ --text-display: 68px;
18
+
19
+ --leading-tight: 1.2;
20
+ --leading-snug: 1.35;
21
+ --leading-normal: 1.55;
22
+ --leading-relaxed: 1.7;
23
+
24
+ --weight-regular: 400;
25
+ --weight-medium: 500;
26
+ --weight-semibold: 600;
27
+ --weight-bold: 700;
28
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,11 @@
1
+ {
2
+ "extends": "astro/tsconfigs/strict",
3
+ "compilerOptions": {
4
+ "baseUrl": ".",
5
+ "paths": {
6
+ "@lib/*": ["src/lib/*"]
7
+ }
8
+ },
9
+ "include": [".astro/types.d.ts", "src/**/*", "astro.config.mjs"],
10
+ "exclude": ["dist"]
11
+ }