@moldable-ai/ui 0.2.29 → 0.2.31
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/catalog/component-catalog.d.ts +9 -2
- package/dist/catalog/component-catalog.d.ts.map +1 -1
- package/dist/catalog/component-catalog.js +11 -7
- package/dist/catalog/core-control-stories.d.ts.map +1 -1
- package/dist/catalog/core-control-stories.js +1 -1
- package/dist/catalog/core-foundation-stories.d.ts.map +1 -1
- package/dist/catalog/core-foundation-stories.js +5 -5
- package/dist/components/ui/app-frame.d.ts +20 -1
- package/dist/components/ui/app-frame.d.ts.map +1 -1
- package/dist/components/ui/app-frame.js +37 -7
- package/dist/components/ui/badge.d.ts +1 -1
- package/dist/components/ui/badge.js +1 -1
- package/dist/components/ui/button.d.ts +5 -3
- package/dist/components/ui/button.d.ts.map +1 -1
- package/dist/components/ui/button.js +39 -11
- package/dist/components/ui/card.d.ts +12 -2
- package/dist/components/ui/card.d.ts.map +1 -1
- package/dist/components/ui/card.js +3 -2
- package/dist/components/ui/checkbox.d.ts +4 -1
- package/dist/components/ui/checkbox.d.ts.map +1 -1
- package/dist/components/ui/checkbox.js +4 -4
- package/dist/components/ui/context-menu.js +6 -6
- package/dist/components/ui/dropdown-menu.js +6 -6
- package/dist/components/ui/icon-button.d.ts +1 -1
- package/dist/components/ui/icon-button.d.ts.map +1 -1
- package/dist/components/ui/icon-button.js +1 -0
- package/dist/components/ui/input.d.ts +6 -2
- package/dist/components/ui/input.d.ts.map +1 -1
- package/dist/components/ui/input.js +2 -2
- package/dist/components/ui/material.d.ts +8 -3
- package/dist/components/ui/material.d.ts.map +1 -1
- package/dist/components/ui/material.js +2 -2
- package/dist/components/ui/search-field.d.ts +3 -1
- package/dist/components/ui/search-field.d.ts.map +1 -1
- package/dist/components/ui/search-field.js +16 -6
- package/dist/components/ui/segmented-control.d.ts +3 -1
- package/dist/components/ui/segmented-control.d.ts.map +1 -1
- package/dist/components/ui/segmented-control.js +23 -17
- package/dist/components/ui/select.js +2 -2
- package/dist/components/ui/sidebar.d.ts +5 -3
- package/dist/components/ui/sidebar.d.ts.map +1 -1
- package/dist/components/ui/sidebar.js +53 -15
- package/dist/components/ui/status.d.ts +1 -1
- package/dist/components/ui/status.js +1 -1
- package/dist/components/ui/switch.d.ts +3 -1
- package/dist/components/ui/switch.d.ts.map +1 -1
- package/dist/components/ui/switch.js +3 -2
- package/dist/components/ui/toolbar-controls.d.ts +3 -1
- package/dist/components/ui/toolbar-controls.d.ts.map +1 -1
- package/dist/components/ui/toolbar-controls.js +14 -7
- package/dist/components/ui/toolbar.d.ts +5 -4
- package/dist/components/ui/toolbar.d.ts.map +1 -1
- package/dist/components/ui/toolbar.js +3 -3
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/lib/frame-lifecycle.d.ts +1 -0
- package/dist/lib/frame-lifecycle.d.ts.map +1 -1
- package/dist/lib/frame-lifecycle.js +7 -0
- package/dist/lib/theme.d.ts +39 -5
- package/dist/lib/theme.d.ts.map +1 -1
- package/dist/lib/theme.js +105 -17
- package/dist/tokens/contracts.d.ts +79 -0
- package/dist/tokens/contracts.d.ts.map +1 -0
- package/dist/tokens/contracts.js +57 -0
- package/dist/tokens/index.d.ts +2 -0
- package/dist/tokens/index.d.ts.map +1 -0
- package/dist/tokens/index.js +1 -0
- package/docs/README.md +2 -0
- package/docs/adaptive-materials.md +14 -9
- package/docs/design-tokens.md +10 -6
- package/docs/foundations.md +3 -3
- package/docs/macos-design-audit.md +144 -0
- package/docs/native-integration.md +4 -4
- package/docs/platform-architecture.md +189 -0
- package/docs/standalone-app-windows.md +37 -0
- package/docs/visual-regression.md +6 -8
- package/package.json +13 -1
- package/src/components/ui/accordion.md +46 -0
- package/src/components/ui/alert.md +12 -4
- package/src/components/ui/app-frame.md +8 -5
- package/src/components/ui/aspect-ratio.md +37 -0
- package/src/components/ui/avatar.md +48 -0
- package/src/components/ui/breadcrumb.md +52 -0
- package/src/components/ui/button-group.md +43 -0
- package/src/components/ui/button.md +20 -4
- package/src/components/ui/calendar.md +42 -0
- package/src/components/ui/card.md +43 -0
- package/src/components/ui/carousel.md +47 -0
- package/src/components/ui/chart.md +52 -0
- package/src/components/ui/checkbox.md +36 -0
- package/src/components/ui/collapsible.md +2 -3
- package/src/components/ui/color-well.md +14 -4
- package/src/components/ui/combobox.md +3 -3
- package/src/components/ui/confirm-dialog.md +5 -4
- package/src/components/ui/context-menu.md +3 -2
- package/src/components/ui/date-field.md +6 -1
- package/src/components/ui/date-picker.md +6 -3
- package/src/components/ui/dialog.md +14 -12
- package/src/components/ui/drawer.md +58 -0
- package/src/components/ui/error-boundary-view.md +1 -1
- package/src/components/ui/field.md +2 -1
- package/src/components/ui/form.md +71 -0
- package/src/components/ui/grid.md +4 -3
- package/src/components/ui/icon-button.md +4 -1
- package/src/components/ui/input-group.md +49 -0
- package/src/components/ui/input-otp.md +56 -0
- package/src/components/ui/input.md +40 -0
- package/src/components/ui/inspector.md +47 -7
- package/src/components/ui/item.md +5 -3
- package/src/components/ui/kbd.md +30 -0
- package/src/components/ui/label.md +29 -0
- package/src/components/ui/list.md +2 -2
- package/src/components/ui/material.md +25 -12
- package/src/components/ui/menu-items.md +60 -0
- package/src/components/ui/menubar.md +58 -0
- package/src/components/ui/message-scroller-primitive.md +70 -0
- package/src/components/ui/message-scroller.md +86 -0
- package/src/components/ui/navigation-button-group.md +4 -3
- package/src/components/ui/navigation-menu.md +52 -0
- package/src/components/ui/number-input.md +8 -0
- package/src/components/ui/pagination.md +51 -0
- package/src/components/ui/panel.md +6 -0
- package/src/components/ui/popover.md +10 -7
- package/src/components/ui/progress.md +31 -0
- package/src/components/ui/radio-group.md +36 -0
- package/src/components/ui/resizable.md +2 -1
- package/src/components/ui/scroll-area.md +3 -1
- package/src/components/ui/search-field.md +6 -1
- package/src/components/ui/segmented-control.md +6 -1
- package/src/components/ui/separator.md +35 -0
- package/src/components/ui/sidebar.md +20 -3
- package/src/components/ui/skeleton.md +36 -0
- package/src/components/ui/slider.md +58 -0
- package/src/components/ui/spinner.md +41 -0
- package/src/components/ui/split-view.md +8 -4
- package/src/components/ui/switch.md +44 -0
- package/src/components/ui/table.md +7 -7
- package/src/components/ui/tabs.md +3 -1
- package/src/components/ui/textarea.md +41 -0
- package/src/components/ui/toggle-group.md +2 -2
- package/src/components/ui/toggle.md +9 -9
- package/src/components/ui/toolbar-controls.md +17 -9
- package/src/components/ui/toolbar.md +6 -6
- package/src/styles/index.css +171 -117
- package/src/tokens/contracts.ts +131 -0
- package/src/tokens/index.css +6 -0
- package/src/tokens/index.ts +23 -0
- package/src/tokens/macos-26/README.md +37 -0
- package/src/tokens/macos-26/aliases.css +53 -0
- package/src/tokens/macos-26/compatibility.css +7 -0
- package/src/tokens/macos-26/index.css +3 -0
- package/src/tokens/macos-26/source/provenance.generated.json +28 -0
- package/src/tokens/macos-26/source/sidebar.generated.css +29 -0
- package/src/tokens/macos-26/source.css +7 -0
- package/src/tokens/macos-26/web-adaptations.json +25 -0
- package/src/tokens/macos-26/web-adaptations.md +15 -0
- package/src/tokens/macos-27/accessibility.css +11 -0
- package/src/tokens/macos-27/aliases.css +304 -0
- package/src/tokens/macos-27/compatibility.css +212 -0
- package/src/tokens/macos-27/index.css +15 -0
- package/src/tokens/macos-27/recipes.css +23 -0
- package/src/tokens/macos-27/source/chrome.generated.css +338 -0
- package/src/tokens/macos-27/source/colors.generated.css +140 -0
- package/src/tokens/macos-27/source/context.generated.css +18 -0
- package/src/tokens/macos-27/source/controls.generated.css +764 -0
- package/src/tokens/macos-27/source/effects.generated.css +68 -0
- package/src/tokens/macos-27/source/kit.generated.css +50 -0
- package/src/tokens/macos-27/source/overlays-status.generated.css +931 -0
- package/src/tokens/macos-27/source/paint-styles.generated.css +81 -0
- package/src/tokens/macos-27/source/provenance.generated.json +62 -0
- package/src/tokens/macos-27/source/sizes.generated.css +385 -0
- package/src/tokens/macos-27/source/source.generated.json +554 -0
- package/src/tokens/macos-27/source/text-styles.generated.css +116 -0
- package/src/tokens/macos-27/source.css +17 -0
- package/src/tokens/macos-27/web-adaptations.css +98 -0
- package/src/tokens/macos-27/web-adaptations.json +163 -0
- package/src/tokens/macos-27/web-adaptations.md +117 -0
- package/src/tokens/moldable/brand.css +48 -0
- package/src/tokens/moldable/index.css +1 -0
- package/src/tokens/platform-contract.test.ts +290 -0
package/src/styles/index.css
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
@import 'tailwindcss';
|
|
2
2
|
@import 'tw-animate-css';
|
|
3
|
+
@import '../tokens/index.css';
|
|
3
4
|
|
|
4
5
|
@plugin "@tailwindcss/typography";
|
|
5
6
|
|
|
@@ -186,11 +187,17 @@
|
|
|
186
187
|
--font-sans: var(--font-family-ui);
|
|
187
188
|
--font-mono: var(--font-family-mono);
|
|
188
189
|
|
|
190
|
+
--text-10: 10px;
|
|
189
191
|
--text-11: 11px;
|
|
192
|
+
--text-12: 12px;
|
|
190
193
|
--text-13: 13px;
|
|
194
|
+
--text-15: 15px;
|
|
191
195
|
--text-16: 16px;
|
|
196
|
+
--text-17: 17px;
|
|
192
197
|
--text-18: 18px;
|
|
198
|
+
--text-22: 22px;
|
|
193
199
|
--text-24: 24px;
|
|
200
|
+
--text-26: 26px;
|
|
194
201
|
--text-ui-display: var(--type-display-size);
|
|
195
202
|
--text-ui-display--line-height: var(--type-display-line-height);
|
|
196
203
|
--text-ui-display--font-weight: var(--type-display-weight);
|
|
@@ -232,6 +239,7 @@
|
|
|
232
239
|
--spacing-control-sm: var(--density-control-height-sm);
|
|
233
240
|
--spacing-control-md: var(--density-control-height-md);
|
|
234
241
|
--spacing-control-lg: var(--density-control-height-lg);
|
|
242
|
+
--spacing-control-xl: var(--density-control-height-xl);
|
|
235
243
|
--spacing-row: var(--density-row-height);
|
|
236
244
|
--spacing-toolbar: var(--density-toolbar-height);
|
|
237
245
|
--spacing-pane: var(--density-pane-padding);
|
|
@@ -241,6 +249,7 @@
|
|
|
241
249
|
--ease-enter: var(--motion-ease-enter);
|
|
242
250
|
--ease-exit: var(--motion-ease-exit);
|
|
243
251
|
--ease-spring: var(--motion-ease-spring);
|
|
252
|
+
--shadow-card: var(--material-shadow-card);
|
|
244
253
|
--shadow-panel: var(--material-shadow-panel);
|
|
245
254
|
--shadow-overlay: var(--material-shadow-overlay);
|
|
246
255
|
--shadow-dialog: var(--material-shadow-dialog);
|
|
@@ -282,6 +291,8 @@
|
|
|
282
291
|
--color-popover-foreground: var(--popover-foreground);
|
|
283
292
|
--color-primary: var(--primary);
|
|
284
293
|
--color-primary-foreground: var(--primary-foreground);
|
|
294
|
+
--color-prominent: var(--prominent);
|
|
295
|
+
--color-prominent-foreground: var(--prominent-foreground);
|
|
285
296
|
--color-secondary: var(--secondary);
|
|
286
297
|
--color-secondary-foreground: var(--secondary-foreground);
|
|
287
298
|
--color-muted: var(--muted);
|
|
@@ -722,38 +733,43 @@
|
|
|
722
733
|
system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
723
734
|
--font-family-mono: ui-monospace, Menlo, Consolas, monospace;
|
|
724
735
|
|
|
725
|
-
--type-display-size: var(--text-
|
|
726
|
-
--type-display-line-height:
|
|
727
|
-
--type-display-weight:
|
|
728
|
-
--type-display-tracking:
|
|
729
|
-
--type-heading-size: var(--text-
|
|
736
|
+
--type-display-size: var(--text-26);
|
|
737
|
+
--type-display-line-height: 32px;
|
|
738
|
+
--type-display-weight: 700;
|
|
739
|
+
--type-display-tracking: 0;
|
|
740
|
+
--type-heading-size: var(--text-17);
|
|
730
741
|
--type-heading-line-height: 22px;
|
|
731
|
-
--type-heading-weight:
|
|
732
|
-
--type-heading-tracking:
|
|
733
|
-
--type-title-size: var(--text-
|
|
742
|
+
--type-heading-weight: 700;
|
|
743
|
+
--type-heading-tracking: 0;
|
|
744
|
+
--type-title-size: var(--text-15);
|
|
734
745
|
--type-title-line-height: 20px;
|
|
735
746
|
--type-title-weight: 600;
|
|
736
|
-
--type-title-tracking:
|
|
747
|
+
--type-title-tracking: 0;
|
|
737
748
|
--type-body-size: var(--text-13);
|
|
738
|
-
--type-body-line-height:
|
|
749
|
+
--type-body-line-height: 16px;
|
|
739
750
|
--type-label-size: var(--text-13);
|
|
740
751
|
--type-label-line-height: 16px;
|
|
741
752
|
--type-caption-size: var(--text-11);
|
|
742
753
|
--type-caption-line-height: 14px;
|
|
743
|
-
|
|
744
|
-
--
|
|
745
|
-
|
|
746
|
-
--density-control-height-
|
|
747
|
-
--density-control-height-
|
|
748
|
-
--density-control-
|
|
754
|
+
--type-badge-size: var(--text-11);
|
|
755
|
+
--type-badge-line-height: 14px;
|
|
756
|
+
|
|
757
|
+
--density-control-height-xs: 1rem;
|
|
758
|
+
--density-control-height-sm: 1.25rem;
|
|
759
|
+
--density-control-height-md: 1.5rem;
|
|
760
|
+
--density-control-height-lg: 1.75rem;
|
|
761
|
+
--density-control-height-xl: 2.25rem;
|
|
762
|
+
--density-control-gap: 0.25rem;
|
|
749
763
|
--density-control-padding-inline: 0.625rem;
|
|
764
|
+
--density-badge-height: 1.125rem;
|
|
765
|
+
--density-badge-padding-inline: 0.375rem;
|
|
750
766
|
--density-row-height: 2rem;
|
|
751
767
|
--density-toolbar-height: 2.375rem;
|
|
752
768
|
--density-pane-padding: 0.625rem;
|
|
753
769
|
--density-section-gap: 0.875rem;
|
|
754
770
|
|
|
755
|
-
--shape-control:
|
|
756
|
-
--shape-checkbox:
|
|
771
|
+
--shape-control: 6px;
|
|
772
|
+
--shape-checkbox: 5px;
|
|
757
773
|
--shape-popover: 12px;
|
|
758
774
|
--shape-card: 12px;
|
|
759
775
|
--shape-group: 12px;
|
|
@@ -773,24 +789,26 @@
|
|
|
773
789
|
--motion-ease-spring: cubic-bezier(0.22, 1.15, 0.36, 1);
|
|
774
790
|
|
|
775
791
|
--radius: var(--shape-card);
|
|
776
|
-
--background:
|
|
777
|
-
--foreground:
|
|
778
|
-
--card:
|
|
779
|
-
--card-foreground:
|
|
780
|
-
--popover:
|
|
781
|
-
--popover-foreground:
|
|
792
|
+
--background: #fff;
|
|
793
|
+
--foreground: rgb(0 0 0 / 85%);
|
|
794
|
+
--card: #fff;
|
|
795
|
+
--card-foreground: rgb(0 0 0 / 85%);
|
|
796
|
+
--popover: #fff;
|
|
797
|
+
--popover-foreground: rgb(0 0 0 / 85%);
|
|
782
798
|
--primary: oklch(0.205 0 0);
|
|
783
799
|
--primary-foreground: oklch(0.985 0 0);
|
|
784
|
-
--
|
|
785
|
-
--
|
|
786
|
-
--
|
|
787
|
-
--
|
|
788
|
-
--
|
|
789
|
-
--
|
|
800
|
+
--prominent: #0088ff;
|
|
801
|
+
--prominent-foreground: #fff;
|
|
802
|
+
--secondary: rgb(0 0 0 / 8%);
|
|
803
|
+
--secondary-foreground: rgb(0 0 0 / 85%);
|
|
804
|
+
--muted: rgb(0 0 0 / 5%);
|
|
805
|
+
--muted-foreground: rgb(0 0 0 / 50%);
|
|
806
|
+
--accent: rgb(0 0 0 / 10%);
|
|
807
|
+
--accent-foreground: rgb(0 0 0 / 85%);
|
|
790
808
|
--destructive: oklch(0.5866 0.1994 31.76);
|
|
791
809
|
--destructive-foreground: oklch(0.985 0 0);
|
|
792
|
-
--border:
|
|
793
|
-
--input:
|
|
810
|
+
--border: rgb(0 0 0 / 10%);
|
|
811
|
+
--input: rgb(0 0 0 / 10%);
|
|
794
812
|
--ring: oklch(0.2 0 0 / 48%);
|
|
795
813
|
--model-effort-blue: #339cff;
|
|
796
814
|
--model-effort-purple: #924ff7;
|
|
@@ -855,11 +873,7 @@
|
|
|
855
873
|
);
|
|
856
874
|
--control-focus: var(--ring);
|
|
857
875
|
--control-invalid: var(--destructive);
|
|
858
|
-
--toolbar-control-background:
|
|
859
|
-
in oklch,
|
|
860
|
-
var(--background) 74%,
|
|
861
|
-
transparent
|
|
862
|
-
);
|
|
876
|
+
--toolbar-control-background: rgb(255 255 255 / 42%);
|
|
863
877
|
--toolbar-control-hover: color-mix(
|
|
864
878
|
in oklch,
|
|
865
879
|
var(--background) 84%,
|
|
@@ -870,54 +884,49 @@
|
|
|
870
884
|
var(--background) 74%,
|
|
871
885
|
var(--foreground) 14%
|
|
872
886
|
);
|
|
873
|
-
--toolbar-control-border:
|
|
874
|
-
in oklch,
|
|
875
|
-
var(--foreground) 11%,
|
|
876
|
-
transparent
|
|
877
|
-
);
|
|
887
|
+
--toolbar-control-border: rgb(0 0 0 / 10%);
|
|
878
888
|
--toolbar-control-shadow:
|
|
879
889
|
inset 0 1px 0 color-mix(in oklch, white 42%, transparent),
|
|
880
890
|
0 1px 2px oklch(0.15 0.005 285 / 8%);
|
|
881
891
|
|
|
882
|
-
--material-blur-toolbar:
|
|
883
|
-
--material-blur-overlay:
|
|
884
|
-
--material-saturation: 1
|
|
885
|
-
--material-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
);
|
|
890
|
-
--material-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
892
|
+
--material-blur-toolbar: 6px;
|
|
893
|
+
--material-blur-overlay: 30px;
|
|
894
|
+
--material-saturation: 1;
|
|
895
|
+
--material-ultra-thick-fill: rgb(236 236 236 / 88%);
|
|
896
|
+
--material-thick-fill: rgb(246 246 246 / 72%);
|
|
897
|
+
--material-medium-fill: rgb(246 246 246 / 60%);
|
|
898
|
+
--material-thin-fill: rgb(246 246 246 / 48%);
|
|
899
|
+
--material-ultra-thin-fill: rgb(246 246 246 / 36%);
|
|
900
|
+
--material-ultra-thick-fallback: #ececec;
|
|
901
|
+
--material-thick-fallback: #f6f6f6;
|
|
902
|
+
--material-medium-fallback: #f6f6f6;
|
|
903
|
+
--material-thin-fallback: #f6f6f6;
|
|
904
|
+
--material-ultra-thin-fallback: #f6f6f6;
|
|
905
|
+
--material-standard-blur: 30px;
|
|
906
|
+
--material-regular-fill: var(--material-medium-fill);
|
|
907
|
+
--material-regular-fallback: var(--material-medium-fallback);
|
|
895
908
|
--material-regular-border: color-mix(
|
|
896
909
|
in oklch,
|
|
897
910
|
var(--foreground) 10%,
|
|
898
911
|
transparent
|
|
899
912
|
);
|
|
900
913
|
--material-regular-highlight: oklch(1 0 0 / 42%);
|
|
901
|
-
--material-regular-blur:
|
|
902
|
-
--material-regular-saturation: 1
|
|
903
|
-
--material-clear-fill:
|
|
904
|
-
|
|
905
|
-
var(--background) 24%,
|
|
906
|
-
transparent
|
|
907
|
-
);
|
|
908
|
-
--material-clear-fallback: color-mix(
|
|
909
|
-
in oklch,
|
|
910
|
-
var(--background) 88%,
|
|
911
|
-
var(--foreground) 12%
|
|
912
|
-
);
|
|
914
|
+
--material-regular-blur: var(--material-standard-blur);
|
|
915
|
+
--material-regular-saturation: 1;
|
|
916
|
+
--material-clear-fill: var(--material-ultra-thin-fill);
|
|
917
|
+
--material-clear-fallback: var(--material-ultra-thin-fallback);
|
|
913
918
|
--material-clear-border: color-mix(
|
|
914
919
|
in oklch,
|
|
915
920
|
var(--foreground) 14%,
|
|
916
921
|
transparent
|
|
917
922
|
);
|
|
918
923
|
--material-clear-highlight: oklch(1 0 0 / 28%);
|
|
919
|
-
--material-clear-blur:
|
|
920
|
-
--material-clear-saturation: 1
|
|
924
|
+
--material-clear-blur: var(--material-standard-blur);
|
|
925
|
+
--material-clear-saturation: 1;
|
|
926
|
+
/* In-flow structure: never map this role to overlay or glass elevation. */
|
|
927
|
+
--material-shadow-card: 0 1px 2px oklch(0.15 0.005 285 / 6%);
|
|
928
|
+
--material-shadow-sidebar:
|
|
929
|
+
0 1px 2px oklch(0.15 0.005 285 / 4%), 0 3px 10px oklch(0.15 0.005 285 / 4%);
|
|
921
930
|
--material-shadow-panel:
|
|
922
931
|
inset 0 0 0 1px var(--separator), 0 1px 2px oklch(0.15 0.005 285 / 5%),
|
|
923
932
|
0 5px 14px oklch(0.15 0.005 285 / 5%);
|
|
@@ -1000,10 +1009,11 @@
|
|
|
1000
1009
|
}
|
|
1001
1010
|
|
|
1002
1011
|
:where([data-density='compact']) {
|
|
1003
|
-
--density-control-height-xs:
|
|
1004
|
-
--density-control-height-sm: 1.
|
|
1005
|
-
--density-control-height-md:
|
|
1006
|
-
--density-control-height-lg:
|
|
1012
|
+
--density-control-height-xs: 1rem;
|
|
1013
|
+
--density-control-height-sm: 1.25rem;
|
|
1014
|
+
--density-control-height-md: 1.5rem;
|
|
1015
|
+
--density-control-height-lg: 1.75rem;
|
|
1016
|
+
--density-control-height-xl: 2.25rem;
|
|
1007
1017
|
--density-control-gap: 0.25rem;
|
|
1008
1018
|
--density-control-padding-inline: 0.625rem;
|
|
1009
1019
|
--density-row-height: 1.875rem;
|
|
@@ -1017,6 +1027,7 @@
|
|
|
1017
1027
|
--density-control-height-sm: 2.25rem;
|
|
1018
1028
|
--density-control-height-md: 2.5rem;
|
|
1019
1029
|
--density-control-height-lg: 2.75rem;
|
|
1030
|
+
--density-control-height-xl: 3rem;
|
|
1020
1031
|
--density-control-gap: 0.5rem;
|
|
1021
1032
|
--density-control-padding-inline: 1rem;
|
|
1022
1033
|
--density-row-height: 2.75rem;
|
|
@@ -1026,20 +1037,22 @@
|
|
|
1026
1037
|
}
|
|
1027
1038
|
|
|
1028
1039
|
.dark {
|
|
1029
|
-
--background:
|
|
1030
|
-
--foreground:
|
|
1031
|
-
--card:
|
|
1032
|
-
--card-foreground:
|
|
1033
|
-
--popover:
|
|
1034
|
-
--popover-foreground:
|
|
1040
|
+
--background: #1d1f1f;
|
|
1041
|
+
--foreground: rgb(255 255 255 / 85%);
|
|
1042
|
+
--card: #242424;
|
|
1043
|
+
--card-foreground: rgb(255 255 255 / 85%);
|
|
1044
|
+
--popover: #242424;
|
|
1045
|
+
--popover-foreground: rgb(255 255 255 / 85%);
|
|
1035
1046
|
--primary: oklch(0.985 0 0);
|
|
1036
1047
|
--primary-foreground: oklch(0.205 0 0);
|
|
1037
|
-
--
|
|
1038
|
-
--
|
|
1039
|
-
--
|
|
1040
|
-
--
|
|
1041
|
-
--
|
|
1042
|
-
--
|
|
1048
|
+
--prominent: #0091ff;
|
|
1049
|
+
--prominent-foreground: #fff;
|
|
1050
|
+
--secondary: rgb(255 255 255 / 8%);
|
|
1051
|
+
--secondary-foreground: rgb(255 255 255 / 85%);
|
|
1052
|
+
--muted: rgb(255 255 255 / 5%);
|
|
1053
|
+
--muted-foreground: rgb(255 255 255 / 55%);
|
|
1054
|
+
--accent: rgb(255 255 255 / 10%);
|
|
1055
|
+
--accent-foreground: rgb(255 255 255 / 85%);
|
|
1043
1056
|
--destructive: oklch(0.704 0.191 22.216);
|
|
1044
1057
|
--destructive-foreground: oklch(0.985 0 0);
|
|
1045
1058
|
--border: oklch(1 0 0 / 10%);
|
|
@@ -1053,13 +1066,13 @@
|
|
|
1053
1066
|
--chart-3: var(--pending);
|
|
1054
1067
|
--chart-4: var(--neutral);
|
|
1055
1068
|
--chart-5: var(--accent-foreground);
|
|
1056
|
-
--sidebar:
|
|
1069
|
+
--sidebar: #1b1d1e;
|
|
1057
1070
|
--sidebar-foreground: oklch(0.985 0 0);
|
|
1058
1071
|
--sidebar-primary: oklch(0.7145 0.185 45.03);
|
|
1059
1072
|
--sidebar-primary-foreground: oklch(0.985 0 0);
|
|
1060
|
-
--sidebar-accent:
|
|
1061
|
-
--sidebar-accent-foreground:
|
|
1062
|
-
--sidebar-border:
|
|
1073
|
+
--sidebar-accent: color-mix(in srgb, #0091ff 14%, transparent);
|
|
1074
|
+
--sidebar-accent-foreground: #0091ff;
|
|
1075
|
+
--sidebar-border: #394043;
|
|
1063
1076
|
--sidebar-ring: var(--ring);
|
|
1064
1077
|
--info: oklch(0.72 0.15 250);
|
|
1065
1078
|
--info-foreground: oklch(0.78 0.11 250);
|
|
@@ -1075,30 +1088,30 @@
|
|
|
1075
1088
|
--status-stopped: var(--neutral);
|
|
1076
1089
|
--status-pending: var(--pending);
|
|
1077
1090
|
--status-error: var(--destructive);
|
|
1078
|
-
--
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
);
|
|
1083
|
-
--material-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1091
|
+
--toolbar-control-background: rgb(153 153 153 / 17%);
|
|
1092
|
+
--toolbar-control-border: rgb(255 255 255 / 10%);
|
|
1093
|
+
--material-ultra-thick-fill: rgb(0 0 0 / 50%);
|
|
1094
|
+
--material-thick-fill: rgb(0 0 0 / 40%);
|
|
1095
|
+
--material-medium-fill: rgb(0 0 0 / 29%);
|
|
1096
|
+
--material-thin-fill: rgb(0 0 0 / 20%);
|
|
1097
|
+
--material-ultra-thin-fill: rgb(0 0 0 / 10%);
|
|
1098
|
+
--material-ultra-thick-fallback: #000;
|
|
1099
|
+
--material-thick-fallback: #000;
|
|
1100
|
+
--material-medium-fallback: #000;
|
|
1101
|
+
--material-thin-fallback: #000;
|
|
1102
|
+
--material-ultra-thin-fallback: #000;
|
|
1103
|
+
--material-regular-fill: var(--material-medium-fill);
|
|
1104
|
+
--material-regular-fallback: var(--material-medium-fallback);
|
|
1088
1105
|
--material-regular-border: oklch(1 0 0 / 14%);
|
|
1089
1106
|
--material-regular-highlight: oklch(1 0 0 / 12%);
|
|
1090
|
-
--material-clear-fill:
|
|
1091
|
-
|
|
1092
|
-
var(--background) 20%,
|
|
1093
|
-
transparent
|
|
1094
|
-
);
|
|
1095
|
-
--material-clear-fallback: color-mix(
|
|
1096
|
-
in oklch,
|
|
1097
|
-
var(--background) 78%,
|
|
1098
|
-
var(--foreground) 22%
|
|
1099
|
-
);
|
|
1107
|
+
--material-clear-fill: var(--material-ultra-thin-fill);
|
|
1108
|
+
--material-clear-fallback: var(--material-ultra-thin-fallback);
|
|
1100
1109
|
--material-clear-border: oklch(1 0 0 / 18%);
|
|
1101
1110
|
--material-clear-highlight: oklch(1 0 0 / 10%);
|
|
1111
|
+
/* In-flow structure: never map this role to overlay or glass elevation. */
|
|
1112
|
+
--material-shadow-card: 0 1px 2px oklch(0 0 0 / 24%);
|
|
1113
|
+
--material-shadow-sidebar:
|
|
1114
|
+
0 1px 2px oklch(0 0 0 / 18%), 0 3px 10px oklch(0 0 0 / 12%);
|
|
1102
1115
|
--material-shadow-panel:
|
|
1103
1116
|
inset 0 0 0 1px var(--separator), 0 2px 5px oklch(0 0 0 / 28%),
|
|
1104
1117
|
0 8px 22px oklch(0 0 0 / 22%);
|
|
@@ -1157,6 +1170,7 @@
|
|
|
1157
1170
|
transparent
|
|
1158
1171
|
);
|
|
1159
1172
|
--material-clear-border: var(--separator-strong);
|
|
1173
|
+
--material-shadow-card: none;
|
|
1160
1174
|
--material-shadow-panel: inset 0 0 0 1px var(--separator-strong);
|
|
1161
1175
|
--material-shadow-overlay: inset 0 0 0 1px var(--separator-strong);
|
|
1162
1176
|
--material-shadow-dialog: inset 0 0 0 1px var(--separator-strong);
|
|
@@ -1200,6 +1214,7 @@
|
|
|
1200
1214
|
transparent
|
|
1201
1215
|
);
|
|
1202
1216
|
--material-clear-border: var(--separator-strong);
|
|
1217
|
+
--material-shadow-card: none;
|
|
1203
1218
|
--material-shadow-panel: inset 0 0 0 1px var(--separator-strong);
|
|
1204
1219
|
--material-shadow-overlay: inset 0 0 0 1px var(--separator-strong);
|
|
1205
1220
|
--material-shadow-dialog: inset 0 0 0 1px var(--separator-strong);
|
|
@@ -1249,6 +1264,7 @@
|
|
|
1249
1264
|
--material-blur-toolbar: 0px;
|
|
1250
1265
|
--material-blur-overlay: 0px;
|
|
1251
1266
|
--material-saturation: 1;
|
|
1267
|
+
--material-shadow-card: none;
|
|
1252
1268
|
--material-shadow-panel: none;
|
|
1253
1269
|
--material-shadow-overlay: none;
|
|
1254
1270
|
--material-shadow-dialog: none;
|
|
@@ -1316,8 +1332,6 @@
|
|
|
1316
1332
|
.moldable-material {
|
|
1317
1333
|
--material-active-fill: var(--material-regular-fill);
|
|
1318
1334
|
--material-active-fallback: var(--material-regular-fallback);
|
|
1319
|
-
--material-active-border: var(--material-regular-border);
|
|
1320
|
-
--material-active-highlight: var(--material-regular-highlight);
|
|
1321
1335
|
--material-active-blur: var(--material-regular-blur);
|
|
1322
1336
|
--material-active-saturation: var(--material-regular-saturation);
|
|
1323
1337
|
--material-active-shadow: none;
|
|
@@ -1325,21 +1339,61 @@
|
|
|
1325
1339
|
position: relative;
|
|
1326
1340
|
isolation: isolate;
|
|
1327
1341
|
background-color: var(--material-active-fallback);
|
|
1328
|
-
|
|
1329
|
-
box-shadow:
|
|
1330
|
-
inset 0 1px 0 var(--material-active-highlight),
|
|
1331
|
-
var(--material-active-shadow);
|
|
1342
|
+
box-shadow: var(--material-active-shadow);
|
|
1332
1343
|
}
|
|
1333
1344
|
|
|
1334
1345
|
.moldable-material[data-material='clear'] {
|
|
1335
1346
|
--material-active-fill: var(--material-clear-fill);
|
|
1336
1347
|
--material-active-fallback: var(--material-clear-fallback);
|
|
1337
|
-
--material-active-border: var(--material-clear-border);
|
|
1338
|
-
--material-active-highlight: var(--material-clear-highlight);
|
|
1339
1348
|
--material-active-blur: var(--material-clear-blur);
|
|
1340
1349
|
--material-active-saturation: var(--material-clear-saturation);
|
|
1341
1350
|
}
|
|
1342
1351
|
|
|
1352
|
+
.moldable-material[data-material='ultra-thick'] {
|
|
1353
|
+
--material-active-fill: var(--material-ultra-thick-fill);
|
|
1354
|
+
--material-active-fallback: var(--material-ultra-thick-fallback);
|
|
1355
|
+
--material-active-blur: var(--material-standard-blur);
|
|
1356
|
+
--material-active-saturation: 1;
|
|
1357
|
+
}
|
|
1358
|
+
|
|
1359
|
+
.moldable-material[data-material='thick'] {
|
|
1360
|
+
--material-active-fill: var(--material-thick-fill);
|
|
1361
|
+
--material-active-fallback: var(--material-thick-fallback);
|
|
1362
|
+
--material-active-blur: var(--material-standard-blur);
|
|
1363
|
+
--material-active-saturation: 1;
|
|
1364
|
+
}
|
|
1365
|
+
|
|
1366
|
+
.moldable-material[data-material='medium'] {
|
|
1367
|
+
--material-active-fill: var(--material-medium-fill);
|
|
1368
|
+
--material-active-fallback: var(--material-medium-fallback);
|
|
1369
|
+
--material-active-blur: var(--material-standard-blur);
|
|
1370
|
+
--material-active-saturation: 1;
|
|
1371
|
+
}
|
|
1372
|
+
|
|
1373
|
+
.moldable-material[data-material='thin'] {
|
|
1374
|
+
--material-active-fill: var(--material-thin-fill);
|
|
1375
|
+
--material-active-fallback: var(--material-thin-fallback);
|
|
1376
|
+
--material-active-blur: var(--material-standard-blur);
|
|
1377
|
+
--material-active-saturation: 1;
|
|
1378
|
+
}
|
|
1379
|
+
|
|
1380
|
+
.moldable-material[data-material='ultra-thin'] {
|
|
1381
|
+
--material-active-fill: var(--material-ultra-thin-fill);
|
|
1382
|
+
--material-active-fallback: var(--material-ultra-thin-fallback);
|
|
1383
|
+
--material-active-blur: var(--material-standard-blur);
|
|
1384
|
+
--material-active-saturation: 1;
|
|
1385
|
+
}
|
|
1386
|
+
|
|
1387
|
+
:where(
|
|
1388
|
+
[data-slot='button'][data-variant='toolbar'],
|
|
1389
|
+
[data-slot='toolbar-control-group'][data-appearance='chrome']
|
|
1390
|
+
) {
|
|
1391
|
+
-webkit-backdrop-filter: blur(var(--material-blur-toolbar))
|
|
1392
|
+
saturate(var(--material-saturation));
|
|
1393
|
+
backdrop-filter: blur(var(--material-blur-toolbar))
|
|
1394
|
+
saturate(var(--material-saturation));
|
|
1395
|
+
}
|
|
1396
|
+
|
|
1343
1397
|
.moldable-material[data-material-elevation='panel'] {
|
|
1344
1398
|
--material-active-shadow: var(--material-shadow-panel);
|
|
1345
1399
|
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
export type UITheme = 'platform' | 'moldable'
|
|
2
|
+
|
|
3
|
+
export type UIPlatform = 'macos' | 'windows' | 'web'
|
|
4
|
+
|
|
5
|
+
export type UIPlatformVersion = string
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* A component recipe can intentionally come from a different versioned
|
|
9
|
+
* platform source than the application's base platform pack.
|
|
10
|
+
*
|
|
11
|
+
* Public names describe the anatomy an app is choosing. The registry below
|
|
12
|
+
* records which immutable platform source defines each recipe.
|
|
13
|
+
*/
|
|
14
|
+
export type UISidebarStyle = 'platform' | 'floating' | 'edge-to-edge'
|
|
15
|
+
|
|
16
|
+
export type PlatformPackId = `${UIPlatform}-${string}`
|
|
17
|
+
|
|
18
|
+
export interface UIPlatformPack {
|
|
19
|
+
id: PlatformPackId
|
|
20
|
+
platform: UIPlatform
|
|
21
|
+
version: UIPlatformVersion
|
|
22
|
+
capabilities: {
|
|
23
|
+
nativeMaterials: boolean
|
|
24
|
+
nativeWindowChrome: boolean
|
|
25
|
+
overlayScrollbars: boolean
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export type UIAppearance = 'light' | 'dark' | 'system'
|
|
30
|
+
|
|
31
|
+
export type ResolvedUIAppearance = Exclude<UIAppearance, 'system'>
|
|
32
|
+
|
|
33
|
+
export type ControlSize = 'mini' | 'small' | 'medium' | 'large' | 'xl'
|
|
34
|
+
|
|
35
|
+
export type LayoutDensity = 'compact' | 'regular' | 'comfortable'
|
|
36
|
+
|
|
37
|
+
export type MaterialThickness =
|
|
38
|
+
| 'ultra-thick'
|
|
39
|
+
| 'thick'
|
|
40
|
+
| 'medium'
|
|
41
|
+
| 'thin'
|
|
42
|
+
| 'ultra-thin'
|
|
43
|
+
|
|
44
|
+
export type MaterialContext = 'content' | 'over-glass'
|
|
45
|
+
|
|
46
|
+
export type ContrastPreference = 'system' | 'standard' | 'increased'
|
|
47
|
+
|
|
48
|
+
export type TransparencyPreference = 'system' | 'standard' | 'reduced'
|
|
49
|
+
|
|
50
|
+
export type MotionPreference = 'system' | 'standard' | 'reduced'
|
|
51
|
+
|
|
52
|
+
export interface UIPreferences {
|
|
53
|
+
contrast?: ContrastPreference
|
|
54
|
+
transparency?: TransparencyPreference
|
|
55
|
+
motion?: MotionPreference
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export const CONTROL_SIZES = [
|
|
59
|
+
'mini',
|
|
60
|
+
'small',
|
|
61
|
+
'medium',
|
|
62
|
+
'large',
|
|
63
|
+
'xl',
|
|
64
|
+
] as const satisfies readonly ControlSize[]
|
|
65
|
+
|
|
66
|
+
export const MATERIAL_THICKNESSES = [
|
|
67
|
+
'ultra-thick',
|
|
68
|
+
'thick',
|
|
69
|
+
'medium',
|
|
70
|
+
'thin',
|
|
71
|
+
'ultra-thin',
|
|
72
|
+
] as const satisfies readonly MaterialThickness[]
|
|
73
|
+
|
|
74
|
+
export const SIDEBAR_STYLES = {
|
|
75
|
+
platform: {
|
|
76
|
+
id: 'platform',
|
|
77
|
+
sourcePlatform: null,
|
|
78
|
+
sourceVersion: null,
|
|
79
|
+
},
|
|
80
|
+
floating: {
|
|
81
|
+
id: 'floating',
|
|
82
|
+
sourcePlatform: 'macos',
|
|
83
|
+
sourceVersion: '26',
|
|
84
|
+
},
|
|
85
|
+
'edge-to-edge': {
|
|
86
|
+
id: 'edge-to-edge',
|
|
87
|
+
sourcePlatform: 'macos',
|
|
88
|
+
sourceVersion: '27',
|
|
89
|
+
},
|
|
90
|
+
} as const satisfies Record<
|
|
91
|
+
UISidebarStyle,
|
|
92
|
+
{
|
|
93
|
+
id: UISidebarStyle
|
|
94
|
+
sourcePlatform: UIPlatform | null
|
|
95
|
+
sourceVersion: UIPlatformVersion | null
|
|
96
|
+
}
|
|
97
|
+
>
|
|
98
|
+
|
|
99
|
+
export const PLATFORM_PACKS = {
|
|
100
|
+
'macos-27': {
|
|
101
|
+
id: 'macos-27',
|
|
102
|
+
platform: 'macos',
|
|
103
|
+
version: '27',
|
|
104
|
+
capabilities: {
|
|
105
|
+
nativeMaterials: true,
|
|
106
|
+
nativeWindowChrome: true,
|
|
107
|
+
overlayScrollbars: true,
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
'web-default': {
|
|
111
|
+
id: 'web-default',
|
|
112
|
+
platform: 'web',
|
|
113
|
+
version: 'default',
|
|
114
|
+
capabilities: {
|
|
115
|
+
nativeMaterials: false,
|
|
116
|
+
nativeWindowChrome: false,
|
|
117
|
+
overlayScrollbars: false,
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
} as const satisfies Record<string, UIPlatformPack>
|
|
121
|
+
|
|
122
|
+
export function resolvePlatformPack(
|
|
123
|
+
platform: UIPlatform,
|
|
124
|
+
version: UIPlatformVersion,
|
|
125
|
+
): UIPlatformPack {
|
|
126
|
+
const exact = Object.values(PLATFORM_PACKS).find(
|
|
127
|
+
(pack) => pack.platform === platform && pack.version === version,
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
return exact ?? PLATFORM_PACKS['web-default']
|
|
131
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export {
|
|
2
|
+
CONTROL_SIZES,
|
|
3
|
+
MATERIAL_THICKNESSES,
|
|
4
|
+
PLATFORM_PACKS,
|
|
5
|
+
SIDEBAR_STYLES,
|
|
6
|
+
resolvePlatformPack,
|
|
7
|
+
type ContrastPreference,
|
|
8
|
+
type ControlSize,
|
|
9
|
+
type LayoutDensity,
|
|
10
|
+
type MaterialContext,
|
|
11
|
+
type MaterialThickness,
|
|
12
|
+
type MotionPreference,
|
|
13
|
+
type PlatformPackId,
|
|
14
|
+
type ResolvedUIAppearance,
|
|
15
|
+
type TransparencyPreference,
|
|
16
|
+
type UIAppearance,
|
|
17
|
+
type UIPlatform,
|
|
18
|
+
type UIPlatformPack,
|
|
19
|
+
type UIPlatformVersion,
|
|
20
|
+
type UIPreferences,
|
|
21
|
+
type UISidebarStyle,
|
|
22
|
+
type UITheme,
|
|
23
|
+
} from './contracts'
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# macOS 26 source pack
|
|
2
|
+
|
|
3
|
+
This versioned source is separate from macOS 27 and does not correct or mutate
|
|
4
|
+
that pack. The initial coverage is the inset floating sidebar used by
|
|
5
|
+
Moldable.
|
|
6
|
+
|
|
7
|
+
## Source
|
|
8
|
+
|
|
9
|
+
- Source: macOS 26.
|
|
10
|
+
- Values only.
|
|
11
|
+
- No source artwork, symbols, vectors, image assets, or font files.
|
|
12
|
+
|
|
13
|
+
## Composition
|
|
14
|
+
|
|
15
|
+
Applications continue to select a base platform pack normally. A component
|
|
16
|
+
recipe can be selected independently:
|
|
17
|
+
|
|
18
|
+
```tsx
|
|
19
|
+
<ThemeProvider
|
|
20
|
+
platform="macos"
|
|
21
|
+
platformVersion="27"
|
|
22
|
+
uiTheme="moldable"
|
|
23
|
+
sidebarStyle="floating"
|
|
24
|
+
/>
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
This resolves the general UI from macOS 27 while resolving only the sidebar
|
|
28
|
+
geometry and effects from the immutable macOS 26 source.
|
|
29
|
+
|
|
30
|
+
Use `sidebarStyle="edge-to-edge"` for the macOS 27 anatomy, or
|
|
31
|
+
`sidebarStyle="platform"` to follow the selected base pack.
|
|
32
|
+
|
|
33
|
+
## Adaptations
|
|
34
|
+
|
|
35
|
+
Intentional web divergences use stable `M26-WEB-{AREA}-{NNN}` identifiers and
|
|
36
|
+
are documented in `web-adaptations.json` and `web-adaptations.md`. Source files
|
|
37
|
+
remain unchanged.
|