orbital-ds 0.8.0 → 0.9.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/AGENTS.md +145 -80
- package/components.manifest.json +1326 -1267
- package/contract.json +226 -168
- package/dist/hooks/use-ds-messages.d.ts +36 -0
- package/dist/hooks/use-ds-messages.js +12 -0
- package/dist/hooks/use-ds-motion.d.ts +17 -0
- package/dist/hooks/use-ds-motion.js +50 -0
- package/dist/lib/i18n.d.ts +46 -0
- package/dist/lib/i18n.js +109 -0
- package/dist/lib/motion.d.ts +74 -0
- package/dist/lib/motion.js +97 -0
- package/dist/styles.css +876 -528
- package/dist/themes/friendly.css +362 -318
- package/dist/themes/friendly.meta.json +75 -14
- package/dist/themes/friendly.scoped.css +362 -318
- package/dist/themes/qratia.meta.json +42 -12
- package/dist/themes/tactile.css +575 -430
- package/dist/themes/tactile.fonts.css +3 -2
- package/dist/themes/tactile.guide.md +82 -49
- package/dist/themes/tactile.meta.json +175 -82
- package/dist/themes/tactile.scoped.css +575 -430
- package/dist/themes/twitter.css +354 -298
- package/dist/themes/twitter.meta.json +83 -61
- package/dist/themes/twitter.scoped.css +354 -298
- package/dist/themes/zyro.css +443 -389
- package/dist/themes/zyro.meta.json +67 -14
- package/dist/themes/zyro.scoped.css +443 -389
- package/dist/ui/accordion.js +5 -5
- package/dist/ui/alert-dialog.js +3 -3
- package/dist/ui/alert.d.ts +1 -1
- package/dist/ui/alert.js +9 -3
- package/dist/ui/attachment.d.ts +1 -1
- package/dist/ui/attachment.js +4 -4
- package/dist/ui/avatar.js +6 -6
- package/dist/ui/ayuda.js +3 -2
- package/dist/ui/badge.d.ts +1 -1
- package/dist/ui/badge.js +9 -3
- package/dist/ui/banner.d.ts +14 -0
- package/dist/ui/banner.js +88 -0
- package/dist/ui/breadcrumb.js +7 -3
- package/dist/ui/bubble.js +6 -6
- package/dist/ui/button-group.js +4 -4
- package/dist/ui/button.d.ts +1 -1
- package/dist/ui/button.js +5 -5
- package/dist/ui/calendar.js +33 -6
- package/dist/ui/card.js +4 -4
- package/dist/ui/carousel.js +15 -8
- package/dist/ui/chart.js +7 -3
- package/dist/ui/checkbox.js +1 -1
- package/dist/ui/combobox.js +7 -7
- package/dist/ui/command.js +13 -11
- package/dist/ui/context-menu.js +8 -8
- package/dist/ui/dialog.js +10 -6
- package/dist/ui/drawer.js +9 -9
- package/dist/ui/dropdown-menu.js +8 -8
- package/dist/ui/empty.js +3 -3
- package/dist/ui/field.js +2 -2
- package/dist/ui/hover-card.js +1 -1
- package/dist/ui/i18n-provider.d.ts +11 -0
- package/dist/ui/i18n-provider.js +18 -0
- package/dist/ui/icon-tile.d.ts +1 -1
- package/dist/ui/input-group.d.ts +1 -1
- package/dist/ui/input-group.js +11 -9
- package/dist/ui/input-otp.js +3 -3
- package/dist/ui/input.js +1 -1
- package/dist/ui/item.d.ts +1 -1
- package/dist/ui/item.js +3 -3
- package/dist/ui/kbd.js +1 -1
- package/dist/ui/label.js +1 -1
- package/dist/ui/marker.d.ts +1 -1
- package/dist/ui/marker.js +2 -2
- package/dist/ui/menubar.js +9 -9
- package/dist/ui/message-scroller.js +5 -2
- package/dist/ui/message.js +2 -2
- package/dist/ui/motion-provider.d.ts +11 -0
- package/dist/ui/motion-provider.js +16 -0
- package/dist/ui/native-select.js +4 -4
- package/dist/ui/navigation-menu.js +7 -6
- package/dist/ui/pagination.js +19 -11
- package/dist/ui/popover.js +2 -2
- package/dist/ui/progress.js +2 -2
- package/dist/ui/questionnaire.js +20 -15
- package/dist/ui/radio-group.js +2 -2
- package/dist/ui/resizable.js +2 -2
- package/dist/ui/scroll-area.js +3 -3
- package/dist/ui/select.js +6 -6
- package/dist/ui/separator.js +1 -1
- package/dist/ui/sheet.js +6 -4
- package/dist/ui/sidebar.js +42 -30
- package/dist/ui/skeleton.js +1 -1
- package/dist/ui/slider.js +6 -6
- package/dist/ui/sonner.js +25 -8
- package/dist/ui/spinner.js +4 -1
- package/dist/ui/switch.js +2 -2
- package/dist/ui/table.js +3 -3
- package/dist/ui/tabs.js +5 -5
- package/dist/ui/textarea.js +1 -1
- package/dist/ui/toast.js +15 -12
- package/dist/ui/toggle-group.js +2 -2
- package/dist/ui/toggle.js +6 -4
- package/dist/ui/tooltip.js +2 -2
- package/docs/CONTRACT.md +183 -153
- package/package.json +160 -142
- package/scripts/brand-core.mjs +153 -0
- package/scripts/doctor.mjs +128 -7
- package/scripts/i18n.mjs +111 -0
- package/scripts/init.mjs +326 -351
- package/scripts/setup.mjs +99 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
declare const DS_DURATIONS: readonly ["fast", "base", "slow", "snap", "layout", "swipe", "slower"];
|
|
2
|
+
declare const DS_EASES: readonly ["standard", "emphasized", "enter", "exit", "overshoot", "panel", "collapse"];
|
|
3
|
+
type DsDuration = (typeof DS_DURATIONS)[number];
|
|
4
|
+
type DsEase = (typeof DS_EASES)[number];
|
|
5
|
+
type DsEaseValue = [number, number, number, number] | "linear" | "easeIn" | "easeOut" | "easeInOut";
|
|
6
|
+
interface DsTransition {
|
|
7
|
+
/** segundos (0 con movimiento reducido) */
|
|
8
|
+
duration: number;
|
|
9
|
+
/** curva para Motion: 4 números o palabra clave */
|
|
10
|
+
ease: DsEaseValue;
|
|
11
|
+
/** la misma curva en CSS, para GSAP, AutoAnimate o la Web Animations API */
|
|
12
|
+
easeCss: string;
|
|
13
|
+
}
|
|
14
|
+
/** `200ms` / `0.2s` → segundos. */
|
|
15
|
+
declare function parseDuration(raw: string): number;
|
|
16
|
+
/** `cubic-bezier(a, b, c, d)` o una palabra clave CSS → curva de Motion. */
|
|
17
|
+
declare function parseEase(raw: string): DsEaseValue;
|
|
18
|
+
/** Lee la transición del tema en `el` (por defecto, el documento). */
|
|
19
|
+
declare function readDsTransition(duration?: DsDuration, ease?: DsEase, el?: Element): DsTransition;
|
|
20
|
+
interface DsMotion {
|
|
21
|
+
transition: DsTransition;
|
|
22
|
+
/** muelle de Motion: rebote del tema y duración visual del ritmo base */
|
|
23
|
+
spring: {
|
|
24
|
+
type: "spring";
|
|
25
|
+
bounce: number;
|
|
26
|
+
visualDuration: number;
|
|
27
|
+
};
|
|
28
|
+
distance: number;
|
|
29
|
+
scale: number;
|
|
30
|
+
blur: number;
|
|
31
|
+
stagger: number;
|
|
32
|
+
pressScale: number;
|
|
33
|
+
/** aparece subiendo un poco (y enfocando, si el tema usa desenfoque) */
|
|
34
|
+
fadeUp: DsPreset;
|
|
35
|
+
/** aparece creciendo desde la escala del tema (capas, tarjetas) */
|
|
36
|
+
scaleIn: DsPreset;
|
|
37
|
+
/** contenedor de una lista: sus hijos entran en cascada con `fadeUp` */
|
|
38
|
+
list: DsPreset;
|
|
39
|
+
/** al pulsar y al señalar */
|
|
40
|
+
press: {
|
|
41
|
+
whileTap: DsTarget;
|
|
42
|
+
transition: DsMotion["spring"];
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/** Transición con la forma que entiende Motion (sin depender de su paquete). */
|
|
46
|
+
interface DsTransitionLike {
|
|
47
|
+
duration?: number;
|
|
48
|
+
ease?: DsEaseValue;
|
|
49
|
+
type?: "spring";
|
|
50
|
+
bounce?: number;
|
|
51
|
+
visualDuration?: number;
|
|
52
|
+
staggerChildren?: number;
|
|
53
|
+
}
|
|
54
|
+
/** Estado animable con la forma de un «target» de Motion. */
|
|
55
|
+
interface DsTarget {
|
|
56
|
+
opacity?: number;
|
|
57
|
+
x?: number;
|
|
58
|
+
y?: number;
|
|
59
|
+
scale?: number;
|
|
60
|
+
filter?: string;
|
|
61
|
+
transition?: DsTransitionLike;
|
|
62
|
+
/** también variables CSS, como admite Motion */
|
|
63
|
+
[cssVar: `--${string}`]: string | number;
|
|
64
|
+
}
|
|
65
|
+
interface DsPreset {
|
|
66
|
+
initial: DsTarget;
|
|
67
|
+
animate: DsTarget;
|
|
68
|
+
exit: DsTarget;
|
|
69
|
+
transition?: DsTransitionLike;
|
|
70
|
+
}
|
|
71
|
+
/** Lee el sistema de movimiento completo del tema activo y genera los presets. */
|
|
72
|
+
declare function readDsMotion(el?: Element): DsMotion;
|
|
73
|
+
|
|
74
|
+
export { DS_DURATIONS, DS_EASES, type DsDuration, type DsEase, type DsEaseValue, type DsMotion, type DsPreset, type DsTarget, type DsTransition, type DsTransitionLike, parseDuration, parseEase, readDsMotion, readDsTransition };
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
const DS_DURATIONS = ["fast", "base", "slow", "snap", "layout", "swipe", "slower"];
|
|
2
|
+
const DS_EASES = ["standard", "emphasized", "enter", "exit", "overshoot", "panel", "collapse"];
|
|
3
|
+
const KEYWORDS = {
|
|
4
|
+
linear: "linear",
|
|
5
|
+
ease: [0.25, 0.1, 0.25, 1],
|
|
6
|
+
"ease-in": "easeIn",
|
|
7
|
+
"ease-out": "easeOut",
|
|
8
|
+
"ease-in-out": "easeInOut"
|
|
9
|
+
};
|
|
10
|
+
function parseDuration(raw) {
|
|
11
|
+
const v = raw.trim();
|
|
12
|
+
const n = parseFloat(v);
|
|
13
|
+
if (Number.isNaN(n)) return 0;
|
|
14
|
+
return v.endsWith("ms") ? n / 1e3 : n;
|
|
15
|
+
}
|
|
16
|
+
function parseEase(raw) {
|
|
17
|
+
const v = raw.trim();
|
|
18
|
+
const m = v.match(/^cubic-bezier\(([^)]+)\)$/);
|
|
19
|
+
if (m) {
|
|
20
|
+
const p = m[1].split(",").map((x) => parseFloat(x));
|
|
21
|
+
if (p.length === 4 && p.every((x) => !Number.isNaN(x))) return p;
|
|
22
|
+
}
|
|
23
|
+
return KEYWORDS[v] ?? "easeOut";
|
|
24
|
+
}
|
|
25
|
+
function prefersReducedMotion() {
|
|
26
|
+
return typeof window !== "undefined" && window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;
|
|
27
|
+
}
|
|
28
|
+
function readDsTransition(duration = "base", ease = "standard", el) {
|
|
29
|
+
if (typeof window === "undefined") return { duration: 0.2, ease: "easeOut", easeCss: "ease-out" };
|
|
30
|
+
const style = getComputedStyle(el ?? document.documentElement);
|
|
31
|
+
const d = parseDuration(style.getPropertyValue(`--ds-motion-${duration}`));
|
|
32
|
+
const easeCss = style.getPropertyValue(`--ds-ease-${ease}`).trim() || "ease-out";
|
|
33
|
+
return {
|
|
34
|
+
duration: prefersReducedMotion() ? 0 : d,
|
|
35
|
+
ease: parseEase(easeCss),
|
|
36
|
+
easeCss
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
const px = (raw, fallback) => {
|
|
40
|
+
const n = parseFloat(raw);
|
|
41
|
+
return Number.isNaN(n) ? fallback : n;
|
|
42
|
+
};
|
|
43
|
+
function readDsMotion(el) {
|
|
44
|
+
const transition = readDsTransition("base", "enter", el);
|
|
45
|
+
const exit = readDsTransition("fast", "exit", el);
|
|
46
|
+
const style = typeof window === "undefined" ? null : getComputedStyle(el ?? document.documentElement);
|
|
47
|
+
const v = (name) => style?.getPropertyValue(name) ?? "";
|
|
48
|
+
const reduced = transition.duration === 0;
|
|
49
|
+
const distance = reduced ? 0 : px(v("--ds-motion-distance"), 8);
|
|
50
|
+
const scale = reduced ? 1 : px(v("--ds-motion-scale"), 0.96);
|
|
51
|
+
const blur = reduced ? 0 : px(v("--ds-motion-blur"), 0);
|
|
52
|
+
const stagger = reduced ? 0 : parseDuration(v("--ds-motion-stagger") || "40ms");
|
|
53
|
+
const pressScale = reduced ? 1 : px(v("--ds-motion-press-scale"), 0.97);
|
|
54
|
+
const spring = {
|
|
55
|
+
type: "spring",
|
|
56
|
+
bounce: px(v("--ds-spring-bounce"), 0.15),
|
|
57
|
+
visualDuration: transition.duration
|
|
58
|
+
};
|
|
59
|
+
const blurIn = blur ? { filter: `blur(${blur}px)` } : {};
|
|
60
|
+
const blurOut = blur ? { filter: "blur(0px)" } : {};
|
|
61
|
+
const fadeUp = {
|
|
62
|
+
initial: { opacity: 0, y: distance, ...blurIn },
|
|
63
|
+
animate: { opacity: 1, y: 0, ...blurOut },
|
|
64
|
+
exit: { opacity: 0, y: distance / 2, transition: { duration: exit.duration, ease: exit.ease } },
|
|
65
|
+
transition: { duration: transition.duration, ease: transition.ease }
|
|
66
|
+
};
|
|
67
|
+
return {
|
|
68
|
+
transition,
|
|
69
|
+
spring,
|
|
70
|
+
distance,
|
|
71
|
+
scale,
|
|
72
|
+
blur,
|
|
73
|
+
stagger,
|
|
74
|
+
pressScale,
|
|
75
|
+
fadeUp,
|
|
76
|
+
scaleIn: {
|
|
77
|
+
initial: { opacity: 0, scale, ...blurIn },
|
|
78
|
+
animate: { opacity: 1, scale: 1, ...blurOut },
|
|
79
|
+
exit: { opacity: 0, scale, transition: { duration: exit.duration, ease: exit.ease } },
|
|
80
|
+
transition: spring
|
|
81
|
+
},
|
|
82
|
+
list: {
|
|
83
|
+
initial: {},
|
|
84
|
+
animate: { transition: { staggerChildren: stagger } },
|
|
85
|
+
exit: {}
|
|
86
|
+
},
|
|
87
|
+
press: { whileTap: { scale: pressScale }, transition: spring }
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
export {
|
|
91
|
+
DS_DURATIONS,
|
|
92
|
+
DS_EASES,
|
|
93
|
+
parseDuration,
|
|
94
|
+
parseEase,
|
|
95
|
+
readDsMotion,
|
|
96
|
+
readDsTransition
|
|
97
|
+
};
|