@octavius2929-personal/design-system 0.22.1 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +37 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +17 -12
- package/dist/index.d.ts +17 -12
- package/dist/index.js +37 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -458,7 +458,16 @@ var tintaSchema = {
|
|
|
458
458
|
var schemas = { tinta: tintaSchema };
|
|
459
459
|
var schemaNames2 = Object.keys(schemas);
|
|
460
460
|
var colorTokenNames = Object.keys(schemas.tinta.light.color);
|
|
461
|
+
function isSchemaName(x) {
|
|
462
|
+
return typeof x === "string" && Object.hasOwn(schemas, x);
|
|
463
|
+
}
|
|
461
464
|
var modeNames2 = ["light", "dark", "sepia", "contrast"];
|
|
465
|
+
function isMode(x) {
|
|
466
|
+
return typeof x === "string" && modeNames2.includes(x);
|
|
467
|
+
}
|
|
468
|
+
function isModePreference(x) {
|
|
469
|
+
return x === "system" || isMode(x);
|
|
470
|
+
}
|
|
462
471
|
var SYSTEM_MODE_PRECEDENCE = [
|
|
463
472
|
{ query: "(prefers-contrast: more)", mode: "contrast" },
|
|
464
473
|
{ query: "(prefers-color-scheme: dark)", mode: "dark" }
|
|
@@ -466,14 +475,36 @@ var SYSTEM_MODE_PRECEDENCE = [
|
|
|
466
475
|
function resolveMode(preference, systemMode) {
|
|
467
476
|
return preference === "system" ? systemMode : preference;
|
|
468
477
|
}
|
|
478
|
+
function sanitizePersisted(raw) {
|
|
479
|
+
if (!raw || typeof raw !== "object") return {};
|
|
480
|
+
const clean = {};
|
|
481
|
+
if (isSchemaName(raw.schema)) clean.schema = raw.schema;
|
|
482
|
+
if (isModePreference(raw.preference)) clean.preference = raw.preference;
|
|
483
|
+
return clean;
|
|
484
|
+
}
|
|
469
485
|
function useThemeStore(options, storage, system) {
|
|
470
486
|
const { defaultSchema = "tinta", defaultMode = "light" } = options;
|
|
471
|
-
const [persisted] = (0, import_react6.useState)(() => storage.read());
|
|
487
|
+
const [persisted] = (0, import_react6.useState)(() => sanitizePersisted(storage.read()));
|
|
472
488
|
const [schema, setSchema] = (0, import_react6.useState)(persisted?.schema ?? defaultSchema);
|
|
473
489
|
const [preference, setPreference] = (0, import_react6.useState)(
|
|
474
490
|
persisted?.preference ?? defaultMode
|
|
475
491
|
);
|
|
476
492
|
const [systemMode, setSystemMode] = (0, import_react6.useState)(() => system.get());
|
|
493
|
+
const [hydrated, setHydrated] = (0, import_react6.useState)(() => !storage.hydrate);
|
|
494
|
+
(0, import_react6.useEffect)(() => {
|
|
495
|
+
if (!storage.hydrate) return;
|
|
496
|
+
let active2 = true;
|
|
497
|
+
void storage.hydrate().then((raw) => {
|
|
498
|
+
if (!active2) return;
|
|
499
|
+
const clean = sanitizePersisted(raw);
|
|
500
|
+
if (clean.schema) setSchema(clean.schema);
|
|
501
|
+
if (clean.preference) setPreference(clean.preference);
|
|
502
|
+
setHydrated(true);
|
|
503
|
+
});
|
|
504
|
+
return () => {
|
|
505
|
+
active2 = false;
|
|
506
|
+
};
|
|
507
|
+
}, [storage]);
|
|
477
508
|
(0, import_react6.useEffect)(() => {
|
|
478
509
|
if (preference !== "system") return;
|
|
479
510
|
const update = () => setSystemMode(system.get());
|
|
@@ -482,14 +513,17 @@ function useThemeStore(options, storage, system) {
|
|
|
482
513
|
}, [preference, system]);
|
|
483
514
|
const mode = resolveMode(preference, systemMode);
|
|
484
515
|
(0, import_react6.useEffect)(() => {
|
|
516
|
+
if (!hydrated) return;
|
|
485
517
|
storage.write({ schema, preference });
|
|
486
|
-
}, [schema, preference, storage]);
|
|
518
|
+
}, [schema, preference, storage, hydrated]);
|
|
487
519
|
return (0, import_react6.useMemo)(
|
|
488
520
|
() => ({
|
|
489
521
|
schema,
|
|
490
522
|
mode,
|
|
491
523
|
preference,
|
|
492
|
-
|
|
524
|
+
// Guard defensivo: un schema/modo inesperado (default inválido del caller) cae a
|
|
525
|
+
// tinta/light en vez de indexar `undefined` y crashear.
|
|
526
|
+
colorTokens: schemas[schema]?.[mode]?.color ?? schemas.tinta.light.color,
|
|
493
527
|
setSchema,
|
|
494
528
|
setMode: setPreference,
|
|
495
529
|
toggleMode: () => setPreference(mode === "dark" ? "light" : "dark"),
|