toga-ai 1.0.350 → 1.0.351

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.
@@ -3,5 +3,5 @@
3
3
  | Doc | Summary | Files |
4
4
  |-----|---------|-------|
5
5
  | [TOGa Supply (toga2-supply) Architecture](architecture.md) | `toga2-supply` is the **React + Vite frontend** for TOGa Supply — warehouse fulfillment tooling (shipment selection, fulfill & ship against carrier APIs, NetSui | toga2-supply/src/api/toga.ts, toga2-supply/src/pages/ShipmentItems/view/ShipmentItemsPage.tsx, toga2-supply/src/pages/EditShipment/view/EditShipmentPage.tsx, toga2-supply/src/pages/EditShipment/api/UpdateShipmentApi.ts, toga2-supply/src/pages/Shipments/view/components/ShipmentsCardTableForm/ShipmentsCardTableForm.tsx |
6
- | [Fulfill & Ship](features/fulfill-and-ship.md) | Fulfill & Ship lets a warehouse user select sales-order line items, enter serials, pick a carrier/method, and in one action: create the Item Fulfillment records | toga2-supply/src/pages/ShipmentItems/view/ShipmentItemsPage.tsx, toga2-supply/src/pages/EditShipment/view/EditShipmentPage.tsx, toga2-supply/src/pages/EditShipment/view/components/forms/EditShipmentForm.tsx, toga2-supply/src/pages/EditShipment/view/components/SelectedShipmentItemsTable.tsx, toga2-supply/src/pages/EditShipment/view/helpers/ShipmentDetailsForm/renderEditShipmentFormInput.tsx, toga2-supply/src/pages/EditShipment/viewModel/FIELDS/DUMMYUPDATESHIPMENTFIELDS.json, toga2-supply/src/pages/EditShipment/helpers/ShipmentDetailsForm/renderEditShipmentFormInput.tsx, toga2-supply/tailwind.config.cjs, toga2-supply/src/pages/EditShipment/view/modals/ReturnShippingModal.tsx, toga2-supply/src/components/ui/BaseInput/BaseInput.tsx, toga2-supply/src/pages/EditShipment/api/UpdateShipmentApi.ts, toga2-supply/src/pages/EditShipment/helpers/ShipmentDetailsForm/formatShipmentData.ts, toga2-supply/src/pages/EditShipment/types.ts, toga2-supply/src/pages/Shipments/view/ShipmentsPage.tsx, toga2-supply/src/pages/Shipments/view/components/ShipmentsCardTableForm/ShipmentsCardTableForm.tsx, toga2-supply/src/pages/Shipments/api/ShipmentsApi.ts, toga2-supply/src/pages/Shipments/types.ts, toga2-supply/src/pages/FulfilledShipments/view/FulfilledShipmentsPage.tsx, toga2-supply/src/components/ui/CardTable/CardTable.tsx, toga2-supply/src/components/ui/CardTable/types.ts, toga2-supply/src/assets/pen-line.svg, _underscore/Model/Client/ItemFulfillment.php, _underscore/Trait/Netsuite/ItemFulfillment.php, _underscore/Component/Library/Carriers/Ups/Ups.php |
6
+ | [Fulfill & Ship](features/fulfill-and-ship.md) | Fulfill & Ship lets a warehouse user select sales-order line items, enter serials, pick a carrier/method, and in one action: create the Item Fulfillment records | toga2-supply/src/pages/ShipmentItems/view/ShipmentItemsPage.tsx, toga2-supply/src/pages/EditShipment/view/EditShipmentPage.tsx, toga2-supply/src/pages/EditShipment/view/components/forms/EditShipmentForm.tsx, toga2-supply/src/pages/EditShipment/view/components/SelectedShipmentItemsTable.tsx, toga2-supply/src/pages/EditShipment/view/helpers/ShipmentDetailsForm/renderEditShipmentFormInput.tsx, toga2-supply/src/pages/EditShipment/viewModel/FIELDS/DUMMYUPDATESHIPMENTFIELDS.json, toga2-supply/src/pages/EditShipment/helpers/ShipmentDetailsForm/renderEditShipmentFormInput.tsx, toga2-supply/tailwind.config.cjs, toga2-supply/src/pages/EditShipment/view/modals/ReturnShippingModal.tsx, toga2-supply/src/styles/index.scss, toga2-supply/src/components/ui/BaseInput/BaseInput.tsx, toga2-supply/src/pages/EditShipment/api/UpdateShipmentApi.ts, toga2-supply/src/pages/EditShipment/helpers/ShipmentDetailsForm/formatShipmentData.ts, toga2-supply/src/pages/EditShipment/types.ts, toga2-supply/src/pages/Shipments/view/ShipmentsPage.tsx, toga2-supply/src/pages/Shipments/view/components/ShipmentsCardTableForm/ShipmentsCardTableForm.tsx, toga2-supply/src/pages/Shipments/api/ShipmentsApi.ts, toga2-supply/src/pages/Shipments/types.ts, toga2-supply/src/pages/FulfilledShipments/view/FulfilledShipmentsPage.tsx, toga2-supply/src/components/ui/CardTable/CardTable.tsx, toga2-supply/src/components/ui/CardTable/types.ts, toga2-supply/src/assets/pen-line.svg, _underscore/Model/Client/ItemFulfillment.php, _underscore/Trait/Netsuite/ItemFulfillment.php, _underscore/Component/Library/Carriers/Ups/Ups.php |
7
7
  | [AWS Amplify Build & Deploy (non-prod environments)](workflows/amplify-build-and-deploy.md) | How `toga2-supply` (React + Vite) builds and deploys on **AWS Amplify**. | toga2-supply/amplify.yml, toga2-supply/.gitattributes, toga2-supply/.github/workflows/sync-stage-environments.yml, toga2-supply/.env.qc-security |
@@ -18,6 +18,7 @@ files:
18
18
  - toga2-supply/src/pages/EditShipment/helpers/ShipmentDetailsForm/renderEditShipmentFormInput.tsx
19
19
  - toga2-supply/tailwind.config.cjs
20
20
  - toga2-supply/src/pages/EditShipment/view/modals/ReturnShippingModal.tsx
21
+ - toga2-supply/src/styles/index.scss
21
22
  - toga2-supply/src/components/ui/BaseInput/BaseInput.tsx
22
23
  - toga2-supply/src/pages/EditShipment/api/UpdateShipmentApi.ts
23
24
  - toga2-supply/src/pages/EditShipment/helpers/ShipmentDetailsForm/formatShipmentData.ts
@@ -187,6 +188,27 @@ bare string** — see the gotcha below before wiring a new select field.
187
188
  (`onBlur` when `field.isCurrency`). Return modal (`ReturnShippingModal.tsx`): compact selects
188
189
  vertically centered; Carrier Account # widened to `w-[172px]` to match Carrier.
189
190
 
191
+ ### Edit Return Label modal — searchable Addressee combobox + discard guard (2026-07-15)
192
+
193
+ `ReturnShippingModal.tsx`:
194
+ - **Addressee is a searchable combobox built on a native `<input list>` + `<datalist>`** of
195
+ warehouse/location options — typing filters the list (Chromium does a substring "contains" match;
196
+ Firefox only prefix-matches) and **custom free text is still allowed**; selecting a known option
197
+ prefills the address via `applyWarehouse`. Prefer this native pattern over react-select when free
198
+ text plus suggestions are both wanted — but mind the two gotchas below.
199
+ - **Backdrop-click discard guard.** `BaseModal` calls its `onClose` prop on backdrop click, which
200
+ would silently discard unsaved edits. Pass a **guarded** handler to `BaseModal`'s `onClose`
201
+ (`if (formMethods.formState.isDirty) return; onClose();`) so an accidental outside click can't
202
+ drop a dirty form, while **Cancel and the header X still call the real `onClose`** to close/discard
203
+ explicitly. Reuse this pattern for any BaseModal wrapping an editable form.
204
+
205
+ ### Shared checkbox restyled to the Figma design-system spec (2026-07-15)
206
+
207
+ `BaseInput.tsx`'s checkbox now matches the Figma checkbox component: **16px** (was 20px),
208
+ `rounded-sm`, unchecked border `navy-300`, checked fill `supply-blue-400` (`#3F5DCA`, the primary),
209
+ 12px check glyph. This is the **shared** checkbox, so the change applies **app-wide**, not just to
210
+ the shipment forms — audit other consumers when touching it.
211
+
190
212
  ## Planned direction — "Fulfill & Ship" from an existing Item Fulfillment (future, Eric)
191
213
 
192
214
  A **third entry mode** is planned (distinct from Select-Items-create and the pencil-edit): a
@@ -221,7 +243,27 @@ the call 403s and returns no label.
221
243
 
222
244
  ## Gotchas / known issues
223
245
 
224
- - **⚠ Tailwind does NOT scan the field-config JSON — a class used ONLY in `viewModel/FIELDS/*.json`
246
+ - **⚠ Native `<datalist>` renders its OWN dropdown arrow, un-hideable by Tailwind.** An
247
+ `<input list>` combobox (the Edit Return Label Addressee) shows a **second dark arrow** (the
248
+ webkit calendar-picker indicator) that a Tailwind arbitrary variant can't reliably hide. Kill it
249
+ with a **real global CSS rule** in the source stylesheet
250
+ `src/styles/index.scss` (imported by `main.tsx`):
251
+ `input[list]::-webkit-calendar-picker-indicator { display: none !important; }`.
252
+ **Edit `index.scss`, NOT `index.css`** — `index.css` is compiled output and will be overwritten.
253
+ Also set **`autoComplete="off"`** on the input or the browser's address-autofill popup
254
+ ("Saved data / Manage personal info") overlaps and fights the datalist.
255
+ - **⚠ A `className` template literal must keep the trailing space before `${...}`.** `border ${cond
256
+ ? a : b}` is correct; `border${cond ? a : b}` concatenates into an invalid single class
257
+ (e.g. `borderborder-navy-300`) and the utility silently no-ops. Concrete failure: the `BaseInput`
258
+ checkbox's unchecked border disappeared because the space was dropped. Watch this whenever
259
+ conditional classes are appended to a static base class.
260
+ - **⚠ `justify-between` + `clamp()` gaps are frozen when the container is a FIXED width.** The Update
261
+ Info field row uses `gap-x-[clamp(2px,1vw,50px)]` with `justify-between`, but the card was a fixed
262
+ `w-[1820px]`, so `justify-between` distributed columns across a constant width and the gaps never
263
+ changed on resize. Fix: make the card `w-full max-w-[1820px]` and the form section `w-full` so the
264
+ width tracks the viewport and the clamp'd gaps grow/shrink with it. Note `justify-between` does
265
+ **not** cap the max gap at 50px on very wide screens — the `clamp` only *floors* at 2px; the max
266
+ applies until columns are pushed to the edges. (`EditShipmentPage.tsx`.) — a class used ONLY in `viewModel/FIELDS/*.json`
225
267
  is silently inert.** The config-driven forms author Tailwind utility classes inside the field JSON
226
268
  (e.g. `DUMMYUPDATESHIPMENTFIELDS.json`), but `tailwind.config.cjs` `content` globs only scan
227
269
  `./src/**/*.{js,ts,jsx,tsx}` (+ `index.html` + toga-blox dist) — **not `.json`**. So a class used
@@ -417,6 +459,18 @@ not the base `_Model_Client_ItemFulfillment`. Tested with GroWrk; UPS support wa
417
459
  for Compass and is not yet in prod.
418
460
 
419
461
  ## Change history
462
+ - 2026-07-15 — TRUE-79191: made the Edit Return Label **Addressee a searchable combobox** (native
463
+ `<input list>` + `<datalist>`, filters + allows custom text, prefills via `applyWarehouse`); added a
464
+ **backdrop-click discard guard** (guarded `BaseModal onClose` on `formState.isDirty`); restyled the
465
+ **shared `BaseInput` checkbox** to the Figma spec (16px, navy-300 border, `supply-blue-400` fill,
466
+ app-wide). Documented four durable gotchas: native `<datalist>`'s un-hideable arrow (hide via a
467
+ real global rule in `src/styles/index.scss`, not the compiled `index.css`) + `autoComplete="off"`
468
+ to stop autofill overlap; the `className` **trailing-space-before-`${...}`** footgun (dropped space
469
+ → invalid concatenated class → silent no-op, killed the checkbox border); and `justify-between` +
470
+ `clamp()` **gaps frozen by a fixed-width card** (fix: `w-full max-w-[1820px]` so width tracks the
471
+ viewport). Remaining Figma polish (5-col address grid, Signature default object, declared-cost
472
+ 2-decimal rehydrate, Clear All wiring, residential alignment, footer/divider spacing) was cosmetic
473
+ — no doc change. (mhammontree)
420
474
  - 2026-07-15 — TRUE-79191: unified the **dropdown chevron glyph** across the compact selects — added a
421
475
  `CompactDropdownIndicator` (FA `chevronDown`) to `BaseInput` and wired it into both react-select
422
476
  `components` blocks **only when `compact` is true**, so the react-select caret matches the native
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "toga-ai",
3
- "version": "1.0.350",
3
+ "version": "1.0.351",
4
4
  "description": "TOGA Technology Team Claude Knowledge System — shared AI coding harness with skills, knowledge base CLI, and project installer for Claude Code.",
5
5
  "keywords": [
6
6
  "claude",