@proyecto-viviana/solid-stately 0.1.5 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{src → dist}/autocomplete/createAutocompleteState.d.ts +0 -1
- package/{src → dist}/autocomplete/index.d.ts +0 -1
- package/{src → dist}/calendar/createCalendarState.d.ts +0 -1
- package/{src → dist}/calendar/createDateFieldState.d.ts +0 -1
- package/{src → dist}/calendar/createRangeCalendarState.d.ts +0 -1
- package/{src → dist}/calendar/createTimeFieldState.d.ts +0 -1
- package/{src → dist}/calendar/index.d.ts +0 -1
- package/{src → dist}/checkbox/createCheckboxGroupState.d.ts +0 -1
- package/{src → dist}/checkbox/index.d.ts +0 -1
- package/{src → dist}/collections/ListCollection.d.ts +0 -1
- package/{src → dist}/collections/createListState.d.ts +0 -1
- package/{src → dist}/collections/createMenuState.d.ts +0 -1
- package/{src → dist}/collections/createSelectionState.d.ts +0 -1
- package/{src → dist}/collections/index.d.ts +0 -1
- package/{src → dist}/collections/types.d.ts +0 -1
- package/{src → dist}/color/Color.d.ts +0 -1
- package/{src → dist}/color/createColorAreaState.d.ts +0 -1
- package/{src → dist}/color/createColorFieldState.d.ts +0 -1
- package/{src → dist}/color/createColorSliderState.d.ts +0 -1
- package/{src → dist}/color/createColorWheelState.d.ts +0 -1
- package/{src → dist}/color/index.d.ts +0 -1
- package/{src → dist}/color/types.d.ts +0 -1
- package/{src → dist}/combobox/createComboBoxState.d.ts +0 -1
- package/{src → dist}/combobox/index.d.ts +0 -1
- package/{src → dist}/disclosure/createDisclosureState.d.ts +0 -1
- package/{src → dist}/disclosure/index.d.ts +0 -1
- package/{src → dist}/dnd/createDragState.d.ts +0 -1
- package/{src → dist}/dnd/createDraggableCollectionState.d.ts +0 -1
- package/{src → dist}/dnd/createDropState.d.ts +0 -1
- package/{src → dist}/dnd/createDroppableCollectionState.d.ts +0 -1
- package/{src → dist}/dnd/index.d.ts +0 -1
- package/{src → dist}/dnd/types.d.ts +0 -1
- package/{src → dist}/form/createFormValidationState.d.ts +0 -1
- package/{src → dist}/form/index.d.ts +0 -1
- package/{src → dist}/grid/createGridState.d.ts +0 -1
- package/{src → dist}/grid/index.d.ts +0 -1
- package/{src → dist}/grid/types.d.ts +0 -1
- package/dist/index.d.ts +25 -3363
- package/dist/index.js +2 -2
- package/dist/index.js.map +7 -1
- package/{src → dist}/numberfield/createNumberFieldState.d.ts +0 -1
- package/{src → dist}/numberfield/index.d.ts +0 -1
- package/{src → dist}/overlays/createOverlayTriggerState.d.ts +0 -1
- package/{src → dist}/overlays/index.d.ts +0 -1
- package/{src → dist}/radio/createRadioGroupState.d.ts +0 -1
- package/{src → dist}/radio/index.d.ts +0 -1
- package/{src → dist}/searchfield/createSearchFieldState.d.ts +0 -1
- package/{src → dist}/searchfield/index.d.ts +0 -1
- package/{src → dist}/select/createSelectState.d.ts +0 -1
- package/{src → dist}/select/index.d.ts +0 -1
- package/{src → dist}/slider/createSliderState.d.ts +0 -1
- package/{src → dist}/slider/index.d.ts +0 -1
- package/{src → dist}/ssr/index.d.ts +0 -1
- package/{src → dist}/table/TableCollection.d.ts +0 -1
- package/{src → dist}/table/createTableState.d.ts +0 -1
- package/{src → dist}/table/index.d.ts +0 -1
- package/{src → dist}/table/types.d.ts +0 -1
- package/{src → dist}/tabs/createTabListState.d.ts +0 -1
- package/{src → dist}/tabs/index.d.ts +0 -1
- package/{src → dist}/textfield/createTextFieldState.d.ts +0 -1
- package/{src → dist}/textfield/index.d.ts +0 -1
- package/{src → dist}/toast/createToastState.d.ts +0 -1
- package/{src → dist}/toast/index.d.ts +0 -1
- package/{src → dist}/toggle/createToggleState.d.ts +0 -1
- package/{src → dist}/toggle/index.d.ts +0 -1
- package/{src → dist}/tooltip/createTooltipTriggerState.d.ts +0 -1
- package/{src → dist}/tooltip/index.d.ts +0 -1
- package/{src → dist}/tree/TreeCollection.d.ts +0 -1
- package/{src → dist}/tree/createTreeState.d.ts +0 -1
- package/{src → dist}/tree/index.d.ts +0 -1
- package/{src → dist}/tree/types.d.ts +0 -1
- package/{src → dist}/utils/reactivity.d.ts +0 -1
- package/package.json +5 -7
- package/src/autocomplete/createAutocompleteState.d.ts.map +0 -1
- package/src/autocomplete/createAutocompleteState.ts +0 -90
- package/src/autocomplete/index.d.ts.map +0 -1
- package/src/autocomplete/index.ts +0 -5
- package/src/calendar/createCalendarState.d.ts.map +0 -1
- package/src/calendar/createCalendarState.ts +0 -461
- package/src/calendar/createDateFieldState.d.ts.map +0 -1
- package/src/calendar/createDateFieldState.ts +0 -562
- package/src/calendar/createRangeCalendarState.d.ts.map +0 -1
- package/src/calendar/createRangeCalendarState.ts +0 -535
- package/src/calendar/createTimeFieldState.d.ts.map +0 -1
- package/src/calendar/createTimeFieldState.ts +0 -483
- package/src/calendar/index.d.ts.map +0 -1
- package/src/calendar/index.ts +0 -81
- package/src/checkbox/createCheckboxGroupState.d.ts.map +0 -1
- package/src/checkbox/createCheckboxGroupState.ts +0 -193
- package/src/checkbox/index.d.ts.map +0 -1
- package/src/checkbox/index.ts +0 -5
- package/src/collections/ListCollection.d.ts.map +0 -1
- package/src/collections/ListCollection.ts +0 -146
- package/src/collections/createListState.d.ts.map +0 -1
- package/src/collections/createListState.ts +0 -264
- package/src/collections/createMenuState.d.ts.map +0 -1
- package/src/collections/createMenuState.ts +0 -106
- package/src/collections/createSelectionState.d.ts.map +0 -1
- package/src/collections/createSelectionState.ts +0 -336
- package/src/collections/index.d.ts.map +0 -1
- package/src/collections/index.ts +0 -46
- package/src/collections/types.d.ts.map +0 -1
- package/src/collections/types.ts +0 -169
- package/src/color/Color.d.ts.map +0 -1
- package/src/color/Color.ts +0 -951
- package/src/color/createColorAreaState.d.ts.map +0 -1
- package/src/color/createColorAreaState.ts +0 -293
- package/src/color/createColorFieldState.d.ts.map +0 -1
- package/src/color/createColorFieldState.ts +0 -292
- package/src/color/createColorSliderState.d.ts.map +0 -1
- package/src/color/createColorSliderState.ts +0 -241
- package/src/color/createColorWheelState.d.ts.map +0 -1
- package/src/color/createColorWheelState.ts +0 -211
- package/src/color/index.d.ts.map +0 -1
- package/src/color/index.ts +0 -47
- package/src/color/types.d.ts.map +0 -1
- package/src/color/types.ts +0 -127
- package/src/combobox/createComboBoxState.d.ts.map +0 -1
- package/src/combobox/createComboBoxState.ts +0 -703
- package/src/combobox/index.d.ts.map +0 -1
- package/src/combobox/index.ts +0 -13
- package/src/disclosure/createDisclosureState.d.ts.map +0 -1
- package/src/disclosure/createDisclosureState.ts +0 -193
- package/src/disclosure/index.d.ts.map +0 -1
- package/src/disclosure/index.ts +0 -9
- package/src/dnd/createDragState.d.ts.map +0 -1
- package/src/dnd/createDragState.ts +0 -153
- package/src/dnd/createDraggableCollectionState.d.ts.map +0 -1
- package/src/dnd/createDraggableCollectionState.ts +0 -165
- package/src/dnd/createDropState.d.ts.map +0 -1
- package/src/dnd/createDropState.ts +0 -212
- package/src/dnd/createDroppableCollectionState.d.ts.map +0 -1
- package/src/dnd/createDroppableCollectionState.ts +0 -357
- package/src/dnd/index.d.ts.map +0 -1
- package/src/dnd/index.ts +0 -76
- package/src/dnd/types.d.ts.map +0 -1
- package/src/dnd/types.ts +0 -317
- package/src/form/createFormValidationState.d.ts.map +0 -1
- package/src/form/createFormValidationState.ts +0 -389
- package/src/form/index.d.ts.map +0 -1
- package/src/form/index.ts +0 -15
- package/src/grid/createGridState.d.ts.map +0 -1
- package/src/grid/createGridState.ts +0 -327
- package/src/grid/index.d.ts.map +0 -1
- package/src/grid/index.ts +0 -13
- package/src/grid/types.d.ts.map +0 -1
- package/src/grid/types.ts +0 -179
- package/src/index.d.ts +0 -26
- package/src/index.d.ts.map +0 -1
- package/src/index.ts +0 -383
- package/src/numberfield/createNumberFieldState.d.ts.map +0 -1
- package/src/numberfield/createNumberFieldState.ts +0 -383
- package/src/numberfield/index.d.ts.map +0 -1
- package/src/numberfield/index.ts +0 -5
- package/src/overlays/createOverlayTriggerState.d.ts.map +0 -1
- package/src/overlays/createOverlayTriggerState.ts +0 -67
- package/src/overlays/index.d.ts.map +0 -1
- package/src/overlays/index.ts +0 -5
- package/src/radio/createRadioGroupState.d.ts.map +0 -1
- package/src/radio/createRadioGroupState.ts +0 -201
- package/src/radio/index.d.ts.map +0 -1
- package/src/radio/index.ts +0 -6
- package/src/searchfield/createSearchFieldState.d.ts.map +0 -1
- package/src/searchfield/createSearchFieldState.ts +0 -62
- package/src/searchfield/index.d.ts.map +0 -1
- package/src/searchfield/index.ts +0 -5
- package/src/select/createSelectState.d.ts.map +0 -1
- package/src/select/createSelectState.ts +0 -181
- package/src/select/index.d.ts.map +0 -1
- package/src/select/index.ts +0 -5
- package/src/slider/createSliderState.d.ts.map +0 -1
- package/src/slider/createSliderState.ts +0 -211
- package/src/slider/index.d.ts.map +0 -1
- package/src/slider/index.ts +0 -6
- package/src/ssr/index.d.ts.map +0 -1
- package/src/ssr/index.ts +0 -41
- package/src/table/TableCollection.d.ts.map +0 -1
- package/src/table/TableCollection.ts +0 -388
- package/src/table/createTableState.d.ts.map +0 -1
- package/src/table/createTableState.ts +0 -127
- package/src/table/index.d.ts.map +0 -1
- package/src/table/index.ts +0 -18
- package/src/table/types.d.ts.map +0 -1
- package/src/table/types.ts +0 -150
- package/src/tabs/createTabListState.d.ts.map +0 -1
- package/src/tabs/createTabListState.ts +0 -240
- package/src/tabs/index.d.ts.map +0 -1
- package/src/tabs/index.ts +0 -7
- package/src/textfield/createTextFieldState.d.ts.map +0 -1
- package/src/textfield/createTextFieldState.ts +0 -75
- package/src/textfield/index.d.ts.map +0 -1
- package/src/textfield/index.ts +0 -5
- package/src/toast/createToastState.d.ts.map +0 -1
- package/src/toast/createToastState.ts +0 -316
- package/src/toast/index.d.ts.map +0 -1
- package/src/toast/index.ts +0 -11
- package/src/toggle/createToggleState.d.ts.map +0 -1
- package/src/toggle/createToggleState.ts +0 -94
- package/src/toggle/index.d.ts.map +0 -1
- package/src/toggle/index.ts +0 -5
- package/src/tooltip/createTooltipTriggerState.d.ts.map +0 -1
- package/src/tooltip/createTooltipTriggerState.ts +0 -183
- package/src/tooltip/index.d.ts.map +0 -1
- package/src/tooltip/index.ts +0 -6
- package/src/tree/TreeCollection.d.ts.map +0 -1
- package/src/tree/TreeCollection.ts +0 -175
- package/src/tree/createTreeState.d.ts.map +0 -1
- package/src/tree/createTreeState.ts +0 -392
- package/src/tree/index.d.ts.map +0 -1
- package/src/tree/index.ts +0 -13
- package/src/tree/types.d.ts.map +0 -1
- package/src/tree/types.ts +0 -174
- package/src/utils/index.d.ts +0 -2
- package/src/utils/index.d.ts.map +0 -1
- package/src/utils/reactivity.d.ts.map +0 -1
- package/src/utils/reactivity.ts +0 -36
- /package/{src/utils/index.ts → dist/utils/index.d.ts} +0 -0
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Toggle state for Solid Stately
|
|
3
|
-
*
|
|
4
|
-
* Provides state management for toggle components like checkboxes and switches.
|
|
5
|
-
*
|
|
6
|
-
* This is a 1:1 port of @react-stately/toggle's useToggleState.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { createSignal, Accessor } from 'solid-js';
|
|
10
|
-
import { type MaybeAccessor, access } from '../utils';
|
|
11
|
-
|
|
12
|
-
// ============================================
|
|
13
|
-
// TYPES
|
|
14
|
-
// ============================================
|
|
15
|
-
|
|
16
|
-
export interface ToggleStateOptions {
|
|
17
|
-
/** Whether the element should be selected (controlled). */
|
|
18
|
-
isSelected?: boolean;
|
|
19
|
-
/** Whether the element should be selected by default (uncontrolled). */
|
|
20
|
-
defaultSelected?: boolean;
|
|
21
|
-
/** Handler that is called when the element's selection state changes. */
|
|
22
|
-
onChange?: (isSelected: boolean) => void;
|
|
23
|
-
/** Whether the element is read only. */
|
|
24
|
-
isReadOnly?: boolean;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export interface ToggleState {
|
|
28
|
-
/** Whether the toggle is selected. */
|
|
29
|
-
readonly isSelected: Accessor<boolean>;
|
|
30
|
-
/** Whether the toggle is selected by default. */
|
|
31
|
-
readonly defaultSelected: boolean;
|
|
32
|
-
/** Updates selection state. */
|
|
33
|
-
setSelected(isSelected: boolean): void;
|
|
34
|
-
/** Toggle the selection state. */
|
|
35
|
-
toggle(): void;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// ============================================
|
|
39
|
-
// IMPLEMENTATION
|
|
40
|
-
// ============================================
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Provides state management for toggle components like checkboxes and switches.
|
|
44
|
-
*/
|
|
45
|
-
export function createToggleState(props: MaybeAccessor<ToggleStateOptions> = {}): ToggleState {
|
|
46
|
-
const getProps = () => access(props);
|
|
47
|
-
|
|
48
|
-
// Get initial values
|
|
49
|
-
const initialProps = getProps();
|
|
50
|
-
const initialSelected = initialProps.isSelected ?? initialProps.defaultSelected ?? false;
|
|
51
|
-
|
|
52
|
-
// Create internal signal for uncontrolled mode
|
|
53
|
-
const [internalSelected, setInternalSelected] = createSignal(initialSelected);
|
|
54
|
-
|
|
55
|
-
// Determine if controlled
|
|
56
|
-
const isControlled = () => getProps().isSelected !== undefined;
|
|
57
|
-
|
|
58
|
-
// Get current selection state
|
|
59
|
-
const isSelected: Accessor<boolean> = () => {
|
|
60
|
-
const p = getProps();
|
|
61
|
-
return isControlled() ? (p.isSelected ?? false) : internalSelected();
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
// Update selection state
|
|
65
|
-
function setSelected(value: boolean): void {
|
|
66
|
-
const p = getProps();
|
|
67
|
-
if (p.isReadOnly) {
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
if (!isControlled()) {
|
|
72
|
-
setInternalSelected(value);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
p.onChange?.(value);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// Toggle selection state
|
|
79
|
-
function toggle(): void {
|
|
80
|
-
const p = getProps();
|
|
81
|
-
if (p.isReadOnly) {
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
setSelected(!isSelected());
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
return {
|
|
89
|
-
isSelected,
|
|
90
|
-
defaultSelected: initialProps.defaultSelected ?? initialSelected,
|
|
91
|
-
setSelected,
|
|
92
|
-
toggle,
|
|
93
|
-
};
|
|
94
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,KAAK,kBAAkB,EACvB,KAAK,WAAW,GACjB,MAAM,qBAAqB,CAAC"}
|
package/src/toggle/index.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createTooltipTriggerState.d.ts","sourceRoot":"","sources":["createTooltipTriggerState.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAA2B,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,EAA6B,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAOlF,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB;IAC9D,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,gDAAgD;IAChD,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACnC;;;;OAIG;IACH,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAChC,yBAAyB;IACzB,KAAK,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAClC;AASD;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAYxC;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,GAAE,mBAAwB,GAC9B,mBAAmB,CAkHrB"}
|
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Manages state for a tooltip trigger.
|
|
3
|
-
* Based on @react-stately/tooltip useTooltipTriggerState.
|
|
4
|
-
*
|
|
5
|
-
* Tracks whether the tooltip is open, and provides methods to toggle this state.
|
|
6
|
-
* Ensures only one tooltip is open at a time and controls the delay for showing a tooltip.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { createSignal, onCleanup, type Accessor } from 'solid-js';
|
|
10
|
-
import { createOverlayTriggerState, type OverlayTriggerProps } from '../overlays';
|
|
11
|
-
import { isServer } from '../ssr';
|
|
12
|
-
|
|
13
|
-
// Default delays (in ms)
|
|
14
|
-
const TOOLTIP_DELAY = 1500;
|
|
15
|
-
const TOOLTIP_COOLDOWN = 500;
|
|
16
|
-
|
|
17
|
-
export interface TooltipTriggerProps extends OverlayTriggerProps {
|
|
18
|
-
/** The delay time in milliseconds for the tooltip to show up. */
|
|
19
|
-
delay?: number;
|
|
20
|
-
/** The delay time in milliseconds for the tooltip to close. */
|
|
21
|
-
closeDelay?: number;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export interface TooltipTriggerState {
|
|
25
|
-
/** Whether the tooltip is currently showing. */
|
|
26
|
-
readonly isOpen: Accessor<boolean>;
|
|
27
|
-
/**
|
|
28
|
-
* Shows the tooltip. By default, the tooltip becomes visible after a delay
|
|
29
|
-
* depending on a global warmup timer. The `immediate` option shows the
|
|
30
|
-
* tooltip immediately instead.
|
|
31
|
-
*/
|
|
32
|
-
open(immediate?: boolean): void;
|
|
33
|
-
/** Hides the tooltip. */
|
|
34
|
-
close(immediate?: boolean): void;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// Global state for coordinating tooltips
|
|
38
|
-
let tooltips: Record<string, (immediate?: boolean) => void> = {};
|
|
39
|
-
let tooltipId = 0;
|
|
40
|
-
let globalWarmedUp = false;
|
|
41
|
-
let globalWarmUpTimeout: ReturnType<typeof setTimeout> | null = null;
|
|
42
|
-
let globalCooldownTimeout: ReturnType<typeof setTimeout> | null = null;
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Resets the global tooltip state. Useful for testing.
|
|
46
|
-
* @internal
|
|
47
|
-
*/
|
|
48
|
-
export function resetTooltipState(): void {
|
|
49
|
-
tooltips = {};
|
|
50
|
-
tooltipId = 0;
|
|
51
|
-
globalWarmedUp = false;
|
|
52
|
-
if (globalWarmUpTimeout) {
|
|
53
|
-
clearTimeout(globalWarmUpTimeout);
|
|
54
|
-
globalWarmUpTimeout = null;
|
|
55
|
-
}
|
|
56
|
-
if (globalCooldownTimeout) {
|
|
57
|
-
clearTimeout(globalCooldownTimeout);
|
|
58
|
-
globalCooldownTimeout = null;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Manages state for a tooltip trigger. Tracks whether the tooltip is open, and provides
|
|
64
|
-
* methods to toggle this state. Ensures only one tooltip is open at a time and controls
|
|
65
|
-
* the delay for showing a tooltip.
|
|
66
|
-
*/
|
|
67
|
-
export function createTooltipTriggerState(
|
|
68
|
-
props: TooltipTriggerProps = {}
|
|
69
|
-
): TooltipTriggerState {
|
|
70
|
-
const delay = () => props.delay ?? TOOLTIP_DELAY;
|
|
71
|
-
const closeDelay = () => props.closeDelay ?? TOOLTIP_COOLDOWN;
|
|
72
|
-
|
|
73
|
-
const overlayState = createOverlayTriggerState(props);
|
|
74
|
-
const id = `tooltip-${++tooltipId}`;
|
|
75
|
-
|
|
76
|
-
let closeTimeout: ReturnType<typeof setTimeout> | null = null;
|
|
77
|
-
const [closeCallback, setCloseCallback] = createSignal<() => void>(() => overlayState.close());
|
|
78
|
-
|
|
79
|
-
const ensureTooltipEntry = () => {
|
|
80
|
-
tooltips[id] = hideTooltip;
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
const closeOpenTooltips = () => {
|
|
84
|
-
for (const hideTooltipId in tooltips) {
|
|
85
|
-
if (hideTooltipId !== id) {
|
|
86
|
-
tooltips[hideTooltipId](true);
|
|
87
|
-
delete tooltips[hideTooltipId];
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
const showTooltip = () => {
|
|
93
|
-
if (closeTimeout) {
|
|
94
|
-
clearTimeout(closeTimeout);
|
|
95
|
-
closeTimeout = null;
|
|
96
|
-
}
|
|
97
|
-
closeOpenTooltips();
|
|
98
|
-
ensureTooltipEntry();
|
|
99
|
-
globalWarmedUp = true;
|
|
100
|
-
overlayState.open();
|
|
101
|
-
|
|
102
|
-
if (globalWarmUpTimeout) {
|
|
103
|
-
clearTimeout(globalWarmUpTimeout);
|
|
104
|
-
globalWarmUpTimeout = null;
|
|
105
|
-
}
|
|
106
|
-
if (globalCooldownTimeout) {
|
|
107
|
-
clearTimeout(globalCooldownTimeout);
|
|
108
|
-
globalCooldownTimeout = null;
|
|
109
|
-
}
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
const hideTooltip = (immediate?: boolean) => {
|
|
113
|
-
if (immediate || closeDelay() <= 0) {
|
|
114
|
-
if (closeTimeout) {
|
|
115
|
-
clearTimeout(closeTimeout);
|
|
116
|
-
closeTimeout = null;
|
|
117
|
-
}
|
|
118
|
-
closeCallback()();
|
|
119
|
-
} else if (!closeTimeout) {
|
|
120
|
-
closeTimeout = setTimeout(() => {
|
|
121
|
-
closeTimeout = null;
|
|
122
|
-
closeCallback()();
|
|
123
|
-
}, closeDelay());
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
if (globalWarmUpTimeout) {
|
|
127
|
-
clearTimeout(globalWarmUpTimeout);
|
|
128
|
-
globalWarmUpTimeout = null;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
if (globalWarmedUp) {
|
|
132
|
-
if (globalCooldownTimeout) {
|
|
133
|
-
clearTimeout(globalCooldownTimeout);
|
|
134
|
-
}
|
|
135
|
-
globalCooldownTimeout = setTimeout(() => {
|
|
136
|
-
delete tooltips[id];
|
|
137
|
-
globalCooldownTimeout = null;
|
|
138
|
-
globalWarmedUp = false;
|
|
139
|
-
}, Math.max(TOOLTIP_COOLDOWN, closeDelay()));
|
|
140
|
-
}
|
|
141
|
-
};
|
|
142
|
-
|
|
143
|
-
const warmupTooltip = () => {
|
|
144
|
-
closeOpenTooltips();
|
|
145
|
-
ensureTooltipEntry();
|
|
146
|
-
|
|
147
|
-
if (!overlayState.isOpen() && !globalWarmUpTimeout && !globalWarmedUp) {
|
|
148
|
-
globalWarmUpTimeout = setTimeout(() => {
|
|
149
|
-
globalWarmUpTimeout = null;
|
|
150
|
-
globalWarmedUp = true;
|
|
151
|
-
showTooltip();
|
|
152
|
-
}, delay());
|
|
153
|
-
} else if (!overlayState.isOpen()) {
|
|
154
|
-
showTooltip();
|
|
155
|
-
}
|
|
156
|
-
};
|
|
157
|
-
|
|
158
|
-
// Update close callback when overlayState.close changes
|
|
159
|
-
setCloseCallback(() => overlayState.close);
|
|
160
|
-
|
|
161
|
-
// Cleanup on unmount
|
|
162
|
-
onCleanup(() => {
|
|
163
|
-
if (closeTimeout) {
|
|
164
|
-
clearTimeout(closeTimeout);
|
|
165
|
-
}
|
|
166
|
-
if (tooltips[id]) {
|
|
167
|
-
delete tooltips[id];
|
|
168
|
-
}
|
|
169
|
-
});
|
|
170
|
-
|
|
171
|
-
return {
|
|
172
|
-
isOpen: overlayState.isOpen,
|
|
173
|
-
open: (immediate?: boolean) => {
|
|
174
|
-
if (isServer) return;
|
|
175
|
-
if (!immediate && delay() > 0 && !closeTimeout) {
|
|
176
|
-
warmupTooltip();
|
|
177
|
-
} else {
|
|
178
|
-
showTooltip();
|
|
179
|
-
}
|
|
180
|
-
},
|
|
181
|
-
close: hideTooltip,
|
|
182
|
-
};
|
|
183
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,GACzB,MAAM,6BAA6B,CAAC"}
|
package/src/tooltip/index.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TreeCollection.d.ts","sourceRoot":"","sources":["TreeCollection.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,IAAI,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEzF;;;GAGG;AACH,qBAAa,cAAc,CAAC,CAAC,CAAE,YAAW,eAAe,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,MAAM,CAAoC;IAClD,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,KAAK,CAAqB;gBAGhC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,EACxB,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC;IAKxB,OAAO,CAAC,eAAe;IAqEvB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAExB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAID,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC;IAIxB,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI;IAIrC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI;IAOrC,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI;IAMlC,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI;IAMjC,WAAW,IAAI,GAAG,GAAG,IAAI;IAIzB,UAAU,IAAI,GAAG,GAAG,IAAI;IAIxB,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAK5C,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM;IAK9B,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI;IAKlC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;CAG3C;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,EACxB,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,GACrB,cAAc,CAAC,CAAC,CAAC,CAEnB"}
|
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TreeCollection implementation.
|
|
3
|
-
* Based on @react-stately/tree/TreeCollection.
|
|
4
|
-
*
|
|
5
|
-
* A flattened view of tree nodes that respects expanded state.
|
|
6
|
-
* Only visible nodes (root + expanded children) are included in iteration.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import type { Key } from '../collections/types';
|
|
10
|
-
import type { TreeCollection as ITreeCollection, TreeNode, TreeItemData } from './types';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Creates a TreeCollection from hierarchical data.
|
|
14
|
-
* The collection is flattened based on expanded keys.
|
|
15
|
-
*/
|
|
16
|
-
export class TreeCollection<T> implements ITreeCollection<T> {
|
|
17
|
-
private keyMap: Map<Key, TreeNode<T>> = new Map();
|
|
18
|
-
private visibleKeys: Key[] = [];
|
|
19
|
-
private _rows: TreeNode<T>[] = [];
|
|
20
|
-
|
|
21
|
-
constructor(
|
|
22
|
-
items: TreeItemData<T>[],
|
|
23
|
-
expandedKeys: Set<Key>
|
|
24
|
-
) {
|
|
25
|
-
this.buildCollection(items, expandedKeys);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
private buildCollection(items: TreeItemData<T>[], expandedKeys: Set<Key>): void {
|
|
29
|
-
let globalIndex = 0;
|
|
30
|
-
|
|
31
|
-
const visit = (
|
|
32
|
-
item: TreeItemData<T>,
|
|
33
|
-
level: number,
|
|
34
|
-
parentKey: Key | null,
|
|
35
|
-
indexInParent: number
|
|
36
|
-
): TreeNode<T> => {
|
|
37
|
-
const hasChildren = item.children && item.children.length > 0;
|
|
38
|
-
const isExpanded = hasChildren && expandedKeys.has(item.key);
|
|
39
|
-
|
|
40
|
-
// Build child nodes first (even if not visible, for the map)
|
|
41
|
-
const childNodes: TreeNode<T>[] = [];
|
|
42
|
-
if (hasChildren && item.children) {
|
|
43
|
-
for (let i = 0; i < item.children.length; i++) {
|
|
44
|
-
const childNode = visit(item.children[i], level + 1, item.key, i);
|
|
45
|
-
childNodes.push(childNode);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
const node: TreeNode<T> = {
|
|
50
|
-
type: 'item',
|
|
51
|
-
key: item.key,
|
|
52
|
-
value: item.value,
|
|
53
|
-
textValue: item.textValue || String(item.key),
|
|
54
|
-
level,
|
|
55
|
-
index: indexInParent,
|
|
56
|
-
parentKey,
|
|
57
|
-
hasChildNodes: hasChildren || false,
|
|
58
|
-
childNodes,
|
|
59
|
-
isDisabled: item.isDisabled,
|
|
60
|
-
isExpandable: hasChildren,
|
|
61
|
-
isExpanded,
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
// Always add to keyMap (for getItem lookups)
|
|
65
|
-
this.keyMap.set(item.key, node);
|
|
66
|
-
|
|
67
|
-
return node;
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
// First pass: build all nodes
|
|
71
|
-
const rootNodes: TreeNode<T>[] = [];
|
|
72
|
-
for (let i = 0; i < items.length; i++) {
|
|
73
|
-
const node = visit(items[i], 0, null, i);
|
|
74
|
-
rootNodes.push(node);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// Second pass: build visible rows list
|
|
78
|
-
const addVisibleNodes = (nodes: TreeNode<T>[]): void => {
|
|
79
|
-
for (const node of nodes) {
|
|
80
|
-
// Update the row index for visible nodes
|
|
81
|
-
node.rowIndex = globalIndex++;
|
|
82
|
-
this._rows.push(node);
|
|
83
|
-
this.visibleKeys.push(node.key);
|
|
84
|
-
|
|
85
|
-
// Add children if expanded
|
|
86
|
-
if (node.isExpanded && node.childNodes.length > 0) {
|
|
87
|
-
addVisibleNodes(node.childNodes);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
addVisibleNodes(rootNodes);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
// Collection properties
|
|
96
|
-
|
|
97
|
-
get size(): number {
|
|
98
|
-
return this.visibleKeys.length;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
get rows(): TreeNode<T>[] {
|
|
102
|
-
return this._rows;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
get rowCount(): number {
|
|
106
|
-
return this._rows.length;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// Collection methods
|
|
110
|
-
|
|
111
|
-
getKeys(): Iterable<Key> {
|
|
112
|
-
return this.visibleKeys;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
getItem(key: Key): TreeNode<T> | null {
|
|
116
|
-
return this.keyMap.get(key) ?? null;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
at(index: number): TreeNode<T> | null {
|
|
120
|
-
if (index < 0 || index >= this._rows.length) {
|
|
121
|
-
return null;
|
|
122
|
-
}
|
|
123
|
-
return this._rows[index];
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
getKeyBefore(key: Key): Key | null {
|
|
127
|
-
const index = this.visibleKeys.indexOf(key);
|
|
128
|
-
if (index <= 0) return null;
|
|
129
|
-
return this.visibleKeys[index - 1];
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
getKeyAfter(key: Key): Key | null {
|
|
133
|
-
const index = this.visibleKeys.indexOf(key);
|
|
134
|
-
if (index < 0 || index >= this.visibleKeys.length - 1) return null;
|
|
135
|
-
return this.visibleKeys[index + 1];
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
getFirstKey(): Key | null {
|
|
139
|
-
return this.visibleKeys[0] ?? null;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
getLastKey(): Key | null {
|
|
143
|
-
return this.visibleKeys[this.visibleKeys.length - 1] ?? null;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
getChildren(key: Key): Iterable<TreeNode<T>> {
|
|
147
|
-
const node = this.keyMap.get(key);
|
|
148
|
-
return node?.childNodes ?? [];
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
getTextValue(key: Key): string {
|
|
152
|
-
const node = this.keyMap.get(key);
|
|
153
|
-
return node?.textValue ?? '';
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
getParentKey(key: Key): Key | null {
|
|
157
|
-
const node = this.keyMap.get(key);
|
|
158
|
-
return node?.parentKey ?? null;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
[Symbol.iterator](): Iterator<TreeNode<T>> {
|
|
162
|
-
return this._rows[Symbol.iterator]();
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
/**
|
|
167
|
-
* Factory function to create a TreeCollection.
|
|
168
|
-
* Useful for the collectionFactory pattern in TreeStateOptions.
|
|
169
|
-
*/
|
|
170
|
-
export function createTreeCollection<T>(
|
|
171
|
-
items: TreeItemData<T>[],
|
|
172
|
-
expandedKeys: Set<Key>
|
|
173
|
-
): TreeCollection<T> {
|
|
174
|
-
return new TreeCollection(items, expandedKeys);
|
|
175
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createTreeState.d.ts","sourceRoot":"","sources":["createTreeState.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAA8C,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AACrF,OAAO,KAAK,EACV,SAAS,EACT,gBAAgB,EAChB,cAAc,EAEf,MAAM,SAAS,CAAC;AAGjB;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,EAC/F,OAAO,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GACxC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAiWjB"}
|