@lifesg/react-design-system 3.4.0 → 3.5.0-canary.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/cjs/e-signature/e-signature-canvas.js +1 -1
  2. package/cjs/e-signature/e-signature-canvas.js.map +1 -1
  3. package/cjs/e-signature/e-signature.styles.js +19 -15
  4. package/cjs/e-signature/e-signature.styles.js.map +1 -1
  5. package/cjs/file-download/file-list-card/file-list-card.styles.js +1 -1
  6. package/cjs/file-download/file-list-card/file-list-card.styles.js.map +1 -1
  7. package/cjs/file-upload/file-item-edit.js +1 -1
  8. package/cjs/file-upload/file-item-edit.js.map +1 -1
  9. package/cjs/file-upload/file-item-edit.styles.js +12 -7
  10. package/cjs/file-upload/file-item-edit.styles.js.map +1 -1
  11. package/cjs/file-upload/file-list-item/file-list-item.js +1 -1
  12. package/cjs/file-upload/file-list-item/file-list-item.js.map +1 -1
  13. package/cjs/file-upload/file-list-item/file-list-item.styles.js +74 -52
  14. package/cjs/file-upload/file-list-item/file-list-item.styles.js.map +1 -1
  15. package/cjs/file-upload/file-list.js +1 -1
  16. package/cjs/file-upload/file-list.js.map +1 -1
  17. package/cjs/file-upload/file-list.styles.js +4 -11
  18. package/cjs/file-upload/file-list.styles.js.map +1 -1
  19. package/cjs/file-upload/file-upload.js +1 -1
  20. package/cjs/file-upload/file-upload.js.map +1 -1
  21. package/cjs/footer/footer-helper.js +1 -1
  22. package/cjs/footer/footer-helper.js.map +1 -1
  23. package/cjs/form/form-label.style.js +11 -8
  24. package/cjs/form/form-label.style.js.map +1 -1
  25. package/cjs/index.js +1 -1
  26. package/cjs/navbar/drawer.js +1 -1
  27. package/cjs/navbar/drawer.js.map +1 -1
  28. package/cjs/navbar/navbar-logo-data.js +1 -1
  29. package/cjs/navbar/navbar-logo-data.js.map +1 -1
  30. package/cjs/navbar/navbar.js +1 -1
  31. package/cjs/navbar/navbar.js.map +1 -1
  32. package/cjs/shared/internal-calendar/calendar-manager.style.js +18 -17
  33. package/cjs/shared/internal-calendar/calendar-manager.style.js.map +1 -1
  34. package/cjs/theme/colour-primitive/specs/toteboard-colour-set.js +2 -0
  35. package/cjs/theme/colour-primitive/specs/toteboard-colour-set.js.map +1 -0
  36. package/cjs/theme/colour-primitive/theme-helper.js +1 -1
  37. package/cjs/theme/colour-primitive/theme-helper.js.map +1 -1
  38. package/cjs/theme/colour-semantic/theme-helper.js +1 -1
  39. package/cjs/theme/colour-semantic/theme-helper.js.map +1 -1
  40. package/cjs/theme/font/specs/toteboard-font-set.js +2 -0
  41. package/cjs/theme/font/specs/toteboard-font-set.js.map +1 -0
  42. package/cjs/theme/font/theme-helper.js +1 -1
  43. package/cjs/theme/font/theme-helper.js.map +1 -1
  44. package/cjs/theme/font-spec/specs/bookingsg-font-spec-set.js +1 -1
  45. package/cjs/theme/font-spec/specs/bookingsg-font-spec-set.js.map +1 -1
  46. package/cjs/theme/font-spec/specs/default-font-spec-set.js +1 -1
  47. package/cjs/theme/font-spec/specs/default-font-spec-set.js.map +1 -1
  48. package/cjs/theme/font-spec/specs/sgw-digital-lobby-font-spec-set.js +1 -1
  49. package/cjs/theme/font-spec/specs/sgw-digital-lobby-font-spec-set.js.map +1 -1
  50. package/cjs/theme/font-spec/specs/toteboard-font-spec-set.js +2 -0
  51. package/cjs/theme/font-spec/specs/toteboard-font-spec-set.js.map +1 -0
  52. package/cjs/theme/font-spec/theme-helper.js +1 -1
  53. package/cjs/theme/font-spec/theme-helper.js.map +1 -1
  54. package/cjs/theme/index.js +1 -1
  55. package/cjs/theme/index.js.map +1 -1
  56. package/cjs/time-range-picker/combobox-picker/combobox-picker.js +1 -1
  57. package/cjs/time-range-picker/combobox-picker/combobox-picker.js.map +1 -1
  58. package/cjs/time-range-picker/common.styles.js +7 -3
  59. package/cjs/time-range-picker/common.styles.js.map +1 -1
  60. package/cjs/time-range-picker/dial-picker/dial-picker.js +1 -1
  61. package/cjs/time-range-picker/dial-picker/dial-picker.js.map +1 -1
  62. package/cjs/timepicker/timepicker.styles.js +7 -3
  63. package/cjs/timepicker/timepicker.styles.js.map +1 -1
  64. package/cjs/typography/typography.styles.js +6 -6
  65. package/cjs/typography/typography.styles.js.map +1 -1
  66. package/cjs/util/merge-refs.js +1 -1
  67. package/cjs/util/merge-refs.js.map +1 -1
  68. package/e-signature/e-signature-canvas.js +1 -1
  69. package/e-signature/e-signature-canvas.js.map +1 -1
  70. package/e-signature/e-signature.styles.js +20 -16
  71. package/e-signature/e-signature.styles.js.map +1 -1
  72. package/file-download/file-list-card/file-list-card.styles.js +1 -1
  73. package/file-download/file-list-card/file-list-card.styles.js.map +1 -1
  74. package/file-upload/file-item-edit.d.ts +4 -1
  75. package/file-upload/file-item-edit.js +1 -1
  76. package/file-upload/file-item-edit.js.map +1 -1
  77. package/file-upload/file-item-edit.styles.js +21 -16
  78. package/file-upload/file-item-edit.styles.js.map +1 -1
  79. package/file-upload/file-list-item/file-list-item.d.ts +3 -1
  80. package/file-upload/file-list-item/file-list-item.js +1 -1
  81. package/file-upload/file-list-item/file-list-item.js.map +1 -1
  82. package/file-upload/file-list-item/file-list-item.styles.d.ts +14 -0
  83. package/file-upload/file-list-item/file-list-item.styles.js +67 -45
  84. package/file-upload/file-list-item/file-list-item.styles.js.map +1 -1
  85. package/file-upload/file-list.d.ts +3 -0
  86. package/file-upload/file-list.js +1 -1
  87. package/file-upload/file-list.js.map +1 -1
  88. package/file-upload/file-list.styles.js +4 -11
  89. package/file-upload/file-list.styles.js.map +1 -1
  90. package/file-upload/file-upload.d.ts +1 -1
  91. package/file-upload/file-upload.js +1 -1
  92. package/file-upload/file-upload.js.map +1 -1
  93. package/file-upload/types.d.ts +5 -0
  94. package/footer/footer-helper.js +1 -1
  95. package/footer/footer-helper.js.map +1 -1
  96. package/form/form-label.style.js +12 -9
  97. package/form/form-label.style.js.map +1 -1
  98. package/index.js +1 -1
  99. package/navbar/drawer.js +1 -1
  100. package/navbar/drawer.js.map +1 -1
  101. package/navbar/navbar-logo-data.js +1 -1
  102. package/navbar/navbar-logo-data.js.map +1 -1
  103. package/navbar/navbar.js +1 -1
  104. package/navbar/navbar.js.map +1 -1
  105. package/package.json +1 -1
  106. package/shared/internal-calendar/calendar-manager.style.js +18 -17
  107. package/shared/internal-calendar/calendar-manager.style.js.map +1 -1
  108. package/theme/colour-primitive/specs/toteboard-colour-set.d.ts +2 -0
  109. package/theme/colour-primitive/specs/toteboard-colour-set.js +2 -0
  110. package/theme/colour-primitive/specs/toteboard-colour-set.js.map +1 -0
  111. package/theme/colour-primitive/theme-helper.js +1 -1
  112. package/theme/colour-primitive/theme-helper.js.map +1 -1
  113. package/theme/colour-semantic/theme-helper.js +1 -1
  114. package/theme/colour-semantic/theme-helper.js.map +1 -1
  115. package/theme/font/specs/toteboard-font-set.d.ts +2 -0
  116. package/theme/font/specs/toteboard-font-set.js +2 -0
  117. package/theme/font/specs/toteboard-font-set.js.map +1 -0
  118. package/theme/font/theme-helper.js +1 -1
  119. package/theme/font/theme-helper.js.map +1 -1
  120. package/theme/font-spec/specs/bookingsg-font-spec-set.js +1 -1
  121. package/theme/font-spec/specs/bookingsg-font-spec-set.js.map +1 -1
  122. package/theme/font-spec/specs/default-font-spec-set.js +1 -1
  123. package/theme/font-spec/specs/default-font-spec-set.js.map +1 -1
  124. package/theme/font-spec/specs/sgw-digital-lobby-font-spec-set.js +1 -1
  125. package/theme/font-spec/specs/sgw-digital-lobby-font-spec-set.js.map +1 -1
  126. package/theme/font-spec/specs/toteboard-font-spec-set.d.ts +2 -0
  127. package/theme/font-spec/specs/toteboard-font-spec-set.js +2 -0
  128. package/theme/font-spec/specs/toteboard-font-spec-set.js.map +1 -0
  129. package/theme/font-spec/theme-helper.js +1 -1
  130. package/theme/font-spec/theme-helper.js.map +1 -1
  131. package/theme/index.d.ts +19 -0
  132. package/theme/index.js +1 -1
  133. package/theme/index.js.map +1 -1
  134. package/theme/types.d.ts +3 -3
  135. package/time-range-picker/combobox-picker/combobox-picker.js +1 -1
  136. package/time-range-picker/combobox-picker/combobox-picker.js.map +1 -1
  137. package/time-range-picker/common.styles.d.ts +6 -2
  138. package/time-range-picker/common.styles.js +9 -5
  139. package/time-range-picker/common.styles.js.map +1 -1
  140. package/time-range-picker/dial-picker/dial-picker.js +1 -1
  141. package/time-range-picker/dial-picker/dial-picker.js.map +1 -1
  142. package/timepicker/timepicker.styles.js +7 -3
  143. package/timepicker/timepicker.styles.js.map +1 -1
  144. package/typography/typography.styles.js +4 -4
  145. package/typography/typography.styles.js.map +1 -1
  146. package/util/merge-refs.d.ts +1 -1
  147. package/util/merge-refs.js +1 -1
  148. package/util/merge-refs.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/theme/index.ts"],"sourcesContent":["import { BorderUtilValues } from \"./border-util/theme-helper\";\nimport { BorderValues } from \"./border/theme-helper\";\nimport { MediaQuery as MediaQueryValues } from \"./breakpoint/media-query-helper\";\nimport { BreakpointValues } from \"./breakpoint/theme-helper\";\nimport { PrimitiveColour } from \"./colour-primitive/theme-helper\";\nimport { ColourSemantic } from \"./colour-semantic/theme-helper\";\nimport { ThemeButton, ThemeNavbar } from \"./components/theme-helper\";\nimport { FontSpecValues } from \"./font-spec/theme-helper\";\nimport { FontValues } from \"./font/theme-helper\";\nimport { MotionValues } from \"./motion/theme-helper\";\nimport { RadiusValues } from \"./radius/theme-helper\";\nimport { ShadowValues } from \"./shadow/theme-helper\";\nimport { SpacingValues } from \"./spacing/theme-helper\";\nimport { ThemeSpec } from \"./types\";\nimport { createThemeWithColourMode } from \"./use-theme-mode\";\n\nexport * from \"./types\";\nexport * from \"./ds-theme-provider\";\nexport * from \"./use-theme-mode\";\n\n// =============================================================================\n// TOKENS\n// =============================================================================\n\nexport const Colour = {\n ...ColourSemantic,\n Primitive: PrimitiveColour,\n};\n\nexport const Font = {\n ...FontValues,\n Spec: FontSpecValues,\n};\n\nexport const Motion = MotionValues;\n\nexport const Border = {\n ...BorderValues,\n Util: BorderUtilValues,\n};\n\nexport const Spacing = SpacingValues;\n\nexport const Radius = RadiusValues;\n\nexport const Shadow = ShadowValues;\n\nexport const Breakpoint = BreakpointValues;\n\nexport const MediaQuery = MediaQueryValues;\n\nexport const ThemeComponent = {\n Button: ThemeButton,\n Navbar: ThemeNavbar,\n};\n\n// =============================================================================\n// THEME PRESETS\n// =============================================================================\n\n// Theme definitions\nconst LifeSGThemeBase: ThemeSpec = {\n colourScheme: \"lifesg\",\n fontScheme: \"default\",\n motionScheme: \"default\",\n borderScheme: \"default\",\n spacingScheme: \"default\",\n radiusScheme: \"default\",\n shadowScheme: \"default\",\n breakpointScheme: \"default\",\n resourceScheme: \"lifesg\",\n componentScheme: \"lifesg\",\n _v2: {\n colorScheme: \"base\",\n textStyleScheme: \"base\",\n designTokenScheme: \"base\",\n resourceScheme: \"base\",\n },\n};\n\nconst BookingSGThemeBase: ThemeSpec = {\n colourScheme: \"bookingsg\",\n fontScheme: \"bookingsg\",\n motionScheme: \"default\",\n borderScheme: \"default\",\n spacingScheme: \"default\",\n radiusScheme: \"default\",\n shadowScheme: \"default\",\n breakpointScheme: \"default\",\n resourceScheme: \"bookingsg\",\n _v2: {\n colorScheme: \"bookingsg\",\n textStyleScheme: \"base\",\n designTokenScheme: \"base\",\n resourceScheme: \"bookingsg\",\n },\n};\n\nconst CCubeThemeBase: ThemeSpec = {\n colourScheme: \"ccube\",\n fontScheme: \"default\",\n motionScheme: \"default\",\n borderScheme: \"default\",\n spacingScheme: \"default\",\n radiusScheme: \"default\",\n shadowScheme: \"default\",\n breakpointScheme: \"default\",\n resourceScheme: \"ccube\",\n _v2: {\n colorScheme: \"ccube\",\n textStyleScheme: \"base\",\n designTokenScheme: \"base\",\n resourceScheme: \"ccube\",\n },\n};\n\nconst CareerCompassThemeBase: ThemeSpec = {\n colourScheme: \"careercompass\",\n fontScheme: \"bookingsg\",\n motionScheme: \"default\",\n borderScheme: \"default\",\n spacingScheme: \"default\",\n radiusScheme: \"default\",\n shadowScheme: \"default\",\n breakpointScheme: \"default\",\n resourceScheme: \"careercompass\",\n componentScheme: \"default\",\n};\n\nconst MyLegacyThemeBase: ThemeSpec = {\n colourScheme: \"mylegacy\",\n fontScheme: \"mylegacy\",\n motionScheme: \"default\",\n borderScheme: \"default\",\n spacingScheme: \"default\",\n radiusScheme: \"default\",\n shadowScheme: \"default\",\n breakpointScheme: \"default\",\n resourceScheme: \"mylegacy\",\n _v2: {\n colorScheme: \"mylegacy\",\n textStyleScheme: \"base\",\n designTokenScheme: \"base\",\n resourceScheme: \"mylegacy\",\n },\n};\n\nconst RBSThemeBase: ThemeSpec = {\n colourScheme: \"rbs\",\n fontScheme: \"default\",\n motionScheme: \"default\",\n borderScheme: \"default\",\n spacingScheme: \"default\",\n radiusScheme: \"default\",\n shadowScheme: \"default\",\n breakpointScheme: \"default\",\n resourceScheme: \"rbs\",\n _v2: {\n colorScheme: \"rbs\",\n textStyleScheme: \"base\",\n designTokenScheme: \"rbs\",\n resourceScheme: \"rbs\",\n },\n};\n\nconst OneServiceThemeBase: ThemeSpec = {\n colourScheme: \"oneservice\",\n fontScheme: \"oneservice\",\n motionScheme: \"default\",\n borderScheme: \"default\",\n spacingScheme: \"default\",\n radiusScheme: \"default\",\n shadowScheme: \"default\",\n breakpointScheme: \"default\",\n resourceScheme: \"oneservice\",\n};\n\nconst PAThemeBase: ThemeSpec = {\n colourScheme: \"pa\",\n fontScheme: \"pa\",\n motionScheme: \"default\",\n borderScheme: \"default\",\n spacingScheme: \"default\",\n radiusScheme: \"default\",\n shadowScheme: \"default\",\n breakpointScheme: \"default\",\n resourceScheme: \"pa\",\n componentScheme: \"pa\",\n};\n\nconst A11yPlaygroundThemeBase: ThemeSpec = {\n colourScheme: \"a11yplayground\",\n fontScheme: \"a11yplayground\",\n motionScheme: \"default\",\n borderScheme: \"default\",\n spacingScheme: \"default\",\n radiusScheme: \"default\",\n shadowScheme: \"default\",\n breakpointScheme: \"default\",\n resourceScheme: \"a11yplayground\",\n componentScheme: \"a11yplayground\",\n};\n\nexport const SupportGoWhereThemeBase: ThemeSpec = {\n colourScheme: \"supportgowhere\",\n fontScheme: \"supportgowhere\",\n motionScheme: \"default\",\n borderScheme: \"default\",\n spacingScheme: \"default\",\n radiusScheme: \"default\",\n shadowScheme: \"default\",\n breakpointScheme: \"default\",\n resourceScheme: \"supportgowhere\",\n componentScheme: \"default\",\n};\n\nexport const SGWDigitalLobbyThemeBase: ThemeSpec = {\n colourScheme: \"sgwdigitallobby\",\n fontScheme: \"sgwdigitallobby\",\n motionScheme: \"default\",\n borderScheme: \"default\",\n spacingScheme: \"default\",\n radiusScheme: \"default\",\n shadowScheme: \"default\",\n breakpointScheme: \"default\",\n resourceScheme: \"supportgowhere\",\n componentScheme: \"default\",\n};\n\nconst IMDAThemeBase: ThemeSpec = {\n colourScheme: \"imda\",\n fontScheme: \"imda\",\n motionScheme: \"default\",\n borderScheme: \"default\",\n spacingScheme: \"default\",\n radiusScheme: \"default\",\n shadowScheme: \"default\",\n breakpointScheme: \"default\",\n resourceScheme: \"imda\",\n componentScheme: \"default\",\n};\n\nconst SPFThemeBase: ThemeSpec = {\n colourScheme: \"spf\",\n fontScheme: \"spf\",\n motionScheme: \"default\",\n borderScheme: \"default\",\n spacingScheme: \"default\",\n radiusScheme: \"spf\",\n shadowScheme: \"default\",\n breakpointScheme: \"default\",\n resourceScheme: \"spf\",\n componentScheme: \"spf\",\n};\n\nconst SMGSThemeBase: ThemeSpec = {\n colourScheme: \"smgs\",\n fontScheme: \"bookingsg\",\n motionScheme: \"default\",\n borderScheme: \"default\",\n spacingScheme: \"default\",\n radiusScheme: \"default\",\n shadowScheme: \"default\",\n breakpointScheme: \"default\",\n resourceScheme: \"smgs\",\n componentScheme: \"smgs\",\n};\n\n// =============================================================================\n// THEME COLLECTIONS\n// =============================================================================\n\n// Theme presets with backward compatibility and light/dark variants\nexport const LifeSGTheme = {\n ...LifeSGThemeBase,\n light: createThemeWithColourMode(LifeSGThemeBase, \"light\"),\n dark: createThemeWithColourMode(LifeSGThemeBase, \"dark\"),\n};\n\nexport const BookingSGTheme = {\n ...BookingSGThemeBase,\n light: createThemeWithColourMode(BookingSGThemeBase, \"light\"),\n dark: createThemeWithColourMode(BookingSGThemeBase, \"dark\"),\n};\n\nexport const CCubeTheme = {\n ...CCubeThemeBase,\n light: createThemeWithColourMode(CCubeThemeBase, \"light\"),\n dark: createThemeWithColourMode(CCubeThemeBase, \"dark\"),\n};\n\nexport const CareerCompassTheme = {\n ...CareerCompassThemeBase,\n light: createThemeWithColourMode(CareerCompassThemeBase, \"light\"),\n dark: createThemeWithColourMode(CareerCompassThemeBase, \"dark\"),\n};\n\nexport const MyLegacyTheme = {\n ...MyLegacyThemeBase,\n light: createThemeWithColourMode(MyLegacyThemeBase, \"light\"),\n dark: createThemeWithColourMode(MyLegacyThemeBase, \"dark\"),\n};\n\nexport const RBSTheme = {\n ...RBSThemeBase,\n light: createThemeWithColourMode(RBSThemeBase, \"light\"),\n dark: createThemeWithColourMode(RBSThemeBase, \"dark\"),\n};\n\nexport const OneServiceTheme = {\n ...OneServiceThemeBase,\n light: createThemeWithColourMode(OneServiceThemeBase, \"light\"),\n dark: createThemeWithColourMode(OneServiceThemeBase, \"dark\"),\n};\n\nexport const PATheme = {\n ...PAThemeBase,\n light: createThemeWithColourMode(PAThemeBase, \"light\"),\n dark: createThemeWithColourMode(PAThemeBase, \"dark\"),\n};\n\nexport const A11yPlaygroundTheme = {\n ...A11yPlaygroundThemeBase,\n light: createThemeWithColourMode(A11yPlaygroundThemeBase, \"light\"),\n dark: createThemeWithColourMode(A11yPlaygroundThemeBase, \"dark\"),\n};\n\nexport const SupportGoWhereTheme = {\n ...SupportGoWhereThemeBase,\n light: createThemeWithColourMode(SupportGoWhereThemeBase, \"light\"),\n dark: createThemeWithColourMode(SupportGoWhereThemeBase, \"dark\"),\n};\n\nexport const SGWDigitalLobbyTheme = {\n ...SGWDigitalLobbyThemeBase,\n light: createThemeWithColourMode(SGWDigitalLobbyThemeBase, \"light\"),\n dark: createThemeWithColourMode(SGWDigitalLobbyThemeBase, \"dark\"),\n};\n\nexport const IMDATheme = {\n ...IMDAThemeBase,\n light: createThemeWithColourMode(IMDAThemeBase, \"light\"),\n dark: createThemeWithColourMode(IMDAThemeBase, \"dark\"),\n};\n\nexport const SPFTheme = {\n ...SPFThemeBase,\n light: createThemeWithColourMode(SPFThemeBase, \"light\"),\n dark: createThemeWithColourMode(SPFThemeBase, \"dark\"),\n};\n\nexport const SMGSTheme = {\n ...SMGSThemeBase,\n light: createThemeWithColourMode(SMGSThemeBase, \"light\"),\n dark: createThemeWithColourMode(SMGSThemeBase, \"dark\"),\n};\n"],"names":["Colour","Object","assign","ColourSemantic","Primitive","PrimitiveColour","Font","FontValues","Spec","FontSpecValues","Motion","MotionValues","Border","BorderValues","Util","BorderUtilValues","Spacing","SpacingValues","Radius","RadiusValues","Shadow","ShadowValues","Breakpoint","BreakpointValues","MediaQuery","MediaQueryValues","ThemeComponent","Button","ThemeButton","Navbar","ThemeNavbar","LifeSGThemeBase","colourScheme","fontScheme","motionScheme","borderScheme","spacingScheme","radiusScheme","shadowScheme","breakpointScheme","resourceScheme","componentScheme","_v2","colorScheme","textStyleScheme","designTokenScheme","BookingSGThemeBase","CCubeThemeBase","CareerCompassThemeBase","MyLegacyThemeBase","RBSThemeBase","OneServiceThemeBase","PAThemeBase","A11yPlaygroundThemeBase","SupportGoWhereThemeBase","SGWDigitalLobbyThemeBase","IMDAThemeBase","SPFThemeBase","SMGSThemeBase","LifeSGTheme","light","createThemeWithColourMode","dark","BookingSGTheme","CCubeTheme","CareerCompassTheme","MyLegacyTheme","RBSTheme","OneServiceTheme","PATheme","A11yPlaygroundTheme","SupportGoWhereTheme","SGWDigitalLobbyTheme","IMDATheme","SPFTheme","SMGSTheme"],"mappings":"o9BAwBO,MAAMA,EAAMC,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EACZC,IACHC,UAAWC,IAGFC,EAAIL,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EACVK,IACHC,KAAMC,IAGGC,EAASC,EAETC,EAAMX,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EACZW,IACHC,KAAMC,IAGGC,EAAUC,EAEVC,EAASC,EAETC,EAASC,EAETC,EAAaC,EAEbC,EAAaC,EAEbC,EAAiB,CAC1BC,OAAQC,EACRC,OAAQC,GAQNC,EAA6B,CAC/BC,aAAc,SACdC,WAAY,UACZC,aAAc,UACdC,aAAc,UACdC,cAAe,UACfC,aAAc,UACdC,aAAc,UACdC,iBAAkB,UAClBC,eAAgB,SAChBC,gBAAiB,SACjBC,IAAK,CACDC,YAAa,OACbC,gBAAiB,OACjBC,kBAAmB,OACnBL,eAAgB,SAIlBM,EAAgC,CAClCd,aAAc,YACdC,WAAY,YACZC,aAAc,UACdC,aAAc,UACdC,cAAe,UACfC,aAAc,UACdC,aAAc,UACdC,iBAAkB,UAClBC,eAAgB,YAChBE,IAAK,CACDC,YAAa,YACbC,gBAAiB,OACjBC,kBAAmB,OACnBL,eAAgB,cAIlBO,EAA4B,CAC9Bf,aAAc,QACdC,WAAY,UACZC,aAAc,UACdC,aAAc,UACdC,cAAe,UACfC,aAAc,UACdC,aAAc,UACdC,iBAAkB,UAClBC,eAAgB,QAChBE,IAAK,CACDC,YAAa,QACbC,gBAAiB,OACjBC,kBAAmB,OACnBL,eAAgB,UAIlBQ,EAAoC,CACtChB,aAAc,gBACdC,WAAY,YACZC,aAAc,UACdC,aAAc,UACdC,cAAe,UACfC,aAAc,UACdC,aAAc,UACdC,iBAAkB,UAClBC,eAAgB,gBAChBC,gBAAiB,WAGfQ,EAA+B,CACjCjB,aAAc,WACdC,WAAY,WACZC,aAAc,UACdC,aAAc,UACdC,cAAe,UACfC,aAAc,UACdC,aAAc,UACdC,iBAAkB,UAClBC,eAAgB,WAChBE,IAAK,CACDC,YAAa,WACbC,gBAAiB,OACjBC,kBAAmB,OACnBL,eAAgB,aAIlBU,EAA0B,CAC5BlB,aAAc,MACdC,WAAY,UACZC,aAAc,UACdC,aAAc,UACdC,cAAe,UACfC,aAAc,UACdC,aAAc,UACdC,iBAAkB,UAClBC,eAAgB,MAChBE,IAAK,CACDC,YAAa,MACbC,gBAAiB,OACjBC,kBAAmB,MACnBL,eAAgB,QAIlBW,EAAiC,CACnCnB,aAAc,aACdC,WAAY,aACZC,aAAc,UACdC,aAAc,UACdC,cAAe,UACfC,aAAc,UACdC,aAAc,UACdC,iBAAkB,UAClBC,eAAgB,cAGdY,EAAyB,CAC3BpB,aAAc,KACdC,WAAY,KACZC,aAAc,UACdC,aAAc,UACdC,cAAe,UACfC,aAAc,UACdC,aAAc,UACdC,iBAAkB,UAClBC,eAAgB,KAChBC,gBAAiB,MAGfY,EAAqC,CACvCrB,aAAc,iBACdC,WAAY,iBACZC,aAAc,UACdC,aAAc,UACdC,cAAe,UACfC,aAAc,UACdC,aAAc,UACdC,iBAAkB,UAClBC,eAAgB,iBAChBC,gBAAiB,kBAGRa,EAAqC,CAC9CtB,aAAc,iBACdC,WAAY,iBACZC,aAAc,UACdC,aAAc,UACdC,cAAe,UACfC,aAAc,UACdC,aAAc,UACdC,iBAAkB,UAClBC,eAAgB,iBAChBC,gBAAiB,WAGRc,EAAsC,CAC/CvB,aAAc,kBACdC,WAAY,kBACZC,aAAc,UACdC,aAAc,UACdC,cAAe,UACfC,aAAc,UACdC,aAAc,UACdC,iBAAkB,UAClBC,eAAgB,iBAChBC,gBAAiB,WAGfe,EAA2B,CAC7BxB,aAAc,OACdC,WAAY,OACZC,aAAc,UACdC,aAAc,UACdC,cAAe,UACfC,aAAc,UACdC,aAAc,UACdC,iBAAkB,UAClBC,eAAgB,OAChBC,gBAAiB,WAGfgB,EAA0B,CAC5BzB,aAAc,MACdC,WAAY,MACZC,aAAc,UACdC,aAAc,UACdC,cAAe,UACfC,aAAc,MACdC,aAAc,UACdC,iBAAkB,UAClBC,eAAgB,MAChBC,gBAAiB,OAGfiB,EAA2B,CAC7B1B,aAAc,OACdC,WAAY,YACZC,aAAc,UACdC,aAAc,UACdC,cAAe,UACfC,aAAc,UACdC,aAAc,UACdC,iBAAkB,UAClBC,eAAgB,OAChBC,gBAAiB,QAQRkB,EAAW1D,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EACjB6B,IACH6B,MAAOC,EAA0B9B,EAAiB,SAClD+B,KAAMD,EAA0B9B,EAAiB,UAGxCgC,EAAc9D,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EACpB4C,IACHc,MAAOC,EAA0Bf,EAAoB,SACrDgB,KAAMD,EAA0Bf,EAAoB,UAG3CkB,EAAU/D,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EAChB6C,IACHa,MAAOC,EAA0Bd,EAAgB,SACjDe,KAAMD,EAA0Bd,EAAgB,UAGvCkB,EAAkBhE,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EACxB8C,IACHY,MAAOC,EAA0Bb,EAAwB,SACzDc,KAAMD,EAA0Bb,EAAwB,UAG/CkB,EAAajE,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EACnB+C,IACHW,MAAOC,EAA0BZ,EAAmB,SACpDa,KAAMD,EAA0BZ,EAAmB,UAG1CkB,EAAQlE,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EACdgD,IACHU,MAAOC,EAA0BX,EAAc,SAC/CY,KAAMD,EAA0BX,EAAc,UAGrCkB,EAAenE,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EACrBiD,IACHS,MAAOC,EAA0BV,EAAqB,SACtDW,KAAMD,EAA0BV,EAAqB,UAG5CkB,EAAOpE,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EACbkD,IACHQ,MAAOC,EAA0BT,EAAa,SAC9CU,KAAMD,EAA0BT,EAAa,UAGpCkB,EAAmBrE,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EACzBmD,IACHO,MAAOC,EAA0BR,EAAyB,SAC1DS,KAAMD,EAA0BR,EAAyB,UAGhDkB,EAAmBtE,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EACzBoD,IACHM,MAAOC,EAA0BP,EAAyB,SAC1DQ,KAAMD,EAA0BP,EAAyB,UAGhDkB,EAAoBvE,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EAC1BqD,IACHK,MAAOC,EAA0BN,EAA0B,SAC3DO,KAAMD,EAA0BN,EAA0B,UAGjDkB,EAASxE,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EACfsD,IACHI,MAAOC,EAA0BL,EAAe,SAChDM,KAAMD,EAA0BL,EAAe,UAGtCkB,EAAQzE,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EACduD,IACHG,MAAOC,EAA0BJ,EAAc,SAC/CK,KAAMD,EAA0BJ,EAAc,UAGrCkB,EAAS1E,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EACfwD,IACHE,MAAOC,EAA0BH,EAAe,SAChDI,KAAMD,EAA0BH,EAAe"}
1
+ {"version":3,"file":"index.js","sources":["../../src/theme/index.ts"],"sourcesContent":["import { BorderUtilValues } from \"./border-util/theme-helper\";\nimport { BorderValues } from \"./border/theme-helper\";\nimport { MediaQuery as MediaQueryValues } from \"./breakpoint/media-query-helper\";\nimport { BreakpointValues } from \"./breakpoint/theme-helper\";\nimport { PrimitiveColour } from \"./colour-primitive/theme-helper\";\nimport { ColourSemantic } from \"./colour-semantic/theme-helper\";\nimport { ThemeButton, ThemeNavbar } from \"./components/theme-helper\";\nimport { FontSpecValues } from \"./font-spec/theme-helper\";\nimport { FontValues } from \"./font/theme-helper\";\nimport { MotionValues } from \"./motion/theme-helper\";\nimport { RadiusValues } from \"./radius/theme-helper\";\nimport { ShadowValues } from \"./shadow/theme-helper\";\nimport { SpacingValues } from \"./spacing/theme-helper\";\nimport { ThemeSpec } from \"./types\";\nimport { createThemeWithColourMode } from \"./use-theme-mode\";\n\nexport * from \"./types\";\nexport * from \"./ds-theme-provider\";\nexport * from \"./use-theme-mode\";\n\n// =============================================================================\n// TOKENS\n// =============================================================================\n\nexport const Colour = {\n ...ColourSemantic,\n Primitive: PrimitiveColour,\n};\n\nexport const Font = {\n ...FontValues,\n Spec: FontSpecValues,\n};\n\nexport const Motion = MotionValues;\n\nexport const Border = {\n ...BorderValues,\n Util: BorderUtilValues,\n};\n\nexport const Spacing = SpacingValues;\n\nexport const Radius = RadiusValues;\n\nexport const Shadow = ShadowValues;\n\nexport const Breakpoint = BreakpointValues;\n\nexport const MediaQuery = MediaQueryValues;\n\nexport const ThemeComponent = {\n Button: ThemeButton,\n Navbar: ThemeNavbar,\n};\n\n// =============================================================================\n// THEME PRESETS\n// =============================================================================\n\n// Theme definitions\nconst LifeSGThemeBase: ThemeSpec = {\n colourScheme: \"lifesg\",\n fontScheme: \"default\",\n motionScheme: \"default\",\n borderScheme: \"default\",\n spacingScheme: \"default\",\n radiusScheme: \"default\",\n shadowScheme: \"default\",\n breakpointScheme: \"default\",\n resourceScheme: \"lifesg\",\n componentScheme: \"lifesg\",\n _v2: {\n colorScheme: \"base\",\n textStyleScheme: \"base\",\n designTokenScheme: \"base\",\n resourceScheme: \"base\",\n },\n};\n\nconst BookingSGThemeBase: ThemeSpec = {\n colourScheme: \"bookingsg\",\n fontScheme: \"bookingsg\",\n motionScheme: \"default\",\n borderScheme: \"default\",\n spacingScheme: \"default\",\n radiusScheme: \"default\",\n shadowScheme: \"default\",\n breakpointScheme: \"default\",\n resourceScheme: \"bookingsg\",\n _v2: {\n colorScheme: \"bookingsg\",\n textStyleScheme: \"base\",\n designTokenScheme: \"base\",\n resourceScheme: \"bookingsg\",\n },\n};\n\nconst CCubeThemeBase: ThemeSpec = {\n colourScheme: \"ccube\",\n fontScheme: \"default\",\n motionScheme: \"default\",\n borderScheme: \"default\",\n spacingScheme: \"default\",\n radiusScheme: \"default\",\n shadowScheme: \"default\",\n breakpointScheme: \"default\",\n resourceScheme: \"ccube\",\n _v2: {\n colorScheme: \"ccube\",\n textStyleScheme: \"base\",\n designTokenScheme: \"base\",\n resourceScheme: \"ccube\",\n },\n};\n\nconst CareerCompassThemeBase: ThemeSpec = {\n colourScheme: \"careercompass\",\n fontScheme: \"bookingsg\",\n motionScheme: \"default\",\n borderScheme: \"default\",\n spacingScheme: \"default\",\n radiusScheme: \"default\",\n shadowScheme: \"default\",\n breakpointScheme: \"default\",\n resourceScheme: \"careercompass\",\n componentScheme: \"default\",\n};\n\nconst MyLegacyThemeBase: ThemeSpec = {\n colourScheme: \"mylegacy\",\n fontScheme: \"mylegacy\",\n motionScheme: \"default\",\n borderScheme: \"default\",\n spacingScheme: \"default\",\n radiusScheme: \"default\",\n shadowScheme: \"default\",\n breakpointScheme: \"default\",\n resourceScheme: \"mylegacy\",\n _v2: {\n colorScheme: \"mylegacy\",\n textStyleScheme: \"base\",\n designTokenScheme: \"base\",\n resourceScheme: \"mylegacy\",\n },\n};\n\nconst RBSThemeBase: ThemeSpec = {\n colourScheme: \"rbs\",\n fontScheme: \"default\",\n motionScheme: \"default\",\n borderScheme: \"default\",\n spacingScheme: \"default\",\n radiusScheme: \"default\",\n shadowScheme: \"default\",\n breakpointScheme: \"default\",\n resourceScheme: \"rbs\",\n _v2: {\n colorScheme: \"rbs\",\n textStyleScheme: \"base\",\n designTokenScheme: \"rbs\",\n resourceScheme: \"rbs\",\n },\n};\n\nconst OneServiceThemeBase: ThemeSpec = {\n colourScheme: \"oneservice\",\n fontScheme: \"oneservice\",\n motionScheme: \"default\",\n borderScheme: \"default\",\n spacingScheme: \"default\",\n radiusScheme: \"default\",\n shadowScheme: \"default\",\n breakpointScheme: \"default\",\n resourceScheme: \"oneservice\",\n};\n\nconst PAThemeBase: ThemeSpec = {\n colourScheme: \"pa\",\n fontScheme: \"pa\",\n motionScheme: \"default\",\n borderScheme: \"default\",\n spacingScheme: \"default\",\n radiusScheme: \"default\",\n shadowScheme: \"default\",\n breakpointScheme: \"default\",\n resourceScheme: \"pa\",\n componentScheme: \"pa\",\n};\n\nconst A11yPlaygroundThemeBase: ThemeSpec = {\n colourScheme: \"a11yplayground\",\n fontScheme: \"a11yplayground\",\n motionScheme: \"default\",\n borderScheme: \"default\",\n spacingScheme: \"default\",\n radiusScheme: \"default\",\n shadowScheme: \"default\",\n breakpointScheme: \"default\",\n resourceScheme: \"a11yplayground\",\n componentScheme: \"a11yplayground\",\n};\n\nexport const SupportGoWhereThemeBase: ThemeSpec = {\n colourScheme: \"supportgowhere\",\n fontScheme: \"supportgowhere\",\n motionScheme: \"default\",\n borderScheme: \"default\",\n spacingScheme: \"default\",\n radiusScheme: \"default\",\n shadowScheme: \"default\",\n breakpointScheme: \"default\",\n resourceScheme: \"supportgowhere\",\n componentScheme: \"default\",\n};\n\nexport const SGWDigitalLobbyThemeBase: ThemeSpec = {\n colourScheme: \"sgwdigitallobby\",\n fontScheme: \"sgwdigitallobby\",\n motionScheme: \"default\",\n borderScheme: \"default\",\n spacingScheme: \"default\",\n radiusScheme: \"default\",\n shadowScheme: \"default\",\n breakpointScheme: \"default\",\n resourceScheme: \"supportgowhere\",\n componentScheme: \"default\",\n};\n\nconst IMDAThemeBase: ThemeSpec = {\n colourScheme: \"imda\",\n fontScheme: \"imda\",\n motionScheme: \"default\",\n borderScheme: \"default\",\n spacingScheme: \"default\",\n radiusScheme: \"default\",\n shadowScheme: \"default\",\n breakpointScheme: \"default\",\n resourceScheme: \"imda\",\n componentScheme: \"default\",\n};\n\nconst SPFThemeBase: ThemeSpec = {\n colourScheme: \"spf\",\n fontScheme: \"spf\",\n motionScheme: \"default\",\n borderScheme: \"default\",\n spacingScheme: \"default\",\n radiusScheme: \"spf\",\n shadowScheme: \"default\",\n breakpointScheme: \"default\",\n resourceScheme: \"spf\",\n componentScheme: \"spf\",\n};\n\nconst SMGSThemeBase: ThemeSpec = {\n colourScheme: \"smgs\",\n fontScheme: \"bookingsg\",\n motionScheme: \"default\",\n borderScheme: \"default\",\n spacingScheme: \"default\",\n radiusScheme: \"default\",\n shadowScheme: \"default\",\n breakpointScheme: \"default\",\n resourceScheme: \"smgs\",\n componentScheme: \"smgs\",\n};\n\nconst ToteBoardThemeBase: ThemeSpec = {\n colourScheme: \"toteboard\",\n fontScheme: \"toteboard\",\n motionScheme: \"default\",\n borderScheme: \"default\",\n spacingScheme: \"default\",\n radiusScheme: \"default\",\n shadowScheme: \"default\",\n breakpointScheme: \"default\",\n resourceScheme: \"toteboard\",\n componentScheme: \"default\",\n};\n\n// =============================================================================\n// THEME COLLECTIONS\n// =============================================================================\n\n// Theme presets with backward compatibility and light/dark variants\nexport const LifeSGTheme = {\n ...LifeSGThemeBase,\n light: createThemeWithColourMode(LifeSGThemeBase, \"light\"),\n dark: createThemeWithColourMode(LifeSGThemeBase, \"dark\"),\n};\n\nexport const BookingSGTheme = {\n ...BookingSGThemeBase,\n light: createThemeWithColourMode(BookingSGThemeBase, \"light\"),\n dark: createThemeWithColourMode(BookingSGThemeBase, \"dark\"),\n};\n\nexport const CCubeTheme = {\n ...CCubeThemeBase,\n light: createThemeWithColourMode(CCubeThemeBase, \"light\"),\n dark: createThemeWithColourMode(CCubeThemeBase, \"dark\"),\n};\n\nexport const CareerCompassTheme = {\n ...CareerCompassThemeBase,\n light: createThemeWithColourMode(CareerCompassThemeBase, \"light\"),\n dark: createThemeWithColourMode(CareerCompassThemeBase, \"dark\"),\n};\n\nexport const MyLegacyTheme = {\n ...MyLegacyThemeBase,\n light: createThemeWithColourMode(MyLegacyThemeBase, \"light\"),\n dark: createThemeWithColourMode(MyLegacyThemeBase, \"dark\"),\n};\n\nexport const RBSTheme = {\n ...RBSThemeBase,\n light: createThemeWithColourMode(RBSThemeBase, \"light\"),\n dark: createThemeWithColourMode(RBSThemeBase, \"dark\"),\n};\n\nexport const OneServiceTheme = {\n ...OneServiceThemeBase,\n light: createThemeWithColourMode(OneServiceThemeBase, \"light\"),\n dark: createThemeWithColourMode(OneServiceThemeBase, \"dark\"),\n};\n\nexport const PATheme = {\n ...PAThemeBase,\n light: createThemeWithColourMode(PAThemeBase, \"light\"),\n dark: createThemeWithColourMode(PAThemeBase, \"dark\"),\n};\n\nexport const A11yPlaygroundTheme = {\n ...A11yPlaygroundThemeBase,\n light: createThemeWithColourMode(A11yPlaygroundThemeBase, \"light\"),\n dark: createThemeWithColourMode(A11yPlaygroundThemeBase, \"dark\"),\n};\n\nexport const SupportGoWhereTheme = {\n ...SupportGoWhereThemeBase,\n light: createThemeWithColourMode(SupportGoWhereThemeBase, \"light\"),\n dark: createThemeWithColourMode(SupportGoWhereThemeBase, \"dark\"),\n};\n\nexport const SGWDigitalLobbyTheme = {\n ...SGWDigitalLobbyThemeBase,\n light: createThemeWithColourMode(SGWDigitalLobbyThemeBase, \"light\"),\n dark: createThemeWithColourMode(SGWDigitalLobbyThemeBase, \"dark\"),\n};\n\nexport const IMDATheme = {\n ...IMDAThemeBase,\n light: createThemeWithColourMode(IMDAThemeBase, \"light\"),\n dark: createThemeWithColourMode(IMDAThemeBase, \"dark\"),\n};\n\nexport const SPFTheme = {\n ...SPFThemeBase,\n light: createThemeWithColourMode(SPFThemeBase, \"light\"),\n dark: createThemeWithColourMode(SPFThemeBase, \"dark\"),\n};\n\nexport const SMGSTheme = {\n ...SMGSThemeBase,\n light: createThemeWithColourMode(SMGSThemeBase, \"light\"),\n dark: createThemeWithColourMode(SMGSThemeBase, \"dark\"),\n};\n\nexport const ToteBoardTheme = {\n ...ToteBoardThemeBase,\n light: createThemeWithColourMode(ToteBoardThemeBase, \"light\"),\n dark: createThemeWithColourMode(ToteBoardThemeBase, \"dark\"),\n};\n"],"names":["Colour","Object","assign","ColourSemantic","Primitive","PrimitiveColour","Font","FontValues","Spec","FontSpecValues","Motion","MotionValues","Border","BorderValues","Util","BorderUtilValues","Spacing","SpacingValues","Radius","RadiusValues","Shadow","ShadowValues","Breakpoint","BreakpointValues","MediaQuery","MediaQueryValues","ThemeComponent","Button","ThemeButton","Navbar","ThemeNavbar","LifeSGThemeBase","colourScheme","fontScheme","motionScheme","borderScheme","spacingScheme","radiusScheme","shadowScheme","breakpointScheme","resourceScheme","componentScheme","_v2","colorScheme","textStyleScheme","designTokenScheme","BookingSGThemeBase","CCubeThemeBase","CareerCompassThemeBase","MyLegacyThemeBase","RBSThemeBase","OneServiceThemeBase","PAThemeBase","A11yPlaygroundThemeBase","SupportGoWhereThemeBase","SGWDigitalLobbyThemeBase","IMDAThemeBase","SPFThemeBase","SMGSThemeBase","ToteBoardThemeBase","LifeSGTheme","light","createThemeWithColourMode","dark","BookingSGTheme","CCubeTheme","CareerCompassTheme","MyLegacyTheme","RBSTheme","OneServiceTheme","PATheme","A11yPlaygroundTheme","SupportGoWhereTheme","SGWDigitalLobbyTheme","IMDATheme","SPFTheme","SMGSTheme","ToteBoardTheme"],"mappings":"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"}
package/theme/types.d.ts CHANGED
@@ -21,8 +21,8 @@ export type { RadiusSet, RadiusSetOptions } from "./radius/types";
21
21
  export type { ShadowSet, ShadowSetOptions } from "./shadow/types";
22
22
  export type { SpacingSet, SpacingSetOptions } from "./spacing/types";
23
23
  export type { BreakpointSet, BreakpointSetOptions } from "./breakpoint/types";
24
- export type ColourScheme = "lifesg" | "bookingsg" | "rbs" | "mylegacy" | "ccube" | "oneservice" | "pa" | "a11yplayground" | "supportgowhere" | "sgwdigitallobby" | "imda" | "spf" | "smgs" | "careercompass";
25
- export type FontScheme = "default" | "bookingsg" | "mylegacy" | "pa" | "a11yplayground" | "supportgowhere" | "sgwdigitallobby" | "imda" | "spf" | "oneservice";
24
+ export type ColourScheme = "lifesg" | "bookingsg" | "rbs" | "mylegacy" | "ccube" | "oneservice" | "pa" | "a11yplayground" | "supportgowhere" | "sgwdigitallobby" | "imda" | "spf" | "smgs" | "careercompass" | "toteboard";
25
+ export type FontScheme = "default" | "bookingsg" | "mylegacy" | "pa" | "a11yplayground" | "supportgowhere" | "sgwdigitallobby" | "imda" | "spf" | "oneservice" | "toteboard";
26
26
  export type MotionScheme = "default";
27
27
  export type BorderScheme = "default";
28
28
  export type SpacingScheme = "default";
@@ -30,7 +30,7 @@ export type RadiusScheme = "default" | "spf";
30
30
  export type ShadowScheme = "default";
31
31
  export type BreakpointScheme = "default";
32
32
  export type ComponentScheme = "default" | "pa" | "a11yplayground" | "lifesg" | "spf" | "smgs";
33
- export type ResourceScheme = "lifesg" | "bookingsg" | "rbs" | "mylegacy" | "ccube" | "oneservice" | "pa" | "a11yplayground" | "supportgowhere" | "imda" | "spf" | "smgs" | "careercompass";
33
+ export type ResourceScheme = "lifesg" | "bookingsg" | "rbs" | "mylegacy" | "ccube" | "oneservice" | "pa" | "a11yplayground" | "supportgowhere" | "imda" | "spf" | "smgs" | "careercompass" | "toteboard";
34
34
  export type ColourMode = "light" | "dark";
35
35
  export interface ThemeSpecOptions {
36
36
  primitiveColour?: PrimitiveColourSetOptions | undefined;
@@ -1,2 +1,2 @@
1
- import{__rest as e}from"../../_virtual/_tslib.js";import{jsxs as t,jsx as r}from"react/jsx-runtime";import{useState as o,useRef as i,useMemo as l,useCallback as a,useEffect as n}from"react";import{ErrorMessageContainer as d,ErrorIcon as s,ErrorMessage as m}from"../../form/form-label.style.js";import{ClearIconContainer as c}from"../../input-range-select/input-range-select.style.js";import{ClearIcon as u}from"../../input/input.style.js";import{VisuallyHidden as p,concatIds as h}from"../../shared/accessibility/index.js";import"styled-components";import"../../theme/index.js";import"../../util/string-helper.js";import"../../shared/dropdown-list/dropdown-label.styles.js";import{DropdownList as v}from"../../shared/dropdown-list/dropdown-list.js";import{DropdownListState as b}from"../../shared/dropdown-list/dropdown-list-state.js";import"../../shared/dropdown-list/expandable-element.js";import"@lifesg/react-icons/caret-right";import"react-virtuoso";import"../../button/button.style.js";import"../../util/calendar-helper.js";import"../../util/date-helper.js";import"../../util/date-input-helper.js";import{useId as f}from"../../util/simple-id-generator.js";import"@react-aria/live-announcer";import{ElementWithDropdown as g}from"../../shared/dropdown-wrapper/element-with-dropdown.js";import"../../shared/dropdown-list/dropdown-list.styles.js";import"../../shared/dropdown-list/dropdown-search.js";import"immer";import"../../external/lodash/_getTag.js";import"../../external/lodash/isArguments.js";import"../../external/lodash/_baseGetTag.js";import"../../external/lodash/isBuffer.js";import"../../external/lodash/isTypedArray.js";import"../../external/lodash/_Stack.js";import"../../external/lodash/_SetCache.js";import"../../external/lodash/_equalByTag.js";import"../../shared/dropdown-list/nested-dropdown-list.styles.js";import"../../shared/dropdown-list/virtuoso-components.js";import{RangeInputInnerContainer as j}from"../../shared/range-input-inner-container/range-input-inner-container.js";import{TimeHelper as y}from"../../util/time-helper.js";import{Wrapper as x,SelectorInput as w}from"../common.styles.js";import{TimeFieldContainer as I}from"./combobox-picker.styles.js";const T=T=>{var{id:S,disabled:C=!1,error:O,value:E,format:k="12hr",readOnly:F,onChange:$,onFocus:B,onBlur:_,alignment:L="left",dropdownZIndex:N,startLimit:A,endLimit:D,initialScrollStartTime:H,initialScrollEndTime:Z,interval:K=15,dropdownRootNode:R,"aria-labelledby":W,"aria-describedby":q,"aria-invalid":G}=T,P=e(T,["id","disabled","error","value","format","readOnly","onChange","onFocus","onBlur","alignment","dropdownZIndex","startLimit","endLimit","initialScrollStartTime","initialScrollEndTime","interval","dropdownRootNode","aria-labelledby","aria-describedby","aria-invalid"]);const z=f(),[J,M]=o(null),[Q,U]=o(!1),[V,X]=o(""),[Y,ee]=o(""),[te,re]=o(""),[oe,ie]=o(""),[le,ae]=o(""),ne=i(null),de=i(null),se=i(null),me=`${z}-listbox`,ce=`${z}-start-label`,ue=`${z}-end-label`,pe=`${z}-error-message`,he=l((()=>y.generateTimings(K,k,A,D)),[K,k,A,D]),ve=l((()=>{if(""===oe)return he;const e=y.findClosestFlooredTime(oe,he);return e?he.slice(he.indexOf(e)):[]}),[he,oe]),be=a((e=>y.parseInput(e,k)),[k]),fe=l((()=>{var e;return null!==(e=be(H))&&void 0!==e?e:""}),[H,be]),ge=l((()=>{var e;return null!==(e=be(Z))&&void 0!==e?e:""}),[Z,be]);n((()=>{var e,t;if(E){const r=null!==(e=be(E.start))&&void 0!==e?e:"",o=null!==(t=be(E.end))&&void 0!==t?t:"";ee(r),re(o),ie(r),ae(o)}}),[E,be]),n((()=>{if(O)return void U(!1);const e=be(Y),t=be(te);if(void 0===e)X("Invalid start time");else if(void 0===t)X("Invalid end time");else{if(!(""!==e&&""!==t&&y.to24Hour(t)<y.to24Hour(e)))return X(""),void(document.activeElement!==de.current&&document.activeElement!==se.current||U(!0));X("End time must be after start time")}U(!1)}),[Y,te,be,O]);const je=()=>"start"===J?"Selecting for: Start time":"end"===J?"Selecting for: End time":void 0,ye=e=>h(W,"start"===e?ce:ue),xe=()=>h(q,!O&&V?pe:void 0),we=e=>{C||F||(J||Q||null==B||B(),M(e),U(!0))},Ie=e=>{var t;C||F||(M(e),U(!0),null===(t=("start"===e?de:se).current)||void 0===t||t.select())};function Te(e){var t;switch(e.code){case"Enter":"start"===J?Se(Y):"end"===J&&(Q&&Ce(te),null===(t=se.current)||void 0===t||t.blur());break;case"Tab":Oe(Y,te,{})}}const Se=e=>{Oe(e,te,{goToNextInput:!0})},Ce=e=>{Oe(Y,e,{triggerOnBlur:!0})},Oe=(e,t,{goToNextInput:r,triggerOnBlur:o})=>{var i,l,a;const n=null!==(i=be(e))&&void 0!==i?i:oe,d=null!==(l=be(t))&&void 0!==l?l:le;ee(n),re(d);n===oe&&d===le||null==$||$({start:n,end:d}),r&&void 0!==be(e)&&(M("end"),null===(a=se.current)||void 0===a||a.select()),o&&(M(null),U(!1),null==_||_()),ie(n),ae(d)},Ee=e=>{e.stopPropagation(),ee(""),re(""),ie(""),ae("");null==$||$({start:"",end:""}),M(null),U(!1)},ke=e=>{var t,r;const o=e.relatedTarget,i=(null===(t=null==o?void 0:o.matches)||void 0===t?void 0:t.call(o,"[data-floating-ui-focusable]"))||(null===(r=null==o?void 0:o.matches)||void 0===r?void 0:r.call(o,"[data-floating-ui-focus-guard]")),l=ne.current&&ne.current.contains(o);J&&!Q&&!l&&!i&&Oe(Y,te,{triggerOnBlur:!0})},Fe=()=>{if(!F&&!C&&((null==Y?void 0:Y.length)>0||(null==te?void 0:te.length)>0))return r(c,{onClick:Ee,type:"button","aria-label":"Clear",children:r(u,{"aria-hidden":!0})})};return t(x,Object.assign({id:S},P,{children:[r(b,{children:r(g,{enabled:!F&&!C,isOpen:Q,renderElement:()=>t(I,{ref:ne,$disabled:C,$error:O||!!V,$readOnly:F,onBlur:ke,role:"group",children:[r(p,{id:ce,children:"Start time"}),r(p,{id:ue,children:"End time"}),t(j,{error:O||!!V,currentActive:null===J?"none":J,children:[r(w,{ref:de,onFocus:()=>we("start"),placeholder:"start"===J?"hh:mm":"From",onChange:e=>ee(e.target.value),value:Y,readOnly:F,"data-testid":P["data-testid"]?`${P["data-testid"]}-timepicker-selector-start`:"timepicker-selector-start",onClick:()=>Ie("start"),onKeyDown:Te,autoComplete:"off",type:"text",role:"combobox","aria-labelledby":ye("start"),"aria-describedby":xe(),"aria-expanded":Q&&"start"===J,"aria-controls":me,"aria-autocomplete":"list","aria-invalid":O||G||!!V,"aria-disabled":C,"aria-readonly":F}),r(w,{ref:se,onFocus:()=>we("end"),placeholder:"end"===J?"hh:mm":"To",onChange:e=>re(e.target.value),value:te,readOnly:F,"data-testid":P["data-testid"]?`${P["data-testid"]}-timepicker-selector-end`:"timepicker-selector-end",onClick:()=>Ie("end"),onKeyDown:Te,autoComplete:"off",type:"text",role:"combobox","aria-labelledby":ye("end"),"aria-describedby":xe(),"aria-expanded":Q&&"end"===J,"aria-controls":me,"aria-autocomplete":"list","aria-invalid":O||G||!!V||void 0,"aria-disabled":C||void 0,"aria-readonly":F||void 0})]}),Fe()]}),renderDropdown:()=>{if("start"===J){const e=be(Y)||fe;return r(v,{listItems:he,onSelectItem:Se,selectedItems:[Y],topScrollItem:y.findClosestFlooredTime(e,he),listboxId:me,ariaLabel:je(),disableItemFocus:!0,matchElementWidth:!0})}{const e=be(te)||ge;return r(v,{listItems:ve,onSelectItem:Ce,selectedItems:[te],topScrollItem:y.findClosestFlooredTime(e,ve),listboxId:me,ariaLabel:je(),disableItemFocus:!0,matchElementWidth:!0})}},onClose:e=>{"outside-press"===e?(M(null),U(!1),null==_||_()):Oe(Y,te,{triggerOnBlur:!0})},onDismiss:()=>{var e;null===(e=("start"===J?de:se).current)||void 0===e||e.focus(),U(!1)},offset:8,alignment:L,fitAvailableHeight:!0,customZIndex:N,rootNode:R})}),!O&&V&&t(d,{children:[r(s,{"aria-hidden":!0}),r(m,{id:pe,tabIndex:0,"data-testid":S?`${S}-error-message`:"error-message",children:V})]})]}))};export{T as ComboboxPicker};
1
+ import{__rest as e}from"../../_virtual/_tslib.js";import{jsxs as t,jsx as r}from"react/jsx-runtime";import{useState as i,useRef as o,useMemo as l,useCallback as a,useEffect as n}from"react";import{ErrorMessageContainer as d,ErrorIcon as s,ErrorMessage as m}from"../../form/form-label.style.js";import{ClearIconContainer as c}from"../../input-range-select/input-range-select.style.js";import{ClearIcon as u}from"../../input/input.style.js";import{VisuallyHidden as p,concatIds as h}from"../../shared/accessibility/index.js";import"styled-components";import"../../theme/index.js";import"../../util/string-helper.js";import"../../shared/dropdown-list/dropdown-label.styles.js";import{DropdownList as v}from"../../shared/dropdown-list/dropdown-list.js";import{DropdownListState as b}from"../../shared/dropdown-list/dropdown-list-state.js";import"../../shared/dropdown-list/expandable-element.js";import"@lifesg/react-icons/caret-right";import"react-virtuoso";import"../../button/button.style.js";import"../../util/calendar-helper.js";import"../../util/date-helper.js";import"../../util/date-input-helper.js";import{useId as f}from"../../util/simple-id-generator.js";import"@react-aria/live-announcer";import{ElementWithDropdown as g}from"../../shared/dropdown-wrapper/element-with-dropdown.js";import"../../shared/dropdown-list/dropdown-list.styles.js";import"../../shared/dropdown-list/dropdown-search.js";import"immer";import"../../external/lodash/_getTag.js";import"../../external/lodash/isArguments.js";import"../../external/lodash/_baseGetTag.js";import"../../external/lodash/isBuffer.js";import"../../external/lodash/isTypedArray.js";import"../../external/lodash/_Stack.js";import"../../external/lodash/_SetCache.js";import"../../external/lodash/_equalByTag.js";import"../../shared/dropdown-list/nested-dropdown-list.styles.js";import"../../shared/dropdown-list/virtuoso-components.js";import{RangeInputInnerContainer as j}from"../../shared/range-input-inner-container/range-input-inner-container.js";import{TimeHelper as y}from"../../util/time-helper.js";import{Wrapper as x,SelectorInput as w}from"../common.styles.js";import{TimeFieldContainer as I}from"./combobox-picker.styles.js";const T=T=>{var{id:S,disabled:C=!1,error:O,value:$,format:E="12hr",readOnly:k,onChange:F,onFocus:B,onBlur:_,alignment:L="left",dropdownZIndex:N,startLimit:A,endLimit:D,initialScrollStartTime:H,initialScrollEndTime:Z,interval:K=15,dropdownRootNode:R,"aria-labelledby":W,"aria-describedby":q,"aria-invalid":G}=T,P=e(T,["id","disabled","error","value","format","readOnly","onChange","onFocus","onBlur","alignment","dropdownZIndex","startLimit","endLimit","initialScrollStartTime","initialScrollEndTime","interval","dropdownRootNode","aria-labelledby","aria-describedby","aria-invalid"]);const z=f(),[J,M]=i(null),[Q,U]=i(!1),[V,X]=i(""),[Y,ee]=i(""),[te,re]=i(""),[ie,oe]=i(""),[le,ae]=i(""),ne=o(null),de=o(null),se=o(null),me=`${z}-listbox`,ce=`${z}-start-label`,ue=`${z}-end-label`,pe=`${z}-error-message`,he=l((()=>y.generateTimings(K,E,A,D)),[K,E,A,D]),ve=l((()=>{if(""===ie)return he;const e=y.findClosestFlooredTime(ie,he);return e?he.slice(he.indexOf(e)):[]}),[he,ie]),be=a((e=>y.parseInput(e,E)),[E]),fe=l((()=>{var e;return null!==(e=be(H))&&void 0!==e?e:""}),[H,be]),ge=l((()=>{var e;return null!==(e=be(Z))&&void 0!==e?e:""}),[Z,be]);n((()=>{var e,t;if($){const r=null!==(e=be($.start))&&void 0!==e?e:"",i=null!==(t=be($.end))&&void 0!==t?t:"";ee(r),re(i),oe(r),ae(i)}}),[$,be]),n((()=>{if(O)return void U(!1);const e=be(Y),t=be(te);if(void 0===e)X("Invalid start time");else if(void 0===t)X("Invalid end time");else{if(!(""!==e&&""!==t&&y.to24Hour(t)<y.to24Hour(e)))return X(""),void(document.activeElement!==de.current&&document.activeElement!==se.current||U(!0));X("End time must be after start time")}U(!1)}),[Y,te,be,O]);const je=()=>"start"===J?"Selecting for: Start time":"end"===J?"Selecting for: End time":void 0,ye=e=>h(W,"start"===e?ce:ue),xe=()=>h(q,!O&&V?pe:void 0),we=e=>{C||k||(J||Q||null==B||B(),M(e),U(!0))},Ie=e=>{var t;C||k||(M(e),U(!0),null===(t=("start"===e?de:se).current)||void 0===t||t.select())};function Te(e){var t;switch(e.code){case"Enter":"start"===J?Se(Y):"end"===J&&(Q&&Ce(te),null===(t=se.current)||void 0===t||t.blur());break;case"Tab":Oe(Y,te,{})}}const Se=e=>{Oe(e,te,{goToNextInput:!0})},Ce=e=>{Oe(Y,e,{triggerOnBlur:!0})},Oe=(e,t,{goToNextInput:r,triggerOnBlur:i})=>{var o,l,a;const n=null!==(o=be(e))&&void 0!==o?o:ie,d=null!==(l=be(t))&&void 0!==l?l:le;ee(n),re(d);n===ie&&d===le||null==F||F({start:n,end:d}),r&&void 0!==be(e)&&(M("end"),null===(a=se.current)||void 0===a||a.select()),i&&(M(null),U(!1),null==_||_()),oe(n),ae(d)},$e=e=>{e.stopPropagation(),ee(""),re(""),oe(""),ae("");null==F||F({start:"",end:""}),M(null),U(!1)},Ee=e=>{var t,r;const i=e.relatedTarget,o=(null===(t=null==i?void 0:i.matches)||void 0===t?void 0:t.call(i,"[data-floating-ui-focusable]"))||(null===(r=null==i?void 0:i.matches)||void 0===r?void 0:r.call(i,"[data-floating-ui-focus-guard]")),l=ne.current&&ne.current.contains(i);J&&!Q&&!l&&!o&&Oe(Y,te,{triggerOnBlur:!0})},ke=()=>{if(!k&&!C&&((null==Y?void 0:Y.length)>0||(null==te?void 0:te.length)>0))return r(c,{onClick:$e,type:"button","aria-label":"Clear",children:r(u,{"aria-hidden":!0})})};return t(x,Object.assign({id:S},P,{children:[r(b,{children:r(g,{enabled:!k&&!C,isOpen:Q,renderElement:()=>t(I,{ref:ne,$disabled:C,$error:O||!!V,$readOnly:k,onBlur:Ee,role:"group",children:[r(p,{id:ce,children:"Start time"}),r(p,{id:ue,children:"End time"}),t(j,{error:O||!!V,currentActive:null===J?"none":J,children:[r(w,{ref:de,onFocus:()=>we("start"),placeholder:"start"===J?"hh:mm":"From",onChange:e=>ee(e.target.value),value:Y,readOnly:k||C,"data-testid":P["data-testid"]?`${P["data-testid"]}-timepicker-selector-start`:"timepicker-selector-start",onClick:()=>Ie("start"),onKeyDown:Te,autoComplete:"off",type:"text",role:"combobox","aria-labelledby":ye("start"),"aria-describedby":xe(),"aria-expanded":Q&&"start"===J,"aria-controls":me,"aria-autocomplete":"list","aria-invalid":O||G||!!V,"aria-disabled":C,"aria-readonly":k,$disabled:C}),r(w,{ref:se,onFocus:()=>we("end"),placeholder:"end"===J?"hh:mm":"To",onChange:e=>re(e.target.value),value:te,readOnly:k||C,"data-testid":P["data-testid"]?`${P["data-testid"]}-timepicker-selector-end`:"timepicker-selector-end",onClick:()=>Ie("end"),onKeyDown:Te,autoComplete:"off",type:"text",role:"combobox","aria-labelledby":ye("end"),"aria-describedby":xe(),"aria-expanded":Q&&"end"===J,"aria-controls":me,"aria-autocomplete":"list","aria-invalid":O||G||!!V||void 0,"aria-disabled":C||void 0,"aria-readonly":k||void 0,$disabled:C})]}),ke()]}),renderDropdown:()=>{if("start"===J){const e=be(Y)||fe;return r(v,{listItems:he,onSelectItem:Se,selectedItems:[Y],topScrollItem:y.findClosestFlooredTime(e,he),listboxId:me,ariaLabel:je(),disableItemFocus:!0,matchElementWidth:!0})}{const e=be(te)||ge;return r(v,{listItems:ve,onSelectItem:Ce,selectedItems:[te],topScrollItem:y.findClosestFlooredTime(e,ve),listboxId:me,ariaLabel:je(),disableItemFocus:!0,matchElementWidth:!0})}},onClose:e=>{"outside-press"===e?(M(null),U(!1),null==_||_()):Oe(Y,te,{triggerOnBlur:!0})},onDismiss:()=>{var e;null===(e=("start"===J?de:se).current)||void 0===e||e.focus(),U(!1)},offset:8,alignment:L,fitAvailableHeight:!0,customZIndex:N,rootNode:R})}),!O&&V&&t(d,{children:[r(s,{"aria-hidden":!0}),r(m,{id:pe,tabIndex:0,"data-testid":S?`${S}-error-message`:"error-message",children:V})]})]}))};export{T as ComboboxPicker};
2
2
  //# sourceMappingURL=combobox-picker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"combobox-picker.js","sources":["../../../src/time-range-picker/combobox-picker/combobox-picker.tsx"],"sourcesContent":["import { OpenChangeReason } from \"@floating-ui/react\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n ErrorIcon,\n ErrorMessage,\n ErrorMessageContainer,\n} from \"../../form/form-label.style\";\nimport { ClearIconContainer } from \"../../input-range-select/input-range-select.style\";\nimport { ClearIcon } from \"../../input/input.style\";\nimport { VisuallyHidden, concatIds } from \"../../shared/accessibility\";\nimport { DropdownListState } from \"../../shared/dropdown-list\";\nimport { DropdownList } from \"../../shared/dropdown-list/dropdown-list\";\nimport { ElementWithDropdown } from \"../../shared/dropdown-wrapper\";\nimport { RangeInputInnerContainer } from \"../../shared/range-input-inner-container\";\nimport { useId } from \"../../util\";\nimport { TimeHelper } from \"../../util/time-helper\";\nimport { SelectorInput, Wrapper } from \"../common.styles\";\nimport { TimeRangePickerProps, TimeRangePickerValue } from \"../types\";\nimport { TimeFieldContainer } from \"./combobox-picker.styles\";\n\ntype TimeRangeInputType = \"start\" | \"end\";\ninterface TimeChangeOptions {\n goToNextInput?: boolean | undefined;\n triggerOnBlur?: boolean | undefined;\n}\n\nexport const ComboboxPicker = ({\n id,\n disabled = false,\n error,\n value,\n format = \"12hr\",\n readOnly,\n onChange,\n onFocus,\n onBlur,\n alignment = \"left\",\n dropdownZIndex,\n startLimit,\n endLimit,\n initialScrollStartTime,\n initialScrollEndTime,\n interval = 15,\n dropdownRootNode,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-invalid\": ariaInvalid,\n ...otherProps\n}: TimeRangePickerProps) => {\n // =============================================================================\n // CONST, STATE, REF\n // =============================================================================\n const internalId = useId();\n const [activeTimeSelector, setActiveTimeSelector] =\n useState<TimeRangeInputType | null>(null);\n const [dropdownOpen, setDropdownOpen] = useState<boolean>(false);\n const [validationError, setValidationError] = useState<string>(\"\");\n\n const [startTimeVal, setStartTimeVal] = useState<string>(\"\");\n const [endTimeVal, setEndTimeVal] = useState<string>(\"\");\n const [initialStartTimeVal, setInitialStartTimeVal] = useState<string>(\"\");\n const [initialEndTimeVal, setInitialEndTimeVal] = useState<string>(\"\");\n\n const nodeRef = useRef<HTMLDivElement>(null);\n const startInputRef = useRef<HTMLInputElement>(null);\n const endInputRef = useRef<HTMLInputElement>(null);\n\n const listboxId = `${internalId}-listbox`;\n const startLabelId = `${internalId}-start-label`;\n const endLabelId = `${internalId}-end-label`;\n const errorId = `${internalId}-error-message`;\n\n const startOptions = useMemo(\n () =>\n TimeHelper.generateTimings(interval, format, startLimit, endLimit),\n [interval, format, startLimit, endLimit]\n );\n const endOptions = useMemo(() => {\n if (initialStartTimeVal === \"\") return startOptions;\n\n const flooredStartVal = TimeHelper.findClosestFlooredTime(\n initialStartTimeVal,\n startOptions\n );\n return flooredStartVal\n ? startOptions.slice(startOptions.indexOf(flooredStartVal))\n : [];\n }, [startOptions, initialStartTimeVal]);\n\n // =========================================================================\n // EFFECTS\n // =========================================================================\n const parseInput = useCallback(\n (input: string | undefined): string | undefined => {\n return TimeHelper.parseInput(input, format);\n },\n [format]\n );\n\n const parsedInitialStartScrollTime = useMemo(\n () => parseInput(initialScrollStartTime) ?? \"\",\n [initialScrollStartTime, parseInput]\n );\n\n const parsedInitialEndScrollTime = useMemo(\n () => parseInput(initialScrollEndTime) ?? \"\",\n [initialScrollEndTime, parseInput]\n );\n\n useEffect(() => {\n if (value) {\n const start = parseInput(value.start) ?? \"\";\n const end = parseInput(value.end) ?? \"\";\n\n setStartTimeVal(start);\n setEndTimeVal(end);\n setInitialStartTimeVal(start);\n setInitialEndTimeVal(end);\n }\n }, [value, parseInput]);\n\n // Validation for keyboard input\n useEffect(() => {\n if (error) {\n setDropdownOpen(false);\n return;\n }\n\n const start = parseInput(startTimeVal);\n const end = parseInput(endTimeVal);\n\n if (start === undefined) {\n setValidationError(\"Invalid start time\");\n } else if (end === undefined) {\n setValidationError(\"Invalid end time\");\n } else if (\n start !== \"\" &&\n end !== \"\" &&\n TimeHelper.to24Hour(end) < TimeHelper.to24Hour(start)\n ) {\n setValidationError(\"End time must be after start time\");\n } else {\n setValidationError(\"\");\n // Re-open dropdown if error was corrected\n if (\n document.activeElement === startInputRef.current ||\n document.activeElement === endInputRef.current\n ) {\n setDropdownOpen(true);\n }\n return;\n }\n\n // Hide dropdown so error message is visible\n setDropdownOpen(false);\n }, [startTimeVal, endTimeVal, parseInput, error]);\n\n // =============================================================================\n // HELPERS\n // =============================================================================\n const getDropdownAriaLabel = () => {\n if (activeTimeSelector === \"start\") {\n return \"Selecting for: Start time\";\n }\n\n if (activeTimeSelector === \"end\") {\n return \"Selecting for: End time\";\n }\n\n return undefined;\n };\n\n const getInputLabelledBy = (type: TimeRangeInputType) => {\n return concatIds(\n ariaLabelledBy,\n type === \"start\" ? startLabelId : endLabelId\n );\n };\n\n const getInputDescribedBy = () => {\n return concatIds(\n ariaDescribedBy,\n !error && validationError ? errorId : undefined\n );\n };\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n const handleInputFocus = (selector: TimeRangeInputType) => {\n if (disabled || readOnly) return;\n\n // Only run onFocus if not already focused\n if (!activeTimeSelector && !dropdownOpen) onFocus?.();\n\n setActiveTimeSelector(selector);\n setDropdownOpen(true);\n };\n\n const handleInputClick = (selector: TimeRangeInputType) => {\n if (disabled || readOnly) return;\n\n setActiveTimeSelector(selector);\n setDropdownOpen(true);\n (selector === \"start\" ? startInputRef : endInputRef).current?.select();\n };\n\n function handleKeyDownEvent(event: React.KeyboardEvent<HTMLInputElement>) {\n switch (event.code) {\n case \"Enter\":\n if (activeTimeSelector === \"start\") {\n handleStartTime(startTimeVal);\n } else if (activeTimeSelector === \"end\") {\n // Let handleBlur call handleTimeChange instead\n if (dropdownOpen) handleEndTime(endTimeVal);\n endInputRef.current?.blur();\n }\n break;\n case \"Tab\":\n handleTimeChange(startTimeVal, endTimeVal, {});\n break;\n default:\n break;\n }\n }\n\n const handleStartTime = (input: string) => {\n handleTimeChange(input, endTimeVal, { goToNextInput: true });\n };\n\n const handleEndTime = (input: string) => {\n handleTimeChange(startTimeVal, input, { triggerOnBlur: true });\n };\n\n const handleTimeChange = (\n startInput: string,\n endInput: string,\n {\n goToNextInput, // Used by handleStart to move to end input automatically\n triggerOnBlur, // Used by handleEnd/handleClear to trigger onBlur\n }: TimeChangeOptions\n ) => {\n const start = parseInput(startInput) ?? initialStartTimeVal;\n const end = parseInput(endInput) ?? initialEndTimeVal;\n\n setStartTimeVal(start);\n setEndTimeVal(end);\n\n const timeValue: TimeRangePickerValue = { start, end };\n\n // Trigger onChange if values have changed\n if (start !== initialStartTimeVal || end !== initialEndTimeVal) {\n onChange?.(timeValue);\n }\n\n // Go to end input only if start is a valid time\n if (goToNextInput && parseInput(startInput) !== undefined) {\n setActiveTimeSelector(\"end\");\n endInputRef.current?.select();\n }\n\n if (triggerOnBlur) {\n setActiveTimeSelector(null);\n setDropdownOpen(false);\n onBlur?.();\n }\n\n setInitialStartTimeVal(start);\n setInitialEndTimeVal(end);\n };\n\n const handleClear = (event: React.MouseEvent) => {\n event.stopPropagation();\n setStartTimeVal(\"\");\n setEndTimeVal(\"\");\n setInitialStartTimeVal(\"\");\n setInitialEndTimeVal(\"\");\n\n const timeValue: TimeRangePickerValue = {\n start: \"\",\n end: \"\",\n };\n\n onChange?.(timeValue);\n setActiveTimeSelector(null);\n setDropdownOpen(false);\n };\n\n const handleDismiss = () => {\n (activeTimeSelector === \"start\"\n ? startInputRef\n : endInputRef\n ).current?.focus();\n setDropdownOpen(false);\n };\n\n const handleBlur = (event: React.FocusEvent<HTMLDivElement, Element>) => {\n const target = event.relatedTarget as HTMLElement;\n\n const isFloatingElement =\n target?.matches?.(\"[data-floating-ui-focusable]\") ||\n target?.matches?.(\"[data-floating-ui-focus-guard]\");\n const isInsideNode =\n nodeRef.current && nodeRef.current.contains(target);\n\n // Condition when the calendar is closed and focus moved outside the component\n const shouldBlurWhenClosed =\n activeTimeSelector &&\n !dropdownOpen &&\n !isInsideNode &&\n !isFloatingElement;\n\n if (shouldBlurWhenClosed) {\n handleTimeChange(startTimeVal, endTimeVal, { triggerOnBlur: true });\n }\n };\n\n // NOTE: Dropdown dismissal (esc) does not trigger onClose\n const handleClose = (reason: OpenChangeReason | undefined) => {\n if (reason === \"outside-press\") {\n // No handleTimeChange to avoid duplicate call from handleBlur\n setActiveTimeSelector(null);\n setDropdownOpen(false);\n onBlur?.();\n } else {\n // Dropdown closed via exiting component (eg. tab)\n handleTimeChange(startTimeVal, endTimeVal, { triggerOnBlur: true });\n }\n };\n\n // =============================================================================\n // RENDER FUNCTIONS\n // =============================================================================\n const renderClearButton = () => {\n if (\n !readOnly &&\n !disabled &&\n (startTimeVal?.length > 0 || endTimeVal?.length > 0)\n ) {\n return (\n <ClearIconContainer\n onClick={handleClear}\n type=\"button\"\n aria-label=\"Clear\"\n >\n <ClearIcon aria-hidden />\n </ClearIconContainer>\n );\n }\n };\n\n const renderDropdown = () => {\n if (activeTimeSelector === \"start\") {\n // Prioritise start time value. If non existent, use initial scroll time\n // If both are non existent, DropdownList will default to first option\n const startScrollTime =\n parseInput(startTimeVal) || parsedInitialStartScrollTime;\n\n return (\n <DropdownList\n listItems={startOptions}\n onSelectItem={handleStartTime}\n selectedItems={[startTimeVal]}\n topScrollItem={TimeHelper.findClosestFlooredTime(\n startScrollTime,\n startOptions\n )}\n listboxId={listboxId}\n ariaLabel={getDropdownAriaLabel()}\n disableItemFocus\n matchElementWidth\n />\n );\n } else {\n const endScrollTime =\n parseInput(endTimeVal) || parsedInitialEndScrollTime;\n\n return (\n <DropdownList\n listItems={endOptions}\n onSelectItem={handleEndTime}\n selectedItems={[endTimeVal]}\n topScrollItem={TimeHelper.findClosestFlooredTime(\n endScrollTime,\n endOptions\n )}\n listboxId={listboxId}\n ariaLabel={getDropdownAriaLabel()}\n disableItemFocus\n matchElementWidth\n />\n );\n }\n };\n\n const renderElement = () => (\n <TimeFieldContainer\n ref={nodeRef}\n $disabled={disabled}\n $error={error || !!validationError}\n $readOnly={readOnly}\n onBlur={handleBlur}\n role=\"group\"\n >\n <VisuallyHidden id={startLabelId}>Start time</VisuallyHidden>\n <VisuallyHidden id={endLabelId}>End time</VisuallyHidden>\n\n <RangeInputInnerContainer\n error={error || !!validationError}\n currentActive={\n activeTimeSelector === null ? \"none\" : activeTimeSelector\n }\n >\n {/* From */}\n <SelectorInput\n ref={startInputRef}\n onFocus={() => handleInputFocus(\"start\")}\n placeholder={\n activeTimeSelector === \"start\" ? \"hh:mm\" : \"From\"\n }\n onChange={(e) => setStartTimeVal(e.target.value)}\n value={startTimeVal}\n readOnly={readOnly}\n data-testid={\n otherProps[\"data-testid\"]\n ? `${otherProps[\"data-testid\"]}-timepicker-selector-start`\n : \"timepicker-selector-start\"\n }\n onClick={() => handleInputClick(\"start\")}\n onKeyDown={handleKeyDownEvent}\n autoComplete=\"off\"\n type=\"text\"\n role=\"combobox\"\n aria-labelledby={getInputLabelledBy(\"start\")}\n aria-describedby={getInputDescribedBy()}\n aria-expanded={\n dropdownOpen && activeTimeSelector === \"start\"\n }\n aria-controls={listboxId}\n aria-autocomplete=\"list\"\n aria-invalid={error || ariaInvalid || !!validationError}\n aria-disabled={disabled}\n aria-readonly={readOnly}\n />\n {/* To */}\n <SelectorInput\n ref={endInputRef}\n onFocus={() => handleInputFocus(\"end\")}\n placeholder={activeTimeSelector === \"end\" ? \"hh:mm\" : \"To\"}\n onChange={(e) => setEndTimeVal(e.target.value)}\n value={endTimeVal}\n readOnly={readOnly}\n data-testid={\n otherProps[\"data-testid\"]\n ? `${otherProps[\"data-testid\"]}-timepicker-selector-end`\n : \"timepicker-selector-end\"\n }\n onClick={() => handleInputClick(\"end\")}\n onKeyDown={handleKeyDownEvent}\n autoComplete=\"off\"\n type=\"text\"\n role=\"combobox\"\n aria-labelledby={getInputLabelledBy(\"end\")}\n aria-describedby={getInputDescribedBy()}\n aria-expanded={dropdownOpen && activeTimeSelector === \"end\"}\n aria-controls={listboxId}\n aria-autocomplete=\"list\"\n aria-invalid={\n error || ariaInvalid || !!validationError || undefined\n }\n aria-disabled={disabled || undefined}\n aria-readonly={readOnly || undefined}\n />\n </RangeInputInnerContainer>\n {renderClearButton()}\n </TimeFieldContainer>\n );\n\n const renderError = () =>\n // Only display internal error message if user does not provide one\n !error &&\n validationError && (\n <ErrorMessageContainer>\n <ErrorIcon aria-hidden />\n <ErrorMessage\n id={errorId}\n tabIndex={0}\n data-testid={id ? `${id}-error-message` : \"error-message\"}\n >\n {validationError}\n </ErrorMessage>\n </ErrorMessageContainer>\n );\n\n return (\n <Wrapper id={id} {...otherProps}>\n <DropdownListState>\n <ElementWithDropdown\n enabled={!readOnly && !disabled}\n isOpen={dropdownOpen}\n renderElement={renderElement}\n renderDropdown={renderDropdown}\n onClose={handleClose}\n onDismiss={handleDismiss}\n offset={8}\n alignment={alignment}\n fitAvailableHeight\n customZIndex={dropdownZIndex}\n rootNode={dropdownRootNode}\n />\n </DropdownListState>\n {renderError()}\n </Wrapper>\n );\n};\n"],"names":["ComboboxPicker","_a","id","disabled","error","value","format","readOnly","onChange","onFocus","onBlur","alignment","dropdownZIndex","startLimit","endLimit","initialScrollStartTime","initialScrollEndTime","interval","dropdownRootNode","ariaLabelledBy","ariaDescribedBy","ariaInvalid","otherProps","__rest","internalId","useId","activeTimeSelector","setActiveTimeSelector","useState","dropdownOpen","setDropdownOpen","validationError","setValidationError","startTimeVal","setStartTimeVal","endTimeVal","setEndTimeVal","initialStartTimeVal","setInitialStartTimeVal","initialEndTimeVal","setInitialEndTimeVal","nodeRef","useRef","startInputRef","endInputRef","listboxId","startLabelId","endLabelId","errorId","startOptions","useMemo","TimeHelper","generateTimings","endOptions","flooredStartVal","findClosestFlooredTime","slice","indexOf","parseInput","useCallback","input","parsedInitialStartScrollTime","parsedInitialEndScrollTime","useEffect","start","end","_b","undefined","to24Hour","document","activeElement","current","getDropdownAriaLabel","getInputLabelledBy","type","concatIds","getInputDescribedBy","handleInputFocus","selector","handleInputClick","select","handleKeyDownEvent","event","code","handleStartTime","handleEndTime","blur","handleTimeChange","goToNextInput","triggerOnBlur","startInput","endInput","_c","handleClear","stopPropagation","handleBlur","target","relatedTarget","isFloatingElement","matches","call","isInsideNode","contains","renderClearButton","length","_jsx","ClearIconContainer","onClick","children","ClearIcon","_jsxs","Wrapper","Object","assign","DropdownListState","ElementWithDropdown","enabled","isOpen","renderElement","TimeFieldContainer","ref","$disabled","$error","$readOnly","role","VisuallyHidden","RangeInputInnerContainer","currentActive","SelectorInput","placeholder","e","onKeyDown","autoComplete","renderDropdown","startScrollTime","DropdownList","listItems","onSelectItem","selectedItems","topScrollItem","ariaLabel","disableItemFocus","matchElementWidth","endScrollTime","onClose","reason","onDismiss","focus","offset","fitAvailableHeight","customZIndex","rootNode","ErrorMessageContainer","ErrorIcon","ErrorMessage","tabIndex"],"mappings":"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"}
1
+ {"version":3,"file":"combobox-picker.js","sources":["../../../src/time-range-picker/combobox-picker/combobox-picker.tsx"],"sourcesContent":["import { OpenChangeReason } from \"@floating-ui/react\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n ErrorIcon,\n ErrorMessage,\n ErrorMessageContainer,\n} from \"../../form/form-label.style\";\nimport { ClearIconContainer } from \"../../input-range-select/input-range-select.style\";\nimport { ClearIcon } from \"../../input/input.style\";\nimport { VisuallyHidden, concatIds } from \"../../shared/accessibility\";\nimport { DropdownListState } from \"../../shared/dropdown-list\";\nimport { DropdownList } from \"../../shared/dropdown-list/dropdown-list\";\nimport { ElementWithDropdown } from \"../../shared/dropdown-wrapper\";\nimport { RangeInputInnerContainer } from \"../../shared/range-input-inner-container\";\nimport { useId } from \"../../util\";\nimport { TimeHelper } from \"../../util/time-helper\";\nimport { SelectorInput, Wrapper } from \"../common.styles\";\nimport { TimeRangePickerProps, TimeRangePickerValue } from \"../types\";\nimport { TimeFieldContainer } from \"./combobox-picker.styles\";\n\ntype TimeRangeInputType = \"start\" | \"end\";\ninterface TimeChangeOptions {\n goToNextInput?: boolean | undefined;\n triggerOnBlur?: boolean | undefined;\n}\n\nexport const ComboboxPicker = ({\n id,\n disabled = false,\n error,\n value,\n format = \"12hr\",\n readOnly,\n onChange,\n onFocus,\n onBlur,\n alignment = \"left\",\n dropdownZIndex,\n startLimit,\n endLimit,\n initialScrollStartTime,\n initialScrollEndTime,\n interval = 15,\n dropdownRootNode,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-invalid\": ariaInvalid,\n ...otherProps\n}: TimeRangePickerProps) => {\n // =============================================================================\n // CONST, STATE, REF\n // =============================================================================\n const internalId = useId();\n const [activeTimeSelector, setActiveTimeSelector] =\n useState<TimeRangeInputType | null>(null);\n const [dropdownOpen, setDropdownOpen] = useState<boolean>(false);\n const [validationError, setValidationError] = useState<string>(\"\");\n\n const [startTimeVal, setStartTimeVal] = useState<string>(\"\");\n const [endTimeVal, setEndTimeVal] = useState<string>(\"\");\n const [initialStartTimeVal, setInitialStartTimeVal] = useState<string>(\"\");\n const [initialEndTimeVal, setInitialEndTimeVal] = useState<string>(\"\");\n\n const nodeRef = useRef<HTMLDivElement>(null);\n const startInputRef = useRef<HTMLInputElement>(null);\n const endInputRef = useRef<HTMLInputElement>(null);\n\n const listboxId = `${internalId}-listbox`;\n const startLabelId = `${internalId}-start-label`;\n const endLabelId = `${internalId}-end-label`;\n const errorId = `${internalId}-error-message`;\n\n const startOptions = useMemo(\n () =>\n TimeHelper.generateTimings(interval, format, startLimit, endLimit),\n [interval, format, startLimit, endLimit]\n );\n const endOptions = useMemo(() => {\n if (initialStartTimeVal === \"\") return startOptions;\n\n const flooredStartVal = TimeHelper.findClosestFlooredTime(\n initialStartTimeVal,\n startOptions\n );\n return flooredStartVal\n ? startOptions.slice(startOptions.indexOf(flooredStartVal))\n : [];\n }, [startOptions, initialStartTimeVal]);\n\n // =========================================================================\n // EFFECTS\n // =========================================================================\n const parseInput = useCallback(\n (input: string | undefined): string | undefined => {\n return TimeHelper.parseInput(input, format);\n },\n [format]\n );\n\n const parsedInitialStartScrollTime = useMemo(\n () => parseInput(initialScrollStartTime) ?? \"\",\n [initialScrollStartTime, parseInput]\n );\n\n const parsedInitialEndScrollTime = useMemo(\n () => parseInput(initialScrollEndTime) ?? \"\",\n [initialScrollEndTime, parseInput]\n );\n\n useEffect(() => {\n if (value) {\n const start = parseInput(value.start) ?? \"\";\n const end = parseInput(value.end) ?? \"\";\n\n setStartTimeVal(start);\n setEndTimeVal(end);\n setInitialStartTimeVal(start);\n setInitialEndTimeVal(end);\n }\n }, [value, parseInput]);\n\n // Validation for keyboard input\n useEffect(() => {\n if (error) {\n setDropdownOpen(false);\n return;\n }\n\n const start = parseInput(startTimeVal);\n const end = parseInput(endTimeVal);\n\n if (start === undefined) {\n setValidationError(\"Invalid start time\");\n } else if (end === undefined) {\n setValidationError(\"Invalid end time\");\n } else if (\n start !== \"\" &&\n end !== \"\" &&\n TimeHelper.to24Hour(end) < TimeHelper.to24Hour(start)\n ) {\n setValidationError(\"End time must be after start time\");\n } else {\n setValidationError(\"\");\n // Re-open dropdown if error was corrected\n if (\n document.activeElement === startInputRef.current ||\n document.activeElement === endInputRef.current\n ) {\n setDropdownOpen(true);\n }\n return;\n }\n\n // Hide dropdown so error message is visible\n setDropdownOpen(false);\n }, [startTimeVal, endTimeVal, parseInput, error]);\n\n // =============================================================================\n // HELPERS\n // =============================================================================\n const getDropdownAriaLabel = () => {\n if (activeTimeSelector === \"start\") {\n return \"Selecting for: Start time\";\n }\n\n if (activeTimeSelector === \"end\") {\n return \"Selecting for: End time\";\n }\n\n return undefined;\n };\n\n const getInputLabelledBy = (type: TimeRangeInputType) => {\n return concatIds(\n ariaLabelledBy,\n type === \"start\" ? startLabelId : endLabelId\n );\n };\n\n const getInputDescribedBy = () => {\n return concatIds(\n ariaDescribedBy,\n !error && validationError ? errorId : undefined\n );\n };\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n const handleInputFocus = (selector: TimeRangeInputType) => {\n if (disabled || readOnly) return;\n\n // Only run onFocus if not already focused\n if (!activeTimeSelector && !dropdownOpen) onFocus?.();\n\n setActiveTimeSelector(selector);\n setDropdownOpen(true);\n };\n\n const handleInputClick = (selector: TimeRangeInputType) => {\n if (disabled || readOnly) return;\n\n setActiveTimeSelector(selector);\n setDropdownOpen(true);\n (selector === \"start\" ? startInputRef : endInputRef).current?.select();\n };\n\n function handleKeyDownEvent(event: React.KeyboardEvent<HTMLInputElement>) {\n switch (event.code) {\n case \"Enter\":\n if (activeTimeSelector === \"start\") {\n handleStartTime(startTimeVal);\n } else if (activeTimeSelector === \"end\") {\n // Let handleBlur call handleTimeChange instead\n if (dropdownOpen) handleEndTime(endTimeVal);\n endInputRef.current?.blur();\n }\n break;\n case \"Tab\":\n handleTimeChange(startTimeVal, endTimeVal, {});\n break;\n default:\n break;\n }\n }\n\n const handleStartTime = (input: string) => {\n handleTimeChange(input, endTimeVal, { goToNextInput: true });\n };\n\n const handleEndTime = (input: string) => {\n handleTimeChange(startTimeVal, input, { triggerOnBlur: true });\n };\n\n const handleTimeChange = (\n startInput: string,\n endInput: string,\n {\n goToNextInput, // Used by handleStart to move to end input automatically\n triggerOnBlur, // Used by handleEnd/handleClear to trigger onBlur\n }: TimeChangeOptions\n ) => {\n const start = parseInput(startInput) ?? initialStartTimeVal;\n const end = parseInput(endInput) ?? initialEndTimeVal;\n\n setStartTimeVal(start);\n setEndTimeVal(end);\n\n const timeValue: TimeRangePickerValue = { start, end };\n\n // Trigger onChange if values have changed\n if (start !== initialStartTimeVal || end !== initialEndTimeVal) {\n onChange?.(timeValue);\n }\n\n // Go to end input only if start is a valid time\n if (goToNextInput && parseInput(startInput) !== undefined) {\n setActiveTimeSelector(\"end\");\n endInputRef.current?.select();\n }\n\n if (triggerOnBlur) {\n setActiveTimeSelector(null);\n setDropdownOpen(false);\n onBlur?.();\n }\n\n setInitialStartTimeVal(start);\n setInitialEndTimeVal(end);\n };\n\n const handleClear = (event: React.MouseEvent) => {\n event.stopPropagation();\n setStartTimeVal(\"\");\n setEndTimeVal(\"\");\n setInitialStartTimeVal(\"\");\n setInitialEndTimeVal(\"\");\n\n const timeValue: TimeRangePickerValue = {\n start: \"\",\n end: \"\",\n };\n\n onChange?.(timeValue);\n setActiveTimeSelector(null);\n setDropdownOpen(false);\n };\n\n const handleDismiss = () => {\n (activeTimeSelector === \"start\"\n ? startInputRef\n : endInputRef\n ).current?.focus();\n setDropdownOpen(false);\n };\n\n const handleBlur = (event: React.FocusEvent<HTMLDivElement, Element>) => {\n const target = event.relatedTarget as HTMLElement;\n\n const isFloatingElement =\n target?.matches?.(\"[data-floating-ui-focusable]\") ||\n target?.matches?.(\"[data-floating-ui-focus-guard]\");\n const isInsideNode =\n nodeRef.current && nodeRef.current.contains(target);\n\n // Condition when the calendar is closed and focus moved outside the component\n const shouldBlurWhenClosed =\n activeTimeSelector &&\n !dropdownOpen &&\n !isInsideNode &&\n !isFloatingElement;\n\n if (shouldBlurWhenClosed) {\n handleTimeChange(startTimeVal, endTimeVal, { triggerOnBlur: true });\n }\n };\n\n // NOTE: Dropdown dismissal (esc) does not trigger onClose\n const handleClose = (reason: OpenChangeReason | undefined) => {\n if (reason === \"outside-press\") {\n // No handleTimeChange to avoid duplicate call from handleBlur\n setActiveTimeSelector(null);\n setDropdownOpen(false);\n onBlur?.();\n } else {\n // Dropdown closed via exiting component (eg. tab)\n handleTimeChange(startTimeVal, endTimeVal, { triggerOnBlur: true });\n }\n };\n\n // =============================================================================\n // RENDER FUNCTIONS\n // =============================================================================\n const renderClearButton = () => {\n if (\n !readOnly &&\n !disabled &&\n (startTimeVal?.length > 0 || endTimeVal?.length > 0)\n ) {\n return (\n <ClearIconContainer\n onClick={handleClear}\n type=\"button\"\n aria-label=\"Clear\"\n >\n <ClearIcon aria-hidden />\n </ClearIconContainer>\n );\n }\n };\n\n const renderDropdown = () => {\n if (activeTimeSelector === \"start\") {\n // Prioritise start time value. If non existent, use initial scroll time\n // If both are non existent, DropdownList will default to first option\n const startScrollTime =\n parseInput(startTimeVal) || parsedInitialStartScrollTime;\n\n return (\n <DropdownList\n listItems={startOptions}\n onSelectItem={handleStartTime}\n selectedItems={[startTimeVal]}\n topScrollItem={TimeHelper.findClosestFlooredTime(\n startScrollTime,\n startOptions\n )}\n listboxId={listboxId}\n ariaLabel={getDropdownAriaLabel()}\n disableItemFocus\n matchElementWidth\n />\n );\n } else {\n const endScrollTime =\n parseInput(endTimeVal) || parsedInitialEndScrollTime;\n\n return (\n <DropdownList\n listItems={endOptions}\n onSelectItem={handleEndTime}\n selectedItems={[endTimeVal]}\n topScrollItem={TimeHelper.findClosestFlooredTime(\n endScrollTime,\n endOptions\n )}\n listboxId={listboxId}\n ariaLabel={getDropdownAriaLabel()}\n disableItemFocus\n matchElementWidth\n />\n );\n }\n };\n\n const renderElement = () => (\n <TimeFieldContainer\n ref={nodeRef}\n $disabled={disabled}\n $error={error || !!validationError}\n $readOnly={readOnly}\n onBlur={handleBlur}\n role=\"group\"\n >\n <VisuallyHidden id={startLabelId}>Start time</VisuallyHidden>\n <VisuallyHidden id={endLabelId}>End time</VisuallyHidden>\n\n <RangeInputInnerContainer\n error={error || !!validationError}\n currentActive={\n activeTimeSelector === null ? \"none\" : activeTimeSelector\n }\n >\n {/* From */}\n <SelectorInput\n ref={startInputRef}\n onFocus={() => handleInputFocus(\"start\")}\n placeholder={\n activeTimeSelector === \"start\" ? \"hh:mm\" : \"From\"\n }\n onChange={(e) => setStartTimeVal(e.target.value)}\n value={startTimeVal}\n readOnly={readOnly || disabled}\n data-testid={\n otherProps[\"data-testid\"]\n ? `${otherProps[\"data-testid\"]}-timepicker-selector-start`\n : \"timepicker-selector-start\"\n }\n onClick={() => handleInputClick(\"start\")}\n onKeyDown={handleKeyDownEvent}\n autoComplete=\"off\"\n type=\"text\"\n role=\"combobox\"\n aria-labelledby={getInputLabelledBy(\"start\")}\n aria-describedby={getInputDescribedBy()}\n aria-expanded={\n dropdownOpen && activeTimeSelector === \"start\"\n }\n aria-controls={listboxId}\n aria-autocomplete=\"list\"\n aria-invalid={error || ariaInvalid || !!validationError}\n aria-disabled={disabled}\n aria-readonly={readOnly}\n $disabled={disabled}\n />\n {/* To */}\n <SelectorInput\n ref={endInputRef}\n onFocus={() => handleInputFocus(\"end\")}\n placeholder={activeTimeSelector === \"end\" ? \"hh:mm\" : \"To\"}\n onChange={(e) => setEndTimeVal(e.target.value)}\n value={endTimeVal}\n readOnly={readOnly || disabled}\n data-testid={\n otherProps[\"data-testid\"]\n ? `${otherProps[\"data-testid\"]}-timepicker-selector-end`\n : \"timepicker-selector-end\"\n }\n onClick={() => handleInputClick(\"end\")}\n onKeyDown={handleKeyDownEvent}\n autoComplete=\"off\"\n type=\"text\"\n role=\"combobox\"\n aria-labelledby={getInputLabelledBy(\"end\")}\n aria-describedby={getInputDescribedBy()}\n aria-expanded={dropdownOpen && activeTimeSelector === \"end\"}\n aria-controls={listboxId}\n aria-autocomplete=\"list\"\n aria-invalid={\n error || ariaInvalid || !!validationError || undefined\n }\n aria-disabled={disabled || undefined}\n aria-readonly={readOnly || undefined}\n $disabled={disabled}\n />\n </RangeInputInnerContainer>\n {renderClearButton()}\n </TimeFieldContainer>\n );\n\n const renderError = () =>\n // Only display internal error message if user does not provide one\n !error &&\n validationError && (\n <ErrorMessageContainer>\n <ErrorIcon aria-hidden />\n <ErrorMessage\n id={errorId}\n tabIndex={0}\n data-testid={id ? `${id}-error-message` : \"error-message\"}\n >\n {validationError}\n </ErrorMessage>\n </ErrorMessageContainer>\n );\n\n return (\n <Wrapper id={id} {...otherProps}>\n <DropdownListState>\n <ElementWithDropdown\n enabled={!readOnly && !disabled}\n isOpen={dropdownOpen}\n renderElement={renderElement}\n renderDropdown={renderDropdown}\n onClose={handleClose}\n onDismiss={handleDismiss}\n offset={8}\n alignment={alignment}\n fitAvailableHeight\n customZIndex={dropdownZIndex}\n rootNode={dropdownRootNode}\n />\n </DropdownListState>\n {renderError()}\n </Wrapper>\n );\n};\n"],"names":["ComboboxPicker","_a","id","disabled","error","value","format","readOnly","onChange","onFocus","onBlur","alignment","dropdownZIndex","startLimit","endLimit","initialScrollStartTime","initialScrollEndTime","interval","dropdownRootNode","ariaLabelledBy","ariaDescribedBy","ariaInvalid","otherProps","__rest","internalId","useId","activeTimeSelector","setActiveTimeSelector","useState","dropdownOpen","setDropdownOpen","validationError","setValidationError","startTimeVal","setStartTimeVal","endTimeVal","setEndTimeVal","initialStartTimeVal","setInitialStartTimeVal","initialEndTimeVal","setInitialEndTimeVal","nodeRef","useRef","startInputRef","endInputRef","listboxId","startLabelId","endLabelId","errorId","startOptions","useMemo","TimeHelper","generateTimings","endOptions","flooredStartVal","findClosestFlooredTime","slice","indexOf","parseInput","useCallback","input","parsedInitialStartScrollTime","parsedInitialEndScrollTime","useEffect","start","end","_b","undefined","to24Hour","document","activeElement","current","getDropdownAriaLabel","getInputLabelledBy","type","concatIds","getInputDescribedBy","handleInputFocus","selector","handleInputClick","select","handleKeyDownEvent","event","code","handleStartTime","handleEndTime","blur","handleTimeChange","goToNextInput","triggerOnBlur","startInput","endInput","_c","handleClear","stopPropagation","handleBlur","target","relatedTarget","isFloatingElement","matches","call","isInsideNode","contains","renderClearButton","length","_jsx","ClearIconContainer","onClick","children","ClearIcon","_jsxs","Wrapper","Object","assign","DropdownListState","ElementWithDropdown","enabled","isOpen","renderElement","TimeFieldContainer","ref","$error","$readOnly","role","VisuallyHidden","RangeInputInnerContainer","currentActive","SelectorInput","placeholder","e","onKeyDown","autoComplete","$disabled","renderDropdown","startScrollTime","DropdownList","listItems","onSelectItem","selectedItems","topScrollItem","ariaLabel","disableItemFocus","matchElementWidth","endScrollTime","onClose","reason","onDismiss","focus","offset","fitAvailableHeight","customZIndex","rootNode","ErrorMessageContainer","ErrorIcon","ErrorMessage","tabIndex"],"mappings":"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"}
@@ -26,14 +26,18 @@ export declare const TimeContainer: import("styled-components/dist/types").IStyl
26
26
  as?: import("styled-components").WebTarget | undefined;
27
27
  forwardedAs?: import("styled-components").WebTarget | undefined;
28
28
  }, never>>> & string;
29
- export declare const SelectorInput: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<Omit<import("styled-components").FastOmit<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "$variant"> & import("../shared/input-wrapper").InputStyleProps, never> & Partial<Pick<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "$variant"> & import("../shared/input-wrapper").InputStyleProps, never>> & {
29
+ export declare const SelectorInput: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<Omit<import("styled-components").FastOmit<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "$variant"> & import("../shared/input-wrapper").InputStyleProps, never> & Partial<Pick<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "$variant"> & import("../shared/input-wrapper").InputStyleProps, never>> & {
30
30
  as?: import("styled-components").WebTarget | undefined;
31
31
  forwardedAs?: import("styled-components").WebTarget | undefined;
32
32
  }, "ref"> & {
33
33
  ref?: ((instance: HTMLInputElement | null) => void) | import("react").RefObject<HTMLInputElement> | null | undefined;
34
- }, never> & Partial<Pick<Omit<import("styled-components").FastOmit<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "$variant"> & import("../shared/input-wrapper").InputStyleProps, never> & Partial<Pick<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "$variant"> & import("../shared/input-wrapper").InputStyleProps, never>> & {
34
+ }, "$disabled"> & {
35
+ $disabled?: boolean | undefined;
36
+ }, never> & Partial<Pick<import("styled-components").FastOmit<Omit<import("styled-components").FastOmit<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "$variant"> & import("../shared/input-wrapper").InputStyleProps, never> & Partial<Pick<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "$variant"> & import("../shared/input-wrapper").InputStyleProps, never>> & {
35
37
  as?: import("styled-components").WebTarget | undefined;
36
38
  forwardedAs?: import("styled-components").WebTarget | undefined;
37
39
  }, "ref"> & {
38
40
  ref?: ((instance: HTMLInputElement | null) => void) | import("react").RefObject<HTMLInputElement> | null | undefined;
41
+ }, "$disabled"> & {
42
+ $disabled?: boolean | undefined;
39
43
  }, never>>> & string;
@@ -1,11 +1,15 @@
1
- import p from"styled-components";import{InputWrapper as e,BasicInput as i}from"../shared/input-wrapper/input-wrapper.js";import{Spacing as r}from"../theme/index.js";const t=p.div`
1
+ import e,{css as o}from"styled-components";import{InputWrapper as r,BasicInput as t}from"../shared/input-wrapper/input-wrapper.js";import{Spacing as i,Colour as p}from"../theme/index.js";const s=e.div`
2
2
  position: relative;
3
- `,o=p(e)`
3
+ `,l=e(r)`
4
4
  height: 3rem;
5
- gap: ${r["spacing-8"]};
6
- `,m=p(i)`
5
+ gap: ${i["spacing-8"]};
6
+ `,a=e(t)`
7
7
  display: block;
8
8
  width: 100%;
9
9
  flex: 1;
10
- `;export{m as SelectorInput,o as TimeContainer,t as Wrapper};
10
+ ${e=>e.$disabled&&o`
11
+ color: ${p["text-subtler"]};
12
+ cursor: not-allowed;
13
+ `}
14
+ `;export{a as SelectorInput,l as TimeContainer,s as Wrapper};
11
15
  //# sourceMappingURL=common.styles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"common.styles.js","sources":["../../src/time-range-picker/common.styles.tsx"],"sourcesContent":["import styled from \"styled-components\";\nimport {\n BasicInput,\n InputWrapper,\n} from \"../shared/input-wrapper/input-wrapper\";\nimport { Spacing } from \"../theme\";\n\n// =============================================================================\n// STYLING\n// =============================================================================\nexport const Wrapper = styled.div`\n position: relative;\n`;\n\nexport const TimeContainer = styled(InputWrapper)`\n height: 3rem;\n gap: ${Spacing[\"spacing-8\"]};\n`;\n\nexport const SelectorInput = styled(BasicInput)`\n display: block;\n width: 100%;\n flex: 1;\n`;\n"],"names":["Wrapper","styled","div","TimeContainer","InputWrapper","Spacing","SelectorInput","BasicInput"],"mappings":"qKAUO,MAAMA,EAAUC,EAAOC,GAAG;;EAIpBC,EAAgBF,EAAOG,EAAa;;WAEtCC,EAAQ;EAGNC,EAAgBL,EAAOM,EAAW;;;;"}
1
+ {"version":3,"file":"common.styles.js","sources":["../../src/time-range-picker/common.styles.tsx"],"sourcesContent":["import styled, { css } from \"styled-components\";\nimport {\n BasicInput,\n InputWrapper,\n} from \"../shared/input-wrapper/input-wrapper\";\nimport { Colour, Spacing } from \"../theme\";\n\n// =============================================================================\n// STYLING\n// =============================================================================\nexport const Wrapper = styled.div`\n position: relative;\n`;\n\nexport const TimeContainer = styled(InputWrapper)`\n height: 3rem;\n gap: ${Spacing[\"spacing-8\"]};\n`;\n\nexport const SelectorInput = styled(BasicInput)<{\n $disabled?: boolean | undefined;\n}>`\n display: block;\n width: 100%;\n flex: 1;\n ${(props) =>\n props.$disabled &&\n css`\n color: ${Colour[\"text-subtler\"]};\n cursor: not-allowed;\n `}\n`;\n"],"names":["Wrapper","styled","div","TimeContainer","InputWrapper","Spacing","SelectorInput","BasicInput","props","$disabled","css","Colour"],"mappings":"2LAUO,MAAMA,EAAUC,EAAOC,GAAG;;EAIpBC,EAAgBF,EAAOG,EAAa;;WAEtCC,EAAQ;EAGNC,EAAgBL,EAAOM,EAElC;;;;MAIKC,GACCA,EAAMC,WACNC,CAAG;qBACUC,EAAO;;;"}
@@ -1,2 +1,2 @@
1
- import{__rest as e}from"../../_virtual/_tslib.js";import{jsx as r,jsxs as a}from"react/jsx-runtime";import{useState as o,useRef as i,useEffect as t}from"react";import{concatIds as l}from"../../shared/accessibility/index.js";import{ElementWithDropdown as n}from"../../shared/dropdown-wrapper/element-with-dropdown.js";import{RangeInputInnerContainer as d}from"../../shared/range-input-inner-container/range-input-inner-container.js";import{TimepickerDropdown as s}from"../../shared/timepicker-dropdown/timepicker-dropdown.js";import"../../util/calendar-helper.js";import"../../util/date-helper.js";import"../../util/date-input-helper.js";import{useId as c}from"../../util/simple-id-generator.js";import"../../util/string-helper.js";import"@react-aria/live-announcer";import{TimeHelper as u}from"../../util/time-helper.js";import{Wrapper as m,TimeContainer as p,SelectorInput as b}from"../common.styles.js";const v=v=>{var{id:f,disabled:g=!1,error:h,value:y,format:k="24hr",readOnly:j,onChange:w,onFocus:F,onBlur:x,alignment:$="left",dropdownZIndex:C,dropdownRootNode:O,"aria-labelledby":B,"aria-describedby":D,"aria-invalid":I}=v,T=e(v,["id","disabled","error","value","format","readOnly","onChange","onFocus","onBlur","alignment","dropdownZIndex","dropdownRootNode","aria-labelledby","aria-describedby","aria-invalid"]);const[N,R]=o(!1),[S,Z]=o("none"),[E,V]=o(""),[_,A]=o(""),[P,q]=o(!1),z=!j&&!g,G=i(null),H=c(),J=`${H}-start-label`,K=`${H}-end-label`,L=e=>l(B,"start"===e?J:K),M=()=>l(D);t((()=>{y&&(V(y.start),A(y.end))}),[y]);const Q=e=>{z&&(P||N||null==F||F(),q(!0),Z(e),R(!0))},U=e=>{var r,a;const o=!!(null==e?void 0:e.keepFocus),i=null!==(r=null==e?void 0:e.triggerBlur)&&void 0!==r?r:!o;R(!1),Z("none"),q(o),i&&(null==x||x()),o&&(null===(a=G.current)||void 0===a||a.focus())},W=e=>{var r,a,o;if(!P||N)return;const i=e.relatedTarget,t=(null===(r=null==i?void 0:i.matches)||void 0===r?void 0:r.call(i,"[data-floating-ui-focusable]"))||(null===(a=null==i?void 0:i.matches)||void 0===a?void 0:a.call(i,"[data-floating-ui-focus-guard]"));!(!i||!(null===(o=G.current)||void 0===o?void 0:o.contains(i)))||t||(q(!1),null==x||x())},X=e=>{V(e),null==w||w({start:e,end:_}),Z("end"),R(!0),q(!0)},Y=e=>{A(e),null==w||w({start:E,end:e}),""===E?(Z("start"),R(!0),q(!0)):U({keepFocus:!0})};return r(m,Object.assign({id:f},T,{children:r(n,{enabled:z,isOpen:N,renderElement:()=>r(p,{ref:G,tabIndex:-1,onBlur:W,"data-testid":"timepicker-container",role:"group",$disabled:g,$error:h,$readOnly:j,$focused:P,children:a(d,{error:h,currentActive:S,children:[r(b,{onFocus:()=>Q("start"),onClick:()=>Q("start"),readOnly:!0,placeholder:"From",value:u.formatDisplayValue(E,k),"data-testid":T["data-testid"]?`${T["data-testid"]}-timepicker-selector-from`:"timepicker-selector-from",role:"combobox","aria-expanded":!g&&!j&&N,"aria-invalid":h||I,"aria-disabled":g,"aria-readonly":j,"aria-labelledby":L("start"),"aria-describedby":M()}),r(b,{onClick:()=>Q("end"),readOnly:!0,placeholder:"To",value:u.formatDisplayValue(_,k),"data-testid":T["data-testid"]?`${T["data-testid"]}-timepicker-selector-to`:"timepicker-selector-to",role:"combobox","aria-expanded":!g&&!j&&N,"aria-invalid":h||I||void 0,"aria-disabled":g||void 0,"aria-readonly":j||void 0,"aria-labelledby":L("end"),"aria-describedby":M()})]})}),renderDropdown:({styles:e,setFloatingRef:o,getFloatingProps:i})=>N?a("div",Object.assign({ref:o,style:e,role:"dialog","aria-label":"start"===S?"Selecting for: Start time":"end"===S?"Selecting for: End time":void 0},i(),{children:["start"===S&&r(s,{id:f?`${f}-start`:void 0,show:!0,value:E,format:k,onCancel:()=>U({keepFocus:!0}),onChange:X}),"end"===S&&r(s,{id:f?`${f}-end`:void 0,show:!0,value:_,format:k,onCancel:()=>U({keepFocus:!1}),onChange:Y})]}),S):null,onClose:()=>U({keepFocus:!1}),onDismiss:()=>U({keepFocus:!0}),clickToToggle:!1,offset:8,alignment:$,customZIndex:C,rootNode:O})}))};export{v as DialPicker};
1
+ import{__rest as e}from"../../_virtual/_tslib.js";import{jsx as r,jsxs as a}from"react/jsx-runtime";import{useState as o,useRef as i,useEffect as t}from"react";import{concatIds as l}from"../../shared/accessibility/index.js";import{ElementWithDropdown as n}from"../../shared/dropdown-wrapper/element-with-dropdown.js";import{RangeInputInnerContainer as d}from"../../shared/range-input-inner-container/range-input-inner-container.js";import{TimepickerDropdown as s}from"../../shared/timepicker-dropdown/timepicker-dropdown.js";import"../../util/calendar-helper.js";import"../../util/date-helper.js";import"../../util/date-input-helper.js";import{useId as c}from"../../util/simple-id-generator.js";import"../../util/string-helper.js";import"@react-aria/live-announcer";import{TimeHelper as u}from"../../util/time-helper.js";import{Wrapper as m,TimeContainer as p,SelectorInput as b}from"../common.styles.js";const v=v=>{var{id:f,disabled:g=!1,error:h,value:y,format:k="24hr",readOnly:j,onChange:w,onFocus:F,onBlur:$,alignment:x="left",dropdownZIndex:C,dropdownRootNode:O,"aria-labelledby":B,"aria-describedby":D,"aria-invalid":I}=v,T=e(v,["id","disabled","error","value","format","readOnly","onChange","onFocus","onBlur","alignment","dropdownZIndex","dropdownRootNode","aria-labelledby","aria-describedby","aria-invalid"]);const[N,R]=o(!1),[S,Z]=o("none"),[E,V]=o(""),[_,A]=o(""),[P,q]=o(!1),z=!j&&!g,G=i(null),H=c(),J=`${H}-start-label`,K=`${H}-end-label`,L=e=>l(B,"start"===e?J:K),M=()=>l(D);t((()=>{y&&(V(y.start),A(y.end))}),[y]);const Q=e=>{z&&(P||N||null==F||F(),q(!0),Z(e),R(!0))},U=e=>{var r,a;const o=!!(null==e?void 0:e.keepFocus),i=null!==(r=null==e?void 0:e.triggerBlur)&&void 0!==r?r:!o;R(!1),Z("none"),q(o),i&&(null==$||$()),o&&(null===(a=G.current)||void 0===a||a.focus())},W=e=>{var r,a,o;if(!P||N)return;const i=e.relatedTarget,t=(null===(r=null==i?void 0:i.matches)||void 0===r?void 0:r.call(i,"[data-floating-ui-focusable]"))||(null===(a=null==i?void 0:i.matches)||void 0===a?void 0:a.call(i,"[data-floating-ui-focus-guard]"));!(!i||!(null===(o=G.current)||void 0===o?void 0:o.contains(i)))||t||(q(!1),null==$||$())},X=e=>{V(e),null==w||w({start:e,end:_}),Z("end"),R(!0),q(!0)},Y=e=>{A(e),null==w||w({start:E,end:e}),""===E?(Z("start"),R(!0),q(!0)):U({keepFocus:!0})};return r(m,Object.assign({id:f},T,{children:r(n,{enabled:z,isOpen:N,renderElement:()=>r(p,{ref:G,tabIndex:-1,onBlur:W,"data-testid":"timepicker-container",role:"group",$disabled:g,$error:h,$readOnly:j,$focused:P,children:a(d,{error:h,currentActive:S,children:[r(b,{onFocus:()=>Q("start"),onClick:()=>Q("start"),readOnly:!0,placeholder:"From",value:u.formatDisplayValue(E,k),"data-testid":T["data-testid"]?`${T["data-testid"]}-timepicker-selector-from`:"timepicker-selector-from",role:"combobox","aria-expanded":!g&&!j&&N,"aria-invalid":h||I,"aria-disabled":g,"aria-readonly":j,"aria-labelledby":L("start"),"aria-describedby":M(),$disabled:g}),r(b,{onClick:()=>Q("end"),readOnly:!0,placeholder:"To",value:u.formatDisplayValue(_,k),"data-testid":T["data-testid"]?`${T["data-testid"]}-timepicker-selector-to`:"timepicker-selector-to",role:"combobox","aria-expanded":!g&&!j&&N,"aria-invalid":h||I||void 0,"aria-disabled":g||void 0,"aria-readonly":j||void 0,"aria-labelledby":L("end"),"aria-describedby":M(),$disabled:g})]})}),renderDropdown:({styles:e,setFloatingRef:o,getFloatingProps:i})=>N?a("div",Object.assign({ref:o,style:e,role:"dialog","aria-label":"start"===S?"Selecting for: Start time":"end"===S?"Selecting for: End time":void 0},i(),{children:["start"===S&&r(s,{id:f?`${f}-start`:void 0,show:!0,value:E,format:k,onCancel:()=>U({keepFocus:!0}),onChange:X}),"end"===S&&r(s,{id:f?`${f}-end`:void 0,show:!0,value:_,format:k,onCancel:()=>U({keepFocus:!1}),onChange:Y})]}),S):null,onClose:()=>U({keepFocus:!1}),onDismiss:()=>U({keepFocus:!0}),clickToToggle:!1,offset:8,alignment:x,customZIndex:C,rootNode:O})}))};export{v as DialPicker};
2
2
  //# sourceMappingURL=dial-picker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dial-picker.js","sources":["../../../src/time-range-picker/dial-picker/dial-picker.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport { concatIds } from \"../../shared/accessibility\";\nimport {\n DropdownRenderProps,\n ElementWithDropdown,\n} from \"../../shared/dropdown-wrapper\";\nimport { RangeInputInnerContainer } from \"../../shared/range-input-inner-container\";\nimport { TimepickerDropdown } from \"../../shared/timepicker-dropdown/timepicker-dropdown\";\nimport { useId } from \"../../util\";\nimport { TimeHelper } from \"../../util/time-helper\";\nimport { SelectorInput, TimeContainer, Wrapper } from \"../common.styles\";\nimport { TimeRangePickerProps, TimeRangePickerValue } from \"../types\";\n\ntype Active = \"start\" | \"end\" | \"none\";\n\nexport const DialPicker = ({\n id,\n disabled = false,\n error,\n value,\n format = \"24hr\",\n readOnly,\n onChange,\n onFocus,\n onBlur,\n alignment = \"left\",\n dropdownZIndex,\n dropdownRootNode,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-invalid\": ariaInvalid,\n ...otherProps\n}: TimeRangePickerProps) => {\n // =============================================================================\n // CONST, STATE, REF\n // =============================================================================\n const [isOpen, setIsOpen] = useState(false);\n const [active, setActive] = useState<Active>(\"none\");\n const [startTimeVal, setStartTimeVal] = useState(\"\");\n const [endTimeVal, setEndTimeVal] = useState(\"\");\n const [focused, setFocused] = useState(false);\n\n const enabled = !readOnly && !disabled;\n const nodeRef = useRef<HTMLDivElement>(null);\n const internalId = useId();\n const startLabelId = `${internalId}-start-label`;\n const endLabelId = `${internalId}-end-label`;\n\n // =============================================================================\n // HELPER FUNCTIONS\n // =============================================================================\n const getDropdownAriaLabel = () => {\n if (active === \"start\") {\n return \"Selecting for: Start time\";\n }\n\n if (active === \"end\") {\n return \"Selecting for: End time\";\n }\n\n return undefined;\n };\n\n const getInputLabelledBy = (type: Exclude<Active, \"none\">) => {\n return concatIds(\n ariaLabelledBy,\n type === \"start\" ? startLabelId : endLabelId\n );\n };\n\n const getInputDescribedBy = () => {\n return concatIds(ariaDescribedBy);\n };\n // =============================================================================\n // EFFECTS\n // =============================================================================\n useEffect(() => {\n if (value) {\n setStartTimeVal(value.start);\n setEndTimeVal(value.end);\n }\n }, [value]);\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n const handleOpen = (next: Exclude<Active, \"none\">) => {\n if (!enabled) return;\n if (!focused && !isOpen) onFocus?.();\n setFocused(true);\n setActive(next);\n setIsOpen(true);\n };\n\n const handleClose = (opts?: {\n keepFocus?: boolean;\n triggerBlur?: boolean;\n }) => {\n const keepFocus = !!opts?.keepFocus;\n const triggerBlur = opts?.triggerBlur ?? !keepFocus;\n\n setIsOpen(false);\n setActive(\"none\");\n setFocused(keepFocus);\n\n if (triggerBlur) onBlur?.();\n\n if (keepFocus) nodeRef.current?.focus();\n };\n\n const handleContainerBlur = (\n event: React.FocusEvent<HTMLDivElement, Element>\n ) => {\n if (!focused || isOpen) return;\n\n const target = event.relatedTarget as HTMLElement | null;\n\n const isFloatingElement =\n target?.matches?.(\"[data-floating-ui-focusable]\") ||\n target?.matches?.(\"[data-floating-ui-focus-guard]\");\n const isInsideNode = !!(target && nodeRef.current?.contains(target));\n\n if (!isInsideNode && !isFloatingElement) {\n setFocused(false);\n onBlur?.();\n }\n };\n\n const handleStartTime = (value: string) => {\n setStartTimeVal(value);\n onChange?.({ start: value, end: endTimeVal } as TimeRangePickerValue);\n\n setActive(\"end\");\n setIsOpen(true);\n setFocused(true);\n };\n\n const handleEndTime = (value: string) => {\n setEndTimeVal(value);\n onChange?.({ start: startTimeVal, end: value } as TimeRangePickerValue);\n\n if (startTimeVal === \"\") {\n setActive(\"start\");\n setIsOpen(true);\n setFocused(true);\n } else {\n handleClose({ keepFocus: true });\n }\n };\n\n const renderElement = () => (\n <TimeContainer\n ref={nodeRef}\n tabIndex={-1}\n onBlur={handleContainerBlur}\n data-testid=\"timepicker-container\"\n role=\"group\"\n $disabled={disabled}\n $error={error}\n $readOnly={readOnly}\n $focused={focused}\n >\n <RangeInputInnerContainer error={error} currentActive={active}>\n <SelectorInput\n onFocus={() => handleOpen(\"start\")}\n onClick={() => handleOpen(\"start\")}\n readOnly\n placeholder=\"From\"\n value={TimeHelper.formatDisplayValue(startTimeVal, format)}\n data-testid={\n otherProps[\"data-testid\"]\n ? `${otherProps[\"data-testid\"]}-timepicker-selector-from`\n : \"timepicker-selector-from\"\n }\n role=\"combobox\"\n aria-expanded={!disabled && !readOnly ? isOpen : false}\n aria-invalid={error || ariaInvalid}\n aria-disabled={disabled}\n aria-readonly={readOnly}\n aria-labelledby={getInputLabelledBy(\"start\")}\n aria-describedby={getInputDescribedBy()}\n />\n <SelectorInput\n onClick={() => handleOpen(\"end\")}\n readOnly\n placeholder=\"To\"\n value={TimeHelper.formatDisplayValue(endTimeVal, format)}\n data-testid={\n otherProps[\"data-testid\"]\n ? `${otherProps[\"data-testid\"]}-timepicker-selector-to`\n : \"timepicker-selector-to\"\n }\n role=\"combobox\"\n aria-expanded={!disabled && !readOnly ? isOpen : false}\n aria-invalid={error || ariaInvalid || undefined}\n aria-disabled={disabled || undefined}\n aria-readonly={readOnly || undefined}\n aria-labelledby={getInputLabelledBy(\"end\")}\n aria-describedby={getInputDescribedBy()}\n />\n </RangeInputInnerContainer>\n </TimeContainer>\n );\n\n const renderDropdown = ({\n styles,\n setFloatingRef,\n getFloatingProps,\n }: DropdownRenderProps) => {\n if (!isOpen) return null;\n\n return (\n <div\n ref={setFloatingRef}\n style={styles}\n role=\"dialog\"\n key={active}\n aria-label={getDropdownAriaLabel()}\n {...getFloatingProps()}\n >\n {active === \"start\" && (\n <TimepickerDropdown\n id={id ? `${id}-start` : undefined}\n show\n value={startTimeVal}\n format={format}\n onCancel={() => handleClose({ keepFocus: true })}\n onChange={handleStartTime}\n />\n )}\n {active === \"end\" && (\n <TimepickerDropdown\n id={id ? `${id}-end` : undefined}\n show\n value={endTimeVal}\n format={format}\n onCancel={() => handleClose({ keepFocus: false })}\n onChange={handleEndTime}\n />\n )}\n </div>\n );\n };\n\n return (\n <Wrapper id={id} {...otherProps}>\n <ElementWithDropdown\n enabled={enabled}\n isOpen={isOpen}\n renderElement={renderElement}\n renderDropdown={renderDropdown}\n onClose={() => handleClose({ keepFocus: false })}\n onDismiss={() => handleClose({ keepFocus: true })}\n clickToToggle={false}\n offset={8}\n alignment={alignment}\n customZIndex={dropdownZIndex}\n rootNode={dropdownRootNode}\n />\n </Wrapper>\n );\n};\n"],"names":["DialPicker","_a","id","disabled","error","value","format","readOnly","onChange","onFocus","onBlur","alignment","dropdownZIndex","dropdownRootNode","ariaLabelledBy","ariaDescribedBy","ariaInvalid","otherProps","__rest","isOpen","setIsOpen","useState","active","setActive","startTimeVal","setStartTimeVal","endTimeVal","setEndTimeVal","focused","setFocused","enabled","nodeRef","useRef","internalId","useId","startLabelId","endLabelId","getInputLabelledBy","type","concatIds","getInputDescribedBy","useEffect","start","end","handleOpen","next","handleClose","opts","keepFocus","triggerBlur","_b","current","focus","handleContainerBlur","event","target","relatedTarget","isFloatingElement","matches","call","_c","contains","handleStartTime","handleEndTime","_jsx","Wrapper","Object","assign","children","ElementWithDropdown","renderElement","TimeContainer","ref","tabIndex","role","$error","$readOnly","_jsxs","RangeInputInnerContainer","currentActive","SelectorInput","onClick","placeholder","TimeHelper","formatDisplayValue","undefined","renderDropdown","styles","setFloatingRef","getFloatingProps","style","TimepickerDropdown","show","onCancel","onClose","onDismiss","clickToToggle","offset","customZIndex","rootNode"],"mappings":"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"}
1
+ {"version":3,"file":"dial-picker.js","sources":["../../../src/time-range-picker/dial-picker/dial-picker.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport { concatIds } from \"../../shared/accessibility\";\nimport {\n DropdownRenderProps,\n ElementWithDropdown,\n} from \"../../shared/dropdown-wrapper\";\nimport { RangeInputInnerContainer } from \"../../shared/range-input-inner-container\";\nimport { TimepickerDropdown } from \"../../shared/timepicker-dropdown/timepicker-dropdown\";\nimport { useId } from \"../../util\";\nimport { TimeHelper } from \"../../util/time-helper\";\nimport { SelectorInput, TimeContainer, Wrapper } from \"../common.styles\";\nimport { TimeRangePickerProps, TimeRangePickerValue } from \"../types\";\n\ntype Active = \"start\" | \"end\" | \"none\";\n\nexport const DialPicker = ({\n id,\n disabled = false,\n error,\n value,\n format = \"24hr\",\n readOnly,\n onChange,\n onFocus,\n onBlur,\n alignment = \"left\",\n dropdownZIndex,\n dropdownRootNode,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-invalid\": ariaInvalid,\n ...otherProps\n}: TimeRangePickerProps) => {\n // =============================================================================\n // CONST, STATE, REF\n // =============================================================================\n const [isOpen, setIsOpen] = useState(false);\n const [active, setActive] = useState<Active>(\"none\");\n const [startTimeVal, setStartTimeVal] = useState(\"\");\n const [endTimeVal, setEndTimeVal] = useState(\"\");\n const [focused, setFocused] = useState(false);\n\n const enabled = !readOnly && !disabled;\n const nodeRef = useRef<HTMLDivElement>(null);\n const internalId = useId();\n const startLabelId = `${internalId}-start-label`;\n const endLabelId = `${internalId}-end-label`;\n\n // =============================================================================\n // HELPER FUNCTIONS\n // =============================================================================\n const getDropdownAriaLabel = () => {\n if (active === \"start\") {\n return \"Selecting for: Start time\";\n }\n\n if (active === \"end\") {\n return \"Selecting for: End time\";\n }\n\n return undefined;\n };\n\n const getInputLabelledBy = (type: Exclude<Active, \"none\">) => {\n return concatIds(\n ariaLabelledBy,\n type === \"start\" ? startLabelId : endLabelId\n );\n };\n\n const getInputDescribedBy = () => {\n return concatIds(ariaDescribedBy);\n };\n // =============================================================================\n // EFFECTS\n // =============================================================================\n useEffect(() => {\n if (value) {\n setStartTimeVal(value.start);\n setEndTimeVal(value.end);\n }\n }, [value]);\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n const handleOpen = (next: Exclude<Active, \"none\">) => {\n if (!enabled) return;\n if (!focused && !isOpen) onFocus?.();\n setFocused(true);\n setActive(next);\n setIsOpen(true);\n };\n\n const handleClose = (opts?: {\n keepFocus?: boolean;\n triggerBlur?: boolean;\n }) => {\n const keepFocus = !!opts?.keepFocus;\n const triggerBlur = opts?.triggerBlur ?? !keepFocus;\n\n setIsOpen(false);\n setActive(\"none\");\n setFocused(keepFocus);\n\n if (triggerBlur) onBlur?.();\n\n if (keepFocus) nodeRef.current?.focus();\n };\n\n const handleContainerBlur = (\n event: React.FocusEvent<HTMLDivElement, Element>\n ) => {\n if (!focused || isOpen) return;\n\n const target = event.relatedTarget as HTMLElement | null;\n\n const isFloatingElement =\n target?.matches?.(\"[data-floating-ui-focusable]\") ||\n target?.matches?.(\"[data-floating-ui-focus-guard]\");\n const isInsideNode = !!(target && nodeRef.current?.contains(target));\n\n if (!isInsideNode && !isFloatingElement) {\n setFocused(false);\n onBlur?.();\n }\n };\n\n const handleStartTime = (value: string) => {\n setStartTimeVal(value);\n onChange?.({ start: value, end: endTimeVal } as TimeRangePickerValue);\n\n setActive(\"end\");\n setIsOpen(true);\n setFocused(true);\n };\n\n const handleEndTime = (value: string) => {\n setEndTimeVal(value);\n onChange?.({ start: startTimeVal, end: value } as TimeRangePickerValue);\n\n if (startTimeVal === \"\") {\n setActive(\"start\");\n setIsOpen(true);\n setFocused(true);\n } else {\n handleClose({ keepFocus: true });\n }\n };\n\n const renderElement = () => (\n <TimeContainer\n ref={nodeRef}\n tabIndex={-1}\n onBlur={handleContainerBlur}\n data-testid=\"timepicker-container\"\n role=\"group\"\n $disabled={disabled}\n $error={error}\n $readOnly={readOnly}\n $focused={focused}\n >\n <RangeInputInnerContainer error={error} currentActive={active}>\n <SelectorInput\n onFocus={() => handleOpen(\"start\")}\n onClick={() => handleOpen(\"start\")}\n readOnly\n placeholder=\"From\"\n value={TimeHelper.formatDisplayValue(startTimeVal, format)}\n data-testid={\n otherProps[\"data-testid\"]\n ? `${otherProps[\"data-testid\"]}-timepicker-selector-from`\n : \"timepicker-selector-from\"\n }\n role=\"combobox\"\n aria-expanded={!disabled && !readOnly ? isOpen : false}\n aria-invalid={error || ariaInvalid}\n aria-disabled={disabled}\n aria-readonly={readOnly}\n aria-labelledby={getInputLabelledBy(\"start\")}\n aria-describedby={getInputDescribedBy()}\n $disabled={disabled}\n />\n <SelectorInput\n onClick={() => handleOpen(\"end\")}\n readOnly\n placeholder=\"To\"\n value={TimeHelper.formatDisplayValue(endTimeVal, format)}\n data-testid={\n otherProps[\"data-testid\"]\n ? `${otherProps[\"data-testid\"]}-timepicker-selector-to`\n : \"timepicker-selector-to\"\n }\n role=\"combobox\"\n aria-expanded={!disabled && !readOnly ? isOpen : false}\n aria-invalid={error || ariaInvalid || undefined}\n aria-disabled={disabled || undefined}\n aria-readonly={readOnly || undefined}\n aria-labelledby={getInputLabelledBy(\"end\")}\n aria-describedby={getInputDescribedBy()}\n $disabled={disabled}\n />\n </RangeInputInnerContainer>\n </TimeContainer>\n );\n\n const renderDropdown = ({\n styles,\n setFloatingRef,\n getFloatingProps,\n }: DropdownRenderProps) => {\n if (!isOpen) return null;\n\n return (\n <div\n ref={setFloatingRef}\n style={styles}\n role=\"dialog\"\n key={active}\n aria-label={getDropdownAriaLabel()}\n {...getFloatingProps()}\n >\n {active === \"start\" && (\n <TimepickerDropdown\n id={id ? `${id}-start` : undefined}\n show\n value={startTimeVal}\n format={format}\n onCancel={() => handleClose({ keepFocus: true })}\n onChange={handleStartTime}\n />\n )}\n {active === \"end\" && (\n <TimepickerDropdown\n id={id ? `${id}-end` : undefined}\n show\n value={endTimeVal}\n format={format}\n onCancel={() => handleClose({ keepFocus: false })}\n onChange={handleEndTime}\n />\n )}\n </div>\n );\n };\n\n return (\n <Wrapper id={id} {...otherProps}>\n <ElementWithDropdown\n enabled={enabled}\n isOpen={isOpen}\n renderElement={renderElement}\n renderDropdown={renderDropdown}\n onClose={() => handleClose({ keepFocus: false })}\n onDismiss={() => handleClose({ keepFocus: true })}\n clickToToggle={false}\n offset={8}\n alignment={alignment}\n customZIndex={dropdownZIndex}\n rootNode={dropdownRootNode}\n />\n </Wrapper>\n );\n};\n"],"names":["DialPicker","_a","id","disabled","error","value","format","readOnly","onChange","onFocus","onBlur","alignment","dropdownZIndex","dropdownRootNode","ariaLabelledBy","ariaDescribedBy","ariaInvalid","otherProps","__rest","isOpen","setIsOpen","useState","active","setActive","startTimeVal","setStartTimeVal","endTimeVal","setEndTimeVal","focused","setFocused","enabled","nodeRef","useRef","internalId","useId","startLabelId","endLabelId","getInputLabelledBy","type","concatIds","getInputDescribedBy","useEffect","start","end","handleOpen","next","handleClose","opts","keepFocus","triggerBlur","_b","current","focus","handleContainerBlur","event","target","relatedTarget","isFloatingElement","matches","call","_c","contains","handleStartTime","handleEndTime","_jsx","Wrapper","Object","assign","children","ElementWithDropdown","renderElement","TimeContainer","ref","tabIndex","role","$error","$readOnly","_jsxs","RangeInputInnerContainer","currentActive","SelectorInput","onClick","placeholder","TimeHelper","formatDisplayValue","$disabled","undefined","renderDropdown","styles","setFloatingRef","getFloatingProps","style","TimepickerDropdown","show","onCancel","onClose","onDismiss","clickToToggle","offset","customZIndex","rootNode"],"mappings":"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"}
@@ -1,7 +1,11 @@
1
- import r from"styled-components";import{BasicInput as o}from"../shared/input-wrapper/input-wrapper.js";r.div`
1
+ import r,{css as o}from"styled-components";import{BasicInput as e}from"../shared/input-wrapper/input-wrapper.js";import{Colour as t}from"../theme/index.js";r.div`
2
2
  position: relative;
3
- `;const t=r(o)`
3
+ `;const i=r(e)`
4
4
  height: calc(3rem - 2px); // exclude top and bottom borders
5
5
  cursor: inherit;
6
- `;export{t as InputSelectorElement};
6
+ ${r=>r.$disabled&&o`
7
+ color: ${t["text-subtler"]};
8
+ cursor: not-allowed;
9
+ `}
10
+ `;export{i as InputSelectorElement};
7
11
  //# sourceMappingURL=timepicker.styles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"timepicker.styles.js","sources":["../../src/timepicker/timepicker.styles.tsx"],"sourcesContent":["import styled from \"styled-components\";\nimport { BasicInput } from \"../shared/input-wrapper/input-wrapper\";\n\n// =============================================================================\n// STYLING\n// =============================================================================\nexport const Wrapper = styled.div`\n position: relative;\n`;\n\nexport const InputSelectorElement = styled(BasicInput)<{\n $disabled?: boolean | undefined;\n}>`\n height: calc(3rem - 2px); // exclude top and bottom borders\n cursor: inherit;\n`;\n"],"names":["styled","div","InputSelectorElement","BasicInput"],"mappings":"uGAMuBA,EAAOC,GAAG;;QAIpBC,EAAuBF,EAAOG,EAEzC;;;"}
1
+ {"version":3,"file":"timepicker.styles.js","sources":["../../src/timepicker/timepicker.styles.tsx"],"sourcesContent":["import styled, { css } from \"styled-components\";\nimport { BasicInput } from \"../shared/input-wrapper/input-wrapper\";\nimport { Colour } from \"../theme\";\n\n// =============================================================================\n// STYLING\n// =============================================================================\nexport const Wrapper = styled.div`\n position: relative;\n`;\n\nexport const InputSelectorElement = styled(BasicInput)<{\n $disabled?: boolean | undefined;\n}>`\n height: calc(3rem - 2px); // exclude top and bottom borders\n cursor: inherit;\n ${(props) =>\n props.$disabled &&\n css`\n color: ${Colour[\"text-subtler\"]};\n cursor: not-allowed;\n `}\n`;\n"],"names":["styled","div","InputSelectorElement","BasicInput","props","$disabled","css","Colour"],"mappings":"4JAOuBA,EAAOC,GAAG;;QAIpBC,EAAuBF,EAAOG,EAEzC;;;MAGKC,GACCA,EAAMC,WACNC,CAAG;qBACUC,EAAO;;;"}
@@ -1,6 +1,6 @@
1
1
  import{ExternalIcon as e}from"@lifesg/react-icons/external";import t,{css as r}from"styled-components";import{Colour as i}from"../theme/index.js";import{createTypographyStyles as o,getTextStyle as l}from"./helper.js";const n=t.div`
2
2
  ${e=>o(e.$textStyle,e.$weight,e.$inline,e.$paragraph,e.$maxLines)}
3
- `,m=t.a`
3
+ `,a=t.a`
4
4
  ${e=>{var t;return r`
5
5
  ${l(e.$textStyle,e.$weight||"regular")}
6
6
  color: ${i.hyperlink};
@@ -12,10 +12,10 @@ import{ExternalIcon as e}from"@lifesg/react-icons/external";import t,{css as r}f
12
12
  color: ${i["text-hover"]};
13
13
  }
14
14
  `}}
15
- `,a=t(e)`
15
+ `,m=t(e)`
16
16
  height: 1lh;
17
17
  width: 1em;
18
18
  margin-left: 0.4em;
19
- vertical-align: middle;
20
- `;export{m as HyperlinkBase,a as StyledExternalIcon,n as TypographyBase};
19
+ vertical-align: top;
20
+ `;export{a as HyperlinkBase,m as StyledExternalIcon,n as TypographyBase};
21
21
  //# sourceMappingURL=typography.styles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"typography.styles.js","sources":["../../src/typography/typography.styles.tsx"],"sourcesContent":["import { ExternalIcon } from \"@lifesg/react-icons/external\";\nimport styled, { css } from \"styled-components\";\nimport { Colour } from \"../theme\";\nimport { TypographySizeType } from \"../theme/font/types\";\nimport { createTypographyStyles, getTextStyle } from \"./helper\";\nimport { TypographyWeight } from \"./types\";\n\n// =============================================================================\n// STYLE INTERFACES, transient props are denoted with $\n// See more https://styled-components.com/docs/api#transient-props\n// =============================================================================\ninterface StyledProps {\n $textStyle: TypographySizeType;\n $weight?: TypographyWeight | undefined;\n $inline?: boolean | undefined;\n $paragraph?: boolean | undefined;\n $maxLines?: number | undefined;\n $underlineStyle?: string | undefined;\n}\n\n// =============================================================================\n// STYLING\n// =============================================================================\nexport const TypographyBase = styled.div<StyledProps>`\n ${(props) =>\n createTypographyStyles(\n props.$textStyle,\n props.$weight,\n props.$inline,\n props.$paragraph,\n props.$maxLines\n )}\n`;\n\nexport const HyperlinkBase = styled.a<StyledProps>`\n ${(props) => css`\n ${getTextStyle(props.$textStyle, props.$weight || \"regular\")}\n color: ${Colour.hyperlink};\n text-decoration: ${props.$underlineStyle ?? \"underline\"};\n\n &:hover,\n &:active,\n &:focus {\n color: ${Colour[\"text-hover\"]};\n }\n `}\n`;\n\nexport const StyledExternalIcon = styled(ExternalIcon)`\n height: 1lh;\n width: 1em;\n margin-left: 0.4em;\n vertical-align: middle;\n`;\n"],"names":["TypographyBase","styled","div","props","createTypographyStyles","$textStyle","$weight","$inline","$paragraph","$maxLines","HyperlinkBase","a","css","getTextStyle","Colour","hyperlink","_a","$underlineStyle","StyledExternalIcon","ExternalIcon"],"mappings":"yNAuBO,MAAMA,EAAiBC,EAAOC,GAAgB;MAC9CC,GACCC,EACID,EAAME,WACNF,EAAMG,QACNH,EAAMI,QACNJ,EAAMK,WACNL,EAAMM;EAILC,EAAgBT,EAAOU,CAAc;MAC3CR,UAAU,OAAAS,CAAG;UACVC,EAAaV,EAAME,WAAYF,EAAMG,SAAW;iBACzCQ,EAAOC;2BACwB,QAArBC,EAAAb,EAAMc,uBAAe,IAAAD,EAAAA,EAAI;;;;;qBAK/BF,EAAO;;KAEvB;EAGQI,EAAqBjB,EAAOkB,EAAa;;;;;"}
1
+ {"version":3,"file":"typography.styles.js","sources":["../../src/typography/typography.styles.tsx"],"sourcesContent":["import { ExternalIcon } from \"@lifesg/react-icons/external\";\nimport styled, { css } from \"styled-components\";\nimport { Colour } from \"../theme\";\nimport { TypographySizeType } from \"../theme/font/types\";\nimport { createTypographyStyles, getTextStyle } from \"./helper\";\nimport { TypographyWeight } from \"./types\";\n\n// =============================================================================\n// STYLE INTERFACES, transient props are denoted with $\n// See more https://styled-components.com/docs/api#transient-props\n// =============================================================================\ninterface StyledProps {\n $textStyle: TypographySizeType;\n $weight?: TypographyWeight | undefined;\n $inline?: boolean | undefined;\n $paragraph?: boolean | undefined;\n $maxLines?: number | undefined;\n $underlineStyle?: string | undefined;\n}\n\n// =============================================================================\n// STYLING\n// =============================================================================\nexport const TypographyBase = styled.div<StyledProps>`\n ${(props) =>\n createTypographyStyles(\n props.$textStyle,\n props.$weight,\n props.$inline,\n props.$paragraph,\n props.$maxLines\n )}\n`;\n\nexport const HyperlinkBase = styled.a<StyledProps>`\n ${(props) => css`\n ${getTextStyle(props.$textStyle, props.$weight || \"regular\")}\n color: ${Colour.hyperlink};\n text-decoration: ${props.$underlineStyle ?? \"underline\"};\n\n &:hover,\n &:active,\n &:focus {\n color: ${Colour[\"text-hover\"]};\n }\n `}\n`;\n\nexport const StyledExternalIcon = styled(ExternalIcon)`\n height: 1lh;\n width: 1em;\n margin-left: 0.4em;\n vertical-align: top;\n`;\n"],"names":["TypographyBase","styled","div","props","createTypographyStyles","$textStyle","$weight","$inline","$paragraph","$maxLines","HyperlinkBase","a","css","getTextStyle","Colour","hyperlink","_a","$underlineStyle","StyledExternalIcon","ExternalIcon"],"mappings":"yNAuBO,MAAMA,EAAiBC,EAAOC,GAAgB;MAC9CC,GACCC,EACID,EAAME,WACNF,EAAMG,QACNH,EAAMI,QACNJ,EAAMK,WACNL,EAAMM;EAILC,EAAgBT,EAAOU,CAAc;MAC3CR,UAAU,OAAAS,CAAG;UACVC,EAAaV,EAAME,WAAYF,EAAMG,SAAW;iBACzCQ,EAAOC;2BACwB,QAArBC,EAAAb,EAAMc,uBAAe,IAAAD,EAAAA,EAAI;;;;;qBAK/BF,EAAO;;KAEvB;EAGQI,EAAqBjB,EAAOkB,EAAa;;;;;"}
@@ -1,2 +1,2 @@
1
- import { Ref } from "react";
1
+ import type { Ref } from "react";
2
2
  export declare const mergeRefs: <T>(...refs: Ref<T>[]) => (value: T | null) => (() => void) | undefined;
@@ -1,2 +1,2 @@
1
- import{isReact19 as o}from"./version.js";const n=(...n)=>t=>{const r=[];for(const o of n)if("function"==typeof o){const n=o(t),f="function"==typeof n;r.push(f?n:()=>o(null))}else o.current=t,r.push((()=>{o.current=null}));if(o())return()=>{for(const o of r)o()}};export{n as mergeRefs};
1
+ import{isReact19 as o}from"./version.js";const n=(...n)=>t=>{const r=[];for(const o of n)if("function"==typeof o){const n=o(t),f="function"==typeof n;r.push(f?n:()=>o(null))}else o&&(o.current=t,r.push((()=>{o.current=null})));if(o())return()=>{for(const o of r)o()}};export{n as mergeRefs};
2
2
  //# sourceMappingURL=merge-refs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"merge-refs.js","sources":["../../src/util/merge-refs.ts"],"sourcesContent":["import { MutableRefObject, Ref } from \"react\";\nimport { isReact19 } from \"./version\";\n\nexport const mergeRefs = <T>(...refs: Ref<T>[]) => {\n return (value: T | null) => {\n const cleanups: (() => void)[] = [];\n\n for (const ref of refs) {\n if (typeof ref === \"function\") {\n const cleanup = ref(value);\n const isCleanup = typeof cleanup === \"function\";\n cleanups.push(isCleanup ? cleanup : () => ref(null));\n } else {\n (ref as MutableRefObject<T | null>).current = value;\n cleanups.push(() => {\n (ref as MutableRefObject<T | null>).current = null;\n });\n }\n }\n\n if (isReact19()) {\n return () => {\n for (const cleanup of cleanups) cleanup();\n };\n }\n };\n};\n"],"names":["mergeRefs","refs","value","cleanups","ref","cleanup","isCleanup","push","current","isReact19"],"mappings":"+CAGaA,EAAY,IAAOC,IACpBC,IACJ,MAAMC,EAA2B,GAEjC,IAAK,MAAMC,KAAOH,EACd,GAAmB,mBAARG,EAAoB,CAC3B,MAAMC,EAAUD,EAAIF,GACdI,EAA+B,mBAAZD,EACzBF,EAASI,KAAKD,EAAYD,EAAU,IAAMD,EAAI,MAClD,MACKA,EAAmCI,QAAUN,EAC9CC,EAASI,MAAK,KACTH,EAAmCI,QAAU,IAAI,IAK9D,GAAIC,IACA,MAAO,KACH,IAAK,MAAMJ,KAAWF,EAAUE,GAAS,CAEjD"}
1
+ {"version":3,"file":"merge-refs.js","sources":["../../src/util/merge-refs.ts"],"sourcesContent":["import type { MutableRefObject, Ref } from \"react\";\n\nimport { isReact19 } from \"./version\";\n\nexport const mergeRefs = <T>(...refs: Ref<T>[]) => {\n return (value: T | null) => {\n const cleanups: (() => void)[] = [];\n\n for (const ref of refs) {\n if (typeof ref === \"function\") {\n const cleanup = ref(value);\n const isCleanup = typeof cleanup === \"function\";\n cleanups.push(isCleanup ? cleanup : () => ref(null));\n } else if (ref) {\n (ref as MutableRefObject<T | null>).current = value;\n cleanups.push(() => {\n (ref as MutableRefObject<T | null>).current = null;\n });\n }\n }\n\n if (isReact19()) {\n return () => {\n for (const cleanup of cleanups) cleanup();\n };\n }\n };\n};\n"],"names":["mergeRefs","refs","value","cleanups","ref","cleanup","isCleanup","push","current","isReact19"],"mappings":"+CAIaA,EAAY,IAAOC,IACpBC,IACJ,MAAMC,EAA2B,GAEjC,IAAK,MAAMC,KAAOH,EACd,GAAmB,mBAARG,EAAoB,CAC3B,MAAMC,EAAUD,EAAIF,GACdI,EAA+B,mBAAZD,EACzBF,EAASI,KAAKD,EAAYD,EAAU,IAAMD,EAAI,MAClD,MAAWA,IACNA,EAAmCI,QAAUN,EAC9CC,EAASI,MAAK,KACTH,EAAmCI,QAAU,IAAI,KAK9D,GAAIC,IACA,MAAO,KACH,IAAK,MAAMJ,KAAWF,EAAUE,GAAS,CAEjD"}