@hjmds/react 1.12.0 → 1.13.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/dist/actions.d.ts +4 -0
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +4 -1
- package/dist/actions.js.map +1 -1
- package/dist/activity-heatmap.d.ts +4 -1
- package/dist/activity-heatmap.d.ts.map +1 -1
- package/dist/activity-heatmap.js +1 -1
- package/dist/activity-heatmap.js.map +1 -1
- package/dist/advanced-display.d.ts +31 -3
- package/dist/advanced-display.d.ts.map +1 -1
- package/dist/advanced-display.js +26 -27
- package/dist/advanced-display.js.map +1 -1
- package/dist/advanced-forms.d.ts +27 -2
- package/dist/advanced-forms.d.ts.map +1 -1
- package/dist/advanced-forms.js +11 -7
- package/dist/advanced-forms.js.map +1 -1
- package/dist/affix.d.ts +4 -1
- package/dist/affix.d.ts.map +1 -1
- package/dist/affix.js +2 -2
- package/dist/affix.js.map +1 -1
- package/dist/agreement.d.ts +3 -0
- package/dist/agreement.d.ts.map +1 -1
- package/dist/agreement.js +14 -3
- package/dist/agreement.js.map +1 -1
- package/dist/anchor.d.ts +5 -0
- package/dist/anchor.d.ts.map +1 -1
- package/dist/anchor.js +2 -2
- package/dist/anchor.js.map +1 -1
- package/dist/asset.d.ts +8 -1
- package/dist/asset.d.ts.map +1 -1
- package/dist/asset.js +4 -4
- package/dist/asset.js.map +1 -1
- package/dist/auth-screen.d.ts +5 -0
- package/dist/auth-screen.d.ts.map +1 -1
- package/dist/auth-screen.js +2 -1
- package/dist/auth-screen.js.map +1 -1
- package/dist/bottom-cta.d.ts +5 -0
- package/dist/bottom-cta.d.ts.map +1 -1
- package/dist/bottom-cta.js +2 -2
- package/dist/bottom-cta.js.map +1 -1
- package/dist/bottom-info.d.ts +5 -0
- package/dist/bottom-info.d.ts.map +1 -1
- package/dist/bottom-info.js +2 -2
- package/dist/bottom-info.js.map +1 -1
- package/dist/bottom-navigation.d.ts +3 -0
- package/dist/bottom-navigation.d.ts.map +1 -1
- package/dist/bottom-navigation.js +2 -1
- package/dist/bottom-navigation.js.map +1 -1
- package/dist/breadcrumb.d.ts +3 -0
- package/dist/breadcrumb.d.ts.map +1 -1
- package/dist/breadcrumb.js +2 -2
- package/dist/breadcrumb.js.map +1 -1
- package/dist/calendar.d.ts +4 -1
- package/dist/calendar.d.ts.map +1 -1
- package/dist/calendar.js +2 -2
- package/dist/calendar.js.map +1 -1
- package/dist/carousel-motion.d.ts +3 -0
- package/dist/carousel-motion.d.ts.map +1 -1
- package/dist/carousel-motion.js +1 -1
- package/dist/carousel-motion.js.map +1 -1
- package/dist/carousel.d.ts +3 -0
- package/dist/carousel.d.ts.map +1 -1
- package/dist/carousel.js +2 -2
- package/dist/carousel.js.map +1 -1
- package/dist/celebration.d.ts.map +1 -1
- package/dist/celebration.js.map +1 -1
- package/dist/clipboard.d.ts.map +1 -1
- package/dist/clipboard.js +6 -2
- package/dist/clipboard.js.map +1 -1
- package/dist/code-block.d.ts +4 -1
- package/dist/code-block.d.ts.map +1 -1
- package/dist/code-block.js +1 -1
- package/dist/code-block.js.map +1 -1
- package/dist/collapsible.d.ts +3 -0
- package/dist/collapsible.d.ts.map +1 -1
- package/dist/collapsible.js +2 -2
- package/dist/collapsible.js.map +1 -1
- package/dist/color-picker.d.ts +4 -1
- package/dist/color-picker.d.ts.map +1 -1
- package/dist/color-picker.js +2 -2
- package/dist/color-picker.js.map +1 -1
- package/dist/command-palette.d.ts +6 -0
- package/dist/command-palette.d.ts.map +1 -1
- package/dist/command-palette.js +49 -15
- package/dist/command-palette.js.map +1 -1
- package/dist/composition-style.d.ts +14 -1
- package/dist/composition-style.d.ts.map +1 -1
- package/dist/composition-style.js.map +1 -1
- package/dist/content-transition.d.ts +6 -2
- package/dist/content-transition.d.ts.map +1 -1
- package/dist/content-transition.js +4 -4
- package/dist/content-transition.js.map +1 -1
- package/dist/context-menu.d.ts +4 -1
- package/dist/context-menu.d.ts.map +1 -1
- package/dist/context-menu.js +2 -2
- package/dist/context-menu.js.map +1 -1
- package/dist/data-table.d.ts +3 -0
- package/dist/data-table.d.ts.map +1 -1
- package/dist/data-table.js +31 -11
- package/dist/data-table.js.map +1 -1
- package/dist/date-picker.d.ts +4 -1
- package/dist/date-picker.d.ts.map +1 -1
- package/dist/date-picker.js +2 -2
- package/dist/date-picker.js.map +1 -1
- package/dist/date-range.d.ts +4 -1
- package/dist/date-range.d.ts.map +1 -1
- package/dist/date-range.js +2 -2
- package/dist/date-range.js.map +1 -1
- package/dist/display.d.ts +4 -0
- package/dist/display.d.ts.map +1 -1
- package/dist/display.js.map +1 -1
- package/dist/duration-field.d.ts +4 -2
- package/dist/duration-field.d.ts.map +1 -1
- package/dist/duration-field.js +2 -2
- package/dist/duration-field.js.map +1 -1
- package/dist/effect-surface.d.ts +4 -2
- package/dist/effect-surface.d.ts.map +1 -1
- package/dist/effect-surface.js +2 -2
- package/dist/effect-surface.js.map +1 -1
- package/dist/evidence.d.ts +1 -1
- package/dist/evidence.js +1 -1
- package/dist/evidence.js.map +1 -1
- package/dist/feedback.d.ts +24 -13
- package/dist/feedback.d.ts.map +1 -1
- package/dist/feedback.js +17 -15
- package/dist/feedback.js.map +1 -1
- package/dist/file-picker.d.ts +5 -0
- package/dist/file-picker.d.ts.map +1 -1
- package/dist/file-picker.js +2 -2
- package/dist/file-picker.js.map +1 -1
- package/dist/floating-action-button.d.ts.map +1 -1
- package/dist/floating-action-button.js.map +1 -1
- package/dist/folder-preview.d.ts +4 -1
- package/dist/folder-preview.d.ts.map +1 -1
- package/dist/folder-preview.js +2 -2
- package/dist/folder-preview.js.map +1 -1
- package/dist/forms.d.ts +35 -3
- package/dist/forms.d.ts.map +1 -1
- package/dist/forms.js +55 -36
- package/dist/forms.js.map +1 -1
- package/dist/gravity-letters.d.ts +4 -2
- package/dist/gravity-letters.d.ts.map +1 -1
- package/dist/gravity-letters.js +2 -2
- package/dist/gravity-letters.js.map +1 -1
- package/dist/grid-reveal.d.ts +4 -2
- package/dist/grid-reveal.d.ts.map +1 -1
- package/dist/grid-reveal.js +2 -2
- package/dist/grid-reveal.js.map +1 -1
- package/dist/heading.d.ts +5 -0
- package/dist/heading.d.ts.map +1 -1
- package/dist/heading.js +8 -1
- package/dist/heading.js.map +1 -1
- package/dist/inline-confirm.d.ts +3 -0
- package/dist/inline-confirm.d.ts.map +1 -1
- package/dist/inline-confirm.js +3 -3
- package/dist/inline-confirm.js.map +1 -1
- package/dist/internal/message-reactions.d.ts +16 -0
- package/dist/internal/message-reactions.d.ts.map +1 -0
- package/dist/internal/message-reactions.js +42 -0
- package/dist/internal/message-reactions.js.map +1 -0
- package/dist/internal/spinner.d.ts +18 -0
- package/dist/internal/spinner.d.ts.map +1 -0
- package/dist/internal/spinner.js +10 -0
- package/dist/internal/spinner.js.map +1 -0
- package/dist/layout.d.ts +12 -0
- package/dist/layout.d.ts.map +1 -1
- package/dist/layout.js +6 -6
- package/dist/layout.js.map +1 -1
- package/dist/masonry.d.ts +4 -1
- package/dist/masonry.d.ts.map +1 -1
- package/dist/masonry.js +5 -3
- package/dist/masonry.js.map +1 -1
- package/dist/mentions.d.ts.map +1 -1
- package/dist/mentions.js +12 -3
- package/dist/mentions.js.map +1 -1
- package/dist/menu-morph.d.ts +8 -1
- package/dist/menu-morph.d.ts.map +1 -1
- package/dist/menu-morph.js +3 -3
- package/dist/menu-morph.js.map +1 -1
- package/dist/menubar.d.ts +4 -1
- package/dist/menubar.d.ts.map +1 -1
- package/dist/menubar.js +4 -3
- package/dist/menubar.js.map +1 -1
- package/dist/modal.d.ts.map +1 -1
- package/dist/modal.js +4 -1
- package/dist/modal.js.map +1 -1
- package/dist/navigation-bar.d.ts +4 -1
- package/dist/navigation-bar.d.ts.map +1 -1
- package/dist/navigation-bar.js +2 -2
- package/dist/navigation-bar.js.map +1 -1
- package/dist/navigation.d.ts +5 -0
- package/dist/navigation.d.ts.map +1 -1
- package/dist/navigation.js +6 -6
- package/dist/navigation.js.map +1 -1
- package/dist/notification-bell.d.ts +4 -1
- package/dist/notification-bell.d.ts.map +1 -1
- package/dist/notification-bell.js +5 -3
- package/dist/notification-bell.js.map +1 -1
- package/dist/number-field.d.ts +11 -0
- package/dist/number-field.d.ts.map +1 -1
- package/dist/number-field.js +8 -3
- package/dist/number-field.js.map +1 -1
- package/dist/overlay-stack.d.ts.map +1 -1
- package/dist/overlay-stack.js.map +1 -1
- package/dist/overlays.d.ts +5 -0
- package/dist/overlays.d.ts.map +1 -1
- package/dist/overlays.js +35 -11
- package/dist/overlays.js.map +1 -1
- package/dist/pagination.d.ts +5 -0
- package/dist/pagination.d.ts.map +1 -1
- package/dist/pagination.js +2 -2
- package/dist/pagination.js.map +1 -1
- package/dist/popover.d.ts.map +1 -1
- package/dist/popover.js +5 -4
- package/dist/popover.js.map +1 -1
- package/dist/portal.d.ts.map +1 -1
- package/dist/portal.js +2 -1
- package/dist/portal.js.map +1 -1
- package/dist/provider-button.d.ts +5 -0
- package/dist/provider-button.d.ts.map +1 -1
- package/dist/provider-button.js +2 -2
- package/dist/provider-button.js.map +1 -1
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js.map +1 -1
- package/dist/qr-code.d.ts +4 -1
- package/dist/qr-code.d.ts.map +1 -1
- package/dist/qr-code.js +2 -2
- package/dist/qr-code.js.map +1 -1
- package/dist/reaction-picker.d.ts +6 -2
- package/dist/reaction-picker.d.ts.map +1 -1
- package/dist/reaction-picker.js +20 -4
- package/dist/reaction-picker.js.map +1 -1
- package/dist/saved-items.d.ts +33 -0
- package/dist/saved-items.d.ts.map +1 -0
- package/dist/saved-items.js +19 -0
- package/dist/saved-items.js.map +1 -0
- package/dist/screen-flows.d.ts +323 -0
- package/dist/screen-flows.d.ts.map +1 -0
- package/dist/screen-flows.js +212 -0
- package/dist/screen-flows.js.map +1 -0
- package/dist/screens.d.ts +120 -0
- package/dist/screens.d.ts.map +1 -0
- package/dist/screens.js +66 -0
- package/dist/screens.js.map +1 -0
- package/dist/select.d.ts +6 -0
- package/dist/select.d.ts.map +1 -1
- package/dist/select.js +13 -3
- package/dist/select.js.map +1 -1
- package/dist/selection.d.ts +28 -1
- package/dist/selection.d.ts.map +1 -1
- package/dist/selection.js +12 -12
- package/dist/selection.js.map +1 -1
- package/dist/side-panel.d.ts.map +1 -1
- package/dist/side-panel.js.map +1 -1
- package/dist/sidebar.d.ts +3 -0
- package/dist/sidebar.d.ts.map +1 -1
- package/dist/sidebar.js +2 -2
- package/dist/sidebar.js.map +1 -1
- package/dist/skip-nav.d.ts.map +1 -1
- package/dist/skip-nav.js.map +1 -1
- package/dist/slider.d.ts +5 -0
- package/dist/slider.d.ts.map +1 -1
- package/dist/slider.js +2 -1
- package/dist/slider.js.map +1 -1
- package/dist/sortable.d.ts +3 -0
- package/dist/sortable.d.ts.map +1 -1
- package/dist/sortable.js +1 -1
- package/dist/sortable.js.map +1 -1
- package/dist/splitter.d.ts +5 -0
- package/dist/splitter.d.ts.map +1 -1
- package/dist/splitter.js +28 -3
- package/dist/splitter.js.map +1 -1
- package/dist/step-player.d.ts +4 -1
- package/dist/step-player.d.ts.map +1 -1
- package/dist/step-player.js +2 -2
- package/dist/step-player.js.map +1 -1
- package/dist/steps.d.ts +5 -0
- package/dist/steps.d.ts.map +1 -1
- package/dist/steps.js +2 -2
- package/dist/steps.js.map +1 -1
- package/dist/styles.css +245 -65
- package/dist/styles.layered.css +245 -65
- package/dist/supplemental-display.d.ts +4 -0
- package/dist/supplemental-display.d.ts.map +1 -1
- package/dist/supplemental-display.js +7 -4
- package/dist/supplemental-display.js.map +1 -1
- package/dist/supplemental-navigation.d.ts +5 -0
- package/dist/supplemental-navigation.d.ts.map +1 -1
- package/dist/supplemental-navigation.js +2 -2
- package/dist/supplemental-navigation.js.map +1 -1
- package/dist/swipe-actions.d.ts +4 -1
- package/dist/swipe-actions.d.ts.map +1 -1
- package/dist/swipe-actions.js +2 -2
- package/dist/swipe-actions.js.map +1 -1
- package/dist/tags-input.d.ts +5 -0
- package/dist/tags-input.d.ts.map +1 -1
- package/dist/tags-input.js +2 -2
- package/dist/tags-input.js.map +1 -1
- package/dist/task-list.d.ts +4 -1
- package/dist/task-list.d.ts.map +1 -1
- package/dist/task-list.js +3 -3
- package/dist/task-list.js.map +1 -1
- package/dist/text-formats.d.ts +5 -0
- package/dist/text-formats.d.ts.map +1 -1
- package/dist/text-formats.js +2 -1
- package/dist/text-formats.js.map +1 -1
- package/dist/theme.d.ts.map +1 -1
- package/dist/theme.js +22 -2
- package/dist/theme.js.map +1 -1
- package/dist/thinking-orb.d.ts +4 -1
- package/dist/thinking-orb.d.ts.map +1 -1
- package/dist/thinking-orb.js +2 -2
- package/dist/thinking-orb.js.map +1 -1
- package/dist/toast.d.ts.map +1 -1
- package/dist/toast.js +10 -4
- package/dist/toast.js.map +1 -1
- package/dist/toggle-group.d.ts +3 -0
- package/dist/toggle-group.d.ts.map +1 -1
- package/dist/toggle-group.js +2 -1
- package/dist/toggle-group.js.map +1 -1
- package/dist/top-bar.d.ts +5 -0
- package/dist/top-bar.d.ts.map +1 -1
- package/dist/top-bar.js +2 -2
- package/dist/top-bar.js.map +1 -1
- package/dist/top.d.ts +5 -0
- package/dist/top.d.ts.map +1 -1
- package/dist/top.js +2 -2
- package/dist/top.js.map +1 -1
- package/dist/tour.d.ts.map +1 -1
- package/dist/tour.js +3 -2
- package/dist/tour.js.map +1 -1
- package/dist/transfer-list.d.ts +3 -0
- package/dist/transfer-list.d.ts.map +1 -1
- package/dist/transfer-list.js +2 -2
- package/dist/transfer-list.js.map +1 -1
- package/dist/tree.d.ts +3 -0
- package/dist/tree.d.ts.map +1 -1
- package/dist/tree.js +17 -5
- package/dist/tree.js.map +1 -1
- package/dist/upload-item.d.ts +5 -0
- package/dist/upload-item.d.ts.map +1 -1
- package/dist/upload-item.js +2 -2
- package/dist/upload-item.js.map +1 -1
- package/dist/virtual-list.d.ts +4 -1
- package/dist/virtual-list.d.ts.map +1 -1
- package/dist/virtual-list.js +2 -2
- package/dist/virtual-list.js.map +1 -1
- package/dist/voice-note.d.ts +4 -1
- package/dist/voice-note.d.ts.map +1 -1
- package/dist/voice-note.js +2 -2
- package/dist/voice-note.js.map +1 -1
- package/dist/watermark.d.ts +4 -1
- package/dist/watermark.d.ts.map +1 -1
- package/dist/watermark.js +2 -2
- package/dist/watermark.js.map +1 -1
- package/package.json +18 -3
package/dist/styles.layered.css
CHANGED
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
/* A child image would otherwise spill past the rounded corner. An elevated tone
|
|
78
78
|
opts out because clipping cuts off its own shadow. */
|
|
79
79
|
.hjm-surface[data-clips="true"] { overflow: hidden; }
|
|
80
|
-
.hjm-surface[data-tone="raised"] { background: var(--hjm-color-bg); box-shadow:
|
|
80
|
+
.hjm-surface[data-tone="raised"] { background: var(--hjm-color-bg); box-shadow: var(--hjm-shadow-floating); }
|
|
81
81
|
.hjm-surface[data-tone="accent"] { background: var(--hjm-color-bg); }
|
|
82
82
|
.hjm-surface[data-tone="sunken"] { background: var(--hjm-color-bg); }
|
|
83
83
|
.hjm-surface[data-tone="subtle"] { background: var(--hjm-color-bg); }
|
|
@@ -130,7 +130,8 @@
|
|
|
130
130
|
}
|
|
131
131
|
.hjm-layout__skip-link {
|
|
132
132
|
position: fixed;
|
|
133
|
-
|
|
133
|
+
/* Focused skip links must remain reachable above transient notifications. */
|
|
134
|
+
z-index: calc(var(--hjm-layer-toast) + 1);
|
|
134
135
|
inset-block-start: var(--hjm-space-sm);
|
|
135
136
|
inset-inline-start: var(--hjm-space-sm);
|
|
136
137
|
padding: var(--hjm-space-sm) var(--hjm-space-md);
|
|
@@ -315,7 +316,13 @@
|
|
|
315
316
|
See issue #19. */
|
|
316
317
|
.hjm-field[data-state="focused"] .hjm-field__control { border-color: var(--hjm-color-content-brand); box-shadow: 0 0 0 var(--hjm-field-focus-ring-width) var(--hjm-color-content-brand); }
|
|
317
318
|
.hjm-field[data-state="invalid"] .hjm-field__control { border-color: var(--hjm-color-danger); }
|
|
318
|
-
.
|
|
319
|
+
/* fieldRecipe.disabledScope (2026-10-06): disabled fades the label and the control, not
|
|
320
|
+
the hint or the error, which explain why the field is locked or what to fix. Fading the
|
|
321
|
+
whole frame (the rule before) took their contrast down with it. Every direct child except
|
|
322
|
+
the support text fades, so a custom Field control dims without needing a class. A component
|
|
323
|
+
recipe value (Select, NumberField, OtpField, SearchField, PasswordField) arrives as an
|
|
324
|
+
inline --hjm-field-disabled-opacity on the root. */
|
|
325
|
+
.hjm-field[data-state="disabled"] > :not(.hjm-field__description):not(.hjm-field__error) { opacity: var(--hjm-field-disabled-opacity); }
|
|
319
326
|
.hjm-field__input {
|
|
320
327
|
inline-size: 100%;
|
|
321
328
|
min-inline-size: 0;
|
|
@@ -347,7 +354,15 @@
|
|
|
347
354
|
.hjm-field__affix { display: inline-flex; align-items: center; color: var(--hjm-color-text-muted); }
|
|
348
355
|
.hjm-field__description, .hjm-choice__description { color: var(--hjm-color-text-muted); font-size: var(--hjm-type-label-size); line-height: var(--hjm-type-label-line-height); }
|
|
349
356
|
.hjm-field__error { color: var(--hjm-color-danger); font-size: var(--hjm-type-label-size); line-height: var(--hjm-type-label-line-height); }
|
|
350
|
-
.
|
|
357
|
+
/* searchFieldRecipe.sizes.* (emitted by theme.ts): medium padding 12 · gap 8 · clear 36 + slop 4, large 52 high ·
|
|
358
|
+
padding 16 · gap 12 · clear 44. Size is applied to the input by TextField; size the control from that public attribute. */
|
|
359
|
+
.hjm-search-field .hjm-field__control { padding-inline: var(--hjm-search-field-padding-medium, var(--hjm-space-sm)); gap: var(--hjm-search-field-gap-medium, var(--hjm-space-xs)); }
|
|
360
|
+
.hjm-search-field:has(.hjm-field__input[data-size="large"]) .hjm-field__control { min-block-size: var(--hjm-control-button-large); padding-inline: var(--hjm-search-field-padding-large, var(--hjm-space-md)); gap: var(--hjm-search-field-gap-large, var(--hjm-space-sm)); }
|
|
361
|
+
.hjm-search-field .hjm-field__input[data-size="large"] { min-block-size: calc(var(--hjm-control-button-large) - 2px); font-size: var(--hjm-type-body-large-size); line-height: var(--hjm-type-body-large-line-height); }
|
|
362
|
+
/* The visible circle is the recipe diameter; ::after extends the hit area by clearHitSlop so the target stays 44. */
|
|
363
|
+
.hjm-search-field__clear { --hjm-search-clear-slop: var(--hjm-search-field-clear-slop-medium, 4px); position: relative; flex: 0 0 auto; inline-size: var(--hjm-search-field-clear-medium, 36px); block-size: var(--hjm-search-field-clear-medium, 36px); display: inline-grid; place-items: center; border: 0; border-radius: 50%; color: inherit; background: transparent; font: inherit; cursor: pointer; }
|
|
364
|
+
.hjm-search-field__clear::after { content: ""; position: absolute; inset: calc(-1 * var(--hjm-search-clear-slop)); border-radius: 50%; }
|
|
365
|
+
.hjm-search-field:has(.hjm-field__input[data-size="large"]) .hjm-search-field__clear { --hjm-search-clear-slop: var(--hjm-search-field-clear-slop-large, 0px); inline-size: var(--hjm-search-field-clear-large, 44px); block-size: var(--hjm-search-field-clear-large, 44px); }
|
|
351
366
|
.hjm-search-field__spinner { inline-size: 32px; block-size: 32px; display: inline-grid; place-items: center; color: var(--hjm-color-content-brand); }
|
|
352
367
|
.hjm-search-field__spinner:empty::before { content: ""; inline-size: 1em; block-size: 1em; border: 2px solid currentColor; border-inline-end-color: transparent; border-radius: 50%; animation: hjm-spin 800ms linear infinite; }
|
|
353
368
|
.hjm-password-field--large .hjm-field__control { min-block-size: var(--hjm-control-button-large); padding-inline: var(--hjm-space-lg); }
|
|
@@ -456,7 +471,7 @@
|
|
|
456
471
|
|
|
457
472
|
.hjm-bottom-navigation {
|
|
458
473
|
position: fixed;
|
|
459
|
-
z-index:
|
|
474
|
+
z-index: var(--hjm-layer-sticky);
|
|
460
475
|
inset-inline: 0;
|
|
461
476
|
inset-block-end: 0;
|
|
462
477
|
padding-block-start: var(--hjm-bottom-navigation-outer-top);
|
|
@@ -479,7 +494,7 @@
|
|
|
479
494
|
.hjm-bottom-navigation[data-presentation="floating"] .hjm-bottom-navigation__surface {
|
|
480
495
|
border: 1px solid var(--hjm-color-border);
|
|
481
496
|
border-radius: var(--hjm-radius-xl);
|
|
482
|
-
box-shadow:
|
|
497
|
+
box-shadow: var(--hjm-shadow-floating);
|
|
483
498
|
}
|
|
484
499
|
.hjm-bottom-navigation__list {
|
|
485
500
|
display: grid;
|
|
@@ -787,10 +802,16 @@
|
|
|
787
802
|
[dir="rtl"] .hjm-switch[data-state="checked"] .hjm-switch__thumb { transform: translateX(calc(-1 * var(--hjm-switch-track-offset))); }
|
|
788
803
|
|
|
789
804
|
.hjm-segmented { min-inline-size: 0; padding: 0; border: 0; }
|
|
790
|
-
|
|
791
|
-
|
|
805
|
+
/* segmentedControlRecipe (2026-10-06 follow-up): track padding/gap spacing.xxs 4, radius lg, 1px border; item radius md,
|
|
806
|
+
medium 44 · padding md, small 36 · padding sm with a 4px vertical hit slop. Web had drawn a 2px track with radius md,
|
|
807
|
+
no small size, and a 1px selected ring; Native already read the recipe. */
|
|
808
|
+
.hjm-segmented__items { display: flex; min-inline-size: 0; gap: var(--hjm-space-xxs); padding: var(--hjm-space-xxs); border: 1px solid var(--hjm-color-border); border-radius: var(--hjm-radius-lg); background: var(--hjm-color-bg); overflow-x: auto; }
|
|
809
|
+
.hjm-segmented__item { position: relative; flex: 1 1 0; min-inline-size: max-content; min-block-size: var(--hjm-control-min-touch-target); display: grid; place-items: center; gap: var(--hjm-space-xxs); padding: 0 var(--hjm-space-md); border-radius: var(--hjm-radius-md); color: var(--hjm-color-text-muted); font-weight: var(--hjm-font-weight-semibold); cursor: pointer; }
|
|
810
|
+
.hjm-segmented[data-size="small"]:not([data-presentation="pills"]) .hjm-segmented__item { min-block-size: 36px; padding-inline: var(--hjm-space-sm); font-size: var(--hjm-type-label-size); line-height: var(--hjm-type-label-line-height); }
|
|
811
|
+
/* Vertical only: neighbours are 4px apart, so a horizontal slop would overlap the next option's target. */
|
|
812
|
+
.hjm-segmented[data-size="small"]:not([data-presentation="pills"]) .hjm-segmented__item::after { content: ""; position: absolute; inset: -4px 0; }
|
|
792
813
|
.hjm-segmented__item input { position: absolute; opacity: 0; }
|
|
793
|
-
.hjm-segmented__item[data-state="checked"] { box-shadow: inset 0 0 0
|
|
814
|
+
.hjm-segmented__item[data-state="checked"] { box-shadow: inset 0 0 0 2px var(--hjm-color-focus); color: var(--hjm-color-content-brand); background: var(--hjm-color-bg); font-weight: var(--hjm-font-weight-bold); }
|
|
794
815
|
.hjm-segmented__item[data-disabled="true"] { opacity: 0.5; cursor: not-allowed; }
|
|
795
816
|
|
|
796
817
|
/* segmentedControlRecipe.adaptive.largeTextLayout stacks oversized labels, matching RN.
|
|
@@ -825,7 +846,7 @@
|
|
|
825
846
|
|
|
826
847
|
.hjm-badge, .hjm-tag { display: inline-flex; align-items: center; gap: var(--hjm-space-xxs); max-inline-size: 100%; overflow-wrap: anywhere; }
|
|
827
848
|
.hjm-badge { min-block-size: 24px; padding: 2px var(--hjm-space-xs); border: 1px solid transparent; border-radius: var(--hjm-radius-full); color: var(--hjm-color-text-muted); background: var(--hjm-color-bg); font-size: var(--hjm-type-caption-size); line-height: var(--hjm-type-caption-line-height); font-weight: var(--hjm-font-weight-bold); }
|
|
828
|
-
.hjm-badge[data-size="small"] { min-block-size: 20px; font-size: var(--hjm-type-caption-size); }
|
|
849
|
+
.hjm-badge[data-size="small"] { min-block-size: 20px; padding-inline: var(--hjm-space-xxs); font-size: var(--hjm-type-caption-size); } /* badgeRecipe.sizes.small.paddingHorizontal xxs 4 (2026-10-06; Web had kept medium's 8) */
|
|
829
850
|
.hjm-badge[data-tone="strong"] { color: var(--hjm-color-bg); background: var(--hjm-color-text); }
|
|
830
851
|
.hjm-badge[data-tone="brand"] { color: var(--hjm-color-content-brand); }
|
|
831
852
|
.hjm-badge[data-tone="info"], .hjm-tag[data-tone="info"] { color: var(--hjm-accent-info); background: var(--hjm-color-bg); border-color: color-mix(in srgb, var(--hjm-accent-info) 30%, transparent); }
|
|
@@ -897,16 +918,22 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
897
918
|
.hjm-section { display: grid; gap: var(--hjm-space-xs); min-inline-size: 0; overflow-wrap: anywhere; }
|
|
898
919
|
.hjm-section__header { display: flex; align-items: center; justify-content: space-between; gap: var(--hjm-space-sm); min-inline-size: 0; }
|
|
899
920
|
.hjm-section__copy { display: grid; flex: 1 1 auto; gap: var(--hjm-space-xxs); min-inline-size: 0; }
|
|
900
|
-
.
|
|
901
|
-
|
|
921
|
+
/* sectionRecipe.title is the `title` variant (18/26 bold) and description the `caption` variant (11/16), as Native draws them.
|
|
922
|
+
Until 2026-10-06 Web inherited body (14) for both, so the same Section header was smaller on Web. */
|
|
923
|
+
.hjm-section__title { margin: 0; color: var(--hjm-color-text-body); font-size: var(--hjm-type-title-size); line-height: var(--hjm-type-title-line-height); font-weight: var(--hjm-font-weight-bold); overflow-wrap: anywhere; }
|
|
924
|
+
.hjm-section__description { color: var(--hjm-color-text-muted); font-size: var(--hjm-type-caption-size); line-height: var(--hjm-type-caption-line-height); overflow-wrap: anywhere; }
|
|
902
925
|
.hjm-section__action { flex: 0 0 auto; }
|
|
903
926
|
.hjm-section__content { min-inline-size: 0; }
|
|
904
|
-
|
|
927
|
+
/* Stack below breakpoint.medium (600), the shared compact/medium edge; 640 had been a Web-only number. */
|
|
928
|
+
@media (max-width: 599.98px) {
|
|
905
929
|
.hjm-section__header { align-items: stretch; flex-direction: column; }
|
|
906
930
|
}
|
|
907
931
|
|
|
908
|
-
.
|
|
909
|
-
.
|
|
932
|
+
/* chipRecipe.sizes (2026-10-06 follow-up): medium 44 · padding md 16 · gap xs 8, small 36 · padding sm 12 · gap xxs 4 with a
|
|
933
|
+
4px vertical hit slop. Web had drawn padding 12/8 and gap 8 for both sizes. */
|
|
934
|
+
.hjm-chip { position: relative; min-block-size: var(--hjm-control-min-touch-target); display: inline-flex; align-items: center; gap: var(--hjm-space-xs); padding-inline: var(--hjm-space-md); border: 1px solid var(--hjm-color-border); border-radius: 999px; background: var(--hjm-color-bg); color: var(--hjm-color-text-body); font: inherit; font-weight: var(--hjm-font-weight-medium); cursor: pointer; }
|
|
935
|
+
.hjm-chip[data-size="small"] { min-block-size: 36px; padding-inline: var(--hjm-space-sm); gap: var(--hjm-space-xxs); }
|
|
936
|
+
.hjm-chip[data-size="small"]::after { content: ""; position: absolute; inset: -4px 0; }
|
|
910
937
|
.hjm-chip[data-selected] { border-color: var(--hjm-color-content-brand); background: var(--hjm-color-bg); color: var(--hjm-color-content-brand); }
|
|
911
938
|
.hjm-chip:disabled { opacity: 0.5; cursor: not-allowed; }
|
|
912
939
|
.hjm-chip:focus-visible { outline: var(--hjm-focus-width) solid var(--hjm-color-focus); outline-offset: var(--hjm-focus-offset); }
|
|
@@ -920,21 +947,31 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
920
947
|
/* Indent only the divider: moving the row shifted every title after the first
|
|
921
948
|
and narrowed its text column in the notification-settings composition. */
|
|
922
949
|
.hjm-list[data-separator="indented"] > .hjm-list__item + .hjm-list__item { position: relative; }
|
|
923
|
-
.hjm-list[data-separator="indented"] > .hjm-list__item + .hjm-list__item::before { content: ""; position: absolute; inset-block-start: 0; inset-inline: var(--hjm-space-
|
|
950
|
+
.hjm-list[data-separator="indented"] > .hjm-list__item + .hjm-list__item::before { content: ""; position: absolute; inset-block-start: 0; inset-inline: calc(40px + var(--hjm-space-sm)) 0; border-block-start: 1px solid var(--hjm-color-border); pointer-events: none; } /* listRecipe.separators.indented.insetStart = leading 40 + sm 12 = 52, as Native (2026-10-06; Web had 24) */
|
|
924
951
|
|
|
925
|
-
.
|
|
952
|
+
/* statisticRecipe.density (2026-10-06 follow-up): line gap comfortable xs 8 · compact xxs 4, surface padding md 16 · sm 12,
|
|
953
|
+
group gap xs 8. Web had drawn 4/2, a fixed 16 and 12, Native read the recipe. */
|
|
954
|
+
.hjm-statistic { display: grid; gap: var(--hjm-space-xs); min-inline-size: 0; color: var(--hjm-color-text-body); }
|
|
926
955
|
.hjm-statistic[data-presentation="surface"] { padding: var(--hjm-space-md); border: 1px solid var(--hjm-color-border); border-radius: var(--hjm-radius-md); background: var(--hjm-color-bg); }
|
|
927
|
-
.hjm-statistic[data-density="compact"] { gap:
|
|
928
|
-
.hjm-
|
|
956
|
+
.hjm-statistic[data-density="compact"] { gap: var(--hjm-space-xxs); }
|
|
957
|
+
.hjm-statistic[data-density="compact"][data-presentation="surface"] { padding: var(--hjm-space-sm); }
|
|
958
|
+
/* Text variants follow statisticRecipe as Native does: label `label` (compact `caption`) semibold, value `heading`
|
|
959
|
+
(compact `title`) heavy, affix `body` semibold in content.body, hint and trend `caption` (trend bold). Until 2026-10-06
|
|
960
|
+
Web drew a body-size medium label, a title-size value at both densities (scaled twice by --hjm-text-scale, which the
|
|
961
|
+
--hjm-type-* sizes already include) and muted affixes. */
|
|
962
|
+
.hjm-statistic__label { color: var(--hjm-color-text-muted); font-size: var(--hjm-type-label-size); line-height: var(--hjm-type-label-line-height); font-weight: var(--hjm-font-weight-semibold); overflow-wrap: anywhere; }
|
|
963
|
+
.hjm-statistic[data-density="compact"] .hjm-statistic__label { font-size: var(--hjm-type-caption-size); line-height: var(--hjm-type-caption-line-height); }
|
|
929
964
|
.hjm-statistic__value-row { display: flex; align-items: baseline; flex-wrap: wrap; gap: var(--hjm-space-xxs); min-inline-size: 0; }
|
|
930
|
-
.hjm-statistic__value { color: var(--hjm-color-text); font-size:
|
|
931
|
-
.hjm-
|
|
932
|
-
.hjm-
|
|
965
|
+
.hjm-statistic__value { color: var(--hjm-color-text); font-size: var(--hjm-type-heading-size); line-height: var(--hjm-type-heading-line-height); font-weight: var(--hjm-font-weight-heavy); font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
|
|
966
|
+
.hjm-statistic[data-density="compact"] .hjm-statistic__value { font-size: var(--hjm-type-title-size); line-height: var(--hjm-type-title-line-height); }
|
|
967
|
+
.hjm-statistic__affix { color: var(--hjm-color-text-body); font-size: var(--hjm-type-body-size); line-height: var(--hjm-type-body-line-height); font-weight: var(--hjm-font-weight-semibold); }
|
|
968
|
+
.hjm-statistic__hint { color: var(--hjm-color-text-muted); font-size: var(--hjm-type-caption-size); line-height: var(--hjm-type-caption-line-height); }
|
|
969
|
+
.hjm-statistic__trend { display: inline-flex; align-items: center; gap: var(--hjm-space-xxs); font-size: var(--hjm-type-caption-size); line-height: var(--hjm-type-caption-line-height); font-weight: var(--hjm-font-weight-bold); overflow-wrap: anywhere; }
|
|
933
970
|
.hjm-statistic__trend[data-tone="success"] { color: var(--hjm-accent-success); }
|
|
934
971
|
.hjm-statistic__trend[data-tone="warning"] { color: var(--hjm-accent-warning); }
|
|
935
972
|
.hjm-statistic__trend[data-tone="danger"] { color: var(--hjm-color-danger); }
|
|
936
|
-
.hjm-statistic-group { display: grid; grid-template-columns: repeat(var(--hjm-statistic-columns), minmax(0, 1fr)); gap: var(--hjm-space-
|
|
937
|
-
@media (max-width:
|
|
973
|
+
.hjm-statistic-group { display: grid; grid-template-columns: repeat(var(--hjm-statistic-columns), minmax(0, 1fr)); gap: var(--hjm-space-xs); min-inline-size: 0; }
|
|
974
|
+
@media (max-width: 599.98px) {
|
|
938
975
|
.hjm-statistic-group { grid-template-columns: minmax(0, 1fr); }
|
|
939
976
|
}
|
|
940
977
|
|
|
@@ -949,7 +986,8 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
949
986
|
.hjm-notice__action { flex: 0 0 auto; max-inline-size: 100%; }
|
|
950
987
|
.hjm-notice__title, .hjm-notice__description { overflow-wrap: anywhere; }
|
|
951
988
|
|
|
952
|
-
.
|
|
989
|
+
/* emptyStateRecipe.density.regular paddingVertical xxxl 40 (2026-10-06; Web had xxl 32, Native read the recipe). */
|
|
990
|
+
.hjm-empty-state { display: grid; justify-items: center; gap: var(--hjm-space-xs); padding: var(--hjm-space-xxxl) var(--hjm-space-xl); color: var(--hjm-color-text-muted); text-align: center; }
|
|
953
991
|
.hjm-empty-state[data-density="compact"] { padding-block: var(--hjm-space-xl); }
|
|
954
992
|
.hjm-empty-state__title { color: var(--hjm-color-text); }
|
|
955
993
|
.hjm-result { display: grid; justify-items: center; gap: var(--hjm-space-sm); padding: var(--hjm-space-xxxl) var(--hjm-space-xl); text-align: center; }
|
|
@@ -976,7 +1014,9 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
976
1014
|
sweep. The element stays a <progress>, so the value, the indeterminate case
|
|
977
1015
|
and the announcement are unchanged — only the paint differs.
|
|
978
1016
|
*/
|
|
979
|
-
|
|
1017
|
+
/* Copy row above the ring at the start edge, like the linear bar and Native (2026-10-06 follow-up). The ring used to sit
|
|
1018
|
+
beside the copy (grid auto 1fr), so the same Progress laid out differently per platform. */
|
|
1019
|
+
.hjm-progress[data-shape="circular"] { justify-items: start; }
|
|
980
1020
|
.hjm-progress[data-shape="circular"] .hjm-progress__native { display: none; }
|
|
981
1021
|
.hjm-progress__ring {
|
|
982
1022
|
position: relative;
|
|
@@ -1054,7 +1094,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
1054
1094
|
border: 1px solid var(--hjm-color-border);
|
|
1055
1095
|
border-radius: var(--hjm-radius-lg);
|
|
1056
1096
|
background: var(--hjm-color-bg);
|
|
1057
|
-
box-shadow:
|
|
1097
|
+
box-shadow: var(--hjm-shadow-overlay);
|
|
1058
1098
|
}
|
|
1059
1099
|
.hjm-command-palette__search {
|
|
1060
1100
|
flex: 0 0 auto;
|
|
@@ -1084,13 +1124,17 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
1084
1124
|
.hjm-command-palette__description { color: var(--hjm-color-text-muted); font-size: var(--hjm-type-label-size); }
|
|
1085
1125
|
.hjm-command-palette__shortcut { color: var(--hjm-color-text-muted); font-size: var(--hjm-type-label-size); }
|
|
1086
1126
|
.hjm-command-palette__state { margin: 0; padding: var(--hjm-space-md); color: var(--hjm-color-text-muted); }
|
|
1127
|
+
.hjm-command-palette__search-row { display: flex; border-block-end: 1px solid var(--hjm-color-border); }
|
|
1128
|
+
.hjm-command-palette__search-row > input { flex: 1; min-inline-size: 0; border: 0; }
|
|
1129
|
+
.hjm-command-palette__search-row > button { margin: 0; }
|
|
1087
1130
|
|
|
1088
1131
|
/* DataTable --------------------------------------------------------------- */
|
|
1089
1132
|
.hjm-data-table { display: flex; flex-direction: column; gap: var(--hjm-space-sm); min-inline-size: 0; }
|
|
1090
1133
|
.hjm-data-table__table { inline-size: 100%; border-collapse: collapse; }
|
|
1091
1134
|
.hjm-data-table__table th,
|
|
1092
1135
|
.hjm-data-table__table td {
|
|
1093
|
-
|
|
1136
|
+
/* dataTableRecipe.density.regular: sm 12 / md 16 (2026-10-06; Web had 12 on all sides). */
|
|
1137
|
+
padding: var(--hjm-space-sm) var(--hjm-space-md);
|
|
1094
1138
|
border-block-end: 1px solid var(--hjm-color-border);
|
|
1095
1139
|
vertical-align: top;
|
|
1096
1140
|
overflow-wrap: anywhere;
|
|
@@ -1143,11 +1187,12 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
1143
1187
|
max-block-size: 14rem;
|
|
1144
1188
|
overflow: auto;
|
|
1145
1189
|
overscroll-behavior: contain;
|
|
1146
|
-
padding
|
|
1190
|
+
/* comboboxRecipe.popover.padding 8, like the Combobox listbox it reuses (4 until 2026-10-06). */
|
|
1191
|
+
padding: var(--hjm-combobox-popover-padding, var(--hjm-space-xs));
|
|
1147
1192
|
border: 1px solid var(--hjm-color-border);
|
|
1148
1193
|
border-radius: var(--hjm-radius-md);
|
|
1149
1194
|
background: var(--hjm-color-bg);
|
|
1150
|
-
box-shadow:
|
|
1195
|
+
box-shadow: var(--hjm-shadow-floating);
|
|
1151
1196
|
pointer-events: auto;
|
|
1152
1197
|
}
|
|
1153
1198
|
.hjm-mentions__option {
|
|
@@ -1209,12 +1254,13 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
1209
1254
|
.hjm-transfer-list__mark[data-checked] { border-color: var(--hjm-color-primary); background: var(--hjm-color-primary); }
|
|
1210
1255
|
.hjm-transfer-list__options { display: flex; flex-direction: column; padding: var(--hjm-space-xxs); }
|
|
1211
1256
|
.hjm-transfer-list__option {
|
|
1257
|
+
/* transferListRecipe.item = collectionItemContract: padding/gap sm 12, radius md (2026-10-06; Web had 8 and radius sm, Native 12). */
|
|
1212
1258
|
display: flex;
|
|
1213
1259
|
align-items: center;
|
|
1214
|
-
gap: var(--hjm-space-
|
|
1260
|
+
gap: var(--hjm-space-sm);
|
|
1215
1261
|
min-block-size: var(--hjm-control-min-touch-target);
|
|
1216
|
-
padding-inline: var(--hjm-space-
|
|
1217
|
-
border-radius: var(--hjm-radius-
|
|
1262
|
+
padding-inline: var(--hjm-space-sm);
|
|
1263
|
+
border-radius: var(--hjm-radius-md);
|
|
1218
1264
|
overflow-wrap: anywhere;
|
|
1219
1265
|
}
|
|
1220
1266
|
/* The label is a flex item; reset its intrinsic min-width so long localized values wrap inside a narrow panel. */
|
|
@@ -1228,7 +1274,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
1228
1274
|
.hjm-transfer-list__empty:focus-visible,
|
|
1229
1275
|
.hjm-transfer-list__select-all:focus-visible { outline: 2px solid var(--hjm-color-focus); outline-offset: -2px; }
|
|
1230
1276
|
.hjm-transfer-list__empty { margin: 0; padding: var(--hjm-space-md) var(--hjm-space-sm); color: var(--hjm-color-text-muted); }
|
|
1231
|
-
.hjm-transfer-list__actions { display: flex; flex-direction: column; gap: var(--hjm-space-
|
|
1277
|
+
.hjm-transfer-list__actions { display: flex; flex-direction: column; gap: var(--hjm-space-sm); /* transferListRecipe.moveControls.gap sm 12, as Native */ padding-block-start: var(--hjm-space-xl); }
|
|
1232
1278
|
|
|
1233
1279
|
/* AuthProviderButton ------------------------------------------------------ */
|
|
1234
1280
|
/* Provider guideline colors cannot follow the theme without failing provider review.
|
|
@@ -1247,6 +1293,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
1247
1293
|
background: var(--hjm-provider-background);
|
|
1248
1294
|
color: var(--hjm-provider-content);
|
|
1249
1295
|
font: inherit;
|
|
1296
|
+
/* authProviderButtonRecipe.label = typography.body; see docs/provider-button.md (provider colour exception). */
|
|
1250
1297
|
font-size: var(--hjm-type-body-size);
|
|
1251
1298
|
line-height: var(--hjm-type-body-line-height);
|
|
1252
1299
|
cursor: pointer;
|
|
@@ -1358,7 +1405,8 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
1358
1405
|
/* A localized skip label can be longer than a narrow viewport; keep the focused link on-screen. */
|
|
1359
1406
|
box-sizing: border-box;
|
|
1360
1407
|
max-inline-size: calc(100vw - var(--hjm-skip-nav-offset) * 2);
|
|
1361
|
-
|
|
1408
|
+
/* Focused skip links must remain reachable above transient notifications. */
|
|
1409
|
+
z-index: calc(var(--hjm-layer-toast) + 1);
|
|
1362
1410
|
display: inline-flex;
|
|
1363
1411
|
align-items: center;
|
|
1364
1412
|
min-block-size: var(--hjm-skip-nav-min-height);
|
|
@@ -1616,7 +1664,10 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
1616
1664
|
.hjm-tags-input__suggestion[aria-selected="true"] { box-shadow: inset 0 0 0 1px var(--hjm-color-content-brand); background: var(--hjm-color-bg); }
|
|
1617
1665
|
.hjm-tags-input__suggestion[aria-disabled="true"] { color: var(--hjm-color-text-weak); cursor: default; }
|
|
1618
1666
|
.hjm-tags-input__description { margin: 0; color: var(--hjm-color-text-muted); font-size: var(--hjm-type-label-size); }
|
|
1619
|
-
|
|
1667
|
+
/* fieldRecipe.disabledScope: the label fades with the frame (it stayed at full contrast before
|
|
1668
|
+
2026-10-06); the description keeps its contrast. The amount is the field default, not a literal. */
|
|
1669
|
+
.hjm-tags-input[data-disabled] :is(.hjm-tags-input__label, .hjm-tags-input__frame) { opacity: var(--hjm-field-disabled-opacity); }
|
|
1670
|
+
.hjm-tags-input[data-disabled] .hjm-tags-input__frame { cursor: default; }
|
|
1620
1671
|
|
|
1621
1672
|
/* Heading ----------------------------------------------------------------- */
|
|
1622
1673
|
/*
|
|
@@ -1827,7 +1878,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
1827
1878
|
.hjm-portal[inert] { visibility: hidden; pointer-events: none; }
|
|
1828
1879
|
.hjm-overlay {
|
|
1829
1880
|
position: fixed;
|
|
1830
|
-
z-index:
|
|
1881
|
+
z-index: var(--hjm-layer-modal);
|
|
1831
1882
|
inset: 0;
|
|
1832
1883
|
display: flex;
|
|
1833
1884
|
align-items: center;
|
|
@@ -1958,9 +2009,16 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
1958
2009
|
display: flex;
|
|
1959
2010
|
flex-direction: column;
|
|
1960
2011
|
overflow: hidden;
|
|
2012
|
+
/* sheetRecipe.content/body/footer (2026-10-06 follow-up): padding top/bottom sm 12, sides lg 20, md 16 between
|
|
2013
|
+
header·body·footer and footer.paddingTop sm 12 more, as Native draws it. Web had used the Dialog's 20 on every
|
|
2014
|
+
side and between slots, so the same sheet was 16px taller on Web. */
|
|
2015
|
+
gap: var(--hjm-space-md);
|
|
2016
|
+
padding-block: var(--hjm-space-sm);
|
|
1961
2017
|
}
|
|
1962
2018
|
.hjm-sheet__header,
|
|
1963
2019
|
.hjm-sheet__footer { flex: 0 0 auto; }
|
|
2020
|
+
.hjm-sheet > .hjm-sheet__header { min-block-size: var(--hjm-control-min-touch-target); gap: var(--hjm-space-sm); padding: 0 var(--hjm-space-lg); }
|
|
2021
|
+
.hjm-sheet > .hjm-sheet__footer { padding: var(--hjm-space-sm) var(--hjm-space-lg) 0; }
|
|
1964
2022
|
.hjm-sheet__body {
|
|
1965
2023
|
min-block-size: 0;
|
|
1966
2024
|
flex: 1 1 auto;
|
|
@@ -1969,18 +2027,23 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
1969
2027
|
overflow: auto;
|
|
1970
2028
|
overscroll-behavior: contain;
|
|
1971
2029
|
}
|
|
2030
|
+
/* The scroll box keeps 4px inside so a child's focus ring is not clipped; the equal negative margin keeps the
|
|
2031
|
+
visible spacing at the recipe's values. */
|
|
2032
|
+
.hjm-sheet > .hjm-sheet__body { gap: var(--hjm-space-md); padding: var(--hjm-space-xxs) var(--hjm-space-lg); margin-block: calc(-1 * var(--hjm-space-xxs)); } /* body.gap between children too, as Native */
|
|
1972
2033
|
.hjm-sheet[data-placement="bottom"] {
|
|
1973
2034
|
inline-size: min(var(--hjm-sheet-max-width), 100%);
|
|
1974
2035
|
max-block-size: var(--hjm-sheet-max-height);
|
|
1975
2036
|
border-end-start-radius: 0;
|
|
1976
2037
|
border-end-end-radius: 0;
|
|
1977
2038
|
}
|
|
1978
|
-
.hjm-sheet[data-placement="bottom"]
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
.hjm-sheet[data-placement="bottom"] > .hjm-sheet__footer {
|
|
1982
|
-
padding-block-end: calc(var(--hjm-space-lg) + env(safe-area-inset-bottom, 0px));
|
|
2039
|
+
.hjm-sheet[data-placement="bottom"] {
|
|
2040
|
+
/* sheetRecipe.safeArea: additive bottom inset on top of content.paddingBottom. */
|
|
2041
|
+
padding-block-end: calc(var(--hjm-space-sm) + env(safe-area-inset-bottom, 0px));
|
|
1983
2042
|
}
|
|
2043
|
+
/* sheetRecipe.sizes.full = 1: the whole height inside the top safe area. maxHeightRatio (0.9) caps only `auto`;
|
|
2044
|
+
until 2026-10-06 it also capped `full` at 90% on both platforms. */
|
|
2045
|
+
.hjm-sheet-positioner[data-placement="bottom"][data-detent="full"] { padding-block-start: env(safe-area-inset-top, 0px); }
|
|
2046
|
+
.hjm-sheet[data-placement="bottom"][data-detent="full"] { max-block-size: 100%; }
|
|
1984
2047
|
/* Detent handle: a control, so it carries the shared minimum target. */
|
|
1985
2048
|
.hjm-sheet__handle-row { display: flex; justify-content: center; flex: 0 0 auto; }
|
|
1986
2049
|
.hjm-sheet__handle {
|
|
@@ -2018,7 +2081,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2018
2081
|
border-radius: 0;
|
|
2019
2082
|
color: var(--hjm-color-text);
|
|
2020
2083
|
background: var(--hjm-color-bg);
|
|
2021
|
-
box-shadow:
|
|
2084
|
+
box-shadow: var(--hjm-shadow-overlay);
|
|
2022
2085
|
}
|
|
2023
2086
|
.hjm-side-panel[data-modal="false"] {
|
|
2024
2087
|
position: fixed;
|
|
@@ -2091,7 +2154,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2091
2154
|
border-radius: var(--hjm-radius-md);
|
|
2092
2155
|
color: var(--hjm-color-text);
|
|
2093
2156
|
background: var(--hjm-color-bg);
|
|
2094
|
-
box-shadow:
|
|
2157
|
+
box-shadow: var(--hjm-shadow-overlay);
|
|
2095
2158
|
pointer-events: auto;
|
|
2096
2159
|
}
|
|
2097
2160
|
.hjm-tour__counter { margin: 0; color: var(--hjm-color-text-muted); font-size: var(--hjm-type-label-size); }
|
|
@@ -2103,10 +2166,14 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2103
2166
|
.hjm-tooltip { position: relative; display: inline-flex; }
|
|
2104
2167
|
.hjm-tooltip__content {
|
|
2105
2168
|
position: fixed;
|
|
2106
|
-
z-index:
|
|
2169
|
+
z-index: var(--hjm-layer-tooltip);
|
|
2107
2170
|
inline-size: max-content;
|
|
2108
|
-
|
|
2109
|
-
|
|
2171
|
+
/* tooltipRecipe.content.maxWidth 280 (theme.ts), never wider than the viewport minus collisionPadding 12 each side.
|
|
2172
|
+
Until 2026-10-06 Web used min(20rem, 80vw), wider than the recipe. */
|
|
2173
|
+
max-inline-size: min(var(--hjm-tooltip-max-width, 280px), calc(100vw - 2 * var(--hjm-tooltip-collision-padding, 12px)));
|
|
2174
|
+
/* tooltipRecipe.surface.padding is spacing.xs (8) on every side. Until 2026-10-06 Web drew 8/12; the recipe has no
|
|
2175
|
+
separate inline value and Native has no Tooltip that could justify one, so the recipe wins. */
|
|
2176
|
+
padding: var(--hjm-tooltip-padding, var(--hjm-space-xs));
|
|
2110
2177
|
border-radius: var(--hjm-radius-sm);
|
|
2111
2178
|
color: var(--hjm-color-bg);
|
|
2112
2179
|
background: var(--hjm-color-text);
|
|
@@ -2118,16 +2185,18 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2118
2185
|
.hjm-menu { position: relative; display: inline-flex; }
|
|
2119
2186
|
.hjm-menu__content {
|
|
2120
2187
|
position: fixed;
|
|
2121
|
-
z-index:
|
|
2188
|
+
z-index: var(--hjm-layer-dropdown);
|
|
2122
2189
|
min-inline-size: 13.75rem;
|
|
2123
2190
|
max-inline-size: min(24rem, 90vw);
|
|
2124
2191
|
max-block-size: calc(100dvh - (2 * var(--hjm-space-md)));
|
|
2125
2192
|
overflow: auto;
|
|
2126
|
-
padding
|
|
2193
|
+
/* menuRecipe.surface (floatingSurfaceContract) padding spacing.xs 8. Until 2026-10-06 Web drew 4 here and in the
|
|
2194
|
+
Select/Combobox/ContextMenu popups that share the same surface contract. */
|
|
2195
|
+
padding: var(--hjm-menu-padding, var(--hjm-space-xs));
|
|
2127
2196
|
border: 1px solid var(--hjm-color-border);
|
|
2128
2197
|
border-radius: var(--hjm-radius-md);
|
|
2129
2198
|
background: var(--hjm-color-bg);
|
|
2130
|
-
box-shadow:
|
|
2199
|
+
box-shadow: var(--hjm-shadow-floating);
|
|
2131
2200
|
}
|
|
2132
2201
|
.hjm-menu__item {
|
|
2133
2202
|
inline-size: 100%;
|
|
@@ -2137,7 +2206,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2137
2206
|
gap: var(--hjm-space-sm);
|
|
2138
2207
|
padding: var(--hjm-space-xs) var(--hjm-space-sm);
|
|
2139
2208
|
border: 0;
|
|
2140
|
-
border-radius: var(--hjm-radius-sm)
|
|
2209
|
+
border-radius: var(--hjm-radius-md); /* menuRecipe.density.* = collectionItemContract.radius md (2026-10-06; was sm) */
|
|
2141
2210
|
color: var(--hjm-color-text-body);
|
|
2142
2211
|
background: transparent;
|
|
2143
2212
|
font: inherit;
|
|
@@ -2174,7 +2243,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2174
2243
|
.hjm-select__indicator { flex: 0 0 auto; color: var(--hjm-color-text-muted); pointer-events: none; }
|
|
2175
2244
|
.hjm-select__busy-indicator { flex: 0 0 auto; inline-size: 1em; block-size: 1em; border: 2px solid var(--hjm-color-content-brand); border-inline-end-color: transparent; border-radius: 50%; animation: hjm-spin 800ms linear infinite; }
|
|
2176
2245
|
.hjm-select__native + .hjm-select__indicator { margin-inline-start: calc(-1 * var(--hjm-space-lg)); }
|
|
2177
|
-
.hjm-select__listbox { position: fixed; z-index:
|
|
2246
|
+
.hjm-select__listbox { position: fixed; z-index: var(--hjm-layer-dropdown); max-inline-size: min(26.25rem, calc(100vw - (2 * var(--hjm-space-md)))); max-block-size: 22.5rem; overflow: auto; padding: var(--hjm-select-popover-padding, var(--hjm-space-xs)); /* selectRecipe.popover.padding 8 (was 4 until 2026-10-06) */ border: 1px solid var(--hjm-color-border); border-radius: var(--hjm-radius-md); background: var(--hjm-color-bg); box-shadow: var(--hjm-shadow-floating); }
|
|
2178
2247
|
.hjm-select__section-label { padding: var(--hjm-space-xs) var(--hjm-space-sm); color: var(--hjm-color-text-muted); font-size: var(--hjm-type-label-size); font-weight: var(--hjm-font-weight-semibold); }
|
|
2179
2248
|
.hjm-select__option, .hjm-select__message { min-block-size: var(--hjm-control-min-touch-target); display: flex; align-items: center; gap: var(--hjm-space-sm); padding: var(--hjm-space-xs) var(--hjm-space-sm); border-radius: var(--hjm-radius-sm); overflow-wrap: anywhere; }
|
|
2180
2249
|
.hjm-select[data-density="comfortable"] .hjm-select__option,
|
|
@@ -2200,14 +2269,14 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2200
2269
|
}
|
|
2201
2270
|
.hjm-combobox__listbox {
|
|
2202
2271
|
position: fixed;
|
|
2203
|
-
z-index:
|
|
2272
|
+
z-index: var(--hjm-layer-dropdown);
|
|
2204
2273
|
max-block-size: 22.5rem;
|
|
2205
2274
|
overflow: auto;
|
|
2206
|
-
padding: var(--hjm-space-
|
|
2275
|
+
padding: var(--hjm-combobox-popover-padding, var(--hjm-space-xs)); /* comboboxRecipe.popover = selectRecipe.popover, 8 (was 4 until 2026-10-06) */
|
|
2207
2276
|
border: 1px solid var(--hjm-color-border);
|
|
2208
2277
|
border-radius: var(--hjm-radius-md);
|
|
2209
2278
|
background: var(--hjm-color-bg);
|
|
2210
|
-
box-shadow:
|
|
2279
|
+
box-shadow: var(--hjm-shadow-floating);
|
|
2211
2280
|
}
|
|
2212
2281
|
.hjm-combobox__option,
|
|
2213
2282
|
.hjm-combobox__message {
|
|
@@ -2367,7 +2436,8 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2367
2436
|
.hjm-file-picker__hint { color: var(--hjm-color-text-muted); }
|
|
2368
2437
|
.hjm-file-picker__error { color: var(--hjm-color-danger); }
|
|
2369
2438
|
|
|
2370
|
-
.
|
|
2439
|
+
/* uploadItemRecipe.row: min 68 (layout.rowHeight.twoLine), padding xs 8 / md 16, gap sm (2026-10-06; Web had 64 and 12). */
|
|
2440
|
+
.hjm-upload-item { min-block-size: 68px; display: flex; flex-wrap: wrap; align-items: center; gap: var(--hjm-space-sm); padding: var(--hjm-space-xs) var(--hjm-space-md); border: 1px solid var(--hjm-color-border); border-radius: var(--hjm-radius-md); }
|
|
2371
2441
|
.hjm-upload-item__leading { flex: 0 0 auto; }
|
|
2372
2442
|
.hjm-upload-item__body { min-inline-size: 0; flex: 1 1 14rem; display: grid; gap: var(--hjm-space-xxs); }
|
|
2373
2443
|
.hjm-upload-item__name { color: var(--hjm-color-text-body); overflow-wrap: anywhere; unicode-bidi: plaintext; }
|
|
@@ -2385,16 +2455,20 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2385
2455
|
.hjm-date-picker__label { color: var(--hjm-color-text); font-weight: var(--hjm-font-weight-semibold); }
|
|
2386
2456
|
.hjm-date-picker__anchor { position: relative; display: flex; align-items: center; }
|
|
2387
2457
|
.hjm-date-picker__trigger { inline-size: 100%; min-block-size: var(--hjm-control-min-touch-target); display: flex; align-items: center; gap: var(--hjm-space-sm); padding-inline: var(--hjm-space-md) 3rem; border: 1px solid var(--hjm-color-border); border-radius: var(--hjm-radius-md); color: var(--hjm-color-text-body); background: var(--hjm-color-bg); font: inherit; text-align: start; cursor: pointer; }
|
|
2388
|
-
.
|
|
2458
|
+
/* datePickerRecipe.sizes.large.minHeight is control.buttonHeight.large (52), as Select/NumberField large. Web drew 56 until 2026-10-06. */
|
|
2459
|
+
.hjm-date-picker[data-size="large"] .hjm-date-picker__trigger { min-block-size: var(--hjm-control-button-large); padding-inline-start: var(--hjm-space-lg); }
|
|
2389
2460
|
.hjm-date-picker[data-invalid] .hjm-date-picker__trigger { border-color: var(--hjm-color-danger); }
|
|
2461
|
+
/* Same scope as .hjm-field (fieldRecipe.disabledScope); before 2026-10-06 a disabled DatePicker
|
|
2462
|
+
looked enabled on both platforms. datePickerRecipe has no amount, so the field default applies. */
|
|
2463
|
+
.hjm-date-picker[data-disabled] :is(.hjm-date-picker__label, .hjm-date-picker__anchor) { opacity: var(--hjm-field-disabled-opacity); }
|
|
2390
2464
|
.hjm-date-picker__trigger [data-placeholder] { color: var(--hjm-color-text-muted); }
|
|
2391
2465
|
.hjm-date-picker__clear { position: absolute; inset-inline-end: 0; inline-size: var(--hjm-control-min-touch-target); block-size: var(--hjm-control-min-touch-target); border: 0; color: var(--hjm-color-text-muted); background: transparent; font: inherit; cursor: pointer; }
|
|
2392
|
-
.hjm-date-picker__popover { position: absolute; z-index:
|
|
2466
|
+
.hjm-date-picker__popover { position: absolute; z-index: var(--hjm-layer-dropdown); inset-block-start: calc(100% + var(--hjm-space-xs)); inset-inline-start: 0; inline-size: min(22.5rem, calc(100vw - 2rem)); padding: var(--hjm-space-sm); border: 1px solid var(--hjm-color-border); border-radius: var(--hjm-radius-lg); color: var(--hjm-color-text); background: var(--hjm-color-bg); box-shadow: var(--hjm-shadow-floating); }
|
|
2393
2467
|
.hjm-date-picker__description { color: var(--hjm-color-text-muted); }
|
|
2394
2468
|
.hjm-date-picker__error { color: var(--hjm-color-danger); }
|
|
2395
2469
|
|
|
2396
2470
|
/* Toast ------------------------------------------------------------------ */
|
|
2397
|
-
.hjm-toast-viewport { position: fixed; z-index:
|
|
2471
|
+
.hjm-toast-viewport { position: fixed; z-index: var(--hjm-layer-toast); inset-inline: max(var(--hjm-space-md), env(safe-area-inset-left)) max(var(--hjm-space-md), env(safe-area-inset-right)); display: flex; flex-direction: column; gap: var(--hjm-space-sm); max-inline-size: min(26.25rem, calc(100vw - (2 * var(--hjm-space-md)))); margin-inline: auto; pointer-events: none; }
|
|
2398
2472
|
.hjm-toast-viewport[data-placement^="top"] { inset-block-start: max(var(--hjm-space-md), env(safe-area-inset-top)); }
|
|
2399
2473
|
.hjm-toast-viewport[data-placement^="bottom"] { inset-block-end: calc(max(var(--hjm-space-md), env(safe-area-inset-bottom)) + var(--hjm-toast-bottom-offset, 0px)); flex-direction: column-reverse; }
|
|
2400
2474
|
.hjm-toast-viewport[data-placement$="-start"] { margin-inline-start: 0; }
|
|
@@ -2492,7 +2566,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2492
2566
|
.hjm-top-bar[data-large-text="true"] .hjm-top-bar__title { grid-column: 1 / -1; grid-row: 2; padding-block: var(--hjm-space-xs); text-align: start; }
|
|
2493
2567
|
.hjm-top-bar[data-large-text="true"] .hjm-top-bar__trailing { grid-column: 2; grid-row: 1; }
|
|
2494
2568
|
.hjm-bottom-cta { display: grid; gap: var(--hjm-bottom-cta-gap); min-block-size: var(--hjm-bottom-cta-min-height); padding: var(--hjm-bottom-cta-padding-top) var(--hjm-bottom-cta-padding-inline) max(var(--hjm-bottom-cta-padding-bottom), env(safe-area-inset-bottom, 0px), var(--hjm-bottom-cta-safe-area)); border-block-start: 1px solid var(--hjm-color-border); background: var(--hjm-color-bg); }
|
|
2495
|
-
.hjm-bottom-cta[data-position="sticky"] { position: sticky; inset-block-end: 0; z-index:
|
|
2569
|
+
.hjm-bottom-cta[data-position="sticky"] { position: sticky; inset-block-end: 0; z-index: var(--hjm-layer-sticky); }
|
|
2496
2570
|
.hjm-bottom-cta__description { margin: 0; font-size: var(--hjm-type-caption-size); line-height: var(--hjm-type-caption-line-height); color: var(--hjm-color-text-muted); overflow-wrap: anywhere; }
|
|
2497
2571
|
.hjm-bottom-cta__actions { display: flex; flex-wrap: wrap; gap: var(--hjm-bottom-cta-gap); }
|
|
2498
2572
|
.hjm-bottom-cta__actions > div { flex: 1 1 calc(var(--hjm-control-min-touch-target) * 3); min-inline-size: 0; }
|
|
@@ -2518,7 +2592,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2518
2592
|
|
|
2519
2593
|
/* The viewport action follows the content in DOM order. Its measured clearance
|
|
2520
2594
|
belongs on the scroll content, not on the fixed button (docs/floating-action-button.md). */
|
|
2521
|
-
.hjm-fab { position: fixed; z-index:
|
|
2595
|
+
.hjm-fab { position: fixed; z-index: var(--hjm-layer-sticky); inset-inline-end: max(var(--hjm-fab-margin), env(safe-area-inset-right, 0px)); inset-block-end: calc(var(--hjm-fab-margin) + max(var(--hjm-fab-safe-area), env(safe-area-inset-bottom, 0px))); max-inline-size: calc(100% - var(--hjm-fab-margin) * 2); min-block-size: var(--hjm-fab-diameter); }
|
|
2522
2596
|
.hjm-fab__icon { display: flex; flex: 0 0 auto; align-items: center; justify-content: center; }
|
|
2523
2597
|
.hjm-fab[data-direction="rtl"] { inset-inline-end: max(var(--hjm-fab-margin), env(safe-area-inset-left, 0px)); }
|
|
2524
2598
|
.hjm-fab[data-mode="collapsed"] { inline-size: var(--hjm-fab-diameter); padding-inline: 0; gap: 0; }
|
|
@@ -2592,7 +2666,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2592
2666
|
/* Both surfaces reuse the menu's floating look; only the anchor differs. */
|
|
2593
2667
|
.hjm-context-menu-host { min-inline-size: 0; }
|
|
2594
2668
|
.hjm-context-menu-host:focus-visible { outline: 2px solid var(--hjm-color-focus); outline-offset: 2px; }
|
|
2595
|
-
.hjm-context-menu { position: fixed; max-inline-size: min(24rem, 90vw); max-block-size: calc(100dvh - (2 * var(--hjm-space-md))); overflow: auto; padding: var(--hjm-space-
|
|
2669
|
+
.hjm-context-menu { position: fixed; max-inline-size: min(24rem, 90vw); max-block-size: calc(100dvh - (2 * var(--hjm-space-md))); overflow: auto; padding: var(--hjm-menu-padding, var(--hjm-space-xs)); /* ContextMenu reads menuRecipe like Menu (was 4 until 2026-10-06) */ border: 1px solid var(--hjm-color-border); border-radius: var(--hjm-radius-md); background: var(--hjm-color-bg); box-shadow: var(--hjm-shadow-floating); }
|
|
2596
2670
|
.hjm-context-menu__item { min-block-size: var(--hjm-control-min-touch-target); display: flex; align-items: center; justify-content: space-between; gap: var(--hjm-space-sm); padding: var(--hjm-space-xs) var(--hjm-space-sm); border-radius: var(--hjm-radius-sm); color: var(--hjm-color-text-body); cursor: pointer; }
|
|
2597
2671
|
/* Wrap long labels so commands stay readable inside the viewport-bounded menu; truncation was rejected because it hides command meaning. */
|
|
2598
2672
|
.hjm-context-menu__item > span { min-inline-size: 0; overflow-wrap: anywhere; }
|
|
@@ -2607,7 +2681,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2607
2681
|
.hjm-menubar__label[data-open] { background: var(--hjm-color-bg); box-shadow: inset 0 0 0 1px var(--hjm-color-content-brand); }
|
|
2608
2682
|
.hjm-menubar__label:disabled { opacity: 0.5; cursor: not-allowed; }
|
|
2609
2683
|
.hjm-menubar__label:focus-visible { outline: 2px solid var(--hjm-color-focus); outline-offset: 2px; }
|
|
2610
|
-
.hjm-menubar__panel { position: absolute; inset-block-start: 100%; inset-inline-start: 0; z-index:
|
|
2684
|
+
.hjm-menubar__panel { position: absolute; inset-block-start: 100%; inset-inline-start: 0; z-index: var(--hjm-layer-dropdown); min-inline-size: 13.75rem; max-inline-size: min(24rem, 90vw); padding: var(--hjm-space-xxs); border: 1px solid var(--hjm-color-border); border-radius: var(--hjm-radius-md); background: var(--hjm-color-bg); box-shadow: var(--hjm-shadow-floating); }
|
|
2611
2685
|
.hjm-menubar__item { min-block-size: var(--hjm-control-min-touch-target); display: flex; align-items: center; justify-content: space-between; gap: var(--hjm-space-sm); padding: var(--hjm-space-xs) var(--hjm-space-sm); border-radius: var(--hjm-radius-sm); color: var(--hjm-color-text-body); cursor: pointer; }
|
|
2612
2686
|
.hjm-menubar__item[data-active] { background: var(--hjm-color-bg); box-shadow: inset 0 0 0 1px var(--hjm-color-content-brand); }
|
|
2613
2687
|
.hjm-menubar__item[data-tone="danger"] { color: var(--hjm-color-danger); }
|
|
@@ -2690,7 +2764,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2690
2764
|
.hjm-bottom-navigation[data-presentation="capsule"] .hjm-bottom-navigation__list {
|
|
2691
2765
|
display: flex; flex: 1; min-inline-size: 0; padding: var(--hjm-space-xxs);
|
|
2692
2766
|
background: var(--hjm-color-surface); border: 1px solid var(--hjm-color-border);
|
|
2693
|
-
border-radius: var(--hjm-radius-full); box-shadow:
|
|
2767
|
+
border-radius: var(--hjm-radius-full); box-shadow: var(--hjm-shadow-floating);
|
|
2694
2768
|
}
|
|
2695
2769
|
.hjm-bottom-navigation[data-presentation="capsule"] li { flex: 1; min-inline-size: 44px; }
|
|
2696
2770
|
.hjm-bottom-navigation[data-presentation="capsule"][data-expanded-labels="false"] li[data-selected="true"] { flex: 2; }
|
|
@@ -2710,7 +2784,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2710
2784
|
display: flex; flex-wrap: wrap; align-items: center; gap: var(--hjm-space-md);
|
|
2711
2785
|
padding: var(--hjm-space-sm); border: 1px solid var(--hjm-color-border);
|
|
2712
2786
|
border-radius: var(--hjm-radius-xl); background: var(--hjm-color-surface);
|
|
2713
|
-
color: var(--hjm-color-text); box-shadow:
|
|
2787
|
+
color: var(--hjm-color-text); box-shadow: var(--hjm-shadow-floating);
|
|
2714
2788
|
}
|
|
2715
2789
|
@supports (backdrop-filter: blur(20px)) {
|
|
2716
2790
|
.hjm-navigation-bar { background: color-mix(in srgb, var(--hjm-color-surface) 92%, transparent); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); }
|
|
@@ -2724,4 +2798,110 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2724
2798
|
|
|
2725
2799
|
[data-motion="reduced"] .hjm-bottom-navigation[data-presentation="capsule"] .hjm-bottom-navigation__item { transition: none; }
|
|
2726
2800
|
|
|
2801
|
+
/* Screen bodies own remaining height so full-screen states center below the real header.
|
|
2802
|
+
Auto margins (not unsafe center alignment) keep oversized translations scrollable. */
|
|
2803
|
+
.hjm-screen { display: flex; flex-direction: column; block-size: 100%; min-block-size: 0; inline-size: 100%; max-inline-size: var(--hjm-screen-width); margin-inline: auto; background: var(--hjm-color-bg); color: var(--hjm-color-text); }
|
|
2804
|
+
/* Header items sit screenPatternRecipe.itemGap (sm 12) apart and the state block stateGap (md 16), as Native. Until 2026-10-06
|
|
2805
|
+
Web reused the content inset (16) for both, which also collapsed them to 0 with contentInset="none". */
|
|
2806
|
+
.hjm-screen__header { display: flex; flex-wrap: wrap; align-items: center; gap: var(--hjm-screen-item-gap, var(--hjm-space-sm)); padding: var(--hjm-screen-padding); flex: 0 0 auto; }
|
|
2807
|
+
.hjm-screen__heading { flex: 1 1 calc(var(--hjm-screen-header-min) * var(--hjm-text-scale, 1)); min-inline-size: 0; overflow-wrap: anywhere; }
|
|
2808
|
+
.hjm-screen__heading > * { margin: 0; }
|
|
2809
|
+
.hjm-screen__notice { padding-inline: var(--hjm-screen-padding); flex: 0 0 auto; }
|
|
2810
|
+
.hjm-screen__body { flex: 1 1 0%; min-block-size: 0; min-inline-size: 0; padding: var(--hjm-screen-padding); overflow-wrap: anywhere; }
|
|
2811
|
+
.hjm-screen__body[data-scroll="screen"] { overflow-y: auto; }
|
|
2812
|
+
.hjm-screen__body[data-scroll="content"] { display: flex; flex-direction: column; overflow: hidden; }
|
|
2813
|
+
.hjm-screen__body[data-replacement="true"] { display: flex; flex-direction: column; }
|
|
2814
|
+
.hjm-screen__state { margin-block: auto; flex-shrink: 0; display: flex; flex-direction: column; align-items: center; gap: var(--hjm-screen-state-gap, var(--hjm-space-md)); padding-block: var(--hjm-screen-gap); text-align: center; }
|
|
2815
|
+
.hjm-screen__footer { flex: 0 0 auto; padding: var(--hjm-screen-padding); padding-block-end: max(var(--hjm-screen-padding), env(safe-area-inset-bottom)); border-block-start: 1px solid var(--hjm-color-border); }
|
|
2816
|
+
/* SearchScreen filtersOverflow=scroll; why: screen-flows.tsx. Block padding keeps focus rings unclipped. */
|
|
2817
|
+
.hjm-search-screen__filters { --f: calc(var(--hjm-focus-width) + var(--hjm-focus-offset)); overflow-x: auto; margin: calc(-1 * var(--f)) calc(-1 * var(--hjm-screen-padding)); padding: var(--f) var(--hjm-screen-padding); scroll-padding-inline: var(--hjm-screen-padding); scrollbar-width: none; }
|
|
2818
|
+
.hjm-search-screen__filters > * { inline-size: max-content; }
|
|
2819
|
+
|
|
2820
|
+
/* Settings use spacing and rules, not shaded cards, per the 2026-10-05 product direction. */
|
|
2821
|
+
.hjm-settings-section > .hjm-section__content { background: transparent; border-block-start: 1px solid var(--hjm-color-border); }
|
|
2822
|
+
.hjm-settings-section .hjm-list-row { background: transparent; }
|
|
2823
|
+
.hjm-notification-item { border-radius: 0; }
|
|
2824
|
+
.hjm-notification-item[data-unread="true"] { background: transparent; }
|
|
2825
|
+
/* screenPatternRecipe.itemGap (sm 12) between the context/reply/attachment rows and between the editor and send, as Native.
|
|
2826
|
+
Web drew xs 8 until 2026-10-06. */
|
|
2827
|
+
.hjm-message-composer { display: flex; flex-direction: column; gap: var(--hjm-message-composer-gap, var(--hjm-space-sm)); }
|
|
2828
|
+
.hjm-message-composer__row { display: flex; gap: var(--hjm-message-composer-gap, var(--hjm-space-sm)); align-items: flex-end; }
|
|
2829
|
+
.hjm-message-composer__row > .hjm-field { flex: 1; min-inline-size: 0; }
|
|
2830
|
+
.hjm-message-composer__row > .hjm-button { flex-shrink: 0; }
|
|
2831
|
+
.hjm-chat-message { display: flex; align-items: flex-start; gap: var(--hjm-space-xs); }
|
|
2832
|
+
.hjm-chat-message[data-direction="outgoing"] { flex-direction: row-reverse; }
|
|
2833
|
+
/* A visible opposite edge distinguishes authorship even without color; long copy still wraps. */
|
|
2834
|
+
.hjm-chat-message__content { max-inline-size: var(--hjm-message-max-width); min-inline-size: 0; display: flex; flex-direction: column; align-items: flex-start; gap: var(--hjm-space-xxs); }
|
|
2835
|
+
.hjm-chat-message[data-direction="outgoing"] .hjm-chat-message__content { align-items: flex-end; }
|
|
2836
|
+
.hjm-chat-message__bubble { border: var(--hjm-stroke-default) solid var(--hjm-color-border); border-radius: var(--hjm-radius-lg); background: var(--hjm-color-bg); padding: var(--hjm-space-sm); overflow-wrap: anywhere; white-space: pre-wrap; }
|
|
2837
|
+
.hjm-chat-message[data-direction="outgoing"] .hjm-chat-message__bubble { background: var(--hjm-color-surface-accent); }
|
|
2838
|
+
.hjm-chat-message__meta { display: flex; align-items: center; gap: var(--hjm-space-xs); }
|
|
2839
|
+
.hjm-chat-message__reply { border-inline-start: 2px solid var(--hjm-color-content-brand); padding-inline-start: var(--hjm-space-xs); margin-block-end: var(--hjm-space-xs); }
|
|
2840
|
+
|
|
2841
|
+
/* A composer starts at one control row rather than the document editor minimum;
|
|
2842
|
+
content sizing grows up to the shared line cap without stealing the timeline. */
|
|
2843
|
+
.hjm-message-composer__row > .hjm-field { --hjm-field-multiline-min-height: var(--hjm-control-field-height); }
|
|
2844
|
+
.hjm-message-composer textarea { field-sizing: content; resize: none; }
|
|
2845
|
+
|
|
2846
|
+
/* Social composition: one field boundary and no permanent attachment toolbar. */
|
|
2847
|
+
.hjm-field__control--multiline > .hjm-field__trailing { align-self: flex-end; }
|
|
2848
|
+
/* TextArea leadingAction: an action, so no muted .hjm-field__affix color; centred on the growing text. */
|
|
2849
|
+
.hjm-field__control--multiline > .hjm-field__leading { display: flex; align-self: center; }
|
|
2850
|
+
.hjm-message-composer__attachments { display: flex; gap: var(--hjm-space-sm); align-items: center; overflow-x: auto; }
|
|
2851
|
+
.hjm-message-composer__attachment { position: relative; flex: 0 0 var(--hjm-attachment-size); inline-size: var(--hjm-attachment-size); block-size: var(--hjm-attachment-size); }
|
|
2852
|
+
.hjm-message-composer__preview { inline-size: 100%; block-size: 100%; border-radius: var(--hjm-radius-md); overflow: hidden; }
|
|
2853
|
+
.hjm-message-composer__preview > img { inline-size: 100%; block-size: 100%; object-fit: cover; }
|
|
2854
|
+
/* Clip only the photo: its rounded mask must not cut the remove button or focus ring. */
|
|
2855
|
+
.hjm-message-composer__remove { position: absolute; inset-block-start: 0; inset-inline-end: 0; }
|
|
2856
|
+
.hjm-message-composer__remove-glyph { display: grid; place-items: center; flex: 0 0 auto; inline-size: var(--hjm-attachment-remove-size); block-size: var(--hjm-attachment-remove-size); font-size: calc(var(--hjm-attachment-remove-size) * .75); line-height: 1; background: var(--hjm-color-bg); border-radius: var(--hjm-radius-full); }
|
|
2857
|
+
.hjm-message-reactions { border-radius: var(--hjm-radius-full); padding: var(--hjm-space-xs); max-inline-size: calc(100vw - 24px); inline-size: max-content; }
|
|
2858
|
+
/* Keep Popover's localized heading/close action available to assistive technology. */
|
|
2859
|
+
.hjm-message-reactions > .hjm-popover__header { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
|
|
2860
|
+
/* The close button stays a Tab stop (Escape is not discoverable for every keyboard user), so
|
|
2861
|
+
reveal the header while it holds focus instead of leaving a 1px focus target. Removing the
|
|
2862
|
+
button from the tab order was rejected: it would leave the dialog without a visible exit. */
|
|
2863
|
+
.hjm-message-reactions > .hjm-popover__header:focus-within { position: static; width: auto; height: auto; margin: 0 0 var(--hjm-space-xs); overflow: visible; clip-path: none; white-space: normal; }
|
|
2864
|
+
|
|
2865
|
+
/* The expanded reaction catalog needs a bounded panel rather than the quick-row pill. */
|
|
2866
|
+
.hjm-message-reactions:has([data-expanded="true"]) { border-radius: var(--hjm-radius-lg); inline-size: min(20rem, calc(100vw - 24px)); }
|
|
2867
|
+
|
|
2868
|
+
/* ReactionPicker. 20rem is screenPatternRecipe.reactionMenuWidth (320) and 15rem matches Native's
|
|
2869
|
+
240pt catalog height at the default root size; rem keeps both proportional to large text.
|
|
2870
|
+
Copied here because importing screen-patterns would add a module edge to the ./reaction-picker
|
|
2871
|
+
entry (budget: 3 modules). Remove the copies when the reactions contract exports these sizes. */
|
|
2872
|
+
.hjm-reaction-picker { display: flex; flex-direction: row; min-inline-size: 0; }
|
|
2873
|
+
.hjm-reaction-picker[data-expanded] { flex-direction: column; }
|
|
2874
|
+
.hjm-reaction-picker__options { display: flex; flex: 1; flex-wrap: wrap; gap: var(--hjm-space-xs); min-inline-size: 0; }
|
|
2875
|
+
.hjm-reaction-picker[data-layout="strip"]:not([data-expanded]) > .hjm-reaction-picker__options { flex-wrap: nowrap; overflow-x: auto; }
|
|
2876
|
+
.hjm-reaction-picker[data-expanded] > .hjm-reaction-picker__options { overflow-y: auto; max-block-size: 15rem; inline-size: min(20rem, 100%); }
|
|
2877
|
+
.hjm-reaction-picker > :last-child { flex-shrink: 0; }
|
|
2878
|
+
/* Only the chat strip enlarges glyphs, to the title type step Native's strip uses. The default
|
|
2879
|
+
wrap layout keeps the button's own size, as published before the strip existed. */
|
|
2880
|
+
.hjm-reaction-picker[data-layout="strip"] .hjm-reaction-picker__glyph { font-size: var(--hjm-type-title-size); line-height: var(--hjm-type-title-line-height); }
|
|
2881
|
+
|
|
2882
|
+
/* The embedded circle uses the small 36px recipe; centre it in the field rather than on the text baseline.
|
|
2883
|
+
Reduce only its trailing inset to 8px, preserving the text's 16px leading padding. */
|
|
2884
|
+
.hjm-message-composer[data-send-presentation="circle"] .hjm-field__trailing { display: flex; align-self: center; margin-inline-end: calc(var(--hjm-space-xs) - var(--hjm-space-md)); margin-inline-start: var(--hjm-space-sm); }
|
|
2885
|
+
|
|
2886
|
+
/* Saved collections use a two-column cover grid, then a dense three-column media grid.
|
|
2887
|
+
Product thumbnails are slots; colors and spacing stay on HJM semantic tokens. */
|
|
2888
|
+
.hjm-saved-collection,.hjm-saved-post { min-width:0; margin:0; padding:0; border:0; background:transparent; color:inherit; font:inherit; text-align:start; cursor:pointer; }
|
|
2889
|
+
.hjm-saved-collection { display:flex; flex-direction:column; gap:var(--hjm-space-sm); }
|
|
2890
|
+
.hjm-saved-collection__cover { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); width:100%; aspect-ratio:1; gap:var(--hjm-space-xxs); overflow:hidden; border-radius:var(--hjm-radius-md); background:var(--hjm-color-surface-alt); }
|
|
2891
|
+
.hjm-saved-collection__cover > span { min-width:0; min-height:0; overflow:hidden; }
|
|
2892
|
+
.hjm-saved-post { aspect-ratio:1; overflow:hidden; background:var(--hjm-color-surface-alt); }
|
|
2893
|
+
.hjm-saved-collection__cover img,.hjm-saved-post img { width:100%; height:100%; object-fit:cover; border-radius:0; display:block; }
|
|
2894
|
+
.hjm-saved-collection:focus-visible,.hjm-saved-post:focus-visible { outline:2px solid var(--hjm-color-focus); outline-offset:2px; }
|
|
2895
|
+
|
|
2896
|
+
/* Filter pills keep the same native radio semantics and 44px hit target. The inner
|
|
2897
|
+
surface is compact; the group wraps at large type instead of clipping labels. */
|
|
2898
|
+
.hjm-segmented[data-presentation="pills"] { background:transparent; border:0; padding:0; }
|
|
2899
|
+
.hjm-segmented[data-presentation="pills"] .hjm-segmented__items { flex-wrap:wrap; gap:var(--hjm-space-xs); overflow:visible; padding:0; border:0; border-radius:0; background:transparent; }
|
|
2900
|
+
.hjm-segmented[data-presentation="pills"] .hjm-segmented__item { position:relative; flex:0 1 auto; min-inline-size:0; min-block-size:var(--hjm-control-min-touch-target); border:0; border-radius:var(--hjm-radius-full); background:transparent; box-shadow:none; padding-inline:var(--hjm-space-md); color:var(--hjm-color-text-muted); }
|
|
2901
|
+
.hjm-segmented[data-presentation="pills"] .hjm-segmented__item::before { content:""; position:absolute; inset:var(--hjm-space-xs) 0; border-radius:var(--hjm-radius-full); background:var(--hjm-color-surface-alt); }
|
|
2902
|
+
.hjm-segmented[data-presentation="pills"] .hjm-segmented__item > span { position:relative; overflow-wrap:anywhere; }
|
|
2903
|
+
.hjm-segmented[data-presentation="pills"] .hjm-segmented__item[data-state="checked"] { color:var(--hjm-color-bg); font-weight:var(--hjm-font-weight-bold); }
|
|
2904
|
+
.hjm-segmented[data-presentation="pills"] .hjm-segmented__item[data-state="checked"]::before { background:var(--hjm-color-text-body); }
|
|
2905
|
+
.hjm-segmented[data-presentation="pills"] .hjm-segmented__item:focus-within { outline:2px solid var(--hjm-color-focus); outline-offset:2px; }
|
|
2906
|
+
|
|
2727
2907
|
}
|