fictoan-react 2.0.0-beta.18 → 2.0.0-beta.19
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/components/Badge/Badge.d.ts.map +1 -1
- package/dist/components/Badge/Badge.js +17 -18
- package/dist/components/Badge/Badge.js.map +1 -1
- package/dist/components/Breadcrumbs/Breadcrumbs.d.ts.map +1 -1
- package/dist/components/Breadcrumbs/Breadcrumbs.js +37 -38
- package/dist/components/Breadcrumbs/Breadcrumbs.js.map +1 -1
- package/dist/components/Callout/Callout.d.ts.map +1 -1
- package/dist/components/Callout/Callout.js +31 -25
- package/dist/components/Callout/Callout.js.map +1 -1
- package/dist/components/Divider/Divider.js +7 -7
- package/dist/components/Divider/Divider.js.map +1 -1
- package/dist/components/Element/Element.d.ts.map +1 -1
- package/dist/components/Element/Element.js +135 -133
- package/dist/components/Element/Element.js.map +1 -1
- package/dist/components/Element/constants.d.ts +21 -21
- package/dist/components/Element/constants.d.ts.map +1 -1
- package/dist/components/Element/constants.js.map +1 -1
- package/dist/components/Form/Checkbox/Switch.d.ts.map +1 -1
- package/dist/components/Form/Checkbox/Switch.js +11 -10
- package/dist/components/Form/Checkbox/Switch.js.map +1 -1
- package/dist/components/Form/FormItemGroup/FormItemGroup.d.ts.map +1 -1
- package/dist/components/Form/FormItemGroup/FormItemGroup.js +17 -17
- package/dist/components/Form/FormItemGroup/FormItemGroup.js.map +1 -1
- package/dist/components/Form/ListBox/ListBox.d.ts +1 -1
- package/dist/components/Form/ListBox/ListBox.d.ts.map +1 -1
- package/dist/components/Form/ListBox/ListBox.js +110 -107
- package/dist/components/Form/ListBox/ListBox.js.map +1 -1
- package/dist/components/Form/RadioButton/RadioTabGroup.d.ts +1 -1
- package/dist/components/Form/RadioButton/RadioTabGroup.js +46 -46
- package/dist/components/Form/RadioButton/RadioTabGroup.js.map +1 -1
- package/dist/components/Form/Select/Select.d.ts +1 -1
- package/dist/components/Form/Select/Select.d.ts.map +1 -1
- package/dist/components/Meter/Meter.d.ts.map +1 -1
- package/dist/components/Meter/Meter.js +54 -59
- package/dist/components/Meter/Meter.js.map +1 -1
- package/dist/components/Modal/Modal.d.ts.map +1 -1
- package/dist/components/Modal/Modal.js +20 -19
- package/dist/components/Modal/Modal.js.map +1 -1
- package/dist/components/Notification/NotificationsProvider/NotificationsProvider.d.ts.map +1 -1
- package/dist/components/Notification/NotificationsProvider/NotificationsProvider.js +44 -44
- package/dist/components/Notification/NotificationsProvider/NotificationsProvider.js.map +1 -1
- package/dist/components/Pagination/Pagination.d.ts +1 -1
- package/dist/components/Pagination/Pagination.d.ts.map +1 -1
- package/dist/components/Pagination/Pagination.js +42 -41
- package/dist/components/Pagination/Pagination.js.map +1 -1
- package/dist/components/Portion/Portion.d.ts +1 -0
- package/dist/components/Portion/Portion.d.ts.map +1 -1
- package/dist/components/Portion/Portion.js +13 -12
- package/dist/components/Portion/Portion.js.map +1 -1
- package/dist/components/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/components/ProgressBar/ProgressBar.js +23 -26
- package/dist/components/ProgressBar/ProgressBar.js.map +1 -1
- package/dist/components/Row/Row.d.ts +1 -0
- package/dist/components/Row/Row.d.ts.map +1 -1
- package/dist/components/Row/Row.js +22 -22
- package/dist/components/Row/Row.js.map +1 -1
- package/dist/components/Skeleton/Skeleton.d.ts.map +1 -1
- package/dist/components/Skeleton/Skeleton.js +25 -27
- package/dist/components/Skeleton/Skeleton.js.map +1 -1
- package/dist/components/Table/Table.d.ts +0 -1
- package/dist/components/Table/Table.d.ts.map +1 -1
- package/dist/components/Table/Table.js +21 -34
- package/dist/components/Table/Table.js.map +1 -1
- package/dist/components/Tabs/Tabs.d.ts.map +1 -1
- package/dist/components/Tabs/Tabs.js +49 -47
- package/dist/components/Tabs/Tabs.js.map +1 -1
- package/dist/components/Toast/ToastsProvider/ToastsProvider.d.ts.map +1 -1
- package/dist/components/Toast/ToastsProvider/ToastsProvider.js +22 -22
- package/dist/components/Toast/ToastsProvider/ToastsProvider.js.map +1 -1
- package/dist/components/Typography/Heading.js +11 -11
- package/dist/components/Typography/Heading.js.map +1 -1
- package/dist/components/Typography/Text.js +7 -7
- package/dist/components/Typography/Text.js.map +1 -1
- package/dist/fictoan-schema.json +33 -37
- package/dist/index.css +3 -3
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +129 -127
- package/dist/index.js.map +1 -1
- package/dist/utils/classNames.d.ts +1 -1
- package/dist/utils/classNames.d.ts.map +1 -1
- package/dist/utils/classNames.js.map +1 -1
- package/dist/utils/propSeparation.js +4 -4
- package/dist/utils/propSeparation.js.map +1 -1
- package/package.json +14 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
|
|
3
|
-
export declare const RadioTabGroup: React.ForwardRefExoticComponent<Omit<import('./constants').RadioGroupProps, "name" | keyof import('./constants').RadioTabGroupCustomProps> & import('./constants').RadioTabGroupCustomProps & import('
|
|
3
|
+
export declare const RadioTabGroup: React.ForwardRefExoticComponent<Omit<import('./constants').RadioGroupProps, "name" | keyof import('./constants').RadioTabGroupCustomProps> & import('./constants').RadioTabGroupCustomProps & import('../../..').CommonProps & {
|
|
4
4
|
name?: string;
|
|
5
5
|
} & React.RefAttributes<HTMLDivElement>>;
|
|
6
6
|
//# sourceMappingURL=RadioTabGroup.d.ts.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as s, jsxs as d } from "react/jsx-runtime";
|
|
3
|
-
import y, { useMemo as
|
|
3
|
+
import y, { useMemo as Z, useRef as B, useState as p, useCallback as M, useEffect as X } from "react";
|
|
4
4
|
import { Div as c } from "../../Element/Tags.js";
|
|
5
|
-
import { deriveAriaIds as
|
|
6
|
-
import { separateWrapperProps as
|
|
5
|
+
import { deriveAriaIds as _, FormItem as tt } from "../FormItem/FormItem.js";
|
|
6
|
+
import { separateWrapperProps as et } from "../../../utils/propSeparation.js";
|
|
7
7
|
/* empty css */
|
|
8
|
-
import { Element as
|
|
9
|
-
const
|
|
8
|
+
import { Element as rt } from "../../Element/Element.js";
|
|
9
|
+
const ot = y.forwardRef(
|
|
10
10
|
({
|
|
11
11
|
id: u,
|
|
12
12
|
name: S,
|
|
@@ -14,43 +14,43 @@ const rt = y.forwardRef(
|
|
|
14
14
|
helpText: N,
|
|
15
15
|
errorText: m,
|
|
16
16
|
options: f,
|
|
17
|
-
defaultValue:
|
|
17
|
+
defaultValue: st,
|
|
18
18
|
value: h,
|
|
19
19
|
required: P,
|
|
20
20
|
onChange: b,
|
|
21
21
|
size: v = "medium",
|
|
22
|
-
bgColour:
|
|
23
|
-
disabled:
|
|
24
|
-
...
|
|
25
|
-
},
|
|
26
|
-
const
|
|
22
|
+
bgColour: q,
|
|
23
|
+
disabled: G,
|
|
24
|
+
...j
|
|
25
|
+
}, C) => {
|
|
26
|
+
const E = Z(() => S || u, [S, u]), i = B(null), [R, T] = p({
|
|
27
27
|
width: 0,
|
|
28
28
|
transform: "translateX(0)"
|
|
29
|
-
}), [
|
|
29
|
+
}), [F, D] = p(!1), [a, L] = p(0), [w, O] = p(0), W = B([]), g = M(() => {
|
|
30
30
|
if (!i.current) return;
|
|
31
31
|
const t = i.current, e = t.closest("[data-input-wrapper]");
|
|
32
32
|
if (t && e) {
|
|
33
33
|
const o = t.scrollWidth, n = e.clientWidth, r = o > n;
|
|
34
|
-
|
|
34
|
+
D(r), O(r ? o - n : 0);
|
|
35
35
|
}
|
|
36
36
|
}, []);
|
|
37
|
-
|
|
37
|
+
X(() => {
|
|
38
38
|
const t = i.current;
|
|
39
39
|
if (!t) return;
|
|
40
|
-
|
|
40
|
+
g();
|
|
41
41
|
const e = new ResizeObserver(() => {
|
|
42
|
-
|
|
42
|
+
g();
|
|
43
43
|
});
|
|
44
44
|
return e.observe(t), t.closest("[data-input-wrapper]") && e.observe(t.closest("[data-input-wrapper]")), () => e.disconnect();
|
|
45
|
-
}, [
|
|
45
|
+
}, [g]), X(() => {
|
|
46
46
|
const t = f.findIndex((e) => e.value === h);
|
|
47
47
|
if (t >= 0) {
|
|
48
48
|
const e = () => {
|
|
49
|
-
const o =
|
|
49
|
+
const o = W.current[t];
|
|
50
50
|
if (o) {
|
|
51
51
|
const n = o.offsetWidth;
|
|
52
52
|
let r = "translateX(0)";
|
|
53
|
-
t > 0 && (r = `translateX(${
|
|
53
|
+
t > 0 && (r = `translateX(${W.current.slice(0, t).reduce((Y, I) => Y + ((I == null ? void 0 : I.offsetWidth) || 0), 0)}px)`), T({ width: n, transform: r });
|
|
54
54
|
}
|
|
55
55
|
};
|
|
56
56
|
if (document.fonts && document.fonts.ready)
|
|
@@ -65,21 +65,21 @@ const rt = y.forwardRef(
|
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
67
|
}, [h, f]);
|
|
68
|
-
const
|
|
68
|
+
const V = (t) => {
|
|
69
69
|
b == null || b(t.target.value);
|
|
70
|
-
}, { wrapperProps:
|
|
70
|
+
}, { wrapperProps: z, inputProps: H } = et(j), $ = M((t) => {
|
|
71
71
|
const e = i.current;
|
|
72
72
|
if (!e) return;
|
|
73
73
|
const n = e.clientWidth * 0.8;
|
|
74
74
|
let r = t === "right" ? Math.min(a + n, w) : Math.max(a - n, 0);
|
|
75
|
-
|
|
75
|
+
L(r), requestAnimationFrame(() => {
|
|
76
76
|
e.style.transform = `translateX(-${r}px)`;
|
|
77
77
|
});
|
|
78
|
-
}, [a, w]),
|
|
79
|
-
v &&
|
|
80
|
-
const
|
|
78
|
+
}, [a, w]), J = a > 0, K = a < w, A = [];
|
|
79
|
+
v && A.push(`size-${v}`);
|
|
80
|
+
const Q = y.useId(), l = u || `radio-tab-group-${Q.replace(/:/g, "")}`, { describedBy: U } = _(l, N, m);
|
|
81
81
|
return /* @__PURE__ */ s(
|
|
82
|
-
|
|
82
|
+
tt,
|
|
83
83
|
{
|
|
84
84
|
label: x,
|
|
85
85
|
htmlFor: l,
|
|
@@ -87,28 +87,28 @@ const rt = y.forwardRef(
|
|
|
87
87
|
errorText: m,
|
|
88
88
|
required: P,
|
|
89
89
|
size: v,
|
|
90
|
-
...
|
|
90
|
+
...z,
|
|
91
91
|
children: /* @__PURE__ */ d(
|
|
92
|
-
|
|
92
|
+
rt,
|
|
93
93
|
{
|
|
94
94
|
as: "div",
|
|
95
95
|
"data-radio-tab-group": !0,
|
|
96
|
-
ref:
|
|
96
|
+
ref: C,
|
|
97
97
|
id: l,
|
|
98
|
-
classNames:
|
|
99
|
-
|
|
98
|
+
classNames: A,
|
|
99
|
+
bgColour: q,
|
|
100
100
|
role: "radiogroup",
|
|
101
101
|
"aria-label": x,
|
|
102
102
|
"aria-invalid": !!m || void 0,
|
|
103
103
|
"aria-required": P,
|
|
104
|
-
"aria-describedby":
|
|
105
|
-
...
|
|
104
|
+
"aria-describedby": U,
|
|
105
|
+
...H,
|
|
106
106
|
children: [
|
|
107
|
-
|
|
107
|
+
F && J && /* @__PURE__ */ s(
|
|
108
108
|
c,
|
|
109
109
|
{
|
|
110
110
|
className: "scroll-button left",
|
|
111
|
-
onClick: () =>
|
|
111
|
+
onClick: () => $("left"),
|
|
112
112
|
children: /* @__PURE__ */ s("svg", { viewBox: "0 0 24 24", children: /* @__PURE__ */ s("polyline", { points: "15 18 9 12 15 6" }) })
|
|
113
113
|
}
|
|
114
114
|
),
|
|
@@ -124,8 +124,8 @@ const rt = y.forwardRef(
|
|
|
124
124
|
{
|
|
125
125
|
className: "indicator",
|
|
126
126
|
style: {
|
|
127
|
-
width: `${
|
|
128
|
-
transform:
|
|
127
|
+
width: `${R.width}px`,
|
|
128
|
+
transform: R.transform
|
|
129
129
|
}
|
|
130
130
|
}
|
|
131
131
|
),
|
|
@@ -138,17 +138,17 @@ const rt = y.forwardRef(
|
|
|
138
138
|
type: "radio",
|
|
139
139
|
...n,
|
|
140
140
|
id: r,
|
|
141
|
-
name:
|
|
141
|
+
name: E,
|
|
142
142
|
checked: h === t.value,
|
|
143
|
-
disabled:
|
|
144
|
-
onChange:
|
|
143
|
+
disabled: G || t.disabled,
|
|
144
|
+
onChange: V
|
|
145
145
|
}
|
|
146
146
|
),
|
|
147
147
|
/* @__PURE__ */ s(
|
|
148
148
|
"label",
|
|
149
149
|
{
|
|
150
|
-
ref: (
|
|
151
|
-
|
|
150
|
+
ref: (k) => {
|
|
151
|
+
W.current[e] = k;
|
|
152
152
|
},
|
|
153
153
|
htmlFor: r,
|
|
154
154
|
children: t.label
|
|
@@ -159,11 +159,11 @@ const rt = y.forwardRef(
|
|
|
159
159
|
]
|
|
160
160
|
}
|
|
161
161
|
),
|
|
162
|
-
|
|
162
|
+
F && K && /* @__PURE__ */ s(
|
|
163
163
|
c,
|
|
164
164
|
{
|
|
165
165
|
className: "scroll-button right",
|
|
166
|
-
onClick: () =>
|
|
166
|
+
onClick: () => $("right"),
|
|
167
167
|
children: /* @__PURE__ */ s("svg", { viewBox: "0 0 24 24", children: /* @__PURE__ */ s("polyline", { points: "9 6 15 12 9 18" }) })
|
|
168
168
|
}
|
|
169
169
|
)
|
|
@@ -175,8 +175,8 @@ const rt = y.forwardRef(
|
|
|
175
175
|
);
|
|
176
176
|
}
|
|
177
177
|
);
|
|
178
|
-
|
|
178
|
+
ot.displayName = "RadioTabGroup";
|
|
179
179
|
export {
|
|
180
|
-
|
|
180
|
+
ot as RadioTabGroup
|
|
181
181
|
};
|
|
182
182
|
//# sourceMappingURL=RadioTabGroup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RadioTabGroup.js","sources":["../../../../src/components/Form/RadioButton/RadioTabGroup.tsx"],"sourcesContent":["// REACT CORE ==========================================================================================================\nimport React, { useMemo, useRef, useEffect, useState, useCallback } from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { Div } from \"$tags\";\nimport { Element } from \"$element\";\nimport { FormItem, deriveAriaIds } from \"../FormItem/FormItem\";\nimport { SpacingTypes } from \"../../Element/constants\";\nimport { separateWrapperProps } from \"../../../utils/propSeparation\";\n\n// STYLES ==============================================================================================================\nimport \"./radio-tab-group.css\";\n\n// OTHER ===============================================================================================================\nimport { RadioTabGroupProps, RadioButtonElementType } from \"./constants\";\n\ninterface IndicatorPosition {\n width: number;\n transform: string;\n}\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const RadioTabGroup = React.forwardRef<HTMLDivElement, RadioTabGroupProps>(\n (\n {\n id,\n name,\n label,\n helpText,\n errorText,\n options,\n defaultValue,\n value,\n required,\n onChange,\n size = \"medium\",\n bgColour,\n disabled,\n ...props\n },\n ref\n ) => {\n const derivedName = useMemo(() => name || id, [name, id]);\n const optionsWrapperRef = useRef<HTMLDivElement>(null);\n\n const [indicatorPos, setIndicatorPos] = useState<IndicatorPosition>({\n width: 0,\n transform: \"translateX(0)\",\n });\n const [needsScroll, setNeedsScroll] = useState(false);\n const [scrollPosition, setScrollPosition] = useState(0);\n const [maxScroll, setMaxScroll] = useState(0);\n\n const labelsRef = useRef<(HTMLLabelElement | null)[]>([]);\n\n const measureWidths = useCallback(() => {\n if (!optionsWrapperRef.current) return;\n\n const wrapper = optionsWrapperRef.current;\n const inputWrapper = wrapper.closest(\"[data-input-wrapper]\");\n\n if (wrapper && inputWrapper) {\n const totalContentWidth = wrapper.scrollWidth;\n const availableWidth = inputWrapper.clientWidth;\n const needsToScroll = totalContentWidth > availableWidth;\n\n setNeedsScroll(needsToScroll);\n setMaxScroll(needsToScroll ? totalContentWidth - availableWidth : 0);\n }\n }, []);\n\n useEffect(() => {\n const wrapper = optionsWrapperRef.current;\n if (!wrapper) return;\n\n // Initial measurement\n measureWidths();\n\n // Set up observer for size changes\n const observer = new ResizeObserver(() => {\n measureWidths();\n });\n\n observer.observe(wrapper);\n if (wrapper.closest(\"[data-input-wrapper]\")) {\n observer.observe(wrapper.closest(\"[data-input-wrapper]\") as Element);\n }\n\n return () => observer.disconnect();\n }, [measureWidths]);\n\n // Update indicator position based on selected radio\n useEffect(() => {\n const selectedIndex = options.findIndex(option => option.value === value);\n if (selectedIndex >= 0) {\n const updateIndicator = () => {\n const label = labelsRef.current[selectedIndex];\n if (label) {\n const width = label.offsetWidth;\n let transform = \"translateX(0)\";\n\n if (selectedIndex > 0) {\n const offset = labelsRef.current\n .slice(0, selectedIndex)\n .reduce((acc, label) => acc + (label?.offsetWidth || 0), 0);\n transform = `translateX(${offset}px)`;\n }\n\n setIndicatorPos({ width, transform });\n }\n };\n\n // Wait for fonts to load before measuring to get correct widths\n if (document.fonts && document.fonts.ready) {\n document.fonts.ready.then(() => {\n requestAnimationFrame(() => {\n requestAnimationFrame(updateIndicator);\n });\n });\n } else {\n const timeoutId = setTimeout(updateIndicator, 100);\n return () => clearTimeout(timeoutId);\n }\n }\n }, [value, options]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e.target.value);\n };\n\n // Separate wrapper-level props (margin, padding, etc.) from component-specific props\n const { wrapperProps, inputProps } = separateWrapperProps(props);\n\n const handleScroll = useCallback((direction: \"left\" | \"right\") => {\n const wrapper = optionsWrapperRef.current;\n if (!wrapper) return;\n\n const visibleWidth = wrapper.clientWidth;\n const scrollAmount = visibleWidth * 0.8;\n\n let newPosition = direction === \"right\"\n ? Math.min(scrollPosition + scrollAmount, maxScroll)\n : Math.max(scrollPosition - scrollAmount, 0);\n\n setScrollPosition(newPosition);\n\n requestAnimationFrame(() => {\n wrapper.style.transform = `translateX(-${newPosition}px)`;\n });\n }, [scrollPosition, maxScroll]);\n\n const canScrollLeft = scrollPosition > 0;\n const canScrollRight = scrollPosition < maxScroll;\n\n const classNames: string[] = [];\n if (size) {\n classNames.push(`size-${size}`);\n }\n\n const reactId = React.useId();\n const finalGroupId = id || `radio-tab-group-${reactId.replace(/:/g, \"\")}`;\n const { describedBy } = deriveAriaIds(finalGroupId, helpText, errorText);\n\n return (\n <FormItem\n label={label}\n htmlFor={finalGroupId}\n helpText={helpText}\n errorText={errorText}\n required={required}\n size={size}\n {...wrapperProps}\n >\n <Element\n as=\"div\"\n data-radio-tab-group\n ref={ref}\n id={finalGroupId}\n classNames={classNames}\n name={derivedName}\n role=\"radiogroup\"\n aria-label={label}\n aria-invalid={Boolean(errorText) || undefined}\n aria-required={required}\n aria-describedby={describedBy}\n {...inputProps}\n >\n {/* LEFT SCROLL BUTTON */}\n {needsScroll && canScrollLeft && (\n <Div\n className=\"scroll-button left\"\n onClick={() => handleScroll(\"left\")}\n >\n <svg viewBox=\"0 0 24 24\">\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </Div>\n )}\n\n {/* RADIO OPTIONS */}\n <Div className=\"rtg-options-container\">\n <Div\n className=\"rtg-options-wrapper\"\n ref={optionsWrapperRef}\n >\n {/* INDICATOR */}\n <Div\n className=\"indicator\"\n style={{\n width: `${indicatorPos.width}px`,\n transform: indicatorPos.transform,\n }}\n />\n\n {options.map((option, index) => {\n const { id: optionId, ...optionProps } = option;\n const finalId = optionId || `${finalGroupId}-option-${index}`;\n\n return (\n <React.Fragment key={finalId}>\n <input\n type=\"radio\"\n {...optionProps}\n id={finalId}\n name={derivedName}\n checked={value === option.value}\n disabled={disabled || option.disabled}\n onChange={handleChange}\n />\n <label\n ref={el => { labelsRef.current[index] = el; }}\n htmlFor={finalId}\n >\n {option.label}\n </label>\n </React.Fragment>\n );\n })}\n </Div>\n\n {/* RIGHT SCROLL BUTTON */}\n {needsScroll && canScrollRight && (\n <Div\n className=\"scroll-button right\"\n onClick={() => handleScroll(\"right\")}\n >\n <svg viewBox=\"0 0 24 24\">\n <polyline points=\"9 6 15 12 9 18\" />\n </svg>\n </Div>\n )}\n </Div>\n </Element>\n </FormItem>\n );\n }\n);\nRadioTabGroup.displayName = \"RadioTabGroup\";\n"],"names":["RadioTabGroup","React","id","name","label","helpText","errorText","options","defaultValue","value","required","onChange","size","bgColour","disabled","props","ref","derivedName","useMemo","optionsWrapperRef","useRef","indicatorPos","setIndicatorPos","useState","needsScroll","setNeedsScroll","scrollPosition","setScrollPosition","maxScroll","setMaxScroll","labelsRef","measureWidths","useCallback","wrapper","inputWrapper","totalContentWidth","availableWidth","needsToScroll","useEffect","observer","selectedIndex","option","updateIndicator","width","transform","acc","timeoutId","handleChange","e","wrapperProps","inputProps","separateWrapperProps","handleScroll","direction","scrollAmount","newPosition","canScrollLeft","canScrollRight","classNames","reactId","finalGroupId","describedBy","deriveAriaIds","jsx","FormItem","jsxs","Element","Div","index","optionId","optionProps","finalId","el"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RadioTabGroup.js","sources":["../../../../src/components/Form/RadioButton/RadioTabGroup.tsx"],"sourcesContent":["// REACT CORE ==========================================================================================================\nimport React, { useMemo, useRef, useEffect, useState, useCallback } from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { Div } from \"$tags\";\nimport { Element } from \"$element\";\nimport { FormItem, deriveAriaIds } from \"../FormItem/FormItem\";\nimport { SpacingTypes } from \"../../Element/constants\";\nimport { separateWrapperProps } from \"../../../utils/propSeparation\";\n\n// STYLES ==============================================================================================================\nimport \"./radio-tab-group.css\";\n\n// OTHER ===============================================================================================================\nimport { RadioTabGroupProps, RadioButtonElementType } from \"./constants\";\n\ninterface IndicatorPosition {\n width: number;\n transform: string;\n}\n\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const RadioTabGroup = React.forwardRef<HTMLDivElement, RadioTabGroupProps>(\n (\n {\n id,\n name,\n label,\n helpText,\n errorText,\n options,\n defaultValue,\n value,\n required,\n onChange,\n size = \"medium\",\n bgColour,\n disabled,\n ...props\n },\n ref\n ) => {\n const derivedName = useMemo(() => name || id, [name, id]);\n const optionsWrapperRef = useRef<HTMLDivElement>(null);\n\n const [indicatorPos, setIndicatorPos] = useState<IndicatorPosition>({\n width: 0,\n transform: \"translateX(0)\",\n });\n const [needsScroll, setNeedsScroll] = useState(false);\n const [scrollPosition, setScrollPosition] = useState(0);\n const [maxScroll, setMaxScroll] = useState(0);\n\n const labelsRef = useRef<(HTMLLabelElement | null)[]>([]);\n\n const measureWidths = useCallback(() => {\n if (!optionsWrapperRef.current) return;\n\n const wrapper = optionsWrapperRef.current;\n const inputWrapper = wrapper.closest(\"[data-input-wrapper]\");\n\n if (wrapper && inputWrapper) {\n const totalContentWidth = wrapper.scrollWidth;\n const availableWidth = inputWrapper.clientWidth;\n const needsToScroll = totalContentWidth > availableWidth;\n\n setNeedsScroll(needsToScroll);\n setMaxScroll(needsToScroll ? totalContentWidth - availableWidth : 0);\n }\n }, []);\n\n useEffect(() => {\n const wrapper = optionsWrapperRef.current;\n if (!wrapper) return;\n\n // Initial measurement\n measureWidths();\n\n // Set up observer for size changes\n const observer = new ResizeObserver(() => {\n measureWidths();\n });\n\n observer.observe(wrapper);\n if (wrapper.closest(\"[data-input-wrapper]\")) {\n observer.observe(wrapper.closest(\"[data-input-wrapper]\") as Element);\n }\n\n return () => observer.disconnect();\n }, [measureWidths]);\n\n // Update indicator position based on selected radio\n useEffect(() => {\n const selectedIndex = options.findIndex(option => option.value === value);\n if (selectedIndex >= 0) {\n const updateIndicator = () => {\n const label = labelsRef.current[selectedIndex];\n if (label) {\n const width = label.offsetWidth;\n let transform = \"translateX(0)\";\n\n if (selectedIndex > 0) {\n const offset = labelsRef.current\n .slice(0, selectedIndex)\n .reduce((acc, label) => acc + (label?.offsetWidth || 0), 0);\n transform = `translateX(${offset}px)`;\n }\n\n setIndicatorPos({ width, transform });\n }\n };\n\n // Wait for fonts to load before measuring to get correct widths\n if (document.fonts && document.fonts.ready) {\n document.fonts.ready.then(() => {\n requestAnimationFrame(() => {\n requestAnimationFrame(updateIndicator);\n });\n });\n } else {\n const timeoutId = setTimeout(updateIndicator, 100);\n return () => clearTimeout(timeoutId);\n }\n }\n }, [value, options]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e.target.value);\n };\n\n // Separate wrapper-level props (margin, padding, etc.) from component-specific props\n const { wrapperProps, inputProps } = separateWrapperProps(props);\n\n const handleScroll = useCallback((direction: \"left\" | \"right\") => {\n const wrapper = optionsWrapperRef.current;\n if (!wrapper) return;\n\n const visibleWidth = wrapper.clientWidth;\n const scrollAmount = visibleWidth * 0.8;\n\n let newPosition = direction === \"right\"\n ? Math.min(scrollPosition + scrollAmount, maxScroll)\n : Math.max(scrollPosition - scrollAmount, 0);\n\n setScrollPosition(newPosition);\n\n requestAnimationFrame(() => {\n wrapper.style.transform = `translateX(-${newPosition}px)`;\n });\n }, [scrollPosition, maxScroll]);\n\n const canScrollLeft = scrollPosition > 0;\n const canScrollRight = scrollPosition < maxScroll;\n\n const classNames: string[] = [];\n if (size) {\n classNames.push(`size-${size}`);\n }\n\n const reactId = React.useId();\n const finalGroupId = id || `radio-tab-group-${reactId.replace(/:/g, \"\")}`;\n const { describedBy } = deriveAriaIds(finalGroupId, helpText, errorText);\n\n return (\n <FormItem\n label={label}\n htmlFor={finalGroupId}\n helpText={helpText}\n errorText={errorText}\n required={required}\n size={size}\n {...wrapperProps}\n >\n <Element\n as=\"div\"\n data-radio-tab-group\n ref={ref}\n id={finalGroupId}\n classNames={classNames}\n bgColour={bgColour}\n role=\"radiogroup\"\n aria-label={label}\n aria-invalid={Boolean(errorText) || undefined}\n aria-required={required}\n aria-describedby={describedBy}\n {...inputProps}\n >\n {/* LEFT SCROLL BUTTON */}\n {needsScroll && canScrollLeft && (\n <Div\n className=\"scroll-button left\"\n onClick={() => handleScroll(\"left\")}\n >\n <svg viewBox=\"0 0 24 24\">\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </Div>\n )}\n\n {/* RADIO OPTIONS */}\n <Div className=\"rtg-options-container\">\n <Div\n className=\"rtg-options-wrapper\"\n ref={optionsWrapperRef}\n >\n {/* INDICATOR */}\n <Div\n className=\"indicator\"\n style={{\n width: `${indicatorPos.width}px`,\n transform: indicatorPos.transform,\n }}\n />\n\n {options.map((option, index) => {\n const { id: optionId, ...optionProps } = option;\n const finalId = optionId || `${finalGroupId}-option-${index}`;\n\n return (\n <React.Fragment key={finalId}>\n <input\n type=\"radio\"\n {...optionProps}\n id={finalId}\n name={derivedName}\n checked={value === option.value}\n disabled={disabled || option.disabled}\n onChange={handleChange}\n />\n <label\n ref={el => { labelsRef.current[index] = el; }}\n htmlFor={finalId}\n >\n {option.label}\n </label>\n </React.Fragment>\n );\n })}\n </Div>\n\n {/* RIGHT SCROLL BUTTON */}\n {needsScroll && canScrollRight && (\n <Div\n className=\"scroll-button right\"\n onClick={() => handleScroll(\"right\")}\n >\n <svg viewBox=\"0 0 24 24\">\n <polyline points=\"9 6 15 12 9 18\" />\n </svg>\n </Div>\n )}\n </Div>\n </Element>\n </FormItem>\n );\n }\n);\nRadioTabGroup.displayName = \"RadioTabGroup\";\n"],"names":["RadioTabGroup","React","id","name","label","helpText","errorText","options","defaultValue","value","required","onChange","size","bgColour","disabled","props","ref","derivedName","useMemo","optionsWrapperRef","useRef","indicatorPos","setIndicatorPos","useState","needsScroll","setNeedsScroll","scrollPosition","setScrollPosition","maxScroll","setMaxScroll","labelsRef","measureWidths","useCallback","wrapper","inputWrapper","totalContentWidth","availableWidth","needsToScroll","useEffect","observer","selectedIndex","option","updateIndicator","width","transform","acc","timeoutId","handleChange","e","wrapperProps","inputProps","separateWrapperProps","handleScroll","direction","scrollAmount","newPosition","canScrollLeft","canScrollRight","classNames","reactId","finalGroupId","describedBy","deriveAriaIds","jsx","FormItem","jsxs","Element","Div","index","optionId","optionProps","finalId","el"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
|
|
3
|
-
export declare const Select: React.ForwardRefExoticComponent<Omit<import('
|
|
3
|
+
export declare const Select: React.ForwardRefExoticComponent<Omit<import('../../..').CommonAndHTMLProps<HTMLSelectElement>, keyof import('./constants').SelectCustomProps> & import('./constants').SelectCustomProps & React.RefAttributes<HTMLSelectElement>>;
|
|
4
4
|
//# sourceMappingURL=Select.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../../../src/components/Form/Select/Select.tsx"],"names":[],"mappings":"AACA,OAAO,KAAkB,MAAM,OAAO,CAAC;AASvC,OAAO,cAAc,CAAC;AAMtB,eAAO,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../../../src/components/Form/Select/Select.tsx"],"names":[],"mappings":"AACA,OAAO,KAAkB,MAAM,OAAO,CAAC;AASvC,OAAO,cAAc,CAAC;AAMtB,eAAO,MAAM,MAAM,mOAsFlB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Meter.d.ts","sourceRoot":"","sources":["../../../src/components/Meter/Meter.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAOvE,OAAO,aAAa,CAAC;AAKrB,MAAM,WAAW,qBAAqB;IAClC,MAAO,CAAC,EAAG,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC7B,GAAG,EAAmB,MAAM,CAAC;IAC7B,GAAG,EAAmB,MAAM,CAAC;IAC7B,GAAG,EAAmB,MAAM,CAAC;IAC7B,IAAI,EAAkB,MAAM,CAAC;IAC7B,KAAK,EAAiB,MAAM,CAAC;IAC7B,OAAkB,CAAC,EAAG,MAAM,CAAC;IAC7B,iBAAkB,CAAC,EAAG,OAAO,CAAC;IAC9B,MAAkB,CAAC,EAAG,MAAM,CAAC;IAC7B,MAAkB,CAAC,EAAG,MAAM,CAAC;IAC7B,KAAkB,CAAC,EAAG,MAAM,CAAC;IAC7B,SAAkB,CAAC,EAAG,MAAM,CAAC;IAC7B,WAAkB,CAAC,EAAG,MAAM,CAAC;CAChC;AAED,MAAM,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAChD,MAAM,MAAM,UAAU,GAAG,gBAAgB,GAAG,WAAW,CAAC;AACxD,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,EAAE,MAAM,qBAAqB,CAAC,GACrE,qBAAqB,CAAC;AAInD,eAAO,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"Meter.d.ts","sourceRoot":"","sources":["../../../src/components/Meter/Meter.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAOvE,OAAO,aAAa,CAAC;AAKrB,MAAM,WAAW,qBAAqB;IAClC,MAAO,CAAC,EAAG,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC7B,GAAG,EAAmB,MAAM,CAAC;IAC7B,GAAG,EAAmB,MAAM,CAAC;IAC7B,GAAG,EAAmB,MAAM,CAAC;IAC7B,IAAI,EAAkB,MAAM,CAAC;IAC7B,KAAK,EAAiB,MAAM,CAAC;IAC7B,OAAkB,CAAC,EAAG,MAAM,CAAC;IAC7B,iBAAkB,CAAC,EAAG,OAAO,CAAC;IAC9B,MAAkB,CAAC,EAAG,MAAM,CAAC;IAC7B,MAAkB,CAAC,EAAG,MAAM,CAAC;IAC7B,KAAkB,CAAC,EAAG,MAAM,CAAC;IAC7B,SAAkB,CAAC,EAAG,MAAM,CAAC;IAC7B,WAAkB,CAAC,EAAG,MAAM,CAAC;CAChC;AAED,MAAM,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAChD,MAAM,MAAM,UAAU,GAAG,gBAAgB,GAAG,WAAW,CAAC;AACxD,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,EAAE,MAAM,qBAAqB,CAAC,GACrE,qBAAqB,CAAC;AAInD,eAAO,MAAM,KAAK,yGA2GjB,CAAC"}
|
|
@@ -1,88 +1,83 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsxs as
|
|
3
|
-
import
|
|
4
|
-
import { separateWrapperProps as
|
|
2
|
+
import { jsxs as o, jsx as i } from "react/jsx-runtime";
|
|
3
|
+
import h from "react";
|
|
4
|
+
import { separateWrapperProps as j } from "../../utils/propSeparation.js";
|
|
5
5
|
/* empty css */
|
|
6
|
-
import { Text as
|
|
6
|
+
import { Text as f } from "../Typography/Text.js";
|
|
7
7
|
import { Element as p } from "../Element/Element.js";
|
|
8
|
-
const
|
|
8
|
+
const x = h.forwardRef(
|
|
9
9
|
({
|
|
10
|
-
label:
|
|
11
|
-
value:
|
|
12
|
-
height:
|
|
13
|
-
suffix:
|
|
14
|
-
showOptimumMarker:
|
|
15
|
-
ariaLabel:
|
|
16
|
-
description:
|
|
17
|
-
min:
|
|
18
|
-
max:
|
|
19
|
-
low:
|
|
20
|
-
high:
|
|
21
|
-
optimum:
|
|
22
|
-
...
|
|
23
|
-
},
|
|
24
|
-
const
|
|
25
|
-
const
|
|
26
|
-
let
|
|
27
|
-
return
|
|
28
|
-
}, { wrapperProps:
|
|
29
|
-
return /* @__PURE__ */
|
|
10
|
+
label: a,
|
|
11
|
+
value: e,
|
|
12
|
+
height: u,
|
|
13
|
+
suffix: d,
|
|
14
|
+
showOptimumMarker: w,
|
|
15
|
+
ariaLabel: y,
|
|
16
|
+
description: c,
|
|
17
|
+
min: r,
|
|
18
|
+
max: n,
|
|
19
|
+
low: l,
|
|
20
|
+
high: m,
|
|
21
|
+
optimum: t,
|
|
22
|
+
...N
|
|
23
|
+
}, P) => {
|
|
24
|
+
const $ = `meter-description-${h.useId().replace(/:/g, "")}`, g = t ? (t - r) / (n - r) * 100 : 0, v = () => {
|
|
25
|
+
const b = (e - r) / (n - r) * 100;
|
|
26
|
+
let s;
|
|
27
|
+
return e <= l ? s = "Low" : e >= m ? s = "High" : s = "Normal", `Current value is ${e}${d || ""} (${b.toFixed(1)}%). Status: ${s}`;
|
|
28
|
+
}, { wrapperProps: I, inputProps: M } = j(N);
|
|
29
|
+
return /* @__PURE__ */ o(
|
|
30
30
|
p,
|
|
31
31
|
{
|
|
32
32
|
as: "div",
|
|
33
|
-
|
|
34
|
-
"aria-label": m || "Meter indicator",
|
|
35
|
-
...y,
|
|
33
|
+
...I,
|
|
36
34
|
children: [
|
|
37
|
-
|
|
35
|
+
a && /* @__PURE__ */ o(
|
|
38
36
|
p,
|
|
39
37
|
{
|
|
40
38
|
as: "div",
|
|
41
39
|
"data-meter-meta": !0,
|
|
42
|
-
id: `meter-label-${
|
|
40
|
+
id: `meter-label-${a.toLowerCase().replace(/\s+/g, "-")}`,
|
|
43
41
|
children: [
|
|
44
|
-
/* @__PURE__ */
|
|
45
|
-
/* @__PURE__ */
|
|
46
|
-
|
|
47
|
-
|
|
42
|
+
/* @__PURE__ */ i(f, { children: a }),
|
|
43
|
+
/* @__PURE__ */ o(f, { children: [
|
|
44
|
+
e,
|
|
45
|
+
d && d
|
|
48
46
|
] })
|
|
49
47
|
]
|
|
50
48
|
}
|
|
51
49
|
),
|
|
52
|
-
/* @__PURE__ */
|
|
50
|
+
/* @__PURE__ */ o(
|
|
53
51
|
"div",
|
|
54
52
|
{
|
|
55
53
|
className: "meter-wrapper",
|
|
56
54
|
role: "presentation",
|
|
57
55
|
children: [
|
|
58
|
-
/* @__PURE__ */
|
|
56
|
+
/* @__PURE__ */ i(
|
|
59
57
|
p,
|
|
60
58
|
{
|
|
61
59
|
as: "meter",
|
|
62
60
|
"data-meter": !0,
|
|
63
|
-
ref:
|
|
64
|
-
value:
|
|
65
|
-
min:
|
|
66
|
-
max:
|
|
67
|
-
low:
|
|
68
|
-
high:
|
|
69
|
-
optimum:
|
|
70
|
-
...
|
|
71
|
-
style: { height:
|
|
72
|
-
"aria-label":
|
|
73
|
-
"aria-
|
|
74
|
-
"aria-
|
|
75
|
-
"aria-valuenow": r,
|
|
76
|
-
"aria-valuetext": l(),
|
|
77
|
-
"aria-describedby": n ? `meter-description-${e == null ? void 0 : e.toLowerCase().replace(/\s+/g, "-")}` : void 0
|
|
61
|
+
ref: P,
|
|
62
|
+
value: e,
|
|
63
|
+
min: r,
|
|
64
|
+
max: n,
|
|
65
|
+
low: l,
|
|
66
|
+
high: m,
|
|
67
|
+
optimum: t,
|
|
68
|
+
...M,
|
|
69
|
+
style: { height: u },
|
|
70
|
+
"aria-label": a || y || "Meter",
|
|
71
|
+
"aria-valuetext": v(),
|
|
72
|
+
"aria-describedby": c ? $ : void 0
|
|
78
73
|
}
|
|
79
74
|
),
|
|
80
|
-
|
|
75
|
+
w && t && /* @__PURE__ */ i(
|
|
81
76
|
"div",
|
|
82
77
|
{
|
|
83
78
|
className: "optimum-marker",
|
|
84
|
-
style: { left: `calc(${
|
|
85
|
-
title: `Optimum: ${
|
|
79
|
+
style: { left: `calc(${g}% - var(--meter-border-width))` },
|
|
80
|
+
title: `Optimum: ${t}`,
|
|
86
81
|
role: "presentation",
|
|
87
82
|
"aria-hidden": "true"
|
|
88
83
|
}
|
|
@@ -90,12 +85,12 @@ const j = L.forwardRef(
|
|
|
90
85
|
]
|
|
91
86
|
}
|
|
92
87
|
),
|
|
93
|
-
|
|
88
|
+
c && /* @__PURE__ */ i(
|
|
94
89
|
"div",
|
|
95
90
|
{
|
|
96
|
-
id:
|
|
91
|
+
id: $,
|
|
97
92
|
className: "sr-only",
|
|
98
|
-
children:
|
|
93
|
+
children: c
|
|
99
94
|
}
|
|
100
95
|
)
|
|
101
96
|
]
|
|
@@ -103,8 +98,8 @@ const j = L.forwardRef(
|
|
|
103
98
|
);
|
|
104
99
|
}
|
|
105
100
|
);
|
|
106
|
-
|
|
101
|
+
x.displayName = "Meter";
|
|
107
102
|
export {
|
|
108
|
-
|
|
103
|
+
x as Meter
|
|
109
104
|
};
|
|
110
105
|
//# sourceMappingURL=Meter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Meter.js","sources":["../../../src/components/Meter/Meter.tsx"],"sourcesContent":["// REACT CORE ==========================================================================================================\nimport React from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { CommonAndHTMLProps, CommonProps } from \"../Element/constants\";\nimport { Element } from \"$element\";\n\n// UTILS ===============================================================================================================\nimport { separateWrapperProps } from \"../../utils/propSeparation\";\n\n// STYLES ==============================================================================================================\nimport \"./meter.css\";\n\n// OTHER ===============================================================================================================\nimport { Text } from \"../Typography/Text\";\n\nexport interface MeterLabelCustomProps {\n suffix ? : string;\n}\n\nexport interface MeterCustomProps {\n min : number;\n max : number;\n low : number;\n high : number;\n value : number;\n optimum ? : number;\n showOptimumMarker ? : boolean;\n suffix ? : string;\n height ? : string;\n label ? : string;\n ariaLabel ? : string;\n description ? : string;\n}\n\nexport type MeterElementType = HTMLMeterElement;\nexport type MeterProps = MeterCustomProps & CommonProps;\nexport type MeterMetaProps = Omit<CommonAndHTMLProps<HTMLDivElement>, keyof MeterLabelCustomProps> &\n MeterLabelCustomProps;\n\n// TODO: Add size for label\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const Meter = React.forwardRef(\n ({\n label,\n value,\n height,\n suffix,\n showOptimumMarker,\n ariaLabel,\n description,\n min,\n max,\n low,\n high,\n optimum,\n ...props\n } : MeterProps, ref : React.Ref<MeterElementType>) => {\n const optimumPositionPercent = optimum ? (\n (optimum - min) / (max - min)\n ) * 100 : 0;\n\n const getValueDescription = () => {\n const percentage = (\n (value - min) / (max - min)\n ) * 100;\n let status : string;\n\n if (value <= low) {\n status = \"Low\";\n } else if (value >= high) {\n status = \"High\";\n } else {\n status = \"Normal\";\n }\n\n return `Current value is ${value}${suffix || \"\"} (${percentage.toFixed(1)}%). Status: ${status}`;\n };\n\n // Separate wrapper-level props (margin, padding, etc.) from meter-specific props\n const {wrapperProps, inputProps} = separateWrapperProps(props);\n\n return (\n <Element<HTMLDivElement>\n as=\"div\"\n
|
|
1
|
+
{"version":3,"file":"Meter.js","sources":["../../../src/components/Meter/Meter.tsx"],"sourcesContent":["// REACT CORE ==========================================================================================================\nimport React from \"react\";\n\n// LOCAL COMPONENTS ====================================================================================================\nimport { CommonAndHTMLProps, CommonProps } from \"../Element/constants\";\nimport { Element } from \"$element\";\n\n// UTILS ===============================================================================================================\nimport { separateWrapperProps } from \"../../utils/propSeparation\";\n\n// STYLES ==============================================================================================================\nimport \"./meter.css\";\n\n// OTHER ===============================================================================================================\nimport { Text } from \"../Typography/Text\";\n\nexport interface MeterLabelCustomProps {\n suffix ? : string;\n}\n\nexport interface MeterCustomProps {\n min : number;\n max : number;\n low : number;\n high : number;\n value : number;\n optimum ? : number;\n showOptimumMarker ? : boolean;\n suffix ? : string;\n height ? : string;\n label ? : string;\n ariaLabel ? : string;\n description ? : string;\n}\n\nexport type MeterElementType = HTMLMeterElement;\nexport type MeterProps = MeterCustomProps & CommonProps;\nexport type MeterMetaProps = Omit<CommonAndHTMLProps<HTMLDivElement>, keyof MeterLabelCustomProps> &\n MeterLabelCustomProps;\n\n// TODO: Add size for label\n// COMPONENT ///////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport const Meter = React.forwardRef(\n ({\n label,\n value,\n height,\n suffix,\n showOptimumMarker,\n ariaLabel,\n description,\n min,\n max,\n low,\n high,\n optimum,\n ...props\n } : MeterProps, ref : React.Ref<MeterElementType>) => {\n // useId (not the label slug) so the description id is stable and unique even\n // without a label; strip the colons useId emits so it is selector-safe.\n const reactId = React.useId();\n const descriptionId = `meter-description-${reactId.replace(/:/g, \"\")}`;\n\n const optimumPositionPercent = optimum ? (\n (optimum - min) / (max - min)\n ) * 100 : 0;\n\n const getValueDescription = () => {\n const percentage = (\n (value - min) / (max - min)\n ) * 100;\n let status : string;\n\n if (value <= low) {\n status = \"Low\";\n } else if (value >= high) {\n status = \"High\";\n } else {\n status = \"Normal\";\n }\n\n return `Current value is ${value}${suffix || \"\"} (${percentage.toFixed(1)}%). Status: ${status}`;\n };\n\n // Separate wrapper-level props (margin, padding, etc.) from meter-specific props\n const {wrapperProps, inputProps} = separateWrapperProps(props);\n\n return (\n <Element<HTMLDivElement>\n as=\"div\"\n {...wrapperProps}\n >\n {label && (\n <Element<HTMLDivElement>\n as=\"div\"\n data-meter-meta\n id={`meter-label-${label.toLowerCase().replace(/\\s+/g, \"-\")}`}\n >\n <Text>{label}</Text>\n <Text>\n {value}\n {suffix && suffix}\n </Text>\n </Element>\n )}\n\n <div\n className=\"meter-wrapper\"\n role=\"presentation\"\n >\n <Element<MeterElementType>\n as=\"meter\"\n data-meter\n ref={ref}\n value={value}\n min={min}\n max={max}\n low={low}\n high={high}\n optimum={optimum}\n {...inputProps}\n style={{height}}\n aria-label={label || ariaLabel || \"Meter\"}\n aria-valuetext={getValueDescription()}\n aria-describedby={description ? descriptionId : undefined}\n />\n\n {showOptimumMarker && optimum && (\n <div\n className=\"optimum-marker\"\n style={{left : `calc(${optimumPositionPercent}% - var(--meter-border-width))`}}\n title={`Optimum: ${optimum}`}\n role=\"presentation\"\n aria-hidden=\"true\"\n />\n )}\n </div>\n\n {description && (\n <div\n id={descriptionId}\n className=\"sr-only\"\n >\n {description}\n </div>\n )}\n </Element>\n );\n },\n);\nMeter.displayName = \"Meter\";"],"names":["Meter","React","label","value","height","suffix","showOptimumMarker","ariaLabel","description","min","max","low","high","optimum","props","ref","descriptionId","optimumPositionPercent","getValueDescription","percentage","status","wrapperProps","inputProps","separateWrapperProps","jsxs","Element","jsx","Text"],"mappings":";;;;;;AA0CO,MAAMA,IAAQC,EAAM;AAAA,EACvB,CAAC;AAAA,IACG,OAAAC;AAAA,IACA,OAAAC;AAAA,IACA,QAAAC;AAAA,IACA,QAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,WAAAC;AAAA,IACA,aAAAC;AAAA,IACA,KAAAC;AAAA,IACA,KAAAC;AAAA,IACA,KAAAC;AAAA,IACA,MAAAC;AAAA,IACA,SAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GACSC,MAAsC;AAIlD,UAAMC,IAAgB,qBADAf,EAAM,MAAA,EACuB,QAAQ,MAAM,EAAE,CAAC,IAE9DgB,IAAyBJ,KAC1BA,IAAUJ,MAAQC,IAAMD,KACzB,MAAM,GAEJS,IAAsB,MAAM;AAC9B,YAAMC,KACDhB,IAAQM,MAAQC,IAAMD,KACvB;AACJ,UAAIW;AAEJ,aAAIjB,KAASQ,IACTS,IAAS,QACFjB,KAASS,IAChBQ,IAAS,SAETA,IAAS,UAGN,oBAAoBjB,CAAK,GAAGE,KAAU,EAAE,KAAKc,EAAW,QAAQ,CAAC,CAAC,eAAeC,CAAM;AAAA,IAClG,GAGM,EAAC,cAAAC,GAAc,YAAAC,MAAcC,EAAqBT,CAAK;AAE7D,WACI,gBAAAU;AAAA,MAACC;AAAA,MAAA;AAAA,QACG,IAAG;AAAA,QACF,GAAGJ;AAAA,QAEH,UAAA;AAAA,UAAAnB,KACG,gBAAAsB;AAAA,YAACC;AAAA,YAAA;AAAA,cACG,IAAG;AAAA,cACH,mBAAe;AAAA,cACf,IAAI,eAAevB,EAAM,YAAA,EAAc,QAAQ,QAAQ,GAAG,CAAC;AAAA,cAE3D,UAAA;AAAA,gBAAA,gBAAAwB,EAACC,KAAM,UAAAzB,EAAA,CAAM;AAAA,kCACZyB,GAAA,EACI,UAAA;AAAA,kBAAAxB;AAAA,kBACAE,KAAUA;AAAA,gBAAA,EAAA,CACf;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAIR,gBAAAmB;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,WAAU;AAAA,cACV,MAAK;AAAA,cAEL,UAAA;AAAA,gBAAA,gBAAAE;AAAA,kBAACD;AAAA,kBAAA;AAAA,oBACG,IAAG;AAAA,oBACH,cAAU;AAAA,oBACV,KAAAV;AAAA,oBACA,OAAAZ;AAAA,oBACA,KAAAM;AAAA,oBACA,KAAAC;AAAA,oBACA,KAAAC;AAAA,oBACA,MAAAC;AAAA,oBACA,SAAAC;AAAA,oBACC,GAAGS;AAAA,oBACJ,OAAO,EAAC,QAAAlB,EAAA;AAAA,oBACR,cAAYF,KAASK,KAAa;AAAA,oBAClC,kBAAgBW,EAAA;AAAA,oBAChB,oBAAkBV,IAAcQ,IAAgB;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAGnDV,KAAqBO,KAClB,gBAAAa;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACG,WAAU;AAAA,oBACV,OAAO,EAAC,MAAO,QAAQT,CAAsB,iCAAA;AAAA,oBAC7C,OAAO,YAAYJ,CAAO;AAAA,oBAC1B,MAAK;AAAA,oBACL,eAAY;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAChB;AAAA,YAAA;AAAA,UAAA;AAAA,UAIPL,KACG,gBAAAkB;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,IAAIV;AAAA,cACJ,WAAU;AAAA,cAET,UAAAR;AAAA,YAAA;AAAA,UAAA;AAAA,QACL;AAAA,MAAA;AAAA,IAAA;AAAA,EAIhB;AACJ;AACAR,EAAM,cAAc;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../../src/components/Modal/Modal.tsx"],"names":[],"mappings":"AACA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAGzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAI1D,OAAO,aAAa,CAAC;AAErB,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IACzB,EAAE,EAAgB,MAAM,CAAC;IACzB,MAAc,CAAC,EAAG,OAAO,CAAC;IAC1B,OAAc,CAAC,EAAG,MAAM,IAAI,CAAC;IAC7B,aAAc,CAAC,EAAG,OAAO,CAAC;IAC1B,YAAc,CAAC,EAAG,OAAO,CAAC;IAC1B,YAAc,CAAC,EAAG,OAAO,CAAC;IAC1B,KAAc,CAAC,EAAG,MAAM,CAAC;IACzB,WAAc,CAAC,EAAG,MAAM,CAAC;CAChC;AAED,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,EAAE,MAAM,gBAAgB,CAAC,GAAG,gBAAgB,CAAC;AAG/G,eAAO,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../../src/components/Modal/Modal.tsx"],"names":[],"mappings":"AACA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAGzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAI1D,OAAO,aAAa,CAAC;AAErB,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IACzB,EAAE,EAAgB,MAAM,CAAC;IACzB,MAAc,CAAC,EAAG,OAAO,CAAC;IAC1B,OAAc,CAAC,EAAG,MAAM,IAAI,CAAC;IAC7B,aAAc,CAAC,EAAG,OAAO,CAAC;IAC1B,YAAc,CAAC,EAAG,OAAO,CAAC;IAC1B,YAAc,CAAC,EAAG,OAAO,CAAC;IAC1B,KAAc,CAAC,EAAG,MAAM,CAAC;IACzB,WAAc,CAAC,EAAG,MAAM,CAAC;CAChC;AAED,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,EAAE,MAAM,gBAAgB,CAAC,GAAG,gBAAgB,CAAC;AAG/G,eAAO,MAAM,KAAK,4JA4GjB,CAAC"}
|
|
@@ -1,27 +1,28 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsxs as E, jsx as n } from "react/jsx-runtime";
|
|
3
|
-
import y, { useEffect as
|
|
3
|
+
import y, { useEffect as u } from "react";
|
|
4
4
|
/* empty css */
|
|
5
5
|
import { Element as x } from "../Element/Element.js";
|
|
6
6
|
const M = y.forwardRef(
|
|
7
7
|
({
|
|
8
|
-
id:
|
|
9
|
-
children:
|
|
10
|
-
classNames:
|
|
11
|
-
isOpen:
|
|
12
|
-
onClose:
|
|
8
|
+
id: m,
|
|
9
|
+
children: f,
|
|
10
|
+
classNames: o = [],
|
|
11
|
+
isOpen: d = !1,
|
|
12
|
+
onClose: r,
|
|
13
13
|
isDismissible: i = !0,
|
|
14
|
-
showBackdrop:
|
|
14
|
+
showBackdrop: s,
|
|
15
15
|
blurBackdrop: p,
|
|
16
16
|
label: g,
|
|
17
|
-
description:
|
|
17
|
+
description: l,
|
|
18
18
|
...b
|
|
19
19
|
}, h) => {
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
o = [...o];
|
|
21
|
+
const t = `${m}`, c = l ? `${t}-description` : void 0;
|
|
22
|
+
return s && o.push("show-backdrop"), p && o.push("blur-backdrop"), u(() => {
|
|
22
23
|
const e = document.querySelector(`#${t}[data-modal]`);
|
|
23
24
|
if (!(!e || !(e instanceof HTMLElement)))
|
|
24
|
-
if (
|
|
25
|
+
if (d) {
|
|
25
26
|
e.showPopover();
|
|
26
27
|
const a = e.querySelectorAll(
|
|
27
28
|
'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
|
|
@@ -29,14 +30,14 @@ const M = y.forwardRef(
|
|
|
29
30
|
a.length && a[0].focus();
|
|
30
31
|
} else
|
|
31
32
|
e.matches(":popover-open") && e.hidePopover();
|
|
32
|
-
}, [
|
|
33
|
+
}, [d, t]), u(() => {
|
|
33
34
|
const e = document.querySelector(`#${t}[data-modal]`);
|
|
34
35
|
if (!e || !(e instanceof HTMLElement)) return;
|
|
35
36
|
const a = (v) => {
|
|
36
|
-
v.newState === "closed" &&
|
|
37
|
+
v.newState === "closed" && d && r && r();
|
|
37
38
|
};
|
|
38
39
|
return e.addEventListener("toggle", a), () => e.removeEventListener("toggle", a);
|
|
39
|
-
}, [t,
|
|
40
|
+
}, [t, d, r]), /* @__PURE__ */ E(
|
|
40
41
|
x,
|
|
41
42
|
{
|
|
42
43
|
as: "dialog",
|
|
@@ -44,25 +45,25 @@ const M = y.forwardRef(
|
|
|
44
45
|
"data-modal": !0,
|
|
45
46
|
popover: i ? "auto" : "manual",
|
|
46
47
|
ref: h,
|
|
47
|
-
classNames:
|
|
48
|
+
classNames: o,
|
|
48
49
|
role: "dialog",
|
|
49
50
|
"aria-modal": "true",
|
|
50
51
|
"aria-label": g || "Modal dialog",
|
|
51
52
|
"aria-describedby": c,
|
|
52
53
|
...b,
|
|
53
54
|
children: [
|
|
54
|
-
i &&
|
|
55
|
+
i && r && /* @__PURE__ */ n(
|
|
55
56
|
"button",
|
|
56
57
|
{
|
|
57
58
|
type: "button",
|
|
58
59
|
className: "dismiss-button",
|
|
59
|
-
onClick:
|
|
60
|
+
onClick: r,
|
|
60
61
|
"aria-label": "Close modal",
|
|
61
62
|
children: "×"
|
|
62
63
|
}
|
|
63
64
|
),
|
|
64
|
-
|
|
65
|
-
/* @__PURE__ */ n("div", { role: "document", children:
|
|
65
|
+
l && /* @__PURE__ */ n("div", { id: c, className: "sr-only", children: l }),
|
|
66
|
+
/* @__PURE__ */ n("div", { role: "document", children: f })
|
|
66
67
|
]
|
|
67
68
|
}
|
|
68
69
|
);
|