@nvidia-elements/core 2.10.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.
Files changed (167) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/accordion/accordion2.js +4 -4
  3. package/dist/alert/alert-group2.js +1 -1
  4. package/dist/alert/alert2.js +1 -1
  5. package/dist/avatar/avatar-group2.js +1 -1
  6. package/dist/avatar/avatar2.js +1 -1
  7. package/dist/badge/badge2.js +1 -1
  8. package/dist/breadcrumb/breadcrumb2.js +1 -1
  9. package/dist/bundles/index.d.ts +176 -43
  10. package/dist/bundles/index.js +6 -6
  11. package/dist/button/button2.js +1 -1
  12. package/dist/button-group/button-group2.js +1 -1
  13. package/dist/card/card2.js +4 -4
  14. package/dist/chat-message/chat-message2.js +1 -1
  15. package/dist/checkbox/checkbox-group2.js +1 -1
  16. package/dist/checkbox/checkbox2.js +1 -1
  17. package/dist/color/color2.js +1 -1
  18. package/dist/combobox/combobox2.js +1 -1
  19. package/dist/copy-button/copy-button2.js +1 -1
  20. package/dist/custom-elements-jsx.d.ts +101 -9
  21. package/dist/custom-elements-vue.d.ts +99 -9
  22. package/dist/custom-elements.json +859 -146
  23. package/dist/data.html.json +51 -3
  24. package/dist/date/date2.js +1 -1
  25. package/dist/datetime/datetime2.js +1 -1
  26. package/dist/dialog/dialog-footer2.js +1 -1
  27. package/dist/dialog/dialog-header2.js +1 -1
  28. package/dist/dialog/dialog2.js +1 -1
  29. package/dist/divider/divider2.js +1 -1
  30. package/dist/dot/dot2.js +1 -1
  31. package/dist/drawer/drawer-content2.js +1 -1
  32. package/dist/drawer/drawer-footer2.js +1 -1
  33. package/dist/drawer/drawer-header2.js +1 -1
  34. package/dist/drawer/drawer2.js +1 -1
  35. package/dist/dropdown/dropdown-footer2.js +1 -1
  36. package/dist/dropdown/dropdown-header2.js +1 -1
  37. package/dist/dropdown/dropdown2.js +1 -1
  38. package/dist/dropdown-group/dropdown-group.js +1 -1
  39. package/dist/dropzone/dropzone2.js +1 -1
  40. package/dist/file/file2.js +1 -1
  41. package/dist/format-bytes/format-bytes2.js +1 -1
  42. package/dist/format-datetime/format-datetime2.js +1 -1
  43. package/dist/format-number/format-number2.js +1 -1
  44. package/dist/format-relative-time/format-relative-time2.js +1 -1
  45. package/dist/format-truncate/format-truncate2.js +1 -1
  46. package/dist/forms/control/control2.js +1 -1
  47. package/dist/forms/control-group/control-group2.js +1 -1
  48. package/dist/forms/control-message/control-message2.js +1 -1
  49. package/dist/gauge/gauge2.js +1 -1
  50. package/dist/grid/cell/cell2.js +1 -1
  51. package/dist/grid/column/column2.js +1 -1
  52. package/dist/grid/footer/footer2.js +1 -1
  53. package/dist/grid/grid2.js +1 -1
  54. package/dist/grid/header/header2.js +1 -1
  55. package/dist/grid/placeholder/placeholder2.js +1 -1
  56. package/dist/grid/row/row2.js +1 -1
  57. package/dist/icon/icon2.js +2 -2
  58. package/dist/icon-button/icon-button2.js +1 -1
  59. package/dist/index.js +1 -1
  60. package/dist/input/input-group2.js +1 -1
  61. package/dist/input/input2.js +1 -1
  62. package/dist/internal/services/global.service.js +1 -1
  63. package/dist/internal/types/index.d.ts +6 -2
  64. package/dist/internal/types/index.js.map +1 -1
  65. package/dist/internal/utils/audit.js +1 -1
  66. package/dist/internal/utils/audit.js.map +1 -1
  67. package/dist/logo/logo2.js +1 -1
  68. package/dist/menu/define.d.ts +2 -1
  69. package/dist/menu/define.js +3 -2
  70. package/dist/menu/define.js.map +1 -1
  71. package/dist/menu/index.d.ts +1 -0
  72. package/dist/menu/index.js +3 -2
  73. package/dist/menu/menu-group.d.ts +50 -0
  74. package/dist/menu/menu-group.js +6 -0
  75. package/dist/menu/menu-group.js.map +1 -0
  76. package/dist/menu/menu-group2.js +53 -0
  77. package/dist/menu/menu-group2.js.map +1 -0
  78. package/dist/menu/menu-item.d.ts +1 -0
  79. package/dist/menu/menu-item.js +1 -1
  80. package/dist/menu/menu-item.js.map +1 -1
  81. package/dist/menu/menu-item2.js +2 -2
  82. package/dist/menu/menu-item2.js.map +1 -1
  83. package/dist/menu/menu.d.ts +6 -1
  84. package/dist/menu/menu.examples.js.map +1 -1
  85. package/dist/menu/menu.examples.json +53 -13
  86. package/dist/menu/menu.global.js +1 -1
  87. package/dist/menu/menu.global.js.map +1 -1
  88. package/dist/menu/menu2.js +16 -8
  89. package/dist/menu/menu2.js.map +1 -1
  90. package/dist/month/month2.js +1 -1
  91. package/dist/notification/notification-group2.js +1 -1
  92. package/dist/notification/notification2.js +1 -1
  93. package/dist/page/page-panel/page-panel-content2.js +1 -1
  94. package/dist/page/page-panel/page-panel-footer2.js +1 -1
  95. package/dist/page/page-panel/page-panel-header2.js +1 -1
  96. package/dist/page/page-panel/page-panel2.js +1 -1
  97. package/dist/page/page2.js +1 -1
  98. package/dist/page-header/page-header2.js +1 -1
  99. package/dist/page-loader/page-loader2.js +1 -1
  100. package/dist/pagination/pagination2.js +1 -1
  101. package/dist/panel/panel2.js +4 -4
  102. package/dist/password/password2.js +1 -1
  103. package/dist/preferences-input/preferences-input2.js +1 -1
  104. package/dist/progress-bar/progress-bar2.js +1 -1
  105. package/dist/progress-ring/progress-ring2.js +1 -1
  106. package/dist/progressive-filter-chip/progressive-filter-chip2.js +1 -1
  107. package/dist/pulse/pulse2.js +1 -1
  108. package/dist/radio/radio-group2.js +1 -1
  109. package/dist/radio/radio2.js +1 -1
  110. package/dist/range/range2.js +1 -1
  111. package/dist/resize-handle/resize-handle2.js +1 -1
  112. package/dist/search/search2.js +1 -1
  113. package/dist/select/select2.js +1 -1
  114. package/dist/skeleton/skeleton2.js +1 -1
  115. package/dist/sort-button/sort-button2.js +1 -1
  116. package/dist/sparkline/sparkline2.js +1 -1
  117. package/dist/star-rating/star-rating2.js +1 -1
  118. package/dist/steps/steps.d.ts +3 -3
  119. package/dist/steps/steps2.js +2 -2
  120. package/dist/steps/steps2.js.map +1 -1
  121. package/dist/switch/switch-group2.js +1 -1
  122. package/dist/switch/switch2.js +1 -1
  123. package/dist/tabs/tabs-group2.js +1 -1
  124. package/dist/tabs/tabs2.js +2 -2
  125. package/dist/tag/tag2.js +1 -1
  126. package/dist/textarea/textarea2.js +1 -1
  127. package/dist/time/time2.js +1 -1
  128. package/dist/toast/toast2.js +1 -1
  129. package/dist/toggletip/toggletip-footer2.js +1 -1
  130. package/dist/toggletip/toggletip-header2.js +1 -1
  131. package/dist/toggletip/toggletip2.js +1 -1
  132. package/dist/toolbar/toolbar2.js +1 -1
  133. package/dist/tooltip/tooltip2.js +1 -1
  134. package/dist/tree/tree-node2.js +1 -1
  135. package/dist/tree/tree2.js +1 -1
  136. package/dist/viewport/define.d.ts +2 -1
  137. package/dist/viewport/define.js +2 -1
  138. package/dist/viewport/define.js.map +1 -1
  139. package/dist/viewport/index.d.ts +2 -1
  140. package/dist/viewport/index.js +2 -1
  141. package/dist/viewport/viewport-gesture-navigation.controller.d.ts +8 -10
  142. package/dist/viewport/viewport-gesture-navigation.controller.js +73 -66
  143. package/dist/viewport/viewport-gesture-navigation.controller.js.map +1 -1
  144. package/dist/viewport/viewport-gridlines2.js +3 -3
  145. package/dist/viewport/viewport-gridlines2.js.map +1 -1
  146. package/dist/viewport/viewport-minimap.d.ts +36 -0
  147. package/dist/viewport/viewport-minimap.js +6 -0
  148. package/dist/viewport/viewport-minimap.js.map +1 -0
  149. package/dist/viewport/viewport-minimap.utils.d.ts +13 -0
  150. package/dist/viewport/viewport-minimap.utils.js +49 -0
  151. package/dist/viewport/viewport-minimap.utils.js.map +1 -0
  152. package/dist/viewport/viewport-minimap2.js +309 -0
  153. package/dist/viewport/viewport-minimap2.js.map +1 -0
  154. package/dist/viewport/viewport-navigation.controller.d.ts +7 -13
  155. package/dist/viewport/viewport-navigation.controller.js +14 -20
  156. package/dist/viewport/viewport-navigation.controller.js.map +1 -1
  157. package/dist/viewport/viewport-navigation.types.d.ts +0 -8
  158. package/dist/viewport/viewport.d.ts +30 -5
  159. package/dist/viewport/viewport.examples.js.map +1 -1
  160. package/dist/viewport/viewport.examples.json +13 -4
  161. package/dist/viewport/viewport.js +1 -1
  162. package/dist/viewport/viewport.js.map +1 -1
  163. package/dist/viewport/viewport.types.d.ts +50 -23
  164. package/dist/viewport/viewport2.js +173 -118
  165. package/dist/viewport/viewport2.js.map +1 -1
  166. package/dist/week/week2.js +1 -1
  167. package/package.json +1 -1
@@ -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.10.0"
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.#h(e)), this.#i = {
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.#A(e);
62
+ this.#j(e);
71
63
  },
72
- clampScale: (e) => this.#N(e),
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.#v(e, this.#n.destinationScale ?? this.#c),
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
- commitTransform: (e) => this.#D(e),
90
- cancelAnimation: () => this.#n.cancel(),
91
- clampScale: (e) => this.#N(e),
92
- clientToViewport: (e, t) => this.#T(e, t),
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.#o;
81
+ return this.#a;
100
82
  }
101
83
  set x(e) {
102
- this.#O({
84
+ this.#k({
103
85
  ...this.getTransform(),
104
86
  x: r(e, 0)
105
87
  });
106
88
  }
107
89
  get y() {
108
- return this.#s;
90
+ return this.#o;
109
91
  }
110
92
  set y(e) {
111
- this.#O({
93
+ this.#k({
112
94
  ...this.getTransform(),
113
95
  y: r(e, 0)
114
96
  });
115
97
  }
116
98
  get scale() {
117
- return this.#c;
99
+ return this.#s;
118
100
  }
119
101
  set scale(e) {
120
- this.#O({
102
+ this.#k({
121
103
  ...this.getTransform(),
122
104
  scale: e
123
105
  });
124
106
  }
125
107
  get minScale() {
126
- return this.#l;
108
+ return this.#c;
127
109
  }
128
110
  set minScale(e) {
129
- let t = Math.min(a(e, x), this.#u);
130
- if (t === this.#l) return;
131
- let n = this.#l;
132
- this.#n.cancel(), this.#l = t, this.requestUpdate("minScale", n), this.#k({
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.#c
116
+ scale: this.#s
135
117
  });
136
118
  }
137
119
  get maxScale() {
138
- return this.#u;
120
+ return this.#l;
139
121
  }
140
122
  set maxScale(e) {
141
- let t = Math.max(a(e, S), this.#l);
142
- if (t === this.#u) return;
143
- let n = this.#u;
144
- this.#n.cancel(), this.#u = t, this.requestUpdate("maxScale", n), this.#k({
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.#c
128
+ scale: this.#s
147
129
  });
148
130
  }
149
131
  get behaviorPan() {
150
- return this.#p;
132
+ return this.#f;
151
133
  }
152
134
  set behaviorPan(e) {
153
135
  let t = e === "space" ? "space" : !!e;
154
- if (t === this.#p) return;
155
- let n = this.#p;
156
- this.#p = t, this.requestUpdate("behaviorPan", n);
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.#f;
147
+ return this.#d;
160
148
  }
161
149
  set fitInset(e) {
162
150
  let t = i(e, 0);
163
- if (t === this.#f) return;
164
- let n = this.#f;
165
- this.#f = t, this.requestUpdate("fitInset", n);
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.#d;
156
+ return this.#u;
169
157
  }
170
158
  set dragThreshold(e) {
171
159
  let t = i(e, C);
172
- if (t === this.#d) return;
173
- let n = this.#d;
174
- this.#d = t, this.requestUpdate("dragThreshold", n);
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.#a = !0);
165
+ super.connectedCallback(), t(this), this.hasUpdated && !this.isUpdatePending && (this.#i = !0);
178
166
  }
179
167
  disconnectedCallback() {
180
- this.#a = !1, super.disconnectedCallback();
168
+ this.#i = !1, super.disconnectedCallback();
181
169
  }
182
170
  updated(e) {
183
- super.updated(e), this.isConnected && this.#a && (e.has("x") || e.has("y") || e.has("scale")) && this.dispatchEvent(new CustomEvent("viewportchange", {
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.#a = this.isConnected;
178
+ })), this.#i = this.isConnected;
188
179
  }
189
180
  render() {
190
- return _`<div internal-host focusable><div class="plane" style="${b({ transform: `scale(${this.#c}) translate(${-this.#o}px, ${-this.#s}px)` })}"><slot name="background"></slot><slot @slotchange="${this.#r.contentChanged}"></slot></div></div>`;
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.#o) * this.#c,
195
- y: (t - this.#s) * this.#c
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.#c,
204
- x: this.#o,
205
- y: this.#s
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.#o,
211
- y: this.#s,
212
- width: this.clientWidth / this.#c,
213
- height: this.clientHeight / this.#c
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.#g(this.#_(e, this.#b(t)), t);
282
+ this.#v(this.#y(e, this.#S(t)), t);
221
283
  }
222
284
  fitContents(e = {}) {
223
- let t = this.#m(this.#y(Array.from(this.children).filter((e) => !e.slot)), this.#x(e));
224
- t && this.#g(t, e);
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
- #m(e, t) {
288
+ #g(e, t) {
227
289
  if (!this.internalHost) return;
228
- let n = this.getTransform(), r = this.#w(), i = u(e, r, n);
229
- return i ? this.#_(i, t, n) : void 0;
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
- #h(e) {
232
- let t = this.#m(e, this.#x({}));
233
- t && (this.#n.cancel(), this.#D(t) && this.#t.rebasePointerSessions());
293
+ #_(e) {
294
+ let t = this.#g(e, this.#C({}));
295
+ t && (this.#n.cancel(), this.#O(t) && this.#t.rebasePointerSessions());
234
296
  }
235
- #g(e, t) {
236
- t.animated ? t.duration === void 0 ? this.animateTo(e) : this.animateTo(e, { duration: t.duration }) : this.#O(e);
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
- #_(e, t, n = this.getTransform()) {
300
+ #y(e, t, n = this.getTransform()) {
239
301
  return d(e, {
240
302
  options: t,
241
- scaleRange: this.#S(),
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
- #v(e, t) {
250
- return e === "in" ? this.#C(D(1, t, this.#S())) : e === "out" ? this.#C(D(-1, t, this.#S())) : e === "reset" ? this.#C(this.#N(1)) : this.#m(this.#y(Array.from(this.children).filter((e) => !e.slot)), this.#x({}));
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
- #y(e) {
314
+ #x(e) {
253
315
  return (function* () {
254
316
  for (let t of e) yield t.getBoundingClientRect();
255
317
  })();
256
318
  }
257
- #b(e) {
319
+ #S(e) {
258
320
  return {
259
321
  inset: e.inset,
260
322
  scale: e.scale
261
323
  };
262
324
  }
263
- #x(e) {
325
+ #C(e) {
264
326
  return {
265
- inset: e.inset ?? this.#f,
327
+ inset: e.inset ?? this.#d,
266
328
  scale: e.scale
267
329
  };
268
330
  }
269
- #S() {
331
+ #w() {
270
332
  return {
271
- min: this.#l,
272
- max: this.#u
333
+ min: this.#c,
334
+ max: this.#l
273
335
  };
274
336
  }
275
- #C(e) {
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
- #w() {
343
+ #E() {
282
344
  return this.internalHost?.getBoundingClientRect() ?? DOMRect.fromRect();
283
345
  }
284
- #T(e, t, n = this.#w()) {
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
- #E(e, t) {
291
- let n = this.#w();
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.#D(e) && (this.isConnected && this.#r.consume(), this.#t.rebasePointerSessions());
361
+ this.#n.cancel(), this.#A(e);
310
362
  }
311
363
  #A(e) {
312
- this.#D(e) && (this.isConnected && this.#r.consume(), this.#t.rebasePointerSessions());
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
- #j(e, t, n) {
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 = Number.isFinite(e) && e > 0 ? e : this.#l;
328
- return Math.min(this.#u, Math.max(this.#l, t));
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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"}
@@ -19,7 +19,7 @@ var l = class extends r {
19
19
  static {
20
20
  this.metadata = {
21
21
  tag: "nve-week",
22
- version: "2.10.0"
22
+ version: "2.11.0"
23
23
  };
24
24
  }
25
25
  static {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nvidia-elements/core",
3
- "version": "2.10.0",
3
+ "version": "2.11.0",
4
4
  "release": {
5
5
  "extends": "../../release.config.js"
6
6
  },