@stapel/listings-react 0.12.0 → 0.13.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/CHANGELOG.md CHANGED
@@ -1,5 +1,46 @@
1
1
  # @stapel/listings-react
2
2
 
3
+ ## 0.13.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 5397813: The composer asks what is being sold before it asks about the parcel
8
+
9
+ `<ListingComposerPage>` had two section orders chosen by the form's width, and
10
+ the narrow one put the category's characteristics directly under the category
11
+ picker. On a leaf with a handful of attributes that was an improvement; on an
12
+ imported one it was a funnel with nothing left in it. Measured at 390x844 on a
13
+ live classified deployment: 32 fields between the category and the title, so
14
+ `Title` sat at y=5575, `Price` at y=5871 and `Photos` at y=6245 of a 7308px
15
+ form — the seller was asked for the parcel's weight, its length and "what the
16
+ goods are measured in" before being asked what the thing is or what it costs.
17
+
18
+ There is now ONE order, at every width, and it belongs to the component:
19
+
20
+ category → title → description → price → currency → where → photos →
21
+ the category's characteristics → the listing's own options
22
+
23
+ Measured on the showcase's own composer story at 390 (five attribute rows, not
24
+ 32): title moves 993 → 314, the first attribute row 412 → 1266, and the page
25
+ shortens 2227 → 2071px.
26
+
27
+ - `COMPOSER_STACKED_BELOW` is gone, and with it the width measurement that
28
+ chose between the two orders. `COMPOSER_DETAILS_PLACEMENT` replaces it: a
29
+ constant, exported because `data-placement` on the characteristics region is
30
+ what an e2e suite reads to prove the order has not regressed.
31
+ - The discoverability the narrow order was reaching for is kept by the two
32
+ things that do not move the questions around — "take me to the first empty
33
+ field", which now also OPENS whatever disclosure the field is folded inside,
34
+ and a shorter region.
35
+ - `<FeatureFields>` takes `groupCollapse` (`"none"` by default, unchanged for
36
+ every existing host; `"auto"` in the composer). Under `"auto"` each named
37
+ group is a native `<details>` that starts open when it asks something
38
+ required or something already answered, and closed otherwise — so identity
39
+ groups are open and the delivery dimensions and wholesale terms are one tap
40
+ away under their own headings. The rule reads the SCHEMA and never a list of
41
+ group names: groups are admin-authored text in the deployment's language.
42
+ - The group order the catalogue emits is untouched.
43
+
3
44
  ## 0.12.0
4
45
 
5
46
  ### Minor Changes
@@ -1,3 +1,104 @@
1
+ /**
2
+ * `<ListingComposerPage>` — the submission screen.
3
+ *
4
+ * Five contracts meet on this page and each arrives through its own seam, so
5
+ * the component can be read top to bottom without knowing any of the other
6
+ * pairs:
7
+ *
8
+ * category `renderCategoryPicker` — the container's `<CategoryPickerField>`,
9
+ * given `setCategory` to call
10
+ * where `locationPicker` — the container's `<LocationField>`
11
+ * (`@stapel/geo-react`)
12
+ * currency `renderCurrencyPicker` — whatever vocabulary the deployment sells in
13
+ * details `features` — the schema, drawn by `<FeatureFields>` (L0)
14
+ * photos `gallerySlot` — the container's `<MediaGalleryField bag>`,
15
+ * whose bag is handed here as `images`
16
+ * the draft this pair
17
+ *
18
+ * ── An unfilled slot is NAMED, never improvised ────────────────────────────
19
+ *
20
+ * Every one of those four slots used to degrade into a control this pair could
21
+ * write on its own, and every one of those controls asked a question no seller
22
+ * can answer: a numeric category id typed into a text box, a currency CODE
23
+ * typed into a text box, and — the defect the owner named — two decimal boxes
24
+ * labelled Latitude and Longitude. A gallery heading with nothing under it was
25
+ * the same defect with the improvisation left out.
26
+ *
27
+ * So an unfilled slot renders `<SlotPlaceholder name="…"/>`: a labelled dashed
28
+ * region in a dev build, nothing at all in production. The rule is the one the
29
+ * rest of this codebase already lives by — `matchList`'s required empty arm,
30
+ * `ActionAvailability` with no "disabled for unknown reasons", `LoadState`
31
+ * refusing to fold failed into empty. A slot was the last place absence could
32
+ * still be silent, and `stapel/no-silent-slot` now says so at lint time.
33
+ *
34
+ * ── …and its LABEL goes with it ────────────────────────────────────────────
35
+ *
36
+ * The placeholder is nothing in production — but the `Form.Item` around it
37
+ * still drew its label, so a production composer with three unfilled slots
38
+ * rendered three labelled voids: "Category", "Currency", "Where it is" over
39
+ * empty space, and a "Photos" heading over air. A label is a promise that a
40
+ * control follows it. {@link SlotField} therefore renders the WHOLE field —
41
+ * label, help text and control — or nothing at all, and the `Photos` section
42
+ * does the same with its heading. `slotVisibility` pins the dev view on so a
43
+ * production-built showcase can still photograph the named placeholders.
44
+ *
45
+ * ── Why the pickers are slots and not dependencies ─────────────────────────
46
+ *
47
+ * A category tree, a geocoder and a currency vocabulary are all DEPLOYMENT
48
+ * knowledge, and all three live in sibling L2 pairs
49
+ * (`@stapel/categories-react`, `@stapel/geo-react`, the host's own). L2 pairs
50
+ * do not import each other; the container is the seam. A library that picked
51
+ * one would pick it for every host.
52
+ *
53
+ * ── The SECTION ORDER is this component's, and it is not a prop ────────────
54
+ *
55
+ * One order, at every width:
56
+ *
57
+ * category → title → description → price → currency → where → photos →
58
+ * the category's characteristics → the listing's own options
59
+ *
60
+ * The category comes first because everything after it depends on the choice.
61
+ * Then the five questions a seller came to answer — what it is, what it says,
62
+ * what it costs, where it is, what it looks like — and only then the questions
63
+ * the CATEGORY asks.
64
+ *
65
+ * This used to be two orders chosen by the form's width, and the narrow one
66
+ * put the characteristics directly under the category. The reason was real:
67
+ * measured on a live classified deployment, Mobile phones put the first
68
+ * attribute control at y=1596, two viewports below the fold, while the footer
69
+ * said "10 required details not filled in" with none of them on screen. The
70
+ * fix was not: the same leaf carries 32 imported fields, so on the next
71
+ * measurement of the same form the seller was asked for the parcel's weight,
72
+ * its length and "what the goods are measured in" BEFORE the title — title
73
+ * y=5575, price y=5871, photos y=6245, of a 7308px form. A composer that asks
74
+ * about postage before it asks what is being sold has no funnel left.
75
+ *
76
+ * So the discoverability problem is solved where it actually lives, and by two
77
+ * things that do not move the questions around:
78
+ *
79
+ * - the count of unfilled details is a CONTROL that goes to the first of them
80
+ * (`listings-composer-goto-missing`, below), so "10 required details" is
81
+ * never a dead end wherever the region sits;
82
+ * - the region itself is short, because `groupCollapse="auto"` opens the
83
+ * groups that ask something required and leaves the plumbing (delivery
84
+ * dimensions, wholesale terms) closed under its own heading.
85
+ *
86
+ * `detailsPlacement` is therefore gone as a decision — `data-placement` stays
87
+ * on the region as a constant, because an e2e that measured the regression
88
+ * needs something to read that is not a pixel count. A host that wants a
89
+ * different order does not want this page; it wants `<FeatureFields>` and its
90
+ * own form, which is exactly why that component is exported separately.
91
+ *
92
+ * ── Every blocked control says which of six reasons it is ──────────────────
93
+ *
94
+ * The publish button is the most-gated control in the fleet, and that is the
95
+ * point: "sign in", "choose a category", "we could not load what this
96
+ * category asks for", "this build cannot draw one of these details", "wait
97
+ * for the photos", "fix the highlighted fields" are six different problems
98
+ * with six different next actions. `firstBlock` orders them the way a person
99
+ * would be told, and `<GatedButton>` renders the reason beside the button —
100
+ * never a grey rectangle, never a hover.
101
+ */
1
102
  import type { ComponentType, ReactElement, ReactNode } from "react";
2
103
  import type { FeatureDef } from "@stapel/attributes-react";
3
104
  import type { ListingLocation } from "../model/draft.js";
@@ -10,16 +111,14 @@ import type { ThemeModeProp } from "./types.js";
10
111
  */
11
112
  export declare const COMPOSER_MEASURE = "44rem";
12
113
  /**
13
- * Below this FORM width the composer is a one-thumb column, and the order of
14
- * its sections has to change — see {@link ListingComposerPage}'s header on why
15
- * the characteristics move up.
16
- *
17
- * The `tablet` breakpoint, which is what "narrow" means everywhere else in the
18
- * skin, measured against the form's OWN width and never the viewport's (§83).
19
- * A composer drawn in a 360px settings pane on a 1440px desktop is narrow; a
20
- * viewport query would call it wide and bury its questions.
114
+ * What `data-placement` says on the characteristics region.
115
+ *
116
+ * A constant, and deliberately so: the order is the composer's and does not
117
+ * depend on the width any more (see the header). The attribute stays because
118
+ * an e2e suite measured the regression through it and needs a reading that is
119
+ * not a pixel count.
21
120
  */
22
- export declare const COMPOSER_STACKED_BELOW: number;
121
+ export declare const COMPOSER_DETAILS_PLACEMENT = "after-core-fields";
23
122
  /**
24
123
  * The DOM id of the control that answers one of the composer's own fields —
25
124
  * the names `mirrorListingFields` refuses by (`title`, `description`, …).
@@ -1 +1 @@
1
- {"version":3,"file":"ListingComposerPage.d.ts","sourceRoot":"","sources":["../../src/default/ListingComposerPage.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ListingComposerPage.d.ts","sourceRoot":"","sources":["../../src/default/ListingComposerPage.tsx"],"names":[],"mappings":"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"}
@@ -1,87 +1,8 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- /**
3
- * `<ListingComposerPage>` — the submission screen.
4
- *
5
- * Five contracts meet on this page and each arrives through its own seam, so
6
- * the component can be read top to bottom without knowing any of the other
7
- * pairs:
8
- *
9
- * category `renderCategoryPicker` — the container's `<CategoryPickerField>`,
10
- * given `setCategory` to call
11
- * where `locationPicker` — the container's `<LocationField>`
12
- * (`@stapel/geo-react`)
13
- * currency `renderCurrencyPicker` — whatever vocabulary the deployment sells in
14
- * details `features` — the schema, drawn by `<FeatureFields>` (L0)
15
- * photos `gallerySlot` — the container's `<MediaGalleryField bag>`,
16
- * whose bag is handed here as `images`
17
- * the draft this pair
18
- *
19
- * ── An unfilled slot is NAMED, never improvised ────────────────────────────
20
- *
21
- * Every one of those four slots used to degrade into a control this pair could
22
- * write on its own, and every one of those controls asked a question no seller
23
- * can answer: a numeric category id typed into a text box, a currency CODE
24
- * typed into a text box, and — the defect the owner named — two decimal boxes
25
- * labelled Latitude and Longitude. A gallery heading with nothing under it was
26
- * the same defect with the improvisation left out.
27
- *
28
- * So an unfilled slot renders `<SlotPlaceholder name="…"/>`: a labelled dashed
29
- * region in a dev build, nothing at all in production. The rule is the one the
30
- * rest of this codebase already lives by — `matchList`'s required empty arm,
31
- * `ActionAvailability` with no "disabled for unknown reasons", `LoadState`
32
- * refusing to fold failed into empty. A slot was the last place absence could
33
- * still be silent, and `stapel/no-silent-slot` now says so at lint time.
34
- *
35
- * ── …and its LABEL goes with it ────────────────────────────────────────────
36
- *
37
- * The placeholder is nothing in production — but the `Form.Item` around it
38
- * still drew its label, so a production composer with three unfilled slots
39
- * rendered three labelled voids: "Category", "Currency", "Where it is" over
40
- * empty space, and a "Photos" heading over air. A label is a promise that a
41
- * control follows it. {@link SlotField} therefore renders the WHOLE field —
42
- * label, help text and control — or nothing at all, and the `Photos` section
43
- * does the same with its heading. `slotVisibility` pins the dev view on so a
44
- * production-built showcase can still photograph the named placeholders.
45
- *
46
- * ── Why the pickers are slots and not dependencies ─────────────────────────
47
- *
48
- * A category tree, a geocoder and a currency vocabulary are all DEPLOYMENT
49
- * knowledge, and all three live in sibling L2 pairs
50
- * (`@stapel/categories-react`, `@stapel/geo-react`, the host's own). L2 pairs
51
- * do not import each other; the container is the seam. A library that picked
52
- * one would pick it for every host.
53
- *
54
- * ── On a narrow form the CHARACTERISTICS come before the photos ────────────
55
- *
56
- * The details of the chosen category are the questions only that category
57
- * asks, and they are the reason a category is chosen at all. On a wide form
58
- * they can sit after the photos, because the whole form is one screen. On a
59
- * 390px one they cannot: measured on a live classified deployment, choosing
60
- * Mobile phones grew the page to 7292px and put the first attribute control at
61
- * y=1596 — nearly two viewports below the fold, behind a ~700px photo dropzone
62
- * — while the footer said "10 required details not filled in" with none of
63
- * them on screen. So on a narrow form the section moves directly under the
64
- * category that produced it, and the photo dropzone follows it.
65
- *
66
- * The measurement is the FORM's own width (`useElementWidth`, the fleet's one
67
- * observer), not the viewport's: a composer is not a viewport, and a viewport
68
- * query would call a 360px pane on a desktop "wide".
69
- *
70
- * ── Every blocked control says which of six reasons it is ──────────────────
71
- *
72
- * The publish button is the most-gated control in the fleet, and that is the
73
- * point: "sign in", "choose a category", "we could not load what this
74
- * category asks for", "this build cannot draw one of these details", "wait
75
- * for the photos", "fix the highlighted fields" are six different problems
76
- * with six different next actions. `firstBlock` orders them the way a person
77
- * would be told, and `<GatedButton>` renders the reason beside the button —
78
- * never a grey rectangle, never a hover.
79
- */
80
- import { useRef } from "react";
81
2
  import { Alert, Button, Checkbox, Divider, Flex, Form, Input, InputNumber, Typography, } from "antd";
82
- import { ErrorAlert, GatedButton, PaneGate, SkinTheme, useElementWidth, } from "@stapel/tokens-antd/skin";
3
+ import { ErrorAlert, GatedButton, PaneGate, SkinTheme, } from "@stapel/tokens-antd/skin";
83
4
  import { SlotPlaceholder, actionAvailable, isDevBuild, useDescribeFlowError, useI18n, useT, } from "@stapel/core";
84
- import { breakpoints, spacing } from "@stapel/tokens";
5
+ import { spacing } from "@stapel/tokens";
85
6
  import { BUILTIN_VALUE_EDITOR_TYPES, FeatureFields, featureControlId, } from "@stapel/attributes-react/default";
86
7
  import { useListingComposer } from "../headless/ListingComposer.js";
87
8
  import { CATEGORY_FIELD, DESCRIPTION_FIELD, IMAGES_FIELD, LOCATION_FIELD, PRICE_FIELD, TITLE_FIELD, envelopeFieldErrors, failedResults, } from "../model/validation.js";
@@ -93,16 +14,14 @@ import { LISTINGS_I18N_KEYS } from "../i18n/keys.js";
93
14
  */
94
15
  export const COMPOSER_MEASURE = "44rem";
95
16
  /**
96
- * Below this FORM width the composer is a one-thumb column, and the order of
97
- * its sections has to change — see {@link ListingComposerPage}'s header on why
98
- * the characteristics move up.
17
+ * What `data-placement` says on the characteristics region.
99
18
  *
100
- * The `tablet` breakpoint, which is what "narrow" means everywhere else in the
101
- * skin, measured against the form's OWN width and never the viewport's (§83).
102
- * A composer drawn in a 360px settings pane on a 1440px desktop is narrow; a
103
- * viewport query would call it wide and bury its questions.
19
+ * A constant, and deliberately so: the order is the composer's and does not
20
+ * depend on the width any more (see the header). The attribute stays because
21
+ * an e2e suite measured the regression through it and needs a reading that is
22
+ * not a pixel count.
104
23
  */
105
- export const COMPOSER_STACKED_BELOW = breakpoints.tablet;
24
+ export const COMPOSER_DETAILS_PLACEMENT = "after-core-fields";
106
25
  /**
107
26
  * The DOM id of the control that answers one of the composer's own fields —
108
27
  * the names `mirrorListingFields` refuses by (`title`, `description`, …).
@@ -121,11 +40,18 @@ export function composerFieldId(field) {
121
40
  * descendant rather than assumed to be an `<input>`. */
122
41
  const FOCUSABLE = "input,select,textarea,button,[href],[tabindex]:not([tabindex='-1'])";
123
42
  /**
124
- * Put the person in front of one field: bring it into view, and focus what
125
- * they are meant to answer.
126
- *
127
- * Both halves are guarded rather than assumed. `scrollIntoView` does not exist
128
- * in every environment this renders in (jsdom, older embedded engines), and a
43
+ * Put the person in front of one field: open whatever it is folded inside,
44
+ * bring it into view, and focus what they are meant to answer.
45
+ *
46
+ * The disclosure step is the one that is easy to forget. A characteristic
47
+ * lives in a `<details>` section that may be closed (`groupCollapse="auto"`),
48
+ * and scrolling to a control inside a closed disclosure scrolls to nothing —
49
+ * the "take me to the first empty field" button would report success and move
50
+ * the page nowhere. Any depth of nesting is opened, because the answer to
51
+ * "where is it" must not depend on how the section was drawn.
52
+ *
53
+ * The rest is guarded rather than assumed. `scrollIntoView` does not exist in
54
+ * every environment this renders in (jsdom, older embedded engines), and a
129
55
  * field whose control came from a slot may have nothing focusable in it at
130
56
  * all — in which case scrolling to it is still the whole of the help that can
131
57
  * honestly be given.
@@ -136,6 +62,9 @@ function revealField(id) {
136
62
  const anchor = document.getElementById(id);
137
63
  if (anchor === null)
138
64
  return;
65
+ for (let folded = anchor.closest("details"); folded !== null; folded = folded.parentElement?.closest("details") ?? null) {
66
+ folded.open = true;
67
+ }
139
68
  if (typeof anchor.scrollIntoView === "function") {
140
69
  anchor.scrollIntoView({ block: "center", behavior: "smooth" });
141
70
  }
@@ -223,15 +152,6 @@ export function ListingComposerPage(props) {
223
152
  ? LISTINGS_I18N_KEYS.composeRepublish
224
153
  : LISTINGS_I18N_KEYS.composePublish);
225
154
  const LocationPicker = props.locationPicker;
226
- // The FORM's width, which is what decides the section order — see the
227
- // header. `?? false` because an unmeasured box is not a narrow one (the rule
228
- // `useElementWidth` states for every caller): the wide order is the one that
229
- // reflows gracefully, so it is what the first frame draws.
230
- const form = useRef(null);
231
- const { below } = useElementWidth(form, {
232
- thresholds: { stacked: COMPOSER_STACKED_BELOW },
233
- });
234
- const stacked = below.stacked ?? false;
235
155
  /**
236
156
  * The characteristics of the chosen category — built once and rendered in
237
157
  * exactly one of two places, so neither arm can drift from the other.
@@ -242,7 +162,12 @@ export function ListingComposerPage(props) {
242
162
  * was simply untrue — a spinner-shaped sentence over a form that was waiting
243
163
  * for the person, not for the network.
244
164
  */
245
- const details = (_jsxs("div", { "data-testid": "listings-composer-details", "data-placement": stacked ? "after-category" : "after-photos", children: [_jsx(Divider, {}), _jsx(Typography.Title, { level: 5, children: t(LISTINGS_I18N_KEYS.composeDetails) }), props.featuresError !== undefined ? (_jsx(ErrorAlert, { testId: "listings-composer-features-failed", message: t(LISTINGS_I18N_KEYS.composeDetailsFailed) })) : bag.values.categoryId.length === 0 ? (_jsx(Typography.Text, { type: "secondary", "data-testid": "listings-composer-features-no-category", children: t(LISTINGS_I18N_KEYS.composeDetailsNoCategory) })) : props.featuresLoading === true ? (_jsx(Typography.Text, { type: "secondary", "data-testid": "listings-composer-features-loading", children: t(LISTINGS_I18N_KEYS.composeDetailsLoading) })) : props.features.length === 0 ? (_jsx(Typography.Text, { type: "secondary", "data-testid": "listings-composer-features-empty", children: t(LISTINGS_I18N_KEYS.composeDetailsEmpty) })) : (_jsx(FeatureFields, { features: props.features, values: bag.values.features, errors: bag.fieldErrors, disabled: bag.publishing, onChange: bag.setFeature }))] }));
165
+ const details = (_jsxs("div", { "data-testid": "listings-composer-details", "data-placement": COMPOSER_DETAILS_PLACEMENT, children: [_jsx(Divider, {}), _jsx(Typography.Title, { level: 5, children: t(LISTINGS_I18N_KEYS.composeDetails) }), props.featuresError !== undefined ? (_jsx(ErrorAlert, { testId: "listings-composer-features-failed", message: t(LISTINGS_I18N_KEYS.composeDetailsFailed) })) : bag.values.categoryId.length === 0 ? (_jsx(Typography.Text, { type: "secondary", "data-testid": "listings-composer-features-no-category", children: t(LISTINGS_I18N_KEYS.composeDetailsNoCategory) })) : props.featuresLoading === true ? (_jsx(Typography.Text, { type: "secondary", "data-testid": "listings-composer-features-loading", children: t(LISTINGS_I18N_KEYS.composeDetailsLoading) })) : props.features.length === 0 ? (_jsx(Typography.Text, { type: "secondary", "data-testid": "listings-composer-features-empty", children: t(LISTINGS_I18N_KEYS.composeDetailsEmpty) })) : (_jsx(FeatureFields, { features: props.features, values: bag.values.features, errors: bag.fieldErrors, disabled: bag.publishing, onChange: bag.setFeature,
166
+ // An imported leaf is mostly plumbing: 32 fields across seven
167
+ // headings, four of them parcel dimensions. Open what is required or
168
+ // already answered, leave the rest one tap away under its own
169
+ // heading — see `FeatureGroupCollapse`.
170
+ groupCollapse: "auto" }))] }));
246
171
  // Where the "take me to it" control aims. A feature answers at its own
247
172
  // control id; everything else at the composer's.
248
173
  const missing = bag.firstUnsatisfied;
@@ -258,54 +183,54 @@ export function ListingComposerPage(props) {
258
183
  ? LISTINGS_I18N_KEYS.composeNewTitle
259
184
  : LISTINGS_I18N_KEYS.composeEditTitle) }), bag.draftNotReadable ? (_jsx(Alert, { type: "warning", showIcon: true, "data-testid": "listings-composer-draft-unreadable", title: t(LISTINGS_I18N_KEYS.composeBlockedNoDraft) })) : null, bag.outcome !== undefined ? (_jsx(Alert, { type: "success", showIcon: true, "data-testid": "listings-composer-published", "data-outcome": bag.outcome, title: t(bag.outcome === "live_edit_under_review"
260
185
  ? LISTINGS_I18N_KEYS.composePublishedLive
261
- : LISTINGS_I18N_KEYS.composePublishedFirst) })) : null, _jsx("div", { ref: form, children: _jsxs(Form, { layout: "vertical", "data-testid": "listings-composer-form", children: [_jsx(SlotField, { label: t(LISTINGS_I18N_KEYS.composeCategory), extra: t(LISTINGS_I18N_KEYS.composeCategoryHelp), slot: "renderCategoryPicker", named: namedSlots, status: errorOf(CATEGORY_FIELD), testId: "listings-composer-category", anchorId: composerFieldId(CATEGORY_FIELD), control: props.renderCategoryPicker?.({
262
- value: bag.values.categoryId,
263
- setCategory: bag.setCategory,
264
- }) }), bag.droppedOnCategoryChange.length > 0 ? (_jsx(Alert, { type: "info", showIcon: true, "data-testid": "listings-composer-dropped", title: t(LISTINGS_I18N_KEYS.composeCategoryChangedDropped, {
265
- count: bag.droppedOnCategoryChange.length,
266
- }) })) : null, stacked ? details : null, _jsx(Form.Item, { label: t(LISTINGS_I18N_KEYS.composeTitleLabel), ...errorOf(TITLE_FIELD), children: _jsx(Input, { id: composerFieldId(TITLE_FIELD), value: bag.values.title, "aria-label": t(LISTINGS_I18N_KEYS.composeTitleLabel), "data-testid": "listings-composer-title", onChange: (event) => {
267
- bag.setValue("title", event.target.value);
268
- }, onBlur: bag.save }) }), _jsx(Form.Item, { label: t(LISTINGS_I18N_KEYS.composeDescriptionLabel), ...errorOf(DESCRIPTION_FIELD), children: _jsx(Input.TextArea, { id: composerFieldId(DESCRIPTION_FIELD), rows: 5, value: bag.values.description, "aria-label": t(LISTINGS_I18N_KEYS.composeDescriptionLabel), "data-testid": "listings-composer-description", onChange: (event) => {
269
- bag.setValue("description", event.target.value);
270
- }, onBlur: bag.save }) }), _jsx(Form.Item, { label: t(LISTINGS_I18N_KEYS.composePriceLabel), ...errorOf(PRICE_FIELD), children: _jsx(Input, { id: composerFieldId(PRICE_FIELD), inputMode: "decimal", value: bag.values.price, ...(props.renderCurrencyPicker === undefined
271
- ? { addonAfter: bag.values.currency }
272
- : {}), "aria-label": t(LISTINGS_I18N_KEYS.composePriceLabel), "data-testid": "listings-composer-price", onChange: (event) => {
273
- bag.setValue("price", event.target.value);
274
- }, onBlur: bag.save }) }), _jsx(SlotField, { label: t(LISTINGS_I18N_KEYS.composeCurrencyLabel), slot: "renderCurrencyPicker", named: namedSlots, status: {}, testId: "listings-composer-currency", anchorId: composerFieldId("currency"), control: props.renderCurrencyPicker?.({
275
- value: bag.values.currency,
276
- setCurrency: (code) => {
277
- bag.setValue("currency", code);
278
- bag.saveSoon();
186
+ : LISTINGS_I18N_KEYS.composePublishedFirst) })) : null, _jsxs(Form, { layout: "vertical", "data-testid": "listings-composer-form", children: [_jsx(SlotField, { label: t(LISTINGS_I18N_KEYS.composeCategory), extra: t(LISTINGS_I18N_KEYS.composeCategoryHelp), slot: "renderCategoryPicker", named: namedSlots, status: errorOf(CATEGORY_FIELD), testId: "listings-composer-category", anchorId: composerFieldId(CATEGORY_FIELD), control: props.renderCategoryPicker?.({
187
+ value: bag.values.categoryId,
188
+ setCategory: bag.setCategory,
189
+ }) }), bag.droppedOnCategoryChange.length > 0 ? (_jsx(Alert, { type: "info", showIcon: true, "data-testid": "listings-composer-dropped", title: t(LISTINGS_I18N_KEYS.composeCategoryChangedDropped, {
190
+ count: bag.droppedOnCategoryChange.length,
191
+ }) })) : null, _jsx(Form.Item, { label: t(LISTINGS_I18N_KEYS.composeTitleLabel), ...errorOf(TITLE_FIELD), children: _jsx(Input, { id: composerFieldId(TITLE_FIELD), value: bag.values.title, "aria-label": t(LISTINGS_I18N_KEYS.composeTitleLabel), "data-testid": "listings-composer-title", onChange: (event) => {
192
+ bag.setValue("title", event.target.value);
193
+ }, onBlur: bag.save }) }), _jsx(Form.Item, { label: t(LISTINGS_I18N_KEYS.composeDescriptionLabel), ...errorOf(DESCRIPTION_FIELD), children: _jsx(Input.TextArea, { id: composerFieldId(DESCRIPTION_FIELD), rows: 5, value: bag.values.description, "aria-label": t(LISTINGS_I18N_KEYS.composeDescriptionLabel), "data-testid": "listings-composer-description", onChange: (event) => {
194
+ bag.setValue("description", event.target.value);
195
+ }, onBlur: bag.save }) }), _jsx(Form.Item, { label: t(LISTINGS_I18N_KEYS.composePriceLabel), ...errorOf(PRICE_FIELD), children: _jsx(Input, { id: composerFieldId(PRICE_FIELD), inputMode: "decimal", value: bag.values.price, ...(props.renderCurrencyPicker === undefined
196
+ ? { addonAfter: bag.values.currency }
197
+ : {}), "aria-label": t(LISTINGS_I18N_KEYS.composePriceLabel), "data-testid": "listings-composer-price", onChange: (event) => {
198
+ bag.setValue("price", event.target.value);
199
+ }, onBlur: bag.save }) }), _jsx(SlotField, { label: t(LISTINGS_I18N_KEYS.composeCurrencyLabel), slot: "renderCurrencyPicker", named: namedSlots, status: {}, testId: "listings-composer-currency", anchorId: composerFieldId("currency"), control: props.renderCurrencyPicker?.({
200
+ value: bag.values.currency,
201
+ setCurrency: (code) => {
202
+ bag.setValue("currency", code);
203
+ bag.saveSoon();
204
+ },
205
+ }) }), _jsx(SlotField, { label: t(LISTINGS_I18N_KEYS.composeLocationLabel), extra: t(LISTINGS_I18N_KEYS.composeLocationHelp), slot: "locationPicker", named: namedSlots, status: errorOf(LOCATION_FIELD), testId: "listings-composer-location", anchorId: composerFieldId(LOCATION_FIELD), control: props.renderLocationPicker !== undefined ? (_jsx("div", { "data-testid": "listings-composer-location-slot", children: props.renderLocationPicker({
206
+ value: bag.values.location,
207
+ setLocation: (location) => {
208
+ bag.setLocation(location);
279
209
  },
280
- }) }), _jsx(SlotField, { label: t(LISTINGS_I18N_KEYS.composeLocationLabel), extra: t(LISTINGS_I18N_KEYS.composeLocationHelp), slot: "locationPicker", named: namedSlots, status: errorOf(LOCATION_FIELD), testId: "listings-composer-location", anchorId: composerFieldId(LOCATION_FIELD), control: props.renderLocationPicker !== undefined ? (_jsx("div", { "data-testid": "listings-composer-location-slot", children: props.renderLocationPicker({
281
- value: bag.values.location,
282
- setLocation: (location) => {
283
- bag.setLocation(location);
284
- },
285
- save: bag.saveSoon,
286
- }) })) : LocationPicker !== undefined ? (_jsx("div", { "data-testid": "listings-composer-location-slot", children: _jsx(LocationPicker, { value: {
287
- lat: toNumber(bag.values.location.lat),
288
- lon: toNumber(bag.values.location.lon),
289
- ...(bag.values.location.locationLabel.length > 0
290
- ? { address: bag.values.location.locationLabel }
291
- : {}),
292
- }, onChange: (next) => {
293
- // Numbers in, decimal strings out the wire's spelling,
294
- // written at the seam so no other module has to know.
295
- bag.setLocation({
296
- ...bag.values.location,
297
- lat: next.lat === null ? null : String(next.lat),
298
- lon: next.lon === null ? null : String(next.lon),
299
- locationLabel: next.address ?? "",
300
- });
301
- bag.saveSoon();
302
- } }) })) : undefined }), props.gallerySlot !== undefined || namedSlots ? (_jsxs(_Fragment, { children: [_jsx(Divider, {}), _jsx(Typography.Title, { level: 5, children: t(LISTINGS_I18N_KEYS.composePhotos) }), _jsx("div", { id: composerFieldId(IMAGES_FIELD), children: props.gallerySlot ?? (_jsx(SlotPlaceholder, { name: "gallerySlot", visibility: "visible" })) }), bag.fieldErrors[IMAGES_FIELD] ? (_jsx(Typography.Text, { type: "danger", "data-testid": "listings-composer-images-error", children: describe(bag.fieldErrors[IMAGES_FIELD]).message })) : null] })) : null, stacked ? null : details, _jsx(Divider, {}), _jsx(Form.Item, { children: _jsx(Checkbox, { checked: bag.values.countable, "data-testid": "listings-composer-countable", onChange: (event) => {
303
- bag.setValue("countable", event.target.checked);
304
- }, children: t(LISTINGS_I18N_KEYS.composeCountable) }) }), bag.values.countable ? (_jsx(Form.Item, { label: t(LISTINGS_I18N_KEYS.composeStock), children: _jsx(InputNumber, { min: 0, value: bag.values.stockQuantity, "aria-label": t(LISTINGS_I18N_KEYS.composeStock), "data-testid": "listings-composer-stock", onChange: (value) => {
305
- bag.setValue("stockQuantity", value ?? null);
306
- } }) })) : null, _jsx(Form.Item, { children: _jsx(Checkbox, { checked: bag.values.autoRepublish, "data-testid": "listings-composer-auto-republish", onChange: (event) => {
307
- bag.setValue("autoRepublish", event.target.checked);
308
- }, children: t(LISTINGS_I18N_KEYS.composeAutoRepublish) }) })] }) }), bag.refusal?.kind === "invalid_draft" ? (_jsx(ErrorAlert, { testId: "listings-composer-invalid", message: t(LISTINGS_I18N_KEYS.composeInvalidSummary, {
210
+ save: bag.saveSoon,
211
+ }) })) : LocationPicker !== undefined ? (_jsx("div", { "data-testid": "listings-composer-location-slot", children: _jsx(LocationPicker, { value: {
212
+ lat: toNumber(bag.values.location.lat),
213
+ lon: toNumber(bag.values.location.lon),
214
+ ...(bag.values.location.locationLabel.length > 0
215
+ ? { address: bag.values.location.locationLabel }
216
+ : {}),
217
+ }, onChange: (next) => {
218
+ // Numbers in, decimal strings out — the wire's spelling,
219
+ // written at the seam so no other module has to know.
220
+ bag.setLocation({
221
+ ...bag.values.location,
222
+ lat: next.lat === null ? null : String(next.lat),
223
+ lon: next.lon === null ? null : String(next.lon),
224
+ locationLabel: next.address ?? "",
225
+ });
226
+ bag.saveSoon();
227
+ } }) })) : undefined }), props.gallerySlot !== undefined || namedSlots ? (_jsxs(_Fragment, { children: [_jsx(Divider, {}), _jsx(Typography.Title, { level: 5, children: t(LISTINGS_I18N_KEYS.composePhotos) }), _jsx("div", { id: composerFieldId(IMAGES_FIELD), children: props.gallerySlot ?? (_jsx(SlotPlaceholder, { name: "gallerySlot", visibility: "visible" })) }), bag.fieldErrors[IMAGES_FIELD] ? (_jsx(Typography.Text, { type: "danger", "data-testid": "listings-composer-images-error", children: describe(bag.fieldErrors[IMAGES_FIELD]).message })) : null] })) : null, details, _jsx(Divider, {}), _jsx(Form.Item, { children: _jsx(Checkbox, { checked: bag.values.countable, "data-testid": "listings-composer-countable", onChange: (event) => {
228
+ bag.setValue("countable", event.target.checked);
229
+ }, children: t(LISTINGS_I18N_KEYS.composeCountable) }) }), bag.values.countable ? (_jsx(Form.Item, { label: t(LISTINGS_I18N_KEYS.composeStock), children: _jsx(InputNumber, { min: 0, value: bag.values.stockQuantity, "aria-label": t(LISTINGS_I18N_KEYS.composeStock), "data-testid": "listings-composer-stock", onChange: (value) => {
230
+ bag.setValue("stockQuantity", value ?? null);
231
+ } }) })) : null, _jsx(Form.Item, { children: _jsx(Checkbox, { checked: bag.values.autoRepublish, "data-testid": "listings-composer-auto-republish", onChange: (event) => {
232
+ bag.setValue("autoRepublish", event.target.checked);
233
+ }, children: t(LISTINGS_I18N_KEYS.composeAutoRepublish) }) })] }), bag.refusal?.kind === "invalid_draft" ? (_jsx(ErrorAlert, { testId: "listings-composer-invalid", message: t(LISTINGS_I18N_KEYS.composeInvalidSummary, {
309
234
  count: failedResults(bag.refusal.batch).length,
310
235
  }) })) : null, bag.refusal?.kind === "error" && !routedToAControl(bag.refusal.error) ? (_jsx(ErrorAlert, { testId: "listings-composer-error", error: describe({
311
236
  code: bag.refusal.error.code,
@@ -1 +1 @@
1
- {"version":3,"file":"ListingComposerPage.js","sourceRoot":"","sources":["../../src/default/ListingComposerPage.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ListingComposerPage.js","sourceRoot":"","sources":["../../src/default/ListingComposerPage.tsx"],"names":[],"mappings":"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"}
@@ -43,7 +43,7 @@ export { FeedGrid, FEED_GRID_COLUMNS } from "./FeedGrid.js";
43
43
  export type { FeedGridProps } from "./FeedGrid.js";
44
44
  export { ListingDetailPane, DETAIL_MEASURE, DETAIL_PHOTO_MIN } from "./ListingDetailPane.js";
45
45
  export type { ListingDetailPaneProps } from "./ListingDetailPane.js";
46
- export { ListingComposerPage, COMPOSER_MEASURE, COMPOSER_STACKED_BELOW, composerFieldId, } from "./ListingComposerPage.js";
46
+ export { ListingComposerPage, COMPOSER_DETAILS_PLACEMENT, COMPOSER_MEASURE, composerFieldId, } from "./ListingComposerPage.js";
47
47
  export type { ListingComposerPageProps, ComposerCategorySlot, ComposerCurrencySlot, ComposerLocationSlot, ComposerLocationValue, ComposerLocationPickerProps, } from "./ListingComposerPage.js";
48
48
  export { MyListingsPane } from "./MyListingsPane.js";
49
49
  export type { MyListingsPaneProps } from "./MyListingsPane.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/default/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EACV,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EACV,oBAAoB,EACpB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EACV,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC5D,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC7F,YAAY,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACvE,YAAY,EACV,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACnF,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACvE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,YAAY,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/default/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EACV,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EACV,oBAAoB,EACpB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EACV,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC5D,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC7F,YAAY,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAC1B,gBAAgB,EAChB,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACvE,YAAY,EACV,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACnF,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACvE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,YAAY,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
@@ -38,7 +38,7 @@ export { ListingSerpCard } from "./ListingSerpCard.js";
38
38
  export { ListingFeedCard } from "./ListingFeedCard.js";
39
39
  export { FeedGrid, FEED_GRID_COLUMNS } from "./FeedGrid.js";
40
40
  export { ListingDetailPane, DETAIL_MEASURE, DETAIL_PHOTO_MIN } from "./ListingDetailPane.js";
41
- export { ListingComposerPage, COMPOSER_MEASURE, COMPOSER_STACKED_BELOW, composerFieldId, } from "./ListingComposerPage.js";
41
+ export { ListingComposerPage, COMPOSER_DETAILS_PLACEMENT, COMPOSER_MEASURE, composerFieldId, } from "./ListingComposerPage.js";
42
42
  export { MyListingsPane } from "./MyListingsPane.js";
43
43
  export { FavoritesPane, FAVORITES_CARD_MIN } from "./FavoritesPane.js";
44
44
  export { LifecycleTag, ListingStatusBlock, ModerationNote } from "./StatusTags.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/default/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAO/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAMvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAKvD,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE5D,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE7F,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,GAChB,MAAM,0BAA0B,CAAC;AASlC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAMvE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEnF,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEvE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/default/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAO/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAMvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAKvD,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE5D,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE7F,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAC1B,gBAAgB,EAChB,eAAe,GAChB,MAAM,0BAA0B,CAAC;AASlC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAMvE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEnF,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEvE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
package/llms.txt CHANGED
@@ -1,4 +1,4 @@
1
- # @stapel/listings-react 0.12.0
1
+ # @stapel/listings-react 0.13.0
2
2
 
3
3
  Headless React flow pair for stapel-listings (contract >=0.10 <0.11) — business + state, zero visual opinion.
4
4
  Built on @stapel/core: typed client + StapelApiError envelope, auth token refresh,
package/manifest.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$generated": "by scripts/gen-manifest.mjs — do not edit; drift-gated (pnpm gen:manifest:check)",
3
3
  "package": "@stapel/listings-react",
4
- "version": "0.12.0",
4
+ "version": "0.13.0",
5
5
  "backend": {
6
6
  "module": "stapel-listings",
7
7
  "contract": ">=0.10 <0.11"
package/nav-manifest.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "package": "@stapel/listings-react",
3
- "version": "0.12.0",
3
+ "version": "0.13.0",
4
4
  "entries": [
5
5
  {
6
6
  "id": "listings.detail",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stapel/listings-react",
3
- "version": "0.12.0",
3
+ "version": "0.13.0",
4
4
  "description": "Headless React pair for stapel-listings: a typed client over the draft twin, the composer that turns a category schema into a submittable listing, and the owner's dashboard. Two independent axes are rendered as two — lifecycle `status` decides visibility and `moderation_status` decides nothing about it, so an edit to a live listing stays live and says 'under review' instead of vanishing. Feature values are drawn and mirrored by @stapel/attributes-react; photos arrive as an injected upload bag whose `refs` ARE `images_draft` and whose `settled` gates the submit; a publish refusal is routed onto the control that caused it by slug. Zero visual opinion in the main entry; an opt-in /default subpath ships the antd skin.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -102,7 +102,7 @@
102
102
  "size-limit": "^11.2.0",
103
103
  "typescript": "^5.8.3",
104
104
  "vitest": "^3.2.4",
105
- "@stapel/attributes-react": "^0.6.0",
105
+ "@stapel/attributes-react": "^0.7.0",
106
106
  "@stapel/core": "^0.22.0",
107
107
  "@stapel/currencies-react": "^0.3.0",
108
108
  "@stapel/image": "^0.4.2",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$generated": "by scripts/gen-events.mjs — do not edit; drift-gated (pnpm gen:events:check)",
3
3
  "package": "@stapel/listings-react",
4
- "version": "0.12.0",
4
+ "version": "0.13.0",
5
5
  "defined": [],
6
6
  "flows": []
7
7
  }
@@ -50,21 +50,44 @@
50
50
  * do not import each other; the container is the seam. A library that picked
51
51
  * one would pick it for every host.
52
52
  *
53
- * ── On a narrow form the CHARACTERISTICS come before the photos ────────────
54
- *
55
- * The details of the chosen category are the questions only that category
56
- * asks, and they are the reason a category is chosen at all. On a wide form
57
- * they can sit after the photos, because the whole form is one screen. On a
58
- * 390px one they cannot: measured on a live classified deployment, choosing
59
- * Mobile phones grew the page to 7292px and put the first attribute control at
60
- * y=1596 nearly two viewports below the fold, behind a ~700px photo dropzone
61
- * while the footer said "10 required details not filled in" with none of
62
- * them on screen. So on a narrow form the section moves directly under the
63
- * category that produced it, and the photo dropzone follows it.
64
- *
65
- * The measurement is the FORM's own width (`useElementWidth`, the fleet's one
66
- * observer), not the viewport's: a composer is not a viewport, and a viewport
67
- * query would call a 360px pane on a desktop "wide".
53
+ * ── The SECTION ORDER is this component's, and it is not a prop ────────────
54
+ *
55
+ * One order, at every width:
56
+ *
57
+ * category title description price currency where photos
58
+ * the category's characteristics the listing's own options
59
+ *
60
+ * The category comes first because everything after it depends on the choice.
61
+ * Then the five questions a seller came to answer what it is, what it says,
62
+ * what it costs, where it is, what it looks like and only then the questions
63
+ * the CATEGORY asks.
64
+ *
65
+ * This used to be two orders chosen by the form's width, and the narrow one
66
+ * put the characteristics directly under the category. The reason was real:
67
+ * measured on a live classified deployment, Mobile phones put the first
68
+ * attribute control at y=1596, two viewports below the fold, while the footer
69
+ * said "10 required details not filled in" with none of them on screen. The
70
+ * fix was not: the same leaf carries 32 imported fields, so on the next
71
+ * measurement of the same form the seller was asked for the parcel's weight,
72
+ * its length and "what the goods are measured in" BEFORE the title — title
73
+ * y=5575, price y=5871, photos y=6245, of a 7308px form. A composer that asks
74
+ * about postage before it asks what is being sold has no funnel left.
75
+ *
76
+ * So the discoverability problem is solved where it actually lives, and by two
77
+ * things that do not move the questions around:
78
+ *
79
+ * - the count of unfilled details is a CONTROL that goes to the first of them
80
+ * (`listings-composer-goto-missing`, below), so "10 required details" is
81
+ * never a dead end wherever the region sits;
82
+ * - the region itself is short, because `groupCollapse="auto"` opens the
83
+ * groups that ask something required and leaves the plumbing (delivery
84
+ * dimensions, wholesale terms) closed under its own heading.
85
+ *
86
+ * `detailsPlacement` is therefore gone as a decision — `data-placement` stays
87
+ * on the region as a constant, because an e2e that measured the regression
88
+ * needs something to read that is not a pixel count. A host that wants a
89
+ * different order does not want this page; it wants `<FeatureFields>` and its
90
+ * own form, which is exactly why that component is exported separately.
68
91
  *
69
92
  * ── Every blocked control says which of six reasons it is ──────────────────
70
93
  *
@@ -76,7 +99,6 @@
76
99
  * would be told, and `<GatedButton>` renders the reason beside the button —
77
100
  * never a grey rectangle, never a hover.
78
101
  */
79
- import { useRef } from "react";
80
102
  import type { ComponentType, ReactElement, ReactNode } from "react";
81
103
  import {
82
104
  Alert,
@@ -94,7 +116,6 @@ import {
94
116
  GatedButton,
95
117
  PaneGate,
96
118
  SkinTheme,
97
- useElementWidth,
98
119
  } from "@stapel/tokens-antd/skin";
99
120
  import {
100
121
  SlotPlaceholder,
@@ -104,7 +125,7 @@ import {
104
125
  useI18n,
105
126
  useT,
106
127
  } from "@stapel/core";
107
- import { breakpoints, spacing } from "@stapel/tokens";
128
+ import { spacing } from "@stapel/tokens";
108
129
  import type { FeatureDef } from "@stapel/attributes-react";
109
130
  import {
110
131
  BUILTIN_VALUE_EDITOR_TYPES,
@@ -135,16 +156,14 @@ import type { ThemeModeProp } from "./types.js";
135
156
  export const COMPOSER_MEASURE = "44rem";
136
157
 
137
158
  /**
138
- * Below this FORM width the composer is a one-thumb column, and the order of
139
- * its sections has to change — see {@link ListingComposerPage}'s header on why
140
- * the characteristics move up.
141
- *
142
- * The `tablet` breakpoint, which is what "narrow" means everywhere else in the
143
- * skin, measured against the form's OWN width and never the viewport's (§83).
144
- * A composer drawn in a 360px settings pane on a 1440px desktop is narrow; a
145
- * viewport query would call it wide and bury its questions.
159
+ * What `data-placement` says on the characteristics region.
160
+ *
161
+ * A constant, and deliberately so: the order is the composer's and does not
162
+ * depend on the width any more (see the header). The attribute stays because
163
+ * an e2e suite measured the regression through it and needs a reading that is
164
+ * not a pixel count.
146
165
  */
147
- export const COMPOSER_STACKED_BELOW: number = breakpoints.tablet;
166
+ export const COMPOSER_DETAILS_PLACEMENT = "after-core-fields";
148
167
 
149
168
  /**
150
169
  * The DOM id of the control that answers one of the composer's own fields —
@@ -167,11 +186,18 @@ const FOCUSABLE =
167
186
  "input,select,textarea,button,[href],[tabindex]:not([tabindex='-1'])";
168
187
 
169
188
  /**
170
- * Put the person in front of one field: bring it into view, and focus what
171
- * they are meant to answer.
189
+ * Put the person in front of one field: open whatever it is folded inside,
190
+ * bring it into view, and focus what they are meant to answer.
191
+ *
192
+ * The disclosure step is the one that is easy to forget. A characteristic
193
+ * lives in a `<details>` section that may be closed (`groupCollapse="auto"`),
194
+ * and scrolling to a control inside a closed disclosure scrolls to nothing —
195
+ * the "take me to the first empty field" button would report success and move
196
+ * the page nowhere. Any depth of nesting is opened, because the answer to
197
+ * "where is it" must not depend on how the section was drawn.
172
198
  *
173
- * Both halves are guarded rather than assumed. `scrollIntoView` does not exist
174
- * in every environment this renders in (jsdom, older embedded engines), and a
199
+ * The rest is guarded rather than assumed. `scrollIntoView` does not exist in
200
+ * every environment this renders in (jsdom, older embedded engines), and a
175
201
  * field whose control came from a slot may have nothing focusable in it at
176
202
  * all — in which case scrolling to it is still the whole of the help that can
177
203
  * honestly be given.
@@ -180,6 +206,13 @@ function revealField(id: string): void {
180
206
  if (typeof document === "undefined") return;
181
207
  const anchor = document.getElementById(id);
182
208
  if (anchor === null) return;
209
+ for (
210
+ let folded = anchor.closest("details");
211
+ folded !== null;
212
+ folded = folded.parentElement?.closest("details") ?? null
213
+ ) {
214
+ folded.open = true;
215
+ }
183
216
  if (typeof anchor.scrollIntoView === "function") {
184
217
  anchor.scrollIntoView({ block: "center", behavior: "smooth" });
185
218
  }
@@ -483,15 +516,6 @@ export function ListingComposerPage(
483
516
  );
484
517
 
485
518
  const LocationPicker = props.locationPicker;
486
- // The FORM's width, which is what decides the section order — see the
487
- // header. `?? false` because an unmeasured box is not a narrow one (the rule
488
- // `useElementWidth` states for every caller): the wide order is the one that
489
- // reflows gracefully, so it is what the first frame draws.
490
- const form = useRef<HTMLDivElement>(null);
491
- const { below } = useElementWidth(form, {
492
- thresholds: { stacked: COMPOSER_STACKED_BELOW },
493
- });
494
- const stacked = below.stacked ?? false;
495
519
 
496
520
  /**
497
521
  * The characteristics of the chosen category — built once and rendered in
@@ -506,7 +530,7 @@ export function ListingComposerPage(
506
530
  const details = (
507
531
  <div
508
532
  data-testid="listings-composer-details"
509
- data-placement={stacked ? "after-category" : "after-photos"}
533
+ data-placement={COMPOSER_DETAILS_PLACEMENT}
510
534
  >
511
535
  <Divider />
512
536
  <Typography.Title level={5}>
@@ -539,6 +563,11 @@ export function ListingComposerPage(
539
563
  errors={bag.fieldErrors}
540
564
  disabled={bag.publishing}
541
565
  onChange={bag.setFeature}
566
+ // An imported leaf is mostly plumbing: 32 fields across seven
567
+ // headings, four of them parcel dimensions. Open what is required or
568
+ // already answered, leave the rest one tap away under its own
569
+ // heading — see `FeatureGroupCollapse`.
570
+ groupCollapse="auto"
542
571
  />
543
572
  )}
544
573
  </div>
@@ -603,11 +632,6 @@ export function ListingComposerPage(
603
632
  />
604
633
  ) : null}
605
634
 
606
- {/* The measured box is the FORM, so a host that renders this page in
607
- a narrow pane gets the narrow order without the viewport agreeing.
608
- A plain block wrapper: antd's `Form` forwards its ref to the form
609
- INSTANCE, not to a node. */}
610
- <div ref={form}>
611
635
  <Form layout="vertical" data-testid="listings-composer-form">
612
636
  <SlotField
613
637
  label={t(LISTINGS_I18N_KEYS.composeCategory)}
@@ -634,10 +658,6 @@ export function ListingComposerPage(
634
658
  />
635
659
  ) : null}
636
660
 
637
- {/* Narrow: the category's own questions, directly under the choice
638
- that produced them and above the photo dropzone. */}
639
- {stacked ? details : null}
640
-
641
661
  <Form.Item
642
662
  label={t(LISTINGS_I18N_KEYS.composeTitleLabel)}
643
663
  {...errorOf(TITLE_FIELD)}
@@ -788,9 +808,9 @@ export function ListingComposerPage(
788
808
  </>
789
809
  ) : null}
790
810
 
791
- {/* Wide: the whole form is one screen, so the details keep their
792
- place after the photos. */}
793
- {stacked ? null : details}
811
+ {/* The category's own questions, after the five the seller came to
812
+ answer. See the header on why this is one order and not two. */}
813
+ {details}
794
814
 
795
815
  <Divider />
796
816
 
@@ -832,7 +852,6 @@ export function ListingComposerPage(
832
852
  </Checkbox>
833
853
  </Form.Item>
834
854
  </Form>
835
- </div>
836
855
 
837
856
  {bag.refusal?.kind === "invalid_draft" ? (
838
857
  <ErrorAlert
@@ -57,8 +57,8 @@ export { ListingDetailPane, DETAIL_MEASURE, DETAIL_PHOTO_MIN } from "./ListingDe
57
57
  export type { ListingDetailPaneProps } from "./ListingDetailPane.js";
58
58
  export {
59
59
  ListingComposerPage,
60
+ COMPOSER_DETAILS_PLACEMENT,
60
61
  COMPOSER_MEASURE,
61
- COMPOSER_STACKED_BELOW,
62
62
  composerFieldId,
63
63
  } from "./ListingComposerPage.js";
64
64
  export type {