@lobehub/ui 6.0.0-beta.10 → 6.0.0-beta.11

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 (56) hide show
  1. package/README.md +3 -3
  2. package/es/Accordion/style.d.mts +2 -2
  3. package/es/CodeDiff/DiffPanel.mjs +2 -2
  4. package/es/CodeDiff/DiffPanel.mjs.map +1 -1
  5. package/es/Form/Form.mjs +6 -2
  6. package/es/Form/Form.mjs.map +1 -1
  7. package/es/Form/style.mjs +3 -3
  8. package/es/Form/style.mjs.map +1 -1
  9. package/es/Form/type.d.mts +7 -0
  10. package/es/ProTable/hooks/useFetchData.mjs +1 -1
  11. package/es/ProTable/hooks/useFetchData.mjs.map +1 -1
  12. package/es/ProTable/parts/FieldControl.mjs +28 -11
  13. package/es/ProTable/parts/FieldControl.mjs.map +1 -1
  14. package/es/ProTable/style.mjs +9 -0
  15. package/es/ProTable/style.mjs.map +1 -1
  16. package/es/ProTable/type.d.mts +5 -2
  17. package/es/Switch/Switch.mjs +8 -1
  18. package/es/Switch/Switch.mjs.map +1 -1
  19. package/es/Switch/atoms.d.mts +7 -1
  20. package/es/Switch/atoms.mjs +20 -4
  21. package/es/Switch/atoms.mjs.map +1 -1
  22. package/es/Switch/style.mjs +33 -2
  23. package/es/Switch/style.mjs.map +1 -1
  24. package/es/Table/Table.mjs +14 -5
  25. package/es/Table/Table.mjs.map +1 -1
  26. package/es/Table/render/FixedFrost.mjs +11 -2
  27. package/es/Table/render/FixedFrost.mjs.map +1 -1
  28. package/es/Table/style.mjs +4 -0
  29. package/es/Table/style.mjs.map +1 -1
  30. package/es/Tabs/style.d.mts +1 -1
  31. package/es/Text/style.d.mts +3 -3
  32. package/es/color/index.d.mts +2 -1
  33. package/es/color/index.mjs +2 -1
  34. package/es/color/status/index.d.mts +11 -0
  35. package/es/index.d.mts +3 -2
  36. package/es/index.mjs +3 -2
  37. package/es/style.css +102 -11
  38. package/es/styles/index.d.mts +3 -2
  39. package/es/styles/index.mjs +3 -2
  40. package/es/styles/theme/createLobeToken.d.mts +2 -1
  41. package/es/styles/theme/createLobeToken.mjs +3 -2
  42. package/es/styles/theme/createLobeToken.mjs.map +1 -1
  43. package/es/styles/theme/customPalette.d.mts +6 -0
  44. package/es/styles/theme/customPalette.mjs +28 -0
  45. package/es/styles/theme/customPalette.mjs.map +1 -0
  46. package/es/styles/theme/customPrimary.mjs +52 -17
  47. package/es/styles/theme/customPrimary.mjs.map +1 -1
  48. package/es/styles/theme/scope.d.mts +4 -2
  49. package/es/styles/theme/scope.mjs +53 -20
  50. package/es/styles/theme/scope.mjs.map +1 -1
  51. package/es/styles/theme/themeCss.d.mts +1 -0
  52. package/es/styles/theme/themeCss.mjs +16 -1
  53. package/es/styles/theme/themeCss.mjs.map +1 -1
  54. package/es/styles/theme/token/palette.mjs +6 -6
  55. package/es/styles/theme/token/palette.mjs.map +1 -1
  56. package/package.json +1 -1
@@ -1,12 +1,14 @@
1
1
  import { SwitchChangeEventHandler, SwitchContextType, SwitchIconProps, SwitchRootProps, SwitchThumbProps } from "./type.mjs";
2
+ import * as stylex from "@stylexjs/stylex";
2
3
  //#region src/Switch/atoms.d.ts
3
4
  export declare const useSwitchContext: () => SwitchContextType;
4
5
  type SwitchRootInternalProps = Omit<SwitchRootProps, 'onCheckedChange' | 'onClick'> & {
5
6
  onCheckedChange?: SwitchChangeEventHandler;
6
7
  onClick?: SwitchChangeEventHandler;
8
+ xstyle?: stylex.StyleXStyles;
7
9
  };
8
10
  export declare const SwitchRoot: {
9
- ({ checked, className, defaultChecked, onCheckedChange, onClick, onKeyDown, onKeyUp, onPointerCancel, onPointerDown, onPointerLeave, onPointerUp, size, children, disabled, readOnly, required, inputRef, id, name, style, ...rest }: SwitchRootInternalProps): import("react").JSX.Element;
11
+ ({ checked, className, defaultChecked, onCheckedChange, onClick, onKeyDown, onKeyUp, onPointerCancel, onPointerDown, onPointerLeave, onPointerUp, size, children, disabled, readOnly, required, inputRef, id, name, style, xstyle, ...rest }: SwitchRootInternalProps): import("react").JSX.Element;
10
12
  displayName: string;
11
13
  };
12
14
  export declare const SwitchThumb: {
@@ -29,6 +31,10 @@ export declare const switchStyles: {
29
31
  iconThumb: string;
30
32
  rootDefault: string;
31
33
  rootSmall: string;
34
+ rootText: string;
35
+ rootTextSmall: string;
36
+ textSizer: string;
37
+ textSizerSmall: string;
32
38
  thumbDefault: string;
33
39
  thumbSmall: string;
34
40
  };
@@ -4,7 +4,7 @@ import { focusRing } from "../styles/stylex/focusRing.mjs";
4
4
  import { useControlledState } from "../hooks/useControlledState.mjs";
5
5
  import { switchMarker } from "./marker.stylex.mjs";
6
6
  import { styles } from "./style.mjs";
7
- import { createContext, use, useEffect, useMemo, useRef, useState } from "react";
7
+ import { createContext, use, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
8
8
  import { jsx } from "react/jsx-runtime";
9
9
  import clsx$1 from "clsx";
10
10
  import * as stylex from "@stylexjs/stylex";
@@ -44,7 +44,7 @@ const useSwitchContext = () => {
44
44
  if (!context) throw new Error("useSwitchContext must be used within a SwitchRoot");
45
45
  return context;
46
46
  };
47
- const SwitchRoot = ({ checked, className, defaultChecked, onCheckedChange, onClick, onKeyDown, onKeyUp, onPointerCancel, onPointerDown, onPointerLeave, onPointerUp, size = "default", children, disabled, readOnly, required, inputRef, id, name, style, ...rest }) => {
47
+ const SwitchRoot = ({ checked, className, defaultChecked, onCheckedChange, onClick, onKeyDown, onKeyUp, onPointerCancel, onPointerDown, onPointerLeave, onPointerUp, size = "default", children, disabled, readOnly, required, inputRef, id, name, style, xstyle, ...rest }) => {
48
48
  const [isPressed, setIsPressed] = useState(false);
49
49
  const lastEventRef = useRef(null);
50
50
  const [isChecked, setIsChecked] = useControlledState(defaultChecked ?? false, {
@@ -112,7 +112,8 @@ const SwitchRoot = ({ checked, className, defaultChecked, onCheckedChange, onCli
112
112
  switchMarker,
113
113
  focusRing.info,
114
114
  styles.root,
115
- rootSizeStyles[size]
115
+ rootSizeStyles[size],
116
+ xstyle
116
117
  ], clsx$1("lobe-switch", className), style),
117
118
  onClick: handleClick,
118
119
  onKeyDown: handleKeyDown,
@@ -132,7 +133,22 @@ const SwitchThumb = ({ className, size = "default", style, children, ...rest })
132
133
  const { isChecked, isPressed } = useSwitchContext();
133
134
  const ref = useRef(null);
134
135
  const metrics = THUMB_METRICS[size];
135
- const targetX = isChecked ? isPressed ? metrics.pressedCheckedX : metrics.checkedX : 0;
136
+ const [travel, setTravel] = useState(metrics.checkedX);
137
+ useLayoutEffect(() => {
138
+ const root = ref.current?.parentElement;
139
+ if (!root) return;
140
+ const measure = () => {
141
+ const width = root.clientWidth;
142
+ setTravel(width > 0 ? Math.max(metrics.checkedX, width - 4 - metrics.width) : metrics.checkedX);
143
+ };
144
+ measure();
145
+ if (typeof ResizeObserver === "undefined") return;
146
+ const observer = new ResizeObserver(measure);
147
+ observer.observe(root);
148
+ return () => observer.disconnect();
149
+ }, [metrics]);
150
+ const extra = travel - metrics.checkedX;
151
+ const targetX = isChecked ? (isPressed ? metrics.pressedCheckedX : metrics.checkedX) + extra : 0;
136
152
  const targetWidth = isPressed ? metrics.pressedWidth : metrics.width;
137
153
  const [values] = useState(() => ({
138
154
  width: motionValue(targetWidth),
@@ -1 +1 @@
1
- {"version":3,"file":"atoms.mjs","names":["clsx"],"sources":["../../src/Switch/atoms.tsx"],"sourcesContent":["'use client';\n\nimport './style.css';\n\nimport { Switch } from '@base-ui/react/switch';\nimport * as stylex from '@stylexjs/stylex';\nimport clsx from 'clsx';\nimport { animate, motionValue } from 'motion';\nimport type { CSSProperties, KeyboardEvent, MouseEvent, PointerEvent } from 'react';\nimport { createContext, use, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { useControlledState } from '@/hooks/useControlledState';\nimport { focusRing } from '@/styles/stylex/focusRing';\nimport { styleProps } from '@/styles/stylex/props';\n\nimport { switchMarker } from './marker.stylex';\nimport { styles } from './style';\nimport type {\n SwitchChangeEventHandler,\n SwitchContextType,\n SwitchIconPosition,\n SwitchIconProps,\n SwitchRootProps,\n SwitchSize,\n SwitchThumbProps,\n} from './type';\n\nconst THUMB_METRICS: Record<\n SwitchSize,\n { checkedX: number; pressedCheckedX: number; pressedWidth: number; width: number }\n> = {\n default: { checkedX: 14, pressedCheckedX: 10, pressedWidth: 22, width: 18 },\n small: { checkedX: 12, pressedCheckedX: 8, pressedWidth: 16, width: 12 },\n};\n\nconst rootSizeStyles = { default: styles.rootDefault, small: styles.rootSmall };\nconst thumbSizeStyles = { default: styles.thumbDefault, small: styles.thumbSmall };\n\nconst THUMB_SPRING = { damping: 24, stiffness: 360, type: 'spring' as const };\n\nconst SwitchContext = createContext<SwitchContextType | null>(null);\n\nexport const useSwitchContext = () => {\n const context = use(SwitchContext);\n if (!context) {\n throw new Error('useSwitchContext must be used within a SwitchRoot');\n }\n return context;\n};\n\ntype SwitchRootInternalProps = Omit<SwitchRootProps, 'onCheckedChange' | 'onClick'> & {\n onCheckedChange?: SwitchChangeEventHandler;\n onClick?: SwitchChangeEventHandler;\n};\n\nexport const SwitchRoot = ({\n checked,\n className,\n defaultChecked,\n onCheckedChange,\n onClick,\n onKeyDown,\n onKeyUp,\n onPointerCancel,\n onPointerDown,\n onPointerLeave,\n onPointerUp,\n size = 'default',\n children,\n disabled,\n readOnly,\n required,\n inputRef,\n id,\n name,\n style,\n ...rest\n}: SwitchRootInternalProps) => {\n const [isPressed, setIsPressed] = useState(false);\n const lastEventRef = useRef<MouseEvent<HTMLButtonElement> | KeyboardEvent<HTMLButtonElement>>(\n null,\n );\n\n const [isChecked, setIsChecked] = useControlledState(defaultChecked ?? false, {\n defaultValue: defaultChecked,\n onChange: (value: boolean) => {\n if (lastEventRef.current) {\n onCheckedChange?.(value, lastEventRef.current);\n }\n },\n value: checked,\n });\n\n const contextValue = useMemo(\n () => ({\n isChecked: Boolean(isChecked),\n isPressed,\n setIsChecked: (value: boolean) => setIsChecked(value),\n setIsPressed,\n }),\n [isChecked, isPressed, setIsChecked],\n );\n\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n lastEventRef.current = event;\n onClick?.(!isChecked, event);\n };\n\n const isInteractive = !disabled && !readOnly;\n\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n if (event.key === 'Enter' || event.key === ' ') {\n lastEventRef.current = event;\n }\n if (event.key === ' ' && isInteractive) {\n setIsPressed(true);\n }\n onKeyDown?.(event);\n };\n\n const handleKeyUp = (event: KeyboardEvent<HTMLButtonElement>) => {\n if (event.key === ' ') {\n setIsPressed(false);\n }\n onKeyUp?.(event);\n };\n\n const handlePointerDown = (event: PointerEvent<HTMLButtonElement>) => {\n if (isInteractive) {\n setIsPressed(true);\n }\n onPointerDown?.(event);\n };\n\n const handlePointerUp = (event: PointerEvent<HTMLButtonElement>) => {\n setIsPressed(false);\n onPointerUp?.(event);\n };\n\n const handlePointerCancel = (event: PointerEvent<HTMLButtonElement>) => {\n setIsPressed(false);\n onPointerCancel?.(event);\n };\n\n const handlePointerLeave = (event: PointerEvent<HTMLButtonElement>) => {\n setIsPressed(false);\n onPointerLeave?.(event);\n };\n\n return (\n <SwitchContext value={contextValue}>\n <Switch.Root\n nativeButton\n checked={isChecked}\n defaultChecked={defaultChecked}\n disabled={disabled}\n id={id}\n inputRef={inputRef}\n name={name}\n readOnly={readOnly}\n required={required}\n render={\n <button\n {...rest}\n {...styleProps(\n [switchMarker, focusRing.info, styles.root, rootSizeStyles[size]],\n clsx('lobe-switch', className),\n style,\n )}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n onPointerCancel={handlePointerCancel}\n onPointerDown={handlePointerDown}\n onPointerLeave={handlePointerLeave}\n onPointerUp={handlePointerUp}\n />\n }\n onCheckedChange={setIsChecked}\n >\n {children}\n </Switch.Root>\n </SwitchContext>\n );\n};\n\nSwitchRoot.displayName = 'SwitchRoot';\n\nexport const SwitchThumb = ({\n className,\n size = 'default',\n style,\n children,\n ...rest\n}: SwitchThumbProps) => {\n const { isChecked, isPressed } = useSwitchContext();\n const ref = useRef<HTMLSpanElement>(null);\n\n const metrics = THUMB_METRICS[size];\n const targetX = isChecked ? (isPressed ? metrics.pressedCheckedX : metrics.checkedX) : 0;\n const targetWidth = isPressed ? metrics.pressedWidth : metrics.width;\n\n const [values] = useState(() => ({\n width: motionValue(targetWidth),\n x: motionValue(targetX),\n }));\n\n // animated keys stay referentially stable so React never rewrites mid-flight inline values\n const [initialStyle] = useState<CSSProperties>(\n () => ({ '--switch-x': `${targetX}px`, 'width': targetWidth }) as CSSProperties,\n );\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n const unsubscribeX = values.x.on('change', (x) => {\n el.style.setProperty('--switch-x', `${x}px`);\n });\n const unsubscribeWidth = values.width.on('change', (width) => {\n el.style.setProperty('width', `${width}px`);\n });\n return () => {\n unsubscribeX();\n unsubscribeWidth();\n };\n }, [values]);\n\n useEffect(() => {\n const reduceMotion = window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false;\n const transition = reduceMotion ? { duration: 0 } : THUMB_SPRING;\n const animations = [\n animate(values.x, targetX, transition),\n animate(values.width, targetWidth, transition),\n ];\n return () => {\n for (const animation of animations) animation.stop();\n };\n }, [values, targetX, targetWidth]);\n\n return (\n <Switch.Thumb\n render={\n <span\n {...rest}\n ref={ref}\n {...styleProps([styles.thumb, thumbSizeStyles[size]], className, {\n ...initialStyle,\n ...style,\n })}\n >\n {children}\n </span>\n }\n />\n );\n};\n\nSwitchThumb.displayName = 'SwitchThumb';\n\nconst iconPositionStyles: Record<SwitchIconPosition, stylex.StyleXStyles> = {\n left: styles.iconLeft,\n right: styles.iconRight,\n thumb: styles.iconThumb,\n};\n\nexport const SwitchIcon = ({\n children,\n className,\n position,\n size: _size,\n style,\n ...rest\n}: SwitchIconProps) => {\n return (\n <span {...styleProps([styles.icon, iconPositionStyles[position]], className, style)} {...rest}>\n {children}\n </span>\n );\n};\n\nSwitchIcon.displayName = 'SwitchIcon';\n\nconst switchClassNames = Object.fromEntries(\n Object.entries(styles).map(([key, value]) => [key, stylex.props(value).className ?? '']),\n) as Record<keyof typeof styles, string>;\n\nexport const switchStyles = {\n ...switchClassNames,\n iconLeftSmall: switchClassNames.iconLeft,\n iconRightSmall: switchClassNames.iconRight,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"atoms.mjs","names":["clsx"],"sources":["../../src/Switch/atoms.tsx"],"sourcesContent":["'use client';\n\nimport './style.css';\n\nimport { Switch } from '@base-ui/react/switch';\nimport * as stylex from '@stylexjs/stylex';\nimport clsx from 'clsx';\nimport { animate, motionValue } from 'motion';\nimport type { CSSProperties, KeyboardEvent, MouseEvent, PointerEvent } from 'react';\nimport { createContext, use, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\n\nimport { useControlledState } from '@/hooks/useControlledState';\nimport { focusRing } from '@/styles/stylex/focusRing';\nimport { styleProps } from '@/styles/stylex/props';\n\nimport { switchMarker } from './marker.stylex';\nimport { styles } from './style';\nimport type {\n SwitchChangeEventHandler,\n SwitchContextType,\n SwitchIconPosition,\n SwitchIconProps,\n SwitchRootProps,\n SwitchSize,\n SwitchThumbProps,\n} from './type';\n\nconst THUMB_METRICS: Record<\n SwitchSize,\n { checkedX: number; pressedCheckedX: number; pressedWidth: number; width: number }\n> = {\n default: { checkedX: 14, pressedCheckedX: 10, pressedWidth: 22, width: 18 },\n small: { checkedX: 12, pressedCheckedX: 8, pressedWidth: 16, width: 12 },\n};\n\nconst rootSizeStyles = { default: styles.rootDefault, small: styles.rootSmall };\nconst thumbSizeStyles = { default: styles.thumbDefault, small: styles.thumbSmall };\n\nconst THUMB_SPRING = { damping: 24, stiffness: 360, type: 'spring' as const };\n\nconst SwitchContext = createContext<SwitchContextType | null>(null);\n\nexport const useSwitchContext = () => {\n const context = use(SwitchContext);\n if (!context) {\n throw new Error('useSwitchContext must be used within a SwitchRoot');\n }\n return context;\n};\n\ntype SwitchRootInternalProps = Omit<SwitchRootProps, 'onCheckedChange' | 'onClick'> & {\n onCheckedChange?: SwitchChangeEventHandler;\n onClick?: SwitchChangeEventHandler;\n xstyle?: stylex.StyleXStyles;\n};\n\nexport const SwitchRoot = ({\n checked,\n className,\n defaultChecked,\n onCheckedChange,\n onClick,\n onKeyDown,\n onKeyUp,\n onPointerCancel,\n onPointerDown,\n onPointerLeave,\n onPointerUp,\n size = 'default',\n children,\n disabled,\n readOnly,\n required,\n inputRef,\n id,\n name,\n style,\n xstyle,\n ...rest\n}: SwitchRootInternalProps) => {\n const [isPressed, setIsPressed] = useState(false);\n const lastEventRef = useRef<MouseEvent<HTMLButtonElement> | KeyboardEvent<HTMLButtonElement>>(\n null,\n );\n\n const [isChecked, setIsChecked] = useControlledState(defaultChecked ?? false, {\n defaultValue: defaultChecked,\n onChange: (value: boolean) => {\n if (lastEventRef.current) {\n onCheckedChange?.(value, lastEventRef.current);\n }\n },\n value: checked,\n });\n\n const contextValue = useMemo(\n () => ({\n isChecked: Boolean(isChecked),\n isPressed,\n setIsChecked: (value: boolean) => setIsChecked(value),\n setIsPressed,\n }),\n [isChecked, isPressed, setIsChecked],\n );\n\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n lastEventRef.current = event;\n onClick?.(!isChecked, event);\n };\n\n const isInteractive = !disabled && !readOnly;\n\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n if (event.key === 'Enter' || event.key === ' ') {\n lastEventRef.current = event;\n }\n if (event.key === ' ' && isInteractive) {\n setIsPressed(true);\n }\n onKeyDown?.(event);\n };\n\n const handleKeyUp = (event: KeyboardEvent<HTMLButtonElement>) => {\n if (event.key === ' ') {\n setIsPressed(false);\n }\n onKeyUp?.(event);\n };\n\n const handlePointerDown = (event: PointerEvent<HTMLButtonElement>) => {\n if (isInteractive) {\n setIsPressed(true);\n }\n onPointerDown?.(event);\n };\n\n const handlePointerUp = (event: PointerEvent<HTMLButtonElement>) => {\n setIsPressed(false);\n onPointerUp?.(event);\n };\n\n const handlePointerCancel = (event: PointerEvent<HTMLButtonElement>) => {\n setIsPressed(false);\n onPointerCancel?.(event);\n };\n\n const handlePointerLeave = (event: PointerEvent<HTMLButtonElement>) => {\n setIsPressed(false);\n onPointerLeave?.(event);\n };\n\n return (\n <SwitchContext value={contextValue}>\n <Switch.Root\n nativeButton\n checked={isChecked}\n defaultChecked={defaultChecked}\n disabled={disabled}\n id={id}\n inputRef={inputRef}\n name={name}\n readOnly={readOnly}\n required={required}\n render={\n <button\n {...rest}\n {...styleProps(\n [switchMarker, focusRing.info, styles.root, rootSizeStyles[size], xstyle],\n clsx('lobe-switch', className),\n style,\n )}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n onPointerCancel={handlePointerCancel}\n onPointerDown={handlePointerDown}\n onPointerLeave={handlePointerLeave}\n onPointerUp={handlePointerUp}\n />\n }\n onCheckedChange={setIsChecked}\n >\n {children}\n </Switch.Root>\n </SwitchContext>\n );\n};\n\nSwitchRoot.displayName = 'SwitchRoot';\n\nexport const SwitchThumb = ({\n className,\n size = 'default',\n style,\n children,\n ...rest\n}: SwitchThumbProps) => {\n const { isChecked, isPressed } = useSwitchContext();\n const ref = useRef<HTMLSpanElement>(null);\n\n const metrics = THUMB_METRICS[size];\n // Track travel: the fixed metric, or the measured width when the root grows (inner text).\n const [travel, setTravel] = useState(metrics.checkedX);\n useLayoutEffect(() => {\n const root = ref.current?.parentElement;\n if (!root) return;\n const measure = () => {\n const width = root.clientWidth;\n // root padding 2px each side\n setTravel(\n width > 0 ? Math.max(metrics.checkedX, width - 4 - metrics.width) : metrics.checkedX,\n );\n };\n measure();\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(measure);\n observer.observe(root);\n return () => observer.disconnect();\n }, [metrics]);\n const extra = travel - metrics.checkedX;\n const targetX = isChecked ? (isPressed ? metrics.pressedCheckedX : metrics.checkedX) + extra : 0;\n const targetWidth = isPressed ? metrics.pressedWidth : metrics.width;\n\n const [values] = useState(() => ({\n width: motionValue(targetWidth),\n x: motionValue(targetX),\n }));\n\n // animated keys stay referentially stable so React never rewrites mid-flight inline values\n const [initialStyle] = useState<CSSProperties>(\n () => ({ '--switch-x': `${targetX}px`, 'width': targetWidth }) as CSSProperties,\n );\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n const unsubscribeX = values.x.on('change', (x) => {\n el.style.setProperty('--switch-x', `${x}px`);\n });\n const unsubscribeWidth = values.width.on('change', (width) => {\n el.style.setProperty('width', `${width}px`);\n });\n return () => {\n unsubscribeX();\n unsubscribeWidth();\n };\n }, [values]);\n\n useEffect(() => {\n const reduceMotion = window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false;\n const transition = reduceMotion ? { duration: 0 } : THUMB_SPRING;\n const animations = [\n animate(values.x, targetX, transition),\n animate(values.width, targetWidth, transition),\n ];\n return () => {\n for (const animation of animations) animation.stop();\n };\n }, [values, targetX, targetWidth]);\n\n return (\n <Switch.Thumb\n render={\n <span\n {...rest}\n ref={ref}\n {...styleProps([styles.thumb, thumbSizeStyles[size]], className, {\n ...initialStyle,\n ...style,\n })}\n >\n {children}\n </span>\n }\n />\n );\n};\n\nSwitchThumb.displayName = 'SwitchThumb';\n\nconst iconPositionStyles: Record<SwitchIconPosition, stylex.StyleXStyles> = {\n left: styles.iconLeft,\n right: styles.iconRight,\n thumb: styles.iconThumb,\n};\n\nexport const SwitchIcon = ({\n children,\n className,\n position,\n size: _size,\n style,\n ...rest\n}: SwitchIconProps) => {\n return (\n <span {...styleProps([styles.icon, iconPositionStyles[position]], className, style)} {...rest}>\n {children}\n </span>\n );\n};\n\nSwitchIcon.displayName = 'SwitchIcon';\n\nconst switchClassNames = Object.fromEntries(\n Object.entries(styles).map(([key, value]) => [key, stylex.props(value).className ?? '']),\n) as Record<keyof typeof styles, string>;\n\nexport const switchStyles = {\n ...switchClassNames,\n iconLeftSmall: switchClassNames.iconLeft,\n iconRightSmall: switchClassNames.iconRight,\n};\n"],"mappings":"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"}
@@ -10,16 +10,17 @@ const styles = {
10
10
  kfzvcC: "lb47corl",
11
11
  kVAEAm: "lb10l6tqk",
12
12
  kIyJzY: "lb12w9bfk",
13
+ khDVqt: "lbuxw1ft",
13
14
  $$css: true
14
15
  },
15
16
  iconLeft: {
16
- kLqNvP: "lb1v1hl4c",
17
+ kLqNvP: "lbjwk6fx",
17
18
  kSiTet: "lbg01cxk lbqtmd8e",
18
19
  km0Bbg: "lb1t448cz lb1gshqrl",
19
20
  $$css: true
20
21
  },
21
22
  iconRight: {
22
- kt4wiu: "lbxx7yvo",
23
+ kt4wiu: "lb1inkcgm",
23
24
  kSiTet: "lb12foe86",
24
25
  km0Bbg: "lb1t60ft6",
25
26
  $$css: true
@@ -73,6 +74,36 @@ const styles = {
73
74
  kzqmXN: "lbgd8bvy",
74
75
  $$css: true
75
76
  },
77
+ rootText: {
78
+ kGuDYH: "lbfifm61",
79
+ kLWn49: "lbo5v014",
80
+ k7Eaqz: "lb1nb6za0",
81
+ kzqmXN: "lb14atkfc",
82
+ $$css: true
83
+ },
84
+ rootTextSmall: {
85
+ kGuDYH: "lb1k6wstc",
86
+ kLWn49: "lbo5v014",
87
+ k7Eaqz: "lb46jg8d",
88
+ kzqmXN: "lb14atkfc",
89
+ $$css: true
90
+ },
91
+ textSizer: {
92
+ kUk6DE: "lb1okw0bk",
93
+ k1xSpc: "lbrvj5dj",
94
+ kayTVb: "lb9ek82g",
95
+ kwRFfy: "lb11lfxj5",
96
+ kZCmMZ: "lb13jy36j",
97
+ kfzvcC: "lb47corl",
98
+ k33iCy: "lblshs6z",
99
+ khDVqt: "lbuxw1ft",
100
+ $$css: true
101
+ },
102
+ textSizerSmall: {
103
+ kwRFfy: "lb14vy60q",
104
+ kZCmMZ: "lbf7dkkf",
105
+ $$css: true
106
+ },
76
107
  thumb: {
77
108
  kaIpWk: "lb16rqkct",
78
109
  kmkexE: "lbxj5fsl",
@@ -1 +1 @@
1
- {"version":3,"file":"style.mjs","names":[],"sources":["../../src/Switch/style.ts"],"sourcesContent":["import * as stylex from '@stylexjs/stylex';\n\nimport { cssVar } from '@/styles/stylex/cssVar.stylex';\n\nimport { switchMarker } from './marker.stylex';\n\nconst loadingSpin = stylex.keyframes({\n '0%': { transform: 'rotate(0deg)' },\n '100%': { transform: 'rotate(360deg)' },\n});\n\nconst reducedMotion = '@media (prefers-reduced-motion: reduce)';\nconst enabledHover = ':hover:not([data-disabled])';\n\nexport const styles = stylex.create({\n icon: {\n insetBlock: 0,\n transition: `opacity 200ms ${cssVar.motionEaseOut}, scale 200ms ${cssVar.motionEaseOut}`,\n alignItems: 'center',\n color: cssVar.colorBgLayout,\n display: 'flex',\n justifyContent: 'center',\n pointerEvents: 'none',\n position: 'absolute',\n transitionDuration: { default: null, [reducedMotion]: '0s' },\n },\n iconLeft: {\n insetInlineStart: 4,\n opacity: { default: 0, [stylex.when.ancestor('[data-checked]', switchMarker)]: 1 },\n scale: { default: 0, [stylex.when.ancestor('[data-checked]', switchMarker)]: 1 },\n },\n iconRight: {\n insetInlineEnd: 4,\n opacity: { default: null, [stylex.when.ancestor('[data-checked]', switchMarker)]: 0 },\n scale: { default: null, [stylex.when.ancestor('[data-checked]', switchMarker)]: 0 },\n },\n iconThumb: {\n inset: 'unset',\n insetBlock: 'unset',\n color: cssVar.colorPrimary,\n position: 'relative',\n transform: 'none',\n },\n loading: {\n animationDuration: { default: '1s', [reducedMotion]: '0s' },\n animationIterationCount: 'infinite',\n animationName: loadingSpin,\n animationTimingFunction: 'linear',\n },\n root: {\n padding: 2,\n borderColor: 'currentcolor',\n borderRadius: 100,\n borderStyle: 'none',\n borderWidth: 0,\n outline: 'none',\n overflow: 'hidden',\n transition: `background 200ms ${cssVar.motionEaseOut}, box-shadow 200ms ${cssVar.motionEaseOut}`,\n alignItems: 'center',\n backgroundColor: {\n 'default': cssVar.colorFillSecondary,\n [enabledHover]: cssVar.colorFill,\n ':is([data-checked])': cssVar.colorPrimary,\n ':is([data-checked]):hover:not([data-disabled])': cssVar.colorPrimaryHover,\n },\n boxShadow: {\n 'default': 'inset 0 1.5px 2px rgb(0 0 0 / 8%)',\n ':is([data-checked])': 'inset 0 1.5px 3px rgb(0 0 0 / 18%)',\n },\n boxSizing: 'border-box',\n cursor: { 'default': 'pointer', ':is([data-disabled])': 'not-allowed' },\n display: 'inline-flex',\n justifyContent: 'flex-start',\n opacity: { 'default': null, ':is([data-disabled])': 0.45 },\n position: 'relative',\n transitionDuration: { default: null, [reducedMotion]: '0s' },\n userSelect: 'none',\n },\n rootDefault: {\n height: 22,\n minWidth: 36,\n width: 36,\n },\n rootSmall: {\n height: 16,\n minWidth: 28,\n width: 28,\n },\n thumb: {\n borderRadius: '50%',\n transition: `box-shadow 200ms ${cssVar.motionEaseOut}`,\n alignItems: 'center',\n backgroundColor: cssVar.colorBgContainer,\n boxShadow: {\n 'default':\n '0 0 0 0.5px rgb(0 0 0 / 4%), 0 1px 1px rgb(0 0 0 / 6%), 0 3px 8px rgb(0 30 80 / 16%)',\n ':is([data-disabled])': 'none',\n [stylex.when.ancestor(enabledHover, switchMarker)]:\n '0 0 0 0.5px rgb(0 0 0 / 4%), 0 1px 1px rgb(0 0 0 / 8%), 0 6px 14px rgb(0 30 80 / 24%)',\n },\n display: 'flex',\n flexShrink: 0,\n justifyContent: 'center',\n transform: 'translateX(calc(var(--switch-x, 0px) * var(--switch-dir, 1)))',\n transitionDuration: { default: null, [reducedMotion]: '0s' },\n },\n thumbDefault: {\n height: 18,\n width: 18,\n },\n thumbSmall: {\n height: 12,\n width: 12,\n },\n});\n"],"mappings":";AAQA,MAAa,SAAS;CACpB,MAAM;EACJ,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,UAAU;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,WAAW;EACT,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,WAAW;EACT,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,SAAS;EACP,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,MAAM;EACJ,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,aAAa;EACX,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,WAAW;EACT,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,OAAO;EACL,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;EACP,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,cAAc;EACZ,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,YAAY;EACV,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;AACF"}
1
+ {"version":3,"file":"style.mjs","names":[],"sources":["../../src/Switch/style.ts"],"sourcesContent":["import * as stylex from '@stylexjs/stylex';\n\nimport { cssVar } from '@/styles/stylex/cssVar.stylex';\n\nimport { switchMarker } from './marker.stylex';\n\nconst loadingSpin = stylex.keyframes({\n '0%': { transform: 'rotate(0deg)' },\n '100%': { transform: 'rotate(360deg)' },\n});\n\nconst reducedMotion = '@media (prefers-reduced-motion: reduce)';\nconst enabledHover = ':hover:not([data-disabled])';\n\nexport const styles = stylex.create({\n icon: {\n insetBlock: 0,\n transition: `opacity 200ms ${cssVar.motionEaseOut}, scale 200ms ${cssVar.motionEaseOut}`,\n alignItems: 'center',\n color: cssVar.colorBgLayout,\n display: 'flex',\n justifyContent: 'center',\n pointerEvents: 'none',\n position: 'absolute',\n transitionDuration: { default: null, [reducedMotion]: '0s' },\n whiteSpace: 'nowrap',\n },\n iconLeft: {\n insetInlineStart: 7,\n opacity: { default: 0, [stylex.when.ancestor('[data-checked]', switchMarker)]: 1 },\n scale: { default: 0, [stylex.when.ancestor('[data-checked]', switchMarker)]: 1 },\n },\n iconRight: {\n insetInlineEnd: 7,\n opacity: { default: null, [stylex.when.ancestor('[data-checked]', switchMarker)]: 0 },\n scale: { default: null, [stylex.when.ancestor('[data-checked]', switchMarker)]: 0 },\n },\n iconThumb: {\n inset: 'unset',\n insetBlock: 'unset',\n color: cssVar.colorPrimary,\n position: 'relative',\n transform: 'none',\n },\n loading: {\n animationDuration: { default: '1s', [reducedMotion]: '0s' },\n animationIterationCount: 'infinite',\n animationName: loadingSpin,\n animationTimingFunction: 'linear',\n },\n root: {\n padding: 2,\n borderColor: 'currentcolor',\n borderRadius: 100,\n borderStyle: 'none',\n borderWidth: 0,\n outline: 'none',\n overflow: 'hidden',\n transition: `background 200ms ${cssVar.motionEaseOut}, box-shadow 200ms ${cssVar.motionEaseOut}`,\n alignItems: 'center',\n backgroundColor: {\n 'default': cssVar.colorFillSecondary,\n [enabledHover]: cssVar.colorFill,\n ':is([data-checked])': cssVar.colorPrimary,\n ':is([data-checked]):hover:not([data-disabled])': cssVar.colorPrimaryHover,\n },\n boxShadow: {\n 'default': 'inset 0 1.5px 2px rgb(0 0 0 / 8%)',\n ':is([data-checked])': 'inset 0 1.5px 3px rgb(0 0 0 / 18%)',\n },\n boxSizing: 'border-box',\n cursor: { 'default': 'pointer', ':is([data-disabled])': 'not-allowed' },\n display: 'inline-flex',\n justifyContent: 'flex-start',\n opacity: { 'default': null, ':is([data-disabled])': 0.45 },\n position: 'relative',\n transitionDuration: { default: null, [reducedMotion]: '0s' },\n userSelect: 'none',\n },\n rootDefault: {\n height: 22,\n minWidth: 36,\n width: 36,\n },\n rootSmall: {\n height: 16,\n minWidth: 28,\n width: 28,\n },\n rootText: {\n fontSize: 12,\n lineHeight: 1,\n minWidth: 44,\n width: 'auto',\n },\n rootTextSmall: {\n fontSize: 10,\n lineHeight: 1,\n minWidth: 32,\n width: 'auto',\n },\n textSizer: {\n flex: 'none',\n display: 'grid',\n order: 1,\n paddingInlineEnd: '4px',\n paddingInlineStart: '24px',\n pointerEvents: 'none',\n visibility: 'hidden',\n whiteSpace: 'nowrap',\n },\n textSizerSmall: {\n paddingInlineEnd: '2px',\n paddingInlineStart: '16px',\n },\n thumb: {\n borderRadius: '50%',\n transition: `box-shadow 200ms ${cssVar.motionEaseOut}`,\n alignItems: 'center',\n backgroundColor: cssVar.colorBgContainer,\n boxShadow: {\n 'default':\n '0 0 0 0.5px rgb(0 0 0 / 4%), 0 1px 1px rgb(0 0 0 / 6%), 0 3px 8px rgb(0 30 80 / 16%)',\n ':is([data-disabled])': 'none',\n [stylex.when.ancestor(enabledHover, switchMarker)]:\n '0 0 0 0.5px rgb(0 0 0 / 4%), 0 1px 1px rgb(0 0 0 / 8%), 0 6px 14px rgb(0 30 80 / 24%)',\n },\n display: 'flex',\n flexShrink: 0,\n justifyContent: 'center',\n transform: 'translateX(calc(var(--switch-x, 0px) * var(--switch-dir, 1)))',\n transitionDuration: { default: null, [reducedMotion]: '0s' },\n },\n thumbDefault: {\n height: 18,\n width: 18,\n },\n thumbSmall: {\n height: 12,\n width: 12,\n },\n});\n"],"mappings":";AAQA,MAAa,SAAS;CACpB,MAAM;EACJ,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,UAAU;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,WAAW;EACT,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,WAAW;EACT,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,SAAS;EACP,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,MAAM;EACJ,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,aAAa;EACX,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,WAAW;EACT,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,UAAU;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,eAAe;EACb,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,WAAW;EACT,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,gBAAgB;EACd,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,OAAO;EACL,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;EACP,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,cAAc;EACZ,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;CACA,YAAY;EACV,QAAQ;EACR,QAAQ;EACR,OAAO;CACT;AACF"}
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
  import { useTranslation } from "../i18n/useTranslation.mjs";
3
+ import Block from "../Block/Block.mjs";
3
4
  import Empty from "../Empty/Empty.mjs";
4
5
  import Spin from "../Spin/Spin.mjs";
5
6
  import { PREFIX_CLS } from "./constants.mjs";
@@ -85,6 +86,7 @@ const TableInner = (props) => {
85
86
  top: null
86
87
  };
87
88
  const rootStyle = {
89
+ "--columns-count": leafColumns.length,
88
90
  ...semanticStyles.root,
89
91
  ...style
90
92
  };
@@ -132,13 +134,20 @@ const TableInner = (props) => {
132
134
  onColumnResize: controller.onColumnResize,
133
135
  onScroll
134
136
  }),
135
- isLoading && /* @__PURE__ */ jsxs("div", {
137
+ isLoading && /* @__PURE__ */ jsx("div", {
136
138
  ...stylex.props(styles.loading),
137
139
  "data-table-loading": "",
138
- children: [/* @__PURE__ */ jsx(Spin, {
139
- ...spinRest,
140
- variant: spinVariant
141
- }), tip]
140
+ children: /* @__PURE__ */ jsxs(Block, {
141
+ align: "center",
142
+ "data-table-loading-indicator": "",
143
+ gap: 8,
144
+ padding: 12,
145
+ variant: "outlined",
146
+ children: [/* @__PURE__ */ jsx(Spin, {
147
+ ...spinRest,
148
+ variant: spinVariant
149
+ }), tip]
150
+ })
142
151
  }),
143
152
  /* @__PURE__ */ jsx(FixedFrost, { rootRef })
144
153
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"Table.mjs","names":["tableMessages","clsx"],"sources":["../../src/Table/Table.tsx"],"sourcesContent":["'use client';\n\nimport * as stylex from '@stylexjs/stylex';\nimport clsx from 'clsx';\nimport { Inbox } from 'lucide-react';\nimport {\n type CSSProperties,\n isValidElement,\n memo,\n type ReactNode,\n type Ref,\n useCallback,\n useImperativeHandle,\n useMemo,\n useRef,\n} from 'react';\n\nimport Empty from '@/Empty';\nimport tableMessages from '@/i18n/resources/en/table';\nimport { useTranslation } from '@/i18n/useTranslation';\nimport Spin from '@/Spin';\n\nimport Column from './Column';\nimport ColumnGroup from './ColumnGroup';\nimport { PREFIX_CLS } from './constants';\nimport { getStickyOffsets } from './engine/fixed';\nimport type { TableInternalProps } from './internal';\nimport { EXPAND_COLUMN } from './pipeline/columnUtils';\nimport {\n SELECTION_ALL,\n SELECTION_COLUMN,\n SELECTION_INVERT,\n SELECTION_NONE,\n} from './pipeline/selectionUtils';\nimport { HeaderContext, SelectionContext, TableViewContext } from './render/context';\nimport FixedFrost from './render/FixedFrost';\nimport TableLoadingSkeleton from './render/LoadingSkeleton';\nimport { renderPaginationBars } from './render/PaginationBar';\nimport { TableSummary } from './render/Summary';\nimport { resolveSticky, toTableRef } from './render/tableHelpers';\nimport TableView from './render/TableView';\nimport { useViewContexts } from './render/useViewContexts';\nimport { useStableSemantic } from './semantic';\nimport { TableStoreProvider } from './store/hooks';\nimport { styles } from './style';\nimport type { TableProps, TableRef } from './type';\nimport { useTableController } from './useTableController';\n\nconst TableInner = <T,>(props: TableInternalProps<T>) => {\n const {\n className,\n classNames,\n footer,\n internalRef,\n loading = false,\n onScroll,\n pagination,\n ref,\n rootClassName,\n rowHoverable = true,\n rowSelection,\n scroll,\n showHeader = true,\n size = 'middle',\n sticky,\n style,\n styles: customStyles,\n tableLayout,\n title,\n variant = 'borderless',\n virtual,\n } = props;\n\n const controller = useTableController(props);\n const { model, rows, state } = controller;\n const { t } = useTranslation(tableMessages);\n const { classNames: semanticClassNames, styles: semanticStyles } = useStableSemantic(\n classNames,\n customStyles,\n props,\n );\n\n const rootRef = useRef<HTMLDivElement>(null);\n const { measureRef } = controller;\n const setRootRef = useCallback(\n (element: HTMLDivElement | null) => {\n rootRef.current = element;\n return measureRef(element);\n },\n [measureRef],\n );\n useImperativeHandle(\n ref as Ref<TableRef>,\n () => toTableRef(rootRef.current!, controller.scrollTo),\n [controller.scrollTo],\n );\n useImperativeHandle(\n internalRef,\n () => ({ clearSelection: controller.selection.actions.clear, store: controller.store }),\n [controller.selection.actions.clear, controller.store],\n );\n\n const { headerValue, selectionValue, viewValue } = useViewContexts<T>({\n controller,\n props,\n semanticClassNames,\n semanticStyles,\n });\n const leafColumns = model.leafColumns;\n\n const {\n spinning: isLoading = true,\n tip,\n variant: spinVariant = 'network',\n ...spinRest\n } = typeof loading === 'object' ? loading : { spinning: loading };\n\n const customEmpty = props.locale?.emptyText;\n const emptyNode = isLoading ? (\n <TableLoadingSkeleton\n columns={controller.columns}\n expandColumn={Boolean(controller.expandType)}\n rows={pagination === false ? 5 : Math.min(5, state.page.pageSize)}\n screens={controller.screens}\n selectionColumn={Boolean(rowSelection)}\n size={size}\n />\n ) : customEmpty === undefined ? (\n <Empty description={t('table.emptyText')} icon={Inbox} imageSize={40} />\n ) : typeof customEmpty === 'function' ? (\n customEmpty()\n ) : (\n customEmpty\n );\n\n const stickyConfig = resolveSticky(sticky);\n const { summaryNode } = controller;\n const summaryFixed =\n isValidElement<{ fixed?: boolean | 'top' | 'bottom' }>(summaryNode) &&\n summaryNode.type === TableSummary\n ? summaryNode.props.fixed\n : undefined;\n const fixFooter =\n controller.fixHeader || stickyConfig.isSticky || virtual\n ? virtual && summaryNode\n ? (summaryFixed ?? 'bottom')\n : (summaryFixed ?? false)\n : false;\n\n const hasFixedColumn = leafColumns.some((leaf) => leaf.fixed);\n const mergedTableLayout =\n tableLayout ??\n (hasFixedColumn\n ? scroll?.x === 'max-content'\n ? 'auto'\n : 'fixed'\n : controller.fixHeader ||\n stickyConfig.isSticky ||\n leafColumns.some((leaf) => (leaf.column.source.column as { ellipsis?: unknown }).ellipsis)\n ? 'fixed'\n : 'auto');\n\n const offsets = useMemo(\n () => getStickyOffsets(controller.columnWidths, leafColumns),\n [controller.columnWidths, leafColumns],\n );\n\n const pager = state.config\n ? renderPaginationBars({\n classNames: semanticClassNames.pagination,\n config: state.config,\n onChange: state.onPaginationChange,\n page: state.page,\n size: props.size,\n styles: semanticStyles.pagination,\n total: state.total,\n })\n : { bottom: null, top: null };\n\n const rootStyle: CSSProperties = { ...semanticStyles.root, ...style };\n\n return (\n <TableStoreProvider value={controller.store}>\n <TableViewContext value={viewValue}>\n <SelectionContext value={selectionValue}>\n <HeaderContext value={headerValue}>\n <div\n ref={setRootRef}\n style={rootStyle}\n className={clsx(\n stylex.props(styles.root).className,\n `${PREFIX_CLS}-wrapper`,\n rootClassName,\n className,\n semanticClassNames.root,\n )}\n >\n {pager.top}\n <div className={stylex.props(styles.spinContainer).className} data-table-wrapper=\"\">\n <TableView<T>\n bodyRef={controller.bodyRef}\n colWidths={controller.columnWidths}\n emptyNode={emptyNode}\n fixFooter={fixFooter}\n fixHeader={controller.fixHeader}\n footer={footer ? footer(rows) : undefined}\n grouped={controller.grouped}\n headerRows={model.headerRows}\n hoverable={rowHoverable}\n offsets={offsets}\n rows={model.rows}\n scrollX={scroll?.x}\n scrollY={scroll?.y}\n showHeader={showHeader}\n size={size}\n sticky={stickyConfig}\n summaryNode={summaryNode}\n tableLayout={mergedTableLayout}\n title={title ? title(rows) : undefined}\n variant={variant}\n virtual={controller.virtualInput}\n virtualScrollRef={controller.virtualScrollRef}\n onColumnResize={controller.onColumnResize}\n onScroll={onScroll}\n />\n {isLoading && (\n <div {...stylex.props(styles.loading)} data-table-loading=\"\">\n <Spin {...spinRest} variant={spinVariant} />\n {tip as ReactNode}\n </div>\n )}\n <FixedFrost rootRef={rootRef} />\n </div>\n {pager.bottom}\n </div>\n </HeaderContext>\n </SelectionContext>\n </TableViewContext>\n </TableStoreProvider>\n );\n};\n\ntype TableComponent = (<T>(props: TableProps<T>) => ReactNode) & {\n Column: typeof Column;\n ColumnGroup: typeof ColumnGroup;\n displayName?: string;\n EXPAND_COLUMN: typeof EXPAND_COLUMN;\n SELECTION_ALL: typeof SELECTION_ALL;\n SELECTION_COLUMN: typeof SELECTION_COLUMN;\n SELECTION_INVERT: typeof SELECTION_INVERT;\n SELECTION_NONE: typeof SELECTION_NONE;\n Summary: typeof TableSummary;\n};\n\nconst Table = memo(TableInner) as unknown as TableComponent;\n\nTable.displayName = 'Table';\nTable.Column = Column;\nTable.ColumnGroup = ColumnGroup;\nTable.EXPAND_COLUMN = EXPAND_COLUMN;\nTable.SELECTION_COLUMN = SELECTION_COLUMN;\nTable.SELECTION_ALL = SELECTION_ALL;\nTable.SELECTION_INVERT = SELECTION_INVERT;\nTable.SELECTION_NONE = SELECTION_NONE;\nTable.Summary = TableSummary;\n\nexport { TableInner };\n\nexport default Table;\n"],"mappings":"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"}
1
+ {"version":3,"file":"Table.mjs","names":["tableMessages","clsx"],"sources":["../../src/Table/Table.tsx"],"sourcesContent":["'use client';\n\nimport * as stylex from '@stylexjs/stylex';\nimport clsx from 'clsx';\nimport { Inbox } from 'lucide-react';\nimport {\n type CSSProperties,\n isValidElement,\n memo,\n type ReactNode,\n type Ref,\n useCallback,\n useImperativeHandle,\n useMemo,\n useRef,\n} from 'react';\n\nimport Block from '@/Block';\nimport Empty from '@/Empty';\nimport tableMessages from '@/i18n/resources/en/table';\nimport { useTranslation } from '@/i18n/useTranslation';\nimport Spin from '@/Spin';\n\nimport Column from './Column';\nimport ColumnGroup from './ColumnGroup';\nimport { PREFIX_CLS } from './constants';\nimport { getStickyOffsets } from './engine/fixed';\nimport type { TableInternalProps } from './internal';\nimport { EXPAND_COLUMN } from './pipeline/columnUtils';\nimport {\n SELECTION_ALL,\n SELECTION_COLUMN,\n SELECTION_INVERT,\n SELECTION_NONE,\n} from './pipeline/selectionUtils';\nimport { HeaderContext, SelectionContext, TableViewContext } from './render/context';\nimport FixedFrost from './render/FixedFrost';\nimport TableLoadingSkeleton from './render/LoadingSkeleton';\nimport { renderPaginationBars } from './render/PaginationBar';\nimport { TableSummary } from './render/Summary';\nimport { resolveSticky, toTableRef } from './render/tableHelpers';\nimport TableView from './render/TableView';\nimport { useViewContexts } from './render/useViewContexts';\nimport { useStableSemantic } from './semantic';\nimport { TableStoreProvider } from './store/hooks';\nimport { styles } from './style';\nimport type { TableProps, TableRef } from './type';\nimport { useTableController } from './useTableController';\n\nconst TableInner = <T,>(props: TableInternalProps<T>) => {\n const {\n className,\n classNames,\n footer,\n internalRef,\n loading = false,\n onScroll,\n pagination,\n ref,\n rootClassName,\n rowHoverable = true,\n rowSelection,\n scroll,\n showHeader = true,\n size = 'middle',\n sticky,\n style,\n styles: customStyles,\n tableLayout,\n title,\n variant = 'borderless',\n virtual,\n } = props;\n\n const controller = useTableController(props);\n const { model, rows, state } = controller;\n const { t } = useTranslation(tableMessages);\n const { classNames: semanticClassNames, styles: semanticStyles } = useStableSemantic(\n classNames,\n customStyles,\n props,\n );\n\n const rootRef = useRef<HTMLDivElement>(null);\n const { measureRef } = controller;\n const setRootRef = useCallback(\n (element: HTMLDivElement | null) => {\n rootRef.current = element;\n return measureRef(element);\n },\n [measureRef],\n );\n useImperativeHandle(\n ref as Ref<TableRef>,\n () => toTableRef(rootRef.current!, controller.scrollTo),\n [controller.scrollTo],\n );\n useImperativeHandle(\n internalRef,\n () => ({ clearSelection: controller.selection.actions.clear, store: controller.store }),\n [controller.selection.actions.clear, controller.store],\n );\n\n const { headerValue, selectionValue, viewValue } = useViewContexts<T>({\n controller,\n props,\n semanticClassNames,\n semanticStyles,\n });\n const leafColumns = model.leafColumns;\n\n const {\n spinning: isLoading = true,\n tip,\n variant: spinVariant = 'network',\n ...spinRest\n } = typeof loading === 'object' ? loading : { spinning: loading };\n\n const customEmpty = props.locale?.emptyText;\n const emptyNode = isLoading ? (\n <TableLoadingSkeleton\n columns={controller.columns}\n expandColumn={Boolean(controller.expandType)}\n rows={pagination === false ? 5 : Math.min(5, state.page.pageSize)}\n screens={controller.screens}\n selectionColumn={Boolean(rowSelection)}\n size={size}\n />\n ) : customEmpty === undefined ? (\n <Empty description={t('table.emptyText')} icon={Inbox} imageSize={40} />\n ) : typeof customEmpty === 'function' ? (\n customEmpty()\n ) : (\n customEmpty\n );\n\n const stickyConfig = resolveSticky(sticky);\n const { summaryNode } = controller;\n const summaryFixed =\n isValidElement<{ fixed?: boolean | 'top' | 'bottom' }>(summaryNode) &&\n summaryNode.type === TableSummary\n ? summaryNode.props.fixed\n : undefined;\n const fixFooter =\n controller.fixHeader || stickyConfig.isSticky || virtual\n ? virtual && summaryNode\n ? (summaryFixed ?? 'bottom')\n : (summaryFixed ?? false)\n : false;\n\n const hasFixedColumn = leafColumns.some((leaf) => leaf.fixed);\n const mergedTableLayout =\n tableLayout ??\n (hasFixedColumn\n ? scroll?.x === 'max-content'\n ? 'auto'\n : 'fixed'\n : controller.fixHeader ||\n stickyConfig.isSticky ||\n leafColumns.some((leaf) => (leaf.column.source.column as { ellipsis?: unknown }).ellipsis)\n ? 'fixed'\n : 'auto');\n\n const offsets = useMemo(\n () => getStickyOffsets(controller.columnWidths, leafColumns),\n [controller.columnWidths, leafColumns],\n );\n\n const pager = state.config\n ? renderPaginationBars({\n classNames: semanticClassNames.pagination,\n config: state.config,\n onChange: state.onPaginationChange,\n page: state.page,\n size: props.size,\n styles: semanticStyles.pagination,\n total: state.total,\n })\n : { bottom: null, top: null };\n\n // The loading mask is a sibling of the table, so it needs the column count here to stack\n // above fixed cells (z-index up to 2 × columns).\n const rootStyle = {\n '--columns-count': leafColumns.length,\n ...semanticStyles.root,\n ...style,\n } as CSSProperties;\n\n return (\n <TableStoreProvider value={controller.store}>\n <TableViewContext value={viewValue}>\n <SelectionContext value={selectionValue}>\n <HeaderContext value={headerValue}>\n <div\n ref={setRootRef}\n style={rootStyle}\n className={clsx(\n stylex.props(styles.root).className,\n `${PREFIX_CLS}-wrapper`,\n rootClassName,\n className,\n semanticClassNames.root,\n )}\n >\n {pager.top}\n <div className={stylex.props(styles.spinContainer).className} data-table-wrapper=\"\">\n <TableView<T>\n bodyRef={controller.bodyRef}\n colWidths={controller.columnWidths}\n emptyNode={emptyNode}\n fixFooter={fixFooter}\n fixHeader={controller.fixHeader}\n footer={footer ? footer(rows) : undefined}\n grouped={controller.grouped}\n headerRows={model.headerRows}\n hoverable={rowHoverable}\n offsets={offsets}\n rows={model.rows}\n scrollX={scroll?.x}\n scrollY={scroll?.y}\n showHeader={showHeader}\n size={size}\n sticky={stickyConfig}\n summaryNode={summaryNode}\n tableLayout={mergedTableLayout}\n title={title ? title(rows) : undefined}\n variant={variant}\n virtual={controller.virtualInput}\n virtualScrollRef={controller.virtualScrollRef}\n onColumnResize={controller.onColumnResize}\n onScroll={onScroll}\n />\n {isLoading && (\n <div {...stylex.props(styles.loading)} data-table-loading=\"\">\n <Block\n align={'center'}\n data-table-loading-indicator=\"\"\n gap={8}\n padding={12}\n variant={'outlined'}\n >\n <Spin {...spinRest} variant={spinVariant} />\n {tip as ReactNode}\n </Block>\n </div>\n )}\n <FixedFrost rootRef={rootRef} />\n </div>\n {pager.bottom}\n </div>\n </HeaderContext>\n </SelectionContext>\n </TableViewContext>\n </TableStoreProvider>\n );\n};\n\ntype TableComponent = (<T>(props: TableProps<T>) => ReactNode) & {\n Column: typeof Column;\n ColumnGroup: typeof ColumnGroup;\n displayName?: string;\n EXPAND_COLUMN: typeof EXPAND_COLUMN;\n SELECTION_ALL: typeof SELECTION_ALL;\n SELECTION_COLUMN: typeof SELECTION_COLUMN;\n SELECTION_INVERT: typeof SELECTION_INVERT;\n SELECTION_NONE: typeof SELECTION_NONE;\n Summary: typeof TableSummary;\n};\n\nconst Table = memo(TableInner) as unknown as TableComponent;\n\nTable.displayName = 'Table';\nTable.Column = Column;\nTable.ColumnGroup = ColumnGroup;\nTable.EXPAND_COLUMN = EXPAND_COLUMN;\nTable.SELECTION_COLUMN = SELECTION_COLUMN;\nTable.SELECTION_ALL = SELECTION_ALL;\nTable.SELECTION_INVERT = SELECTION_INVERT;\nTable.SELECTION_NONE = SELECTION_NONE;\nTable.Summary = TableSummary;\n\nexport { TableInner };\n\nexport default Table;\n"],"mappings":"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"}
@@ -21,13 +21,20 @@ const measureSides = (rows) => {
21
21
  const collectRails = (table) => {
22
22
  const rails = [];
23
23
  const own = (el) => el.closest(p) === table;
24
+ const ownMatch = (selector) => Array.from(table.querySelectorAll(selector)).some((el) => own(el));
25
+ if (ownMatch(`${p}-placeholder`) || ownMatch("[data-table-skeleton]")) return rails;
26
+ const showStart = table.classList.contains(`${PREFIX_CLS}-fix-start-shadow-show`);
27
+ const showEnd = table.classList.contains(`${PREFIX_CLS}-fix-end-shadow-show`);
28
+ if (!showStart && !showEnd) return rails;
24
29
  const hosts = table.querySelectorAll(`${p}-content, ${p}-header, ${p}-body, ${p}-tbody-virtual-holder-inner`);
25
30
  for (const host of Array.from(hosts)) {
26
31
  if (!own(host)) continue;
27
32
  if (host.closest(`${p}-sticky-holder`)) continue;
28
33
  if (host.classList.contains(`lobe-table-tbody-virtual-holder-inner`)) {
29
34
  const rows = Array.from(host.querySelectorAll(`${p}-row`)).filter((el) => own(el) && !el.classList.contains(`lobe-table-row-extra`));
30
- const { start, end } = measureSides(rows.slice(0, 3));
35
+ const measured = measureSides(rows.slice(0, 3));
36
+ const start = showStart ? measured.start : 0;
37
+ const end = showEnd ? measured.end : 0;
31
38
  if (start || end) rails.push({
32
39
  end,
33
40
  fill: true,
@@ -41,7 +48,9 @@ const collectRails = (table) => {
41
48
  const tableEl = host.querySelector(":scope > table");
42
49
  if (!tableEl) continue;
43
50
  const rows = Array.from(tableEl.querySelectorAll(":scope > thead > tr, :scope > tbody > tr")).filter((row) => !row.classList.contains(`${PREFIX_CLS}-measure-row`)).slice(0, 6);
44
- const { start, end } = measureSides(rows);
51
+ const measured = measureSides(rows);
52
+ const start = showStart ? measured.start : 0;
53
+ const end = showEnd ? measured.end : 0;
45
54
  if (!start && !end) continue;
46
55
  rails.push({
47
56
  end,
@@ -1 +1 @@
1
- {"version":3,"file":"FixedFrost.mjs","names":[],"sources":["../../../src/Table/render/FixedFrost.tsx"],"sourcesContent":["'use client';\n\nimport * as stylex from '@stylexjs/stylex';\nimport { memo, type RefObject, useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { PREFIX_CLS } from '../constants';\nimport { styles } from '../style';\n\nconst p = `.${PREFIX_CLS}`;\n\ninterface Rail {\n end: number;\n fill: boolean;\n height: number;\n host: HTMLElement;\n start: number;\n width: number;\n}\n\nconst px = (value: string) => Number.parseFloat(value) || 0;\n\nconst measureSides = (rows: Element[]) => {\n let start = 0;\n let end = 0;\n for (const row of rows) {\n for (const cell of Array.from(row.children) as HTMLElement[]) {\n if (cell.classList.contains(`${PREFIX_CLS}-cell-fix-start`)) {\n start = Math.max(\n start,\n px(cell.style.insetInlineStart || cell.style.left) + cell.offsetWidth,\n );\n } else if (cell.classList.contains(`${PREFIX_CLS}-cell-fix-end`)) {\n end = Math.max(end, px(cell.style.insetInlineEnd || cell.style.right) + cell.offsetWidth);\n }\n }\n }\n return { end: Math.round(end), start: Math.round(start) };\n};\n\nconst collectRails = (table: HTMLElement): Rail[] => {\n const rails: Rail[] = [];\n const own = (el: Element) => el.closest(p) === table;\n const hosts = table.querySelectorAll<HTMLElement>(\n `${p}-content, ${p}-header, ${p}-body, ${p}-tbody-virtual-holder-inner`,\n );\n\n for (const host of Array.from(hosts)) {\n if (!own(host)) continue;\n // A sticky header is one element and blurs itself in CSS.\n if (host.closest(`${p}-sticky-holder`)) continue;\n\n if (host.classList.contains(`${PREFIX_CLS}-tbody-virtual-holder-inner`)) {\n const rows = Array.from(host.querySelectorAll(`${p}-row`)).filter(\n (el) => own(el) && !el.classList.contains(`${PREFIX_CLS}-row-extra`),\n );\n const { start, end } = measureSides(rows.slice(0, 3));\n if (start || end) rails.push({ end, fill: true, height: 0, host, start, width: 0 });\n continue;\n }\n\n const tableEl = host.querySelector<HTMLTableElement>(':scope > table');\n if (!tableEl) continue;\n const rows = Array.from(tableEl.querySelectorAll(':scope > thead > tr, :scope > tbody > tr'))\n .filter((row) => !row.classList.contains(`${PREFIX_CLS}-measure-row`))\n .slice(0, 6);\n const { start, end } = measureSides(rows);\n if (!start && !end) continue;\n rails.push({\n end,\n fill: false,\n height: tableEl.offsetHeight,\n host,\n start,\n width: tableEl.offsetWidth,\n });\n }\n return rails;\n};\n\nconst sameRails = (a: Rail[], b: Rail[]) =>\n a.length === b.length &&\n a.every(\n (rail, i) =>\n rail.host === b[i].host &&\n rail.start === b[i].start &&\n rail.end === b[i].end &&\n rail.width === b[i].width &&\n rail.height === b[i].height,\n );\n\n// A per-cell backdrop-filter blurs each box on its own and shows seams at every row, so\n// each scroll host gets one rail holding a sticky pane per fixed side instead.\nconst FixedFrost = memo<{ rootRef: RefObject<HTMLElement | null> }>(({ rootRef }) => {\n const [rails, setRails] = useState<Rail[]>([]);\n\n // Passive effect: the root ref belongs to an ancestor and is attached after this\n // child's layout effects, so a layout effect would see it as null on mount.\n useEffect(() => {\n const root = rootRef.current;\n if (!root) return;\n let frame = 0;\n\n const update = () => {\n frame = 0;\n const table = root.querySelector<HTMLElement>(p);\n const next = table ? collectRails(table) : [];\n for (const rail of next) {\n if (!rail.fill && getComputedStyle(rail.host).position === 'static') {\n rail.host.style.position = 'relative';\n }\n }\n setRails((prev) => (sameRails(prev, next) ? prev : next));\n };\n const schedule = () => {\n if (!frame) frame = requestAnimationFrame(update);\n };\n\n update();\n // Consumers render Table in jsdom without a ResizeObserver polyfill.\n const resize = typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(schedule);\n resize?.observe(root);\n const mutation = new MutationObserver((records) => {\n if (records.every((r) => (r.target as Element).closest?.('[data-table-frost]'))) return;\n schedule();\n });\n mutation.observe(root, { attributeFilter: ['class', 'style'], childList: true, subtree: true });\n\n return () => {\n if (frame) cancelAnimationFrame(frame);\n resize?.disconnect();\n mutation.disconnect();\n };\n }, [rootRef]);\n\n return (\n <>\n {rails.map((rail, i) =>\n createPortal(\n <div\n aria-hidden\n data-table-frost=\"\"\n {...stylex.props(styles.frostRail)}\n style={rail.fill ? { inset: 0 } : { height: rail.height, width: rail.width }}\n >\n {rail.start > 0 && (\n <div {...stylex.props(styles.frostStart)} style={{ width: rail.start }} />\n )}\n {rail.end > 0 && <div {...stylex.props(styles.frostEnd)} style={{ width: rail.end }} />}\n </div>,\n rail.host,\n `frost-${i}`,\n ),\n )}\n </>\n );\n});\n\nFixedFrost.displayName = 'TableFixedFrost';\n\nexport default FixedFrost;\n"],"mappings":"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"}
1
+ {"version":3,"file":"FixedFrost.mjs","names":[],"sources":["../../../src/Table/render/FixedFrost.tsx"],"sourcesContent":["'use client';\n\nimport * as stylex from '@stylexjs/stylex';\nimport { memo, type RefObject, useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { PREFIX_CLS } from '../constants';\nimport { styles } from '../style';\n\nconst p = `.${PREFIX_CLS}`;\n\ninterface Rail {\n end: number;\n fill: boolean;\n height: number;\n host: HTMLElement;\n start: number;\n width: number;\n}\n\nconst px = (value: string) => Number.parseFloat(value) || 0;\n\nconst measureSides = (rows: Element[]) => {\n let start = 0;\n let end = 0;\n for (const row of rows) {\n for (const cell of Array.from(row.children) as HTMLElement[]) {\n if (cell.classList.contains(`${PREFIX_CLS}-cell-fix-start`)) {\n start = Math.max(\n start,\n px(cell.style.insetInlineStart || cell.style.left) + cell.offsetWidth,\n );\n } else if (cell.classList.contains(`${PREFIX_CLS}-cell-fix-end`)) {\n end = Math.max(end, px(cell.style.insetInlineEnd || cell.style.right) + cell.offsetWidth);\n }\n }\n }\n return { end: Math.round(end), start: Math.round(start) };\n};\n\nconst collectRails = (table: HTMLElement): Rail[] => {\n const rails: Rail[] = [];\n const own = (el: Element) => el.closest(p) === table;\n const ownMatch = (selector: string) =>\n Array.from(table.querySelectorAll(selector)).some((el) => own(el));\n\n // Empty / skeleton body: the placeholder row spans every column, so there is nothing fixed\n // in the body and nothing scrolled under the fixed side; a rail would only blur the\n // skeleton and its row dividers.\n if (ownMatch(`${p}-placeholder`) || ownMatch('[data-table-skeleton]')) return rails;\n\n // useScrollSync flags the table with `*-shadow-show` exactly while content sits under a\n // fixed side; at rest the transparent fixed cells cover nothing.\n const showStart = table.classList.contains(`${PREFIX_CLS}-fix-start-shadow-show`);\n const showEnd = table.classList.contains(`${PREFIX_CLS}-fix-end-shadow-show`);\n if (!showStart && !showEnd) return rails;\n const hosts = table.querySelectorAll<HTMLElement>(\n `${p}-content, ${p}-header, ${p}-body, ${p}-tbody-virtual-holder-inner`,\n );\n\n for (const host of Array.from(hosts)) {\n if (!own(host)) continue;\n // A sticky header is one element and blurs itself in CSS.\n if (host.closest(`${p}-sticky-holder`)) continue;\n\n if (host.classList.contains(`${PREFIX_CLS}-tbody-virtual-holder-inner`)) {\n const rows = Array.from(host.querySelectorAll(`${p}-row`)).filter(\n (el) => own(el) && !el.classList.contains(`${PREFIX_CLS}-row-extra`),\n );\n const measured = measureSides(rows.slice(0, 3));\n const start = showStart ? measured.start : 0;\n const end = showEnd ? measured.end : 0;\n if (start || end) rails.push({ end, fill: true, height: 0, host, start, width: 0 });\n continue;\n }\n\n const tableEl = host.querySelector<HTMLTableElement>(':scope > table');\n if (!tableEl) continue;\n const rows = Array.from(tableEl.querySelectorAll(':scope > thead > tr, :scope > tbody > tr'))\n .filter((row) => !row.classList.contains(`${PREFIX_CLS}-measure-row`))\n .slice(0, 6);\n const measured = measureSides(rows);\n const start = showStart ? measured.start : 0;\n const end = showEnd ? measured.end : 0;\n if (!start && !end) continue;\n rails.push({\n end,\n fill: false,\n height: tableEl.offsetHeight,\n host,\n start,\n width: tableEl.offsetWidth,\n });\n }\n return rails;\n};\n\nconst sameRails = (a: Rail[], b: Rail[]) =>\n a.length === b.length &&\n a.every(\n (rail, i) =>\n rail.host === b[i].host &&\n rail.start === b[i].start &&\n rail.end === b[i].end &&\n rail.width === b[i].width &&\n rail.height === b[i].height,\n );\n\n// A per-cell backdrop-filter blurs each box on its own and shows seams at every row, so\n// each scroll host gets one rail holding a sticky pane per fixed side instead. A side is only\n// frosted while content is scrolled under it and never over an empty / skeleton body, so row\n// dividers stay continuous through fixed columns.\nconst FixedFrost = memo<{ rootRef: RefObject<HTMLElement | null> }>(({ rootRef }) => {\n const [rails, setRails] = useState<Rail[]>([]);\n\n // Passive effect: the root ref belongs to an ancestor and is attached after this\n // child's layout effects, so a layout effect would see it as null on mount.\n useEffect(() => {\n const root = rootRef.current;\n if (!root) return;\n let frame = 0;\n\n const update = () => {\n frame = 0;\n const table = root.querySelector<HTMLElement>(p);\n const next = table ? collectRails(table) : [];\n for (const rail of next) {\n if (!rail.fill && getComputedStyle(rail.host).position === 'static') {\n rail.host.style.position = 'relative';\n }\n }\n setRails((prev) => (sameRails(prev, next) ? prev : next));\n };\n const schedule = () => {\n if (!frame) frame = requestAnimationFrame(update);\n };\n\n update();\n // Consumers render Table in jsdom without a ResizeObserver polyfill.\n const resize = typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(schedule);\n resize?.observe(root);\n const mutation = new MutationObserver((records) => {\n if (records.every((r) => (r.target as Element).closest?.('[data-table-frost]'))) return;\n schedule();\n });\n mutation.observe(root, { attributeFilter: ['class', 'style'], childList: true, subtree: true });\n\n return () => {\n if (frame) cancelAnimationFrame(frame);\n resize?.disconnect();\n mutation.disconnect();\n };\n }, [rootRef]);\n\n return (\n <>\n {rails.map((rail, i) =>\n createPortal(\n <div\n aria-hidden\n data-table-frost=\"\"\n {...stylex.props(styles.frostRail)}\n style={rail.fill ? { inset: 0 } : { height: rail.height, width: rail.width }}\n >\n {rail.start > 0 && (\n <div {...stylex.props(styles.frostStart)} style={{ width: rail.start }} />\n )}\n {rail.end > 0 && <div {...stylex.props(styles.frostEnd)} style={{ width: rail.end }} />}\n </div>,\n rail.host,\n `frost-${i}`,\n ),\n )}\n </>\n );\n});\n\nFixedFrost.displayName = 'TableFixedFrost';\n\nexport default FixedFrost;\n"],"mappings":"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"}
@@ -96,6 +96,8 @@ const styles = {
96
96
  frostEnd: {
97
97
  kUk6DE: "lb1okw0bk",
98
98
  k6WDB: "lb1jh03n0",
99
+ kT0f0o: "lb1b5hgzv",
100
+ kfmiAY: "lb13toaxh",
99
101
  kt4wiu: "lbtijo5x",
100
102
  keTefX: "lbvc5jky",
101
103
  kVAEAm: "lb7wzq59",
@@ -114,6 +116,8 @@ const styles = {
114
116
  frostStart: {
115
117
  kUk6DE: "lb1okw0bk",
116
118
  k6WDB: "lb1jh03n0",
119
+ kVL7Gh: "lb1k65923",
120
+ krdFHd: "lb1jyebuh",
117
121
  kLqNvP: "lb1o0tod",
118
122
  kVAEAm: "lb7wzq59",
119
123
  kZKoxP: "lb5yr21d",
@@ -1 +1 @@
1
- {"version":3,"file":"style.mjs","names":[],"sources":["../../src/Table/style.ts"],"sourcesContent":["import * as stylex from '@stylexjs/stylex';\n\nimport { cssVar } from '@/styles/stylex/cssVar.stylex';\n\nexport const styles = stylex.create({\n columnTitle: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n wordBreak: 'keep-all',\n minWidth: 0,\n },\n filterActive: {\n color: { 'default': cssVar.colorPrimary, ':hover': cssVar.colorPrimary },\n },\n filterButton: {\n flex: 'none',\n marginBlock: -4,\n },\n filterButtons: {\n gap: 8,\n paddingBlock: 7,\n paddingInline: 8,\n alignItems: 'center',\n borderBlockStartColor: cssVar.colorSplit,\n borderBlockStartStyle: 'solid',\n borderBlockStartWidth: 1,\n display: 'flex',\n justifyContent: 'space-between',\n },\n filterCheckAll: {\n paddingInline: 4,\n marginBlockEnd: 4,\n },\n filterDropdown: {\n display: 'flex',\n flexDirection: 'column',\n minWidth: 120,\n },\n filterEmpty: {\n paddingBlock: 16,\n paddingInline: 0,\n },\n filterGroup: {\n display: 'flex',\n flexDirection: 'column',\n },\n filterGroupTitle: {\n paddingBlock: 5,\n paddingInline: 8,\n color: cssVar.colorTextDescription,\n fontSize: 12,\n },\n filterItem: {\n borderRadius: cssVar.borderRadiusSM,\n paddingBlock: 5,\n paddingInline: 8,\n alignItems: 'center',\n backgroundColor: { 'default': null, ':hover': cssVar.colorFillTertiary },\n display: 'flex',\n whiteSpace: 'nowrap',\n },\n filterMenu: {\n padding: 4,\n overflow: 'auto',\n display: 'flex',\n flexDirection: 'column',\n maxHeight: 264,\n },\n filterPopup: {\n padding: 0,\n overflow: 'hidden',\n },\n filterSearch: {\n padding: 8,\n borderBlockEndColor: cssVar.colorSplit,\n borderBlockEndStyle: 'solid',\n borderBlockEndWidth: 1,\n },\n filterTree: {\n padding: 8,\n overflow: 'auto',\n maxHeight: 264,\n },\n frostEnd: {\n flex: 'none',\n backdropFilter: 'blur(16px)',\n insetInlineEnd: 0,\n marginInlineStart: 'auto',\n position: 'sticky',\n height: '100%',\n },\n // z-index 1: above scrolling cells (z auto), below fixed cells (z >= 2).\n frostRail: {\n display: 'flex',\n insetBlockStart: 0,\n insetInlineStart: 0,\n pointerEvents: 'none',\n position: 'absolute',\n zIndex: 1,\n },\n frostStart: {\n flex: 'none',\n backdropFilter: 'blur(16px)',\n insetInlineStart: 0,\n position: 'sticky',\n height: '100%',\n },\n headerInner: {\n gap: 6,\n alignItems: 'center',\n display: 'inline-flex',\n verticalAlign: 'middle',\n maxWidth: '100%',\n minWidth: 0,\n },\n loading: {\n inset: 0,\n gap: 8,\n alignItems: 'center',\n backgroundColor: `color-mix(in srgb, ${cssVar.colorBgContainer} 60%, transparent)`,\n color: cssVar.colorTextSecondary,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n position: 'absolute',\n },\n pagination: {\n marginBlock: 16,\n display: 'flex',\n },\n paginationCenter: {\n justifyContent: 'center',\n },\n paginationEnd: {\n justifyContent: 'flex-end',\n },\n paginationStart: {\n justifyContent: 'flex-start',\n },\n paginationTop: {\n marginBlockEnd: '16px',\n marginBlockStart: '0',\n },\n root: {\n minWidth: 0,\n },\n selection: {\n display: 'inline-flex',\n flexDirection: 'column',\n position: 'relative',\n verticalAlign: 'middle',\n },\n selectionExtra: {\n alignItems: 'center',\n display: 'flex',\n insetBlockStart: 0,\n marginInlineStart: '100%',\n paddingInlineStart: 2,\n position: 'absolute',\n zIndex: 1,\n height: '100%',\n },\n selectionRadioGroup: {\n display: 'inline-flex',\n verticalAlign: 'middle',\n },\n selectionTrigger: {\n flex: 'none',\n marginBlock: -4,\n },\n skeleton: {\n display: 'flex',\n flexDirection: 'column',\n textAlign: 'start',\n minWidth: 0,\n width: '100%',\n },\n skeletonCell: {\n paddingBlock: 'var(--lobe-table-padding-block)',\n paddingInline: 'var(--lobe-table-padding-inline)',\n alignItems: 'center',\n display: 'flex',\n minWidth: 0,\n },\n skeletonRow: {\n alignItems: 'stretch',\n borderBlockEndColor: `var(--lobe-fill-border, ${cssVar.colorFill})`,\n borderBlockEndStyle: 'solid',\n borderBlockEndWidth: { 'default': 1, ':last-child': 0 },\n display: 'grid',\n minWidth: 0,\n width: '100%',\n },\n sortButton: {\n gap: 4,\n alignItems: 'center',\n display: 'inline-flex',\n maxWidth: '100%',\n minWidth: 0,\n },\n sortCaret: {\n flex: 'none',\n marginBlock: -4,\n },\n sortTitle: {\n cursor: 'pointer',\n minWidth: 0,\n },\n spinContainer: {\n position: 'relative',\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"style.mjs","names":[],"sources":["../../src/Table/style.ts"],"sourcesContent":["import * as stylex from '@stylexjs/stylex';\n\nimport { cssVar } from '@/styles/stylex/cssVar.stylex';\n\nexport const styles = stylex.create({\n columnTitle: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n wordBreak: 'keep-all',\n minWidth: 0,\n },\n filterActive: {\n color: { 'default': cssVar.colorPrimary, ':hover': cssVar.colorPrimary },\n },\n filterButton: {\n flex: 'none',\n marginBlock: -4,\n },\n filterButtons: {\n gap: 8,\n paddingBlock: 7,\n paddingInline: 8,\n alignItems: 'center',\n borderBlockStartColor: cssVar.colorSplit,\n borderBlockStartStyle: 'solid',\n borderBlockStartWidth: 1,\n display: 'flex',\n justifyContent: 'space-between',\n },\n filterCheckAll: {\n paddingInline: 4,\n marginBlockEnd: 4,\n },\n filterDropdown: {\n display: 'flex',\n flexDirection: 'column',\n minWidth: 120,\n },\n filterEmpty: {\n paddingBlock: 16,\n paddingInline: 0,\n },\n filterGroup: {\n display: 'flex',\n flexDirection: 'column',\n },\n filterGroupTitle: {\n paddingBlock: 5,\n paddingInline: 8,\n color: cssVar.colorTextDescription,\n fontSize: 12,\n },\n filterItem: {\n borderRadius: cssVar.borderRadiusSM,\n paddingBlock: 5,\n paddingInline: 8,\n alignItems: 'center',\n backgroundColor: { 'default': null, ':hover': cssVar.colorFillTertiary },\n display: 'flex',\n whiteSpace: 'nowrap',\n },\n filterMenu: {\n padding: 4,\n overflow: 'auto',\n display: 'flex',\n flexDirection: 'column',\n maxHeight: 264,\n },\n filterPopup: {\n padding: 0,\n overflow: 'hidden',\n },\n filterSearch: {\n padding: 8,\n borderBlockEndColor: cssVar.colorSplit,\n borderBlockEndStyle: 'solid',\n borderBlockEndWidth: 1,\n },\n filterTree: {\n padding: 8,\n overflow: 'auto',\n maxHeight: 264,\n },\n frostEnd: {\n flex: 'none',\n backdropFilter: 'blur(16px)',\n borderEndEndRadius: 'var(--lobe-table-radius-bottom, 0)',\n borderStartEndRadius: 'var(--lobe-table-radius-top, 0)',\n insetInlineEnd: 0,\n marginInlineStart: 'auto',\n position: 'sticky',\n height: '100%',\n },\n // z-index 1: above scrolling cells (z auto), below fixed cells (z >= 2).\n frostRail: {\n display: 'flex',\n insetBlockStart: 0,\n insetInlineStart: 0,\n pointerEvents: 'none',\n position: 'absolute',\n zIndex: 1,\n },\n frostStart: {\n flex: 'none',\n backdropFilter: 'blur(16px)',\n borderEndStartRadius: 'var(--lobe-table-radius-bottom, 0)',\n borderStartStartRadius: 'var(--lobe-table-radius-top, 0)',\n insetInlineStart: 0,\n position: 'sticky',\n height: '100%',\n },\n headerInner: {\n gap: 6,\n alignItems: 'center',\n display: 'inline-flex',\n verticalAlign: 'middle',\n maxWidth: '100%',\n minWidth: 0,\n },\n loading: {\n inset: 0,\n gap: 8,\n alignItems: 'center',\n backgroundColor: `color-mix(in srgb, ${cssVar.colorBgContainer} 60%, transparent)`,\n color: cssVar.colorTextSecondary,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n position: 'absolute',\n },\n pagination: {\n marginBlock: 16,\n display: 'flex',\n },\n paginationCenter: {\n justifyContent: 'center',\n },\n paginationEnd: {\n justifyContent: 'flex-end',\n },\n paginationStart: {\n justifyContent: 'flex-start',\n },\n paginationTop: {\n marginBlockEnd: '16px',\n marginBlockStart: '0',\n },\n root: {\n minWidth: 0,\n },\n selection: {\n display: 'inline-flex',\n flexDirection: 'column',\n position: 'relative',\n verticalAlign: 'middle',\n },\n selectionExtra: {\n alignItems: 'center',\n display: 'flex',\n insetBlockStart: 0,\n marginInlineStart: '100%',\n paddingInlineStart: 2,\n position: 'absolute',\n zIndex: 1,\n height: '100%',\n },\n selectionRadioGroup: {\n display: 'inline-flex',\n verticalAlign: 'middle',\n },\n selectionTrigger: {\n flex: 'none',\n marginBlock: -4,\n },\n skeleton: {\n display: 'flex',\n flexDirection: 'column',\n textAlign: 'start',\n minWidth: 0,\n width: '100%',\n },\n skeletonCell: {\n paddingBlock: 'var(--lobe-table-padding-block)',\n paddingInline: 'var(--lobe-table-padding-inline)',\n alignItems: 'center',\n display: 'flex',\n minWidth: 0,\n },\n skeletonRow: {\n alignItems: 'stretch',\n borderBlockEndColor: `var(--lobe-fill-border, ${cssVar.colorFill})`,\n borderBlockEndStyle: 'solid',\n borderBlockEndWidth: { 'default': 1, ':last-child': 0 },\n display: 'grid',\n minWidth: 0,\n width: '100%',\n },\n sortButton: {\n gap: 4,\n alignItems: 'center',\n display: 'inline-flex',\n maxWidth: '100%',\n minWidth: 0,\n },\n sortCaret: {\n flex: 'none',\n marginBlock: -4,\n },\n sortTitle: {\n cursor: 'pointer',\n minWidth: 0,\n },\n spinContainer: {\n position: 'relative',\n },\n});\n"],"mappings":"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"}
@@ -5,8 +5,8 @@ export declare const tabsStyles: {
5
5
  panel: string;
6
6
  tab: string;
7
7
  list: string;
8
- root: string;
9
8
  indicator: string;
9
+ root: string;
10
10
  indicatorPoint: string;
11
11
  indicatorRounded: string;
12
12
  indicatorSquare: string;
@@ -14,13 +14,13 @@ export declare const textStyles: {
14
14
  text: string;
15
15
  disabled: string;
16
16
  danger: string;
17
+ success: string;
18
+ warning: string;
19
+ info: string;
17
20
  delete: string;
18
21
  ellipsis: string;
19
22
  italic: string;
20
23
  underline: string;
21
- success: string;
22
- warning: string;
23
- info: string;
24
24
  ellipsisMulti: string;
25
25
  secondary: string;
26
26
  };
@@ -1,4 +1,5 @@
1
1
  import { ColorScaleItem } from "./types.mjs";
2
+ import { StatusColorScales, statusColorScales } from "./status/index.mjs";
2
3
  import blueGeekblueMix from "./colors/blue.mjs";
3
4
  import cyan from "./colors/cyan.mjs";
4
5
  import geekblue from "./colors/geekblue.mjs";
@@ -22,4 +23,4 @@ import sage from "./neutrals/sage.mjs";
22
23
  import sand from "./neutrals/sand.mjs";
23
24
  import slate from "./neutrals/slate.mjs";
24
25
  import { NeutralColorScales, neutralColorScales } from "./neutrals/index.mjs";
25
- export { type ColorScaleItem, ColorScales, type ColorScalesProps, ColorScales$1 as CssVar, NeutralColorScales, blueGeekblueMix as blue, colorScales, colorScales as colors, cyan, geekblue, gold, gray, green, lime, magenta, mauve, neutralColorScales, neutralColorScales as neutrals, olive, orange, primary, purple, red, sage, sand, slate, volcano, yellow };
26
+ export { type ColorScaleItem, ColorScales, type ColorScalesProps, ColorScales$1 as CssVar, NeutralColorScales, type StatusColorScales, blueGeekblueMix as blue, colorScales, colorScales as colors, cyan, geekblue, gold, gray, green, lime, magenta, mauve, neutralColorScales, neutralColorScales as neutrals, olive, orange, primary, purple, red, sage, sand, slate, statusColorScales, volcano, yellow };
@@ -1,3 +1,4 @@
1
+ import { statusColorScales } from "./status/index.mjs";
1
2
  import blueGeekblueMix from "./colors/blue.mjs";
2
3
  import cyan from "./colors/cyan.mjs";
3
4
  import geekblue from "./colors/geekblue.mjs";
@@ -21,4 +22,4 @@ import slate from "./neutrals/slate.mjs";
21
22
  import { neutralColorScales } from "./neutrals/index.mjs";
22
23
  import ColorScales from "./ColorScales/index.mjs";
23
24
  import ColorScales$1 from "./CssVar/index.mjs";
24
- export { ColorScales, ColorScales$1 as CssVar, blueGeekblueMix as blue, colorScales, colorScales as colors, cyan, geekblue, gold, gray, green, lime, magenta, mauve, neutralColorScales, neutralColorScales as neutrals, olive, orange, primary, purple, red, sage, sand, slate, volcano, yellow };
25
+ export { ColorScales, ColorScales$1 as CssVar, blueGeekblueMix as blue, colorScales, colorScales as colors, cyan, geekblue, gold, gray, green, lime, magenta, mauve, neutralColorScales, neutralColorScales as neutrals, olive, orange, primary, purple, red, sage, sand, slate, statusColorScales, volcano, yellow };
@@ -0,0 +1,11 @@
1
+ import { ColorScaleItem } from "../types.mjs";
2
+ //#region src/color/status/index.d.ts
3
+ export interface StatusColorScales {
4
+ error: ColorScaleItem;
5
+ info: ColorScaleItem;
6
+ success: ColorScaleItem;
7
+ warning: ColorScaleItem;
8
+ }
9
+ export declare const statusColorScales: StatusColorScales;
10
+ //#endregion
11
+ //# sourceMappingURL=index.d.mts.map