@postenbring/hedwig-react 1.2.2 → 1.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/dist/accordion/accordion-content.d.ts.map +1 -1
- package/dist/accordion/accordion-content.js +0 -1
- package/dist/accordion/accordion-content.js.map +1 -1
- package/dist/accordion/accordion-content.mjs +1 -1
- package/dist/accordion/accordion.js +0 -1
- package/dist/accordion/accordion.js.map +1 -1
- package/dist/accordion/accordion.mjs +2 -2
- package/dist/accordion/index.js +0 -1
- package/dist/accordion/index.js.map +1 -1
- package/dist/accordion/index.mjs +2 -2
- package/dist/{chunk-JZXZYEPG.mjs → chunk-5FWY7FIX.mjs} +1 -2
- package/dist/chunk-5FWY7FIX.mjs.map +1 -0
- package/dist/{chunk-ROQH67YP.mjs → chunk-6DWIJEHQ.mjs} +2 -2
- package/dist/{chunk-6BXKRPR3.mjs → chunk-AXEAIXG7.mjs} +2 -2
- package/dist/{chunk-QRGGURVO.mjs → chunk-BO3EWZGA.mjs} +6 -4
- package/dist/chunk-BO3EWZGA.mjs.map +1 -0
- package/dist/{chunk-TWUAXAMR.mjs → chunk-BYFBK3J7.mjs} +1 -1
- package/dist/chunk-BYFBK3J7.mjs.map +1 -0
- package/dist/chunk-CKAL5ZJZ.mjs +45 -0
- package/dist/chunk-CKAL5ZJZ.mjs.map +1 -0
- package/dist/{chunk-CXX4SXJG.mjs → chunk-CKG2XRMX.mjs} +2 -2
- package/dist/{chunk-YS7HBWOI.mjs → chunk-E6OOFTRQ.mjs} +2 -2
- package/dist/{chunk-WUPLEZEY.mjs → chunk-GVO57ZWU.mjs} +2 -2
- package/dist/{chunk-UL2V2Z5B.mjs → chunk-HEDGKRGC.mjs} +3 -3
- package/dist/chunk-IJSEJZ3W.mjs +1 -0
- package/dist/{chunk-S3QSGJX2.mjs → chunk-ITLZQ47H.mjs} +2 -2
- package/dist/{chunk-NIYDN3Y3.mjs → chunk-JEAGKB4V.mjs} +2 -2
- package/dist/{chunk-Z2TMKU5V.mjs → chunk-KNGG6M2I.mjs} +5 -5
- package/dist/chunk-KPPLVGZ3.mjs +1 -0
- package/dist/chunk-KPPLVGZ3.mjs.map +1 -0
- package/dist/{chunk-CC5QWW52.mjs → chunk-LHIG6RW7.mjs} +2 -2
- package/dist/chunk-LHIG6RW7.mjs.map +1 -0
- package/dist/chunk-VU2GCAM4.mjs +81 -0
- package/dist/chunk-VU2GCAM4.mjs.map +1 -0
- package/dist/{chunk-5UGT7L7R.mjs → chunk-XZ43OSZ5.mjs} +5 -3
- package/dist/chunk-XZ43OSZ5.mjs.map +1 -0
- package/dist/{chunk-JQGB77SS.mjs → chunk-Z2ZPTZ6F.mjs} +5 -3
- package/dist/chunk-Z2ZPTZ6F.mjs.map +1 -0
- package/dist/footer/footer.js +0 -1
- package/dist/footer/footer.js.map +1 -1
- package/dist/footer/footer.mjs +3 -3
- package/dist/footer/index.js +0 -1
- package/dist/footer/index.js.map +1 -1
- package/dist/footer/index.mjs +3 -3
- package/dist/form/checkbox/checkbox.d.ts +2 -0
- package/dist/form/checkbox/checkbox.d.ts.map +1 -1
- package/dist/form/checkbox/checkbox.js +7 -3
- package/dist/form/checkbox/checkbox.js.map +1 -1
- package/dist/form/checkbox/checkbox.mjs +3 -3
- package/dist/form/checkbox/index.js +7 -3
- package/dist/form/checkbox/index.js.map +1 -1
- package/dist/form/checkbox/index.mjs +3 -3
- package/dist/form/date-picker/date-picker.js +4 -2
- package/dist/form/date-picker/date-picker.js.map +1 -1
- package/dist/form/date-picker/date-picker.mjs +3 -3
- package/dist/form/date-picker/index.js +4 -2
- package/dist/form/date-picker/index.js.map +1 -1
- package/dist/form/date-picker/index.mjs +3 -3
- package/dist/form/error-message/error-message.js +1 -1
- package/dist/form/error-message/error-message.js.map +1 -1
- package/dist/form/error-message/error-message.mjs +1 -1
- package/dist/form/error-message/index.js +1 -1
- package/dist/form/error-message/index.js.map +1 -1
- package/dist/form/error-message/index.mjs +1 -1
- package/dist/form/error-summary/error-summary.d.ts +65 -0
- package/dist/form/error-summary/error-summary.d.ts.map +1 -0
- package/dist/form/error-summary/error-summary.js +379 -0
- package/dist/form/error-summary/error-summary.js.map +1 -0
- package/dist/form/error-summary/error-summary.mjs +26 -0
- package/dist/form/error-summary/error-summary.mjs.map +1 -0
- package/dist/form/error-summary/focus.d.ts +9 -0
- package/dist/form/error-summary/focus.d.ts.map +1 -0
- package/dist/form/error-summary/focus.js +69 -0
- package/dist/form/error-summary/focus.js.map +1 -0
- package/dist/form/error-summary/focus.mjs +8 -0
- package/dist/form/error-summary/focus.mjs.map +1 -0
- package/dist/form/error-summary/index.d.ts +3 -0
- package/dist/form/error-summary/index.d.ts.map +1 -0
- package/dist/form/error-summary/index.js +375 -0
- package/dist/form/error-summary/index.js.map +1 -0
- package/dist/form/error-summary/index.mjs +21 -0
- package/dist/form/error-summary/index.mjs.map +1 -0
- package/dist/form/fieldset/fieldset.d.ts +2 -0
- package/dist/form/fieldset/fieldset.d.ts.map +1 -1
- package/dist/form/fieldset/fieldset.js +4 -2
- package/dist/form/fieldset/fieldset.js.map +1 -1
- package/dist/form/fieldset/fieldset.mjs +2 -2
- package/dist/form/fieldset/index.js +4 -2
- package/dist/form/fieldset/index.js.map +1 -1
- package/dist/form/fieldset/index.mjs +2 -2
- package/dist/form/index.d.ts +1 -0
- package/dist/form/index.d.ts.map +1 -1
- package/dist/form/index.js +333 -39
- package/dist/form/index.js.map +1 -1
- package/dist/form/index.mjs +29 -13
- package/dist/form/input/index.js +4 -2
- package/dist/form/input/index.js.map +1 -1
- package/dist/form/input/index.mjs +3 -3
- package/dist/form/input/input.js +4 -2
- package/dist/form/input/input.js.map +1 -1
- package/dist/form/input/input.mjs +3 -3
- package/dist/form/input-group/index.js +4 -2
- package/dist/form/input-group/index.js.map +1 -1
- package/dist/form/input-group/index.mjs +2 -2
- package/dist/form/input-group/input-group.d.ts +2 -0
- package/dist/form/input-group/input-group.d.ts.map +1 -1
- package/dist/form/input-group/input-group.js +4 -2
- package/dist/form/input-group/input-group.js.map +1 -1
- package/dist/form/input-group/input-group.mjs +2 -2
- package/dist/form/radio-button/index.js +4 -2
- package/dist/form/radio-button/index.js.map +1 -1
- package/dist/form/radio-button/index.mjs +4 -4
- package/dist/form/radio-button/radio-button.js +4 -2
- package/dist/form/radio-button/radio-button.js.map +1 -1
- package/dist/form/radio-button/radio-button.mjs +4 -4
- package/dist/form/radio-button/radio-group.js +4 -2
- package/dist/form/radio-button/radio-group.js.map +1 -1
- package/dist/form/radio-button/radio-group.mjs +3 -3
- package/dist/form/select/index.js +4 -2
- package/dist/form/select/index.js.map +1 -1
- package/dist/form/select/index.mjs +3 -3
- package/dist/form/select/select.js +4 -2
- package/dist/form/select/select.js.map +1 -1
- package/dist/form/select/select.mjs +3 -3
- package/dist/form/textarea/index.js +4 -2
- package/dist/form/textarea/index.js.map +1 -1
- package/dist/form/textarea/index.mjs +3 -3
- package/dist/form/textarea/textarea.js +4 -2
- package/dist/form/textarea/textarea.js.map +1 -1
- package/dist/form/textarea/textarea.mjs +3 -3
- package/dist/index.js +573 -474
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +48 -42
- package/dist/layout/index.mjs +3 -3
- package/dist/message/index.js.map +1 -1
- package/dist/message/index.mjs +1 -1
- package/dist/message/message.d.ts +2 -2
- package/dist/message/message.d.ts.map +1 -1
- package/dist/message/message.js.map +1 -1
- package/dist/message/message.mjs +1 -1
- package/dist/tabs/index.mjs +5 -5
- package/dist/tabs/tabs.mjs +2 -2
- package/package.json +3 -3
- package/src/accordion/accordion-content.tsx +0 -1
- package/src/form/checkbox/checkbox.tsx +6 -2
- package/src/form/error-message/error-message.tsx +1 -1
- package/src/form/error-summary/error-summary.stories.tsx +29 -0
- package/src/form/error-summary/error-summary.tsx +151 -0
- package/src/form/error-summary/focus.ts +66 -0
- package/src/form/error-summary/index.tsx +2 -0
- package/src/form/fieldset/fieldset.tsx +6 -2
- package/src/form/index.tsx +1 -0
- package/src/form/input-group/input-group.tsx +6 -2
- package/src/message/message.tsx +2 -2
- package/dist/chunk-5UGT7L7R.mjs.map +0 -1
- package/dist/chunk-CC5QWW52.mjs.map +0 -1
- package/dist/chunk-JQGB77SS.mjs.map +0 -1
- package/dist/chunk-JZXZYEPG.mjs.map +0 -1
- package/dist/chunk-QRGGURVO.mjs.map +0 -1
- package/dist/chunk-TWUAXAMR.mjs.map +0 -1
- package/dist/chunk-XFKD6EEJ.mjs +0 -1
- /package/dist/{chunk-ROQH67YP.mjs.map → chunk-6DWIJEHQ.mjs.map} +0 -0
- /package/dist/{chunk-6BXKRPR3.mjs.map → chunk-AXEAIXG7.mjs.map} +0 -0
- /package/dist/{chunk-CXX4SXJG.mjs.map → chunk-CKG2XRMX.mjs.map} +0 -0
- /package/dist/{chunk-YS7HBWOI.mjs.map → chunk-E6OOFTRQ.mjs.map} +0 -0
- /package/dist/{chunk-WUPLEZEY.mjs.map → chunk-GVO57ZWU.mjs.map} +0 -0
- /package/dist/{chunk-UL2V2Z5B.mjs.map → chunk-HEDGKRGC.mjs.map} +0 -0
- /package/dist/{chunk-XFKD6EEJ.mjs.map → chunk-IJSEJZ3W.mjs.map} +0 -0
- /package/dist/{chunk-S3QSGJX2.mjs.map → chunk-ITLZQ47H.mjs.map} +0 -0
- /package/dist/{chunk-NIYDN3Y3.mjs.map → chunk-JEAGKB4V.mjs.map} +0 -0
- /package/dist/{chunk-Z2TMKU5V.mjs.map → chunk-KNGG6M2I.mjs.map} +0 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Focus a form field while showing the associated legend or label in the viewport.
|
|
3
|
+
*
|
|
4
|
+
* Gives the user a better context of what field they are focusing on.
|
|
5
|
+
*
|
|
6
|
+
* Copied from https://github.com/alphagov/govuk-frontend/blob/cbf4ef1e329711be5b78a92bda6ba84a7db9ca40/packages/govuk-frontend/src/govuk/components/error-summary/error-summary.mjs#L60-L108
|
|
7
|
+
*/
|
|
8
|
+
export function focusWithLegendOrLabelInViewport(id: string) {
|
|
9
|
+
const input = document.getElementById(id);
|
|
10
|
+
if (!input) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const legendOrLabel = maybeLegendForInput(input) ?? labelForInput(input);
|
|
15
|
+
if (!legendOrLabel) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
legendOrLabel.scrollIntoView();
|
|
20
|
+
input.focus({ preventScroll: true });
|
|
21
|
+
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function maybeLegendForInput(input: HTMLElement) {
|
|
26
|
+
const fieldset = input.closest("fieldset");
|
|
27
|
+
if (!fieldset) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const legend = fieldset.querySelector("legend");
|
|
32
|
+
if (!legend) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// If the input type is radio or checkbox, always use the legend if
|
|
37
|
+
// there is one.
|
|
38
|
+
if (input instanceof HTMLInputElement && (input.type === "checkbox" || input.type === "radio")) {
|
|
39
|
+
return legend;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// For other input types, only scroll to the fieldset’s legend (instead
|
|
43
|
+
// of the label associated with the input) if the input would end up in
|
|
44
|
+
// the top half of the screen.
|
|
45
|
+
//
|
|
46
|
+
// This should avoid situations where the input either ends up off the
|
|
47
|
+
// screen, or obscured by a software keyboard.
|
|
48
|
+
const legendTop = legend.getBoundingClientRect().top;
|
|
49
|
+
const inputRect = input.getBoundingClientRect();
|
|
50
|
+
|
|
51
|
+
// If the browser doesn't support Element.getBoundingClientRect().height
|
|
52
|
+
// or window.innerHeight (like IE8), bail and just link to the label.
|
|
53
|
+
if (inputRect.height && window.innerHeight) {
|
|
54
|
+
const inputBottom = inputRect.top + inputRect.height;
|
|
55
|
+
|
|
56
|
+
if (inputBottom - legendTop < window.innerHeight / 2) {
|
|
57
|
+
return legend;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function labelForInput(input: HTMLElement) {
|
|
63
|
+
return (
|
|
64
|
+
document.querySelector(`label[for='${input.getAttribute("id")}']`) ?? input.closest("label")
|
|
65
|
+
);
|
|
66
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useId, forwardRef, createContext, useContext } from "react";
|
|
2
2
|
import type { FieldsetHTMLAttributes, HTMLAttributes, ReactNode, CSSProperties } from "react";
|
|
3
3
|
import { clsx } from "@postenbring/hedwig-css/typed-classname";
|
|
4
|
-
import { ErrorMessage } from "../error-message";
|
|
4
|
+
import { ErrorMessage, type ErrorMessageProps } from "../error-message";
|
|
5
5
|
|
|
6
6
|
export interface FieldsetProps extends FieldsetHTMLAttributes<HTMLFieldSetElement> {
|
|
7
7
|
className?: string;
|
|
@@ -16,6 +16,7 @@ export interface FieldsetProps extends FieldsetHTMLAttributes<HTMLFieldSetElemen
|
|
|
16
16
|
legendProps?: HTMLAttributes<HTMLElement> & { size: "default" | "large" };
|
|
17
17
|
legend: ReactNode;
|
|
18
18
|
children: ReactNode;
|
|
19
|
+
errorMessageProps?: Partial<ErrorMessageProps>;
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
const FieldsetContext = createContext<{ hasError: boolean }>({ hasError: false });
|
|
@@ -27,6 +28,7 @@ export const Fieldset = forwardRef<HTMLFieldSetElement, FieldsetProps>(function
|
|
|
27
28
|
className,
|
|
28
29
|
style,
|
|
29
30
|
errorMessage,
|
|
31
|
+
errorMessageProps,
|
|
30
32
|
legendProps: { size: legendSize = "default", className: legendClassName, ...legendProps } = {},
|
|
31
33
|
legend,
|
|
32
34
|
children,
|
|
@@ -58,7 +60,9 @@ export const Fieldset = forwardRef<HTMLFieldSetElement, FieldsetProps>(function
|
|
|
58
60
|
<FieldsetContext.Provider value={{ hasError: Boolean(errorMessage) }}>
|
|
59
61
|
{children}
|
|
60
62
|
</FieldsetContext.Provider>
|
|
61
|
-
<ErrorMessage id={errorMessageId}
|
|
63
|
+
<ErrorMessage id={errorMessageId} {...errorMessageProps}>
|
|
64
|
+
{errorMessage}
|
|
65
|
+
</ErrorMessage>
|
|
62
66
|
</fieldset>
|
|
63
67
|
);
|
|
64
68
|
});
|
package/src/form/index.tsx
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useId, forwardRef, Children, isValidElement, cloneElement } from "react";
|
|
2
2
|
import type { LabelHTMLAttributes, ReactNode, CSSProperties } from "react";
|
|
3
3
|
import { clsx } from "@postenbring/hedwig-css/typed-classname";
|
|
4
|
-
import { ErrorMessage } from "../error-message";
|
|
4
|
+
import { ErrorMessage, type ErrorMessageProps } from "../error-message";
|
|
5
5
|
|
|
6
6
|
interface InputProps {
|
|
7
7
|
"aria-describedby"?: string;
|
|
@@ -16,6 +16,7 @@ export interface InputGroupProps {
|
|
|
16
16
|
style?: CSSProperties;
|
|
17
17
|
variant?: "default" | "white";
|
|
18
18
|
errorMessage?: ReactNode;
|
|
19
|
+
errorMessageProps?: Partial<ErrorMessageProps>;
|
|
19
20
|
labelProps?: LabelHTMLAttributes<HTMLLabelElement>;
|
|
20
21
|
label: ReactNode;
|
|
21
22
|
disabled?: boolean;
|
|
@@ -35,6 +36,7 @@ export const InputGroup = forwardRef<HTMLDivElement, InputGroupProps>(function I
|
|
|
35
36
|
style,
|
|
36
37
|
variant = "default",
|
|
37
38
|
errorMessage,
|
|
39
|
+
errorMessageProps,
|
|
38
40
|
labelProps: { className: labelClassName, ...labelProps } = {},
|
|
39
41
|
label,
|
|
40
42
|
disabled,
|
|
@@ -100,7 +102,9 @@ export const InputGroup = forwardRef<HTMLDivElement, InputGroupProps>(function I
|
|
|
100
102
|
>
|
|
101
103
|
{renderInput()}
|
|
102
104
|
</div>
|
|
103
|
-
<ErrorMessage id={errorMessageId}
|
|
105
|
+
<ErrorMessage id={errorMessageId} {...errorMessageProps}>
|
|
106
|
+
{errorMessage}
|
|
107
|
+
</ErrorMessage>
|
|
104
108
|
</div>
|
|
105
109
|
);
|
|
106
110
|
});
|
package/src/message/message.tsx
CHANGED
|
@@ -3,7 +3,7 @@ import { clsx } from "@postenbring/hedwig-css/typed-classname";
|
|
|
3
3
|
import { Slot } from "@radix-ui/react-slot";
|
|
4
4
|
import { Box, type BoxProps } from "../box/box";
|
|
5
5
|
|
|
6
|
-
interface MessageTitleProps extends React.HTMLAttributes<HTMLParagraphElement> {
|
|
6
|
+
export interface MessageTitleProps extends React.HTMLAttributes<HTMLParagraphElement> {
|
|
7
7
|
/**
|
|
8
8
|
* Change the default rendered element for the one passed as a child, merging their props and behavior.
|
|
9
9
|
*
|
|
@@ -25,7 +25,7 @@ export const MessageTitle = forwardRef<HTMLParagraphElement, MessageTitleProps>(
|
|
|
25
25
|
);
|
|
26
26
|
MessageTitle.displayName = "Message.Title";
|
|
27
27
|
|
|
28
|
-
interface MessageDescriptionProps extends React.HTMLAttributes<HTMLParagraphElement> {
|
|
28
|
+
export interface MessageDescriptionProps extends React.HTMLAttributes<HTMLParagraphElement> {
|
|
29
29
|
/**
|
|
30
30
|
* Change the default rendered element for the one passed as a child, merging their props and behavior.
|
|
31
31
|
*
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/form/input-group/input-group.tsx"],"sourcesContent":["import { useId, forwardRef, Children, isValidElement, cloneElement } from \"react\";\nimport type { LabelHTMLAttributes, ReactNode, CSSProperties } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport { ErrorMessage } from \"../error-message\";\n\ninterface InputProps {\n \"aria-describedby\"?: string;\n \"aria-invalid\"?: boolean;\n id?: string;\n className?: string;\n}\n\nexport interface InputGroupProps {\n id?: string;\n className?: string;\n style?: CSSProperties;\n variant?: \"default\" | \"white\";\n errorMessage?: ReactNode;\n labelProps?: LabelHTMLAttributes<HTMLLabelElement>;\n label: ReactNode;\n disabled?: boolean;\n readOnly?: boolean;\n /**\n * `children` must be either a single input element or a render function.\n *\n * If you use a render function, make sure you spread the input props to the appropriate element.\n */\n children: Exclude<ReactNode, Iterable<ReactNode>> | ((inputProps: InputProps) => ReactNode);\n}\n\nexport const InputGroup = forwardRef<HTMLDivElement, InputGroupProps>(function InputGroup(\n {\n id,\n className,\n style,\n variant = \"default\",\n errorMessage,\n labelProps: { className: labelClassName, ...labelProps } = {},\n label,\n disabled,\n readOnly,\n children,\n ...rest\n },\n ref,\n) {\n const errorMessageId = useId();\n const inputId = useId();\n\n const renderInput = () => {\n const inputProps: InputProps = {\n \"aria-describedby\": errorMessage ? errorMessageId : undefined,\n \"aria-invalid\": errorMessage ? true : undefined,\n id: id ?? inputId,\n className: clsx(\"hds-input-group__input\"),\n };\n\n if (typeof children === \"function\") {\n return children(inputProps);\n }\n\n const input: ReactNode = Children.toArray(children)[0];\n\n if (!isValidElement<InputProps>(input)) {\n return;\n }\n\n return cloneElement<InputProps>(input, {\n ...inputProps,\n ...input.props,\n className: `${inputProps.className} ${input.props.className ?? \"\"}`,\n });\n };\n\n return (\n <div\n className={clsx(\n \"hds-input-group\",\n {\n [`hds-input-group--${variant}`]: variant,\n \"hds-input-group--error\": errorMessage,\n },\n className as undefined,\n )}\n ref={ref}\n style={style}\n {...rest}\n >\n <label\n className={clsx(\"hds-input-group__label\", labelClassName as undefined)}\n {...labelProps}\n htmlFor={id ?? inputId}\n >\n {label}\n </label>\n <div\n className={clsx(\"hds-input-group__input-wrapper\")}\n data-disabled={disabled}\n data-readonly={readOnly}\n >\n {renderInput()}\n </div>\n <ErrorMessage id={errorMessageId}>{errorMessage}</ErrorMessage>\n </div>\n );\n});\n"],"mappings":";;;;;;;;;;AAAA,SAAS,OAAO,YAAY,UAAU,gBAAgB,oBAAoB;AAE1E,SAAS,YAAY;AAyEjB,SAaE,KAbF;AA7CG,IAAM,aAAa,WAA4C,SAASA,YAC7E,IAaA,KACA;AAdA,eAMc;AAAA,IALZ;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA,YAAY,KAA+C,CAAC;AAAA,EArChE,IA+BE,IAMc,SAAE,aAAW,eArC7B,IAqCgB,IAAgC,uBAAhC,IAAgC,CAA9B,eANhB,SAOE;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAzCJ,IA+BE,IAWK,iBAXL,IAWK;AAAA,IAVH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAKF,QAAM,iBAAiB,MAAM;AAC7B,QAAM,UAAU,MAAM;AAEtB,QAAM,cAAc,MAAM;AAjD5B,QAAAC;AAkDI,UAAM,aAAyB;AAAA,MAC7B,oBAAoB,eAAe,iBAAiB;AAAA,MACpD,gBAAgB,eAAe,OAAO;AAAA,MACtC,IAAI,kBAAM;AAAA,MACV,WAAW,KAAK,wBAAwB;AAAA,IAC1C;AAEA,QAAI,OAAO,aAAa,YAAY;AAClC,aAAO,SAAS,UAAU;AAAA,IAC5B;AAEA,UAAM,QAAmB,SAAS,QAAQ,QAAQ,EAAE,CAAC;AAErD,QAAI,CAAC,eAA2B,KAAK,GAAG;AACtC;AAAA,IACF;AAEA,WAAO,aAAyB,OAAO,gDAClC,aACA,MAAM,QAF4B;AAAA,MAGrC,WAAW,GAAG,WAAW,SAAS,KAAIA,MAAA,MAAM,MAAM,cAAZ,OAAAA,MAAyB,EAAE;AAAA,IACnE,EAAC;AAAA,EACH;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,UACE,CAAC,oBAAoB,OAAO,EAAE,GAAG;AAAA,UACjC,0BAA0B;AAAA,QAC5B;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,OACI,OAXL;AAAA,MAaC;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,KAAK,0BAA0B,cAA2B;AAAA,aACjE,aAFL;AAAA,YAGC,SAAS,kBAAM;AAAA,YAEd;AAAA;AAAA,QACH;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,KAAK,gCAAgC;AAAA,YAChD,iBAAe;AAAA,YACf,iBAAe;AAAA,YAEd,sBAAY;AAAA;AAAA,QACf;AAAA,QACA,oBAAC,gBAAa,IAAI,gBAAiB,wBAAa;AAAA;AAAA;AAAA,EAClD;AAEJ,CAAC;","names":["InputGroup","_a"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/form/error-message/error-message.tsx"],"sourcesContent":["import { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport { forwardRef, type ReactNode } from \"react\";\n\nexport interface ErrorMessageProps extends React.HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n id: string;\n className?: string;\n}\n\nexport const ErrorMessage = forwardRef<HTMLDivElement, ErrorMessageProps>(\n ({ children, id, className, ...rest }, ref) => {\n return (\n <div\n aria-live=\"assertive\"\n className={clsx(\"hds-error-message\", className as undefined)}\n id={id}\n ref={ref}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\nErrorMessage.displayName = \"ErrorMessage\";\n"],"mappings":";;;;;;;AAAA,SAAS,YAAY;AACrB,SAAS,kBAAkC;AAWrC;AAHC,IAAM,eAAe;AAAA,EAC1B,CAAC,IAAsC,QAAQ;AAA9C,iBAAE,YAAU,IAAI,UAVnB,IAUG,IAA8B,iBAA9B,IAA8B,CAA5B,YAAU,MAAI;AACf,WACE;AAAA,MAAC;AAAA;AAAA,QACC,aAAU;AAAA,QACV,WAAW,KAAK,qBAAqB,SAAsB;AAAA,QAC3D;AAAA,QACA;AAAA,SACI,OALL;AAAA,QAOE;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;AACA,aAAa,cAAc;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/form/fieldset/fieldset.tsx"],"sourcesContent":["import { useId, forwardRef, createContext, useContext } from \"react\";\nimport type { FieldsetHTMLAttributes, HTMLAttributes, ReactNode, CSSProperties } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport { ErrorMessage } from \"../error-message\";\n\nexport interface FieldsetProps extends FieldsetHTMLAttributes<HTMLFieldSetElement> {\n className?: string;\n style?: CSSProperties;\n /**\n * Providing an errorMessage will also give contained Checkboxes or Radio buttons\n * error styling and aria to indicate invalid state.\n *\n * For Radio buttons you are even better off using RadioGroup.\n */\n errorMessage?: ReactNode;\n legendProps?: HTMLAttributes<HTMLElement> & { size: \"default\" | \"large\" };\n legend: ReactNode;\n children: ReactNode;\n}\n\nconst FieldsetContext = createContext<{ hasError: boolean }>({ hasError: false });\n\nexport const useFieldsetContext = () => useContext(FieldsetContext);\n\nexport const Fieldset = forwardRef<HTMLFieldSetElement, FieldsetProps>(function Fieldset(\n {\n className,\n style,\n errorMessage,\n legendProps: { size: legendSize = \"default\", className: legendClassName, ...legendProps } = {},\n legend,\n children,\n ...rest\n },\n ref,\n) {\n const errorMessageId = useId();\n\n return (\n <fieldset\n aria-describedby={errorMessage ? errorMessageId : undefined}\n aria-invalid={errorMessage ? true : undefined}\n className={clsx(\"hds-fieldset\", className as undefined)}\n ref={ref}\n style={style}\n {...rest}\n >\n <legend\n className={clsx(\n \"hds-fieldset__legend\",\n { [`hds-fieldset__legend--${legendSize}`]: legendSize },\n legendClassName as undefined,\n )}\n {...legendProps}\n >\n {legend}\n </legend>\n <FieldsetContext.Provider value={{ hasError: Boolean(errorMessage) }}>\n {children}\n </FieldsetContext.Provider>\n <ErrorMessage id={errorMessageId}>{errorMessage}</ErrorMessage>\n </fieldset>\n );\n});\n"],"mappings":";;;;;;;;;;AAAA,SAAS,OAAO,YAAY,eAAe,kBAAkB;AAE7D,SAAS,YAAY;AAqCjB,SAQE,KARF;AAnBJ,IAAM,kBAAkB,cAAqC,EAAE,UAAU,MAAM,CAAC;AAEzE,IAAM,qBAAqB,MAAM,WAAW,eAAe;AAE3D,IAAM,WAAW,WAA+C,SAASA,UAC9E,IASA,KACA;AAVA,eAIe;AAAA,IAHb;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa,KAA+E,CAAC;AAAA,EA7BjG,IAyBE,IAIe,SAAE,QAAM,aAAa,WAAW,WAAW,gBA7B5D,IA6BiB,IAA+D,wBAA/D,IAA+D,CAA7D,QAA8B,eAJ/C,SAKE;AAAA;AAAA,IACA;AAAA,EA/BJ,IAyBE,IAOK,iBAPL,IAOK;AAAA,IANH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAKF,QAAM,iBAAiB,MAAM;AAE7B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,oBAAkB,eAAe,iBAAiB;AAAA,MAClD,gBAAc,eAAe,OAAO;AAAA,MACpC,WAAW,KAAK,gBAAgB,SAAsB;AAAA,MACtD;AAAA,MACA;AAAA,OACI,OANL;AAAA,MAQC;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA,EAAE,CAAC,yBAAyB,UAAU,EAAE,GAAG,WAAW;AAAA,cACtD;AAAA,YACF;AAAA,aACI,cANL;AAAA,YAQE;AAAA;AAAA,QACH;AAAA,QACA,oBAAC,gBAAgB,UAAhB,EAAyB,OAAO,EAAE,UAAU,QAAQ,YAAY,EAAE,GAChE,UACH;AAAA,QACA,oBAAC,gBAAa,IAAI,gBAAiB,wBAAa;AAAA;AAAA;AAAA,EAClD;AAEJ,CAAC;","names":["Fieldset"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/accordion/accordion-content.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { forwardRef, useContext } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport { AccordionItemContext } from \"./context\";\n\nexport interface AccordionContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const AccordionContent = forwardRef<HTMLDivElement, AccordionContentProps>(\n ({ children, className, ...rest }, ref) => {\n const context = useContext(AccordionItemContext);\n if (context === null) {\n return null;\n }\n return (\n <div\n id={context.contentId}\n aria-hidden={!context.open}\n data-state={context.open ? \"open\" : \"closed\"}\n {...{ inert: context.open ? undefined : \"true\" }}\n className={clsx(\"hds-accordion-item-content\", className as undefined)}\n ref={ref}\n {...rest}\n >\n <div className={clsx(\"hds-accordion-item-content-inner\")}>{children}</div>\n </div>\n );\n },\n);\n\nAccordionContent.displayName = \"Accordion.Content\";\n"],"mappings":";;;;;;;;;;AACA,SAAS,YAAY,kBAAkB;AACvC,SAAS,YAAY;AAuBb;AAhBD,IAAM,mBAAmB;AAAA,EAC9B,CAAC,IAAkC,QAAQ;AAA1C,iBAAE,YAAU,UAVf,IAUG,IAA0B,iBAA1B,IAA0B,CAAxB,YAAU;AACX,UAAM,UAAU,WAAW,oBAAoB;AAC/C,QAAI,YAAY,MAAM;AACpB,aAAO;AAAA,IACT;AACA,WACE;AAAA,MAAC;AAAA;AAAA,QACC,IAAI,QAAQ;AAAA,QACZ,eAAa,CAAC,QAAQ;AAAA,QACtB,cAAY,QAAQ,OAAO,SAAS;AAAA,SAChC,EAAE,OAAO,QAAQ,OAAO,SAAY,OAAO,IAJhD;AAAA,QAKC,WAAW,KAAK,8BAA8B,SAAsB;AAAA,QACpE;AAAA,UACI,OAPL;AAAA,QASC,8BAAC,SAAI,WAAW,KAAK,kCAAkC,GAAI,UAAS;AAAA;AAAA,IACtE;AAAA,EAEJ;AACF;AAEA,iBAAiB,cAAc;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/form/checkbox/checkbox.tsx"],"sourcesContent":["import { forwardRef, useId, type InputHTMLAttributes, type ReactNode } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport { ErrorMessage } from \"../error-message\";\nimport { useFieldsetContext } from \"../fieldset\";\n\nexport type CheckboxProps = Omit<InputHTMLAttributes<HTMLInputElement>, \"defaultValue\"> & {\n children: ReactNode;\n variant?: \"plain\" | \"bounding-box\";\n title?: string;\n} & (\n | {\n /**\n * Set to `true` to add error styling. The component will take care of aria to indicate invalid state.\n *\n * Normally you don't need this, as you should wrap your Checkboxes in the Fieldset component.\n * When providing an errorMessage to Fieldset, all contained Checkboxes will get correct hasError state.\n *\n * You can use this when your checkbox is part of a non-HDS fieldset which shows an error message.\n */\n hasError?: boolean;\n errorMessage?: never;\n }\n | {\n hasError?: never;\n /**\n * Set an error message to add error styling, and display the error message.\n * The component will take care of aria to connect the error message to the checkbox.\n *\n * Use this when your checkbox is standalone (not part of a fieldset).\n */\n errorMessage?: ReactNode;\n }\n );\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n variant = \"plain\",\n hasError: hasErrorProp,\n errorMessage,\n title,\n children,\n className,\n ...rest\n },\n ref,\n ) => {\n const errorMessageId = useId();\n const { hasError: hasFieldsetError } = useFieldsetContext();\n const hasError = !!errorMessage || hasFieldsetError || hasErrorProp;\n\n return (\n <div className={clsx(\"hds-checkbox-wrapper\")}>\n <div\n className={clsx(\n \"hds-checkbox\",\n {\n [`hds-checkbox--${variant}`]: variant === \"bounding-box\",\n \"hds-checkbox--error\": hasError,\n },\n className as undefined,\n )}\n >\n <label>\n <input\n {...rest}\n aria-invalid={hasError ? true : undefined}\n aria-describedby={errorMessage ? errorMessageId : undefined}\n ref={ref}\n type=\"checkbox\"\n />\n <span aria-hidden className=\"hds-checkbox__checkmark\" />\n {title ? <p className=\"hds-checkbox__title\">{title}</p> : children}\n </label>\n {title ? children : null}\n </div>\n <ErrorMessage id={errorMessageId}>{errorMessage}</ErrorMessage>\n </div>\n );\n },\n);\nCheckbox.displayName = \"Checkbox\";\n"],"mappings":";;;;;;;;;;;;;AAAA,SAAS,YAAY,aAAuD;AAC5E,SAAS,YAAY;AA8DX,SACE,KADF;AA7BH,IAAM,WAAW;AAAA,EACtB,CACE,IASA,QACG;AAVH,iBACE;AAAA,gBAAU;AAAA,MACV,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IA1CN,IAoCI,IAOK,iBAPL,IAOK;AAAA,MANH;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAKF,UAAM,iBAAiB,MAAM;AAC7B,UAAM,EAAE,UAAU,iBAAiB,IAAI,mBAAmB;AAC1D,UAAM,WAAW,CAAC,CAAC,gBAAgB,oBAAoB;AAEvD,WACE,qBAAC,SAAI,WAAW,KAAK,sBAAsB,GACzC;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA;AAAA,cACE,CAAC,iBAAiB,OAAO,EAAE,GAAG,YAAY;AAAA,cAC1C,uBAAuB;AAAA,YACzB;AAAA,YACA;AAAA,UACF;AAAA,UAEA;AAAA,iCAAC,WACC;AAAA;AAAA,gBAAC;AAAA,iDACK,OADL;AAAA,kBAEC,gBAAc,WAAW,OAAO;AAAA,kBAChC,oBAAkB,eAAe,iBAAiB;AAAA,kBAClD;AAAA,kBACA,MAAK;AAAA;AAAA,cACP;AAAA,cACA,oBAAC,UAAK,eAAW,MAAC,WAAU,2BAA0B;AAAA,cACrD,QAAQ,oBAAC,OAAE,WAAU,uBAAuB,iBAAM,IAAO;AAAA,eAC5D;AAAA,YACC,QAAQ,WAAW;AAAA;AAAA;AAAA,MACtB;AAAA,MACA,oBAAC,gBAAa,IAAI,gBAAiB,wBAAa;AAAA,OAClD;AAAA,EAEJ;AACF;AACA,SAAS,cAAc;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/message/message.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { Box, type BoxProps } from \"../box/box\";\n\ninterface MessageTitleProps extends React.HTMLAttributes<HTMLParagraphElement> {\n /**\n * Change the default rendered element for the one passed as a child, merging their props and behavior.\n *\n * @default false\n */\n asChild?: boolean;\n}\nexport const MessageTitle = forwardRef<HTMLParagraphElement, MessageTitleProps>(\n ({ asChild, className, ...rest }, ref) => {\n const Component = asChild ? Slot : \"div\";\n return (\n <Component\n className={clsx(\"hds-message__title\", className as undefined)}\n ref={ref}\n {...rest}\n />\n );\n },\n);\nMessageTitle.displayName = \"Message.Title\";\n\ninterface MessageDescriptionProps extends React.HTMLAttributes<HTMLParagraphElement> {\n /**\n * Change the default rendered element for the one passed as a child, merging their props and behavior.\n *\n * @default false\n */\n asChild?: boolean;\n}\nexport const MessageDescription = forwardRef<HTMLParagraphElement, MessageDescriptionProps>(\n ({ asChild, className, ...rest }, ref) => {\n const Component = asChild ? Slot : \"div\";\n return (\n <Component\n className={clsx(\"hds-message__description\", className as undefined)}\n ref={ref}\n {...rest}\n />\n );\n },\n);\nMessageDescription.displayName = \"Message.Description\";\n\nexport type MessageProps = (\n | {\n variant?: \"success\" | \"attention\" | \"warning\" | \"info\";\n icon?: never;\n iconClassName?: never;\n }\n | {\n variant: \"neutral\";\n icon?: React.ReactNode;\n iconClassName?: string;\n }\n) &\n Omit<BoxProps, \"variant\" | \"asChild\">;\n\nexport const Message = forwardRef<HTMLDivElement, MessageProps>(\n ({ children, className, variant = \"success\", icon, iconClassName, ...rest }, ref) => {\n return (\n <Box\n className={clsx(`hds-message`, `hds-message--${variant}`, className as undefined)}\n ref={ref}\n {...rest}\n >\n {variant === \"neutral\" && (\n <div className={clsx(\"hds-message--neutral__icon\", iconClassName as undefined)}>\n {icon}\n </div>\n )}\n {children}\n </Box>\n );\n },\n) as MessageType;\nMessage.displayName = \"Message\";\n\ntype MessageType = ReturnType<typeof forwardRef<HTMLDivElement, MessageProps>> & {\n Title: typeof MessageTitle;\n Description: typeof MessageDescription;\n};\nMessage.Title = MessageTitle;\nMessage.Description = MessageDescription;\n"],"mappings":";;;;;;;;;;AAAA,SAAS,kBAAkB;AAC3B,SAAS,YAAY;AACrB,SAAS,YAAY;AAef,cAiDA,YAjDA;AAJC,IAAM,eAAe;AAAA,EAC1B,CAAC,IAAiC,QAAQ;AAAzC,iBAAE,WAAS,UAdd,IAcG,IAAyB,iBAAzB,IAAyB,CAAvB,WAAS;AACV,UAAM,YAAY,UAAU,OAAO;AACnC,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,KAAK,sBAAsB,SAAsB;AAAA,QAC5D;AAAA,SACI;AAAA,IACN;AAAA,EAEJ;AACF;AACA,aAAa,cAAc;AAUpB,IAAM,qBAAqB;AAAA,EAChC,CAAC,IAAiC,QAAQ;AAAzC,iBAAE,WAAS,UApCd,IAoCG,IAAyB,iBAAzB,IAAyB,CAAvB,WAAS;AACV,UAAM,YAAY,UAAU,OAAO;AACnC,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,KAAK,4BAA4B,SAAsB;AAAA,QAClE;AAAA,SACI;AAAA,IACN;AAAA,EAEJ;AACF;AACA,mBAAmB,cAAc;AAgB1B,IAAM,UAAU;AAAA,EACrB,CAAC,IAA4E,QAAQ;AAApF,iBAAE,YAAU,WAAW,UAAU,WAAW,MAAM,cAhErD,IAgEG,IAAoE,iBAApE,IAAoE,CAAlE,YAAU,aAAW,WAAqB,QAAM;AACjD,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,KAAK,eAAe,gBAAgB,OAAO,IAAI,SAAsB;AAAA,QAChF;AAAA,SACI,OAHL;AAAA,QAKE;AAAA,sBAAY,aACX,oBAAC,SAAI,WAAW,KAAK,8BAA8B,aAA0B,GAC1E,gBACH;AAAA,UAED;AAAA;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;AACA,QAAQ,cAAc;AAMtB,QAAQ,QAAQ;AAChB,QAAQ,cAAc;","names":[]}
|
package/dist/chunk-XFKD6EEJ.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=chunk-XFKD6EEJ.mjs.map
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|