@anker-in/headless-ui 1.3.41-alpha.1784792113239 → 1.3.41-alpha.1784792494281

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.
@@ -1,2 +1,2 @@
1
- "use strict";"use client";var le=Object.create;var D=Object.defineProperty;var re=Object.getOwnPropertyDescriptor;var ie=Object.getOwnPropertyNames;var se=Object.getPrototypeOf,ne=Object.prototype.hasOwnProperty;var me=(o,i)=>{for(var d in i)D(o,d,{get:i[d],enumerable:!0})},R=(o,i,d,c)=>{if(i&&typeof i=="object"||typeof i=="function")for(let l of ie(i))!ne.call(o,l)&&l!==d&&D(o,l,{get:()=>i[l],enumerable:!(c=re(i,l))||c.enumerable});return o};var ce=(o,i,d)=>(d=o!=null?le(se(o)):{},R(i||!o||!o.__esModule?D(d,"default",{value:o,enumerable:!0}):d,o)),pe=o=>R(D({},"__esModule",{value:!0}),o);var xe={};me(xe,{default:()=>fe});module.exports=pe(xe);var e=require("react/jsx-runtime"),m=require("react"),t=require("../../components/index.js"),p=require("../../helpers/index.js"),de=ce(require("react")),P=require("../../hooks/useExposure.js"),j=require("../AiuiProvider/index.js"),q=require("../../shared/track.js");const T="copy",E="NotifyMeDialog",ue=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,$=({open:o,onOpenChange:i,copy:d,classNames:c,checkboxes:l=[],subscriptionMeta:C,onSubmit:S})=>{const{title:N,subTitle:y,emailLabel:A="Email address",emailPlaceholder:G="your@email.com",submitBtnText:w="Notify Me",errorEmpty:F,errorInvalidEmail:W,errorCheckboxRequired:X,errorSubmit:_="Something went wrong. Please try again.",errorSubmitDetail:J,successTitle:K,successDesc:M,successBtnText:B}=d,H=de.useRef(null),{trackingData:Q}=(0,j.useAiuiContext)();(0,P.useExposure)(H,{componentType:T,componentName:E,componentTitle:N,componentDescription:y});const[b,L]=(0,m.useState)(""),[v,z]=(0,m.useState)(()=>l.map(()=>!1)),[f,g]=(0,m.useState)("idle"),[U,k]=(0,m.useState)(()=>l.map(()=>!1)),[s,x]=(0,m.useState)("idle"),[I,h]=(0,m.useState)(null),V=I?J?.find(a=>a.code===I)?.message??_:_,Y=s!=="loading"&&s!=="success",Z=(0,m.useCallback)(a=>{z(n=>{const r=[...n];return r[a]=!r[a],r}),k(n=>{const r=[...n];return r[a]=!1,r}),f!=="idle"&&g("idle"),s==="error-submit"&&(x("idle"),h(null))},[f,s]),O=(0,m.useCallback)(a=>{L(a.target.value),f!=="idle"&&g("idle"),k(n=>n.some(Boolean)?n.map(()=>!1):n),s==="error-submit"&&(x("idle"),h(null))},[f,s]),ee=(0,m.useCallback)(async()=>{(0,q.gaTrack)({event:"ga4Event",event_name:"component_click",event_parameters:{page_group:Q.pageGroup||"Home Page",component_type:T,component_name:E,button_name:w,component_title:N,component_description:y||""}});let a=!1;b.trim()?ue.test(b.trim())?g("idle"):(g("error-format"),a=!0):(g("error-empty"),a=!0);const n=l.map((r,u)=>r.label&&r.required&&!v[u]?(a=!0,!0):!1);if(k(n),!a){x("loading");try{const r=l.map((u,oe)=>u.checkbox_id!==void 0?{checkbox_id:u.checkbox_id,checked:v[oe]}:null).filter(u=>u!==null);await S({email:b.trim(),checkedItems:r,meta:C}),x("success")}catch(r){const u=r&&typeof r=="object"&&"code"in r?String(r.code):null;h(u),x("error-submit")}}},[b,l,v,C,S]);(0,m.useEffect)(()=>{if(s!=="error-submit")return;const a=setTimeout(()=>{x("idle"),h(null)},3e3);return()=>clearTimeout(a)},[s]);const te=(0,m.useCallback)(a=>{a||(L(""),z(l.map(()=>!1)),g("idle"),k(l.map(()=>!1)),x("idle"),h(null)),i(a)},[l,i]),ae=l.some(a=>a.label);return(0,e.jsx)(t.Dialog,{open:o,onOpenChange:te,children:(0,e.jsxs)(t.DialogContent,{ref:H,"aria-describedby":"notify-me-content",className:(0,p.cn)("laptop:max-w-[480px] laptop:[&_.dialog-close-icon]:size-6 laptop:gap-8 rounded-box laptop:p-8 max-h-[90vh] w-[calc(100%-32px)] gap-6 overflow-y-auto bg-white p-6 [&_.dialog-close-icon]:size-5",c?.root),children:[s!=="success"&&(0,e.jsxs)(t.DialogHeader,{className:(0,p.cn)(c?.header),children:[(0,e.jsx)(t.DialogTitle,{children:(0,e.jsx)(t.Heading,{as:"h2",size:2,className:(0,p.cn)("text-info-primary text-center font-bold",c?.title),children:N})}),y&&(0,e.jsx)(t.DialogDescription,{asChild:!0,children:(0,e.jsx)(t.Text,{as:"p",className:(0,p.cn)("text-info-primary laptop:text-base mt-1 text-center text-sm",c?.subTitle),children:y})})]}),s==="success"?(0,e.jsxs)("div",{className:(0,p.cn)("flex flex-col items-center text-center",c?.successText),children:[(0,e.jsx)("div",{className:"flex size-20 items-center justify-center",children:(0,e.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"80",height:"80",viewBox:"0 0 80 80",fill:"none",children:[(0,e.jsx)("circle",{cx:"40",cy:"40",r:"35",fill:"#30D158"}),(0,e.jsx)("path",{d:"M23.3333 38.3333L36.6666 50L56.6666 30",stroke:"white",strokeWidth:"6.66667",strokeLinecap:"round",strokeLinejoin:"round"})]})}),(0,e.jsxs)("div",{className:"mt-4",children:[(0,e.jsx)(t.Heading,{as:"h3",size:2,className:"text-info-primary font-bold",children:K}),M&&(0,e.jsx)(t.Text,{as:"p",className:"text-info-primary laptop:text-base mt-1 text-sm",children:M})]}),B&&(0,e.jsx)(t.Button,{variant:"primary",size:"lg",onClick:()=>i(!1),className:"laptop:mt-8 mt-6 w-full",children:B})]}):(0,e.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,e.jsxs)("div",{className:c?.emailInput,children:[(0,e.jsx)(t.Text,{as:"label",htmlFor:"notify-me-email",className:"text-info-primary laptop:text-base mb-2 block text-sm",children:A}),(0,e.jsx)(t.Input,{id:"notify-me-email",type:"email",placeholder:G,value:b,onChange:O,disabled:s==="loading",className:(0,p.cn)("placeholder:text-info-tertiary text-info-primary laptop:h-[54px] laptop:text-base laptop:p-4 border-lines-1 h-[44px] w-full bg-white p-3 text-sm font-bold placeholder:font-bold focus-visible:!outline-none",f!=="idle"&&"border-error-0")}),f==="error-empty"&&(0,e.jsx)(t.Text,{as:"p",className:"text-error-0 laptop:text-base mt-2 text-sm",children:F}),f==="error-format"&&(0,e.jsx)(t.Text,{as:"p",className:"text-error-0 laptop:text-base mt-2 text-sm",children:W})]}),ae&&(0,e.jsx)("div",{className:(0,p.cn)("laptop:gap-4 flex flex-col gap-2",c?.checkboxes),children:l.map((a,n)=>a.label?(0,e.jsxs)("div",{children:[(0,e.jsxs)("label",{className:(0,p.cn)("text-info-tertiary flex cursor-pointer items-start gap-2",c?.checkboxItem),children:[(0,e.jsx)(t.Checkbox,{checked:v[n],onCheckedChange:()=>Z(n),"data-headless-type-name":`${T}#${E}`,"data-headless-title-desc-button":`''#''#${a.label}`,"data-headless-nav-position":"''#1",disabled:s==="loading",className:"border-info-secondary data-[state=checked]:bg-info-secondary mt-0.5 shrink-0"}),(0,e.jsx)(t.Text,{as:"span",className:"text-info-tertiary laptop:text-base [&_a]:text-brand-0 text-sm leading-snug [&_a]:underline",html:a.label})]}),U[n]&&(0,e.jsx)(t.Text,{as:"p",className:"text-error-0 laptop:text-base mt-2 text-sm",children:X})]},n):null)}),(0,e.jsx)(t.Button,{variant:"primary",size:"lg",loading:s==="loading",disabled:!Y,onClick:ee,className:(0,p.cn)("w-full",c?.submitBtn),"data-headless-type-name":`${T}#${E}`,"data-headless-title-desc-button":`''#''#${w}`,"data-headless-nav-position":"''#1",children:w}),s==="error-submit"&&(0,e.jsx)(t.Text,{as:"p",className:(0,p.cn)("text-error-0 laptop:text-base text-sm",c?.errorText),children:V})]})]})})};$.displayName="NotifyMeDialog";var fe=$;
1
+ "use strict";"use client";var re=Object.create;var T=Object.defineProperty;var le=Object.getOwnPropertyDescriptor;var ie=Object.getOwnPropertyNames;var ne=Object.getPrototypeOf,se=Object.prototype.hasOwnProperty;var me=(r,l)=>{for(var u in l)T(r,u,{get:l[u],enumerable:!0})},$=(r,l,u,m)=>{if(l&&typeof l=="object"||typeof l=="function")for(let o of ie(l))!se.call(r,o)&&o!==u&&T(r,o,{get:()=>l[o],enumerable:!(m=le(l,o))||m.enumerable});return r};var ce=(r,l,u)=>(u=r!=null?re(ne(r)):{},$(l||!r||!r.__esModule?T(u,"default",{value:r,enumerable:!0}):u,r)),pe=r=>$(T({},"__esModule",{value:!0}),r);var ge={};me(ge,{default:()=>fe});module.exports=pe(ge);var e=require("react/jsx-runtime"),s=require("react"),t=require("../../components/index.js"),d=require("../../helpers/index.js"),de=ce(require("react")),G=require("../../hooks/useExposure.js"),q=require("../AiuiProvider/index.js"),w=require("../../shared/track.js");const v="copy",k="NotifyMeDialog",ue=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,j=({open:r,onOpenChange:l,copy:u,classNames:m,checkboxes:o=[],subscriptionMeta:C,onSubmit:S})=>{const{title:_,subTitle:b,emailLabel:A="Email address",emailPlaceholder:F="your@email.com",submitBtnText:N="Notify Me",errorEmpty:W,errorInvalidEmail:X,errorCheckboxRequired:J,errorSubmit:M="Something went wrong. Please try again.",errorSubmitDetail:K,successTitle:Q,successDesc:H,successBtnText:B}=u,L=de.useRef(null),{trackingData:z}=(0,q.useAiuiContext)();(0,G.useExposure)(L,{componentType:v,componentName:k,componentTitle:_,componentDescription:b});const[h,I]=(0,s.useState)(""),[D,P]=(0,s.useState)(()=>o.map(()=>!1)),[f,x]=(0,s.useState)("idle"),[U,E]=(0,s.useState)(()=>o.map(()=>!1)),[n,g]=(0,s.useState)("idle"),[R,y]=(0,s.useState)(null),V=R?K?.find(a=>a.code===R)?.message??M:M,Y=n!=="loading"&&n!=="success",Z=(0,s.useCallback)(a=>{const c=o[a];c&&(0,w.gaTrack)({event:"ga4Event",event_name:"component_click",event_parameters:{page_group:z.pageGroup||"Home Page",component_type:v,component_name:k,button_name:c.label,component_title:_,component_description:b||""}}),P(p=>{const i=[...p];return i[a]=!i[a],i}),E(p=>{const i=[...p];return i[a]=!1,i}),f!=="idle"&&x("idle"),n==="error-submit"&&(g("idle"),y(null))},[f,n]),O=(0,s.useCallback)(a=>{I(a.target.value),f!=="idle"&&x("idle"),E(c=>c.some(Boolean)?c.map(()=>!1):c),n==="error-submit"&&(g("idle"),y(null))},[f,n]),ee=(0,s.useCallback)(async()=>{(0,w.gaTrack)({event:"ga4Event",event_name:"component_click",event_parameters:{page_group:z.pageGroup||"Home Page",component_type:v,component_name:k,button_name:N,component_title:_,component_description:b||""}});let a=!1;h.trim()?ue.test(h.trim())?x("idle"):(x("error-format"),a=!0):(x("error-empty"),a=!0);const c=o.map((p,i)=>p.label&&p.required&&!D[i]?(a=!0,!0):!1);if(E(c),!a){g("loading");try{const p=o.map((i,oe)=>i.checkbox_id!==void 0?{checkbox_id:i.checkbox_id,checked:D[oe]}:null).filter(i=>i!==null);await S({email:h.trim(),checkedItems:p,meta:C}),g("success")}catch(p){const i=p&&typeof p=="object"&&"code"in p?String(p.code):null;y(i),g("error-submit")}}},[h,o,D,C,S]);(0,s.useEffect)(()=>{if(n!=="error-submit")return;const a=setTimeout(()=>{g("idle"),y(null)},3e3);return()=>clearTimeout(a)},[n]);const te=(0,s.useCallback)(a=>{a||(I(""),P(o.map(()=>!1)),x("idle"),E(o.map(()=>!1)),g("idle"),y(null)),l(a)},[o,l]),ae=o.some(a=>a.label);return(0,e.jsx)(t.Dialog,{open:r,onOpenChange:te,children:(0,e.jsxs)(t.DialogContent,{ref:L,"aria-describedby":"notify-me-content",className:(0,d.cn)("laptop:max-w-[480px] laptop:[&_.dialog-close-icon]:size-6 laptop:gap-8 rounded-box laptop:p-8 max-h-[90vh] w-[calc(100%-32px)] gap-6 overflow-y-auto bg-white p-6 [&_.dialog-close-icon]:size-5",m?.root),children:[n!=="success"&&(0,e.jsxs)(t.DialogHeader,{className:(0,d.cn)(m?.header),children:[(0,e.jsx)(t.DialogTitle,{children:(0,e.jsx)(t.Heading,{as:"h2",size:2,className:(0,d.cn)("text-info-primary text-center font-bold",m?.title),children:_})}),b&&(0,e.jsx)(t.DialogDescription,{asChild:!0,children:(0,e.jsx)(t.Text,{as:"p",className:(0,d.cn)("text-info-primary laptop:text-base mt-1 text-center text-sm",m?.subTitle),children:b})})]}),n==="success"?(0,e.jsxs)("div",{className:(0,d.cn)("flex flex-col items-center text-center",m?.successText),children:[(0,e.jsx)("div",{className:"flex size-20 items-center justify-center",children:(0,e.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"80",height:"80",viewBox:"0 0 80 80",fill:"none",children:[(0,e.jsx)("circle",{cx:"40",cy:"40",r:"35",fill:"#30D158"}),(0,e.jsx)("path",{d:"M23.3333 38.3333L36.6666 50L56.6666 30",stroke:"white",strokeWidth:"6.66667",strokeLinecap:"round",strokeLinejoin:"round"})]})}),(0,e.jsxs)("div",{className:"mt-4",children:[(0,e.jsx)(t.Heading,{as:"h3",size:2,className:"text-info-primary font-bold",children:Q}),H&&(0,e.jsx)(t.Text,{as:"p",className:"text-info-primary laptop:text-base mt-1 text-sm",children:H})]}),B&&(0,e.jsx)(t.Button,{variant:"primary",size:"lg",onClick:()=>l(!1),className:"laptop:mt-8 mt-6 w-full",children:B})]}):(0,e.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,e.jsxs)("div",{className:m?.emailInput,children:[(0,e.jsx)(t.Text,{as:"label",htmlFor:"notify-me-email",className:"text-info-primary laptop:text-base mb-2 block text-sm",children:A}),(0,e.jsx)(t.Input,{id:"notify-me-email",type:"email",placeholder:F,value:h,onChange:O,disabled:n==="loading",className:(0,d.cn)("placeholder:text-info-tertiary text-info-primary laptop:h-[54px] laptop:text-base laptop:p-4 border-lines-1 h-[44px] w-full bg-white p-3 text-sm font-bold placeholder:font-bold focus-visible:!outline-none",f!=="idle"&&"border-error-0")}),f==="error-empty"&&(0,e.jsx)(t.Text,{as:"p",className:"text-error-0 laptop:text-base mt-2 text-sm",children:W}),f==="error-format"&&(0,e.jsx)(t.Text,{as:"p",className:"text-error-0 laptop:text-base mt-2 text-sm",children:X})]}),ae&&(0,e.jsx)("div",{className:(0,d.cn)("laptop:gap-4 flex flex-col gap-2",m?.checkboxes),children:o.map((a,c)=>a.label?(0,e.jsxs)("div",{children:[(0,e.jsxs)("label",{className:(0,d.cn)("text-info-tertiary flex cursor-pointer items-start gap-2",m?.checkboxItem),children:[(0,e.jsx)(t.Checkbox,{checked:D[c],onCheckedChange:()=>Z(c),"data-headless-type-name":`${v}#${k}`,"data-headless-title-desc-button":`''#''#${a.label}`,"data-headless-nav-position":"''#1",disabled:n==="loading",className:"border-info-secondary data-[state=checked]:bg-info-secondary mt-0.5 shrink-0"}),(0,e.jsx)(t.Text,{as:"span",className:"text-info-tertiary laptop:text-base [&_a]:text-brand-0 text-sm leading-snug [&_a]:underline",html:a.label})]}),U[c]&&(0,e.jsx)(t.Text,{as:"p",className:"text-error-0 laptop:text-base mt-2 text-sm",children:J})]},c):null)}),(0,e.jsx)(t.Button,{variant:"primary",size:"lg",loading:n==="loading",disabled:!Y,onClick:ee,className:(0,d.cn)("w-full",m?.submitBtn),"data-headless-type-name":`${v}#${k}`,"data-headless-title-desc-button":`''#''#${N}`,"data-headless-nav-position":"''#1",children:N}),n==="error-submit"&&(0,e.jsx)(t.Text,{as:"p",className:(0,d.cn)("text-error-0 laptop:text-base text-sm",m?.errorText),children:V})]})]})})};j.displayName="NotifyMeDialog";var fe=j;
2
2
  //# sourceMappingURL=NotifyMeDialog.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/NotifyMeDialog/NotifyMeDialog.tsx"],
4
- "sourcesContent": ["'use client'\n\nimport { useCallback, useEffect, useState } from 'react'\nimport {\n Button,\n Text,\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n Input,\n Checkbox,\n Heading,\n} from '../../components/index.js'\nimport { cn } from '../../helpers/index.js'\nimport type { NotifyMeDialogProps } from './types.js'\nimport * as React from 'react'\nimport { useExposure } from '../../hooks/useExposure.js'\nimport { useAiuiContext } from '../AiuiProvider/index.js'\nimport { gaTrack } from '../../shared/track.js'\n\nconst componentType = 'copy'\nconst componentName = 'NotifyMeDialog'\n\ntype EmailState = 'idle' | 'error-empty' | 'error-format'\ntype SubmitState = 'idle' | 'loading' | 'success' | 'error-submit'\n\nconst EMAIL_REGEX = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n\nconst NotifyMeDialog = ({\n open,\n onOpenChange,\n copy,\n classNames,\n checkboxes = [],\n subscriptionMeta,\n onSubmit,\n}: NotifyMeDialogProps) => {\n const {\n title,\n subTitle,\n emailLabel = 'Email address',\n emailPlaceholder = 'your@email.com',\n submitBtnText = 'Notify Me',\n errorEmpty,\n errorInvalidEmail,\n errorCheckboxRequired,\n errorSubmit = 'Something went wrong. Please try again.',\n errorSubmitDetail,\n successTitle,\n successDesc,\n successBtnText,\n } = copy\n\n const notifyMeDialogRef = React.useRef<HTMLDivElement>(null)\n const { trackingData } = useAiuiContext()\n useExposure(notifyMeDialogRef, {\n componentType,\n componentName,\n componentTitle: title,\n componentDescription: subTitle,\n })\n\n const [email, setEmail] = useState('')\n const [checkedStates, setCheckedStates] = useState<boolean[]>(() => checkboxes.map(() => false))\n const [emailState, setEmailState] = useState<EmailState>('idle')\n const [checkboxErrors, setCheckboxErrors] = useState<boolean[]>(() => checkboxes.map(() => false))\n const [submitState, setSubmitState] = useState<SubmitState>('idle')\n const [errorCode, setErrorCode] = useState<string | null>(null)\n\n // \u6839\u636E\u9519\u8BEF\u7801\u5339\u914D\u5BF9\u5E94\u6587\u6848\uFF0C\u672A\u5339\u914D\u5230\u5219\u56DE\u9000\u5230 errorSubmit\n const resolvedErrorMessage = errorCode\n ? (errorSubmitDetail?.find(d => d.code === errorCode)?.message ?? errorSubmit)\n : errorSubmit\n\n // \u662F\u5426\u53EF\u4EE5\u70B9\u51FB\u63D0\u4EA4\uFF08loading/success \u65F6\u7981\u7528\uFF09\n const canSubmit = submitState !== 'loading' && submitState !== 'success'\n\n // checkbox \u72B6\u6001\u53D8\u5316\n const updateCheckedState = useCallback(\n (index: number) => {\n setCheckedStates(prev => {\n const next = [...prev]\n next[index] = !next[index]\n return next\n })\n // \u6E05\u9664\u5F53\u524D checkbox \u7684\u9519\u8BEF\u72B6\u6001\n setCheckboxErrors(prev => {\n const next = [...prev]\n next[index] = false\n return next\n })\n // \u6E05\u9664\u90AE\u7BB1\u9519\u8BEF\u548C\u63D0\u4EA4\u9519\u8BEF\n if (emailState !== 'idle') setEmailState('idle')\n if (submitState === 'error-submit') {\n setSubmitState('idle')\n setErrorCode(null)\n }\n },\n [emailState, submitState]\n )\n\n // \u90AE\u7BB1\u8F93\u5165\u53D8\u5316\n const handleEmailChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setEmail(e.target.value)\n if (emailState !== 'idle') setEmailState('idle')\n setCheckboxErrors(prev => (prev.some(Boolean) ? prev.map(() => false) : prev))\n if (submitState === 'error-submit') {\n setSubmitState('idle')\n setErrorCode(null)\n }\n },\n [emailState, submitState]\n )\n\n /**\n * \u5BA2\u6237\u7AEF onSubmit \u8C03\u7528\u793A\u4F8B\n *\n * \u63A5\u53E3\u5931\u8D25\u65F6\u9700 throw { code } \u4EE5\u4FBF\u7EC4\u4EF6\u6309 errorSubmitDetail \u5339\u914D\u5BF9\u5E94\u63D0\u793A\u6587\u6848\uFF0C\n * code \u4E3A number \u7C7B\u578B\u65F6\u7EC4\u4EF6\u4F1A\u81EA\u52A8\u8F6C\u4E3A string \u8FDB\u884C\u5339\u914D\u3002\n *\n * @example\n * const handleNotifyMeSubmit = useCallback(\n * async (params) => {\n * const { email, checkedItems, meta } = params\n * const res = await fetch('/api/multipass/shopifyservices/product_arrival_notices', {\n * method: 'POST',\n * headers: {\n * 'Content-Type': 'application/json',\n * 'current-language': locale,\n * },\n * body: JSON.stringify({\n * email,\n * locale,\n * sku: variant.sku,\n * shop: shop.primaryDomain?.host,\n * }),\n * })\n * if (res.ok) {\n * if (checkedItems?.some?.((item) => item.checked && item.checkbox_id === 'subscribe')) {\n * subscribe({ email, dealsType: 'outStockNotify_subscribe_emails' })\n * }\n * } else {\n * throw { code: res.status }\n * }\n * },\n * [locale, variant.sku, shop.primaryDomain?.host, subscribe],\n * )\n */\n // \u70B9\u51FB\u63D0\u4EA4\n const handleSubmit = useCallback(async () => {\n // \u70B9\u51FB\u63D0\u4EA4\u57CB\u70B9\n gaTrack({\n event: 'ga4Event',\n event_name: 'component_click',\n event_parameters: {\n page_group: trackingData.pageGroup || 'Home Page',\n component_type: componentType,\n component_name: componentName,\n button_name: submitBtnText,\n component_title: title,\n component_description: subTitle || '',\n },\n })\n\n let hasError = false\n\n // \u6821\u9A8C\u90AE\u7BB1\u975E\u7A7A\n if (!email.trim()) {\n setEmailState('error-empty')\n hasError = true\n } else if (!EMAIL_REGEX.test(email.trim())) {\n setEmailState('error-format')\n hasError = true\n } else {\n setEmailState('idle')\n }\n\n // \u6821\u9A8C required checkbox\n const newCheckboxErrors = checkboxes.map((cb, i) => {\n if (cb.label && cb.required && !checkedStates[i]) {\n hasError = true\n return true\n }\n return false\n })\n setCheckboxErrors(newCheckboxErrors)\n\n if (hasError) return\n\n setSubmitState('loading')\n try {\n const checkedItems = checkboxes\n .map((cb, i) =>\n cb.checkbox_id !== undefined ? { checkbox_id: cb.checkbox_id!, checked: checkedStates[i] } : null\n )\n .filter((item): item is { checkbox_id: string; checked: boolean } => item !== null)\n await onSubmit({ email: email.trim(), checkedItems, meta: subscriptionMeta })\n setSubmitState('success')\n } catch (err: unknown) {\n const code =\n err && typeof err === 'object' && 'code' in err ? String((err as Record<string, unknown>).code) : null\n setErrorCode(code)\n setSubmitState('error-submit')\n }\n }, [email, checkboxes, checkedStates, subscriptionMeta, onSubmit])\n\n // error-submit 3s \u540E\u81EA\u52A8\u6D88\u5931\n useEffect(() => {\n if (submitState !== 'error-submit') return\n const timer = setTimeout(() => {\n setSubmitState('idle')\n setErrorCode(null)\n }, 3000)\n return () => clearTimeout(timer)\n }, [submitState])\n\n // \u5173\u95ED\u5F39\u7A97\u65F6\u91CD\u7F6E\n const handleOpenChange = useCallback(\n (isOpen: boolean) => {\n if (!isOpen) {\n setEmail('')\n setCheckedStates(checkboxes.map(() => false))\n setEmailState('idle')\n setCheckboxErrors(checkboxes.map(() => false))\n setSubmitState('idle')\n setErrorCode(null)\n }\n onOpenChange(isOpen)\n },\n [checkboxes, onOpenChange]\n )\n\n const hasCheckboxes = checkboxes.some(cb => cb.label)\n\n return (\n <Dialog open={open} onOpenChange={handleOpenChange}>\n <DialogContent\n ref={notifyMeDialogRef}\n aria-describedby=\"notify-me-content\"\n className={cn(\n 'laptop:max-w-[480px] laptop:[&_.dialog-close-icon]:size-6 laptop:gap-8 rounded-box laptop:p-8 max-h-[90vh] w-[calc(100%-32px)] gap-6 overflow-y-auto bg-white p-6 [&_.dialog-close-icon]:size-5',\n classNames?.root\n )}\n >\n {submitState !== 'success' && (\n <DialogHeader className={cn(classNames?.header)}>\n <DialogTitle>\n <Heading as=\"h2\" size={2} className={cn('text-info-primary text-center font-bold', classNames?.title)}>\n {title}\n </Heading>\n </DialogTitle>\n {subTitle && (\n <DialogDescription asChild>\n <Text\n as=\"p\"\n className={cn('text-info-primary laptop:text-base mt-1 text-center text-sm', classNames?.subTitle)}\n >\n {subTitle}\n </Text>\n </DialogDescription>\n )}\n </DialogHeader>\n )}\n\n {submitState === 'success' ? (\n <div className={cn('flex flex-col items-center text-center', classNames?.successText)}>\n {/* \u6210\u529F\u56FE\u6807 */}\n <div className=\"flex size-20 items-center justify-center\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"80\" height=\"80\" viewBox=\"0 0 80 80\" fill=\"none\">\n <circle cx=\"40\" cy=\"40\" r=\"35\" fill=\"#30D158\" />\n <path\n d=\"M23.3333 38.3333L36.6666 50L56.6666 30\"\n stroke=\"white\"\n strokeWidth=\"6.66667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </div>\n <div className=\"mt-4\">\n {/* \u6807\u9898 */}\n <Heading as=\"h3\" size={2} className=\"text-info-primary font-bold\">\n {successTitle}\n </Heading>\n {/* \u526F\u6587\u6848 */}\n {successDesc && (\n <Text as=\"p\" className=\"text-info-primary laptop:text-base mt-1 text-sm\">\n {successDesc}\n </Text>\n )}\n </div>\n {/* \u786E\u8BA4\u6309\u94AE */}\n {successBtnText && (\n <Button\n variant=\"primary\"\n size=\"lg\"\n onClick={() => onOpenChange(false)}\n className=\"laptop:mt-8 mt-6 w-full\"\n >\n {successBtnText}\n </Button>\n )}\n </div>\n ) : (\n <div className=\"flex flex-col gap-4\">\n {/* \u90AE\u7BB1\u8F93\u5165\u6846 */}\n <div className={classNames?.emailInput}>\n <Text\n as=\"label\"\n htmlFor=\"notify-me-email\"\n className=\"text-info-primary laptop:text-base mb-2 block text-sm\"\n >\n {emailLabel}\n </Text>\n <Input\n id=\"notify-me-email\"\n type=\"email\"\n placeholder={emailPlaceholder}\n value={email}\n onChange={handleEmailChange}\n disabled={submitState === 'loading'}\n className={cn(\n 'placeholder:text-info-tertiary text-info-primary laptop:h-[54px] laptop:text-base laptop:p-4 border-lines-1 h-[44px] w-full bg-white p-3 text-sm font-bold placeholder:font-bold focus-visible:!outline-none',\n emailState !== 'idle' && 'border-error-0'\n )}\n />\n {emailState === 'error-empty' && (\n <Text as=\"p\" className=\"text-error-0 laptop:text-base mt-2 text-sm\">\n {errorEmpty}\n </Text>\n )}\n {emailState === 'error-format' && (\n <Text as=\"p\" className=\"text-error-0 laptop:text-base mt-2 text-sm\">\n {errorInvalidEmail}\n </Text>\n )}\n </div>\n\n {/* Checkboxes \u5217\u8868 */}\n {hasCheckboxes && (\n <div className={cn('laptop:gap-4 flex flex-col gap-2', classNames?.checkboxes)}>\n {checkboxes.map((cb, i) => {\n if (!cb.label) return null\n return (\n <div key={i}>\n <label\n className={cn(\n 'text-info-tertiary flex cursor-pointer items-start gap-2',\n classNames?.checkboxItem\n )}\n >\n <Checkbox\n checked={checkedStates[i]}\n onCheckedChange={() => updateCheckedState(i)}\n data-headless-type-name={`${componentType}#${componentName}`}\n data-headless-title-desc-button={`''#''#${cb.label}`}\n data-headless-nav-position={`''#1`}\n disabled={submitState === 'loading'}\n className=\"border-info-secondary data-[state=checked]:bg-info-secondary mt-0.5 shrink-0\"\n />\n <Text\n as=\"span\"\n className=\"text-info-tertiary laptop:text-base [&_a]:text-brand-0 text-sm leading-snug [&_a]:underline\"\n html={cb.label}\n />\n </label>\n {checkboxErrors[i] && (\n <Text as=\"p\" className=\"text-error-0 laptop:text-base mt-2 text-sm\">\n {errorCheckboxRequired}\n </Text>\n )}\n </div>\n )\n })}\n </div>\n )}\n\n {/* \u63D0\u4EA4\u6309\u94AE */}\n <Button\n variant=\"primary\"\n size=\"lg\"\n loading={submitState === 'loading'}\n disabled={!canSubmit}\n onClick={handleSubmit}\n className={cn('w-full', classNames?.submitBtn)}\n data-headless-type-name={`${componentType}#${componentName}`}\n data-headless-title-desc-button={`''#''#${submitBtnText}`}\n data-headless-nav-position={`''#1`}\n >\n {submitBtnText}\n </Button>\n\n {/* \u63D0\u4EA4\u9519\u8BEF\uFF08\u5F39\u7A97\u6700\u5E95\u90E8\uFF09 */}\n {submitState === 'error-submit' && (\n <Text as=\"p\" className={cn('text-error-0 laptop:text-base text-sm', classNames?.errorText)}>\n {resolvedErrorMessage}\n </Text>\n )}\n </div>\n )}\n </DialogContent>\n </Dialog>\n )\n}\n\nNotifyMeDialog.displayName = 'NotifyMeDialog'\n\nexport default NotifyMeDialog\nexport type { NotifyMeDialogProps }\n"],
5
- "mappings": "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",
6
- "names": ["NotifyMeDialog_exports", "__export", "NotifyMeDialog_default", "__toCommonJS", "import_jsx_runtime", "import_react", "import_components", "import_helpers", "React", "import_useExposure", "import_AiuiProvider", "import_track", "componentType", "componentName", "EMAIL_REGEX", "NotifyMeDialog", "open", "onOpenChange", "copy", "classNames", "checkboxes", "subscriptionMeta", "onSubmit", "title", "subTitle", "emailLabel", "emailPlaceholder", "submitBtnText", "errorEmpty", "errorInvalidEmail", "errorCheckboxRequired", "errorSubmit", "errorSubmitDetail", "successTitle", "successDesc", "successBtnText", "notifyMeDialogRef", "trackingData", "email", "setEmail", "checkedStates", "setCheckedStates", "emailState", "setEmailState", "checkboxErrors", "setCheckboxErrors", "submitState", "setSubmitState", "errorCode", "setErrorCode", "resolvedErrorMessage", "d", "canSubmit", "updateCheckedState", "index", "prev", "next", "handleEmailChange", "e", "handleSubmit", "hasError", "newCheckboxErrors", "cb", "i", "checkedItems", "item", "err", "code", "timer", "handleOpenChange", "isOpen", "hasCheckboxes"]
4
+ "sourcesContent": ["'use client'\n\nimport { useCallback, useEffect, useState } from 'react'\nimport {\n Button,\n Text,\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n Input,\n Checkbox,\n Heading,\n} from '../../components/index.js'\nimport { cn } from '../../helpers/index.js'\nimport type { NotifyMeDialogProps } from './types.js'\nimport * as React from 'react'\nimport { useExposure } from '../../hooks/useExposure.js'\nimport { useAiuiContext } from '../AiuiProvider/index.js'\nimport { gaTrack } from '../../shared/track.js'\n\nconst componentType = 'copy'\nconst componentName = 'NotifyMeDialog'\n\ntype EmailState = 'idle' | 'error-empty' | 'error-format'\ntype SubmitState = 'idle' | 'loading' | 'success' | 'error-submit'\n\nconst EMAIL_REGEX = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n\nconst NotifyMeDialog = ({\n open,\n onOpenChange,\n copy,\n classNames,\n checkboxes = [],\n subscriptionMeta,\n onSubmit,\n}: NotifyMeDialogProps) => {\n const {\n title,\n subTitle,\n emailLabel = 'Email address',\n emailPlaceholder = 'your@email.com',\n submitBtnText = 'Notify Me',\n errorEmpty,\n errorInvalidEmail,\n errorCheckboxRequired,\n errorSubmit = 'Something went wrong. Please try again.',\n errorSubmitDetail,\n successTitle,\n successDesc,\n successBtnText,\n } = copy\n\n const notifyMeDialogRef = React.useRef<HTMLDivElement>(null)\n const { trackingData } = useAiuiContext()\n useExposure(notifyMeDialogRef, {\n componentType,\n componentName,\n componentTitle: title,\n componentDescription: subTitle,\n })\n\n const [email, setEmail] = useState('')\n const [checkedStates, setCheckedStates] = useState<boolean[]>(() => checkboxes.map(() => false))\n const [emailState, setEmailState] = useState<EmailState>('idle')\n const [checkboxErrors, setCheckboxErrors] = useState<boolean[]>(() => checkboxes.map(() => false))\n const [submitState, setSubmitState] = useState<SubmitState>('idle')\n const [errorCode, setErrorCode] = useState<string | null>(null)\n\n // \u6839\u636E\u9519\u8BEF\u7801\u5339\u914D\u5BF9\u5E94\u6587\u6848\uFF0C\u672A\u5339\u914D\u5230\u5219\u56DE\u9000\u5230 errorSubmit\n const resolvedErrorMessage = errorCode\n ? (errorSubmitDetail?.find(d => d.code === errorCode)?.message ?? errorSubmit)\n : errorSubmit\n\n // \u662F\u5426\u53EF\u4EE5\u70B9\u51FB\u63D0\u4EA4\uFF08loading/success \u65F6\u7981\u7528\uFF09\n const canSubmit = submitState !== 'loading' && submitState !== 'success'\n\n // checkbox \u72B6\u6001\u53D8\u5316\n const updateCheckedState = useCallback(\n (index: number) => {\n // checkbox \u70B9\u51FB\u57CB\u70B9\n const cb = checkboxes[index]\n if (cb) {\n gaTrack({\n event: 'ga4Event',\n event_name: 'component_click',\n event_parameters: {\n page_group: trackingData.pageGroup || 'Home Page',\n component_type: componentType,\n component_name: componentName,\n button_name: cb.label,\n component_title: title,\n component_description: subTitle || '',\n },\n })\n }\n\n setCheckedStates(prev => {\n const next = [...prev]\n next[index] = !next[index]\n return next\n })\n // \u6E05\u9664\u5F53\u524D checkbox \u7684\u9519\u8BEF\u72B6\u6001\n setCheckboxErrors(prev => {\n const next = [...prev]\n next[index] = false\n return next\n })\n // \u6E05\u9664\u90AE\u7BB1\u9519\u8BEF\u548C\u63D0\u4EA4\u9519\u8BEF\n if (emailState !== 'idle') setEmailState('idle')\n if (submitState === 'error-submit') {\n setSubmitState('idle')\n setErrorCode(null)\n }\n },\n [emailState, submitState]\n )\n\n // \u90AE\u7BB1\u8F93\u5165\u53D8\u5316\n const handleEmailChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setEmail(e.target.value)\n if (emailState !== 'idle') setEmailState('idle')\n setCheckboxErrors(prev => (prev.some(Boolean) ? prev.map(() => false) : prev))\n if (submitState === 'error-submit') {\n setSubmitState('idle')\n setErrorCode(null)\n }\n },\n [emailState, submitState]\n )\n\n /**\n * \u5BA2\u6237\u7AEF onSubmit \u8C03\u7528\u793A\u4F8B\n *\n * \u63A5\u53E3\u5931\u8D25\u65F6\u9700 throw { code } \u4EE5\u4FBF\u7EC4\u4EF6\u6309 errorSubmitDetail \u5339\u914D\u5BF9\u5E94\u63D0\u793A\u6587\u6848\uFF0C\n * code \u4E3A number \u7C7B\u578B\u65F6\u7EC4\u4EF6\u4F1A\u81EA\u52A8\u8F6C\u4E3A string \u8FDB\u884C\u5339\u914D\u3002\n *\n * @example\n * const handleNotifyMeSubmit = useCallback(\n * async (params) => {\n * const { email, checkedItems, meta } = params\n * const res = await fetch('/api/multipass/shopifyservices/product_arrival_notices', {\n * method: 'POST',\n * headers: {\n * 'Content-Type': 'application/json',\n * 'current-language': locale,\n * },\n * body: JSON.stringify({\n * email,\n * locale,\n * sku: variant.sku,\n * shop: shop.primaryDomain?.host,\n * }),\n * })\n * if (res.ok) {\n * if (checkedItems?.some?.((item) => item.checked && item.checkbox_id === 'subscribe')) {\n * subscribe({ email, dealsType: 'outStockNotify_subscribe_emails' })\n * }\n * } else {\n * throw { code: res.status }\n * }\n * },\n * [locale, variant.sku, shop.primaryDomain?.host, subscribe],\n * )\n */\n // \u70B9\u51FB\u63D0\u4EA4\n const handleSubmit = useCallback(async () => {\n // \u70B9\u51FB\u63D0\u4EA4\u57CB\u70B9\n gaTrack({\n event: 'ga4Event',\n event_name: 'component_click',\n event_parameters: {\n page_group: trackingData.pageGroup || 'Home Page',\n component_type: componentType,\n component_name: componentName,\n button_name: submitBtnText,\n component_title: title,\n component_description: subTitle || '',\n },\n })\n\n let hasError = false\n\n // \u6821\u9A8C\u90AE\u7BB1\u975E\u7A7A\n if (!email.trim()) {\n setEmailState('error-empty')\n hasError = true\n } else if (!EMAIL_REGEX.test(email.trim())) {\n setEmailState('error-format')\n hasError = true\n } else {\n setEmailState('idle')\n }\n\n // \u6821\u9A8C required checkbox\n const newCheckboxErrors = checkboxes.map((cb, i) => {\n if (cb.label && cb.required && !checkedStates[i]) {\n hasError = true\n return true\n }\n return false\n })\n setCheckboxErrors(newCheckboxErrors)\n\n if (hasError) return\n\n setSubmitState('loading')\n try {\n const checkedItems = checkboxes\n .map((cb, i) =>\n cb.checkbox_id !== undefined ? { checkbox_id: cb.checkbox_id!, checked: checkedStates[i] } : null\n )\n .filter((item): item is { checkbox_id: string; checked: boolean } => item !== null)\n await onSubmit({ email: email.trim(), checkedItems, meta: subscriptionMeta })\n setSubmitState('success')\n } catch (err: unknown) {\n const code =\n err && typeof err === 'object' && 'code' in err ? String((err as Record<string, unknown>).code) : null\n setErrorCode(code)\n setSubmitState('error-submit')\n }\n }, [email, checkboxes, checkedStates, subscriptionMeta, onSubmit])\n\n // error-submit 3s \u540E\u81EA\u52A8\u6D88\u5931\n useEffect(() => {\n if (submitState !== 'error-submit') return\n const timer = setTimeout(() => {\n setSubmitState('idle')\n setErrorCode(null)\n }, 3000)\n return () => clearTimeout(timer)\n }, [submitState])\n\n // \u5173\u95ED\u5F39\u7A97\u65F6\u91CD\u7F6E\n const handleOpenChange = useCallback(\n (isOpen: boolean) => {\n if (!isOpen) {\n setEmail('')\n setCheckedStates(checkboxes.map(() => false))\n setEmailState('idle')\n setCheckboxErrors(checkboxes.map(() => false))\n setSubmitState('idle')\n setErrorCode(null)\n }\n onOpenChange(isOpen)\n },\n [checkboxes, onOpenChange]\n )\n\n const hasCheckboxes = checkboxes.some(cb => cb.label)\n\n return (\n <Dialog open={open} onOpenChange={handleOpenChange}>\n <DialogContent\n ref={notifyMeDialogRef}\n aria-describedby=\"notify-me-content\"\n className={cn(\n 'laptop:max-w-[480px] laptop:[&_.dialog-close-icon]:size-6 laptop:gap-8 rounded-box laptop:p-8 max-h-[90vh] w-[calc(100%-32px)] gap-6 overflow-y-auto bg-white p-6 [&_.dialog-close-icon]:size-5',\n classNames?.root\n )}\n >\n {submitState !== 'success' && (\n <DialogHeader className={cn(classNames?.header)}>\n <DialogTitle>\n <Heading as=\"h2\" size={2} className={cn('text-info-primary text-center font-bold', classNames?.title)}>\n {title}\n </Heading>\n </DialogTitle>\n {subTitle && (\n <DialogDescription asChild>\n <Text\n as=\"p\"\n className={cn('text-info-primary laptop:text-base mt-1 text-center text-sm', classNames?.subTitle)}\n >\n {subTitle}\n </Text>\n </DialogDescription>\n )}\n </DialogHeader>\n )}\n\n {submitState === 'success' ? (\n <div className={cn('flex flex-col items-center text-center', classNames?.successText)}>\n {/* \u6210\u529F\u56FE\u6807 */}\n <div className=\"flex size-20 items-center justify-center\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"80\" height=\"80\" viewBox=\"0 0 80 80\" fill=\"none\">\n <circle cx=\"40\" cy=\"40\" r=\"35\" fill=\"#30D158\" />\n <path\n d=\"M23.3333 38.3333L36.6666 50L56.6666 30\"\n stroke=\"white\"\n strokeWidth=\"6.66667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </div>\n <div className=\"mt-4\">\n {/* \u6807\u9898 */}\n <Heading as=\"h3\" size={2} className=\"text-info-primary font-bold\">\n {successTitle}\n </Heading>\n {/* \u526F\u6587\u6848 */}\n {successDesc && (\n <Text as=\"p\" className=\"text-info-primary laptop:text-base mt-1 text-sm\">\n {successDesc}\n </Text>\n )}\n </div>\n {/* \u786E\u8BA4\u6309\u94AE */}\n {successBtnText && (\n <Button\n variant=\"primary\"\n size=\"lg\"\n onClick={() => onOpenChange(false)}\n className=\"laptop:mt-8 mt-6 w-full\"\n >\n {successBtnText}\n </Button>\n )}\n </div>\n ) : (\n <div className=\"flex flex-col gap-4\">\n {/* \u90AE\u7BB1\u8F93\u5165\u6846 */}\n <div className={classNames?.emailInput}>\n <Text\n as=\"label\"\n htmlFor=\"notify-me-email\"\n className=\"text-info-primary laptop:text-base mb-2 block text-sm\"\n >\n {emailLabel}\n </Text>\n <Input\n id=\"notify-me-email\"\n type=\"email\"\n placeholder={emailPlaceholder}\n value={email}\n onChange={handleEmailChange}\n disabled={submitState === 'loading'}\n className={cn(\n 'placeholder:text-info-tertiary text-info-primary laptop:h-[54px] laptop:text-base laptop:p-4 border-lines-1 h-[44px] w-full bg-white p-3 text-sm font-bold placeholder:font-bold focus-visible:!outline-none',\n emailState !== 'idle' && 'border-error-0'\n )}\n />\n {emailState === 'error-empty' && (\n <Text as=\"p\" className=\"text-error-0 laptop:text-base mt-2 text-sm\">\n {errorEmpty}\n </Text>\n )}\n {emailState === 'error-format' && (\n <Text as=\"p\" className=\"text-error-0 laptop:text-base mt-2 text-sm\">\n {errorInvalidEmail}\n </Text>\n )}\n </div>\n\n {/* Checkboxes \u5217\u8868 */}\n {hasCheckboxes && (\n <div className={cn('laptop:gap-4 flex flex-col gap-2', classNames?.checkboxes)}>\n {checkboxes.map((cb, i) => {\n if (!cb.label) return null\n return (\n <div key={i}>\n <label\n className={cn(\n 'text-info-tertiary flex cursor-pointer items-start gap-2',\n classNames?.checkboxItem\n )}\n >\n <Checkbox\n checked={checkedStates[i]}\n onCheckedChange={() => updateCheckedState(i)}\n data-headless-type-name={`${componentType}#${componentName}`}\n data-headless-title-desc-button={`''#''#${cb.label}`}\n data-headless-nav-position={`''#1`}\n disabled={submitState === 'loading'}\n className=\"border-info-secondary data-[state=checked]:bg-info-secondary mt-0.5 shrink-0\"\n />\n <Text\n as=\"span\"\n className=\"text-info-tertiary laptop:text-base [&_a]:text-brand-0 text-sm leading-snug [&_a]:underline\"\n html={cb.label}\n />\n </label>\n {checkboxErrors[i] && (\n <Text as=\"p\" className=\"text-error-0 laptop:text-base mt-2 text-sm\">\n {errorCheckboxRequired}\n </Text>\n )}\n </div>\n )\n })}\n </div>\n )}\n\n {/* \u63D0\u4EA4\u6309\u94AE */}\n <Button\n variant=\"primary\"\n size=\"lg\"\n loading={submitState === 'loading'}\n disabled={!canSubmit}\n onClick={handleSubmit}\n className={cn('w-full', classNames?.submitBtn)}\n data-headless-type-name={`${componentType}#${componentName}`}\n data-headless-title-desc-button={`''#''#${submitBtnText}`}\n data-headless-nav-position={`''#1`}\n >\n {submitBtnText}\n </Button>\n\n {/* \u63D0\u4EA4\u9519\u8BEF\uFF08\u5F39\u7A97\u6700\u5E95\u90E8\uFF09 */}\n {submitState === 'error-submit' && (\n <Text as=\"p\" className={cn('text-error-0 laptop:text-base text-sm', classNames?.errorText)}>\n {resolvedErrorMessage}\n </Text>\n )}\n </div>\n )}\n </DialogContent>\n </Dialog>\n )\n}\n\nNotifyMeDialog.displayName = 'NotifyMeDialog'\n\nexport default NotifyMeDialog\nexport type { NotifyMeDialogProps }\n"],
5
+ "mappings": "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",
6
+ "names": ["NotifyMeDialog_exports", "__export", "NotifyMeDialog_default", "__toCommonJS", "import_jsx_runtime", "import_react", "import_components", "import_helpers", "React", "import_useExposure", "import_AiuiProvider", "import_track", "componentType", "componentName", "EMAIL_REGEX", "NotifyMeDialog", "open", "onOpenChange", "copy", "classNames", "checkboxes", "subscriptionMeta", "onSubmit", "title", "subTitle", "emailLabel", "emailPlaceholder", "submitBtnText", "errorEmpty", "errorInvalidEmail", "errorCheckboxRequired", "errorSubmit", "errorSubmitDetail", "successTitle", "successDesc", "successBtnText", "notifyMeDialogRef", "trackingData", "email", "setEmail", "checkedStates", "setCheckedStates", "emailState", "setEmailState", "checkboxErrors", "setCheckboxErrors", "submitState", "setSubmitState", "errorCode", "setErrorCode", "resolvedErrorMessage", "d", "canSubmit", "updateCheckedState", "index", "cb", "prev", "next", "handleEmailChange", "e", "handleSubmit", "hasError", "newCheckboxErrors", "checkedItems", "i", "item", "err", "code", "timer", "handleOpenChange", "isOpen", "hasCheckboxes"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use client";import{jsx as t,jsxs as n}from"react/jsx-runtime";import{useCallback as v,useEffect as oe,useState as f}from"react";import{Button as I,Text as c,Dialog as le,DialogContent as re,DialogHeader as ie,DialogTitle as se,DialogDescription as ne,Input as me,Checkbox as ce,Heading as R}from"../../components/index.js";import{cn as s}from"../../helpers/index.js";import*as pe from"react";import{useExposure as de}from"../../hooks/useExposure.js";import{useAiuiContext as ue}from"../AiuiProvider/index.js";import{gaTrack as fe}from"../../shared/track.js";const k="copy",D="NotifyMeDialog",xe=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,$=({open:P,onOpenChange:T,copy:j,classNames:r,checkboxes:i=[],subscriptionMeta:w,onSubmit:C})=>{const{title:E,subTitle:b,emailLabel:q="Email address",emailPlaceholder:A="your@email.com",submitBtnText:N="Notify Me",errorEmpty:G,errorInvalidEmail:F,errorCheckboxRequired:W,errorSubmit:S="Something went wrong. Please try again.",errorSubmitDetail:X,successTitle:J,successDesc:_,successBtnText:M}=j,B=pe.useRef(null),{trackingData:K}=ue();de(B,{componentType:k,componentName:D,componentTitle:E,componentDescription:b});const[x,H]=f(""),[h,L]=f(()=>i.map(()=>!1)),[p,u]=f("idle"),[Q,y]=f(()=>i.map(()=>!1)),[o,d]=f("idle"),[z,g]=f(null),U=z?X?.find(e=>e.code===z)?.message??S:S,V=o!=="loading"&&o!=="success",Y=v(e=>{L(l=>{const a=[...l];return a[e]=!a[e],a}),y(l=>{const a=[...l];return a[e]=!1,a}),p!=="idle"&&u("idle"),o==="error-submit"&&(d("idle"),g(null))},[p,o]),Z=v(e=>{H(e.target.value),p!=="idle"&&u("idle"),y(l=>l.some(Boolean)?l.map(()=>!1):l),o==="error-submit"&&(d("idle"),g(null))},[p,o]),O=v(async()=>{fe({event:"ga4Event",event_name:"component_click",event_parameters:{page_group:K.pageGroup||"Home Page",component_type:k,component_name:D,button_name:N,component_title:E,component_description:b||""}});let e=!1;x.trim()?xe.test(x.trim())?u("idle"):(u("error-format"),e=!0):(u("error-empty"),e=!0);const l=i.map((a,m)=>a.label&&a.required&&!h[m]?(e=!0,!0):!1);if(y(l),!e){d("loading");try{const a=i.map((m,ae)=>m.checkbox_id!==void 0?{checkbox_id:m.checkbox_id,checked:h[ae]}:null).filter(m=>m!==null);await C({email:x.trim(),checkedItems:a,meta:w}),d("success")}catch(a){const m=a&&typeof a=="object"&&"code"in a?String(a.code):null;g(m),d("error-submit")}}},[x,i,h,w,C]);oe(()=>{if(o!=="error-submit")return;const e=setTimeout(()=>{d("idle"),g(null)},3e3);return()=>clearTimeout(e)},[o]);const ee=v(e=>{e||(H(""),L(i.map(()=>!1)),u("idle"),y(i.map(()=>!1)),d("idle"),g(null)),T(e)},[i,T]),te=i.some(e=>e.label);return t(le,{open:P,onOpenChange:ee,children:n(re,{ref:B,"aria-describedby":"notify-me-content",className:s("laptop:max-w-[480px] laptop:[&_.dialog-close-icon]:size-6 laptop:gap-8 rounded-box laptop:p-8 max-h-[90vh] w-[calc(100%-32px)] gap-6 overflow-y-auto bg-white p-6 [&_.dialog-close-icon]:size-5",r?.root),children:[o!=="success"&&n(ie,{className:s(r?.header),children:[t(se,{children:t(R,{as:"h2",size:2,className:s("text-info-primary text-center font-bold",r?.title),children:E})}),b&&t(ne,{asChild:!0,children:t(c,{as:"p",className:s("text-info-primary laptop:text-base mt-1 text-center text-sm",r?.subTitle),children:b})})]}),o==="success"?n("div",{className:s("flex flex-col items-center text-center",r?.successText),children:[t("div",{className:"flex size-20 items-center justify-center",children:n("svg",{xmlns:"http://www.w3.org/2000/svg",width:"80",height:"80",viewBox:"0 0 80 80",fill:"none",children:[t("circle",{cx:"40",cy:"40",r:"35",fill:"#30D158"}),t("path",{d:"M23.3333 38.3333L36.6666 50L56.6666 30",stroke:"white",strokeWidth:"6.66667",strokeLinecap:"round",strokeLinejoin:"round"})]})}),n("div",{className:"mt-4",children:[t(R,{as:"h3",size:2,className:"text-info-primary font-bold",children:J}),_&&t(c,{as:"p",className:"text-info-primary laptop:text-base mt-1 text-sm",children:_})]}),M&&t(I,{variant:"primary",size:"lg",onClick:()=>T(!1),className:"laptop:mt-8 mt-6 w-full",children:M})]}):n("div",{className:"flex flex-col gap-4",children:[n("div",{className:r?.emailInput,children:[t(c,{as:"label",htmlFor:"notify-me-email",className:"text-info-primary laptop:text-base mb-2 block text-sm",children:q}),t(me,{id:"notify-me-email",type:"email",placeholder:A,value:x,onChange:Z,disabled:o==="loading",className:s("placeholder:text-info-tertiary text-info-primary laptop:h-[54px] laptop:text-base laptop:p-4 border-lines-1 h-[44px] w-full bg-white p-3 text-sm font-bold placeholder:font-bold focus-visible:!outline-none",p!=="idle"&&"border-error-0")}),p==="error-empty"&&t(c,{as:"p",className:"text-error-0 laptop:text-base mt-2 text-sm",children:G}),p==="error-format"&&t(c,{as:"p",className:"text-error-0 laptop:text-base mt-2 text-sm",children:F})]}),te&&t("div",{className:s("laptop:gap-4 flex flex-col gap-2",r?.checkboxes),children:i.map((e,l)=>e.label?n("div",{children:[n("label",{className:s("text-info-tertiary flex cursor-pointer items-start gap-2",r?.checkboxItem),children:[t(ce,{checked:h[l],onCheckedChange:()=>Y(l),"data-headless-type-name":`${k}#${D}`,"data-headless-title-desc-button":`''#''#${e.label}`,"data-headless-nav-position":"''#1",disabled:o==="loading",className:"border-info-secondary data-[state=checked]:bg-info-secondary mt-0.5 shrink-0"}),t(c,{as:"span",className:"text-info-tertiary laptop:text-base [&_a]:text-brand-0 text-sm leading-snug [&_a]:underline",html:e.label})]}),Q[l]&&t(c,{as:"p",className:"text-error-0 laptop:text-base mt-2 text-sm",children:W})]},l):null)}),t(I,{variant:"primary",size:"lg",loading:o==="loading",disabled:!V,onClick:O,className:s("w-full",r?.submitBtn),"data-headless-type-name":`${k}#${D}`,"data-headless-title-desc-button":`''#''#${N}`,"data-headless-nav-position":"''#1",children:N}),o==="error-submit"&&t(c,{as:"p",className:s("text-error-0 laptop:text-base text-sm",r?.errorText),children:U})]})]})})};$.displayName="NotifyMeDialog";var De=$;export{De as default};
1
+ "use client";import{jsx as t,jsxs as m}from"react/jsx-runtime";import{useCallback as D,useEffect as re,useState as f}from"react";import{Button as P,Text as c,Dialog as le,DialogContent as ie,DialogHeader as ne,DialogTitle as se,DialogDescription as me,Input as ce,Checkbox as pe,Heading as R}from"../../components/index.js";import{cn as s}from"../../helpers/index.js";import*as de from"react";import{useExposure as ue}from"../../hooks/useExposure.js";import{useAiuiContext as fe}from"../AiuiProvider/index.js";import{gaTrack as $}from"../../shared/track.js";const h="copy",y="NotifyMeDialog",ge=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,j=({open:G,onOpenChange:E,copy:q,classNames:n,checkboxes:i=[],subscriptionMeta:N,onSubmit:w})=>{const{title:v,subTitle:g,emailLabel:A="Email address",emailPlaceholder:F="your@email.com",submitBtnText:T="Notify Me",errorEmpty:W,errorInvalidEmail:X,errorCheckboxRequired:J,errorSubmit:C="Something went wrong. Please try again.",errorSubmitDetail:K,successTitle:Q,successDesc:S,successBtnText:M}=q,H=de.useRef(null),{trackingData:B}=fe();ue(H,{componentType:h,componentName:y,componentTitle:v,componentDescription:g});const[x,L]=f(""),[k,z]=f(()=>i.map(()=>!1)),[p,u]=f("idle"),[U,_]=f(()=>i.map(()=>!1)),[o,d]=f("idle"),[I,b]=f(null),V=I?K?.find(e=>e.code===I)?.message??C:C,Y=o!=="loading"&&o!=="success",Z=D(e=>{const r=i[e];r&&$({event:"ga4Event",event_name:"component_click",event_parameters:{page_group:B.pageGroup||"Home Page",component_type:h,component_name:y,button_name:r.label,component_title:v,component_description:g||""}}),z(l=>{const a=[...l];return a[e]=!a[e],a}),_(l=>{const a=[...l];return a[e]=!1,a}),p!=="idle"&&u("idle"),o==="error-submit"&&(d("idle"),b(null))},[p,o]),O=D(e=>{L(e.target.value),p!=="idle"&&u("idle"),_(r=>r.some(Boolean)?r.map(()=>!1):r),o==="error-submit"&&(d("idle"),b(null))},[p,o]),ee=D(async()=>{$({event:"ga4Event",event_name:"component_click",event_parameters:{page_group:B.pageGroup||"Home Page",component_type:h,component_name:y,button_name:T,component_title:v,component_description:g||""}});let e=!1;x.trim()?ge.test(x.trim())?u("idle"):(u("error-format"),e=!0):(u("error-empty"),e=!0);const r=i.map((l,a)=>l.label&&l.required&&!k[a]?(e=!0,!0):!1);if(_(r),!e){d("loading");try{const l=i.map((a,oe)=>a.checkbox_id!==void 0?{checkbox_id:a.checkbox_id,checked:k[oe]}:null).filter(a=>a!==null);await w({email:x.trim(),checkedItems:l,meta:N}),d("success")}catch(l){const a=l&&typeof l=="object"&&"code"in l?String(l.code):null;b(a),d("error-submit")}}},[x,i,k,N,w]);re(()=>{if(o!=="error-submit")return;const e=setTimeout(()=>{d("idle"),b(null)},3e3);return()=>clearTimeout(e)},[o]);const te=D(e=>{e||(L(""),z(i.map(()=>!1)),u("idle"),_(i.map(()=>!1)),d("idle"),b(null)),E(e)},[i,E]),ae=i.some(e=>e.label);return t(le,{open:G,onOpenChange:te,children:m(ie,{ref:H,"aria-describedby":"notify-me-content",className:s("laptop:max-w-[480px] laptop:[&_.dialog-close-icon]:size-6 laptop:gap-8 rounded-box laptop:p-8 max-h-[90vh] w-[calc(100%-32px)] gap-6 overflow-y-auto bg-white p-6 [&_.dialog-close-icon]:size-5",n?.root),children:[o!=="success"&&m(ne,{className:s(n?.header),children:[t(se,{children:t(R,{as:"h2",size:2,className:s("text-info-primary text-center font-bold",n?.title),children:v})}),g&&t(me,{asChild:!0,children:t(c,{as:"p",className:s("text-info-primary laptop:text-base mt-1 text-center text-sm",n?.subTitle),children:g})})]}),o==="success"?m("div",{className:s("flex flex-col items-center text-center",n?.successText),children:[t("div",{className:"flex size-20 items-center justify-center",children:m("svg",{xmlns:"http://www.w3.org/2000/svg",width:"80",height:"80",viewBox:"0 0 80 80",fill:"none",children:[t("circle",{cx:"40",cy:"40",r:"35",fill:"#30D158"}),t("path",{d:"M23.3333 38.3333L36.6666 50L56.6666 30",stroke:"white",strokeWidth:"6.66667",strokeLinecap:"round",strokeLinejoin:"round"})]})}),m("div",{className:"mt-4",children:[t(R,{as:"h3",size:2,className:"text-info-primary font-bold",children:Q}),S&&t(c,{as:"p",className:"text-info-primary laptop:text-base mt-1 text-sm",children:S})]}),M&&t(P,{variant:"primary",size:"lg",onClick:()=>E(!1),className:"laptop:mt-8 mt-6 w-full",children:M})]}):m("div",{className:"flex flex-col gap-4",children:[m("div",{className:n?.emailInput,children:[t(c,{as:"label",htmlFor:"notify-me-email",className:"text-info-primary laptop:text-base mb-2 block text-sm",children:A}),t(ce,{id:"notify-me-email",type:"email",placeholder:F,value:x,onChange:O,disabled:o==="loading",className:s("placeholder:text-info-tertiary text-info-primary laptop:h-[54px] laptop:text-base laptop:p-4 border-lines-1 h-[44px] w-full bg-white p-3 text-sm font-bold placeholder:font-bold focus-visible:!outline-none",p!=="idle"&&"border-error-0")}),p==="error-empty"&&t(c,{as:"p",className:"text-error-0 laptop:text-base mt-2 text-sm",children:W}),p==="error-format"&&t(c,{as:"p",className:"text-error-0 laptop:text-base mt-2 text-sm",children:X})]}),ae&&t("div",{className:s("laptop:gap-4 flex flex-col gap-2",n?.checkboxes),children:i.map((e,r)=>e.label?m("div",{children:[m("label",{className:s("text-info-tertiary flex cursor-pointer items-start gap-2",n?.checkboxItem),children:[t(pe,{checked:k[r],onCheckedChange:()=>Z(r),"data-headless-type-name":`${h}#${y}`,"data-headless-title-desc-button":`''#''#${e.label}`,"data-headless-nav-position":"''#1",disabled:o==="loading",className:"border-info-secondary data-[state=checked]:bg-info-secondary mt-0.5 shrink-0"}),t(c,{as:"span",className:"text-info-tertiary laptop:text-base [&_a]:text-brand-0 text-sm leading-snug [&_a]:underline",html:e.label})]}),U[r]&&t(c,{as:"p",className:"text-error-0 laptop:text-base mt-2 text-sm",children:J})]},r):null)}),t(P,{variant:"primary",size:"lg",loading:o==="loading",disabled:!Y,onClick:ee,className:s("w-full",n?.submitBtn),"data-headless-type-name":`${h}#${y}`,"data-headless-title-desc-button":`''#''#${T}`,"data-headless-nav-position":"''#1",children:T}),o==="error-submit"&&t(c,{as:"p",className:s("text-error-0 laptop:text-base text-sm",n?.errorText),children:V})]})]})})};j.displayName="NotifyMeDialog";var _e=j;export{_e as default};
2
2
  //# sourceMappingURL=NotifyMeDialog.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/NotifyMeDialog/NotifyMeDialog.tsx"],
4
- "sourcesContent": ["'use client'\n\nimport { useCallback, useEffect, useState } from 'react'\nimport {\n Button,\n Text,\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n Input,\n Checkbox,\n Heading,\n} from '../../components/index.js'\nimport { cn } from '../../helpers/index.js'\nimport type { NotifyMeDialogProps } from './types.js'\nimport * as React from 'react'\nimport { useExposure } from '../../hooks/useExposure.js'\nimport { useAiuiContext } from '../AiuiProvider/index.js'\nimport { gaTrack } from '../../shared/track.js'\n\nconst componentType = 'copy'\nconst componentName = 'NotifyMeDialog'\n\ntype EmailState = 'idle' | 'error-empty' | 'error-format'\ntype SubmitState = 'idle' | 'loading' | 'success' | 'error-submit'\n\nconst EMAIL_REGEX = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n\nconst NotifyMeDialog = ({\n open,\n onOpenChange,\n copy,\n classNames,\n checkboxes = [],\n subscriptionMeta,\n onSubmit,\n}: NotifyMeDialogProps) => {\n const {\n title,\n subTitle,\n emailLabel = 'Email address',\n emailPlaceholder = 'your@email.com',\n submitBtnText = 'Notify Me',\n errorEmpty,\n errorInvalidEmail,\n errorCheckboxRequired,\n errorSubmit = 'Something went wrong. Please try again.',\n errorSubmitDetail,\n successTitle,\n successDesc,\n successBtnText,\n } = copy\n\n const notifyMeDialogRef = React.useRef<HTMLDivElement>(null)\n const { trackingData } = useAiuiContext()\n useExposure(notifyMeDialogRef, {\n componentType,\n componentName,\n componentTitle: title,\n componentDescription: subTitle,\n })\n\n const [email, setEmail] = useState('')\n const [checkedStates, setCheckedStates] = useState<boolean[]>(() => checkboxes.map(() => false))\n const [emailState, setEmailState] = useState<EmailState>('idle')\n const [checkboxErrors, setCheckboxErrors] = useState<boolean[]>(() => checkboxes.map(() => false))\n const [submitState, setSubmitState] = useState<SubmitState>('idle')\n const [errorCode, setErrorCode] = useState<string | null>(null)\n\n // \u6839\u636E\u9519\u8BEF\u7801\u5339\u914D\u5BF9\u5E94\u6587\u6848\uFF0C\u672A\u5339\u914D\u5230\u5219\u56DE\u9000\u5230 errorSubmit\n const resolvedErrorMessage = errorCode\n ? (errorSubmitDetail?.find(d => d.code === errorCode)?.message ?? errorSubmit)\n : errorSubmit\n\n // \u662F\u5426\u53EF\u4EE5\u70B9\u51FB\u63D0\u4EA4\uFF08loading/success \u65F6\u7981\u7528\uFF09\n const canSubmit = submitState !== 'loading' && submitState !== 'success'\n\n // checkbox \u72B6\u6001\u53D8\u5316\n const updateCheckedState = useCallback(\n (index: number) => {\n setCheckedStates(prev => {\n const next = [...prev]\n next[index] = !next[index]\n return next\n })\n // \u6E05\u9664\u5F53\u524D checkbox \u7684\u9519\u8BEF\u72B6\u6001\n setCheckboxErrors(prev => {\n const next = [...prev]\n next[index] = false\n return next\n })\n // \u6E05\u9664\u90AE\u7BB1\u9519\u8BEF\u548C\u63D0\u4EA4\u9519\u8BEF\n if (emailState !== 'idle') setEmailState('idle')\n if (submitState === 'error-submit') {\n setSubmitState('idle')\n setErrorCode(null)\n }\n },\n [emailState, submitState]\n )\n\n // \u90AE\u7BB1\u8F93\u5165\u53D8\u5316\n const handleEmailChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setEmail(e.target.value)\n if (emailState !== 'idle') setEmailState('idle')\n setCheckboxErrors(prev => (prev.some(Boolean) ? prev.map(() => false) : prev))\n if (submitState === 'error-submit') {\n setSubmitState('idle')\n setErrorCode(null)\n }\n },\n [emailState, submitState]\n )\n\n /**\n * \u5BA2\u6237\u7AEF onSubmit \u8C03\u7528\u793A\u4F8B\n *\n * \u63A5\u53E3\u5931\u8D25\u65F6\u9700 throw { code } \u4EE5\u4FBF\u7EC4\u4EF6\u6309 errorSubmitDetail \u5339\u914D\u5BF9\u5E94\u63D0\u793A\u6587\u6848\uFF0C\n * code \u4E3A number \u7C7B\u578B\u65F6\u7EC4\u4EF6\u4F1A\u81EA\u52A8\u8F6C\u4E3A string \u8FDB\u884C\u5339\u914D\u3002\n *\n * @example\n * const handleNotifyMeSubmit = useCallback(\n * async (params) => {\n * const { email, checkedItems, meta } = params\n * const res = await fetch('/api/multipass/shopifyservices/product_arrival_notices', {\n * method: 'POST',\n * headers: {\n * 'Content-Type': 'application/json',\n * 'current-language': locale,\n * },\n * body: JSON.stringify({\n * email,\n * locale,\n * sku: variant.sku,\n * shop: shop.primaryDomain?.host,\n * }),\n * })\n * if (res.ok) {\n * if (checkedItems?.some?.((item) => item.checked && item.checkbox_id === 'subscribe')) {\n * subscribe({ email, dealsType: 'outStockNotify_subscribe_emails' })\n * }\n * } else {\n * throw { code: res.status }\n * }\n * },\n * [locale, variant.sku, shop.primaryDomain?.host, subscribe],\n * )\n */\n // \u70B9\u51FB\u63D0\u4EA4\n const handleSubmit = useCallback(async () => {\n // \u70B9\u51FB\u63D0\u4EA4\u57CB\u70B9\n gaTrack({\n event: 'ga4Event',\n event_name: 'component_click',\n event_parameters: {\n page_group: trackingData.pageGroup || 'Home Page',\n component_type: componentType,\n component_name: componentName,\n button_name: submitBtnText,\n component_title: title,\n component_description: subTitle || '',\n },\n })\n\n let hasError = false\n\n // \u6821\u9A8C\u90AE\u7BB1\u975E\u7A7A\n if (!email.trim()) {\n setEmailState('error-empty')\n hasError = true\n } else if (!EMAIL_REGEX.test(email.trim())) {\n setEmailState('error-format')\n hasError = true\n } else {\n setEmailState('idle')\n }\n\n // \u6821\u9A8C required checkbox\n const newCheckboxErrors = checkboxes.map((cb, i) => {\n if (cb.label && cb.required && !checkedStates[i]) {\n hasError = true\n return true\n }\n return false\n })\n setCheckboxErrors(newCheckboxErrors)\n\n if (hasError) return\n\n setSubmitState('loading')\n try {\n const checkedItems = checkboxes\n .map((cb, i) =>\n cb.checkbox_id !== undefined ? { checkbox_id: cb.checkbox_id!, checked: checkedStates[i] } : null\n )\n .filter((item): item is { checkbox_id: string; checked: boolean } => item !== null)\n await onSubmit({ email: email.trim(), checkedItems, meta: subscriptionMeta })\n setSubmitState('success')\n } catch (err: unknown) {\n const code =\n err && typeof err === 'object' && 'code' in err ? String((err as Record<string, unknown>).code) : null\n setErrorCode(code)\n setSubmitState('error-submit')\n }\n }, [email, checkboxes, checkedStates, subscriptionMeta, onSubmit])\n\n // error-submit 3s \u540E\u81EA\u52A8\u6D88\u5931\n useEffect(() => {\n if (submitState !== 'error-submit') return\n const timer = setTimeout(() => {\n setSubmitState('idle')\n setErrorCode(null)\n }, 3000)\n return () => clearTimeout(timer)\n }, [submitState])\n\n // \u5173\u95ED\u5F39\u7A97\u65F6\u91CD\u7F6E\n const handleOpenChange = useCallback(\n (isOpen: boolean) => {\n if (!isOpen) {\n setEmail('')\n setCheckedStates(checkboxes.map(() => false))\n setEmailState('idle')\n setCheckboxErrors(checkboxes.map(() => false))\n setSubmitState('idle')\n setErrorCode(null)\n }\n onOpenChange(isOpen)\n },\n [checkboxes, onOpenChange]\n )\n\n const hasCheckboxes = checkboxes.some(cb => cb.label)\n\n return (\n <Dialog open={open} onOpenChange={handleOpenChange}>\n <DialogContent\n ref={notifyMeDialogRef}\n aria-describedby=\"notify-me-content\"\n className={cn(\n 'laptop:max-w-[480px] laptop:[&_.dialog-close-icon]:size-6 laptop:gap-8 rounded-box laptop:p-8 max-h-[90vh] w-[calc(100%-32px)] gap-6 overflow-y-auto bg-white p-6 [&_.dialog-close-icon]:size-5',\n classNames?.root\n )}\n >\n {submitState !== 'success' && (\n <DialogHeader className={cn(classNames?.header)}>\n <DialogTitle>\n <Heading as=\"h2\" size={2} className={cn('text-info-primary text-center font-bold', classNames?.title)}>\n {title}\n </Heading>\n </DialogTitle>\n {subTitle && (\n <DialogDescription asChild>\n <Text\n as=\"p\"\n className={cn('text-info-primary laptop:text-base mt-1 text-center text-sm', classNames?.subTitle)}\n >\n {subTitle}\n </Text>\n </DialogDescription>\n )}\n </DialogHeader>\n )}\n\n {submitState === 'success' ? (\n <div className={cn('flex flex-col items-center text-center', classNames?.successText)}>\n {/* \u6210\u529F\u56FE\u6807 */}\n <div className=\"flex size-20 items-center justify-center\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"80\" height=\"80\" viewBox=\"0 0 80 80\" fill=\"none\">\n <circle cx=\"40\" cy=\"40\" r=\"35\" fill=\"#30D158\" />\n <path\n d=\"M23.3333 38.3333L36.6666 50L56.6666 30\"\n stroke=\"white\"\n strokeWidth=\"6.66667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </div>\n <div className=\"mt-4\">\n {/* \u6807\u9898 */}\n <Heading as=\"h3\" size={2} className=\"text-info-primary font-bold\">\n {successTitle}\n </Heading>\n {/* \u526F\u6587\u6848 */}\n {successDesc && (\n <Text as=\"p\" className=\"text-info-primary laptop:text-base mt-1 text-sm\">\n {successDesc}\n </Text>\n )}\n </div>\n {/* \u786E\u8BA4\u6309\u94AE */}\n {successBtnText && (\n <Button\n variant=\"primary\"\n size=\"lg\"\n onClick={() => onOpenChange(false)}\n className=\"laptop:mt-8 mt-6 w-full\"\n >\n {successBtnText}\n </Button>\n )}\n </div>\n ) : (\n <div className=\"flex flex-col gap-4\">\n {/* \u90AE\u7BB1\u8F93\u5165\u6846 */}\n <div className={classNames?.emailInput}>\n <Text\n as=\"label\"\n htmlFor=\"notify-me-email\"\n className=\"text-info-primary laptop:text-base mb-2 block text-sm\"\n >\n {emailLabel}\n </Text>\n <Input\n id=\"notify-me-email\"\n type=\"email\"\n placeholder={emailPlaceholder}\n value={email}\n onChange={handleEmailChange}\n disabled={submitState === 'loading'}\n className={cn(\n 'placeholder:text-info-tertiary text-info-primary laptop:h-[54px] laptop:text-base laptop:p-4 border-lines-1 h-[44px] w-full bg-white p-3 text-sm font-bold placeholder:font-bold focus-visible:!outline-none',\n emailState !== 'idle' && 'border-error-0'\n )}\n />\n {emailState === 'error-empty' && (\n <Text as=\"p\" className=\"text-error-0 laptop:text-base mt-2 text-sm\">\n {errorEmpty}\n </Text>\n )}\n {emailState === 'error-format' && (\n <Text as=\"p\" className=\"text-error-0 laptop:text-base mt-2 text-sm\">\n {errorInvalidEmail}\n </Text>\n )}\n </div>\n\n {/* Checkboxes \u5217\u8868 */}\n {hasCheckboxes && (\n <div className={cn('laptop:gap-4 flex flex-col gap-2', classNames?.checkboxes)}>\n {checkboxes.map((cb, i) => {\n if (!cb.label) return null\n return (\n <div key={i}>\n <label\n className={cn(\n 'text-info-tertiary flex cursor-pointer items-start gap-2',\n classNames?.checkboxItem\n )}\n >\n <Checkbox\n checked={checkedStates[i]}\n onCheckedChange={() => updateCheckedState(i)}\n data-headless-type-name={`${componentType}#${componentName}`}\n data-headless-title-desc-button={`''#''#${cb.label}`}\n data-headless-nav-position={`''#1`}\n disabled={submitState === 'loading'}\n className=\"border-info-secondary data-[state=checked]:bg-info-secondary mt-0.5 shrink-0\"\n />\n <Text\n as=\"span\"\n className=\"text-info-tertiary laptop:text-base [&_a]:text-brand-0 text-sm leading-snug [&_a]:underline\"\n html={cb.label}\n />\n </label>\n {checkboxErrors[i] && (\n <Text as=\"p\" className=\"text-error-0 laptop:text-base mt-2 text-sm\">\n {errorCheckboxRequired}\n </Text>\n )}\n </div>\n )\n })}\n </div>\n )}\n\n {/* \u63D0\u4EA4\u6309\u94AE */}\n <Button\n variant=\"primary\"\n size=\"lg\"\n loading={submitState === 'loading'}\n disabled={!canSubmit}\n onClick={handleSubmit}\n className={cn('w-full', classNames?.submitBtn)}\n data-headless-type-name={`${componentType}#${componentName}`}\n data-headless-title-desc-button={`''#''#${submitBtnText}`}\n data-headless-nav-position={`''#1`}\n >\n {submitBtnText}\n </Button>\n\n {/* \u63D0\u4EA4\u9519\u8BEF\uFF08\u5F39\u7A97\u6700\u5E95\u90E8\uFF09 */}\n {submitState === 'error-submit' && (\n <Text as=\"p\" className={cn('text-error-0 laptop:text-base text-sm', classNames?.errorText)}>\n {resolvedErrorMessage}\n </Text>\n )}\n </div>\n )}\n </DialogContent>\n </Dialog>\n )\n}\n\nNotifyMeDialog.displayName = 'NotifyMeDialog'\n\nexport default NotifyMeDialog\nexport type { NotifyMeDialogProps }\n"],
5
- "mappings": "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",
6
- "names": ["jsx", "jsxs", "useCallback", "useEffect", "useState", "Button", "Text", "Dialog", "DialogContent", "DialogHeader", "DialogTitle", "DialogDescription", "Input", "Checkbox", "Heading", "cn", "React", "useExposure", "useAiuiContext", "gaTrack", "componentType", "componentName", "EMAIL_REGEX", "NotifyMeDialog", "open", "onOpenChange", "copy", "classNames", "checkboxes", "subscriptionMeta", "onSubmit", "title", "subTitle", "emailLabel", "emailPlaceholder", "submitBtnText", "errorEmpty", "errorInvalidEmail", "errorCheckboxRequired", "errorSubmit", "errorSubmitDetail", "successTitle", "successDesc", "successBtnText", "notifyMeDialogRef", "trackingData", "email", "setEmail", "checkedStates", "setCheckedStates", "emailState", "setEmailState", "checkboxErrors", "setCheckboxErrors", "submitState", "setSubmitState", "errorCode", "setErrorCode", "resolvedErrorMessage", "d", "canSubmit", "updateCheckedState", "index", "prev", "next", "handleEmailChange", "handleSubmit", "hasError", "newCheckboxErrors", "cb", "i", "checkedItems", "item", "err", "code", "timer", "handleOpenChange", "isOpen", "hasCheckboxes", "NotifyMeDialog_default"]
4
+ "sourcesContent": ["'use client'\n\nimport { useCallback, useEffect, useState } from 'react'\nimport {\n Button,\n Text,\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n Input,\n Checkbox,\n Heading,\n} from '../../components/index.js'\nimport { cn } from '../../helpers/index.js'\nimport type { NotifyMeDialogProps } from './types.js'\nimport * as React from 'react'\nimport { useExposure } from '../../hooks/useExposure.js'\nimport { useAiuiContext } from '../AiuiProvider/index.js'\nimport { gaTrack } from '../../shared/track.js'\n\nconst componentType = 'copy'\nconst componentName = 'NotifyMeDialog'\n\ntype EmailState = 'idle' | 'error-empty' | 'error-format'\ntype SubmitState = 'idle' | 'loading' | 'success' | 'error-submit'\n\nconst EMAIL_REGEX = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n\nconst NotifyMeDialog = ({\n open,\n onOpenChange,\n copy,\n classNames,\n checkboxes = [],\n subscriptionMeta,\n onSubmit,\n}: NotifyMeDialogProps) => {\n const {\n title,\n subTitle,\n emailLabel = 'Email address',\n emailPlaceholder = 'your@email.com',\n submitBtnText = 'Notify Me',\n errorEmpty,\n errorInvalidEmail,\n errorCheckboxRequired,\n errorSubmit = 'Something went wrong. Please try again.',\n errorSubmitDetail,\n successTitle,\n successDesc,\n successBtnText,\n } = copy\n\n const notifyMeDialogRef = React.useRef<HTMLDivElement>(null)\n const { trackingData } = useAiuiContext()\n useExposure(notifyMeDialogRef, {\n componentType,\n componentName,\n componentTitle: title,\n componentDescription: subTitle,\n })\n\n const [email, setEmail] = useState('')\n const [checkedStates, setCheckedStates] = useState<boolean[]>(() => checkboxes.map(() => false))\n const [emailState, setEmailState] = useState<EmailState>('idle')\n const [checkboxErrors, setCheckboxErrors] = useState<boolean[]>(() => checkboxes.map(() => false))\n const [submitState, setSubmitState] = useState<SubmitState>('idle')\n const [errorCode, setErrorCode] = useState<string | null>(null)\n\n // \u6839\u636E\u9519\u8BEF\u7801\u5339\u914D\u5BF9\u5E94\u6587\u6848\uFF0C\u672A\u5339\u914D\u5230\u5219\u56DE\u9000\u5230 errorSubmit\n const resolvedErrorMessage = errorCode\n ? (errorSubmitDetail?.find(d => d.code === errorCode)?.message ?? errorSubmit)\n : errorSubmit\n\n // \u662F\u5426\u53EF\u4EE5\u70B9\u51FB\u63D0\u4EA4\uFF08loading/success \u65F6\u7981\u7528\uFF09\n const canSubmit = submitState !== 'loading' && submitState !== 'success'\n\n // checkbox \u72B6\u6001\u53D8\u5316\n const updateCheckedState = useCallback(\n (index: number) => {\n // checkbox \u70B9\u51FB\u57CB\u70B9\n const cb = checkboxes[index]\n if (cb) {\n gaTrack({\n event: 'ga4Event',\n event_name: 'component_click',\n event_parameters: {\n page_group: trackingData.pageGroup || 'Home Page',\n component_type: componentType,\n component_name: componentName,\n button_name: cb.label,\n component_title: title,\n component_description: subTitle || '',\n },\n })\n }\n\n setCheckedStates(prev => {\n const next = [...prev]\n next[index] = !next[index]\n return next\n })\n // \u6E05\u9664\u5F53\u524D checkbox \u7684\u9519\u8BEF\u72B6\u6001\n setCheckboxErrors(prev => {\n const next = [...prev]\n next[index] = false\n return next\n })\n // \u6E05\u9664\u90AE\u7BB1\u9519\u8BEF\u548C\u63D0\u4EA4\u9519\u8BEF\n if (emailState !== 'idle') setEmailState('idle')\n if (submitState === 'error-submit') {\n setSubmitState('idle')\n setErrorCode(null)\n }\n },\n [emailState, submitState]\n )\n\n // \u90AE\u7BB1\u8F93\u5165\u53D8\u5316\n const handleEmailChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setEmail(e.target.value)\n if (emailState !== 'idle') setEmailState('idle')\n setCheckboxErrors(prev => (prev.some(Boolean) ? prev.map(() => false) : prev))\n if (submitState === 'error-submit') {\n setSubmitState('idle')\n setErrorCode(null)\n }\n },\n [emailState, submitState]\n )\n\n /**\n * \u5BA2\u6237\u7AEF onSubmit \u8C03\u7528\u793A\u4F8B\n *\n * \u63A5\u53E3\u5931\u8D25\u65F6\u9700 throw { code } \u4EE5\u4FBF\u7EC4\u4EF6\u6309 errorSubmitDetail \u5339\u914D\u5BF9\u5E94\u63D0\u793A\u6587\u6848\uFF0C\n * code \u4E3A number \u7C7B\u578B\u65F6\u7EC4\u4EF6\u4F1A\u81EA\u52A8\u8F6C\u4E3A string \u8FDB\u884C\u5339\u914D\u3002\n *\n * @example\n * const handleNotifyMeSubmit = useCallback(\n * async (params) => {\n * const { email, checkedItems, meta } = params\n * const res = await fetch('/api/multipass/shopifyservices/product_arrival_notices', {\n * method: 'POST',\n * headers: {\n * 'Content-Type': 'application/json',\n * 'current-language': locale,\n * },\n * body: JSON.stringify({\n * email,\n * locale,\n * sku: variant.sku,\n * shop: shop.primaryDomain?.host,\n * }),\n * })\n * if (res.ok) {\n * if (checkedItems?.some?.((item) => item.checked && item.checkbox_id === 'subscribe')) {\n * subscribe({ email, dealsType: 'outStockNotify_subscribe_emails' })\n * }\n * } else {\n * throw { code: res.status }\n * }\n * },\n * [locale, variant.sku, shop.primaryDomain?.host, subscribe],\n * )\n */\n // \u70B9\u51FB\u63D0\u4EA4\n const handleSubmit = useCallback(async () => {\n // \u70B9\u51FB\u63D0\u4EA4\u57CB\u70B9\n gaTrack({\n event: 'ga4Event',\n event_name: 'component_click',\n event_parameters: {\n page_group: trackingData.pageGroup || 'Home Page',\n component_type: componentType,\n component_name: componentName,\n button_name: submitBtnText,\n component_title: title,\n component_description: subTitle || '',\n },\n })\n\n let hasError = false\n\n // \u6821\u9A8C\u90AE\u7BB1\u975E\u7A7A\n if (!email.trim()) {\n setEmailState('error-empty')\n hasError = true\n } else if (!EMAIL_REGEX.test(email.trim())) {\n setEmailState('error-format')\n hasError = true\n } else {\n setEmailState('idle')\n }\n\n // \u6821\u9A8C required checkbox\n const newCheckboxErrors = checkboxes.map((cb, i) => {\n if (cb.label && cb.required && !checkedStates[i]) {\n hasError = true\n return true\n }\n return false\n })\n setCheckboxErrors(newCheckboxErrors)\n\n if (hasError) return\n\n setSubmitState('loading')\n try {\n const checkedItems = checkboxes\n .map((cb, i) =>\n cb.checkbox_id !== undefined ? { checkbox_id: cb.checkbox_id!, checked: checkedStates[i] } : null\n )\n .filter((item): item is { checkbox_id: string; checked: boolean } => item !== null)\n await onSubmit({ email: email.trim(), checkedItems, meta: subscriptionMeta })\n setSubmitState('success')\n } catch (err: unknown) {\n const code =\n err && typeof err === 'object' && 'code' in err ? String((err as Record<string, unknown>).code) : null\n setErrorCode(code)\n setSubmitState('error-submit')\n }\n }, [email, checkboxes, checkedStates, subscriptionMeta, onSubmit])\n\n // error-submit 3s \u540E\u81EA\u52A8\u6D88\u5931\n useEffect(() => {\n if (submitState !== 'error-submit') return\n const timer = setTimeout(() => {\n setSubmitState('idle')\n setErrorCode(null)\n }, 3000)\n return () => clearTimeout(timer)\n }, [submitState])\n\n // \u5173\u95ED\u5F39\u7A97\u65F6\u91CD\u7F6E\n const handleOpenChange = useCallback(\n (isOpen: boolean) => {\n if (!isOpen) {\n setEmail('')\n setCheckedStates(checkboxes.map(() => false))\n setEmailState('idle')\n setCheckboxErrors(checkboxes.map(() => false))\n setSubmitState('idle')\n setErrorCode(null)\n }\n onOpenChange(isOpen)\n },\n [checkboxes, onOpenChange]\n )\n\n const hasCheckboxes = checkboxes.some(cb => cb.label)\n\n return (\n <Dialog open={open} onOpenChange={handleOpenChange}>\n <DialogContent\n ref={notifyMeDialogRef}\n aria-describedby=\"notify-me-content\"\n className={cn(\n 'laptop:max-w-[480px] laptop:[&_.dialog-close-icon]:size-6 laptop:gap-8 rounded-box laptop:p-8 max-h-[90vh] w-[calc(100%-32px)] gap-6 overflow-y-auto bg-white p-6 [&_.dialog-close-icon]:size-5',\n classNames?.root\n )}\n >\n {submitState !== 'success' && (\n <DialogHeader className={cn(classNames?.header)}>\n <DialogTitle>\n <Heading as=\"h2\" size={2} className={cn('text-info-primary text-center font-bold', classNames?.title)}>\n {title}\n </Heading>\n </DialogTitle>\n {subTitle && (\n <DialogDescription asChild>\n <Text\n as=\"p\"\n className={cn('text-info-primary laptop:text-base mt-1 text-center text-sm', classNames?.subTitle)}\n >\n {subTitle}\n </Text>\n </DialogDescription>\n )}\n </DialogHeader>\n )}\n\n {submitState === 'success' ? (\n <div className={cn('flex flex-col items-center text-center', classNames?.successText)}>\n {/* \u6210\u529F\u56FE\u6807 */}\n <div className=\"flex size-20 items-center justify-center\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"80\" height=\"80\" viewBox=\"0 0 80 80\" fill=\"none\">\n <circle cx=\"40\" cy=\"40\" r=\"35\" fill=\"#30D158\" />\n <path\n d=\"M23.3333 38.3333L36.6666 50L56.6666 30\"\n stroke=\"white\"\n strokeWidth=\"6.66667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </div>\n <div className=\"mt-4\">\n {/* \u6807\u9898 */}\n <Heading as=\"h3\" size={2} className=\"text-info-primary font-bold\">\n {successTitle}\n </Heading>\n {/* \u526F\u6587\u6848 */}\n {successDesc && (\n <Text as=\"p\" className=\"text-info-primary laptop:text-base mt-1 text-sm\">\n {successDesc}\n </Text>\n )}\n </div>\n {/* \u786E\u8BA4\u6309\u94AE */}\n {successBtnText && (\n <Button\n variant=\"primary\"\n size=\"lg\"\n onClick={() => onOpenChange(false)}\n className=\"laptop:mt-8 mt-6 w-full\"\n >\n {successBtnText}\n </Button>\n )}\n </div>\n ) : (\n <div className=\"flex flex-col gap-4\">\n {/* \u90AE\u7BB1\u8F93\u5165\u6846 */}\n <div className={classNames?.emailInput}>\n <Text\n as=\"label\"\n htmlFor=\"notify-me-email\"\n className=\"text-info-primary laptop:text-base mb-2 block text-sm\"\n >\n {emailLabel}\n </Text>\n <Input\n id=\"notify-me-email\"\n type=\"email\"\n placeholder={emailPlaceholder}\n value={email}\n onChange={handleEmailChange}\n disabled={submitState === 'loading'}\n className={cn(\n 'placeholder:text-info-tertiary text-info-primary laptop:h-[54px] laptop:text-base laptop:p-4 border-lines-1 h-[44px] w-full bg-white p-3 text-sm font-bold placeholder:font-bold focus-visible:!outline-none',\n emailState !== 'idle' && 'border-error-0'\n )}\n />\n {emailState === 'error-empty' && (\n <Text as=\"p\" className=\"text-error-0 laptop:text-base mt-2 text-sm\">\n {errorEmpty}\n </Text>\n )}\n {emailState === 'error-format' && (\n <Text as=\"p\" className=\"text-error-0 laptop:text-base mt-2 text-sm\">\n {errorInvalidEmail}\n </Text>\n )}\n </div>\n\n {/* Checkboxes \u5217\u8868 */}\n {hasCheckboxes && (\n <div className={cn('laptop:gap-4 flex flex-col gap-2', classNames?.checkboxes)}>\n {checkboxes.map((cb, i) => {\n if (!cb.label) return null\n return (\n <div key={i}>\n <label\n className={cn(\n 'text-info-tertiary flex cursor-pointer items-start gap-2',\n classNames?.checkboxItem\n )}\n >\n <Checkbox\n checked={checkedStates[i]}\n onCheckedChange={() => updateCheckedState(i)}\n data-headless-type-name={`${componentType}#${componentName}`}\n data-headless-title-desc-button={`''#''#${cb.label}`}\n data-headless-nav-position={`''#1`}\n disabled={submitState === 'loading'}\n className=\"border-info-secondary data-[state=checked]:bg-info-secondary mt-0.5 shrink-0\"\n />\n <Text\n as=\"span\"\n className=\"text-info-tertiary laptop:text-base [&_a]:text-brand-0 text-sm leading-snug [&_a]:underline\"\n html={cb.label}\n />\n </label>\n {checkboxErrors[i] && (\n <Text as=\"p\" className=\"text-error-0 laptop:text-base mt-2 text-sm\">\n {errorCheckboxRequired}\n </Text>\n )}\n </div>\n )\n })}\n </div>\n )}\n\n {/* \u63D0\u4EA4\u6309\u94AE */}\n <Button\n variant=\"primary\"\n size=\"lg\"\n loading={submitState === 'loading'}\n disabled={!canSubmit}\n onClick={handleSubmit}\n className={cn('w-full', classNames?.submitBtn)}\n data-headless-type-name={`${componentType}#${componentName}`}\n data-headless-title-desc-button={`''#''#${submitBtnText}`}\n data-headless-nav-position={`''#1`}\n >\n {submitBtnText}\n </Button>\n\n {/* \u63D0\u4EA4\u9519\u8BEF\uFF08\u5F39\u7A97\u6700\u5E95\u90E8\uFF09 */}\n {submitState === 'error-submit' && (\n <Text as=\"p\" className={cn('text-error-0 laptop:text-base text-sm', classNames?.errorText)}>\n {resolvedErrorMessage}\n </Text>\n )}\n </div>\n )}\n </DialogContent>\n </Dialog>\n )\n}\n\nNotifyMeDialog.displayName = 'NotifyMeDialog'\n\nexport default NotifyMeDialog\nexport type { NotifyMeDialogProps }\n"],
5
+ "mappings": "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",
6
+ "names": ["jsx", "jsxs", "useCallback", "useEffect", "useState", "Button", "Text", "Dialog", "DialogContent", "DialogHeader", "DialogTitle", "DialogDescription", "Input", "Checkbox", "Heading", "cn", "React", "useExposure", "useAiuiContext", "gaTrack", "componentType", "componentName", "EMAIL_REGEX", "NotifyMeDialog", "open", "onOpenChange", "copy", "classNames", "checkboxes", "subscriptionMeta", "onSubmit", "title", "subTitle", "emailLabel", "emailPlaceholder", "submitBtnText", "errorEmpty", "errorInvalidEmail", "errorCheckboxRequired", "errorSubmit", "errorSubmitDetail", "successTitle", "successDesc", "successBtnText", "notifyMeDialogRef", "trackingData", "email", "setEmail", "checkedStates", "setCheckedStates", "emailState", "setEmailState", "checkboxErrors", "setCheckboxErrors", "submitState", "setSubmitState", "errorCode", "setErrorCode", "resolvedErrorMessage", "d", "canSubmit", "updateCheckedState", "index", "cb", "prev", "next", "handleEmailChange", "handleSubmit", "hasError", "newCheckboxErrors", "i", "checkedItems", "item", "err", "code", "timer", "handleOpenChange", "isOpen", "hasCheckboxes", "NotifyMeDialog_default"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anker-in/headless-ui",
3
- "version": "1.3.41-alpha.1784792113239",
3
+ "version": "1.3.41-alpha.1784792494281",
4
4
  "type": "commonjs",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "types": "./dist/cjs/index.d.ts",