@godxjp/ui 28.7.0 → 28.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/dist/components/data-display/index.d.ts +2 -0
  2. package/dist/components/data-display/index.js +2 -0
  3. package/dist/components/data-display/marquee.d.ts +16 -0
  4. package/dist/components/data-display/marquee.js +155 -0
  5. package/dist/components/general/reveal.d.ts +23 -2
  6. package/dist/components/general/reveal.js +37 -7
  7. package/dist/components/general/typography.d.ts +4 -1
  8. package/dist/components/general/typography.js +14 -1
  9. package/dist/components/layout/affix.d.ts +86 -0
  10. package/dist/components/layout/affix.js +187 -0
  11. package/dist/components/layout/index.d.ts +4 -0
  12. package/dist/components/layout/index.js +4 -0
  13. package/dist/components/layout/legal-document-shell.js +4 -3
  14. package/dist/components/layout/masonry.d.ts +74 -0
  15. package/dist/components/layout/masonry.js +214 -0
  16. package/dist/components/layout/page-container.js +5 -20
  17. package/dist/components/navigation/anchor.d.ts +64 -0
  18. package/dist/components/navigation/anchor.js +284 -0
  19. package/dist/components/navigation/index.d.ts +4 -0
  20. package/dist/components/navigation/index.js +4 -0
  21. package/dist/components/navigation/mega-menu.d.ts +21 -0
  22. package/dist/components/navigation/mega-menu.js +526 -0
  23. package/dist/contracts/measurement.json +1 -1
  24. package/dist/i18n/messages/en.json +517 -0
  25. package/dist/i18n/messages/ja.json +513 -0
  26. package/dist/i18n/messages/vi.json +513 -0
  27. package/dist/lib/hooks.d.ts +68 -0
  28. package/dist/lib/hooks.js +52 -0
  29. package/dist/lib/platform.d.ts +14 -0
  30. package/dist/lib/platform.js +10 -1
  31. package/dist/lib/utils.d.ts +1 -1
  32. package/dist/lib/utils.js +3 -2
  33. package/dist/lib/variants.js +4 -1
  34. package/dist/props/components/data-display.prop.d.ts +95 -1
  35. package/dist/props/components/general.prop.d.ts +47 -3
  36. package/dist/props/components/layout.prop.d.ts +194 -0
  37. package/dist/props/components/navigation.prop.d.ts +263 -0
  38. package/dist/props/registry.d.ts +359 -4
  39. package/dist/props/registry.js +472 -3
  40. package/dist/props/vocabulary/index.d.ts +1 -1
  41. package/dist/props/vocabulary/interaction.prop.d.ts +39 -2
  42. package/dist/props/vocabulary/layout.prop.d.ts +1 -1
  43. package/dist/styles/base.css +47 -14
  44. package/dist/styles/card-layout.css +2 -2
  45. package/dist/styles/chart-layout.css +6 -6
  46. package/dist/styles/control.css +15 -10
  47. package/dist/styles/data-display-layout.css +22 -6
  48. package/dist/styles/density.css +6 -0
  49. package/dist/styles/dialog-layout.css +4 -1
  50. package/dist/styles/focus-ring.css +4 -1
  51. package/dist/styles/layout.css +92 -3
  52. package/dist/styles/motion.css +121 -1
  53. package/dist/styles/navigation-layout.css +397 -1
  54. package/dist/styles/shell-layout.css +28 -21
  55. package/dist/styles/text-layout.css +134 -15
  56. package/dist/tokens/base.css +5 -0
  57. package/dist/tokens/components/activity.css +13 -4
  58. package/dist/tokens/components/affix.css +7 -0
  59. package/dist/tokens/components/anchor.css +17 -0
  60. package/dist/tokens/components/attachments.css +1 -1
  61. package/dist/tokens/components/badge.css +1 -1
  62. package/dist/tokens/components/card.css +28 -7
  63. package/dist/tokens/components/chart.css +4 -1
  64. package/dist/tokens/components/chat-composer.css +4 -1
  65. package/dist/tokens/components/control.css +72 -33
  66. package/dist/tokens/components/conversations.css +4 -1
  67. package/dist/tokens/components/data-display.css +42 -15
  68. package/dist/tokens/components/data-entry.css +8 -2
  69. package/dist/tokens/components/descriptions.css +1 -1
  70. package/dist/tokens/components/feedback.css +8 -5
  71. package/dist/tokens/components/float-button.css +8 -2
  72. package/dist/tokens/components/form.css +1 -1
  73. package/dist/tokens/components/legal-document.css +12 -3
  74. package/dist/tokens/components/logo.css +15 -6
  75. package/dist/tokens/components/marquee.css +7 -0
  76. package/dist/tokens/components/masonry.css +6 -0
  77. package/dist/tokens/components/mega-menu.css +71 -0
  78. package/dist/tokens/components/navigation.css +37 -13
  79. package/dist/tokens/components/segmented.css +4 -1
  80. package/dist/tokens/components/separator.css +4 -1
  81. package/dist/tokens/components/shell.css +99 -31
  82. package/dist/tokens/components/table.css +11 -5
  83. package/dist/tokens/components/thought-chain.css +4 -1
  84. package/dist/tokens/components/toggle.css +4 -1
  85. package/dist/tokens/components/tree.css +1 -1
  86. package/dist/tokens/components/upload.css +21 -9
  87. package/dist/tokens/foundation.css +35 -30
  88. package/dist/tokens/semantic/layout.css +26 -5
  89. package/docs/COMPOSITION-VS-COMPONENT.md +19 -1
  90. package/docs/DESIGN-AUTHORITY.md +99 -18
  91. package/docs/FRAME-COVERAGE-REPORT.md +7 -2
  92. package/docs/TOKENS.md +16 -1
  93. package/docs/data-display/marquee.tsx +254 -0
  94. package/docs/foundation/_theme-editor-scope.ts +222 -0
  95. package/docs/foundation/density.tsx +12 -2
  96. package/docs/foundation/spacing.tsx +5 -0
  97. package/docs/foundation/theme-editor.tsx +645 -0
  98. package/docs/general/activity.tsx +65 -0
  99. package/docs/general/reveal.tsx +290 -22
  100. package/docs/general/typography.tsx +91 -1
  101. package/docs/layout/affix.tsx +209 -0
  102. package/docs/layout/masonry.tsx +291 -0
  103. package/docs/navigation/anchor.tsx +285 -0
  104. package/docs/navigation/mega-menu-panel.tsx +86 -0
  105. package/docs/navigation/mega-menu.tsx +254 -0
  106. package/docs/roadmap/website-components.md +779 -0
  107. package/docs/showcase/acme-website.tsx +75 -39
  108. package/docs/showcase/case4-login.tsx +10 -2
  109. package/docs/showcase/case5-shift-calendar.tsx +1 -1
  110. package/docs/showcase/case6-agency-handy.tsx +6 -6
  111. package/docs/showcase/futurelastic-web.tsx +89 -49
  112. package/docs/showcase/marketing-page.tsx +885 -0
  113. package/docs/showcase/table-expandable-rows.tsx +4 -1
  114. package/docs/showcase/table-footer-totals.tsx +12 -2
  115. package/docs/showcase/theme-customization.tsx +1259 -0
  116. package/package.json +6 -3
  117. package/scripts/brand-accent.generated.mjs +27 -0
  118. package/scripts/ui-audit.mjs +66 -0
  119. package/scripts/visual-audit-rules.mjs +46 -2
@@ -130,17 +130,38 @@
130
130
  --color-wa-sumi: var(--wa-sumi);
131
131
  --color-wa-nezu: var(--wa-nezu);
132
132
 
133
- --text-2xs: var(--font-size-2xs);
134
- --text-xs: var(--font-size-xs);
135
- --text-sm: var(--font-size-sm);
133
+ --text-2xs: var(
134
+ --font-size-2xs,
135
+ calc(var(--font-size-base) / var(--font-size-ratio) / var(--font-size-ratio))
136
+ );
137
+ --text-xs: var(--font-size-xs, calc(var(--font-size-base) / var(--font-size-ratio)));
138
+ --text-sm: var(--font-size-sm, var(--font-size-base));
136
139
  --text-base: var(--font-size-base);
137
- --text-lg: var(--font-size-lg);
138
- --text-xl: var(--font-size-xl);
139
- --text-2xl: var(--font-size-2xl);
140
+ --text-lg: var(
141
+ --font-size-lg,
142
+ calc(var(--font-size-base) * var(--font-size-ratio) * var(--font-size-ratio))
143
+ );
144
+ --text-xl: var(
145
+ --font-size-xl,
146
+ calc(
147
+ var(--font-size-base) * var(--font-size-ratio) * var(--font-size-ratio) *
148
+ var(--font-size-ratio)
149
+ )
150
+ );
151
+ --text-2xl: var(
152
+ --font-size-2xl,
153
+ calc(
154
+ var(--font-size-base) * var(--font-size-ratio) * var(--font-size-ratio) *
155
+ var(--font-size-ratio) * var(--font-size-ratio)
156
+ )
157
+ );
140
158
 
141
- --text-3xl: var(--font-size-3xl);
142
- --text-4xl: var(--font-size-4xl);
143
- --text-5xl: var(--font-size-5xl);
159
+ --text-3xl: var(
160
+ --font-size-3xl,
161
+ calc(var(--font-size-display) / var(--font-size-display-ratio) / var(--font-size-display-ratio))
162
+ );
163
+ --text-4xl: var(--font-size-4xl, calc(var(--font-size-display) / var(--font-size-display-ratio)));
164
+ --text-5xl: var(--font-size-5xl, var(--font-size-display));
144
165
  }
145
166
 
146
167
  @layer base {
@@ -175,32 +196,44 @@
175
196
  }
176
197
 
177
198
  h1 {
178
- font-size: var(--heading-h1);
199
+ font-size: var(
200
+ --heading-h1,
201
+ calc(
202
+ var(--font-size-base) * var(--font-size-ratio) * var(--font-size-ratio) *
203
+ var(--font-size-ratio)
204
+ )
205
+ );
179
206
  font-weight: var(--font-weight-medium);
180
207
  line-height: var(--line-height-tight);
181
208
  }
182
209
 
183
210
  h2 {
184
- font-size: var(--heading-h2);
211
+ font-size: var(
212
+ --heading-h2,
213
+ calc(var(--font-size-base) * var(--font-size-ratio) * var(--font-size-ratio))
214
+ );
185
215
  font-weight: var(--font-weight-medium);
186
216
  line-height: var(--line-height-tight);
187
217
  }
188
218
 
189
219
  h3 {
190
- font-size: var(--heading-h3);
220
+ font-size: var(--heading-h3, var(--font-size-base));
191
221
  font-weight: var(--font-weight-medium);
192
222
  line-height: var(--line-height-tight);
193
223
  }
194
224
 
195
225
  h4 {
196
- font-size: var(--heading-h4);
226
+ font-size: var(
227
+ --heading-h4,
228
+ var(--font-size-xs, calc(var(--font-size-base) / var(--font-size-ratio)))
229
+ );
197
230
  font-weight: var(--font-weight-medium);
198
231
  line-height: var(--line-height-tight);
199
232
  }
200
233
 
201
234
  h5,
202
235
  h6 {
203
- font-size: var(--font-size-xs);
236
+ font-size: var(--font-size-xs, calc(var(--font-size-base) / var(--font-size-ratio)));
204
237
  font-weight: var(--font-weight-medium);
205
238
  line-height: var(--line-height-tight);
206
239
  }
@@ -666,7 +666,7 @@
666
666
 
667
667
  [data-slot="service-launcher-skeleton-status"] {
668
668
  width: var(--card-service-launcher-skeleton-status-width);
669
- height: var(--font-size-xs);
669
+ height: var(--font-size-xs, calc(var(--font-size-base) / var(--font-size-ratio)));
670
670
  margin-inline-start: auto;
671
671
  }
672
672
 
@@ -674,7 +674,7 @@
674
674
  [data-slot="service-launcher-skeleton-metadata"],
675
675
  [data-slot="service-launcher-skeleton-action"] {
676
676
  width: 100%;
677
- height: var(--font-size-xs);
677
+ height: var(--font-size-xs, calc(var(--font-size-base) / var(--font-size-ratio)));
678
678
  }
679
679
 
680
680
  [data-slot="service-launcher-skeleton-action"] {
@@ -10,7 +10,7 @@
10
10
  }
11
11
 
12
12
  .ui-chart-title {
13
- font-size: var(--font-size-sm);
13
+ font-size: var(--font-size-sm, var(--font-size-base));
14
14
  font-weight: var(--font-weight-medium);
15
15
  color: hsl(var(--foreground));
16
16
  }
@@ -22,7 +22,7 @@
22
22
 
23
23
  .ui-chart .recharts-text,
24
24
  .ui-chart .recharts-legend-item-text {
25
- font-size: var(--font-size-xs);
25
+ font-size: var(--font-size-xs, calc(var(--font-size-base) / var(--font-size-ratio)));
26
26
  fill: hsl(var(--muted-foreground));
27
27
  color: hsl(var(--muted-foreground));
28
28
  }
@@ -36,12 +36,12 @@
36
36
  border: 1px solid hsl(var(--border)) !important;
37
37
  background: hsl(var(--popover)) !important;
38
38
  color: hsl(var(--popover-foreground));
39
- font-size: var(--font-size-xs);
39
+ font-size: var(--font-size-xs, calc(var(--font-size-base) / var(--font-size-ratio)));
40
40
  }
41
41
 
42
42
  .ui-chart-footer {
43
43
  margin-block-start: var(--chart-trend-footer-gap);
44
- font-size: var(--font-size-xs);
44
+ font-size: var(--font-size-xs, calc(var(--font-size-base) / var(--font-size-ratio)));
45
45
  color: hsl(var(--muted-foreground));
46
46
  }
47
47
 
@@ -118,7 +118,7 @@
118
118
  overflow: hidden;
119
119
  font-size: var(--chart-trend-tick-font-size);
120
120
 
121
- line-height: var(--line-height-normal);
121
+ line-height: var(--line-height-normal);
122
122
  color: hsl(var(--muted-foreground));
123
123
  text-align: center;
124
124
  text-overflow: ellipsis;
@@ -131,7 +131,7 @@
131
131
  inset-inline-start: 0;
132
132
  visibility: hidden;
133
133
  margin-inline-end: var(--chart-category-axis-gap);
134
- font-size: var(--font-size-xs);
134
+ font-size: var(--font-size-xs, calc(var(--font-size-base) / var(--font-size-ratio)));
135
135
  white-space: nowrap;
136
136
  pointer-events: none;
137
137
  }
@@ -93,7 +93,6 @@
93
93
  cursor: pointer;
94
94
  gap: var(--control-gap);
95
95
  white-space: nowrap;
96
- border-radius: var(--control-radius);
97
96
  font-weight: var(--font-weight-medium);
98
97
  transition-property: color, background-color, border-color, box-shadow;
99
98
  transition-duration: 150ms;
@@ -101,7 +100,7 @@
101
100
 
102
101
  .ui-button {
103
102
  flex-shrink: 0;
104
- font-size: var(--font-size-sm);
103
+ font-size: var(--font-size-sm, var(--font-size-base));
105
104
  outline: none;
106
105
  }
107
106
 
@@ -860,7 +859,7 @@
860
859
  .ui-command-palette-meta {
861
860
  margin-inline-start: auto;
862
861
  color: hsl(var(--muted-foreground));
863
- font-size: var(--font-size-xs);
862
+ font-size: var(--font-size-xs, calc(var(--font-size-base) / var(--font-size-ratio)));
864
863
  }
865
864
 
866
865
  .ui-command-palette-state {
@@ -879,7 +878,7 @@
879
878
  padding: var(--command-palette-hint-padding-y) var(--command-palette-hint-padding-x);
880
879
  color: hsl(var(--muted-foreground));
881
880
  font-family: var(--font-mono);
882
- font-size: var(--font-size-xs);
881
+ font-size: var(--font-size-xs, calc(var(--font-size-base) / var(--font-size-ratio)));
883
882
  }
884
883
 
885
884
  .ui-search-input {
@@ -1246,9 +1245,9 @@
1246
1245
  min-height: var(--control-height);
1247
1246
  padding: var(--space-1) var(--control-padding-x);
1248
1247
 
1249
- border: var(--control-border-width) solid var(--control-surface-border-color);
1248
+ border: var(--control-border-width) solid var(--control-surface-border-color, hsl(var(--input)));
1250
1249
  border-radius: var(--control-radius);
1251
- background: var(--control-surface-background);
1250
+ background: var(--control-surface-background, hsl(var(--background)));
1252
1251
  box-shadow: var(--control-shadow);
1253
1252
  }
1254
1253
  .ui-tag-input-disabled {
@@ -1361,14 +1360,14 @@
1361
1360
  }
1362
1361
 
1363
1362
  .ui-control-surface {
1364
- border-color: var(--control-surface-border-color);
1365
- background: var(--control-surface-background);
1363
+ border-color: var(--control-surface-border-color, hsl(var(--input)));
1364
+ background: var(--control-surface-background, hsl(var(--background)));
1366
1365
  }
1367
1366
 
1368
1367
  .ui-control-surface[data-variant="filled"] {
1369
1368
  --control-shadow: var(--control-filled-shadow);
1370
1369
  border-color: var(--control-filled-border-color);
1371
- background: var(--control-filled-background);
1370
+ background: var(--control-filled-background, hsl(var(--muted)));
1372
1371
  }
1373
1372
 
1374
1373
  .ui-control-surface[data-variant="borderless"] {
@@ -2960,7 +2959,13 @@
2960
2959
  }
2961
2960
 
2962
2961
  .ui-slider[data-has-marks="true"]:not([data-orientation="vertical"]) {
2963
- margin-block-end: calc(var(--slider-mark-space-block-start) + var(--font-size-lg));
2962
+ margin-block-end: calc(
2963
+ var(--slider-mark-space-block-start) +
2964
+ var(
2965
+ --font-size-lg,
2966
+ calc(var(--font-size-base) * var(--font-size-ratio) * var(--font-size-ratio))
2967
+ )
2968
+ );
2964
2969
  }
2965
2970
 
2966
2971
  .ui-slider-marks {
@@ -1159,19 +1159,31 @@
1159
1159
  }
1160
1160
 
1161
1161
  .ui-prose h1 {
1162
- font-size: var(--heading-h1);
1162
+ font-size: var(
1163
+ --heading-h1,
1164
+ calc(
1165
+ var(--font-size-base) * var(--font-size-ratio) * var(--font-size-ratio) *
1166
+ var(--font-size-ratio)
1167
+ )
1168
+ );
1163
1169
  }
1164
1170
 
1165
1171
  .ui-prose h2 {
1166
- font-size: var(--heading-h2);
1172
+ font-size: var(
1173
+ --heading-h2,
1174
+ calc(var(--font-size-base) * var(--font-size-ratio) * var(--font-size-ratio))
1175
+ );
1167
1176
  }
1168
1177
 
1169
1178
  .ui-prose h3 {
1170
- font-size: var(--heading-h3);
1179
+ font-size: var(--heading-h3, var(--font-size-base));
1171
1180
  }
1172
1181
 
1173
1182
  .ui-prose h4 {
1174
- font-size: var(--heading-h4);
1183
+ font-size: var(
1184
+ --heading-h4,
1185
+ var(--font-size-xs, calc(var(--font-size-base) / var(--font-size-ratio)))
1186
+ );
1175
1187
  }
1176
1188
 
1177
1189
  .ui-prose :is(ul, ol) {
@@ -1878,12 +1890,13 @@
1878
1890
 
1879
1891
  .ui-chat-bubble-skeleton {
1880
1892
  display: grid;
1893
+ grid-template-columns: minmax(0, var(--chat-bubble-max-inline-size));
1881
1894
  gap: var(--skeleton-row-gap);
1882
1895
  }
1883
1896
 
1884
1897
  .ui-chat-bubble-skeleton-line {
1885
1898
  block-size: var(--skeleton-block-height);
1886
- inline-size: var(--chat-bubble-max-inline-size);
1899
+ inline-size: auto;
1887
1900
  max-inline-size: 100%;
1888
1901
  }
1889
1902
 
@@ -2058,7 +2071,10 @@
2058
2071
 
2059
2072
  .ui-tree[data-size="xs"] {
2060
2073
  --tree-node-height: var(--control-height-xs);
2061
- --tree-node-font-size: var(--font-size-xs);
2074
+ --tree-node-font-size: var(
2075
+ --font-size-xs,
2076
+ calc(var(--font-size-base) / var(--font-size-ratio))
2077
+ );
2062
2078
  }
2063
2079
 
2064
2080
  .ui-tree[data-size="sm"] {
@@ -27,6 +27,8 @@
27
27
  --space-8: calc(2rem * var(--scaling));
28
28
  --space-10: calc(2.5rem * var(--scaling));
29
29
  --space-12: calc(3rem * var(--scaling));
30
+ --space-20: calc(5rem * var(--scaling));
31
+ --space-24: calc(6rem * var(--scaling));
30
32
  --radius: calc(0.375rem * var(--scaling));
31
33
  --control-height: calc(var(--control-height-default) * var(--scaling));
32
34
  --control-height-sm: calc(var(--control-height) - calc(0.25rem * var(--scaling)));
@@ -48,6 +50,8 @@
48
50
  --space-page-x: var(--space-6);
49
51
  --space-page-y: var(--space-6);
50
52
  --space-section: var(--space-4);
53
+ --space-section-band: var(--space-20);
54
+ --space-section-hero: var(--space-24);
51
55
  --space-stack-xs: var(--space-1);
52
56
  --space-stack-sm: var(--space-2);
53
57
  --space-stack-md: var(--space-4);
@@ -57,6 +61,8 @@
57
61
  --space-inline-sm: var(--space-2);
58
62
  --space-inline-md: var(--space-3);
59
63
  --space-inline-lg: var(--space-4);
64
+
65
+ --space-inline-xl: var(--space-6);
60
66
  --space-chrome-x: var(--space-6);
61
67
  --space-chrome-y: var(--space-4);
62
68
  --space-chrome-gap: var(--space-2);
@@ -163,7 +163,10 @@
163
163
  }
164
164
 
165
165
  [data-slot="dialog-title"] {
166
- font-size: var(--font-size-lg);
166
+ font-size: var(
167
+ --font-size-lg,
168
+ calc(var(--font-size-base) * var(--font-size-ratio) * var(--font-size-ratio))
169
+ );
167
170
  font-weight: var(--font-weight-semibold);
168
171
  line-height: var(--line-height-tight);
169
172
  letter-spacing: var(--letter-spacing-tight);
@@ -56,7 +56,10 @@
56
56
  .ui-otp-slot[data-active="true"],
57
57
  .ui-otp-group[data-appearance="grouped"]:has(.ui-otp-slot[data-active="true"]) {
58
58
  outline: var(--focus-ring-width) solid
59
- hsl(var(--focus-outline-color, var(--focus-ring-color, var(--ring))) / var(--focus-ring-opacity, 1));
59
+ hsl(
60
+ var(--focus-outline-color, var(--focus-ring-color, var(--ring))) /
61
+ var(--focus-ring-opacity, 1)
62
+ );
60
63
  outline-offset: var(--focus-ring-offset);
61
64
 
62
65
  transition:
@@ -218,6 +218,13 @@
218
218
  gap: var(--space-12);
219
219
  }
220
220
 
221
+ .ui-flex-gap-20 {
222
+ gap: var(--space-20);
223
+ }
224
+ .ui-flex-gap-24 {
225
+ gap: var(--space-24);
226
+ }
227
+
221
228
  .ui-flex[data-direction="row"].ui-flex-gap-xs {
222
229
  gap: var(--space-inline-xs);
223
230
  }
@@ -1693,13 +1700,16 @@
1693
1700
  }
1694
1701
  }
1695
1702
  .ui-separator[data-label-size="2xs"] .ui-separator-label {
1696
- font-size: var(--font-size-2xs);
1703
+ font-size: var(
1704
+ --font-size-2xs,
1705
+ calc(var(--font-size-base) / var(--font-size-ratio) / var(--font-size-ratio))
1706
+ );
1697
1707
  }
1698
1708
  .ui-separator[data-label-size="xs"] .ui-separator-label {
1699
- font-size: var(--font-size-xs);
1709
+ font-size: var(--font-size-xs, calc(var(--font-size-base) / var(--font-size-ratio)));
1700
1710
  }
1701
1711
  .ui-separator[data-label-size="sm"] .ui-separator-label {
1702
- font-size: var(--font-size-sm);
1712
+ font-size: var(--font-size-sm, var(--font-size-base));
1703
1713
  }
1704
1714
  .ui-separator[data-label-size="md"] .ui-separator-label {
1705
1715
  font-size: var(--font-size-base);
@@ -2013,3 +2023,82 @@
2013
2023
  transition: none;
2014
2024
  }
2015
2025
  }
2026
+
2027
+ @layer components {
2028
+
2029
+ .ui-masonry {
2030
+ position: relative;
2031
+ box-sizing: border-box;
2032
+
2033
+ column-gap: var(--masonry-gap-inline);
2034
+ row-gap: var(--masonry-gap-block);
2035
+ }
2036
+
2037
+ .ui-masonry-item {
2038
+ position: absolute;
2039
+ box-sizing: border-box;
2040
+
2041
+ --masonry-item-track: calc((100% + var(--masonry-gap-inline)) / var(--masonry-column-count, 3));
2042
+ inline-size: calc(var(--masonry-item-track) - var(--masonry-gap-inline));
2043
+
2044
+ inset-inline-start: calc(var(--masonry-item-track) * var(--masonry-item-column, 0));
2045
+ inset-block-start: 0;
2046
+
2047
+ opacity: 0;
2048
+ transition:
2049
+ opacity var(--duration-base) var(--ease-standard),
2050
+ inset-block-start var(--duration-base) var(--ease-standard),
2051
+ inset-inline-start var(--duration-base) var(--ease-standard);
2052
+ }
2053
+
2054
+ .ui-masonry-item[data-positioned] {
2055
+ opacity: 1;
2056
+ }
2057
+
2058
+ @media (prefers-reduced-motion: reduce) {
2059
+ .ui-masonry-item {
2060
+ transition: none;
2061
+ }
2062
+ }
2063
+
2064
+ .ui-affix {
2065
+
2066
+ position: relative;
2067
+ }
2068
+
2069
+ .ui-affix-sentinel {
2070
+ position: absolute;
2071
+ inset-inline: 0;
2072
+
2073
+ block-size: 1px;
2074
+ pointer-events: none;
2075
+ }
2076
+
2077
+ .ui-affix-sentinel[data-edge="block-start"] {
2078
+ inset-block-start: calc(-1 * var(--affix-inset-block-start));
2079
+ }
2080
+
2081
+ .ui-affix-sentinel[data-edge="block-end"] {
2082
+ inset-block-end: calc(-1 * var(--affix-inset-block-end));
2083
+ }
2084
+
2085
+ .ui-affix-placeholder {
2086
+ pointer-events: none;
2087
+ }
2088
+
2089
+ .ui-affix-content[data-affixed] {
2090
+ position: fixed;
2091
+
2092
+ z-index: var(--sticky-z-index);
2093
+
2094
+ inline-size: var(--affix-content-inline-size, auto);
2095
+ }
2096
+
2097
+ .ui-affix-content[data-affixed][data-edge="block-start"] {
2098
+ inset-block-start: calc(var(--affix-target-inset, 0px) + var(--affix-inset-block-start));
2099
+ }
2100
+
2101
+ .ui-affix-content[data-affixed][data-edge="block-end"] {
2102
+ inset-block-end: calc(var(--affix-target-inset, 0px) + var(--affix-inset-block-end));
2103
+ }
2104
+ }
@@ -6,6 +6,20 @@
6
6
  will-change: transform, opacity;
7
7
  }
8
8
 
9
+ .ui-reveal[data-reveal-on="view"] {
10
+ animation: none;
11
+ }
12
+ .ui-reveal[data-reveal-state="out"] {
13
+ opacity: 0;
14
+ transform: translateY(var(--reveal-distance));
15
+ }
16
+ .ui-reveal[data-reveal-state="in"] {
17
+ animation-name: ui-reveal-in;
18
+ animation-duration: var(--duration-slow);
19
+ animation-timing-function: var(--ease-emphasized);
20
+ animation-fill-mode: both;
21
+ }
22
+
9
23
  .ui-reveal[data-reveal-delay="1"] {
10
24
  animation-delay: calc(var(--reveal-stagger-step) * 1);
11
25
  }
@@ -38,9 +52,14 @@
38
52
 
39
53
  @media (prefers-reduced-motion: reduce) {
40
54
  .ui-reveal,
41
- .ui-reveal[data-reveal-delay] {
55
+ .ui-reveal[data-reveal-delay],
56
+ .ui-reveal[data-reveal-state] {
42
57
  animation: none;
43
58
  }
59
+ .ui-reveal[data-reveal-state="out"] {
60
+ opacity: 1;
61
+ transform: none;
62
+ }
44
63
  }
45
64
  }
46
65
 
@@ -193,3 +212,104 @@
193
212
  }
194
213
  }
195
214
  }
215
+
216
+ @layer components {
217
+
218
+ .ui-marquee {
219
+ display: flex;
220
+ align-items: center;
221
+ gap: var(--marquee-gap-inline);
222
+ inline-size: 100%;
223
+ min-inline-size: 0;
224
+ }
225
+
226
+ .ui-marquee-viewport {
227
+ flex: 1 1 auto;
228
+ min-inline-size: 0;
229
+ overflow: hidden;
230
+ }
231
+
232
+ .ui-marquee-scroller {
233
+ flex: 1 1 auto;
234
+ min-inline-size: 0;
235
+ }
236
+
237
+ .ui-marquee[data-fade="true"] .ui-marquee-viewport {
238
+ mask-image: linear-gradient(
239
+ to right,
240
+ transparent,
241
+ black var(--marquee-mask-width),
242
+ black calc(100% - var(--marquee-mask-width)),
243
+ transparent
244
+ );
245
+ }
246
+
247
+ .ui-marquee-track {
248
+ display: flex;
249
+ inline-size: max-content;
250
+ will-change: transform;
251
+ animation: ui-marquee-travel calc(var(--marquee-interval) * var(--marquee-cycle-scale, 1))
252
+ linear infinite;
253
+ }
254
+ .ui-marquee[data-speed="slow"] .ui-marquee-track {
255
+ animation-duration: calc(var(--marquee-interval-slow) * var(--marquee-cycle-scale, 1));
256
+ }
257
+ .ui-marquee[data-speed="fast"] .ui-marquee-track {
258
+ animation-duration: calc(var(--marquee-interval-fast) * var(--marquee-cycle-scale, 1));
259
+ }
260
+
261
+ .ui-marquee-copy {
262
+ display: flex;
263
+ flex: 0 0 auto;
264
+ align-items: center;
265
+ gap: var(--marquee-gap-inline);
266
+ padding-inline-end: var(--marquee-gap-inline);
267
+ }
268
+
269
+ .ui-marquee-control {
270
+ flex: 0 0 auto;
271
+ }
272
+
273
+ @keyframes ui-marquee-travel {
274
+ from {
275
+ transform: translateX(0);
276
+ }
277
+ to {
278
+ transform: translateX(calc(-100% / var(--marquee-copies, 2)));
279
+ }
280
+ }
281
+
282
+ @keyframes ui-marquee-travel-rtl {
283
+ from {
284
+ transform: translateX(0);
285
+ }
286
+ to {
287
+ transform: translateX(calc(100% / var(--marquee-copies, 2)));
288
+ }
289
+ }
290
+ [dir="rtl"] .ui-marquee-track {
291
+ animation-name: ui-marquee-travel-rtl;
292
+ }
293
+
294
+ .ui-marquee[data-direction="end"] .ui-marquee-track {
295
+ animation-direction: reverse;
296
+ }
297
+
298
+ .ui-marquee[data-playing="false"] .ui-marquee-track {
299
+ animation-play-state: paused;
300
+ }
301
+
302
+ .ui-marquee-viewport:focus-within .ui-marquee-track {
303
+ animation-play-state: paused;
304
+ }
305
+
306
+ .ui-marquee[data-pause-on-hover="true"] .ui-marquee-viewport:hover .ui-marquee-track {
307
+ animation-play-state: paused;
308
+ }
309
+
310
+ @media (prefers-reduced-motion: reduce) {
311
+ .ui-marquee-track {
312
+ animation: none;
313
+ }
314
+ }
315
+ }