@postenbring/hedwig-react 0.0.83 → 0.0.84
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/accordion/accordion-content.d.ts.map +1 -1
- package/dist/accordion/accordion-content.js +1 -0
- package/dist/accordion/accordion-content.js.map +1 -1
- package/dist/accordion/accordion-content.mjs +2 -2
- package/dist/accordion/accordion-header.d.ts.map +1 -1
- package/dist/accordion/accordion-header.js +1 -0
- package/dist/accordion/accordion-header.js.map +1 -1
- package/dist/accordion/accordion-header.mjs +2 -2
- package/dist/accordion/accordion-item.d.ts.map +1 -1
- package/dist/accordion/accordion-item.js +2 -1
- package/dist/accordion/accordion-item.js.map +1 -1
- package/dist/accordion/accordion-item.mjs +2 -2
- package/dist/accordion/accordion.js +4 -1
- package/dist/accordion/accordion.js.map +1 -1
- package/dist/accordion/accordion.mjs +5 -5
- package/dist/accordion/context.d.ts +1 -0
- package/dist/accordion/context.d.ts.map +1 -1
- package/dist/accordion/context.js.map +1 -1
- package/dist/accordion/context.mjs +1 -1
- package/dist/accordion/index.js +4 -1
- package/dist/accordion/index.js.map +1 -1
- package/dist/accordion/index.mjs +7 -7
- package/dist/badge/badge.d.ts +13 -4
- package/dist/badge/badge.d.ts.map +1 -1
- package/dist/badge/badge.js +22 -42
- package/dist/badge/badge.js.map +1 -1
- package/dist/badge/badge.mjs +3 -9
- package/dist/badge/index.d.ts +1 -1
- package/dist/badge/index.d.ts.map +1 -1
- package/dist/badge/index.js +22 -42
- package/dist/badge/index.js.map +1 -1
- package/dist/badge/index.mjs +3 -9
- package/dist/button/button.d.ts +17 -5
- package/dist/button/button.d.ts.map +1 -1
- package/dist/button/button.js +4 -17
- package/dist/button/button.js.map +1 -1
- package/dist/button/button.mjs +3 -5
- package/dist/button/index.d.ts +1 -1
- package/dist/button/index.d.ts.map +1 -1
- package/dist/button/index.js +4 -17
- package/dist/button/index.js.map +1 -1
- package/dist/button/index.mjs +3 -5
- package/dist/{chunk-KEKPEN2C.mjs → chunk-6MR5XZOX.mjs} +4 -16
- package/dist/chunk-6MR5XZOX.mjs.map +1 -0
- package/dist/{chunk-M3Y3XOGC.mjs → chunk-B6L7IFDX.mjs} +6 -6
- package/dist/{chunk-FC4CEI2V.mjs → chunk-EVUKWONG.mjs} +2 -2
- package/dist/chunk-GQUFERB2.mjs +37 -0
- package/dist/chunk-GQUFERB2.mjs.map +1 -0
- package/dist/{chunk-C34HEQXO.mjs → chunk-GRWLX5BC.mjs} +5 -5
- package/dist/chunk-GRWLX5BC.mjs.map +1 -0
- package/dist/{chunk-3EFAPJ3H.mjs → chunk-HJYS664B.mjs} +3 -2
- package/dist/chunk-HJYS664B.mjs.map +1 -0
- package/dist/{chunk-OGZ2NBMH.mjs → chunk-IHZ2MRF6.mjs} +4 -4
- package/dist/chunk-IHZ2MRF6.mjs.map +1 -0
- package/dist/{chunk-3WVRY6CC.mjs → chunk-L4YBHIS3.mjs} +20 -12
- package/dist/chunk-L4YBHIS3.mjs.map +1 -0
- package/dist/{chunk-35TXKAUH.mjs → chunk-OIC2CPID.mjs} +18 -12
- package/dist/chunk-OIC2CPID.mjs.map +1 -0
- package/dist/{chunk-A2H2LAII.mjs → chunk-SKVM7G76.mjs} +5 -4
- package/dist/chunk-SKVM7G76.mjs.map +1 -0
- package/dist/chunk-SRLM3K2X.mjs +1 -0
- package/dist/{chunk-GLAEI3SD.mjs → chunk-VCQIR53Y.mjs} +3 -2
- package/dist/chunk-VCQIR53Y.mjs.map +1 -0
- package/dist/{chunk-V3PAFMK5.mjs → chunk-YQFL5UN4.mjs} +1 -1
- package/dist/chunk-YQFL5UN4.mjs.map +1 -0
- package/dist/footer/footer.js +7 -15
- package/dist/footer/footer.js.map +1 -1
- package/dist/footer/footer.mjs +7 -7
- package/dist/footer/index.js +7 -15
- package/dist/footer/index.js.map +1 -1
- package/dist/footer/index.mjs +7 -7
- package/dist/index-no-css.js +226 -239
- package/dist/index-no-css.js.map +1 -1
- package/dist/index-no-css.mjs +30 -38
- package/dist/index.js +226 -239
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +30 -38
- package/dist/index.mjs.map +1 -1
- package/dist/modal/index.js.map +1 -1
- package/dist/modal/index.mjs +2 -2
- package/dist/modal/modal.d.ts +4 -4
- package/dist/modal/modal.js.map +1 -1
- package/dist/modal/modal.mjs +2 -2
- package/dist/navbar/index.js +17 -11
- package/dist/navbar/index.js.map +1 -1
- package/dist/navbar/index.mjs +2 -2
- package/dist/navbar/navbar-expandable-menu.d.ts +7 -1
- package/dist/navbar/navbar-expandable-menu.d.ts.map +1 -1
- package/dist/navbar/navbar-expandable-menu.js +17 -11
- package/dist/navbar/navbar-expandable-menu.js.map +1 -1
- package/dist/navbar/navbar-expandable-menu.mjs +1 -1
- package/dist/navbar/navbar.js +17 -11
- package/dist/navbar/navbar.js.map +1 -1
- package/dist/navbar/navbar.mjs +2 -2
- package/dist/show-more/index.d.ts +0 -2
- package/dist/show-more/index.d.ts.map +1 -1
- package/dist/show-more/index.js +5 -143
- package/dist/show-more/index.js.map +1 -1
- package/dist/show-more/index.mjs +1 -6
- package/dist/warning-banner/index.js +28 -94
- package/dist/warning-banner/index.js.map +1 -1
- package/dist/warning-banner/index.mjs +1 -3
- package/dist/warning-banner/warning-banner.d.ts.map +1 -1
- package/dist/warning-banner/warning-banner.js +28 -94
- package/dist/warning-banner/warning-banner.js.map +1 -1
- package/dist/warning-banner/warning-banner.mjs +1 -3
- package/package.json +2 -2
- package/src/accordion/accordion-content.tsx +1 -0
- package/src/accordion/accordion-header.tsx +1 -0
- package/src/accordion/accordion-item.tsx +3 -2
- package/src/accordion/context.ts +1 -0
- package/src/badge/badge.stories.tsx +6 -4
- package/src/badge/badge.tsx +32 -40
- package/src/badge/index.tsx +1 -1
- package/src/button/button.stories.tsx +19 -17
- package/src/button/button.tsx +19 -18
- package/src/button/index.tsx +1 -1
- package/src/footer/footer.tsx +3 -3
- package/src/form/input/input.stories.tsx +6 -6
- package/src/modal/modal.stories.tsx +9 -9
- package/src/modal/modal.tsx +4 -4
- package/src/navbar/navbar-expandable-menu.tsx +25 -14
- package/src/show-more/index.ts +0 -3
- package/src/skeleton/skeleton.stories.tsx +3 -3
- package/src/warning-banner/warning-banner.tsx +24 -13
- package/dist/chunk-35TXKAUH.mjs.map +0 -1
- package/dist/chunk-3EFAPJ3H.mjs.map +0 -1
- package/dist/chunk-3WVRY6CC.mjs.map +0 -1
- package/dist/chunk-A2H2LAII.mjs.map +0 -1
- package/dist/chunk-C34HEQXO.mjs.map +0 -1
- package/dist/chunk-GLAEI3SD.mjs.map +0 -1
- package/dist/chunk-KEKPEN2C.mjs.map +0 -1
- package/dist/chunk-MSFHJVHD.mjs +0 -1
- package/dist/chunk-OGZ2NBMH.mjs.map +0 -1
- package/dist/chunk-P6KBFRF4.mjs +0 -54
- package/dist/chunk-P6KBFRF4.mjs.map +0 -1
- package/dist/chunk-V3PAFMK5.mjs.map +0 -1
- /package/dist/{chunk-M3Y3XOGC.mjs.map → chunk-B6L7IFDX.mjs.map} +0 -0
- /package/dist/{chunk-FC4CEI2V.mjs.map → chunk-EVUKWONG.mjs.map} +0 -0
- /package/dist/{chunk-MSFHJVHD.mjs.map → chunk-SRLM3K2X.mjs.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/show-more/index.ts","../../src/utils/auto-animate-height.tsx","../../src/utils/utils.ts","../../src/show-more/show-more.tsx"],"sourcesContent":["export { AutoAnimateHeight } from \"../utils/auto-animate-height\";\nexport type * from \"../utils/auto-animate-height\";\n\nexport { ShowMoreButton } from \"./show-more\";\nexport type * from \"./show-more\";\n","import { cloneElement, forwardRef, useEffect, useRef, useState } from \"react\";\nimport { useMergeRefs } from \"./utils\";\n\nexport interface AutoAnimateHeightProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Time of the animation, using the hedwig animation tokens\n * quick: 0.1s\n * normal: 0.3s\n * slow: 0.7s\n *\n * default is \"quick\"\n */\n animationDuration?: \"quick\" | \"normal\" | \"slow\";\n\n /**\n * Callback fired when animiation transition ends\n * Use this to do effects after resizing is done, e.g. scrolling to the element\n * using `element.scrollIntoView()`\n */\n onTransitionEnd?: () => void;\n\n /**\n * Which hedwig easing function to use, default is \"normal\"\n */\n animationEasing?: \"in\" | \"out\" | \"normal\";\n children: React.ReactNode;\n style?: React.CSSProperties;\n}\n\n/**\n * Helper component to animate the height of the children when they change\n * It's done by rendering two versions of the passed children,\n * one hidden to measure the height and one visible to only changes after the height is measured.\n *\n * **IMPORTANT** Do not pass any components with effects (like data fetching), as they will trigger twice.\n */\nexport const AutoAnimateHeight = forwardRef<HTMLDivElement, AutoAnimateHeightProps>(\n (\n {\n children,\n style,\n animationDuration = \"quick\",\n animationEasing = \"normal\",\n onTransitionEnd,\n ...rest\n },\n ref,\n ) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const mergedRef = useMergeRefs([rootRef, ref]);\n const measurementRef = useRef<HTMLDivElement>(null);\n const [height, setHeight] = useState<{ height: number; shouldAnimate: boolean } | undefined>(\n undefined,\n );\n const [clonedChildren, setClonedChildren] = useState<React.ReactNode>(() =>\n cloneElement(<>{children}</>, {}),\n );\n\n useEffect(() => {\n if (!rootRef.current) return;\n if (!measurementRef.current) return;\n if (document.body.scrollHeight === 0) return;\n const currentMeasurement = measurementRef.current;\n const { height: newHeight } = currentMeasurement.getBoundingClientRect();\n\n // Listen for resize events on the measurement element\n // Keep the children in sync with the height\n // But don't animate it.\n let previouslyObservedHeight = newHeight;\n const resizeObserver = new ResizeObserver(() => {\n const { height: resizedHeight } = currentMeasurement.getBoundingClientRect();\n if (resizedHeight === previouslyObservedHeight) return;\n previouslyObservedHeight = resizedHeight;\n setHeight({ height: resizedHeight, shouldAnimate: false });\n });\n resizeObserver.observe(currentMeasurement); // This is cleaned up down below in the return functions\n\n // Set the new height when children changes\n setHeight({ height: newHeight, shouldAnimate: true });\n\n // Update children\n const nextClonedChildren = cloneElement(<>{children}</>, {});\n\n // When increasing in height update immediately so the new content is shown during the animation\n if (newHeight >= (height?.height ?? 0)) {\n setClonedChildren(nextClonedChildren);\n return () => {\n resizeObserver.disconnect();\n };\n }\n\n // When decreasing in height, wait until the animation is done so that we don't get a sudden flash of empty content\n const currentRoot = rootRef.current;\n function onTransitionEndHandler(e: TransitionEvent) {\n if (e.propertyName !== \"height\") return;\n setClonedChildren(nextClonedChildren);\n }\n currentRoot.addEventListener(\"transitionend\", onTransitionEndHandler);\n return () => {\n resizeObserver.disconnect();\n currentRoot.removeEventListener(\"transitionend\", onTransitionEndHandler);\n };\n\n // eslint-disable-next-line react-hooks/exhaustive-deps -- I know better\n }, [children]);\n\n return (\n <div\n ref={mergedRef}\n onTransitionEnd={onTransitionEnd}\n style={{\n position: \"relative\",\n overflow: \"hidden\",\n height: height?.height ?? measurementRef.current?.getBoundingClientRect().height,\n transitionProperty: height?.shouldAnimate ? \"height\" : \"none\",\n transitionDuration: `var(--hds-micro-animation-duration-${animationDuration})`,\n transitionTimingFunction: `var(--hds-micro-animation-easing-${animationEasing})`,\n willChange: \"height\",\n ...style,\n }}\n {...rest}\n >\n <div\n aria-hidden\n ref={measurementRef}\n style={{\n position: \"absolute\",\n visibility: \"hidden\",\n pointerEvents: \"none\",\n }}\n >\n {children}\n </div>\n {clonedChildren}\n </div>\n );\n },\n);\nAutoAnimateHeight.displayName = \"AutoAnimateHeight\";\n","import * as React from \"react\";\nimport { useCallback, useEffect, useState } from \"react\";\n\n/**\n * Merges an array of refs into a single memoized callback ref or `null`.\n * @see https://floating-ui.com/docs/useMergeRefs\n */\nexport function useMergeRefs<Instance>(\n refs: (React.Ref<Instance> | undefined)[],\n): React.RefCallback<Instance> | null {\n return React.useMemo(() => {\n if (refs.every((ref) => ref === null)) {\n return null;\n }\n\n return (value) => {\n refs.forEach((ref) => {\n if (typeof ref === \"function\") {\n ref(value);\n } else if (ref !== null) {\n (ref as React.MutableRefObject<Instance | null>).current = value;\n }\n });\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps -- It's ok\n }, refs);\n}\n\nexport function useResize<Instance extends HTMLElement>(\n ref: React.RefObject<Instance> | undefined | null,\n): { width: number; height: number } {\n const [width, setWidth] = useState<number>(0);\n const [height, setHeight] = useState<number>(0);\n const handleResize = useCallback(() => {\n if (ref?.current !== null) {\n setWidth(ref?.current?.offsetWidth ?? 0);\n setHeight(ref?.current?.offsetHeight ?? 0);\n }\n }, [ref]);\n useEffect(() => {\n window.addEventListener(\"load\", handleResize);\n window.addEventListener(\"resize\", handleResize);\n return () => {\n window.removeEventListener(\"load\", handleResize);\n window.removeEventListener(\"resize\", handleResize);\n };\n }, [ref, handleResize]);\n useEffect(() => {\n handleResize();\n // eslint-disable-next-line react-hooks/exhaustive-deps -- It's ok\n }, []);\n return { width, height };\n}\n\nfunction subscribe() {\n // eslint-disable-next-line @typescript-eslint/no-empty-function -- It's ok\n return () => {};\n}\n\nexport function useHydrated() {\n return React.useSyncExternalStore(\n subscribe,\n () => true,\n () => false,\n );\n}\n\n/**\n * Trap focus inside an element using the `inert` attribute.\n *\n * Adds `inert` to all siblings of the given element, and all their ancestors up to the body.\n * Returns a cleanup function which removes the `inert` property from the elements, effectively giving focus back to rest of the document.\n *\n * NOTE: Does not support portals, i.e. elements outside the DOM hierarchy of the given element.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/inert\n * @see https://web.dev/articles/inert\n */\nexport function focusTrap(element: HTMLElement) {\n // eslint-disable-next-line @typescript-eslint/no-empty-function -- NOP on focus trapping the body element\n if (element === document.body) return () => {};\n\n let inertElements: HTMLElement[] = [];\n for (let el: HTMLElement | null = element; el; el = el.parentElement) {\n if (el === document.body) break;\n\n for (const sibling of el.parentElement?.children ?? []) {\n if (sibling === el) continue;\n if (!(sibling instanceof HTMLElement)) continue;\n if (sibling.hasAttribute(\"inert\")) continue;\n\n sibling.setAttribute(\"inert\", \"true\");\n inertElements.push(sibling);\n }\n }\n\n return () => {\n releaseFocusTrap(inertElements);\n inertElements = [];\n };\n}\n\n/**\n * Unset the `inert` attribute on all elements given\n */\nfunction releaseFocusTrap(inertElements: Iterable<HTMLElement>) {\n for (const el of inertElements) {\n el.removeAttribute(\"inert\");\n }\n}\n","import { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport { forwardRef } from \"react\";\n\ntype Variant =\n | {\n variant?: \"show-more\";\n expanded?: never;\n }\n | {\n variant: \"show-more-show-less\";\n expanded: boolean;\n };\n\nexport type ShowMoreProps = React.HTMLAttributes<HTMLButtonElement> & {\n text: React.ReactNode;\n} & Variant;\n\n/**\n * Simple button for triggering more content.\n *\n * You have to add the logic for what happens when the button is clicked yourself.\n *\n * @example\n * ```tsx\n * function Content() {\n * const [items, fetchMoreItems, moreItemsAvailable] = useYourData();\n * function onShowMoreItems() {\n * fetchMoreItems();\n * }\n * return (\n * <>\n * <ul>\n * {items.map((item) => (\n * <li key={item.id}>{item.text}</li>\n * ))}\n * </ul>\n * {moreItemsAvailable ?\n * <ShowMoreButton className=\"mt-8\" onClick={onShowMoreItems} lang=\"en\" /> :\n * null\n * }\n * </>\n * )\n * }\n * ```\n */\nexport const ShowMoreButton = forwardRef<HTMLButtonElement, ShowMoreProps>(\n ({ text, variant, expanded, className, ...rest }, ref) => {\n return (\n <button\n ref={ref}\n className={clsx(\n \"hds-show-more\",\n variant === \"show-more-show-less\" && \"hds-show-more--show-less\",\n className as undefined,\n )}\n data-state={expanded ? \"expanded\" : undefined}\n type=\"button\"\n {...rest}\n >\n {text}\n <span className={clsx(\"hds-show-more__icon\")} />\n </button>\n );\n },\n);\nShowMoreButton.displayName = \"ShowMoreButton\";\n"],"mappings":"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","names":["import_react","_a","_b","import_react","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../../src/show-more/index.ts","../../src/show-more/show-more.tsx"],"sourcesContent":["export { ShowMoreButton } from \"./show-more\";\nexport type * from \"./show-more\";\n","import { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport { forwardRef } from \"react\";\n\ntype Variant =\n | {\n variant?: \"show-more\";\n expanded?: never;\n }\n | {\n variant: \"show-more-show-less\";\n expanded: boolean;\n };\n\nexport type ShowMoreProps = React.HTMLAttributes<HTMLButtonElement> & {\n text: React.ReactNode;\n} & Variant;\n\n/**\n * Simple button for triggering more content.\n *\n * You have to add the logic for what happens when the button is clicked yourself.\n *\n * @example\n * ```tsx\n * function Content() {\n * const [items, fetchMoreItems, moreItemsAvailable] = useYourData();\n * function onShowMoreItems() {\n * fetchMoreItems();\n * }\n * return (\n * <>\n * <ul>\n * {items.map((item) => (\n * <li key={item.id}>{item.text}</li>\n * ))}\n * </ul>\n * {moreItemsAvailable ?\n * <ShowMoreButton className=\"mt-8\" onClick={onShowMoreItems} lang=\"en\" /> :\n * null\n * }\n * </>\n * )\n * }\n * ```\n */\nexport const ShowMoreButton = forwardRef<HTMLButtonElement, ShowMoreProps>(\n ({ text, variant, expanded, className, ...rest }, ref) => {\n return (\n <button\n ref={ref}\n className={clsx(\n \"hds-show-more\",\n variant === \"show-more-show-less\" && \"hds-show-more--show-less\",\n className as undefined,\n )}\n data-state={expanded ? \"expanded\" : undefined}\n type=\"button\"\n {...rest}\n >\n {text}\n <span className={clsx(\"hds-show-more__icon\")} />\n </button>\n );\n },\n);\nShowMoreButton.displayName = \"ShowMoreButton\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,6BAAqB;AACrB,mBAA2B;AA+CrB;AAHC,IAAM,qBAAiB;AAAA,EAC5B,CAAC,IAAiD,QAAQ;AAAzD,iBAAE,QAAM,SAAS,UAAU,UA9C9B,IA8CG,IAAyC,iBAAzC,IAAyC,CAAvC,QAAM,WAAS,YAAU;AAC1B,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,eAAW;AAAA,UACT;AAAA,UACA,YAAY,yBAAyB;AAAA,UACrC;AAAA,QACF;AAAA,QACA,cAAY,WAAW,aAAa;AAAA,QACpC,MAAK;AAAA,SACD,OATL;AAAA,QAWE;AAAA;AAAA,UACD,4CAAC,UAAK,eAAW,6BAAK,qBAAqB,GAAG;AAAA;AAAA;AAAA,IAChD;AAAA,EAEJ;AACF;AACA,eAAe,cAAc;","names":[]}
|
package/dist/show-more/index.mjs
CHANGED
|
@@ -1,14 +1,9 @@
|
|
|
1
|
-
import "../chunk-
|
|
1
|
+
import "../chunk-SRLM3K2X.mjs";
|
|
2
2
|
import {
|
|
3
3
|
ShowMoreButton
|
|
4
4
|
} from "../chunk-UB2R7TCG.mjs";
|
|
5
|
-
import {
|
|
6
|
-
AutoAnimateHeight
|
|
7
|
-
} from "../chunk-6FBPKLWB.mjs";
|
|
8
|
-
import "../chunk-TDXU2IC6.mjs";
|
|
9
5
|
import "../chunk-R4SQKVDQ.mjs";
|
|
10
6
|
export {
|
|
11
|
-
AutoAnimateHeight,
|
|
12
7
|
ShowMoreButton
|
|
13
8
|
};
|
|
14
9
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -54,108 +54,41 @@ __export(warning_banner_exports, {
|
|
|
54
54
|
module.exports = __toCommonJS(warning_banner_exports);
|
|
55
55
|
|
|
56
56
|
// src/warning-banner/warning-banner.tsx
|
|
57
|
-
var import_react2 = require("react");
|
|
58
|
-
var import_typed_classname2 = require("@postenbring/hedwig-css/typed-classname");
|
|
59
|
-
|
|
60
|
-
// src/box/box.tsx
|
|
61
57
|
var import_react = require("react");
|
|
62
58
|
var import_typed_classname = require("@postenbring/hedwig-css/typed-classname");
|
|
63
|
-
var import_react_slot = require("@radix-ui/react-slot");
|
|
64
59
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
65
|
-
var
|
|
66
|
-
(_a, ref) => {
|
|
67
|
-
var _b = _a, { className } = _b, rest = __objRest(_b, ["className"]);
|
|
68
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
69
|
-
"button",
|
|
70
|
-
__spreadValues({
|
|
71
|
-
className: (0, import_typed_classname.clsx)("hds-box__close-button", className),
|
|
72
|
-
ref,
|
|
73
|
-
type: "button"
|
|
74
|
-
}, rest)
|
|
75
|
-
);
|
|
76
|
-
}
|
|
77
|
-
);
|
|
78
|
-
BoxCloseButton.displayName = "Box.CloseButton";
|
|
79
|
-
var Box = (0, import_react.forwardRef)(
|
|
80
|
-
(_a, ref) => {
|
|
81
|
-
var _b = _a, {
|
|
82
|
-
asChild,
|
|
83
|
-
variant,
|
|
84
|
-
closeable = false,
|
|
85
|
-
onClose: onCloseProp,
|
|
86
|
-
closed: closedProp,
|
|
87
|
-
closeButtonProps,
|
|
88
|
-
children,
|
|
89
|
-
className
|
|
90
|
-
} = _b, rest = __objRest(_b, [
|
|
91
|
-
"asChild",
|
|
92
|
-
"variant",
|
|
93
|
-
"closeable",
|
|
94
|
-
"onClose",
|
|
95
|
-
"closed",
|
|
96
|
-
"closeButtonProps",
|
|
97
|
-
"children",
|
|
98
|
-
"className"
|
|
99
|
-
]);
|
|
100
|
-
const [closedState, setClosedState] = (0, import_react.useState)(false);
|
|
101
|
-
const onClose = (0, import_react.useCallback)(() => {
|
|
102
|
-
if (onCloseProp) {
|
|
103
|
-
const result = onCloseProp();
|
|
104
|
-
if (result === true) {
|
|
105
|
-
setClosedState(true);
|
|
106
|
-
}
|
|
107
|
-
} else {
|
|
108
|
-
setClosedState(true);
|
|
109
|
-
}
|
|
110
|
-
}, []);
|
|
111
|
-
const closed = closedProp != null ? closedProp : closedState;
|
|
112
|
-
const Component = asChild ? import_react_slot.Slot : "div";
|
|
113
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
114
|
-
Component,
|
|
115
|
-
__spreadProps(__spreadValues({
|
|
116
|
-
className: (0, import_typed_classname.clsx)(
|
|
117
|
-
"hds-box",
|
|
118
|
-
variant && `hds-box--${variant}`,
|
|
119
|
-
{ "hds-box--closed": closed },
|
|
120
|
-
className
|
|
121
|
-
),
|
|
122
|
-
ref
|
|
123
|
-
}, rest), {
|
|
124
|
-
children: [
|
|
125
|
-
closeable ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BoxCloseButton, __spreadValues({ onClick: onClose }, closeButtonProps)) : null,
|
|
126
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_slot.Slottable, { children })
|
|
127
|
-
]
|
|
128
|
-
})
|
|
129
|
-
);
|
|
130
|
-
}
|
|
131
|
-
);
|
|
132
|
-
Box.displayName = "Box";
|
|
133
|
-
Box.CloseButton = BoxCloseButton;
|
|
134
|
-
|
|
135
|
-
// src/warning-banner/warning-banner.tsx
|
|
136
|
-
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
137
|
-
var WarningBanner = (0, import_react2.forwardRef)(
|
|
60
|
+
var WarningBanner = (0, import_react.forwardRef)(
|
|
138
61
|
(_a, ref) => {
|
|
139
62
|
var _b = _a, { title, description, className } = _b, rest = __objRest(_b, ["title", "description", "className"]);
|
|
63
|
+
const descriptionId = (0, import_react.useId)();
|
|
140
64
|
const expandable = !!description;
|
|
141
|
-
return /* @__PURE__ */ (0,
|
|
142
|
-
/* @__PURE__ */ (0,
|
|
143
|
-
|
|
65
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", __spreadProps(__spreadValues({}, rest), { className: (0, import_typed_classname.clsx)("hds-warning-banner", className), ref, children: [
|
|
66
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
67
|
+
WarningBannerTitle,
|
|
68
|
+
{
|
|
69
|
+
variant: expandable ? "expandable" : "default",
|
|
70
|
+
descriptionId,
|
|
71
|
+
children: title
|
|
72
|
+
}
|
|
73
|
+
),
|
|
74
|
+
expandable ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(WarningBannerDescription, { id: descriptionId, children: description }) : null
|
|
144
75
|
] }));
|
|
145
76
|
}
|
|
146
77
|
);
|
|
147
78
|
WarningBanner.displayName = "WarningBanner";
|
|
148
|
-
var WarningBannerTitle = (0,
|
|
149
|
-
var _b = _a, { variant, children, className } = _b, rest = __objRest(_b, ["variant", "children", "className"]);
|
|
150
|
-
const [open, setOpen] = (0,
|
|
79
|
+
var WarningBannerTitle = (0, import_react.forwardRef)((_a, ref) => {
|
|
80
|
+
var _b = _a, { variant, descriptionId, children, className } = _b, rest = __objRest(_b, ["variant", "descriptionId", "children", "className"]);
|
|
81
|
+
const [open, setOpen] = (0, import_react.useState)(false);
|
|
151
82
|
if (variant === "expandable") {
|
|
152
|
-
return /* @__PURE__ */ (0,
|
|
83
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
153
84
|
"button",
|
|
154
85
|
__spreadProps(__spreadValues({}, rest), {
|
|
155
|
-
|
|
86
|
+
"aria-expanded": open,
|
|
87
|
+
"aria-controls": descriptionId,
|
|
88
|
+
"data-state": open ? "open" : "closed",
|
|
89
|
+
className: (0, import_typed_classname.clsx)(
|
|
156
90
|
"hds-warning-banner__title",
|
|
157
91
|
"hds-warning-banner__title-trigger",
|
|
158
|
-
{ "hds-warning-banner--closed": !open },
|
|
159
92
|
className
|
|
160
93
|
),
|
|
161
94
|
onClick: () => {
|
|
@@ -163,27 +96,28 @@ var WarningBannerTitle = (0, import_react2.forwardRef)((_a, ref) => {
|
|
|
163
96
|
},
|
|
164
97
|
ref,
|
|
165
98
|
type: "button",
|
|
166
|
-
children: /* @__PURE__ */ (0,
|
|
99
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { children })
|
|
167
100
|
})
|
|
168
101
|
);
|
|
169
102
|
}
|
|
170
|
-
return /* @__PURE__ */ (0,
|
|
103
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
171
104
|
"p",
|
|
172
105
|
__spreadProps(__spreadValues({}, rest), {
|
|
173
|
-
className: (0,
|
|
106
|
+
className: (0, import_typed_classname.clsx)("hds-warning-banner__title", className),
|
|
174
107
|
ref,
|
|
175
108
|
children
|
|
176
109
|
})
|
|
177
110
|
);
|
|
178
111
|
});
|
|
179
112
|
WarningBannerTitle.displayName = "WarningBannerTitle";
|
|
180
|
-
var WarningBannerDescription = (0,
|
|
113
|
+
var WarningBannerDescription = (0, import_react.forwardRef)(
|
|
181
114
|
(_a, ref) => {
|
|
182
|
-
var _b = _a, { className } = _b, rest = __objRest(_b, ["className"]);
|
|
183
|
-
return /* @__PURE__ */ (0,
|
|
115
|
+
var _b = _a, { className, id } = _b, rest = __objRest(_b, ["className", "id"]);
|
|
116
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
184
117
|
"p",
|
|
185
118
|
__spreadValues({
|
|
186
|
-
|
|
119
|
+
id,
|
|
120
|
+
className: (0, import_typed_classname.clsx)("hds-warning-banner__description", className),
|
|
187
121
|
ref
|
|
188
122
|
}, rest)
|
|
189
123
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/warning-banner/index.tsx","../../src/warning-banner/warning-banner.tsx"
|
|
1
|
+
{"version":3,"sources":["../../src/warning-banner/index.tsx","../../src/warning-banner/warning-banner.tsx"],"sourcesContent":["export { WarningBanner } from \"./warning-banner\";\nexport type * from \"./warning-banner\";\n","import type { ReactNode } from \"react\";\nimport React, { forwardRef, useId, useState } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\n\nexport interface WarningBannerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n title: ReactNode;\n description?: ReactNode;\n}\n\nexport const WarningBanner = forwardRef<HTMLDivElement, WarningBannerProps>(\n ({ title, description, className, ...rest }, ref) => {\n const descriptionId = useId();\n const expandable = !!description;\n return (\n <div {...rest} className={clsx(\"hds-warning-banner\", className as undefined)} ref={ref}>\n <WarningBannerTitle\n variant={expandable ? \"expandable\" : \"default\"}\n descriptionId={descriptionId}\n >\n {title}\n </WarningBannerTitle>\n {expandable ? (\n <WarningBannerDescription id={descriptionId}>{description}</WarningBannerDescription>\n ) : null}\n </div>\n );\n },\n);\nWarningBanner.displayName = \"WarningBanner\";\n\ntype WarningBannerTitleProps =\n | ({\n variant: \"expandable\";\n descriptionId: string;\n } & React.ButtonHTMLAttributes<HTMLButtonElement>)\n | ({ variant: \"default\"; descriptionId?: string } & React.HTMLAttributes<HTMLParagraphElement>);\n\nconst WarningBannerTitle = forwardRef<\n HTMLButtonElement | HTMLParagraphElement,\n WarningBannerTitleProps\n>(({ variant, descriptionId, children, className, ...rest }, ref) => {\n const [open, setOpen] = useState<boolean>(false);\n if (variant === \"expandable\") {\n return (\n <button\n {...(rest as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n aria-expanded={open}\n aria-controls={descriptionId}\n data-state={open ? \"open\" : \"closed\"}\n className={clsx(\n \"hds-warning-banner__title\",\n \"hds-warning-banner__title-trigger\",\n className as undefined,\n )}\n onClick={() => {\n setOpen((prev) => !prev);\n }}\n ref={ref as React.Ref<HTMLButtonElement>}\n type=\"button\"\n >\n <div>{children}</div>\n </button>\n );\n }\n return (\n <p\n {...(rest as React.HTMLAttributes<HTMLParagraphElement>)}\n className={clsx(\"hds-warning-banner__title\", className as undefined)}\n ref={ref as React.Ref<HTMLParagraphElement>}\n >\n {children}\n </p>\n );\n});\nWarningBannerTitle.displayName = \"WarningBannerTitle\";\n\ntype WarningBannerDescriptionProps = { id: string } & React.HTMLAttributes<HTMLParagraphElement>;\nconst WarningBannerDescription = forwardRef<HTMLParagraphElement, WarningBannerDescriptionProps>(\n ({ className, id, ...rest }, ref) => {\n return (\n <p\n id={id}\n className={clsx(\"hds-warning-banner__description\", className as undefined)}\n ref={ref}\n {...rest}\n />\n );\n },\n);\nWarningBannerDescription.displayName = \"WarningBannerDescription\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,mBAAmD;AACnD,6BAAqB;AAYf;AALC,IAAM,oBAAgB;AAAA,EAC3B,CAAC,IAA4C,QAAQ;AAApD,iBAAE,SAAO,aAAa,UAVzB,IAUG,IAAoC,iBAApC,IAAoC,CAAlC,SAAO,eAAa;AACrB,UAAM,oBAAgB,oBAAM;AAC5B,UAAM,aAAa,CAAC,CAAC;AACrB,WACE,6CAAC,wCAAQ,OAAR,EAAc,eAAW,6BAAK,sBAAsB,SAAsB,GAAG,KAC5E;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,aAAa,eAAe;AAAA,UACrC;AAAA,UAEC;AAAA;AAAA,MACH;AAAA,MACC,aACC,4CAAC,4BAAyB,IAAI,eAAgB,uBAAY,IACxD;AAAA,QACN;AAAA,EAEJ;AACF;AACA,cAAc,cAAc;AAS5B,IAAM,yBAAqB,yBAGzB,CAAC,IAA0D,QAAQ;AAAlE,eAAE,WAAS,eAAe,UAAU,UAxCvC,IAwCG,IAAkD,iBAAlD,IAAkD,CAAhD,WAAS,iBAAe,YAAU;AACrC,QAAM,CAAC,MAAM,OAAO,QAAI,uBAAkB,KAAK;AAC/C,MAAI,YAAY,cAAc;AAC5B,WACE;AAAA,MAAC;AAAA,uCACM,OADN;AAAA,QAEC,iBAAe;AAAA,QACf,iBAAe;AAAA,QACf,cAAY,OAAO,SAAS;AAAA,QAC5B,eAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS,MAAM;AACb,kBAAQ,CAAC,SAAS,CAAC,IAAI;AAAA,QACzB;AAAA,QACA;AAAA,QACA,MAAK;AAAA,QAEL,sDAAC,SAAK,UAAS;AAAA;AAAA,IACjB;AAAA,EAEJ;AACA,SACE;AAAA,IAAC;AAAA,qCACM,OADN;AAAA,MAEC,eAAW,6BAAK,6BAA6B,SAAsB;AAAA,MACnE;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ,CAAC;AACD,mBAAmB,cAAc;AAGjC,IAAM,+BAA2B;AAAA,EAC/B,CAAC,IAA4B,QAAQ;AAApC,iBAAE,aAAW,GA9EhB,IA8EG,IAAoB,iBAApB,IAAoB,CAAlB,aAAW;AACZ,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,eAAW,6BAAK,mCAAmC,SAAsB;AAAA,QACzE;AAAA,SACI;AAAA,IACN;AAAA,EAEJ;AACF;AACA,yBAAyB,cAAc;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"warning-banner.d.ts","sourceRoot":"","sources":["../../src/warning-banner/warning-banner.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,
|
|
1
|
+
{"version":3,"file":"warning-banner.d.ts","sourceRoot":"","sources":["../../src/warning-banner/warning-banner.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAsC,MAAM,OAAO,CAAC;AAG3D,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAC7F,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;CACzB;AAED,eAAO,MAAM,aAAa,2FAkBzB,CAAC"}
|
|
@@ -52,108 +52,41 @@ __export(warning_banner_exports, {
|
|
|
52
52
|
WarningBanner: () => WarningBanner
|
|
53
53
|
});
|
|
54
54
|
module.exports = __toCommonJS(warning_banner_exports);
|
|
55
|
-
var import_react2 = require("react");
|
|
56
|
-
var import_typed_classname2 = require("@postenbring/hedwig-css/typed-classname");
|
|
57
|
-
|
|
58
|
-
// src/box/box.tsx
|
|
59
55
|
var import_react = require("react");
|
|
60
56
|
var import_typed_classname = require("@postenbring/hedwig-css/typed-classname");
|
|
61
|
-
var import_react_slot = require("@radix-ui/react-slot");
|
|
62
57
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
63
|
-
var
|
|
64
|
-
(_a, ref) => {
|
|
65
|
-
var _b = _a, { className } = _b, rest = __objRest(_b, ["className"]);
|
|
66
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
67
|
-
"button",
|
|
68
|
-
__spreadValues({
|
|
69
|
-
className: (0, import_typed_classname.clsx)("hds-box__close-button", className),
|
|
70
|
-
ref,
|
|
71
|
-
type: "button"
|
|
72
|
-
}, rest)
|
|
73
|
-
);
|
|
74
|
-
}
|
|
75
|
-
);
|
|
76
|
-
BoxCloseButton.displayName = "Box.CloseButton";
|
|
77
|
-
var Box = (0, import_react.forwardRef)(
|
|
78
|
-
(_a, ref) => {
|
|
79
|
-
var _b = _a, {
|
|
80
|
-
asChild,
|
|
81
|
-
variant,
|
|
82
|
-
closeable = false,
|
|
83
|
-
onClose: onCloseProp,
|
|
84
|
-
closed: closedProp,
|
|
85
|
-
closeButtonProps,
|
|
86
|
-
children,
|
|
87
|
-
className
|
|
88
|
-
} = _b, rest = __objRest(_b, [
|
|
89
|
-
"asChild",
|
|
90
|
-
"variant",
|
|
91
|
-
"closeable",
|
|
92
|
-
"onClose",
|
|
93
|
-
"closed",
|
|
94
|
-
"closeButtonProps",
|
|
95
|
-
"children",
|
|
96
|
-
"className"
|
|
97
|
-
]);
|
|
98
|
-
const [closedState, setClosedState] = (0, import_react.useState)(false);
|
|
99
|
-
const onClose = (0, import_react.useCallback)(() => {
|
|
100
|
-
if (onCloseProp) {
|
|
101
|
-
const result = onCloseProp();
|
|
102
|
-
if (result === true) {
|
|
103
|
-
setClosedState(true);
|
|
104
|
-
}
|
|
105
|
-
} else {
|
|
106
|
-
setClosedState(true);
|
|
107
|
-
}
|
|
108
|
-
}, []);
|
|
109
|
-
const closed = closedProp != null ? closedProp : closedState;
|
|
110
|
-
const Component = asChild ? import_react_slot.Slot : "div";
|
|
111
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
112
|
-
Component,
|
|
113
|
-
__spreadProps(__spreadValues({
|
|
114
|
-
className: (0, import_typed_classname.clsx)(
|
|
115
|
-
"hds-box",
|
|
116
|
-
variant && `hds-box--${variant}`,
|
|
117
|
-
{ "hds-box--closed": closed },
|
|
118
|
-
className
|
|
119
|
-
),
|
|
120
|
-
ref
|
|
121
|
-
}, rest), {
|
|
122
|
-
children: [
|
|
123
|
-
closeable ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BoxCloseButton, __spreadValues({ onClick: onClose }, closeButtonProps)) : null,
|
|
124
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_slot.Slottable, { children })
|
|
125
|
-
]
|
|
126
|
-
})
|
|
127
|
-
);
|
|
128
|
-
}
|
|
129
|
-
);
|
|
130
|
-
Box.displayName = "Box";
|
|
131
|
-
Box.CloseButton = BoxCloseButton;
|
|
132
|
-
|
|
133
|
-
// src/warning-banner/warning-banner.tsx
|
|
134
|
-
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
135
|
-
var WarningBanner = (0, import_react2.forwardRef)(
|
|
58
|
+
var WarningBanner = (0, import_react.forwardRef)(
|
|
136
59
|
(_a, ref) => {
|
|
137
60
|
var _b = _a, { title, description, className } = _b, rest = __objRest(_b, ["title", "description", "className"]);
|
|
61
|
+
const descriptionId = (0, import_react.useId)();
|
|
138
62
|
const expandable = !!description;
|
|
139
|
-
return /* @__PURE__ */ (0,
|
|
140
|
-
/* @__PURE__ */ (0,
|
|
141
|
-
|
|
63
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", __spreadProps(__spreadValues({}, rest), { className: (0, import_typed_classname.clsx)("hds-warning-banner", className), ref, children: [
|
|
64
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
65
|
+
WarningBannerTitle,
|
|
66
|
+
{
|
|
67
|
+
variant: expandable ? "expandable" : "default",
|
|
68
|
+
descriptionId,
|
|
69
|
+
children: title
|
|
70
|
+
}
|
|
71
|
+
),
|
|
72
|
+
expandable ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(WarningBannerDescription, { id: descriptionId, children: description }) : null
|
|
142
73
|
] }));
|
|
143
74
|
}
|
|
144
75
|
);
|
|
145
76
|
WarningBanner.displayName = "WarningBanner";
|
|
146
|
-
var WarningBannerTitle = (0,
|
|
147
|
-
var _b = _a, { variant, children, className } = _b, rest = __objRest(_b, ["variant", "children", "className"]);
|
|
148
|
-
const [open, setOpen] = (0,
|
|
77
|
+
var WarningBannerTitle = (0, import_react.forwardRef)((_a, ref) => {
|
|
78
|
+
var _b = _a, { variant, descriptionId, children, className } = _b, rest = __objRest(_b, ["variant", "descriptionId", "children", "className"]);
|
|
79
|
+
const [open, setOpen] = (0, import_react.useState)(false);
|
|
149
80
|
if (variant === "expandable") {
|
|
150
|
-
return /* @__PURE__ */ (0,
|
|
81
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
151
82
|
"button",
|
|
152
83
|
__spreadProps(__spreadValues({}, rest), {
|
|
153
|
-
|
|
84
|
+
"aria-expanded": open,
|
|
85
|
+
"aria-controls": descriptionId,
|
|
86
|
+
"data-state": open ? "open" : "closed",
|
|
87
|
+
className: (0, import_typed_classname.clsx)(
|
|
154
88
|
"hds-warning-banner__title",
|
|
155
89
|
"hds-warning-banner__title-trigger",
|
|
156
|
-
{ "hds-warning-banner--closed": !open },
|
|
157
90
|
className
|
|
158
91
|
),
|
|
159
92
|
onClick: () => {
|
|
@@ -161,27 +94,28 @@ var WarningBannerTitle = (0, import_react2.forwardRef)((_a, ref) => {
|
|
|
161
94
|
},
|
|
162
95
|
ref,
|
|
163
96
|
type: "button",
|
|
164
|
-
children: /* @__PURE__ */ (0,
|
|
97
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { children })
|
|
165
98
|
})
|
|
166
99
|
);
|
|
167
100
|
}
|
|
168
|
-
return /* @__PURE__ */ (0,
|
|
101
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
169
102
|
"p",
|
|
170
103
|
__spreadProps(__spreadValues({}, rest), {
|
|
171
|
-
className: (0,
|
|
104
|
+
className: (0, import_typed_classname.clsx)("hds-warning-banner__title", className),
|
|
172
105
|
ref,
|
|
173
106
|
children
|
|
174
107
|
})
|
|
175
108
|
);
|
|
176
109
|
});
|
|
177
110
|
WarningBannerTitle.displayName = "WarningBannerTitle";
|
|
178
|
-
var WarningBannerDescription = (0,
|
|
111
|
+
var WarningBannerDescription = (0, import_react.forwardRef)(
|
|
179
112
|
(_a, ref) => {
|
|
180
|
-
var _b = _a, { className } = _b, rest = __objRest(_b, ["className"]);
|
|
181
|
-
return /* @__PURE__ */ (0,
|
|
113
|
+
var _b = _a, { className, id } = _b, rest = __objRest(_b, ["className", "id"]);
|
|
114
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
182
115
|
"p",
|
|
183
116
|
__spreadValues({
|
|
184
|
-
|
|
117
|
+
id,
|
|
118
|
+
className: (0, import_typed_classname.clsx)("hds-warning-banner__description", className),
|
|
185
119
|
ref
|
|
186
120
|
}, rest)
|
|
187
121
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/warning-banner/warning-banner.tsx"
|
|
1
|
+
{"version":3,"sources":["../../src/warning-banner/warning-banner.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport React, { forwardRef, useId, useState } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\n\nexport interface WarningBannerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n title: ReactNode;\n description?: ReactNode;\n}\n\nexport const WarningBanner = forwardRef<HTMLDivElement, WarningBannerProps>(\n ({ title, description, className, ...rest }, ref) => {\n const descriptionId = useId();\n const expandable = !!description;\n return (\n <div {...rest} className={clsx(\"hds-warning-banner\", className as undefined)} ref={ref}>\n <WarningBannerTitle\n variant={expandable ? \"expandable\" : \"default\"}\n descriptionId={descriptionId}\n >\n {title}\n </WarningBannerTitle>\n {expandable ? (\n <WarningBannerDescription id={descriptionId}>{description}</WarningBannerDescription>\n ) : null}\n </div>\n );\n },\n);\nWarningBanner.displayName = \"WarningBanner\";\n\ntype WarningBannerTitleProps =\n | ({\n variant: \"expandable\";\n descriptionId: string;\n } & React.ButtonHTMLAttributes<HTMLButtonElement>)\n | ({ variant: \"default\"; descriptionId?: string } & React.HTMLAttributes<HTMLParagraphElement>);\n\nconst WarningBannerTitle = forwardRef<\n HTMLButtonElement | HTMLParagraphElement,\n WarningBannerTitleProps\n>(({ variant, descriptionId, children, className, ...rest }, ref) => {\n const [open, setOpen] = useState<boolean>(false);\n if (variant === \"expandable\") {\n return (\n <button\n {...(rest as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n aria-expanded={open}\n aria-controls={descriptionId}\n data-state={open ? \"open\" : \"closed\"}\n className={clsx(\n \"hds-warning-banner__title\",\n \"hds-warning-banner__title-trigger\",\n className as undefined,\n )}\n onClick={() => {\n setOpen((prev) => !prev);\n }}\n ref={ref as React.Ref<HTMLButtonElement>}\n type=\"button\"\n >\n <div>{children}</div>\n </button>\n );\n }\n return (\n <p\n {...(rest as React.HTMLAttributes<HTMLParagraphElement>)}\n className={clsx(\"hds-warning-banner__title\", className as undefined)}\n ref={ref as React.Ref<HTMLParagraphElement>}\n >\n {children}\n </p>\n );\n});\nWarningBannerTitle.displayName = \"WarningBannerTitle\";\n\ntype WarningBannerDescriptionProps = { id: string } & React.HTMLAttributes<HTMLParagraphElement>;\nconst WarningBannerDescription = forwardRef<HTMLParagraphElement, WarningBannerDescriptionProps>(\n ({ className, id, ...rest }, ref) => {\n return (\n <p\n id={id}\n className={clsx(\"hds-warning-banner__description\", className as undefined)}\n ref={ref}\n {...rest}\n />\n );\n },\n);\nWarningBannerDescription.displayName = \"WarningBannerDescription\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAmD;AACnD,6BAAqB;AAYf;AALC,IAAM,oBAAgB;AAAA,EAC3B,CAAC,IAA4C,QAAQ;AAApD,iBAAE,SAAO,aAAa,UAVzB,IAUG,IAAoC,iBAApC,IAAoC,CAAlC,SAAO,eAAa;AACrB,UAAM,oBAAgB,oBAAM;AAC5B,UAAM,aAAa,CAAC,CAAC;AACrB,WACE,6CAAC,wCAAQ,OAAR,EAAc,eAAW,6BAAK,sBAAsB,SAAsB,GAAG,KAC5E;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,aAAa,eAAe;AAAA,UACrC;AAAA,UAEC;AAAA;AAAA,MACH;AAAA,MACC,aACC,4CAAC,4BAAyB,IAAI,eAAgB,uBAAY,IACxD;AAAA,QACN;AAAA,EAEJ;AACF;AACA,cAAc,cAAc;AAS5B,IAAM,yBAAqB,yBAGzB,CAAC,IAA0D,QAAQ;AAAlE,eAAE,WAAS,eAAe,UAAU,UAxCvC,IAwCG,IAAkD,iBAAlD,IAAkD,CAAhD,WAAS,iBAAe,YAAU;AACrC,QAAM,CAAC,MAAM,OAAO,QAAI,uBAAkB,KAAK;AAC/C,MAAI,YAAY,cAAc;AAC5B,WACE;AAAA,MAAC;AAAA,uCACM,OADN;AAAA,QAEC,iBAAe;AAAA,QACf,iBAAe;AAAA,QACf,cAAY,OAAO,SAAS;AAAA,QAC5B,eAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS,MAAM;AACb,kBAAQ,CAAC,SAAS,CAAC,IAAI;AAAA,QACzB;AAAA,QACA;AAAA,QACA,MAAK;AAAA,QAEL,sDAAC,SAAK,UAAS;AAAA;AAAA,IACjB;AAAA,EAEJ;AACA,SACE;AAAA,IAAC;AAAA,qCACM,OADN;AAAA,MAEC,eAAW,6BAAK,6BAA6B,SAAsB;AAAA,MACnE;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ,CAAC;AACD,mBAAmB,cAAc;AAGjC,IAAM,+BAA2B;AAAA,EAC/B,CAAC,IAA4B,QAAQ;AAApC,iBAAE,aAAW,GA9EhB,IA8EG,IAAoB,iBAApB,IAAoB,CAAlB,aAAW;AACZ,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,eAAW,6BAAK,mCAAmC,SAAsB;AAAA,QACzE;AAAA,SACI;AAAA,IACN;AAAA,EAEJ;AACF;AACA,yBAAyB,cAAc;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@postenbring/hedwig-react",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.84",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"module": "./dist/index.mjs",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@radix-ui/react-popover": "1.0.7",
|
|
33
33
|
"@radix-ui/react-slot": "1.0.2",
|
|
34
|
-
"@postenbring/hedwig-css": "0.0.
|
|
34
|
+
"@postenbring/hedwig-css": "0.0.70"
|
|
35
35
|
},
|
|
36
36
|
"publishConfig": {
|
|
37
37
|
"access": "public"
|
|
@@ -15,6 +15,7 @@ export const AccordionContent = forwardRef<HTMLDivElement, AccordionContentProps
|
|
|
15
15
|
}
|
|
16
16
|
return (
|
|
17
17
|
<div
|
|
18
|
+
id={context.contentId}
|
|
18
19
|
aria-hidden={!context.open}
|
|
19
20
|
data-state={context.open ? "open" : "closed"}
|
|
20
21
|
{...{ inert: context.open ? undefined : "true" }}
|
|
@@ -21,6 +21,7 @@ export const AccordionHeader = forwardRef<HTMLButtonElement, AccordionHeaderProp
|
|
|
21
21
|
<button
|
|
22
22
|
{...rest}
|
|
23
23
|
aria-expanded={context.open}
|
|
24
|
+
aria-controls={context.contentId}
|
|
24
25
|
data-state={context.open ? "open" : "closed"}
|
|
25
26
|
className={clsx("hds-accordion-item-header", className as undefined)}
|
|
26
27
|
onClick={expandOrCollapse}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ReactElement } from "react";
|
|
2
|
-
import { forwardRef, useState } from "react";
|
|
2
|
+
import { forwardRef, useId, useState } from "react";
|
|
3
3
|
import { clsx } from "@postenbring/hedwig-css/typed-classname";
|
|
4
4
|
import { AccordionItemContext } from "./context";
|
|
5
5
|
import type { AccordionHeaderProps } from "./accordion-header";
|
|
@@ -33,6 +33,7 @@ export interface AccordionItemProps extends React.HTMLAttributes<HTMLDivElement>
|
|
|
33
33
|
|
|
34
34
|
export const AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(
|
|
35
35
|
({ children, defaultOpen, open: outerOpen, onOpenChange, className, ...rest }, ref) => {
|
|
36
|
+
const contentId = useId();
|
|
36
37
|
const [innerOpen, setInnerOpen] = useState(defaultOpen ?? false);
|
|
37
38
|
const open = outerOpen ?? innerOpen;
|
|
38
39
|
|
|
@@ -51,7 +52,7 @@ export const AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(
|
|
|
51
52
|
className={clsx("hds-accordion-item", className as undefined)}
|
|
52
53
|
ref={ref}
|
|
53
54
|
>
|
|
54
|
-
<AccordionItemContext.Provider value={{ open, setOpen: handleOpen }}>
|
|
55
|
+
<AccordionItemContext.Provider value={{ contentId, open, setOpen: handleOpen }}>
|
|
55
56
|
{children}
|
|
56
57
|
</AccordionItemContext.Provider>
|
|
57
58
|
</div>
|
package/src/accordion/context.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* eslint-disable import/no-extraneous-dependencies -- storybook story */
|
|
2
2
|
import type { Meta, StoryObj } from "@storybook/react";
|
|
3
3
|
import { Box } from "../box";
|
|
4
|
-
import { Badge
|
|
4
|
+
import { Badge } from ".";
|
|
5
5
|
|
|
6
6
|
const meta: Meta<typeof Badge> = {
|
|
7
7
|
title: "Badge",
|
|
@@ -14,31 +14,33 @@ type Story = StoryObj<typeof Badge>;
|
|
|
14
14
|
|
|
15
15
|
export const Lighter: Story = {
|
|
16
16
|
args: {
|
|
17
|
+
variant: "lighter",
|
|
17
18
|
children: "Default badge",
|
|
18
19
|
},
|
|
19
20
|
};
|
|
20
21
|
|
|
21
22
|
export const Dark: Story = {
|
|
22
23
|
args: {
|
|
24
|
+
variant: "dark",
|
|
23
25
|
children: "Dark badge",
|
|
24
26
|
},
|
|
25
|
-
render: (props) => <DarkBadge {...props} />,
|
|
26
27
|
};
|
|
27
28
|
|
|
28
29
|
export const White: Story = {
|
|
29
30
|
args: {
|
|
31
|
+
variant: "white",
|
|
30
32
|
children: "White badge",
|
|
31
33
|
},
|
|
32
34
|
render: (props) => (
|
|
33
35
|
<Box>
|
|
34
|
-
<
|
|
36
|
+
<Badge {...props} />
|
|
35
37
|
</Box>
|
|
36
38
|
),
|
|
37
39
|
};
|
|
38
40
|
|
|
39
41
|
export const Warning: Story = {
|
|
40
42
|
args: {
|
|
43
|
+
variant: "warning",
|
|
41
44
|
children: "Warning badge",
|
|
42
45
|
},
|
|
43
|
-
render: (props) => <WarningBadge {...props} />,
|
|
44
46
|
};
|