@luxfi/ui 7.4.2 → 7.4.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.
package/dist/badge.cjs CHANGED
@@ -270,8 +270,8 @@ var Tooltip = React3__namespace.forwardRef(
270
270
  }, nextOpen ? openDelay : closeDelay);
271
271
  }, [closeDelay, openDelay, onOpenChange]);
272
272
  const handleClickAway = React3__namespace.useCallback(() => {
273
- handleOpenChangeManual(false);
274
- }, [handleOpenChangeManual]);
273
+ if (open) handleOpenChangeManual(false);
274
+ }, [open, handleOpenChangeManual]);
275
275
  const triggerRef = usehooks.useClickAway(handleClickAway);
276
276
  const handleTriggerClick = React3__namespace.useCallback(() => {
277
277
  handleOpenChangeManual(!open);
@@ -311,7 +311,7 @@ var Tooltip = React3__namespace.forwardRef(
311
311
  /* @__PURE__ */ jsxRuntime.jsx(
312
312
  gui.Tooltip.Trigger,
313
313
  {
314
- ref: open ? triggerRef : void 0,
314
+ ref: triggerRef,
315
315
  asChild: true,
316
316
  ...isMobile ? { onPress: handleTriggerClick } : {},
317
317
  ...triggerProps,
package/dist/badge.js CHANGED
@@ -249,8 +249,8 @@ var Tooltip = React3.forwardRef(
249
249
  }, nextOpen ? openDelay : closeDelay);
250
250
  }, [closeDelay, openDelay, onOpenChange]);
251
251
  const handleClickAway = React3.useCallback(() => {
252
- handleOpenChangeManual(false);
253
- }, [handleOpenChangeManual]);
252
+ if (open) handleOpenChangeManual(false);
253
+ }, [open, handleOpenChangeManual]);
254
254
  const triggerRef = useClickAway(handleClickAway);
255
255
  const handleTriggerClick = React3.useCallback(() => {
256
256
  handleOpenChangeManual(!open);
@@ -290,7 +290,7 @@ var Tooltip = React3.forwardRef(
290
290
  /* @__PURE__ */ jsx(
291
291
  Tooltip$1.Trigger,
292
292
  {
293
- ref: open ? triggerRef : void 0,
293
+ ref: triggerRef,
294
294
  asChild: true,
295
295
  ...isMobile ? { onPress: handleTriggerClick } : {},
296
296
  ...triggerProps,
package/dist/chrome.cjs CHANGED
@@ -302,10 +302,17 @@ var ORGS = {
302
302
  org: "zoo",
303
303
  name: "Zoo",
304
304
  domain: "zoo.ngo",
305
- // Zoo's IdP is `id.zoo.network`, not a `zoo.id` apex — the one row in this
306
- // table where the issuer is not `<org>.id`, and the one every hand-rolled
307
- // per-app branding map got wrong.
308
- iamDomain: "id.zoo.network",
305
+ // Zoo's issuer is `zoolabs.id` — the one row where it is not `<org>.id`,
306
+ // and the one every hand-rolled branding map gets wrong. `id.zoo.network`
307
+ // ANSWERS, which is why it keeps being copied around, but it is an alias:
308
+ // its own discovery document advertises
309
+ // issuer https://zoolabs.id
310
+ // authorization_endpoint https://zoolabs.id/v1/iam/oauth/authorize
311
+ // jwks_uri https://zoolabs.id/v1/iam/.well-known/jwks
312
+ // so a client configured on the alias validates `iss` against a string the
313
+ // IdP never emits and rejects every token it is given — the exact shape of
314
+ // the lux.id outage. `zoo.id` is not an IdP at all (no discovery document).
315
+ iamDomain: "zoolabs.id",
309
316
  accent: LUX_BRAND.zoo,
310
317
  accentForeground: "#FFFFFF"
311
318
  },
@@ -339,15 +346,18 @@ var DOMAIN_ORG = [
339
346
  ["lux.cloud", "lux"],
340
347
  ["lux.id", "lux"],
341
348
  ["lux.finance", "lux"],
349
+ ["lux.market", "lux"],
350
+ ["lux.exchange", "lux"],
342
351
  ["zoo.ngo", "zoo"],
343
352
  ["zoo.network", "zoo"],
344
353
  ["zoo.cloud", "zoo"],
345
- ["zoo.id", "zoo"],
354
+ ["zoolabs.id", "zoo"],
346
355
  ["hanzo.ai", "hanzo"],
347
356
  ["hanzo.cloud", "hanzo"],
348
357
  ["hanzo.id", "hanzo"],
349
- ["pars.id", "pars"],
350
- ["parsdao.org", "pars"],
358
+ ["pars.id", "pars", "app"],
359
+ ["pars.network", "pars", "app"],
360
+ ["parsdao.org", "pars", "app"],
351
361
  ["bootno.de", "bootnode", "platform"]
352
362
  ];
353
363
  var DEFAULT_ORG = "lux";
@@ -367,11 +377,11 @@ function matchDomain(host) {
367
377
  }
368
378
  return best;
369
379
  }
370
- function appSlug(host, domain, apexApp) {
380
+ function appSlug(host, domain, pinned) {
381
+ if (pinned) return pinned;
371
382
  const sub = host === domain ? "" : host.slice(0, -(domain.length + 1));
372
383
  const leftmost = sub.split(".")[0] ?? "";
373
384
  if (leftmost && leftmost !== "www") return leftmost;
374
- if (apexApp) return apexApp;
375
385
  const label = domain.split(".")[0] ?? "";
376
386
  const tld = domain.split(".").slice(1).join(".");
377
387
  return tld.split(".")[0] || label;
package/dist/chrome.js CHANGED
@@ -279,10 +279,17 @@ var ORGS = {
279
279
  org: "zoo",
280
280
  name: "Zoo",
281
281
  domain: "zoo.ngo",
282
- // Zoo's IdP is `id.zoo.network`, not a `zoo.id` apex — the one row in this
283
- // table where the issuer is not `<org>.id`, and the one every hand-rolled
284
- // per-app branding map got wrong.
285
- iamDomain: "id.zoo.network",
282
+ // Zoo's issuer is `zoolabs.id` — the one row where it is not `<org>.id`,
283
+ // and the one every hand-rolled branding map gets wrong. `id.zoo.network`
284
+ // ANSWERS, which is why it keeps being copied around, but it is an alias:
285
+ // its own discovery document advertises
286
+ // issuer https://zoolabs.id
287
+ // authorization_endpoint https://zoolabs.id/v1/iam/oauth/authorize
288
+ // jwks_uri https://zoolabs.id/v1/iam/.well-known/jwks
289
+ // so a client configured on the alias validates `iss` against a string the
290
+ // IdP never emits and rejects every token it is given — the exact shape of
291
+ // the lux.id outage. `zoo.id` is not an IdP at all (no discovery document).
292
+ iamDomain: "zoolabs.id",
286
293
  accent: LUX_BRAND.zoo,
287
294
  accentForeground: "#FFFFFF"
288
295
  },
@@ -316,15 +323,18 @@ var DOMAIN_ORG = [
316
323
  ["lux.cloud", "lux"],
317
324
  ["lux.id", "lux"],
318
325
  ["lux.finance", "lux"],
326
+ ["lux.market", "lux"],
327
+ ["lux.exchange", "lux"],
319
328
  ["zoo.ngo", "zoo"],
320
329
  ["zoo.network", "zoo"],
321
330
  ["zoo.cloud", "zoo"],
322
- ["zoo.id", "zoo"],
331
+ ["zoolabs.id", "zoo"],
323
332
  ["hanzo.ai", "hanzo"],
324
333
  ["hanzo.cloud", "hanzo"],
325
334
  ["hanzo.id", "hanzo"],
326
- ["pars.id", "pars"],
327
- ["parsdao.org", "pars"],
335
+ ["pars.id", "pars", "app"],
336
+ ["pars.network", "pars", "app"],
337
+ ["parsdao.org", "pars", "app"],
328
338
  ["bootno.de", "bootnode", "platform"]
329
339
  ];
330
340
  var DEFAULT_ORG = "lux";
@@ -344,11 +354,11 @@ function matchDomain(host) {
344
354
  }
345
355
  return best;
346
356
  }
347
- function appSlug(host, domain, apexApp) {
357
+ function appSlug(host, domain, pinned) {
358
+ if (pinned) return pinned;
348
359
  const sub = host === domain ? "" : host.slice(0, -(domain.length + 1));
349
360
  const leftmost = sub.split(".")[0] ?? "";
350
361
  if (leftmost && leftmost !== "www") return leftmost;
351
- if (apexApp) return apexApp;
352
362
  const label = domain.split(".")[0] ?? "";
353
363
  const tld = domain.split(".").slice(1).join(".");
354
364
  return tld.split(".")[0] || label;
package/dist/iam.cjs CHANGED
@@ -20,10 +20,17 @@ var ORGS = {
20
20
  org: "zoo",
21
21
  name: "Zoo",
22
22
  domain: "zoo.ngo",
23
- // Zoo's IdP is `id.zoo.network`, not a `zoo.id` apex — the one row in this
24
- // table where the issuer is not `<org>.id`, and the one every hand-rolled
25
- // per-app branding map got wrong.
26
- iamDomain: "id.zoo.network",
23
+ // Zoo's issuer is `zoolabs.id` — the one row where it is not `<org>.id`,
24
+ // and the one every hand-rolled branding map gets wrong. `id.zoo.network`
25
+ // ANSWERS, which is why it keeps being copied around, but it is an alias:
26
+ // its own discovery document advertises
27
+ // issuer https://zoolabs.id
28
+ // authorization_endpoint https://zoolabs.id/v1/iam/oauth/authorize
29
+ // jwks_uri https://zoolabs.id/v1/iam/.well-known/jwks
30
+ // so a client configured on the alias validates `iss` against a string the
31
+ // IdP never emits and rejects every token it is given — the exact shape of
32
+ // the lux.id outage. `zoo.id` is not an IdP at all (no discovery document).
33
+ iamDomain: "zoolabs.id",
27
34
  accent: LUX_BRAND.zoo,
28
35
  accentForeground: "#FFFFFF"
29
36
  },
@@ -57,15 +64,18 @@ var DOMAIN_ORG = [
57
64
  ["lux.cloud", "lux"],
58
65
  ["lux.id", "lux"],
59
66
  ["lux.finance", "lux"],
67
+ ["lux.market", "lux"],
68
+ ["lux.exchange", "lux"],
60
69
  ["zoo.ngo", "zoo"],
61
70
  ["zoo.network", "zoo"],
62
71
  ["zoo.cloud", "zoo"],
63
- ["zoo.id", "zoo"],
72
+ ["zoolabs.id", "zoo"],
64
73
  ["hanzo.ai", "hanzo"],
65
74
  ["hanzo.cloud", "hanzo"],
66
75
  ["hanzo.id", "hanzo"],
67
- ["pars.id", "pars"],
68
- ["parsdao.org", "pars"],
76
+ ["pars.id", "pars", "app"],
77
+ ["pars.network", "pars", "app"],
78
+ ["parsdao.org", "pars", "app"],
69
79
  ["bootno.de", "bootnode", "platform"]
70
80
  ];
71
81
  var DEFAULT_ORG = "lux";
@@ -85,11 +95,11 @@ function matchDomain(host) {
85
95
  }
86
96
  return best;
87
97
  }
88
- function appSlug(host, domain, apexApp) {
98
+ function appSlug(host, domain, pinned) {
99
+ if (pinned) return pinned;
89
100
  const sub = host === domain ? "" : host.slice(0, -(domain.length + 1));
90
101
  const leftmost = sub.split(".")[0] ?? "";
91
102
  if (leftmost && leftmost !== "www") return leftmost;
92
- if (apexApp) return apexApp;
93
103
  const label = domain.split(".")[0] ?? "";
94
104
  const tld = domain.split(".").slice(1).join(".");
95
105
  return tld.split(".")[0] || label;
package/dist/iam.js CHANGED
@@ -18,10 +18,17 @@ var ORGS = {
18
18
  org: "zoo",
19
19
  name: "Zoo",
20
20
  domain: "zoo.ngo",
21
- // Zoo's IdP is `id.zoo.network`, not a `zoo.id` apex — the one row in this
22
- // table where the issuer is not `<org>.id`, and the one every hand-rolled
23
- // per-app branding map got wrong.
24
- iamDomain: "id.zoo.network",
21
+ // Zoo's issuer is `zoolabs.id` — the one row where it is not `<org>.id`,
22
+ // and the one every hand-rolled branding map gets wrong. `id.zoo.network`
23
+ // ANSWERS, which is why it keeps being copied around, but it is an alias:
24
+ // its own discovery document advertises
25
+ // issuer https://zoolabs.id
26
+ // authorization_endpoint https://zoolabs.id/v1/iam/oauth/authorize
27
+ // jwks_uri https://zoolabs.id/v1/iam/.well-known/jwks
28
+ // so a client configured on the alias validates `iss` against a string the
29
+ // IdP never emits and rejects every token it is given — the exact shape of
30
+ // the lux.id outage. `zoo.id` is not an IdP at all (no discovery document).
31
+ iamDomain: "zoolabs.id",
25
32
  accent: LUX_BRAND.zoo,
26
33
  accentForeground: "#FFFFFF"
27
34
  },
@@ -55,15 +62,18 @@ var DOMAIN_ORG = [
55
62
  ["lux.cloud", "lux"],
56
63
  ["lux.id", "lux"],
57
64
  ["lux.finance", "lux"],
65
+ ["lux.market", "lux"],
66
+ ["lux.exchange", "lux"],
58
67
  ["zoo.ngo", "zoo"],
59
68
  ["zoo.network", "zoo"],
60
69
  ["zoo.cloud", "zoo"],
61
- ["zoo.id", "zoo"],
70
+ ["zoolabs.id", "zoo"],
62
71
  ["hanzo.ai", "hanzo"],
63
72
  ["hanzo.cloud", "hanzo"],
64
73
  ["hanzo.id", "hanzo"],
65
- ["pars.id", "pars"],
66
- ["parsdao.org", "pars"],
74
+ ["pars.id", "pars", "app"],
75
+ ["pars.network", "pars", "app"],
76
+ ["parsdao.org", "pars", "app"],
67
77
  ["bootno.de", "bootnode", "platform"]
68
78
  ];
69
79
  var DEFAULT_ORG = "lux";
@@ -83,11 +93,11 @@ function matchDomain(host) {
83
93
  }
84
94
  return best;
85
95
  }
86
- function appSlug(host, domain, apexApp) {
96
+ function appSlug(host, domain, pinned) {
97
+ if (pinned) return pinned;
87
98
  const sub = host === domain ? "" : host.slice(0, -(domain.length + 1));
88
99
  const leftmost = sub.split(".")[0] ?? "";
89
100
  if (leftmost && leftmost !== "www") return leftmost;
90
- if (apexApp) return apexApp;
91
101
  const label = domain.split(".")[0] ?? "";
92
102
  const tld = domain.split(".").slice(1).join(".");
93
103
  return tld.split(".")[0] || label;
package/dist/identity.cjs CHANGED
@@ -46,10 +46,17 @@ var ORGS = {
46
46
  org: "zoo",
47
47
  name: "Zoo",
48
48
  domain: "zoo.ngo",
49
- // Zoo's IdP is `id.zoo.network`, not a `zoo.id` apex — the one row in this
50
- // table where the issuer is not `<org>.id`, and the one every hand-rolled
51
- // per-app branding map got wrong.
52
- iamDomain: "id.zoo.network",
49
+ // Zoo's issuer is `zoolabs.id` — the one row where it is not `<org>.id`,
50
+ // and the one every hand-rolled branding map gets wrong. `id.zoo.network`
51
+ // ANSWERS, which is why it keeps being copied around, but it is an alias:
52
+ // its own discovery document advertises
53
+ // issuer https://zoolabs.id
54
+ // authorization_endpoint https://zoolabs.id/v1/iam/oauth/authorize
55
+ // jwks_uri https://zoolabs.id/v1/iam/.well-known/jwks
56
+ // so a client configured on the alias validates `iss` against a string the
57
+ // IdP never emits and rejects every token it is given — the exact shape of
58
+ // the lux.id outage. `zoo.id` is not an IdP at all (no discovery document).
59
+ iamDomain: "zoolabs.id",
53
60
  accent: LUX_BRAND.zoo,
54
61
  accentForeground: "#FFFFFF"
55
62
  },
@@ -83,15 +90,18 @@ var DOMAIN_ORG = [
83
90
  ["lux.cloud", "lux"],
84
91
  ["lux.id", "lux"],
85
92
  ["lux.finance", "lux"],
93
+ ["lux.market", "lux"],
94
+ ["lux.exchange", "lux"],
86
95
  ["zoo.ngo", "zoo"],
87
96
  ["zoo.network", "zoo"],
88
97
  ["zoo.cloud", "zoo"],
89
- ["zoo.id", "zoo"],
98
+ ["zoolabs.id", "zoo"],
90
99
  ["hanzo.ai", "hanzo"],
91
100
  ["hanzo.cloud", "hanzo"],
92
101
  ["hanzo.id", "hanzo"],
93
- ["pars.id", "pars"],
94
- ["parsdao.org", "pars"],
102
+ ["pars.id", "pars", "app"],
103
+ ["pars.network", "pars", "app"],
104
+ ["parsdao.org", "pars", "app"],
95
105
  ["bootno.de", "bootnode", "platform"]
96
106
  ];
97
107
  var DEFAULT_ORG = "lux";
@@ -111,11 +121,11 @@ function matchDomain(host) {
111
121
  }
112
122
  return best;
113
123
  }
114
- function appSlug(host, domain, apexApp) {
124
+ function appSlug(host, domain, pinned) {
125
+ if (pinned) return pinned;
115
126
  const sub = host === domain ? "" : host.slice(0, -(domain.length + 1));
116
127
  const leftmost = sub.split(".")[0] ?? "";
117
128
  if (leftmost && leftmost !== "www") return leftmost;
118
- if (apexApp) return apexApp;
119
129
  const label = domain.split(".")[0] ?? "";
120
130
  const tld = domain.split(".").slice(1).join(".");
121
131
  return tld.split(".")[0] || label;
package/dist/identity.js CHANGED
@@ -25,10 +25,17 @@ var ORGS = {
25
25
  org: "zoo",
26
26
  name: "Zoo",
27
27
  domain: "zoo.ngo",
28
- // Zoo's IdP is `id.zoo.network`, not a `zoo.id` apex — the one row in this
29
- // table where the issuer is not `<org>.id`, and the one every hand-rolled
30
- // per-app branding map got wrong.
31
- iamDomain: "id.zoo.network",
28
+ // Zoo's issuer is `zoolabs.id` — the one row where it is not `<org>.id`,
29
+ // and the one every hand-rolled branding map gets wrong. `id.zoo.network`
30
+ // ANSWERS, which is why it keeps being copied around, but it is an alias:
31
+ // its own discovery document advertises
32
+ // issuer https://zoolabs.id
33
+ // authorization_endpoint https://zoolabs.id/v1/iam/oauth/authorize
34
+ // jwks_uri https://zoolabs.id/v1/iam/.well-known/jwks
35
+ // so a client configured on the alias validates `iss` against a string the
36
+ // IdP never emits and rejects every token it is given — the exact shape of
37
+ // the lux.id outage. `zoo.id` is not an IdP at all (no discovery document).
38
+ iamDomain: "zoolabs.id",
32
39
  accent: LUX_BRAND.zoo,
33
40
  accentForeground: "#FFFFFF"
34
41
  },
@@ -62,15 +69,18 @@ var DOMAIN_ORG = [
62
69
  ["lux.cloud", "lux"],
63
70
  ["lux.id", "lux"],
64
71
  ["lux.finance", "lux"],
72
+ ["lux.market", "lux"],
73
+ ["lux.exchange", "lux"],
65
74
  ["zoo.ngo", "zoo"],
66
75
  ["zoo.network", "zoo"],
67
76
  ["zoo.cloud", "zoo"],
68
- ["zoo.id", "zoo"],
77
+ ["zoolabs.id", "zoo"],
69
78
  ["hanzo.ai", "hanzo"],
70
79
  ["hanzo.cloud", "hanzo"],
71
80
  ["hanzo.id", "hanzo"],
72
- ["pars.id", "pars"],
73
- ["parsdao.org", "pars"],
81
+ ["pars.id", "pars", "app"],
82
+ ["pars.network", "pars", "app"],
83
+ ["parsdao.org", "pars", "app"],
74
84
  ["bootno.de", "bootnode", "platform"]
75
85
  ];
76
86
  var DEFAULT_ORG = "lux";
@@ -90,11 +100,11 @@ function matchDomain(host) {
90
100
  }
91
101
  return best;
92
102
  }
93
- function appSlug(host, domain, apexApp) {
103
+ function appSlug(host, domain, pinned) {
104
+ if (pinned) return pinned;
94
105
  const sub = host === domain ? "" : host.slice(0, -(domain.length + 1));
95
106
  const leftmost = sub.split(".")[0] ?? "";
96
107
  if (leftmost && leftmost !== "www") return leftmost;
97
- if (apexApp) return apexApp;
98
108
  const label = domain.split(".")[0] ?? "";
99
109
  const tld = domain.split(".").slice(1).join(".");
100
110
  return tld.split(".")[0] || label;
package/dist/index.cjs CHANGED
@@ -74,10 +74,17 @@ var ORGS = {
74
74
  org: "zoo",
75
75
  name: "Zoo",
76
76
  domain: "zoo.ngo",
77
- // Zoo's IdP is `id.zoo.network`, not a `zoo.id` apex — the one row in this
78
- // table where the issuer is not `<org>.id`, and the one every hand-rolled
79
- // per-app branding map got wrong.
80
- iamDomain: "id.zoo.network",
77
+ // Zoo's issuer is `zoolabs.id` — the one row where it is not `<org>.id`,
78
+ // and the one every hand-rolled branding map gets wrong. `id.zoo.network`
79
+ // ANSWERS, which is why it keeps being copied around, but it is an alias:
80
+ // its own discovery document advertises
81
+ // issuer https://zoolabs.id
82
+ // authorization_endpoint https://zoolabs.id/v1/iam/oauth/authorize
83
+ // jwks_uri https://zoolabs.id/v1/iam/.well-known/jwks
84
+ // so a client configured on the alias validates `iss` against a string the
85
+ // IdP never emits and rejects every token it is given — the exact shape of
86
+ // the lux.id outage. `zoo.id` is not an IdP at all (no discovery document).
87
+ iamDomain: "zoolabs.id",
81
88
  accent: LUX_BRAND.zoo,
82
89
  accentForeground: "#FFFFFF"
83
90
  },
@@ -111,15 +118,18 @@ var DOMAIN_ORG = [
111
118
  ["lux.cloud", "lux"],
112
119
  ["lux.id", "lux"],
113
120
  ["lux.finance", "lux"],
121
+ ["lux.market", "lux"],
122
+ ["lux.exchange", "lux"],
114
123
  ["zoo.ngo", "zoo"],
115
124
  ["zoo.network", "zoo"],
116
125
  ["zoo.cloud", "zoo"],
117
- ["zoo.id", "zoo"],
126
+ ["zoolabs.id", "zoo"],
118
127
  ["hanzo.ai", "hanzo"],
119
128
  ["hanzo.cloud", "hanzo"],
120
129
  ["hanzo.id", "hanzo"],
121
- ["pars.id", "pars"],
122
- ["parsdao.org", "pars"],
130
+ ["pars.id", "pars", "app"],
131
+ ["pars.network", "pars", "app"],
132
+ ["parsdao.org", "pars", "app"],
123
133
  ["bootno.de", "bootnode", "platform"]
124
134
  ];
125
135
  var DEFAULT_ORG = "lux";
@@ -139,11 +149,11 @@ function matchDomain(host) {
139
149
  }
140
150
  return best;
141
151
  }
142
- function appSlug(host, domain, apexApp) {
152
+ function appSlug(host, domain, pinned) {
153
+ if (pinned) return pinned;
143
154
  const sub = host === domain ? "" : host.slice(0, -(domain.length + 1));
144
155
  const leftmost = sub.split(".")[0] ?? "";
145
156
  if (leftmost && leftmost !== "www") return leftmost;
146
- if (apexApp) return apexApp;
147
157
  const label = domain.split(".")[0] ?? "";
148
158
  const tld = domain.split(".").slice(1).join(".");
149
159
  return tld.split(".")[0] || label;
@@ -1925,8 +1935,8 @@ var Tooltip = React33__namespace.forwardRef(
1925
1935
  }, nextOpen ? openDelay : closeDelay);
1926
1936
  }, [closeDelay, openDelay, onOpenChange]);
1927
1937
  const handleClickAway = React33__namespace.useCallback(() => {
1928
- handleOpenChangeManual(false);
1929
- }, [handleOpenChangeManual]);
1938
+ if (open) handleOpenChangeManual(false);
1939
+ }, [open, handleOpenChangeManual]);
1930
1940
  const triggerRef = usehooks.useClickAway(handleClickAway);
1931
1941
  const handleTriggerClick = React33__namespace.useCallback(() => {
1932
1942
  handleOpenChangeManual(!open);
@@ -1966,7 +1976,7 @@ var Tooltip = React33__namespace.forwardRef(
1966
1976
  /* @__PURE__ */ jsxRuntime.jsx(
1967
1977
  gui.Tooltip.Trigger,
1968
1978
  {
1969
- ref: open ? triggerRef : void 0,
1979
+ ref: triggerRef,
1970
1980
  asChild: true,
1971
1981
  ...isMobile ? { onPress: handleTriggerClick } : {},
1972
1982
  ...triggerProps,
package/dist/index.js CHANGED
@@ -46,10 +46,17 @@ var ORGS = {
46
46
  org: "zoo",
47
47
  name: "Zoo",
48
48
  domain: "zoo.ngo",
49
- // Zoo's IdP is `id.zoo.network`, not a `zoo.id` apex — the one row in this
50
- // table where the issuer is not `<org>.id`, and the one every hand-rolled
51
- // per-app branding map got wrong.
52
- iamDomain: "id.zoo.network",
49
+ // Zoo's issuer is `zoolabs.id` — the one row where it is not `<org>.id`,
50
+ // and the one every hand-rolled branding map gets wrong. `id.zoo.network`
51
+ // ANSWERS, which is why it keeps being copied around, but it is an alias:
52
+ // its own discovery document advertises
53
+ // issuer https://zoolabs.id
54
+ // authorization_endpoint https://zoolabs.id/v1/iam/oauth/authorize
55
+ // jwks_uri https://zoolabs.id/v1/iam/.well-known/jwks
56
+ // so a client configured on the alias validates `iss` against a string the
57
+ // IdP never emits and rejects every token it is given — the exact shape of
58
+ // the lux.id outage. `zoo.id` is not an IdP at all (no discovery document).
59
+ iamDomain: "zoolabs.id",
53
60
  accent: LUX_BRAND.zoo,
54
61
  accentForeground: "#FFFFFF"
55
62
  },
@@ -83,15 +90,18 @@ var DOMAIN_ORG = [
83
90
  ["lux.cloud", "lux"],
84
91
  ["lux.id", "lux"],
85
92
  ["lux.finance", "lux"],
93
+ ["lux.market", "lux"],
94
+ ["lux.exchange", "lux"],
86
95
  ["zoo.ngo", "zoo"],
87
96
  ["zoo.network", "zoo"],
88
97
  ["zoo.cloud", "zoo"],
89
- ["zoo.id", "zoo"],
98
+ ["zoolabs.id", "zoo"],
90
99
  ["hanzo.ai", "hanzo"],
91
100
  ["hanzo.cloud", "hanzo"],
92
101
  ["hanzo.id", "hanzo"],
93
- ["pars.id", "pars"],
94
- ["parsdao.org", "pars"],
102
+ ["pars.id", "pars", "app"],
103
+ ["pars.network", "pars", "app"],
104
+ ["parsdao.org", "pars", "app"],
95
105
  ["bootno.de", "bootnode", "platform"]
96
106
  ];
97
107
  var DEFAULT_ORG = "lux";
@@ -111,11 +121,11 @@ function matchDomain(host) {
111
121
  }
112
122
  return best;
113
123
  }
114
- function appSlug(host, domain, apexApp) {
124
+ function appSlug(host, domain, pinned) {
125
+ if (pinned) return pinned;
115
126
  const sub = host === domain ? "" : host.slice(0, -(domain.length + 1));
116
127
  const leftmost = sub.split(".")[0] ?? "";
117
128
  if (leftmost && leftmost !== "www") return leftmost;
118
- if (apexApp) return apexApp;
119
129
  const label = domain.split(".")[0] ?? "";
120
130
  const tld = domain.split(".").slice(1).join(".");
121
131
  return tld.split(".")[0] || label;
@@ -1897,8 +1907,8 @@ var Tooltip = React33.forwardRef(
1897
1907
  }, nextOpen ? openDelay : closeDelay);
1898
1908
  }, [closeDelay, openDelay, onOpenChange]);
1899
1909
  const handleClickAway = React33.useCallback(() => {
1900
- handleOpenChangeManual(false);
1901
- }, [handleOpenChangeManual]);
1910
+ if (open) handleOpenChangeManual(false);
1911
+ }, [open, handleOpenChangeManual]);
1902
1912
  const triggerRef = useClickAway(handleClickAway);
1903
1913
  const handleTriggerClick = React33.useCallback(() => {
1904
1914
  handleOpenChangeManual(!open);
@@ -1938,7 +1948,7 @@ var Tooltip = React33.forwardRef(
1938
1948
  /* @__PURE__ */ jsx(
1939
1949
  Tooltip$1.Trigger,
1940
1950
  {
1941
- ref: open ? triggerRef : void 0,
1951
+ ref: triggerRef,
1942
1952
  asChild: true,
1943
1953
  ...isMobile ? { onPress: handleTriggerClick } : {},
1944
1954
  ...triggerProps,
package/dist/next.cjs CHANGED
@@ -1,6 +1,13 @@
1
1
  'use strict';
2
2
 
3
- // src/next.ts
3
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
4
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
5
+ }) : x)(function(x) {
6
+ if (typeof require !== "undefined") return require.apply(this, arguments);
7
+ throw Error('Dynamic require of "' + x + '" is not supported');
8
+ });
9
+
10
+ // src/engine.ts
4
11
  var GUI_PACKAGES = [
5
12
  "@hanzo/gui",
6
13
  "@hanzogui/accordion",
@@ -21,11 +28,16 @@ var GUI_PACKAGES = [
21
28
  "@hanzogui/create-context",
22
29
  "@hanzogui/create-menu",
23
30
  "@hanzogui/dialog",
31
+ "@hanzogui/dismissable",
24
32
  "@hanzogui/element",
25
33
  "@hanzogui/elements",
34
+ "@hanzogui/floating",
35
+ "@hanzogui/focus-scope",
26
36
  "@hanzogui/font-size",
27
37
  "@hanzogui/form",
38
+ "@hanzogui/get-token",
28
39
  "@hanzogui/group",
40
+ "@hanzogui/helpers",
29
41
  "@hanzogui/image",
30
42
  "@hanzogui/input",
31
43
  "@hanzogui/label",
@@ -37,6 +49,7 @@ var GUI_PACKAGES = [
37
49
  "@hanzogui/progress",
38
50
  "@hanzogui/radio-group",
39
51
  "@hanzogui/react-native-media-driver",
52
+ "@hanzogui/remove-scroll",
40
53
  "@hanzogui/scroll-view",
41
54
  "@hanzogui/select",
42
55
  "@hanzogui/separator",
@@ -56,19 +69,37 @@ var GUI_PACKAGES = [
56
69
  "@hanzogui/use-controllable-state",
57
70
  "@hanzogui/use-debounce",
58
71
  "@hanzogui/use-force-update",
72
+ "@hanzogui/use-presence",
59
73
  "@hanzogui/use-window-dimensions",
60
74
  "@hanzogui/visually-hidden",
61
75
  "@hanzogui/web",
76
+ "@hanzogui/z-index-stack",
62
77
  "@luxfi/ui"
63
78
  ];
64
- var DEFINES = {
79
+ var GUI_DEFINES = {
65
80
  "process.env.EXPO_OS": JSON.stringify("web"),
66
81
  "process.env.IS_WEB": JSON.stringify("true")
67
82
  };
83
+ function guiAliases(from) {
84
+ const { createRequire } = __require("module");
85
+ const require_ = createRequire(`${from.replace(/\/?$/, "/")}noop.js`);
86
+ const alias = {};
87
+ for (const pkg of GUI_PACKAGES) {
88
+ try {
89
+ alias[`${pkg}$`] = require_.resolve(pkg);
90
+ } catch {
91
+ }
92
+ }
93
+ return alias;
94
+ }
95
+
96
+ // src/next.ts
68
97
  function withLuxUi(config = {}) {
69
98
  const userWebpack = config.webpack;
99
+ const engine = guiAliases(config.dir ?? process.cwd());
100
+ const { dir: _dir, ...rest } = config;
70
101
  return {
71
- ...config,
102
+ ...rest,
72
103
  transpilePackages: [.../* @__PURE__ */ new Set([...config.transpilePackages ?? [], ...GUI_PACKAGES])],
73
104
  turbopack: {
74
105
  ...config.turbopack,
@@ -84,11 +115,13 @@ function withLuxUi(config = {}) {
84
115
  const next = userWebpack ? userWebpack(webpackConfig, context) : webpackConfig;
85
116
  next.resolve = {
86
117
  ...next.resolve,
87
- alias: { ...next.resolve?.alias, "react-native$": "react-native-web" }
118
+ // The app's own aliases win — an app pinning a package on purpose is not
119
+ // something the umbrella should override.
120
+ alias: { "react-native$": "react-native-web", ...engine, ...next.resolve?.alias }
88
121
  };
89
122
  const webpackModule = context?.webpack;
90
123
  if (webpackModule?.DefinePlugin) {
91
- next.plugins = [...next.plugins ?? [], new webpackModule.DefinePlugin(DEFINES)];
124
+ next.plugins = [...next.plugins ?? [], new webpackModule.DefinePlugin({ ...GUI_DEFINES })];
92
125
  }
93
126
  return next;
94
127
  }
package/dist/next.d.cts CHANGED
@@ -1,5 +1,6 @@
1
1
  /** Every package `@hanzo/gui` re-exports — the engine, in full. */
2
- declare const GUI_PACKAGES: string[];
2
+ declare const GUI_PACKAGES: ReadonlyArray<string>;
3
+
3
4
  interface WebpackConfig {
4
5
  resolve?: {
5
6
  alias?: Record<string, unknown>;
@@ -9,6 +10,8 @@ interface WebpackConfig {
9
10
  }
10
11
  /** The structural slice of a Next config this wrapper touches. */
11
12
  interface LuxUiNextConfig {
13
+ /** App root, for resolving the engine's single copy. Defaults to `cwd`. */
14
+ dir?: string;
12
15
  transpilePackages?: Array<string>;
13
16
  turbopack?: {
14
17
  resolveAlias?: Record<string, string>;