@singi-labs/sifa-sdk 0.19.72 → 0.19.73
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/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +1 -1
- package/dist/logic/org-floor.js +1 -1
- package/dist/logic/org-floor.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -2541,7 +2541,10 @@ interface PersonalFacetContent {
|
|
|
2541
2541
|
* claiming.
|
|
2542
2542
|
*
|
|
2543
2543
|
* True when any profile section holds at least one record, or when the headline
|
|
2544
|
-
*
|
|
2544
|
+
* is non-blank. Whitespace-only text does not count. The about text is ignored:
|
|
2545
|
+
* it is seeded from the Bluesky bio at sign-in, so a plain organization account
|
|
2546
|
+
* carries one too, and counting it would make every such claim keep a personal
|
|
2547
|
+
* profile the account never had.
|
|
2545
2548
|
*
|
|
2546
2549
|
* Pure: no network, no I/O.
|
|
2547
2550
|
*/
|
package/dist/index.d.ts
CHANGED
|
@@ -2541,7 +2541,10 @@ interface PersonalFacetContent {
|
|
|
2541
2541
|
* claiming.
|
|
2542
2542
|
*
|
|
2543
2543
|
* True when any profile section holds at least one record, or when the headline
|
|
2544
|
-
*
|
|
2544
|
+
* is non-blank. Whitespace-only text does not count. The about text is ignored:
|
|
2545
|
+
* it is seeded from the Bluesky bio at sign-in, so a plain organization account
|
|
2546
|
+
* carries one too, and counting it would make every such claim keep a personal
|
|
2547
|
+
* profile the account never had.
|
|
2545
2548
|
*
|
|
2546
2549
|
* Pure: no network, no I/O.
|
|
2547
2550
|
*/
|
package/dist/index.js
CHANGED
|
@@ -357,7 +357,7 @@ import {
|
|
|
357
357
|
roadmapIssueUrl
|
|
358
358
|
} from "./roadmap/index.js";
|
|
359
359
|
import { SIFA_REPO_GROUPS, describeSifaRecord, repoGroupForCollection } from "./repo/index.js";
|
|
360
|
-
var SIFA_SDK_VERSION = "0.19.
|
|
360
|
+
var SIFA_SDK_VERSION = "0.19.73";
|
|
361
361
|
export {
|
|
362
362
|
ACTIVITY_TIERS,
|
|
363
363
|
ACTIVITY_VERBS,
|
package/dist/logic/org-floor.js
CHANGED
|
@@ -22,7 +22,7 @@ function qualifiesAsOrg(record, handle) {
|
|
|
22
22
|
}
|
|
23
23
|
function hasPersonalProfileContent(profile) {
|
|
24
24
|
const filled = (text) => typeof text === "string" && text.trim() !== "";
|
|
25
|
-
if (filled(profile.headline)
|
|
25
|
+
if (filled(profile.headline)) return true;
|
|
26
26
|
const sections = [
|
|
27
27
|
profile.positions,
|
|
28
28
|
profile.education,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/logic/org-floor.ts"],"sourcesContent":["import type { OrgProfileRecord } from '../schemas/org-profile.js';\nimport { looksLikeDomain } from './domain-detect.js';\nimport type { AccountFacetMode } from '../types/index.js';\n\n/**\n * Handle hosts that are shared PDS / signup domains, never a single\n * organization's registrable identity. A handle under one of these (e.g.\n * `acme.bsky.social`) is a subdomain of someone else's domain, so it can never\n * satisfy the org rendering floor. Lowercased, leading-dot form for a suffix\n * match. Kept in sync with the PDS provider list in `format/pds-utils.ts`.\n */\nconst KNOWN_HANDLE_HOST_SUFFIXES = [\n '.bsky.social',\n '.blacksky.app',\n '.eurosky.social',\n '.northsky.social',\n] as const;\n\n/**\n * Approximate \"is this handle a custom registrable domain?\" check for the org\n * rendering floor.\n *\n * IMPORTANT -- this is deliberately NARROW, not authoritative. The SDK has no\n * public-suffix-list (PSL) dependency, so it cannot compute the true eTLD+1\n * apex: it cannot tell `acme.co.uk` (an apex) from `careers.acme.co.uk` (a\n * subdomain that routes to the subsidiary case), nor reject every PSL-private\n * host. It performs only the rejects it CAN make correctly with no PSL:\n * - DIDs (never a domain handle),\n * - bare / no-dot handles and non-TLD-shaped hosts (via `looksLikeDomain`),\n * - known shared PDS / handle hosts (`*.bsky.social` and friends).\n *\n * The AUTHORITATIVE apex + eTLD+1 + confusable check is server-side in\n * sifa-api's `bind-domain-guard` (`isBindableHandleDomain`, backed by `tldts`);\n * `computeOrgFloorVerdict` there is the source of truth and is surfaced to\n * clients on the profile resolve (read it via `useOrgProfile`). Recompute here\n * only when a client-side floor gate is needed without a round-trip.\n *\n * TODO(#160): promote a shared PSL-backed eTLD+1 helper into the SDK (or vendor\n * a compact public-suffix table) and tighten this to a true apex check.\n *\n * Pure: no network, no I/O.\n */\nexport function isRegistrableDomainHandle(handle: string): boolean {\n const h = handle.trim().toLowerCase();\n if (!h) return false;\n if (h.startsWith('did:')) return false;\n // Requires >=1 dot and a TLD-shaped final label; rejects bare usernames.\n if (!looksLikeDomain(h)) return false;\n for (const suffix of KNOWN_HANDLE_HOST_SUFFIXES) {\n if (h.endsWith(suffix)) return false;\n }\n return true;\n}\n\n/**\n * The org rendering floor (#160) -- the \"any AppView can evaluate\" promise made\n * executable. An account renders as an organization when BOTH:\n * 1. It has an `id.sifa.org.profile` record (record present), AND\n * 2. Its handle is a custom registrable domain\n * ({@link isRegistrableDomainHandle}).\n *\n * Only the PRESENCE of the record matters here (declaration marks the account\n * as presenting-as-org; trust is layered separately). The handle check is LIVE:\n * evaluate it on every render so a lost domain drops org rendering\n * automatically.\n *\n * Pure: no network, no I/O. Pass the fetched record (or null) and the current\n * handle.\n */\nexport function qualifiesAsOrg(\n record: OrgProfileRecord | null | undefined,\n handle: string,\n): boolean {\n if (record === null || record === undefined) return false;\n return isRegistrableDomainHandle(handle);\n}\n\n/**\n * The person-facet fields that decide whether an account has a CV worth\n * keeping. A structural subset of `Profile`, so callers can pass a profile\n * straight in. Every list is optional; `positions`, `education`, and `skills`\n * are always present on a real profile but typed optional here so partial\n * fixtures and trimmed payloads work.\n */\nexport interface PersonalFacetContent {\n headline?: string | null;\n about?: string | null;\n positions?: unknown[];\n education?: unknown[];\n skills?: unknown[];\n certifications?: unknown[];\n projects?: unknown[];\n publications?: unknown[];\n volunteering?: unknown[];\n involvement?: unknown[];\n honors?: unknown[];\n courses?: unknown[];\n}\n\n/**\n * Does this account have a personal profile worth keeping visible?\n *\n * Decides the claim-flow default when an account claims its domain as an\n * organization. An empty account claiming a domain is a plain company signup:\n * present solely as an org, ask nothing. An account that already carries a CV\n * is the sole-trader case: keeping both facets is the default, and hiding the\n * person facet must be a deliberate choice rather than a silent side effect of\n * claiming.\n *\n * True when any profile section holds at least one record, or when the headline\n * or about text is non-blank. Whitespace-only text does not count.\n *\n * Pure: no network, no I/O.\n */\nexport function hasPersonalProfileContent(profile: PersonalFacetContent): boolean {\n const filled = (text: string | null | undefined): boolean =>\n typeof text === 'string' && text.trim() !== '';\n if (filled(profile.headline) || filled(profile.about)) return true;\n const sections = [\n profile.positions,\n profile.education,\n profile.skills,\n profile.certifications,\n profile.projects,\n profile.publications,\n profile.volunteering,\n profile.involvement,\n profile.honors,\n profile.courses,\n ];\n return sections.some((section) => Array.isArray(section) && section.length > 0);\n}\n\n/**\n * Should this account's personal profile render at `/p/`, given the org verdict?\n *\n * The single routing predicate behind the freelancer dual-identity case: a\n * claimed org that set `personalProfileVisible` renders both facets, so `/p/`\n * serves the person instead of redirecting to `/c/`. Every other account keeps\n * the exclusive behaviour -- an org (claimed or merely recognized) redirects\n * `/p/` to `/c/`, and a plain person renders at `/p/` as always.\n *\n * Pure: no network, no I/O.\n */\nexport function rendersPersonalProfile(\n org: { isOrg: boolean; recognized: boolean; personalProfileVisible?: boolean } | null | undefined,\n renderPreference?: 'person' | 'company' | null,\n): boolean {\n // An explicit 'person' choice is the owner's own override and wins outright:\n // it is what makes \"Person\" mean person, even for an account holding an org\n // record (which stays in the PDS, inert).\n if (renderPreference === 'person') return true;\n if (org === null || org === undefined) return true;\n if (!org.isOrg && !org.recognized) return true;\n // Gated on isOrg, not merely on the flag: `personalProfileVisible` lives in\n // the `id.sifa.org.profile` record, so an account that is only RECOGNIZED\n // (known company domain, never claimed) has no record to carry it and keeps\n // the redirect. Claiming is the way in.\n return org.isOrg && org.personalProfileVisible === true;\n}\n\n/**\n * Should this account's company page render at `/c/`?\n *\n * The mirror of {@link rendersPersonalProfile}. True for any company account --\n * claimed or merely recognized -- EXCEPT when the owner explicitly chose to\n * present as a person, which suppresses the company page rather than deleting\n * anything. The org record stays in the PDS and the choice is reversible.\n *\n * Pure: no network, no I/O.\n */\nexport function rendersCompanyProfile(\n org: { isOrg: boolean; recognized: boolean } | null | undefined,\n renderPreference?: 'person' | 'company' | null,\n): boolean {\n if (renderPreference === 'person') return false;\n if (org === null || org === undefined) return false;\n return org.isOrg || org.recognized;\n}\n\n/**\n * Resolve the three-way \"are you a person, a company, or both?\" answer that the\n * account settings switch presents, from the two places the answer is stored.\n *\n * Precedence, highest first:\n * 1. `renderPreference === 'person'` -- the owner's explicit local override.\n * Wins even over a claimed org record, which stays inert in the PDS.\n * 2. A claimed org that declared `personalProfileVisible` -- `'both'`, the\n * sole trader. Read from the PDS record, so it is portable.\n * 3. Any other company account (claimed, recognized, or `renderPreference`\n * `'company'`) -- `'company'`.\n * 4. Everything else -- `'person'`.\n *\n * Pure: no network, no I/O.\n */\nexport function resolveAccountFacetMode(profile: {\n org?: { isOrg: boolean; recognized: boolean; personalProfileVisible?: boolean } | null;\n renderPreference?: 'person' | 'company' | null;\n}): AccountFacetMode {\n if (profile.renderPreference === 'person') return 'person';\n const org = profile.org;\n if (org?.isOrg && org.personalProfileVisible === true) return 'both';\n if (org?.isOrg || org?.recognized || profile.renderPreference === 'company') return 'company';\n return 'person';\n}\n"],"mappings":";AACA,SAAS,uBAAuB;AAUhC,IAAM,6BAA6B;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AA0BO,SAAS,0BAA0B,QAAyB;AACjE,QAAM,IAAI,OAAO,KAAK,EAAE,YAAY;AACpC,MAAI,CAAC,EAAG,QAAO;AACf,MAAI,EAAE,WAAW,MAAM,EAAG,QAAO;AAEjC,MAAI,CAAC,gBAAgB,CAAC,EAAG,QAAO;AAChC,aAAW,UAAU,4BAA4B;AAC/C,QAAI,EAAE,SAAS,MAAM,EAAG,QAAO;AAAA,EACjC;AACA,SAAO;AACT;AAiBO,SAAS,eACd,QACA,QACS;AACT,MAAI,WAAW,QAAQ,WAAW,OAAW,QAAO;AACpD,SAAO,0BAA0B,MAAM;AACzC;AAuCO,SAAS,0BAA0B,SAAwC;AAChF,QAAM,SAAS,CAAC,SACd,OAAO,SAAS,YAAY,KAAK,KAAK,MAAM;AAC9C,MAAI,OAAO,QAAQ,QAAQ,KAAK,OAAO,QAAQ,KAAK,EAAG,QAAO;AAC9D,QAAM,WAAW;AAAA,IACf,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AACA,SAAO,SAAS,KAAK,CAAC,YAAY,MAAM,QAAQ,OAAO,KAAK,QAAQ,SAAS,CAAC;AAChF;AAaO,SAAS,uBACd,KACA,kBACS;AAIT,MAAI,qBAAqB,SAAU,QAAO;AAC1C,MAAI,QAAQ,QAAQ,QAAQ,OAAW,QAAO;AAC9C,MAAI,CAAC,IAAI,SAAS,CAAC,IAAI,WAAY,QAAO;AAK1C,SAAO,IAAI,SAAS,IAAI,2BAA2B;AACrD;AAYO,SAAS,sBACd,KACA,kBACS;AACT,MAAI,qBAAqB,SAAU,QAAO;AAC1C,MAAI,QAAQ,QAAQ,QAAQ,OAAW,QAAO;AAC9C,SAAO,IAAI,SAAS,IAAI;AAC1B;AAiBO,SAAS,wBAAwB,SAGnB;AACnB,MAAI,QAAQ,qBAAqB,SAAU,QAAO;AAClD,QAAM,MAAM,QAAQ;AACpB,MAAI,KAAK,SAAS,IAAI,2BAA2B,KAAM,QAAO;AAC9D,MAAI,KAAK,SAAS,KAAK,cAAc,QAAQ,qBAAqB,UAAW,QAAO;AACpF,SAAO;AACT;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/logic/org-floor.ts"],"sourcesContent":["import type { OrgProfileRecord } from '../schemas/org-profile.js';\nimport { looksLikeDomain } from './domain-detect.js';\nimport type { AccountFacetMode } from '../types/index.js';\n\n/**\n * Handle hosts that are shared PDS / signup domains, never a single\n * organization's registrable identity. A handle under one of these (e.g.\n * `acme.bsky.social`) is a subdomain of someone else's domain, so it can never\n * satisfy the org rendering floor. Lowercased, leading-dot form for a suffix\n * match. Kept in sync with the PDS provider list in `format/pds-utils.ts`.\n */\nconst KNOWN_HANDLE_HOST_SUFFIXES = [\n '.bsky.social',\n '.blacksky.app',\n '.eurosky.social',\n '.northsky.social',\n] as const;\n\n/**\n * Approximate \"is this handle a custom registrable domain?\" check for the org\n * rendering floor.\n *\n * IMPORTANT -- this is deliberately NARROW, not authoritative. The SDK has no\n * public-suffix-list (PSL) dependency, so it cannot compute the true eTLD+1\n * apex: it cannot tell `acme.co.uk` (an apex) from `careers.acme.co.uk` (a\n * subdomain that routes to the subsidiary case), nor reject every PSL-private\n * host. It performs only the rejects it CAN make correctly with no PSL:\n * - DIDs (never a domain handle),\n * - bare / no-dot handles and non-TLD-shaped hosts (via `looksLikeDomain`),\n * - known shared PDS / handle hosts (`*.bsky.social` and friends).\n *\n * The AUTHORITATIVE apex + eTLD+1 + confusable check is server-side in\n * sifa-api's `bind-domain-guard` (`isBindableHandleDomain`, backed by `tldts`);\n * `computeOrgFloorVerdict` there is the source of truth and is surfaced to\n * clients on the profile resolve (read it via `useOrgProfile`). Recompute here\n * only when a client-side floor gate is needed without a round-trip.\n *\n * TODO(#160): promote a shared PSL-backed eTLD+1 helper into the SDK (or vendor\n * a compact public-suffix table) and tighten this to a true apex check.\n *\n * Pure: no network, no I/O.\n */\nexport function isRegistrableDomainHandle(handle: string): boolean {\n const h = handle.trim().toLowerCase();\n if (!h) return false;\n if (h.startsWith('did:')) return false;\n // Requires >=1 dot and a TLD-shaped final label; rejects bare usernames.\n if (!looksLikeDomain(h)) return false;\n for (const suffix of KNOWN_HANDLE_HOST_SUFFIXES) {\n if (h.endsWith(suffix)) return false;\n }\n return true;\n}\n\n/**\n * The org rendering floor (#160) -- the \"any AppView can evaluate\" promise made\n * executable. An account renders as an organization when BOTH:\n * 1. It has an `id.sifa.org.profile` record (record present), AND\n * 2. Its handle is a custom registrable domain\n * ({@link isRegistrableDomainHandle}).\n *\n * Only the PRESENCE of the record matters here (declaration marks the account\n * as presenting-as-org; trust is layered separately). The handle check is LIVE:\n * evaluate it on every render so a lost domain drops org rendering\n * automatically.\n *\n * Pure: no network, no I/O. Pass the fetched record (or null) and the current\n * handle.\n */\nexport function qualifiesAsOrg(\n record: OrgProfileRecord | null | undefined,\n handle: string,\n): boolean {\n if (record === null || record === undefined) return false;\n return isRegistrableDomainHandle(handle);\n}\n\n/**\n * The person-facet fields that decide whether an account has a CV worth\n * keeping. A structural subset of `Profile`, so callers can pass a profile\n * straight in. Every list is optional; `positions`, `education`, and `skills`\n * are always present on a real profile but typed optional here so partial\n * fixtures and trimmed payloads work.\n */\nexport interface PersonalFacetContent {\n headline?: string | null;\n about?: string | null;\n positions?: unknown[];\n education?: unknown[];\n skills?: unknown[];\n certifications?: unknown[];\n projects?: unknown[];\n publications?: unknown[];\n volunteering?: unknown[];\n involvement?: unknown[];\n honors?: unknown[];\n courses?: unknown[];\n}\n\n/**\n * Does this account have a personal profile worth keeping visible?\n *\n * Decides the claim-flow default when an account claims its domain as an\n * organization. An empty account claiming a domain is a plain company signup:\n * present solely as an org, ask nothing. An account that already carries a CV\n * is the sole-trader case: keeping both facets is the default, and hiding the\n * person facet must be a deliberate choice rather than a silent side effect of\n * claiming.\n *\n * True when any profile section holds at least one record, or when the headline\n * is non-blank. Whitespace-only text does not count. The about text is ignored:\n * it is seeded from the Bluesky bio at sign-in, so a plain organization account\n * carries one too, and counting it would make every such claim keep a personal\n * profile the account never had.\n *\n * Pure: no network, no I/O.\n */\nexport function hasPersonalProfileContent(profile: PersonalFacetContent): boolean {\n const filled = (text: string | null | undefined): boolean =>\n typeof text === 'string' && text.trim() !== '';\n if (filled(profile.headline)) return true;\n const sections = [\n profile.positions,\n profile.education,\n profile.skills,\n profile.certifications,\n profile.projects,\n profile.publications,\n profile.volunteering,\n profile.involvement,\n profile.honors,\n profile.courses,\n ];\n return sections.some((section) => Array.isArray(section) && section.length > 0);\n}\n\n/**\n * Should this account's personal profile render at `/p/`, given the org verdict?\n *\n * The single routing predicate behind the freelancer dual-identity case: a\n * claimed org that set `personalProfileVisible` renders both facets, so `/p/`\n * serves the person instead of redirecting to `/c/`. Every other account keeps\n * the exclusive behaviour -- an org (claimed or merely recognized) redirects\n * `/p/` to `/c/`, and a plain person renders at `/p/` as always.\n *\n * Pure: no network, no I/O.\n */\nexport function rendersPersonalProfile(\n org: { isOrg: boolean; recognized: boolean; personalProfileVisible?: boolean } | null | undefined,\n renderPreference?: 'person' | 'company' | null,\n): boolean {\n // An explicit 'person' choice is the owner's own override and wins outright:\n // it is what makes \"Person\" mean person, even for an account holding an org\n // record (which stays in the PDS, inert).\n if (renderPreference === 'person') return true;\n if (org === null || org === undefined) return true;\n if (!org.isOrg && !org.recognized) return true;\n // Gated on isOrg, not merely on the flag: `personalProfileVisible` lives in\n // the `id.sifa.org.profile` record, so an account that is only RECOGNIZED\n // (known company domain, never claimed) has no record to carry it and keeps\n // the redirect. Claiming is the way in.\n return org.isOrg && org.personalProfileVisible === true;\n}\n\n/**\n * Should this account's company page render at `/c/`?\n *\n * The mirror of {@link rendersPersonalProfile}. True for any company account --\n * claimed or merely recognized -- EXCEPT when the owner explicitly chose to\n * present as a person, which suppresses the company page rather than deleting\n * anything. The org record stays in the PDS and the choice is reversible.\n *\n * Pure: no network, no I/O.\n */\nexport function rendersCompanyProfile(\n org: { isOrg: boolean; recognized: boolean } | null | undefined,\n renderPreference?: 'person' | 'company' | null,\n): boolean {\n if (renderPreference === 'person') return false;\n if (org === null || org === undefined) return false;\n return org.isOrg || org.recognized;\n}\n\n/**\n * Resolve the three-way \"are you a person, a company, or both?\" answer that the\n * account settings switch presents, from the two places the answer is stored.\n *\n * Precedence, highest first:\n * 1. `renderPreference === 'person'` -- the owner's explicit local override.\n * Wins even over a claimed org record, which stays inert in the PDS.\n * 2. A claimed org that declared `personalProfileVisible` -- `'both'`, the\n * sole trader. Read from the PDS record, so it is portable.\n * 3. Any other company account (claimed, recognized, or `renderPreference`\n * `'company'`) -- `'company'`.\n * 4. Everything else -- `'person'`.\n *\n * Pure: no network, no I/O.\n */\nexport function resolveAccountFacetMode(profile: {\n org?: { isOrg: boolean; recognized: boolean; personalProfileVisible?: boolean } | null;\n renderPreference?: 'person' | 'company' | null;\n}): AccountFacetMode {\n if (profile.renderPreference === 'person') return 'person';\n const org = profile.org;\n if (org?.isOrg && org.personalProfileVisible === true) return 'both';\n if (org?.isOrg || org?.recognized || profile.renderPreference === 'company') return 'company';\n return 'person';\n}\n"],"mappings":";AACA,SAAS,uBAAuB;AAUhC,IAAM,6BAA6B;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AA0BO,SAAS,0BAA0B,QAAyB;AACjE,QAAM,IAAI,OAAO,KAAK,EAAE,YAAY;AACpC,MAAI,CAAC,EAAG,QAAO;AACf,MAAI,EAAE,WAAW,MAAM,EAAG,QAAO;AAEjC,MAAI,CAAC,gBAAgB,CAAC,EAAG,QAAO;AAChC,aAAW,UAAU,4BAA4B;AAC/C,QAAI,EAAE,SAAS,MAAM,EAAG,QAAO;AAAA,EACjC;AACA,SAAO;AACT;AAiBO,SAAS,eACd,QACA,QACS;AACT,MAAI,WAAW,QAAQ,WAAW,OAAW,QAAO;AACpD,SAAO,0BAA0B,MAAM;AACzC;AA0CO,SAAS,0BAA0B,SAAwC;AAChF,QAAM,SAAS,CAAC,SACd,OAAO,SAAS,YAAY,KAAK,KAAK,MAAM;AAC9C,MAAI,OAAO,QAAQ,QAAQ,EAAG,QAAO;AACrC,QAAM,WAAW;AAAA,IACf,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AACA,SAAO,SAAS,KAAK,CAAC,YAAY,MAAM,QAAQ,OAAO,KAAK,QAAQ,SAAS,CAAC;AAChF;AAaO,SAAS,uBACd,KACA,kBACS;AAIT,MAAI,qBAAqB,SAAU,QAAO;AAC1C,MAAI,QAAQ,QAAQ,QAAQ,OAAW,QAAO;AAC9C,MAAI,CAAC,IAAI,SAAS,CAAC,IAAI,WAAY,QAAO;AAK1C,SAAO,IAAI,SAAS,IAAI,2BAA2B;AACrD;AAYO,SAAS,sBACd,KACA,kBACS;AACT,MAAI,qBAAqB,SAAU,QAAO;AAC1C,MAAI,QAAQ,QAAQ,QAAQ,OAAW,QAAO;AAC9C,SAAO,IAAI,SAAS,IAAI;AAC1B;AAiBO,SAAS,wBAAwB,SAGnB;AACnB,MAAI,QAAQ,qBAAqB,SAAU,QAAO;AAClD,QAAM,MAAM,QAAQ;AACpB,MAAI,KAAK,SAAS,IAAI,2BAA2B,KAAM,QAAO;AAC9D,MAAI,KAAK,SAAS,KAAK,cAAc,QAAQ,qBAAqB,UAAW,QAAO;AACpF,SAAO;AACT;","names":[]}
|
package/package.json
CHANGED