@esri/calcite-components 1.0.0-next.317 → 1.0.0-next.320

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 (110) hide show
  1. package/dist/calcite/assets/calcite-icon/centerAlign16.json +1 -0
  2. package/dist/calcite/assets/calcite-icon/centerAlign24.json +1 -0
  3. package/dist/calcite/assets/calcite-icon/centerAlign32.json +1 -0
  4. package/dist/calcite/assets/calcite-icon/convert16.json +1 -0
  5. package/dist/calcite/assets/calcite-icon/convert24.json +1 -0
  6. package/dist/calcite/assets/calcite-icon/convert32.json +1 -0
  7. package/dist/calcite/assets/calcite-icon/formDropdown16.json +1 -0
  8. package/dist/calcite/assets/calcite-icon/formDropdown24.json +1 -0
  9. package/dist/calcite/assets/calcite-icon/formDropdown32.json +1 -0
  10. package/dist/calcite/assets/calcite-icon/language16.json +1 -0
  11. package/dist/calcite/assets/calcite-icon/language24.json +1 -0
  12. package/dist/calcite/assets/calcite-icon/language32.json +1 -0
  13. package/dist/calcite/assets/calcite-icon/languageTranslate16.json +1 -0
  14. package/dist/calcite/assets/calcite-icon/languageTranslate24.json +1 -0
  15. package/dist/calcite/assets/calcite-icon/languageTranslate32.json +1 -0
  16. package/dist/calcite/assets/calcite-icon/leftAlign16.json +1 -0
  17. package/dist/calcite/assets/calcite-icon/leftAlign24.json +1 -0
  18. package/dist/calcite/assets/calcite-icon/leftAlign32.json +1 -0
  19. package/dist/calcite/assets/calcite-icon/terminal16.json +1 -0
  20. package/dist/calcite/assets/calcite-icon/terminal24.json +1 -0
  21. package/dist/calcite/assets/calcite-icon/terminal32.json +1 -0
  22. package/dist/calcite/assets/calcite-icon/touch16.json +1 -0
  23. package/dist/calcite/assets/calcite-icon/touch24.json +1 -0
  24. package/dist/calcite/assets/calcite-icon/touch32.json +1 -0
  25. package/dist/calcite/calcite.esm.js +1 -1
  26. package/dist/calcite/p-1480eb2d.entry.js +5 -0
  27. package/dist/calcite/p-2cd9d307.entry.js +5 -0
  28. package/dist/calcite/p-6e050609.entry.js +5 -0
  29. package/dist/calcite/p-8e252799.system.js +1 -1
  30. package/dist/calcite/p-96bbc815.system.entry.js +5 -0
  31. package/dist/calcite/p-cb55c32c.system.entry.js +5 -0
  32. package/dist/calcite/p-e817ded0.entry.js +5 -0
  33. package/dist/calcite/{p-44a07313.system.entry.js → p-f7b5dd98.system.entry.js} +1 -1
  34. package/dist/calcite/p-fa9a1d8f.system.entry.js +5 -0
  35. package/dist/cjs/calcite-action-bar.cjs.entry.js +24 -0
  36. package/dist/cjs/calcite-color-picker_3.cjs.entry.js +3 -3
  37. package/dist/cjs/calcite-input-time-picker_2.cjs.entry.js +349 -223
  38. package/dist/cjs/calcite-panel.cjs.entry.js +3 -3
  39. package/dist/cjs/calcite.cjs.js +1 -1
  40. package/dist/cjs/loader.cjs.js +1 -1
  41. package/dist/collection/components/calcite-action-bar/calcite-action-bar.js +3 -0
  42. package/dist/collection/components/calcite-filter/calcite-filter.js +1 -1
  43. package/dist/collection/components/calcite-icon/assets/calcite-icon/centerAlign16.json +1 -0
  44. package/dist/collection/components/calcite-icon/assets/calcite-icon/centerAlign24.json +1 -0
  45. package/dist/collection/components/calcite-icon/assets/calcite-icon/centerAlign32.json +1 -0
  46. package/dist/collection/components/calcite-icon/assets/calcite-icon/convert16.json +1 -0
  47. package/dist/collection/components/calcite-icon/assets/calcite-icon/convert24.json +1 -0
  48. package/dist/collection/components/calcite-icon/assets/calcite-icon/convert32.json +1 -0
  49. package/dist/collection/components/calcite-icon/assets/calcite-icon/formDropdown16.json +1 -0
  50. package/dist/collection/components/calcite-icon/assets/calcite-icon/formDropdown24.json +1 -0
  51. package/dist/collection/components/calcite-icon/assets/calcite-icon/formDropdown32.json +1 -0
  52. package/dist/collection/components/calcite-icon/assets/calcite-icon/language16.json +1 -0
  53. package/dist/collection/components/calcite-icon/assets/calcite-icon/language24.json +1 -0
  54. package/dist/collection/components/calcite-icon/assets/calcite-icon/language32.json +1 -0
  55. package/dist/collection/components/calcite-icon/assets/calcite-icon/languageTranslate16.json +1 -0
  56. package/dist/collection/components/calcite-icon/assets/calcite-icon/languageTranslate24.json +1 -0
  57. package/dist/collection/components/calcite-icon/assets/calcite-icon/languageTranslate32.json +1 -0
  58. package/dist/collection/components/calcite-icon/assets/calcite-icon/leftAlign16.json +1 -0
  59. package/dist/collection/components/calcite-icon/assets/calcite-icon/leftAlign24.json +1 -0
  60. package/dist/collection/components/calcite-icon/assets/calcite-icon/leftAlign32.json +1 -0
  61. package/dist/collection/components/calcite-icon/assets/calcite-icon/terminal16.json +1 -0
  62. package/dist/collection/components/calcite-icon/assets/calcite-icon/terminal24.json +1 -0
  63. package/dist/collection/components/calcite-icon/assets/calcite-icon/terminal32.json +1 -0
  64. package/dist/collection/components/calcite-icon/assets/calcite-icon/touch16.json +1 -0
  65. package/dist/collection/components/calcite-icon/assets/calcite-icon/touch24.json +1 -0
  66. package/dist/collection/components/calcite-icon/assets/calcite-icon/touch32.json +1 -0
  67. package/dist/collection/components/calcite-input-time-picker/calcite-input-time-picker.js +81 -76
  68. package/dist/collection/components/calcite-panel/calcite-panel.js +3 -3
  69. package/dist/collection/components/calcite-time-picker/calcite-time-picker.css +56 -91
  70. package/dist/collection/components/calcite-time-picker/calcite-time-picker.js +254 -289
  71. package/dist/collection/components/calcite-time-picker/resources.js +15 -9
  72. package/dist/collection/utils/conditionalSlot.js +26 -0
  73. package/dist/collection/utils/time.js +144 -36
  74. package/dist/components/calcite-action-bar.js +25 -1
  75. package/dist/components/calcite-color-picker-swatch2.js +3 -3
  76. package/dist/components/calcite-input-time-picker.js +51 -48
  77. package/dist/components/calcite-panel.js +3 -3
  78. package/dist/components/calcite-time-picker2.js +320 -187
  79. package/dist/custom-elements/index.js +381 -231
  80. package/dist/esm/calcite-action-bar.entry.js +25 -1
  81. package/dist/esm/calcite-color-picker_3.entry.js +3 -3
  82. package/dist/esm/calcite-input-time-picker_2.entry.js +349 -223
  83. package/dist/esm/calcite-panel.entry.js +3 -3
  84. package/dist/esm/calcite.js +1 -1
  85. package/dist/esm/loader.js +1 -1
  86. package/dist/esm-es5/calcite-action-bar.entry.js +1 -1
  87. package/dist/esm-es5/calcite-color-picker_3.entry.js +1 -1
  88. package/dist/esm-es5/calcite-input-time-picker_2.entry.js +2 -2
  89. package/dist/esm-es5/calcite-panel.entry.js +1 -1
  90. package/dist/esm-es5/calcite.js +1 -1
  91. package/dist/esm-es5/loader.js +1 -1
  92. package/dist/extras/docs-json.json +23 -101
  93. package/dist/types/components/calcite-action-bar/calcite-action-bar.d.ts +2 -1
  94. package/dist/types/components/calcite-input-time-picker/calcite-input-time-picker.d.ts +12 -4
  95. package/dist/types/components/calcite-panel/calcite-panel.d.ts +1 -1
  96. package/dist/types/components/calcite-time-picker/calcite-time-picker.d.ts +35 -23
  97. package/dist/types/components/calcite-time-picker/resources.d.ts +14 -8
  98. package/dist/types/components.d.ts +17 -41
  99. package/dist/types/utils/conditionalSlot.d.ts +17 -0
  100. package/dist/types/utils/time.d.ts +18 -5
  101. package/hydrate/index.js +399 -239
  102. package/package.json +11 -11
  103. package/readme.md +2 -2
  104. package/dist/calcite/p-12a9599d.system.entry.js +0 -5
  105. package/dist/calcite/p-88784777.system.entry.js +0 -5
  106. package/dist/calcite/p-9634f89d.entry.js +0 -5
  107. package/dist/calcite/p-b37b7b9e.system.entry.js +0 -5
  108. package/dist/calcite/p-e1da1646.entry.js +0 -5
  109. package/dist/calcite/p-e78e743b.entry.js +0 -5
  110. package/dist/calcite/p-f333e31b.entry.js +0 -5
@@ -1955,6 +1955,28 @@ function throttle$1(func, wait, options) {
1955
1955
  });
1956
1956
  }
1957
1957
 
1958
+ const slotChangedMap = new WeakMap();
1959
+ function onSlotChange() {
1960
+ forceUpdate(this);
1961
+ }
1962
+ const eventType = "slotchange";
1963
+ /**
1964
+ * Helper to set up a conditional slot component on connectedCallback.
1965
+ */
1966
+ function connectConditionalSlotComponent(component) {
1967
+ const boundSlotChange = onSlotChange.bind(component);
1968
+ component.el.shadowRoot.addEventListener(eventType, boundSlotChange);
1969
+ slotChangedMap.set(component, boundSlotChange);
1970
+ }
1971
+ /**
1972
+ * Helper to tear down a conditional slot component on disconnectedCallback.
1973
+ */
1974
+ function disconnectConditionalSlotComponent(component) {
1975
+ const boundSlotChange = slotChangedMap.get(component);
1976
+ component.el.shadowRoot.removeEventListener(eventType, boundSlotChange);
1977
+ slotChangedMap.delete(component);
1978
+ }
1979
+
1958
1980
  const calciteActionBarCss = "@-webkit-keyframes in{0%{opacity:0}100%{opacity:1}}@keyframes in{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes in-down{0%{opacity:0;-webkit-transform:translate3D(0, -5px, 0);transform:translate3D(0, -5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@keyframes in-down{0%{opacity:0;-webkit-transform:translate3D(0, -5px, 0);transform:translate3D(0, -5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@-webkit-keyframes in-up{0%{opacity:0;-webkit-transform:translate3D(0, 5px, 0);transform:translate3D(0, 5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@keyframes in-up{0%{opacity:0;-webkit-transform:translate3D(0, 5px, 0);transform:translate3D(0, 5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@-webkit-keyframes in-scale{0%{opacity:0;-webkit-transform:scale3D(0.95, 0.95, 1);transform:scale3D(0.95, 0.95, 1)}100%{opacity:1;-webkit-transform:scale3D(1, 1, 1);transform:scale3D(1, 1, 1)}}@keyframes in-scale{0%{opacity:0;-webkit-transform:scale3D(0.95, 0.95, 1);transform:scale3D(0.95, 0.95, 1)}100%{opacity:1;-webkit-transform:scale3D(1, 1, 1);transform:scale3D(1, 1, 1)}}:root{--calcite-animation-timing:300ms}.calcite-animate{opacity:0;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:var(--calcite-animation-timing);animation-duration:var(--calcite-animation-timing)}.calcite-animate__in{-webkit-animation-name:in;animation-name:in}.calcite-animate__in-down{-webkit-animation-name:in-down;animation-name:in-down}.calcite-animate__in-up{-webkit-animation-name:in-up;animation-name:in-up}.calcite-animate__in-scale{-webkit-animation-name:in-scale;animation-name:in-scale}:host{-webkit-box-sizing:border-box;box-sizing:border-box;background-color:var(--calcite-ui-foreground-1);color:var(--calcite-ui-text-2);font-size:var(--calcite-font-size--1)}:host *{-webkit-box-sizing:border-box;box-sizing:border-box}:root{--calcite-popper-transition:150ms ease-in-out}:host([hidden]){display:none}:host{-ms-flex-item-align:stretch;align-self:stretch;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-direction:column;flex-direction:column;pointer-events:auto;max-width:15vw}:host([overflow-actions-disabled]){overflow-y:auto}:host([expanded]){max-width:20vw}::slotted(calcite-action-group){border-width:0;border-bottom-width:1px;border-style:solid;border-color:var(--calcite-ui-border-2)}::slotted(calcite-action-group:last-child){border-bottom-width:0}.action-group--bottom{padding-bottom:0;-ms-flex-positive:1;flex-grow:1;-ms-flex-pack:end;justify-content:flex-end}";
1959
1981
 
1960
1982
  let CalciteActionBar$1 = class extends HTMLElement$1 {
@@ -2080,11 +2102,13 @@ let CalciteActionBar$1 = class extends HTMLElement$1 {
2080
2102
  (_b = this.resizeObserver) === null || _b === void 0 ? void 0 : _b.observe(el);
2081
2103
  }
2082
2104
  this.conditionallyOverflowActions();
2105
+ connectConditionalSlotComponent(this);
2083
2106
  }
2084
2107
  disconnectedCallback() {
2085
2108
  var _a, _b;
2086
2109
  (_a = this.mutationObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
2087
2110
  (_b = this.resizeObserver) === null || _b === void 0 ? void 0 : _b.disconnect();
2111
+ disconnectConditionalSlotComponent(this);
2088
2112
  }
2089
2113
  // --------------------------------------------------------------------------
2090
2114
  //
@@ -4277,7 +4301,7 @@ cs.get.rgb = function (string) {
4277
4301
 
4278
4302
  var abbr = /^#([a-f0-9]{3,4})$/i;
4279
4303
  var hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i;
4280
- var rgba = /^rgba?\(\s*([+-]?\d+)\s*,?\s*([+-]?\d+)\s*,?\s*([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/;
4304
+ var rgba = /^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/;
4281
4305
  var per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/;
4282
4306
  var keyword = /^(\w+)$/;
4283
4307
 
@@ -4364,7 +4388,7 @@ cs.get.hsl = function (string) {
4364
4388
  return null;
4365
4389
  }
4366
4390
 
4367
- var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?[\d\.]+)\s*)?\)$/;
4391
+ var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/;
4368
4392
  var match = string.match(hsl);
4369
4393
 
4370
4394
  if (match) {
@@ -4385,7 +4409,7 @@ cs.get.hwb = function (string) {
4385
4409
  return null;
4386
4410
  }
4387
4411
 
4388
- var hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/;
4412
+ var hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/;
4389
4413
  var match = string.match(hwb);
4390
4414
 
4391
4415
  if (match) {
@@ -13682,6 +13706,72 @@ let CalciteInputMessage$1 = class extends HTMLElement$1 {
13682
13706
  };
13683
13707
 
13684
13708
  const maxTenthForMinuteAndSecond = 5;
13709
+ function createLocaleDateTimeFormatter(locale, includeSeconds = true) {
13710
+ try {
13711
+ const options = {
13712
+ hour: "2-digit",
13713
+ minute: "2-digit",
13714
+ timeZone: "UTC"
13715
+ };
13716
+ if (includeSeconds) {
13717
+ options.second = "2-digit";
13718
+ }
13719
+ return new Intl.DateTimeFormat(locale, options);
13720
+ }
13721
+ catch (e) {
13722
+ throw new Error(`Invalid locale supplied while attempting to create a DateTime formatter: ${locale}`);
13723
+ }
13724
+ }
13725
+ function formatTimePart(number) {
13726
+ const numberAsString = number.toString();
13727
+ return number >= 0 && number <= 9 ? numberAsString.padStart(2, "0") : numberAsString;
13728
+ }
13729
+ function formatTimeString(value) {
13730
+ if (!isValidTime(value)) {
13731
+ return null;
13732
+ }
13733
+ const [hourString, minuteString, secondString] = value.split(":");
13734
+ const hour = formatTimePart(parseInt(hourString));
13735
+ const minute = formatTimePart(parseInt(minuteString));
13736
+ if (secondString) {
13737
+ const second = formatTimePart(parseInt(secondString));
13738
+ return `${hour}:${minute}:${second}`;
13739
+ }
13740
+ return `${hour}:${minute}`;
13741
+ }
13742
+ function getLocaleHourCycle(locale) {
13743
+ const formatter = createLocaleDateTimeFormatter(locale);
13744
+ const parts = formatter.formatToParts(new Date(Date.UTC(0, 0, 0, 0, 0, 0)));
13745
+ return getLocalizedTimePart("meridiem", parts) ? "12" : "24";
13746
+ }
13747
+ function getLocalizedTimePart(part, parts) {
13748
+ var _a, _b, _c, _d;
13749
+ if (!part || !parts) {
13750
+ return null;
13751
+ }
13752
+ if (part === "hourSuffix") {
13753
+ const hourIndex = parts.indexOf(parts.find(({ type }) => type === "hour"));
13754
+ const minuteIndex = parts.indexOf(parts.find(({ type }) => type === "minute"));
13755
+ const hourSuffix = parts[hourIndex + 1];
13756
+ return hourSuffix && hourSuffix.type === "literal" && minuteIndex - hourIndex === 2
13757
+ ? ((_a = hourSuffix.value) === null || _a === void 0 ? void 0 : _a.trim()) || null
13758
+ : null;
13759
+ }
13760
+ if (part === "minuteSuffix") {
13761
+ const minuteIndex = parts.indexOf(parts.find(({ type }) => type === "minute"));
13762
+ const secondIndex = parts.indexOf(parts.find(({ type }) => type === "second"));
13763
+ const minuteSuffix = parts[minuteIndex + 1];
13764
+ return minuteSuffix && minuteSuffix.type === "literal" && secondIndex - minuteIndex === 2
13765
+ ? ((_b = minuteSuffix.value) === null || _b === void 0 ? void 0 : _b.trim()) || null
13766
+ : null;
13767
+ }
13768
+ if (part === "secondSuffix") {
13769
+ const secondIndex = parts.indexOf(parts.find(({ type }) => type === "second"));
13770
+ const secondSuffix = parts[secondIndex + 1];
13771
+ return secondSuffix && secondSuffix.type === "literal" ? ((_c = secondSuffix.value) === null || _c === void 0 ? void 0 : _c.trim()) || null : null;
13772
+ }
13773
+ return ((_d = parts.find(({ type }) => (part == "meridiem" ? type === "dayPeriod" : type === part))) === null || _d === void 0 ? void 0 : _d.value) || null;
13774
+ }
13685
13775
  function getMeridiem(hour) {
13686
13776
  if (!isValidNumber(hour)) {
13687
13777
  return null;
@@ -13689,51 +13779,93 @@ function getMeridiem(hour) {
13689
13779
  const hourAsNumber = parseInt(hour);
13690
13780
  return hourAsNumber >= 0 && hourAsNumber <= 11 ? "AM" : "PM";
13691
13781
  }
13692
- function getMeridiemHour(hour) {
13693
- if (!isValidNumber(hour)) {
13694
- return null;
13782
+ function isValidTime(value) {
13783
+ if (!value || value.startsWith(":") || value.endsWith(":")) {
13784
+ return false;
13695
13785
  }
13696
- const hourAsNumber = parseInt(hour);
13697
- if (hourAsNumber === 0) {
13698
- return "12";
13786
+ const splitValue = value.split(":");
13787
+ const validLength = splitValue.length > 1 && splitValue.length < 4;
13788
+ if (!validLength) {
13789
+ return false;
13790
+ }
13791
+ const [hour, minute, second] = splitValue;
13792
+ const hourAsNumber = parseInt(splitValue[0]);
13793
+ const minuteAsNumber = parseInt(splitValue[1]);
13794
+ const secondAsNumber = parseInt(splitValue[2]);
13795
+ const hourValid = isValidNumber(hour) && hourAsNumber >= 0 && hourAsNumber < 24;
13796
+ const minuteValid = isValidNumber(minute) && minuteAsNumber >= 0 && minuteAsNumber < 60;
13797
+ const secondValid = isValidNumber(second) && secondAsNumber >= 0 && secondAsNumber < 60;
13798
+ if ((hourValid && minuteValid && !second) || (hourValid && minuteValid && secondValid)) {
13799
+ return true;
13699
13800
  }
13700
- return hourAsNumber > 12 ? formatTimePart(hourAsNumber - 12) : hour;
13701
13801
  }
13702
- function parseTimeString(value) {
13703
- const timeString = formatTimeString(value);
13704
- const [hour, minute, second] = timeString ? timeString.split(":") : [null, null, null];
13705
- return {
13706
- hour,
13707
- minute,
13708
- second: second || (hour && minute ? "00" : null)
13709
- };
13802
+ function isValidTimePart(value, part) {
13803
+ if (part === "meridiem") {
13804
+ return value === "AM" || value === "PM";
13805
+ }
13806
+ if (!isValidNumber(value)) {
13807
+ return false;
13808
+ }
13809
+ const valueAsNumber = Number(value);
13810
+ return part === "hour" ? valueAsNumber >= 0 && valueAsNumber < 24 : valueAsNumber >= 0 && valueAsNumber < 60;
13710
13811
  }
13711
- function formatTimeString(value) {
13712
- if (!value || value.endsWith(":") || value.startsWith(":")) {
13812
+ function localizeTimePart(value, part, locale) {
13813
+ if (!isValidTimePart(value, part)) {
13814
+ return;
13815
+ }
13816
+ const valueAsNumber = parseInt(value);
13817
+ const date = new Date(Date.UTC(0, 0, 0, part === "hour" ? valueAsNumber : part === "meridiem" ? (value === "AM" ? 0 : 12) : 0, part === "minute" ? valueAsNumber : 0, part === "second" ? valueAsNumber : 0));
13818
+ if (!date) {
13819
+ return;
13820
+ }
13821
+ const formatter = createLocaleDateTimeFormatter(locale);
13822
+ const parts = formatter.formatToParts(date);
13823
+ return getLocalizedTimePart(part, parts);
13824
+ }
13825
+ function localizeTimeString(value, locale = "en", includeSeconds = true) {
13826
+ if (!isValidTime(value)) {
13713
13827
  return null;
13714
13828
  }
13715
- const splitValue = value.split(":");
13716
- if (splitValue.length > 1) {
13717
- const [hour, minute, second] = splitValue;
13718
- const hourAsNumber = parseInt(splitValue[0]);
13719
- const minuteAsNumber = parseInt(splitValue[1]);
13720
- const secondAsNumber = parseInt(splitValue[2]);
13721
- const hourValid = isValidNumber(hour) && hourAsNumber >= 0 && hourAsNumber < 24;
13722
- const minuteValid = isValidNumber(minute) && minuteAsNumber >= 0 && minuteAsNumber < 60;
13723
- const secondValid = isValidNumber(second) && secondAsNumber >= 0 && secondAsNumber < 60;
13724
- if ((hourValid && minuteValid && !second) || (hourValid && minuteValid && secondValid)) {
13725
- let newValue = `${formatTimePart(hourAsNumber)}:${formatTimePart(minuteAsNumber)}`;
13726
- if (secondValid) {
13727
- newValue = `${newValue}:${formatTimePart(secondAsNumber)}`;
13728
- }
13729
- return newValue;
13730
- }
13829
+ const { hour, minute, second = "0" } = parseTimeString(value);
13830
+ const dateFromTimeString = new Date(Date.UTC(0, 0, 0, parseInt(hour), parseInt(minute), parseInt(second)));
13831
+ const formatter = createLocaleDateTimeFormatter(locale, includeSeconds);
13832
+ return (formatter === null || formatter === void 0 ? void 0 : formatter.format(dateFromTimeString)) || null;
13833
+ }
13834
+ function localizeTimeStringToParts(value, locale = "en") {
13835
+ if (!isValidTime(value)) {
13836
+ return null;
13837
+ }
13838
+ const { hour, minute, second = "0" } = parseTimeString(value);
13839
+ const dateFromTimeString = new Date(Date.UTC(0, 0, 0, parseInt(hour), parseInt(minute), parseInt(second)));
13840
+ if (dateFromTimeString) {
13841
+ const formatter = createLocaleDateTimeFormatter(locale);
13842
+ const parts = formatter.formatToParts(dateFromTimeString);
13843
+ return {
13844
+ localizedHour: getLocalizedTimePart("hour", parts),
13845
+ localizedHourSuffix: getLocalizedTimePart("hourSuffix", parts),
13846
+ localizedMinute: getLocalizedTimePart("minute", parts),
13847
+ localizedMinuteSuffix: getLocalizedTimePart("minuteSuffix", parts),
13848
+ localizedSecond: getLocalizedTimePart("second", parts),
13849
+ localizedSecondSuffix: getLocalizedTimePart("secondSuffix", parts),
13850
+ localizedMeridiem: getLocalizedTimePart("meridiem", parts)
13851
+ };
13731
13852
  }
13732
13853
  return null;
13733
13854
  }
13734
- function formatTimePart(number) {
13735
- const numberAsString = number.toString();
13736
- return number >= 0 && number <= 9 ? numberAsString.padStart(2, "0") : numberAsString;
13855
+ function parseTimeString(value) {
13856
+ if (isValidTime(value)) {
13857
+ const [hour, minute, second] = value.split(":");
13858
+ return {
13859
+ hour,
13860
+ minute,
13861
+ second
13862
+ };
13863
+ }
13864
+ return {
13865
+ hour: null,
13866
+ minute: null,
13867
+ second: null
13868
+ };
13737
13869
  }
13738
13870
 
13739
13871
  const calciteInputTimePickerCss = "@-webkit-keyframes in{0%{opacity:0}100%{opacity:1}}@keyframes in{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes in-down{0%{opacity:0;-webkit-transform:translate3D(0, -5px, 0);transform:translate3D(0, -5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@keyframes in-down{0%{opacity:0;-webkit-transform:translate3D(0, -5px, 0);transform:translate3D(0, -5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@-webkit-keyframes in-up{0%{opacity:0;-webkit-transform:translate3D(0, 5px, 0);transform:translate3D(0, 5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@keyframes in-up{0%{opacity:0;-webkit-transform:translate3D(0, 5px, 0);transform:translate3D(0, 5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@-webkit-keyframes in-scale{0%{opacity:0;-webkit-transform:scale3D(0.95, 0.95, 1);transform:scale3D(0.95, 0.95, 1)}100%{opacity:1;-webkit-transform:scale3D(1, 1, 1);transform:scale3D(1, 1, 1)}}@keyframes in-scale{0%{opacity:0;-webkit-transform:scale3D(0.95, 0.95, 1);transform:scale3D(0.95, 0.95, 1)}100%{opacity:1;-webkit-transform:scale3D(1, 1, 1);transform:scale3D(1, 1, 1)}}:root{--calcite-animation-timing:300ms}.calcite-animate{opacity:0;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:var(--calcite-animation-timing);animation-duration:var(--calcite-animation-timing)}.calcite-animate__in{-webkit-animation-name:in;animation-name:in}.calcite-animate__in-down{-webkit-animation-name:in-down;animation-name:in-down}.calcite-animate__in-up{-webkit-animation-name:in-up;animation-name:in-up}.calcite-animate__in-scale{-webkit-animation-name:in-scale;animation-name:in-scale}:root{--calcite-popper-transition:150ms ease-in-out}:host([hidden]){display:none}:host{display:inline-block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}::slotted(input[slot=hidden-form-input]){bottom:0 !important;left:0 !important;margin:0 !important;opacity:0 !important;outline:none !important;padding:0 !important;position:absolute !important;right:0 !important;top:0 !important;-webkit-transform:none !important;transform:none !important;-webkit-appearance:none !important;z-index:-1 !important}";
@@ -13753,8 +13885,11 @@ let CalciteInputTimePicker$1 = class extends HTMLElement$1 {
13753
13885
  this.active = false;
13754
13886
  /** The disabled state of the time input */
13755
13887
  this.disabled = false;
13756
- /** Format of the hour value (12-hour or 24-hour) (this will be replaced by locale eventually) */
13757
- this.hourDisplayFormat = "12";
13888
+ /**
13889
+ * BCP 47 language tag for desired language and country format
13890
+ * @internal
13891
+ */
13892
+ this.locale = document.documentElement.lang || navigator.language || "en";
13758
13893
  /**
13759
13894
  * When true, makes the component required for form-submission.
13760
13895
  *
@@ -13778,56 +13913,60 @@ let CalciteInputTimePicker$1 = class extends HTMLElement$1 {
13778
13913
  //--------------------------------------------------------------------------
13779
13914
  this.calciteInputBlurHandler = () => {
13780
13915
  this.active = false;
13781
- const newValue = formatTimeString(this.calciteInputEl.value) || formatTimeString(this.value);
13782
- if (newValue !== this.calciteInputEl.value) {
13783
- this.setInputValue(newValue);
13784
- }
13916
+ const shouldIncludeSeconds = this.shouldIncludeSeconds();
13917
+ const localizedInputValue = localizeTimeString(this.calciteInputEl.value, this.locale, shouldIncludeSeconds);
13918
+ this.setInputValue(localizedInputValue || localizeTimeString(this.value, this.locale, shouldIncludeSeconds));
13785
13919
  };
13786
13920
  this.calciteInputFocusHandler = () => {
13787
13921
  this.active = true;
13788
13922
  };
13789
13923
  this.calciteInputInputHandler = (event) => {
13790
- this.setValue({ value: event.detail.value });
13924
+ const target = event.target;
13925
+ this.setValue({ value: target.value });
13926
+ };
13927
+ this.timePickerChangeHandler = (event) => {
13928
+ event.stopPropagation();
13929
+ const target = event.target;
13930
+ const value = target.value;
13931
+ this.setValue({ value, origin: "time-picker" });
13791
13932
  };
13792
13933
  this.setCalciteInputEl = (el) => {
13793
13934
  this.calciteInputEl = el;
13794
13935
  };
13936
+ this.setCalciteTimePickerEl = (el) => {
13937
+ this.calciteTimePickerEl = el;
13938
+ };
13795
13939
  this.setInputValue = (newInputValue) => {
13796
13940
  if (!this.calciteInputEl) {
13797
13941
  return;
13798
13942
  }
13799
- if (this.hourDisplayFormat === "12") {
13800
- const { hour, minute, second } = parseTimeString(newInputValue);
13801
- this.calciteInputEl.value = newInputValue
13802
- ? `${getMeridiemHour(hour)}:${minute}${this.step !== 60 ? ":" + second : ""} ${getMeridiem(hour)}`
13803
- : null;
13804
- }
13805
- else {
13806
- this.calciteInputEl.value = newInputValue;
13807
- }
13943
+ this.calciteInputEl.value = newInputValue;
13808
13944
  };
13809
13945
  this.setValue = ({ value, origin = "input" }) => {
13810
13946
  const previousValue = this.value;
13811
- const validatedNewValue = formatTimeString(value);
13947
+ const newValue = formatTimeString(value);
13948
+ const newLocalizedValue = localizeTimeString(newValue, this.locale, this.shouldIncludeSeconds());
13812
13949
  this.internalValueChange = origin !== "external" && origin !== "loading";
13813
13950
  const shouldEmit = origin !== "loading" &&
13814
13951
  origin !== "external" &&
13815
13952
  ((value !== this.previousValidValue && !value) ||
13816
- !!(!this.previousValidValue && validatedNewValue) ||
13817
- (validatedNewValue !== this.previousValidValue && validatedNewValue));
13953
+ !!(!this.previousValidValue && newValue) ||
13954
+ (newValue !== this.previousValidValue && newValue));
13818
13955
  if (value) {
13819
13956
  if (shouldEmit) {
13820
- this.previousValidValue = validatedNewValue;
13957
+ this.previousValidValue = newValue;
13821
13958
  }
13822
- if (validatedNewValue && validatedNewValue !== this.value) {
13823
- this.value = validatedNewValue;
13959
+ if (newValue && newValue !== this.value) {
13960
+ this.value = newValue;
13824
13961
  }
13962
+ this.localizedValue = newLocalizedValue;
13825
13963
  }
13826
13964
  else {
13827
13965
  this.value = value;
13966
+ this.localizedValue = null;
13828
13967
  }
13829
13968
  if (origin === "time-picker" || origin === "external") {
13830
- this.setInputValue(validatedNewValue);
13969
+ this.setInputValue(newLocalizedValue);
13831
13970
  }
13832
13971
  if (shouldEmit) {
13833
13972
  const changeEvent = this.calciteInputTimePickerChange.emit();
@@ -13838,17 +13977,26 @@ let CalciteInputTimePicker$1 = class extends HTMLElement$1 {
13838
13977
  this.previousValidValue = previousValue;
13839
13978
  }
13840
13979
  else {
13841
- this.previousValidValue = validatedNewValue;
13980
+ this.previousValidValue = newValue;
13842
13981
  }
13843
13982
  }
13844
13983
  };
13845
13984
  }
13985
+ localeWatcher(newLocale) {
13986
+ this.setInputValue(localizeTimeString(this.value, newLocale, this.shouldIncludeSeconds()));
13987
+ }
13846
13988
  valueWatcher(newValue) {
13847
13989
  if (!this.internalValueChange) {
13848
13990
  this.setValue({ value: newValue, origin: "external" });
13849
13991
  }
13850
13992
  this.internalValueChange = false;
13851
13993
  }
13994
+ clickHandler(event) {
13995
+ if (event.composedPath().includes(this.calciteTimePickerEl)) {
13996
+ return;
13997
+ }
13998
+ this.setFocus();
13999
+ }
13852
14000
  keyUpHandler(event) {
13853
14001
  if (event.key === "Escape" && this.active) {
13854
14002
  this.active = false;
@@ -13859,21 +14007,6 @@ let CalciteInputTimePicker$1 = class extends HTMLElement$1 {
13859
14007
  event.stopPropagation();
13860
14008
  this.active = false;
13861
14009
  }
13862
- timePickerChangeHandler(event) {
13863
- event.preventDefault();
13864
- event.stopPropagation();
13865
- if (event.detail) {
13866
- const { hour, minute, second } = event.detail;
13867
- let value;
13868
- if (hour && minute) {
13869
- value = second && this.step !== 60 ? `${hour}:${minute}:${second}` : `${hour}:${minute}`;
13870
- }
13871
- else {
13872
- value = "";
13873
- }
13874
- this.setValue({ value, origin: "time-picker" });
13875
- }
13876
- }
13877
14010
  timePickerFocusHandler(event) {
13878
14011
  event.preventDefault();
13879
14012
  event.stopPropagation();
@@ -13896,6 +14029,9 @@ let CalciteInputTimePicker$1 = class extends HTMLElement$1 {
13896
14029
  onLabelClick() {
13897
14030
  this.setFocus();
13898
14031
  }
14032
+ shouldIncludeSeconds() {
14033
+ return this.step < 60;
14034
+ }
13899
14035
  //--------------------------------------------------------------------------
13900
14036
  //
13901
14037
  // Lifecycle
@@ -13903,15 +14039,13 @@ let CalciteInputTimePicker$1 = class extends HTMLElement$1 {
13903
14039
  //--------------------------------------------------------------------------
13904
14040
  connectedCallback() {
13905
14041
  if (this.value) {
13906
- this.setValue({ value: this.value, origin: "loading" });
14042
+ this.setValue({ value: isValidTime(this.value) ? this.value : undefined, origin: "loading" });
13907
14043
  }
13908
14044
  connectLabel(this);
13909
14045
  connectForm(this);
13910
14046
  }
13911
14047
  componentDidLoad() {
13912
- if (this.calciteInputEl.value !== this.value) {
13913
- this.setInputValue(this.value);
13914
- }
14048
+ this.setInputValue(this.localizedValue);
13915
14049
  }
13916
14050
  disconnectedCallback() {
13917
14051
  disconnectLabel(this);
@@ -13923,12 +14057,12 @@ let CalciteInputTimePicker$1 = class extends HTMLElement$1 {
13923
14057
  //
13924
14058
  // --------------------------------------------------------------------------
13925
14059
  render() {
13926
- const { hour, minute, second } = parseTimeString(this.value);
13927
14060
  const popoverId = `${this.referenceElementId}-popover`;
13928
- return (h(Host, null, h("div", { "aria-controls": popoverId, "aria-haspopup": "dialog", "aria-label": this.name, "aria-owns": popoverId, id: this.referenceElementId, role: "combobox" }, h("calcite-input", { disabled: this.disabled, icon: "clock", label: getLabelText(this), onCalciteInputBlur: this.calciteInputBlurHandler, onCalciteInputFocus: this.calciteInputFocusHandler, onCalciteInputInput: this.calciteInputInputHandler, ref: this.setCalciteInputEl, scale: this.scale, step: this.step })), h("calcite-popover", { id: popoverId, label: "Time Picker", open: this.active || false, referenceElement: this.referenceElementId }, h("calcite-time-picker", { hour: hour, "hour-display-format": this.hourDisplayFormat, intlHour: this.intlHour, intlHourDown: this.intlHourDown, intlHourUp: this.intlHourUp, intlMeridiem: this.intlMeridiem, intlMeridiemDown: this.intlMeridiemDown, intlMeridiemUp: this.intlMeridiemUp, intlMinute: this.intlMinute, intlMinuteDown: this.intlMinuteDown, intlMinuteUp: this.intlMinuteUp, intlSecond: this.intlSecond, intlSecondDown: this.intlSecondDown, intlSecondUp: this.intlSecondUp, minute: minute, scale: this.scale, second: second, step: this.step })), h(HiddenFormInputSlot, { component: this })));
14061
+ return (h(Host, null, h("div", { "aria-controls": popoverId, "aria-haspopup": "dialog", "aria-label": this.name, "aria-owns": popoverId, id: this.referenceElementId, role: "combobox" }, h("calcite-input", { disabled: this.disabled, icon: "clock", label: getLabelText(this), onCalciteInputBlur: this.calciteInputBlurHandler, onCalciteInputFocus: this.calciteInputFocusHandler, onCalciteInputInput: this.calciteInputInputHandler, ref: this.setCalciteInputEl, scale: this.scale, step: this.step })), h("calcite-popover", { id: popoverId, label: "Time Picker", open: this.active || false, referenceElement: this.referenceElementId }, h("calcite-time-picker", { intlHour: this.intlHour, intlHourDown: this.intlHourDown, intlHourUp: this.intlHourUp, intlMeridiem: this.intlMeridiem, intlMeridiemDown: this.intlMeridiemDown, intlMeridiemUp: this.intlMeridiemUp, intlMinute: this.intlMinute, intlMinuteDown: this.intlMinuteDown, intlMinuteUp: this.intlMinuteUp, intlSecond: this.intlSecond, intlSecondDown: this.intlSecondDown, intlSecondUp: this.intlSecondUp, lang: this.locale, onCalciteTimePickerChange: this.timePickerChangeHandler, ref: this.setCalciteTimePickerEl, scale: this.scale, step: this.step, value: this.value })), h(HiddenFormInputSlot, { component: this })));
13929
14062
  }
13930
14063
  get el() { return this; }
13931
14064
  static get watchers() { return {
14065
+ "locale": ["localeWatcher"],
13932
14066
  "value": ["valueWatcher"]
13933
14067
  }; }
13934
14068
  static get style() { return calciteInputTimePickerCss; }
@@ -15115,7 +15249,7 @@ let CalcitePanel$1 = class extends HTMLElement$1 {
15115
15249
  this.setBackRef = (node) => {
15116
15250
  this.backButtonEl = node;
15117
15251
  };
15118
- this.panelKeyUpHandler = (event) => {
15252
+ this.panelKeyDownHandler = (event) => {
15119
15253
  if (event.key === "Escape") {
15120
15254
  this.dismiss();
15121
15255
  }
@@ -15232,12 +15366,12 @@ let CalcitePanel$1 = class extends HTMLElement$1 {
15232
15366
  return (h("div", { class: CSS$j.fabContainer }, h("slot", { name: SLOTS$c.fab })));
15233
15367
  }
15234
15368
  render() {
15235
- const { dismissed, disabled, dismissible, el, loading, panelKeyUpHandler } = this;
15369
+ const { dismissed, disabled, dismissible, el, loading, panelKeyDownHandler } = this;
15236
15370
  const rtl = getElementDir(el) === "rtl";
15237
15371
  const panelNode = (h("article", { "aria-busy": loading.toString(), class: {
15238
15372
  [CSS$j.container]: true,
15239
15373
  [CSS_UTILITY.rtl]: rtl
15240
- }, hidden: dismissible && dismissed, onKeyUp: panelKeyUpHandler, ref: this.setContainerRef, tabIndex: dismissible ? 0 : -1 }, this.renderHeaderNode(), this.renderContent(), this.renderFooterSlottedContent() || this.renderFooterActions()));
15374
+ }, hidden: dismissible && dismissed, onKeyDown: panelKeyDownHandler, ref: this.setContainerRef, tabIndex: dismissible ? 0 : -1 }, this.renderHeaderNode(), this.renderContent(), this.renderFooterSlottedContent() || this.renderFooterActions()));
15241
15375
  return (h(Fragment, null, loading || disabled ? h("calcite-scrim", { loading: loading }) : null, panelNode));
15242
15376
  }
15243
15377
  get el() { return this; }
@@ -22919,26 +23053,32 @@ let CalciteTileSelectGroup$1 = class extends HTMLElement$1 {
22919
23053
  };
22920
23054
 
22921
23055
  const CSS$5 = {
23056
+ button: "button",
22922
23057
  buttonBottomLeft: "button--bottom-left",
22923
23058
  buttonBottomRight: "button--bottom-right",
22924
- button: "button",
22925
- delimiter: "delimiter",
22926
- hour: "hour",
22927
23059
  buttonHourDown: "button--hour-down",
22928
23060
  buttonHourUp: "button--hour-up",
22929
- input: "input",
22930
- meridiem: "meridiem",
22931
23061
  buttonMeridiemDown: "button--meridiem-down",
22932
23062
  buttonMeridiemUp: "button--meridiem-up",
22933
- minute: "minute",
22934
23063
  buttonMinuteDown: "button--minute-down",
22935
23064
  buttonMinuteUp: "button--minute-up",
22936
- second: "second",
22937
23065
  buttonSecondDown: "button--second-down",
22938
23066
  buttonSecondUp: "button--second-up",
22939
- timePicker: "time-picker",
22940
23067
  buttonTopLeft: "button--top-left",
22941
- buttonTopRight: "button--top-right"
23068
+ buttonTopRight: "button--top-right",
23069
+ column: "column",
23070
+ delimiter: "delimiter",
23071
+ hour: "hour",
23072
+ input: "input",
23073
+ meridiem: "meridiem",
23074
+ minute: "minute",
23075
+ second: "second",
23076
+ showMeridiem: "show-meridiem",
23077
+ showSecond: "show-second",
23078
+ "scale-s": "scale-s",
23079
+ "scale-m": "scale-m",
23080
+ "scale-l": "scale-l",
23081
+ timePicker: "time-picker"
22942
23082
  };
22943
23083
  const TEXT$2 = {
22944
23084
  hour: "Hour",
@@ -22955,8 +23095,11 @@ const TEXT$2 = {
22955
23095
  secondUp: "Increase second"
22956
23096
  };
22957
23097
 
22958
- const calciteTimePickerCss = "@-webkit-keyframes in{0%{opacity:0}100%{opacity:1}}@keyframes in{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes in-down{0%{opacity:0;-webkit-transform:translate3D(0, -5px, 0);transform:translate3D(0, -5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@keyframes in-down{0%{opacity:0;-webkit-transform:translate3D(0, -5px, 0);transform:translate3D(0, -5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@-webkit-keyframes in-up{0%{opacity:0;-webkit-transform:translate3D(0, 5px, 0);transform:translate3D(0, 5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@keyframes in-up{0%{opacity:0;-webkit-transform:translate3D(0, 5px, 0);transform:translate3D(0, 5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@-webkit-keyframes in-scale{0%{opacity:0;-webkit-transform:scale3D(0.95, 0.95, 1);transform:scale3D(0.95, 0.95, 1)}100%{opacity:1;-webkit-transform:scale3D(1, 1, 1);transform:scale3D(1, 1, 1)}}@keyframes in-scale{0%{opacity:0;-webkit-transform:scale3D(0.95, 0.95, 1);transform:scale3D(0.95, 0.95, 1)}100%{opacity:1;-webkit-transform:scale3D(1, 1, 1);transform:scale3D(1, 1, 1)}}:root{--calcite-animation-timing:300ms}.calcite-animate{opacity:0;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:var(--calcite-animation-timing);animation-duration:var(--calcite-animation-timing)}.calcite-animate__in{-webkit-animation-name:in;animation-name:in}.calcite-animate__in-down{-webkit-animation-name:in-down;animation-name:in-down}.calcite-animate__in-up{-webkit-animation-name:in-up;animation-name:in-up}.calcite-animate__in-scale{-webkit-animation-name:in-scale;animation-name:in-scale}:root{--calcite-popper-transition:150ms ease-in-out}:host([hidden]){display:none}:host{color:var(--calcite-ui-text-1);display:inline-block;font-weight:var(--calcite-font-weight-medium);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.time-picker{-webkit-box-shadow:0 6px 20px -4px rgba(0, 0, 0, 0.1), 0 4px 12px -2px rgba(0, 0, 0, 0.08);box-shadow:0 6px 20px -4px rgba(0, 0, 0, 0.1), 0 4px 12px -2px rgba(0, 0, 0, 0.08);-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;border-radius:var(--calcite-border-radius)}span{-ms-flex-align:center;align-items:center;background-color:var(--calcite-ui-foreground-1);display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center}span.button{cursor:pointer}span.button:hover,span.button:focus{background-color:var(--calcite-ui-foreground-2)}span.button:focus{outline:2px solid transparent;outline-offset:2px}span.button:active{background-color:var(--calcite-ui-foreground-3)}span.button.top-left{border-top-left-radius:var(--calcite-border-radius)}span.button.bottom-left{border-bottom-left-radius:var(--calcite-border-radius)}span.button.top-right{border-top-right-radius:var(--calcite-border-radius)}span.button.bottom-right{border-bottom-right-radius:var(--calcite-border-radius)}span.button calcite-icon{color:var(--calcite-ui-text-3)}span.input{font-weight:var(--calcite-font-weight-medium);position:relative}span.input:hover{-webkit-box-shadow:inset 0 0 0 2px var(--calcite-ui-foreground-2);box-shadow:inset 0 0 0 2px var(--calcite-ui-foreground-2)}span.input:focus,span.input:hover:focus{outline:2px solid transparent;outline-offset:2px;-webkit-box-shadow:inset 0 0 0 2px var(--calcite-ui-brand);box-shadow:inset 0 0 0 2px var(--calcite-ui-brand)}:host([scale=s]){font-size:var(--calcite-font-size--1)}:host([scale=s]) span{height:24px;width:40px}:host([scale=s]) .delimiter{height:72px}:host([scale=s][hour-display-format=\"12\"]) .time-picker{width:124.2px}:host([scale=s][hour-display-format=\"12\"]:not([step=\"60\"])) .time-picker{width:168px}:host([scale=s][hour-display-format=\"24\"]) .time-picker{width:84.2px}:host([scale=s][hour-display-format=\"24\"]:not([step=\"60\"])) .time-picker{width:128.4px}:host([scale=m]){font-size:var(--calcite-font-size-0)}:host([scale=m]) span{height:32px;width:44px}:host([scale=m]) .delimiter{height:96px}:host([scale=m][hour-display-format=\"12\"]) .time-picker{width:136.8px}:host([scale=m][hour-display-format=\"12\"]:not([step=\"60\"])) .time-picker{width:186px}:host([scale=m][hour-display-format=\"24\"]) .time-picker{width:92.8px}:host([scale=m][hour-display-format=\"24\"]:not([step=\"60\"])) .time-picker{width:141.6px}:host([scale=l]){font-size:var(--calcite-font-size-1)}:host([scale=l]) span{height:48px;width:64px}:host([scale=l]) .delimiter{height:144px}:host([scale=l][hour-display-format=\"12\"]) .time-picker{width:198px}:host([scale=l][hour-display-format=\"12\"]:not([step=\"60\"])) .time-picker{width:268px}:host([scale=l][hour-display-format=\"24\"]) .time-picker{width:134px}:host([scale=l][hour-display-format=\"24\"]:not([step=\"60\"])) .time-picker{width:204px}";
23098
+ const calciteTimePickerCss = "@-webkit-keyframes in{0%{opacity:0}100%{opacity:1}}@keyframes in{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes in-down{0%{opacity:0;-webkit-transform:translate3D(0, -5px, 0);transform:translate3D(0, -5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@keyframes in-down{0%{opacity:0;-webkit-transform:translate3D(0, -5px, 0);transform:translate3D(0, -5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@-webkit-keyframes in-up{0%{opacity:0;-webkit-transform:translate3D(0, 5px, 0);transform:translate3D(0, 5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@keyframes in-up{0%{opacity:0;-webkit-transform:translate3D(0, 5px, 0);transform:translate3D(0, 5px, 0)}100%{opacity:1;-webkit-transform:translate3D(0, 0, 0);transform:translate3D(0, 0, 0)}}@-webkit-keyframes in-scale{0%{opacity:0;-webkit-transform:scale3D(0.95, 0.95, 1);transform:scale3D(0.95, 0.95, 1)}100%{opacity:1;-webkit-transform:scale3D(1, 1, 1);transform:scale3D(1, 1, 1)}}@keyframes in-scale{0%{opacity:0;-webkit-transform:scale3D(0.95, 0.95, 1);transform:scale3D(0.95, 0.95, 1)}100%{opacity:1;-webkit-transform:scale3D(1, 1, 1);transform:scale3D(1, 1, 1)}}:root{--calcite-animation-timing:300ms}.calcite-animate{opacity:0;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:var(--calcite-animation-timing);animation-duration:var(--calcite-animation-timing)}.calcite-animate__in{-webkit-animation-name:in;animation-name:in}.calcite-animate__in-down{-webkit-animation-name:in-down;animation-name:in-down}.calcite-animate__in-up{-webkit-animation-name:in-up;animation-name:in-up}.calcite-animate__in-scale{-webkit-animation-name:in-scale;animation-name:in-scale}:root{--calcite-popper-transition:150ms ease-in-out}:host([hidden]){display:none}:host{display:inline-block}.time-picker{background-color:var(--calcite-ui-foreground-1);display:-ms-flexbox;display:flex;font-weight:var(--calcite-font-weight-medium);-ms-flex-align:center;align-items:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-shadow:0 6px 20px -4px rgba(0, 0, 0, 0.1), 0 4px 12px -2px rgba(0, 0, 0, 0.08);box-shadow:0 6px 20px -4px rgba(0, 0, 0, 0.1), 0 4px 12px -2px rgba(0, 0, 0, 0.08);color:var(--calcite-ui-text-1);border-radius:var(--calcite-border-radius)}.time-picker .column{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.time-picker .button{background-color:var(--calcite-ui-foreground-1);cursor:pointer;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.time-picker .button:hover,.time-picker .button:focus{background-color:var(--calcite-ui-foreground-2);outline:2px solid transparent;outline-offset:2px}.time-picker .button:active{background-color:var(--calcite-ui-foreground-3)}.time-picker .button.top-left{border-top-left-radius:var(--calcite-border-radius)}.time-picker .button.bottom-left{border-bottom-left-radius:var(--calcite-border-radius)}.time-picker .button.top-right{border-top-right-radius:var(--calcite-border-radius)}.time-picker .button.bottom-right{border-bottom-right-radius:var(--calcite-border-radius)}.time-picker .button calcite-icon{color:var(--calcite-ui-text-3)}.time-picker .input{background-color:var(--calcite-ui-foreground-1);cursor:pointer;font-weight:var(--calcite-font-weight-medium);display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.time-picker .input:hover{-webkit-box-shadow:inset 0 0 0 2px var(--calcite-ui-foreground-2);box-shadow:inset 0 0 0 2px var(--calcite-ui-foreground-2)}.time-picker .input:focus,.time-picker .input:hover:focus{outline:2px solid transparent;outline-offset:2px;-webkit-box-shadow:inset 0 0 0 2px var(--calcite-ui-brand);box-shadow:inset 0 0 0 2px var(--calcite-ui-brand)}.time-picker.scale-s{font-size:var(--calcite-font-size--1)}.time-picker.scale-s .button,.time-picker.scale-s .input{padding-left:0.75rem;padding-right:0.75rem;padding-top:0.25rem;padding-bottom:0.25rem}.time-picker.scale-s:not(.show-meridiem) .delimiter:last-child{-webkit-padding-end:0.75rem;padding-inline-end:0.75rem}.time-picker.scale-m{font-size:var(--calcite-font-size-0)}.time-picker.scale-m .button,.time-picker.scale-m .input{padding-left:1rem;padding-right:1rem;padding-top:0.5rem;padding-bottom:0.5rem}.time-picker.scale-m:not(.show-meridiem) .delimiter:last-child{-webkit-padding-end:1rem;padding-inline-end:1rem}.time-picker.scale-l{font-size:var(--calcite-font-size-1)}.time-picker.scale-l .button,.time-picker.scale-l .input{padding-left:1.25rem;padding-right:1.25rem;padding-top:0.75rem;padding-bottom:0.75rem}.time-picker.scale-l:not(.show-meridiem) .delimiter:last-child{-webkit-padding-end:1.25rem;padding-inline-end:1.25rem}";
22959
23099
 
23100
+ function capitalize(str) {
23101
+ return str.charAt(0).toUpperCase() + str.slice(1);
23102
+ }
22960
23103
  let CalciteTimePicker$1 = class extends HTMLElement$1 {
22961
23104
  constructor() {
22962
23105
  super();
@@ -22970,10 +23113,6 @@ let CalciteTimePicker$1 = class extends HTMLElement$1 {
22970
23113
  // Properties
22971
23114
  //
22972
23115
  //--------------------------------------------------------------------------
22973
- /** The hour value (24-hour format) */
22974
- this.hour = null;
22975
- /** Format of the hour value (12-hour or 24-hour) (this will be replaced by locale eventually) */
22976
- this.hourDisplayFormat = "12";
22977
23116
  /** aria-label for the hour input
22978
23117
  * @default "Hour"
22979
23118
  */
@@ -23022,35 +23161,25 @@ let CalciteTimePicker$1 = class extends HTMLElement$1 {
23022
23161
  * @default "Increase second"
23023
23162
  */
23024
23163
  this.intlSecondUp = TEXT$2.secondUp;
23025
- /** The minute value */
23026
- this.minute = null;
23027
- /** The second value */
23028
- this.second = null;
23164
+ /**
23165
+ * BCP 47 language tag for desired language and country format
23166
+ * @internal
23167
+ */
23168
+ this.locale = document.documentElement.lang || navigator.language || "en";
23029
23169
  /** The scale (size) of the time picker */
23030
23170
  this.scale = "m";
23031
23171
  /** number that specifies the granularity that the value must adhere to */
23032
23172
  this.step = 60;
23033
- this.timeChanged = false;
23034
- // --------------------------------------------------------------------------
23035
- //
23036
- // State
23037
- //
23038
- // --------------------------------------------------------------------------
23039
- /** The am/pm value */
23040
- this.meridiem = null;
23041
- this.displayHour = this.getDisplayHour();
23042
- // --------------------------------------------------------------------------
23043
- //
23044
- // Private Methods
23045
- //
23046
- // --------------------------------------------------------------------------
23173
+ /** The selected time in UTC */
23174
+ this.value = null;
23175
+ this.showSecond = this.step < 60;
23047
23176
  this.decrementHour = () => {
23048
23177
  const newHour = !this.hour ? 0 : this.hour === "00" ? 23 : parseInt(this.hour) - 1;
23049
- this.setTime("hour", newHour);
23178
+ this.setValuePart("hour", newHour);
23050
23179
  };
23051
23180
  this.decrementMeridiem = () => {
23052
23181
  const newMeridiem = this.meridiem === "PM" ? "AM" : "PM";
23053
- this.setTime("meridiem", newMeridiem);
23182
+ this.setValuePart("meridiem", newMeridiem);
23054
23183
  };
23055
23184
  this.decrementMinuteOrSecond = (key) => {
23056
23185
  let newValue;
@@ -23061,7 +23190,7 @@ let CalciteTimePicker$1 = class extends HTMLElement$1 {
23061
23190
  else {
23062
23191
  newValue = 59;
23063
23192
  }
23064
- this.setTime(key, newValue);
23193
+ this.setValuePart(key, newValue);
23065
23194
  };
23066
23195
  this.decrementMinute = () => {
23067
23196
  this.decrementMinuteOrSecond("minute");
@@ -23083,7 +23212,7 @@ let CalciteTimePicker$1 = class extends HTMLElement$1 {
23083
23212
  const keyAsNumber = parseInt(key);
23084
23213
  let newHour;
23085
23214
  if (isValidNumber(this.hour)) {
23086
- switch (this.hourDisplayFormat) {
23215
+ switch (this.hourCycle) {
23087
23216
  case "12":
23088
23217
  newHour =
23089
23218
  this.hour === "01" && keyAsNumber >= 0 && keyAsNumber <= 2
@@ -23106,13 +23235,13 @@ let CalciteTimePicker$1 = class extends HTMLElement$1 {
23106
23235
  else {
23107
23236
  newHour = keyAsNumber;
23108
23237
  }
23109
- this.setTime("hour", newHour);
23238
+ this.setValuePart("hour", newHour);
23110
23239
  }
23111
23240
  else {
23112
23241
  switch (key) {
23113
23242
  case "Backspace":
23114
23243
  case "Delete":
23115
- this.setTime("hour", null);
23244
+ this.setValuePart("hour", null);
23116
23245
  break;
23117
23246
  case "ArrowDown":
23118
23247
  event.preventDefault();
@@ -23136,7 +23265,7 @@ let CalciteTimePicker$1 = class extends HTMLElement$1 {
23136
23265
  };
23137
23266
  this.incrementMeridiem = () => {
23138
23267
  const newMeridiem = this.meridiem === "AM" ? "PM" : "AM";
23139
- this.setTime("meridiem", newMeridiem);
23268
+ this.setValuePart("meridiem", newMeridiem);
23140
23269
  };
23141
23270
  this.incrementHour = () => {
23142
23271
  const newHour = isValidNumber(this.hour)
@@ -23144,7 +23273,7 @@ let CalciteTimePicker$1 = class extends HTMLElement$1 {
23144
23273
  ? 0
23145
23274
  : parseInt(this.hour) + 1
23146
23275
  : 1;
23147
- this.setTime("hour", newHour);
23276
+ this.setValuePart("hour", newHour);
23148
23277
  };
23149
23278
  this.incrementMinuteOrSecond = (key) => {
23150
23279
  const newValue = isValidNumber(this[key])
@@ -23152,7 +23281,7 @@ let CalciteTimePicker$1 = class extends HTMLElement$1 {
23152
23281
  ? 0
23153
23282
  : parseInt(this[key]) + 1
23154
23283
  : 0;
23155
- this.setTime(key, newValue);
23284
+ this.setValuePart(key, newValue);
23156
23285
  };
23157
23286
  this.incrementMinute = () => {
23158
23287
  this.incrementMinuteOrSecond("minute");
@@ -23168,14 +23297,14 @@ let CalciteTimePicker$1 = class extends HTMLElement$1 {
23168
23297
  this.meridiemKeyDownHandler = (event) => {
23169
23298
  switch (event.key) {
23170
23299
  case "a":
23171
- this.setTime("meridiem", "AM");
23300
+ this.setValuePart("meridiem", "AM");
23172
23301
  break;
23173
23302
  case "p":
23174
- this.setTime("meridiem", "PM");
23303
+ this.setValuePart("meridiem", "PM");
23175
23304
  break;
23176
23305
  case "Backspace":
23177
23306
  case "Delete":
23178
- this.setTime("meridiem", null);
23307
+ this.setValuePart("meridiem", null);
23179
23308
  break;
23180
23309
  case "ArrowUp":
23181
23310
  event.preventDefault();
@@ -23216,13 +23345,13 @@ let CalciteTimePicker$1 = class extends HTMLElement$1 {
23216
23345
  else {
23217
23346
  newMinute = keyAsNumber;
23218
23347
  }
23219
- this.setTime("minute", newMinute);
23348
+ this.setValuePart("minute", newMinute);
23220
23349
  }
23221
23350
  else {
23222
23351
  switch (key) {
23223
23352
  case "Backspace":
23224
23353
  case "Delete":
23225
- this.setTime("minute", null);
23354
+ this.setValuePart("minute", null);
23226
23355
  break;
23227
23356
  case "ArrowDown":
23228
23357
  event.preventDefault();
@@ -23264,13 +23393,13 @@ let CalciteTimePicker$1 = class extends HTMLElement$1 {
23264
23393
  else {
23265
23394
  newSecond = keyAsNumber;
23266
23395
  }
23267
- this.setTime("second", newSecond);
23396
+ this.setValuePart("second", newSecond);
23268
23397
  }
23269
23398
  else {
23270
23399
  switch (key) {
23271
23400
  case "Backspace":
23272
23401
  case "Delete":
23273
- this.setTime("second", null);
23402
+ this.setValuePart("second", null);
23274
23403
  break;
23275
23404
  case "ArrowDown":
23276
23405
  event.preventDefault();
@@ -23292,59 +23421,96 @@ let CalciteTimePicker$1 = class extends HTMLElement$1 {
23292
23421
  this.incrementSecond();
23293
23422
  }
23294
23423
  };
23295
- this.setTime = (key, value, emit = true) => {
23296
- switch (key) {
23297
- default:
23298
- return;
23299
- case "hour":
23300
- this.hour = typeof value === "number" ? formatTimePart(value) : value;
23301
- break;
23302
- case "minute":
23303
- this.minute = typeof value === "number" ? formatTimePart(value) : value;
23304
- break;
23305
- case "second":
23306
- this.second = typeof value === "number" ? formatTimePart(value) : value;
23307
- break;
23308
- case "meridiem":
23309
- if (isValidNumber(this.hour)) {
23310
- const hourAsNumber = parseInt(this.hour);
23311
- switch (value) {
23312
- case "AM":
23313
- if (hourAsNumber >= 12) {
23314
- this.hour = formatTimePart(hourAsNumber - 12);
23315
- }
23316
- break;
23317
- case "PM":
23318
- if (hourAsNumber < 12) {
23319
- this.hour = formatTimePart(hourAsNumber + 12);
23320
- }
23321
- break;
23322
- }
23323
- this.meridiem = value;
23324
- }
23325
- else {
23326
- this.meridiem = value;
23424
+ this.setHourEl = (el) => (this.hourEl = el);
23425
+ this.setMeridiemEl = (el) => (this.meridiemEl = el);
23426
+ this.setMinuteEl = (el) => (this.minuteEl = el);
23427
+ this.setSecondEl = (el) => (this.secondEl = el);
23428
+ this.setValue = (value, emit = true) => {
23429
+ if (isValidTime(value)) {
23430
+ const { hour, minute, second } = parseTimeString(value);
23431
+ const { localizedHour, localizedHourSuffix, localizedMinute, localizedMinuteSuffix, localizedSecond, localizedSecondSuffix, localizedMeridiem } = localizeTimeStringToParts(value, this.locale);
23432
+ this.localizedHour = localizedHour;
23433
+ this.localizedHourSuffix = localizedHourSuffix;
23434
+ this.localizedMinute = localizedMinute;
23435
+ this.localizedMinuteSuffix = localizedMinuteSuffix;
23436
+ this.localizedSecond = localizedSecond;
23437
+ this.localizedSecondSuffix = localizedSecondSuffix;
23438
+ this.hour = hour;
23439
+ this.minute = minute;
23440
+ this.second = second;
23441
+ if (localizedMeridiem) {
23442
+ this.localizedMeridiem = localizedMeridiem;
23443
+ this.meridiem = getMeridiem(this.hour);
23444
+ }
23445
+ }
23446
+ else {
23447
+ this.hour = null;
23448
+ this.localizedHour = null;
23449
+ this.localizedHourSuffix = null;
23450
+ this.localizedMeridiem = null;
23451
+ this.localizedMinute = null;
23452
+ this.localizedMinuteSuffix = null;
23453
+ this.localizedSecond = null;
23454
+ this.localizedSecondSuffix = null;
23455
+ this.meridiem = null;
23456
+ this.minute = null;
23457
+ this.second = null;
23458
+ this.value = null;
23459
+ }
23460
+ if (emit) {
23461
+ this.calciteTimePickerChange.emit();
23462
+ }
23463
+ };
23464
+ this.setValuePart = (key, value, emit = true) => {
23465
+ var _a;
23466
+ if (key === "meridiem") {
23467
+ this.meridiem = value;
23468
+ if (isValidNumber(this.hour)) {
23469
+ const hourAsNumber = parseInt(this.hour);
23470
+ switch (value) {
23471
+ case "AM":
23472
+ if (hourAsNumber >= 12) {
23473
+ this.hour = formatTimePart(hourAsNumber - 12);
23474
+ }
23475
+ break;
23476
+ case "PM":
23477
+ if (hourAsNumber < 12) {
23478
+ this.hour = formatTimePart(hourAsNumber + 12);
23479
+ }
23480
+ break;
23327
23481
  }
23328
- break;
23482
+ this.localizedHour = localizeTimePart(this.hour, "hour", this.locale);
23483
+ }
23484
+ }
23485
+ else {
23486
+ this[key] = typeof value === "number" ? formatTimePart(value) : value;
23487
+ this[`localized${capitalize(key)}`] = localizeTimePart(this[key], key, this.locale);
23488
+ }
23489
+ if (this.hour && this.minute) {
23490
+ const showSeconds = this.second && this.showSecond;
23491
+ this.value = `${this.hour}:${this.minute}:${showSeconds ? this.second : "00"}`;
23329
23492
  }
23330
- this.timeChanged = true;
23493
+ else {
23494
+ this.value = null;
23495
+ }
23496
+ this.localizedMeridiem = this.value
23497
+ ? ((_a = localizeTimeStringToParts(this.value, this.locale)) === null || _a === void 0 ? void 0 : _a.localizedMeridiem) || null
23498
+ : localizeTimePart(this.meridiem, "meridiem", this.locale);
23331
23499
  if (emit) {
23332
- this.calciteTimePickerChange.emit(this.getTime());
23500
+ this.calciteTimePickerChange.emit();
23333
23501
  }
23334
23502
  };
23335
23503
  }
23336
- hourChanged(newHour) {
23337
- if (this.hourDisplayFormat === "12" && isValidNumber(newHour)) {
23338
- this.meridiem = getMeridiem(newHour);
23339
- }
23504
+ localeWatcher(newLocale) {
23505
+ this.hourCycle = getLocaleHourCycle(newLocale);
23506
+ this.setValue(this.value, false);
23340
23507
  }
23341
- timeChangeHandler() {
23342
- const { hour, minute } = this.getTime();
23343
- if (!hour && !minute) {
23344
- this.setTime("meridiem", null, false);
23345
- }
23346
- if (this.timeChanged) {
23347
- this.timeChanged = false;
23508
+ valueWatcher(newValue) {
23509
+ this.setValue(newValue, false);
23510
+ }
23511
+ hourChanged(newHour) {
23512
+ if (this.meridiem && isValidNumber(newHour)) {
23513
+ this.setValuePart("meridiem", getMeridiem(newHour));
23348
23514
  }
23349
23515
  }
23350
23516
  //--------------------------------------------------------------------------
@@ -23375,7 +23541,7 @@ let CalciteTimePicker$1 = class extends HTMLElement$1 {
23375
23541
  if (this.step !== 60) {
23376
23542
  this.setFocus("second");
23377
23543
  }
23378
- else if (this.hourDisplayFormat === "12") {
23544
+ else if (this.hourCycle === "12") {
23379
23545
  this.setFocus("meridiem");
23380
23546
  }
23381
23547
  break;
@@ -23387,7 +23553,7 @@ let CalciteTimePicker$1 = class extends HTMLElement$1 {
23387
23553
  this.setFocus("minute");
23388
23554
  break;
23389
23555
  case "ArrowRight":
23390
- if (this.hourDisplayFormat === "12") {
23556
+ if (this.hourCycle === "12") {
23391
23557
  this.setFocus("meridiem");
23392
23558
  }
23393
23559
  break;
@@ -23417,6 +23583,11 @@ let CalciteTimePicker$1 = class extends HTMLElement$1 {
23417
23583
  var _a;
23418
23584
  (_a = this[`${target || "hour"}El`]) === null || _a === void 0 ? void 0 : _a.focus();
23419
23585
  }
23586
+ // --------------------------------------------------------------------------
23587
+ //
23588
+ // Private Methods
23589
+ //
23590
+ // --------------------------------------------------------------------------
23420
23591
  buttonActivated(event) {
23421
23592
  const key = event.key;
23422
23593
  if (key === " ") {
@@ -23424,40 +23595,14 @@ let CalciteTimePicker$1 = class extends HTMLElement$1 {
23424
23595
  }
23425
23596
  return isActivationKey(key);
23426
23597
  }
23427
- getDisplayHour() {
23428
- if (!this.hour) {
23429
- return "--";
23430
- }
23431
- if (this.hourDisplayFormat === "12") {
23432
- return getMeridiemHour(this.hour);
23433
- }
23434
- return this.hour;
23435
- }
23436
- getTime() {
23437
- return {
23438
- hour: this.hour,
23439
- minute: this.minute,
23440
- second: this.second
23441
- };
23442
- }
23443
23598
  // --------------------------------------------------------------------------
23444
23599
  //
23445
23600
  // Lifecycle
23446
23601
  //
23447
23602
  // --------------------------------------------------------------------------
23448
23603
  connectedCallback() {
23449
- if (this.hourDisplayFormat === "12") {
23450
- this.meridiem = getMeridiem(this.hour);
23451
- }
23452
- if (isValidNumber(this.hour)) {
23453
- this.hour = formatTimePart(parseInt(this.hour));
23454
- }
23455
- if (isValidNumber(this.minute)) {
23456
- this.minute = formatTimePart(parseInt(this.minute));
23457
- }
23458
- if (isValidNumber(this.second)) {
23459
- this.second = formatTimePart(parseInt(this.second));
23460
- }
23604
+ this.setValue(this.value, false);
23605
+ this.hourCycle = getLocaleHourCycle(this.locale);
23461
23606
  }
23462
23607
  // --------------------------------------------------------------------------
23463
23608
  //
@@ -23465,58 +23610,63 @@ let CalciteTimePicker$1 = class extends HTMLElement$1 {
23465
23610
  //
23466
23611
  // --------------------------------------------------------------------------
23467
23612
  render() {
23468
- const iconScale = this.scale === "s" || this.scale === "m" ? "s" : "m";
23469
- const includeSeconds = this.step !== 60;
23470
23613
  const hourIsNumber = isValidNumber(this.hour);
23614
+ const iconScale = this.scale === "s" || this.scale === "m" ? "s" : "m";
23471
23615
  const minuteIsNumber = isValidNumber(this.minute);
23472
23616
  const secondIsNumber = isValidNumber(this.second);
23473
- return (h(Host, null, h("div", { class: CSS$5.timePicker }, h("div", { role: "group" }, h("span", { "aria-label": this.intlHourUp, class: {
23617
+ const showMeridiem = this.hourCycle === "12";
23618
+ return (h("div", { class: {
23619
+ [CSS$5.timePicker]: true,
23620
+ [CSS$5.showMeridiem]: showMeridiem,
23621
+ [CSS$5.showSecond]: this.showSecond,
23622
+ [CSS$5[`scale-${this.scale}`]]: true
23623
+ } }, h("div", { class: CSS$5.column, role: "group" }, h("span", { "aria-label": this.intlHourUp, class: {
23474
23624
  [CSS$5.button]: true,
23475
23625
  [CSS$5.buttonHourUp]: true,
23476
23626
  [CSS$5.buttonTopLeft]: true
23477
- }, onClick: this.incrementHour, onKeyDown: this.hourUpButtonKeyDownHandler, role: "button", tabIndex: -1 }, h("calcite-icon", { icon: "chevron-up", scale: iconScale })), h("span", { "aria-label": this.intlHour, "aria-valuemax": "23", "aria-valuemin": "1", "aria-valuenow": hourIsNumber && parseInt(this.hour), "aria-valuetext": this.hour, class: {
23627
+ }, onClick: this.incrementHour, onKeyDown: this.hourUpButtonKeyDownHandler, role: "button", tabIndex: -1 }, h("calcite-icon", { icon: "chevron-up", scale: iconScale })), h("span", { "aria-label": this.intlHour, "aria-valuemax": "23", "aria-valuemin": "1", "aria-valuenow": (hourIsNumber && parseInt(this.hour)) || "0", "aria-valuetext": this.hour, class: {
23478
23628
  [CSS$5.input]: true,
23479
23629
  [CSS$5.hour]: true
23480
- }, onFocus: this.focusHandler, onKeyDown: this.hourKeyDownHandler, ref: (el) => (this.hourEl = el), role: "spinbutton", tabIndex: 0 }, this.getDisplayHour()), h("span", { "aria-label": this.intlHourDown, class: {
23630
+ }, onFocus: this.focusHandler, onKeyDown: this.hourKeyDownHandler, ref: this.setHourEl, role: "spinbutton", tabIndex: 0 }, this.localizedHour || "--"), h("span", { "aria-label": this.intlHourDown, class: {
23481
23631
  [CSS$5.button]: true,
23482
23632
  [CSS$5.buttonHourDown]: true,
23483
23633
  [CSS$5.buttonBottomLeft]: true
23484
- }, onClick: this.decrementHour, onKeyDown: this.hourDownButtonKeyDownHandler, role: "button", tabIndex: -1 }, h("calcite-icon", { icon: "chevron-down", scale: iconScale }))), h("span", { class: CSS$5.delimiter }, ":"), h("div", { role: "group" }, h("span", { "aria-label": this.intlMinuteUp, class: {
23634
+ }, onClick: this.decrementHour, onKeyDown: this.hourDownButtonKeyDownHandler, role: "button", tabIndex: -1 }, h("calcite-icon", { icon: "chevron-down", scale: iconScale }))), h("span", { class: CSS$5.delimiter }, this.localizedHourSuffix), h("div", { class: CSS$5.column, role: "group" }, h("span", { "aria-label": this.intlMinuteUp, class: {
23485
23635
  [CSS$5.button]: true,
23486
23636
  [CSS$5.buttonMinuteUp]: true
23487
- }, onClick: this.incrementMinute, onKeyDown: this.minuteUpButtonKeyDownHandler, role: "button", tabIndex: -1 }, h("calcite-icon", { icon: "chevron-up", scale: iconScale })), h("span", { "aria-label": this.intlMinute, "aria-valuemax": "12", "aria-valuemin": "1", "aria-valuenow": minuteIsNumber && parseInt(this.minute), "aria-valuetext": this.minute, class: {
23637
+ }, onClick: this.incrementMinute, onKeyDown: this.minuteUpButtonKeyDownHandler, role: "button", tabIndex: -1 }, h("calcite-icon", { icon: "chevron-up", scale: iconScale })), h("span", { "aria-label": this.intlMinute, "aria-valuemax": "12", "aria-valuemin": "1", "aria-valuenow": (minuteIsNumber && parseInt(this.minute)) || "0", "aria-valuetext": this.minute, class: {
23488
23638
  [CSS$5.input]: true,
23489
23639
  [CSS$5.minute]: true
23490
- }, onFocus: this.focusHandler, onKeyDown: this.minuteKeyDownHandler, ref: (el) => (this.minuteEl = el), role: "spinbutton", tabIndex: 0 }, this.minute ? this.minute : "--"), h("span", { "aria-label": this.intlMinuteDown, class: {
23640
+ }, onFocus: this.focusHandler, onKeyDown: this.minuteKeyDownHandler, ref: this.setMinuteEl, role: "spinbutton", tabIndex: 0 }, this.localizedMinute || "--"), h("span", { "aria-label": this.intlMinuteDown, class: {
23491
23641
  [CSS$5.button]: true,
23492
23642
  [CSS$5.buttonMinuteDown]: true
23493
- }, onClick: this.decrementMinute, onKeyDown: this.minuteDownButtonKeyDownHandler, role: "button", tabIndex: -1 }, h("calcite-icon", { icon: "chevron-down", scale: iconScale }))), includeSeconds && h("span", { class: CSS$5.delimiter }, ":"), includeSeconds && (h("div", { role: "group" }, h("span", { "aria-label": this.intlSecondUp, class: {
23643
+ }, onClick: this.decrementMinute, onKeyDown: this.minuteDownButtonKeyDownHandler, role: "button", tabIndex: -1 }, h("calcite-icon", { icon: "chevron-down", scale: iconScale }))), this.showSecond && h("span", { class: CSS$5.delimiter }, this.localizedMinuteSuffix), this.showSecond && (h("div", { class: CSS$5.column, role: "group" }, h("span", { "aria-label": this.intlSecondUp, class: {
23494
23644
  [CSS$5.button]: true,
23495
23645
  [CSS$5.buttonSecondUp]: true
23496
- }, onClick: this.incrementSecond, onKeyDown: this.secondUpButtonKeyDownHandler, role: "button", tabIndex: -1 }, h("calcite-icon", { icon: "chevron-up", scale: iconScale })), h("span", { "aria-label": this.intlSecond, "aria-valuemax": "59", "aria-valuemin": "0", "aria-valuenow": secondIsNumber && parseInt(this.second), "aria-valuetext": this.second, class: {
23646
+ }, onClick: this.incrementSecond, onKeyDown: this.secondUpButtonKeyDownHandler, role: "button", tabIndex: -1 }, h("calcite-icon", { icon: "chevron-up", scale: iconScale })), h("span", { "aria-label": this.intlSecond, "aria-valuemax": "59", "aria-valuemin": "0", "aria-valuenow": (secondIsNumber && parseInt(this.second)) || "0", "aria-valuetext": this.second, class: {
23497
23647
  [CSS$5.input]: true,
23498
23648
  [CSS$5.second]: true
23499
- }, onFocus: this.focusHandler, onKeyDown: this.secondKeyDownHandler, ref: (el) => (this.secondEl = el), role: "spinbutton", tabIndex: 0 }, this.second ? this.second : "--"), h("span", { "aria-label": this.intlSecondDown, class: {
23649
+ }, onFocus: this.focusHandler, onKeyDown: this.secondKeyDownHandler, ref: this.setSecondEl, role: "spinbutton", tabIndex: 0 }, this.localizedSecond || "--"), h("span", { "aria-label": this.intlSecondDown, class: {
23500
23650
  [CSS$5.button]: true,
23501
23651
  [CSS$5.buttonSecondDown]: true
23502
- }, onClick: this.decrementSecond, onKeyDown: this.secondDownButtonKeyDownHandler, role: "button", tabIndex: -1 }, h("calcite-icon", { icon: "chevron-down", scale: iconScale })))), this.hourDisplayFormat === "12" && (h("div", { role: "group" }, h("span", { "aria-label": this.intlMeridiemUp, class: {
23652
+ }, onClick: this.decrementSecond, onKeyDown: this.secondDownButtonKeyDownHandler, role: "button", tabIndex: -1 }, h("calcite-icon", { icon: "chevron-down", scale: iconScale })))), this.localizedSecondSuffix && (h("span", { class: CSS$5.delimiter }, this.localizedSecondSuffix)), showMeridiem && (h("div", { class: CSS$5.column, role: "group" }, h("span", { "aria-label": this.intlMeridiemUp, class: {
23503
23653
  [CSS$5.button]: true,
23504
23654
  [CSS$5.buttonMeridiemUp]: true,
23505
23655
  [CSS$5.buttonTopRight]: true
23506
- }, onClick: this.incrementMeridiem, onKeyDown: this.meridiemUpButtonKeyDownHandler, role: "button", tabIndex: -1 }, h("calcite-icon", { icon: "chevron-up", scale: iconScale })), h("span", { "aria-label": this.intlMeridiem, "aria-valuemax": "2", "aria-valuemin": "1", "aria-valuenow": this.meridiem === "AM" ? "1" : this.meridiem === "PM" ? "2" : undefined, "aria-valuetext": this.meridiem, class: {
23656
+ }, onClick: this.incrementMeridiem, onKeyDown: this.meridiemUpButtonKeyDownHandler, role: "button", tabIndex: -1 }, h("calcite-icon", { icon: "chevron-up", scale: iconScale })), h("span", { "aria-label": this.intlMeridiem, "aria-valuemax": "2", "aria-valuemin": "1", "aria-valuenow": (this.meridiem === "PM" && "2") || "1", "aria-valuetext": this.meridiem, class: {
23507
23657
  [CSS$5.input]: true,
23508
23658
  [CSS$5.meridiem]: true
23509
- }, onFocus: this.focusHandler, onKeyDown: this.meridiemKeyDownHandler, ref: (el) => (this.meridiemEl = el), role: "spinbutton", tabIndex: 0 }, this.meridiem ? this.meridiem : "--"), h("span", { "aria-label": this.intlMeridiemDown, class: {
23659
+ }, onFocus: this.focusHandler, onKeyDown: this.meridiemKeyDownHandler, ref: this.setMeridiemEl, role: "spinbutton", tabIndex: 0 }, this.localizedMeridiem || "--"), h("span", { "aria-label": this.intlMeridiemDown, class: {
23510
23660
  [CSS$5.button]: true,
23511
23661
  [CSS$5.buttonMeridiemDown]: true,
23512
23662
  [CSS$5.buttonBottomRight]: true
23513
- }, onClick: this.decrementMeridiem, onKeyDown: this.meridiemDownButtonKeyDownHandler, role: "button", tabIndex: -1 }, h("calcite-icon", { icon: "chevron-down", scale: iconScale })))))));
23663
+ }, onClick: this.decrementMeridiem, onKeyDown: this.meridiemDownButtonKeyDownHandler, role: "button", tabIndex: -1 }, h("calcite-icon", { icon: "chevron-down", scale: iconScale }))))));
23514
23664
  }
23515
23665
  get el() { return this; }
23516
23666
  static get watchers() { return {
23517
- "hour": ["hourChanged", "timeChangeHandler"],
23518
- "minute": ["timeChangeHandler"],
23519
- "second": ["timeChangeHandler"]
23667
+ "locale": ["localeWatcher"],
23668
+ "value": ["valueWatcher"],
23669
+ "hour": ["hourChanged"]
23520
23670
  }; }
23521
23671
  static get style() { return calciteTimePickerCss; }
23522
23672
  };
@@ -24959,7 +25109,7 @@ const CalciteInlineEditable = /*@__PURE__*/proxyCustomElement(CalciteInlineEdita
24959
25109
  const CalciteInput = /*@__PURE__*/proxyCustomElement(CalciteInput$1, [1,"calcite-input",{"alignment":[513],"autofocus":[4],"clearable":[516],"disabled":[516],"groupSeparator":[4,"group-separator"],"hidden":[4],"icon":[520],"intlLoading":[1,"intl-loading"],"iconFlipRtl":[516,"icon-flip-rtl"],"label":[1],"loading":[516],"locale":[1],"localeFormat":[4,"locale-format"],"max":[514],"min":[514],"maxlength":[514],"maxLength":[514,"max-length"],"minLength":[514,"min-length"],"name":[513],"numberButtonType":[513,"number-button-type"],"placeholder":[1],"prefixText":[1,"prefix-text"],"readOnly":[4,"read-only"],"required":[4],"scale":[1537],"status":[1537],"step":[520],"suffixText":[1,"suffix-text"],"editingEnabled":[1540,"editing-enabled"],"type":[513],"value":[1025],"localizedValue":[32]}]);
24960
25110
  const CalciteInputDatePicker = /*@__PURE__*/proxyCustomElement(CalciteInputDatePicker$1, [1,"calcite-input-date-picker",{"disabled":[516],"value":[1025],"headingLevel":[2,"heading-level"],"valueAsDate":[1040],"startAsDate":[1040],"endAsDate":[1040],"minAsDate":[1040],"maxAsDate":[1040],"min":[1],"max":[1],"active":[1540],"name":[1],"intlPrevMonth":[1,"intl-prev-month"],"intlNextMonth":[1,"intl-next-month"],"locale":[1],"scale":[513],"range":[516],"required":[516],"start":[1025],"end":[1025],"overlayPositioning":[1,"overlay-positioning"],"proximitySelectionDisabled":[4,"proximity-selection-disabled"],"layout":[513],"focusedInput":[32],"localeData":[32]},[[0,"calciteDaySelect","calciteDaySelectHandler"]]]);
24961
25111
  const CalciteInputMessage = /*@__PURE__*/proxyCustomElement(CalciteInputMessage$1, [1,"calcite-input-message",{"active":[516],"icon":[520],"scale":[1537],"status":[1537],"type":[513]}]);
24962
- const CalciteInputTimePicker = /*@__PURE__*/proxyCustomElement(CalciteInputTimePicker$1, [1,"calcite-input-time-picker",{"active":[1540],"disabled":[516],"hourDisplayFormat":[1,"hour-display-format"],"intlHour":[1,"intl-hour"],"intlHourDown":[1,"intl-hour-down"],"intlHourUp":[1,"intl-hour-up"],"intlMeridiem":[1,"intl-meridiem"],"intlMeridiemDown":[1,"intl-meridiem-down"],"intlMeridiemUp":[1,"intl-meridiem-up"],"intlMinute":[1,"intl-minute"],"intlMinuteDown":[1,"intl-minute-down"],"intlMinuteUp":[1,"intl-minute-up"],"intlSecond":[1,"intl-second"],"intlSecondDown":[1,"intl-second-down"],"intlSecondUp":[1,"intl-second-up"],"name":[1],"required":[516],"scale":[513],"step":[2],"value":[1025]},[[0,"keyup","keyUpHandler"],[0,"calciteTimePickerBlur","timePickerBlurHandler"],[0,"calciteTimePickerChange","timePickerChangeHandler"],[0,"calciteTimePickerFocus","timePickerFocusHandler"]]]);
25112
+ const CalciteInputTimePicker = /*@__PURE__*/proxyCustomElement(CalciteInputTimePicker$1, [1,"calcite-input-time-picker",{"active":[1540],"disabled":[516],"intlHour":[1,"intl-hour"],"intlHourDown":[1,"intl-hour-down"],"intlHourUp":[1,"intl-hour-up"],"intlMeridiem":[1,"intl-meridiem"],"intlMeridiemDown":[1,"intl-meridiem-down"],"intlMeridiemUp":[1,"intl-meridiem-up"],"intlMinute":[1,"intl-minute"],"intlMinuteDown":[1,"intl-minute-down"],"intlMinuteUp":[1,"intl-minute-up"],"intlSecond":[1,"intl-second"],"intlSecondDown":[1,"intl-second-down"],"intlSecondUp":[1,"intl-second-up"],"locale":[1025,"lang"],"name":[1],"required":[516],"scale":[513],"step":[2],"value":[1025],"localizedValue":[32]},[[0,"click","clickHandler"],[0,"keyup","keyUpHandler"],[0,"calciteTimePickerBlur","timePickerBlurHandler"],[0,"calciteTimePickerFocus","timePickerFocusHandler"]]]);
24963
25113
  const CalciteLabel = /*@__PURE__*/proxyCustomElement(CalciteLabel$1, [1,"calcite-label",{"alignment":[513],"status":[513],"for":[513],"scale":[513],"layout":[513],"disableSpacing":[4,"disable-spacing"],"disabled":[516]}]);
24964
25114
  const CalciteLink = /*@__PURE__*/proxyCustomElement(CalciteLink$1, [1,"calcite-link",{"disabled":[516],"href":[513],"iconEnd":[513,"icon-end"],"iconFlipRtl":[513,"icon-flip-rtl"],"iconStart":[513,"icon-start"],"rel":[1],"target":[1],"childElType":[32]}]);
24965
25115
  const CalciteList = /*@__PURE__*/proxyCustomElement(CalciteList$1, [1,"calcite-list",{"headingLevel":[2,"heading-level"]}]);
@@ -25002,7 +25152,7 @@ const CalciteTabs = /*@__PURE__*/proxyCustomElement(CalciteTabs$1, [1,"calcite-t
25002
25152
  const CalciteTile = /*@__PURE__*/proxyCustomElement(CalciteTile$1, [1,"calcite-tile",{"active":[516],"description":[513],"disabled":[516],"embed":[516],"focused":[516],"heading":[513],"hidden":[516],"href":[513],"icon":[513]}]);
25003
25153
  const CalciteTileSelect = /*@__PURE__*/proxyCustomElement(CalciteTileSelect$1, [1,"calcite-tile-select",{"checked":[1540],"description":[513],"disabled":[516],"heading":[513],"hidden":[516],"icon":[513],"name":[520],"inputEnabled":[516,"input-enabled"],"inputAlignment":[513,"input-alignment"],"type":[513],"value":[8],"width":[513],"focused":[32]},[[0,"calciteCheckboxChange","checkboxChangeHandler"],[0,"calciteInternalCheckboxFocus","checkboxFocusBlurHandler"],[0,"calciteInternalCheckboxBlur","checkboxFocusBlurHandler"],[0,"calciteRadioButtonChange","radioButtonChangeHandler"],[0,"calciteInternalRadioButtonCheckedChange","radioButtonCheckedChangeHandler"],[0,"calciteInternalRadioButtonFocus","radioButtonFocusBlurHandler"],[0,"calciteInternalRadioButtonBlur","radioButtonFocusBlurHandler"],[0,"click","click"],[1,"mouseenter","mouseenter"],[1,"mouseleave","mouseleave"]]]);
25004
25154
  const CalciteTileSelectGroup = /*@__PURE__*/proxyCustomElement(CalciteTileSelectGroup$1, [1,"calcite-tile-select-group",{"layout":[513]}]);
25005
- const CalciteTimePicker = /*@__PURE__*/proxyCustomElement(CalciteTimePicker$1, [1,"calcite-time-picker",{"hour":[1025],"hourDisplayFormat":[513,"hour-display-format"],"intlHour":[1,"intl-hour"],"intlHourDown":[1,"intl-hour-down"],"intlHourUp":[1,"intl-hour-up"],"intlMeridiem":[1,"intl-meridiem"],"intlMeridiemDown":[1,"intl-meridiem-down"],"intlMeridiemUp":[1,"intl-meridiem-up"],"intlMinute":[1,"intl-minute"],"intlMinuteDown":[1,"intl-minute-down"],"intlMinuteUp":[1,"intl-minute-up"],"intlSecond":[1,"intl-second"],"intlSecondDown":[1,"intl-second-down"],"intlSecondUp":[1,"intl-second-up"],"minute":[1025],"second":[1025],"scale":[513],"step":[514],"meridiem":[32],"displayHour":[32]},[[0,"blur","hostBlurHandler"],[0,"focus","hostFocusHandler"],[0,"keydown","keyDownHandler"]]]);
25155
+ const CalciteTimePicker = /*@__PURE__*/proxyCustomElement(CalciteTimePicker$1, [1,"calcite-time-picker",{"intlHour":[1,"intl-hour"],"intlHourDown":[1,"intl-hour-down"],"intlHourUp":[1,"intl-hour-up"],"intlMeridiem":[1,"intl-meridiem"],"intlMeridiemDown":[1,"intl-meridiem-down"],"intlMeridiemUp":[1,"intl-meridiem-up"],"intlMinute":[1,"intl-minute"],"intlMinuteDown":[1,"intl-minute-down"],"intlMinuteUp":[1,"intl-minute-up"],"intlSecond":[1,"intl-second"],"intlSecondDown":[1,"intl-second-down"],"intlSecondUp":[1,"intl-second-up"],"locale":[1025,"lang"],"scale":[1],"step":[2],"value":[1025],"hour":[32],"hourCycle":[32],"localizedHour":[32],"localizedHourSuffix":[32],"localizedMeridiem":[32],"localizedMinute":[32],"localizedMinuteSuffix":[32],"localizedSecond":[32],"localizedSecondSuffix":[32],"meridiem":[32],"minute":[32],"second":[32],"showSecond":[32]},[[0,"blur","hostBlurHandler"],[0,"focus","hostFocusHandler"],[0,"keydown","keyDownHandler"]]]);
25006
25156
  const CalciteTip = /*@__PURE__*/proxyCustomElement(CalciteTip$1, [1,"calcite-tip",{"dismissed":[1540],"nonDismissible":[516,"non-dismissible"],"heading":[1],"headingLevel":[2,"heading-level"],"selected":[516],"intlClose":[1,"intl-close"]}]);
25007
25157
  const CalciteTipGroup = /*@__PURE__*/proxyCustomElement(CalciteTipGroup$1, [1,"calcite-tip-group",{"groupTitle":[1,"group-title"]}]);
25008
25158
  const CalciteTipManager = /*@__PURE__*/proxyCustomElement(CalciteTipManager$1, [1,"calcite-tip-manager",{"closed":[1540],"headingLevel":[2,"heading-level"],"intlClose":[1,"intl-close"],"intlDefaultTitle":[1,"intl-default-title"],"intlNext":[1,"intl-next"],"intlPaginationLabel":[1,"intl-pagination-label"],"intlPrevious":[1,"intl-previous"],"selectedIndex":[32],"tips":[32],"total":[32],"direction":[32],"groupTitle":[32]}]);