@multiplatform.one/forms 7.55.0 → 7.56.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/cjs/DescriptionList/index.cjs +216 -54
- package/dist/cjs/DescriptionList/index.native.js +226 -57
- package/dist/cjs/DescriptionList/index.native.js.map +1 -1
- package/dist/cjs/FieldDisplay/index.cjs +8 -2
- package/dist/cjs/FieldDisplay/index.native.js +8 -2
- package/dist/cjs/FieldDisplay/index.native.js.map +1 -1
- package/dist/cjs/fields/Switch/index.cjs +13 -0
- package/dist/cjs/fields/Switch/index.native.js +13 -0
- package/dist/cjs/fields/Switch/index.native.js.map +1 -1
- package/dist/esm/AdaptivePopup/index.native.js.map +1 -1
- package/dist/esm/Button/index.native.js.map +1 -1
- package/dist/esm/Chip/index.native.js.map +1 -1
- package/dist/esm/ContextualSaveBar/UnsavedChangesDialog.native.js.map +1 -1
- package/dist/esm/ContextualSaveBar/clientKnownIdentity.native.js.map +1 -1
- package/dist/esm/ContextualSaveBar/commitImmediateField.native.js.map +1 -1
- package/dist/esm/ContextualSaveBar/index.native.js.map +1 -1
- package/dist/esm/ContextualSaveBar/useUnsavedChangesGuard.native.js.map +1 -1
- package/dist/esm/ControlGroup/index.native.js.map +1 -1
- package/dist/esm/DescriptionList/index.mjs +217 -56
- package/dist/esm/DescriptionList/index.mjs.map +1 -1
- package/dist/esm/DescriptionList/index.native.js +227 -59
- package/dist/esm/DescriptionList/index.native.js.map +1 -1
- package/dist/esm/ErrorSummary.native.js.map +1 -1
- package/dist/esm/FieldDisplay/editMode.native.js.map +1 -1
- package/dist/esm/FieldDisplay/formatters.native.js.map +1 -1
- package/dist/esm/FieldDisplay/index.mjs +8 -2
- package/dist/esm/FieldDisplay/index.mjs.map +1 -1
- package/dist/esm/FieldDisplay/index.native.js +8 -2
- package/dist/esm/FieldDisplay/index.native.js.map +1 -1
- package/dist/esm/FieldGroup.native.js.map +1 -1
- package/dist/esm/FloatingPanel/nestedAction.native.js.map +1 -1
- package/dist/esm/FloatingPanel/pointAnchor.native.js.map +1 -1
- package/dist/esm/FloatingPanel/trailingAction.native.js.map +1 -1
- package/dist/esm/FloatingPanel/useFloatingPanel.native.js.map +1 -1
- package/dist/esm/Form/index.native.js.map +1 -1
- package/dist/esm/Form/submissionController.native.js.map +1 -1
- package/dist/esm/Form/validateOn.native.js.map +1 -1
- package/dist/esm/FormGrid.native.js.map +1 -1
- package/dist/esm/FormSection.native.js.map +1 -1
- package/dist/esm/InputParts/PasswordReveal.native.js.map +1 -1
- package/dist/esm/InputParts/index.native.js.map +1 -1
- package/dist/esm/Label/index.native.js.map +1 -1
- package/dist/esm/MediaPicker/base64.native.js.map +1 -1
- package/dist/esm/MediaPicker/payload.native.js.map +1 -1
- package/dist/esm/MediaPicker/types.native.js.map +1 -1
- package/dist/esm/MediaPicker/useMediaPicker.native.js.map +1 -1
- package/dist/esm/Skeleton/index.native.js.map +1 -1
- package/dist/esm/Spinner/SpinnerGlyph.native.js.map +1 -1
- package/dist/esm/Spinner/spinnerSize.native.js.map +1 -1
- package/dist/esm/Table/index.native.js.map +1 -1
- package/dist/esm/Wheel/haptic.native.js.map +1 -1
- package/dist/esm/Wheel/index.native.js.map +1 -1
- package/dist/esm/Wheel/wheelShared.native.js.map +1 -1
- package/dist/esm/actionLabel.native.js.map +1 -1
- package/dist/esm/fieldDefaults.native.js.map +1 -1
- package/dist/esm/fieldLayout.native.js.map +1 -1
- package/dist/esm/fields/Barcode/BarcodePreview.native.js.map +1 -1
- package/dist/esm/fields/Barcode/code128.native.js.map +1 -1
- package/dist/esm/fields/Barcode/index.native.js.map +1 -1
- package/dist/esm/fields/Barcode/qr.native.js.map +1 -1
- package/dist/esm/fields/Barcode/scannerTypes.native.js.map +1 -1
- package/dist/esm/fields/Checkbox/Checkbox.native.js.map +1 -1
- package/dist/esm/fields/Checkbox/CheckboxBox.native.js.map +1 -1
- package/dist/esm/fields/Checkbox/CheckboxCard.native.js.map +1 -1
- package/dist/esm/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
- package/dist/esm/fields/Checkbox/CheckboxGroup.native.js.map +1 -1
- package/dist/esm/fields/Checkbox/checkboxGroupContext.native.js.map +1 -1
- package/dist/esm/fields/Checkbox/index.native.js.map +1 -1
- package/dist/esm/fields/ColorPicker/index.native.js.map +1 -1
- package/dist/esm/fields/ColorPicker/parts.native.js.map +1 -1
- package/dist/esm/fields/Combobox/authorOptions.native.js.map +1 -1
- package/dist/esm/fields/Combobox/index.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/Calendar.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/DateRangePicker.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/MonthPicker.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/catalog.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/fieldValueSync.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/parts.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/utils.native.js.map +1 -1
- package/dist/esm/fields/Duration/durationMath.native.js.map +1 -1
- package/dist/esm/fields/Duration/index.native.js.map +1 -1
- package/dist/esm/fields/FileUpload/filePickerTypes.native.js.map +1 -1
- package/dist/esm/fields/FileUpload/index.native.js.map +1 -1
- package/dist/esm/fields/FileUpload/nativePickerLoader.native.js.map +1 -1
- package/dist/esm/fields/Geolocation/expoMapsLoader.native.js.map +1 -1
- package/dist/esm/fields/Geolocation/geoValue.native.js.map +1 -1
- package/dist/esm/fields/Geolocation/geocoder.native.js.map +1 -1
- package/dist/esm/fields/Geolocation/geocoderContext.native.js.map +1 -1
- package/dist/esm/fields/Geolocation/index.native.js.map +1 -1
- package/dist/esm/fields/Geolocation/mapMath.native.js.map +1 -1
- package/dist/esm/fields/Geolocation/mapTypes.native.js.map +1 -1
- package/dist/esm/fields/Geolocation/nativeSearchFocus.native.js.map +1 -1
- package/dist/esm/fields/Geolocation/photonGeocoder.native.js.map +1 -1
- package/dist/esm/fields/Icon/drawnSet.native.js.map +1 -1
- package/dist/esm/fields/Icon/index.native.js.map +1 -1
- package/dist/esm/fields/ImageField/index.native.js.map +1 -1
- package/dist/esm/fields/Input/index.native.js.map +1 -1
- package/dist/esm/fields/MentionInput/index.native.js.map +1 -1
- package/dist/esm/fields/OTPInput/index.native.js.map +1 -1
- package/dist/esm/fields/OTPInput/otpCellCss.native.js.map +1 -1
- package/dist/esm/fields/PhoneInput/dialCodes.native.js.map +1 -1
- package/dist/esm/fields/PhoneInput/index.native.js.map +1 -1
- package/dist/esm/fields/PhoneInput/phone.native.js.map +1 -1
- package/dist/esm/fields/PhoneInput/regionNames.native.js.map +1 -1
- package/dist/esm/fields/Progress/index.native.js.map +1 -1
- package/dist/esm/fields/RadioGroup/index.native.js.map +1 -1
- package/dist/esm/fields/Rating/index.native.js.map +1 -1
- package/dist/esm/fields/Rating/ratingMath.native.js.map +1 -1
- package/dist/esm/fields/Rating/types.native.js.map +1 -1
- package/dist/esm/fields/SearchInput/index.native.js.map +1 -1
- package/dist/esm/fields/Select/index.native.js.map +1 -1
- package/dist/esm/fields/Signature/index.native.js.map +1 -1
- package/dist/esm/fields/Slider/index.native.js.map +1 -1
- package/dist/esm/fields/Slider/jumpMotion.native.js.map +1 -1
- package/dist/esm/fields/Stepper/index.native.js.map +1 -1
- package/dist/esm/fields/Stepper/resolveStepperPlacement.native.js.map +1 -1
- package/dist/esm/fields/Switch/footprint.native.js.map +1 -1
- package/dist/esm/fields/Switch/index.mjs +13 -0
- package/dist/esm/fields/Switch/index.mjs.map +1 -1
- package/dist/esm/fields/Switch/index.native.js +13 -0
- package/dist/esm/fields/Switch/index.native.js.map +1 -1
- package/dist/esm/fields/TextArea/index.native.js.map +1 -1
- package/dist/esm/fields/TimePicker/catalog.native.js.map +1 -1
- package/dist/esm/fields/TimePicker/parts.native.js.map +1 -1
- package/dist/esm/fields/TimeRangeScrubber/geometry.native.js.map +1 -1
- package/dist/esm/fields/TimeRangeScrubber/index.native.js.map +1 -1
- package/dist/esm/fields/ToggleGroup/index.native.js.map +1 -1
- package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
- package/dist/esm/fields/nativeDateTime/dateTimePickerLoader.native.js.map +1 -1
- package/dist/esm/fields/nativeDateTime/osDateTimeIosDisplay.native.js.map +1 -1
- package/dist/esm/fields/nativeSelect.native.js.map +1 -1
- package/dist/esm/fields/selectedOrder.native.js.map +1 -1
- package/dist/esm/formSpacing.native.js.map +1 -1
- package/dist/esm/hooks/useFocusManagement.native.js.map +1 -1
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/keyboard/chain.native.js.map +1 -1
- package/dist/esm/keyboard/index.native.js.map +1 -1
- package/dist/esm/keyboard/types.native.js.map +1 -1
- package/dist/esm/requiredMarking.native.js.map +1 -1
- package/dist/esm/shared/TimeColumn.native.js.map +1 -1
- package/dist/esm/shared/capabilityPreflight.native.js.map +1 -1
- package/dist/esm/shared/colorRamps.native.js.map +1 -1
- package/dist/esm/shared/devWarn.native.js.map +1 -1
- package/dist/esm/shared/floatingList.native.js.map +1 -1
- package/dist/esm/shared/focusManagement.native.js.map +1 -1
- package/dist/esm/shared/groupContext.native.js.map +1 -1
- package/dist/esm/shared/i18n.native.js.map +1 -1
- package/dist/esm/shared/instantMotion.native.js.map +1 -1
- package/dist/esm/shared/nativeA11y.native.js.map +1 -1
- package/dist/esm/shared/nativeAutoFocus.native.js.map +1 -1
- package/dist/esm/shared/overlayStack.native.js.map +1 -1
- package/dist/esm/shared/panelPortal.native.js.map +1 -1
- package/dist/esm/shared/pickerTriggerContract.native.js.map +1 -1
- package/dist/esm/shared/pressSlopProps.native.js.map +1 -1
- package/dist/esm/shared/restoreRetries.native.js.map +1 -1
- package/dist/esm/shared/t.native.js.map +1 -1
- package/dist/esm/shared/tableCellContext.native.js.map +1 -1
- package/dist/esm/shared/useDragScroll.native.js.map +1 -1
- package/dist/esm/shared/useKeyboardInset.native.js.map +1 -1
- package/dist/esm/shared/useSheetEscapeDismiss.native.js.map +1 -1
- package/dist/esm/shared/useWheelIncrement.native.js.map +1 -1
- package/dist/esm/shared/utils.native.js.map +1 -1
- package/dist/esm/shared/zIndex.native.js.map +1 -1
- package/dist/esm/themedPrimitives.native.js.map +1 -1
- package/dist/esm/types.native.js.map +1 -1
- package/dist/esm/utils/LinkCell.native.js.map +1 -1
- package/dist/jsx/DescriptionList/index.mjs +217 -56
- package/dist/jsx/DescriptionList/index.mjs.map +1 -1
- package/dist/jsx/DescriptionList/index.native.js +226 -57
- package/dist/jsx/DescriptionList/index.native.js.map +1 -1
- package/dist/jsx/FieldDisplay/index.mjs +8 -2
- package/dist/jsx/FieldDisplay/index.mjs.map +1 -1
- package/dist/jsx/FieldDisplay/index.native.js +8 -2
- package/dist/jsx/FieldDisplay/index.native.js.map +1 -1
- package/dist/jsx/fields/Switch/index.mjs +13 -0
- package/dist/jsx/fields/Switch/index.mjs.map +1 -1
- package/dist/jsx/fields/Switch/index.native.js +13 -0
- package/dist/jsx/fields/Switch/index.native.js.map +1 -1
- package/dist/jsx/index.native.js.map +1 -1
- package/package.json +8 -8
- package/src/DescriptionList/DescriptionList.secondaryInk.spec.tsx +49 -0
- package/src/DescriptionList/DescriptionList.spec.tsx +87 -1
- package/src/DescriptionList/index.tsx +235 -81
- package/src/FieldDisplay/index.tsx +4 -2
- package/src/fields/Switch/Switch.spec.tsx +21 -0
- package/src/fields/Switch/index.tsx +20 -0
- package/types/DescriptionList/index.d.ts +27 -4
- package/types/DescriptionList/index.d.ts.map +1 -1
- package/types/FieldDisplay/index.d.ts.map +1 -1
- package/types/fields/Switch/index.d.ts +7 -1
- package/types/fields/Switch/index.d.ts.map +1 -1
|
@@ -7,15 +7,20 @@
|
|
|
7
7
|
* read/edit flip moves no label (LC-44). Chromeless by default (LC-39);
|
|
8
8
|
* the framed variant paints, so it earns the Card inset.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
10
|
+
* LC-169 CARD-HIERARCHY: the term is the label role (footnote size,
|
|
11
|
+
* secondary ink) and the value the body in the primary ink, so a label never
|
|
12
|
+
* reads at its value's size, weight and ink. An `identifier` row (a URL, an
|
|
13
|
+
* id) is mono, one line, truncated in the middle, with copy. House Separator
|
|
14
|
+
* (1px `$borderColor`, quiet = opacity 0.5) owns the row rule.
|
|
12
15
|
* Forms cannot import `@multiplatform.one/components` (that package depends
|
|
13
16
|
* on forms); the recipes are the same measured law.
|
|
14
17
|
*/
|
|
15
18
|
|
|
16
19
|
import {
|
|
17
20
|
Children,
|
|
21
|
+
createContext,
|
|
18
22
|
isValidElement,
|
|
23
|
+
useContext,
|
|
19
24
|
useLayoutEffect,
|
|
20
25
|
useMemo,
|
|
21
26
|
useRef,
|
|
@@ -25,7 +30,14 @@ import {
|
|
|
25
30
|
type ReactNode,
|
|
26
31
|
type Ref,
|
|
27
32
|
} from "react";
|
|
28
|
-
import {
|
|
33
|
+
import { writeToClipboard } from "@multiplatform.one/platform";
|
|
34
|
+
import {
|
|
35
|
+
IconSlot,
|
|
36
|
+
compareSizeTokens,
|
|
37
|
+
useGlyphColor,
|
|
38
|
+
useResolvedKnobs,
|
|
39
|
+
} from "@multiplatform.one/theme";
|
|
40
|
+
import { CopyIcon } from "@phosphor-icons/react";
|
|
29
41
|
import { type SizeTokens, Text, View, XStack, YStack, isWeb } from "tamagui";
|
|
30
42
|
import { Button } from "../Button";
|
|
31
43
|
import { FORM_GRID_COLLAPSE_WIDTH } from "../FormGrid";
|
|
@@ -34,10 +46,17 @@ import { formReadableMaxWidth } from "../formSpacing";
|
|
|
34
46
|
import { DescriptionListSlotProvider, FieldDisplay, type FieldDisplayType } from "../FieldDisplay";
|
|
35
47
|
import { t } from "../shared/t";
|
|
36
48
|
|
|
37
|
-
|
|
49
|
+
/**
|
|
50
|
+
* `inline` is the card fact row (LC-169): glyph and label leading, the value
|
|
51
|
+
* trailing on the same line, a hairline between rows. An identifier row still
|
|
52
|
+
* stacks, since a long mono id cannot share its line.
|
|
53
|
+
*/
|
|
54
|
+
export type DescriptionListPlacement = "side" | "top" | "inline";
|
|
38
55
|
|
|
39
56
|
export interface DescriptionListItem {
|
|
40
57
|
term: ReactNode;
|
|
58
|
+
/** A glyph that names the fact's kind, before the term in the secondary ink. */
|
|
59
|
+
icon?: ReactNode;
|
|
41
60
|
/** FieldDisplay type — every typed value mounts FieldDisplay (LC-12). */
|
|
42
61
|
field?: FieldDisplayType;
|
|
43
62
|
value?: any;
|
|
@@ -45,6 +64,11 @@ export interface DescriptionListItem {
|
|
|
45
64
|
linkedValue?: any;
|
|
46
65
|
/** Opt-in ellipsis for identifier-class values (DG-OVF). */
|
|
47
66
|
truncate?: boolean;
|
|
67
|
+
/**
|
|
68
|
+
* A long identifier (URL, id, digest): mono, one line, truncated in the
|
|
69
|
+
* middle so both ends stay legible, with a copy action (LC-169).
|
|
70
|
+
*/
|
|
71
|
+
identifier?: boolean;
|
|
48
72
|
/** Optional per-row Change action. */
|
|
49
73
|
onChange?: () => void;
|
|
50
74
|
changeLabel?: string;
|
|
@@ -83,6 +107,8 @@ export interface DescriptionListProps {
|
|
|
83
107
|
* tight rhythm (shorter rows, `gapSm` columns).
|
|
84
108
|
*/
|
|
85
109
|
size?: SizeTokens;
|
|
110
|
+
/** Called after an identifier row's copy, for the owner's confirm (CopyField precedent). */
|
|
111
|
+
onCopyResult?: (ok: boolean) => void;
|
|
86
112
|
testID?: string;
|
|
87
113
|
}
|
|
88
114
|
|
|
@@ -114,7 +140,7 @@ function resolvePlacement(
|
|
|
114
140
|
prop: DescriptionListPlacement | undefined,
|
|
115
141
|
knobPlacement: string,
|
|
116
142
|
): DescriptionListPlacement {
|
|
117
|
-
if (prop === "side" || prop === "top") return prop;
|
|
143
|
+
if (prop === "side" || prop === "top" || prop === "inline") return prop;
|
|
118
144
|
if (knobPlacement === "top" || knobPlacement === "side") {
|
|
119
145
|
return knobPlacement;
|
|
120
146
|
}
|
|
@@ -154,15 +180,17 @@ function ListRule({ quiet }: { quiet?: boolean }) {
|
|
|
154
180
|
);
|
|
155
181
|
}
|
|
156
182
|
|
|
157
|
-
function TermText({ children }: { children: ReactNode }) {
|
|
183
|
+
function TermText({ children, inline = false }: { children: ReactNode; inline?: boolean }) {
|
|
158
184
|
const { knobProps } = useResolvedKnobs();
|
|
159
185
|
return (
|
|
160
186
|
<Text
|
|
161
187
|
data-mpo-description-list-term=""
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
188
|
+
// LC-169: a stacked term is the label role (a size under its value, the
|
|
189
|
+
// secondary ink); an inline one shares the value's line, so it takes the
|
|
190
|
+
// value's size and differs by ink.
|
|
191
|
+
{...(inline
|
|
192
|
+
? { ...knobProps.body, ...knobProps.label, color: "$textMuted" }
|
|
193
|
+
: knobProps.textRole.label)}
|
|
166
194
|
minWidth={0}
|
|
167
195
|
// `overflowWrap` is not a tamagui style prop; passed as one it reaches
|
|
168
196
|
// the DOM host as an unknown React prop. Web takes it through `style`.
|
|
@@ -173,6 +201,24 @@ function TermText({ children }: { children: ReactNode }) {
|
|
|
173
201
|
);
|
|
174
202
|
}
|
|
175
203
|
|
|
204
|
+
function TermLead({ row, inline = false }: { row: DescriptionListItem; inline?: boolean }) {
|
|
205
|
+
const { knobProps } = useResolvedKnobs();
|
|
206
|
+
const ink = useGlyphColor("$textMuted");
|
|
207
|
+
if (row.icon == null) return <TermText inline={inline}>{row.term}</TermText>;
|
|
208
|
+
return (
|
|
209
|
+
<XStack alignItems="center" minWidth={0} {...knobProps.gapSm}>
|
|
210
|
+
<View
|
|
211
|
+
aria-hidden
|
|
212
|
+
flexShrink={0}
|
|
213
|
+
{...(isWeb && ink ? ({ style: { color: ink } } as Record<string, unknown>) : {})}
|
|
214
|
+
>
|
|
215
|
+
<IconSlot icon={row.icon} color={ink} size={16} />
|
|
216
|
+
</View>
|
|
217
|
+
<TermText inline={inline}>{row.term}</TermText>
|
|
218
|
+
</XStack>
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
|
|
176
222
|
function ChangeAction({ onChange, label }: { onChange: () => void; label?: string }) {
|
|
177
223
|
return (
|
|
178
224
|
<View data-mpo-description-list-action="" alignItems="flex-start" justifyContent="flex-end">
|
|
@@ -183,21 +229,105 @@ function ChangeAction({ onChange, label }: { onChange: () => void; label?: strin
|
|
|
183
229
|
);
|
|
184
230
|
}
|
|
185
231
|
|
|
186
|
-
|
|
232
|
+
/**
|
|
233
|
+
* Where a long identifier splits for middle truncation: the tail keeps the
|
|
234
|
+
* last path segments that fit in 20 characters (`/auth/realms/master`), or
|
|
235
|
+
* the last 12 characters when there is no path.
|
|
236
|
+
*/
|
|
237
|
+
export function middleSplit(text: string): [string, string] {
|
|
238
|
+
if (text.length <= 24) return [text, ""];
|
|
239
|
+
let start = text.length - 12;
|
|
240
|
+
let from = text.length - 2;
|
|
241
|
+
for (;;) {
|
|
242
|
+
const slash = text.lastIndexOf("/", from);
|
|
243
|
+
if (slash <= 0 || text.length - slash > 20) break;
|
|
244
|
+
start = slash;
|
|
245
|
+
from = slash - 1;
|
|
246
|
+
}
|
|
247
|
+
return [text.slice(0, start), text.slice(start)];
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* The glyph never flips (DG-FB-01 / LC-16): the confirm is the owner's, through
|
|
252
|
+
* `onCopyResult`, the same channel Input's copy end-cap uses (CopyField routes
|
|
253
|
+
* it to notify()).
|
|
254
|
+
*/
|
|
255
|
+
const CopyResultContext = createContext<((ok: boolean) => void) | undefined>(undefined);
|
|
256
|
+
|
|
257
|
+
function IdentifierValue({ text }: { text: string }) {
|
|
258
|
+
const onCopyResult = useContext(CopyResultContext);
|
|
259
|
+
const { knobProps } = useResolvedKnobs();
|
|
260
|
+
const [head, tail] = middleSplit(text);
|
|
261
|
+
const ink = { ...knobProps.body, fontFamily: "$mono", color: "$color" } as const;
|
|
262
|
+
const copy = async () => {
|
|
263
|
+
const ok = await writeToClipboard(text);
|
|
264
|
+
onCopyResult?.(ok);
|
|
265
|
+
};
|
|
266
|
+
return (
|
|
267
|
+
<XStack
|
|
268
|
+
data-mpo-description-list-identifier=""
|
|
269
|
+
alignItems="center"
|
|
270
|
+
minWidth={0}
|
|
271
|
+
width="100%"
|
|
272
|
+
{...knobProps.gapSm}
|
|
273
|
+
>
|
|
274
|
+
{isWeb ? (
|
|
275
|
+
<XStack flex={1} minWidth={0} {...({ title: text } as Record<string, unknown>)}>
|
|
276
|
+
<Text {...ink} numberOfLines={1} flexShrink={1} minWidth={0}>
|
|
277
|
+
{head}
|
|
278
|
+
</Text>
|
|
279
|
+
{tail ? (
|
|
280
|
+
<Text {...ink} numberOfLines={1} flexShrink={0}>
|
|
281
|
+
{tail}
|
|
282
|
+
</Text>
|
|
283
|
+
) : null}
|
|
284
|
+
</XStack>
|
|
285
|
+
) : (
|
|
286
|
+
<Text {...ink} flex={1} minWidth={0} numberOfLines={1} ellipsizeMode="middle">
|
|
287
|
+
{text}
|
|
288
|
+
</Text>
|
|
289
|
+
)}
|
|
290
|
+
<Button
|
|
291
|
+
nested
|
|
292
|
+
chromeless
|
|
293
|
+
circular
|
|
294
|
+
flexShrink={0}
|
|
295
|
+
icon={<CopyIcon />}
|
|
296
|
+
aria-label={t("Copy to clipboard")}
|
|
297
|
+
onPress={() => void copy()}
|
|
298
|
+
/>
|
|
299
|
+
</XStack>
|
|
300
|
+
);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
function ValueSlot({ row, trailing = false }: { row: DescriptionListItem; trailing?: boolean }) {
|
|
187
304
|
return (
|
|
188
305
|
<View data-mpo-description-list-value="" minWidth={0} width="100%">
|
|
189
306
|
{row.children != null ? (
|
|
190
|
-
|
|
307
|
+
trailing ? (
|
|
308
|
+
<XStack justifyContent="flex-end" alignItems="center" minWidth={0} width="100%">
|
|
309
|
+
{row.children}
|
|
310
|
+
</XStack>
|
|
311
|
+
) : (
|
|
312
|
+
row.children
|
|
313
|
+
)
|
|
314
|
+
) : row.identifier && row.value != null && row.value !== "" ? (
|
|
315
|
+
<IdentifierValue text={String(row.value)} />
|
|
191
316
|
) : (
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
317
|
+
// FieldDisplay grows on flex 1 from a zero basis; in a column with no
|
|
318
|
+
// height of its own that collapsed it to 0 and the next rule ran
|
|
319
|
+
// through the value. A row lets it grow across and keep its height.
|
|
320
|
+
<XStack minWidth={0} width="100%">
|
|
321
|
+
<FieldDisplay
|
|
322
|
+
field={row.field ?? "input"}
|
|
323
|
+
value={row.value}
|
|
324
|
+
fieldProps={row.fieldProps}
|
|
325
|
+
linkedValue={row.linkedValue}
|
|
326
|
+
chromeless
|
|
327
|
+
align={trailing ? "right" : "left"}
|
|
328
|
+
truncate={trailing || row.truncate}
|
|
329
|
+
/>
|
|
330
|
+
</XStack>
|
|
201
331
|
)}
|
|
202
332
|
</View>
|
|
203
333
|
);
|
|
@@ -206,6 +336,7 @@ function ValueSlot({ row }: { row: DescriptionListItem }) {
|
|
|
206
336
|
function DescriptionListRowView({
|
|
207
337
|
row,
|
|
208
338
|
stacked,
|
|
339
|
+
inline = false,
|
|
209
340
|
hasActionColumn,
|
|
210
341
|
rhythm,
|
|
211
342
|
showRule,
|
|
@@ -213,6 +344,7 @@ function DescriptionListRowView({
|
|
|
213
344
|
}: {
|
|
214
345
|
row: DescriptionListItem;
|
|
215
346
|
stacked: boolean;
|
|
347
|
+
inline?: boolean;
|
|
216
348
|
hasActionColumn: boolean;
|
|
217
349
|
rhythm: ReturnType<typeof listItemRhythm>;
|
|
218
350
|
showRule: boolean;
|
|
@@ -224,20 +356,23 @@ function DescriptionListRowView({
|
|
|
224
356
|
<View data-mpo-description-list-action="" />
|
|
225
357
|
) : null;
|
|
226
358
|
|
|
227
|
-
const
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
359
|
+
const oneLine = inline && !row.identifier;
|
|
360
|
+
const rowStyle: CSSProperties | undefined = oneLine
|
|
361
|
+
? undefined
|
|
362
|
+
: isWeb
|
|
363
|
+
? stacked
|
|
364
|
+
? {
|
|
365
|
+
display: "grid",
|
|
366
|
+
gridTemplateColumns: hasActionColumn ? "minmax(0,1fr) max-content" : "minmax(0,1fr)",
|
|
367
|
+
columnGap: undefined,
|
|
368
|
+
rowGap: undefined,
|
|
369
|
+
}
|
|
370
|
+
: {
|
|
371
|
+
display: "grid",
|
|
372
|
+
gridTemplateColumns: "subgrid",
|
|
373
|
+
gridColumn: "1 / -1",
|
|
374
|
+
}
|
|
375
|
+
: undefined;
|
|
241
376
|
|
|
242
377
|
const termStyle: CSSProperties | undefined = isWeb
|
|
243
378
|
? stacked
|
|
@@ -255,10 +390,20 @@ function DescriptionListRowView({
|
|
|
255
390
|
: { justifySelf: "end" }
|
|
256
391
|
: undefined;
|
|
257
392
|
|
|
258
|
-
const body =
|
|
393
|
+
const body = oneLine ? (
|
|
394
|
+
<XStack alignItems="center" width="100%" minWidth={0} gap={rhythm.columnGap as never}>
|
|
395
|
+
<View flexShrink={0} maxWidth="60%" minWidth={0}>
|
|
396
|
+
<TermLead row={row} inline />
|
|
397
|
+
</View>
|
|
398
|
+
<View flex={1} minWidth={0}>
|
|
399
|
+
<ValueSlot row={row} trailing />
|
|
400
|
+
</View>
|
|
401
|
+
{action}
|
|
402
|
+
</XStack>
|
|
403
|
+
) : stacked ? (
|
|
259
404
|
<>
|
|
260
405
|
<View style={termStyle}>
|
|
261
|
-
<
|
|
406
|
+
<TermLead row={row} />
|
|
262
407
|
</View>
|
|
263
408
|
{action ? <View style={actionStyle}>{action}</View> : null}
|
|
264
409
|
<View style={valueStyle} paddingTop={rhythm.stackGap as never}>
|
|
@@ -268,7 +413,7 @@ function DescriptionListRowView({
|
|
|
268
413
|
) : isWeb ? (
|
|
269
414
|
<>
|
|
270
415
|
<View style={termStyle}>
|
|
271
|
-
<
|
|
416
|
+
<TermLead row={row} />
|
|
272
417
|
</View>
|
|
273
418
|
<View style={valueStyle}>
|
|
274
419
|
<ValueSlot row={row} />
|
|
@@ -283,7 +428,7 @@ function DescriptionListRowView({
|
|
|
283
428
|
flexShrink={0}
|
|
284
429
|
width={`${purposeMaxCh()}ch` as never}
|
|
285
430
|
>
|
|
286
|
-
<
|
|
431
|
+
<TermLead row={row} />
|
|
287
432
|
</View>
|
|
288
433
|
<View flex={1} minWidth={0}>
|
|
289
434
|
<ValueSlot row={row} />
|
|
@@ -314,6 +459,7 @@ function DescriptionListRowView({
|
|
|
314
459
|
function DescriptionListWeb({
|
|
315
460
|
rows,
|
|
316
461
|
stacked,
|
|
462
|
+
inline,
|
|
317
463
|
hasAction,
|
|
318
464
|
rhythm,
|
|
319
465
|
quiet,
|
|
@@ -324,6 +470,7 @@ function DescriptionListWeb({
|
|
|
324
470
|
}: {
|
|
325
471
|
rows: DescriptionListItem[];
|
|
326
472
|
stacked: boolean;
|
|
473
|
+
inline: boolean;
|
|
327
474
|
hasAction: boolean;
|
|
328
475
|
rhythm: ReturnType<typeof listItemRhythm>;
|
|
329
476
|
quiet?: boolean;
|
|
@@ -374,6 +521,7 @@ function DescriptionListWeb({
|
|
|
374
521
|
key={index}
|
|
375
522
|
row={row}
|
|
376
523
|
stacked={stacked}
|
|
524
|
+
inline={inline}
|
|
377
525
|
hasActionColumn={hasAction}
|
|
378
526
|
rhythm={rhythm}
|
|
379
527
|
showRule={index > 0}
|
|
@@ -443,6 +591,7 @@ export function DescriptionList({
|
|
|
443
591
|
maxWidth = formReadableMaxWidth,
|
|
444
592
|
labelColumnWidth = LABEL_COLUMN_WIDTH,
|
|
445
593
|
size,
|
|
594
|
+
onCopyResult,
|
|
446
595
|
testID,
|
|
447
596
|
}: DescriptionListProps) {
|
|
448
597
|
const { knobProps } = useResolvedKnobs({ size });
|
|
@@ -456,50 +605,55 @@ export function DescriptionList({
|
|
|
456
605
|
const hasAction = rows.some(rowHasAction);
|
|
457
606
|
const measureCollapse = placement === "side";
|
|
458
607
|
const { ref, wide, onLayout } = useContainerWide(measureCollapse);
|
|
459
|
-
const
|
|
608
|
+
const inline = placement === "inline";
|
|
609
|
+
const stacked = placement === "top" || inline || (placement === "side" && !wide);
|
|
460
610
|
|
|
461
611
|
const list = (
|
|
462
|
-
<
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
612
|
+
<CopyResultContext.Provider value={onCopyResult}>
|
|
613
|
+
<DescriptionListSlotProvider>
|
|
614
|
+
{isWeb ? (
|
|
615
|
+
<DescriptionListWeb
|
|
616
|
+
rows={rows}
|
|
617
|
+
stacked={stacked}
|
|
618
|
+
inline={inline}
|
|
619
|
+
hasAction={hasAction}
|
|
620
|
+
rhythm={rhythm}
|
|
621
|
+
quiet={quiet}
|
|
622
|
+
labelColumnWidth={labelColumnWidth}
|
|
623
|
+
sizeToken={knobProps.sizeToken}
|
|
624
|
+
placement={placement}
|
|
625
|
+
framed={framed}
|
|
626
|
+
/>
|
|
627
|
+
) : (
|
|
628
|
+
<YStack
|
|
629
|
+
data-mpo-description-list=""
|
|
630
|
+
data-placement={placement}
|
|
631
|
+
data-stacked={stacked ? "true" : "false"}
|
|
632
|
+
data-rhythm={rhythm.tight ? "tight" : "regular"}
|
|
633
|
+
data-framed={framed ? "true" : "false"}
|
|
634
|
+
data-quiet={quiet ? "true" : "false"}
|
|
635
|
+
data-has-action={hasAction ? "true" : "false"}
|
|
636
|
+
data-label-column-width={labelColumnWidth}
|
|
637
|
+
data-size-token={knobProps.sizeToken}
|
|
638
|
+
width="100%"
|
|
639
|
+
minWidth={0}
|
|
640
|
+
>
|
|
641
|
+
{rows.map((row, index) => (
|
|
642
|
+
<DescriptionListRowView
|
|
643
|
+
key={index}
|
|
644
|
+
row={row}
|
|
645
|
+
stacked={stacked}
|
|
646
|
+
inline={inline}
|
|
647
|
+
hasActionColumn={hasAction}
|
|
648
|
+
rhythm={rhythm}
|
|
649
|
+
showRule={index > 0}
|
|
650
|
+
quiet={quiet}
|
|
651
|
+
/>
|
|
652
|
+
))}
|
|
653
|
+
</YStack>
|
|
654
|
+
)}
|
|
655
|
+
</DescriptionListSlotProvider>
|
|
656
|
+
</CopyResultContext.Provider>
|
|
503
657
|
);
|
|
504
658
|
|
|
505
659
|
const widthProps = {
|
|
@@ -193,8 +193,10 @@ function useDisplayChrome() {
|
|
|
193
193
|
};
|
|
194
194
|
}
|
|
195
195
|
|
|
196
|
+
const frameJustify = { left: "flex-start", center: "center", right: "flex-end" } as const;
|
|
197
|
+
|
|
196
198
|
function DisplayFrame({ field, children }: { field: FieldDisplayType; children: ReactNode }) {
|
|
197
|
-
const { knobProps, chromeless } = useDisplayChrome();
|
|
199
|
+
const { knobProps, chromeless, align } = useDisplayChrome();
|
|
198
200
|
if (chromeless) {
|
|
199
201
|
return (
|
|
200
202
|
<XStack
|
|
@@ -202,7 +204,7 @@ function DisplayFrame({ field, children }: { field: FieldDisplayType; children:
|
|
|
202
204
|
data-field={field}
|
|
203
205
|
data-chromeless=""
|
|
204
206
|
alignItems="center"
|
|
205
|
-
justifyContent="
|
|
207
|
+
justifyContent={frameJustify[align ?? "left"]}
|
|
206
208
|
minWidth={0}
|
|
207
209
|
flex={1}
|
|
208
210
|
width="100%"
|
|
@@ -534,3 +534,24 @@ describe("Switch thumb and pointer paint", () => {
|
|
|
534
534
|
expect(onPressOut).toHaveBeenCalledTimes(1);
|
|
535
535
|
});
|
|
536
536
|
});
|
|
537
|
+
|
|
538
|
+
describe("Switch labelPlacement (HIG settings row)", () => {
|
|
539
|
+
it("leading: the label leads and the switch sits at the trailing edge, switch first in the DOM", () => {
|
|
540
|
+
const result = renderWithProviders(
|
|
541
|
+
<Switch id="lead" label="Email notifications" labelPlacement="leading" />,
|
|
542
|
+
);
|
|
543
|
+
const control = result.getByRole("switch");
|
|
544
|
+
const row = result.getByText("Email notifications").parentElement as HTMLElement;
|
|
545
|
+
expect(row.contains(control)).toBe(true);
|
|
546
|
+
expect(String(row.className)).toMatch(/_fd-row-reverse/);
|
|
547
|
+
// LC-102: the label takes the free space; the row is never spaced apart.
|
|
548
|
+
expect(String(row.className)).not.toMatch(/_jc-space-between/);
|
|
549
|
+
expect(String(result.getByText("Email notifications").className)).toMatch(/_fg-1/);
|
|
550
|
+
});
|
|
551
|
+
|
|
552
|
+
it("trailing (default): no reversed row", () => {
|
|
553
|
+
const result = renderWithProviders(<Switch id="trail" label="Push notifications" />);
|
|
554
|
+
const row = result.getByText("Push notifications").parentElement as HTMLElement;
|
|
555
|
+
expect(String(row.className)).not.toMatch(/_fd-row-reverse/);
|
|
556
|
+
});
|
|
557
|
+
});
|
|
@@ -721,6 +721,12 @@ export interface SwitchProps {
|
|
|
721
721
|
"aria-labelledby"?: string;
|
|
722
722
|
leftIcon?: ReactNode;
|
|
723
723
|
rightIcon?: ReactNode;
|
|
724
|
+
/**
|
|
725
|
+
* `leading` puts the label first and the switch at the row's trailing edge,
|
|
726
|
+
* the HIG settings row (label left, control right, full width). Default
|
|
727
|
+
* `trailing`: switch, then label.
|
|
728
|
+
*/
|
|
729
|
+
labelPlacement?: "leading" | "trailing";
|
|
724
730
|
switchProps?: Omit<
|
|
725
731
|
TamaguiSwitchProps,
|
|
726
732
|
"checked" | "defaultChecked" | "id" | "onCheckedChange" | "children"
|
|
@@ -760,11 +766,21 @@ export function Switch({
|
|
|
760
766
|
"aria-labelledby": ariaLabelledBy,
|
|
761
767
|
leftIcon,
|
|
762
768
|
rightIcon,
|
|
769
|
+
labelPlacement = "trailing",
|
|
763
770
|
switchProps,
|
|
764
771
|
pointy,
|
|
765
772
|
skeleton,
|
|
766
773
|
minTargetHeight,
|
|
767
774
|
}: SwitchProps) {
|
|
775
|
+
// The switch stays first in the DOM (focus and reading order); the row
|
|
776
|
+
// reverses so the label leads and the switch sits at the trailing edge.
|
|
777
|
+
const labelLeadingRow =
|
|
778
|
+
labelPlacement === "leading" && label
|
|
779
|
+
? ({ flexDirection: "row-reverse", width: "100%" } as const)
|
|
780
|
+
: undefined;
|
|
781
|
+
// LC-102: the leading label takes the free space, so the switch hugs the
|
|
782
|
+
// trailing edge without spacing the row apart.
|
|
783
|
+
const leadingLabelFill = labelLeadingRow ? ({ flex: 1, minWidth: 0 } as const) : undefined;
|
|
768
784
|
const hydrationTouch = useTouchSurface();
|
|
769
785
|
// Canonical `onChange` and the alias `onCheckedChange` both fire; standalone
|
|
770
786
|
// (formless) callers get real toggling from either name.
|
|
@@ -1037,6 +1053,7 @@ export function Switch({
|
|
|
1037
1053
|
alignItems="center"
|
|
1038
1054
|
height={sizeToken}
|
|
1039
1055
|
{...(rowMinHeight !== undefined && { minHeight: rowMinHeight })}
|
|
1056
|
+
{...labelLeadingRow}
|
|
1040
1057
|
>
|
|
1041
1058
|
{renderSwitch(
|
|
1042
1059
|
resolvedChecked,
|
|
@@ -1059,6 +1076,7 @@ export function Switch({
|
|
|
1059
1076
|
...text.focusVisibleKnobProps,
|
|
1060
1077
|
}}
|
|
1061
1078
|
paddingInlineEnd="$1"
|
|
1079
|
+
{...leadingLabelFill}
|
|
1062
1080
|
{...labelProps}
|
|
1063
1081
|
>
|
|
1064
1082
|
{label}
|
|
@@ -1095,6 +1113,7 @@ export function Switch({
|
|
|
1095
1113
|
alignItems="center"
|
|
1096
1114
|
height={sizeToken}
|
|
1097
1115
|
{...(rowMinHeight !== undefined && { minHeight: rowMinHeight })}
|
|
1116
|
+
{...labelLeadingRow}
|
|
1098
1117
|
>
|
|
1099
1118
|
{renderSwitch(
|
|
1100
1119
|
checked !== undefined ? checked : Boolean(field.state.value),
|
|
@@ -1120,6 +1139,7 @@ export function Switch({
|
|
|
1120
1139
|
focusStyle={{ color: formLabelColor, ...text.focusKnobProps }}
|
|
1121
1140
|
focusVisibleStyle={{ color: formLabelColor, ...text.focusVisibleKnobProps }}
|
|
1122
1141
|
paddingInlineEnd="$1"
|
|
1142
|
+
{...leadingLabelFill}
|
|
1123
1143
|
{...labelProps}
|
|
1124
1144
|
>
|
|
1125
1145
|
{label}
|
|
@@ -7,17 +7,27 @@
|
|
|
7
7
|
* read/edit flip moves no label (LC-44). Chromeless by default (LC-39);
|
|
8
8
|
* the framed variant paints, so it earns the Card inset.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
10
|
+
* LC-169 CARD-HIERARCHY: the term is the label role (footnote size,
|
|
11
|
+
* secondary ink) and the value the body in the primary ink, so a label never
|
|
12
|
+
* reads at its value's size, weight and ink. An `identifier` row (a URL, an
|
|
13
|
+
* id) is mono, one line, truncated in the middle, with copy. House Separator
|
|
14
|
+
* (1px `$borderColor`, quiet = opacity 0.5) owns the row rule.
|
|
12
15
|
* Forms cannot import `@multiplatform.one/components` (that package depends
|
|
13
16
|
* on forms); the recipes are the same measured law.
|
|
14
17
|
*/
|
|
15
18
|
import { type ReactElement, type ReactNode } from "react";
|
|
16
19
|
import { type SizeTokens } from "tamagui";
|
|
17
20
|
import { type FieldDisplayType } from "../FieldDisplay";
|
|
18
|
-
|
|
21
|
+
/**
|
|
22
|
+
* `inline` is the card fact row (LC-169): glyph and label leading, the value
|
|
23
|
+
* trailing on the same line, a hairline between rows. An identifier row still
|
|
24
|
+
* stacks, since a long mono id cannot share its line.
|
|
25
|
+
*/
|
|
26
|
+
export type DescriptionListPlacement = "side" | "top" | "inline";
|
|
19
27
|
export interface DescriptionListItem {
|
|
20
28
|
term: ReactNode;
|
|
29
|
+
/** A glyph that names the fact's kind, before the term in the secondary ink. */
|
|
30
|
+
icon?: ReactNode;
|
|
21
31
|
/** FieldDisplay type — every typed value mounts FieldDisplay (LC-12). */
|
|
22
32
|
field?: FieldDisplayType;
|
|
23
33
|
value?: any;
|
|
@@ -25,6 +35,11 @@ export interface DescriptionListItem {
|
|
|
25
35
|
linkedValue?: any;
|
|
26
36
|
/** Opt-in ellipsis for identifier-class values (DG-OVF). */
|
|
27
37
|
truncate?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* A long identifier (URL, id, digest): mono, one line, truncated in the
|
|
40
|
+
* middle so both ends stay legible, with a copy action (LC-169).
|
|
41
|
+
*/
|
|
42
|
+
identifier?: boolean;
|
|
28
43
|
/** Optional per-row Change action. */
|
|
29
44
|
onChange?: () => void;
|
|
30
45
|
changeLabel?: string;
|
|
@@ -61,9 +76,17 @@ export interface DescriptionListProps {
|
|
|
61
76
|
* tight rhythm (shorter rows, `gapSm` columns).
|
|
62
77
|
*/
|
|
63
78
|
size?: SizeTokens;
|
|
79
|
+
/** Called after an identifier row's copy, for the owner's confirm (CopyField precedent). */
|
|
80
|
+
onCopyResult?: (ok: boolean) => void;
|
|
64
81
|
testID?: string;
|
|
65
82
|
}
|
|
66
|
-
|
|
83
|
+
/**
|
|
84
|
+
* Where a long identifier splits for middle truncation: the tail keeps the
|
|
85
|
+
* last path segments that fit in 20 characters (`/auth/realms/master`), or
|
|
86
|
+
* the last 12 characters when there is no path.
|
|
87
|
+
*/
|
|
88
|
+
export declare function middleSplit(text: string): [string, string];
|
|
89
|
+
export declare function DescriptionList({ items, children, placement: placementProp, framed, quiet, maxWidth, labelColumnWidth, size, onCopyResult, testID, }: DescriptionListProps): import("react/jsx-runtime").JSX.Element;
|
|
67
90
|
export declare namespace DescriptionList {
|
|
68
91
|
var Row: typeof DescriptionListRow;
|
|
69
92
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/DescriptionList/index.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/DescriptionList/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAUL,KAAK,YAAY,EACjB,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AASf,OAAO,EAAE,KAAK,UAAU,EAAqC,MAAM,SAAS,CAAC;AAK7E,OAAO,EAA6C,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGnG;;;;GAIG;AACH,MAAM,MAAM,wBAAwB,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEjE,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,SAAS,CAAC;IAChB,gFAAgF;IAChF,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,yEAAyE;IACzE,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,uBAAuB,GAAG,mBAAmB,CAAC;AAE1D,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE,wBAAwB,CAAC;IACrC,0DAA0D;IAC1D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,4FAA4F;IAC5F,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAuHD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAW1D;AAiVD,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,QAAQ,EACR,SAAS,EAAE,aAAa,EACxB,MAAc,EACd,KAAa,EACb,QAA+B,EAC/B,gBAAqC,EACrC,IAAI,EACJ,YAAY,EACZ,MAAM,GACP,EAAE,oBAAoB,2CA0FtB;yBArGe,eAAe;;;AAuG/B,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,uBAAuB,GAAG,YAAY,GAAG,IAAI,CAEvF;AAID,oDAAoD;AACpD,eAAO,MAAM,YAAY,wBAAkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/FieldDisplay/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAUH,OAAO,EAAgD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAgBrF,MAAM,MAAM,gBAAgB,GACxB,OAAO,GACP,UAAU,GACV,cAAc,GACd,SAAS,GACT,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,YAAY,GACZ,aAAa,GACb,UAAU,GACV,QAAQ,GACR,YAAY,GACZ,gBAAgB,GAChB,YAAY,GACZ,iBAAiB,GACjB,iBAAiB,GACjB,UAAU,GACV,aAAa,GACb,YAAY,GACZ,KAAK,GACL,SAAS,GACT,QAAQ,GACR,UAAU,GACV,YAAY,GACZ,OAAO,GACP,WAAW,GACX,aAAa,GACb,gBAAgB,GAChB,gBAAgB,GAChB,YAAY,GACZ,QAAQ,CAAC;AAEb,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE5D,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,GAAG,CAAC;IACX,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,oCAAoC;IACpC,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAID,oEAAoE;AACpE,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED,wBAAgB,2BAA2B,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAMhF;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/FieldDisplay/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAUH,OAAO,EAAgD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAgBrF,MAAM,MAAM,gBAAgB,GACxB,OAAO,GACP,UAAU,GACV,cAAc,GACd,SAAS,GACT,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,YAAY,GACZ,aAAa,GACb,UAAU,GACV,QAAQ,GACR,YAAY,GACZ,gBAAgB,GAChB,YAAY,GACZ,iBAAiB,GACjB,iBAAiB,GACjB,UAAU,GACV,aAAa,GACb,YAAY,GACZ,KAAK,GACL,SAAS,GACT,QAAQ,GACR,UAAU,GACV,YAAY,GACZ,OAAO,GACP,WAAW,GACX,aAAa,GACb,gBAAgB,GAChB,gBAAgB,GAChB,YAAY,GACZ,QAAQ,CAAC;AAEb,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE5D,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,GAAG,CAAC;IACX,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,oCAAoC;IACpC,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAID,oEAAoE;AACpE,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED,wBAAgB,2BAA2B,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAMhF;AAukBD,wBAAgB,YAAY,CAAC,EAC3B,KAAe,EACf,KAAK,EACL,UAAU,EACV,WAAW,EACX,UAAkB,EAClB,KAAK,EACL,QAAgB,GACjB,EAAE,iBAAiB,2CAgHnB"}
|