@oxy.so/bloom 4.34.1 → 4.35.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/docs/adoption-matrix.mdx +5 -5
- package/docs/locale.mdx +3 -1
- package/docs/mail-list.mdx +22 -18
- package/docs/settings-modal.mdx +1 -1
- package/docs/text-field.mdx +20 -0
- package/lib/commonjs/mail-list/MailList.js +0 -2
- package/lib/commonjs/mail-list/MailList.js.map +1 -1
- package/lib/commonjs/mail-list/MailRow.js +23 -9
- package/lib/commonjs/mail-list/MailRow.js.map +1 -1
- package/lib/commonjs/mail-list/shared.js +10 -26
- package/lib/commonjs/mail-list/shared.js.map +1 -1
- package/lib/commonjs/settings-modal/SettingsModal.js +18 -12
- package/lib/commonjs/settings-modal/SettingsModal.js.map +1 -1
- package/lib/commonjs/text-field/TextField.js +133 -15
- package/lib/commonjs/text-field/TextField.js.map +1 -1
- package/lib/commonjs/text-field/messages.js +89 -0
- package/lib/commonjs/text-field/messages.js.map +1 -0
- package/lib/module/mail-list/MailList.js +0 -2
- package/lib/module/mail-list/MailList.js.map +1 -1
- package/lib/module/mail-list/MailRow.js +23 -9
- package/lib/module/mail-list/MailRow.js.map +1 -1
- package/lib/module/mail-list/shared.js +10 -26
- package/lib/module/mail-list/shared.js.map +1 -1
- package/lib/module/settings-modal/SettingsModal.js +18 -12
- package/lib/module/settings-modal/SettingsModal.js.map +1 -1
- package/lib/module/text-field/TextField.js +133 -15
- package/lib/module/text-field/TextField.js.map +1 -1
- package/lib/module/text-field/messages.js +85 -0
- package/lib/module/text-field/messages.js.map +1 -0
- package/lib/typescript/commonjs/mail-list/MailList.d.ts +1 -1
- package/lib/typescript/commonjs/mail-list/MailList.d.ts.map +1 -1
- package/lib/typescript/commonjs/mail-list/MailRow.d.ts +20 -5
- package/lib/typescript/commonjs/mail-list/MailRow.d.ts.map +1 -1
- package/lib/typescript/commonjs/mail-list/shared.d.ts +9 -2
- package/lib/typescript/commonjs/mail-list/shared.d.ts.map +1 -1
- package/lib/typescript/commonjs/mail-list/types.d.ts +6 -8
- package/lib/typescript/commonjs/mail-list/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/settings-modal/SettingsModal.d.ts.map +1 -1
- package/lib/typescript/commonjs/text-field/TextField.d.ts +1 -1
- package/lib/typescript/commonjs/text-field/TextField.d.ts.map +1 -1
- package/lib/typescript/commonjs/text-field/index.d.ts +1 -1
- package/lib/typescript/commonjs/text-field/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/text-field/messages.d.ts +15 -0
- package/lib/typescript/commonjs/text-field/messages.d.ts.map +1 -0
- package/lib/typescript/commonjs/text-field/types.d.ts +18 -0
- package/lib/typescript/commonjs/text-field/types.d.ts.map +1 -1
- package/lib/typescript/module/mail-list/MailList.d.ts +1 -1
- package/lib/typescript/module/mail-list/MailList.d.ts.map +1 -1
- package/lib/typescript/module/mail-list/MailRow.d.ts +20 -5
- package/lib/typescript/module/mail-list/MailRow.d.ts.map +1 -1
- package/lib/typescript/module/mail-list/shared.d.ts +9 -2
- package/lib/typescript/module/mail-list/shared.d.ts.map +1 -1
- package/lib/typescript/module/mail-list/types.d.ts +6 -8
- package/lib/typescript/module/mail-list/types.d.ts.map +1 -1
- package/lib/typescript/module/settings-modal/SettingsModal.d.ts.map +1 -1
- package/lib/typescript/module/text-field/TextField.d.ts +1 -1
- package/lib/typescript/module/text-field/TextField.d.ts.map +1 -1
- package/lib/typescript/module/text-field/index.d.ts +1 -1
- package/lib/typescript/module/text-field/index.d.ts.map +1 -1
- package/lib/typescript/module/text-field/messages.d.ts +15 -0
- package/lib/typescript/module/text-field/messages.d.ts.map +1 -0
- package/lib/typescript/module/text-field/types.d.ts +18 -0
- package/lib/typescript/module/text-field/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/mail-list/MailList.tsx +0 -2
- package/src/mail-list/MailRow.tsx +23 -9
- package/src/mail-list/shared.ts +10 -27
- package/src/mail-list/types.ts +6 -8
- package/src/settings-modal/SettingsModal.tsx +15 -12
- package/src/text-field/TextField.tsx +133 -15
- package/src/text-field/index.ts +1 -0
- package/src/text-field/messages.ts +36 -0
- package/src/text-field/types.ts +19 -0
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { TextField, TextFieldInput, TextFieldLabel, TextFieldHint, TextFieldIcon, TextFieldSuffix, TextFieldGhost, } from './TextField';
|
|
2
|
-
export type { TextFieldProps, TextFieldInputProps, TextFieldLabelProps, TextFieldHintProps, TextFieldIconProps, TextFieldSize, } from './types';
|
|
2
|
+
export type { TextFieldProps, TextFieldInputProps, TextFieldLabelProps, TextFieldHintProps, TextFieldIconProps, TextFieldSize, TextFieldRevealLabels, } from './types';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/text-field/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,cAAc,EACd,cAAc,EACd,aAAa,EACb,aAAa,EACb,eAAe,EACf,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/text-field/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,cAAc,EACd,cAAc,EACd,aAAa,EACb,aAAa,EACb,eAAe,EACf,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,qBAAqB,GACtB,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { MessageCatalog } from '../locale/messages';
|
|
2
|
+
/**
|
|
3
|
+
* Every fixed string the text-field family draws or announces, in each Bloom
|
|
4
|
+
* language. A caller's `revealLabels` still wins over the reveal pair.
|
|
5
|
+
*/
|
|
6
|
+
export interface TextFieldMessages {
|
|
7
|
+
/** The reveal button's name while the value is hidden. */
|
|
8
|
+
showPassword: string;
|
|
9
|
+
/** The reveal button's name while the value is shown. */
|
|
10
|
+
hidePassword: string;
|
|
11
|
+
/** The name of `TextFieldLabel`'s `required` asterisk. */
|
|
12
|
+
required: string;
|
|
13
|
+
}
|
|
14
|
+
export declare const TEXT_FIELD_MESSAGES: MessageCatalog<TextFieldMessages>;
|
|
15
|
+
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../../src/text-field/messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,0DAA0D;IAC1D,YAAY,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,YAAY,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,mBAAmB,EAAE,cAAc,CAAC,iBAAiB,CAoBjE,CAAC"}
|
|
@@ -51,7 +51,25 @@ export type TextFieldInputProps = Omit<TextInputProps, 'value' | 'onChangeText'
|
|
|
51
51
|
* identically. Respects reduced-motion (snaps instead of animating).
|
|
52
52
|
*/
|
|
53
53
|
floatingLabel?: boolean;
|
|
54
|
+
/**
|
|
55
|
+
* With `secureTextEntry`, draw an eye / eye-off button after the input that
|
|
56
|
+
* shows and hides what was typed. It is named "Show password" / "Hide
|
|
57
|
+
* password" in the locale (`docs/locale.mdx`); `revealLabels` overrides
|
|
58
|
+
* either. Pressing it leaves focus in the input. Ignored without
|
|
59
|
+
* `secureTextEntry`.
|
|
60
|
+
*/
|
|
61
|
+
revealable?: boolean;
|
|
62
|
+
/** Override the reveal button's names, one key at a time. */
|
|
63
|
+
revealLabels?: TextFieldRevealLabels;
|
|
64
|
+
/** Locale for the reveal button's names; defaults to the nearest `LocaleProvider`. */
|
|
65
|
+
locale?: string;
|
|
54
66
|
};
|
|
67
|
+
export interface TextFieldRevealLabels {
|
|
68
|
+
/** The name while the value is hidden. */
|
|
69
|
+
show?: string;
|
|
70
|
+
/** The name while the value is shown. */
|
|
71
|
+
hide?: string;
|
|
72
|
+
}
|
|
55
73
|
export type TextFieldLabelProps = React.PropsWithChildren<{
|
|
56
74
|
nativeID?: string;
|
|
57
75
|
/** Append the `text-error-primary` asterisk. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/text-field/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9D,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,KAAK,EAAE,KAAK,IAAI,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC,iBAAiB,CAClD;IACE,OAAO,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAChC,GAAG,aAAa,CAClB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,IAAI,CACpC,cAAc,EACd,OAAO,GAAG,cAAc,GAAG,aAAa,CACzC,GAAG;IACF,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0EAA0E;IAC1E,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC7E,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC;;;;;;;;;;;OAWG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/text-field/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9D,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,KAAK,EAAE,KAAK,IAAI,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC,iBAAiB,CAClD;IACE,OAAO,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAChC,GAAG,aAAa,CAClB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,IAAI,CACpC,cAAc,EACd,OAAO,GAAG,cAAc,GAAG,aAAa,CACzC,GAAG;IACF,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0EAA0E;IAC1E,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC7E,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC;;;;;;;;;;;OAWG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,qBAAqB,CAAC;IACrC,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,mBAAmB,GAAG,KAAK,CAAC,iBAAiB,CACvD;IACE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gDAAgD;IAChD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,aAAa,CAClB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,KAAK,CAAC,iBAAiB,CACtD;IACE,0CAA0C;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,aAAa,CAClB,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,6CAA6C;IAC7C,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IACxC,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;CACnC"}
|
|
@@ -29,7 +29,7 @@ import type { MailListProps } from './types';
|
|
|
29
29
|
* section a nested list named by its heading. While `loading` the region is
|
|
30
30
|
* `aria-busy` and the placeholders are hidden, so "loading" is announced once.
|
|
31
31
|
*/
|
|
32
|
-
declare function MailListComponent({ sections, mails, density,
|
|
32
|
+
declare function MailListComponent({ sections, mails, density, selectedId, checkedIds, onCheckedIdsChange, bulkActions, onBulkAction, rowActions, rowSwipeActions, actionsPlacement, swipeEnabled, onMailPress, onMailLongPress, onMailAction, onMailStarredChange, loading, loadingCount, empty, header, footer, strings, accessibilityLabel, style, testID, }: MailListProps): import("react/jsx-runtime").JSX.Element;
|
|
33
33
|
export declare const MailList: React.MemoExoticComponent<typeof MailListComponent>;
|
|
34
34
|
export {};
|
|
35
35
|
//# sourceMappingURL=MailList.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MailList.d.ts","sourceRoot":"","sources":["../../../../src/mail-list/MailList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmC,MAAM,OAAO,CAAC;AAmBxD,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,SAAS,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,iBAAS,iBAAiB,CAAC,EACzB,QAAQ,EACR,KAAK,EACL,OAAuB,EACvB,
|
|
1
|
+
{"version":3,"file":"MailList.d.ts","sourceRoot":"","sources":["../../../../src/mail-list/MailList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmC,MAAM,OAAO,CAAC;AAmBxD,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,SAAS,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,iBAAS,iBAAiB,CAAC,EACzB,QAAQ,EACR,KAAK,EACL,OAAuB,EACvB,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,OAAe,EACf,YAAgB,EAChB,KAAK,EACL,MAAM,EACN,MAAM,EACN,OAAO,EACP,kBAA2B,EAC3B,KAAK,EACL,MAAM,GACP,EAAE,aAAa,2CAwIf;AAED,eAAO,MAAM,QAAQ,qDAA0B,CAAC"}
|
|
@@ -3,11 +3,26 @@ import type { MailRowProps } from './types';
|
|
|
3
3
|
/**
|
|
4
4
|
* One message thread in the inbox.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
* and snippet
|
|
6
|
+
* comfortable 72 tall · 16 padding · 48 avatar · sender and time on the
|
|
7
|
+
* first line, subject and snippet on the second, the star on
|
|
8
|
+
* the right where it is a control
|
|
9
|
+
* compact 40 tall · 12 padding · 24 avatar · sender, then subject and
|
|
10
|
+
* snippet on ONE baseline, then the states and the time
|
|
8
11
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
12
|
+
* ONE component, two rungs of a geometry table. There is no second row
|
|
13
|
+
* component for the desktop: everything a compact row draws, a comfortable row
|
|
14
|
+
* draws too, and a density that forked into two files is a density that drifts.
|
|
15
|
+
*
|
|
16
|
+
* TWO LINES, NOT THREE, AND NOTHING DRAWN AT REST THAT IS NOT INFORMATION.
|
|
17
|
+
* The phone row is the same 72/48 as a conversation row, so an inbox and a
|
|
18
|
+
* messages screen read as one library. What paid for the third line: the
|
|
19
|
+
* subject and the snippet share line two, the labels collapse to a chip and
|
|
20
|
+
* dots, and the star is drawn only where it is a control.
|
|
21
|
+
*
|
|
22
|
+
* THE SUBJECT AND THE SNIPPET ARE ONE `Text`, at both densities. Two
|
|
23
|
+
* neighbouring flex children each want to be as wide as their content, and the
|
|
24
|
+
* result of a long one is a row that pushes sideways or a subject clipped to
|
|
25
|
+
* nothing. One string with a nested span truncates where the line ends.
|
|
11
26
|
*
|
|
12
27
|
* UNREAD IS THE WHOLE ROW, NOT A DOT. The sender and the subject go semibold
|
|
13
28
|
* and every rung of text moves up to the primary colour; a read row sits on the
|
|
@@ -27,7 +42,7 @@ import type { MailRowProps } from './types';
|
|
|
27
42
|
* SIBLINGS of the row's link and never its children — a button inside an anchor
|
|
28
43
|
* is invalid HTML, and every "Archive" click would open the message.
|
|
29
44
|
*/
|
|
30
|
-
declare function MailRowComponent({ sender, subject, snippet, time, unread, starred, onStarredChange, hasAttachment, threadCount, draft, labels, maxLabels, selected, checked, onCheckedChange, density,
|
|
45
|
+
declare function MailRowComponent({ sender, subject, snippet, time, unread, starred, onStarredChange, hasAttachment, threadCount, draft, labels, maxLabels, selected, checked, onCheckedChange, density, onPress, onLongPress, href, actions, actionsPlacement, swipeActions, swipeEnabled, onAction, accessibilityLabel, strings, style, testID, }: MailRowProps): import("react/jsx-runtime").JSX.Element;
|
|
31
46
|
export declare const MailRow: React.MemoExoticComponent<typeof MailRowComponent>;
|
|
32
47
|
export {};
|
|
33
48
|
//# sourceMappingURL=MailRow.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MailRow.d.ts","sourceRoot":"","sources":["../../../../src/mail-list/MailRow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6C,MAAM,OAAO,CAAC;AAoClE,OAAO,KAAK,EAAc,YAAY,EAAE,MAAM,SAAS,CAAC;AAExD
|
|
1
|
+
{"version":3,"file":"MailRow.d.ts","sourceRoot":"","sources":["../../../../src/mail-list/MailRow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6C,MAAM,OAAO,CAAC;AAoClE,OAAO,KAAK,EAAc,YAAY,EAAE,MAAM,SAAS,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,iBAAS,gBAAgB,CAAC,EACxB,MAAM,EACN,OAAO,EACP,OAAO,EACP,IAAI,EACJ,MAAc,EACd,OAAe,EACf,eAAe,EACf,aAAqB,EACrB,WAAW,EACX,KAAa,EACb,MAAM,EACN,SAAa,EACb,QAAgB,EAChB,OAAe,EACf,eAAe,EACf,OAAuB,EACvB,OAAO,EACP,WAAW,EACX,IAAI,EACJ,OAAO,EACP,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,kBAAkB,EAClB,OAAO,EACP,KAAK,EACL,MAAM,GACP,EAAE,YAAY,2CAyZd;AAED,eAAO,MAAM,OAAO,oDAAyB,CAAC"}
|
|
@@ -61,8 +61,15 @@ export interface MailRowGeometry {
|
|
|
61
61
|
starControl: number;
|
|
62
62
|
}
|
|
63
63
|
/**
|
|
64
|
-
*
|
|
65
|
-
*
|
|
64
|
+
* 64 tall with two lines on a phone, 40 tall with one on a desktop. The avatar
|
|
65
|
+
* is centred in both, so a row with no snippet is the same height as one with a
|
|
66
|
+
* snippet and a label.
|
|
67
|
+
*
|
|
68
|
+
* The phone rung is the same 72/48 as a `chat-list` row on purpose: a mail row
|
|
69
|
+
* and a conversation row are the same kind of object, and an inbox that stands
|
|
70
|
+
* 16px taller per row than the messages screen reads as a different library.
|
|
71
|
+
* Two lines is what pays for it — the sender and the time share the first, the
|
|
72
|
+
* subject and the snippet the second.
|
|
66
73
|
*/
|
|
67
74
|
export declare const MAIL_ROW_GEOMETRY: Record<MailDensity, MailRowGeometry>;
|
|
68
75
|
/** Corner radius of a row's hover/selected fill. A row is a surface, not a control. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/mail-list/shared.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/mail-list/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,11 +3,13 @@ import type { StyleProp, ViewStyle } from 'react-native';
|
|
|
3
3
|
import type { BloomIconComponent } from '../icons/icon-component';
|
|
4
4
|
import type { AccentTone } from '../theme/accent-colors';
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* The two rungs of ONE row, not two components.
|
|
7
|
+
*
|
|
8
|
+
* `comfortable` is the phone inbox: avatar, three lines, 88 tall. `compact` is
|
|
9
|
+
* the desktop list: one line, 40 tall, the same facts on a single baseline.
|
|
10
|
+
* Nothing but the geometry table changes between them.
|
|
9
11
|
*/
|
|
10
|
-
export type MailDensity = 'comfortable' | '
|
|
12
|
+
export type MailDensity = 'comfortable' | 'compact';
|
|
11
13
|
/** Who a message is from, as a row draws them. */
|
|
12
14
|
export interface MailSender {
|
|
13
15
|
/** The display name, or the address when there is no name. */
|
|
@@ -142,8 +144,6 @@ export interface MailRowProps {
|
|
|
142
144
|
*/
|
|
143
145
|
checked?: boolean;
|
|
144
146
|
onCheckedChange?: (checked: boolean) => void;
|
|
145
|
-
/** Show sender avatars. Selection checkboxes remain visible when enabled. */
|
|
146
|
-
showAvatar?: boolean;
|
|
147
147
|
density?: MailDensity;
|
|
148
148
|
onPress?: () => void;
|
|
149
149
|
onLongPress?: () => void;
|
|
@@ -186,8 +186,6 @@ export interface MailListProps {
|
|
|
186
186
|
sections?: readonly MailListSection[];
|
|
187
187
|
/** One unlabelled run, for a list that is not bucketed. */
|
|
188
188
|
mails?: readonly MailSummary[];
|
|
189
|
-
/** Show sender avatars. Selection checkboxes remain visible when enabled. */
|
|
190
|
-
showAvatar?: boolean;
|
|
191
189
|
density?: MailDensity;
|
|
192
190
|
/** The row the reading pane is showing. */
|
|
193
191
|
selectedId?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/mail-list/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/mail-list/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsModal.d.ts","sourceRoot":"","sources":["../../../../src/settings-modal/SettingsModal.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SettingsModal.d.ts","sourceRoot":"","sources":["../../../../src/settings-modal/SettingsModal.tsx"],"names":[],"mappings":"AAsCA,OAAO,KAAK,EAAE,kBAAkB,EAAqC,MAAM,SAAS,CAAC;AAqFrF,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,IAAI,EAAE,cAAc,EACpB,OAAO,EACP,aAAa,EACb,MAAM,EACN,KAAK,EACL,IAAI,EAAE,cAAc,EACpB,WAAW,EACX,YAAY,EACZ,WAA0B,EAC1B,MAAM,EACN,MAAM,GACP,EAAE,kBAAkB,kDA6VpB"}
|
|
@@ -18,7 +18,7 @@ export interface TextFieldGroupContextValue {
|
|
|
18
18
|
}
|
|
19
19
|
export declare const TextFieldGroupContext: import("react").Context<TextFieldGroupContextValue | null>;
|
|
20
20
|
export declare function TextField({ children, invalid: invalidNew, isInvalid, disabled: disabledProp, size: sizeProp, radius, leadingAddon, style, }: TextFieldProps): import("react/jsx-runtime").JSX.Element;
|
|
21
|
-
export declare function TextFieldInput({ label, placeholder, value, onValueChange: onValueChangeProp, onChangeText, onFocus, onBlur, invalid: invalidNew, isInvalid, disabled, size, inputRef, style, floatingLabel, ...rest }: TextFieldInputProps): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
export declare function TextFieldInput({ label, placeholder, value, onValueChange: onValueChangeProp, onChangeText, onFocus, onBlur, invalid: invalidNew, isInvalid, disabled, size, inputRef, style, floatingLabel, secureTextEntry, revealable, revealLabels, locale, ...rest }: TextFieldInputProps): import("react/jsx-runtime").JSX.Element;
|
|
22
22
|
/**
|
|
23
23
|
* The visible label ABOVE the field: `text-body-medium`
|
|
24
24
|
* (14/20 500) in `text-primary`, a `text-error-primary` asterisk and a 16px
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextField.d.ts","sourceRoot":"","sources":["../../../../src/text-field/TextField.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,kBAAkB,EAQxB,MAAM,cAAc,CAAC;AAOtB,OAAO,EAML,KAAK,aAAa,EACnB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"TextField.d.ts","sourceRoot":"","sources":["../../../../src/text-field/TextField.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,kBAAkB,EAQxB,MAAM,cAAc,CAAC;AAOtB,OAAO,EAML,KAAK,aAAa,EACnB,MAAM,WAAW,CAAC;AAQnB,OAAO,EAmBL,KAAK,aAAa,EACnB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EAEf,MAAM,SAAS,CAAC;AAoCjB;;;;;;;;GAQG;AACH,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB;AACD,eAAO,MAAM,qBAAqB,4DAAyD,CAAC;AAiD5F,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,OAAO,EAAE,UAAU,EACnB,SAAS,EACT,QAAQ,EAAE,YAAoB,EAC9B,IAAI,EAAE,QAAQ,EACd,MAA0B,EAC1B,YAAY,EACZ,KAAK,GACN,EAAE,cAAc,2CAyFhB;AAsFD,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,WAAW,EACX,KAAK,EACL,aAAa,EAAE,iBAAiB,EAChC,YAAY,EACZ,OAAO,EACP,MAAM,EACN,OAAO,EAAE,UAAU,EACnB,SAAS,EACT,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,aAAqB,EACrB,eAAe,EACf,UAAkB,EAClB,YAAY,EACZ,MAAM,EACN,GAAG,IAAI,EACR,EAAE,mBAAmB,2CAyNrB;AAqPD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,QAAQ,EACR,QAAgB,EAChB,OAAe,EACf,KAAK,GACN,EAAE,mBAAmB,2CA8BrB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,OAAO,EAAE,WAAW,EACpB,SAAS,EACT,QAAQ,EACR,KAAK,GACN,EAAE,kBAAkB,2CAmBpB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAoB,EAAE,EAAE,kBAAkB,2CA4BrF;AAED,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,KAAK,EACL,iBAAiB,EACjB,KAAK,GACN,EAAE,KAAK,CAAC,iBAAiB,CACxB,aAAa,GAAG;IACd,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;CAC7D,CACF,2CAyBA;AAED,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,KAAK,GACN,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,2CAqCA"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { TextField, TextFieldInput, TextFieldLabel, TextFieldHint, TextFieldIcon, TextFieldSuffix, TextFieldGhost, } from './TextField';
|
|
2
|
-
export type { TextFieldProps, TextFieldInputProps, TextFieldLabelProps, TextFieldHintProps, TextFieldIconProps, TextFieldSize, } from './types';
|
|
2
|
+
export type { TextFieldProps, TextFieldInputProps, TextFieldLabelProps, TextFieldHintProps, TextFieldIconProps, TextFieldSize, TextFieldRevealLabels, } from './types';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/text-field/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,cAAc,EACd,cAAc,EACd,aAAa,EACb,aAAa,EACb,eAAe,EACf,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/text-field/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,cAAc,EACd,cAAc,EACd,aAAa,EACb,aAAa,EACb,eAAe,EACf,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,qBAAqB,GACtB,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { MessageCatalog } from '../locale/messages';
|
|
2
|
+
/**
|
|
3
|
+
* Every fixed string the text-field family draws or announces, in each Bloom
|
|
4
|
+
* language. A caller's `revealLabels` still wins over the reveal pair.
|
|
5
|
+
*/
|
|
6
|
+
export interface TextFieldMessages {
|
|
7
|
+
/** The reveal button's name while the value is hidden. */
|
|
8
|
+
showPassword: string;
|
|
9
|
+
/** The reveal button's name while the value is shown. */
|
|
10
|
+
hidePassword: string;
|
|
11
|
+
/** The name of `TextFieldLabel`'s `required` asterisk. */
|
|
12
|
+
required: string;
|
|
13
|
+
}
|
|
14
|
+
export declare const TEXT_FIELD_MESSAGES: MessageCatalog<TextFieldMessages>;
|
|
15
|
+
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../../src/text-field/messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,0DAA0D;IAC1D,YAAY,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,YAAY,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,mBAAmB,EAAE,cAAc,CAAC,iBAAiB,CAoBjE,CAAC"}
|
|
@@ -51,7 +51,25 @@ export type TextFieldInputProps = Omit<TextInputProps, 'value' | 'onChangeText'
|
|
|
51
51
|
* identically. Respects reduced-motion (snaps instead of animating).
|
|
52
52
|
*/
|
|
53
53
|
floatingLabel?: boolean;
|
|
54
|
+
/**
|
|
55
|
+
* With `secureTextEntry`, draw an eye / eye-off button after the input that
|
|
56
|
+
* shows and hides what was typed. It is named "Show password" / "Hide
|
|
57
|
+
* password" in the locale (`docs/locale.mdx`); `revealLabels` overrides
|
|
58
|
+
* either. Pressing it leaves focus in the input. Ignored without
|
|
59
|
+
* `secureTextEntry`.
|
|
60
|
+
*/
|
|
61
|
+
revealable?: boolean;
|
|
62
|
+
/** Override the reveal button's names, one key at a time. */
|
|
63
|
+
revealLabels?: TextFieldRevealLabels;
|
|
64
|
+
/** Locale for the reveal button's names; defaults to the nearest `LocaleProvider`. */
|
|
65
|
+
locale?: string;
|
|
54
66
|
};
|
|
67
|
+
export interface TextFieldRevealLabels {
|
|
68
|
+
/** The name while the value is hidden. */
|
|
69
|
+
show?: string;
|
|
70
|
+
/** The name while the value is shown. */
|
|
71
|
+
hide?: string;
|
|
72
|
+
}
|
|
55
73
|
export type TextFieldLabelProps = React.PropsWithChildren<{
|
|
56
74
|
nativeID?: string;
|
|
57
75
|
/** Append the `text-error-primary` asterisk. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/text-field/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9D,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,KAAK,EAAE,KAAK,IAAI,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC,iBAAiB,CAClD;IACE,OAAO,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAChC,GAAG,aAAa,CAClB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,IAAI,CACpC,cAAc,EACd,OAAO,GAAG,cAAc,GAAG,aAAa,CACzC,GAAG;IACF,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0EAA0E;IAC1E,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC7E,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC;;;;;;;;;;;OAWG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/text-field/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9D,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,KAAK,EAAE,KAAK,IAAI,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC,iBAAiB,CAClD;IACE,OAAO,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAChC,GAAG,aAAa,CAClB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,IAAI,CACpC,cAAc,EACd,OAAO,GAAG,cAAc,GAAG,aAAa,CACzC,GAAG;IACF,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0EAA0E;IAC1E,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC7E,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC;;;;;;;;;;;OAWG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,qBAAqB,CAAC;IACrC,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,mBAAmB,GAAG,KAAK,CAAC,iBAAiB,CACvD;IACE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gDAAgD;IAChD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,aAAa,CAClB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,KAAK,CAAC,iBAAiB,CACtD;IACE,0CAA0C;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,aAAa,CAClB,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,6CAA6C;IAC7C,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IACxC,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;CACnC"}
|
package/package.json
CHANGED
|
@@ -52,7 +52,6 @@ function MailListComponent({
|
|
|
52
52
|
sections,
|
|
53
53
|
mails,
|
|
54
54
|
density = 'comfortable',
|
|
55
|
-
showAvatar = true,
|
|
56
55
|
selectedId,
|
|
57
56
|
checkedIds,
|
|
58
57
|
onCheckedIdsChange,
|
|
@@ -163,7 +162,6 @@ function MailListComponent({
|
|
|
163
162
|
actionsPlacement={mail.actionsPlacement ?? actionsPlacement}
|
|
164
163
|
swipeEnabled={mail.swipeEnabled ?? swipeEnabled}
|
|
165
164
|
density={density}
|
|
166
|
-
showAvatar={mail.showAvatar ?? showAvatar}
|
|
167
165
|
strings={mail.strings ?? strings}
|
|
168
166
|
selected={selectedId === id}
|
|
169
167
|
checked={checked.has(id)}
|
|
@@ -39,11 +39,26 @@ import type { MailAction, MailRowProps } from './types';
|
|
|
39
39
|
/**
|
|
40
40
|
* One message thread in the inbox.
|
|
41
41
|
*
|
|
42
|
-
*
|
|
43
|
-
* and snippet
|
|
42
|
+
* comfortable 72 tall · 16 padding · 48 avatar · sender and time on the
|
|
43
|
+
* first line, subject and snippet on the second, the star on
|
|
44
|
+
* the right where it is a control
|
|
45
|
+
* compact 40 tall · 12 padding · 24 avatar · sender, then subject and
|
|
46
|
+
* snippet on ONE baseline, then the states and the time
|
|
44
47
|
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
48
|
+
* ONE component, two rungs of a geometry table. There is no second row
|
|
49
|
+
* component for the desktop: everything a compact row draws, a comfortable row
|
|
50
|
+
* draws too, and a density that forked into two files is a density that drifts.
|
|
51
|
+
*
|
|
52
|
+
* TWO LINES, NOT THREE, AND NOTHING DRAWN AT REST THAT IS NOT INFORMATION.
|
|
53
|
+
* The phone row is the same 72/48 as a conversation row, so an inbox and a
|
|
54
|
+
* messages screen read as one library. What paid for the third line: the
|
|
55
|
+
* subject and the snippet share line two, the labels collapse to a chip and
|
|
56
|
+
* dots, and the star is drawn only where it is a control.
|
|
57
|
+
*
|
|
58
|
+
* THE SUBJECT AND THE SNIPPET ARE ONE `Text`, at both densities. Two
|
|
59
|
+
* neighbouring flex children each want to be as wide as their content, and the
|
|
60
|
+
* result of a long one is a row that pushes sideways or a subject clipped to
|
|
61
|
+
* nothing. One string with a nested span truncates where the line ends.
|
|
47
62
|
*
|
|
48
63
|
* UNREAD IS THE WHOLE ROW, NOT A DOT. The sender and the subject go semibold
|
|
49
64
|
* and every rung of text moves up to the primary colour; a read row sits on the
|
|
@@ -80,7 +95,6 @@ function MailRowComponent({
|
|
|
80
95
|
checked = false,
|
|
81
96
|
onCheckedChange,
|
|
82
97
|
density = 'comfortable',
|
|
83
|
-
showAvatar = true,
|
|
84
98
|
onPress,
|
|
85
99
|
onLongPress,
|
|
86
100
|
href,
|
|
@@ -238,7 +252,7 @@ function MailRowComponent({
|
|
|
238
252
|
testID={testID ? `${testID}-checkbox` : undefined}
|
|
239
253
|
/>
|
|
240
254
|
</View>
|
|
241
|
-
) :
|
|
255
|
+
) : (
|
|
242
256
|
<View
|
|
243
257
|
pointerEvents="none"
|
|
244
258
|
aria-hidden
|
|
@@ -252,7 +266,7 @@ function MailRowComponent({
|
|
|
252
266
|
testID={testID ? `${testID}-avatar` : undefined}
|
|
253
267
|
/>
|
|
254
268
|
</View>
|
|
255
|
-
)
|
|
269
|
+
);
|
|
256
270
|
|
|
257
271
|
// --- the text column -----------------------------------------------------
|
|
258
272
|
const column = compact ? (
|
|
@@ -266,7 +280,7 @@ function MailRowComponent({
|
|
|
266
280
|
flexDirection: 'row',
|
|
267
281
|
alignItems: 'center',
|
|
268
282
|
gap: geo.gap,
|
|
269
|
-
marginLeft:
|
|
283
|
+
marginLeft: geo.gap,
|
|
270
284
|
}}
|
|
271
285
|
>
|
|
272
286
|
<Text
|
|
@@ -301,7 +315,7 @@ function MailRowComponent({
|
|
|
301
315
|
pointerEvents="none"
|
|
302
316
|
aria-hidden
|
|
303
317
|
importantForAccessibility="no-hide-descendants"
|
|
304
|
-
style={{ flex: 1, minWidth: 0, marginLeft:
|
|
318
|
+
style={{ flex: 1, minWidth: 0, marginLeft: geo.gap, gap: geo.lineGap }}
|
|
305
319
|
>
|
|
306
320
|
<View style={{ flexDirection: 'row', alignItems: 'center', gap: 6, minWidth: 0 }}>
|
|
307
321
|
<Text
|
package/src/mail-list/shared.ts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { Platform } from 'react-native';
|
|
2
2
|
|
|
3
|
-
import { space } from '../styles/tokens';
|
|
4
|
-
|
|
5
3
|
import { RiInbox2Line } from '../icons/remix/RiInbox2Line';
|
|
6
4
|
import {
|
|
7
5
|
hairlineOn,
|
|
@@ -30,7 +28,7 @@ export const IS_WEB = Platform.OS === 'web';
|
|
|
30
28
|
export const MAIL_EMPTY_ICON = RiInbox2Line;
|
|
31
29
|
|
|
32
30
|
// ---------------------------------------------------------------------------
|
|
33
|
-
// Geometry — the whole difference between the densities
|
|
31
|
+
// Geometry — the whole difference between the two densities
|
|
34
32
|
// ---------------------------------------------------------------------------
|
|
35
33
|
|
|
36
34
|
export interface MailRowGeometry {
|
|
@@ -84,8 +82,15 @@ export interface MailRowGeometry {
|
|
|
84
82
|
}
|
|
85
83
|
|
|
86
84
|
/**
|
|
87
|
-
*
|
|
88
|
-
*
|
|
85
|
+
* 64 tall with two lines on a phone, 40 tall with one on a desktop. The avatar
|
|
86
|
+
* is centred in both, so a row with no snippet is the same height as one with a
|
|
87
|
+
* snippet and a label.
|
|
88
|
+
*
|
|
89
|
+
* The phone rung is the same 72/48 as a `chat-list` row on purpose: a mail row
|
|
90
|
+
* and a conversation row are the same kind of object, and an inbox that stands
|
|
91
|
+
* 16px taller per row than the messages screen reads as a different library.
|
|
92
|
+
* Two lines is what pays for it — the sender and the time share the first, the
|
|
93
|
+
* subject and the snippet the second.
|
|
89
94
|
*/
|
|
90
95
|
export const MAIL_ROW_GEOMETRY: Record<MailDensity, MailRowGeometry> = {
|
|
91
96
|
comfortable: {
|
|
@@ -113,27 +118,6 @@ export const MAIL_ROW_GEOMETRY: Record<MailDensity, MailRowGeometry> = {
|
|
|
113
118
|
actionGlyph: 18,
|
|
114
119
|
starControl: 24,
|
|
115
120
|
},
|
|
116
|
-
cozy: {
|
|
117
|
-
minHeight: 80,
|
|
118
|
-
paddingVertical: space.lg,
|
|
119
|
-
paddingHorizontal: space.lg,
|
|
120
|
-
avatar: 48,
|
|
121
|
-
gap: space.md,
|
|
122
|
-
lineGap: space._2xs,
|
|
123
|
-
glyph: space.lg,
|
|
124
|
-
senderWidth: 0,
|
|
125
|
-
senderMinWidth: 0,
|
|
126
|
-
senderMaxWidth: '100%',
|
|
127
|
-
senderVariant: 'headline-regular',
|
|
128
|
-
senderUnreadVariant: 'headline-semibold',
|
|
129
|
-
subjectVariant: 'body-regular',
|
|
130
|
-
subjectUnreadVariant: 'body-semibold',
|
|
131
|
-
snippetVariant: 'body-regular',
|
|
132
|
-
timeVariant: 'caption-1-regular',
|
|
133
|
-
action: 44,
|
|
134
|
-
actionGlyph: 18,
|
|
135
|
-
starControl: space._2xl,
|
|
136
|
-
},
|
|
137
121
|
compact: {
|
|
138
122
|
minHeight: 40,
|
|
139
123
|
height: 40,
|
|
@@ -177,7 +161,6 @@ export const MAIL_LABEL_DOT = 8;
|
|
|
177
161
|
/** The selection bar's height, per density. */
|
|
178
162
|
export const MAIL_SELECTION_BAR_HEIGHT: Record<MailDensity, number> = {
|
|
179
163
|
comfortable: 56,
|
|
180
|
-
cozy: 56,
|
|
181
164
|
compact: 44,
|
|
182
165
|
};
|
|
183
166
|
|
package/src/mail-list/types.ts
CHANGED
|
@@ -5,11 +5,13 @@ import type { BloomIconComponent } from '../icons/icon-component';
|
|
|
5
5
|
import type { AccentTone } from '../theme/accent-colors';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* The two rungs of ONE row, not two components.
|
|
9
|
+
*
|
|
10
|
+
* `comfortable` is the phone inbox: avatar, three lines, 88 tall. `compact` is
|
|
11
|
+
* the desktop list: one line, 40 tall, the same facts on a single baseline.
|
|
12
|
+
* Nothing but the geometry table changes between them.
|
|
11
13
|
*/
|
|
12
|
-
export type MailDensity = 'comfortable' | '
|
|
14
|
+
export type MailDensity = 'comfortable' | 'compact';
|
|
13
15
|
|
|
14
16
|
/** Who a message is from, as a row draws them. */
|
|
15
17
|
export interface MailSender {
|
|
@@ -152,8 +154,6 @@ export interface MailRowProps {
|
|
|
152
154
|
*/
|
|
153
155
|
checked?: boolean;
|
|
154
156
|
onCheckedChange?: (checked: boolean) => void;
|
|
155
|
-
/** Show sender avatars. Selection checkboxes remain visible when enabled. */
|
|
156
|
-
showAvatar?: boolean;
|
|
157
157
|
density?: MailDensity;
|
|
158
158
|
onPress?: () => void;
|
|
159
159
|
onLongPress?: () => void;
|
|
@@ -203,8 +203,6 @@ export interface MailListProps {
|
|
|
203
203
|
sections?: readonly MailListSection[];
|
|
204
204
|
/** One unlabelled run, for a list that is not bucketed. */
|
|
205
205
|
mails?: readonly MailSummary[];
|
|
206
|
-
/** Show sender avatars. Selection checkboxes remain visible when enabled. */
|
|
207
|
-
showAvatar?: boolean;
|
|
208
206
|
density?: MailDensity;
|
|
209
207
|
/** The row the reading pane is showing. */
|
|
210
208
|
selectedId?: string;
|
|
@@ -25,7 +25,6 @@ import { PageHeader } from '../page-header';
|
|
|
25
25
|
import { ButtonGroup, ButtonGroupItem } from '../button-group';
|
|
26
26
|
import { RiCloseLine } from '../icons/remix/RiCloseLine';
|
|
27
27
|
import { Backdrop, OverlayRoot } from '../overlay';
|
|
28
|
-
import { ModalKeyboard } from '../overlay/ModalKeyboard';
|
|
29
28
|
import type { WebCssStyle } from '../styles/web-view-style';
|
|
30
29
|
import { webDataSet } from '../styles/web-data';
|
|
31
30
|
import { Text } from '../typography';
|
|
@@ -136,7 +135,6 @@ export function SettingsModal({
|
|
|
136
135
|
labels,
|
|
137
136
|
testID,
|
|
138
137
|
}: SettingsModalProps) {
|
|
139
|
-
const panelRef = useRef<View>(null);
|
|
140
138
|
const common = useCommonMessages();
|
|
141
139
|
useSettingsWebCss();
|
|
142
140
|
const palette = useSettingsPalette();
|
|
@@ -250,6 +248,21 @@ export function SettingsModal({
|
|
|
250
248
|
if (mayLeave('navigation')) setCompactPageOpen(false);
|
|
251
249
|
}, [mayLeave]);
|
|
252
250
|
|
|
251
|
+
// Escape closes (web). On `window`, not `document`: a menu or popover opened
|
|
252
|
+
// inside the modal handles Escape on `document` and stops propagation there,
|
|
253
|
+
// so the innermost surface closes first and the modal stays open.
|
|
254
|
+
useEffect(() => {
|
|
255
|
+
if (!mounted || !IS_WEB || typeof window === 'undefined') return;
|
|
256
|
+
const handler = (event: KeyboardEvent) => {
|
|
257
|
+
if (event.key === 'Escape') {
|
|
258
|
+
event.stopPropagation();
|
|
259
|
+
requestClose();
|
|
260
|
+
}
|
|
261
|
+
};
|
|
262
|
+
window.addEventListener('keydown', handler);
|
|
263
|
+
return () => window.removeEventListener('keydown', handler);
|
|
264
|
+
}, [mounted, requestClose]);
|
|
265
|
+
|
|
253
266
|
const compactPageOpenRef = useRef(false);
|
|
254
267
|
compactPageOpenRef.current = compactPageOpen && layoutRef.current === 'compact';
|
|
255
268
|
|
|
@@ -337,14 +350,6 @@ export function SettingsModal({
|
|
|
337
350
|
<ModalPortal>
|
|
338
351
|
<SettingsModalContext.Provider value={context}>
|
|
339
352
|
<OverlayRoot onRequestClose={onHardwareBack} modal>
|
|
340
|
-
{IS_WEB ? (
|
|
341
|
-
<ModalKeyboard
|
|
342
|
-
panelRef={panelRef}
|
|
343
|
-
closing={!visible && wasVisible.current}
|
|
344
|
-
dismissible
|
|
345
|
-
dismiss={requestClose}
|
|
346
|
-
/>
|
|
347
|
-
) : null}
|
|
348
353
|
<Backdrop
|
|
349
354
|
onPress={requestClose}
|
|
350
355
|
progress={progress}
|
|
@@ -367,8 +372,6 @@ export function SettingsModal({
|
|
|
367
372
|
]}
|
|
368
373
|
>
|
|
369
374
|
<View
|
|
370
|
-
ref={panelRef}
|
|
371
|
-
tabIndex={IS_WEB ? -1 : undefined}
|
|
372
375
|
role="dialog"
|
|
373
376
|
aria-modal
|
|
374
377
|
aria-label={labels?.dialog ?? 'Settings'}
|