@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.
- package/dist/browser/pacem-2d.js +149 -2
- package/dist/browser/pacem-2d.js.map +1 -1
- package/dist/browser/pacem-2d.min.js +1 -1
- package/dist/browser/pacem-3d.js +646 -2
- package/dist/browser/pacem-3d.js.map +1 -1
- package/dist/browser/pacem-3d.min.js +1 -1
- package/dist/browser/pacem-charts.js +21 -1
- package/dist/browser/pacem-charts.js.map +1 -1
- package/dist/browser/pacem-charts.min.js +1 -1
- package/dist/browser/pacem-cms.js +118 -3
- package/dist/browser/pacem-cms.js.map +1 -1
- package/dist/browser/pacem-cms.min.js +1 -1
- package/dist/browser/pacem-core.js +870 -9
- package/dist/browser/pacem-core.js.map +1 -1
- package/dist/browser/pacem-core.min.js +2 -2
- package/dist/browser/pacem-foundation.js +296 -1
- package/dist/browser/pacem-foundation.js.map +1 -1
- package/dist/browser/pacem-foundation.min.js +1 -1
- package/dist/browser/pacem-fx.js +18 -1
- package/dist/browser/pacem-fx.js.map +1 -1
- package/dist/browser/pacem-fx.min.js +1 -1
- package/dist/browser/pacem-logging.js +15 -1
- package/dist/browser/pacem-logging.js.map +1 -1
- package/dist/browser/pacem-logging.min.js +1 -1
- package/dist/browser/pacem-maps.js +97 -1
- package/dist/browser/pacem-maps.js.map +1 -1
- package/dist/browser/pacem-maps.min.js +1 -1
- package/dist/browser/pacem-media.js +14 -1
- package/dist/browser/pacem-media.js.map +1 -1
- package/dist/browser/pacem-media.min.js +1 -1
- package/dist/browser/pacem-networking.js +22 -1
- package/dist/browser/pacem-networking.js.map +1 -1
- package/dist/browser/pacem-networking.min.js +1 -1
- package/dist/browser/pacem-numerical.js +360 -1
- package/dist/browser/pacem-numerical.js.map +1 -1
- package/dist/browser/pacem-numerical.min.js +1 -1
- package/dist/browser/pacem-plus.js +195 -4
- package/dist/browser/pacem-plus.js.map +1 -1
- package/dist/browser/pacem-plus.min.js +1 -1
- package/dist/browser/pacem-scaffolding.js +420 -38
- package/dist/browser/pacem-scaffolding.js.map +1 -1
- package/dist/browser/pacem-scaffolding.min.js +2 -2
- package/dist/browser/pacem-ui.js +143 -19
- package/dist/browser/pacem-ui.js.map +1 -1
- package/dist/browser/pacem-ui.min.js +2 -2
- package/dist/bundle/pacem.min.mjs +147 -147
- package/dist/bundle/pacem.mjs +2905 -1417
- package/dist/bundle/pacem.mjs.map +3 -3
- package/dist/docs/pacem-2d.json +11549 -0
- package/dist/docs/pacem-3d.json +29096 -0
- package/dist/docs/pacem-charts.json +4244 -0
- package/dist/docs/pacem-cms.json +9325 -0
- package/dist/docs/pacem-core.json +40109 -0
- package/dist/docs/pacem-foundation.json +8941 -0
- package/dist/docs/pacem-fx.json +3121 -0
- package/dist/docs/pacem-logging.json +941 -0
- package/dist/docs/pacem-maps.json +17387 -0
- package/dist/docs/pacem-media.json +1203 -0
- package/dist/docs/pacem-networking.json +1798 -0
- package/dist/docs/pacem-numerical.json +13706 -0
- package/dist/docs/pacem-plus.json +8468 -0
- package/dist/docs/pacem-scaffolding.json +34788 -0
- package/dist/docs/pacem-ui.json +18628 -0
- package/dist/typings/index.d.ts +4109 -31
- package/dist/vscode.html-custom.json +1303 -741
- package/package.json +4 -2
package/dist/browser/pacem-ui.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @pacem/pacem v1.0.0-
|
|
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
|
-
|
|
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
|
-
|
|
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)
|
|
1860
|
-
|
|
1861
|
-
|
|
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, '<');
|
|
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);
|