@luxfi/ui 7.4.2 → 7.4.4

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;
@@ -124,7 +134,7 @@ var IamError = class extends Error {
124
134
  };
125
135
  var SIGNED_OUT = /please sign in|authentication required|unauthorized/i;
126
136
  function isSignedOut(status, msg) {
127
- return status === 401 || status === 403 || SIGNED_OUT.test(msg);
137
+ return status === 401 || SIGNED_OUT.test(msg);
128
138
  }
129
139
  function iamBase(host) {
130
140
  const wl = typeof host === "object" && host !== null ? host : resolveWhiteLabel(host);
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;
@@ -122,7 +132,7 @@ var IamError = class extends Error {
122
132
  };
123
133
  var SIGNED_OUT = /please sign in|authentication required|unauthorized/i;
124
134
  function isSignedOut(status, msg) {
125
- return status === 401 || status === 403 || SIGNED_OUT.test(msg);
135
+ return status === 401 || SIGNED_OUT.test(msg);
126
136
  }
127
137
  function iamBase(host) {
128
138
  const wl = typeof host === "object" && host !== null ? host : resolveWhiteLabel(host);
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;
@@ -150,7 +160,7 @@ var IamError = class extends Error {
150
160
  };
151
161
  var SIGNED_OUT = /please sign in|authentication required|unauthorized/i;
152
162
  function isSignedOut(status, msg) {
153
- return status === 401 || status === 403 || SIGNED_OUT.test(msg);
163
+ return status === 401 || SIGNED_OUT.test(msg);
154
164
  }
155
165
  function iamBase(host) {
156
166
  const wl = typeof host === "object" && host !== null ? host : resolveWhiteLabel(host);
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;
@@ -129,7 +139,7 @@ var IamError = class extends Error {
129
139
  };
130
140
  var SIGNED_OUT = /please sign in|authentication required|unauthorized/i;
131
141
  function isSignedOut(status, msg) {
132
- return status === 401 || status === 403 || SIGNED_OUT.test(msg);
142
+ return status === 401 || SIGNED_OUT.test(msg);
133
143
  }
134
144
  function iamBase(host) {
135
145
  const wl = typeof host === "object" && host !== null ? host : resolveWhiteLabel(host);
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;
@@ -278,7 +288,7 @@ var IamError = class extends Error {
278
288
  };
279
289
  var SIGNED_OUT = /please sign in|authentication required|unauthorized/i;
280
290
  function isSignedOut(status, msg) {
281
- return status === 401 || status === 403 || SIGNED_OUT.test(msg);
291
+ return status === 401 || SIGNED_OUT.test(msg);
282
292
  }
283
293
  function iamBase(host) {
284
294
  const wl = typeof host === "object" && host !== null ? host : resolveWhiteLabel(host);
@@ -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;
@@ -250,7 +260,7 @@ var IamError = class extends Error {
250
260
  };
251
261
  var SIGNED_OUT = /please sign in|authentication required|unauthorized/i;
252
262
  function isSignedOut(status, msg) {
253
- return status === 401 || status === 403 || SIGNED_OUT.test(msg);
263
+ return status === 401 || SIGNED_OUT.test(msg);
254
264
  }
255
265
  function iamBase(host) {
256
266
  const wl = typeof host === "object" && host !== null ? host : resolveWhiteLabel(host);
@@ -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,