one 1.10.2 → 1.10.3

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.
@@ -18,6 +18,8 @@
18
18
  const mousePos = { x: 0, y: 0 }
19
19
  let removalObserver = null
20
20
  let currentElementChain = []
21
+ let currentUnderChain = []
22
+ let currentPickerTab = 'above'
21
23
  let recording = false
22
24
  let recordEvents = []
23
25
  let recordStartTime = 0
@@ -91,6 +93,12 @@
91
93
  .toast-big { font-size: 48px; font-weight: 600; color: #f55; }
92
94
  .toast-big.success { color: #4ade80; }
93
95
  .toast-hint { font-size: 12px; color: #888; margin-top: 12px; }
96
+ .picker-tabs { display: flex; background: #111; border-bottom: 1px solid #252525; }
97
+ .picker-tab { flex: 1; background: none; border: none; color: #666; padding: 6px 8px; font: 11px system-ui, sans-serif; cursor: pointer; border-bottom: 2px solid transparent; transition: color 0.1s, border-color 0.1s; }
98
+ .picker-tab:hover { color: #aaa; }
99
+ .picker-tab.active { color: #fff; border-bottom-color: #888; }
100
+ .picker-tab-count { font-size: 10px; color: #555; margin-left: 4px; }
101
+ .picker-tab.active .picker-tab-count { color: #888; }
94
102
  .picker-list { max-height: 240px; overflow-y: auto; overscroll-behavior: contain; scrollbar-width: thin; scrollbar-color: #333 transparent; }
95
103
  .picker-list::-webkit-scrollbar { width: 4px; }
96
104
  .picker-list::-webkit-scrollbar-track { background: transparent; }
@@ -114,6 +122,10 @@
114
122
  <button class="picker-btn" data-action="copy">Copy</button>
115
123
  <button class="picker-btn" data-action="record" id="record-btn"><span class="rec-dot"></span><span class="rec-tooltip">Tap Option to stop</span></button>
116
124
  </div>
125
+ <div class="picker-tabs" id="picker-tabs">
126
+ <button class="picker-tab active" data-tab="above">Above</button>
127
+ <button class="picker-tab" data-tab="under">Under</button>
128
+ </div>
117
129
  <div class="picker-list" id="picker-list"></div>
118
130
  </div>
119
131
  </dialog>
@@ -172,6 +184,19 @@
172
184
  }
173
185
  })
174
186
 
187
+ // tab switching
188
+ const tabs = shadow.getElementById('picker-tabs')
189
+ tabs.addEventListener('click', (e) => {
190
+ const tab = e.target.closest('.picker-tab')
191
+ if (!tab) return
192
+ const tabName = tab.dataset.tab
193
+ if (tabName === currentPickerTab) return
194
+ currentPickerTab = tabName
195
+ tabs.querySelectorAll('.picker-tab').forEach((t) => t.classList.remove('active'))
196
+ tab.classList.add('active')
197
+ renderPickerList(tabName === 'under' ? currentUnderChain : currentElementChain)
198
+ })
199
+
175
200
  list.addEventListener('click', (e) => {
176
201
  const item = e.target.closest('.picker-item')
177
202
  if (!item) return
@@ -181,6 +206,21 @@
181
206
  pickerDialog.close()
182
207
  }
183
208
  })
209
+
210
+ // highlight element on hover in the list
211
+ list.addEventListener('mouseover', (e) => {
212
+ const item = e.target.closest('.picker-item')
213
+ if (!item) return
214
+ const source = item.dataset.source
215
+ if (!source) return
216
+ const chain = currentPickerTab === 'under' ? currentUnderChain : currentElementChain
217
+ const entry = chain.find((c) => c.source === source)
218
+ if (entry) showOverlay(entry.element, entry.source)
219
+ })
220
+
221
+ list.addEventListener('mouseleave', () => {
222
+ hideOverlay()
223
+ })
184
224
  }
185
225
 
186
226
  function flashCopied(btn) {
@@ -649,6 +689,20 @@
649
689
  return chain
650
690
  }
651
691
 
692
+ function getUnderChain(topElement) {
693
+ if (!topElement) return []
694
+ const chain = []
695
+ const descendants = topElement.querySelectorAll('[data-one-source]')
696
+ for (const element of descendants) {
697
+ chain.push({
698
+ element,
699
+ source: element.getAttribute('data-one-source'),
700
+ name: getComponentName(element.getAttribute('data-one-source')),
701
+ })
702
+ }
703
+ return chain
704
+ }
705
+
652
706
  function getComponentName(source) {
653
707
  const parts = source.split(':')
654
708
  const filePath = parts.slice(0, -2).join(':')
@@ -657,18 +711,17 @@
657
711
  return fileName.replace(/\.(tsx?|jsx?)$/, '')
658
712
  }
659
713
 
660
- function showPicker(x, y, chain) {
661
- if (!host) createHost()
662
- currentElementChain = chain
663
-
664
- // build list items
714
+ function renderPickerList(chain) {
665
715
  const listEl = shadow.getElementById('picker-list')
716
+ if (!chain.length) {
717
+ listEl.innerHTML = '<div class="picker-item" style="color:#555;cursor:default;">No elements</div>'
718
+ return
719
+ }
666
720
  listEl.innerHTML = chain
667
721
  .map((el) => {
668
722
  const parts = el.source.split(':')
669
723
  const filePath = parts.slice(0, -2).join(':')
670
724
  const line = parts[parts.length - 2]
671
- // show just filename:line
672
725
  const shortFile = filePath.split('/').pop() + ':' + line
673
726
  return (
674
727
  '<div class="picker-item" data-source="' +
@@ -684,6 +737,38 @@
684
737
  )
685
738
  })
686
739
  .join('')
740
+ }
741
+
742
+ function showPicker(x, y, chain) {
743
+ if (!host) createHost()
744
+ currentElementChain = chain
745
+
746
+ // get descendants of the top element
747
+ const topElement = chain.length ? chain[0].element : null
748
+ currentUnderChain = topElement ? getUnderChain(topElement) : []
749
+
750
+ // reset to "above" tab
751
+ currentPickerTab = 'above'
752
+ const tabs = shadow.getElementById('picker-tabs')
753
+ const tabBtns = tabs.querySelectorAll('.picker-tab')
754
+ tabBtns.forEach((t) => {
755
+ const isAbove = t.dataset.tab === 'above'
756
+ t.classList.toggle('active', isAbove)
757
+ })
758
+
759
+ // set tab counts
760
+ tabBtns.forEach((t) => {
761
+ const count = t.dataset.tab === 'above' ? chain.length : currentUnderChain.length
762
+ let countSpan = t.querySelector('.picker-tab-count')
763
+ if (!countSpan) {
764
+ countSpan = document.createElement('span')
765
+ countSpan.className = 'picker-tab-count'
766
+ t.appendChild(countSpan)
767
+ }
768
+ countSpan.textContent = count
769
+ })
770
+
771
+ renderPickerList(chain)
687
772
 
688
773
  // position picker near click, smart about viewport edges
689
774
  const pickerWidth = 320
@@ -711,19 +796,22 @@
711
796
  const picker = shadow.getElementById('picker')
712
797
  const header = picker.querySelector('.picker-header')
713
798
  const actions = picker.querySelector('.picker-actions')
799
+ const pickerTabs = picker.querySelector('.picker-tabs')
714
800
  const list = picker.querySelector('.picker-list')
715
801
 
716
802
  if (flippedUp) {
717
803
  // picker is above click, put actions at bottom (closest to mouse)
718
804
  picker.style.flexDirection = 'column'
719
805
  header.style.order = '0'
720
- list.style.order = '1'
721
- actions.style.order = '2'
806
+ pickerTabs.style.order = '1'
807
+ list.style.order = '2'
808
+ actions.style.order = '3'
722
809
  } else {
723
810
  // picker is below click, put actions at top (closest to mouse)
724
811
  picker.style.flexDirection = 'column'
725
- header.style.order = '1'
726
- list.style.order = '2'
812
+ header.style.order = '2'
813
+ pickerTabs.style.order = '1'
814
+ list.style.order = '3'
727
815
  actions.style.order = '0'
728
816
  }
729
817
 
@@ -26,7 +26,7 @@ module.exports = __toCommonJS(redirect_exports);
26
26
  var import_getURL = require("../getURL.cjs"),
27
27
  import_imperative_api = require("../router/imperative-api.cjs");
28
28
  const redirect = (path, status) => {
29
- if (process.env.VITE_ENVIRONMENT === "client") {
29
+ if (process.env.VITE_ENVIRONMENT !== "ssr") {
30
30
  import_imperative_api.router.navigate(path);
31
31
  return;
32
32
  }
@@ -19,7 +19,7 @@ __export(redirect_exports, {
19
19
  module.exports = __toCommonJS(redirect_exports);
20
20
  var import_getURL = require("../getURL"), import_imperative_api = require("../router/imperative-api");
21
21
  const redirect = (path, status) => {
22
- if (process.env.VITE_ENVIRONMENT === "client") {
22
+ if (process.env.VITE_ENVIRONMENT !== "ssr") {
23
23
  import_imperative_api.router.navigate(path);
24
24
  return;
25
25
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/utils/redirect.ts"],
4
- "mappings": ";;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAuB,sBAEvB,wBAAuB;AAEhB,MAAM,WAAW,CACtB,MACA,WACG;AACH,MAAI,QAAQ,IAAI,qBAAqB,UAAU;AAC7C,iCAAO,SAAS,IAAI;AACpB;AAAA,EACF;AAEA,QAAM,YAAY,KAAK,CAAC,MAAM,MAAM,OAAG,sBAAO,CAAC,GAAG,IAAI,KAAK;AAC3D,SAAO,SAAS,SAAS,WAAqB,MAAM;AACtD;",
4
+ "mappings": ";;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAuB,sBAEvB,wBAAuB;AAEhB,MAAM,WAAW,CACtB,MACA,WACG;AACH,MAAI,QAAQ,IAAI,qBAAqB,OAAO;AAC1C,iCAAO,SAAS,IAAI;AACpB;AAAA,EACF;AAEA,QAAM,YAAY,KAAK,CAAC,MAAM,MAAM,OAAG,sBAAO,CAAC,GAAG,IAAI,KAAK;AAC3D,SAAO,SAAS,SAAS,WAAqB,MAAM;AACtD;",
5
5
  "names": []
6
6
  }
@@ -28,7 +28,7 @@ module.exports = __toCommonJS(redirect_exports);
28
28
  var import_getURL = require("../getURL.native.js"),
29
29
  import_imperative_api = require("../router/imperative-api.native.js"),
30
30
  redirect = function (path, status) {
31
- if (process.env.VITE_ENVIRONMENT === "client") {
31
+ if (process.env.VITE_ENVIRONMENT !== "ssr") {
32
32
  import_imperative_api.router.navigate(path);
33
33
  return;
34
34
  }
@@ -1 +1 @@
1
- {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","redirect_exports","__export","redirect","module","exports","import_getURL","require","import_imperative_api","path","status","process","env","VITE_ENVIRONMENT","router","navigate","finalPath","getURL","Response"],"sources":["../../../src/utils/redirect.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,gBAAA;AAAAC,QAAA,CAAAD,gBAAA;EAAAE,QAAA,EAAAA,CAAA,KAAAA;AAAA;AAAAC,MAAA,CAAAC,OAAA,GAAAT,YAAuB,CAAAK,gBAEvB;AAEO,IAAAK,aAAiB,GACtBC,OACA,sBACG;EAAAC,qBAAA,GAAAD,OAAA;EAAAJ,QAAA,YAAAA,CAAAM,IAAA,EAAAC,MAAA;IACH,IAAIC,OAAA,CAAQC,GAAA,CAAIC,gBAAA,KAAqB,UAAU;MAC7CL,qBAAA,CAAAM,MAAA,CAAOC,QAAA,CAASN,IAAI;MACpB;IACF;IAEA,IAAAO,SAAM,GAAAP,IAAY,GAAK,KAAC,GAAM,MAAM,IAAAH,aAAG,CAAAW,MAAA,MAAQR,IAAG,EAAI,GAAAA,IAAK;IAC3D,OAAOS,QAAA,CAASf,QAAA,CAASa,SAAA,EAAqBN,MAAM;EACtD","ignoreList":[]}
1
+ {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","redirect_exports","__export","redirect","module","exports","import_getURL","require","import_imperative_api","path","status","process","env","VITE_ENVIRONMENT","router","navigate","finalPath","getURL","Response"],"sources":["../../../src/utils/redirect.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,gBAAA;AAAAC,QAAA,CAAAD,gBAAA;EAAAE,QAAA,EAAAA,CAAA,KAAAA;AAAA;AAAAC,MAAA,CAAAC,OAAA,GAAAT,YAAuB,CAAAK,gBAEvB;AAEO,IAAAK,aAAiB,GACtBC,OACA,sBACG;EAAAC,qBAAA,GAAAD,OAAA;EAAAJ,QAAA,YAAAA,CAAAM,IAAA,EAAAC,MAAA;IACH,IAAIC,OAAA,CAAQC,GAAA,CAAIC,gBAAA,KAAqB,OAAO;MAC1CL,qBAAA,CAAAM,MAAA,CAAOC,QAAA,CAASN,IAAI;MACpB;IACF;IAEA,IAAAO,SAAM,GAAAP,IAAY,GAAK,KAAC,GAAM,MAAM,IAAAH,aAAG,CAAAW,MAAA,MAAQR,IAAG,EAAI,GAAAA,IAAK;IAC3D,OAAOS,QAAA,CAASf,QAAA,CAASa,SAAA,EAAqBN,MAAM;EACtD","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  import { getURL } from "../getURL";
2
2
  import { router } from "../router/imperative-api";
3
3
  const redirect = (path, status) => {
4
- if (process.env.VITE_ENVIRONMENT === "client") {
4
+ if (process.env.VITE_ENVIRONMENT !== "ssr") {
5
5
  router.navigate(path);
6
6
  return;
7
7
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/utils/redirect.ts"],
4
- "mappings": "AAAA,SAAS,cAAc;AAEvB,SAAS,cAAc;AAEhB,MAAM,WAAW,CACtB,MACA,WACG;AACH,MAAI,QAAQ,IAAI,qBAAqB,UAAU;AAC7C,WAAO,SAAS,IAAI;AACpB;AAAA,EACF;AAEA,QAAM,YAAY,KAAK,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI,KAAK;AAC3D,SAAO,SAAS,SAAS,WAAqB,MAAM;AACtD;",
4
+ "mappings": "AAAA,SAAS,cAAc;AAEvB,SAAS,cAAc;AAEhB,MAAM,WAAW,CACtB,MACA,WACG;AACH,MAAI,QAAQ,IAAI,qBAAqB,OAAO;AAC1C,WAAO,SAAS,IAAI;AACpB;AAAA,EACF;AAEA,QAAM,YAAY,KAAK,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI,KAAK;AAC3D,SAAO,SAAS,SAAS,WAAqB,MAAM;AACtD;",
5
5
  "names": []
6
6
  }
@@ -1,7 +1,7 @@
1
1
  import { getURL } from "../getURL.mjs";
2
2
  import { router } from "../router/imperative-api.mjs";
3
3
  const redirect = (path, status) => {
4
- if (process.env.VITE_ENVIRONMENT === "client") {
4
+ if (process.env.VITE_ENVIRONMENT !== "ssr") {
5
5
  router.navigate(path);
6
6
  return;
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"names":["getURL","router","redirect","path","status","process","env","VITE_ENVIRONMENT","navigate","finalPath","Response"],"sources":["../../../src/utils/redirect.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,MAAA,QAAc;AAEvB,SAASC,MAAA,QAAc;AAEhB,MAAMC,QAAA,GAAWA,CACtBC,IAAA,EACAC,MAAA,KACG;EACH,IAAIC,OAAA,CAAQC,GAAA,CAAIC,gBAAA,KAAqB,UAAU;IAC7CN,MAAA,CAAOO,QAAA,CAASL,IAAI;IACpB;EACF;EAEA,MAAMM,SAAA,GAAYN,IAAA,CAAK,CAAC,MAAM,MAAM,GAAGH,MAAA,CAAO,CAAC,GAAGG,IAAI,KAAKA,IAAA;EAC3D,OAAOO,QAAA,CAASR,QAAA,CAASO,SAAA,EAAqBL,MAAM;AACtD","ignoreList":[]}
1
+ {"version":3,"names":["getURL","router","redirect","path","status","process","env","VITE_ENVIRONMENT","navigate","finalPath","Response"],"sources":["../../../src/utils/redirect.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,MAAA,QAAc;AAEvB,SAASC,MAAA,QAAc;AAEhB,MAAMC,QAAA,GAAWA,CACtBC,IAAA,EACAC,MAAA,KACG;EACH,IAAIC,OAAA,CAAQC,GAAA,CAAIC,gBAAA,KAAqB,OAAO;IAC1CN,MAAA,CAAOO,QAAA,CAASL,IAAI;IACpB;EACF;EAEA,MAAMM,SAAA,GAAYN,IAAA,CAAK,CAAC,MAAM,MAAM,GAAGH,MAAA,CAAO,CAAC,GAAGG,IAAI,KAAKA,IAAA;EAC3D,OAAOO,QAAA,CAASR,QAAA,CAASO,SAAA,EAAqBL,MAAM;AACtD","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  import { getURL } from "../getURL.native.js";
2
2
  import { router } from "../router/imperative-api.native.js";
3
3
  var redirect = function (path, status) {
4
- if (process.env.VITE_ENVIRONMENT === "client") {
4
+ if (process.env.VITE_ENVIRONMENT !== "ssr") {
5
5
  router.navigate(path);
6
6
  return;
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"names":["getURL","router","redirect","path","status","process","env","VITE_ENVIRONMENT","navigate","finalPath","Response"],"sources":["../../../src/utils/redirect.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,MAAA,QAAc;AAEvB,SAASC,MAAA,QAAc;AAEhB,IAAAC,QAAM,YAAAA,CAEXC,IAAA,EAAAC,MACG;EACH,IAAIC,OAAA,CAAQC,GAAA,CAAIC,gBAAA,KAAqB,UAAU;IAC7CN,MAAA,CAAOO,QAAA,CAASL,IAAI;IACpB;EACF;EAEA,IAAAM,SAAM,GAAAN,IAAY,GAAK,KAAC,GAAM,MAAMH,MAAG,KAAQG,IAAG,EAAI,GAAAA,IAAK;EAC3D,OAAOO,QAAA,CAASR,QAAA,CAASO,SAAA,EAAqBL,MAAM;AACtD","ignoreList":[]}
1
+ {"version":3,"names":["getURL","router","redirect","path","status","process","env","VITE_ENVIRONMENT","navigate","finalPath","Response"],"sources":["../../../src/utils/redirect.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,MAAA,QAAc;AAEvB,SAASC,MAAA,QAAc;AAEhB,IAAAC,QAAM,YAAAA,CAEXC,IAAA,EAAAC,MACG;EACH,IAAIC,OAAA,CAAQC,GAAA,CAAIC,gBAAA,KAAqB,OAAO;IAC1CN,MAAA,CAAOO,QAAA,CAASL,IAAI;IACpB;EACF;EAEA,IAAAM,SAAM,GAAAN,IAAY,GAAK,KAAC,GAAM,MAAMH,MAAG,KAAQG,IAAG,EAAI,GAAAA,IAAK;EAC3D,OAAOO,QAAA,CAASR,QAAA,CAASO,SAAA,EAAqBL,MAAM;AACtD","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "one",
3
- "version": "1.10.2",
3
+ "version": "1.10.3",
4
4
  "license": "BSD-3-Clause",
5
5
  "sideEffects": [
6
6
  "setup.mjs",
@@ -154,17 +154,17 @@
154
154
  "@react-navigation/routers": "~7.5.1",
155
155
  "@swc/core": "^1.14.0",
156
156
  "@ungap/structured-clone": "^1.2.0",
157
- "@vxrn/color-scheme": "1.10.2",
158
- "@vxrn/compiler": "1.10.2",
159
- "@vxrn/resolve": "1.10.2",
160
- "@vxrn/tslib-lite": "1.10.2",
161
- "@vxrn/use-isomorphic-layout-effect": "1.10.2",
162
- "@vxrn/vite-plugin-metro": "1.10.2",
157
+ "@vxrn/color-scheme": "1.10.3",
158
+ "@vxrn/compiler": "1.10.3",
159
+ "@vxrn/resolve": "1.10.3",
160
+ "@vxrn/tslib-lite": "1.10.3",
161
+ "@vxrn/use-isomorphic-layout-effect": "1.10.3",
162
+ "@vxrn/vite-plugin-metro": "1.10.3",
163
163
  "babel-dead-code-elimination": "1.0.10",
164
164
  "babel-plugin-module-resolver": "^5.0.2",
165
165
  "citty": "^0.1.6",
166
166
  "core-js": "^3.38.1",
167
- "create-vxrn": "1.10.2",
167
+ "create-vxrn": "1.10.3",
168
168
  "escape-string-regexp": "^5.0.0",
169
169
  "expo-linking": "~8.0.8",
170
170
  "expo-modules-core": "~3.0.24",
@@ -189,7 +189,7 @@
189
189
  "use-latest-callback": "^0.2.3",
190
190
  "vite": "^7.1.12",
191
191
  "vite-tsconfig-paths": "^6.0.5",
192
- "vxrn": "1.10.2",
192
+ "vxrn": "1.10.3",
193
193
  "ws": "^8.18.0",
194
194
  "xxhashjs": "^0.2.2"
195
195
  },
@@ -6,7 +6,7 @@ export const redirect = (
6
6
  path: '__branded__' extends keyof OneRouter.Href ? string : OneRouter.Href,
7
7
  status?: number
8
8
  ) => {
9
- if (process.env.VITE_ENVIRONMENT === 'client') {
9
+ if (process.env.VITE_ENVIRONMENT !== 'ssr') {
10
10
  router.navigate(path)
11
11
  return
12
12
  }