@ryuzaki13/react-foundation-ui 3.0.1 → 3.1.1

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 (271) hide show
  1. package/COLOR_TOKENS_MIGRATION.md +72 -56
  2. package/README.md +9 -14
  3. package/dist/chunks/badge-6mXO9BWP.js.map +1 -1
  4. package/dist/chunks/ui.module-oRwY3Zli.js.map +1 -1
  5. package/dist/notifications/index.js.map +1 -1
  6. package/dist/styles.css +1 -1
  7. package/dist/tag-input/index.js.map +1 -1
  8. package/package.json +1 -1
  9. package/src/styles/_tone-derived.scss +36 -0
  10. package/src/styles/mixins/_controls.scss +3 -7
  11. package/src/styles/mixins/controls.test.ts +25 -0
  12. package/src/styles/themes/_interactive-surface.scss +6 -6
  13. package/src/styles/themes/_theme.scss +50 -18
  14. package/src/styles/themes/theme.test.ts +81 -14
  15. package/storybook-static/assets/{Badge-CPJUZBAx.js → Badge-DZyhbbM8.js} +1 -1
  16. package/storybook-static/assets/{Badge.stories-BV9Ob_Oc.js → Badge.stories-NTzzKHJp.js} +1 -1
  17. package/storybook-static/assets/{BadgeList-CtdWGEn6.js → BadgeList-CyZwXD1B.js} +1 -1
  18. package/storybook-static/assets/{BarcodeScannerDialog.stories-B_wBhs1h.js → BarcodeScannerDialog.stories-DgsYBggs.js} +1 -1
  19. package/storybook-static/assets/{Button-DJgPWpef.js → Button-CH_Z6sO1.js} +1 -1
  20. package/storybook-static/assets/{Button-BO03YvyD.js → Button-CljTMz3I.js} +1 -1
  21. package/storybook-static/assets/{Button.stories-DhqncZmo.js → Button.stories-BewKK-DS.js} +1 -1
  22. package/storybook-static/assets/{CalendarView-Ctgt0vSh.js → CalendarView--x2hpT2q.js} +1 -1
  23. package/storybook-static/assets/{CheckBox-x4MtRKCD.js → CheckBox-DXh75fAR.js} +1 -1
  24. package/storybook-static/assets/{CheckBox-BOIYiJm5.js → CheckBox-LimJi0UQ.js} +1 -1
  25. package/storybook-static/assets/{CheckBox.stories-B-YhjVpn.js → CheckBox.stories-o6rpfweF.js} +1 -1
  26. package/storybook-static/assets/{Color-6AOWCN3U-D2hSJGdc.js → Color-6AOWCN3U-8n8FCLyC.js} +1 -1
  27. package/storybook-static/assets/{ContextMenu-ConDIkSx.js → ContextMenu-6TfxDPWB.js} +1 -1
  28. package/storybook-static/assets/{ContextMenu--tEb29lb.js → ContextMenu-Ck4m7ukO.js} +1 -1
  29. package/storybook-static/assets/{ContextMenu.stories-DdZB2dQb.js → ContextMenu.stories-C0bTUdLv.js} +1 -1
  30. package/storybook-static/assets/{CustomOptionButton-D9_PjL0f.js → CustomOptionButton-dg-hYBoR.js} +1 -1
  31. package/storybook-static/assets/{DateInput-D1XJQ-6l.js → DateInput-B_V47xx7.js} +1 -1
  32. package/storybook-static/assets/{DateInput-Dh0ZTlaK.js → DateInput-jn0KyIGr.js} +1 -1
  33. package/storybook-static/assets/{DateInput.stories-YIy6ns7j.js → DateInput.stories-v7jSkTQz.js} +1 -1
  34. package/storybook-static/assets/{DateRangePresetSelect-Xy9xMJwE.js → DateRangePresetSelect-B2r12dtb.js} +1 -1
  35. package/storybook-static/assets/{DateRangePresetSelect-CfCtwULa.js → DateRangePresetSelect-CSJ_ADhT.js} +1 -1
  36. package/storybook-static/assets/{DateRangePresetSelect.stories-Cp8bCPPr.js → DateRangePresetSelect.stories-BkIZ7BYP.js} +1 -1
  37. package/storybook-static/assets/{Detail-V4a7PEQy.js → Detail-CGNKKZy_.js} +1 -1
  38. package/storybook-static/assets/{Detail.stories-CaltBUzP.js → Detail.stories-C9LpPn0-.js} +1 -1
  39. package/storybook-static/assets/{Dialog-TBOx7xuG.js → Dialog-ChVT8EA-.js} +1 -1
  40. package/storybook-static/assets/{Dialog-CwIJrdeS.js → Dialog-DOZ6KRDZ.js} +1 -1
  41. package/storybook-static/assets/{Dialog.stories-BWXw_XOW.js → Dialog.stories-_ir2h3DS.js} +1 -1
  42. package/storybook-static/assets/{Disclosure-ptHsbm71.js → Disclosure-DhYXxm-s.js} +1 -1
  43. package/storybook-static/assets/{Disclosure.stories-CG2LclkF.js → Disclosure.stories-d5gH0j1X.js} +1 -1
  44. package/storybook-static/assets/{DisclosureGroup-CseVXRGI.js → DisclosureGroup-CJzrTBA5.js} +1 -1
  45. package/storybook-static/assets/{DocsRenderer-JROSPFPF-Cz6wf1E5.js → DocsRenderer-JROSPFPF-4c9XFCUP.js} +1 -1
  46. package/storybook-static/assets/{DropZone-CRai68J2.js → DropZone-CAlPFkgO.js} +1 -1
  47. package/storybook-static/assets/{DropZone-D_zss6IH.js → DropZone-C_ONrNnf.js} +1 -1
  48. package/storybook-static/assets/{DropZone.stories-DieoYknx.js → DropZone.stories-CIa7HYSk.js} +1 -1
  49. package/storybook-static/assets/{DropdownMenu-BojaSt_0.js → DropdownMenu-DWPIbyYd.js} +1 -1
  50. package/storybook-static/assets/{ExpandableActionPanel-BiS2kSkL.js → ExpandableActionPanel-Dpv7Ogiv.js} +1 -1
  51. package/storybook-static/assets/{ExpandableActionPanel.stories-CMaKcNjZ.js → ExpandableActionPanel.stories-DO_6Ariv.js} +1 -1
  52. package/storybook-static/assets/{Flex-4xyVvQjb.js → Flex-DeOiILWd.js} +1 -1
  53. package/storybook-static/assets/{Flex.stories-C3tQavbS.js → Flex.stories-Dhs5mlVY.js} +1 -1
  54. package/storybook-static/assets/{FloatingPopover-D-hgsDWB.js → FloatingPopover-0Dprr5jf.js} +1 -1
  55. package/storybook-static/assets/{FormattedTableCell-BIx_wHxt.js → FormattedTableCell-qL4-wkCE.js} +1 -1
  56. package/storybook-static/assets/{Grid-D_tQSQsa.js → Grid-C8DgxK3U.js} +1 -1
  57. package/storybook-static/assets/{Grid.stories-rm-LBWqc.js → Grid.stories-BrapZKvO.js} +1 -1
  58. package/storybook-static/assets/{ImageCropper.stories-TWj6EUhv.js → ImageCropper.stories-CHYm4PqH.js} +1 -1
  59. package/storybook-static/assets/{ImageRenderer-fJY5cwIZ.js → ImageRenderer-CbHQ_5di.js} +1 -1
  60. package/storybook-static/assets/{ImageRenderer.stories-COWaXJSu.js → ImageRenderer.stories-CgFX5vX1.js} +1 -1
  61. package/storybook-static/assets/{ImageView.stories-CarFyXxF.js → ImageView.stories-B66Y0y8Z.js} +1 -1
  62. package/storybook-static/assets/{ImageViewer.stories-WwLkgsZl.js → ImageViewer.stories-Dr8hSJB4.js} +2 -2
  63. package/storybook-static/assets/{ImageViewerRuntime-Dg1heG9I.js → ImageViewerRuntime-ChNDRkbL.js} +1 -1
  64. package/storybook-static/assets/{Input-BqipFubD.js → Input-7Olx6bGm.js} +1 -1
  65. package/storybook-static/assets/{Input-CRMRR0du.js → Input-C3tV6aOt.js} +1 -1
  66. package/storybook-static/assets/{Input.stories-BZBQd_Yo.js → Input.stories-Bp7kBh2f.js} +1 -1
  67. package/storybook-static/assets/{InputDateTime-BKzFQcD2.js → InputDateTime-DFMMt-mf.js} +1 -1
  68. package/storybook-static/assets/{InputDateTime.stories-B3dXU0or.js → InputDateTime.stories-Dds2W8yW.js} +1 -1
  69. package/storybook-static/assets/{InputFile-C3iCB2fV.js → InputFile-Ba-RwZsI.js} +1 -1
  70. package/storybook-static/assets/{InputFile-Dl4khE53.js → InputFile-DSu8gm8A.js} +1 -1
  71. package/storybook-static/assets/{InputFile.stories-DYqlThPW.js → InputFile.stories-YGXOc3DO.js} +1 -1
  72. package/storybook-static/assets/{InputFiles-CWyvWdT6.js → InputFiles-CIPsyfH5.js} +1 -1
  73. package/storybook-static/assets/{InputFiles-fSWRgPQt.js → InputFiles-DqlQJsmm.js} +1 -1
  74. package/storybook-static/assets/{InputFiles.stories-wwrSxxCj.js → InputFiles.stories-BH_gwOug.js} +1 -1
  75. package/storybook-static/assets/{InputFilesList-dPZoA3cU.js → InputFilesList-BEDe42dK.js} +1 -1
  76. package/storybook-static/assets/{InputImage-DbK6OW82.js → InputImage-BdcxBj6J.js} +1 -1
  77. package/storybook-static/assets/{InputImage-hI2j2ETf.js → InputImage-D4D-X8Ys.js} +1 -1
  78. package/storybook-static/assets/{InputImage.stories-BmjAuHh6.js → InputImage.stories-BOW5PRM7.js} +1 -1
  79. package/storybook-static/assets/{InteractiveComponents-CP9rMbrV.js → InteractiveComponents-hi2rc0Cm.js} +1 -1
  80. package/storybook-static/assets/{InteractiveComponents.stories-DWGP7kN9.js → InteractiveComponents.stories-5hPeC7R2.js} +1 -1
  81. package/storybook-static/assets/{LayoutPicker-B6l0KM01.js → LayoutPicker-BO18SpK7.js} +1 -1
  82. package/storybook-static/assets/{LayoutPicker-BqPt4z1o.js → LayoutPicker-BqGACXDe.js} +1 -1
  83. package/storybook-static/assets/{LayoutPicker.stories-CobjDPnt.js → LayoutPicker.stories-BlN_ODG4.js} +1 -1
  84. package/storybook-static/assets/{Listbox-D8wHXixj.js → Listbox-4PvVEZRh.js} +1 -1
  85. package/storybook-static/assets/{Listbox-VYmcGjMI.js → Listbox-Bta1Rvnl.js} +1 -1
  86. package/storybook-static/assets/{Listbox.stories-DwGQUQ0i.js → Listbox.stories-DtEb9pou.js} +1 -1
  87. package/storybook-static/assets/{Modal-gdYxFkXo.js → Modal-Bmxp4mLU.js} +1 -1
  88. package/storybook-static/assets/{Modal-J__v8Hop.js → Modal-BwdW99av.js} +1 -1
  89. package/storybook-static/assets/{Modal.stories-DIs97N2U.js → Modal.stories-DuNdaLN2.js} +1 -1
  90. package/storybook-static/assets/{ModalManagerProvider-LwIYImtY.js → ModalManagerProvider-CGmNKOlv.js} +1 -1
  91. package/storybook-static/assets/{MultiSelect-DoJsmrgD.js → MultiSelect-BrHYXgvm.js} +1 -1
  92. package/storybook-static/assets/{MultiSelect-DxLtgKfo.js → MultiSelect-enRkbUVu.js} +1 -1
  93. package/storybook-static/assets/{MultiSelect.stories-gbsa3dqJ.js → MultiSelect.stories-4SSQVsBu.js} +1 -1
  94. package/storybook-static/assets/{NoData-o_sLpPoU.js → NoData-Bdkk4qX-.js} +1 -1
  95. package/storybook-static/assets/{NotificationsHost-BMBxunA0.js → NotificationsHost-epLriMYO.js} +1 -1
  96. package/storybook-static/assets/{NotificationsHost.stories-BzoCtqMU.js → NotificationsHost.stories-DvF1HMJp.js} +1 -1
  97. package/storybook-static/assets/{ODataMultiSelect-CcbmxqpZ.js → ODataMultiSelect-DYrfAdLn.js} +1 -1
  98. package/storybook-static/assets/{ODataMultiSelect.stories-zw67beZc.js → ODataMultiSelect.stories-DVkerQKn.js} +1 -1
  99. package/storybook-static/assets/{ODataSelect-CXW8j-z7.js → ODataSelect-DWJYlxQc.js} +1 -1
  100. package/storybook-static/assets/{ODataSelect.stories-TQM6_DYK.js → ODataSelect.stories-CywUlhAN.js} +1 -1
  101. package/storybook-static/assets/{ODataTreeMultiSelect-DGF8-pWk.js → ODataTreeMultiSelect-D90IEf3K.js} +1 -1
  102. package/storybook-static/assets/{ODataTreeMultiSelect.stories-Dd_0ra7b.js → ODataTreeMultiSelect.stories-CadVRCl9.js} +1 -1
  103. package/storybook-static/assets/{ODataTreeSelect-VuBknyZd.js → ODataTreeSelect-DSAGCoD4.js} +1 -1
  104. package/storybook-static/assets/{ODataTreeSelect.stories-BtzFf_u0.js → ODataTreeSelect.stories-BEA_Vb7u.js} +1 -1
  105. package/storybook-static/assets/{OneStepScroller-DZNxJvgJ.js → OneStepScroller-CCIUc14k.js} +1 -1
  106. package/storybook-static/assets/{Option-B4DvYPy2.js → Option-ByR48EZl.js} +1 -1
  107. package/storybook-static/assets/{OptionButton-C4VuB9n6.js → OptionButton-BMoBnbt6.js} +1 -1
  108. package/storybook-static/assets/{PeriodSelect-DSxwgwCW.js → PeriodSelect-C-eGa-Kg.js} +1 -1
  109. package/storybook-static/assets/{PeriodSelect-B8ox22dv.js → PeriodSelect-sUUZBBze.js} +1 -1
  110. package/storybook-static/assets/{PeriodSelect.stories-CjTMQdsC.js → PeriodSelect.stories-CEPqnZQz.js} +1 -1
  111. package/storybook-static/assets/{PickerField-CIzr66S8.js → PickerField-EVQAudL9.js} +1 -1
  112. package/storybook-static/assets/{PickerTriggerActions-jZXgVj2i.js → PickerTriggerActions-Da3NAgN3.js} +1 -1
  113. package/storybook-static/assets/{Popover-CtpYUZz7.js → Popover-B7-sfEHt.js} +1 -1
  114. package/storybook-static/assets/{Popover-BpC72C2z.js → Popover-MG_TKcDM.js} +1 -1
  115. package/storybook-static/assets/{Popover.stories-BujYLT_N.js → Popover.stories-6rqdsIci.js} +1 -1
  116. package/storybook-static/assets/{PresetRangeDateInput-C6Y1OPu2.js → PresetRangeDateInput-XkeUUy4t.js} +1 -1
  117. package/storybook-static/assets/{PresetRangeDateInput-v5tpwKOr.js → PresetRangeDateInput-oJU3yjjY.js} +1 -1
  118. package/storybook-static/assets/{PresetRangeDateInput.stories-DXJi-hz8.js → PresetRangeDateInput.stories-CYja7SlF.js} +1 -1
  119. package/storybook-static/assets/{PresetSelect-gK2K5zkH.js → PresetSelect-DWW52rEr.js} +1 -1
  120. package/storybook-static/assets/{README-BsO3rGAo.js → README-3onNI8KH.js} +1 -1
  121. package/storybook-static/assets/{README-DjHS3LyZ.js → README-8TyDLZ8m.js} +1 -1
  122. package/storybook-static/assets/{README-C9WDex0g.js → README-B-dL4Dp1.js} +1 -1
  123. package/storybook-static/assets/{README-Dj-J1DiV.js → README-B64nG4-r.js} +1 -1
  124. package/storybook-static/assets/{README-CEg7RhiN.js → README-B887wTp_.js} +1 -1
  125. package/storybook-static/assets/{README-BFt1rK1m.js → README-BGGr2zYm.js} +1 -1
  126. package/storybook-static/assets/{README-ZeIvwrze.js → README-BIp15sbA.js} +1 -1
  127. package/storybook-static/assets/{README-BovclOxj.js → README-BLjBIG5b.js} +1 -1
  128. package/storybook-static/assets/{README-Cm8APMxg.js → README-BSDrP24w.js} +1 -1
  129. package/storybook-static/assets/{README-BUvT1PC3.js → README-BUXHrder.js} +1 -1
  130. package/storybook-static/assets/{README-35Rz4zJn.js → README-BXK6R512.js} +1 -1
  131. package/storybook-static/assets/{README-CrMVq7Lw.js → README-Bd8oZSBv.js} +1 -1
  132. package/storybook-static/assets/{README-BeUl88Dw.js → README-BeQQlzku.js} +1 -1
  133. package/storybook-static/assets/{README-Cgz1iUWg.js → README-Bk_j-FWx.js} +1 -1
  134. package/storybook-static/assets/{README-fC8saBR0.js → README-BqbscBiw.js} +1 -1
  135. package/storybook-static/assets/{README-BNk4sKbP.js → README-BtXLkUYG.js} +1 -1
  136. package/storybook-static/assets/{README-DOgmLyjE.js → README-BuyFnGUr.js} +1 -1
  137. package/storybook-static/assets/{README-CV2hDek-.js → README-C4aCrDhQ.js} +1 -1
  138. package/storybook-static/assets/{README-BPeCkxf5.js → README-C5Evi_Od.js} +1 -1
  139. package/storybook-static/assets/{README-ByB4pX-h.js → README-C5o1ee9L.js} +1 -1
  140. package/storybook-static/assets/{README-tSD_oNwO.js → README-C87LZz6f.js} +1 -1
  141. package/storybook-static/assets/{README-DFnpGGTR.js → README-CNQEzBHn.js} +1 -1
  142. package/storybook-static/assets/{README-DwIqFkLN.js → README-CarOmnk7.js} +1 -1
  143. package/storybook-static/assets/{README-BEvGMEjK.js → README-CeZpJRtg.js} +1 -1
  144. package/storybook-static/assets/{README-DtFIYO3L.js → README-ChG5rY0i.js} +1 -1
  145. package/storybook-static/assets/{README-C0ZKA9b-.js → README-Co2u6-Lj.js} +1 -1
  146. package/storybook-static/assets/{README-PVmZhf60.js → README-CoIps3ow.js} +1 -1
  147. package/storybook-static/assets/{README-DUr25qzJ.js → README-CpE19mEd.js} +1 -1
  148. package/storybook-static/assets/{README-p3wyWaCG.js → README-CzeEqZV4.js} +1 -1
  149. package/storybook-static/assets/{README-DgvV1tz2.js → README-D8RATsxd.js} +1 -1
  150. package/storybook-static/assets/{README-tWeRF96t.js → README-DCcgaFeQ.js} +1 -1
  151. package/storybook-static/assets/{README-BNb4F90Z.js → README-DDIuwU7m.js} +1 -1
  152. package/storybook-static/assets/{README-BWp5_vwI.js → README-DGvtRCkM.js} +1 -1
  153. package/storybook-static/assets/{README-CGVpfLua.js → README-DJnq2r66.js} +1 -1
  154. package/storybook-static/assets/{README-BJ9k0Np6.js → README-DM_g6PCr.js} +1 -1
  155. package/storybook-static/assets/{README-BARPT1_b.js → README-DN4AcFXT.js} +1 -1
  156. package/storybook-static/assets/{README-CHLqXECy.js → README-DS6WZRoh.js} +1 -1
  157. package/storybook-static/assets/{README-DKn16Q4N.js → README-DgYioDAa.js} +1 -1
  158. package/storybook-static/assets/{README-BkP5HRKY.js → README-DoB-J219.js} +1 -1
  159. package/storybook-static/assets/{README-SLh2SkXm.js → README-DoW41pj8.js} +1 -1
  160. package/storybook-static/assets/{README-Uy_ptFqX.js → README-DousuaoR.js} +1 -1
  161. package/storybook-static/assets/{README-76skvum6.js → README-DpPmQc1C.js} +1 -1
  162. package/storybook-static/assets/{README-DjuBYSZf.js → README-HiFT84zG.js} +1 -1
  163. package/storybook-static/assets/{README-CYI_EOl0.js → README-LkMYQQZG.js} +1 -1
  164. package/storybook-static/assets/{README-Dd4omKy5.js → README-N-t9Esrs.js} +1 -1
  165. package/storybook-static/assets/{README-DWdFUqVy.js → README-Q6TktIyC.js} +1 -1
  166. package/storybook-static/assets/{README-CJazQDMs.js → README-ZBSgAfUQ.js} +1 -1
  167. package/storybook-static/assets/{README-BC0N2gII.js → README-aMioowWA.js} +1 -1
  168. package/storybook-static/assets/{README-C7xESdeZ.js → README-bp2jvuhN.js} +1 -1
  169. package/storybook-static/assets/{README-BN7MT2Ap.js → README-dBjUPcUC.js} +1 -1
  170. package/storybook-static/assets/{README-DTSAWBmg.js → README-jAXiQfWd.js} +1 -1
  171. package/storybook-static/assets/{README-9FkDpJNL.js → README-kqacqwMO.js} +1 -1
  172. package/storybook-static/assets/{README-Daf_hy33.js → README-px0sy3mH.js} +1 -1
  173. package/storybook-static/assets/{RadioButton-SQQ0XZh_.js → RadioButton-CBZ-2tpg.js} +1 -1
  174. package/storybook-static/assets/{RadioButton-D-hGkjCE.js → RadioButton-DeU7LySy.js} +1 -1
  175. package/storybook-static/assets/{RadioButton.stories-y_RgH92I.js → RadioButton.stories-DzBmcWYh.js} +1 -1
  176. package/storybook-static/assets/{RadioGroup-c4001gHC.js → RadioGroup-9L9EBmPZ.js} +1 -1
  177. package/storybook-static/assets/{RadioGroup-BbZbR0Nd.js → RadioGroup-M8U_3Qu1.js} +1 -1
  178. package/storybook-static/assets/{RadioGroup.stories-VUC3P22Z.js → RadioGroup.stories-DhaRdRnV.js} +1 -1
  179. package/storybook-static/assets/{Scrollable-BCbWuy4A.js → Scrollable-DKD8_GYW.js} +1 -1
  180. package/storybook-static/assets/{Select-B9E7ahIl.js → Select-DG_lx7Rl.js} +1 -1
  181. package/storybook-static/assets/{Select-CJ33Sv-J.js → Select-Dg-l0yoE.js} +1 -1
  182. package/storybook-static/assets/{Select.stories-BcAnEbEn.js → Select.stories-D4TelGYC.js} +1 -1
  183. package/storybook-static/assets/{SerializableSelect-BPS2hfyJ.js → SerializableSelect-CpitM8WL.js} +1 -1
  184. package/storybook-static/assets/{SerializableSelect.stories-CM1ncPEp.js → SerializableSelect.stories-ZlWgKkHt.js} +1 -1
  185. package/storybook-static/assets/{SingleDateTimeInput-BHYCHJQE.js → SingleDateTimeInput-CqocRYJY.js} +1 -1
  186. package/storybook-static/assets/{SingleDateTimeInput-gTTeUwQu.js → SingleDateTimeInput-m6jYz_r2.js} +1 -1
  187. package/storybook-static/assets/{SingleDateTimeInput.stories-CbmsCFpW.js → SingleDateTimeInput.stories-fH-iW9qA.js} +1 -1
  188. package/storybook-static/assets/{Slider-CGKqjm7X.js → Slider-CF5lNqVZ.js} +1 -1
  189. package/storybook-static/assets/{Slider-RBZi0g2K.js → Slider-D0Qwf7EY.js} +1 -1
  190. package/storybook-static/assets/{Slider.stories-PSyMsLLp.js → Slider.stories-B6QVVtrd.js} +1 -1
  191. package/storybook-static/assets/{SliderInput-Df9TmEKF.js → SliderInput-Dvz_4kgc.js} +1 -1
  192. package/storybook-static/assets/{SliderInput-CznPoK1l.js → SliderInput-zM3jF5KD.js} +1 -1
  193. package/storybook-static/assets/{SliderInput.stories-BQiRt7bg.js → SliderInput.stories-BKuUv8N2.js} +1 -1
  194. package/storybook-static/assets/{Sortable-D42YEoo9.js → Sortable-C0K_6g4P.js} +1 -1
  195. package/storybook-static/assets/{Sortable.stories-DkJeEE-A.js → Sortable.stories-Chf1sxZg.js} +1 -1
  196. package/storybook-static/assets/{Splitter-DlRtVvJG.js → Splitter-B8Ksf_xs.js} +1 -1
  197. package/storybook-static/assets/{Splitter.stories-CWV7Ofeq.js → Splitter.stories-fRvGX5Jp.js} +1 -1
  198. package/storybook-static/assets/{StateSelect-Cx2e1djS.js → StateSelect-CPNphBga.js} +1 -1
  199. package/storybook-static/assets/{StateSelect-DSmcFkB_.js → StateSelect-CjsviCtb.js} +1 -1
  200. package/storybook-static/assets/{StateSelect.stories-DE36S04p.js → StateSelect.stories-D32llZ6v.js} +1 -1
  201. package/storybook-static/assets/{StatusIndicator-5q4RVrlX.js → StatusIndicator-CKvd7tHs.js} +1 -1
  202. package/storybook-static/assets/{StatusIndicator.stories-ChoX8YBt.js → StatusIndicator.stories-NOvPPe_7.js} +1 -1
  203. package/storybook-static/assets/{StringToggle.stories-C3yjPy-u.js → StringToggle.stories-Bicdqe7C.js} +1 -1
  204. package/storybook-static/assets/{Switch-BVC4Fwd3.js → Switch-Bkob6qYu.js} +1 -1
  205. package/storybook-static/assets/{Switch-AbpldWAB.js → Switch-C61_o5be.js} +1 -1
  206. package/storybook-static/assets/{Switch.stories-FPuGI2wa.js → Switch.stories-BSXuhd1n.js} +1 -1
  207. package/storybook-static/assets/{Table-Supenh30.js → Table-DrI-ye5w.js} +1 -1
  208. package/storybook-static/assets/{Table.stories-DF5hgk3V.js → Table.stories-DfeiRj00.js} +1 -1
  209. package/storybook-static/assets/{TableEditor.stories-CNBIQyHL.js → TableEditor.stories-BsLxmTao.js} +1 -1
  210. package/storybook-static/assets/{Tabs-C039OI9y.js → Tabs-CgalbGPu.js} +1 -1
  211. package/storybook-static/assets/{Tabs.stories-B49PmfdF.js → Tabs.stories-BNjq8-Q7.js} +1 -1
  212. package/storybook-static/assets/{TabsBox-C3l5eozp.js → TabsBox-CpmFgUBj.js} +1 -1
  213. package/storybook-static/assets/{TagInput-CwyrBnFS.js → TagInput-DvEYa96d.js} +1 -1
  214. package/storybook-static/assets/{TagInput.stories-coxQ7Em9.js → TagInput.stories-j4Qd29sb.js} +1 -1
  215. package/storybook-static/assets/{Text-Ci8EVxdT.js → Text-BZ1JvyUT.js} +1 -1
  216. package/storybook-static/assets/{Textarea-BcSflD0g.js → Textarea-BMzsyo3c.js} +1 -1
  217. package/storybook-static/assets/{Textarea-CK323Zvt.js → Textarea-BRdIBUkE.js} +1 -1
  218. package/storybook-static/assets/{Textarea.stories-DksBPbfd.js → Textarea.stories-C0x425GI.js} +1 -1
  219. package/storybook-static/assets/{TimePanel-rc26nbZr.js → TimePanel-BWqMMKMh.js} +1 -1
  220. package/storybook-static/assets/{TimePanel.stories-CX33HFgH.js → TimePanel.stories-DyU92R36.js} +1 -1
  221. package/storybook-static/assets/{Toggle-Dj9mjhm6.js → Toggle-Bownsch8.js} +1 -1
  222. package/storybook-static/assets/{Toggle-BJ6a2rYs.js → Toggle-ClbrIGCZ.js} +1 -1
  223. package/storybook-static/assets/{Toggle.stories-D2U9YqcP.js → Toggle.stories-DsNHF5oC.js} +1 -1
  224. package/storybook-static/assets/{TreeMultiSelect-cRTpzovV.js → TreeMultiSelect-CDg35T0c.js} +1 -1
  225. package/storybook-static/assets/{TreeMultiSelect-0bsShZqq.js → TreeMultiSelect-D3TzNY3n.js} +1 -1
  226. package/storybook-static/assets/{TreeMultiSelect.stories-BGX0KlJq.js → TreeMultiSelect.stories-C3xbNKlw.js} +1 -1
  227. package/storybook-static/assets/{TreePickerBase-BWuxoc3q.js → TreePickerBase-DwM3HHNJ.js} +1 -1
  228. package/storybook-static/assets/{TreeSelect-BJ9bYsyd.js → TreeSelect-BWZkUyfN.js} +1 -1
  229. package/storybook-static/assets/{TreeSelect-K8QcuBmM.js → TreeSelect-CzPMpXEN.js} +1 -1
  230. package/storybook-static/assets/{TreeSelect.stories-DGVst2IK.js → TreeSelect.stories-Dt2iVzbQ.js} +1 -1
  231. package/storybook-static/assets/{TreeTable-BqgD-2_7.js → TreeTable-CVn34tY8.js} +1 -1
  232. package/storybook-static/assets/{TreeTable.stories-BcXMrgLT.js → TreeTable.stories-D1ufYTtN.js} +1 -1
  233. package/storybook-static/assets/{blocks-COtaqhG7.js → blocks-BIDgFZzT.js} +3 -3
  234. package/storybook-static/assets/{check-ATe9qlhZ.js → check-Ci14Psj_.js} +1 -1
  235. package/storybook-static/assets/{chevron-down-C8rhgH0F.js → chevron-down-DbAd2qk7.js} +1 -1
  236. package/storybook-static/assets/{chevron-left-BREifQyg.js → chevron-left-BkXE-6hJ.js} +1 -1
  237. package/storybook-static/assets/{chevron-right-2G3N5a4T.js → chevron-right--BJBL7es.js} +1 -1
  238. package/storybook-static/assets/{chunk-W22LQPXL-CseeqzDY.js → chunk-W22LQPXL-Ck7Hq2hD.js} +1 -1
  239. package/storybook-static/assets/{circle-alert-BA5kPpt-.js → circle-alert-DZ-mqRo-.js} +1 -1
  240. package/storybook-static/assets/{circle-check-Cs9mMZi_.js → circle-check-ohYPmGXF.js} +1 -1
  241. package/storybook-static/assets/{components-C3kWCR3K.js → components-BcLNCNYh.js} +3 -3
  242. package/storybook-static/assets/{contextMenu-BoM0Rrc0.js → contextMenu-CV1L1k-X.js} +1 -1
  243. package/storybook-static/assets/{download-LnWJpQGc.js → download-Cj6p8bKz.js} +1 -1
  244. package/storybook-static/assets/{floating-ui.react-5ooru93I.js → floating-ui.react-BSdrfXIW.js} +1 -1
  245. package/storybook-static/assets/{foundationApi-BBE0Q757.js → foundationApi-CQ7TLs4F.js} +1 -1
  246. package/storybook-static/assets/{foundationLib-B08SbcPW.js → foundationLib-CrDmX7bX.js} +1 -1
  247. package/storybook-static/assets/{hooks-C0EM5QXj.js → hooks-DUyI2f7Z.js} +1 -1
  248. package/storybook-static/assets/{iframe-BT_jngkf.css → iframe-C-4tNqTX.css} +1 -1
  249. package/storybook-static/assets/iframe-CBug5Z2-.js +1 -0
  250. package/storybook-static/assets/{iframe-Dyg5pyjI.js → iframe-CLqd5Giv.js} +3 -3
  251. package/storybook-static/assets/{info-CwIwVUF0.js → info-T_PVPfD-.js} +1 -1
  252. package/storybook-static/assets/{odata-DhMoO1-z.js → odata-CCaj8ulC.js} +1 -1
  253. package/storybook-static/assets/{odataStoryFixtures-gWL6AhyF.js → odataStoryFixtures-Bv9BrgZv.js} +1 -1
  254. package/storybook-static/assets/{react-DKmCseal.js → react-Ce_aQozh.js} +1 -1
  255. package/storybook-static/assets/{refresh-cw-cEegR14X.js → refresh-cw-CNrDNE_N.js} +1 -1
  256. package/storybook-static/assets/{settings-2-fhEteCrb.js → settings-2-jAEe_Y9H.js} +1 -1
  257. package/storybook-static/assets/{sortable-Dn0xMPIF.js → sortable-kVkmtF5b.js} +1 -1
  258. package/storybook-static/assets/{syntaxhighlighter-QEQV7K2Y-BSkd404o.js → syntaxhighlighter-QEQV7K2Y-zKIOKo3C.js} +1 -1
  259. package/storybook-static/assets/{trash-2-DAG4_F6W.js → trash-2-Dt4QzFcm.js} +1 -1
  260. package/storybook-static/assets/{triangle-alert-5OwD01Sy.js → triangle-alert-BiyO16L3.js} +1 -1
  261. package/storybook-static/assets/{ui-DSS1yTEO.css → ui-DPTWro6M.css} +1 -1
  262. package/storybook-static/assets/{uiClasses-e9OQfdw2.js → uiClasses-BY4mQ-J3.js} +1 -1
  263. package/storybook-static/assets/{useODataSelectBase-BKD8wc02.js → useODataSelectBase-DpSBp8Rk.js} +1 -1
  264. package/storybook-static/assets/{useODataTreeData-VIqPm8lR.js → useODataTreeData-ynwGta5X.js} +1 -1
  265. package/storybook-static/assets/{usePickerQuery-qXXh72-v.js → usePickerQuery-BVMhh3cw.js} +1 -1
  266. package/storybook-static/assets/{usePickerTriggerController-DbTYgg-I.js → usePickerTriggerController-TTKRTNy4.js} +1 -1
  267. package/storybook-static/assets/{x-sWfOdOu5.js → x-wBEq3sjm.js} +1 -1
  268. package/storybook-static/iframe.html +3 -3
  269. package/storybook-static/project.json +1 -1
  270. package/storybook-static/assets/iframe-B5Pyh1le.js +0 -1
  271. /package/storybook-static/assets/{ui.module-SH8ehXul.js → ui.module-B6Lc_ii5.js} +0 -0
@@ -32,6 +32,31 @@ function compileUiAppearances(): string {
32
32
  ).css;
33
33
  }
34
34
 
35
+ /** Компилирует только tone-adapter, чтобы закрепить его связь с токенами темы. */
36
+ function compileUiTone(): string {
37
+ return compileString('@use "controls" as *; .tone { @include ui-tone("brand"); }', {
38
+ loadPaths: [resolve("src/styles/mixins")],
39
+ style: "expanded"
40
+ }).css;
41
+ }
42
+
43
+ describe("ui-tone", () => {
44
+ it("использует единые формулы локально для поддержки subtree overrides", () => {
45
+ const css = compileUiTone();
46
+
47
+ expect(css).toContain("--ui-tone-text-hover: color-mix(in srgb, var(--brand-text) 88%, var(--content-0))");
48
+ expect(css).toContain("--ui-tone-text-active: color-mix(in srgb, var(--brand-text) 76%, var(--content-0))");
49
+ expect(css).toContain("--ui-tone-fill-hover: color-mix(in srgb, var(--brand-fill) 88%, var(--content-0))");
50
+ expect(css).toContain("--ui-tone-fill-active: color-mix(in srgb, var(--brand-fill) 76%, var(--content-0))");
51
+ expect(css).toContain("--ui-tone-soft: color-mix(in srgb, var(--brand-fill) 12%, var(--surface-0))");
52
+ expect(css).toContain("--ui-tone-border-hover: color-mix(in srgb, var(--brand-border) 88%, var(--content-0))");
53
+ expect(css).toContain("--ui-tone-border-active: color-mix(in srgb, var(--brand-border) 76%, var(--content-0))");
54
+ expect(css).toContain("--ui-tone-border-focus: var(--focus-ring)");
55
+ expect(css).toContain("--ui-tone-ghost-hover: color-mix(in srgb, var(--brand-fill) 10%, var(--surface-0))");
56
+ expect(css).toContain("--ui-tone-ghost-active: color-mix(in srgb, var(--brand-fill) 20%, var(--surface-0))");
57
+ });
58
+ });
59
+
35
60
  describe("ui-control-base", () => {
36
61
  it("ограничивает hover устройствами с поддержкой наведения", () => {
37
62
  const css = compileUiControlBase();
@@ -3,13 +3,13 @@
3
3
  --s: transparent;
4
4
  --b: transparent;
5
5
 
6
- --ch: var(--accent-on-fill);
7
- --sh: var(--accent-fill);
8
- --bh: var(--accent-border);
6
+ --ch: var(--accent-text-hover);
7
+ --sh: var(--accent-fill-hover);
8
+ --bh: var(--accent-border-hover);
9
9
 
10
- --ca: var(--accent-on-fill);
11
- --sa: var(--accent-fill);
12
- --ba: var(--accent-border);
10
+ --ca: var(--accent-text-active);
11
+ --sa: var(--accent-fill-active);
12
+ --ba: var(--accent-border-active);
13
13
 
14
14
  --cs: var(--accent-on-fill);
15
15
  --ss: var(--accent-fill);
@@ -1,6 +1,8 @@
1
1
  @use "sass:map";
2
+ @use "sass:string";
2
3
 
3
4
  @use "../config" as stylesConfig;
5
+ @use "../tone-derived" as toneDerived;
4
6
 
5
7
  @function _theme-base($mode) {
6
8
  @if $mode == light {
@@ -14,35 +16,65 @@
14
16
  @error "Цветовая схема темы должна иметь значение light или dark, получено: #{$mode}.";
15
17
  }
16
18
 
17
- /// Выводит четыре публичные роли цветовой схемы.
18
- /// Состояния hover/active и мягкая заливка вычисляются внутри UI-компонентов,
19
- /// поэтому host настраивает только устойчивый минимальный контракт.
20
- @mixin _status-palette($name, $status) {
21
- --#{$name}-text: var(--hc-#{$name}-text, #{map.get($status, text)});
22
- --#{$name}-border: var(--hc-#{$name}-border, #{map.get($status, border)});
23
- --#{$name}-fill: var(--hc-#{$name}-fill, #{map.get($status, fill)});
24
- --#{$name}-on-fill: var(--hc-#{$name}-on-fill, #{map.get($status, on-fill)});
19
+ /// Формирует четыре настраиваемые роли цветовой схемы.
20
+ @function _status-palette-tokens($name, $status) {
21
+ @return (
22
+ "--#{$name}-text": map.get($status, text),
23
+ "--#{$name}-border": map.get($status, border),
24
+ "--#{$name}-fill": map.get($status, fill),
25
+ "--#{$name}-on-fill": map.get($status, on-fill)
26
+ );
25
27
  }
26
28
 
27
- @mixin _theme-palette($theme) {
29
+ /// Формирует базовые роли и общие границы темы.
30
+ @function _theme-palette-tokens($theme) {
31
+ $tokens: ();
32
+
28
33
  @each $name, $status in map.get($theme, status) {
29
- @include _status-palette($name, $status);
34
+ $tokens: map.merge($tokens, _status-palette-tokens($name, $status));
30
35
  }
31
36
 
32
37
  // Базовые границы остаются общими layout-токенами, но получают цвет из neutral-схемы.
33
- --border-0: var(--hc-border-0, var(--neutral-border));
34
- --border-1: var(--hc-border-1, color-mix(in srgb, var(--neutral-border) 82%, var(--content-0)));
35
- --border-2: var(--hc-border-2, color-mix(in srgb, var(--neutral-border) 64%, var(--content-0)));
36
- --border-focus: var(--hc-border-focus, var(--focus-ring));
38
+ @return map.merge(
39
+ $tokens,
40
+ (
41
+ "--border-0": string.unquote("var(--hc-border-0, var(--neutral-border))"),
42
+ "--border-1": string.unquote("var(--hc-border-1, color-mix(in srgb, var(--neutral-border) 82%, var(--content-0)))"),
43
+ "--border-2": string.unquote("var(--hc-border-2, color-mix(in srgb, var(--neutral-border) 64%, var(--content-0)))"),
44
+ "--border-focus": string.unquote("var(--hc-border-focus, var(--focus-ring))")
45
+ )
46
+ );
47
+ }
48
+
49
+ /// Формирует переиспользуемые состояния из уже разрешённых базовых ролей.
50
+ /// Host не настраивает эти токены через карту status: их единые формулы автоматически
51
+ /// учитывают обычные, переопределённые и high-contrast значения базовой схемы.
52
+ @function _theme-derived-tokens($theme) {
53
+ $tokens: ();
54
+
55
+ @each $name in map.keys(map.get($theme, status)) {
56
+ $tokens: map.merge($tokens, toneDerived.derived-tone-tokens($name, $name));
57
+ }
58
+
59
+ @return $tokens;
60
+ }
61
+
62
+ /// Собирает итоговую карту до вывода CSS. Карта tokens получает наивысший
63
+ /// compile-time приоритет и заменяет совпадающие status, border и derived ключи.
64
+ @function _theme-declarations($theme) {
65
+ $declarations: map.merge(_theme-palette-tokens($theme), _theme-derived-tokens($theme));
66
+
67
+ @return map.merge($declarations, stylesConfig.theme-tokens($theme));
37
68
  }
38
69
 
39
70
  /// Формирует полную тему из baseline выбранной схемы и точечных переопределений.
40
71
  /// Карта `status` содержит `accent`, `brand`, `neutral`, `error`, `warning`,
41
- /// `success` и `info`; у каждой схемы ровно четыре роли: `text`, `border`,
42
- /// `fill` и `on-fill`. Карта `tokens` выводится последней как escape hatch.
72
+ /// `success` и `info`; у каждой схемы ровно четыре настраиваемые роли: `text`,
73
+ /// `border`, `fill` и `on-fill`. Производные состояния выводятся из базовых
74
+ /// переменных. Карта `tokens` имеет наивысший compile-time приоритет, после
75
+ /// чего каждое итоговое CSS-свойство выводится ровно один раз.
43
76
  @mixin theme($mode, $overrides: ()) {
44
77
  $resolved-theme: map.deep-merge(_theme-base($mode), $overrides);
45
78
 
46
- @include _theme-palette($resolved-theme);
47
- @include stylesConfig.emit-declarations(stylesConfig.theme-tokens($resolved-theme));
79
+ @include stylesConfig.emit-declarations(_theme-declarations($resolved-theme));
48
80
  }
@@ -1,7 +1,8 @@
1
- import { compileString } from "sass-embedded";
1
+ import { compile, compileString } from "sass-embedded";
2
2
  import { describe, expect, it } from "vitest";
3
3
 
4
4
  import { resolve } from "node:path";
5
+ import { pathToFileURL } from "node:url";
5
6
 
6
7
  /** Компилирует публичный themes entrypoint с точной hex-палитрой host-приложения. */
7
8
  function compileExactTheme(): string {
@@ -12,7 +13,9 @@ function compileExactTheme(): string {
12
13
  @include foundationThemes.theme(light, (
13
14
  tokens: (
14
15
  "--surface-0": #fefefe,
15
- "--error-text": #990011
16
+ "--error-text": #990011,
17
+ "--border-0": #abcdef,
18
+ "--error-soft": var(--surface-2)
16
19
  ),
17
20
  status: (
18
21
  accent: (
@@ -37,8 +40,22 @@ function compileExactTheme(): string {
37
40
  ).css;
38
41
  }
39
42
 
43
+ /** Компилирует общий CSS Module с тем же `@/` alias, который использует Vite-сборка пакета. */
44
+ function compileUiModule(): string {
45
+ return compile(resolve("src/ui.module.scss"), {
46
+ importers: [
47
+ {
48
+ findFileUrl(url) {
49
+ return url.startsWith("@/") ? pathToFileURL(resolve("src", url.slice(2))) : null;
50
+ }
51
+ }
52
+ ],
53
+ style: "expanded"
54
+ }).css;
55
+ }
56
+
40
57
  describe("theme", () => {
41
- it("наследует baseline и принимает четыре роли каждой hex-схемы", () => {
58
+ it("наследует baseline и принимает четыре настраиваемые роли каждой hex-схемы", () => {
42
59
  const css = compileExactTheme();
43
60
  const tones = ["accent", "brand", "neutral", "error", "warning", "success", "info"] as const;
44
61
  const roles = ["text", "border", "fill", "on-fill"] as const;
@@ -55,7 +72,7 @@ describe("theme", () => {
55
72
  expect(css).toContain("--accent-border: var(--hc-accent-border, #345678)");
56
73
  expect(css).toContain("--accent-fill: var(--hc-accent-fill, #ddeeff)");
57
74
  expect(css).toContain("--accent-on-fill: var(--hc-accent-on-fill, #102030)");
58
- expect(css).toContain("--error-text: var(--hc-error-text, #aa0011)");
75
+ expect(css).toContain("--error-text: var(--hc-error-text, #990011)");
59
76
  expect(css).toContain("--error-border: var(--hc-error-border, #bb1122)");
60
77
  expect(css).toContain("--error-fill: var(--hc-error-fill, #cc2233)");
61
78
  expect(css).toContain("--error-on-fill: var(--hc-error-on-fill, #ffffff)");
@@ -63,6 +80,31 @@ describe("theme", () => {
63
80
  expect(css).toContain("--shadow-xs: var(--hc-shadow-xs, 0 0 0.25em #00000026)");
64
81
  });
65
82
 
83
+ it("выводит переиспользуемые производные состояния для каждой схемы", () => {
84
+ const css = compileExactTheme();
85
+ const tones = ["accent", "brand", "neutral", "error", "warning", "success", "info"] as const;
86
+ const derivedRoles = ["text-hover", "text-active", "border-hover", "border-active", "fill-hover", "fill-active", "soft"] as const;
87
+
88
+ for (const tone of tones) {
89
+ for (const role of derivedRoles) {
90
+ expect(css).toContain(`--${tone}-${role}:`);
91
+ }
92
+
93
+ expect(css).toContain(`--${tone}-text-hover: color-mix(in srgb, var(--${tone}-text) 88%, var(--content-0))`);
94
+ expect(css).toContain(`--${tone}-text-active: color-mix(in srgb, var(--${tone}-text) 76%, var(--content-0))`);
95
+ expect(css).toContain(`--${tone}-border-hover: color-mix(in srgb, var(--${tone}-border) 88%, var(--content-0))`);
96
+ expect(css).toContain(`--${tone}-border-active: color-mix(in srgb, var(--${tone}-border) 76%, var(--content-0))`);
97
+ expect(css).toContain(`--${tone}-fill-hover: color-mix(in srgb, var(--${tone}-fill) 88%, var(--content-0))`);
98
+ expect(css).toContain(`--${tone}-fill-active: color-mix(in srgb, var(--${tone}-fill) 76%, var(--content-0))`);
99
+
100
+ if (tone === "error") {
101
+ expect(css).toContain("--error-soft: var(--surface-2)");
102
+ } else {
103
+ expect(css).toContain(`--${tone}-soft: color-mix(in srgb, var(--${tone}-fill) 12%, var(--surface-0))`);
104
+ }
105
+ }
106
+ });
107
+
66
108
  it("оборачивает первичные root-цвета одноимёнными high-contrast токенами", () => {
67
109
  const css = compileString('@use "root-tokens";', {
68
110
  loadPaths: [resolve("src/styles")],
@@ -73,13 +115,19 @@ describe("theme", () => {
73
115
  expect(css).toContain("--black: var(--hc-black, #000000)");
74
116
  });
75
117
 
76
- it("выводит плоские token overrides после палитры", () => {
118
+ it("разрешает token overrides на этапе сборки и выводит каждое свойство один раз", () => {
77
119
  const css = compileExactTheme();
78
- const paletteTextIndex = css.indexOf("--error-text: var(--hc-error-text, #aa0011)");
79
- const exactTokenIndex = css.lastIndexOf("--error-text: var(--hc-error-text, #990011)");
80
-
81
- expect(paletteTextIndex).toBeGreaterThanOrEqual(0);
82
- expect(exactTokenIndex).toBeGreaterThan(paletteTextIndex);
120
+ const declarationNames = Array.from(css.matchAll(/^\s*(--[\w-]+):/gm), ([, name]) => name);
121
+ const duplicateNames = declarationNames.filter((name, index) => declarationNames.indexOf(name) !== index);
122
+
123
+ expect(declarationNames).toHaveLength(94);
124
+ expect(duplicateNames).toEqual([]);
125
+ expect(css).toContain("--error-text: var(--hc-error-text, #990011)");
126
+ expect(css).not.toContain("--error-text: var(--hc-error-text, #aa0011)");
127
+ expect(css).toContain("--border-0: var(--hc-border-0, #abcdef)");
128
+ expect(css).not.toContain("--border-0: var(--hc-border-0, var(--neutral-border))");
129
+ expect(css).toContain("--error-soft: var(--surface-2)");
130
+ expect(css).not.toContain("--error-soft: color-mix(in srgb, var(--error-fill) 12%, var(--surface-0))");
83
131
  expect(css).toContain("--surface-0: var(--hc-surface-0, #fefefe)");
84
132
  });
85
133
 
@@ -113,16 +161,35 @@ describe("theme", () => {
113
161
  });
114
162
 
115
163
  describe("interactive surface", () => {
116
- it("использует accent-схему для hover, active и selected", () => {
164
+ it("использует соответствующие состояния accent-схемы для hover, active и selected", () => {
117
165
  const css = compileString('@use "interactive-surface";', {
118
166
  loadPaths: [resolve("src/styles/themes")],
119
167
  style: "expanded"
120
168
  }).css;
121
169
 
122
- expect(css).toContain("--ch: var(--accent-on-fill)");
123
- expect(css).toContain("--sh: var(--accent-fill)");
124
- expect(css).toContain("--bh: var(--accent-border)");
170
+ expect(css).toContain("--ch: var(--accent-text-hover)");
171
+ expect(css).toContain("--sh: var(--accent-fill-hover)");
172
+ expect(css).toContain("--bh: var(--accent-border-hover)");
173
+ expect(css).toContain("--ca: var(--accent-text-active)");
174
+ expect(css).toContain("--sa: var(--accent-fill-active)");
175
+ expect(css).toContain("--ba: var(--accent-border-active)");
176
+ expect(css).toContain("--cs: var(--accent-on-fill)");
177
+ expect(css).toContain("--ss: var(--accent-fill)");
178
+ expect(css).toContain("--bs: var(--accent-border)");
125
179
  expect(css).toMatch(/\.interactiveSurface\[data-selected=true\]\.interactiveSurfaceFrame\s*\{\s*border-color: var\(--bs\);\s*\}/);
126
180
  expect(css).not.toContain("--interactive-");
127
181
  });
182
+
183
+ it("сохраняет ту же карту состояний в используемом popup option", () => {
184
+ const css = compileUiModule();
185
+
186
+ expect(css).toMatch(/\.uiPopupOption\.selected\s*\{\s*color: var\(--accent-on-fill\);\s*background-color: var\(--accent-fill\);/);
187
+ expect(css).toMatch(
188
+ /\.uiPopupOption\.uiPopupOptionActive,\s*\.uiPopupOption:active\s*\{\s*color: var\(--accent-text-active\);\s*background-color: var\(--accent-fill-active\);/
189
+ );
190
+ expect(css).toMatch(
191
+ /@media \(any-hover: hover\)\s*\{\s*\.uiPopupOption:hover\s*\{\s*color: var\(--accent-text-hover\);\s*background-color: var\(--accent-fill-hover\);/
192
+ );
193
+ expect(css).not.toMatch(/@media \(any-hover: none\)\s*\{\s*\.uiPopupOption:active/);
194
+ });
128
195
  });
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Dyg5pyjI.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-COtaqhG7.js";import{a as p,i as m,n as h,o as g,r as _,s as v,t as y}from"./Badge.stories-BV9Ob_Oc.js";function b(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(s,{of:h,parameters:{atomicCanvas:!0,layout:`padded`,docs:{toc:!0}}}),`
1
+ import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-CLqd5Giv.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-BIDgFZzT.js";import{a as p,i as m,n as h,o as g,r as _,s as v,t as y}from"./Badge.stories-NTzzKHJp.js";function b(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(s,{of:h,parameters:{atomicCanvas:!0,layout:`padded`,docs:{toc:!0}}}),`
2
2
  `,(0,S.jsx)(u,{children:`Badge`}),`
3
3
  `,(0,S.jsx)(o,{children:`Компактная текстовая метка для статусов, категорий, фильтров и коротких служебных пометок`}),`
4
4
  `,(0,S.jsx)(t.p,{children:`Badge подходит для коротких подписей, которые должны быстро читаться и не перегружать интерфейс:`}),`
@@ -1,4 +1,4 @@
1
- import{n as e,r as t}from"./rolldown-runtime-DkW27tQK.js";import{t as n}from"./react-BZJXY1be.js";import{n as r}from"./iframe-Dyg5pyjI.js";import{i,n as a,r as o,t as s}from"./BadgeList-CtdWGEn6.js";var c=t({Appearances:()=>h,Basic:()=>p,RemovableList:()=>_,Sizes:()=>g,Tones:()=>m,__namedExportsOrder:()=>v,default:()=>f}),l,u,d,f,p,m,h,g,_,v;function y(){return(y=e((()=>{l=n(),i(),a(),u=r(),{useArgs:d}=__STORYBOOK_MODULE_PREVIEW_API__,f={title:`UI/Badge`,component:o,args:{children:`Новый`,size:`md`,tone:`info`,appearance:`solid`},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{children:{description:`Текст внутри бейджа.`,control:`text`},size:{description:`Размер бейджа.`,control:`inline-radio`,options:[`xs`,`sm`,`md`,`lg`,`xl`]},tone:{description:`Цветовой тон бейджа.`,control:`inline-radio`,options:[`neutral`,`accent`,`brand`,`success`,`warning`,`error`,`info`]},appearance:{description:`Форма бейджа.`,control:`inline-radio`,options:[`solid`,`outline`,`ghost`,`transparent`]},onRemove:{description:`Показывает кнопку удаления и вызывает обработчик по клику.`,control:!1}}},p={render:function(){let[e]=d();return(0,u.jsx)(o,{...e})}},m={render:()=>(0,u.jsxs)(s,{children:[(0,u.jsx)(o,{tone:`neutral`,appearance:`outline`,children:`Neutral`}),(0,u.jsx)(o,{tone:`accent`,appearance:`solid`,children:`Акцент`}),(0,u.jsx)(o,{tone:`brand`,appearance:`solid`,children:`Бренд`}),(0,u.jsx)(o,{tone:`success`,appearance:`solid`,children:`Успешно`}),(0,u.jsx)(o,{tone:`warning`,appearance:`solid`,children:`Внимание`}),(0,u.jsx)(o,{tone:`error`,appearance:`solid`,children:`Ошибка`}),(0,u.jsx)(o,{tone:`info`,appearance:`solid`,children:`Информация`})]})},h={render:()=>(0,u.jsxs)(s,{children:[(0,u.jsx)(o,{tone:`neutral`,appearance:`solid`,children:`Solid`}),(0,u.jsx)(o,{tone:`neutral`,appearance:`outline`,children:`Outline`}),(0,u.jsx)(o,{tone:`info`,appearance:`ghost`,children:`Ghost`}),(0,u.jsx)(o,{tone:`warning`,appearance:`transparent`,children:`Transparent`})]})},g={render:()=>(0,u.jsxs)(s,{children:[(0,u.jsx)(o,{size:`xs`,children:`Extra Small`}),(0,u.jsx)(o,{size:`sm`,children:`Small`}),(0,u.jsx)(o,{size:`md`,children:`Medium`}),(0,u.jsx)(o,{size:`lg`,children:`Large`}),(0,u.jsx)(o,{size:`xl`,children:`Extra Large`})]})},_={render:()=>{let[e,t]=(0,l.useState)([`Фильтр A`,`Фильтр B`,`Фильтр C`]);return(0,u.jsx)(s,{children:e.map(e=>(0,u.jsx)(o,{tone:`info`,appearance:`outline`,onRemove:()=>t(t=>t.filter(t=>t!==e)),children:e},e))})}},p.parameters={...p.parameters,docs:{...p.parameters?.docs,source:{originalSource:`{
1
+ import{n as e,r as t}from"./rolldown-runtime-DkW27tQK.js";import{t as n}from"./react-BZJXY1be.js";import{n as r}from"./iframe-CLqd5Giv.js";import{i,n as a,r as o,t as s}from"./BadgeList-CyZwXD1B.js";var c=t({Appearances:()=>h,Basic:()=>p,RemovableList:()=>_,Sizes:()=>g,Tones:()=>m,__namedExportsOrder:()=>v,default:()=>f}),l,u,d,f,p,m,h,g,_,v;function y(){return(y=e((()=>{l=n(),i(),a(),u=r(),{useArgs:d}=__STORYBOOK_MODULE_PREVIEW_API__,f={title:`UI/Badge`,component:o,args:{children:`Новый`,size:`md`,tone:`info`,appearance:`solid`},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{children:{description:`Текст внутри бейджа.`,control:`text`},size:{description:`Размер бейджа.`,control:`inline-radio`,options:[`xs`,`sm`,`md`,`lg`,`xl`]},tone:{description:`Цветовой тон бейджа.`,control:`inline-radio`,options:[`neutral`,`accent`,`brand`,`success`,`warning`,`error`,`info`]},appearance:{description:`Форма бейджа.`,control:`inline-radio`,options:[`solid`,`outline`,`ghost`,`transparent`]},onRemove:{description:`Показывает кнопку удаления и вызывает обработчик по клику.`,control:!1}}},p={render:function(){let[e]=d();return(0,u.jsx)(o,{...e})}},m={render:()=>(0,u.jsxs)(s,{children:[(0,u.jsx)(o,{tone:`neutral`,appearance:`outline`,children:`Neutral`}),(0,u.jsx)(o,{tone:`accent`,appearance:`solid`,children:`Акцент`}),(0,u.jsx)(o,{tone:`brand`,appearance:`solid`,children:`Бренд`}),(0,u.jsx)(o,{tone:`success`,appearance:`solid`,children:`Успешно`}),(0,u.jsx)(o,{tone:`warning`,appearance:`solid`,children:`Внимание`}),(0,u.jsx)(o,{tone:`error`,appearance:`solid`,children:`Ошибка`}),(0,u.jsx)(o,{tone:`info`,appearance:`solid`,children:`Информация`})]})},h={render:()=>(0,u.jsxs)(s,{children:[(0,u.jsx)(o,{tone:`neutral`,appearance:`solid`,children:`Solid`}),(0,u.jsx)(o,{tone:`neutral`,appearance:`outline`,children:`Outline`}),(0,u.jsx)(o,{tone:`info`,appearance:`ghost`,children:`Ghost`}),(0,u.jsx)(o,{tone:`warning`,appearance:`transparent`,children:`Transparent`})]})},g={render:()=>(0,u.jsxs)(s,{children:[(0,u.jsx)(o,{size:`xs`,children:`Extra Small`}),(0,u.jsx)(o,{size:`sm`,children:`Small`}),(0,u.jsx)(o,{size:`md`,children:`Medium`}),(0,u.jsx)(o,{size:`lg`,children:`Large`}),(0,u.jsx)(o,{size:`xl`,children:`Extra Large`})]})},_={render:()=>{let[e,t]=(0,l.useState)([`Фильтр A`,`Фильтр B`,`Фильтр C`]);return(0,u.jsx)(s,{children:e.map(e=>(0,u.jsx)(o,{tone:`info`,appearance:`outline`,onRemove:()=>t(t=>t.filter(t=>t!==e)),children:e},e))})}},p.parameters={...p.parameters,docs:{...p.parameters?.docs,source:{originalSource:`{
2
2
  render: function Render() {
3
3
  const [args] = useArgs<BadgeStoryArgs>();
4
4
  return <Badge {...args} />;
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{t}from"./react-BZJXY1be.js";import{n,t as r}from"./x-sWfOdOu5.js";import{n as i}from"./iframe-Dyg5pyjI.js";import{a,i as o}from"./utils-tg3ibbzi.js";import{c as s,i as c}from"./array-D-_yMMUK-DnJ_b27D.js";import{n as l,t as u}from"./FloatingPopover-D-hgsDWB.js";import{a as d,i as f,r as p,t as m}from"./uiClasses-e9OQfdw2.js";import{n as h,t as g}from"./FlexContainer-BWyPlTMB.js";function _({maxChar:e,placement:t=`left`,closeDelay:n=0,maxWidth:r,children:i,block:a,state:o,textWrap:c,textWrapProps:l}){let d=s(i);if(!d.length||e&&d.length<e)return(0,v.jsx)(`span`,{children:d});let f=c??`div`,p={style:{display:a?`block`:`inline-block`,width:e?`${e-3}ch`:`auto`},className:`textOverflow`},m={...l,...p,style:{...l?.style,...p.style},className:[l?.className,p.className].filter(Boolean).join(` `)};return(0,v.jsx)(u,{state:o,placement:t,openOnHover:!0,content:d,closeDelay:n,maxWidth:r,children:(0,v.jsx)(f,{...m,children:d})})}var v;function y(){return(y=e((()=>{c(),l(),v=i(),_.__docgenInfo={description:``,methods:[],displayName:`TextOverflow`,props:{children:{required:!0,tsType:{name:`string`},description:``},maxChar:{required:!1,tsType:{name:`number`},description:``},maxWidth:{required:!1,tsType:{name:`number`},description:`Максимальная ширина тултипа в em.`},placement:{required:!1,tsType:{name:`Placement`},description:``,defaultValue:{value:`"left"`,computed:!1}},closeDelay:{required:!1,tsType:{name:`number`},description:``,defaultValue:{value:`0`,computed:!1}},block:{required:!1,tsType:{name:`literal`,value:`true`},description:`Для работы text-overflow элемент обязан быть блочным или inline-block.
1
+ import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{t}from"./react-BZJXY1be.js";import{n,t as r}from"./x-wBEq3sjm.js";import{n as i}from"./iframe-CLqd5Giv.js";import{a,i as o}from"./utils-tg3ibbzi.js";import{c as s,i as c}from"./array-D-_yMMUK-DnJ_b27D.js";import{n as l,t as u}from"./FloatingPopover-0Dprr5jf.js";import{a as d,i as f,r as p,t as m}from"./uiClasses-BY4mQ-J3.js";import{n as h,t as g}from"./FlexContainer-BWyPlTMB.js";function _({maxChar:e,placement:t=`left`,closeDelay:n=0,maxWidth:r,children:i,block:a,state:o,textWrap:c,textWrapProps:l}){let d=s(i);if(!d.length||e&&d.length<e)return(0,v.jsx)(`span`,{children:d});let f=c??`div`,p={style:{display:a?`block`:`inline-block`,width:e?`${e-3}ch`:`auto`},className:`textOverflow`},m={...l,...p,style:{...l?.style,...p.style},className:[l?.className,p.className].filter(Boolean).join(` `)};return(0,v.jsx)(u,{state:o,placement:t,openOnHover:!0,content:d,closeDelay:n,maxWidth:r,children:(0,v.jsx)(f,{...m,children:d})})}var v;function y(){return(y=e((()=>{c(),l(),v=i(),_.__docgenInfo={description:``,methods:[],displayName:`TextOverflow`,props:{children:{required:!0,tsType:{name:`string`},description:``},maxChar:{required:!1,tsType:{name:`number`},description:``},maxWidth:{required:!1,tsType:{name:`number`},description:`Максимальная ширина тултипа в em.`},placement:{required:!1,tsType:{name:`Placement`},description:``,defaultValue:{value:`"left"`,computed:!1}},closeDelay:{required:!1,tsType:{name:`number`},description:``,defaultValue:{value:`0`,computed:!1}},block:{required:!1,tsType:{name:`literal`,value:`true`},description:`Для работы text-overflow элемент обязан быть блочным или inline-block.
2
2
  Если в качестве обёртки передается инлайновый компонент, то он будет
3
3
  перезаписан через стили на display: block или inline-block в зависимости
4
4
  от установки данного пропса.`},state:{required:!1,tsType:{name:`union`,raw:`"information" | "error" | "warning" | "success" | "negative"`,elements:[{name:`literal`,value:`"information"`},{name:`literal`,value:`"error"`},{name:`literal`,value:`"warning"`},{name:`literal`,value:`"success"`},{name:`literal`,value:`"negative"`}]},description:``},textWrap:{required:!1,tsType:{name:`T`},description:``},textWrapProps:{required:!1,tsType:{name:`Omit`,elements:[{name:`ComponentProps`,elements:[{name:`T`}],raw:`ComponentProps<T>`},{name:`literal`,value:`"children"`}],raw:`Omit<ComponentProps<T>, "children">`},description:``}}}})))()}var b,x,S,C,w,T,E,D,O,k;function A(){return(A=e((()=>{b=`qBtmnH`,x=`p-HsHY`,S=`u9tQAE`,C=`FRScRz`,w=`W13uQO`,T=`_3IRcM9`,E=`R3ybI7`,D=`DdWAaC`,O=`_5cXBQF`,k={badge:b,passive:x,sizeXs:S,sizeSm:C,sizeMd:w,sizeLg:T,sizeXl:E,content:D,removeButton:O}})))()}function j({children:e,size:t=`sm`,tone:n,appearance:i,className:o,onRemove:s}){let c=n??`neutral`,l=d({tone:n,appearance:i,fallbackTone:c,fallbackAppearance:c===`neutral`?`outline`:`solid`});return(0,M.jsxs)(`div`,{className:a(k.badge,N[t],p(l.tone),m(l.appearance),!s&&k.passive,o),children:[(0,M.jsx)(_,{maxChar:25,placement:`top`,block:!0,textWrapProps:{className:k.content},children:String(e)}),s&&(0,M.jsx)(`button`,{type:`button`,onClick:s,className:k.removeButton,"aria-label":`Удалить бейдж`,"data-ui":`badge-remove-button`,"data-action":`remove-badge`,children:(0,M.jsx)(r,{})})]})}var M,N;function P(){return(P=e((()=>{o(),n(),y(),f(),A(),M=i(),N={xs:k.sizeXs,sm:k.sizeSm,md:k.sizeMd,lg:k.sizeLg,xl:k.sizeXl},j.__docgenInfo={description:`Компактный индикатор для статусов, категорий и коротких служебных меток.`,methods:[],displayName:`Badge`,props:{children:{required:!0,tsType:{name:`union`,raw:`string | number`,elements:[{name:`string`},{name:`number`}]},description:``},size:{required:!1,tsType:{name:`union`,raw:`"xs" | "sm" | "md" | "lg" | "xl"`,elements:[{name:`literal`,value:`"xs"`},{name:`literal`,value:`"sm"`},{name:`literal`,value:`"md"`},{name:`literal`,value:`"lg"`},{name:`literal`,value:`"xl"`}]},description:``,defaultValue:{value:`"sm"`,computed:!1}},tone:{required:!1,tsType:{name:`union`,raw:`"accent" | "neutral" | "brand" | "error" | "warning" | "success" | "info"`,elements:[{name:`literal`,value:`"accent"`},{name:`literal`,value:`"neutral"`},{name:`literal`,value:`"brand"`},{name:`literal`,value:`"error"`},{name:`literal`,value:`"warning"`},{name:`literal`,value:`"success"`},{name:`literal`,value:`"info"`}]},description:``},appearance:{required:!1,tsType:{name:`union`,raw:`"solid" | "outline" | "ghost" | "transparent"`,elements:[{name:`literal`,value:`"solid"`},{name:`literal`,value:`"outline"`},{name:`literal`,value:`"ghost"`},{name:`literal`,value:`"transparent"`}]},description:``},className:{required:!1,tsType:{name:`string`},description:``},onRemove:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``}}}})))()}function F({children:e}){return(0,L.jsx)(g,{inline:!0,wrap:!0,gap:`sm`,align:`baseline`,children:I.Children.map(e,(e,t)=>(0,L.jsx)(I.Fragment,{children:e},t))})}var I,L;function R(){return(R=e((()=>{I=t(),h(),L=i(),F.__docgenInfo={description:"Контейнер для группы `Badge`, который выстраивает элементы в единый список с предсказуемыми отступами. Используется для компактного вывода набора меток или фильтров.",methods:[],displayName:`BadgeList`,props:{children:{required:!0,tsType:{name:`Array`,elements:[{name:`ReactElement`,elements:[{name:`union`,raw:`typeof Badge | null | undefined | false`,elements:[{name:`Badge`},{name:`null`},{name:`undefined`},{name:`literal`,value:`false`}]}],raw:`ReactElement<typeof Badge | null | undefined | false>`}],raw:`ReactElement<typeof Badge | null | undefined | false>[]`},description:``}}}})))()}export{P as i,R as n,j as r,F as t};