@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.
Files changed (98) hide show
  1. package/README.md +33 -10
  2. package/dist/components/ChapterNav.svelte +1 -1
  3. package/dist/components/Checkbox.svelte +13 -15
  4. package/dist/components/Checkbox.svelte.d.ts +1 -0
  5. package/dist/components/ContentLogo.svelte +18 -13
  6. package/dist/components/ContentLogo.svelte.d.ts +6 -5
  7. package/dist/components/Grid.svelte +9 -5
  8. package/dist/components/Icon.svelte +52 -0
  9. package/dist/components/Icon.svelte.d.ts +30 -0
  10. package/dist/components/InfoBar.svelte +254 -0
  11. package/dist/components/InfoBar.svelte.d.ts +46 -0
  12. package/dist/components/Label.svelte +12 -1
  13. package/dist/components/Label.svelte.d.ts +8 -0
  14. package/dist/components/PageHero.svelte +12 -9
  15. package/dist/components/Pager.svelte +5 -2
  16. package/dist/components/PhotoTile.svelte +4 -2
  17. package/dist/components/ProductCard.svelte +66 -44
  18. package/dist/components/ProductCard.svelte.d.ts +17 -4
  19. package/dist/components/Radio.svelte +12 -8
  20. package/dist/components/Radio.svelte.d.ts +1 -0
  21. package/dist/components/Select.svelte +70 -12
  22. package/dist/components/Select.svelte.d.ts +11 -0
  23. package/dist/components/SiteFooter.svelte +19 -0
  24. package/dist/components/SiteFooter.svelte.d.ts +8 -0
  25. package/dist/components/SiteHeader.svelte +70 -9
  26. package/dist/components/SiteHeader.svelte.d.ts +16 -0
  27. package/dist/components/Slider.svelte +6 -11
  28. package/dist/components/Switch.svelte +76 -0
  29. package/dist/components/Switch.svelte.d.ts +12 -0
  30. package/dist/components/Tab.svelte +29 -1
  31. package/dist/components/TextField.svelte +61 -10
  32. package/dist/components/TextField.svelte.d.ts +13 -0
  33. package/dist/components/Textarea.svelte +92 -0
  34. package/dist/components/Textarea.svelte.d.ts +23 -0
  35. package/dist/components/Tile.svelte +12 -11
  36. package/dist/components/Tile.svelte.d.ts +8 -2
  37. package/dist/components/blocks/CmsButton.svelte +36 -0
  38. package/dist/components/blocks/CmsButton.svelte.d.ts +12 -0
  39. package/dist/components/blocks/CmsColumns.svelte +20 -0
  40. package/dist/components/blocks/CmsColumns.svelte.d.ts +9 -0
  41. package/dist/components/blocks/CmsCover.svelte +71 -0
  42. package/dist/components/blocks/CmsCover.svelte.d.ts +17 -0
  43. package/dist/components/blocks/CmsHeading.svelte +50 -0
  44. package/dist/components/blocks/CmsHeading.svelte.d.ts +14 -0
  45. package/dist/components/blocks/CmsImage.svelte +43 -0
  46. package/dist/components/blocks/CmsImage.svelte.d.ts +13 -0
  47. package/dist/components/blocks/CmsMediaText.svelte +64 -0
  48. package/dist/components/blocks/CmsMediaText.svelte.d.ts +16 -0
  49. package/dist/components/blocks/CmsText.svelte +53 -0
  50. package/dist/components/blocks/CmsText.svelte.d.ts +10 -0
  51. package/dist/components/commerce/Breadcrumbs.svelte +22 -5
  52. package/dist/components/commerce/CartDrawer.svelte +7 -4
  53. package/dist/components/commerce/CartLineItem.svelte +1 -1
  54. package/dist/components/commerce/CheckoutProgress.svelte +1 -1
  55. package/dist/components/commerce/ConfigSection.svelte +2 -2
  56. package/dist/components/commerce/DimensionSlider.svelte +1 -1
  57. package/dist/components/commerce/Drawer.svelte +38 -24
  58. package/dist/components/commerce/Drawer.svelte.d.ts +0 -2
  59. package/dist/components/commerce/EmptyState.svelte +37 -0
  60. package/dist/components/commerce/EmptyState.svelte.d.ts +13 -0
  61. package/dist/components/commerce/FilterChip.svelte +35 -0
  62. package/dist/components/commerce/FilterChip.svelte.d.ts +10 -0
  63. package/dist/components/commerce/FreeShippingBar.svelte +1 -1
  64. package/dist/components/commerce/Gallery.svelte +4 -2
  65. package/dist/components/commerce/ListingToolbar.svelte +62 -0
  66. package/dist/components/commerce/ListingToolbar.svelte.d.ts +19 -0
  67. package/dist/components/commerce/Modal.svelte +31 -21
  68. package/dist/components/commerce/Modal.svelte.d.ts +0 -2
  69. package/dist/components/commerce/OrderSummary.svelte +1 -1
  70. package/dist/components/commerce/Pagination.svelte +115 -0
  71. package/dist/components/commerce/Pagination.svelte.d.ts +14 -0
  72. package/dist/components/commerce/PriceDisplay.svelte +3 -3
  73. package/dist/components/commerce/ProductHeader.svelte +2 -2
  74. package/dist/components/commerce/QuantityStepper.svelte +1 -1
  75. package/dist/components/commerce/RatingStars.svelte +1 -1
  76. package/dist/components/commerce/SearchField.svelte +92 -0
  77. package/dist/components/commerce/SearchField.svelte.d.ts +15 -0
  78. package/dist/components/commerce/SideToggle.svelte +1 -1
  79. package/dist/components/commerce/Skeleton.svelte +4 -1
  80. package/dist/components/commerce/StickyBar.svelte +4 -4
  81. package/dist/components/commerce/StockBadge.svelte +2 -2
  82. package/dist/components/commerce/Toaster.svelte +9 -5
  83. package/dist/components/commerce/TrustBadges.svelte +1 -1
  84. package/dist/components/commerce/overlay.d.ts +14 -0
  85. package/dist/components/commerce/overlay.js +49 -0
  86. package/dist/components/info-bar.d.ts +26 -0
  87. package/dist/components/info-bar.js +23 -0
  88. package/dist/icons/material-icons.generated.d.ts +4 -0
  89. package/dist/icons/material-icons.generated.js +118 -0
  90. package/dist/icons/material.d.ts +17 -0
  91. package/dist/icons/material.js +52 -0
  92. package/dist/index.d.ts +17 -0
  93. package/dist/index.js +17 -0
  94. package/dist/theme/base.css +22 -0
  95. package/dist/theme/extras.css +62 -0
  96. package/dist/theme/fonts.css +9 -42
  97. package/dist/theme/tokens.css +23 -9
  98. package/package.json +4 -2
@@ -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);
@@ -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
+ }
@@ -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. That now
25
- includes Archer Medium (500) — the file had been in assets/fonts/ and in
26
- its README since 03ee9de, but with no @font-face anywhere, so any request
27
- for a 500-weight Archer silently fell back to Book. Declaring it makes
28
- the README true and gives the designer the option of Medium emphasis in
29
- prose; nothing requests it yet (prose <strong> is plain Bold, his
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. */
@@ -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(29, 44%, 95%);
20
- --bg-magenta: hsl(324, 100%, 95%);
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
- --focus-color: var(--JELINEK-BROWN);
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: 1180px;
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(29, 44%, 10%);
86
- --bg-magenta: hsl(324, 100%, 10%);
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-BROWN-HIGHLIGHT);
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.0",
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",