@pacem/pacem 1.0.0-bessel → 1.0.0-binet

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 (66) hide show
  1. package/dist/browser/pacem-2d.js +149 -2
  2. package/dist/browser/pacem-2d.js.map +1 -1
  3. package/dist/browser/pacem-2d.min.js +1 -1
  4. package/dist/browser/pacem-3d.js +646 -2
  5. package/dist/browser/pacem-3d.js.map +1 -1
  6. package/dist/browser/pacem-3d.min.js +1 -1
  7. package/dist/browser/pacem-charts.js +21 -1
  8. package/dist/browser/pacem-charts.js.map +1 -1
  9. package/dist/browser/pacem-charts.min.js +1 -1
  10. package/dist/browser/pacem-cms.js +118 -3
  11. package/dist/browser/pacem-cms.js.map +1 -1
  12. package/dist/browser/pacem-cms.min.js +1 -1
  13. package/dist/browser/pacem-core.js +870 -9
  14. package/dist/browser/pacem-core.js.map +1 -1
  15. package/dist/browser/pacem-core.min.js +2 -2
  16. package/dist/browser/pacem-foundation.js +296 -1
  17. package/dist/browser/pacem-foundation.js.map +1 -1
  18. package/dist/browser/pacem-foundation.min.js +1 -1
  19. package/dist/browser/pacem-fx.js +18 -1
  20. package/dist/browser/pacem-fx.js.map +1 -1
  21. package/dist/browser/pacem-fx.min.js +1 -1
  22. package/dist/browser/pacem-logging.js +15 -1
  23. package/dist/browser/pacem-logging.js.map +1 -1
  24. package/dist/browser/pacem-logging.min.js +1 -1
  25. package/dist/browser/pacem-maps.js +97 -1
  26. package/dist/browser/pacem-maps.js.map +1 -1
  27. package/dist/browser/pacem-maps.min.js +1 -1
  28. package/dist/browser/pacem-media.js +14 -1
  29. package/dist/browser/pacem-media.js.map +1 -1
  30. package/dist/browser/pacem-media.min.js +1 -1
  31. package/dist/browser/pacem-networking.js +22 -1
  32. package/dist/browser/pacem-networking.js.map +1 -1
  33. package/dist/browser/pacem-networking.min.js +1 -1
  34. package/dist/browser/pacem-numerical.js +360 -1
  35. package/dist/browser/pacem-numerical.js.map +1 -1
  36. package/dist/browser/pacem-numerical.min.js +1 -1
  37. package/dist/browser/pacem-plus.js +195 -4
  38. package/dist/browser/pacem-plus.js.map +1 -1
  39. package/dist/browser/pacem-plus.min.js +1 -1
  40. package/dist/browser/pacem-scaffolding.js +420 -38
  41. package/dist/browser/pacem-scaffolding.js.map +1 -1
  42. package/dist/browser/pacem-scaffolding.min.js +2 -2
  43. package/dist/browser/pacem-ui.js +143 -19
  44. package/dist/browser/pacem-ui.js.map +1 -1
  45. package/dist/browser/pacem-ui.min.js +2 -2
  46. package/dist/bundle/pacem.min.mjs +147 -147
  47. package/dist/bundle/pacem.mjs +2905 -1417
  48. package/dist/bundle/pacem.mjs.map +3 -3
  49. package/dist/docs/pacem-2d.json +11549 -0
  50. package/dist/docs/pacem-3d.json +29096 -0
  51. package/dist/docs/pacem-charts.json +4244 -0
  52. package/dist/docs/pacem-cms.json +9325 -0
  53. package/dist/docs/pacem-core.json +40109 -0
  54. package/dist/docs/pacem-foundation.json +8941 -0
  55. package/dist/docs/pacem-fx.json +3121 -0
  56. package/dist/docs/pacem-logging.json +941 -0
  57. package/dist/docs/pacem-maps.json +17387 -0
  58. package/dist/docs/pacem-media.json +1203 -0
  59. package/dist/docs/pacem-networking.json +1798 -0
  60. package/dist/docs/pacem-numerical.json +13706 -0
  61. package/dist/docs/pacem-plus.json +8468 -0
  62. package/dist/docs/pacem-scaffolding.json +34788 -0
  63. package/dist/docs/pacem-ui.json +18628 -0
  64. package/dist/typings/index.d.ts +4109 -31
  65. package/dist/vscode.html-custom.json +1303 -741
  66. package/package.json +4 -2
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-bessel (https://js.pacem.it)
2
+ * @pacem/pacem v1.0.0-binet (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
@@ -14,17 +14,20 @@
14
14
  };
15
15
  const { PacemElement, RepeaterItemCreateEventName, ItemRegisterEventName, ItemUnregisterEventName } = pacemCore.Components;
16
16
  //namespace Pacem.Components.UI {
17
+ /** Orientation used by a {@link PacemAdapterElement} to interpret arrow-key navigation. */
17
18
  var AdapterOrientation;
18
19
  (function (AdapterOrientation) {
19
20
  AdapterOrientation["Vertical"] = "vertical";
20
21
  AdapterOrientation["Horizontal"] = "horizontal";
21
22
  })(AdapterOrientation || (AdapterOrientation = {}));
22
23
  const AdapterPageButtonRefreshEventName = 'pagerefresh';
24
+ /** Event dispatched by {@link PacemAdapterElement} whenever a page/dashboard button needs to (re)compute its visible state or content. */
23
25
  class AdapterPageButtonRefreshEvent extends CustomEvent {
24
26
  constructor(args) {
25
27
  super(AdapterPageButtonRefreshEventName, { detail: args, bubbles: false, cancelable: false });
26
28
  }
27
29
  }
30
+ /** Renders a dashboard of prev/next buttons and page indicators driving a {@link Components.PacemAdapter} (e.g. a `<pacem-slideshow>` master). */
28
31
  let PacemAdapterElement = class PacemAdapterElement extends pacemCore.Components.PacemAdapter {
29
32
  constructor() {
30
33
  super(...arguments);
@@ -34,10 +37,13 @@
34
37
  this._fireAdapterPageRefreshCallback(index, evt.detail.item);
35
38
  };
36
39
  this._pageMap = new Map();
40
+ /** Gets or sets whether the dashboard responds to user interaction (keyboard, click, swipe). */
37
41
  this.interactive = true;
38
42
  /** Gets or sets whether swipe gesture is enabled for navigation (also depends on the 'interactive' flag being set to 'true') */
39
43
  this.swipeEnabled = true;
44
+ /** Gets or sets whether navigating past the last (or before the first) item wraps around. */
40
45
  this.loop = true;
46
+ /** Gets or sets the callback computing a page button's caption for a given item/index (defaults to the 1-based index). */
41
47
  this.labelCallback = (item, index) => (index + 1).toString();
42
48
  this._itemRegisterHandler = (evt) => {
43
49
  let item = evt.detail;
@@ -154,10 +160,7 @@
154
160
  const pagers = this._pageMap;
155
161
  if (pagers.has(index)) {
156
162
  const pager = pagers.get(index), span = pager.firstElementChild;
157
- let fn = (e) => {
158
- if (e) {
159
- pager.removeEventListener('load', fn, false);
160
- }
163
+ const fn = () => {
161
164
  pager.hide = hide;
162
165
  pager.disabled = disable;
163
166
  span.content = caption;
@@ -165,13 +168,7 @@
165
168
  // *careful here*: TODO: TO BE STUDIED
166
169
  // if setting the property before it's connected
167
170
  // the @Watch configuration and the get+set injection gets lost!
168
- if (pager.isReady) {
169
- // does not work for properties(?)...
170
- fn();
171
- }
172
- else {
173
- pager.addEventListener('load', fn, false);
174
- }
171
+ pacemCore.CustomElementUtils.whenReady(pager, fn);
175
172
  }
176
173
  }
177
174
  _tickVersion() {
@@ -372,12 +369,13 @@
372
369
  };
373
370
  //namespace Pacem.Components.UI {
374
371
  // TODO: shadow-ize and reuse native <a> element.
372
+ /** Anchor-like custom element, supporting routed navigation (via a {@link Components.PacemRouterElement}), OAuth-authenticated downloads and keyboard activation. */
375
373
  let PacemAnchorElement = class PacemAnchorElement extends pacemCore.Components.PacemElement {
376
374
  constructor() {
377
375
  super('link');
378
376
  this._fetching = false;
379
377
  }
380
- ///
378
+ /** @readonly Gets whether a `download` fetch is currently in progress. */
381
379
  get fetching() {
382
380
  return this._fetching;
383
381
  }
@@ -512,6 +510,7 @@
512
510
  })
513
511
  ], PacemAnchorElement);
514
512
 
513
+ /** Converts an attribute value into an `Element` (resolved via `querySelector`) or, failing that, a parsed `Point`/JSON value. */
515
514
  const ElementOrPointPropertyConverter = {
516
515
  convert: (attr) => {
517
516
  let el = document.querySelector(attr);
@@ -527,12 +526,14 @@
527
526
  return c > 3 && r && Object.defineProperty(target, key, r), r;
528
527
  };
529
528
  //namespace Pacem.Components.UI {
529
+ /** How a {@link PacemBalloonElement} behaves once popped up: a dismissible menu, a tooltip, or non-interactive. */
530
530
  var BalloonBehavior;
531
531
  (function (BalloonBehavior) {
532
532
  BalloonBehavior["Menu"] = "menu";
533
533
  BalloonBehavior["Tooltip"] = "tooltip";
534
534
  BalloonBehavior["Inert"] = "inert";
535
535
  })(BalloonBehavior || (BalloonBehavior = {}));
536
+ /** The user interaction on `target` that pops a {@link PacemBalloonElement} up. */
536
537
  var BalloonTrigger;
537
538
  (function (BalloonTrigger) {
538
539
  BalloonTrigger["Hover"] = "hover";
@@ -540,6 +541,7 @@
540
541
  BalloonTrigger["ContextMenu"] = "contextmenu";
541
542
  BalloonTrigger["Focus"] = "focus";
542
543
  })(BalloonTrigger || (BalloonTrigger = {}));
544
+ /** Cross-axis alignment of a {@link PacemBalloonElement} relative to its `target`. */
543
545
  var BalloonAlignment;
544
546
  (function (BalloonAlignment) {
545
547
  BalloonAlignment["Start"] = "start";
@@ -547,6 +549,7 @@
547
549
  BalloonAlignment["End"] = "end";
548
550
  BalloonAlignment["Auto"] = "auto";
549
551
  })(BalloonAlignment || (BalloonAlignment = {}));
552
+ /** Side of `target` a {@link PacemBalloonElement} is anchored to (with automatic variants that pick the side with the most room). */
550
553
  var BalloonPosition;
551
554
  (function (BalloonPosition) {
552
555
  BalloonPosition["Top"] = "top";
@@ -557,12 +560,15 @@
557
560
  BalloonPosition["HorizontalAuto"] = "x";
558
561
  BalloonPosition["VerticalAuto"] = "y";
559
562
  })(BalloonPosition || (BalloonPosition = {}));
563
+ /** Whether a {@link PacemBalloonElement} sizes itself freely or matches its `target`'s size along the anchored axis. */
560
564
  var BalloonSizing;
561
565
  (function (BalloonSizing) {
562
566
  BalloonSizing["Auto"] = "auto";
563
567
  BalloonSizing["Match"] = "match";
564
568
  })(BalloonSizing || (BalloonSizing = {}));
569
+ /** Event name fired by {@link PacemBalloonElement} once it has finished popping up (after the show transition). */
565
570
  const BalloonPopupEventName = 'popup';
571
+ /** Event name fired by {@link PacemBalloonElement} once it has finished popping out (after the hide transition). */
566
572
  const BalloonPopoutEventName = 'popout';
567
573
  const BalloonConsts = {
568
574
  Defaults: {
@@ -580,6 +586,7 @@
580
586
  };
581
587
  const positioningStyles = 'balloon-right balloon-left balloon-bottom balloon-top balloon-start balloon-center balloon-end';
582
588
  const allStyles = pacemCore.PCSS + '-balloon ' + positioningStyles + ' balloon-out balloon-in balloon-on';
589
+ /** Positions its content as a floating popup (menu or tooltip) anchored to a `target` element or point; see {@link BalloonOptions}. */
583
590
  let PacemBalloonElement = class PacemBalloonElement extends pacemCore.Components.PacemElement {
584
591
  constructor() {
585
592
  super(...arguments);
@@ -1106,6 +1113,7 @@
1106
1113
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1107
1114
  };
1108
1115
  // namespace Pacem.Components.UI {
1116
+ /** Edge (or center) of an element a {@link PacemBinderElement} curve attaches to. */
1109
1117
  var BinderAnchor;
1110
1118
  (function (BinderAnchor) {
1111
1119
  BinderAnchor["Auto"] = "auto";
@@ -1115,6 +1123,7 @@
1115
1123
  BinderAnchor["Bottom"] = "bottom";
1116
1124
  BinderAnchor["Center"] = "center";
1117
1125
  })(BinderAnchor || (BinderAnchor = {}));
1126
+ /** Decoration drawn at either end of a {@link PacemBinderElement} curve. */
1118
1127
  var BinderEnd;
1119
1128
  (function (BinderEnd) {
1120
1129
  BinderEnd["Default"] = "default";
@@ -1122,18 +1131,22 @@
1122
1131
  BinderEnd["FatArrow"] = "fatarrow";
1123
1132
  BinderEnd["None"] = "none";
1124
1133
  })(BinderEnd || (BinderEnd = {}));
1134
+ /** How a {@link PacemBinderElement} computes its Bezier control points: from the elements' mass (size) or from the path direction. */
1125
1135
  var BinderTension;
1126
1136
  (function (BinderTension) {
1127
1137
  BinderTension["Mass"] = "mass";
1128
1138
  BinderTension["Path"] = "path";
1129
1139
  })(BinderTension || (BinderTension = {}));
1140
+ /** Event name fired by a {@link PacemBinderElement} when its connecting path is interacted with (click, hover, etc.). */
1130
1141
  const BinderInteractionEventName = 'interact';
1142
+ /** Event dispatched by a {@link PacemBinderElement} wrapping the original user-interaction event on its path. */
1131
1143
  class BinderInteractionEvent extends pacemCore.CustomUIEvent {
1132
1144
  constructor(orig) {
1133
1145
  super(BinderInteractionEventName, null, orig);
1134
1146
  }
1135
1147
  }
1136
1148
  const UI_BINDERS = 'pacem:components:ui:binders';
1149
+ /** Tracks the {@link PacemBinderElement} instances bound to a single endpoint element, refreshing them all on that element's resize/reposition. */
1137
1150
  class BindersCollector {
1138
1151
  constructor(element) {
1139
1152
  this.binders = [];
@@ -1151,6 +1164,7 @@
1151
1164
  this.resize.remove();
1152
1165
  }
1153
1166
  }
1167
+ /** Static registry pairing endpoint elements with their {@link BindersCollector}, plus a page-wide resize listener keeping every registered {@link PacemBinderElement} in sync. */
1154
1168
  class BinderUtils {
1155
1169
  static { this._pageBinders = []; }
1156
1170
  static _updateResizeListener() {
@@ -1203,6 +1217,7 @@
1203
1217
  }
1204
1218
  }
1205
1219
  const STD_EVENTS = ['click', 'dblclick', 'mouseover', 'mouseout', 'mouseenter', 'mouseleave', 'mousedown', 'mouseup', 'mousemove', 'contextmenu'];
1220
+ /** Draws an SVG Bezier curve connecting two elements (or points), following them as they move/resize; e.g. wires or diagram connectors. */
1206
1221
  let PacemBinderElement = class PacemBinderElement extends pacemCore.Components.PacemElement {
1207
1222
  constructor() {
1208
1223
  super(...arguments);
@@ -1317,6 +1332,7 @@
1317
1332
  });
1318
1333
  }
1319
1334
  }
1335
+ /** Resizes the shared full-page SVG overlay to match the current document size; call after layout changes that may affect `document.body`'s scroll size. */
1320
1336
  invalidateSize() {
1321
1337
  const svg = this._svg;
1322
1338
  if (!pacemCore.Utils.isNull(svg)) {
@@ -1628,6 +1644,7 @@
1628
1644
  }
1629
1645
  return { points: [p1, c1, p2, c2], anchors: [anchor, refAnchor] };
1630
1646
  }
1647
+ /** Updates the cached position/size for the given endpoint (`from` or `to`) and redraws the curve if both ends are known. @param args Pre-computed layout, or omitted to reuse the last known/cached value. */
1631
1648
  refresh(element, args) {
1632
1649
  var path;
1633
1650
  if (pacemCore.Utils.isNull(element) || pacemCore.Utils.isNull(path = this._path)) {
@@ -1782,6 +1799,7 @@
1782
1799
  };
1783
1800
  // namespace Pacem.Components.UI {
1784
1801
  const OPEN_CSSCLASS$1 = 'blade-open';
1802
+ /** Slide-in panel toggled via its `open` property, dispatching `open`/`close` events as it transitions. */
1785
1803
  let PacemBladeElement = class PacemBladeElement extends pacemCore.Components.PacemElement {
1786
1804
  propertyChangedCallback(name, old, val, first) {
1787
1805
  super.propertyChangedCallback(name, old, val, first);
@@ -1812,6 +1830,7 @@
1812
1830
  };
1813
1831
  // namespace Pacem.Components.UI {
1814
1832
  const OPEN_CSSCLASS = 'bottom-sheet-open';
1833
+ /** Drag handle for an ancestor {@link PacemBottomSheetElement}: renders a small grip icon, toggles the sheet on click and drives its swipe-to-drag behavior. */
1815
1834
  let PacemBottomSheetHandleElement = class PacemBottomSheetHandleElement extends pacemCore.Components.PacemElement {
1816
1835
  constructor() {
1817
1836
  super(...arguments);
@@ -1844,7 +1863,7 @@
1844
1863
  disconnectedCallback() {
1845
1864
  this.removeEventListener('click', this._clickHandler);
1846
1865
  const bs = this.#bottomSheet;
1847
- if (!pacemCore.Utils.isNull(bs)) {
1866
+ if (!pacemCore.Utils.isNull(bs) && bs.isReady) {
1848
1867
  bs._setHandle(null);
1849
1868
  }
1850
1869
  this.#bottomSheet = null;
@@ -1856,9 +1875,13 @@
1856
1875
  if (pacemCore.Utils.isNull(bs)) {
1857
1876
  return;
1858
1877
  }
1859
- pacemCore.Utils.isNullOrEmpty(this.id) ? (this.id = ('handle_' + pacemCore.Utils.uniqueCode())) : this.id;
1860
- bs._setHandle(this);
1861
- this.addEventListener('click', this._clickHandler, false);
1878
+ if (pacemCore.Utils.isNullOrEmpty(this.id)) {
1879
+ this.id = ('handle_' + pacemCore.Utils.uniqueCode());
1880
+ }
1881
+ pacemCore.CustomElementUtils.whenReady(bs, () => {
1882
+ bs._setHandle(this);
1883
+ this.addEventListener('click', this._clickHandler, false);
1884
+ });
1862
1885
  }
1863
1886
  _toggleHandle(disabled = this.disabled) {
1864
1887
  this.style.pointerEvents = disabled ? 'none' : '';
@@ -1883,6 +1906,7 @@
1883
1906
  </div>`
1884
1907
  })
1885
1908
  ], PacemBottomSheetHandleElement);
1909
+ /** Mobile-style panel anchored to the bottom of the viewport, draggable (via its {@link PacemBottomSheetHandleElement}) and swipeable open/closed. */
1886
1910
  let PacemBottomSheetElement = class PacemBottomSheetElement extends pacemCore.Components.PacemElement {
1887
1911
  constructor() {
1888
1912
  super(...arguments);
@@ -1941,7 +1965,7 @@
1941
1965
  swiper.disabled = disabled;
1942
1966
  }
1943
1967
  }
1944
- /** @internal */
1968
+ /** @internal Wires (or clears) the swiper's drag handle selector to the given {@link PacemBottomSheetHandleElement}. */
1945
1969
  _setHandle(handle) {
1946
1970
  if (pacemCore.Utils.isNull(handle)) {
1947
1971
  this._swiper.handleSelector = null;
@@ -2086,6 +2110,7 @@
2086
2110
  return c > 3 && r && Object.defineProperty(target, key, r), r;
2087
2111
  };
2088
2112
  //namespace Pacem.Components.UI {
2113
+ /** Set of buttons shown by a dialog (e.g. {@link PacemDialogBase}), controlling which {@link DialogButton}s are visible. */
2089
2114
  var DialogButtons;
2090
2115
  (function (DialogButtons) {
2091
2116
  DialogButtons["YesNo"] = "yesno";
@@ -2093,6 +2118,7 @@
2093
2118
  DialogButtons["Ok"] = "ok";
2094
2119
  DialogButtons["OkCancel"] = "okcancel";
2095
2120
  })(DialogButtons || (DialogButtons = {}));
2121
+ /** Single button a dialog can be committed/closed with. */
2096
2122
  var DialogButton;
2097
2123
  (function (DialogButton) {
2098
2124
  DialogButton["Yes"] = "yes";
@@ -2100,14 +2126,18 @@
2100
2126
  DialogButton["Cancel"] = "cancel";
2101
2127
  DialogButton["Ok"] = "ok";
2102
2128
  })(DialogButton || (DialogButton = {}));
2129
+ /** Event name dispatched by a {@link PacemDialogBase} when it is committed/closed via one of its buttons. */
2103
2130
  const DialogResultEventName = 'commit';
2131
+ /** Event dispatched by a {@link PacemDialogBase} when it is committed/closed via one of its buttons; also the resolution value of `open()`'s promise. */
2104
2132
  class DialogResultEvent extends pacemCore.CustomTypedEvent {
2105
2133
  constructor(args) {
2106
2134
  super(DialogResultEventName, args);
2107
2135
  }
2108
2136
  }
2137
+ /** Base class for modal dialog elements (see {@link PacemDialogElement}): wraps a {@link Lightbox} with an open/commit lifecycle resolved through a promise. */
2109
2138
  class PacemDialogBase extends pacemCore.Components.PacemElement {
2110
2139
  #deferred;
2140
+ /** Opens the dialog, optionally seeding its `state`. @returns A promise resolved with the {@link DialogResultEventArgs} once the dialog is committed. */
2111
2141
  open(state) {
2112
2142
  const lb = this.lightbox;
2113
2143
  if (!pacemCore.Utils.isNull(this.#deferred)) {
@@ -2125,6 +2155,7 @@
2125
2155
  }
2126
2156
  return deferred.promise;
2127
2157
  }
2158
+ /** Closes the dialog with the given button outcome, resolving the pending `open()` promise and dispatching a {@link DialogResultEvent}. */
2128
2159
  commit(btn, evt) {
2129
2160
  pacemCore.avoidHandler(evt);
2130
2161
  this.log(pacemCore.Logging.LogLevel.Debug, `Committing dialog by clicking '${btn}'.`);
@@ -2147,6 +2178,7 @@
2147
2178
  return c > 3 && r && Object.defineProperty(target, key, r), r;
2148
2179
  };
2149
2180
  //namespace Pacem.Components.UI {
2181
+ /** Clickable button element with optional icon, command dispatching (via {@link CommandEvent}) and an optional confirmation dialog gate. */
2150
2182
  let PacemButtonElement = class PacemButtonElement extends pacemCore.Components.PacemIterableElement {
2151
2183
  constructor() {
2152
2184
  super('button');
@@ -2245,6 +2277,7 @@
2245
2277
  return c > 3 && r && Object.defineProperty(target, key, r), r;
2246
2278
  };
2247
2279
  //namespace Pacem.Components.UI {
2280
+ /** Groups {@link PacemButtonElement} children into a single iterable/selectable set, focusing the item matching `index`. */
2248
2281
  let PacemButtonsetElement = class PacemButtonsetElement extends pacemCore.Components.PacemIterativeElement {
2249
2282
  connectedCallback() {
2250
2283
  super.connectedCallback();
@@ -2284,22 +2317,26 @@
2284
2317
  return c > 3 && r && Object.defineProperty(target, key, r), r;
2285
2318
  };
2286
2319
  //namespace Pacem.Components.UI {
2320
+ /** Granularity of a calendar/schedule/agenda view. */
2287
2321
  var CalendarZoom;
2288
2322
  (function (CalendarZoom) {
2289
2323
  CalendarZoom["Month"] = "month";
2290
2324
  CalendarZoom["Week"] = "week";
2291
2325
  CalendarZoom["Day"] = "day";
2292
2326
  })(CalendarZoom || (CalendarZoom = {}));
2327
+ /** Event dispatched by a {@link PacemCalendarBaseElement} whenever its `viewDate` changes, carrying the new date. */
2293
2328
  class ViewDateChangeEvent extends pacemCore.CustomTypedEvent {
2294
2329
  constructor(date) {
2295
2330
  super('viewdatechange', date);
2296
2331
  }
2297
2332
  }
2333
+ /** Event dispatched (and bubbling) when a day is selected on a {@link PacemCalendarElement}, carrying the selected date. */
2298
2334
  class DateSelectEvent extends pacemCore.CustomTypedEvent {
2299
2335
  constructor(date) {
2300
2336
  super('dateselect', date, { bubbles: true });
2301
2337
  }
2302
2338
  }
2339
+ /** Event dispatched (and bubbling) when a time slot is selected on a {@link PacemAgendaElement}, carrying the selected date/time. */
2303
2340
  class TimeSelectEvent extends pacemCore.CustomTypedEvent {
2304
2341
  constructor(date) {
2305
2342
  super('timeselect', date, { bubbles: true });
@@ -2312,6 +2349,7 @@
2312
2349
  let now = new Date();
2313
2350
  const DUMMY_DATE = pacemCore.Utils.Dates.dateOnly(now).valueOf();
2314
2351
  const DAYS_OF_WEEK = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];
2352
+ /** A single event/appointment item, meant as a child of a {@link PacemCalendarWithEventsBaseElement} (e.g. {@link PacemCalendarElement} or {@link PacemAgendaElement}). */
2315
2353
  let PacemCalendarEventElement = class PacemCalendarEventElement extends pacemCore.Components.PacemItemElement {
2316
2354
  propertyChangedCallback(name, old, val, first) {
2317
2355
  super.propertyChangedCallback(name, old, val, first);
@@ -2345,16 +2383,19 @@
2345
2383
  tagName: pacemCore.P + '-calendar-event'
2346
2384
  })
2347
2385
  ], PacemCalendarEventElement);
2386
+ /** Event dispatched when a {@link PacemCalendarEventElement} rendering gains focus/selection within its host calendar. */
2348
2387
  class CalendarEventSelectEvent extends pacemCore.CustomTypedEvent {
2349
2388
  constructor(args) {
2350
2389
  super("eventselect", args, { bubbles: false, cancelable: true });
2351
2390
  }
2352
2391
  }
2392
+ /** Event dispatched when a {@link PacemCalendarEventElement} rendering loses focus/selection within its host calendar. */
2353
2393
  class CalendarEventUnselectEvent extends pacemCore.CustomTypedEvent {
2354
2394
  constructor(args) {
2355
2395
  super("eventunselect", args, { bubbles: false, cancelable: true });
2356
2396
  }
2357
2397
  }
2398
+ /** Base class shared by the calendar-family elements ({@link PacemCalendarElement}, {@link PacemAgendaElement}, {@link PacemScheduleElement}): holds the current view date/zoom/week/month grids and the {@link PacemCalendarEventElement} items collection. */
2358
2399
  class PacemCalendarBaseElement extends pacemCore.Components.PacemItemsContainerElement {
2359
2400
  validate(item) {
2360
2401
  return item instanceof PacemCalendarEventElement;
@@ -2512,11 +2553,13 @@
2512
2553
  __decorate$s([
2513
2554
  pacemCore.Watch({ converter: pacemCore.PropertyConverters.Eval })
2514
2555
  ], PacemCalendarBaseElement.prototype, "disabledRanges", void 0);
2556
+ /** Base class for calendar-family elements that render their {@link PacemCalendarEventElement} items into a positioned grid (see {@link PacemCalendarElement}, {@link PacemAgendaElement}); subclasses supply the grid-building logic via `buildDataSource`. */
2515
2557
  class PacemCalendarWithEventsBaseElement extends PacemCalendarBaseElement {
2516
2558
  constructor() {
2517
2559
  super(...arguments);
2518
2560
  this._datasource = [];
2519
2561
  }
2562
+ /** @readonly Gets the computed, per-row (week or day) grid of positioned event items ready for rendering. */
2520
2563
  get datasource() {
2521
2564
  return this._datasource;
2522
2565
  }
@@ -2595,6 +2638,7 @@
2595
2638
  }
2596
2639
  return grid;
2597
2640
  }
2641
+ /** Renders a day/week hourly grid ("agenda" view) with an all-day row, placing {@link PacemCalendarEventElement} items on the timeline and dispatching {@link TimeSelectEvent} on slot click. */
2598
2642
  let PacemAgendaElement = class PacemAgendaElement extends PacemCalendarWithEventsBaseElement {
2599
2643
  constructor() {
2600
2644
  super(...arguments);
@@ -2656,6 +2700,7 @@
2656
2700
  }
2657
2701
  return ds;
2658
2702
  }
2703
+ /** @readonly Gets the computed all-day row of positioned event items ready for rendering. */
2659
2704
  get allDayDatasource() {
2660
2705
  return this._allDayDatasource;
2661
2706
  }
@@ -2725,6 +2770,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
2725
2770
  }
2726
2771
  return grid;
2727
2772
  }
2773
+ /** Renders a classic month grid, placing {@link PacemCalendarEventElement} items on their spanning day cells and dispatching {@link DateSelectEvent} on day click. */
2728
2774
  let PacemCalendarElement = class PacemCalendarElement extends PacemCalendarWithEventsBaseElement {
2729
2775
  buildDataSource(items) {
2730
2776
  const month = this.month;
@@ -2795,6 +2841,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
2795
2841
  ], PacemCalendarElement);
2796
2842
  // #endregion
2797
2843
  // #region CLOCK (to be worked on: many possibilities ahead)
2844
+ /** Displays (and CSS-classes itself by) the current hour/minute; typically overlaid on a {@link PacemAgendaElement} to mark the current-time line. */
2798
2845
  let PacemClockElement = class PacemClockElement extends pacemCore.Components.PacemElement {
2799
2846
  };
2800
2847
  __decorate$s([
@@ -2813,6 +2860,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
2813
2860
  "dock_" + pacemCore.Utils.uniqueCode();
2814
2861
  return `<div class="schedule-header schedule-grid"><div class="heading-left"></div>${header}</div>`;
2815
2862
  }
2863
+ /** Combines a {@link PacemCalendarElement} (month view) and a {@link PacemAgendaElement} (day/week view) into a single scheduler, switching between them based on `zoom`. */
2816
2864
  let PacemScheduleElement = class PacemScheduleElement extends PacemCalendarBaseElement {
2817
2865
  viewActivatedCallback() {
2818
2866
  super.viewActivatedCallback();
@@ -2849,6 +2897,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
2849
2897
  ], PacemScheduleElement);
2850
2898
  // #endregion
2851
2899
  // #region RULES
2900
+ /** Base class for declarative rule elements that compute and inject {@link DateRange}s into an ancestor {@link PacemCalendarBaseElement}'s `disabledRanges` (e.g. {@link PacemCalendarDayOfWeekRuleElement}). */
2852
2901
  class PacemCalendarRuleBaseElement extends HTMLElement {
2853
2902
  constructor() {
2854
2903
  super(...arguments);
@@ -2865,6 +2914,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
2865
2914
  disconnectedCallback() {
2866
2915
  this._target = undefined;
2867
2916
  }
2917
+ /** @readonly Gets the ancestor calendar element this rule applies its disabled ranges to. */
2868
2918
  get target() {
2869
2919
  return this._target;
2870
2920
  }
@@ -2892,6 +2942,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
2892
2942
  __decorate$s([
2893
2943
  pacemCore.Debounce(true)
2894
2944
  ], PacemCalendarRuleBaseElement.prototype, "refreshDisabledRanges", null);
2945
+ /** Declarative {@link PacemCalendarRuleBaseElement} that disables every day of the ancestor calendar not listed in `days` (e.g. weekends). */
2895
2946
  let PacemCalendarDayOfWeekRuleElement = class PacemCalendarDayOfWeekRuleElement extends PacemCalendarRuleBaseElement {
2896
2947
  constructor() {
2897
2948
  super(...arguments);
@@ -2940,6 +2991,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
2940
2991
  return c > 3 && r && Object.defineProperty(target, key, r), r;
2941
2992
  };
2942
2993
  //namespace Pacem.Components.UI {
2994
+ /** Animates its content's height (or width, if `horizontal`) between 0 and its natural size, toggled via the `collapse` property. */
2943
2995
  let PacemCollapseElement = class PacemCollapseElement extends pacemCore.PacemEventTarget {
2944
2996
  constructor() {
2945
2997
  super(...arguments);
@@ -3011,13 +3063,19 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
3011
3063
  return c > 3 && r && Object.defineProperty(target, key, r), r;
3012
3064
  };
3013
3065
  //namespace Pacem.Components.UI {
3066
+ /** Modal dialog built on top of a {@link PacemLightboxElement}, with a configurable Ok/Yes/No/Cancel button set (see {@link DialogButtons}). */
3014
3067
  let PacemDialogElement = class PacemDialogElement extends PacemDialogBase {
3015
3068
  constructor() {
3016
3069
  super(...arguments);
3070
+ /** Gets or sets which button set is shown (Ok, OkCancel, YesNo, YesNoCancel). */
3017
3071
  this.buttons = DialogButtons.Ok;
3072
+ /** Gets or sets the caption of the Ok button. */
3018
3073
  this.okCaption = 'OK';
3074
+ /** Gets or sets the caption of the Yes button. */
3019
3075
  this.yesCaption = 'Yes';
3076
+ /** Gets or sets the caption of the No button. */
3020
3077
  this.noCaption = 'No';
3078
+ /** Gets or sets the caption of the Cancel button. */
3021
3079
  this.cancelCaption = 'Cancel';
3022
3080
  }
3023
3081
  propertyChangedCallback(name, old, val, first) {
@@ -3049,7 +3107,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
3049
3107
  // }
3050
3108
  //});
3051
3109
  }
3052
- /** Gets the 'ok', 'yes', 'no' and 'cancel' dialog buttons. */
3110
+ /** @readonly Gets the 'ok', 'yes', 'no' and 'cancel' dialog buttons. */
3053
3111
  get dialogButtons() {
3054
3112
  const btns = this._buttons;
3055
3113
  return {
@@ -3106,6 +3164,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
3106
3164
  return c > 3 && r && Object.defineProperty(target, key, r), r;
3107
3165
  };
3108
3166
  //namespace Pacem.Components.UI {
3167
+ /** ARIA-`separator` element drawing a horizontal or vertical divider line, with optional `prepend`/`append` slotted content. */
3109
3168
  let PacemDividerElement = class PacemDividerElement extends pacemCore.Components.PacemElement {
3110
3169
  constructor() {
3111
3170
  super('separator');
@@ -3233,6 +3292,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
3233
3292
  }
3234
3293
  });
3235
3294
  }
3295
+ /** Renders an icon from a wide range of notations (inline SVG, Font Awesome, Material Symbols/Icons, LineIcons, CoreUI, or a plain image URL), lazily importing the matching stylesheet/script on demand. */
3236
3296
  let PacemIconElement = class PacemIconElement extends pacemCore.Components.PacemElement {
3237
3297
  constructor() {
3238
3298
  super('', { hidden: 'true' });
@@ -3283,6 +3343,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
3283
3343
  return c > 3 && r && Object.defineProperty(target, key, r), r;
3284
3344
  };
3285
3345
  //namespace Pacem.Components.UI {
3346
+ /** Renders an image as a CSS background (rather than an `<img>` src), enabling `cover`/`contain`/`auto` fitting and reporting its natural/decoded size. */
3286
3347
  let PacemImageElement = class PacemImageElement extends pacemCore.Components.PacemElement {
3287
3348
  constructor() {
3288
3349
  super('img');
@@ -3391,6 +3452,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
3391
3452
  return c > 3 && r && Object.defineProperty(target, key, r), r;
3392
3453
  };
3393
3454
  //namespace Pacem.Components.UI {
3455
+ /** Watches a scrollable `container` and dispatches a `fetchmore` event whenever the user scrolls within `threshold` pixels of the bottom. */
3394
3456
  let PacemInfiniteScrollerElement = class PacemInfiniteScrollerElement extends pacemCore.PacemEventTarget {
3395
3457
  constructor() {
3396
3458
  super();
@@ -3431,6 +3493,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
3431
3493
  break;
3432
3494
  }
3433
3495
  }
3496
+ /** Re-targets the watched scroll container/viewport/scroll-event-source. @param v An element, a CSS selector, or `'$document'` for the whole page. */
3434
3497
  setInfiniteScrollContainer(v = '$document') {
3435
3498
  var cont = v;
3436
3499
  var isDoc = this._isDocument = cont === '$document' || cont === document.body || cont === document.documentElement;
@@ -3526,21 +3589,26 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
3526
3589
  return c > 3 && r && Object.defineProperty(target, key, r), r;
3527
3590
  };
3528
3591
  //namespace Pacem.Components.UI {
3592
+ /** Base class for elements iterating a `datasource` under the control of a {@link PacemAdapterElement} (e.g. a slideshow), exposing `index`-relative helpers (`isPrevious`, `isNext`, `isCloseTo`). */
3529
3593
  class PacemAdaptedIterativeElement extends pacemCore.Components.PacemElement {
3530
3594
  constructor() {
3531
3595
  super(...arguments);
3596
+ /** Gets or sets the currently focused item's index within `datasource`. */
3532
3597
  this.index = 0;
3533
3598
  }
3599
+ /** Gets whether `ndx` is the focused item itself, or immediately adjacent (previous/next, wrapping around) to `focusndx`. */
3534
3600
  isCloseTo(ndx, focusndx) {
3535
3601
  if (pacemCore.Utils.isNull(this.datasource) || this.datasource.length == 0)
3536
3602
  return false;
3537
3603
  return /*this.adapter.isClose(ndx) ||*/ this._isCloseToCore(ndx, focusndx, this.datasource.length);
3538
3604
  }
3605
+ /** Gets whether `ndx` is the item immediately preceding `focusndx` (wrapping around the datasource). */
3539
3606
  isPrevious(ndx, focusndx) {
3540
3607
  if (pacemCore.Utils.isNull(this.datasource) || this.datasource.length == 0)
3541
3608
  return false;
3542
3609
  return /*this.adapter.isPrevious(ndx) ||*/ this._isPreviousCore(ndx, focusndx, this.datasource.length);
3543
3610
  }
3611
+ /** Gets whether `ndx` is the item immediately following `focusndx` (wrapping around the datasource). */
3544
3612
  isNext(ndx, focusndx) {
3545
3613
  if (pacemCore.Utils.isNull(this.datasource) || this.datasource.length == 0)
3546
3614
  return false;
@@ -3565,6 +3633,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
3565
3633
  ], PacemAdaptedIterativeElement.prototype, "datasource", void 0);
3566
3634
 
3567
3635
  //namespace Pacem.Components.UI {
3636
+ /** How a {@link Lightbox} reacts to a click outside its content. */
3568
3637
  var LightboxBehavior;
3569
3638
  (function (LightboxBehavior) {
3570
3639
  LightboxBehavior["ClickOutsideClose"] = "clickOutsideClose";
@@ -3579,6 +3648,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
3579
3648
  };
3580
3649
  //namespace Pacem.Components.UI {
3581
3650
  // TODO: shadow-ize lightbox (slots, parts, ...) in the next version 0.5x.x.
3651
+ /** Full-viewport overlay ("lightbox") element showing its slotted content above a backdrop, with an auto-injected close button and optional modal (non-dismissible) behavior. */
3582
3652
  let PacemLightboxElement = class PacemLightboxElement extends pacemCore.Components.PacemElement {
3583
3653
  constructor() {
3584
3654
  super(...arguments);
@@ -3789,12 +3859,14 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
3789
3859
  return c > 3 && r && Object.defineProperty(target, key, r), r;
3790
3860
  };
3791
3861
  //namespace Pacem.Components.UI {
3862
+ /** Visual style of a {@link PacemLoaderElement}'s spinner. */
3792
3863
  var LoaderType;
3793
3864
  (function (LoaderType) {
3794
3865
  LoaderType["Spinner"] = "spin";
3795
3866
  LoaderType["Pacem"] = "pacem";
3796
3867
  LoaderType["Custom"] = "custom";
3797
3868
  })(LoaderType || (LoaderType = {}));
3869
+ /** Shows a spinner (plain CSS or the branded Pacem gear/SVG animation) while `active`, typically overlaid on content being loaded. */
3798
3870
  let PacemLoaderElement = class PacemLoaderElement extends pacemCore.Components.PacemElement {
3799
3871
  viewActivatedCallback() {
3800
3872
  super.viewActivatedCallback();
@@ -4080,6 +4152,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
4080
4152
  return `<span class="${token.type}">${token.text}</span>`;
4081
4153
  }
4082
4154
  };
4155
+ /** Parses Markdown into HTML, extended with C-like/script/markup code-fence highlighting and Pacem-specific inline embeds (`{tweet}(id)`, `{yt}(id)`). */
4083
4156
  class MarkdownService {
4084
4157
  constructor() {
4085
4158
  const grammar = [
@@ -4106,9 +4179,11 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
4106
4179
  // no html allowed
4107
4180
  return (md ?? '').replace(/</g, '&lt;');
4108
4181
  }
4182
+ /** Converts the given Markdown source into an HTML string. */
4109
4183
  toHtml(md) {
4110
4184
  return this.#md.toHtml(this._escape(md), this.#grammar, RULES_TO_HTML);
4111
4185
  }
4186
+ /** Tokenizes the given Markdown source, without rendering it to HTML. */
4112
4187
  tokenize(md) {
4113
4188
  return this.#md.tokenize(this._escape(md), this.#grammar);
4114
4189
  }
@@ -4121,6 +4196,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
4121
4196
  return c > 3 && r && Object.defineProperty(target, key, r), r;
4122
4197
  };
4123
4198
  //namespace Pacem.Components.UI {
4199
+ /** Renders its `value` property, interpreted as Markdown, as this element's inner HTML. */
4124
4200
  let PacemMarkdownElement = class PacemMarkdownElement extends pacemCore.Components.PacemElement {
4125
4201
  constructor(_md = new MarkdownService()) {
4126
4202
  super();
@@ -4133,9 +4209,11 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
4133
4209
  }
4134
4210
  }
4135
4211
  // IDEA: allow extensible parsing (grammar components?...)
4212
+ /** Tokenizes the given (or current `value`) Markdown source. */
4136
4213
  tokens(md = this.value) {
4137
4214
  return this._md.tokenize(md);
4138
4215
  }
4216
+ /** Converts the given (or current `value`) Markdown source to an HTML string. */
4139
4217
  html(md = this.value) {
4140
4218
  return this._md.toHtml(md);
4141
4219
  }
@@ -4154,6 +4232,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
4154
4232
  return c > 3 && r && Object.defineProperty(target, key, r), r;
4155
4233
  };
4156
4234
  //namespace Pacem.Components.UI {
4235
+ /** Continuously scrolls its content horizontally in a loop, like a classic marquee. */
4157
4236
  let PacemMarqueeElement = class PacemMarqueeElement extends pacemCore.Components.PacemElement {
4158
4237
  constructor() {
4159
4238
  super(...arguments);
@@ -4259,6 +4338,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
4259
4338
  const MEDIAQUERY_LANDSCAPE = `(orientation: landscape)`;
4260
4339
  const MEDIAQUERY_PREFERS_LIGHT = `(prefers-color-scheme: light)`;
4261
4340
  const MEDIAQUERY_PREFERS_DARK = `(prefers-color-scheme: dark)`;
4341
+ /** Evaluates a CSS media query and reflects its match state, dispatching `change`/`match`/`unmatch` events as it changes. */
4262
4342
  let PacemMediaQueryElement = class PacemMediaQueryElement extends pacemCore.PacemEventTarget {
4263
4343
  constructor() {
4264
4344
  super(...arguments);
@@ -4325,9 +4405,11 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
4325
4405
  };
4326
4406
  var PacemMenuCursorElement_1;
4327
4407
  //namespace Components.UI {
4408
+ /** Collapsible off-canvas/hamburger navigation menu, optionally synchronized with the enclosing shell's CSS classes. */
4328
4409
  let PacemMenuElement = class PacemMenuElement extends pacemCore.Components.PacemElement {
4329
4410
  constructor() {
4330
4411
  super(...arguments);
4412
+ /** Gets or sets whether the open/close and outset state toggle CSS classes on the ancestor shell. */
4331
4413
  this.synchronizeShell = true;
4332
4414
  this._stopPropagationHandlerConditional = (_) => {
4333
4415
  if (!pacemCore.Utils.isNull(this._container) && !pacemCore.Utils.isNull(this._base)) {
@@ -4421,6 +4503,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
4421
4503
  shadow: pacemCore.Defaults.USE_SHADOW_ROOT
4422
4504
  })
4423
4505
  ], PacemMenuElement);
4506
+ /** Animated cursor/indicator that tracks the anchor matching the current path within an ancestor `PacemMenuElement`. */
4424
4507
  let PacemMenuCursorElement = PacemMenuCursorElement_1 = class PacemMenuCursorElement extends pacemCore.Components.PacemElement {
4425
4508
  constructor() {
4426
4509
  super(...arguments);
@@ -4487,6 +4570,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
4487
4570
  return c > 3 && r && Object.defineProperty(target, key, r), r;
4488
4571
  };
4489
4572
  //namespace Pacem.Components.UI {
4573
+ /** Renders pagination buttons (first/previous/numbers/next/last, or a numeric-only strip) for a paged collection. */
4490
4574
  let PacemPagerElement = class PacemPagerElement extends pacemCore.Components.PacemElement {
4491
4575
  propertyChangedCallback(name, old, val, first) {
4492
4576
  super.propertyChangedCallback(name, old, val, first);
@@ -4597,6 +4681,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
4597
4681
  return c > 3 && r && Object.defineProperty(target, key, r), r;
4598
4682
  };
4599
4683
  //namespace Pacem.Components.UI {
4684
+ /** Declares a single `<source>` candidate (srcset/media/type) for an ancestor `PacemPictureElement`. */
4600
4685
  let PacemPictureSourceElement = class PacemPictureSourceElement extends pacemCore.Components.PacemItemElement {
4601
4686
  propertyChangedCallback(name, old, val, first) {
4602
4687
  super.propertyChangedCallback(name, old, val, first);
@@ -4620,6 +4705,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
4620
4705
  tagName: pacemCore.P + '-picture-source'
4621
4706
  })
4622
4707
  ], PacemPictureSourceElement);
4708
+ /** Responsive `<picture>` wrapper that builds its `<source>` elements from child `PacemPictureSourceElement` items. */
4623
4709
  let PacemPictureElement = class PacemPictureElement extends pacemCore.Components.PacemItemsContainerElement {
4624
4710
  constructor() {
4625
4711
  super('img', { 'label': 'picture' });
@@ -4658,6 +4744,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
4658
4744
  }
4659
4745
  super.disconnectedCallback();
4660
4746
  }
4747
+ /** Rebuilds the `<source>` elements from the current child `PacemPictureSourceElement` items. */
4661
4748
  refreshSources() {
4662
4749
  this._setSources();
4663
4750
  }
@@ -4752,6 +4839,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
4752
4839
  return c > 3 && r && Object.defineProperty(target, key, r), r;
4753
4840
  };
4754
4841
  //namespace Pacem.Components.UI {
4842
+ /** Horizontal progress bar with an optional textual caption. */
4755
4843
  let PacemProgressbarElement = class PacemProgressbarElement extends pacemCore.Components.PacemElement {
4756
4844
  constructor() {
4757
4845
  super('progressbar', { 'valuemin': '0%', 'valuemax': '100%', 'valuenow': '0%' });
@@ -4805,10 +4893,13 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
4805
4893
  return c > 3 && r && Object.defineProperty(target, key, r), r;
4806
4894
  };
4807
4895
  //namespace Pacem.Components.UI {
4896
+ /** Collapsible off-canvas drawer/sidebar, optionally synchronized with the enclosing shell's CSS classes. */
4808
4897
  let PacemSidebarElement = class PacemSidebarElement extends pacemCore.Components.PacemElement {
4809
4898
  constructor() {
4810
4899
  super(...arguments);
4900
+ /** Gets or sets whether the sidebar is open. */
4811
4901
  this.open = false;
4902
+ /** Gets or sets whether the open/close state toggles CSS classes on the ancestor shell. */
4812
4903
  this.synchronizeShell = true;
4813
4904
  }
4814
4905
  propertyChangedCallback(name, old, val, first) {
@@ -4864,6 +4955,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
4864
4955
  return c > 3 && r && Object.defineProperty(target, key, r), r;
4865
4956
  };
4866
4957
  //namespace Pacem.Components.UI {
4958
+ /** Single slide item hosted within a `PacemSlideshowElement`. */
4867
4959
  let PacemSlideElement = class PacemSlideElement extends pacemCore.Components.PacemIterableElement {
4868
4960
  };
4869
4961
  PacemSlideElement = __decorate$a([
@@ -4871,6 +4963,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
4871
4963
  tagName: pacemCore.P + '-slide'
4872
4964
  })
4873
4965
  ], PacemSlideElement);
4966
+ /** Iterates over `PacemSlideElement` children, exposing them as a navigable slideshow. */
4874
4967
  let PacemSlideshowElement = class PacemSlideshowElement extends pacemCore.Components.PacemIterativeElement {
4875
4968
  validate(item) {
4876
4969
  return item instanceof PacemSlideElement;
@@ -4889,6 +4982,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
4889
4982
  return c > 3 && r && Object.defineProperty(target, key, r), r;
4890
4983
  };
4891
4984
  //namespace Pacem.Components.UI.Social {
4985
+ /** Embeds a tweet, given its id, via Twitter's `widgets.js`. */
4892
4986
  let PacemTweetEmbedElement = class PacemTweetEmbedElement extends pacemCore.Components.PacemElement {
4893
4987
  constructor() {
4894
4988
  super(...arguments);
@@ -4927,11 +5021,15 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
4927
5021
  return c > 3 && r && Object.defineProperty(target, key, r), r;
4928
5022
  };
4929
5023
  //namespace Pacem.Components.UI {
5024
+ /** Determines how a `PacemStickyHeaderElement` behaves once the scroll offset passes its `threshold`. */
4930
5025
  var StickyHeaderVisibility;
4931
5026
  (function (StickyHeaderVisibility) {
5027
+ /** Stays pinned/visible once past the threshold. */
4932
5028
  StickyHeaderVisibility["Persistent"] = "persistent";
5029
+ /** Hides while scrolling down and reappears while scrolling up. */
4933
5030
  StickyHeaderVisibility["QuickReturn"] = "quickreturn";
4934
5031
  })(StickyHeaderVisibility || (StickyHeaderVisibility = {}));
5032
+ /** Header that reacts to page scroll, either staying pinned to the top of the shell or hiding/showing on scroll direction. */
4935
5033
  let PacemStickyHeaderElement = class PacemStickyHeaderElement extends pacemCore.PacemEventTarget {
4936
5034
  constructor() {
4937
5035
  super(...arguments);
@@ -5049,6 +5147,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
5049
5147
  },
5050
5148
  retryConversionWhenReady: true
5051
5149
  };
5150
+ /** Single tab item, pairing a `label` with its content, hosted within a `PacemTabsElement`. */
5052
5151
  let PacemTabElement = class PacemTabElement extends pacemCore.Components.PacemIterableElement {
5053
5152
  constructor() {
5054
5153
  super('tab');
@@ -5070,6 +5169,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
5070
5169
  super.disconnectedCallback();
5071
5170
  }
5072
5171
  #content;
5172
+ /** @readonly Gets the nodes assigned to the `label` slot. */
5073
5173
  get content() {
5074
5174
  return this.querySelectorAll('*[slot=label]');
5075
5175
  }
@@ -5088,6 +5188,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
5088
5188
  tagName: pacemCore.P + '-tab', shadow: true, template: `<slot name="label" part="label"></slot><slot></slot>`
5089
5189
  })
5090
5190
  ], PacemTabElement);
5191
+ /** Iterates over `PacemTabElement` children, rendering a tab strip (via an adapter) and animating the transition between the active tab's content. */
5091
5192
  let PacemTabsElement = class PacemTabsElement extends pacemCore.Components.PacemIterativeElement {
5092
5193
  constructor(_tweener = new pacemCore.Animations.TweenService()) {
5093
5194
  super("tablist");
@@ -5223,6 +5324,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
5223
5324
  return c > 3 && r && Object.defineProperty(target, key, r), r;
5224
5325
  };
5225
5326
  //namespace Pacem.Components.UI {
5327
+ /** Displays scrolling/ticking content, animating the swap whenever its `content` changes. */
5226
5328
  let PacemTickerElement = class PacemTickerElement extends pacemCore.Components.PacemSafeContentElement {
5227
5329
  constructor() {
5228
5330
  super(...arguments);
@@ -5302,10 +5404,13 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
5302
5404
  var PacemToastElement_1;
5303
5405
  //namespace Pacem.Components.UI {
5304
5406
  const PACEM_TOAST_POPS = "pacem:toast:pops";
5407
+ /** Dismissible toast/snackbar notification, with optional autohide. */
5305
5408
  let PacemToastElement = PacemToastElement_1 = class PacemToastElement extends pacemCore.Components.PacemElement {
5306
5409
  constructor() {
5307
5410
  super(...arguments);
5411
+ /** Gets or sets whether the toast automatically hides itself after `timeout` milliseconds. */
5308
5412
  this.autohide = true;
5413
+ /** Gets or sets the autohide delay, in milliseconds. */
5309
5414
  this.timeout = 3000;
5310
5415
  this._doHide = (evt) => {
5311
5416
  window.clearTimeout(this._handle);
@@ -5349,6 +5454,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
5349
5454
  this._handle = window.setTimeout(() => { this.show = false; }, this.timeout);
5350
5455
  }
5351
5456
  }
5457
+ /** Shows the toast, (re)starting the autohide timer if applicable. */
5352
5458
  popup() {
5353
5459
  if (this.show) {
5354
5460
  this._show();
@@ -5428,6 +5534,13 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
5428
5534
  toast.addEventListener('close', callback, false);
5429
5535
  });
5430
5536
  }
5537
+ /**
5538
+ * Like `toast`, but renders the message inside a filled/bordered container for extra emphasis.
5539
+ * @param toaster Toast container
5540
+ * @param level Message criticity level
5541
+ * @param message The message
5542
+ * @param options Further options object
5543
+ */
5431
5544
  static toast2(toaster, level, message, options) {
5432
5545
  let cssClass = options?.cssClass;
5433
5546
  let cssArray = ['fill-' + level + '-container', 'fill-glass', 'border-solid', 'border-size--2', 'border-round', 'border-radius--6'];
@@ -5470,6 +5583,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
5470
5583
  return c > 3 && r && Object.defineProperty(target, key, r), r;
5471
5584
  };
5472
5585
  //namespace Components.UI {
5586
+ /** Table-of-contents that lists the headings/elements matched by `selector`, highlighting and scrolling to the currently focused one. */
5473
5587
  let PacemTocElement = class PacemTocElement extends pacemCore.Components.PacemElement {
5474
5588
  constructor(_tweener = new pacemCore.Animations.TweenService()) {
5475
5589
  super();
@@ -5647,11 +5761,14 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
5647
5761
  y: cy + (r * Math.sin(theta))
5648
5762
  };
5649
5763
  }
5764
+ /** Circular dial/knob control for picking a numeric value between `min` and `max` by rotating a handle. */
5650
5765
  let PacemTunerElement = class PacemTunerElement extends pacemCore.Components.PacemElement {
5651
5766
  constructor() {
5652
5767
  super();
5653
5768
  //#region INTERACTIVE
5769
+ /** Gets or sets the minimum selectable value. */
5654
5770
  this.min = 0.0;
5771
+ /** Gets or sets the maximum selectable value. */
5655
5772
  this.max = 100.0;
5656
5773
  this._rotateStartHandler = (evt) => {
5657
5774
  const angle = this.#angle = this._getAngle(evt);
@@ -5838,7 +5955,9 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
5838
5955
  return c > 3 && r && Object.defineProperty(target, key, r), r;
5839
5956
  };
5840
5957
  //namespace Pacem.Components.UI {
5958
+ /** Triggers the device's vibration hardware (via the Vibration API) with a configurable pattern. */
5841
5959
  let PacemVibrateElement = class PacemVibrateElement extends pacemCore.PacemEventTarget {
5960
+ /** Triggers a vibration using the current `pattern`, if supported by the browser and not disabled. */
5842
5961
  vibrate() {
5843
5962
  if (this.disabled) {
5844
5963
  return;
@@ -5883,6 +6002,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
5883
6002
  convertBack: (prop) => (prop instanceof Element && prop.id) ? ('#' + prop.id) : prop,
5884
6003
  retryConversionWhenReady: true
5885
6004
  };
6005
+ /** Fetches and renders remote HTML (or a local `<template>`'s content) as its own inner content, dispatching `prerender`/`render` lifecycle events. */
5886
6006
  let PacemViewElement = class PacemViewElement extends pacemCore.PacemEventTarget {
5887
6007
  constructor() {
5888
6008
  super(...arguments);
@@ -6097,6 +6217,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
6097
6217
  };
6098
6218
  //namespace Pacem.Components.UI {
6099
6219
  const HANDLE_CSS = 'window-title';
6220
+ /** Container that arranges `PacemWindowElement` children as draggable/resizable floating windows, or docks them one at a time via an adapter. */
6100
6221
  let PacemWindowAreaElement = class PacemWindowAreaElement extends pacemCore.Components.PacemIterativeElement {
6101
6222
  constructor() {
6102
6223
  super(...arguments);
@@ -6181,6 +6302,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
6181
6302
  this._syncVisibility();
6182
6303
  }
6183
6304
  }
6305
+ /** Registers a window item, wiring drag/resize behaviors and focus tracking; returns whether it was newly added. */
6184
6306
  register(item) {
6185
6307
  const retval = super.register(item);
6186
6308
  if (retval) {
@@ -6195,6 +6317,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
6195
6317
  }
6196
6318
  return retval;
6197
6319
  }
6320
+ /** Unregisters a window item, tearing down its drag/resize behaviors; returns whether it was found and removed. */
6198
6321
  unregister(item) {
6199
6322
  const retval = super.unregister(item);
6200
6323
  if (retval) {
@@ -6228,6 +6351,7 @@ css-class="{{ ['hour-start-'+ (^item.hour + 1), 'hour-end-'+ (^item.hour + ^item
6228
6351
  tagName: pacemCore.P + '-window-area'
6229
6352
  })
6230
6353
  ], PacemWindowAreaElement);
6354
+ /** Single draggable, resizable, and dockable window pane hosted within a `PacemWindowAreaElement`. */
6231
6355
  let PacemWindowElement = class PacemWindowElement extends pacemCore.Components.PacemIterableElement {
6232
6356
  propertyChangedCallback(name, old, val, first) {
6233
6357
  super.propertyChangedCallback(name, old, val, first);