@bug-on/m3-expressive 1.2.0 → 1.2.2

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.
Files changed (54) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/buttons.d.mts +26 -5
  3. package/dist/buttons.d.ts +26 -5
  4. package/dist/buttons.js +1074 -765
  5. package/dist/buttons.js.map +1 -1
  6. package/dist/buttons.mjs +1066 -765
  7. package/dist/buttons.mjs.map +1 -1
  8. package/dist/core.js +133 -69
  9. package/dist/core.js.map +1 -1
  10. package/dist/core.mjs +133 -69
  11. package/dist/core.mjs.map +1 -1
  12. package/dist/feedback.js +132 -69
  13. package/dist/feedback.js.map +1 -1
  14. package/dist/feedback.mjs +132 -69
  15. package/dist/feedback.mjs.map +1 -1
  16. package/dist/forms.d.mts +2 -2
  17. package/dist/forms.d.ts +2 -2
  18. package/dist/forms.js +74 -9
  19. package/dist/forms.js.map +1 -1
  20. package/dist/forms.mjs +74 -9
  21. package/dist/forms.mjs.map +1 -1
  22. package/dist/{icon-button-D-gs0gfj.d.mts → icon-button-CSsDmuQC.d.mts} +19 -0
  23. package/dist/{icon-button-D-gs0gfj.d.ts → icon-button-CSsDmuQC.d.ts} +19 -0
  24. package/dist/index.d.mts +4 -4
  25. package/dist/index.d.ts +4 -4
  26. package/dist/index.js +2204 -1464
  27. package/dist/index.js.map +1 -1
  28. package/dist/index.mjs +2056 -1324
  29. package/dist/index.mjs.map +1 -1
  30. package/dist/layout.d.mts +18 -1
  31. package/dist/layout.d.ts +18 -1
  32. package/dist/layout.js +80 -15
  33. package/dist/layout.js.map +1 -1
  34. package/dist/layout.mjs +80 -15
  35. package/dist/layout.mjs.map +1 -1
  36. package/dist/navigation.d.mts +134 -9
  37. package/dist/navigation.d.ts +134 -9
  38. package/dist/navigation.js +461 -101
  39. package/dist/navigation.js.map +1 -1
  40. package/dist/navigation.mjs +455 -102
  41. package/dist/navigation.mjs.map +1 -1
  42. package/dist/overlays.js +261 -197
  43. package/dist/overlays.js.map +1 -1
  44. package/dist/overlays.mjs +223 -159
  45. package/dist/overlays.mjs.map +1 -1
  46. package/dist/pickers.js +392 -301
  47. package/dist/pickers.js.map +1 -1
  48. package/dist/pickers.mjs +361 -270
  49. package/dist/pickers.mjs.map +1 -1
  50. package/dist/{split-button-trailing-uncheckable-BkPbiBo3.d.ts → split-button-trailing-uncheckable-C-qQlyZx.d.ts} +118 -25
  51. package/dist/{split-button-trailing-uncheckable-D_PLPb-u.d.mts → split-button-trailing-uncheckable-DHJqNeq_.d.mts} +118 -25
  52. package/dist/{text-field-eAIpz9z1.d.mts → text-field-T4Rg-9Bw.d.mts} +7 -0
  53. package/dist/{text-field-eAIpz9z1.d.ts → text-field-T4Rg-9Bw.d.ts} +7 -0
  54. package/package.json +3 -3
package/dist/forms.mjs CHANGED
@@ -5,6 +5,7 @@ import { useMemo } from 'react';
5
5
  import { clsx } from 'clsx';
6
6
  import { twMerge } from 'tailwind-merge';
7
7
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
8
+ import { Slot } from '@radix-ui/react-slot';
8
9
  import { cva } from 'class-variance-authority';
9
10
  import * as RadixScrollArea from '@radix-ui/react-scroll-area';
10
11
 
@@ -93,7 +94,10 @@ function useRippleState(options = {}) {
93
94
  const rect = e.currentTarget.getBoundingClientRect();
94
95
  const x = e.clientX - rect.left;
95
96
  const y = e.clientY - rect.top;
96
- const rippleSize = Math.hypot(rect.width, rect.height) * 2;
97
+ const rippleSize = Math.max(
98
+ Math.hypot(rect.width, rect.height) * 2.5,
99
+ 320
100
+ );
97
101
  setRipples((prev) => [
98
102
  ...prev,
99
103
  { id: Date.now(), x, y, size: rippleSize }
@@ -518,7 +522,9 @@ var ChipImpl = React4.forwardRef(
518
522
  avatar,
519
523
  onRemove,
520
524
  className,
521
- onClick
525
+ onClick,
526
+ asChild = false,
527
+ children
522
528
  } = _b, props = __objRest(_b, [
523
529
  "variant",
524
530
  "elevated",
@@ -530,7 +536,9 @@ var ChipImpl = React4.forwardRef(
530
536
  "avatar",
531
537
  "onRemove",
532
538
  "className",
533
- "onClick"
539
+ "onClick",
540
+ "asChild",
541
+ "children"
534
542
  ]);
535
543
  const { ripples, onPointerDown, removeRipple } = useRippleState({
536
544
  disabled
@@ -645,6 +653,63 @@ var ChipImpl = React4.forwardRef(
645
653
  ) : null }),
646
654
  /* @__PURE__ */ jsx("span", { className: "whitespace-nowrap", children: label })
647
655
  ] });
656
+ if (asChild) {
657
+ const child = React4.Children.only(children);
658
+ const innerContent = /* @__PURE__ */ jsxs(Fragment, { children: [
659
+ /* @__PURE__ */ jsx(Ripple, { ripples, onRippleDone: removeRipple }),
660
+ mainContent,
661
+ hasTrailingContent && /* @__PURE__ */ jsx("span", { className: "flex items-center justify-center shrink-0", children: onRemove ? /* @__PURE__ */ jsx(
662
+ "button",
663
+ {
664
+ type: "button",
665
+ tabIndex: disabled ? -1 : 0,
666
+ "aria-label": typeof label === "string" ? `Remove ${label}` : "Remove",
667
+ onClick: (e) => {
668
+ e.stopPropagation();
669
+ onRemove(e);
670
+ },
671
+ onPointerDown: (e) => e.stopPropagation(),
672
+ className: cn(
673
+ "flex items-center justify-center w-8.5 h-full",
674
+ "cursor-pointer focus-visible:outline-none",
675
+ "transition-all duration-150",
676
+ "relative overflow-hidden rounded-r-[7px] rounded-l-none",
677
+ "before:absolute before:-inset-px before:pointer-events-none before:bg-current",
678
+ "before:transition-opacity before:duration-200 before:opacity-0 before:rounded-r-[7px]",
679
+ "hover:before:opacity-[0.08] active:before:opacity-[0.12]",
680
+ selected ? "text-m3-on-secondary-container" : "text-m3-on-surface-variant"
681
+ ),
682
+ children: /* @__PURE__ */ jsx(CloseIcon, {})
683
+ }
684
+ ) : trailingIcon ? /* @__PURE__ */ jsx(
685
+ "span",
686
+ {
687
+ className: cn(
688
+ "flex items-center justify-center w-4.5 h-4.5 [&_.md-icon]:text-[length:inherit]!",
689
+ selected ? "text-m3-on-secondary-container" : "text-m3-on-surface-variant"
690
+ ),
691
+ style: { fontSize: 18 },
692
+ "aria-hidden": "true",
693
+ children: trailingIcon
694
+ }
695
+ ) : null })
696
+ ] });
697
+ const strippedProps = __spreadValues({}, props);
698
+ delete strippedProps.children;
699
+ return /* @__PURE__ */ jsx(LazyMotion, { features: domMax, strict: true, children: /* @__PURE__ */ jsx(
700
+ Slot,
701
+ __spreadProps(__spreadValues({
702
+ ref,
703
+ "aria-disabled": disabled || void 0,
704
+ tabIndex: disabled ? -1 : 0,
705
+ onClick,
706
+ onPointerDown,
707
+ className: containerClass
708
+ }, strippedProps), {
709
+ children: React4.cloneElement(child, { children: innerContent })
710
+ })
711
+ ) });
712
+ }
648
713
  return /* @__PURE__ */ jsx(LazyMotion, { features: domMax, strict: true, children: /* @__PURE__ */ jsxs(
649
714
  Root2,
650
715
  __spreadProps(__spreadValues(__spreadProps(__spreadValues({
@@ -3449,7 +3514,6 @@ var FloatingLabel = React4.memo(function FloatingLabel2({
3449
3514
  "absolute pointer-events-none select-none origin-[left_center] leading-6 text-base whitespace-nowrap",
3450
3515
  "px-1 -mx-1",
3451
3516
  // Clear the notch gap and keep text aligned
3452
- variant === "outlined" && isFloated && "bg-m3-surface",
3453
3517
  "left-4",
3454
3518
  isDisabled && "opacity-[0.38]"
3455
3519
  ),
@@ -3525,7 +3589,8 @@ var OutlineContainer = React4.memo(function OutlineContainer2({
3525
3589
  );
3526
3590
  const borderWidth = isFocused || isError ? TF_SIZE.outlineThick : TF_SIZE.outlineThin;
3527
3591
  const leftSegmentWidth = TF_SIZE.paddingStart;
3528
- const notchWidth = isFloated ? labelWidth * TF_TYPOGRAPHY.labelScaleRatio + TF_SIZE.notchPadding * 2 : 0;
3592
+ const isNotched = isFloated && labelWidth > 0;
3593
+ const notchWidth = isNotched ? labelWidth * TF_TYPOGRAPHY.labelScaleRatio + TF_SIZE.notchPadding * 2 : 0;
3529
3594
  const borderTransition = { duration: colorDuration, ease };
3530
3595
  const notchTransition = { duration: notchDuration, ease };
3531
3596
  return /* @__PURE__ */ jsxs(
@@ -3563,7 +3628,7 @@ var OutlineContainer = React4.memo(function OutlineContainer2({
3563
3628
  style: { height: borderWidth },
3564
3629
  animate: {
3565
3630
  borderTopColor: borderColor,
3566
- opacity: isFloated ? 0 : 1,
3631
+ opacity: isNotched ? 0 : 1,
3567
3632
  borderTopWidth: borderWidth,
3568
3633
  borderTopStyle: "solid"
3569
3634
  },
@@ -4015,7 +4080,7 @@ var TextFieldComponent = React4.forwardRef(
4015
4080
  const computedDescribedby = [hasSupporting ? supportingId : "", ariaDescribedby != null ? ariaDescribedby : ""].filter(Boolean).join(" ") || void 0;
4016
4081
  const inputClass = cn(
4017
4082
  "bg-transparent outline-none w-full",
4018
- isInToolbar ? "self-center" : "self-end",
4083
+ !resolvedLabel || isInToolbar ? "self-center" : "self-end",
4019
4084
  "text-base leading-6 text-m3-on-surface",
4020
4085
  "caret-[var(--color-m3-primary)]",
4021
4086
  "placeholder:text-m3-on-surface-variant/60",
@@ -4026,7 +4091,7 @@ var TextFieldComponent = React4.forwardRef(
4026
4091
  id: inputId,
4027
4092
  name,
4028
4093
  value: currentValue,
4029
- placeholder: isFloated ? placeholder != null ? placeholder : "" : "",
4094
+ placeholder: !resolvedLabel || isFloated ? placeholder != null ? placeholder : "" : "",
4030
4095
  disabled,
4031
4096
  readOnly,
4032
4097
  required,
@@ -4058,7 +4123,7 @@ var TextFieldComponent = React4.forwardRef(
4058
4123
  "relative flex flex-col flex-1 min-w-0 h-full",
4059
4124
  paddingStart,
4060
4125
  paddingEnd,
4061
- isInToolbar ? "justify-center" : variant === "filled" ? resolvedDense ? "pt-5 pb-2" : "pt-6 pb-2" : resolvedDense ? "py-3" : "py-4"
4126
+ isInToolbar || !resolvedLabel ? "justify-center" : variant === "filled" ? resolvedDense ? "pt-5 pb-2" : "pt-6 pb-2" : resolvedDense ? "py-3" : "py-4"
4062
4127
  );
4063
4128
  const wrapperClass = cn(
4064
4129
  "group/tf inline-flex flex-col",