vanilla-breeze 0.3.0 → 0.4.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 (224) hide show
  1. package/README.md +33 -4
  2. package/dist/cdn/components/activity-feed.js +1 -1
  3. package/dist/cdn/components/audio-player.js +2 -2
  4. package/dist/cdn/components/carousel-wc.js +1 -1
  5. package/dist/cdn/components/comment-box.js +16 -16
  6. package/dist/cdn/components/comment-thread.js +20 -20
  7. package/dist/cdn/components/comment-wc.js +1 -1
  8. package/dist/cdn/components/content-lens.js +1 -1
  9. package/dist/cdn/components/context-menu.js +1 -1
  10. package/dist/cdn/components/diagram-wc.js +1 -1
  11. package/dist/cdn/components/drop-down.js +1 -1
  12. package/dist/cdn/components/image-gallery.js +1 -1
  13. package/dist/cdn/components/manifest.json +44 -20
  14. package/dist/cdn/components/reaction-bar.js +1 -1
  15. package/dist/cdn/components/score-card.js +2 -2
  16. package/dist/cdn/components/settings-panel.js +15 -15
  17. package/dist/cdn/components/site-search.js +1 -1
  18. package/dist/cdn/components/social-embed.js +1 -1
  19. package/dist/cdn/components/tab-set.js +1 -1
  20. package/dist/cdn/components/theme-picker.js +45 -45
  21. package/dist/cdn/components/time-index.js +2 -2
  22. package/dist/cdn/components/time-picker.js +1 -1
  23. package/dist/cdn/components/version-switcher.js +1 -1
  24. package/dist/cdn/packs/effects.full.js +1 -1
  25. package/dist/cdn/packs/journal.effects.css +1 -1
  26. package/dist/cdn/packs/journal.full.css +1 -1
  27. package/dist/cdn/packs/kawaii.effects.css +1 -1
  28. package/dist/cdn/packs/kawaii.full.css +2 -2
  29. package/dist/cdn/packs/kawaii.full.js +4 -4
  30. package/dist/cdn/packs/kawaii.theme.css +1 -1
  31. package/dist/cdn/packs/manifest.json +11 -11
  32. package/dist/cdn/packs/memphis.full.css +1 -1
  33. package/dist/cdn/packs/memphis.theme.css +1 -1
  34. package/dist/cdn/packs/ui.full.css +1 -1
  35. package/dist/cdn/packs/ui.full.js +52 -52
  36. package/dist/cdn/themes/8bit.css +1 -1
  37. package/dist/cdn/themes/8bit.tokens.json +4 -4
  38. package/dist/cdn/themes/alpha1999-dark.tokens.json +4 -4
  39. package/dist/cdn/themes/alpha1999.css +1 -1
  40. package/dist/cdn/themes/alpha1999.tokens.json +4 -4
  41. package/dist/cdn/themes/anthropic.css +1 -1
  42. package/dist/cdn/themes/anthropic.tokens.json +4 -4
  43. package/dist/cdn/themes/art-deco-dark.tokens.json +4 -4
  44. package/dist/cdn/themes/art-deco.css +1 -1
  45. package/dist/cdn/themes/art-deco.tokens.json +4 -4
  46. package/dist/cdn/themes/bauhaus-dark.tokens.json +1 -1
  47. package/dist/cdn/themes/bauhaus.css +1 -1
  48. package/dist/cdn/themes/bauhaus.tokens.json +4 -4
  49. package/dist/cdn/themes/brutalist-dark.tokens.json +4 -4
  50. package/dist/cdn/themes/brutalist.css +1 -1
  51. package/dist/cdn/themes/brutalist.tokens.json +4 -4
  52. package/dist/cdn/themes/catalog/atlassian.tokens.json +2 -2
  53. package/dist/cdn/themes/catalog/bootstrap.tokens.json +2 -2
  54. package/dist/cdn/themes/catalog/carbon.tokens.json +2 -2
  55. package/dist/cdn/themes/catalog/catppuccin-mocha.tokens.json +2 -2
  56. package/dist/cdn/themes/catalog/govuk.tokens.json +2 -2
  57. package/dist/cdn/themes/catalog/manifest.json +1 -1
  58. package/dist/cdn/themes/catalog/material.tokens.json +2 -2
  59. package/dist/cdn/themes/catalog/salesforce.tokens.json +2 -2
  60. package/dist/cdn/themes/catalog/tailwind.tokens.json +2 -2
  61. package/dist/cdn/themes/catppuccin-frappe.css +1 -1
  62. package/dist/cdn/themes/catppuccin-frappe.tokens.json +4 -4
  63. package/dist/cdn/themes/catppuccin-latte-dark.tokens.json +4 -4
  64. package/dist/cdn/themes/catppuccin-latte.css +1 -1
  65. package/dist/cdn/themes/catppuccin-latte.tokens.json +4 -4
  66. package/dist/cdn/themes/catppuccin-macchiato.css +1 -1
  67. package/dist/cdn/themes/catppuccin-macchiato.tokens.json +4 -4
  68. package/dist/cdn/themes/catppuccin-mocha.css +1 -1
  69. package/dist/cdn/themes/catppuccin-mocha.tokens.json +4 -4
  70. package/dist/cdn/themes/classic-dark.tokens.json +4 -4
  71. package/dist/cdn/themes/classic.css +1 -1
  72. package/dist/cdn/themes/classic.tokens.json +4 -4
  73. package/dist/cdn/themes/claymorphism-dark.tokens.json +10 -10
  74. package/dist/cdn/themes/claymorphism.css +1 -1
  75. package/dist/cdn/themes/claymorphism.tokens.json +10 -10
  76. package/dist/cdn/themes/clinical-dark.tokens.json +4 -4
  77. package/dist/cdn/themes/clinical.css +1 -1
  78. package/dist/cdn/themes/clinical.tokens.json +4 -4
  79. package/dist/cdn/themes/cottagecore-dark.tokens.json +4 -4
  80. package/dist/cdn/themes/cottagecore.css +1 -1
  81. package/dist/cdn/themes/cottagecore.tokens.json +4 -4
  82. package/dist/cdn/themes/cyber.css +1 -1
  83. package/dist/cdn/themes/cyber.tokens.json +4 -5
  84. package/dist/cdn/themes/dawn-dark.tokens.json +4 -4
  85. package/dist/cdn/themes/dawn.css +1 -1
  86. package/dist/cdn/themes/dawn.tokens.json +4 -4
  87. package/dist/cdn/themes/dracula.css +1 -1
  88. package/dist/cdn/themes/dracula.tokens.json +4 -4
  89. package/dist/cdn/themes/dusk.css +1 -1
  90. package/dist/cdn/themes/dusk.tokens.json +4 -4
  91. package/dist/cdn/themes/editorial-dark.tokens.json +3 -3
  92. package/dist/cdn/themes/editorial.css +1 -1
  93. package/dist/cdn/themes/editorial.tokens.json +4 -4
  94. package/dist/cdn/themes/financial-dark.tokens.json +4 -4
  95. package/dist/cdn/themes/financial.css +1 -1
  96. package/dist/cdn/themes/financial.tokens.json +4 -4
  97. package/dist/cdn/themes/genai.css +1 -1
  98. package/dist/cdn/themes/genai.tokens.json +4 -4
  99. package/dist/cdn/themes/glassmorphism-dark.tokens.json +4 -4
  100. package/dist/cdn/themes/glassmorphism.css +1 -1
  101. package/dist/cdn/themes/glassmorphism.tokens.json +4 -4
  102. package/dist/cdn/themes/government-dark.tokens.json +4 -4
  103. package/dist/cdn/themes/government.css +1 -1
  104. package/dist/cdn/themes/government.tokens.json +4 -4
  105. package/dist/cdn/themes/gruvbox-dark.tokens.json +4 -4
  106. package/dist/cdn/themes/gruvbox.css +1 -1
  107. package/dist/cdn/themes/gruvbox.tokens.json +4 -4
  108. package/dist/cdn/themes/high-noon-dark.tokens.json +4 -4
  109. package/dist/cdn/themes/high-noon.css +1 -1
  110. package/dist/cdn/themes/high-noon.tokens.json +4 -4
  111. package/dist/cdn/themes/ibm.css +1 -1
  112. package/dist/cdn/themes/ibm.tokens.json +6 -6
  113. package/dist/cdn/themes/journal-dark.tokens.json +4 -4
  114. package/dist/cdn/themes/journal.css +1 -1
  115. package/dist/cdn/themes/journal.tokens.json +4 -4
  116. package/dist/cdn/themes/kawaii-dark.tokens.json +4 -4
  117. package/dist/cdn/themes/kawaii.css +1 -1
  118. package/dist/cdn/themes/kawaii.tokens.json +4 -4
  119. package/dist/cdn/themes/magna-dark.tokens.json +4 -4
  120. package/dist/cdn/themes/magna.css +1 -1
  121. package/dist/cdn/themes/magna.tokens.json +4 -4
  122. package/dist/cdn/themes/manifest.json +48 -48
  123. package/dist/cdn/themes/mcdonalds.css +1 -1
  124. package/dist/cdn/themes/mcdonalds.tokens.json +4 -4
  125. package/dist/cdn/themes/midnight.css +1 -1
  126. package/dist/cdn/themes/midnight.tokens.json +4 -4
  127. package/dist/cdn/themes/minimal-dark.tokens.json +4 -4
  128. package/dist/cdn/themes/minimal.css +1 -1
  129. package/dist/cdn/themes/minimal.tokens.json +4 -4
  130. package/dist/cdn/themes/modern-dark.tokens.json +4 -4
  131. package/dist/cdn/themes/modern.css +1 -1
  132. package/dist/cdn/themes/modern.tokens.json +4 -4
  133. package/dist/cdn/themes/nes-dark.tokens.json +4 -4
  134. package/dist/cdn/themes/nes.css +1 -1
  135. package/dist/cdn/themes/nes.tokens.json +4 -4
  136. package/dist/cdn/themes/neumorphism-dark.tokens.json +10 -10
  137. package/dist/cdn/themes/neumorphism.css +1 -1
  138. package/dist/cdn/themes/neumorphism.tokens.json +10 -10
  139. package/dist/cdn/themes/nord-dark.tokens.json +4 -4
  140. package/dist/cdn/themes/nord.css +1 -1
  141. package/dist/cdn/themes/nord.tokens.json +4 -4
  142. package/dist/cdn/themes/organic-dark.tokens.json +4 -4
  143. package/dist/cdn/themes/organic.css +1 -1
  144. package/dist/cdn/themes/organic.tokens.json +4 -4
  145. package/dist/cdn/themes/rose-pine-dark.tokens.json +4 -4
  146. package/dist/cdn/themes/rose-pine.css +1 -1
  147. package/dist/cdn/themes/rose-pine.tokens.json +4 -4
  148. package/dist/cdn/themes/rough-dark.tokens.json +4 -5
  149. package/dist/cdn/themes/rough.css +1 -1
  150. package/dist/cdn/themes/rough.tokens.json +5 -6
  151. package/dist/cdn/themes/solarized-dark.tokens.json +4 -4
  152. package/dist/cdn/themes/solarized.css +1 -1
  153. package/dist/cdn/themes/solarized.tokens.json +4 -4
  154. package/dist/cdn/themes/starbucks.css +1 -1
  155. package/dist/cdn/themes/starbucks.tokens.json +4 -4
  156. package/dist/cdn/themes/startup-dark.tokens.json +4 -4
  157. package/dist/cdn/themes/startup.css +1 -1
  158. package/dist/cdn/themes/startup.tokens.json +4 -4
  159. package/dist/cdn/themes/super2026-dark.tokens.json +4 -4
  160. package/dist/cdn/themes/super2026.css +1 -1
  161. package/dist/cdn/themes/super2026.tokens.json +4 -4
  162. package/dist/cdn/themes/swiss-dark.tokens.json +1 -1
  163. package/dist/cdn/themes/swiss.css +1 -1
  164. package/dist/cdn/themes/swiss.tokens.json +4 -4
  165. package/dist/cdn/themes/terminal.css +1 -1
  166. package/dist/cdn/themes/terminal.tokens.json +4 -4
  167. package/dist/cdn/themes/tokyo-night-dark.tokens.json +4 -4
  168. package/dist/cdn/themes/tokyo-night.css +1 -1
  169. package/dist/cdn/themes/tokyo-night.tokens.json +4 -4
  170. package/dist/cdn/themes/vaporwave-dark.tokens.json +4 -4
  171. package/dist/cdn/themes/vaporwave.css +1 -1
  172. package/dist/cdn/themes/vaporwave.tokens.json +4 -4
  173. package/dist/cdn/themes/win9x-dark.tokens.json +4 -4
  174. package/dist/cdn/themes/win9x.css +1 -1
  175. package/dist/cdn/themes/win9x.tokens.json +4 -4
  176. package/dist/cdn/vanilla-breeze-charts.css +1 -1
  177. package/dist/cdn/vanilla-breeze-core.css +1 -1
  178. package/dist/cdn/vanilla-breeze-core.js +62 -62
  179. package/dist/cdn/vanilla-breeze-dev.css +1 -1
  180. package/dist/cdn/vanilla-breeze-extras.js +19 -19
  181. package/dist/cdn/vanilla-breeze-labs.css +1 -1
  182. package/dist/cdn/vanilla-breeze.css +1 -1
  183. package/dist/cdn/vanilla-breeze.js +170 -170
  184. package/package.json +5 -8
  185. package/dist/cdn/components/accessibility-specimen.js +0 -11
  186. package/dist/cdn/components/adr-wc.js +0 -403
  187. package/dist/cdn/components/breakpoint-specimen.js +0 -26
  188. package/dist/cdn/components/burndown-chart.js +0 -2
  189. package/dist/cdn/components/capacity-plan.js +0 -25
  190. package/dist/cdn/components/color-palette.js +0 -16
  191. package/dist/cdn/components/component-sampler.js +0 -45
  192. package/dist/cdn/components/empathy-map.js +0 -582
  193. package/dist/cdn/components/font-pairer.js +0 -108
  194. package/dist/cdn/components/gantt-chart.js +0 -2
  195. package/dist/cdn/components/gradient-builder.js +0 -52
  196. package/dist/cdn/components/impact-effort.js +0 -2
  197. package/dist/cdn/components/iron-triangle.js +0 -2
  198. package/dist/cdn/components/kanban-board.js +0 -2
  199. package/dist/cdn/components/layout-specimen.js +0 -35
  200. package/dist/cdn/components/motion-specimen.js +0 -21
  201. package/dist/cdn/components/palette-generator.js +0 -15
  202. package/dist/cdn/components/product-roadmap.js +0 -3
  203. package/dist/cdn/components/quadrant-grid.js +0 -3
  204. package/dist/cdn/components/quality-target.js +0 -12
  205. package/dist/cdn/components/requirement-card.js +0 -122
  206. package/dist/cdn/components/review-surface.js +0 -535
  207. package/dist/cdn/components/risk-register.js +0 -25
  208. package/dist/cdn/components/semantic-palette.js +0 -30
  209. package/dist/cdn/components/spacing-specimen.js +0 -6
  210. package/dist/cdn/components/story-map.js +0 -2
  211. package/dist/cdn/components/theme-catalog.js +0 -28
  212. package/dist/cdn/components/theme-export.js +0 -26
  213. package/dist/cdn/components/theme-import.js +0 -44
  214. package/dist/cdn/components/token-specimen.js +0 -26
  215. package/dist/cdn/components/traceability-matrix.js +0 -3
  216. package/dist/cdn/components/type-specimen.js +0 -19
  217. package/dist/cdn/components/user-journey.js +0 -366
  218. package/dist/cdn/components/user-persona.js +0 -402
  219. package/dist/cdn/components/user-story.js +0 -411
  220. package/dist/cdn/components/work-item.js +0 -447
  221. package/dist/cdn/packs/design-system.full.css +0 -2
  222. package/dist/cdn/packs/design-system.full.js +0 -175
  223. package/dist/cdn/packs/ux-planning.full.css +0 -2
  224. package/dist/cdn/packs/ux-planning.full.js +0 -3160
@@ -1,366 +0,0 @@
1
- var g=`
2
- :host {
3
- display: block;
4
- font-family: var(--_font-sans);
5
- line-height: 1.6;
6
- color: var(--_text);
7
- container-type: inline-size;
8
-
9
- --_bg: var(--user-journey-bg, var(--color-surface-raised, #f8f9fa));
10
- --_card: var(--user-journey-card, var(--color-surface, #ffffff));
11
- --_border: var(--user-journey-border, var(--color-border, #e0e0e0));
12
- --_muted: var(--user-journey-muted, var(--color-text-muted, #666666));
13
- --_text: var(--user-journey-text, var(--color-text, #1a1a1a));
14
- --_inverted: var(--user-journey-text-inverted, var(--color-text-inverted, #ffffff));
15
- --_primary: var(--user-journey-primary, var(--color-primary, var(--color-interactive, #6366f1)));
16
- --_accent: var(--user-journey-accent, var(--color-accent, #8b5cf6));
17
- --_link: var(--user-journey-link, var(--color-interactive, var(--color-primary, #6366f1)));
18
- --_curve-stroke: var(--user-journey-curve-stroke, var(--_primary));
19
- --_radius: var(--user-journey-radius, var(--radius-l, 0.75rem));
20
-
21
- --_font-sans: var(--user-journey-font, var(--font-sans, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif));
22
- --_font-mono: var(--user-journey-font-mono, var(--font-mono, ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, monospace));
23
- --_font-xs: var(--user-journey-font-xs, var(--font-size-xs, 0.75rem));
24
- --_font-sm: var(--user-journey-font-sm, var(--font-size-sm, 0.875rem));
25
- --_font-md: var(--user-journey-font-md, var(--font-size-md, 1rem));
26
- --_font-xl: var(--user-journey-font-xl, var(--font-size-xl, 1.25rem));
27
- --_space-2xs: var(--user-journey-space-2xs, var(--size-2xs, 0.25rem));
28
- --_space-xs: var(--user-journey-space-xs, var(--size-xs, 0.5rem));
29
- --_space-s: var(--user-journey-space-s, var(--size-s, 0.75rem));
30
- --_space-m: var(--user-journey-space-m, var(--size-m, 1rem));
31
- --_space-l: var(--user-journey-space-l, var(--size-l, 1.5rem));
32
-
33
- /* Semantic tints derived from theme tokens via color-mix.
34
- Subtle backgrounds (10\u201314%) for body cells, header at 22%. */
35
- --_tint-pos: color-mix(in oklch, var(--color-success, #22c55e) 14%, var(--_card));
36
- --_tint-neu: color-mix(in oklch, var(--color-warning, #f59e0b) 12%, var(--_card));
37
- --_tint-neg: color-mix(in oklch, var(--color-error, #ef4444) 12%, var(--_card));
38
- --_tint-row-pain: color-mix(in oklch, var(--color-error, #ef4444) 8%, var(--_card));
39
- --_tint-row-opp: color-mix(in oklch, var(--color-success, #22c55e) 8%, var(--_card));
40
- --_chip-type-bg: color-mix(in oklch, var(--_accent) 18%, var(--_card));
41
- --_chip-type-fg: var(--color-accent-text, var(--_accent));
42
- --_chip-story-bg: color-mix(in oklch, var(--_link) 18%, var(--_card));
43
- --_chip-story-bg-hover: color-mix(in oklch, var(--_link) 28%, var(--_card));
44
- --_chip-story-fg: var(--_link);
45
- --_grid-head-bg: color-mix(in oklch, var(--_primary) 85%, var(--color-text, #000));
46
- }
47
-
48
- *, *::before, *::after { box-sizing: border-box; margin: 0; }
49
-
50
- /* Card */
51
- .journey {
52
- background: var(--_card);
53
- border: 1px solid var(--_border);
54
- border-radius: var(--_radius);
55
- overflow: hidden;
56
- }
57
-
58
- /* Header */
59
- .journey__header {
60
- padding: 20px 24px 16px 28px;
61
- border-block-end: 1px solid var(--_border);
62
- position: relative;
63
- }
64
-
65
- /* Left accent bar */
66
- .journey__header::before {
67
- content: '';
68
- position: absolute;
69
- inset-block: 0;
70
- inset-inline-start: 0;
71
- width: 4px;
72
- background: linear-gradient(135deg, var(--_primary), var(--_accent));
73
- }
74
-
75
- .journey__header-top {
76
- display: flex;
77
- align-items: flex-start;
78
- justify-content: space-between;
79
- gap: var(--_space-s);
80
- flex-wrap: wrap;
81
- margin-block-end: var(--_space-xs);
82
- }
83
-
84
- .journey__chips {
85
- display: flex;
86
- flex-wrap: wrap;
87
- align-items: center;
88
- gap: 6px;
89
- }
90
-
91
- /* Chips */
92
- .chip {
93
- display: inline-block;
94
- font-size: 11px;
95
- font-weight: 700;
96
- letter-spacing: 0.05em;
97
- padding: 2px 9px;
98
- border-radius: 99px;
99
- text-decoration: none;
100
- line-height: 1.6;
101
- }
102
-
103
- .chip--type {
104
- color: var(--_chip-type-fg);
105
- background: var(--_chip-type-bg);
106
- }
107
-
108
- .chip--story {
109
- color: var(--_chip-story-fg);
110
- background: var(--_chip-story-bg);
111
- }
112
-
113
- .chip--story:hover { background: var(--_chip-story-bg-hover); }
114
-
115
- /* Persona ref */
116
- .persona-ref {
117
- display: inline-flex;
118
- align-items: center;
119
- gap: 4px;
120
- font-size: 13px;
121
- font-weight: 600;
122
- color: var(--_muted);
123
- text-decoration: none;
124
- white-space: nowrap;
125
- }
126
- .persona-ref svg { width: 14px; height: 14px; flex-shrink: 0; }
127
- a.persona-ref:hover { color: var(--_link); text-decoration: underline; }
128
-
129
- /* Title & summary (slotted content) */
130
- .journey__title-wrap {
131
- margin-block-end: var(--_space-2xs);
132
- }
133
-
134
- .journey__title {
135
- font-size: var(--_font-xl);
136
- font-weight: 700;
137
- color: var(--_text);
138
- margin: 0;
139
- }
140
-
141
- ::slotted([slot="title"]) {
142
- font-size: var(--_font-xl) !important;
143
- font-weight: 700 !important;
144
- color: var(--_text) !important;
145
- margin: 0 !important;
146
- }
147
-
148
- .journey--compact .journey__title,
149
- .journey--compact ::slotted([slot="title"]) { font-size: var(--_font-md) !important; }
150
-
151
- .journey__summary-wrap {
152
- max-width: 72ch;
153
- }
154
-
155
- ::slotted([slot="summary"]) {
156
- font-size: var(--_font-sm) !important;
157
- color: var(--_muted) !important;
158
- margin: 0 !important;
159
- }
160
-
161
- /* Emotion curve */
162
- .journey__curve {
163
- background: var(--_bg);
164
- border-block-end: 1px solid var(--_border);
165
- overflow: hidden;
166
- }
167
-
168
- .curve-svg {
169
- display: block;
170
- width: 100%;
171
- height: 80px;
172
- }
173
-
174
- .journey--compact .curve-svg { height: 54px; }
175
-
176
- .zone { opacity: 0.55; }
177
- .zone--pos { fill: var(--_tint-pos); }
178
- .zone--neu { fill: var(--_tint-neu); }
179
- .zone--neg { fill: var(--_tint-neg); }
180
-
181
- .vline { stroke: var(--_border); stroke-width: 1; stroke-dasharray: 3 4; }
182
- .curve-line { stroke: var(--_curve-stroke); stroke-width: 2.5; stroke-linecap: round; }
183
- .dot { stroke: var(--_card); stroke-width: 2.5; }
184
-
185
- /* Grid */
186
- .journey__grid-wrap { overflow-x: auto; }
187
-
188
- .journey__grid {
189
- width: 100%;
190
- border-collapse: collapse;
191
- font-size: 13px;
192
- }
193
-
194
- /* Head row */
195
- .journey__grid thead tr {
196
- background: var(--_grid-head-bg);
197
- color: var(--_inverted);
198
- }
199
-
200
- .corner {
201
- padding: 10px 12px;
202
- font-size: 10px;
203
- font-weight: 700;
204
- text-transform: uppercase;
205
- letter-spacing: 0.08em;
206
- opacity: 0.55;
207
- text-align: left;
208
- white-space: nowrap;
209
- min-width: 100px;
210
- position: sticky;
211
- left: 0;
212
- background: var(--_grid-head-bg);
213
- z-index: 2;
214
- }
215
-
216
- .phase-head {
217
- padding: 10px 14px;
218
- text-align: left;
219
- vertical-align: top;
220
- border-inline-start: 1px solid color-mix(in oklch, var(--_inverted) 12%, transparent);
221
- min-width: 160px;
222
- position: relative;
223
- }
224
-
225
- /* Emotion-coloured top accent per phase */
226
- .phase-head::before {
227
- content: '';
228
- position: absolute;
229
- inset-block-start: 0;
230
- inset-inline: 0;
231
- height: 3px;
232
- background: var(--ec, var(--_primary));
233
- }
234
-
235
- .ph-num { display: block; font-size: 10px; opacity: 0.5; margin-block-end: 2px; }
236
- .ph-name { display: block; font-size: var(--_font-sm); font-weight: 700; line-height: 1.2; }
237
- .ph-emoji { display: block; font-size: var(--_font-xl); line-height: 1; margin-block: 4px 2px; }
238
-
239
- .ph-stories { display: flex; flex-wrap: wrap; gap: var(--_space-2xs); margin-block-start: var(--_space-2xs); }
240
-
241
- /* Body rows */
242
- .grid-row th,
243
- .grid-row td {
244
- padding: 10px 12px;
245
- border-block-end: 1px solid var(--_border);
246
- border-inline-start: 1px solid var(--_border);
247
- vertical-align: top;
248
- }
249
-
250
- .grid-row th:first-child { border-inline-start: none; }
251
-
252
- .row-label {
253
- font-size: 11px;
254
- font-weight: 700;
255
- text-transform: uppercase;
256
- letter-spacing: 0.07em;
257
- color: var(--_muted);
258
- white-space: nowrap;
259
- background: var(--_bg);
260
- text-align: left;
261
- position: sticky;
262
- left: 0;
263
- z-index: 1;
264
- }
265
-
266
- .data-cell { font-size: 13px; line-height: 1.45; }
267
- .data-cell p { margin-block: 0 4px; }
268
- .data-cell p:last-child { margin-block-end: 0; }
269
- .data-cell--empty { color: var(--_muted); opacity: 0.35; }
270
-
271
- /* Semantic row tints */
272
- .grid-row--painpoints .data-cell { background: var(--_tint-row-pain); }
273
- .grid-row--opportunities .data-cell { background: var(--_tint-row-opp); }
274
-
275
- /* Compact */
276
- .journey--compact .phase-head { min-width: 120px; padding: 8px 10px; }
277
- .journey--compact .data-cell { font-size: 12px; padding: 7px 10px; }
278
- .journey--compact .corner { min-width: 80px; }
279
-
280
- /* Utility */
281
- .state-msg { padding: var(--_space-l); font-size: var(--_font-sm); color: var(--_muted); font-style: italic; }
282
- .state-msg--error { color: var(--color-error-text, var(--color-error, #dc2626)); }
283
- .journey__placeholder { padding: 20px 24px; font-size: var(--_font-sm); color: var(--_muted); }
284
- code { font-family: var(--_font-mono); font-size: 0.88em; }
285
-
286
- /* Responsive */
287
- @container (max-width: 500px) {
288
- .journey__header { padding: 14px 16px 12px 20px; }
289
- .journey__title { font-size: 17px; }
290
- .corner, .row-label { min-width: 72px; font-size: 9px; }
291
- .phase-head { min-width: 110px; padding: 8px 10px; }
292
- .data-cell { font-size: 12px; padding: 8px 10px; }
293
- }
294
-
295
- @media print {
296
- .journey__grid-wrap { overflow: visible; }
297
- .row-label, .corner { position: relative; }
298
- }
299
- `;var A=window.matchMedia("(prefers-reduced-motion: reduce)");var $=new Map;function k(n,e,r={}){let a=r.priority??10,o={impl:e,bundle:r.bundle,contract:r.contract,priority:a},t=$.get(n);if(customElements.get(n)){if(!t||t.priority>=a){t&&t.priority===a&&t.impl!==e&&console.warn(`[VB Bundle] Tag <${n}> already registered by "${t.bundle}" (priority ${t.priority}). Skipping "${r.bundle}".`);return}console.warn(`[VB Bundle] Tag <${n}> defined by "${t.bundle}" cannot be replaced (customElements.define is permanent). "${r.bundle}" has higher priority but arrived late.`);return}if(t&&t.priority>=a){t.priority===a&&console.warn(`[VB Bundle] Tag <${n}> already registered by "${t.bundle}". Skipping "${r.bundle}" (first wins at equal priority).`);return}$.set(n,o),customElements.define(n,e)}var M=0;function C(n,e,r="vb-vt"){if(!n?.isConnected||typeof document>"u"||!("startViewTransition"in document)||matchMedia("(prefers-reduced-motion: reduce)").matches)return e(),null;let a=`${r}-${++M}`;n.style.viewTransitionName=a;let o=document.startViewTransition(e);return o.finished.finally(()=>{n.style.viewTransitionName===a&&(n.style.viewTransitionName="")}),o}function l(n){return String(n).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function b(n){return`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${n}</svg>`}var h={user:'<path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/>',pencil:'<path d="M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z"/><path d="m15 5 4 4"/>',check:'<path d="M20 6 9 17l-5-5"/>',target:'<circle cx="12" cy="12" r="10"/><circle cx="12" cy="12" r="6"/><circle cx="12" cy="12" r="2"/>',alertTriangle:'<path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"/><path d="M12 9v4"/><path d="M12 17h.01"/>',messageCircle:'<path d="M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719"/>',lightbulb:'<path d="M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5"/><path d="M9 18h6"/><path d="M10 22h4"/>',wrench:'<path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z"/>',heart:'<path d="M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5"/>',mapPin:'<path d="M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0"/><circle cx="12" cy="10" r="3"/>',checkCircle:'<path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><path d="m9 11 3 3L22 4"/>',x:'<path d="M18 6 6 18"/><path d="m6 6 12 12"/>',download:'<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" x2="12" y1="15" y2="3"/>',send:'<path d="M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z"/><path d="m21.854 2.147-10.94 10.939"/>'},L={says:{label:"Says",icon:h.messageCircle,color:"#3b82f6"},thinks:{label:"Thinks",icon:h.lightbulb,color:"#8b5cf6"},does:{label:"Does",icon:h.wrench,color:"#f59e0b"},feels:{label:"Feels",icon:h.heart,color:"#ef4444"}},m={delighted:{emoji:"\u{1F604}",score:.95,color:"#16a34a"},satisfied:{emoji:"\u{1F60A}",score:.8,color:"#22c55e"},hopeful:{emoji:"\u{1F642}",score:.68,color:"#84cc16"},curious:{emoji:"\u{1F914}",score:.55,color:"#eab308"},neutral:{emoji:"\u{1F610}",score:.5,color:"#94a3b8"},uncertain:{emoji:"\u{1F615}",score:.4,color:"#f97316"},confused:{emoji:"\u{1F635}",score:.3,color:"#fb923c"},frustrated:{emoji:"\u{1F624}",score:.18,color:"#ef4444"},angry:{emoji:"\u{1F620}",score:.05,color:"#dc2626"}};var S=[{key:"actions",label:"Actions"},{key:"thoughts",label:"Thoughts"},{key:"touchpoints",label:"Touchpoints"},{key:"painPoints",label:"Pain Points"},{key:"opportunities",label:"Opportunities"}],w=class extends HTMLElement{static get observedAttributes(){return["src","persona","persona-id","story-ids","compact"]}#e=new Map;constructor(){super(),this.attachShadow({mode:"open"}),this.__phases=null}get phases(){return this.__phases}set phases(e){this.__phases!==e&&(this.__phases=e,this.isConnected&&this._render(),this.dispatchEvent(new CustomEvent("user-journey:phases-changed",{detail:{phases:e,source:"property"},bubbles:!0,composed:!0})))}get data(){return{persona:this.getAttribute("persona")||void 0,personaId:this.getAttribute("persona-id")||void 0,title:this.querySelector('[slot="title"]')?.textContent?.trim()||void 0,summary:this.querySelector('[slot="summary"]')?.textContent?.trim()||void 0,phases:this.__phases||void 0}}set data(e){if(!(!e||typeof e!="object")){if(e.persona&&this.setAttribute("persona",String(e.persona)),e.personaId&&this.setAttribute("persona-id",String(e.personaId)),e.title&&!this.querySelector('[slot="title"]')){let r=document.createElement("h2");r.slot="title",r.textContent=e.title,this.appendChild(r)}if(e.summary&&!this.querySelector('[slot="summary"]')){let r=document.createElement("p");r.slot="summary",r.textContent=e.summary,this.appendChild(r)}e.phases!=null&&(this.__phases=e.phases),this.isConnected&&this._render(),this.dispatchEvent(new CustomEvent("user-journey:data-changed",{detail:{data:this.data,source:"property"},bubbles:!0,composed:!0}))}}#t(){for(let e of this.children){let r=e.getAttribute("slot");r&&this.#e.set(r,e.textContent.trim())}}_resolve(e){return this.getAttribute(e)||this.#e.get(e)||""}connectedCallback(){this.#t(),this.setAttribute("data-upgraded",""),this.hasAttribute("src")?this._loadSrc(this.getAttribute("src")):this._render()}disconnectedCallback(){this.removeAttribute("data-upgraded")}attributeChangedCallback(e){this.isConnected&&(e==="src"?this._loadSrc(this.getAttribute("src")):this._render())}async _loadSrc(e){if(!e)return;let r=this.shadowRoot;r.innerHTML=`<style>${g}</style><div class="state-msg">Loading\u2026</div>`;try{let a=await fetch(e);if(!a.ok)throw new Error(`HTTP ${a.status}`);let o=await a.json();if(o.persona&&this.setAttribute("persona",o.persona),o.personaId&&this.setAttribute("persona-id",o.personaId),o.title&&!this.querySelector('[slot="title"]')){let t=document.createElement("h2");t.slot="title",t.textContent=o.title,this.appendChild(t)}if(o.summary&&!this.querySelector('[slot="summary"]')){let t=document.createElement("p");t.slot="summary",t.textContent=o.summary,this.appendChild(t)}this.__phases=o.phases||[],this._render()}catch(a){r.innerHTML=`<style>${g}</style><div class="state-msg state-msg--error">Could not load journey: ${l(a.message)}</div>`}}_render(){let e=this._resolve("persona")||"",r=this._resolve("persona-id")||"",a=(this.getAttribute("story-ids")||"").split(",").map(i=>i.trim()).filter(Boolean),o=this.hasAttribute("compact"),t=this.__phases,d=!!this.querySelector('[slot="summary"]')||this.#e.has("summary"),p=this.querySelector('[slot="title"]')?.textContent?.trim()||this.#e.get("title")||"",c=`<style>${g}</style>
300
- <article class="journey${o?" journey--compact":""}">
301
-
302
- <header class="journey__header">
303
- <div class="journey__header-top">
304
- <div class="journey__chips">
305
- <span class="chip chip--type">Journey Map</span>
306
- ${a.map(i=>`<a class="chip chip--story" href="#${i}">${this._label(i)}</a>`).join("")}
307
- </div>
308
- ${e?`
309
- <div class="journey__persona">
310
- ${r?`<a class="persona-ref" href="#${r}">${b(h.user)} ${l(e)}</a>`:`<span class="persona-ref">${b(h.user)} ${l(e)}</span>`}
311
- </div>`:""}
312
- </div>
313
- <div class="journey__title-wrap">
314
- <slot name="title"><h2 class="journey__title">User Journey</h2></slot>
315
- </div>
316
- ${d?'<div class="journey__summary-wrap"><slot name="summary"></slot></div>':""}
317
- </header>
318
-
319
- ${t&&t.length?this._curve(t)+this._grid(t):`<div class="journey__placeholder">
320
- <p>Add phase data via <code>src</code> (JSON) or set <code>.phases</code> programmatically.</p>
321
- </div>`}
322
-
323
- </article>`,f=this.shadowRoot,v=()=>{f.innerHTML=c};f.querySelector("article")?C(this,v,"uj-vt"):v(),this.dispatchEvent(new CustomEvent("journey-ready",{bubbles:!0,composed:!0,detail:{title:p,persona:e,phaseCount:t?t.length:0}}))}_curve(e){let c=e.length,f=s=>28+(c<2?944/2:s/(c-1)*944),v=s=>14+(1-(m[s.emotion]||m.neutral).score)*72,i=e.map((s,u)=>({x:f(u),y:v(s),ph:s})),x=`M ${i[0].x},${i[0].y}`;for(let s=1;s<i.length;s++){let u=i[s-1],y=i[s],_=(u.x+y.x)/2;x+=` C ${_},${u.y} ${_},${y.y} ${y.x},${y.y}`}let j=`uj-${Math.random().toString(36).slice(2,8)}`,z=i.at(-1);return`
324
- <div class="journey__curve" aria-hidden="true">
325
- <svg viewBox="0 0 1000 100" preserveAspectRatio="none" class="curve-svg">
326
- <defs>
327
- <linearGradient id="${j}" x1="0" y1="0" x2="0" y2="1">
328
- <stop offset="0%" stop-color="#6366f1" stop-opacity="0.22"/>
329
- <stop offset="100%" stop-color="#6366f1" stop-opacity="0"/>
330
- </linearGradient>
331
- </defs>
332
- <rect x="0" y="0" width="1000" height="${100*.4}" class="zone zone--pos"/>
333
- <rect x="0" y="${100*.4}" width="1000" height="${100*.2}" class="zone zone--neu"/>
334
- <rect x="0" y="${100*.6}" width="1000" height="${100*.4}" class="zone zone--neg"/>
335
- ${i.map(({x:s})=>`<line x1="${s}" y1="0" x2="${s}" y2="100" class="vline"/>`).join("")}
336
- <path d="${x} L ${z.x},100 L ${i[0].x},100 Z" fill="url(#${j})"/>
337
- <path d="${x}" fill="none" class="curve-line"/>
338
- ${i.map(({x:s,y:u,ph:y})=>{let _=m[y.emotion]||m.neutral;return`<circle cx="${s}" cy="${u}" r="5" class="dot" style="fill:${_.color}"/>`}).join("")}
339
- </svg>
340
- </div>`}_grid(e){let r=e.map((o,t)=>{let d=m[o.emotion]||m.neutral,p=o.storyIds||[];return`
341
- <th class="phase-head" data-emotion="${o.emotion||"neutral"}"
342
- style="--ec:${d.color}">
343
- <span class="ph-num">${t+1}</span>
344
- <span class="ph-name">${l(o.name||"")}</span>
345
- <span class="ph-emoji" title="${o.emotion||"neutral"}"><span role="img" aria-label="${l(o.emotion||"neutral")}">${d.emoji}</span></span>
346
- ${p.length?`<div class="ph-stories">${p.map(c=>`<a class="chip chip--story" href="#${c}">${this._label(c)}</a>`).join("")}</div>`:""}
347
- </th>`}).join(""),a=S.map(({key:o,label:t})=>{let d=e.map(p=>{let c=p[o]||[];return c.length?`<td class="data-cell data-cell--${o.toLowerCase()}">
348
- ${c.map(f=>`<p>${l(f)}</p>`).join("")}
349
- </td>`:'<td class="data-cell data-cell--empty">\u2014</td>'}).join("");return`
350
- <tr class="grid-row grid-row--${o.toLowerCase()}">
351
- <th class="row-label">${t}</th>
352
- ${d}
353
- </tr>`}).join("");return`
354
- <div class="journey__grid-wrap">
355
- <table class="journey__grid"
356
- aria-label="${l(this.getAttribute("title")||"User Journey")} \u2014 phase breakdown">
357
- <thead>
358
- <tr>
359
- <th class="corner">Stage</th>
360
- ${r}
361
- </tr>
362
- </thead>
363
- <tbody>${a}</tbody>
364
- </table>
365
- </div>`}_label(e){return e.replace(/^(activity|persona|journey|story|user)-/,"").replace(/-/g," ").replace(/\b\w/g,r=>r.toUpperCase())}};k("user-journey",w);export{w as UserJourney};
366
- //# sourceMappingURL=user-journey.js.map