@openwarelabs/ui 0.10.0 → 0.11.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/README.md +5 -1
- package/dist/components/Avatar/Avatar.d.cts +2 -13
- package/dist/components/Avatar/Avatar.d.ts +2 -13
- package/dist/components/Avatar/Avatar.types.d.cts +13 -0
- package/dist/components/Avatar/Avatar.types.d.ts +13 -0
- package/dist/components/Calendar/DatePicker.d.cts +2 -19
- package/dist/components/Calendar/DatePicker.d.ts +2 -19
- package/dist/components/Calendar/DatePicker.types.d.cts +19 -0
- package/dist/components/Calendar/DatePicker.types.d.ts +19 -0
- package/dist/components/Calendar/DateRangePicker.d.cts +2 -34
- package/dist/components/Calendar/DateRangePicker.d.ts +2 -34
- package/dist/components/Calendar/DateRangePicker.types.d.cts +34 -0
- package/dist/components/Calendar/DateRangePicker.types.d.ts +34 -0
- package/dist/components/ColorPicker/ColorPicker.d.cts +2 -55
- package/dist/components/ColorPicker/ColorPicker.d.ts +2 -55
- package/dist/components/ColorPicker/ColorPicker.types.d.cts +54 -0
- package/dist/components/ColorPicker/ColorPicker.types.d.ts +54 -0
- package/dist/components/Container/Container.d.cts +7 -0
- package/dist/components/Container/Container.d.ts +7 -0
- package/dist/components/Container/Container.types.d.cts +12 -0
- package/dist/components/Container/Container.types.d.ts +12 -0
- package/dist/components/ListBox/ListBox.d.cts +3 -61
- package/dist/components/ListBox/ListBox.d.ts +3 -61
- package/dist/components/ListBox/ListBox.types.d.cts +61 -0
- package/dist/components/ListBox/ListBox.types.d.ts +61 -0
- package/dist/components/Prose/Prose.d.cts +2 -16
- package/dist/components/Prose/Prose.d.ts +2 -16
- package/dist/components/Prose/Prose.types.d.cts +16 -0
- package/dist/components/Prose/Prose.types.d.ts +16 -0
- package/dist/components/Section/Section.d.cts +7 -0
- package/dist/components/Section/Section.d.ts +7 -0
- package/dist/components/Section/Section.types.d.cts +16 -0
- package/dist/components/Section/Section.types.d.ts +16 -0
- package/dist/components.css +83 -0
- package/dist/index.cjs +333 -298
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.cts +4 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +320 -285
- package/dist/index.js.map +4 -4
- package/dist/openware-ui.iife.js +7 -7
- package/dist/styles.css +86 -0
- package/dist/tokens.css +3 -0
- package/dist/tokens.json +15 -0
- package/package.json +4 -4
|
@@ -1,64 +1,6 @@
|
|
|
1
|
-
import { type ReactElement, type
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
export interface ListBoxOption extends SelectOption {
|
|
5
|
-
/** A 16px icon between the checkmark and the label. */
|
|
6
|
-
icon?: ReactNode;
|
|
7
|
-
/** Plain text for type-to-find, when `label` isn't a string. */
|
|
8
|
-
textValue?: string;
|
|
9
|
-
}
|
|
10
|
-
/** Options under a heading, like a Select's groups. */
|
|
11
|
-
export interface ListBoxGroup {
|
|
12
|
-
/** The heading, shown in uppercase above the options and read out as the group's name. */
|
|
13
|
-
label: string;
|
|
14
|
-
options: ListBoxOption[];
|
|
15
|
-
}
|
|
16
|
-
export type ListBoxItem = ListBoxOption | ListBoxGroup;
|
|
17
|
-
export type ListBoxSelectionMode = "single" | "multiple";
|
|
18
|
-
/** ListBox's props for one selection mode: `value` is a string in single mode and an array in multiple mode. */
|
|
19
|
-
export interface ListBoxModeProps<Mode extends ListBoxSelectionMode> {
|
|
20
|
-
/** The options, and groups of options under a heading. */
|
|
21
|
-
options: ListBoxItem[];
|
|
22
|
-
/** `single` chooses one option; `multiple` any number.
|
|
23
|
-
* @default "single" */
|
|
24
|
-
selectionMode?: Mode;
|
|
25
|
-
/** The selected option's value in single mode ("" for none), or the selected values in multiple mode. */
|
|
26
|
-
value?: Mode extends "multiple" ? string[] : string;
|
|
27
|
-
/** The starting value when uncontrolled.
|
|
28
|
-
* @default "" or [] */
|
|
29
|
-
defaultValue?: Mode extends "multiple" ? string[] : string;
|
|
30
|
-
/** Called with the new value: a string in single mode, the selected values in the options' order in multiple mode. */
|
|
31
|
-
onChange?(value: Mode extends "multiple" ? string[] : string): void;
|
|
32
|
-
/** Keeps at least one option selected: choosing the selected option again doesn't clear it.
|
|
33
|
-
* @default false */
|
|
34
|
-
disallowEmptySelection?: boolean;
|
|
35
|
-
/** Shown in the list when there are no options.
|
|
36
|
-
* @default "No options" */
|
|
37
|
-
emptyMessage?: ReactNode;
|
|
38
|
-
/** Scrolls the options past this height, e.g. 240 or "40vh". */
|
|
39
|
-
maxHeight?: number | string;
|
|
40
|
-
/** md rows are 36px; sm rows are 32px with 12px text, like a small Select's list.
|
|
41
|
-
* @default "md" */
|
|
42
|
-
size?: "sm" | "md";
|
|
43
|
-
/** Shows the list as wrong: a red border, and a red halo when focused. Also sets aria-invalid. Field passes it.
|
|
44
|
-
* @default false */
|
|
45
|
-
isInvalid?: boolean;
|
|
46
|
-
/** The options can be moved through and read, but the selection can't change.
|
|
47
|
-
* @default false */
|
|
48
|
-
isReadOnly?: boolean;
|
|
49
|
-
/** Fades the list and takes it out of the tab order.
|
|
50
|
-
* @default false */
|
|
51
|
-
disabled?: boolean;
|
|
52
|
-
id?: string;
|
|
53
|
-
/** Names the list for screen readers when it isn't in a Field. */
|
|
54
|
-
"aria-label"?: string;
|
|
55
|
-
"aria-labelledby"?: string;
|
|
56
|
-
"aria-describedby"?: string;
|
|
57
|
-
className?: string;
|
|
58
|
-
}
|
|
59
|
-
/** ListBox's props. `value`, `defaultValue` and `onChange` take a string in single mode and an array in multiple mode. */
|
|
60
|
-
export interface ListBoxProps extends ListBoxModeProps<ListBoxSelectionMode> {
|
|
61
|
-
}
|
|
1
|
+
import { type ReactElement, type RefAttributes } from "react";
|
|
2
|
+
import type { ListBoxModeProps, ListBoxSelectionMode } from "./ListBox.types.cjs";
|
|
3
|
+
export type { ListBoxGroup, ListBoxItem, ListBoxModeProps, ListBoxOption, ListBoxProps, ListBoxSelectionMode } from "./ListBox.types.cjs";
|
|
62
4
|
/**
|
|
63
5
|
* Select's list of options on its own: a choice that stays on the page. `selectionMode="multiple"` makes `value` an array.
|
|
64
6
|
*/
|
|
@@ -1,64 +1,6 @@
|
|
|
1
|
-
import { type ReactElement, type
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
export interface ListBoxOption extends SelectOption {
|
|
5
|
-
/** A 16px icon between the checkmark and the label. */
|
|
6
|
-
icon?: ReactNode;
|
|
7
|
-
/** Plain text for type-to-find, when `label` isn't a string. */
|
|
8
|
-
textValue?: string;
|
|
9
|
-
}
|
|
10
|
-
/** Options under a heading, like a Select's groups. */
|
|
11
|
-
export interface ListBoxGroup {
|
|
12
|
-
/** The heading, shown in uppercase above the options and read out as the group's name. */
|
|
13
|
-
label: string;
|
|
14
|
-
options: ListBoxOption[];
|
|
15
|
-
}
|
|
16
|
-
export type ListBoxItem = ListBoxOption | ListBoxGroup;
|
|
17
|
-
export type ListBoxSelectionMode = "single" | "multiple";
|
|
18
|
-
/** ListBox's props for one selection mode: `value` is a string in single mode and an array in multiple mode. */
|
|
19
|
-
export interface ListBoxModeProps<Mode extends ListBoxSelectionMode> {
|
|
20
|
-
/** The options, and groups of options under a heading. */
|
|
21
|
-
options: ListBoxItem[];
|
|
22
|
-
/** `single` chooses one option; `multiple` any number.
|
|
23
|
-
* @default "single" */
|
|
24
|
-
selectionMode?: Mode;
|
|
25
|
-
/** The selected option's value in single mode ("" for none), or the selected values in multiple mode. */
|
|
26
|
-
value?: Mode extends "multiple" ? string[] : string;
|
|
27
|
-
/** The starting value when uncontrolled.
|
|
28
|
-
* @default "" or [] */
|
|
29
|
-
defaultValue?: Mode extends "multiple" ? string[] : string;
|
|
30
|
-
/** Called with the new value: a string in single mode, the selected values in the options' order in multiple mode. */
|
|
31
|
-
onChange?(value: Mode extends "multiple" ? string[] : string): void;
|
|
32
|
-
/** Keeps at least one option selected: choosing the selected option again doesn't clear it.
|
|
33
|
-
* @default false */
|
|
34
|
-
disallowEmptySelection?: boolean;
|
|
35
|
-
/** Shown in the list when there are no options.
|
|
36
|
-
* @default "No options" */
|
|
37
|
-
emptyMessage?: ReactNode;
|
|
38
|
-
/** Scrolls the options past this height, e.g. 240 or "40vh". */
|
|
39
|
-
maxHeight?: number | string;
|
|
40
|
-
/** md rows are 36px; sm rows are 32px with 12px text, like a small Select's list.
|
|
41
|
-
* @default "md" */
|
|
42
|
-
size?: "sm" | "md";
|
|
43
|
-
/** Shows the list as wrong: a red border, and a red halo when focused. Also sets aria-invalid. Field passes it.
|
|
44
|
-
* @default false */
|
|
45
|
-
isInvalid?: boolean;
|
|
46
|
-
/** The options can be moved through and read, but the selection can't change.
|
|
47
|
-
* @default false */
|
|
48
|
-
isReadOnly?: boolean;
|
|
49
|
-
/** Fades the list and takes it out of the tab order.
|
|
50
|
-
* @default false */
|
|
51
|
-
disabled?: boolean;
|
|
52
|
-
id?: string;
|
|
53
|
-
/** Names the list for screen readers when it isn't in a Field. */
|
|
54
|
-
"aria-label"?: string;
|
|
55
|
-
"aria-labelledby"?: string;
|
|
56
|
-
"aria-describedby"?: string;
|
|
57
|
-
className?: string;
|
|
58
|
-
}
|
|
59
|
-
/** ListBox's props. `value`, `defaultValue` and `onChange` take a string in single mode and an array in multiple mode. */
|
|
60
|
-
export interface ListBoxProps extends ListBoxModeProps<ListBoxSelectionMode> {
|
|
61
|
-
}
|
|
1
|
+
import { type ReactElement, type RefAttributes } from "react";
|
|
2
|
+
import type { ListBoxModeProps, ListBoxSelectionMode } from "./ListBox.types.js";
|
|
3
|
+
export type { ListBoxGroup, ListBoxItem, ListBoxModeProps, ListBoxOption, ListBoxProps, ListBoxSelectionMode } from "./ListBox.types.js";
|
|
62
4
|
/**
|
|
63
5
|
* Select's list of options on its own: a choice that stays on the page. `selectionMode="multiple"` makes `value` an array.
|
|
64
6
|
*/
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import type { SelectOption } from "../Select/Select.cjs";
|
|
3
|
+
/** An option, shaped like Select's, with an optional icon. */
|
|
4
|
+
export interface ListBoxOption extends SelectOption {
|
|
5
|
+
/** A 16px icon between the checkmark and the label. */
|
|
6
|
+
icon?: ReactNode;
|
|
7
|
+
/** Plain text for type-to-find, when `label` isn't a string. */
|
|
8
|
+
textValue?: string;
|
|
9
|
+
}
|
|
10
|
+
/** Options under a heading, like a Select's groups. */
|
|
11
|
+
export interface ListBoxGroup {
|
|
12
|
+
/** The heading, shown in uppercase above the options and read out as the group's name. */
|
|
13
|
+
label: string;
|
|
14
|
+
options: ListBoxOption[];
|
|
15
|
+
}
|
|
16
|
+
export type ListBoxItem = ListBoxOption | ListBoxGroup;
|
|
17
|
+
export type ListBoxSelectionMode = "single" | "multiple";
|
|
18
|
+
/** ListBox's props for one selection mode: `value` is a string in single mode and an array in multiple mode. */
|
|
19
|
+
export interface ListBoxModeProps<Mode extends ListBoxSelectionMode> {
|
|
20
|
+
/** The options, and groups of options under a heading. */
|
|
21
|
+
options: ListBoxItem[];
|
|
22
|
+
/** `single` chooses one option; `multiple` any number.
|
|
23
|
+
* @default "single" */
|
|
24
|
+
selectionMode?: Mode;
|
|
25
|
+
/** The selected option's value in single mode ("" for none), or the selected values in multiple mode. */
|
|
26
|
+
value?: Mode extends "multiple" ? string[] : string;
|
|
27
|
+
/** The starting value when uncontrolled.
|
|
28
|
+
* @default "" or [] */
|
|
29
|
+
defaultValue?: Mode extends "multiple" ? string[] : string;
|
|
30
|
+
/** Called with the new value: a string in single mode, the selected values in the options' order in multiple mode. */
|
|
31
|
+
onChange?(value: Mode extends "multiple" ? string[] : string): void;
|
|
32
|
+
/** Keeps at least one option selected: choosing the selected option again doesn't clear it.
|
|
33
|
+
* @default false */
|
|
34
|
+
disallowEmptySelection?: boolean;
|
|
35
|
+
/** Shown in the list when there are no options.
|
|
36
|
+
* @default "No options" */
|
|
37
|
+
emptyMessage?: ReactNode;
|
|
38
|
+
/** Scrolls the options past this height, e.g. 240 or "40vh". */
|
|
39
|
+
maxHeight?: number | string;
|
|
40
|
+
/** md rows are 36px; sm rows are 32px with 12px text, like a small Select's list.
|
|
41
|
+
* @default "md" */
|
|
42
|
+
size?: "sm" | "md";
|
|
43
|
+
/** Shows the list as wrong: a red border, and a red halo when focused. Also sets aria-invalid. Field passes it.
|
|
44
|
+
* @default false */
|
|
45
|
+
isInvalid?: boolean;
|
|
46
|
+
/** The options can be moved through and read, but the selection can't change.
|
|
47
|
+
* @default false */
|
|
48
|
+
isReadOnly?: boolean;
|
|
49
|
+
/** Fades the list and takes it out of the tab order.
|
|
50
|
+
* @default false */
|
|
51
|
+
disabled?: boolean;
|
|
52
|
+
id?: string;
|
|
53
|
+
/** Names the list for screen readers when it isn't in a Field. */
|
|
54
|
+
"aria-label"?: string;
|
|
55
|
+
"aria-labelledby"?: string;
|
|
56
|
+
"aria-describedby"?: string;
|
|
57
|
+
className?: string;
|
|
58
|
+
}
|
|
59
|
+
/** ListBox's props. `value`, `defaultValue` and `onChange` take a string in single mode and an array in multiple mode. */
|
|
60
|
+
export interface ListBoxProps extends ListBoxModeProps<ListBoxSelectionMode> {
|
|
61
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import type { SelectOption } from "../Select/Select.js";
|
|
3
|
+
/** An option, shaped like Select's, with an optional icon. */
|
|
4
|
+
export interface ListBoxOption extends SelectOption {
|
|
5
|
+
/** A 16px icon between the checkmark and the label. */
|
|
6
|
+
icon?: ReactNode;
|
|
7
|
+
/** Plain text for type-to-find, when `label` isn't a string. */
|
|
8
|
+
textValue?: string;
|
|
9
|
+
}
|
|
10
|
+
/** Options under a heading, like a Select's groups. */
|
|
11
|
+
export interface ListBoxGroup {
|
|
12
|
+
/** The heading, shown in uppercase above the options and read out as the group's name. */
|
|
13
|
+
label: string;
|
|
14
|
+
options: ListBoxOption[];
|
|
15
|
+
}
|
|
16
|
+
export type ListBoxItem = ListBoxOption | ListBoxGroup;
|
|
17
|
+
export type ListBoxSelectionMode = "single" | "multiple";
|
|
18
|
+
/** ListBox's props for one selection mode: `value` is a string in single mode and an array in multiple mode. */
|
|
19
|
+
export interface ListBoxModeProps<Mode extends ListBoxSelectionMode> {
|
|
20
|
+
/** The options, and groups of options under a heading. */
|
|
21
|
+
options: ListBoxItem[];
|
|
22
|
+
/** `single` chooses one option; `multiple` any number.
|
|
23
|
+
* @default "single" */
|
|
24
|
+
selectionMode?: Mode;
|
|
25
|
+
/** The selected option's value in single mode ("" for none), or the selected values in multiple mode. */
|
|
26
|
+
value?: Mode extends "multiple" ? string[] : string;
|
|
27
|
+
/** The starting value when uncontrolled.
|
|
28
|
+
* @default "" or [] */
|
|
29
|
+
defaultValue?: Mode extends "multiple" ? string[] : string;
|
|
30
|
+
/** Called with the new value: a string in single mode, the selected values in the options' order in multiple mode. */
|
|
31
|
+
onChange?(value: Mode extends "multiple" ? string[] : string): void;
|
|
32
|
+
/** Keeps at least one option selected: choosing the selected option again doesn't clear it.
|
|
33
|
+
* @default false */
|
|
34
|
+
disallowEmptySelection?: boolean;
|
|
35
|
+
/** Shown in the list when there are no options.
|
|
36
|
+
* @default "No options" */
|
|
37
|
+
emptyMessage?: ReactNode;
|
|
38
|
+
/** Scrolls the options past this height, e.g. 240 or "40vh". */
|
|
39
|
+
maxHeight?: number | string;
|
|
40
|
+
/** md rows are 36px; sm rows are 32px with 12px text, like a small Select's list.
|
|
41
|
+
* @default "md" */
|
|
42
|
+
size?: "sm" | "md";
|
|
43
|
+
/** Shows the list as wrong: a red border, and a red halo when focused. Also sets aria-invalid. Field passes it.
|
|
44
|
+
* @default false */
|
|
45
|
+
isInvalid?: boolean;
|
|
46
|
+
/** The options can be moved through and read, but the selection can't change.
|
|
47
|
+
* @default false */
|
|
48
|
+
isReadOnly?: boolean;
|
|
49
|
+
/** Fades the list and takes it out of the tab order.
|
|
50
|
+
* @default false */
|
|
51
|
+
disabled?: boolean;
|
|
52
|
+
id?: string;
|
|
53
|
+
/** Names the list for screen readers when it isn't in a Field. */
|
|
54
|
+
"aria-label"?: string;
|
|
55
|
+
"aria-labelledby"?: string;
|
|
56
|
+
"aria-describedby"?: string;
|
|
57
|
+
className?: string;
|
|
58
|
+
}
|
|
59
|
+
/** ListBox's props. `value`, `defaultValue` and `onChange` take a string in single mode and an array in multiple mode. */
|
|
60
|
+
export interface ListBoxProps extends ListBoxModeProps<ListBoxSelectionMode> {
|
|
61
|
+
}
|
|
@@ -1,19 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
export
|
|
3
|
-
/** sm sets 14px interface text with a tight rhythm and modest headings, for chat answers and comments. md sets the prose
|
|
4
|
-
* style (16.5px, 1.7 leading) with headings from the type scale, for articles and docs.
|
|
5
|
-
* @default "md" */
|
|
6
|
-
size?: "sm" | "md";
|
|
7
|
-
/** Drops the readable width (about 68 characters a line at md) so the text runs the full width of its container. sm has no
|
|
8
|
-
* maximum width to drop.
|
|
9
|
-
* @default false */
|
|
10
|
-
fullWidth?: boolean;
|
|
11
|
-
/** The element: article for a post, section for part of a page.
|
|
12
|
-
* @default "div" */
|
|
13
|
-
as?: "div" | "article" | "section" | "main" | "aside";
|
|
14
|
-
/** Plain HTML elements to style: what a Markdown renderer, a CMS or a server gives back. */
|
|
15
|
-
children?: ReactNode;
|
|
16
|
-
}
|
|
1
|
+
import type { ProseProps } from "./Prose.types.cjs";
|
|
2
|
+
export type { ProseProps } from "./Prose.types.cjs";
|
|
17
3
|
/**
|
|
18
4
|
* Styles content you don't write element by element: Markdown rendered to HTML, a CMS body, an agent's answer. It sets
|
|
19
5
|
* the plain elements inside it (headings, paragraphs, lists, quotes, code, tables, images, details) in Openware's type
|
|
@@ -1,19 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
export
|
|
3
|
-
/** sm sets 14px interface text with a tight rhythm and modest headings, for chat answers and comments. md sets the prose
|
|
4
|
-
* style (16.5px, 1.7 leading) with headings from the type scale, for articles and docs.
|
|
5
|
-
* @default "md" */
|
|
6
|
-
size?: "sm" | "md";
|
|
7
|
-
/** Drops the readable width (about 68 characters a line at md) so the text runs the full width of its container. sm has no
|
|
8
|
-
* maximum width to drop.
|
|
9
|
-
* @default false */
|
|
10
|
-
fullWidth?: boolean;
|
|
11
|
-
/** The element: article for a post, section for part of a page.
|
|
12
|
-
* @default "div" */
|
|
13
|
-
as?: "div" | "article" | "section" | "main" | "aside";
|
|
14
|
-
/** Plain HTML elements to style: what a Markdown renderer, a CMS or a server gives back. */
|
|
15
|
-
children?: ReactNode;
|
|
16
|
-
}
|
|
1
|
+
import type { ProseProps } from "./Prose.types.js";
|
|
2
|
+
export type { ProseProps } from "./Prose.types.js";
|
|
17
3
|
/**
|
|
18
4
|
* Styles content you don't write element by element: Markdown rendered to HTML, a CMS body, an agent's answer. It sets
|
|
19
5
|
* the plain elements inside it (headings, paragraphs, lists, quotes, code, tables, images, details) in Openware's type
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
export interface ProseProps extends HTMLAttributes<HTMLElement> {
|
|
3
|
+
/** sm sets 14px interface text with a tight rhythm and modest headings, for chat answers and comments. md sets the prose
|
|
4
|
+
* style (16.5px, 1.7 leading) with headings from the type scale, for articles and docs.
|
|
5
|
+
* @default "md" */
|
|
6
|
+
size?: "sm" | "md";
|
|
7
|
+
/** Drops the readable width (about 68 characters a line at md) so the text runs the full width of its container. sm has no
|
|
8
|
+
* maximum width to drop.
|
|
9
|
+
* @default false */
|
|
10
|
+
fullWidth?: boolean;
|
|
11
|
+
/** The element: article for a post, section for part of a page.
|
|
12
|
+
* @default "div" */
|
|
13
|
+
as?: "div" | "article" | "section" | "main" | "aside";
|
|
14
|
+
/** Plain HTML elements to style: what a Markdown renderer, a CMS or a server gives back. */
|
|
15
|
+
children?: ReactNode;
|
|
16
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
export interface ProseProps extends HTMLAttributes<HTMLElement> {
|
|
3
|
+
/** sm sets 14px interface text with a tight rhythm and modest headings, for chat answers and comments. md sets the prose
|
|
4
|
+
* style (16.5px, 1.7 leading) with headings from the type scale, for articles and docs.
|
|
5
|
+
* @default "md" */
|
|
6
|
+
size?: "sm" | "md";
|
|
7
|
+
/** Drops the readable width (about 68 characters a line at md) so the text runs the full width of its container. sm has no
|
|
8
|
+
* maximum width to drop.
|
|
9
|
+
* @default false */
|
|
10
|
+
fullWidth?: boolean;
|
|
11
|
+
/** The element: article for a post, section for part of a page.
|
|
12
|
+
* @default "div" */
|
|
13
|
+
as?: "div" | "article" | "section" | "main" | "aside";
|
|
14
|
+
/** Plain HTML elements to style: what a Markdown renderer, a CMS or a server gives back. */
|
|
15
|
+
children?: ReactNode;
|
|
16
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SectionProps } from "./Section.types.cjs";
|
|
2
|
+
export type { SectionProps } from "./Section.types.cjs";
|
|
3
|
+
/**
|
|
4
|
+
* A full-width band of a page, with the blocks' space above and below and their width and side margins inside (a
|
|
5
|
+
* Container). Your own sections then sit in line with the blocks around them.
|
|
6
|
+
*/
|
|
7
|
+
export declare function Section({ tone, spacing, size, as: Element, className, children, ...props }: SectionProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SectionProps } from "./Section.types.js";
|
|
2
|
+
export type { SectionProps } from "./Section.types.js";
|
|
3
|
+
/**
|
|
4
|
+
* A full-width band of a page, with the blocks' space above and below and their width and side margins inside (a
|
|
5
|
+
* Container). Your own sections then sit in line with the blocks around them.
|
|
6
|
+
*/
|
|
7
|
+
export declare function Section({ tone, spacing, size, as: Element, className, children, ...props }: SectionProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ElementType, HTMLAttributes } from "react";
|
|
2
|
+
import type { ContainerSize } from "../Container/Container.types.cjs";
|
|
3
|
+
export interface SectionProps extends HTMLAttributes<HTMLElement> {
|
|
4
|
+
/**
|
|
5
|
+
* The band's ground: `paper` for marketing pages, as the blocks use; `canvas` for the app's grey; `surface` for a
|
|
6
|
+
* white band that stands out from the paper; `none` to show what's behind it.
|
|
7
|
+
* @default "paper"
|
|
8
|
+
*/
|
|
9
|
+
tone?: "paper" | "canvas" | "surface" | "none";
|
|
10
|
+
/** The space above and below: `md` is a block's (96px, 72px on phones), `sm` half that. @default "md" */
|
|
11
|
+
spacing?: "sm" | "md" | "none";
|
|
12
|
+
/** How wide the content inside can get, as for Container. `false` leaves the content full width, without one. @default "page" */
|
|
13
|
+
size?: ContainerSize | false;
|
|
14
|
+
/** The element to render. @default "section" */
|
|
15
|
+
as?: ElementType;
|
|
16
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ElementType, HTMLAttributes } from "react";
|
|
2
|
+
import type { ContainerSize } from "../Container/Container.types.js";
|
|
3
|
+
export interface SectionProps extends HTMLAttributes<HTMLElement> {
|
|
4
|
+
/**
|
|
5
|
+
* The band's ground: `paper` for marketing pages, as the blocks use; `canvas` for the app's grey; `surface` for a
|
|
6
|
+
* white band that stands out from the paper; `none` to show what's behind it.
|
|
7
|
+
* @default "paper"
|
|
8
|
+
*/
|
|
9
|
+
tone?: "paper" | "canvas" | "surface" | "none";
|
|
10
|
+
/** The space above and below: `md` is a block's (96px, 72px on phones), `sm` half that. @default "md" */
|
|
11
|
+
spacing?: "sm" | "md" | "none";
|
|
12
|
+
/** How wide the content inside can get, as for Container. `false` leaves the content full width, without one. @default "page" */
|
|
13
|
+
size?: ContainerSize | false;
|
|
14
|
+
/** The element to render. @default "section" */
|
|
15
|
+
as?: ElementType;
|
|
16
|
+
}
|
package/dist/components.css
CHANGED
|
@@ -1221,7 +1221,14 @@
|
|
|
1221
1221
|
}
|
|
1222
1222
|
|
|
1223
1223
|
.ow-date-field__segment {
|
|
1224
|
+
/* At least 24px each way, the smallest a pointer target may be (WCAG 2.2, 2.5.8). */
|
|
1225
|
+
box-sizing: border-box;
|
|
1226
|
+
display: inline-flex;
|
|
1227
|
+
min-width: 24px;
|
|
1228
|
+
min-height: 24px;
|
|
1224
1229
|
flex-shrink: 0;
|
|
1230
|
+
align-items: center;
|
|
1231
|
+
justify-content: center;
|
|
1225
1232
|
border-radius: var(--ow-radius-sm);
|
|
1226
1233
|
padding: 2px;
|
|
1227
1234
|
color: var(--ow-text);
|
|
@@ -1233,6 +1240,11 @@
|
|
|
1233
1240
|
transition-timing-function: var(--ow-ease-standard);
|
|
1234
1241
|
}
|
|
1235
1242
|
|
|
1243
|
+
.ow-date-field__segment[data-segment="0"] {
|
|
1244
|
+
/* The first, often one digit ("6:12"), keeps to the separator after it; the spare width goes before it. */
|
|
1245
|
+
justify-content: flex-end;
|
|
1246
|
+
}
|
|
1247
|
+
|
|
1236
1248
|
.ow-date-field__segment::selection {
|
|
1237
1249
|
background: transparent;
|
|
1238
1250
|
}
|
|
@@ -5080,6 +5092,10 @@
|
|
|
5080
5092
|
line-height: 1;
|
|
5081
5093
|
}
|
|
5082
5094
|
|
|
5095
|
+
.ow-avatar[data-initials]::before {
|
|
5096
|
+
content: attr(data-initials);
|
|
5097
|
+
}
|
|
5098
|
+
|
|
5083
5099
|
.ow-avatar--empty {
|
|
5084
5100
|
background: var(--ow-avatar-empty);
|
|
5085
5101
|
color: var(--ow-on-avatar-empty);
|
|
@@ -6192,6 +6208,73 @@
|
|
|
6192
6208
|
outline-offset: 2px;
|
|
6193
6209
|
}
|
|
6194
6210
|
|
|
6211
|
+
/* components/Container/Container.css */
|
|
6212
|
+
/* The page's width and side margins, the same as every block's: the content is at most the size's width, inside a
|
|
6213
|
+
32px gutter (the phone gutter under 760px). */
|
|
6214
|
+
|
|
6215
|
+
.ow-container {
|
|
6216
|
+
box-sizing: border-box;
|
|
6217
|
+
width: 100%;
|
|
6218
|
+
margin-inline: auto;
|
|
6219
|
+
padding-inline: var(--ow-page-gutter-wide);
|
|
6220
|
+
}
|
|
6221
|
+
|
|
6222
|
+
.ow-container--page {
|
|
6223
|
+
max-width: calc(var(--ow-page-max) + 2 * var(--ow-page-gutter-wide));
|
|
6224
|
+
}
|
|
6225
|
+
|
|
6226
|
+
.ow-container--narrow {
|
|
6227
|
+
max-width: calc(var(--ow-page-narrow) + 2 * var(--ow-page-gutter-wide));
|
|
6228
|
+
}
|
|
6229
|
+
|
|
6230
|
+
.ow-container--wide {
|
|
6231
|
+
max-width: calc(var(--ow-page-wide) + 2 * var(--ow-page-gutter-wide));
|
|
6232
|
+
}
|
|
6233
|
+
|
|
6234
|
+
@media (max-width: 760px) {
|
|
6235
|
+
.ow-container {
|
|
6236
|
+
padding-inline: var(--ow-page-gutter);
|
|
6237
|
+
}
|
|
6238
|
+
}
|
|
6239
|
+
|
|
6240
|
+
/* components/Section/Section.css */
|
|
6241
|
+
/* A band of the page: a block's vertical space and ground, full width. Its Container sets the width inside. */
|
|
6242
|
+
|
|
6243
|
+
.ow-section {
|
|
6244
|
+
box-sizing: border-box;
|
|
6245
|
+
width: 100%;
|
|
6246
|
+
color: var(--ow-text);
|
|
6247
|
+
}
|
|
6248
|
+
|
|
6249
|
+
.ow-section--paper {
|
|
6250
|
+
background: var(--ow-paper);
|
|
6251
|
+
}
|
|
6252
|
+
|
|
6253
|
+
.ow-section--canvas {
|
|
6254
|
+
background: var(--ow-canvas);
|
|
6255
|
+
}
|
|
6256
|
+
|
|
6257
|
+
.ow-section--surface {
|
|
6258
|
+
background: var(--ow-surface);
|
|
6259
|
+
}
|
|
6260
|
+
|
|
6261
|
+
.ow-section--space-md {
|
|
6262
|
+
padding-block: var(--ow-section-y);
|
|
6263
|
+
}
|
|
6264
|
+
|
|
6265
|
+
.ow-section--space-sm {
|
|
6266
|
+
padding-block: calc(var(--ow-section-y) / 2);
|
|
6267
|
+
}
|
|
6268
|
+
|
|
6269
|
+
@media (max-width: 760px) {
|
|
6270
|
+
.ow-section--space-md {
|
|
6271
|
+
padding-block: 72px;
|
|
6272
|
+
}
|
|
6273
|
+
.ow-section--space-sm {
|
|
6274
|
+
padding-block: 36px;
|
|
6275
|
+
}
|
|
6276
|
+
}
|
|
6277
|
+
|
|
6195
6278
|
/* components/Marketing/Marketing.css */
|
|
6196
6279
|
/* Marketing patterns from the site: Chip, SectionHeading, SiteHeader and the dot grid. */
|
|
6197
6280
|
.ow-chip {
|