@ghia/react 0.0.0 → 0.11.0
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/LICENSE +201 -0
- package/dist/automation/client.d.ts +2 -0
- package/dist/automation/client.d.ts.map +1 -0
- package/dist/automation/client.js +2 -0
- package/dist/automation/client.js.map +1 -0
- package/dist/automation/index.d.ts +2 -0
- package/dist/automation/index.d.ts.map +1 -0
- package/dist/automation/index.js +2 -0
- package/dist/automation/index.js.map +1 -0
- package/dist/automation/protocol.d.ts +2 -0
- package/dist/automation/protocol.d.ts.map +1 -0
- package/dist/automation/protocol.js +2 -0
- package/dist/automation/protocol.js.map +1 -0
- package/dist/components/animate-presence.d.ts +35 -0
- package/dist/components/animate-presence.d.ts.map +1 -0
- package/dist/components/animate-presence.js +184 -0
- package/dist/components/animate-presence.js.map +1 -0
- package/dist/components/button.d.ts +32 -0
- package/dist/components/button.d.ts.map +1 -0
- package/dist/components/button.js +62 -0
- package/dist/components/button.js.map +1 -0
- package/dist/components/combobox.d.ts +63 -0
- package/dist/components/combobox.d.ts.map +1 -0
- package/dist/components/combobox.js +279 -0
- package/dist/components/combobox.js.map +1 -0
- package/dist/components/dialog.d.ts +49 -0
- package/dist/components/dialog.d.ts.map +1 -0
- package/dist/components/dialog.js +157 -0
- package/dist/components/dialog.js.map +1 -0
- package/dist/components/floating.d.ts +54 -0
- package/dist/components/floating.d.ts.map +1 -0
- package/dist/components/floating.js +199 -0
- package/dist/components/floating.js.map +1 -0
- package/dist/components/index.d.ts +135 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +190 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/layout-group.d.ts +10 -0
- package/dist/components/layout-group.d.ts.map +1 -0
- package/dist/components/layout-group.js +10 -0
- package/dist/components/layout-group.js.map +1 -0
- package/dist/components/motion-config.d.ts +24 -0
- package/dist/components/motion-config.d.ts.map +1 -0
- package/dist/components/motion-config.js +31 -0
- package/dist/components/motion-config.js.map +1 -0
- package/dist/components/reorder.d.ts +44 -0
- package/dist/components/reorder.d.ts.map +1 -0
- package/dist/components/reorder.js +123 -0
- package/dist/components/reorder.js.map +1 -0
- package/dist/components/select.d.ts +61 -0
- package/dist/components/select.d.ts.map +1 -0
- package/dist/components/select.js +267 -0
- package/dist/components/select.js.map +1 -0
- package/dist/components/tooltip.d.ts +30 -0
- package/dist/components/tooltip.d.ts.map +1 -0
- package/dist/components/tooltip.js +138 -0
- package/dist/components/tooltip.js.map +1 -0
- package/dist/components/universal-style.d.ts +12 -0
- package/dist/components/universal-style.d.ts.map +1 -0
- package/dist/components/universal-style.js +45 -0
- package/dist/components/universal-style.js.map +1 -0
- package/dist/components/variant-context.d.ts +4 -0
- package/dist/components/variant-context.d.ts.map +1 -0
- package/dist/components/variant-context.js +4 -0
- package/dist/components/variant-context.js.map +1 -0
- package/dist/cpu-throttle.d.ts +3 -0
- package/dist/cpu-throttle.d.ts.map +1 -0
- package/dist/cpu-throttle.js +2 -0
- package/dist/cpu-throttle.js.map +1 -0
- package/dist/floating.d.ts +4 -0
- package/dist/floating.d.ts.map +1 -0
- package/dist/floating.js +3 -0
- package/dist/floating.js.map +1 -0
- package/dist/hooks/index.d.ts +6 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +6 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/use-gpuix.d.ts +17 -0
- package/dist/hooks/use-gpuix.d.ts.map +1 -0
- package/dist/hooks/use-gpuix.js +22 -0
- package/dist/hooks/use-gpuix.js.map +1 -0
- package/dist/hooks/use-media-query.d.ts +15 -0
- package/dist/hooks/use-media-query.d.ts.map +1 -0
- package/dist/hooks/use-media-query.js +30 -0
- package/dist/hooks/use-media-query.js.map +1 -0
- package/dist/hooks/use-motion-value.d.ts +31 -0
- package/dist/hooks/use-motion-value.d.ts.map +1 -0
- package/dist/hooks/use-motion-value.js +105 -0
- package/dist/hooks/use-motion-value.js.map +1 -0
- package/dist/hooks/use-text-search.d.ts +16 -0
- package/dist/hooks/use-text-search.d.ts.map +1 -0
- package/dist/hooks/use-text-search.js +17 -0
- package/dist/hooks/use-text-search.js.map +1 -0
- package/dist/hooks/use-window-size.d.ts +11 -0
- package/dist/hooks/use-window-size.d.ts.map +1 -0
- package/dist/hooks/use-window-size.js +20 -0
- package/dist/hooks/use-window-size.js.map +1 -0
- package/dist/idle-gc.d.ts +3 -0
- package/dist/idle-gc.d.ts.map +1 -0
- package/dist/idle-gc.js +2 -0
- package/dist/idle-gc.js.map +1 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/reconciler/event-registry.d.ts +10 -0
- package/dist/reconciler/event-registry.d.ts.map +1 -0
- package/dist/reconciler/event-registry.js +32 -0
- package/dist/reconciler/event-registry.js.map +1 -0
- package/dist/reconciler/host-config.d.ts +68 -0
- package/dist/reconciler/host-config.d.ts.map +1 -0
- package/dist/reconciler/host-config.js +539 -0
- package/dist/reconciler/host-config.js.map +1 -0
- package/dist/reconciler/index.d.ts +3 -0
- package/dist/reconciler/index.d.ts.map +1 -0
- package/dist/reconciler/index.js +3 -0
- package/dist/reconciler/index.js.map +1 -0
- package/dist/reconciler/motion-bindings.d.ts +5 -0
- package/dist/reconciler/motion-bindings.d.ts.map +1 -0
- package/dist/reconciler/motion-bindings.js +10 -0
- package/dist/reconciler/motion-bindings.js.map +1 -0
- package/dist/reconciler/portal.d.ts +24 -0
- package/dist/reconciler/portal.d.ts.map +1 -0
- package/dist/reconciler/portal.js +32 -0
- package/dist/reconciler/portal.js.map +1 -0
- package/dist/reconciler/reconciler.d.ts +14 -0
- package/dist/reconciler/reconciler.d.ts.map +1 -0
- package/dist/reconciler/reconciler.js +126 -0
- package/dist/reconciler/reconciler.js.map +1 -0
- package/dist/reconciler/renderer.d.ts +42 -0
- package/dist/reconciler/renderer.d.ts.map +1 -0
- package/dist/reconciler/renderer.js +320 -0
- package/dist/reconciler/renderer.js.map +1 -0
- package/dist/testing.d.ts +14 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +43 -0
- package/dist/testing.js.map +1 -0
- package/dist/types/host.d.ts +215 -0
- package/dist/types/host.d.ts.map +1 -0
- package/dist/types/host.js +3 -0
- package/dist/types/host.js.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/jsx-dev-runtime.d.ts +143 -0
- package/jsx-dev-runtime.js +3 -0
- package/jsx-runtime.d.ts +145 -0
- package/jsx-runtime.js +1 -0
- package/package.json +104 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout-group.d.ts","sourceRoot":"","sources":["../../src/components/layout-group.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGpD,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,6CAA+C,CAAA;AAE9E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,qLAAqL;IACrL,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB,CAAA;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,YAAY,CAIjE"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createContext, createElement, useContext, useMemo } from "react";
|
|
2
|
+
import { joinLayoutGroupId } from "@ghia/native/host";
|
|
3
|
+
/** The id prefix `motion.*` components below apply to their `layoutId`. */
|
|
4
|
+
export const LayoutGroupContext = createContext(undefined);
|
|
5
|
+
export function LayoutGroup(props) {
|
|
6
|
+
const parent = useContext(LayoutGroupContext);
|
|
7
|
+
const groupId = useMemo(() => joinLayoutGroupId(parent, props.id), [parent, props.id]);
|
|
8
|
+
return createElement(LayoutGroupContext.Provider, { value: groupId }, props.children);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=layout-group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout-group.js","sourceRoot":"","sources":["../../src/components/layout-group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAEzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD,2EAA2E;AAC3E,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAAqB,SAAS,CAAC,CAAA;AAQ9E,MAAM,UAAU,WAAW,CAAC,KAAuB;IACjD,MAAM,MAAM,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAA;IAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;IACtF,OAAO,aAAa,CAAC,kBAAkB,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;AACvF,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ReactElement, ReactNode } from "react";
|
|
2
|
+
import type { MotionConfigValue } from "@ghia/native/host";
|
|
3
|
+
type MotionConfigState = MotionConfigValue & {
|
|
4
|
+
/** The setting resolved against the OS preference, so a consumer does not subscribe to it. */
|
|
5
|
+
reduced: boolean;
|
|
6
|
+
};
|
|
7
|
+
export declare const MotionConfigContext: import("react").Context<MotionConfigState | undefined>;
|
|
8
|
+
export type MotionConfigProps = MotionConfigValue & {
|
|
9
|
+
children?: ReactNode;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Defaults for the `motion.*` components below it. A nested config overrides
|
|
13
|
+
* only what it sets.
|
|
14
|
+
*
|
|
15
|
+
* `reducedMotion` is `"never"` unless set. Reduced, layout animations and
|
|
16
|
+
* `width`, `height`, `top`, `right`, `bottom` and `left` jump to their target
|
|
17
|
+
* instead of animating, and so do motion values bound to those style keys;
|
|
18
|
+
* nothing else changes. `"user"` follows the OS setting.
|
|
19
|
+
*/
|
|
20
|
+
export declare function MotionConfig(props: MotionConfigProps): ReactElement;
|
|
21
|
+
/** Whether `motion.*` components here are reduced, per the nearest `MotionConfig`. */
|
|
22
|
+
export declare function useReducedMotionConfig(): boolean;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=motion-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"motion-config.d.ts","sourceRoot":"","sources":["../../src/components/motion-config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAG1D,KAAK,iBAAiB,GAAG,iBAAiB,GAAG;IAC3C,8FAA8F;IAC9F,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,mBAAmB,wDAA0D,CAAA;AAE1F,MAAM,MAAM,iBAAiB,GAAG,iBAAiB,GAAG;IAClD,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB,CAAA;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,CAWnE;AAED,sFAAsF;AACtF,wBAAgB,sBAAsB,IAAI,OAAO,CAGhD"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { createContext, createElement, useContext, useMemo } from "react";
|
|
2
|
+
import { isReducedMotion, mergeMotionConfig } from "@ghia/native/host";
|
|
3
|
+
import { useReducedMotion } from "../hooks/use-media-query.js";
|
|
4
|
+
export const MotionConfigContext = createContext(undefined);
|
|
5
|
+
/**
|
|
6
|
+
* Defaults for the `motion.*` components below it. A nested config overrides
|
|
7
|
+
* only what it sets.
|
|
8
|
+
*
|
|
9
|
+
* `reducedMotion` is `"never"` unless set. Reduced, layout animations and
|
|
10
|
+
* `width`, `height`, `top`, `right`, `bottom` and `left` jump to their target
|
|
11
|
+
* instead of animating, and so do motion values bound to those style keys;
|
|
12
|
+
* nothing else changes. `"user"` follows the OS setting.
|
|
13
|
+
*/
|
|
14
|
+
export function MotionConfig(props) {
|
|
15
|
+
const parent = useContext(MotionConfigContext);
|
|
16
|
+
const prefersReduced = useReducedMotion();
|
|
17
|
+
const value = useMemo(() => {
|
|
18
|
+
const merged = mergeMotionConfig(parent, {
|
|
19
|
+
transition: props.transition,
|
|
20
|
+
reducedMotion: props.reducedMotion,
|
|
21
|
+
});
|
|
22
|
+
return { ...merged, reduced: isReducedMotion(merged.reducedMotion, prefersReduced) };
|
|
23
|
+
}, [parent, props.transition, props.reducedMotion, prefersReduced]);
|
|
24
|
+
return createElement(MotionConfigContext.Provider, { value }, props.children);
|
|
25
|
+
}
|
|
26
|
+
/** Whether `motion.*` components here are reduced, per the nearest `MotionConfig`. */
|
|
27
|
+
export function useReducedMotionConfig() {
|
|
28
|
+
const config = useContext(MotionConfigContext);
|
|
29
|
+
return config !== undefined && config.reduced;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=motion-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"motion-config.js","sourceRoot":"","sources":["../../src/components/motion-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAEzE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAEtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAO9D,MAAM,CAAC,MAAM,mBAAmB,GAAG,aAAa,CAAgC,SAAS,CAAC,CAAA;AAM1F;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,MAAM,MAAM,GAAG,UAAU,CAAC,mBAAmB,CAAC,CAAA;IAC9C,MAAM,cAAc,GAAG,gBAAgB,EAAE,CAAA;IACzC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAsB,EAAE;QAC5C,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,EAAE;YACvC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,aAAa,EAAE,KAAK,CAAC,aAAa;SACnC,CAAC,CAAA;QACF,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,eAAe,CAAC,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC,EAAE,CAAA;IACtF,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAA;IACnE,OAAO,aAAa,CAAC,mBAAmB,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;AAC/E,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,sBAAsB;IACpC,MAAM,MAAM,GAAG,UAAU,CAAC,mBAAmB,CAAC,CAAA;IAC9C,OAAO,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,CAAA;AAC/C,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/** Framer's `Reorder`: a list the user reorders by dragging its items. */
|
|
2
|
+
import type { ReactElement, ReactNode, Ref } from "react";
|
|
3
|
+
import type { ReorderAxis } from "@ghia/native/host";
|
|
4
|
+
import type { Instance, Props } from "../types/host.js";
|
|
5
|
+
import type { GpuixComponentType, MotionDragProps } from "./index.js";
|
|
6
|
+
export type ReorderGroupProps<Value> = Omit<Props, "ref" | "children"> & {
|
|
7
|
+
/** The axis items are laid out and dragged along. */
|
|
8
|
+
axis?: ReorderAxis;
|
|
9
|
+
/** The current order. Each value has one `Reorder.Item`. */
|
|
10
|
+
values: Value[];
|
|
11
|
+
/** Called with the order a drag proposes; pass it back as `values`. */
|
|
12
|
+
onReorder: (values: Value[]) => void;
|
|
13
|
+
/** The element type of the list. */
|
|
14
|
+
as?: GpuixComponentType;
|
|
15
|
+
ref?: Ref<Instance>;
|
|
16
|
+
children?: ReactNode;
|
|
17
|
+
};
|
|
18
|
+
declare function Group<Value>(props: ReorderGroupProps<Value>): ReactElement;
|
|
19
|
+
export type ReorderItemProps<Value> = Omit<MotionDragProps, "layout" | "layoutId" | "layoutDrag" | "ref"> & {
|
|
20
|
+
/** Which entry of the group's `values` this item stands for. */
|
|
21
|
+
value: Value;
|
|
22
|
+
/** The element type of the item. */
|
|
23
|
+
as?: GpuixComponentType;
|
|
24
|
+
ref?: Ref<Instance>;
|
|
25
|
+
};
|
|
26
|
+
declare function Item<Value>(props: ReorderItemProps<Value>): ReactElement;
|
|
27
|
+
/**
|
|
28
|
+
* A list the user reorders by dragging its items along `axis`. An item
|
|
29
|
+
* follows the pointer; when its centre passes a neighbour's, `onReorder`
|
|
30
|
+
* gets the swapped order, and the other items glide to their new slots
|
|
31
|
+
* (`layout`). On release the item glides to its slot.
|
|
32
|
+
*
|
|
33
|
+
* ```tsx
|
|
34
|
+
* <Reorder.Group axis="y" values={items} onReorder={setItems}>
|
|
35
|
+
* {items.map((item) => <Reorder.Item key={item} value={item}>{item}</Reorder.Item>)}
|
|
36
|
+
* </Reorder.Group>
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare const Reorder: {
|
|
40
|
+
Group: typeof Group;
|
|
41
|
+
Item: typeof Item;
|
|
42
|
+
};
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=reorder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reorder.d.ts","sourceRoot":"","sources":["../../src/components/reorder.tsx"],"names":[],"mappings":"AAAA,0EAA0E;AAG1E,OAAO,KAAK,EAAiB,YAAY,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAExE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAEvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAIrE,MAAM,MAAM,iBAAiB,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,UAAU,CAAC,GAAG;IACvE,qDAAqD;IACrD,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,4DAA4D;IAC5D,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,uEAAuE;IACvE,SAAS,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,IAAI,CAAA;IACpC,oCAAoC;IACpC,EAAE,CAAC,EAAE,kBAAkB,CAAA;IACvB,GAAG,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB,CAAA;AAED,iBAAS,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG,YAAY,CAsBnE;AAED,MAAM,MAAM,gBAAgB,CAAC,KAAK,IAAI,IAAI,CAAC,eAAe,EAAE,QAAQ,GAAG,UAAU,GAAG,YAAY,GAAG,KAAK,CAAC,GAAG;IAC1G,gEAAgE;IAChE,KAAK,EAAE,KAAK,CAAA;IACZ,oCAAoC;IACpC,EAAE,CAAC,EAAE,kBAAkB,CAAA;IACvB,GAAG,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;CACpB,CAAA;AAiBD,iBAAS,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAAG,YAAY,CAwEjE;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,OAAO;;;CAAkB,CAAA"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/** Framer's `Reorder`: a list the user reorders by dragging its items. */
|
|
2
|
+
import { createContext, createElement, useCallback, useContext, useLayoutEffect, useRef, useState } from "react";
|
|
3
|
+
import { ReorderController, createReorderDrag } from "@ghia/native/host";
|
|
4
|
+
import { useGpuix, useGpuixRequired } from "../hooks/use-gpuix.js";
|
|
5
|
+
import { createMotionComponent } from "./index.js";
|
|
6
|
+
const ReorderContext = createContext(null);
|
|
7
|
+
function Group(props) {
|
|
8
|
+
const gpuix = useGpuix();
|
|
9
|
+
const [controller] = useState(() => new ReorderController());
|
|
10
|
+
const axis = props.axis ?? "y";
|
|
11
|
+
const values = props.values;
|
|
12
|
+
const onReorder = props.onReorder;
|
|
13
|
+
useLayoutEffect(() => {
|
|
14
|
+
controller.configure({
|
|
15
|
+
axis,
|
|
16
|
+
values,
|
|
17
|
+
// The group's items are registered with its own values.
|
|
18
|
+
onReorder: (next) => onReorder(next),
|
|
19
|
+
renderer: gpuix.renderer,
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
const hostProps = { ...props };
|
|
23
|
+
delete hostProps.axis;
|
|
24
|
+
delete hostProps.values;
|
|
25
|
+
delete hostProps.onReorder;
|
|
26
|
+
delete hostProps.as;
|
|
27
|
+
return createElement(ReorderContext.Provider, { value: controller }, createElement(props.as ?? "div", hostProps));
|
|
28
|
+
}
|
|
29
|
+
const itemComponents = new Map();
|
|
30
|
+
function itemComponent(tag) {
|
|
31
|
+
const known = itemComponents.get(tag);
|
|
32
|
+
if (known)
|
|
33
|
+
return known;
|
|
34
|
+
const created = createMotionComponent(tag);
|
|
35
|
+
itemComponents.set(tag, created);
|
|
36
|
+
return created;
|
|
37
|
+
}
|
|
38
|
+
function setRef(ref, node) {
|
|
39
|
+
if (typeof ref === "function")
|
|
40
|
+
ref(node);
|
|
41
|
+
else if (ref)
|
|
42
|
+
ref.current = node;
|
|
43
|
+
}
|
|
44
|
+
function Item(props) {
|
|
45
|
+
const controller = useContext(ReorderContext);
|
|
46
|
+
if (controller === null)
|
|
47
|
+
throw new Error("Reorder.Item must be used inside a Reorder.Group");
|
|
48
|
+
const renderer = useGpuixRequired();
|
|
49
|
+
const [drag] = useState(createReorderDrag);
|
|
50
|
+
const instance = useRef(null);
|
|
51
|
+
const userRef = props.ref;
|
|
52
|
+
const ref = useCallback((node) => {
|
|
53
|
+
instance.current = node;
|
|
54
|
+
setRef(userRef, node);
|
|
55
|
+
}, [userRef]);
|
|
56
|
+
useLayoutEffect(() => {
|
|
57
|
+
const releases = [drag.x, drag.y, drag.active].map((value) => value.bind(renderer));
|
|
58
|
+
return () => {
|
|
59
|
+
for (const release of releases)
|
|
60
|
+
release();
|
|
61
|
+
};
|
|
62
|
+
}, [drag, renderer]);
|
|
63
|
+
const value = props.value;
|
|
64
|
+
useLayoutEffect(() => controller.register(value, {
|
|
65
|
+
elementId: () => instance.current?.id,
|
|
66
|
+
capturePointer: (pointerId) => {
|
|
67
|
+
if (instance.current?.setPointerCapture === undefined) {
|
|
68
|
+
throw new Error("Reorder.Item: the item has no element to capture the pointer on");
|
|
69
|
+
}
|
|
70
|
+
instance.current.setPointerCapture(pointerId);
|
|
71
|
+
},
|
|
72
|
+
releasePointerCapture: (pointerId) => instance.current?.releasePointerCapture?.(pointerId),
|
|
73
|
+
drag,
|
|
74
|
+
}), [controller, value, drag]);
|
|
75
|
+
const hostProps = { ...props };
|
|
76
|
+
delete hostProps.value;
|
|
77
|
+
delete hostProps.as;
|
|
78
|
+
const onPointerDown = props.onPointerDown;
|
|
79
|
+
const onPointerMove = props.onPointerMove;
|
|
80
|
+
const onPointerUp = props.onPointerUp;
|
|
81
|
+
const onPointerCancel = props.onPointerCancel;
|
|
82
|
+
const onLostPointerCapture = props.onLostPointerCapture;
|
|
83
|
+
return createElement(itemComponent(props.as ?? "div"), {
|
|
84
|
+
...hostProps,
|
|
85
|
+
ref,
|
|
86
|
+
layout: true,
|
|
87
|
+
layoutDrag: drag,
|
|
88
|
+
onPointerDown: (event) => {
|
|
89
|
+
onPointerDown?.(event);
|
|
90
|
+
controller.pointerDown(value, event);
|
|
91
|
+
},
|
|
92
|
+
onPointerMove: (event) => {
|
|
93
|
+
onPointerMove?.(event);
|
|
94
|
+
controller.pointerMove(event);
|
|
95
|
+
},
|
|
96
|
+
onPointerUp: (event) => {
|
|
97
|
+
onPointerUp?.(event);
|
|
98
|
+
controller.pointerEnd(value, event);
|
|
99
|
+
},
|
|
100
|
+
onPointerCancel: (event) => {
|
|
101
|
+
onPointerCancel?.(event);
|
|
102
|
+
controller.pointerEnd(value, event);
|
|
103
|
+
},
|
|
104
|
+
onLostPointerCapture: (event) => {
|
|
105
|
+
onLostPointerCapture?.(event);
|
|
106
|
+
controller.pointerEnd(value, event);
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* A list the user reorders by dragging its items along `axis`. An item
|
|
112
|
+
* follows the pointer; when its centre passes a neighbour's, `onReorder`
|
|
113
|
+
* gets the swapped order, and the other items glide to their new slots
|
|
114
|
+
* (`layout`). On release the item glides to its slot.
|
|
115
|
+
*
|
|
116
|
+
* ```tsx
|
|
117
|
+
* <Reorder.Group axis="y" values={items} onReorder={setItems}>
|
|
118
|
+
* {items.map((item) => <Reorder.Item key={item} value={item}>{item}</Reorder.Item>)}
|
|
119
|
+
* </Reorder.Group>
|
|
120
|
+
* ```
|
|
121
|
+
*/
|
|
122
|
+
export const Reorder = { Group, Item };
|
|
123
|
+
//# sourceMappingURL=reorder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reorder.js","sourceRoot":"","sources":["../../src/components/reorder.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/** Headless shadcn-shaped Select components rendered with GPUIX host elements. */
|
|
2
|
+
import React from "react";
|
|
3
|
+
import type { ReactElement, ReactNode } from "react";
|
|
4
|
+
import type { KeyEvent, Props, PublicInstance } from "../types/host.js";
|
|
5
|
+
import type { FloatingContentProps, StateStyle } from "./floating.js";
|
|
6
|
+
export interface SelectItemData {
|
|
7
|
+
value: string;
|
|
8
|
+
label?: ReactNode;
|
|
9
|
+
textValue?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface SelectProps extends Omit<Props, "children" | "onChange"> {
|
|
12
|
+
children?: ReactNode;
|
|
13
|
+
items?: readonly SelectItemData[];
|
|
14
|
+
value?: string;
|
|
15
|
+
defaultValue?: string;
|
|
16
|
+
onValueChange?: (value: string) => void;
|
|
17
|
+
open?: boolean;
|
|
18
|
+
defaultOpen?: boolean;
|
|
19
|
+
onOpenChange?: (open: boolean) => void;
|
|
20
|
+
disabled?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export declare function Select({ children, items: itemsProp, value: valueProp, defaultValue, onValueChange, open: openProp, defaultOpen, onOpenChange, disabled, style, ...props }: SelectProps): ReactElement;
|
|
23
|
+
export interface SelectTriggerState {
|
|
24
|
+
open: boolean;
|
|
25
|
+
disabled: boolean;
|
|
26
|
+
placeholder: boolean;
|
|
27
|
+
}
|
|
28
|
+
export interface SelectTriggerProps extends Omit<Props, "style"> {
|
|
29
|
+
asChild?: boolean;
|
|
30
|
+
disabled?: boolean;
|
|
31
|
+
style?: StateStyle<SelectTriggerState>;
|
|
32
|
+
}
|
|
33
|
+
export declare const SelectTrigger: React.ForwardRefExoticComponent<Omit<SelectTriggerProps, "ref"> & React.RefAttributes<PublicInstance>>;
|
|
34
|
+
export interface SelectValueProps extends Props {
|
|
35
|
+
placeholder?: ReactNode;
|
|
36
|
+
}
|
|
37
|
+
export declare const SelectValue: React.ForwardRefExoticComponent<Omit<SelectValueProps, "ref"> & React.RefAttributes<PublicInstance>>;
|
|
38
|
+
export interface SelectContentProps extends FloatingContentProps {
|
|
39
|
+
onEscapeKeyDown?: (event: KeyEvent) => void;
|
|
40
|
+
}
|
|
41
|
+
export declare const SelectContent: React.ForwardRefExoticComponent<Omit<SelectContentProps, "ref"> & React.RefAttributes<PublicInstance>>;
|
|
42
|
+
export interface SelectItemState {
|
|
43
|
+
selected: boolean;
|
|
44
|
+
highlighted: boolean;
|
|
45
|
+
disabled: boolean;
|
|
46
|
+
}
|
|
47
|
+
export interface SelectItemProps extends Omit<Props, "children" | "style"> {
|
|
48
|
+
value: string;
|
|
49
|
+
disabled?: boolean;
|
|
50
|
+
asChild?: boolean;
|
|
51
|
+
children?: ReactNode | ((state: SelectItemState) => ReactNode);
|
|
52
|
+
style?: StateStyle<SelectItemState>;
|
|
53
|
+
}
|
|
54
|
+
export declare const SelectItem: React.ForwardRefExoticComponent<Omit<SelectItemProps, "ref"> & React.RefAttributes<PublicInstance>>;
|
|
55
|
+
export declare const SelectGroup: React.ForwardRefExoticComponent<Omit<Props, "ref"> & React.RefAttributes<PublicInstance>>;
|
|
56
|
+
export declare const SelectLabel: React.ForwardRefExoticComponent<Omit<Props, "ref"> & React.RefAttributes<PublicInstance>>;
|
|
57
|
+
export declare const SelectSeparator: React.ForwardRefExoticComponent<Omit<Props, "ref"> & React.RefAttributes<PublicInstance>>;
|
|
58
|
+
export declare const SelectScrollUpButton: React.ForwardRefExoticComponent<Omit<Props, "ref"> & React.RefAttributes<PublicInstance>>;
|
|
59
|
+
export declare const SelectScrollDownButton: React.ForwardRefExoticComponent<Omit<Props, "ref"> & React.RefAttributes<PublicInstance>>;
|
|
60
|
+
export { Select as Root, SelectContent as Content, SelectGroup as Group, SelectItem as Item, SelectLabel as Label, SelectScrollDownButton as ScrollDownButton, SelectScrollUpButton as ScrollUpButton, SelectSeparator as Separator, SelectTrigger as Trigger, SelectValue as Value, };
|
|
61
|
+
//# sourceMappingURL=select.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/components/select.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import { jsx as _jsx } from "@ghia/react/jsx-runtime";
|
|
2
|
+
/** Headless shadcn-shaped Select components rendered with GPUIX host elements. */
|
|
3
|
+
import React, { createContext, forwardRef, useCallback, useContext, useLayoutEffect, useMemo, useRef, useState, } from "react";
|
|
4
|
+
import { useGpuix } from "../hooks/use-gpuix.js";
|
|
5
|
+
import { FloatingLayer, floatingRootStyle, renderSlot, resolveStyle, setRefs, useControllableState, DismissableLayer, } from "./floating.js";
|
|
6
|
+
const SelectContext = createContext(null);
|
|
7
|
+
function useSelectContext(name) {
|
|
8
|
+
const context = useContext(SelectContext);
|
|
9
|
+
if (!context)
|
|
10
|
+
throw new Error(`${name} must be used inside Select`);
|
|
11
|
+
return context;
|
|
12
|
+
}
|
|
13
|
+
export function Select({ children, items: itemsProp, value: valueProp, defaultValue, onValueChange, open: openProp, defaultOpen = false, onOpenChange, disabled = false, style, ...props }) {
|
|
14
|
+
const { renderer } = useGpuix();
|
|
15
|
+
const [value, setValue] = useControllableState({
|
|
16
|
+
value: valueProp,
|
|
17
|
+
defaultValue,
|
|
18
|
+
onChange: (nextValue) => {
|
|
19
|
+
if (nextValue !== undefined)
|
|
20
|
+
onValueChange?.(nextValue);
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
const [open, setOpenState] = useControllableState({
|
|
24
|
+
value: openProp,
|
|
25
|
+
defaultValue: defaultOpen,
|
|
26
|
+
onChange: onOpenChange,
|
|
27
|
+
});
|
|
28
|
+
const [activeValue, setActiveValue] = useState(null);
|
|
29
|
+
const [itemsVersion, setItemsVersion] = useState(0);
|
|
30
|
+
const triggerPressedWhileOpen = useRef(false);
|
|
31
|
+
const dismissedByOutsidePress = useRef(false);
|
|
32
|
+
const triggerRef = useRef(null);
|
|
33
|
+
const registeredItems = useRef([]);
|
|
34
|
+
const labels = useMemo(() => {
|
|
35
|
+
const next = new Map();
|
|
36
|
+
for (const item of itemsProp ?? []) {
|
|
37
|
+
next.set(item.value, item.label ?? item.textValue ?? item.value);
|
|
38
|
+
}
|
|
39
|
+
return next;
|
|
40
|
+
}, [itemsProp]);
|
|
41
|
+
const setOpen = (nextOpen, restoreFocus = true) => {
|
|
42
|
+
setOpenState(nextOpen);
|
|
43
|
+
if (!nextOpen && restoreFocus && triggerRef.current) {
|
|
44
|
+
renderer?.focusElement?.(triggerRef.current.id);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
const registerItem = useCallback(({ value: itemValue, disabled: itemDisabled, mounted }) => {
|
|
48
|
+
const existing = registeredItems.current.findIndex((item) => item.value === itemValue);
|
|
49
|
+
if (!mounted) {
|
|
50
|
+
if (existing < 0)
|
|
51
|
+
return;
|
|
52
|
+
registeredItems.current = registeredItems.current.filter((item) => item.value !== itemValue);
|
|
53
|
+
setItemsVersion((version) => version + 1);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
if (existing >= 0) {
|
|
57
|
+
registeredItems.current[existing] = { value: itemValue, disabled: itemDisabled };
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
registeredItems.current = [
|
|
61
|
+
...registeredItems.current,
|
|
62
|
+
{ value: itemValue, disabled: itemDisabled },
|
|
63
|
+
];
|
|
64
|
+
setItemsVersion((version) => version + 1);
|
|
65
|
+
}, []);
|
|
66
|
+
useLayoutEffect(() => {
|
|
67
|
+
if (!open)
|
|
68
|
+
return;
|
|
69
|
+
const selected = registeredItems.current.find((item) => item.value === value && !item.disabled);
|
|
70
|
+
setActiveValue(selected?.value ?? null);
|
|
71
|
+
}, [open, value, itemsVersion]);
|
|
72
|
+
const moveActive = (delta) => {
|
|
73
|
+
if (disabled)
|
|
74
|
+
return;
|
|
75
|
+
const enabled = registeredItems.current.filter((item) => !item.disabled);
|
|
76
|
+
if (enabled.length === 0)
|
|
77
|
+
return;
|
|
78
|
+
const currentIndex = enabled.findIndex((item) => item.value === activeValue);
|
|
79
|
+
const start = currentIndex < 0 ? (delta > 0 ? -1 : 0) : currentIndex;
|
|
80
|
+
const nextIndex = (start + delta + enabled.length) % enabled.length;
|
|
81
|
+
setActiveValue(enabled[nextIndex].value);
|
|
82
|
+
};
|
|
83
|
+
const selectValue = (nextValue) => {
|
|
84
|
+
if (disabled)
|
|
85
|
+
return;
|
|
86
|
+
const item = registeredItems.current.find((candidate) => candidate.value === nextValue);
|
|
87
|
+
if (!item || item.disabled)
|
|
88
|
+
return;
|
|
89
|
+
setValue(nextValue);
|
|
90
|
+
setOpen(false);
|
|
91
|
+
};
|
|
92
|
+
const context = useMemo(() => ({
|
|
93
|
+
open,
|
|
94
|
+
value,
|
|
95
|
+
disabled,
|
|
96
|
+
labels,
|
|
97
|
+
activeValue,
|
|
98
|
+
triggerPressedWhileOpen,
|
|
99
|
+
dismissedByOutsidePress,
|
|
100
|
+
triggerRef,
|
|
101
|
+
setOpen,
|
|
102
|
+
setActiveValue,
|
|
103
|
+
moveActive,
|
|
104
|
+
selectValue,
|
|
105
|
+
registerItem,
|
|
106
|
+
}), [open, value, disabled, labels, activeValue, registerItem]);
|
|
107
|
+
return (_jsx(SelectContext.Provider, { value: context, children: _jsx("div", { ...props, formControl: disabled ? "disabled" : "enabled", style: floatingRootStyle(style), children: children }) }));
|
|
108
|
+
}
|
|
109
|
+
export const SelectTrigger = forwardRef(function SelectTrigger({ asChild, disabled: disabledProp, style, children, onMouseDown, onClick, onKeyDown, ...props }, forwardedRef) {
|
|
110
|
+
const context = useSelectContext("SelectTrigger");
|
|
111
|
+
const disabled = disabledProp ?? context.disabled;
|
|
112
|
+
const state = {
|
|
113
|
+
open: context.open,
|
|
114
|
+
disabled,
|
|
115
|
+
placeholder: context.value === undefined,
|
|
116
|
+
};
|
|
117
|
+
const ref = (value) => {
|
|
118
|
+
context.triggerRef.current = value;
|
|
119
|
+
setRefs(value, forwardedRef);
|
|
120
|
+
};
|
|
121
|
+
const triggerProps = {
|
|
122
|
+
...props,
|
|
123
|
+
formControl: disabled ? "disabled" : "enabled",
|
|
124
|
+
tabIndex: disabled ? -1 : props.tabIndex,
|
|
125
|
+
style: resolveStyle(style, state),
|
|
126
|
+
onMouseDown: (event) => {
|
|
127
|
+
onMouseDown?.(event);
|
|
128
|
+
context.triggerPressedWhileOpen.current = context.open;
|
|
129
|
+
},
|
|
130
|
+
onClick: (event) => {
|
|
131
|
+
onClick?.(event);
|
|
132
|
+
if (disabled)
|
|
133
|
+
return;
|
|
134
|
+
if (context.dismissedByOutsidePress.current) {
|
|
135
|
+
context.dismissedByOutsidePress.current = false;
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
if (context.triggerPressedWhileOpen.current) {
|
|
139
|
+
context.triggerPressedWhileOpen.current = false;
|
|
140
|
+
context.setOpen(false);
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
context.setOpen(!context.open);
|
|
144
|
+
},
|
|
145
|
+
onKeyDown: (event) => {
|
|
146
|
+
onKeyDown?.(event);
|
|
147
|
+
if (disabled)
|
|
148
|
+
return;
|
|
149
|
+
// preventDefault keeps the key from also scrolling, which is what an arrow key or
|
|
150
|
+
// Space does when nothing claims it.
|
|
151
|
+
if (event.key === "ArrowDown" || (event.key === "n" && event.modifiers?.ctrl)) {
|
|
152
|
+
event.preventDefault();
|
|
153
|
+
if (!context.open)
|
|
154
|
+
context.setOpen(true);
|
|
155
|
+
else
|
|
156
|
+
context.moveActive(1);
|
|
157
|
+
}
|
|
158
|
+
else if (event.key === "ArrowUp" || (event.key === "p" && event.modifiers?.ctrl)) {
|
|
159
|
+
event.preventDefault();
|
|
160
|
+
if (!context.open)
|
|
161
|
+
context.setOpen(true);
|
|
162
|
+
else
|
|
163
|
+
context.moveActive(-1);
|
|
164
|
+
}
|
|
165
|
+
else if (event.key === "Enter" || event.key === " ") {
|
|
166
|
+
event.preventDefault();
|
|
167
|
+
context.setOpen(!context.open);
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
return renderSlot({ asChild, children, props: triggerProps, ref, defaultTabIndex: 0 });
|
|
172
|
+
});
|
|
173
|
+
export const SelectValue = forwardRef(function SelectValue({ placeholder, children, ...props }, ref) {
|
|
174
|
+
const context = useSelectContext("SelectValue");
|
|
175
|
+
const label = context.value === undefined ? undefined : context.labels.get(context.value);
|
|
176
|
+
return _jsx("div", { ...props, ref: ref, children: children ?? label ?? context.value ?? placeholder });
|
|
177
|
+
});
|
|
178
|
+
export const SelectContent = forwardRef(function SelectContent({ children, onMouseDownOutside, onKeyDown, onEscapeKeyDown, tabIndex = -1, style, ...props }, forwardedRef) {
|
|
179
|
+
const context = useSelectContext("SelectContent");
|
|
180
|
+
if (!context.open)
|
|
181
|
+
return null;
|
|
182
|
+
return (_jsx(DismissableLayer, { onEscapeKeyDown: (event) => {
|
|
183
|
+
onEscapeKeyDown?.(event);
|
|
184
|
+
context.setOpen(false);
|
|
185
|
+
}, children: _jsx(FloatingLayer, { ...props, ref: forwardedRef,
|
|
186
|
+
// Focused only to receive keys; the highlighted item shows where
|
|
187
|
+
// the user is, so the popup gets no focus look of its own.
|
|
188
|
+
style: { keyboardFocusDim: false, ...style }, tabIndex: tabIndex, autoFocus: true, onMouseDownOutside: (event) => {
|
|
189
|
+
onMouseDownOutside?.(event);
|
|
190
|
+
context.dismissedByOutsidePress.current = true;
|
|
191
|
+
queueMicrotask(() => {
|
|
192
|
+
context.dismissedByOutsidePress.current = false;
|
|
193
|
+
});
|
|
194
|
+
context.setOpen(false, false);
|
|
195
|
+
}, onKeyDown: (event) => {
|
|
196
|
+
onKeyDown?.(event);
|
|
197
|
+
// The popup is modal, like Base UI: Tab stays inside until it closes.
|
|
198
|
+
if (event.key === "Tab") {
|
|
199
|
+
event.preventDefault();
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
if (context.disabled)
|
|
203
|
+
return;
|
|
204
|
+
if (event.key === "ArrowDown" || (event.key === "n" && event.modifiers?.ctrl)) {
|
|
205
|
+
event.preventDefault();
|
|
206
|
+
context.moveActive(1);
|
|
207
|
+
}
|
|
208
|
+
else if (event.key === "ArrowUp" || (event.key === "p" && event.modifiers?.ctrl)) {
|
|
209
|
+
event.preventDefault();
|
|
210
|
+
context.moveActive(-1);
|
|
211
|
+
}
|
|
212
|
+
else if ((event.key === "Enter" || event.key === " ") && context.activeValue) {
|
|
213
|
+
event.preventDefault();
|
|
214
|
+
context.selectValue(context.activeValue);
|
|
215
|
+
}
|
|
216
|
+
}, children: children }) }));
|
|
217
|
+
});
|
|
218
|
+
export const SelectItem = forwardRef(function SelectItem({ value, disabled = false, asChild, children, style, onClick, onMouseEnter, ...props }, ref) {
|
|
219
|
+
const context = useSelectContext("SelectItem");
|
|
220
|
+
const state = {
|
|
221
|
+
selected: context.value === value,
|
|
222
|
+
highlighted: context.activeValue === value,
|
|
223
|
+
disabled,
|
|
224
|
+
};
|
|
225
|
+
useLayoutEffect(() => {
|
|
226
|
+
context.registerItem({ value, disabled, mounted: true });
|
|
227
|
+
return () => context.registerItem({ value, disabled, mounted: false });
|
|
228
|
+
}, [context.registerItem, value, disabled]);
|
|
229
|
+
const onItemMouseEnter = (event) => {
|
|
230
|
+
onMouseEnter?.(event);
|
|
231
|
+
if (!disabled && !context.disabled)
|
|
232
|
+
context.setActiveValue(value);
|
|
233
|
+
};
|
|
234
|
+
const onItemClick = (event) => {
|
|
235
|
+
onClick?.(event);
|
|
236
|
+
if (!disabled && !context.disabled)
|
|
237
|
+
context.selectValue(value);
|
|
238
|
+
};
|
|
239
|
+
return renderSlot({
|
|
240
|
+
asChild,
|
|
241
|
+
children: typeof children === "function" ? children(state) : children,
|
|
242
|
+
props: {
|
|
243
|
+
...props,
|
|
244
|
+
style: resolveStyle(style, state),
|
|
245
|
+
onMouseEnter: onItemMouseEnter,
|
|
246
|
+
onClick: onItemClick,
|
|
247
|
+
},
|
|
248
|
+
ref,
|
|
249
|
+
});
|
|
250
|
+
});
|
|
251
|
+
export const SelectGroup = forwardRef(function SelectGroup(props, ref) {
|
|
252
|
+
return _jsx("div", { ...props, ref: ref });
|
|
253
|
+
});
|
|
254
|
+
export const SelectLabel = forwardRef(function SelectLabel(props, ref) {
|
|
255
|
+
return _jsx("div", { ...props, ref: ref });
|
|
256
|
+
});
|
|
257
|
+
export const SelectSeparator = forwardRef(function SelectSeparator(props, ref) {
|
|
258
|
+
return _jsx("div", { ...props, ref: ref });
|
|
259
|
+
});
|
|
260
|
+
export const SelectScrollUpButton = forwardRef(function SelectScrollUpButton(props, ref) {
|
|
261
|
+
return _jsx("div", { ...props, ref: ref });
|
|
262
|
+
});
|
|
263
|
+
export const SelectScrollDownButton = forwardRef(function SelectScrollDownButton(props, ref) {
|
|
264
|
+
return _jsx("div", { ...props, ref: ref });
|
|
265
|
+
});
|
|
266
|
+
export { Select as Root, SelectContent as Content, SelectGroup as Group, SelectItem as Item, SelectLabel as Label, SelectScrollDownButton as ScrollDownButton, SelectScrollUpButton as ScrollUpButton, SelectSeparator as Separator, SelectTrigger as Trigger, SelectValue as Value, };
|
|
267
|
+
//# sourceMappingURL=select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.js","sourceRoot":"","sources":["../../src/components/select.tsx"],"names":[],"mappings":";AAAA,kFAAkF;AAElF,OAAO,KAAK,EAAE,EACZ,aAAa,EACb,UAAU,EACV,WAAW,EACX,UAAU,EACV,eAAe,EACf,OAAO,EACP,MAAM,EACN,QAAQ,GACT,MAAM,OAAO,CAAA;AAGd,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,OAAO,EACP,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,eAAe,CAAA;AAgCtB,MAAM,aAAa,GAAG,aAAa,CAA4B,IAAI,CAAC,CAAA;AAEpE,SAAS,gBAAgB,CAAC,IAAY;IACpC,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC,CAAA;IACzC,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,6BAA6B,CAAC,CAAA;IACnE,OAAO,OAAO,CAAA;AAChB,CAAC;AAcD,MAAM,UAAU,MAAM,CAAC,EACrB,QAAQ,EACR,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,EAChB,YAAY,EACZ,aAAa,EACb,IAAI,EAAE,QAAQ,EACd,WAAW,GAAG,KAAK,EACnB,YAAY,EACZ,QAAQ,GAAG,KAAK,EAChB,KAAK,EACL,GAAG,KAAK,EACI;IACZ,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAA;IAC/B,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,oBAAoB,CAAqB;QACjE,KAAK,EAAE,SAAS;QAChB,YAAY;QACZ,QAAQ,EAAE,CAAC,SAAS,EAAE,EAAE;YACtB,IAAI,SAAS,KAAK,SAAS;gBAAE,aAAa,EAAE,CAAC,SAAS,CAAC,CAAA;QACzD,CAAC;KACF,CAAC,CAAA;IACF,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,GAAG,oBAAoB,CAAC;QAChD,KAAK,EAAE,QAAQ;QACf,YAAY,EAAE,WAAW;QACzB,QAAQ,EAAE,YAAY;KACvB,CAAC,CAAA;IACF,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IACnE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IACnD,MAAM,uBAAuB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC7C,MAAM,uBAAuB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC7C,MAAM,UAAU,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAA;IACtD,MAAM,eAAe,GAAG,MAAM,CAAqB,EAAE,CAAC,CAAA;IACtD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE;QAC1B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAqB,CAAA;QACzC,KAAK,MAAM,IAAI,IAAI,SAAS,IAAI,EAAE,EAAE,CAAC;YACnC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,CAAA;QAClE,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;IAEf,MAAM,OAAO,GAAG,CAAC,QAAiB,EAAE,YAAY,GAAG,IAAI,EAAE,EAAE;QACzD,YAAY,CAAC,QAAQ,CAAC,CAAA;QACtB,IAAI,CAAC,QAAQ,IAAI,YAAY,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACpD,QAAQ,EAAE,YAAY,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACjD,CAAC;IACH,CAAC,CAAA;IAED,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAA2C,EAAE,EAAE;QACjG,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAA;QACtF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,QAAQ,GAAG,CAAC;gBAAE,OAAM;YACxB,eAAe,CAAC,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAA;YAC5F,eAAe,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,CAAA;YACzC,OAAM;QACR,CAAC;QACD,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;YAClB,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAA;YAChF,OAAM;QACR,CAAC;QACD,eAAe,CAAC,OAAO,GAAG;YACxB,GAAG,eAAe,CAAC,OAAO;YAC1B,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE;SAC7C,CAAA;QACD,eAAe,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,CAAA;IAC3C,CAAC,EACD,EAAE,CACH,CAAA;IAED,eAAe,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,IAAI;YAAE,OAAM;QACjB,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,CAC3C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CACjD,CAAA;QACD,cAAc,CAAC,QAAQ,EAAE,KAAK,IAAI,IAAI,CAAC,CAAA;IACzC,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAA;IAE/B,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,EAAE;QACnC,IAAI,QAAQ;YAAE,OAAM;QACpB,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACxE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;QAChC,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC,CAAA;QAC5E,MAAM,KAAK,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAA;QACpE,MAAM,SAAS,GAAG,CAAC,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAA;QACnE,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAA;IAC1C,CAAC,CAAA;IAED,MAAM,WAAW,GAAG,CAAC,SAAiB,EAAE,EAAE;QACxC,IAAI,QAAQ;YAAE,OAAM;QACpB,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,KAAK,SAAS,CAAC,CAAA;QACvF,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAM;QAClC,QAAQ,CAAC,SAAS,CAAC,CAAA;QACnB,OAAO,CAAC,KAAK,CAAC,CAAA;IAChB,CAAC,CAAA;IAED,MAAM,OAAO,GAAG,OAAO,CACrB,GAAG,EAAE,CAAC,CAAC;QACL,IAAI;QACJ,KAAK;QACL,QAAQ;QACR,MAAM;QACN,WAAW;QACX,uBAAuB;QACvB,uBAAuB;QACvB,UAAU;QACV,OAAO;QACP,cAAc;QACd,UAAU;QACV,WAAW;QACX,YAAY;KACb,CAAC,EACF,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAC3D,CAAA;IAED,OAAO,CACL,KAAC,aAAa,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YACpC,iBAAS,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC,YAC5F,QAAQ,GACL,GACiB,CAC1B,CAAA;AACH,CAAC;AAcD,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CACrC,SAAS,aAAa,CACpB,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAC/F,YAAY;IAEZ,MAAM,OAAO,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAA;IACjD,MAAM,QAAQ,GAAG,YAAY,IAAI,OAAO,CAAC,QAAQ,CAAA;IACjD,MAAM,KAAK,GAAG;QACZ,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,QAAQ;QACR,WAAW,EAAE,OAAO,CAAC,KAAK,KAAK,SAAS;KACzC,CAAA;IACD,MAAM,GAAG,GAAG,CAAC,KAA4B,EAAE,EAAE;QAC3C,OAAO,CAAC,UAAU,CAAC,OAAO,GAAG,KAAK,CAAA;QAClC,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;IAC9B,CAAC,CAAA;IACD,MAAM,YAAY,GAAU;QAC1B,GAAG,KAAK;QACR,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QAC9C,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ;QACxC,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC;QACjC,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE;YACrB,WAAW,EAAE,CAAC,KAAK,CAAC,CAAA;YACpB,OAAO,CAAC,uBAAuB,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAA;QACxD,CAAC;QACD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACjB,OAAO,EAAE,CAAC,KAAK,CAAC,CAAA;YAChB,IAAI,QAAQ;gBAAE,OAAM;YACpB,IAAI,OAAO,CAAC,uBAAuB,CAAC,OAAO,EAAE,CAAC;gBAC5C,OAAO,CAAC,uBAAuB,CAAC,OAAO,GAAG,KAAK,CAAA;gBAC/C,OAAM;YACR,CAAC;YACD,IAAI,OAAO,CAAC,uBAAuB,CAAC,OAAO,EAAE,CAAC;gBAC5C,OAAO,CAAC,uBAAuB,CAAC,OAAO,GAAG,KAAK,CAAA;gBAC/C,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;gBACtB,OAAM;YACR,CAAC;YACD,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAChC,CAAC;QACD,SAAS,EAAE,CAAC,KAAe,EAAE,EAAE;YAC7B,SAAS,EAAE,CAAC,KAAK,CAAC,CAAA;YAClB,IAAI,QAAQ;gBAAE,OAAM;YACpB,kFAAkF;YAClF,qCAAqC;YACrC,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC;gBAC9E,KAAK,CAAC,cAAc,EAAE,CAAA;gBACtB,IAAI,CAAC,OAAO,CAAC,IAAI;oBAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;;oBACnC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;YAC5B,CAAC;iBAAM,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC;gBACnF,KAAK,CAAC,cAAc,EAAE,CAAA;gBACtB,IAAI,CAAC,OAAO,CAAC,IAAI;oBAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;;oBACnC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;YAC7B,CAAC;iBAAM,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;gBACtD,KAAK,CAAC,cAAc,EAAE,CAAA;gBACtB,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YAChC,CAAC;QACH,CAAC;KACF,CAAA;IACD,OAAO,UAAU,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC,CAAA;AACxF,CAAC,CACF,CAAA;AAMD,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CACnC,SAAS,WAAW,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG;IAC3D,MAAM,OAAO,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAA;IAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IACzF,OAAO,iBAAS,KAAK,EAAE,GAAG,EAAE,GAAG,YAAG,QAAQ,IAAI,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,WAAW,GAAO,CAAA;AAC5F,CAAC,CACF,CAAA;AAMD,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CACrC,SAAS,aAAa,CACpB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAC5F,YAAY;IAEZ,MAAM,OAAO,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAA;IACjD,IAAI,CAAC,OAAO,CAAC,IAAI;QAAE,OAAO,IAAI,CAAA;IAC9B,OAAO,CACL,KAAC,gBAAgB,IACf,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE;YACzB,eAAe,EAAE,CAAC,KAAK,CAAC,CAAA;YACxB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACxB,CAAC,YAED,KAAC,aAAa,OACR,KAAK,EACT,GAAG,EAAE,YAAY;YACjB,iEAAiE;YACjE,2DAA2D;YAC3D,KAAK,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAC5C,QAAQ,EAAE,QAAQ,EAClB,SAAS,QACT,kBAAkB,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC5B,kBAAkB,EAAE,CAAC,KAAK,CAAC,CAAA;gBAC3B,OAAO,CAAC,uBAAuB,CAAC,OAAO,GAAG,IAAI,CAAA;gBAC9C,cAAc,CAAC,GAAG,EAAE;oBAClB,OAAO,CAAC,uBAAuB,CAAC,OAAO,GAAG,KAAK,CAAA;gBACjD,CAAC,CAAC,CAAA;gBACF,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YAC/B,CAAC,EACD,SAAS,EAAE,CAAC,KAAe,EAAE,EAAE;gBAC7B,SAAS,EAAE,CAAC,KAAK,CAAC,CAAA;gBAClB,sEAAsE;gBACtE,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;oBACxB,KAAK,CAAC,cAAc,EAAE,CAAA;oBACtB,OAAM;gBACR,CAAC;gBACD,IAAI,OAAO,CAAC,QAAQ;oBAAE,OAAM;gBAC5B,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC;oBAC9E,KAAK,CAAC,cAAc,EAAE,CAAA;oBACtB,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;gBACvB,CAAC;qBAAM,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC;oBACnF,KAAK,CAAC,cAAc,EAAE,CAAA;oBACtB,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;gBACxB,CAAC;qBAAM,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;oBAC/E,KAAK,CAAC,cAAc,EAAE,CAAA;oBACtB,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;gBAC1C,CAAC;YACH,CAAC,YAEA,QAAQ,GACK,GACC,CACpB,CAAA;AACH,CAAC,CACF,CAAA;AAgBD,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAClC,SAAS,UAAU,CACjB,EAAE,KAAK,EAAE,QAAQ,GAAG,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,KAAK,EAAE,EACtF,GAAG;IAEH,MAAM,OAAO,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAA;IAC9C,MAAM,KAAK,GAAG;QACZ,QAAQ,EAAE,OAAO,CAAC,KAAK,KAAK,KAAK;QACjC,WAAW,EAAE,OAAO,CAAC,WAAW,KAAK,KAAK;QAC1C,QAAQ;KACT,CAAA;IACD,eAAe,CAAC,GAAG,EAAE;QACnB,OAAO,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QACxD,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;IACxE,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAA;IAC3C,MAAM,gBAAgB,GAAG,CAAC,KAAqB,EAAE,EAAE;QACjD,YAAY,EAAE,CAAC,KAAK,CAAC,CAAA;QACrB,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ;YAAE,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;IACnE,CAAC,CAAA;IACD,MAAM,WAAW,GAAG,CAAC,KAAuB,EAAE,EAAE;QAC9C,OAAO,EAAE,CAAC,KAAK,CAAC,CAAA;QAChB,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ;YAAE,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;IAChE,CAAC,CAAA;IACD,OAAO,UAAU,CAAC;QAChB,OAAO;QACP,QAAQ,EAAE,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ;QACrE,KAAK,EAAE;YACL,GAAG,KAAK;YACR,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC;YACjC,YAAY,EAAE,gBAAgB;YAC9B,OAAO,EAAE,WAAW;SACrB;QACD,GAAG;KACJ,CAAC,CAAA;AACJ,CAAC,CACF,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAwB,SAAS,WAAW,CAAC,KAAK,EAAE,GAAG;IAC1F,OAAO,iBAAS,KAAK,EAAE,GAAG,EAAE,GAAG,GAAI,CAAA;AACrC,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAwB,SAAS,WAAW,CAAC,KAAK,EAAE,GAAG;IAC1F,OAAO,iBAAS,KAAK,EAAE,GAAG,EAAE,GAAG,GAAI,CAAA;AACrC,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CACvC,SAAS,eAAe,CAAC,KAAK,EAAE,GAAG;IACjC,OAAO,iBAAS,KAAK,EAAE,GAAG,EAAE,GAAG,GAAI,CAAA;AACrC,CAAC,CACF,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAC5C,SAAS,oBAAoB,CAAC,KAAK,EAAE,GAAG;IACtC,OAAO,iBAAS,KAAK,EAAE,GAAG,EAAE,GAAG,GAAI,CAAA;AACrC,CAAC,CACF,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAC9C,SAAS,sBAAsB,CAAC,KAAK,EAAE,GAAG;IACxC,OAAO,iBAAS,KAAK,EAAE,GAAG,EAAE,GAAG,GAAI,CAAA;AACrC,CAAC,CACF,CAAA;AAED,OAAO,EACL,MAAM,IAAI,IAAI,EACd,aAAa,IAAI,OAAO,EACxB,WAAW,IAAI,KAAK,EACpB,UAAU,IAAI,IAAI,EAClB,WAAW,IAAI,KAAK,EACpB,sBAAsB,IAAI,gBAAgB,EAC1C,oBAAoB,IAAI,cAAc,EACtC,eAAe,IAAI,SAAS,EAC5B,aAAa,IAAI,OAAO,EACxB,WAAW,IAAI,KAAK,GACrB,CAAA"}
|