@lo-ink/ui 0.1.1 → 0.3.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/AppIcon.d.ts.map +1 -1
- package/dist/AppIcon.js +1 -1
- package/dist/Dialog.d.ts +4 -0
- package/dist/Dialog.d.ts.map +1 -0
- package/dist/Dialog.js +7 -0
- package/dist/EmptyState.d.ts +2 -1
- package/dist/EmptyState.d.ts.map +1 -1
- package/dist/EmptyState.js +3 -2
- package/dist/List.d.ts +2 -1
- package/dist/List.d.ts.map +1 -1
- package/dist/List.js +3 -2
- package/dist/Progress.d.ts +3 -0
- package/dist/Progress.d.ts.map +1 -0
- package/dist/Progress.js +5 -0
- package/dist/Surface.d.ts +7 -0
- package/dist/Surface.d.ts.map +1 -0
- package/dist/Surface.js +8 -0
- package/dist/TextArea.d.ts +8 -0
- package/dist/TextArea.d.ts.map +1 -0
- package/dist/TextArea.js +11 -0
- package/dist/TextField.d.ts +1 -0
- package/dist/TextField.d.ts.map +1 -1
- package/dist/TextField.js +2 -2
- package/dist/Typography.d.ts +12 -6
- package/dist/Typography.d.ts.map +1 -1
- package/dist/Typography.js +7 -5
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/styles.css +186 -29
- package/package.json +2 -2
- package/src/AppIcon.tsx +1 -0
- package/src/Dialog.tsx +16 -0
- package/src/EmptyState.tsx +4 -1
- package/src/List.tsx +5 -2
- package/src/Progress.tsx +11 -0
- package/src/Surface.tsx +26 -0
- package/src/TextArea.tsx +60 -0
- package/src/TextField.tsx +9 -1
- package/src/Typography.tsx +28 -10
- package/src/index.ts +10 -1
- package/src/styles.css +186 -29
package/dist/AppIcon.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppIcon.d.ts","sourceRoot":"","sources":["../src/AppIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAG1E,MAAM,WAAW,YAAa,SAAQ,cAAc,CAAC,eAAe,CAAC;IACnE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,UAAU,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC;CACvE;AAED,wBAAgB,OAAO,CAAC,EACtB,GAAG,EACH,GAAQ,EACR,IAAe,EACf,QAAQ,EACR,UAAU,EACV,SAAS,EACT,GAAG,KAAK,EACT,EAAE,YAAY,+
|
|
1
|
+
{"version":3,"file":"AppIcon.d.ts","sourceRoot":"","sources":["../src/AppIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAG1E,MAAM,WAAW,YAAa,SAAQ,cAAc,CAAC,eAAe,CAAC;IACnE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,UAAU,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC;CACvE;AAED,wBAAgB,OAAO,CAAC,EACtB,GAAG,EACH,GAAQ,EACR,IAAe,EACf,QAAQ,EACR,UAAU,EACV,SAAS,EACT,GAAG,KAAK,EACT,EAAE,YAAY,+BAcd"}
|
package/dist/AppIcon.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { classes } from "./utils.js";
|
|
3
3
|
export function AppIcon({ src, alt = "", size = "medium", children, imageProps, className, ...props }) {
|
|
4
|
-
return (_jsx("span", { ...props, className: classes("lo-ui-app-icon", `lo-ui-app-icon--${size}`, className), children: src ? _jsx("img", { ...imageProps, src: src, alt: alt }) : children }));
|
|
4
|
+
return (_jsx("span", { ...props, role: props.role ?? (!src && props["aria-label"] ? "img" : undefined), className: classes("lo-ui-app-icon", `lo-ui-app-icon--${size}`, className), children: src ? _jsx("img", { ...imageProps, src: src, alt: alt }) : children }));
|
|
5
5
|
}
|
package/dist/Dialog.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type DialogHTMLAttributes } from "react";
|
|
2
|
+
/** Native modal semantics; the caller controls showModal(), close() and cancellation. */
|
|
3
|
+
export declare const Dialog: import("react").ForwardRefExoticComponent<DialogHTMLAttributes<HTMLDialogElement> & import("react").RefAttributes<HTMLDialogElement>>;
|
|
4
|
+
//# sourceMappingURL=Dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../src/Dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAG9D,yFAAyF;AACzF,eAAO,MAAM,MAAM,uIAWjB,CAAC"}
|
package/dist/Dialog.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef } from "react";
|
|
3
|
+
import { classes } from "./utils.js";
|
|
4
|
+
/** Native modal semantics; the caller controls showModal(), close() and cancellation. */
|
|
5
|
+
export const Dialog = forwardRef(function Dialog({ className, ...props }, ref) {
|
|
6
|
+
return (_jsx("dialog", { ...props, ref: ref, className: classes("lo-ui-dialog", className) }));
|
|
7
|
+
});
|
package/dist/EmptyState.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
2
|
export interface EmptyStateProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
|
|
3
3
|
title: ReactNode;
|
|
4
|
+
headingLevel?: 2 | 3 | 4 | 5 | 6;
|
|
4
5
|
description?: ReactNode;
|
|
5
6
|
icon?: ReactNode;
|
|
6
7
|
action?: ReactNode;
|
|
7
8
|
}
|
|
8
|
-
export declare function EmptyState({ title, description, icon, action, className, ...props }: EmptyStateProps): import("react").JSX.Element;
|
|
9
|
+
export declare function EmptyState({ title, headingLevel, description, icon, action, className, ...props }: EmptyStateProps): import("react").JSX.Element;
|
|
9
10
|
//# sourceMappingURL=EmptyState.d.ts.map
|
package/dist/EmptyState.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmptyState.d.ts","sourceRoot":"","sources":["../src/EmptyState.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvD,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAC3C,cAAc,CAAC,cAAc,CAAC,EAC9B,OAAO,CACR;IACC,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,WAAW,EACX,IAAI,EACJ,MAAM,EACN,SAAS,EACT,GAAG,KAAK,EACT,EAAE,eAAe,+
|
|
1
|
+
{"version":3,"file":"EmptyState.d.ts","sourceRoot":"","sources":["../src/EmptyState.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvD,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAC3C,cAAc,CAAC,cAAc,CAAC,EAC9B,OAAO,CACR;IACC,KAAK,EAAE,SAAS,CAAC;IACjB,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,YAAgB,EAChB,WAAW,EACX,IAAI,EACJ,MAAM,EACN,SAAS,EACT,GAAG,KAAK,EACT,EAAE,eAAe,+BAgBjB"}
|
package/dist/EmptyState.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { classes } from "./utils.js";
|
|
3
|
-
export function EmptyState({ title, description, icon, action, className, ...props }) {
|
|
4
|
-
|
|
3
|
+
export function EmptyState({ title, headingLevel = 2, description, icon, action, className, ...props }) {
|
|
4
|
+
const Tag = `h${headingLevel}`;
|
|
5
|
+
return (_jsxs("div", { ...props, className: classes("lo-ui-empty-state", className), children: [icon && (_jsx("div", { className: "lo-ui-empty-state__icon", "aria-hidden": "true", children: icon })), _jsx(Tag, { className: "lo-ui-empty-state__title", children: title }), description && (_jsx("p", { className: "lo-ui-empty-state__description", children: description })), action && _jsx("div", { className: "lo-ui-empty-state__action", children: action })] }));
|
|
5
6
|
}
|
package/dist/List.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { type HTMLAttributes, type ReactNode } from "react";
|
|
2
2
|
export interface ListProps extends HTMLAttributes<HTMLUListElement> {
|
|
3
3
|
label?: ReactNode;
|
|
4
|
+
headingLevel?: 2 | 3 | 4 | 5 | 6;
|
|
4
5
|
}
|
|
5
|
-
export declare function List({ label, children, className, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, ...props }: ListProps): import("react").JSX.Element;
|
|
6
|
+
export declare function List({ label, headingLevel, children, className, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, ...props }: ListProps): import("react").JSX.Element;
|
|
6
7
|
export interface CellProps extends Omit<HTMLAttributes<HTMLLIElement>, "title"> {
|
|
7
8
|
title: ReactNode;
|
|
8
9
|
subtitle?: ReactNode;
|
package/dist/List.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"List.d.ts","sourceRoot":"","sources":["../src/List.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG/E,MAAM,WAAW,SAAU,SAAQ,cAAc,CAAC,gBAAgB,CAAC;IACjE,KAAK,CAAC,EAAE,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"List.d.ts","sourceRoot":"","sources":["../src/List.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG/E,MAAM,WAAW,SAAU,SAAQ,cAAc,CAAC,gBAAgB,CAAC;IACjE,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CAClC;AAED,wBAAgB,IAAI,CAAC,EACnB,KAAK,EACL,YAAgB,EAChB,QAAQ,EACR,SAAS,EACT,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,EACjC,GAAG,KAAK,EACT,EAAE,SAAS,+BAuBX;AAED,MAAM,WAAW,SAAU,SAAQ,IAAI,CACrC,cAAc,CAAC,aAAa,CAAC,EAC7B,OAAO,CACR;IACC,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,wEAAwE;IACxE,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,IAAI,qGA6Df,CAAC"}
|
package/dist/List.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef, useId } from "react";
|
|
3
3
|
import { classes } from "./utils.js";
|
|
4
|
-
export function List({ label, children, className, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, ...props }) {
|
|
4
|
+
export function List({ label, headingLevel = 2, children, className, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, ...props }) {
|
|
5
|
+
const Tag = `h${headingLevel}`;
|
|
5
6
|
const generatedId = useId();
|
|
6
7
|
const labelId = label ? `${generatedId}-label` : undefined;
|
|
7
8
|
const effectiveLabelledBy = ariaLabelledBy ?? (ariaLabel === undefined ? labelId : undefined);
|
|
8
|
-
return (_jsxs("section", { className: "lo-ui-list-section", children: [label && (_jsx(
|
|
9
|
+
return (_jsxs("section", { className: "lo-ui-list-section", children: [label && (_jsx(Tag, { className: "lo-ui-list-label", id: labelId, children: label })), _jsx("ul", { ...props, "aria-label": ariaLabel, "aria-labelledby": effectiveLabelledBy, className: classes("lo-ui-list", className), children: children })] }));
|
|
9
10
|
}
|
|
10
11
|
export const Cell = forwardRef(function Cell({ title, subtitle, leading, trailing, trailingAction, onPress, disabled = false, className, ...props }, ref) {
|
|
11
12
|
const content = (_jsxs(_Fragment, { children: [leading && _jsx("span", { className: "lo-ui-cell__leading", children: leading }), _jsxs("span", { className: "lo-ui-cell__body", children: [_jsx("span", { className: "lo-ui-cell__title", children: title }), subtitle && _jsx("span", { className: "lo-ui-cell__subtitle", children: subtitle })] }), trailing && _jsx("span", { className: "lo-ui-cell__trailing", children: trailing }), onPress && !trailing && !trailingAction && (_jsx("svg", { className: "lo-ui-cell__chevron", viewBox: "0 0 20 20", "aria-hidden": "true", children: _jsx("path", { d: "m7.5 4 6 6-6 6" }) }))] }));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Progress.d.ts","sourceRoot":"","sources":["../src/Progress.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,OAAO,CAAC;AAGpD,wBAAgB,QAAQ,CAAC,EACvB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,sBAAsB,CAAC,mBAAmB,CAAC,+BAI7C"}
|
package/dist/Progress.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { HTMLAttributes } from "react";
|
|
2
|
+
import type { SpacingToken } from "@lo-ink/design-tokens";
|
|
3
|
+
export interface SurfaceProps extends HTMLAttributes<HTMLElement> {
|
|
4
|
+
padding?: SpacingToken;
|
|
5
|
+
}
|
|
6
|
+
export declare function Surface({ padding, className, style, ...props }: SurfaceProps): import("react").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=Surface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Surface.d.ts","sourceRoot":"","sources":["../src/Surface.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,cAAc,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAG1D,MAAM,WAAW,YAAa,SAAQ,cAAc,CAAC,WAAW,CAAC;IAC/D,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;AACD,wBAAgB,OAAO,CAAC,EACtB,OAAW,EACX,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACT,EAAE,YAAY,+BAad"}
|
package/dist/Surface.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { classes } from "./utils.js";
|
|
3
|
+
export function Surface({ padding = 4, className, style, ...props }) {
|
|
4
|
+
return (_jsx("section", { ...props, className: classes("lo-ui-surface", className), style: {
|
|
5
|
+
"--lo-surface-padding": `var(--lo-space-${padding})`,
|
|
6
|
+
...style,
|
|
7
|
+
} }));
|
|
8
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type ReactNode, type TextareaHTMLAttributes } from "react";
|
|
2
|
+
export interface TextAreaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {
|
|
3
|
+
label: ReactNode;
|
|
4
|
+
description?: ReactNode;
|
|
5
|
+
error?: ReactNode;
|
|
6
|
+
}
|
|
7
|
+
export declare const TextArea: import("react").ForwardRefExoticComponent<TextAreaProps & import("react").RefAttributes<HTMLTextAreaElement>>;
|
|
8
|
+
//# sourceMappingURL=TextArea.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextArea.d.ts","sourceRoot":"","sources":["../src/TextArea.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,sBAAsB,EAC5B,MAAM,OAAO,CAAC;AAGf,MAAM,WAAW,aAAc,SAAQ,sBAAsB,CAAC,mBAAmB,CAAC;IAChF,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AACD,eAAO,MAAM,QAAQ,+GA8CpB,CAAC"}
|
package/dist/TextArea.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef, useId, } from "react";
|
|
3
|
+
import { classes } from "./utils.js";
|
|
4
|
+
export const TextArea = forwardRef(function TextArea({ label, description, error, id: providedId, className, "aria-describedby": describedBy, ...props }, ref) {
|
|
5
|
+
const generatedId = useId();
|
|
6
|
+
const id = providedId ?? generatedId;
|
|
7
|
+
const descriptionId = description ? `${id}-description` : undefined;
|
|
8
|
+
const errorId = error ? `${id}-error` : undefined;
|
|
9
|
+
return (_jsxs("div", { className: classes("lo-ui-field", className), children: [_jsx("label", { className: "lo-ui-field__label", htmlFor: id, children: label }), _jsx("textarea", { ...props, ref: ref, id: id, "aria-invalid": error ? true : props["aria-invalid"], "aria-describedby": [describedBy, descriptionId, errorId].filter(Boolean).join(" ") ||
|
|
10
|
+
undefined, className: "lo-ui-field__input lo-ui-textarea" }), description && (_jsx("div", { className: "lo-ui-field__description", id: descriptionId, children: description })), error && (_jsx("div", { className: "lo-ui-field__error", id: errorId, children: error }))] }));
|
|
11
|
+
});
|
package/dist/TextField.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export interface TextFieldProps extends Omit<InputHTMLAttributes<HTMLInputElemen
|
|
|
4
4
|
description?: ReactNode;
|
|
5
5
|
error?: ReactNode;
|
|
6
6
|
inputClassName?: string;
|
|
7
|
+
labelHidden?: boolean;
|
|
7
8
|
}
|
|
8
9
|
export declare const TextField: import("react").ForwardRefExoticComponent<TextFieldProps & import("react").RefAttributes<HTMLInputElement>>;
|
|
9
10
|
//# sourceMappingURL=TextField.d.ts.map
|
package/dist/TextField.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextField.d.ts","sourceRoot":"","sources":["../src/TextField.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,MAAM,WAAW,cAAe,SAAQ,IAAI,CAC1C,mBAAmB,CAAC,gBAAgB,CAAC,EACrC,MAAM,CACP;IACC,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"TextField.d.ts","sourceRoot":"","sources":["../src/TextField.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,MAAM,WAAW,cAAe,SAAQ,IAAI,CAC1C,mBAAmB,CAAC,gBAAgB,CAAC,EACrC,MAAM,CACP;IACC,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,eAAO,MAAM,SAAS,6GAuDrB,CAAC"}
|
package/dist/TextField.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef, useId, } from "react";
|
|
3
3
|
import { classes } from "./utils.js";
|
|
4
|
-
export const TextField = forwardRef(function TextField({ label, description, error, id: providedId, className, inputClassName, "aria-describedby": ariaDescribedBy, ...props }, ref) {
|
|
4
|
+
export const TextField = forwardRef(function TextField({ label, description, error, id: providedId, className, inputClassName, labelHidden = false, "aria-describedby": ariaDescribedBy, ...props }, ref) {
|
|
5
5
|
const generatedId = useId();
|
|
6
6
|
const id = providedId ?? generatedId;
|
|
7
7
|
const descriptionId = description ? `${id}-description` : undefined;
|
|
@@ -9,5 +9,5 @@ export const TextField = forwardRef(function TextField({ label, description, err
|
|
|
9
9
|
const describedBy = [ariaDescribedBy, descriptionId, errorId]
|
|
10
10
|
.filter(Boolean)
|
|
11
11
|
.join(" ");
|
|
12
|
-
return (_jsxs("div", { className: classes("lo-ui-field", className), children: [_jsx("label", { className: "lo-ui-field__label", htmlFor: id, children: label }), _jsx("input", { ...props, ref: ref, id: id, "aria-invalid": error ? true : props["aria-invalid"], "aria-describedby": describedBy || undefined, className: classes("lo-ui-field__input", inputClassName) }), description && (_jsx("div", { className: "lo-ui-field__description", id: descriptionId, children: description })), error && (_jsx("div", { className: "lo-ui-field__error", id: errorId, children: error }))] }));
|
|
12
|
+
return (_jsxs("div", { className: classes("lo-ui-field", labelHidden && "lo-ui-field--label-hidden", className), children: [_jsx("label", { className: "lo-ui-field__label", htmlFor: id, children: label }), _jsx("input", { ...props, ref: ref, id: id, "aria-invalid": error ? true : props["aria-invalid"], "aria-describedby": describedBy || undefined, className: classes("lo-ui-field__input", inputClassName) }), description && (_jsx("div", { className: "lo-ui-field__description", id: descriptionId, children: description })), error && (_jsx("div", { className: "lo-ui-field__error", id: errorId, children: error }))] }));
|
|
13
13
|
});
|
package/dist/Typography.d.ts
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
|
-
import type
|
|
2
|
-
export interface TextProps extends HTMLAttributes<
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { type HTMLAttributes } from "react";
|
|
2
|
+
export interface TextProps extends HTMLAttributes<HTMLElement> {
|
|
3
|
+
as?: "p" | "span" | "strong" | "code" | "pre";
|
|
4
|
+
tone?: "primary" | "secondary" | "danger" | "success";
|
|
5
|
+
weight?: "regular" | "medium" | "bold";
|
|
6
|
+
family?: "ui" | "display" | "mono";
|
|
7
|
+
size?: "caption" | "label" | "body" | "title" | "display";
|
|
5
8
|
}
|
|
6
|
-
export declare function Text({ tone, size, className, ...props }: TextProps): import("react").JSX.Element;
|
|
7
|
-
export
|
|
9
|
+
export declare function Text({ as: Tag, tone, weight, family, size, className, ...props }: TextProps): import("react").JSX.Element;
|
|
10
|
+
export interface HeadingProps extends HTMLAttributes<HTMLHeadingElement> {
|
|
11
|
+
level?: 1 | 2 | 3 | 4 | 5 | 6;
|
|
12
|
+
}
|
|
13
|
+
export declare const Heading: import("react").ForwardRefExoticComponent<HeadingProps & import("react").RefAttributes<HTMLHeadingElement>>;
|
|
8
14
|
//# sourceMappingURL=Typography.d.ts.map
|
package/dist/Typography.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Typography.d.ts","sourceRoot":"","sources":["../src/Typography.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"Typography.d.ts","sourceRoot":"","sources":["../src/Typography.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AAGxD,MAAM,WAAW,SAAU,SAAQ,cAAc,CAAC,WAAW,CAAC;IAC5D,EAAE,CAAC,EAAE,GAAG,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;IAC9C,IAAI,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;IACtD,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;IACvC,MAAM,CAAC,EAAE,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC;IACnC,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CAC3D;AAED,wBAAgB,IAAI,CAAC,EACnB,EAAE,EAAE,GAAS,EACb,IAAgB,EAChB,MAAM,EACN,MAAM,EACN,IAAa,EACb,SAAS,EACT,GAAG,KAAK,EACT,EAAE,SAAS,+BAcX;AAED,MAAM,WAAW,YAAa,SAAQ,cAAc,CAAC,kBAAkB,CAAC;IACtE,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CAC/B;AAED,eAAO,MAAM,OAAO,6GAWnB,CAAC"}
|
package/dist/Typography.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef } from "react";
|
|
2
3
|
import { classes } from "./utils.js";
|
|
3
|
-
export function Text({ tone = "primary", size = "body", className, ...props }) {
|
|
4
|
-
return (_jsx(
|
|
5
|
-
}
|
|
6
|
-
export function Heading({ className, ...props }) {
|
|
7
|
-
return _jsx("h1", { ...props, className: classes("lo-ui-heading", className) });
|
|
4
|
+
export function Text({ as: Tag = "p", tone = "primary", weight, family, size = "body", className, ...props }) {
|
|
5
|
+
return (_jsx(Tag, { ...props, className: classes("lo-ui-text", `lo-ui-text--${tone}`, `lo-ui-text--${size}`, weight && `lo-ui-text--weight-${weight}`, family && `lo-ui-text--family-${family}`, className) }));
|
|
8
6
|
}
|
|
7
|
+
export const Heading = forwardRef(function Heading({ level = 1, className, ...props }, ref) {
|
|
8
|
+
const Tag = `h${level}`;
|
|
9
|
+
return (_jsx(Tag, { ...props, ref: ref, className: classes("lo-ui-heading", className) }));
|
|
10
|
+
});
|
package/dist/index.d.ts
CHANGED
|
@@ -5,5 +5,9 @@ export { Inline, Stack } from "./Layout.js";
|
|
|
5
5
|
export { Cell, List, type CellProps, type ListProps } from "./List.js";
|
|
6
6
|
export { Checkbox, Switch, type SelectionControlProps, } from "./SelectionControl.js";
|
|
7
7
|
export { TextField, type TextFieldProps } from "./TextField.js";
|
|
8
|
-
export { Heading, Text, type TextProps } from "./Typography.js";
|
|
8
|
+
export { Heading, Text, type HeadingProps, type TextProps, } from "./Typography.js";
|
|
9
|
+
export { TextArea, type TextAreaProps } from "./TextArea.js";
|
|
10
|
+
export { Surface, type SurfaceProps } from "./Surface.js";
|
|
11
|
+
export { Dialog } from "./Dialog.js";
|
|
12
|
+
export { Progress } from "./Progress.js";
|
|
9
13
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EACL,QAAQ,EACR,MAAM,EACN,KAAK,qBAAqB,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EACL,QAAQ,EACR,MAAM,EACN,KAAK,qBAAqB,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EACL,OAAO,EACP,IAAI,EACJ,KAAK,YAAY,EACjB,KAAK,SAAS,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -5,4 +5,8 @@ export { Inline, Stack } from "./Layout.js";
|
|
|
5
5
|
export { Cell, List } from "./List.js";
|
|
6
6
|
export { Checkbox, Switch, } from "./SelectionControl.js";
|
|
7
7
|
export { TextField } from "./TextField.js";
|
|
8
|
-
export { Heading, Text } from "./Typography.js";
|
|
8
|
+
export { Heading, Text, } from "./Typography.js";
|
|
9
|
+
export { TextArea } from "./TextArea.js";
|
|
10
|
+
export { Surface } from "./Surface.js";
|
|
11
|
+
export { Dialog } from "./Dialog.js";
|
|
12
|
+
export { Progress } from "./Progress.js";
|
package/dist/styles.css
CHANGED
|
@@ -13,12 +13,16 @@
|
|
|
13
13
|
box-sizing: border-box;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
:where(.lo-ui-root button, .lo-ui-root input) {
|
|
16
|
+
:where(.lo-ui-root button, .lo-ui-root input, .lo-ui-root textarea) {
|
|
17
17
|
font: inherit;
|
|
18
18
|
-webkit-tap-highlight-color: transparent;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
:where(
|
|
21
|
+
:where(
|
|
22
|
+
.lo-ui-root button,
|
|
23
|
+
.lo-ui-root input,
|
|
24
|
+
.lo-ui-root textarea
|
|
25
|
+
):focus-visible {
|
|
22
26
|
outline: 3px solid var(--lo-color-focus);
|
|
23
27
|
outline-offset: 2px;
|
|
24
28
|
}
|
|
@@ -27,7 +31,12 @@
|
|
|
27
31
|
min-height: var(--lo-size-control);
|
|
28
32
|
padding: 0 var(--lo-space-5);
|
|
29
33
|
border: 1px solid transparent;
|
|
30
|
-
border-radius: var(--lo-radius-
|
|
34
|
+
border-radius: var(--lo-radius-full);
|
|
35
|
+
min-width: 0;
|
|
36
|
+
max-width: 100%;
|
|
37
|
+
white-space: normal;
|
|
38
|
+
overflow-wrap: anywhere;
|
|
39
|
+
text-align: center;
|
|
31
40
|
display: inline-flex;
|
|
32
41
|
align-items: center;
|
|
33
42
|
justify-content: center;
|
|
@@ -62,7 +71,7 @@
|
|
|
62
71
|
|
|
63
72
|
.lo-ui-button--primary {
|
|
64
73
|
color: var(--lo-color-accent-contrast);
|
|
65
|
-
background: var(--lo-color-accent);
|
|
74
|
+
background: var(--lo-color-accent-fill);
|
|
66
75
|
}
|
|
67
76
|
|
|
68
77
|
.lo-ui-button--primary:hover:not(:disabled) {
|
|
@@ -70,12 +79,19 @@
|
|
|
70
79
|
}
|
|
71
80
|
|
|
72
81
|
.lo-ui-button--secondary {
|
|
73
|
-
color: var(--lo-color-text);
|
|
74
|
-
background: var(--lo-color-
|
|
75
|
-
border-color:
|
|
82
|
+
color: var(--lo-color-accent-text);
|
|
83
|
+
background: var(--lo-color-accent-soft);
|
|
84
|
+
border-color: transparent;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.lo-ui-button--secondary:hover:not(:disabled) {
|
|
88
|
+
background: color-mix(
|
|
89
|
+
in srgb,
|
|
90
|
+
var(--lo-color-accent) 20%,
|
|
91
|
+
var(--lo-color-surface)
|
|
92
|
+
);
|
|
76
93
|
}
|
|
77
94
|
|
|
78
|
-
.lo-ui-button--secondary:hover:not(:disabled),
|
|
79
95
|
.lo-ui-button--quiet:hover:not(:disabled) {
|
|
80
96
|
background: var(--lo-color-accent-soft);
|
|
81
97
|
}
|
|
@@ -91,7 +107,7 @@
|
|
|
91
107
|
}
|
|
92
108
|
|
|
93
109
|
.lo-ui-button--quiet {
|
|
94
|
-
color: var(--lo-color-accent);
|
|
110
|
+
color: var(--lo-color-accent-text);
|
|
95
111
|
background: transparent;
|
|
96
112
|
}
|
|
97
113
|
|
|
@@ -135,7 +151,7 @@
|
|
|
135
151
|
padding: 10px var(--lo-space-3);
|
|
136
152
|
color: var(--lo-color-text);
|
|
137
153
|
background: var(--lo-color-surface);
|
|
138
|
-
border: 1px solid var(--lo-color-border);
|
|
154
|
+
border: 1px solid var(--lo-color-control-border);
|
|
139
155
|
border-radius: var(--lo-radius-md);
|
|
140
156
|
font-size: 16px;
|
|
141
157
|
transition:
|
|
@@ -209,7 +225,8 @@
|
|
|
209
225
|
justify-content: center;
|
|
210
226
|
}
|
|
211
227
|
|
|
212
|
-
.lo-ui-selection--control-only .lo-ui-selection__copy
|
|
228
|
+
.lo-ui-selection--control-only .lo-ui-selection__copy,
|
|
229
|
+
.lo-ui-field--label-hidden .lo-ui-field__label {
|
|
213
230
|
position: absolute;
|
|
214
231
|
width: 1px;
|
|
215
232
|
height: 1px;
|
|
@@ -228,7 +245,7 @@
|
|
|
228
245
|
padding: 2px;
|
|
229
246
|
border: 0;
|
|
230
247
|
border-radius: var(--lo-radius-full);
|
|
231
|
-
background: var(--lo-color-border);
|
|
248
|
+
background: var(--lo-color-control-border);
|
|
232
249
|
cursor: pointer;
|
|
233
250
|
transition: background-color var(--lo-motion-fast) var(--lo-ease-out);
|
|
234
251
|
}
|
|
@@ -245,7 +262,7 @@
|
|
|
245
262
|
}
|
|
246
263
|
|
|
247
264
|
.lo-ui-switch:checked {
|
|
248
|
-
background: var(--lo-color-accent);
|
|
265
|
+
background: var(--lo-color-accent-fill);
|
|
249
266
|
}
|
|
250
267
|
|
|
251
268
|
.lo-ui-switch:checked::after {
|
|
@@ -265,7 +282,7 @@
|
|
|
265
282
|
margin: 0;
|
|
266
283
|
display: grid;
|
|
267
284
|
place-items: center;
|
|
268
|
-
border: 1.5px solid var(--lo-color-border);
|
|
285
|
+
border: 1.5px solid var(--lo-color-control-border);
|
|
269
286
|
border-radius: 7px;
|
|
270
287
|
background: var(--lo-color-surface);
|
|
271
288
|
cursor: pointer;
|
|
@@ -282,8 +299,13 @@
|
|
|
282
299
|
}
|
|
283
300
|
|
|
284
301
|
.lo-ui-checkbox:checked {
|
|
285
|
-
background: var(--lo-color-accent);
|
|
286
|
-
border-color: var(--lo-color-accent);
|
|
302
|
+
background: var(--lo-color-accent-fill);
|
|
303
|
+
border-color: var(--lo-color-accent-fill);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
.lo-ui-checkbox:disabled {
|
|
307
|
+
cursor: default;
|
|
308
|
+
opacity: 0.5;
|
|
287
309
|
}
|
|
288
310
|
|
|
289
311
|
.lo-ui-checkbox:checked::after {
|
|
@@ -384,6 +406,7 @@
|
|
|
384
406
|
|
|
385
407
|
.lo-ui-cell__title {
|
|
386
408
|
font-size: var(--lo-font-size-body);
|
|
409
|
+
font-weight: var(--lo-font-weight-medium);
|
|
387
410
|
}
|
|
388
411
|
|
|
389
412
|
.lo-ui-cell__subtitle {
|
|
@@ -424,19 +447,24 @@
|
|
|
424
447
|
place-items: center;
|
|
425
448
|
border-radius: 11px;
|
|
426
449
|
color: var(--lo-color-accent-contrast);
|
|
427
|
-
background: var(--lo-color-accent);
|
|
450
|
+
background: var(--lo-color-accent-fill);
|
|
451
|
+
font-size: 18px;
|
|
452
|
+
font-weight: var(--lo-font-weight-medium);
|
|
453
|
+
line-height: 1;
|
|
428
454
|
}
|
|
429
455
|
|
|
430
456
|
.lo-ui-app-icon--small {
|
|
431
457
|
width: 32px;
|
|
432
458
|
height: 32px;
|
|
433
459
|
border-radius: 8px;
|
|
460
|
+
font-size: 14px;
|
|
434
461
|
}
|
|
435
462
|
|
|
436
463
|
.lo-ui-app-icon--large {
|
|
437
464
|
width: 64px;
|
|
438
465
|
height: 64px;
|
|
439
466
|
border-radius: 16px;
|
|
467
|
+
font-size: 26px;
|
|
440
468
|
}
|
|
441
469
|
|
|
442
470
|
.lo-ui-app-icon > img {
|
|
@@ -452,28 +480,25 @@
|
|
|
452
480
|
}
|
|
453
481
|
|
|
454
482
|
.lo-ui-empty-state {
|
|
455
|
-
|
|
456
|
-
padding: var(--lo-space-8) var(--lo-space-6);
|
|
483
|
+
padding: 30px 15px;
|
|
457
484
|
display: flex;
|
|
458
485
|
flex-direction: column;
|
|
459
486
|
align-items: center;
|
|
460
487
|
justify-content: center;
|
|
461
|
-
gap:
|
|
488
|
+
gap: 10px;
|
|
462
489
|
text-align: center;
|
|
463
|
-
border: 1px
|
|
464
|
-
border-radius: var(--lo-radius-lg);
|
|
490
|
+
border: 1px solid color-mix(in srgb, var(--lo-color-accent) 4%, transparent);
|
|
491
|
+
border-radius: calc(var(--lo-radius-lg) + 2px);
|
|
465
492
|
background: var(--lo-color-surface);
|
|
466
493
|
}
|
|
467
494
|
|
|
468
495
|
.lo-ui-empty-state__icon {
|
|
469
496
|
width: 52px;
|
|
470
497
|
height: 52px;
|
|
471
|
-
margin-bottom:
|
|
498
|
+
margin-bottom: 5px;
|
|
472
499
|
display: grid;
|
|
473
500
|
place-items: center;
|
|
474
|
-
|
|
475
|
-
color: var(--lo-color-accent);
|
|
476
|
-
background: var(--lo-color-accent-soft);
|
|
501
|
+
color: var(--lo-color-accent-text);
|
|
477
502
|
}
|
|
478
503
|
|
|
479
504
|
.lo-ui-empty-state__icon > svg {
|
|
@@ -489,18 +514,20 @@
|
|
|
489
514
|
}
|
|
490
515
|
|
|
491
516
|
.lo-ui-empty-state__title {
|
|
492
|
-
font-
|
|
517
|
+
font-family: var(--lo-font-family);
|
|
518
|
+
color: var(--lo-color-text);
|
|
519
|
+
font-size: 26px;
|
|
493
520
|
line-height: var(--lo-line-height-tight);
|
|
494
521
|
}
|
|
495
522
|
|
|
496
523
|
.lo-ui-empty-state__description {
|
|
497
524
|
max-width: 36ch;
|
|
498
525
|
color: var(--lo-color-text-secondary);
|
|
499
|
-
font-size: var(--lo-font-size-
|
|
526
|
+
font-size: var(--lo-font-size-body);
|
|
500
527
|
}
|
|
501
528
|
|
|
502
529
|
.lo-ui-empty-state__action {
|
|
503
|
-
margin-top:
|
|
530
|
+
margin-top: 5px;
|
|
504
531
|
}
|
|
505
532
|
|
|
506
533
|
.lo-ui-stack,
|
|
@@ -519,11 +546,15 @@
|
|
|
519
546
|
}
|
|
520
547
|
|
|
521
548
|
.lo-ui-heading {
|
|
549
|
+
font-family: var(--lo-font-family);
|
|
550
|
+
color: var(--lo-color-text);
|
|
551
|
+
font-weight: var(--lo-font-weight-bold);
|
|
522
552
|
font-size: var(--lo-font-size-title);
|
|
523
553
|
line-height: var(--lo-line-height-tight);
|
|
524
554
|
}
|
|
525
555
|
|
|
526
556
|
.lo-ui-text {
|
|
557
|
+
color: var(--lo-color-text);
|
|
527
558
|
line-height: var(--lo-line-height-body);
|
|
528
559
|
}
|
|
529
560
|
|
|
@@ -558,3 +589,129 @@
|
|
|
558
589
|
animation: none;
|
|
559
590
|
}
|
|
560
591
|
}
|
|
592
|
+
|
|
593
|
+
.lo-ui-surface {
|
|
594
|
+
min-width: 0;
|
|
595
|
+
padding: var(--lo-surface-padding);
|
|
596
|
+
border: 1px solid var(--lo-color-border);
|
|
597
|
+
border-radius: var(--lo-radius-lg);
|
|
598
|
+
background: var(--lo-color-surface);
|
|
599
|
+
color: var(--lo-color-text);
|
|
600
|
+
}
|
|
601
|
+
.lo-ui-dialog {
|
|
602
|
+
box-sizing: border-box;
|
|
603
|
+
width: min(560px, calc(100% - 32px));
|
|
604
|
+
max-height: calc(100dvh - 32px);
|
|
605
|
+
overflow-y: auto;
|
|
606
|
+
padding: var(--lo-space-5);
|
|
607
|
+
border: 1px solid var(--lo-color-border);
|
|
608
|
+
border-radius: var(--lo-radius-lg);
|
|
609
|
+
color: var(--lo-color-text);
|
|
610
|
+
background: var(--lo-color-surface);
|
|
611
|
+
}
|
|
612
|
+
.lo-ui-dialog::backdrop {
|
|
613
|
+
background: #12162466;
|
|
614
|
+
}
|
|
615
|
+
.lo-ui-textarea {
|
|
616
|
+
resize: vertical;
|
|
617
|
+
line-height: var(--lo-line-height-body);
|
|
618
|
+
}
|
|
619
|
+
.lo-ui-field__input[type="file"] {
|
|
620
|
+
padding: var(--lo-space-2);
|
|
621
|
+
}
|
|
622
|
+
.lo-ui-field__input::file-selector-button {
|
|
623
|
+
font: inherit;
|
|
624
|
+
color: var(--lo-color-accent-text);
|
|
625
|
+
background: var(--lo-color-accent-soft);
|
|
626
|
+
border: 0;
|
|
627
|
+
border-radius: var(--lo-radius-full);
|
|
628
|
+
padding: var(--lo-space-2) var(--lo-space-3);
|
|
629
|
+
margin-right: var(--lo-space-2);
|
|
630
|
+
cursor: pointer;
|
|
631
|
+
}
|
|
632
|
+
.lo-ui-progress {
|
|
633
|
+
display: block;
|
|
634
|
+
appearance: none;
|
|
635
|
+
border: 0;
|
|
636
|
+
width: 100%;
|
|
637
|
+
height: 10px;
|
|
638
|
+
border-radius: var(--lo-radius-full);
|
|
639
|
+
overflow: hidden;
|
|
640
|
+
background: var(--lo-color-border);
|
|
641
|
+
color: var(--lo-color-accent);
|
|
642
|
+
}
|
|
643
|
+
.lo-ui-progress::-webkit-progress-bar {
|
|
644
|
+
background: var(--lo-color-border);
|
|
645
|
+
}
|
|
646
|
+
.lo-ui-progress::-webkit-progress-value {
|
|
647
|
+
background: var(--lo-color-accent);
|
|
648
|
+
border-radius: var(--lo-radius-full);
|
|
649
|
+
}
|
|
650
|
+
.lo-ui-progress::-moz-progress-bar {
|
|
651
|
+
background: var(--lo-color-accent);
|
|
652
|
+
border-radius: var(--lo-radius-full);
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
:where(.lo-ui-root code, .lo-ui-root pre) {
|
|
656
|
+
font-family: var(--lo-font-family-mono);
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
.lo-ui-app-icon:has(> img) {
|
|
660
|
+
background: transparent;
|
|
661
|
+
}
|
|
662
|
+
.lo-ui-progress:indeterminate {
|
|
663
|
+
background-image: linear-gradient(
|
|
664
|
+
90deg,
|
|
665
|
+
var(--lo-color-border) 0% 30%,
|
|
666
|
+
var(--lo-color-accent) 30% 50%,
|
|
667
|
+
var(--lo-color-border) 50% 100%
|
|
668
|
+
);
|
|
669
|
+
background-size: 200% 100%;
|
|
670
|
+
animation: lo-ui-progress-pending 1.4s linear infinite;
|
|
671
|
+
}
|
|
672
|
+
.lo-ui-progress:indeterminate::-webkit-progress-bar {
|
|
673
|
+
background: transparent;
|
|
674
|
+
}
|
|
675
|
+
@keyframes lo-ui-progress-pending {
|
|
676
|
+
from {
|
|
677
|
+
background-position: 100% 0;
|
|
678
|
+
}
|
|
679
|
+
to {
|
|
680
|
+
background-position: 0% 0;
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
@media (prefers-reduced-motion: reduce) {
|
|
684
|
+
.lo-ui-progress:indeterminate {
|
|
685
|
+
animation: none;
|
|
686
|
+
background-position: 50% 0;
|
|
687
|
+
}
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
.lo-ui-text--title {
|
|
691
|
+
font-size: 26px;
|
|
692
|
+
}
|
|
693
|
+
.lo-ui-text--display {
|
|
694
|
+
font-size: 40px;
|
|
695
|
+
line-height: var(--lo-line-height-tight);
|
|
696
|
+
}
|
|
697
|
+
.lo-ui-text--success {
|
|
698
|
+
color: var(--lo-color-success);
|
|
699
|
+
}
|
|
700
|
+
.lo-ui-text--weight-regular {
|
|
701
|
+
font-weight: var(--lo-font-weight-regular);
|
|
702
|
+
}
|
|
703
|
+
.lo-ui-text--weight-medium {
|
|
704
|
+
font-weight: var(--lo-font-weight-medium);
|
|
705
|
+
}
|
|
706
|
+
.lo-ui-text--weight-bold {
|
|
707
|
+
font-weight: var(--lo-font-weight-bold);
|
|
708
|
+
}
|
|
709
|
+
.lo-ui-text--family-ui {
|
|
710
|
+
font-family: var(--lo-font-family);
|
|
711
|
+
}
|
|
712
|
+
.lo-ui-text--family-display {
|
|
713
|
+
font-family: var(--lo-font-family-display);
|
|
714
|
+
}
|
|
715
|
+
.lo-ui-text--family-mono {
|
|
716
|
+
font-family: var(--lo-font-family-mono);
|
|
717
|
+
}
|