vanilla-breeze 0.1.3 → 0.2.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/custom-elements.json +25084 -6649
- package/dist/cdn/components/accessibility-specimen.js +11 -0
- package/dist/cdn/components/accordion-wc.js +1 -1
- package/dist/cdn/components/activity-feed.js +2 -0
- package/dist/cdn/components/adr-wc.js +17 -17
- package/dist/cdn/components/ai-chat.js +28 -0
- package/dist/cdn/components/ai-summary.js +10 -0
- package/dist/cdn/components/analytics-panel.js +5 -5
- package/dist/cdn/components/audio-player.js +3 -3
- package/dist/cdn/components/audio-visualizer.js +2 -2
- package/dist/cdn/components/author-index.js +2 -2
- package/dist/cdn/components/brand-mark.js +1 -1
- package/dist/cdn/components/bread-crumb.js +2 -0
- package/dist/cdn/components/breakpoint-specimen.js +26 -0
- package/dist/cdn/components/burndown-chart.js +2 -0
- package/dist/cdn/components/calendar-wc.js +2 -2
- package/dist/cdn/components/capacity-plan.js +25 -0
- package/dist/cdn/components/card-list.js +1 -1
- package/dist/cdn/components/carousel-wc.js +1 -1
- package/dist/cdn/components/change-set.js +2 -2
- package/dist/cdn/components/chart-wc.js +58 -36
- package/dist/cdn/components/chat-input.js +1 -1
- package/dist/cdn/components/chat-window.js +1 -1
- package/dist/cdn/components/color-palette.js +9 -9
- package/dist/cdn/components/color-picker.js +1 -1
- package/dist/cdn/components/combo-box.js +1 -1
- package/dist/cdn/components/command-palette.js +1 -1
- package/dist/cdn/components/comment-box.js +60 -0
- package/dist/cdn/components/comment-thread.js +60 -0
- package/dist/cdn/components/comment-wc.js +1 -1
- package/dist/cdn/components/compare-surface.js +1 -1
- package/dist/cdn/components/component-sampler.js +2 -2
- package/dist/cdn/components/consent-banner.js +1 -1
- package/dist/cdn/components/content-lens.js +1 -1
- package/dist/cdn/components/content-swap.js +1 -1
- package/dist/cdn/components/context-menu.js +1 -1
- package/dist/cdn/components/data-table.js +1 -1
- package/dist/cdn/components/date-picker.js +1 -1
- package/dist/cdn/components/day-view.js +1 -1
- package/dist/cdn/components/diagram-wc.js +3 -0
- package/dist/cdn/components/drag-surface.js +1 -1
- package/dist/cdn/components/drop-down.js +1 -1
- package/dist/cdn/components/emoji-picker.js +1 -1
- package/dist/cdn/components/empathy-map.js +41 -43
- package/dist/cdn/components/flow-diagram.js +1 -1
- package/dist/cdn/components/font-pairer.js +81 -81
- package/dist/cdn/components/foot-notes.js +1 -1
- package/dist/cdn/components/form-field.js +1 -1
- package/dist/cdn/components/gantt-chart.js +1 -1
- package/dist/cdn/components/geo-map.js +25 -23
- package/dist/cdn/components/glossary-index.js +1 -1
- package/dist/cdn/components/glossary-wc.js +1 -1
- package/dist/cdn/components/gradient-builder.js +29 -29
- package/dist/cdn/components/heading-links.js +1 -1
- package/dist/cdn/components/highlight-wc.js +2 -2
- package/dist/cdn/components/icon-wc.js +4 -4
- package/dist/cdn/components/image-gallery.js +1 -1
- package/dist/cdn/components/image-map.js +1 -1
- package/dist/cdn/components/impact-effort.js +1 -1
- package/dist/cdn/components/include-file.js +1 -1
- package/dist/cdn/components/iron-triangle.js +2 -0
- package/dist/cdn/components/kanban-board.js +1 -1
- package/dist/cdn/components/layout-specimen.js +35 -0
- package/dist/cdn/components/manifest.json +227 -103
- package/dist/cdn/components/markdown-editor.js +1 -1
- package/dist/cdn/components/markdown-viewer.js +12 -12
- package/dist/cdn/components/motion-specimen.js +12 -12
- package/dist/cdn/components/nav-bar.js +2 -0
- package/dist/cdn/components/note-wc.js +2 -2
- package/dist/cdn/components/notification-wc.js +4 -4
- package/dist/cdn/components/page-info.js +4 -4
- package/dist/cdn/components/page-stats.js +1 -1
- package/dist/cdn/components/page-toc.js +1 -1
- package/dist/cdn/components/page-tools.js +1 -1
- package/dist/cdn/components/page-tour.js +6 -6
- package/dist/cdn/components/pager-wc.js +2 -0
- package/dist/cdn/components/palette-generator.js +11 -11
- package/dist/cdn/components/poll-wc.js +2 -0
- package/dist/cdn/components/pop-over.js +2 -0
- package/dist/cdn/components/popularity-index.js +2 -2
- package/dist/cdn/components/print-page.js +1 -1
- package/dist/cdn/components/product-roadmap.js +3 -0
- package/dist/cdn/components/progress-tracker.js +2 -0
- package/dist/cdn/components/qr-code.js +1 -1
- package/dist/cdn/components/quadrant-grid.js +3 -0
- package/dist/cdn/components/quality-target.js +12 -0
- package/dist/cdn/components/reaction-bar.js +2 -0
- package/dist/cdn/components/reader-view.js +3 -3
- package/dist/cdn/components/reading-progress.js +2 -0
- package/dist/cdn/components/recently-visited.js +10 -10
- package/dist/cdn/components/requirement-card.js +122 -0
- package/dist/cdn/components/review-surface.js +34 -40
- package/dist/cdn/components/risk-register.js +25 -0
- package/dist/cdn/components/roadmap.js +3 -0
- package/dist/cdn/components/score-card.js +197 -0
- package/dist/cdn/components/selection-menu.js +1 -1
- package/dist/cdn/components/semantic-palette.js +15 -15
- package/dist/cdn/components/settings-panel.js +12 -12
- package/dist/cdn/components/share-wc.js +2 -2
- package/dist/cdn/components/short-cuts.js +1 -1
- package/dist/cdn/components/site-index.js +4 -4
- package/dist/cdn/components/site-map-wc.js +1 -1
- package/dist/cdn/components/site-map.js +1 -1
- package/dist/cdn/components/site-search.js +9 -9
- package/dist/cdn/components/slide-accept.js +1 -1
- package/dist/cdn/components/social-embed.js +1 -1
- package/dist/cdn/components/spacing-specimen.js +5 -5
- package/dist/cdn/components/split-surface.js +1 -1
- package/dist/cdn/components/star-rating.js +1 -1
- package/dist/cdn/components/status-wc.js +2 -0
- package/dist/cdn/components/stepper-wc.js +2 -0
- package/dist/cdn/components/story-map.js +1 -1
- package/dist/cdn/components/tab-set.js +1 -1
- package/dist/cdn/components/text-reader.js +2 -2
- package/dist/cdn/components/theme-catalog.js +28 -0
- package/dist/cdn/components/theme-export.js +20 -12
- package/dist/cdn/components/theme-import.js +44 -0
- package/dist/cdn/components/theme-picker.js +29 -26
- package/dist/cdn/components/time-index.js +2 -2
- package/dist/cdn/components/time-picker.js +1 -1
- package/dist/cdn/components/toast-msg.js +3 -3
- package/dist/cdn/components/token-specimen.js +14 -14
- package/dist/cdn/components/tool-tip.js +1 -1
- package/dist/cdn/components/topic-map.js +3 -3
- package/dist/cdn/components/traceability-matrix.js +3 -0
- package/dist/cdn/components/trust-filter.js +3 -3
- package/dist/cdn/components/type-specimen.js +15 -15
- package/dist/cdn/components/user-journey.js +63 -70
- package/dist/cdn/components/user-persona.js +75 -13
- package/dist/cdn/components/user-story.js +12 -11
- package/dist/cdn/components/version-switcher.js +17 -0
- package/dist/cdn/components/video-player.js +3 -3
- package/dist/cdn/components/watch-wc.js +2 -2
- package/dist/cdn/components/week-view.js +1 -1
- package/dist/cdn/components/work-item.js +29 -28
- package/dist/cdn/components/youtube-player.js +1 -1
- package/dist/cdn/icons/bold.css +17 -0
- package/dist/cdn/icons/bold.json +1 -0
- package/dist/cdn/icons/custom.css +6 -0
- package/dist/cdn/icons/custom.json +1 -0
- package/dist/cdn/icons/lucide.css +1914 -0
- package/dist/cdn/icons/lucide.json +1 -0
- package/dist/cdn/icons/mage.css +17 -0
- package/dist/cdn/icons/mage.json +1 -0
- package/dist/cdn/icons/phosphor.css +17 -0
- package/dist/cdn/icons/phosphor.json +1 -0
- package/dist/cdn/icons/tabler.css +17 -0
- package/dist/cdn/icons/tabler.json +1 -0
- package/dist/cdn/packs/design-system.full.js +59 -51
- package/dist/cdn/packs/effects.full.js +1 -1
- package/dist/cdn/packs/icons.effects.js +1 -1
- package/dist/cdn/packs/icons.full.js +1 -1
- package/dist/cdn/packs/kawaii.full.css +1 -1
- package/dist/cdn/packs/kawaii.full.js +6 -6
- package/dist/cdn/packs/kawaii.theme.css +1 -1
- package/dist/cdn/packs/manifest.json +11 -11
- package/dist/cdn/packs/ui.full.css +1 -1
- package/dist/cdn/packs/ui.full.js +54 -51
- package/dist/cdn/packs/ux-planning.full.css +1 -1
- package/dist/cdn/packs/ux-planning.full.js +318 -243
- package/dist/cdn/themes/8bit.css +1 -1
- package/dist/cdn/themes/8bit.tokens.json +662 -0
- package/dist/cdn/themes/alpha1999-dark.tokens.json +693 -0
- package/dist/cdn/themes/alpha1999.css +1 -1
- package/dist/cdn/themes/alpha1999.tokens.json +869 -0
- package/dist/cdn/themes/anthropic.css +2 -0
- package/dist/cdn/themes/anthropic.tokens.json +564 -0
- package/dist/cdn/themes/art-deco-dark.tokens.json +407 -0
- package/dist/cdn/themes/art-deco.css +1 -1
- package/dist/cdn/themes/art-deco.tokens.json +581 -0
- package/dist/cdn/themes/bauhaus-dark.tokens.json +260 -0
- package/dist/cdn/themes/bauhaus.css +1 -1
- package/dist/cdn/themes/bauhaus.tokens.json +589 -0
- package/dist/cdn/themes/brutalist-dark.tokens.json +503 -0
- package/dist/cdn/themes/brutalist.tokens.json +677 -0
- package/dist/cdn/themes/catalog/atlassian.tokens.json +303 -0
- package/dist/cdn/themes/catalog/bootstrap.tokens.json +304 -0
- package/dist/cdn/themes/catalog/carbon.tokens.json +301 -0
- package/dist/cdn/themes/catalog/catppuccin-mocha.tokens.json +301 -0
- package/dist/cdn/themes/catalog/govuk.tokens.json +301 -0
- package/dist/cdn/themes/catalog/manifest.json +132 -0
- package/dist/cdn/themes/catalog/material.tokens.json +289 -0
- package/dist/cdn/themes/catalog/salesforce.tokens.json +301 -0
- package/dist/cdn/themes/catalog/tailwind.tokens.json +302 -0
- package/dist/cdn/themes/catppuccin-frappe.css +1 -1
- package/dist/cdn/themes/catppuccin-frappe.tokens.json +608 -0
- package/dist/cdn/themes/catppuccin-latte-dark.tokens.json +472 -0
- package/dist/cdn/themes/catppuccin-latte.css +1 -1
- package/dist/cdn/themes/catppuccin-latte.tokens.json +608 -0
- package/dist/cdn/themes/catppuccin-macchiato.css +1 -1
- package/dist/cdn/themes/catppuccin-macchiato.tokens.json +608 -0
- package/dist/cdn/themes/catppuccin-mocha.tokens.json +608 -0
- package/dist/cdn/themes/classic-dark.tokens.json +503 -0
- package/dist/cdn/themes/classic.tokens.json +640 -0
- package/dist/cdn/themes/claymorphism-dark.tokens.json +493 -0
- package/dist/cdn/themes/claymorphism.css +1 -1
- package/dist/cdn/themes/claymorphism.tokens.json +626 -0
- package/dist/cdn/themes/clinical-dark.tokens.json +472 -0
- package/dist/cdn/themes/clinical.tokens.json +608 -0
- package/dist/cdn/themes/cottagecore-dark.tokens.json +412 -0
- package/dist/cdn/themes/cottagecore.css +1 -1
- package/dist/cdn/themes/cottagecore.tokens.json +544 -0
- package/dist/cdn/themes/cyber.tokens.json +668 -0
- package/dist/cdn/themes/dawn-dark.tokens.json +472 -0
- package/dist/cdn/themes/dawn.css +1 -1
- package/dist/cdn/themes/dawn.tokens.json +608 -0
- package/dist/cdn/themes/dracula.tokens.json +534 -0
- package/dist/cdn/themes/dusk.tokens.json +533 -0
- package/dist/cdn/themes/editorial-dark.tokens.json +400 -0
- package/dist/cdn/themes/editorial.tokens.json +690 -0
- package/dist/cdn/themes/financial-dark.tokens.json +472 -0
- package/dist/cdn/themes/financial.css +1 -1
- package/dist/cdn/themes/financial.tokens.json +607 -0
- package/dist/cdn/themes/genai.tokens.json +534 -0
- package/dist/cdn/themes/glassmorphism-dark.tokens.json +489 -0
- package/dist/cdn/themes/glassmorphism.css +1 -1
- package/dist/cdn/themes/glassmorphism.tokens.json +632 -0
- package/dist/cdn/themes/government-dark.tokens.json +472 -0
- package/dist/cdn/themes/government.tokens.json +608 -0
- package/dist/cdn/themes/gruvbox-dark.tokens.json +472 -0
- package/dist/cdn/themes/gruvbox.tokens.json +608 -0
- package/dist/cdn/themes/high-noon-dark.tokens.json +397 -0
- package/dist/cdn/themes/high-noon.tokens.json +533 -0
- package/dist/cdn/themes/ibm.css +2 -0
- package/dist/cdn/themes/ibm.tokens.json +568 -0
- package/dist/cdn/themes/kawaii-dark.tokens.json +549 -0
- package/dist/cdn/themes/kawaii.css +1 -1
- package/dist/cdn/themes/kawaii.tokens.json +641 -0
- package/dist/cdn/themes/magna-dark.tokens.json +482 -0
- package/dist/cdn/themes/magna.css +1 -1
- package/dist/cdn/themes/magna.tokens.json +632 -0
- package/dist/cdn/themes/manifest.json +162 -62
- package/dist/cdn/themes/mcdonalds.css +2 -0
- package/dist/cdn/themes/mcdonalds.tokens.json +533 -0
- package/dist/cdn/themes/midnight.tokens.json +534 -0
- package/dist/cdn/themes/minimal-dark.tokens.json +294 -0
- package/dist/cdn/themes/minimal.tokens.json +494 -0
- package/dist/cdn/themes/modern-dark.tokens.json +490 -0
- package/dist/cdn/themes/modern.tokens.json +573 -0
- package/dist/cdn/themes/nes-dark.tokens.json +564 -0
- package/dist/cdn/themes/nes.css +1 -1
- package/dist/cdn/themes/nes.tokens.json +687 -0
- package/dist/cdn/themes/neumorphism-dark.tokens.json +471 -0
- package/dist/cdn/themes/neumorphism.css +1 -1
- package/dist/cdn/themes/neumorphism.tokens.json +589 -0
- package/dist/cdn/themes/nord-dark.tokens.json +484 -0
- package/dist/cdn/themes/nord.tokens.json +619 -0
- package/dist/cdn/themes/organic-dark.tokens.json +532 -0
- package/dist/cdn/themes/organic.tokens.json +685 -0
- package/dist/cdn/themes/rose-pine-dark.tokens.json +472 -0
- package/dist/cdn/themes/rose-pine.tokens.json +608 -0
- package/dist/cdn/themes/rough-dark.tokens.json +515 -0
- package/dist/cdn/themes/rough.css +1 -1
- package/dist/cdn/themes/rough.tokens.json +650 -0
- package/dist/cdn/themes/solarized-dark.tokens.json +397 -0
- package/dist/cdn/themes/solarized.tokens.json +532 -0
- package/dist/cdn/themes/starbucks.css +2 -0
- package/dist/cdn/themes/starbucks.tokens.json +593 -0
- package/dist/cdn/themes/startup-dark.tokens.json +522 -0
- package/dist/cdn/themes/startup.css +1 -1
- package/dist/cdn/themes/startup.tokens.json +607 -0
- package/dist/cdn/themes/super2026-dark.tokens.json +667 -0
- package/dist/cdn/themes/super2026.tokens.json +863 -0
- package/dist/cdn/themes/swiss-dark.tokens.json +390 -0
- package/dist/cdn/themes/swiss.tokens.json +750 -0
- package/dist/cdn/themes/terminal.css +1 -1
- package/dist/cdn/themes/terminal.tokens.json +689 -0
- package/dist/cdn/themes/tokyo-night-dark.tokens.json +472 -0
- package/dist/cdn/themes/tokyo-night.tokens.json +608 -0
- package/dist/cdn/themes/vaporwave-dark.tokens.json +413 -0
- package/dist/cdn/themes/vaporwave.tokens.json +549 -0
- package/dist/cdn/themes/win9x-dark.tokens.json +563 -0
- package/dist/cdn/themes/win9x.tokens.json +700 -0
- package/dist/cdn/vanilla-breeze-charts.css +1 -1
- package/dist/cdn/vanilla-breeze-charts.js +58 -36
- package/dist/cdn/vanilla-breeze-core.css +1 -1
- package/dist/cdn/vanilla-breeze-core.js +246 -51
- package/dist/cdn/vanilla-breeze-dev.js +1 -1
- package/dist/cdn/vanilla-breeze-extras.js +90 -80
- package/dist/cdn/vanilla-breeze.css +1 -1
- package/dist/cdn/vanilla-breeze.js +1370 -405
- package/package.json +12 -4
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var
|
|
1
|
+
var _=`
|
|
2
2
|
:host {
|
|
3
3
|
display: block;
|
|
4
4
|
font-family: var(--_font-sans);
|
|
@@ -12,11 +12,20 @@ var m=`
|
|
|
12
12
|
--_muted: var(--empathy-map-muted, var(--color-text-muted, #666666));
|
|
13
13
|
--_text: var(--empathy-map-text, var(--color-text, #1a1a1a));
|
|
14
14
|
--_radius: var(--empathy-map-radius, var(--radius-xl, 1rem));
|
|
15
|
-
--_accent: var(--empathy-map-accent, var(--color-interactive, #0066cc));
|
|
16
|
-
--
|
|
17
|
-
--
|
|
18
|
-
--
|
|
19
|
-
--
|
|
15
|
+
--_accent: var(--empathy-map-accent, var(--color-interactive, var(--color-primary, #0066cc)));
|
|
16
|
+
--_link: var(--empathy-map-link, var(--color-interactive, var(--color-primary, #6366f1)));
|
|
17
|
+
--_primary: var(--empathy-map-primary, var(--color-primary, #6366f1));
|
|
18
|
+
--_accent-bar: var(--empathy-map-accent-bar, var(--color-accent, #8b5cf6));
|
|
19
|
+
--_says: var(--empathy-map-says, var(--color-info, #3b82f6));
|
|
20
|
+
--_thinks: var(--empathy-map-thinks, var(--color-accent, #8b5cf6));
|
|
21
|
+
--_does: var(--empathy-map-does, var(--color-warning, #f59e0b));
|
|
22
|
+
--_feels: var(--empathy-map-feels, var(--color-error, #ef4444));
|
|
23
|
+
--_says-bg: color-mix(in oklch, var(--_says) 16%, var(--_card));
|
|
24
|
+
--_thinks-bg: color-mix(in oklch, var(--_thinks) 16%, var(--_card));
|
|
25
|
+
--_does-bg: color-mix(in oklch, var(--_does) 16%, var(--_card));
|
|
26
|
+
--_feels-bg: color-mix(in oklch, var(--_feels) 16%, var(--_card));
|
|
27
|
+
--_chip-type-bg: color-mix(in oklch, var(--_accent-bar) 18%, var(--_card));
|
|
28
|
+
--_chip-type-fg: var(--_accent-bar);
|
|
20
29
|
--_font-sans: var(--empathy-map-font, var(--font-sans, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif));
|
|
21
30
|
--_font-xs: var(--empathy-map-font-xs, var(--font-size-xs, 0.75rem));
|
|
22
31
|
--_font-sm: var(--empathy-map-font-sm, var(--font-size-sm, 0.875rem));
|
|
@@ -58,7 +67,7 @@ var m=`
|
|
|
58
67
|
inset-block: 0;
|
|
59
68
|
inset-inline-start: 0;
|
|
60
69
|
width: 4px;
|
|
61
|
-
background: linear-gradient(135deg,
|
|
70
|
+
background: linear-gradient(135deg, var(--_primary), var(--_accent-bar));
|
|
62
71
|
}
|
|
63
72
|
|
|
64
73
|
.empathy-map__header-top {
|
|
@@ -90,12 +99,8 @@ var m=`
|
|
|
90
99
|
}
|
|
91
100
|
|
|
92
101
|
.chip--type {
|
|
93
|
-
color:
|
|
94
|
-
background:
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
@media (prefers-color-scheme: dark) {
|
|
98
|
-
.chip--type { color: #a78bfa; background: #2e1065; }
|
|
102
|
+
color: var(--_chip-type-fg);
|
|
103
|
+
background: var(--_chip-type-bg);
|
|
99
104
|
}
|
|
100
105
|
|
|
101
106
|
/* \u2500\u2500 Persona ref \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
|
|
@@ -116,7 +121,7 @@ var m=`
|
|
|
116
121
|
flex-shrink: 0;
|
|
117
122
|
}
|
|
118
123
|
|
|
119
|
-
a.persona-ref:hover { color:
|
|
124
|
+
a.persona-ref:hover { color: var(--_link); text-decoration: underline; }
|
|
120
125
|
|
|
121
126
|
/* \u2500\u2500 Title & summary (slotted content) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
|
|
122
127
|
.empathy-map__title-wrap {
|
|
@@ -205,17 +210,10 @@ var m=`
|
|
|
205
210
|
height: 16px;
|
|
206
211
|
}
|
|
207
212
|
|
|
208
|
-
.quadrant--says .quadrant__icon { background:
|
|
209
|
-
.quadrant--thinks .quadrant__icon { background:
|
|
210
|
-
.quadrant--does .quadrant__icon { background:
|
|
211
|
-
.quadrant--feels .quadrant__icon { background:
|
|
212
|
-
|
|
213
|
-
@media (prefers-color-scheme: dark) {
|
|
214
|
-
.quadrant--says .quadrant__icon { background: #1e3a5f; }
|
|
215
|
-
.quadrant--thinks .quadrant__icon { background: #2e1065; }
|
|
216
|
-
.quadrant--does .quadrant__icon { background: #451a03; }
|
|
217
|
-
.quadrant--feels .quadrant__icon { background: #450a0a; }
|
|
218
|
-
}
|
|
213
|
+
.quadrant--says .quadrant__icon { background: var(--_says-bg); color: var(--_says); }
|
|
214
|
+
.quadrant--thinks .quadrant__icon { background: var(--_thinks-bg); color: var(--_thinks); }
|
|
215
|
+
.quadrant--does .quadrant__icon { background: var(--_does-bg); color: var(--_does); }
|
|
216
|
+
.quadrant--feels .quadrant__icon { background: var(--_feels-bg); color: var(--_feels); }
|
|
219
217
|
|
|
220
218
|
.quadrant__label {
|
|
221
219
|
font-size: 13px;
|
|
@@ -492,7 +490,7 @@ var m=`
|
|
|
492
490
|
@media print {
|
|
493
491
|
.empathy-map {
|
|
494
492
|
break-inside: avoid;
|
|
495
|
-
border-color:
|
|
493
|
+
border-color: var(--_border);
|
|
496
494
|
}
|
|
497
495
|
|
|
498
496
|
.quadrant__edit-btn,
|
|
@@ -511,9 +509,9 @@ var m=`
|
|
|
511
509
|
|
|
512
510
|
/* \u2500\u2500 Utility \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
|
|
513
511
|
.state-msg { padding: var(--_space-l); font-size: var(--_font-sm); color: var(--_muted); font-style: italic; }
|
|
514
|
-
.state-msg--error { color: #dc2626; }
|
|
515
|
-
code { font-family: Monaco, Menlo, monospace; font-size: 0.88em; }
|
|
516
|
-
`;var
|
|
512
|
+
.state-msg--error { color: var(--color-error-text, var(--color-error, #dc2626)); }
|
|
513
|
+
code { font-family: var(--font-mono, Monaco, Menlo, monospace); font-size: 0.88em; }
|
|
514
|
+
`;var E=window.matchMedia("(prefers-reduced-motion: reduce)");var g=new Map;function y(o,t,e={}){let a=e.priority??10,r={impl:t,bundle:e.bundle,contract:e.contract,priority:a},n=g.get(o);if(customElements.get(o)){if(!n||n.priority>=a){n&&n.priority===a&&n.impl!==t&&console.warn(`[VB Bundle] Tag <${o}> already registered by "${n.bundle}" (priority ${n.priority}). Skipping "${e.bundle}".`);return}console.warn(`[VB Bundle] Tag <${o}> defined by "${n.bundle}" cannot be replaced (customElements.define is permanent). "${e.bundle}" has higher priority but arrived late.`);return}if(n&&n.priority>=a){n.priority===a&&console.warn(`[VB Bundle] Tag <${o}> already registered by "${n.bundle}". Skipping "${e.bundle}" (first wins at equal priority).`);return}g.set(o,r),customElements.define(o,t)}var k=0;function x(o,t,e="vb-vt"){if(!o?.isConnected||typeof document>"u"||!("startViewTransition"in document)||matchMedia("(prefers-reduced-motion: reduce)").matches)return t(),null;let a=`${e}-${++k}`;o.style.viewTransitionName=a;let r=document.startViewTransition(t);return r.finished.finally(()=>{o.style.viewTransitionName===a&&(o.style.viewTransitionName="")}),r}function c(o){return String(o).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function p(o){return`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${o}</svg>`}var l={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"/>'},f={says:{label:"Says",icon:l.messageCircle,color:"#3b82f6"},thinks:{label:"Thinks",icon:l.lightbulb,color:"#8b5cf6"},does:{label:"Does",icon:l.wrench,color:"#f59e0b"},feels:{label:"Feels",icon:l.heart,color:"#ef4444"}},q={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 b=["says","thinks","does","feels"],v=class extends HTMLElement{static get observedAttributes(){return["persona","persona-id","src","editable","compact"]}#t=new Map;constructor(){super(),this.attachShadow({mode:"open"}),this.__quadrants=null,this.__goals=null,this.__painPoints=null,this._editingQuadrants=new Set}get quadrants(){return this.__quadrants}set quadrants(t){this.__quadrants=t,this.isConnected&&this._render()}get goals(){return this.__goals}set goals(t){this.__goals=t,this.isConnected&&this._render()}get painPoints(){return this.__painPoints}set painPoints(t){this.__painPoints=t,this.isConnected&&this._render()}#e(){for(let t of this.children){let e=t.getAttribute("slot");e&&this.#t.set(e,t.textContent.trim())}}_resolve(t){return this.getAttribute(t)||this.#t.get(t)||""}connectedCallback(){this.#e(),this.setAttribute("data-upgraded",""),this.hasAttribute("src")?this._loadSrc(this.getAttribute("src")):this._render()}disconnectedCallback(){this.removeAttribute("data-upgraded")}attributeChangedCallback(t){this.isConnected&&(t==="src"?this._loadSrc(this.getAttribute("src")):this._render())}get data(){let t=this.querySelector('[slot="title"]'),e=this.querySelector('[slot="summary"]');return{persona:this.getAttribute("persona")||void 0,personaId:this.getAttribute("persona-id")||void 0,title:t?.textContent?.trim()||void 0,summary:e?.textContent?.trim()||void 0,quadrants:this.__quadrants||void 0,goals:this.__goals||void 0,painPoints:this.__painPoints||void 0}}set data(t){if(!(!t||typeof t!="object")){if(t.persona&&this.setAttribute("persona",String(t.persona)),t.personaId&&this.setAttribute("persona-id",String(t.personaId)),t.title&&!this.querySelector('[slot="title"]')){let e=document.createElement("h2");e.slot="title",e.textContent=t.title,this.appendChild(e)}if(t.summary&&!this.querySelector('[slot="summary"]')){let e=document.createElement("p");e.slot="summary",e.textContent=t.summary,this.appendChild(e)}t.quadrants!=null&&(this.__quadrants=t.quadrants),t.goals!=null&&(this.__goals=t.goals),t.painPoints!=null&&(this.__painPoints=t.painPoints),this.isConnected&&this._render(),this.dispatchEvent(new CustomEvent("empathy-map:data-changed",{detail:{data:this.data,source:"property"},bubbles:!0,composed:!0}))}}editQuadrant(t){b.includes(t)&&this.hasAttribute("editable")&&this._openEdit(t)}closeQuadrant(t){b.includes(t)&&this._closeEdit(t)}async _loadSrc(t){if(!(!t||!this.shadowRoot)){this.shadowRoot.innerHTML=`<style>${_}</style><div class="state-msg">Loading\u2026</div>`;try{let e=await fetch(t);if(!e.ok)throw new Error(`HTTP ${e.status}`);let a=await e.json();if(a.persona&&this.setAttribute("persona",a.persona),a.personaId&&this.setAttribute("persona-id",a.personaId),a.title&&!this.querySelector('[slot="title"]')){let r=document.createElement("h2");r.slot="title",r.textContent=a.title,this.appendChild(r)}if(a.summary&&!this.querySelector('[slot="summary"]')){let r=document.createElement("p");r.slot="summary",r.textContent=a.summary,this.appendChild(r)}this.__quadrants=a.quadrants||null,this.__goals=a.goals||null,this.__painPoints=a.painPoints||null,this._render()}catch(e){if(!this.shadowRoot)return;let a=e instanceof Error?e.message:String(e);this.shadowRoot.innerHTML=`<style>${_}</style><div class="state-msg state-msg--error">Could not load empathy map: ${c(a)}</div>`}}}_render(){let t=this._resolve("persona")||"",e=this._resolve("persona-id")||"",a=this.hasAttribute("compact"),r=this.hasAttribute("editable"),n=!!this.querySelector('[slot="title"]')||this.#t.has("title"),i=!!this.querySelector('[slot="summary"]')||this.#t.has("summary"),d=this.__goals?.length||this.querySelector('[slot="goals"]'),s=this.__painPoints?.length||this.querySelector('[slot="pain-points"]'),m=`<style>${_}</style>
|
|
517
515
|
<article class="empathy-map${a?" empathy-map--compact":""}">
|
|
518
516
|
|
|
519
517
|
<header class="empathy-map__header">
|
|
@@ -529,23 +527,23 @@ var m=`
|
|
|
529
527
|
<div class="empathy-map__title-wrap">
|
|
530
528
|
<slot name="title"><h2 class="empathy-map__title">Empathy Map</h2></slot>
|
|
531
529
|
</div>
|
|
532
|
-
${
|
|
530
|
+
${i?'<div class="empathy-map__summary-wrap"><slot name="summary"></slot></div>':""}
|
|
533
531
|
</header>
|
|
534
532
|
|
|
535
533
|
<div class="empathy-map__grid">
|
|
536
|
-
${
|
|
534
|
+
${b.map(h=>this._renderQuadrant(h,r)).join("")}
|
|
537
535
|
</div>
|
|
538
536
|
|
|
539
|
-
${d||
|
|
537
|
+
${d||s?`
|
|
540
538
|
<footer class="empathy-map__footer">
|
|
541
539
|
${this._renderSummaryRow("goals",p(l.target),"Goals")}
|
|
542
540
|
${this._renderSummaryRow("pain-points",p(l.alertTriangle),"Pain Points")}
|
|
543
541
|
</footer>
|
|
544
542
|
`:""}
|
|
545
543
|
|
|
546
|
-
</article>`,
|
|
544
|
+
</article>`,u=()=>{this.shadowRoot&&(this.shadowRoot.innerHTML=m,r&&this._bindEditListeners())};this.shadowRoot?.querySelector("article")?x(this,u,"em-vt"):u(),this.dispatchEvent(new CustomEvent("empathy-map:ready",{bubbles:!0,composed:!0,detail:{title:this.querySelector('[slot="title"]')?.textContent?.trim()||"Empathy Map",persona:t}}))}_renderQuadrant(t,e){let a=f[t],r=this.__quadrants?.[t],n=this._editingQuadrants.has(t),i=r&&r.length?t==="feels"?r.map(s=>this._renderEmotion(s)).join(""):r.map(s=>`<p>${c(s)}</p>`).join(""):`<slot name="${t}"><p class="placeholder">Add ${a.label.toLowerCase()} items\u2026</p></slot>`,d=r?.length?r.join(`
|
|
547
545
|
`):"";return`
|
|
548
|
-
<section class="quadrant quadrant--${t}"${
|
|
546
|
+
<section class="quadrant quadrant--${t}"${n?" data-editing":""}>
|
|
549
547
|
<div class="quadrant__inner">
|
|
550
548
|
<div class="quadrant__header">
|
|
551
549
|
<div class="quadrant__icon" aria-hidden="true">${p(a.icon)}</div>
|
|
@@ -554,13 +552,13 @@ var m=`
|
|
|
554
552
|
aria-label="Edit ${a.label}" title="Edit ${a.label}">${p(l.pencil)}</button>`:""}
|
|
555
553
|
</div>
|
|
556
554
|
<div class="quadrant__faces">
|
|
557
|
-
<div class="quadrant__face quadrant__face--front"${
|
|
555
|
+
<div class="quadrant__face quadrant__face--front"${n?" inert":""}>
|
|
558
556
|
<div class="quadrant__content">
|
|
559
|
-
${
|
|
557
|
+
${i}
|
|
560
558
|
</div>
|
|
561
559
|
</div>
|
|
562
560
|
${e?`
|
|
563
|
-
<div class="quadrant__face quadrant__face--back"${
|
|
561
|
+
<div class="quadrant__face quadrant__face--back"${n?"":" inert"}>
|
|
564
562
|
<textarea class="quadrant__editor" data-quadrant="${t}"
|
|
565
563
|
placeholder="One item per line\u2026"
|
|
566
564
|
aria-label="Edit ${a.label} items">${c(d)}</textarea>
|
|
@@ -570,15 +568,15 @@ var m=`
|
|
|
570
568
|
`:""}
|
|
571
569
|
</div>
|
|
572
570
|
</div>
|
|
573
|
-
</section>`}_renderEmotion(t){let e=t.toLowerCase().trim(),a=
|
|
571
|
+
</section>`}_renderEmotion(t){let e=t.toLowerCase().trim(),a=q[e];return a?`<span class="emotion-tag" style="--ec:${a.color}"><span role="img" aria-label="${c(t)}">${a.emoji}</span> ${c(t)}</span>`:`<p>${c(t)}</p>`}_renderSummaryRow(t,e,a){let n=(t==="pain-points"?"painPoints":t)==="painPoints"?this.__painPoints:this.__goals,i=n?.length?n.map(d=>`<p>${c(d)}</p>`).join(""):`<slot name="${t}"><p class="placeholder">No ${a.toLowerCase()} specified.</p></slot>`;return`
|
|
574
572
|
<div class="summary-row">
|
|
575
573
|
<span class="summary-row__icon" aria-hidden="true">${e}</span>
|
|
576
574
|
<div class="summary-row__body">
|
|
577
575
|
<div class="summary-row__label">${a}</div>
|
|
578
|
-
<div class="summary-row__content">${
|
|
576
|
+
<div class="summary-row__content">${i}</div>
|
|
579
577
|
</div>
|
|
580
|
-
</div>`}_bindEditListeners(){let t=this.shadowRoot;t.querySelectorAll(".quadrant__edit-btn").forEach(e=>{e.addEventListener("click",()=>{
|
|
581
|
-
`);else{let d=e.querySelector(`slot[name="${t}"]`);if(d){let
|
|
582
|
-
`)}}}
|
|
583
|
-
`).map(
|
|
578
|
+
</div>`}_bindEditListeners(){let t=this.shadowRoot;t&&(t.querySelectorAll(".quadrant__edit-btn").forEach(e=>{e.addEventListener("click",()=>{let a=e.dataset.quadrant;a&&this._openEdit(a)})}),t.querySelectorAll(".quadrant__done-btn").forEach(e=>{e.addEventListener("click",()=>{let a=e.dataset.quadrant;a&&this._closeEdit(a)})}),t.querySelectorAll(".quadrant__editor").forEach(e=>{let a=e;a.addEventListener("keydown",r=>{let n=r;if(n.key==="Escape"){n.preventDefault();let i=a.dataset.quadrant;i&&this._closeEdit(i)}})}))}_openEdit(t){this._editingQuadrants.add(t);let e=this.shadowRoot?.querySelector(`.quadrant--${t}`);if(!e)return;e.setAttribute("data-editing","");let a=e.querySelector(".quadrant__face--front"),r=e.querySelector(".quadrant__face--back");a&&a.setAttribute("inert",""),r&&r.removeAttribute("inert");let n=e.querySelector(".quadrant__editor");if(n){let i=this.__quadrants?.[t];if(i?.length)n.value=i.join(`
|
|
579
|
+
`);else{let d=e.querySelector(`slot[name="${t}"]`);if(d){let s=d.assignedElements();if(s.length){let m=[];s.forEach(u=>{let h=u.querySelectorAll("li");h.length?h.forEach(w=>m.push(w.textContent?.trim()??"")):m.push(u.textContent?.trim()??"")}),n.value=m.filter(Boolean).join(`
|
|
580
|
+
`)}}}n.focus()}}_closeEdit(t){let e=this.shadowRoot?.querySelector(`.quadrant--${t}`);if(!e)return;let a=e.querySelector(".quadrant__editor");if(a){let i=a.value.split(`
|
|
581
|
+
`).map(s=>s.trim()).filter(Boolean);this.__quadrants||(this.__quadrants={}),this.__quadrants[t]=i;let d=e.querySelector(".quadrant__content");if(d)if(i.length)d.innerHTML=t==="feels"?i.map(s=>this._renderEmotion(s)).join(""):i.map(s=>`<p>${c(s)}</p>`).join("");else{let s=f[t];d.innerHTML=`<p class="placeholder">Add ${s.label.toLowerCase()} items\u2026</p>`}}this._editingQuadrants.delete(t),e.removeAttribute("data-editing");let r=e.querySelector(".quadrant__face--front"),n=e.querySelector(".quadrant__face--back");r&&r.removeAttribute("inert"),n&&n.setAttribute("inert",""),this.dispatchEvent(new CustomEvent("empathy-map:update",{bubbles:!0,composed:!0,detail:{quadrant:t,items:this.__quadrants?.[t]||[]}}))}};y("empathy-map",v);export{v as EmpathyMap};
|
|
584
582
|
//# sourceMappingURL=empathy-map.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
1
|
+
var y=window.matchMedia("(prefers-reduced-motion: reduce)");var p=new Map;function b(c,e,s={}){let t=s.priority??10,n={impl:e,bundle:s.bundle,contract:s.contract,priority:t},i=p.get(c);if(customElements.get(c)){if(!i||i.priority>=t){i&&i.priority===t&&i.impl!==e&&console.warn(`[VB Bundle] Tag <${c}> already registered by "${i.bundle}" (priority ${i.priority}). Skipping "${s.bundle}".`);return}console.warn(`[VB Bundle] Tag <${c}> defined by "${i.bundle}" cannot be replaced (customElements.define is permanent). "${s.bundle}" has higher priority but arrived late.`);return}if(i&&i.priority>=t){i.priority===t&&console.warn(`[VB Bundle] Tag <${c}> already registered by "${i.bundle}". Skipping "${s.bundle}" (first wins at equal priority).`);return}p.set(c,n),customElements.define(c,e)}var m=class extends HTMLElement{#t=[];#s;connectedCallback(){this.hasAttribute("data-upgraded")||this.setup()!==!1&&(this.setAttribute("data-upgraded",""),queueMicrotask(()=>{this.dispatchEvent(new CustomEvent(`${this.localName}:upgraded`,{bubbles:!0}))}))}disconnectedCallback(){for(let e of this.#t)e();this.#t=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(e,s,t,n){e.addEventListener(s,t,n),this.#t.push(()=>e.removeEventListener(s,t,n))}setup(){}teardown(){}setState(e,s){this.#s||(this.#s=this.attachInternals());let t=this.#s.states;try{s?t.add(e):t.delete(e)}catch{let n=`--${e}`;s?t.add(n):t.delete(n)}}_adoptInternals(e){this.#s||(this.#s=e)}};var f=class c extends m{static get observedAttributes(){return["src","title","compact"]}#t=null;#s=null;#e=null;#n=0;#i=[];setup(){let e=this.querySelector(":scope > ol");if(!e)return!1;let s=this.#a(e);if(s.length===0)return!1;this.#i=s,e.style.display="none",e.setAttribute("aria-hidden","true");let t=this.getAttribute("title");t&&(this.#s=document.createElement("h2"),this.#s.className="fd-title",this.#s.textContent=t,this.insertBefore(this.#s,e)),this.#t=document.createElement("div"),this.#t.className="fd-container",this.#t.setAttribute("role","img"),this.#t.setAttribute("aria-label",`Flow diagram${t?": "+t:""}`),this.#n=0,this.#o(s,this.#t);let n=document.createElement("div");return n.className="fd-summary",n.textContent=`${this.#n} step${this.#n!==1?"s":""}`,this.#t.appendChild(n),this.insertBefore(this.#t,e),this.#e=document.createElement("div"),this.#e.className="fd-live",this.#e.setAttribute("role","status"),this.#e.setAttribute("aria-live","polite"),this.#e.setAttribute("aria-atomic","true"),this.appendChild(this.#e),this.listen(this.#t,"click",i=>{let o=i.target.closest(".fd-node-shape");if(!o)return;let a=o.closest(".fd-node")?.dataset.type||"action",l=o.textContent?.trim()||"";this.#m(`Selected: ${l}`),this.dispatchEvent(new CustomEvent("flow-diagram:select",{bubbles:!0,detail:{type:a,text:l}}))}),this.dispatchEvent(new CustomEvent("flow-diagram:ready",{bubbles:!0,detail:{nodeCount:this.#n}})),!0}teardown(){this.#s&&(this.#s.remove(),this.#s=null),this.#t&&(this.#t.remove(),this.#t=null),this.#e&&(this.#e.remove(),this.#e=null);let e=this.querySelector("ol");e&&(e.style.display="",e.removeAttribute("aria-hidden")),this.#n=0}static#d=0;attributeChangedCallback(e,s,t){s===t||!this.isConnected||(e==="src"?this._loadSrc(t):this.hasAttribute("data-upgraded")&&this.#r())}#r(){let e=()=>{this.teardown(),this.removeAttribute("data-upgraded"),this.setup()};if(this.hasAttribute("data-upgraded")&&"startViewTransition"in document&&!matchMedia("(prefers-reduced-motion: reduce)").matches){let s=`fd-vt-${++c.#d}`;this.style.viewTransitionName=s,document.startViewTransition(e).finished.finally(()=>{this.style.viewTransitionName=""})}else e()}get steps(){return this.#i}set steps(e){let s=Array.isArray(e)?e:[];this.#i=s,this.#s&&(this.#s.remove(),this.#s=null),this.#t&&(this.#t.remove(),this.#t=null),this.#e&&(this.#e.remove(),this.#e=null);let t=this.querySelector(":scope > ol");if(t||(t=document.createElement("ol"),t.style.display="none",t.setAttribute("aria-hidden","true"),this.appendChild(t)),s.length===0){this.dispatchEvent(new CustomEvent("flow-diagram:steps-changed",{detail:{steps:s,source:"property"},bubbles:!0}));return}let n=this.getAttribute("title");n&&(this.#s=document.createElement("h2"),this.#s.className="fd-title",this.#s.textContent=n,this.insertBefore(this.#s,t)),this.#t=document.createElement("div"),this.#t.className="fd-container",this.#t.setAttribute("role","img"),this.#t.setAttribute("aria-label",`Flow diagram${n?": "+n:""}`),this.#n=0,this.#o(s,this.#t);let i=document.createElement("div");i.className="fd-summary",i.textContent=`${this.#n} step${this.#n!==1?"s":""}`,this.#t.appendChild(i),this.insertBefore(this.#t,t),this.#e=document.createElement("div"),this.#e.className="fd-live",this.#e.setAttribute("role","status"),this.#e.setAttribute("aria-live","polite"),this.#e.setAttribute("aria-atomic","true"),this.appendChild(this.#e),this.dispatchEvent(new CustomEvent("flow-diagram:steps-changed",{detail:{steps:s,source:"property"},bubbles:!0}))}#a(e){let s=[];for(let t of e.querySelectorAll(":scope > li")){let n=this.#h(t);n&&s.push(n)}return s}#h(e){let s=e.dataset.type||"action",t=e.dataset.annotation||"",n=[],i=e.querySelectorAll(":scope > ol > li[data-branch]");if(i.length>0)for(let r of i){let a=r.dataset.branch||"",l=r.querySelector(":scope > ol"),d=l?this.#a(l):[];n.push({label:a,steps:d})}let o="";for(let r of e.childNodes)(r.nodeType===Node.TEXT_NODE||r.nodeType===Node.ELEMENT_NODE&&r.tagName!=="OL")&&(o+=r.textContent);return o=o.trim(),{type:s,text:o,annotation:t,branches:n}}#o(e,s){for(let t=0;t<e.length;t++){let n=e[t];t>0&&s.appendChild(this.#c());let i=this.#u(n);if(s.appendChild(i),n.branches.length>0){let o=document.createElement("div");o.className="fd-branches",o.setAttribute("data-branch-count",String(n.branches.length));let r=document.createElement("div");r.className="fd-split-line",r.setAttribute("aria-hidden","true"),o.appendChild(r);let a=document.createElement("div");a.className="fd-branch-columns";let l=(50/n.branches.length).toFixed(2);a.style.setProperty("--fd-inset",`${l}%`);for(let d of n.branches){let h=document.createElement("div");h.className="fd-branch",h.appendChild(this.#c());let u=document.createElement("span");u.className="fd-branch-label",u.textContent=d.label,u.setAttribute("data-branch",d.label.toLowerCase()),h.appendChild(u),this.#o(d.steps,h),a.appendChild(h)}o.appendChild(a),s.appendChild(o)}}}#u(e){this.#n++;let s=document.createElement("div");s.className="fd-node",s.dataset.type=e.type;let t=document.createElement("div");if(t.className="fd-node-shape",t.setAttribute("tabindex","0"),t.setAttribute("role","img"),t.setAttribute("aria-label",`${e.type}: ${e.text}`),t.textContent=e.text,s.appendChild(t),e.annotation){let n=document.createElement("div");n.className="fd-annotation",n.textContent=e.annotation,s.appendChild(n)}return s}#c(e){let s=document.createElement("div");s.className="fd-connector",s.setAttribute("aria-hidden","true");let t=document.createElement("div");if(t.className="fd-connector-line",s.appendChild(t),e){let i=document.createElement("span");i.className="fd-connector-label",i.textContent=e,s.appendChild(i)}let n=document.createElement("div");return n.className="fd-connector-arrow",s.appendChild(n),s}async _loadSrc(e){if(e)try{let s=await fetch(e);if(!s.ok)throw new Error(`HTTP ${s.status}`);let t=await s.json();for(;this.firstChild;)this.firstChild.remove();t.title&&this.setAttribute("title",t.title);let n=document.createElement("ol");this.#l(t.steps||[],n),this.appendChild(n),this.#r()}catch(s){console.warn(`[flow-diagram] Failed to load src="${e}":`,s)}}#l(e,s){for(let t of e){let n=document.createElement("li");if(t.type&&(n.dataset.type=t.type),t.annotation&&(n.dataset.annotation=t.annotation),n.textContent=t.text||"",t.branches&&t.branches.length>0){let i=document.createElement("ol");for(let o of t.branches){let r=document.createElement("li");r.dataset.branch=o.label||"";let a=document.createElement("ol");this.#l(o.steps||[],a),r.appendChild(a),i.appendChild(r)}n.appendChild(i)}s.appendChild(n)}}#m(e){this.#e&&(this.#e.textContent="",requestAnimationFrame(()=>{this.#e&&(this.#e.textContent=e)}))}};b("flow-diagram",f);export{f as FlowDiagram};
|
|
2
2
|
//# sourceMappingURL=flow-diagram.js.map
|
|
@@ -1,108 +1,108 @@
|
|
|
1
|
-
var
|
|
2
|
-
<p style="font-family:${
|
|
3
|
-
${
|
|
4
|
-
<h3 style="font-family:${
|
|
5
|
-
${
|
|
6
|
-
<p style="font-family:${
|
|
7
|
-
${
|
|
8
|
-
<pre style="font-family:${
|
|
9
|
-
<small style="font-family:${
|
|
10
|
-
${
|
|
11
|
-
<h2 style="font-family:${
|
|
12
|
-
${
|
|
13
|
-
<p style="font-family:${
|
|
14
|
-
${
|
|
15
|
-
<p style="font-family:${
|
|
16
|
-
<h3 style="font-family:${
|
|
17
|
-
${
|
|
18
|
-
<p style="font-family:${
|
|
19
|
-
<blockquote style="font-family:${
|
|
20
|
-
${
|
|
21
|
-
<pre style="font-family:${
|
|
22
|
-
<small style="font-family:${
|
|
23
|
-
<h1 style="font-family:${
|
|
24
|
-
<p style="font-family:${
|
|
25
|
-
<p style="font-family:${
|
|
26
|
-
<h2 style="font-family:${
|
|
27
|
-
<p style="font-family:${
|
|
28
|
-
<p style="font-family:${
|
|
29
|
-
<blockquote style="font-family:${
|
|
30
|
-
<h2 style="font-family:${
|
|
31
|
-
<p style="font-family:${
|
|
32
|
-
<pre style="font-family:${
|
|
33
|
-
<h3 style="font-family:${
|
|
34
|
-
<ul style="font-family:${
|
|
1
|
+
var W=window.matchMedia("(prefers-reduced-motion: reduce)");var S=new Map;function k(e,t,o={}){let i=o.priority??10,s={impl:t,bundle:o.bundle,contract:o.contract,priority:i},n=S.get(e);if(customElements.get(e)){if(!n||n.priority>=i){n&&n.priority===i&&n.impl!==t&&console.warn(`[VB Bundle] Tag <${e}> already registered by "${n.bundle}" (priority ${n.priority}). Skipping "${o.bundle}".`);return}console.warn(`[VB Bundle] Tag <${e}> defined by "${n.bundle}" cannot be replaced (customElements.define is permanent). "${o.bundle}" has higher priority but arrived late.`);return}if(n&&n.priority>=i){n.priority===i&&console.warn(`[VB Bundle] Tag <${e}> already registered by "${n.bundle}". Skipping "${o.bundle}" (first wins at equal priority).`);return}S.set(e,s),customElements.define(e,t)}var y=class extends HTMLElement{#e=[];#t;connectedCallback(){this.hasAttribute("data-upgraded")||this.setup()!==!1&&(this.setAttribute("data-upgraded",""),queueMicrotask(()=>{this.dispatchEvent(new CustomEvent(`${this.localName}:upgraded`,{bubbles:!0}))}))}disconnectedCallback(){for(let t of this.#e)t();this.#e=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(t,o,i,s){t.addEventListener(o,i,s),this.#e.push(()=>t.removeEventListener(o,i,s))}setup(){}teardown(){}setState(t,o){this.#t||(this.#t=this.attachInternals());let i=this.#t.states;try{o?i.add(t):i.delete(t)}catch{let s=`--${t}`;o?i.add(s):i.delete(s)}}_adoptInternals(t){this.#t||(this.#t=t)}};var b="[data-copy], [data-copy-target], [data-paste-target]",U="Copied to clipboard",j="Pasted from clipboard",g=new WeakMap;async function h(e,t={}){if(e==null||e==="")return!1;let{button:o,announceMessage:i=U,duration:s=1500}=t;try{await navigator.clipboard.writeText(e)}catch{return!1}return T({button:o,duration:s,announceMessage:i,eventDetail:{text:e}}),!0}function T({button:e,duration:t,announceMessage:o,eventDetail:i,state:s="copied",eventName:n="copy"}){if(e){e.dataset.state=s;let a=g.get(e);a&&clearTimeout(a),g.set(e,setTimeout(()=>{delete e.dataset.state,g.delete(e)},t)),e.dispatchEvent(new CustomEvent(n,{bubbles:!0,detail:i}))}R(o,e??document.body)}async function _(e,t={}){let{button:o,announceMessage:i=j,duration:s=1500}=t,n;try{n=await navigator.clipboard.readText()}catch{return null}return e&&("value"in e&&(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement)?e.value=n:e.textContent=n,e.dispatchEvent(new Event("input",{bubbles:!0}))),T({button:o,duration:s,announceMessage:i,eventDetail:{text:n},state:"pasted",eventName:"paste"}),n}function C(e=document){e.querySelectorAll(b).forEach(v)}function v(e){e.hasAttribute("data-copy-init")||(e.setAttribute("data-copy-init",""),e.addEventListener("click",()=>{if(e.dataset.pasteTarget){let o=document.querySelector(e.dataset.pasteTarget);if(!o)return;_(o,{button:e});return}let t=G(e);t&&h(t,{button:e})}))}function G(e){if(e.dataset.copy)return e.dataset.copy;if(e.dataset.copyTarget){let t=document.querySelector(e.dataset.copyTarget);if(!t)return"";let o=e.dataset.copyAttr;return o?t.getAttribute(o)??"":t.textContent??""}return""}function R(e,t){let o=document.createElement("div");o.setAttribute("role","status"),o.setAttribute("aria-live","polite"),o.className="visually-hidden",o.textContent=e,t.appendChild(o),setTimeout(()=>o.remove(),1e3)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>C()):C();var H=new MutationObserver(e=>{for(let t of e)for(let o of t.addedNodes){if(o.nodeType!==Node.ELEMENT_NODE)continue;let i=o;i.matches(b)&&v(i),i.querySelectorAll(b).forEach(s=>v(s))}});H.observe(document.documentElement,{childList:!0,subtree:!0});var m=[{name:"Playfair Display",category:"serif",weights:"400;600;700;900",style:"elegant"},{name:"Merriweather",category:"serif",weights:"300;400;700;900",style:"readable"},{name:"Lora",category:"serif",weights:"400;500;600;700",style:"elegant"},{name:"Source Serif 4",category:"serif",weights:"300;400;600;700",style:"neutral"},{name:"Libre Baskerville",category:"serif",weights:"400;700",style:"classic"},{name:"Crimson Text",category:"serif",weights:"400;600;700",style:"classic"},{name:"DM Serif Display",category:"serif",weights:"400",style:"bold"},{name:"Cormorant Garamond",category:"serif",weights:"300;400;500;600;700",style:"elegant"},{name:"Inter",category:"sans-serif",weights:"300;400;500;600;700",style:"neutral"},{name:"Open Sans",category:"sans-serif",weights:"300;400;600;700",style:"friendly"},{name:"Roboto",category:"sans-serif",weights:"300;400;500;700",style:"neutral"},{name:"Lato",category:"sans-serif",weights:"300;400;700;900",style:"warm"},{name:"Nunito",category:"sans-serif",weights:"300;400;600;700",style:"friendly"},{name:"Work Sans",category:"sans-serif",weights:"300;400;500;600;700",style:"geometric"},{name:"DM Sans",category:"sans-serif",weights:"400;500;700",style:"geometric"},{name:"Plus Jakarta Sans",category:"sans-serif",weights:"300;400;500;600;700",style:"modern"},{name:"Space Grotesk",category:"sans-serif",weights:"300;400;500;600;700",style:"technical"},{name:"Manrope",category:"sans-serif",weights:"300;400;500;600;700",style:"geometric"},{name:"IBM Plex Sans",category:"sans-serif",weights:"300;400;500;600",style:"technical"},{name:"Outfit",category:"sans-serif",weights:"300;400;500;600;700",style:"modern"},{name:"Bebas Neue",category:"display",weights:"400",style:"bold"},{name:"Abril Fatface",category:"display",weights:"400",style:"elegant"},{name:"Oswald",category:"display",weights:"300;400;500;600;700",style:"condensed"},{name:"Sora",category:"display",weights:"300;400;500;600;700",style:"modern"},{name:"Fraunces",category:"display",weights:"300;400;500;600;700;900",style:"elegant"},{name:"JetBrains Mono",category:"monospace",weights:"400;500;600;700",style:"technical"},{name:"Fira Code",category:"monospace",weights:"300;400;500;600;700",style:"technical"},{name:"IBM Plex Mono",category:"monospace",weights:"400;500;600",style:"technical"},{name:"Source Code Pro",category:"monospace",weights:"300;400;500;600;700",style:"neutral"}],A=[["Playfair Display","Inter"],["DM Serif Display","DM Sans"],["Fraunces","Plus Jakarta Sans"],["Lora","Open Sans"],["Merriweather","Roboto"],["Oswald","Lato"],["Cormorant Garamond","Work Sans"],["Sora","Inter"],["Abril Fatface","Nunito"],["Source Serif 4","Source Code Pro"],["Space Grotesk","IBM Plex Sans"],["Outfit","Manrope"]];function $(e,t="400;700"){return`https://fonts.googleapis.com/css2?family=${e.replace(/\s+/g,"+")}:wght@${t}&display=swap`}async function M(e,t="400;700"){let o=`gf-${e.replace(/\s+/g,"-").toLowerCase()}`;if(document.getElementById(o)){await document.fonts.ready;return}let i=document.createElement("link");i.id=o,i.rel="stylesheet",i.href=$(e,t),document.head.appendChild(i),await document.fonts.ready}var r=(e,t,o,i="")=>`${i} contenteditable="plaintext-only" spellcheck="false" class="fp-editable" data-role="${o}"`,w={combined:{label:"Combined",render:(e,t)=>`
|
|
2
|
+
<p style="font-family:${e.display};font-size:var(--font-size-3xl,2rem);font-weight:800;margin:0;line-height:1.15"
|
|
3
|
+
${r(e.display,"p","heading")}>${t.heading}</p>
|
|
4
|
+
<h3 style="font-family:${e.heading};font-size:var(--font-size-lg,1.125rem);font-weight:600;margin:0"
|
|
5
|
+
${r(e.heading,"h3","subheading")}>${t.subheading}</h3>
|
|
6
|
+
<p style="font-family:${e.body};font-size:var(--font-size-md,1rem);line-height:1.65;margin:0;color:var(--color-text-muted,#666)"
|
|
7
|
+
${r(e.body,"p","body")}>${t.body}</p>
|
|
8
|
+
<pre style="font-family:${e.code};font-size:var(--font-size-sm,0.875rem);line-height:1.5;margin:0;padding:var(--size-s,0.75rem);background:var(--color-surface-sunken,#eee);border-radius:var(--radius-s,0.25rem);overflow-x:auto"><code ${r(e.code,"code","code")}>${t.code}</code></pre>`},article:{label:"Article",render:(e,t)=>`
|
|
9
|
+
<small style="font-family:${e.body};font-size:var(--font-size-xs,0.75rem);text-transform:uppercase;letter-spacing:0.08em;color:var(--color-interactive,oklch(55% .2 260));font-weight:600"
|
|
10
|
+
${r(e.body,"small","eyebrow")}>${t.eyebrow}</small>
|
|
11
|
+
<h2 style="font-family:${e.heading};font-size:var(--font-size-2xl,1.75rem);font-weight:700;margin:0;line-height:1.2"
|
|
12
|
+
${r(e.heading,"h2","heading")}>${t.heading}</h2>
|
|
13
|
+
<p style="font-family:${e.body};font-size:var(--font-size-sm,0.875rem);color:var(--color-text-muted,#666);margin:0"
|
|
14
|
+
${r(e.body,"p","byline")}>${t.byline}</p>
|
|
15
|
+
<p style="font-family:${e.body};line-height:1.7;margin:0" ${r(e.body,"p","body")}>${t.body}</p>
|
|
16
|
+
<h3 style="font-family:${e.heading};font-size:var(--font-size-lg,1.125rem);font-weight:600;margin:0"
|
|
17
|
+
${r(e.heading,"h3","subheading")}>${t.subheading}</h3>
|
|
18
|
+
<p style="font-family:${e.body};line-height:1.7;margin:0" ${r(e.body,"p","body2")}>${t.body2}</p>
|
|
19
|
+
<blockquote style="font-family:${e.display};font-style:italic;font-size:var(--font-size-lg,1.125rem);border-inline-start:3px solid var(--color-interactive,oklch(55% .2 260));padding-inline-start:var(--size-m,1rem);margin:0;color:var(--color-text-muted,#666)"
|
|
20
|
+
${r(e.display,"blockquote","quote")}>${t.quote}</blockquote>
|
|
21
|
+
<pre style="font-family:${e.code};font-size:var(--font-size-sm,0.875rem);line-height:1.5;margin:0;padding:var(--size-s,0.75rem);background:var(--color-surface-sunken,#eee);border-radius:var(--radius-s,0.25rem);overflow-x:auto"><code ${r(e.code,"code","code")}>${t.code}</code></pre>`},"long-article":{label:"Long Article",render:(e,t)=>`
|
|
22
|
+
<small style="font-family:${e.body};font-size:var(--font-size-xs,0.75rem);text-transform:uppercase;letter-spacing:0.08em;color:var(--color-interactive,oklch(55% .2 260));font-weight:600">${t.eyebrow}</small>
|
|
23
|
+
<h1 style="font-family:${e.display};font-size:var(--font-size-3xl,2rem);font-weight:800;margin:0;line-height:1.15">${t.heading}</h1>
|
|
24
|
+
<p style="font-family:${e.body};font-size:var(--font-size-sm,0.875rem);color:var(--color-text-muted,#666);margin:0">${t.byline}</p>
|
|
25
|
+
<p style="font-family:${e.body};font-size:var(--font-size-lg,1.125rem);line-height:1.6;margin:0;color:var(--color-text-muted,#666)">${t.lead}</p>
|
|
26
|
+
<h2 style="font-family:${e.heading};font-size:var(--font-size-xl,1.375rem);font-weight:700;margin:0">${t.subheading}</h2>
|
|
27
|
+
<p style="font-family:${e.body};line-height:1.7;margin:0">${t.body}</p>
|
|
28
|
+
<p style="font-family:${e.body};line-height:1.7;margin:0">${t.body2}</p>
|
|
29
|
+
<blockquote style="font-family:${e.display};font-style:italic;font-size:var(--font-size-lg,1.125rem);border-inline-start:3px solid var(--color-interactive,oklch(55% .2 260));padding-inline-start:var(--size-m,1rem);margin:0;color:var(--color-text-muted,#666)">${t.quote}</blockquote>
|
|
30
|
+
<h2 style="font-family:${e.heading};font-size:var(--font-size-xl,1.375rem);font-weight:700;margin:0">Implementation Details</h2>
|
|
31
|
+
<p style="font-family:${e.body};line-height:1.7;margin:0">Design tokens form the atomic layer of any visual system. Colors, spacing, typography, and motion are expressed as named variables that cascade through every component. When a token changes, every surface that references it updates automatically \u2014 no find-and-replace, no missed instances.</p>
|
|
32
|
+
<pre style="font-family:${e.code};font-size:var(--font-size-sm,0.875rem);line-height:1.5;margin:0;padding:var(--size-s,0.75rem);background:var(--color-surface-sunken,#eee);border-radius:var(--radius-s,0.25rem);overflow-x:auto"><code>${t.code}</code></pre>
|
|
33
|
+
<h3 style="font-family:${e.heading};font-size:var(--font-size-lg,1.125rem);font-weight:600;margin:0">Key Takeaways</h3>
|
|
34
|
+
<ul style="font-family:${e.body};line-height:1.7;margin:0;padding-inline-start:1.5rem">
|
|
35
35
|
<li>Typography sets the emotional tone before a single word is read</li>
|
|
36
36
|
<li>Pair contrast with harmony \u2014 serif headings with sans-serif body</li>
|
|
37
37
|
<li>Test at real content lengths, not just sample sentences</li>
|
|
38
38
|
<li>Code fonts need clear distinction between similar glyphs</li>
|
|
39
|
-
</ul>`},card:{label:"Card UI",render:(t
|
|
39
|
+
</ul>`},card:{label:"Card UI",render:(e,t)=>`
|
|
40
40
|
<div style="display:grid;grid-template-columns:1fr 1fr;gap:var(--size-m,1rem)">
|
|
41
41
|
<div style="border:1px solid var(--color-border,#ddd);border-radius:var(--radius-m,0.5rem);padding:var(--size-m,1rem);display:flex;flex-direction:column;gap:var(--size-xs,0.5rem)">
|
|
42
|
-
<h4 style="font-family:${
|
|
43
|
-
<p style="font-family:${
|
|
44
|
-
<p style="font-family:${
|
|
45
|
-
<code style="font-family:${
|
|
42
|
+
<h4 style="font-family:${e.heading};font-weight:600;margin:0" ${r(e.heading,"h4","cardTitle")}>Premium Plan</h4>
|
|
43
|
+
<p style="font-family:${e.display};font-size:var(--font-size-2xl,1.75rem);font-weight:700;margin:0">$49<small style="font-size:0.5em;font-weight:400">/mo</small></p>
|
|
44
|
+
<p style="font-family:${e.body};font-size:var(--font-size-sm,0.875rem);color:var(--color-text-muted,#666);margin:0" ${r(e.body,"p","cardBody")}>Everything you need to build faster.</p>
|
|
45
|
+
<code style="font-family:${e.code};font-size:var(--font-size-xs,0.75rem);background:var(--color-surface-sunken,#eee);padding:0.2rem 0.4rem;border-radius:0.25rem" ${r(e.code,"code","cardCode")}>npm install acme</code>
|
|
46
46
|
</div>
|
|
47
47
|
<div style="border:1px solid var(--color-border,#ddd);border-radius:var(--radius-m,0.5rem);padding:var(--size-m,1rem);display:flex;flex-direction:column;gap:var(--size-xs,0.5rem)">
|
|
48
|
-
<h4 style="font-family:${
|
|
49
|
-
<p style="font-family:${
|
|
50
|
-
<p style="font-family:${
|
|
51
|
-
<code style="font-family:${
|
|
48
|
+
<h4 style="font-family:${e.heading};font-weight:600;margin:0">Enterprise</h4>
|
|
49
|
+
<p style="font-family:${e.display};font-size:var(--font-size-2xl,1.75rem);font-weight:700;margin:0">Custom</p>
|
|
50
|
+
<p style="font-family:${e.body};font-size:var(--font-size-sm,0.875rem);color:var(--color-text-muted,#666);margin:0">Dedicated support and SLA guarantees.</p>
|
|
51
|
+
<code style="font-family:${e.code};font-size:var(--font-size-xs,0.75rem);background:var(--color-surface-sunken,#eee);padding:0.2rem 0.4rem;border-radius:0.25rem">contact@acme.dev</code>
|
|
52
52
|
</div>
|
|
53
|
-
</div>`},hero:{label:"Hero",render:(t
|
|
53
|
+
</div>`},hero:{label:"Hero",render:(e,t)=>`
|
|
54
54
|
<div style="text-align:center;padding:var(--size-xl,2rem) 0">
|
|
55
|
-
<p style="font-family:${
|
|
56
|
-
${
|
|
57
|
-
<h1 style="font-family:${
|
|
58
|
-
${
|
|
59
|
-
<p style="font-family:${
|
|
60
|
-
${
|
|
61
|
-
</div>`}},
|
|
55
|
+
<p style="font-family:${e.body};font-size:var(--font-size-xs,0.75rem);text-transform:uppercase;letter-spacing:0.1em;color:var(--color-interactive,oklch(55% .2 260));font-weight:600;margin:0 0 var(--size-xs,0.5rem)"
|
|
56
|
+
${r(e.body,"p","eyebrow")}>${t.eyebrow}</p>
|
|
57
|
+
<h1 style="font-family:${e.display};font-size:clamp(2rem,5vw,3rem);font-weight:800;margin:0;line-height:1.1"
|
|
58
|
+
${r(e.display,"h1","heading")}>${t.heading}</h1>
|
|
59
|
+
<p style="font-family:${e.body};font-size:var(--font-size-lg,1.125rem);color:var(--color-text-muted,#666);margin:var(--size-s,0.75rem) auto 0;max-width:40ch"
|
|
60
|
+
${r(e.body,"p","body")}>${t.body}</p>
|
|
61
|
+
</div>`}},x=class extends y{static observedAttributes=["heading-font","body-font","code-font","display-font","sample","show-export","show-suggestions","preview"];#e={heading:"",body:"",code:"",display:""};#t="combined";#i={heading:"The Art of Typography",subheading:"Building visual harmony through font pairing",body:"Good typography is invisible \u2014 it lets the content speak without distraction. The best font pairings create harmony between heading impact and body readability. Every typeface carries personality: serif fonts convey trust and tradition, while sans-serif fonts feel modern and clean.",body2:"Choosing the right pairing is about contrast and complement. A bold display font for headlines needs a quiet, readable body font to balance it. Monospace fonts ground technical content in precision. The interplay between these roles defines your brand voice.",code:`const theme = {
|
|
62
62
|
heading: "Playfair Display",
|
|
63
63
|
body: "Inter",
|
|
64
64
|
tokens: { size: 16, scale: 1.25 }
|
|
65
|
-
};`,eyebrow:"Design Systems",byline:"By Jamie Chen \xB7 April 14, 2026 \xB7 8 min read",lead:"How native CSS features and design tokens are replacing the complex tooling we thought we needed.",quote:'"Good typography is invisible \u2014 it lets the content breathe."'};setup(){this.#e.heading=this.getAttribute("heading-font")||"Playfair Display",this.#e.body=this.getAttribute("body-font")||"Inter",this.#e.code=this.getAttribute("code-font")||"JetBrains Mono",this.#e.display=this.getAttribute("display-font")||this.#e.heading,this.#t=this.getAttribute("preview")||"combined",this.#
|
|
66
|
-
<label style="display:flex;flex-direction:column;gap:3px;flex:1;min-width:9rem;font-size:${l};font-weight:600;color:${
|
|
65
|
+
};`,eyebrow:"Design Systems",byline:"By Jamie Chen \xB7 April 14, 2026 \xB7 8 min read",lead:"How native CSS features and design tokens are replacing the complex tooling we thought we needed.",quote:'"Good typography is invisible \u2014 it lets the content breathe."'};setup(){this.#e.heading=this.getAttribute("heading-font")||"Playfair Display",this.#e.body=this.getAttribute("body-font")||"Inter",this.#e.code=this.getAttribute("code-font")||"JetBrains Mono",this.#e.display=this.getAttribute("display-font")||this.#e.heading,this.#t=this.getAttribute("preview")||"combined",this.#n(),this.#o()}attributeChangedCallback(t,o,i){o===i||!this.isConnected||(t==="heading-font"&&(this.#e.heading=i||"Playfair Display"),t==="body-font"&&(this.#e.body=i||"Inter"),t==="code-font"&&(this.#e.code=i||"JetBrains Mono"),t==="display-font"&&(this.#e.display=i||this.#e.heading),t==="preview"&&(this.#t=i||"combined"),this.#n(),this.#o())}async#o(){let t=Object.values(this.#e).filter(Boolean).map(o=>{let i=m.find(s=>s.name===o);return M(o,i?.weights||"400;700")});await Promise.all(t),this.#p()}#n(){let t=this.hasAttribute("show-export"),o=this.hasAttribute("show-suggestions"),i="var(--size-m, 1rem)",s="var(--size-s, 0.75rem)",n="var(--size-xs, 0.5rem)",a="var(--radius-m, 0.5rem)",c="var(--color-border, #ddd)",u="var(--color-surface, #fff)",z="var(--color-surface-raised, #f5f5f5)",f="var(--color-text-muted, #666)",N="var(--font-size-sm, 0.875rem)",l="var(--font-size-xs, 0.75rem)",D=`font:inherit;font-size:${N};padding:0.35rem 0.5rem;border:1px solid ${c};border-radius:4px;background:${u}`,L=[{key:"heading",label:"Heading"},{key:"body",label:"Body"},{key:"code",label:"Code"},{key:"display",label:"Display"}].map(d=>`
|
|
66
|
+
<label style="display:flex;flex-direction:column;gap:3px;flex:1;min-width:9rem;font-size:${l};font-weight:600;color:${f};text-transform:uppercase;letter-spacing:0.04em">
|
|
67
67
|
${d.label}
|
|
68
|
-
<select class="fp-select" data-role="${d.key}" style="${
|
|
69
|
-
${this.#
|
|
68
|
+
<select class="fp-select" data-role="${d.key}" style="${D}">
|
|
69
|
+
${this.#d(this.#e[d.key])}
|
|
70
70
|
</select>
|
|
71
71
|
</label>
|
|
72
|
-
`).join(""),
|
|
73
|
-
style="all:unset;cursor:pointer;font-size:${l};padding:0.3rem 0.75rem;border-radius:999px;${d===this.#t?"background:var(--color-interactive,oklch(55% .2 260));color:white":`border:1px solid ${c}`}">${
|
|
72
|
+
`).join(""),O=Object.entries(w).map(([d,{label:p}])=>`<button type="button" class="fp-tab" data-mode="${d}"
|
|
73
|
+
style="all:unset;cursor:pointer;font-size:${l};padding:0.3rem 0.75rem;border-radius:999px;${d===this.#t?"background:var(--color-interactive,oklch(55% .2 260));color:white":`border:1px solid ${c}`}">${p}</button>`).join(""),I={heading:`'${this.#e.heading}', serif`,body:`'${this.#e.body}', sans-serif`,code:`'${this.#e.code}', monospace`,display:`'${this.#e.display}', serif`},q=w[this.#t]?.render(I,this.#i)||"",P=A.map(([d,p])=>`<button type="button" class="fp-suggestion" data-h="${d}" data-b="${p}"
|
|
74
74
|
style="all:unset;cursor:pointer;font-size:${l};padding:0.3rem 0.5rem;border:1px solid ${c};border-radius:4px;white-space:nowrap;text-align:left;line-height:1.3"
|
|
75
|
-
title="${d} + ${
|
|
76
|
-
<summary style="padding:${
|
|
77
|
-
<div style="padding:${
|
|
78
|
-
<pre style="font-family:var(--font-mono,monospace);font-size:${l};margin:0;white-space:pre-wrap;word-break:break-all" class="fp-css-output">${
|
|
79
|
-
<div style="display:flex;gap:${
|
|
75
|
+
title="${d} + ${p}"><strong>${d}</strong><br><span style="color:${f}">${p}</span></button>`).join(""),B=this.#s(),F=`<details class="fp-code-details" style="border:1px solid ${c};border-radius:${a};overflow:hidden"${t?" open":""}>
|
|
76
|
+
<summary style="padding:${n} ${s};cursor:pointer;font-size:${l};font-weight:600;color:${f};text-transform:uppercase;letter-spacing:0.04em;background:${z}">Code</summary>
|
|
77
|
+
<div style="padding:${s}">
|
|
78
|
+
<pre style="font-family:var(--font-mono,monospace);font-size:${l};margin:0;white-space:pre-wrap;word-break:break-all" class="fp-css-output">${B}</pre>
|
|
79
|
+
<div style="display:flex;gap:${n};margin-block-start:${s}">
|
|
80
80
|
<button type="button" class="fp-copy-css"
|
|
81
|
-
style="all:unset;cursor:pointer;font-size:${l};padding:0.3rem 0.65rem;border:1px solid ${c};border-radius:4px;background:${
|
|
81
|
+
style="all:unset;cursor:pointer;font-size:${l};padding:0.3rem 0.65rem;border:1px solid ${c};border-radius:4px;background:${u}">Copy CSS</button>
|
|
82
82
|
<button type="button" class="fp-copy-import"
|
|
83
|
-
style="all:unset;cursor:pointer;font-size:${l};padding:0.3rem 0.65rem;border:1px solid ${c};border-radius:4px;background:${
|
|
83
|
+
style="all:unset;cursor:pointer;font-size:${l};padding:0.3rem 0.65rem;border:1px solid ${c};border-radius:4px;background:${u}">Copy @import</button>
|
|
84
84
|
</div>
|
|
85
85
|
</div>
|
|
86
|
-
</details>`,
|
|
87
|
-
<div style="display:flex;flex-wrap:wrap;gap:${
|
|
86
|
+
</details>`,E=`<div style="display:flex;flex-direction:column;gap:${i};flex:1;min-width:0">
|
|
87
|
+
<div style="display:flex;flex-wrap:wrap;gap:${n}">${L}</div>
|
|
88
88
|
<div style="display:flex;flex-wrap:wrap;gap:0.375rem;align-items:center">
|
|
89
|
-
<span style="font-size:${l};font-weight:600;color:${
|
|
90
|
-
${
|
|
89
|
+
<span style="font-size:${l};font-weight:600;color:${f};text-transform:uppercase;letter-spacing:0.04em;margin-inline-end:${n}">Examples</span>
|
|
90
|
+
${O}
|
|
91
91
|
</div>
|
|
92
|
-
<div style="display:flex;flex-direction:column;gap:${
|
|
93
|
-
<span style="font-size:${l};font-weight:600;color:${
|
|
94
|
-
<div class="fp-preview" style="padding:var(--size-l,1.5rem);background:${
|
|
95
|
-
${
|
|
92
|
+
<div style="display:flex;flex-direction:column;gap:${n}">
|
|
93
|
+
<span style="font-size:${l};font-weight:600;color:${f};text-transform:uppercase;letter-spacing:0.04em">Preview</span>
|
|
94
|
+
<div class="fp-preview" style="padding:var(--size-l,1.5rem);background:${z};border-radius:${a};border:1px solid ${c};display:flex;flex-direction:column;gap:${s};max-height:24rem;overflow-y:auto">
|
|
95
|
+
${q}
|
|
96
96
|
</div>
|
|
97
97
|
</div>
|
|
98
|
-
${
|
|
99
|
-
</div>`;
|
|
100
|
-
${
|
|
101
|
-
<aside style="flex:0 0 11rem;display:flex;flex-direction:column;gap:${
|
|
102
|
-
<span style="font-size:${l};font-weight:600;color:${
|
|
103
|
-
<div style="display:flex;flex-direction:column;gap:0.25rem">${
|
|
98
|
+
${F}
|
|
99
|
+
</div>`;o?this.innerHTML=`<div style="display:flex;gap:${i};flex-wrap:wrap">
|
|
100
|
+
${E}
|
|
101
|
+
<aside style="flex:0 0 11rem;display:flex;flex-direction:column;gap:${n}">
|
|
102
|
+
<span style="font-size:${l};font-weight:600;color:${f};text-transform:uppercase;letter-spacing:0.04em">Pairings</span>
|
|
103
|
+
<div style="display:flex;flex-direction:column;gap:0.25rem">${P}</div>
|
|
104
104
|
</aside>
|
|
105
|
-
</div>`:this.innerHTML=
|
|
106
|
-
`)}#
|
|
107
|
-
`)}#
|
|
105
|
+
</div>`:this.innerHTML=E,this.#f()}#d(t){return["serif","sans-serif","display","monospace"].map(i=>{let n=m.filter(a=>a.category===i).map(a=>`<option value="${a.name}"${a.name===t?" selected":""}>${a.name}</option>`).join("");return`<optgroup label="${i}">${n}</optgroup>`}).join("")}#s(){let t=[],o={heading:"serif",body:"sans-serif",code:"monospace",display:"serif"};for(let[i,s]of Object.entries(o)){let n=this.#e[i];if(!n)continue;let a=m.find(c=>c.name===n);t.push(`--font-${i}: "${n}", ${a?.category||s};`)}return t.join(`
|
|
106
|
+
`)}#c(){let t=new Set,o=[];for(let i of Object.values(this.#e)){if(!i||t.has(i))continue;t.add(i);let s=m.find(n=>n.name===i);o.push(`@import url('${$(i,s?.weights||"400;700")}');`)}return o.join(`
|
|
107
|
+
`)}#f(){this.querySelectorAll(".fp-select").forEach(t=>{t.addEventListener("change",o=>{let i=o.target;this.#e[i.dataset.role]=i.value,this.#o(),this.#r(),this.#a(),this.#l()})}),this.querySelectorAll(".fp-tab").forEach(t=>{t.addEventListener("click",()=>{let o=t;this.#t=o.dataset.mode||"combined",this.#n(),this.#o()})}),this.querySelectorAll(".fp-suggestion").forEach(t=>{t.addEventListener("click",()=>{let o=t;this.#e.heading=o.dataset.h||"",this.#e.body=o.dataset.b||"",this.#e.display=o.dataset.h||"",this.#n(),this.#o(),this.#l()})}),this.querySelectorAll(".fp-editable").forEach(t=>{let o=t;o.addEventListener("blur",()=>{let i=o.dataset.role;i&&o.textContent.trim()&&(this.#i[i]=o.textContent.trim())})}),this.querySelector(".fp-copy-css")?.addEventListener("click",t=>{h(this.#s(),{button:t.target,announceMessage:"CSS copied"})}),this.querySelector(".fp-copy-import")?.addEventListener("click",t=>{h(this.#c(),{button:t.target,announceMessage:"@import statement copied"})})}#r(){let t=this.querySelector(".fp-preview");if(!t)return;let o={heading:`'${this.#e.heading}', serif`,body:`'${this.#e.body}', sans-serif`,code:`'${this.#e.code}', monospace`,display:`'${this.#e.display}', serif`};t.innerHTML=w[this.#t]?.render(o,this.#i)||"",t.querySelectorAll(".fp-editable").forEach(i=>{let s=i;s.addEventListener("blur",()=>{let n=s.dataset.role;n&&s.textContent.trim()&&(this.#i[n]=s.textContent.trim())})})}#p(){this.#r(),this.#a()}#a(){let t=this.querySelector(".fp-css-output");t&&(t.textContent=this.#s())}#l(){this.dispatchEvent(new CustomEvent("font-pairer:change",{bubbles:!0,detail:{...this.#e}}))}};k("font-pairer",x);export{x as FontPairer};
|
|
108
108
|
//# sourceMappingURL=font-pairer.js.map
|