@multiplatform.one/forms 7.51.0 → 7.53.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/AdaptivePopup/index.native.js +1 -1
- package/dist/cjs/AdaptivePopup/index.native.js.map +1 -1
- package/dist/cjs/Button/index.native.js +2 -2
- package/dist/cjs/Button/index.native.js.map +1 -1
- package/dist/cjs/Chip/index.native.js.map +1 -1
- package/dist/cjs/ContextualSaveBar/UnsavedChangesDialog.native.js +1 -1
- package/dist/cjs/ContextualSaveBar/UnsavedChangesDialog.native.js.map +1 -1
- package/dist/cjs/ContextualSaveBar/clientKnownIdentity.native.js.map +1 -1
- package/dist/cjs/ContextualSaveBar/commitImmediateField.native.js.map +1 -1
- package/dist/cjs/ContextualSaveBar/index.native.js +3 -3
- package/dist/cjs/ContextualSaveBar/index.native.js.map +1 -1
- package/dist/cjs/ContextualSaveBar/useUnsavedChangesGuard.native.js.map +1 -1
- package/dist/cjs/ControlGroup/index.native.js +1 -1
- package/dist/cjs/ControlGroup/index.native.js.map +1 -1
- package/dist/cjs/DescriptionList/index.native.js +2 -2
- package/dist/cjs/DescriptionList/index.native.js.map +1 -1
- package/dist/cjs/ErrorSummary.native.js.map +1 -1
- package/dist/cjs/FieldDisplay/editMode.native.js.map +1 -1
- package/dist/cjs/FieldDisplay/formatters.native.js.map +1 -1
- package/dist/cjs/FieldDisplay/index.native.js +1 -1
- package/dist/cjs/FieldDisplay/index.native.js.map +1 -1
- package/dist/cjs/FieldGroup.cjs +1 -1
- package/dist/cjs/FieldGroup.native.js +1 -1
- package/dist/cjs/FieldGroup.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/nestedAction.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/pointAnchor.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/trailingAction.native.js +1 -1
- package/dist/cjs/FloatingPanel/trailingAction.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/useFloatingPanel.native.js.map +1 -1
- package/dist/cjs/Form/index.cjs +2 -2
- package/dist/cjs/Form/index.native.js +3 -3
- package/dist/cjs/Form/index.native.js.map +1 -1
- package/dist/cjs/Form/submissionController.native.js.map +1 -1
- package/dist/cjs/Form/validateOn.native.js.map +1 -1
- package/dist/cjs/FormGrid.cjs +1 -1
- package/dist/cjs/FormGrid.native.js +1 -1
- package/dist/cjs/FormGrid.native.js.map +1 -1
- package/dist/cjs/FormSection.cjs +1 -1
- package/dist/cjs/FormSection.native.js +1 -1
- package/dist/cjs/FormSection.native.js.map +1 -1
- package/dist/cjs/InputParts/PasswordReveal.native.js.map +1 -1
- package/dist/cjs/InputParts/index.native.js.map +1 -1
- package/dist/cjs/Label/index.native.js.map +1 -1
- package/dist/cjs/MediaPicker/base64.native.js.map +1 -1
- package/dist/cjs/MediaPicker/payload.native.js.map +1 -1
- package/dist/cjs/MediaPicker/types.native.js.map +1 -1
- package/dist/cjs/MediaPicker/useMediaPicker.native.js.map +1 -1
- package/dist/cjs/Skeleton/index.native.js.map +1 -1
- package/dist/cjs/Spinner/SpinnerGlyph.native.js.map +1 -1
- package/dist/cjs/Spinner/spinnerSize.native.js.map +1 -1
- package/dist/cjs/Table/index.native.js.map +1 -1
- package/dist/cjs/Wheel/haptic.native.js.map +1 -1
- package/dist/cjs/Wheel/index.native.js.map +1 -1
- package/dist/cjs/Wheel/wheelShared.native.js.map +1 -1
- package/dist/cjs/actionLabel.native.js.map +1 -1
- package/dist/cjs/fieldDefaults.native.js.map +1 -1
- package/dist/cjs/fieldLayout.native.js +1 -1
- package/dist/cjs/fieldLayout.native.js.map +1 -1
- package/dist/cjs/fields/Barcode/BarcodePreview.native.js.map +1 -1
- package/dist/cjs/fields/Barcode/BarcodeScanner.native.js +1 -1
- package/dist/cjs/fields/Barcode/code128.native.js.map +1 -1
- package/dist/cjs/fields/Barcode/index.native.js +2 -2
- package/dist/cjs/fields/Barcode/index.native.js.map +1 -1
- package/dist/cjs/fields/Barcode/qr.native.js.map +1 -1
- package/dist/cjs/fields/Barcode/scannerTypes.native.js.map +1 -1
- package/dist/cjs/fields/Checkbox/Checkbox.native.js +1 -1
- package/dist/cjs/fields/Checkbox/Checkbox.native.js.map +1 -1
- package/dist/cjs/fields/Checkbox/CheckboxBox.native.js.map +1 -1
- package/dist/cjs/fields/Checkbox/CheckboxCard.native.js.map +1 -1
- package/dist/cjs/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
- package/dist/cjs/fields/Checkbox/CheckboxGroup.native.js +1 -1
- package/dist/cjs/fields/Checkbox/CheckboxGroup.native.js.map +1 -1
- package/dist/cjs/fields/Checkbox/checkboxGroupContext.native.js.map +1 -1
- package/dist/cjs/fields/Checkbox/index.native.js.map +1 -1
- package/dist/cjs/fields/ColorPicker/index.native.js +2 -2
- package/dist/cjs/fields/ColorPicker/index.native.js.map +1 -1
- package/dist/cjs/fields/ColorPicker/parts.native.js +2 -2
- package/dist/cjs/fields/ColorPicker/parts.native.js.map +1 -1
- package/dist/cjs/fields/Combobox/authorOptions.native.js.map +1 -1
- package/dist/cjs/fields/Combobox/index.native.js +5 -5
- package/dist/cjs/fields/Combobox/index.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/Calendar.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/DateRangePicker.native.js +2 -2
- package/dist/cjs/fields/DatePicker/DateRangePicker.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js +3 -3
- package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/DatetimePicker.native.js +2 -2
- package/dist/cjs/fields/DatePicker/MonthPicker.native.js +2 -2
- package/dist/cjs/fields/DatePicker/MonthPicker.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/MultiDatePicker.native.js +2 -2
- package/dist/cjs/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/catalog.native.js +2 -2
- package/dist/cjs/fields/DatePicker/catalog.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/fieldValueSync.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/index.native.js +2 -2
- package/dist/cjs/fields/DatePicker/parts.native.js +2 -2
- package/dist/cjs/fields/DatePicker/parts.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/utils.native.js.map +1 -1
- package/dist/cjs/fields/Duration/durationMath.native.js.map +1 -1
- package/dist/cjs/fields/Duration/index.native.js +3 -3
- package/dist/cjs/fields/Duration/index.native.js.map +1 -1
- package/dist/cjs/fields/FileUpload/filePickerTypes.native.js.map +1 -1
- package/dist/cjs/fields/FileUpload/index.native.js +2 -2
- package/dist/cjs/fields/FileUpload/index.native.js.map +1 -1
- package/dist/cjs/fields/FileUpload/nativePickerLoader.native.js.map +1 -1
- package/dist/cjs/fields/Geolocation/expoMapsLoader.native.js.map +1 -1
- package/dist/cjs/fields/Geolocation/geoValue.native.js.map +1 -1
- package/dist/cjs/fields/Geolocation/geocoder.native.js.map +1 -1
- package/dist/cjs/fields/Geolocation/geocoderContext.native.js.map +1 -1
- package/dist/cjs/fields/Geolocation/index.native.js +5 -5
- package/dist/cjs/fields/Geolocation/index.native.js.map +1 -1
- package/dist/cjs/fields/Geolocation/mapMath.native.js.map +1 -1
- package/dist/cjs/fields/Geolocation/mapTypes.native.js.map +1 -1
- package/dist/cjs/fields/Geolocation/nativeSearchFocus.native.js.map +1 -1
- package/dist/cjs/fields/Geolocation/photonGeocoder.native.js.map +1 -1
- package/dist/cjs/fields/Icon/drawnSet.native.js.map +1 -1
- package/dist/cjs/fields/Icon/index.native.js +3 -3
- package/dist/cjs/fields/Icon/index.native.js.map +1 -1
- package/dist/cjs/fields/ImageField/index.native.js +2 -2
- package/dist/cjs/fields/ImageField/index.native.js.map +1 -1
- package/dist/cjs/fields/Input/index.native.js +3 -3
- package/dist/cjs/fields/Input/index.native.js.map +1 -1
- package/dist/cjs/fields/MentionInput/index.native.js +3 -3
- package/dist/cjs/fields/MentionInput/index.native.js.map +1 -1
- package/dist/cjs/fields/OTPInput/index.native.js +3 -3
- package/dist/cjs/fields/OTPInput/index.native.js.map +1 -1
- package/dist/cjs/fields/OTPInput/otpCellCss.native.js.map +1 -1
- package/dist/cjs/fields/PhoneInput/dialCodes.native.js.map +1 -1
- package/dist/cjs/fields/PhoneInput/index.native.js +3 -3
- package/dist/cjs/fields/PhoneInput/index.native.js.map +1 -1
- package/dist/cjs/fields/PhoneInput/phone.native.js.map +1 -1
- package/dist/cjs/fields/PhoneInput/regionNames.native.js.map +1 -1
- package/dist/cjs/fields/Progress/index.native.js +1 -1
- package/dist/cjs/fields/Progress/index.native.js.map +1 -1
- package/dist/cjs/fields/RadioGroup/index.native.js +1 -1
- package/dist/cjs/fields/RadioGroup/index.native.js.map +1 -1
- package/dist/cjs/fields/Rating/index.native.js +1 -1
- package/dist/cjs/fields/Rating/index.native.js.map +1 -1
- package/dist/cjs/fields/Rating/ratingMath.native.js.map +1 -1
- package/dist/cjs/fields/Rating/types.native.js.map +1 -1
- package/dist/cjs/fields/SearchInput/index.native.js +2 -2
- package/dist/cjs/fields/SearchInput/index.native.js.map +1 -1
- package/dist/cjs/fields/Select/index.native.js +4 -4
- package/dist/cjs/fields/Select/index.native.js.map +1 -1
- package/dist/cjs/fields/Signature/index.native.js +2 -2
- package/dist/cjs/fields/Signature/index.native.js.map +1 -1
- package/dist/cjs/fields/Slider/index.native.js +1 -1
- package/dist/cjs/fields/Slider/index.native.js.map +1 -1
- package/dist/cjs/fields/Slider/jumpMotion.native.js.map +1 -1
- package/dist/cjs/fields/Stepper/index.native.js +2 -2
- package/dist/cjs/fields/Stepper/index.native.js.map +1 -1
- package/dist/cjs/fields/Stepper/resolveStepperPlacement.native.js.map +1 -1
- package/dist/cjs/fields/Switch/footprint.native.js.map +1 -1
- package/dist/cjs/fields/Switch/index.native.js +2 -2
- package/dist/cjs/fields/Switch/index.native.js.map +1 -1
- package/dist/cjs/fields/TextArea/index.native.js +2 -2
- package/dist/cjs/fields/TextArea/index.native.js.map +1 -1
- package/dist/cjs/fields/TimePicker/catalog.native.js +3 -3
- package/dist/cjs/fields/TimePicker/catalog.native.js.map +1 -1
- package/dist/cjs/fields/TimePicker/index.native.js +2 -2
- package/dist/cjs/fields/TimePicker/parts.native.js +1 -1
- package/dist/cjs/fields/TimePicker/parts.native.js.map +1 -1
- package/dist/cjs/fields/TimeRangeScrubber/geometry.native.js.map +1 -1
- package/dist/cjs/fields/TimeRangeScrubber/index.native.js +2 -2
- package/dist/cjs/fields/TimeRangeScrubber/index.native.js.map +1 -1
- package/dist/cjs/fields/ToggleGroup/index.native.js +1 -1
- package/dist/cjs/fields/ToggleGroup/index.native.js.map +1 -1
- package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
- package/dist/cjs/fields/nativeDateTime/dateTimePickerLoader.native.js.map +1 -1
- package/dist/cjs/fields/nativeDateTime/osDateTimeIosDisplay.native.js.map +1 -1
- package/dist/cjs/fields/nativeSelect.native.js.map +1 -1
- package/dist/cjs/fields/selectedOrder.native.js.map +1 -1
- package/dist/cjs/formSpacing.native.js.map +1 -1
- package/dist/cjs/hooks/useFocusManagement.native.js.map +1 -1
- package/dist/cjs/index.native.js +45 -45
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/keyboard/KeyboardDoneBar.native.js +1 -1
- package/dist/cjs/keyboard/chain.native.js.map +1 -1
- package/dist/cjs/keyboard/index.native.js.map +1 -1
- package/dist/cjs/keyboard/types.native.js.map +1 -1
- package/dist/cjs/requiredMarking.native.js.map +1 -1
- package/dist/cjs/shared/TimeColumn.native.js +1 -1
- package/dist/cjs/shared/TimeColumn.native.js.map +1 -1
- package/dist/cjs/shared/capabilityPreflight.native.js.map +1 -1
- package/dist/cjs/shared/colorRamps.native.js.map +1 -1
- package/dist/cjs/shared/devWarn.native.js.map +1 -1
- package/dist/cjs/shared/floatingList.native.js +1 -1
- package/dist/cjs/shared/floatingList.native.js.map +1 -1
- package/dist/cjs/shared/focusManagement.native.js.map +1 -1
- package/dist/cjs/shared/groupContext.native.js.map +1 -1
- package/dist/cjs/shared/i18n.native.js.map +1 -1
- package/dist/cjs/shared/instantMotion.native.js.map +1 -1
- package/dist/cjs/shared/nativeA11y.native.js.map +1 -1
- package/dist/cjs/shared/nativeAutoFocus.native.js.map +1 -1
- package/dist/cjs/shared/overlayStack.native.js.map +1 -1
- package/dist/cjs/shared/panelPortal.native.js.map +1 -1
- package/dist/cjs/shared/pickerTriggerContract.native.js.map +1 -1
- package/dist/cjs/shared/pressSlopProps.native.js.map +1 -1
- package/dist/cjs/shared/restoreRetries.native.js.map +1 -1
- package/dist/cjs/shared/t.native.js.map +1 -1
- package/dist/cjs/shared/tableCellContext.native.js.map +1 -1
- package/dist/cjs/shared/useDragScroll.native.js.map +1 -1
- package/dist/cjs/shared/useKeyboardInset.native.js.map +1 -1
- package/dist/cjs/shared/useSheetEscapeDismiss.native.js.map +1 -1
- package/dist/cjs/shared/useWheelIncrement.native.js.map +1 -1
- package/dist/cjs/shared/utils.native.js +1 -1
- package/dist/cjs/shared/utils.native.js.map +1 -1
- package/dist/cjs/shared/zIndex.native.js.map +1 -1
- package/dist/cjs/themedPrimitives.native.js.map +1 -1
- package/dist/cjs/types.native.js.map +1 -1
- package/dist/cjs/utils/LinkCell.native.js.map +1 -1
- package/dist/esm/FieldGroup.mjs +1 -1
- package/dist/esm/FieldGroup.mjs.map +1 -1
- package/dist/esm/FieldGroup.native.js +1 -1
- package/dist/esm/FieldGroup.native.js.map +1 -1
- package/dist/esm/Form/index.mjs +2 -2
- package/dist/esm/Form/index.mjs.map +1 -1
- package/dist/esm/Form/index.native.js +2 -2
- package/dist/esm/Form/index.native.js.map +1 -1
- package/dist/esm/FormGrid.mjs +1 -1
- package/dist/esm/FormGrid.mjs.map +1 -1
- package/dist/esm/FormGrid.native.js +1 -1
- package/dist/esm/FormGrid.native.js.map +1 -1
- package/dist/esm/FormSection.mjs +1 -1
- package/dist/esm/FormSection.mjs.map +1 -1
- package/dist/esm/FormSection.native.js +1 -1
- package/dist/esm/FormSection.native.js.map +1 -1
- package/dist/jsx/FieldGroup.mjs +1 -1
- package/dist/jsx/FieldGroup.mjs.map +1 -1
- package/dist/jsx/FieldGroup.native.js +1 -1
- package/dist/jsx/FieldGroup.native.js.map +1 -1
- package/dist/jsx/Form/index.mjs +2 -2
- package/dist/jsx/Form/index.mjs.map +1 -1
- package/dist/jsx/Form/index.native.js +2 -2
- package/dist/jsx/Form/index.native.js.map +1 -1
- package/dist/jsx/FormGrid.mjs +1 -1
- package/dist/jsx/FormGrid.mjs.map +1 -1
- package/dist/jsx/FormGrid.native.js +1 -1
- package/dist/jsx/FormGrid.native.js.map +1 -1
- package/dist/jsx/FormSection.mjs +1 -1
- package/dist/jsx/FormSection.mjs.map +1 -1
- package/dist/jsx/FormSection.native.js +1 -1
- package/dist/jsx/FormSection.native.js.map +1 -1
- package/package.json +8 -8
- package/src/FieldGroup.tsx +2 -2
- package/src/Form/index.tsx +2 -2
- package/src/FormGrid.tsx +2 -2
- package/src/FormSection.tsx +4 -4
- package/src/fieldRhythm.spec.tsx +48 -0
- package/types/FieldGroup.d.ts +1 -1
- package/types/FormGrid.d.ts +1 -1
- package/types/FormSection.d.ts +3 -3
package/src/Form/index.tsx
CHANGED
|
@@ -325,14 +325,14 @@ export function Form<TFormData extends Record<string, any>, TFormValidator = any
|
|
|
325
325
|
<TamaguiForm ref={setFormRef} onSubmit={handleSubmit} {...tamaguiFormProps}>
|
|
326
326
|
<YStack
|
|
327
327
|
data-mpo-form-layout=""
|
|
328
|
-
data-gap={knobProps.
|
|
328
|
+
data-gap={knobProps.fieldGap.gap}
|
|
329
329
|
data-size-token={knobProps.sizeToken}
|
|
330
330
|
width="100%"
|
|
331
331
|
minWidth={0}
|
|
332
332
|
// A readable column: fields and actions read as one group on a
|
|
333
333
|
// wide screen. `maxWidth` on the Form ejects (e.g. "100%").
|
|
334
334
|
maxWidth={(tamaguiFormProps.maxWidth as never) ?? FORM_READABLE_WIDTH}
|
|
335
|
-
{...knobProps.
|
|
335
|
+
{...knobProps.fieldGap}
|
|
336
336
|
{...(tamaguiFormProps.flex != null
|
|
337
337
|
? { flex: tamaguiFormProps.flex as never }
|
|
338
338
|
: {})}
|
package/src/FormGrid.tsx
CHANGED
|
@@ -27,7 +27,7 @@ export interface FormGridProps {
|
|
|
27
27
|
*/
|
|
28
28
|
maxColumns?: FormGridColumns;
|
|
29
29
|
/**
|
|
30
|
-
* Gap between fields. Defaults to the
|
|
30
|
+
* Gap between fields. Defaults to the field rhythm (`knobProps.fieldGap`, LC-154),
|
|
31
31
|
* never `sizeToken`. Number = px eject; token string allowed.
|
|
32
32
|
*/
|
|
33
33
|
gap?: number | string;
|
|
@@ -52,7 +52,7 @@ function resolveWideColumns(
|
|
|
52
52
|
*/
|
|
53
53
|
export function FormGrid({ columns = 1, maxColumns = 2, gap, children }: FormGridProps) {
|
|
54
54
|
const { knobProps } = useResolvedKnobs();
|
|
55
|
-
const gapFragment = gap === undefined ? knobProps.
|
|
55
|
+
const gapFragment = gap === undefined ? knobProps.fieldGap : { gap };
|
|
56
56
|
const resolvedGap = gapFragment.gap;
|
|
57
57
|
const wideColumns = resolveWideColumns(columns, maxColumns);
|
|
58
58
|
|
package/src/FormSection.tsx
CHANGED
|
@@ -13,8 +13,8 @@ export interface FormSectionProps {
|
|
|
13
13
|
*/
|
|
14
14
|
maxWidth?: number | "fluid";
|
|
15
15
|
/**
|
|
16
|
-
* Gap between fields inside the section. Defaults to the
|
|
17
|
-
*
|
|
16
|
+
* Gap between fields inside the section. Defaults to the field rhythm
|
|
17
|
+
* (`knobProps.fieldGap`, LC-154; DG-LAY-03) so the preset's scale
|
|
18
18
|
* restyles form rhythm; explicit values eject.
|
|
19
19
|
*/
|
|
20
20
|
gap?: number | string;
|
|
@@ -30,7 +30,7 @@ export interface FormSectionProps {
|
|
|
30
30
|
/**
|
|
31
31
|
* Labeled form section with semantic gap rhythm.
|
|
32
32
|
*
|
|
33
|
-
* Field gap defaults to the
|
|
33
|
+
* Field gap defaults to the field rhythm (`knobProps.fieldGap`, LC-154);
|
|
34
34
|
* stack multiple sections with {@link FormSectionStack}, whose gap defaults
|
|
35
35
|
* to the between-groups gap (`knobProps.gapLg`) — always one step larger, so
|
|
36
36
|
* section rhythm stays larger than field rhythm on every scale
|
|
@@ -47,7 +47,7 @@ export function FormSection({
|
|
|
47
47
|
}: FormSectionProps) {
|
|
48
48
|
const useFieldset = fieldset && isWeb;
|
|
49
49
|
const { knobProps } = useResolvedKnobs();
|
|
50
|
-
const resolvedGap = gap ?? knobProps.
|
|
50
|
+
const resolvedGap = gap ?? knobProps.fieldGap.gap;
|
|
51
51
|
|
|
52
52
|
return (
|
|
53
53
|
<YStack
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LC-154 COMPACT-FORM-HEAD, field rhythm: a label sits closer to its own
|
|
3
|
+
* control than to the field above it. Field stacks take the `fieldGap` role
|
|
4
|
+
* ($4), one step wider than the label-to-control gap's floor ($2) and the
|
|
5
|
+
* row role ($3).
|
|
6
|
+
*/
|
|
7
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
8
|
+
import { defaultKnobs, resolveKnobs, spacingRoles } from "@multiplatform.one/theme";
|
|
9
|
+
import { cleanup } from "@testing-library/react";
|
|
10
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
11
|
+
import { FieldLayout } from "./fieldLayout";
|
|
12
|
+
import { FormGrid } from "./FormGrid";
|
|
13
|
+
import { FormSection } from "./FormSection";
|
|
14
|
+
|
|
15
|
+
afterEach(cleanup);
|
|
16
|
+
|
|
17
|
+
const step = (token: string) => Number(token.replace(/^\$/, ""));
|
|
18
|
+
|
|
19
|
+
describe("field rhythm (LC-154)", () => {
|
|
20
|
+
it("the fieldGap role is $4 and wider than the label gap and the row role", () => {
|
|
21
|
+
expect(spacingRoles.fieldGap).toBe("$4");
|
|
22
|
+
expect(step(spacingRoles.fieldGap)).toBeGreaterThan(step(spacingRoles.gap));
|
|
23
|
+
expect(step(spacingRoles.fieldGap)).toBeGreaterThan(step(spacingRoles.gapSm));
|
|
24
|
+
expect(resolveKnobs(defaultKnobs).knobProps.fieldGap).toEqual({ gap: "$4" });
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it("FormGrid and FormSection stack fields at the field rhythm", () => {
|
|
28
|
+
const { container } = renderWithProviders(
|
|
29
|
+
<FormSection label="Details">
|
|
30
|
+
<FormGrid>
|
|
31
|
+
<FieldLayout label="Description" id="d">
|
|
32
|
+
<input id="d" />
|
|
33
|
+
</FieldLayout>
|
|
34
|
+
<FieldLayout label="Status" id="s">
|
|
35
|
+
<input id="s" />
|
|
36
|
+
</FieldLayout>
|
|
37
|
+
</FormGrid>
|
|
38
|
+
</FormSection>,
|
|
39
|
+
);
|
|
40
|
+
const gaps = [...container.querySelectorAll("[data-gap]")].map((el) =>
|
|
41
|
+
el.getAttribute("data-gap"),
|
|
42
|
+
);
|
|
43
|
+
expect(gaps).toContain("$4");
|
|
44
|
+
expect(gaps).not.toContain("$3");
|
|
45
|
+
const labelGap = container.querySelector("[data-label-gap]")?.getAttribute("data-label-gap");
|
|
46
|
+
expect(step(labelGap ?? "$9")).toBeLessThan(step("$4"));
|
|
47
|
+
});
|
|
48
|
+
});
|
package/types/FieldGroup.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export interface FieldGroupProps {
|
|
|
10
10
|
*/
|
|
11
11
|
columns?: FormGridColumns;
|
|
12
12
|
/**
|
|
13
|
-
* Gap between fields. Defaults to the
|
|
13
|
+
* Gap between fields. Defaults to the field rhythm (`knobProps.fieldGap`, LC-154),
|
|
14
14
|
* never `sizeToken`.
|
|
15
15
|
*/
|
|
16
16
|
gap?: number | string;
|
package/types/FormGrid.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export interface FormGridProps {
|
|
|
14
14
|
*/
|
|
15
15
|
maxColumns?: FormGridColumns;
|
|
16
16
|
/**
|
|
17
|
-
* Gap between fields. Defaults to the
|
|
17
|
+
* Gap between fields. Defaults to the field rhythm (`knobProps.fieldGap`, LC-154),
|
|
18
18
|
* never `sizeToken`. Number = px eject; token string allowed.
|
|
19
19
|
*/
|
|
20
20
|
gap?: number | string;
|
package/types/FormSection.d.ts
CHANGED
|
@@ -9,8 +9,8 @@ export interface FormSectionProps {
|
|
|
9
9
|
*/
|
|
10
10
|
maxWidth?: number | "fluid";
|
|
11
11
|
/**
|
|
12
|
-
* Gap between fields inside the section. Defaults to the
|
|
13
|
-
*
|
|
12
|
+
* Gap between fields inside the section. Defaults to the field rhythm
|
|
13
|
+
* (`knobProps.fieldGap`, LC-154; DG-LAY-03) so the preset's scale
|
|
14
14
|
* restyles form rhythm; explicit values eject.
|
|
15
15
|
*/
|
|
16
16
|
gap?: number | string;
|
|
@@ -25,7 +25,7 @@ export interface FormSectionProps {
|
|
|
25
25
|
/**
|
|
26
26
|
* Labeled form section with semantic gap rhythm.
|
|
27
27
|
*
|
|
28
|
-
* Field gap defaults to the
|
|
28
|
+
* Field gap defaults to the field rhythm (`knobProps.fieldGap`, LC-154);
|
|
29
29
|
* stack multiple sections with {@link FormSectionStack}, whose gap defaults
|
|
30
30
|
* to the between-groups gap (`knobProps.gapLg`) — always one step larger, so
|
|
31
31
|
* section rhythm stays larger than field rhythm on every scale
|