@emuanalytics/flow-rdf-ui 0.0.25 → 0.0.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -9,27 +9,21 @@ const staticHtml_js = require('lit/static-html.js');
9
9
  const dom = require('@floating-ui/dom');
10
10
  const composedOffsetPosition = require('composed-offset-position');
11
11
  const animations = require('@shoelace-style/animations');
12
- const dayjs = require('dayjs');
13
- const utc = require('dayjs/plugin/utc');
14
- const timezone = require('dayjs/plugin/timezone');
15
- const localeData = require('dayjs/plugin/localeData');
16
- const AdvancedFormat = require('dayjs/plugin/advancedFormat');
17
- const QuarterOfYear = require('dayjs/plugin/quarterOfYear');
18
- const LocalizedFormat = require('dayjs/plugin/localizedFormat');
19
- const CustomParseFormat = require('dayjs/plugin/customParseFormat');
20
- const isoWeek = require('dayjs/plugin/isoWeek');
12
+ const luxon = require('luxon');
21
13
  const map_js = require('lit/directives/map.js');
22
14
  const range_js = require('lit/directives/range.js');
23
15
  const chart_js = require('chart.js');
24
16
  const ref_js = require('lit/directives/ref.js');
25
17
  const chartjsChartMatrix = require('chartjs-chart-matrix');
26
18
  const AnnotationPlugin = require('chartjs-plugin-annotation');
19
+ const helpers = require('chart.js/helpers');
27
20
  const d3Scale = require('d3-scale');
28
21
  const live_js = require('lit/directives/live.js');
29
22
  const tinycolor = require('@ctrl/tinycolor');
30
23
  const styleMap_js = require('lit/directives/style-map.js');
31
24
  const d3Format$1 = require('d3-format');
32
25
  const overlayscrollbars = require('overlayscrollbars');
26
+ const unsafeHtml_js = require('lit/directives/unsafe-html.js');
33
27
  const when_js = require('lit/directives/when.js');
34
28
  const choose_js = require('lit/directives/choose.js');
35
29
 
@@ -48,15 +42,6 @@ function _interopNamespaceCompat(e) {
48
42
  }
49
43
 
50
44
  const animations__namespace = /*#__PURE__*/_interopNamespaceCompat(animations);
51
- const dayjs__default = /*#__PURE__*/_interopDefaultCompat(dayjs);
52
- const utc__default = /*#__PURE__*/_interopDefaultCompat(utc);
53
- const timezone__default = /*#__PURE__*/_interopDefaultCompat(timezone);
54
- const localeData__default = /*#__PURE__*/_interopDefaultCompat(localeData);
55
- const AdvancedFormat__default = /*#__PURE__*/_interopDefaultCompat(AdvancedFormat);
56
- const QuarterOfYear__default = /*#__PURE__*/_interopDefaultCompat(QuarterOfYear);
57
- const LocalizedFormat__default = /*#__PURE__*/_interopDefaultCompat(LocalizedFormat);
58
- const CustomParseFormat__default = /*#__PURE__*/_interopDefaultCompat(CustomParseFormat);
59
- const isoWeek__default = /*#__PURE__*/_interopDefaultCompat(isoWeek);
60
45
  const AnnotationPlugin__default = /*#__PURE__*/_interopDefaultCompat(AnnotationPlugin);
61
46
 
62
47
  function animateTo(el, keyframes, options) {
@@ -677,10 +662,8 @@ __decorateClass$$([
677
662
  let FlowIcon = _FlowIcon;
678
663
 
679
664
  const styles$Z = lit.css`
680
- ${componentStyles}
681
-
682
665
  :host {
683
- --arrow-color: var(--flow-ui-color-neutral-1000);
666
+ --arrow-color: var(--sl-color-neutral-1000);
684
667
  --arrow-size: 6px;
685
668
 
686
669
  /*
@@ -716,6 +699,26 @@ const styles$Z = lit.css`
716
699
  background: var(--arrow-color);
717
700
  z-index: -1;
718
701
  }
702
+
703
+ /* Hover bridge */
704
+ .popup-hover-bridge:not(.popup-hover-bridge--visible) {
705
+ display: none;
706
+ }
707
+
708
+ .popup-hover-bridge {
709
+ position: fixed;
710
+ z-index: calc(var(--sl-z-index-dropdown) - 1);
711
+ top: 0;
712
+ right: 0;
713
+ bottom: 0;
714
+ left: 0;
715
+ clip-path: polygon(
716
+ var(--hover-bridge-top-left-x, 0) var(--hover-bridge-top-left-y, 0),
717
+ var(--hover-bridge-top-right-x, 0) var(--hover-bridge-top-right-y, 0),
718
+ var(--hover-bridge-bottom-right-x, 0) var(--hover-bridge-bottom-right-y, 0),
719
+ var(--hover-bridge-bottom-left-x, 0) var(--hover-bridge-bottom-left-y, 0)
720
+ );
721
+ }
719
722
  `;
720
723
 
721
724
  var __defProp$_ = Object.defineProperty;
@@ -729,7 +732,10 @@ var __decorateClass$_ = (decorators, target, key, kind) => {
729
732
  __defProp$_(target, key, result);
730
733
  return result;
731
734
  };
732
- exports.FlowPopup = class FlowPopup extends FlowRdfElement {
735
+ function isVirtualElement(e) {
736
+ return e !== null && typeof e === "object" && "getBoundingClientRect" in e && ("contextElement" in e ? e instanceof Element : true);
737
+ }
738
+ class SlPopup extends FlowRdfElement {
733
739
  constructor() {
734
740
  super(...arguments);
735
741
  this.active = false;
@@ -747,6 +753,71 @@ exports.FlowPopup = class FlowPopup extends FlowRdfElement {
747
753
  this.shift = false;
748
754
  this.shiftPadding = 0;
749
755
  this.autoSizePadding = 0;
756
+ this.hoverBridge = false;
757
+ this.updateHoverBridge = () => {
758
+ if (this.hoverBridge && this.anchorEl) {
759
+ const anchorRect = this.anchorEl.getBoundingClientRect();
760
+ const popupRect = this.popup.getBoundingClientRect();
761
+ const isVertical = this.placement.includes("top") || this.placement.includes("bottom");
762
+ let topLeftX = 0;
763
+ let topLeftY = 0;
764
+ let topRightX = 0;
765
+ let topRightY = 0;
766
+ let bottomLeftX = 0;
767
+ let bottomLeftY = 0;
768
+ let bottomRightX = 0;
769
+ let bottomRightY = 0;
770
+ if (isVertical) {
771
+ if (anchorRect.top < popupRect.top) {
772
+ topLeftX = anchorRect.left;
773
+ topLeftY = anchorRect.bottom;
774
+ topRightX = anchorRect.right;
775
+ topRightY = anchorRect.bottom;
776
+ bottomLeftX = popupRect.left;
777
+ bottomLeftY = popupRect.top;
778
+ bottomRightX = popupRect.right;
779
+ bottomRightY = popupRect.top;
780
+ } else {
781
+ topLeftX = popupRect.left;
782
+ topLeftY = popupRect.bottom;
783
+ topRightX = popupRect.right;
784
+ topRightY = popupRect.bottom;
785
+ bottomLeftX = anchorRect.left;
786
+ bottomLeftY = anchorRect.top;
787
+ bottomRightX = anchorRect.right;
788
+ bottomRightY = anchorRect.top;
789
+ }
790
+ } else {
791
+ if (anchorRect.left < popupRect.left) {
792
+ topLeftX = anchorRect.right;
793
+ topLeftY = anchorRect.top;
794
+ topRightX = popupRect.left;
795
+ topRightY = popupRect.top;
796
+ bottomLeftX = anchorRect.right;
797
+ bottomLeftY = anchorRect.bottom;
798
+ bottomRightX = popupRect.left;
799
+ bottomRightY = popupRect.bottom;
800
+ } else {
801
+ topLeftX = popupRect.right;
802
+ topLeftY = popupRect.top;
803
+ topRightX = anchorRect.left;
804
+ topRightY = anchorRect.top;
805
+ bottomLeftX = popupRect.right;
806
+ bottomLeftY = popupRect.bottom;
807
+ bottomRightX = anchorRect.left;
808
+ bottomRightY = anchorRect.bottom;
809
+ }
810
+ }
811
+ this.style.setProperty("--hover-bridge-top-left-x", `${topLeftX}px`);
812
+ this.style.setProperty("--hover-bridge-top-left-y", `${topLeftY}px`);
813
+ this.style.setProperty("--hover-bridge-top-right-x", `${topRightX}px`);
814
+ this.style.setProperty("--hover-bridge-top-right-y", `${topRightY}px`);
815
+ this.style.setProperty("--hover-bridge-bottom-left-x", `${bottomLeftX}px`);
816
+ this.style.setProperty("--hover-bridge-bottom-left-y", `${bottomLeftY}px`);
817
+ this.style.setProperty("--hover-bridge-bottom-right-x", `${bottomRightX}px`);
818
+ this.style.setProperty("--hover-bridge-bottom-right-y", `${bottomRightY}px`);
819
+ }
820
+ };
750
821
  }
751
822
  async connectedCallback() {
752
823
  super.connectedCallback();
@@ -754,6 +825,7 @@ exports.FlowPopup = class FlowPopup extends FlowRdfElement {
754
825
  this.start();
755
826
  }
756
827
  disconnectedCallback() {
828
+ super.disconnectedCallback();
757
829
  this.stop();
758
830
  }
759
831
  async updated(changedProps) {
@@ -778,7 +850,7 @@ exports.FlowPopup = class FlowPopup extends FlowRdfElement {
778
850
  if (this.anchor && typeof this.anchor === "string") {
779
851
  const root = this.getRootNode();
780
852
  this.anchorEl = root.getElementById(this.anchor);
781
- } else if (this.anchor instanceof Element) {
853
+ } else if (this.anchor instanceof Element || isVirtualElement(this.anchor)) {
782
854
  this.anchorEl = this.anchor;
783
855
  } else {
784
856
  this.anchorEl = this.querySelector('[slot="anchor"]');
@@ -786,12 +858,9 @@ exports.FlowPopup = class FlowPopup extends FlowRdfElement {
786
858
  if (this.anchorEl instanceof HTMLSlotElement) {
787
859
  this.anchorEl = this.anchorEl.assignedElements({ flatten: true })[0];
788
860
  }
789
- if (!this.anchorEl) {
790
- throw new Error(
791
- "Invalid anchor element: no anchor could be found using the anchor slot or the anchor attribute."
792
- );
861
+ if (this.anchorEl) {
862
+ this.start();
793
863
  }
794
- this.start();
795
864
  }
796
865
  start() {
797
866
  if (!this.anchorEl) {
@@ -899,7 +968,7 @@ exports.FlowPopup = class FlowPopup extends FlowRdfElement {
899
968
  getOffsetParent
900
969
  }
901
970
  }).then(({ x, y, middlewareData, placement }) => {
902
- const isRtl = getComputedStyle(this).direction === "rtl";
971
+ const isRtl = this.matches(":dir(rtl)");
903
972
  const staticSide = { top: "bottom", right: "left", bottom: "top", left: "right" }[placement.split("-")[0]];
904
973
  this.setAttribute("data-current-placement", placement);
905
974
  Object.assign(this.popup.style, {
@@ -939,12 +1008,21 @@ exports.FlowPopup = class FlowPopup extends FlowRdfElement {
939
1008
  });
940
1009
  }
941
1010
  });
1011
+ requestAnimationFrame(() => this.updateHoverBridge());
942
1012
  this.emit("flow-ui-reposition");
943
1013
  }
944
1014
  render() {
945
1015
  return lit.html`
946
1016
  <slot name="anchor" @slotchange=${this.handleAnchorChange}></slot>
947
1017
 
1018
+ <span
1019
+ part="hover-bridge"
1020
+ class=${classMap_js.classMap({
1021
+ "popup-hover-bridge": true,
1022
+ "popup-hover-bridge--visible": this.hoverBridge && this.active
1023
+ })}
1024
+ ></span>
1025
+
948
1026
  <div
949
1027
  part="popup"
950
1028
  class=${classMap_js.classMap({
@@ -955,48 +1033,50 @@ exports.FlowPopup = class FlowPopup extends FlowRdfElement {
955
1033
  })}
956
1034
  >
957
1035
  <slot></slot>
958
- ${this.arrow ? lit.html`<div part="arrow" class="popup__arrow" role="presentation"></div>` : ""}
1036
+ ${this.arrow ? lit.html`
1037
+ <div part="arrow" class="popup__arrow" role="presentation"></div>
1038
+ ` : ""}
959
1039
  </div>
960
1040
  `;
961
1041
  }
962
- };
963
- exports.FlowPopup.styles = styles$Z;
1042
+ }
1043
+ SlPopup.styles = [componentStyles, styles$Z];
964
1044
  __decorateClass$_([
965
1045
  decorators_js.query(".popup")
966
- ], exports.FlowPopup.prototype, "popup", 2);
1046
+ ], SlPopup.prototype, "popup", 2);
967
1047
  __decorateClass$_([
968
1048
  decorators_js.query(".popup__arrow")
969
- ], exports.FlowPopup.prototype, "arrowEl", 2);
1049
+ ], SlPopup.prototype, "arrowEl", 2);
970
1050
  __decorateClass$_([
971
1051
  decorators_js.property()
972
- ], exports.FlowPopup.prototype, "anchor", 2);
1052
+ ], SlPopup.prototype, "anchor", 2);
973
1053
  __decorateClass$_([
974
1054
  decorators_js.property({ type: Boolean, reflect: true })
975
- ], exports.FlowPopup.prototype, "active", 2);
1055
+ ], SlPopup.prototype, "active", 2);
976
1056
  __decorateClass$_([
977
1057
  decorators_js.property({ reflect: true })
978
- ], exports.FlowPopup.prototype, "placement", 2);
1058
+ ], SlPopup.prototype, "placement", 2);
979
1059
  __decorateClass$_([
980
1060
  decorators_js.property({ reflect: true })
981
- ], exports.FlowPopup.prototype, "strategy", 2);
1061
+ ], SlPopup.prototype, "strategy", 2);
982
1062
  __decorateClass$_([
983
1063
  decorators_js.property({ type: Number })
984
- ], exports.FlowPopup.prototype, "distance", 2);
1064
+ ], SlPopup.prototype, "distance", 2);
985
1065
  __decorateClass$_([
986
1066
  decorators_js.property({ type: Number })
987
- ], exports.FlowPopup.prototype, "skidding", 2);
1067
+ ], SlPopup.prototype, "skidding", 2);
988
1068
  __decorateClass$_([
989
1069
  decorators_js.property({ type: Boolean })
990
- ], exports.FlowPopup.prototype, "arrow", 2);
1070
+ ], SlPopup.prototype, "arrow", 2);
991
1071
  __decorateClass$_([
992
1072
  decorators_js.property({ attribute: "arrow-placement" })
993
- ], exports.FlowPopup.prototype, "arrowPlacement", 2);
1073
+ ], SlPopup.prototype, "arrowPlacement", 2);
994
1074
  __decorateClass$_([
995
1075
  decorators_js.property({ attribute: "arrow-padding", type: Number })
996
- ], exports.FlowPopup.prototype, "arrowPadding", 2);
1076
+ ], SlPopup.prototype, "arrowPadding", 2);
997
1077
  __decorateClass$_([
998
1078
  decorators_js.property({ type: Boolean })
999
- ], exports.FlowPopup.prototype, "flip", 2);
1079
+ ], SlPopup.prototype, "flip", 2);
1000
1080
  __decorateClass$_([
1001
1081
  decorators_js.property({
1002
1082
  attribute: "flip-fallback-placements",
@@ -1009,40 +1089,42 @@ __decorateClass$_([
1009
1089
  }
1010
1090
  }
1011
1091
  })
1012
- ], exports.FlowPopup.prototype, "flipFallbackPlacements", 2);
1092
+ ], SlPopup.prototype, "flipFallbackPlacements", 2);
1013
1093
  __decorateClass$_([
1014
1094
  decorators_js.property({ attribute: "flip-fallback-strategy" })
1015
- ], exports.FlowPopup.prototype, "flipFallbackStrategy", 2);
1095
+ ], SlPopup.prototype, "flipFallbackStrategy", 2);
1016
1096
  __decorateClass$_([
1017
1097
  decorators_js.property({ type: Object })
1018
- ], exports.FlowPopup.prototype, "flipBoundary", 2);
1098
+ ], SlPopup.prototype, "flipBoundary", 2);
1019
1099
  __decorateClass$_([
1020
1100
  decorators_js.property({ attribute: "flip-padding", type: Number })
1021
- ], exports.FlowPopup.prototype, "flipPadding", 2);
1101
+ ], SlPopup.prototype, "flipPadding", 2);
1022
1102
  __decorateClass$_([
1023
1103
  decorators_js.property({ type: Boolean })
1024
- ], exports.FlowPopup.prototype, "shift", 2);
1104
+ ], SlPopup.prototype, "shift", 2);
1025
1105
  __decorateClass$_([
1026
1106
  decorators_js.property({ type: Object })
1027
- ], exports.FlowPopup.prototype, "shiftBoundary", 2);
1107
+ ], SlPopup.prototype, "shiftBoundary", 2);
1028
1108
  __decorateClass$_([
1029
1109
  decorators_js.property({ attribute: "shift-padding", type: Number })
1030
- ], exports.FlowPopup.prototype, "shiftPadding", 2);
1110
+ ], SlPopup.prototype, "shiftPadding", 2);
1031
1111
  __decorateClass$_([
1032
1112
  decorators_js.property({ attribute: "auto-size" })
1033
- ], exports.FlowPopup.prototype, "autoSize", 2);
1113
+ ], SlPopup.prototype, "autoSize", 2);
1034
1114
  __decorateClass$_([
1035
1115
  decorators_js.property()
1036
- ], exports.FlowPopup.prototype, "sync", 2);
1116
+ ], SlPopup.prototype, "sync", 2);
1037
1117
  __decorateClass$_([
1038
1118
  decorators_js.property({ type: Object })
1039
- ], exports.FlowPopup.prototype, "autoSizeBoundary", 2);
1119
+ ], SlPopup.prototype, "autoSizeBoundary", 2);
1040
1120
  __decorateClass$_([
1041
1121
  decorators_js.property({ attribute: "auto-size-padding", type: Number })
1042
- ], exports.FlowPopup.prototype, "autoSizePadding", 2);
1043
- exports.FlowPopup = __decorateClass$_([
1044
- decorators_js.customElement("flow-ui-popup")
1045
- ], exports.FlowPopup);
1122
+ ], SlPopup.prototype, "autoSizePadding", 2);
1123
+ __decorateClass$_([
1124
+ decorators_js.property({ attribute: "hover-bridge", type: Boolean })
1125
+ ], SlPopup.prototype, "hoverBridge", 2);
1126
+
1127
+ SlPopup.define("flow-ui-popup");
1046
1128
 
1047
1129
  const styles$Y = lit.css`
1048
1130
  ${componentStyles}
@@ -4073,15 +4155,6 @@ exports.FlowButton = __decorateClass$P([
4073
4155
  decorators_js.customElement("flow-ui-button")
4074
4156
  ], exports.FlowButton);
4075
4157
 
4076
- dayjs__default.extend(utc__default);
4077
- dayjs__default.extend(timezone__default);
4078
- dayjs__default.extend(localeData__default);
4079
- dayjs__default.extend(AdvancedFormat__default);
4080
- dayjs__default.extend(QuarterOfYear__default);
4081
- dayjs__default.extend(LocalizedFormat__default);
4082
- dayjs__default.extend(CustomParseFormat__default);
4083
- dayjs__default.extend(isoWeek__default);
4084
-
4085
4158
  const isUndefined = (val) => typeof val === "undefined";
4086
4159
  const isNull = (val) => val === null;
4087
4160
  const isNil = (val) => isUndefined(val) || isNull(val);
@@ -4241,12 +4314,10 @@ var __decorateClass$O = (decorators, target, key, kind) => {
4241
4314
  __defProp$O(target, key, result);
4242
4315
  return result;
4243
4316
  };
4244
- dayjs__default.locale("en");
4245
4317
  class FlowCalendar extends FlowRdfElement {
4246
4318
  constructor() {
4247
4319
  super(...arguments);
4248
4320
  this.displayMode = "date";
4249
- this.timezone = "";
4250
4321
  this.size = "medium";
4251
4322
  }
4252
4323
  connectedCallback() {
@@ -4257,7 +4328,7 @@ class FlowCalendar extends FlowRdfElement {
4257
4328
  super.disconnectedCallback();
4258
4329
  }
4259
4330
  handleValueChange() {
4260
- this._selectedDate = this.makeDate(this.value)?.millisecond(0);
4331
+ this._selectedDate = this.makeDate(this.value)?.set({ millisecond: 0 });
4261
4332
  if (this._selectedDate) {
4262
4333
  if (this.displayMode === "date") {
4263
4334
  this._selectedDate = this._selectedDate.startOf("day");
@@ -4267,44 +4338,66 @@ class FlowCalendar extends FlowRdfElement {
4267
4338
  this._displayDate = this.makeDate().startOf("month");
4268
4339
  }
4269
4340
  }
4341
+ handleTimezoneChange() {
4342
+ this.handleValueChange();
4343
+ this.updateValue();
4344
+ }
4270
4345
  dateClicked(val) {
4271
4346
  const date = this.makeDate(val);
4272
- if (date) {
4273
- if (this._selectedDate) {
4274
- this._selectedDate = this._selectedDate.year(date.year()).month(date.month()).date(date.date());
4275
- } else {
4276
- this._selectedDate = date;
4277
- }
4278
- this.updateValue();
4347
+ if (this._selectedDate) {
4348
+ this._selectedDate = date.set({
4349
+ hour: this._selectedDate.hour,
4350
+ minute: this._selectedDate.minute,
4351
+ second: this._selectedDate.second
4352
+ });
4353
+ } else {
4354
+ this._selectedDate = date;
4279
4355
  }
4356
+ this.updateValue();
4280
4357
  }
4281
- stepDisplayDate(value, unit) {
4282
- this._displayDate = this._displayDate.add(value, unit);
4358
+ stepDisplayDate(duration) {
4359
+ this._displayDate = this._displayDate.plus(duration);
4283
4360
  }
4361
+ /**
4362
+ * Generate a list of years for the year select dropdown
4363
+ */
4284
4364
  yearOptionsForDate(date) {
4285
4365
  const years = [];
4286
- for (let y = date.year() + 1; y >= date.year() - 6; y--) {
4366
+ for (let y = date.year + 1; y >= date.year - 6; y--) {
4287
4367
  years.push(y);
4288
4368
  }
4289
4369
  return years;
4290
4370
  }
4291
4371
  makeDate(d) {
4292
4372
  try {
4293
- const date = dayjs__default(d).tz(isStringFull(this.timezone) ? this.timezone : void 0);
4294
- return date.isValid() ? date : void 0;
4373
+ let date;
4374
+ const zone = isStringFull(this.timezone) ? this.timezone : void 0;
4375
+ const locale = isStringFull(this.locale) ? this.locale : void 0;
4376
+ if (isStringFull(d)) {
4377
+ date = luxon.DateTime.fromISO(d, { zone, locale });
4378
+ } else {
4379
+ date = luxon.DateTime.local({ zone, locale });
4380
+ }
4381
+ return date.isValid ? date : void 0;
4295
4382
  } catch (e) {
4383
+ console.error(`Invalid date in makeDate: ${d} (${this.timezone})`);
4296
4384
  return void 0;
4297
4385
  }
4298
4386
  }
4299
4387
  updateValue(emitEvents = true) {
4300
- this.value = this._selectedDate ? this._selectedDate.toISOString() : "";
4388
+ const iso = this._selectedDate?.toISO();
4389
+ this.value = isDefined(iso) ? iso : "";
4301
4390
  if (emitEvents) {
4391
+ this.emit("flow-ui-input");
4302
4392
  this.emit("flow-ui-change");
4303
4393
  }
4304
4394
  }
4305
4395
  handleHeaderSelectChange(ev) {
4306
4396
  ev.stopPropagation();
4307
- this._displayDate = this.makeDate().year(+this._yearSelect.value).month(+this._monthSelect.value).startOf("month");
4397
+ this._displayDate = this.makeDate().set({
4398
+ year: +this._yearSelect.value,
4399
+ month: +this._monthSelect.value
4400
+ }).startOf("month");
4308
4401
  }
4309
4402
  handleTimeChange(ev) {
4310
4403
  ev.stopPropagation();
@@ -4313,34 +4406,36 @@ class FlowCalendar extends FlowRdfElement {
4313
4406
  }
4314
4407
  const target = ev.target;
4315
4408
  const unit = target.getAttribute("name");
4316
- this._selectedDate = this._selectedDate.set(unit, +target.value);
4409
+ this._selectedDate = this._selectedDate.set({ [unit]: +target.value });
4317
4410
  this.updateValue();
4318
4411
  }
4319
4412
  calendarHeaderTemplate() {
4413
+ const locale = isStringFull(this.locale) ? this.locale : void 0;
4414
+ const monthsShort = luxon.Info.months("short", { locale });
4320
4415
  return lit.html`
4321
4416
  <div class="calendar__header">
4322
4417
  <flow-ui-icon-button
4323
4418
  name="chevron-left"
4324
4419
  library="system"
4325
- @click=${() => this.stepDisplayDate(-1, "month")}
4420
+ @click=${() => this.stepDisplayDate({ month: -1 })}
4326
4421
  ></flow-ui-icon-button>
4327
4422
  <flow-ui-select
4328
4423
  class="calendar__month-select calendar__header-select"
4329
- value=${this._displayDate.month()}
4424
+ value=${this._displayDate.month}
4330
4425
  @flow-ui-change=${this.handleHeaderSelectChange}
4331
4426
  >
4332
- ${dayjs__default.monthsShort().map(
4427
+ ${monthsShort.map(
4333
4428
  (month, index) => lit.html`
4334
- <flow-ui-option value=${index}>${month}</flow-ui-option>
4429
+ <flow-ui-option value=${index + 1}>${month}</flow-ui-option>
4335
4430
  `
4336
4431
  )}
4337
4432
  </flow-ui-select>
4338
4433
  <flow-ui-select
4339
4434
  class="calendar__year-select calendar__header-select"
4340
- value=${this._displayDate.year()}
4435
+ value=${this._displayDate.year}
4341
4436
  @flow-ui-change=${this.handleHeaderSelectChange}
4342
4437
  >
4343
- ${this.yearOptionsForDate(dayjs__default()).map(
4438
+ ${this.yearOptionsForDate(luxon.DateTime.now()).map(
4344
4439
  (year) => lit.html`
4345
4440
  <flow-ui-option value=${year}>${year}</flow-ui-option>
4346
4441
  `
@@ -4349,13 +4444,14 @@ class FlowCalendar extends FlowRdfElement {
4349
4444
  <flow-ui-icon-button
4350
4445
  name="chevron-right"
4351
4446
  library="system"
4352
- @click=${() => this.stepDisplayDate(1, "month")}
4447
+ @click=${() => this.stepDisplayDate({ month: 1 })}
4353
4448
  ></flow-ui-icon-button>
4354
4449
  </div>
4355
4450
  `;
4356
4451
  }
4357
4452
  dayOfWeekGridTemplate() {
4358
- const days = dayjs__default.weekdaysMin(true);
4453
+ const locale = isStringFull(this.locale) ? this.locale : void 0;
4454
+ const days = luxon.Info.weekdays("narrow", { locale });
4359
4455
  return lit.html`
4360
4456
  ${days.map(
4361
4457
  (day) => lit.html`
@@ -4370,34 +4466,34 @@ class FlowCalendar extends FlowRdfElement {
4370
4466
  const endOfMonth = this._displayDate.endOf("month");
4371
4467
  const calendarStart = startOfMonth.startOf("week");
4372
4468
  const calendarEnd = endOfMonth.endOf("week");
4373
- const daysInMonth = this._displayDate.daysInMonth();
4469
+ const daysInMonth = this._displayDate.daysInMonth;
4374
4470
  const days = [];
4375
- for (let date = calendarStart; date.isBefore(startOfMonth); date = date.add(1, "day")) {
4471
+ for (let date = calendarStart; date < startOfMonth; date = date.plus({ day: 1 })) {
4376
4472
  days.push({
4377
- day: date.date(),
4378
- date: date.toISOString(),
4473
+ day: date.toFormat("d"),
4474
+ date: date.toISO(),
4379
4475
  isFiller: true,
4380
- today: date.isSame(today, "day"),
4381
- selected: !!this._selectedDate && date.isSame(this._selectedDate, "day")
4476
+ today: date === today,
4477
+ selected: !!this._selectedDate && date.startOf("day").equals(this._selectedDate.startOf("day"))
4382
4478
  });
4383
4479
  }
4384
4480
  for (let day = 1; day <= daysInMonth; day++) {
4385
- const date = startOfMonth.add(day - 1, "day");
4481
+ const date = startOfMonth.plus({ days: day - 1 }).startOf("day");
4386
4482
  days.push({
4387
- day,
4388
- date: date.toISOString(),
4483
+ day: date.toFormat("d"),
4484
+ date: date.toISO(),
4389
4485
  isFiller: false,
4390
- today: date.isSame(today, "day"),
4391
- selected: !!this._selectedDate && date.isSame(this._selectedDate, "day")
4486
+ today: date.startOf("day").equals(today.startOf("day")),
4487
+ selected: !!this._selectedDate && date.startOf("day").equals(this._selectedDate.startOf("day"))
4392
4488
  });
4393
4489
  }
4394
- for (let date = endOfMonth.add(1, "day"); !date.isAfter(calendarEnd); date = date.add(1, "day")) {
4490
+ for (let date = endOfMonth.plus({ day: 1 }).startOf("day"); date < calendarEnd; date = date.plus({ day: 1 })) {
4395
4491
  days.push({
4396
- day: date.date(),
4397
- date: date.toISOString(),
4492
+ day: date.toFormat("d"),
4493
+ date: date.toISO(),
4398
4494
  isFiller: true,
4399
- today: date.isSame(today, "day"),
4400
- selected: !!this._selectedDate && date.isSame(this._selectedDate, "day")
4495
+ today: date.startOf("day").equals(today.startOf("day")),
4496
+ selected: !!this._selectedDate && date.startOf("day").equals(this._selectedDate.startOf("day"))
4401
4497
  });
4402
4498
  }
4403
4499
  return lit.html`
@@ -4429,7 +4525,7 @@ class FlowCalendar extends FlowRdfElement {
4429
4525
  max="23"
4430
4526
  format="02"
4431
4527
  class="calendar__time-input"
4432
- value=${this._selectedDate ? this._selectedDate.hour() : 0}
4528
+ value=${this._selectedDate ? this._selectedDate.hour : 0}
4433
4529
  @flow-ui-change=${this.handleTimeChange}
4434
4530
  ></flow-ui-number-stepper>
4435
4531
  <span class="calendar__time-separator">:</span>
@@ -4440,7 +4536,7 @@ class FlowCalendar extends FlowRdfElement {
4440
4536
  max="59"
4441
4537
  format="02"
4442
4538
  class="calendar__time-input"
4443
- value=${this._selectedDate ? this._selectedDate.minute() : 0}
4539
+ value=${this._selectedDate ? this._selectedDate.minute : 0}
4444
4540
  @flow-ui-change=${this.handleTimeChange}
4445
4541
  ></flow-ui-number-stepper>
4446
4542
  <span class="calendar__time-separator">:</span>
@@ -4451,7 +4547,7 @@ class FlowCalendar extends FlowRdfElement {
4451
4547
  max="59"
4452
4548
  format="02"
4453
4549
  class="calendar__time-input"
4454
- value=${this._selectedDate ? this._selectedDate.second() : 0}
4550
+ value=${this._selectedDate ? this._selectedDate.second : 0}
4455
4551
  @flow-ui-change=${this.handleTimeChange}
4456
4552
  ></flow-ui-number-stepper>
4457
4553
  </div>
@@ -4493,7 +4589,7 @@ __decorateClass$O([
4493
4589
  decorators_js.state()
4494
4590
  ], FlowCalendar.prototype, "_selectedDate", 2);
4495
4591
  __decorateClass$O([
4496
- decorators_js.property()
4592
+ decorators_js.property({ reflect: true })
4497
4593
  ], FlowCalendar.prototype, "value", 2);
4498
4594
  __decorateClass$O([
4499
4595
  decorators_js.property({ attribute: "display-mode" })
@@ -4501,12 +4597,18 @@ __decorateClass$O([
4501
4597
  __decorateClass$O([
4502
4598
  decorators_js.property()
4503
4599
  ], FlowCalendar.prototype, "timezone", 2);
4600
+ __decorateClass$O([
4601
+ decorators_js.property()
4602
+ ], FlowCalendar.prototype, "locale", 2);
4504
4603
  __decorateClass$O([
4505
4604
  decorators_js.property()
4506
4605
  ], FlowCalendar.prototype, "size", 2);
4507
4606
  __decorateClass$O([
4508
- watch(["value", "timezone"])
4607
+ watch("value")
4509
4608
  ], FlowCalendar.prototype, "handleValueChange", 1);
4609
+ __decorateClass$O([
4610
+ watch(["timezone"])
4611
+ ], FlowCalendar.prototype, "handleTimezoneChange", 1);
4510
4612
 
4511
4613
  FlowCalendar.define("flow-ui-calendar");
4512
4614
 
@@ -5515,62 +5617,73 @@ const styles$K = lit.css`
5515
5617
  `;
5516
5618
 
5517
5619
  const FORMATS = {
5518
- datetime: "MMM D, YYYY, HH:mm:ss",
5519
- millisecond: "HH:mm:ss.SSS",
5520
- second: "HH:mm:ss",
5521
- minute: "HH:mm",
5522
- hour: "HH",
5523
- day: "MMM D",
5524
- week: "ll",
5525
- month: "MMM YYYY",
5526
- quarter: "[Q]Q - YYYY",
5527
- year: "YYYY"
5620
+ datetime: luxon.DateTime.DATETIME_MED_WITH_SECONDS,
5621
+ millisecond: "h:mm:ss.SSS a",
5622
+ second: luxon.DateTime.TIME_WITH_SECONDS,
5623
+ minute: luxon.DateTime.TIME_SIMPLE,
5624
+ hour: { hour: "numeric" },
5625
+ day: { day: "numeric", month: "short" },
5626
+ week: "DD",
5627
+ month: { month: "short", year: "numeric" },
5628
+ quarter: "'Q'q - yyyy",
5629
+ year: { year: "numeric" }
5528
5630
  };
5529
- function createDate(value, format, options) {
5530
- if (isUndefined(options)) {
5531
- options = format;
5532
- format = void 0;
5533
- }
5534
- if (options.utc) {
5535
- return dayjs__default.utc(value, format);
5536
- }
5537
- return dayjs__default(value, format);
5631
+ function create(time, options) {
5632
+ return luxon.DateTime.fromMillis(time, options);
5538
5633
  }
5539
5634
  chart_js._adapters._date.override({
5540
- // _id: 'dayjs', // DEBUG
5635
+ // _id: 'luxon', // DEBUG
5636
+ init(chartOptions) {
5637
+ if (!this.options.locale) {
5638
+ this.options.locale = chartOptions.locale;
5639
+ }
5640
+ },
5541
5641
  formats: function() {
5542
5642
  return FORMATS;
5543
5643
  },
5544
5644
  parse: function(value, format) {
5545
- const valueType = typeof value;
5546
- if (value === null || valueType === "undefined") {
5645
+ const options = this.options;
5646
+ const type = typeof value;
5647
+ if (value === null || type === "undefined") {
5547
5648
  return null;
5548
5649
  }
5549
- if (valueType === "string" && typeof format === "string") {
5550
- return createDate(value, format, this.options).isValid() ? createDate(value, format, this.options).valueOf() : null;
5551
- } else if (!(value instanceof dayjs__default)) {
5552
- return createDate(value, this.options).isValid() ? createDate(value, this.options).valueOf() : null;
5650
+ if (typeof value === "number") {
5651
+ value = create(value);
5652
+ } else if (typeof value === "string") {
5653
+ if (typeof format === "string") {
5654
+ value = luxon.DateTime.fromFormat(value, format, options);
5655
+ } else {
5656
+ value = luxon.DateTime.fromISO(value, options);
5657
+ }
5658
+ } else if (value instanceof Date) {
5659
+ value = luxon.DateTime.fromJSDate(value, options);
5660
+ } else if (typeof value === "object" && !(value instanceof luxon.DateTime)) {
5661
+ value = luxon.DateTime.fromObject(value, options);
5553
5662
  }
5554
- return null;
5663
+ return value instanceof luxon.DateTime && value.isValid ? value.valueOf() : null;
5555
5664
  },
5556
5665
  format: function(time, format) {
5557
- return createDate(time, this.options).format(format);
5666
+ const datetime = create(time, this.options);
5667
+ return typeof format === "string" ? datetime.toFormat(format) : datetime.toLocaleString(format);
5558
5668
  },
5559
5669
  add: function(time, amount, unit) {
5560
- return createDate(time, this.options).add(amount, unit).valueOf();
5670
+ const args = {};
5671
+ args[unit] = amount;
5672
+ return create(time).plus(args).valueOf();
5561
5673
  },
5562
5674
  diff: function(max, min, unit) {
5563
- return createDate(max, this.options).diff(createDate(min, this.options), unit);
5675
+ return create(max).diff(create(min)).as(unit).valueOf();
5564
5676
  },
5565
5677
  startOf: function(time, unit, weekday) {
5566
- if (unit === "isoWeek") {
5567
- const validatedWeekday = typeof weekday === "number" && weekday > 0 && weekday < 7 ? weekday : 1;
5568
- return createDate(time, this.options).isoWeekday(validatedWeekday).startOf("day").valueOf();
5678
+ if (unit === "isoWeek" && helpers.isNumber(weekday)) {
5679
+ weekday = Math.trunc(Math.min(Math.max(0, weekday), 6));
5680
+ const dateTime = create(time);
5681
+ return dateTime.minus({ days: (dateTime.weekday - weekday + 7) % 7 }).startOf("day").valueOf();
5569
5682
  }
5570
- return createDate(time, this.options).startOf(unit).valueOf();
5683
+ return unit ? create(time).startOf(unit).valueOf() : time;
5571
5684
  },
5572
5685
  endOf: function(time, unit) {
5573
- return createDate(time, this.options).endOf(unit).valueOf();
5686
+ return create(time).endOf(unit).valueOf();
5574
5687
  }
5575
5688
  });
5576
5689
 
@@ -8969,7 +9082,7 @@ var __decorateClass$D = (decorators, target, key, kind) => {
8969
9082
  __defProp$D(target, key, result);
8970
9083
  return result;
8971
9084
  };
8972
- exports.FlowTag = class FlowTag extends FlowRdfElement {
9085
+ class FlowTag extends FlowRdfElement {
8973
9086
  constructor() {
8974
9087
  super(...arguments);
8975
9088
  this.localize = new LocalizeController(this);
@@ -9020,23 +9133,23 @@ exports.FlowTag = class FlowTag extends FlowRdfElement {
9020
9133
  </span>
9021
9134
  `;
9022
9135
  }
9023
- };
9024
- exports.FlowTag.styles = styles$E;
9136
+ }
9137
+ FlowTag.styles = styles$E;
9138
+ FlowTag.dependencies = { "flow-icon-button": FlowIconButton };
9025
9139
  __decorateClass$D([
9026
9140
  decorators_js.property({ reflect: true })
9027
- ], exports.FlowTag.prototype, "variant", 2);
9141
+ ], FlowTag.prototype, "variant", 2);
9028
9142
  __decorateClass$D([
9029
9143
  decorators_js.property({ reflect: true })
9030
- ], exports.FlowTag.prototype, "size", 2);
9144
+ ], FlowTag.prototype, "size", 2);
9031
9145
  __decorateClass$D([
9032
9146
  decorators_js.property({ type: Boolean, reflect: true })
9033
- ], exports.FlowTag.prototype, "pill", 2);
9147
+ ], FlowTag.prototype, "pill", 2);
9034
9148
  __decorateClass$D([
9035
9149
  decorators_js.property({ type: Boolean })
9036
- ], exports.FlowTag.prototype, "removable", 2);
9037
- exports.FlowTag = __decorateClass$D([
9038
- decorators_js.customElement("flow-ui-tag")
9039
- ], exports.FlowTag);
9150
+ ], FlowTag.prototype, "removable", 2);
9151
+
9152
+ FlowTag.define("flow-ui-tag");
9040
9153
 
9041
9154
  const styles$D = lit.css`
9042
9155
  ${componentStyles}
@@ -9322,8 +9435,7 @@ class FlowDatetimePicker extends FlowRdfElement {
9322
9435
  this.name = "";
9323
9436
  this.value = "";
9324
9437
  this.displayMode = "datetime";
9325
- this.format = "LLL";
9326
- this.timezone = "";
9438
+ this.format = "FFF";
9327
9439
  this.defaultValue = "";
9328
9440
  this.size = "medium";
9329
9441
  this.placeholder = "";
@@ -9367,7 +9479,9 @@ class FlowDatetimePicker extends FlowRdfElement {
9367
9479
  updateDisplayLabel() {
9368
9480
  try {
9369
9481
  if (isStringFull(this.value)) {
9370
- this.displayLabel = dayjs__default(this.value).tz(isStringFull(this.timezone) ? this.timezone : void 0).format(this.format);
9482
+ const zone = isStringFull(this.timezone) ? this.timezone : void 0;
9483
+ const locale = isStringFull(this.locale) ? this.locale : void 0;
9484
+ this.displayLabel = luxon.DateTime.fromISO(this.value, { zone, locale }).toFormat(this.format);
9371
9485
  } else {
9372
9486
  this.displayLabel = "";
9373
9487
  }
@@ -9671,7 +9785,8 @@ class FlowDatetimePicker extends FlowRdfElement {
9671
9785
  value=${this.value}
9672
9786
  display-mode=${this.displayMode}
9673
9787
  size=${this.size}
9674
- timezone=${this.timezone}
9788
+ timezone=${ifDefined_js.ifDefined(this.timezone)}
9789
+ locale=${ifDefined_js.ifDefined(this.locale)}
9675
9790
  @flow-ui-change=${this.handleCalendarChange}
9676
9791
  ></flow-ui-calendar>
9677
9792
  ` : lit.nothing}
@@ -9718,7 +9833,7 @@ __decorateClass$C([
9718
9833
  decorators_js.property()
9719
9834
  ], FlowDatetimePicker.prototype, "name", 2);
9720
9835
  __decorateClass$C([
9721
- decorators_js.property()
9836
+ decorators_js.property({ reflect: true })
9722
9837
  ], FlowDatetimePicker.prototype, "value", 2);
9723
9838
  __decorateClass$C([
9724
9839
  decorators_js.property({ attribute: "display-mode" })
@@ -9729,6 +9844,9 @@ __decorateClass$C([
9729
9844
  __decorateClass$C([
9730
9845
  decorators_js.property()
9731
9846
  ], FlowDatetimePicker.prototype, "timezone", 2);
9847
+ __decorateClass$C([
9848
+ decorators_js.property()
9849
+ ], FlowDatetimePicker.prototype, "locale", 2);
9732
9850
  __decorateClass$C([
9733
9851
  defaultValue()
9734
9852
  ], FlowDatetimePicker.prototype, "defaultValue", 2);
@@ -9772,7 +9890,7 @@ __decorateClass$C([
9772
9890
  decorators_js.property({ type: Boolean, reflect: true })
9773
9891
  ], FlowDatetimePicker.prototype, "required", 2);
9774
9892
  __decorateClass$C([
9775
- watch(["value", "format", "timezone"])
9893
+ watch(["value", "format", "timezone", "locale"])
9776
9894
  ], FlowDatetimePicker.prototype, "updateDisplayLabel", 1);
9777
9895
  __decorateClass$C([
9778
9896
  watch("disabled", { waitUntilFirstUpdate: true })
@@ -12174,7 +12292,7 @@ var __decorateClass$r = (decorators, target, key, kind) => {
12174
12292
  __defProp$r(target, key, result);
12175
12293
  return result;
12176
12294
  };
12177
- exports.FlowOption = class FlowOption extends FlowRdfElement {
12295
+ class FlowOption extends FlowRdfElement {
12178
12296
  constructor() {
12179
12297
  super(...arguments);
12180
12298
  // @ts-expect-error - Controller is currently unused
@@ -12224,7 +12342,19 @@ exports.FlowOption = class FlowOption extends FlowRdfElement {
12224
12342
  }
12225
12343
  /** Returns a plain text label based on the option's content. */
12226
12344
  getTextLabel() {
12227
- return (this.textContent ?? "").trim();
12345
+ const nodes = this.childNodes;
12346
+ let label = "";
12347
+ [...nodes].forEach((node) => {
12348
+ if (node.nodeType === Node.ELEMENT_NODE) {
12349
+ if (!node.hasAttribute("slot")) {
12350
+ label += node.textContent;
12351
+ }
12352
+ }
12353
+ if (node.nodeType === Node.TEXT_NODE) {
12354
+ label += node.textContent;
12355
+ }
12356
+ });
12357
+ return label.trim();
12228
12358
  }
12229
12359
  render() {
12230
12360
  return lit.html`
@@ -12253,38 +12383,38 @@ exports.FlowOption = class FlowOption extends FlowRdfElement {
12253
12383
  </div>
12254
12384
  `;
12255
12385
  }
12256
- };
12257
- exports.FlowOption.styles = styles$s;
12386
+ }
12387
+ FlowOption.styles = styles$s;
12388
+ FlowOption.dependencies = { "flow-ui-icon": FlowIcon };
12258
12389
  __decorateClass$r([
12259
12390
  decorators_js.query(".option__label")
12260
- ], exports.FlowOption.prototype, "defaultSlot", 2);
12391
+ ], FlowOption.prototype, "defaultSlot", 2);
12261
12392
  __decorateClass$r([
12262
12393
  decorators_js.state()
12263
- ], exports.FlowOption.prototype, "current", 2);
12394
+ ], FlowOption.prototype, "current", 2);
12264
12395
  __decorateClass$r([
12265
12396
  decorators_js.state()
12266
- ], exports.FlowOption.prototype, "selected", 2);
12397
+ ], FlowOption.prototype, "selected", 2);
12267
12398
  __decorateClass$r([
12268
12399
  decorators_js.state()
12269
- ], exports.FlowOption.prototype, "hasHover", 2);
12400
+ ], FlowOption.prototype, "hasHover", 2);
12270
12401
  __decorateClass$r([
12271
12402
  decorators_js.property({ reflect: true })
12272
- ], exports.FlowOption.prototype, "value", 2);
12403
+ ], FlowOption.prototype, "value", 2);
12273
12404
  __decorateClass$r([
12274
12405
  decorators_js.property({ type: Boolean, reflect: true })
12275
- ], exports.FlowOption.prototype, "disabled", 2);
12406
+ ], FlowOption.prototype, "disabled", 2);
12276
12407
  __decorateClass$r([
12277
12408
  watch("disabled")
12278
- ], exports.FlowOption.prototype, "handleDisabledChange", 1);
12409
+ ], FlowOption.prototype, "handleDisabledChange", 1);
12279
12410
  __decorateClass$r([
12280
12411
  watch("selected")
12281
- ], exports.FlowOption.prototype, "handleSelectedChange", 1);
12412
+ ], FlowOption.prototype, "handleSelectedChange", 1);
12282
12413
  __decorateClass$r([
12283
12414
  watch("value")
12284
- ], exports.FlowOption.prototype, "handleValueChange", 1);
12285
- exports.FlowOption = __decorateClass$r([
12286
- decorators_js.customElement("flow-ui-option")
12287
- ], exports.FlowOption);
12415
+ ], FlowOption.prototype, "handleValueChange", 1);
12416
+
12417
+ FlowOption.define("flow-ui-option");
12288
12418
 
12289
12419
  const styles$r = lit.css`
12290
12420
  ${componentStyles}
@@ -12524,7 +12654,7 @@ var __decorateClass$p = (decorators, target, key, kind) => {
12524
12654
  __defProp$p(target, key, result);
12525
12655
  return result;
12526
12656
  };
12527
- class FlowSplitViewPanel extends FlowRdfElement {
12657
+ class FlowPanel extends FlowRdfElement {
12528
12658
  constructor() {
12529
12659
  super(...arguments);
12530
12660
  this.closed = false;
@@ -12559,7 +12689,7 @@ class FlowSplitViewPanel extends FlowRdfElement {
12559
12689
  return lit.html`
12560
12690
  <div
12561
12691
  class=${classMap_js.classMap({
12562
- "panel": true,
12692
+ panel: true,
12563
12693
  "panel--closed": this.closed,
12564
12694
  "panel--scrollable": this.scrollable,
12565
12695
  "panel--with-padding": this.padding
@@ -12581,18 +12711,18 @@ class FlowSplitViewPanel extends FlowRdfElement {
12581
12711
  `;
12582
12712
  }
12583
12713
  }
12584
- FlowSplitViewPanel.styles = styles$q;
12714
+ FlowPanel.styles = styles$q;
12585
12715
  __decorateClass$p([
12586
12716
  decorators_js.property({ type: Boolean, reflect: true })
12587
- ], FlowSplitViewPanel.prototype, "closed", 2);
12717
+ ], FlowPanel.prototype, "closed", 2);
12588
12718
  __decorateClass$p([
12589
12719
  decorators_js.property({ type: Boolean, reflect: true })
12590
- ], FlowSplitViewPanel.prototype, "scrollable", 2);
12720
+ ], FlowPanel.prototype, "scrollable", 2);
12591
12721
  __decorateClass$p([
12592
12722
  decorators_js.property({ type: Boolean, reflect: true })
12593
- ], FlowSplitViewPanel.prototype, "padding", 2);
12723
+ ], FlowPanel.prototype, "padding", 2);
12594
12724
 
12595
- FlowSplitViewPanel.define("flow-ui-panel");
12725
+ FlowPanel.define("flow-ui-panel");
12596
12726
 
12597
12727
  const styles$p = lit.css`
12598
12728
  ${componentStyles}
@@ -14904,9 +15034,6 @@ __decorateClass$i([
14904
15034
  FlowScrollView.define("flow-ui-scroll-view");
14905
15035
 
14906
15036
  const styles$i = lit.css`
14907
- ${componentStyles}
14908
- ${formControlStyles}
14909
-
14910
15037
  :host {
14911
15038
  display: block;
14912
15039
  }
@@ -14947,8 +15074,11 @@ const styles$i = lit.css`
14947
15074
  vertical-align: middle;
14948
15075
  overflow: hidden;
14949
15076
  cursor: pointer;
14950
- transition: var(--flow-ui-transition-fast) color, var(--flow-ui-transition-fast) border,
14951
- var(--flow-ui-transition-fast) box-shadow, var(--flow-ui-transition-fast) background-color;
15077
+ transition:
15078
+ var(--flow-ui-transition-fast) color,
15079
+ var(--flow-ui-transition-fast) border,
15080
+ var(--flow-ui-transition-fast) box-shadow,
15081
+ var(--flow-ui-transition-fast) background-color;
14952
15082
  }
14953
15083
 
14954
15084
  .select__display-input {
@@ -14965,6 +15095,10 @@ const styles$i = lit.css`
14965
15095
  -webkit-appearance: none;
14966
15096
  }
14967
15097
 
15098
+ .select__display-input::placeholder {
15099
+ color: var(--flow-ui-input-placeholder-color);
15100
+ }
15101
+
14968
15102
  .select:not(.select--disabled):hover .select__display-input {
14969
15103
  color: var(--flow-ui-input-color-hover);
14970
15104
  }
@@ -15155,6 +15289,14 @@ const styles$i = lit.css`
15155
15289
  color: var(--flow-ui-input-placeholder-color);
15156
15290
  }
15157
15291
 
15292
+ /* Suffix */
15293
+ .select__suffix {
15294
+ flex: 0;
15295
+ display: inline-flex;
15296
+ align-items: center;
15297
+ color: var(--flow-ui-input-placeholder-color);
15298
+ }
15299
+
15158
15300
  /* Clear button */
15159
15301
  .select__clear {
15160
15302
  display: inline-flex;
@@ -15217,10 +15359,11 @@ const styles$i = lit.css`
15217
15359
  }
15218
15360
 
15219
15361
  .select__listbox ::slotted(small) {
15362
+ display: block;
15220
15363
  font-size: var(--flow-ui-font-size-small);
15221
15364
  font-weight: var(--flow-ui-font-weight-semibold);
15222
15365
  color: var(--flow-ui-color-neutral-500);
15223
- padding-block: var(--flow-ui-spacing-x-small);
15366
+ padding-block: var(--flow-ui-spacing-2x-small);
15224
15367
  padding-inline: var(--flow-ui-spacing-x-large);
15225
15368
  }
15226
15369
  `;
@@ -15236,7 +15379,7 @@ var __decorateClass$h = (decorators, target, key, kind) => {
15236
15379
  __defProp$h(target, key, result);
15237
15380
  return result;
15238
15381
  };
15239
- exports.FlowSelect = class FlowSelect extends FlowRdfElement {
15382
+ class FlowSelect extends FlowRdfElement {
15240
15383
  constructor() {
15241
15384
  super(...arguments);
15242
15385
  this.formControlController = new FormControlController(this, {
@@ -15245,7 +15388,6 @@ exports.FlowSelect = class FlowSelect extends FlowRdfElement {
15245
15388
  this.hasSlotController = new HasSlotController(this, "help-text", "label");
15246
15389
  this.localize = new LocalizeController(this);
15247
15390
  this.typeToSelectString = "";
15248
- this.pendingValue = null;
15249
15391
  this.hasFocus = false;
15250
15392
  this.displayLabel = "";
15251
15393
  this.selectedOptions = [];
@@ -15267,6 +15409,129 @@ exports.FlowSelect = class FlowSelect extends FlowRdfElement {
15267
15409
  this.helpText = "";
15268
15410
  this.form = "";
15269
15411
  this.required = false;
15412
+ this.getTag = (option) => {
15413
+ return lit.html`
15414
+ <flow-ui-tag
15415
+ part="tag"
15416
+ exportparts="
15417
+ base:tag__base,
15418
+ content:tag__content,
15419
+ remove-button:tag__remove-button,
15420
+ remove-button__base:tag__remove-button__base
15421
+ "
15422
+ ?pill=${this.pill}
15423
+ size=${this.size}
15424
+ removable
15425
+ @flow-ui-remove=${(event) => this.handleTagRemove(event, option)}
15426
+ >
15427
+ ${option.getTextLabel()}
15428
+ </flow-ui-tag>
15429
+ `;
15430
+ };
15431
+ this.handleDocumentFocusIn = (event) => {
15432
+ const path = event.composedPath();
15433
+ if (this && !path.includes(this)) {
15434
+ this.hide();
15435
+ }
15436
+ };
15437
+ this.handleDocumentKeyDown = (event) => {
15438
+ const target = event.target;
15439
+ const isClearButton = target.closest(".select__clear") !== null;
15440
+ const isIconButton = target.closest("flow-ui-icon-button") !== null;
15441
+ if (isClearButton || isIconButton) {
15442
+ return;
15443
+ }
15444
+ if (event.key === "Escape" && this.open && !this.closeWatcher) {
15445
+ event.preventDefault();
15446
+ event.stopPropagation();
15447
+ this.hide();
15448
+ this.displayInput.focus({ preventScroll: true });
15449
+ }
15450
+ if (event.key === "Enter" || event.key === " " && this.typeToSelectString === "") {
15451
+ event.preventDefault();
15452
+ event.stopImmediatePropagation();
15453
+ if (!this.open) {
15454
+ this.show();
15455
+ return;
15456
+ }
15457
+ if (this.currentOption && !this.currentOption.disabled) {
15458
+ if (this.multiple) {
15459
+ this.toggleOptionSelection(this.currentOption);
15460
+ } else {
15461
+ this.setSelectedOptions(this.currentOption);
15462
+ }
15463
+ this.updateComplete.then(() => {
15464
+ this.emit("flow-ui-input");
15465
+ this.emit("flow-ui-change");
15466
+ });
15467
+ if (!this.multiple) {
15468
+ this.hide();
15469
+ this.displayInput.focus({ preventScroll: true });
15470
+ }
15471
+ }
15472
+ return;
15473
+ }
15474
+ if (["ArrowUp", "ArrowDown", "Home", "End"].includes(event.key)) {
15475
+ const allOptions = this.getAllOptions();
15476
+ const currentIndex = allOptions.indexOf(this.currentOption);
15477
+ let newIndex = Math.max(0, currentIndex);
15478
+ event.preventDefault();
15479
+ if (!this.open) {
15480
+ this.show();
15481
+ if (this.currentOption) {
15482
+ return;
15483
+ }
15484
+ }
15485
+ if (event.key === "ArrowDown") {
15486
+ newIndex = currentIndex + 1;
15487
+ if (newIndex > allOptions.length - 1)
15488
+ newIndex = 0;
15489
+ } else if (event.key === "ArrowUp") {
15490
+ newIndex = currentIndex - 1;
15491
+ if (newIndex < 0)
15492
+ newIndex = allOptions.length - 1;
15493
+ } else if (event.key === "Home") {
15494
+ newIndex = 0;
15495
+ } else if (event.key === "End") {
15496
+ newIndex = allOptions.length - 1;
15497
+ }
15498
+ this.setCurrentOption(allOptions[newIndex]);
15499
+ }
15500
+ if (event.key.length === 1 || event.key === "Backspace") {
15501
+ const allOptions = this.getAllOptions();
15502
+ if (event.metaKey || event.ctrlKey || event.altKey) {
15503
+ return;
15504
+ }
15505
+ if (!this.open) {
15506
+ if (event.key === "Backspace") {
15507
+ return;
15508
+ }
15509
+ this.show();
15510
+ }
15511
+ event.stopPropagation();
15512
+ event.preventDefault();
15513
+ clearTimeout(this.typeToSelectTimeout);
15514
+ this.typeToSelectTimeout = window.setTimeout(() => this.typeToSelectString = "", 1e3);
15515
+ if (event.key === "Backspace") {
15516
+ this.typeToSelectString = this.typeToSelectString.slice(0, -1);
15517
+ } else {
15518
+ this.typeToSelectString += event.key.toLowerCase();
15519
+ }
15520
+ for (const option of allOptions) {
15521
+ const label = option.getTextLabel().toLowerCase();
15522
+ if (label.startsWith(this.typeToSelectString)) {
15523
+ this.setCurrentOption(option);
15524
+ break;
15525
+ }
15526
+ }
15527
+ }
15528
+ };
15529
+ this.handleDocumentMouseDown = (event) => {
15530
+ const path = event.composedPath();
15531
+ if (this && !path.includes(this)) {
15532
+ this.hide();
15533
+ }
15534
+ };
15270
15535
  }
15271
15536
  /** Gets the validity state object */
15272
15537
  get validity() {
@@ -15278,20 +15543,49 @@ exports.FlowSelect = class FlowSelect extends FlowRdfElement {
15278
15543
  }
15279
15544
  connectedCallback() {
15280
15545
  super.connectedCallback();
15281
- this.handleDocumentFocusIn = this.handleDocumentFocusIn.bind(this);
15282
- this.handleDocumentKeyDown = this.handleDocumentKeyDown.bind(this);
15283
- this.handleDocumentMouseDown = this.handleDocumentMouseDown.bind(this);
15284
15546
  this.open = false;
15547
+ this.mutationObserver = new MutationObserver(() => {
15548
+ this.updateComplete.then(() => {
15549
+ this.selectionChanged();
15550
+ });
15551
+ });
15552
+ this.mutationObserver.observe(this, {
15553
+ attributes: true,
15554
+ attributeFilter: ["value"],
15555
+ characterData: true,
15556
+ subtree: true
15557
+ });
15558
+ }
15559
+ disconnectedCallback() {
15560
+ super.disconnectedCallback();
15561
+ this.mutationObserver?.disconnect();
15285
15562
  }
15286
15563
  addOpenListeners() {
15287
15564
  document.addEventListener("focusin", this.handleDocumentFocusIn);
15288
15565
  document.addEventListener("keydown", this.handleDocumentKeyDown);
15289
15566
  document.addEventListener("mousedown", this.handleDocumentMouseDown);
15567
+ if (this.getRootNode() !== document) {
15568
+ this.getRootNode().addEventListener("focusin", this.handleDocumentFocusIn);
15569
+ }
15570
+ if ("CloseWatcher" in window) {
15571
+ this.closeWatcher?.destroy();
15572
+ this.closeWatcher = new CloseWatcher();
15573
+ this.closeWatcher.onclose = () => {
15574
+ if (this.open) {
15575
+ this.hide();
15576
+ this.displayInput.focus({ preventScroll: true });
15577
+ }
15578
+ };
15579
+ }
15290
15580
  }
15291
15581
  removeOpenListeners() {
15292
15582
  document.removeEventListener("focusin", this.handleDocumentFocusIn);
15293
15583
  document.removeEventListener("keydown", this.handleDocumentKeyDown);
15294
15584
  document.removeEventListener("mousedown", this.handleDocumentMouseDown);
15585
+ if (this.getRootNode() !== document) {
15586
+ this.getRootNode().removeEventListener("focusin", this.handleDocumentFocusIn);
15587
+ }
15588
+ this.closeWatcher?.destroy();
15295
15589
  }
15296
15590
  handleFocus() {
15297
15591
  this.hasFocus = true;
@@ -15302,110 +15596,6 @@ exports.FlowSelect = class FlowSelect extends FlowRdfElement {
15302
15596
  this.hasFocus = false;
15303
15597
  this.emit("flow-ui-blur");
15304
15598
  }
15305
- handleDocumentFocusIn(event) {
15306
- const path = event.composedPath();
15307
- if (this && !path.includes(this)) {
15308
- this.hide();
15309
- }
15310
- }
15311
- handleDocumentKeyDown(event) {
15312
- const target = event.target;
15313
- const isClearButton = target.closest(".select__clear") !== null;
15314
- const isIconButton = target.closest("flow-ui-icon-button") !== null;
15315
- if (isClearButton || isIconButton) {
15316
- return;
15317
- }
15318
- if (event.key === "Escape" && this.open) {
15319
- event.preventDefault();
15320
- event.stopPropagation();
15321
- this.hide();
15322
- this.displayInput.focus({ preventScroll: true });
15323
- }
15324
- if (event.key === "Enter" || event.key === " " && this.typeToSelectString === "") {
15325
- event.preventDefault();
15326
- event.stopImmediatePropagation();
15327
- if (!this.open) {
15328
- this.show();
15329
- return;
15330
- }
15331
- if (this.currentOption && !this.currentOption.disabled) {
15332
- if (this.multiple) {
15333
- this.toggleOptionSelection(this.currentOption);
15334
- } else {
15335
- this.setSelectedOptions(this.currentOption);
15336
- }
15337
- this.updateComplete.then(() => {
15338
- this.emit("flow-ui-input");
15339
- this.emit("flow-ui-change");
15340
- });
15341
- if (!this.multiple) {
15342
- this.hide();
15343
- this.displayInput.focus({ preventScroll: true });
15344
- }
15345
- }
15346
- return;
15347
- }
15348
- if (["ArrowUp", "ArrowDown", "Home", "End"].includes(event.key)) {
15349
- const allOptions = this.getAllOptions();
15350
- const currentIndex = allOptions.indexOf(this.currentOption);
15351
- let newIndex = Math.max(0, currentIndex);
15352
- event.preventDefault();
15353
- if (!this.open) {
15354
- this.show();
15355
- if (this.currentOption) {
15356
- return;
15357
- }
15358
- }
15359
- if (event.key === "ArrowDown") {
15360
- newIndex = currentIndex + 1;
15361
- if (newIndex > allOptions.length - 1)
15362
- newIndex = 0;
15363
- } else if (event.key === "ArrowUp") {
15364
- newIndex = currentIndex - 1;
15365
- if (newIndex < 0)
15366
- newIndex = allOptions.length - 1;
15367
- } else if (event.key === "Home") {
15368
- newIndex = 0;
15369
- } else if (event.key === "End") {
15370
- newIndex = allOptions.length - 1;
15371
- }
15372
- this.setCurrentOption(allOptions[newIndex]);
15373
- }
15374
- if (event.key.length === 1 || event.key === "Backspace") {
15375
- const allOptions = this.getAllOptions();
15376
- if (event.metaKey || event.ctrlKey || event.altKey) {
15377
- return;
15378
- }
15379
- if (!this.open) {
15380
- if (event.key === "Backspace") {
15381
- return;
15382
- }
15383
- this.show();
15384
- }
15385
- event.stopPropagation();
15386
- event.preventDefault();
15387
- clearTimeout(this.typeToSelectTimeout);
15388
- this.typeToSelectTimeout = window.setTimeout(() => this.typeToSelectString = "", 1e3);
15389
- if (event.key === "Backspace") {
15390
- this.typeToSelectString = this.typeToSelectString.slice(0, -1);
15391
- } else {
15392
- this.typeToSelectString += event.key.toLowerCase();
15393
- }
15394
- for (const option of allOptions) {
15395
- const label = option.getTextLabel().toLowerCase();
15396
- if (label.startsWith(this.typeToSelectString)) {
15397
- this.setCurrentOption(option);
15398
- break;
15399
- }
15400
- }
15401
- }
15402
- }
15403
- handleDocumentMouseDown(event) {
15404
- const path = event.composedPath();
15405
- if (this && !path.includes(this)) {
15406
- this.hide();
15407
- }
15408
- }
15409
15599
  handleLabelClick() {
15410
15600
  this.displayInput.focus();
15411
15601
  }
@@ -15420,6 +15610,9 @@ exports.FlowSelect = class FlowSelect extends FlowRdfElement {
15420
15610
  this.open = !this.open;
15421
15611
  }
15422
15612
  handleComboboxKeyDown(event) {
15613
+ if (event.key === "Tab") {
15614
+ return;
15615
+ }
15423
15616
  event.stopPropagation();
15424
15617
  this.handleDocumentKeyDown(event);
15425
15618
  }
@@ -15464,13 +15657,7 @@ exports.FlowSelect = class FlowSelect extends FlowRdfElement {
15464
15657
  }
15465
15658
  handleDefaultSlotChange() {
15466
15659
  const allOptions = this.getAllOptions();
15467
- let value;
15468
- if (allOptions.length && this.pendingValue) {
15469
- value = this.pendingValue;
15470
- this.pendingValue = null;
15471
- } else {
15472
- value = Array.isArray(this.value) ? this.value : [this.value];
15473
- }
15660
+ const value = Array.isArray(this.value) ? this.value : [this.value];
15474
15661
  const values = [];
15475
15662
  if (customElements.get("flow-ui-option")) {
15476
15663
  allOptions.forEach((option) => values.push(option.value));
@@ -15550,6 +15737,23 @@ exports.FlowSelect = class FlowSelect extends FlowRdfElement {
15550
15737
  this.formControlController.updateValidity();
15551
15738
  });
15552
15739
  }
15740
+ get tags() {
15741
+ return this.selectedOptions.map((option, index) => {
15742
+ if (index < this.maxOptionsVisible || this.maxOptionsVisible <= 0) {
15743
+ const tag = this.getTag(option, index);
15744
+ return lit.html`
15745
+ <div @flow-ui-remove=${(e) => this.handleTagRemove(e, option)}>
15746
+ ${typeof tag === "string" ? unsafeHtml_js.unsafeHTML(tag) : tag}
15747
+ </div>
15748
+ `;
15749
+ } else if (index === this.maxOptionsVisible) {
15750
+ return lit.html`
15751
+ <flow-ui-tag size=${this.size}>+${this.selectedOptions.length - index}</flow-ui-tag>
15752
+ `;
15753
+ }
15754
+ return lit.html``;
15755
+ });
15756
+ }
15553
15757
  handleInvalid(event) {
15554
15758
  this.formControlController.setValidity(false);
15555
15759
  this.formControlController.emitInvalidEvent(event);
@@ -15563,9 +15767,6 @@ exports.FlowSelect = class FlowSelect extends FlowRdfElement {
15563
15767
  handleValueChange() {
15564
15768
  const allOptions = this.getAllOptions();
15565
15769
  const value = Array.isArray(this.value) ? this.value : [this.value];
15566
- if (allOptions.length === 0) {
15567
- this.pendingValue = value;
15568
- }
15569
15770
  this.setSelectedOptions(allOptions.filter((el) => value.includes(el.value)));
15570
15771
  }
15571
15772
  async handleOpenChange() {
@@ -15727,35 +15928,7 @@ exports.FlowSelect = class FlowSelect extends FlowRdfElement {
15727
15928
  />
15728
15929
 
15729
15930
  ${this.multiple ? lit.html`
15730
- <div part="tags" class="select__tags">
15731
- ${this.selectedOptions.map((option, index) => {
15732
- if (index < this.maxOptionsVisible || this.maxOptionsVisible <= 0) {
15733
- return lit.html`
15734
- <flow-ui-tag
15735
- part="tag"
15736
- exportparts="
15737
- base:tag__base,
15738
- content:tag__content,
15739
- remove-button:tag__remove-button,
15740
- remove-button__base:tag__remove-button__base
15741
- "
15742
- ?pill=${this.pill}
15743
- size=${this.size}
15744
- removable
15745
- @flow-ui-remove=${(event) => this.handleTagRemove(event, option)}
15746
- >
15747
- ${option.getTextLabel()}
15748
- </flow-ui-tag>
15749
- `;
15750
- } else if (index === this.maxOptionsVisible) {
15751
- return lit.html`
15752
- <flow-ui-tag size=${this.size}>+${this.selectedOptions.length - index}</flow-ui-tag>
15753
- `;
15754
- } else {
15755
- return null;
15756
- }
15757
- })}
15758
- </div>
15931
+ <div part="tags" class="select__tags">${this.tags}</div>
15759
15932
  ` : ""}
15760
15933
 
15761
15934
  <input
@@ -15786,6 +15959,8 @@ exports.FlowSelect = class FlowSelect extends FlowRdfElement {
15786
15959
  </button>
15787
15960
  ` : ""}
15788
15961
 
15962
+ <slot name="suffix" part="suffix" class="select__suffix"></slot>
15963
+
15789
15964
  <slot name="expand-icon" part="expand-icon" class="select__expand-icon">
15790
15965
  <flow-ui-icon library="system" name="chevron-down"></flow-ui-icon>
15791
15966
  </slot>
@@ -15808,50 +15983,54 @@ exports.FlowSelect = class FlowSelect extends FlowRdfElement {
15808
15983
  </flow-ui-popup>
15809
15984
  </div>
15810
15985
 
15811
- <slot
15812
- name="help-text"
15986
+ <div
15813
15987
  part="form-control-help-text"
15814
15988
  id="help-text"
15815
15989
  class="form-control__help-text"
15816
15990
  aria-hidden=${hasHelpText ? "false" : "true"}
15817
15991
  >
15818
- ${this.helpText}
15819
- </slot>
15992
+ <slot name="help-text">${this.helpText}</slot>
15993
+ </div>
15820
15994
  </div>
15821
15995
  `;
15822
15996
  }
15997
+ }
15998
+ FlowSelect.styles = [componentStyles, formControlStyles, styles$i];
15999
+ FlowSelect.dependencies = {
16000
+ "flow-icon": FlowIcon,
16001
+ "flow-popup": SlPopup,
16002
+ "flow-tag": FlowTag
15823
16003
  };
15824
- exports.FlowSelect.styles = styles$i;
15825
16004
  __decorateClass$h([
15826
16005
  decorators_js.query(".select")
15827
- ], exports.FlowSelect.prototype, "popup", 2);
16006
+ ], FlowSelect.prototype, "popup", 2);
15828
16007
  __decorateClass$h([
15829
16008
  decorators_js.query(".select__combobox")
15830
- ], exports.FlowSelect.prototype, "combobox", 2);
16009
+ ], FlowSelect.prototype, "combobox", 2);
15831
16010
  __decorateClass$h([
15832
16011
  decorators_js.query(".select__display-input")
15833
- ], exports.FlowSelect.prototype, "displayInput", 2);
16012
+ ], FlowSelect.prototype, "displayInput", 2);
15834
16013
  __decorateClass$h([
15835
16014
  decorators_js.query(".select__value-input")
15836
- ], exports.FlowSelect.prototype, "valueInput", 2);
16015
+ ], FlowSelect.prototype, "valueInput", 2);
15837
16016
  __decorateClass$h([
15838
16017
  decorators_js.query(".select__listbox")
15839
- ], exports.FlowSelect.prototype, "listbox", 2);
16018
+ ], FlowSelect.prototype, "listbox", 2);
15840
16019
  __decorateClass$h([
15841
16020
  decorators_js.state()
15842
- ], exports.FlowSelect.prototype, "hasFocus", 2);
16021
+ ], FlowSelect.prototype, "hasFocus", 2);
15843
16022
  __decorateClass$h([
15844
16023
  decorators_js.state()
15845
- ], exports.FlowSelect.prototype, "displayLabel", 2);
16024
+ ], FlowSelect.prototype, "displayLabel", 2);
15846
16025
  __decorateClass$h([
15847
16026
  decorators_js.state()
15848
- ], exports.FlowSelect.prototype, "currentOption", 2);
16027
+ ], FlowSelect.prototype, "currentOption", 2);
15849
16028
  __decorateClass$h([
15850
16029
  decorators_js.state()
15851
- ], exports.FlowSelect.prototype, "selectedOptions", 2);
16030
+ ], FlowSelect.prototype, "selectedOptions", 2);
15852
16031
  __decorateClass$h([
15853
16032
  decorators_js.property()
15854
- ], exports.FlowSelect.prototype, "name", 2);
16033
+ ], FlowSelect.prototype, "name", 2);
15855
16034
  __decorateClass$h([
15856
16035
  decorators_js.property({
15857
16036
  converter: {
@@ -15859,67 +16038,67 @@ __decorateClass$h([
15859
16038
  toAttribute: (value) => value.join(" ")
15860
16039
  }
15861
16040
  })
15862
- ], exports.FlowSelect.prototype, "value", 2);
16041
+ ], FlowSelect.prototype, "value", 2);
15863
16042
  __decorateClass$h([
15864
16043
  defaultValue()
15865
- ], exports.FlowSelect.prototype, "defaultValue", 2);
16044
+ ], FlowSelect.prototype, "defaultValue", 2);
15866
16045
  __decorateClass$h([
15867
16046
  decorators_js.property({ reflect: true })
15868
- ], exports.FlowSelect.prototype, "size", 2);
16047
+ ], FlowSelect.prototype, "size", 2);
15869
16048
  __decorateClass$h([
15870
16049
  decorators_js.property()
15871
- ], exports.FlowSelect.prototype, "placeholder", 2);
16050
+ ], FlowSelect.prototype, "placeholder", 2);
15872
16051
  __decorateClass$h([
15873
16052
  decorators_js.property({ type: Boolean, reflect: true })
15874
- ], exports.FlowSelect.prototype, "multiple", 2);
16053
+ ], FlowSelect.prototype, "multiple", 2);
15875
16054
  __decorateClass$h([
15876
16055
  decorators_js.property({ attribute: "max-options-visible", type: Number })
15877
- ], exports.FlowSelect.prototype, "maxOptionsVisible", 2);
16056
+ ], FlowSelect.prototype, "maxOptionsVisible", 2);
15878
16057
  __decorateClass$h([
15879
16058
  decorators_js.property({ type: Boolean, reflect: true })
15880
- ], exports.FlowSelect.prototype, "disabled", 2);
16059
+ ], FlowSelect.prototype, "disabled", 2);
15881
16060
  __decorateClass$h([
15882
16061
  decorators_js.property({ type: Boolean })
15883
- ], exports.FlowSelect.prototype, "clearable", 2);
16062
+ ], FlowSelect.prototype, "clearable", 2);
15884
16063
  __decorateClass$h([
15885
16064
  decorators_js.property({ type: Boolean, reflect: true })
15886
- ], exports.FlowSelect.prototype, "open", 2);
16065
+ ], FlowSelect.prototype, "open", 2);
15887
16066
  __decorateClass$h([
15888
16067
  decorators_js.property({ type: Boolean })
15889
- ], exports.FlowSelect.prototype, "hoist", 2);
16068
+ ], FlowSelect.prototype, "hoist", 2);
15890
16069
  __decorateClass$h([
15891
16070
  decorators_js.property({ type: Boolean, reflect: true })
15892
- ], exports.FlowSelect.prototype, "filled", 2);
16071
+ ], FlowSelect.prototype, "filled", 2);
15893
16072
  __decorateClass$h([
15894
16073
  decorators_js.property({ type: Boolean, reflect: true })
15895
- ], exports.FlowSelect.prototype, "pill", 2);
16074
+ ], FlowSelect.prototype, "pill", 2);
15896
16075
  __decorateClass$h([
15897
16076
  decorators_js.property()
15898
- ], exports.FlowSelect.prototype, "label", 2);
16077
+ ], FlowSelect.prototype, "label", 2);
15899
16078
  __decorateClass$h([
15900
16079
  decorators_js.property({ reflect: true })
15901
- ], exports.FlowSelect.prototype, "placement", 2);
16080
+ ], FlowSelect.prototype, "placement", 2);
15902
16081
  __decorateClass$h([
15903
16082
  decorators_js.property({ attribute: "help-text" })
15904
- ], exports.FlowSelect.prototype, "helpText", 2);
16083
+ ], FlowSelect.prototype, "helpText", 2);
15905
16084
  __decorateClass$h([
15906
16085
  decorators_js.property({ reflect: true })
15907
- ], exports.FlowSelect.prototype, "form", 2);
16086
+ ], FlowSelect.prototype, "form", 2);
15908
16087
  __decorateClass$h([
15909
16088
  decorators_js.property({ type: Boolean, reflect: true })
15910
- ], exports.FlowSelect.prototype, "required", 2);
16089
+ ], FlowSelect.prototype, "required", 2);
16090
+ __decorateClass$h([
16091
+ decorators_js.property()
16092
+ ], FlowSelect.prototype, "getTag", 2);
15911
16093
  __decorateClass$h([
15912
16094
  watch("disabled", { waitUntilFirstUpdate: true })
15913
- ], exports.FlowSelect.prototype, "handleDisabledChange", 1);
16095
+ ], FlowSelect.prototype, "handleDisabledChange", 1);
15914
16096
  __decorateClass$h([
15915
16097
  watch("value", { waitUntilFirstUpdate: true })
15916
- ], exports.FlowSelect.prototype, "handleValueChange", 1);
16098
+ ], FlowSelect.prototype, "handleValueChange", 1);
15917
16099
  __decorateClass$h([
15918
16100
  watch("open", { waitUntilFirstUpdate: true })
15919
- ], exports.FlowSelect.prototype, "handleOpenChange", 1);
15920
- exports.FlowSelect = __decorateClass$h([
15921
- decorators_js.customElement("flow-ui-select")
15922
- ], exports.FlowSelect);
16101
+ ], FlowSelect.prototype, "handleOpenChange", 1);
15923
16102
  setDefaultAnimation("select.show", {
15924
16103
  keyframes: [
15925
16104
  { opacity: 0, scale: 0.9 },
@@ -15935,6 +16114,8 @@ setDefaultAnimation("select.hide", {
15935
16114
  options: { duration: 100, easing: "ease" }
15936
16115
  });
15937
16116
 
16117
+ FlowSelect.define("flow-ui-select");
16118
+
15938
16119
  const styles$h = lit.css`
15939
16120
  ${componentStyles}
15940
16121
 
@@ -16224,7 +16405,8 @@ class FlowSplitViewPane extends FlowRdfElement {
16224
16405
  <slot></slot>
16225
16406
  </div>
16226
16407
  ${this.divider ? lit.html`
16227
- <flow-ui-split-view-divider part="divider"
16408
+ <flow-ui-split-view-divider
16409
+ part="divider"
16228
16410
  ?vertical=${this.vertical}
16229
16411
  class="split-view-pane__divider"
16230
16412
  ></flow-ui-split-view-divider>
@@ -17182,11 +17364,9 @@ class FlowStepper extends FlowRdfElement {
17182
17364
  return this.panels.map((panel, index) => {
17183
17365
  const template = [this.renderHeaderItem(panel, index)];
17184
17366
  if (index > 0) {
17185
- template.unshift(
17186
- lit.html`
17187
- <div class="stepper__header-line"></div>
17188
- `
17189
- );
17367
+ template.unshift(lit.html`
17368
+ <div class="stepper__header-line"></div>
17369
+ `);
17190
17370
  }
17191
17371
  return template;
17192
17372
  });
@@ -19202,7 +19382,6 @@ const styles$6 = lit.css`
19202
19382
  }
19203
19383
  `;
19204
19384
 
19205
- dayjs__default.locale("en");
19206
19385
  class FlowTimer extends FlowRdfElement {
19207
19386
  connectedCallback() {
19208
19387
  super.connectedCallback();
@@ -21578,6 +21757,13 @@ function getBasePath(subpath = "") {
21578
21757
  return basePath.replace(/\/$/, "") + (subpath ? `/${subpath.replace(/^\//, "")}` : ``);
21579
21758
  }
21580
21759
 
21760
+ function setDefaultLocale(locale) {
21761
+ luxon.Settings.defaultLocale = locale;
21762
+ }
21763
+ function setDefaultTimeZone(timeZone) {
21764
+ luxon.Settings.defaultZone = timeZone;
21765
+ }
21766
+
21581
21767
  const translation = {
21582
21768
  $code: "en",
21583
21769
  $name: "English",
@@ -21611,7 +21797,7 @@ const translation = {
21611
21797
  };
21612
21798
  localize.registerTranslation(translation);
21613
21799
 
21614
- const version = "0.0.25";
21800
+ const version = "0.0.27";
21615
21801
 
21616
21802
  const CONSOLE_HIGHLIGHT_STYLE = `
21617
21803
  padding: 2px 4px;
@@ -21624,7 +21810,6 @@ function announce() {
21624
21810
 
21625
21811
  announce();
21626
21812
 
21627
- exports.dayjs = dayjs__default;
21628
21813
  exports.ChartJs = chart_js.Chart;
21629
21814
  exports.FlowCalendar = FlowCalendar;
21630
21815
  exports.FlowChart = FlowChart;
@@ -21634,15 +21819,19 @@ exports.FlowGauge = FlowGauge;
21634
21819
  exports.FlowIcon = FlowIcon;
21635
21820
  exports.FlowIconButton = FlowIconButton;
21636
21821
  exports.FlowNumberStepper = FlowNumberStepper;
21637
- exports.FlowPanel = FlowSplitViewPanel;
21822
+ exports.FlowOption = FlowOption;
21823
+ exports.FlowPanel = FlowPanel;
21638
21824
  exports.FlowPanelHeader = FlowPanelHeader;
21825
+ exports.FlowPopup = SlPopup;
21639
21826
  exports.FlowScrollView = FlowScrollView;
21827
+ exports.FlowSelect = FlowSelect;
21640
21828
  exports.FlowSplitView = FlowSplitView;
21641
21829
  exports.FlowSplitViewDivider = FlowPanelDivider;
21642
21830
  exports.FlowSplitViewPane = FlowSplitViewPane;
21643
21831
  exports.FlowSplitViewToggleButton = FlowSplitViewToggleButton;
21644
21832
  exports.FlowStepper = FlowStepper;
21645
21833
  exports.FlowStepperPanel = FlowStepperPanel;
21834
+ exports.FlowTag = FlowTag;
21646
21835
  exports.FlowTimer = FlowTimer;
21647
21836
  exports.FlowToolButton = FlowToolButton;
21648
21837
  exports.FlowToolButtonGroup = FlowToolButtonGroup;
@@ -21656,4 +21845,6 @@ exports.initializeChartJs = initializeChartJs;
21656
21845
  exports.registerChartComponent = registerChartComponent;
21657
21846
  exports.registerIconLibrary = registerIconLibrary;
21658
21847
  exports.setBasePath = setBasePath;
21848
+ exports.setDefaultLocale = setDefaultLocale;
21849
+ exports.setDefaultTimeZone = setDefaultTimeZone;
21659
21850
  exports.unregisterIconLibrary = unregisterIconLibrary;