@multiplatform.one/forms 7.73.0 → 7.75.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/Button/IconButtonGroup.cjs +32 -0
- package/dist/cjs/Button/IconButtonGroup.native.js +32 -0
- package/dist/cjs/Button/IconButtonGroup.native.js.map +1 -1
- package/dist/cjs/Button/glass.cjs +4 -1
- package/dist/cjs/Button/index.cjs +71 -18
- package/dist/cjs/Button/index.native.js +81 -20
- package/dist/cjs/Button/index.native.js.map +1 -1
- package/dist/cjs/Button/webGlass.cjs +62 -0
- package/dist/cjs/Button/webGlass.native.js +68 -0
- package/dist/cjs/Button/webGlass.native.js.map +1 -0
- package/dist/cjs/fields/FileUpload/index.cjs +8 -3
- package/dist/cjs/fields/FileUpload/index.native.js +8 -3
- package/dist/cjs/fields/FileUpload/index.native.js.map +1 -1
- package/dist/esm/AdaptivePopup/index.native.js.map +1 -1
- package/dist/esm/Button/IconButtonGroup.mjs +32 -0
- package/dist/esm/Button/IconButtonGroup.mjs.map +1 -1
- package/dist/esm/Button/IconButtonGroup.native.js +32 -0
- package/dist/esm/Button/IconButtonGroup.native.js.map +1 -1
- package/dist/esm/Button/circleGlyph.native.js.map +1 -1
- package/dist/esm/Button/glass.mjs +4 -2
- package/dist/esm/Button/glass.mjs.map +1 -1
- package/dist/esm/Button/iconButtonGroupContext.mjs.map +1 -1
- package/dist/esm/Button/iconButtonGroupContext.native.js.map +1 -1
- package/dist/esm/Button/index.mjs +72 -20
- package/dist/esm/Button/index.mjs.map +1 -1
- package/dist/esm/Button/index.native.js +82 -22
- package/dist/esm/Button/index.native.js.map +1 -1
- package/dist/esm/Button/mediaPlate.native.js.map +1 -1
- package/dist/esm/Button/webGlass.mjs +36 -0
- package/dist/esm/Button/webGlass.mjs.map +1 -0
- package/dist/esm/Button/webGlass.native.js +39 -0
- package/dist/esm/Button/webGlass.native.js.map +1 -0
- 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.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.native.js.map +1 -1
- package/dist/esm/FieldGroup.native.js.map +1 -1
- package/dist/esm/FloatingPanel/PanelHeader.native.js.map +1 -1
- package/dist/esm/FloatingPanel/RegularPanel.native.js.map +1 -1
- package/dist/esm/FloatingPanel/compactFace.native.js.map +1 -1
- package/dist/esm/FloatingPanel/containingBlock.native.js.map +1 -1
- package/dist/esm/FloatingPanel/echoContext.native.js.map +1 -1
- package/dist/esm/FloatingPanel/iconEcho.native.js.map +1 -1
- package/dist/esm/FloatingPanel/nestedAction.native.js.map +1 -1
- package/dist/esm/FloatingPanel/paintedBox.native.js.map +1 -1
- package/dist/esm/FloatingPanel/panelWidth.native.js.map +1 -1
- package/dist/esm/FloatingPanel/pointAnchor.native.js.map +1 -1
- package/dist/esm/FloatingPanel/regularPlacement.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/SystemColorField.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/ColorPicker/systemColorWell.gnome.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.mjs +8 -3
- package/dist/esm/fields/FileUpload/index.mjs.map +1 -1
- package/dist/esm/fields/FileUpload/index.native.js +8 -3
- 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/InlineChoices.native.js.map +1 -1
- package/dist/esm/fields/Select/SheetPickerRow.native.js.map +1 -1
- package/dist/esm/fields/Select/index.native.js.map +1 -1
- package/dist/esm/fields/Select/shouldInlineChoices.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.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/nativeDateTime/sheetKeyboard.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/choiceRowPress.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/overlaySizeClass.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/sheetNavigation.native.js.map +1 -1
- package/dist/esm/shared/systemControlModules.gnome.native.js.map +1 -1
- package/dist/esm/shared/systemControls.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/standardActions.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/Button/IconButtonGroup.mjs +32 -0
- package/dist/jsx/Button/IconButtonGroup.mjs.map +1 -1
- package/dist/jsx/Button/IconButtonGroup.native.js +32 -0
- package/dist/jsx/Button/IconButtonGroup.native.js.map +1 -1
- package/dist/jsx/Button/glass.mjs +4 -2
- package/dist/jsx/Button/glass.mjs.map +1 -1
- package/dist/jsx/Button/iconButtonGroupContext.mjs.map +1 -1
- package/dist/jsx/Button/iconButtonGroupContext.native.js.map +1 -1
- package/dist/jsx/Button/index.mjs +72 -20
- package/dist/jsx/Button/index.mjs.map +1 -1
- package/dist/jsx/Button/index.native.js +81 -20
- package/dist/jsx/Button/index.native.js.map +1 -1
- package/dist/jsx/Button/webGlass.mjs +36 -0
- package/dist/jsx/Button/webGlass.mjs.map +1 -0
- package/dist/jsx/Button/webGlass.native.js +68 -0
- package/dist/jsx/Button/webGlass.native.js.map +1 -0
- package/dist/jsx/fields/FileUpload/index.mjs +8 -3
- package/dist/jsx/fields/FileUpload/index.mjs.map +1 -1
- package/dist/jsx/fields/FileUpload/index.native.js +8 -3
- package/dist/jsx/fields/FileUpload/index.native.js.map +1 -1
- package/package.json +8 -8
- package/src/Button/Button.accentInk.spec.tsx +39 -8
- package/src/Button/Button.confirmFill.spec.tsx +141 -0
- package/src/Button/Button.iconButton.spec.tsx +143 -3
- package/src/Button/Button.stories.tsx +55 -38
- package/src/Button/IconButtonGroup.spec.tsx +40 -0
- package/src/Button/IconButtonGroup.tsx +39 -0
- package/src/Button/glass.spec.ts +73 -0
- package/src/Button/glass.ts +8 -3
- package/src/Button/iconButtonGroupContext.ts +2 -1
- package/src/Button/index.tsx +111 -16
- package/src/Button/webGlass.ts +42 -0
- package/src/fields/FileUpload/FileUpload.spec.tsx +8 -0
- package/src/fields/FileUpload/index.tsx +12 -4
- package/types/Button/IconButtonGroup.d.ts.map +1 -1
- package/types/Button/glass.d.ts +5 -2
- package/types/Button/glass.d.ts.map +1 -1
- package/types/Button/iconButtonGroupContext.d.ts +2 -1
- package/types/Button/iconButtonGroupContext.d.ts.map +1 -1
- package/types/Button/index.d.ts +7 -0
- package/types/Button/index.d.ts.map +1 -1
- package/types/Button/webGlass.d.ts +32 -0
- package/types/Button/webGlass.d.ts.map +1 -0
- package/types/fields/FileUpload/index.d.ts.map +1 -1
|
@@ -4,7 +4,8 @@ const useIsomorphicLayoutEffect = typeof window === "undefined" ? useEffect : us
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* LC-176: the ground an `IconButtonGroup` paints under its buttons. `media`
|
|
7
|
-
* is one shared material capsule and `glass` one shared
|
|
7
|
+
* is one shared material capsule and `glass` one shared glass capsule (Liquid
|
|
8
|
+
* Glass on iOS 26, its web twin in iOS Safari),
|
|
8
9
|
* so a button inside draws its bare glyph instead of its own circle.
|
|
9
10
|
*/
|
|
10
11
|
export type IconButtonGroupGround = "media" | "glass" | null;
|
package/src/Button/index.tsx
CHANGED
|
@@ -31,10 +31,14 @@ import {
|
|
|
31
31
|
solidButtonIntents,
|
|
32
32
|
solidPaletteThemes,
|
|
33
33
|
useAccentOnSurface,
|
|
34
|
+
contrastRatio,
|
|
34
35
|
ensureKeyboardModalityTracking,
|
|
36
|
+
GLYPH_CONTRAST_FLOOR,
|
|
37
|
+
normalizeToHex,
|
|
38
|
+
relativeLuminance,
|
|
35
39
|
useBarSurface,
|
|
36
40
|
useElevatedSurface,
|
|
37
|
-
|
|
41
|
+
useGlyphTintOnSurface,
|
|
38
42
|
useResolvedKnobs,
|
|
39
43
|
useTouchSurface,
|
|
40
44
|
type ControlTier,
|
|
@@ -163,6 +167,25 @@ function normalizeButtonIcon(
|
|
|
163
167
|
return icon;
|
|
164
168
|
}
|
|
165
169
|
|
|
170
|
+
/** The fill `theme="accent"` resolves to under `themeName`, as a hex. */
|
|
171
|
+
function accentSolidFill(themeName: string | undefined): string | null {
|
|
172
|
+
if (!themeName) return null;
|
|
173
|
+
const themes = getConfig().themes as Record<string, Record<string, { val?: unknown }>>;
|
|
174
|
+
const parts = themeName.split("_");
|
|
175
|
+
for (let end = parts.length; end > 0; end--) {
|
|
176
|
+
const theme = themes[`${parts.slice(0, end).join("_")}_accent`];
|
|
177
|
+
if (!theme) continue;
|
|
178
|
+
let value = theme.background?.val;
|
|
179
|
+
for (let hop = 0; hop < 4 && typeof value === "string"; hop++) {
|
|
180
|
+
const ref = /^var\(--([^)]+)\)$/.exec(value)?.[1];
|
|
181
|
+
if (!ref) break;
|
|
182
|
+
value = theme[ref]?.val;
|
|
183
|
+
}
|
|
184
|
+
return typeof value === "string" ? normalizeToHex(value) : null;
|
|
185
|
+
}
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
|
|
166
189
|
function NativeButtonIcon({
|
|
167
190
|
icon,
|
|
168
191
|
size,
|
|
@@ -443,22 +466,45 @@ export function iconButtonGlyphPx(rowLinePx: number | undefined): number {
|
|
|
443
466
|
/** LC-176: an inline glyph is the text's size; Phosphor's 256 grid pads ~12%. */
|
|
444
467
|
const INLINE_GLYPH_RATIO = 1.2;
|
|
445
468
|
|
|
469
|
+
/**
|
|
470
|
+
* LC-176: Phosphor bold's stem is 0.12 of its ink, an SF Symbols bold plus's
|
|
471
|
+
* 0.18 (measured at 17 and 24pt). An outline stroke this wide, in the 256-unit
|
|
472
|
+
* grid, brings a bold glyph to SF semibold-bold (0.154); a wider one closes
|
|
473
|
+
* Phosphor bold's 16-unit counters (the trash lid, copy's overlap).
|
|
474
|
+
*/
|
|
475
|
+
export const GLYPH_BOLD_STROKE_UNITS = 8;
|
|
476
|
+
|
|
477
|
+
function boldStroke(weight: "regular" | "bold", color = "currentColor") {
|
|
478
|
+
return weight === "bold"
|
|
479
|
+
? {
|
|
480
|
+
stroke: color,
|
|
481
|
+
strokeWidth: GLYPH_BOLD_STROKE_UNITS,
|
|
482
|
+
strokeLinejoin: "round" as const,
|
|
483
|
+
}
|
|
484
|
+
: undefined;
|
|
485
|
+
}
|
|
486
|
+
|
|
446
487
|
function withGlyphWeight(
|
|
447
488
|
icon: IconLike | undefined,
|
|
448
489
|
size: number,
|
|
449
490
|
weight: "regular" | "bold",
|
|
491
|
+
floor = false,
|
|
450
492
|
): IconLike | undefined {
|
|
451
493
|
if (icon == null || icon === false) return icon;
|
|
452
|
-
if (isValidElement<{ size?: number; weight?: string }>(icon)) {
|
|
494
|
+
if (isValidElement<{ size?: number; weight?: string; color?: string }>(icon)) {
|
|
495
|
+
const resolved = (icon.props.weight ?? weight) as "regular" | "bold";
|
|
496
|
+
const own = icon.props.size;
|
|
453
497
|
return cloneElement(icon, {
|
|
454
|
-
...(
|
|
498
|
+
...(own == null || (floor && typeof own === "number" && own < size) ? { size } : undefined),
|
|
455
499
|
...(icon.props.weight == null ? { weight } : undefined),
|
|
500
|
+
...boldStroke(resolved, icon.props.color),
|
|
456
501
|
});
|
|
457
502
|
}
|
|
458
503
|
if (typeof icon === "function" || (typeof icon === "object" && "$$typeof" in icon)) {
|
|
459
504
|
return createElement(icon as ComponentType<{ size?: number; weight?: string }>, {
|
|
460
505
|
size,
|
|
461
506
|
weight,
|
|
507
|
+
...boldStroke(weight),
|
|
462
508
|
});
|
|
463
509
|
}
|
|
464
510
|
return icon;
|
|
@@ -568,7 +614,7 @@ export function Button({
|
|
|
568
614
|
const parentScopeTheme = useTheme();
|
|
569
615
|
const pageOutlineColor = parentScopeTheme.outlineColor?.val as string | undefined;
|
|
570
616
|
const hostAccentInk = useAccentOnSurface();
|
|
571
|
-
const
|
|
617
|
+
const glyphTint = useGlyphTintOnSurface();
|
|
572
618
|
const grouped = useControlGrouped();
|
|
573
619
|
// LC-176 ICON-BUTTON: with no label, the button is its glyph. It paints no
|
|
574
620
|
// plate at rest and takes the bar tint, unless the caller asked for a frame
|
|
@@ -611,7 +657,8 @@ export function Button({
|
|
|
611
657
|
// LC-176: a glyph that is the whole button is bold, so it reads as one.
|
|
612
658
|
const resolvedGlyphWeight = glyphWeight ?? (iconOnly ? "bold" : "regular");
|
|
613
659
|
const elevatedGround = useElevatedSurface();
|
|
614
|
-
const
|
|
660
|
+
const hostThemeName = useThemeName();
|
|
661
|
+
const darkScheme = isDarkThemeName(hostThemeName);
|
|
615
662
|
const resolvedSize = typeof sizeProp === "number" ? sizeProp : knobProps.sizeToken;
|
|
616
663
|
const touch = useTouchSurface();
|
|
617
664
|
const recipe = resolveButtonSizeRecipe(resolvedSize, recipeFamily, touch);
|
|
@@ -693,7 +740,7 @@ export function Button({
|
|
|
693
740
|
// Accent and intent buttons, chromeless, and grouped segments keep their
|
|
694
741
|
// own contracts.
|
|
695
742
|
const tier: ControlTier | undefined =
|
|
696
|
-
activeThemeName || chromeless || grouped
|
|
743
|
+
activeThemeName || chromeless || grouped || mediaPlate
|
|
697
744
|
? undefined
|
|
698
745
|
: barSurface
|
|
699
746
|
? "plain"
|
|
@@ -806,7 +853,13 @@ export function Button({
|
|
|
806
853
|
// The media plate is its own state ground; a toggle over media shows its
|
|
807
854
|
// state in the glyph.
|
|
808
855
|
const selectedFill = Boolean(isSelected) && !unavailable && !mediaPlate;
|
|
809
|
-
|
|
856
|
+
// A glyph alone holds 3:1; beside a label both take the label's AA tint.
|
|
857
|
+
const barInk =
|
|
858
|
+
accentInk && chromeless && !selectedFill && !unavailable && !confirmPlate
|
|
859
|
+
? labelled
|
|
860
|
+
? glyphTint.label
|
|
861
|
+
: glyphTint.glyph
|
|
862
|
+
: null;
|
|
810
863
|
const inlineGlyph = iconButton && inline === true && !nested;
|
|
811
864
|
// LC-176: back's caret beside its label is a bar glyph too, and so is the
|
|
812
865
|
// glyph on a plate (media, or the overlay's confirm).
|
|
@@ -824,6 +877,31 @@ export function Button({
|
|
|
824
877
|
? loadGlassView()
|
|
825
878
|
: null;
|
|
826
879
|
const framedCircle = iconOnly && Boolean(circular) && !nested && !mediaPlate && !confirmPlate;
|
|
880
|
+
// FZ-8439 r3: the ✓ on an accent fill is white, iOS's checkmark, whenever
|
|
881
|
+
// white holds the glyph floor on that fill. A fill too light for it (the
|
|
882
|
+
// house ink circle in dark, a pale hue) keeps the sub-theme's on-fill. A
|
|
883
|
+
// literal, so native paints white too and not the token's off-white.
|
|
884
|
+
const accentFillHex = confirmPlate ? accentSolidFill(hostThemeName) : null;
|
|
885
|
+
const confirmInk =
|
|
886
|
+
accentFillHex &&
|
|
887
|
+
contrastRatio(relativeLuminance("#ffffff"), relativeLuminance(accentFillHex)) >=
|
|
888
|
+
GLYPH_CONTRAST_FLOOR
|
|
889
|
+
? "#ffffff"
|
|
890
|
+
: "$color";
|
|
891
|
+
// LC-176: a glyph on a plate takes the plate's on-colour at full strength,
|
|
892
|
+
// never the frame's quieter default: white on the media material, the text
|
|
893
|
+
// colour on a neutral circle, the accent's on-fill on the confirm (FZ-8439:
|
|
894
|
+
// web glyphs inherit CSS colour, so without it the house ✓ is ink on ink).
|
|
895
|
+
const plateInk =
|
|
896
|
+
unavailable || barInk || outlinedInk
|
|
897
|
+
? undefined
|
|
898
|
+
: mediaPlate || (iconButton && groupGround === "media")
|
|
899
|
+
? "$color12"
|
|
900
|
+
: confirmPlate
|
|
901
|
+
? confirmInk
|
|
902
|
+
: framedCircle && !activeThemeName
|
|
903
|
+
? hostScoped({ color: "$color12" }).color
|
|
904
|
+
: undefined;
|
|
827
905
|
const framedCirclePx =
|
|
828
906
|
touch && typeof sizeProp !== "number"
|
|
829
907
|
? Math.max(sizeTokenPx(resolvedSize), MIN_PRESS_TARGET)
|
|
@@ -837,13 +915,22 @@ export function Button({
|
|
|
837
915
|
: barGlyph
|
|
838
916
|
? touch
|
|
839
917
|
? Math.max(glyphFloor, resolveButtonSizeRecipe("$6", recipeFamily, touch).iconSize)
|
|
840
|
-
:
|
|
841
|
-
//
|
|
842
|
-
|
|
918
|
+
: iconButton
|
|
919
|
+
? // A bare glyph has no plate to inset from, so it takes its box
|
|
920
|
+
// less a 2pt optical margin, up to the row's glyph: the SHC
|
|
921
|
+
// "+" at $3 reaches the bar's glyph, a $2 copy beside mono
|
|
922
|
+
// text stays in proportion.
|
|
923
|
+
Math.max(recipe.iconSize, Math.min(glyphFloor, recipe.height - 4))
|
|
924
|
+
: // A pointer toolbar keeps its token box (LC-54); the glyph fills
|
|
925
|
+
// it up to the same floor.
|
|
926
|
+
Math.max(recipe.iconSize, Math.min(glyphFloor, recipe.height - 8))
|
|
843
927
|
: recipe.iconSize;
|
|
928
|
+
// LC-176: a bar glyph is never smaller than its row, whatever px the caller
|
|
929
|
+
// passed (the DataTable toolbar's 14pt token icons).
|
|
930
|
+
const barGlyphFloor = barGlyph && !framedCircle && !inlineGlyph && !nested;
|
|
844
931
|
const glyph =
|
|
845
932
|
barGlyph || inlineGlyph || framedCircle
|
|
846
|
-
? withGlyphWeight(icon, iconSize, resolvedGlyphWeight)
|
|
933
|
+
? withGlyphWeight(icon, iconSize, resolvedGlyphWeight, barGlyphFloor)
|
|
847
934
|
: icon;
|
|
848
935
|
|
|
849
936
|
// LC-158: the frame keeps its recipe height under Dynamic Type, so the
|
|
@@ -908,6 +995,7 @@ export function Button({
|
|
|
908
995
|
props.color ??
|
|
909
996
|
(unavailable ? disabledText.color : undefined) ??
|
|
910
997
|
barInk ??
|
|
998
|
+
plateInk ??
|
|
911
999
|
(textColor
|
|
912
1000
|
? outlinedOnHost
|
|
913
1001
|
? hostScoped({ color: textColor }).color
|
|
@@ -929,7 +1017,7 @@ export function Button({
|
|
|
929
1017
|
) : null;
|
|
930
1018
|
const glyphAfter =
|
|
931
1019
|
iconAfter && (barGlyph || inlineGlyph || framedCircle)
|
|
932
|
-
? withGlyphWeight(iconAfter, iconSize, resolvedGlyphWeight)
|
|
1020
|
+
? withGlyphWeight(iconAfter, iconSize, resolvedGlyphWeight, barGlyphFloor)
|
|
933
1021
|
: iconAfter;
|
|
934
1022
|
const iconAfterElement = glyphAfter ? (
|
|
935
1023
|
<View flexShrink={0}>
|
|
@@ -1043,6 +1131,7 @@ export function Button({
|
|
|
1043
1131
|
: undefined;
|
|
1044
1132
|
// A square box, so an `edge` pull puts the glyph itself on the gutter.
|
|
1045
1133
|
// On glass the circle, not the glyph, sits on the margin.
|
|
1134
|
+
const glassInset = typeof resolvedBorderWidth === "number" ? -resolvedBorderWidth : 0;
|
|
1046
1135
|
const glyphEdgePull =
|
|
1047
1136
|
GlassView || glassGroup ? 0 : iconButton ? -Math.max(0, (visualPx - iconSize) / 2) : edgePull;
|
|
1048
1137
|
const buttonElement = (
|
|
@@ -1094,6 +1183,10 @@ export function Button({
|
|
|
1094
1183
|
{...(inlineGlyph ? { marginInlineStart: "$2" as const } : undefined)}
|
|
1095
1184
|
// The glass rounds itself, unclipped.
|
|
1096
1185
|
{...(GlassView ? { borderRadius: 100000 } : undefined)}
|
|
1186
|
+
// On the web the absolute glass circle needs its button as the
|
|
1187
|
+
// containing block and stacking context, or it fills the page and
|
|
1188
|
+
// paints over the glyph.
|
|
1189
|
+
{...(GlassView && isWeb ? { position: "relative" as const, zIndex: 0 } : undefined)}
|
|
1097
1190
|
{...(confirmPlate ? { borderRadius: 100000 } : undefined)}
|
|
1098
1191
|
{...(mediaPlate
|
|
1099
1192
|
? {
|
|
@@ -1108,11 +1201,13 @@ export function Button({
|
|
|
1108
1201
|
: { marginInlineEnd: glyphEdgePull }
|
|
1109
1202
|
: undefined)}
|
|
1110
1203
|
{...(restFill ? { backgroundColor: restFill } : undefined)}
|
|
1204
|
+
{...(accentFillHex && !unavailable ? { backgroundColor: accentFillHex } : undefined)}
|
|
1111
1205
|
// Solid-intent sub-themes carry the on-fill foreground as `$color`
|
|
1112
1206
|
// (LC-05); outlined frames sit on the page, so re-anchor inherited
|
|
1113
1207
|
// text/icon color (currentColor) to the hue's readable text tier.
|
|
1114
1208
|
{...(outlinedInk ? { color: outlinedInk } : undefined)}
|
|
1115
1209
|
{...(barInk ? { color: barInk } : undefined)}
|
|
1210
|
+
{...(plateInk ? { color: plateInk } : undefined)}
|
|
1116
1211
|
// LC-40 DISABLED-VISIBLE: keepLabel washes the chrome (muted fill/
|
|
1117
1212
|
// border) while label/glyphs re-anchor to the lowest AA text tier
|
|
1118
1213
|
// (`color` inherits into currentColor icons); dimWhole dims the
|
|
@@ -1272,10 +1367,10 @@ export function Button({
|
|
|
1272
1367
|
pointerEvents="none"
|
|
1273
1368
|
style={{
|
|
1274
1369
|
position: "absolute",
|
|
1275
|
-
top:
|
|
1276
|
-
right:
|
|
1277
|
-
bottom:
|
|
1278
|
-
left:
|
|
1370
|
+
top: glassInset,
|
|
1371
|
+
right: glassInset,
|
|
1372
|
+
bottom: glassInset,
|
|
1373
|
+
left: glassInset,
|
|
1279
1374
|
borderRadius: visualPx / 2,
|
|
1280
1375
|
}}
|
|
1281
1376
|
/>
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { isDarkThemeName } from "@multiplatform.one/theme";
|
|
2
|
+
import { createElement } from "react";
|
|
3
|
+
import { useThemeName, YStack } from "tamagui";
|
|
4
|
+
import { MEDIA_PLATE_WEB_STYLE } from "./mediaPlate";
|
|
5
|
+
|
|
6
|
+
type GlassNavigator = { userAgent?: string; platform?: string; maxTouchPoints?: number };
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* LC-266: iOS Safari, iPadOS included (it reports itself as a Mac with a
|
|
10
|
+
* touch screen). The one place web asks which platform it is on, so an iPhone
|
|
11
|
+
* user gets the iPhone's bar buttons in the browser too.
|
|
12
|
+
*/
|
|
13
|
+
export function isAppleTouchWeb(
|
|
14
|
+
nav: GlassNavigator | undefined = typeof navigator === "undefined" ? undefined : navigator,
|
|
15
|
+
): boolean {
|
|
16
|
+
if (!nav) return false;
|
|
17
|
+
if (/iPhone|iPad|iPod/.test(nav.userAgent ?? "")) return true;
|
|
18
|
+
return /Mac/.test(nav.platform ?? nav.userAgent ?? "") && (nav.maxTouchPoints ?? 0) > 1;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const webGlassMarker = { "data-mp-glass": "web" };
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* LC-176: the Liquid Glass face iOS Safari draws under a bar's icon buttons,
|
|
25
|
+
* one circle for a lone button or one capsule for an `IconButtonGroup`. It is
|
|
26
|
+
* a layer under the glyphs (absolute, z -1 in the button's stacking context):
|
|
27
|
+
* a near-white material in light and a raised grey in dark, edged by a soft
|
|
28
|
+
* drop shadow alone, with the media plate's blur.
|
|
29
|
+
*/
|
|
30
|
+
export function WebGlassFace({ style }: { style?: unknown }) {
|
|
31
|
+
const dark = isDarkThemeName(useThemeName());
|
|
32
|
+
return createElement(YStack, {
|
|
33
|
+
pointerEvents: "none",
|
|
34
|
+
backgroundColor: dark ? "$color4" : "$color1",
|
|
35
|
+
opacity: 0.92,
|
|
36
|
+
shadowColor: "$shadowColor",
|
|
37
|
+
shadowRadius: 10,
|
|
38
|
+
shadowOffset: { width: 0, height: 3 },
|
|
39
|
+
...webGlassMarker,
|
|
40
|
+
style: { ...(style as object), zIndex: -1, ...MEDIA_PLATE_WEB_STYLE },
|
|
41
|
+
});
|
|
42
|
+
}
|
|
@@ -80,6 +80,14 @@ describe("FileUpload", () => {
|
|
|
80
80
|
expect(result.container.textContent).not.toContain("Choose File");
|
|
81
81
|
expect(result.container.textContent).not.toContain("Drag a file");
|
|
82
82
|
expect(result.container.querySelector('[data-file-upload="preview"] img')).toBeTruthy();
|
|
83
|
+
// FZ-8020 r4: the capsule floats inside the visible tile's top-trailing
|
|
84
|
+
// corner, as Photos does, never over empty dropzone.
|
|
85
|
+
const tile = result.container.querySelector('[data-file-upload="preview-tile"]');
|
|
86
|
+
expect(tile?.querySelector("img")).toBeTruthy();
|
|
87
|
+
expect(tile?.contains(actions!)).toBe(true);
|
|
88
|
+
// Round 4's critique: a $color3 tile read 1.06:1 on the page in dark, so
|
|
89
|
+
// the corner the capsule anchors to was invisible.
|
|
90
|
+
expect(tile?.className).toMatch(/_bg-color5/);
|
|
83
91
|
fireEvent.click(result.getButton("Remove sprite.png")!);
|
|
84
92
|
expect(remove).toHaveBeenCalledTimes(1);
|
|
85
93
|
});
|
|
@@ -1065,13 +1065,21 @@ export function FileUpload<
|
|
|
1065
1065
|
width="100%"
|
|
1066
1066
|
>
|
|
1067
1067
|
{singlePreview ? (
|
|
1068
|
-
<YStack
|
|
1068
|
+
<YStack
|
|
1069
|
+
data-file-upload="preview-tile"
|
|
1070
|
+
position="relative"
|
|
1071
|
+
width="$14"
|
|
1072
|
+
height="$14"
|
|
1073
|
+
maxWidth="100%"
|
|
1074
|
+
borderRadius={cappedRadius}
|
|
1075
|
+
overflow="hidden"
|
|
1076
|
+
backgroundColor="$color5"
|
|
1077
|
+
>
|
|
1069
1078
|
<Image
|
|
1070
1079
|
src={singlePreview}
|
|
1071
1080
|
alt={singleFile?.name ?? existingName}
|
|
1072
|
-
width="
|
|
1073
|
-
height="
|
|
1074
|
-
maxWidth="100%"
|
|
1081
|
+
width="100%"
|
|
1082
|
+
height="100%"
|
|
1075
1083
|
objectFit="contain"
|
|
1076
1084
|
onLoad={(event) => {
|
|
1077
1085
|
if (!isWeb) return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IconButtonGroup.d.ts","sourceRoot":"","sources":["../../src/Button/IconButtonGroup.tsx"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,EAA8B,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"IconButtonGroup.d.ts","sourceRoot":"","sources":["../../src/Button/IconButtonGroup.tsx"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,EAA8B,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAMvE;;;GAGG;AACH,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IACvD,oEAAoE;IACpE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,oBAAoB,2CA0GjF"}
|
package/types/Button/glass.d.ts
CHANGED
|
@@ -12,10 +12,13 @@ export type GlassContainerComponent = ComponentType<{
|
|
|
12
12
|
style?: unknown;
|
|
13
13
|
children?: ReactNode;
|
|
14
14
|
}>;
|
|
15
|
+
export { isAppleTouchWeb } from "./webGlass";
|
|
15
16
|
/**
|
|
16
17
|
* LC-176: the iOS 26 Liquid Glass material an icon button floats on in a bar.
|
|
17
|
-
*
|
|
18
|
-
*
|
|
18
|
+
* Native iOS draws it from expo-glass-effect (`glass.native.ts`; Android
|
|
19
|
+
* probes null). On the web only iOS Safari takes the glass face (Clay on
|
|
20
|
+
* rv_3bb3f1f65d6b981f: "Is there a way to have the buttons at the bottom be
|
|
21
|
+
* liquid glass if it's an iPhone"); every other browser draws the bare glyph.
|
|
19
22
|
*/
|
|
20
23
|
export declare function loadGlassView(): GlassViewComponent | null;
|
|
21
24
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glass.d.ts","sourceRoot":"","sources":["../../src/Button/glass.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"glass.d.ts","sourceRoot":"","sources":["../../src/Button/glass.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGtD,yEAAyE;AACzE,MAAM,MAAM,kBAAkB,GAAG,aAAa,CAAC;IAC7C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IACvC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;CAC3D,CAAC,CAAC;AAEH,oFAAoF;AACpF,MAAM,MAAM,uBAAuB,GAAG,aAAa,CAAC;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC,CAAC;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C;;;;;;GAMG;AACH,wBAAgB,aAAa,IAAI,kBAAkB,GAAG,IAAI,CAEzD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,uBAAuB,GAAG,IAAI,CAEnE"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* LC-176: the ground an `IconButtonGroup` paints under its buttons. `media`
|
|
3
|
-
* is one shared material capsule and `glass` one shared
|
|
3
|
+
* is one shared material capsule and `glass` one shared glass capsule (Liquid
|
|
4
|
+
* Glass on iOS 26, its web twin in iOS Safari),
|
|
4
5
|
* so a button inside draws its bare glyph instead of its own circle.
|
|
5
6
|
*/
|
|
6
7
|
export type IconButtonGroupGround = "media" | "glass" | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iconButtonGroupContext.d.ts","sourceRoot":"","sources":["../../src/Button/iconButtonGroupContext.ts"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"iconButtonGroupContext.d.ts","sourceRoot":"","sources":["../../src/Button/iconButtonGroupContext.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC;AAE7D,eAAO,MAAM,sBAAsB,gDAA6C,CAAC;AAEjF,wBAAgB,wBAAwB,IAAI,qBAAqB,CAEhE;AAED;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,iCAAwB,MAAM,IAAI,SAAe,CAAC;AAEtF,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAMhE"}
|
package/types/Button/index.d.ts
CHANGED
|
@@ -173,6 +173,13 @@ export declare const ICON_BUTTON_NEUTRAL_GLYPH_PX = 24;
|
|
|
173
173
|
* target.
|
|
174
174
|
*/
|
|
175
175
|
export declare function iconButtonGlyphPx(rowLinePx: number | undefined): number;
|
|
176
|
+
/**
|
|
177
|
+
* LC-176: Phosphor bold's stem is 0.12 of its ink, an SF Symbols bold plus's
|
|
178
|
+
* 0.18 (measured at 17 and 24pt). An outline stroke this wide, in the 256-unit
|
|
179
|
+
* grid, brings a bold glyph to SF semibold-bold (0.154); a wider one closes
|
|
180
|
+
* Phosphor bold's 16-unit counters (the trash lid, copy's overlap).
|
|
181
|
+
*/
|
|
182
|
+
export declare const GLYPH_BOLD_STROKE_UNITS = 8;
|
|
176
183
|
export declare function Button({ children, action, form: formProp, loading, accent, error, warning, success, skeleton, outlined, disabled, theme, onPress, onKeyDown, tabIndex, icon, iconAfter, selected, nested, circular: circularProp, chromeless, edge, accentInk, plate, inline, glyphWeight, verb, noun, actionRole, disabledReason, disabledReasonPlacement, sizeRecipeEscape, recipeFamily, height: heightProp, paddingHorizontal: paddingHorizontalProp, ...props }: ButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
177
184
|
export declare namespace Button {
|
|
178
185
|
var Icon: (props: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Button/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EASL,KAAK,aAAa,EAClB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Button/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
type GlassNavigator = {
|
|
2
|
+
userAgent?: string;
|
|
3
|
+
platform?: string;
|
|
4
|
+
maxTouchPoints?: number;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* LC-266: iOS Safari, iPadOS included (it reports itself as a Mac with a
|
|
8
|
+
* touch screen). The one place web asks which platform it is on, so an iPhone
|
|
9
|
+
* user gets the iPhone's bar buttons in the browser too.
|
|
10
|
+
*/
|
|
11
|
+
export declare function isAppleTouchWeb(nav?: GlassNavigator | undefined): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* LC-176: the Liquid Glass face iOS Safari draws under a bar's icon buttons,
|
|
14
|
+
* one circle for a lone button or one capsule for an `IconButtonGroup`. It is
|
|
15
|
+
* a layer under the glyphs (absolute, z -1 in the button's stacking context):
|
|
16
|
+
* a near-white material in light and a raised grey in dark, edged by a soft
|
|
17
|
+
* drop shadow alone, with the media plate's blur.
|
|
18
|
+
*/
|
|
19
|
+
export declare function WebGlassFace({ style }: {
|
|
20
|
+
style?: unknown;
|
|
21
|
+
}): import("react").FunctionComponentElement<Omit<import("@tamagui/core").RNTamaguiViewNonStyleProps, "elevation" | keyof import("@tamagui/web").StackStyleBase | "fullscreen"> & import("@tamagui/web").WithThemeValues<import("@tamagui/web").StackStyleBase> & {
|
|
22
|
+
elevation?: number | import("tamagui").SizeTokens | undefined;
|
|
23
|
+
fullscreen?: boolean | undefined;
|
|
24
|
+
} & import("@tamagui/web").WithShorthands<import("@tamagui/web").WithThemeValues<import("@tamagui/web").StackStyleBase>> & import("@tamagui/web").WithPseudoProps<import("@tamagui/web").WithThemeValues<import("@tamagui/web").StackStyleBase> & {
|
|
25
|
+
elevation?: number | import("tamagui").SizeTokens | undefined;
|
|
26
|
+
fullscreen?: boolean | undefined;
|
|
27
|
+
} & import("@tamagui/web").WithShorthands<import("@tamagui/web").WithThemeValues<import("@tamagui/web").StackStyleBase>>> & import("@tamagui/web").WithMediaProps<import("@tamagui/web").WithThemeShorthandsAndPseudos<import("@tamagui/web").StackStyleBase, {
|
|
28
|
+
elevation?: number | import("tamagui").SizeTokens | undefined;
|
|
29
|
+
fullscreen?: boolean | undefined;
|
|
30
|
+
}>> & import("react").RefAttributes<import("tamagui").TamaguiElement>>;
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=webGlass.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webGlass.d.ts","sourceRoot":"","sources":["../../src/Button/webGlass.ts"],"names":[],"mappings":"AAKA,KAAK,cAAc,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzF;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,GAAG,GAAE,cAAc,GAAG,SAAoE,GACzF,OAAO,CAIT;AAID;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE;;;;;;;;;uEAY1D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/FileUpload/index.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/FileUpload/index.tsx"],"names":[],"mappings":"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"}
|