@moldable-ai/ui 0.2.29 → 0.2.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/dist/catalog/component-catalog.d.ts +9 -2
  2. package/dist/catalog/component-catalog.d.ts.map +1 -1
  3. package/dist/catalog/component-catalog.js +11 -7
  4. package/dist/catalog/core-control-stories.d.ts.map +1 -1
  5. package/dist/catalog/core-control-stories.js +1 -1
  6. package/dist/catalog/core-foundation-stories.d.ts.map +1 -1
  7. package/dist/catalog/core-foundation-stories.js +5 -5
  8. package/dist/components/app-error-boundary.d.ts +1 -1
  9. package/dist/components/chat/chat-image-lightbox.d.ts +8 -0
  10. package/dist/components/chat/chat-image-lightbox.d.ts.map +1 -1
  11. package/dist/components/chat/chat-image-lightbox.js +24 -2
  12. package/dist/components/chat/chat-input.d.ts +3 -2
  13. package/dist/components/chat/chat-input.d.ts.map +1 -1
  14. package/dist/components/chat/chat-input.js +3 -3
  15. package/dist/components/chat/chat-message.d.ts.map +1 -1
  16. package/dist/components/chat/chat-message.js +3 -1
  17. package/dist/components/chat/chat-panel.d.ts +3 -1
  18. package/dist/components/chat/chat-panel.d.ts.map +1 -1
  19. package/dist/components/chat/chat-panel.js +53 -39
  20. package/dist/components/chat/conversation-history.d.ts +4 -2
  21. package/dist/components/chat/conversation-history.d.ts.map +1 -1
  22. package/dist/components/chat/conversation-history.js +20 -15
  23. package/dist/components/ui/alert.d.ts +1 -1
  24. package/dist/components/ui/app-frame.d.ts +20 -1
  25. package/dist/components/ui/app-frame.d.ts.map +1 -1
  26. package/dist/components/ui/app-frame.js +37 -7
  27. package/dist/components/ui/badge.d.ts +1 -1
  28. package/dist/components/ui/badge.js +1 -1
  29. package/dist/components/ui/button.d.ts +5 -3
  30. package/dist/components/ui/button.d.ts.map +1 -1
  31. package/dist/components/ui/button.js +39 -11
  32. package/dist/components/ui/card.d.ts +12 -2
  33. package/dist/components/ui/card.d.ts.map +1 -1
  34. package/dist/components/ui/card.js +3 -2
  35. package/dist/components/ui/checkbox.d.ts +4 -1
  36. package/dist/components/ui/checkbox.d.ts.map +1 -1
  37. package/dist/components/ui/checkbox.js +4 -4
  38. package/dist/components/ui/context-menu.d.ts.map +1 -1
  39. package/dist/components/ui/context-menu.js +7 -6
  40. package/dist/components/ui/date-field.d.ts +1 -1
  41. package/dist/components/ui/dropdown-menu.d.ts +1 -0
  42. package/dist/components/ui/dropdown-menu.d.ts.map +1 -1
  43. package/dist/components/ui/dropdown-menu.js +9 -8
  44. package/dist/components/ui/icon-button.d.ts +1 -1
  45. package/dist/components/ui/icon-button.d.ts.map +1 -1
  46. package/dist/components/ui/icon-button.js +1 -0
  47. package/dist/components/ui/input.d.ts +6 -2
  48. package/dist/components/ui/input.d.ts.map +1 -1
  49. package/dist/components/ui/input.js +2 -2
  50. package/dist/components/ui/material.d.ts +8 -3
  51. package/dist/components/ui/material.d.ts.map +1 -1
  52. package/dist/components/ui/material.js +2 -2
  53. package/dist/components/ui/menu-items.d.ts +2 -1
  54. package/dist/components/ui/menu-items.d.ts.map +1 -1
  55. package/dist/components/ui/menu-items.js +3 -2
  56. package/dist/components/ui/message-scroller-controller.d.ts +15 -17
  57. package/dist/components/ui/message-scroller-controller.d.ts.map +1 -1
  58. package/dist/components/ui/message-scroller-controller.js +106 -91
  59. package/dist/components/ui/message-scroller-primitive.d.ts +2 -0
  60. package/dist/components/ui/message-scroller-primitive.d.ts.map +1 -1
  61. package/dist/components/ui/message-scroller-primitive.js +2 -0
  62. package/dist/components/ui/message-scroller.d.ts.map +1 -1
  63. package/dist/components/ui/message-scroller.js +2 -2
  64. package/dist/components/ui/number-input.d.ts +1 -1
  65. package/dist/components/ui/popover.js +1 -1
  66. package/dist/components/ui/search-field.d.ts +4 -2
  67. package/dist/components/ui/search-field.d.ts.map +1 -1
  68. package/dist/components/ui/search-field.js +16 -6
  69. package/dist/components/ui/segmented-control.d.ts +3 -1
  70. package/dist/components/ui/segmented-control.d.ts.map +1 -1
  71. package/dist/components/ui/segmented-control.js +23 -17
  72. package/dist/components/ui/select.js +2 -2
  73. package/dist/components/ui/sidebar.d.ts +10 -4
  74. package/dist/components/ui/sidebar.d.ts.map +1 -1
  75. package/dist/components/ui/sidebar.js +74 -17
  76. package/dist/components/ui/status.d.ts +1 -1
  77. package/dist/components/ui/status.js +1 -1
  78. package/dist/components/ui/switch.d.ts +3 -1
  79. package/dist/components/ui/switch.d.ts.map +1 -1
  80. package/dist/components/ui/switch.js +3 -2
  81. package/dist/components/ui/toolbar-controls.d.ts +13 -3
  82. package/dist/components/ui/toolbar-controls.d.ts.map +1 -1
  83. package/dist/components/ui/toolbar-controls.js +35 -10
  84. package/dist/components/ui/toolbar.d.ts +5 -4
  85. package/dist/components/ui/toolbar.d.ts.map +1 -1
  86. package/dist/components/ui/toolbar.js +3 -3
  87. package/dist/index.d.ts +2 -1
  88. package/dist/index.d.ts.map +1 -1
  89. package/dist/index.js +3 -1
  90. package/dist/lib/frame-lifecycle.d.ts +1 -0
  91. package/dist/lib/frame-lifecycle.d.ts.map +1 -1
  92. package/dist/lib/frame-lifecycle.js +7 -0
  93. package/dist/lib/theme.d.ts +39 -5
  94. package/dist/lib/theme.d.ts.map +1 -1
  95. package/dist/lib/theme.js +105 -17
  96. package/dist/tokens/contracts.d.ts +79 -0
  97. package/dist/tokens/contracts.d.ts.map +1 -0
  98. package/dist/tokens/contracts.js +57 -0
  99. package/dist/tokens/index.d.ts +2 -0
  100. package/dist/tokens/index.d.ts.map +1 -0
  101. package/dist/tokens/index.js +1 -0
  102. package/docs/README.md +2 -0
  103. package/docs/adaptive-materials.md +14 -9
  104. package/docs/design-tokens.md +10 -6
  105. package/docs/foundations.md +3 -3
  106. package/docs/macos-design-audit.md +144 -0
  107. package/docs/native-integration.md +4 -4
  108. package/docs/platform-architecture.md +189 -0
  109. package/docs/standalone-app-windows.md +37 -0
  110. package/docs/visual-regression.md +6 -8
  111. package/package.json +13 -1
  112. package/src/components/ui/accordion.md +46 -0
  113. package/src/components/ui/alert.md +12 -4
  114. package/src/components/ui/app-frame.md +8 -5
  115. package/src/components/ui/aspect-ratio.md +37 -0
  116. package/src/components/ui/avatar.md +48 -0
  117. package/src/components/ui/breadcrumb.md +52 -0
  118. package/src/components/ui/button-group.md +43 -0
  119. package/src/components/ui/button.md +21 -4
  120. package/src/components/ui/calendar.md +42 -0
  121. package/src/components/ui/card.md +43 -0
  122. package/src/components/ui/carousel.md +47 -0
  123. package/src/components/ui/chart.md +52 -0
  124. package/src/components/ui/checkbox.md +36 -0
  125. package/src/components/ui/collapsible.md +2 -3
  126. package/src/components/ui/color-well.md +14 -4
  127. package/src/components/ui/combobox.md +3 -3
  128. package/src/components/ui/confirm-dialog.md +5 -4
  129. package/src/components/ui/context-menu.md +3 -2
  130. package/src/components/ui/date-field.md +6 -1
  131. package/src/components/ui/date-picker.md +6 -3
  132. package/src/components/ui/dialog.md +14 -12
  133. package/src/components/ui/drawer.md +58 -0
  134. package/src/components/ui/dropdown-menu.md +16 -14
  135. package/src/components/ui/error-boundary-view.md +1 -1
  136. package/src/components/ui/field.md +2 -1
  137. package/src/components/ui/form.md +71 -0
  138. package/src/components/ui/grid.md +4 -3
  139. package/src/components/ui/icon-button.md +4 -1
  140. package/src/components/ui/input-group.md +49 -0
  141. package/src/components/ui/input-otp.md +56 -0
  142. package/src/components/ui/input.md +40 -0
  143. package/src/components/ui/inspector.md +47 -7
  144. package/src/components/ui/item.md +5 -3
  145. package/src/components/ui/kbd.md +30 -0
  146. package/src/components/ui/label.md +29 -0
  147. package/src/components/ui/list.md +2 -2
  148. package/src/components/ui/material.md +25 -12
  149. package/src/components/ui/menu-items.md +62 -0
  150. package/src/components/ui/menubar.md +58 -0
  151. package/src/components/ui/message-scroller-primitive.md +70 -0
  152. package/src/components/ui/message-scroller.md +89 -0
  153. package/src/components/ui/navigation-button-group.md +4 -3
  154. package/src/components/ui/navigation-menu.md +52 -0
  155. package/src/components/ui/number-input.md +8 -0
  156. package/src/components/ui/pagination.md +51 -0
  157. package/src/components/ui/panel.md +6 -0
  158. package/src/components/ui/popover.md +10 -7
  159. package/src/components/ui/progress.md +31 -0
  160. package/src/components/ui/radio-group.md +36 -0
  161. package/src/components/ui/resizable.md +2 -1
  162. package/src/components/ui/scroll-area.md +3 -1
  163. package/src/components/ui/search-field.md +6 -1
  164. package/src/components/ui/segmented-control.md +6 -1
  165. package/src/components/ui/separator.md +35 -0
  166. package/src/components/ui/sidebar.md +29 -6
  167. package/src/components/ui/skeleton.md +36 -0
  168. package/src/components/ui/slider.md +58 -0
  169. package/src/components/ui/spinner.md +41 -0
  170. package/src/components/ui/split-view.md +8 -4
  171. package/src/components/ui/switch.md +44 -0
  172. package/src/components/ui/table.md +7 -7
  173. package/src/components/ui/tabs.md +3 -1
  174. package/src/components/ui/textarea.md +41 -0
  175. package/src/components/ui/toggle-group.md +2 -2
  176. package/src/components/ui/toggle.md +9 -9
  177. package/src/components/ui/toolbar-controls.md +24 -12
  178. package/src/components/ui/toolbar.md +6 -6
  179. package/src/styles/index.css +298 -117
  180. package/src/tokens/contracts.ts +131 -0
  181. package/src/tokens/index.css +6 -0
  182. package/src/tokens/index.ts +23 -0
  183. package/src/tokens/macos-26/README.md +37 -0
  184. package/src/tokens/macos-26/aliases.css +53 -0
  185. package/src/tokens/macos-26/compatibility.css +7 -0
  186. package/src/tokens/macos-26/index.css +3 -0
  187. package/src/tokens/macos-26/source/provenance.generated.json +28 -0
  188. package/src/tokens/macos-26/source/sidebar.generated.css +29 -0
  189. package/src/tokens/macos-26/source.css +7 -0
  190. package/src/tokens/macos-26/web-adaptations.json +25 -0
  191. package/src/tokens/macos-26/web-adaptations.md +15 -0
  192. package/src/tokens/macos-27/accessibility.css +11 -0
  193. package/src/tokens/macos-27/aliases.css +304 -0
  194. package/src/tokens/macos-27/compatibility.css +212 -0
  195. package/src/tokens/macos-27/index.css +15 -0
  196. package/src/tokens/macos-27/recipes.css +23 -0
  197. package/src/tokens/macos-27/source/chrome.generated.css +338 -0
  198. package/src/tokens/macos-27/source/colors.generated.css +140 -0
  199. package/src/tokens/macos-27/source/context.generated.css +18 -0
  200. package/src/tokens/macos-27/source/controls.generated.css +764 -0
  201. package/src/tokens/macos-27/source/effects.generated.css +68 -0
  202. package/src/tokens/macos-27/source/kit.generated.css +50 -0
  203. package/src/tokens/macos-27/source/overlays-status.generated.css +931 -0
  204. package/src/tokens/macos-27/source/paint-styles.generated.css +81 -0
  205. package/src/tokens/macos-27/source/provenance.generated.json +62 -0
  206. package/src/tokens/macos-27/source/sizes.generated.css +385 -0
  207. package/src/tokens/macos-27/source/source.generated.json +554 -0
  208. package/src/tokens/macos-27/source/text-styles.generated.css +116 -0
  209. package/src/tokens/macos-27/source.css +17 -0
  210. package/src/tokens/macos-27/web-adaptations.css +98 -0
  211. package/src/tokens/macos-27/web-adaptations.json +163 -0
  212. package/src/tokens/macos-27/web-adaptations.md +117 -0
  213. package/src/tokens/moldable/brand.css +165 -0
  214. package/src/tokens/moldable/index.css +1 -0
  215. package/src/tokens/platform-contract.test.ts +294 -0
@@ -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,6 @@
1
+ /* Immutable platform packs. */
2
+ @import './macos-27/index.css';
3
+ @import './macos-26/index.css';
4
+
5
+ /* Stable Moldable semantic and brand layer. */
6
+ @import './moldable/index.css';
@@ -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.
@@ -0,0 +1,53 @@
1
+ /*
2
+ * Stable component adapter for the macOS 26 floating sidebar.
3
+ *
4
+ * This selector is intentionally independent from the base platform/version
5
+ * selector so Moldable can use a macOS 27 base pack with macOS 26 sidebar
6
+ * anatomy.
7
+ */
8
+ [data-ui-platform='macos'][data-ui-platform-version='26'],
9
+ [data-ui-sidebar-style='floating'] {
10
+ --m-ui-sidebar-width: var(--m26-source-sidebar-width-reference);
11
+ --m-ui-sidebar-window-inset: var(--m26-source-sidebar-window-inset);
12
+ --m-ui-sidebar-shell-radius: var(--m26-source-sidebar-radius-shell);
13
+ --m-ui-sidebar-item-radius: var(--m26-source-sidebar-radius-item);
14
+ --m-ui-sidebar-selection-radius: var(--m26-source-sidebar-radius-selection);
15
+ --m-ui-sidebar-corner-smoothing: var(--m26-source-sidebar-corner-smoothing);
16
+ --m-ui-sidebar-border-width: var(--m26-source-sidebar-border-width);
17
+ --m-ui-sidebar-divider-width: 0px;
18
+ --m-ui-sidebar-divider-color: transparent;
19
+ --m-ui-sidebar-shadow: var(--m26-source-sidebar-shadow);
20
+ --m-ui-sidebar-glass-effect-radius: var(
21
+ --m26-source-sidebar-glass-effect-radius
22
+ );
23
+ --m-ui-sidebar-padding-block: var(--m26-source-sidebar-padding-block);
24
+ --m-ui-sidebar-row-inset-inline: var(--m26-source-sidebar-row-inset-inline);
25
+ --m-ui-sidebar-row-height-small: var(--m26-source-sidebar-row-height-small);
26
+ --m-ui-sidebar-row-height-medium: var(--m26-source-sidebar-row-height-medium);
27
+ --m-ui-sidebar-row-height-large: var(--m26-source-sidebar-row-height-large);
28
+ --m-ui-sidebar-section-height-small: var(
29
+ --m26-source-sidebar-section-height-small
30
+ );
31
+ --m-ui-sidebar-section-height-medium: var(
32
+ --m26-source-sidebar-section-height-medium
33
+ );
34
+ --m-ui-sidebar-section-height-large: var(
35
+ --m26-source-sidebar-section-height-large
36
+ );
37
+ --m-ui-sidebar-selection-fill: var(--m26-source-sidebar-selection-light);
38
+ --m-ui-sidebar-material-fill: var(--m-ui-material-medium-fill);
39
+ }
40
+
41
+ /*
42
+ * @m26-divergence M26-WEB-COLOR-001
43
+ * The extracted light selection uses Multiply. Browser compositing the whole
44
+ * row with mix-blend-mode also blends its text and icons, so dark appearance
45
+ * uses a semantic alpha fill derived from the resolved platform text color.
46
+ */
47
+ [data-ui-sidebar-style='floating'][data-ui-appearance='dark'] {
48
+ --m-ui-sidebar-selection-fill: color-mix(
49
+ in srgb,
50
+ var(--m-ui-color-text-primary) 10%,
51
+ transparent
52
+ );
53
+ }
@@ -0,0 +1,7 @@
1
+ [data-ui-platform='macos'][data-ui-platform-version='26'],
2
+ [data-ui-sidebar-style='floating'] {
3
+ --sidebar: var(--m-ui-sidebar-material-fill);
4
+ --sidebar-accent: var(--m-ui-sidebar-selection-fill);
5
+ --density-row-height: var(--m-ui-sidebar-row-height-medium);
6
+ --material-shadow-sidebar: var(--m-ui-sidebar-shadow);
7
+ }
@@ -0,0 +1,3 @@
1
+ @import './source/sidebar.generated.css';
2
+ @import './aliases.css';
3
+ @import './compatibility.css';
@@ -0,0 +1,28 @@
1
+ {
2
+ "source": "macOS 26",
3
+ "schemaVersion": 1,
4
+ "scope": {
5
+ "platform": "macos",
6
+ "platformVersion": "26",
7
+ "publicTheme": false,
8
+ "immutableSourcePack": true
9
+ },
10
+ "coverage": ["floating-sidebar"],
11
+ "inventory": {
12
+ "variables": {
13
+ "total": 19,
14
+ "byType": {
15
+ "COLOR": 1,
16
+ "DIMENSION": 15,
17
+ "EFFECT": 1,
18
+ "PERCENT": 1,
19
+ "STRING": 1
20
+ }
21
+ }
22
+ },
23
+ "notes": [
24
+ "This initial source module covers the macOS 26 floating sidebar only.",
25
+ "It can be selected independently from the application's base platform pack.",
26
+ "No source artwork, symbols, vectors, image assets, or font files are included."
27
+ ]
28
+ }
@@ -0,0 +1,29 @@
1
+ /*
2
+ * Generated from the macOS 26 sidebar source specification.
3
+ * Values only. No source artwork, symbols, vectors, or image assets.
4
+ *
5
+ * The second selector exposes this immutable source to applications that
6
+ * deliberately compose the macOS 26 sidebar with another base platform pack.
7
+ */
8
+ [data-ui-platform='macos'][data-ui-platform-version='26'],
9
+ [data-ui-sidebar-style='floating'] {
10
+ --m26-source-sidebar-width-reference: 240px;
11
+ --m26-source-sidebar-window-inset: 8px;
12
+ --m26-source-sidebar-radius-shell: 18px;
13
+ --m26-source-sidebar-radius-item: 5px;
14
+ --m26-source-sidebar-radius-selection: 8px;
15
+ --m26-source-sidebar-corner-smoothing: 60%;
16
+ --m26-source-sidebar-shadow: 0 8px 40px rgb(0 0 0 / 12%);
17
+ --m26-source-sidebar-glass-effect-radius: 12px;
18
+ --m26-source-sidebar-border-width: 0px;
19
+ --m26-source-sidebar-padding-block: 10px;
20
+ --m26-source-sidebar-row-inset-inline: 10px;
21
+ --m26-source-sidebar-row-height-small: 24px;
22
+ --m26-source-sidebar-row-height-medium: 32px;
23
+ --m26-source-sidebar-row-height-large: 40px;
24
+ --m26-source-sidebar-section-height-small: 34px;
25
+ --m26-source-sidebar-section-height-medium: 39px;
26
+ --m26-source-sidebar-section-height-large: 43px;
27
+ --m26-source-sidebar-selection-light: rgb(0 0 0 / 11%);
28
+ --m26-source-sidebar-selection-blend-mode: multiply;
29
+ }
@@ -0,0 +1,7 @@
1
+ /*
2
+ * Immutable macOS 26 source specification.
3
+ *
4
+ * This initial entry point contains the floating-sidebar source module only.
5
+ * It intentionally excludes Moldable aliases and web compatibility mappings.
6
+ */
7
+ @import './source/sidebar.generated.css';
@@ -0,0 +1,25 @@
1
+ {
2
+ "source": "macOS 26",
3
+ "target": "web",
4
+ "schemaVersion": 1,
5
+ "idConvention": "M26-WEB-{AREA}-{NNN}",
6
+ "adaptations": [
7
+ {
8
+ "id": "M26-WEB-COLOR-001",
9
+ "area": "color",
10
+ "status": "intentional-divergence",
11
+ "summary": "Use a semantic alpha selection fill in dark appearance.",
12
+ "reason": "The extracted light selection uses Multiply. Applying mix-blend-mode to a browser row would also blend its text and icons, and a dark source selection value has not yet been added to this partial source module.",
13
+ "sourceBehavior": "An 11% black selection fill composited with Multiply in light appearance.",
14
+ "webBehavior": "The source fill remains exact in light appearance; dark appearance derives a 10% alpha fill from the resolved platform text color.",
15
+ "overrides": [
16
+ {
17
+ "appearance": "dark",
18
+ "token": "--m-ui-sidebar-selection-fill",
19
+ "sourceValue": "not-present-in-partial-source",
20
+ "adaptedValue": "color-mix(in srgb, var(--m-ui-color-text-primary) 10%, transparent)"
21
+ }
22
+ ]
23
+ }
24
+ ]
25
+ }
@@ -0,0 +1,15 @@
1
+ # macOS 26 web adaptations
2
+
3
+ The immutable macOS 26 values live in `source/`. Effective browser behavior is
4
+ kept in the adapter layer and identified with stable `M26-WEB-*` IDs.
5
+
6
+ ## M26-WEB-COLOR-001
7
+
8
+ The currently extracted sidebar selection is the light-appearance value:
9
+ 11% black composited with Multiply. Applying `mix-blend-mode` to the entire
10
+ browser row also blends its label and icon, so the light value remains exact
11
+ while dark appearance uses a semantic 10% alpha fill derived from the resolved
12
+ platform text color.
13
+
14
+ When a dark macOS 26 source selection is added, this adaptation should be
15
+ re-evaluated rather than silently replacing the source.
@@ -0,0 +1,11 @@
1
+ @media (prefers-reduced-transparency: reduce) {
2
+ :root {
3
+ --m-ui-material-blur: 0px;
4
+ }
5
+ }
6
+
7
+ @media (prefers-contrast: more) {
8
+ :root {
9
+ --m-ui-color-text-secondary: var(--m-ui-color-text-primary);
10
+ }
11
+ }