@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 +41 -0
- package/dist/default/ListingComposerPage.d.ts +108 -9
- package/dist/default/ListingComposerPage.d.ts.map +1 -1
- package/dist/default/ListingComposerPage.js +76 -151
- package/dist/default/ListingComposerPage.js.map +1 -1
- package/dist/default/index.d.ts +1 -1
- package/dist/default/index.d.ts.map +1 -1
- package/dist/default/index.js +1 -1
- package/dist/default/index.js.map +1 -1
- package/llms.txt +1 -1
- package/manifest.json +1 -1
- package/nav-manifest.json +1 -1
- package/package.json +2 -2
- package/src/analytics/generated/events.json +1 -1
- package/src/default/ListingComposerPage.tsx +73 -54
- package/src/default/index.ts +1 -1
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
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* the
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
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
|
|
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":"
|
|
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,
|
|
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 {
|
|
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
|
-
*
|
|
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
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
*
|
|
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
|
|
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:
|
|
125
|
-
* they are meant to answer.
|
|
126
|
-
*
|
|
127
|
-
*
|
|
128
|
-
* in
|
|
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":
|
|
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,
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
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
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
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":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6EG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B,OAAO,EACL,KAAK,EACL,MAAM,EACN,QAAQ,EACR,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,WAAW,EACX,UAAU,GACX,MAAM,MAAM,CAAC;AACd,OAAO,EACL,UAAU,EACV,WAAW,EACX,QAAQ,EACR,SAAS,EACT,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,eAAe,EACf,eAAe,EACf,UAAU,EACV,oBAAoB,EACpB,OAAO,EACP,IAAI,GACL,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEtD,OAAO,EACL,0BAA0B,EAC1B,aAAa,EACb,gBAAgB,GACjB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAGpE,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,aAAa,GACd,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGrD;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAExC;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAW,WAAW,CAAC,MAAM,CAAC;AAEjE;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,2BAA2B,KAAK,EAAE,CAAC;AAC5C,CAAC;AAED;;wDAEwD;AACxD,MAAM,SAAS,GACb,qEAAqE,CAAC;AAExE;;;;;;;;;GASG;AACH,SAAS,WAAW,CAAC,EAAU;IAC7B,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO;IAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IAC3C,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO;IAC5B,IAAI,OAAO,MAAM,CAAC,cAAc,KAAK,UAAU,EAAE,CAAC;QAChD,MAAM,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;QACvC,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,MAAM,CAAC,aAAa,CAAc,SAAS,CAAC,CAAC;IACjD,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC;AA4LD;;;;;;;;;GASG;AACH,SAAS,SAAS,CAAC,KAUlB;IACC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC;IAC3C,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACzC,uEAAuE;IACvE,oEAAoE;IACpE,0EAA0E;IAC1E,kCAAkC;IAClC,MAAM,OAAO,GAAG,gBAAgB,IAAI,KAAK,CAAC,MAAM,CAAC;IACjD,OAAO,CACL,KAAC,IAAI,CAAC,IAAI,IACR,KAAK,EAAE,KAAK,CAAC,KAAK,KACd,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACrE,KAAK,CAAC,MAAM,YAEhB,cAAK,EAAE,EAAE,KAAK,CAAC,QAAQ,iBAAe,KAAK,CAAC,MAAM,YAC/C,KAAK,CAAC,OAAO,IAAI,KAAC,eAAe,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,EAAC,SAAS,GAAG,GACxE,GACI,CACb,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,SAAS,gBAAgB,CAAC,MAAe;IACvC,OAAO,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7D,CAAC;AAED,kEAAkE;AAClE,SAAS,QAAQ,CAAC,KAAoB;IACpC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,KAA+B;IAE/B,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC;IACxC,MAAM,GAAG,GAAG,kBAAkB,CAAC;QAC7B,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,0EAA0E;QAC1E,2EAA2E;QAC3E,2EAA2E;QAC3E,iEAAiE;QACjE,QAAQ,EAAE,MAAM;QAChB,GAAG,CAAC,KAAK,CAAC,eAAe,KAAK,SAAS;YACrC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE;YAC5C,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS;YACnC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE;YACxC,CAAC,CAAC,EAAE,CAAC;QACP,WAAW,EAAE,0BAA0B;QACvC,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,GAAG,CAAC,KAAK,CAAC,gBAAgB,KAAK,SAAS;YACtC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EAAE;YAC9C,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS;YACjC,CAAC,CAAC;gBACE,iEAAiE;gBACjE,mEAAmE;gBACnE,WAAW,EAAE,CAAC,QAAQ,EAAE,EAAE;oBACxB,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBAC3C,CAAC;aACF;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAC;IAEH;;gEAE4D;IAC5D,MAAM,OAAO,GAAG,CACd,KAAa,EACyD,EAAE;QACxE,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;QACnC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC;IACpE,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,CACpB,GAAG,CAAC,UAAU;QACZ,CAAC,CAAC,kBAAkB,CAAC,gBAAgB;QACrC,CAAC,CAAC,kBAAkB,CAAC,cAAc,CACtC,CAAC;IAEF,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;IAC5C,sEAAsE;IACtE,6EAA6E;IAC7E,6EAA6E;IAC7E,2DAA2D;IAC3D,MAAM,IAAI,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAC1C,MAAM,EAAE,KAAK,EAAE,GAAG,eAAe,CAAC,IAAI,EAAE;QACtC,UAAU,EAAE,EAAE,OAAO,EAAE,sBAAsB,EAAE;KAChD,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC;IAEvC;;;;;;;;;OASG;IACH,MAAM,OAAO,GAAG,CACd,8BACc,2BAA2B,oBACvB,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,cAAc,aAE3D,KAAC,OAAO,KAAG,EACX,KAAC,UAAU,CAAC,KAAK,IAAC,KAAK,EAAE,CAAC,YACvB,CAAC,CAAC,kBAAkB,CAAC,cAAc,CAAC,GACpB,EAClB,KAAK,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,CACnC,KAAC,UAAU,IACT,MAAM,EAAC,mCAAmC,EAC1C,OAAO,EAAE,CAAC,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,GACnD,CACH,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACvC,KAAC,UAAU,CAAC,IAAI,IACd,IAAI,EAAC,WAAW,iBACJ,wCAAwC,YAEnD,CAAC,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,GAC/B,CACnB,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,KAAK,IAAI,CAAC,CAAC,CAAC,CACnC,KAAC,UAAU,CAAC,IAAI,IAAC,IAAI,EAAC,WAAW,iBAAa,oCAAoC,YAC/E,CAAC,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,GAC5B,CACnB,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAChC,KAAC,UAAU,CAAC,IAAI,IAAC,IAAI,EAAC,WAAW,iBAAa,kCAAkC,YAC7E,CAAC,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,GAC1B,CACnB,CAAC,CAAC,CAAC,CACF,KAAC,aAAa,IACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,EAC3B,MAAM,EAAE,GAAG,CAAC,WAAW,EACvB,QAAQ,EAAE,GAAG,CAAC,UAAU,EACxB,QAAQ,EAAE,GAAG,CAAC,UAAU,GACxB,CACH,IACG,CACP,CAAC;IAEF,uEAAuE;IACvE,iDAAiD;IACjD,MAAM,OAAO,GAAG,GAAG,CAAC,gBAAgB,CAAC;IACrC,MAAM,aAAa,GACjB,OAAO,KAAK,SAAS;QACnB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC;YAC1D,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC;YAC3B,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IACjC,uEAAuE;IACvE,iDAAiD;IACjD,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,KAAK,SAAS,IAAI,UAAU,EAAE,CAAC;IAEtE,OAAO,CACL,KAAC,SAAS,IACR,OAAO,EAAC,MAAM,EACd,KAAK,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KACtD,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,YAE1D,MAAC,IAAI,IACH,QAAQ,QACR,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,iBACH,mBAAmB,gBACnB,GAAG,CAAC,KAAK,aAErB,KAAC,UAAU,CAAC,KAAK,IAAC,KAAK,EAAE,CAAC,YACvB,CAAC,CACA,KAAK,CAAC,SAAS,KAAK,SAAS;wBAC3B,CAAC,CAAC,kBAAkB,CAAC,eAAe;wBACpC,CAAC,CAAC,kBAAkB,CAAC,gBAAgB,CACxC,GACgB,EAKlB,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CACtB,KAAC,KAAK,IACJ,IAAI,EAAC,SAAS,EACd,QAAQ,uBACI,oCAAoC,EAChD,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,GAClD,CACH,CAAC,CAAC,CAAC,IAAI,EAEP,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAC3B,KAAC,KAAK,IACJ,IAAI,EAAC,SAAS,EACd,QAAQ,uBACI,6BAA6B,kBAC3B,GAAG,CAAC,OAAO,EACzB,KAAK,EAAE,CAAC,CACN,GAAG,CAAC,OAAO,KAAK,wBAAwB;wBACtC,CAAC,CAAC,kBAAkB,CAAC,oBAAoB;wBACzC,CAAC,CAAC,kBAAkB,CAAC,qBAAqB,CAC7C,GACD,CACH,CAAC,CAAC,CAAC,IAAI,EAMR,cAAK,GAAG,EAAE,IAAI,YACd,MAAC,IAAI,IAAC,MAAM,EAAC,UAAU,iBAAa,wBAAwB,aAC1D,KAAC,SAAS,IACR,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,eAAe,CAAC,EAC5C,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,EAChD,IAAI,EAAC,sBAAsB,EAC3B,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,EAC/B,MAAM,EAAC,4BAA4B,EACnC,QAAQ,EAAE,eAAe,CAAC,cAAc,CAAC,EACzC,OAAO,EAAE,KAAK,CAAC,oBAAoB,EAAE,CAAC;oCACpC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,UAAU;oCAC5B,WAAW,EAAE,GAAG,CAAC,WAAW;iCAC7B,CAAC,GACF,EAED,GAAG,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACxC,KAAC,KAAK,IACJ,IAAI,EAAC,MAAM,EACX,QAAQ,uBACI,2BAA2B,EACvC,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,6BAA6B,EAAE;oCACzD,KAAK,EAAE,GAAG,CAAC,uBAAuB,CAAC,MAAM;iCAC1C,CAAC,GACF,CACH,CAAC,CAAC,CAAC,IAAI,EAIP,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAEzB,KAAC,IAAI,CAAC,IAAI,IACR,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,KAC1C,OAAO,CAAC,WAAW,CAAC,YAExB,KAAC,KAAK,IACJ,EAAE,EAAE,eAAe,CAAC,WAAW,CAAC,EAChC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,gBACX,CAAC,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,iBACvC,yBAAyB,EACrC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wCAClB,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oCAC5C,CAAC,EACD,MAAM,EAAE,GAAG,CAAC,IAAI,GAChB,GACQ,EAEZ,KAAC,IAAI,CAAC,IAAI,IACR,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,KAChD,OAAO,CAAC,iBAAiB,CAAC,YAE9B,KAAC,KAAK,CAAC,QAAQ,IACb,EAAE,EAAE,eAAe,CAAC,iBAAiB,CAAC,EACtC,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,gBACjB,CAAC,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,iBAC7C,+BAA+B,EAC3C,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wCAClB,GAAG,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oCAClD,CAAC,EACD,MAAM,EAAE,GAAG,CAAC,IAAI,GAChB,GACQ,EAQZ,KAAC,IAAI,CAAC,IAAI,IACR,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,KAC1C,OAAO,CAAC,WAAW,CAAC,YAExB,KAAC,KAAK,IACJ,EAAE,EAAE,eAAe,CAAC,WAAW,CAAC,EAChC,SAAS,EAAC,SAAS,EACnB,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,KACnB,CAAC,KAAK,CAAC,oBAAoB,KAAK,SAAS;wCAC3C,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE;wCACrC,CAAC,CAAC,EAAE,CAAC,gBACK,CAAC,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,iBACvC,yBAAyB,EACrC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wCAClB,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oCAC5C,CAAC,EACD,MAAM,EAAE,GAAG,CAAC,IAAI,GAChB,GACQ,EAEZ,KAAC,SAAS,IACR,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,EACjD,IAAI,EAAC,sBAAsB,EAC3B,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,EAAE,EACV,MAAM,EAAC,4BAA4B,EACnC,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,EACrC,OAAO,EAAE,KAAK,CAAC,oBAAoB,EAAE,CAAC;oCACpC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ;oCAC1B,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE;wCACpB,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;wCAC/B,GAAG,CAAC,QAAQ,EAAE,CAAC;oCACjB,CAAC;iCACF,CAAC,GACF,EAUF,KAAC,SAAS,IACR,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,EACjD,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,EAChD,IAAI,EAAC,gBAAgB,EACrB,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,EAC/B,MAAM,EAAC,4BAA4B,EACnC,QAAQ,EAAE,eAAe,CAAC,cAAc,CAAC,EACzC,OAAO,EACL,KAAK,CAAC,oBAAoB,KAAK,SAAS,CAAC,CAAC,CAAC,CACzC,6BAAiB,iCAAiC,YAC/C,KAAK,CAAC,oBAAoB,CAAC;wCAC1B,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ;wCAC1B,WAAW,EAAE,CAAC,QAAQ,EAAE,EAAE;4CACxB,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;wCAC5B,CAAC;wCACD,IAAI,EAAE,GAAG,CAAC,QAAQ;qCACnB,CAAC,GACE,CACP,CAAC,CAAC,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,CACjC,6BAAiB,iCAAiC,YAChD,KAAC,cAAc,IACb,KAAK,EAAE;4CACL,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;4CACtC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;4CACtC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;gDAC9C,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE;gDAChD,CAAC,CAAC,EAAE,CAAC;yCACR,EACD,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;4CACjB,yDAAyD;4CACzD,sDAAsD;4CACtD,GAAG,CAAC,WAAW,CAAC;gDACd,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ;gDACtB,GAAG,EAAE,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;gDAChD,GAAG,EAAE,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;gDAChD,aAAa,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;6CAClC,CAAC,CAAC;4CACH,GAAG,CAAC,QAAQ,EAAE,CAAC;wCACjB,CAAC,GACD,GACE,CACP,CAAC,CAAC,CAAC,SAAS,GAEf,EAID,KAAK,CAAC,WAAW,KAAK,SAAS,IAAI,UAAU,CAAC,CAAC,CAAC,CAC/C,8BACE,KAAC,OAAO,KAAG,EACX,KAAC,UAAU,CAAC,KAAK,IAAC,KAAK,EAAE,CAAC,YACvB,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,GACnB,EACnB,cAAK,EAAE,EAAE,eAAe,CAAC,YAAY,CAAC,YACnC,KAAK,CAAC,WAAW,IAAI,CACpB,KAAC,eAAe,IAAC,IAAI,EAAC,aAAa,EAAC,UAAU,EAAC,SAAS,GAAG,CAC5D,GACG,EACL,GAAG,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAC/B,KAAC,UAAU,CAAC,IAAI,IAAC,IAAI,EAAC,QAAQ,iBAAa,gCAAgC,YACxE,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,GAChC,CACnB,CAAC,CAAC,CAAC,IAAI,IACP,CACJ,CAAC,CAAC,CAAC,IAAI,EAIP,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAEzB,KAAC,OAAO,KAAG,EAEX,KAAC,IAAI,CAAC,IAAI,cACR,KAAC,QAAQ,IACP,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,iBACjB,6BAA6B,EACzC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wCAClB,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oCAClD,CAAC,YAEA,CAAC,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,GAC9B,GACD,EAEX,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CACtB,KAAC,IAAI,CAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,YAClD,KAAC,WAAW,IACV,GAAG,EAAE,CAAC,EACN,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,aAAa,gBACnB,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,iBAClC,yBAAyB,EACrC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wCAClB,GAAG,CAAC,QAAQ,CAAC,eAAe,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC;oCAC/C,CAAC,GACD,GACQ,CACb,CAAC,CAAC,CAAC,IAAI,EAER,KAAC,IAAI,CAAC,IAAI,cACR,KAAC,QAAQ,IACP,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,aAAa,iBACrB,kCAAkC,EAC9C,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wCAClB,GAAG,CAAC,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oCACtD,CAAC,YAEA,CAAC,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,GAClC,GACD,IACP,GACD,EAEL,GAAG,CAAC,OAAO,EAAE,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC,CACvC,KAAC,UAAU,IACT,MAAM,EAAC,2BAA2B,EAClC,OAAO,EAAE,CAAC,CAAC,kBAAkB,CAAC,qBAAqB,EAAE;wBACnD,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM;qBAC/C,CAAC,GACF,CACH,CAAC,CAAC,CAAC,IAAI,EAQP,GAAG,CAAC,OAAO,EAAE,IAAI,KAAK,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CACvE,KAAC,UAAU,IACT,MAAM,EAAC,yBAAyB,EAChC,KAAK,EAAE,QAAQ,CAAC;wBACd,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI;wBAC5B,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM;wBAChC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM;wBAChC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO;wBAClC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ;qBACrC,CAAC,GACF,CACH,CAAC,CAAC,CAAC,IAAI,EAEP,GAAG,CAAC,SAAS,KAAK,SAAS;oBAC5B,GAAG,CAAC,SAAS,KAAK,IAAI;oBACtB,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CACjC,KAAC,UAAU,IACT,MAAM,EAAC,8BAA8B,EACrC,MAAM,EAAE,GAAG,CAAC,SAAS,GACrB,CACH,CAAC,CAAC,CAAC,IAAI,EAWR,KAAC,QAAQ,IAAC,IAAI,EAAE,eAAe,EAAE,EAAE,MAAM,EAAC,0BAA0B,YACpE,MAAC,IAAI,IAAC,QAAQ,QAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAC,YAAY,aAChD,KAAC,WAAW,IACV,IAAI,EAAE,GAAG,CAAC,WAAW,EACrB,IAAI,EAAC,SAAS,EACd,IAAI,EAAC,OAAO,EACZ,OAAO,EAAE,GAAG,CAAC,UAAU,EACvB,MAAM,EAAC,2BAA2B,oBACnB,MAAM,2BACC,8DAAyD,EAC/E,OAAO,EAAE,GAAG,CAAC,OAAO,YAEnB,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,YAAY,GAC5D,EAUb,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,IAAI,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,CAC3D,KAAC,MAAM,IACL,IAAI,EAAC,MAAM,EACX,IAAI,EAAC,OAAO,EACZ,KAAK,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,iBACf,gCAAgC,oBAC7B,MAAM,2BACC,8FAAyF,EAC/G,OAAO,EAAE,GAAG,EAAE;oCACZ,WAAW,CAAC,aAAa,CAAC,CAAC;gCAC7B,CAAC,YAEA,CAAC,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,GACvC,CACV,CAAC,CAAC,CAAC,IAAI,EAER,MAAC,IAAI,IAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,QAAC,KAAK,EAAC,YAAY,aAC5C,KAAC,WAAW,IACV,IAAI,EAAE,GAAG,CAAC,QAAQ,EAClB,IAAI,EAAC,MAAM,EACX,OAAO,EAAE,GAAG,CAAC,MAAM,EACnB,MAAM,EAAC,wBAAwB,oBAChB,MAAM,2BACC,8DAAyD,EAC/E,OAAO,EAAE,GAAG,CAAC,IAAI,YAEhB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC,kBAAkB,CAAC,WAAW,CAAC,GACtE,EAEb,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CACX,KAAC,UAAU,CAAC,IAAI,IAAC,IAAI,EAAC,SAAS,iBAAa,yBAAyB,YAClE,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,GACnB,CACnB,CAAC,CAAC,CAAC,IAAI,IACH,IACF,GACI,IACN,GACG,CACb,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"ListingComposerPage.js","sourceRoot":"","sources":["../../src/default/ListingComposerPage.tsx"],"names":[],"mappings":";AAsGA,OAAO,EACL,KAAK,EACL,MAAM,EACN,QAAQ,EACR,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,WAAW,EACX,UAAU,GACX,MAAM,MAAM,CAAC;AACd,OAAO,EACL,UAAU,EACV,WAAW,EACX,QAAQ,EACR,SAAS,GACV,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,eAAe,EACf,eAAe,EACf,UAAU,EACV,oBAAoB,EACpB,OAAO,EACP,IAAI,GACL,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,OAAO,EACL,0BAA0B,EAC1B,aAAa,EACb,gBAAgB,GACjB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAGpE,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,aAAa,GACd,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGrD;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAExC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,mBAAmB,CAAC;AAE9D;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,2BAA2B,KAAK,EAAE,CAAC;AAC5C,CAAC;AAED;;wDAEwD;AACxD,MAAM,SAAS,GACb,qEAAqE,CAAC;AAExE;;;;;;;;;;;;;;;;GAgBG;AACH,SAAS,WAAW,CAAC,EAAU;IAC7B,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO;IAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IAC3C,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO;IAC5B,KACE,IAAI,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EACtC,MAAM,KAAK,IAAI,EACf,MAAM,GAAG,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,IAAI,EACzD,CAAC;QACD,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,cAAc,KAAK,UAAU,EAAE,CAAC;QAChD,MAAM,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;QACvC,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,MAAM,CAAC,aAAa,CAAc,SAAS,CAAC,CAAC;IACjD,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC;AA4LD;;;;;;;;;GASG;AACH,SAAS,SAAS,CAAC,KAUlB;IACC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC;IAC3C,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACzC,uEAAuE;IACvE,oEAAoE;IACpE,0EAA0E;IAC1E,kCAAkC;IAClC,MAAM,OAAO,GAAG,gBAAgB,IAAI,KAAK,CAAC,MAAM,CAAC;IACjD,OAAO,CACL,KAAC,IAAI,CAAC,IAAI,IACR,KAAK,EAAE,KAAK,CAAC,KAAK,KACd,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACrE,KAAK,CAAC,MAAM,YAEhB,cAAK,EAAE,EAAE,KAAK,CAAC,QAAQ,iBAAe,KAAK,CAAC,MAAM,YAC/C,KAAK,CAAC,OAAO,IAAI,KAAC,eAAe,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,EAAC,SAAS,GAAG,GACxE,GACI,CACb,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,SAAS,gBAAgB,CAAC,MAAe;IACvC,OAAO,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7D,CAAC;AAED,kEAAkE;AAClE,SAAS,QAAQ,CAAC,KAAoB;IACpC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,KAA+B;IAE/B,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC;IACxC,MAAM,GAAG,GAAG,kBAAkB,CAAC;QAC7B,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,0EAA0E;QAC1E,2EAA2E;QAC3E,2EAA2E;QAC3E,iEAAiE;QACjE,QAAQ,EAAE,MAAM;QAChB,GAAG,CAAC,KAAK,CAAC,eAAe,KAAK,SAAS;YACrC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE;YAC5C,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS;YACnC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE;YACxC,CAAC,CAAC,EAAE,CAAC;QACP,WAAW,EAAE,0BAA0B;QACvC,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,GAAG,CAAC,KAAK,CAAC,gBAAgB,KAAK,SAAS;YACtC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EAAE;YAC9C,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS;YACjC,CAAC,CAAC;gBACE,iEAAiE;gBACjE,mEAAmE;gBACnE,WAAW,EAAE,CAAC,QAAQ,EAAE,EAAE;oBACxB,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBAC3C,CAAC;aACF;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAC;IAEH;;gEAE4D;IAC5D,MAAM,OAAO,GAAG,CACd,KAAa,EACyD,EAAE;QACxE,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;QACnC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC;IACpE,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,CACpB,GAAG,CAAC,UAAU;QACZ,CAAC,CAAC,kBAAkB,CAAC,gBAAgB;QACrC,CAAC,CAAC,kBAAkB,CAAC,cAAc,CACtC,CAAC;IAEF,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;IAE5C;;;;;;;;;OASG;IACH,MAAM,OAAO,GAAG,CACd,8BACc,2BAA2B,oBACvB,0BAA0B,aAE1C,KAAC,OAAO,KAAG,EACX,KAAC,UAAU,CAAC,KAAK,IAAC,KAAK,EAAE,CAAC,YACvB,CAAC,CAAC,kBAAkB,CAAC,cAAc,CAAC,GACpB,EAClB,KAAK,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,CACnC,KAAC,UAAU,IACT,MAAM,EAAC,mCAAmC,EAC1C,OAAO,EAAE,CAAC,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,GACnD,CACH,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACvC,KAAC,UAAU,CAAC,IAAI,IACd,IAAI,EAAC,WAAW,iBACJ,wCAAwC,YAEnD,CAAC,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,GAC/B,CACnB,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,KAAK,IAAI,CAAC,CAAC,CAAC,CACnC,KAAC,UAAU,CAAC,IAAI,IAAC,IAAI,EAAC,WAAW,iBAAa,oCAAoC,YAC/E,CAAC,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,GAC5B,CACnB,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAChC,KAAC,UAAU,CAAC,IAAI,IAAC,IAAI,EAAC,WAAW,iBAAa,kCAAkC,YAC7E,CAAC,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,GAC1B,CACnB,CAAC,CAAC,CAAC,CACF,KAAC,aAAa,IACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,EAC3B,MAAM,EAAE,GAAG,CAAC,WAAW,EACvB,QAAQ,EAAE,GAAG,CAAC,UAAU,EACxB,QAAQ,EAAE,GAAG,CAAC,UAAU;gBACxB,8DAA8D;gBAC9D,qEAAqE;gBACrE,8DAA8D;gBAC9D,wCAAwC;gBACxC,aAAa,EAAC,MAAM,GACpB,CACH,IACG,CACP,CAAC;IAEF,uEAAuE;IACvE,iDAAiD;IACjD,MAAM,OAAO,GAAG,GAAG,CAAC,gBAAgB,CAAC;IACrC,MAAM,aAAa,GACjB,OAAO,KAAK,SAAS;QACnB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC;YAC1D,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC;YAC3B,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IACjC,uEAAuE;IACvE,iDAAiD;IACjD,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,KAAK,SAAS,IAAI,UAAU,EAAE,CAAC;IAEtE,OAAO,CACL,KAAC,SAAS,IACR,OAAO,EAAC,MAAM,EACd,KAAK,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KACtD,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,YAE1D,MAAC,IAAI,IACH,QAAQ,QACR,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,iBACH,mBAAmB,gBACnB,GAAG,CAAC,KAAK,aAErB,KAAC,UAAU,CAAC,KAAK,IAAC,KAAK,EAAE,CAAC,YACvB,CAAC,CACA,KAAK,CAAC,SAAS,KAAK,SAAS;wBAC3B,CAAC,CAAC,kBAAkB,CAAC,eAAe;wBACpC,CAAC,CAAC,kBAAkB,CAAC,gBAAgB,CACxC,GACgB,EAKlB,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CACtB,KAAC,KAAK,IACJ,IAAI,EAAC,SAAS,EACd,QAAQ,uBACI,oCAAoC,EAChD,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,GAClD,CACH,CAAC,CAAC,CAAC,IAAI,EAEP,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAC3B,KAAC,KAAK,IACJ,IAAI,EAAC,SAAS,EACd,QAAQ,uBACI,6BAA6B,kBAC3B,GAAG,CAAC,OAAO,EACzB,KAAK,EAAE,CAAC,CACN,GAAG,CAAC,OAAO,KAAK,wBAAwB;wBACtC,CAAC,CAAC,kBAAkB,CAAC,oBAAoB;wBACzC,CAAC,CAAC,kBAAkB,CAAC,qBAAqB,CAC7C,GACD,CACH,CAAC,CAAC,CAAC,IAAI,EAER,MAAC,IAAI,IAAC,MAAM,EAAC,UAAU,iBAAa,wBAAwB,aAC1D,KAAC,SAAS,IACR,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,eAAe,CAAC,EAC5C,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,EAChD,IAAI,EAAC,sBAAsB,EAC3B,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,EAC/B,MAAM,EAAC,4BAA4B,EACnC,QAAQ,EAAE,eAAe,CAAC,cAAc,CAAC,EACzC,OAAO,EAAE,KAAK,CAAC,oBAAoB,EAAE,CAAC;gCACpC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,UAAU;gCAC5B,WAAW,EAAE,GAAG,CAAC,WAAW;6BAC7B,CAAC,GACF,EAED,GAAG,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACxC,KAAC,KAAK,IACJ,IAAI,EAAC,MAAM,EACX,QAAQ,uBACI,2BAA2B,EACvC,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,6BAA6B,EAAE;gCACzD,KAAK,EAAE,GAAG,CAAC,uBAAuB,CAAC,MAAM;6BAC1C,CAAC,GACF,CACH,CAAC,CAAC,CAAC,IAAI,EAER,KAAC,IAAI,CAAC,IAAI,IACR,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,KAC1C,OAAO,CAAC,WAAW,CAAC,YAExB,KAAC,KAAK,IACJ,EAAE,EAAE,eAAe,CAAC,WAAW,CAAC,EAChC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,gBACX,CAAC,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,iBACvC,yBAAyB,EACrC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;oCAClB,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gCAC5C,CAAC,EACD,MAAM,EAAE,GAAG,CAAC,IAAI,GAChB,GACQ,EAEZ,KAAC,IAAI,CAAC,IAAI,IACR,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,KAChD,OAAO,CAAC,iBAAiB,CAAC,YAE9B,KAAC,KAAK,CAAC,QAAQ,IACb,EAAE,EAAE,eAAe,CAAC,iBAAiB,CAAC,EACtC,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,gBACjB,CAAC,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,iBAC7C,+BAA+B,EAC3C,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;oCAClB,GAAG,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gCAClD,CAAC,EACD,MAAM,EAAE,GAAG,CAAC,IAAI,GAChB,GACQ,EAQZ,KAAC,IAAI,CAAC,IAAI,IACR,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,KAC1C,OAAO,CAAC,WAAW,CAAC,YAExB,KAAC,KAAK,IACJ,EAAE,EAAE,eAAe,CAAC,WAAW,CAAC,EAChC,SAAS,EAAC,SAAS,EACnB,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,KACnB,CAAC,KAAK,CAAC,oBAAoB,KAAK,SAAS;oCAC3C,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE;oCACrC,CAAC,CAAC,EAAE,CAAC,gBACK,CAAC,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,iBACvC,yBAAyB,EACrC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;oCAClB,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gCAC5C,CAAC,EACD,MAAM,EAAE,GAAG,CAAC,IAAI,GAChB,GACQ,EAEZ,KAAC,SAAS,IACR,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,EACjD,IAAI,EAAC,sBAAsB,EAC3B,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,EAAE,EACV,MAAM,EAAC,4BAA4B,EACnC,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,EACrC,OAAO,EAAE,KAAK,CAAC,oBAAoB,EAAE,CAAC;gCACpC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ;gCAC1B,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE;oCACpB,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;oCAC/B,GAAG,CAAC,QAAQ,EAAE,CAAC;gCACjB,CAAC;6BACF,CAAC,GACF,EAUF,KAAC,SAAS,IACR,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,EACjD,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,EAChD,IAAI,EAAC,gBAAgB,EACrB,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,EAC/B,MAAM,EAAC,4BAA4B,EACnC,QAAQ,EAAE,eAAe,CAAC,cAAc,CAAC,EACzC,OAAO,EACL,KAAK,CAAC,oBAAoB,KAAK,SAAS,CAAC,CAAC,CAAC,CACzC,6BAAiB,iCAAiC,YAC/C,KAAK,CAAC,oBAAoB,CAAC;oCAC1B,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ;oCAC1B,WAAW,EAAE,CAAC,QAAQ,EAAE,EAAE;wCACxB,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;oCAC5B,CAAC;oCACD,IAAI,EAAE,GAAG,CAAC,QAAQ;iCACnB,CAAC,GACE,CACP,CAAC,CAAC,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,CACjC,6BAAiB,iCAAiC,YAChD,KAAC,cAAc,IACb,KAAK,EAAE;wCACL,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;wCACtC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;wCACtC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;4CAC9C,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE;4CAChD,CAAC,CAAC,EAAE,CAAC;qCACR,EACD,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;wCACjB,yDAAyD;wCACzD,sDAAsD;wCACtD,GAAG,CAAC,WAAW,CAAC;4CACd,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ;4CACtB,GAAG,EAAE,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;4CAChD,GAAG,EAAE,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;4CAChD,aAAa,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;yCAClC,CAAC,CAAC;wCACH,GAAG,CAAC,QAAQ,EAAE,CAAC;oCACjB,CAAC,GACD,GACE,CACP,CAAC,CAAC,CAAC,SAAS,GAEf,EAID,KAAK,CAAC,WAAW,KAAK,SAAS,IAAI,UAAU,CAAC,CAAC,CAAC,CAC/C,8BACE,KAAC,OAAO,KAAG,EACX,KAAC,UAAU,CAAC,KAAK,IAAC,KAAK,EAAE,CAAC,YACvB,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,GACnB,EACnB,cAAK,EAAE,EAAE,eAAe,CAAC,YAAY,CAAC,YACnC,KAAK,CAAC,WAAW,IAAI,CACpB,KAAC,eAAe,IAAC,IAAI,EAAC,aAAa,EAAC,UAAU,EAAC,SAAS,GAAG,CAC5D,GACG,EACL,GAAG,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAC/B,KAAC,UAAU,CAAC,IAAI,IAAC,IAAI,EAAC,QAAQ,iBAAa,gCAAgC,YACxE,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,GAChC,CACnB,CAAC,CAAC,CAAC,IAAI,IACP,CACJ,CAAC,CAAC,CAAC,IAAI,EAIP,OAAO,EAER,KAAC,OAAO,KAAG,EAEX,KAAC,IAAI,CAAC,IAAI,cACR,KAAC,QAAQ,IACP,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,iBACjB,6BAA6B,EACzC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;oCAClB,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gCAClD,CAAC,YAEA,CAAC,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,GAC9B,GACD,EAEX,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CACtB,KAAC,IAAI,CAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,YAClD,KAAC,WAAW,IACV,GAAG,EAAE,CAAC,EACN,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,aAAa,gBACnB,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,iBAClC,yBAAyB,EACrC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;oCAClB,GAAG,CAAC,QAAQ,CAAC,eAAe,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC;gCAC/C,CAAC,GACD,GACQ,CACb,CAAC,CAAC,CAAC,IAAI,EAER,KAAC,IAAI,CAAC,IAAI,cACR,KAAC,QAAQ,IACP,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,aAAa,iBACrB,kCAAkC,EAC9C,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;oCAClB,GAAG,CAAC,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gCACtD,CAAC,YAEA,CAAC,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,GAClC,GACD,IACP,EAEN,GAAG,CAAC,OAAO,EAAE,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC,CACvC,KAAC,UAAU,IACT,MAAM,EAAC,2BAA2B,EAClC,OAAO,EAAE,CAAC,CAAC,kBAAkB,CAAC,qBAAqB,EAAE;wBACnD,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM;qBAC/C,CAAC,GACF,CACH,CAAC,CAAC,CAAC,IAAI,EAQP,GAAG,CAAC,OAAO,EAAE,IAAI,KAAK,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CACvE,KAAC,UAAU,IACT,MAAM,EAAC,yBAAyB,EAChC,KAAK,EAAE,QAAQ,CAAC;wBACd,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI;wBAC5B,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM;wBAChC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM;wBAChC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO;wBAClC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ;qBACrC,CAAC,GACF,CACH,CAAC,CAAC,CAAC,IAAI,EAEP,GAAG,CAAC,SAAS,KAAK,SAAS;oBAC5B,GAAG,CAAC,SAAS,KAAK,IAAI;oBACtB,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CACjC,KAAC,UAAU,IACT,MAAM,EAAC,8BAA8B,EACrC,MAAM,EAAE,GAAG,CAAC,SAAS,GACrB,CACH,CAAC,CAAC,CAAC,IAAI,EAWR,KAAC,QAAQ,IAAC,IAAI,EAAE,eAAe,EAAE,EAAE,MAAM,EAAC,0BAA0B,YACpE,MAAC,IAAI,IAAC,QAAQ,QAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAC,YAAY,aAChD,KAAC,WAAW,IACV,IAAI,EAAE,GAAG,CAAC,WAAW,EACrB,IAAI,EAAC,SAAS,EACd,IAAI,EAAC,OAAO,EACZ,OAAO,EAAE,GAAG,CAAC,UAAU,EACvB,MAAM,EAAC,2BAA2B,oBACnB,MAAM,2BACC,8DAAyD,EAC/E,OAAO,EAAE,GAAG,CAAC,OAAO,YAEnB,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,YAAY,GAC5D,EAUb,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,IAAI,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,CAC3D,KAAC,MAAM,IACL,IAAI,EAAC,MAAM,EACX,IAAI,EAAC,OAAO,EACZ,KAAK,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,iBACf,gCAAgC,oBAC7B,MAAM,2BACC,8FAAyF,EAC/G,OAAO,EAAE,GAAG,EAAE;oCACZ,WAAW,CAAC,aAAa,CAAC,CAAC;gCAC7B,CAAC,YAEA,CAAC,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,GACvC,CACV,CAAC,CAAC,CAAC,IAAI,EAER,MAAC,IAAI,IAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,QAAC,KAAK,EAAC,YAAY,aAC5C,KAAC,WAAW,IACV,IAAI,EAAE,GAAG,CAAC,QAAQ,EAClB,IAAI,EAAC,MAAM,EACX,OAAO,EAAE,GAAG,CAAC,MAAM,EACnB,MAAM,EAAC,wBAAwB,oBAChB,MAAM,2BACC,8DAAyD,EAC/E,OAAO,EAAE,GAAG,CAAC,IAAI,YAEhB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC,kBAAkB,CAAC,WAAW,CAAC,GACtE,EAEb,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CACX,KAAC,UAAU,CAAC,IAAI,IAAC,IAAI,EAAC,SAAS,iBAAa,yBAAyB,YAClE,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,GACnB,CACnB,CAAC,CAAC,CAAC,IAAI,IACH,IACF,GACI,IACN,GACG,CACb,CAAC;AACJ,CAAC"}
|
package/dist/default/index.d.ts
CHANGED
|
@@ -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,
|
|
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,
|
|
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"}
|
package/dist/default/index.js
CHANGED
|
@@ -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,
|
|
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,
|
|
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
package/manifest.json
CHANGED
package/nav-manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stapel/listings-react",
|
|
3
|
-
"version": "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.
|
|
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",
|
|
@@ -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
|
-
* ──
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
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 {
|
|
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
|
-
*
|
|
139
|
-
*
|
|
140
|
-
* the
|
|
141
|
-
*
|
|
142
|
-
*
|
|
143
|
-
*
|
|
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
|
|
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:
|
|
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
|
-
*
|
|
174
|
-
*
|
|
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={
|
|
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
|
-
{/*
|
|
792
|
-
|
|
793
|
-
{
|
|
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
|
package/src/default/index.ts
CHANGED
|
@@ -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 {
|