@jsenv/navi 0.29.312 → 0.29.315

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.
@@ -41353,8 +41353,6 @@ time.navi_text {
41353
41353
  }
41354
41354
 
41355
41355
  .navi_text {
41356
- position: relative;
41357
-
41358
41356
  &[data-capitalize] {
41359
41357
  &:first-letter, & .navi_text_sizer_placeholder:first-letter, & .navi_text_sizer_overlay:first-letter {
41360
41358
  text-transform: uppercase;
@@ -41388,6 +41386,7 @@ time.navi_text {
41388
41386
  &[data-skeleton] {
41389
41387
  visibility: hidden;
41390
41388
  max-width: 100%;
41389
+ position: relative;
41391
41390
 
41392
41391
  & .navi_text_skeleton_children_placeholder {
41393
41392
  width: 100%;
@@ -41470,6 +41469,7 @@ time.navi_text {
41470
41469
 
41471
41470
  .navi_text[data-contains-absolute-child] {
41472
41471
  display: inline-block;
41472
+ position: relative;
41473
41473
  }
41474
41474
 
41475
41475
  .navi_text[data-bold] {
@@ -42464,8 +42464,6 @@ const css$Y = /* css */`@layer navi {
42464
42464
  }
42465
42465
 
42466
42466
  &[aria-selected] {
42467
- position: relative;
42468
-
42469
42467
  & input[type="checkbox"] {
42470
42468
  opacity: 0;
42471
42469
  position: absolute;
@@ -42479,7 +42477,16 @@ const css$Y = /* css */`@layer navi {
42479
42477
 
42480
42478
  &[data-focus], &[data-focus-visible] {
42481
42479
  z-index: 1;
42482
- position: relative;
42480
+ }
42481
+
42482
+ &[data-stretch] {
42483
+ position: static;
42484
+
42485
+ &:after {
42486
+ content: "";
42487
+ position: absolute;
42488
+ inset: 0;
42489
+ }
42483
42490
  }
42484
42491
 
42485
42492
  &[data-readonly] > * {
@@ -42706,6 +42713,15 @@ Object.assign(PSEUDO_CLASSES, {
42706
42713
  * @param {boolean} [props.revealOnInteraction] - Hide the link until its
42707
42714
  * container is hovered/focused (`data-reveal-on-interaction`), floating it
42708
42715
  * out of flow — the "#" anchor-on-hover pattern (e.g. inside a `Title`).
42716
+ * @param {boolean} [props.stretch] - The press area is the nearest positioned
42717
+ * ancestor, not the link's own box (`data-stretch`): a row that leads
42718
+ * somewhere as a whole while only its name is the link — a button next to the
42719
+ * name cannot live inside an `<a>`. The ancestor to cover says so itself
42720
+ * (`<List.Item relative>`, `<Box relative>`), and nothing in between may be
42721
+ * positioned; navi's `Text` is not. A control in the row that keeps its own
42722
+ * press sits above the area when it is positioned and comes after the link
42723
+ * (navi's `Button` is positioned); one written before the link is raised
42724
+ * with a `z-index`. The link is never positioned itself, in any state.
42709
42725
  * @param {boolean} [props.hrefFallback] - Use `href` as the visible text when
42710
42726
  * no children are given; defaults to `true` unless `anchor`.
42711
42727
  * @param {string|{type?: string, duration?: number|string, direction?: "forward"|"back"}} [props.routeTransition] -
@@ -42850,6 +42866,7 @@ const LinkPlain = props => {
42850
42866
  startIcon,
42851
42867
  endIcon,
42852
42868
  revealOnInteraction = false,
42869
+ stretch,
42853
42870
  hrefFallback = !anchor,
42854
42871
  routeTransition,
42855
42872
  pressableDuringRouteTransition,
@@ -43023,6 +43040,7 @@ const LinkPlain = props => {
43023
43040
  anchor: undefined,
43024
43041
  slide: undefined,
43025
43042
  revealOnInteraction: undefined,
43043
+ stretch: undefined,
43026
43044
  variant: undefined,
43027
43045
  current: undefined,
43028
43046
  currentExcept: undefined,
@@ -43113,6 +43131,7 @@ const LinkPlain = props => {
43113
43131
  "data-anchor": anchor ? "" : undefined,
43114
43132
  "data-interactive": onClick || props.command || props.action ? "" : undefined,
43115
43133
  "data-reveal-on-interaction": revealOnInteraction ? "" : undefined,
43134
+ "data-stretch": stretch ? "" : undefined,
43116
43135
  baseClassName: "navi_link",
43117
43136
  styleCSSVars: LinkStyleCSSVars,
43118
43137
  pseudoClasses: LinkPseudoClasses,
@@ -54315,8 +54334,8 @@ const Form = props => {
54315
54334
  // second's opening tag, so the inner fields would silently belong to the
54316
54335
  // outer form. Rather than forbidding the shape (a form inside a picker inside
54317
54336
  // a form is a legitimate thing to want), a form that finds itself inside one
54318
- // is a different component: same group, no <form> element and none of the
54319
- // browser machinery that comes with it.
54337
+ // is a different component: a group of its own, no <form> element and none of
54338
+ // the browser machinery that comes with it (see FormNested).
54320
54339
  const isNested = Boolean(useContext(FormContext));
54321
54340
  return isNested ? jsx(FormNested, {
54322
54341
  ...props
@@ -54446,13 +54465,26 @@ const FormControl = props => {
54446
54465
  // event to intercept and no requestSubmit() to go through, so it is driven the
54447
54466
  // way every other group is — a command, or an action requested on it. method
54448
54467
  // belongs to the browser's own submission, so it means nothing here either.
54468
+ //
54469
+ // And it owns what it holds: `standalone`, unconditionally. A <Form> is a
54470
+ // question with a send of its own, so its fields answer to it and to nothing
54471
+ // above it — they are not in the outer form's value, not in its "changed", and
54472
+ // not in the constraints it checks before sending. That last one is what a
54473
+ // caller feels: a required field in a popup nobody opened would otherwise
54474
+ // refuse the outer submit, pointing at something the screen is not even
54475
+ // showing. A cluster of fields that IS part of the value around it is a
54476
+ // <ControlGroup>, which is the shape without the send (see
54477
+ // docs/control_object.md).
54449
54478
  const FormNested = props => {
54450
54479
  const {
54451
54480
  formRootProps,
54452
54481
  formProps,
54453
54482
  onnavi_action_end,
54454
54483
  inside
54455
- } = useFormGroup(props);
54484
+ } = useFormGroup({
54485
+ ...props,
54486
+ standalone: true
54487
+ });
54456
54488
  return jsx(Box, {
54457
54489
  ...formRootProps,
54458
54490
  ...formProps,
@@ -59494,6 +59526,18 @@ const css$E = /* css */`
59494
59526
  --x-corner-bottom-right-radius: initial;
59495
59527
  --x-corner-bottom-left-radius: initial;
59496
59528
 
59529
+ /* Sizing is per dialog: the anchor box (sizeFromAnchor) and the
59530
+ minWidth/maxWidth/minHeight/maxHeight props are written inline on THIS
59531
+ element, and an inline declaration wins over these resets. Without
59532
+ them, a dialog nested in another dialog would inherit its parent's
59533
+ inline values and open at the parent's size. */
59534
+ --anchor-width: initial;
59535
+ --anchor-height: initial;
59536
+ --dialog-min-width: initial;
59537
+ --dialog-max-width: initial;
59538
+ --dialog-min-height: initial;
59539
+ --dialog-max-height: initial;
59540
+
59497
59541
  /* Computed once, reused by both max-width itself and min-width's own
59498
59542
  clamp below (see its comment for why) — avoids repeating the same
59499
59543
  min(..., ...) expression twice. */
@@ -61403,6 +61447,21 @@ const css$D = /* css */`
61403
61447
  --x-corner-bottom-right-radius: initial;
61404
61448
  --x-corner-bottom-left-radius: initial;
61405
61449
 
61450
+ /* Sizing is per popover: the anchor box and the
61451
+ minWidth/maxWidth/minHeight/maxHeight props are written inline on THIS
61452
+ element, and an inline declaration wins over these resets. Without
61453
+ them, a popover nested in another popup (or opened without an anchor
61454
+ inside one sized from its own) would inherit the outer inline values
61455
+ and open at the outer size. */
61456
+ --anchor-width: initial;
61457
+ --anchor-height: initial;
61458
+ --anchor-inner-width: initial;
61459
+ --anchor-inner-height: initial;
61460
+ --popover-min-width: initial;
61461
+ --popover-max-width: initial;
61462
+ --popover-min-height: initial;
61463
+ --popover-max-height: initial;
61464
+
61406
61465
  --x-popover-max-width: min(
61407
61466
  var(--popover-max-width, var(--popover-maxmax-width)),
61408
61467
  var(--container-position-remaining-width, var(--popover-maxmax-width)),
@@ -71611,9 +71670,11 @@ const PickerText = props => {
71611
71670
  };
71612
71671
 
71613
71672
  // The popup holds a group of named controls — a `<ControlGroup>`, or a `<Form>`
71614
- // when that group is a question with a send of its own — and this picker's
71615
- // value is the object that group aggregates. The popup itself holds nothing: it
71616
- // is a surface (see dialog.jsx), so there is nothing to tell it about the shape.
71673
+ // when that group is a question with a send of its own and the picker is not
71674
+ // itself inside a form (a form in a form answers for itself, see form.jsx) —
71675
+ // and this picker's value is the object that group aggregates. The popup itself
71676
+ // holds nothing: it is a surface (see dialog.jsx), so there is nothing to tell
71677
+ // it about the shape.
71617
71678
  const PickerObject = props => {
71618
71679
  const Next = useNextResolver();
71619
71680
  return jsx(Next, {