softable-pixels-web 1.1.16 → 1.1.18

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 (103) hide show
  1. package/dist/BasePopover-DaG1Bad1.js +51 -0
  2. package/dist/BasePopover-DaG1Bad1.js.map +1 -0
  3. package/dist/{Button-DOEMYhEA.js → Button-DiBsoNFU.js} +3 -3
  4. package/dist/{Button-DOEMYhEA.js.map → Button-DiBsoNFU.js.map} +1 -1
  5. package/dist/{CheckItem-Cnw5hlwV.js → CheckItem-CJqWCE1W.js} +4 -4
  6. package/dist/{CheckItem-Cnw5hlwV.js.map → CheckItem-CJqWCE1W.js.map} +1 -1
  7. package/dist/{Checkbox-DaRHUBSb.js → Checkbox-j9ZnSxT7.js} +4 -4
  8. package/dist/{Checkbox-DaRHUBSb.js.map → Checkbox-j9ZnSxT7.js.map} +1 -1
  9. package/dist/{ContextMenu-CPjeo0m1.js → ContextMenu-DBEnLqgp.js} +11 -11
  10. package/dist/ContextMenu-DBEnLqgp.js.map +1 -0
  11. package/dist/{Icon-kjpHbCbF.js → Icon-KzwFJI_k.js} +2 -2
  12. package/dist/{Icon-kjpHbCbF.js.map → Icon-KzwFJI_k.js.map} +1 -1
  13. package/dist/{IconButton-DZjuxp2Q.js → IconButton-DAZvE8i5.js} +2 -2
  14. package/dist/{IconButton-DZjuxp2Q.js.map → IconButton-DAZvE8i5.js.map} +1 -1
  15. package/dist/{InfoSummary-C7mxow-z.js → InfoSummary-Cf2ein9V.js} +3 -3
  16. package/dist/{InfoSummary-C7mxow-z.js.map → InfoSummary-Cf2ein9V.js.map} +1 -1
  17. package/dist/{Input-B0J7yEux.js → Input-B6a6mXsZ.js} +4 -4
  18. package/dist/Input-B6a6mXsZ.js.map +1 -0
  19. package/dist/{Label-BVkidQlv.js → Label-BHq2knad.js} +3 -3
  20. package/dist/Label-BHq2knad.js.map +1 -0
  21. package/dist/Popover-CeU8aanh.js +138 -0
  22. package/dist/Popover-CeU8aanh.js.map +1 -0
  23. package/dist/{Select-DFPwAzYG.js → Select-CkeZfibD.js} +59 -58
  24. package/dist/Select-CkeZfibD.js.map +1 -0
  25. package/dist/{Switch-ZmanGt2r.js → Switch-DJNZbvzy.js} +2 -2
  26. package/dist/{Switch-ZmanGt2r.js.map → Switch-DJNZbvzy.js.map} +1 -1
  27. package/dist/{TabSwitch-2WIjQ2Ie.js → TabSwitch-DlXdgLPc.js} +3 -3
  28. package/dist/{TabSwitch-2WIjQ2Ie.js.map → TabSwitch-DlXdgLPc.js.map} +1 -1
  29. package/dist/TextArea-Oqw0zh_x.js +135 -0
  30. package/dist/TextArea-Oqw0zh_x.js.map +1 -0
  31. package/dist/{ThemeContext-bVaozqut.js → ThemeContext-DhXvmWKO.js} +1 -1
  32. package/dist/{ThemeContext-bVaozqut.js.map → ThemeContext-DhXvmWKO.js.map} +1 -1
  33. package/dist/{Typography-CHkdzH2K.js → Typography-BkFV7BhK.js} +2 -2
  34. package/dist/{Typography-CHkdzH2K.js.map → Typography-BkFV7BhK.js.map} +1 -1
  35. package/dist/base-popover.d.ts +4 -0
  36. package/dist/base-popover.js +7 -0
  37. package/dist/button.d.ts +2 -2
  38. package/dist/button.js +3 -3
  39. package/dist/check-item.d.ts +1 -1
  40. package/dist/check-item.js +4 -4
  41. package/dist/checkbox.d.ts +2 -2
  42. package/dist/checkbox.js +4 -4
  43. package/dist/chunk-SwsWFa5-.js +18 -0
  44. package/dist/context-menu.d.ts +2 -2
  45. package/dist/context-menu.js +9 -8
  46. package/dist/icon-button.d.ts +1 -1
  47. package/dist/icon-button.js +2 -2
  48. package/dist/{index-ZGo_xs-Q.d.ts → index-B1QUSkjv.d.ts} +3 -3
  49. package/dist/{index-BLvNLvv2.d.ts → index-BD5ThARj.d.ts} +1 -1
  50. package/dist/{index--Oqbm-1T.d.ts → index-BD5Vr9sw.d.ts} +25 -9
  51. package/dist/{index-C5I_cIP2.d.ts → index-BDr6Gid4.d.ts} +4 -6
  52. package/dist/{index-DDvfWEcX.d.ts → index-BszVk1Tx.d.ts} +1 -1
  53. package/dist/{index-jLN0CEbk.d.ts → index-BymgvkBq.d.ts} +2 -2
  54. package/dist/{index-B96rw-7n.d.ts → index-C5UBhjvX.d.ts} +11 -22
  55. package/dist/{index-CM9BXEm3.d.ts → index-CzB15994.d.ts} +1 -1
  56. package/dist/{index-C9q8d9Md.d.ts → index-D-9XHxWM.d.ts} +2 -2
  57. package/dist/index-DiIBw1ed.d.ts +22 -0
  58. package/dist/index-DlKVR1LO.d.ts +9 -0
  59. package/dist/{index-Cz1S_fwn.d.ts → index-E0ifwXgE.d.ts} +4 -4
  60. package/dist/{index-Bw_XZiTz.d.ts → index-aQIW73fh.d.ts} +1 -1
  61. package/dist/index.d.ts +16 -14
  62. package/dist/index.js +21 -20
  63. package/dist/info-summary.js +3 -3
  64. package/dist/input.d.ts +1 -1
  65. package/dist/input.js +5 -5
  66. package/dist/popover.d.ts +3 -2
  67. package/dist/popover.js +5 -5
  68. package/dist/select.d.ts +3 -2
  69. package/dist/select.js +10 -6
  70. package/dist/{styleProps-DEmfU40p.d.ts → styleProps-B2pBEf9N.d.ts} +2 -1
  71. package/dist/switch.d.ts +1 -1
  72. package/dist/switch.js +2 -2
  73. package/dist/tab-switch.d.ts +1 -1
  74. package/dist/tab-switch.js +3 -3
  75. package/dist/text-area.d.ts +1 -2
  76. package/dist/text-area.js +5 -5
  77. package/dist/theme-context.d.ts +1 -1
  78. package/dist/theme-context.js +1 -1
  79. package/dist/{index-CQWwox_y.d.ts → types-C2C3tKY8.d.ts} +21 -13
  80. package/dist/{types-CGI_6rDa.d.ts → types-CCfbRgMy.d.ts} +1 -1
  81. package/dist/{types-0c2OAbj2.d.ts → types-Ck6jQYTO.d.ts} +3 -3
  82. package/dist/typography.d.ts +1 -1
  83. package/dist/typography.js +2 -2
  84. package/dist/use-dismiss.js +1 -1
  85. package/dist/use-floating.d.ts +1 -1
  86. package/dist/use-floating.js +1 -1
  87. package/dist/{useDismiss-o9kMS5dK.js → useDismiss-CAEk_GV-.js} +1 -1
  88. package/dist/{useDismiss-o9kMS5dK.js.map → useDismiss-CAEk_GV-.js.map} +1 -1
  89. package/dist/{useFloating-DMJ2SdMi.js → useFloating-cvZUo5wI.js} +1 -1
  90. package/dist/{useFloating-DMJ2SdMi.js.map → useFloating-cvZUo5wI.js.map} +1 -1
  91. package/dist/{useThemedStyles-gOkfhYkd.d.ts → useThemedStyles-C23Tevdv.d.ts} +1 -1
  92. package/dist/{useThemedStyles-D4si38PM.js → useThemedStyles-CrarDyWc.js} +2 -1
  93. package/dist/useThemedStyles-CrarDyWc.js.map +1 -0
  94. package/package.json +8 -1
  95. package/dist/ContextMenu-CPjeo0m1.js.map +0 -1
  96. package/dist/Input-B0J7yEux.js.map +0 -1
  97. package/dist/Label-BVkidQlv.js.map +0 -1
  98. package/dist/Popover-DI9wSxIa.js +0 -81
  99. package/dist/Popover-DI9wSxIa.js.map +0 -1
  100. package/dist/Select-DFPwAzYG.js.map +0 -1
  101. package/dist/TextArea-DGCFyZrW.js +0 -113
  102. package/dist/TextArea-DGCFyZrW.js.map +0 -1
  103. package/dist/useThemedStyles-D4si38PM.js.map +0 -1
@@ -1,7 +1,7 @@
1
- import { t as Typography } from "./Typography-CHkdzH2K.js";
1
+ import { t as Typography } from "./Typography-BkFV7BhK.js";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
3
 
4
- //#region src/components/commons/Label/index.tsx
4
+ //#region src/components/commons/toolkit/Label/index.tsx
5
5
  const Label = (props) => {
6
6
  const { label, color, htmlFor, required, requiredColor, variant = "b2", ...rest } = props;
7
7
  return /* @__PURE__ */ jsx("label", {
@@ -22,4 +22,4 @@ const Label = (props) => {
22
22
 
23
23
  //#endregion
24
24
  export { Label as t };
25
- //# sourceMappingURL=Label-BVkidQlv.js.map
25
+ //# sourceMappingURL=Label-BHq2knad.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Label-BHq2knad.js","names":["Label: React.FC<LabelProps>"],"sources":["../src/components/commons/toolkit/Label/index.tsx"],"sourcesContent":["// Components\nimport { Typography } from '@components/commons/toolkit/Typography'\n\n// Types\nimport type { LabelProps } from './types'\n\nexport const Label: React.FC<LabelProps> = props => {\n const {\n label,\n color,\n htmlFor,\n required,\n requiredColor,\n variant = 'b2',\n ...rest\n } = props\n\n return (\n <label htmlFor={htmlFor}>\n <Typography\n variant={variant}\n color={color ?? 'var(px-text-primary)'}\n {...rest}\n >\n {label}\n\n {required ? (\n <Typography\n as=\"span\"\n variant=\"b2\"\n color={requiredColor ?? 'var(--px-text-error)'}\n >\n {' '}\n *\n </Typography>\n ) : null}\n </Typography>\n </label>\n )\n}\n"],"mappings":";;;;AAMA,MAAaA,SAA8B,UAAS;CAClD,MAAM,EACJ,OACA,OACA,SACA,UACA,eACA,UAAU,MACV,GAAG,SACD;AAEJ,QACE,oBAAC;EAAe;YACd,qBAAC;GACU;GACT,OAAO,SAAS;GAChB,GAAI;cAEH,OAEA,WACC,qBAAC;IACC,IAAG;IACH,SAAQ;IACR,OAAO,iBAAiB;eAEvB,KAAI;KAEM,GACX;IACO;GACP"}
@@ -0,0 +1,138 @@
1
+ import { n as styled, t as useThemedStyles } from "./useThemedStyles-CrarDyWc.js";
2
+ import { t as useDismiss } from "./useDismiss-CAEk_GV-.js";
3
+ import { t as useFloating } from "./useFloating-cvZUo5wI.js";
4
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
5
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
+ import { createPortal } from "react-dom";
7
+
8
+ //#region src/components/commons/toolkit/Popover/styles.ts
9
+ function createPopoverStyles({ hideShadow = false }) {
10
+ return styled({
11
+ popoverNode: {
12
+ position: "fixed",
13
+ left: 0,
14
+ top: 0,
15
+ zIndex: 10,
16
+ padding: "0.25rem",
17
+ backgroundColor: "var(--px-bg)",
18
+ boxShadow: hideShadow ? "none" : "var(--px-ring-1)",
19
+ borderRadius: "var(--px-radius-xl)"
20
+ },
21
+ trigger: {
22
+ width: "fit-content",
23
+ height: "fit-content"
24
+ }
25
+ });
26
+ }
27
+
28
+ //#endregion
29
+ //#region src/components/commons/toolkit/Popover/types.ts
30
+ var types_exports = {};
31
+
32
+ //#endregion
33
+ //#region src/components/commons/toolkit/Popover/index.tsx
34
+ const Popover = (props) => {
35
+ const { portalId, anchorRef, floatingOptions, closeOnEscape = true, open: controlledOpen, closeOnOutsideClick = true, trigger, content, onOpenChange, onMouseEnter, onMouseLeave } = props;
36
+ const triggerRef = useRef(null);
37
+ const popoverRef = useRef(null);
38
+ const resolvedAnchorRef = anchorRef ?? triggerRef;
39
+ const [uncontrolledOpen, setUncontrolledOpen] = useState(false);
40
+ const [widthTrigger, setWidthTrigger] = useState(triggerRef.current?.offsetWidth ?? 0);
41
+ const [portalEl, setPortalEl] = useState(null);
42
+ const open = controlledOpen ?? uncontrolledOpen;
43
+ const { styles } = useThemedStyles(props, createPopoverStyles, {
44
+ applyCommonProps: true,
45
+ override: props.styles,
46
+ commonSlot: "popoverNode",
47
+ pick: (p) => [
48
+ p.open,
49
+ p.content,
50
+ p.trigger
51
+ ]
52
+ });
53
+ const { floatingRef, update } = useFloating(resolvedAnchorRef, {
54
+ offsetY: 6,
55
+ strategy: "fixed",
56
+ keepInViewport: true,
57
+ placement: "bottom-start",
58
+ ...floatingOptions
59
+ });
60
+ function setOpen(v) {
61
+ onOpenChange?.(v);
62
+ if (controlledOpen === void 0) setUncontrolledOpen(v);
63
+ }
64
+ const close = useCallback(() => setOpen(false), [setOpen]);
65
+ useDismiss({
66
+ open,
67
+ closeOnEscape,
68
+ closeOnOutsideClick,
69
+ refs: [resolvedAnchorRef, popoverRef],
70
+ onClose: close
71
+ });
72
+ useEffect(() => {
73
+ if (typeof document === "undefined") return;
74
+ if (!portalId) {
75
+ setPortalEl(null);
76
+ return;
77
+ }
78
+ const found = document.getElementById(portalId);
79
+ setPortalEl(found);
80
+ if (!found) {
81
+ const obs = new MutationObserver(() => {
82
+ const el = document.getElementById(portalId);
83
+ if (el) {
84
+ setPortalEl(el);
85
+ obs.disconnect();
86
+ }
87
+ });
88
+ obs.observe(document.documentElement, {
89
+ childList: true,
90
+ subtree: true
91
+ });
92
+ return () => obs.disconnect();
93
+ }
94
+ }, [portalId]);
95
+ const portalContainer = useMemo(() => {
96
+ if (typeof document === "undefined") return null;
97
+ return portalEl ?? document.body;
98
+ }, [portalEl]);
99
+ useEffect(() => {
100
+ if (open) requestAnimationFrame(update);
101
+ setWidthTrigger(triggerRef.current?.offsetWidth ?? 0);
102
+ }, [open, update]);
103
+ useEffect(() => {
104
+ const handleResize = () => {
105
+ setWidthTrigger(triggerRef.current?.offsetWidth ?? 0);
106
+ };
107
+ window.addEventListener("resize", handleResize);
108
+ return () => {
109
+ window.removeEventListener("resize", handleResize);
110
+ };
111
+ }, []);
112
+ const triggerNode = trigger?.({
113
+ ariaExpanded: open,
114
+ ref: triggerRef,
115
+ onClick: () => setOpen(!open)
116
+ }) ?? null;
117
+ const popoverNode = open ? /* @__PURE__ */ jsx("div", {
118
+ ref: (el) => {
119
+ popoverRef.current = el;
120
+ floatingRef(el);
121
+ },
122
+ role: "dialog",
123
+ style: styles.popoverNode,
124
+ onMouseEnter,
125
+ onMouseLeave,
126
+ onMouseDownCapture: (e) => e.stopPropagation(),
127
+ onPointerDownCapture: (e) => e.stopPropagation(),
128
+ children: content({
129
+ close,
130
+ widthTrigger
131
+ })
132
+ }) : null;
133
+ return /* @__PURE__ */ jsxs(Fragment, { children: [triggerNode, typeof document !== "undefined" ? createPortal(popoverNode, portalContainer ?? document.body) : null] });
134
+ };
135
+
136
+ //#endregion
137
+ export { types_exports as n, Popover as t };
138
+ //# sourceMappingURL=Popover-CeU8aanh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Popover-CeU8aanh.js","names":["Popover: React.FC<PopoverProps>"],"sources":["../src/components/commons/toolkit/Popover/styles.ts","../src/components/commons/toolkit/Popover/types.ts","../src/components/commons/toolkit/Popover/index.tsx"],"sourcesContent":["// Types\nimport type { PopoverProps } from './types'\nimport { styled } from '@hooks/useThemedStyles/types'\n\nexport function createPopoverStyles({ hideShadow = false }: PopoverProps) {\n return styled({\n popoverNode: {\n position: 'fixed',\n left: 0,\n top: 0,\n\n zIndex: 10,\n\n padding: '0.25rem',\n\n backgroundColor: 'var(--px-bg)',\n boxShadow: hideShadow ? 'none' : 'var(--px-ring-1)',\n\n borderRadius: 'var(--px-radius-xl)'\n },\n\n trigger: {\n width: 'fit-content',\n height: 'fit-content'\n }\n })\n}\n","// External Libraries\nimport type { MouseEventHandler, ReactNode, RefObject } from 'react'\n\n// Types\nimport type { createPopoverStyles } from './styles'\nimport type { FloatingOptions } from '@hooks/useFloating/types'\nimport type { PaddingProps } from '@hooks/useThemedStyles/types'\n\nexport type PopoverTriggerRenderProps = {\n ariaExpanded: boolean\n ref: RefObject<HTMLElement>\n onClick: () => void\n}\n\nexport interface PopoverProps extends PaddingProps {\n open?: boolean\n portalId?: string\n hideShadow?: boolean\n closeOnEscape?: boolean\n closeOnOutsideClick?: boolean\n floatingOptions?: FloatingOptions\n anchorRef?: RefObject<HTMLElement>\n\n onOpenChange?: (v: boolean) => void\n onMouseEnter?: MouseEventHandler<HTMLDivElement>\n onMouseLeave?: MouseEventHandler<HTMLDivElement>\n content: (ctx: { close: () => void; widthTrigger: number }) => ReactNode\n trigger?: (props: PopoverTriggerRenderProps) => ReactNode\n\n styles?: Partial<ReturnType<typeof createPopoverStyles>>\n}\n","// External Libraries\n/** biome-ignore-all lint/suspicious/noExplicitAny: <Not needed> */\n/** biome-ignore-all lint/correctness/useExhaustiveDependencies: <Not needed> */\nimport type React from 'react'\nimport { createPortal } from 'react-dom'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\n// Hooks\nimport { useDismiss } from '@hooks/useDismiss'\nimport { useFloating } from '@hooks/useFloating'\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Types\nimport type { PopoverProps } from './types'\n\n// Styles\nimport { createPopoverStyles } from './styles'\n\nexport * as PopoverTypes from './types'\n\nexport const Popover: React.FC<PopoverProps> = props => {\n const {\n portalId,\n anchorRef,\n floatingOptions,\n closeOnEscape = true,\n open: controlledOpen,\n closeOnOutsideClick = true,\n trigger,\n content,\n onOpenChange,\n onMouseEnter,\n onMouseLeave\n } = props\n\n // Refs\n const triggerRef = useRef<HTMLElement | null>(null)\n const popoverRef = useRef<HTMLDivElement | null>(null)\n const resolvedAnchorRef = (anchorRef ?? triggerRef) as any\n\n // States\n const [uncontrolledOpen, setUncontrolledOpen] = useState(false)\n const [widthTrigger, setWidthTrigger] = useState(\n triggerRef.current?.offsetWidth ?? 0\n )\n const [portalEl, setPortalEl] = useState<HTMLElement | null>(null)\n\n const open = controlledOpen ?? uncontrolledOpen\n\n // Hooks\n const { styles } = useThemedStyles(props, createPopoverStyles, {\n applyCommonProps: true,\n override: props.styles,\n commonSlot: 'popoverNode',\n pick: p => [p.open, p.content, p.trigger]\n })\n\n const { floatingRef, update } = useFloating(resolvedAnchorRef, {\n offsetY: 6,\n strategy: 'fixed',\n keepInViewport: true,\n placement: 'bottom-start',\n ...floatingOptions\n })\n\n // Functions\n function setOpen(v: boolean) {\n onOpenChange?.(v)\n if (controlledOpen === undefined) setUncontrolledOpen(v)\n }\n\n const close = useCallback(() => setOpen(false), [setOpen])\n\n useDismiss({\n open,\n closeOnEscape,\n closeOnOutsideClick,\n refs: [resolvedAnchorRef, popoverRef],\n onClose: close\n })\n\n // UseEffects\n useEffect(() => {\n if (typeof document === 'undefined') return\n\n if (!portalId) {\n setPortalEl(null)\n return\n }\n\n const found = document.getElementById(portalId) as HTMLElement | null\n setPortalEl(found)\n\n if (!found) {\n const obs = new MutationObserver(() => {\n const el = document.getElementById(portalId) as HTMLElement | null\n if (el) {\n setPortalEl(el)\n obs.disconnect()\n }\n })\n obs.observe(document.documentElement, { childList: true, subtree: true })\n return () => obs.disconnect()\n }\n\n return\n }, [portalId])\n\n const portalContainer = useMemo(() => {\n if (typeof document === 'undefined') return null\n return portalEl ?? document.body\n }, [portalEl])\n\n useEffect(() => {\n if (open) requestAnimationFrame(update)\n\n setWidthTrigger(triggerRef.current?.offsetWidth ?? 0)\n }, [open, update])\n\n useEffect(() => {\n const handleResize = () => {\n setWidthTrigger(triggerRef.current?.offsetWidth ?? 0)\n }\n\n window.addEventListener('resize', handleResize)\n\n return () => {\n window.removeEventListener('resize', handleResize)\n }\n }, [])\n\n const triggerNode =\n trigger?.({\n ariaExpanded: open,\n ref: triggerRef as any,\n onClick: () => setOpen(!open)\n }) ?? null\n\n const popoverNode = open ? (\n <div\n ref={el => {\n popoverRef.current = el\n floatingRef(el)\n }}\n role=\"dialog\"\n style={styles.popoverNode}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onMouseDownCapture={e => e.stopPropagation()}\n onPointerDownCapture={e => e.stopPropagation()}\n >\n {content({ close, widthTrigger })}\n </div>\n ) : null\n\n return (\n <>\n {triggerNode}\n {typeof document !== 'undefined'\n ? createPortal(popoverNode, portalContainer ?? document.body)\n : null}\n </>\n )\n}\n"],"mappings":";;;;;;;;AAIA,SAAgB,oBAAoB,EAAE,aAAa,SAAuB;AACxE,QAAO,OAAO;EACZ,aAAa;GACX,UAAU;GACV,MAAM;GACN,KAAK;GAEL,QAAQ;GAER,SAAS;GAET,iBAAiB;GACjB,WAAW,aAAa,SAAS;GAEjC,cAAc;GACf;EAED,SAAS;GACP,OAAO;GACP,QAAQ;GACT;EACF,CAAC;;;;;;;;;AELJ,MAAaA,WAAkC,UAAS;CACtD,MAAM,EACJ,UACA,WACA,iBACA,gBAAgB,MAChB,MAAM,gBACN,sBAAsB,MACtB,SACA,SACA,cACA,cACA,iBACE;CAGJ,MAAM,aAAa,OAA2B,KAAK;CACnD,MAAM,aAAa,OAA8B,KAAK;CACtD,MAAM,oBAAqB,aAAa;CAGxC,MAAM,CAAC,kBAAkB,uBAAuB,SAAS,MAAM;CAC/D,MAAM,CAAC,cAAc,mBAAmB,SACtC,WAAW,SAAS,eAAe,EACpC;CACD,MAAM,CAAC,UAAU,eAAe,SAA6B,KAAK;CAElE,MAAM,OAAO,kBAAkB;CAG/B,MAAM,EAAE,WAAW,gBAAgB,OAAO,qBAAqB;EAC7D,kBAAkB;EAClB,UAAU,MAAM;EAChB,YAAY;EACZ,OAAM,MAAK;GAAC,EAAE;GAAM,EAAE;GAAS,EAAE;GAAQ;EAC1C,CAAC;CAEF,MAAM,EAAE,aAAa,WAAW,YAAY,mBAAmB;EAC7D,SAAS;EACT,UAAU;EACV,gBAAgB;EAChB,WAAW;EACX,GAAG;EACJ,CAAC;CAGF,SAAS,QAAQ,GAAY;AAC3B,iBAAe,EAAE;AACjB,MAAI,mBAAmB,OAAW,qBAAoB,EAAE;;CAG1D,MAAM,QAAQ,kBAAkB,QAAQ,MAAM,EAAE,CAAC,QAAQ,CAAC;AAE1D,YAAW;EACT;EACA;EACA;EACA,MAAM,CAAC,mBAAmB,WAAW;EACrC,SAAS;EACV,CAAC;AAGF,iBAAgB;AACd,MAAI,OAAO,aAAa,YAAa;AAErC,MAAI,CAAC,UAAU;AACb,eAAY,KAAK;AACjB;;EAGF,MAAM,QAAQ,SAAS,eAAe,SAAS;AAC/C,cAAY,MAAM;AAElB,MAAI,CAAC,OAAO;GACV,MAAM,MAAM,IAAI,uBAAuB;IACrC,MAAM,KAAK,SAAS,eAAe,SAAS;AAC5C,QAAI,IAAI;AACN,iBAAY,GAAG;AACf,SAAI,YAAY;;KAElB;AACF,OAAI,QAAQ,SAAS,iBAAiB;IAAE,WAAW;IAAM,SAAS;IAAM,CAAC;AACzE,gBAAa,IAAI,YAAY;;IAI9B,CAAC,SAAS,CAAC;CAEd,MAAM,kBAAkB,cAAc;AACpC,MAAI,OAAO,aAAa,YAAa,QAAO;AAC5C,SAAO,YAAY,SAAS;IAC3B,CAAC,SAAS,CAAC;AAEd,iBAAgB;AACd,MAAI,KAAM,uBAAsB,OAAO;AAEvC,kBAAgB,WAAW,SAAS,eAAe,EAAE;IACpD,CAAC,MAAM,OAAO,CAAC;AAElB,iBAAgB;EACd,MAAM,qBAAqB;AACzB,mBAAgB,WAAW,SAAS,eAAe,EAAE;;AAGvD,SAAO,iBAAiB,UAAU,aAAa;AAE/C,eAAa;AACX,UAAO,oBAAoB,UAAU,aAAa;;IAEnD,EAAE,CAAC;CAEN,MAAM,cACJ,UAAU;EACR,cAAc;EACd,KAAK;EACL,eAAe,QAAQ,CAAC,KAAK;EAC9B,CAAC,IAAI;CAER,MAAM,cAAc,OAClB,oBAAC;EACC,MAAK,OAAM;AACT,cAAW,UAAU;AACrB,eAAY,GAAG;;EAEjB,MAAK;EACL,OAAO,OAAO;EACA;EACA;EACd,qBAAoB,MAAK,EAAE,iBAAiB;EAC5C,uBAAsB,MAAK,EAAE,iBAAiB;YAE7C,QAAQ;GAAE;GAAO;GAAc,CAAC;GAC7B,GACJ;AAEJ,QACE,4CACG,aACA,OAAO,aAAa,cACjB,aAAa,aAAa,mBAAmB,SAAS,KAAK,GAC3D,QACH"}
@@ -1,11 +1,12 @@
1
- import { n as styled, t as useThemedStyles } from "./useThemedStyles-D4si38PM.js";
2
- import { t as Icon } from "./Icon-kjpHbCbF.js";
3
- import { t as Label } from "./Label-BVkidQlv.js";
1
+ import { n as styled, t as useThemedStyles } from "./useThemedStyles-CrarDyWc.js";
2
+ import { t as Icon } from "./Icon-KzwFJI_k.js";
3
+ import { t as BasePopover } from "./BasePopover-DaG1Bad1.js";
4
+ import { t as Label } from "./Label-BHq2knad.js";
4
5
  import { useMemo, useState } from "react";
5
6
  import { jsx, jsxs } from "react/jsx-runtime";
6
7
 
7
8
  //#region src/components/commons/inputs/Select/components/OptionItem/styles.ts
8
- function createOptionsStyles(_props) {
9
+ function createOptionsStyles({ isSelected }) {
9
10
  return styled({
10
11
  container: {
11
12
  width: "100%",
@@ -16,8 +17,9 @@ function createOptionsStyles(_props) {
16
17
  padding: "0.5rem 0.75rem",
17
18
  cursor: "pointer",
18
19
  transition: "background-color 0.2s ease-out",
20
+ backgroundColor: isSelected ? "var(--px-background-card-hover)" : "transparent",
19
21
  __rules: {
20
- "&:hover": { backgroundColor: "var(--px-background-card-hover)" },
22
+ "&:hover": { backgroundColor: "var(--px-background-card-hover) !important" },
21
23
  "&:focus": {
22
24
  outlineOffset: "-1px",
23
25
  outline: "2px solid var(--px-color-primary)"
@@ -118,8 +120,8 @@ function createSelectStyles(props) {
118
120
  boxShadow: "var(--px-shadow-default)",
119
121
  borderColor: props.errorMessage ? "var(--px-color-error)" : "var(--px-border-primary)",
120
122
  __rules: { "&:focus-within": {
121
- outlineOffset: "-1px",
122
- outline: `2px solid var(${props.errorMessage ? "--px-color-error" : "--px-color-primary"})`
123
+ outlineOffset: "-1px !important",
124
+ outline: `2px solid var(${props.errorMessage ? "--px-color-error" : "--px-color-primary"}) !important`
123
125
  } }
124
126
  },
125
127
  text: {
@@ -142,28 +144,14 @@ function createSelectStyles(props) {
142
144
  fontFamily: "inherit",
143
145
  color: "var(--px-text-error)"
144
146
  },
145
- panel: {
146
- width: "100%",
147
- height: "12rem",
148
- display: "flex",
149
- flexDirection: "column",
150
- position: "absolute",
151
- top: "calc(100% + 0.25rem)",
152
- left: "0",
153
- zIndex: 10,
154
- overflowY: "auto",
155
- overscrollBehavior: "contain",
156
- borderWidth: 1,
157
- rowGap: "0.25rem",
158
- padding: "0.25rem",
159
- borderRadius: "0.5rem",
160
- backgroundColor: "var(--px-bg)",
161
- boxShadow: "var(--px-shadow-default)",
162
- borderColor: "var(--px-border-primary)"
163
- }
147
+ panel: { width: "100%" }
164
148
  });
165
149
  }
166
150
 
151
+ //#endregion
152
+ //#region src/components/commons/inputs/Select/types.ts
153
+ var types_exports = {};
154
+
167
155
  //#endregion
168
156
  //#region src/components/commons/inputs/Select/index.tsx
169
157
  const Select = (props) => {
@@ -189,6 +177,32 @@ const Select = (props) => {
189
177
  if (hiddenCount > 0) result += ` +${hiddenCount}`;
190
178
  return result;
191
179
  }
180
+ function renderTrigger({ ref, ariaExpanded, onClick }) {
181
+ return /* @__PURE__ */ jsxs("button", {
182
+ ref,
183
+ dir: "ltr",
184
+ type: "button",
185
+ role: "combobox",
186
+ style: styles.content,
187
+ "aria-autocomplete": "none",
188
+ "aria-label": props.label,
189
+ className: classes.content,
190
+ "aria-expanded": ariaExpanded,
191
+ onClick,
192
+ children: [
193
+ props.value.length ? props.startIcon : null,
194
+ /* @__PURE__ */ jsx("span", {
195
+ id: "text-content",
196
+ style: styles.text,
197
+ children: renderContent()
198
+ }),
199
+ /* @__PURE__ */ jsx(Icon, {
200
+ size: "sm",
201
+ name: "chevrons-down"
202
+ })
203
+ ]
204
+ });
205
+ }
192
206
  return /* @__PURE__ */ jsxs("div", {
193
207
  style: styles.container,
194
208
  children: [
@@ -198,37 +212,24 @@ const Select = (props) => {
198
212
  requiredColor: props.requiredColor,
199
213
  ...props.labelConfig
200
214
  }),
201
- /* @__PURE__ */ jsxs("button", {
202
- dir: "ltr",
203
- type: "button",
204
- role: "combobox",
205
- "aria-expanded": open,
206
- style: styles.content,
207
- "aria-autocomplete": "none",
208
- "aria-label": props.label,
209
- className: classes.content,
210
- onClick: togglePanel,
211
- children: [
212
- props.startIcon,
213
- /* @__PURE__ */ jsx("span", {
214
- id: "text-content",
215
- style: styles.text,
216
- children: renderContent()
217
- }),
218
- /* @__PURE__ */ jsx(Icon, {
219
- size: "sm",
220
- name: "chevrons-down"
221
- })
222
- ]
215
+ /* @__PURE__ */ jsx(BasePopover, {
216
+ open,
217
+ portalId: props.portalId,
218
+ trigger: renderTrigger,
219
+ onOpenChange: togglePanel,
220
+ floatingOptions: {
221
+ viewportMargin: 0,
222
+ strategy: props.strategy
223
+ },
224
+ children: /* @__PURE__ */ jsx("div", {
225
+ style: styles.panel,
226
+ children: props.options.map((option) => /* @__PURE__ */ jsx(OptionItem, {
227
+ option,
228
+ isSelected: props.value.includes(option.value),
229
+ onClick: handleOptionClick
230
+ }, option.value))
231
+ })
223
232
  }),
224
- open ? /* @__PURE__ */ jsx("div", {
225
- style: styles.panel,
226
- children: props.options.map((option) => /* @__PURE__ */ jsx(OptionItem, {
227
- option,
228
- isSelected: props.value.includes(option.value),
229
- onClick: handleOptionClick
230
- }, option.value))
231
- }) : null,
232
233
  props.errorMessage ? /* @__PURE__ */ jsx("span", {
233
234
  style: styles.error,
234
235
  children: props.errorMessage
@@ -238,5 +239,5 @@ const Select = (props) => {
238
239
  };
239
240
 
240
241
  //#endregion
241
- export { Select as t };
242
- //# sourceMappingURL=Select-DFPwAzYG.js.map
242
+ export { types_exports as n, Select as t };
243
+ //# sourceMappingURL=Select-CkeZfibD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select-CkeZfibD.js","names":["OptionItem: React.FC<OptionItemProps>","Select: React.FC<SelectProps>"],"sources":["../src/components/commons/inputs/Select/components/OptionItem/styles.ts","../src/components/commons/inputs/Select/components/OptionItem/index.tsx","../src/components/commons/inputs/Select/hooks/useSelect/index.ts","../src/components/commons/inputs/Select/styles.ts","../src/components/commons/inputs/Select/types.ts","../src/components/commons/inputs/Select/index.tsx"],"sourcesContent":["import { styled } from '@hooks/useThemedStyles/types'\nimport type { OptionItemProps } from './types'\n\nexport function createOptionsStyles({ isSelected }: OptionItemProps) {\n return styled({\n container: {\n width: '100%',\n\n display: 'flex',\n alignItems: 'center',\n textAlign: 'left',\n\n borderRadius: '0.25rem',\n padding: '0.5rem 0.75rem',\n\n cursor: 'pointer',\n transition: 'background-color 0.2s ease-out',\n\n backgroundColor: isSelected\n ? 'var(--px-background-card-hover)'\n : 'transparent',\n\n __rules: {\n '&:hover': {\n backgroundColor: 'var(--px-background-card-hover) !important'\n },\n\n '&:focus': {\n outlineOffset: '-1px',\n outline: '2px solid var(--px-color-primary)'\n }\n }\n },\n\n text: {\n flex: 1,\n\n fontSize: '1rem',\n fontWeight: 500,\n lineHeight: '1.5rem',\n fontFamily: 'inherit',\n color: 'var(--px-text-primary)',\n\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis'\n }\n })\n}\n","/** biome-ignore-all lint/a11y/useSemanticElements: It's a custom select component */\n// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Types\nimport type { OptionItemProps } from './types'\n\n// Styles\nimport { createOptionsStyles } from './styles'\n\nexport const OptionItem: React.FC<OptionItemProps> = props => {\n // Hooks\n const { styles, classes } = useThemedStyles(props, createOptionsStyles)\n\n // Functions\n function handleClick() {\n props.onClick(props.option.value)\n }\n\n return (\n <button\n type=\"button\"\n role=\"option\"\n style={styles.container}\n className={classes.container}\n aria-label={props.option.label}\n aria-selected={props.isSelected}\n onClick={handleClick}\n >\n <span style={styles.text}>{props.option.label}</span>\n </button>\n )\n}\n","// External Libraries\nimport { useState } from 'react'\n\n// Types\nimport type { SelectProps } from '../../types'\n\nexport function useSelect({\n value,\n multiple,\n canClear,\n onChange\n}: SelectProps) {\n // States\n const [open, setOpen] = useState(false)\n\n // Functions\n function handleOptionClick(option: string) {\n const isAlreadySelected = value.includes(option)\n\n if (!multiple) {\n if (isAlreadySelected) {\n if (canClear) onChange([])\n } else onChange([option])\n\n setOpen(false)\n return\n }\n\n if (isAlreadySelected) {\n if (value.length === 1) {\n if (canClear) onChange([])\n } else onChange(value.filter(v => v !== option))\n } else onChange([...value, option])\n }\n\n function togglePanel() {\n setOpen(prev => !prev)\n }\n\n function closePanel() {\n setOpen(false)\n }\n\n return { open, togglePanel, closePanel, handleOptionClick }\n}\n","import { styled } from '@hooks/useThemedStyles/types'\nimport type { SelectProps } from './types'\n\nexport function createSelectStyles(props: SelectProps) {\n return styled({\n container: {\n width: '100%',\n\n display: 'flex',\n flexDirection: 'column',\n\n position: 'relative',\n\n rowGap: '0.375rem'\n },\n\n content: {\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n\n borderWidth: 1,\n columnGap: '0.25rem',\n borderRadius: '0.5rem',\n padding: '0.625rem 0.875rem',\n\n opacity: props.disabled ? 0.5 : 1,\n cursor: props.disabled ? 'not-allowed' : 'pointer',\n boxShadow: 'var(--px-shadow-default)',\n borderColor: props.errorMessage\n ? 'var(--px-color-error)'\n : 'var(--px-border-primary)',\n\n __rules: {\n '&:focus-within': {\n outlineOffset: '-1px !important',\n outline: `2px solid var(${props.errorMessage ? '--px-color-error' : '--px-color-primary'}) !important`\n }\n }\n },\n\n text: {\n flex: 1,\n\n textAlign: 'left',\n\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n\n fontSize: '1rem',\n lineHeight: '1.5rem',\n fontFamily: 'inherit',\n fontWeight: props.value.length ? 500 : 400,\n color: props.value.length\n ? 'var(--px-text-primary)'\n : 'var(--px-text-secondary)'\n },\n\n error: {\n display: 'block',\n fontWeight: 400,\n lineHeight: '1rem',\n fontSize: '0.75rem',\n fontFamily: 'inherit',\n color: 'var(--px-text-error)'\n },\n\n panel: {\n width: '100%'\n }\n })\n}\n","import type {\n StylesOf,\n TextProps,\n LayoutProps,\n MarginProps\n} from '@hooks/useThemedStyles/types'\nimport type { createSelectStyles } from './styles'\nimport type { FloatingOptions } from '@hooks/useFloating/types'\nimport type { PopoverProps } from '@components/commons/toolkit/Popover/types'\n\nexport interface SelectProps extends LayoutProps, MarginProps {\n label: string\n value: string[]\n placeholder?: string\n options: SelectOption[]\n\n portalId?: PopoverProps['portalId']\n strategy: FloatingOptions['strategy']\n\n canClear?: boolean\n multiple?: boolean\n required?: boolean\n disabled?: boolean\n hideLabel?: boolean\n errorMessage?: string\n maxVisibleItems?: number\n\n startIcon?: React.ReactNode\n styles?: StylesOf<typeof createSelectStyles>\n\n requiredColor?: string\n labelConfig?: TextProps\n\n onChange: (value: string[]) => void\n}\n\nexport interface SelectOption {\n label: string\n value: string\n}\n","/** biome-ignore-all lint/a11y/useSemanticElements: It's a custom select component */\n// External Libraries\nimport type React from 'react'\nimport { useMemo } from 'react'\n\n// Components\nimport { OptionItem } from './components/OptionItem'\nimport { Icon } from '@components/commons/toolkit/Icon'\nimport { Label } from '@components/commons/toolkit/Label'\n\n// Hooks\nimport { useSelect } from './hooks/useSelect'\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Types\nimport type { SelectProps } from './types'\nimport type { PopoverTriggerRenderProps } from '@components/commons/toolkit/Popover/types'\n\n// Styles\nimport { createSelectStyles } from './styles'\nimport { BasePopover } from '@components/commons/structure/BasePopover'\n\nexport * as SelectTypes from './types'\n\nexport const Select: React.FC<SelectProps> = props => {\n // Hooks\n const { open, togglePanel, handleOptionClick } = useSelect(props)\n const { styles, classes } = useThemedStyles(props, createSelectStyles, {\n pick: p => [p.disabled, p.errorMessage, p.value],\n override: props.styles,\n applyCommonProps: true,\n commonSlot: 'container'\n })\n\n // Constants\n const maxVisible = props.maxVisibleItems ?? Infinity\n const optionsMap = useMemo(\n () => new Map(props.options.map(option => [option.value, option.label])),\n [props.options]\n )\n\n // Functions\n function renderContent() {\n if (!props.value?.length) return props.placeholder\n\n const resolvedValues = props.value.map(val => optionsMap.get(val) ?? val)\n\n const visibleItems = resolvedValues.slice(0, maxVisible)\n const hiddenCount = resolvedValues.length - visibleItems.length\n\n let result = visibleItems.join(', ')\n if (hiddenCount > 0) result += ` +${hiddenCount}`\n\n return result\n }\n\n function renderTrigger({\n ref,\n ariaExpanded,\n onClick\n }: PopoverTriggerRenderProps) {\n return (\n <button\n ref={ref as any}\n dir=\"ltr\"\n type=\"button\"\n role=\"combobox\"\n style={styles.content}\n aria-autocomplete=\"none\"\n aria-label={props.label}\n className={classes.content}\n aria-expanded={ariaExpanded}\n onClick={onClick}\n >\n {props.value.length ? props.startIcon : null}\n\n <span id=\"text-content\" style={styles.text}>\n {renderContent()}\n </span>\n\n <Icon size=\"sm\" name=\"chevrons-down\" />\n </button>\n )\n }\n\n return (\n <div style={styles.container}>\n {props.hideLabel ? null : (\n <Label\n label={props.label}\n required={props.required}\n requiredColor={props.requiredColor}\n {...props.labelConfig}\n />\n )}\n\n <BasePopover\n open={open}\n portalId={props.portalId}\n trigger={renderTrigger}\n onOpenChange={togglePanel}\n floatingOptions={{ viewportMargin: 0, strategy: props.strategy }}\n >\n <div style={styles.panel}>\n {props.options.map(option => (\n <OptionItem\n key={option.value}\n option={option}\n isSelected={props.value.includes(option.value)}\n onClick={handleOptionClick}\n />\n ))}\n </div>\n </BasePopover>\n\n {props.errorMessage ? (\n <span style={styles.error}>{props.errorMessage}</span>\n ) : null}\n </div>\n )\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { n as styled, t as useThemedStyles } from "./useThemedStyles-D4si38PM.js";
1
+ import { n as styled, t as useThemedStyles } from "./useThemedStyles-CrarDyWc.js";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/commons/toolkit/Switch/styles.ts
@@ -46,4 +46,4 @@ const Switch = (props) => {
46
46
 
47
47
  //#endregion
48
48
  export { Switch as t };
49
- //# sourceMappingURL=Switch-ZmanGt2r.js.map
49
+ //# sourceMappingURL=Switch-DJNZbvzy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Switch-ZmanGt2r.js","names":["Switch: React.FC<SwitchThumbProps>"],"sources":["../src/components/commons/toolkit/Switch/styles.ts","../src/components/commons/toolkit/Switch/index.tsx"],"sourcesContent":["// Types\nimport type { SwitchThumbProps } from './types'\n\n// Styles\nimport { styled } from '@hooks/useThemedStyles/types'\nexport function createSwitchThumbStyles({\n checked,\n colorActive,\n colorInactive,\n colorIndicator\n}: SwitchThumbProps) {\n return styled({\n container: {\n width: '2.5rem',\n height: '1.25rem',\n\n position: 'relative',\n\n display: 'inline-flex',\n alignItems: 'center',\n marginLeft: '0.5rem',\n\n borderRadius: '2rem',\n padding: '0.125rem',\n\n transition: 'background-color 0.5s',\n backgroundColor: checked\n ? (colorActive ?? 'var(--px-color-success)')\n : (colorInactive ?? 'var(--px-color-disabled)')\n },\n\n indicator: {\n height: '1rem',\n width: '1rem',\n\n position: 'absolute',\n left: '0.125rem',\n top: '0.125rem',\n\n borderRadius: '9999px',\n backgroundColor: colorIndicator ?? 'var(--px-surface)',\n\n transition: 'transform 0.5s',\n transform: checked ? 'translateX(1.25rem)' : 'translateX(0)',\n willChange: 'transform'\n }\n })\n}\n","// External Libraries\nimport type React from 'react'\n\n// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Types\nimport type { SwitchThumbProps } from './types'\n\n// Styles\nimport { createSwitchThumbStyles } from './styles'\n\nexport const Switch: React.FC<SwitchThumbProps> = props => {\n // Hooks\n const { styles } = useThemedStyles(props, createSwitchThumbStyles, {\n applyCommonProps: true,\n pick: p => [p.checked]\n })\n\n return (\n <span style={styles.container}>\n <span style={styles.indicator} />\n </span>\n )\n}\n"],"mappings":";;;;AAKA,SAAgB,wBAAwB,EACtC,SACA,aACA,eACA,kBACmB;AACnB,QAAO,OAAO;EACZ,WAAW;GACT,OAAO;GACP,QAAQ;GAER,UAAU;GAEV,SAAS;GACT,YAAY;GACZ,YAAY;GAEZ,cAAc;GACd,SAAS;GAET,YAAY;GACZ,iBAAiB,UACZ,eAAe,4BACf,iBAAiB;GACvB;EAED,WAAW;GACT,QAAQ;GACR,OAAO;GAEP,UAAU;GACV,MAAM;GACN,KAAK;GAEL,cAAc;GACd,iBAAiB,kBAAkB;GAEnC,YAAY;GACZ,WAAW,UAAU,wBAAwB;GAC7C,YAAY;GACb;EACF,CAAC;;;;;AClCJ,MAAaA,UAAqC,UAAS;CAEzD,MAAM,EAAE,WAAW,gBAAgB,OAAO,yBAAyB;EACjE,kBAAkB;EAClB,OAAM,MAAK,CAAC,EAAE,QAAQ;EACvB,CAAC;AAEF,QACE,oBAAC;EAAK,OAAO,OAAO;YAClB,oBAAC,UAAK,OAAO,OAAO,YAAa;GAC5B"}
1
+ {"version":3,"file":"Switch-DJNZbvzy.js","names":["Switch: React.FC<SwitchThumbProps>"],"sources":["../src/components/commons/toolkit/Switch/styles.ts","../src/components/commons/toolkit/Switch/index.tsx"],"sourcesContent":["// Types\nimport type { SwitchThumbProps } from './types'\n\n// Styles\nimport { styled } from '@hooks/useThemedStyles/types'\nexport function createSwitchThumbStyles({\n checked,\n colorActive,\n colorInactive,\n colorIndicator\n}: SwitchThumbProps) {\n return styled({\n container: {\n width: '2.5rem',\n height: '1.25rem',\n\n position: 'relative',\n\n display: 'inline-flex',\n alignItems: 'center',\n marginLeft: '0.5rem',\n\n borderRadius: '2rem',\n padding: '0.125rem',\n\n transition: 'background-color 0.5s',\n backgroundColor: checked\n ? (colorActive ?? 'var(--px-color-success)')\n : (colorInactive ?? 'var(--px-color-disabled)')\n },\n\n indicator: {\n height: '1rem',\n width: '1rem',\n\n position: 'absolute',\n left: '0.125rem',\n top: '0.125rem',\n\n borderRadius: '9999px',\n backgroundColor: colorIndicator ?? 'var(--px-surface)',\n\n transition: 'transform 0.5s',\n transform: checked ? 'translateX(1.25rem)' : 'translateX(0)',\n willChange: 'transform'\n }\n })\n}\n","// External Libraries\nimport type React from 'react'\n\n// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Types\nimport type { SwitchThumbProps } from './types'\n\n// Styles\nimport { createSwitchThumbStyles } from './styles'\n\nexport const Switch: React.FC<SwitchThumbProps> = props => {\n // Hooks\n const { styles } = useThemedStyles(props, createSwitchThumbStyles, {\n applyCommonProps: true,\n pick: p => [p.checked]\n })\n\n return (\n <span style={styles.container}>\n <span style={styles.indicator} />\n </span>\n )\n}\n"],"mappings":";;;;AAKA,SAAgB,wBAAwB,EACtC,SACA,aACA,eACA,kBACmB;AACnB,QAAO,OAAO;EACZ,WAAW;GACT,OAAO;GACP,QAAQ;GAER,UAAU;GAEV,SAAS;GACT,YAAY;GACZ,YAAY;GAEZ,cAAc;GACd,SAAS;GAET,YAAY;GACZ,iBAAiB,UACZ,eAAe,4BACf,iBAAiB;GACvB;EAED,WAAW;GACT,QAAQ;GACR,OAAO;GAEP,UAAU;GACV,MAAM;GACN,KAAK;GAEL,cAAc;GACd,iBAAiB,kBAAkB;GAEnC,YAAY;GACZ,WAAW,UAAU,wBAAwB;GAC7C,YAAY;GACb;EACF,CAAC;;;;;AClCJ,MAAaA,UAAqC,UAAS;CAEzD,MAAM,EAAE,WAAW,gBAAgB,OAAO,yBAAyB;EACjE,kBAAkB;EAClB,OAAM,MAAK,CAAC,EAAE,QAAQ;EACvB,CAAC;AAEF,QACE,oBAAC;EAAK,OAAO,OAAO;YAClB,oBAAC,UAAK,OAAO,OAAO,YAAa;GAC5B"}
@@ -1,5 +1,5 @@
1
- import { n as styled, t as useThemedStyles } from "./useThemedStyles-D4si38PM.js";
2
- import { t as Typography } from "./Typography-CHkdzH2K.js";
1
+ import { n as styled, t as useThemedStyles } from "./useThemedStyles-CrarDyWc.js";
2
+ import { t as Typography } from "./Typography-BkFV7BhK.js";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  import { motion } from "framer-motion";
5
5
 
@@ -120,4 +120,4 @@ const TabSwitch = (props) => {
120
120
 
121
121
  //#endregion
122
122
  export { TabSwitch as t };
123
- //# sourceMappingURL=TabSwitch-2WIjQ2Ie.js.map
123
+ //# sourceMappingURL=TabSwitch-DlXdgLPc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TabSwitch-2WIjQ2Ie.js","names":[],"sources":["../src/components/commons/toolkit/TabSwitch/components/TabSwitchItem/styles.ts","../src/components/commons/toolkit/TabSwitch/components/TabSwitchItem/index.tsx","../src/components/commons/toolkit/TabSwitch/styles.ts","../src/components/commons/toolkit/TabSwitch/index.tsx"],"sourcesContent":["// External Libraries\nimport { styled } from '@hooks/useThemedStyles/types'\n\ninterface Params {\n disabled?: boolean\n selected?: boolean\n selectedColor?: string\n variant: 'default' | 'underline'\n}\n\nexport function createTabSwitchItemStyles({\n variant,\n disabled,\n selected,\n selectedColor\n}: Params) {\n const accent = selectedColor ?? 'var(--px-color-primary)'\n\n return styled({\n item: {\n minHeight: '1.25rem',\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 4,\n background: 'transparent',\n border: 0,\n padding: '8px 10px',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n userSelect: 'none',\n whiteSpace: 'nowrap',\n __rules: { '& > p': { zIndex: 1 } }\n },\n\n selectedBg:\n variant === 'default'\n ? {\n position: 'absolute',\n inset: 0,\n borderRadius: 6,\n border: '1px solid var(--px-border-primary)',\n background: selected ? accent : 'transparent'\n }\n : {\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: -2,\n height: 2,\n background: selected ? accent : 'transparent'\n }\n })\n}\n","// External Libraries\nimport { motion } from 'framer-motion'\n\n// Components\nimport { Typography } from '@components/commons/toolkit/Typography'\n\n// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Types\nimport type { SwitchOption } from '../../types'\n\n// Styles\nimport { createTabSwitchItemStyles } from './styles'\n\ntype Props<T> = {\n option: SwitchOption<T>\n selected: boolean\n layoutId?: string\n disabled?: boolean\n selectedColor?: string\n selectedLabelColor?: string\n variant: 'default' | 'underline'\n onClick: (value: T) => void\n}\n\nexport const SwitchItem = <T,>(props: Props<T>) => {\n const { option, disabled, selected, layoutId, onClick } = props\n\n const { styles, classes } = useThemedStyles(\n props,\n createTabSwitchItemStyles,\n {\n pick: p => [p.variant, p.selectedColor, p.selectedLabelColor, p.selected]\n }\n )\n\n const isDisabled = disabled || option.disabled\n\n return (\n <button\n type=\"button\"\n style={styles.item}\n className={classes.item}\n tabIndex={isDisabled ? -1 : 0}\n onClick={() => !isDisabled && onClick(option.value)}\n >\n {selected ? (\n <motion.div\n layoutId={layoutId || 'pixel-tabswitch-selected'}\n style={styles.selectedBg}\n />\n ) : null}\n\n {option.icon ? (\n <span style={{ display: 'inline-flex' }}>{option.icon}</span>\n ) : null}\n\n <Typography variant=\"b1\" fontWeight=\"bold\">\n {option.label}\n </Typography>\n </button>\n )\n}\n","// Types\nimport type { TabSwitchProps } from './types'\nimport { styled } from '@hooks/useThemedStyles/types'\n\nexport function createTabSwitchStyles<T>(props: TabSwitchProps<T>) {\n const { fitContent } = props\n\n return styled({\n container: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n color: 'var(--px-text-primary, #4b5563)',\n width: fitContent ? 'fit-content' : '100%',\n borderBottom: '1px solid var(--px-border-primary, #e5e7eb)',\n gap: 0,\n __rules: { '& svg': { zIndex: 1 } }\n }\n })\n}\n","// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Components\nimport { SwitchItem } from './components/TabSwitchItem'\n\n// Types\nimport type { TabSwitchProps } from './types'\n\n// Styles\nimport { createTabSwitchStyles } from './styles'\n\nexport * from './types'\n\nexport const TabSwitch = <T,>(props: TabSwitchProps<T>) => {\n {\n const {\n options,\n disabled,\n layoutId,\n currentValue,\n variant = 'default',\n onChange\n } = props\n\n const { styles, classes } = useThemedStyles(props, createTabSwitchStyles, {\n pick: p => [p.disabled, p.currentValue],\n override: props.styles,\n applyCommonProps: true\n })\n\n return (\n <div style={styles.container} className={classes.container}>\n {options.map(opt => (\n <SwitchItem\n key={String(opt.value)}\n option={opt}\n variant={variant}\n layoutId={layoutId}\n disabled={disabled}\n selectedColor={props.selectedColor}\n selected={currentValue === opt.value}\n selectedLabelColor={props.selectedLabelColor}\n onClick={onChange}\n />\n ))}\n </div>\n )\n }\n}\n"],"mappings":";;;;;;AAUA,SAAgB,0BAA0B,EACxC,SACA,UACA,UACA,iBACS;CACT,MAAM,SAAS,iBAAiB;AAEhC,QAAO,OAAO;EACZ,MAAM;GACJ,WAAW;GACX,UAAU;GACV,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,KAAK;GACL,YAAY;GACZ,QAAQ;GACR,SAAS;GACT,QAAQ,WAAW,gBAAgB;GACnC,SAAS,WAAW,KAAM;GAC1B,YAAY;GACZ,YAAY;GACZ,SAAS,EAAE,SAAS,EAAE,QAAQ,GAAG,EAAE;GACpC;EAED,YACE,YAAY,YACR;GACE,UAAU;GACV,OAAO;GACP,cAAc;GACd,QAAQ;GACR,YAAY,WAAW,SAAS;GACjC,GACD;GACE,UAAU;GACV,MAAM;GACN,OAAO;GACP,QAAQ;GACR,QAAQ;GACR,YAAY,WAAW,SAAS;GACjC;EACR,CAAC;;;;;AC3BJ,MAAa,cAAkB,UAAoB;CACjD,MAAM,EAAE,QAAQ,UAAU,UAAU,UAAU,YAAY;CAE1D,MAAM,EAAE,QAAQ,YAAY,gBAC1B,OACA,2BACA,EACE,OAAM,MAAK;EAAC,EAAE;EAAS,EAAE;EAAe,EAAE;EAAoB,EAAE;EAAS,EAC1E,CACF;CAED,MAAM,aAAa,YAAY,OAAO;AAEtC,QACE,qBAAC;EACC,MAAK;EACL,OAAO,OAAO;EACd,WAAW,QAAQ;EACnB,UAAU,aAAa,KAAK;EAC5B,eAAe,CAAC,cAAc,QAAQ,OAAO,MAAM;;GAElD,WACC,oBAAC,OAAO;IACN,UAAU,YAAY;IACtB,OAAO,OAAO;KACd,GACA;GAEH,OAAO,OACN,oBAAC;IAAK,OAAO,EAAE,SAAS,eAAe;cAAG,OAAO;KAAY,GAC3D;GAEJ,oBAAC;IAAW,SAAQ;IAAK,YAAW;cACjC,OAAO;KACG;;GACN;;;;;ACzDb,SAAgB,sBAAyB,OAA0B;CACjE,MAAM,EAAE,eAAe;AAEvB,QAAO,OAAO,EACZ,WAAW;EACT,SAAS;EACT,eAAe;EACf,YAAY;EACZ,OAAO;EACP,OAAO,aAAa,gBAAgB;EACpC,cAAc;EACd,KAAK;EACL,SAAS,EAAE,SAAS,EAAE,QAAQ,GAAG,EAAE;EACpC,EACF,CAAC;;;;;ACJJ,MAAa,aAAiB,UAA6B;CACzD;EACE,MAAM,EACJ,SACA,UACA,UACA,cACA,UAAU,WACV,aACE;EAEJ,MAAM,EAAE,QAAQ,YAAY,gBAAgB,OAAO,uBAAuB;GACxE,OAAM,MAAK,CAAC,EAAE,UAAU,EAAE,aAAa;GACvC,UAAU,MAAM;GAChB,kBAAkB;GACnB,CAAC;AAEF,SACE,oBAAC;GAAI,OAAO,OAAO;GAAW,WAAW,QAAQ;aAC9C,QAAQ,KAAI,QACX,oBAAC;IAEC,QAAQ;IACC;IACC;IACA;IACV,eAAe,MAAM;IACrB,UAAU,iBAAiB,IAAI;IAC/B,oBAAoB,MAAM;IAC1B,SAAS;MARJ,OAAO,IAAI,MAAM,CAStB,CACF;IACE"}
1
+ {"version":3,"file":"TabSwitch-DlXdgLPc.js","names":[],"sources":["../src/components/commons/toolkit/TabSwitch/components/TabSwitchItem/styles.ts","../src/components/commons/toolkit/TabSwitch/components/TabSwitchItem/index.tsx","../src/components/commons/toolkit/TabSwitch/styles.ts","../src/components/commons/toolkit/TabSwitch/index.tsx"],"sourcesContent":["// External Libraries\nimport { styled } from '@hooks/useThemedStyles/types'\n\ninterface Params {\n disabled?: boolean\n selected?: boolean\n selectedColor?: string\n variant: 'default' | 'underline'\n}\n\nexport function createTabSwitchItemStyles({\n variant,\n disabled,\n selected,\n selectedColor\n}: Params) {\n const accent = selectedColor ?? 'var(--px-color-primary)'\n\n return styled({\n item: {\n minHeight: '1.25rem',\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 4,\n background: 'transparent',\n border: 0,\n padding: '8px 10px',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n userSelect: 'none',\n whiteSpace: 'nowrap',\n __rules: { '& > p': { zIndex: 1 } }\n },\n\n selectedBg:\n variant === 'default'\n ? {\n position: 'absolute',\n inset: 0,\n borderRadius: 6,\n border: '1px solid var(--px-border-primary)',\n background: selected ? accent : 'transparent'\n }\n : {\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: -2,\n height: 2,\n background: selected ? accent : 'transparent'\n }\n })\n}\n","// External Libraries\nimport { motion } from 'framer-motion'\n\n// Components\nimport { Typography } from '@components/commons/toolkit/Typography'\n\n// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Types\nimport type { SwitchOption } from '../../types'\n\n// Styles\nimport { createTabSwitchItemStyles } from './styles'\n\ntype Props<T> = {\n option: SwitchOption<T>\n selected: boolean\n layoutId?: string\n disabled?: boolean\n selectedColor?: string\n selectedLabelColor?: string\n variant: 'default' | 'underline'\n onClick: (value: T) => void\n}\n\nexport const SwitchItem = <T,>(props: Props<T>) => {\n const { option, disabled, selected, layoutId, onClick } = props\n\n const { styles, classes } = useThemedStyles(\n props,\n createTabSwitchItemStyles,\n {\n pick: p => [p.variant, p.selectedColor, p.selectedLabelColor, p.selected]\n }\n )\n\n const isDisabled = disabled || option.disabled\n\n return (\n <button\n type=\"button\"\n style={styles.item}\n className={classes.item}\n tabIndex={isDisabled ? -1 : 0}\n onClick={() => !isDisabled && onClick(option.value)}\n >\n {selected ? (\n <motion.div\n layoutId={layoutId || 'pixel-tabswitch-selected'}\n style={styles.selectedBg}\n />\n ) : null}\n\n {option.icon ? (\n <span style={{ display: 'inline-flex' }}>{option.icon}</span>\n ) : null}\n\n <Typography variant=\"b1\" fontWeight=\"bold\">\n {option.label}\n </Typography>\n </button>\n )\n}\n","// Types\nimport type { TabSwitchProps } from './types'\nimport { styled } from '@hooks/useThemedStyles/types'\n\nexport function createTabSwitchStyles<T>(props: TabSwitchProps<T>) {\n const { fitContent } = props\n\n return styled({\n container: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n color: 'var(--px-text-primary, #4b5563)',\n width: fitContent ? 'fit-content' : '100%',\n borderBottom: '1px solid var(--px-border-primary, #e5e7eb)',\n gap: 0,\n __rules: { '& svg': { zIndex: 1 } }\n }\n })\n}\n","// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Components\nimport { SwitchItem } from './components/TabSwitchItem'\n\n// Types\nimport type { TabSwitchProps } from './types'\n\n// Styles\nimport { createTabSwitchStyles } from './styles'\n\nexport * from './types'\n\nexport const TabSwitch = <T,>(props: TabSwitchProps<T>) => {\n {\n const {\n options,\n disabled,\n layoutId,\n currentValue,\n variant = 'default',\n onChange\n } = props\n\n const { styles, classes } = useThemedStyles(props, createTabSwitchStyles, {\n pick: p => [p.disabled, p.currentValue],\n override: props.styles,\n applyCommonProps: true\n })\n\n return (\n <div style={styles.container} className={classes.container}>\n {options.map(opt => (\n <SwitchItem\n key={String(opt.value)}\n option={opt}\n variant={variant}\n layoutId={layoutId}\n disabled={disabled}\n selectedColor={props.selectedColor}\n selected={currentValue === opt.value}\n selectedLabelColor={props.selectedLabelColor}\n onClick={onChange}\n />\n ))}\n </div>\n )\n }\n}\n"],"mappings":";;;;;;AAUA,SAAgB,0BAA0B,EACxC,SACA,UACA,UACA,iBACS;CACT,MAAM,SAAS,iBAAiB;AAEhC,QAAO,OAAO;EACZ,MAAM;GACJ,WAAW;GACX,UAAU;GACV,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,KAAK;GACL,YAAY;GACZ,QAAQ;GACR,SAAS;GACT,QAAQ,WAAW,gBAAgB;GACnC,SAAS,WAAW,KAAM;GAC1B,YAAY;GACZ,YAAY;GACZ,SAAS,EAAE,SAAS,EAAE,QAAQ,GAAG,EAAE;GACpC;EAED,YACE,YAAY,YACR;GACE,UAAU;GACV,OAAO;GACP,cAAc;GACd,QAAQ;GACR,YAAY,WAAW,SAAS;GACjC,GACD;GACE,UAAU;GACV,MAAM;GACN,OAAO;GACP,QAAQ;GACR,QAAQ;GACR,YAAY,WAAW,SAAS;GACjC;EACR,CAAC;;;;;AC3BJ,MAAa,cAAkB,UAAoB;CACjD,MAAM,EAAE,QAAQ,UAAU,UAAU,UAAU,YAAY;CAE1D,MAAM,EAAE,QAAQ,YAAY,gBAC1B,OACA,2BACA,EACE,OAAM,MAAK;EAAC,EAAE;EAAS,EAAE;EAAe,EAAE;EAAoB,EAAE;EAAS,EAC1E,CACF;CAED,MAAM,aAAa,YAAY,OAAO;AAEtC,QACE,qBAAC;EACC,MAAK;EACL,OAAO,OAAO;EACd,WAAW,QAAQ;EACnB,UAAU,aAAa,KAAK;EAC5B,eAAe,CAAC,cAAc,QAAQ,OAAO,MAAM;;GAElD,WACC,oBAAC,OAAO;IACN,UAAU,YAAY;IACtB,OAAO,OAAO;KACd,GACA;GAEH,OAAO,OACN,oBAAC;IAAK,OAAO,EAAE,SAAS,eAAe;cAAG,OAAO;KAAY,GAC3D;GAEJ,oBAAC;IAAW,SAAQ;IAAK,YAAW;cACjC,OAAO;KACG;;GACN;;;;;ACzDb,SAAgB,sBAAyB,OAA0B;CACjE,MAAM,EAAE,eAAe;AAEvB,QAAO,OAAO,EACZ,WAAW;EACT,SAAS;EACT,eAAe;EACf,YAAY;EACZ,OAAO;EACP,OAAO,aAAa,gBAAgB;EACpC,cAAc;EACd,KAAK;EACL,SAAS,EAAE,SAAS,EAAE,QAAQ,GAAG,EAAE;EACpC,EACF,CAAC;;;;;ACJJ,MAAa,aAAiB,UAA6B;CACzD;EACE,MAAM,EACJ,SACA,UACA,UACA,cACA,UAAU,WACV,aACE;EAEJ,MAAM,EAAE,QAAQ,YAAY,gBAAgB,OAAO,uBAAuB;GACxE,OAAM,MAAK,CAAC,EAAE,UAAU,EAAE,aAAa;GACvC,UAAU,MAAM;GAChB,kBAAkB;GACnB,CAAC;AAEF,SACE,oBAAC;GAAI,OAAO,OAAO;GAAW,WAAW,QAAQ;aAC9C,QAAQ,KAAI,QACX,oBAAC;IAEC,QAAQ;IACC;IACC;IACA;IACV,eAAe,MAAM;IACrB,UAAU,iBAAiB,IAAI;IAC/B,oBAAoB,MAAM;IAC1B,SAAS;MARJ,OAAO,IAAI,MAAM,CAStB,CACF;IACE"}
@@ -0,0 +1,135 @@
1
+ import { n as styled, t as useThemedStyles } from "./useThemedStyles-CrarDyWc.js";
2
+ import { t as Icon } from "./Icon-KzwFJI_k.js";
3
+ import { t as Typography } from "./Typography-BkFV7BhK.js";
4
+ import { t as Label } from "./Label-BHq2knad.js";
5
+ import { useId } from "react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+
8
+ //#region src/components/commons/inputs/TextArea/styles.ts
9
+ function createTextAreaStyles(props) {
10
+ const { height = "8rem", readOnly, startIcon } = props;
11
+ return styled({
12
+ container: {
13
+ width: "100%",
14
+ display: "flex",
15
+ flexDirection: "column",
16
+ rowGap: "0.375rem"
17
+ },
18
+ iconContainer: {
19
+ position: "absolute",
20
+ left: "0.75rem",
21
+ top: "1.375rem",
22
+ transform: "translateY(-50%)"
23
+ },
24
+ textArea: {
25
+ height,
26
+ width: "100%",
27
+ paddingBlock: "0.75rem",
28
+ paddingInline: "0.875rem",
29
+ borderWidth: 1,
30
+ borderRadius: "0.5rem",
31
+ resize: "none",
32
+ fontWeight: "400",
33
+ fontSize: "1rem",
34
+ color: "var(--px-text-primary)",
35
+ borderColor: props.errorMessage ? "var(--px-color-error)" : "var(--px-border-primary)",
36
+ outlineOffset: "-1px",
37
+ cursor: readOnly ? "default" : void 0,
38
+ paddingLeft: startIcon ? "2.5rem" : void 0,
39
+ __rules: {
40
+ "&::placeholder": {
41
+ fontWeight: 400,
42
+ color: "var(--px-text-secondary)"
43
+ },
44
+ "&:focus-within": {
45
+ outlineOffset: "-1px",
46
+ outline: `2px solid var(${props.errorMessage ? "--px-color-error" : "--px-color-primary"})`
47
+ }
48
+ }
49
+ },
50
+ error: {
51
+ display: "block",
52
+ fontWeight: 400,
53
+ lineHeight: "1rem",
54
+ fontSize: "0.75rem",
55
+ fontFamily: "inherit",
56
+ color: "var(--px-text-error)"
57
+ }
58
+ });
59
+ }
60
+
61
+ //#endregion
62
+ //#region src/components/commons/inputs/TextArea/index.tsx
63
+ const TextArea = (props) => {
64
+ const { value, disabled, readOnly, maxLength, hideMaxLength, textMaxLength, placeholder, errorMessage, label, required, requiredColor, labelConfig, startIcon, iconColor } = props;
65
+ const inputId = useId();
66
+ const { styles, classes } = useThemedStyles(props, createTextAreaStyles, {
67
+ pick: (p) => [
68
+ p.height,
69
+ p.readOnly,
70
+ p.startIcon,
71
+ p.placeholderColor,
72
+ p.focusedRingColor
73
+ ],
74
+ override: props.styles,
75
+ applyCommonProps: true
76
+ });
77
+ function handleChange(e) {
78
+ if (disabled || readOnly) return;
79
+ props.onChange?.(e.target.value);
80
+ }
81
+ function renderLabel() {
82
+ if (!label) return null;
83
+ return /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(Label, {
84
+ label,
85
+ htmlFor: inputId,
86
+ required,
87
+ requiredColor,
88
+ ...labelConfig
89
+ }) });
90
+ }
91
+ return /* @__PURE__ */ jsxs("div", {
92
+ style: styles.container,
93
+ children: [
94
+ renderLabel(),
95
+ /* @__PURE__ */ jsxs("div", {
96
+ style: { position: "relative" },
97
+ children: [startIcon && /* @__PURE__ */ jsx("div", {
98
+ style: styles.iconContainer,
99
+ children: /* @__PURE__ */ jsx(Icon, {
100
+ name: startIcon,
101
+ color: iconColor ? iconColor : "var(--px-text-primary)"
102
+ })
103
+ }), /* @__PURE__ */ jsx("textarea", {
104
+ value,
105
+ disabled,
106
+ readOnly,
107
+ maxLength,
108
+ placeholder,
109
+ style: styles.textArea,
110
+ className: classes.textArea,
111
+ onChange: handleChange
112
+ })]
113
+ }),
114
+ maxLength && !hideMaxLength ? /* @__PURE__ */ jsxs(Typography, {
115
+ variant: "b2",
116
+ styles: { text: { marginLeft: "auto" } },
117
+ children: [
118
+ value?.length,
119
+ "/",
120
+ maxLength,
121
+ " ",
122
+ textMaxLength
123
+ ]
124
+ }) : null,
125
+ errorMessage ? /* @__PURE__ */ jsx("span", {
126
+ style: styles.error,
127
+ children: errorMessage
128
+ }) : null
129
+ ]
130
+ });
131
+ };
132
+
133
+ //#endregion
134
+ export { TextArea as t };
135
+ //# sourceMappingURL=TextArea-Oqw0zh_x.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextArea-Oqw0zh_x.js","names":[],"sources":["../src/components/commons/inputs/TextArea/styles.ts","../src/components/commons/inputs/TextArea/index.tsx"],"sourcesContent":["// Types\nimport { styled } from '@hooks/useThemedStyles/types'\nimport type { TextAreaProps } from './types'\n\nexport function createTextAreaStyles(props: TextAreaProps) {\n const { height = '8rem', readOnly, startIcon } = props\n\n return styled({\n container: {\n width: '100%',\n\n display: 'flex',\n flexDirection: 'column',\n\n rowGap: '0.375rem'\n },\n iconContainer: {\n position: 'absolute',\n left: '0.75rem',\n top: '1.375rem',\n transform: 'translateY(-50%)'\n },\n textArea: {\n height,\n width: '100%',\n paddingBlock: '0.75rem',\n paddingInline: '0.875rem',\n borderWidth: 1,\n borderRadius: '0.5rem',\n resize: 'none',\n\n fontWeight: '400',\n fontSize: '1rem',\n color: 'var(--px-text-primary)',\n\n borderColor: props.errorMessage\n ? 'var(--px-color-error)'\n : 'var(--px-border-primary)',\n outlineOffset: '-1px',\n\n cursor: readOnly ? 'default' : undefined,\n paddingLeft: startIcon ? '2.5rem' : undefined,\n\n __rules: {\n '&::placeholder': {\n fontWeight: 400,\n color: 'var(--px-text-secondary)'\n },\n '&:focus-within': {\n outlineOffset: '-1px',\n outline: `2px solid var(${props.errorMessage ? '--px-color-error' : '--px-color-primary'})`\n }\n }\n },\n error: {\n display: 'block',\n fontWeight: 400,\n lineHeight: '1rem',\n fontSize: '0.75rem',\n fontFamily: 'inherit',\n color: 'var(--px-text-error)'\n }\n })\n}\n","// External Libraries\nimport { useId } from 'react'\n\n// Types\nimport type { TextAreaProps } from './types'\n\n// Components\nimport { Label } from '@components/commons/toolkit/Label'\nimport { Icon } from '@components/commons/toolkit/Icon'\nimport { Typography } from '@components/commons/toolkit/Typography'\n\n// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Styles\nimport { createTextAreaStyles } from './styles'\n\nexport const TextArea = (props: TextAreaProps) => {\n const {\n value,\n disabled,\n readOnly,\n maxLength,\n hideMaxLength,\n textMaxLength,\n placeholder,\n errorMessage,\n\n label,\n required,\n requiredColor,\n labelConfig,\n\n startIcon,\n iconColor\n } = props\n\n // Hooks\n const inputId = useId()\n\n const { styles, classes } = useThemedStyles(props, createTextAreaStyles, {\n pick: p => [\n p.height,\n p.readOnly,\n p.startIcon,\n p.placeholderColor,\n p.focusedRingColor\n ],\n override: props.styles,\n applyCommonProps: true\n })\n\n // Functions\n function handleChange(e: React.ChangeEvent<HTMLTextAreaElement>) {\n if (disabled || readOnly) return\n props.onChange?.(e.target.value)\n }\n\n function renderLabel() {\n if (!label) return null\n\n return (\n <div>\n <Label\n label={label}\n htmlFor={inputId}\n required={required}\n requiredColor={requiredColor}\n {...labelConfig}\n />\n </div>\n )\n }\n\n return (\n <div style={styles.container}>\n {renderLabel()}\n\n <div style={{ position: 'relative' }}>\n {startIcon && (\n <div style={styles.iconContainer}>\n <Icon\n name={startIcon}\n color={iconColor ? iconColor : 'var(--px-text-primary)'}\n />\n </div>\n )}\n\n <textarea\n value={value}\n disabled={disabled}\n readOnly={readOnly}\n maxLength={maxLength}\n placeholder={placeholder}\n style={styles.textArea}\n className={classes.textArea}\n onChange={handleChange}\n />\n </div>\n\n {maxLength && !hideMaxLength ? (\n <Typography variant=\"b2\" styles={{ text: { marginLeft: 'auto' } }}>\n {value?.length}/{maxLength} {textMaxLength}\n </Typography>\n ) : null}\n\n {errorMessage ? <span style={styles.error}>{errorMessage}</span> : null}\n </div>\n )\n}\n"],"mappings":";;;;;;;;AAIA,SAAgB,qBAAqB,OAAsB;CACzD,MAAM,EAAE,SAAS,QAAQ,UAAU,cAAc;AAEjD,QAAO,OAAO;EACZ,WAAW;GACT,OAAO;GAEP,SAAS;GACT,eAAe;GAEf,QAAQ;GACT;EACD,eAAe;GACb,UAAU;GACV,MAAM;GACN,KAAK;GACL,WAAW;GACZ;EACD,UAAU;GACR;GACA,OAAO;GACP,cAAc;GACd,eAAe;GACf,aAAa;GACb,cAAc;GACd,QAAQ;GAER,YAAY;GACZ,UAAU;GACV,OAAO;GAEP,aAAa,MAAM,eACf,0BACA;GACJ,eAAe;GAEf,QAAQ,WAAW,YAAY;GAC/B,aAAa,YAAY,WAAW;GAEpC,SAAS;IACP,kBAAkB;KAChB,YAAY;KACZ,OAAO;KACR;IACD,kBAAkB;KAChB,eAAe;KACf,SAAS,iBAAiB,MAAM,eAAe,qBAAqB,qBAAqB;KAC1F;IACF;GACF;EACD,OAAO;GACL,SAAS;GACT,YAAY;GACZ,YAAY;GACZ,UAAU;GACV,YAAY;GACZ,OAAO;GACR;EACF,CAAC;;;;;AC7CJ,MAAa,YAAY,UAAyB;CAChD,MAAM,EACJ,OACA,UACA,UACA,WACA,eACA,eACA,aACA,cAEA,OACA,UACA,eACA,aAEA,WACA,cACE;CAGJ,MAAM,UAAU,OAAO;CAEvB,MAAM,EAAE,QAAQ,YAAY,gBAAgB,OAAO,sBAAsB;EACvE,OAAM,MAAK;GACT,EAAE;GACF,EAAE;GACF,EAAE;GACF,EAAE;GACF,EAAE;GACH;EACD,UAAU,MAAM;EAChB,kBAAkB;EACnB,CAAC;CAGF,SAAS,aAAa,GAA2C;AAC/D,MAAI,YAAY,SAAU;AAC1B,QAAM,WAAW,EAAE,OAAO,MAAM;;CAGlC,SAAS,cAAc;AACrB,MAAI,CAAC,MAAO,QAAO;AAEnB,SACE,oBAAC,mBACC,oBAAC;GACQ;GACP,SAAS;GACC;GACK;GACf,GAAI;IACJ,GACE;;AAIV,QACE,qBAAC;EAAI,OAAO,OAAO;;GAChB,aAAa;GAEd,qBAAC;IAAI,OAAO,EAAE,UAAU,YAAY;eACjC,aACC,oBAAC;KAAI,OAAO,OAAO;eACjB,oBAAC;MACC,MAAM;MACN,OAAO,YAAY,YAAY;OAC/B;MACE,EAGR,oBAAC;KACQ;KACG;KACA;KACC;KACE;KACb,OAAO,OAAO;KACd,WAAW,QAAQ;KACnB,UAAU;MACV;KACE;GAEL,aAAa,CAAC,gBACb,qBAAC;IAAW,SAAQ;IAAK,QAAQ,EAAE,MAAM,EAAE,YAAY,QAAQ,EAAE;;KAC9D,OAAO;KAAO;KAAE;KAAU;KAAE;;KAClB,GACX;GAEH,eAAe,oBAAC;IAAK,OAAO,OAAO;cAAQ;KAAoB,GAAG;;GAC/D"}
@@ -539,4 +539,4 @@ function useTheme() {
539
539
 
540
540
  //#endregion
541
541
  export { useTheme as n, ThemeProvider as t };
542
- //# sourceMappingURL=ThemeContext-bVaozqut.js.map
542
+ //# sourceMappingURL=ThemeContext-DhXvmWKO.js.map