@clubmed/trident-ui 1.3.0-beta.9 → 1.3.0-rc.1

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 (171) hide show
  1. package/CHANGELOG.md +120 -0
  2. package/README.md +8 -0
  3. package/assets/icons/ResortFill/PHUC_Fill.svg +287 -10
  4. package/assets/icons/ResortFill/TOMC_Fill.svg +199 -14
  5. package/assets/icons/ResortFill-EC/KIPC_EC_Fill.svg +499 -0
  6. package/assets/icons/ResortOutline/PHUC_Outline.svg +156 -6
  7. package/assets/icons/ResortOutline/TOMC_Outline.svg +99 -6
  8. package/assets/icons/ResortOutline-EC/KIPC_EC_Outline.svg +380 -0
  9. package/assets/icons/Transports/Taxi.svg +5 -0
  10. package/assets/icons/Utilities/Doorhanger.svg +5 -0
  11. package/assets/{style.css → trident-ui.css} +1 -1
  12. package/atoms/Clickable/Clickable.d.ts +5 -0
  13. package/atoms/Clickable/Clickable.js +25 -0
  14. package/atoms/Clickable/Clickable.js.map +1 -0
  15. package/atoms/Heading/Heading.d.ts +6 -0
  16. package/atoms/Heading/Heading.js +14 -0
  17. package/atoms/Heading/Heading.js.map +1 -0
  18. package/atoms/Heading/HeadingGroup.d.ts +7 -0
  19. package/atoms/Heading/HeadingGroup.js +15 -0
  20. package/atoms/Heading/HeadingGroup.js.map +1 -0
  21. package/atoms/Icons/Iconics.d.ts +1 -1
  22. package/atoms/Icons/IconsResolver.d.ts +1 -1
  23. package/atoms/Icons/contexts/IconsContext.d.ts +1 -1
  24. package/atoms/Icons/svg/SvgIcon.d.ts +1 -1
  25. package/atoms/Icons/svg-use/SvgUseIcon.d.ts +1 -1
  26. package/atoms/Image/Image.d.ts +7 -0
  27. package/atoms/Image/Image.js +18 -0
  28. package/atoms/Image/Image.js.map +1 -0
  29. package/atoms/Prose/Prose.d.ts +5 -0
  30. package/atoms/Prose/Prose.js +18 -0
  31. package/atoms/Prose/Prose.js.map +1 -0
  32. package/chunks/ResizeObserver.js +287 -0
  33. package/chunks/ResizeObserver.js.map +1 -0
  34. package/chunks/_commonjsHelpers.js +19 -14
  35. package/chunks/_commonjsHelpers.js.map +1 -1
  36. package/chunks/index.js +36 -33
  37. package/chunks/index.js.map +1 -1
  38. package/chunks/plugin.js +57 -46
  39. package/chunks/plugin.js.map +1 -1
  40. package/contexts/Devices/Device.d.ts +3 -3
  41. package/contexts/Devices/hooks/useQueries.d.ts +2 -2
  42. package/contexts/Devices/reducers/reducer.d.ts +2 -2
  43. package/contexts/TridentUIConfig.d.ts +1 -1
  44. package/contexts/TridentUIConfig.js +1265 -653
  45. package/contexts/TridentUIConfig.js.map +1 -1
  46. package/helpers/colors/colors.d.ts +108 -0
  47. package/helpers/colors/colors.js +132 -0
  48. package/helpers/colors/colors.js.map +1 -0
  49. package/hooks/useKeyboardControls.d.ts +1 -1
  50. package/hooks/useResizeObserver.d.ts +2 -0
  51. package/hooks/useResizeObserver.js +84 -0
  52. package/hooks/useResizeObserver.js.map +1 -0
  53. package/hooks/useSafeBoop.d.ts +2 -2
  54. package/molecules/Arrows/Arrows.d.ts +2 -2
  55. package/molecules/Avatar.d.ts +1 -1
  56. package/molecules/Avatar.js +24 -24
  57. package/molecules/Avatar.js.map +1 -1
  58. package/molecules/Backdrop.d.ts +1 -1
  59. package/molecules/Breadcrumb.d.ts +7 -11
  60. package/molecules/Breadcrumb.js +44 -36
  61. package/molecules/Breadcrumb.js.map +1 -1
  62. package/molecules/Breadcrumb.themes.d.ts +8 -0
  63. package/molecules/Breadcrumb.themes.js +15 -0
  64. package/molecules/Breadcrumb.themes.js.map +1 -0
  65. package/molecules/Buttons/ArrowButton.d.ts +1 -1
  66. package/molecules/Buttons/Button.d.ts +3 -3
  67. package/molecules/Buttons/ButtonAnchor.d.ts +2 -2
  68. package/molecules/Buttons/ButtonContent.d.ts +2 -2
  69. package/molecules/Buttons/FakeButton.d.ts +2 -3
  70. package/molecules/Buttons/InertButton.d.ts +2 -2
  71. package/molecules/Buttons/v2/Button.d.ts +2096 -2097
  72. package/molecules/Buttons/v2/Button.type.d.ts +5 -2
  73. package/molecules/Buttons/v2/Button.type.js +8 -5
  74. package/molecules/Buttons/v2/Button.type.js.map +1 -1
  75. package/molecules/Card.d.ts +1 -11
  76. package/molecules/Card.js +2 -34
  77. package/molecules/Card.js.map +1 -1
  78. package/molecules/Cards/Card.d.ts +13 -0
  79. package/molecules/Cards/Card.js +22 -0
  80. package/molecules/Cards/Card.js.map +1 -0
  81. package/molecules/Cards/CardAspectRatios.d.ts +6 -0
  82. package/molecules/Cards/CardAspectRatios.js +10 -0
  83. package/molecules/Cards/CardAspectRatios.js.map +1 -0
  84. package/molecules/Cards/CardBackground.d.ts +4 -0
  85. package/molecules/Cards/CardBackground.js +30 -0
  86. package/molecules/Cards/CardBackground.js.map +1 -0
  87. package/molecules/Cards/CardBackgroundContext.d.ts +6 -0
  88. package/molecules/Cards/CardBackgroundContext.js +10 -0
  89. package/molecules/Cards/CardBackgroundContext.js.map +1 -0
  90. package/molecules/Cards/CardClickable.d.ts +6 -0
  91. package/molecules/Cards/CardClickable.js +37 -0
  92. package/molecules/Cards/CardClickable.js.map +1 -0
  93. package/molecules/Cards/ExpandableCard.d.ts +14 -0
  94. package/molecules/Cards/ExpandableCard.js +80 -0
  95. package/molecules/Cards/ExpandableCard.js.map +1 -0
  96. package/molecules/Cards/v2/Card.d.ts +15 -0
  97. package/molecules/Cards/v2/Card.js +34 -0
  98. package/molecules/Cards/v2/Card.js.map +1 -0
  99. package/molecules/Chip.d.ts +9 -0
  100. package/molecules/Chip.js +31 -0
  101. package/molecules/Chip.js.map +1 -0
  102. package/molecules/Chip.themes.d.ts +12 -0
  103. package/molecules/Chip.themes.js +24 -0
  104. package/molecules/Chip.themes.js.map +1 -0
  105. package/molecules/ElasticHeight.d.ts +6 -27
  106. package/molecules/ElasticHeight.js +27 -33
  107. package/molecules/ElasticHeight.js.map +1 -1
  108. package/molecules/Forms/Checkboxes/Checkbox.d.ts +1 -1
  109. package/molecules/Forms/Checkboxes/Checkbox.js +43 -43
  110. package/molecules/Forms/Checkboxes/Checkbox.js.map +1 -1
  111. package/molecules/Forms/Checkboxes/Checkboxes.d.ts +2 -2
  112. package/molecules/Forms/DateField.d.ts +2 -2
  113. package/molecules/Forms/DateField.js +60 -61
  114. package/molecules/Forms/DateField.js.map +1 -1
  115. package/molecules/Forms/Filter.d.ts +1 -2
  116. package/molecules/Forms/Filter.js +29 -29
  117. package/molecules/Forms/Filter.js.map +1 -1
  118. package/molecules/Forms/FormControl.d.ts +4 -4
  119. package/molecules/Forms/FormLabel.d.ts +1 -1
  120. package/molecules/Forms/NumberField.d.ts +280 -280
  121. package/molecules/Forms/Password/Password.d.ts +1 -1
  122. package/molecules/Forms/Password/ValidationMessage.d.ts +1 -1
  123. package/molecules/Forms/Radios/Radio.d.ts +4 -2
  124. package/molecules/Forms/Radios/Radio.js +29 -28
  125. package/molecules/Forms/Radios/Radio.js.map +1 -1
  126. package/molecules/Forms/Radios/RadioGroup.d.ts +2 -2
  127. package/molecules/Forms/Radios/RadioGroup.js +70 -33
  128. package/molecules/Forms/Radios/RadioGroup.js.map +1 -1
  129. package/molecules/Forms/Range.d.ts +1 -2
  130. package/molecules/Forms/Range.js +144 -421
  131. package/molecules/Forms/Range.js.map +1 -1
  132. package/molecules/Forms/Select.d.ts +3 -3
  133. package/molecules/Forms/Switch.d.ts +1 -1
  134. package/molecules/Forms/TextField.d.ts +3 -3
  135. package/molecules/HamburgerIcon.d.ts +1 -1
  136. package/molecules/Link.d.ts +2 -2
  137. package/molecules/Loader.d.ts +1 -1
  138. package/molecules/Pagination.d.ts +2 -2
  139. package/molecules/Popin.d.ts +1 -1
  140. package/molecules/Spinner.d.ts +1 -1
  141. package/molecules/Tabs/Tab.d.ts +2 -3
  142. package/molecules/Tabs/Tab.js +41 -42
  143. package/molecules/Tabs/Tab.js.map +1 -1
  144. package/molecules/Tabs/TabList.d.ts +1 -1
  145. package/molecules/Tabs/TabList.js +21 -21
  146. package/molecules/Tabs/TabList.js.map +1 -1
  147. package/molecules/Tabs/TabPanel.d.ts +1 -1
  148. package/molecules/Tabs/TabPanel.js +13 -13
  149. package/molecules/Tabs/TabPanel.js.map +1 -1
  150. package/molecules/Tabs/Tabs.d.ts +1 -1
  151. package/molecules/Tabs/TabsBody.d.ts +1 -1
  152. package/molecules/Tabs/context/TabControl.d.ts +2 -2
  153. package/molecules/Tabs/hooks/tabControl.d.ts +5 -5
  154. package/molecules/Tag.d.ts +43 -0
  155. package/molecules/Tag.js +73 -0
  156. package/molecules/Tag.js.map +1 -0
  157. package/package.json +48 -45
  158. package/styles/index.css +1 -1
  159. package/tailwind/plugins/animationDelay.d.ts +2 -2
  160. package/tailwind/plugins/hocus.d.ts +2 -2
  161. package/tailwind/plugins/lineClampFix.d.ts +2 -2
  162. package/tailwind/plugins/popover.d.ts +2 -2
  163. package/tailwind/plugins/startingStyle.d.ts +2 -2
  164. package/tailwind/plugins/transitionBehavior.d.ts +2 -2
  165. package/tailwind/tailwind.preset.d.ts +50 -50
  166. package/types/LiteralUnion.d.js +2 -0
  167. package/types/LiteralUnion.d.js.map +1 -0
  168. package/types/Theme.d.js +2 -0
  169. package/types/Theme.d.js.map +1 -0
  170. package/assets/icons/ResortFill/KIPC_Fill.svg +0 -12
  171. package/assets/icons/ResortOutline/KIPC_Outline.svg +0 -7
@@ -1,4 +1,4 @@
1
- import { type FormControlProps } from '../FormControl';
1
+ import { FormControlProps } from '../FormControl';
2
2
  import { ValidationMessage } from './ValidationMessage';
3
3
  export interface PasswordProps<Value> extends FormControlProps<Value> {
4
4
  validationMessages?: ValidationMessage[];
@@ -1,4 +1,4 @@
1
- import type { ValidationStatus } from '../../../hooks/useInternalStatus';
1
+ import { ValidationStatus } from '../../../hooks/useInternalStatus';
2
2
  export interface ValidationMessage {
3
3
  label: string;
4
4
  status: ValidationStatus;
@@ -1,5 +1,4 @@
1
- import { type InputHTMLAttributes } from 'react';
2
- import '../controls.css';
1
+ import { InputHTMLAttributes } from 'react';
3
2
  export interface RadioProps<Value = string> extends Omit<InputHTMLAttributes<HTMLInputElement>, 'onChange'> {
4
3
  /**
5
4
  * The data-testid to apply to the button.
@@ -13,3 +12,6 @@ export interface RadioProps<Value = string> extends Omit<InputHTMLAttributes<HTM
13
12
  onChange?: (name: string, value: Value | null) => void;
14
13
  }
15
14
  export declare function Radio<Value = string>(props: RadioProps<Value>): import("react/jsx-runtime").JSX.Element;
15
+ export declare namespace Radio {
16
+ var displayName: string;
17
+ }
@@ -1,62 +1,63 @@
1
- import { jsxs as c, jsx as e } from "react/jsx-runtime";
2
- import { c as b } from "../../../chunks/index.js";
3
- import { useId as k } from "react";
4
- import { useValue as w } from "../../../hooks/useValue.js";
1
+ import { jsxs as n, jsx as e } from "react/jsx-runtime";
2
+ import { c as C } from "../../../chunks/index.js";
3
+ import { useId as N } from "react";
4
+ import { useValue as b } from "../../../hooks/useValue.js";
5
5
  /* empty css */
6
- function R(d) {
7
- const n = k(), {
8
- id: o = n,
9
- name: l = o,
10
- className: m,
11
- dataTestId: h,
6
+ function k(r) {
7
+ const d = N(), {
8
+ id: o = d,
9
+ name: t = o,
10
+ className: c,
11
+ dataTestId: m,
12
12
  disabled: a,
13
- checked: f = !1,
13
+ checked: h = !1,
14
14
  value: i,
15
- size: t = 24,
15
+ size: s = 24,
16
16
  tabIndex: p = 0,
17
- children: u,
18
- onChange: s,
17
+ children: f,
18
+ onChange: u,
19
19
  ...v
20
- } = d, { value: r, setValue: x } = w({
21
- name: l,
22
- initialValue: f,
20
+ } = r, { value: l, setValue: x } = b({
21
+ name: t,
22
+ initialValue: h,
23
23
  onChange(g, y) {
24
- s == null || s(g, i !== void 0 ? i : y);
24
+ u?.(g, i !== void 0 ? i : y);
25
25
  }
26
26
  });
27
- return /* @__PURE__ */ c(
27
+ return /* @__PURE__ */ n(
28
28
  "label",
29
29
  {
30
- className: b(m, "relative flex items-center gap-8", {
30
+ className: C(c, "relative flex items-center gap-8", {
31
31
  "text-grey": a
32
32
  }),
33
33
  children: [
34
- /* @__PURE__ */ c("span", { className: "relative", children: [
34
+ /* @__PURE__ */ n("span", { className: "relative", children: [
35
35
  /* @__PURE__ */ e(
36
36
  "input",
37
37
  {
38
38
  ...v,
39
- name: l,
40
- "data-testid": h,
39
+ name: t,
40
+ "data-testid": m,
41
41
  type: "radio",
42
42
  tabIndex: p,
43
43
  onChange: () => {
44
- !a && x(!r);
44
+ !a && x(!l);
45
45
  },
46
- defaultChecked: r,
46
+ defaultChecked: l,
47
47
  "data-name": "Radio",
48
48
  disabled: a,
49
49
  value: i
50
50
  }
51
51
  ),
52
- /* @__PURE__ */ e("span", { style: { height: t, width: t }, children: /* @__PURE__ */ e("svg", { viewBox: "0 0 16 16", width: t * 2 / 3, className: "overflow-visible", children: /* @__PURE__ */ e("circle", { cx: "8", cy: "8", r: "8px", style: { fill: "hsl(var(--color-saffron))" } }) }) })
52
+ /* @__PURE__ */ e("span", { style: { height: s, width: s }, children: /* @__PURE__ */ e("svg", { viewBox: "0 0 16 16", width: s * 2 / 3, className: "overflow-visible", children: /* @__PURE__ */ e("circle", { cx: "8", cy: "8", r: "8px", style: { fill: "hsl(var(--color-saffron))" } }) }) })
53
53
  ] }),
54
- u
54
+ f
55
55
  ]
56
56
  }
57
57
  );
58
58
  }
59
+ k.displayName = "Radio";
59
60
  export {
60
- R as Radio
61
+ k as Radio
61
62
  };
62
63
  //# sourceMappingURL=Radio.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Radio.js","sources":["../../../../lib/molecules/Forms/Radios/Radio.tsx"],"sourcesContent":["import classnames from 'classnames';\nimport { type InputHTMLAttributes, useId } from 'react';\nimport { useValue } from '@/hooks/useValue.js';\nimport '../controls.css';\n\nexport interface RadioProps<Value = string>\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'onChange'> {\n /**\n * The data-testid to apply to the button.\n * This is used for testing purposes.\n * */\n dataTestId?: string;\n /**\n * The diameter of the radio button.\n * */\n size?: number;\n\n onChange?: (name: string, value: Value | null) => void;\n}\n\nexport function Radio<Value = string>(props: RadioProps<Value>) {\n const internalId = useId();\n\n const {\n id = internalId,\n name = id,\n className,\n dataTestId,\n disabled,\n checked: initialChecked = false,\n value,\n size = 24,\n tabIndex = 0,\n children,\n onChange,\n ...rest\n } = props;\n\n const { value: checked, setValue } = useValue<boolean>({\n name,\n initialValue: initialChecked,\n onChange(name, checked) {\n onChange?.(name, (value !== undefined ? value : checked) as Value);\n },\n });\n\n return (\n <label\n className={classnames(className, 'relative flex items-center gap-8', {\n 'text-grey': disabled,\n })}\n >\n <span className=\"relative\">\n <input\n {...rest}\n name={name}\n data-testid={dataTestId}\n type=\"radio\"\n tabIndex={tabIndex}\n onChange={() => {\n !disabled && setValue(!checked);\n }}\n defaultChecked={checked}\n data-name=\"Radio\"\n disabled={disabled}\n value={value}\n />\n\n <span style={{ height: size, width: size }}>\n <svg viewBox=\"0 0 16 16\" width={(size * 2) / 3} className=\"overflow-visible\">\n <circle cx=\"8\" cy=\"8\" r=\"8px\" style={{ fill: 'hsl(var(--color-saffron))' }} />\n </svg>\n </span>\n </span>\n\n {children}\n </label>\n );\n}\n"],"names":["Radio","props","internalId","useId","id","name","className","dataTestId","disabled","initialChecked","value","size","tabIndex","children","onChange","rest","checked","setValue","useValue","jsxs","classnames","jsx"],"mappings":";;;;;AAoBO,SAASA,EAAsBC,GAA0B;AAC9D,QAAMC,IAAaC,EAAA,GAEb;AAAA,IACJ,IAAAC,IAAKF;AAAA,IACL,MAAAG,IAAOD;AAAA,IACP,WAAAE;AAAA,IACA,YAAAC;AAAA,IACA,UAAAC;AAAA,IACA,SAASC,IAAiB;AAAA,IAC1B,OAAAC;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,UAAAC,IAAW;AAAA,IACX,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,IACDd,GAEE,EAAE,OAAOe,GAAS,UAAAC,EAAA,IAAaC,EAAkB;AAAA,IACrD,MAAAb;AAAA,IACA,cAAcI;AAAA,IACd,SAASJ,GAAMW,GAAS;AACtB,MAAAF,KAAA,QAAAA,EAAWT,GAAOK,MAAU,SAAYA,IAAQM;AAAAA,IAClD;AAAA,EAAA,CACD;AAED,SACE,gBAAAG;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC,EAAWd,GAAW,oCAAoC;AAAA,QACnE,aAAaE;AAAA,MAAA,CACd;AAAA,MAED,UAAA;AAAA,QAAA,gBAAAW,EAAC,QAAA,EAAK,WAAU,YACd,UAAA;AAAA,UAAA,gBAAAE;AAAA,YAAC;AAAA,YAAA;AAAA,cACE,GAAGN;AAAA,cACJ,MAAAV;AAAA,cACA,eAAaE;AAAA,cACb,MAAK;AAAA,cACL,UAAAK;AAAA,cACA,UAAU,MAAM;AACd,iBAACJ,KAAYS,EAAS,CAACD,CAAO;AAAA,cAChC;AAAA,cACA,gBAAgBA;AAAA,cAChB,aAAU;AAAA,cACV,UAAAR;AAAA,cACA,OAAAE;AAAA,YAAA;AAAA,UAAA;AAAA,UAGF,gBAAAW,EAAC,QAAA,EAAK,OAAO,EAAE,QAAQV,GAAM,OAAOA,EAAA,GAClC,UAAA,gBAAAU,EAAC,OAAA,EAAI,SAAQ,aAAY,OAAQV,IAAO,IAAK,GAAG,WAAU,oBACxD,UAAA,gBAAAU,EAAC,UAAA,EAAO,IAAG,KAAI,IAAG,KAAI,GAAE,OAAM,OAAO,EAAE,MAAM,4BAAA,EAA4B,CAAG,GAC9E,EAAA,CACF;AAAA,QAAA,GACF;AAAA,QAECR;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGP;"}
1
+ {"version":3,"file":"Radio.js","sources":["../../../../lib/molecules/Forms/Radios/Radio.tsx"],"sourcesContent":["import classnames from 'classnames';\nimport { type InputHTMLAttributes, useId } from 'react';\nimport { useValue } from '@/hooks/useValue.js';\nimport '../controls.css';\n\nexport interface RadioProps<Value = string>\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'onChange'> {\n /**\n * The data-testid to apply to the button.\n * This is used for testing purposes.\n * */\n dataTestId?: string;\n /**\n * The diameter of the radio button.\n * */\n size?: number;\n\n onChange?: (name: string, value: Value | null) => void;\n}\n\nexport function Radio<Value = string>(props: RadioProps<Value>) {\n const internalId = useId();\n\n const {\n id = internalId,\n name = id,\n className,\n dataTestId,\n disabled,\n checked: initialChecked = false,\n value,\n size = 24,\n tabIndex = 0,\n children,\n onChange,\n ...rest\n } = props;\n\n const { value: checked, setValue } = useValue<boolean>({\n name,\n initialValue: initialChecked,\n onChange(name, checked) {\n onChange?.(name, (value !== undefined ? value : checked) as Value);\n },\n });\n\n return (\n <label\n className={classnames(className, 'relative flex items-center gap-8', {\n 'text-grey': disabled,\n })}\n >\n <span className=\"relative\">\n <input\n {...rest}\n name={name}\n data-testid={dataTestId}\n type=\"radio\"\n tabIndex={tabIndex}\n onChange={() => {\n !disabled && setValue(!checked);\n }}\n defaultChecked={checked}\n data-name=\"Radio\"\n disabled={disabled}\n value={value}\n />\n\n <span style={{ height: size, width: size }}>\n <svg viewBox=\"0 0 16 16\" width={(size * 2) / 3} className=\"overflow-visible\">\n <circle cx=\"8\" cy=\"8\" r=\"8px\" style={{ fill: 'hsl(var(--color-saffron))' }} />\n </svg>\n </span>\n </span>\n\n {children}\n </label>\n );\n}\n\nRadio.displayName = 'Radio';\n"],"names":["Radio","props","internalId","useId","id","name","className","dataTestId","disabled","initialChecked","value","size","tabIndex","children","onChange","rest","checked","setValue","useValue","jsxs","classnames","jsx"],"mappings":";;;;;AAoBO,SAASA,EAAsBC,GAA0B;AAC9D,QAAMC,IAAaC,EAAA,GAEb;AAAA,IACJ,IAAAC,IAAKF;AAAA,IACL,MAAAG,IAAOD;AAAA,IACP,WAAAE;AAAA,IACA,YAAAC;AAAA,IACA,UAAAC;AAAA,IACA,SAASC,IAAiB;AAAA,IAC1B,OAAAC;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,UAAAC,IAAW;AAAA,IACX,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,IACDd,GAEE,EAAE,OAAOe,GAAS,UAAAC,EAAA,IAAaC,EAAkB;AAAA,IACrD,MAAAb;AAAA,IACA,cAAcI;AAAA,IACd,SAASJ,GAAMW,GAAS;AACtB,MAAAF,IAAWT,GAAOK,MAAU,SAAYA,IAAQM,CAAiB;AAAA,IACnE;AAAA,EAAA,CACD;AAED,SACE,gBAAAG;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC,EAAWd,GAAW,oCAAoC;AAAA,QACnE,aAAaE;AAAA,MAAA,CACd;AAAA,MAED,UAAA;AAAA,QAAA,gBAAAW,EAAC,QAAA,EAAK,WAAU,YACd,UAAA;AAAA,UAAA,gBAAAE;AAAA,YAAC;AAAA,YAAA;AAAA,cACE,GAAGN;AAAA,cACJ,MAAAV;AAAA,cACA,eAAaE;AAAA,cACb,MAAK;AAAA,cACL,UAAAK;AAAA,cACA,UAAU,MAAM;AACd,iBAACJ,KAAYS,EAAS,CAACD,CAAO;AAAA,cAChC;AAAA,cACA,gBAAgBA;AAAA,cAChB,aAAU;AAAA,cACV,UAAAR;AAAA,cACA,OAAAE;AAAA,YAAA;AAAA,UAAA;AAAA,UAGF,gBAAAW,EAAC,QAAA,EAAK,OAAO,EAAE,QAAQV,GAAM,OAAOA,EAAA,GAClC,UAAA,gBAAAU,EAAC,OAAA,EAAI,SAAQ,aAAY,OAAQV,IAAO,IAAK,GAAG,WAAU,oBACxD,UAAA,gBAAAU,EAAC,UAAA,EAAO,IAAG,KAAI,IAAG,KAAI,GAAE,OAAM,OAAO,EAAE,MAAM,4BAAA,EAA4B,CAAG,GAC9E,EAAA,CACF;AAAA,QAAA,GACF;AAAA,QAECR;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGP;AAEAb,EAAM,cAAc;"}
@@ -1,5 +1,5 @@
1
- import { type HTMLAttributes } from 'react';
2
- import type { FormControlProps } from '../FormControl.js';
1
+ import { HTMLAttributes } from 'react';
2
+ import { FormControlProps } from '../FormControl.js';
3
3
  export interface RadioGroupProps<Value = string> extends Pick<FormControlProps<Value>, 'id' | 'name' | 'value' | 'onChange' | 'disabled' | 'readOnly' | 'tabIndex' | 'description' | 'validationStatus' | 'errorMessage'>, Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {
4
4
  }
5
5
  export declare function RadioGroup<Value = string>(props: RadioGroupProps<Value>): import("react/jsx-runtime").JSX.Element;
@@ -1,37 +1,74 @@
1
- import { jsx as v } from "react/jsx-runtime";
2
- import { useId as x, Children as I, cloneElement as b, isValidElement as C } from "react";
3
- import { useValue as h } from "../../../hooks/useValue.js";
4
- import { c as E } from "../../../chunks/index.js";
5
- function G(l) {
6
- const s = x(), {
7
- id: a = s,
8
- name: r = a,
9
- children: t,
10
- value: i,
11
- defaultValue: m,
12
- onChange: u,
13
- disabled: d,
14
- readOnly: p,
15
- tabIndex: c = 0,
16
- ...n
17
- } = l, { value: f, setValue: V } = h({
18
- name: r,
19
- initialValue: i,
20
- defaultValue: m,
21
- onChange: u
22
- });
23
- return /* @__PURE__ */ v("div", { ...n, className: E("flex gap-12", n.className), role: "radiogroup", children: I.map(t, (e, o) => C(e) ? b(e, {
24
- ...e.props,
25
- name: r,
26
- id: `${a}-${o}`,
27
- disabled: d,
28
- readOnly: p,
29
- tabIndex: c + o + 1,
30
- checked: f === e.props.value,
31
- onChange(N, g) {
32
- V(g);
1
+ import { jsx as N } from "react/jsx-runtime";
2
+ import { useId as O, Children as V, isValidElement as W, cloneElement as y } from "react";
3
+ import { useValue as _ } from "../../../hooks/useValue.js";
4
+ import { c as h } from "../../../chunks/index.js";
5
+ import { KEY as a } from "../../../hooks/keyboard.constants.js";
6
+ function G(k) {
7
+ const R = O(), {
8
+ id: s = R,
9
+ name: u = s,
10
+ children: g,
11
+ value: v,
12
+ defaultValue: I,
13
+ onChange: E,
14
+ disabled: p,
15
+ readOnly: c,
16
+ tabIndex: b = 0,
17
+ ...m
18
+ } = k, { value: r, setValue: i } = _({
19
+ name: u,
20
+ initialValue: v,
21
+ defaultValue: I,
22
+ onChange: E
23
+ }), A = (e, o) => {
24
+ let n = o;
25
+ const t = e.target.parentNode.querySelectorAll('[role="radio"]');
26
+ if (e.key === a.ARROW_RIGHT || e.key === a.ARROW_DOWN)
27
+ n = (o + 1) % t.length, t[n]?.focus();
28
+ else if (e.key === a.ARROW_LEFT || e.key === a.ARROW_UP)
29
+ n = (o - 1 + t.length) % t.length, t[n]?.focus();
30
+ else if (e.key === a.SPACE || e.key === a.ENTER) {
31
+ i(t[o].dataset.value);
32
+ return;
33
33
  }
34
- }) : e) });
34
+ };
35
+ function d(e, o) {
36
+ return r == null || r === "" ? b === o ? 0 : -1 : e ? 0 : -1;
37
+ }
38
+ return /* @__PURE__ */ N("div", { ...m, className: h("flex gap-12", m.className), role: "radiogroup", children: V.map(g, (e, o) => {
39
+ if (!W(e))
40
+ return e;
41
+ const n = e.type.displayName, t = e.props.value, l = r === t;
42
+ return n?.includes("Button") ? y(e, {
43
+ ...e.props,
44
+ value: void 0,
45
+ role: "radio",
46
+ color: l ? "black" : "white",
47
+ name: u,
48
+ component: "span",
49
+ id: `${s}-${o}`,
50
+ disabled: p,
51
+ readOnly: c,
52
+ tabIndex: d(l, o),
53
+ "data-value": t,
54
+ "aria-checked": r === t,
55
+ onKeyDown: (f) => A(f, o),
56
+ onClick() {
57
+ i(t), e.props?.onClick?.(t);
58
+ }
59
+ }) : y(e, {
60
+ ...e.props,
61
+ name: u,
62
+ id: `${s}-${o}`,
63
+ disabled: p,
64
+ readOnly: c,
65
+ tabIndex: d(l, o),
66
+ checked: l,
67
+ onChange(f, C) {
68
+ i(C);
69
+ }
70
+ });
71
+ }) });
35
72
  }
36
73
  export {
37
74
  G as RadioGroup
@@ -1 +1 @@
1
- {"version":3,"file":"RadioGroup.js","sources":["../../../../lib/molecules/Forms/Radios/RadioGroup.tsx"],"sourcesContent":["import { Children, cloneElement, type HTMLAttributes, isValidElement, useId } from 'react';\nimport type { FormControlProps } from '@/molecules/Forms/FormControl.js';\nimport type { RadioProps } from '@/molecules/Forms/Radios/Radio.js';\nimport { useValue } from '@/hooks/useValue.js';\nimport classnames from 'classnames';\n\nexport interface RadioGroupProps<Value = string>\n extends Pick<\n FormControlProps<Value>,\n | 'id'\n | 'name'\n | 'value'\n | 'onChange'\n | 'disabled'\n | 'readOnly'\n | 'tabIndex'\n | 'description'\n | 'validationStatus'\n | 'errorMessage'\n >,\n Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {}\n\nexport function RadioGroup<Value = string>(props: RadioGroupProps<Value>) {\n const internalId = useId();\n\n const {\n id = internalId,\n name = id,\n children,\n value: initialValue,\n defaultValue,\n onChange,\n disabled,\n readOnly,\n tabIndex = 0,\n ...rest\n } = props;\n\n const { value, setValue } = useValue<Value>({\n name,\n initialValue,\n defaultValue: defaultValue as Value,\n onChange,\n });\n\n return (\n <div {...rest} className={classnames('flex gap-12', rest.className)} role=\"radiogroup\">\n {Children.map(children, (child, index) => {\n return isValidElement(child)\n ? cloneElement(child, {\n ...child.props,\n name,\n id: `${id}-${index}`,\n disabled,\n readOnly,\n tabIndex: tabIndex + index + 1,\n checked: value === (child.props as RadioProps).value,\n onChange(_: string, value: Value) {\n setValue(value);\n },\n } as RadioProps<Value>)\n : child;\n })}\n </div>\n );\n}\n"],"names":["RadioGroup","props","internalId","useId","id","name","children","initialValue","defaultValue","onChange","disabled","readOnly","tabIndex","rest","value","setValue","useValue","classnames","Children","child","index","isValidElement","cloneElement","_"],"mappings":";;;;AAsBO,SAASA,EAA2BC,GAA+B;AACxE,QAAMC,IAAaC,EAAA,GAEb;AAAA,IACJ,IAAAC,IAAKF;AAAA,IACL,MAAAG,IAAOD;AAAA,IACP,UAAAE;AAAA,IACA,OAAOC;AAAA,IACP,cAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC,IAAW;AAAA,IACX,GAAGC;AAAA,EAAA,IACDZ,GAEE,EAAE,OAAAa,GAAO,UAAAC,EAAA,IAAaC,EAAgB;AAAA,IAC1C,MAAAX;AAAA,IACA,cAAAE;AAAA,IACA,cAAAC;AAAA,IACA,UAAAC;AAAA,EAAA,CACD;AAED,2BACG,OAAA,EAAK,GAAGI,GAAM,WAAWI,EAAW,eAAeJ,EAAK,SAAS,GAAG,MAAK,cACvE,UAAAK,EAAS,IAAIZ,GAAU,CAACa,GAAOC,MACvBC,EAAeF,CAAK,IACvBG,EAAaH,GAAO;AAAA,IAClB,GAAGA,EAAM;AAAA,IACT,MAAAd;AAAA,IACA,IAAI,GAAGD,CAAE,IAAIgB,CAAK;AAAA,IAClB,UAAAV;AAAA,IACA,UAAAC;AAAA,IACA,UAAUC,IAAWQ,IAAQ;AAAA,IAC7B,SAASN,MAAWK,EAAM,MAAqB;AAAA,IAC/C,SAASI,GAAWT,GAAc;AAChC,MAAAC,EAASD,CAAK;AAAA,IAChB;AAAA,EAAA,CACoB,IACtBK,CACL,EAAA,CACH;AAEJ;"}
1
+ {"version":3,"file":"RadioGroup.js","sources":["../../../../lib/molecules/Forms/Radios/RadioGroup.tsx"],"sourcesContent":["import {\n Children,\n cloneElement,\n type HTMLAttributes,\n isValidElement,\n useId,\n type ReactElement,\n} from 'react';\nimport type { FormControlProps } from '@/molecules/Forms/FormControl.js';\nimport type { RadioProps } from '@/molecules/Forms/Radios/Radio.js';\nimport { useValue } from '@/hooks/useValue.js';\nimport classnames from 'classnames';\nimport type { ButtonProps } from '@/molecules/Buttons/v2/Button';\nimport { KEY } from '@/hooks/keyboard.constants';\n\nexport interface RadioGroupProps<Value = string>\n extends Pick<\n FormControlProps<Value>,\n | 'id'\n | 'name'\n | 'value'\n | 'onChange'\n | 'disabled'\n | 'readOnly'\n | 'tabIndex'\n | 'description'\n | 'validationStatus'\n | 'errorMessage'\n >,\n Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {}\n\nexport function RadioGroup<Value = string>(props: RadioGroupProps<Value>) {\n const internalId = useId();\n\n const {\n id = internalId,\n name = id,\n children,\n value: initialValue,\n defaultValue,\n onChange,\n disabled,\n readOnly,\n tabIndex = 0,\n ...rest\n } = props;\n\n const { value, setValue } = useValue<Value>({\n name,\n initialValue,\n defaultValue: defaultValue as Value,\n onChange,\n });\n\n const handleKeyDown = (e: KeyboardEvent, index: number) => {\n let newIndex = index;\n const options = (e.target as any)!.parentNode!.querySelectorAll('[role=\"radio\"]');\n\n if (e.key === KEY.ARROW_RIGHT || e.key === KEY.ARROW_DOWN) {\n newIndex = (index + 1) % options.length;\n options[newIndex]?.focus();\n } else if (e.key === KEY.ARROW_LEFT || e.key === KEY.ARROW_UP) {\n newIndex = (index - 1 + options.length) % options.length;\n options[newIndex]?.focus();\n } else if (e.key === KEY.SPACE || e.key === KEY.ENTER) {\n setValue(options[index].dataset.value as Value);\n return;\n }\n };\n\n function getTabIndex(checked: boolean, index: number) {\n if (value === undefined || value === null || value === '') {\n return tabIndex === index ? 0 : -1;\n }\n\n return checked ? 0 : -1;\n }\n\n return (\n <div {...rest} className={classnames('flex gap-12', rest.className)} role=\"radiogroup\">\n {Children.map(children, (child, index) => {\n if (!isValidElement(child)) {\n return child;\n }\n\n const type = (child.type as unknown as ReactElement & { displayName?: string }).displayName;\n const itemValue = (child.props as ButtonProps | RadioProps).value;\n const checked = value === itemValue;\n\n if (type?.includes('Button')) {\n return cloneElement(child, {\n ...child.props,\n value: undefined,\n role: 'radio',\n color: checked ? 'black' : 'white',\n name,\n component: 'span',\n id: `${id}-${index}`,\n disabled,\n readOnly,\n tabIndex: getTabIndex(checked, index),\n 'data-value': itemValue,\n 'aria-checked': value === itemValue,\n onKeyDown: (e: KeyboardEvent) => handleKeyDown(e, index),\n onClick() {\n setValue(itemValue as Value);\n child.props?.onClick?.(itemValue as Value);\n },\n } as ButtonProps);\n }\n\n return cloneElement(child, {\n ...child.props,\n name,\n id: `${id}-${index}`,\n disabled,\n readOnly,\n tabIndex: getTabIndex(checked, index),\n checked: checked,\n onChange(_: string, value: Value) {\n setValue(value);\n },\n } as RadioProps<Value>);\n })}\n </div>\n );\n}\n"],"names":["RadioGroup","props","internalId","useId","id","name","children","initialValue","defaultValue","onChange","disabled","readOnly","tabIndex","rest","value","setValue","useValue","handleKeyDown","index","newIndex","options","KEY","getTabIndex","checked","classnames","Children","child","isValidElement","type","itemValue","cloneElement","e","_"],"mappings":";;;;;AA+BO,SAASA,EAA2BC,GAA+B;AACxE,QAAMC,IAAaC,EAAA,GAEb;AAAA,IACJ,IAAAC,IAAKF;AAAA,IACL,MAAAG,IAAOD;AAAA,IACP,UAAAE;AAAA,IACA,OAAOC;AAAA,IACP,cAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC,IAAW;AAAA,IACX,GAAGC;AAAA,EAAA,IACDZ,GAEE,EAAE,OAAAa,GAAO,UAAAC,EAAA,IAAaC,EAAgB;AAAA,IAC1C,MAAAX;AAAA,IACA,cAAAE;AAAA,IACA,cAAAC;AAAA,IACA,UAAAC;AAAA,EAAA,CACD,GAEKQ,IAAgB,CAAC,GAAkBC,MAAkB;AACzD,QAAIC,IAAWD;AACf,UAAME,IAAW,EAAE,OAAgB,WAAY,iBAAiB,gBAAgB;AAEhF,QAAI,EAAE,QAAQC,EAAI,eAAe,EAAE,QAAQA,EAAI;AAC7C,MAAAF,KAAYD,IAAQ,KAAKE,EAAQ,QACjCA,EAAQD,CAAQ,GAAG,MAAA;AAAA,aACV,EAAE,QAAQE,EAAI,cAAc,EAAE,QAAQA,EAAI;AACnD,MAAAF,KAAYD,IAAQ,IAAIE,EAAQ,UAAUA,EAAQ,QAClDA,EAAQD,CAAQ,GAAG,MAAA;AAAA,aACV,EAAE,QAAQE,EAAI,SAAS,EAAE,QAAQA,EAAI,OAAO;AACrD,MAAAN,EAASK,EAAQF,CAAK,EAAE,QAAQ,KAAc;AAC9C;AAAA,IACF;AAAA,EACF;AAEA,WAASI,EAAYC,GAAkBL,GAAe;AACpD,WAA2BJ,KAAU,QAAQA,MAAU,KAC9CF,MAAaM,IAAQ,IAAI,KAG3BK,IAAU,IAAI;AAAA,EACvB;AAEA,2BACG,OAAA,EAAK,GAAGV,GAAM,WAAWW,EAAW,eAAeX,EAAK,SAAS,GAAG,MAAK,cACvE,UAAAY,EAAS,IAAInB,GAAU,CAACoB,GAAOR,MAAU;AACxC,QAAI,CAACS,EAAeD,CAAK;AACvB,aAAOA;AAGT,UAAME,IAAQF,EAAM,KAA4D,aAC1EG,IAAaH,EAAM,MAAmC,OACtDH,IAAUT,MAAUe;AAE1B,WAAID,GAAM,SAAS,QAAQ,IAClBE,EAAaJ,GAAO;AAAA,MACzB,GAAGA,EAAM;AAAA,MACT,OAAO;AAAA,MACP,MAAM;AAAA,MACN,OAAOH,IAAU,UAAU;AAAA,MAC3B,MAAAlB;AAAA,MACA,WAAW;AAAA,MACX,IAAI,GAAGD,CAAE,IAAIc,CAAK;AAAA,MAClB,UAAAR;AAAA,MACA,UAAAC;AAAA,MACA,UAAUW,EAAYC,GAASL,CAAK;AAAA,MACpC,cAAcW;AAAA,MACd,gBAAgBf,MAAUe;AAAA,MAC1B,WAAW,CAACE,MAAqBd,EAAcc,GAAGb,CAAK;AAAA,MACvD,UAAU;AACR,QAAAH,EAASc,CAAkB,GAC3BH,EAAM,OAAO,UAAUG,CAAkB;AAAA,MAC3C;AAAA,IAAA,CACc,IAGXC,EAAaJ,GAAO;AAAA,MACzB,GAAGA,EAAM;AAAA,MACT,MAAArB;AAAA,MACA,IAAI,GAAGD,CAAE,IAAIc,CAAK;AAAA,MAClB,UAAAR;AAAA,MACA,UAAAC;AAAA,MACA,UAAUW,EAAYC,GAASL,CAAK;AAAA,MACpC,SAAAK;AAAA,MACA,SAASS,GAAWlB,GAAc;AAChC,QAAAC,EAASD,CAAK;AAAA,MAChB;AAAA,IAAA,CACoB;AAAA,EACxB,CAAC,EAAA,CACH;AAEJ;"}
@@ -1,5 +1,4 @@
1
- import { type InputHTMLAttributes } from 'react';
2
- import './range.css';
1
+ import { InputHTMLAttributes } from 'react';
3
2
  interface RangeProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'onChange'> {
4
3
  /**
5
4
  * Aria label