@skygraph/react 0.6.4 → 0.6.6
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.
- package/README.md +70 -70
- package/dist/{Table-CMKo6Pc3.d.cts → Table-Bhlshbs2.d.cts} +39 -0
- package/dist/{Table-CAay8MmA.d.ts → Table-DOGK_njf.d.ts} +39 -0
- package/dist/{chunk-Y6XZ5TLD.js → chunk-B6BK5B64.js} +3 -3
- package/dist/chunk-B6BK5B64.js.map +1 -0
- package/dist/{chunk-PEX2UTNG.js → chunk-EA2J67A4.js} +2 -2
- package/dist/chunk-EA2J67A4.js.map +1 -0
- package/dist/{chunk-BNMJSYI2.js → chunk-EWUB2QCP.js} +2 -2
- package/dist/chunk-EWUB2QCP.js.map +1 -0
- package/dist/{chunk-7AA2JPZB.js → chunk-G4MRXKGC.js} +21 -14
- package/dist/chunk-G4MRXKGC.js.map +1 -0
- package/dist/{chunk-EFDB2ENB.js → chunk-MTHPDCO3.js} +8 -6
- package/dist/chunk-MTHPDCO3.js.map +1 -0
- package/dist/{chunk-KGFFQGCM.js → chunk-N4S66XHX.js} +8 -4
- package/dist/chunk-N4S66XHX.js.map +1 -0
- package/dist/{chunk-SEQI65CF.js → chunk-U7BXGUMC.js} +1 -1
- package/dist/chunk-U7BXGUMC.js.map +1 -0
- package/dist/{chunk-45YW5VSP.js → chunk-UCCGEZPJ.js} +2 -2
- package/dist/chunk-UCCGEZPJ.js.map +1 -0
- package/dist/{chunk-VLRLCHEL.js → chunk-YJZKXU5O.js} +1 -1
- package/dist/chunk-YJZKXU5O.js.map +1 -0
- package/dist/{chunk-ZJC2QUWA.js → chunk-YWCL3MUL.js} +1 -1
- package/dist/chunk-YWCL3MUL.js.map +1 -0
- package/dist/datagrid.cjs +3 -4
- package/dist/datagrid.cjs.map +1 -1
- package/dist/datagrid.js +4 -4
- package/dist/devtools.cjs.map +1 -1
- package/dist/devtools.js +1 -1
- package/dist/form.cjs.map +1 -1
- package/dist/form.js +3 -3
- package/dist/index.cjs +1239 -255
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +16 -4
- package/dist/index.d.ts +16 -4
- package/dist/index.js +1113 -150
- package/dist/index.js.map +1 -1
- package/dist/table.cjs +17 -10
- package/dist/table.cjs.map +1 -1
- package/dist/table.d.cts +1 -1
- package/dist/table.d.ts +1 -1
- package/dist/table.js +4 -4
- package/dist/tree.cjs +11 -7
- package/dist/tree.cjs.map +1 -1
- package/dist/tree.js +3 -3
- package/dist/virtual.cjs.map +1 -1
- package/dist/virtual.js +2 -2
- package/package.json +2 -2
- package/dist/chunk-45YW5VSP.js.map +0 -1
- package/dist/chunk-7AA2JPZB.js.map +0 -1
- package/dist/chunk-BNMJSYI2.js.map +0 -1
- package/dist/chunk-EFDB2ENB.js.map +0 -1
- package/dist/chunk-KGFFQGCM.js.map +0 -1
- package/dist/chunk-PEX2UTNG.js.map +0 -1
- package/dist/chunk-SEQI65CF.js.map +0 -1
- package/dist/chunk-VLRLCHEL.js.map +0 -1
- package/dist/chunk-Y6XZ5TLD.js.map +0 -1
- package/dist/chunk-ZJC2QUWA.js.map +0 -1
package/dist/tree.js
CHANGED
|
@@ -2,9 +2,9 @@ import {
|
|
|
2
2
|
Tree,
|
|
3
3
|
TreeSelect,
|
|
4
4
|
useTree
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-N4S66XHX.js";
|
|
6
|
+
import "./chunk-EA2J67A4.js";
|
|
7
|
+
import "./chunk-YJZKXU5O.js";
|
|
8
8
|
export {
|
|
9
9
|
Tree,
|
|
10
10
|
TreeSelect,
|
package/dist/virtual.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/virtual.ts","../src/hooks/useVirtualScroll.ts","../src/components/complex/VirtualList/VirtualList.tsx"],"sourcesContent":["export { useVirtualScroll } from './hooks/useVirtualScroll'\nexport type { UseVirtualScrollOptions, UseVirtualScrollReturn } from './hooks/useVirtualScroll'\nexport { VirtualList } from './components/complex/VirtualList/VirtualList'\nexport type { VirtualListProps, VirtualListRef } from './components/complex/VirtualList/VirtualList'\n","import { useState, useCallback, useRef, useEffect, useMemo } from 'react'\nimport { createVirtual } from '@skygraph/core'\nimport type { VirtualEngine, VirtualRange } from '@skygraph/core'\n\nexport interface UseVirtualScrollOptions {\n itemCount: number\n itemHeight: number | ((index: number) => number)\n overscan?: number\n}\n\nexport interface UseVirtualScrollReturn {\n range: VirtualRange\n containerRef: React.RefObject<HTMLElement | null>\n scrollToIndex: (index: number, align?: 'start' | 'center' | 'end') => void\n engine: VirtualEngine\n}\n\nexport function useVirtualScroll(options: UseVirtualScrollOptions): UseVirtualScrollReturn {\n const containerRef = useRef<HTMLElement | null>(null)\n const engineRef = useRef<VirtualEngine | null>(null)\n\n if (!engineRef.current) {\n engineRef.current = createVirtual({\n itemCount: options.itemCount,\n itemHeight: options.itemHeight,\n overscan: options.overscan,\n })\n }\n\n const engine = engineRef.current\n\n useEffect(() => {\n engine.setItemCount(options.itemCount)\n }, [engine, options.itemCount])\n\n useEffect(() => {\n engine.setItemHeight(options.itemHeight)\n }, [engine, options.itemHeight])\n\n const [range, setRange] = useState<VirtualRange>(() =>\n engine.getRange(0, 0),\n )\n\n const recalc = useCallback(() => {\n const el = containerRef.current\n if (!el) return\n setRange(engine.getRange(el.scrollTop, el.clientHeight))\n }, [engine])\n\n useEffect(() => {\n const el = containerRef.current\n if (!el) return\n\n recalc()\n\n el.addEventListener('scroll', recalc, { passive: true })\n const ro = new ResizeObserver(recalc)\n ro.observe(el)\n\n return () => {\n el.removeEventListener('scroll', recalc)\n ro.disconnect()\n }\n }, [recalc])\n\n useEffect(() => {\n recalc()\n }, [options.itemCount, recalc])\n\n const scrollToIndex = useCallback(\n (index: number, align: 'start' | 'center' | 'end' = 'start') => {\n const el = containerRef.current\n if (!el) return\n el.scrollTop = engine.scrollToIndex(index, el.clientHeight, align)\n },\n [engine],\n )\n\n return useMemo(\n () => ({ range, containerRef, scrollToIndex, engine }),\n [range, scrollToIndex, engine],\n )\n}\n","import React, { forwardRef, useImperativeHandle } from 'react'\nimport { useVirtualScroll } from '../../../hooks/useVirtualScroll'\nimport type { VirtualItem } from '@skygraph/core'\n\n/** Props for the virtualized fixed-height item list. */\nexport interface VirtualListProps<T = unknown> {\n /** Full dataset; only visible indices are rendered. */\n data: T[]\n /** Fixed row height or per-index height resolver in pixels. */\n itemHeight: number | ((index: number) => number)\n /** Extra rows rendered above and below the viewport. */\n overscan?: number\n /** Renders one item with absolute positioning styles applied by the list. */\n renderItem: (item: T, index: number, style: React.CSSProperties) => React.ReactNode\n /** Scrolling container class name. */\n className?: string\n /** Scrolling container inline style. */\n style?: React.CSSProperties\n /** Stable React key for each item; defaults to row index. */\n itemKey?: (item: T, index: number) => React.Key\n}\n\n/** Imperative API for `VirtualList`. */\nexport interface VirtualListRef {\n /**\n * Scrolls so the item at `index` is visible.\n * @param align - Where to place the item in the viewport.\n */\n scrollToIndex: (index: number, align?: 'start' | 'center' | 'end') => void\n}\n\nfunction VirtualListInner<T>(\n props: VirtualListProps<T>,\n ref: React.ForwardedRef<VirtualListRef>,\n) {\n const {\n data,\n itemHeight,\n overscan,\n renderItem,\n className,\n style,\n itemKey,\n } = props\n\n const { range, containerRef, scrollToIndex } = useVirtualScroll({\n itemCount: data.length,\n itemHeight,\n overscan,\n })\n\n useImperativeHandle(ref, () => ({ scrollToIndex }), [scrollToIndex])\n\n return (\n <div\n ref={containerRef as React.RefObject<HTMLDivElement>}\n className={className}\n style={{\n overflow: 'auto',\n position: 'relative',\n ...style,\n }}\n >\n <div style={{ height: range.totalHeight, position: 'relative' }}>\n {range.visibleItems.map((vi: VirtualItem) => {\n const item = data[vi.index]\n const key = itemKey ? itemKey(item, vi.index) : vi.index\n const itemStyle: React.CSSProperties = {\n position: 'absolute',\n top: vi.offsetTop,\n left: 0,\n right: 0,\n height: vi.height,\n }\n return (\n <React.Fragment key={key}>\n {renderItem(item, vi.index, itemStyle)}\n </React.Fragment>\n )\n })}\n </div>\n </div>\n )\n}\n\n/**\n * Virtualized scroll container: mounts row content only for items near the viewport.\n * Forwards a ref with `scrollToIndex` for programmatic scrolling.\n */\nexport const VirtualList = forwardRef(VirtualListInner) as <T>(\n props: VirtualListProps<T> & { ref?: React.Ref<VirtualListRef> },\n) => React.ReactElement\n"],"mappings":"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","names":["import_react","React"]}
|
|
1
|
+
{"version":3,"sources":["../src/virtual.ts","../src/hooks/useVirtualScroll.ts","../src/components/complex/VirtualList/VirtualList.tsx"],"sourcesContent":["export { useVirtualScroll } from './hooks/useVirtualScroll'\r\nexport type { UseVirtualScrollOptions, UseVirtualScrollReturn } from './hooks/useVirtualScroll'\r\nexport { VirtualList } from './components/complex/VirtualList/VirtualList'\r\nexport type { VirtualListProps, VirtualListRef } from './components/complex/VirtualList/VirtualList'\r\n","import { useState, useCallback, useRef, useEffect, useMemo } from 'react'\r\nimport { createVirtual } from '@skygraph/core'\r\nimport type { VirtualEngine, VirtualRange } from '@skygraph/core'\r\n\r\nexport interface UseVirtualScrollOptions {\r\n itemCount: number\r\n itemHeight: number | ((index: number) => number)\r\n overscan?: number\r\n}\r\n\r\nexport interface UseVirtualScrollReturn {\r\n range: VirtualRange\r\n containerRef: React.RefObject<HTMLElement | null>\r\n scrollToIndex: (index: number, align?: 'start' | 'center' | 'end') => void\r\n engine: VirtualEngine\r\n}\r\n\r\nexport function useVirtualScroll(options: UseVirtualScrollOptions): UseVirtualScrollReturn {\r\n const containerRef = useRef<HTMLElement | null>(null)\r\n const engineRef = useRef<VirtualEngine | null>(null)\r\n\r\n if (!engineRef.current) {\r\n engineRef.current = createVirtual({\r\n itemCount: options.itemCount,\r\n itemHeight: options.itemHeight,\r\n overscan: options.overscan,\r\n })\r\n }\r\n\r\n const engine = engineRef.current\r\n\r\n useEffect(() => {\r\n engine.setItemCount(options.itemCount)\r\n }, [engine, options.itemCount])\r\n\r\n useEffect(() => {\r\n engine.setItemHeight(options.itemHeight)\r\n }, [engine, options.itemHeight])\r\n\r\n const [range, setRange] = useState<VirtualRange>(() =>\r\n engine.getRange(0, 0),\r\n )\r\n\r\n const recalc = useCallback(() => {\r\n const el = containerRef.current\r\n if (!el) return\r\n setRange(engine.getRange(el.scrollTop, el.clientHeight))\r\n }, [engine])\r\n\r\n useEffect(() => {\r\n const el = containerRef.current\r\n if (!el) return\r\n\r\n recalc()\r\n\r\n el.addEventListener('scroll', recalc, { passive: true })\r\n const ro = new ResizeObserver(recalc)\r\n ro.observe(el)\r\n\r\n return () => {\r\n el.removeEventListener('scroll', recalc)\r\n ro.disconnect()\r\n }\r\n }, [recalc])\r\n\r\n useEffect(() => {\r\n recalc()\r\n }, [options.itemCount, recalc])\r\n\r\n const scrollToIndex = useCallback(\r\n (index: number, align: 'start' | 'center' | 'end' = 'start') => {\r\n const el = containerRef.current\r\n if (!el) return\r\n el.scrollTop = engine.scrollToIndex(index, el.clientHeight, align)\r\n },\r\n [engine],\r\n )\r\n\r\n return useMemo(\r\n () => ({ range, containerRef, scrollToIndex, engine }),\r\n [range, scrollToIndex, engine],\r\n )\r\n}\r\n","import React, { forwardRef, useImperativeHandle } from 'react'\r\nimport { useVirtualScroll } from '../../../hooks/useVirtualScroll'\r\nimport type { VirtualItem } from '@skygraph/core'\r\n\r\n/** Props for the virtualized fixed-height item list. */\r\nexport interface VirtualListProps<T = unknown> {\r\n /** Full dataset; only visible indices are rendered. */\r\n data: T[]\r\n /** Fixed row height or per-index height resolver in pixels. */\r\n itemHeight: number | ((index: number) => number)\r\n /** Extra rows rendered above and below the viewport. */\r\n overscan?: number\r\n /** Renders one item with absolute positioning styles applied by the list. */\r\n renderItem: (item: T, index: number, style: React.CSSProperties) => React.ReactNode\r\n /** Scrolling container class name. */\r\n className?: string\r\n /** Scrolling container inline style. */\r\n style?: React.CSSProperties\r\n /** Stable React key for each item; defaults to row index. */\r\n itemKey?: (item: T, index: number) => React.Key\r\n}\r\n\r\n/** Imperative API for `VirtualList`. */\r\nexport interface VirtualListRef {\r\n /**\r\n * Scrolls so the item at `index` is visible.\r\n * @param align - Where to place the item in the viewport.\r\n */\r\n scrollToIndex: (index: number, align?: 'start' | 'center' | 'end') => void\r\n}\r\n\r\nfunction VirtualListInner<T>(\r\n props: VirtualListProps<T>,\r\n ref: React.ForwardedRef<VirtualListRef>,\r\n) {\r\n const {\r\n data,\r\n itemHeight,\r\n overscan,\r\n renderItem,\r\n className,\r\n style,\r\n itemKey,\r\n } = props\r\n\r\n const { range, containerRef, scrollToIndex } = useVirtualScroll({\r\n itemCount: data.length,\r\n itemHeight,\r\n overscan,\r\n })\r\n\r\n useImperativeHandle(ref, () => ({ scrollToIndex }), [scrollToIndex])\r\n\r\n return (\r\n <div\r\n ref={containerRef as React.RefObject<HTMLDivElement>}\r\n className={className}\r\n style={{\r\n overflow: 'auto',\r\n position: 'relative',\r\n ...style,\r\n }}\r\n >\r\n <div style={{ height: range.totalHeight, position: 'relative' }}>\r\n {range.visibleItems.map((vi: VirtualItem) => {\r\n const item = data[vi.index]\r\n const key = itemKey ? itemKey(item, vi.index) : vi.index\r\n const itemStyle: React.CSSProperties = {\r\n position: 'absolute',\r\n top: vi.offsetTop,\r\n left: 0,\r\n right: 0,\r\n height: vi.height,\r\n }\r\n return (\r\n <React.Fragment key={key}>\r\n {renderItem(item, vi.index, itemStyle)}\r\n </React.Fragment>\r\n )\r\n })}\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\n/**\r\n * Virtualized scroll container: mounts row content only for items near the viewport.\r\n * Forwards a ref with `scrollToIndex` for programmatic scrolling.\r\n */\r\nexport const VirtualList = forwardRef(VirtualListInner) as <T>(\r\n props: VirtualListProps<T> & { ref?: React.Ref<VirtualListRef> },\r\n) => React.ReactElement\r\n"],"mappings":"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","names":["import_react","React"]}
|
package/dist/virtual.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skygraph/react",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.6",
|
|
4
4
|
"description": "SkyGraph React adapter — hooks, components and UI",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
"skygraph"
|
|
73
73
|
],
|
|
74
74
|
"dependencies": {
|
|
75
|
-
"@skygraph/styles": "0.6.
|
|
75
|
+
"@skygraph/styles": "0.6.6"
|
|
76
76
|
},
|
|
77
77
|
"peerDependencies": {
|
|
78
78
|
"@skygraph/core": ">=0.1.0",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/ui/Input.tsx","../src/components/ui/Transition.tsx","../src/components/ui/Button.tsx"],"sourcesContent":["import React from 'react'\nimport { useConfig } from '../ConfigProvider'\nimport type { BaseComponentProps, InteractiveProps, SizableProps } from '../../types'\nimport { Spin } from './Spin'\n\n/** Props for the Input component. */\nexport interface InputProps extends BaseComponentProps, InteractiveProps, SizableProps {\n /** Controlled input value. */\n value?: string\n /** Uncontrolled initial value. */\n defaultValue?: string\n /** Placeholder text when the field is empty. */\n placeholder?: string\n /** Native HTML input type. @default 'text' */\n type?: 'text' | 'email' | 'password' | 'number'\n /**\n * Marks the field as read-only. The value is selectable and submitted\n * but cannot be edited. Sets the HTML `readonly` attribute,\n * `aria-readonly=\"true\"`, and adds the `sg-input-readonly` modifier class.\n * @default false\n */\n readOnly?: boolean\n /** DOM id forwarded to the underlying `<input>`. */\n id?: string\n /**\n * When true, renders a clear (×) button while the field has a value.\n * Disabled and read-only fields hide the button. @default false\n */\n allowClear?: boolean\n /**\n * Validation status badge. Adds `sg-input-wrapper-status-{status}` and\n * `sg-input-status-{status}` modifier classes and sets `aria-invalid` when\n * `error`.\n */\n status?: 'error' | 'warning'\n /** Optional content rendered before the `<input>` (e.g. icon). */\n prefix?: React.ReactNode\n /** Optional content rendered after the `<input>` (e.g. icon, unit). */\n suffix?: React.ReactNode\n /** Exposes invalid state to assistive technologies. */\n 'aria-invalid'?: boolean | 'false' | 'true' | 'grammar' | 'spelling'\n /** Marks the field as required for assistive technologies. */\n 'aria-required'?: boolean | 'false' | 'true'\n /** Connects the input to description / error nodes for assistive technologies. */\n 'aria-describedby'?: string\n /** Called when the text value changes. */\n onChange?: (value: string) => void\n /** Called when the input loses focus. */\n onBlur?: () => void\n /** Called when the input gains focus. */\n onFocus?: () => void\n /** Called when the user activates the built-in clear button. */\n onClear?: () => void\n}\n\n/** Single-line text input with optional loading indicator and configurable HTML type. */\nexport function Input({\n value,\n defaultValue,\n placeholder,\n type = 'text',\n readOnly = false,\n size: sizeProp,\n disabled: disabledProp,\n loading,\n allowClear = false,\n status,\n prefix,\n suffix,\n onChange,\n onBlur,\n onFocus,\n onClear,\n 'aria-invalid': ariaInvalid,\n 'aria-required': ariaRequired,\n 'aria-describedby': ariaDescribedBy,\n id,\n className,\n style,\n unstyled,\n}: InputProps) {\n const config = useConfig()\n const size = sizeProp ?? config.size ?? 'middle'\n const disabled = disabledProp ?? config.disabled ?? false\n\n const [internalValue, setInternalValue] = React.useState<string>(defaultValue ?? '')\n const currentValue = value ?? internalValue\n const isControlled = value !== undefined\n\n const wrapperClasses = unstyled\n ? (className ?? '')\n : [\n 'sg-input-wrapper',\n `sg-input-wrapper-${size}`,\n loading ? 'sg-input-wrapper-loading' : '',\n readOnly ? 'sg-input-wrapper-readonly' : '',\n status ? `sg-input-wrapper-status-${status}` : '',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const inputClasses = unstyled\n ? ''\n : [\n 'sg-input',\n `sg-input-${size}`,\n readOnly ? 'sg-input-readonly' : '',\n status ? `sg-input-status-${status}` : '',\n ]\n .filter(Boolean)\n .join(' ')\n\n const clearLabel = config.locale?.input?.clear ?? 'Clear'\n const showClear = allowClear && !disabled && !readOnly && !loading && currentValue !== ''\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) setInternalValue(e.target.value)\n onChange?.(e.target.value)\n }\n\n const handleClear = () => {\n if (!isControlled) setInternalValue('')\n onChange?.('')\n onClear?.()\n }\n\n const resolvedAriaInvalid = ariaInvalid ?? (status === 'error' ? true : undefined)\n\n return (\n <span className={wrapperClasses} style={style}>\n {prefix && <span className=\"sg-input-prefix\">{prefix}</span>}\n <input\n id={id}\n type={type}\n className={inputClasses}\n value={currentValue}\n placeholder={placeholder}\n disabled={disabled || loading}\n readOnly={readOnly}\n aria-invalid={resolvedAriaInvalid}\n aria-required={ariaRequired}\n aria-readonly={readOnly || undefined}\n aria-describedby={ariaDescribedBy}\n onChange={handleChange}\n onBlur={onBlur}\n onFocus={onFocus}\n />\n {showClear && (\n <button\n type=\"button\"\n className=\"sg-input-clear\"\n aria-label={clearLabel}\n onClick={handleClear}\n >\n ×\n </button>\n )}\n {loading && <Spin size=\"small\" unstyled={unstyled} />}\n {suffix && <span className=\"sg-input-suffix\">{suffix}</span>}\n </span>\n )\n}\n","import React, { useState, useEffect, useRef, useCallback } from 'react'\n\n/** Props for class-based enter/leave animation on a single child element. */\nexport interface TransitionProps {\n /** When `true`, runs enter; when `false`, runs leave (and may unmount). */\n visible: boolean\n /** Base class name prefix for default enter/leave classes (e.g. `sg-fade-enter-from`). @default 'sg-fade' */\n name?: string\n /** Animation length in ms before idle phase and after callbacks. @default 200 */\n duration?: number\n /** Custom initial class for the enter frame (with `-enter-active`). */\n enterFrom?: string\n /** Custom final class for the enter-active frame. */\n enterTo?: string\n /** Custom initial class for the leave frame (with `-leave-active`). */\n leaveFrom?: string\n /** Custom final class for the leave-active frame. */\n leaveTo?: string\n /** Fires once the enter transition timer completes. */\n onAfterEnter?: () => void\n /** Fires once the leave transition timer completes. */\n onAfterLeave?: () => void\n /** Single React element whose `className` will be merged with transition classes. */\n children: React.ReactElement<{ className?: string; ref?: React.Ref<HTMLElement> }>\n /** When `true`, removes the child from the tree after leave; when `false`, keeps it mounted. @default true */\n unmountOnExit?: boolean\n}\n\ntype Phase = 'idle' | 'enter' | 'enter-active' | 'leave' | 'leave-active'\n\n/**\n * Clones a single child and toggles CSS classes over `duration` when `visible` changes, optionally unmounting after leave.\n */\nexport function Transition({\n visible,\n name = 'sg-fade',\n duration = 200,\n enterFrom,\n enterTo,\n leaveFrom,\n leaveTo,\n onAfterEnter,\n onAfterLeave,\n children,\n unmountOnExit = true,\n}: TransitionProps) {\n const [mounted, setMounted] = useState(visible)\n const [phase, setPhase] = useState<Phase>(visible ? 'idle' : 'idle')\n const nodeRef = useRef<HTMLElement | null>(null)\n const timerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n const prevVisible = useRef(visible)\n\n const getEnterClasses = useCallback(() => {\n if (enterFrom && enterTo) return { from: enterFrom, active: `${name}-enter-active`, to: enterTo }\n return { from: `${name}-enter-from`, active: `${name}-enter-active`, to: `${name}-enter-to` }\n }, [name, enterFrom, enterTo])\n\n const getLeaveClasses = useCallback(() => {\n if (leaveFrom && leaveTo) return { from: leaveFrom, active: `${name}-leave-active`, to: leaveTo }\n return { from: `${name}-leave-from`, active: `${name}-leave-active`, to: `${name}-leave-to` }\n }, [name, leaveFrom, leaveTo])\n\n useEffect(() => {\n if (visible === prevVisible.current) return\n prevVisible.current = visible\n clearTimeout(timerRef.current)\n\n if (visible) {\n setMounted(true)\n setPhase('enter')\n requestAnimationFrame(() => {\n requestAnimationFrame(() => setPhase('enter-active'))\n })\n timerRef.current = setTimeout(() => {\n setPhase('idle')\n onAfterEnter?.()\n }, duration)\n } else {\n setPhase('leave')\n requestAnimationFrame(() => {\n requestAnimationFrame(() => setPhase('leave-active'))\n })\n timerRef.current = setTimeout(() => {\n setPhase('idle')\n if (unmountOnExit) setMounted(false)\n onAfterLeave?.()\n }, duration)\n }\n }, [visible, duration, unmountOnExit, onAfterEnter, onAfterLeave])\n\n useEffect(() => {\n return () => clearTimeout(timerRef.current)\n }, [])\n\n if (!mounted && unmountOnExit) return null\n\n const enterC = getEnterClasses()\n const leaveC = getLeaveClasses()\n\n let transitionClass = ''\n switch (phase) {\n case 'enter':\n transitionClass = `${enterC.from} ${enterC.active}`\n break\n case 'enter-active':\n transitionClass = `${enterC.to} ${enterC.active}`\n break\n case 'leave':\n transitionClass = `${leaveC.from} ${leaveC.active}`\n break\n case 'leave-active':\n transitionClass = `${leaveC.to} ${leaveC.active}`\n break\n }\n\n return React.cloneElement(children, {\n ref: nodeRef,\n className: [children.props.className, transitionClass].filter(Boolean).join(' '),\n })\n}\n","import React from 'react'\nimport { Spin } from './Spin'\nimport { useConfig } from '../ConfigProvider'\nimport type { BaseComponentProps, InteractiveProps, SizableProps } from '../../types'\n\n/** Props for the Button component. */\nexport interface ButtonProps extends BaseComponentProps, InteractiveProps, SizableProps {\n /** Visual style variant. @default 'default' */\n type?: 'default' | 'primary' | 'dashed' | 'text' | 'link'\n /** Native HTML button type attribute. @default 'button' */\n htmlType?: 'button' | 'submit' | 'reset'\n /**\n * Visually flags a destructive action. Combines with `type` (e.g. a\n * `danger` `primary` button is solid red, a `danger` `text` is red text).\n * Adds the `sg-button-danger` modifier class.\n * @default false\n */\n danger?: boolean\n /** Stretches the button to fill its parent container. @default false */\n block?: boolean\n /** Click event handler. */\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void\n /** Button content. */\n children?: React.ReactNode\n}\n\n/** General-purpose button with multiple visual variants, sizes, and loading state. */\nexport function Button({\n type = 'default',\n size: sizeProp,\n disabled: disabledProp,\n loading,\n htmlType = 'button',\n danger = false,\n block = false,\n onClick,\n children,\n className,\n style,\n unstyled,\n}: ButtonProps) {\n const config = useConfig()\n const size = sizeProp ?? config.size ?? 'middle'\n const disabled = disabledProp ?? config.disabled ?? false\n\n const classes = unstyled\n ? className ?? ''\n : [\n 'sg-button',\n `sg-button-${type}`,\n `sg-button-${size}`,\n danger ? 'sg-button-danger' : '',\n block ? 'sg-button-block' : '',\n loading ? 'sg-button-loading' : '',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <button\n type={htmlType}\n className={classes}\n style={style}\n disabled={disabled || loading}\n aria-disabled={disabled || loading}\n aria-busy={loading}\n onClick={onClick}\n >\n {loading && <Spin size=\"small\" unstyled={unstyled} />}\n {children}\n </button>\n )\n}\n"],"mappings":"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","names":["React","jsx","jsxs"]}
|