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.
Files changed (85) hide show
  1. package/dist/components/Badge/Badge.d.ts.map +1 -1
  2. package/dist/components/Badge/Badge.js +17 -18
  3. package/dist/components/Badge/Badge.js.map +1 -1
  4. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts.map +1 -1
  5. package/dist/components/Breadcrumbs/Breadcrumbs.js +37 -38
  6. package/dist/components/Breadcrumbs/Breadcrumbs.js.map +1 -1
  7. package/dist/components/Callout/Callout.d.ts.map +1 -1
  8. package/dist/components/Callout/Callout.js +31 -25
  9. package/dist/components/Callout/Callout.js.map +1 -1
  10. package/dist/components/Divider/Divider.js +7 -7
  11. package/dist/components/Divider/Divider.js.map +1 -1
  12. package/dist/components/Element/Element.d.ts.map +1 -1
  13. package/dist/components/Element/Element.js +135 -133
  14. package/dist/components/Element/Element.js.map +1 -1
  15. package/dist/components/Element/constants.d.ts +21 -21
  16. package/dist/components/Element/constants.d.ts.map +1 -1
  17. package/dist/components/Element/constants.js.map +1 -1
  18. package/dist/components/Form/Checkbox/Switch.d.ts.map +1 -1
  19. package/dist/components/Form/Checkbox/Switch.js +11 -10
  20. package/dist/components/Form/Checkbox/Switch.js.map +1 -1
  21. package/dist/components/Form/FormItemGroup/FormItemGroup.d.ts.map +1 -1
  22. package/dist/components/Form/FormItemGroup/FormItemGroup.js +17 -17
  23. package/dist/components/Form/FormItemGroup/FormItemGroup.js.map +1 -1
  24. package/dist/components/Form/ListBox/ListBox.d.ts +1 -1
  25. package/dist/components/Form/ListBox/ListBox.d.ts.map +1 -1
  26. package/dist/components/Form/ListBox/ListBox.js +110 -107
  27. package/dist/components/Form/ListBox/ListBox.js.map +1 -1
  28. package/dist/components/Form/RadioButton/RadioTabGroup.d.ts +1 -1
  29. package/dist/components/Form/RadioButton/RadioTabGroup.js +46 -46
  30. package/dist/components/Form/RadioButton/RadioTabGroup.js.map +1 -1
  31. package/dist/components/Form/Select/Select.d.ts +1 -1
  32. package/dist/components/Form/Select/Select.d.ts.map +1 -1
  33. package/dist/components/Meter/Meter.d.ts.map +1 -1
  34. package/dist/components/Meter/Meter.js +54 -59
  35. package/dist/components/Meter/Meter.js.map +1 -1
  36. package/dist/components/Modal/Modal.d.ts.map +1 -1
  37. package/dist/components/Modal/Modal.js +20 -19
  38. package/dist/components/Modal/Modal.js.map +1 -1
  39. package/dist/components/Notification/NotificationsProvider/NotificationsProvider.d.ts.map +1 -1
  40. package/dist/components/Notification/NotificationsProvider/NotificationsProvider.js +44 -44
  41. package/dist/components/Notification/NotificationsProvider/NotificationsProvider.js.map +1 -1
  42. package/dist/components/Pagination/Pagination.d.ts +1 -1
  43. package/dist/components/Pagination/Pagination.d.ts.map +1 -1
  44. package/dist/components/Pagination/Pagination.js +42 -41
  45. package/dist/components/Pagination/Pagination.js.map +1 -1
  46. package/dist/components/Portion/Portion.d.ts +1 -0
  47. package/dist/components/Portion/Portion.d.ts.map +1 -1
  48. package/dist/components/Portion/Portion.js +13 -12
  49. package/dist/components/Portion/Portion.js.map +1 -1
  50. package/dist/components/ProgressBar/ProgressBar.d.ts.map +1 -1
  51. package/dist/components/ProgressBar/ProgressBar.js +23 -26
  52. package/dist/components/ProgressBar/ProgressBar.js.map +1 -1
  53. package/dist/components/Row/Row.d.ts +1 -0
  54. package/dist/components/Row/Row.d.ts.map +1 -1
  55. package/dist/components/Row/Row.js +22 -22
  56. package/dist/components/Row/Row.js.map +1 -1
  57. package/dist/components/Skeleton/Skeleton.d.ts.map +1 -1
  58. package/dist/components/Skeleton/Skeleton.js +25 -27
  59. package/dist/components/Skeleton/Skeleton.js.map +1 -1
  60. package/dist/components/Table/Table.d.ts +0 -1
  61. package/dist/components/Table/Table.d.ts.map +1 -1
  62. package/dist/components/Table/Table.js +21 -34
  63. package/dist/components/Table/Table.js.map +1 -1
  64. package/dist/components/Tabs/Tabs.d.ts.map +1 -1
  65. package/dist/components/Tabs/Tabs.js +49 -47
  66. package/dist/components/Tabs/Tabs.js.map +1 -1
  67. package/dist/components/Toast/ToastsProvider/ToastsProvider.d.ts.map +1 -1
  68. package/dist/components/Toast/ToastsProvider/ToastsProvider.js +22 -22
  69. package/dist/components/Toast/ToastsProvider/ToastsProvider.js.map +1 -1
  70. package/dist/components/Typography/Heading.js +11 -11
  71. package/dist/components/Typography/Heading.js.map +1 -1
  72. package/dist/components/Typography/Text.js +7 -7
  73. package/dist/components/Typography/Text.js.map +1 -1
  74. package/dist/fictoan-schema.json +33 -37
  75. package/dist/index.css +3 -3
  76. package/dist/index.d.ts +2 -1
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +129 -127
  79. package/dist/index.js.map +1 -1
  80. package/dist/utils/classNames.d.ts +1 -1
  81. package/dist/utils/classNames.d.ts.map +1 -1
  82. package/dist/utils/classNames.js.map +1 -1
  83. package/dist/utils/propSeparation.js +4 -4
  84. package/dist/utils/propSeparation.js.map +1 -1
  85. 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('../../Element/constants').CommonProps & {
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 Y, useRef as M, useState as p, useCallback as X, useEffect as q } from "react";
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 Z, FormItem as _ } from "../FormItem/FormItem.js";
6
- import { separateWrapperProps as tt } from "../../../utils/propSeparation.js";
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 et } from "../../Element/Element.js";
9
- const rt = y.forwardRef(
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: ot,
17
+ defaultValue: st,
18
18
  value: h,
19
19
  required: P,
20
20
  onChange: b,
21
21
  size: v = "medium",
22
- bgColour: st,
23
- disabled: C,
24
- ...G
25
- }, j) => {
26
- const R = Y(() => S || u, [S, u]), i = M(null), [F, E] = p({
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
- }), [$, T] = p(!1), [a, D] = p(0), [w, L] = p(0), g = M([]), W = X(() => {
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
- T(r), L(r ? o - n : 0);
34
+ D(r), O(r ? o - n : 0);
35
35
  }
36
36
  }, []);
37
- q(() => {
37
+ X(() => {
38
38
  const t = i.current;
39
39
  if (!t) return;
40
- W();
40
+ g();
41
41
  const e = new ResizeObserver(() => {
42
- W();
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
- }, [W]), q(() => {
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 = g.current[t];
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(${g.current.slice(0, t).reduce((U, I) => U + ((I == null ? void 0 : I.offsetWidth) || 0), 0)}px)`), E({ width: n, transform: r });
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 O = (t) => {
68
+ const V = (t) => {
69
69
  b == null || b(t.target.value);
70
- }, { wrapperProps: V, inputProps: z } = tt(G), A = X((t) => {
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
- D(r), requestAnimationFrame(() => {
75
+ L(r), requestAnimationFrame(() => {
76
76
  e.style.transform = `translateX(-${r}px)`;
77
77
  });
78
- }, [a, w]), H = a > 0, J = a < w, k = [];
79
- v && k.push(`size-${v}`);
80
- const K = y.useId(), l = u || `radio-tab-group-${K.replace(/:/g, "")}`, { describedBy: Q } = Z(l, N, m);
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
- ...V,
90
+ ...z,
91
91
  children: /* @__PURE__ */ d(
92
- et,
92
+ rt,
93
93
  {
94
94
  as: "div",
95
95
  "data-radio-tab-group": !0,
96
- ref: j,
96
+ ref: C,
97
97
  id: l,
98
- classNames: k,
99
- name: R,
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": Q,
105
- ...z,
104
+ "aria-describedby": U,
105
+ ...H,
106
106
  children: [
107
- $ && H && /* @__PURE__ */ s(
107
+ F && J && /* @__PURE__ */ s(
108
108
  c,
109
109
  {
110
110
  className: "scroll-button left",
111
- onClick: () => A("left"),
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: `${F.width}px`,
128
- transform: F.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: R,
141
+ name: E,
142
142
  checked: h === t.value,
143
- disabled: C || t.disabled,
144
- onChange: O
143
+ disabled: G || t.disabled,
144
+ onChange: V
145
145
  }
146
146
  ),
147
147
  /* @__PURE__ */ s(
148
148
  "label",
149
149
  {
150
- ref: (B) => {
151
- g.current[e] = B;
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
- $ && J && /* @__PURE__ */ s(
162
+ F && K && /* @__PURE__ */ s(
163
163
  c,
164
164
  {
165
165
  className: "scroll-button right",
166
- onClick: () => A("right"),
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
- rt.displayName = "RadioTabGroup";
178
+ ot.displayName = "RadioTabGroup";
179
179
  export {
180
- rt as RadioTabGroup
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('../../Element/constants').CommonAndHTMLProps<HTMLSelectElement>, keyof import('./constants').SelectCustomProps> & import('./constants').SelectCustomProps & React.RefAttributes<HTMLSelectElement>>;
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,kPAsFlB,CAAC"}
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,yGA4GjB,CAAC"}
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 i, jsx as d } from "react/jsx-runtime";
3
- import L from "react";
4
- import { separateWrapperProps as M } from "../../utils/propSeparation.js";
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 g } from "../Typography/Text.js";
6
+ import { Text as f } from "../Typography/Text.js";
7
7
  import { Element as p } from "../Element/Element.js";
8
- const j = L.forwardRef(
8
+ const x = h.forwardRef(
9
9
  ({
10
- label: e,
11
- value: r,
12
- height: h,
13
- suffix: c,
14
- showOptimumMarker: f,
15
- ariaLabel: m,
16
- description: n,
17
- min: t,
18
- max: s,
19
- low: $,
20
- high: w,
21
- optimum: o,
22
- ...u
23
- }, v) => {
24
- const P = o ? (o - t) / (s - t) * 100 : 0, l = () => {
25
- const C = (r - t) / (s - t) * 100;
26
- let a;
27
- return r <= $ ? a = "Low" : r >= w ? a = "High" : a = "Normal", `Current value is ${r}${c || ""} (${C.toFixed(1)}%). Status: ${a}`;
28
- }, { wrapperProps: y, inputProps: N } = M(u);
29
- return /* @__PURE__ */ i(
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
- role: "region",
34
- "aria-label": m || "Meter indicator",
35
- ...y,
33
+ ...I,
36
34
  children: [
37
- e && /* @__PURE__ */ i(
35
+ a && /* @__PURE__ */ o(
38
36
  p,
39
37
  {
40
38
  as: "div",
41
39
  "data-meter-meta": !0,
42
- id: `meter-label-${e.toLowerCase().replace(/\s+/g, "-")}`,
40
+ id: `meter-label-${a.toLowerCase().replace(/\s+/g, "-")}`,
43
41
  children: [
44
- /* @__PURE__ */ d(g, { children: e }),
45
- /* @__PURE__ */ i(g, { children: [
46
- r,
47
- c && c
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__ */ i(
50
+ /* @__PURE__ */ o(
53
51
  "div",
54
52
  {
55
53
  className: "meter-wrapper",
56
54
  role: "presentation",
57
55
  children: [
58
- /* @__PURE__ */ d(
56
+ /* @__PURE__ */ i(
59
57
  p,
60
58
  {
61
59
  as: "meter",
62
60
  "data-meter": !0,
63
- ref: v,
64
- value: r,
65
- min: t,
66
- max: s,
67
- low: $,
68
- high: w,
69
- optimum: o,
70
- ...N,
71
- style: { height: h },
72
- "aria-label": e || m || "Progress meter",
73
- "aria-valuemin": t,
74
- "aria-valuemax": s,
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
- f && o && /* @__PURE__ */ d(
75
+ w && t && /* @__PURE__ */ i(
81
76
  "div",
82
77
  {
83
78
  className: "optimum-marker",
84
- style: { left: `calc(${P}% - var(--meter-border-width))` },
85
- title: `Optimum: ${o}`,
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
- n && /* @__PURE__ */ d(
88
+ c && /* @__PURE__ */ i(
94
89
  "div",
95
90
  {
96
- id: `meter-description-${e == null ? void 0 : e.toLowerCase().replace(/\s+/g, "-")}`,
91
+ id: $,
97
92
  className: "sr-only",
98
- children: n
93
+ children: c
99
94
  }
100
95
  )
101
96
  ]
@@ -103,8 +98,8 @@ const j = L.forwardRef(
103
98
  );
104
99
  }
105
100
  );
106
- j.displayName = "Meter";
101
+ x.displayName = "Meter";
107
102
  export {
108
- j as Meter
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 role=\"region\"\n aria-label={ariaLabel || \"Meter indicator\"}\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 || \"Progress meter\"}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n aria-valuetext={getValueDescription()}\n aria-describedby={description ? `meter-description-${label?.toLowerCase()\n .replace(/\\s+/g, \"-\")}` : 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={`meter-description-${label?.toLowerCase().replace(/\\s+/g, \"-\")}`}\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","optimumPositionPercent","getValueDescription","percentage","status","wrapperProps","inputProps","separateWrapperProps","jsxs","Element","jsx","Text"],"mappings":"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"}
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,4JAwGjB,CAAC"}
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 m } from "react";
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: u,
9
- children: s,
10
- classNames: l = [],
11
- isOpen: r = !1,
12
- onClose: o,
8
+ id: m,
9
+ children: f,
10
+ classNames: o = [],
11
+ isOpen: d = !1,
12
+ onClose: r,
13
13
  isDismissible: i = !0,
14
- showBackdrop: f,
14
+ showBackdrop: s,
15
15
  blurBackdrop: p,
16
16
  label: g,
17
- description: d,
17
+ description: l,
18
18
  ...b
19
19
  }, h) => {
20
- const t = `${u}`, c = d ? `${t}-description` : void 0;
21
- return f && l.push("show-backdrop"), p && l.push("blur-backdrop"), m(() => {
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 (r) {
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
- }, [r, t]), m(() => {
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" && r && o && o();
37
+ v.newState === "closed" && d && r && r();
37
38
  };
38
39
  return e.addEventListener("toggle", a), () => e.removeEventListener("toggle", a);
39
- }, [t, r, o]), /* @__PURE__ */ E(
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: l,
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 && o && /* @__PURE__ */ n(
55
+ i && r && /* @__PURE__ */ n(
55
56
  "button",
56
57
  {
57
58
  type: "button",
58
59
  className: "dismiss-button",
59
- onClick: o,
60
+ onClick: r,
60
61
  "aria-label": "Close modal",
61
62
  children: "×"
62
63
  }
63
64
  ),
64
- d && /* @__PURE__ */ n("div", { id: c, className: "sr-only", children: d }),
65
- /* @__PURE__ */ n("div", { role: "document", children: s })
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
  );