@ai-matrx/design-system 0.86.356 → 0.86.357
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/CHANGELOG.md +5 -0
- package/dist/auth-gate-dialog.js +2 -2
- package/dist/carousel.js +7 -6
- package/dist/carousel.js.map +1 -1
- package/dist/{chunk-UWTODOMD.js → chunk-2BQAHLU3.js} +4 -4
- package/dist/chunk-5Z5GTXKL.js +79 -0
- package/dist/chunk-5Z5GTXKL.js.map +1 -0
- package/dist/{chunk-2PO3N42Q.js → chunk-ACZALXD6.js} +3 -3
- package/dist/{chunk-4WSXAP24.js → chunk-BB5LA7FQ.js} +3 -1
- package/dist/chunk-BB5LA7FQ.js.map +1 -0
- package/dist/{chunk-RLM4RSED.js → chunk-GUGBVQ4T.js} +6 -4
- package/dist/{chunk-RLM4RSED.js.map → chunk-GUGBVQ4T.js.map} +1 -1
- package/dist/{chunk-LJKF267O.js → chunk-HS6GMHKZ.js} +18 -76
- package/dist/chunk-HS6GMHKZ.js.map +1 -0
- package/dist/{chunk-ZMUPFGQO.js → chunk-TV2IDHPZ.js} +2 -2
- package/dist/{chunk-CFUXEGW2.js → chunk-XZGYKKCE.js} +2 -2
- package/dist/clipboard-fallback-dialog.js +2 -2
- package/dist/controls.cjs +15 -3
- package/dist/controls.cjs.map +1 -1
- package/dist/controls.js +5 -4
- package/dist/data-table/data-row-window.js +3 -3
- package/dist/data-table/drill-chart.cjs +15 -3
- package/dist/data-table/drill-chart.cjs.map +1 -1
- package/dist/data-table/drill-chart.js +2 -1
- package/dist/data-table/drill-chart.js.map +1 -1
- package/dist/data-table/index.cjs +15 -3
- package/dist/data-table/index.cjs.map +1 -1
- package/dist/data-table/index.js +8 -7
- package/dist/data-table/index.js.map +1 -1
- package/dist/desktop.cjs +26 -5
- package/dist/desktop.cjs.map +1 -1
- package/dist/desktop.js +15 -7
- package/dist/desktop.js.map +1 -1
- package/dist/email-input-dialog.cjs +15 -3
- package/dist/email-input-dialog.cjs.map +1 -1
- package/dist/email-input-dialog.js +4 -3
- package/dist/email-input-dialog.js.map +1 -1
- package/dist/error-sentence.cjs +130 -0
- package/dist/error-sentence.cjs.map +1 -0
- package/dist/error-sentence.d.cts +49 -0
- package/dist/error-sentence.d.ts +49 -0
- package/dist/error-sentence.js +22 -0
- package/dist/error-sentence.js.map +1 -0
- package/dist/index.cjs +16 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +17 -15
- package/dist/index.js.map +1 -1
- package/dist/item.js +2 -2
- package/dist/lite-table.cjs +15 -3
- package/dist/lite-table.cjs.map +1 -1
- package/dist/lite-table.js +3 -2
- package/dist/lite-table.js.map +1 -1
- package/dist/notice-stack.cjs +2 -0
- package/dist/notice-stack.cjs.map +1 -1
- package/dist/notice-stack.d.cts +11 -1
- package/dist/notice-stack.d.ts +11 -1
- package/dist/notice-stack.js +3 -1
- package/dist/record-list.cjs +15 -3
- package/dist/record-list.cjs.map +1 -1
- package/dist/record-list.js +3 -2
- package/dist/record-list.js.map +1 -1
- package/dist/sandbox-gate-dialog.js +2 -2
- package/dist/scope-mismatch-dialog.js +2 -2
- package/dist/swipe-deck.cjs +15 -3
- package/dist/swipe-deck.cjs.map +1 -1
- package/dist/swipe-deck.js +2 -1
- package/dist/swipe-deck.js.map +1 -1
- package/dist/text-input-dialog.cjs +15 -3
- package/dist/text-input-dialog.cjs.map +1 -1
- package/dist/text-input-dialog.js +4 -3
- package/dist/text-input-dialog.js.map +1 -1
- package/dist/value-prompts-dialog.js +2 -2
- package/dist/writing-field.js +2 -2
- package/package.json +12 -2
- package/dist/chunk-4WSXAP24.js.map +0 -1
- package/dist/chunk-LJKF267O.js.map +0 -1
- /package/dist/{chunk-UWTODOMD.js.map → chunk-2BQAHLU3.js.map} +0 -0
- /package/dist/{chunk-2PO3N42Q.js.map → chunk-ACZALXD6.js.map} +0 -0
- /package/dist/{chunk-ZMUPFGQO.js.map → chunk-TV2IDHPZ.js.map} +0 -0
- /package/dist/{chunk-CFUXEGW2.js.map → chunk-XZGYKKCE.js.map} +0 -0
package/dist/record-list.js
CHANGED
|
@@ -10,14 +10,15 @@ import {
|
|
|
10
10
|
ReadEmpty,
|
|
11
11
|
ReadStaleNotice,
|
|
12
12
|
readOf
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-GUGBVQ4T.js";
|
|
14
14
|
import "./chunk-T4D7WAV7.js";
|
|
15
15
|
import "./chunk-HEFTQUJ5.js";
|
|
16
16
|
import {
|
|
17
17
|
MAC_LIST_ATTRIBUTE
|
|
18
18
|
} from "./chunk-5JZSBNEY.js";
|
|
19
19
|
import "./chunk-K4XCB576.js";
|
|
20
|
-
import "./chunk-
|
|
20
|
+
import "./chunk-5Z5GTXKL.js";
|
|
21
|
+
import "./chunk-HS6GMHKZ.js";
|
|
21
22
|
import {
|
|
22
23
|
Checkbox
|
|
23
24
|
} from "./chunk-VLLUUOYJ.js";
|
package/dist/record-list.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/record-list/RecordList.tsx"],"sourcesContent":["\"use client\";\n\n/**\n * RecordList — THE LIGHT RECORD LIST (2026-10-17). A list of records, each an\n * `ItemRow`: title, an optional second line, muted meta, leading icon,\n * trailing indicators, actions and the row's menu; a row that links or opens;\n * optional selection (checkboxes) and a current row; arrow-key navigation; and\n * the honest read states (`read` / `ReadGate`: the empty view only after a\n * read that succeeded, the failure with its retry, stale rows kept with a notice).\n *\n * Use it instead of mapping bordered hover `<div>`s. When a list needs columns,\n * sorting or filters, it is a table: `LiteTable`, then `MatrxDataTable`.\n *\n * THE MAC LIST (2026-10-17): its rows wear the desktop app's `ListRow` — 36 pt, 13 pt title and\n * secondary line, a 7 pt corner, the pointer's fill, the gray selection (the accent while the list\n * has focus); `framed` is System Settings' grouped box with hairlines between. Values from\n * `../mac-table/tokens.ts`, drawn by `mac-table.css`; `mac-table-parity.test.ts` keeps them equal.\n */\n\nimport { useRef, type KeyboardEvent, type ReactNode } from \"react\";\nimport type { MatrxDataTableEmptyState } from \"../data-table/types\";\nimport { ReadEmpty, ReadStaleNotice, type ReadOutcome } from \"../read-state/read-gate\";\nimport { ListEmptyView } from \"../read-state/list-empty-view\";\nimport { ItemRow } from \"../item/ItemRow\";\nimport type { ItemEntityRef, ItemMenuConfigInput, ItemRowSize } from \"../item/types\";\nimport { Checkbox } from \"../checkbox\";\nimport { cn } from \"../cn\";\nimport { MAC_LIST_ATTRIBUTE } from \"../mac-table/tokens\";\n\nexport interface RecordListProps<T> {\n items: T[];\n getKey: (item: T) => string;\n /** The row's name (plain text: it is also the tooltip and the accessible name). */\n title: (item: T) => string;\n /** A second line under the title. */\n subtitle?: ((item: T) => ReactNode) | undefined;\n /** Muted text at the trailing edge (a date, a count). */\n meta?: ((item: T) => string | undefined) | undefined;\n /** Icon / avatar / status dot before the title. */\n leading?: ((item: T) => ReactNode) | undefined;\n /** Indicators inside the row, after the meta (badges, a lock). Never buttons. */\n trailing?: ((item: T) => ReactNode) | undefined;\n /** Buttons at the trailing edge, outside the row's own link. */\n actions?: ((item: T) => ReactNode) | undefined;\n /** The row's kebab + right-click menu. */\n menu?: ((item: T) => ItemMenuConfigInput | undefined) | undefined;\n /** The row's page: the row is a real link (new tab, copy link). */\n href?: ((item: T) => string | undefined) | undefined;\n /** Plain click / Enter. With `href`, a side effect unless `openInPlace`. */\n onOpen?: ((item: T) => void) | undefined;\n openInPlace?: boolean | undefined;\n /** The current row (drawn selected). */\n activeKey?: string | null | undefined;\n /** Checkbox selection. Present → each row gets a checkbox. */\n selectedKeys?: readonly string[] | undefined;\n onSelectedKeysChange?: ((keys: string[]) => void) | undefined;\n disabled?: ((item: T) => boolean) | undefined;\n /** The read behind `items`. */\n read?: ReadOutcome | undefined;\n emptyState?: MatrxDataTableEmptyState | ReactNode;\n size?: ItemRowSize | undefined;\n /** Hairlines between rows inside a bordered box. Default true; false = bare rows (a sidebar). */\n framed?: boolean | undefined;\n /** Who owns the rows' menus (the item menu's registry name). */\n sourceFeature: string;\n surfaceName?: string | undefined;\n entity?: ((item: T) => ItemEntityRef | undefined) | undefined;\n ariaLabel?: string | undefined;\n className?: string | undefined;\n}\n\nexport function RecordList<T>({\n items,\n getKey,\n title,\n subtitle,\n meta,\n leading,\n trailing,\n actions,\n menu,\n href,\n onOpen,\n openInPlace,\n activeKey,\n selectedKeys,\n onSelectedKeysChange,\n disabled,\n read,\n emptyState = { title: \"Nothing here yet\" },\n size = \"md\",\n framed = true,\n sourceFeature,\n surfaceName,\n entity,\n ariaLabel,\n className,\n}: RecordListProps<T>) {\n const listRef = useRef<HTMLUListElement | null>(null);\n\n if (items.length === 0) {\n return (\n <div className={className} data-record-list=\"\" {...{ [MAC_LIST_ATTRIBUTE]: \"\" }}>\n <ReadEmpty read={read}>\n <ListEmptyView emptyState={emptyState} />\n </ReadEmpty>\n </div>\n );\n }\n\n const selectable = selectedKeys !== undefined;\n const selected = new Set(selectedKeys ?? []);\n const toggle = (key: string, on: boolean) => {\n const next = new Set(selected);\n if (on) next.add(key);\n else next.delete(key);\n onSelectedKeysChange?.(items.map(getKey).filter((k) => next.has(k)));\n };\n\n // Up/Down/Home/End move between rows; Enter and Space stay the row's own.\n const onKeyDown = (event: KeyboardEvent<HTMLUListElement>) => {\n if (![\"ArrowDown\", \"ArrowUp\", \"Home\", \"End\"].includes(event.key)) return;\n const target = event.target as HTMLElement;\n if (target.closest(\"input,textarea,[contenteditable=true],[role=menu]\")) return;\n const rows = Array.from(listRef.current?.querySelectorAll<HTMLElement>(\"[data-item-primary]\") ?? []);\n const at = rows.findIndex((row) => row === target || row.contains(target) || target.closest(\"li\")?.contains(row));\n const to =\n event.key === \"Home\" ? 0 : event.key === \"End\" ? rows.length - 1 : event.key === \"ArrowDown\" ? at + 1 : at - 1;\n const next = rows[Math.max(0, Math.min(rows.length - 1, to))];\n if (next) {\n event.preventDefault();\n next.focus();\n }\n };\n\n return (\n <div className={cn(\"flex flex-col gap-2\", className)} data-record-list=\"\" {...{ [MAC_LIST_ATTRIBUTE]: \"\" }}>\n <ReadStaleNotice read={read} />\n <ul\n ref={listRef}\n aria-label={ariaLabel}\n onKeyDown={onKeyDown}\n data-mac-list-body=\"\"\n data-framed={framed ? \"\" : undefined}\n className={cn(\"flex flex-col\", !framed && \"gap-0.5\")}\n >\n {items.map((item) => {\n const key = getKey(item);\n const name = title(item);\n const metaText = meta?.(item);\n const rowHref = href?.(item);\n const rowMenu = menu?.(item);\n const rowEntity = entity?.(item);\n const rowActions = actions?.(item);\n const lead = leading?.(item);\n const trail = trailing?.(item);\n const sub = subtitle?.(item);\n return (\n <li key={key} data-record-key={key}>\n <ItemRow\n label={name}\n sourceFeature={sourceFeature}\n size={size}\n active={activeKey === key}\n {...(metaText ? { secondaryLabel: metaText } : {})}\n {...(sub != null ? { subtitle: sub } : {})}\n {...(lead != null ? { leading: lead } : {})}\n {...(trail != null ? { trailing: trail } : {})}\n {...(rowActions != null ? { actions: rowActions } : {})}\n {...(rowMenu ? { menu: rowMenu } : {})}\n {...(rowHref ? { href: rowHref } : {})}\n {...(onOpen ? { onOpen: () => onOpen(item) } : {})}\n {...(openInPlace ? { openInPlace } : {})}\n {...(disabled?.(item) ? { disabled: true } : {})}\n {...(surfaceName ? { surfaceName } : {})}\n {...(rowEntity ? { entity: rowEntity } : {})}\n {...(selectable\n ? {\n leadingControl: (\n <Checkbox\n size=\"sm\"\n aria-label={`Select ${name}`}\n checked={selected.has(key)}\n onCheckedChange={(on) => toggle(key, on === true)}\n />\n ),\n }\n : {})}\n />\n </li>\n );\n })}\n </ul>\n </div>\n );\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/record-list/RecordList.tsx"],"sourcesContent":["\"use client\";\n\n/**\n * RecordList — THE LIGHT RECORD LIST (2026-10-17). A list of records, each an\n * `ItemRow`: title, an optional second line, muted meta, leading icon,\n * trailing indicators, actions and the row's menu; a row that links or opens;\n * optional selection (checkboxes) and a current row; arrow-key navigation; and\n * the honest read states (`read` / `ReadGate`: the empty view only after a\n * read that succeeded, the failure with its retry, stale rows kept with a notice).\n *\n * Use it instead of mapping bordered hover `<div>`s. When a list needs columns,\n * sorting or filters, it is a table: `LiteTable`, then `MatrxDataTable`.\n *\n * THE MAC LIST (2026-10-17): its rows wear the desktop app's `ListRow` — 36 pt, 13 pt title and\n * secondary line, a 7 pt corner, the pointer's fill, the gray selection (the accent while the list\n * has focus); `framed` is System Settings' grouped box with hairlines between. Values from\n * `../mac-table/tokens.ts`, drawn by `mac-table.css`; `mac-table-parity.test.ts` keeps them equal.\n */\n\nimport { useRef, type KeyboardEvent, type ReactNode } from \"react\";\nimport type { MatrxDataTableEmptyState } from \"../data-table/types\";\nimport { ReadEmpty, ReadStaleNotice, type ReadOutcome } from \"../read-state/read-gate\";\nimport { ListEmptyView } from \"../read-state/list-empty-view\";\nimport { ItemRow } from \"../item/ItemRow\";\nimport type { ItemEntityRef, ItemMenuConfigInput, ItemRowSize } from \"../item/types\";\nimport { Checkbox } from \"../checkbox\";\nimport { cn } from \"../cn\";\nimport { MAC_LIST_ATTRIBUTE } from \"../mac-table/tokens\";\n\nexport interface RecordListProps<T> {\n items: T[];\n getKey: (item: T) => string;\n /** The row's name (plain text: it is also the tooltip and the accessible name). */\n title: (item: T) => string;\n /** A second line under the title. */\n subtitle?: ((item: T) => ReactNode) | undefined;\n /** Muted text at the trailing edge (a date, a count). */\n meta?: ((item: T) => string | undefined) | undefined;\n /** Icon / avatar / status dot before the title. */\n leading?: ((item: T) => ReactNode) | undefined;\n /** Indicators inside the row, after the meta (badges, a lock). Never buttons. */\n trailing?: ((item: T) => ReactNode) | undefined;\n /** Buttons at the trailing edge, outside the row's own link. */\n actions?: ((item: T) => ReactNode) | undefined;\n /** The row's kebab + right-click menu. */\n menu?: ((item: T) => ItemMenuConfigInput | undefined) | undefined;\n /** The row's page: the row is a real link (new tab, copy link). */\n href?: ((item: T) => string | undefined) | undefined;\n /** Plain click / Enter. With `href`, a side effect unless `openInPlace`. */\n onOpen?: ((item: T) => void) | undefined;\n openInPlace?: boolean | undefined;\n /** The current row (drawn selected). */\n activeKey?: string | null | undefined;\n /** Checkbox selection. Present → each row gets a checkbox. */\n selectedKeys?: readonly string[] | undefined;\n onSelectedKeysChange?: ((keys: string[]) => void) | undefined;\n disabled?: ((item: T) => boolean) | undefined;\n /** The read behind `items`. */\n read?: ReadOutcome | undefined;\n emptyState?: MatrxDataTableEmptyState | ReactNode;\n size?: ItemRowSize | undefined;\n /** Hairlines between rows inside a bordered box. Default true; false = bare rows (a sidebar). */\n framed?: boolean | undefined;\n /** Who owns the rows' menus (the item menu's registry name). */\n sourceFeature: string;\n surfaceName?: string | undefined;\n entity?: ((item: T) => ItemEntityRef | undefined) | undefined;\n ariaLabel?: string | undefined;\n className?: string | undefined;\n}\n\nexport function RecordList<T>({\n items,\n getKey,\n title,\n subtitle,\n meta,\n leading,\n trailing,\n actions,\n menu,\n href,\n onOpen,\n openInPlace,\n activeKey,\n selectedKeys,\n onSelectedKeysChange,\n disabled,\n read,\n emptyState = { title: \"Nothing here yet\" },\n size = \"md\",\n framed = true,\n sourceFeature,\n surfaceName,\n entity,\n ariaLabel,\n className,\n}: RecordListProps<T>) {\n const listRef = useRef<HTMLUListElement | null>(null);\n\n if (items.length === 0) {\n return (\n <div className={className} data-record-list=\"\" {...{ [MAC_LIST_ATTRIBUTE]: \"\" }}>\n <ReadEmpty read={read}>\n <ListEmptyView emptyState={emptyState} />\n </ReadEmpty>\n </div>\n );\n }\n\n const selectable = selectedKeys !== undefined;\n const selected = new Set(selectedKeys ?? []);\n const toggle = (key: string, on: boolean) => {\n const next = new Set(selected);\n if (on) next.add(key);\n else next.delete(key);\n onSelectedKeysChange?.(items.map(getKey).filter((k) => next.has(k)));\n };\n\n // Up/Down/Home/End move between rows; Enter and Space stay the row's own.\n const onKeyDown = (event: KeyboardEvent<HTMLUListElement>) => {\n if (![\"ArrowDown\", \"ArrowUp\", \"Home\", \"End\"].includes(event.key)) return;\n const target = event.target as HTMLElement;\n if (target.closest(\"input,textarea,[contenteditable=true],[role=menu]\")) return;\n const rows = Array.from(listRef.current?.querySelectorAll<HTMLElement>(\"[data-item-primary]\") ?? []);\n const at = rows.findIndex((row) => row === target || row.contains(target) || target.closest(\"li\")?.contains(row));\n const to =\n event.key === \"Home\" ? 0 : event.key === \"End\" ? rows.length - 1 : event.key === \"ArrowDown\" ? at + 1 : at - 1;\n const next = rows[Math.max(0, Math.min(rows.length - 1, to))];\n if (next) {\n event.preventDefault();\n next.focus();\n }\n };\n\n return (\n <div className={cn(\"flex flex-col gap-2\", className)} data-record-list=\"\" {...{ [MAC_LIST_ATTRIBUTE]: \"\" }}>\n <ReadStaleNotice read={read} />\n <ul\n ref={listRef}\n aria-label={ariaLabel}\n onKeyDown={onKeyDown}\n data-mac-list-body=\"\"\n data-framed={framed ? \"\" : undefined}\n className={cn(\"flex flex-col\", !framed && \"gap-0.5\")}\n >\n {items.map((item) => {\n const key = getKey(item);\n const name = title(item);\n const metaText = meta?.(item);\n const rowHref = href?.(item);\n const rowMenu = menu?.(item);\n const rowEntity = entity?.(item);\n const rowActions = actions?.(item);\n const lead = leading?.(item);\n const trail = trailing?.(item);\n const sub = subtitle?.(item);\n return (\n <li key={key} data-record-key={key}>\n <ItemRow\n label={name}\n sourceFeature={sourceFeature}\n size={size}\n active={activeKey === key}\n {...(metaText ? { secondaryLabel: metaText } : {})}\n {...(sub != null ? { subtitle: sub } : {})}\n {...(lead != null ? { leading: lead } : {})}\n {...(trail != null ? { trailing: trail } : {})}\n {...(rowActions != null ? { actions: rowActions } : {})}\n {...(rowMenu ? { menu: rowMenu } : {})}\n {...(rowHref ? { href: rowHref } : {})}\n {...(onOpen ? { onOpen: () => onOpen(item) } : {})}\n {...(openInPlace ? { openInPlace } : {})}\n {...(disabled?.(item) ? { disabled: true } : {})}\n {...(surfaceName ? { surfaceName } : {})}\n {...(rowEntity ? { entity: rowEntity } : {})}\n {...(selectable\n ? {\n leadingControl: (\n <Checkbox\n size=\"sm\"\n aria-label={`Select ${name}`}\n checked={selected.has(key)}\n onCheckedChange={(on) => toggle(key, on === true)}\n />\n ),\n }\n : {})}\n />\n </li>\n );\n })}\n </ul>\n </div>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -6,14 +6,14 @@ import {
|
|
|
6
6
|
DialogFooter,
|
|
7
7
|
DialogHeader,
|
|
8
8
|
DialogTitle
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-2BQAHLU3.js";
|
|
10
|
+
import "./chunk-LEPD6TV7.js";
|
|
10
11
|
import {
|
|
11
12
|
UNCONFIGURED,
|
|
12
13
|
announceStandIn
|
|
13
14
|
} from "./chunk-IMQ3RX35.js";
|
|
14
15
|
import "./chunk-U24MOJWK.js";
|
|
15
16
|
import "./chunk-NDTDBBMM.js";
|
|
16
|
-
import "./chunk-LEPD6TV7.js";
|
|
17
17
|
import "./chunk-MOZRIHJF.js";
|
|
18
18
|
import {
|
|
19
19
|
Button
|
|
@@ -6,14 +6,14 @@ import {
|
|
|
6
6
|
DialogFooter,
|
|
7
7
|
DialogHeader,
|
|
8
8
|
DialogTitle
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-2BQAHLU3.js";
|
|
10
|
+
import "./chunk-LEPD6TV7.js";
|
|
10
11
|
import {
|
|
11
12
|
UNCONFIGURED,
|
|
12
13
|
announceStandIn
|
|
13
14
|
} from "./chunk-IMQ3RX35.js";
|
|
14
15
|
import "./chunk-U24MOJWK.js";
|
|
15
16
|
import "./chunk-NDTDBBMM.js";
|
|
16
|
-
import "./chunk-LEPD6TV7.js";
|
|
17
17
|
import "./chunk-MOZRIHJF.js";
|
|
18
18
|
import {
|
|
19
19
|
Button
|
package/dist/swipe-deck.cjs
CHANGED
|
@@ -149,6 +149,16 @@ function errorSentenceOf(error) {
|
|
|
149
149
|
}
|
|
150
150
|
var TIMED_OUT_SENTENCE = "That took too long. Nothing was lost; try again.";
|
|
151
151
|
var FALLBACK_ERROR_SENTENCE = "Something went wrong. Try again.";
|
|
152
|
+
var CARD_ERROR_LINE = {
|
|
153
|
+
OFFLINE: "No connection",
|
|
154
|
+
TIMEOUT: "Took too long. Nothing was lost.",
|
|
155
|
+
UNAUTHORIZED: "Signed out. Sign in again.",
|
|
156
|
+
FORBIDDEN: "Not allowed for this account",
|
|
157
|
+
NOT_FOUND: "Not found. Refresh and retry.",
|
|
158
|
+
RATE_LIMIT: "Too many requests. Wait a moment.",
|
|
159
|
+
SERVER: "Server problem. Try again soon.",
|
|
160
|
+
FALLBACK: "Something went wrong"
|
|
161
|
+
};
|
|
152
162
|
function isTimedOutError(error, message, code) {
|
|
153
163
|
if (code === "57014" || code === "timed_out") return true;
|
|
154
164
|
if (error && typeof error === "object") {
|
|
@@ -166,8 +176,9 @@ var ANY_HOST_CODES = /* @__PURE__ */ new Set(["OFFLINE", "TIMEOUT", "UNAUTHORIZE
|
|
|
166
176
|
var MACHINE_PREFIX = /^\s*(?:\[[\w./-]+\]\s*|[a-z][\w]*(?:[._][\w]+)+:\s+)/;
|
|
167
177
|
var RAW_TEXT = /\b(?:Type|Reference|Syntax|Range|Internal|Eval|URI)Error\b|\bat\s+[\w$.<>]+\s*\(|\.(?:[cm]?[jt]sx?|py):\d+|(?:^|[\s(])(?:\/[\w.@-]+){2,}|\bundefined is not\b|\bcannot read propert(?:y|ies)\b|\bis not a function\b|\bunexpected token\b/i;
|
|
168
178
|
function peopleErrorSentence(error, message, options = {}) {
|
|
169
|
-
|
|
170
|
-
|
|
179
|
+
const card = options.card === true;
|
|
180
|
+
if (isTimedOutError(error, message, options.code)) return card ? CARD_ERROR_LINE.TIMEOUT : TIMED_OUT_SENTENCE;
|
|
181
|
+
const fallback = options.fallback ?? (card ? CARD_ERROR_LINE.FALLBACK : FALLBACK_ERROR_SENTENCE);
|
|
171
182
|
const raw = message?.trim() || errorSentenceOf(error).trim();
|
|
172
183
|
if (!raw) return fallback;
|
|
173
184
|
let text2 = raw;
|
|
@@ -175,7 +186,8 @@ function peopleErrorSentence(error, message, options = {}) {
|
|
|
175
186
|
if (!text2) return fallback;
|
|
176
187
|
if (offlineText(text2) || RAW_TEXT.test(text2) || text2 !== raw) {
|
|
177
188
|
const said = describeError(text2, fallback);
|
|
178
|
-
|
|
189
|
+
if (!said.code || !ANY_HOST_CODES.has(said.code)) return fallback;
|
|
190
|
+
return card ? CARD_ERROR_LINE[said.code] : said.cause;
|
|
179
191
|
}
|
|
180
192
|
return text2;
|
|
181
193
|
}
|