@melodicdev/components 1.6.5 → 1.6.6

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.
@@ -356,13 +356,16 @@ var SignalEffect = class {
356
356
  this._dependencies.clear();
357
357
  }
358
358
  };
359
+ var DESTROYED_MESSAGE = "Signal accessed after destruction. Holding a signal beyond its owning component (e.g. cached on a long-lived service) is a bug — the signal is destroyed when its component disconnects.";
359
360
  function signal(initialValue) {
360
361
  let value = initialValue;
362
+ let destroyed = false;
361
363
  const subscribers = /* @__PURE__ */ new Set();
362
364
  const notify = () => {
363
365
  [...subscribers].forEach((subscriber) => subscriber(value));
364
366
  };
365
367
  const read = (() => {
368
+ if (destroyed) throw new Error(DESTROYED_MESSAGE);
366
369
  const activeEffect$1 = getActiveEffect();
367
370
  if (activeEffect$1) {
368
371
  activeEffect$1.addDependency(read);
@@ -371,15 +374,18 @@ function signal(initialValue) {
371
374
  return value;
372
375
  });
373
376
  read.set = (newValue) => {
377
+ if (destroyed) throw new Error(DESTROYED_MESSAGE);
374
378
  if (value !== newValue) {
375
379
  value = newValue;
376
380
  notify();
377
381
  }
378
382
  };
379
383
  read.update = (updater) => {
384
+ if (destroyed) throw new Error(DESTROYED_MESSAGE);
380
385
  read.set(updater(value));
381
386
  };
382
387
  read.subscribe = (subscriber) => {
388
+ if (destroyed) throw new Error(DESTROYED_MESSAGE);
383
389
  subscribers.add(subscriber);
384
390
  return () => subscribers.delete(subscriber);
385
391
  };
@@ -387,6 +393,8 @@ function signal(initialValue) {
387
393
  subscribers.delete(subscriber);
388
394
  };
389
395
  read.destroy = () => {
396
+ if (destroyed) return;
397
+ destroyed = true;
390
398
  subscribers.clear();
391
399
  };
392
400
  Object.defineProperty(read, SIGNAL_MARKER, {
@@ -423,6 +431,11 @@ function resolveMessage(message, params) {
423
431
  if (typeof message === "function") return message(params ?? {});
424
432
  return message;
425
433
  }
434
+ var activeComponent = null;
435
+ const setActiveComponent = (component) => {
436
+ activeComponent = component;
437
+ };
438
+ const getActiveComponent = () => activeComponent;
426
439
  var AbstractControl = class {
427
440
  constructor(initialValue, options = {}) {
428
441
  this.parent = null;
@@ -433,6 +446,7 @@ var AbstractControl = class {
433
446
  this._pending = signal(false);
434
447
  this._ownDisabled = signal(false);
435
448
  this._asyncValidationId = 0;
449
+ this._destroyed = false;
436
450
  this.value = signal(initialValue);
437
451
  this.errors = signal(null);
438
452
  this._validators = options.validators ?? [];
@@ -440,6 +454,8 @@ var AbstractControl = class {
440
454
  this._ownDisabled.set(options.disabled ?? false);
441
455
  this.updateOn = options.updateOn ?? "change";
442
456
  this.messages = options.messages ?? {};
457
+ const consumer = getActiveComponent();
458
+ if (consumer) consumer.registerDisposable(this);
443
459
  }
444
460
  initializeAggregates() {
445
461
  this.dirty = computed(() => this.computeDirty());
@@ -608,7 +624,7 @@ var AbstractControl = class {
608
624
  }
609
625
  };
610
626
  var ComponentBase = class extends HTMLElement {
611
- constructor(meta, component) {
627
+ constructor(meta, component, pending) {
612
628
  super();
613
629
  this._unsubscribers = [];
614
630
  this._renderScheduled = false;
@@ -616,6 +632,8 @@ var ComponentBase = class extends HTMLElement {
616
632
  this._meta = meta;
617
633
  this._component = component;
618
634
  this._component.elementRef = this;
635
+ this._disposables = pending?.disposables ?? /* @__PURE__ */ new Set();
636
+ this._selectCache = pending?.selectCache ?? /* @__PURE__ */ new Map();
619
637
  this._root = this.attachShadow({ mode: "open" });
620
638
  applyGlobalStyles(this._root);
621
639
  this._style = this.renderStyles();
@@ -625,9 +643,23 @@ var ComponentBase = class extends HTMLElement {
625
643
  get component() {
626
644
  return this._component;
627
645
  }
646
+ registerDisposable(d) {
647
+ this._disposables.add(d);
648
+ }
649
+ getSelectCache() {
650
+ return this._selectCache;
651
+ }
628
652
  async connectedCallback() {
629
653
  this.render();
630
- if (this._component.onCreate !== void 0) this._component.onCreate();
654
+ if (this._component.onCreate !== void 0) {
655
+ const prev = getActiveComponent();
656
+ setActiveComponent(this);
657
+ try {
658
+ this._component.onCreate();
659
+ } finally {
660
+ setActiveComponent(prev);
661
+ }
662
+ }
631
663
  }
632
664
  disconnectedCallback() {
633
665
  this._unsubscribers.forEach((unsubscribe) => unsubscribe());
@@ -643,6 +675,13 @@ var ComponentBase = class extends HTMLElement {
643
675
  }
644
676
  }
645
677
  if (this._component.onDestroy !== void 0) this._component.onDestroy();
678
+ for (const d of this._disposables) try {
679
+ d.destroy();
680
+ } catch (error) {
681
+ console.error("Disposable cleanup failed:", error);
682
+ }
683
+ this._disposables.clear();
684
+ this._selectCache.clear();
646
685
  }
647
686
  attributeChangedCallback(attribute, oldVal, newVal) {
648
687
  const prop = attribute.replace(/-([a-z])/g, (_, ch) => ch.toUpperCase());
@@ -660,11 +699,17 @@ var ComponentBase = class extends HTMLElement {
660
699
  return this._root.appendChild(styleNode);
661
700
  }
662
701
  render() {
663
- if (this._meta.template) {
664
- render(this._meta.template(this._component, this.getAttributeValues()), this._root);
665
- if (this._style.parentNode !== this._root) this._root.appendChild(this._style);
702
+ const prev = getActiveComponent();
703
+ setActiveComponent(this);
704
+ try {
705
+ if (this._meta.template) {
706
+ render(this._meta.template(this._component, this.getAttributeValues()), this._root);
707
+ if (this._style.parentNode !== this._root) this._root.appendChild(this._style);
708
+ }
709
+ if (this._component.onRender !== void 0) this._component.onRender();
710
+ } finally {
711
+ setActiveComponent(prev);
666
712
  }
667
- if (this._component.onRender !== void 0) this._component.onRender();
668
713
  }
669
714
  scheduleRender() {
670
715
  if (this._renderScheduled) return;
@@ -770,7 +815,26 @@ function MelodicComponent(meta) {
770
815
  if (param && typeof param === "object" && param.__injectionToken) dependencies.push(Injector.get(param.__injectionToken));
771
816
  else dependencies.push(void 0);
772
817
  }
773
- super(meta, Reflect.construct(component, dependencies));
818
+ const disposables = /* @__PURE__ */ new Set();
819
+ const selectCache = /* @__PURE__ */ new Map();
820
+ const placeholder = {
821
+ getSelectCache: () => selectCache,
822
+ registerDisposable: (d) => {
823
+ disposables.add(d);
824
+ }
825
+ };
826
+ const prevActive = getActiveComponent();
827
+ setActiveComponent(placeholder);
828
+ let userInstance;
829
+ try {
830
+ userInstance = Reflect.construct(component, dependencies);
831
+ } finally {
832
+ setActiveComponent(prevActive);
833
+ }
834
+ super(meta, userInstance, {
835
+ disposables,
836
+ selectCache
837
+ });
774
838
  }
775
839
  static #_ = this.observedAttributes = meta.attributes ?? [];
776
840
  };
@@ -2833,12 +2897,14 @@ var EffectsBase = class {
2833
2897
  return this._effects;
2834
2898
  }
2835
2899
  };
2900
+ var nextInstanceId = 0;
2836
2901
  var ComponentStateBaseService = class extends EffectsBase {
2837
2902
  constructor(_initState, _reducerConfig = { reducers: [] }, _debug = false) {
2838
2903
  super();
2839
2904
  this._initState = _initState;
2840
2905
  this._reducerConfig = _reducerConfig;
2841
2906
  this._debug = _debug;
2907
+ this._instanceId = ++nextInstanceId;
2842
2908
  this._state = signal(_initState);
2843
2909
  }
2844
2910
  get state() {
@@ -2847,7 +2913,18 @@ var ComponentStateBaseService = class extends EffectsBase {
2847
2913
  resetState() {
2848
2914
  this._state.set(this._initState);
2849
2915
  }
2850
- select(selectFn) {
2916
+ select(selectFn, cacheKey) {
2917
+ const consumer = getActiveComponent();
2918
+ if (consumer) {
2919
+ const cache = consumer.getSelectCache();
2920
+ const fullKey = `cs:${this._instanceId}::${cacheKey ?? selectFn.toString()}`;
2921
+ const cached = cache.get(fullKey);
2922
+ if (cached) return cached;
2923
+ const sig = computed(() => selectFn(this._state()));
2924
+ cache.set(fullKey, sig);
2925
+ consumer.registerDisposable(sig);
2926
+ return sig;
2927
+ }
2851
2928
  return computed(() => selectFn(this._state()));
2852
2929
  }
2853
2930
  dispatch(action) {
@@ -2882,10 +2959,19 @@ var SignalStoreService = class SignalStoreService$1 {
2882
2959
  constructor() {
2883
2960
  if (this._debug) console.info("RX State Debugging: Enabled");
2884
2961
  }
2885
- select(key, selectFn) {
2886
- return computed(() => {
2887
- return selectFn(this._state[key]());
2888
- });
2962
+ select(key, selectFn, cacheKey) {
2963
+ const consumer = getActiveComponent();
2964
+ if (consumer) {
2965
+ const cache = consumer.getSelectCache();
2966
+ const fullKey = `${String(key)}::${cacheKey ?? selectFn.toString()}`;
2967
+ const cached = cache.get(fullKey);
2968
+ if (cached) return cached;
2969
+ const sig = computed(() => selectFn(this._state[key]()));
2970
+ cache.set(fullKey, sig);
2971
+ consumer.registerDisposable(sig);
2972
+ return sig;
2973
+ }
2974
+ return computed(() => selectFn(this._state[key]()));
2889
2975
  }
2890
2976
  logState() {
2891
2977
  console.log(this.getCurrentState());
@@ -3596,6 +3682,8 @@ var FormControl = class extends AbstractControl {
3596
3682
  this.runValidation();
3597
3683
  }
3598
3684
  destroy() {
3685
+ if (this._destroyed) return;
3686
+ this._destroyed = true;
3599
3687
  this.destroySignals();
3600
3688
  }
3601
3689
  };
@@ -3692,6 +3780,8 @@ var FormGroup = class FormGroup extends AbstractControl {
3692
3780
  await this.runValidation();
3693
3781
  }
3694
3782
  destroy() {
3783
+ if (this._destroyed) return;
3784
+ this._destroyed = true;
3695
3785
  this._childValueEffect.destroy();
3696
3786
  const controls = this.controls();
3697
3787
  for (const key of Object.keys(controls)) controls[key].destroy();
@@ -3820,6 +3910,8 @@ var FormArray = class extends AbstractControl {
3820
3910
  await this.runValidation();
3821
3911
  }
3822
3912
  destroy() {
3913
+ if (this._destroyed) return;
3914
+ this._destroyed = true;
3823
3915
  this._childValueEffect.destroy();
3824
3916
  for (const control of this.controls()) control.destroy();
3825
3917
  this.destroySignals();
@@ -5820,6 +5912,22 @@ const buttonGroupStyles = () => css`
5820
5912
  margin-left: 0;
5821
5913
  }
5822
5914
  `;
5915
+ registerAdapter((el) => el.tagName === "ML-BUTTON-GROUP", {
5916
+ inputEvent: "ml:change",
5917
+ blurEvent: "focusout",
5918
+ getValue: (el) => {
5919
+ const e = el;
5920
+ return e.multiple ? e.values ?? [] : e.value ?? "";
5921
+ },
5922
+ setValue: (el, value) => {
5923
+ const e = el;
5924
+ if (Array.isArray(value)) e.values = value;
5925
+ else e.value = value !== null && value !== void 0 ? String(value) : "";
5926
+ },
5927
+ setDisabled: (el, disabled) => {
5928
+ el.disabled = disabled;
5929
+ }
5930
+ });
5823
5931
  var ButtonGroupComponent = class ButtonGroupComponent$1 {
5824
5932
  constructor() {
5825
5933
  this.value = "";
@@ -7360,6 +7468,17 @@ const radioCardGroupStyles = () => css`
7360
7468
  color: var(--ml-radio-card-group-error-color);
7361
7469
  }
7362
7470
  `;
7471
+ registerAdapter((el) => el.tagName === "ML-RADIO-CARD-GROUP", {
7472
+ inputEvent: "ml:change",
7473
+ blurEvent: "focusout",
7474
+ getValue: (el) => el.value ?? "",
7475
+ setValue: (el, value) => {
7476
+ el.value = value !== null && value !== void 0 ? String(value) : "";
7477
+ },
7478
+ setDisabled: (el, disabled) => {
7479
+ el.disabled = disabled;
7480
+ }
7481
+ });
7363
7482
  var RadioCardGroupComponent = class RadioCardGroupComponent$1 {
7364
7483
  constructor() {
7365
7484
  this.value = "";
@@ -10596,7 +10715,7 @@ const datePickerStyles = () => css`
10596
10715
  }
10597
10716
  `;
10598
10717
  registerAdapter((el) => el.tagName === "ML-DATE-PICKER", {
10599
- inputEvent: "ml:select",
10718
+ inputEvent: "ml:change",
10600
10719
  blurEvent: "focusout",
10601
10720
  getValue: (el) => el.value ?? "",
10602
10721
  setValue: (el, value) => {
@@ -25639,6 +25758,6 @@ DashboardPageComponent = __decorate([MelodicComponent({
25639
25758
  "layout"
25640
25759
  ]
25641
25760
  })], DashboardPageComponent);
25642
- export { APP_CONFIG, AbortError, AbstractControl, ActivityFeedComponent, ActivityFeedItemComponent, AlertComponent, AppShellComponent, AvatarComponent, BadgeComponent, BadgeGroupComponent, Binding, BreadcrumbComponent, BreadcrumbItemComponent, ButtonComponent, ButtonGroupComponent, ButtonGroupItemComponent, CalendarComponent, CalendarViewComponent, CardComponent, CheckboxComponent, ComponentBase, ComponentStateBaseService, ContainerComponent, DashboardPageComponent, DatePickerComponent, DialogComponent, DialogRef, DialogService, Directive, DividerComponent, DrawerComponent, DropdownComponent, DropdownGroupComponent, DropdownItemComponent, DropdownSeparatorComponent, EffectsBase, FormArray, FormControl, FormFieldComponent, FormGroup, HeroSectionComponent, HttpBaseError, HttpClient, HttpError, IconComponent, Inject, Injectable, InjectionEngine, Injector, InputComponent, ListComponent, ListItemComponent, LoginPageComponent, MelodicComponent, NetworkError, PageHeaderComponent, PaginationComponent, PopoverComponent, ProgressComponent, ROUTE_CONTEXT_EVENT, RX_ACTION_PROVIDERS, RX_EFFECTS_PROVIDERS, RX_INIT_STATE, RX_STATE_DEBUG, RadioCardComponent, RadioCardGroupComponent, RadioComponent, RadioGroupComponent, RouteContextEvent, RouteContextService, RouteMatcher, RouterLinkComponent, RouterOutletComponent, RouterService, SIGNAL_MARKER, SelectComponent, Service, SidebarComponent, SidebarGroupComponent, SidebarItemComponent, SignalEffect, SignalStoreService, SignupPageComponent, SliderComponent, SpinnerComponent, StackComponent, StepComponent, StepPanelComponent, StepsComponent, TabComponent, TabPanelComponent, TableComponent, TabsComponent, TagComponent, TemplateResult, TextareaComponent, ToastComponent, ToastContainerComponent, ToastService, ToggleComponent, TooltipComponent, Validators, VirtualScroller, activityFeedItemStyles, activityFeedItemTemplate, activityFeedStyles, activityFeedTemplate, allTokens, announce, appShellStyles, appShellTemplate, applyGlobalStyles, applyTheme, arrow, autoUpdate, baseThemeCss, bootstrap, borderTokens, breadcrumbItemStyles, breadcrumbItemTemplate, breadcrumbStyles, breadcrumbTemplate, breakpointTokens, breakpoints, buildPathFromRoute, calendarViewStyles, calendarViewTemplate, checkboxAdapter, classMap, clickOutside, colorTokens, componentBaseStyles, computePosition, computed, containerStyles, containerTemplate, createAction, createAsyncValidator, createBrandTheme, createDeactivateGuard, createFocusTrap, createFormArray, createFormControl, createFormGroup, createGuard, createLiveRegion, createReducer, createResolver, createState, createTheme, createToken, createValidator, css, darkTheme, darkThemeCss, dashboardPageStyles, dashboardPageTemplate, defineConfig, directive, drawerStyles, drawerTemplate, dropdownGroupStyles, dropdownGroupTemplate, dropdownItemStyles, dropdownItemTemplate, dropdownSeparatorStyles, dropdownSeparatorTemplate, dropdownStyles, dropdownTemplate, environment, findRouteByName, flip, focusFirst, focusLast, focusTrap, focusVisible, formControlDirective, formFieldStyles, formFieldTemplate, getActiveEffect, getAdapter, getAttributeDirective, getEnvironment, getFirstFocusable, getFocusableElements, getGlobalMessage, getLastFocusable, getRegisteredDirectives, getResolvedTheme, getTheme, getTokenKey, hasAttributeDirective, heroSectionStyles, heroSectionTemplate, html, injectTheme, isDirective, isFocusVisible, isSignal, lightTheme, lightThemeCss, listItemStyles, listItemTemplate, listStyles, listTemplate, loginPageStyles, loginPageTemplate, matchRouteTree, newID, offset, onAction, onThemeChange, pageHeaderStyles, pageHeaderTemplate, paginationStyles, paginationTemplate, portalDirective, primitiveColors, progressStyles, progressTemplate, props, provideConfig, provideHttp, provideRX, radioAdapter, registerAdapter, registerAttributeDirective, registerDefaultMessages, render, repeat, repeatRaw, resetStyles, resolveMessage, routerLinkDirective, selectStyles, selectTemplate, setActiveEffect, setDefaultMessage, shadowTokens, shift, sidebarGroupStyles, sidebarGroupTemplate, sidebarItemStyles, sidebarItemTemplate, sidebarStyles, sidebarTemplate, signal, signupPageStyles, signupPageTemplate, sliderStyles, sliderTemplate, spacingTokens, stepPanelStyles, stepPanelTemplate, stepStyles, stepTemplate, stepsStyles, stepsTemplate, styleMap, tabPanelStyles, tabPanelTemplate, tabStyles, tabTemplate, tableStyles, tableTemplate, tabsStyles, tabsTemplate, textAdapter, toastContainerStyles, toastContainerTemplate, toastStyles, toastTemplate, toggleTheme, tokensToCss, tooltipDirective, transitionTokens, typographyTokens, unregisterAttributeDirective, unsafeHTML, visuallyHiddenStyles, when };
25761
+ export { APP_CONFIG, AbortError, AbstractControl, ActivityFeedComponent, ActivityFeedItemComponent, AlertComponent, AppShellComponent, AvatarComponent, BadgeComponent, BadgeGroupComponent, Binding, BreadcrumbComponent, BreadcrumbItemComponent, ButtonComponent, ButtonGroupComponent, ButtonGroupItemComponent, CalendarComponent, CalendarViewComponent, CardComponent, CheckboxComponent, ComponentBase, ComponentStateBaseService, ContainerComponent, DashboardPageComponent, DatePickerComponent, DialogComponent, DialogRef, DialogService, Directive, DividerComponent, DrawerComponent, DropdownComponent, DropdownGroupComponent, DropdownItemComponent, DropdownSeparatorComponent, EffectsBase, FormArray, FormControl, FormFieldComponent, FormGroup, HeroSectionComponent, HttpBaseError, HttpClient, HttpError, IconComponent, Inject, Injectable, InjectionEngine, Injector, InputComponent, ListComponent, ListItemComponent, LoginPageComponent, MelodicComponent, NetworkError, PageHeaderComponent, PaginationComponent, PopoverComponent, ProgressComponent, ROUTE_CONTEXT_EVENT, RX_ACTION_PROVIDERS, RX_EFFECTS_PROVIDERS, RX_INIT_STATE, RX_STATE_DEBUG, RadioCardComponent, RadioCardGroupComponent, RadioComponent, RadioGroupComponent, RouteContextEvent, RouteContextService, RouteMatcher, RouterLinkComponent, RouterOutletComponent, RouterService, SIGNAL_MARKER, SelectComponent, Service, SidebarComponent, SidebarGroupComponent, SidebarItemComponent, SignalEffect, SignalStoreService, SignupPageComponent, SliderComponent, SpinnerComponent, StackComponent, StepComponent, StepPanelComponent, StepsComponent, TabComponent, TabPanelComponent, TableComponent, TabsComponent, TagComponent, TemplateResult, TextareaComponent, ToastComponent, ToastContainerComponent, ToastService, ToggleComponent, TooltipComponent, Validators, VirtualScroller, activityFeedItemStyles, activityFeedItemTemplate, activityFeedStyles, activityFeedTemplate, allTokens, announce, appShellStyles, appShellTemplate, applyGlobalStyles, applyTheme, arrow, autoUpdate, baseThemeCss, bootstrap, borderTokens, breadcrumbItemStyles, breadcrumbItemTemplate, breadcrumbStyles, breadcrumbTemplate, breakpointTokens, breakpoints, buildPathFromRoute, calendarViewStyles, calendarViewTemplate, checkboxAdapter, classMap, clickOutside, colorTokens, componentBaseStyles, computePosition, computed, containerStyles, containerTemplate, createAction, createAsyncValidator, createBrandTheme, createDeactivateGuard, createFocusTrap, createFormArray, createFormControl, createFormGroup, createGuard, createLiveRegion, createReducer, createResolver, createState, createTheme, createToken, createValidator, css, darkTheme, darkThemeCss, dashboardPageStyles, dashboardPageTemplate, defineConfig, directive, drawerStyles, drawerTemplate, dropdownGroupStyles, dropdownGroupTemplate, dropdownItemStyles, dropdownItemTemplate, dropdownSeparatorStyles, dropdownSeparatorTemplate, dropdownStyles, dropdownTemplate, environment, findRouteByName, flip, focusFirst, focusLast, focusTrap, focusVisible, formControlDirective, formFieldStyles, formFieldTemplate, getActiveComponent, getActiveEffect, getAdapter, getAttributeDirective, getEnvironment, getFirstFocusable, getFocusableElements, getGlobalMessage, getLastFocusable, getRegisteredDirectives, getResolvedTheme, getTheme, getTokenKey, hasAttributeDirective, heroSectionStyles, heroSectionTemplate, html, injectTheme, isDirective, isFocusVisible, isSignal, lightTheme, lightThemeCss, listItemStyles, listItemTemplate, listStyles, listTemplate, loginPageStyles, loginPageTemplate, matchRouteTree, newID, offset, onAction, onThemeChange, pageHeaderStyles, pageHeaderTemplate, paginationStyles, paginationTemplate, portalDirective, primitiveColors, progressStyles, progressTemplate, props, provideConfig, provideHttp, provideRX, radioAdapter, registerAdapter, registerAttributeDirective, registerDefaultMessages, render, repeat, repeatRaw, resetStyles, resolveMessage, routerLinkDirective, selectStyles, selectTemplate, setActiveComponent, setActiveEffect, setDefaultMessage, shadowTokens, shift, sidebarGroupStyles, sidebarGroupTemplate, sidebarItemStyles, sidebarItemTemplate, sidebarStyles, sidebarTemplate, signal, signupPageStyles, signupPageTemplate, sliderStyles, sliderTemplate, spacingTokens, stepPanelStyles, stepPanelTemplate, stepStyles, stepTemplate, stepsStyles, stepsTemplate, styleMap, tabPanelStyles, tabPanelTemplate, tabStyles, tabTemplate, tableStyles, tableTemplate, tabsStyles, tabsTemplate, textAdapter, toastContainerStyles, toastContainerTemplate, toastStyles, toastTemplate, toggleTheme, tokensToCss, tooltipDirective, transitionTokens, typographyTokens, unregisterAttributeDirective, unsafeHTML, visuallyHiddenStyles, when };
25643
25762
 
25644
25763
  //# sourceMappingURL=melodic-components.js.map