@heuresys/ui 0.1.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 (40) hide show
  1. package/README.md +22 -0
  2. package/dist/index.cjs +9259 -0
  3. package/dist/index.d.cts +2528 -0
  4. package/dist/index.d.ts +2528 -0
  5. package/dist/index.mjs +8971 -0
  6. package/package.json +166 -0
  7. package/src/assets/brand/candidates/UXIX-0007-logo/README.md +31 -0
  8. package/src/assets/brand/candidates/UXIX-0007-logo/heuresys-logo-A-full.svg +11 -0
  9. package/src/assets/brand/candidates/UXIX-0007-logo/heuresys-logo-A-symbol.svg +8 -0
  10. package/src/assets/brand/candidates/UXIX-0007-logo/heuresys-logo-B-full.svg +12 -0
  11. package/src/assets/brand/candidates/UXIX-0007-logo/heuresys-logo-B-symbol.svg +9 -0
  12. package/src/assets/brand/candidates/UXIX-0007-logo/heuresys-logo-C-full.svg +13 -0
  13. package/src/assets/brand/candidates/UXIX-0007-logo/heuresys-logo-C-symbol.svg +10 -0
  14. package/src/assets/brand/candidates/UXIX-0007-logo/heuresys-logo-D-full.svg +6 -0
  15. package/src/assets/brand/candidates/UXIX-0007-logo/heuresys-logo-D-symbol.svg +4 -0
  16. package/src/assets/brand/legacy/README.md +34 -0
  17. package/src/assets/brand/legacy/favicon.svg +16 -0
  18. package/src/assets/brand/legacy/heuresys-mark.svg +14 -0
  19. package/src/assets/brand/legacy/heuresys-wordmark-monochrome-dark.svg +15 -0
  20. package/src/assets/brand/legacy/heuresys-wordmark-monochrome-light.svg +15 -0
  21. package/src/assets/brand/legacy/heuresys-wordmark.svg +21 -0
  22. package/src/assets/brand/legacy/og-image-template.svg +44 -0
  23. package/src/assets/brand/logo/heuresys-mark-16.png +0 -0
  24. package/src/assets/brand/logo/heuresys-mark-180.png +0 -0
  25. package/src/assets/brand/logo/heuresys-mark-192.png +0 -0
  26. package/src/assets/brand/logo/heuresys-mark-32.png +0 -0
  27. package/src/assets/brand/logo/heuresys-mark-48.png +0 -0
  28. package/src/assets/brand/logo/heuresys-mark-512.png +0 -0
  29. package/src/assets/brand/logo/heuresys-mark-64.png +0 -0
  30. package/src/assets/brand/social/linkedin-banner-1200x627.png +0 -0
  31. package/src/assets/brand/social/og-image-1200x630.png +0 -0
  32. package/src/assets/brand/social/twitter-card-1200x628.png +0 -0
  33. package/src/components/brand/candidates/LogoCandidateA.tsx +87 -0
  34. package/src/components/brand/candidates/LogoCandidateB.tsx +65 -0
  35. package/src/components/brand/candidates/LogoCandidateC.tsx +68 -0
  36. package/src/components/brand/candidates/LogoCandidateD.tsx +77 -0
  37. package/src/components/brand/candidates/index.ts +4 -0
  38. package/src/styles/globals.css +21 -0
  39. package/src/styles/hover-affordance.css +280 -0
  40. package/src/styles/tokens.css +109 -0
package/package.json ADDED
@@ -0,0 +1,166 @@
1
+ {
2
+ "name": "@heuresys/ui",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "description": "Heuresys UI — design system + dashboard components (Tier 1-16)",
6
+ "license": "PROPRIETARY",
7
+ "publishConfig": {
8
+ "access": "public"
9
+ },
10
+ "main": "./dist/index.cjs",
11
+ "module": "./dist/index.mjs",
12
+ "types": "./dist/index.d.ts",
13
+ "exports": {
14
+ ".": {
15
+ "types": "./dist/index.d.ts",
16
+ "import": "./dist/index.mjs",
17
+ "require": "./dist/index.cjs"
18
+ },
19
+ "./styles": "./src/styles/globals.css",
20
+ "./brand/candidates": "./src/components/brand/candidates/index.ts",
21
+ "./assets/brand/*": "./src/assets/brand/*"
22
+ },
23
+ "files": [
24
+ "dist",
25
+ "src/styles",
26
+ "src/components/brand/candidates",
27
+ "src/assets/brand",
28
+ "README.md"
29
+ ],
30
+ "scripts": {
31
+ "build": "tsup",
32
+ "publish:dry": "npm publish --dry-run",
33
+ "publish:release": "npm publish",
34
+ "storybook": "storybook dev -p 6006",
35
+ "dev": "storybook dev -p 6006",
36
+ "build-storybook": "storybook build",
37
+ "typecheck": "tsc --noEmit",
38
+ "lint": "echo '@heuresys/ui: lint via tsc only' && exit 0",
39
+ "test": "vitest run",
40
+ "test:watch": "vitest",
41
+ "test:coverage": "vitest run --coverage",
42
+ "clean": "rimraf storybook-static node_modules/.cache",
43
+ "test:unit": "vitest run"
44
+ },
45
+ "dependencies": {
46
+ "@dnd-kit/core": "^6.3.1",
47
+ "@dnd-kit/sortable": "^10.0.0",
48
+ "@dnd-kit/utilities": "^3.2.2",
49
+ "@hookform/resolvers": "^5.2.2",
50
+ "@iarna/toml": "^2.2.5",
51
+ "@radix-ui/react-accordion": "^1.2.12",
52
+ "@radix-ui/react-alert-dialog": "^1.1.15",
53
+ "@radix-ui/react-avatar": "^1.1.11",
54
+ "@radix-ui/react-checkbox": "^1.3.3",
55
+ "@radix-ui/react-collapsible": "^1.1.12",
56
+ "@radix-ui/react-context-menu": "^2.2.16",
57
+ "@radix-ui/react-dialog": "^1.1.15",
58
+ "@radix-ui/react-dropdown-menu": "^2.1.16",
59
+ "@radix-ui/react-hover-card": "^1.1.15",
60
+ "@radix-ui/react-label": "^2.1.8",
61
+ "@radix-ui/react-menubar": "^1.1.16",
62
+ "@radix-ui/react-navigation-menu": "^1.2.14",
63
+ "@radix-ui/react-popover": "^1.1.15",
64
+ "@radix-ui/react-progress": "^1.1.8",
65
+ "@radix-ui/react-radio-group": "^1.3.8",
66
+ "@radix-ui/react-select": "^2.2.6",
67
+ "@radix-ui/react-separator": "^1.1.8",
68
+ "@radix-ui/react-slider": "^1.3.6",
69
+ "@radix-ui/react-slot": "^1.1.0",
70
+ "@radix-ui/react-switch": "^1.2.6",
71
+ "@radix-ui/react-tabs": "^1.1.13",
72
+ "@radix-ui/react-toast": "^1.2.0",
73
+ "@radix-ui/react-tooltip": "^1.2.8",
74
+ "@react-three/drei": "^10.7.7",
75
+ "@react-three/fiber": "^9.6.1",
76
+ "@tanstack/react-query": "^5.100.9",
77
+ "@tanstack/react-table": "^8.21.3",
78
+ "@tanstack/react-virtual": "^3.13.24",
79
+ "@types/canvas-confetti": "^1.9.0",
80
+ "@types/cytoscape": "^3.31.0",
81
+ "@types/d3": "^7.4.3",
82
+ "@types/papaparse": "^5.5.2",
83
+ "@types/qrcode": "^1.5.6",
84
+ "@types/react-grid-layout": "^2.1.0",
85
+ "@types/zxcvbn": "^4.4.5",
86
+ "@use-gesture/react": "^10.3.1",
87
+ "ai": "^6.0.173",
88
+ "canvas-confetti": "^1.9.4",
89
+ "class-variance-authority": "^0.7.1",
90
+ "clsx": "^2.1.1",
91
+ "cmdk": "^1.1.1",
92
+ "cytoscape": "^3.33.3",
93
+ "d3": "^7.9.0",
94
+ "date-fns": "^4.1.0",
95
+ "echarts": "^6.0.0",
96
+ "echarts-for-react": "^3.0.6",
97
+ "exceljs": "^4.4.0",
98
+ "fast-xml-parser": "^5.7.2",
99
+ "focus-trap": "^8.2.0",
100
+ "focus-trap-react": "^12.0.1",
101
+ "framer-motion": "^12.38.0",
102
+ "jsqr": "^1.4.0",
103
+ "jszip": "^3.10.1",
104
+ "katex": "^0.16.45",
105
+ "lottie-react": "^2.4.1",
106
+ "lucide-react": "^1.14.0",
107
+ "mermaid": "^11.14.0",
108
+ "papaparse": "^5.5.3",
109
+ "qrcode": "^1.5.4",
110
+ "react-cytoscapejs": "^2.0.0",
111
+ "react-grid-layout": "^2.2.3",
112
+ "react-hook-form": "^7.74.0",
113
+ "react-international-phone": "^4.8.0",
114
+ "react-intersection-observer": "^10.0.3",
115
+ "react-markdown": "^10.1.0",
116
+ "react-signature-canvas": "^1.1.0-alpha.2",
117
+ "reactflow": "^11.11.4",
118
+ "recharts": "^3.8.1",
119
+ "rehype-katex": "^7.0.1",
120
+ "remark-gfm": "^4.0.1",
121
+ "remark-math": "^6.0.0",
122
+ "shiki": "^4.0.2",
123
+ "signature_pad": "^5.1.3",
124
+ "sonner": "^2.0.7",
125
+ "tailwind-merge": "^3.5.0",
126
+ "three": "^0.184.0",
127
+ "use-gesture": "^1.0.0",
128
+ "vaul": "^1.1.2",
129
+ "zod": "^3.25.76",
130
+ "zxcvbn": "^4.4.2"
131
+ },
132
+ "peerDependencies": {
133
+ "react": "^19.2.0",
134
+ "react-dom": "^19.2.0"
135
+ },
136
+ "devDependencies": {
137
+ "@storybook/addon-a11y": "^10.3.6",
138
+ "@storybook/addon-themes": "^10.3.6",
139
+ "@storybook/react-vite": "10.3.6",
140
+ "@tailwindcss/vite": "4.2.4",
141
+ "@testing-library/dom": "10.4.1",
142
+ "@testing-library/jest-dom": "6.9.1",
143
+ "@testing-library/react": "16.3.2",
144
+ "@types/jest-axe": "^3.5.9",
145
+ "@types/react": "19.2.14",
146
+ "@types/react-dom": "19.2.3",
147
+ "@vitejs/plugin-react": "5.2.0",
148
+ "@vitest/coverage-v8": "^4.1.0",
149
+ "jest-axe": "^10.0.0",
150
+ "jsdom": "29.1.1",
151
+ "msw": "^2.14.3",
152
+ "msw-storybook-addon": "^2.0.7",
153
+ "react": "19.2.5",
154
+ "react-dom": "19.2.5",
155
+ "storybook": "10.3.6",
156
+ "tailwindcss": "4.2.4",
157
+ "tsup": "^8.5.1",
158
+ "typescript": "6.0.3",
159
+ "vite": "7.3.2",
160
+ "vitest": "^4.1.0"
161
+ },
162
+ "engines": {
163
+ "node": ">=20.0.0",
164
+ "npm": ">=10.0.0"
165
+ }
166
+ }
@@ -0,0 +1,31 @@
1
+ # UXIX-0007 — Logo candidates
2
+
3
+ Three exploratory logo candidates for the Heuresys brand identity v1. All SVG use `stroke="currentColor"` / `fill="currentColor"` so they inherit color from CSS (compatible with palette switcher + dark mode).
4
+
5
+ ## Candidates
6
+
7
+ | ID | Concept | Symbol viewBox | Full viewBox | Wordmark weight |
8
+ |----|---------|----------------|--------------|-----------------|
9
+ | A | Hex node mark — hexagonal frame with internal 3-node constellation (skill + role + capability) | 48×48 | 220×48 | 700 (bold), letter-spacing −0.5 |
10
+ | B | H ladder mark — rounded square with custom H letterform implying skill-progression rungs | 48×48 | 220×48 | 500 (medium), letter-spacing 0 |
11
+ | C | Triangle constellation mark — circle scaffold + three nodes forming a triangle (people / role / capability) | 48×48 | 220×48 | 300 (light), letter-spacing 1, all-lowercase |
12
+
13
+ ## How to review
14
+
15
+ 1. Open `/showcase` in the running webapp (`pnpm dev` in `apps/web`); navigate to `/showcase/logo` (route to be added in the next iteration of this session — pending).
16
+ 2. View each candidate in light + dark theme; confirm `currentColor` inheritance.
17
+ 3. Render at sidebar-collapsed scale (24×24 effective for symbol) and at header scale (32px height) to verify legibility.
18
+ 4. Capture choice via `prompts/DESIGN_DECISION_CAPTURE_PROMPT.md` → update `DECISION_REGISTER.md` row UXIX-0007 to `Accepted` + create `ADR-0007-heuresys-logo-system.md`.
19
+
20
+ ## Files
21
+
22
+ - `heuresys-logo-A-symbol.svg` — 48×48 symbol mark only
23
+ - `heuresys-logo-A-full.svg` — 220×48 symbol + wordmark
24
+ - `heuresys-logo-B-symbol.svg`
25
+ - `heuresys-logo-B-full.svg`
26
+ - `heuresys-logo-C-symbol.svg`
27
+ - `heuresys-logo-C-full.svg`
28
+
29
+ ## After Acceptance
30
+
31
+ The chosen candidate's symbol + full files are promoted to `D:\ux-design-shared\ui\src\brand\` as the canonical assets, then derivative variants (horizontal / monochrome / light / dark) and the favicon set (favicon.ico, favicon.svg, apple-touch-icon.png, icon-192.png, icon-512.png, manifest.webmanifest) are generated. The non-chosen candidates remain here as historical record (no deletion per register Rule 1).
@@ -0,0 +1,11 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 220 48" role="img" aria-label="Heuresys candidate A — hex node + wordmark">
2
+ <title>Heuresys candidate A — hex node + wordmark</title>
3
+ <g>
4
+ <path d="M24 4 L41.32 14 V34 L24 44 L6.68 34 V14 Z" fill="none" stroke="currentColor" stroke-width="3" stroke-linejoin="round"/>
5
+ <circle cx="16" cy="18" r="2.5" fill="currentColor"/>
6
+ <circle cx="32" cy="18" r="2.5" fill="currentColor"/>
7
+ <circle cx="24" cy="32" r="2.5" fill="currentColor"/>
8
+ <path d="M16 18 L24 32 L32 18 M16 18 L32 18" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
9
+ </g>
10
+ <text x="56" y="32" font-family="'Exo 2', system-ui, -apple-system, 'Segoe UI', sans-serif" font-size="24" font-weight="700" letter-spacing="-0.5" fill="currentColor">Heuresys</text>
11
+ </svg>
@@ -0,0 +1,8 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" role="img" aria-label="Heuresys candidate A — hex node mark">
2
+ <title>Heuresys candidate A — hex node mark</title>
3
+ <path d="M24 4 L41.32 14 V34 L24 44 L6.68 34 V14 Z" fill="none" stroke="currentColor" stroke-width="3" stroke-linejoin="round"/>
4
+ <circle cx="16" cy="18" r="2.5" fill="currentColor"/>
5
+ <circle cx="32" cy="18" r="2.5" fill="currentColor"/>
6
+ <circle cx="24" cy="32" r="2.5" fill="currentColor"/>
7
+ <path d="M16 18 L24 32 L32 18 M16 18 L32 18" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
8
+ </svg>
@@ -0,0 +1,12 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 220 48" role="img" aria-label="Heuresys candidate B — H ladder + wordmark">
2
+ <title>Heuresys candidate B — H ladder + wordmark</title>
3
+ <g>
4
+ <rect x="6" y="6" width="36" height="36" rx="8" fill="none" stroke="currentColor" stroke-width="3"/>
5
+ <line x1="16" y1="14" x2="16" y2="34" stroke="currentColor" stroke-width="3" stroke-linecap="round"/>
6
+ <line x1="32" y1="14" x2="32" y2="34" stroke="currentColor" stroke-width="3" stroke-linecap="round"/>
7
+ <line x1="16" y1="19" x2="32" y2="19" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"/>
8
+ <line x1="16" y1="24" x2="32" y2="24" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"/>
9
+ <line x1="16" y1="29" x2="32" y2="29" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"/>
10
+ </g>
11
+ <text x="56" y="32" font-family="'Exo 2', system-ui, -apple-system, 'Segoe UI', sans-serif" font-size="24" font-weight="500" letter-spacing="0" fill="currentColor">Heuresys</text>
12
+ </svg>
@@ -0,0 +1,9 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" role="img" aria-label="Heuresys candidate B — H ladder mark">
2
+ <title>Heuresys candidate B — H ladder mark</title>
3
+ <rect x="6" y="6" width="36" height="36" rx="8" fill="none" stroke="currentColor" stroke-width="3"/>
4
+ <line x1="16" y1="14" x2="16" y2="34" stroke="currentColor" stroke-width="3" stroke-linecap="round"/>
5
+ <line x1="32" y1="14" x2="32" y2="34" stroke="currentColor" stroke-width="3" stroke-linecap="round"/>
6
+ <line x1="16" y1="19" x2="32" y2="19" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"/>
7
+ <line x1="16" y1="24" x2="32" y2="24" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"/>
8
+ <line x1="16" y1="29" x2="32" y2="29" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"/>
9
+ </svg>
@@ -0,0 +1,13 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 220 48" role="img" aria-label="Heuresys candidate C — triangle constellation + wordmark">
2
+ <title>Heuresys candidate C — triangle constellation + wordmark</title>
3
+ <g>
4
+ <circle cx="24" cy="24" r="20" fill="none" stroke="currentColor" stroke-width="2" opacity="0.4"/>
5
+ <circle cx="24" cy="12" r="4" fill="currentColor"/>
6
+ <circle cx="13" cy="32" r="4" fill="currentColor"/>
7
+ <circle cx="35" cy="32" r="4" fill="currentColor"/>
8
+ <line x1="24" y1="12" x2="13" y2="32" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
9
+ <line x1="24" y1="12" x2="35" y2="32" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
10
+ <line x1="13" y1="32" x2="35" y2="32" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
11
+ </g>
12
+ <text x="56" y="32" font-family="'Exo 2', system-ui, -apple-system, 'Segoe UI', sans-serif" font-size="22" font-weight="300" letter-spacing="1" fill="currentColor">heuresys</text>
13
+ </svg>
@@ -0,0 +1,10 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" role="img" aria-label="Heuresys candidate C — triangle constellation mark">
2
+ <title>Heuresys candidate C — triangle constellation mark</title>
3
+ <circle cx="24" cy="24" r="20" fill="none" stroke="currentColor" stroke-width="2" opacity="0.4"/>
4
+ <circle cx="24" cy="12" r="4" fill="currentColor"/>
5
+ <circle cx="13" cy="32" r="4" fill="currentColor"/>
6
+ <circle cx="35" cy="32" r="4" fill="currentColor"/>
7
+ <line x1="24" y1="12" x2="13" y2="32" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
8
+ <line x1="24" y1="12" x2="35" y2="32" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
9
+ <line x1="13" y1="32" x2="35" y2="32" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
10
+ </svg>
@@ -0,0 +1,6 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 220 48" role="img" aria-label="Heuresys candidate D — Y-accent wordmark">
2
+ <title>Heuresys candidate D — Y-accent wordmark (legacy port)</title>
3
+ <text x="110" y="34" text-anchor="middle" font-family="'Exo 2', system-ui, -apple-system, 'Segoe UI', sans-serif" font-size="34" font-weight="700" letter-spacing="-0.5">
4
+ <tspan fill="#3B82F6">heures</tspan><tspan fill="#A855F7">y</tspan><tspan fill="#3B82F6">s</tspan>
5
+ </text>
6
+ </svg>
@@ -0,0 +1,4 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" role="img" aria-label="Heuresys candidate D — Y-accent mark">
2
+ <title>Heuresys candidate D — Y-accent mark (legacy port)</title>
3
+ <text x="24" y="38" text-anchor="middle" font-family="'Exo 2', system-ui, -apple-system, 'Segoe UI', sans-serif" font-size="44" font-weight="700" letter-spacing="0" fill="#A855F7">y</text>
4
+ </svg>
@@ -0,0 +1,34 @@
1
+ # Legacy Heuresys brand archive
2
+
3
+ Imported 2026-05-19 from `D:\evo.heuresys.com\services\app\public\brand\` (evo.heuresys.com legacy codebase). User-authorized for UI assets reuse per memory `brownfield_legacy_source_paths.md`.
4
+
5
+ ## Files
6
+
7
+ | File | Purpose | Notes |
8
+ |------|---------|-------|
9
+ | `heuresys-wordmark.svg` | Full wordmark, blue body + purple "y" | viewBox `22 6 136 24`, Exo 2 700, body `hsl(221,83%,53%)` = `#3B82F6`, accent `#a855f7` |
10
+ | `heuresys-wordmark-monochrome-dark.svg` | Single-color white (for dark surfaces) | letter-spacing −1.17px |
11
+ | `heuresys-wordmark-monochrome-light.svg` | Single-color blue (for light surfaces) | letter-spacing −1.17px |
12
+ | `heuresys-mark.svg` | Just the "y" letterform | viewBox `0 0 32 32`, purple `#a855f7`, used as collapsed-sidebar symbol + favicon source |
13
+ | `favicon.svg` | Rounded dark-bg + purple "y" | viewBox `0 0 32 32`, bg `#0a0d18` (deep navy), y `#a855f7` |
14
+ | `og-image-template.svg` | Open Graph image template | for social share cards |
15
+
16
+ ## Brand concept extracted
17
+
18
+ The legacy brand identity is a **lowercase wordmark with a single accent letter**:
19
+ - `heuresys` rendered in Exo 2 700, lowercase
20
+ - The middle letter "**y**" is rendered in a different color (purple) while the rest is in the primary blue
21
+ - The "y" alone becomes the symbol / mark / favicon
22
+ - The wordmark is the only branded asset; there is no separate symbol-only logo besides the "y" letter
23
+
24
+ This is a distinct concept from the three Session-1 candidates (A=hex node, B=H ladder, C=constellation), all of which use a separate geometric mark beside the wordmark. The legacy approach is **typographic** rather than **geometric**.
25
+
26
+ ## How this archive is used
27
+
28
+ These files are **historical reference only** — they are not directly served by `apps/web`. They informed the authoring of **Candidate D** in `D:\ux-design-shared\ui\src\components\brand\candidates\LogoCandidateD.tsx` (Y-accent wordmark) and the corresponding `heuresys-logo-D-{symbol,full}.svg` raw files in `../candidates/UXIX-0007-logo/`.
29
+
30
+ If Candidate D is `Accepted` for UXIX-0007, these legacy files can either be:
31
+ 1. Used directly as the production assets (faster path), or
32
+ 2. Re-traced to match the new Heuresys design language (refined path).
33
+
34
+ Non-chosen legacy files remain here as audit history per Decision Register Rule 1 (no deletion).
@@ -0,0 +1,16 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" role="img" aria-label="Heuresys favicon">
2
+ <defs>
3
+ <style>
4
+ .favicon-bg { fill: #0a0d18; } /* L21 legacy bg dark navy */
5
+ .favicon-y {
6
+ font-family: 'Exo 2', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
7
+ font-weight: 700; /* L25 same weight as body (no gap) */
8
+ font-size: 26px;
9
+ letter-spacing: 0;
10
+ fill: #a855f7; /* legacy purple accent */
11
+ }
12
+ </style>
13
+ </defs>
14
+ <rect class="favicon-bg" width="32" height="32" rx="6" />
15
+ <text x="16" y="24" text-anchor="middle" class="favicon-y">y</text>
16
+ </svg>
@@ -0,0 +1,14 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" role="img" aria-label="Heuresys mark">
2
+ <defs>
3
+ <style>
4
+ .heuresys-mark-y {
5
+ font-family: 'Exo 2', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
6
+ font-weight: 700; /* L25 same weight as body (no gap) */
7
+ font-size: 32px;
8
+ letter-spacing: 0; /* L16 letter-spacing naturale */
9
+ fill: #a855f7;
10
+ }
11
+ </style>
12
+ </defs>
13
+ <text x="16" y="26" text-anchor="middle" class="heuresys-mark-y">y</text>
14
+ </svg>
@@ -0,0 +1,15 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="22 6 136 24" role="img" aria-label="Heuresys" preserveAspectRatio="xMidYMid meet">
2
+ <defs>
3
+ <style>
4
+ .heuresys-wordmark-mono {
5
+ font-family: 'Exo 2', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
6
+ font-weight: 700;
7
+ font-size: 26.6667px;
8
+ line-height: 0;
9
+ letter-spacing: -1.17px;
10
+ fill: #ffffff;
11
+ }
12
+ </style>
13
+ </defs>
14
+ <text x="90" y="24" text-anchor="middle" class="heuresys-wordmark-mono">heuresys</text>
15
+ </svg>
@@ -0,0 +1,15 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="22 6 136 24" role="img" aria-label="Heuresys" preserveAspectRatio="xMidYMid meet">
2
+ <defs>
3
+ <style>
4
+ .heuresys-wordmark-mono-light {
5
+ font-family: 'Exo 2', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
6
+ font-weight: 700;
7
+ font-size: 26.6667px;
8
+ line-height: 0;
9
+ letter-spacing: -1.17px;
10
+ fill: #3b82f6;
11
+ }
12
+ </style>
13
+ </defs>
14
+ <text x="90" y="24" text-anchor="middle" class="heuresys-wordmark-mono-light">heuresys</text>
15
+ </svg>
@@ -0,0 +1,21 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="22 6 136 24" role="img" aria-label="Heuresys" preserveAspectRatio="xMidYMid meet">
2
+ <defs>
3
+ <style>
4
+ .heuresys-wordmark {
5
+ font-family: 'Exo 2', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
6
+ font-weight: 700;
7
+ font-size: 26.6667px;
8
+ line-height: 0;
9
+ letter-spacing: -0.5px; /* L16 letter-spacing naturale */
10
+ }
11
+ .heuresys-wordmark-primary { fill: hsl(221, 83%, 53%); }
12
+ .heuresys-wordmark-accent {
13
+ fill: #a855f7;
14
+ /* L25: same weight as body (no gap). Color is the only differentiator. */
15
+ }
16
+ </style>
17
+ </defs>
18
+ <text x="90" y="24" text-anchor="middle" class="heuresys-wordmark">
19
+ <tspan class="heuresys-wordmark-primary">heures</tspan><tspan class="heuresys-wordmark-accent">y</tspan><tspan class="heuresys-wordmark-primary">s</tspan>
20
+ </text>
21
+ </svg>
@@ -0,0 +1,44 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 630" role="img" aria-label="Heuresys — Organizational Intelligence">
2
+ <defs>
3
+ <radialGradient id="og-glow" cx="50%" cy="40%" r="50%">
4
+ <stop offset="0%" stop-color="#a855f7" stop-opacity="0.25" />
5
+ <stop offset="60%" stop-color="#3b82f6" stop-opacity="0.10" />
6
+ <stop offset="100%" stop-color="#0a0d18" stop-opacity="0" />
7
+ </radialGradient>
8
+ <style>
9
+ .og-bg { fill: #0a0d18; } /* L21 legacy bg dark navy */
10
+ .og-glow { fill: url(#og-glow); }
11
+ .og-wordmark {
12
+ font-family: 'Exo 2', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
13
+ font-weight: 700;
14
+ font-size: 160px;
15
+ letter-spacing: -3px; /* L16 letter-spacing tightened ma non extreme */
16
+ }
17
+ .og-wordmark-primary { fill: #3b82f6; }
18
+ .og-wordmark-accent {
19
+ fill: #a855f7;
20
+ /* L25: same weight as body (no gap). Color is the only differentiator. */
21
+ }
22
+ .og-tagline {
23
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
24
+ font-weight: 500;
25
+ font-size: 32px;
26
+ fill: #e5e5ea;
27
+ }
28
+ .og-payoff {
29
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
30
+ font-weight: 400;
31
+ font-size: 22px;
32
+ fill: #9ca3af;
33
+ letter-spacing: 0.5px;
34
+ }
35
+ </style>
36
+ </defs>
37
+ <rect class="og-bg" width="1200" height="630" />
38
+ <ellipse class="og-glow" cx="600" cy="280" rx="700" ry="260" />
39
+ <text x="600" y="330" text-anchor="middle" class="og-wordmark">
40
+ <tspan class="og-wordmark-primary">heures</tspan><tspan class="og-wordmark-accent">y</tspan><tspan class="og-wordmark-primary">s</tspan>
41
+ </text>
42
+ <text x="600" y="420" text-anchor="middle" class="og-tagline">Il layer mancante tra ERP, HR e BI</text>
43
+ <text x="600" y="475" text-anchor="middle" class="og-payoff">Organizational Intelligence &amp; Workforce Orchestration</text>
44
+ </svg>
@@ -0,0 +1,87 @@
1
+ import type { SVGProps } from "react";
2
+
3
+ /**
4
+ * UXIX-0007 candidate A — Hex node mark.
5
+ *
6
+ * Hexagonal frame with internal 3-node constellation (skill / role / capability
7
+ * triangulation). Reads as structured, geometric, enterprise-confident. Strong
8
+ * at small symbol scale.
9
+ *
10
+ * Wordmark: 700 (bold), letter-spacing −0.5.
11
+ *
12
+ * Raw SVG source: `@heuresys/ui/assets/brand/candidates/UXIX-0007-logo/heuresys-logo-A-{symbol,full}.svg`.
13
+ * Uses `currentColor` for stroke + fill so the consumer controls color via CSS.
14
+ */
15
+
16
+ export function LogoCandidateASymbol(props: SVGProps<SVGSVGElement>) {
17
+ return (
18
+ <svg
19
+ xmlns="http://www.w3.org/2000/svg"
20
+ viewBox="0 0 48 48"
21
+ role="img"
22
+ aria-label="Heuresys candidate A — hex node mark"
23
+ {...props}
24
+ >
25
+ <title>Heuresys candidate A — hex node mark</title>
26
+ <path
27
+ d="M24 4 L41.32 14 V34 L24 44 L6.68 34 V14 Z"
28
+ fill="none"
29
+ stroke="currentColor"
30
+ strokeWidth="3"
31
+ strokeLinejoin="round"
32
+ />
33
+ <circle cx="16" cy="18" r="2.5" fill="currentColor" />
34
+ <circle cx="32" cy="18" r="2.5" fill="currentColor" />
35
+ <circle cx="24" cy="32" r="2.5" fill="currentColor" />
36
+ <path
37
+ d="M16 18 L24 32 L32 18 M16 18 L32 18"
38
+ stroke="currentColor"
39
+ strokeWidth="2"
40
+ strokeLinecap="round"
41
+ />
42
+ </svg>
43
+ );
44
+ }
45
+
46
+ export function LogoCandidateAFull(props: SVGProps<SVGSVGElement>) {
47
+ return (
48
+ <svg
49
+ xmlns="http://www.w3.org/2000/svg"
50
+ viewBox="0 0 220 48"
51
+ role="img"
52
+ aria-label="Heuresys candidate A — hex node + wordmark"
53
+ {...props}
54
+ >
55
+ <title>Heuresys candidate A — hex node + wordmark</title>
56
+ <g>
57
+ <path
58
+ d="M24 4 L41.32 14 V34 L24 44 L6.68 34 V14 Z"
59
+ fill="none"
60
+ stroke="currentColor"
61
+ strokeWidth="3"
62
+ strokeLinejoin="round"
63
+ />
64
+ <circle cx="16" cy="18" r="2.5" fill="currentColor" />
65
+ <circle cx="32" cy="18" r="2.5" fill="currentColor" />
66
+ <circle cx="24" cy="32" r="2.5" fill="currentColor" />
67
+ <path
68
+ d="M16 18 L24 32 L32 18 M16 18 L32 18"
69
+ stroke="currentColor"
70
+ strokeWidth="2"
71
+ strokeLinecap="round"
72
+ />
73
+ </g>
74
+ <text
75
+ x="56"
76
+ y="32"
77
+ fontFamily="'Exo 2', system-ui, -apple-system, 'Segoe UI', sans-serif"
78
+ fontSize="24"
79
+ fontWeight="700"
80
+ letterSpacing="-0.5"
81
+ fill="currentColor"
82
+ >
83
+ Heuresys
84
+ </text>
85
+ </svg>
86
+ );
87
+ }
@@ -0,0 +1,65 @@
1
+ import type { SVGProps } from "react";
2
+
3
+ /**
4
+ * UXIX-0007 candidate B — H ladder mark.
5
+ *
6
+ * Rounded square + custom H letterform with internal rungs implying skill-
7
+ * progression. Direct semantic tie (H = Heuresys = HRMS) and ladder = career
8
+ * path / learning steps.
9
+ *
10
+ * Wordmark: 500 (medium).
11
+ *
12
+ * Raw SVG source: `@heuresys/ui/assets/brand/candidates/UXIX-0007-logo/heuresys-logo-B-{symbol,full}.svg`.
13
+ */
14
+
15
+ export function LogoCandidateBSymbol(props: SVGProps<SVGSVGElement>) {
16
+ return (
17
+ <svg
18
+ xmlns="http://www.w3.org/2000/svg"
19
+ viewBox="0 0 48 48"
20
+ role="img"
21
+ aria-label="Heuresys candidate B — H ladder mark"
22
+ {...props}
23
+ >
24
+ <title>Heuresys candidate B — H ladder mark</title>
25
+ <rect x="6" y="6" width="36" height="36" rx="8" fill="none" stroke="currentColor" strokeWidth="3" />
26
+ <line x1="16" y1="14" x2="16" y2="34" stroke="currentColor" strokeWidth="3" strokeLinecap="round" />
27
+ <line x1="32" y1="14" x2="32" y2="34" stroke="currentColor" strokeWidth="3" strokeLinecap="round" />
28
+ <line x1="16" y1="19" x2="32" y2="19" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" />
29
+ <line x1="16" y1="24" x2="32" y2="24" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" />
30
+ <line x1="16" y1="29" x2="32" y2="29" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" />
31
+ </svg>
32
+ );
33
+ }
34
+
35
+ export function LogoCandidateBFull(props: SVGProps<SVGSVGElement>) {
36
+ return (
37
+ <svg
38
+ xmlns="http://www.w3.org/2000/svg"
39
+ viewBox="0 0 220 48"
40
+ role="img"
41
+ aria-label="Heuresys candidate B — H ladder + wordmark"
42
+ {...props}
43
+ >
44
+ <title>Heuresys candidate B — H ladder + wordmark</title>
45
+ <g>
46
+ <rect x="6" y="6" width="36" height="36" rx="8" fill="none" stroke="currentColor" strokeWidth="3" />
47
+ <line x1="16" y1="14" x2="16" y2="34" stroke="currentColor" strokeWidth="3" strokeLinecap="round" />
48
+ <line x1="32" y1="14" x2="32" y2="34" stroke="currentColor" strokeWidth="3" strokeLinecap="round" />
49
+ <line x1="16" y1="19" x2="32" y2="19" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" />
50
+ <line x1="16" y1="24" x2="32" y2="24" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" />
51
+ <line x1="16" y1="29" x2="32" y2="29" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" />
52
+ </g>
53
+ <text
54
+ x="56"
55
+ y="32"
56
+ fontFamily="'Exo 2', system-ui, -apple-system, 'Segoe UI', sans-serif"
57
+ fontSize="24"
58
+ fontWeight="500"
59
+ fill="currentColor"
60
+ >
61
+ Heuresys
62
+ </text>
63
+ </svg>
64
+ );
65
+ }