@fpkit/acss 6.2.0 → 6.3.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/libs/chunk-25KCUE3R.cjs +17 -0
- package/libs/chunk-25KCUE3R.cjs.map +1 -0
- package/libs/chunk-34NWHFHP.js +10 -0
- package/libs/chunk-34NWHFHP.js.map +1 -0
- package/libs/{chunk-SQ44OCJ2.js → chunk-6NMLU5FA.js} +2 -2
- package/libs/{chunk-GVVCXXKI.cjs → chunk-6YVR4TDM.cjs} +3 -3
- package/libs/chunk-DSQ2TUCR.js +7 -0
- package/libs/chunk-DSQ2TUCR.js.map +1 -0
- package/libs/{chunk-H6A2CUWA.js → chunk-VQTCTLFN.js} +2 -2
- package/libs/chunk-ZJ4RUKI2.cjs +14 -0
- package/libs/chunk-ZJ4RUKI2.cjs.map +1 -0
- package/libs/{chunk-H4JRUNKU.cjs → chunk-ZOPHCNFD.cjs} +3 -3
- package/libs/components/button.cjs +3 -3
- package/libs/components/button.d.cts +34 -1
- package/libs/components/button.d.ts +34 -1
- package/libs/components/button.js +1 -1
- package/libs/components/buttons/button.css +1 -1
- package/libs/components/buttons/button.css.map +1 -1
- package/libs/components/buttons/button.min.css +2 -2
- package/libs/components/buttons/icon-button.css +1 -0
- package/libs/components/buttons/icon-button.css.map +1 -0
- package/libs/components/buttons/icon-button.min.css +3 -0
- package/libs/components/dialog/dialog.cjs +4 -4
- package/libs/components/dialog/dialog.js +2 -2
- package/libs/components/icons/icon.d.cts +1 -1
- package/libs/components/icons/icon.d.ts +1 -1
- package/libs/components/link/link.css +1 -1
- package/libs/components/link/link.min.css +1 -1
- package/libs/components/modal.cjs +3 -3
- package/libs/components/modal.js +2 -2
- package/libs/components/popover/popover.cjs +3 -8
- package/libs/components/popover/popover.css +1 -0
- package/libs/components/popover/popover.css.map +1 -0
- package/libs/components/popover/popover.d.cts +54 -26
- package/libs/components/popover/popover.d.ts +54 -26
- package/libs/components/popover/popover.js +1 -2
- package/libs/components/popover/popover.min.css +3 -0
- package/libs/hooks.cjs +3 -6
- package/libs/hooks.cjs.map +1 -1
- package/libs/hooks.d.cts +30 -10
- package/libs/hooks.d.ts +30 -10
- package/libs/hooks.js +5 -1
- package/libs/hooks.js.map +1 -1
- package/libs/{icons-48788561.d.ts → icons-2c09535c.d.ts} +32 -32
- package/libs/icons.d.cts +1 -1
- package/libs/icons.d.ts +1 -1
- package/libs/index.cjs +35 -35
- package/libs/index.cjs.map +1 -1
- package/libs/index.css +1 -1
- package/libs/index.css.map +1 -1
- package/libs/index.d.cts +64 -5
- package/libs/index.d.ts +64 -5
- package/libs/index.js +9 -10
- package/libs/index.js.map +1 -1
- package/package.json +2 -2
- package/src/components/buttons/README.mdx +107 -11
- package/src/components/buttons/STYLES.mdx +182 -47
- package/src/components/buttons/button.scss +93 -16
- package/src/components/buttons/button.stories.tsx +149 -0
- package/src/components/buttons/button.test.tsx +12 -0
- package/src/components/buttons/button.tsx +50 -6
- package/src/components/buttons/icon-button.scss +45 -0
- package/src/components/buttons/icon-button.stories.tsx +200 -0
- package/src/components/buttons/icon-button.test.tsx +132 -0
- package/src/components/buttons/icon-button.tsx +72 -0
- package/src/components/form/select.tsx +55 -51
- package/src/components/link/link.scss +2 -2
- package/src/components/popover/README.mdx +478 -0
- package/src/components/popover/STYLES.mdx +389 -0
- package/src/components/popover/index.ts +3 -0
- package/src/components/popover/popover.scss +249 -0
- package/src/components/popover/popover.stories.tsx +315 -15
- package/src/components/popover/popover.test.tsx +249 -37
- package/src/components/popover/popover.tsx +165 -62
- package/src/hooks/popover/popover.tsx +26 -10
- package/src/hooks/popover/use-popover.tsx +30 -10
- package/src/hooks.ts +5 -0
- package/src/index.scss +1 -0
- package/src/index.ts +1 -0
- package/src/styles/buttons/button.css +78 -16
- package/src/styles/buttons/button.css.map +1 -1
- package/src/styles/buttons/icon-button.css +32 -0
- package/src/styles/buttons/icon-button.css.map +1 -0
- package/src/styles/index.css +268 -18
- package/src/styles/index.css.map +1 -1
- package/src/styles/link/link.css +2 -2
- package/src/styles/popover/popover.css +190 -0
- package/src/styles/popover/popover.css.map +1 -0
- package/src/types/popover.d.ts +64 -0
- package/libs/chunk-4I5MF54P.js +0 -8
- package/libs/chunk-4I5MF54P.js.map +0 -1
- package/libs/chunk-GCGKYLDG.js +0 -7
- package/libs/chunk-GCGKYLDG.js.map +0 -1
- package/libs/chunk-NZVSXRTB.cjs +0 -16
- package/libs/chunk-NZVSXRTB.cjs.map +0 -1
- package/libs/chunk-PDD4N5P5.cjs +0 -10
- package/libs/chunk-PDD4N5P5.cjs.map +0 -1
- package/libs/chunk-S7NIA6PI.cjs +0 -17
- package/libs/chunk-S7NIA6PI.cjs.map +0 -1
- package/libs/chunk-X2RDXWH5.js +0 -10
- package/libs/chunk-X2RDXWH5.js.map +0 -1
- /package/libs/{chunk-SQ44OCJ2.js.map → chunk-6NMLU5FA.js.map} +0 -0
- /package/libs/{chunk-GVVCXXKI.cjs.map → chunk-6YVR4TDM.cjs.map} +0 -0
- /package/libs/{chunk-H6A2CUWA.js.map → chunk-VQTCTLFN.js.map} +0 -0
- /package/libs/{chunk-H4JRUNKU.cjs.map → chunk-ZOPHCNFD.cjs.map} +0 -0
|
@@ -1,40 +1,68 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* @property {ReactNode} children - The content to show in the popover
|
|
7
|
-
* @property {ReactNode} [content] - Optional alternative content for popover
|
|
4
|
+
* Props for the Popover component using native HTML popover API
|
|
8
5
|
*/
|
|
9
|
-
|
|
6
|
+
interface PopoverProps {
|
|
7
|
+
/** Unique ID for popover (required for popovertarget attribute) */
|
|
8
|
+
id?: string;
|
|
9
|
+
/** Content to display inside the popover */
|
|
10
10
|
children: React.ReactNode;
|
|
11
|
-
|
|
11
|
+
/** Custom trigger element (default: button with triggerLabel) */
|
|
12
|
+
trigger?: React.ReactNode;
|
|
13
|
+
/** Aria-label for default trigger button */
|
|
14
|
+
triggerLabel?: string;
|
|
15
|
+
/** Popover mode: "auto" (light dismiss) or "manual" (explicit close) */
|
|
16
|
+
mode?: 'auto' | 'manual';
|
|
17
|
+
/** Preferred placement position relative to trigger */
|
|
18
|
+
placement?: 'top' | 'bottom' | 'left' | 'right';
|
|
19
|
+
/** Controlled open state (optional) */
|
|
20
|
+
isOpen?: boolean;
|
|
21
|
+
/** Callback when popover toggles open/closed */
|
|
22
|
+
onToggle?: (open: boolean) => void;
|
|
23
|
+
/** Show close button (default: true for manual mode, false for auto) */
|
|
24
|
+
showCloseButton?: boolean;
|
|
25
|
+
/** Aria-label for close button */
|
|
26
|
+
closeButtonLabel?: string;
|
|
27
|
+
/** Show positioning arrow */
|
|
28
|
+
showArrow?: boolean;
|
|
29
|
+
/** Custom CSS class for popover element */
|
|
30
|
+
className?: string;
|
|
31
|
+
/** Inline CSS variables for theming */
|
|
12
32
|
styles?: React.CSSProperties;
|
|
13
|
-
}
|
|
14
|
-
declare const defaultStyles: React.CSSProperties;
|
|
33
|
+
}
|
|
15
34
|
/**
|
|
16
|
-
* Popover component
|
|
17
|
-
*
|
|
18
|
-
* @param props - The props for the component
|
|
19
|
-
* @param props.children - The content to show in the popover
|
|
20
|
-
* @param props.popoverTrigger - The element that triggers the popover on hover
|
|
35
|
+
* Popover component using native HTML popover API
|
|
21
36
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
37
|
+
* Provides automatic top-layer rendering, light dismiss behavior,
|
|
38
|
+
* and accessibility features built into the platform.
|
|
24
39
|
*
|
|
25
|
-
*
|
|
40
|
+
* **Browser Requirements:**
|
|
41
|
+
* - Chrome 125+, Edge 125+, Safari 17.4+
|
|
42
|
+
* - Requires CSS anchor positioning support for optimal placement
|
|
26
43
|
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```tsx
|
|
46
|
+
* <Popover id="my-popover" triggerLabel="Open Menu">
|
|
47
|
+
* <p>Popover content here</p>
|
|
48
|
+
* </Popover>
|
|
49
|
+
* ```
|
|
29
50
|
*
|
|
30
|
-
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```tsx
|
|
53
|
+
* <Popover
|
|
54
|
+
* id="custom-popover"
|
|
55
|
+
* mode="manual"
|
|
56
|
+
* placement="top"
|
|
57
|
+
* trigger={<button>Custom Trigger</button>}
|
|
58
|
+
* >
|
|
59
|
+
* <h3>Popover Title</h3>
|
|
60
|
+
* <p>This requires explicit close action.</p>
|
|
61
|
+
* </Popover>
|
|
62
|
+
* ```
|
|
31
63
|
*
|
|
32
|
-
*
|
|
64
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/popover
|
|
33
65
|
*/
|
|
34
|
-
declare const Popover:
|
|
35
|
-
({ children, popoverTrigger, styles, ...props }: PopoverProps): JSX.Element;
|
|
36
|
-
displayName: string;
|
|
37
|
-
styles: React.CSSProperties;
|
|
38
|
-
};
|
|
66
|
+
declare const Popover: React.FC<PopoverProps>;
|
|
39
67
|
|
|
40
|
-
export { Popover, PopoverProps, Popover as default
|
|
68
|
+
export { Popover, PopoverProps, Popover as default };
|
|
@@ -1,40 +1,68 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* @property {ReactNode} children - The content to show in the popover
|
|
7
|
-
* @property {ReactNode} [content] - Optional alternative content for popover
|
|
4
|
+
* Props for the Popover component using native HTML popover API
|
|
8
5
|
*/
|
|
9
|
-
|
|
6
|
+
interface PopoverProps {
|
|
7
|
+
/** Unique ID for popover (required for popovertarget attribute) */
|
|
8
|
+
id?: string;
|
|
9
|
+
/** Content to display inside the popover */
|
|
10
10
|
children: React.ReactNode;
|
|
11
|
-
|
|
11
|
+
/** Custom trigger element (default: button with triggerLabel) */
|
|
12
|
+
trigger?: React.ReactNode;
|
|
13
|
+
/** Aria-label for default trigger button */
|
|
14
|
+
triggerLabel?: string;
|
|
15
|
+
/** Popover mode: "auto" (light dismiss) or "manual" (explicit close) */
|
|
16
|
+
mode?: 'auto' | 'manual';
|
|
17
|
+
/** Preferred placement position relative to trigger */
|
|
18
|
+
placement?: 'top' | 'bottom' | 'left' | 'right';
|
|
19
|
+
/** Controlled open state (optional) */
|
|
20
|
+
isOpen?: boolean;
|
|
21
|
+
/** Callback when popover toggles open/closed */
|
|
22
|
+
onToggle?: (open: boolean) => void;
|
|
23
|
+
/** Show close button (default: true for manual mode, false for auto) */
|
|
24
|
+
showCloseButton?: boolean;
|
|
25
|
+
/** Aria-label for close button */
|
|
26
|
+
closeButtonLabel?: string;
|
|
27
|
+
/** Show positioning arrow */
|
|
28
|
+
showArrow?: boolean;
|
|
29
|
+
/** Custom CSS class for popover element */
|
|
30
|
+
className?: string;
|
|
31
|
+
/** Inline CSS variables for theming */
|
|
12
32
|
styles?: React.CSSProperties;
|
|
13
|
-
}
|
|
14
|
-
declare const defaultStyles: React.CSSProperties;
|
|
33
|
+
}
|
|
15
34
|
/**
|
|
16
|
-
* Popover component
|
|
17
|
-
*
|
|
18
|
-
* @param props - The props for the component
|
|
19
|
-
* @param props.children - The content to show in the popover
|
|
20
|
-
* @param props.popoverTrigger - The element that triggers the popover on hover
|
|
35
|
+
* Popover component using native HTML popover API
|
|
21
36
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
37
|
+
* Provides automatic top-layer rendering, light dismiss behavior,
|
|
38
|
+
* and accessibility features built into the platform.
|
|
24
39
|
*
|
|
25
|
-
*
|
|
40
|
+
* **Browser Requirements:**
|
|
41
|
+
* - Chrome 125+, Edge 125+, Safari 17.4+
|
|
42
|
+
* - Requires CSS anchor positioning support for optimal placement
|
|
26
43
|
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```tsx
|
|
46
|
+
* <Popover id="my-popover" triggerLabel="Open Menu">
|
|
47
|
+
* <p>Popover content here</p>
|
|
48
|
+
* </Popover>
|
|
49
|
+
* ```
|
|
29
50
|
*
|
|
30
|
-
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```tsx
|
|
53
|
+
* <Popover
|
|
54
|
+
* id="custom-popover"
|
|
55
|
+
* mode="manual"
|
|
56
|
+
* placement="top"
|
|
57
|
+
* trigger={<button>Custom Trigger</button>}
|
|
58
|
+
* >
|
|
59
|
+
* <h3>Popover Title</h3>
|
|
60
|
+
* <p>This requires explicit close action.</p>
|
|
61
|
+
* </Popover>
|
|
62
|
+
* ```
|
|
31
63
|
*
|
|
32
|
-
*
|
|
64
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/popover
|
|
33
65
|
*/
|
|
34
|
-
declare const Popover:
|
|
35
|
-
({ children, popoverTrigger, styles, ...props }: PopoverProps): JSX.Element;
|
|
36
|
-
displayName: string;
|
|
37
|
-
styles: React.CSSProperties;
|
|
38
|
-
};
|
|
66
|
+
declare const Popover: React.FC<PopoverProps>;
|
|
39
67
|
|
|
40
|
-
export { Popover, PopoverProps, Popover as default
|
|
68
|
+
export { Popover, PopoverProps, Popover as default };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
.fpkit-popover{--popover-bg: #ffffff;--popover-border: 0.0625rem solid #ccc;--popover-border-radius: 0.5rem;--popover-padding: 1rem;--popover-margin: 0.5rem;--popover-max-width: 20rem;--popover-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.1), 0 0.125rem 0.25rem rgba(0, 0, 0, 0.06);--popover-arrow-size: 0.5rem;--popover-arrow-color: var(--popover-bg);--popover-close-size: 1.5rem;--popover-close-color: #666;--popover-close-hover-color: #000;--popover-close-hover-bg: rgba(0, 0, 0, 0.05);background:var(--popover-bg);border:var(--popover-border);border-radius:var(--popover-border-radius);padding:var(--popover-padding);max-width:var(--popover-max-width);box-shadow:var(--popover-shadow);margin:0}.fpkit-popover[data-placement=top]{margin-bottom:var(--popover-margin)}.fpkit-popover[data-placement=bottom]{margin-top:var(--popover-margin)}.fpkit-popover[data-placement=left]{margin-right:var(--popover-margin)}.fpkit-popover[data-placement=right]{margin-left:var(--popover-margin)}.fpkit-popover:popover-open{opacity:1;transform:scale(1);transition:opacity .2s ease-out,transform .2s ease-out,overlay .2s ease-out allow-discrete,display .2s ease-out allow-discrete}@starting-style{.fpkit-popover:popover-open{opacity:0;transform:scale(0.95)}}.fpkit-popover:not(:popover-open){opacity:0;transform:scale(0.95);transition:opacity .2s ease-in,transform .2s ease-in,overlay .2s ease-in allow-discrete,display .2s ease-in allow-discrete}.fpkit-popover::backdrop{background:rgba(0,0,0,.3);-webkit-backdrop-filter:blur(0.125rem);backdrop-filter:blur(0.125rem);transition:background .2s ease-out,overlay .2s ease-out allow-discrete,display .2s ease-out allow-discrete,-webkit-backdrop-filter .2s ease-out;transition:background .2s ease-out,backdrop-filter .2s ease-out,overlay .2s ease-out allow-discrete,display .2s ease-out allow-discrete;transition:background .2s ease-out,backdrop-filter .2s ease-out,overlay .2s ease-out allow-discrete,display .2s ease-out allow-discrete,-webkit-backdrop-filter .2s ease-out}@starting-style{.fpkit-popover::backdrop{background:rgba(0,0,0,0);-webkit-backdrop-filter:blur(0);backdrop-filter:blur(0)}}.fpkit-popover-content{position:relative;display:block}.fpkit-popover-close{position:absolute;top:.5rem;right:.5rem;width:var(--popover-close-size);height:var(--popover-close-size);display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,0);border:none;border-radius:.25rem;color:var(--popover-close-color);font-size:1rem;line-height:1;cursor:pointer;transition:background-color .15s ease,color .15s ease}.fpkit-popover-close:hover{background:var(--popover-close-hover-bg);color:var(--popover-close-hover-color)}.fpkit-popover-close:focus-visible{outline:.125rem solid currentColor;outline-offset:.125rem}.fpkit-popover-arrow{position:absolute;width:var(--popover-arrow-size);height:var(--popover-arrow-size);background:var(--popover-arrow-color);transform:rotate(45deg);border:inherit}.fpkit-popover-arrow[data-placement=top]{bottom:calc(var(--popover-arrow-size)/-2);left:50%;margin-left:calc(var(--popover-arrow-size)/-2);border-top:none;border-left:none}.fpkit-popover-arrow[data-placement=bottom]{top:calc(var(--popover-arrow-size)/-2);left:50%;margin-left:calc(var(--popover-arrow-size)/-2);border-bottom:none;border-right:none}.fpkit-popover-arrow[data-placement=left]{right:calc(var(--popover-arrow-size)/-2);top:50%;margin-top:calc(var(--popover-arrow-size)/-2);border-left:none;border-bottom:none}.fpkit-popover-arrow[data-placement=right]{left:calc(var(--popover-arrow-size)/-2);top:50%;margin-top:calc(var(--popover-arrow-size)/-2);border-right:none;border-top:none}.fpkit-popover-trigger{padding:.5rem 1rem;background:#06c;color:#fff;border:none;border-radius:.25rem;font-size:1rem;cursor:pointer;transition:background-color .15s ease,transform .1s ease}.fpkit-popover-trigger:hover{background:#0052a3}.fpkit-popover-trigger:active{transform:scale(0.98)}.fpkit-popover-trigger:focus-visible{outline:.125rem solid currentColor;outline-offset:.125rem}@supports(anchor-name: --trigger){.fpkit-popover-trigger{anchor-name:--trigger}.fpkit-popover{position-anchor:--trigger}.fpkit-popover[data-placement=top]{bottom:anchor(top);left:anchor(center);translate:-50% 0}.fpkit-popover[data-placement=bottom]{top:anchor(bottom);left:anchor(center);translate:-50% 0}.fpkit-popover[data-placement=left]{right:anchor(left);top:anchor(center);translate:0 -50%}.fpkit-popover[data-placement=right]{left:anchor(right);top:anchor(center);translate:0 -50%}}
|
|
2
|
+
|
|
3
|
+
/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3BvcG92ZXIvcG9wb3Zlci5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLGVBRUUscUJBQUEsQ0FDQSxzQ0FBQSxDQUNBLCtCQUFBLENBR0EsdUJBQUEsQ0FDQSx3QkFBQSxDQUNBLDBCQUFBLENBR0EsNkZBQUEsQ0FJQSw0QkFBQSxDQUNBLHdDQUFBLENBR0EsNEJBQUEsQ0FDQSwyQkFBQSxDQUNBLGlDQUFBLENBQ0EsNkNBQUEsQ0FHQSw0QkFBQSxDQUNBLDRCQUFBLENBQ0EsMENBQUEsQ0FDQSw4QkFBQSxDQUNBLGtDQUFBLENBQ0EsZ0NBQUEsQ0FHQSxRQUFBLENBR0EsbUNBQ0UsbUNBQUEsQ0FHRixzQ0FDRSxnQ0FBQSxDQUdGLG9DQUNFLGtDQUFBLENBR0YscUNBQ0UsaUNBQUEsQ0FLSiw0QkFDRSxTQUFBLENBQ0Esa0JBQUEsQ0FDQSw4SEFDRSxDQUtGLGdCQVRGLDRCQVVJLFNBQUEsQ0FDQSxxQkFBQSxDQUFBLENBS0osa0NBQ0UsU0FBQSxDQUNBLHFCQUFBLENBQ0EsMEhBQ0UsQ0FPSix5QkFDRSx5QkFBQSxDQUNBLHNDQUFBLENBQUEsOEJBQUEsQ0FDQSwrSUFDRSxDQURGLHVJQUNFLENBREYsNEtBQ0UsQ0FLRixnQkFURix5QkFVSSx3QkFBQSxDQUNBLCtCQUFBLENBQUEsdUJBQUEsQ0FBQSxDQUtKLHVCQUNFLGlCQUFBLENBQ0EsYUFBQSxDQUlGLHFCQUNFLGlCQUFBLENBQ0EsU0FBQSxDQUNBLFdBQUEsQ0FDQSwrQkFBQSxDQUNBLGdDQUFBLENBQ0EsWUFBQSxDQUNBLGtCQUFBLENBQ0Esc0JBQUEsQ0FDQSx3QkFBQSxDQUNBLFdBQUEsQ0FDQSxvQkFBQSxDQUNBLGdDQUFBLENBQ0EsY0FBQSxDQUNBLGFBQUEsQ0FDQSxjQUFBLENBQ0EscURBQ0UsQ0FHRiwyQkFDRSx3Q0FBQSxDQUNBLHNDQUFBLENBR0YsbUNBQ0Usa0NBQUEsQ0FDQSxzQkFBQSxDQUtKLHFCQUNFLGlCQUFBLENBQ0EsK0JBQUEsQ0FDQSxnQ0FBQSxDQUNBLHFDQUFBLENBQ0EsdUJBQUEsQ0FDQSxjQUFBLENBR0EseUNBQ0UseUNBQUEsQ0FDQSxRQUFBLENBQ0EsOENBQUEsQ0FDQSxlQUFBLENBQ0EsZ0JBQUEsQ0FJRiw0Q0FDRSxzQ0FBQSxDQUNBLFFBQUEsQ0FDQSw4Q0FBQSxDQUNBLGtCQUFBLENBQ0EsaUJBQUEsQ0FJRiwwQ0FDRSx3Q0FBQSxDQUNBLE9BQUEsQ0FDQSw2Q0FBQSxDQUNBLGdCQUFBLENBQ0Esa0JBQUEsQ0FJRiwyQ0FDRSx1Q0FBQSxDQUNBLE9BQUEsQ0FDQSw2Q0FBQSxDQUNBLGlCQUFBLENBQ0EsZUFBQSxDQUtKLHVCQUNFLGtCQUFBLENBQ0EsZUFBQSxDQUNBLFVBQUEsQ0FDQSxXQUFBLENBQ0Esb0JBQUEsQ0FDQSxjQUFBLENBQ0EsY0FBQSxDQUNBLHdEQUNFLENBR0YsNkJBQ0Usa0JBQUEsQ0FHRiw4QkFDRSxxQkFBQSxDQUdGLHFDQUNFLGtDQUFBLENBQ0Esc0JBQUEsQ0FNSixrQ0FDRSx1QkFDRSxxQkFBQSxDQUdGLGVBQ0UseUJBQUEsQ0FFQSxtQ0FDRSxrQkFBQSxDQUNBLG1CQUFBLENBQ0EsZ0JBQUEsQ0FHRixzQ0FDRSxrQkFBQSxDQUNBLG1CQUFBLENBQ0EsZ0JBQUEsQ0FHRixvQ0FDRSxrQkFBQSxDQUNBLGtCQUFBLENBQ0EsZ0JBQUEsQ0FHRixxQ0FDRSxrQkFBQSxDQUNBLGtCQUFBLENBQ0EsZ0JBQUEsQ0FBQSIsImZpbGUiOiJwb3BvdmVyLm1pbi5jc3MifQ== */
|
package/libs/hooks.cjs
CHANGED
|
@@ -1,24 +1,21 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var chunk3D6WUYSL_cjs = require('./chunk-3D6WUYSL.cjs');
|
|
4
|
-
var chunkPDD4N5P5_cjs = require('./chunk-PDD4N5P5.cjs');
|
|
5
4
|
var chunkTON2YGMD_cjs = require('./chunk-TON2YGMD.cjs');
|
|
6
5
|
require('./chunk-LQPWXSCK.cjs');
|
|
7
6
|
require('./chunk-66C2J4IX.cjs');
|
|
7
|
+
var react = require('react');
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
var L=(o,a,n=1)=>{let[c,r]=react.useState(!1),[u,f]=react.useState({top:0,left:0});return {isVisible:c,popoverPosition:u,handlePointerEvent:d=>{d?.stopPropagation();let e=o.current?.offsetHeight||40;if(o.current){let s=o.current.getBoundingClientRect(),{scrollY:t,scrollX:m,innerHeight:i}=window,l=s.bottom+t+n,v=s.left+m,b=l+e,P=a.current?.offsetHeight??e,h=b>t+i?Math.max(t+i-P-e-n,t)-e-n:l;f({top:h,left:v}),r(!0);}},handlePointerLeave:()=>{r(!1);}}};
|
|
10
10
|
|
|
11
11
|
Object.defineProperty(exports, 'useBreadcrumbSegments', {
|
|
12
12
|
enumerable: true,
|
|
13
13
|
get: function () { return chunk3D6WUYSL_cjs.a; }
|
|
14
14
|
});
|
|
15
|
-
Object.defineProperty(exports, 'usePopover', {
|
|
16
|
-
enumerable: true,
|
|
17
|
-
get: function () { return chunkPDD4N5P5_cjs.a; }
|
|
18
|
-
});
|
|
19
15
|
Object.defineProperty(exports, 'useDisabledState', {
|
|
20
16
|
enumerable: true,
|
|
21
17
|
get: function () { return chunkTON2YGMD_cjs.a; }
|
|
22
18
|
});
|
|
19
|
+
exports.usePopover = L;
|
|
23
20
|
//# sourceMappingURL=out.js.map
|
|
24
21
|
//# sourceMappingURL=hooks.cjs.map
|
package/libs/hooks.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"sources":["../src/hooks/popover/use-popover.tsx"],"names":["useState","usePopover","elementRef","hoverRef","spacing","isVisible","setIsVisible","popoverPosition","setPopoverPosition","event","height","rect","scrollY","scrollX","innerHeight","popoverTop","popoverLeft","popoverBottom","popoverHeight","adjustedTop"],"mappings":"4IAAA,OAAS,YAAAA,MAAgB,QA+ClB,IAAMC,EAAa,CACxBC,EACAC,EACAC,EAAU,IACP,CACH,GAAM,CAACC,EAAWC,CAAY,EAAIN,EAAS,EAAK,EAC1C,CAACO,EAAiBC,CAAkB,EAAIR,EAAmB,CAC/D,IAAK,EACL,KAAM,CACR,CAAC,EAsCD,MAAO,CACL,UAAAK,EACA,gBAAAE,EACA,mBAtCAE,GACG,CACHA,GAAO,gBAAgB,EACvB,IAAMC,EAASR,EAAW,SAAS,cAAgB,GACnD,GAAIA,EAAW,QAAS,CACtB,IAAMS,EAAOT,EAAW,QAAQ,sBAAsB,EAChD,CAAE,QAAAU,EAAS,QAAAC,EAAS,YAAAC,CAAY,EAAI,OAEpCC,EAAaJ,EAAK,OAASC,EAAUR,EACrCY,EAAcL,EAAK,KAAOE,EAC1BI,EAAgBF,EAAaL,EAC7BQ,EAAgBf,EAAS,SAAS,cAAgBO,EAElDS,EACJF,EAAgBL,EAAUE,EACtB,KAAK,IACHF,EAAUE,EAAcI,EAAgBR,EAASN,EACjDQ,CACF,EACAF,EACAN,EACAW,EAENP,EAAmB,CACjB,IAAKW,EACL,KAAMH,CACR,CAAC,EACDV,EAAa,EAAI,CACnB,CACF,EAUE,mBARyB,IAAM,CAC/BA,EAAa,EAAK,CACpB,CAOA,CACF","sourcesContent":["import { useState } from 'react'\n\ntype Position = {\n /**\n * @description This is the top position of the popover.\n * @default 0\n */\n top: number\n /**\n * @description This is the left position of the popover.\n * @default 0\n */\n left: number\n}\n\n/**\n * @deprecated This hook is deprecated and will be removed in v3.0.0.\n * Use the native Popover component instead, which provides better accessibility,\n * automatic layer management, and platform-native behavior.\n *\n * @see {@link ../components/popover/popover.tsx} New Popover Component\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/popover} HTML Popover API\n *\n * @description Legacy hook for custom popover positioning with pointer events.\n * Manually calculates popover position and handles show/hide logic.\n *\n * @param elementRef - Ref of the trigger element\n * @param hoverRef - Ref of the popover element\n * @param spacing - Spacing between trigger and popover (in pixels)\n *\n * @example\n * ```tsx\n * // ❌ Old approach (deprecated)\n * const { isVisible, popoverPosition, handlePointerEvent, handlePointerLeave } =\n * usePopover(hoverRef, popOverRef, 1);\n *\n * // ✅ New approach (recommended)\n * import { Popover } from '@fpkit/acss';\n * <Popover id=\"my-popover\" triggerLabel=\"Open\">Content</Popover>\n * ```\n *\n * @returns Hook state and handlers\n * @returns isVisible - Boolean indicating popover visibility\n * @returns popoverPosition - Position object with top/left coordinates\n * @returns handlePointerEvent - Function to show popover on pointer enter\n * @returns handlePointerLeave - Function to hide popover on pointer leave\n */\nexport const usePopover = (\n elementRef: React.RefObject<HTMLElement | HTMLDivElement>,\n hoverRef: React.RefObject<HTMLElement | HTMLDivElement>,\n spacing = 1,\n) => {\n const [isVisible, setIsVisible] = useState(false)\n const [popoverPosition, setPopoverPosition] = useState<Position>({\n top: 0,\n left: 0,\n })\n\n const handlePointerEvent = (\n event: React.MouseEvent<HTMLButtonElement | HTMLElement>,\n ) => {\n event?.stopPropagation()\n const height = elementRef.current?.offsetHeight || 40\n if (elementRef.current) {\n const rect = elementRef.current.getBoundingClientRect()\n const { scrollY, scrollX, innerHeight } = window\n\n const popoverTop = rect.bottom + scrollY + spacing\n const popoverLeft = rect.left + scrollX\n const popoverBottom = popoverTop + height // Adjust the popover height as needed\n const popoverHeight = hoverRef.current?.offsetHeight ?? height // Adjust the popover height as needed\n\n const adjustedTop =\n popoverBottom > scrollY + innerHeight\n ? Math.max(\n scrollY + innerHeight - popoverHeight - height - spacing,\n scrollY,\n ) -\n height -\n spacing\n : popoverTop\n\n setPopoverPosition({\n top: adjustedTop,\n left: popoverLeft,\n })\n setIsVisible(true)\n }\n }\n\n const handlePointerLeave = () => {\n setIsVisible(false)\n }\n\n return {\n isVisible,\n popoverPosition,\n handlePointerEvent,\n handlePointerLeave,\n }\n}\n\nexport default usePopover\n"]}
|
package/libs/hooks.d.cts
CHANGED
|
@@ -16,16 +16,36 @@ type Position = {
|
|
|
16
16
|
left: number;
|
|
17
17
|
};
|
|
18
18
|
/**
|
|
19
|
-
* @
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* @
|
|
24
|
-
* @
|
|
25
|
-
*
|
|
26
|
-
* @
|
|
27
|
-
*
|
|
28
|
-
*
|
|
19
|
+
* @deprecated This hook is deprecated and will be removed in v3.0.0.
|
|
20
|
+
* Use the native Popover component instead, which provides better accessibility,
|
|
21
|
+
* automatic layer management, and platform-native behavior.
|
|
22
|
+
*
|
|
23
|
+
* @see {@link ../components/popover/popover.tsx} New Popover Component
|
|
24
|
+
* @see {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/popover} HTML Popover API
|
|
25
|
+
*
|
|
26
|
+
* @description Legacy hook for custom popover positioning with pointer events.
|
|
27
|
+
* Manually calculates popover position and handles show/hide logic.
|
|
28
|
+
*
|
|
29
|
+
* @param elementRef - Ref of the trigger element
|
|
30
|
+
* @param hoverRef - Ref of the popover element
|
|
31
|
+
* @param spacing - Spacing between trigger and popover (in pixels)
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```tsx
|
|
35
|
+
* // ❌ Old approach (deprecated)
|
|
36
|
+
* const { isVisible, popoverPosition, handlePointerEvent, handlePointerLeave } =
|
|
37
|
+
* usePopover(hoverRef, popOverRef, 1);
|
|
38
|
+
*
|
|
39
|
+
* // ✅ New approach (recommended)
|
|
40
|
+
* import { Popover } from '@fpkit/acss';
|
|
41
|
+
* <Popover id="my-popover" triggerLabel="Open">Content</Popover>
|
|
42
|
+
* ```
|
|
43
|
+
*
|
|
44
|
+
* @returns Hook state and handlers
|
|
45
|
+
* @returns isVisible - Boolean indicating popover visibility
|
|
46
|
+
* @returns popoverPosition - Position object with top/left coordinates
|
|
47
|
+
* @returns handlePointerEvent - Function to show popover on pointer enter
|
|
48
|
+
* @returns handlePointerLeave - Function to hide popover on pointer leave
|
|
29
49
|
*/
|
|
30
50
|
declare const usePopover: (elementRef: React.RefObject<HTMLElement | HTMLDivElement>, hoverRef: React.RefObject<HTMLElement | HTMLDivElement>, spacing?: number) => {
|
|
31
51
|
isVisible: boolean;
|
package/libs/hooks.d.ts
CHANGED
|
@@ -16,16 +16,36 @@ type Position = {
|
|
|
16
16
|
left: number;
|
|
17
17
|
};
|
|
18
18
|
/**
|
|
19
|
-
* @
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* @
|
|
24
|
-
* @
|
|
25
|
-
*
|
|
26
|
-
* @
|
|
27
|
-
*
|
|
28
|
-
*
|
|
19
|
+
* @deprecated This hook is deprecated and will be removed in v3.0.0.
|
|
20
|
+
* Use the native Popover component instead, which provides better accessibility,
|
|
21
|
+
* automatic layer management, and platform-native behavior.
|
|
22
|
+
*
|
|
23
|
+
* @see {@link ../components/popover/popover.tsx} New Popover Component
|
|
24
|
+
* @see {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/popover} HTML Popover API
|
|
25
|
+
*
|
|
26
|
+
* @description Legacy hook for custom popover positioning with pointer events.
|
|
27
|
+
* Manually calculates popover position and handles show/hide logic.
|
|
28
|
+
*
|
|
29
|
+
* @param elementRef - Ref of the trigger element
|
|
30
|
+
* @param hoverRef - Ref of the popover element
|
|
31
|
+
* @param spacing - Spacing between trigger and popover (in pixels)
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```tsx
|
|
35
|
+
* // ❌ Old approach (deprecated)
|
|
36
|
+
* const { isVisible, popoverPosition, handlePointerEvent, handlePointerLeave } =
|
|
37
|
+
* usePopover(hoverRef, popOverRef, 1);
|
|
38
|
+
*
|
|
39
|
+
* // ✅ New approach (recommended)
|
|
40
|
+
* import { Popover } from '@fpkit/acss';
|
|
41
|
+
* <Popover id="my-popover" triggerLabel="Open">Content</Popover>
|
|
42
|
+
* ```
|
|
43
|
+
*
|
|
44
|
+
* @returns Hook state and handlers
|
|
45
|
+
* @returns isVisible - Boolean indicating popover visibility
|
|
46
|
+
* @returns popoverPosition - Position object with top/left coordinates
|
|
47
|
+
* @returns handlePointerEvent - Function to show popover on pointer enter
|
|
48
|
+
* @returns handlePointerLeave - Function to hide popover on pointer leave
|
|
29
49
|
*/
|
|
30
50
|
declare const usePopover: (elementRef: React.RefObject<HTMLElement | HTMLDivElement>, hoverRef: React.RefObject<HTMLElement | HTMLDivElement>, spacing?: number) => {
|
|
31
51
|
isVisible: boolean;
|
package/libs/hooks.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
export { a as useBreadcrumbSegments } from './chunk-2ZJV6KQ3.js';
|
|
2
|
-
export { a as usePopover } from './chunk-GCGKYLDG.js';
|
|
3
2
|
export { a as useDisabledState } from './chunk-75QHTLFO.js';
|
|
4
3
|
import './chunk-M5ES7OWP.js';
|
|
5
4
|
import './chunk-4KJP3L35.js';
|
|
5
|
+
import { useState } from 'react';
|
|
6
|
+
|
|
7
|
+
var L=(o,a,n=1)=>{let[c,r]=useState(!1),[u,f]=useState({top:0,left:0});return {isVisible:c,popoverPosition:u,handlePointerEvent:d=>{d?.stopPropagation();let e=o.current?.offsetHeight||40;if(o.current){let s=o.current.getBoundingClientRect(),{scrollY:t,scrollX:m,innerHeight:i}=window,l=s.bottom+t+n,v=s.left+m,b=l+e,P=a.current?.offsetHeight??e,h=b>t+i?Math.max(t+i-P-e-n,t)-e-n:l;f({top:h,left:v}),r(!0);}},handlePointerLeave:()=>{r(!1);}}};
|
|
8
|
+
|
|
9
|
+
export { L as usePopover };
|
|
6
10
|
//# sourceMappingURL=out.js.map
|
|
7
11
|
//# sourceMappingURL=hooks.js.map
|
package/libs/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"sources":["../src/hooks/popover/use-popover.tsx"],"names":["useState","usePopover","elementRef","hoverRef","spacing","isVisible","setIsVisible","popoverPosition","setPopoverPosition","event","height","rect","scrollY","scrollX","innerHeight","popoverTop","popoverLeft","popoverBottom","popoverHeight","adjustedTop"],"mappings":"wIAAA,OAAS,YAAAA,MAAgB,QA+ClB,IAAMC,EAAa,CACxBC,EACAC,EACAC,EAAU,IACP,CACH,GAAM,CAACC,EAAWC,CAAY,EAAIN,EAAS,EAAK,EAC1C,CAACO,EAAiBC,CAAkB,EAAIR,EAAmB,CAC/D,IAAK,EACL,KAAM,CACR,CAAC,EAsCD,MAAO,CACL,UAAAK,EACA,gBAAAE,EACA,mBAtCAE,GACG,CACHA,GAAO,gBAAgB,EACvB,IAAMC,EAASR,EAAW,SAAS,cAAgB,GACnD,GAAIA,EAAW,QAAS,CACtB,IAAMS,EAAOT,EAAW,QAAQ,sBAAsB,EAChD,CAAE,QAAAU,EAAS,QAAAC,EAAS,YAAAC,CAAY,EAAI,OAEpCC,EAAaJ,EAAK,OAASC,EAAUR,EACrCY,EAAcL,EAAK,KAAOE,EAC1BI,EAAgBF,EAAaL,EAC7BQ,EAAgBf,EAAS,SAAS,cAAgBO,EAElDS,EACJF,EAAgBL,EAAUE,EACtB,KAAK,IACHF,EAAUE,EAAcI,EAAgBR,EAASN,EACjDQ,CACF,EACAF,EACAN,EACAW,EAENP,EAAmB,CACjB,IAAKW,EACL,KAAMH,CACR,CAAC,EACDV,EAAa,EAAI,CACnB,CACF,EAUE,mBARyB,IAAM,CAC/BA,EAAa,EAAK,CACpB,CAOA,CACF","sourcesContent":["import { useState } from 'react'\n\ntype Position = {\n /**\n * @description This is the top position of the popover.\n * @default 0\n */\n top: number\n /**\n * @description This is the left position of the popover.\n * @default 0\n */\n left: number\n}\n\n/**\n * @deprecated This hook is deprecated and will be removed in v3.0.0.\n * Use the native Popover component instead, which provides better accessibility,\n * automatic layer management, and platform-native behavior.\n *\n * @see {@link ../components/popover/popover.tsx} New Popover Component\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/popover} HTML Popover API\n *\n * @description Legacy hook for custom popover positioning with pointer events.\n * Manually calculates popover position and handles show/hide logic.\n *\n * @param elementRef - Ref of the trigger element\n * @param hoverRef - Ref of the popover element\n * @param spacing - Spacing between trigger and popover (in pixels)\n *\n * @example\n * ```tsx\n * // ❌ Old approach (deprecated)\n * const { isVisible, popoverPosition, handlePointerEvent, handlePointerLeave } =\n * usePopover(hoverRef, popOverRef, 1);\n *\n * // ✅ New approach (recommended)\n * import { Popover } from '@fpkit/acss';\n * <Popover id=\"my-popover\" triggerLabel=\"Open\">Content</Popover>\n * ```\n *\n * @returns Hook state and handlers\n * @returns isVisible - Boolean indicating popover visibility\n * @returns popoverPosition - Position object with top/left coordinates\n * @returns handlePointerEvent - Function to show popover on pointer enter\n * @returns handlePointerLeave - Function to hide popover on pointer leave\n */\nexport const usePopover = (\n elementRef: React.RefObject<HTMLElement | HTMLDivElement>,\n hoverRef: React.RefObject<HTMLElement | HTMLDivElement>,\n spacing = 1,\n) => {\n const [isVisible, setIsVisible] = useState(false)\n const [popoverPosition, setPopoverPosition] = useState<Position>({\n top: 0,\n left: 0,\n })\n\n const handlePointerEvent = (\n event: React.MouseEvent<HTMLButtonElement | HTMLElement>,\n ) => {\n event?.stopPropagation()\n const height = elementRef.current?.offsetHeight || 40\n if (elementRef.current) {\n const rect = elementRef.current.getBoundingClientRect()\n const { scrollY, scrollX, innerHeight } = window\n\n const popoverTop = rect.bottom + scrollY + spacing\n const popoverLeft = rect.left + scrollX\n const popoverBottom = popoverTop + height // Adjust the popover height as needed\n const popoverHeight = hoverRef.current?.offsetHeight ?? height // Adjust the popover height as needed\n\n const adjustedTop =\n popoverBottom > scrollY + innerHeight\n ? Math.max(\n scrollY + innerHeight - popoverHeight - height - spacing,\n scrollY,\n ) -\n height -\n spacing\n : popoverTop\n\n setPopoverPosition({\n top: adjustedTop,\n left: popoverLeft,\n })\n setIsVisible(true)\n }\n }\n\n const handlePointerLeave = () => {\n setIsVisible(false)\n }\n\n return {\n isVisible,\n popoverPosition,\n handlePointerEvent,\n handlePointerLeave,\n }\n}\n\nexport default usePopover\n"]}
|