@fuf-stack/pixels 1.3.5 → 1.3.7
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/dist/Json/index.cjs +2 -2
- package/dist/Json/index.js +1 -1
- package/dist/Menu/index.cjs +2 -2
- package/dist/Menu/index.d.cts +2 -2
- package/dist/Menu/index.d.ts +2 -2
- package/dist/Menu/index.js +1 -1
- package/dist/{Menu-DDKcN7N3.d.cts → Menu-CS28E7nM.d.cts} +3 -1
- package/dist/{Menu-DDKcN7N3.d.ts → Menu-CS28E7nM.d.ts} +3 -1
- package/dist/Progress/index.cjs +3 -3
- package/dist/Progress/index.js +2 -2
- package/dist/ProgressCircular/index.cjs +3 -3
- package/dist/ProgressCircular/index.js +2 -2
- package/dist/{chunk-DBECHNB6.js → chunk-EZT2D2DJ.js} +2 -2
- package/dist/chunk-EZT2D2DJ.js.map +1 -0
- package/dist/{chunk-VTSVKRA7.js → chunk-GGXNWO3B.js} +1 -1
- package/dist/chunk-GGXNWO3B.js.map +1 -0
- package/dist/{chunk-Q6M2562H.cjs → chunk-JTVT63LG.cjs} +56 -59
- package/dist/chunk-JTVT63LG.cjs.map +1 -0
- package/dist/{chunk-FFNMGR72.js → chunk-JZNGNJI5.js} +2 -2
- package/dist/{chunk-EYUII2LV.js → chunk-PENUA26F.js} +2 -2
- package/dist/{chunk-RZGLEDWN.cjs → chunk-PICJQ5IH.cjs} +3 -3
- package/dist/{chunk-RZGLEDWN.cjs.map → chunk-PICJQ5IH.cjs.map} +1 -1
- package/dist/{chunk-7ZIK4LWC.cjs → chunk-SCVJ4C6F.cjs} +1 -1
- package/dist/{chunk-7ZIK4LWC.cjs.map → chunk-SCVJ4C6F.cjs.map} +1 -1
- package/dist/{chunk-KM3PZ3GH.cjs → chunk-WSVXM7H4.cjs} +3 -3
- package/dist/{chunk-KM3PZ3GH.cjs.map → chunk-WSVXM7H4.cjs.map} +1 -1
- package/dist/{chunk-HS7ECIHM.js → chunk-XAGW2N5O.js} +56 -59
- package/dist/chunk-XAGW2N5O.js.map +1 -0
- package/dist/{chunk-T5TNFSDI.cjs → chunk-ZLXLW3EW.cjs} +2 -2
- package/dist/{chunk-T5TNFSDI.cjs.map → chunk-ZLXLW3EW.cjs.map} +1 -1
- package/dist/hooks/index.cjs +2 -2
- package/dist/hooks/index.js +1 -1
- package/dist/index.cjs +6 -6
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +5 -5
- package/package.json +4 -4
- package/dist/chunk-DBECHNB6.js.map +0 -1
- package/dist/chunk-HS7ECIHM.js.map +0 -1
- package/dist/chunk-Q6M2562H.cjs.map +0 -1
- package/dist/chunk-VTSVKRA7.js.map +0 -1
- /package/dist/{chunk-FFNMGR72.js.map → chunk-JZNGNJI5.js.map} +0 -0
- /package/dist/{chunk-EYUII2LV.js.map → chunk-PENUA26F.js.map} +0 -0
package/dist/Json/index.cjs
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var _chunkJTVT63LGcjs = require('../chunk-JTVT63LG.cjs');
|
|
5
5
|
require('../chunk-3BZVACEC.cjs');
|
|
6
6
|
require('../chunk-AHEA4IJV.cjs');
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
exports.Json =
|
|
10
|
+
exports.Json = _chunkJTVT63LGcjs.Json_default; exports.default = _chunkJTVT63LGcjs.Json_default2;
|
|
11
11
|
//# sourceMappingURL=index.cjs.map
|
package/dist/Json/index.js
CHANGED
package/dist/Menu/index.cjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var _chunkZLXLW3EWcjs = require('../chunk-ZLXLW3EW.cjs');
|
|
5
5
|
require('../chunk-AHEA4IJV.cjs');
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
exports.Menu =
|
|
9
|
+
exports.Menu = _chunkZLXLW3EWcjs.Menu_default; exports.default = _chunkZLXLW3EWcjs.Menu_default2;
|
|
10
10
|
//# sourceMappingURL=index.cjs.map
|
package/dist/Menu/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { M as Menu } from '../Menu-
|
|
2
|
-
export { b as MenuItem, a as MenuProps, c as MenuSection } from '../Menu-
|
|
1
|
+
import { M as Menu } from '../Menu-CS28E7nM.cjs';
|
|
2
|
+
export { b as MenuItem, a as MenuProps, c as MenuSection } from '../Menu-CS28E7nM.cjs';
|
|
3
3
|
import 'react/jsx-runtime';
|
|
4
4
|
import 'tailwind-variants';
|
|
5
5
|
import '@fuf-stack/pixel-utils';
|
package/dist/Menu/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { M as Menu } from '../Menu-
|
|
2
|
-
export { b as MenuItem, a as MenuProps, c as MenuSection } from '../Menu-
|
|
1
|
+
import { M as Menu } from '../Menu-CS28E7nM.js';
|
|
2
|
+
export { b as MenuItem, a as MenuProps, c as MenuSection } from '../Menu-CS28E7nM.js';
|
|
3
3
|
import 'react/jsx-runtime';
|
|
4
4
|
import 'tailwind-variants';
|
|
5
5
|
import '@fuf-stack/pixel-utils';
|
package/dist/Menu/index.js
CHANGED
|
@@ -88,7 +88,9 @@ interface MenuProps extends VariantProps {
|
|
|
88
88
|
/** HTML data-testid attribute used in e2e tests */
|
|
89
89
|
testId?: string;
|
|
90
90
|
/** When defined a Button will be rendered as trigger (with provided props) instead of unstyled html button */
|
|
91
|
-
triggerButtonProps?: Pick<ButtonProps, 'aria-label' | 'className' | 'color' | 'disableAnimation' | 'disableRipple' | 'disabled' | 'size' | 'variant'
|
|
91
|
+
triggerButtonProps?: Pick<ButtonProps, 'aria-label' | 'className' | 'color' | 'disableAnimation' | 'disableRipple' | 'disabled' | 'size' | 'variant'> & {
|
|
92
|
+
'data-testid'?: string;
|
|
93
|
+
};
|
|
92
94
|
}
|
|
93
95
|
/**
|
|
94
96
|
* Dropdown menu component based on [HeroUI Dropdown](https://www.heroui.com//docs/components/dropdown)
|
|
@@ -88,7 +88,9 @@ interface MenuProps extends VariantProps {
|
|
|
88
88
|
/** HTML data-testid attribute used in e2e tests */
|
|
89
89
|
testId?: string;
|
|
90
90
|
/** When defined a Button will be rendered as trigger (with provided props) instead of unstyled html button */
|
|
91
|
-
triggerButtonProps?: Pick<ButtonProps, 'aria-label' | 'className' | 'color' | 'disableAnimation' | 'disableRipple' | 'disabled' | 'size' | 'variant'
|
|
91
|
+
triggerButtonProps?: Pick<ButtonProps, 'aria-label' | 'className' | 'color' | 'disableAnimation' | 'disableRipple' | 'disabled' | 'size' | 'variant'> & {
|
|
92
|
+
'data-testid'?: string;
|
|
93
|
+
};
|
|
92
94
|
}
|
|
93
95
|
/**
|
|
94
96
|
* Dropdown menu component based on [HeroUI Dropdown](https://www.heroui.com//docs/components/dropdown)
|
package/dist/Progress/index.cjs
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
var
|
|
6
|
-
require('../chunk-
|
|
5
|
+
var _chunkWSVXM7H4cjs = require('../chunk-WSVXM7H4.cjs');
|
|
6
|
+
require('../chunk-SCVJ4C6F.cjs');
|
|
7
7
|
require('../chunk-AHEA4IJV.cjs');
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
exports.Progress =
|
|
12
|
+
exports.Progress = _chunkWSVXM7H4cjs.Progress_default; exports.default = _chunkWSVXM7H4cjs.Progress_default2; exports.progressVariants = _chunkWSVXM7H4cjs.progressVariants;
|
|
13
13
|
//# sourceMappingURL=index.cjs.map
|
package/dist/Progress/index.js
CHANGED
|
@@ -2,8 +2,8 @@ import {
|
|
|
2
2
|
Progress_default,
|
|
3
3
|
Progress_default2,
|
|
4
4
|
progressVariants
|
|
5
|
-
} from "../chunk-
|
|
6
|
-
import "../chunk-
|
|
5
|
+
} from "../chunk-PENUA26F.js";
|
|
6
|
+
import "../chunk-GGXNWO3B.js";
|
|
7
7
|
import "../chunk-OAIRL2FN.js";
|
|
8
8
|
export {
|
|
9
9
|
Progress_default as Progress,
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
var
|
|
6
|
-
require('../chunk-
|
|
5
|
+
var _chunkPICJQ5IHcjs = require('../chunk-PICJQ5IH.cjs');
|
|
6
|
+
require('../chunk-SCVJ4C6F.cjs');
|
|
7
7
|
require('../chunk-AHEA4IJV.cjs');
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
exports.ProgressCircular =
|
|
12
|
+
exports.ProgressCircular = _chunkPICJQ5IHcjs.ProgressCircular_default; exports.default = _chunkPICJQ5IHcjs.ProgressCircular_default2; exports.progressCircularVariants = _chunkPICJQ5IHcjs.progressCircularVariants;
|
|
13
13
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -2,8 +2,8 @@ import {
|
|
|
2
2
|
ProgressCircular_default,
|
|
3
3
|
ProgressCircular_default2,
|
|
4
4
|
progressCircularVariants
|
|
5
|
-
} from "../chunk-
|
|
6
|
-
import "../chunk-
|
|
5
|
+
} from "../chunk-JZNGNJI5.js";
|
|
6
|
+
import "../chunk-GGXNWO3B.js";
|
|
7
7
|
import "../chunk-OAIRL2FN.js";
|
|
8
8
|
export {
|
|
9
9
|
ProgressCircular_default as ProgressCircular,
|
|
@@ -55,7 +55,7 @@ import { jsx as jsx2, jsxs } from "react/jsx-runtime";
|
|
|
55
55
|
var menuVariants = tv({
|
|
56
56
|
slots: {
|
|
57
57
|
item: "",
|
|
58
|
-
trigger: ""
|
|
58
|
+
trigger: "z-auto"
|
|
59
59
|
}
|
|
60
60
|
});
|
|
61
61
|
var isMenuSection = (item) => {
|
|
@@ -166,4 +166,4 @@ export {
|
|
|
166
166
|
Menu_default,
|
|
167
167
|
Menu_default2
|
|
168
168
|
};
|
|
169
|
-
//# sourceMappingURL=chunk-
|
|
169
|
+
//# sourceMappingURL=chunk-EZT2D2DJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/Menu/Menu.tsx","../src/Menu/VerticalDotsIcon.tsx","../src/Menu/index.ts"],"sourcesContent":["import type { TVClassName, TVProps } from '@fuf-stack/pixel-utils';\nimport type { ButtonProps } from '@heroui/button';\nimport type {\n DropdownItemProps as HeroDropdownItemProps,\n DropdownProps as HeroDropdownProps,\n DropdownSectionProps as HeroDropdownSectionProps,\n} from '@heroui/dropdown';\nimport type { Key, ReactNode } from 'react';\n\nimport { Button } from '@heroui/button';\nimport {\n Dropdown as HeroDropdown,\n DropdownItem as HeroDropdownItem,\n DropdownMenu as HeroDropdownMenu,\n DropdownSection as HeroDropdownSection,\n DropdownTrigger as HeroDropdownTrigger,\n} from '@heroui/dropdown';\n\nimport { cn, slugify, tv, variantsToClassNames } from '@fuf-stack/pixel-utils';\n\nimport VerticalDotsIcon from './VerticalDotsIcon';\n\n/**\n * Menu component based on [HeroUI Dropdown](https://www.heroui.com//docs/components/dropdown)\n */\nexport interface MenuItem {\n /** unique identifier */\n key: string;\n /** CSS class name */\n className?: string;\n /** additional description shown under the label */\n description?: string;\n /** disables the menu item */\n disabled?: boolean;\n /** menu item icon */\n icon?: ReactNode;\n /** menu item name */\n label: ReactNode;\n /** click event handler */\n onClick?: HeroDropdownItemProps['onPress'];\n /** e2e test identifier */\n testId?: string;\n}\n\n/**\n * Menu section type\n */\nexport interface MenuSection {\n /** unique identifier */\n key: string;\n /** section label */\n label: ReactNode;\n /** section items (array of MenuItem) */\n items: MenuItem[];\n}\n\n// menu styling variants\nexport const menuVariants = tv({\n slots: {\n item: '',\n trigger: 'z-auto',\n },\n});\n\ntype VariantProps = TVProps<typeof menuVariants>;\ntype ClassName = TVClassName<typeof menuVariants>;\n\nexport interface MenuProps extends VariantProps {\n /** sets HTML aria-label attribute */\n ariaLabel?: string;\n /** child components */\n children?: ReactNode;\n /** CSS class name */\n className?: ClassName;\n /** menu item structure */\n items: (MenuSection | MenuItem)[];\n /** disable menu trigger */\n isDisabled?: boolean;\n /** placement of the menu */\n placement?: HeroDropdownProps['placement'];\n /** called if item is selected */\n onAction?: (key: Key) => void;\n /** HTML data-testid attribute used in e2e tests */\n testId?: string;\n /** When defined a Button will be rendered as trigger (with provided props) instead of unstyled html button */\n triggerButtonProps?: Pick<\n ButtonProps,\n | 'aria-label'\n | 'className'\n | 'color'\n | 'disableAnimation'\n | 'disableRipple'\n | 'disabled'\n | 'size'\n | 'variant'\n > & { 'data-testid'?: string };\n}\n\n// type guard for MenuSection\nconst isMenuSection = (item: MenuSection | MenuItem): item is MenuSection => {\n return 'items' in item;\n};\n\n// returns String[] of disabled items/keys\nconst getDisabledKeys = (items: (MenuSection | MenuItem)[]): string[] => {\n const flatItems = items.reduce<MenuItem[]>((acc, item) => {\n if (isMenuSection(item)) {\n acc.push(...item.items);\n } else {\n acc.push(item);\n }\n return acc;\n }, []);\n return flatItems\n .filter((item) => {\n return item.disabled === true;\n })\n .map((item) => {\n return item.key;\n });\n};\n\nconst renderMenuItem = (item: MenuItem, itemClassName?: string) => {\n return (\n <HeroDropdownItem\n key={item.key}\n className={cn(itemClassName, item.className)}\n data-testid={slugify(item.testId ?? item.key)}\n description={item.description}\n onPress={item.onClick}\n startContent={item.icon}\n >\n {item.label}\n </HeroDropdownItem>\n );\n};\n\n/**\n * Dropdown menu component based on [HeroUI Dropdown](https://www.heroui.com//docs/components/dropdown)\n */\nconst Menu = ({\n ariaLabel = undefined,\n children = null,\n className: _className = undefined,\n isDisabled = false,\n items,\n onAction = undefined,\n placement = undefined,\n testId = undefined,\n triggerButtonProps = undefined,\n}: MenuProps) => {\n // className from slots\n const variants = menuVariants();\n const className = variantsToClassNames(variants, _className, 'trigger');\n\n // determine trigger button variant\n let triggerButton = (\n <button className={className.trigger} type=\"button\">\n {children}\n </button>\n );\n if (!children) {\n // default to ellipsis icon when no children are provided\n triggerButton = (\n <Button\n isIconOnly\n className={cn('outline-divider min-w-0 outline', className.trigger)}\n radius=\"full\"\n size=\"sm\"\n variant=\"light\"\n {...triggerButtonProps}\n >\n <VerticalDotsIcon />\n </Button>\n );\n } else if (triggerButtonProps) {\n // use provided triggerButtonProps with hero button\n triggerButton = (\n <Button className={className.trigger} {...triggerButtonProps}>\n {children}\n </Button>\n );\n }\n\n return (\n <HeroDropdown\n aria-label={ariaLabel}\n isDisabled={isDisabled}\n placement={placement}\n >\n <HeroDropdownTrigger data-testid={testId}>\n {/* NOTE: type and aria properties are injected by HeroDropdownTrigger */}\n {triggerButton}\n </HeroDropdownTrigger>\n <HeroDropdownMenu\n disabledKeys={getDisabledKeys(items)}\n items={items}\n onAction={onAction}\n >\n {(item) => {\n if ('items' in item) {\n return (\n <HeroDropdownSection\n key={item.key}\n items={item.items}\n title={item.label as HeroDropdownSectionProps['title']}\n >\n {(sectionItem) => {\n return renderMenuItem(sectionItem, className.item);\n }}\n </HeroDropdownSection>\n );\n }\n return renderMenuItem(item, className.item);\n }}\n </HeroDropdownMenu>\n </HeroDropdown>\n );\n};\n\nexport default Menu;\n","import type { SVGProps } from 'react';\n\n// Default Icon for Menu button\nconst VerticalDotsIcon = ({\n size = 24,\n width,\n height,\n ...props\n}: SVGProps<SVGSVGElement> & { size?: number }) => {\n return (\n <svg\n aria-hidden=\"true\"\n fill=\"none\"\n focusable=\"false\"\n height={size ?? height}\n role=\"presentation\"\n viewBox=\"0 0 24 24\"\n width={size ?? width}\n {...props}\n >\n <path\n d=\"M12 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 12c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n\nexport default VerticalDotsIcon;\n","import Menu from './Menu';\n\nexport type { MenuProps, MenuItem, MenuSection } from './Menu';\n\nexport { Menu };\n\nexport default Menu;\n"],"mappings":"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","names":["jsx","Menu_default"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/useDebounce.ts","../src/hooks/useIsInitialRenderCycle.ts","../src/hooks/useLocalStorage.ts"],"sourcesContent":["/* eslint-disable import-x/prefer-default-export */\n\nimport { useEffect, useState } from 'react';\n\nexport const useDebounce = <Value>(value: Value, delay: number) => {\n // State and setters for debounced value\n const [debouncedValue, setDebouncedValue] = useState(value);\n useEffect(\n () => {\n // Update debounced value after delay\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n // Cancel the timeout if value changes (also on delay change or unmount)\n // This is how we prevent debounced value from updating if value is changed ...\n // .. within the delay period. Timeout gets cleared and restarted.\n return () => {\n clearTimeout(handler);\n };\n },\n [value, delay], // Only re-call effect if value or delay changes\n );\n return debouncedValue;\n};\n","/* eslint-disable import-x/prefer-default-export */\n\nimport { useEffect, useRef } from 'react';\n\n/**\n * A hook that returns true on initial render and false afterward.\n *\n * @returns {boolean} - True on initial render, false afterward\n */\nexport const useIsInitialRenderCycle = (): boolean => {\n // Use ref to avoid re-renders\n const isInitialRender = useRef(true);\n\n // Update ref after first render\n useEffect(() => {\n // Set to false after component mounts\n isInitialRender.current = false;\n\n // No cleanup needed for this effect\n }, []);\n\n return isInitialRender.current;\n};\n","/* eslint-disable import-x/prefer-default-export */\n\nimport type { Dispatch, SetStateAction } from 'react';\n\nimport { useEffect, useState } from 'react';\n\nexport const useLocalStorage = <T>(\n key: string,\n initialValue: T | (() => T),\n): [T, Dispatch<SetStateAction<T>>] => {\n // Get from local storage then\n // parse stored json or return initialValue\n const readValue = () => {\n // Prevent build error \"window is undefined\" but keep keep working\n if (typeof window === 'undefined') {\n return initialValue;\n }\n\n try {\n const item = window.localStorage.getItem(key);\n return item ? JSON.parse(item) : initialValue;\n } catch (error) {\n console.warn(`Error reading localStorage key “${key}”:`, error);\n return initialValue;\n }\n };\n\n // State to store our value\n // Pass initial state function to useState so logic is only executed once\n const [storedValue, setStoredValue] = useState<T>(readValue);\n\n // Return a wrapped version of useState's setter function that ...\n // ... persists the new value to localStorage.\n const setValue: Dispatch<SetStateAction<T>> = (value) => {\n // Prevent build error \"window is undefined\" but keeps working\n if (typeof window === 'undefined') {\n console.warn(\n `Tried setting localStorage key “${key}” even though environment is not a client`,\n );\n }\n\n try {\n // Allow value to be a function so we have the same API as useState\n const newValue = value instanceof Function ? value(storedValue) : value;\n\n // Save to local storage\n window.localStorage.setItem(key, JSON.stringify(newValue));\n\n // Save state\n setStoredValue(newValue);\n\n // We dispatch a custom event so every useLocalStorage hook are notified\n window.dispatchEvent(new Event('local-storage'));\n } catch (error) {\n console.warn(`Error setting localStorage key “${key}”:`, error);\n }\n };\n\n useEffect(() => {\n setStoredValue(readValue());\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const handleStorageChange = () => {\n setStoredValue(readValue());\n };\n\n // this only works for other documents, not the current one\n window.addEventListener('storage', handleStorageChange);\n\n // this is a custom event, triggered in writeValueToLocalStorage\n window.addEventListener('local-storage', handleStorageChange);\n\n return () => {\n window.removeEventListener('storage', handleStorageChange);\n window.removeEventListener('local-storage', handleStorageChange);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return [storedValue, setValue];\n};\n"],"mappings":";AAEA,SAAS,WAAW,gBAAgB;AAE7B,IAAM,cAAc,CAAQ,OAAc,UAAkB;AAEjE,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAS,KAAK;AAC1D;AAAA,IACE,MAAM;AAEJ,YAAM,UAAU,WAAW,MAAM;AAC/B,0BAAkB,KAAK;AAAA,MACzB,GAAG,KAAK;AAIR,aAAO,MAAM;AACX,qBAAa,OAAO;AAAA,MACtB;AAAA,IACF;AAAA,IACA,CAAC,OAAO,KAAK;AAAA;AAAA,EACf;AACA,SAAO;AACT;;;ACrBA,SAAS,aAAAA,YAAW,cAAc;AAO3B,IAAM,0BAA0B,MAAe;AAEpD,QAAM,kBAAkB,OAAO,IAAI;AAGnC,EAAAA,WAAU,MAAM;AAEd,oBAAgB,UAAU;AAAA,EAG5B,GAAG,CAAC,CAAC;AAEL,SAAO,gBAAgB;AACzB;;;AClBA,SAAS,aAAAC,YAAW,YAAAC,iBAAgB;AAE7B,IAAM,kBAAkB,CAC7B,KACA,iBACqC;AAGrC,QAAM,YAAY,MAAM;AAEtB,QAAI,OAAO,WAAW,aAAa;AACjC,aAAO;AAAA,IACT;AAEA,QAAI;AACF,YAAM,OAAO,OAAO,aAAa,QAAQ,GAAG;AAC5C,aAAO,OAAO,KAAK,MAAM,IAAI,IAAI;AAAA,IACnC,SAAS,OAAO;AACd,cAAQ,KAAK,wCAAmC,GAAG,WAAM,KAAK;AAC9D,aAAO;AAAA,IACT;AAAA,EACF;AAIA,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAY,SAAS;AAI3D,QAAM,WAAwC,CAAC,UAAU;AAEvD,QAAI,OAAO,WAAW,aAAa;AACjC,cAAQ;AAAA,QACN,wCAAmC,GAAG;AAAA,MACxC;AAAA,IACF;AAEA,QAAI;AAEF,YAAM,WAAW,iBAAiB,WAAW,MAAM,WAAW,IAAI;AAGlE,aAAO,aAAa,QAAQ,KAAK,KAAK,UAAU,QAAQ,CAAC;AAGzD,qBAAe,QAAQ;AAGvB,aAAO,cAAc,IAAI,MAAM,eAAe,CAAC;AAAA,IACjD,SAAS,OAAO;AACd,cAAQ,KAAK,wCAAmC,GAAG,WAAM,KAAK;AAAA,IAChE;AAAA,EACF;AAEA,EAAAD,WAAU,MAAM;AACd,mBAAe,UAAU,CAAC;AAAA,EAE5B,GAAG,CAAC,CAAC;AAEL,EAAAA,WAAU,MAAM;AACd,UAAM,sBAAsB,MAAM;AAChC,qBAAe,UAAU,CAAC;AAAA,IAC5B;AAGA,WAAO,iBAAiB,WAAW,mBAAmB;AAGtD,WAAO,iBAAiB,iBAAiB,mBAAmB;AAE5D,WAAO,MAAM;AACX,aAAO,oBAAoB,WAAW,mBAAmB;AACzD,aAAO,oBAAoB,iBAAiB,mBAAmB;AAAA,IACjE;AAAA,EAEF,GAAG,CAAC,CAAC;AAEL,SAAO,CAAC,aAAa,QAAQ;AAC/B;","names":["useEffect","useEffect","useState"]}
|