@sincpro/mobile-ui 3.0.1 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (308) hide show
  1. package/dist/Actions/Actions.Button.d.ts +6 -6
  2. package/dist/Actions/Actions.Button.js +650 -180
  3. package/dist/Actions/Actions.Dock.d.ts +1 -1
  4. package/dist/Actions/Actions.Dock.js +297 -18
  5. package/dist/Actions/Actions.FAB.js +100 -12
  6. package/dist/Actions/Actions.FilterButton.d.ts +17 -0
  7. package/dist/Actions/Actions.FilterButton.js +263 -33
  8. package/dist/Actions/Actions.IconButton.d.ts +1 -0
  9. package/dist/Actions/Actions.IconButton.js +196 -33
  10. package/dist/Actions/index.js +13 -13
  11. package/dist/Dialog/Confirmation.context.js +82 -16
  12. package/dist/Dialog/Dialog.ActionSheet.js +200 -41
  13. package/dist/Dialog/Dialog.Confirmation.js +168 -31
  14. package/dist/Dialog/Dialog.EditValue.js +449 -61
  15. package/dist/Dialog/Dialog.Sheet.d.ts +7 -3
  16. package/dist/Dialog/Dialog.Sheet.js +231 -15
  17. package/dist/Dialog/OverlayHost.d.ts +23 -0
  18. package/dist/Dialog/OverlayHost.js +196 -0
  19. package/dist/Dialog/SheetSurface.d.ts +24 -0
  20. package/dist/Dialog/SheetSurface.js +441 -0
  21. package/dist/Dialog/dialog-actions.d.ts +17 -0
  22. package/dist/Dialog/dialog-actions.js +59 -0
  23. package/dist/Dialog/index.d.ts +4 -1
  24. package/dist/Dialog/index.js +8 -7
  25. package/dist/Dialog/overlay.store.d.ts +24 -0
  26. package/dist/Dialog/overlay.store.js +59 -0
  27. package/dist/Dialog/requestConfirmation.js +20 -10
  28. package/dist/Display/Display.Accordion.js +185 -13
  29. package/dist/Display/Display.AmountSummary.js +206 -15
  30. package/dist/Display/Display.Avatar.js +93 -31
  31. package/dist/Display/Display.AvatarGroup.js +132 -17
  32. package/dist/Display/Display.Badge.d.ts +18 -2
  33. package/dist/Display/Display.Badge.js +117 -49
  34. package/dist/Display/Display.Card.js +163 -26
  35. package/dist/Display/Display.Carousel.js +459 -105
  36. package/dist/Display/Display.Chip.d.ts +4 -1
  37. package/dist/Display/Display.Chip.js +165 -31
  38. package/dist/Display/Display.CircleButton.d.ts +1 -0
  39. package/dist/Display/Display.CircleButton.js +86 -27
  40. package/dist/Display/Display.CopyableText.js +289 -66
  41. package/dist/Display/Display.CountRecords.js +60 -3
  42. package/dist/Display/Display.DataTable.js +123 -13
  43. package/dist/Display/Display.Date.js +243 -33
  44. package/dist/Display/Display.Divider.d.ts +10 -10
  45. package/dist/Display/Display.Divider.js +67 -20
  46. package/dist/Display/Display.ExpoImage.js +97 -8
  47. package/dist/Display/Display.GradientSurface.d.ts +9 -4
  48. package/dist/Display/Display.GradientSurface.js +196 -46
  49. package/dist/Display/Display.Icon.js +129 -15
  50. package/dist/Display/Display.IconBadge.js +95 -25
  51. package/dist/Display/Display.Image.d.ts +7 -1
  52. package/dist/Display/Display.Image.js +344 -39
  53. package/dist/Display/Display.KeyValue.js +90 -5
  54. package/dist/Display/Display.ListGroup.js +181 -9
  55. package/dist/Display/Display.ListItem.js +324 -28
  56. package/dist/Display/Display.Logo.js +84 -29
  57. package/dist/Display/Display.MediaCard.js +125 -4
  58. package/dist/Display/Display.MediaEmbed.d.ts +0 -5
  59. package/dist/Display/Display.MediaEmbed.js +170 -26
  60. package/dist/Display/Display.MenuButton.d.ts +2 -2
  61. package/dist/Display/Display.MenuButton.js +380 -94
  62. package/dist/Display/Display.MenuCard.js +122 -18
  63. package/dist/Display/Display.MenuGrid.js +43 -3
  64. package/dist/Display/Display.Monetary.js +90 -5
  65. package/dist/Display/Display.Pattern.js +306 -47
  66. package/dist/Display/Display.PriceTag.js +117 -14
  67. package/dist/Display/Display.ProductCard.js +154 -4
  68. package/dist/Display/Display.Rating.js +92 -11
  69. package/dist/Display/Display.SearchHistory.js +132 -6
  70. package/dist/Display/Display.SectionHeader.d.ts +5 -1
  71. package/dist/Display/Display.SectionHeader.js +125 -12
  72. package/dist/Display/Display.Stat.js +62 -3
  73. package/dist/Display/Display.StatCard.js +131 -7
  74. package/dist/Display/Display.StatusBadge.d.ts +29 -0
  75. package/dist/Display/Display.StatusBadge.js +68 -0
  76. package/dist/Display/Display.StatusDot.js +93 -18
  77. package/dist/Display/Display.Story.js +285 -35
  78. package/dist/Display/Display.StoryTray.js +354 -34
  79. package/dist/Display/Display.StoryViewer.js +571 -72
  80. package/dist/Display/Display.SwipeableRow.js +141 -20
  81. package/dist/Display/Display.Tag.d.ts +4 -1
  82. package/dist/Display/Display.Tag.js +66 -4
  83. package/dist/Display/Display.Timeline.js +102 -13
  84. package/dist/Display/Display.Tooltip.js +122 -26
  85. package/dist/Display/chevron.d.ts +6 -0
  86. package/dist/Display/chevron.js +32 -0
  87. package/dist/Display/count-badge.d.ts +21 -0
  88. package/dist/Display/count-badge.js +124 -0
  89. package/dist/Display/group-title.d.ts +10 -0
  90. package/dist/Display/group-title.js +53 -0
  91. package/dist/Display/icon-font.d.ts +3 -0
  92. package/dist/Display/icon-font.ios.d.ts +3 -0
  93. package/dist/Display/icon-font.ios.js +4 -0
  94. package/dist/Display/icon-font.js +7 -0
  95. package/dist/Display/icon-glyphs.d.ts +2 -0
  96. package/dist/Display/icon-glyphs.js +87 -0
  97. package/dist/Display/icon-map.d.ts +5 -1
  98. package/dist/Display/icon-map.js +340 -84
  99. package/dist/Display/icon-registry.d.ts +21 -0
  100. package/dist/Display/icon-registry.js +21 -0
  101. package/dist/Display/index.d.ts +6 -1
  102. package/dist/Display/index.js +53 -48
  103. package/dist/Display/pill.d.ts +16 -0
  104. package/dist/Display/pill.js +47 -0
  105. package/dist/Feedback/ErrorBoundary.js +35 -23
  106. package/dist/Feedback/Feedback.Banner.js +202 -24
  107. package/dist/Feedback/Feedback.DomainSplashScreen.js +246 -70
  108. package/dist/Feedback/Feedback.Empty.js +54 -3
  109. package/dist/Feedback/Feedback.EmptyState.js +114 -5
  110. package/dist/Feedback/Feedback.Error.d.ts +1 -1
  111. package/dist/Feedback/Feedback.Error.js +130 -5
  112. package/dist/Feedback/Feedback.Loading.d.ts +1 -1
  113. package/dist/Feedback/Feedback.Loading.js +70 -3
  114. package/dist/Feedback/Feedback.PermissionCard.js +161 -5
  115. package/dist/Feedback/Feedback.Progress.js +199 -41
  116. package/dist/Feedback/Feedback.ProgressCircle.js +184 -12
  117. package/dist/Feedback/Feedback.Skeleton.js +149 -36
  118. package/dist/Feedback/Feedback.Spinner.js +407 -79
  119. package/dist/Feedback/Feedback.Splash.js +240 -33
  120. package/dist/Feedback/Feedback.State.d.ts +17 -0
  121. package/dist/Feedback/Feedback.State.js +104 -0
  122. package/dist/Feedback/Toast.context.js +883 -167
  123. package/dist/Feedback/index.d.ts +3 -0
  124. package/dist/Feedback/index.js +15 -13
  125. package/dist/Form/Form.Checkbox.js +212 -22
  126. package/dist/Form/Form.ControlledCheckbox.d.ts +1 -1
  127. package/dist/Form/Form.ControlledCheckbox.js +46 -4
  128. package/dist/Form/Form.ControlledDropdown.d.ts +1 -1
  129. package/dist/Form/Form.ControlledDropdown.js +62 -4
  130. package/dist/Form/Form.ControlledInput.d.ts +4 -3
  131. package/dist/Form/Form.ControlledInput.js +72 -4
  132. package/dist/Form/Form.ControlledMonetaryInput.d.ts +6 -3
  133. package/dist/Form/Form.ControlledMonetaryInput.js +50 -4
  134. package/dist/Form/Form.ControlledRadioButton.d.ts +2 -2
  135. package/dist/Form/Form.ControlledRadioButton.js +45 -4
  136. package/dist/Form/Form.DatePicker.js +505 -107
  137. package/dist/Form/Form.Dropdown.js +303 -52
  138. package/dist/Form/Form.ErrorSummary.js +236 -44
  139. package/dist/Form/Form.Field.d.ts +24 -0
  140. package/dist/Form/Form.Field.js +55 -0
  141. package/dist/Form/Form.FractionalQuantityInput.js +508 -96
  142. package/dist/Form/Form.Input.d.ts +17 -3
  143. package/dist/Form/Form.Input.js +478 -29
  144. package/dist/Form/Form.KeyboardForm.d.ts +22 -8
  145. package/dist/Form/Form.KeyboardForm.js +83 -8
  146. package/dist/Form/Form.KeyboardToolbarHost.d.ts +14 -0
  147. package/dist/Form/Form.KeyboardToolbarHost.js +182 -0
  148. package/dist/Form/Form.MonetaryInput.js +164 -17
  149. package/dist/Form/Form.PickerField.d.ts +31 -0
  150. package/dist/Form/Form.PickerField.js +562 -0
  151. package/dist/Form/Form.PinInput.js +150 -15
  152. package/dist/Form/Form.QuantitySelector.js +229 -25
  153. package/dist/Form/Form.RadioButton.js +132 -24
  154. package/dist/Form/Form.Select.js +487 -56
  155. package/dist/Form/Form.Slider.js +133 -10
  156. package/dist/Form/Form.Switch.js +99 -4
  157. package/dist/Form/index.d.ts +11 -6
  158. package/dist/Form/index.js +26 -27
  159. package/dist/Form/input-text.d.ts +7 -0
  160. package/dist/Form/input-text.js +18 -0
  161. package/dist/Navigation/Navigation.AppBar.d.ts +3 -4
  162. package/dist/Navigation/Navigation.AppBar.js +535 -99
  163. package/dist/Navigation/Navigation.BottomNav.js +363 -98
  164. package/dist/Navigation/Navigation.CollapsingHeader.d.ts +28 -13
  165. package/dist/Navigation/Navigation.CollapsingHeader.js +369 -36
  166. package/dist/Navigation/Navigation.FloatingBar.js +71 -11
  167. package/dist/Navigation/Navigation.Menu.js +309 -95
  168. package/dist/Navigation/Navigation.MenuSection.js +80 -11
  169. package/dist/Navigation/Navigation.RowItem.d.ts +4 -2
  170. package/dist/Navigation/Navigation.RowItem.js +93 -8
  171. package/dist/Navigation/Navigation.Search.js +241 -27
  172. package/dist/Navigation/Navigation.SearchBar.d.ts +7 -1
  173. package/dist/Navigation/Navigation.SearchBar.js +218 -29
  174. package/dist/Navigation/Navigation.SearchSuggestions.js +77 -3
  175. package/dist/Navigation/Navigation.SegmentedControl.js +152 -14
  176. package/dist/Navigation/Navigation.Steps.js +105 -11
  177. package/dist/Navigation/Navigation.Tabs.js +449 -41
  178. package/dist/Navigation/index.d.ts +9 -4
  179. package/dist/Navigation/index.js +13 -13
  180. package/dist/Typography/Typography.Heading.js +33 -3
  181. package/dist/Typography/Typography.SelectableText.js +95 -7
  182. package/dist/Typography/Typography.Text.d.ts +4 -2
  183. package/dist/Typography/Typography.Text.js +217 -7
  184. package/dist/Typography/index.js +3 -3
  185. package/dist/branding.js +29 -13
  186. package/dist/icons/AddItemIcon.js +76 -2
  187. package/dist/icons/ArrangeCircle.js +82 -2
  188. package/dist/icons/ArrowDownIcon.js +63 -3
  189. package/dist/icons/ArrowUpIcon.js +63 -3
  190. package/dist/icons/BoxIcon.js +64 -2
  191. package/dist/icons/BoxTimeIcon.js +63 -2
  192. package/dist/icons/CalendarIcon.js +145 -2
  193. package/dist/icons/CardIcon.js +80 -2
  194. package/dist/icons/CashierIcon.js +39 -2
  195. package/dist/icons/CreditIcon.js +76 -3
  196. package/dist/icons/DuoIcon.js +75 -2
  197. package/dist/icons/HomeIcon.js +39 -2
  198. package/dist/icons/HomeIconOutlined.js +53 -2
  199. package/dist/icons/LogoIcon.js +87 -2
  200. package/dist/icons/MoneyReceiveIcon.js +86 -2
  201. package/dist/icons/PinIcon.js +39 -2
  202. package/dist/icons/ProfileIcon.js +47 -2
  203. package/dist/icons/SettingsIcon.js +114 -2
  204. package/dist/icons/SinpeIcon.js +60 -2
  205. package/dist/icons/ToggleOffIcon.js +53 -2
  206. package/dist/icons/WalletMoneyIcon.js +81 -2
  207. package/dist/index.d.ts +1 -0
  208. package/dist/index.js +8 -2
  209. package/dist/layouts/AuthContainer.d.ts +4 -5
  210. package/dist/layouts/AuthContainer.js +231 -7
  211. package/dist/layouts/BottomInset.js +4 -1
  212. package/dist/layouts/Container.d.ts +2 -2
  213. package/dist/layouts/Container.js +45 -3
  214. package/dist/layouts/GradientContainer.js +37 -5
  215. package/dist/layouts/PlainLayout.js +19 -3
  216. package/dist/layouts/ScrollContainer.d.ts +14 -9
  217. package/dist/layouts/ScrollContainer.js +125 -4
  218. package/dist/layouts/edges.d.ts +2 -0
  219. package/dist/layouts/edges.js +1 -0
  220. package/dist/primitives/AspectRatio.js +75 -3
  221. package/dist/primitives/Box.js +45 -3
  222. package/dist/primitives/Pressable.js +95 -5
  223. package/dist/primitives/Row.js +84 -13
  224. package/dist/primitives/Spacer.js +42 -5
  225. package/dist/primitives/Stack.js +66 -7
  226. package/dist/primitives/index.js +1 -1
  227. package/dist/theme/active.js +20 -18
  228. package/dist/theme/build.js +118 -87
  229. package/dist/theme/color.js +87 -87
  230. package/dist/theme/components/ThemedActivityIndicator.d.ts +2 -15
  231. package/dist/theme/components/ThemedActivityIndicator.js +35 -3
  232. package/dist/theme/components/index.js +1 -0
  233. package/dist/theme/contrast.js +32 -33
  234. package/dist/theme/css-vars.js +71 -75
  235. package/dist/theme/dark.js +116 -97
  236. package/dist/theme/default.js +116 -97
  237. package/dist/theme/define.js +16 -12
  238. package/dist/theme/index.d.ts +1 -0
  239. package/dist/theme/index.js +7 -6
  240. package/dist/theme/on-dark-surface.d.ts +12 -0
  241. package/dist/theme/on-dark-surface.js +13 -0
  242. package/dist/theme/theme.js +1 -0
  243. package/dist/theme/tw.js +3 -1
  244. package/dist/theme/types.js +0 -18
  245. package/dist/theme/typography.d.ts +1 -1
  246. package/dist/theme/typography.js +337 -303
  247. package/dist/theme/useTheme.js +12 -3
  248. package/dist/theme/useThemeVars.d.ts +9 -0
  249. package/dist/theme/useThemeVars.js +23 -0
  250. package/dist/theme/validate.js +175 -166
  251. package/dist/tokens/index.js +1 -1
  252. package/dist/tokens/motion.js +30 -13
  253. package/dist/utils/async.d.ts +14 -0
  254. package/dist/utils/async.js +22 -0
  255. package/dist/utils/criteria.js +66 -85
  256. package/dist/utils/date.d.ts +8 -2
  257. package/dist/utils/date.js +63 -50
  258. package/dist/utils/image.js +8 -8
  259. package/dist/utils/intl.d.ts +1 -0
  260. package/dist/utils/intl.js +13 -0
  261. package/dist/utils/keys.js +3 -5
  262. package/dist/utils/monetary.d.ts +1 -0
  263. package/dist/utils/monetary.js +28 -24
  264. package/dist/utils/progress.js +2 -3
  265. package/dist/utils/quantity.js +25 -26
  266. package/dist/utils/reorder.js +11 -20
  267. package/dist/utils/search.d.ts +4 -0
  268. package/dist/utils/search.js +12 -0
  269. package/dist/utils/serializer.js +38 -38
  270. package/dist/utils/useReducedMotion.js +32 -30
  271. package/dist/views/AppSplashView.js +117 -3
  272. package/dist/views/AuthFormView.d.ts +4 -5
  273. package/dist/views/AuthFormView.js +119 -11
  274. package/dist/views/FormViewV2.context.js +75 -23
  275. package/dist/views/FormViewV2.d.ts +4 -5
  276. package/dist/views/FormViewV2.js +658 -92
  277. package/dist/views/ListViewV2.context.js +91 -47
  278. package/dist/views/ListViewV2.d.ts +84 -43
  279. package/dist/views/ListViewV2.js +1350 -200
  280. package/dist/views/Wizard/Wizard.context.js +248 -84
  281. package/dist/views/Wizard/Wizard.js +260 -67
  282. package/dist/views/types/IListView.js +34 -31
  283. package/dist/widgets/CollectionOptions.js +557 -138
  284. package/dist/widgets/FilterBar.js +159 -7
  285. package/dist/widgets/FilterBuilder.js +375 -102
  286. package/dist/widgets/JSONViewer.js +275 -129
  287. package/dist/widgets/PromoBanner.js +336 -42
  288. package/dist/widgets/PromoModal.d.ts +2 -2
  289. package/dist/widgets/PromoModal.js +389 -62
  290. package/dist/widgets/QueryChoice.js +150 -8
  291. package/dist/widgets/QuickActions.js +120 -31
  292. package/dist/widgets/ReorderableList.js +399 -128
  293. package/dist/widgets/TimeZoneSelectorModal.js +458 -51
  294. package/dist/widgets/index.js +3 -3
  295. package/package.json +6 -1
  296. package/tailwind.preset.js +7 -5
  297. package/dist/Form/Form.InputField.d.ts +0 -10
  298. package/dist/Form/Form.InputField.js +0 -38
  299. package/dist/Form/Form.KeyboardToolbar.d.ts +0 -22
  300. package/dist/Form/Form.KeyboardToolbar.js +0 -66
  301. package/dist/Form/Form.PasswordInput.d.ts +0 -9
  302. package/dist/Form/Form.PasswordInput.js +0 -17
  303. package/dist/Form/Form.TextInput.d.ts +0 -8
  304. package/dist/Form/Form.TextInput.js +0 -8
  305. package/dist/primitives/BaseButton.d.ts +0 -150
  306. package/dist/primitives/BaseButton.js +0 -229
  307. package/dist/utils/useSheetTranslation.d.ts +0 -5
  308. package/dist/utils/useSheetTranslation.js +0 -23
@@ -1,16 +1,12 @@
1
1
  function toRgbTriplet(color) {
2
- const hex = color.trim().replace(/^#/, "");
3
- const full = hex.length === 3
4
- ? hex
5
- .split("")
6
- .map((c) => c + c)
7
- .join("")
8
- : hex;
9
- const r = Number.parseInt(full.slice(0, 2), 16);
10
- const g = Number.parseInt(full.slice(2, 4), 16);
11
- const b = Number.parseInt(full.slice(4, 6), 16);
12
- return `${r} ${g} ${b}`;
2
+ const hex = color.trim().replace(/^#/, "");
3
+ const full = hex.length === 3 ? hex.split("").map(c => c + c).join("") : hex;
4
+ const r = Number.parseInt(full.slice(0, 2), 16);
5
+ const g = Number.parseInt(full.slice(2, 4), 16);
6
+ const b = Number.parseInt(full.slice(4, 6), 16);
7
+ return `${r} ${g} ${b}`;
13
8
  }
9
+
14
10
  /**
15
11
  * Deriva las CSS variables (tripletes RGB para `rgb(var(--x) / <alpha>)`) a
16
12
  * partir del objeto de tokens tipado. Fuente ÚNICA: las clases (className) y el
@@ -19,68 +15,68 @@ function toRgbTriplet(color) {
19
15
  * State / material opacities are emitted as unitless numbers (not RGB).
20
16
  */
21
17
  export function themeToVars(t) {
22
- const rgb = toRgbTriplet;
23
- return {
24
- "--primary": rgb(t.primary),
25
- "--secondary": rgb(t.secondary),
26
- "--accent": rgb(t.accent),
27
- "--bg-page": rgb(t.bg.page),
28
- "--bg-card": rgb(t.bg.card),
29
- "--bg-popover": rgb(t.bg.popover),
30
- "--bg-muted": rgb(t.bg.muted),
31
- "--bg-accent": rgb(t.bg.accent),
32
- "--bg-hover": rgb(t.bg.hover),
33
- "--bg-disabled": rgb(t.bg.disabled),
34
- "--bg-container-lowest": rgb(t.bg.containerLowest),
35
- "--bg-container": rgb(t.bg.container),
36
- "--bg-container-high": rgb(t.bg.containerHigh),
37
- "--text-primary": rgb(t.text.primary),
38
- "--text-secondary": rgb(t.text.secondary),
39
- "--text-tertiary": rgb(t.text.tertiary),
40
- "--text-muted": rgb(t.text.muted),
41
- "--text-accent": rgb(t.text.accent),
42
- "--text-inverse": rgb(t.text.inverse),
43
- "--text-disabled": rgb(t.text.disabled),
44
- "--text-on-primary": rgb(t.text.onPrimary),
45
- "--text-on-secondary": rgb(t.text.onSecondary),
46
- "--text-on-accent": rgb(t.text.onAccent),
47
- "--text-on-danger": rgb(t.text.onDanger),
48
- "--text-on-success": rgb(t.text.onSuccess),
49
- "--icon-primary": rgb(t.icon.primary),
50
- "--icon-secondary": rgb(t.icon.secondary),
51
- "--icon-tertiary": rgb(t.icon.tertiary),
52
- "--icon-inverse": rgb(t.icon.inverse),
53
- "--icon-disabled": rgb(t.icon.disabled),
54
- "--border-default": rgb(t.border.default),
55
- "--border-light": rgb(t.border.light),
56
- "--border-strong": rgb(t.border.strong),
57
- "--border-focus": rgb(t.border.focus),
58
- "--success": rgb(t.success),
59
- "--warning": rgb(t.warning),
60
- "--danger": rgb(t.danger),
61
- "--info": rgb(t.info),
62
- "--container-primary": rgb(t.container.primary),
63
- "--container-on-primary": rgb(t.container.onPrimary),
64
- "--container-secondary": rgb(t.container.secondary),
65
- "--container-on-secondary": rgb(t.container.onSecondary),
66
- "--container-accent": rgb(t.container.accent),
67
- "--container-on-accent": rgb(t.container.onAccent),
68
- "--container-success": rgb(t.container.success),
69
- "--container-on-success": rgb(t.container.onSuccess),
70
- "--container-warning": rgb(t.container.warning),
71
- "--container-on-warning": rgb(t.container.onWarning),
72
- "--container-danger": rgb(t.container.danger),
73
- "--container-on-danger": rgb(t.container.onDanger),
74
- "--container-info": rgb(t.container.info),
75
- "--container-on-info": rgb(t.container.onInfo),
76
- "--state-hover": String(t.state.hover),
77
- "--state-press": String(t.state.press),
78
- "--state-focus": String(t.state.focus),
79
- "--state-drag": String(t.state.drag),
80
- "--material-blur": String(t.material.blur),
81
- "--material-opacity": String(t.material.opacity),
82
- "--material-border-opacity": String(t.material.borderOpacity),
83
- "--ring": rgb(t.ring),
84
- "--input": rgb(t.input),
85
- };
18
+ const rgb = toRgbTriplet;
19
+ return {
20
+ "--primary": rgb(t.primary),
21
+ "--secondary": rgb(t.secondary),
22
+ "--accent": rgb(t.accent),
23
+ "--bg-page": rgb(t.bg.page),
24
+ "--bg-card": rgb(t.bg.card),
25
+ "--bg-popover": rgb(t.bg.popover),
26
+ "--bg-muted": rgb(t.bg.muted),
27
+ "--bg-accent": rgb(t.bg.accent),
28
+ "--bg-hover": rgb(t.bg.hover),
29
+ "--bg-disabled": rgb(t.bg.disabled),
30
+ "--bg-container-lowest": rgb(t.bg.containerLowest),
31
+ "--bg-container": rgb(t.bg.container),
32
+ "--bg-container-high": rgb(t.bg.containerHigh),
33
+ "--text-primary": rgb(t.text.primary),
34
+ "--text-secondary": rgb(t.text.secondary),
35
+ "--text-tertiary": rgb(t.text.tertiary),
36
+ "--text-muted": rgb(t.text.muted),
37
+ "--text-accent": rgb(t.text.accent),
38
+ "--text-inverse": rgb(t.text.inverse),
39
+ "--text-disabled": rgb(t.text.disabled),
40
+ "--text-on-primary": rgb(t.text.onPrimary),
41
+ "--text-on-secondary": rgb(t.text.onSecondary),
42
+ "--text-on-accent": rgb(t.text.onAccent),
43
+ "--text-on-danger": rgb(t.text.onDanger),
44
+ "--text-on-success": rgb(t.text.onSuccess),
45
+ "--icon-primary": rgb(t.icon.primary),
46
+ "--icon-secondary": rgb(t.icon.secondary),
47
+ "--icon-tertiary": rgb(t.icon.tertiary),
48
+ "--icon-inverse": rgb(t.icon.inverse),
49
+ "--icon-disabled": rgb(t.icon.disabled),
50
+ "--border-default": rgb(t.border.default),
51
+ "--border-light": rgb(t.border.light),
52
+ "--border-strong": rgb(t.border.strong),
53
+ "--border-focus": rgb(t.border.focus),
54
+ "--success": rgb(t.success),
55
+ "--warning": rgb(t.warning),
56
+ "--danger": rgb(t.danger),
57
+ "--info": rgb(t.info),
58
+ "--container-primary": rgb(t.container.primary),
59
+ "--container-on-primary": rgb(t.container.onPrimary),
60
+ "--container-secondary": rgb(t.container.secondary),
61
+ "--container-on-secondary": rgb(t.container.onSecondary),
62
+ "--container-accent": rgb(t.container.accent),
63
+ "--container-on-accent": rgb(t.container.onAccent),
64
+ "--container-success": rgb(t.container.success),
65
+ "--container-on-success": rgb(t.container.onSuccess),
66
+ "--container-warning": rgb(t.container.warning),
67
+ "--container-on-warning": rgb(t.container.onWarning),
68
+ "--container-danger": rgb(t.container.danger),
69
+ "--container-on-danger": rgb(t.container.onDanger),
70
+ "--container-info": rgb(t.container.info),
71
+ "--container-on-info": rgb(t.container.onInfo),
72
+ "--state-hover": String(t.state.hover),
73
+ "--state-press": String(t.state.press),
74
+ "--state-focus": String(t.state.focus),
75
+ "--state-drag": String(t.state.drag),
76
+ "--material-blur": String(t.material.blur),
77
+ "--material-opacity": String(t.material.opacity),
78
+ "--material-border-opacity": String(t.material.borderOpacity),
79
+ "--ring": rgb(t.ring),
80
+ "--input": rgb(t.input)
81
+ };
86
82
  }
@@ -17,108 +17,127 @@ const successC = containerPair(SUCCESS, "dark");
17
17
  const warningC = containerPair(WARNING, "dark");
18
18
  const dangerC = containerPair(DANGER, "dark");
19
19
  const infoC = containerPair(INFO, "dark");
20
+
20
21
  /**
21
22
  * Default dark theme. Companion to `DEFAULT_THEME`.
22
23
  * Prefer `buildThemeFromBrand({ mode: "dark", ... })` for brand apps.
23
24
  */
24
25
  export const DEFAULT_DARK_THEME = {
25
- name: "default-dark",
26
- primary: PRIMARY,
27
- secondary: SECONDARY,
28
- accent: ACCENT,
29
- bg: {
30
- page: "#181614",
31
- card: "#221F1C",
32
- popover: "#221F1C",
33
- muted: "#302C28",
34
- accent: primaryC.container,
35
- hover: "#2A2622",
36
- disabled: "#3A342F",
37
- inverse: "#FAF9F7",
38
- containerLowest: "#141210",
39
- container: "#221F1C",
40
- containerHigh: "#302C28",
26
+ name: "default-dark",
27
+ primary: PRIMARY,
28
+ secondary: SECONDARY,
29
+ accent: ACCENT,
30
+ bg: {
31
+ page: "#181614",
32
+ card: "#221F1C",
33
+ popover: "#221F1C",
34
+ muted: "#302C28",
35
+ accent: primaryC.container,
36
+ hover: "#2A2622",
37
+ disabled: "#3A342F",
38
+ inverse: "#FAF9F7",
39
+ containerLowest: "#141210",
40
+ container: "#221F1C",
41
+ containerHigh: "#302C28"
42
+ },
43
+ text: {
44
+ primary: INK,
45
+ secondary: MUTED,
46
+ tertiary: "#8A8178",
47
+ muted: MUTED,
48
+ accent: PRIMARY,
49
+ inverse: "#0A0A0A",
50
+ disabled: "#8A8A8A",
51
+ onPrimary: resolveOnColor(PRIMARY),
52
+ onSecondary: resolveOnColor(SECONDARY),
53
+ onAccent: resolveOnColor(ACCENT),
54
+ onDanger: resolveOnColor(DANGER),
55
+ onSuccess: resolveOnColor(SUCCESS)
56
+ },
57
+ icon: {
58
+ primary: INK,
59
+ secondary: MUTED,
60
+ tertiary: "#8A8178",
61
+ inverse: "#0A0A0A",
62
+ disabled: "#8A8A8A"
63
+ },
64
+ border: {
65
+ default: "#302C28",
66
+ light: "#221F1C",
67
+ strong: "#443F38",
68
+ focus: PRIMARY
69
+ },
70
+ success: SUCCESS,
71
+ warning: WARNING,
72
+ danger: DANGER,
73
+ info: INFO,
74
+ container: {
75
+ primary: primaryC.container,
76
+ onPrimary: primaryC.onContainer,
77
+ secondary: secondaryC.container,
78
+ onSecondary: secondaryC.onContainer,
79
+ accent: accentC.container,
80
+ onAccent: accentC.onContainer,
81
+ success: successC.container,
82
+ onSuccess: successC.onContainer,
83
+ warning: warningC.container,
84
+ onWarning: warningC.onContainer,
85
+ danger: dangerC.container,
86
+ onDanger: dangerC.onContainer,
87
+ info: infoC.container,
88
+ onInfo: infoC.onContainer
89
+ },
90
+ state: {
91
+ hover: 0.1,
92
+ press: 0.16,
93
+ focus: 0.14,
94
+ drag: 0.2
95
+ },
96
+ material: {
97
+ blur: 28,
98
+ opacity: 0.62,
99
+ borderOpacity: 0.22
100
+ },
101
+ ring: PRIMARY,
102
+ input: "#302C28",
103
+ gradient: {
104
+ primary: ["#1C3765", PRIMARY],
105
+ accent: [ACCENT, "#DBB055"]
106
+ },
107
+ shadow: {
108
+ sm: {
109
+ shadowColor: "#000000",
110
+ shadowOffset: {
111
+ width: 0,
112
+ height: 1
113
+ },
114
+ shadowOpacity: 0.4,
115
+ shadowRadius: 3,
116
+ elevation: 2
41
117
  },
42
- text: {
43
- primary: INK,
44
- secondary: MUTED,
45
- tertiary: "#8A8178",
46
- muted: MUTED,
47
- accent: PRIMARY,
48
- inverse: "#0A0A0A",
49
- disabled: "#8A8A8A",
50
- onPrimary: resolveOnColor(PRIMARY),
51
- onSecondary: resolveOnColor(SECONDARY),
52
- onAccent: resolveOnColor(ACCENT),
53
- onDanger: resolveOnColor(DANGER),
54
- onSuccess: resolveOnColor(SUCCESS),
55
- },
56
- icon: {
57
- primary: INK,
58
- secondary: MUTED,
59
- tertiary: "#8A8178",
60
- inverse: "#0A0A0A",
61
- disabled: "#8A8A8A",
62
- },
63
- border: {
64
- default: "#302C28",
65
- light: "#221F1C",
66
- strong: "#443F38",
67
- focus: PRIMARY,
68
- },
69
- success: SUCCESS,
70
- warning: WARNING,
71
- danger: DANGER,
72
- info: INFO,
73
- container: {
74
- primary: primaryC.container,
75
- onPrimary: primaryC.onContainer,
76
- secondary: secondaryC.container,
77
- onSecondary: secondaryC.onContainer,
78
- accent: accentC.container,
79
- onAccent: accentC.onContainer,
80
- success: successC.container,
81
- onSuccess: successC.onContainer,
82
- warning: warningC.container,
83
- onWarning: warningC.onContainer,
84
- danger: dangerC.container,
85
- onDanger: dangerC.onContainer,
86
- info: infoC.container,
87
- onInfo: infoC.onContainer,
88
- },
89
- state: { hover: 0.1, press: 0.16, focus: 0.14, drag: 0.2 },
90
- material: { blur: 28, opacity: 0.62, borderOpacity: 0.22 },
91
- ring: PRIMARY,
92
- input: "#302C28",
93
- gradient: {
94
- primary: ["#1C3765", PRIMARY],
95
- accent: [ACCENT, "#DBB055"],
96
- },
97
- shadow: {
98
- sm: {
99
- shadowColor: "#000000",
100
- shadowOffset: { width: 0, height: 1 },
101
- shadowOpacity: 0.4,
102
- shadowRadius: 3,
103
- elevation: 2,
104
- },
105
- md: {
106
- shadowColor: "#000000",
107
- shadowOffset: { width: 0, height: 4 },
108
- shadowOpacity: 0.55,
109
- shadowRadius: 8,
110
- elevation: 4,
111
- },
112
- lg: {
113
- shadowColor: "#000000",
114
- shadowOffset: { width: 0, height: 10 },
115
- shadowOpacity: 0.65,
116
- shadowRadius: 18,
117
- elevation: 7,
118
- },
119
- },
120
- pattern: {
121
- mode: "dark-pattern",
122
- size: 56,
118
+ md: {
119
+ shadowColor: "#000000",
120
+ shadowOffset: {
121
+ width: 0,
122
+ height: 4
123
+ },
124
+ shadowOpacity: 0.55,
125
+ shadowRadius: 8,
126
+ elevation: 4
123
127
  },
128
+ lg: {
129
+ shadowColor: "#000000",
130
+ shadowOffset: {
131
+ width: 0,
132
+ height: 10
133
+ },
134
+ shadowOpacity: 0.65,
135
+ shadowRadius: 18,
136
+ elevation: 7
137
+ }
138
+ },
139
+ pattern: {
140
+ mode: "dark-pattern",
141
+ size: 56
142
+ }
124
143
  };
@@ -17,108 +17,127 @@ const successC = containerPair(SUCCESS, "light");
17
17
  const warningC = containerPair(WARNING, "light");
18
18
  const dangerC = containerPair(DANGER, "light");
19
19
  const infoC = containerPair(INFO, "light");
20
+
20
21
  /**
21
22
  * Default light theme. Sample values — not the framework identity.
22
23
  * Prefer `buildThemeFromBrand` or `extendTheme` at app boot.
23
24
  */
24
25
  export const DEFAULT_THEME = {
25
- name: "default-light",
26
- primary: PRIMARY,
27
- secondary: SECONDARY,
28
- accent: ACCENT,
29
- bg: {
30
- page: "#FAF9F7",
31
- card: "#FFFFFF",
32
- popover: "#FFFFFF",
33
- muted: "#F3F0EA",
34
- accent: primaryC.container,
35
- hover: "#EBE6DE",
36
- disabled: "#E4DFD7",
37
- inverse: "#181614",
38
- containerLowest: "#FAF9F7",
39
- container: "#F3F0EA",
40
- containerHigh: "#E4DFD7",
26
+ name: "default-light",
27
+ primary: PRIMARY,
28
+ secondary: SECONDARY,
29
+ accent: ACCENT,
30
+ bg: {
31
+ page: "#FAF9F7",
32
+ card: "#FFFFFF",
33
+ popover: "#FFFFFF",
34
+ muted: "#F3F0EA",
35
+ accent: primaryC.container,
36
+ hover: "#EBE6DE",
37
+ disabled: "#E4DFD7",
38
+ inverse: "#181614",
39
+ containerLowest: "#FAF9F7",
40
+ container: "#F3F0EA",
41
+ containerHigh: "#E4DFD7"
42
+ },
43
+ text: {
44
+ primary: INK,
45
+ secondary: MUTED,
46
+ tertiary: "#A39B90",
47
+ muted: MUTED,
48
+ accent: PRIMARY,
49
+ inverse: "#FFFFFF",
50
+ disabled: "#A39B90",
51
+ onPrimary: "#FFFFFF",
52
+ onSecondary: "#FFFFFF",
53
+ onAccent: "#1A1714",
54
+ onDanger: resolveOnColor(DANGER),
55
+ onSuccess: resolveOnColor(SUCCESS)
56
+ },
57
+ icon: {
58
+ primary: INK,
59
+ secondary: MUTED,
60
+ tertiary: "#A39B90",
61
+ inverse: "#FFFFFF",
62
+ disabled: "#A39B90"
63
+ },
64
+ border: {
65
+ default: "#E4DFD7",
66
+ light: "#F3F0EA",
67
+ strong: "#D5CEC2",
68
+ focus: PRIMARY
69
+ },
70
+ success: SUCCESS,
71
+ warning: WARNING,
72
+ danger: DANGER,
73
+ info: INFO,
74
+ container: {
75
+ primary: primaryC.container,
76
+ onPrimary: primaryC.onContainer,
77
+ secondary: secondaryC.container,
78
+ onSecondary: secondaryC.onContainer,
79
+ accent: accentC.container,
80
+ onAccent: accentC.onContainer,
81
+ success: successC.container,
82
+ onSuccess: successC.onContainer,
83
+ warning: warningC.container,
84
+ onWarning: warningC.onContainer,
85
+ danger: dangerC.container,
86
+ onDanger: dangerC.onContainer,
87
+ info: infoC.container,
88
+ onInfo: infoC.onContainer
89
+ },
90
+ state: {
91
+ hover: 0.08,
92
+ press: 0.12,
93
+ focus: 0.12,
94
+ drag: 0.16
95
+ },
96
+ material: {
97
+ blur: 24,
98
+ opacity: 0.78,
99
+ borderOpacity: 0.18
100
+ },
101
+ ring: PRIMARY,
102
+ input: "#E4DFD7",
103
+ gradient: {
104
+ primary: [SECONDARY, PRIMARY],
105
+ accent: ["#B88A2E", ACCENT]
106
+ },
107
+ shadow: {
108
+ sm: {
109
+ shadowColor: "#000000",
110
+ shadowOffset: {
111
+ width: 0,
112
+ height: 1
113
+ },
114
+ shadowOpacity: 0.06,
115
+ shadowRadius: 2,
116
+ elevation: 1
41
117
  },
42
- text: {
43
- primary: INK,
44
- secondary: MUTED,
45
- tertiary: "#A39B90",
46
- muted: MUTED,
47
- accent: PRIMARY,
48
- inverse: "#FFFFFF",
49
- disabled: "#A39B90",
50
- onPrimary: "#FFFFFF",
51
- onSecondary: "#FFFFFF",
52
- onAccent: "#1A1714",
53
- onDanger: resolveOnColor(DANGER),
54
- onSuccess: resolveOnColor(SUCCESS),
55
- },
56
- icon: {
57
- primary: INK,
58
- secondary: MUTED,
59
- tertiary: "#A39B90",
60
- inverse: "#FFFFFF",
61
- disabled: "#A39B90",
62
- },
63
- border: {
64
- default: "#E4DFD7",
65
- light: "#F3F0EA",
66
- strong: "#D5CEC2",
67
- focus: PRIMARY,
68
- },
69
- success: SUCCESS,
70
- warning: WARNING,
71
- danger: DANGER,
72
- info: INFO,
73
- container: {
74
- primary: primaryC.container,
75
- onPrimary: primaryC.onContainer,
76
- secondary: secondaryC.container,
77
- onSecondary: secondaryC.onContainer,
78
- accent: accentC.container,
79
- onAccent: accentC.onContainer,
80
- success: successC.container,
81
- onSuccess: successC.onContainer,
82
- warning: warningC.container,
83
- onWarning: warningC.onContainer,
84
- danger: dangerC.container,
85
- onDanger: dangerC.onContainer,
86
- info: infoC.container,
87
- onInfo: infoC.onContainer,
88
- },
89
- state: { hover: 0.08, press: 0.12, focus: 0.12, drag: 0.16 },
90
- material: { blur: 24, opacity: 0.78, borderOpacity: 0.18 },
91
- ring: PRIMARY,
92
- input: "#E4DFD7",
93
- gradient: {
94
- primary: [SECONDARY, PRIMARY],
95
- accent: ["#B88A2E", ACCENT],
96
- },
97
- shadow: {
98
- sm: {
99
- shadowColor: "#000000",
100
- shadowOffset: { width: 0, height: 1 },
101
- shadowOpacity: 0.06,
102
- shadowRadius: 2,
103
- elevation: 1,
104
- },
105
- md: {
106
- shadowColor: "#000000",
107
- shadowOffset: { width: 0, height: 4 },
108
- shadowOpacity: 0.1,
109
- shadowRadius: 6,
110
- elevation: 3,
111
- },
112
- lg: {
113
- shadowColor: "#000000",
114
- shadowOffset: { width: 0, height: 10 },
115
- shadowOpacity: 0.14,
116
- shadowRadius: 15,
117
- elevation: 5,
118
- },
119
- },
120
- pattern: {
121
- mode: "light-pattern",
122
- size: 56,
118
+ md: {
119
+ shadowColor: "#000000",
120
+ shadowOffset: {
121
+ width: 0,
122
+ height: 4
123
+ },
124
+ shadowOpacity: 0.1,
125
+ shadowRadius: 6,
126
+ elevation: 3
123
127
  },
128
+ lg: {
129
+ shadowColor: "#000000",
130
+ shadowOffset: {
131
+ width: 0,
132
+ height: 10
133
+ },
134
+ shadowOpacity: 0.14,
135
+ shadowRadius: 15,
136
+ elevation: 5
137
+ }
138
+ },
139
+ pattern: {
140
+ mode: "light-pattern",
141
+ size: 56
142
+ }
124
143
  };
@@ -1,17 +1,19 @@
1
1
  import { DEFAULT_THEME } from "./default.js";
2
2
  function isPlainObject(v) {
3
- return typeof v === "object" && v !== null && !Array.isArray(v);
3
+ return typeof v === "object" && v !== null && !Array.isArray(v);
4
4
  }
5
5
  function deepMerge(base, override) {
6
- const out = { ...base };
7
- for (const key of Object.keys(override)) {
8
- const o = override[key];
9
- const b = base[key];
10
- out[key] =
11
- isPlainObject(o) && isPlainObject(b) ? deepMerge(b, o) : o;
12
- }
13
- return out;
6
+ const out = {
7
+ ...base
8
+ };
9
+ for (const key of Object.keys(override)) {
10
+ const o = override[key];
11
+ const b = base[key];
12
+ out[key] = isPlainObject(o) && isPlainObject(b) ? deepMerge(b, o) : o;
13
+ }
14
+ return out;
14
15
  }
16
+
15
17
  /**
16
18
  * Defines a complete, typed theme (powerful API: the framework parametrizes
17
19
  * every token explicitly).
@@ -20,18 +22,20 @@ function deepMerge(base, override) {
20
22
  * `@sincpro/mobile-ui/theme` so light and dark brand fills both stay WCAG AA.
21
23
  */
22
24
  export function defineTheme(tokens) {
23
- return tokens;
25
+ return tokens;
24
26
  }
27
+
25
28
  /**
26
29
  * Merges a base theme with partial overrides (typed deep merge). Primitive
27
30
  * to build simpler APIs on top (e.g. the core's createTheme).
28
31
  */
29
32
  export function mergeTheme(base, overrides = {}) {
30
- return deepMerge(base, overrides);
33
+ return deepMerge(base, overrides);
31
34
  }
35
+
32
36
  /**
33
37
  * Default theme + partial overrides in a single step.
34
38
  */
35
39
  export function extendTheme(overrides = {}) {
36
- return deepMerge(DEFAULT_THEME, overrides);
40
+ return deepMerge(DEFAULT_THEME, overrides);
37
41
  }
@@ -11,4 +11,5 @@ export { theme } from "./theme.js";
11
11
  export type { PatternMode, ShadowStyle, ThemeTokens } from "./types.js";
12
12
  export { appliedTextStyle, configureFonts, fontFamilies, type FontRole, resetFonts, useAppFonts, variantFontRole, } from "./typography.js";
13
13
  export { useTheme } from "./useTheme.js";
14
+ export { useThemeVars } from "./useThemeVars.js";
14
15
  export { validateTheme } from "./validate.js";