@nvidia-elements/core 2.9.0 → 2.11.0
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/CHANGELOG.md +23 -0
- package/README.md +3 -7
- package/dist/accordion/accordion.d.ts +4 -4
- package/dist/accordion/accordion2.js +4 -4
- package/dist/alert/alert-group.d.ts +1 -1
- package/dist/alert/alert-group2.js +1 -1
- package/dist/alert/alert.d.ts +1 -1
- package/dist/alert/alert2.js +1 -1
- package/dist/avatar/avatar-group.d.ts +1 -1
- package/dist/avatar/avatar-group2.js +1 -1
- package/dist/avatar/avatar.d.ts +1 -1
- package/dist/avatar/avatar2.js +1 -1
- package/dist/badge/badge.d.ts +1 -1
- package/dist/badge/badge2.js +1 -1
- package/dist/breadcrumb/breadcrumb.d.ts +2 -1
- package/dist/breadcrumb/breadcrumb2.js +1 -1
- package/dist/breadcrumb/breadcrumb2.js.map +1 -1
- package/dist/bundles/index.d.ts +183 -44
- package/dist/bundles/index.js +6 -6
- package/dist/button/button.d.ts +1 -1
- package/dist/button/button2.js +1 -1
- package/dist/button-group/button-group.d.ts +1 -1
- package/dist/button-group/button-group2.js +1 -1
- package/dist/card/card.d.ts +4 -4
- package/dist/card/card2.js +4 -4
- package/dist/chat-message/chat-message.d.ts +1 -1
- package/dist/chat-message/chat-message2.js +1 -1
- package/dist/checkbox/checkbox-group2.js +1 -1
- package/dist/checkbox/checkbox2.js +1 -1
- package/dist/color/color.d.ts +1 -1
- package/dist/color/color2.js +1 -1
- package/dist/combobox/combobox.d.ts +2 -2
- package/dist/combobox/combobox2.js +1 -1
- package/dist/copy-button/copy-button.d.ts +1 -1
- package/dist/copy-button/copy-button2.js +1 -1
- package/dist/custom-elements-jsx.d.ts +117 -25
- package/dist/custom-elements-vue.d.ts +115 -25
- package/dist/custom-elements.json +1075 -916
- package/dist/data.html.json +55 -7
- package/dist/data.snippets.json +45 -45
- package/dist/date/date.d.ts +1 -1
- package/dist/date/date2.js +1 -1
- package/dist/datetime/datetime.d.ts +1 -1
- package/dist/datetime/datetime2.js +1 -1
- package/dist/dialog/dialog-footer.d.ts +1 -1
- package/dist/dialog/dialog-footer2.js +1 -1
- package/dist/dialog/dialog-header.d.ts +1 -1
- package/dist/dialog/dialog-header2.js +1 -1
- package/dist/dialog/dialog.d.ts +1 -1
- package/dist/dialog/dialog2.js +1 -1
- package/dist/divider/divider.d.ts +1 -1
- package/dist/divider/divider2.js +1 -1
- package/dist/dot/dot.d.ts +1 -1
- package/dist/dot/dot2.js +1 -1
- package/dist/drawer/drawer-content.d.ts +1 -1
- package/dist/drawer/drawer-content2.js +1 -1
- package/dist/drawer/drawer-footer.d.ts +1 -1
- package/dist/drawer/drawer-footer2.js +1 -1
- package/dist/drawer/drawer-header.d.ts +1 -1
- package/dist/drawer/drawer-header2.js +1 -1
- package/dist/drawer/drawer.d.ts +1 -1
- package/dist/drawer/drawer2.js +1 -1
- package/dist/dropdown/dropdown-footer.d.ts +1 -1
- package/dist/dropdown/dropdown-footer2.js +1 -1
- package/dist/dropdown/dropdown-header.d.ts +1 -1
- package/dist/dropdown/dropdown-header2.js +1 -1
- package/dist/dropdown/dropdown.d.ts +1 -1
- package/dist/dropdown/dropdown2.js +1 -1
- package/dist/dropdown-group/dropdown-group.d.ts +1 -1
- package/dist/dropdown-group/dropdown-group.js +1 -1
- package/dist/dropzone/dropzone.d.ts +1 -1
- package/dist/dropzone/dropzone2.js +1 -1
- package/dist/file/file2.js +1 -1
- package/dist/format-bytes/format-bytes.d.ts +1 -1
- package/dist/format-bytes/format-bytes2.js +1 -1
- package/dist/format-datetime/format-datetime.d.ts +1 -1
- package/dist/format-datetime/format-datetime2.js +1 -1
- package/dist/format-number/format-number.d.ts +1 -1
- package/dist/format-number/format-number2.js +1 -1
- package/dist/format-relative-time/format-relative-time.d.ts +1 -1
- package/dist/format-relative-time/format-relative-time2.js +1 -1
- package/dist/format-truncate/format-truncate2.js +1 -1
- package/dist/forms/control/control2.js +1 -1
- package/dist/forms/control-group/control-group.d.ts +3 -1
- package/dist/forms/control-group/control-group2.js +1 -1
- package/dist/forms/control-group/control-group2.js.map +1 -1
- package/dist/forms/control-message/control-message.d.ts +1 -1
- package/dist/forms/control-message/control-message2.js +1 -1
- package/dist/gauge/gauge.d.ts +1 -1
- package/dist/gauge/gauge2.js +1 -1
- package/dist/grid/cell/cell.d.ts +1 -1
- package/dist/grid/cell/cell2.js +1 -1
- package/dist/grid/column/column.d.ts +1 -1
- package/dist/grid/column/column2.js +1 -1
- package/dist/grid/footer/footer.d.ts +1 -1
- package/dist/grid/footer/footer2.js +1 -1
- package/dist/grid/grid.d.ts +3 -1
- package/dist/grid/grid2.js +1 -1
- package/dist/grid/grid2.js.map +1 -1
- package/dist/grid/header/header.d.ts +1 -1
- package/dist/grid/header/header2.js +1 -1
- package/dist/grid/placeholder/placeholder.d.ts +1 -1
- package/dist/grid/placeholder/placeholder2.js +1 -1
- package/dist/grid/row/row.d.ts +1 -1
- package/dist/grid/row/row2.js +1 -1
- package/dist/icon/icon.d.ts +1 -1
- package/dist/icon/icon2.js +2 -2
- package/dist/icon-button/icon-button.d.ts +1 -1
- package/dist/icon-button/icon-button2.js +1 -1
- package/dist/index.js +1 -1
- package/dist/input/input-group2.js +1 -1
- package/dist/input/input2.js +1 -1
- package/dist/internal/controllers/keynav-list.controller.js.map +1 -1
- package/dist/internal/services/global.service.js +1 -1
- package/dist/internal/types/index.d.ts +6 -2
- package/dist/internal/types/index.js.map +1 -1
- package/dist/internal/utils/audit.js +1 -1
- package/dist/internal/utils/audit.js.map +1 -1
- package/dist/internal/utils/dom.d.ts +3 -1
- package/dist/internal/utils/dom.js.map +1 -1
- package/dist/logo/logo.d.ts +1 -1
- package/dist/logo/logo2.js +1 -1
- package/dist/menu/define.d.ts +2 -1
- package/dist/menu/define.js +3 -2
- package/dist/menu/define.js.map +1 -1
- package/dist/menu/index.d.ts +1 -0
- package/dist/menu/index.js +3 -2
- package/dist/menu/menu-group.d.ts +50 -0
- package/dist/menu/menu-group.js +6 -0
- package/dist/menu/menu-group.js.map +1 -0
- package/dist/menu/menu-group2.js +53 -0
- package/dist/menu/menu-group2.js.map +1 -0
- package/dist/menu/menu-item.d.ts +2 -1
- package/dist/menu/menu-item.js +1 -1
- package/dist/menu/menu-item.js.map +1 -1
- package/dist/menu/menu-item2.js +2 -2
- package/dist/menu/menu-item2.js.map +1 -1
- package/dist/menu/menu.d.ts +7 -2
- package/dist/menu/menu.examples.js.map +1 -1
- package/dist/menu/menu.examples.json +53 -13
- package/dist/menu/menu.global.js +1 -1
- package/dist/menu/menu.global.js.map +1 -1
- package/dist/menu/menu2.js +16 -8
- package/dist/menu/menu2.js.map +1 -1
- package/dist/month/month.d.ts +1 -1
- package/dist/month/month2.js +1 -1
- package/dist/notification/notification-group.d.ts +1 -1
- package/dist/notification/notification-group2.js +1 -1
- package/dist/notification/notification.d.ts +1 -1
- package/dist/notification/notification2.js +1 -1
- package/dist/page/page-panel/page-panel-content.d.ts +1 -1
- package/dist/page/page-panel/page-panel-content2.js +1 -1
- package/dist/page/page-panel/page-panel-footer.d.ts +1 -1
- package/dist/page/page-panel/page-panel-footer2.js +1 -1
- package/dist/page/page-panel/page-panel-header.d.ts +1 -1
- package/dist/page/page-panel/page-panel-header2.js +1 -1
- package/dist/page/page-panel/page-panel.d.ts +1 -1
- package/dist/page/page-panel/page-panel2.js +1 -1
- package/dist/page/page.d.ts +1 -1
- package/dist/page/page2.js +1 -1
- package/dist/page-header/page-header.d.ts +1 -1
- package/dist/page-header/page-header2.js +1 -1
- package/dist/page-loader/page-loader.d.ts +1 -1
- package/dist/page-loader/page-loader2.js +1 -1
- package/dist/pagination/pagination.d.ts +1 -1
- package/dist/pagination/pagination2.js +1 -1
- package/dist/panel/panel.d.ts +4 -4
- package/dist/panel/panel2.js +4 -4
- package/dist/password/password.d.ts +1 -1
- package/dist/password/password2.js +1 -1
- package/dist/preferences-input/preferences-input.d.ts +1 -1
- package/dist/preferences-input/preferences-input2.js +1 -1
- package/dist/progress-bar/progress-bar.d.ts +1 -1
- package/dist/progress-bar/progress-bar2.js +1 -1
- package/dist/progress-ring/progress-ring.d.ts +1 -1
- package/dist/progress-ring/progress-ring2.js +1 -1
- package/dist/progressive-filter-chip/progressive-filter-chip.d.ts +1 -1
- package/dist/progressive-filter-chip/progressive-filter-chip2.js +1 -1
- package/dist/pulse/pulse.d.ts +1 -1
- package/dist/pulse/pulse2.js +1 -1
- package/dist/radio/radio-group2.js +1 -1
- package/dist/radio/radio2.js +1 -1
- package/dist/range/range.d.ts +1 -1
- package/dist/range/range2.js +1 -1
- package/dist/resize-handle/resize-handle.d.ts +1 -1
- package/dist/resize-handle/resize-handle2.js +1 -1
- package/dist/search/search.d.ts +1 -1
- package/dist/search/search2.js +1 -1
- package/dist/select/select.d.ts +2 -2
- package/dist/select/select2.js +1 -1
- package/dist/skeleton/skeleton.d.ts +1 -1
- package/dist/skeleton/skeleton2.js +1 -1
- package/dist/sort-button/sort-button.d.ts +1 -1
- package/dist/sort-button/sort-button2.js +1 -1
- package/dist/sparkline/sparkline.d.ts +1 -1
- package/dist/sparkline/sparkline2.js +1 -1
- package/dist/star-rating/star-rating.d.ts +1 -1
- package/dist/star-rating/star-rating2.js +1 -1
- package/dist/steps/steps.d.ts +5 -5
- package/dist/steps/steps2.js +2 -2
- package/dist/steps/steps2.js.map +1 -1
- package/dist/switch/switch-group2.js +1 -1
- package/dist/switch/switch2.js +1 -1
- package/dist/tabs/tabs-group.d.ts +1 -1
- package/dist/tabs/tabs-group2.js +1 -1
- package/dist/tabs/tabs.d.ts +2 -2
- package/dist/tabs/tabs2.js +2 -2
- package/dist/tag/tag.d.ts +1 -1
- package/dist/tag/tag2.js +1 -1
- package/dist/textarea/textarea.d.ts +2 -2
- package/dist/textarea/textarea2.js +1 -1
- package/dist/time/time.d.ts +1 -1
- package/dist/time/time2.js +1 -1
- package/dist/toast/toast.d.ts +1 -1
- package/dist/toast/toast2.js +1 -1
- package/dist/toggletip/toggletip-footer.d.ts +1 -1
- package/dist/toggletip/toggletip-footer2.js +1 -1
- package/dist/toggletip/toggletip-header.d.ts +1 -1
- package/dist/toggletip/toggletip-header2.js +1 -1
- package/dist/toggletip/toggletip.d.ts +1 -1
- package/dist/toggletip/toggletip2.js +1 -1
- package/dist/toolbar/toolbar.d.ts +1 -1
- package/dist/toolbar/toolbar2.js +1 -1
- package/dist/tooltip/tooltip.d.ts +1 -1
- package/dist/tooltip/tooltip2.js +1 -1
- package/dist/tree/tree-node.d.ts +2 -2
- package/dist/tree/tree-node2.js +1 -1
- package/dist/tree/tree-node2.js.map +1 -1
- package/dist/tree/tree.d.ts +2 -1
- package/dist/tree/tree2.js +1 -1
- package/dist/tree/tree2.js.map +1 -1
- package/dist/viewport/define.d.ts +2 -1
- package/dist/viewport/define.js +2 -1
- package/dist/viewport/define.js.map +1 -1
- package/dist/viewport/index.d.ts +2 -1
- package/dist/viewport/index.js +2 -1
- package/dist/viewport/viewport-gesture-navigation.controller.d.ts +8 -10
- package/dist/viewport/viewport-gesture-navigation.controller.js +73 -66
- package/dist/viewport/viewport-gesture-navigation.controller.js.map +1 -1
- package/dist/viewport/viewport-gridlines.d.ts +1 -1
- package/dist/viewport/viewport-gridlines2.js +3 -3
- package/dist/viewport/viewport-gridlines2.js.map +1 -1
- package/dist/viewport/viewport-minimap.d.ts +36 -0
- package/dist/viewport/viewport-minimap.js +6 -0
- package/dist/viewport/viewport-minimap.js.map +1 -0
- package/dist/viewport/viewport-minimap.utils.d.ts +13 -0
- package/dist/viewport/viewport-minimap.utils.js +49 -0
- package/dist/viewport/viewport-minimap.utils.js.map +1 -0
- package/dist/viewport/viewport-minimap2.js +309 -0
- package/dist/viewport/viewport-minimap2.js.map +1 -0
- package/dist/viewport/viewport-navigation.controller.d.ts +7 -13
- package/dist/viewport/viewport-navigation.controller.js +14 -20
- package/dist/viewport/viewport-navigation.controller.js.map +1 -1
- package/dist/viewport/viewport-navigation.types.d.ts +0 -8
- package/dist/viewport/viewport.d.ts +31 -6
- package/dist/viewport/viewport.examples.js.map +1 -1
- package/dist/viewport/viewport.examples.json +13 -4
- package/dist/viewport/viewport.js +1 -1
- package/dist/viewport/viewport.js.map +1 -1
- package/dist/viewport/viewport.types.d.ts +50 -23
- package/dist/viewport/viewport2.js +173 -118
- package/dist/viewport/viewport2.js.map +1 -1
- package/dist/week/week.d.ts +1 -1
- package/dist/week/week2.js +1 -1
- package/package.json +7 -4
|
@@ -40,7 +40,7 @@ var x = .05, S = 20, C = 5, w = [
|
|
|
40
40
|
static {
|
|
41
41
|
this.metadata = {
|
|
42
42
|
tag: "nve-viewport",
|
|
43
|
-
version: "2.
|
|
43
|
+
version: "2.11.0"
|
|
44
44
|
};
|
|
45
45
|
}
|
|
46
46
|
#e;
|
|
@@ -56,143 +56,134 @@ var x = .05, S = 20, C = 5, w = [
|
|
|
56
56
|
#u;
|
|
57
57
|
#d;
|
|
58
58
|
#f;
|
|
59
|
-
#p;
|
|
60
59
|
constructor() {
|
|
61
|
-
super(), this.#r = new l(this, (e) => this.#
|
|
62
|
-
dispatchPanStart: (e) => this.#j("panstart", e, !0),
|
|
63
|
-
dispatchPan: (e) => this.#j("pan", e, !0),
|
|
64
|
-
dispatchPanEnd: (e) => {
|
|
65
|
-
this.#j("panend", e, !1);
|
|
66
|
-
},
|
|
67
|
-
dispatchZoom: (e) => this.#j("zoom", e, !0)
|
|
68
|
-
}, this.#a = !1, this.#o = 0, this.#s = 0, this.#c = 1, this.#l = x, this.#u = S, this.#d = C, this.#f = 0, this.#p = !1, this.behaviorZoom = !1, this.autoFit = !1, this.#n = new c(this, {
|
|
60
|
+
super(), this.#r = new l(this, (e) => this.#_(e)), this.#i = !1, this.#a = 0, this.#o = 0, this.#s = 1, this.#c = x, this.#l = S, this.#u = C, this.#d = 0, this.#f = !1, this.behaviorZoom = !1, this.autoFit = !1, this.#n = new c(this, {
|
|
69
61
|
commitTransform: (e) => {
|
|
70
|
-
this.#
|
|
62
|
+
this.#j(e);
|
|
71
63
|
},
|
|
72
|
-
clampScale: (e) => this.#
|
|
64
|
+
clampScale: (e) => this.#P(e),
|
|
73
65
|
getTransform: () => this.getTransform(),
|
|
74
66
|
getViewportSize: () => ({
|
|
75
67
|
height: this.clientHeight,
|
|
76
68
|
width: this.clientWidth
|
|
77
69
|
})
|
|
78
70
|
}), this.#e = new h(this, {
|
|
79
|
-
animateTo: (e, t) => this.animateTo(e, t),
|
|
80
|
-
commitTransform: (e) => this.#D(e),
|
|
81
|
-
cancelAnimation: () => this.#n.cancel(),
|
|
82
|
-
consumeAutoFit: () => this.#r.consume(),
|
|
83
|
-
events: this.#i,
|
|
84
71
|
getTransform: () => this.getTransform(),
|
|
85
|
-
getZoomTarget: (e) => this.#
|
|
86
|
-
rebasePointerSessions: () => this.#t.rebasePointerSessions(),
|
|
87
|
-
viewportToClient: (e, t) => this.#E(e, t)
|
|
72
|
+
getZoomTarget: (e) => this.#b(e, this.#n.destinationScale ?? this.#s)
|
|
88
73
|
}), this.#t = new m(this, {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
consumeAutoFit: () => this.#r.consume(),
|
|
94
|
-
events: this.#i,
|
|
95
|
-
getTransform: () => this.getTransform()
|
|
74
|
+
clampScale: (e) => this.#P(e),
|
|
75
|
+
clientToViewport: (e, t) => this.#D(e, t),
|
|
76
|
+
getTransform: () => this.getTransform(),
|
|
77
|
+
requestAdmittedPinchZoom: (e) => this.#p(e)
|
|
96
78
|
});
|
|
97
79
|
}
|
|
98
80
|
get x() {
|
|
99
|
-
return this.#
|
|
81
|
+
return this.#a;
|
|
100
82
|
}
|
|
101
83
|
set x(e) {
|
|
102
|
-
this.#
|
|
84
|
+
this.#k({
|
|
103
85
|
...this.getTransform(),
|
|
104
86
|
x: r(e, 0)
|
|
105
87
|
});
|
|
106
88
|
}
|
|
107
89
|
get y() {
|
|
108
|
-
return this.#
|
|
90
|
+
return this.#o;
|
|
109
91
|
}
|
|
110
92
|
set y(e) {
|
|
111
|
-
this.#
|
|
93
|
+
this.#k({
|
|
112
94
|
...this.getTransform(),
|
|
113
95
|
y: r(e, 0)
|
|
114
96
|
});
|
|
115
97
|
}
|
|
116
98
|
get scale() {
|
|
117
|
-
return this.#
|
|
99
|
+
return this.#s;
|
|
118
100
|
}
|
|
119
101
|
set scale(e) {
|
|
120
|
-
this.#
|
|
102
|
+
this.#k({
|
|
121
103
|
...this.getTransform(),
|
|
122
104
|
scale: e
|
|
123
105
|
});
|
|
124
106
|
}
|
|
125
107
|
get minScale() {
|
|
126
|
-
return this.#
|
|
108
|
+
return this.#c;
|
|
127
109
|
}
|
|
128
110
|
set minScale(e) {
|
|
129
|
-
let t = Math.min(a(e, x), this.#
|
|
130
|
-
if (t === this.#
|
|
131
|
-
let n = this.#
|
|
132
|
-
this.#n.cancel(), this.#
|
|
111
|
+
let t = Math.min(a(e, x), this.#l);
|
|
112
|
+
if (t === this.#c) return;
|
|
113
|
+
let n = this.#c;
|
|
114
|
+
this.#n.cancel(), this.#c = t, this.requestUpdate("minScale", n), this.#A({
|
|
133
115
|
...this.getTransform(),
|
|
134
|
-
scale: this.#
|
|
116
|
+
scale: this.#s
|
|
135
117
|
});
|
|
136
118
|
}
|
|
137
119
|
get maxScale() {
|
|
138
|
-
return this.#
|
|
120
|
+
return this.#l;
|
|
139
121
|
}
|
|
140
122
|
set maxScale(e) {
|
|
141
|
-
let t = Math.max(a(e, S), this.#
|
|
142
|
-
if (t === this.#
|
|
143
|
-
let n = this.#
|
|
144
|
-
this.#n.cancel(), this.#
|
|
123
|
+
let t = Math.max(a(e, S), this.#c);
|
|
124
|
+
if (t === this.#l) return;
|
|
125
|
+
let n = this.#l;
|
|
126
|
+
this.#n.cancel(), this.#l = t, this.requestUpdate("maxScale", n), this.#A({
|
|
145
127
|
...this.getTransform(),
|
|
146
|
-
scale: this.#
|
|
128
|
+
scale: this.#s
|
|
147
129
|
});
|
|
148
130
|
}
|
|
149
131
|
get behaviorPan() {
|
|
150
|
-
return this.#
|
|
132
|
+
return this.#f;
|
|
151
133
|
}
|
|
152
134
|
set behaviorPan(e) {
|
|
153
135
|
let t = e === "space" ? "space" : !!e;
|
|
154
|
-
if (t === this.#
|
|
155
|
-
let n = this.#
|
|
156
|
-
this.#
|
|
136
|
+
if (t === this.#f) return;
|
|
137
|
+
let n = this.#f;
|
|
138
|
+
this.#f = t, this.requestUpdate("behaviorPan", n);
|
|
139
|
+
}
|
|
140
|
+
get pannable() {
|
|
141
|
+
return !!this.behaviorPan;
|
|
142
|
+
}
|
|
143
|
+
get zoomable() {
|
|
144
|
+
return this.behaviorZoom;
|
|
157
145
|
}
|
|
158
146
|
get fitInset() {
|
|
159
|
-
return this.#
|
|
147
|
+
return this.#d;
|
|
160
148
|
}
|
|
161
149
|
set fitInset(e) {
|
|
162
150
|
let t = i(e, 0);
|
|
163
|
-
if (t === this.#
|
|
164
|
-
let n = this.#
|
|
165
|
-
this.#
|
|
151
|
+
if (t === this.#d) return;
|
|
152
|
+
let n = this.#d;
|
|
153
|
+
this.#d = t, this.requestUpdate("fitInset", n);
|
|
166
154
|
}
|
|
167
155
|
get dragThreshold() {
|
|
168
|
-
return this.#
|
|
156
|
+
return this.#u;
|
|
169
157
|
}
|
|
170
158
|
set dragThreshold(e) {
|
|
171
159
|
let t = i(e, C);
|
|
172
|
-
if (t === this.#
|
|
173
|
-
let n = this.#
|
|
174
|
-
this.#
|
|
160
|
+
if (t === this.#u) return;
|
|
161
|
+
let n = this.#u;
|
|
162
|
+
this.#u = t, this.requestUpdate("dragThreshold", n);
|
|
175
163
|
}
|
|
176
164
|
connectedCallback() {
|
|
177
|
-
super.connectedCallback(), t(this), this.hasUpdated && !this.isUpdatePending && (this.#
|
|
165
|
+
super.connectedCallback(), t(this), this.hasUpdated && !this.isUpdatePending && (this.#i = !0);
|
|
178
166
|
}
|
|
179
167
|
disconnectedCallback() {
|
|
180
|
-
this.#
|
|
168
|
+
this.#i = !1, super.disconnectedCallback();
|
|
181
169
|
}
|
|
182
170
|
updated(e) {
|
|
183
|
-
super.updated(e),
|
|
171
|
+
super.updated(e), (e.has("behaviorPan") && !!e.get("behaviorPan") !== this.pannable || e.has("behaviorZoom") && !!e.get("behaviorZoom") !== this.zoomable) && this.dispatchEvent(new Event("capabilitieschange", {
|
|
172
|
+
bubbles: !0,
|
|
173
|
+
composed: !0
|
|
174
|
+
})), this.isConnected && this.#i && (e.has("x") || e.has("y") || e.has("scale")) && this.dispatchEvent(new CustomEvent("viewportchange", {
|
|
184
175
|
bubbles: !0,
|
|
185
176
|
composed: !0,
|
|
186
177
|
detail: this.getTransform()
|
|
187
|
-
})), this.#
|
|
178
|
+
})), this.#i = this.isConnected;
|
|
188
179
|
}
|
|
189
180
|
render() {
|
|
190
|
-
return _`<div internal-host focusable><div class="plane" style="${b({ transform: `scale(${this.#
|
|
181
|
+
return _`<div internal-host focusable><div class="plane" style="${b({ transform: `scale(${this.#s}) translate(${-this.#a}px, ${-this.#o}px)` })}"><slot name="background"></slot><slot @slotchange="${this.#r.contentChanged}"></slot></div><div class="overlay"><slot name="overlay"></slot></div></div>`;
|
|
191
182
|
}
|
|
192
183
|
toViewportCoords(e, t) {
|
|
193
184
|
return {
|
|
194
|
-
x: (e - this.#
|
|
195
|
-
y: (t - this.#
|
|
185
|
+
x: (e - this.#a) * this.#s,
|
|
186
|
+
y: (t - this.#o) * this.#s
|
|
196
187
|
};
|
|
197
188
|
}
|
|
198
189
|
toContentCoords(e, t) {
|
|
@@ -200,45 +191,116 @@ var x = .05, S = 20, C = 5, w = [
|
|
|
200
191
|
}
|
|
201
192
|
getTransform() {
|
|
202
193
|
return {
|
|
203
|
-
scale: this.#
|
|
204
|
-
x: this.#
|
|
205
|
-
y: this.#
|
|
194
|
+
scale: this.#s,
|
|
195
|
+
x: this.#a,
|
|
196
|
+
y: this.#o
|
|
206
197
|
};
|
|
207
198
|
}
|
|
208
199
|
getVisibleRect() {
|
|
209
200
|
return {
|
|
210
|
-
x: this.#
|
|
211
|
-
y: this.#
|
|
212
|
-
width: this.clientWidth / this.#
|
|
213
|
-
height: this.clientHeight / this.#
|
|
201
|
+
x: this.#a,
|
|
202
|
+
y: this.#o,
|
|
203
|
+
width: this.clientWidth / this.#s,
|
|
204
|
+
height: this.clientHeight / this.#s
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
requestPan(e) {
|
|
208
|
+
return this.pannable ? this.#m(e, {
|
|
209
|
+
start: this.getTransform(),
|
|
210
|
+
appliesDefault: !0
|
|
211
|
+
}) : !1;
|
|
212
|
+
}
|
|
213
|
+
requestZoom(e, t = {}) {
|
|
214
|
+
return this.zoomable ? this.#p(e, t) : !1;
|
|
215
|
+
}
|
|
216
|
+
#p(e, t = {}) {
|
|
217
|
+
let n = this.#h(e.next), r = this.getTransform();
|
|
218
|
+
if (!this.#M("zoom", {
|
|
219
|
+
...e,
|
|
220
|
+
next: { ...n },
|
|
221
|
+
start: { ...r }
|
|
222
|
+
}, !0)) return !1;
|
|
223
|
+
let i = this.getTransform();
|
|
224
|
+
return n.x === i.x && n.y === i.y && n.scale === i.scale && (!t.animated || this.#n.destinationScale === void 0) ? !1 : (this.#n.cancel(), this.#r.consume(), t.animated ? (this.animateTo(n), !0) : this.#O(n) ? (this.#t.rebasePointerSessions(), !0) : !1);
|
|
225
|
+
}
|
|
226
|
+
startPan(e) {
|
|
227
|
+
if (!this.pannable) return;
|
|
228
|
+
let t = e.source, n = this.#h(e.next), r = {
|
|
229
|
+
...e,
|
|
230
|
+
source: t,
|
|
231
|
+
next: n
|
|
232
|
+
}, i = this.getTransform(), a = this.#M("panstart", {
|
|
233
|
+
...r,
|
|
234
|
+
next: { ...n },
|
|
235
|
+
start: { ...i }
|
|
236
|
+
}, !0), o = !1, s = {
|
|
237
|
+
start: { ...i },
|
|
238
|
+
update: (e) => !o && this.#m({
|
|
239
|
+
...e,
|
|
240
|
+
source: t
|
|
241
|
+
}, {
|
|
242
|
+
start: i,
|
|
243
|
+
appliesDefault: a,
|
|
244
|
+
isActive: () => !o
|
|
245
|
+
}),
|
|
246
|
+
end: (e) => {
|
|
247
|
+
o || (o = !0, this.#M("panend", {
|
|
248
|
+
...e,
|
|
249
|
+
source: t,
|
|
250
|
+
start: { ...i },
|
|
251
|
+
transform: this.getTransform()
|
|
252
|
+
}, !1));
|
|
253
|
+
}
|
|
254
|
+
};
|
|
255
|
+
return this.#m(r, {
|
|
256
|
+
start: i,
|
|
257
|
+
appliesDefault: a,
|
|
258
|
+
isActive: () => !o
|
|
259
|
+
}), s;
|
|
260
|
+
}
|
|
261
|
+
#m(e, t) {
|
|
262
|
+
let n = this.#h(e.next);
|
|
263
|
+
if (!this.#M("pan", {
|
|
264
|
+
...e,
|
|
265
|
+
next: { ...n },
|
|
266
|
+
start: { ...t.start }
|
|
267
|
+
}, !0) || !t.appliesDefault || t.isActive?.() === !1) return !1;
|
|
268
|
+
let r = this.getTransform();
|
|
269
|
+
return n.x === r.x && n.y === r.y && n.scale === r.scale || (this.#n.cancel(), this.#r.consume(), !this.#O(n)) ? !1 : (this.#t.rebasePointerSessions(), !0);
|
|
270
|
+
}
|
|
271
|
+
#h(e) {
|
|
272
|
+
return {
|
|
273
|
+
x: r(e.x, this.#a),
|
|
274
|
+
y: r(e.y, this.#o),
|
|
275
|
+
scale: this.#P(e.scale)
|
|
214
276
|
};
|
|
215
277
|
}
|
|
216
278
|
animateTo(e, t = {}) {
|
|
217
279
|
this.#n.animateTo(e, t);
|
|
218
280
|
}
|
|
219
281
|
reveal(e, t = {}) {
|
|
220
|
-
this.#
|
|
282
|
+
this.#v(this.#y(e, this.#S(t)), t);
|
|
221
283
|
}
|
|
222
284
|
fitContents(e = {}) {
|
|
223
|
-
let t = this.#
|
|
224
|
-
t && this.#
|
|
285
|
+
let t = this.#g(this.#x(Array.from(this.children).filter((e) => !e.slot)), this.#C(e));
|
|
286
|
+
t && this.#v(t, e);
|
|
225
287
|
}
|
|
226
|
-
#
|
|
288
|
+
#g(e, t) {
|
|
227
289
|
if (!this.internalHost) return;
|
|
228
|
-
let n = this.getTransform(), r = this.#
|
|
229
|
-
return i ? this.#
|
|
290
|
+
let n = this.getTransform(), r = this.#E(), i = u(e, r, n);
|
|
291
|
+
return i ? this.#y(i, t, n) : void 0;
|
|
230
292
|
}
|
|
231
|
-
#
|
|
232
|
-
let t = this.#
|
|
233
|
-
t && (this.#n.cancel(), this.#
|
|
293
|
+
#_(e) {
|
|
294
|
+
let t = this.#g(e, this.#C({}));
|
|
295
|
+
t && (this.#n.cancel(), this.#O(t) && this.#t.rebasePointerSessions());
|
|
234
296
|
}
|
|
235
|
-
#
|
|
236
|
-
t.animated ? t.duration === void 0 ? this.animateTo(e) : this.animateTo(e, { duration: t.duration }) : this.#
|
|
297
|
+
#v(e, t) {
|
|
298
|
+
t.animated ? t.duration === void 0 ? this.animateTo(e) : this.animateTo(e, { duration: t.duration }) : this.#k(e);
|
|
237
299
|
}
|
|
238
|
-
#
|
|
300
|
+
#y(e, t, n = this.getTransform()) {
|
|
239
301
|
return d(e, {
|
|
240
302
|
options: t,
|
|
241
|
-
scaleRange: this.#
|
|
303
|
+
scaleRange: this.#w(),
|
|
242
304
|
transform: n,
|
|
243
305
|
viewport: {
|
|
244
306
|
height: this.clientHeight,
|
|
@@ -246,72 +308,65 @@ var x = .05, S = 20, C = 5, w = [
|
|
|
246
308
|
}
|
|
247
309
|
});
|
|
248
310
|
}
|
|
249
|
-
#
|
|
250
|
-
return e === "in" ? this.#
|
|
311
|
+
#b(e, t) {
|
|
312
|
+
return e === "in" ? this.#T(D(1, t, this.#w())) : e === "out" ? this.#T(D(-1, t, this.#w())) : e === "reset" ? this.#T(this.#P(1)) : this.#g(this.#x(Array.from(this.children).filter((e) => !e.slot)), this.#C({}));
|
|
251
313
|
}
|
|
252
|
-
#
|
|
314
|
+
#x(e) {
|
|
253
315
|
return (function* () {
|
|
254
316
|
for (let t of e) yield t.getBoundingClientRect();
|
|
255
317
|
})();
|
|
256
318
|
}
|
|
257
|
-
#
|
|
319
|
+
#S(e) {
|
|
258
320
|
return {
|
|
259
321
|
inset: e.inset,
|
|
260
322
|
scale: e.scale
|
|
261
323
|
};
|
|
262
324
|
}
|
|
263
|
-
#
|
|
325
|
+
#C(e) {
|
|
264
326
|
return {
|
|
265
|
-
inset: e.inset ?? this.#
|
|
327
|
+
inset: e.inset ?? this.#d,
|
|
266
328
|
scale: e.scale
|
|
267
329
|
};
|
|
268
330
|
}
|
|
269
|
-
#
|
|
331
|
+
#w() {
|
|
270
332
|
return {
|
|
271
|
-
min: this.#
|
|
272
|
-
max: this.#
|
|
333
|
+
min: this.#c,
|
|
334
|
+
max: this.#l
|
|
273
335
|
};
|
|
274
336
|
}
|
|
275
|
-
#
|
|
337
|
+
#T(e) {
|
|
276
338
|
return f(e, this.getTransform(), {
|
|
277
339
|
height: this.clientHeight,
|
|
278
340
|
width: this.clientWidth
|
|
279
341
|
});
|
|
280
342
|
}
|
|
281
|
-
#
|
|
343
|
+
#E() {
|
|
282
344
|
return this.internalHost?.getBoundingClientRect() ?? DOMRect.fromRect();
|
|
283
345
|
}
|
|
284
|
-
#
|
|
346
|
+
#D(e, t, n = this.#E()) {
|
|
285
347
|
return {
|
|
286
348
|
x: e - n.left,
|
|
287
349
|
y: t - n.top
|
|
288
350
|
};
|
|
289
351
|
}
|
|
290
|
-
#
|
|
291
|
-
let n = this.#
|
|
292
|
-
return {
|
|
293
|
-
x: n.left + e,
|
|
294
|
-
y: n.top + t
|
|
295
|
-
};
|
|
296
|
-
}
|
|
297
|
-
#D(e) {
|
|
298
|
-
let t = r(e.x, this.#o), n = r(e.y, this.#s), i = this.#N(e.scale);
|
|
299
|
-
return t === this.#o && n === this.#s && i === this.#c ? !1 : (this.#M({
|
|
352
|
+
#O(e) {
|
|
353
|
+
let t = r(e.x, this.#a), n = r(e.y, this.#o), i = this.#P(e.scale);
|
|
354
|
+
return t === this.#a && n === this.#o && i === this.#s ? !1 : (this.#N({
|
|
300
355
|
scale: i,
|
|
301
356
|
x: t,
|
|
302
357
|
y: n
|
|
303
358
|
}), !0);
|
|
304
359
|
}
|
|
305
|
-
#O(e) {
|
|
306
|
-
this.#n.cancel(), this.#k(e);
|
|
307
|
-
}
|
|
308
360
|
#k(e) {
|
|
309
|
-
this.#
|
|
361
|
+
this.#n.cancel(), this.#A(e);
|
|
310
362
|
}
|
|
311
363
|
#A(e) {
|
|
312
|
-
this.#
|
|
364
|
+
this.#O(e) && (this.isConnected && this.#r.consume(), this.#t.rebasePointerSessions());
|
|
365
|
+
}
|
|
366
|
+
#j(e) {
|
|
367
|
+
this.#O(e) && (this.isConnected && this.#r.consume(), this.#t.rebasePointerSessions());
|
|
313
368
|
}
|
|
314
|
-
#
|
|
369
|
+
#M(e, t, n) {
|
|
315
370
|
return this.dispatchEvent(new CustomEvent(e, {
|
|
316
371
|
bubbles: !0,
|
|
317
372
|
cancelable: n,
|
|
@@ -319,13 +374,13 @@ var x = .05, S = 20, C = 5, w = [
|
|
|
319
374
|
detail: t
|
|
320
375
|
}));
|
|
321
376
|
}
|
|
322
|
-
#M(e) {
|
|
323
|
-
let t = this.#o, n = this.#s, r = this.#c;
|
|
324
|
-
this.#o = e.x, this.#s = e.y, this.#c = e.scale, e.x !== t && this.requestUpdate("x", t), e.y !== n && this.requestUpdate("y", n), e.scale !== r && this.requestUpdate("scale", r);
|
|
325
|
-
}
|
|
326
377
|
#N(e) {
|
|
327
|
-
let t =
|
|
328
|
-
|
|
378
|
+
let t = this.#a, n = this.#o, r = this.#s;
|
|
379
|
+
this.#a = e.x, this.#o = e.y, this.#s = e.scale, e.x !== t && this.requestUpdate("x", t), e.y !== n && this.requestUpdate("y", n), e.scale !== r && this.requestUpdate("scale", r);
|
|
380
|
+
}
|
|
381
|
+
#P(e) {
|
|
382
|
+
let t = Number.isFinite(e) && e > 0 ? e : this.#c;
|
|
383
|
+
return Math.min(this.#l, Math.max(this.#c, t));
|
|
329
384
|
}
|
|
330
385
|
};
|
|
331
386
|
o([y("[internal-host]")], E.prototype, "internalHost", void 0), o([v({ type: Number })], E.prototype, "x", null), o([v({ type: Number })], E.prototype, "y", null), o([v({ type: Number })], E.prototype, "scale", null), o([v({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewport2.js","names":[],"sources":["../../src/viewport/viewport.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html, LitElement, type PropertyValues } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { query } from 'lit/decorators/query.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport {\n audit,\n attachInternals,\n finiteOr,\n nonnegativeFiniteOr,\n positiveFiniteOr,\n useStyles\n} from '@nvidia-elements/core/internal';\nimport styles from './viewport.css?inline';\nimport { ViewportAnimationController } from './viewport-animation.controller.js';\nimport { ViewportAutoFitController } from './viewport-autofit.controller.js';\nimport {\n contentBoundsFromClientRects,\n revealTarget,\n type ViewportClientRect,\n type ViewportFitOptions\n} from './viewport-fitting.utils.js';\nimport { ViewportGestureNavigationController } from './viewport-gesture-navigation.controller.js';\nimport { ViewportNavigationController } from './viewport-navigation.controller.js';\nimport type { ViewportNavigationEventDelegate, ViewportZoomAction } from './viewport-navigation.types.js';\nimport type {\n ViewportAnimationOptions,\n ViewportPanBehavior,\n ViewportPoint,\n ViewportRect,\n ViewportRevealOptions,\n ViewportTransform\n} from './viewport.types.js';\nimport { centeredScaleTransform, contentPointFromViewport } from './viewport-projection.utils.js';\n\nconst DEFAULT_MIN_SCALE = 0.05;\nconst DEFAULT_MAX_SCALE = 20;\nconst DEFAULT_DRAG_THRESHOLD = 5;\nconst ZOOM_SCALE_STEPS = [0.05, 0.1, 0.25, 0.5, 1, 2, 4, 8, 16, 20] as const;\nconst BEHAVIOR_PAN_CONVERTER = {\n fromAttribute(value: string | null): ViewportPanBehavior {\n if (value === null) return false;\n return value === 'space' ? 'space' : true;\n },\n toAttribute(value: ViewportPanBehavior): string | null {\n if (!value) return null;\n return value === 'space' ? 'space' : '';\n }\n};\n\n/**\n * @element nve-viewport\n * @description A viewport provides a spatial surface for arbitrary content, with optional pan and zoom navigation.\n * @documentation https://nvidia.github.io/elements/docs/elements/viewport/\n * @since 0.0.0\n * @entrypoint \\@nvidia-elements/core/viewport\n * @slot - Content positioned in the viewport's infinite content space.\n * @slot background - Custom content rendered behind viewport content and excluded from content fitting\n * @event panstart - Dispatched when pointer movement crosses the pan threshold. Cancel to disable built-in pointer panning for the sequence.\n * @event pan - Dispatched when pointer, wheel, keyboard, or command input requests a pan. Cancel to skip the proposed transform mutation.\n * @event panend - Dispatched when a pointer pan ends, including its terminal reason.\n * @event zoom - Dispatched when wheel, pinch, or command input requests a scale change. Cancel to skip the proposed transform mutation.\n * @event viewportchange - Dispatched once after a render that commits one or more viewport transform changes.\n * @cssprop --background - Background color of the fixed viewport area.\n * @cssprop --min-height\n * @cssprop --pan-cursor - Cursor shown over a background eligible for primary-pointer panning.\n * @cssprop --panning-cursor - Cursor shown while a pointer pan is active.\n * @command --pan-left - With behavior-pan enabled, pans left by one discrete step.\n * @command --pan-right - With behavior-pan enabled, pans right by one discrete step.\n * @command --pan-up - With behavior-pan enabled, pans up by one discrete step.\n * @command --pan-down - With behavior-pan enabled, pans down by one discrete step.\n * @command --zoom-in - With behavior-zoom enabled, animates to the next permitted scale step.\n * @command --zoom-out - With behavior-zoom enabled, animates to the previous permitted scale step.\n * @command --zoom-reset - With behavior-zoom enabled, animates to 100% scale.\n * @command --zoom-to-fit - With behavior-zoom enabled, animates to fit direct default-slot element boxes.\n * @stable false\n */\n@audit()\nexport class Viewport extends LitElement {\n static styles = useStyles([styles]);\n\n static readonly metadata = {\n tag: 'nve-viewport',\n version: '0.0.0'\n };\n\n /** @private */\n declare _internals: ElementInternals;\n\n @query('[internal-host]') private internalHost: HTMLElement | null;\n readonly #navigationController: ViewportNavigationController;\n readonly #gestureNavigationController: ViewportGestureNavigationController;\n readonly #animationController: ViewportAnimationController;\n readonly #autoFitController = new ViewportAutoFitController(this, clientRects =>\n this.#applyInitialAutoFit(clientRects)\n );\n readonly #navigationEvents: ViewportNavigationEventDelegate = {\n dispatchPanStart: detail => this.#dispatchNavigationEvent('panstart', detail, true),\n dispatchPan: detail => this.#dispatchNavigationEvent('pan', detail, true),\n dispatchPanEnd: detail => {\n this.#dispatchNavigationEvent('panend', detail, false);\n },\n dispatchZoom: detail => this.#dispatchNavigationEvent('zoom', detail, true)\n };\n #publishTransformChanges = false;\n #x = 0;\n #y = 0;\n #scale = 1;\n #minScale = DEFAULT_MIN_SCALE;\n #maxScale = DEFAULT_MAX_SCALE;\n #dragThreshold = DEFAULT_DRAG_THRESHOLD;\n #fitInset = 0;\n #behaviorPan: ViewportPanBehavior = false;\n constructor() {\n super();\n this.#animationController = new ViewportAnimationController(this, {\n commitTransform: next => {\n this.#applyAnimationTransform(next);\n },\n clampScale: value => this.#clampScale(value),\n getTransform: () => this.getTransform(),\n getViewportSize: () => ({ height: this.clientHeight, width: this.clientWidth })\n });\n this.#navigationController = new ViewportNavigationController(this, {\n animateTo: (target, options) => this.animateTo(target, options),\n commitTransform: next => this.#commitTransform(next),\n cancelAnimation: () => this.#animationController.cancel(),\n consumeAutoFit: () => this.#autoFitController.consume(),\n events: this.#navigationEvents,\n getTransform: () => this.getTransform(),\n getZoomTarget: action => this.#getZoomTarget(action, this.#animationController.destinationScale ?? this.#scale),\n rebasePointerSessions: () => this.#gestureNavigationController.rebasePointerSessions(),\n viewportToClient: (viewportX, viewportY) => this.#viewportToClient(viewportX, viewportY)\n });\n this.#gestureNavigationController = new ViewportGestureNavigationController(this, {\n commitTransform: next => this.#commitTransform(next),\n cancelAnimation: () => this.#animationController.cancel(),\n clampScale: value => this.#clampScale(value),\n clientToViewport: (clientX, clientY) => this.#clientToViewport(clientX, clientY),\n consumeAutoFit: () => this.#autoFitController.consume(),\n events: this.#navigationEvents,\n getTransform: () => this.getTransform()\n });\n }\n\n /** Horizontal content-space coordinate at the viewport origin. */\n @property({ type: Number })\n get x(): number {\n return this.#x;\n }\n\n set x(value: number) {\n this.#applyExternalTransform({ ...this.getTransform(), x: finiteOr(value, 0) });\n }\n\n /** Vertical content-space coordinate at the viewport origin. */\n @property({ type: Number })\n get y(): number {\n return this.#y;\n }\n\n set y(value: number) {\n this.#applyExternalTransform({ ...this.getTransform(), y: finiteOr(value, 0) });\n }\n\n /** Content-to-viewport CSS-pixel scale. */\n @property({ type: Number })\n get scale(): number {\n return this.#scale;\n }\n\n set scale(value: number) {\n this.#applyExternalTransform({ ...this.getTransform(), scale: value });\n }\n\n /** Inclusive lower scale limit. */\n @property({ attribute: 'min-scale', type: Number, reflect: true })\n get minScale(): number {\n return this.#minScale;\n }\n\n set minScale(value: number) {\n const next = Math.min(positiveFiniteOr(value, DEFAULT_MIN_SCALE), this.#maxScale);\n if (next === this.#minScale) return;\n const previous = this.#minScale;\n this.#animationController.cancel();\n this.#minScale = next;\n this.requestUpdate('minScale', previous);\n this.#commitExternalTransform({ ...this.getTransform(), scale: this.#scale });\n }\n\n /** Inclusive upper scale limit. */\n @property({ attribute: 'max-scale', type: Number, reflect: true })\n get maxScale(): number {\n return this.#maxScale;\n }\n\n set maxScale(value: number) {\n const next = Math.max(positiveFiniteOr(value, DEFAULT_MAX_SCALE), this.#minScale);\n if (next === this.#maxScale) return;\n const previous = this.#maxScale;\n this.#animationController.cancel();\n this.#maxScale = next;\n this.requestUpdate('maxScale', previous);\n this.#commitExternalTransform({ ...this.getTransform(), scale: this.#scale });\n }\n\n /** Enables panning by pointer, focused wheel, focused keyboard, and Invoker commands; requires Space for primary-pointer dragging when set to space. */\n @property({ attribute: 'behavior-pan', converter: BEHAVIOR_PAN_CONVERTER, reflect: true })\n get behaviorPan(): ViewportPanBehavior {\n return this.#behaviorPan;\n }\n\n set behaviorPan(value: ViewportPanBehavior | null | undefined) {\n const next = value === 'space' ? 'space' : Boolean(value);\n if (next === this.#behaviorPan) return;\n const previous = this.#behaviorPan;\n this.#behaviorPan = next;\n this.requestUpdate('behaviorPan', previous);\n }\n\n /** Enables zooming by pinch, focused modified wheel, focused keyboard, and Invoker commands. */\n @property({ type: Boolean, attribute: 'behavior-zoom', reflect: true }) behaviorZoom = false;\n /** Fits measurable direct default-slot content once after initial layout. */\n @property({ type: Boolean, reflect: true }) autoFit = false;\n /** Default uniform CSS-pixel inset reserved around bounds when fitting content. */\n @property({ attribute: 'fit-inset', type: Number, reflect: true })\n get fitInset(): number {\n return this.#fitInset;\n }\n\n set fitInset(value: number) {\n const next = nonnegativeFiniteOr(value, 0);\n if (next === this.#fitInset) return;\n const previous = this.#fitInset;\n this.#fitInset = next;\n this.requestUpdate('fitInset', previous);\n }\n\n /** CSS-pixel pointer movement required before a pointer pan begins. */\n @property({ attribute: 'drag-threshold', type: Number, reflect: true })\n get dragThreshold(): number {\n return this.#dragThreshold;\n }\n\n set dragThreshold(value: number) {\n const next = nonnegativeFiniteOr(value, DEFAULT_DRAG_THRESHOLD);\n if (next === this.#dragThreshold) return;\n const previous = this.#dragThreshold;\n this.#dragThreshold = next;\n this.requestUpdate('dragThreshold', previous);\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n attachInternals(this);\n if (this.hasUpdated && !this.isUpdatePending) this.#publishTransformChanges = true;\n }\n\n disconnectedCallback(): void {\n this.#publishTransformChanges = false;\n super.disconnectedCallback();\n }\n\n protected updated(changed: PropertyValues<this>): void {\n super.updated(changed);\n if (\n this.isConnected &&\n this.#publishTransformChanges &&\n (changed.has('x') || changed.has('y') || changed.has('scale'))\n ) {\n this.dispatchEvent(\n new CustomEvent<ViewportTransform>('viewportchange', {\n bubbles: true,\n composed: true,\n detail: this.getTransform()\n })\n );\n }\n this.#publishTransformChanges = this.isConnected;\n }\n\n render() {\n return html`\n <div internal-host focusable>\n <div\n class=\"plane\"\n style=${styleMap({ transform: `scale(${this.#scale}) translate(${-this.#x}px, ${-this.#y}px)` })}\n >\n <slot name=\"background\"></slot>\n <slot @slotchange=${this.#autoFitController.contentChanged}></slot>\n </div>\n </div>\n `;\n }\n\n /** Converts a content-space point to viewport CSS pixels. */\n toViewportCoords(contentX: number, contentY: number): ViewportPoint {\n return {\n x: (contentX - this.#x) * this.#scale,\n y: (contentY - this.#y) * this.#scale\n };\n }\n\n /** Converts a viewport CSS-pixel point to content space. */\n toContentCoords(viewportX: number, viewportY: number): ViewportPoint {\n return contentPointFromViewport(viewportX, viewportY, this.getTransform());\n }\n\n /** Returns the current content-space origin and CSS-pixel scale. */\n getTransform(): ViewportTransform {\n return { scale: this.#scale, x: this.#x, y: this.#y };\n }\n\n /** Returns the visible content-space rectangle. */\n getVisibleRect(): ViewportRect {\n return {\n x: this.#x,\n y: this.#y,\n width: this.clientWidth / this.#scale,\n height: this.clientHeight / this.#scale\n };\n }\n\n /** Animates the viewport to the requested partial transform. */\n animateTo(target: Partial<ViewportTransform>, options: ViewportAnimationOptions = {}): void {\n this.#animationController.animateTo(target, options);\n }\n\n /** Centers or fits a content-space region within the viewport. */\n reveal(region: { x: number; y: number; width?: number; height?: number }, options: ViewportRevealOptions = {}): void {\n this.#applyRevealTarget(this.#getRevealTarget(region, this.#revealFitOptions(options)), options);\n }\n\n /** Fits the union of direct default-slot element boxes within the viewport. */\n fitContents(options: ViewportRevealOptions = {}): void {\n const target = this.#getFitContentsTargetFromClientRects(\n this.#clientRectsFromChildren(Array.from(this.children).filter(child => !child.slot)),\n this.#resolveFitOptions(options)\n );\n if (target) this.#applyRevealTarget(target, options);\n }\n\n #getFitContentsTargetFromClientRects(\n clientRects: Iterable<ViewportClientRect>,\n options: ViewportFitOptions\n ): ViewportTransform | undefined {\n if (!this.internalHost) return undefined;\n const transform = this.getTransform();\n const viewportFrame = this.#viewportFrame();\n const region = contentBoundsFromClientRects(clientRects, viewportFrame, transform);\n return region ? this.#getRevealTarget(region, options, transform) : undefined;\n }\n\n #applyInitialAutoFit(clientRects: readonly ViewportClientRect[]): void {\n const target = this.#getFitContentsTargetFromClientRects(clientRects, this.#resolveFitOptions({}));\n if (!target) return;\n this.#animationController.cancel();\n if (this.#commitTransform(target)) {\n this.#gestureNavigationController.rebasePointerSessions();\n }\n }\n\n #applyRevealTarget(target: ViewportTransform, options: ViewportRevealOptions): void {\n if (options.animated) {\n if (options.duration === undefined) this.animateTo(target);\n else this.animateTo(target, { duration: options.duration });\n } else {\n this.#applyExternalTransform(target);\n }\n }\n\n #getRevealTarget(\n region: { x: number; y: number; width?: number; height?: number },\n options: ViewportFitOptions,\n transform = this.getTransform()\n ): ViewportTransform {\n return revealTarget(region, {\n options,\n scaleRange: this.#getScaleRange(),\n transform,\n viewport: { height: this.clientHeight, width: this.clientWidth }\n });\n }\n\n #getZoomTarget(action: ViewportZoomAction, stepScale: number): ViewportTransform | undefined {\n if (action === 'in') return this.#getCenteredScaleTransform(nextScaleStep(1, stepScale, this.#getScaleRange()));\n if (action === 'out') return this.#getCenteredScaleTransform(nextScaleStep(-1, stepScale, this.#getScaleRange()));\n if (action === 'reset') return this.#getCenteredScaleTransform(this.#clampScale(1));\n return this.#getFitContentsTargetFromClientRects(\n this.#clientRectsFromChildren(Array.from(this.children).filter(child => !child.slot)),\n this.#resolveFitOptions({})\n );\n }\n\n #clientRectsFromChildren(children: Iterable<Element>): Iterable<ViewportClientRect> {\n return (function* (): Generator<ViewportClientRect> {\n for (const child of children) yield child.getBoundingClientRect();\n })();\n }\n\n #revealFitOptions(options: ViewportRevealOptions): ViewportFitOptions {\n return { inset: options.inset, scale: options.scale };\n }\n\n #resolveFitOptions(options: ViewportRevealOptions): ViewportFitOptions {\n return { inset: options.inset ?? this.#fitInset, scale: options.scale };\n }\n #getScaleRange(): { min: number; max: number } {\n return { min: this.#minScale, max: this.#maxScale };\n }\n #getCenteredScaleTransform(scale: number): ViewportTransform {\n return centeredScaleTransform(scale, this.getTransform(), { height: this.clientHeight, width: this.clientWidth });\n }\n\n #viewportFrame(): DOMRect {\n return this.internalHost?.getBoundingClientRect() ?? DOMRect.fromRect();\n }\n #clientToViewport(clientX: number, clientY: number, frame = this.#viewportFrame()): ViewportPoint {\n return { x: clientX - frame.left, y: clientY - frame.top };\n }\n\n #viewportToClient(viewportX: number, viewportY: number): ViewportPoint {\n const frame = this.#viewportFrame();\n return { x: frame.left + viewportX, y: frame.top + viewportY };\n }\n\n #commitTransform(next: ViewportTransform): boolean {\n const x = finiteOr(next.x, this.#x);\n const y = finiteOr(next.y, this.#y);\n const scale = this.#clampScale(next.scale);\n if (x === this.#x && y === this.#y && scale === this.#scale) return false;\n this.#updateTransformFields({ scale, x, y });\n return true;\n }\n\n #applyExternalTransform(next: ViewportTransform): void {\n this.#animationController.cancel();\n this.#commitExternalTransform(next);\n }\n\n #commitExternalTransform(next: ViewportTransform): void {\n if (!this.#commitTransform(next)) return;\n if (this.isConnected) this.#autoFitController.consume();\n this.#gestureNavigationController.rebasePointerSessions();\n }\n\n #applyAnimationTransform(next: ViewportTransform): void {\n const committed = this.#commitTransform(next);\n if (!committed) return;\n if (this.isConnected) this.#autoFitController.consume();\n this.#gestureNavigationController.rebasePointerSessions();\n }\n\n #dispatchNavigationEvent<T>(type: string, detail: T, cancelable: boolean): boolean {\n return this.dispatchEvent(\n new CustomEvent<T>(type, {\n bubbles: true,\n cancelable,\n composed: true,\n detail\n })\n );\n }\n\n #updateTransformFields(next: ViewportTransform): void {\n const previousX = this.#x;\n const previousY = this.#y;\n const previousScale = this.#scale;\n this.#x = next.x;\n this.#y = next.y;\n this.#scale = next.scale;\n if (next.x !== previousX) this.requestUpdate('x', previousX);\n if (next.y !== previousY) this.requestUpdate('y', previousY);\n if (next.scale !== previousScale) this.requestUpdate('scale', previousScale);\n }\n #clampScale(value: number): number {\n const finite = Number.isFinite(value) && value > 0 ? value : this.#minScale;\n return Math.min(this.#maxScale, Math.max(this.#minScale, finite));\n }\n}\n\nfunction nextScaleStep(direction: -1 | 1, current: number, scaleRange: { min: number; max: number }): number {\n const steps = [...ZOOM_SCALE_STEPS, scaleRange.min, scaleRange.max]\n .map(scale => Math.min(scaleRange.max, Math.max(scaleRange.min, scale)))\n .sort((first, second) => first - second)\n .filter((scale, index, all) => index === 0 || scale !== all[index - 1]);\n if (direction > 0) return steps.find(scale => scale > current) ?? scaleRange.max;\n for (let index = steps.length - 1; index >= 0; index -= 1) {\n const scale = steps[index];\n if (scale !== undefined && scale < current) return scale;\n }\n return scaleRange.min;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"viewport2.js","names":[],"sources":["../../src/viewport/viewport.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html, LitElement, type PropertyValues } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { query } from 'lit/decorators/query.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport {\n audit,\n attachInternals,\n finiteOr,\n nonnegativeFiniteOr,\n positiveFiniteOr,\n useStyles\n} from '@nvidia-elements/core/internal';\nimport styles from './viewport.css?inline';\nimport { ViewportAnimationController } from './viewport-animation.controller.js';\nimport { ViewportAutoFitController } from './viewport-autofit.controller.js';\nimport {\n contentBoundsFromClientRects,\n revealTarget,\n type ViewportClientRect,\n type ViewportFitOptions\n} from './viewport-fitting.utils.js';\nimport { ViewportGestureNavigationController } from './viewport-gesture-navigation.controller.js';\nimport { ViewportNavigationController } from './viewport-navigation.controller.js';\nimport type { ViewportZoomAction } from './viewport-navigation.types.js';\nimport type {\n ViewportAnimationOptions,\n ViewportPanBehavior,\n ViewportPanProposal,\n ViewportPanSession,\n ViewportPanUpdateProposal,\n ViewportPoint,\n ViewportRect,\n ViewportRevealOptions,\n ViewportTransform,\n ViewportZoomProposal,\n ViewportZoomRequestOptions\n} from './viewport.types.js';\nimport { centeredScaleTransform, contentPointFromViewport } from './viewport-projection.utils.js';\n\nconst DEFAULT_MIN_SCALE = 0.05;\nconst DEFAULT_MAX_SCALE = 20;\nconst DEFAULT_DRAG_THRESHOLD = 5;\nconst ZOOM_SCALE_STEPS = [0.05, 0.1, 0.25, 0.5, 1, 2, 4, 8, 16, 20] as const;\nconst BEHAVIOR_PAN_CONVERTER = {\n fromAttribute(value: string | null): ViewportPanBehavior {\n if (value === null) return false;\n return value === 'space' ? 'space' : true;\n },\n toAttribute(value: ViewportPanBehavior): string | null {\n if (!value) return null;\n return value === 'space' ? 'space' : '';\n }\n};\n\n/**\n * @element nve-viewport\n * @description A viewport provides a spatial surface for arbitrary content, with optional pan and zoom navigation.\n * @documentation https://nvidia.github.io/elements/docs/elements/viewport/\n * @since 0.0.0\n * @entrypoint \\@nvidia-elements/core/viewport\n * @slot - Content positioned in the viewport's infinite content space.\n * @slot background - Custom content rendered behind viewport content and excluded from content fitting\n * @slot overlay - Interactive content fixed above the transformed plane and excluded from content fitting\n * @event panstart - Dispatched when a sustained pointer or control pan begins. Cancel to suppress the default for its session.\n * @event pan - Dispatched for admitted user pan proposals. Cancel to skip the proposed transform mutation.\n * @event panend - Dispatched once when a sustained pan ends, including its terminal reason.\n * @event zoom - Dispatched for admitted user zoom proposals. Cancel to skip the proposed transform mutation.\n * @event viewportchange - Dispatched once after a render that commits one or more viewport transform changes.\n * @event capabilitieschange - Dispatched after effective user-input pan or zoom admission changes.\n * @cssprop --background - Background color of the fixed viewport area.\n * @cssprop --min-height\n * @cssprop --pan-cursor - Cursor shown over a background eligible for primary-pointer panning.\n * @cssprop --panning-cursor - Cursor shown while a pointer pan is active.\n * @command --pan-left - With behavior-pan enabled, pans left by one discrete step.\n * @command --pan-right - With behavior-pan enabled, pans right by one discrete step.\n * @command --pan-up - With behavior-pan enabled, pans up by one discrete step.\n * @command --pan-down - With behavior-pan enabled, pans down by one discrete step.\n * @command --zoom-in - With behavior-zoom enabled, animates to the next permitted scale step.\n * @command --zoom-out - With behavior-zoom enabled, animates to the previous permitted scale step.\n * @command --zoom-reset - With behavior-zoom enabled, animates to 100% scale.\n * @command --zoom-to-fit - With behavior-zoom enabled, animates to fit direct default-slot element boxes.\n * @stable false\n */\n@audit()\nexport class Viewport extends LitElement {\n static styles = useStyles([styles]);\n\n static readonly metadata = {\n tag: 'nve-viewport',\n version: '0.0.0'\n };\n\n /** @private */\n declare _internals: ElementInternals;\n\n @query('[internal-host]') private internalHost: HTMLElement | null;\n readonly #navigationController: ViewportNavigationController;\n readonly #gestureNavigationController: ViewportGestureNavigationController;\n readonly #animationController: ViewportAnimationController;\n readonly #autoFitController = new ViewportAutoFitController(this, clientRects =>\n this.#applyInitialAutoFit(clientRects)\n );\n #publishTransformChanges = false;\n #x = 0;\n #y = 0;\n #scale = 1;\n #minScale = DEFAULT_MIN_SCALE;\n #maxScale = DEFAULT_MAX_SCALE;\n #dragThreshold = DEFAULT_DRAG_THRESHOLD;\n #fitInset = 0;\n #behaviorPan: ViewportPanBehavior = false;\n constructor() {\n super();\n this.#animationController = new ViewportAnimationController(this, {\n commitTransform: next => {\n this.#applyAnimationTransform(next);\n },\n clampScale: value => this.#clampScale(value),\n getTransform: () => this.getTransform(),\n getViewportSize: () => ({ height: this.clientHeight, width: this.clientWidth })\n });\n this.#navigationController = new ViewportNavigationController(this, {\n getTransform: () => this.getTransform(),\n getZoomTarget: action => this.#getZoomTarget(action, this.#animationController.destinationScale ?? this.#scale)\n });\n this.#gestureNavigationController = new ViewportGestureNavigationController(this, {\n clampScale: value => this.#clampScale(value),\n clientToViewport: (clientX, clientY) => this.#clientToViewport(clientX, clientY),\n getTransform: () => this.getTransform(),\n requestAdmittedPinchZoom: proposal => this.#performZoom(proposal)\n });\n }\n\n /** Horizontal content-space coordinate at the viewport origin. */\n @property({ type: Number })\n get x(): number {\n return this.#x;\n }\n\n set x(value: number) {\n this.#applyExternalTransform({ ...this.getTransform(), x: finiteOr(value, 0) });\n }\n\n /** Vertical content-space coordinate at the viewport origin. */\n @property({ type: Number })\n get y(): number {\n return this.#y;\n }\n\n set y(value: number) {\n this.#applyExternalTransform({ ...this.getTransform(), y: finiteOr(value, 0) });\n }\n\n /** Content-to-viewport CSS-pixel scale. */\n @property({ type: Number })\n get scale(): number {\n return this.#scale;\n }\n\n set scale(value: number) {\n this.#applyExternalTransform({ ...this.getTransform(), scale: value });\n }\n\n /** Inclusive lower scale limit. */\n @property({ attribute: 'min-scale', type: Number, reflect: true })\n get minScale(): number {\n return this.#minScale;\n }\n\n set minScale(value: number) {\n const next = Math.min(positiveFiniteOr(value, DEFAULT_MIN_SCALE), this.#maxScale);\n if (next === this.#minScale) return;\n const previous = this.#minScale;\n this.#animationController.cancel();\n this.#minScale = next;\n this.requestUpdate('minScale', previous);\n this.#commitExternalTransform({ ...this.getTransform(), scale: this.#scale });\n }\n\n /** Inclusive upper scale limit. */\n @property({ attribute: 'max-scale', type: Number, reflect: true })\n get maxScale(): number {\n return this.#maxScale;\n }\n\n set maxScale(value: number) {\n const next = Math.max(positiveFiniteOr(value, DEFAULT_MAX_SCALE), this.#minScale);\n if (next === this.#maxScale) return;\n const previous = this.#maxScale;\n this.#animationController.cancel();\n this.#maxScale = next;\n this.requestUpdate('maxScale', previous);\n this.#commitExternalTransform({ ...this.getTransform(), scale: this.#scale });\n }\n\n /** Enables panning by pointer, focused wheel, focused keyboard, and Invoker commands; requires Space for primary-pointer dragging when set to space. */\n @property({ attribute: 'behavior-pan', converter: BEHAVIOR_PAN_CONVERTER, reflect: true })\n get behaviorPan(): ViewportPanBehavior {\n return this.#behaviorPan;\n }\n\n set behaviorPan(value: ViewportPanBehavior | null | undefined) {\n const next = value === 'space' ? 'space' : Boolean(value);\n if (next === this.#behaviorPan) return;\n const previous = this.#behaviorPan;\n this.#behaviorPan = next;\n this.requestUpdate('behaviorPan', previous);\n }\n\n /** Enables zooming by pinch, focused modified wheel, focused keyboard, and Invoker commands. */\n @property({ type: Boolean, attribute: 'behavior-zoom', reflect: true }) behaviorZoom = false;\n\n /** Whether the viewport may admit new user-input panning. */\n get pannable(): boolean {\n return Boolean(this.behaviorPan);\n }\n\n /** Whether the viewport may admit new user-input zooming. */\n get zoomable(): boolean {\n return this.behaviorZoom;\n }\n\n /** Fits measurable direct default-slot content once after initial layout. */\n @property({ type: Boolean, reflect: true }) autoFit = false;\n /** Default uniform CSS-pixel inset reserved around bounds when fitting content. */\n @property({ attribute: 'fit-inset', type: Number, reflect: true })\n get fitInset(): number {\n return this.#fitInset;\n }\n\n set fitInset(value: number) {\n const next = nonnegativeFiniteOr(value, 0);\n if (next === this.#fitInset) return;\n const previous = this.#fitInset;\n this.#fitInset = next;\n this.requestUpdate('fitInset', previous);\n }\n\n /** CSS-pixel pointer movement required before a pointer pan begins. */\n @property({ attribute: 'drag-threshold', type: Number, reflect: true })\n get dragThreshold(): number {\n return this.#dragThreshold;\n }\n\n set dragThreshold(value: number) {\n const next = nonnegativeFiniteOr(value, DEFAULT_DRAG_THRESHOLD);\n if (next === this.#dragThreshold) return;\n const previous = this.#dragThreshold;\n this.#dragThreshold = next;\n this.requestUpdate('dragThreshold', previous);\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n attachInternals(this);\n if (this.hasUpdated && !this.isUpdatePending) this.#publishTransformChanges = true;\n }\n\n disconnectedCallback(): void {\n this.#publishTransformChanges = false;\n super.disconnectedCallback();\n }\n\n protected updated(changed: PropertyValues<this>): void {\n super.updated(changed);\n if (\n (changed.has('behaviorPan') && Boolean(changed.get('behaviorPan')) !== this.pannable) ||\n (changed.has('behaviorZoom') && Boolean(changed.get('behaviorZoom')) !== this.zoomable)\n ) {\n this.dispatchEvent(new Event('capabilitieschange', { bubbles: true, composed: true }));\n }\n if (\n this.isConnected &&\n this.#publishTransformChanges &&\n (changed.has('x') || changed.has('y') || changed.has('scale'))\n ) {\n this.dispatchEvent(\n new CustomEvent<ViewportTransform>('viewportchange', {\n bubbles: true,\n composed: true,\n detail: this.getTransform()\n })\n );\n }\n this.#publishTransformChanges = this.isConnected;\n }\n\n render() {\n return html`\n <div internal-host focusable>\n <div\n class=\"plane\"\n style=${styleMap({ transform: `scale(${this.#scale}) translate(${-this.#x}px, ${-this.#y}px)` })}\n >\n <slot name=\"background\"></slot>\n <slot @slotchange=${this.#autoFitController.contentChanged}></slot>\n </div>\n <div class=\"overlay\">\n <slot name=\"overlay\"></slot>\n </div>\n </div>\n `;\n }\n\n /** Converts a content-space point to viewport CSS pixels. */\n toViewportCoords(contentX: number, contentY: number): ViewportPoint {\n return {\n x: (contentX - this.#x) * this.#scale,\n y: (contentY - this.#y) * this.#scale\n };\n }\n\n /** Converts a viewport CSS-pixel point to content space. */\n toContentCoords(viewportX: number, viewportY: number): ViewportPoint {\n return contentPointFromViewport(viewportX, viewportY, this.getTransform());\n }\n\n /** Returns the current content-space origin and CSS-pixel scale. */\n getTransform(): ViewportTransform {\n return { scale: this.#scale, x: this.#x, y: this.#y };\n }\n\n /** Returns the visible content-space rectangle. */\n getVisibleRect(): ViewportRect {\n return {\n x: this.#x,\n y: this.#y,\n width: this.clientWidth / this.#scale,\n height: this.clientHeight / this.#scale\n };\n }\n\n /**\n * Requests one discrete user-originated pan. When pannable, the viewport dispatches\n * a cancelable `pan` and applies the default transform if no listener cancels the event.\n * Returns true only when that default changes the transform.\n */\n requestPan(proposal: ViewportPanProposal): boolean {\n if (!this.pannable) return false;\n return this.#requestPan(proposal, { start: this.getTransform(), appliesDefault: true });\n }\n\n /**\n * Requests one discrete user-originated zoom. When zoomable, the viewport dispatches\n * a cancelable `zoom` and applies the default transform if no listener cancels the event.\n * Set `options.animated` to animate the uncanceled default; the option is absent from the `zoom` detail.\n * Returns true when the default changes or schedules a change to the transform.\n */\n requestZoom(proposal: ViewportZoomProposal, options: ViewportZoomRequestOptions = {}): boolean {\n if (!this.zoomable) return false;\n return this.#performZoom(proposal, options);\n }\n\n #performZoom(proposal: ViewportZoomProposal, options: ViewportZoomRequestOptions = {}): boolean {\n const next = this.#normalizeTransform(proposal.next);\n const start = this.getTransform();\n if (!this.#dispatchNavigationEvent('zoom', { ...proposal, next: { ...next }, start: { ...start } }, true))\n return false;\n const current = this.getTransform();\n const unchanged = next.x === current.x && next.y === current.y && next.scale === current.scale;\n if (unchanged && (!options.animated || this.#animationController.destinationScale === undefined)) return false;\n this.#animationController.cancel();\n this.#autoFitController.consume();\n if (options.animated) {\n this.animateTo(next);\n return true;\n }\n if (!this.#commitTransform(next)) return false;\n this.#gestureNavigationController.rebasePointerSessions();\n return true;\n }\n\n /**\n * Starts a sustained semantic pan after the caller crosses its activation threshold.\n * Dispatches `panstart`, performs the initial `pan` update, and returns a session for later updates\n * and one terminal `panend`. Returns undefined when pannable is false.\n */\n startPan(proposal: ViewportPanProposal): ViewportPanSession | undefined {\n if (!this.pannable) return undefined;\n const source = proposal.source;\n const next = this.#normalizeTransform(proposal.next);\n const initialProposal: ViewportPanProposal = { ...proposal, source, next };\n const sessionStart = this.getTransform();\n const appliesDefault = this.#dispatchNavigationEvent(\n 'panstart',\n { ...initialProposal, next: { ...next }, start: { ...sessionStart } },\n true\n );\n let ended = false;\n const session: ViewportPanSession = {\n start: { ...sessionStart },\n update: (update: ViewportPanUpdateProposal): boolean => {\n if (ended) return false;\n return this.#requestPan({ ...update, source }, { start: sessionStart, appliesDefault, isActive: () => !ended });\n },\n end: request => {\n if (ended) return;\n ended = true;\n this.#dispatchNavigationEvent(\n 'panend',\n { ...request, source, start: { ...sessionStart }, transform: this.getTransform() },\n false\n );\n }\n };\n this.#requestPan(initialProposal, { start: sessionStart, appliesDefault, isActive: () => !ended });\n return session;\n }\n\n #requestPan(\n proposal: ViewportPanProposal,\n disposition: { start: ViewportTransform; appliesDefault: boolean; isActive?: () => boolean }\n ): boolean {\n const next = this.#normalizeTransform(proposal.next);\n if (\n !this.#dispatchNavigationEvent('pan', { ...proposal, next: { ...next }, start: { ...disposition.start } }, true)\n ) {\n return false;\n }\n if (!disposition.appliesDefault || disposition.isActive?.() === false) return false;\n const current = this.getTransform();\n if (next.x === current.x && next.y === current.y && next.scale === current.scale) return false;\n this.#animationController.cancel();\n this.#autoFitController.consume();\n if (!this.#commitTransform(next)) return false;\n this.#gestureNavigationController.rebasePointerSessions();\n return true;\n }\n\n #normalizeTransform(next: ViewportTransform): ViewportTransform {\n return { x: finiteOr(next.x, this.#x), y: finiteOr(next.y, this.#y), scale: this.#clampScale(next.scale) };\n }\n\n /** Animates the viewport to the requested partial transform. */\n animateTo(target: Partial<ViewportTransform>, options: ViewportAnimationOptions = {}): void {\n this.#animationController.animateTo(target, options);\n }\n\n /** Centers or fits a content-space region within the viewport. */\n reveal(region: { x: number; y: number; width?: number; height?: number }, options: ViewportRevealOptions = {}): void {\n this.#applyRevealTarget(this.#getRevealTarget(region, this.#revealFitOptions(options)), options);\n }\n\n /** Fits the union of direct default-slot element boxes within the viewport. */\n fitContents(options: ViewportRevealOptions = {}): void {\n const target = this.#getFitContentsTargetFromClientRects(\n this.#clientRectsFromChildren(Array.from(this.children).filter(child => !child.slot)),\n this.#resolveFitOptions(options)\n );\n if (target) this.#applyRevealTarget(target, options);\n }\n\n #getFitContentsTargetFromClientRects(\n clientRects: Iterable<ViewportClientRect>,\n options: ViewportFitOptions\n ): ViewportTransform | undefined {\n if (!this.internalHost) return undefined;\n const transform = this.getTransform();\n const viewportFrame = this.#viewportFrame();\n const region = contentBoundsFromClientRects(clientRects, viewportFrame, transform);\n return region ? this.#getRevealTarget(region, options, transform) : undefined;\n }\n\n #applyInitialAutoFit(clientRects: readonly ViewportClientRect[]): void {\n const target = this.#getFitContentsTargetFromClientRects(clientRects, this.#resolveFitOptions({}));\n if (!target) return;\n this.#animationController.cancel();\n if (this.#commitTransform(target)) {\n this.#gestureNavigationController.rebasePointerSessions();\n }\n }\n\n #applyRevealTarget(target: ViewportTransform, options: ViewportRevealOptions): void {\n if (options.animated) {\n if (options.duration === undefined) this.animateTo(target);\n else this.animateTo(target, { duration: options.duration });\n } else {\n this.#applyExternalTransform(target);\n }\n }\n\n #getRevealTarget(\n region: { x: number; y: number; width?: number; height?: number },\n options: ViewportFitOptions,\n transform = this.getTransform()\n ): ViewportTransform {\n return revealTarget(region, {\n options,\n scaleRange: this.#getScaleRange(),\n transform,\n viewport: { height: this.clientHeight, width: this.clientWidth }\n });\n }\n\n #getZoomTarget(action: ViewportZoomAction, stepScale: number): ViewportTransform | undefined {\n if (action === 'in') return this.#getCenteredScaleTransform(nextScaleStep(1, stepScale, this.#getScaleRange()));\n if (action === 'out') return this.#getCenteredScaleTransform(nextScaleStep(-1, stepScale, this.#getScaleRange()));\n if (action === 'reset') return this.#getCenteredScaleTransform(this.#clampScale(1));\n return this.#getFitContentsTargetFromClientRects(\n this.#clientRectsFromChildren(Array.from(this.children).filter(child => !child.slot)),\n this.#resolveFitOptions({})\n );\n }\n\n #clientRectsFromChildren(children: Iterable<Element>): Iterable<ViewportClientRect> {\n return (function* (): Generator<ViewportClientRect> {\n for (const child of children) yield child.getBoundingClientRect();\n })();\n }\n\n #revealFitOptions(options: ViewportRevealOptions): ViewportFitOptions {\n return { inset: options.inset, scale: options.scale };\n }\n\n #resolveFitOptions(options: ViewportRevealOptions): ViewportFitOptions {\n return { inset: options.inset ?? this.#fitInset, scale: options.scale };\n }\n #getScaleRange(): { min: number; max: number } {\n return { min: this.#minScale, max: this.#maxScale };\n }\n #getCenteredScaleTransform(scale: number): ViewportTransform {\n return centeredScaleTransform(scale, this.getTransform(), { height: this.clientHeight, width: this.clientWidth });\n }\n\n #viewportFrame(): DOMRect {\n return this.internalHost?.getBoundingClientRect() ?? DOMRect.fromRect();\n }\n #clientToViewport(clientX: number, clientY: number, frame = this.#viewportFrame()): ViewportPoint {\n return { x: clientX - frame.left, y: clientY - frame.top };\n }\n\n #commitTransform(next: ViewportTransform): boolean {\n const x = finiteOr(next.x, this.#x);\n const y = finiteOr(next.y, this.#y);\n const scale = this.#clampScale(next.scale);\n if (x === this.#x && y === this.#y && scale === this.#scale) return false;\n this.#updateTransformFields({ scale, x, y });\n return true;\n }\n\n #applyExternalTransform(next: ViewportTransform): void {\n this.#animationController.cancel();\n this.#commitExternalTransform(next);\n }\n\n #commitExternalTransform(next: ViewportTransform): void {\n if (!this.#commitTransform(next)) return;\n if (this.isConnected) this.#autoFitController.consume();\n this.#gestureNavigationController.rebasePointerSessions();\n }\n\n #applyAnimationTransform(next: ViewportTransform): void {\n const committed = this.#commitTransform(next);\n if (!committed) return;\n if (this.isConnected) this.#autoFitController.consume();\n this.#gestureNavigationController.rebasePointerSessions();\n }\n\n #dispatchNavigationEvent<T>(type: string, detail: T, cancelable: boolean): boolean {\n return this.dispatchEvent(\n new CustomEvent<T>(type, {\n bubbles: true,\n cancelable,\n composed: true,\n detail\n })\n );\n }\n\n #updateTransformFields(next: ViewportTransform): void {\n const previousX = this.#x;\n const previousY = this.#y;\n const previousScale = this.#scale;\n this.#x = next.x;\n this.#y = next.y;\n this.#scale = next.scale;\n if (next.x !== previousX) this.requestUpdate('x', previousX);\n if (next.y !== previousY) this.requestUpdate('y', previousY);\n if (next.scale !== previousScale) this.requestUpdate('scale', previousScale);\n }\n #clampScale(value: number): number {\n const finite = Number.isFinite(value) && value > 0 ? value : this.#minScale;\n return Math.min(this.#maxScale, Math.max(this.#minScale, finite));\n }\n}\n\nfunction nextScaleStep(direction: -1 | 1, current: number, scaleRange: { min: number; max: number }): number {\n const steps = [...ZOOM_SCALE_STEPS, scaleRange.min, scaleRange.max]\n .map(scale => Math.min(scaleRange.max, Math.max(scaleRange.min, scale)))\n .sort((first, second) => first - second)\n .filter((scale, index, all) => index === 0 || scale !== all[index - 1]);\n if (direction > 0) return steps.find(scale => scale > current) ?? scaleRange.max;\n for (let index = steps.length - 1; index >= 0; index -= 1) {\n const scale = steps[index];\n if (scale !== undefined && scale < current) return scale;\n }\n return scaleRange.min;\n}\n"],"mappings":"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"}
|
package/dist/week/week.d.ts
CHANGED
|
@@ -31,5 +31,5 @@ export declare class Week extends Control implements ContainerElement {
|
|
|
31
31
|
static elementDefinitions: {
|
|
32
32
|
[IconButton.metadata.tag]: typeof IconButton;
|
|
33
33
|
};
|
|
34
|
-
protected get suffixContent(): import("lit").TemplateResult<1>;
|
|
34
|
+
protected get suffixContent(): import("lit-html").TemplateResult<1>;
|
|
35
35
|
}
|