@fairmint/ui 0.3.15 → 0.3.17

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.
@@ -1 +1 @@
1
- {"version":3,"file":"snackbarCompat.cjs","sources":["../src/snackbarCompat.ts"],"sourcesContent":["import { notifications } from \"@mantine/notifications\";\nimport { type CSSProperties, createElement, Fragment, type ReactNode } from \"react\";\nimport { colors } from \"./theme/colors\";\n\ntype SnackbarVariant = \"default\" | \"error\" | \"info\" | \"success\" | \"warning\";\ntype SnackbarKey = string | number;\ntype SnackbarCloseReason = \"clickaway\" | \"instructed\" | \"maxsnack\" | \"timeout\";\n\ninterface SnackbarOptions {\n action?: ReactNode | ((key: SnackbarKey) => ReactNode);\n anchorOrigin?: {\n horizontal?: \"center\" | \"left\" | \"right\";\n vertical?: \"bottom\" | \"top\";\n };\n autoHideDuration?: number | null;\n content?: ReactNode | ((key: SnackbarKey, message: ReactNode) => ReactNode);\n key?: SnackbarKey;\n onClose?: (event?: unknown, reason?: SnackbarCloseReason, key?: SnackbarKey) => void;\n persist?: boolean;\n preventDuplicate?: boolean;\n style?: CSSProperties;\n title?: ReactNode;\n variant?: SnackbarVariant;\n [key: string]: unknown;\n}\n\nconst variantColorMap: Record<SnackbarVariant, string | undefined> = {\n default: undefined,\n error: colors.error,\n info: colors.info,\n success: colors.success,\n warning: colors.warning,\n};\n\nconst resolveAutoClose = (options: SnackbarOptions) => {\n if (options.persist || options.autoHideDuration === null) return false;\n return options.autoHideDuration;\n};\n\nconst resolvePosition = (options: SnackbarOptions) => {\n if (!options.anchorOrigin) return undefined;\n\n const vertical = options.anchorOrigin?.vertical;\n const horizontal = options.anchorOrigin?.horizontal;\n\n return `${vertical ?? \"bottom\"}-${horizontal ?? \"left\"}` as const;\n};\n\nlet generatedSnackbarKey = 0;\nlet generatedNodeDuplicateKey = 0;\nconst activeDuplicateKeys = new Set<string>();\nconst duplicateKeysById = new Map<string, string>();\nconst duplicateIdsByKey = new Map<string, string>();\nconst instructedCloseIds = new Set<string>();\nconst nodeDuplicateKeys = new WeakMap<object, string>();\n\nconst createDuplicatePart = (value: ReactNode, part: string) => {\n if ((typeof value === \"object\" || typeof value === \"function\") && value !== null) {\n const keyTarget = value as object;\n const existingKey = nodeDuplicateKeys.get(keyTarget);\n if (existingKey) return existingKey;\n\n generatedNodeDuplicateKey += 1;\n const nextKey = `${part}:node-${generatedNodeDuplicateKey}`;\n nodeDuplicateKeys.set(keyTarget, nextKey);\n return nextKey;\n }\n\n return `${part}:primitive:${String(value ?? \"\")}`;\n};\n\nconst createDuplicateKey = (message: ReactNode, options: SnackbarOptions) =>\n [\n options.variant ?? \"default\",\n createDuplicatePart(options.title, \"title\"),\n createDuplicatePart(message, \"message\"),\n ].join(\":\");\n\nconst clearDuplicateKey = (duplicateKey: string) => {\n const id = duplicateIdsByKey.get(duplicateKey);\n activeDuplicateKeys.delete(duplicateKey);\n duplicateIdsByKey.delete(duplicateKey);\n if (id) duplicateKeysById.delete(id);\n};\n\nconst clearDuplicateId = (id: string) => {\n const duplicateKey = duplicateKeysById.get(id);\n if (duplicateKey) clearDuplicateKey(duplicateKey);\n};\n\nexport const enqueueSnackbar = (message: ReactNode, options: SnackbarOptions = {}) => {\n const duplicateKey = createDuplicateKey(message, options);\n const needsStableKey = Boolean(options.action || options.content);\n if (options.key === undefined && needsStableKey) {\n generatedSnackbarKey += 1;\n }\n const explicitId =\n options.key === undefined\n ? needsStableKey\n ? `snackbar-${generatedSnackbarKey}`\n : undefined\n : String(options.key);\n const previousDuplicateKey = explicitId ? duplicateKeysById.get(explicitId) : undefined;\n if (explicitId && previousDuplicateKey && previousDuplicateKey !== duplicateKey) {\n clearDuplicateId(explicitId);\n }\n\n if (options.preventDuplicate && activeDuplicateKeys.has(duplicateKey)) {\n return duplicateIdsByKey.get(duplicateKey) ?? duplicateKey;\n }\n\n const renderKey = explicitId ?? \"\";\n const action = typeof options.action === \"function\" ? options.action(renderKey) : options.action;\n const content =\n typeof options.content === \"function\" ? options.content(renderKey, message) : options.content;\n const renderedMessage =\n content ?? (action ? createElement(Fragment, null, message, action) : message);\n\n const id = notifications.show({\n id: explicitId,\n title: options.title,\n message: renderedMessage,\n color: variantColorMap[options.variant ?? \"default\"],\n autoClose: resolveAutoClose(options),\n onClose: (notification) => {\n const notificationId = String(notification?.id ?? explicitId ?? \"\");\n const closeReason =\n notificationId && instructedCloseIds.has(notificationId) ? \"instructed\" : \"timeout\";\n if (notificationId) instructedCloseIds.delete(notificationId);\n if (options.preventDuplicate) clearDuplicateKey(duplicateKey);\n options.onClose?.(undefined, closeReason, notification?.id ?? explicitId);\n },\n position: resolvePosition(options),\n style: options.style,\n });\n\n if (options.preventDuplicate) {\n activeDuplicateKeys.add(duplicateKey);\n duplicateKeysById.set(id, duplicateKey);\n duplicateIdsByKey.set(duplicateKey, id);\n }\n\n return id;\n};\n\nexport const closeSnackbar = (id?: SnackbarKey) => {\n if (id === undefined) {\n for (const notificationId of duplicateKeysById.keys()) {\n instructedCloseIds.add(notificationId);\n }\n activeDuplicateKeys.clear();\n duplicateKeysById.clear();\n duplicateIdsByKey.clear();\n notifications.clean();\n return;\n }\n\n const resolvedId = String(id);\n instructedCloseIds.add(resolvedId);\n clearDuplicateId(resolvedId);\n notifications.hide(resolvedId);\n};\n\nexport const useSnackbar = () => ({\n closeSnackbar,\n enqueueSnackbar,\n});\n"],"names":["colors","createElement","Fragment","notifications"],"mappings":"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"}
1
+ {"version":3,"file":"snackbarCompat.cjs","sources":["../src/snackbarCompat.ts"],"sourcesContent":["import { notifications } from \"@mantine/notifications\";\nimport { type CSSProperties, createElement, Fragment, type ReactNode } from \"react\";\nimport { buildNotifyNotification, notify } from \"./notify\";\n\ntype SnackbarVariant = \"default\" | \"error\" | \"info\" | \"success\" | \"warning\";\ntype SemanticSnackbarVariant = Exclude<SnackbarVariant, \"default\">;\ntype SnackbarKey = string | number;\ntype SnackbarCloseReason = \"clickaway\" | \"instructed\" | \"maxsnack\" | \"timeout\";\n\ninterface SnackbarOptions {\n action?: ReactNode | ((key: SnackbarKey) => ReactNode);\n anchorOrigin?: {\n horizontal?: \"center\" | \"left\" | \"right\";\n vertical?: \"bottom\" | \"top\";\n };\n autoHideDuration?: number | null;\n content?: ReactNode | ((key: SnackbarKey, message: ReactNode) => ReactNode);\n key?: SnackbarKey;\n onClose?: (event?: unknown, reason?: SnackbarCloseReason, key?: SnackbarKey) => void;\n persist?: boolean;\n preventDuplicate?: boolean;\n style?: CSSProperties;\n title?: ReactNode;\n variant?: SnackbarVariant;\n [key: string]: unknown;\n}\n\nconst semanticNotifyMethods = {\n error: notify.error,\n info: notify.info,\n success: notify.success,\n warning: notify.warning,\n} as const;\n\nconst isSemanticVariant = (variant: SnackbarVariant): variant is SemanticSnackbarVariant =>\n variant !== \"default\";\n\nconst resolveAutoClose = (options: SnackbarOptions): number | false | undefined => {\n if (options.persist || options.autoHideDuration === null) return false;\n return options.autoHideDuration;\n};\n\nconst resolvePosition = (options: SnackbarOptions) => {\n if (!options.anchorOrigin) return undefined;\n\n const vertical = options.anchorOrigin?.vertical;\n const horizontal = options.anchorOrigin?.horizontal;\n\n return `${vertical ?? \"bottom\"}-${horizontal ?? \"left\"}` as const;\n};\n\nconst resolveWithCloseButton = (options: SnackbarOptions, action: ReactNode | undefined) => {\n // Persist + custom action often ships its own dismiss control — avoid a double close affordance.\n if (action !== undefined && (options.persist || options.autoHideDuration === null)) {\n return false;\n }\n return true;\n};\n\n/**\n * Simple semantic snackbars can use the public notify helpers directly.\n * Complex notistack features keep a hybrid notifications.show path that still\n * applies Notify chrome (icon, withBorder, semantic color).\n */\nconst canRouteThroughNotify = (message: ReactNode, options: SnackbarOptions) => {\n if (!isSemanticVariant(options.variant ?? \"default\")) return false;\n if (typeof message !== \"string\") return false;\n if (options.title !== undefined && typeof options.title !== \"string\") return false;\n if (options.content !== undefined) return false;\n if (options.style !== undefined) return false;\n if (options.anchorOrigin !== undefined) return false;\n if (options.onClose !== undefined) return false;\n if (options.preventDuplicate) return false;\n return true;\n};\n\nlet generatedSnackbarKey = 0;\nlet generatedNodeDuplicateKey = 0;\nconst activeDuplicateKeys = new Set<string>();\nconst duplicateKeysById = new Map<string, string>();\nconst duplicateIdsByKey = new Map<string, string>();\nconst instructedCloseIds = new Set<string>();\nconst nodeDuplicateKeys = new WeakMap<object, string>();\n\nconst createDuplicatePart = (value: ReactNode, part: string) => {\n if ((typeof value === \"object\" || typeof value === \"function\") && value !== null) {\n const keyTarget = value as object;\n const existingKey = nodeDuplicateKeys.get(keyTarget);\n if (existingKey) return existingKey;\n\n generatedNodeDuplicateKey += 1;\n const nextKey = `${part}:node-${generatedNodeDuplicateKey}`;\n nodeDuplicateKeys.set(keyTarget, nextKey);\n return nextKey;\n }\n\n return `${part}:primitive:${String(value ?? \"\")}`;\n};\n\nconst createDuplicateKey = (message: ReactNode, options: SnackbarOptions) =>\n [\n options.variant ?? \"default\",\n createDuplicatePart(options.title, \"title\"),\n createDuplicatePart(message, \"message\"),\n ].join(\":\");\n\nconst clearDuplicateKey = (duplicateKey: string) => {\n const id = duplicateIdsByKey.get(duplicateKey);\n activeDuplicateKeys.delete(duplicateKey);\n duplicateIdsByKey.delete(duplicateKey);\n if (id) duplicateKeysById.delete(id);\n};\n\nconst clearDuplicateId = (id: string) => {\n const duplicateKey = duplicateKeysById.get(id);\n if (duplicateKey) clearDuplicateKey(duplicateKey);\n};\n\nconst trackDuplicate = (id: string, options: SnackbarOptions, duplicateKey: string) => {\n if (options.preventDuplicate) {\n activeDuplicateKeys.add(duplicateKey);\n duplicateKeysById.set(id, duplicateKey);\n duplicateIdsByKey.set(duplicateKey, id);\n }\n};\n\nexport const enqueueSnackbar = (message: ReactNode, options: SnackbarOptions = {}) => {\n const duplicateKey = createDuplicateKey(message, options);\n const needsStableKey = Boolean(options.action || options.content);\n if (options.key === undefined && needsStableKey) {\n generatedSnackbarKey += 1;\n }\n const explicitId =\n options.key === undefined\n ? needsStableKey\n ? `snackbar-${generatedSnackbarKey}`\n : undefined\n : String(options.key);\n const previousDuplicateKey = explicitId ? duplicateKeysById.get(explicitId) : undefined;\n if (explicitId && previousDuplicateKey && previousDuplicateKey !== duplicateKey) {\n clearDuplicateId(explicitId);\n }\n\n if (options.preventDuplicate && activeDuplicateKeys.has(duplicateKey)) {\n return duplicateIdsByKey.get(duplicateKey) ?? duplicateKey;\n }\n\n const renderKey = explicitId ?? \"\";\n const action = typeof options.action === \"function\" ? options.action(renderKey) : options.action;\n const content =\n typeof options.content === \"function\" ? options.content(renderKey, message) : options.content;\n const variant = options.variant ?? \"default\";\n const autoClose = resolveAutoClose(options);\n const withCloseButton = resolveWithCloseButton(options, action);\n\n if (\n typeof message === \"string\" &&\n canRouteThroughNotify(message, options) &&\n isSemanticVariant(variant)\n ) {\n const notifyOptions = {\n id: explicitId,\n title: typeof options.title === \"string\" ? options.title : undefined,\n message,\n action,\n withCloseButton,\n ...(autoClose === undefined ? {} : { autoClose }),\n };\n const id = semanticNotifyMethods[variant](notifyOptions);\n trackDuplicate(id, options, duplicateKey);\n return id;\n }\n\n const renderedMessage =\n content ?? (action ? createElement(Fragment, null, message, action) : message);\n\n const onClose = (notification: { id?: string } | undefined) => {\n const notificationId = String(notification?.id ?? explicitId ?? \"\");\n const closeReason =\n notificationId && instructedCloseIds.has(notificationId) ? \"instructed\" : \"timeout\";\n if (notificationId) instructedCloseIds.delete(notificationId);\n if (options.preventDuplicate) clearDuplicateKey(duplicateKey);\n options.onClose?.(undefined, closeReason, notification?.id ?? explicitId);\n };\n\n if (isSemanticVariant(variant)) {\n const presentation = buildNotifyNotification(variant, {\n id: explicitId,\n title: typeof options.title === \"string\" ? options.title : undefined,\n // Message/action are composed by snackbarCompat for notistack content/action parity.\n message: typeof message === \"string\" ? message : \"\",\n withCloseButton,\n ...(autoClose === undefined ? {} : { autoClose }),\n });\n\n const id = notifications.show({\n ...presentation,\n title: options.title,\n message: renderedMessage,\n onClose,\n position: resolvePosition(options),\n style: options.style,\n });\n\n trackDuplicate(id, options, duplicateKey);\n return id;\n }\n\n const id = notifications.show({\n id: explicitId,\n title: options.title,\n message: renderedMessage,\n autoClose,\n withCloseButton,\n onClose,\n position: resolvePosition(options),\n style: options.style,\n });\n\n trackDuplicate(id, options, duplicateKey);\n return id;\n};\n\nexport const closeSnackbar = (id?: SnackbarKey) => {\n if (id === undefined) {\n for (const notificationId of duplicateKeysById.keys()) {\n instructedCloseIds.add(notificationId);\n }\n activeDuplicateKeys.clear();\n duplicateKeysById.clear();\n duplicateIdsByKey.clear();\n notifications.clean();\n return;\n }\n\n const resolvedId = String(id);\n instructedCloseIds.add(resolvedId);\n clearDuplicateId(resolvedId);\n notifications.hide(resolvedId);\n};\n\nexport const useSnackbar = () => ({\n closeSnackbar,\n enqueueSnackbar,\n});\n"],"names":["notify","id","createElement","Fragment","buildNotifyNotification","notifications"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"snackbarCompat.d.ts","sourceRoot":"","sources":["../src/snackbarCompat.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAA2B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGpF,KAAK,eAAe,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;AAC5E,KAAK,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;AACnC,KAAK,mBAAmB,GAAG,WAAW,GAAG,YAAY,GAAG,UAAU,GAAG,SAAS,CAAC;AAE/E,UAAU,eAAe;IACvB,MAAM,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC;IACvD,YAAY,CAAC,EAAE;QACb,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;QACzC,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;KAC7B,CAAC;IACF,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC;IAC5E,GAAG,CAAC,EAAE,WAAW,CAAC;IAClB,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,mBAAmB,EAAE,GAAG,CAAC,EAAE,WAAW,KAAK,IAAI,CAAC;IACrF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAkED,eAAO,MAAM,eAAe,GAAI,SAAS,SAAS,EAAE,UAAS,eAAoB,WAqDhF,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,KAAK,WAAW,SAgB7C,CAAC;AAEF,eAAO,MAAM,WAAW;yBAlBW,WAAW;+BAvDL,SAAS,YAAW,eAAe;CA4E1E,CAAC"}
1
+ {"version":3,"file":"snackbarCompat.d.ts","sourceRoot":"","sources":["../src/snackbarCompat.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAA2B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGpF,KAAK,eAAe,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;AAE5E,KAAK,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;AACnC,KAAK,mBAAmB,GAAG,WAAW,GAAG,YAAY,GAAG,UAAU,GAAG,SAAS,CAAC;AAE/E,UAAU,eAAe;IACvB,MAAM,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC;IACvD,YAAY,CAAC,EAAE;QACb,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;QACzC,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;KAC7B,CAAC;IACF,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC;IAC5E,GAAG,CAAC,EAAE,WAAW,CAAC;IAClB,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,mBAAmB,EAAE,GAAG,CAAC,EAAE,WAAW,KAAK,IAAI,CAAC;IACrF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAqGD,eAAO,MAAM,eAAe,GAAI,SAAS,SAAS,EAAE,UAAS,eAAoB,WA+FhF,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,KAAK,WAAW,SAgB7C,CAAC;AAEF,eAAO,MAAM,WAAW;yBAlBW,WAAW;+BAjGL,SAAS,YAAW,eAAe;CAsH1E,CAAC"}
@@ -1,13 +1,13 @@
1
1
  import { createElement, Fragment } from "react";
2
- import { colors } from "./theme/colors.js";
2
+ import { notify, buildNotifyNotification } from "./notify.js";
3
3
  import { notifications } from "./node_modules/@mantine/notifications/esm/notifications.store.js";
4
- const variantColorMap = {
5
- default: void 0,
6
- error: colors.error,
7
- info: colors.info,
8
- success: colors.success,
9
- warning: colors.warning
4
+ const semanticNotifyMethods = {
5
+ error: notify.error,
6
+ info: notify.info,
7
+ success: notify.success,
8
+ warning: notify.warning
10
9
  };
10
+ const isSemanticVariant = (variant) => variant !== "default";
11
11
  const resolveAutoClose = (options) => {
12
12
  if (options.persist || options.autoHideDuration === null) return false;
13
13
  return options.autoHideDuration;
@@ -18,6 +18,23 @@ const resolvePosition = (options) => {
18
18
  const horizontal = options.anchorOrigin?.horizontal;
19
19
  return `${vertical ?? "bottom"}-${horizontal ?? "left"}`;
20
20
  };
21
+ const resolveWithCloseButton = (options, action) => {
22
+ if (action !== void 0 && (options.persist || options.autoHideDuration === null)) {
23
+ return false;
24
+ }
25
+ return true;
26
+ };
27
+ const canRouteThroughNotify = (message, options) => {
28
+ if (!isSemanticVariant(options.variant ?? "default")) return false;
29
+ if (typeof message !== "string") return false;
30
+ if (options.title !== void 0 && typeof options.title !== "string") return false;
31
+ if (options.content !== void 0) return false;
32
+ if (options.style !== void 0) return false;
33
+ if (options.anchorOrigin !== void 0) return false;
34
+ if (options.onClose !== void 0) return false;
35
+ if (options.preventDuplicate) return false;
36
+ return true;
37
+ };
21
38
  let generatedSnackbarKey = 0;
22
39
  let generatedNodeDuplicateKey = 0;
23
40
  const activeDuplicateKeys = /* @__PURE__ */ new Set();
@@ -52,6 +69,13 @@ const clearDuplicateId = (id) => {
52
69
  const duplicateKey = duplicateKeysById.get(id);
53
70
  if (duplicateKey) clearDuplicateKey(duplicateKey);
54
71
  };
72
+ const trackDuplicate = (id, options, duplicateKey) => {
73
+ if (options.preventDuplicate) {
74
+ activeDuplicateKeys.add(duplicateKey);
75
+ duplicateKeysById.set(id, duplicateKey);
76
+ duplicateIdsByKey.set(duplicateKey, id);
77
+ }
78
+ };
55
79
  const enqueueSnackbar = (message, options = {}) => {
56
80
  const duplicateKey = createDuplicateKey(message, options);
57
81
  const needsStableKey = Boolean(options.action || options.content);
@@ -69,28 +93,61 @@ const enqueueSnackbar = (message, options = {}) => {
69
93
  const renderKey = explicitId ?? "";
70
94
  const action = typeof options.action === "function" ? options.action(renderKey) : options.action;
71
95
  const content = typeof options.content === "function" ? options.content(renderKey, message) : options.content;
96
+ const variant = options.variant ?? "default";
97
+ const autoClose = resolveAutoClose(options);
98
+ const withCloseButton = resolveWithCloseButton(options, action);
99
+ if (typeof message === "string" && canRouteThroughNotify(message, options) && isSemanticVariant(variant)) {
100
+ const notifyOptions = {
101
+ id: explicitId,
102
+ title: typeof options.title === "string" ? options.title : void 0,
103
+ message,
104
+ action,
105
+ withCloseButton,
106
+ ...autoClose === void 0 ? {} : { autoClose }
107
+ };
108
+ const id2 = semanticNotifyMethods[variant](notifyOptions);
109
+ trackDuplicate(id2, options, duplicateKey);
110
+ return id2;
111
+ }
72
112
  const renderedMessage = content ?? (action ? createElement(Fragment, null, message, action) : message);
113
+ const onClose = (notification) => {
114
+ const notificationId = String(notification?.id ?? explicitId ?? "");
115
+ const closeReason = notificationId && instructedCloseIds.has(notificationId) ? "instructed" : "timeout";
116
+ if (notificationId) instructedCloseIds.delete(notificationId);
117
+ if (options.preventDuplicate) clearDuplicateKey(duplicateKey);
118
+ options.onClose?.(void 0, closeReason, notification?.id ?? explicitId);
119
+ };
120
+ if (isSemanticVariant(variant)) {
121
+ const presentation = buildNotifyNotification(variant, {
122
+ id: explicitId,
123
+ title: typeof options.title === "string" ? options.title : void 0,
124
+ // Message/action are composed by snackbarCompat for notistack content/action parity.
125
+ message: typeof message === "string" ? message : "",
126
+ withCloseButton,
127
+ ...autoClose === void 0 ? {} : { autoClose }
128
+ });
129
+ const id2 = notifications.show({
130
+ ...presentation,
131
+ title: options.title,
132
+ message: renderedMessage,
133
+ onClose,
134
+ position: resolvePosition(options),
135
+ style: options.style
136
+ });
137
+ trackDuplicate(id2, options, duplicateKey);
138
+ return id2;
139
+ }
73
140
  const id = notifications.show({
74
141
  id: explicitId,
75
142
  title: options.title,
76
143
  message: renderedMessage,
77
- color: variantColorMap[options.variant ?? "default"],
78
- autoClose: resolveAutoClose(options),
79
- onClose: (notification) => {
80
- const notificationId = String(notification?.id ?? explicitId ?? "");
81
- const closeReason = notificationId && instructedCloseIds.has(notificationId) ? "instructed" : "timeout";
82
- if (notificationId) instructedCloseIds.delete(notificationId);
83
- if (options.preventDuplicate) clearDuplicateKey(duplicateKey);
84
- options.onClose?.(void 0, closeReason, notification?.id ?? explicitId);
85
- },
144
+ autoClose,
145
+ withCloseButton,
146
+ onClose,
86
147
  position: resolvePosition(options),
87
148
  style: options.style
88
149
  });
89
- if (options.preventDuplicate) {
90
- activeDuplicateKeys.add(duplicateKey);
91
- duplicateKeysById.set(id, duplicateKey);
92
- duplicateIdsByKey.set(duplicateKey, id);
93
- }
150
+ trackDuplicate(id, options, duplicateKey);
94
151
  return id;
95
152
  };
96
153
  const closeSnackbar = (id) => {
@@ -1 +1 @@
1
- {"version":3,"file":"snackbarCompat.js","sources":["../src/snackbarCompat.ts"],"sourcesContent":["import { notifications } from \"@mantine/notifications\";\nimport { type CSSProperties, createElement, Fragment, type ReactNode } from \"react\";\nimport { colors } from \"./theme/colors\";\n\ntype SnackbarVariant = \"default\" | \"error\" | \"info\" | \"success\" | \"warning\";\ntype SnackbarKey = string | number;\ntype SnackbarCloseReason = \"clickaway\" | \"instructed\" | \"maxsnack\" | \"timeout\";\n\ninterface SnackbarOptions {\n action?: ReactNode | ((key: SnackbarKey) => ReactNode);\n anchorOrigin?: {\n horizontal?: \"center\" | \"left\" | \"right\";\n vertical?: \"bottom\" | \"top\";\n };\n autoHideDuration?: number | null;\n content?: ReactNode | ((key: SnackbarKey, message: ReactNode) => ReactNode);\n key?: SnackbarKey;\n onClose?: (event?: unknown, reason?: SnackbarCloseReason, key?: SnackbarKey) => void;\n persist?: boolean;\n preventDuplicate?: boolean;\n style?: CSSProperties;\n title?: ReactNode;\n variant?: SnackbarVariant;\n [key: string]: unknown;\n}\n\nconst variantColorMap: Record<SnackbarVariant, string | undefined> = {\n default: undefined,\n error: colors.error,\n info: colors.info,\n success: colors.success,\n warning: colors.warning,\n};\n\nconst resolveAutoClose = (options: SnackbarOptions) => {\n if (options.persist || options.autoHideDuration === null) return false;\n return options.autoHideDuration;\n};\n\nconst resolvePosition = (options: SnackbarOptions) => {\n if (!options.anchorOrigin) return undefined;\n\n const vertical = options.anchorOrigin?.vertical;\n const horizontal = options.anchorOrigin?.horizontal;\n\n return `${vertical ?? \"bottom\"}-${horizontal ?? \"left\"}` as const;\n};\n\nlet generatedSnackbarKey = 0;\nlet generatedNodeDuplicateKey = 0;\nconst activeDuplicateKeys = new Set<string>();\nconst duplicateKeysById = new Map<string, string>();\nconst duplicateIdsByKey = new Map<string, string>();\nconst instructedCloseIds = new Set<string>();\nconst nodeDuplicateKeys = new WeakMap<object, string>();\n\nconst createDuplicatePart = (value: ReactNode, part: string) => {\n if ((typeof value === \"object\" || typeof value === \"function\") && value !== null) {\n const keyTarget = value as object;\n const existingKey = nodeDuplicateKeys.get(keyTarget);\n if (existingKey) return existingKey;\n\n generatedNodeDuplicateKey += 1;\n const nextKey = `${part}:node-${generatedNodeDuplicateKey}`;\n nodeDuplicateKeys.set(keyTarget, nextKey);\n return nextKey;\n }\n\n return `${part}:primitive:${String(value ?? \"\")}`;\n};\n\nconst createDuplicateKey = (message: ReactNode, options: SnackbarOptions) =>\n [\n options.variant ?? \"default\",\n createDuplicatePart(options.title, \"title\"),\n createDuplicatePart(message, \"message\"),\n ].join(\":\");\n\nconst clearDuplicateKey = (duplicateKey: string) => {\n const id = duplicateIdsByKey.get(duplicateKey);\n activeDuplicateKeys.delete(duplicateKey);\n duplicateIdsByKey.delete(duplicateKey);\n if (id) duplicateKeysById.delete(id);\n};\n\nconst clearDuplicateId = (id: string) => {\n const duplicateKey = duplicateKeysById.get(id);\n if (duplicateKey) clearDuplicateKey(duplicateKey);\n};\n\nexport const enqueueSnackbar = (message: ReactNode, options: SnackbarOptions = {}) => {\n const duplicateKey = createDuplicateKey(message, options);\n const needsStableKey = Boolean(options.action || options.content);\n if (options.key === undefined && needsStableKey) {\n generatedSnackbarKey += 1;\n }\n const explicitId =\n options.key === undefined\n ? needsStableKey\n ? `snackbar-${generatedSnackbarKey}`\n : undefined\n : String(options.key);\n const previousDuplicateKey = explicitId ? duplicateKeysById.get(explicitId) : undefined;\n if (explicitId && previousDuplicateKey && previousDuplicateKey !== duplicateKey) {\n clearDuplicateId(explicitId);\n }\n\n if (options.preventDuplicate && activeDuplicateKeys.has(duplicateKey)) {\n return duplicateIdsByKey.get(duplicateKey) ?? duplicateKey;\n }\n\n const renderKey = explicitId ?? \"\";\n const action = typeof options.action === \"function\" ? options.action(renderKey) : options.action;\n const content =\n typeof options.content === \"function\" ? options.content(renderKey, message) : options.content;\n const renderedMessage =\n content ?? (action ? createElement(Fragment, null, message, action) : message);\n\n const id = notifications.show({\n id: explicitId,\n title: options.title,\n message: renderedMessage,\n color: variantColorMap[options.variant ?? \"default\"],\n autoClose: resolveAutoClose(options),\n onClose: (notification) => {\n const notificationId = String(notification?.id ?? explicitId ?? \"\");\n const closeReason =\n notificationId && instructedCloseIds.has(notificationId) ? \"instructed\" : \"timeout\";\n if (notificationId) instructedCloseIds.delete(notificationId);\n if (options.preventDuplicate) clearDuplicateKey(duplicateKey);\n options.onClose?.(undefined, closeReason, notification?.id ?? explicitId);\n },\n position: resolvePosition(options),\n style: options.style,\n });\n\n if (options.preventDuplicate) {\n activeDuplicateKeys.add(duplicateKey);\n duplicateKeysById.set(id, duplicateKey);\n duplicateIdsByKey.set(duplicateKey, id);\n }\n\n return id;\n};\n\nexport const closeSnackbar = (id?: SnackbarKey) => {\n if (id === undefined) {\n for (const notificationId of duplicateKeysById.keys()) {\n instructedCloseIds.add(notificationId);\n }\n activeDuplicateKeys.clear();\n duplicateKeysById.clear();\n duplicateIdsByKey.clear();\n notifications.clean();\n return;\n }\n\n const resolvedId = String(id);\n instructedCloseIds.add(resolvedId);\n clearDuplicateId(resolvedId);\n notifications.hide(resolvedId);\n};\n\nexport const useSnackbar = () => ({\n closeSnackbar,\n enqueueSnackbar,\n});\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"snackbarCompat.js","sources":["../src/snackbarCompat.ts"],"sourcesContent":["import { notifications } from \"@mantine/notifications\";\nimport { type CSSProperties, createElement, Fragment, type ReactNode } from \"react\";\nimport { buildNotifyNotification, notify } from \"./notify\";\n\ntype SnackbarVariant = \"default\" | \"error\" | \"info\" | \"success\" | \"warning\";\ntype SemanticSnackbarVariant = Exclude<SnackbarVariant, \"default\">;\ntype SnackbarKey = string | number;\ntype SnackbarCloseReason = \"clickaway\" | \"instructed\" | \"maxsnack\" | \"timeout\";\n\ninterface SnackbarOptions {\n action?: ReactNode | ((key: SnackbarKey) => ReactNode);\n anchorOrigin?: {\n horizontal?: \"center\" | \"left\" | \"right\";\n vertical?: \"bottom\" | \"top\";\n };\n autoHideDuration?: number | null;\n content?: ReactNode | ((key: SnackbarKey, message: ReactNode) => ReactNode);\n key?: SnackbarKey;\n onClose?: (event?: unknown, reason?: SnackbarCloseReason, key?: SnackbarKey) => void;\n persist?: boolean;\n preventDuplicate?: boolean;\n style?: CSSProperties;\n title?: ReactNode;\n variant?: SnackbarVariant;\n [key: string]: unknown;\n}\n\nconst semanticNotifyMethods = {\n error: notify.error,\n info: notify.info,\n success: notify.success,\n warning: notify.warning,\n} as const;\n\nconst isSemanticVariant = (variant: SnackbarVariant): variant is SemanticSnackbarVariant =>\n variant !== \"default\";\n\nconst resolveAutoClose = (options: SnackbarOptions): number | false | undefined => {\n if (options.persist || options.autoHideDuration === null) return false;\n return options.autoHideDuration;\n};\n\nconst resolvePosition = (options: SnackbarOptions) => {\n if (!options.anchorOrigin) return undefined;\n\n const vertical = options.anchorOrigin?.vertical;\n const horizontal = options.anchorOrigin?.horizontal;\n\n return `${vertical ?? \"bottom\"}-${horizontal ?? \"left\"}` as const;\n};\n\nconst resolveWithCloseButton = (options: SnackbarOptions, action: ReactNode | undefined) => {\n // Persist + custom action often ships its own dismiss control — avoid a double close affordance.\n if (action !== undefined && (options.persist || options.autoHideDuration === null)) {\n return false;\n }\n return true;\n};\n\n/**\n * Simple semantic snackbars can use the public notify helpers directly.\n * Complex notistack features keep a hybrid notifications.show path that still\n * applies Notify chrome (icon, withBorder, semantic color).\n */\nconst canRouteThroughNotify = (message: ReactNode, options: SnackbarOptions) => {\n if (!isSemanticVariant(options.variant ?? \"default\")) return false;\n if (typeof message !== \"string\") return false;\n if (options.title !== undefined && typeof options.title !== \"string\") return false;\n if (options.content !== undefined) return false;\n if (options.style !== undefined) return false;\n if (options.anchorOrigin !== undefined) return false;\n if (options.onClose !== undefined) return false;\n if (options.preventDuplicate) return false;\n return true;\n};\n\nlet generatedSnackbarKey = 0;\nlet generatedNodeDuplicateKey = 0;\nconst activeDuplicateKeys = new Set<string>();\nconst duplicateKeysById = new Map<string, string>();\nconst duplicateIdsByKey = new Map<string, string>();\nconst instructedCloseIds = new Set<string>();\nconst nodeDuplicateKeys = new WeakMap<object, string>();\n\nconst createDuplicatePart = (value: ReactNode, part: string) => {\n if ((typeof value === \"object\" || typeof value === \"function\") && value !== null) {\n const keyTarget = value as object;\n const existingKey = nodeDuplicateKeys.get(keyTarget);\n if (existingKey) return existingKey;\n\n generatedNodeDuplicateKey += 1;\n const nextKey = `${part}:node-${generatedNodeDuplicateKey}`;\n nodeDuplicateKeys.set(keyTarget, nextKey);\n return nextKey;\n }\n\n return `${part}:primitive:${String(value ?? \"\")}`;\n};\n\nconst createDuplicateKey = (message: ReactNode, options: SnackbarOptions) =>\n [\n options.variant ?? \"default\",\n createDuplicatePart(options.title, \"title\"),\n createDuplicatePart(message, \"message\"),\n ].join(\":\");\n\nconst clearDuplicateKey = (duplicateKey: string) => {\n const id = duplicateIdsByKey.get(duplicateKey);\n activeDuplicateKeys.delete(duplicateKey);\n duplicateIdsByKey.delete(duplicateKey);\n if (id) duplicateKeysById.delete(id);\n};\n\nconst clearDuplicateId = (id: string) => {\n const duplicateKey = duplicateKeysById.get(id);\n if (duplicateKey) clearDuplicateKey(duplicateKey);\n};\n\nconst trackDuplicate = (id: string, options: SnackbarOptions, duplicateKey: string) => {\n if (options.preventDuplicate) {\n activeDuplicateKeys.add(duplicateKey);\n duplicateKeysById.set(id, duplicateKey);\n duplicateIdsByKey.set(duplicateKey, id);\n }\n};\n\nexport const enqueueSnackbar = (message: ReactNode, options: SnackbarOptions = {}) => {\n const duplicateKey = createDuplicateKey(message, options);\n const needsStableKey = Boolean(options.action || options.content);\n if (options.key === undefined && needsStableKey) {\n generatedSnackbarKey += 1;\n }\n const explicitId =\n options.key === undefined\n ? needsStableKey\n ? `snackbar-${generatedSnackbarKey}`\n : undefined\n : String(options.key);\n const previousDuplicateKey = explicitId ? duplicateKeysById.get(explicitId) : undefined;\n if (explicitId && previousDuplicateKey && previousDuplicateKey !== duplicateKey) {\n clearDuplicateId(explicitId);\n }\n\n if (options.preventDuplicate && activeDuplicateKeys.has(duplicateKey)) {\n return duplicateIdsByKey.get(duplicateKey) ?? duplicateKey;\n }\n\n const renderKey = explicitId ?? \"\";\n const action = typeof options.action === \"function\" ? options.action(renderKey) : options.action;\n const content =\n typeof options.content === \"function\" ? options.content(renderKey, message) : options.content;\n const variant = options.variant ?? \"default\";\n const autoClose = resolveAutoClose(options);\n const withCloseButton = resolveWithCloseButton(options, action);\n\n if (\n typeof message === \"string\" &&\n canRouteThroughNotify(message, options) &&\n isSemanticVariant(variant)\n ) {\n const notifyOptions = {\n id: explicitId,\n title: typeof options.title === \"string\" ? options.title : undefined,\n message,\n action,\n withCloseButton,\n ...(autoClose === undefined ? {} : { autoClose }),\n };\n const id = semanticNotifyMethods[variant](notifyOptions);\n trackDuplicate(id, options, duplicateKey);\n return id;\n }\n\n const renderedMessage =\n content ?? (action ? createElement(Fragment, null, message, action) : message);\n\n const onClose = (notification: { id?: string } | undefined) => {\n const notificationId = String(notification?.id ?? explicitId ?? \"\");\n const closeReason =\n notificationId && instructedCloseIds.has(notificationId) ? \"instructed\" : \"timeout\";\n if (notificationId) instructedCloseIds.delete(notificationId);\n if (options.preventDuplicate) clearDuplicateKey(duplicateKey);\n options.onClose?.(undefined, closeReason, notification?.id ?? explicitId);\n };\n\n if (isSemanticVariant(variant)) {\n const presentation = buildNotifyNotification(variant, {\n id: explicitId,\n title: typeof options.title === \"string\" ? options.title : undefined,\n // Message/action are composed by snackbarCompat for notistack content/action parity.\n message: typeof message === \"string\" ? message : \"\",\n withCloseButton,\n ...(autoClose === undefined ? {} : { autoClose }),\n });\n\n const id = notifications.show({\n ...presentation,\n title: options.title,\n message: renderedMessage,\n onClose,\n position: resolvePosition(options),\n style: options.style,\n });\n\n trackDuplicate(id, options, duplicateKey);\n return id;\n }\n\n const id = notifications.show({\n id: explicitId,\n title: options.title,\n message: renderedMessage,\n autoClose,\n withCloseButton,\n onClose,\n position: resolvePosition(options),\n style: options.style,\n });\n\n trackDuplicate(id, options, duplicateKey);\n return id;\n};\n\nexport const closeSnackbar = (id?: SnackbarKey) => {\n if (id === undefined) {\n for (const notificationId of duplicateKeysById.keys()) {\n instructedCloseIds.add(notificationId);\n }\n activeDuplicateKeys.clear();\n duplicateKeysById.clear();\n duplicateIdsByKey.clear();\n notifications.clean();\n return;\n }\n\n const resolvedId = String(id);\n instructedCloseIds.add(resolvedId);\n clearDuplicateId(resolvedId);\n notifications.hide(resolvedId);\n};\n\nexport const useSnackbar = () => ({\n closeSnackbar,\n enqueueSnackbar,\n});\n"],"names":["id"],"mappings":"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"}
@@ -77,6 +77,18 @@ const charcoalDark = {
77
77
  infoText: "#22CCEE",
78
78
  infoBorder: "#23476B"
79
79
  };
80
+ const mantineDark = [
81
+ charcoalDark.textPrimary,
82
+ darkNeutral[1],
83
+ darkNeutral[2],
84
+ charcoalDark.textSecondary,
85
+ charcoalDark.border,
86
+ charcoalDark.control,
87
+ charcoalDark.surface,
88
+ charcoalDark.canvas,
89
+ charcoalDark.canvas,
90
+ charcoalDark.canvas
91
+ ];
80
92
  const fairmintBlue = [
81
93
  "#e6f0ff",
82
94
  "#cce0ff",
@@ -153,6 +165,28 @@ const typography = {
153
165
  fontFamily: '"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"',
154
166
  headingFontFamily: '"Plus Jakarta Sans", sans-serif'
155
167
  };
168
+ const notificationToneStyles = {
169
+ success: {
170
+ bg: "var(--fairmint-color-success-bg)",
171
+ border: "var(--fairmint-color-success-border)",
172
+ text: "var(--fairmint-color-success-text)"
173
+ },
174
+ error: {
175
+ bg: "var(--fairmint-color-error-bg)",
176
+ border: "var(--fairmint-color-error-border)",
177
+ text: "var(--fairmint-color-error-text)"
178
+ },
179
+ warning: {
180
+ bg: "var(--fairmint-color-warning-bg)",
181
+ border: "var(--fairmint-color-warning-border)",
182
+ text: "var(--fairmint-color-warning-text)"
183
+ },
184
+ info: {
185
+ bg: "var(--fairmint-color-info-bg)",
186
+ border: "var(--fairmint-color-info-border)",
187
+ text: "var(--fairmint-color-info-text)"
188
+ }
189
+ };
156
190
  const theme = createTheme.createTheme({
157
191
  primaryColor: "indigo",
158
192
  // Mantine defaults to a darker shade for dark-mode filled/light variants
@@ -164,6 +198,7 @@ const theme = createTheme.createTheme({
164
198
  colors: {
165
199
  indigo,
166
200
  gray: neutral,
201
+ dark: mantineDark,
167
202
  darkGray: darkNeutral,
168
203
  fairmintBlue,
169
204
  fairmintPurple,
@@ -216,11 +251,21 @@ const theme = createTheme.createTheme({
216
251
  padding: "lg",
217
252
  radius: "xl",
218
253
  withBorder: true
254
+ },
255
+ styles: {
256
+ root: {
257
+ backgroundColor: "var(--fairmint-color-bg-surface, #ffffff)",
258
+ borderColor: `var(--fairmint-color-border-default, ${neutral[2]})`
259
+ }
219
260
  }
220
261
  },
221
262
  Paper: {
222
263
  styles: {
223
- root: { backgroundImage: "none" }
264
+ root: {
265
+ backgroundColor: "var(--fairmint-color-bg-surface, #ffffff)",
266
+ backgroundImage: "none",
267
+ borderColor: `var(--fairmint-color-border-default, ${neutral[2]})`
268
+ }
224
269
  }
225
270
  },
226
271
  Table: {
@@ -241,6 +286,56 @@ const theme = createTheme.createTheme({
241
286
  lineHeight: 1.3
242
287
  }
243
288
  }
289
+ },
290
+ // Toasts: Ramp-inspired restraint — single-layer subtle elevation (lighter
291
+ // than Mantine shadow-xs) + 1px semantic border (override shadow-lg / filled
292
+ // icon). Semantic variants use *-bg (light = ramp /50 / tuple[0]; dark =
293
+ // approved charcoal semantic surfaces) with matching border/text/icon tokens.
294
+ // Neutral/default (no color) stays on the standard surface.
295
+ // Horizontal padding is symmetric spacing.md (16px): Mantine defaults to
296
+ // 22px start (accent rail) vs spacing.xs end (~10px); Fairmint toasts use
297
+ // outlined icons (rail hidden), so match left/right on the spacing scale.
298
+ Notification: {
299
+ styles: (_theme, params) => {
300
+ const tone = notificationToneStyles[params.color ?? ""];
301
+ const rootPadding = {
302
+ paddingInlineStart: spacing.spacing.md,
303
+ paddingInlineEnd: spacing.spacing.md
304
+ };
305
+ if (!tone) {
306
+ return {
307
+ root: {
308
+ boxShadow: "var(--fairmint-elevation-subtle)",
309
+ ...rootPadding
310
+ },
311
+ icon: {
312
+ backgroundColor: "transparent",
313
+ color: "var(--notification-color)"
314
+ }
315
+ };
316
+ }
317
+ return {
318
+ root: {
319
+ boxShadow: "var(--fairmint-elevation-subtle)",
320
+ backgroundColor: tone.bg,
321
+ border: `1px solid ${tone.border}`,
322
+ ...rootPadding
323
+ },
324
+ title: {
325
+ color: tone.text
326
+ },
327
+ description: {
328
+ color: tone.text
329
+ },
330
+ icon: {
331
+ backgroundColor: "transparent",
332
+ color: tone.text
333
+ },
334
+ closeButton: {
335
+ color: tone.text
336
+ }
337
+ };
338
+ }
244
339
  }
245
340
  }
246
341
  });
@@ -283,6 +378,8 @@ const fairmintCssVariables = () => ({
283
378
  "--fairmint-color-surface-selected": indigo[0],
284
379
  "--fairmint-color-icon-on-surface-selected": indigo[6],
285
380
  "--fairmint-interactive-hover-shadow": `0 2px 6px ${neutral[9]}0F`,
381
+ // Single soft layer — lighter than Mantine shadow-xs (no multi-layer stack).
382
+ "--fairmint-elevation-subtle": `0 1px 3px ${neutral[9]}06`,
286
383
  "--fairmint-interactive-hover-bg": neutral[0],
287
384
  "--fairmint-color-success-bg": success[0],
288
385
  "--fairmint-color-success-text": success[7],
@@ -342,6 +439,8 @@ const fairmintCssVariables = () => ({
342
439
  // dark selected surface — use a light indigo instead.
343
440
  "--fairmint-color-icon-on-surface-selected": indigo[2],
344
441
  "--fairmint-interactive-hover-shadow": "0 2px 6px #00000066",
442
+ // Single soft layer — restrained vs hover shadow and Mantine shadow-xs.
443
+ "--fairmint-elevation-subtle": "0 1px 3px #00000014",
345
444
  "--fairmint-interactive-hover-bg": charcoalDark.surface,
346
445
  "--fairmint-color-success-bg": charcoalDark.successBg,
347
446
  "--fairmint-color-success-text": charcoalDark.successText,
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/theme/index.ts"],"sourcesContent":["import { type CSSVariablesResolver, createTheme, type MantineColorsTuple } from \"@mantine/core\";\nimport { fontSizes } from \"./fontSizes\";\nimport { spacing } from \"./spacing\";\n\n/**\n * Fairmint radius scale — single source of truth used by both the Mantine\n * theme config and the exported `radii` constant. Edit here; both stay in sync.\n */\nexport const radii = {\n xs: \"0.25rem\",\n sm: \"0.375rem\",\n md: \"0.5rem\",\n lg: \"0.75rem\",\n xl: \"1rem\",\n} as const;\n\n/**\n * Indigo palette — primary UI color.\n * Used for buttons, links, active navigation, focus rings.\n * Shade [5] (#6366F1) is the default primary.\n */\nconst indigo: MantineColorsTuple = [\n \"#EEF2FF\",\n \"#E0E7FF\",\n \"#C7D2FE\",\n \"#A5B4FC\",\n \"#818CF8\",\n \"#6366F1\",\n \"#4F46E5\",\n \"#4338CA\",\n \"#3730A3\",\n \"#253974\",\n];\n\n/**\n * Neutral scale — replaces Mantine's default gray.\n * Used for text, borders, backgrounds, disabled states.\n */\nconst neutral: MantineColorsTuple = [\n \"#F8F9FA\",\n \"#F3F4F6\",\n \"#E5E7EB\",\n \"#D2D6DB\",\n \"#9DA4AE\",\n \"#6C737F\",\n \"#4D5761\",\n \"#2F3746\",\n \"#1C2536\",\n \"#111927\",\n];\n\n/**\n * Dark-mode neutral ramp — the dark surface and text anchors used by Chip.\n * Keep these separate from the light neutral ramp so Light mode remains stable.\n */\nconst darkNeutral: MantineColorsTuple = [\n \"#FFFFFF\",\n \"#E7E9F0\",\n \"#B8C2D0\",\n \"#9DA4AE\",\n \"#8F99AB\",\n \"#6C737F\",\n \"#2F3746\",\n \"#1B1D21\",\n \"#17191D\",\n \"#111214\",\n];\n\n/**\n * Approved charcoal dark-mode roles from the onboarding source of truth.\n * Keep these semantic values explicit instead of deriving them from the\n * light neutral ramp so component behavior stays aligned with Figma.\n */\nconst charcoalDark = {\n canvas: \"#111214\",\n surface: \"#17191D\",\n chrome: \"#1B1D21\",\n control: \"#202329\",\n selected: \"#2F3746\",\n brandSubtle: \"#111927\",\n textPrimary: \"#FFFFFF\",\n textSecondary: \"#9DA4AE\",\n textTertiary: \"#8F99AB\",\n textDisabled: \"#6C737F\",\n iconSecondary: \"#B8C2D0\",\n border: \"#2F3746\",\n focus: \"#A5B4FC\",\n primary: \"#6366F1\",\n primaryHover: \"#818CF8\",\n primaryActive: \"#A5B4FC\",\n successBg: \"#163E38\",\n successText: \"#6FE3BE\",\n successBorder: \"#2F3746\",\n successSolid: \"#34D399\",\n successSolidHover: \"#6FE3BE\",\n warningBg: \"#402A12\",\n warningText: \"#FDB022\",\n warningBorder: \"#6E4515\",\n warningSolid: \"#DC6803\",\n warningSolidHover: \"#E5A34A\",\n infoBg: \"#172B45\",\n infoText: \"#22CCEE\",\n infoBorder: \"#23476B\",\n} as const;\n\n/**\n * Fairmint brand blue — accent color for gradients and brand elements.\n * Shade [5] (#0A4EFB) is the primary brand blue.\n *\n * This is the current production value documented in design/DESIGN.md.\n */\nconst fairmintBlue: MantineColorsTuple = [\n \"#e6f0ff\",\n \"#cce0ff\",\n \"#99c2ff\",\n \"#66a3ff\",\n \"#3385ff\",\n \"#0A4EFB\",\n \"#083ec9\",\n \"#062e97\",\n \"#041f64\",\n \"#020f32\",\n];\n\n/**\n * Fairmint brand purple — accent color for gradients and brand elements.\n * Shade [5] (#9E03FF) is the primary brand purple.\n *\n * This is the current production value documented in design/DESIGN.md.\n */\nconst fairmintPurple: MantineColorsTuple = [\n \"#f5e6ff\",\n \"#e6ccff\",\n \"#cc99ff\",\n \"#b366ff\",\n \"#9933ff\",\n \"#9E03FF\",\n \"#7e02cc\",\n \"#5f0299\",\n \"#3f0166\",\n \"#200133\",\n];\n\nconst success: MantineColorsTuple = [\n \"#F0FDF9\",\n \"#D1FAE5\",\n \"#A7F3D0\",\n \"#6EE7B7\",\n \"#34D399\",\n \"#10B981\",\n \"#059669\",\n \"#047857\",\n \"#065F46\",\n \"#134E48\",\n];\n\nconst warning: MantineColorsTuple = [\n \"#FFFAEB\",\n \"#FEF0C7\",\n \"#FEDF89\",\n \"#FEC84B\",\n \"#FDB022\",\n \"#F79009\",\n \"#DC6803\",\n \"#B54708\",\n \"#93370D\",\n \"#7A2E0E\",\n];\n\nconst error: MantineColorsTuple = [\n \"#FEF3F2\",\n \"#FEE4E2\",\n \"#FECDCA\",\n \"#FDA29B\",\n \"#F97066\",\n \"#F04438\",\n \"#D92D20\",\n \"#B42318\",\n \"#912018\",\n \"#7A271A\",\n];\n\nconst info: MantineColorsTuple = [\n \"#ECFDFF\",\n \"#CFF9FE\",\n \"#A5F0FC\",\n \"#67E3F9\",\n \"#22CCEE\",\n \"#06AED4\",\n \"#088AB2\",\n \"#0E7090\",\n \"#155B75\",\n \"#164C63\",\n];\n\n/**\n * Typography constants — single source of truth for font families.\n * Use these instead of var(--mantine-font-family-*) in component code.\n * Declared before createTheme so the theme itself references them.\n */\nexport const typography = {\n fontFamily:\n '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\"',\n headingFontFamily: '\"Plus Jakarta Sans\", sans-serif',\n} as const;\n\nexport const theme = createTheme({\n primaryColor: \"indigo\",\n // Mantine defaults to a darker shade for dark-mode filled/light variants\n // (primaryShade: { light: 6, dark: 8 }), but our brand indigo (index 5,\n // #6366F1) is the same accent in both color schemes — pin a single shade\n // so unwrapped Mantine components (color=\"indigo\") don't drift into a\n // different, more saturated purple in dark mode.\n primaryShade: 5,\n colors: {\n indigo,\n gray: neutral,\n darkGray: darkNeutral,\n fairmintBlue,\n fairmintPurple,\n success,\n warning,\n error,\n info,\n },\n\n fontFamily: typography.fontFamily,\n headings: {\n fontFamily: typography.headingFontFamily,\n fontWeight: \"700\",\n },\n\n radius: radii,\n defaultRadius: \"md\",\n spacing,\n fontSizes: {\n xs: fontSizes.xs,\n sm: fontSizes.sm,\n md: fontSizes.md,\n lg: fontSizes.lg,\n xl: fontSizes.xl,\n },\n\n breakpoints: {\n xs: \"30em\",\n sm: \"48em\",\n md: \"64em\",\n lg: \"74em\",\n xl: \"90em\",\n },\n\n components: {\n Button: {\n defaultProps: { size: \"md\" },\n styles: {\n root: {\n fontWeight: 600,\n borderRadius: \"0.75rem\",\n textTransform: \"none\" as const,\n },\n },\n },\n Input: {\n classNames: { input: \"fairmint-input\" },\n },\n TextInput: {\n defaultProps: { size: \"md\" },\n },\n Card: {\n defaultProps: {\n padding: \"lg\",\n radius: \"xl\",\n withBorder: true,\n },\n },\n Paper: {\n styles: {\n root: { backgroundImage: \"none\" },\n },\n },\n Table: {\n styles: {\n thead: {\n fontSize: \"0.75rem\",\n fontWeight: 600,\n letterSpacing: \"0.5px\",\n textTransform: \"uppercase\" as const,\n },\n },\n },\n Modal: {\n styles: {\n title: {\n fontSize: fontSizes.lg,\n fontWeight: 700,\n lineHeight: 1.3,\n },\n },\n },\n },\n});\n\n/**\n * Fairmint CSS variables resolver for MantineProvider.\n * Publishes --fairmint-* custom properties so components never reference\n * --mantine-* variables directly. All light/dark switching is centralised here.\n */\nexport const fairmintCssVariables: CSSVariablesResolver = () => ({\n variables: {\n \"--fairmint-font-headings\": typography.headingFontFamily,\n \"--fairmint-font-body\": typography.fontFamily,\n \"--fairmint-interactive-focus-ring\": indigo[5],\n },\n light: {\n \"--fairmint-interactive-focus-ring\": indigo[5],\n \"--fairmint-color-bg-canvas\": commonColors.white,\n \"--fairmint-color-bg-surface\": commonColors.white,\n \"--fairmint-color-bg-surface-secondary\": neutral[0],\n \"--fairmint-color-bg-hover\": neutral[0],\n \"--fairmint-color-bg-selected\": indigo[0],\n \"--fairmint-color-bg-brand-subtle\": indigo[0],\n \"--fairmint-color-bg-brand-subtle-hover\": indigo[1],\n \"--fairmint-color-bg-disabled\": neutral[2],\n \"--fairmint-watermark-color\": neutral[1],\n \"--fairmint-color-text-primary\": neutral[9],\n \"--fairmint-color-text-secondary\": neutral[5],\n \"--fairmint-color-text-tertiary\": neutral[4],\n \"--fairmint-color-text-inverse\": commonColors.white,\n \"--fairmint-color-text-disabled\": neutral[6],\n \"--fairmint-color-icon-primary\": neutral[9],\n \"--fairmint-color-icon-secondary\": neutral[5],\n \"--fairmint-color-icon-tertiary\": neutral[4],\n \"--fairmint-color-icon-inverse\": commonColors.white,\n \"--fairmint-color-icon-disabled\": neutral[6],\n \"--fairmint-color-border-default\": neutral[2],\n \"--fairmint-color-border-focus\": indigo[5],\n \"--fairmint-color-border-disabled\": neutral[3],\n \"--fairmint-color-brand-primary\": indigo[6],\n \"--fairmint-color-brand-primary-hover\": indigo[7],\n \"--fairmint-color-brand-primary-active\": indigo[7],\n \"--fairmint-color-brand-blue\": fairmintBlue[5],\n \"--fairmint-color-brand-purple\": fairmintPurple[5],\n \"--fairmint-color-watermark\": neutral[1],\n \"--fairmint-color-surface-selected\": indigo[0],\n \"--fairmint-color-icon-on-surface-selected\": indigo[6],\n \"--fairmint-interactive-hover-shadow\": `0 2px 6px ${neutral[9]}0F`,\n \"--fairmint-interactive-hover-bg\": neutral[0],\n \"--fairmint-color-success-bg\": success[0],\n \"--fairmint-color-success-text\": success[7],\n \"--fairmint-color-success-border\": success[2],\n \"--fairmint-color-success-solid\": success[7],\n \"--fairmint-color-success-solid-hover\": success[7],\n \"--fairmint-color-warning-bg\": warning[0],\n \"--fairmint-color-warning-text\": warning[7],\n \"--fairmint-color-warning-border\": warning[2],\n \"--fairmint-color-warning-solid\": warning[7],\n \"--fairmint-color-warning-solid-hover\": warning[7],\n \"--fairmint-color-error-bg\": error[0],\n \"--fairmint-color-error-bg-subtle\": error[1],\n \"--fairmint-color-error-text\": error[7],\n \"--fairmint-color-error-border\": error[2],\n \"--fairmint-color-error-solid\": error[7],\n \"--fairmint-color-error-solid-hover\": error[8],\n \"--fairmint-color-error-solid-muted\": error[4],\n \"--fairmint-color-info-bg\": info[0],\n \"--fairmint-color-info-text\": info[7],\n \"--fairmint-color-info-border\": info[2],\n \"--fairmint-color-info-solid\": info[7],\n \"--fairmint-color-info-solid-hover\": info[7],\n },\n dark: {\n \"--fairmint-interactive-focus-ring\": charcoalDark.focus,\n \"--fairmint-color-bg-canvas\": charcoalDark.canvas,\n \"--fairmint-color-bg-surface\": charcoalDark.surface,\n \"--fairmint-color-bg-surface-secondary\": charcoalDark.chrome,\n \"--fairmint-color-bg-hover\": charcoalDark.control,\n \"--fairmint-color-bg-selected\": charcoalDark.selected,\n \"--fairmint-color-bg-brand-subtle\": charcoalDark.brandSubtle,\n \"--fairmint-color-bg-brand-subtle-hover\": charcoalDark.control,\n \"--fairmint-color-bg-disabled\": charcoalDark.control,\n \"--fairmint-watermark-color\": charcoalDark.control,\n \"--fairmint-color-text-primary\": charcoalDark.textPrimary,\n \"--fairmint-color-text-secondary\": charcoalDark.textSecondary,\n \"--fairmint-color-text-tertiary\": charcoalDark.textTertiary,\n \"--fairmint-color-text-inverse\": neutral[9],\n \"--fairmint-color-text-disabled\": charcoalDark.textDisabled,\n \"--fairmint-color-icon-primary\": charcoalDark.textPrimary,\n \"--fairmint-color-icon-secondary\": charcoalDark.iconSecondary,\n \"--fairmint-color-icon-tertiary\": charcoalDark.textTertiary,\n \"--fairmint-color-icon-inverse\": charcoalDark.textPrimary,\n \"--fairmint-color-icon-disabled\": charcoalDark.textDisabled,\n \"--fairmint-color-border-default\": charcoalDark.border,\n \"--fairmint-color-border-focus\": charcoalDark.focus,\n \"--fairmint-color-border-disabled\": charcoalDark.border,\n \"--fairmint-color-brand-primary\": charcoalDark.primary,\n \"--fairmint-color-brand-primary-hover\": charcoalDark.primaryHover,\n \"--fairmint-color-brand-primary-active\": charcoalDark.primaryActive,\n \"--fairmint-color-brand-blue\": fairmintBlue[5],\n \"--fairmint-color-brand-purple\": fairmintPurple[5],\n \"--fairmint-color-watermark\": charcoalDark.control,\n \"--fairmint-color-surface-selected\": charcoalDark.selected,\n // indigo[6] (the light-mode value) is too dark to read against the\n // dark selected surface — use a light indigo instead.\n \"--fairmint-color-icon-on-surface-selected\": indigo[2],\n \"--fairmint-interactive-hover-shadow\": \"0 2px 6px #00000066\",\n \"--fairmint-interactive-hover-bg\": charcoalDark.surface,\n \"--fairmint-color-success-bg\": charcoalDark.successBg,\n \"--fairmint-color-success-text\": charcoalDark.successText,\n \"--fairmint-color-success-border\": charcoalDark.successBorder,\n \"--fairmint-color-success-solid\": charcoalDark.successSolid,\n \"--fairmint-color-success-solid-hover\": charcoalDark.successSolidHover,\n \"--fairmint-color-warning-bg\": charcoalDark.warningBg,\n \"--fairmint-color-warning-text\": charcoalDark.warningText,\n \"--fairmint-color-warning-border\": charcoalDark.warningBorder,\n \"--fairmint-color-warning-solid\": charcoalDark.warningSolid,\n \"--fairmint-color-warning-solid-hover\": charcoalDark.warningSolidHover,\n \"--fairmint-color-error-bg\": error[9],\n \"--fairmint-color-error-bg-subtle\": error[8],\n \"--fairmint-color-error-text\": error[2],\n \"--fairmint-color-error-border\": error[7],\n \"--fairmint-color-error-solid\": error[7],\n \"--fairmint-color-error-solid-hover\": error[8],\n \"--fairmint-color-error-solid-muted\": error[5],\n \"--fairmint-color-info-bg\": charcoalDark.infoBg,\n \"--fairmint-color-info-text\": charcoalDark.infoText,\n \"--fairmint-color-info-border\": charcoalDark.infoBorder,\n \"--fairmint-color-info-solid\": charcoalDark.primary,\n \"--fairmint-color-info-solid-hover\": charcoalDark.primaryHover,\n\n // Mantine primitives used by the shared component wrappers. These keep\n // Button, Badge, Alert, Loader, and form controls on the same semantic\n // roles instead of falling back to Mantine's default dark palette.\n \"--mantine-color-body\": charcoalDark.canvas,\n \"--mantine-color-text\": charcoalDark.textPrimary,\n \"--mantine-color-bright\": charcoalDark.textPrimary,\n \"--mantine-color-dimmed\": charcoalDark.textSecondary,\n \"--mantine-color-placeholder\": \"#969BA5\",\n \"--mantine-color-default\": charcoalDark.surface,\n \"--mantine-color-default-hover\": charcoalDark.control,\n \"--mantine-color-default-color\": charcoalDark.textPrimary,\n \"--mantine-color-default-border\": charcoalDark.border,\n \"--mantine-color-disabled\": charcoalDark.control,\n \"--mantine-color-disabled-color\": charcoalDark.textDisabled,\n \"--mantine-color-disabled-border\": charcoalDark.border,\n \"--mantine-primary-color-filled\": charcoalDark.primary,\n \"--mantine-primary-color-filled-hover\": charcoalDark.primaryHover,\n \"--mantine-primary-color-light\": charcoalDark.brandSubtle,\n \"--mantine-primary-color-light-hover\": charcoalDark.control,\n \"--mantine-primary-color-light-color\": charcoalDark.primaryActive,\n \"--mantine-primary-color-3\": charcoalDark.primaryActive,\n \"--mantine-primary-color-4\": charcoalDark.primaryActive,\n \"--mantine-primary-color-6\": charcoalDark.primary,\n \"--mantine-primary-color-7\": charcoalDark.primaryHover,\n \"--mantine-primary-color-8\": charcoalDark.primaryHover,\n \"--mantine-primary-color-9\": charcoalDark.brandSubtle,\n \"--mantine-color-indigo-3\": charcoalDark.primaryActive,\n \"--mantine-color-indigo-4\": charcoalDark.primaryActive,\n \"--mantine-color-indigo-6\": charcoalDark.primary,\n \"--mantine-color-indigo-7\": charcoalDark.primaryHover,\n \"--mantine-color-indigo-8\": charcoalDark.primaryHover,\n \"--mantine-color-indigo-9\": charcoalDark.brandSubtle,\n \"--mantine-color-indigo-text\": charcoalDark.primaryActive,\n \"--mantine-color-indigo-filled\": charcoalDark.primary,\n \"--mantine-color-indigo-filled-hover\": charcoalDark.primaryHover,\n \"--mantine-color-indigo-light\": charcoalDark.brandSubtle,\n \"--mantine-color-indigo-light-hover\": charcoalDark.control,\n \"--mantine-color-indigo-light-color\": charcoalDark.primaryActive,\n \"--mantine-color-indigo-outline\": charcoalDark.focus,\n \"--mantine-color-indigo-outline-hover\": charcoalDark.control,\n \"--mantine-color-gray-light\": charcoalDark.control,\n \"--mantine-color-gray-light-color\": charcoalDark.textSecondary,\n \"--mantine-color-gray-filled\": charcoalDark.border,\n \"--mantine-color-gray-filled-hover\": charcoalDark.iconSecondary,\n \"--mantine-color-gray-4\": charcoalDark.iconSecondary,\n \"--mantine-color-gray-5\": charcoalDark.textTertiary,\n \"--mantine-color-gray-6\": charcoalDark.textSecondary,\n \"--mantine-color-gray-7\": charcoalDark.border,\n \"--mantine-color-gray-8\": charcoalDark.chrome,\n \"--mantine-color-gray-9\": charcoalDark.canvas,\n \"--mantine-color-success-light\": charcoalDark.successBg,\n \"--mantine-color-success-light-color\": charcoalDark.successText,\n \"--mantine-color-success-filled\": charcoalDark.successSolid,\n \"--mantine-color-success-filled-hover\": charcoalDark.successSolidHover,\n \"--mantine-color-warning-light\": charcoalDark.warningBg,\n \"--mantine-color-warning-light-color\": charcoalDark.warningText,\n \"--mantine-color-warning-filled\": charcoalDark.warningSolid,\n \"--mantine-color-warning-filled-hover\": charcoalDark.warningSolidHover,\n \"--mantine-color-info-light\": charcoalDark.infoBg,\n \"--mantine-color-info-light-color\": charcoalDark.infoText,\n \"--mantine-color-info-filled\": charcoalDark.primary,\n \"--mantine-color-info-filled-hover\": charcoalDark.primaryHover,\n \"--mantine-color-error-2\": error[2],\n \"--mantine-color-error-3\": error[3],\n \"--mantine-color-error-4\": error[4],\n \"--mantine-color-error-6\": error[6],\n \"--mantine-color-error-7\": error[7],\n \"--mantine-color-error-8\": error[8],\n \"--mantine-color-error-9\": error[9],\n \"--mantine-color-error-text\": error[2],\n \"--mantine-color-error-filled\": error[7],\n \"--mantine-color-error-filled-hover\": error[6],\n \"--mantine-color-error-light\": error[9],\n \"--mantine-color-error-light-hover\": error[8],\n \"--mantine-color-error-light-color\": error[2],\n \"--mantine-color-error-outline\": error[7],\n \"--mantine-color-error-outline-hover\": error[8],\n },\n});\n\n/**\n * Typed JS references to every --fairmint-* CSS custom property.\n * Use these in component code instead of raw \"var(--fairmint-...)\" strings so\n * that renaming a token requires one change here rather than hunting every file.\n *\n * Each value includes a CSS fallback derived from the light-mode token value so\n * that components degrade gracefully when cssVariablesResolver is not wired up\n * (e.g. bare MantineProvider in tests or custom setups). Dark-mode fidelity is\n * lost without the resolver, but nothing renders invisibly.\n */\nconst fairmintVar = (name: string, fallback: string) => `var(--fairmint-${name}, ${fallback})`;\n\nexport const fairmintVars = {\n /** Canvas background for the app shell. */\n colorBgCanvas: fairmintVar(\"color-bg-canvas\", \"#ffffff\"),\n /** Primary raised surface. */\n colorBgSurface: fairmintVar(\"color-bg-surface\", \"#ffffff\"),\n /** Secondary surface used for fields, rows, and subtle containers. */\n colorBgSurfaceSecondary: fairmintVar(\"color-bg-surface-secondary\", neutral[0]),\n /** Hover surface. */\n colorBgHover: fairmintVar(\"color-bg-hover\", neutral[0]),\n /** Selected surface. */\n colorBgSelected: fairmintVar(\"color-bg-selected\", indigo[0]),\n /** Subtle brand surface. */\n colorBgBrandSubtle: fairmintVar(\"color-bg-brand-subtle\", indigo[0]),\n /** Hovered subtle brand surface. */\n colorBgBrandSubtleHover: fairmintVar(\"color-bg-brand-subtle-hover\", indigo[1]),\n /** Disabled surface. */\n colorBgDisabled: fairmintVar(\"color-bg-disabled\", neutral[2]),\n /** Primary body/heading text — titles on tinted surfaces (Chip Banner). */\n colorTextPrimary: `var(--fairmint-color-text-primary, ${neutral[9]})`,\n /** Secondary / muted text — subtitles, supporting labels. Adapts to color scheme. */\n colorTextSecondary: `var(--fairmint-color-text-secondary, ${neutral[5]})`,\n /** Tertiary / faint text — timestamps, metadata. Adapts to color scheme. */\n colorTextTertiary: `var(--fairmint-color-text-tertiary, ${neutral[4]})`,\n /** Text on filled controls. */\n colorTextInverse: fairmintVar(\"color-text-inverse\", \"#ffffff\"),\n /** Disabled text. */\n colorTextDisabled: fairmintVar(\"color-text-disabled\", neutral[6]),\n /** Primary icon and stroke color. */\n colorIconPrimary: fairmintVar(\"color-icon-primary\", neutral[9]),\n /** Secondary icon and stroke color. */\n colorIconSecondary: fairmintVar(\"color-icon-secondary\", neutral[5]),\n /** Tertiary icon and stroke color. */\n colorIconTertiary: fairmintVar(\"color-icon-tertiary\", neutral[4]),\n /** Icon color on filled or dark surfaces. */\n colorIconInverse: fairmintVar(\"color-icon-inverse\", \"#ffffff\"),\n /** Disabled icon and stroke color. */\n colorIconDisabled: fairmintVar(\"color-icon-disabled\", neutral[6]),\n /** Default border. */\n colorBorderDefault: fairmintVar(\"color-border-default\", neutral[2]),\n /** Focus border/ring color. */\n colorBorderFocus: fairmintVar(\"color-border-focus\", indigo[5]),\n /** Disabled border. */\n colorBorderDisabled: fairmintVar(\"color-border-disabled\", neutral[3]),\n /** Brand action color. */\n colorBrandPrimary: fairmintVar(\"color-brand-primary\", indigo[6]),\n /** Hovered brand action color. */\n colorBrandPrimaryHover: fairmintVar(\"color-brand-primary-hover\", indigo[7]),\n /** Pressed brand action color. */\n colorBrandPrimaryActive: fairmintVar(\"color-brand-primary-active\", indigo[7]),\n /** Fairmint blue brand accent. */\n colorBrandBlue: fairmintVar(\"color-brand-blue\", fairmintBlue[5]),\n /** Fairmint purple brand accent. */\n colorBrandPurple: fairmintVar(\"color-brand-purple\", fairmintPurple[5]),\n /** Background tint for selected / active rows. Adapts to color scheme. */\n colorSurfaceSelected: `var(--fairmint-color-surface-selected, ${indigo[0]})`,\n /** Icon/text drawn on top of colorSurfaceSelected (e.g. a checkmark in a selected badge). Adapts to color scheme. */\n colorIconOnSurfaceSelected: `var(--fairmint-color-icon-on-surface-selected, ${indigo[6]})`,\n /** Semantic status roles. */\n colorSuccessBg: fairmintVar(\"color-success-bg\", success[0]),\n colorSuccessText: fairmintVar(\"color-success-text\", success[7]),\n colorSuccessBorder: fairmintVar(\"color-success-border\", success[2]),\n colorSuccessSolid: fairmintVar(\"color-success-solid\", success[7]),\n colorSuccessSolidHover: fairmintVar(\"color-success-solid-hover\", success[7]),\n colorWarningBg: fairmintVar(\"color-warning-bg\", warning[0]),\n colorWarningText: fairmintVar(\"color-warning-text\", warning[7]),\n colorWarningBorder: fairmintVar(\"color-warning-border\", warning[2]),\n colorWarningSolid: fairmintVar(\"color-warning-solid\", warning[7]),\n colorWarningSolidHover: fairmintVar(\"color-warning-solid-hover\", warning[7]),\n colorErrorBg: fairmintVar(\"color-error-bg\", error[0]),\n colorErrorBgSubtle: fairmintVar(\"color-error-bg-subtle\", error[1]),\n colorErrorText: fairmintVar(\"color-error-text\", error[7]),\n colorErrorBorder: fairmintVar(\"color-error-border\", error[2]),\n colorErrorSolid: fairmintVar(\"color-error-solid\", error[5]),\n colorErrorSolidHover: fairmintVar(\"color-error-solid-hover\", error[6]),\n colorErrorSolidMuted: fairmintVar(\"color-error-solid-muted\", error[4]),\n colorInfoBg: fairmintVar(\"color-info-bg\", info[0]),\n colorInfoText: fairmintVar(\"color-info-text\", info[7]),\n colorInfoBorder: fairmintVar(\"color-info-border\", info[2]),\n colorInfoSolid: fairmintVar(\"color-info-solid\", info[7]),\n colorInfoSolidHover: fairmintVar(\"color-info-solid-hover\", info[7]),\n /** Decorative watermark color. */\n colorWatermark: fairmintVar(\"color-watermark\", neutral[1]),\n /** Large decorative watermark on error/empty pages. Adapts to color scheme. */\n watermarkColor: fairmintVar(\"color-watermark\", neutral[1]),\n /** Heading font family (Plus Jakarta Sans). */\n fontHeadings: `var(--fairmint-font-headings, ${typography.headingFontFamily})`,\n /** Body font family (Inter). */\n fontBody: `var(--fairmint-font-body, ${typography.fontFamily})`,\n} as const;\n\n/**\n * Returns the MantineProvider props required to use @fairmint/ui components.\n * Use this when you need to instantiate MantineProvider directly (e.g. in\n * Storybook decorators or server-rendering setups) instead of FairmintProvider.\n *\n * @example\n * ```tsx\n * import { MantineProvider } from \"@mantine/core\";\n * import { createFairmintMantineProviderProps } from \"@fairmint/ui\";\n *\n * <MantineProvider {...createFairmintMantineProviderProps()}>\n * <App />\n * </MantineProvider>\n * ```\n */\nexport function createFairmintMantineProviderProps(\n colorScheme: \"light\" | \"dark\" | \"auto\" = \"light\",\n) {\n return {\n theme,\n cssVariablesResolver: fairmintCssVariables,\n defaultColorScheme: colorScheme,\n } as const;\n}\n\n/** Brand colors for gradients and custom styling. */\nexport const brandColors = {\n blue: \"#0A4EFB\",\n purple: \"#9E03FF\",\n indigo: \"#6366F1\",\n gradient: \"linear-gradient(90deg, #0A4EFB 0%, #9E03FF 100%)\",\n} as const;\n\nexport const commonColors = {\n black: \"#000000\",\n white: \"#ffffff\",\n} as const;\n\n/**\n * Card/row shadow used by WalletList and similar card surfaces.\n * Equivalent to neutralColors[900] at ~10% opacity (#111927 → #1119271A).\n */\nexport const shadowColor = {\n card: \"#1119271A\",\n} as const;\n\n/** Indigo scale for direct access outside Mantine's theme system. Keys are numeric literals. */\nexport const indigoColors = {\n 0: \"#EEF2FF\",\n 1: \"#E0E7FF\",\n 2: \"#C7D2FE\",\n 3: \"#A5B4FC\",\n 4: \"#818CF8\",\n 5: \"#6366F1\",\n 6: \"#4F46E5\",\n 7: \"#4338CA\",\n 8: \"#3730A3\",\n 9: \"#312E81\",\n} as const;\n\n/** Neutral scale for direct access outside Mantine's theme system. Keys are numeric literals. */\nexport const neutralColors = {\n 50: \"#F8F9FA\",\n 100: \"#F3F4F6\",\n 200: \"#E5E7EB\",\n 300: \"#D2D6DB\",\n 400: \"#9DA4AE\",\n 500: \"#6C737F\",\n 600: \"#4D5761\",\n 700: \"#2F3746\",\n 800: \"#1C2536\",\n 900: \"#111927\",\n} as const;\n\n/** Dark neutral ramp used by the semantic dark-mode CSS variables. */\nexport const darkNeutralColors = {\n 50: \"#F5F7FA\",\n 100: \"#E2E7ED\",\n 200: \"#B8C2D0\",\n 300: \"#8D99A8\",\n 400: \"#748093\",\n 500: \"#5C687A\",\n 600: \"#2F3746\",\n 700: \"#1F2A39\",\n 800: \"#1B2431\",\n 900: \"#0F141C\",\n} as const;\n\n/** Semantic colors for status-based styling. */\nexport const semanticColors = {\n success: \"#10B981\",\n warning: \"#F79009\",\n error: \"#F04438\",\n info: \"#06AED4\",\n} as const;\n\nexport type { AvatarPaletteColor, FairmintColor } from \"./colors\";\nexport { AVATAR_PALETTE, colors } from \"./colors\";\nexport type { FairmintFontSize } from \"./fontSizes\";\nexport { fontSizes } from \"./fontSizes\";\nexport { DEFAULT_FAIRMINT_LOGO_SRC } from \"./logo\";\nexport type { FairmintResponsiveTypography } from \"./responsiveTypography\";\nexport { responsiveTypography } from \"./responsiveTypography\";\nexport type { FairmintSpacing } from \"./spacing\";\nexport { spacing } from \"./spacing\";\nexport { overlayZIndexAboveLegacyShell } from \"./zIndex\";\n"],"names":["createTheme","spacing","fontSizes"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/theme/index.ts"],"sourcesContent":["import {\n type CSSVariablesResolver,\n createTheme,\n type MantineColorsTuple,\n type MantineTheme,\n} from \"@mantine/core\";\nimport { fontSizes } from \"./fontSizes\";\nimport { spacing } from \"./spacing\";\n\n/**\n * Fairmint radius scale — single source of truth used by both the Mantine\n * theme config and the exported `radii` constant. Edit here; both stay in sync.\n */\nexport const radii = {\n xs: \"0.25rem\",\n sm: \"0.375rem\",\n md: \"0.5rem\",\n lg: \"0.75rem\",\n xl: \"1rem\",\n} as const;\n\n/**\n * Indigo palette — primary UI color.\n * Used for buttons, links, active navigation, focus rings.\n * Shade [5] (#6366F1) is the default primary.\n */\nconst indigo: MantineColorsTuple = [\n \"#EEF2FF\",\n \"#E0E7FF\",\n \"#C7D2FE\",\n \"#A5B4FC\",\n \"#818CF8\",\n \"#6366F1\",\n \"#4F46E5\",\n \"#4338CA\",\n \"#3730A3\",\n \"#253974\",\n];\n\n/**\n * Neutral scale — replaces Mantine's default gray.\n * Used for text, borders, backgrounds, disabled states.\n */\nconst neutral: MantineColorsTuple = [\n \"#F8F9FA\",\n \"#F3F4F6\",\n \"#E5E7EB\",\n \"#D2D6DB\",\n \"#9DA4AE\",\n \"#6C737F\",\n \"#4D5761\",\n \"#2F3746\",\n \"#1C2536\",\n \"#111927\",\n];\n\n/**\n * Dark-mode neutral ramp — the dark surface and text anchors used by Chip.\n * Keep these separate from the light neutral ramp so Light mode remains stable.\n */\nconst darkNeutral: MantineColorsTuple = [\n \"#FFFFFF\",\n \"#E7E9F0\",\n \"#B8C2D0\",\n \"#9DA4AE\",\n \"#8F99AB\",\n \"#6C737F\",\n \"#2F3746\",\n \"#1B1D21\",\n \"#17191D\",\n \"#111214\",\n];\n\n/**\n * Approved charcoal dark-mode roles from the onboarding source of truth.\n * Keep these semantic values explicit instead of deriving them from the\n * light neutral ramp so component behavior stays aligned with Figma.\n */\nconst charcoalDark = {\n canvas: \"#111214\",\n surface: \"#17191D\",\n chrome: \"#1B1D21\",\n control: \"#202329\",\n selected: \"#2F3746\",\n brandSubtle: \"#111927\",\n textPrimary: \"#FFFFFF\",\n textSecondary: \"#9DA4AE\",\n textTertiary: \"#8F99AB\",\n textDisabled: \"#6C737F\",\n iconSecondary: \"#B8C2D0\",\n border: \"#2F3746\",\n focus: \"#A5B4FC\",\n primary: \"#6366F1\",\n primaryHover: \"#818CF8\",\n primaryActive: \"#A5B4FC\",\n successBg: \"#163E38\",\n successText: \"#6FE3BE\",\n successBorder: \"#2F3746\",\n successSolid: \"#34D399\",\n successSolidHover: \"#6FE3BE\",\n warningBg: \"#402A12\",\n warningText: \"#FDB022\",\n warningBorder: \"#6E4515\",\n warningSolid: \"#DC6803\",\n warningSolidHover: \"#E5A34A\",\n infoBg: \"#172B45\",\n infoText: \"#22CCEE\",\n infoBorder: \"#23476B\",\n} as const;\n\n/**\n * Mantine still references its reserved `dark` ramp directly in several\n * component styles (for example Card uses dark[6] and Paper borders use\n * dark[4]). Map those fallback indices to Fairmint's charcoal roles so an\n * un-tokenized Mantine state cannot reintroduce the warm default gray palette.\n */\nconst mantineDark: MantineColorsTuple = [\n charcoalDark.textPrimary,\n darkNeutral[1],\n darkNeutral[2],\n charcoalDark.textSecondary,\n charcoalDark.border,\n charcoalDark.control,\n charcoalDark.surface,\n charcoalDark.canvas,\n charcoalDark.canvas,\n charcoalDark.canvas,\n];\n\n/**\n * Fairmint brand blue — accent color for gradients and brand elements.\n * Shade [5] (#0A4EFB) is the primary brand blue.\n *\n * This is the current production value documented in design/DESIGN.md.\n */\nconst fairmintBlue: MantineColorsTuple = [\n \"#e6f0ff\",\n \"#cce0ff\",\n \"#99c2ff\",\n \"#66a3ff\",\n \"#3385ff\",\n \"#0A4EFB\",\n \"#083ec9\",\n \"#062e97\",\n \"#041f64\",\n \"#020f32\",\n];\n\n/**\n * Fairmint brand purple — accent color for gradients and brand elements.\n * Shade [5] (#9E03FF) is the primary brand purple.\n *\n * This is the current production value documented in design/DESIGN.md.\n */\nconst fairmintPurple: MantineColorsTuple = [\n \"#f5e6ff\",\n \"#e6ccff\",\n \"#cc99ff\",\n \"#b366ff\",\n \"#9933ff\",\n \"#9E03FF\",\n \"#7e02cc\",\n \"#5f0299\",\n \"#3f0166\",\n \"#200133\",\n];\n\nconst success: MantineColorsTuple = [\n \"#F0FDF9\",\n \"#D1FAE5\",\n \"#A7F3D0\",\n \"#6EE7B7\",\n \"#34D399\",\n \"#10B981\",\n \"#059669\",\n \"#047857\",\n \"#065F46\",\n \"#134E48\",\n];\n\nconst warning: MantineColorsTuple = [\n \"#FFFAEB\",\n \"#FEF0C7\",\n \"#FEDF89\",\n \"#FEC84B\",\n \"#FDB022\",\n \"#F79009\",\n \"#DC6803\",\n \"#B54708\",\n \"#93370D\",\n \"#7A2E0E\",\n];\n\nconst error: MantineColorsTuple = [\n \"#FEF3F2\",\n \"#FEE4E2\",\n \"#FECDCA\",\n \"#FDA29B\",\n \"#F97066\",\n \"#F04438\",\n \"#D92D20\",\n \"#B42318\",\n \"#912018\",\n \"#7A271A\",\n];\n\nconst info: MantineColorsTuple = [\n \"#ECFDFF\",\n \"#CFF9FE\",\n \"#A5F0FC\",\n \"#67E3F9\",\n \"#22CCEE\",\n \"#06AED4\",\n \"#088AB2\",\n \"#0E7090\",\n \"#155B75\",\n \"#164C63\",\n];\n\n/**\n * Typography constants — single source of truth for font families.\n * Use these instead of var(--mantine-font-family-*) in component code.\n * Declared before createTheme so the theme itself references them.\n */\nexport const typography = {\n fontFamily:\n '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\"',\n headingFontFamily: '\"Plus Jakarta Sans\", sans-serif',\n} as const;\n\n/**\n * Semantic toast surfaces keyed by Mantine Notification `color`.\n * Uses Fairmint CSS variables so light/dark flip with the resolver\n * (`*-bg` light values are the /50 ramp shade / tuple[0]).\n */\nconst notificationToneStyles: Record<string, { bg: string; border: string; text: string }> = {\n success: {\n bg: \"var(--fairmint-color-success-bg)\",\n border: \"var(--fairmint-color-success-border)\",\n text: \"var(--fairmint-color-success-text)\",\n },\n error: {\n bg: \"var(--fairmint-color-error-bg)\",\n border: \"var(--fairmint-color-error-border)\",\n text: \"var(--fairmint-color-error-text)\",\n },\n warning: {\n bg: \"var(--fairmint-color-warning-bg)\",\n border: \"var(--fairmint-color-warning-border)\",\n text: \"var(--fairmint-color-warning-text)\",\n },\n info: {\n bg: \"var(--fairmint-color-info-bg)\",\n border: \"var(--fairmint-color-info-border)\",\n text: \"var(--fairmint-color-info-text)\",\n },\n};\n\nexport const theme = createTheme({\n primaryColor: \"indigo\",\n // Mantine defaults to a darker shade for dark-mode filled/light variants\n // (primaryShade: { light: 6, dark: 8 }), but our brand indigo (index 5,\n // #6366F1) is the same accent in both color schemes — pin a single shade\n // so unwrapped Mantine components (color=\"indigo\") don't drift into a\n // different, more saturated purple in dark mode.\n primaryShade: 5,\n colors: {\n indigo,\n gray: neutral,\n dark: mantineDark,\n darkGray: darkNeutral,\n fairmintBlue,\n fairmintPurple,\n success,\n warning,\n error,\n info,\n },\n\n fontFamily: typography.fontFamily,\n headings: {\n fontFamily: typography.headingFontFamily,\n fontWeight: \"700\",\n },\n\n radius: radii,\n defaultRadius: \"md\",\n spacing,\n fontSizes: {\n xs: fontSizes.xs,\n sm: fontSizes.sm,\n md: fontSizes.md,\n lg: fontSizes.lg,\n xl: fontSizes.xl,\n },\n\n breakpoints: {\n xs: \"30em\",\n sm: \"48em\",\n md: \"64em\",\n lg: \"74em\",\n xl: \"90em\",\n },\n\n components: {\n Button: {\n defaultProps: { size: \"md\" },\n styles: {\n root: {\n fontWeight: 600,\n borderRadius: \"0.75rem\",\n textTransform: \"none\" as const,\n },\n },\n },\n Input: {\n classNames: { input: \"fairmint-input\" },\n },\n TextInput: {\n defaultProps: { size: \"md\" },\n },\n Card: {\n defaultProps: {\n padding: \"lg\",\n radius: \"xl\",\n withBorder: true,\n },\n styles: {\n root: {\n backgroundColor: \"var(--fairmint-color-bg-surface, #ffffff)\",\n borderColor: `var(--fairmint-color-border-default, ${neutral[2]})`,\n },\n },\n },\n Paper: {\n styles: {\n root: {\n backgroundColor: \"var(--fairmint-color-bg-surface, #ffffff)\",\n backgroundImage: \"none\",\n borderColor: `var(--fairmint-color-border-default, ${neutral[2]})`,\n },\n },\n },\n Table: {\n styles: {\n thead: {\n fontSize: \"0.75rem\",\n fontWeight: 600,\n letterSpacing: \"0.5px\",\n textTransform: \"uppercase\" as const,\n },\n },\n },\n Modal: {\n styles: {\n title: {\n fontSize: fontSizes.lg,\n fontWeight: 700,\n lineHeight: 1.3,\n },\n },\n },\n // Toasts: Ramp-inspired restraint — single-layer subtle elevation (lighter\n // than Mantine shadow-xs) + 1px semantic border (override shadow-lg / filled\n // icon). Semantic variants use *-bg (light = ramp /50 / tuple[0]; dark =\n // approved charcoal semantic surfaces) with matching border/text/icon tokens.\n // Neutral/default (no color) stays on the standard surface.\n // Horizontal padding is symmetric spacing.md (16px): Mantine defaults to\n // 22px start (accent rail) vs spacing.xs end (~10px); Fairmint toasts use\n // outlined icons (rail hidden), so match left/right on the spacing scale.\n Notification: {\n styles: (_theme: MantineTheme, params: { color?: string }) => {\n const tone = notificationToneStyles[params.color ?? \"\"];\n const rootPadding = {\n paddingInlineStart: spacing.md,\n paddingInlineEnd: spacing.md,\n } as const;\n\n if (!tone) {\n return {\n root: {\n boxShadow: \"var(--fairmint-elevation-subtle)\",\n ...rootPadding,\n },\n icon: {\n backgroundColor: \"transparent\",\n color: \"var(--notification-color)\",\n },\n };\n }\n\n return {\n root: {\n boxShadow: \"var(--fairmint-elevation-subtle)\",\n backgroundColor: tone.bg,\n border: `1px solid ${tone.border}`,\n ...rootPadding,\n },\n title: {\n color: tone.text,\n },\n description: {\n color: tone.text,\n },\n icon: {\n backgroundColor: \"transparent\",\n color: tone.text,\n },\n closeButton: {\n color: tone.text,\n },\n };\n },\n },\n },\n});\n\n/**\n * Fairmint CSS variables resolver for MantineProvider.\n * Publishes --fairmint-* custom properties so components never reference\n * --mantine-* variables directly. All light/dark switching is centralised here.\n */\nexport const fairmintCssVariables: CSSVariablesResolver = () => ({\n variables: {\n \"--fairmint-font-headings\": typography.headingFontFamily,\n \"--fairmint-font-body\": typography.fontFamily,\n \"--fairmint-interactive-focus-ring\": indigo[5],\n },\n light: {\n \"--fairmint-interactive-focus-ring\": indigo[5],\n \"--fairmint-color-bg-canvas\": commonColors.white,\n \"--fairmint-color-bg-surface\": commonColors.white,\n \"--fairmint-color-bg-surface-secondary\": neutral[0],\n \"--fairmint-color-bg-hover\": neutral[0],\n \"--fairmint-color-bg-selected\": indigo[0],\n \"--fairmint-color-bg-brand-subtle\": indigo[0],\n \"--fairmint-color-bg-brand-subtle-hover\": indigo[1],\n \"--fairmint-color-bg-disabled\": neutral[2],\n \"--fairmint-watermark-color\": neutral[1],\n \"--fairmint-color-text-primary\": neutral[9],\n \"--fairmint-color-text-secondary\": neutral[5],\n \"--fairmint-color-text-tertiary\": neutral[4],\n \"--fairmint-color-text-inverse\": commonColors.white,\n \"--fairmint-color-text-disabled\": neutral[6],\n \"--fairmint-color-icon-primary\": neutral[9],\n \"--fairmint-color-icon-secondary\": neutral[5],\n \"--fairmint-color-icon-tertiary\": neutral[4],\n \"--fairmint-color-icon-inverse\": commonColors.white,\n \"--fairmint-color-icon-disabled\": neutral[6],\n \"--fairmint-color-border-default\": neutral[2],\n \"--fairmint-color-border-focus\": indigo[5],\n \"--fairmint-color-border-disabled\": neutral[3],\n \"--fairmint-color-brand-primary\": indigo[6],\n \"--fairmint-color-brand-primary-hover\": indigo[7],\n \"--fairmint-color-brand-primary-active\": indigo[7],\n \"--fairmint-color-brand-blue\": fairmintBlue[5],\n \"--fairmint-color-brand-purple\": fairmintPurple[5],\n \"--fairmint-color-watermark\": neutral[1],\n \"--fairmint-color-surface-selected\": indigo[0],\n \"--fairmint-color-icon-on-surface-selected\": indigo[6],\n \"--fairmint-interactive-hover-shadow\": `0 2px 6px ${neutral[9]}0F`,\n // Single soft layer — lighter than Mantine shadow-xs (no multi-layer stack).\n \"--fairmint-elevation-subtle\": `0 1px 3px ${neutral[9]}06`,\n \"--fairmint-interactive-hover-bg\": neutral[0],\n \"--fairmint-color-success-bg\": success[0],\n \"--fairmint-color-success-text\": success[7],\n \"--fairmint-color-success-border\": success[2],\n \"--fairmint-color-success-solid\": success[7],\n \"--fairmint-color-success-solid-hover\": success[7],\n \"--fairmint-color-warning-bg\": warning[0],\n \"--fairmint-color-warning-text\": warning[7],\n \"--fairmint-color-warning-border\": warning[2],\n \"--fairmint-color-warning-solid\": warning[7],\n \"--fairmint-color-warning-solid-hover\": warning[7],\n \"--fairmint-color-error-bg\": error[0],\n \"--fairmint-color-error-bg-subtle\": error[1],\n \"--fairmint-color-error-text\": error[7],\n \"--fairmint-color-error-border\": error[2],\n \"--fairmint-color-error-solid\": error[7],\n \"--fairmint-color-error-solid-hover\": error[8],\n \"--fairmint-color-error-solid-muted\": error[4],\n \"--fairmint-color-info-bg\": info[0],\n \"--fairmint-color-info-text\": info[7],\n \"--fairmint-color-info-border\": info[2],\n \"--fairmint-color-info-solid\": info[7],\n \"--fairmint-color-info-solid-hover\": info[7],\n },\n dark: {\n \"--fairmint-interactive-focus-ring\": charcoalDark.focus,\n \"--fairmint-color-bg-canvas\": charcoalDark.canvas,\n \"--fairmint-color-bg-surface\": charcoalDark.surface,\n \"--fairmint-color-bg-surface-secondary\": charcoalDark.chrome,\n \"--fairmint-color-bg-hover\": charcoalDark.control,\n \"--fairmint-color-bg-selected\": charcoalDark.selected,\n \"--fairmint-color-bg-brand-subtle\": charcoalDark.brandSubtle,\n \"--fairmint-color-bg-brand-subtle-hover\": charcoalDark.control,\n \"--fairmint-color-bg-disabled\": charcoalDark.control,\n \"--fairmint-watermark-color\": charcoalDark.control,\n \"--fairmint-color-text-primary\": charcoalDark.textPrimary,\n \"--fairmint-color-text-secondary\": charcoalDark.textSecondary,\n \"--fairmint-color-text-tertiary\": charcoalDark.textTertiary,\n \"--fairmint-color-text-inverse\": neutral[9],\n \"--fairmint-color-text-disabled\": charcoalDark.textDisabled,\n \"--fairmint-color-icon-primary\": charcoalDark.textPrimary,\n \"--fairmint-color-icon-secondary\": charcoalDark.iconSecondary,\n \"--fairmint-color-icon-tertiary\": charcoalDark.textTertiary,\n \"--fairmint-color-icon-inverse\": charcoalDark.textPrimary,\n \"--fairmint-color-icon-disabled\": charcoalDark.textDisabled,\n \"--fairmint-color-border-default\": charcoalDark.border,\n \"--fairmint-color-border-focus\": charcoalDark.focus,\n \"--fairmint-color-border-disabled\": charcoalDark.border,\n \"--fairmint-color-brand-primary\": charcoalDark.primary,\n \"--fairmint-color-brand-primary-hover\": charcoalDark.primaryHover,\n \"--fairmint-color-brand-primary-active\": charcoalDark.primaryActive,\n \"--fairmint-color-brand-blue\": fairmintBlue[5],\n \"--fairmint-color-brand-purple\": fairmintPurple[5],\n \"--fairmint-color-watermark\": charcoalDark.control,\n \"--fairmint-color-surface-selected\": charcoalDark.selected,\n // indigo[6] (the light-mode value) is too dark to read against the\n // dark selected surface — use a light indigo instead.\n \"--fairmint-color-icon-on-surface-selected\": indigo[2],\n \"--fairmint-interactive-hover-shadow\": \"0 2px 6px #00000066\",\n // Single soft layer — restrained vs hover shadow and Mantine shadow-xs.\n \"--fairmint-elevation-subtle\": \"0 1px 3px #00000014\",\n \"--fairmint-interactive-hover-bg\": charcoalDark.surface,\n \"--fairmint-color-success-bg\": charcoalDark.successBg,\n \"--fairmint-color-success-text\": charcoalDark.successText,\n \"--fairmint-color-success-border\": charcoalDark.successBorder,\n \"--fairmint-color-success-solid\": charcoalDark.successSolid,\n \"--fairmint-color-success-solid-hover\": charcoalDark.successSolidHover,\n \"--fairmint-color-warning-bg\": charcoalDark.warningBg,\n \"--fairmint-color-warning-text\": charcoalDark.warningText,\n \"--fairmint-color-warning-border\": charcoalDark.warningBorder,\n \"--fairmint-color-warning-solid\": charcoalDark.warningSolid,\n \"--fairmint-color-warning-solid-hover\": charcoalDark.warningSolidHover,\n \"--fairmint-color-error-bg\": error[9],\n \"--fairmint-color-error-bg-subtle\": error[8],\n \"--fairmint-color-error-text\": error[2],\n \"--fairmint-color-error-border\": error[7],\n \"--fairmint-color-error-solid\": error[7],\n \"--fairmint-color-error-solid-hover\": error[8],\n \"--fairmint-color-error-solid-muted\": error[5],\n \"--fairmint-color-info-bg\": charcoalDark.infoBg,\n \"--fairmint-color-info-text\": charcoalDark.infoText,\n \"--fairmint-color-info-border\": charcoalDark.infoBorder,\n \"--fairmint-color-info-solid\": charcoalDark.primary,\n \"--fairmint-color-info-solid-hover\": charcoalDark.primaryHover,\n\n // Mantine primitives used by the shared component wrappers. These keep\n // Button, Badge, Alert, Loader, and form controls on the same semantic\n // roles instead of falling back to Mantine's default dark palette.\n \"--mantine-color-body\": charcoalDark.canvas,\n \"--mantine-color-text\": charcoalDark.textPrimary,\n \"--mantine-color-bright\": charcoalDark.textPrimary,\n \"--mantine-color-dimmed\": charcoalDark.textSecondary,\n \"--mantine-color-placeholder\": \"#969BA5\",\n \"--mantine-color-default\": charcoalDark.surface,\n \"--mantine-color-default-hover\": charcoalDark.control,\n \"--mantine-color-default-color\": charcoalDark.textPrimary,\n \"--mantine-color-default-border\": charcoalDark.border,\n \"--mantine-color-disabled\": charcoalDark.control,\n \"--mantine-color-disabled-color\": charcoalDark.textDisabled,\n \"--mantine-color-disabled-border\": charcoalDark.border,\n \"--mantine-primary-color-filled\": charcoalDark.primary,\n \"--mantine-primary-color-filled-hover\": charcoalDark.primaryHover,\n \"--mantine-primary-color-light\": charcoalDark.brandSubtle,\n \"--mantine-primary-color-light-hover\": charcoalDark.control,\n \"--mantine-primary-color-light-color\": charcoalDark.primaryActive,\n \"--mantine-primary-color-3\": charcoalDark.primaryActive,\n \"--mantine-primary-color-4\": charcoalDark.primaryActive,\n \"--mantine-primary-color-6\": charcoalDark.primary,\n \"--mantine-primary-color-7\": charcoalDark.primaryHover,\n \"--mantine-primary-color-8\": charcoalDark.primaryHover,\n \"--mantine-primary-color-9\": charcoalDark.brandSubtle,\n \"--mantine-color-indigo-3\": charcoalDark.primaryActive,\n \"--mantine-color-indigo-4\": charcoalDark.primaryActive,\n \"--mantine-color-indigo-6\": charcoalDark.primary,\n \"--mantine-color-indigo-7\": charcoalDark.primaryHover,\n \"--mantine-color-indigo-8\": charcoalDark.primaryHover,\n \"--mantine-color-indigo-9\": charcoalDark.brandSubtle,\n \"--mantine-color-indigo-text\": charcoalDark.primaryActive,\n \"--mantine-color-indigo-filled\": charcoalDark.primary,\n \"--mantine-color-indigo-filled-hover\": charcoalDark.primaryHover,\n \"--mantine-color-indigo-light\": charcoalDark.brandSubtle,\n \"--mantine-color-indigo-light-hover\": charcoalDark.control,\n \"--mantine-color-indigo-light-color\": charcoalDark.primaryActive,\n \"--mantine-color-indigo-outline\": charcoalDark.focus,\n \"--mantine-color-indigo-outline-hover\": charcoalDark.control,\n \"--mantine-color-gray-light\": charcoalDark.control,\n \"--mantine-color-gray-light-color\": charcoalDark.textSecondary,\n \"--mantine-color-gray-filled\": charcoalDark.border,\n \"--mantine-color-gray-filled-hover\": charcoalDark.iconSecondary,\n \"--mantine-color-gray-4\": charcoalDark.iconSecondary,\n \"--mantine-color-gray-5\": charcoalDark.textTertiary,\n \"--mantine-color-gray-6\": charcoalDark.textSecondary,\n \"--mantine-color-gray-7\": charcoalDark.border,\n \"--mantine-color-gray-8\": charcoalDark.chrome,\n \"--mantine-color-gray-9\": charcoalDark.canvas,\n \"--mantine-color-success-light\": charcoalDark.successBg,\n \"--mantine-color-success-light-color\": charcoalDark.successText,\n \"--mantine-color-success-filled\": charcoalDark.successSolid,\n \"--mantine-color-success-filled-hover\": charcoalDark.successSolidHover,\n \"--mantine-color-warning-light\": charcoalDark.warningBg,\n \"--mantine-color-warning-light-color\": charcoalDark.warningText,\n \"--mantine-color-warning-filled\": charcoalDark.warningSolid,\n \"--mantine-color-warning-filled-hover\": charcoalDark.warningSolidHover,\n \"--mantine-color-info-light\": charcoalDark.infoBg,\n \"--mantine-color-info-light-color\": charcoalDark.infoText,\n \"--mantine-color-info-filled\": charcoalDark.primary,\n \"--mantine-color-info-filled-hover\": charcoalDark.primaryHover,\n \"--mantine-color-error-2\": error[2],\n \"--mantine-color-error-3\": error[3],\n \"--mantine-color-error-4\": error[4],\n \"--mantine-color-error-6\": error[6],\n \"--mantine-color-error-7\": error[7],\n \"--mantine-color-error-8\": error[8],\n \"--mantine-color-error-9\": error[9],\n \"--mantine-color-error-text\": error[2],\n \"--mantine-color-error-filled\": error[7],\n \"--mantine-color-error-filled-hover\": error[6],\n \"--mantine-color-error-light\": error[9],\n \"--mantine-color-error-light-hover\": error[8],\n \"--mantine-color-error-light-color\": error[2],\n \"--mantine-color-error-outline\": error[7],\n \"--mantine-color-error-outline-hover\": error[8],\n },\n});\n\n/**\n * Typed JS references to every --fairmint-* CSS custom property.\n * Use these in component code instead of raw \"var(--fairmint-...)\" strings so\n * that renaming a token requires one change here rather than hunting every file.\n *\n * Each value includes a CSS fallback derived from the light-mode token value so\n * that components degrade gracefully when cssVariablesResolver is not wired up\n * (e.g. bare MantineProvider in tests or custom setups). Dark-mode fidelity is\n * lost without the resolver, but nothing renders invisibly.\n */\nconst fairmintVar = (name: string, fallback: string) => `var(--fairmint-${name}, ${fallback})`;\n\nexport const fairmintVars = {\n /** Canvas background for the app shell. */\n colorBgCanvas: fairmintVar(\"color-bg-canvas\", \"#ffffff\"),\n /** Primary raised surface. */\n colorBgSurface: fairmintVar(\"color-bg-surface\", \"#ffffff\"),\n /** Secondary surface used for fields, rows, and subtle containers. */\n colorBgSurfaceSecondary: fairmintVar(\"color-bg-surface-secondary\", neutral[0]),\n /** Hover surface. */\n colorBgHover: fairmintVar(\"color-bg-hover\", neutral[0]),\n /** Selected surface. */\n colorBgSelected: fairmintVar(\"color-bg-selected\", indigo[0]),\n /** Subtle brand surface. */\n colorBgBrandSubtle: fairmintVar(\"color-bg-brand-subtle\", indigo[0]),\n /** Hovered subtle brand surface. */\n colorBgBrandSubtleHover: fairmintVar(\"color-bg-brand-subtle-hover\", indigo[1]),\n /** Disabled surface. */\n colorBgDisabled: fairmintVar(\"color-bg-disabled\", neutral[2]),\n /** Primary body/heading text — titles on tinted surfaces (Chip Banner). */\n colorTextPrimary: `var(--fairmint-color-text-primary, ${neutral[9]})`,\n /** Secondary / muted text — subtitles, supporting labels. Adapts to color scheme. */\n colorTextSecondary: `var(--fairmint-color-text-secondary, ${neutral[5]})`,\n /** Tertiary / faint text — timestamps, metadata. Adapts to color scheme. */\n colorTextTertiary: `var(--fairmint-color-text-tertiary, ${neutral[4]})`,\n /** Text on filled controls. */\n colorTextInverse: fairmintVar(\"color-text-inverse\", \"#ffffff\"),\n /** Disabled text. */\n colorTextDisabled: fairmintVar(\"color-text-disabled\", neutral[6]),\n /** Primary icon and stroke color. */\n colorIconPrimary: fairmintVar(\"color-icon-primary\", neutral[9]),\n /** Secondary icon and stroke color. */\n colorIconSecondary: fairmintVar(\"color-icon-secondary\", neutral[5]),\n /** Tertiary icon and stroke color. */\n colorIconTertiary: fairmintVar(\"color-icon-tertiary\", neutral[4]),\n /** Icon color on filled or dark surfaces. */\n colorIconInverse: fairmintVar(\"color-icon-inverse\", \"#ffffff\"),\n /** Disabled icon and stroke color. */\n colorIconDisabled: fairmintVar(\"color-icon-disabled\", neutral[6]),\n /** Default border. */\n colorBorderDefault: fairmintVar(\"color-border-default\", neutral[2]),\n /** Focus border/ring color. */\n colorBorderFocus: fairmintVar(\"color-border-focus\", indigo[5]),\n /** Disabled border. */\n colorBorderDisabled: fairmintVar(\"color-border-disabled\", neutral[3]),\n /** Brand action color. */\n colorBrandPrimary: fairmintVar(\"color-brand-primary\", indigo[6]),\n /** Hovered brand action color. */\n colorBrandPrimaryHover: fairmintVar(\"color-brand-primary-hover\", indigo[7]),\n /** Pressed brand action color. */\n colorBrandPrimaryActive: fairmintVar(\"color-brand-primary-active\", indigo[7]),\n /** Fairmint blue brand accent. */\n colorBrandBlue: fairmintVar(\"color-brand-blue\", fairmintBlue[5]),\n /** Fairmint purple brand accent. */\n colorBrandPurple: fairmintVar(\"color-brand-purple\", fairmintPurple[5]),\n /** Background tint for selected / active rows. Adapts to color scheme. */\n colorSurfaceSelected: `var(--fairmint-color-surface-selected, ${indigo[0]})`,\n /** Icon/text drawn on top of colorSurfaceSelected (e.g. a checkmark in a selected badge). Adapts to color scheme. */\n colorIconOnSurfaceSelected: `var(--fairmint-color-icon-on-surface-selected, ${indigo[6]})`,\n /** Semantic status roles. */\n colorSuccessBg: fairmintVar(\"color-success-bg\", success[0]),\n colorSuccessText: fairmintVar(\"color-success-text\", success[7]),\n colorSuccessBorder: fairmintVar(\"color-success-border\", success[2]),\n colorSuccessSolid: fairmintVar(\"color-success-solid\", success[7]),\n colorSuccessSolidHover: fairmintVar(\"color-success-solid-hover\", success[7]),\n colorWarningBg: fairmintVar(\"color-warning-bg\", warning[0]),\n colorWarningText: fairmintVar(\"color-warning-text\", warning[7]),\n colorWarningBorder: fairmintVar(\"color-warning-border\", warning[2]),\n colorWarningSolid: fairmintVar(\"color-warning-solid\", warning[7]),\n colorWarningSolidHover: fairmintVar(\"color-warning-solid-hover\", warning[7]),\n colorErrorBg: fairmintVar(\"color-error-bg\", error[0]),\n colorErrorBgSubtle: fairmintVar(\"color-error-bg-subtle\", error[1]),\n colorErrorText: fairmintVar(\"color-error-text\", error[7]),\n colorErrorBorder: fairmintVar(\"color-error-border\", error[2]),\n colorErrorSolid: fairmintVar(\"color-error-solid\", error[5]),\n colorErrorSolidHover: fairmintVar(\"color-error-solid-hover\", error[6]),\n colorErrorSolidMuted: fairmintVar(\"color-error-solid-muted\", error[4]),\n colorInfoBg: fairmintVar(\"color-info-bg\", info[0]),\n colorInfoText: fairmintVar(\"color-info-text\", info[7]),\n colorInfoBorder: fairmintVar(\"color-info-border\", info[2]),\n colorInfoSolid: fairmintVar(\"color-info-solid\", info[7]),\n colorInfoSolidHover: fairmintVar(\"color-info-solid-hover\", info[7]),\n /** Decorative watermark color. */\n colorWatermark: fairmintVar(\"color-watermark\", neutral[1]),\n /** Large decorative watermark on error/empty pages. Adapts to color scheme. */\n watermarkColor: fairmintVar(\"color-watermark\", neutral[1]),\n /** Heading font family (Plus Jakarta Sans). */\n fontHeadings: `var(--fairmint-font-headings, ${typography.headingFontFamily})`,\n /** Body font family (Inter). */\n fontBody: `var(--fairmint-font-body, ${typography.fontFamily})`,\n} as const;\n\n/**\n * Returns the MantineProvider props required to use @fairmint/ui components.\n * Use this when you need to instantiate MantineProvider directly (e.g. in\n * Storybook decorators or server-rendering setups) instead of FairmintProvider.\n *\n * @example\n * ```tsx\n * import { MantineProvider } from \"@mantine/core\";\n * import { createFairmintMantineProviderProps } from \"@fairmint/ui\";\n *\n * <MantineProvider {...createFairmintMantineProviderProps()}>\n * <App />\n * </MantineProvider>\n * ```\n */\nexport function createFairmintMantineProviderProps(\n colorScheme: \"light\" | \"dark\" | \"auto\" = \"light\",\n) {\n return {\n theme,\n cssVariablesResolver: fairmintCssVariables,\n defaultColorScheme: colorScheme,\n } as const;\n}\n\n/** Brand colors for gradients and custom styling. */\nexport const brandColors = {\n blue: \"#0A4EFB\",\n purple: \"#9E03FF\",\n indigo: \"#6366F1\",\n gradient: \"linear-gradient(90deg, #0A4EFB 0%, #9E03FF 100%)\",\n} as const;\n\nexport const commonColors = {\n black: \"#000000\",\n white: \"#ffffff\",\n} as const;\n\n/**\n * Card/row shadow used by WalletList and similar card surfaces.\n * Equivalent to neutralColors[900] at ~10% opacity (#111927 → #1119271A).\n */\nexport const shadowColor = {\n card: \"#1119271A\",\n} as const;\n\n/** Indigo scale for direct access outside Mantine's theme system. Keys are numeric literals. */\nexport const indigoColors = {\n 0: \"#EEF2FF\",\n 1: \"#E0E7FF\",\n 2: \"#C7D2FE\",\n 3: \"#A5B4FC\",\n 4: \"#818CF8\",\n 5: \"#6366F1\",\n 6: \"#4F46E5\",\n 7: \"#4338CA\",\n 8: \"#3730A3\",\n 9: \"#312E81\",\n} as const;\n\n/** Neutral scale for direct access outside Mantine's theme system. Keys are numeric literals. */\nexport const neutralColors = {\n 50: \"#F8F9FA\",\n 100: \"#F3F4F6\",\n 200: \"#E5E7EB\",\n 300: \"#D2D6DB\",\n 400: \"#9DA4AE\",\n 500: \"#6C737F\",\n 600: \"#4D5761\",\n 700: \"#2F3746\",\n 800: \"#1C2536\",\n 900: \"#111927\",\n} as const;\n\n/** Dark neutral ramp used by the semantic dark-mode CSS variables. */\nexport const darkNeutralColors = {\n 50: \"#F5F7FA\",\n 100: \"#E2E7ED\",\n 200: \"#B8C2D0\",\n 300: \"#8D99A8\",\n 400: \"#748093\",\n 500: \"#5C687A\",\n 600: \"#2F3746\",\n 700: \"#1F2A39\",\n 800: \"#1B2431\",\n 900: \"#0F141C\",\n} as const;\n\n/** Semantic colors for status-based styling. */\nexport const semanticColors = {\n success: \"#10B981\",\n warning: \"#F79009\",\n error: \"#F04438\",\n info: \"#06AED4\",\n} as const;\n\nexport type { AvatarPaletteColor, FairmintColor } from \"./colors\";\nexport { AVATAR_PALETTE, colors } from \"./colors\";\nexport type { FairmintFontSize } from \"./fontSizes\";\nexport { fontSizes } from \"./fontSizes\";\nexport { DEFAULT_FAIRMINT_LOGO_SRC } from \"./logo\";\nexport type { FairmintResponsiveTypography } from \"./responsiveTypography\";\nexport { responsiveTypography } from \"./responsiveTypography\";\nexport type { FairmintSpacing } from \"./spacing\";\nexport { spacing } from \"./spacing\";\nexport { overlayZIndexAboveLegacyShell } from \"./zIndex\";\n"],"names":["createTheme","spacing","fontSizes"],"mappings":"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"}