@zuzjs/ui 0.10.3 → 0.10.5

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.
Files changed (35) hide show
  1. package/dist/cjs/comps/ChatBubble/index.d.ts +15 -0
  2. package/dist/cjs/comps/ChatBubble/index.js +26 -0
  3. package/dist/cjs/comps/ChatBubble/types.d.ts +30 -0
  4. package/dist/cjs/comps/ChatBubble/types.js +19 -0
  5. package/dist/cjs/comps/Crumb/index.d.ts +1 -1
  6. package/dist/cjs/comps/Dot/index.d.ts +0 -0
  7. package/dist/cjs/comps/Dot/index.js +1 -0
  8. package/dist/cjs/comps/Drawer/index.js +27 -17
  9. package/dist/cjs/comps/List/index.d.ts +1 -1
  10. package/dist/cjs/comps/index.d.ts +2 -0
  11. package/dist/cjs/comps/index.js +2 -0
  12. package/dist/cjs/comps/layer_manager.d.ts +13 -0
  13. package/dist/cjs/comps/layer_manager.js +42 -0
  14. package/dist/cjs/comps/svgicons.d.ts +3 -0
  15. package/dist/cjs/comps/svgicons.js +3 -0
  16. package/dist/css/colors.css +1 -1
  17. package/dist/css/styles.css +1 -1
  18. package/dist/esm/comps/ChatBubble/index.d.ts +15 -0
  19. package/dist/esm/comps/ChatBubble/index.js +26 -0
  20. package/dist/esm/comps/ChatBubble/types.d.ts +30 -0
  21. package/dist/esm/comps/ChatBubble/types.js +19 -0
  22. package/dist/esm/comps/Crumb/index.d.ts +1 -1
  23. package/dist/esm/comps/Dot/index.d.ts +0 -0
  24. package/dist/esm/comps/Dot/index.js +1 -0
  25. package/dist/esm/comps/Drawer/index.js +27 -17
  26. package/dist/esm/comps/List/index.d.ts +1 -1
  27. package/dist/esm/comps/index.d.ts +2 -0
  28. package/dist/esm/comps/index.js +2 -0
  29. package/dist/esm/comps/layer_manager.d.ts +13 -0
  30. package/dist/esm/comps/layer_manager.js +42 -0
  31. package/dist/esm/comps/svgicons.d.ts +3 -0
  32. package/dist/esm/comps/svgicons.js +3 -0
  33. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  34. package/dist/tsconfig.tsbuildinfo +1 -1
  35. package/package.json +2 -2
@@ -0,0 +1,15 @@
1
+ import { BoxProps } from "../Box";
2
+ import { BubbleMediaType, BubbleStatus } from "./types";
3
+ declare const Bubble: import("react").ForwardRefExoticComponent<BoxProps & {
4
+ text?: string;
5
+ media?: {
6
+ type: BubbleMediaType;
7
+ source: string;
8
+ duration?: string;
9
+ };
10
+ side?: "me" | "you";
11
+ status?: BubbleStatus;
12
+ timeStamp?: number;
13
+ arrow?: boolean;
14
+ } & import("react").RefAttributes<HTMLDivElement>>;
15
+ export default Bubble;
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { timeSince } from "@zuzjs/core";
3
+ import { forwardRef } from "react";
4
+ import { Image, ProgressBar } from "../..";
5
+ import { useBase } from "../../hooks";
6
+ import Box from "../Box";
7
+ import Span from "../Span";
8
+ import SVGIcons from "../svgicons";
9
+ import Text from "../Text";
10
+ import { BubbleMediaType, BubbleStatus } from "./types";
11
+ const Bubble = forwardRef((props, ref) => {
12
+ const { text, media, side = "me", status = BubbleStatus.Sent, timeStamp = Date.now(), arrow = true, ...pops } = props;
13
+ const { className, style, rest } = useBase(pops);
14
+ return _jsx(Box, { className: `--bubble-wrapper flex --bw-${side}`.trim(), children: _jsxs(Box, { className: `--bubble --bubble-${side} ${media ? `--with-media --bma-${media.type}` : ``} rel flex cols ${arrow == true ? `--b-arrow` : ``} ${className}`.trim(), style: {
15
+ ...style,
16
+ }, ...rest, children: [text && _jsx(Text, { className: `--bubble-text`, children: text }), media ?
17
+ media.type == BubbleMediaType.Audio ?
18
+ _jsxs(Box, { as: `flex aic --bubble-audio`, children: [_jsx(Span, { className: `--bm-action`, children: SVGIcons.play }), _jsx(ProgressBar, { progress: 0.7 }), _jsx(Text, { className: `--bm-dur`, children: media.duration ?? `00:13` })] })
19
+ : media.type == BubbleMediaType.Image ?
20
+ _jsx(Box, { as: `--bubble-image`, children: _jsx(Image, { src: media.source }) })
21
+ : null : null, _jsxs(Box, { as: `flex aie jce --bubble-stats`, children: [_jsx(Text, { className: `--bubble-stamp tar`, children: timeSince(timeStamp) }), side == "me" && _jsx(Span, { className: `--bubble-status --bs-${status}`, children: status == BubbleStatus.Sending ? SVGIcons.pending
22
+ : status == BubbleStatus.Sent ? SVGIcons.done
23
+ : status == BubbleStatus.Delivered ? SVGIcons.doneAll : SVGIcons.doneAll })] })] }) });
24
+ });
25
+ Bubble.displayName = `Zuz.Bubble`;
26
+ export default Bubble;
@@ -0,0 +1,30 @@
1
+ import { BoxProps } from "../Box";
2
+ export declare enum BubbleStatus {
3
+ Sending = 0,
4
+ Sent = 1,
5
+ Delivered = 2,
6
+ Read = 3
7
+ }
8
+ export declare enum BubbleMediaType {
9
+ Image = "img",
10
+ Video = "vid",
11
+ Audio = "audio",
12
+ Link = "link",
13
+ Document = "doc",
14
+ Location = "loc",
15
+ Contact = "contact",
16
+ Event = "event",
17
+ Poll = "poll"
18
+ }
19
+ export type BubbleProps = BoxProps & {
20
+ text?: string;
21
+ media?: {
22
+ type: BubbleMediaType;
23
+ source: string;
24
+ duration?: string;
25
+ };
26
+ side?: "me" | "you";
27
+ status?: BubbleStatus;
28
+ timeStamp?: number;
29
+ arrow?: boolean;
30
+ };
@@ -0,0 +1,19 @@
1
+ export var BubbleStatus;
2
+ (function (BubbleStatus) {
3
+ BubbleStatus[BubbleStatus["Sending"] = 0] = "Sending";
4
+ BubbleStatus[BubbleStatus["Sent"] = 1] = "Sent";
5
+ BubbleStatus[BubbleStatus["Delivered"] = 2] = "Delivered";
6
+ BubbleStatus[BubbleStatus["Read"] = 3] = "Read";
7
+ })(BubbleStatus || (BubbleStatus = {}));
8
+ export var BubbleMediaType;
9
+ (function (BubbleMediaType) {
10
+ BubbleMediaType["Image"] = "img";
11
+ BubbleMediaType["Video"] = "vid";
12
+ BubbleMediaType["Audio"] = "audio";
13
+ BubbleMediaType["Link"] = "link";
14
+ BubbleMediaType["Document"] = "doc";
15
+ BubbleMediaType["Location"] = "loc";
16
+ BubbleMediaType["Contact"] = "contact";
17
+ BubbleMediaType["Event"] = "event";
18
+ BubbleMediaType["Poll"] = "poll";
19
+ })(BubbleMediaType || (BubbleMediaType = {}));
@@ -1,5 +1,5 @@
1
1
  declare const Crumb: import("react").ForwardRefExoticComponent<import("..").BoxProps & {
2
2
  items: import("./types").CrumbItem[];
3
3
  maxItems?: number;
4
- } & import("react").RefAttributes<HTMLUListElement | HTMLOListElement>>;
4
+ } & import("react").RefAttributes<HTMLOListElement | HTMLUListElement>>;
5
5
  export default Crumb;
File without changes
@@ -0,0 +1 @@
1
+ "use strict";
@@ -1,9 +1,10 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState } from "react";
3
+ import { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from "react";
4
4
  import { useBase, useShortcuts } from "../../hooks";
5
5
  import { DRAWER_SIDE, KeyCode, TRANSITION_CURVES } from "../../types/enums";
6
6
  import Box from "../Box";
7
+ import { layerManager } from "../layer_manager";
7
8
  import Overlay from "../Overlay";
8
9
  const Drawer = forwardRef((props, ref) => {
9
10
  const { from, speed, children, margin, animation, prerender, onClose, ...pops } = props;
@@ -12,17 +13,32 @@ const Drawer = forwardRef((props, ref) => {
12
13
  const divRef = useRef(null);
13
14
  const [content, setContent] = useState(children);
14
15
  const { className, style, rest } = useBase(pops);
15
- useShortcuts([
16
- { keys: [KeyCode.Escape], callback: () => {
17
- if (visible) {
18
- onClose?.();
19
- setVisible(false);
20
- }
21
- } }
22
- ]);
16
+ const shortcutsConfig = useMemo(() => [
17
+ {
18
+ keys: [KeyCode.Escape],
19
+ callback: () => {
20
+ if (layerManager.isTop(closeDrawer))
21
+ closeDrawer();
22
+ }
23
+ }
24
+ ], [visible]);
25
+ useShortcuts(shortcutsConfig);
26
+ const closeDrawer = useCallback(() => {
27
+ setVisible(false);
28
+ onClose?.();
29
+ }, []);
23
30
  useEffect(() => {
24
31
  setContent(children);
25
32
  }, [children]);
33
+ useEffect(() => {
34
+ if (visible) {
35
+ layerManager.push(closeDrawer);
36
+ }
37
+ else {
38
+ layerManager.pop(closeDrawer);
39
+ }
40
+ return () => layerManager.pop(closeDrawer);
41
+ }, [visible]);
26
42
  const _style = useMemo(() => {
27
43
  switch (from) {
28
44
  case DRAWER_SIDE.Left:
@@ -41,21 +57,15 @@ const Drawer = forwardRef((props, ref) => {
41
57
  open(child) {
42
58
  if (child)
43
59
  setContent(child);
44
- if (!window.document.body.classList.contains(`--no-scroll`))
45
- window.document.body.classList.add(`--no-scroll`);
46
60
  setVisible(true);
47
61
  },
48
62
  close() {
49
- onClose?.();
50
- if (window.document.body.classList.contains(`--no-scroll`))
51
- window.document.body.classList.remove(`--no-scroll`);
52
- setVisible(false);
63
+ closeDrawer();
53
64
  }
54
65
  }));
55
66
  return _jsxs(_Fragment, { children: [_jsx(Overlay, { onClick: (e) => {
56
67
  if (visible) {
57
- onClose?.();
58
- setVisible(false);
68
+ closeDrawer();
59
69
  }
60
70
  }, when: visible }), _jsxs(Box, { ref: divRef, style: {
61
71
  ...style,
@@ -6,5 +6,5 @@ declare const List: import("react").ForwardRefExoticComponent<import("../..").Zu
6
6
  direction?: "cols" | "rows";
7
7
  seperator?: import("react").ReactNode;
8
8
  ol?: boolean;
9
- } & import("react").RefAttributes<HTMLUListElement | HTMLOListElement>>;
9
+ } & import("react").RefAttributes<HTMLOListElement | HTMLUListElement>>;
10
10
  export default List;
@@ -18,6 +18,8 @@ export { default as Chart } from './Chart';
18
18
  export * from './Chart/types';
19
19
  export { default as CheckBox } from './CheckBox';
20
20
  export * from './CheckBox/types';
21
+ export { default as Bubble } from './ChatBubble';
22
+ export * from './ChatBubble/types';
21
23
  export { default as ColorScheme } from './ColorScheme';
22
24
  export { default as ContextMenu } from './ContextMenu';
23
25
  export * from './ContextMenu/types';
@@ -18,6 +18,8 @@ export { default as Chart } from './Chart';
18
18
  export * from './Chart/types';
19
19
  export { default as CheckBox } from './CheckBox';
20
20
  export * from './CheckBox/types';
21
+ export { default as Bubble } from './ChatBubble';
22
+ export * from './ChatBubble/types';
21
23
  export { default as ColorScheme } from './ColorScheme';
22
24
  export { default as ContextMenu } from './ContextMenu';
23
25
  export * from './ContextMenu/types';
@@ -0,0 +1,13 @@
1
+ export type CloseHandler = () => void;
2
+ declare class LayerManager {
3
+ private stack;
4
+ private readonly SCROLL_CLASS;
5
+ private updateScrollLock;
6
+ isTop(closeFn: CloseHandler): boolean;
7
+ push(closeFn: CloseHandler): void;
8
+ pop(closeFn: CloseHandler): void;
9
+ handleEscape(): boolean;
10
+ get count(): number;
11
+ }
12
+ export declare const layerManager: LayerManager;
13
+ export {};
@@ -0,0 +1,42 @@
1
+ class LayerManager {
2
+ stack = [];
3
+ SCROLL_CLASS = "--no-scroll";
4
+ updateScrollLock() {
5
+ if (typeof window === "undefined")
6
+ return;
7
+ if (this.stack.length > 0) {
8
+ document.body.classList.add(this.SCROLL_CLASS);
9
+ }
10
+ else {
11
+ document.body.classList.remove(this.SCROLL_CLASS);
12
+ }
13
+ }
14
+ isTop(closeFn) {
15
+ return this.stack[this.stack.length - 1] === closeFn;
16
+ }
17
+ // Register a component and return a function to unregister it
18
+ push(closeFn) {
19
+ // Prevent duplicate registration of the same instance
20
+ if (!this.stack.includes(closeFn)) {
21
+ this.stack.push(closeFn);
22
+ this.updateScrollLock();
23
+ }
24
+ }
25
+ pop(closeFn) {
26
+ this.stack = this.stack.filter(fn => fn !== closeFn);
27
+ this.updateScrollLock();
28
+ }
29
+ // Attempt to close the top-most layer
30
+ handleEscape() {
31
+ const top = this.stack[this.stack.length - 1];
32
+ if (top) {
33
+ top();
34
+ return true; // We handled the event
35
+ }
36
+ return false;
37
+ }
38
+ get count() {
39
+ return this.stack.length;
40
+ }
41
+ }
42
+ export const layerManager = new LayerManager();
@@ -32,5 +32,8 @@ declare const SVGIcons: {
32
32
  mouse: import("react/jsx-runtime").JSX.Element;
33
33
  addKey: import("react/jsx-runtime").JSX.Element;
34
34
  calendar: import("react/jsx-runtime").JSX.Element;
35
+ done: import("react/jsx-runtime").JSX.Element;
36
+ doneAll: import("react/jsx-runtime").JSX.Element;
37
+ pending: import("react/jsx-runtime").JSX.Element;
35
38
  };
36
39
  export default SVGIcons;
@@ -35,6 +35,9 @@ const SVGIcons = {
35
35
  mouse: _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "100%", height: "100%", viewBox: "0 0 24 24", fill: "none", children: _jsx("path", { d: "M13.2978 2.11468C13.0064 2.06339 12.75 2.29593 12.75 2.59185V5.45262C12.75 5.65098 12.8709 5.82564 13.0359 5.93583C13.5391 6.27202 13.87 6.84597 13.87 7.49906V9.49906C13.87 10.5291 13.03 11.3791 12 11.3791C10.96 11.3791 10.12 10.5291 10.12 9.49906V7.49906C10.12 6.84578 10.4583 6.27168 10.9639 5.93554C11.1291 5.82572 11.25 5.65098 11.25 5.45262V2.59249C11.25 2.29634 10.9935 2.0637 10.7019 2.11513C9.15243 2.38834 7.76579 3.13327 6.7 4.19906C5.34 5.55906 4.5 7.43906 4.5 9.49906V14.4991C4.5 18.6291 7.87 21.9991 12 21.9991C16.13 21.9991 19.5 18.6291 19.5 14.4991V9.49906C19.5 5.80857 16.813 2.73328 13.2978 2.11468Z", fill: "#292D32" }) }),
36
36
  addKey: _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "100%", height: "100%", viewBox: "0 0 24 24", fill: "none", children: _jsx("path", { d: "M20.9498 14.55L14.5598 20.94C13.1598 22.34 10.8598 22.34 9.44977 20.94L3.05977 14.55C1.65977 13.15 1.65977 10.85 3.05977 9.44L9.44977 3.05C10.8498 1.65 13.1498 1.65 14.5598 3.05L20.9498 9.44C22.3498 10.85 22.3498 13.15 20.9498 14.55Z", fill: "#292D32" }) }),
37
37
  calendar: _jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", children: [_jsx("path", { fill: "#292D32", d: "M8.25 5.75c-.41 0-.75-.34-.75-.75V2c0-.41.34-.75.75-.75S9 1.59 9 2v3c0 .41-.34.75-.75.75M15.75 5.75c-.41 0-.75-.34-.75-.75V2c0-.41.34-.75.75-.75s.75.34.75.75v3c0 .41-.34.75-.75.75M12 14.09c.52 0 .9-.31.9-.8 0-.5-.38-.79-.9-.79s-.9.29-.9.79c0 .49.38.8.9.8M12 17c.629 0 1.14-.416 1.14-.93 0-.513-.511-.93-1.14-.93-.63 0-1.14.417-1.14.93s.51.93 1.14.93" }), _jsx("path", { fill: "#292D32", d: "M19.57 4.5c-.66-.49-1.61-.02-1.61.81v.1c0 1.17-.84 2.25-2.01 2.37-1.35.14-2.49-.92-2.49-2.24V4.5c0-.55-.45-1-1-1h-.92c-.55 0-1 .45-1 1v1.04c0 .79-.41 1.49-1.03 1.88-.09.06-.19.11-.29.16q-.135.075-.3.12c-.12.04-.25.07-.39.08q-.24.03-.48 0c-.14-.01-.27-.04-.39-.08q-.15-.045-.3-.12c-.1-.05-.2-.1-.29-.16-.63-.44-1.03-1.2-1.03-2.01v-.1c0-.77-.82-1.23-1.47-.9-.01.01-.02.01-.03.02-.04.02-.07.04-.11.07-.03.03-.07.05-.1.08-.28.22-.53.47-.74.74-.11.12-.2.25-.28.38a3.498 3.498 0 0 0-.27.46c-.02.02-.03.03-.03.05-.06.12-.12.24-.16.37-.03.05-.04.09-.06.14-.06.15-.1.3-.14.45-.04.14-.07.29-.09.44a5.902 5.902 0 0 0-.06.76v8.76A4.87 4.87 0 0 0 7.37 22h9.26a4.87 4.87 0 0 0 4.87-4.87V8.37c0-1.59-.76-2.98-1.93-3.87M12 18.25c-1.55 0-2.5-.77-2.5-2.01 0-.68.35-1.27.96-1.62-.44-.31-.73-.77-.73-1.4 0-1.3 1.04-1.97 2.27-1.97s2.26.67 2.26 1.97c0 .63-.28 1.09-.73 1.4.62.35.97.94.97 1.62 0 1.24-.96 2.01-2.5 2.01" })] }),
38
+ done: _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: _jsx("path", { d: "M9 16.2 4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4z" }) }),
39
+ doneAll: _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: _jsx("path", { d: "m18 7-1.41-1.41-6.34 6.34 1.41 1.41zm4.24-1.41L11.66 16.17 7.48 12l-1.41 1.41L11.66 19l12-12zM.41 13.41 6 19l1.41-1.41L1.83 12z" }) }),
40
+ pending: _jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: [_jsx("path", { d: "M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2M12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8" }), _jsx("path", { d: "M12.5 7H11v6l5.25 3.15.75-1.23-4.5-2.67z" })] }),
38
41
  // animation: <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
39
42
  // <path fill="#292D32" d="m15.39 5.211 1.41 2.82c.19.39.7.76 1.13.84l2.55.42c1.63.27 2.01 1.45.84 2.63l-1.99 1.99c-.33.33-.52.98-.41 1.45l.57 2.46c.45 1.94-.59 2.7-2.3 1.68l-2.39-1.42c-.43-.26-1.15-.26-1.58 0l-2.39 1.42c-1.71 1.01-2.75.26-2.3-1.68l.57-2.46c.09-.48-.1-1.13-.43-1.46l-1.99-1.99c-1.17-1.17-.79-2.35.84-2.63l2.55-.42c.43-.07.94-.45 1.13-.84l1.41-2.82c.77-1.52 2.01-1.52 2.78.01M8 5.75H2c-.41 0-.75-.34-.75-.75s.34-.75.75-.75h6c.41 0 .75.34.75.75s-.34.75-.75.75M5 19.75H2c-.41 0-.75-.34-.75-.75s.34-.75.75-.75h3c.41 0 .75.34.75.75s-.34.75-.75.75M3 12.75H2c-.41 0-.75-.34-.75-.75s.34-.75.75-.75h1c.41 0 .75.34.75.75s-.34.75-.75.75" />
40
43
  // </svg>,
@@ -1 +1 @@
1
- :root{--red-50: #fef2f2;--red-100: #fee2e2;--red-200: #fecaca;--red-300: #fca5a5;--red-400: #f87171;--red-500: #ef4444;--red-600: #dc2626;--red-700: #b91c1c;--red-800: #991b1b;--red-900: #7f1d1d;--green-50: #e8f5e9;--green-100: #c8e6c9;--green-200: #a5d6a7;--green-300: #81c784;--green-400: #66bb6a;--green-500: #4caf50;--green-600: #43a047;--green-700: #388e3c;--green-800: #2e7d32;--green-900: #1b5e20;--blue-50: #e3f2fd;--blue-100: #bbdefb;--blue-200: #90caf9;--blue-300: #64b5f6;--blue-400: #42a5f5;--blue-500: #2196f3;--blue-600: #1e88e5;--blue-700: #1976d2;--blue-800: #1565c0;--blue-900: #0d47a1;--yellow-50: #fffde7;--yellow-100: #fff9c4;--yellow-200: #fff59d;--yellow-300: #fff176;--yellow-400: #ffee58;--yellow-500: #ffeb3b;--yellow-600: #fdd835;--yellow-700: #fbc02d;--yellow-800: #f9a825;--yellow-900: #f57f17;--purple-50: #f3e5f5;--purple-100: #e1bee7;--purple-200: #ce93d8;--purple-300: #ba68c8;--purple-400: #ab47bc;--purple-500: #9c27b0;--purple-600: #8e24aa;--purple-700: #7b1fa2;--purple-800: #6a1b9a;--purple-900: #4a148c;--orange-50: #fff3e0;--orange-100: #ffe0b2;--orange-200: #ffcc80;--orange-300: #ffb74d;--orange-400: #ffa726;--orange-500: #ff9800;--orange-600: #fb8c00;--orange-700: #f57c00;--orange-800: #ef6c00;--orange-900: #e65100;--white-50: rgb(255, 255, 255);--white-100: rgba(255, 255, 255, 0.1);--white-200: rgba(255, 255, 255, 0.2);--white-300: rgba(255, 255, 255, 0.3);--white-400: rgba(255, 255, 255, 0.4);--white-500: rgba(255, 255, 255, 0.5);--white-600: rgba(255, 255, 255, 0.6);--white-700: rgba(255, 255, 255, 0.7);--white-800: rgba(255, 255, 255, 0.8);--white-900: rgba(255, 255, 255, 0.9);--gray-50: #fafafa;--gray-100: #f5f5f5;--gray-200: #eeeeee;--gray-300: #e0e0e0;--gray-400: #bdbdbd;--gray-500: #9e9e9e;--gray-600: #757575;--gray-700: #616161;--gray-800: #424242;--gray-900: #212121;--black-50: #f7f7f7;--black-100: #e1e1e1;--black-200: #cfcfcf;--black-300: #b1b1b1;--black-400: #9e9e9e;--black-500: #7e7e7e;--black-600: #626262;--black-700: #515151;--black-800: #3b3b3b;--black-900: #222222;--black-1000: #000000;--pink-50: #fce4ec;--pink-100: #f8bbd0;--pink-200: #f48fb1;--pink-300: #f06292;--pink-400: #ec407a;--pink-500: #e91e63;--pink-600: #d81b60;--pink-700: #c2185b;--pink-800: #ad1457;--pink-900: #880e4f;--teal-50: #e0f2f1;--teal-100: #b2dfdb;--teal-200: #80cbc4;--teal-300: #4db6ac;--teal-400: #26a69a;--teal-500: #009688;--teal-600: #00897b;--teal-700: #00796b;--teal-800: #00695c;--teal-900: #004d40;--cyan-50: #e0f7fa;--cyan-100: #b2ebf2;--cyan-200: #80deea;--cyan-300: #4dd0e1;--cyan-400: #26c6da;--cyan-500: #00bcd4;--cyan-600: #00acc1;--cyan-700: #0097a7;--cyan-800: #00838f;--cyan-900: #006064;--lime-50: #f9fbe7;--lime-100: #f0f4c3;--lime-200: #e6ee9c;--lime-300: #dce775;--lime-400: #d4e157;--lime-500: #cddc39;--lime-600: #c0ca33;--lime-700: #afb42b;--lime-800: #9e9d24;--lime-900: #827717;--amber-50: #fff8e1;--amber-100: #ffecb3;--amber-200: #ffe082;--amber-300: #ffd54f;--amber-400: #ffca28;--amber-500: #ffc107;--amber-600: #ffb300;--amber-700: #ffa000;--amber-800: #ff8f00;--amber-900: #ff6f00;--brown-50: #efebe9;--brown-100: #d7ccc8;--brown-200: #bcaaa4;--brown-300: #a1887f;--brown-400: #8d6e63;--brown-500: #795548;--brown-600: #6d4c41;--brown-700: #5d4037;--brown-800: #4e342e;--brown-900: #3e2723;--indigo-50: #e8eaf6;--indigo-100: #c5cae9;--indigo-200: #9fa8da;--indigo-300: #7986cb;--indigo-400: #5c6bc0;--indigo-500: #3f51b5;--indigo-600: #3949ab;--indigo-700: #303f9f;--indigo-800: #283593;--indigo-900: #1a237e;--slate-50: #eceff1;--slate-100: #cfd8dc;--slate-200: #b0bec5;--slate-300: #90a4ae;--slate-400: #78909c;--slate-500: #607d8b;--slate-600: #546e7a;--slate-700: #455a64;--slate-800: #37474f;--slate-900: #263238}
1
+ :root{--red-50: #fef2f2;--red-100: #fee2e2;--red-200: #fecaca;--red-300: #fca5a5;--red-400: #f87171;--red-500: #ef4444;--red-600: #dc2626;--red-700: #b91c1c;--red-800: #991b1b;--red-900: #7f1d1d;--green-50: #e8f5e9;--green-100: #c8e6c9;--green-200: #a5d6a7;--green-300: #81c784;--green-400: #66bb6a;--green-500: #4caf50;--green-600: #43a047;--green-700: #388e3c;--green-800: #2e7d32;--green-900: #1b5e20;--blue-50: #e3f2fd;--blue-100: #bbdefb;--blue-200: #90caf9;--blue-300: #64b5f6;--blue-400: #42a5f5;--blue-500: #2196f3;--blue-600: #1e88e5;--blue-700: #1976d2;--blue-800: #1565c0;--blue-900: #0d47a1;--yellow-50: #fffde7;--yellow-100: #fff9c4;--yellow-200: #fff59d;--yellow-300: #fff176;--yellow-400: #ffee58;--yellow-500: #ffeb3b;--yellow-600: #fdd835;--yellow-700: #fbc02d;--yellow-800: #f9a825;--yellow-900: #f57f17;--purple-50: #f3e5f5;--purple-100: #e1bee7;--purple-200: #ce93d8;--purple-300: #ba68c8;--purple-400: #ab47bc;--purple-500: #9c27b0;--purple-600: #8e24aa;--purple-700: #7b1fa2;--purple-800: #6a1b9a;--purple-900: #4a148c;--orange-50: #fff3e0;--orange-100: #ffe0b2;--orange-200: #ffcc80;--orange-300: #ffb74d;--orange-400: #ffa726;--orange-500: #ff9800;--orange-600: #fb8c00;--orange-700: #f57c00;--orange-800: #ef6c00;--orange-900: #e65100;--white-50: rgb(255, 255, 255);--white-100: rgba(255, 255, 255, 0.1);--white-200: rgba(255, 255, 255, 0.2);--white-300: rgba(255, 255, 255, 0.3);--white-400: rgba(255, 255, 255, 0.4);--white-500: rgba(255, 255, 255, 0.5);--white-600: rgba(255, 255, 255, 0.6);--white-700: rgba(255, 255, 255, 0.7);--white-800: rgba(255, 255, 255, 0.8);--white-900: rgba(255, 255, 255, 0.9);--gray-50: #fafafa;--gray-100: #f5f5f5;--gray-200: #eeeeee;--gray-300: #e0e0e0;--gray-400: #bdbdbd;--gray-500: #9e9e9e;--gray-600: #757575;--gray-700: #616161;--gray-800: #424242;--gray-900: #212121;--black-50: #f7f7f7;--black-100: #e1e1e1;--black-200: #cfcfcf;--black-300: #b1b1b1;--black-400: #9e9e9e;--black-500: #7e7e7e;--black-600: #626262;--black-700: #515151;--black-800: #3b3b3b;--black-900: #222222;--black-1000: #000000;--pink-50: #fce4ec;--pink-100: #f8bbd0;--pink-200: #f48fb1;--pink-300: #f06292;--pink-400: #ec407a;--pink-500: #e91e63;--pink-600: #d81b60;--pink-700: #c2185b;--pink-800: #ad1457;--pink-900: #880e4f;--teal-50: #e0f2f1;--teal-100: #b2dfdb;--teal-200: #80cbc4;--teal-300: #4db6ac;--teal-400: #26a69a;--teal-500: #009688;--teal-600: #00897b;--teal-700: #00796b;--teal-800: #00695c;--teal-900: #004d40;--cyan-50: #e0f7fa;--cyan-100: #b2ebf2;--cyan-200: #80deea;--cyan-300: #4dd0e1;--cyan-400: #26c6da;--cyan-500: #00bcd4;--cyan-600: #00acc1;--cyan-700: #0097a7;--cyan-800: #00838f;--cyan-900: #006064;--lime-50: #f9fbe7;--lime-100: #f0f4c3;--lime-200: #e6ee9c;--lime-300: #dce775;--lime-400: #d4e157;--lime-500: #cddc39;--lime-600: #c0ca33;--lime-700: #afb42b;--lime-800: #9e9d24;--lime-900: #827717;--amber-50: #fff8e1;--amber-100: #ffecb3;--amber-200: #ffe082;--amber-300: #ffd54f;--amber-400: #ffca28;--amber-500: #ffc107;--amber-600: #ffb300;--amber-700: #ffa000;--amber-800: #ff8f00;--amber-900: #ff6f00;--brown-50: #efebe9;--brown-100: #d7ccc8;--brown-200: #bcaaa4;--brown-300: #a1887f;--brown-400: #8d6e63;--brown-500: #795548;--brown-600: #6d4c41;--brown-700: #5d4037;--brown-800: #4e342e;--brown-900: #3e2723;--indigo-50: #e8eaf6;--indigo-100: #c5cae9;--indigo-200: #9fa8da;--indigo-300: #7986cb;--indigo-400: #5c6bc0;--indigo-500: #3f51b5;--indigo-600: #3949ab;--indigo-700: #303f9f;--indigo-800: #283593;--indigo-900: #1a237e;--slate-50: #eceff1;--slate-100: #cfd8dc;--slate-200: #b0bec5;--slate-300: #90a4ae;--slate-400: #78909c;--slate-500: #607d8b;--slate-600: #546e7a;--slate-700: #455a64;--slate-800: #37474f;--slate-900: #263238;--manatee-50: #f8f9fb;--manatee-100: #f0f2f5;--manatee-200: #e5e9ef;--manatee-300: #d8dfe7;--manatee-400: #ccd5df;--manatee-500: #c5ccd7;--manatee-600: #a8b3c4;--manatee-700: #8a98ac;--manatee-800: #6e7e95;--manatee-900: #4f617a;--manatee-950: #3a4a63}