@lifesg/react-design-system 3.5.0-canary.1 → 3.5.0-canary.3
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.
- package/cjs/data-table/data-table.js +1 -1
- package/cjs/data-table/data-table.js.map +1 -1
- package/cjs/data-table/data-table.styles.js +61 -52
- package/cjs/data-table/data-table.styles.js.map +1 -1
- package/cjs/external/dompurify/dist/purify.es.js +2 -2
- package/cjs/external/dompurify/dist/purify.es.js.map +1 -1
- package/cjs/footer/footer-helper.js +1 -1
- package/cjs/footer/footer-helper.js.map +1 -1
- package/cjs/index.js +1 -1
- package/cjs/navbar/drawer.js +1 -1
- package/cjs/navbar/drawer.js.map +1 -1
- package/cjs/navbar/navbar-logo-data.js +1 -1
- package/cjs/navbar/navbar-logo-data.js.map +1 -1
- package/cjs/navbar/navbar.js +1 -1
- package/cjs/navbar/navbar.js.map +1 -1
- package/cjs/predictive-text-input/predictive-text-input.js +1 -1
- package/cjs/predictive-text-input/predictive-text-input.js.map +1 -1
- package/cjs/shared/dropdown-wrapper/element-with-dropdown.js +1 -1
- package/cjs/shared/dropdown-wrapper/element-with-dropdown.js.map +1 -1
- package/cjs/shared/internal-calendar/calendar-manager.style.js +18 -17
- package/cjs/shared/internal-calendar/calendar-manager.style.js.map +1 -1
- package/cjs/table/table.styles.js +4 -6
- package/cjs/table/table.styles.js.map +1 -1
- package/cjs/theme/colour-primitive/specs/toteboard-colour-set.js +2 -0
- package/cjs/theme/colour-primitive/specs/toteboard-colour-set.js.map +1 -0
- package/cjs/theme/colour-primitive/theme-helper.js +1 -1
- package/cjs/theme/colour-primitive/theme-helper.js.map +1 -1
- package/cjs/theme/colour-semantic/theme-helper.js +1 -1
- package/cjs/theme/colour-semantic/theme-helper.js.map +1 -1
- package/cjs/theme/font/specs/toteboard-font-set.js +2 -0
- package/cjs/theme/font/specs/toteboard-font-set.js.map +1 -0
- package/cjs/theme/font/theme-helper.js +1 -1
- package/cjs/theme/font/theme-helper.js.map +1 -1
- package/cjs/theme/font-spec/specs/toteboard-font-spec-set.js +2 -0
- package/cjs/theme/font-spec/specs/toteboard-font-spec-set.js.map +1 -0
- package/cjs/theme/font-spec/theme-helper.js +1 -1
- package/cjs/theme/font-spec/theme-helper.js.map +1 -1
- package/cjs/theme/index.js +1 -1
- package/cjs/theme/index.js.map +1 -1
- package/cjs/time-range-picker/combobox-picker/combobox-picker.js +1 -1
- package/cjs/time-range-picker/combobox-picker/combobox-picker.js.map +1 -1
- package/cjs/time-range-picker/common.styles.js +7 -3
- package/cjs/time-range-picker/common.styles.js.map +1 -1
- package/cjs/time-range-picker/dial-picker/dial-picker.js +1 -1
- package/cjs/time-range-picker/dial-picker/dial-picker.js.map +1 -1
- package/cjs/timepicker/timepicker.styles.js +7 -3
- package/cjs/timepicker/timepicker.styles.js.map +1 -1
- package/cjs/util/merge-refs.js +1 -1
- package/cjs/util/merge-refs.js.map +1 -1
- package/cjs/util/use-throttle.js +2 -0
- package/cjs/util/use-throttle.js.map +1 -0
- package/data-table/data-table.js +1 -1
- package/data-table/data-table.js.map +1 -1
- package/data-table/data-table.styles.d.ts +11 -11
- package/data-table/data-table.styles.js +73 -64
- package/data-table/data-table.styles.js.map +1 -1
- package/external/dompurify/dist/purify.es.js +2 -2
- package/external/dompurify/dist/purify.es.js.map +1 -1
- package/footer/footer-helper.js +1 -1
- package/footer/footer-helper.js.map +1 -1
- package/index.js +1 -1
- package/navbar/drawer.js +1 -1
- package/navbar/drawer.js.map +1 -1
- package/navbar/navbar-logo-data.js +1 -1
- package/navbar/navbar-logo-data.js.map +1 -1
- package/navbar/navbar.js +1 -1
- package/navbar/navbar.js.map +1 -1
- package/package.json +1 -1
- package/predictive-text-input/predictive-text-input.js +1 -1
- package/predictive-text-input/predictive-text-input.js.map +1 -1
- package/shared/dropdown-wrapper/element-with-dropdown.d.ts +5 -4
- package/shared/dropdown-wrapper/element-with-dropdown.js +1 -1
- package/shared/dropdown-wrapper/element-with-dropdown.js.map +1 -1
- package/shared/internal-calendar/calendar-manager.style.js +18 -17
- package/shared/internal-calendar/calendar-manager.style.js.map +1 -1
- package/table/table.styles.js +10 -12
- package/table/table.styles.js.map +1 -1
- package/theme/colour-primitive/specs/toteboard-colour-set.d.ts +2 -0
- package/theme/colour-primitive/specs/toteboard-colour-set.js +2 -0
- package/theme/colour-primitive/specs/toteboard-colour-set.js.map +1 -0
- package/theme/colour-primitive/theme-helper.js +1 -1
- package/theme/colour-primitive/theme-helper.js.map +1 -1
- package/theme/colour-semantic/theme-helper.js +1 -1
- package/theme/colour-semantic/theme-helper.js.map +1 -1
- package/theme/font/specs/toteboard-font-set.d.ts +2 -0
- package/theme/font/specs/toteboard-font-set.js +2 -0
- package/theme/font/specs/toteboard-font-set.js.map +1 -0
- package/theme/font/theme-helper.js +1 -1
- package/theme/font/theme-helper.js.map +1 -1
- package/theme/font-spec/specs/toteboard-font-spec-set.d.ts +2 -0
- package/theme/font-spec/specs/toteboard-font-spec-set.js +2 -0
- package/theme/font-spec/specs/toteboard-font-spec-set.js.map +1 -0
- package/theme/font-spec/theme-helper.js +1 -1
- package/theme/font-spec/theme-helper.js.map +1 -1
- package/theme/index.d.ts +19 -0
- package/theme/index.js +1 -1
- package/theme/index.js.map +1 -1
- package/theme/types.d.ts +3 -3
- package/time-range-picker/combobox-picker/combobox-picker.js +1 -1
- package/time-range-picker/combobox-picker/combobox-picker.js.map +1 -1
- package/time-range-picker/common.styles.d.ts +6 -2
- package/time-range-picker/common.styles.js +9 -5
- package/time-range-picker/common.styles.js.map +1 -1
- package/time-range-picker/dial-picker/dial-picker.js +1 -1
- package/time-range-picker/dial-picker/dial-picker.js.map +1 -1
- package/timepicker/timepicker.styles.js +7 -3
- package/timepicker/timepicker.styles.js.map +1 -1
- package/util/index.d.ts +1 -0
- package/util/merge-refs.d.ts +1 -1
- package/util/merge-refs.js +1 -1
- package/util/merge-refs.js.map +1 -1
- package/util/use-throttle.d.ts +1 -0
- package/util/use-throttle.js +2 -0
- package/util/use-throttle.js.map +1 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("../external/dayjs/dayjs.min.js"),t=require("./footer-disclaimer-links-data.js");exports.FooterHelper=void 0,function(r){r.getCopyrightInfo=(t=new Date,r)=>{const
|
|
1
|
+
"use strict";var e=require("../external/dayjs/dayjs.min.js"),t=require("./footer-disclaimer-links-data.js");exports.FooterHelper=void 0,function(r){r.getCopyrightInfo=(t=new Date,r)=>{const o=s(r);return`${`${(new Date).getFullYear()} ${o}`} Last updated ${e.default(t).format("D MMMM YYYY")}`};const s=e=>{switch(e){case"lifesg":return"LifeSG, Government of Singapore.";case"bookingsg":return"BookingSG, Government of Singapore.";case"mylegacy":return"MyLegacy@LifeSG, Government of Singapore.";case"ccube":return"Citizen Collective Common, Government of Singapore.";case"imda":return"IMDA, Government of Singapore.";default:return"Government of Singapore."}};r.getFooterLogoAttribute=e=>{switch(e){case"lifesg":return{src:"https://assets.life.gov.sg/react-design-system/img/logo/lifesg-primary-logo.svg",alt:"LifeSG",style:{width:"4rem"}};case"bookingsg":return{src:"https://home.booking.gov.sg/images/bookingsg/footer.svg",alt:"BookingSG",style:{width:"4rem"}};case"mylegacy":return{src:"https://mylegacy.life.gov.sg/images/site-logo.png",alt:"MyLegacy",style:{width:"10rem",maxHeight:"2rem"}};case"ccube":return{src:"https://assets.life.gov.sg/ccube/logo-ccube.svg",alt:"Citizen Collective Common",style:{width:"10rem"}};case"supportgowhere":return{src:"https://assets.life.gov.sg/react-design-system/img/logo/sgw-logo.png",alt:"SupportGoWhere",style:{width:"10rem"}};case"toteboard":return{src:"https://assets.life.gov.sg/react-design-system/img/logo/tote-board-logo.svg",alt:"Tote Board",style:{width:"4rem"}};default:return{}}},r.getDisclaimerLinks=(e,r)=>{const s=t.getDefaultDisclaimerLinks(e);return{privacy:Object.assign(Object.assign(Object.assign({},s.privacy),r&&r.privacy?r.privacy:{}),{children:"Privacy Statement"}),termsOfUse:Object.assign(Object.assign(Object.assign({},s.termsOfUse),r&&r.termsOfUse?r.termsOfUse:{}),{children:"Terms of Use"}),reportVulnerability:Object.assign(Object.assign(Object.assign({},s.reportVulnerability),r&&r.reportVulnerability?r.reportVulnerability:{}),{children:"Report Vulnerability"})}}}(exports.FooterHelper||(exports.FooterHelper={}));
|
|
2
2
|
//# sourceMappingURL=footer-helper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"footer-helper.js","sources":["../../../src/footer/footer-helper.ts"],"sourcesContent":["import dayjs from \"dayjs\";\nimport { ResourceScheme } from \"../theme/types\";\nimport { TypographyLinkProps } from \"../typography\";\nimport { getDefaultDisclaimerLinks } from \"./footer-disclaimer-links-data\";\nimport { DisclaimerLinks } from \"./types\";\n\n/* Internally used. Not to be exported */\nexport interface InternalDisclaimerLinks {\n privacy?: TypographyLinkProps | undefined;\n termsOfUse?: TypographyLinkProps | undefined;\n reportVulnerability?: TypographyLinkProps | undefined;\n}\n\nexport namespace FooterHelper {\n export const getCopyrightInfo = (\n lastUpdated: Date = new Date(),\n resourceScheme: ResourceScheme | undefined\n ): string => {\n const copyrightText = getCopyrightText(resourceScheme);\n const copyright = `${new Date().getFullYear()} ${copyrightText}`;\n const lastUpdatedDateString = dayjs(lastUpdated).format(\"D MMMM YYYY\");\n\n return `${copyright} Last updated ${lastUpdatedDateString}`;\n };\n\n const getCopyrightText = (resourceScheme: ResourceScheme | undefined) => {\n switch (resourceScheme) {\n case \"lifesg\":\n return \"LifeSG, Government of Singapore.\";\n case \"bookingsg\":\n return \"BookingSG, Government of Singapore.\";\n case \"mylegacy\":\n return \"MyLegacy@LifeSG, Government of Singapore.\";\n case \"ccube\":\n return \"Citizen Collective Common, Government of Singapore.\";\n case \"imda\":\n return \"IMDA, Government of Singapore.\";\n default:\n return \"Government of Singapore.\";\n }\n };\n\n export const getFooterLogoAttribute = (\n resourceScheme?: ResourceScheme\n ): React.ImgHTMLAttributes<HTMLImageElement> => {\n switch (resourceScheme) {\n case \"lifesg\":\n return {\n src: \"https://assets.life.gov.sg/react-design-system/img/logo/lifesg-primary-logo.svg\",\n alt: \"LifeSG\",\n style: { width: \"4rem\" },\n };\n\n case \"bookingsg\":\n return {\n src: \"https://home.booking.gov.sg/images/bookingsg/footer.svg\",\n alt: \"BookingSG\",\n style: { width: \"4rem\" },\n };\n case \"mylegacy\":\n return {\n src: \"https://mylegacy.life.gov.sg/images/site-logo.png\",\n alt: \"MyLegacy\",\n style: { width: \"10rem\", maxHeight: \"2rem\" },\n };\n case \"ccube\":\n return {\n src: \"https://assets.life.gov.sg/ccube/logo-ccube.svg\",\n alt: \"Citizen Collective Common\",\n style: { width: \"10rem\" },\n };\n case \"supportgowhere\":\n return {\n src: \"https://assets.life.gov.sg/react-design-system/img/logo/sgw-logo.png\",\n alt: \"SupportGoWhere\",\n style: { width: \"10rem\" },\n };\n\n default:\n return {};\n }\n };\n\n export const getDisclaimerLinks = (\n resourceScheme: ResourceScheme | undefined,\n customDisclaimerLinks: DisclaimerLinks | undefined\n ): InternalDisclaimerLinks => {\n const defaultDisclaimerLinks =\n getDefaultDisclaimerLinks(resourceScheme);\n return {\n privacy: {\n ...defaultDisclaimerLinks.privacy,\n ...(customDisclaimerLinks && customDisclaimerLinks.privacy\n ? customDisclaimerLinks.privacy\n : {}),\n children: \"Privacy Statement\",\n },\n termsOfUse: {\n ...defaultDisclaimerLinks.termsOfUse,\n ...(customDisclaimerLinks && customDisclaimerLinks.termsOfUse\n ? customDisclaimerLinks.termsOfUse\n : {}),\n children: \"Terms of Use\",\n },\n reportVulnerability: {\n ...defaultDisclaimerLinks.reportVulnerability,\n ...(customDisclaimerLinks &&\n customDisclaimerLinks.reportVulnerability\n ? customDisclaimerLinks.reportVulnerability\n : {}),\n children: \"Report Vulnerability\",\n },\n };\n };\n}\n"],"names":["FooterHelper","getCopyrightInfo","lastUpdated","Date","resourceScheme","copyrightText","getCopyrightText","getFullYear","dayjs","format","getFooterLogoAttribute","src","alt","style","width","maxHeight","getDisclaimerLinks","customDisclaimerLinks","defaultDisclaimerLinks","getDefaultDisclaimerLinks","privacy","Object","assign","children","termsOfUse","reportVulnerability"],"mappings":"4GAaiBA,QAAAA,kBAAAA,EAAjB,SAAiBA,GACAA,EAAAC,iBAAmB,CAC5BC,EAAoB,IAAIC,KACxBC,KAEA,MAAMC,EAAgBC,EAAiBF,GAIvC,MAAO,GAHW,IAAG,IAAID,MAAOI,iBAAiBF,oBACnBG,EAAAA,QAAMN,GAAaO,OAAO,gBAEG,EAG/D,MAAMH,EAAoBF,IACtB,OAAQA,GACJ,IAAK,SACD,MAAO,mCACX,IAAK,YACD,MAAO,sCACX,IAAK,WACD,MAAO,4CACX,IAAK,QACD,MAAO,sDACX,IAAK,OACD,MAAO,iCACX,QACI,MAAO,6BAINJ,EAAAU,uBACTN,IAEA,OAAQA,GACJ,IAAK,SACD,MAAO,CACHO,IAAK,kFACLC,IAAK,SACLC,MAAO,CAAEC,MAAO,SAGxB,IAAK,YACD,MAAO,CACHH,IAAK,0DACLC,IAAK,YACLC,MAAO,CAAEC,MAAO,SAExB,IAAK,WACD,MAAO,CACHH,IAAK,oDACLC,IAAK,WACLC,MAAO,CAAEC,MAAO,QAASC,UAAW,SAE5C,IAAK,QACD,MAAO,CACHJ,IAAK,kDACLC,IAAK,4BACLC,MAAO,CAAEC,MAAO,UAExB,IAAK,iBACD,MAAO,CACHH,IAAK,uEACLC,IAAK,iBACLC,MAAO,CAAEC,MAAO,
|
|
1
|
+
{"version":3,"file":"footer-helper.js","sources":["../../../src/footer/footer-helper.ts"],"sourcesContent":["import dayjs from \"dayjs\";\nimport { ResourceScheme } from \"../theme/types\";\nimport { TypographyLinkProps } from \"../typography\";\nimport { getDefaultDisclaimerLinks } from \"./footer-disclaimer-links-data\";\nimport { DisclaimerLinks } from \"./types\";\n\n/* Internally used. Not to be exported */\nexport interface InternalDisclaimerLinks {\n privacy?: TypographyLinkProps | undefined;\n termsOfUse?: TypographyLinkProps | undefined;\n reportVulnerability?: TypographyLinkProps | undefined;\n}\n\nexport namespace FooterHelper {\n export const getCopyrightInfo = (\n lastUpdated: Date = new Date(),\n resourceScheme: ResourceScheme | undefined\n ): string => {\n const copyrightText = getCopyrightText(resourceScheme);\n const copyright = `${new Date().getFullYear()} ${copyrightText}`;\n const lastUpdatedDateString = dayjs(lastUpdated).format(\"D MMMM YYYY\");\n\n return `${copyright} Last updated ${lastUpdatedDateString}`;\n };\n\n const getCopyrightText = (resourceScheme: ResourceScheme | undefined) => {\n switch (resourceScheme) {\n case \"lifesg\":\n return \"LifeSG, Government of Singapore.\";\n case \"bookingsg\":\n return \"BookingSG, Government of Singapore.\";\n case \"mylegacy\":\n return \"MyLegacy@LifeSG, Government of Singapore.\";\n case \"ccube\":\n return \"Citizen Collective Common, Government of Singapore.\";\n case \"imda\":\n return \"IMDA, Government of Singapore.\";\n default:\n return \"Government of Singapore.\";\n }\n };\n\n export const getFooterLogoAttribute = (\n resourceScheme?: ResourceScheme\n ): React.ImgHTMLAttributes<HTMLImageElement> => {\n switch (resourceScheme) {\n case \"lifesg\":\n return {\n src: \"https://assets.life.gov.sg/react-design-system/img/logo/lifesg-primary-logo.svg\",\n alt: \"LifeSG\",\n style: { width: \"4rem\" },\n };\n\n case \"bookingsg\":\n return {\n src: \"https://home.booking.gov.sg/images/bookingsg/footer.svg\",\n alt: \"BookingSG\",\n style: { width: \"4rem\" },\n };\n case \"mylegacy\":\n return {\n src: \"https://mylegacy.life.gov.sg/images/site-logo.png\",\n alt: \"MyLegacy\",\n style: { width: \"10rem\", maxHeight: \"2rem\" },\n };\n case \"ccube\":\n return {\n src: \"https://assets.life.gov.sg/ccube/logo-ccube.svg\",\n alt: \"Citizen Collective Common\",\n style: { width: \"10rem\" },\n };\n case \"supportgowhere\":\n return {\n src: \"https://assets.life.gov.sg/react-design-system/img/logo/sgw-logo.png\",\n alt: \"SupportGoWhere\",\n style: { width: \"10rem\" },\n };\n case \"toteboard\":\n return {\n src: \"https://assets.life.gov.sg/react-design-system/img/logo/tote-board-logo.svg\",\n alt: \"Tote Board\",\n style: { width: \"4rem\" },\n };\n\n default:\n return {};\n }\n };\n\n export const getDisclaimerLinks = (\n resourceScheme: ResourceScheme | undefined,\n customDisclaimerLinks: DisclaimerLinks | undefined\n ): InternalDisclaimerLinks => {\n const defaultDisclaimerLinks =\n getDefaultDisclaimerLinks(resourceScheme);\n return {\n privacy: {\n ...defaultDisclaimerLinks.privacy,\n ...(customDisclaimerLinks && customDisclaimerLinks.privacy\n ? customDisclaimerLinks.privacy\n : {}),\n children: \"Privacy Statement\",\n },\n termsOfUse: {\n ...defaultDisclaimerLinks.termsOfUse,\n ...(customDisclaimerLinks && customDisclaimerLinks.termsOfUse\n ? customDisclaimerLinks.termsOfUse\n : {}),\n children: \"Terms of Use\",\n },\n reportVulnerability: {\n ...defaultDisclaimerLinks.reportVulnerability,\n ...(customDisclaimerLinks &&\n customDisclaimerLinks.reportVulnerability\n ? customDisclaimerLinks.reportVulnerability\n : {}),\n children: \"Report Vulnerability\",\n },\n };\n };\n}\n"],"names":["FooterHelper","getCopyrightInfo","lastUpdated","Date","resourceScheme","copyrightText","getCopyrightText","getFullYear","dayjs","format","getFooterLogoAttribute","src","alt","style","width","maxHeight","getDisclaimerLinks","customDisclaimerLinks","defaultDisclaimerLinks","getDefaultDisclaimerLinks","privacy","Object","assign","children","termsOfUse","reportVulnerability"],"mappings":"4GAaiBA,QAAAA,kBAAAA,EAAjB,SAAiBA,GACAA,EAAAC,iBAAmB,CAC5BC,EAAoB,IAAIC,KACxBC,KAEA,MAAMC,EAAgBC,EAAiBF,GAIvC,MAAO,GAHW,IAAG,IAAID,MAAOI,iBAAiBF,oBACnBG,EAAAA,QAAMN,GAAaO,OAAO,gBAEG,EAG/D,MAAMH,EAAoBF,IACtB,OAAQA,GACJ,IAAK,SACD,MAAO,mCACX,IAAK,YACD,MAAO,sCACX,IAAK,WACD,MAAO,4CACX,IAAK,QACD,MAAO,sDACX,IAAK,OACD,MAAO,iCACX,QACI,MAAO,6BAINJ,EAAAU,uBACTN,IAEA,OAAQA,GACJ,IAAK,SACD,MAAO,CACHO,IAAK,kFACLC,IAAK,SACLC,MAAO,CAAEC,MAAO,SAGxB,IAAK,YACD,MAAO,CACHH,IAAK,0DACLC,IAAK,YACLC,MAAO,CAAEC,MAAO,SAExB,IAAK,WACD,MAAO,CACHH,IAAK,oDACLC,IAAK,WACLC,MAAO,CAAEC,MAAO,QAASC,UAAW,SAE5C,IAAK,QACD,MAAO,CACHJ,IAAK,kDACLC,IAAK,4BACLC,MAAO,CAAEC,MAAO,UAExB,IAAK,iBACD,MAAO,CACHH,IAAK,uEACLC,IAAK,iBACLC,MAAO,CAAEC,MAAO,UAExB,IAAK,YACD,MAAO,CACHH,IAAK,8EACLC,IAAK,aACLC,MAAO,CAAEC,MAAO,SAGxB,QACI,MAAO,CAAA,IAINd,EAAAgB,mBAAqB,CAC9BZ,EACAa,KAEA,MAAMC,EACFC,EAAAA,0BAA0Bf,GAC9B,MAAO,CACHgB,QAAOC,OAAAC,OAAAD,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EACAJ,EAAuBE,SACtBH,GAAyBA,EAAsBG,QAC7CH,EAAsBG,QACtB,CAAA,IACNG,SAAU,sBAEdC,WAAUH,OAAAC,OAAAD,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EACHJ,EAAuBM,YACtBP,GAAyBA,EAAsBO,WAC7CP,EAAsBO,WACtB,CAAA,IACND,SAAU,iBAEdE,iEACOP,EAAuBO,qBACtBR,GACJA,EAAsBQ,oBAChBR,EAAsBQ,oBACtB,CAAA,IACNF,SAAU,yBAEjB,CAER,CA3GD,CAAiBvB,QAAAA,eAAAA,qBAAY,CAAA"}
|
package/cjs/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("./accordion/accordion.js"),r=require("./alert/alert.js"),t=require("./animations/loading-spinner/loading-spinner.js"),o=require("./animations/loading-dots/loading-dots.js"),i=require("./animations/loading-dots-spinner/loading-dots-spinner.js"),s=require("./animations/themed-loading-spinner/themed-loading-spinner.js"),n=require("./avatar/avatar.js"),p=require("./badge/badge.js"),a=require("./box-container/box-container.js"),u=require("./breadcrumb/breadcrumb.js"),l=require("./button/button.js"),x=require("./button-with-icon/button-with-icon.js"),d=require("./calendar/calendar.js"),m=require("./card/card.js"),g=require("./checkbox/checkbox.js"),c=require("./countdown-timer/countdown-timer.js"),h=require("./data-table/data-table.js"),T=require("./date-input/date-input.js"),j=require("./date-navigator/date-navigator.js"),q=require("./date-range-input/date-range-input.js"),b=require("./divider/divider.js"),S=require("./drawer/drawer.js"),v=require("./e-signature/e-signature.js"),y=require("./error-display/error-display.js"),B=require("./error-display/helper.js"),k=require("./feedback-rating/feedback-rating.js"),I=require("./file-download/file-download.js"),_=require("./file-upload/file-upload.js"),C=require("./filter/filter.js"),M=require("./footer/footer.js"),V=require("./form/index.js"),P=require("./fullscreen-image-carousel/fullscreen-image-carousel.js"),w=require("./histogram-slider/histogram-slider.js"),D=require("./icon-button/icon-button.js"),f=require("./image-button/image-button.js"),L=require("./input/input.js"),R=require("./input-group/input-group.js"),F=require("./input-multi-select/input-multi-select.js"),G=require("./input-nested-multi-select/input-nested-multi-select.js"),N=require("./input-nested-select/input-nested-select.js"),W=require("./input-range-select/input-range-select.js"),A=require("./input-range-slider/input-range-slider.js"),O=require("./input-select/input-select.js"),H=require("./input-slider/input-slider.js"),E=require("./input-textarea/textarea.js"),U=require("./language-switcher/language-switcher.js"),Q=require("./layout/index.js"),K=require("./link-list/link-list.js"),z=require("./markup/markup.js"),J=require("./masked-input/masked-input.js"),X=require("./masonry/masonry.js"),Y=require("./masthead/masthead.js"),Z=require("./menu/menu.js"),$=require("./modal/index.js"),ee=require("./modal-v2/index.js"),re=require("./navbar/navbar.js"),te=require("./notification-banner/notification-banner.js"),oe=require("./notification-banner/notification-banner-hoc.js"),ie=require("./otp-input/otp-input.js"),se=require("./overlay/overlay.js"),ne=require("./pagination/pagination.js"),pe=require("./phone-number-input/phone-number-input.js"),ae=require("./pill/pill.js"),ue=require("./popover/popover-hoc.js"),le=require("./popover/popover.js"),xe=require("./popover-v2/popover.js"),de=require("./popover-v2/popover-inline/popover-inline.js"),me=require("./popover-v2/popover-trigger.js"),ge=require("./predictive-text-input/predictive-text-input.js"),ce=require("./progress-indicator/progress-indicator.js"),he=require("./radio-button/radio-button.js"),Te=require("./select-histogram/select-histogram.js"),je=require("./sidenav/sidenav.js"),qe=require("./singpass-button/singpass-button.js"),be=require("./smart-app-banner/smart-app-banner.js"),Se=require("./tab/tab.js"),ve=require("./table/table.js"),ye=require("./tag/tag.js"),Be=require("./text-list/index.js"),ke=require("./theme/index.js"),Ie=require("./time-range-picker/time-range-picker.js"),_e=require("./time-slot-bar/time-slot-bar.js"),Ce=require("./time-slot-bar-week/time-slot-bar-week.js"),Me=require("./time-slot-week-view/time-slot-week-view.js"),Ve=require("./timeline/timeline.js"),Pe=require("./timepicker/timepicker.js"),we=require("./timetable/timetable.js"),De=require("./toast/toast.js"),fe=require("./toggle/toggle.js"),Le=require("./tooltip/tooltip.js"),Re=require("./tooltip/tooltip-hoc.js"),Fe=require("./typography/typography.js"),Ge=require("./uneditable-section/index.js"),Ne=require("./unit-number/unit-number-input.js"),We=require("./v2_color/color.js"),Ae=require("./v2_design-token/design-token.js"),Oe=require("./v2_layout/index.js"),He=require("./v2_media/media.js"),Ee=require("./v2_text/helper.js"),Ue=require("./v2_text/text-style.js"),Qe=require("./v2_text/text.js"),Ke=require("./v2_text/types.js"),ze=require("./v2_text-list/index.js"),Je=require("./v2_theme/index.js"),Xe=require("./v2_transition/index.js"),Ye=require("./theme/ds-theme-provider.js"),Ze=require("./v2_theme/types.js"),$e=require("./theme/use-theme-mode.js");exports.Accordion=e.Accordion,exports.Alert=r.Alert,exports.LoadingSpinner=t.LoadingSpinner,exports.LoadingDots=o.LoadingDots,exports.LoadingDotsSpinner=i.LoadingDotsSpinner,exports.ThemedLoadingSpinner=s.ThemedLoadingSpinner,exports.Avatar=n.Avatar,exports.Badge=p.Badge,exports.BoxContainer=a.BoxContainer,exports.Breadcrumb=u.Breadcrumb,exports.Button=l.Button,exports.ButtonWithIcon=x.ButtonWithIcon,exports.Calendar=d.Calendar,exports.Card=m.Card,exports.Checkbox=g.Checkbox,exports.CountdownTimer=c.CountdownTimer,exports.DataTable=h.DataTable,exports.DateInput=T.DateInput,exports.DateNavigator=j.DateNavigator,exports.DateRangeInput=q.DateRangeInput,exports.Divider=b.Divider,exports.Drawer=S.Drawer,exports.ESignature=v.ESignature,exports.ErrorDisplay=y.ErrorDisplay,Object.defineProperty(exports,"ErrorDisplayHelper",{enumerable:!0,get:function(){return B.ErrorDisplayHelper}}),exports.FeedbackRating=k.FeedbackRating,exports.FileDownload=I.FileDownload,exports.FileUpload=_.FileUpload,exports.Filter=C.Filter,exports.Footer=M.Footer,exports.Form=V.Form,exports.Component=P.Component,exports.FullscreenImageCarousel=P.FullscreenImageCarousel,exports.HistogramSlider=w.HistogramSlider,exports.IconButton=D.IconButton,exports.ImageButton=f.ImageButton,exports.Input=L.Input,exports.InputGroup=R.InputGroup,exports.InputMultiSelect=F.InputMultiSelect,exports.InputNestedMultiSelect=G.InputNestedMultiSelect,exports.InputNestedSelect=N.InputNestedSelect,exports.InputRangeSelect=W.InputRangeSelect,exports.InputRangeSlider=A.InputRangeSlider,exports.InputSelect=O.InputSelect,exports.InputSlider=H.InputSlider,exports.Textarea=E.Textarea,exports.LanguageSwitcher=U.LanguageSwitcher,exports.Layout=Q.Layout,exports.LinkList=K.LinkList,exports.Markup=z.Markup,exports.MaskedInput=J.MaskedInput,exports.Masonry=X.Masonry,exports.Masthead=Y.Masthead,exports.Menu=Z.Menu,exports.MenuTrigger=Z.MenuTrigger,exports.Modal=$.Modal,exports.ModalV2=ee.ModalV2,exports.Navbar=re.Navbar,exports.NBComponent=te.NBComponent,exports.NotificationBanner=te.NotificationBanner,exports.withNotificationBanner=oe.withNotificationBanner,exports.OtpInput=ie.OtpInput,exports.Overlay=se.Overlay,exports.Pagination=ne.Pagination,exports.PhoneNumberInput=pe.PhoneNumberInput,exports.Pill=ae.Pill,exports.withPopover=ue.withPopover,exports.Popover=le.Popover,exports.PopoverV2=xe.PopoverV2,exports.PopoverInline=de.PopoverInline,exports.PopoverTrigger=me.PopoverTrigger,exports.PredictiveTextInput=ge.PredictiveTextInput,exports.ProgressIndicator=ce.ProgressIndicator,exports.RadioButton=he.RadioButton,exports.SelectHistogram=Te.SelectHistogram,exports.Sidenav=je.Sidenav,exports.SingpassButton=qe.SingpassButton,exports.SmartAppBanner=be.SmartAppBanner,exports.Tab=Se.Tab,exports.Table=ve.Table,exports.Tag=ye.Tag,exports.TextList=Be.TextList,exports.A11yPlaygroundTheme=ke.A11yPlaygroundTheme,exports.BookingSGTheme=ke.BookingSGTheme,exports.Border=ke.Border,exports.Breakpoint=ke.Breakpoint,exports.CCubeTheme=ke.CCubeTheme,exports.CareerCompassTheme=ke.CareerCompassTheme,exports.Colour=ke.Colour,exports.Font=ke.Font,exports.IMDATheme=ke.IMDATheme,exports.LifeSGTheme=ke.LifeSGTheme,exports.MediaQuery=ke.MediaQuery,exports.Motion=ke.Motion,exports.MyLegacyTheme=ke.MyLegacyTheme,exports.OneServiceTheme=ke.OneServiceTheme,exports.PATheme=ke.PATheme,exports.RBSTheme=ke.RBSTheme,exports.Radius=ke.Radius,exports.SGWDigitalLobbyTheme=ke.SGWDigitalLobbyTheme,exports.SGWDigitalLobbyThemeBase=ke.SGWDigitalLobbyThemeBase,exports.SMGSTheme=ke.SMGSTheme,exports.SPFTheme=ke.SPFTheme,exports.Shadow=ke.Shadow,exports.Spacing=ke.Spacing,exports.SupportGoWhereTheme=ke.SupportGoWhereTheme,exports.SupportGoWhereThemeBase=ke.SupportGoWhereThemeBase,exports.ThemeComponent=ke.ThemeComponent,exports.TimeRangePicker=Ie.TimeRangePicker,exports.TimeSlotBar=_e.TimeSlotBar,exports.TimeSlotBarWeek=Ce.TimeSlotBarWeek,exports.TimeSlotWeekView=Me.TimeSlotWeekView,exports.Timeline=Ve.Timeline,exports.Timepicker=Pe.Timepicker,exports.TimeTable=we.TimeTable,exports.Toast=De.Toast,exports.Toggle=fe.Toggle,exports.Tooltip=Le.Tooltip,exports.withTooltip=Re.withTooltip,Object.defineProperty(exports,"Typography",{enumerable:!0,get:function(){return Fe.Typography}}),exports.UneditableSection=Ge.UneditableSection,exports.UnitNumberInput=Ne.UnitNumberInput,exports.V2_Color=We.V2_Color,exports.V2_DesignToken=Ae.V2_DesignToken,exports.V2_Layout=Oe.V2_Layout,exports.V2_MediaQuery=He.V2_MediaQuery,exports.V2_MediaWidths=He.V2_MediaWidths,exports.V2_TextStyleHelper=Ee.V2_TextStyleHelper,exports.V2_TextStyle=Ue.V2_TextStyle,Object.defineProperty(exports,"V2_Text",{enumerable:!0,get:function(){return Qe.V2_Text}}),Object.defineProperty(exports,"RedirectScope",{enumerable:!0,get:function(){return Ke.RedirectScope}}),exports.V2_TextList=ze.V2_TextList,exports.V2_BaseTheme=Je.V2_BaseTheme,exports.V2_BookingSGTheme=Je.V2_BookingSGTheme,exports.V2_CCubeTheme=Je.V2_CCubeTheme,exports.V2_MyLegacyTheme=Je.V2_MyLegacyTheme,exports.V2_OneServiceTheme=Je.V2_OneServiceTheme,exports.V2_RBSTheme=Je.V2_RBSTheme,exports.V2_Transition=Xe.V2_Transition,exports.DSThemeProvider=Ye.DSThemeProvider,Object.defineProperty(exports,"V2_ThemeContextKeys",{enumerable:!0,get:function(){return Ze.V2_ThemeContextKeys}}),exports.createThemeWithColourMode=$e.createThemeWithColourMode,exports.getSystemColourMode=$e.getSystemColourMode,exports.useDSTheme=$e.useDSTheme;
|
|
1
|
+
"use strict";var e=require("./accordion/accordion.js"),r=require("./alert/alert.js"),t=require("./animations/loading-spinner/loading-spinner.js"),o=require("./animations/loading-dots/loading-dots.js"),i=require("./animations/loading-dots-spinner/loading-dots-spinner.js"),s=require("./animations/themed-loading-spinner/themed-loading-spinner.js"),n=require("./avatar/avatar.js"),p=require("./badge/badge.js"),a=require("./box-container/box-container.js"),u=require("./breadcrumb/breadcrumb.js"),l=require("./button/button.js"),x=require("./button-with-icon/button-with-icon.js"),d=require("./calendar/calendar.js"),m=require("./card/card.js"),g=require("./checkbox/checkbox.js"),c=require("./countdown-timer/countdown-timer.js"),T=require("./data-table/data-table.js"),h=require("./date-input/date-input.js"),j=require("./date-navigator/date-navigator.js"),q=require("./date-range-input/date-range-input.js"),b=require("./divider/divider.js"),S=require("./drawer/drawer.js"),v=require("./e-signature/e-signature.js"),y=require("./error-display/error-display.js"),B=require("./error-display/helper.js"),k=require("./feedback-rating/feedback-rating.js"),I=require("./file-download/file-download.js"),_=require("./file-upload/file-upload.js"),C=require("./filter/filter.js"),M=require("./footer/footer.js"),V=require("./form/index.js"),P=require("./fullscreen-image-carousel/fullscreen-image-carousel.js"),w=require("./histogram-slider/histogram-slider.js"),D=require("./icon-button/icon-button.js"),f=require("./image-button/image-button.js"),L=require("./input/input.js"),R=require("./input-group/input-group.js"),F=require("./input-multi-select/input-multi-select.js"),G=require("./input-nested-multi-select/input-nested-multi-select.js"),N=require("./input-nested-select/input-nested-select.js"),W=require("./input-range-select/input-range-select.js"),A=require("./input-range-slider/input-range-slider.js"),O=require("./input-select/input-select.js"),H=require("./input-slider/input-slider.js"),E=require("./input-textarea/textarea.js"),U=require("./language-switcher/language-switcher.js"),Q=require("./layout/index.js"),K=require("./link-list/link-list.js"),z=require("./markup/markup.js"),J=require("./masked-input/masked-input.js"),X=require("./masonry/masonry.js"),Y=require("./masthead/masthead.js"),Z=require("./menu/menu.js"),$=require("./modal/index.js"),ee=require("./modal-v2/index.js"),re=require("./navbar/navbar.js"),te=require("./notification-banner/notification-banner.js"),oe=require("./notification-banner/notification-banner-hoc.js"),ie=require("./otp-input/otp-input.js"),se=require("./overlay/overlay.js"),ne=require("./pagination/pagination.js"),pe=require("./phone-number-input/phone-number-input.js"),ae=require("./pill/pill.js"),ue=require("./popover/popover-hoc.js"),le=require("./popover/popover.js"),xe=require("./popover-v2/popover.js"),de=require("./popover-v2/popover-inline/popover-inline.js"),me=require("./popover-v2/popover-trigger.js"),ge=require("./predictive-text-input/predictive-text-input.js"),ce=require("./progress-indicator/progress-indicator.js"),Te=require("./radio-button/radio-button.js"),he=require("./select-histogram/select-histogram.js"),je=require("./sidenav/sidenav.js"),qe=require("./singpass-button/singpass-button.js"),be=require("./smart-app-banner/smart-app-banner.js"),Se=require("./tab/tab.js"),ve=require("./table/table.js"),ye=require("./tag/tag.js"),Be=require("./text-list/index.js"),ke=require("./theme/index.js"),Ie=require("./time-range-picker/time-range-picker.js"),_e=require("./time-slot-bar/time-slot-bar.js"),Ce=require("./time-slot-bar-week/time-slot-bar-week.js"),Me=require("./time-slot-week-view/time-slot-week-view.js"),Ve=require("./timeline/timeline.js"),Pe=require("./timepicker/timepicker.js"),we=require("./timetable/timetable.js"),De=require("./toast/toast.js"),fe=require("./toggle/toggle.js"),Le=require("./tooltip/tooltip.js"),Re=require("./tooltip/tooltip-hoc.js"),Fe=require("./typography/typography.js"),Ge=require("./uneditable-section/index.js"),Ne=require("./unit-number/unit-number-input.js"),We=require("./v2_color/color.js"),Ae=require("./v2_design-token/design-token.js"),Oe=require("./v2_layout/index.js"),He=require("./v2_media/media.js"),Ee=require("./v2_text/helper.js"),Ue=require("./v2_text/text-style.js"),Qe=require("./v2_text/text.js"),Ke=require("./v2_text/types.js"),ze=require("./v2_text-list/index.js"),Je=require("./v2_theme/index.js"),Xe=require("./v2_transition/index.js"),Ye=require("./theme/ds-theme-provider.js"),Ze=require("./v2_theme/types.js"),$e=require("./theme/use-theme-mode.js");exports.Accordion=e.Accordion,exports.Alert=r.Alert,exports.LoadingSpinner=t.LoadingSpinner,exports.LoadingDots=o.LoadingDots,exports.LoadingDotsSpinner=i.LoadingDotsSpinner,exports.ThemedLoadingSpinner=s.ThemedLoadingSpinner,exports.Avatar=n.Avatar,exports.Badge=p.Badge,exports.BoxContainer=a.BoxContainer,exports.Breadcrumb=u.Breadcrumb,exports.Button=l.Button,exports.ButtonWithIcon=x.ButtonWithIcon,exports.Calendar=d.Calendar,exports.Card=m.Card,exports.Checkbox=g.Checkbox,exports.CountdownTimer=c.CountdownTimer,exports.DataTable=T.DataTable,exports.DateInput=h.DateInput,exports.DateNavigator=j.DateNavigator,exports.DateRangeInput=q.DateRangeInput,exports.Divider=b.Divider,exports.Drawer=S.Drawer,exports.ESignature=v.ESignature,exports.ErrorDisplay=y.ErrorDisplay,Object.defineProperty(exports,"ErrorDisplayHelper",{enumerable:!0,get:function(){return B.ErrorDisplayHelper}}),exports.FeedbackRating=k.FeedbackRating,exports.FileDownload=I.FileDownload,exports.FileUpload=_.FileUpload,exports.Filter=C.Filter,exports.Footer=M.Footer,exports.Form=V.Form,exports.Component=P.Component,exports.FullscreenImageCarousel=P.FullscreenImageCarousel,exports.HistogramSlider=w.HistogramSlider,exports.IconButton=D.IconButton,exports.ImageButton=f.ImageButton,exports.Input=L.Input,exports.InputGroup=R.InputGroup,exports.InputMultiSelect=F.InputMultiSelect,exports.InputNestedMultiSelect=G.InputNestedMultiSelect,exports.InputNestedSelect=N.InputNestedSelect,exports.InputRangeSelect=W.InputRangeSelect,exports.InputRangeSlider=A.InputRangeSlider,exports.InputSelect=O.InputSelect,exports.InputSlider=H.InputSlider,exports.Textarea=E.Textarea,exports.LanguageSwitcher=U.LanguageSwitcher,exports.Layout=Q.Layout,exports.LinkList=K.LinkList,exports.Markup=z.Markup,exports.MaskedInput=J.MaskedInput,exports.Masonry=X.Masonry,exports.Masthead=Y.Masthead,exports.Menu=Z.Menu,exports.MenuTrigger=Z.MenuTrigger,exports.Modal=$.Modal,exports.ModalV2=ee.ModalV2,exports.Navbar=re.Navbar,exports.NBComponent=te.NBComponent,exports.NotificationBanner=te.NotificationBanner,exports.withNotificationBanner=oe.withNotificationBanner,exports.OtpInput=ie.OtpInput,exports.Overlay=se.Overlay,exports.Pagination=ne.Pagination,exports.PhoneNumberInput=pe.PhoneNumberInput,exports.Pill=ae.Pill,exports.withPopover=ue.withPopover,exports.Popover=le.Popover,exports.PopoverV2=xe.PopoverV2,exports.PopoverInline=de.PopoverInline,exports.PopoverTrigger=me.PopoverTrigger,exports.PredictiveTextInput=ge.PredictiveTextInput,exports.ProgressIndicator=ce.ProgressIndicator,exports.RadioButton=Te.RadioButton,exports.SelectHistogram=he.SelectHistogram,exports.Sidenav=je.Sidenav,exports.SingpassButton=qe.SingpassButton,exports.SmartAppBanner=be.SmartAppBanner,exports.Tab=Se.Tab,exports.Table=ve.Table,exports.Tag=ye.Tag,exports.TextList=Be.TextList,exports.A11yPlaygroundTheme=ke.A11yPlaygroundTheme,exports.BookingSGTheme=ke.BookingSGTheme,exports.Border=ke.Border,exports.Breakpoint=ke.Breakpoint,exports.CCubeTheme=ke.CCubeTheme,exports.CareerCompassTheme=ke.CareerCompassTheme,exports.Colour=ke.Colour,exports.Font=ke.Font,exports.IMDATheme=ke.IMDATheme,exports.LifeSGTheme=ke.LifeSGTheme,exports.MediaQuery=ke.MediaQuery,exports.Motion=ke.Motion,exports.MyLegacyTheme=ke.MyLegacyTheme,exports.OneServiceTheme=ke.OneServiceTheme,exports.PATheme=ke.PATheme,exports.RBSTheme=ke.RBSTheme,exports.Radius=ke.Radius,exports.SGWDigitalLobbyTheme=ke.SGWDigitalLobbyTheme,exports.SGWDigitalLobbyThemeBase=ke.SGWDigitalLobbyThemeBase,exports.SMGSTheme=ke.SMGSTheme,exports.SPFTheme=ke.SPFTheme,exports.Shadow=ke.Shadow,exports.Spacing=ke.Spacing,exports.SupportGoWhereTheme=ke.SupportGoWhereTheme,exports.SupportGoWhereThemeBase=ke.SupportGoWhereThemeBase,exports.ThemeComponent=ke.ThemeComponent,exports.ToteBoardTheme=ke.ToteBoardTheme,exports.TimeRangePicker=Ie.TimeRangePicker,exports.TimeSlotBar=_e.TimeSlotBar,exports.TimeSlotBarWeek=Ce.TimeSlotBarWeek,exports.TimeSlotWeekView=Me.TimeSlotWeekView,exports.Timeline=Ve.Timeline,exports.Timepicker=Pe.Timepicker,exports.TimeTable=we.TimeTable,exports.Toast=De.Toast,exports.Toggle=fe.Toggle,exports.Tooltip=Le.Tooltip,exports.withTooltip=Re.withTooltip,Object.defineProperty(exports,"Typography",{enumerable:!0,get:function(){return Fe.Typography}}),exports.UneditableSection=Ge.UneditableSection,exports.UnitNumberInput=Ne.UnitNumberInput,exports.V2_Color=We.V2_Color,exports.V2_DesignToken=Ae.V2_DesignToken,exports.V2_Layout=Oe.V2_Layout,exports.V2_MediaQuery=He.V2_MediaQuery,exports.V2_MediaWidths=He.V2_MediaWidths,exports.V2_TextStyleHelper=Ee.V2_TextStyleHelper,exports.V2_TextStyle=Ue.V2_TextStyle,Object.defineProperty(exports,"V2_Text",{enumerable:!0,get:function(){return Qe.V2_Text}}),Object.defineProperty(exports,"RedirectScope",{enumerable:!0,get:function(){return Ke.RedirectScope}}),exports.V2_TextList=ze.V2_TextList,exports.V2_BaseTheme=Je.V2_BaseTheme,exports.V2_BookingSGTheme=Je.V2_BookingSGTheme,exports.V2_CCubeTheme=Je.V2_CCubeTheme,exports.V2_MyLegacyTheme=Je.V2_MyLegacyTheme,exports.V2_OneServiceTheme=Je.V2_OneServiceTheme,exports.V2_RBSTheme=Je.V2_RBSTheme,exports.V2_Transition=Xe.V2_Transition,exports.DSThemeProvider=Ye.DSThemeProvider,Object.defineProperty(exports,"V2_ThemeContextKeys",{enumerable:!0,get:function(){return Ze.V2_ThemeContextKeys}}),exports.createThemeWithColourMode=$e.createThemeWithColourMode,exports.getSystemColourMode=$e.getSystemColourMode,exports.useDSTheme=$e.useDSTheme;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/cjs/navbar/drawer.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("react/jsx-runtime"),r=require("react"),n=require("./brand.js"),
|
|
1
|
+
"use strict";var e=require("react/jsx-runtime"),r=require("@floating-ui/react"),n=require("react");require("../util/calendar-helper.js"),require("../util/date-helper.js"),require("../util/date-input-helper.js");var a=require("../util/merge-refs.js");require("../util/simple-id-generator.js"),require("../util/string-helper.js"),require("@react-aria/live-announcer");var t=require("./brand.js"),i=require("./drawer.styles.js"),s=require("./navbar.styles.js");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}const d=o(n).default.forwardRef(((o,d)=>{const{show:l,resources:u={},children:c,hideNavBranding:f,onClose:j,onBrandClick:p,drawerLabel:h="Mobile navigation menu",mobileMenuRef:w}=o,[v,g]=n.useState(0),m=n.useRef(null),{primary:x,secondary:b}=u,{context:y,refs:q}=r.useFloating({open:l,onOpenChange:e=>{!e&&j&&j()}}),C=()=>{if(window){const e=.01*window.innerHeight;g(e)}};n.useEffect((()=>(C(),window.addEventListener("resize",C),()=>{window.removeEventListener("resize",C)})),[]),n.useLayoutEffect((()=>{if(l){const e=setTimeout((()=>{m.current&&m.current.focus({preventScroll:!0})}),550);return()=>clearTimeout(e)}}),[l]);return e.jsx(r.FloatingFocusManager,{context:y,initialFocus:-1,returnFocus:!0,disabled:!l,children:e.jsx(i.Wrapper,{ref:a.mergeRefs(d,q.setFloating),"data-testid":"drawer",children:e.jsx(i.Container,{ref:m,$show:l,$viewHeight:v,onKeyDown:e=>{l&&"Escape"===e.key&&(e.preventDefault(),null==j||j(),setTimeout((()=>{var e;null===(e=null==w?void 0:w.current)||void 0===e||e.focus()}),300))},tabIndex:-1,"aria-label":h,children:e.jsxs(i.Content,{children:[e.jsxs(i.TopBar,{children:[e.jsx(s.NavBrandContainer,{"data-id":"drawer-brand-container",children:!f&&e.jsxs(e.Fragment,{children:[x&&e.jsx(t.Brand,{resources:x,compress:!0,onClick:p,"data-id":"drawer-brand-primary","data-testid":"drawer__brand",type:"primary"}),b&&e.jsxs(e.Fragment,{children:[e.jsx(s.NavSeparator,{}),e.jsx(t.Brand,{resources:b,compress:!0,onClick:p,"data-id":"drawer-brand-secondary","data-testid":"drawer__brand-secondary",type:"secondary"})]})]})}),e.jsx(i.CloseButton,{onClick:j,focusHighlight:!1,"aria-label":"Close nav menu",children:e.jsx(i.CloseIcon,{})})]}),c]})})})})}));exports.Drawer=d;
|
|
2
2
|
//# sourceMappingURL=drawer.js.map
|
package/cjs/navbar/drawer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drawer.js","sources":["../../../src/navbar/drawer.tsx"],"sourcesContent":["import React, { useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { Brand } from \"./brand\";\nimport {\n CloseButton,\n CloseIcon,\n Container,\n Content,\n TopBar,\n Wrapper,\n} from \"./drawer.styles\";\nimport { NavBrandContainer, NavSeparator } from \"./navbar.styles\";\nimport { NavbarDrawerProps } from \"./types\";\n\nconst Component = (\n props: NavbarDrawerProps,\n ref: React.Ref<HTMLDivElement>\n) => {\n // =============================================================================\n // CONST, STATE, REFS\n // =============================================================================\n const {\n show,\n resources = {},\n children,\n hideNavBranding,\n onClose,\n onBrandClick,\n drawerLabel = \"Mobile navigation menu\",\n mobileMenuRef,\n } = props;\n const [viewHeight, setViewHeight] = useState<number>(0);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const { primary, secondary } = resources;\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n const handleResize = () => {\n /**\n * Reference:\n * https://css-tricks.com/the-trick-to-viewport-units-on-mobile/\n */\n if (window) {\n const viewHeight = window.innerHeight * 0.01;\n setViewHeight(viewHeight);\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (!show) return;\n\n if (event.key === \"Escape\") {\n event.preventDefault();\n onClose?.();\n // Return focus to the hamburger menu button\n setTimeout(() => {\n mobileMenuRef?.current?.focus();\n }, 300);\n }\n };\n\n // =============================================================================\n // EFFECTS\n // =============================================================================\n useEffect(() => {\n handleResize();\n window.addEventListener(\"resize\", handleResize);\n\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }, []);\n\n // Focus management when drawer opens\n useLayoutEffect(() => {\n if (show) {\n const timer = setTimeout(() => {\n if (containerRef.current) {\n containerRef.current.focus({ preventScroll: true });\n }\n }, 550);\n\n return () => clearTimeout(timer);\n }\n }, [show]);\n\n // =============================================================================\n // RENDER FUNCTIONS\n // =============================================================================\n const renderBrand = () => {\n return (\n <>\n {primary && (\n <Brand\n resources={primary}\n compress\n onClick={onBrandClick}\n data-id=\"drawer-brand-primary\"\n data-testid=\"drawer__brand\"\n type=\"primary\"\n />\n )}\n {secondary && (\n <>\n <NavSeparator />\n <Brand\n resources={secondary}\n compress\n onClick={onBrandClick}\n data-id=\"drawer-brand-secondary\"\n data-testid=\"drawer__brand-secondary\"\n type=\"secondary\"\n />\n </>\n )}\n </>\n );\n };\n\n const renderTopBar = () => (\n <TopBar>\n <NavBrandContainer data-id=\"drawer-brand-container\">\n {!hideNavBranding && renderBrand()}\n </NavBrandContainer>\n <CloseButton\n onClick={onClose}\n focusHighlight={false}\n aria-label=\"Close nav menu\"\n >\n <CloseIcon />\n </CloseButton>\n </TopBar>\n );\n\n return (\n <Wrapper
|
|
1
|
+
{"version":3,"file":"drawer.js","sources":["../../../src/navbar/drawer.tsx"],"sourcesContent":["import { FloatingFocusManager, useFloating } from \"@floating-ui/react\";\nimport React, { useEffect, useLayoutEffect, useRef, useState } from \"react\";\n\nimport { mergeRefs } from \"../util\";\nimport { Brand } from \"./brand\";\nimport {\n CloseButton,\n CloseIcon,\n Container,\n Content,\n TopBar,\n Wrapper,\n} from \"./drawer.styles\";\nimport { NavBrandContainer, NavSeparator } from \"./navbar.styles\";\nimport { NavbarDrawerProps } from \"./types\";\n\nconst Component = (\n props: NavbarDrawerProps,\n ref: React.Ref<HTMLDivElement>\n) => {\n // =============================================================================\n // CONST, STATE, REFS\n // =============================================================================\n const {\n show,\n resources = {},\n children,\n hideNavBranding,\n onClose,\n onBrandClick,\n drawerLabel = \"Mobile navigation menu\",\n mobileMenuRef,\n } = props;\n const [viewHeight, setViewHeight] = useState<number>(0);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const { primary, secondary } = resources;\n\n // =========================================================================\n // FLOATING UI CONFIG\n // =========================================================================\n const { context, refs: floatingRefs } = useFloating({\n open: show,\n onOpenChange: (open) => {\n if (!open && onClose) {\n onClose();\n }\n },\n });\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n const handleResize = () => {\n /**\n * Reference:\n * https://css-tricks.com/the-trick-to-viewport-units-on-mobile/\n */\n if (window) {\n const viewHeight = window.innerHeight * 0.01;\n setViewHeight(viewHeight);\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (!show) return;\n\n if (event.key === \"Escape\") {\n event.preventDefault();\n onClose?.();\n // Return focus to the hamburger menu button\n setTimeout(() => {\n mobileMenuRef?.current?.focus();\n }, 300);\n }\n };\n\n // =============================================================================\n // EFFECTS\n // =============================================================================\n useEffect(() => {\n handleResize();\n window.addEventListener(\"resize\", handleResize);\n\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }, []);\n\n // Focus management when drawer opens\n useLayoutEffect(() => {\n if (show) {\n const timer = setTimeout(() => {\n if (containerRef.current) {\n containerRef.current.focus({ preventScroll: true });\n }\n }, 550);\n\n return () => clearTimeout(timer);\n }\n }, [show]);\n\n // =============================================================================\n // RENDER FUNCTIONS\n // =============================================================================\n const renderBrand = () => {\n return (\n <>\n {primary && (\n <Brand\n resources={primary}\n compress\n onClick={onBrandClick}\n data-id=\"drawer-brand-primary\"\n data-testid=\"drawer__brand\"\n type=\"primary\"\n />\n )}\n {secondary && (\n <>\n <NavSeparator />\n <Brand\n resources={secondary}\n compress\n onClick={onBrandClick}\n data-id=\"drawer-brand-secondary\"\n data-testid=\"drawer__brand-secondary\"\n type=\"secondary\"\n />\n </>\n )}\n </>\n );\n };\n\n const renderTopBar = () => (\n <TopBar>\n <NavBrandContainer data-id=\"drawer-brand-container\">\n {!hideNavBranding && renderBrand()}\n </NavBrandContainer>\n <CloseButton\n onClick={onClose}\n focusHighlight={false}\n aria-label=\"Close nav menu\"\n >\n <CloseIcon />\n </CloseButton>\n </TopBar>\n );\n\n return (\n <FloatingFocusManager\n context={context}\n initialFocus={-1}\n returnFocus={true}\n disabled={!show}\n >\n <Wrapper\n ref={mergeRefs(ref, floatingRefs.setFloating)}\n data-testid=\"drawer\"\n >\n <Container\n ref={containerRef}\n $show={show}\n $viewHeight={viewHeight}\n onKeyDown={handleKeyDown}\n tabIndex={-1}\n aria-label={drawerLabel}\n >\n <Content>\n {renderTopBar()}\n {children}\n </Content>\n </Container>\n </Wrapper>\n </FloatingFocusManager>\n );\n};\n\nexport const Drawer = React.forwardRef(Component);\n"],"names":["Drawer","React","forwardRef","props","ref","show","resources","children","hideNavBranding","onClose","onBrandClick","drawerLabel","mobileMenuRef","viewHeight","setViewHeight","useState","containerRef","useRef","primary","secondary","context","refs","floatingRefs","useFloating","open","onOpenChange","handleResize","window","innerHeight","useEffect","addEventListener","removeEventListener","useLayoutEffect","timer","setTimeout","current","focus","preventScroll","clearTimeout","_jsx","FloatingFocusManager","initialFocus","returnFocus","disabled","Wrapper","mergeRefs","setFloating","Container","$show","$viewHeight","onKeyDown","event","key","preventDefault","_a","tabIndex","_jsxs","Content","TopBar","NavBrandContainer","_Fragment","Brand","compress","onClick","type","NavSeparator","CloseButton","focusHighlight","CloseIcon"],"mappings":"khBAgBA,MAmKaA,OAASC,QAAMC,YAnKV,CACdC,EACAC,KAKA,MAAMC,KACFA,EAAIC,UACJA,EAAY,CAAA,EAAEC,SACdA,EAAQC,gBACRA,EAAeC,QACfA,EAAOC,aACPA,EAAYC,YACZA,EAAc,yBAAwBC,cACtCA,GACAT,GACGU,EAAYC,GAAiBC,EAAAA,SAAiB,GAC/CC,EAAeC,EAAAA,OAAuB,OAEtCC,QAAEA,EAAOC,UAAEA,GAAcb,GAKzBc,QAAEA,EAASC,KAAMC,GAAiBC,EAAAA,YAAY,CAChDC,KAAMnB,EACNoB,aAAeD,KACNA,GAAQf,GACTA,GACJ,IAOFiB,EAAe,KAKjB,GAAIC,OAAQ,CACR,MAAMd,EAAkC,IAArBc,OAAOC,YAC1Bd,EAAcD,EAClB,GAmBJgB,EAAAA,WAAU,KACNH,IACAC,OAAOG,iBAAiB,SAAUJ,GAE3B,KACHC,OAAOI,oBAAoB,SAAUL,EAAa,IAEvD,IAGHM,EAAAA,iBAAgB,KACZ,GAAI3B,EAAM,CACN,MAAM4B,EAAQC,YAAW,KACjBlB,EAAamB,SACbnB,EAAamB,QAAQC,MAAM,CAAEC,eAAe,GAChD,GACD,KAEH,MAAO,IAAMC,aAAaL,EAC9B,IACD,CAAC5B,IAkDJ,OACIkC,MAACC,EAAAA,qBAAoB,CACjBpB,QAASA,EACTqB,cAAc,EACdC,aAAa,EACbC,UAAWtC,EAAIE,SAEfgC,EAAAA,IAACK,EAAAA,QAAO,CACJxC,IAAKyC,EAAAA,UAAUzC,EAAKkB,EAAawB,aAAY,cACjC,SAAQvC,SAEpBgC,EAAAA,IAACQ,YAAS,CACN3C,IAAKY,EAAYgC,MACV3C,EAAI4C,YACEpC,EACbqC,UArGOC,IACd9C,GAEa,WAAd8C,EAAMC,MACND,EAAME,iBACN5C,SAAAA,IAEAyB,YAAW,WACe,QAAtBoB,EAAA1C,aAAa,EAAbA,EAAeuB,eAAO,IAAAmB,GAAAA,EAAElB,OAAO,GAChC,KACP,EA4FYmB,UAAU,EAAE,aACA5C,EAAWJ,SAEvBiD,EAAAA,KAACC,UAAO,CAAAlD,SAAA,CAjCpBiD,EAAAA,KAACE,EAAAA,OAAM,CAAAnD,SAAA,CACHgC,EAAAA,IAACoB,EAAAA,6BAA0B,yBAAwBpD,UAC7CC,GA/BNgD,OAAAI,EAAAA,SAAA,CAAArD,SAAA,CACKW,GACGqB,EAAAA,IAACsB,QAAK,CACFvD,UAAWY,EACX4C,UAAQ,EACRC,QAASrD,EAAY,UACb,uBAAsB,cAClB,gBACZsD,KAAK,YAGZ7C,GACGqC,EAAAA,KAAAI,EAAAA,SAAA,CAAArD,SAAA,CACIgC,EAAAA,IAAC0B,EAAAA,aAAY,IACb1B,MAACsB,EAAAA,MAAK,CACFvD,UAAWa,EACX2C,UAAQ,EACRC,QAASrD,EAAY,UACb,yBAAwB,cACpB,0BACZsD,KAAK,sBAarBzB,EAAAA,IAAC2B,EAAAA,YAAW,CACRH,QAAStD,EACT0D,gBAAgB,EAAK,aACV,0BAEX5B,EAAAA,IAAC6B,EAAAA,mBA0BQ7D,UAIM"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const e={primary:{brandName:"LifeSG",logoSrc:"https://assets.life.gov.sg/lifesg/logo-lifesg.svg"}},s={primary:{brandName:"BookingSG",logoSrc:"https://www.booking.gov.sg/logo.svg"}},
|
|
1
|
+
"use strict";const e={primary:{brandName:"LifeSG",logoSrc:"https://assets.life.gov.sg/lifesg/logo-lifesg.svg"}},s={primary:{brandName:"BookingSG",logoSrc:"https://www.booking.gov.sg/logo.svg"}},o={primary:{brandName:"CCube",logoSrc:"https://assets.life.gov.sg/ccube/logo-ccube.svg"}},g={primary:{brandName:"IMDA",logoSrc:"https://assets.life.gov.sg/react-design-system/img/logo/imda-logo.svg"}},r={primary:{brandName:"MyLegacy",logoSrc:"https://mylegacy.life.gov.sg/images/site-logo.png"}},t={primary:{brandName:"SPF",logoSrc:"https://assets.life.gov.sg/react-design-system/img/logo/spf-logo.png"}},a={primary:{brandName:"SupportGoWhere",logoSrc:"https://assets.life.gov.sg/react-design-system/img/logo/sgw-logo.png"}},i={primary:{brandName:"ToteBoard",logoSrc:"https://assets.life.gov.sg/react-design-system/img/logo/tote-board-logo.svg"}};exports.getDefaultResourceLogo=l=>{switch(l){case"bookingsg":return s;case"mylegacy":return r;case"ccube":return o;case"spf":return t;case"supportgowhere":return a;case"imda":return g;case"toteboard":return i;default:return e}};
|
|
2
2
|
//# sourceMappingURL=navbar-logo-data.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navbar-logo-data.js","sources":["../../../src/navbar/navbar-logo-data.ts"],"sourcesContent":["import { ResourceScheme } from \"../theme/types\";\nimport { NavbarResourcesProps } from \"./types\";\n\nconst DEFAULT_RESOURCES_LOGO: NavbarResourcesProps = {\n primary: {\n brandName: \"LifeSG\",\n logoSrc: \"https://assets.life.gov.sg/lifesg/logo-lifesg.svg\",\n },\n};\n\nconst BOOKINGSG_RESOURCES_LOGO: NavbarResourcesProps = {\n primary: {\n brandName: \"BookingSG\",\n logoSrc: \"https://www.booking.gov.sg/logo.svg\",\n },\n};\n\nconst CCUBE_RESOURCES_LOGO: NavbarResourcesProps = {\n primary: {\n brandName: \"CCube\",\n logoSrc: \"https://assets.life.gov.sg/ccube/logo-ccube.svg\",\n },\n};\n\nconst IMDA_RESOURCE_LOGO: NavbarResourcesProps = {\n primary: {\n brandName: \"IMDA\",\n logoSrc:\n \"https://assets.life.gov.sg/react-design-system/img/logo/imda-logo.svg\",\n },\n};\n\nconst MYLEGACY_RESOURCES_LOGO: NavbarResourcesProps = {\n primary: {\n brandName: \"MyLegacy\",\n logoSrc: \"https://mylegacy.life.gov.sg/images/site-logo.png\",\n },\n};\n\nconst SPF_RESOURCE_LOGO: NavbarResourcesProps = {\n primary: {\n brandName: \"SPF\",\n logoSrc:\n \"https://assets.life.gov.sg/react-design-system/img/logo/spf-logo.png\",\n },\n};\n\nconst SUPPORTGOWHERE_RESOURCE_LOGO: NavbarResourcesProps = {\n primary: {\n brandName: \"SupportGoWhere\",\n logoSrc:\n \"https://assets.life.gov.sg/react-design-system/img/logo/sgw-logo.png\",\n },\n};\n\nexport const getDefaultResourceLogo = (resourceScheme?: ResourceScheme) => {\n switch (resourceScheme) {\n case \"bookingsg\":\n return BOOKINGSG_RESOURCES_LOGO;\n case \"mylegacy\":\n return MYLEGACY_RESOURCES_LOGO;\n case \"ccube\":\n return CCUBE_RESOURCES_LOGO;\n case \"spf\":\n return SPF_RESOURCE_LOGO;\n case \"supportgowhere\":\n return SUPPORTGOWHERE_RESOURCE_LOGO;\n case \"imda\":\n return IMDA_RESOURCE_LOGO;\n default:\n return DEFAULT_RESOURCES_LOGO;\n }\n};\n"],"names":["DEFAULT_RESOURCES_LOGO","primary","brandName","logoSrc","BOOKINGSG_RESOURCES_LOGO","CCUBE_RESOURCES_LOGO","IMDA_RESOURCE_LOGO","MYLEGACY_RESOURCES_LOGO","SPF_RESOURCE_LOGO","SUPPORTGOWHERE_RESOURCE_LOGO","resourceScheme"],"mappings":"aAGA,MAAMA,EAA+C,CACjDC,QAAS,CACLC,UAAW,SACXC,QAAS,sDAIXC,EAAiD,CACnDH,QAAS,CACLC,UAAW,YACXC,QAAS,wCAIXE,EAA6C,CAC/CJ,QAAS,CACLC,UAAW,QACXC,QAAS,oDAIXG,EAA2C,CAC7CL,QAAS,CACLC,UAAW,OACXC,QACI,0EAINI,EAAgD,CAClDN,QAAS,CACLC,UAAW,WACXC,QAAS,sDAIXK,EAA0C,CAC5CP,QAAS,CACLC,UAAW,MACXC,QACI,yEAINM,EAAqD,CACvDR,QAAS,CACLC,UAAW,iBACXC,QACI,
|
|
1
|
+
{"version":3,"file":"navbar-logo-data.js","sources":["../../../src/navbar/navbar-logo-data.ts"],"sourcesContent":["import { ResourceScheme } from \"../theme/types\";\nimport { NavbarResourcesProps } from \"./types\";\n\nconst DEFAULT_RESOURCES_LOGO: NavbarResourcesProps = {\n primary: {\n brandName: \"LifeSG\",\n logoSrc: \"https://assets.life.gov.sg/lifesg/logo-lifesg.svg\",\n },\n};\n\nconst BOOKINGSG_RESOURCES_LOGO: NavbarResourcesProps = {\n primary: {\n brandName: \"BookingSG\",\n logoSrc: \"https://www.booking.gov.sg/logo.svg\",\n },\n};\n\nconst CCUBE_RESOURCES_LOGO: NavbarResourcesProps = {\n primary: {\n brandName: \"CCube\",\n logoSrc: \"https://assets.life.gov.sg/ccube/logo-ccube.svg\",\n },\n};\n\nconst IMDA_RESOURCE_LOGO: NavbarResourcesProps = {\n primary: {\n brandName: \"IMDA\",\n logoSrc:\n \"https://assets.life.gov.sg/react-design-system/img/logo/imda-logo.svg\",\n },\n};\n\nconst MYLEGACY_RESOURCES_LOGO: NavbarResourcesProps = {\n primary: {\n brandName: \"MyLegacy\",\n logoSrc: \"https://mylegacy.life.gov.sg/images/site-logo.png\",\n },\n};\n\nconst SPF_RESOURCE_LOGO: NavbarResourcesProps = {\n primary: {\n brandName: \"SPF\",\n logoSrc:\n \"https://assets.life.gov.sg/react-design-system/img/logo/spf-logo.png\",\n },\n};\n\nconst SUPPORTGOWHERE_RESOURCE_LOGO: NavbarResourcesProps = {\n primary: {\n brandName: \"SupportGoWhere\",\n logoSrc:\n \"https://assets.life.gov.sg/react-design-system/img/logo/sgw-logo.png\",\n },\n};\n\nconst TOTEBOARD_RESOURCE_LOGO: NavbarResourcesProps = {\n primary: {\n brandName: \"ToteBoard\",\n logoSrc:\n \"https://assets.life.gov.sg/react-design-system/img/logo/tote-board-logo.svg\",\n },\n};\n\nexport const getDefaultResourceLogo = (resourceScheme?: ResourceScheme) => {\n switch (resourceScheme) {\n case \"bookingsg\":\n return BOOKINGSG_RESOURCES_LOGO;\n case \"mylegacy\":\n return MYLEGACY_RESOURCES_LOGO;\n case \"ccube\":\n return CCUBE_RESOURCES_LOGO;\n case \"spf\":\n return SPF_RESOURCE_LOGO;\n case \"supportgowhere\":\n return SUPPORTGOWHERE_RESOURCE_LOGO;\n case \"imda\":\n return IMDA_RESOURCE_LOGO;\n case \"toteboard\":\n return TOTEBOARD_RESOURCE_LOGO;\n default:\n return DEFAULT_RESOURCES_LOGO;\n }\n};\n"],"names":["DEFAULT_RESOURCES_LOGO","primary","brandName","logoSrc","BOOKINGSG_RESOURCES_LOGO","CCUBE_RESOURCES_LOGO","IMDA_RESOURCE_LOGO","MYLEGACY_RESOURCES_LOGO","SPF_RESOURCE_LOGO","SUPPORTGOWHERE_RESOURCE_LOGO","TOTEBOARD_RESOURCE_LOGO","resourceScheme"],"mappings":"aAGA,MAAMA,EAA+C,CACjDC,QAAS,CACLC,UAAW,SACXC,QAAS,sDAIXC,EAAiD,CACnDH,QAAS,CACLC,UAAW,YACXC,QAAS,wCAIXE,EAA6C,CAC/CJ,QAAS,CACLC,UAAW,QACXC,QAAS,oDAIXG,EAA2C,CAC7CL,QAAS,CACLC,UAAW,OACXC,QACI,0EAINI,EAAgD,CAClDN,QAAS,CACLC,UAAW,WACXC,QAAS,sDAIXK,EAA0C,CAC5CP,QAAS,CACLC,UAAW,MACXC,QACI,yEAINM,EAAqD,CACvDR,QAAS,CACLC,UAAW,iBACXC,QACI,yEAINO,EAAgD,CAClDT,QAAS,CACLC,UAAW,YACXC,QACI,+GAI2BQ,IACnC,OAAQA,GACJ,IAAK,YACD,OAAOP,EACX,IAAK,WACD,OAAOG,EACX,IAAK,QACD,OAAOF,EACX,IAAK,MACD,OAAOG,EACX,IAAK,iBACD,OAAOC,EACX,IAAK,OACD,OAAOH,EACX,IAAK,YACD,OAAOI,EACX,QACI,OAAOV"}
|
package/cjs/navbar/navbar.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("../_virtual/_tslib.js"),a=require("react/jsx-runtime"),r=require("react"),n=require("styled-components"),t=require("../layout/index.js"),i=require("../masthead/masthead.js"),s=require("../overlay/overlay.js"),o=require("../theme/index.js"),d=require("./brand.js"),l=require("./drawer.js"),c=require("./navbar-action-buttons.js"),u=require("./navbar-helper.js"),m=require("./navbar-items.js"),v=require("./navbar-logo-data.js"),b=require("./navbar.styles.js");const h=r.forwardRef(((h,p)=>{var{items:k,className:j,id:x,selectedId:C,compress:y=!1,fixed:B=!0,resources:N,hideNavElements:w=!1,hideNavBranding:f=!1,hideLinkIndicator:g=!1,drawerDismissalExclusions:I=[],actionButtons:q,onItemClick:L,onActionButtonClick:_,onBrandClick:E,masthead:M=!0,layout:D="default",headerLabel:A="Main navigation menu",drawerLabel:O}=h,R=e.__rest(h,["items","className","id","selectedId","compress","fixed","resources","hideNavElements","hideNavBranding","hideLinkIndicator","drawerDismissalExclusions","actionButtons","onItemClick","onActionButtonClick","onBrandClick","masthead","layout","headerLabel","drawerLabel"]);const[$,H]=r.useState(!1),[S,z]=r.useState(!1),T=r.useRef(null),W="stretch"===D,F=r.useRef(null),G=r.useContext(n.ThemeContext),J=v.getDefaultResourceLogo(null==G?void 0:G.resourceScheme),K=o.Breakpoint["lg-max"]({theme:G}),P=(null==N?void 0:N.primary)||J.primary,Q=null==N?void 0:N.secondary;r.useImperativeHandle(p,(()=>Object.assign(F.current,{dismissDrawer:()=>{U()}})),[$]),r.useEffect((()=>(X(),window.addEventListener("resize",X),()=>{window.removeEventListener("resize",X)})),[]);const U=()=>{H(!1),setTimeout((()=>{z(!1)}),550)},V=e=>$&&-1===I.indexOf(e),X=()=>{window.innerWidth<=K&&$&&U()},Y=(e,a)=>{E&&E(a),V("brand-click")&&U()},Z=(e,a)=>{u.NavbarHelper.isNavItemCommon(a)&&a.onClick?a.onClick(e):L&&(e.preventDefault(),L(a)),u.NavbarHelper.isNavItemLink(a)&&!a.subMenu&&V("item-click")&&U()},ee=(e,a)=>{var r;"button"!==a.type&&"download"!==a.type||!(null===(r=a.args)||void 0===r?void 0:r.onClick)?_&&(e.preventDefault(),_(a)):a.args.onClick(e),V("item-click")&&U()},ae=()=>{H(!0),z(!0)},re=()=>{V("close-button-click")&&U()},ne=()=>{const e=k.mobile||k.desktop;return e&&e.length>0||q&&(e=>{const a=e.mobile||e.desktop;return!!a&&a.length&&a.some((e=>!e.uncollapsible))})(q)?a.jsx(b.MobileMenuButton,{ref:T,"aria-label":$?"Close nav menu":"Open nav menu","aria-expanded":$,"data-testid":"button__mobile-menu",onClick:ae,focusHighlight:!
|
|
1
|
+
"use strict";var e=require("../_virtual/_tslib.js"),a=require("react/jsx-runtime"),r=require("react"),n=require("styled-components"),t=require("../layout/index.js"),i=require("../masthead/masthead.js"),s=require("../overlay/overlay.js"),o=require("../theme/index.js"),d=require("./brand.js"),l=require("./drawer.js"),c=require("./navbar-action-buttons.js"),u=require("./navbar-helper.js"),m=require("./navbar-items.js"),v=require("./navbar-logo-data.js"),b=require("./navbar.styles.js");const h=r.forwardRef(((h,p)=>{var{items:k,className:j,id:x,selectedId:C,compress:y=!1,fixed:B=!0,resources:N,hideNavElements:w=!1,hideNavBranding:f=!1,hideLinkIndicator:g=!1,drawerDismissalExclusions:I=[],actionButtons:q,onItemClick:L,onActionButtonClick:_,onBrandClick:E,masthead:M=!0,layout:D="default",headerLabel:A="Main navigation menu",drawerLabel:O}=h,R=e.__rest(h,["items","className","id","selectedId","compress","fixed","resources","hideNavElements","hideNavBranding","hideLinkIndicator","drawerDismissalExclusions","actionButtons","onItemClick","onActionButtonClick","onBrandClick","masthead","layout","headerLabel","drawerLabel"]);const[$,H]=r.useState(!1),[S,z]=r.useState(!1),T=r.useRef(null),W="stretch"===D,F=r.useRef(null),G=r.useContext(n.ThemeContext),J=v.getDefaultResourceLogo(null==G?void 0:G.resourceScheme),K=o.Breakpoint["lg-max"]({theme:G}),P=(null==N?void 0:N.primary)||J.primary,Q=null==N?void 0:N.secondary;r.useImperativeHandle(p,(()=>Object.assign(F.current,{dismissDrawer:()=>{U()}})),[$]),r.useEffect((()=>(X(),window.addEventListener("resize",X),()=>{window.removeEventListener("resize",X)})),[]);const U=()=>{H(!1),setTimeout((()=>{z(!1)}),550)},V=e=>$&&-1===I.indexOf(e),X=()=>{window.innerWidth<=K&&$&&U()},Y=(e,a)=>{E&&E(a),V("brand-click")&&U()},Z=(e,a)=>{u.NavbarHelper.isNavItemCommon(a)&&a.onClick?a.onClick(e):L&&(e.preventDefault(),L(a)),u.NavbarHelper.isNavItemLink(a)&&!a.subMenu&&V("item-click")&&U()},ee=(e,a)=>{var r;"button"!==a.type&&"download"!==a.type||!(null===(r=a.args)||void 0===r?void 0:r.onClick)?_&&(e.preventDefault(),_(a)):a.args.onClick(e),V("item-click")&&U()},ae=()=>{H(!0),z(!0)},re=()=>{V("close-button-click")&&U()},ne=()=>{const e=k.mobile||k.desktop;return e&&e.length>0||q&&(e=>{const a=e.mobile||e.desktop;return!!a&&a.length&&a.some((e=>!e.uncollapsible))})(q)?a.jsx(b.MobileMenuButton,{ref:T,"aria-label":$?"Close nav menu":"Open nav menu","aria-expanded":$,"data-testid":"button__mobile-menu",onClick:ae,focusHighlight:!0,children:a.jsx(b.MobileMenuIcon,{})}):null};return a.jsxs(b.Wrapper,{ref:F,$fixed:B,className:j,id:x||"navbar-wrapper","data-testid":R["data-testid"]||"navbar-wrapper",children:[M&&a.jsx(i.Masthead,{stretch:W}),a.jsxs(t.Layout.Content,{stretch:W,children:[a.jsxs(b.Nav,{$compress:y,"aria-label":A,children:[!f&&a.jsxs(b.NavBrandContainer,{$compress:y,"data-id":"brand-container",children:[P&&a.jsx(d.Brand,{resources:P,onClick:Y,"data-id":"brand-primary","data-testid":"main__brand",type:"primary"}),Q&&a.jsxs(a.Fragment,{children:[a.jsx(b.NavSeparator,{$compress:y}),a.jsx(d.Brand,{resources:Q,onClick:Y,"data-id":"brand-secondary","data-testid":"main__brand-secondary",type:"secondary"})]})]}),!w&&a.jsxs(b.NavElementsContainer,{$hideNavBranding:f,children:[a.jsx(m.NavbarItems,{items:k.desktop,onItemClick:Z,selectedId:C,hideNavBranding:f,hideLinkIndicator:g}),a.jsx(c.NavbarActionButtons,{actionButtons:q,onActionButtonClick:ee}),ne()]})]}),!w&&a.jsx(s.Overlay,{show:S,enableOverlayClick:!0,onOverlayClick:re,children:a.jsxs(l.Drawer,{show:$,resources:{primary:P,secondary:Q},onClose:re,onBrandClick:Y,actionButtons:q,hideNavBranding:f,mobileMenuRef:T,drawerLabel:O,children:[a.jsx(m.NavbarItems,{items:k.mobile||k.desktop,onItemClick:Z,selectedId:C,mobile:!0,hideLinkIndicator:g}),a.jsx(c.NavbarActionButtons,{actionButtons:q,onActionButtonClick:ee,mobile:!0})]})})]})]})}));exports.Navbar=h;
|
|
2
2
|
//# sourceMappingURL=navbar.js.map
|
package/cjs/navbar/navbar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navbar.js","sources":["../../../src/navbar/navbar.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useContext,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport { ThemeContext } from \"styled-components\";\nimport { Layout } from \"../layout\";\nimport { Masthead } from \"../masthead/masthead\";\nimport { Overlay } from \"../overlay/overlay\";\nimport { Breakpoint } from \"../theme\";\nimport { Brand } from \"./brand\";\nimport { Drawer } from \"./drawer\";\nimport { NavbarActionButtons } from \"./navbar-action-buttons\";\nimport { NavbarHelper } from \"./navbar-helper\";\nimport { NavbarItems } from \"./navbar-items\";\nimport { getDefaultResourceLogo } from \"./navbar-logo-data\";\nimport {\n MobileMenuButton,\n MobileMenuIcon,\n Nav,\n NavBrandContainer,\n NavElementsContainer,\n NavSeparator,\n Wrapper,\n} from \"./navbar.styles\";\nimport {\n BrandType,\n DrawerDismissalMethod,\n NavItemCommonProps,\n NavItemProps,\n NavbarActionButtonsProps,\n NavbarButtonProps,\n NavbarDrawerApi,\n NavbarDrawerHandle,\n NavbarProps,\n} from \"./types\";\n\nconst Component = <T,>(\n {\n items,\n className,\n id,\n selectedId,\n compress = false,\n fixed = true,\n resources,\n hideNavElements = false,\n hideNavBranding = false,\n hideLinkIndicator = false,\n drawerDismissalExclusions: blockDrawerDismissalMethods = [],\n actionButtons,\n onItemClick,\n onActionButtonClick,\n onBrandClick,\n masthead = true,\n layout = \"default\",\n headerLabel = \"Main navigation menu\",\n drawerLabel,\n ...otherProps\n }: NavbarProps<T>,\n ref: React.Ref<NavbarDrawerHandle>\n) => {\n // =============================================================================\n // CONST, STATE, REFS\n // =============================================================================\n const [showDrawer, setShowDrawer] = useState<boolean>(false);\n const [showOverlay, setShowOverlay] = useState<boolean>(false);\n const mobileMenuRef = useRef<HTMLButtonElement>(null);\n const isStretch = layout === \"stretch\";\n const elementRef = useRef<HTMLDivElement>(null);\n const theme = useContext(ThemeContext);\n const defaultResource = getDefaultResourceLogo(theme?.resourceScheme);\n const tabletWidth = Breakpoint[\"lg-max\"]({ theme });\n\n const primary = resources?.primary || defaultResource.primary;\n const secondary = resources?.secondary;\n\n useImperativeHandle(\n ref,\n () =>\n Object.assign<HTMLDivElement, NavbarDrawerApi>(\n elementRef.current!,\n {\n dismissDrawer: () => {\n dismissDrawer();\n },\n }\n ),\n [showDrawer]\n );\n\n // =============================================================================\n // EFFECTS\n // =============================================================================\n useEffect(() => {\n handleResize();\n window.addEventListener(\"resize\", handleResize);\n\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }, []);\n\n // =============================================================================\n // HELPER FUNCTIONS\n // =============================================================================\n const dismissDrawer = () => {\n setShowDrawer(false);\n setTimeout(() => {\n setShowOverlay(false);\n }, 550); // For drawer animation to complete + buffer\n };\n\n const shouldDismissDrawer = (dismissalMethod: DrawerDismissalMethod) => {\n return (\n showDrawer &&\n blockDrawerDismissalMethods.indexOf(dismissalMethod) === -1\n );\n };\n\n const hasCollapsibleActionButtons = (\n actionButtons: NavbarActionButtonsProps\n ) => {\n const drawerActionButtons =\n actionButtons.mobile || actionButtons.desktop;\n if (drawerActionButtons) {\n return (\n drawerActionButtons.length &&\n drawerActionButtons.some(\n (actionButton) => !actionButton.uncollapsible\n )\n );\n }\n\n return false;\n };\n\n // =============================================================================\n // EVENT HANDLER\n // =============================================================================\n const handleResize = () => {\n if (window.innerWidth <= tabletWidth && showDrawer) {\n dismissDrawer();\n }\n };\n\n const handleBrandClick = (\n event: React.MouseEvent<HTMLAnchorElement>,\n type: BrandType\n ) => {\n if (onBrandClick) {\n onBrandClick(type);\n }\n\n if (shouldDismissDrawer(\"brand-click\")) {\n dismissDrawer();\n }\n };\n\n const handleNavItemClick = <K extends T>(\n event: React.MouseEvent<HTMLAnchorElement>,\n item: NavItemProps<K> | NavItemCommonProps<K>\n ) => {\n if (NavbarHelper.isNavItemCommon(item) && item.onClick) {\n item.onClick(event);\n } else if (onItemClick) {\n event.preventDefault();\n onItemClick(item);\n }\n\n if (\n NavbarHelper.isNavItemLink(item) &&\n !item.subMenu &&\n shouldDismissDrawer(\"item-click\")\n ) {\n dismissDrawer();\n }\n };\n\n const handleActionButtonClick = (\n event: React.MouseEvent<HTMLButtonElement> | React.MouseEvent<Element>,\n actionButton: NavbarButtonProps\n ) => {\n if (\n (actionButton.type === \"button\" ||\n actionButton.type === \"download\") &&\n actionButton.args?.onClick\n ) {\n actionButton.args.onClick(\n event as React.MouseEvent<HTMLButtonElement>\n );\n } else if (onActionButtonClick) {\n event.preventDefault();\n onActionButtonClick(actionButton);\n }\n\n if (shouldDismissDrawer(\"item-click\")) {\n dismissDrawer();\n }\n };\n\n const handleMobileMenuButtonClick = () => {\n setShowDrawer(true);\n setShowOverlay(true);\n };\n\n const handleDrawerClose = () => {\n if (shouldDismissDrawer(\"close-button-click\")) {\n dismissDrawer();\n }\n };\n\n // =============================================================================\n // RENDER FUNCTIONS\n // =============================================================================\n\n const renderDrawer = () => (\n <Overlay\n show={showOverlay}\n enableOverlayClick\n onOverlayClick={handleDrawerClose}\n >\n <Drawer\n show={showDrawer}\n resources={{ primary, secondary }}\n onClose={handleDrawerClose}\n onBrandClick={handleBrandClick}\n actionButtons={actionButtons}\n hideNavBranding={hideNavBranding}\n mobileMenuRef={mobileMenuRef}\n drawerLabel={drawerLabel}\n >\n <NavbarItems\n items={items.mobile || items.desktop}\n onItemClick={handleNavItemClick}\n selectedId={selectedId}\n mobile\n hideLinkIndicator={hideLinkIndicator}\n />\n <NavbarActionButtons\n actionButtons={actionButtons}\n onActionButtonClick={handleActionButtonClick}\n mobile\n />\n </Drawer>\n </Overlay>\n );\n\n const renderBrand = () => (\n <NavBrandContainer $compress={compress} data-id=\"brand-container\">\n {primary && (\n <Brand\n resources={primary}\n onClick={handleBrandClick}\n data-id=\"brand-primary\"\n data-testid=\"main__brand\"\n type=\"primary\"\n />\n )}\n {secondary && (\n <>\n <NavSeparator $compress={compress} />\n <Brand\n resources={secondary}\n onClick={handleBrandClick}\n data-id=\"brand-secondary\"\n data-testid=\"main__brand-secondary\"\n type=\"secondary\"\n />\n </>\n )}\n </NavBrandContainer>\n );\n\n const renderMobileMenuButton = () => {\n const drawerItems = items.mobile || items.desktop;\n if (\n (drawerItems && drawerItems.length > 0) ||\n (actionButtons && hasCollapsibleActionButtons(actionButtons))\n ) {\n return (\n <MobileMenuButton\n ref={mobileMenuRef}\n aria-label={showDrawer ? \"Close nav menu\" : \"Open nav menu\"}\n aria-expanded={showDrawer}\n data-testid=\"button__mobile-menu\"\n onClick={handleMobileMenuButtonClick}\n focusHighlight={false}\n >\n <MobileMenuIcon />\n </MobileMenuButton>\n );\n }\n\n return null;\n };\n\n const renderNavbar = () => {\n return (\n <Layout.Content stretch={isStretch}>\n <Nav $compress={compress} aria-label={headerLabel}>\n {!hideNavBranding && renderBrand()}\n {!hideNavElements && (\n <NavElementsContainer\n $hideNavBranding={hideNavBranding}\n >\n <NavbarItems\n items={items.desktop}\n onItemClick={handleNavItemClick}\n selectedId={selectedId}\n hideNavBranding={hideNavBranding}\n hideLinkIndicator={hideLinkIndicator}\n />\n <NavbarActionButtons\n actionButtons={actionButtons}\n onActionButtonClick={handleActionButtonClick}\n />\n {renderMobileMenuButton()}\n </NavElementsContainer>\n )}\n </Nav>\n\n {!hideNavElements && renderDrawer()}\n </Layout.Content>\n );\n };\n\n return (\n <Wrapper\n ref={elementRef}\n $fixed={fixed}\n className={className}\n id={id || \"navbar-wrapper\"}\n data-testid={otherProps[\"data-testid\"] || \"navbar-wrapper\"}\n >\n {masthead && <Masthead stretch={isStretch} />}\n {renderNavbar()}\n </Wrapper>\n );\n};\n\nexport const Navbar = forwardRef(Component);\n"],"names":["Navbar","forwardRef","_a","ref","items","className","id","selectedId","compress","fixed","resources","hideNavElements","hideNavBranding","hideLinkIndicator","drawerDismissalExclusions","blockDrawerDismissalMethods","actionButtons","onItemClick","onActionButtonClick","onBrandClick","masthead","layout","headerLabel","drawerLabel","otherProps","__rest","showDrawer","setShowDrawer","useState","showOverlay","setShowOverlay","mobileMenuRef","useRef","isStretch","elementRef","theme","useContext","ThemeContext","defaultResource","getDefaultResourceLogo","resourceScheme","tabletWidth","Breakpoint","primary","secondary","useImperativeHandle","Object","assign","current","dismissDrawer","useEffect","handleResize","window","addEventListener","removeEventListener","setTimeout","shouldDismissDrawer","dismissalMethod","indexOf","innerWidth","handleBrandClick","event","type","handleNavItemClick","item","NavbarHelper","isNavItemCommon","onClick","preventDefault","isNavItemLink","subMenu","handleActionButtonClick","actionButton","args","handleMobileMenuButtonClick","handleDrawerClose","renderMobileMenuButton","drawerItems","mobile","desktop","length","drawerActionButtons","some","uncollapsible","hasCollapsibleActionButtons","_jsx","MobileMenuButton","focusHighlight","MobileMenuIcon","_jsxs","Wrapper","$fixed","children","Masthead","stretch","Layout","Content","Nav","$compress","NavBrandContainer","Brand","_Fragment","NavSeparator","NavElementsContainer","$hideNavBranding","NavbarItems","NavbarActionButtons","Overlay","show","enableOverlayClick","onOverlayClick","Drawer","onClose"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"navbar.js","sources":["../../../src/navbar/navbar.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useContext,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport { ThemeContext } from \"styled-components\";\nimport { Layout } from \"../layout\";\nimport { Masthead } from \"../masthead/masthead\";\nimport { Overlay } from \"../overlay/overlay\";\nimport { Breakpoint } from \"../theme\";\nimport { Brand } from \"./brand\";\nimport { Drawer } from \"./drawer\";\nimport { NavbarActionButtons } from \"./navbar-action-buttons\";\nimport { NavbarHelper } from \"./navbar-helper\";\nimport { NavbarItems } from \"./navbar-items\";\nimport { getDefaultResourceLogo } from \"./navbar-logo-data\";\nimport {\n MobileMenuButton,\n MobileMenuIcon,\n Nav,\n NavBrandContainer,\n NavElementsContainer,\n NavSeparator,\n Wrapper,\n} from \"./navbar.styles\";\nimport {\n BrandType,\n DrawerDismissalMethod,\n NavItemCommonProps,\n NavItemProps,\n NavbarActionButtonsProps,\n NavbarButtonProps,\n NavbarDrawerApi,\n NavbarDrawerHandle,\n NavbarProps,\n} from \"./types\";\n\nconst Component = <T,>(\n {\n items,\n className,\n id,\n selectedId,\n compress = false,\n fixed = true,\n resources,\n hideNavElements = false,\n hideNavBranding = false,\n hideLinkIndicator = false,\n drawerDismissalExclusions: blockDrawerDismissalMethods = [],\n actionButtons,\n onItemClick,\n onActionButtonClick,\n onBrandClick,\n masthead = true,\n layout = \"default\",\n headerLabel = \"Main navigation menu\",\n drawerLabel,\n ...otherProps\n }: NavbarProps<T>,\n ref: React.Ref<NavbarDrawerHandle>\n) => {\n // =============================================================================\n // CONST, STATE, REFS\n // =============================================================================\n const [showDrawer, setShowDrawer] = useState<boolean>(false);\n const [showOverlay, setShowOverlay] = useState<boolean>(false);\n const mobileMenuRef = useRef<HTMLButtonElement>(null);\n const isStretch = layout === \"stretch\";\n const elementRef = useRef<HTMLDivElement>(null);\n const theme = useContext(ThemeContext);\n const defaultResource = getDefaultResourceLogo(theme?.resourceScheme);\n const tabletWidth = Breakpoint[\"lg-max\"]({ theme });\n\n const primary = resources?.primary || defaultResource.primary;\n const secondary = resources?.secondary;\n\n useImperativeHandle(\n ref,\n () =>\n Object.assign<HTMLDivElement, NavbarDrawerApi>(\n elementRef.current!,\n {\n dismissDrawer: () => {\n dismissDrawer();\n },\n }\n ),\n [showDrawer]\n );\n\n // =============================================================================\n // EFFECTS\n // =============================================================================\n useEffect(() => {\n handleResize();\n window.addEventListener(\"resize\", handleResize);\n\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }, []);\n\n // =============================================================================\n // HELPER FUNCTIONS\n // =============================================================================\n const dismissDrawer = () => {\n setShowDrawer(false);\n setTimeout(() => {\n setShowOverlay(false);\n }, 550); // For drawer animation to complete + buffer\n };\n\n const shouldDismissDrawer = (dismissalMethod: DrawerDismissalMethod) => {\n return (\n showDrawer &&\n blockDrawerDismissalMethods.indexOf(dismissalMethod) === -1\n );\n };\n\n const hasCollapsibleActionButtons = (\n actionButtons: NavbarActionButtonsProps\n ) => {\n const drawerActionButtons =\n actionButtons.mobile || actionButtons.desktop;\n if (drawerActionButtons) {\n return (\n drawerActionButtons.length &&\n drawerActionButtons.some(\n (actionButton) => !actionButton.uncollapsible\n )\n );\n }\n\n return false;\n };\n\n // =============================================================================\n // EVENT HANDLER\n // =============================================================================\n const handleResize = () => {\n if (window.innerWidth <= tabletWidth && showDrawer) {\n dismissDrawer();\n }\n };\n\n const handleBrandClick = (\n event: React.MouseEvent<HTMLAnchorElement>,\n type: BrandType\n ) => {\n if (onBrandClick) {\n onBrandClick(type);\n }\n\n if (shouldDismissDrawer(\"brand-click\")) {\n dismissDrawer();\n }\n };\n\n const handleNavItemClick = <K extends T>(\n event: React.MouseEvent<HTMLAnchorElement>,\n item: NavItemProps<K> | NavItemCommonProps<K>\n ) => {\n if (NavbarHelper.isNavItemCommon(item) && item.onClick) {\n item.onClick(event);\n } else if (onItemClick) {\n event.preventDefault();\n onItemClick(item);\n }\n\n if (\n NavbarHelper.isNavItemLink(item) &&\n !item.subMenu &&\n shouldDismissDrawer(\"item-click\")\n ) {\n dismissDrawer();\n }\n };\n\n const handleActionButtonClick = (\n event: React.MouseEvent<HTMLButtonElement> | React.MouseEvent<Element>,\n actionButton: NavbarButtonProps\n ) => {\n if (\n (actionButton.type === \"button\" ||\n actionButton.type === \"download\") &&\n actionButton.args?.onClick\n ) {\n actionButton.args.onClick(\n event as React.MouseEvent<HTMLButtonElement>\n );\n } else if (onActionButtonClick) {\n event.preventDefault();\n onActionButtonClick(actionButton);\n }\n\n if (shouldDismissDrawer(\"item-click\")) {\n dismissDrawer();\n }\n };\n\n const handleMobileMenuButtonClick = () => {\n setShowDrawer(true);\n setShowOverlay(true);\n };\n\n const handleDrawerClose = () => {\n if (shouldDismissDrawer(\"close-button-click\")) {\n dismissDrawer();\n }\n };\n\n // =============================================================================\n // RENDER FUNCTIONS\n // =============================================================================\n\n const renderDrawer = () => (\n <Overlay\n show={showOverlay}\n enableOverlayClick\n onOverlayClick={handleDrawerClose}\n >\n <Drawer\n show={showDrawer}\n resources={{ primary, secondary }}\n onClose={handleDrawerClose}\n onBrandClick={handleBrandClick}\n actionButtons={actionButtons}\n hideNavBranding={hideNavBranding}\n mobileMenuRef={mobileMenuRef}\n drawerLabel={drawerLabel}\n >\n <NavbarItems\n items={items.mobile || items.desktop}\n onItemClick={handleNavItemClick}\n selectedId={selectedId}\n mobile\n hideLinkIndicator={hideLinkIndicator}\n />\n <NavbarActionButtons\n actionButtons={actionButtons}\n onActionButtonClick={handleActionButtonClick}\n mobile\n />\n </Drawer>\n </Overlay>\n );\n\n const renderBrand = () => (\n <NavBrandContainer $compress={compress} data-id=\"brand-container\">\n {primary && (\n <Brand\n resources={primary}\n onClick={handleBrandClick}\n data-id=\"brand-primary\"\n data-testid=\"main__brand\"\n type=\"primary\"\n />\n )}\n {secondary && (\n <>\n <NavSeparator $compress={compress} />\n <Brand\n resources={secondary}\n onClick={handleBrandClick}\n data-id=\"brand-secondary\"\n data-testid=\"main__brand-secondary\"\n type=\"secondary\"\n />\n </>\n )}\n </NavBrandContainer>\n );\n\n const renderMobileMenuButton = () => {\n const drawerItems = items.mobile || items.desktop;\n if (\n (drawerItems && drawerItems.length > 0) ||\n (actionButtons && hasCollapsibleActionButtons(actionButtons))\n ) {\n return (\n <MobileMenuButton\n ref={mobileMenuRef}\n aria-label={showDrawer ? \"Close nav menu\" : \"Open nav menu\"}\n aria-expanded={showDrawer}\n data-testid=\"button__mobile-menu\"\n onClick={handleMobileMenuButtonClick}\n focusHighlight={true}\n >\n <MobileMenuIcon />\n </MobileMenuButton>\n );\n }\n\n return null;\n };\n\n const renderNavbar = () => {\n return (\n <Layout.Content stretch={isStretch}>\n <Nav $compress={compress} aria-label={headerLabel}>\n {!hideNavBranding && renderBrand()}\n {!hideNavElements && (\n <NavElementsContainer\n $hideNavBranding={hideNavBranding}\n >\n <NavbarItems\n items={items.desktop}\n onItemClick={handleNavItemClick}\n selectedId={selectedId}\n hideNavBranding={hideNavBranding}\n hideLinkIndicator={hideLinkIndicator}\n />\n <NavbarActionButtons\n actionButtons={actionButtons}\n onActionButtonClick={handleActionButtonClick}\n />\n {renderMobileMenuButton()}\n </NavElementsContainer>\n )}\n </Nav>\n\n {!hideNavElements && renderDrawer()}\n </Layout.Content>\n );\n };\n\n return (\n <Wrapper\n ref={elementRef}\n $fixed={fixed}\n className={className}\n id={id || \"navbar-wrapper\"}\n data-testid={otherProps[\"data-testid\"] || \"navbar-wrapper\"}\n >\n {masthead && <Masthead stretch={isStretch} />}\n {renderNavbar()}\n </Wrapper>\n );\n};\n\nexport const Navbar = forwardRef(Component);\n"],"names":["Navbar","forwardRef","_a","ref","items","className","id","selectedId","compress","fixed","resources","hideNavElements","hideNavBranding","hideLinkIndicator","drawerDismissalExclusions","blockDrawerDismissalMethods","actionButtons","onItemClick","onActionButtonClick","onBrandClick","masthead","layout","headerLabel","drawerLabel","otherProps","__rest","showDrawer","setShowDrawer","useState","showOverlay","setShowOverlay","mobileMenuRef","useRef","isStretch","elementRef","theme","useContext","ThemeContext","defaultResource","getDefaultResourceLogo","resourceScheme","tabletWidth","Breakpoint","primary","secondary","useImperativeHandle","Object","assign","current","dismissDrawer","useEffect","handleResize","window","addEventListener","removeEventListener","setTimeout","shouldDismissDrawer","dismissalMethod","indexOf","innerWidth","handleBrandClick","event","type","handleNavItemClick","item","NavbarHelper","isNavItemCommon","onClick","preventDefault","isNavItemLink","subMenu","handleActionButtonClick","actionButton","args","handleMobileMenuButtonClick","handleDrawerClose","renderMobileMenuButton","drawerItems","mobile","desktop","length","drawerActionButtons","some","uncollapsible","hasCollapsibleActionButtons","_jsx","MobileMenuButton","focusHighlight","MobileMenuIcon","_jsxs","Wrapper","$fixed","children","Masthead","stretch","Layout","Content","Nav","$compress","NavBrandContainer","Brand","_Fragment","NavSeparator","NavElementsContainer","$hideNavBranding","NavbarItems","NavbarActionButtons","Overlay","show","enableOverlayClick","onOverlayClick","Drawer","onClose"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("../_virtual/_tslib.js"),r=require("react/jsx-runtime"),t=require("../external/lodash/debounce.js"),s=require("react"),
|
|
1
|
+
"use strict";var e=require("../_virtual/_tslib.js"),r=require("react/jsx-runtime"),t=require("../external/lodash/debounce.js"),s=require("react"),i=require("../shared/accessibility/index.js"),a=require("../input/input.js");require("styled-components"),require("../theme/index.js"),require("../util/string-helper.js"),require("../shared/dropdown-list/dropdown-label.styles.js");var o=require("../shared/dropdown-list/dropdown-list.js"),l=require("../shared/dropdown-list/dropdown-list-state.js");require("../shared/dropdown-list/expandable-element.js"),require("@lifesg/react-icons/caret-right"),require("react-virtuoso"),require("../button/button.style.js"),require("../util/calendar-helper.js"),require("../util/date-helper.js"),require("../util/date-input-helper.js");var n=require("../util/simple-id-generator.js");require("@react-aria/live-announcer");var d=require("../shared/dropdown-wrapper/element-with-dropdown.js");require("../shared/dropdown-list/dropdown-list.styles.js"),require("../shared/dropdown-list/dropdown-search.js"),require("immer"),require("../external/lodash/_getTag.js"),require("../external/lodash/isArguments.js"),require("../external/lodash/_baseGetTag.js"),require("../external/lodash/isBuffer.js"),require("../external/lodash/isTypedArray.js"),require("../external/lodash/_Stack.js"),require("../external/lodash/_SetCache.js"),require("../external/lodash/_equalByTag.js"),require("../shared/dropdown-list/nested-dropdown-list.styles.js"),require("../shared/dropdown-list/virtuoso-components.js");var u=require("../shared/input-wrapper/input-wrapper.js");exports.PredictiveTextInput=c=>{var{className:p,"data-testid":h,selectedOption:x,minimumCharacters:j=3,fetchOptions:m,placeholder:f="Enter here...",readOnly:q=!1,disabled:g=!1,error:w,valueExtractor:v,listExtractor:b,displayValueExtractor:y,onSelectOption:S,alignment:E,dropdownZIndex:T,dropdownRootNode:I,dropdownWidth:O,"aria-describedby":_}=c,C=e.__rest(c,["className","data-testid","selectedOption","minimumCharacters","fetchOptions","placeholder","readOnly","disabled","error","valueExtractor","listExtractor","displayValueExtractor","onSelectOption","alignment","dropdownZIndex","dropdownRootNode","dropdownWidth","aria-describedby"]);const D=e=>e?y?y(e):e.toString():"",[N,$]=s.useState((()=>x?D(x):"")),[R,L]=s.useState((()=>x?D(x):"")),[W,k]=s.useState([]),[B,H]=s.useState(!0),[V,A]=s.useState(!1),[Z,F]=s.useState(!!x),[P,G]=s.useState(x),[M,z]=s.useState(!1),[J,K]=s.useState(!1),Q=n.useId(),[U,X]=s.useState(null),Y=`${Q}-instruction`,ee=s.useRef(null),re=s.useRef(null),te=s.useRef(m),se=s.useCallback((r=>e.__awaiter(void 0,void 0,void 0,(function*(){if(te.current){A(!1),H(!0);try{const e=yield te.current(r);L(r),k(null!=e?e:[]),H(!1)}catch(e){A(!0),H(!1)}}}))),[]),ie=s.useCallback(t.default((e=>{se(e)}),500),[se]);s.useEffect((()=>{te.current=m}),[m]),s.useEffect((()=>{N&&N.length>=j?Z?N!==R&&ie(N):(z(!0),ie(N)):ie.cancel(),""===N&&P&&(null==S||S(void 0,void 0),pe(),G(void 0)),x&&N!==D(x)&&F(!1)}),[N,x]),s.useEffect((()=>{$(x?D(x):""),L(x?D(x):""),G(x),F(!!x)}),[x]),s.useEffect((()=>{var e;const r=he(),t=null!==(e=null==W?void 0:W.length)&&void 0!==e?e:0;"loading"===r&&N.length>=j?X("Loading suggested results"):"fail"!==r?!M||B||V||X(0===t?N?"No results found.":null:`${t} result${t>1?"s":""} found. Press down arrow to scroll through the list.`):X("Suggestions failed to load. Try again.")}),[W,N,V,B]),s.useEffect((()=>()=>{ie.cancel()}),[ie]);const ae=(e,r)=>{var t;null===(t=re.current)||void 0===t||t.focus(),$(D(e)),L(e?D(e):""),F(!0),G(e),z(!1),null==S||S(e,r)},oe=()=>{K(!0)},le=e=>{M||!ee.current||ee.current.contains(e.relatedTarget)||(K(!1),ue())},ne=()=>{z(!1),K(!1)},de=()=>{$(""),F(!1),z(!1),null==S||S(void 0,void 0)},ue=()=>{if(!Z)if(P){const e=D(P);$(e),z(!1)}else de()},ce=e=>{$(e.target.value),F(!1)},pe=e=>{L(""),F(!1),H(!0)},he=()=>V?"fail":B?"loading":"success";return r.jsx(l.DropdownListState,{children:r.jsx(d.ElementWithDropdown,{enabled:!q&&!g,isOpen:M,renderElement:()=>r.jsxs(u.InputWrapper,{className:p,"data-testid":h,ref:ee,tabIndex:-1,onFocus:oe,onBlur:le,$focused:J,$disabled:g,$readOnly:q,$error:w,children:[r.jsxs(i.VisuallyHidden,{id:Y,"aria-hidden":!0,children:["Type in ",j," or more characters for suggested results."]}),U&&r.jsx(i.VisuallyHidden,{"aria-live":"polite",children:U}),r.jsx(a.Input,Object.assign({role:"combobox",ref:re,id:Q,type:"text",value:N,onChange:ce,placeholder:f,readOnly:q,disabled:g,allowClear:!0,onClear:de,"aria-expanded":M,"aria-controls":Q,"aria-autocomplete":"list","aria-haspopup":"listbox",onBlur:N.length<j?ue:void 0,styleType:"no-border","aria-describedby":i.concatIds(_,Y)},C))]}),renderDropdown:()=>r.jsx(o.DropdownList,{listboxId:Q,listItems:W,onSelectItem:ae,onDismiss:ne,valueExtractor:v,listExtractor:b,itemsLoadState:he(),itemTruncationType:"end",itemMaxLines:1,labelDisplayType:"next-line",disableItemFocus:!0,onRetry:()=>se(N),width:O,matchElementWidth:!0}),onOpen:()=>{!Z&&N.length>=j&&K(!0)},onClose:()=>{z(!1),K(!1),ue()},onDismiss:()=>{var e;z(!1),K(!1),ue(),null===(e=re.current)||void 0===e||e.focus()},onHide:()=>{k([]),H(!0),A(!1)},clickToToggle:!1,offset:8,alignment:E,fitAvailableHeight:!0,customZIndex:T,rootNode:I})})};
|
|
2
2
|
//# sourceMappingURL=predictive-text-input.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"predictive-text-input.js","sources":["../../../src/predictive-text-input/predictive-text-input.tsx"],"sourcesContent":["import debounce from \"lodash/debounce\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { VisuallyHidden, concatIds } from \"src/shared/accessibility\";\nimport { Input } from \"../input\";\nimport { DropdownList, DropdownListState } from \"../shared/dropdown-list\";\nimport { ItemsLoadStateType } from \"../shared/dropdown-list/types\";\nimport { ElementWithDropdown } from \"../shared/dropdown-wrapper\";\nimport { InputWrapper } from \"../shared/input-wrapper/input-wrapper\";\nimport { useId } from \"../util\";\nimport { PredictiveTextInputProps } from \"./types\";\n\nexport const PredictiveTextInput = <T, V>({\n className,\n \"data-testid\": testId,\n selectedOption,\n minimumCharacters = 3,\n fetchOptions,\n placeholder = \"Enter here...\",\n readOnly = false,\n disabled = false,\n error,\n valueExtractor,\n listExtractor,\n displayValueExtractor,\n onSelectOption,\n alignment,\n dropdownZIndex,\n dropdownRootNode,\n dropdownWidth,\n \"aria-describedby\": ariaDescribedBy,\n ...otherProps\n}: PredictiveTextInputProps<T, V>): JSX.Element => {\n const getDisplayValue = (item: T | undefined): string => {\n if (!item) return \"\";\n return displayValueExtractor\n ? displayValueExtractor(item)\n : item.toString();\n };\n\n // =============================================================================\n // CONST, STATE\n // =============================================================================\n const [input, setInput] = useState<string>(() =>\n selectedOption ? getDisplayValue(selectedOption) : \"\"\n );\n const [searchedInput, setSearchedInput] = useState<string>(() =>\n selectedOption ? getDisplayValue(selectedOption) : \"\"\n );\n const [options, setOptions] = useState<T[]>([]);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [isError, setIsError] = useState<boolean>(false);\n const [isOptionSelected, setIsOptionSelected] = useState<boolean>(\n !!selectedOption\n );\n const [prevOptionSelected, setPrevOptionSelected] = useState<T | undefined>(\n selectedOption\n );\n const [isOpen, setIsOpen] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n\n const internalId = useId();\n const [resultAnnouncement, setResultAnnouncement] = useState<string | null>(\n null\n );\n const instructionId = `${internalId}-instruction`;\n\n const nodeRef = useRef<HTMLDivElement | null>(null);\n const selectorRef = useRef<HTMLInputElement | null>(null);\n\n const fetchOptionsRef = useRef(fetchOptions);\n\n // =============================================================================\n // DEBOUNCE FUNCTIONS\n // =============================================================================\n const handleFetchOptions = useCallback(async (input: string) => {\n if (!fetchOptionsRef.current) return;\n setIsError(false);\n setIsLoading(true);\n try {\n const fetchedOptions = await fetchOptionsRef.current(input);\n setSearchedInput(input);\n setOptions(fetchedOptions ?? []);\n setIsLoading(false);\n } catch {\n setIsError(true);\n setIsLoading(false);\n }\n }, []);\n\n const fetchOptionsDebounced = useCallback(\n debounce((input: string) => {\n handleFetchOptions(input);\n }, 500),\n [handleFetchOptions]\n );\n\n // =============================================================================\n // EFFECTS\n // =============================================================================\n\n useEffect(() => {\n fetchOptionsRef.current = fetchOptions;\n }, [fetchOptions]);\n\n useEffect(() => {\n /***\n * Should not fetch options for the following the scenario :\n * 1. When input < minimumCharacters\n * 2. When user selected option from dropdown becomes input\n * 3. Initial selectedOption passed in as input\n */\n if (input && input.length >= minimumCharacters) {\n if (!isOptionSelected) {\n setIsOpen(true);\n fetchOptionsDebounced(input);\n } else if (input !== searchedInput) {\n fetchOptionsDebounced(input);\n }\n } else {\n fetchOptionsDebounced.cancel();\n }\n\n if (input === \"\" && prevOptionSelected) {\n onSelectOption?.(undefined, undefined);\n handleDropdownDismiss();\n setPrevOptionSelected(undefined);\n }\n\n if (selectedOption && input !== getDisplayValue(selectedOption)) {\n setIsOptionSelected(false);\n }\n }, [input, selectedOption]);\n\n useEffect(() => {\n setInput(selectedOption ? getDisplayValue(selectedOption) : \"\");\n setSearchedInput(selectedOption ? getDisplayValue(selectedOption) : \"\");\n setPrevOptionSelected(selectedOption);\n setOptions([]);\n setIsOptionSelected(!!selectedOption);\n }, [selectedOption]);\n\n useEffect(() => {\n const state = getItemsLoadState();\n const count = options?.length ?? 0;\n\n if (state === \"loading\" && input.length >= minimumCharacters) {\n setResultAnnouncement(\"Loading suggested results\");\n return;\n }\n\n if (state === \"fail\") {\n setResultAnnouncement(\"Suggestions failed to load. Try again.\");\n return;\n }\n\n if (isOpen && !isLoading && !isError) {\n if (count === 0) {\n setResultAnnouncement(input ? \"No results found.\" : null);\n } else {\n setResultAnnouncement(\n `${count} result${\n count > 1 ? \"s\" : \"\"\n } found. Press down arrow to scroll through the list.`\n );\n }\n }\n }, [options, input, isError, isLoading]);\n\n // =============================================================================\n // Cleanup: cancel debounce on unmount\n // =============================================================================\n useEffect(() => {\n return () => {\n fetchOptionsDebounced.cancel();\n };\n }, [fetchOptionsDebounced]);\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n const handleListItemClick = (item: T, extractedValue: V) => {\n selectorRef.current?.focus();\n setInput(getDisplayValue(item));\n setSearchedInput(item ? getDisplayValue(item) : \"\");\n setIsOptionSelected(true);\n setPrevOptionSelected(item);\n setIsOpen(false);\n onSelectOption?.(item, extractedValue);\n };\n\n const handleOpen = () => {\n if (!isOptionSelected && input.length >= minimumCharacters) {\n setIsFocused(true);\n }\n };\n\n const handleClose = () => {\n setIsOpen(false);\n setIsFocused(false);\n handleOnBlur();\n };\n\n const handleNodeFocus = () => {\n setIsFocused(true);\n };\n\n const handleNodeBlur = (e: React.FocusEvent) => {\n if (\n !isOpen &&\n nodeRef.current &&\n !nodeRef.current.contains(e.relatedTarget as Node)\n ) {\n setIsFocused(false);\n handleOnBlur();\n }\n };\n\n const handleListDismiss = () => {\n setIsOpen(false);\n setIsFocused(false);\n };\n\n const handleDismiss = () => {\n setIsOpen(false);\n setIsFocused(false);\n handleOnBlur();\n selectorRef.current?.focus();\n };\n\n const handleOnClear = () => {\n setInput(\"\");\n setOptions([]);\n setIsOptionSelected(false);\n setIsOpen(false);\n onSelectOption?.(undefined, undefined);\n };\n\n const handleOnBlur = () => {\n if (!isOptionSelected) {\n if (prevOptionSelected) {\n const prevValue = getDisplayValue(prevOptionSelected);\n setInput(prevValue);\n setIsOpen(false);\n } else {\n handleOnClear();\n }\n }\n };\n\n const handleTyping = (e: React.ChangeEvent<HTMLInputElement>) => {\n setInput(e.target.value);\n setIsOptionSelected(false);\n };\n\n const handleDropdownDismiss = (item?: T) => {\n setSearchedInput(item ? getDisplayValue(item) : \"\");\n setIsOptionSelected(!!item);\n setOptions([]);\n setIsLoading(true);\n };\n\n // =============================================================================\n // HELPER FUNCTION\n // =============================================================================\n const getItemsLoadState = (): ItemsLoadStateType => {\n if (isError) return \"fail\";\n return isLoading ? \"loading\" : \"success\";\n };\n\n // =============================================================================\n // RENDER FUNCTION\n // =============================================================================\n const renderInputElement = () => {\n return (\n <InputWrapper\n className={className}\n data-testid={testId}\n ref={nodeRef}\n tabIndex={-1}\n onFocus={handleNodeFocus}\n onBlur={handleNodeBlur}\n $focused={isFocused}\n $disabled={disabled}\n $readOnly={readOnly}\n $error={error}\n >\n <VisuallyHidden id={instructionId} aria-hidden>\n Type in {minimumCharacters} or more characters for suggested\n results.\n </VisuallyHidden>\n {resultAnnouncement && (\n <VisuallyHidden aria-live=\"polite\">\n {resultAnnouncement}\n </VisuallyHidden>\n )}\n <Input\n role=\"combobox\"\n ref={selectorRef}\n id={internalId}\n type=\"text\"\n value={input}\n onChange={handleTyping}\n placeholder={placeholder}\n readOnly={readOnly}\n disabled={disabled}\n allowClear\n onClear={handleOnClear}\n aria-expanded={isOpen}\n aria-controls={internalId}\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n onBlur={\n input.length < minimumCharacters\n ? handleOnBlur\n : undefined\n }\n styleType=\"no-border\"\n aria-describedby={concatIds(ariaDescribedBy, instructionId)}\n {...otherProps}\n />\n </InputWrapper>\n );\n };\n\n const renderDropdown = () => {\n return (\n <>\n <DropdownList\n listboxId={internalId}\n listItems={options}\n onSelectItem={handleListItemClick}\n onDismiss={handleListDismiss}\n valueExtractor={valueExtractor}\n listExtractor={listExtractor}\n itemsLoadState={getItemsLoadState()}\n itemTruncationType={\"end\"}\n itemMaxLines={1}\n labelDisplayType={\"next-line\"}\n disableItemFocus\n onRetry={() => handleFetchOptions(input)}\n width={dropdownWidth}\n matchElementWidth\n />\n </>\n );\n };\n\n return (\n <DropdownListState>\n <ElementWithDropdown\n enabled={!readOnly && !disabled}\n isOpen={isOpen}\n renderElement={renderInputElement}\n renderDropdown={renderDropdown}\n onOpen={handleOpen}\n onClose={handleClose}\n onDismiss={handleDismiss}\n clickToToggle={false}\n offset={8}\n alignment={alignment}\n fitAvailableHeight\n customZIndex={dropdownZIndex}\n rootNode={dropdownRootNode}\n />\n </DropdownListState>\n );\n};\n"],"names":["_a","className","testId","selectedOption","minimumCharacters","fetchOptions","placeholder","readOnly","disabled","error","valueExtractor","listExtractor","displayValueExtractor","onSelectOption","alignment","dropdownZIndex","dropdownRootNode","dropdownWidth","ariaDescribedBy","otherProps","__rest","getDisplayValue","item","toString","input","setInput","useState","searchedInput","setSearchedInput","options","setOptions","isLoading","setIsLoading","isError","setIsError","isOptionSelected","setIsOptionSelected","prevOptionSelected","setPrevOptionSelected","isOpen","setIsOpen","isFocused","setIsFocused","internalId","useId","resultAnnouncement","setResultAnnouncement","instructionId","nodeRef","useRef","selectorRef","fetchOptionsRef","handleFetchOptions","useCallback","__awaiter","current","fetchedOptions","fetchOptionsDebounced","debounce","useEffect","length","cancel","undefined","handleDropdownDismiss","state","getItemsLoadState","count","handleListItemClick","extractedValue","focus","handleNodeFocus","handleNodeBlur","e","contains","relatedTarget","handleOnBlur","handleListDismiss","handleOnClear","prevValue","handleTyping","target","value","_jsx","DropdownListState","children","ElementWithDropdown","enabled","renderElement","_jsxs","InputWrapper","ref","tabIndex","onFocus","onBlur","$focused","$readOnly","$error","VisuallyHidden","id","Input","Object","assign","role","type","onChange","allowClear","onClear","styleType","concatIds","renderDropdown","_Fragment","DropdownList","listboxId","listItems","onSelectItem","onDismiss","itemsLoadState","itemTruncationType","itemMaxLines","labelDisplayType","disableItemFocus","onRetry","width","matchElementWidth","onOpen","onClose","clickToToggle","offset","fitAvailableHeight","customZIndex","rootNode"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"predictive-text-input.js","sources":["../../../src/predictive-text-input/predictive-text-input.tsx"],"sourcesContent":["import debounce from \"lodash/debounce\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { VisuallyHidden, concatIds } from \"src/shared/accessibility\";\nimport { Input } from \"../input\";\nimport { DropdownList, DropdownListState } from \"../shared/dropdown-list\";\nimport { ItemsLoadStateType } from \"../shared/dropdown-list/types\";\nimport { ElementWithDropdown } from \"../shared/dropdown-wrapper\";\nimport { InputWrapper } from \"../shared/input-wrapper/input-wrapper\";\nimport { useId } from \"../util\";\nimport { PredictiveTextInputProps } from \"./types\";\n\nexport const PredictiveTextInput = <T, V>({\n className,\n \"data-testid\": testId,\n selectedOption,\n minimumCharacters = 3,\n fetchOptions,\n placeholder = \"Enter here...\",\n readOnly = false,\n disabled = false,\n error,\n valueExtractor,\n listExtractor,\n displayValueExtractor,\n onSelectOption,\n alignment,\n dropdownZIndex,\n dropdownRootNode,\n dropdownWidth,\n \"aria-describedby\": ariaDescribedBy,\n ...otherProps\n}: PredictiveTextInputProps<T, V>): JSX.Element => {\n const getDisplayValue = (item: T | undefined): string => {\n if (!item) return \"\";\n return displayValueExtractor\n ? displayValueExtractor(item)\n : item.toString();\n };\n\n // =============================================================================\n // CONST, STATE\n // =============================================================================\n const [input, setInput] = useState<string>(() =>\n selectedOption ? getDisplayValue(selectedOption) : \"\"\n );\n const [searchedInput, setSearchedInput] = useState<string>(() =>\n selectedOption ? getDisplayValue(selectedOption) : \"\"\n );\n const [options, setOptions] = useState<T[]>([]);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [isError, setIsError] = useState<boolean>(false);\n const [isOptionSelected, setIsOptionSelected] = useState<boolean>(\n !!selectedOption\n );\n const [prevOptionSelected, setPrevOptionSelected] = useState<T | undefined>(\n selectedOption\n );\n const [isOpen, setIsOpen] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n\n const internalId = useId();\n const [resultAnnouncement, setResultAnnouncement] = useState<string | null>(\n null\n );\n const instructionId = `${internalId}-instruction`;\n\n const nodeRef = useRef<HTMLDivElement | null>(null);\n const selectorRef = useRef<HTMLInputElement | null>(null);\n\n const fetchOptionsRef = useRef(fetchOptions);\n\n // =============================================================================\n // DEBOUNCE FUNCTIONS\n // =============================================================================\n const handleFetchOptions = useCallback(async (input: string) => {\n if (!fetchOptionsRef.current) return;\n setIsError(false);\n setIsLoading(true);\n try {\n const fetchedOptions = await fetchOptionsRef.current(input);\n setSearchedInput(input);\n setOptions(fetchedOptions ?? []);\n setIsLoading(false);\n } catch {\n setIsError(true);\n setIsLoading(false);\n }\n }, []);\n\n const fetchOptionsDebounced = useCallback(\n debounce((input: string) => {\n handleFetchOptions(input);\n }, 500),\n [handleFetchOptions]\n );\n\n // =============================================================================\n // EFFECTS\n // =============================================================================\n\n useEffect(() => {\n fetchOptionsRef.current = fetchOptions;\n }, [fetchOptions]);\n\n useEffect(() => {\n /***\n * Should not fetch options for the following the scenario :\n * 1. When input < minimumCharacters\n * 2. When user selected option from dropdown becomes input\n * 3. Initial selectedOption passed in as input\n */\n if (input && input.length >= minimumCharacters) {\n if (!isOptionSelected) {\n setIsOpen(true);\n fetchOptionsDebounced(input);\n } else if (input !== searchedInput) {\n fetchOptionsDebounced(input);\n }\n } else {\n fetchOptionsDebounced.cancel();\n }\n\n if (input === \"\" && prevOptionSelected) {\n onSelectOption?.(undefined, undefined);\n handleDropdownDismiss();\n setPrevOptionSelected(undefined);\n }\n\n if (selectedOption && input !== getDisplayValue(selectedOption)) {\n setIsOptionSelected(false);\n }\n }, [input, selectedOption]);\n\n useEffect(() => {\n setInput(selectedOption ? getDisplayValue(selectedOption) : \"\");\n setSearchedInput(selectedOption ? getDisplayValue(selectedOption) : \"\");\n setPrevOptionSelected(selectedOption);\n setIsOptionSelected(!!selectedOption);\n }, [selectedOption]);\n\n useEffect(() => {\n const state = getItemsLoadState();\n const count = options?.length ?? 0;\n\n if (state === \"loading\" && input.length >= minimumCharacters) {\n setResultAnnouncement(\"Loading suggested results\");\n return;\n }\n\n if (state === \"fail\") {\n setResultAnnouncement(\"Suggestions failed to load. Try again.\");\n return;\n }\n\n if (isOpen && !isLoading && !isError) {\n if (count === 0) {\n setResultAnnouncement(input ? \"No results found.\" : null);\n } else {\n setResultAnnouncement(\n `${count} result${\n count > 1 ? \"s\" : \"\"\n } found. Press down arrow to scroll through the list.`\n );\n }\n }\n }, [options, input, isError, isLoading]);\n\n // =============================================================================\n // Cleanup: cancel debounce on unmount\n // =============================================================================\n useEffect(() => {\n return () => {\n fetchOptionsDebounced.cancel();\n };\n }, [fetchOptionsDebounced]);\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n const handleListItemClick = (item: T, extractedValue: V) => {\n selectorRef.current?.focus();\n setInput(getDisplayValue(item));\n setSearchedInput(item ? getDisplayValue(item) : \"\");\n setIsOptionSelected(true);\n setPrevOptionSelected(item);\n setIsOpen(false);\n onSelectOption?.(item, extractedValue);\n };\n\n const handleOpen = () => {\n if (!isOptionSelected && input.length >= minimumCharacters) {\n setIsFocused(true);\n }\n };\n\n const handleClose = () => {\n setIsOpen(false);\n setIsFocused(false);\n handleOnBlur();\n };\n\n const handleNodeFocus = () => {\n setIsFocused(true);\n };\n\n const handleNodeBlur = (e: React.FocusEvent) => {\n if (\n !isOpen &&\n nodeRef.current &&\n !nodeRef.current.contains(e.relatedTarget as Node)\n ) {\n setIsFocused(false);\n handleOnBlur();\n }\n };\n\n const handleListDismiss = () => {\n setIsOpen(false);\n setIsFocused(false);\n };\n\n const handleDismiss = () => {\n setIsOpen(false);\n setIsFocused(false);\n handleOnBlur();\n selectorRef.current?.focus();\n };\n\n const handleHide = () => {\n // reset dropdown state once it fully closes\n setOptions([]);\n setIsLoading(true);\n setIsError(false);\n };\n\n const handleOnClear = () => {\n setInput(\"\");\n setIsOptionSelected(false);\n setIsOpen(false);\n onSelectOption?.(undefined, undefined);\n };\n\n const handleOnBlur = () => {\n if (!isOptionSelected) {\n if (prevOptionSelected) {\n const prevValue = getDisplayValue(prevOptionSelected);\n setInput(prevValue);\n setIsOpen(false);\n } else {\n handleOnClear();\n }\n }\n };\n\n const handleTyping = (e: React.ChangeEvent<HTMLInputElement>) => {\n setInput(e.target.value);\n setIsOptionSelected(false);\n };\n\n const handleDropdownDismiss = (item?: T) => {\n setSearchedInput(item ? getDisplayValue(item) : \"\");\n setIsOptionSelected(!!item);\n setIsLoading(true);\n };\n\n // =============================================================================\n // HELPER FUNCTION\n // =============================================================================\n const getItemsLoadState = (): ItemsLoadStateType => {\n if (isError) return \"fail\";\n return isLoading ? \"loading\" : \"success\";\n };\n\n // =============================================================================\n // RENDER FUNCTION\n // =============================================================================\n const renderInputElement = () => {\n return (\n <InputWrapper\n className={className}\n data-testid={testId}\n ref={nodeRef}\n tabIndex={-1}\n onFocus={handleNodeFocus}\n onBlur={handleNodeBlur}\n $focused={isFocused}\n $disabled={disabled}\n $readOnly={readOnly}\n $error={error}\n >\n <VisuallyHidden id={instructionId} aria-hidden>\n Type in {minimumCharacters} or more characters for suggested\n results.\n </VisuallyHidden>\n {resultAnnouncement && (\n <VisuallyHidden aria-live=\"polite\">\n {resultAnnouncement}\n </VisuallyHidden>\n )}\n <Input\n role=\"combobox\"\n ref={selectorRef}\n id={internalId}\n type=\"text\"\n value={input}\n onChange={handleTyping}\n placeholder={placeholder}\n readOnly={readOnly}\n disabled={disabled}\n allowClear\n onClear={handleOnClear}\n aria-expanded={isOpen}\n aria-controls={internalId}\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n onBlur={\n input.length < minimumCharacters\n ? handleOnBlur\n : undefined\n }\n styleType=\"no-border\"\n aria-describedby={concatIds(ariaDescribedBy, instructionId)}\n {...otherProps}\n />\n </InputWrapper>\n );\n };\n\n const renderDropdown = () => {\n return (\n <DropdownList\n listboxId={internalId}\n listItems={options}\n onSelectItem={handleListItemClick}\n onDismiss={handleListDismiss}\n valueExtractor={valueExtractor}\n listExtractor={listExtractor}\n itemsLoadState={getItemsLoadState()}\n itemTruncationType={\"end\"}\n itemMaxLines={1}\n labelDisplayType={\"next-line\"}\n disableItemFocus\n onRetry={() => handleFetchOptions(input)}\n width={dropdownWidth}\n matchElementWidth\n />\n );\n };\n\n return (\n <DropdownListState>\n <ElementWithDropdown\n enabled={!readOnly && !disabled}\n isOpen={isOpen}\n renderElement={renderInputElement}\n renderDropdown={renderDropdown}\n onOpen={handleOpen}\n onClose={handleClose}\n onDismiss={handleDismiss}\n onHide={handleHide}\n clickToToggle={false}\n offset={8}\n alignment={alignment}\n fitAvailableHeight\n customZIndex={dropdownZIndex}\n rootNode={dropdownRootNode}\n />\n </DropdownListState>\n );\n};\n"],"names":["_a","className","testId","selectedOption","minimumCharacters","fetchOptions","placeholder","readOnly","disabled","error","valueExtractor","listExtractor","displayValueExtractor","onSelectOption","alignment","dropdownZIndex","dropdownRootNode","dropdownWidth","ariaDescribedBy","otherProps","__rest","getDisplayValue","item","toString","input","setInput","useState","searchedInput","setSearchedInput","options","setOptions","isLoading","setIsLoading","isError","setIsError","isOptionSelected","setIsOptionSelected","prevOptionSelected","setPrevOptionSelected","isOpen","setIsOpen","isFocused","setIsFocused","internalId","useId","resultAnnouncement","setResultAnnouncement","instructionId","nodeRef","useRef","selectorRef","fetchOptionsRef","handleFetchOptions","useCallback","__awaiter","current","fetchedOptions","fetchOptionsDebounced","debounce","useEffect","length","cancel","undefined","handleDropdownDismiss","state","getItemsLoadState","count","handleListItemClick","extractedValue","focus","handleNodeFocus","handleNodeBlur","e","contains","relatedTarget","handleOnBlur","handleListDismiss","handleOnClear","prevValue","handleTyping","target","value","_jsx","DropdownListState","children","ElementWithDropdown","enabled","renderElement","_jsxs","InputWrapper","ref","tabIndex","onFocus","onBlur","$focused","$readOnly","$error","VisuallyHidden","id","Input","Object","assign","role","type","onChange","allowClear","onClear","styleType","concatIds","renderDropdown","DropdownList","listboxId","listItems","onSelectItem","onDismiss","itemsLoadState","itemTruncationType","itemMaxLines","labelDisplayType","disableItemFocus","onRetry","width","matchElementWidth","onOpen","onClose","onHide","clickToToggle","offset","fitAvailableHeight","customZIndex","rootNode"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("react/jsx-runtime"),t=require("@floating-ui/react"),
|
|
1
|
+
"use strict";var e=require("react/jsx-runtime"),t=require("@floating-ui/react"),i=require("react"),n=require("../../external/react-resize-detector/build/index.esm.js"),r=require("styled-components"),s=require("../../overlay/use-floating-context.js"),l=require("../../theme/index.js");require("../../util/calendar-helper.js"),require("../../util/date-helper.js"),require("../../util/date-input-helper.js"),require("../../util/simple-id-generator.js"),require("../../util/string-helper.js"),require("@react-aria/live-announcer");var o=require("../../util/use-event.js"),a=require("../../util/use-previous.js");const u=e=>"right"===e?"bottom-end":"bottom-start",d=i.createContext({elementWidth:0,styles:{},setFloatingRef:()=>{},getFloatingProps:()=>({})});exports.DropdownRenderContext=d,exports.ElementWithDropdown=({enabled:c,isOpen:g,onOpen:h,onClose:p,onDismiss:f,onHide:m,renderElement:x,renderDropdown:j,customZIndex:v,clickToToggle:y=!1,offset:b=0,alignment:q="left",fitAvailableHeight:w,rootNode:F,positionRef:R})=>{var C;const P=i.useContext(r.ThemeContext),D=l.Breakpoint["sm-max"]({theme:P}),O=i.useRef(null),{width:H=0}=n.useResizeDetector({targetRef:null!=R?R:O,handleHeight:!1}),W={name:"center",fn:({x:e,rects:t})=>{const i=0===e||e+t.floating.width===window.innerWidth,n=window.innerWidth<D;return{x:i&&n?(window.innerWidth-t.floating.width)/2:e}}},{refs:k,floatingStyles:E,context:z}=t.useFloating({open:g,onOpenChange:(e,t,i)=>{"escape-key"===i?null==f||f():e&&!g?null==h||h():!e&&g&&(null==p||p(i))},whileElementsMounted:t.autoUpdate,placement:u(q),middleware:[t.offset(b),t.flip(),t.shift({limiter:t.limitShift()}),t.size({apply({availableHeight:e,elements:t}){!w||e>=t.floating.scrollHeight?t.floating.style.setProperty("--available-height",""):t.floating.style.setProperty("--available-height",`${Math.max(0,e)}px`)}}),W]}),M=s.useFloatingChild(),{isMounted:T,styles:I}=t.useTransitionStyles(z,{initial:{opacity:0},open:{opacity:1},duration:300}),S=t.useClick(z,{enabled:c,toggle:y,keyboardHandlers:y}),A=t.useDismiss(z,{enabled:c}),{getReferenceProps:B,getFloatingProps:N}=t.useInteractions([S,A]),U=a.usePrevious(T),Z=o.useEvent((()=>null==m?void 0:m()));i.useEffect((()=>{U&&!T&&Z()}),[U,T,Z]);const $={elementWidth:H,styles:Object.assign(Object.assign(Object.assign({},I),E),{zIndex:null!==(C=null!=v?v:M)&&void 0!==C?C:50}),setFloatingRef:k.setFloating,getFloatingProps:N};return e.jsxs(e.Fragment,{children:[e.jsx("div",Object.assign({ref:e=>{O.current=e,k.setReference(e)}},B(),{children:x()})),T&&e.jsx(t.FloatingPortal,{root:F,children:e.jsx(t.FloatingFocusManager,{context:z,modal:!1,initialFocus:-1,returnFocus:!1,children:e.jsx(d.Provider,{value:$,children:j($)})})})]})},exports.useDropdownRender=()=>i.useContext(d);
|
|
2
2
|
//# sourceMappingURL=element-with-dropdown.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element-with-dropdown.js","sources":["../../../../src/shared/dropdown-wrapper/element-with-dropdown.tsx"],"sourcesContent":["import {\n FloatingFocusManager,\n FloatingPortal,\n Middleware,\n OpenChangeReason,\n Placement,\n autoUpdate,\n flip,\n limitShift,\n offset,\n shift,\n size,\n useClick,\n useDismiss,\n useFloating,\n useInteractions,\n useTransitionStyles,\n} from \"@floating-ui/react\";\nimport {\n CSSProperties,\n RefObject,\n createContext,\n useContext,\n useRef,\n} from \"react\";\nimport { useResizeDetector } from \"react-resize-detector\";\nimport { ThemeContext } from \"styled-components\";\nimport { useFloatingChild } from \"../../overlay/use-floating-context\";\nimport { Breakpoint } from \"../../theme\";\nimport { DropdownAlignmentType } from \"./types\";\n\nexport interface DropdownRenderProps {\n elementWidth: number;\n styles: CSSProperties;\n setFloatingRef: (node: HTMLElement | null) => void;\n getFloatingProps: (\n userProps?: React.HTMLProps<HTMLElement>\n ) => Record<string, unknown>;\n}\n\ninterface ElementWithDropdownProps {\n enabled: boolean;\n isOpen: boolean;\n onOpen?: () => void | undefined;\n onClose?: (reason: OpenChangeReason | undefined) => void | undefined;\n onDismiss?: () => void | undefined;\n renderElement: () => React.ReactNode;\n renderDropdown: (props: DropdownRenderProps) => React.ReactNode;\n customZIndex?: number | undefined;\n clickToToggle?: boolean | undefined;\n /* the distance between the reference element and the dropdown */\n offset?: number | undefined;\n /* the alignment of the dropdown to the left or right of the reference element */\n alignment?: DropdownAlignmentType | undefined;\n fitAvailableHeight?: boolean | undefined;\n /**\n * The root element that contains the popover element. Defaults to the document body.\n *\n * If the parent that contains the trigger element has a higher z-index than the popover,\n * the popover may not be visible. Specify the parent element here instead\n */\n rootNode?: RefObject<HTMLElement> | undefined;\n /** If set, the `elementWidth` refers to this instead of the reference element */\n positionRef?: RefObject<HTMLElement> | undefined;\n}\n\nconst getFloatingPlacement = (alignment: DropdownAlignmentType): Placement => {\n switch (alignment) {\n case \"right\":\n return \"bottom-end\";\n case \"left\":\n default:\n return \"bottom-start\";\n }\n};\n\nconst DEFAULT_Z_INDEX = 50;\n\nexport const DropdownRenderContext = createContext<DropdownRenderProps>({\n elementWidth: 0,\n styles: {},\n setFloatingRef: () => {\n // noop\n },\n getFloatingProps: () => ({}),\n});\n\nexport const useDropdownRender = () => {\n return useContext(DropdownRenderContext);\n};\n\n/**\n * A wrapper to handle the common pattern of a field with a card-based dropdown\n * using Floating UI\n *\n * Usage:\n * - Specify `renderElement` for the main field\n * - Specify `renderDropdown` for the dropdown\n * - Use `isOpen` to control the visibility of the dropdown\n * - Handle changes in visibility with `onOpen`, `onClose` and `onDismiss`\n * - If your dropdown can resize, set the css like so: `max-height: var(--available-height);`\n * - If your dropdown has a preferred max-height, set the css like so:\n * `max-height: min(100px, var(--available-height, infinity * 1px))`\n *\n * Pass the floating props to the dropdown:\n * ```\n * <DropdownContainer\n * ref={setFloatingRef}\n * style={styles}\n * {...getFloatingProps()}\n * >\n * </DropdownContainer>\n * ```\n *\n * If you need event listeners, pass them to `getFloatingProps()`:\n * ```\n * getFloatingProps({\n * onClick: handleOnClick\n * })\n * ```\n */\nexport const ElementWithDropdown = ({\n enabled,\n isOpen,\n onOpen,\n onClose,\n onDismiss,\n renderElement,\n renderDropdown,\n customZIndex,\n clickToToggle = false,\n offset: dropdownOffset = 0,\n alignment = \"left\",\n fitAvailableHeight,\n rootNode,\n positionRef,\n}: ElementWithDropdownProps) => {\n // =============================================================================\n // CONST, STATE, REF\n // =============================================================================\n const theme = useContext(ThemeContext);\n const mobileBreakpoint = Breakpoint[\"sm-max\"]({ theme });\n const elementRef = useRef<HTMLDivElement | null>(null);\n const { width: referenceWidth = 0 } = useResizeDetector({\n targetRef: positionRef ?? elementRef,\n handleHeight: false,\n });\n const center: Middleware = {\n name: \"center\",\n fn: ({ x, rects }) => {\n const noGapInBetween =\n x === 0 || x + rects.floating.width === window.innerWidth;\n const isMobileScreen = window.innerWidth < mobileBreakpoint;\n return {\n x:\n noGapInBetween && isMobileScreen\n ? (window.innerWidth - rects.floating.width) / 2\n : x,\n };\n },\n };\n const { refs, floatingStyles, context } = useFloating({\n open: isOpen,\n onOpenChange: (open, _event, reason) => {\n if (reason === \"escape-key\") {\n onDismiss?.();\n } else if (open && !isOpen) {\n onOpen?.();\n } else if (!open && isOpen) {\n onClose?.(reason);\n }\n },\n whileElementsMounted: autoUpdate,\n placement: getFloatingPlacement(alignment),\n middleware: [\n offset(dropdownOffset),\n flip(),\n shift({\n limiter: limitShift(),\n }),\n size({\n // shrink to fit available vertical space\n apply({ availableHeight, elements }) {\n if (\n !fitAvailableHeight ||\n availableHeight >= elements.floating.scrollHeight\n ) {\n // reset this so that dropdown can expand as needed\n elements.floating.style.setProperty(\n \"--available-height\",\n \"\"\n );\n return;\n }\n\n elements.floating.style.setProperty(\n \"--available-height\",\n `${Math.max(0, availableHeight)}px`\n );\n },\n }),\n center,\n ],\n });\n const parentZIndex = useFloatingChild();\n\n const { isMounted, styles } = useTransitionStyles(context, {\n initial: { opacity: 0 },\n open: { opacity: 1 },\n duration: 300,\n });\n\n const click = useClick(context, {\n enabled,\n toggle: clickToToggle,\n keyboardHandlers: clickToToggle,\n });\n const dismiss = useDismiss(context, { enabled });\n\n const { getReferenceProps, getFloatingProps } = useInteractions([\n click,\n dismiss,\n ]);\n\n // =============================================================================\n // RENDER FUNCTIONS\n // =============================================================================\n const dropdownRenderProps = {\n elementWidth: referenceWidth,\n styles: {\n ...styles,\n ...floatingStyles,\n zIndex: customZIndex ?? parentZIndex ?? DEFAULT_Z_INDEX,\n },\n setFloatingRef: refs.setFloating,\n getFloatingProps,\n };\n\n return (\n <>\n <div\n ref={(node) => {\n elementRef.current = node;\n refs.setReference(node);\n }}\n {...getReferenceProps()}\n >\n {renderElement()}\n </div>\n {isMounted && (\n <FloatingPortal root={rootNode}>\n <FloatingFocusManager\n context={context}\n modal={false}\n initialFocus={-1}\n returnFocus={false} // leads to focus trap. parent to handle the final focus state\n >\n <DropdownRenderContext.Provider\n value={dropdownRenderProps}\n >\n {renderDropdown(dropdownRenderProps)}\n </DropdownRenderContext.Provider>\n </FloatingFocusManager>\n </FloatingPortal>\n )}\n </>\n );\n};\n"],"names":["getFloatingPlacement","alignment","DropdownRenderContext","createContext","elementWidth","styles","setFloatingRef","getFloatingProps","enabled","isOpen","onOpen","onClose","onDismiss","renderElement","renderDropdown","customZIndex","clickToToggle","offset","dropdownOffset","fitAvailableHeight","rootNode","positionRef","theme","useContext","ThemeContext","mobileBreakpoint","Breakpoint","elementRef","useRef","width","referenceWidth","useResizeDetector","targetRef","handleHeight","center","name","fn","x","rects","noGapInBetween","floating","window","innerWidth","isMobileScreen","refs","floatingStyles","context","useFloating","open","onOpenChange","_event","reason","whileElementsMounted","autoUpdate","placement","middleware","flip","shift","limiter","limitShift","size","apply","availableHeight","elements","scrollHeight","style","setProperty","Math","max","parentZIndex","useFloatingChild","isMounted","useTransitionStyles","initial","opacity","duration","click","useClick","toggle","keyboardHandlers","dismiss","useDismiss","getReferenceProps","useInteractions","dropdownRenderProps","zIndex","_a","setFloating","_jsxs","_jsx","Object","assign","ref","node","current","setReference","children","FloatingPortal","root","FloatingFocusManager","modal","initialFocus","returnFocus","Provider","value"],"mappings":"4RAkEA,MAAMA,EAAwBC,GAEjB,UADDA,EAEO,aAGA,eAMNC,EAAwBC,EAAAA,cAAmC,CACpEC,aAAc,EACdC,OAAQ,CAAA,EACRC,eAAgB,OAGhBC,iBAAkB,KAAA,CAAS,iEAqCI,EAC/BC,UACAC,SACAC,SACAC,UACAC,YACAC,gBACAC,iBACAC,eACAC,iBAAgB,EAChBC,OAAQC,EAAiB,EACzBjB,YAAY,OACZkB,qBACAC,WACAC,wBAKA,MAAMC,EAAQC,EAAAA,WAAWC,gBACnBC,EAAmBC,EAAAA,WAAW,UAAU,CAAEJ,UAC1CK,EAAaC,EAAAA,OAA8B,OACzCC,MAAOC,EAAiB,GAAMC,EAAAA,kBAAkB,CACpDC,UAAWX,QAAAA,EAAeM,EAC1BM,cAAc,IAEZC,EAAqB,CACvBC,KAAM,SACNC,GAAI,EAAGC,IAAGC,YACN,MAAMC,EACI,IAANF,GAAWA,EAAIC,EAAME,SAASX,QAAUY,OAAOC,WAC7CC,EAAiBF,OAAOC,WAAajB,EAC3C,MAAO,CACHY,EACIE,GAAkBI,GACXF,OAAOC,WAAaJ,EAAME,SAASX,OAAS,EAC7CQ,EACb,IAGHO,KAAEA,EAAIC,eAAEA,EAAcC,QAAEA,GAAYC,EAAAA,YAAY,CAClDC,KAAMvC,EACNwC,aAAc,CAACD,EAAME,EAAQC,KACV,eAAXA,EACAvC,SAAAA,IACOoC,IAASvC,EAChBC,SAAAA,KACQsC,GAAQvC,IAChBE,SAAAA,EAAUwC,GACd,EAEJC,qBAAsBC,EAAAA,WACtBC,UAAWtD,EAAqBC,GAChCsD,WAAY,CACRtC,EAAAA,OAAOC,GACPsC,SACAC,QAAM,CACFC,QAASC,EAAAA,eAEbC,OAAK,CAED,KAAAC,EAAMC,gBAAEA,EAAeC,SAAEA,KAEhB5C,GACD2C,GAAmBC,EAASvB,SAASwB,aAGrCD,EAASvB,SAASyB,MAAMC,YACpB,qBACA,IAKRH,EAASvB,SAASyB,MAAMC,YACpB,qBACA,GAAGC,KAAKC,IAAI,EAAGN,OAEvB,IAEJ5B,KAGFmC,EAAeC,EAAAA,oBAEfC,UAAEA,EAASlE,OAAEA,GAAWmE,EAAAA,oBAAoB1B,EAAS,CACvD2B,QAAS,CAAEC,QAAS,GACpB1B,KAAM,CAAE0B,QAAS,GACjBC,SAAU,MAGRC,EAAQC,EAAAA,SAAS/B,EAAS,CAC5BtC,UACAsE,OAAQ9D,EACR+D,iBAAkB/D,IAEhBgE,EAAUC,EAAAA,WAAWnC,EAAS,CAAEtC,aAEhC0E,kBAAEA,EAAiB3E,iBAAEA,GAAqB4E,kBAAgB,CAC5DP,EACAI,IAMEI,EAAsB,CACxBhF,aAAc0B,EACdzB,oDACOA,GACAwC,GAAc,CACjBwC,OAAoC,QAA5BC,EAAAvE,QAAAA,EAAgBsD,SAAY,IAAAiB,EAAAA,EA5JxB,KA8JhBhF,eAAgBsC,EAAK2C,YACrBhF,oBAGJ,OACIiF,6BACIC,EAAAA,IAAA,MAAAC,OAAAC,OAAA,CACIC,IAAMC,IACFlE,EAAWmE,QAAUD,EACrBjD,EAAKmD,aAAaF,EAAK,GAEvBX,IAAmB,CAAAc,SAEtBnF,OAEJ0D,GACGkB,EAAAA,IAACQ,EAAAA,gBAAeC,KAAM9E,EAAQ4E,SAC1BP,EAAAA,IAACU,uBAAoB,CACjBrD,QAASA,EACTsD,OAAO,EACPC,cAAc,EACdC,aAAa,EAAKN,SAElBP,EAAAA,IAACvF,EAAsBqG,SAAQ,CAC3BC,MAAOpB,EAAmBY,SAEzBlF,EAAesE,WAKjC,4BAlLsB,IACtB7D,EAAAA,WAAWrB"}
|
|
1
|
+
{"version":3,"file":"element-with-dropdown.js","sources":["../../../../src/shared/dropdown-wrapper/element-with-dropdown.tsx"],"sourcesContent":["import {\n FloatingFocusManager,\n FloatingPortal,\n Middleware,\n OpenChangeReason,\n Placement,\n autoUpdate,\n flip,\n limitShift,\n offset,\n shift,\n size,\n useClick,\n useDismiss,\n useFloating,\n useInteractions,\n useTransitionStyles,\n} from \"@floating-ui/react\";\nimport {\n CSSProperties,\n RefObject,\n createContext,\n useContext,\n useEffect,\n useRef,\n} from \"react\";\nimport { useResizeDetector } from \"react-resize-detector\";\nimport { ThemeContext } from \"styled-components\";\nimport { useFloatingChild } from \"../../overlay/use-floating-context\";\nimport { Breakpoint } from \"../../theme\";\nimport { useEvent, usePrevious } from \"../../util\";\nimport { DropdownAlignmentType } from \"./types\";\n\nexport interface DropdownRenderProps {\n elementWidth: number;\n styles: CSSProperties;\n setFloatingRef: (node: HTMLElement | null) => void;\n getFloatingProps: (\n userProps?: React.HTMLProps<HTMLElement>\n ) => Record<string, unknown>;\n}\n\ninterface ElementWithDropdownProps {\n enabled: boolean;\n isOpen: boolean;\n onOpen?: (() => void) | undefined;\n onClose?: ((reason: OpenChangeReason | undefined) => void) | undefined;\n onDismiss?: (() => void) | undefined;\n onHide?: (() => void) | undefined;\n renderElement: () => React.ReactNode;\n renderDropdown: (props: DropdownRenderProps) => React.ReactNode;\n customZIndex?: number | undefined;\n clickToToggle?: boolean | undefined;\n /* the distance between the reference element and the dropdown */\n offset?: number | undefined;\n /* the alignment of the dropdown to the left or right of the reference element */\n alignment?: DropdownAlignmentType | undefined;\n fitAvailableHeight?: boolean | undefined;\n /**\n * The root element that contains the popover element. Defaults to the document body.\n *\n * If the parent that contains the trigger element has a higher z-index than the popover,\n * the popover may not be visible. Specify the parent element here instead\n */\n rootNode?: RefObject<HTMLElement> | undefined;\n /** If set, the `elementWidth` refers to this instead of the reference element */\n positionRef?: RefObject<HTMLElement> | undefined;\n}\n\nconst getFloatingPlacement = (alignment: DropdownAlignmentType): Placement => {\n switch (alignment) {\n case \"right\":\n return \"bottom-end\";\n case \"left\":\n default:\n return \"bottom-start\";\n }\n};\n\nconst DEFAULT_Z_INDEX = 50;\n\nexport const DropdownRenderContext = createContext<DropdownRenderProps>({\n elementWidth: 0,\n styles: {},\n setFloatingRef: () => {\n // noop\n },\n getFloatingProps: () => ({}),\n});\n\nexport const useDropdownRender = () => {\n return useContext(DropdownRenderContext);\n};\n\n/**\n * A wrapper to handle the common pattern of a field with a card-based dropdown\n * using Floating UI\n *\n * Usage:\n * - Specify `renderElement` for the main field\n * - Specify `renderDropdown` for the dropdown\n * - Use `isOpen` to control the visibility of the dropdown\n * - Handle changes in visibility with `onOpen`, `onClose` and `onDismiss`\n * - If your dropdown can resize, set the css like so: `max-height: var(--available-height);`\n * - If your dropdown has a preferred max-height, set the css like so:\n * `max-height: min(100px, var(--available-height, infinity * 1px))`\n *\n * Pass the floating props to the dropdown:\n * ```\n * <DropdownContainer\n * ref={setFloatingRef}\n * style={styles}\n * {...getFloatingProps()}\n * >\n * </DropdownContainer>\n * ```\n *\n * If you need event listeners, pass them to `getFloatingProps()`:\n * ```\n * getFloatingProps({\n * onClick: handleOnClick\n * })\n * ```\n */\nexport const ElementWithDropdown = ({\n enabled,\n isOpen,\n onOpen,\n onClose,\n onDismiss,\n onHide,\n renderElement,\n renderDropdown,\n customZIndex,\n clickToToggle = false,\n offset: dropdownOffset = 0,\n alignment = \"left\",\n fitAvailableHeight,\n rootNode,\n positionRef,\n}: ElementWithDropdownProps) => {\n // =============================================================================\n // CONST, STATE, REF\n // =============================================================================\n const theme = useContext(ThemeContext);\n const mobileBreakpoint = Breakpoint[\"sm-max\"]({ theme });\n const elementRef = useRef<HTMLDivElement | null>(null);\n const { width: referenceWidth = 0 } = useResizeDetector({\n targetRef: positionRef ?? elementRef,\n handleHeight: false,\n });\n const center: Middleware = {\n name: \"center\",\n fn: ({ x, rects }) => {\n const noGapInBetween =\n x === 0 || x + rects.floating.width === window.innerWidth;\n const isMobileScreen = window.innerWidth < mobileBreakpoint;\n return {\n x:\n noGapInBetween && isMobileScreen\n ? (window.innerWidth - rects.floating.width) / 2\n : x,\n };\n },\n };\n const { refs, floatingStyles, context } = useFloating({\n open: isOpen,\n onOpenChange: (open, _event, reason) => {\n if (reason === \"escape-key\") {\n onDismiss?.();\n } else if (open && !isOpen) {\n onOpen?.();\n } else if (!open && isOpen) {\n onClose?.(reason);\n }\n },\n whileElementsMounted: autoUpdate,\n placement: getFloatingPlacement(alignment),\n middleware: [\n offset(dropdownOffset),\n flip(),\n shift({\n limiter: limitShift(),\n }),\n size({\n // shrink to fit available vertical space\n apply({ availableHeight, elements }) {\n if (\n !fitAvailableHeight ||\n availableHeight >= elements.floating.scrollHeight\n ) {\n // reset this so that dropdown can expand as needed\n elements.floating.style.setProperty(\n \"--available-height\",\n \"\"\n );\n return;\n }\n\n elements.floating.style.setProperty(\n \"--available-height\",\n `${Math.max(0, availableHeight)}px`\n );\n },\n }),\n center,\n ],\n });\n const parentZIndex = useFloatingChild();\n\n const { isMounted, styles } = useTransitionStyles(context, {\n initial: { opacity: 0 },\n open: { opacity: 1 },\n duration: 300,\n });\n\n const click = useClick(context, {\n enabled,\n toggle: clickToToggle,\n keyboardHandlers: clickToToggle,\n });\n const dismiss = useDismiss(context, { enabled });\n\n const { getReferenceProps, getFloatingProps } = useInteractions([\n click,\n dismiss,\n ]);\n\n // =========================================================================\n // ON HIDE EFFECT\n // =========================================================================\n const prevIsMounted = usePrevious(isMounted);\n const onHideEvent = useEvent(() => onHide?.());\n\n useEffect(() => {\n if (prevIsMounted && !isMounted) {\n onHideEvent();\n }\n }, [prevIsMounted, isMounted, onHideEvent]);\n\n // =========================================================================\n // RENDER FUNCTIONS\n // =========================================================================\n const dropdownRenderProps = {\n elementWidth: referenceWidth,\n styles: {\n ...styles,\n ...floatingStyles,\n zIndex: customZIndex ?? parentZIndex ?? DEFAULT_Z_INDEX,\n },\n setFloatingRef: refs.setFloating,\n getFloatingProps,\n };\n\n return (\n <>\n <div\n ref={(node) => {\n elementRef.current = node;\n refs.setReference(node);\n }}\n {...getReferenceProps()}\n >\n {renderElement()}\n </div>\n {isMounted && (\n <FloatingPortal root={rootNode}>\n <FloatingFocusManager\n context={context}\n modal={false}\n initialFocus={-1}\n returnFocus={false} // leads to focus trap. parent to handle the final focus state\n >\n <DropdownRenderContext.Provider\n value={dropdownRenderProps}\n >\n {renderDropdown(dropdownRenderProps)}\n </DropdownRenderContext.Provider>\n </FloatingFocusManager>\n </FloatingPortal>\n )}\n </>\n );\n};\n"],"names":["getFloatingPlacement","alignment","DropdownRenderContext","createContext","elementWidth","styles","setFloatingRef","getFloatingProps","enabled","isOpen","onOpen","onClose","onDismiss","onHide","renderElement","renderDropdown","customZIndex","clickToToggle","offset","dropdownOffset","fitAvailableHeight","rootNode","positionRef","theme","useContext","ThemeContext","mobileBreakpoint","Breakpoint","elementRef","useRef","width","referenceWidth","useResizeDetector","targetRef","handleHeight","center","name","fn","x","rects","noGapInBetween","floating","window","innerWidth","isMobileScreen","refs","floatingStyles","context","useFloating","open","onOpenChange","_event","reason","whileElementsMounted","autoUpdate","placement","middleware","flip","shift","limiter","limitShift","size","apply","availableHeight","elements","scrollHeight","style","setProperty","Math","max","parentZIndex","useFloatingChild","isMounted","useTransitionStyles","initial","opacity","duration","click","useClick","toggle","keyboardHandlers","dismiss","useDismiss","getReferenceProps","useInteractions","prevIsMounted","usePrevious","onHideEvent","useEvent","useEffect","dropdownRenderProps","zIndex","_a","setFloating","_jsxs","_jsx","Object","assign","ref","node","current","setReference","children","FloatingPortal","root","FloatingFocusManager","modal","initialFocus","returnFocus","Provider","value"],"mappings":"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"}
|