@magmonium/one 0.2.50 → 0.2.52

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/assets/i18n/af.json +1 -0
  2. package/assets/i18n/am.json +1 -0
  3. package/assets/i18n/ar.json +1 -0
  4. package/assets/i18n/as.json +1 -0
  5. package/assets/i18n/az.json +1 -0
  6. package/assets/i18n/ba.json +1 -0
  7. package/assets/i18n/be.json +1 -0
  8. package/assets/i18n/bg.json +1 -0
  9. package/assets/i18n/bn.json +1 -0
  10. package/assets/i18n/br.json +1 -0
  11. package/assets/i18n/brx.json +1 -0
  12. package/assets/i18n/bs.json +1 -0
  13. package/assets/i18n/ca.json +1 -0
  14. package/assets/i18n/ceb.json +1 -0
  15. package/assets/i18n/cnr.json +1 -0
  16. package/assets/i18n/co.json +1 -0
  17. package/assets/i18n/cs.json +1 -0
  18. package/assets/i18n/cy.json +1 -0
  19. package/assets/i18n/da.json +1 -0
  20. package/assets/i18n/de.json +1 -0
  21. package/assets/i18n/doi.json +1 -0
  22. package/assets/i18n/el.json +1 -0
  23. package/assets/i18n/en.json +1 -0
  24. package/assets/i18n/eo.json +1 -0
  25. package/assets/i18n/es.json +1 -0
  26. package/assets/i18n/et.json +1 -0
  27. package/assets/i18n/eu.json +1 -0
  28. package/assets/i18n/fa.json +1 -0
  29. package/assets/i18n/fi.json +1 -0
  30. package/assets/i18n/fr.json +1 -0
  31. package/assets/i18n/fy.json +1 -0
  32. package/assets/i18n/ga.json +1 -0
  33. package/assets/i18n/gd.json +1 -0
  34. package/assets/i18n/gl.json +1 -0
  35. package/assets/i18n/gu.json +1 -0
  36. package/assets/i18n/ha.json +1 -0
  37. package/assets/i18n/haw.json +1 -0
  38. package/assets/i18n/he.json +1 -0
  39. package/assets/i18n/hi.json +1 -0
  40. package/assets/i18n/hmn.json +1 -0
  41. package/assets/i18n/hr.json +1 -0
  42. package/assets/i18n/hu.json +1 -0
  43. package/assets/i18n/hy.json +1 -0
  44. package/assets/i18n/id.json +1 -0
  45. package/assets/i18n/ie.json +1 -0
  46. package/assets/i18n/ig.json +1 -0
  47. package/assets/i18n/ilo.json +1 -0
  48. package/assets/i18n/is.json +1 -0
  49. package/assets/i18n/it.json +1 -0
  50. package/assets/i18n/iw.json +1 -0
  51. package/assets/i18n/ja.json +1 -0
  52. package/assets/i18n/jw.json +1 -0
  53. package/assets/i18n/ka.json +1 -0
  54. package/assets/i18n/kk.json +1 -0
  55. package/assets/i18n/km.json +1 -0
  56. package/assets/i18n/kn.json +1 -0
  57. package/assets/i18n/ko.json +1 -0
  58. package/assets/i18n/kok.json +1 -0
  59. package/assets/i18n/ks.json +1 -0
  60. package/assets/i18n/ku.json +1 -0
  61. package/assets/i18n/ky.json +1 -0
  62. package/assets/i18n/la.json +1 -0
  63. package/assets/i18n/lb.json +1 -0
  64. package/assets/i18n/lo.json +1 -0
  65. package/assets/i18n/lt.json +1 -0
  66. package/assets/i18n/lv.json +1 -0
  67. package/assets/i18n/ma.json +1 -0
  68. package/assets/i18n/mai.json +1 -0
  69. package/assets/i18n/me.json +1 -0
  70. package/assets/i18n/mg.json +1 -0
  71. package/assets/i18n/mi.json +1 -0
  72. package/assets/i18n/mk.json +1 -0
  73. package/assets/i18n/ml.json +1 -0
  74. package/assets/i18n/mn.json +1 -0
  75. package/assets/i18n/mni.json +1 -0
  76. package/assets/i18n/mr.json +1 -0
  77. package/assets/i18n/ms.json +1 -0
  78. package/assets/i18n/mt.json +1 -0
  79. package/assets/i18n/my.json +1 -0
  80. package/assets/i18n/ne.json +1 -0
  81. package/assets/i18n/nl.json +1 -0
  82. package/assets/i18n/no.json +1 -0
  83. package/assets/i18n/ny.json +1 -0
  84. package/assets/i18n/or.json +1 -0
  85. package/assets/i18n/pa.json +1 -0
  86. package/assets/i18n/pl.json +1 -0
  87. package/assets/i18n/ps.json +1 -0
  88. package/assets/i18n/pt.json +1 -0
  89. package/assets/i18n/rm.json +1 -0
  90. package/assets/i18n/ro.json +1 -0
  91. package/assets/i18n/ru.json +1 -0
  92. package/assets/i18n/sa.json +1 -0
  93. package/assets/i18n/sat.json +1 -0
  94. package/assets/i18n/sc.json +1 -0
  95. package/assets/i18n/sd.json +1 -0
  96. package/assets/i18n/si.json +1 -0
  97. package/assets/i18n/sk.json +1 -0
  98. package/assets/i18n/sl.json +1 -0
  99. package/assets/i18n/sm.json +1 -0
  100. package/assets/i18n/sn.json +1 -0
  101. package/assets/i18n/so.json +1 -0
  102. package/assets/i18n/sq.json +1 -0
  103. package/assets/i18n/sr.json +1 -0
  104. package/assets/i18n/st.json +1 -0
  105. package/assets/i18n/su.json +1 -0
  106. package/assets/i18n/sv.json +1 -0
  107. package/assets/i18n/sw.json +1 -0
  108. package/assets/i18n/ta.json +1 -0
  109. package/assets/i18n/te.json +1 -0
  110. package/assets/i18n/tg.json +1 -0
  111. package/assets/i18n/th.json +1 -0
  112. package/assets/i18n/tl.json +1 -0
  113. package/assets/i18n/tr.json +1 -0
  114. package/assets/i18n/uk.json +1 -0
  115. package/assets/i18n/ur.json +1 -0
  116. package/assets/i18n/uz.json +1 -0
  117. package/assets/i18n/vi.json +1 -0
  118. package/assets/i18n/xh.json +1 -0
  119. package/assets/i18n/yi.json +1 -0
  120. package/assets/i18n/yo.json +1 -0
  121. package/assets/i18n/zh.json +1 -0
  122. package/assets/i18n/zu.json +1 -0
  123. package/assets/index.json +1 -1
  124. package/assets/menu/comments_feed_actions.json +16 -0
  125. package/fesm2022/{magmonium-one-magmonium-one-CSXqQSjH.mjs → magmonium-one-magmonium-one-BLBwZo0x.mjs} +314 -215
  126. package/fesm2022/magmonium-one-magmonium-one-BLBwZo0x.mjs.map +1 -0
  127. package/fesm2022/{magmonium-one-otp-DCDSkq9D.mjs → magmonium-one-otp-yTGhORgD.mjs} +2 -2
  128. package/fesm2022/{magmonium-one-otp-DCDSkq9D.mjs.map → magmonium-one-otp-yTGhORgD.mjs.map} +1 -1
  129. package/fesm2022/{magmonium-one-password-x0jlYhku.mjs → magmonium-one-password-qf4uRPEA.mjs} +2 -2
  130. package/fesm2022/{magmonium-one-password-x0jlYhku.mjs.map → magmonium-one-password-qf4uRPEA.mjs.map} +1 -1
  131. package/fesm2022/{magmonium-one-toggle-CCaLEJ8V.mjs → magmonium-one-toggle-C9uEm1Pl.mjs} +2 -2
  132. package/fesm2022/{magmonium-one-toggle-CCaLEJ8V.mjs.map → magmonium-one-toggle-C9uEm1Pl.mjs.map} +1 -1
  133. package/fesm2022/magmonium-one.mjs +1 -1
  134. package/package.json +1 -1
  135. package/types/magmonium-one.d.ts +32 -0
  136. package/fesm2022/magmonium-one-magmonium-one-CSXqQSjH.mjs.map +0 -1
@@ -6990,7 +6990,7 @@ class SectionFormItemComponent extends ConfigComponent {
6990
6990
  break;
6991
6991
  }
6992
6992
  case InputType.TOGGLE: {
6993
- const { ToggleInputComponent } = await import('./magmonium-one-toggle-CCaLEJ8V.mjs');
6993
+ const { ToggleInputComponent } = await import('./magmonium-one-toggle-C9uEm1Pl.mjs');
6994
6994
  this.createDynamicComponent(seq, ToggleInputComponent, [], true);
6995
6995
  break;
6996
6996
  }
@@ -7002,12 +7002,12 @@ class SectionFormItemComponent extends ConfigComponent {
7002
7002
  break;
7003
7003
  }
7004
7004
  case InputType.PASSWORD: {
7005
- const { PasswordInputComponent } = await import('./magmonium-one-password-x0jlYhku.mjs');
7005
+ const { PasswordInputComponent } = await import('./magmonium-one-password-qf4uRPEA.mjs');
7006
7006
  this.createDynamicComponent(seq, PasswordInputComponent);
7007
7007
  break;
7008
7008
  }
7009
7009
  case InputType.OTP: {
7010
- const { OtpInputComponent } = await import('./magmonium-one-otp-DCDSkq9D.mjs');
7010
+ const { OtpInputComponent } = await import('./magmonium-one-otp-yTGhORgD.mjs');
7011
7011
  this.createDynamicComponent(seq, OtpInputComponent);
7012
7012
  break;
7013
7013
  }
@@ -7348,6 +7348,35 @@ const findFirstFocusable = (root) => {
7348
7348
  .sort((a, b) => a.order - b.order || a.index - b.index)[0].element;
7349
7349
  };
7350
7350
 
7351
+ /**
7352
+ * The model record a FieldTree is stamped from: one entry per rendered key,
7353
+ * taken off `data` and coerced the way a control can hold it.
7354
+ *
7355
+ * Arrays, objects and booleans keep their shape — a boolean stringified to ''
7356
+ * reads as "unset" to every consumer that filters empty values, so `false`
7357
+ * could never survive a round trip (ADR 0010). Everything else becomes a
7358
+ * string, an absent key becoming ''.
7359
+ */
7360
+ const toModelValues = (data, keys) => {
7361
+ const values = {};
7362
+ keys?.forEach((key) => {
7363
+ const raw = data?.[key];
7364
+ if (Array.isArray(raw)) {
7365
+ values[key] = raw;
7366
+ }
7367
+ else if (raw !== null && typeof raw === 'object') {
7368
+ values[key] = raw;
7369
+ }
7370
+ else if (typeof raw === 'boolean') {
7371
+ values[key] = raw;
7372
+ }
7373
+ else {
7374
+ values[key] = String(raw ?? '');
7375
+ }
7376
+ });
7377
+ return values;
7378
+ };
7379
+
7351
7380
  /**
7352
7381
  * `T` is the record the form carries, named by whoever binds `data`. An output
7353
7382
  * cannot be typed from what was projected into the form — a Field announces its
@@ -7510,28 +7539,16 @@ class SectionFormComponent extends ConfigComponent {
7510
7539
  }),
7511
7540
  computation: ({ data, inputs }, previous) => {
7512
7541
  const dataChanged = !previous || previous.source.data !== data;
7513
- const values = {};
7542
+ // Same rule as FormGroup: a boolean stays one, so `false` survives the
7543
+ // round trip instead of collapsing to '' (ADR 0010).
7544
+ const values = toModelValues(data, inputs);
7545
+ if (dataChanged || !previous)
7546
+ return values;
7547
+ // A key that was already in the model keeps what the User typed — a
7548
+ // sibling Field registering late must not wipe the form.
7514
7549
  inputs?.forEach((inputName) => {
7515
- if (!dataChanged &&
7516
- previous &&
7517
- Object.prototype.hasOwnProperty.call(previous.value, inputName)) {
7550
+ if (Object.prototype.hasOwnProperty.call(previous.value, inputName)) {
7518
7551
  values[inputName] = previous.value[inputName];
7519
- return;
7520
- }
7521
- const raw = data?.[inputName];
7522
- if (Array.isArray(raw)) {
7523
- values[inputName] = raw;
7524
- }
7525
- else if (raw !== null && typeof raw === 'object') {
7526
- values[inputName] = raw;
7527
- }
7528
- else if (typeof raw === 'boolean') {
7529
- // Same rule as FormGroup: a boolean stays one, so `false` survives
7530
- // the round trip instead of collapsing to '' (ADR 0010).
7531
- values[inputName] = raw;
7532
- }
7533
- else {
7534
- values[inputName] = String(raw ?? '');
7535
7552
  }
7536
7553
  });
7537
7554
  return values;
@@ -7629,7 +7646,7 @@ class SectionFormComponent extends ConfigComponent {
7629
7646
  // The merged schema, so a Field reporting `required` rebuilds the tree
7630
7647
  // with its validator on it — a rule added after create binds to nothing.
7631
7648
  void this.resolvedValidation();
7632
- untracked(() => this.reset());
7649
+ untracked(() => this.rebuild());
7633
7650
  });
7634
7651
  effect(() => {
7635
7652
  const formTree = this.formGroup();
@@ -7680,7 +7697,11 @@ class SectionFormComponent extends ConfigComponent {
7680
7697
  return;
7681
7698
  target.focus();
7682
7699
  };
7683
- reset = () => {
7700
+ // Stamps a fresh FieldTree over the model as it stands. The keys a tree is
7701
+ // built from are fixed at create, so a key that appeared afterwards (an item
7702
+ // registering, a `config.inputs` change) and a rule declared afterwards both
7703
+ // need this — neither touches the values already in the model.
7704
+ rebuild = () => {
7684
7705
  untracked(() => {
7685
7706
  const validation = this.resolvedValidation();
7686
7707
  try {
@@ -7692,6 +7713,19 @@ class SectionFormComponent extends ConfigComponent {
7692
7713
  }
7693
7714
  });
7694
7715
  };
7716
+ /**
7717
+ * Empties the form back to `data` — what a caller wants after a successful
7718
+ * submit. The model has to be written first: the FieldTree writes the User's
7719
+ * keystrokes into `model`, and `linkedSignal` only recomputes when `data` or
7720
+ * the key list changes, so stamping a new tree over an untouched model would
7721
+ * hand back the very values that were just submitted.
7722
+ */
7723
+ reset = () => {
7724
+ untracked(() => {
7725
+ this.model.set(toModelValues(this.data(), this.modelKeys()));
7726
+ });
7727
+ this.rebuild();
7728
+ };
7695
7729
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SectionFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7696
7730
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.9", type: SectionFormComponent, isStandalone: true, selector: "m-section-form, m-one-section-form", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, maxWidth: { classPropertyName: "maxWidth", publicName: "maxWidth", isSignal: true, isRequired: false, transformFunction: null }, heightMode: { classPropertyName: "heightMode", publicName: "heightMode", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, autofocus: { classPropertyName: "autofocus", publicName: "autofocus", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, validation: { classPropertyName: "validation", publicName: "validation", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, fieldConfigs: { classPropertyName: "fieldConfigs", publicName: "fieldConfigs", isSignal: true, isRequired: false, transformFunction: null }, fieldRenderIds: { classPropertyName: "fieldRenderIds", publicName: "fieldRenderIds", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dataChange: "dataChange", submitted: "submitted", formInitialized: "formInitialized" }, host: { properties: { "class.is-full-height": "isFullHeight()", "class.has-max-height": "!!cssMaxHeight()", "class.no-border": "resolvedVariant() === \"noBorder\"", "class.is-with-border": "resolvedVariant() === \"withBorder\"", "class.is-sandwich-border": "resolvedVariant() === \"sandwichBorder\"", "class.align-left": "resolvedAlign() === \"left\"", "class.align-right": "resolvedAlign() === \"right\"", "class.align-center": "resolvedAlign() === \"center\"", "style.font-size": "sizeLength()", "style.--input-size": "sizeLength()", "style.--m-section-align": "resolvedAlign()", "style.--m-section-max-width": "resolvedMaxWidth()", "style.--m-section-max-height": "cssMaxHeight()", "style.min-height": "resolvedMinHeight()", "style.min-width": "resolvedMinWidth()", "style.max-height": "resolvedMaxHeight()", "style.max-width": "resolvedMaxWidth()" }, classAttribute: "m-section-form" }, providers: [
7697
7731
  provideSizeContext(SectionFormComponent),
@@ -17454,7 +17488,7 @@ class ColComponent extends ConfigComponent {
17454
17488
  sectionContext = inject(SECTION_CONTEXT, { optional: true });
17455
17489
  noBorder = computed(() => this.sectionContext?.variant() === 'noBorder', ...(ngDevMode ? [{ debugName: "noBorder" }] : /* istanbul ignore next */ []));
17456
17490
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ColComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
17457
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.9", type: ColComponent, isStandalone: true, selector: "m-col", inputs: { xs: { classPropertyName: "xs", publicName: "xs", isSignal: true, isRequired: false, transformFunction: null }, sm: { classPropertyName: "sm", publicName: "sm", isSignal: true, isRequired: false, transformFunction: null }, md: { classPropertyName: "md", publicName: "md", isSignal: true, isRequired: false, transformFunction: null }, lg: { classPropertyName: "lg", publicName: "lg", isSignal: true, isRequired: false, transformFunction: null }, xl: { classPropertyName: "xl", publicName: "xl", isSignal: true, isRequired: false, transformFunction: null }, xxl: { classPropertyName: "xxl", publicName: "xxl", isSignal: true, isRequired: false, transformFunction: null }, fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: true, isRequired: false, transformFunction: null }, fullHeight: { classPropertyName: "fullHeight", publicName: "fullHeight", isSignal: true, isRequired: false, transformFunction: null }, padding: { classPropertyName: "padding", publicName: "padding", isSignal: true, isRequired: false, transformFunction: null }, paddingX: { classPropertyName: "paddingX", publicName: "paddingX", isSignal: true, isRequired: false, transformFunction: null }, paddingY: { classPropertyName: "paddingY", publicName: "paddingY", isSignal: true, isRequired: false, transformFunction: null }, alignX: { classPropertyName: "alignX", publicName: "alignX", isSignal: true, isRequired: false, transformFunction: null }, alignY: { classPropertyName: "alignY", publicName: "alignY", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "class.is-full-height": "resolvedFullHeight()" }, classAttribute: "m-col" }, usesInheritance: true, ngImport: i0, template: '<ng-content />', isInline: true, styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:block;grid-column:span 12;box-sizing:border-box;width:100%;min-height:5em}:host(.is-full-height){height:100%}:host.has-padding-x{padding-inline:var(--col-px, var(--section-px, var(--_section-px, 1rem)))}:host.has-padding-y{padding-block:var(--col-py, var(--section-pt, var(--_section-pt, 1.5rem)))}:host(:not(:last-child)){border-right:1px solid var(--m-backdrop-border)}@container mag-grid (max-width: 575.98px){:host(:not(:last-child)){border-right:none;border-bottom:1px solid var(--m-backdrop-border)}}:host(.no-border){border-right:none}@container mag-grid (max-width: 575.98px){:host(.no-border){border-bottom:none}}:host.full-width{grid-column:span 12!important;width:calc(100% + 2 * var(--section-px, var(--_section-px, 1rem)));margin-inline:calc(-1 * var(--section-px, var(--_section-px, 1rem)))}:host.col-xs-1{grid-column:span 1;width:calc(100% * 1 / 12)}:host.col-xs-2{grid-column:span 2;width:calc(100% * 2 / 12)}:host.col-xs-3{grid-column:span 3;width:25%}:host.col-xs-4{grid-column:span 4;width:calc(100% * 4 / 12)}:host.col-xs-5{grid-column:span 5;width:calc(100% * 5 / 12)}:host.col-xs-6{grid-column:span 6;width:50%}:host.col-xs-7{grid-column:span 7;width:calc(100% * 7 / 12)}:host.col-xs-8{grid-column:span 8;width:calc(100% * 8 / 12)}:host.col-xs-9{grid-column:span 9;width:75%}:host.col-xs-10{grid-column:span 10;width:calc(100% * 10 / 12)}:host.col-xs-11{grid-column:span 11;width:calc(100% * 11 / 12)}:host.col-xs-12{grid-column:span 12;width:100%}@container mag-grid (min-width: 576px){:host.col-sm-1{grid-column:span 1;width:calc(100% * 1 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-2{grid-column:span 2;width:calc(100% * 2 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-3{grid-column:span 3;width:25%}}@container mag-grid (min-width: 576px){:host.col-sm-4{grid-column:span 4;width:calc(100% * 4 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-5{grid-column:span 5;width:calc(100% * 5 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-6{grid-column:span 6;width:50%}}@container mag-grid (min-width: 576px){:host.col-sm-7{grid-column:span 7;width:calc(100% * 7 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-8{grid-column:span 8;width:calc(100% * 8 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-9{grid-column:span 9;width:75%}}@container mag-grid (min-width: 576px){:host.col-sm-10{grid-column:span 10;width:calc(100% * 10 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-11{grid-column:span 11;width:calc(100% * 11 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-12{grid-column:span 12;width:100%}}@container mag-grid (min-width: 768px){:host.col-md-1{grid-column:span 1;width:calc(100% * 1 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-2{grid-column:span 2;width:calc(100% * 2 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-3{grid-column:span 3;width:25%}}@container mag-grid (min-width: 768px){:host.col-md-4{grid-column:span 4;width:calc(100% * 4 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-5{grid-column:span 5;width:calc(100% * 5 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-6{grid-column:span 6;width:50%}}@container mag-grid (min-width: 768px){:host.col-md-7{grid-column:span 7;width:calc(100% * 7 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-8{grid-column:span 8;width:calc(100% * 8 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-9{grid-column:span 9;width:75%}}@container mag-grid (min-width: 768px){:host.col-md-10{grid-column:span 10;width:calc(100% * 10 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-11{grid-column:span 11;width:calc(100% * 11 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-12{grid-column:span 12;width:100%}}@container mag-grid (min-width: 992px){:host.col-lg-1{grid-column:span 1;width:calc(100% * 1 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-2{grid-column:span 2;width:calc(100% * 2 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-3{grid-column:span 3;width:25%}}@container mag-grid (min-width: 992px){:host.col-lg-4{grid-column:span 4;width:calc(100% * 4 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-5{grid-column:span 5;width:calc(100% * 5 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-6{grid-column:span 6;width:50%}}@container mag-grid (min-width: 992px){:host.col-lg-7{grid-column:span 7;width:calc(100% * 7 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-8{grid-column:span 8;width:calc(100% * 8 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-9{grid-column:span 9;width:75%}}@container mag-grid (min-width: 992px){:host.col-lg-10{grid-column:span 10;width:calc(100% * 10 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-11{grid-column:span 11;width:calc(100% * 11 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-12{grid-column:span 12;width:100%}}@container mag-grid (min-width: 1200px){:host.col-xl-1{grid-column:span 1;width:calc(100% * 1 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-2{grid-column:span 2;width:calc(100% * 2 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-3{grid-column:span 3;width:25%}}@container mag-grid (min-width: 1200px){:host.col-xl-4{grid-column:span 4;width:calc(100% * 4 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-5{grid-column:span 5;width:calc(100% * 5 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-6{grid-column:span 6;width:50%}}@container mag-grid (min-width: 1200px){:host.col-xl-7{grid-column:span 7;width:calc(100% * 7 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-8{grid-column:span 8;width:calc(100% * 8 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-9{grid-column:span 9;width:75%}}@container mag-grid (min-width: 1200px){:host.col-xl-10{grid-column:span 10;width:calc(100% * 10 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-11{grid-column:span 11;width:calc(100% * 11 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-12{grid-column:span 12;width:100%}}@container mag-grid (min-width: 1400px){:host.col-xxl-1{grid-column:span 1;width:calc(100% * 1 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-2{grid-column:span 2;width:calc(100% * 2 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-3{grid-column:span 3;width:25%}}@container mag-grid (min-width: 1400px){:host.col-xxl-4{grid-column:span 4;width:calc(100% * 4 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-5{grid-column:span 5;width:calc(100% * 5 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-6{grid-column:span 6;width:50%}}@container mag-grid (min-width: 1400px){:host.col-xxl-7{grid-column:span 7;width:calc(100% * 7 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-8{grid-column:span 8;width:calc(100% * 8 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-9{grid-column:span 9;width:75%}}@container mag-grid (min-width: 1400px){:host.col-xxl-10{grid-column:span 10;width:calc(100% * 10 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-11{grid-column:span 11;width:calc(100% * 11 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-12{grid-column:span 12;width:100%}}:host.align-x-left,:host.align-x-center,:host.align-x-right,:host.align-y-top,:host.align-y-center,:host.align-y-bottom{display:flex;flex-direction:column}:host.align-x-left{align-items:flex-start}:host.align-x-center{align-items:center}:host.align-x-right{align-items:flex-end}:host.align-y-top{justify-content:flex-start}:host.align-y-center{justify-content:center}:host.align-y-bottom{justify-content:flex-end}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
17491
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.9", type: ColComponent, isStandalone: true, selector: "m-col", inputs: { xs: { classPropertyName: "xs", publicName: "xs", isSignal: true, isRequired: false, transformFunction: null }, sm: { classPropertyName: "sm", publicName: "sm", isSignal: true, isRequired: false, transformFunction: null }, md: { classPropertyName: "md", publicName: "md", isSignal: true, isRequired: false, transformFunction: null }, lg: { classPropertyName: "lg", publicName: "lg", isSignal: true, isRequired: false, transformFunction: null }, xl: { classPropertyName: "xl", publicName: "xl", isSignal: true, isRequired: false, transformFunction: null }, xxl: { classPropertyName: "xxl", publicName: "xxl", isSignal: true, isRequired: false, transformFunction: null }, fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: true, isRequired: false, transformFunction: null }, fullHeight: { classPropertyName: "fullHeight", publicName: "fullHeight", isSignal: true, isRequired: false, transformFunction: null }, padding: { classPropertyName: "padding", publicName: "padding", isSignal: true, isRequired: false, transformFunction: null }, paddingX: { classPropertyName: "paddingX", publicName: "paddingX", isSignal: true, isRequired: false, transformFunction: null }, paddingY: { classPropertyName: "paddingY", publicName: "paddingY", isSignal: true, isRequired: false, transformFunction: null }, alignX: { classPropertyName: "alignX", publicName: "alignX", isSignal: true, isRequired: false, transformFunction: null }, alignY: { classPropertyName: "alignY", publicName: "alignY", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "class.is-full-height": "resolvedFullHeight()" }, classAttribute: "m-col" }, usesInheritance: true, ngImport: i0, template: '<ng-content />', isInline: true, styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:block;grid-column:span 12;box-sizing:border-box;width:100%}:host(.is-full-height){height:100%}:host.has-padding-x{padding-inline:var(--col-px, var(--section-px, var(--_section-px, 1rem)))}:host.has-padding-y{padding-block:var(--col-py, var(--section-pt, var(--_section-pt, 1.5rem)))}:host(:not(:last-child)){border-right:1px solid var(--m-backdrop-border)}@container mag-grid (max-width: 575.98px){:host(:not(:last-child)){border-right:none;border-bottom:1px solid var(--m-backdrop-border)}}:host(.no-border){border-right:none}@container mag-grid (max-width: 575.98px){:host(.no-border){border-bottom:none}}:host.full-width{grid-column:span 12!important;width:calc(100% + 2 * var(--section-px, var(--_section-px, 1rem)));margin-inline:calc(-1 * var(--section-px, var(--_section-px, 1rem)))}:host.col-xs-1{grid-column:span 1;width:calc(100% * 1 / 12)}:host.col-xs-2{grid-column:span 2;width:calc(100% * 2 / 12)}:host.col-xs-3{grid-column:span 3;width:25%}:host.col-xs-4{grid-column:span 4;width:calc(100% * 4 / 12)}:host.col-xs-5{grid-column:span 5;width:calc(100% * 5 / 12)}:host.col-xs-6{grid-column:span 6;width:50%}:host.col-xs-7{grid-column:span 7;width:calc(100% * 7 / 12)}:host.col-xs-8{grid-column:span 8;width:calc(100% * 8 / 12)}:host.col-xs-9{grid-column:span 9;width:75%}:host.col-xs-10{grid-column:span 10;width:calc(100% * 10 / 12)}:host.col-xs-11{grid-column:span 11;width:calc(100% * 11 / 12)}:host.col-xs-12{grid-column:span 12;width:100%}@container mag-grid (min-width: 576px){:host.col-sm-1{grid-column:span 1;width:calc(100% * 1 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-2{grid-column:span 2;width:calc(100% * 2 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-3{grid-column:span 3;width:25%}}@container mag-grid (min-width: 576px){:host.col-sm-4{grid-column:span 4;width:calc(100% * 4 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-5{grid-column:span 5;width:calc(100% * 5 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-6{grid-column:span 6;width:50%}}@container mag-grid (min-width: 576px){:host.col-sm-7{grid-column:span 7;width:calc(100% * 7 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-8{grid-column:span 8;width:calc(100% * 8 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-9{grid-column:span 9;width:75%}}@container mag-grid (min-width: 576px){:host.col-sm-10{grid-column:span 10;width:calc(100% * 10 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-11{grid-column:span 11;width:calc(100% * 11 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-12{grid-column:span 12;width:100%}}@container mag-grid (min-width: 768px){:host.col-md-1{grid-column:span 1;width:calc(100% * 1 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-2{grid-column:span 2;width:calc(100% * 2 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-3{grid-column:span 3;width:25%}}@container mag-grid (min-width: 768px){:host.col-md-4{grid-column:span 4;width:calc(100% * 4 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-5{grid-column:span 5;width:calc(100% * 5 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-6{grid-column:span 6;width:50%}}@container mag-grid (min-width: 768px){:host.col-md-7{grid-column:span 7;width:calc(100% * 7 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-8{grid-column:span 8;width:calc(100% * 8 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-9{grid-column:span 9;width:75%}}@container mag-grid (min-width: 768px){:host.col-md-10{grid-column:span 10;width:calc(100% * 10 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-11{grid-column:span 11;width:calc(100% * 11 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-12{grid-column:span 12;width:100%}}@container mag-grid (min-width: 992px){:host.col-lg-1{grid-column:span 1;width:calc(100% * 1 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-2{grid-column:span 2;width:calc(100% * 2 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-3{grid-column:span 3;width:25%}}@container mag-grid (min-width: 992px){:host.col-lg-4{grid-column:span 4;width:calc(100% * 4 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-5{grid-column:span 5;width:calc(100% * 5 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-6{grid-column:span 6;width:50%}}@container mag-grid (min-width: 992px){:host.col-lg-7{grid-column:span 7;width:calc(100% * 7 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-8{grid-column:span 8;width:calc(100% * 8 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-9{grid-column:span 9;width:75%}}@container mag-grid (min-width: 992px){:host.col-lg-10{grid-column:span 10;width:calc(100% * 10 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-11{grid-column:span 11;width:calc(100% * 11 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-12{grid-column:span 12;width:100%}}@container mag-grid (min-width: 1200px){:host.col-xl-1{grid-column:span 1;width:calc(100% * 1 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-2{grid-column:span 2;width:calc(100% * 2 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-3{grid-column:span 3;width:25%}}@container mag-grid (min-width: 1200px){:host.col-xl-4{grid-column:span 4;width:calc(100% * 4 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-5{grid-column:span 5;width:calc(100% * 5 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-6{grid-column:span 6;width:50%}}@container mag-grid (min-width: 1200px){:host.col-xl-7{grid-column:span 7;width:calc(100% * 7 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-8{grid-column:span 8;width:calc(100% * 8 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-9{grid-column:span 9;width:75%}}@container mag-grid (min-width: 1200px){:host.col-xl-10{grid-column:span 10;width:calc(100% * 10 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-11{grid-column:span 11;width:calc(100% * 11 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-12{grid-column:span 12;width:100%}}@container mag-grid (min-width: 1400px){:host.col-xxl-1{grid-column:span 1;width:calc(100% * 1 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-2{grid-column:span 2;width:calc(100% * 2 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-3{grid-column:span 3;width:25%}}@container mag-grid (min-width: 1400px){:host.col-xxl-4{grid-column:span 4;width:calc(100% * 4 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-5{grid-column:span 5;width:calc(100% * 5 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-6{grid-column:span 6;width:50%}}@container mag-grid (min-width: 1400px){:host.col-xxl-7{grid-column:span 7;width:calc(100% * 7 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-8{grid-column:span 8;width:calc(100% * 8 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-9{grid-column:span 9;width:75%}}@container mag-grid (min-width: 1400px){:host.col-xxl-10{grid-column:span 10;width:calc(100% * 10 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-11{grid-column:span 11;width:calc(100% * 11 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-12{grid-column:span 12;width:100%}}:host.align-x-left,:host.align-x-center,:host.align-x-right,:host.align-y-top,:host.align-y-center,:host.align-y-bottom{display:flex;flex-direction:column}:host.align-x-left{align-items:flex-start}:host.align-x-center{align-items:center}:host.align-x-right{align-items:flex-end}:host.align-y-top{justify-content:flex-start}:host.align-y-center{justify-content:center}:host.align-y-bottom{justify-content:flex-end}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
17458
17492
  }
17459
17493
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ColComponent, decorators: [{
17460
17494
  type: Component,
@@ -17462,7 +17496,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
17462
17496
  class: 'm-col',
17463
17497
  '[class]': 'classes()',
17464
17498
  '[class.is-full-height]': 'resolvedFullHeight()',
17465
- }, styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:block;grid-column:span 12;box-sizing:border-box;width:100%;min-height:5em}:host(.is-full-height){height:100%}:host.has-padding-x{padding-inline:var(--col-px, var(--section-px, var(--_section-px, 1rem)))}:host.has-padding-y{padding-block:var(--col-py, var(--section-pt, var(--_section-pt, 1.5rem)))}:host(:not(:last-child)){border-right:1px solid var(--m-backdrop-border)}@container mag-grid (max-width: 575.98px){:host(:not(:last-child)){border-right:none;border-bottom:1px solid var(--m-backdrop-border)}}:host(.no-border){border-right:none}@container mag-grid (max-width: 575.98px){:host(.no-border){border-bottom:none}}:host.full-width{grid-column:span 12!important;width:calc(100% + 2 * var(--section-px, var(--_section-px, 1rem)));margin-inline:calc(-1 * var(--section-px, var(--_section-px, 1rem)))}:host.col-xs-1{grid-column:span 1;width:calc(100% * 1 / 12)}:host.col-xs-2{grid-column:span 2;width:calc(100% * 2 / 12)}:host.col-xs-3{grid-column:span 3;width:25%}:host.col-xs-4{grid-column:span 4;width:calc(100% * 4 / 12)}:host.col-xs-5{grid-column:span 5;width:calc(100% * 5 / 12)}:host.col-xs-6{grid-column:span 6;width:50%}:host.col-xs-7{grid-column:span 7;width:calc(100% * 7 / 12)}:host.col-xs-8{grid-column:span 8;width:calc(100% * 8 / 12)}:host.col-xs-9{grid-column:span 9;width:75%}:host.col-xs-10{grid-column:span 10;width:calc(100% * 10 / 12)}:host.col-xs-11{grid-column:span 11;width:calc(100% * 11 / 12)}:host.col-xs-12{grid-column:span 12;width:100%}@container mag-grid (min-width: 576px){:host.col-sm-1{grid-column:span 1;width:calc(100% * 1 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-2{grid-column:span 2;width:calc(100% * 2 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-3{grid-column:span 3;width:25%}}@container mag-grid (min-width: 576px){:host.col-sm-4{grid-column:span 4;width:calc(100% * 4 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-5{grid-column:span 5;width:calc(100% * 5 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-6{grid-column:span 6;width:50%}}@container mag-grid (min-width: 576px){:host.col-sm-7{grid-column:span 7;width:calc(100% * 7 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-8{grid-column:span 8;width:calc(100% * 8 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-9{grid-column:span 9;width:75%}}@container mag-grid (min-width: 576px){:host.col-sm-10{grid-column:span 10;width:calc(100% * 10 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-11{grid-column:span 11;width:calc(100% * 11 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-12{grid-column:span 12;width:100%}}@container mag-grid (min-width: 768px){:host.col-md-1{grid-column:span 1;width:calc(100% * 1 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-2{grid-column:span 2;width:calc(100% * 2 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-3{grid-column:span 3;width:25%}}@container mag-grid (min-width: 768px){:host.col-md-4{grid-column:span 4;width:calc(100% * 4 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-5{grid-column:span 5;width:calc(100% * 5 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-6{grid-column:span 6;width:50%}}@container mag-grid (min-width: 768px){:host.col-md-7{grid-column:span 7;width:calc(100% * 7 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-8{grid-column:span 8;width:calc(100% * 8 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-9{grid-column:span 9;width:75%}}@container mag-grid (min-width: 768px){:host.col-md-10{grid-column:span 10;width:calc(100% * 10 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-11{grid-column:span 11;width:calc(100% * 11 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-12{grid-column:span 12;width:100%}}@container mag-grid (min-width: 992px){:host.col-lg-1{grid-column:span 1;width:calc(100% * 1 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-2{grid-column:span 2;width:calc(100% * 2 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-3{grid-column:span 3;width:25%}}@container mag-grid (min-width: 992px){:host.col-lg-4{grid-column:span 4;width:calc(100% * 4 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-5{grid-column:span 5;width:calc(100% * 5 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-6{grid-column:span 6;width:50%}}@container mag-grid (min-width: 992px){:host.col-lg-7{grid-column:span 7;width:calc(100% * 7 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-8{grid-column:span 8;width:calc(100% * 8 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-9{grid-column:span 9;width:75%}}@container mag-grid (min-width: 992px){:host.col-lg-10{grid-column:span 10;width:calc(100% * 10 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-11{grid-column:span 11;width:calc(100% * 11 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-12{grid-column:span 12;width:100%}}@container mag-grid (min-width: 1200px){:host.col-xl-1{grid-column:span 1;width:calc(100% * 1 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-2{grid-column:span 2;width:calc(100% * 2 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-3{grid-column:span 3;width:25%}}@container mag-grid (min-width: 1200px){:host.col-xl-4{grid-column:span 4;width:calc(100% * 4 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-5{grid-column:span 5;width:calc(100% * 5 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-6{grid-column:span 6;width:50%}}@container mag-grid (min-width: 1200px){:host.col-xl-7{grid-column:span 7;width:calc(100% * 7 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-8{grid-column:span 8;width:calc(100% * 8 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-9{grid-column:span 9;width:75%}}@container mag-grid (min-width: 1200px){:host.col-xl-10{grid-column:span 10;width:calc(100% * 10 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-11{grid-column:span 11;width:calc(100% * 11 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-12{grid-column:span 12;width:100%}}@container mag-grid (min-width: 1400px){:host.col-xxl-1{grid-column:span 1;width:calc(100% * 1 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-2{grid-column:span 2;width:calc(100% * 2 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-3{grid-column:span 3;width:25%}}@container mag-grid (min-width: 1400px){:host.col-xxl-4{grid-column:span 4;width:calc(100% * 4 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-5{grid-column:span 5;width:calc(100% * 5 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-6{grid-column:span 6;width:50%}}@container mag-grid (min-width: 1400px){:host.col-xxl-7{grid-column:span 7;width:calc(100% * 7 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-8{grid-column:span 8;width:calc(100% * 8 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-9{grid-column:span 9;width:75%}}@container mag-grid (min-width: 1400px){:host.col-xxl-10{grid-column:span 10;width:calc(100% * 10 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-11{grid-column:span 11;width:calc(100% * 11 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-12{grid-column:span 12;width:100%}}:host.align-x-left,:host.align-x-center,:host.align-x-right,:host.align-y-top,:host.align-y-center,:host.align-y-bottom{display:flex;flex-direction:column}:host.align-x-left{align-items:flex-start}:host.align-x-center{align-items:center}:host.align-x-right{align-items:flex-end}:host.align-y-top{justify-content:flex-start}:host.align-y-center{justify-content:center}:host.align-y-bottom{justify-content:flex-end}\n"] }]
17499
+ }, styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:block;grid-column:span 12;box-sizing:border-box;width:100%}:host(.is-full-height){height:100%}:host.has-padding-x{padding-inline:var(--col-px, var(--section-px, var(--_section-px, 1rem)))}:host.has-padding-y{padding-block:var(--col-py, var(--section-pt, var(--_section-pt, 1.5rem)))}:host(:not(:last-child)){border-right:1px solid var(--m-backdrop-border)}@container mag-grid (max-width: 575.98px){:host(:not(:last-child)){border-right:none;border-bottom:1px solid var(--m-backdrop-border)}}:host(.no-border){border-right:none}@container mag-grid (max-width: 575.98px){:host(.no-border){border-bottom:none}}:host.full-width{grid-column:span 12!important;width:calc(100% + 2 * var(--section-px, var(--_section-px, 1rem)));margin-inline:calc(-1 * var(--section-px, var(--_section-px, 1rem)))}:host.col-xs-1{grid-column:span 1;width:calc(100% * 1 / 12)}:host.col-xs-2{grid-column:span 2;width:calc(100% * 2 / 12)}:host.col-xs-3{grid-column:span 3;width:25%}:host.col-xs-4{grid-column:span 4;width:calc(100% * 4 / 12)}:host.col-xs-5{grid-column:span 5;width:calc(100% * 5 / 12)}:host.col-xs-6{grid-column:span 6;width:50%}:host.col-xs-7{grid-column:span 7;width:calc(100% * 7 / 12)}:host.col-xs-8{grid-column:span 8;width:calc(100% * 8 / 12)}:host.col-xs-9{grid-column:span 9;width:75%}:host.col-xs-10{grid-column:span 10;width:calc(100% * 10 / 12)}:host.col-xs-11{grid-column:span 11;width:calc(100% * 11 / 12)}:host.col-xs-12{grid-column:span 12;width:100%}@container mag-grid (min-width: 576px){:host.col-sm-1{grid-column:span 1;width:calc(100% * 1 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-2{grid-column:span 2;width:calc(100% * 2 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-3{grid-column:span 3;width:25%}}@container mag-grid (min-width: 576px){:host.col-sm-4{grid-column:span 4;width:calc(100% * 4 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-5{grid-column:span 5;width:calc(100% * 5 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-6{grid-column:span 6;width:50%}}@container mag-grid (min-width: 576px){:host.col-sm-7{grid-column:span 7;width:calc(100% * 7 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-8{grid-column:span 8;width:calc(100% * 8 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-9{grid-column:span 9;width:75%}}@container mag-grid (min-width: 576px){:host.col-sm-10{grid-column:span 10;width:calc(100% * 10 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-11{grid-column:span 11;width:calc(100% * 11 / 12)}}@container mag-grid (min-width: 576px){:host.col-sm-12{grid-column:span 12;width:100%}}@container mag-grid (min-width: 768px){:host.col-md-1{grid-column:span 1;width:calc(100% * 1 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-2{grid-column:span 2;width:calc(100% * 2 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-3{grid-column:span 3;width:25%}}@container mag-grid (min-width: 768px){:host.col-md-4{grid-column:span 4;width:calc(100% * 4 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-5{grid-column:span 5;width:calc(100% * 5 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-6{grid-column:span 6;width:50%}}@container mag-grid (min-width: 768px){:host.col-md-7{grid-column:span 7;width:calc(100% * 7 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-8{grid-column:span 8;width:calc(100% * 8 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-9{grid-column:span 9;width:75%}}@container mag-grid (min-width: 768px){:host.col-md-10{grid-column:span 10;width:calc(100% * 10 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-11{grid-column:span 11;width:calc(100% * 11 / 12)}}@container mag-grid (min-width: 768px){:host.col-md-12{grid-column:span 12;width:100%}}@container mag-grid (min-width: 992px){:host.col-lg-1{grid-column:span 1;width:calc(100% * 1 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-2{grid-column:span 2;width:calc(100% * 2 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-3{grid-column:span 3;width:25%}}@container mag-grid (min-width: 992px){:host.col-lg-4{grid-column:span 4;width:calc(100% * 4 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-5{grid-column:span 5;width:calc(100% * 5 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-6{grid-column:span 6;width:50%}}@container mag-grid (min-width: 992px){:host.col-lg-7{grid-column:span 7;width:calc(100% * 7 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-8{grid-column:span 8;width:calc(100% * 8 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-9{grid-column:span 9;width:75%}}@container mag-grid (min-width: 992px){:host.col-lg-10{grid-column:span 10;width:calc(100% * 10 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-11{grid-column:span 11;width:calc(100% * 11 / 12)}}@container mag-grid (min-width: 992px){:host.col-lg-12{grid-column:span 12;width:100%}}@container mag-grid (min-width: 1200px){:host.col-xl-1{grid-column:span 1;width:calc(100% * 1 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-2{grid-column:span 2;width:calc(100% * 2 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-3{grid-column:span 3;width:25%}}@container mag-grid (min-width: 1200px){:host.col-xl-4{grid-column:span 4;width:calc(100% * 4 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-5{grid-column:span 5;width:calc(100% * 5 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-6{grid-column:span 6;width:50%}}@container mag-grid (min-width: 1200px){:host.col-xl-7{grid-column:span 7;width:calc(100% * 7 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-8{grid-column:span 8;width:calc(100% * 8 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-9{grid-column:span 9;width:75%}}@container mag-grid (min-width: 1200px){:host.col-xl-10{grid-column:span 10;width:calc(100% * 10 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-11{grid-column:span 11;width:calc(100% * 11 / 12)}}@container mag-grid (min-width: 1200px){:host.col-xl-12{grid-column:span 12;width:100%}}@container mag-grid (min-width: 1400px){:host.col-xxl-1{grid-column:span 1;width:calc(100% * 1 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-2{grid-column:span 2;width:calc(100% * 2 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-3{grid-column:span 3;width:25%}}@container mag-grid (min-width: 1400px){:host.col-xxl-4{grid-column:span 4;width:calc(100% * 4 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-5{grid-column:span 5;width:calc(100% * 5 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-6{grid-column:span 6;width:50%}}@container mag-grid (min-width: 1400px){:host.col-xxl-7{grid-column:span 7;width:calc(100% * 7 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-8{grid-column:span 8;width:calc(100% * 8 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-9{grid-column:span 9;width:75%}}@container mag-grid (min-width: 1400px){:host.col-xxl-10{grid-column:span 10;width:calc(100% * 10 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-11{grid-column:span 11;width:calc(100% * 11 / 12)}}@container mag-grid (min-width: 1400px){:host.col-xxl-12{grid-column:span 12;width:100%}}:host.align-x-left,:host.align-x-center,:host.align-x-right,:host.align-y-top,:host.align-y-center,:host.align-y-bottom{display:flex;flex-direction:column}:host.align-x-left{align-items:flex-start}:host.align-x-center{align-items:center}:host.align-x-right{align-items:flex-end}:host.align-y-top{justify-content:flex-start}:host.align-y-center{justify-content:center}:host.align-y-bottom{justify-content:flex-end}\n"] }]
17466
17500
  }], propDecorators: { xs: [{ type: i0.Input, args: [{ isSignal: true, alias: "xs", required: false }] }], sm: [{ type: i0.Input, args: [{ isSignal: true, alias: "sm", required: false }] }], md: [{ type: i0.Input, args: [{ isSignal: true, alias: "md", required: false }] }], lg: [{ type: i0.Input, args: [{ isSignal: true, alias: "lg", required: false }] }], xl: [{ type: i0.Input, args: [{ isSignal: true, alias: "xl", required: false }] }], xxl: [{ type: i0.Input, args: [{ isSignal: true, alias: "xxl", required: false }] }], fullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullWidth", required: false }] }], fullHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullHeight", required: false }] }], padding: [{ type: i0.Input, args: [{ isSignal: true, alias: "padding", required: false }] }], paddingX: [{ type: i0.Input, args: [{ isSignal: true, alias: "paddingX", required: false }] }], paddingY: [{ type: i0.Input, args: [{ isSignal: true, alias: "paddingY", required: false }] }], alignX: [{ type: i0.Input, args: [{ isSignal: true, alias: "alignX", required: false }] }], alignY: [{ type: i0.Input, args: [{ isSignal: true, alias: "alignY", required: false }] }] } });
17467
17501
 
17468
17502
  class SectionCardComponent extends ColComponent {
@@ -20578,7 +20612,7 @@ class WrapperInputComponent extends ConfigComponent {
20578
20612
  break;
20579
20613
  }
20580
20614
  case InputType.TOGGLE: {
20581
- const { ToggleInputComponent } = await import('./magmonium-one-toggle-CCaLEJ8V.mjs');
20615
+ const { ToggleInputComponent } = await import('./magmonium-one-toggle-C9uEm1Pl.mjs');
20582
20616
  this.createDynamicComponent(seq, ToggleInputComponent, [], true);
20583
20617
  break;
20584
20618
  }
@@ -20590,12 +20624,12 @@ class WrapperInputComponent extends ConfigComponent {
20590
20624
  break;
20591
20625
  }
20592
20626
  case InputType.PASSWORD: {
20593
- const { PasswordInputComponent } = await import('./magmonium-one-password-x0jlYhku.mjs');
20627
+ const { PasswordInputComponent } = await import('./magmonium-one-password-qf4uRPEA.mjs');
20594
20628
  this.createDynamicComponent(seq, PasswordInputComponent);
20595
20629
  break;
20596
20630
  }
20597
20631
  case InputType.OTP: {
20598
- const { OtpInputComponent } = await import('./magmonium-one-otp-DCDSkq9D.mjs');
20632
+ const { OtpInputComponent } = await import('./magmonium-one-otp-yTGhORgD.mjs');
20599
20633
  this.createDynamicComponent(seq, OtpInputComponent);
20600
20634
  break;
20601
20635
  }
@@ -22349,32 +22383,18 @@ class FormGroupComponent extends ConfigComponent {
22349
22383
  }),
22350
22384
  computation: ({ data, inputs }, previous) => {
22351
22385
  const dataChanged = !previous || previous.source.data !== data;
22352
- const values = {};
22386
+ // Booleans stay booleans. Stringifying them cost `false` its identity —
22387
+ // it became '', which reads as "unset" to every consumer that filters
22388
+ // empty values, so a toggle turned off could not survive a round trip
22389
+ // and could never override a config's `true` (ADR 0010).
22390
+ const values = toModelValues(data, inputs);
22391
+ if (dataChanged || !previous)
22392
+ return values;
22393
+ // An input already in the model keeps what the User typed — a field
22394
+ // announcing its key late must not wipe the form.
22353
22395
  inputs?.forEach((input) => {
22354
- if (!dataChanged &&
22355
- previous &&
22356
- Object.prototype.hasOwnProperty.call(previous.value, input)) {
22396
+ if (Object.prototype.hasOwnProperty.call(previous.value, input)) {
22357
22397
  values[input] = previous.value[input];
22358
- return;
22359
- }
22360
- const raw = data?.[input];
22361
- if (Array.isArray(raw)) {
22362
- values[input] = raw;
22363
- }
22364
- else if (raw !== null && typeof raw === 'object') {
22365
- values[input] = raw;
22366
- }
22367
- else if (typeof raw === 'boolean') {
22368
- // Booleans stay booleans. Stringifying them cost `false` its
22369
- // identity — it became '', which reads as "unset" to every consumer
22370
- // that filters empty values, so a toggle turned off could not
22371
- // survive a round trip and could never override a config's `true`
22372
- // (ADR 0010). A toggle input models `checked` as a boolean, so this
22373
- // is also the shape it hands back.
22374
- values[input] = raw;
22375
- }
22376
- else {
22377
- values[input] = String(raw ?? '');
22378
22398
  }
22379
22399
  });
22380
22400
  return values;
@@ -22407,7 +22427,7 @@ class FormGroupComponent extends ConfigComponent {
22407
22427
  void this.modelKeys();
22408
22428
  if (!inputs)
22409
22429
  return;
22410
- untracked(() => this.reset());
22430
+ untracked(() => this.rebuild());
22411
22431
  });
22412
22432
  effect(() => {
22413
22433
  const form = this.formGroup();
@@ -22431,7 +22451,11 @@ class FormGroupComponent extends ConfigComponent {
22431
22451
  this.previousValue = value();
22432
22452
  });
22433
22453
  }
22434
- reset = () => {
22454
+ // Stamps a fresh FieldTree over the model as it stands. A FieldTree's keys
22455
+ // are fixed at create, so a key that appeared afterwards — a field reporting
22456
+ // its declared key, a `config.inputs` change — has no field behind it until
22457
+ // this runs. It does not touch the values already in the model.
22458
+ rebuild = () => {
22435
22459
  untracked(() => {
22436
22460
  const validation = this.validation();
22437
22461
  try {
@@ -22447,6 +22471,19 @@ class FormGroupComponent extends ConfigComponent {
22447
22471
  }
22448
22472
  });
22449
22473
  };
22474
+ /**
22475
+ * Empties the form back to `data` — what a caller wants after a successful
22476
+ * submit. The model has to be written first: the FieldTree writes the User's
22477
+ * keystrokes into `model`, and `linkedSignal` only recomputes when `data` or
22478
+ * the key list changes, so stamping a new tree over an untouched model would
22479
+ * hand back the very values that were just submitted.
22480
+ */
22481
+ reset = () => {
22482
+ untracked(() => {
22483
+ this.model.set(toModelValues(this.data(), this.modelKeys()));
22484
+ });
22485
+ this.rebuild();
22486
+ };
22450
22487
  handleForm(event) {
22451
22488
  event.preventDefault();
22452
22489
  event.stopPropagation();
@@ -34483,12 +34520,20 @@ function ingestItems(items) {
34483
34520
  }
34484
34521
  return { commentMap, cursorMap, orderedIds };
34485
34522
  }
34486
- const CommentsStore = signalStore({ providedIn: 'root' }, withState(initialState), withMethods((store, api = inject(CommentsApiService)) => ({
34487
- // ── Load initial comments for a source ──────────────────────────────
34488
- load: rxMethod(pipe(filter((sourceId) => !store.sourceToItemsMap().has(sourceId)), // skip if cached
34489
- tap((sourceId) => patchState(store, (s) => ({
34523
+ const CommentsStore = signalStore({ providedIn: 'root' }, withState(initialState), withMethods((store, api = inject(CommentsApiService)) => {
34524
+ // `load` and `refresh` differ only in whether a cached feed short-circuits
34525
+ // the request — never in what a response does to state, so the fetch itself
34526
+ // lives here once.
34527
+ const markLoading = (sourceId) => patchState(store, (s) => ({
34490
34528
  loadingSources: new Set([...s.loadingSources, sourceId]),
34491
- }))), switchMap$1((sourceId) => api.list(sourceId).pipe(tap(({ items, commentCount }) => {
34529
+ }));
34530
+ const clearLoading = (sourceId) => patchState(store, (s) => ({
34531
+ loadingSources: new Set([...s.loadingSources].filter((id) => id !== sourceId)),
34532
+ }));
34533
+ // Replaces the source's ordered list outright: a comment deleted on the
34534
+ // backend has to leave the feed, and merging could never remove it. Any
34535
+ // cursor the User had expanded collapses back with it.
34536
+ const fetchFeed = (sourceId) => api.list(sourceId).pipe(tap(({ items, commentCount }) => {
34492
34537
  const { commentMap, cursorMap, orderedIds } = ingestItems(items);
34493
34538
  patchState(store, (s) => ({
34494
34539
  commentMap: new Map([...s.commentMap, ...commentMap]),
@@ -34501,181 +34546,192 @@ const CommentsStore = signalStore({ providedIn: 'root' }, withState(initialState
34501
34546
  ...s.sourceToCountMap,
34502
34547
  [sourceId, commentCount],
34503
34548
  ]),
34504
- loadingSources: new Set([...s.loadingSources].filter((id) => id !== sourceId)),
34505
34549
  }));
34550
+ clearLoading(sourceId);
34506
34551
  }), catchError(() => {
34507
- patchState(store, (s) => ({
34508
- loadingSources: new Set([...s.loadingSources].filter((id) => id !== sourceId)),
34509
- }));
34552
+ clearLoading(sourceId);
34510
34553
  return EMPTY;
34511
- }))))),
34512
- // ── Expand cursor: replace token in source list with new items ───────
34513
- expandCursor: rxMethod(pipe(tap(({ token }) => patchState(store, (s) => ({
34514
- expandingCursors: new Set([...s.expandingCursors, token]),
34515
- }))), switchMap$1(({ sourceId, token }) => api.list(sourceId, token).pipe(tap(({ items: newItems, commentCount }) => {
34516
- const { commentMap, cursorMap, orderedIds: newIds, } = ingestItems(newItems);
34517
- patchState(store, (s) => {
34518
- const list = s.sourceToItemsMap.get(sourceId) ?? [];
34519
- const idx = list.indexOf(token);
34520
- const updatedList = idx === -1
34521
- ? list
34522
- : [
34523
- ...list.slice(0, idx),
34524
- ...newIds,
34525
- ...list.slice(idx + 1),
34526
- ];
34527
- // Remove expanded cursor from cursorMap
34528
- const newCursorMap = new Map(s.cursorMap);
34529
- newCursorMap.delete(token);
34530
- return {
34531
- commentMap: new Map([...s.commentMap, ...commentMap]),
34532
- cursorMap: new Map([...newCursorMap, ...cursorMap]),
34533
- sourceToItemsMap: new Map([
34534
- ...s.sourceToItemsMap,
34535
- [sourceId, updatedList],
34536
- ]),
34537
- sourceToCountMap: new Map([
34538
- ...s.sourceToCountMap,
34539
- [sourceId, commentCount],
34540
- ]),
34554
+ }));
34555
+ return {
34556
+ // ── Load initial comments for a source ──────────────────────────────
34557
+ load: rxMethod(pipe(filter((sourceId) => !store.sourceToItemsMap().has(sourceId)), // skip if cached
34558
+ tap(markLoading), switchMap$1(fetchFeed))),
34559
+ // ── Re-read a source's feed, cache or no cache ───────────────────────
34560
+ // The door for anything the backend changed behind our back: another
34561
+ // User's comment, an edit, a delete. `load` can never do this — its cache
34562
+ // guard is what makes a re-render cheap.
34563
+ refresh: rxMethod(pipe(tap(markLoading), switchMap$1(fetchFeed))),
34564
+ // ── Expand cursor: replace token in source list with new items ───────
34565
+ expandCursor: rxMethod(pipe(tap(({ token }) => patchState(store, (s) => ({
34566
+ expandingCursors: new Set([...s.expandingCursors, token]),
34567
+ }))), switchMap$1(({ sourceId, token }) => api.list(sourceId, token).pipe(tap(({ items: newItems, commentCount }) => {
34568
+ const { commentMap, cursorMap, orderedIds: newIds, } = ingestItems(newItems);
34569
+ patchState(store, (s) => {
34570
+ const list = s.sourceToItemsMap.get(sourceId) ?? [];
34571
+ const idx = list.indexOf(token);
34572
+ const updatedList = idx === -1
34573
+ ? list
34574
+ : [
34575
+ ...list.slice(0, idx),
34576
+ ...newIds,
34577
+ ...list.slice(idx + 1),
34578
+ ];
34579
+ // Remove expanded cursor from cursorMap
34580
+ const newCursorMap = new Map(s.cursorMap);
34581
+ newCursorMap.delete(token);
34582
+ return {
34583
+ commentMap: new Map([...s.commentMap, ...commentMap]),
34584
+ cursorMap: new Map([...newCursorMap, ...cursorMap]),
34585
+ sourceToItemsMap: new Map([
34586
+ ...s.sourceToItemsMap,
34587
+ [sourceId, updatedList],
34588
+ ]),
34589
+ sourceToCountMap: new Map([
34590
+ ...s.sourceToCountMap,
34591
+ [sourceId, commentCount],
34592
+ ]),
34593
+ expandingCursors: new Set([...s.expandingCursors].filter((t) => t !== token)),
34594
+ };
34595
+ });
34596
+ }), catchError(() => {
34597
+ patchState(store, (s) => ({
34541
34598
  expandingCursors: new Set([...s.expandingCursors].filter((t) => t !== token)),
34599
+ }));
34600
+ return EMPTY;
34601
+ }))))),
34602
+ // ── Post new comment ─────────────────────────────────────────────────
34603
+ create: rxMethod(pipe(tap(({ sourceId }) => patchState(store, (s) => ({
34604
+ submittingSources: new Set([...s.submittingSources, sourceId]),
34605
+ }))), switchMap$1(({ sourceId, text }) => api.create(sourceId, text).pipe(tap(({ comment }) => patchState(store, (s) => {
34606
+ const normalized = {
34607
+ ...comment,
34608
+ kind: 'comment',
34609
+ date: comment.date || new Date().toISOString(),
34542
34610
  };
34543
- });
34544
- }), catchError(() => {
34545
- patchState(store, (s) => ({
34546
- expandingCursors: new Set([...s.expandingCursors].filter((t) => t !== token)),
34547
- }));
34548
- return EMPTY;
34549
- }))))),
34550
- // ── Post new comment ─────────────────────────────────────────────────
34551
- create: rxMethod(pipe(tap(({ sourceId }) => patchState(store, (s) => ({
34552
- submittingSources: new Set([...s.submittingSources, sourceId]),
34553
- }))), switchMap$1(({ sourceId, text }) => api.create(sourceId, text).pipe(tap(({ comment }) => patchState(store, (s) => {
34554
- const normalized = {
34555
- ...comment,
34556
- kind: 'comment',
34557
- date: comment.date || new Date().toISOString(),
34558
- };
34559
- const existingList = s.sourceToItemsMap.get(sourceId);
34560
- const sourceToItemsMap = existingList !== undefined
34561
- ? new Map([
34562
- ...s.sourceToItemsMap,
34563
- [sourceId, [normalized.id, ...existingList]],
34564
- ])
34565
- : s.sourceToItemsMap;
34566
- const known = s.sourceToCountMap.get(sourceId);
34567
- return {
34568
- commentMap: new Map([
34569
- ...s.commentMap,
34570
- [normalized.id, normalized],
34571
- ]),
34572
- sourceToItemsMap,
34573
- sourceToCountMap: known === undefined
34574
- ? s.sourceToCountMap
34575
- : new Map([...s.sourceToCountMap, [sourceId, known + 1]]),
34576
- submittingSources: new Set([...s.submittingSources].filter((id) => id !== sourceId)),
34577
- };
34578
- })), catchError(() => {
34579
- patchState(store, (s) => ({
34580
- submittingSources: new Set([...s.submittingSources].filter((id) => id !== sourceId)),
34581
- }));
34582
- return EMPTY;
34583
- }))))),
34584
- // ── Delete comment (optimistic) ──────────────────────────────────────
34585
- async removeComment(sourceId, commentId) {
34586
- patchState(store, (s) => {
34587
- const list = s.sourceToItemsMap.get(sourceId) ?? [];
34588
- const newCommentMap = new Map(s.commentMap);
34589
- newCommentMap.delete(commentId);
34611
+ const existingList = s.sourceToItemsMap.get(sourceId);
34612
+ const sourceToItemsMap = existingList !== undefined
34613
+ ? new Map([
34614
+ ...s.sourceToItemsMap,
34615
+ [sourceId, [normalized.id, ...existingList]],
34616
+ ])
34617
+ : s.sourceToItemsMap;
34590
34618
  const known = s.sourceToCountMap.get(sourceId);
34591
34619
  return {
34592
- commentMap: newCommentMap,
34593
- sourceToItemsMap: new Map([
34594
- ...s.sourceToItemsMap,
34595
- [sourceId, list.filter((id) => id !== commentId)],
34620
+ commentMap: new Map([
34621
+ ...s.commentMap,
34622
+ [normalized.id, normalized],
34596
34623
  ]),
34624
+ sourceToItemsMap,
34597
34625
  sourceToCountMap: known === undefined
34598
34626
  ? s.sourceToCountMap
34599
34627
  : new Map([
34600
34628
  ...s.sourceToCountMap,
34601
- [sourceId, Math.max(0, known - 1)],
34629
+ [sourceId, known + 1],
34602
34630
  ]),
34631
+ submittingSources: new Set([...s.submittingSources].filter((id) => id !== sourceId)),
34603
34632
  };
34604
- });
34605
- try {
34606
- await firstValueFrom(api.remove(commentId));
34607
- }
34608
- catch {
34609
- // Re-fetch on failure
34610
- const { items, commentCount } = await firstValueFrom(api.list(sourceId));
34611
- const { commentMap, cursorMap, orderedIds } = ingestItems(items);
34633
+ })), catchError(() => {
34612
34634
  patchState(store, (s) => ({
34613
- commentMap: new Map([...s.commentMap, ...commentMap]),
34614
- cursorMap: new Map([...s.cursorMap, ...cursorMap]),
34615
- sourceToItemsMap: new Map([
34616
- ...s.sourceToItemsMap,
34617
- [sourceId, orderedIds],
34618
- ]),
34619
- sourceToCountMap: new Map([
34620
- ...s.sourceToCountMap,
34621
- [sourceId, commentCount],
34622
- ]),
34635
+ submittingSources: new Set([...s.submittingSources].filter((id) => id !== sourceId)),
34623
34636
  }));
34624
- }
34625
- },
34626
- async editComment(commentId, text) {
34627
- let originalComment;
34628
- patchState(store, (s) => {
34629
- const comment = s.commentMap.get(commentId);
34630
- if (comment) {
34631
- originalComment = { ...comment };
34632
- const updated = { ...comment, text };
34633
- return {
34634
- commentMap: new Map([...s.commentMap, [commentId, updated]]),
34635
- };
34636
- }
34637
- return {};
34638
- });
34639
- try {
34640
- const response = await firstValueFrom(api.update(commentId, text));
34637
+ return EMPTY;
34638
+ }))))),
34639
+ // ── Delete comment (optimistic) ──────────────────────────────────────
34640
+ async removeComment(sourceId, commentId) {
34641
34641
  patchState(store, (s) => {
34642
- const comment = response.comment;
34643
- const normalized = {
34644
- ...comment,
34645
- kind: 'comment',
34646
- date: comment.date || new Date().toISOString(),
34647
- };
34642
+ const list = s.sourceToItemsMap.get(sourceId) ?? [];
34643
+ const newCommentMap = new Map(s.commentMap);
34644
+ newCommentMap.delete(commentId);
34645
+ const known = s.sourceToCountMap.get(sourceId);
34648
34646
  return {
34649
- commentMap: new Map([...s.commentMap, [commentId, normalized]]),
34647
+ commentMap: newCommentMap,
34648
+ sourceToItemsMap: new Map([
34649
+ ...s.sourceToItemsMap,
34650
+ [sourceId, list.filter((id) => id !== commentId)],
34651
+ ]),
34652
+ sourceToCountMap: known === undefined
34653
+ ? s.sourceToCountMap
34654
+ : new Map([
34655
+ ...s.sourceToCountMap,
34656
+ [sourceId, Math.max(0, known - 1)],
34657
+ ]),
34650
34658
  };
34651
34659
  });
34652
- }
34653
- catch {
34654
- if (originalComment) {
34660
+ try {
34661
+ await firstValueFrom(api.remove(commentId));
34662
+ }
34663
+ catch {
34664
+ // Re-fetch on failure
34665
+ const { items, commentCount } = await firstValueFrom(api.list(sourceId));
34666
+ const { commentMap, cursorMap, orderedIds } = ingestItems(items);
34655
34667
  patchState(store, (s) => ({
34656
- commentMap: new Map([
34657
- ...s.commentMap,
34658
- [commentId, originalComment],
34668
+ commentMap: new Map([...s.commentMap, ...commentMap]),
34669
+ cursorMap: new Map([...s.cursorMap, ...cursorMap]),
34670
+ sourceToItemsMap: new Map([
34671
+ ...s.sourceToItemsMap,
34672
+ [sourceId, orderedIds],
34673
+ ]),
34674
+ sourceToCountMap: new Map([
34675
+ ...s.sourceToCountMap,
34676
+ [sourceId, commentCount],
34659
34677
  ]),
34660
34678
  }));
34661
34679
  }
34662
- }
34663
- },
34664
- // ── Selector helpers (called with sourceId from component) ───────────
34665
- itemsFor(sourceId) {
34666
- const ids = store.sourceToItemsMap().get(sourceId) ?? [];
34667
- const cMap = store.commentMap();
34668
- const curMap = store.cursorMap();
34669
- return ids
34670
- .map((id) => (cMap.get(id) ?? curMap.get(id)))
34671
- .filter(Boolean);
34672
- },
34673
- // undefined until the source's feed has been fetched at least once
34674
- countFor: (sourceId) => store.sourceToCountMap().get(sourceId),
34675
- isLoading: (sourceId) => store.loadingSources().has(sourceId),
34676
- isSubmitting: (sourceId) => store.submittingSources().has(sourceId),
34677
- isExpanding: (token) => store.expandingCursors().has(token),
34678
- })));
34680
+ },
34681
+ async editComment(commentId, text) {
34682
+ let originalComment;
34683
+ patchState(store, (s) => {
34684
+ const comment = s.commentMap.get(commentId);
34685
+ if (comment) {
34686
+ originalComment = { ...comment };
34687
+ const updated = { ...comment, text };
34688
+ return {
34689
+ commentMap: new Map([...s.commentMap, [commentId, updated]]),
34690
+ };
34691
+ }
34692
+ return {};
34693
+ });
34694
+ try {
34695
+ const response = await firstValueFrom(api.update(commentId, text));
34696
+ patchState(store, (s) => {
34697
+ const comment = response.comment;
34698
+ const normalized = {
34699
+ ...comment,
34700
+ kind: 'comment',
34701
+ date: comment.date || new Date().toISOString(),
34702
+ };
34703
+ return {
34704
+ commentMap: new Map([...s.commentMap, [commentId, normalized]]),
34705
+ };
34706
+ });
34707
+ }
34708
+ catch {
34709
+ if (originalComment) {
34710
+ patchState(store, (s) => ({
34711
+ commentMap: new Map([
34712
+ ...s.commentMap,
34713
+ [commentId, originalComment],
34714
+ ]),
34715
+ }));
34716
+ }
34717
+ }
34718
+ },
34719
+ // ── Selector helpers (called with sourceId from component) ───────────
34720
+ itemsFor(sourceId) {
34721
+ const ids = store.sourceToItemsMap().get(sourceId) ?? [];
34722
+ const cMap = store.commentMap();
34723
+ const curMap = store.cursorMap();
34724
+ return ids
34725
+ .map((id) => (cMap.get(id) ?? curMap.get(id)))
34726
+ .filter(Boolean);
34727
+ },
34728
+ // undefined until the source's feed has been fetched at least once
34729
+ countFor: (sourceId) => store.sourceToCountMap().get(sourceId),
34730
+ isLoading: (sourceId) => store.loadingSources().has(sourceId),
34731
+ isSubmitting: (sourceId) => store.submittingSources().has(sourceId),
34732
+ isExpanding: (token) => store.expandingCursors().has(token),
34733
+ };
34734
+ }));
34679
34735
 
34680
34736
  class CommentEditModalComponent {
34681
34737
  // --- Inputs ---
@@ -34818,6 +34874,20 @@ class CommentsComponent {
34818
34874
  items = computed(() => this.store.itemsFor(this.id()), ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
34819
34875
  loading = computed(() => this.store.isLoading(this.id()), ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
34820
34876
  submitting = computed(() => this.store.isSubmitting(this.id()), ...(ngDevMode ? [{ debugName: "submitting" }] : /* istanbul ignore next */ []));
34877
+ // The expand affordance for every cursor in the feed, keyed by token. A
34878
+ // cursor knows how many comments it hides, so the button wears that number
34879
+ // as a badge rather than making the reader spend a request to find out.
34880
+ loadMoreConfigs = computed(() => {
34881
+ const configs = new Map();
34882
+ for (const item of this.items()) {
34883
+ if (item.kind !== 'cursor')
34884
+ continue;
34885
+ configs.set(item.token, this.store.isExpanding(item.token)
34886
+ ? { icon: 'reset' }
34887
+ : { label: 'load-more-comments', badge: { count: item.count } });
34888
+ }
34889
+ return configs;
34890
+ }, ...(ngDevMode ? [{ debugName: "loadMoreConfigs" }] : /* istanbul ignore next */ []));
34821
34891
  textareaConfig = {
34822
34892
  type: InputType.TEXTAREA,
34823
34893
  name: 'comment_text',
@@ -34834,6 +34904,31 @@ class CommentsComponent {
34834
34904
  });
34835
34905
  }
34836
34906
  // --- Handlers ---
34907
+ /**
34908
+ * Ctrl/Cmd+R re-reads the feed instead of reloading the browser. The default
34909
+ * is taken deliberately: inside a comment feed the gesture the User means is
34910
+ * "show me what changed", and a full page reload throws away an unsent draft
34911
+ * to answer it.
34912
+ *
34913
+ * Stops propagating so a reply thread's own feed refreshes alone — without
34914
+ * it the key would bubble to every ancestor feed and fire a request each.
34915
+ */
34916
+ onKeyDown = (event) => {
34917
+ if (!(event.metaKey || event.ctrlKey))
34918
+ return;
34919
+ if (event.key.toLowerCase() !== 'r')
34920
+ return;
34921
+ event.preventDefault();
34922
+ event.stopPropagation();
34923
+ this.refresh();
34924
+ };
34925
+ onMenuAction(item) {
34926
+ if (item.id === 'refresh')
34927
+ this.refresh();
34928
+ }
34929
+ refresh() {
34930
+ this.store.refresh(this.id());
34931
+ }
34837
34932
  onReply(commentId) {
34838
34933
  this.replyingToId.set(commentId);
34839
34934
  }
@@ -34857,7 +34952,7 @@ class CommentsComponent {
34857
34952
  this.store.removeComment(this.id(), commentId);
34858
34953
  }
34859
34954
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CommentsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
34860
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: CommentsComponent, isStandalone: true, selector: "m-comments", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: true, transformFunction: null }, isNested: { classPropertyName: "isNested", publicName: "isNested", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"comments\">\n <!-- \u2500\u2500 Compose box \u2500\u2500 -->\n <div class=\"comments__compose\">\n <m-textarea-input [config]=\"textareaConfig\" [(value)]=\"draft\" [disabled]=\"submitting()\" />\n <div class=\"comments__toolbar\">\n <m-one-button name=\"post\" [disabled]=\"!draft().trim() || submitting()\" (clicked)=\"submit()\" />\n </div>\n </div>\n\n <!-- \u2500\u2500 Items list \u2500\u2500 -->\n @if (loading()) {\n <div class=\"comments__loading\">{{ 'loading' | translate }}</div>\n } @else if (items().length) {\n <div class=\"comments__list\">\n @for (item of items(); track item.kind === 'comment' ? item.id : 'cursor_' + item.token) {\n @if (item.kind === 'comment') {\n <m-comment-item\n [comment]=\"item\"\n [showReplies]=\"expandedId() === item.id\"\n [isReplying]=\"replyingToId() === item.id\"\n (reply)=\"onReply($event)\"\n (cancelReply)=\"cancelReply()\"\n (toggleReplies)=\"onToggleReplies(item.id)\"\n (deleted)=\"onDelete($event)\"\n />\n } @else {\n <div class=\"comments__load-more-wrapper\">\n <m-button\n [config]=\"store.isExpanding(item.token) ? { icon: 'reset' } : { label: 'load-more-comments' }\"\n [disabled]=\"store.isExpanding(item.token)\"\n (clicked)=\"expand(item.token)\"\n />\n </div>\n }\n }\n </div>\n }\n</div>\n", styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}@keyframes shimmer{0%{left:-100%}to{left:100%}}@keyframes slide-up{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes bounce{0%,to{transform:scale(1)}50%{transform:scale(1.3)}}@keyframes pulse{0%{transform:scale(1);box-shadow:0 4px 12px #4169e14d}50%{transform:scale(.92);box-shadow:0 2px 6px #4169e133}to{transform:scale(1);box-shadow:0 4px 12px #4169e14d}}.comments{display:flex;flex-direction:column;gap:1.5rem;width:100%}.comments__list{display:flex;flex-direction:column;gap:1.5rem}.comments__loading{text-align:center;color:var(--m-text-tertiary);font-size:.85rem;font-weight:500;letter-spacing:.02em;position:relative;overflow:hidden}.comments__loading:after{content:\"\";position:absolute;top:0;left:-100%;width:50%;height:100%;background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--m-mm) 5%,transparent),transparent);animation:shimmer 2s infinite}.comments__compose{display:flex;flex-direction:column;gap:1rem;padding-top:1rem;position:relative}.comments__compose .m-textarea-input{--m-textarea-input-background: transparent;--m-textarea-input-border: none;--m-textarea-input-padding: 0;--m-textarea-input-shadow: none;width:100%}.comments__compose .m-textarea-input textarea{width:100%;font-size:.95rem;color:var(--m-text);min-height:80px;resize:none;line-height:1.6}.comments__compose .m-textarea-input textarea::placeholder{color:var(--m-text-tertiary);opacity:.7}.comments__toolbar{display:flex;align-items:center;justify-content:flex-end;width:100%;transition:all .3s ease}.comments__load-more-wrapper{width:100%;padding:1rem;background:color-mix(in srgb,var(--m-border) 20%,transparent);border:1px solid var(--m-border);border-radius:.375rem;color:var(--m-text-secondary);font-size:.85rem;font-weight:600;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:.5rem;transition:all .2s}.comments__load-more-wrapper .m-button{padding:0;font-size:inherit;background:transparent}.comments__load-more-wrapper:hover:not([disabled]){background:var(--m-frame);border-color:var(--m-mm);color:var(--m-mm);box-shadow:0 4px 12px #0000000d}.comments__load-more-wrapper[disabled]{opacity:.5;cursor:not-allowed}\n"], dependencies: [{ kind: "component", type: CommentItemComponent, selector: "m-comment-item", inputs: ["comment", "showReplies", "isReplying"], outputs: ["reply", "cancelReply", "toggleReplies", "deleted"] }, { kind: "component", type: TextareaInputComponent, selector: "m-textarea-input" }, { kind: "component", type: ButtonComponent, selector: "m-button,m-one-button", inputs: ["config", "color", "labelClass", "fullWidth", "nav", "navParams", "href", "disabled", "variant", "name", "baseUrl", "one", "remote", "label", "noTranslate", "params", "noNative", "icon", "isRightIcon", "iconOnly", "stacked", "imgSrc", "nonClickable", "inverted", "isSubmit", "tabindex"], outputs: ["configChange", "clicked"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
34955
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: CommentsComponent, isStandalone: true, selector: "m-comments", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: true, transformFunction: null }, isNested: { classPropertyName: "isNested", publicName: "isNested", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "tabindex": "-1" }, listeners: { "keydown": "onKeyDown($event)" } }, ngImport: i0, template: "<div class=\"comments\">\n <!-- \u2500\u2500 Compose box \u2500\u2500 -->\n <div class=\"comments__compose\">\n <m-textarea-input [config]=\"textareaConfig\" [(value)]=\"draft\" [disabled]=\"submitting()\" />\n <div class=\"comments__toolbar\">\n <m-one-context-menu name=\"comments_feed_actions\" (action)=\"onMenuAction($event)\" />\n <m-one-button name=\"post\" [disabled]=\"!draft().trim() || submitting()\" (clicked)=\"submit()\" />\n </div>\n </div>\n\n <!-- \u2500\u2500 Items list \u2500\u2500 -->\n @if (loading()) {\n <div class=\"comments__loading\">{{ 'loading' | translate }}</div>\n } @else if (items().length) {\n <div class=\"comments__list\">\n @for (item of items(); track item.kind === 'comment' ? item.id : 'cursor_' + item.token) {\n @if (item.kind === 'comment') {\n <m-comment-item\n [comment]=\"item\"\n [showReplies]=\"expandedId() === item.id\"\n [isReplying]=\"replyingToId() === item.id\"\n (reply)=\"onReply($event)\"\n (cancelReply)=\"cancelReply()\"\n (toggleReplies)=\"onToggleReplies(item.id)\"\n (deleted)=\"onDelete($event)\"\n />\n } @else {\n <div class=\"comments__load-more-wrapper\">\n <m-button\n [config]=\"loadMoreConfigs().get(item.token)\"\n [disabled]=\"store.isExpanding(item.token)\"\n (clicked)=\"expand(item.token)\"\n />\n </div>\n }\n }\n </div>\n }\n</div>\n", styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}@keyframes shimmer{0%{left:-100%}to{left:100%}}@keyframes slide-up{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes bounce{0%,to{transform:scale(1)}50%{transform:scale(1.3)}}@keyframes pulse{0%{transform:scale(1);box-shadow:0 4px 12px #4169e14d}50%{transform:scale(.92);box-shadow:0 2px 6px #4169e133}to{transform:scale(1);box-shadow:0 4px 12px #4169e14d}}.comments{display:flex;flex-direction:column;gap:1.5rem;width:100%}.comments__list{display:flex;flex-direction:column;gap:1.5rem}.comments__loading{text-align:center;color:var(--m-text-tertiary);font-size:.85rem;font-weight:500;letter-spacing:.02em;position:relative;overflow:hidden}.comments__loading:after{content:\"\";position:absolute;top:0;left:-100%;width:50%;height:100%;background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--m-mm) 5%,transparent),transparent);animation:shimmer 2s infinite}.comments__compose{display:flex;flex-direction:column;gap:1rem;padding-top:1rem;position:relative}.comments__compose .m-textarea-input{--m-textarea-input-background: transparent;--m-textarea-input-border: none;--m-textarea-input-padding: 0;--m-textarea-input-shadow: none;width:100%}.comments__compose .m-textarea-input textarea{width:100%;font-size:.95rem;color:var(--m-text);min-height:80px;resize:none;line-height:1.6}.comments__compose .m-textarea-input textarea::placeholder{color:var(--m-text-tertiary);opacity:.7}.comments__toolbar{display:flex;align-items:center;justify-content:flex-end;gap:.5rem;width:100%;transition:all .3s ease}.comments__load-more-wrapper{width:100%;padding:1rem;background:color-mix(in srgb,var(--m-border) 20%,transparent);border:1px solid var(--m-border);border-radius:.375rem;color:var(--m-text-secondary);font-size:.85rem;font-weight:600;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:.5rem;transition:all .2s}.comments__load-more-wrapper .m-button{padding:0;font-size:inherit;background:transparent}.comments__load-more-wrapper:hover:not([disabled]){background:var(--m-frame);border-color:var(--m-mm);color:var(--m-mm);box-shadow:0 4px 12px #0000000d}.comments__load-more-wrapper[disabled]{opacity:.5;cursor:not-allowed}\n"], dependencies: [{ kind: "component", type: CommentItemComponent, selector: "m-comment-item", inputs: ["comment", "showReplies", "isReplying"], outputs: ["reply", "cancelReply", "toggleReplies", "deleted"] }, { kind: "component", type: TextareaInputComponent, selector: "m-textarea-input" }, { kind: "component", type: ButtonComponent, selector: "m-button,m-one-button", inputs: ["config", "color", "labelClass", "fullWidth", "nav", "navParams", "href", "disabled", "variant", "name", "baseUrl", "one", "remote", "label", "noTranslate", "params", "noNative", "icon", "isRightIcon", "iconOnly", "stacked", "imgSrc", "nonClickable", "inverted", "isSubmit", "tabindex"], outputs: ["configChange", "clicked"] }, { kind: "component", type: ContextMenuComponent, selector: "m-context-menu, m-one-context-menu", inputs: ["toggle", "remote", "exclude", "visibilityRule", "disableRule", "extraData", "inverted"], outputs: ["toggleChange", "action"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
34861
34956
  }
34862
34957
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CommentsComponent, decorators: [{
34863
34958
  type: Component,
@@ -34866,7 +34961,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
34866
34961
  TextareaInputComponent,
34867
34962
  TranslatePipe,
34868
34963
  ButtonComponent,
34869
- ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"comments\">\n <!-- \u2500\u2500 Compose box \u2500\u2500 -->\n <div class=\"comments__compose\">\n <m-textarea-input [config]=\"textareaConfig\" [(value)]=\"draft\" [disabled]=\"submitting()\" />\n <div class=\"comments__toolbar\">\n <m-one-button name=\"post\" [disabled]=\"!draft().trim() || submitting()\" (clicked)=\"submit()\" />\n </div>\n </div>\n\n <!-- \u2500\u2500 Items list \u2500\u2500 -->\n @if (loading()) {\n <div class=\"comments__loading\">{{ 'loading' | translate }}</div>\n } @else if (items().length) {\n <div class=\"comments__list\">\n @for (item of items(); track item.kind === 'comment' ? item.id : 'cursor_' + item.token) {\n @if (item.kind === 'comment') {\n <m-comment-item\n [comment]=\"item\"\n [showReplies]=\"expandedId() === item.id\"\n [isReplying]=\"replyingToId() === item.id\"\n (reply)=\"onReply($event)\"\n (cancelReply)=\"cancelReply()\"\n (toggleReplies)=\"onToggleReplies(item.id)\"\n (deleted)=\"onDelete($event)\"\n />\n } @else {\n <div class=\"comments__load-more-wrapper\">\n <m-button\n [config]=\"store.isExpanding(item.token) ? { icon: 'reset' } : { label: 'load-more-comments' }\"\n [disabled]=\"store.isExpanding(item.token)\"\n (clicked)=\"expand(item.token)\"\n />\n </div>\n }\n }\n </div>\n }\n</div>\n", styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}@keyframes shimmer{0%{left:-100%}to{left:100%}}@keyframes slide-up{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes bounce{0%,to{transform:scale(1)}50%{transform:scale(1.3)}}@keyframes pulse{0%{transform:scale(1);box-shadow:0 4px 12px #4169e14d}50%{transform:scale(.92);box-shadow:0 2px 6px #4169e133}to{transform:scale(1);box-shadow:0 4px 12px #4169e14d}}.comments{display:flex;flex-direction:column;gap:1.5rem;width:100%}.comments__list{display:flex;flex-direction:column;gap:1.5rem}.comments__loading{text-align:center;color:var(--m-text-tertiary);font-size:.85rem;font-weight:500;letter-spacing:.02em;position:relative;overflow:hidden}.comments__loading:after{content:\"\";position:absolute;top:0;left:-100%;width:50%;height:100%;background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--m-mm) 5%,transparent),transparent);animation:shimmer 2s infinite}.comments__compose{display:flex;flex-direction:column;gap:1rem;padding-top:1rem;position:relative}.comments__compose .m-textarea-input{--m-textarea-input-background: transparent;--m-textarea-input-border: none;--m-textarea-input-padding: 0;--m-textarea-input-shadow: none;width:100%}.comments__compose .m-textarea-input textarea{width:100%;font-size:.95rem;color:var(--m-text);min-height:80px;resize:none;line-height:1.6}.comments__compose .m-textarea-input textarea::placeholder{color:var(--m-text-tertiary);opacity:.7}.comments__toolbar{display:flex;align-items:center;justify-content:flex-end;width:100%;transition:all .3s ease}.comments__load-more-wrapper{width:100%;padding:1rem;background:color-mix(in srgb,var(--m-border) 20%,transparent);border:1px solid var(--m-border);border-radius:.375rem;color:var(--m-text-secondary);font-size:.85rem;font-weight:600;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:.5rem;transition:all .2s}.comments__load-more-wrapper .m-button{padding:0;font-size:inherit;background:transparent}.comments__load-more-wrapper:hover:not([disabled]){background:var(--m-frame);border-color:var(--m-mm);color:var(--m-mm);box-shadow:0 4px 12px #0000000d}.comments__load-more-wrapper[disabled]{opacity:.5;cursor:not-allowed}\n"] }]
34964
+ ContextMenuComponent,
34965
+ ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
34966
+ tabindex: '-1',
34967
+ '(keydown)': 'onKeyDown($event)',
34968
+ }, template: "<div class=\"comments\">\n <!-- \u2500\u2500 Compose box \u2500\u2500 -->\n <div class=\"comments__compose\">\n <m-textarea-input [config]=\"textareaConfig\" [(value)]=\"draft\" [disabled]=\"submitting()\" />\n <div class=\"comments__toolbar\">\n <m-one-context-menu name=\"comments_feed_actions\" (action)=\"onMenuAction($event)\" />\n <m-one-button name=\"post\" [disabled]=\"!draft().trim() || submitting()\" (clicked)=\"submit()\" />\n </div>\n </div>\n\n <!-- \u2500\u2500 Items list \u2500\u2500 -->\n @if (loading()) {\n <div class=\"comments__loading\">{{ 'loading' | translate }}</div>\n } @else if (items().length) {\n <div class=\"comments__list\">\n @for (item of items(); track item.kind === 'comment' ? item.id : 'cursor_' + item.token) {\n @if (item.kind === 'comment') {\n <m-comment-item\n [comment]=\"item\"\n [showReplies]=\"expandedId() === item.id\"\n [isReplying]=\"replyingToId() === item.id\"\n (reply)=\"onReply($event)\"\n (cancelReply)=\"cancelReply()\"\n (toggleReplies)=\"onToggleReplies(item.id)\"\n (deleted)=\"onDelete($event)\"\n />\n } @else {\n <div class=\"comments__load-more-wrapper\">\n <m-button\n [config]=\"loadMoreConfigs().get(item.token)\"\n [disabled]=\"store.isExpanding(item.token)\"\n (clicked)=\"expand(item.token)\"\n />\n </div>\n }\n }\n </div>\n }\n</div>\n", styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}@keyframes shimmer{0%{left:-100%}to{left:100%}}@keyframes slide-up{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes bounce{0%,to{transform:scale(1)}50%{transform:scale(1.3)}}@keyframes pulse{0%{transform:scale(1);box-shadow:0 4px 12px #4169e14d}50%{transform:scale(.92);box-shadow:0 2px 6px #4169e133}to{transform:scale(1);box-shadow:0 4px 12px #4169e14d}}.comments{display:flex;flex-direction:column;gap:1.5rem;width:100%}.comments__list{display:flex;flex-direction:column;gap:1.5rem}.comments__loading{text-align:center;color:var(--m-text-tertiary);font-size:.85rem;font-weight:500;letter-spacing:.02em;position:relative;overflow:hidden}.comments__loading:after{content:\"\";position:absolute;top:0;left:-100%;width:50%;height:100%;background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--m-mm) 5%,transparent),transparent);animation:shimmer 2s infinite}.comments__compose{display:flex;flex-direction:column;gap:1rem;padding-top:1rem;position:relative}.comments__compose .m-textarea-input{--m-textarea-input-background: transparent;--m-textarea-input-border: none;--m-textarea-input-padding: 0;--m-textarea-input-shadow: none;width:100%}.comments__compose .m-textarea-input textarea{width:100%;font-size:.95rem;color:var(--m-text);min-height:80px;resize:none;line-height:1.6}.comments__compose .m-textarea-input textarea::placeholder{color:var(--m-text-tertiary);opacity:.7}.comments__toolbar{display:flex;align-items:center;justify-content:flex-end;gap:.5rem;width:100%;transition:all .3s ease}.comments__load-more-wrapper{width:100%;padding:1rem;background:color-mix(in srgb,var(--m-border) 20%,transparent);border:1px solid var(--m-border);border-radius:.375rem;color:var(--m-text-secondary);font-size:.85rem;font-weight:600;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:.5rem;transition:all .2s}.comments__load-more-wrapper .m-button{padding:0;font-size:inherit;background:transparent}.comments__load-more-wrapper:hover:not([disabled]){background:var(--m-frame);border-color:var(--m-mm);color:var(--m-mm);box-shadow:0 4px 12px #0000000d}.comments__load-more-wrapper[disabled]{opacity:.5;cursor:not-allowed}\n"] }]
34870
34969
  }], ctorParameters: () => [], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: true }] }], isNested: [{ type: i0.Input, args: [{ isSignal: true, alias: "isNested", required: false }] }] } });
34871
34970
 
34872
34971
  const FALLBACK_ICON = 'apps';
@@ -35034,4 +35133,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
35034
35133
  */
35035
35134
 
35036
35135
  export { DEFAULT_NAV_PARAM as $, ACCESS_DOMAINS as A, BaseInputComponent as B, COMPONENT_INPUT_REGISTRY as C, CardComponent as D, CardWrapperComponent as E, CarouselComponent as F, ChartComponent as G, CheckboxInputComponent as H, IS_DESIGN_MODE as I, ClearableInputComponent as J, ColComponent as K, LabelComponent as L, ColorPickerInputComponent as M, CommentItemComponent as N, CommentsApiService as O, CommentsComponent as P, CommentsStore as Q, ComponentInputComponent as R, ComponentStepperComponent as S, TranslatePipe as T, ConfigComponent as U, ConfirmComponent as V, ContextMenuComponent as W, CustomIconClass as X, CustomIconEditComponent as Y, DEFAULT_FILTER_RANGE_MODE as Z, DEFAULT_FILTER_VARIANT as _, BaseTextInputComponent as a, MurlUrlSerializer as a$, DEFAULT_NAV_SEGMENT as a0, DEFAULT_SIZE as a1, DashboardCardComponent as a2, DateInputComponent as a3, DatePickerComponent as a4, DeviceService as a5, DomService as a6, Domain as a7, DotGridComponent as a8, DragListDirective as a9, InputType as aA, InstrumentScoreComponent as aB, InterceptorObservables as aC, JumbotronComponent as aD, KeyValueComponent as aE, LAYOUT_ASSET_FOLDER as aF, LOGIN_COMPONENT as aG, LOGIN_STORE as aH, LanguageComponent as aI, ListComponent as aJ, LogoComponent as aK, MAG_SOCKET_EVENT as aL, MHeroColorDirective as aM, MHeroComponent as aN, MODAL_REF as aO, MODAL_STORE_REF as aP, MRefDirective as aQ, MStepComponent as aR, MURL_PARAM as aS, MURL_SEP as aT, ManifestEnrichmentService as aU, MenuComponent as aV, ModalDirective as aW, ModalRef as aX, ModalStore as aY, MoneyPipe as aZ, MultiRangeInputComponent as a_, DragListItemDirective as aa, DraggableDirective as ab, DropdownInputComponent as ac, FILTER_GROUP_CONTEXT as ad, FILTER_RANGE_MODES as ae, FILTER_VARIANTS as af, FLEX_VARIANTS as ag, FOLDER_PICK_LISTENER as ah, FORM_ASSET_FOLDER as ai, FileService as aj, FileUploadDirective as ak, FileUploadInputComponent as al, FlexComponent as am, FlexItemComponent as an, FormGroupComponent as ao, FrameComponent as ap, FreezeService as aq, GRID_BREAKPOINTS as ar, GetNavService as as, HeaderComponent$1 as at, HighlightDirective as au, HttpService as av, ICON_SOURCE as aw, IS_SIDE_PANEL as ax, IconComponent as ay, ImgComponent as az, TextOutputComponent as b, SectionAccordionGroupDirective as b$, NAV_DEFAULT_MURL as b0, NAV_ID_SEP as b1, NAV_MAIN_BUTTONS as b2, NAV_SEGMENT_RE as b3, NAV_STORE_REF as b4, NAV_WC_COMPONENTS as b5, NAV_WIDGET_MAP as b6, NavComponent as b7, NavDetailsComponent as b8, NavHeaderComponent as b9, PlaygroundComponent as bA, PositionDirective as bB, PwaInstallComponent as bC, ROOT_NAV$1 as bD, RadioGroupComponent as bE, RadioInputComponent as bF, RangeInputComponent as bG, RatingInputComponent as bH, ReactiveElementComponent as bI, RemoteComponent as bJ, RemoteLoaderService as bK, ResizeElementComponent as bL, RouteContainer as bM, RowComponent as bN, SEARCH_QUERY as bO, SEARCH_RESULTS_EVENT as bP, SECTION_ACCORDION_GROUP as bQ, SECTION_FORM_CONTEXT as bR, SHARED_ICONS as bS, SIZE_CONTEXT as bT, ScoreComponent as bU, ScrollComponent as bV, ScrollService as bW, SearchPanelComponent as bX, SearchStore as bY, SearchUserPanelComponent as bZ, SectionAccordionDirective as b_, NavMenuComponent as ba, NavStore as bb, NavTrailComponent as bc, NothingComponent as bd, NotificationElementComponent as be, NotificationGroupComponent as bf, NotificationPopupComponent as bg, NotificationService as bh, NotificationStore as bi, NotificationType as bj, NotificationWidgetComponent as bk, ONE_ASSET_BASE_URL as bl, OPTIONS_SOURCE as bm, OVERLAY_WIDGETS as bn, OneApp as bo, OptionsSourceDirective as bp, OverlayBodyComponent as bq, OverlayRef as br, OverlayService as bs, PLATFORM_BUTTON_NAV_IDS as bt, PLATFORM_EXTENSIBLE_NAV_IDS as bu, PLATFORM_NAV_MAP as bv, PLATFORM_ROOT_CHILDREN as bw, PaginationComponent as bx, PanelComponent as by, PercentagePipe as bz, ButtonComponent as c, USER_STORE_REF as c$, SectionBackComponent as c0, SectionBadgesComponent as c1, SectionButtonGroupComponent as c2, SectionCardComponent as c3, SectionCarouselComponent as c4, SectionComponent as c5, SectionFilterComponent as c6, SectionFilterGroupComponent as c7, SectionFilterMenuComponent as c8, SectionFilterPanelComponent as c9, StorageService as cA, StrokeLinecap as cB, StrokeLinejoin as cC, SummaryComponent as cD, SvgGeneratorComponent as cE, SvgGeneratorService as cF, SvgService as cG, TOTAL_COLUMNS as cH, TRANSLATION_SOURCE as cI, TableComponent as cJ, TechnicalMeterComponent as cK, TextInputComponent as cL, TextareaInputComponent as cM, ThemeComponent as cN, ThemeDataService as cO, ThemeService as cP, ThemeStore as cQ, TimeAgoPipe as cR, TimelineComponent as cS, ToggleButtonComponent as cT, ToggleInputComponent as cU, ToggleRadioInputComponent as cV, ToolTipDirective as cW, TooltipComponent as cX, TranslateService as cY, TreeGridComponent as cZ, URL_SEP as c_, SectionFilterRangePanelComponent as ca, SectionFooterComponent as cb, SectionFormComponent as cc, SectionFormItemComponent as cd, SectionHeaderComponent as ce, SectionHeroComponent as cf, SectionPaginationComponent as cg, SectionSearchComponent as ch, SectionStepperComponent as ci, SectionTabsComponent as cj, SectionToggleComponent as ck, SectionToggleItemDirective as cl, SelectableCardInputComponent as cm, SelectorDirective as cn, SettingsSearchBarComponent as co, SettingsSearchService as cp, ShapeComponent as cq, SharedStoreRegistry as cr, SidePanelDirective as cs, Size as ct, SocketStore as cu, SortComponent as cv, StatComponent as cw, StepComponent as cx, StepperComponent as cy, StepsComponent as cz, APP_CONTEXT_REF as d, getTreeGridRow as d$, USER_TAB_MAP as d0, UniverseComponent as d1, UserApiService as d2, UserAvatarComponent as d3, UserComponent as d4, UserNavComponent as d5, UserSettingsComponent as d6, UserStore as d7, WC_ROUTE_CHANGED_EVENT as d8, WC_SEARCH_GROUPS as d9, derivePropertyName as dA, emailValidation as dB, evaluate as dC, evaluateBool as dD, filterHoldsList as dE, filterHoldsOneBound as dF, filterHoldsOptions as dG, filterHoldsRange as dH, filterList as dI, filterNumber as dJ, filterNumberList as dK, filterOne as dL, filterPanelOf as dM, filterPanelWidth as dN, filterRange as dO, filterTreeGridRows as dP, filterValueList as dQ, filterValues as dR, flattenTreeGridRows as dS, formatBadgeCount as dT, fullName as dU, generateClipPath as dV, generateTransform as dW, getClassList as dX, getProperty as dY, getScrollParent as dZ, getTierFromPreviewPath as d_, WIN_USER_TAB_HOOK as da, WIN_USER_TAB_KEY as db, WatermarkComponent as dc, WcRouterStore as dd, WrapperInputComponent as de, anchorNavId as df, applyColorsToElement as dg, assetOptions as dh, bootstrapMagApp as di, bootstrapPwaInstall as dj, buildWcBaseUrl as dk, calculateLuminance as dl, calculateRanks as dm, cellText as dn, checkFilterCondition as dp, childNavId as dq, classListSignal as dr, coerceSize as ds, cornerEdge as dt, cornerSide as du, createMap as dv, createPlatformNavMap as dw, deriveAvatarGradient as dx, deriveContrastColor as dy, deriveOppositeColor as dz, ASSET_BASE_URL as e, provideMagAppConfig as e$, getUniqueId as e0, getValue as e1, hasErrorComputed as e2, hexToRgb as e3, hslToRgb$1 as e4, initMagmoniumApp as e5, initialNotificationState as e6, initialState$2 as e7, initials as e8, injectAuthenticate as e9, maxValidation as eA, mergePlatformNav as eB, mergeUnique as eC, mergeUniqueBy as eD, mergeUniqueWith as eE, minAgeValidation as eF, minLengthValidation as eG, minValidation as eH, miniMarkToHtml as eI, navIdChain as eJ, navIdFor as eK, navIdSegment as eL, navIdToRoutePath as eM, navIdToSegments as eN, navParamOf as eO, navToId as eP, normalizeAssetOptions as eQ, parentNavId as eR, parseAddress as eS, parseColor as eT, parsePatternNames as eU, patternValidation as eV, patternsValidation as eW, platformNavWidgets as eX, privateGuard as eY, processImageToSvg as eZ, provideAppContext as e_, injectInstallApp as ea, injectParentSize as eb, injectScrollSticky as ec, isButtonName as ed, isCancelledComputed as ee, isExtensiblePlatformNavId as ef, isJson as eg, isLoadingComputed as eh, isLocalhost as ei, isNavInstanceConfig as ej, isNavMenuConfig as ek, isNavRowsConfig as el, isPlatformNavId as em, isSize as en, isTierPreview as eo, isUrlLocalhost as ep, isValidNavId as eq, isValidNavSegment as er, isWebComponent as es, linkToId as et, linkToNav as eu, loadingActions as ev, mInterceptor as ew, manualValidation as ex, matchFieldValidation as ey, maxLengthValidation as ez, AccordionBodyDirective as f, provideMagWcConfig as f0, provideMagWcRoutes as f1, provideModalComponents as f2, provideMurlUrlSerializer as f3, provideNavWidgets as f4, provideOverlayWidgets as f5, providePlatformNavWidgets as f6, provideSearch as f7, provideSizeContext as f8, provideUserTabs as f9, toLocalNavId as fA, toggleTreeGridRow as fB, unfetchedPlatformNav as fC, urlValidation as fD, publicGuard as fa, readFieldPatterns as fb, renderAddress as fc, requiredValidation as fd, resolveConfigAsset as fe, resolveIconSize as ff, resolvePallet as fg, resolvePatternRules as fh, resolveSize as fi, rgbToHex as fj, rgbToHsl as fk, rowHasChildren as fl, samePatterns as fm, segmentsToNavId as fn, setProperty as fo, setTreeGridChildren as fp, settingsWidgets as fq, shouldShowBadge as fr, splitNavId as fs, splitOnMatch as ft, stringToColor as fu, toAttrBool as fv, toAttrNumber as fw, toCssLength as fx, toHostNavId as fy, toLength$1 as fz, AccordionComponent as g, AccordionGroupComponent as h, ActionComponent as i, AnimatedGraphsComponent as j, AppCardComponent as k, AppRelationType as l, AppTileComponent as m, AssetStore as n, AssetUrlPipe as o, Assets as p, AuthActivityPageComponent as q, AuthApiService as r, AuthStore as s, AutosizeDirective as t, BadgeComponent as u, BandingComponent as v, BaseArrayInputComponent as w, BaseRootWebComponent as x, BaseWebComponent as y, ButtonGroupComponent as z };
35037
- //# sourceMappingURL=magmonium-one-magmonium-one-CSXqQSjH.mjs.map
35136
+ //# sourceMappingURL=magmonium-one-magmonium-one-BLBwZo0x.mjs.map