@blockle/blocks-react 1.0.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.
Files changed (223) hide show
  1. package/README.md +25 -0
  2. package/dist/components/accessibility/VisuallyHidden/VisuallyHidden.cjs +20 -0
  3. package/dist/components/accessibility/VisuallyHidden/VisuallyHidden.d.ts +6 -0
  4. package/dist/components/accessibility/VisuallyHidden/VisuallyHidden.js +20 -0
  5. package/dist/components/accessibility/VisuallyHidden/VisuallyHidden.spec.d.ts +1 -0
  6. package/dist/components/accessibility/VisuallyHidden/VisuallyHidden.stories.d.ts +6 -0
  7. package/dist/components/accessibility/VisuallyHidden/index.d.ts +1 -0
  8. package/dist/components/accessibility/VisuallyHidden/visually-hidden.css.cjs +16 -0
  9. package/dist/components/accessibility/VisuallyHidden/visually-hidden.css.d.ts +1 -0
  10. package/dist/components/accessibility/VisuallyHidden/visually-hidden.css.js +16 -0
  11. package/dist/components/display/Divider/Divider.cjs +28 -0
  12. package/dist/components/display/Divider/Divider.d.ts +7 -0
  13. package/dist/components/display/Divider/Divider.js +28 -0
  14. package/dist/components/display/Divider/Divider.spec.d.ts +1 -0
  15. package/dist/components/display/Divider/Divider.stories.d.ts +6 -0
  16. package/dist/components/display/Divider/divider.css.cjs +16 -0
  17. package/dist/components/display/Divider/divider.css.d.ts +1 -0
  18. package/dist/components/display/Divider/divider.css.js +16 -0
  19. package/dist/components/display/Divider/index.d.ts +1 -0
  20. package/dist/components/feedback/Progress/Progress.cjs +55 -0
  21. package/dist/components/feedback/Progress/Progress.d.ts +16 -0
  22. package/dist/components/feedback/Progress/Progress.js +55 -0
  23. package/dist/components/feedback/Progress/Progress.stories.d.ts +5 -0
  24. package/dist/components/feedback/Progress/index.d.ts +1 -0
  25. package/dist/components/feedback/Spinner/Spinner.cjs +27 -0
  26. package/dist/components/feedback/Spinner/Spinner.d.ts +10 -0
  27. package/dist/components/feedback/Spinner/Spinner.js +27 -0
  28. package/dist/components/feedback/Spinner/Spinner.stories.d.ts +5 -0
  29. package/dist/components/feedback/Spinner/index.d.ts +1 -0
  30. package/dist/components/form/Button/Button.cjs +58 -0
  31. package/dist/components/form/Button/Button.css.cjs +16 -0
  32. package/dist/components/form/Button/Button.css.d.ts +1 -0
  33. package/dist/components/form/Button/Button.css.js +16 -0
  34. package/dist/components/form/Button/Button.d.ts +21 -0
  35. package/dist/components/form/Button/Button.js +58 -0
  36. package/dist/components/form/Button/Button.spec.d.ts +1 -0
  37. package/dist/components/form/Button/Button.stories.d.ts +7 -0
  38. package/dist/components/form/Button/index.d.ts +1 -0
  39. package/dist/components/form/Checkbox/Checkbox.cjs +80 -0
  40. package/dist/components/form/Checkbox/Checkbox.d.ts +9 -0
  41. package/dist/components/form/Checkbox/Checkbox.js +80 -0
  42. package/dist/components/form/Checkbox/Checkbox.spec.d.ts +1 -0
  43. package/dist/components/form/Checkbox/Checkbox.stories.d.ts +5 -0
  44. package/dist/components/form/Checkbox/checkbox.css.cjs +32 -0
  45. package/dist/components/form/Checkbox/checkbox.css.d.ts +3 -0
  46. package/dist/components/form/Checkbox/checkbox.css.js +32 -0
  47. package/dist/components/form/Checkbox/index.d.ts +1 -0
  48. package/dist/components/form/Input/Input.cjs +52 -0
  49. package/dist/components/form/Input/Input.d.ts +10 -0
  50. package/dist/components/form/Input/Input.js +52 -0
  51. package/dist/components/form/Input/Input.spec.d.ts +1 -0
  52. package/dist/components/form/Input/Input.stories.d.ts +5 -0
  53. package/dist/components/form/Input/index.d.ts +1 -0
  54. package/dist/components/form/Input/input.css.cjs +21 -0
  55. package/dist/components/form/Input/input.css.d.ts +1 -0
  56. package/dist/components/form/Input/input.css.js +21 -0
  57. package/dist/components/form/Label/Label.cjs +34 -0
  58. package/dist/components/form/Label/Label.d.ts +18 -0
  59. package/dist/components/form/Label/Label.js +34 -0
  60. package/dist/components/form/Label/Label.spec.d.ts +1 -0
  61. package/dist/components/form/Label/Label.stories.d.ts +6 -0
  62. package/dist/components/form/Label/index.d.ts +1 -0
  63. package/dist/components/form/Radio/Radio.cjs +50 -0
  64. package/dist/components/form/Radio/Radio.d.ts +8 -0
  65. package/dist/components/form/Radio/Radio.js +50 -0
  66. package/dist/components/form/Radio/Radio.spec.d.ts +1 -0
  67. package/dist/components/form/Radio/Radio.stories.d.ts +6 -0
  68. package/dist/components/form/Radio/RadioGroup.d.ts +8 -0
  69. package/dist/components/form/Radio/index.d.ts +2 -0
  70. package/dist/components/form/Radio/radio.css.cjs +32 -0
  71. package/dist/components/form/Radio/radio.css.d.ts +3 -0
  72. package/dist/components/form/Radio/radio.css.js +32 -0
  73. package/dist/components/form/Select/Select.cjs +73 -0
  74. package/dist/components/form/Select/Select.d.ts +11 -0
  75. package/dist/components/form/Select/Select.js +73 -0
  76. package/dist/components/form/Select/Select.stories.d.ts +5 -0
  77. package/dist/components/form/Select/index.d.ts +1 -0
  78. package/dist/components/form/Select/select.css.cjs +38 -0
  79. package/dist/components/form/Select/select.css.d.ts +3 -0
  80. package/dist/components/form/Select/select.css.js +38 -0
  81. package/dist/components/form/Slider/Slider.cjs +139 -0
  82. package/dist/components/form/Slider/Slider.d.ts +22 -0
  83. package/dist/components/form/Slider/Slider.js +139 -0
  84. package/dist/components/form/Slider/Slider.spec.d.ts +1 -0
  85. package/dist/components/form/Slider/Slider.stories.d.ts +7 -0
  86. package/dist/components/form/Slider/index.d.ts +1 -0
  87. package/dist/components/form/Slider/slider.css.cjs +75 -0
  88. package/dist/components/form/Slider/slider.css.d.ts +5 -0
  89. package/dist/components/form/Slider/slider.css.js +75 -0
  90. package/dist/components/form/Slider/usePointerProgress.cjs +46 -0
  91. package/dist/components/form/Slider/usePointerProgress.d.ts +11 -0
  92. package/dist/components/form/Slider/usePointerProgress.js +46 -0
  93. package/dist/components/form/Switch/Switch.cjs +73 -0
  94. package/dist/components/form/Switch/Switch.d.ts +6 -0
  95. package/dist/components/form/Switch/Switch.js +73 -0
  96. package/dist/components/form/Switch/Switch.stories.d.ts +5 -0
  97. package/dist/components/form/Switch/index.d.ts +1 -0
  98. package/dist/components/form/Switch/switch.css.cjs +27 -0
  99. package/dist/components/form/Switch/switch.css.d.ts +2 -0
  100. package/dist/components/form/Switch/switch.css.js +27 -0
  101. package/dist/components/layout/Box/Box.cjs +26 -0
  102. package/dist/components/layout/Box/Box.d.ts +10 -0
  103. package/dist/components/layout/Box/Box.js +26 -0
  104. package/dist/components/layout/Box/Box.spec.d.ts +1 -0
  105. package/dist/components/layout/Box/Box.stories.d.ts +6 -0
  106. package/dist/components/layout/Box/index.d.ts +1 -0
  107. package/dist/components/layout/Inline/Inline.cjs +30 -0
  108. package/dist/components/layout/Inline/Inline.d.ts +12 -0
  109. package/dist/components/layout/Inline/Inline.js +30 -0
  110. package/dist/components/layout/Inline/Inline.stories.d.ts +6 -0
  111. package/dist/components/layout/Inline/index.d.ts +1 -0
  112. package/dist/components/layout/Stack/Stack.cjs +27 -0
  113. package/dist/components/layout/Stack/Stack.d.ts +16 -0
  114. package/dist/components/layout/Stack/Stack.js +27 -0
  115. package/dist/components/layout/Stack/Stack.stories.d.ts +6 -0
  116. package/dist/components/layout/Stack/index.d.ts +1 -0
  117. package/dist/components/navigation/Link/Link.cjs +33 -0
  118. package/dist/components/navigation/Link/Link.d.ts +11 -0
  119. package/dist/components/navigation/Link/Link.js +33 -0
  120. package/dist/components/navigation/Link/Link.stories.d.ts +6 -0
  121. package/dist/components/navigation/Link/Link.test.d.ts +1 -0
  122. package/dist/components/navigation/Link/index.d.ts +1 -0
  123. package/dist/components/overlay/Dialog/Dialog.cjs +81 -0
  124. package/dist/components/overlay/Dialog/Dialog.d.ts +12 -0
  125. package/dist/components/overlay/Dialog/Dialog.js +81 -0
  126. package/dist/components/overlay/Dialog/Dialog.stories.d.ts +7 -0
  127. package/dist/components/overlay/Dialog/Dialog.test.d.ts +1 -0
  128. package/dist/components/overlay/Dialog/dialog.css.cjs +22 -0
  129. package/dist/components/overlay/Dialog/dialog.css.d.ts +1 -0
  130. package/dist/components/overlay/Dialog/dialog.css.js +22 -0
  131. package/dist/components/overlay/Dialog/dialogHelper.cjs +21 -0
  132. package/dist/components/overlay/Dialog/dialogHelper.d.ts +6 -0
  133. package/dist/components/overlay/Dialog/dialogHelper.js +21 -0
  134. package/dist/components/overlay/Dialog/index.d.ts +1 -0
  135. package/dist/components/overlay/Popover/Popover.cjs +112 -0
  136. package/dist/components/overlay/Popover/Popover.d.ts +12 -0
  137. package/dist/components/overlay/Popover/Popover.js +112 -0
  138. package/dist/components/overlay/Popover/Popover.stories.d.ts +5 -0
  139. package/dist/components/overlay/Popover/index.d.ts +1 -0
  140. package/dist/components/overlay/Popover/popover-utils.cjs +62 -0
  141. package/dist/components/overlay/Popover/popover-utils.d.ts +2 -0
  142. package/dist/components/overlay/Popover/popover-utils.js +62 -0
  143. package/dist/components/overlay/Portal/Portal.cjs +15 -0
  144. package/dist/components/overlay/Portal/Portal.d.ts +5 -0
  145. package/dist/components/overlay/Portal/Portal.js +15 -0
  146. package/dist/components/overlay/Portal/index.d.ts +1 -0
  147. package/dist/components/overlay/Tooltip/Tooltip.cjs +73 -0
  148. package/dist/components/overlay/Tooltip/Tooltip.d.ts +12 -0
  149. package/dist/components/overlay/Tooltip/Tooltip.js +73 -0
  150. package/dist/components/overlay/Tooltip/Tooltip.stories.d.ts +5 -0
  151. package/dist/components/overlay/Tooltip/index.d.ts +1 -0
  152. package/dist/components/providers/BlocksProvider/BlocksProvider.cjs +35 -0
  153. package/dist/components/providers/BlocksProvider/BlocksProvider.d.ts +9 -0
  154. package/dist/components/providers/BlocksProvider/BlocksProvider.js +35 -0
  155. package/dist/components/providers/BlocksProvider/BlocksProvider.test.d.ts +1 -0
  156. package/dist/components/providers/BlocksProvider/context.cjs +5 -0
  157. package/dist/components/providers/BlocksProvider/context.d.ts +5 -0
  158. package/dist/components/providers/BlocksProvider/context.js +5 -0
  159. package/dist/components/providers/BlocksProvider/index.d.ts +2 -0
  160. package/dist/components/typography/Heading/Heading.cjs +24 -0
  161. package/dist/components/typography/Heading/Heading.d.ts +7 -0
  162. package/dist/components/typography/Heading/Heading.js +24 -0
  163. package/dist/components/typography/Heading/Heading.test.d.ts +1 -0
  164. package/dist/components/typography/Heading/heading.css.cjs +16 -0
  165. package/dist/components/typography/Heading/heading.css.d.ts +1 -0
  166. package/dist/components/typography/Heading/heading.css.js +16 -0
  167. package/dist/components/typography/Heading/heading.stories.d.ts +12 -0
  168. package/dist/components/typography/Heading/index.d.ts +1 -0
  169. package/dist/components/typography/Text/Text.cjs +21 -0
  170. package/dist/components/typography/Text/Text.d.ts +11 -0
  171. package/dist/components/typography/Text/Text.js +21 -0
  172. package/dist/components/typography/Text/Text.stories.d.ts +5 -0
  173. package/dist/components/typography/Text/Text.test.d.ts +1 -0
  174. package/dist/components/typography/Text/index.d.ts +1 -0
  175. package/dist/components/typography/Text/text.css.cjs +16 -0
  176. package/dist/components/typography/Text/text.css.d.ts +1 -0
  177. package/dist/components/typography/Text/text.css.js +16 -0
  178. package/dist/hooks/useClickOutside/useClickOutside.cjs +23 -0
  179. package/dist/hooks/useClickOutside/useClickOutside.d.ts +6 -0
  180. package/dist/hooks/useClickOutside/useClickOutside.js +23 -0
  181. package/dist/hooks/useComponentStyles/index.d.ts +2 -0
  182. package/dist/hooks/useComponentStyles/useComponentStyleDefaultProps.cjs +12 -0
  183. package/dist/hooks/useComponentStyles/useComponentStyleDefaultProps.d.ts +7 -0
  184. package/dist/hooks/useComponentStyles/useComponentStyleDefaultProps.js +12 -0
  185. package/dist/hooks/useComponentStyles/useComponentStyles.cjs +74 -0
  186. package/dist/hooks/useComponentStyles/useComponentStyles.d.ts +2 -0
  187. package/dist/hooks/useComponentStyles/useComponentStyles.js +74 -0
  188. package/dist/hooks/useControlledValue/index.d.ts +1 -0
  189. package/dist/hooks/useControlledValue/useControlledValue.cjs +33 -0
  190. package/dist/hooks/useControlledValue/useControlledValue.d.ts +8 -0
  191. package/dist/hooks/useControlledValue/useControlledValue.js +33 -0
  192. package/dist/hooks/useIsomorphicLayoutEffect/index.d.ts +1 -0
  193. package/dist/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.cjs +6 -0
  194. package/dist/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.d.ts +5 -0
  195. package/dist/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.js +6 -0
  196. package/dist/hooks/useKeyboard/index.d.ts +1 -0
  197. package/dist/hooks/useKeyboard/useKeyboard.cjs +21 -0
  198. package/dist/hooks/useKeyboard/useKeyboard.d.ts +6 -0
  199. package/dist/hooks/useKeyboard/useKeyboard.js +21 -0
  200. package/dist/hooks/useLayer/index.d.ts +1 -0
  201. package/dist/hooks/useLayer/useLayer.cjs +27 -0
  202. package/dist/hooks/useLayer/useLayer.d.ts +1 -0
  203. package/dist/hooks/useLayer/useLayer.js +27 -0
  204. package/dist/hooks/usePreventBodyScroll/index.d.ts +1 -0
  205. package/dist/hooks/usePreventBodyScroll/usePreventBodyScroll.cjs +31 -0
  206. package/dist/hooks/usePreventBodyScroll/usePreventBodyScroll.d.ts +1 -0
  207. package/dist/hooks/usePreventBodyScroll/usePreventBodyScroll.js +31 -0
  208. package/dist/hooks/useRestoreFocus/index.d.ts +1 -0
  209. package/dist/hooks/useRestoreFocus/useRestoreFocus.cjs +19 -0
  210. package/dist/hooks/useRestoreFocus/useRestoreFocus.d.ts +4 -0
  211. package/dist/hooks/useRestoreFocus/useRestoreFocus.js +19 -0
  212. package/dist/hooks/useTheme/index.d.ts +1 -0
  213. package/dist/hooks/useTheme/useTheme.cjs +13 -0
  214. package/dist/hooks/useTheme/useTheme.d.ts +2 -0
  215. package/dist/hooks/useTheme/useTheme.js +13 -0
  216. package/dist/hooks/useVisibilityState/index.d.ts +1 -0
  217. package/dist/hooks/useVisibilityState/useVisibilityState.cjs +17 -0
  218. package/dist/hooks/useVisibilityState/useVisibilityState.d.ts +3 -0
  219. package/dist/hooks/useVisibilityState/useVisibilityState.js +17 -0
  220. package/dist/index.cjs +58 -0
  221. package/dist/index.d.ts +27 -0
  222. package/dist/index.js +58 -0
  223. package/package.json +47 -0
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const blocksCore = require("@blockle/blocks-core");
5
+ const Box = require("../Box/Box.cjs");
6
+ const Stack = ({
7
+ tag: Tag = "div",
8
+ display = "flex",
9
+ children,
10
+ spacing,
11
+ alignX,
12
+ ...restProps
13
+ }) => {
14
+ return /* @__PURE__ */ jsxRuntime.jsx(
15
+ Box.Box,
16
+ {
17
+ asChild: true,
18
+ display,
19
+ gap: spacing,
20
+ flexDirection: "column",
21
+ alignItems: alignX ? blocksCore.alignItemsMap[alignX] : void 0,
22
+ ...restProps,
23
+ children: /* @__PURE__ */ jsxRuntime.jsx(Tag, { children })
24
+ }
25
+ );
26
+ };
27
+ exports.Stack = Stack;
@@ -0,0 +1,16 @@
1
+ import { AlignItemsMap, MarginSprinkles, PaddingSprinkles, ResponsiveDisplayFlex, Sprinkles } from '@blockle/blocks-core';
2
+ export type StackProps = {
3
+ alignX?: keyof AlignItemsMap;
4
+ tag?: 'div' | 'section' | 'ul' | 'ol';
5
+ children: React.ReactNode;
6
+ className?: string;
7
+ display?: ResponsiveDisplayFlex;
8
+ spacing: Sprinkles['gap'];
9
+ style?: React.CSSProperties;
10
+ role?: React.AriaRole;
11
+ /**
12
+ * Start prop is only valid when tag="ol"
13
+ */
14
+ start?: number;
15
+ } & MarginSprinkles & PaddingSprinkles;
16
+ export declare const Stack: React.FC<StackProps>;
@@ -0,0 +1,27 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { alignItemsMap } from "@blockle/blocks-core";
3
+ import { Box } from "../Box/Box.js";
4
+ const Stack = ({
5
+ tag: Tag = "div",
6
+ display = "flex",
7
+ children,
8
+ spacing,
9
+ alignX,
10
+ ...restProps
11
+ }) => {
12
+ return /* @__PURE__ */ jsx(
13
+ Box,
14
+ {
15
+ asChild: true,
16
+ display,
17
+ gap: spacing,
18
+ flexDirection: "column",
19
+ alignItems: alignX ? alignItemsMap[alignX] : void 0,
20
+ ...restProps,
21
+ children: /* @__PURE__ */ jsx(Tag, { children })
22
+ }
23
+ );
24
+ };
25
+ export {
26
+ Stack
27
+ };
@@ -0,0 +1,6 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+ import { Stack, StackProps } from './Stack';
3
+ declare const _default: Meta<typeof Stack>;
4
+ export default _default;
5
+ export declare const Default: StoryObj<StackProps>;
6
+ export declare const List: StoryObj<StackProps>;
@@ -0,0 +1 @@
1
+ export { Stack, type StackProps } from './Stack';
@@ -0,0 +1,33 @@
1
+ "use client";
2
+ "use strict";
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
4
+ const jsxRuntime = require("react/jsx-runtime");
5
+ const blocksCore = require("@blockle/blocks-core");
6
+ const blocksReactSlot = require("@blockle/blocks-react-slot");
7
+ const useComponentStyles = require("../../../hooks/useComponentStyles/useComponentStyles.cjs");
8
+ const [Template, Slot] = blocksReactSlot.createSlottable("a");
9
+ const Link = ({
10
+ asChild,
11
+ children,
12
+ className,
13
+ ref,
14
+ underline,
15
+ variant,
16
+ ...restProps
17
+ }) => {
18
+ const linkClassName = useComponentStyles.useComponentStyles("link", {
19
+ base: true,
20
+ variants: { variant, underline }
21
+ });
22
+ return /* @__PURE__ */ jsxRuntime.jsx(
23
+ Template,
24
+ {
25
+ asChild,
26
+ ref,
27
+ className: blocksCore.classnames(className, linkClassName),
28
+ ...restProps,
29
+ children: /* @__PURE__ */ jsxRuntime.jsx(Slot, { children })
30
+ }
31
+ );
32
+ };
33
+ exports.Link = Link;
@@ -0,0 +1,11 @@
1
+ import { ComponentThemes, HTMLElementProps, MarginSprinkles } from '@blockle/blocks-core';
2
+ type LinkTheme = ComponentThemes['link'];
3
+ export type LinkProps = {
4
+ asChild?: boolean;
5
+ children?: React.ReactNode;
6
+ ref?: React.Ref<HTMLAnchorElement>;
7
+ underline?: LinkTheme['variants']['underline'];
8
+ variant?: LinkTheme['variants']['variant'];
9
+ } & MarginSprinkles & HTMLElementProps<HTMLAnchorElement>;
10
+ export declare const Link: React.FC<LinkProps>;
11
+ export {};
@@ -0,0 +1,33 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { classnames } from "@blockle/blocks-core";
4
+ import { createSlottable } from "@blockle/blocks-react-slot";
5
+ import { useComponentStyles } from "../../../hooks/useComponentStyles/useComponentStyles.js";
6
+ const [Template, Slot] = createSlottable("a");
7
+ const Link = ({
8
+ asChild,
9
+ children,
10
+ className,
11
+ ref,
12
+ underline,
13
+ variant,
14
+ ...restProps
15
+ }) => {
16
+ const linkClassName = useComponentStyles("link", {
17
+ base: true,
18
+ variants: { variant, underline }
19
+ });
20
+ return /* @__PURE__ */ jsx(
21
+ Template,
22
+ {
23
+ asChild,
24
+ ref,
25
+ className: classnames(className, linkClassName),
26
+ ...restProps,
27
+ children: /* @__PURE__ */ jsx(Slot, { children })
28
+ }
29
+ );
30
+ };
31
+ export {
32
+ Link
33
+ };
@@ -0,0 +1,6 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+ import { LinkProps } from './Link';
3
+ declare const _default: Meta;
4
+ export default _default;
5
+ export declare const Default: StoryObj<LinkProps>;
6
+ export declare const Play: StoryObj<LinkProps>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export { Link, type LinkProps } from './Link';
@@ -0,0 +1,81 @@
1
+ "use client";
2
+ "use strict";
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
4
+ const jsxRuntime = require("react/jsx-runtime");
5
+ const blocksCore = require("@blockle/blocks-core");
6
+ const react = require("react");
7
+ const useClickOutside = require("../../../hooks/useClickOutside/useClickOutside.cjs");
8
+ const dialog_css = require("./dialog.css.cjs");
9
+ const dialogHelper = require("./dialogHelper.cjs");
10
+ const useComponentStyles = require("../../../hooks/useComponentStyles/useComponentStyles.cjs");
11
+ const useRestoreFocus = require("../../../hooks/useRestoreFocus/useRestoreFocus.cjs");
12
+ const usePreventBodyScroll = require("../../../hooks/usePreventBodyScroll/usePreventBodyScroll.cjs");
13
+ const useKeyboard = require("../../../hooks/useKeyboard/useKeyboard.cjs");
14
+ const useIsomorphicLayoutEffect = require("../../../hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.cjs");
15
+ const Dialog = ({
16
+ children,
17
+ open,
18
+ className,
19
+ onRequestClose,
20
+ size,
21
+ ...restProps
22
+ }) => {
23
+ const dialogClassName = useComponentStyles.useComponentStyles("dialog", {
24
+ dialog: true,
25
+ variants: { size }
26
+ });
27
+ const dialogRef = react.useRef(null);
28
+ const [enabled, setEnabled] = react.useState(true);
29
+ const [visible, setVisible] = react.useState(open);
30
+ useRestoreFocus.useRestoreFocus(open);
31
+ const isNested = dialogHelper.useNestedDialog(open);
32
+ usePreventBodyScroll.usePreventBodyScroll(open && !isNested);
33
+ const onEscape = react.useCallback(
34
+ (event) => {
35
+ event.preventDefault();
36
+ onRequestClose();
37
+ },
38
+ [onRequestClose]
39
+ );
40
+ useKeyboard.useKeyboard("Escape", onEscape, { enabled: open && enabled });
41
+ useClickOutside.useClickOutside(dialogRef, onRequestClose, { enabled: open && enabled });
42
+ useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
43
+ var _a;
44
+ if (open && visible) {
45
+ if (!dialogRef.current || !dialogRef.current.showModal) {
46
+ return;
47
+ }
48
+ dialogRef.current.showModal();
49
+ } else if (open) {
50
+ setVisible(true);
51
+ } else {
52
+ if (!blocksCore.hasAnimationDuration(dialogRef.current)) {
53
+ setVisible(false);
54
+ }
55
+ (_a = dialogRef.current) == null ? void 0 : _a.close();
56
+ }
57
+ }, [open, visible]);
58
+ const onAnimationEnd = react.useCallback(() => {
59
+ if (!open) {
60
+ setVisible(false);
61
+ }
62
+ }, [open]);
63
+ if (!visible) {
64
+ return null;
65
+ }
66
+ const dataOpen = typeof window === "undefined" && open ? true : void 0;
67
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsx(dialogHelper.DialogContext.Provider, { value: { setEnabled }, children: /* @__PURE__ */ jsxRuntime.jsx(
68
+ "dialog",
69
+ {
70
+ ref: dialogRef,
71
+ "aria-modal": "true",
72
+ open: dataOpen,
73
+ className: blocksCore.classnames(dialog_css.dialog, dialogClassName, className),
74
+ onAnimationEnd,
75
+ onTransitionEnd: onAnimationEnd,
76
+ ...restProps,
77
+ children
78
+ }
79
+ ) }) });
80
+ };
81
+ exports.Dialog = Dialog;
@@ -0,0 +1,12 @@
1
+ import { ComponentThemes } from '@blockle/blocks-core';
2
+ type DialogTheme = ComponentThemes['dialog'];
3
+ export type DialogProps = {
4
+ children?: React.ReactNode;
5
+ open: boolean;
6
+ onRequestClose: () => void;
7
+ className?: string;
8
+ size?: DialogTheme['variants']['size'];
9
+ 'aria-label'?: string;
10
+ };
11
+ export declare const Dialog: React.FC<DialogProps>;
12
+ export {};
@@ -0,0 +1,81 @@
1
+ "use client";
2
+ import { jsx, Fragment } from "react/jsx-runtime";
3
+ import { hasAnimationDuration, classnames } from "@blockle/blocks-core";
4
+ import { useRef, useState, useCallback } from "react";
5
+ import { useClickOutside } from "../../../hooks/useClickOutside/useClickOutside.js";
6
+ import { dialog } from "./dialog.css.js";
7
+ import { useNestedDialog, DialogContext } from "./dialogHelper.js";
8
+ import { useComponentStyles } from "../../../hooks/useComponentStyles/useComponentStyles.js";
9
+ import { useRestoreFocus } from "../../../hooks/useRestoreFocus/useRestoreFocus.js";
10
+ import { usePreventBodyScroll } from "../../../hooks/usePreventBodyScroll/usePreventBodyScroll.js";
11
+ import { useKeyboard } from "../../../hooks/useKeyboard/useKeyboard.js";
12
+ import { useIsomorphicLayoutEffect } from "../../../hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.js";
13
+ const Dialog = ({
14
+ children,
15
+ open,
16
+ className,
17
+ onRequestClose,
18
+ size,
19
+ ...restProps
20
+ }) => {
21
+ const dialogClassName = useComponentStyles("dialog", {
22
+ dialog: true,
23
+ variants: { size }
24
+ });
25
+ const dialogRef = useRef(null);
26
+ const [enabled, setEnabled] = useState(true);
27
+ const [visible, setVisible] = useState(open);
28
+ useRestoreFocus(open);
29
+ const isNested = useNestedDialog(open);
30
+ usePreventBodyScroll(open && !isNested);
31
+ const onEscape = useCallback(
32
+ (event) => {
33
+ event.preventDefault();
34
+ onRequestClose();
35
+ },
36
+ [onRequestClose]
37
+ );
38
+ useKeyboard("Escape", onEscape, { enabled: open && enabled });
39
+ useClickOutside(dialogRef, onRequestClose, { enabled: open && enabled });
40
+ useIsomorphicLayoutEffect(() => {
41
+ var _a;
42
+ if (open && visible) {
43
+ if (!dialogRef.current || !dialogRef.current.showModal) {
44
+ return;
45
+ }
46
+ dialogRef.current.showModal();
47
+ } else if (open) {
48
+ setVisible(true);
49
+ } else {
50
+ if (!hasAnimationDuration(dialogRef.current)) {
51
+ setVisible(false);
52
+ }
53
+ (_a = dialogRef.current) == null ? void 0 : _a.close();
54
+ }
55
+ }, [open, visible]);
56
+ const onAnimationEnd = useCallback(() => {
57
+ if (!open) {
58
+ setVisible(false);
59
+ }
60
+ }, [open]);
61
+ if (!visible) {
62
+ return null;
63
+ }
64
+ const dataOpen = typeof window === "undefined" && open ? true : void 0;
65
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(DialogContext.Provider, { value: { setEnabled }, children: /* @__PURE__ */ jsx(
66
+ "dialog",
67
+ {
68
+ ref: dialogRef,
69
+ "aria-modal": "true",
70
+ open: dataOpen,
71
+ className: classnames(dialog, dialogClassName, className),
72
+ onAnimationEnd,
73
+ onTransitionEnd: onAnimationEnd,
74
+ ...restProps,
75
+ children
76
+ }
77
+ ) }) });
78
+ };
79
+ export {
80
+ Dialog
81
+ };
@@ -0,0 +1,7 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+ import { DialogProps } from './Dialog';
3
+ declare const _default: Meta;
4
+ export default _default;
5
+ export declare const Default: StoryObj<DialogProps>;
6
+ export declare const WithAriaMarkup: StoryObj<DialogProps>;
7
+ export declare const Play: StoryObj<DialogProps>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const fileScope = require("@vanilla-extract/css/fileScope");
4
+ const blocksCore = require("@blockle/blocks-core");
5
+ const css = require("@vanilla-extract/css");
6
+ fileScope.setFileScope("src/components/overlay/Dialog/dialog.css.ts", "@blockle/blocks-react");
7
+ const dialog = css.style({
8
+ "@layer": {
9
+ [blocksCore.blocksLayer]: {
10
+ position: "fixed",
11
+ inset: 0,
12
+ border: "none",
13
+ "::backdrop": {
14
+ // Remove pointer event to prevent clicks on the backdrop
15
+ // and make it easier to check if the click was outside the dialog
16
+ pointerEvents: "none"
17
+ }
18
+ }
19
+ }
20
+ });
21
+ fileScope.endFileScope();
22
+ exports.dialog = dialog;
@@ -0,0 +1 @@
1
+ export declare const dialog: string;
@@ -0,0 +1,22 @@
1
+ import { setFileScope, endFileScope } from "@vanilla-extract/css/fileScope";
2
+ import { blocksLayer } from "@blockle/blocks-core";
3
+ import { style } from "@vanilla-extract/css";
4
+ setFileScope("src/components/overlay/Dialog/dialog.css.ts", "@blockle/blocks-react");
5
+ const dialog = style({
6
+ "@layer": {
7
+ [blocksLayer]: {
8
+ position: "fixed",
9
+ inset: 0,
10
+ border: "none",
11
+ "::backdrop": {
12
+ // Remove pointer event to prevent clicks on the backdrop
13
+ // and make it easier to check if the click was outside the dialog
14
+ pointerEvents: "none"
15
+ }
16
+ }
17
+ }
18
+ });
19
+ endFileScope();
20
+ export {
21
+ dialog
22
+ };
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const react = require("react");
4
+ const DialogContext = react.createContext(
5
+ void 0
6
+ );
7
+ const useNestedDialog = (open) => {
8
+ const parentDialog = react.useContext(DialogContext);
9
+ react.useEffect(() => {
10
+ if (!parentDialog || !open) {
11
+ return;
12
+ }
13
+ parentDialog.setEnabled(false);
14
+ return () => {
15
+ parentDialog.setEnabled(true);
16
+ };
17
+ }, [parentDialog, open]);
18
+ return !!parentDialog;
19
+ };
20
+ exports.DialogContext = DialogContext;
21
+ exports.useNestedDialog = useNestedDialog;
@@ -0,0 +1,6 @@
1
+ type DialogContextValue = {
2
+ setEnabled: (active: boolean) => void;
3
+ };
4
+ export declare const DialogContext: import('react').Context<DialogContextValue | undefined>;
5
+ export declare const useNestedDialog: (open: boolean) => boolean;
6
+ export {};
@@ -0,0 +1,21 @@
1
+ import { createContext, useContext, useEffect } from "react";
2
+ const DialogContext = createContext(
3
+ void 0
4
+ );
5
+ const useNestedDialog = (open) => {
6
+ const parentDialog = useContext(DialogContext);
7
+ useEffect(() => {
8
+ if (!parentDialog || !open) {
9
+ return;
10
+ }
11
+ parentDialog.setEnabled(false);
12
+ return () => {
13
+ parentDialog.setEnabled(true);
14
+ };
15
+ }, [parentDialog, open]);
16
+ return !!parentDialog;
17
+ };
18
+ export {
19
+ DialogContext,
20
+ useNestedDialog
21
+ };
@@ -0,0 +1 @@
1
+ export { Dialog, type DialogProps } from './Dialog';
@@ -0,0 +1,112 @@
1
+ "use client";
2
+ "use strict";
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
4
+ const jsxRuntime = require("react/jsx-runtime");
5
+ const blocksCore = require("@blockle/blocks-core");
6
+ const react = require("react");
7
+ const useClickOutside = require("../../../hooks/useClickOutside/useClickOutside.cjs");
8
+ const popoverUtils = require("./popover-utils.cjs");
9
+ const useLayer = require("../../../hooks/useLayer/useLayer.cjs");
10
+ const useVisibilityState = require("../../../hooks/useVisibilityState/useVisibilityState.cjs");
11
+ const useComponentStyles = require("../../../hooks/useComponentStyles/useComponentStyles.cjs");
12
+ const useIsomorphicLayoutEffect = require("../../../hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.cjs");
13
+ const useKeyboard = require("../../../hooks/useKeyboard/useKeyboard.cjs");
14
+ const Portal = require("../Portal/Portal.cjs");
15
+ const Box = require("../../layout/Box/Box.cjs");
16
+ const Popover = ({
17
+ align = "bottom",
18
+ anchorElement,
19
+ children,
20
+ className,
21
+ onRequestClose,
22
+ open,
23
+ repositionOnScroll,
24
+ style,
25
+ ...restProps
26
+ }) => {
27
+ const layer = useLayer.useLayer();
28
+ const [visible, hide] = useVisibilityState.useVisibilityState(open);
29
+ const [position, setPosition] = react.useState({ x: 0, y: 0 });
30
+ const popoverRef = react.useRef(null);
31
+ const containerClassName = useComponentStyles.useComponentStyles(
32
+ "popover",
33
+ { base: true },
34
+ false
35
+ );
36
+ react.useLayoutEffect(() => {
37
+ if (!visible) {
38
+ return;
39
+ }
40
+ const position2 = popoverUtils.getPopoverPosition(align, anchorElement, popoverRef);
41
+ setPosition({ x: position2[0], y: position2[1] });
42
+ }, [align, anchorElement, visible]);
43
+ react.useEffect(() => {
44
+ if (!open || !repositionOnScroll) {
45
+ return;
46
+ }
47
+ function handleResize() {
48
+ const position2 = popoverUtils.getPopoverPosition(align, anchorElement, popoverRef);
49
+ setPosition({ x: position2[0], y: position2[1] });
50
+ }
51
+ window.addEventListener("resize", handleResize);
52
+ window.addEventListener("scroll", handleResize);
53
+ return () => {
54
+ window.removeEventListener("resize", handleResize);
55
+ window.removeEventListener("scroll", handleResize);
56
+ };
57
+ }, [align, anchorElement, open, repositionOnScroll]);
58
+ useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
59
+ var _a;
60
+ if (!open) {
61
+ (_a = popoverRef.current) == null ? void 0 : _a.removeAttribute("data-open");
62
+ return;
63
+ }
64
+ let timer = requestAnimationFrame(() => {
65
+ timer = requestAnimationFrame(() => {
66
+ var _a2;
67
+ (_a2 = popoverRef.current) == null ? void 0 : _a2.setAttribute("data-open", "");
68
+ });
69
+ });
70
+ return () => {
71
+ cancelAnimationFrame(timer);
72
+ };
73
+ }, [open, visible]);
74
+ const onAnimationEnd = react.useCallback(() => {
75
+ if (!open) {
76
+ hide();
77
+ }
78
+ }, [hide, open]);
79
+ react.useEffect(() => {
80
+ if (open) {
81
+ return;
82
+ }
83
+ if (!blocksCore.hasAnimationDuration(popoverRef.current)) {
84
+ hide();
85
+ }
86
+ }, [hide, open]);
87
+ useKeyboard.useKeyboard("Escape", onRequestClose, { enabled: visible });
88
+ useClickOutside.useClickOutside(popoverRef, onRequestClose, { enabled: visible });
89
+ if (!visible) {
90
+ return null;
91
+ }
92
+ const dataOpen = typeof window === "undefined" && open ? "" : void 0;
93
+ return /* @__PURE__ */ jsxRuntime.jsx(Portal.Portal, { container: layer(), children: /* @__PURE__ */ jsxRuntime.jsx(
94
+ Box.Box,
95
+ {
96
+ ref: popoverRef,
97
+ "data-open": dataOpen,
98
+ onAnimationEnd,
99
+ onTransitionEnd: onAnimationEnd,
100
+ className: blocksCore.classnames(containerClassName, className),
101
+ position: "absolute",
102
+ style: {
103
+ ...style,
104
+ left: position.x,
105
+ top: position.y
106
+ },
107
+ ...restProps,
108
+ children
109
+ }
110
+ ) });
111
+ };
112
+ exports.Popover = Popover;
@@ -0,0 +1,12 @@
1
+ import { HTMLElementProps } from '@blockle/blocks-core';
2
+ export type PopoverProps = {
3
+ align?: 'top' | 'bottom' | 'left' | 'right';
4
+ anchorElement: React.RefObject<HTMLElement | null>;
5
+ children: React.ReactNode;
6
+ className?: string;
7
+ onRequestClose: () => void;
8
+ open: boolean;
9
+ repositionOnScroll?: boolean;
10
+ style?: React.CSSProperties;
11
+ } & HTMLElementProps<HTMLDivElement>;
12
+ export declare const Popover: React.FC<PopoverProps>;