@purpur/library 9.0.7 → 9.0.9

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 (114) hide show
  1. package/CHANGELOG.json +24 -0
  2. package/CHANGELOG.md +15 -1
  3. package/dist/{autocomplete-6qSqK3SI.js → autocomplete-B_OBQM2h.js} +2 -2
  4. package/dist/{autocomplete-6qSqK3SI.js.map → autocomplete-B_OBQM2h.js.map} +1 -1
  5. package/dist/{autocomplete-B4dZx9zF.mjs → autocomplete-DJ3zbA0m.mjs} +2 -2
  6. package/dist/{autocomplete-B4dZx9zF.mjs.map → autocomplete-DJ3zbA0m.mjs.map} +1 -1
  7. package/dist/autocomplete.cjs.js +1 -1
  8. package/dist/autocomplete.es.js +1 -1
  9. package/dist/button-BxdChrq-.js +2 -0
  10. package/dist/button-BxdChrq-.js.map +1 -0
  11. package/dist/button-D-BBdNhd.mjs +105 -0
  12. package/dist/button-D-BBdNhd.mjs.map +1 -0
  13. package/dist/button.cjs.js +1 -1
  14. package/dist/button.es.js +1 -1
  15. package/dist/{calendar-vALLklKV.mjs → calendar-9p_aA7KY.mjs} +2 -2
  16. package/dist/{calendar-vALLklKV.mjs.map → calendar-9p_aA7KY.mjs.map} +1 -1
  17. package/dist/{calendar-CxkJMONO.js → calendar-BSdvi_DA.js} +2 -2
  18. package/dist/{calendar-CxkJMONO.js.map → calendar-BSdvi_DA.js.map} +1 -1
  19. package/dist/calendar.cjs.js +1 -1
  20. package/dist/calendar.es.js +1 -1
  21. package/dist/components/button/src/button.d.ts +64 -4
  22. package/dist/components/button/src/button.d.ts.map +1 -1
  23. package/dist/{date-field-CTJB8O0e.mjs → date-field-Ch2lM7-P.mjs} +2 -2
  24. package/dist/{date-field-CTJB8O0e.mjs.map → date-field-Ch2lM7-P.mjs.map} +1 -1
  25. package/dist/{date-field-CORqon6B.js → date-field-DTI5mQkg.js} +2 -2
  26. package/dist/{date-field-CORqon6B.js.map → date-field-DTI5mQkg.js.map} +1 -1
  27. package/dist/date-field.cjs.js +1 -1
  28. package/dist/date-field.es.js +1 -1
  29. package/dist/{date-picker-CJcIJ5VL.mjs → date-picker-Bt3IaH23.mjs} +4 -4
  30. package/dist/{date-picker-CJcIJ5VL.mjs.map → date-picker-Bt3IaH23.mjs.map} +1 -1
  31. package/dist/{date-picker-Dv3W05Hf.js → date-picker-Dk39IXG5.js} +2 -2
  32. package/dist/{date-picker-Dv3W05Hf.js.map → date-picker-Dk39IXG5.js.map} +1 -1
  33. package/dist/date-picker.cjs.js +1 -1
  34. package/dist/date-picker.es.js +1 -1
  35. package/dist/{drawer-DSFZ61OH.mjs → drawer-B6j8nfAY.mjs} +2 -2
  36. package/dist/{drawer-DSFZ61OH.mjs.map → drawer-B6j8nfAY.mjs.map} +1 -1
  37. package/dist/{drawer-Ce5LNpU2.js → drawer-CJsLdd2x.js} +2 -2
  38. package/dist/{drawer-Ce5LNpU2.js.map → drawer-CJsLdd2x.js.map} +1 -1
  39. package/dist/drawer.cjs.js +1 -1
  40. package/dist/drawer.es.js +1 -1
  41. package/dist/{hero-banner-CkSSlxTW.mjs → hero-banner-B5HKmkXc.mjs} +2 -2
  42. package/dist/{hero-banner-CkSSlxTW.mjs.map → hero-banner-B5HKmkXc.mjs.map} +1 -1
  43. package/dist/{hero-banner-JFaqW20R.js → hero-banner-OnNSuxNT.js} +2 -2
  44. package/dist/{hero-banner-JFaqW20R.js.map → hero-banner-OnNSuxNT.js.map} +1 -1
  45. package/dist/hero-banner.cjs.js +1 -1
  46. package/dist/hero-banner.es.js +1 -1
  47. package/dist/library.cjs.js +1 -1
  48. package/dist/library.es.js +17 -17
  49. package/dist/{modal-2ymCXTup.mjs → modal-B1eJu9HN.mjs} +2 -2
  50. package/dist/{modal-2ymCXTup.mjs.map → modal-B1eJu9HN.mjs.map} +1 -1
  51. package/dist/{modal-CXi2xez5.js → modal-CQiJ98iI.js} +2 -2
  52. package/dist/{modal-CXi2xez5.js.map → modal-CQiJ98iI.js.map} +1 -1
  53. package/dist/modal.cjs.js +1 -1
  54. package/dist/modal.es.js +1 -1
  55. package/dist/{notification-BFSOuDp8.mjs → notification-BtcM7Ndu.mjs} +2 -2
  56. package/dist/{notification-BFSOuDp8.mjs.map → notification-BtcM7Ndu.mjs.map} +1 -1
  57. package/dist/{notification-DdnI2rOh.js → notification-Dsg3Vzfi.js} +2 -2
  58. package/dist/{notification-DdnI2rOh.js.map → notification-Dsg3Vzfi.js.map} +1 -1
  59. package/dist/{notification-banner-CT4ew8IQ.js → notification-banner-B0CUuKZn.js} +2 -2
  60. package/dist/{notification-banner-CT4ew8IQ.js.map → notification-banner-B0CUuKZn.js.map} +1 -1
  61. package/dist/{notification-banner-CQvBezAL.mjs → notification-banner-CbKcE7o4.mjs} +2 -2
  62. package/dist/{notification-banner-CQvBezAL.mjs.map → notification-banner-CbKcE7o4.mjs.map} +1 -1
  63. package/dist/notification-banner.cjs.js +1 -1
  64. package/dist/notification-banner.es.js +1 -1
  65. package/dist/notification.cjs.js +1 -1
  66. package/dist/notification.es.js +1 -1
  67. package/dist/{popover-ZeQKmyEb.mjs → popover-D3b2gHm-.mjs} +2 -2
  68. package/dist/{popover-ZeQKmyEb.mjs.map → popover-D3b2gHm-.mjs.map} +1 -1
  69. package/dist/{popover-D3qWbbU4.js → popover-D6k4-oO1.js} +2 -2
  70. package/dist/{popover-D3qWbbU4.js.map → popover-D6k4-oO1.js.map} +1 -1
  71. package/dist/popover.cjs.js +1 -1
  72. package/dist/popover.es.js +1 -1
  73. package/dist/purpur.css +1 -1
  74. package/dist/{quantity-selector-CjSAaj7d.js → quantity-selector-Bc-4Dnpc.js} +2 -2
  75. package/dist/{quantity-selector-CjSAaj7d.js.map → quantity-selector-Bc-4Dnpc.js.map} +1 -1
  76. package/dist/{quantity-selector-HvyYSKah.mjs → quantity-selector-Djf8APeL.mjs} +3 -3
  77. package/dist/{quantity-selector-HvyYSKah.mjs.map → quantity-selector-Djf8APeL.mjs.map} +1 -1
  78. package/dist/quantity-selector.cjs.js +1 -1
  79. package/dist/quantity-selector.es.js +1 -1
  80. package/dist/{search-field-CanOlkIY.js → search-field-0CBoxcNH.js} +2 -2
  81. package/dist/{search-field-CanOlkIY.js.map → search-field-0CBoxcNH.js.map} +1 -1
  82. package/dist/{search-field-BOmCVr5b.mjs → search-field-aP_i6Nr0.mjs} +3 -3
  83. package/dist/{search-field-BOmCVr5b.mjs.map → search-field-aP_i6Nr0.mjs.map} +1 -1
  84. package/dist/search-field.cjs.js +1 -1
  85. package/dist/search-field.es.js +1 -1
  86. package/dist/{stepper-DYjJgEHL.js → stepper-BaoOY4Ea.js} +2 -2
  87. package/dist/{stepper-DYjJgEHL.js.map → stepper-BaoOY4Ea.js.map} +1 -1
  88. package/dist/{stepper-D7T0wed7.mjs → stepper-CTdGj87I.mjs} +3 -3
  89. package/dist/{stepper-D7T0wed7.mjs.map → stepper-CTdGj87I.mjs.map} +1 -1
  90. package/dist/stepper.cjs.js +1 -1
  91. package/dist/stepper.es.js +1 -1
  92. package/dist/{table-B4pts_r4.mjs → table-D7qthqj_.mjs} +5 -5
  93. package/dist/{table-B4pts_r4.mjs.map → table-D7qthqj_.mjs.map} +1 -1
  94. package/dist/{table-Bv_BISXV.js → table-TdOPMFoP.js} +2 -2
  95. package/dist/{table-Bv_BISXV.js.map → table-TdOPMFoP.js.map} +1 -1
  96. package/dist/table.cjs.js +1 -1
  97. package/dist/table.es.js +1 -1
  98. package/dist/{text-field-5rIuW8gc.mjs → text-field-9zPmL99g.mjs} +2 -2
  99. package/dist/{text-field-5rIuW8gc.mjs.map → text-field-9zPmL99g.mjs.map} +1 -1
  100. package/dist/{text-field-Xt6T3zjO.js → text-field-CKCwxTJX.js} +2 -2
  101. package/dist/{text-field-Xt6T3zjO.js.map → text-field-CKCwxTJX.js.map} +1 -1
  102. package/dist/text-field.cjs.js +1 -1
  103. package/dist/text-field.es.js +1 -1
  104. package/dist/{tooltip-DkwyNxrQ.mjs → tooltip-BtGtu3ph.mjs} +2 -2
  105. package/dist/{tooltip-DkwyNxrQ.mjs.map → tooltip-BtGtu3ph.mjs.map} +1 -1
  106. package/dist/{tooltip-svlZkXBs.js → tooltip-eUP35j3v.js} +2 -2
  107. package/dist/{tooltip-svlZkXBs.js.map → tooltip-eUP35j3v.js.map} +1 -1
  108. package/dist/tooltip.cjs.js +1 -1
  109. package/dist/tooltip.es.js +1 -1
  110. package/package.json +20 -20
  111. package/dist/button-BfYKNBmC.mjs +0 -102
  112. package/dist/button-BfYKNBmC.mjs.map +0 -1
  113. package/dist/button-DDYGuqZ0.js +0 -2
  114. package/dist/button-DDYGuqZ0.js.map +0 -1
@@ -1,2 +1,2 @@
1
- "use strict";const n=require("react/jsx-runtime"),_=require("react"),X=require("./spinner-tKunS_o-.js"),J=require("./text-field-Xt6T3zjO.js"),C=require("./bind-DeUYJ6m9.js"),K=require("./button-DDYGuqZ0.js"),V=require("./icon-DNHpBTHs-faYHqTXU.js"),L={"purpur-quantity-selector":"_purpur-quantity-selector_pun3b_1","purpur-quantity-selector--full-width":"_purpur-quantity-selector--full-width_pun3b_25","purpur-quantity-selector--loading":"_purpur-quantity-selector--loading_pun3b_31","purpur-quantity-selector--no-gap":"_purpur-quantity-selector--no-gap_pun3b_34","purpur-quantity-selector--no-gap-disabled-left":"_purpur-quantity-selector--no-gap-disabled-left_pun3b_39","purpur-quantity-selector--no-gap-disabled-right":"_purpur-quantity-selector--no-gap-disabled-right_pun3b_43","purpur-quantity-selector--no-gap-disabled":"_purpur-quantity-selector--no-gap-disabled_pun3b_39","purpur-quantity-selector__spinner":"_purpur-quantity-selector__spinner_pun3b_50","purpur-quantity-selector__spinner--full-width":"_purpur-quantity-selector__spinner--full-width_pun3b_57","purpur-quantity-selector__spinner--separated":"_purpur-quantity-selector__spinner--separated_pun3b_61"},Y={name:"minus",svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path fill-rule="evenodd" d="M4.1 12a.9.9 0 0 1 .9-.9h14a.9.9 0 1 1 0 1.8H5a.9.9 0 0 1-.9-.9Z" clip-rule="evenodd"/></svg>',keywords:["minus"],category:"utility"},D=u=>n.jsx(V.b,{...u,svg:Y});D.displayName="IconMinus";const G={name:"plus",svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path fill-rule="evenodd" d="M12 4.1a.9.9 0 0 1 .9.9v6.1H19a.9.9 0 1 1 0 1.8h-6.1V19a.9.9 0 0 1-1.8 0v-6.1H5a.9.9 0 0 1 0-1.8h6.1V5a.9.9 0 0 1 .9-.9Z" clip-rule="evenodd"/></svg>',keywords:["plus"],category:"utility"},F=u=>n.jsx(V.b,{...u,svg:G});F.displayName="IconPlus";const W={"purpur-quantity-selector-button":"_purpur-quantity-selector-button_qjlbs_1","purpur-quantity-selector-button--gap-left":"_purpur-quantity-selector-button--gap-left_qjlbs_4","purpur-quantity-selector-button--gap-right":"_purpur-quantity-selector-button--gap-right_qjlbs_7","purpur-quantity-selector-button--no-gap-right":"_purpur-quantity-selector-button--no-gap-right_qjlbs_10","purpur-quantity-selector-button--no-gap-left":"_purpur-quantity-selector-button--no-gap-left_qjlbs_13"},T=C.c.bind(W),b="purpur-quantity-selector-button",tt=({["data-testid"]:u,disabled:m,hasGap:e,variant:f,buttonType:r,onClick:o})=>{const h=T(b,{[`${b}--gap-left`]:e&&r==="decrement",[`${b}--gap-right`]:e&&r==="increment",[`${b}--no-gap-left`]:!e&&r==="decrement",[`${b}--no-gap-right`]:!e&&r==="increment"});return n.jsx(K.Button,{"data-testid":u,className:h,size:"sm",type:"submit",variant:f,onClick:()=>o(r),iconOnly:!0,disabled:m,tabIndex:-1,children:r==="increment"?n.jsx(F,{size:"xs"}):n.jsx(D,{size:"xs"})})},B=C.c.bind(L),et=["attached","separated"],nt=["primary","secondary"],s="purpur-quantity-selector",R=_.forwardRef(({["data-testid"]:u,className:m,variant:e,buttonVariant:f,onChange:r,value:o,defaultValue:h,fullWidth:x,disabled:k,loading:v,minValue:E,maxValue:H,ariaLabelDecrement:M,ariaLabelIncrement:z,...Q},I)=>{const[O,$]=_.useState(h??0),[w,j]=_.useState(O),a=o!==void 0,l=a?o:w,S=t=>u?`${u}-${t}`:void 0,i=k||v,g=Math.max(E??0,0),q=H??Number.MAX_SAFE_INTEGER,p=l===q,d=l===g;_.useEffect(()=>{a&&$(o)},[o,a]),_.useEffect(()=>{if(!a){const t=setTimeout(()=>{$(w)},300);return()=>clearTimeout(t)}},[w,a,r]);const A=B(m,s,{[`${s}--no-gap`]:e==="attached"&&!i&&!d&&!p,[`${s}--no-gap-disabled-left`]:e==="attached"&&!i&&!p&&d,[`${s}--no-gap-disabled-right`]:e==="attached"&&!i&&!d&&p,[`${s}--no-gap-disabled`]:e==="attached"&&(i||p&&d),[`${s}--full-width`]:x,[`${s}--loading`]:v}),Z=t=>{if(!/^[0-9]*$/.test(t.target.value))return;const y=+t.target.value;y<g||y>q||(a||j(y),r(y))},P=t=>{const c=t==="increment"?l+1:l-1;c<0||(a||j(c),r(c))},N=t=>{const c=t==="increment"&&p||t==="decrement"&&d;return n.jsx(tt,{"data-testid":S("button-"+t),variant:f,buttonType:t,hasGap:e==="separated",onClick:P,disabled:i||c,"aria-label":t==="increment"?z:M})},U=n.jsxs(n.Fragment,{children:[v&&n.jsx("div",{className:B(`${s}__spinner`,{[`${s}__spinner--full-width`]:x,[`${s}__spinner--separated`]:!x&&e==="separated"}),children:n.jsx(X.Spinner,{disabled:i,size:"xs","data-testid":S("spinner")},"spinner")}),N("decrement")]});return n.jsx(J.TextField,{value:l,type:"number",ref:I,className:A,"data-testid":u,onChange:Z,beforeField:U,afterField:N("increment"),disabled:i,min:g,max:q,role:"spinbutton","aria-valuenow":l,"aria-valuemax":q,"aria-valuemin":g,...Q})});R.displayName="QuantitySelector";exports.QuantitySelector=R;exports.quantitySelectorButtonVariants=nt;exports.quantitySelectorVariants=et;
2
- //# sourceMappingURL=quantity-selector-CjSAaj7d.js.map
1
+ "use strict";const n=require("react/jsx-runtime"),_=require("react"),X=require("./spinner-tKunS_o-.js"),J=require("./text-field-CKCwxTJX.js"),C=require("./bind-DeUYJ6m9.js"),K=require("./button-BxdChrq-.js"),V=require("./icon-DNHpBTHs-faYHqTXU.js"),L={"purpur-quantity-selector":"_purpur-quantity-selector_pun3b_1","purpur-quantity-selector--full-width":"_purpur-quantity-selector--full-width_pun3b_25","purpur-quantity-selector--loading":"_purpur-quantity-selector--loading_pun3b_31","purpur-quantity-selector--no-gap":"_purpur-quantity-selector--no-gap_pun3b_34","purpur-quantity-selector--no-gap-disabled-left":"_purpur-quantity-selector--no-gap-disabled-left_pun3b_39","purpur-quantity-selector--no-gap-disabled-right":"_purpur-quantity-selector--no-gap-disabled-right_pun3b_43","purpur-quantity-selector--no-gap-disabled":"_purpur-quantity-selector--no-gap-disabled_pun3b_39","purpur-quantity-selector__spinner":"_purpur-quantity-selector__spinner_pun3b_50","purpur-quantity-selector__spinner--full-width":"_purpur-quantity-selector__spinner--full-width_pun3b_57","purpur-quantity-selector__spinner--separated":"_purpur-quantity-selector__spinner--separated_pun3b_61"},Y={name:"minus",svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path fill-rule="evenodd" d="M4.1 12a.9.9 0 0 1 .9-.9h14a.9.9 0 1 1 0 1.8H5a.9.9 0 0 1-.9-.9Z" clip-rule="evenodd"/></svg>',keywords:["minus"],category:"utility"},D=u=>n.jsx(V.b,{...u,svg:Y});D.displayName="IconMinus";const G={name:"plus",svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path fill-rule="evenodd" d="M12 4.1a.9.9 0 0 1 .9.9v6.1H19a.9.9 0 1 1 0 1.8h-6.1V19a.9.9 0 0 1-1.8 0v-6.1H5a.9.9 0 0 1 0-1.8h6.1V5a.9.9 0 0 1 .9-.9Z" clip-rule="evenodd"/></svg>',keywords:["plus"],category:"utility"},F=u=>n.jsx(V.b,{...u,svg:G});F.displayName="IconPlus";const W={"purpur-quantity-selector-button":"_purpur-quantity-selector-button_qjlbs_1","purpur-quantity-selector-button--gap-left":"_purpur-quantity-selector-button--gap-left_qjlbs_4","purpur-quantity-selector-button--gap-right":"_purpur-quantity-selector-button--gap-right_qjlbs_7","purpur-quantity-selector-button--no-gap-right":"_purpur-quantity-selector-button--no-gap-right_qjlbs_10","purpur-quantity-selector-button--no-gap-left":"_purpur-quantity-selector-button--no-gap-left_qjlbs_13"},T=C.c.bind(W),b="purpur-quantity-selector-button",tt=({["data-testid"]:u,disabled:m,hasGap:e,variant:f,buttonType:r,onClick:o})=>{const h=T(b,{[`${b}--gap-left`]:e&&r==="decrement",[`${b}--gap-right`]:e&&r==="increment",[`${b}--no-gap-left`]:!e&&r==="decrement",[`${b}--no-gap-right`]:!e&&r==="increment"});return n.jsx(K.Button,{"data-testid":u,className:h,size:"sm",type:"submit",variant:f,onClick:()=>o(r),iconOnly:!0,disabled:m,tabIndex:-1,children:r==="increment"?n.jsx(F,{size:"xs"}):n.jsx(D,{size:"xs"})})},B=C.c.bind(L),et=["attached","separated"],nt=["primary","secondary"],s="purpur-quantity-selector",R=_.forwardRef(({["data-testid"]:u,className:m,variant:e,buttonVariant:f,onChange:r,value:o,defaultValue:h,fullWidth:x,disabled:k,loading:v,minValue:E,maxValue:H,ariaLabelDecrement:M,ariaLabelIncrement:z,...Q},I)=>{const[O,$]=_.useState(h??0),[w,j]=_.useState(O),a=o!==void 0,l=a?o:w,S=t=>u?`${u}-${t}`:void 0,i=k||v,g=Math.max(E??0,0),q=H??Number.MAX_SAFE_INTEGER,p=l===q,d=l===g;_.useEffect(()=>{a&&$(o)},[o,a]),_.useEffect(()=>{if(!a){const t=setTimeout(()=>{$(w)},300);return()=>clearTimeout(t)}},[w,a,r]);const A=B(m,s,{[`${s}--no-gap`]:e==="attached"&&!i&&!d&&!p,[`${s}--no-gap-disabled-left`]:e==="attached"&&!i&&!p&&d,[`${s}--no-gap-disabled-right`]:e==="attached"&&!i&&!d&&p,[`${s}--no-gap-disabled`]:e==="attached"&&(i||p&&d),[`${s}--full-width`]:x,[`${s}--loading`]:v}),Z=t=>{if(!/^[0-9]*$/.test(t.target.value))return;const y=+t.target.value;y<g||y>q||(a||j(y),r(y))},P=t=>{const c=t==="increment"?l+1:l-1;c<0||(a||j(c),r(c))},N=t=>{const c=t==="increment"&&p||t==="decrement"&&d;return n.jsx(tt,{"data-testid":S("button-"+t),variant:f,buttonType:t,hasGap:e==="separated",onClick:P,disabled:i||c,"aria-label":t==="increment"?z:M})},U=n.jsxs(n.Fragment,{children:[v&&n.jsx("div",{className:B(`${s}__spinner`,{[`${s}__spinner--full-width`]:x,[`${s}__spinner--separated`]:!x&&e==="separated"}),children:n.jsx(X.Spinner,{disabled:i,size:"xs","data-testid":S("spinner")},"spinner")}),N("decrement")]});return n.jsx(J.TextField,{value:l,type:"number",ref:I,className:A,"data-testid":u,onChange:Z,beforeField:U,afterField:N("increment"),disabled:i,min:g,max:q,role:"spinbutton","aria-valuenow":l,"aria-valuemax":q,"aria-valuemin":g,...Q})});R.displayName="QuantitySelector";exports.QuantitySelector=R;exports.quantitySelectorButtonVariants=nt;exports.quantitySelectorVariants=et;
2
+ //# sourceMappingURL=quantity-selector-Bc-4Dnpc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"quantity-selector-CjSAaj7d.js","sources":["../../../components/icon/dist/components/minus.es.js","../../../components/icon/dist/components/plus.es.js","../../../components/quantity-selector/src/quantity-selector-button.tsx","../../../components/quantity-selector/src/quantity-selector.tsx"],"sourcesContent":["import { jsx as s } from \"react/jsx-runtime\";\nimport { I as n } from \"../icon-DNHpBTHs.mjs\";\nconst i = {\n name: \"minus\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M4.1 12a.9.9 0 0 1 .9-.9h14a.9.9 0 1 1 0 1.8H5a.9.9 0 0 1-.9-.9Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"minus\"],\n category: \"utility\"\n}, e = (o) => /* @__PURE__ */ s(n, { ...o, svg: i });\ne.displayName = \"IconMinus\";\nexport {\n e as IconMinus\n};\n//# sourceMappingURL=minus.es.js.map\n","import { jsx as s } from \"react/jsx-runtime\";\nimport { I as l } from \"../icon-DNHpBTHs.mjs\";\nconst e = {\n name: \"plus\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M12 4.1a.9.9 0 0 1 .9.9v6.1H19a.9.9 0 1 1 0 1.8h-6.1V19a.9.9 0 0 1-1.8 0v-6.1H5a.9.9 0 0 1 0-1.8h6.1V5a.9.9 0 0 1 .9-.9Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"plus\"],\n category: \"utility\"\n}, r = (o) => /* @__PURE__ */ s(l, { ...o, svg: e });\nr.displayName = \"IconPlus\";\nexport {\n r as IconPlus\n};\n//# sourceMappingURL=plus.es.js.map\n","import React from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { IconMinus } from \"@purpur/icon/minus\";\nimport { IconPlus } from \"@purpur/icon/plus\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./quantity-selector-button.module.scss\";\n\ntype variant = \"primary\" | \"secondary\";\ntype buttonType = \"increment\" | \"decrement\";\n\ntype QuantitySelectorButtonProps = {\n [\"data-testid\"]?: string;\n disabled?: boolean;\n hasGap: boolean;\n variant: variant;\n buttonType: buttonType;\n onClick: (buttonType: buttonType) => void;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-quantity-selector-button\";\n\nexport const QuantitySelectorButton = ({\n [\"data-testid\"]: dataTestid,\n disabled,\n hasGap,\n variant,\n buttonType,\n onClick,\n}: QuantitySelectorButtonProps) => {\n const classes = cx(rootClassName, {\n [`${rootClassName}--gap-left`]: hasGap && buttonType === \"decrement\",\n [`${rootClassName}--gap-right`]: hasGap && buttonType === \"increment\",\n [`${rootClassName}--no-gap-left`]: !hasGap && buttonType === \"decrement\",\n [`${rootClassName}--no-gap-right`]: !hasGap && buttonType === \"increment\",\n });\n\n return (\n <Button\n data-testid={dataTestid}\n className={classes}\n size=\"sm\"\n type=\"submit\"\n variant={variant}\n onClick={() => onClick(buttonType)}\n iconOnly={true}\n disabled={disabled}\n tabIndex={-1}\n >\n {buttonType === \"increment\" ? <IconPlus size=\"xs\" /> : <IconMinus size=\"xs\" />}\n </Button>\n );\n};\n","import React, { type ChangeEvent, forwardRef, useEffect, useState } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Spinner } from \"@purpur/spinner\";\nimport { TextField } from \"@purpur/text-field\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./quantity-selector.module.scss\";\nimport { QuantitySelectorButton } from \"./quantity-selector-button\";\n\nconst cx = c.bind(styles);\n\nexport const quantitySelectorVariants = [\"attached\", \"separated\"] as const;\nexport const quantitySelectorButtonVariants = [\"primary\", \"secondary\"] as const;\n\ntype Variant = (typeof quantitySelectorVariants)[number];\ntype ButtonVariant = (typeof quantitySelectorButtonVariants)[number];\n\nexport type QuantitySelectorProps = Omit<BaseProps<\"input\">, \"onChange\" | \"type\"> & {\n variant: Variant;\n buttonVariant: ButtonVariant;\n onChange: (value: number) => void;\n defaultValue?: number;\n ariaLabelIncrement?: string;\n ariaLabelDecrement?: string;\n /**\n * Used when the component is controlled\n */\n value?: number;\n minValue?: number;\n maxValue?: number;\n label?: string;\n errorText?: string;\n fullWidth?: boolean;\n disabled?: boolean;\n loading?: boolean;\n};\n\nconst rootClassName = \"purpur-quantity-selector\";\n\nexport const QuantitySelector = forwardRef<HTMLInputElement, QuantitySelectorProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n className,\n variant,\n buttonVariant,\n onChange,\n value: controlledValue,\n defaultValue,\n fullWidth,\n disabled,\n loading,\n minValue,\n maxValue,\n ariaLabelDecrement,\n ariaLabelIncrement,\n ...props\n },\n ref\n ) => {\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue ?? 0);\n const [debouncedValue, setDebouncedValue] = useState(uncontrolledValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : debouncedValue;\n\n const getTestId = (name: string) => (dataTestId ? `${dataTestId}-${name}` : undefined);\n const isDisabled = disabled || loading;\n const min = Math.max(minValue ?? 0, 0);\n const max = maxValue ?? Number.MAX_SAFE_INTEGER;\n const incrementDisabled = value === max;\n const decrementDisabled = value === min;\n\n useEffect(() => {\n if (isControlled) {\n setUncontrolledValue(controlledValue);\n }\n }, [controlledValue, isControlled]);\n\n useEffect(() => {\n if (!isControlled) {\n const timer = setTimeout(() => {\n setUncontrolledValue(debouncedValue);\n }, 300);\n\n return () => clearTimeout(timer);\n }\n return;\n }, [debouncedValue, isControlled, onChange]);\n\n const classes = cx(className, rootClassName, {\n [`${rootClassName}--no-gap`]:\n variant === \"attached\" && !isDisabled && !decrementDisabled && !incrementDisabled,\n [`${rootClassName}--no-gap-disabled-left`]:\n variant === \"attached\" && !isDisabled && !incrementDisabled && decrementDisabled,\n [`${rootClassName}--no-gap-disabled-right`]:\n variant === \"attached\" && !isDisabled && !decrementDisabled && incrementDisabled,\n [`${rootClassName}--no-gap-disabled`]:\n variant === \"attached\" && (isDisabled || (incrementDisabled && decrementDisabled)),\n [`${rootClassName}--full-width`]: fullWidth,\n [`${rootClassName}--loading`]: loading,\n });\n\n const handleOnChange = (e: ChangeEvent<HTMLInputElement>) => {\n const numericRegex = /^[0-9]*$/;\n if (!numericRegex.test(e.target.value)) {\n return;\n }\n const val = +e.target.value;\n if (val < min || val > max) {\n return;\n }\n\n if (!isControlled) {\n setDebouncedValue(val);\n }\n onChange(val);\n };\n\n const handleOnClick = (adjustmentType: \"increment\" | \"decrement\") => {\n const adjustedValue = adjustmentType === \"increment\" ? value + 1 : value - 1;\n if (adjustedValue < 0) {\n return;\n }\n\n if (!isControlled) {\n setDebouncedValue(adjustedValue);\n }\n onChange(adjustedValue);\n };\n\n const adjustmentButton = (adjustmentType: \"increment\" | \"decrement\") => {\n const buttonDisabled =\n (adjustmentType === \"increment\" && incrementDisabled) ||\n (adjustmentType === \"decrement\" && decrementDisabled);\n return (\n <QuantitySelectorButton\n data-testid={getTestId(\"button-\" + adjustmentType)}\n variant={buttonVariant}\n buttonType={adjustmentType}\n hasGap={variant === \"separated\"}\n onClick={handleOnClick}\n disabled={isDisabled || buttonDisabled}\n aria-label={adjustmentType === \"increment\" ? ariaLabelIncrement : ariaLabelDecrement}\n />\n );\n };\n\n const beforeField = (\n <>\n {loading && (\n <div\n className={cx(`${rootClassName}__spinner`, {\n [`${rootClassName}__spinner--full-width`]: fullWidth,\n [`${rootClassName}__spinner--separated`]: !fullWidth && variant === \"separated\",\n })}\n >\n <Spinner\n key=\"spinner\"\n disabled={isDisabled}\n size=\"xs\"\n data-testid={getTestId(\"spinner\")}\n />\n </div>\n )}\n {adjustmentButton(\"decrement\")}\n </>\n );\n\n return (\n <TextField\n value={value}\n type=\"number\"\n ref={ref}\n className={classes}\n data-testid={dataTestId}\n onChange={handleOnChange}\n beforeField={beforeField}\n afterField={adjustmentButton(\"increment\")}\n disabled={isDisabled}\n min={min}\n max={max}\n role=\"spinbutton\"\n aria-valuenow={value}\n aria-valuemax={max}\n aria-valuemin={min}\n {...props}\n />\n );\n }\n);\n\nQuantitySelector.displayName = \"QuantitySelector\";\n"],"names":["i","e","o","s","n","r","l","cx","c","styles","rootClassName","QuantitySelectorButton","dataTestid","disabled","hasGap","variant","buttonType","onClick","classes","jsx","Button","IconPlus","IconMinus","quantitySelectorVariants","quantitySelectorButtonVariants","QuantitySelector","forwardRef","dataTestId","className","buttonVariant","onChange","controlledValue","defaultValue","fullWidth","loading","minValue","maxValue","ariaLabelDecrement","ariaLabelIncrement","props","ref","uncontrolledValue","setUncontrolledValue","useState","debouncedValue","setDebouncedValue","isControlled","value","getTestId","name","isDisabled","min","max","incrementDisabled","decrementDisabled","useEffect","timer","handleOnChange","val","handleOnClick","adjustmentType","adjustedValue","adjustmentButton","buttonDisabled","beforeField","jsxs","Fragment","Spinner","TextField"],"mappings":"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"}
1
+ {"version":3,"file":"quantity-selector-Bc-4Dnpc.js","sources":["../../../components/icon/dist/components/minus.es.js","../../../components/icon/dist/components/plus.es.js","../../../components/quantity-selector/src/quantity-selector-button.tsx","../../../components/quantity-selector/src/quantity-selector.tsx"],"sourcesContent":["import { jsx as s } from \"react/jsx-runtime\";\nimport { I as n } from \"../icon-DNHpBTHs.mjs\";\nconst i = {\n name: \"minus\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M4.1 12a.9.9 0 0 1 .9-.9h14a.9.9 0 1 1 0 1.8H5a.9.9 0 0 1-.9-.9Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"minus\"],\n category: \"utility\"\n}, e = (o) => /* @__PURE__ */ s(n, { ...o, svg: i });\ne.displayName = \"IconMinus\";\nexport {\n e as IconMinus\n};\n//# sourceMappingURL=minus.es.js.map\n","import { jsx as s } from \"react/jsx-runtime\";\nimport { I as l } from \"../icon-DNHpBTHs.mjs\";\nconst e = {\n name: \"plus\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M12 4.1a.9.9 0 0 1 .9.9v6.1H19a.9.9 0 1 1 0 1.8h-6.1V19a.9.9 0 0 1-1.8 0v-6.1H5a.9.9 0 0 1 0-1.8h6.1V5a.9.9 0 0 1 .9-.9Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"plus\"],\n category: \"utility\"\n}, r = (o) => /* @__PURE__ */ s(l, { ...o, svg: e });\nr.displayName = \"IconPlus\";\nexport {\n r as IconPlus\n};\n//# sourceMappingURL=plus.es.js.map\n","import React from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { IconMinus } from \"@purpur/icon/minus\";\nimport { IconPlus } from \"@purpur/icon/plus\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./quantity-selector-button.module.scss\";\n\ntype variant = \"primary\" | \"secondary\";\ntype buttonType = \"increment\" | \"decrement\";\n\ntype QuantitySelectorButtonProps = {\n [\"data-testid\"]?: string;\n disabled?: boolean;\n hasGap: boolean;\n variant: variant;\n buttonType: buttonType;\n onClick: (buttonType: buttonType) => void;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-quantity-selector-button\";\n\nexport const QuantitySelectorButton = ({\n [\"data-testid\"]: dataTestid,\n disabled,\n hasGap,\n variant,\n buttonType,\n onClick,\n}: QuantitySelectorButtonProps) => {\n const classes = cx(rootClassName, {\n [`${rootClassName}--gap-left`]: hasGap && buttonType === \"decrement\",\n [`${rootClassName}--gap-right`]: hasGap && buttonType === \"increment\",\n [`${rootClassName}--no-gap-left`]: !hasGap && buttonType === \"decrement\",\n [`${rootClassName}--no-gap-right`]: !hasGap && buttonType === \"increment\",\n });\n\n return (\n <Button\n data-testid={dataTestid}\n className={classes}\n size=\"sm\"\n type=\"submit\"\n variant={variant}\n onClick={() => onClick(buttonType)}\n iconOnly={true}\n disabled={disabled}\n tabIndex={-1}\n >\n {buttonType === \"increment\" ? <IconPlus size=\"xs\" /> : <IconMinus size=\"xs\" />}\n </Button>\n );\n};\n","import React, { type ChangeEvent, forwardRef, useEffect, useState } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Spinner } from \"@purpur/spinner\";\nimport { TextField } from \"@purpur/text-field\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./quantity-selector.module.scss\";\nimport { QuantitySelectorButton } from \"./quantity-selector-button\";\n\nconst cx = c.bind(styles);\n\nexport const quantitySelectorVariants = [\"attached\", \"separated\"] as const;\nexport const quantitySelectorButtonVariants = [\"primary\", \"secondary\"] as const;\n\ntype Variant = (typeof quantitySelectorVariants)[number];\ntype ButtonVariant = (typeof quantitySelectorButtonVariants)[number];\n\nexport type QuantitySelectorProps = Omit<BaseProps<\"input\">, \"onChange\" | \"type\"> & {\n variant: Variant;\n buttonVariant: ButtonVariant;\n onChange: (value: number) => void;\n defaultValue?: number;\n ariaLabelIncrement?: string;\n ariaLabelDecrement?: string;\n /**\n * Used when the component is controlled\n */\n value?: number;\n minValue?: number;\n maxValue?: number;\n label?: string;\n errorText?: string;\n fullWidth?: boolean;\n disabled?: boolean;\n loading?: boolean;\n};\n\nconst rootClassName = \"purpur-quantity-selector\";\n\nexport const QuantitySelector = forwardRef<HTMLInputElement, QuantitySelectorProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n className,\n variant,\n buttonVariant,\n onChange,\n value: controlledValue,\n defaultValue,\n fullWidth,\n disabled,\n loading,\n minValue,\n maxValue,\n ariaLabelDecrement,\n ariaLabelIncrement,\n ...props\n },\n ref\n ) => {\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue ?? 0);\n const [debouncedValue, setDebouncedValue] = useState(uncontrolledValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : debouncedValue;\n\n const getTestId = (name: string) => (dataTestId ? `${dataTestId}-${name}` : undefined);\n const isDisabled = disabled || loading;\n const min = Math.max(minValue ?? 0, 0);\n const max = maxValue ?? Number.MAX_SAFE_INTEGER;\n const incrementDisabled = value === max;\n const decrementDisabled = value === min;\n\n useEffect(() => {\n if (isControlled) {\n setUncontrolledValue(controlledValue);\n }\n }, [controlledValue, isControlled]);\n\n useEffect(() => {\n if (!isControlled) {\n const timer = setTimeout(() => {\n setUncontrolledValue(debouncedValue);\n }, 300);\n\n return () => clearTimeout(timer);\n }\n return;\n }, [debouncedValue, isControlled, onChange]);\n\n const classes = cx(className, rootClassName, {\n [`${rootClassName}--no-gap`]:\n variant === \"attached\" && !isDisabled && !decrementDisabled && !incrementDisabled,\n [`${rootClassName}--no-gap-disabled-left`]:\n variant === \"attached\" && !isDisabled && !incrementDisabled && decrementDisabled,\n [`${rootClassName}--no-gap-disabled-right`]:\n variant === \"attached\" && !isDisabled && !decrementDisabled && incrementDisabled,\n [`${rootClassName}--no-gap-disabled`]:\n variant === \"attached\" && (isDisabled || (incrementDisabled && decrementDisabled)),\n [`${rootClassName}--full-width`]: fullWidth,\n [`${rootClassName}--loading`]: loading,\n });\n\n const handleOnChange = (e: ChangeEvent<HTMLInputElement>) => {\n const numericRegex = /^[0-9]*$/;\n if (!numericRegex.test(e.target.value)) {\n return;\n }\n const val = +e.target.value;\n if (val < min || val > max) {\n return;\n }\n\n if (!isControlled) {\n setDebouncedValue(val);\n }\n onChange(val);\n };\n\n const handleOnClick = (adjustmentType: \"increment\" | \"decrement\") => {\n const adjustedValue = adjustmentType === \"increment\" ? value + 1 : value - 1;\n if (adjustedValue < 0) {\n return;\n }\n\n if (!isControlled) {\n setDebouncedValue(adjustedValue);\n }\n onChange(adjustedValue);\n };\n\n const adjustmentButton = (adjustmentType: \"increment\" | \"decrement\") => {\n const buttonDisabled =\n (adjustmentType === \"increment\" && incrementDisabled) ||\n (adjustmentType === \"decrement\" && decrementDisabled);\n return (\n <QuantitySelectorButton\n data-testid={getTestId(\"button-\" + adjustmentType)}\n variant={buttonVariant}\n buttonType={adjustmentType}\n hasGap={variant === \"separated\"}\n onClick={handleOnClick}\n disabled={isDisabled || buttonDisabled}\n aria-label={adjustmentType === \"increment\" ? ariaLabelIncrement : ariaLabelDecrement}\n />\n );\n };\n\n const beforeField = (\n <>\n {loading && (\n <div\n className={cx(`${rootClassName}__spinner`, {\n [`${rootClassName}__spinner--full-width`]: fullWidth,\n [`${rootClassName}__spinner--separated`]: !fullWidth && variant === \"separated\",\n })}\n >\n <Spinner\n key=\"spinner\"\n disabled={isDisabled}\n size=\"xs\"\n data-testid={getTestId(\"spinner\")}\n />\n </div>\n )}\n {adjustmentButton(\"decrement\")}\n </>\n );\n\n return (\n <TextField\n value={value}\n type=\"number\"\n ref={ref}\n className={classes}\n data-testid={dataTestId}\n onChange={handleOnChange}\n beforeField={beforeField}\n afterField={adjustmentButton(\"increment\")}\n disabled={isDisabled}\n min={min}\n max={max}\n role=\"spinbutton\"\n aria-valuenow={value}\n aria-valuemax={max}\n aria-valuemin={min}\n {...props}\n />\n );\n }\n);\n\nQuantitySelector.displayName = \"QuantitySelector\";\n"],"names":["i","e","o","s","n","r","l","cx","c","styles","rootClassName","QuantitySelectorButton","dataTestid","disabled","hasGap","variant","buttonType","onClick","classes","jsx","Button","IconPlus","IconMinus","quantitySelectorVariants","quantitySelectorButtonVariants","QuantitySelector","forwardRef","dataTestId","className","buttonVariant","onChange","controlledValue","defaultValue","fullWidth","loading","minValue","maxValue","ariaLabelDecrement","ariaLabelIncrement","props","ref","uncontrolledValue","setUncontrolledValue","useState","debouncedValue","setDebouncedValue","isControlled","value","getTestId","name","isDisabled","min","max","incrementDisabled","decrementDisabled","useEffect","timer","handleOnChange","val","handleOnClick","adjustmentType","adjustedValue","adjustmentButton","buttonDisabled","beforeField","jsxs","Fragment","Spinner","TextField"],"mappings":"spCAEMA,EAAI,CACR,KAAM,QACN,IAAK,6MACL,SAAU,CAAC,OAAO,EAClB,SAAU,SACZ,EAAGC,EAAKC,GAAsBC,MAAEC,EAAAA,EAAG,CAAE,GAAGF,EAAG,IAAKF,EAAG,EACnDC,EAAE,YAAc,YCNhB,MAAMA,EAAI,CACR,KAAM,OACN,IAAK,qQACL,SAAU,CAAC,MAAM,EACjB,SAAU,SACZ,EAAGI,EAAKH,GAAsBC,MAAEG,EAAAA,EAAG,CAAE,GAAGJ,EAAG,IAAKD,EAAG,EACnDI,EAAE,YAAc,wfCYVE,EAAKC,EAAAA,EAAE,KAAKC,CAAM,EAClBC,EAAgB,kCAETC,GAAyB,CAAC,CACrC,CAAC,eAAgBC,EACjB,SAAAC,EACA,OAAAC,EACA,QAAAC,EACA,WAAAC,EACA,QAAAC,CACF,IAAmC,CACjC,MAAMC,EAAUX,EAAGG,EAAe,CAChC,CAAC,GAAGA,CAAa,YAAY,EAAGI,GAAUE,IAAe,YACzD,CAAC,GAAGN,CAAa,aAAa,EAAGI,GAAUE,IAAe,YAC1D,CAAC,GAAGN,CAAa,eAAe,EAAG,CAACI,GAAUE,IAAe,YAC7D,CAAC,GAAGN,CAAa,gBAAgB,EAAG,CAACI,GAAUE,IAAe,WAAA,CAC/D,EAED,OACEG,EAAAA,IAACC,EAAAA,OAAA,CACC,cAAaR,EACb,UAAWM,EACX,KAAK,KACL,KAAK,SACL,QAAAH,EACA,QAAS,IAAME,EAAQD,CAAU,EACjC,SAAU,GACV,SAAAH,EACA,SAAU,GAET,SAAAG,IAAe,YAAcG,EAAAA,IAACE,EAAA,CAAS,KAAK,KAAK,EAAKF,EAAAA,IAACG,EAAA,CAAU,KAAK,IAAA,CAAK,CAAA,CAAA,CAGlF,EC5CMf,EAAKC,EAAAA,EAAE,KAAKC,CAAM,EAEXc,GAA2B,CAAC,WAAY,WAAW,EACnDC,GAAiC,CAAC,UAAW,WAAW,EAyB/Dd,EAAgB,2BAETe,EAAmBC,EAAAA,WAC9B,CACE,CACE,CAAC,eAAgBC,EACjB,UAAAC,EACA,QAAAb,EACA,cAAAc,EACA,SAAAC,EACA,MAAOC,EACP,aAAAC,EACA,UAAAC,EACA,SAAApB,EACA,QAAAqB,EACA,SAAAC,EACA,SAAAC,EACA,mBAAAC,EACA,mBAAAC,EACA,GAAGC,CAAA,EAELC,IACG,CACH,KAAM,CAACC,EAAmBC,CAAoB,EAAIC,EAAAA,SAASX,GAAgB,CAAC,EACtE,CAACY,EAAgBC,CAAiB,EAAIF,EAAAA,SAASF,CAAiB,EAChEK,EAAef,IAAoB,OACnCgB,EAAQD,EAAef,EAAkBa,EAEzCI,EAAaC,GAAkBtB,EAAa,GAAGA,CAAU,IAAIsB,CAAI,GAAK,OACtEC,EAAarC,GAAYqB,EACzBiB,EAAM,KAAK,IAAIhB,GAAY,EAAG,CAAC,EAC/BiB,EAAMhB,GAAY,OAAO,iBACzBiB,EAAoBN,IAAUK,EAC9BE,EAAoBP,IAAUI,EAEpCI,EAAAA,UAAU,IAAM,CACVT,GACFJ,EAAqBX,CAAe,CAExC,EAAG,CAACA,EAAiBe,CAAY,CAAC,EAElCS,EAAAA,UAAU,IAAM,CACd,GAAI,CAACT,EAAc,CACjB,MAAMU,EAAQ,WAAW,IAAM,CAC7Bd,EAAqBE,CAAc,CACrC,EAAG,GAAG,EAEN,MAAO,IAAM,aAAaY,CAAK,CACjC,CAEF,EAAG,CAACZ,EAAgBE,EAAchB,CAAQ,CAAC,EAE3C,MAAMZ,EAAUX,EAAGqB,EAAWlB,EAAe,CAC3C,CAAC,GAAGA,CAAa,UAAU,EACzBK,IAAY,YAAc,CAACmC,GAAc,CAACI,GAAqB,CAACD,EAClE,CAAC,GAAG3C,CAAa,wBAAwB,EACvCK,IAAY,YAAc,CAACmC,GAAc,CAACG,GAAqBC,EACjE,CAAC,GAAG5C,CAAa,yBAAyB,EACxCK,IAAY,YAAc,CAACmC,GAAc,CAACI,GAAqBD,EACjE,CAAC,GAAG3C,CAAa,mBAAmB,EAClCK,IAAY,aAAemC,GAAeG,GAAqBC,GACjE,CAAC,GAAG5C,CAAa,cAAc,EAAGuB,EAClC,CAAC,GAAGvB,CAAa,WAAW,EAAGwB,CAAA,CAChC,EAEKuB,EAAkBxD,GAAqC,CAE3D,GAAI,CADiB,WACH,KAAKA,EAAE,OAAO,KAAK,EACnC,OAEF,MAAMyD,EAAM,CAACzD,EAAE,OAAO,MAClByD,EAAMP,GAAOO,EAAMN,IAIlBN,GACHD,EAAkBa,CAAG,EAEvB5B,EAAS4B,CAAG,EACd,EAEMC,EAAiBC,GAA8C,CACnE,MAAMC,EAAgBD,IAAmB,YAAcb,EAAQ,EAAIA,EAAQ,EACvEc,EAAgB,IAIff,GACHD,EAAkBgB,CAAa,EAEjC/B,EAAS+B,CAAa,EACxB,EAEMC,EAAoBF,GAA8C,CACtE,MAAMG,EACHH,IAAmB,aAAeP,GAClCO,IAAmB,aAAeN,EACrC,OACEnC,EAAAA,IAACR,GAAA,CACC,cAAaqC,EAAU,UAAYY,CAAc,EACjD,QAAS/B,EACT,WAAY+B,EACZ,OAAQ7C,IAAY,YACpB,QAAS4C,EACT,SAAUT,GAAca,EACxB,aAAYH,IAAmB,YAActB,EAAqBD,CAAA,CAAA,CAGxE,EAEM2B,EACJC,EAAAA,KAAAC,EAAAA,SAAA,CACG,SAAA,CAAAhC,GACCf,EAAAA,IAAC,MAAA,CACC,UAAWZ,EAAG,GAAGG,CAAa,YAAa,CACzC,CAAC,GAAGA,CAAa,uBAAuB,EAAGuB,EAC3C,CAAC,GAAGvB,CAAa,sBAAsB,EAAG,CAACuB,GAAalB,IAAY,WAAA,CACrE,EAED,SAAAI,EAAAA,IAACgD,EAAAA,QAAA,CAEC,SAAUjB,EACV,KAAK,KACL,cAAaF,EAAU,SAAS,CAAA,EAH5B,SAAA,CAIN,CAAA,EAGHc,EAAiB,WAAW,CAAA,EAC/B,EAGF,OACE3C,EAAAA,IAACiD,EAAAA,UAAA,CACC,MAAArB,EACA,KAAK,SACL,IAAAP,EACA,UAAWtB,EACX,cAAaS,EACb,SAAU8B,EACV,YAAAO,EACA,WAAYF,EAAiB,WAAW,EACxC,SAAUZ,EACV,IAAAC,EACA,IAAAC,EACA,KAAK,aACL,gBAAeL,EACf,gBAAeK,EACf,gBAAeD,EACd,GAAGZ,CAAA,CAAA,CAGV,CACF,EAEAd,EAAiB,YAAc"}
@@ -1,9 +1,9 @@
1
1
  import { jsx as a, jsxs as X, Fragment as J } from "react/jsx-runtime";
2
2
  import { forwardRef as K, useState as S, useEffect as B } from "react";
3
3
  import { a as L } from "./spinner-DRQN6YdK.mjs";
4
- import { T as Y } from "./text-field-5rIuW8gc.mjs";
4
+ import { T as Y } from "./text-field-9zPmL99g.mjs";
5
5
  import { c as j } from "./bind-CU-R61T-.mjs";
6
- import { b as G } from "./button-BfYKNBmC.mjs";
6
+ import { b as G } from "./button-D-BBdNhd.mjs";
7
7
  import { b as k } from "./icon-DNHpBTHs-JfI8WyiR.mjs";
8
8
  const W = {
9
9
  "purpur-quantity-selector": "_purpur-quantity-selector_pun3b_1",
@@ -173,4 +173,4 @@ export {
173
173
  dt as a,
174
174
  _t as q
175
175
  };
176
- //# sourceMappingURL=quantity-selector-HvyYSKah.mjs.map
176
+ //# sourceMappingURL=quantity-selector-Djf8APeL.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"quantity-selector-HvyYSKah.mjs","sources":["../../../components/icon/dist/components/minus.es.js","../../../components/icon/dist/components/plus.es.js","../../../components/quantity-selector/src/quantity-selector-button.tsx","../../../components/quantity-selector/src/quantity-selector.tsx"],"sourcesContent":["import { jsx as s } from \"react/jsx-runtime\";\nimport { I as n } from \"../icon-DNHpBTHs.mjs\";\nconst i = {\n name: \"minus\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M4.1 12a.9.9 0 0 1 .9-.9h14a.9.9 0 1 1 0 1.8H5a.9.9 0 0 1-.9-.9Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"minus\"],\n category: \"utility\"\n}, e = (o) => /* @__PURE__ */ s(n, { ...o, svg: i });\ne.displayName = \"IconMinus\";\nexport {\n e as IconMinus\n};\n//# sourceMappingURL=minus.es.js.map\n","import { jsx as s } from \"react/jsx-runtime\";\nimport { I as l } from \"../icon-DNHpBTHs.mjs\";\nconst e = {\n name: \"plus\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M12 4.1a.9.9 0 0 1 .9.9v6.1H19a.9.9 0 1 1 0 1.8h-6.1V19a.9.9 0 0 1-1.8 0v-6.1H5a.9.9 0 0 1 0-1.8h6.1V5a.9.9 0 0 1 .9-.9Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"plus\"],\n category: \"utility\"\n}, r = (o) => /* @__PURE__ */ s(l, { ...o, svg: e });\nr.displayName = \"IconPlus\";\nexport {\n r as IconPlus\n};\n//# sourceMappingURL=plus.es.js.map\n","import React from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { IconMinus } from \"@purpur/icon/minus\";\nimport { IconPlus } from \"@purpur/icon/plus\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./quantity-selector-button.module.scss\";\n\ntype variant = \"primary\" | \"secondary\";\ntype buttonType = \"increment\" | \"decrement\";\n\ntype QuantitySelectorButtonProps = {\n [\"data-testid\"]?: string;\n disabled?: boolean;\n hasGap: boolean;\n variant: variant;\n buttonType: buttonType;\n onClick: (buttonType: buttonType) => void;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-quantity-selector-button\";\n\nexport const QuantitySelectorButton = ({\n [\"data-testid\"]: dataTestid,\n disabled,\n hasGap,\n variant,\n buttonType,\n onClick,\n}: QuantitySelectorButtonProps) => {\n const classes = cx(rootClassName, {\n [`${rootClassName}--gap-left`]: hasGap && buttonType === \"decrement\",\n [`${rootClassName}--gap-right`]: hasGap && buttonType === \"increment\",\n [`${rootClassName}--no-gap-left`]: !hasGap && buttonType === \"decrement\",\n [`${rootClassName}--no-gap-right`]: !hasGap && buttonType === \"increment\",\n });\n\n return (\n <Button\n data-testid={dataTestid}\n className={classes}\n size=\"sm\"\n type=\"submit\"\n variant={variant}\n onClick={() => onClick(buttonType)}\n iconOnly={true}\n disabled={disabled}\n tabIndex={-1}\n >\n {buttonType === \"increment\" ? <IconPlus size=\"xs\" /> : <IconMinus size=\"xs\" />}\n </Button>\n );\n};\n","import React, { type ChangeEvent, forwardRef, useEffect, useState } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Spinner } from \"@purpur/spinner\";\nimport { TextField } from \"@purpur/text-field\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./quantity-selector.module.scss\";\nimport { QuantitySelectorButton } from \"./quantity-selector-button\";\n\nconst cx = c.bind(styles);\n\nexport const quantitySelectorVariants = [\"attached\", \"separated\"] as const;\nexport const quantitySelectorButtonVariants = [\"primary\", \"secondary\"] as const;\n\ntype Variant = (typeof quantitySelectorVariants)[number];\ntype ButtonVariant = (typeof quantitySelectorButtonVariants)[number];\n\nexport type QuantitySelectorProps = Omit<BaseProps<\"input\">, \"onChange\" | \"type\"> & {\n variant: Variant;\n buttonVariant: ButtonVariant;\n onChange: (value: number) => void;\n defaultValue?: number;\n ariaLabelIncrement?: string;\n ariaLabelDecrement?: string;\n /**\n * Used when the component is controlled\n */\n value?: number;\n minValue?: number;\n maxValue?: number;\n label?: string;\n errorText?: string;\n fullWidth?: boolean;\n disabled?: boolean;\n loading?: boolean;\n};\n\nconst rootClassName = \"purpur-quantity-selector\";\n\nexport const QuantitySelector = forwardRef<HTMLInputElement, QuantitySelectorProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n className,\n variant,\n buttonVariant,\n onChange,\n value: controlledValue,\n defaultValue,\n fullWidth,\n disabled,\n loading,\n minValue,\n maxValue,\n ariaLabelDecrement,\n ariaLabelIncrement,\n ...props\n },\n ref\n ) => {\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue ?? 0);\n const [debouncedValue, setDebouncedValue] = useState(uncontrolledValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : debouncedValue;\n\n const getTestId = (name: string) => (dataTestId ? `${dataTestId}-${name}` : undefined);\n const isDisabled = disabled || loading;\n const min = Math.max(minValue ?? 0, 0);\n const max = maxValue ?? Number.MAX_SAFE_INTEGER;\n const incrementDisabled = value === max;\n const decrementDisabled = value === min;\n\n useEffect(() => {\n if (isControlled) {\n setUncontrolledValue(controlledValue);\n }\n }, [controlledValue, isControlled]);\n\n useEffect(() => {\n if (!isControlled) {\n const timer = setTimeout(() => {\n setUncontrolledValue(debouncedValue);\n }, 300);\n\n return () => clearTimeout(timer);\n }\n return;\n }, [debouncedValue, isControlled, onChange]);\n\n const classes = cx(className, rootClassName, {\n [`${rootClassName}--no-gap`]:\n variant === \"attached\" && !isDisabled && !decrementDisabled && !incrementDisabled,\n [`${rootClassName}--no-gap-disabled-left`]:\n variant === \"attached\" && !isDisabled && !incrementDisabled && decrementDisabled,\n [`${rootClassName}--no-gap-disabled-right`]:\n variant === \"attached\" && !isDisabled && !decrementDisabled && incrementDisabled,\n [`${rootClassName}--no-gap-disabled`]:\n variant === \"attached\" && (isDisabled || (incrementDisabled && decrementDisabled)),\n [`${rootClassName}--full-width`]: fullWidth,\n [`${rootClassName}--loading`]: loading,\n });\n\n const handleOnChange = (e: ChangeEvent<HTMLInputElement>) => {\n const numericRegex = /^[0-9]*$/;\n if (!numericRegex.test(e.target.value)) {\n return;\n }\n const val = +e.target.value;\n if (val < min || val > max) {\n return;\n }\n\n if (!isControlled) {\n setDebouncedValue(val);\n }\n onChange(val);\n };\n\n const handleOnClick = (adjustmentType: \"increment\" | \"decrement\") => {\n const adjustedValue = adjustmentType === \"increment\" ? value + 1 : value - 1;\n if (adjustedValue < 0) {\n return;\n }\n\n if (!isControlled) {\n setDebouncedValue(adjustedValue);\n }\n onChange(adjustedValue);\n };\n\n const adjustmentButton = (adjustmentType: \"increment\" | \"decrement\") => {\n const buttonDisabled =\n (adjustmentType === \"increment\" && incrementDisabled) ||\n (adjustmentType === \"decrement\" && decrementDisabled);\n return (\n <QuantitySelectorButton\n data-testid={getTestId(\"button-\" + adjustmentType)}\n variant={buttonVariant}\n buttonType={adjustmentType}\n hasGap={variant === \"separated\"}\n onClick={handleOnClick}\n disabled={isDisabled || buttonDisabled}\n aria-label={adjustmentType === \"increment\" ? ariaLabelIncrement : ariaLabelDecrement}\n />\n );\n };\n\n const beforeField = (\n <>\n {loading && (\n <div\n className={cx(`${rootClassName}__spinner`, {\n [`${rootClassName}__spinner--full-width`]: fullWidth,\n [`${rootClassName}__spinner--separated`]: !fullWidth && variant === \"separated\",\n })}\n >\n <Spinner\n key=\"spinner\"\n disabled={isDisabled}\n size=\"xs\"\n data-testid={getTestId(\"spinner\")}\n />\n </div>\n )}\n {adjustmentButton(\"decrement\")}\n </>\n );\n\n return (\n <TextField\n value={value}\n type=\"number\"\n ref={ref}\n className={classes}\n data-testid={dataTestId}\n onChange={handleOnChange}\n beforeField={beforeField}\n afterField={adjustmentButton(\"increment\")}\n disabled={isDisabled}\n min={min}\n max={max}\n role=\"spinbutton\"\n aria-valuenow={value}\n aria-valuemax={max}\n aria-valuemin={min}\n {...props}\n />\n );\n }\n);\n\nQuantitySelector.displayName = \"QuantitySelector\";\n"],"names":["i","e","o","s","n","r","l","cx","c","styles","rootClassName","QuantitySelectorButton","dataTestid","disabled","hasGap","variant","buttonType","onClick","classes","jsx","Button","IconPlus","IconMinus","quantitySelectorVariants","quantitySelectorButtonVariants","QuantitySelector","forwardRef","dataTestId","className","buttonVariant","onChange","controlledValue","defaultValue","fullWidth","loading","minValue","maxValue","ariaLabelDecrement","ariaLabelIncrement","props","ref","uncontrolledValue","setUncontrolledValue","useState","debouncedValue","setDebouncedValue","isControlled","value","getTestId","name","isDisabled","min","max","incrementDisabled","decrementDisabled","useEffect","timer","handleOnChange","val","handleOnClick","adjustmentType","adjustedValue","adjustmentButton","buttonDisabled","beforeField","jsxs","Fragment","Spinner","TextField"],"mappings":"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"}
1
+ {"version":3,"file":"quantity-selector-Djf8APeL.mjs","sources":["../../../components/icon/dist/components/minus.es.js","../../../components/icon/dist/components/plus.es.js","../../../components/quantity-selector/src/quantity-selector-button.tsx","../../../components/quantity-selector/src/quantity-selector.tsx"],"sourcesContent":["import { jsx as s } from \"react/jsx-runtime\";\nimport { I as n } from \"../icon-DNHpBTHs.mjs\";\nconst i = {\n name: \"minus\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M4.1 12a.9.9 0 0 1 .9-.9h14a.9.9 0 1 1 0 1.8H5a.9.9 0 0 1-.9-.9Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"minus\"],\n category: \"utility\"\n}, e = (o) => /* @__PURE__ */ s(n, { ...o, svg: i });\ne.displayName = \"IconMinus\";\nexport {\n e as IconMinus\n};\n//# sourceMappingURL=minus.es.js.map\n","import { jsx as s } from \"react/jsx-runtime\";\nimport { I as l } from \"../icon-DNHpBTHs.mjs\";\nconst e = {\n name: \"plus\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M12 4.1a.9.9 0 0 1 .9.9v6.1H19a.9.9 0 1 1 0 1.8h-6.1V19a.9.9 0 0 1-1.8 0v-6.1H5a.9.9 0 0 1 0-1.8h6.1V5a.9.9 0 0 1 .9-.9Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"plus\"],\n category: \"utility\"\n}, r = (o) => /* @__PURE__ */ s(l, { ...o, svg: e });\nr.displayName = \"IconPlus\";\nexport {\n r as IconPlus\n};\n//# sourceMappingURL=plus.es.js.map\n","import React from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { IconMinus } from \"@purpur/icon/minus\";\nimport { IconPlus } from \"@purpur/icon/plus\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./quantity-selector-button.module.scss\";\n\ntype variant = \"primary\" | \"secondary\";\ntype buttonType = \"increment\" | \"decrement\";\n\ntype QuantitySelectorButtonProps = {\n [\"data-testid\"]?: string;\n disabled?: boolean;\n hasGap: boolean;\n variant: variant;\n buttonType: buttonType;\n onClick: (buttonType: buttonType) => void;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-quantity-selector-button\";\n\nexport const QuantitySelectorButton = ({\n [\"data-testid\"]: dataTestid,\n disabled,\n hasGap,\n variant,\n buttonType,\n onClick,\n}: QuantitySelectorButtonProps) => {\n const classes = cx(rootClassName, {\n [`${rootClassName}--gap-left`]: hasGap && buttonType === \"decrement\",\n [`${rootClassName}--gap-right`]: hasGap && buttonType === \"increment\",\n [`${rootClassName}--no-gap-left`]: !hasGap && buttonType === \"decrement\",\n [`${rootClassName}--no-gap-right`]: !hasGap && buttonType === \"increment\",\n });\n\n return (\n <Button\n data-testid={dataTestid}\n className={classes}\n size=\"sm\"\n type=\"submit\"\n variant={variant}\n onClick={() => onClick(buttonType)}\n iconOnly={true}\n disabled={disabled}\n tabIndex={-1}\n >\n {buttonType === \"increment\" ? <IconPlus size=\"xs\" /> : <IconMinus size=\"xs\" />}\n </Button>\n );\n};\n","import React, { type ChangeEvent, forwardRef, useEffect, useState } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Spinner } from \"@purpur/spinner\";\nimport { TextField } from \"@purpur/text-field\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./quantity-selector.module.scss\";\nimport { QuantitySelectorButton } from \"./quantity-selector-button\";\n\nconst cx = c.bind(styles);\n\nexport const quantitySelectorVariants = [\"attached\", \"separated\"] as const;\nexport const quantitySelectorButtonVariants = [\"primary\", \"secondary\"] as const;\n\ntype Variant = (typeof quantitySelectorVariants)[number];\ntype ButtonVariant = (typeof quantitySelectorButtonVariants)[number];\n\nexport type QuantitySelectorProps = Omit<BaseProps<\"input\">, \"onChange\" | \"type\"> & {\n variant: Variant;\n buttonVariant: ButtonVariant;\n onChange: (value: number) => void;\n defaultValue?: number;\n ariaLabelIncrement?: string;\n ariaLabelDecrement?: string;\n /**\n * Used when the component is controlled\n */\n value?: number;\n minValue?: number;\n maxValue?: number;\n label?: string;\n errorText?: string;\n fullWidth?: boolean;\n disabled?: boolean;\n loading?: boolean;\n};\n\nconst rootClassName = \"purpur-quantity-selector\";\n\nexport const QuantitySelector = forwardRef<HTMLInputElement, QuantitySelectorProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n className,\n variant,\n buttonVariant,\n onChange,\n value: controlledValue,\n defaultValue,\n fullWidth,\n disabled,\n loading,\n minValue,\n maxValue,\n ariaLabelDecrement,\n ariaLabelIncrement,\n ...props\n },\n ref\n ) => {\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue ?? 0);\n const [debouncedValue, setDebouncedValue] = useState(uncontrolledValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : debouncedValue;\n\n const getTestId = (name: string) => (dataTestId ? `${dataTestId}-${name}` : undefined);\n const isDisabled = disabled || loading;\n const min = Math.max(minValue ?? 0, 0);\n const max = maxValue ?? Number.MAX_SAFE_INTEGER;\n const incrementDisabled = value === max;\n const decrementDisabled = value === min;\n\n useEffect(() => {\n if (isControlled) {\n setUncontrolledValue(controlledValue);\n }\n }, [controlledValue, isControlled]);\n\n useEffect(() => {\n if (!isControlled) {\n const timer = setTimeout(() => {\n setUncontrolledValue(debouncedValue);\n }, 300);\n\n return () => clearTimeout(timer);\n }\n return;\n }, [debouncedValue, isControlled, onChange]);\n\n const classes = cx(className, rootClassName, {\n [`${rootClassName}--no-gap`]:\n variant === \"attached\" && !isDisabled && !decrementDisabled && !incrementDisabled,\n [`${rootClassName}--no-gap-disabled-left`]:\n variant === \"attached\" && !isDisabled && !incrementDisabled && decrementDisabled,\n [`${rootClassName}--no-gap-disabled-right`]:\n variant === \"attached\" && !isDisabled && !decrementDisabled && incrementDisabled,\n [`${rootClassName}--no-gap-disabled`]:\n variant === \"attached\" && (isDisabled || (incrementDisabled && decrementDisabled)),\n [`${rootClassName}--full-width`]: fullWidth,\n [`${rootClassName}--loading`]: loading,\n });\n\n const handleOnChange = (e: ChangeEvent<HTMLInputElement>) => {\n const numericRegex = /^[0-9]*$/;\n if (!numericRegex.test(e.target.value)) {\n return;\n }\n const val = +e.target.value;\n if (val < min || val > max) {\n return;\n }\n\n if (!isControlled) {\n setDebouncedValue(val);\n }\n onChange(val);\n };\n\n const handleOnClick = (adjustmentType: \"increment\" | \"decrement\") => {\n const adjustedValue = adjustmentType === \"increment\" ? value + 1 : value - 1;\n if (adjustedValue < 0) {\n return;\n }\n\n if (!isControlled) {\n setDebouncedValue(adjustedValue);\n }\n onChange(adjustedValue);\n };\n\n const adjustmentButton = (adjustmentType: \"increment\" | \"decrement\") => {\n const buttonDisabled =\n (adjustmentType === \"increment\" && incrementDisabled) ||\n (adjustmentType === \"decrement\" && decrementDisabled);\n return (\n <QuantitySelectorButton\n data-testid={getTestId(\"button-\" + adjustmentType)}\n variant={buttonVariant}\n buttonType={adjustmentType}\n hasGap={variant === \"separated\"}\n onClick={handleOnClick}\n disabled={isDisabled || buttonDisabled}\n aria-label={adjustmentType === \"increment\" ? ariaLabelIncrement : ariaLabelDecrement}\n />\n );\n };\n\n const beforeField = (\n <>\n {loading && (\n <div\n className={cx(`${rootClassName}__spinner`, {\n [`${rootClassName}__spinner--full-width`]: fullWidth,\n [`${rootClassName}__spinner--separated`]: !fullWidth && variant === \"separated\",\n })}\n >\n <Spinner\n key=\"spinner\"\n disabled={isDisabled}\n size=\"xs\"\n data-testid={getTestId(\"spinner\")}\n />\n </div>\n )}\n {adjustmentButton(\"decrement\")}\n </>\n );\n\n return (\n <TextField\n value={value}\n type=\"number\"\n ref={ref}\n className={classes}\n data-testid={dataTestId}\n onChange={handleOnChange}\n beforeField={beforeField}\n afterField={adjustmentButton(\"increment\")}\n disabled={isDisabled}\n min={min}\n max={max}\n role=\"spinbutton\"\n aria-valuenow={value}\n aria-valuemax={max}\n aria-valuemin={min}\n {...props}\n />\n );\n }\n);\n\nQuantitySelector.displayName = \"QuantitySelector\";\n"],"names":["i","e","o","s","n","r","l","cx","c","styles","rootClassName","QuantitySelectorButton","dataTestid","disabled","hasGap","variant","buttonType","onClick","classes","jsx","Button","IconPlus","IconMinus","quantitySelectorVariants","quantitySelectorButtonVariants","QuantitySelector","forwardRef","dataTestId","className","buttonVariant","onChange","controlledValue","defaultValue","fullWidth","loading","minValue","maxValue","ariaLabelDecrement","ariaLabelIncrement","props","ref","uncontrolledValue","setUncontrolledValue","useState","debouncedValue","setDebouncedValue","isControlled","value","getTestId","name","isDisabled","min","max","incrementDisabled","decrementDisabled","useEffect","timer","handleOnChange","val","handleOnClick","adjustmentType","adjustedValue","adjustmentButton","buttonDisabled","beforeField","jsxs","Fragment","Spinner","TextField"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./quantity-selector-CjSAaj7d.js");exports.QuantitySelector=t.QuantitySelector;exports.quantitySelectorButtonVariants=t.quantitySelectorButtonVariants;exports.quantitySelectorVariants=t.quantitySelectorVariants;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./quantity-selector-Bc-4Dnpc.js");exports.QuantitySelector=t.QuantitySelector;exports.quantitySelectorButtonVariants=t.quantitySelectorButtonVariants;exports.quantitySelectorVariants=t.quantitySelectorVariants;
2
2
  //# sourceMappingURL=quantity-selector.cjs.js.map
@@ -1,4 +1,4 @@
1
- import { Q as e, q as r, a as n } from "./quantity-selector-HvyYSKah.mjs";
1
+ import { Q as e, q as r, a as n } from "./quantity-selector-Djf8APeL.mjs";
2
2
  export {
3
3
  e as QuantitySelector,
4
4
  r as quantitySelectorButtonVariants,
@@ -1,2 +1,2 @@
1
- "use strict";const e=require("react/jsx-runtime"),j=require("react"),_=require("./search.es-Cg2amJSR.js"),k=require("./text-field-Xt6T3zjO.js"),f=require("./bind-DeUYJ6m9.js"),d=require("./button-DDYGuqZ0.js"),v={"purpur-search-field":"_purpur-search-field_uhpkq_1","purpur-search-field--has-clear-button":"_purpur-search-field--has-clear-button_uhpkq_4","purpur-search-field--no-gap":"_purpur-search-field--no-gap_uhpkq_13","purpur-search-field__wrapper":"_purpur-search-field__wrapper_uhpkq_17","purpur-search-field__wrapper--gap":"_purpur-search-field__wrapper--gap_uhpkq_20","purpur-search-field__search-icon":"_purpur-search-field__search-icon_uhpkq_24","purpur-search-field__close-icon":"_purpur-search-field__close-icon_uhpkq_24"},N={"purpur-search-field-button":"_purpur-search-field-button_c16yo_1","purpur-search-field-button--icon-only":"_purpur-search-field-button--icon-only_c16yo_1"},w=f.c.bind(N),h="purpur-search-field-button",z=({["data-testid"]:s,disabled:i,iconOnly:c,label:r})=>{const a={className:w(h,{[`${h}--icon-only`]:c}),disabled:i,"data-testid":s};return c?e.jsx(d.Button,{...a,"aria-label":r,iconOnly:!0,size:"sm",type:"submit",variant:"primary",children:e.jsx(_.s,{size:"xs"})}):e.jsx(d.Button,{...a,size:"sm",type:"submit",variant:"primary",children:r})},S=["button-attached","no-button"],l=f.c.bind(v),u="purpur-search-field",b=j.forwardRef(({["data-testid"]:s,className:i,clearButtonAriaLabel:c,disabled:r,iconOnlySearchButton:a,onClear:m,onSearch:x,searchButtonLabel:y,variant:o,formRef:q,...t},$)=>{const p=n=>s?`${s}-${n}`:void 0,F=(typeof t.value=="number"?t.value!==void 0:t.value?.length)&&!r&&!t.readOnly&&!t.loading,g=l(i,u,{[`${u}--no-gap`]:o==="button-attached",[`${u}--has-clear-button`]:F});return e.jsx("form",{ref:q,className:l(`${u}__wrapper`),"data-testid":s,onSubmit:n=>{n.preventDefault(),x?.(n)},children:e.jsx(k.TextField,{ref:$,className:g,clearButtonAriaLabel:c,disabled:r,onClear:m,startAdornment:a?null:e.jsx(_.s,{size:"xs",className:l(`${u}__search-icon`)},"1"),afterField:o!=="no-button"?e.jsx(z,{disabled:r,iconOnly:a,label:y,"data-testid":p("button")}):null,"data-testid":p("text-field"),type:"search",...t})})});b.displayName="SearchField";exports.SearchField=b;exports.searchFieldVariants=S;
2
- //# sourceMappingURL=search-field-CanOlkIY.js.map
1
+ "use strict";const e=require("react/jsx-runtime"),j=require("react"),_=require("./search.es-Cg2amJSR.js"),k=require("./text-field-CKCwxTJX.js"),f=require("./bind-DeUYJ6m9.js"),d=require("./button-BxdChrq-.js"),v={"purpur-search-field":"_purpur-search-field_uhpkq_1","purpur-search-field--has-clear-button":"_purpur-search-field--has-clear-button_uhpkq_4","purpur-search-field--no-gap":"_purpur-search-field--no-gap_uhpkq_13","purpur-search-field__wrapper":"_purpur-search-field__wrapper_uhpkq_17","purpur-search-field__wrapper--gap":"_purpur-search-field__wrapper--gap_uhpkq_20","purpur-search-field__search-icon":"_purpur-search-field__search-icon_uhpkq_24","purpur-search-field__close-icon":"_purpur-search-field__close-icon_uhpkq_24"},N={"purpur-search-field-button":"_purpur-search-field-button_c16yo_1","purpur-search-field-button--icon-only":"_purpur-search-field-button--icon-only_c16yo_1"},w=f.c.bind(N),h="purpur-search-field-button",z=({["data-testid"]:s,disabled:i,iconOnly:c,label:r})=>{const a={className:w(h,{[`${h}--icon-only`]:c}),disabled:i,"data-testid":s};return c?e.jsx(d.Button,{...a,"aria-label":r,iconOnly:!0,size:"sm",type:"submit",variant:"primary",children:e.jsx(_.s,{size:"xs"})}):e.jsx(d.Button,{...a,size:"sm",type:"submit",variant:"primary",children:r})},S=["button-attached","no-button"],l=f.c.bind(v),u="purpur-search-field",b=j.forwardRef(({["data-testid"]:s,className:i,clearButtonAriaLabel:c,disabled:r,iconOnlySearchButton:a,onClear:m,onSearch:x,searchButtonLabel:y,variant:o,formRef:q,...t},$)=>{const p=n=>s?`${s}-${n}`:void 0,F=(typeof t.value=="number"?t.value!==void 0:t.value?.length)&&!r&&!t.readOnly&&!t.loading,g=l(i,u,{[`${u}--no-gap`]:o==="button-attached",[`${u}--has-clear-button`]:F});return e.jsx("form",{ref:q,className:l(`${u}__wrapper`),"data-testid":s,onSubmit:n=>{n.preventDefault(),x?.(n)},children:e.jsx(k.TextField,{ref:$,className:g,clearButtonAriaLabel:c,disabled:r,onClear:m,startAdornment:a?null:e.jsx(_.s,{size:"xs",className:l(`${u}__search-icon`)},"1"),afterField:o!=="no-button"?e.jsx(z,{disabled:r,iconOnly:a,label:y,"data-testid":p("button")}):null,"data-testid":p("text-field"),type:"search",...t})})});b.displayName="SearchField";exports.SearchField=b;exports.searchFieldVariants=S;
2
+ //# sourceMappingURL=search-field-0CBoxcNH.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"search-field-CanOlkIY.js","sources":["../../../components/search-field/src/search-field-button.tsx","../../../components/search-field/src/search-field.tsx"],"sourcesContent":["import React from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { IconSearch } from \"@purpur/icon/search\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./search-field-button.module.scss\";\n\ntype Props = {\n [\"data-testid\"]?: string;\n disabled?: boolean;\n iconOnly?: boolean;\n label: string;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-search-field-button\";\n\nexport const SearchFieldButton = ({\n [\"data-testid\"]: dataTestid,\n disabled,\n iconOnly,\n label,\n}: Props) => {\n const props = {\n className: cx(rootClassName, {\n [`${rootClassName}--icon-only`]: iconOnly,\n }),\n disabled,\n [\"data-testid\"]: dataTestid,\n };\n\n if (iconOnly) {\n return (\n <Button {...props} aria-label={label} iconOnly size=\"sm\" type=\"submit\" variant=\"primary\">\n <IconSearch size=\"xs\" />\n </Button>\n );\n }\n\n return (\n <Button {...props} size=\"sm\" type=\"submit\" variant=\"primary\">\n {label}\n </Button>\n );\n};\n","import React, { type ChangeEvent, type FormEvent, forwardRef, type RefObject } from \"react\";\nimport { IconSearch } from \"@purpur/icon/search\";\nimport { TextField, type TextFieldProps } from \"@purpur/text-field\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./search-field.module.scss\";\nimport { SearchFieldButton } from \"./search-field-button\";\n\nexport const searchFieldVariants = [\"button-attached\", \"no-button\"] as const;\n\ntype Variant = (typeof searchFieldVariants)[number];\n\ntype DefaultProps = {\n [\"data-testid\"]?: string;\n /**\n * An accessible label for the clear button.\n * */\n clearButtonAriaLabel: string;\n /**\n * Disables both the input field and submit button if `true`.\n * */\n disabled?: boolean;\n /**\n * Will display only a search icon in the search button if `true`.\n * */\n iconOnlySearchButton?: boolean;\n /**\n * Event handler called when the value of the search field changes.\n * */\n onChange?: (e: ChangeEvent<HTMLInputElement>) => void;\n /**\n * Event handler called when the clear button is clicked.\n * */\n onClear: () => void;\n /**\n * Event handler called when the search form is submitted.\n * */\n onSearch?: (e: FormEvent<HTMLFormElement>) => void;\n /**\n * The label text (or `aria-label` if `iconOnlySearchButton` is `true`) of the search button.\n * */\n searchButtonLabel?: string;\n variant: Variant;\n formRef?: RefObject<HTMLFormElement>;\n};\n\ntype TextSearchButton = {\n iconOnlySearchButton?: false;\n searchButtonLabel: string;\n variant: \"button-attached\";\n};\n\ntype IconOnlySearchButton = {\n iconOnlySearchButton: true;\n searchButtonLabel: string;\n variant: \"button-attached\";\n};\n\ntype NoButton = {\n searchButtonLabel?: never;\n variant: \"no-button\";\n};\n\nexport type SearchFieldProps = DefaultProps &\n (TextSearchButton | IconOnlySearchButton | NoButton) &\n Omit<TextFieldProps, \"startAdornment\" | \"endAdornment\" | \"afterField\" | \"onChange\">;\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-search-field\";\n\nexport const SearchField = forwardRef<HTMLInputElement, SearchFieldProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n className,\n clearButtonAriaLabel,\n disabled,\n iconOnlySearchButton,\n onClear,\n onSearch,\n searchButtonLabel,\n variant,\n formRef,\n ...props\n },\n ref\n ) => {\n const getTestId = (name: string) => (dataTestId ? `${dataTestId}-${name}` : undefined);\n const hasValue =\n typeof props.value === \"number\" ? props.value !== undefined : props.value?.length;\n const hasClearButton = hasValue && !disabled && !props.readOnly && !props.loading;\n\n const classes = cx(className, rootClassName, {\n [`${rootClassName}--no-gap`]: variant === \"button-attached\",\n [`${rootClassName}--has-clear-button`]: hasClearButton,\n });\n\n return (\n <form\n ref={formRef}\n className={cx(`${rootClassName}__wrapper`)}\n data-testid={dataTestId}\n onSubmit={(e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n onSearch?.(e);\n }}\n >\n <TextField\n ref={ref}\n className={classes}\n clearButtonAriaLabel={clearButtonAriaLabel}\n disabled={disabled}\n onClear={onClear}\n startAdornment={\n !iconOnlySearchButton ? (\n <IconSearch size=\"xs\" className={cx(`${rootClassName}__search-icon`)} key=\"1\" />\n ) : null\n }\n afterField={\n variant !== \"no-button\" ? (\n <SearchFieldButton\n disabled={disabled}\n iconOnly={iconOnlySearchButton}\n label={searchButtonLabel}\n data-testid={getTestId(\"button\")}\n />\n ) : null\n }\n data-testid={getTestId(\"text-field\")}\n type=\"search\"\n {...props}\n />\n </form>\n );\n }\n);\n\nSearchField.displayName = \"SearchField\";\n"],"names":["cx","c","styles","rootClassName","SearchFieldButton","dataTestid","disabled","iconOnly","label","props","Button","IconSearch","jsx","searchFieldVariants","SearchField","forwardRef","dataTestId","className","clearButtonAriaLabel","iconOnlySearchButton","onClear","onSearch","searchButtonLabel","variant","formRef","ref","getTestId","name","hasClearButton","classes","e","TextField"],"mappings":"k4BAcMA,EAAKC,EAAAA,EAAE,KAAKC,CAAM,EAClBC,EAAgB,6BAETC,EAAoB,CAAC,CAChC,CAAC,eAAgBC,EACjB,SAAAC,EACA,SAAAC,EACA,MAAAC,CACF,IAAa,CACX,MAAMC,EAAQ,CACZ,UAAWT,EAAGG,EAAe,CAC3B,CAAC,GAAGA,CAAa,aAAa,EAAGI,CAAA,CAClC,EACD,SAAAD,EACC,cAAgBD,CAAA,EAGnB,OAAIE,QAECG,SAAA,CAAQ,GAAGD,EAAO,aAAYD,EAAO,SAAQ,GAAC,KAAK,KAAK,KAAK,SAAS,QAAQ,UAC7E,eAACG,EAAAA,EAAA,CAAW,KAAK,KAAK,EACxB,EAKFC,EAAAA,IAACF,EAAAA,OAAA,CAAQ,GAAGD,EAAO,KAAK,KAAK,KAAK,SAAS,QAAQ,UAChD,SAAAD,CAAA,CACH,CAEJ,ECpCaK,EAAsB,CAAC,kBAAmB,WAAW,EA2D5Db,EAAKC,EAAAA,EAAE,KAAKC,CAAM,EAClBC,EAAgB,sBAETW,EAAcC,EAAAA,WACzB,CACE,CACE,CAAC,eAAgBC,EACjB,UAAAC,EACA,qBAAAC,EACA,SAAAZ,EACA,qBAAAa,EACA,QAAAC,EACA,SAAAC,EACA,kBAAAC,EACA,QAAAC,EACA,QAAAC,EACA,GAAGf,CAAA,EAELgB,IACG,CACH,MAAMC,EAAaC,GAAkBX,EAAa,GAAGA,CAAU,IAAIW,CAAI,GAAK,OAGtEC,GADJ,OAAOnB,EAAM,OAAU,SAAWA,EAAM,QAAU,OAAYA,EAAM,OAAO,SAC1C,CAACH,GAAY,CAACG,EAAM,UAAY,CAACA,EAAM,QAEpEoB,EAAU7B,EAAGiB,EAAWd,EAAe,CAC3C,CAAC,GAAGA,CAAa,UAAU,EAAGoB,IAAY,kBAC1C,CAAC,GAAGpB,CAAa,oBAAoB,EAAGyB,CAAA,CACzC,EAED,OACEhB,EAAAA,IAAC,OAAA,CACC,IAAKY,EACL,UAAWxB,EAAG,GAAGG,CAAa,WAAW,EACzC,cAAaa,EACb,SAAWc,GAAkC,CAC3CA,EAAE,eAAA,EACFT,IAAWS,CAAC,CACd,EAEA,SAAAlB,EAAAA,IAACmB,EAAAA,UAAA,CACC,IAAAN,EACA,UAAWI,EACX,qBAAAX,EACA,SAAAZ,EACA,QAAAc,EACA,eACGD,EAEG,KADFP,EAAAA,IAACD,EAAAA,GAAW,KAAK,KAAK,UAAWX,EAAG,GAAGG,CAAa,eAAe,CAAA,EAAO,GAAI,EAGlF,WACEoB,IAAY,YACVX,EAAAA,IAACR,EAAA,CACC,SAAAE,EACA,SAAUa,EACV,MAAOG,EACP,cAAaI,EAAU,QAAQ,CAAA,CAAA,EAE/B,KAEN,cAAaA,EAAU,YAAY,EACnC,KAAK,SACJ,GAAGjB,CAAA,CAAA,CACN,CAAA,CAGN,CACF,EAEAK,EAAY,YAAc"}
1
+ {"version":3,"file":"search-field-0CBoxcNH.js","sources":["../../../components/search-field/src/search-field-button.tsx","../../../components/search-field/src/search-field.tsx"],"sourcesContent":["import React from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { IconSearch } from \"@purpur/icon/search\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./search-field-button.module.scss\";\n\ntype Props = {\n [\"data-testid\"]?: string;\n disabled?: boolean;\n iconOnly?: boolean;\n label: string;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-search-field-button\";\n\nexport const SearchFieldButton = ({\n [\"data-testid\"]: dataTestid,\n disabled,\n iconOnly,\n label,\n}: Props) => {\n const props = {\n className: cx(rootClassName, {\n [`${rootClassName}--icon-only`]: iconOnly,\n }),\n disabled,\n [\"data-testid\"]: dataTestid,\n };\n\n if (iconOnly) {\n return (\n <Button {...props} aria-label={label} iconOnly size=\"sm\" type=\"submit\" variant=\"primary\">\n <IconSearch size=\"xs\" />\n </Button>\n );\n }\n\n return (\n <Button {...props} size=\"sm\" type=\"submit\" variant=\"primary\">\n {label}\n </Button>\n );\n};\n","import React, { type ChangeEvent, type FormEvent, forwardRef, type RefObject } from \"react\";\nimport { IconSearch } from \"@purpur/icon/search\";\nimport { TextField, type TextFieldProps } from \"@purpur/text-field\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./search-field.module.scss\";\nimport { SearchFieldButton } from \"./search-field-button\";\n\nexport const searchFieldVariants = [\"button-attached\", \"no-button\"] as const;\n\ntype Variant = (typeof searchFieldVariants)[number];\n\ntype DefaultProps = {\n [\"data-testid\"]?: string;\n /**\n * An accessible label for the clear button.\n * */\n clearButtonAriaLabel: string;\n /**\n * Disables both the input field and submit button if `true`.\n * */\n disabled?: boolean;\n /**\n * Will display only a search icon in the search button if `true`.\n * */\n iconOnlySearchButton?: boolean;\n /**\n * Event handler called when the value of the search field changes.\n * */\n onChange?: (e: ChangeEvent<HTMLInputElement>) => void;\n /**\n * Event handler called when the clear button is clicked.\n * */\n onClear: () => void;\n /**\n * Event handler called when the search form is submitted.\n * */\n onSearch?: (e: FormEvent<HTMLFormElement>) => void;\n /**\n * The label text (or `aria-label` if `iconOnlySearchButton` is `true`) of the search button.\n * */\n searchButtonLabel?: string;\n variant: Variant;\n formRef?: RefObject<HTMLFormElement>;\n};\n\ntype TextSearchButton = {\n iconOnlySearchButton?: false;\n searchButtonLabel: string;\n variant: \"button-attached\";\n};\n\ntype IconOnlySearchButton = {\n iconOnlySearchButton: true;\n searchButtonLabel: string;\n variant: \"button-attached\";\n};\n\ntype NoButton = {\n searchButtonLabel?: never;\n variant: \"no-button\";\n};\n\nexport type SearchFieldProps = DefaultProps &\n (TextSearchButton | IconOnlySearchButton | NoButton) &\n Omit<TextFieldProps, \"startAdornment\" | \"endAdornment\" | \"afterField\" | \"onChange\">;\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-search-field\";\n\nexport const SearchField = forwardRef<HTMLInputElement, SearchFieldProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n className,\n clearButtonAriaLabel,\n disabled,\n iconOnlySearchButton,\n onClear,\n onSearch,\n searchButtonLabel,\n variant,\n formRef,\n ...props\n },\n ref\n ) => {\n const getTestId = (name: string) => (dataTestId ? `${dataTestId}-${name}` : undefined);\n const hasValue =\n typeof props.value === \"number\" ? props.value !== undefined : props.value?.length;\n const hasClearButton = hasValue && !disabled && !props.readOnly && !props.loading;\n\n const classes = cx(className, rootClassName, {\n [`${rootClassName}--no-gap`]: variant === \"button-attached\",\n [`${rootClassName}--has-clear-button`]: hasClearButton,\n });\n\n return (\n <form\n ref={formRef}\n className={cx(`${rootClassName}__wrapper`)}\n data-testid={dataTestId}\n onSubmit={(e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n onSearch?.(e);\n }}\n >\n <TextField\n ref={ref}\n className={classes}\n clearButtonAriaLabel={clearButtonAriaLabel}\n disabled={disabled}\n onClear={onClear}\n startAdornment={\n !iconOnlySearchButton ? (\n <IconSearch size=\"xs\" className={cx(`${rootClassName}__search-icon`)} key=\"1\" />\n ) : null\n }\n afterField={\n variant !== \"no-button\" ? (\n <SearchFieldButton\n disabled={disabled}\n iconOnly={iconOnlySearchButton}\n label={searchButtonLabel}\n data-testid={getTestId(\"button\")}\n />\n ) : null\n }\n data-testid={getTestId(\"text-field\")}\n type=\"search\"\n {...props}\n />\n </form>\n );\n }\n);\n\nSearchField.displayName = \"SearchField\";\n"],"names":["cx","c","styles","rootClassName","SearchFieldButton","dataTestid","disabled","iconOnly","label","props","Button","IconSearch","jsx","searchFieldVariants","SearchField","forwardRef","dataTestId","className","clearButtonAriaLabel","iconOnlySearchButton","onClear","onSearch","searchButtonLabel","variant","formRef","ref","getTestId","name","hasClearButton","classes","e","TextField"],"mappings":"k4BAcMA,EAAKC,EAAAA,EAAE,KAAKC,CAAM,EAClBC,EAAgB,6BAETC,EAAoB,CAAC,CAChC,CAAC,eAAgBC,EACjB,SAAAC,EACA,SAAAC,EACA,MAAAC,CACF,IAAa,CACX,MAAMC,EAAQ,CACZ,UAAWT,EAAGG,EAAe,CAC3B,CAAC,GAAGA,CAAa,aAAa,EAAGI,CAAA,CAClC,EACD,SAAAD,EACC,cAAgBD,CAAA,EAGnB,OAAIE,QAECG,SAAA,CAAQ,GAAGD,EAAO,aAAYD,EAAO,SAAQ,GAAC,KAAK,KAAK,KAAK,SAAS,QAAQ,UAC7E,eAACG,EAAAA,EAAA,CAAW,KAAK,KAAK,EACxB,EAKFC,EAAAA,IAACF,EAAAA,OAAA,CAAQ,GAAGD,EAAO,KAAK,KAAK,KAAK,SAAS,QAAQ,UAChD,SAAAD,CAAA,CACH,CAEJ,ECpCaK,EAAsB,CAAC,kBAAmB,WAAW,EA2D5Db,EAAKC,EAAAA,EAAE,KAAKC,CAAM,EAClBC,EAAgB,sBAETW,EAAcC,EAAAA,WACzB,CACE,CACE,CAAC,eAAgBC,EACjB,UAAAC,EACA,qBAAAC,EACA,SAAAZ,EACA,qBAAAa,EACA,QAAAC,EACA,SAAAC,EACA,kBAAAC,EACA,QAAAC,EACA,QAAAC,EACA,GAAGf,CAAA,EAELgB,IACG,CACH,MAAMC,EAAaC,GAAkBX,EAAa,GAAGA,CAAU,IAAIW,CAAI,GAAK,OAGtEC,GADJ,OAAOnB,EAAM,OAAU,SAAWA,EAAM,QAAU,OAAYA,EAAM,OAAO,SAC1C,CAACH,GAAY,CAACG,EAAM,UAAY,CAACA,EAAM,QAEpEoB,EAAU7B,EAAGiB,EAAWd,EAAe,CAC3C,CAAC,GAAGA,CAAa,UAAU,EAAGoB,IAAY,kBAC1C,CAAC,GAAGpB,CAAa,oBAAoB,EAAGyB,CAAA,CACzC,EAED,OACEhB,EAAAA,IAAC,OAAA,CACC,IAAKY,EACL,UAAWxB,EAAG,GAAGG,CAAa,WAAW,EACzC,cAAaa,EACb,SAAWc,GAAkC,CAC3CA,EAAE,eAAA,EACFT,IAAWS,CAAC,CACd,EAEA,SAAAlB,EAAAA,IAACmB,EAAAA,UAAA,CACC,IAAAN,EACA,UAAWI,EACX,qBAAAX,EACA,SAAAZ,EACA,QAAAc,EACA,eACGD,EAEG,KADFP,EAAAA,IAACD,EAAAA,GAAW,KAAK,KAAK,UAAWX,EAAG,GAAGG,CAAa,eAAe,CAAA,EAAO,GAAI,EAGlF,WACEoB,IAAY,YACVX,EAAAA,IAACR,EAAA,CACC,SAAAE,EACA,SAAUa,EACV,MAAOG,EACP,cAAaI,EAAU,QAAQ,CAAA,CAAA,EAE/B,KAEN,cAAaA,EAAU,YAAY,EACnC,KAAK,SACJ,GAAGjB,CAAA,CAAA,CACN,CAAA,CAGN,CACF,EAEAK,EAAY,YAAc"}
@@ -1,9 +1,9 @@
1
1
  import { jsx as r } from "react/jsx-runtime";
2
2
  import { forwardRef as q } from "react";
3
3
  import { s as h } from "./search.es-DoFKg2Hr.mjs";
4
- import { T as v } from "./text-field-5rIuW8gc.mjs";
4
+ import { T as v } from "./text-field-9zPmL99g.mjs";
5
5
  import { c as f } from "./bind-CU-R61T-.mjs";
6
- import { b as _ } from "./button-BfYKNBmC.mjs";
6
+ import { b as _ } from "./button-D-BBdNhd.mjs";
7
7
  const N = {
8
8
  "purpur-search-field": "_purpur-search-field_uhpkq_1",
9
9
  "purpur-search-field--has-clear-button": "_purpur-search-field--has-clear-button_uhpkq_4",
@@ -88,4 +88,4 @@ export {
88
88
  S,
89
89
  R as s
90
90
  };
91
- //# sourceMappingURL=search-field-BOmCVr5b.mjs.map
91
+ //# sourceMappingURL=search-field-aP_i6Nr0.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"search-field-BOmCVr5b.mjs","sources":["../../../components/search-field/src/search-field-button.tsx","../../../components/search-field/src/search-field.tsx"],"sourcesContent":["import React from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { IconSearch } from \"@purpur/icon/search\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./search-field-button.module.scss\";\n\ntype Props = {\n [\"data-testid\"]?: string;\n disabled?: boolean;\n iconOnly?: boolean;\n label: string;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-search-field-button\";\n\nexport const SearchFieldButton = ({\n [\"data-testid\"]: dataTestid,\n disabled,\n iconOnly,\n label,\n}: Props) => {\n const props = {\n className: cx(rootClassName, {\n [`${rootClassName}--icon-only`]: iconOnly,\n }),\n disabled,\n [\"data-testid\"]: dataTestid,\n };\n\n if (iconOnly) {\n return (\n <Button {...props} aria-label={label} iconOnly size=\"sm\" type=\"submit\" variant=\"primary\">\n <IconSearch size=\"xs\" />\n </Button>\n );\n }\n\n return (\n <Button {...props} size=\"sm\" type=\"submit\" variant=\"primary\">\n {label}\n </Button>\n );\n};\n","import React, { type ChangeEvent, type FormEvent, forwardRef, type RefObject } from \"react\";\nimport { IconSearch } from \"@purpur/icon/search\";\nimport { TextField, type TextFieldProps } from \"@purpur/text-field\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./search-field.module.scss\";\nimport { SearchFieldButton } from \"./search-field-button\";\n\nexport const searchFieldVariants = [\"button-attached\", \"no-button\"] as const;\n\ntype Variant = (typeof searchFieldVariants)[number];\n\ntype DefaultProps = {\n [\"data-testid\"]?: string;\n /**\n * An accessible label for the clear button.\n * */\n clearButtonAriaLabel: string;\n /**\n * Disables both the input field and submit button if `true`.\n * */\n disabled?: boolean;\n /**\n * Will display only a search icon in the search button if `true`.\n * */\n iconOnlySearchButton?: boolean;\n /**\n * Event handler called when the value of the search field changes.\n * */\n onChange?: (e: ChangeEvent<HTMLInputElement>) => void;\n /**\n * Event handler called when the clear button is clicked.\n * */\n onClear: () => void;\n /**\n * Event handler called when the search form is submitted.\n * */\n onSearch?: (e: FormEvent<HTMLFormElement>) => void;\n /**\n * The label text (or `aria-label` if `iconOnlySearchButton` is `true`) of the search button.\n * */\n searchButtonLabel?: string;\n variant: Variant;\n formRef?: RefObject<HTMLFormElement>;\n};\n\ntype TextSearchButton = {\n iconOnlySearchButton?: false;\n searchButtonLabel: string;\n variant: \"button-attached\";\n};\n\ntype IconOnlySearchButton = {\n iconOnlySearchButton: true;\n searchButtonLabel: string;\n variant: \"button-attached\";\n};\n\ntype NoButton = {\n searchButtonLabel?: never;\n variant: \"no-button\";\n};\n\nexport type SearchFieldProps = DefaultProps &\n (TextSearchButton | IconOnlySearchButton | NoButton) &\n Omit<TextFieldProps, \"startAdornment\" | \"endAdornment\" | \"afterField\" | \"onChange\">;\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-search-field\";\n\nexport const SearchField = forwardRef<HTMLInputElement, SearchFieldProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n className,\n clearButtonAriaLabel,\n disabled,\n iconOnlySearchButton,\n onClear,\n onSearch,\n searchButtonLabel,\n variant,\n formRef,\n ...props\n },\n ref\n ) => {\n const getTestId = (name: string) => (dataTestId ? `${dataTestId}-${name}` : undefined);\n const hasValue =\n typeof props.value === \"number\" ? props.value !== undefined : props.value?.length;\n const hasClearButton = hasValue && !disabled && !props.readOnly && !props.loading;\n\n const classes = cx(className, rootClassName, {\n [`${rootClassName}--no-gap`]: variant === \"button-attached\",\n [`${rootClassName}--has-clear-button`]: hasClearButton,\n });\n\n return (\n <form\n ref={formRef}\n className={cx(`${rootClassName}__wrapper`)}\n data-testid={dataTestId}\n onSubmit={(e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n onSearch?.(e);\n }}\n >\n <TextField\n ref={ref}\n className={classes}\n clearButtonAriaLabel={clearButtonAriaLabel}\n disabled={disabled}\n onClear={onClear}\n startAdornment={\n !iconOnlySearchButton ? (\n <IconSearch size=\"xs\" className={cx(`${rootClassName}__search-icon`)} key=\"1\" />\n ) : null\n }\n afterField={\n variant !== \"no-button\" ? (\n <SearchFieldButton\n disabled={disabled}\n iconOnly={iconOnlySearchButton}\n label={searchButtonLabel}\n data-testid={getTestId(\"button\")}\n />\n ) : null\n }\n data-testid={getTestId(\"text-field\")}\n type=\"search\"\n {...props}\n />\n </form>\n );\n }\n);\n\nSearchField.displayName = \"SearchField\";\n"],"names":["cx","c","styles","rootClassName","SearchFieldButton","dataTestid","disabled","iconOnly","label","props","Button","IconSearch","jsx","searchFieldVariants","SearchField","forwardRef","dataTestId","className","clearButtonAriaLabel","iconOnlySearchButton","onClear","onSearch","searchButtonLabel","variant","formRef","ref","getTestId","name","hasClearButton","classes","e","TextField"],"mappings":";;;;;;;;;;;;;;;;;GAcMA,IAAKC,EAAE,KAAKC,CAAM,GAClBC,IAAgB,8BAETC,IAAoB,CAAC;AAAA,EAChC,CAAC,gBAAgBC;AAAA,EACjB,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC;AACF,MAAa;AACX,QAAMC,IAAQ;AAAA,IACZ,WAAWT,EAAGG,GAAe;AAAA,MAC3B,CAAC,GAAGA,CAAa,aAAa,GAAGI;AAAA,IAAA,CAClC;AAAA,IACD,UAAAD;AAAA,IACC,eAAgBD;AAAA,EAAA;AAGnB,SAAIE,sBAECG,GAAA,EAAQ,GAAGD,GAAO,cAAYD,GAAO,UAAQ,IAAC,MAAK,MAAK,MAAK,UAAS,SAAQ,WAC7E,4BAACG,GAAA,EAAW,MAAK,MAAK,GACxB,IAKF,gBAAAC,EAACF,GAAA,EAAQ,GAAGD,GAAO,MAAK,MAAK,MAAK,UAAS,SAAQ,WAChD,UAAAD,EAAA,CACH;AAEJ,GCpCaK,IAAsB,CAAC,mBAAmB,WAAW,GA2D5Db,IAAKC,EAAE,KAAKC,CAAM,GAClBC,IAAgB,uBAETW,IAAcC;AAAA,EACzB,CACE;AAAA,IACE,CAAC,gBAAgBC;AAAA,IACjB,WAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,UAAAZ;AAAA,IACA,sBAAAa;AAAA,IACA,SAAAC;AAAA,IACA,UAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,SAAAC;AAAA,IACA,SAAAC;AAAA,IACA,GAAGf;AAAA,EAAA,GAELgB,MACG;AACH,UAAMC,IAAY,CAACC,MAAkBX,IAAa,GAAGA,CAAU,IAAIW,CAAI,KAAK,QAGtEC,KADJ,OAAOnB,EAAM,SAAU,WAAWA,EAAM,UAAU,SAAYA,EAAM,OAAO,WAC1C,CAACH,KAAY,CAACG,EAAM,YAAY,CAACA,EAAM,SAEpEoB,IAAU7B,EAAGiB,GAAWd,GAAe;AAAA,MAC3C,CAAC,GAAGA,CAAa,UAAU,GAAGoB,MAAY;AAAA,MAC1C,CAAC,GAAGpB,CAAa,oBAAoB,GAAGyB;AAAA,IAAA,CACzC;AAED,WACE,gBAAAhB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAKY;AAAA,QACL,WAAWxB,EAAG,GAAGG,CAAa,WAAW;AAAA,QACzC,eAAaa;AAAA,QACb,UAAU,CAACc,MAAkC;AAC3C,UAAAA,EAAE,eAAA,GACFT,IAAWS,CAAC;AAAA,QACd;AAAA,QAEA,UAAA,gBAAAlB;AAAA,UAACmB;AAAA,UAAA;AAAA,YACC,KAAAN;AAAA,YACA,WAAWI;AAAA,YACX,sBAAAX;AAAA,YACA,UAAAZ;AAAA,YACA,SAAAc;AAAA,YACA,gBACGD,IAEG,OADF,gBAAAP,EAACD,KAAW,MAAK,MAAK,WAAWX,EAAG,GAAGG,CAAa,eAAe,EAAA,GAAO,GAAI;AAAA,YAGlF,YACEoB,MAAY,cACV,gBAAAX;AAAA,cAACR;AAAA,cAAA;AAAA,gBACC,UAAAE;AAAA,gBACA,UAAUa;AAAA,gBACV,OAAOG;AAAA,gBACP,eAAaI,EAAU,QAAQ;AAAA,cAAA;AAAA,YAAA,IAE/B;AAAA,YAEN,eAAaA,EAAU,YAAY;AAAA,YACnC,MAAK;AAAA,YACJ,GAAGjB;AAAA,UAAA;AAAA,QAAA;AAAA,MACN;AAAA,IAAA;AAAA,EAGN;AACF;AAEAK,EAAY,cAAc;"}
1
+ {"version":3,"file":"search-field-aP_i6Nr0.mjs","sources":["../../../components/search-field/src/search-field-button.tsx","../../../components/search-field/src/search-field.tsx"],"sourcesContent":["import React from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { IconSearch } from \"@purpur/icon/search\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./search-field-button.module.scss\";\n\ntype Props = {\n [\"data-testid\"]?: string;\n disabled?: boolean;\n iconOnly?: boolean;\n label: string;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-search-field-button\";\n\nexport const SearchFieldButton = ({\n [\"data-testid\"]: dataTestid,\n disabled,\n iconOnly,\n label,\n}: Props) => {\n const props = {\n className: cx(rootClassName, {\n [`${rootClassName}--icon-only`]: iconOnly,\n }),\n disabled,\n [\"data-testid\"]: dataTestid,\n };\n\n if (iconOnly) {\n return (\n <Button {...props} aria-label={label} iconOnly size=\"sm\" type=\"submit\" variant=\"primary\">\n <IconSearch size=\"xs\" />\n </Button>\n );\n }\n\n return (\n <Button {...props} size=\"sm\" type=\"submit\" variant=\"primary\">\n {label}\n </Button>\n );\n};\n","import React, { type ChangeEvent, type FormEvent, forwardRef, type RefObject } from \"react\";\nimport { IconSearch } from \"@purpur/icon/search\";\nimport { TextField, type TextFieldProps } from \"@purpur/text-field\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./search-field.module.scss\";\nimport { SearchFieldButton } from \"./search-field-button\";\n\nexport const searchFieldVariants = [\"button-attached\", \"no-button\"] as const;\n\ntype Variant = (typeof searchFieldVariants)[number];\n\ntype DefaultProps = {\n [\"data-testid\"]?: string;\n /**\n * An accessible label for the clear button.\n * */\n clearButtonAriaLabel: string;\n /**\n * Disables both the input field and submit button if `true`.\n * */\n disabled?: boolean;\n /**\n * Will display only a search icon in the search button if `true`.\n * */\n iconOnlySearchButton?: boolean;\n /**\n * Event handler called when the value of the search field changes.\n * */\n onChange?: (e: ChangeEvent<HTMLInputElement>) => void;\n /**\n * Event handler called when the clear button is clicked.\n * */\n onClear: () => void;\n /**\n * Event handler called when the search form is submitted.\n * */\n onSearch?: (e: FormEvent<HTMLFormElement>) => void;\n /**\n * The label text (or `aria-label` if `iconOnlySearchButton` is `true`) of the search button.\n * */\n searchButtonLabel?: string;\n variant: Variant;\n formRef?: RefObject<HTMLFormElement>;\n};\n\ntype TextSearchButton = {\n iconOnlySearchButton?: false;\n searchButtonLabel: string;\n variant: \"button-attached\";\n};\n\ntype IconOnlySearchButton = {\n iconOnlySearchButton: true;\n searchButtonLabel: string;\n variant: \"button-attached\";\n};\n\ntype NoButton = {\n searchButtonLabel?: never;\n variant: \"no-button\";\n};\n\nexport type SearchFieldProps = DefaultProps &\n (TextSearchButton | IconOnlySearchButton | NoButton) &\n Omit<TextFieldProps, \"startAdornment\" | \"endAdornment\" | \"afterField\" | \"onChange\">;\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-search-field\";\n\nexport const SearchField = forwardRef<HTMLInputElement, SearchFieldProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n className,\n clearButtonAriaLabel,\n disabled,\n iconOnlySearchButton,\n onClear,\n onSearch,\n searchButtonLabel,\n variant,\n formRef,\n ...props\n },\n ref\n ) => {\n const getTestId = (name: string) => (dataTestId ? `${dataTestId}-${name}` : undefined);\n const hasValue =\n typeof props.value === \"number\" ? props.value !== undefined : props.value?.length;\n const hasClearButton = hasValue && !disabled && !props.readOnly && !props.loading;\n\n const classes = cx(className, rootClassName, {\n [`${rootClassName}--no-gap`]: variant === \"button-attached\",\n [`${rootClassName}--has-clear-button`]: hasClearButton,\n });\n\n return (\n <form\n ref={formRef}\n className={cx(`${rootClassName}__wrapper`)}\n data-testid={dataTestId}\n onSubmit={(e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n onSearch?.(e);\n }}\n >\n <TextField\n ref={ref}\n className={classes}\n clearButtonAriaLabel={clearButtonAriaLabel}\n disabled={disabled}\n onClear={onClear}\n startAdornment={\n !iconOnlySearchButton ? (\n <IconSearch size=\"xs\" className={cx(`${rootClassName}__search-icon`)} key=\"1\" />\n ) : null\n }\n afterField={\n variant !== \"no-button\" ? (\n <SearchFieldButton\n disabled={disabled}\n iconOnly={iconOnlySearchButton}\n label={searchButtonLabel}\n data-testid={getTestId(\"button\")}\n />\n ) : null\n }\n data-testid={getTestId(\"text-field\")}\n type=\"search\"\n {...props}\n />\n </form>\n );\n }\n);\n\nSearchField.displayName = \"SearchField\";\n"],"names":["cx","c","styles","rootClassName","SearchFieldButton","dataTestid","disabled","iconOnly","label","props","Button","IconSearch","jsx","searchFieldVariants","SearchField","forwardRef","dataTestId","className","clearButtonAriaLabel","iconOnlySearchButton","onClear","onSearch","searchButtonLabel","variant","formRef","ref","getTestId","name","hasClearButton","classes","e","TextField"],"mappings":";;;;;;;;;;;;;;;;;GAcMA,IAAKC,EAAE,KAAKC,CAAM,GAClBC,IAAgB,8BAETC,IAAoB,CAAC;AAAA,EAChC,CAAC,gBAAgBC;AAAA,EACjB,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC;AACF,MAAa;AACX,QAAMC,IAAQ;AAAA,IACZ,WAAWT,EAAGG,GAAe;AAAA,MAC3B,CAAC,GAAGA,CAAa,aAAa,GAAGI;AAAA,IAAA,CAClC;AAAA,IACD,UAAAD;AAAA,IACC,eAAgBD;AAAA,EAAA;AAGnB,SAAIE,sBAECG,GAAA,EAAQ,GAAGD,GAAO,cAAYD,GAAO,UAAQ,IAAC,MAAK,MAAK,MAAK,UAAS,SAAQ,WAC7E,4BAACG,GAAA,EAAW,MAAK,MAAK,GACxB,IAKF,gBAAAC,EAACF,GAAA,EAAQ,GAAGD,GAAO,MAAK,MAAK,MAAK,UAAS,SAAQ,WAChD,UAAAD,EAAA,CACH;AAEJ,GCpCaK,IAAsB,CAAC,mBAAmB,WAAW,GA2D5Db,IAAKC,EAAE,KAAKC,CAAM,GAClBC,IAAgB,uBAETW,IAAcC;AAAA,EACzB,CACE;AAAA,IACE,CAAC,gBAAgBC;AAAA,IACjB,WAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,UAAAZ;AAAA,IACA,sBAAAa;AAAA,IACA,SAAAC;AAAA,IACA,UAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,SAAAC;AAAA,IACA,SAAAC;AAAA,IACA,GAAGf;AAAA,EAAA,GAELgB,MACG;AACH,UAAMC,IAAY,CAACC,MAAkBX,IAAa,GAAGA,CAAU,IAAIW,CAAI,KAAK,QAGtEC,KADJ,OAAOnB,EAAM,SAAU,WAAWA,EAAM,UAAU,SAAYA,EAAM,OAAO,WAC1C,CAACH,KAAY,CAACG,EAAM,YAAY,CAACA,EAAM,SAEpEoB,IAAU7B,EAAGiB,GAAWd,GAAe;AAAA,MAC3C,CAAC,GAAGA,CAAa,UAAU,GAAGoB,MAAY;AAAA,MAC1C,CAAC,GAAGpB,CAAa,oBAAoB,GAAGyB;AAAA,IAAA,CACzC;AAED,WACE,gBAAAhB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAKY;AAAA,QACL,WAAWxB,EAAG,GAAGG,CAAa,WAAW;AAAA,QACzC,eAAaa;AAAA,QACb,UAAU,CAACc,MAAkC;AAC3C,UAAAA,EAAE,eAAA,GACFT,IAAWS,CAAC;AAAA,QACd;AAAA,QAEA,UAAA,gBAAAlB;AAAA,UAACmB;AAAA,UAAA;AAAA,YACC,KAAAN;AAAA,YACA,WAAWI;AAAA,YACX,sBAAAX;AAAA,YACA,UAAAZ;AAAA,YACA,SAAAc;AAAA,YACA,gBACGD,IAEG,OADF,gBAAAP,EAACD,KAAW,MAAK,MAAK,WAAWX,EAAG,GAAGG,CAAa,eAAe,EAAA,GAAO,GAAI;AAAA,YAGlF,YACEoB,MAAY,cACV,gBAAAX;AAAA,cAACR;AAAA,cAAA;AAAA,gBACC,UAAAE;AAAA,gBACA,UAAUa;AAAA,gBACV,OAAOG;AAAA,gBACP,eAAaI,EAAU,QAAQ;AAAA,cAAA;AAAA,YAAA,IAE/B;AAAA,YAEN,eAAaA,EAAU,YAAY;AAAA,YACnC,MAAK;AAAA,YACJ,GAAGjB;AAAA,UAAA;AAAA,QAAA;AAAA,MACN;AAAA,IAAA;AAAA,EAGN;AACF;AAEAK,EAAY,cAAc;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./search-field-CanOlkIY.js");exports.SearchField=e.SearchField;exports.searchFieldVariants=e.searchFieldVariants;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./search-field-0CBoxcNH.js");exports.SearchField=e.SearchField;exports.searchFieldVariants=e.searchFieldVariants;
2
2
  //# sourceMappingURL=search-field.cjs.js.map
@@ -1,4 +1,4 @@
1
- import { S as r, s } from "./search-field-BOmCVr5b.mjs";
1
+ import { S as r, s } from "./search-field-aP_i6Nr0.mjs";
2
2
  export {
3
3
  r as SearchField,
4
4
  s as searchFieldVariants
@@ -1,2 +1,2 @@
1
- "use strict";const e=require("react/jsx-runtime"),l=require("react"),$=require("./button-DDYGuqZ0.js"),M=require("./chevron-left.es-B0vPg5XM.js"),W=require("./chevron-right.es-Bv376M3o.js"),I=require("./index-BVmlsxuF.js"),x=require("./index-CoR7YA3H.js"),T=require("./bind-DeUYJ6m9.js"),J=require("./tooltip-svlZkXBs.js"),K=require("./checkmark.es-lYntWFA3.js"),Q={PRIMARY:"primary"},L={SMALL_SCREEN:"small-screen",LARGE_SCREEN:"large-screen",ALWAYS:"always"},X={"purpur-stepper__nav-container":"_purpur-stepper__nav-container_1rouo_1","purpur-stepper__nav":"_purpur-stepper__nav_1rouo_1","purpur-stepper":"_purpur-stepper_1rouo_1","purpur-stepper__scroll-button":"_purpur-stepper__scroll-button_1rouo_7","purpur-stepper__scroll-button--left":"_purpur-stepper__scroll-button--left_1rouo_18","purpur-stepper__scroll-button--right":"_purpur-stepper__scroll-button--right_1rouo_21","purpur-stepper__scroll-button-icon":"_purpur-stepper__scroll-button-icon_1rouo_24","purpur-stepper__hidden":"_purpur-stepper__hidden_1rouo_27"},Z={"purpur-stepper-container":"_purpur-stepper-container_162zw_1","purpur-stepper-container__inner--align-with-grid":"_purpur-stepper-container__inner--align-with-grid_162zw_5","purpur-stepper-container--primary":"_purpur-stepper-container--primary_162zw_18","purpur-stepper-container--secondary":"_purpur-stepper-container--secondary_162zw_21"},O=T.c.bind(Z),v="purpur-stepper-container",ee=({["data-testid"]:t="purpur-stepper-container",children:r,className:s,alignWithGrid:n,variant:o,...p})=>{const h=O(s,v,{[`${v}--${o}`]:o,[`${v}--align-with-grid`]:n});return e.jsx("div",{className:h,"data-testid":t,...p,children:e.jsx("div",{className:O(`${v}__inner`,{[`${v}__inner--align-with-grid`]:n}),children:r})})},te=l.forwardRef(({children:t,...r},s)=>{const{finished:n,...o}=r;return e.jsx("div",{...o,ref:s,children:t})}),re=t=>!!t&&l.isValidElement(t)&&!!t.props.label,se={"purpur-stepper-button":"_purpur-stepper-button_wjiph_1","purpur-stepper-button__trigger-outline":"_purpur-stepper-button__trigger-outline_wjiph_21","purpur-stepper-button--first":"_purpur-stepper-button--first_wjiph_33","purpur-stepper-button--current":"_purpur-stepper-button--current_wjiph_33","purpur-stepper-button--middle":"_purpur-stepper-button--middle_wjiph_38","purpur-stepper-button--last":"_purpur-stepper-button--last_wjiph_48","purpur-stepper-button--visibility-small-screen":"_purpur-stepper-button--visibility-small-screen_wjiph_58","purpur-stepper-button--visibility-large-screen":"_purpur-stepper-button--visibility-large-screen_wjiph_66","purpur-stepper-button__icon":"_purpur-stepper-button__icon_wjiph_90","purpur-stepper-button__step-number":"_purpur-stepper-button__step-number_wjiph_97","purpur-stepper-button__step-number--current":"_purpur-stepper-button__step-number--current_wjiph_108","purpur-stepper-button__step-number--disabled":"_purpur-stepper-button__step-number--disabled_wjiph_112","purpur-stepper-button__step-label":"_purpur-stepper-button__step-label_wjiph_117","arrow-forward":"_arrow-forward_wjiph_121","purpur-stepper-button--primary":"_purpur-stepper-button--primary_wjiph_133","purpur-stepper-button--disabled":"_purpur-stepper-button--disabled_wjiph_136","purpur-stepper-button--secondary":"_purpur-stepper-button--secondary_wjiph_142","arrow-tail":"_arrow-tail_wjiph_152","sr-only--lg-down":"_sr-only--lg-down_wjiph_171"},y=T.c.bind(se),d="purpur-stepper-button",ne=({["data-testid"]:t,current:r,disabled:s,stepNumber:n})=>e.jsx("div",{"data-testid":t,className:y([`${d}__step-number`,{[`${d}__step-number--current`]:r},{[`${d}__step-number--disabled`]:s}]),children:n}),A=l.forwardRef(({className:t,["data-testid"]:r,variant:s,step:n,indexOfLastItem:o,index:p,currentStepIndex:h,whenToBeVisible:m,handleStepChange:u,handleStepFocus:a,completedStepLabel:i,..._},b)=>{const R=p===0?"first":p===o?"last":"middle",g=p===h;return e.jsx(I.Item,{asChild:!0,children:e.jsx($.Button,{..._,ref:b,className:y(t,d,`${d}--${R}`,`${d}--${s}`,`${d}--visibility-${m}`,{[`${d}--current`]:g},{[`${d}--disabled`]:n.disabled},{"arrow-tail":R!=="first"},{"arrow-forward":R!=="last"}),id:`stepper-trigger-button-${p}`,variant:$.BUTTON_VARIANT.TERTIARY_PURPLE,"data-testid":`${r}-step-trigger-item-${p}`,disabled:n.disabled,"aria-current":g&&"step","aria-label":n.finished&&!g?[n.label,i].filter(Boolean).join(", "):void 0,onClick:E=>u(E,p),onFocus:a,children:e.jsxs("span",{className:y(`${d}__trigger-outline`),children:[n.finished&&!g?e.jsx(K.a,{className:y(`${d}__icon`),"data-testid":`${r}-step-finished-icon`,size:"sm"}):e.jsx(ne,{"data-testid":`${r}-step-number`,current:g,disabled:n.disabled,stepNumber:p+1}),e.jsx("span",{className:y(`${d}__step-label`,{"sr-only--lg-down":!g}),children:n.label})]})})})}),pe={"purpur-stepper-nav-items__list":"_purpur-stepper-nav-items__list_lgkh0_1","purpur-stepper-nav-items__list-item":"_purpur-stepper-nav-items__list-item_lgkh0_7","purpur-stepper-nav-items__list-item--current":"_purpur-stepper-nav-items__list-item--current_lgkh0_25","purpur-stepper-nav-items__tooltip-content":"_purpur-stepper-nav-items__tooltip-content_lgkh0_31","purpur-stepper-nav-items__tooltip-trigger-item-container":"_purpur-stepper-nav-items__tooltip-trigger-item-container_lgkh0_34"},C=T.c.bind(pe),N="purpur-stepper-nav-items",ie=l.forwardRef(({["data-testid"]:t,variant:r,handleStepChange:s,handleStepFocus:n,steps:o,firstStepRef:p,lastStepRef:h,currentStepIndex:m,completedStepLabel:u},a)=>{const i=o.map((_,b)=>{const R=_.disabled?e.jsx("span",{className:C(`${N}__tooltip-trigger-item-container`),children:e.jsx(A,{"data-testid":`${t}-disabled-sm`,variant:r,step:_,indexOfLastItem:o.length-1,index:b,currentStepIndex:m,whenToBeVisible:L.SMALL_SCREEN,completedStepLabel:u,handleStepChange:s,handleStepFocus:n})}):null;return e.jsx("li",{className:C(`${N}__list-item`,{[`${N}__list-item--current`]:b===m}),ref:b===0?p:b===o.length-1?h:null,children:_.disabled?e.jsxs(e.Fragment,{children:[e.jsx(J.Tooltip,{contentClassName:C(`${N}__tooltip-content`),triggerElement:R,children:_.label}),e.jsx(A,{"data-testid":`${t}-disabled-lg`,variant:r,step:_,indexOfLastItem:o.length-1,index:b,currentStepIndex:m,whenToBeVisible:L.LARGE_SCREEN,completedStepLabel:u,handleStepChange:s,handleStepFocus:n})]}):e.jsx(A,{"data-testid":t,variant:r,step:_,indexOfLastItem:o.length-1,index:b,currentStepIndex:m,whenToBeVisible:L.ALWAYS,completedStepLabel:u,handleStepChange:s,handleStepFocus:n})},_.label)});return e.jsx(I.Root,{loop:!1,dir:"ltr",children:e.jsx("ol",{ref:a,className:C(`${N}__list`),children:i})})}),oe=t=>{const r=l.useRef(!0),s=l.useRef(null);return l.useEffect(()=>{!r.current&&s.current!==null&&s.current.focus(),r.current=!1},[t]),{contentRef:s}},S={LEFT:"left",RIGHT:"right"},le=()=>{const t=l.useRef(null),r=l.useRef(null),s=l.useRef(null),[n,o]=l.useState(!1),[p,h]=l.useState(!1),m=u=>{if(!t.current)return;const a=t.current,i=a.clientWidth,_=a.scrollLeft;u===S.LEFT&&a.scroll({behavior:"smooth",left:_-i/2}),u===S.RIGHT&&a.scroll({behavior:"smooth",left:_+i/2})};return l.useEffect(()=>{if(r.current&&s.current&&t.current){const u=new IntersectionObserver(a=>{for(const i of a){if(i.target===r.current){i.isIntersecting?o(!1):o(!0);continue}i.target===s.current&&(i.isIntersecting?h(!1):h(!0))}},{root:t.current,threshold:.95});return u.observe(r.current),u.observe(s.current),()=>u.disconnect()}},[r,s,t]),{scrollContainer:t,firstStepRef:r,lastStepRef:s,displayLeftScrollButton:n,displayRightScrollButton:p,handleHorizontalScroll:m}},j=T.c.bind(X),c="purpur-stepper",B=({["aria-label"]:t,["data-testid"]:r,children:s,className:n,completedStepLabel:o,currentStepIndex:p=0,onStepChange:h,alignWithGrid:m=!1,leftScrollButtonAriaLabel:u,rightScrollButtonAriaLabel:a,variant:i=Q.PRIMARY,..._})=>{const b=l.Children.toArray(s).filter(re),R=l.Children.map(b,f=>{const{disabled:w,finished:D,label:G}=f.props;return{disabled:w??!1,finished:D??!1,label:G}}),{contentRef:g}=oe(p),{scrollContainer:E,firstStepRef:q,lastStepRef:z,displayLeftScrollButton:P,displayRightScrollButton:Y,handleHorizontalScroll:V}=le(),U=j([n,c,{[`${c}--${i}`]:i}]),k=f=>{f.target.scrollIntoView({behavior:"smooth",block:"nearest",inline:"center"})},F=(f,w)=>{f.preventDefault(),k(f),h(w)},H=f=>{k(f)};return e.jsxs("div",{className:U,..._,children:[e.jsx(ee,{variant:i,alignWithGrid:m,children:e.jsxs("div",{className:j(`${c}__nav-container`),children:[e.jsxs(x.Root,{children:[e.jsx(x.Viewport,{ref:E,children:e.jsx("div",{"aria-label":t,"data-testid":r,className:j([`${c}__nav`,{[`${c}__nav--${i}`]:i}]),children:e.jsx(I.Root,{loop:!1,dir:"ltr",children:e.jsx(ie,{"data-testid":r,variant:i,firstStepRef:q,lastStepRef:z,steps:R,currentStepIndex:p,handleStepChange:F,handleStepFocus:H,completedStepLabel:o})})})}),e.jsx(x.Scrollbar,{orientation:"horizontal",children:e.jsx(x.Thumb,{})})]}),P&&e.jsx($.Button,{"aria-label":u,className:j([`${c}__scroll-button`,`${c}__scroll-button--left`]),variant:$.BUTTON_VARIANT.TERTIARY_PURPLE,tabIndex:-1,iconOnly:!0,onClick:()=>{V(S.LEFT)},children:e.jsx(M.l,{className:j(`${c}__scroll-button-icon`),size:"md"})}),Y&&e.jsx($.Button,{"aria-label":a,className:j([`${c}__scroll-button`,`${c}__scroll-button--right`]),variant:$.BUTTON_VARIANT.TERTIARY_PURPLE,tabIndex:-1,iconOnly:!0,onClick:()=>{V(S.RIGHT)},children:e.jsx(W.n,{className:j(`${c}__scroll-button-icon`),size:"md"})})]})}),e.jsx("div",{tabIndex:-1,"aria-labelledby":`stepper-trigger-button-${p}`,ref:g,style:{outline:"none"},children:e.jsx("div",{"aria-live":"polite",children:l.Children.map(b,(f,w)=>e.jsx("div",{className:j({[`${c}__hidden`]:w!==p}),hidden:w!==p,children:f}))})})]})};B.Content=te;B.displayName="Stepper";exports.Stepper=B;
2
- //# sourceMappingURL=stepper-DYjJgEHL.js.map
1
+ "use strict";const e=require("react/jsx-runtime"),l=require("react"),$=require("./button-BxdChrq-.js"),M=require("./chevron-left.es-B0vPg5XM.js"),W=require("./chevron-right.es-Bv376M3o.js"),I=require("./index-BVmlsxuF.js"),x=require("./index-CoR7YA3H.js"),T=require("./bind-DeUYJ6m9.js"),J=require("./tooltip-eUP35j3v.js"),K=require("./checkmark.es-lYntWFA3.js"),Q={PRIMARY:"primary"},L={SMALL_SCREEN:"small-screen",LARGE_SCREEN:"large-screen",ALWAYS:"always"},X={"purpur-stepper__nav-container":"_purpur-stepper__nav-container_1rouo_1","purpur-stepper__nav":"_purpur-stepper__nav_1rouo_1","purpur-stepper":"_purpur-stepper_1rouo_1","purpur-stepper__scroll-button":"_purpur-stepper__scroll-button_1rouo_7","purpur-stepper__scroll-button--left":"_purpur-stepper__scroll-button--left_1rouo_18","purpur-stepper__scroll-button--right":"_purpur-stepper__scroll-button--right_1rouo_21","purpur-stepper__scroll-button-icon":"_purpur-stepper__scroll-button-icon_1rouo_24","purpur-stepper__hidden":"_purpur-stepper__hidden_1rouo_27"},Z={"purpur-stepper-container":"_purpur-stepper-container_162zw_1","purpur-stepper-container__inner--align-with-grid":"_purpur-stepper-container__inner--align-with-grid_162zw_5","purpur-stepper-container--primary":"_purpur-stepper-container--primary_162zw_18","purpur-stepper-container--secondary":"_purpur-stepper-container--secondary_162zw_21"},O=T.c.bind(Z),v="purpur-stepper-container",ee=({["data-testid"]:t="purpur-stepper-container",children:r,className:s,alignWithGrid:n,variant:o,...p})=>{const h=O(s,v,{[`${v}--${o}`]:o,[`${v}--align-with-grid`]:n});return e.jsx("div",{className:h,"data-testid":t,...p,children:e.jsx("div",{className:O(`${v}__inner`,{[`${v}__inner--align-with-grid`]:n}),children:r})})},te=l.forwardRef(({children:t,...r},s)=>{const{finished:n,...o}=r;return e.jsx("div",{...o,ref:s,children:t})}),re=t=>!!t&&l.isValidElement(t)&&!!t.props.label,se={"purpur-stepper-button":"_purpur-stepper-button_wjiph_1","purpur-stepper-button__trigger-outline":"_purpur-stepper-button__trigger-outline_wjiph_21","purpur-stepper-button--first":"_purpur-stepper-button--first_wjiph_33","purpur-stepper-button--current":"_purpur-stepper-button--current_wjiph_33","purpur-stepper-button--middle":"_purpur-stepper-button--middle_wjiph_38","purpur-stepper-button--last":"_purpur-stepper-button--last_wjiph_48","purpur-stepper-button--visibility-small-screen":"_purpur-stepper-button--visibility-small-screen_wjiph_58","purpur-stepper-button--visibility-large-screen":"_purpur-stepper-button--visibility-large-screen_wjiph_66","purpur-stepper-button__icon":"_purpur-stepper-button__icon_wjiph_90","purpur-stepper-button__step-number":"_purpur-stepper-button__step-number_wjiph_97","purpur-stepper-button__step-number--current":"_purpur-stepper-button__step-number--current_wjiph_108","purpur-stepper-button__step-number--disabled":"_purpur-stepper-button__step-number--disabled_wjiph_112","purpur-stepper-button__step-label":"_purpur-stepper-button__step-label_wjiph_117","arrow-forward":"_arrow-forward_wjiph_121","purpur-stepper-button--primary":"_purpur-stepper-button--primary_wjiph_133","purpur-stepper-button--disabled":"_purpur-stepper-button--disabled_wjiph_136","purpur-stepper-button--secondary":"_purpur-stepper-button--secondary_wjiph_142","arrow-tail":"_arrow-tail_wjiph_152","sr-only--lg-down":"_sr-only--lg-down_wjiph_171"},y=T.c.bind(se),d="purpur-stepper-button",ne=({["data-testid"]:t,current:r,disabled:s,stepNumber:n})=>e.jsx("div",{"data-testid":t,className:y([`${d}__step-number`,{[`${d}__step-number--current`]:r},{[`${d}__step-number--disabled`]:s}]),children:n}),A=l.forwardRef(({className:t,["data-testid"]:r,variant:s,step:n,indexOfLastItem:o,index:p,currentStepIndex:h,whenToBeVisible:m,handleStepChange:u,handleStepFocus:a,completedStepLabel:i,..._},b)=>{const R=p===0?"first":p===o?"last":"middle",g=p===h;return e.jsx(I.Item,{asChild:!0,children:e.jsx($.Button,{..._,ref:b,className:y(t,d,`${d}--${R}`,`${d}--${s}`,`${d}--visibility-${m}`,{[`${d}--current`]:g},{[`${d}--disabled`]:n.disabled},{"arrow-tail":R!=="first"},{"arrow-forward":R!=="last"}),id:`stepper-trigger-button-${p}`,variant:$.BUTTON_VARIANT.TERTIARY_PURPLE,"data-testid":`${r}-step-trigger-item-${p}`,disabled:n.disabled,"aria-current":g&&"step","aria-label":n.finished&&!g?[n.label,i].filter(Boolean).join(", "):void 0,onClick:E=>u(E,p),onFocus:a,children:e.jsxs("span",{className:y(`${d}__trigger-outline`),children:[n.finished&&!g?e.jsx(K.a,{className:y(`${d}__icon`),"data-testid":`${r}-step-finished-icon`,size:"sm"}):e.jsx(ne,{"data-testid":`${r}-step-number`,current:g,disabled:n.disabled,stepNumber:p+1}),e.jsx("span",{className:y(`${d}__step-label`,{"sr-only--lg-down":!g}),children:n.label})]})})})}),pe={"purpur-stepper-nav-items__list":"_purpur-stepper-nav-items__list_lgkh0_1","purpur-stepper-nav-items__list-item":"_purpur-stepper-nav-items__list-item_lgkh0_7","purpur-stepper-nav-items__list-item--current":"_purpur-stepper-nav-items__list-item--current_lgkh0_25","purpur-stepper-nav-items__tooltip-content":"_purpur-stepper-nav-items__tooltip-content_lgkh0_31","purpur-stepper-nav-items__tooltip-trigger-item-container":"_purpur-stepper-nav-items__tooltip-trigger-item-container_lgkh0_34"},C=T.c.bind(pe),N="purpur-stepper-nav-items",ie=l.forwardRef(({["data-testid"]:t,variant:r,handleStepChange:s,handleStepFocus:n,steps:o,firstStepRef:p,lastStepRef:h,currentStepIndex:m,completedStepLabel:u},a)=>{const i=o.map((_,b)=>{const R=_.disabled?e.jsx("span",{className:C(`${N}__tooltip-trigger-item-container`),children:e.jsx(A,{"data-testid":`${t}-disabled-sm`,variant:r,step:_,indexOfLastItem:o.length-1,index:b,currentStepIndex:m,whenToBeVisible:L.SMALL_SCREEN,completedStepLabel:u,handleStepChange:s,handleStepFocus:n})}):null;return e.jsx("li",{className:C(`${N}__list-item`,{[`${N}__list-item--current`]:b===m}),ref:b===0?p:b===o.length-1?h:null,children:_.disabled?e.jsxs(e.Fragment,{children:[e.jsx(J.Tooltip,{contentClassName:C(`${N}__tooltip-content`),triggerElement:R,children:_.label}),e.jsx(A,{"data-testid":`${t}-disabled-lg`,variant:r,step:_,indexOfLastItem:o.length-1,index:b,currentStepIndex:m,whenToBeVisible:L.LARGE_SCREEN,completedStepLabel:u,handleStepChange:s,handleStepFocus:n})]}):e.jsx(A,{"data-testid":t,variant:r,step:_,indexOfLastItem:o.length-1,index:b,currentStepIndex:m,whenToBeVisible:L.ALWAYS,completedStepLabel:u,handleStepChange:s,handleStepFocus:n})},_.label)});return e.jsx(I.Root,{loop:!1,dir:"ltr",children:e.jsx("ol",{ref:a,className:C(`${N}__list`),children:i})})}),oe=t=>{const r=l.useRef(!0),s=l.useRef(null);return l.useEffect(()=>{!r.current&&s.current!==null&&s.current.focus(),r.current=!1},[t]),{contentRef:s}},S={LEFT:"left",RIGHT:"right"},le=()=>{const t=l.useRef(null),r=l.useRef(null),s=l.useRef(null),[n,o]=l.useState(!1),[p,h]=l.useState(!1),m=u=>{if(!t.current)return;const a=t.current,i=a.clientWidth,_=a.scrollLeft;u===S.LEFT&&a.scroll({behavior:"smooth",left:_-i/2}),u===S.RIGHT&&a.scroll({behavior:"smooth",left:_+i/2})};return l.useEffect(()=>{if(r.current&&s.current&&t.current){const u=new IntersectionObserver(a=>{for(const i of a){if(i.target===r.current){i.isIntersecting?o(!1):o(!0);continue}i.target===s.current&&(i.isIntersecting?h(!1):h(!0))}},{root:t.current,threshold:.95});return u.observe(r.current),u.observe(s.current),()=>u.disconnect()}},[r,s,t]),{scrollContainer:t,firstStepRef:r,lastStepRef:s,displayLeftScrollButton:n,displayRightScrollButton:p,handleHorizontalScroll:m}},j=T.c.bind(X),c="purpur-stepper",B=({["aria-label"]:t,["data-testid"]:r,children:s,className:n,completedStepLabel:o,currentStepIndex:p=0,onStepChange:h,alignWithGrid:m=!1,leftScrollButtonAriaLabel:u,rightScrollButtonAriaLabel:a,variant:i=Q.PRIMARY,..._})=>{const b=l.Children.toArray(s).filter(re),R=l.Children.map(b,f=>{const{disabled:w,finished:D,label:G}=f.props;return{disabled:w??!1,finished:D??!1,label:G}}),{contentRef:g}=oe(p),{scrollContainer:E,firstStepRef:q,lastStepRef:z,displayLeftScrollButton:P,displayRightScrollButton:Y,handleHorizontalScroll:V}=le(),U=j([n,c,{[`${c}--${i}`]:i}]),k=f=>{f.target.scrollIntoView({behavior:"smooth",block:"nearest",inline:"center"})},F=(f,w)=>{f.preventDefault(),k(f),h(w)},H=f=>{k(f)};return e.jsxs("div",{className:U,..._,children:[e.jsx(ee,{variant:i,alignWithGrid:m,children:e.jsxs("div",{className:j(`${c}__nav-container`),children:[e.jsxs(x.Root,{children:[e.jsx(x.Viewport,{ref:E,children:e.jsx("div",{"aria-label":t,"data-testid":r,className:j([`${c}__nav`,{[`${c}__nav--${i}`]:i}]),children:e.jsx(I.Root,{loop:!1,dir:"ltr",children:e.jsx(ie,{"data-testid":r,variant:i,firstStepRef:q,lastStepRef:z,steps:R,currentStepIndex:p,handleStepChange:F,handleStepFocus:H,completedStepLabel:o})})})}),e.jsx(x.Scrollbar,{orientation:"horizontal",children:e.jsx(x.Thumb,{})})]}),P&&e.jsx($.Button,{"aria-label":u,className:j([`${c}__scroll-button`,`${c}__scroll-button--left`]),variant:$.BUTTON_VARIANT.TERTIARY_PURPLE,tabIndex:-1,iconOnly:!0,onClick:()=>{V(S.LEFT)},children:e.jsx(M.l,{className:j(`${c}__scroll-button-icon`),size:"md"})}),Y&&e.jsx($.Button,{"aria-label":a,className:j([`${c}__scroll-button`,`${c}__scroll-button--right`]),variant:$.BUTTON_VARIANT.TERTIARY_PURPLE,tabIndex:-1,iconOnly:!0,onClick:()=>{V(S.RIGHT)},children:e.jsx(W.n,{className:j(`${c}__scroll-button-icon`),size:"md"})})]})}),e.jsx("div",{tabIndex:-1,"aria-labelledby":`stepper-trigger-button-${p}`,ref:g,style:{outline:"none"},children:e.jsx("div",{"aria-live":"polite",children:l.Children.map(b,(f,w)=>e.jsx("div",{className:j({[`${c}__hidden`]:w!==p}),hidden:w!==p,children:f}))})})]})};B.Content=te;B.displayName="Stepper";exports.Stepper=B;
2
+ //# sourceMappingURL=stepper-BaoOY4Ea.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stepper-DYjJgEHL.js","sources":["../../../components/stepper/src/constants.ts","../../../components/stepper/src/stepper-container.tsx","../../../components/stepper/src/stepper-content.tsx","../../../components/stepper/src/stepper-button.tsx","../../../components/stepper/src/stepper-nav-items.tsx","../../../components/stepper/src/use-content-focus.hook.ts","../../../components/stepper/src/use-scroll-buttons.hook.ts","../../../components/stepper/src/stepper.tsx"],"sourcesContent":["export const STEPPER_VARIANT = {\n PRIMARY: \"primary\",\n SECONDARY: \"secondary\",\n} as const;\n\nexport const VISIBILITY_STATES = {\n SMALL_SCREEN: \"small-screen\",\n LARGE_SCREEN: \"large-screen\",\n ALWAYS: \"always\",\n} as const;\n","import React, { type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./stepper-container.module.scss\";\nimport { type StepperVariant } from \"./types\";\n\nconst cx = c.bind(styles);\n\nexport type StepperContainerProps = Omit<BaseProps, \"children\"> & {\n children: ReactNode;\n alignWithGrid: boolean;\n variant: StepperVariant;\n};\n\nconst rootClassName = \"purpur-stepper-container\";\n\nexport const StepperContainer = ({\n [\"data-testid\"]: dataTestId = \"purpur-stepper-container\",\n children,\n className,\n alignWithGrid,\n variant,\n ...props\n}: StepperContainerProps) => {\n const classes: string = cx(className, rootClassName, {\n [`${rootClassName}--${variant}`]: variant,\n [`${rootClassName}--align-with-grid`]: alignWithGrid,\n });\n\n return (\n <div className={classes} data-testid={dataTestId} {...props}>\n <div\n className={cx(`${rootClassName}__inner`, {\n [`${rootClassName}__inner--align-with-grid`]: alignWithGrid,\n })}\n >\n {children}\n </div>\n </div>\n );\n};\n","import React, { forwardRef, isValidElement, type ReactElement, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\n\nimport { type Optional, type Step } from \"./types\";\n\nexport type StepperContentProps = Omit<BaseProps, \"children\"> & {\n children: ReactNode;\n} & Optional<Step, \"disabled\" | \"finished\">;\n\nexport const StepperContent = forwardRef<HTMLDivElement, StepperContentProps>(\n ({ children, ...props }, ref) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { finished, ...rest } = props;\n return (\n <div {...rest} ref={ref}>\n {children}\n </div>\n );\n }\n);\n\nexport const isStepperContent = (child?: ReactNode): child is ReactElement<StepperContentProps> =>\n !!child && isValidElement<StepperContentProps>(child) && !!child.props.label;\n","import React, { forwardRef } from \"react\";\nimport { Button, BUTTON_VARIANT } from \"@purpur/button\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { IconCheckmark } from \"@purpur/icon/checkmark\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./stepper-button.module.scss\";\nimport {\n type HandleStepChangeFunction,\n type HandleStepFocusFunction,\n type Step,\n type StepperVariant,\n type VisibilityStates,\n} from \"./types\";\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-stepper-button\";\n\nexport type StepNumberProps = {\n current: boolean;\n disabled: boolean;\n stepNumber: number;\n [\"data-testid\"]?: string;\n};\n\nconst StepNumber = ({\n [\"data-testid\"]: dataTestId,\n current,\n disabled,\n stepNumber,\n}: StepNumberProps) => {\n return (\n <div\n data-testid={dataTestId}\n className={cx([\n `${rootClassName}__step-number`,\n {\n [`${rootClassName}__step-number--current`]: current,\n },\n {\n [`${rootClassName}__step-number--disabled`]: disabled,\n },\n ])}\n >\n {stepNumber}\n </div>\n );\n};\n\nexport type StepperButtonProps = Omit<BaseProps<\"button\">, \"children\"> & {\n variant: StepperVariant;\n step: Step;\n currentStepIndex: number;\n index: number;\n indexOfLastItem: number;\n whenToBeVisible: VisibilityStates;\n handleStepChange: HandleStepChangeFunction;\n handleStepFocus: HandleStepFocusFunction;\n completedStepLabel: string;\n};\n\nexport const StepperButton = forwardRef<HTMLButtonElement, StepperButtonProps>(\n (\n {\n className,\n [\"data-testid\"]: dataTestId,\n variant,\n step,\n indexOfLastItem,\n index,\n currentStepIndex,\n whenToBeVisible,\n handleStepChange,\n handleStepFocus,\n completedStepLabel,\n ...props\n },\n ref\n ) => {\n const placement = index === 0 ? \"first\" : index === indexOfLastItem ? \"last\" : \"middle\";\n const isCurrentStep = index === currentStepIndex;\n return (\n <RovingFocusGroup.Item asChild>\n <Button\n {...props}\n ref={ref}\n className={cx(\n className,\n rootClassName,\n `${rootClassName}--${placement}`,\n `${rootClassName}--${variant}`,\n `${rootClassName}--visibility-${whenToBeVisible}`,\n {\n [`${rootClassName}--current`]: isCurrentStep,\n },\n {\n [`${rootClassName}--disabled`]: step.disabled,\n },\n {\n [\"arrow-tail\"]: placement !== \"first\",\n },\n {\n [\"arrow-forward\"]: placement !== \"last\",\n }\n )}\n id={`stepper-trigger-button-${index}`}\n variant={BUTTON_VARIANT.TERTIARY_PURPLE}\n data-testid={`${dataTestId}-step-trigger-item-${index}`}\n disabled={step.disabled}\n aria-current={isCurrentStep && \"step\"}\n aria-label={\n step.finished && !isCurrentStep\n ? [step.label, completedStepLabel].filter(Boolean).join(\", \")\n : undefined\n }\n onClick={(e) => handleStepChange(e, index)}\n onFocus={handleStepFocus}\n >\n <span className={cx(`${rootClassName}__trigger-outline`)}>\n {step.finished && !isCurrentStep ? (\n <IconCheckmark\n className={cx(`${rootClassName}__icon`)}\n data-testid={`${dataTestId}-step-finished-icon`}\n size=\"sm\"\n />\n ) : (\n <StepNumber\n data-testid={`${dataTestId}-step-number`}\n current={isCurrentStep}\n disabled={step.disabled}\n stepNumber={index + 1}\n />\n )}\n <span\n className={cx(`${rootClassName}__step-label`, {\n [`sr-only--lg-down`]: !isCurrentStep,\n })}\n >\n {step.label}\n </span>\n </span>\n </Button>\n </RovingFocusGroup.Item>\n );\n }\n);\n","import React, { forwardRef, type RefObject } from \"react\";\nimport { Tooltip } from \"@purpur/tooltip\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport c from \"classnames/bind\";\n\nimport { VISIBILITY_STATES } from \"./constants\";\nimport { StepperButton } from \"./stepper-button\";\nimport styles from \"./stepper-nav-items.module.scss\";\nimport {\n type HandleStepChangeFunction,\n type HandleStepFocusFunction,\n type Step,\n type StepperVariant,\n} from \"./types\";\n\nconst cx = c.bind(styles);\n\nconst rootClassName = \"purpur-stepper-nav-items\";\n\nexport type StepperNavItemsProps = {\n variant: StepperVariant;\n [\"data-testid\"]?: string;\n firstStepRef: RefObject<HTMLLIElement | null>;\n lastStepRef: RefObject<HTMLLIElement | null>;\n steps: Step[];\n currentStepIndex: number;\n handleStepChange: HandleStepChangeFunction;\n handleStepFocus: HandleStepFocusFunction;\n completedStepLabel: string;\n};\n\nexport const StepperNavItems = forwardRef<HTMLOListElement, StepperNavItemsProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n variant,\n handleStepChange,\n handleStepFocus,\n steps,\n firstStepRef,\n lastStepRef,\n currentStepIndex,\n completedStepLabel,\n },\n ref\n ) => {\n const stepListItems = steps.map((step: Step, index: number) => {\n const tooltipTriggerItem = step.disabled ? (\n <span className={cx(`${rootClassName}__tooltip-trigger-item-container`)}>\n <StepperButton\n data-testid={`${dataTestId}-disabled-sm`}\n variant={variant}\n step={step}\n indexOfLastItem={steps.length - 1}\n index={index}\n currentStepIndex={currentStepIndex}\n whenToBeVisible={VISIBILITY_STATES.SMALL_SCREEN}\n completedStepLabel={completedStepLabel}\n handleStepChange={handleStepChange}\n handleStepFocus={handleStepFocus}\n />\n </span>\n ) : null;\n\n return (\n <li\n className={cx(`${rootClassName}__list-item`, {\n [`${rootClassName}__list-item--current`]: index === currentStepIndex,\n })}\n ref={index === 0 ? firstStepRef : index === steps.length - 1 ? lastStepRef : null}\n key={step.label}\n >\n {step.disabled ? (\n <>\n <Tooltip\n contentClassName={cx(`${rootClassName}__tooltip-content`)}\n triggerElement={tooltipTriggerItem}\n >\n {step.label}\n </Tooltip>\n <StepperButton\n data-testid={`${dataTestId}-disabled-lg`}\n variant={variant}\n step={step}\n indexOfLastItem={steps.length - 1}\n index={index}\n currentStepIndex={currentStepIndex}\n whenToBeVisible={VISIBILITY_STATES.LARGE_SCREEN}\n completedStepLabel={completedStepLabel}\n handleStepChange={handleStepChange}\n handleStepFocus={handleStepFocus}\n />\n </>\n ) : (\n <StepperButton\n data-testid={dataTestId}\n variant={variant}\n step={step}\n indexOfLastItem={steps.length - 1}\n index={index}\n currentStepIndex={currentStepIndex}\n whenToBeVisible={VISIBILITY_STATES.ALWAYS}\n completedStepLabel={completedStepLabel}\n handleStepChange={handleStepChange}\n handleStepFocus={handleStepFocus}\n />\n )}\n </li>\n );\n });\n return (\n <RovingFocusGroup.Root loop={false} dir=\"ltr\">\n <ol ref={ref} className={cx(`${rootClassName}__list`)}>\n {stepListItems}\n </ol>\n </RovingFocusGroup.Root>\n );\n }\n);\n","import { type RefObject, useEffect, useRef } from \"react\";\n\ninterface UseContentFocusHook<T extends HTMLElement> {\n contentRef: RefObject<T | null>;\n}\n\nexport const useContentFocus = <T extends HTMLElement>(\n currentStepIndex: number\n): UseContentFocusHook<T> => {\n const firstLoad = useRef<boolean>(true);\n const contentRef = useRef<T | null>(null);\n\n useEffect(() => {\n if (!firstLoad.current && contentRef.current !== null) {\n contentRef.current.focus();\n }\n firstLoad.current = false;\n }, [currentStepIndex]);\n\n return {\n contentRef,\n };\n};\n","import { type RefObject, useEffect, useRef, useState } from \"react\";\n\nexport const SCROLL_DIRECTION = {\n LEFT: \"left\",\n RIGHT: \"right\",\n} as const;\n\nexport type ScrollDirection = (typeof SCROLL_DIRECTION)[keyof typeof SCROLL_DIRECTION];\n\nexport type UseScrollHook<ContainerElement, WatchedElement> = {\n scrollContainer: RefObject<ContainerElement | null>;\n firstStepRef: RefObject<WatchedElement | null>;\n lastStepRef: RefObject<WatchedElement | null>;\n displayLeftScrollButton: boolean;\n displayRightScrollButton: boolean;\n handleHorizontalScroll: (dir: ScrollDirection) => void;\n};\n\nexport const useScrollButtons = <\n ContainerElement extends HTMLElement,\n WatchedElement extends HTMLElement\n>(): UseScrollHook<ContainerElement, WatchedElement> => {\n const scrollContainer = useRef<ContainerElement | null>(null);\n const firstStepRef = useRef<WatchedElement | null>(null);\n const lastStepRef = useRef<WatchedElement | null>(null);\n const [displayLeftScrollButton, setDisplayLeftScrollButton] = useState(false);\n const [displayRightScrollButton, setDisplayRightScrollButton] = useState(false);\n\n const handleHorizontalScroll = (dir: ScrollDirection): void => {\n if (!scrollContainer.current) {\n return;\n }\n const scrollableContainer = scrollContainer.current;\n const scrollableContainerWidth = scrollableContainer.clientWidth;\n const currentScrollLeft = scrollableContainer.scrollLeft;\n if (dir === SCROLL_DIRECTION.LEFT) {\n scrollableContainer.scroll({\n behavior: \"smooth\",\n left: currentScrollLeft - scrollableContainerWidth / 2,\n });\n }\n if (dir === SCROLL_DIRECTION.RIGHT) {\n scrollableContainer.scroll({\n behavior: \"smooth\",\n left: currentScrollLeft + scrollableContainerWidth / 2,\n });\n }\n };\n\n useEffect(() => {\n if (firstStepRef.current && lastStepRef.current && scrollContainer.current) {\n const observer: IntersectionObserver = new IntersectionObserver(\n (entries: IntersectionObserverEntry[]) => {\n for (const entry of entries) {\n if (entry.target === firstStepRef.current) {\n if (entry.isIntersecting) {\n setDisplayLeftScrollButton(false);\n } else {\n setDisplayLeftScrollButton(true);\n }\n continue;\n }\n if (entry.target === lastStepRef.current) {\n if (entry.isIntersecting) {\n setDisplayRightScrollButton(false);\n } else {\n setDisplayRightScrollButton(true);\n }\n }\n }\n },\n {\n root: scrollContainer.current,\n threshold: 0.95,\n }\n );\n\n observer.observe(firstStepRef.current);\n observer.observe(lastStepRef.current);\n\n return () => observer.disconnect();\n }\n return undefined;\n }, [firstStepRef, lastStepRef, scrollContainer]);\n\n return {\n scrollContainer,\n firstStepRef,\n lastStepRef,\n displayLeftScrollButton,\n displayRightScrollButton,\n handleHorizontalScroll,\n };\n};\n","import React, { Children, type ReactElement } from \"react\";\nimport { Button, BUTTON_VARIANT } from \"@purpur/button\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { IconChevronLeft } from \"@purpur/icon/chevron-left\";\nimport { IconChevronRight } from \"@purpur/icon/chevron-right\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport * as ScrollArea from \"@radix-ui/react-scroll-area\";\nimport c from \"classnames/bind\";\n\nimport { STEPPER_VARIANT } from \"./constants\";\nimport styles from \"./stepper.module.scss\";\nimport { StepperContainer } from \"./stepper-container\";\nimport { isStepperContent, StepperContent } from \"./stepper-content\";\nimport { StepperNavItems } from \"./stepper-nav-items\";\nimport { type Step, type StepChangeFunction, type StepperVariant } from \"./types\";\nimport { useContentFocus } from \"./use-content-focus.hook\";\nimport { SCROLL_DIRECTION, useScrollButtons } from \"./use-scroll-buttons.hook\";\n\nconst cx = c.bind(styles);\n\nconst rootClassName = \"purpur-stepper\";\n\nexport type StepperProps = Omit<BaseProps, \"children\"> & {\n children: Array<ReactElement<typeof StepperContent>> | ReactElement<typeof StepperContent>;\n completedStepLabel: string;\n currentStepIndex: number;\n onStepChange: StepChangeFunction;\n alignWithGrid?: boolean;\n leftScrollButtonAriaLabel: string;\n rightScrollButtonAriaLabel: string;\n variant: StepperVariant;\n};\n\nexport type StepperComponent<P> = React.FunctionComponent<P> & {\n Content: typeof StepperContent;\n};\n\nexport const Stepper: StepperComponent<StepperProps> = ({\n [\"aria-label\"]: ariaLabel,\n [\"data-testid\"]: dataTestId,\n children,\n className,\n completedStepLabel,\n currentStepIndex = 0,\n onStepChange,\n alignWithGrid = false,\n leftScrollButtonAriaLabel,\n rightScrollButtonAriaLabel,\n variant = STEPPER_VARIANT.PRIMARY,\n ...props\n}: StepperProps) => {\n const stepperContentChildren = Children.toArray(children).filter(isStepperContent);\n const steps: Step[] = Children.map(stepperContentChildren, (child) => {\n const { disabled, finished, label } = child.props;\n return {\n disabled: disabled ?? false,\n finished: finished ?? false,\n label,\n };\n });\n const { contentRef } = useContentFocus<HTMLDivElement>(currentStepIndex);\n const {\n scrollContainer,\n firstStepRef,\n lastStepRef,\n displayLeftScrollButton,\n displayRightScrollButton,\n handleHorizontalScroll,\n } = useScrollButtons<HTMLDivElement, HTMLLIElement>();\n\n const classes: string = cx([\n className,\n rootClassName,\n {\n [`${rootClassName}--${variant}`]: variant,\n },\n ]);\n const scrollTriggerIntoView = (e: React.FocusEvent | React.MouseEvent): void => {\n (e.target as HTMLButtonElement).scrollIntoView({\n behavior: \"smooth\",\n block: \"nearest\",\n inline: \"center\",\n });\n };\n\n const handleStepChange = (e: React.MouseEvent, idx: number): void => {\n e.preventDefault();\n scrollTriggerIntoView(e);\n onStepChange(idx);\n };\n\n const handleStepFocus = (e: React.FocusEvent): void => {\n scrollTriggerIntoView(e);\n };\n\n return (\n <div className={classes} {...props}>\n <StepperContainer variant={variant} alignWithGrid={alignWithGrid}>\n <div className={cx(`${rootClassName}__nav-container`)}>\n <ScrollArea.Root>\n <ScrollArea.Viewport ref={scrollContainer}>\n <div\n aria-label={ariaLabel}\n data-testid={dataTestId}\n className={cx([\n `${rootClassName}__nav`,\n {\n [`${rootClassName}__nav--${variant}`]: variant,\n },\n ])}\n >\n <RovingFocusGroup.Root loop={false} dir=\"ltr\">\n <StepperNavItems\n data-testid={dataTestId}\n variant={variant}\n firstStepRef={firstStepRef}\n lastStepRef={lastStepRef}\n steps={steps}\n currentStepIndex={currentStepIndex}\n handleStepChange={handleStepChange}\n handleStepFocus={handleStepFocus}\n completedStepLabel={completedStepLabel}\n />\n </RovingFocusGroup.Root>\n </div>\n </ScrollArea.Viewport>\n <ScrollArea.Scrollbar orientation=\"horizontal\">\n <ScrollArea.Thumb />\n </ScrollArea.Scrollbar>\n </ScrollArea.Root>\n {displayLeftScrollButton && (\n <Button\n aria-label={leftScrollButtonAriaLabel}\n className={cx([\n `${rootClassName}__scroll-button`,\n `${rootClassName}__scroll-button--left`,\n ])}\n variant={BUTTON_VARIANT.TERTIARY_PURPLE}\n tabIndex={-1}\n iconOnly\n onClick={() => {\n handleHorizontalScroll(SCROLL_DIRECTION.LEFT);\n }}\n >\n <IconChevronLeft className={cx(`${rootClassName}__scroll-button-icon`)} size=\"md\" />\n </Button>\n )}\n {displayRightScrollButton && (\n <Button\n aria-label={rightScrollButtonAriaLabel}\n className={cx([\n `${rootClassName}__scroll-button`,\n `${rootClassName}__scroll-button--right`,\n ])}\n variant={BUTTON_VARIANT.TERTIARY_PURPLE}\n tabIndex={-1}\n iconOnly\n onClick={() => {\n handleHorizontalScroll(SCROLL_DIRECTION.RIGHT);\n }}\n >\n <IconChevronRight className={cx(`${rootClassName}__scroll-button-icon`)} size=\"md\" />\n </Button>\n )}\n </div>\n </StepperContainer>\n <div\n tabIndex={-1}\n aria-labelledby={`stepper-trigger-button-${currentStepIndex}`}\n ref={contentRef}\n style={{ outline: \"none\" }}\n >\n <div aria-live=\"polite\">\n {Children.map(stepperContentChildren, (child, index: number) => (\n <div\n className={cx({\n [`${rootClassName}__hidden`]: index !== currentStepIndex,\n })}\n hidden={index !== currentStepIndex}\n >\n {child}\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n};\n\nStepper.Content = StepperContent;\n\nStepper.displayName = \"Stepper\";\n"],"names":["STEPPER_VARIANT","VISIBILITY_STATES","cx","c","styles","rootClassName","StepperContainer","dataTestId","children","className","alignWithGrid","variant","props","classes","jsx","StepperContent","forwardRef","ref","finished","rest","isStepperContent","child","isValidElement","StepNumber","current","disabled","stepNumber","StepperButton","step","indexOfLastItem","index","currentStepIndex","whenToBeVisible","handleStepChange","handleStepFocus","completedStepLabel","placement","isCurrentStep","RovingFocusGroup.Item","Button","BUTTON_VARIANT","e","IconCheckmark","StepperNavItems","steps","firstStepRef","lastStepRef","stepListItems","tooltipTriggerItem","jsxs","Fragment","Tooltip","RovingFocusGroup.Root","useContentFocus","firstLoad","useRef","contentRef","useEffect","SCROLL_DIRECTION","useScrollButtons","scrollContainer","displayLeftScrollButton","setDisplayLeftScrollButton","useState","displayRightScrollButton","setDisplayRightScrollButton","handleHorizontalScroll","dir","scrollableContainer","scrollableContainerWidth","currentScrollLeft","observer","entries","entry","Stepper","ariaLabel","onStepChange","leftScrollButtonAriaLabel","rightScrollButtonAriaLabel","stepperContentChildren","Children","label","scrollTriggerIntoView","idx","ScrollArea.Root","ScrollArea.Viewport","ScrollArea.Scrollbar","ScrollArea.Thumb","IconChevronLeft","IconChevronRight"],"mappings":"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"}
1
+ {"version":3,"file":"stepper-BaoOY4Ea.js","sources":["../../../components/stepper/src/constants.ts","../../../components/stepper/src/stepper-container.tsx","../../../components/stepper/src/stepper-content.tsx","../../../components/stepper/src/stepper-button.tsx","../../../components/stepper/src/stepper-nav-items.tsx","../../../components/stepper/src/use-content-focus.hook.ts","../../../components/stepper/src/use-scroll-buttons.hook.ts","../../../components/stepper/src/stepper.tsx"],"sourcesContent":["export const STEPPER_VARIANT = {\n PRIMARY: \"primary\",\n SECONDARY: \"secondary\",\n} as const;\n\nexport const VISIBILITY_STATES = {\n SMALL_SCREEN: \"small-screen\",\n LARGE_SCREEN: \"large-screen\",\n ALWAYS: \"always\",\n} as const;\n","import React, { type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./stepper-container.module.scss\";\nimport { type StepperVariant } from \"./types\";\n\nconst cx = c.bind(styles);\n\nexport type StepperContainerProps = Omit<BaseProps, \"children\"> & {\n children: ReactNode;\n alignWithGrid: boolean;\n variant: StepperVariant;\n};\n\nconst rootClassName = \"purpur-stepper-container\";\n\nexport const StepperContainer = ({\n [\"data-testid\"]: dataTestId = \"purpur-stepper-container\",\n children,\n className,\n alignWithGrid,\n variant,\n ...props\n}: StepperContainerProps) => {\n const classes: string = cx(className, rootClassName, {\n [`${rootClassName}--${variant}`]: variant,\n [`${rootClassName}--align-with-grid`]: alignWithGrid,\n });\n\n return (\n <div className={classes} data-testid={dataTestId} {...props}>\n <div\n className={cx(`${rootClassName}__inner`, {\n [`${rootClassName}__inner--align-with-grid`]: alignWithGrid,\n })}\n >\n {children}\n </div>\n </div>\n );\n};\n","import React, { forwardRef, isValidElement, type ReactElement, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\n\nimport { type Optional, type Step } from \"./types\";\n\nexport type StepperContentProps = Omit<BaseProps, \"children\"> & {\n children: ReactNode;\n} & Optional<Step, \"disabled\" | \"finished\">;\n\nexport const StepperContent = forwardRef<HTMLDivElement, StepperContentProps>(\n ({ children, ...props }, ref) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { finished, ...rest } = props;\n return (\n <div {...rest} ref={ref}>\n {children}\n </div>\n );\n }\n);\n\nexport const isStepperContent = (child?: ReactNode): child is ReactElement<StepperContentProps> =>\n !!child && isValidElement<StepperContentProps>(child) && !!child.props.label;\n","import React, { forwardRef } from \"react\";\nimport { Button, BUTTON_VARIANT } from \"@purpur/button\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { IconCheckmark } from \"@purpur/icon/checkmark\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./stepper-button.module.scss\";\nimport {\n type HandleStepChangeFunction,\n type HandleStepFocusFunction,\n type Step,\n type StepperVariant,\n type VisibilityStates,\n} from \"./types\";\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-stepper-button\";\n\nexport type StepNumberProps = {\n current: boolean;\n disabled: boolean;\n stepNumber: number;\n [\"data-testid\"]?: string;\n};\n\nconst StepNumber = ({\n [\"data-testid\"]: dataTestId,\n current,\n disabled,\n stepNumber,\n}: StepNumberProps) => {\n return (\n <div\n data-testid={dataTestId}\n className={cx([\n `${rootClassName}__step-number`,\n {\n [`${rootClassName}__step-number--current`]: current,\n },\n {\n [`${rootClassName}__step-number--disabled`]: disabled,\n },\n ])}\n >\n {stepNumber}\n </div>\n );\n};\n\nexport type StepperButtonProps = Omit<BaseProps<\"button\">, \"children\"> & {\n variant: StepperVariant;\n step: Step;\n currentStepIndex: number;\n index: number;\n indexOfLastItem: number;\n whenToBeVisible: VisibilityStates;\n handleStepChange: HandleStepChangeFunction;\n handleStepFocus: HandleStepFocusFunction;\n completedStepLabel: string;\n};\n\nexport const StepperButton = forwardRef<HTMLButtonElement, StepperButtonProps>(\n (\n {\n className,\n [\"data-testid\"]: dataTestId,\n variant,\n step,\n indexOfLastItem,\n index,\n currentStepIndex,\n whenToBeVisible,\n handleStepChange,\n handleStepFocus,\n completedStepLabel,\n ...props\n },\n ref\n ) => {\n const placement = index === 0 ? \"first\" : index === indexOfLastItem ? \"last\" : \"middle\";\n const isCurrentStep = index === currentStepIndex;\n return (\n <RovingFocusGroup.Item asChild>\n <Button\n {...props}\n ref={ref}\n className={cx(\n className,\n rootClassName,\n `${rootClassName}--${placement}`,\n `${rootClassName}--${variant}`,\n `${rootClassName}--visibility-${whenToBeVisible}`,\n {\n [`${rootClassName}--current`]: isCurrentStep,\n },\n {\n [`${rootClassName}--disabled`]: step.disabled,\n },\n {\n [\"arrow-tail\"]: placement !== \"first\",\n },\n {\n [\"arrow-forward\"]: placement !== \"last\",\n }\n )}\n id={`stepper-trigger-button-${index}`}\n variant={BUTTON_VARIANT.TERTIARY_PURPLE}\n data-testid={`${dataTestId}-step-trigger-item-${index}`}\n disabled={step.disabled}\n aria-current={isCurrentStep && \"step\"}\n aria-label={\n step.finished && !isCurrentStep\n ? [step.label, completedStepLabel].filter(Boolean).join(\", \")\n : undefined\n }\n onClick={(e) => handleStepChange(e, index)}\n onFocus={handleStepFocus}\n >\n <span className={cx(`${rootClassName}__trigger-outline`)}>\n {step.finished && !isCurrentStep ? (\n <IconCheckmark\n className={cx(`${rootClassName}__icon`)}\n data-testid={`${dataTestId}-step-finished-icon`}\n size=\"sm\"\n />\n ) : (\n <StepNumber\n data-testid={`${dataTestId}-step-number`}\n current={isCurrentStep}\n disabled={step.disabled}\n stepNumber={index + 1}\n />\n )}\n <span\n className={cx(`${rootClassName}__step-label`, {\n [`sr-only--lg-down`]: !isCurrentStep,\n })}\n >\n {step.label}\n </span>\n </span>\n </Button>\n </RovingFocusGroup.Item>\n );\n }\n);\n","import React, { forwardRef, type RefObject } from \"react\";\nimport { Tooltip } from \"@purpur/tooltip\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport c from \"classnames/bind\";\n\nimport { VISIBILITY_STATES } from \"./constants\";\nimport { StepperButton } from \"./stepper-button\";\nimport styles from \"./stepper-nav-items.module.scss\";\nimport {\n type HandleStepChangeFunction,\n type HandleStepFocusFunction,\n type Step,\n type StepperVariant,\n} from \"./types\";\n\nconst cx = c.bind(styles);\n\nconst rootClassName = \"purpur-stepper-nav-items\";\n\nexport type StepperNavItemsProps = {\n variant: StepperVariant;\n [\"data-testid\"]?: string;\n firstStepRef: RefObject<HTMLLIElement | null>;\n lastStepRef: RefObject<HTMLLIElement | null>;\n steps: Step[];\n currentStepIndex: number;\n handleStepChange: HandleStepChangeFunction;\n handleStepFocus: HandleStepFocusFunction;\n completedStepLabel: string;\n};\n\nexport const StepperNavItems = forwardRef<HTMLOListElement, StepperNavItemsProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n variant,\n handleStepChange,\n handleStepFocus,\n steps,\n firstStepRef,\n lastStepRef,\n currentStepIndex,\n completedStepLabel,\n },\n ref\n ) => {\n const stepListItems = steps.map((step: Step, index: number) => {\n const tooltipTriggerItem = step.disabled ? (\n <span className={cx(`${rootClassName}__tooltip-trigger-item-container`)}>\n <StepperButton\n data-testid={`${dataTestId}-disabled-sm`}\n variant={variant}\n step={step}\n indexOfLastItem={steps.length - 1}\n index={index}\n currentStepIndex={currentStepIndex}\n whenToBeVisible={VISIBILITY_STATES.SMALL_SCREEN}\n completedStepLabel={completedStepLabel}\n handleStepChange={handleStepChange}\n handleStepFocus={handleStepFocus}\n />\n </span>\n ) : null;\n\n return (\n <li\n className={cx(`${rootClassName}__list-item`, {\n [`${rootClassName}__list-item--current`]: index === currentStepIndex,\n })}\n ref={index === 0 ? firstStepRef : index === steps.length - 1 ? lastStepRef : null}\n key={step.label}\n >\n {step.disabled ? (\n <>\n <Tooltip\n contentClassName={cx(`${rootClassName}__tooltip-content`)}\n triggerElement={tooltipTriggerItem}\n >\n {step.label}\n </Tooltip>\n <StepperButton\n data-testid={`${dataTestId}-disabled-lg`}\n variant={variant}\n step={step}\n indexOfLastItem={steps.length - 1}\n index={index}\n currentStepIndex={currentStepIndex}\n whenToBeVisible={VISIBILITY_STATES.LARGE_SCREEN}\n completedStepLabel={completedStepLabel}\n handleStepChange={handleStepChange}\n handleStepFocus={handleStepFocus}\n />\n </>\n ) : (\n <StepperButton\n data-testid={dataTestId}\n variant={variant}\n step={step}\n indexOfLastItem={steps.length - 1}\n index={index}\n currentStepIndex={currentStepIndex}\n whenToBeVisible={VISIBILITY_STATES.ALWAYS}\n completedStepLabel={completedStepLabel}\n handleStepChange={handleStepChange}\n handleStepFocus={handleStepFocus}\n />\n )}\n </li>\n );\n });\n return (\n <RovingFocusGroup.Root loop={false} dir=\"ltr\">\n <ol ref={ref} className={cx(`${rootClassName}__list`)}>\n {stepListItems}\n </ol>\n </RovingFocusGroup.Root>\n );\n }\n);\n","import { type RefObject, useEffect, useRef } from \"react\";\n\ninterface UseContentFocusHook<T extends HTMLElement> {\n contentRef: RefObject<T | null>;\n}\n\nexport const useContentFocus = <T extends HTMLElement>(\n currentStepIndex: number\n): UseContentFocusHook<T> => {\n const firstLoad = useRef<boolean>(true);\n const contentRef = useRef<T | null>(null);\n\n useEffect(() => {\n if (!firstLoad.current && contentRef.current !== null) {\n contentRef.current.focus();\n }\n firstLoad.current = false;\n }, [currentStepIndex]);\n\n return {\n contentRef,\n };\n};\n","import { type RefObject, useEffect, useRef, useState } from \"react\";\n\nexport const SCROLL_DIRECTION = {\n LEFT: \"left\",\n RIGHT: \"right\",\n} as const;\n\nexport type ScrollDirection = (typeof SCROLL_DIRECTION)[keyof typeof SCROLL_DIRECTION];\n\nexport type UseScrollHook<ContainerElement, WatchedElement> = {\n scrollContainer: RefObject<ContainerElement | null>;\n firstStepRef: RefObject<WatchedElement | null>;\n lastStepRef: RefObject<WatchedElement | null>;\n displayLeftScrollButton: boolean;\n displayRightScrollButton: boolean;\n handleHorizontalScroll: (dir: ScrollDirection) => void;\n};\n\nexport const useScrollButtons = <\n ContainerElement extends HTMLElement,\n WatchedElement extends HTMLElement\n>(): UseScrollHook<ContainerElement, WatchedElement> => {\n const scrollContainer = useRef<ContainerElement | null>(null);\n const firstStepRef = useRef<WatchedElement | null>(null);\n const lastStepRef = useRef<WatchedElement | null>(null);\n const [displayLeftScrollButton, setDisplayLeftScrollButton] = useState(false);\n const [displayRightScrollButton, setDisplayRightScrollButton] = useState(false);\n\n const handleHorizontalScroll = (dir: ScrollDirection): void => {\n if (!scrollContainer.current) {\n return;\n }\n const scrollableContainer = scrollContainer.current;\n const scrollableContainerWidth = scrollableContainer.clientWidth;\n const currentScrollLeft = scrollableContainer.scrollLeft;\n if (dir === SCROLL_DIRECTION.LEFT) {\n scrollableContainer.scroll({\n behavior: \"smooth\",\n left: currentScrollLeft - scrollableContainerWidth / 2,\n });\n }\n if (dir === SCROLL_DIRECTION.RIGHT) {\n scrollableContainer.scroll({\n behavior: \"smooth\",\n left: currentScrollLeft + scrollableContainerWidth / 2,\n });\n }\n };\n\n useEffect(() => {\n if (firstStepRef.current && lastStepRef.current && scrollContainer.current) {\n const observer: IntersectionObserver = new IntersectionObserver(\n (entries: IntersectionObserverEntry[]) => {\n for (const entry of entries) {\n if (entry.target === firstStepRef.current) {\n if (entry.isIntersecting) {\n setDisplayLeftScrollButton(false);\n } else {\n setDisplayLeftScrollButton(true);\n }\n continue;\n }\n if (entry.target === lastStepRef.current) {\n if (entry.isIntersecting) {\n setDisplayRightScrollButton(false);\n } else {\n setDisplayRightScrollButton(true);\n }\n }\n }\n },\n {\n root: scrollContainer.current,\n threshold: 0.95,\n }\n );\n\n observer.observe(firstStepRef.current);\n observer.observe(lastStepRef.current);\n\n return () => observer.disconnect();\n }\n return undefined;\n }, [firstStepRef, lastStepRef, scrollContainer]);\n\n return {\n scrollContainer,\n firstStepRef,\n lastStepRef,\n displayLeftScrollButton,\n displayRightScrollButton,\n handleHorizontalScroll,\n };\n};\n","import React, { Children, type ReactElement } from \"react\";\nimport { Button, BUTTON_VARIANT } from \"@purpur/button\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { IconChevronLeft } from \"@purpur/icon/chevron-left\";\nimport { IconChevronRight } from \"@purpur/icon/chevron-right\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport * as ScrollArea from \"@radix-ui/react-scroll-area\";\nimport c from \"classnames/bind\";\n\nimport { STEPPER_VARIANT } from \"./constants\";\nimport styles from \"./stepper.module.scss\";\nimport { StepperContainer } from \"./stepper-container\";\nimport { isStepperContent, StepperContent } from \"./stepper-content\";\nimport { StepperNavItems } from \"./stepper-nav-items\";\nimport { type Step, type StepChangeFunction, type StepperVariant } from \"./types\";\nimport { useContentFocus } from \"./use-content-focus.hook\";\nimport { SCROLL_DIRECTION, useScrollButtons } from \"./use-scroll-buttons.hook\";\n\nconst cx = c.bind(styles);\n\nconst rootClassName = \"purpur-stepper\";\n\nexport type StepperProps = Omit<BaseProps, \"children\"> & {\n children: Array<ReactElement<typeof StepperContent>> | ReactElement<typeof StepperContent>;\n completedStepLabel: string;\n currentStepIndex: number;\n onStepChange: StepChangeFunction;\n alignWithGrid?: boolean;\n leftScrollButtonAriaLabel: string;\n rightScrollButtonAriaLabel: string;\n variant: StepperVariant;\n};\n\nexport type StepperComponent<P> = React.FunctionComponent<P> & {\n Content: typeof StepperContent;\n};\n\nexport const Stepper: StepperComponent<StepperProps> = ({\n [\"aria-label\"]: ariaLabel,\n [\"data-testid\"]: dataTestId,\n children,\n className,\n completedStepLabel,\n currentStepIndex = 0,\n onStepChange,\n alignWithGrid = false,\n leftScrollButtonAriaLabel,\n rightScrollButtonAriaLabel,\n variant = STEPPER_VARIANT.PRIMARY,\n ...props\n}: StepperProps) => {\n const stepperContentChildren = Children.toArray(children).filter(isStepperContent);\n const steps: Step[] = Children.map(stepperContentChildren, (child) => {\n const { disabled, finished, label } = child.props;\n return {\n disabled: disabled ?? false,\n finished: finished ?? false,\n label,\n };\n });\n const { contentRef } = useContentFocus<HTMLDivElement>(currentStepIndex);\n const {\n scrollContainer,\n firstStepRef,\n lastStepRef,\n displayLeftScrollButton,\n displayRightScrollButton,\n handleHorizontalScroll,\n } = useScrollButtons<HTMLDivElement, HTMLLIElement>();\n\n const classes: string = cx([\n className,\n rootClassName,\n {\n [`${rootClassName}--${variant}`]: variant,\n },\n ]);\n const scrollTriggerIntoView = (e: React.FocusEvent | React.MouseEvent): void => {\n (e.target as HTMLButtonElement).scrollIntoView({\n behavior: \"smooth\",\n block: \"nearest\",\n inline: \"center\",\n });\n };\n\n const handleStepChange = (e: React.MouseEvent, idx: number): void => {\n e.preventDefault();\n scrollTriggerIntoView(e);\n onStepChange(idx);\n };\n\n const handleStepFocus = (e: React.FocusEvent): void => {\n scrollTriggerIntoView(e);\n };\n\n return (\n <div className={classes} {...props}>\n <StepperContainer variant={variant} alignWithGrid={alignWithGrid}>\n <div className={cx(`${rootClassName}__nav-container`)}>\n <ScrollArea.Root>\n <ScrollArea.Viewport ref={scrollContainer}>\n <div\n aria-label={ariaLabel}\n data-testid={dataTestId}\n className={cx([\n `${rootClassName}__nav`,\n {\n [`${rootClassName}__nav--${variant}`]: variant,\n },\n ])}\n >\n <RovingFocusGroup.Root loop={false} dir=\"ltr\">\n <StepperNavItems\n data-testid={dataTestId}\n variant={variant}\n firstStepRef={firstStepRef}\n lastStepRef={lastStepRef}\n steps={steps}\n currentStepIndex={currentStepIndex}\n handleStepChange={handleStepChange}\n handleStepFocus={handleStepFocus}\n completedStepLabel={completedStepLabel}\n />\n </RovingFocusGroup.Root>\n </div>\n </ScrollArea.Viewport>\n <ScrollArea.Scrollbar orientation=\"horizontal\">\n <ScrollArea.Thumb />\n </ScrollArea.Scrollbar>\n </ScrollArea.Root>\n {displayLeftScrollButton && (\n <Button\n aria-label={leftScrollButtonAriaLabel}\n className={cx([\n `${rootClassName}__scroll-button`,\n `${rootClassName}__scroll-button--left`,\n ])}\n variant={BUTTON_VARIANT.TERTIARY_PURPLE}\n tabIndex={-1}\n iconOnly\n onClick={() => {\n handleHorizontalScroll(SCROLL_DIRECTION.LEFT);\n }}\n >\n <IconChevronLeft className={cx(`${rootClassName}__scroll-button-icon`)} size=\"md\" />\n </Button>\n )}\n {displayRightScrollButton && (\n <Button\n aria-label={rightScrollButtonAriaLabel}\n className={cx([\n `${rootClassName}__scroll-button`,\n `${rootClassName}__scroll-button--right`,\n ])}\n variant={BUTTON_VARIANT.TERTIARY_PURPLE}\n tabIndex={-1}\n iconOnly\n onClick={() => {\n handleHorizontalScroll(SCROLL_DIRECTION.RIGHT);\n }}\n >\n <IconChevronRight className={cx(`${rootClassName}__scroll-button-icon`)} size=\"md\" />\n </Button>\n )}\n </div>\n </StepperContainer>\n <div\n tabIndex={-1}\n aria-labelledby={`stepper-trigger-button-${currentStepIndex}`}\n ref={contentRef}\n style={{ outline: \"none\" }}\n >\n <div aria-live=\"polite\">\n {Children.map(stepperContentChildren, (child, index: number) => (\n <div\n className={cx({\n [`${rootClassName}__hidden`]: index !== currentStepIndex,\n })}\n hidden={index !== currentStepIndex}\n >\n {child}\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n};\n\nStepper.Content = StepperContent;\n\nStepper.displayName = \"Stepper\";\n"],"names":["STEPPER_VARIANT","VISIBILITY_STATES","cx","c","styles","rootClassName","StepperContainer","dataTestId","children","className","alignWithGrid","variant","props","classes","jsx","StepperContent","forwardRef","ref","finished","rest","isStepperContent","child","isValidElement","StepNumber","current","disabled","stepNumber","StepperButton","step","indexOfLastItem","index","currentStepIndex","whenToBeVisible","handleStepChange","handleStepFocus","completedStepLabel","placement","isCurrentStep","RovingFocusGroup.Item","Button","BUTTON_VARIANT","e","IconCheckmark","StepperNavItems","steps","firstStepRef","lastStepRef","stepListItems","tooltipTriggerItem","jsxs","Fragment","Tooltip","RovingFocusGroup.Root","useContentFocus","firstLoad","useRef","contentRef","useEffect","SCROLL_DIRECTION","useScrollButtons","scrollContainer","displayLeftScrollButton","setDisplayLeftScrollButton","useState","displayRightScrollButton","setDisplayRightScrollButton","handleHorizontalScroll","dir","scrollableContainer","scrollableContainerWidth","currentScrollLeft","observer","entries","entry","Stepper","ariaLabel","onStepChange","leftScrollButtonAriaLabel","rightScrollButtonAriaLabel","stepperContentChildren","Children","label","scrollTriggerIntoView","idx","ScrollArea.Root","ScrollArea.Viewport","ScrollArea.Scrollbar","ScrollArea.Thumb","IconChevronLeft","IconChevronRight"],"mappings":"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"}