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.
- package/README.md +33 -4
- package/dist/cdn/components/activity-feed.js +1 -1
- package/dist/cdn/components/audio-player.js +2 -2
- package/dist/cdn/components/carousel-wc.js +1 -1
- package/dist/cdn/components/comment-box.js +16 -16
- package/dist/cdn/components/comment-thread.js +20 -20
- package/dist/cdn/components/comment-wc.js +1 -1
- package/dist/cdn/components/content-lens.js +1 -1
- package/dist/cdn/components/context-menu.js +1 -1
- package/dist/cdn/components/diagram-wc.js +1 -1
- package/dist/cdn/components/drop-down.js +1 -1
- package/dist/cdn/components/image-gallery.js +1 -1
- package/dist/cdn/components/manifest.json +44 -20
- package/dist/cdn/components/reaction-bar.js +1 -1
- package/dist/cdn/components/score-card.js +2 -2
- package/dist/cdn/components/settings-panel.js +15 -15
- package/dist/cdn/components/site-search.js +1 -1
- package/dist/cdn/components/social-embed.js +1 -1
- package/dist/cdn/components/tab-set.js +1 -1
- package/dist/cdn/components/theme-picker.js +45 -45
- package/dist/cdn/components/time-index.js +2 -2
- package/dist/cdn/components/time-picker.js +1 -1
- package/dist/cdn/components/version-switcher.js +1 -1
- package/dist/cdn/packs/effects.full.js +1 -1
- package/dist/cdn/packs/journal.effects.css +1 -1
- package/dist/cdn/packs/journal.full.css +1 -1
- package/dist/cdn/packs/kawaii.effects.css +1 -1
- package/dist/cdn/packs/kawaii.full.css +2 -2
- package/dist/cdn/packs/kawaii.full.js +4 -4
- package/dist/cdn/packs/kawaii.theme.css +1 -1
- package/dist/cdn/packs/manifest.json +11 -11
- package/dist/cdn/packs/memphis.full.css +1 -1
- package/dist/cdn/packs/memphis.theme.css +1 -1
- package/dist/cdn/packs/ui.full.css +1 -1
- package/dist/cdn/packs/ui.full.js +52 -52
- package/dist/cdn/themes/8bit.css +1 -1
- package/dist/cdn/themes/8bit.tokens.json +4 -4
- package/dist/cdn/themes/alpha1999-dark.tokens.json +4 -4
- package/dist/cdn/themes/alpha1999.css +1 -1
- package/dist/cdn/themes/alpha1999.tokens.json +4 -4
- package/dist/cdn/themes/anthropic.css +1 -1
- package/dist/cdn/themes/anthropic.tokens.json +4 -4
- package/dist/cdn/themes/art-deco-dark.tokens.json +4 -4
- package/dist/cdn/themes/art-deco.css +1 -1
- package/dist/cdn/themes/art-deco.tokens.json +4 -4
- package/dist/cdn/themes/bauhaus-dark.tokens.json +1 -1
- package/dist/cdn/themes/bauhaus.css +1 -1
- package/dist/cdn/themes/bauhaus.tokens.json +4 -4
- package/dist/cdn/themes/brutalist-dark.tokens.json +4 -4
- package/dist/cdn/themes/brutalist.css +1 -1
- package/dist/cdn/themes/brutalist.tokens.json +4 -4
- package/dist/cdn/themes/catalog/atlassian.tokens.json +2 -2
- package/dist/cdn/themes/catalog/bootstrap.tokens.json +2 -2
- package/dist/cdn/themes/catalog/carbon.tokens.json +2 -2
- package/dist/cdn/themes/catalog/catppuccin-mocha.tokens.json +2 -2
- package/dist/cdn/themes/catalog/govuk.tokens.json +2 -2
- package/dist/cdn/themes/catalog/manifest.json +1 -1
- package/dist/cdn/themes/catalog/material.tokens.json +2 -2
- package/dist/cdn/themes/catalog/salesforce.tokens.json +2 -2
- package/dist/cdn/themes/catalog/tailwind.tokens.json +2 -2
- package/dist/cdn/themes/catppuccin-frappe.css +1 -1
- package/dist/cdn/themes/catppuccin-frappe.tokens.json +4 -4
- package/dist/cdn/themes/catppuccin-latte-dark.tokens.json +4 -4
- package/dist/cdn/themes/catppuccin-latte.css +1 -1
- package/dist/cdn/themes/catppuccin-latte.tokens.json +4 -4
- package/dist/cdn/themes/catppuccin-macchiato.css +1 -1
- package/dist/cdn/themes/catppuccin-macchiato.tokens.json +4 -4
- package/dist/cdn/themes/catppuccin-mocha.css +1 -1
- package/dist/cdn/themes/catppuccin-mocha.tokens.json +4 -4
- package/dist/cdn/themes/classic-dark.tokens.json +4 -4
- package/dist/cdn/themes/classic.css +1 -1
- package/dist/cdn/themes/classic.tokens.json +4 -4
- package/dist/cdn/themes/claymorphism-dark.tokens.json +10 -10
- package/dist/cdn/themes/claymorphism.css +1 -1
- package/dist/cdn/themes/claymorphism.tokens.json +10 -10
- package/dist/cdn/themes/clinical-dark.tokens.json +4 -4
- package/dist/cdn/themes/clinical.css +1 -1
- package/dist/cdn/themes/clinical.tokens.json +4 -4
- package/dist/cdn/themes/cottagecore-dark.tokens.json +4 -4
- package/dist/cdn/themes/cottagecore.css +1 -1
- package/dist/cdn/themes/cottagecore.tokens.json +4 -4
- package/dist/cdn/themes/cyber.css +1 -1
- package/dist/cdn/themes/cyber.tokens.json +4 -5
- package/dist/cdn/themes/dawn-dark.tokens.json +4 -4
- package/dist/cdn/themes/dawn.css +1 -1
- package/dist/cdn/themes/dawn.tokens.json +4 -4
- package/dist/cdn/themes/dracula.css +1 -1
- package/dist/cdn/themes/dracula.tokens.json +4 -4
- package/dist/cdn/themes/dusk.css +1 -1
- package/dist/cdn/themes/dusk.tokens.json +4 -4
- package/dist/cdn/themes/editorial-dark.tokens.json +3 -3
- package/dist/cdn/themes/editorial.css +1 -1
- package/dist/cdn/themes/editorial.tokens.json +4 -4
- package/dist/cdn/themes/financial-dark.tokens.json +4 -4
- package/dist/cdn/themes/financial.css +1 -1
- package/dist/cdn/themes/financial.tokens.json +4 -4
- package/dist/cdn/themes/genai.css +1 -1
- package/dist/cdn/themes/genai.tokens.json +4 -4
- package/dist/cdn/themes/glassmorphism-dark.tokens.json +4 -4
- package/dist/cdn/themes/glassmorphism.css +1 -1
- package/dist/cdn/themes/glassmorphism.tokens.json +4 -4
- package/dist/cdn/themes/government-dark.tokens.json +4 -4
- package/dist/cdn/themes/government.css +1 -1
- package/dist/cdn/themes/government.tokens.json +4 -4
- package/dist/cdn/themes/gruvbox-dark.tokens.json +4 -4
- package/dist/cdn/themes/gruvbox.css +1 -1
- package/dist/cdn/themes/gruvbox.tokens.json +4 -4
- package/dist/cdn/themes/high-noon-dark.tokens.json +4 -4
- package/dist/cdn/themes/high-noon.css +1 -1
- package/dist/cdn/themes/high-noon.tokens.json +4 -4
- package/dist/cdn/themes/ibm.css +1 -1
- package/dist/cdn/themes/ibm.tokens.json +6 -6
- package/dist/cdn/themes/journal-dark.tokens.json +4 -4
- package/dist/cdn/themes/journal.css +1 -1
- package/dist/cdn/themes/journal.tokens.json +4 -4
- package/dist/cdn/themes/kawaii-dark.tokens.json +4 -4
- package/dist/cdn/themes/kawaii.css +1 -1
- package/dist/cdn/themes/kawaii.tokens.json +4 -4
- package/dist/cdn/themes/magna-dark.tokens.json +4 -4
- package/dist/cdn/themes/magna.css +1 -1
- package/dist/cdn/themes/magna.tokens.json +4 -4
- package/dist/cdn/themes/manifest.json +48 -48
- package/dist/cdn/themes/mcdonalds.css +1 -1
- package/dist/cdn/themes/mcdonalds.tokens.json +4 -4
- package/dist/cdn/themes/midnight.css +1 -1
- package/dist/cdn/themes/midnight.tokens.json +4 -4
- package/dist/cdn/themes/minimal-dark.tokens.json +4 -4
- package/dist/cdn/themes/minimal.css +1 -1
- package/dist/cdn/themes/minimal.tokens.json +4 -4
- package/dist/cdn/themes/modern-dark.tokens.json +4 -4
- package/dist/cdn/themes/modern.css +1 -1
- package/dist/cdn/themes/modern.tokens.json +4 -4
- package/dist/cdn/themes/nes-dark.tokens.json +4 -4
- package/dist/cdn/themes/nes.css +1 -1
- package/dist/cdn/themes/nes.tokens.json +4 -4
- package/dist/cdn/themes/neumorphism-dark.tokens.json +10 -10
- package/dist/cdn/themes/neumorphism.css +1 -1
- package/dist/cdn/themes/neumorphism.tokens.json +10 -10
- package/dist/cdn/themes/nord-dark.tokens.json +4 -4
- package/dist/cdn/themes/nord.css +1 -1
- package/dist/cdn/themes/nord.tokens.json +4 -4
- package/dist/cdn/themes/organic-dark.tokens.json +4 -4
- package/dist/cdn/themes/organic.css +1 -1
- package/dist/cdn/themes/organic.tokens.json +4 -4
- package/dist/cdn/themes/rose-pine-dark.tokens.json +4 -4
- package/dist/cdn/themes/rose-pine.css +1 -1
- package/dist/cdn/themes/rose-pine.tokens.json +4 -4
- package/dist/cdn/themes/rough-dark.tokens.json +4 -5
- package/dist/cdn/themes/rough.css +1 -1
- package/dist/cdn/themes/rough.tokens.json +5 -6
- package/dist/cdn/themes/solarized-dark.tokens.json +4 -4
- package/dist/cdn/themes/solarized.css +1 -1
- package/dist/cdn/themes/solarized.tokens.json +4 -4
- package/dist/cdn/themes/starbucks.css +1 -1
- package/dist/cdn/themes/starbucks.tokens.json +4 -4
- package/dist/cdn/themes/startup-dark.tokens.json +4 -4
- package/dist/cdn/themes/startup.css +1 -1
- package/dist/cdn/themes/startup.tokens.json +4 -4
- package/dist/cdn/themes/super2026-dark.tokens.json +4 -4
- package/dist/cdn/themes/super2026.css +1 -1
- package/dist/cdn/themes/super2026.tokens.json +4 -4
- package/dist/cdn/themes/swiss-dark.tokens.json +1 -1
- package/dist/cdn/themes/swiss.css +1 -1
- package/dist/cdn/themes/swiss.tokens.json +4 -4
- package/dist/cdn/themes/terminal.css +1 -1
- package/dist/cdn/themes/terminal.tokens.json +4 -4
- package/dist/cdn/themes/tokyo-night-dark.tokens.json +4 -4
- package/dist/cdn/themes/tokyo-night.css +1 -1
- package/dist/cdn/themes/tokyo-night.tokens.json +4 -4
- package/dist/cdn/themes/vaporwave-dark.tokens.json +4 -4
- package/dist/cdn/themes/vaporwave.css +1 -1
- package/dist/cdn/themes/vaporwave.tokens.json +4 -4
- package/dist/cdn/themes/win9x-dark.tokens.json +4 -4
- package/dist/cdn/themes/win9x.css +1 -1
- package/dist/cdn/themes/win9x.tokens.json +4 -4
- package/dist/cdn/vanilla-breeze-charts.css +1 -1
- package/dist/cdn/vanilla-breeze-core.css +1 -1
- package/dist/cdn/vanilla-breeze-core.js +62 -62
- package/dist/cdn/vanilla-breeze-dev.css +1 -1
- package/dist/cdn/vanilla-breeze-extras.js +19 -19
- package/dist/cdn/vanilla-breeze-labs.css +1 -1
- package/dist/cdn/vanilla-breeze.css +1 -1
- package/dist/cdn/vanilla-breeze.js +170 -170
- package/package.json +5 -8
- package/dist/cdn/components/accessibility-specimen.js +0 -11
- package/dist/cdn/components/adr-wc.js +0 -403
- package/dist/cdn/components/breakpoint-specimen.js +0 -26
- package/dist/cdn/components/burndown-chart.js +0 -2
- package/dist/cdn/components/capacity-plan.js +0 -25
- package/dist/cdn/components/color-palette.js +0 -16
- package/dist/cdn/components/component-sampler.js +0 -45
- package/dist/cdn/components/empathy-map.js +0 -582
- package/dist/cdn/components/font-pairer.js +0 -108
- package/dist/cdn/components/gantt-chart.js +0 -2
- package/dist/cdn/components/gradient-builder.js +0 -52
- package/dist/cdn/components/impact-effort.js +0 -2
- package/dist/cdn/components/iron-triangle.js +0 -2
- package/dist/cdn/components/kanban-board.js +0 -2
- package/dist/cdn/components/layout-specimen.js +0 -35
- package/dist/cdn/components/motion-specimen.js +0 -21
- package/dist/cdn/components/palette-generator.js +0 -15
- package/dist/cdn/components/product-roadmap.js +0 -3
- package/dist/cdn/components/quadrant-grid.js +0 -3
- package/dist/cdn/components/quality-target.js +0 -12
- package/dist/cdn/components/requirement-card.js +0 -122
- package/dist/cdn/components/review-surface.js +0 -535
- package/dist/cdn/components/risk-register.js +0 -25
- package/dist/cdn/components/semantic-palette.js +0 -30
- package/dist/cdn/components/spacing-specimen.js +0 -6
- package/dist/cdn/components/story-map.js +0 -2
- package/dist/cdn/components/theme-catalog.js +0 -28
- package/dist/cdn/components/theme-export.js +0 -26
- package/dist/cdn/components/theme-import.js +0 -44
- package/dist/cdn/components/token-specimen.js +0 -26
- package/dist/cdn/components/traceability-matrix.js +0 -3
- package/dist/cdn/components/type-specimen.js +0 -19
- package/dist/cdn/components/user-journey.js +0 -366
- package/dist/cdn/components/user-persona.js +0 -402
- package/dist/cdn/components/user-story.js +0 -411
- package/dist/cdn/components/work-item.js +0 -447
- package/dist/cdn/packs/design-system.full.css +0 -2
- package/dist/cdn/packs/design-system.full.js +0 -175
- package/dist/cdn/packs/ux-planning.full.css +0 -2
- 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,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}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
|