index.js 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.prepareComponentToken = exports.default = void 0;
  6. var _style = require("../../style");
  7. var _internal = require("../../theme/internal");
  8. const genRtlStyle = token => {
  9. const {
  10. componentCls
  11. } = token;
  12. return {
  13. [`&-rtl${componentCls}-horizontal`]: {
  14. [`> ${componentCls}-bar`]: {
  15. [`${componentCls}-bar-collapse-previous`]: {
  16. insetInlineEnd: 0,
  17. insetInlineStart: 'unset'
  18. },
  19. [`${componentCls}-bar-collapse-next`]: {
  20. insetInlineEnd: 'unset',
  21. insetInlineStart: 0
  22. }
  23. }
  24. },
  25. [`&-rtl${componentCls}-vertical`]: {
  26. [`> ${componentCls}-bar`]: {
  27. [`${componentCls}-bar-collapse-previous`]: {
  28. insetInlineEnd: '50%',
  29. insetInlineStart: 'unset'
  30. },
  31. [`${componentCls}-bar-collapse-next`]: {
  32. insetInlineEnd: '50%',
  33. insetInlineStart: 'unset'
  34. }
  35. }
  36. }
  37. };
  38. };
  39. const centerStyle = {
  40. position: 'absolute',
  41. top: '50%',
  42. left: {
  43. _skip_check_: true,
  44. value: '50%'
  45. },
  46. transform: 'translate(-50%, -50%)'
  47. };
  48. const genSplitterStyle = token => {
  49. const {
  50. componentCls,
  51. colorFill,
  52. splitBarDraggableSize,
  53. splitBarSize,
  54. splitTriggerSize,
  55. controlItemBgHover,
  56. controlItemBgActive,
  57. controlItemBgActiveHover,
  58. prefixCls
  59. } = token;
  60. const splitBarCls = `${componentCls}-bar`;
  61. const splitMaskCls = `${componentCls}-mask`;
  62. const splitPanelCls = `${componentCls}-panel`;
  63. const halfTriggerSize = token.calc(splitTriggerSize).div(2).equal();
  64. const splitterBarPreviewOffsetVar = `${prefixCls}-bar-preview-offset`;
  65. const splitterBarPreviewStyle = {
  66. position: 'absolute',
  67. background: token.colorPrimary,
  68. opacity: 0.2,
  69. pointerEvents: 'none',
  70. transition: 'none',
  71. zIndex: 1,
  72. display: 'none'
  73. };
  74. return {
  75. [componentCls]: Object.assign(Object.assign(Object.assign({}, (0, _style.resetComponent)(token)), {
  76. display: 'flex',
  77. width: '100%',
  78. height: '100%',
  79. alignItems: 'stretch',
  80. // ======================== SplitBar ========================
  81. // Use `>` to avoid conflict with mix layout
  82. [`> ${splitBarCls}`]: {
  83. flex: 'none',
  84. position: 'relative',
  85. userSelect: 'none',
  86. // ======================= Dragger =======================
  87. [`${splitBarCls}-dragger`]: Object.assign(Object.assign({}, centerStyle), {
  88. zIndex: 1,
  89. // Hover background
  90. '&::before': Object.assign({
  91. content: '""',
  92. background: controlItemBgHover
  93. }, centerStyle),
  94. // Spinner
  95. '&::after': Object.assign({
  96. content: '""',
  97. background: colorFill
  98. }, centerStyle),
  99. // Hover
  100. [`&:hover:not(${splitBarCls}-dragger-active)`]: {
  101. '&::before': {
  102. background: controlItemBgActive
  103. }
  104. },
  105. // Active
  106. '&-active': {
  107. zIndex: 2,
  108. '&::before': {
  109. background: controlItemBgActiveHover
  110. }
  111. },
  112. // Disabled, not use `pointer-events: none` since still need trigger collapse
  113. [`&-disabled${splitBarCls}-dragger`]: {
  114. zIndex: 0,
  115. '&, &:hover, &-active': {
  116. cursor: 'default',
  117. '&::before': {
  118. background: controlItemBgHover
  119. }
  120. },
  121. '&::after': {
  122. display: 'none'
  123. }
  124. }
  125. }),
  126. // ======================= Collapse =======================
  127. [`${splitBarCls}-collapse-bar`]: Object.assign(Object.assign({}, centerStyle), {
  128. zIndex: token.zIndexPopupBase,
  129. background: controlItemBgHover,
  130. fontSize: token.fontSizeSM,
  131. borderRadius: token.borderRadiusXS,
  132. color: token.colorText,
  133. cursor: 'pointer',
  134. opacity: 0,
  135. display: 'flex',
  136. alignItems: 'center',
  137. justifyContent: 'center',
  138. // Hover
  139. '&:hover': {
  140. background: controlItemBgActive
  141. },
  142. // Active
  143. '&:active': {
  144. background: controlItemBgActiveHover
  145. }
  146. }),
  147. '&:hover, &:active': {
  148. [`${splitBarCls}-collapse-bar-hover-only`]: {
  149. opacity: 1
  150. }
  151. },
  152. [`${splitBarCls}-collapse-bar-hover-only`]: {
  153. '@media(hover:none)': {
  154. opacity: 1
  155. }
  156. },
  157. [`${splitBarCls}-collapse-bar-always-hidden`]: {
  158. display: 'none'
  159. },
  160. [`${splitBarCls}-collapse-bar-always-visible`]: {
  161. opacity: 1
  162. }
  163. },
  164. // =========================== Mask =========================
  165. // Util dom for handle cursor
  166. [splitMaskCls]: {
  167. position: 'fixed',
  168. zIndex: token.zIndexPopupBase,
  169. inset: 0,
  170. '&-horizontal': {
  171. cursor: 'col-resize'
  172. },
  173. '&-vertical': {
  174. cursor: 'row-resize'
  175. }
  176. },
  177. // ==========================================================
  178. // == Layout ==
  179. // ==========================================================
  180. '&-horizontal': {
  181. flexDirection: 'row',
  182. [`> ${splitBarCls}`]: {
  183. width: 0,
  184. // ======================= Preview =======================
  185. [`${splitBarCls}-preview`]: Object.assign(Object.assign({
  186. height: '100%',
  187. width: splitBarSize
  188. }, splitterBarPreviewStyle), {
  189. [`&${splitBarCls}-preview-active`]: {
  190. display: 'block',
  191. transform: `translateX(var(--${splitterBarPreviewOffsetVar}))`
  192. }
  193. }),
  194. // ======================= Dragger =======================
  195. [`${splitBarCls}-dragger`]: {
  196. cursor: 'col-resize',
  197. height: '100%',
  198. width: splitTriggerSize,
  199. '&::before': {
  200. height: '100%',
  201. width: splitBarSize
  202. },
  203. '&::after': {
  204. height: splitBarDraggableSize,
  205. width: splitBarSize
  206. }
  207. },
  208. // ======================= Collapse =======================
  209. [`${splitBarCls}-collapse-bar`]: {
  210. width: token.fontSizeSM,
  211. height: token.controlHeightSM,
  212. '&-start': {
  213. left: {
  214. _skip_check_: true,
  215. value: 'auto'
  216. },
  217. right: {
  218. _skip_check_: true,
  219. value: halfTriggerSize
  220. },
  221. transform: 'translateY(-50%)'
  222. },
  223. '&-end': {
  224. left: {
  225. _skip_check_: true,
  226. value: halfTriggerSize
  227. },
  228. right: {
  229. _skip_check_: true,
  230. value: 'auto'
  231. },
  232. transform: 'translateY(-50%)'
  233. }
  234. }
  235. }
  236. },
  237. '&-vertical': {
  238. flexDirection: 'column',
  239. [`> ${splitBarCls}`]: {
  240. height: 0,
  241. // ======================= Preview =======================
  242. [`${splitBarCls}-preview`]: Object.assign(Object.assign({
  243. height: splitBarSize,
  244. width: '100%'
  245. }, splitterBarPreviewStyle), {
  246. [`&${splitBarCls}-preview-active`]: {
  247. display: 'block',
  248. transform: `translateY(var(--${splitterBarPreviewOffsetVar}))`
  249. }
  250. }),
  251. // ======================= Dragger =======================
  252. [`${splitBarCls}-dragger`]: {
  253. cursor: 'row-resize',
  254. width: '100%',
  255. height: splitTriggerSize,
  256. '&::before': {
  257. width: '100%',
  258. height: splitBarSize
  259. },
  260. '&::after': {
  261. width: splitBarDraggableSize,
  262. height: splitBarSize
  263. }
  264. },
  265. // ======================= Collapse =======================
  266. [`${splitBarCls}-collapse-bar`]: {
  267. height: token.fontSizeSM,
  268. width: token.controlHeightSM,
  269. '&-start': {
  270. top: 'auto',
  271. bottom: halfTriggerSize,
  272. transform: 'translateX(-50%)'
  273. },
  274. '&-end': {
  275. top: halfTriggerSize,
  276. bottom: 'auto',
  277. transform: 'translateX(-50%)'
  278. }
  279. }
  280. }
  281. },
  282. // ========================= Panels =========================
  283. [splitPanelCls]: {
  284. overflow: 'auto',
  285. padding: '0 1px',
  286. scrollbarWidth: 'thin',
  287. boxSizing: 'border-box',
  288. '&-hidden': {
  289. padding: 0,
  290. overflow: 'hidden'
  291. },
  292. [`&:has(${componentCls}:only-child)`]: {
  293. overflow: 'hidden'
  294. }
  295. }
  296. }), genRtlStyle(token))
  297. };
  298. };
  299. const prepareComponentToken = token => {
  300. var _a;
  301. const splitBarSize = token.splitBarSize || 2;
  302. const splitTriggerSize = token.splitTriggerSize || 6;
  303. // https://github.com/ant-design/ant-design/pull/51223
  304. const resizeSpinnerSize = token.resizeSpinnerSize || 20;
  305. const splitBarDraggableSize = (_a = token.splitBarDraggableSize) !== null && _a !== void 0 ? _a : resizeSpinnerSize;
  306. return {
  307. splitBarSize,
  308. splitTriggerSize,
  309. splitBarDraggableSize,
  310. resizeSpinnerSize
  311. };
  312. };
  313. // ============================== Export ==============================
  314. exports.prepareComponentToken = prepareComponentToken;
  315. var _default = exports.default = (0, _internal.genStyleHooks)('Splitter', genSplitterStyle, prepareComponentToken);