@jelinek/ui 0.9.0 → 0.9.2
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 -10
- package/dist/components/ChapterNav.svelte +1 -1
- package/dist/components/Checkbox.svelte +13 -15
- package/dist/components/Checkbox.svelte.d.ts +1 -0
- package/dist/components/ContentLogo.svelte +18 -13
- package/dist/components/ContentLogo.svelte.d.ts +6 -5
- package/dist/components/Grid.svelte +9 -5
- package/dist/components/Icon.svelte +52 -0
- package/dist/components/Icon.svelte.d.ts +30 -0
- package/dist/components/InfoBar.svelte +254 -0
- package/dist/components/InfoBar.svelte.d.ts +46 -0
- package/dist/components/Label.svelte +12 -1
- package/dist/components/Label.svelte.d.ts +8 -0
- package/dist/components/PageHero.svelte +12 -9
- package/dist/components/Pager.svelte +5 -2
- package/dist/components/PhotoTile.svelte +4 -2
- package/dist/components/ProductCard.svelte +66 -44
- package/dist/components/ProductCard.svelte.d.ts +17 -4
- package/dist/components/Radio.svelte +12 -8
- package/dist/components/Radio.svelte.d.ts +1 -0
- package/dist/components/Select.svelte +70 -12
- package/dist/components/Select.svelte.d.ts +11 -0
- package/dist/components/SiteFooter.svelte +19 -0
- package/dist/components/SiteFooter.svelte.d.ts +8 -0
- package/dist/components/SiteHeader.svelte +70 -9
- package/dist/components/SiteHeader.svelte.d.ts +16 -0
- package/dist/components/Slider.svelte +6 -11
- package/dist/components/Switch.svelte +76 -0
- package/dist/components/Switch.svelte.d.ts +12 -0
- package/dist/components/Tab.svelte +29 -1
- package/dist/components/TextField.svelte +61 -10
- package/dist/components/TextField.svelte.d.ts +13 -0
- package/dist/components/Textarea.svelte +92 -0
- package/dist/components/Textarea.svelte.d.ts +23 -0
- package/dist/components/Tile.svelte +12 -11
- package/dist/components/Tile.svelte.d.ts +8 -2
- package/dist/components/blocks/CmsButton.svelte +36 -0
- package/dist/components/blocks/CmsButton.svelte.d.ts +12 -0
- package/dist/components/blocks/CmsColumns.svelte +20 -0
- package/dist/components/blocks/CmsColumns.svelte.d.ts +9 -0
- package/dist/components/blocks/CmsCover.svelte +71 -0
- package/dist/components/blocks/CmsCover.svelte.d.ts +17 -0
- package/dist/components/blocks/CmsHeading.svelte +50 -0
- package/dist/components/blocks/CmsHeading.svelte.d.ts +14 -0
- package/dist/components/blocks/CmsImage.svelte +43 -0
- package/dist/components/blocks/CmsImage.svelte.d.ts +13 -0
- package/dist/components/blocks/CmsMediaText.svelte +64 -0
- package/dist/components/blocks/CmsMediaText.svelte.d.ts +16 -0
- package/dist/components/blocks/CmsText.svelte +53 -0
- package/dist/components/blocks/CmsText.svelte.d.ts +10 -0
- package/dist/components/commerce/Breadcrumbs.svelte +22 -5
- package/dist/components/commerce/CartDrawer.svelte +7 -4
- package/dist/components/commerce/CartLineItem.svelte +1 -1
- package/dist/components/commerce/CheckoutProgress.svelte +1 -1
- package/dist/components/commerce/ConfigSection.svelte +2 -2
- package/dist/components/commerce/DimensionSlider.svelte +1 -1
- package/dist/components/commerce/Drawer.svelte +38 -24
- package/dist/components/commerce/Drawer.svelte.d.ts +0 -2
- package/dist/components/commerce/EmptyState.svelte +37 -0
- package/dist/components/commerce/EmptyState.svelte.d.ts +13 -0
- package/dist/components/commerce/FilterChip.svelte +35 -0
- package/dist/components/commerce/FilterChip.svelte.d.ts +10 -0
- package/dist/components/commerce/FreeShippingBar.svelte +1 -1
- package/dist/components/commerce/Gallery.svelte +4 -2
- package/dist/components/commerce/ListingToolbar.svelte +62 -0
- package/dist/components/commerce/ListingToolbar.svelte.d.ts +19 -0
- package/dist/components/commerce/Modal.svelte +31 -21
- package/dist/components/commerce/Modal.svelte.d.ts +0 -2
- package/dist/components/commerce/OrderSummary.svelte +1 -1
- package/dist/components/commerce/Pagination.svelte +115 -0
- package/dist/components/commerce/Pagination.svelte.d.ts +14 -0
- package/dist/components/commerce/PriceDisplay.svelte +3 -3
- package/dist/components/commerce/ProductHeader.svelte +2 -2
- package/dist/components/commerce/QuantityStepper.svelte +1 -1
- package/dist/components/commerce/RatingStars.svelte +1 -1
- package/dist/components/commerce/SearchField.svelte +92 -0
- package/dist/components/commerce/SearchField.svelte.d.ts +15 -0
- package/dist/components/commerce/SideToggle.svelte +1 -1
- package/dist/components/commerce/Skeleton.svelte +4 -1
- package/dist/components/commerce/StickyBar.svelte +4 -4
- package/dist/components/commerce/StockBadge.svelte +2 -2
- package/dist/components/commerce/Toaster.svelte +9 -5
- package/dist/components/commerce/TrustBadges.svelte +1 -1
- package/dist/components/commerce/overlay.d.ts +14 -0
- package/dist/components/commerce/overlay.js +49 -0
- package/dist/components/info-bar.d.ts +26 -0
- package/dist/components/info-bar.js +23 -0
- package/dist/icons/material-icons.generated.d.ts +4 -0
- package/dist/icons/material-icons.generated.js +118 -0
- package/dist/icons/material.d.ts +17 -0
- package/dist/icons/material.js +52 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +17 -0
- package/dist/theme/base.css +22 -0
- package/dist/theme/extras.css +62 -0
- package/dist/theme/fonts.css +9 -42
- package/dist/theme/tokens.css +23 -9
- package/package.json +4 -2
package/dist/theme/base.css
CHANGED
|
@@ -253,6 +253,25 @@
|
|
|
253
253
|
color var(--dur-slow) var(--ease);
|
|
254
254
|
}
|
|
255
255
|
|
|
256
|
+
/* KURZÍVA SE NEPOUŽÍVÁ NIKDY (brand → Typografie; majitel 14. 8. 2026) —
|
|
257
|
+
žádné písmo značky nemá skloněný řez a prohlížeč by si ho syntetizoval.
|
|
258
|
+
<em>/<i> se narovnává a zvýrazňuje tučně („ke zvýraznění slouží tučné
|
|
259
|
+
řezy“). Mirrors the identical rule in jelinek.css. */
|
|
260
|
+
em,
|
|
261
|
+
i {
|
|
262
|
+
font-style: normal;
|
|
263
|
+
font-weight: 700;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/* <strong> pinned to Bold: the default `bolder` is RELATIVE — one step
|
|
267
|
+
up from Light (300) is Regular (400), a face outside the role system.
|
|
268
|
+
Contexts with their own rule (.card strong = Medium, Demo's
|
|
269
|
+
[&_strong]:font-medium utility) still win on specificity/layer. */
|
|
270
|
+
b,
|
|
271
|
+
strong {
|
|
272
|
+
font-weight: 700;
|
|
273
|
+
}
|
|
274
|
+
|
|
256
275
|
/* jelinek.css:316. The one flex child that should actually grow — header,
|
|
257
276
|
chapter-nav and footer keep their natural (content) height; whatever
|
|
258
277
|
space is left over goes to <main>, pushing the footer down to the
|
|
@@ -372,6 +391,9 @@
|
|
|
372
391
|
}
|
|
373
392
|
.serif {
|
|
374
393
|
font-family: var(--font-serif);
|
|
394
|
+
/* Archer only has Book (400) and Bold — a surrounding Light must not
|
|
395
|
+
be inherited into serif text. */
|
|
396
|
+
font-weight: 400;
|
|
375
397
|
}
|
|
376
398
|
.small {
|
|
377
399
|
font-size: var(--step-down1);
|
package/dist/theme/extras.css
CHANGED
|
@@ -19,3 +19,65 @@
|
|
|
19
19
|
[data-division='mattress'] {
|
|
20
20
|
--color-accent-text: var(--color-accent-text-mattress);
|
|
21
21
|
}
|
|
22
|
+
|
|
23
|
+
/* Jelen je jen hnědý, nebo bílý (brand → Znak, Užití s produktovými
|
|
24
|
+
barvami): divizní přetéma přemapovává --JELINEK-BROWN na magentu, ale pro
|
|
25
|
+
jelena je to zakázaný stav — pod divizí Zdravý spánek přechází KAŽDÉ
|
|
26
|
+
obsahové logo na bílou, divizní barvu jelena. Zrcadlí stejné pravidlo
|
|
27
|
+
v jelinek.css u .content-logo. */
|
|
28
|
+
[data-division='mattress'] [data-content-logo],
|
|
29
|
+
[data-theme='mattress'] [data-content-logo] {
|
|
30
|
+
color: var(--color-fg-inverse);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/* Skeleton shimmer (majitel, 14. 8. 2026): placeholder při načítání nese
|
|
34
|
+
projíždějící světlý gradient, jak je dnes zvykem — ne jen pulz. Barvy
|
|
35
|
+
jsou tokeny (klidová --bg-gray, projíždějící světlo --bg-white), takže
|
|
36
|
+
se v tmavém režimu překlopí samy. Smyčka 1,5 s je vlastní hodnota:
|
|
37
|
+
pohybové tokeny (--dur-*) popisují přechody stavů, ne nekonečné smyčky.
|
|
38
|
+
Kdo si v systému vypnul animace, dostane klidnou plochu — první kousek
|
|
39
|
+
prefers-reduced-motion v kitu (zásobník: Ohled na omezení pohybu). */
|
|
40
|
+
@keyframes skeleton-shimmer {
|
|
41
|
+
to {
|
|
42
|
+
transform: translateX(100%);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
.skeleton-shimmer {
|
|
46
|
+
position: relative;
|
|
47
|
+
overflow: hidden;
|
|
48
|
+
background: var(--color-surface-gray);
|
|
49
|
+
}
|
|
50
|
+
/* Světelný pás jede přes celou plochu jako vrstva nad ní (transform, ne
|
|
51
|
+
background-position) — na malém řádku i velké fotce je pohyb stejně
|
|
52
|
+
viditelný a nemá hluchá místa. */
|
|
53
|
+
.skeleton-shimmer::after {
|
|
54
|
+
content: '';
|
|
55
|
+
position: absolute;
|
|
56
|
+
inset: 0;
|
|
57
|
+
transform: translateX(-100%);
|
|
58
|
+
background: linear-gradient(90deg, transparent, var(--color-surface) 55%, transparent);
|
|
59
|
+
animation: skeleton-shimmer 1.5s ease-in-out infinite;
|
|
60
|
+
}
|
|
61
|
+
@media (prefers-reduced-motion: reduce) {
|
|
62
|
+
.skeleton-shimmer::after {
|
|
63
|
+
content: none;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* Ikona rozhraní (Google icons jako inline SVG — majitel, 28. 8. 2026,
|
|
68
|
+
pravidla /ui/ikony): obal, který dává ikoně rozměr a posazení na účaří.
|
|
69
|
+
V kitu ho vykresluje komponenta Icon.svelte; barva se dědí přes
|
|
70
|
+
fill="currentColor" v souboru. Zrcadlo v assets/css/jelinek.css —
|
|
71
|
+
měňte obě místa najednou. */
|
|
72
|
+
.icon {
|
|
73
|
+
display: inline-block;
|
|
74
|
+
width: 20px;
|
|
75
|
+
height: 20px;
|
|
76
|
+
vertical-align: -0.2em; /* posadí ikonu na účaří okolního textu */
|
|
77
|
+
line-height: 1;
|
|
78
|
+
}
|
|
79
|
+
.icon > svg {
|
|
80
|
+
display: block;
|
|
81
|
+
width: 100%;
|
|
82
|
+
height: 100%;
|
|
83
|
+
}
|
package/dist/theme/fonts.css
CHANGED
|
@@ -21,13 +21,12 @@
|
|
|
21
21
|
|
|
22
22
|
Reconciled against assets/css/jelinek.css's @font-face block (the
|
|
23
23
|
authority for which faces exist): every face declared there is declared
|
|
24
|
-
here too, with the same family name, weight and filename.
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
the
|
|
29
|
-
|
|
30
|
-
7cd378c). */
|
|
24
|
+
here too, with the same family name, weight and filename. Only the ROLE
|
|
25
|
+
faces are loaded (majitel, 21. 8. 2026): Walsheim Light/Medium/Bold,
|
|
26
|
+
Archer Book/Bold, Avenir Demi (logo subtitle). Regular, Black, Avenir
|
|
27
|
+
Regular/Bold and Archer Medium stay in assets/fonts/ for other projects,
|
|
28
|
+
but the web never declares them — a stray request falls back and the
|
|
29
|
+
font-faces e2e catches it. */
|
|
31
30
|
@font-face {
|
|
32
31
|
font-family: 'GT Walsheim Pro';
|
|
33
32
|
src: url('/assets/fonts/GT-Walsheim-Pro-Light.woff2') format('woff2');
|
|
@@ -35,13 +34,6 @@
|
|
|
35
34
|
font-style: normal;
|
|
36
35
|
font-display: block;
|
|
37
36
|
}
|
|
38
|
-
@font-face {
|
|
39
|
-
font-family: 'GT Walsheim Pro';
|
|
40
|
-
src: url('/assets/fonts/GT-Walsheim-Pro-Regular.woff2') format('woff2');
|
|
41
|
-
font-weight: 400;
|
|
42
|
-
font-style: normal;
|
|
43
|
-
font-display: block;
|
|
44
|
-
}
|
|
45
37
|
@font-face {
|
|
46
38
|
font-family: 'GT Walsheim Pro';
|
|
47
39
|
src: url('/assets/fonts/GT-Walsheim-Pro-Medium.woff2') format('woff2');
|
|
@@ -56,20 +48,6 @@
|
|
|
56
48
|
font-style: normal;
|
|
57
49
|
font-display: block;
|
|
58
50
|
}
|
|
59
|
-
@font-face {
|
|
60
|
-
font-family: 'GT Walsheim Pro';
|
|
61
|
-
src: url('/assets/fonts/GT-Walsheim-Pro-Black.woff2') format('woff2');
|
|
62
|
-
font-weight: 900;
|
|
63
|
-
font-style: normal;
|
|
64
|
-
font-display: block;
|
|
65
|
-
}
|
|
66
|
-
@font-face {
|
|
67
|
-
font-family: 'Avenir Next LT Pro';
|
|
68
|
-
src: url('/assets/fonts/AvenirNextLTPro-Regular.woff2') format('woff2');
|
|
69
|
-
font-weight: 400;
|
|
70
|
-
font-style: normal;
|
|
71
|
-
font-display: block;
|
|
72
|
-
}
|
|
73
51
|
@font-face {
|
|
74
52
|
font-family: 'Avenir Next LT Pro';
|
|
75
53
|
src: url('/assets/fonts/AvenirNextLTPro-Demi.woff2') format('woff2');
|
|
@@ -77,13 +55,6 @@
|
|
|
77
55
|
font-style: normal;
|
|
78
56
|
font-display: block;
|
|
79
57
|
}
|
|
80
|
-
@font-face {
|
|
81
|
-
font-family: 'Avenir Next LT Pro';
|
|
82
|
-
src: url('/assets/fonts/AvenirNextLTPro-Bold.woff2') format('woff2');
|
|
83
|
-
font-weight: 700;
|
|
84
|
-
font-style: normal;
|
|
85
|
-
font-display: block;
|
|
86
|
-
}
|
|
87
58
|
@font-face {
|
|
88
59
|
font-family: 'Archer';
|
|
89
60
|
src: url('/assets/fonts/Archer-Book.woff2') format('woff2');
|
|
@@ -91,13 +62,6 @@
|
|
|
91
62
|
font-style: normal;
|
|
92
63
|
font-display: block;
|
|
93
64
|
}
|
|
94
|
-
@font-face {
|
|
95
|
-
font-family: 'Archer';
|
|
96
|
-
src: url('/assets/fonts/Archer-Medium.woff2') format('woff2');
|
|
97
|
-
font-weight: 500;
|
|
98
|
-
font-style: normal;
|
|
99
|
-
font-display: block;
|
|
100
|
-
}
|
|
101
65
|
@font-face {
|
|
102
66
|
font-family: 'Archer';
|
|
103
67
|
src: url('/assets/fonts/Archer-Bold.woff2') format('woff2');
|
|
@@ -105,3 +69,6 @@
|
|
|
105
69
|
font-style: normal;
|
|
106
70
|
font-display: block;
|
|
107
71
|
}
|
|
72
|
+
/* Ikony rozhraní nejsou písmo (majitel, 28. 8. 2026): Google icons se
|
|
73
|
+
vkládají jako inline SVG z assets/icons/material/ — komponenta Icon.svelte,
|
|
74
|
+
pravidla /ui/ikony. Do stránky tak jde jen to, co opravdu ukazuje. */
|
package/dist/theme/tokens.css
CHANGED
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
--ON-JELINEK-BLACK: hsl(0, 0%, 95%);
|
|
17
17
|
--bg-white: hsl(0, 0%, 100%);
|
|
18
18
|
--bg-gray: hsl(0, 0%, 95%);
|
|
19
|
-
--bg-brown: hsl(
|
|
20
|
-
--bg-magenta: hsl(324,
|
|
19
|
+
--bg-brown: hsl(27, 58%, 96.3%);
|
|
20
|
+
--bg-magenta: hsl(324, 85%, 92%);
|
|
21
21
|
--bg-black: hsl(0, 0%, 0%);
|
|
22
22
|
--border-subtle: hsl(0, 0%, 91%);
|
|
23
23
|
--text-black: hsl(0, 0%, 5%);
|
|
@@ -45,13 +45,20 @@
|
|
|
45
45
|
--glass-fill: hsl(0, 0%, 100%, 0.5);
|
|
46
46
|
--glass-border: hsl(0, 0%, 100%, 0.75);
|
|
47
47
|
--glass-filter: blur(25px) saturate(140%);
|
|
48
|
-
--
|
|
48
|
+
--overlay-scrim: hsl(0, 0%, 0%, 0.5);
|
|
49
|
+
--overlay-filter: blur(4px);
|
|
50
|
+
--z-bar: 40;
|
|
51
|
+
--z-chapter-nav: 49;
|
|
52
|
+
--z-header: 50;
|
|
53
|
+
--z-overlay: 1200;
|
|
54
|
+
--z-toast: 1500;
|
|
55
|
+
--focus-color: var(--JELINEK-BLACK);
|
|
49
56
|
--focus-width: 2px;
|
|
50
57
|
--focus-offset: 2px;
|
|
51
|
-
--font-primary: "GT Walsheim Pro", Arial, Helvetica, sans-serif;
|
|
58
|
+
--font-primary: "GT Walsheim Pro", "Arial Black", Arial, Helvetica, sans-serif;
|
|
52
59
|
--font-secondary: "GT Walsheim Pro", Arial, Helvetica, sans-serif;
|
|
53
|
-
--font-serif: "Archer", Georgia, "Times New Roman", serif;
|
|
54
|
-
--page-max:
|
|
60
|
+
--font-serif: "Archer", Baskerville, "Baskerville Old Face", Georgia, "Times New Roman", serif;
|
|
61
|
+
--page-max: 1480px;
|
|
55
62
|
--header-h: 70px;
|
|
56
63
|
--subnav-h: 58px;
|
|
57
64
|
--step0: 1rem;
|
|
@@ -72,6 +79,13 @@
|
|
|
72
79
|
--space-section: clamp(24px, 4vw, 48px);
|
|
73
80
|
}
|
|
74
81
|
|
|
82
|
+
@media (prefers-reduced-motion: reduce) {
|
|
83
|
+
:root {
|
|
84
|
+
--dur-base: 0s;
|
|
85
|
+
--dur-slow: 0s;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
75
89
|
@media (min-width: 640px) {
|
|
76
90
|
:root {
|
|
77
91
|
--header-h: 94px;
|
|
@@ -82,8 +96,8 @@
|
|
|
82
96
|
.dark {
|
|
83
97
|
--bg-white: hsl(0, 0%, 5%);
|
|
84
98
|
--bg-gray: hsl(0, 0%, 15%);
|
|
85
|
-
--bg-brown: hsl(
|
|
86
|
-
--bg-magenta: hsl(324,
|
|
99
|
+
--bg-brown: hsl(27, 58%, 10%);
|
|
100
|
+
--bg-magenta: hsl(324, 85%, 10%);
|
|
87
101
|
--bg-black: hsl(0, 0%, 0%);
|
|
88
102
|
--text-black: hsl(0, 0%, 92%);
|
|
89
103
|
--text-muted1: hsl(0, 0%, 62%);
|
|
@@ -105,7 +119,7 @@
|
|
|
105
119
|
--sem-error-strong: hsl(5, 100%, 54%);
|
|
106
120
|
--glass-fill: hsl(0, 0%, 0%, 0.6);
|
|
107
121
|
--glass-border: hsl(0, 0%, 100%, 0.25);
|
|
108
|
-
--focus-color: var(--JELINEK-
|
|
122
|
+
--focus-color: var(--JELINEK-BLACK);
|
|
109
123
|
--border-subtle: hsl(0, 0%, 20%);
|
|
110
124
|
--border-highlight-white: hsl(0, 0%, 40%);
|
|
111
125
|
--shadow-interactive: 0px 4px 4px hsl(0, 0%, 0%, 0.063), 0px 12px 12px hsl(0, 0%, 0%, 0.188);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jelinek/ui",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.2",
|
|
4
4
|
"description": "JELÍNEK Svelte 5 component kit, generated from the brand guide",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"type": "module",
|
|
@@ -49,9 +49,11 @@
|
|
|
49
49
|
"test": "vitest run",
|
|
50
50
|
"gen:tokens": "node scripts/gen-tokens.js",
|
|
51
51
|
"check:tokens": "node scripts/gen-tokens.js --check",
|
|
52
|
+
"gen:icons": "node scripts/gen-icons.js",
|
|
53
|
+
"check:icons": "node scripts/gen-icons.js --check",
|
|
52
54
|
"check:css-lock": "node scripts/check-css-lock.js",
|
|
53
55
|
"test:e2e": "pnpm run build:showcase && playwright test",
|
|
54
|
-
"prepublishOnly": "pnpm check:tokens && pnpm check:css-lock && pnpm check && pnpm test && pnpm build"
|
|
56
|
+
"prepublishOnly": "pnpm check:tokens && pnpm check:icons && pnpm check:css-lock && pnpm check && pnpm test && pnpm build"
|
|
55
57
|
},
|
|
56
58
|
"peerDependencies": {
|
|
57
59
|
"svelte": "^5.56.3",
|