@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.
- package/LICENSE +21 -0
- package/astro.config.mjs +31 -0
- package/package.json +62 -0
- package/public/favicon.png +0 -0
- package/src/components/DocumentSearchList.astro +150 -0
- package/src/components/DocumentView.astro +198 -0
- package/src/components/LanguageSwitcher.tsx +115 -0
- package/src/components/SidebarToggle.tsx +42 -0
- package/src/components/ThemeToggle.tsx +129 -0
- package/src/components/graph/DocumentGraphIsland.tsx +226 -0
- package/src/components/graph/GraphContext.ts +15 -0
- package/src/components/graph/graph.css +330 -0
- package/src/components/graph/layout.ts +48 -0
- package/src/components/graph/nodes.tsx +80 -0
- package/src/components/ui/Button.astro +105 -0
- package/src/components/ui/Chip.astro +147 -0
- package/src/components/ui/Field.astro +29 -0
- package/src/components/ui/Input.astro +34 -0
- package/src/components/ui/Pill.astro +71 -0
- package/src/components/ui/SegmentedControl.astro +105 -0
- package/src/components/ui/Select.astro +41 -0
- package/src/components/ui/Tooltip.astro +94 -0
- package/src/layouts/BaseLayout.astro +147 -0
- package/src/lib/documents.test.ts +175 -0
- package/src/lib/documents.ts +156 -0
- package/src/lib/i18n-client.ts +32 -0
- package/src/lib/i18n.ts +92 -0
- package/src/lib/project.test.ts +24 -0
- package/src/lib/project.ts +120 -0
- package/src/lib/search-client.ts +192 -0
- package/src/lib/search.test.ts +94 -0
- package/src/lib/search.ts +153 -0
- package/src/locales/en/common.json +6 -0
- package/src/locales/en/dashboard.json +8 -0
- package/src/locales/en/documents.json +63 -0
- package/src/locales/en/graph.json +19 -0
- package/src/locales/en/search.json +7 -0
- package/src/locales/en/sidebar.json +25 -0
- package/src/locales/en/validation.json +13 -0
- package/src/locales/ru/common.json +6 -0
- package/src/locales/ru/dashboard.json +8 -0
- package/src/locales/ru/documents.json +63 -0
- package/src/locales/ru/graph.json +19 -0
- package/src/locales/ru/search.json +7 -0
- package/src/locales/ru/sidebar.json +25 -0
- package/src/locales/ru/validation.json +13 -0
- package/src/pages/documents/[id]/index.astro +39 -0
- package/src/pages/graph.astro +54 -0
- package/src/pages/index.astro +41 -0
- package/src/pages/ru/documents/[id]/index.astro +39 -0
- package/src/pages/ru/graph.astro +54 -0
- package/src/pages/ru/index.astro +41 -0
- package/src/pages/ru/search-index-full.json.ts +1 -0
- package/src/pages/ru/search.astro +27 -0
- package/src/pages/ru/validation.astro +63 -0
- package/src/pages/search-index-full.json.ts +12 -0
- package/src/pages/search-index.json.ts +12 -0
- package/src/pages/search.astro +27 -0
- package/src/pages/validation.astro +63 -0
- package/src/styles/global.css +1391 -0
- package/src/styles/themes/dark.css +61 -0
- package/src/styles/themes/light.css +63 -0
- package/src/styles/tokens/primitives.css +32 -0
- package/src/styles/tokens/semantic.css +34 -0
- package/src/styles/tokens/typography.css +28 -0
- 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
|
+
}
|