@12-apps/ui 6.82.0 → 6.84.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/components-catalog.md +7 -0
- package/dist/_internal/components/data-display/Avatar/Avatar.js +3 -3
- package/dist/_internal/components/data-display/Avatar/Avatar.view.js +2 -2
- package/dist/_internal/components/data-display/Carousel/Carousel.chrome.js +3 -3
- package/dist/_internal/components/data-display/Carousel/Carousel.js +5 -5
- package/dist/_internal/components/data-display/Carousel/Carousel.parts.js +2 -2
- package/dist/_internal/components/data-display/Chart/Chart.js +3 -3
- package/dist/_internal/components/data-display/Chart/SpecChart.js +6 -6
- package/dist/_internal/components/data-display/Chart/chart-renderers.js +2 -2
- package/dist/_internal/components/data-display/Chart/chart-spec.js +2 -2
- package/dist/_internal/components/data-display/DataGrid/DataGrid.js +2 -2
- package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +20 -19
- package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +21 -20
- package/dist/_internal/components/data-display/DataViews/base-list-card.js +2 -2
- package/dist/_internal/components/data-display/DataViews/data-views-day-input.js +7 -3
- package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +2 -2
- package/dist/_internal/components/data-display/DataViews/data-views-empty.js +1 -1
- package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +5 -4
- package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +3 -3
- package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +17 -16
- package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +7 -6
- package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +5 -4
- package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +6 -5
- package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +4 -3
- package/dist/_internal/components/data-display/DataViews/data-views-range-reset.js +9 -0
- package/dist/_internal/components/data-display/DataViews/data-views-range-reset.js.map +1 -0
- package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +4 -4
- package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +3 -3
- package/dist/_internal/components/data-display/DataViews/data-views-writers.js +3 -1
- package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +2 -2
- package/dist/_internal/components/data-display/FleetMap/FleetBody.js +8 -8
- package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +7 -7
- package/dist/_internal/components/data-display/FleetMap/FleetMap.fixtures.js +1 -1
- package/dist/_internal/components/data-display/FleetMap/FleetMap.js +9 -9
- package/dist/_internal/components/data-display/MapPreview/MapControlBar.js +3 -3
- package/dist/_internal/components/data-display/MapPreview/MapLayers.js +4 -4
- package/dist/_internal/components/data-display/MapPreview/MapMarkers.js +3 -3
- package/dist/_internal/components/data-display/MapPreview/MapPreview.helpers.js +2 -2
- package/dist/_internal/components/data-display/MapPreview/MapPreview.js +6 -6
- package/dist/_internal/components/data-display/index.js +29 -29
- package/dist/_internal/components/form/CepField/CepField.js +1 -1
- package/dist/_internal/components/form/DateRangePicker/DateRangePicker.hooks.js +3 -3
- package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +5 -5
- package/dist/_internal/components/form/DateRangePicker/DateRangePicker.range.js +2 -2
- package/dist/_internal/components/form/DateRangePicker/DateRangePickerFields.js +3 -3
- package/dist/_internal/components/form/InputOTP/InputOTP.hooks.js +1 -1
- package/dist/_internal/components/form/InputOTP/InputOTP.js +2 -2
- package/dist/_internal/components/form/index.js +8 -8
- package/dist/_internal/components/form/total-form/Fields/CepField.js +2 -2
- package/dist/_internal/components/form/total-form/Fields/TextField.js +1 -1
- package/dist/_internal/components/form/total-form/Fields/index.js +4 -4
- package/dist/_internal/components/index.js +37 -37
- package/dist/_internal/en-US.data-display.js +1 -1
- package/dist/_internal/pt-BR.data-display.js +1 -1
- package/dist/_internal/user-avatar/user-avatar.js +4 -4
- package/dist/charts.js +11 -11
- package/dist/{chunk-HF2WLLGH.js → chunk-2XI4R6UO.js} +2 -2
- package/dist/{chunk-HF2WLLGH.js.map → chunk-2XI4R6UO.js.map} +1 -1
- package/dist/{chunk-GYFKIPR2.js → chunk-4PUCT3RX.js} +2 -2
- package/dist/{chunk-JQSF3CUR.js → chunk-6HMDUUVJ.js} +2 -1
- package/dist/{chunk-JQSF3CUR.js.map → chunk-6HMDUUVJ.js.map} +1 -1
- package/dist/{chunk-THD3N4BJ.js → chunk-6ONQTXFM.js} +24 -5
- package/dist/chunk-6ONQTXFM.js.map +1 -0
- package/dist/{chunk-C2I7NQC4.js → chunk-74KCGLOU.js} +2 -2
- package/dist/{chunk-4J62V5OE.js → chunk-7YJYIMWP.js} +2 -2
- package/dist/{chunk-MT74NRLY.js → chunk-C2OX3C7L.js} +4 -4
- package/dist/{chunk-62XVHRTX.js → chunk-D7SOXI2K.js} +70 -21
- package/dist/chunk-D7SOXI2K.js.map +1 -0
- package/dist/{chunk-BO6IMK5P.js → chunk-DPHSJLMN.js} +2 -2
- package/dist/{chunk-7XSCEHGA.js → chunk-EOQ6EKTS.js} +7 -7
- package/dist/{chunk-4OTJ66ID.js → chunk-EXTES7LP.js} +15 -4
- package/dist/chunk-EXTES7LP.js.map +1 -0
- package/dist/{chunk-4IVEBBF6.js → chunk-FYJDI5BW.js} +4 -3
- package/dist/{chunk-4IVEBBF6.js.map → chunk-FYJDI5BW.js.map} +1 -1
- package/dist/{chunk-A5U7HEBI.js → chunk-GNDIVKWF.js} +4 -2
- package/dist/chunk-GNDIVKWF.js.map +1 -0
- package/dist/{chunk-XKPV52CG.js → chunk-GPTNZ57P.js} +2 -2
- package/dist/{chunk-ZGAOA7LN.js → chunk-H56CRMCM.js} +6 -6
- package/dist/{chunk-AMLHEKSV.js → chunk-HI7JPDD6.js} +5 -5
- package/dist/{chunk-JK3QB7MO.js → chunk-I54LHHZS.js} +2 -2
- package/dist/{chunk-GLAAX5JJ.js → chunk-I5NTADBO.js} +2 -1
- package/dist/{chunk-GLAAX5JJ.js.map → chunk-I5NTADBO.js.map} +1 -1
- package/dist/{chunk-LCGK22QQ.js → chunk-IKXCAYFH.js} +5 -5
- package/dist/{chunk-MLGAGZJ3.js → chunk-ILNAPS44.js} +8 -7
- package/dist/chunk-ILNAPS44.js.map +1 -0
- package/dist/{chunk-D22FGMGU.js → chunk-JIAIPOEV.js} +2 -2
- package/dist/{chunk-HQCZT6TO.js → chunk-JVOEVTCZ.js} +5 -5
- package/dist/{chunk-76IHYINM.js → chunk-KEBYZ2MO.js} +16 -9
- package/dist/chunk-KEBYZ2MO.js.map +1 -0
- package/dist/{chunk-JJNY5MZL.js → chunk-KG7OTJ26.js} +2 -2
- package/dist/{chunk-2ZMR3TZU.js → chunk-L6UTYEUS.js} +3 -3
- package/dist/{chunk-WWB43LWU.js → chunk-LOGSJH2Q.js} +2 -2
- package/dist/{chunk-YJPBNIEM.js → chunk-MGFTHOPG.js} +2 -2
- package/dist/{chunk-RB3R6BJL.js → chunk-O4G7QKDU.js} +2 -2
- package/dist/{chunk-DYHOBKPU.js → chunk-OA6T2ME3.js} +5 -5
- package/dist/{chunk-U5FOJBLG.js → chunk-OOLES6RR.js} +14 -2
- package/dist/chunk-OOLES6RR.js.map +1 -0
- package/dist/{chunk-YHKHHSZH.js → chunk-OQ554425.js} +3 -3
- package/dist/{chunk-54OJAOXC.js → chunk-PDSZN26U.js} +2 -2
- package/dist/{chunk-MNNIOQTQ.js → chunk-PGVGCDPD.js} +3 -3
- package/dist/{chunk-RDRXTH47.js → chunk-PWXDMP7G.js} +10 -6
- package/dist/chunk-PWXDMP7G.js.map +1 -0
- package/dist/{chunk-6ATXOJVQ.js → chunk-QADTI63U.js} +4 -4
- package/dist/{chunk-UETHX57J.js → chunk-R6L376KR.js} +21 -7
- package/dist/chunk-R6L376KR.js.map +1 -0
- package/dist/{chunk-SEUJNFOD.js → chunk-RLDTV5I2.js} +2 -2
- package/dist/{chunk-4UCXJYOO.js → chunk-RUQNKOSP.js} +4 -4
- package/dist/chunk-RUQNKOSP.js.map +1 -0
- package/dist/{chunk-7RG37FVT.js → chunk-RXKFPXVH.js} +29 -2
- package/dist/chunk-RXKFPXVH.js.map +1 -0
- package/dist/{chunk-KSJBFT4G.js → chunk-SGAHME6W.js} +3 -3
- package/dist/{chunk-SB2SEGR6.js → chunk-TIM4PXWN.js} +3 -3
- package/dist/{chunk-D4LMRSY7.js → chunk-UIWVSZ6I.js} +2 -2
- package/dist/{chunk-SMANO5OD.js → chunk-V2UJEICC.js} +3 -3
- package/dist/chunk-V2UJEICC.js.map +1 -0
- package/dist/{chunk-XATRYJ4Q.js → chunk-VQBY73QH.js} +4 -4
- package/dist/{chunk-SYERREN5.js → chunk-W2JYXZC2.js} +4 -4
- package/dist/{chunk-QCNUMOTL.js → chunk-YC2QYRNE.js} +9 -3
- package/dist/chunk-YC2QYRNE.js.map +1 -0
- package/dist/chunk-YOPMXGHY.js +23 -0
- package/dist/chunk-YOPMXGHY.js.map +1 -0
- package/dist/{chunk-QK3XXPBA.js → chunk-YWJCMGTE.js} +2 -2
- package/dist/{chunk-UQ6SAIX7.js → chunk-Z47SYKRX.js} +2 -2
- package/dist/data-display/Avatar.js +3 -3
- package/dist/data-display/CardKit.js +3 -3
- package/dist/data-display/Carousel.js +5 -5
- package/dist/data-display/Chart.js +11 -11
- package/dist/data-display/DataGrid.js +2 -2
- package/dist/data-display/DataViews.js +25 -24
- package/dist/data-display/FleetMap.js +9 -9
- package/dist/data-display/MapPreview.js +6 -6
- package/dist/en-US.js +1 -1
- package/dist/form/CepField.js +1 -1
- package/dist/form/DateRangePicker.js +5 -5
- package/dist/form/InputOTP.js +2 -2
- package/dist/form/total-form.js +4 -4
- package/dist/locales.js +2 -2
- package/dist/pt-BR.js +1 -1
- package/dist/types/components/data-display/DataViews/data-views-copy.d.ts +6 -0
- package/dist/types/components/data-display/DataViews/data-views-copy.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-day-input.d.ts +32 -5
- package/dist/types/components/data-display/DataViews/data-views-day-input.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-filter-panel.d.ts +6 -0
- package/dist/types/components/data-display/DataViews/data-views-filter-panel.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-grid-parts.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-inline-bar.d.ts +3 -1
- package/dist/types/components/data-display/DataViews/data-views-inline-bar.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-more-filters.d.ts +3 -1
- package/dist/types/components/data-display/DataViews/data-views-more-filters.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-range-pill.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-range-reset.d.ts +16 -0
- package/dist/types/components/data-display/DataViews/data-views-range-reset.d.ts.map +1 -0
- package/dist/types/components/data-display/DataViews/data-views-writers.d.ts +13 -0
- package/dist/types/components/data-display/DataViews/data-views-writers.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/use-data-views-state.d.ts +4 -0
- package/dist/types/components/data-display/DataViews/use-data-views-state.d.ts.map +1 -1
- package/dist/types/components/form/CepField/CepField.d.ts +2 -1
- package/dist/types/components/form/CepField/CepField.d.ts.map +1 -1
- package/dist/types/components/form/CepField/CepField.types.d.ts +24 -0
- package/dist/types/components/form/CepField/CepField.types.d.ts.map +1 -1
- package/dist/types/components/form/InputOTP/InputOTP.d.ts.map +1 -1
- package/dist/types/components/form/InputOTP/InputOTP.hooks.d.ts.map +1 -1
- package/dist/types/components/form/total-form/Fields/CepField.d.ts +11 -1
- package/dist/types/components/form/total-form/Fields/CepField.d.ts.map +1 -1
- package/dist/types/components/form/total-form/Fields/TextField.d.ts +22 -1
- package/dist/types/components/form/total-form/Fields/TextField.d.ts.map +1 -1
- package/dist/types/components/form/total-form/Fields/index.d.ts +1 -1
- package/dist/types/components/form/total-form/Fields/index.d.ts.map +1 -1
- package/dist/types/components/form/total-form/index.d.ts +1 -1
- package/dist/types/components/form/total-form/index.d.ts.map +1 -1
- package/dist/types/en-US.data-display.d.ts.map +1 -1
- package/dist/types/pt-BR.data-display.d.ts.map +1 -1
- package/dist/user-avatar.js +4 -4
- package/package.json +1 -1
- package/src/components/data-display/DataViews/data-views-copy.ts +6 -0
- package/src/components/data-display/DataViews/data-views-day-input.tsx +134 -38
- package/src/components/data-display/DataViews/data-views-empty.tsx +1 -1
- package/src/components/data-display/DataViews/data-views-filter-panel.tsx +8 -2
- package/src/components/data-display/DataViews/data-views-grid-parts.tsx +3 -1
- package/src/components/data-display/DataViews/data-views-inline-bar.tsx +7 -0
- package/src/components/data-display/DataViews/data-views-more-filters.tsx +4 -1
- package/src/components/data-display/DataViews/data-views-range-pill.tsx +11 -3
- package/src/components/data-display/DataViews/data-views-range-reset.ts +34 -0
- package/src/components/data-display/DataViews/data-views-writers.ts +24 -1
- package/src/components/data-display/DataViews/use-data-views-state.ts +6 -1
- package/src/components/form/CepField/CepField.md +29 -2
- package/src/components/form/CepField/CepField.tsx +44 -7
- package/src/components/form/CepField/CepField.types.ts +24 -0
- package/src/components/form/InputOTP/InputOTP.hooks.ts +48 -9
- package/src/components/form/InputOTP/InputOTP.md +6 -1
- package/src/components/form/InputOTP/InputOTP.tsx +40 -1
- package/src/components/form/total-form/Fields/CepField.tsx +16 -0
- package/src/components/form/total-form/Fields/TextField.tsx +64 -1
- package/src/components/form/total-form/Fields/index.ts +1 -1
- package/src/components/form/total-form/index.ts +1 -1
- package/src/en-US.data-display.ts +1 -0
- package/src/pt-BR.data-display.ts +1 -0
- package/dist/chunk-4OTJ66ID.js.map +0 -1
- package/dist/chunk-4UCXJYOO.js.map +0 -1
- package/dist/chunk-62XVHRTX.js.map +0 -1
- package/dist/chunk-76IHYINM.js.map +0 -1
- package/dist/chunk-7RG37FVT.js.map +0 -1
- package/dist/chunk-A5U7HEBI.js.map +0 -1
- package/dist/chunk-MLGAGZJ3.js.map +0 -1
- package/dist/chunk-QCNUMOTL.js.map +0 -1
- package/dist/chunk-RDRXTH47.js.map +0 -1
- package/dist/chunk-SMANO5OD.js.map +0 -1
- package/dist/chunk-THD3N4BJ.js.map +0 -1
- package/dist/chunk-U5FOJBLG.js.map +0 -1
- package/dist/chunk-UETHX57J.js.map +0 -1
- /package/dist/{chunk-GYFKIPR2.js.map → chunk-4PUCT3RX.js.map} +0 -0
- /package/dist/{chunk-C2I7NQC4.js.map → chunk-74KCGLOU.js.map} +0 -0
- /package/dist/{chunk-4J62V5OE.js.map → chunk-7YJYIMWP.js.map} +0 -0
- /package/dist/{chunk-MT74NRLY.js.map → chunk-C2OX3C7L.js.map} +0 -0
- /package/dist/{chunk-BO6IMK5P.js.map → chunk-DPHSJLMN.js.map} +0 -0
- /package/dist/{chunk-7XSCEHGA.js.map → chunk-EOQ6EKTS.js.map} +0 -0
- /package/dist/{chunk-XKPV52CG.js.map → chunk-GPTNZ57P.js.map} +0 -0
- /package/dist/{chunk-ZGAOA7LN.js.map → chunk-H56CRMCM.js.map} +0 -0
- /package/dist/{chunk-AMLHEKSV.js.map → chunk-HI7JPDD6.js.map} +0 -0
- /package/dist/{chunk-JK3QB7MO.js.map → chunk-I54LHHZS.js.map} +0 -0
- /package/dist/{chunk-LCGK22QQ.js.map → chunk-IKXCAYFH.js.map} +0 -0
- /package/dist/{chunk-D22FGMGU.js.map → chunk-JIAIPOEV.js.map} +0 -0
- /package/dist/{chunk-HQCZT6TO.js.map → chunk-JVOEVTCZ.js.map} +0 -0
- /package/dist/{chunk-JJNY5MZL.js.map → chunk-KG7OTJ26.js.map} +0 -0
- /package/dist/{chunk-2ZMR3TZU.js.map → chunk-L6UTYEUS.js.map} +0 -0
- /package/dist/{chunk-WWB43LWU.js.map → chunk-LOGSJH2Q.js.map} +0 -0
- /package/dist/{chunk-YJPBNIEM.js.map → chunk-MGFTHOPG.js.map} +0 -0
- /package/dist/{chunk-RB3R6BJL.js.map → chunk-O4G7QKDU.js.map} +0 -0
- /package/dist/{chunk-DYHOBKPU.js.map → chunk-OA6T2ME3.js.map} +0 -0
- /package/dist/{chunk-YHKHHSZH.js.map → chunk-OQ554425.js.map} +0 -0
- /package/dist/{chunk-54OJAOXC.js.map → chunk-PDSZN26U.js.map} +0 -0
- /package/dist/{chunk-MNNIOQTQ.js.map → chunk-PGVGCDPD.js.map} +0 -0
- /package/dist/{chunk-6ATXOJVQ.js.map → chunk-QADTI63U.js.map} +0 -0
- /package/dist/{chunk-SEUJNFOD.js.map → chunk-RLDTV5I2.js.map} +0 -0
- /package/dist/{chunk-KSJBFT4G.js.map → chunk-SGAHME6W.js.map} +0 -0
- /package/dist/{chunk-SB2SEGR6.js.map → chunk-TIM4PXWN.js.map} +0 -0
- /package/dist/{chunk-D4LMRSY7.js.map → chunk-UIWVSZ6I.js.map} +0 -0
- /package/dist/{chunk-XATRYJ4Q.js.map → chunk-VQBY73QH.js.map} +0 -0
- /package/dist/{chunk-SYERREN5.js.map → chunk-W2JYXZC2.js.map} +0 -0
- /package/dist/{chunk-QK3XXPBA.js.map → chunk-YWJCMGTE.js.map} +0 -0
- /package/dist/{chunk-UQ6SAIX7.js.map → chunk-Z47SYKRX.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CepField.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/CepField/CepField.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAQxE,OAAO,KAAK,EAAc,aAAa,EAAmB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"CepField.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/CepField/CepField.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAQxE,OAAO,KAAK,EAAc,aAAa,EAAmB,MAAM,kBAAkB,CAAC;AA0InF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,UAAU,EACV,KAAa,EACb,WAAyB,EACzB,KAAK,EACL,QAAgB,EAChB,UAAgB,EAChB,IAAmB,EACnB,UAAU,EACV,IAAI,EACJ,IAAI,EAAE,uDAAuD;AAC7D,cAAwB,EACxB,YAAY,GACb,EAAE,aAAa,GAAG,KAAK,CAAC,YAAY,CAsDpC;AAED,eAAe,QAAQ,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { CepFieldCopy } from "../../../copy";
|
|
2
|
+
import type { InputSize } from "../Input/Input.base";
|
|
2
3
|
/**
|
|
3
4
|
* Types for {@link CepField} — the reusable CEP auto-completer.
|
|
4
5
|
*/
|
|
@@ -70,5 +71,28 @@ export interface CepFieldProps {
|
|
|
70
71
|
name?: string;
|
|
71
72
|
/** Test id for the input. Defaults to `cep-field-<name>`. */
|
|
72
73
|
dataTestId?: string;
|
|
74
|
+
/**
|
|
75
|
+
* A step of the house size scale — the same values, and the same box
|
|
76
|
+
* heights, as {@link Input}'s `size`. Defaults to `md`.
|
|
77
|
+
*/
|
|
78
|
+
size?: InputSize;
|
|
79
|
+
/**
|
|
80
|
+
* Where the label is drawn.
|
|
81
|
+
*
|
|
82
|
+
* - `above` (default): a stacked label over the box, as the field has always
|
|
83
|
+
* rendered. Every existing caller keeps it.
|
|
84
|
+
* - `inside`: the label sits in the box and floats up on focus or a value,
|
|
85
|
+
* exactly as `Input`'s label does. Use it beside `Input`s so the CEP block
|
|
86
|
+
* is the same height as its neighbours.
|
|
87
|
+
*/
|
|
88
|
+
labelPlacement?: 'above' | 'inside';
|
|
89
|
+
/**
|
|
90
|
+
* The `<input>`'s `autocomplete`. Defaults to `postal-code`, which lets the
|
|
91
|
+
* browser offer the signed-in person's own CEP — right on their own address
|
|
92
|
+
* form, wrong on a form for somebody else's (a supplier): pass `off` there,
|
|
93
|
+
* or the owner's CEP goes in and the lookup fills the owner's street
|
|
94
|
+
* (FUT-4140).
|
|
95
|
+
*/
|
|
96
|
+
autoComplete?: string;
|
|
73
97
|
}
|
|
74
98
|
//# sourceMappingURL=CepField.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CepField.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/CepField/CepField.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD;;GAEG;AAEH;;;;;;;;;GASG;AACH,MAAM,WAAW,UAAU;IACzB,0CAA0C;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,2CAA2C;IAC3C,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc;IACd,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,iBAAiB;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU;IACV,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,oEAAoE;AACpE,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;AAExE,MAAM,WAAW,aAAa;IAC5B,6DAA6D;IAC7D,IAAI,EAAE,YAAY,CAAC;IACnB,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACvD;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,IAAI,CAAC;IAC3C;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"CepField.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/CepField/CepField.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD;;GAEG;AAEH;;;;;;;;;GASG;AACH,MAAM,WAAW,UAAU;IACzB,0CAA0C;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,2CAA2C;IAC3C,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc;IACd,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,iBAAiB;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU;IACV,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,oEAAoE;AACpE,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;AAExE,MAAM,WAAW,aAAa;IAC5B,6DAA6D;IAC7D,IAAI,EAAE,YAAY,CAAC;IACnB,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACvD;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,IAAI,CAAC;IAC3C;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IACpC;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputOTP.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/InputOTP/InputOTP.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAO1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"InputOTP.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/InputOTP/InputOTP.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAO1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAyDtD,eAAO,MAAM,QAAQ,sFAsDnB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputOTP.hooks.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/InputOTP/InputOTP.hooks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"InputOTP.hooks.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/InputOTP/InputOTP.hooks.ts"],"names":[],"mappings":"AAiDA,UAAU,QAAQ;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,GAAI,kDAAkD,QAAQ;;;+BAqC3E,MAAM,cAAc,MAAM;2BAkB1B,MAAM,KAAK,KAAK,CAAC,aAAa;qBAelC,KAAK,CAAC,cAAc;CAQ3B,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { CepFieldCopy } from "../../../../copy";
|
|
2
2
|
import React from 'react';
|
|
3
|
+
import type { InputSize } from '../../Input/Input.base';
|
|
3
4
|
import { type CepAddress } from '../../CepField';
|
|
4
5
|
/** The resolved address parts a form can receive. */
|
|
5
6
|
type CepPart = 'street' | 'neighborhood' | 'city' | 'state';
|
|
@@ -22,6 +23,15 @@ export interface CepFieldProps {
|
|
|
22
23
|
fills?: CepFills;
|
|
23
24
|
/** Milliseconds to wait after the last keystroke before looking up. */
|
|
24
25
|
debounceMs?: number;
|
|
26
|
+
/** The input's size — the same scale, and box heights, as `Input`. Defaults to `md`. */
|
|
27
|
+
size?: InputSize;
|
|
28
|
+
/** `above` (default) stacks the label over the box; `inside` floats it in the box like `Input`. */
|
|
29
|
+
labelPlacement?: 'above' | 'inside';
|
|
30
|
+
/**
|
|
31
|
+
* The `<input>`'s `autocomplete`. Defaults to `postal-code`; pass `off` when
|
|
32
|
+
* the form holds somebody else's address (FUT-4140).
|
|
33
|
+
*/
|
|
34
|
+
autoComplete?: string;
|
|
25
35
|
}
|
|
26
36
|
/**
|
|
27
37
|
* CEP field bound to {@link useFormContext}: masks and validates the CEP, then
|
|
@@ -42,6 +52,6 @@ export interface CepFieldProps {
|
|
|
42
52
|
* />
|
|
43
53
|
* ```
|
|
44
54
|
*/
|
|
45
|
-
export declare function CepField({ name, label, lookup, fills, debounceMs, copy, }: CepFieldProps): React.ReactElement;
|
|
55
|
+
export declare function CepField({ name, label, lookup, fills, debounceMs, copy, size, labelPlacement, autoComplete, }: CepFieldProps): React.ReactElement;
|
|
46
56
|
export {};
|
|
47
57
|
//# sourceMappingURL=CepField.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CepField.d.ts","sourceRoot":"","sources":["../../../../../../src/components/form/total-form/Fields/CepField.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAuC,MAAM,OAAO,CAAC;AAE5D,OAAO,EAA4B,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG3E,qDAAqD;AACrD,KAAK,OAAO,GAAG,QAAQ,GAAG,cAAc,GAAG,MAAM,GAAG,OAAO,CAAC;AAE5D;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAExD,mDAAmD;AACnD,MAAM,WAAW,aAAa;IAC5B,6DAA6D;IAC7D,IAAI,EAAE,YAAY,CAAC;IACnB,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACrD,iEAAiE;IACjE,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"CepField.d.ts","sourceRoot":"","sources":["../../../../../../src/components/form/total-form/Fields/CepField.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAuC,MAAM,OAAO,CAAC;AAE5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAA4B,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG3E,qDAAqD;AACrD,KAAK,OAAO,GAAG,QAAQ,GAAG,cAAc,GAAG,MAAM,GAAG,OAAO,CAAC;AAE5D;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAExD,mDAAmD;AACnD,MAAM,WAAW,aAAa;IAC5B,6DAA6D;IAC7D,IAAI,EAAE,YAAY,CAAC;IACnB,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACrD,iEAAiE;IACjE,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,mGAAmG;IACnG,cAAc,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IACpC;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAoDD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,KAAK,EACL,MAAM,EACN,KAAK,EACL,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,cAAc,EACd,YAAY,GACb,EAAE,aAAa,GAAG,KAAK,CAAC,YAAY,CAyCpC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { InputHTMLAttributes } from 'react';
|
|
1
2
|
import React from 'react';
|
|
2
3
|
/** Props for the `total-form` {@link TextField}. */
|
|
3
4
|
export interface TextFieldProps {
|
|
@@ -9,7 +10,27 @@ export interface TextFieldProps {
|
|
|
9
10
|
type?: string;
|
|
10
11
|
/** Placeholder shown when the field is empty. */
|
|
11
12
|
placeholder?: string;
|
|
13
|
+
/**
|
|
14
|
+
* The `autocomplete` attribute of the `<input>`. Omitted, the browser decides
|
|
15
|
+
* from the `name` — which is how a supplier's `name`/`phone`/`email` gets
|
|
16
|
+
* offered the signed-in owner's own (FUT-4140). Pass `off` for somebody
|
|
17
|
+
* else's data, `new-password` for a secret the password manager must not
|
|
18
|
+
* fill. An `inputProps.autoComplete` wins over this one.
|
|
19
|
+
*/
|
|
20
|
+
autoComplete?: string;
|
|
21
|
+
/**
|
|
22
|
+
* Attributes for the `<input>` element itself — `inputMode`, `autoCapitalize`,
|
|
23
|
+
* `autoCorrect`, `spellCheck`, `maxLength`, `pattern`, `enterKeyHint`…
|
|
24
|
+
*
|
|
25
|
+
* They reach the `<input>`, never the wrapper `div`, where a keypad hint does
|
|
26
|
+
* nothing. What the field owns — `id`, `name`, `type`, `value`, `onChange`,
|
|
27
|
+
* `placeholder` and the `total-form-field-<name>` test id — is not
|
|
28
|
+
* overridable here.
|
|
29
|
+
*/
|
|
30
|
+
inputProps?: TextFieldInputProps;
|
|
12
31
|
}
|
|
32
|
+
/** The `<input>` attributes {@link TextField} lets a caller set (see `inputProps`). */
|
|
33
|
+
export type TextFieldInputProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'id' | 'name' | 'type' | 'value' | 'defaultValue' | 'onChange' | 'placeholder' | 'size' | 'color'>;
|
|
13
34
|
/**
|
|
14
35
|
* Text input field bound to {@link useFormContext}. Composes the existing
|
|
15
36
|
* `@12-apps/ui` `Form*` presentational primitives and the `Input` control,
|
|
@@ -18,5 +39,5 @@ export interface TextFieldProps {
|
|
|
18
39
|
* Renders its error via `total-form-field-<name>-message` and the input via
|
|
19
40
|
* `total-form-field-<name>`.
|
|
20
41
|
*/
|
|
21
|
-
export declare function TextField({ name, label, type, placeholder }: TextFieldProps): React.ReactElement;
|
|
42
|
+
export declare function TextField({ name, label, type, placeholder, autoComplete, inputProps, }: TextFieldProps): React.ReactElement;
|
|
22
43
|
//# sourceMappingURL=TextField.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextField.d.ts","sourceRoot":"","sources":["../../../../../../src/components/form/total-form/Fields/TextField.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,oDAAoD;AACpD,MAAM,WAAW,cAAc;IAC7B,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"TextField.d.ts","sourceRoot":"","sources":["../../../../../../src/components/form/total-form/Fields/TextField.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,oDAAoD;AACpD,MAAM,WAAW,cAAc;IAC7B,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,mBAAmB,CAAC;CAClC;AAED,uFAAuF;AACvF,MAAM,MAAM,mBAAmB,GAAG,IAAI,CACpC,mBAAmB,CAAC,gBAAgB,CAAC,EACrC,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,cAAc,GAAG,UAAU,GAAG,aAAa,GAAG,MAAM,GAAG,OAAO,CAClG,CAAC;AA+BF;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,KAAK,EACL,IAAa,EACb,WAAW,EACX,YAAY,EACZ,UAAU,GACX,EAAE,cAAc,GAAG,KAAK,CAAC,YAAY,CA+BrC"}
|
|
@@ -3,7 +3,7 @@ export type { CategoryFieldProps } from './CategoryField';
|
|
|
3
3
|
export { CepField } from './CepField';
|
|
4
4
|
export type { CepFieldProps, CepFills } from './CepField';
|
|
5
5
|
export { TextField } from './TextField';
|
|
6
|
-
export type { TextFieldProps } from './TextField';
|
|
6
|
+
export type { TextFieldInputProps, TextFieldProps } from './TextField';
|
|
7
7
|
export { SelectField } from './SelectField';
|
|
8
8
|
export type { SelectFieldProps } from './SelectField';
|
|
9
9
|
export { ToggleField } from './ToggleField';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/form/total-form/Fields/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/form/total-form/Fields/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -8,5 +8,5 @@ export { SubmitButton } from './SubmitButton';
|
|
|
8
8
|
export type { SubmitButtonProps } from './SubmitButton';
|
|
9
9
|
export * as Fields from './Fields';
|
|
10
10
|
export { CategoryField, TextField, SelectField } from './Fields';
|
|
11
|
-
export type { CategoryFieldProps, TextFieldProps, SelectFieldProps } from './Fields';
|
|
11
|
+
export type { CategoryFieldProps, TextFieldInputProps, TextFieldProps, SelectFieldProps } from './Fields';
|
|
12
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/total-form/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC5D,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACjE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/total-form/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC5D,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACjE,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en-US.data-display.d.ts","sourceRoot":"","sources":["../../src/en-US.data-display.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qDAAqD,CAAC;AACzF,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,cAAc,EACd,iBAAiB,EAClB,MAAM,QAAQ,CAAC;AAQhB,eAAO,MAAM,mBAAmB,EAAE,YAcjC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,YAOlC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,cAAc,CAa3D,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,YAAY,CAItD,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,iBAUvC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,aAMnC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"en-US.data-display.d.ts","sourceRoot":"","sources":["../../src/en-US.data-display.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qDAAqD,CAAC;AACzF,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,cAAc,EACd,iBAAiB,EAClB,MAAM,QAAQ,CAAC;AAQhB,eAAO,MAAM,mBAAmB,EAAE,YAcjC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,YAOlC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,cAAc,CAa3D,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,YAAY,CAItD,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,iBAUvC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,aAMnC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,aAsMnC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pt-BR.data-display.d.ts","sourceRoot":"","sources":["../../src/pt-BR.data-display.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qDAAqD,CAAC;AACzF,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,cAAc,EACd,iBAAiB,EAClB,MAAM,QAAQ,CAAC;AAQhB,eAAO,MAAM,mBAAmB,EAAE,YAcjC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,YAOlC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,cAAc,CAa3D,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,YAAY,CAItD,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,iBAUvC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,aAMnC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"pt-BR.data-display.d.ts","sourceRoot":"","sources":["../../src/pt-BR.data-display.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qDAAqD,CAAC;AACzF,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,cAAc,EACd,iBAAiB,EAClB,MAAM,QAAQ,CAAC;AAQhB,eAAO,MAAM,mBAAmB,EAAE,YAcjC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,YAOlC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,cAAc,CAa3D,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,YAAY,CAItD,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,iBAUvC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,aAMnC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,aA8LnC,CAAC"}
|
package/dist/user-avatar.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
UserAvatar,
|
|
3
3
|
UserMenu
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-DPHSJLMN.js";
|
|
5
5
|
import "./chunk-DQ22UKMZ.js";
|
|
6
6
|
import "./chunk-UDQSIRAP.js";
|
|
7
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-7YJYIMWP.js";
|
|
8
8
|
import "./chunk-3ZVUNSFF.js";
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-MTEQEPNY.js";
|
|
9
|
+
import "./chunk-EOQ6EKTS.js";
|
|
11
10
|
import "./chunk-6ZZGK5DT.js";
|
|
11
|
+
import "./chunk-MTEQEPNY.js";
|
|
12
12
|
import "./chunk-VUHLNYAE.js";
|
|
13
13
|
import "./chunk-2GSIEDGN.js";
|
|
14
14
|
import "./chunk-W2RXXF7K.js";
|
package/package.json
CHANGED
|
@@ -206,6 +206,12 @@ export interface DataViewsFiltersCopy {
|
|
|
206
206
|
* wrong. `dd/mm/aaaa` is one locale's order and one locale's letters.
|
|
207
207
|
*/
|
|
208
208
|
dayMask: string;
|
|
209
|
+
/**
|
|
210
|
+
* Under a day field holding eight digits that name no day (`31/02/2026`).
|
|
211
|
+
* Without it the field kept the previous filter and said nothing, so the
|
|
212
|
+
* list read like an answer to a date nobody could have meant (FUT-4144).
|
|
213
|
+
*/
|
|
214
|
+
dayInvalid: string;
|
|
209
215
|
/** Drop every applied filter, spelled out in the panel where there is room. */
|
|
210
216
|
clearAllFilters: string;
|
|
211
217
|
/** The day-range presets' labels, keyed by preset id. */
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
* date, which is what keeps the run above at one request rather than four.
|
|
29
29
|
*/
|
|
30
30
|
import TextField from '@mui/material/TextField/index.js';
|
|
31
|
-
import React, { useEffect, useState } from 'react';
|
|
31
|
+
import React, { useEffect, useId, useState } from 'react';
|
|
32
32
|
import { fieldTextFieldStyles } from '../../../tokens/field-height';
|
|
33
33
|
import { sxRem } from '../../../tokens/relative';
|
|
34
34
|
|
|
@@ -146,6 +146,32 @@ export function maskDate(raw: string, mask: string): string {
|
|
|
146
146
|
return out.join(separator);
|
|
147
147
|
}
|
|
148
148
|
|
|
149
|
+
/** A wire day on its own, as a paste or an autofill delivers it: `2026-10-01`. */
|
|
150
|
+
const ISO_DAY = /^\s*(\d{4}-\d{2}-\d{2})\s*$/;
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* What the field shows for whatever arrived — typed, pasted, autofilled.
|
|
154
|
+
*
|
|
155
|
+
* A whole ISO day (`AAAA-MM-DD`) is READ AS THAT DAY and written in the mask's
|
|
156
|
+
* order. Through `maskDate` alone it is eight digits taken day-first, so a
|
|
157
|
+
* pasted `2026-10-01` came out as `20/26/1001` (FUT-4144). Anything else is
|
|
158
|
+
* masked exactly as typing always was, so the typed and pasted forms of one day
|
|
159
|
+
* land on the same text.
|
|
160
|
+
*/
|
|
161
|
+
export function readDayText(raw: string, mask: string): string {
|
|
162
|
+
const iso = ISO_DAY.exec(raw)?.[1];
|
|
163
|
+
const masked = iso ? isoToMasked(iso, mask) : '';
|
|
164
|
+
return masked || maskDate(raw, mask);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Whether `text` is a WHOLE day that does not exist — `31/02/2026`. A partial
|
|
169
|
+
* entry is not impossible, only unfinished, and is never flagged.
|
|
170
|
+
*/
|
|
171
|
+
export function isImpossibleDay(text: string, mask: string): boolean {
|
|
172
|
+
return text.replace(/\D/g, '').length === 8 && maskedToIso(text, mask) === '';
|
|
173
|
+
}
|
|
174
|
+
|
|
149
175
|
/**
|
|
150
176
|
* What has to land on the `<input>` itself rather than on the `TextField`.
|
|
151
177
|
*
|
|
@@ -166,30 +192,19 @@ export function maskDate(raw: string, mask: string): string {
|
|
|
166
192
|
* keypad to suggest names and addresses, none of which are a date, and none of
|
|
167
193
|
* which the mask would keep.
|
|
168
194
|
*/
|
|
169
|
-
function dayInputProps(testId: string, describedBy: string | undefined) {
|
|
195
|
+
function dayInputProps(testId: string, describedBy: readonly (string | undefined)[]) {
|
|
196
|
+
const ids = describedBy.filter(Boolean).join(' ');
|
|
170
197
|
return {
|
|
171
198
|
'data-testid': testId,
|
|
172
199
|
maxLength: 10,
|
|
173
200
|
inputMode: 'numeric' as const,
|
|
174
201
|
autoComplete: 'off',
|
|
175
|
-
...(
|
|
202
|
+
...(ids ? { 'aria-describedby': ids } : {}),
|
|
176
203
|
};
|
|
177
204
|
}
|
|
178
205
|
|
|
179
|
-
/**
|
|
180
|
-
|
|
181
|
-
* inclusive day comparison already speaks, and the form the chip label reads —
|
|
182
|
-
* so only the typing surface changes.
|
|
183
|
-
*/
|
|
184
|
-
export function DayBoundInput({
|
|
185
|
-
label,
|
|
186
|
-
value,
|
|
187
|
-
onChange,
|
|
188
|
-
testId,
|
|
189
|
-
error = false,
|
|
190
|
-
describedBy,
|
|
191
|
-
mask,
|
|
192
|
-
}: {
|
|
206
|
+
/** Props of {@link DayBoundInput}. */
|
|
207
|
+
interface DayBoundInputProps {
|
|
193
208
|
label: string;
|
|
194
209
|
/** The applied bound, `AAAA-MM-DD`, or undefined when this end is open. */
|
|
195
210
|
value: string | undefined;
|
|
@@ -215,46 +230,127 @@ export function DayBoundInput({
|
|
|
215
230
|
* of that picker — which is exactly what it did.
|
|
216
231
|
*/
|
|
217
232
|
mask: string;
|
|
218
|
-
|
|
219
|
-
|
|
233
|
+
/**
|
|
234
|
+
* Said under the field when its eight digits name no day (`31/02/2026`); the
|
|
235
|
+
* field is then marked invalid and KEEPS the text on blur, so the reader sees
|
|
236
|
+
* what was refused instead of the old value quietly coming back (FUT-4144).
|
|
237
|
+
*
|
|
238
|
+
* Opt-in, because the field ships no words of its own: without it an
|
|
239
|
+
* impossible day is still never written, and blur still snaps back.
|
|
240
|
+
*/
|
|
241
|
+
invalidMessage?: string;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/** What {@link useDayText} hands the field: its text, its verdict and its handlers. */
|
|
245
|
+
interface DayText {
|
|
246
|
+
text: string;
|
|
247
|
+
impossible: boolean;
|
|
248
|
+
handleChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
|
|
249
|
+
handlePaste: (event: React.ClipboardEvent<HTMLDivElement>) => void;
|
|
250
|
+
handleBlur: () => void;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/** The typed text of one bound, kept apart from the APPLIED bound it may commit. */
|
|
254
|
+
function useDayText(
|
|
255
|
+
applied: string,
|
|
256
|
+
mask: string,
|
|
257
|
+
onChange: (bound: string | undefined) => void,
|
|
258
|
+
judgesImpossible: boolean,
|
|
259
|
+
): DayText {
|
|
220
260
|
const [text, setText] = useState(() => isoToMasked(applied, mask));
|
|
261
|
+
const impossible = judgesImpossible && isImpossibleDay(text, mask);
|
|
262
|
+
|
|
263
|
+
// Emptying clears the bound. A COMPLETE day applies it. A partial (or an
|
|
264
|
+
// impossible) one does NEITHER — it leaves whatever is applied alone, so
|
|
265
|
+
// typing is never fought and a half-typed year never reaches the backend.
|
|
266
|
+
const enter = (next: string) => {
|
|
267
|
+
setText(next);
|
|
268
|
+
if (next === '') return onChange(undefined);
|
|
269
|
+
const iso = maskedToIso(next, mask);
|
|
270
|
+
if (iso) onChange(iso);
|
|
271
|
+
};
|
|
221
272
|
|
|
222
273
|
// The bound is the APPLIED filter; `text` is what is being typed. Re-sync only
|
|
223
274
|
// when the applied value moved somewhere the text does not already mean — a
|
|
224
275
|
// "Limpar", a saved view, the other pill resetting the pair. Without that
|
|
225
276
|
// guard the field's own write bounces straight back mid-edit and resets the
|
|
226
277
|
// caret, which is the native control's worst habit reproduced by hand.
|
|
278
|
+
//
|
|
279
|
+
// "Already means" is a REAL day equal to the bound, or an empty field for an
|
|
280
|
+
// open bound. An impossible day parses to `''` too, so a bare comparison let
|
|
281
|
+
// a "Limpar" (applied → `''`) keep `31/02/2026` on screen, red, over a filter
|
|
282
|
+
// that had just been cleared.
|
|
227
283
|
useEffect(() => {
|
|
228
|
-
setText((current) =>
|
|
229
|
-
|
|
230
|
-
|
|
284
|
+
setText((current) => {
|
|
285
|
+
const iso = maskedToIso(current, mask);
|
|
286
|
+
const means = (iso !== '' || current === '') && iso === applied;
|
|
287
|
+
return means ? current : isoToMasked(applied, mask);
|
|
288
|
+
});
|
|
231
289
|
}, [applied, mask]);
|
|
232
290
|
|
|
291
|
+
return {
|
|
292
|
+
text,
|
|
293
|
+
impossible,
|
|
294
|
+
handleChange: (event) => enter(readDayText(event.target.value, mask)),
|
|
295
|
+
// A pasted ISO day REPLACES the field whatever it held: inserted at the
|
|
296
|
+
// caret into existing digits it would be read as more digits, and the
|
|
297
|
+
// `maxLength` would cut a padded one before `onChange` ever saw it.
|
|
298
|
+
handlePaste: (event) => {
|
|
299
|
+
const pasted = event.clipboardData.getData('text');
|
|
300
|
+
if (!ISO_DAY.test(pasted)) return;
|
|
301
|
+
event.preventDefault();
|
|
302
|
+
enter(readDayText(pasted, mask));
|
|
303
|
+
},
|
|
304
|
+
// Leaving a half-typed date on screen would show a filter the list is not
|
|
305
|
+
// actually using. On blur the field snaps back to what IS applied; a
|
|
306
|
+
// complete date already equals it, so this only ever tidies. An impossible
|
|
307
|
+
// day the field is SAYING is impossible stays, with its message: snapping
|
|
308
|
+
// it back is the silent forgetting FUT-4144 removed.
|
|
309
|
+
handleBlur: () => {
|
|
310
|
+
if (!impossible) setText(isoToMasked(applied, mask));
|
|
311
|
+
},
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
/**
|
|
316
|
+
* One end of a day window. The BOUND stays `AAAA-MM-DD` — the form the backend's
|
|
317
|
+
* inclusive day comparison already speaks, and the form the chip label reads —
|
|
318
|
+
* so only the typing surface changes.
|
|
319
|
+
*/
|
|
320
|
+
export function DayBoundInput({
|
|
321
|
+
label,
|
|
322
|
+
value,
|
|
323
|
+
onChange,
|
|
324
|
+
testId,
|
|
325
|
+
error = false,
|
|
326
|
+
describedBy,
|
|
327
|
+
mask,
|
|
328
|
+
invalidMessage,
|
|
329
|
+
}: DayBoundInputProps): React.JSX.Element {
|
|
330
|
+
const id = useId();
|
|
331
|
+
const { text, impossible, handleChange, handlePaste, handleBlur } = useDayText(
|
|
332
|
+
value ?? '',
|
|
333
|
+
mask,
|
|
334
|
+
onChange,
|
|
335
|
+
invalidMessage !== undefined,
|
|
336
|
+
);
|
|
337
|
+
|
|
233
338
|
return (
|
|
234
339
|
<TextField
|
|
235
340
|
size="small"
|
|
236
341
|
type="text"
|
|
342
|
+
id={id}
|
|
237
343
|
label={label}
|
|
238
|
-
error={error}
|
|
344
|
+
error={error || impossible}
|
|
345
|
+
helperText={impossible ? invalidMessage : undefined}
|
|
239
346
|
placeholder={mask}
|
|
240
347
|
value={text}
|
|
241
|
-
onChange={
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
// Emptying clears the bound. A COMPLETE day applies it. A partial one
|
|
245
|
-
// does NEITHER — it leaves whatever is applied alone, so typing is never
|
|
246
|
-
// fought and a half-typed year never reaches the backend.
|
|
247
|
-
if (next === '') return onChange(undefined);
|
|
248
|
-
const iso = maskedToIso(next, mask);
|
|
249
|
-
if (iso) onChange(iso);
|
|
250
|
-
}}
|
|
251
|
-
// Leaving a half-typed (or impossible) date on screen would show a filter
|
|
252
|
-
// the list is not actually using. On blur the field snaps back to what IS
|
|
253
|
-
// applied; a complete date already equals it, so this only ever tidies.
|
|
254
|
-
onBlur={() => setText(isoToMasked(applied, mask))}
|
|
348
|
+
onChange={handleChange}
|
|
349
|
+
onPaste={handlePaste}
|
|
350
|
+
onBlur={handleBlur}
|
|
255
351
|
// The placeholder occupies the space an un-shrunk label would render into.
|
|
256
352
|
InputLabelProps={{ shrink: true }}
|
|
257
|
-
inputProps={dayInputProps(testId, describedBy)}
|
|
353
|
+
inputProps={dayInputProps(testId, [impossible ? `${id}-helper-text` : undefined, describedBy])}
|
|
258
354
|
sx={[{ width: sxRem(165) }, fieldTextFieldStyles]}
|
|
259
355
|
/>
|
|
260
356
|
);
|
|
@@ -111,7 +111,7 @@ export function ShellEmpty<T extends Record<string, unknown>>({
|
|
|
111
111
|
return (
|
|
112
112
|
<DataViewsEmpty
|
|
113
113
|
filtered={c.activeFilterCount > 0 || c.state.search !== ""}
|
|
114
|
-
onClearFilters={
|
|
114
|
+
onClearFilters={c.clearFilters}
|
|
115
115
|
emptyState={emptyState}
|
|
116
116
|
testIdPrefix={testIdPrefix}
|
|
117
117
|
/>
|
|
@@ -30,6 +30,12 @@ export interface GridFilterPanelProps<T extends Record<string, unknown>> {
|
|
|
30
30
|
onChangeRange: (fieldId: string, range: RangeValue) => void;
|
|
31
31
|
onClearField: (fieldId: string) => void;
|
|
32
32
|
onClearAll: () => void;
|
|
33
|
+
/**
|
|
34
|
+
* Changes on every clear-all, from any surface (`useClearFilters`). The
|
|
35
|
+
* controls are keyed on it, so a clear also empties a field holding text the
|
|
36
|
+
* filter never applied — a refused day under an open range (FUT-4144).
|
|
37
|
+
*/
|
|
38
|
+
clearKey?: number;
|
|
33
39
|
}
|
|
34
40
|
|
|
35
41
|
/** One pill field: a compact multi-select for long lists, else a checkbox list. */
|
|
@@ -135,7 +141,7 @@ export function GridFilterPanel<T extends Record<string, unknown>>(
|
|
|
135
141
|
clearTestId={`${props.testIdPrefix}-clear-filters`}
|
|
136
142
|
ariaLabel={copy.filters.panelTitle}
|
|
137
143
|
>
|
|
138
|
-
<FilterControls {...props} />
|
|
144
|
+
<FilterControls key={props.clearKey} {...props} />
|
|
139
145
|
</TableFilter.Panel>
|
|
140
146
|
);
|
|
141
147
|
}
|
|
@@ -180,7 +186,7 @@ export function FilterDialog<T extends Record<string, unknown>>({
|
|
|
180
186
|
{copy.filters.clearAllFilters}
|
|
181
187
|
</Link>
|
|
182
188
|
</Box>
|
|
183
|
-
<FilterControls {...props} />
|
|
189
|
+
<FilterControls key={props.clearKey} {...props} />
|
|
184
190
|
</Box>
|
|
185
191
|
</StackedModalContent>
|
|
186
192
|
</StackedModal>
|
|
@@ -85,6 +85,8 @@ interface FilterSurfaceProps<T extends Record<string, unknown>> {
|
|
|
85
85
|
onChangeRange: (fieldId: string, range: RangeValue) => void;
|
|
86
86
|
onClearField: (fieldId: string) => void;
|
|
87
87
|
onClearAll: () => void;
|
|
88
|
+
/** Changes on every clear-all; the panel's controls are keyed on it. */
|
|
89
|
+
clearKey: number;
|
|
88
90
|
/** Press a quick chip (its field becomes `[value]`), or release the pressed one. */
|
|
89
91
|
onToggleQuick: (quick: QuickFilterConfig) => void;
|
|
90
92
|
}
|
|
@@ -175,7 +177,7 @@ function useGridShellFilters<T extends Record<string, unknown>>({
|
|
|
175
177
|
c.patch(({ pills }) => ({ pills: { ...pills, [fieldId]: togglePillValues(pills[fieldId], value, checked) } })),
|
|
176
178
|
onChangeRange: (fieldId, range) => c.patch({ ranges: { ...c.ranges, [fieldId]: range } }),
|
|
177
179
|
onClearField: (fieldId) => c.patch({ pills: { ...state.pills, [fieldId]: [] } }),
|
|
178
|
-
onClearAll:
|
|
180
|
+
onClearAll: c.clearFilters, clearKey: c.clearKey,
|
|
179
181
|
onToggleQuick: (quick) => c.patch(({ pills }) => ({ pills: toggleQuick(pills, quick) })),
|
|
180
182
|
};
|
|
181
183
|
return {
|
|
@@ -218,7 +218,10 @@ export function InlineFilterControls<T extends Record<string, unknown>>({
|
|
|
218
218
|
activeFilterCount,
|
|
219
219
|
onControlOpenChange,
|
|
220
220
|
onToggleQuick,
|
|
221
|
+
clearKey,
|
|
221
222
|
}: Omit<InlineFilterBarProps<T>, "fields" | "rangeFields"> & {
|
|
223
|
+
/** Changes on every clear-all; the "Mais" fields are keyed on it (FUT-4144). */
|
|
224
|
+
clearKey?: number;
|
|
222
225
|
/** Presses or releases a quick chip — see `QuickFilterConfig`. */
|
|
223
226
|
onToggleQuick?: (quick: QuickFilterConfig) => void;
|
|
224
227
|
/** How many filters are applied — decides whether "Limpar" is on the bar at all. */
|
|
@@ -275,6 +278,7 @@ export function InlineFilterControls<T extends Record<string, unknown>>({
|
|
|
275
278
|
compactControls={compactControls}
|
|
276
279
|
clearAllHidden={clearAllHidden}
|
|
277
280
|
testIdPrefix={testIdPrefix}
|
|
281
|
+
clearKey={clearKey}
|
|
278
282
|
/>
|
|
279
283
|
)}
|
|
280
284
|
</Box>
|
|
@@ -302,7 +306,9 @@ function FilterSlots<T extends Record<string, unknown>>({
|
|
|
302
306
|
compactControls,
|
|
303
307
|
clearAllHidden,
|
|
304
308
|
testIdPrefix,
|
|
309
|
+
clearKey,
|
|
305
310
|
}: {
|
|
311
|
+
clearKey?: number;
|
|
306
312
|
onToggleQuick?: (quick: QuickFilterConfig) => void;
|
|
307
313
|
inline: OverflowField<T>[];
|
|
308
314
|
overflow: OverflowField<T>[];
|
|
@@ -335,6 +341,7 @@ function FilterSlots<T extends Record<string, unknown>>({
|
|
|
335
341
|
/>
|
|
336
342
|
))}
|
|
337
343
|
<MoreFilters
|
|
344
|
+
clearKey={clearKey}
|
|
338
345
|
onOpenChange={onControlOpenChange}
|
|
339
346
|
onClearAll={onClearAll}
|
|
340
347
|
anyApplied={activeFilterCount > 0}
|
|
@@ -207,8 +207,11 @@ export function MoreFilters<T extends Record<string, unknown>>({
|
|
|
207
207
|
onClearAll,
|
|
208
208
|
anyApplied,
|
|
209
209
|
compact = false,
|
|
210
|
+
clearKey,
|
|
210
211
|
...rest
|
|
211
212
|
}: MoreFiltersProps<T> & {
|
|
213
|
+
/** Changes on every clear-all; the fields here are keyed on it (FUT-4144). */
|
|
214
|
+
clearKey?: number;
|
|
212
215
|
/** Icon only — the same rung that strips Exibir/Exportar. */
|
|
213
216
|
compact?: boolean;
|
|
214
217
|
/** Clears every filter, not just the ones in here. */
|
|
@@ -267,7 +270,7 @@ export function MoreFilters<T extends Record<string, unknown>>({
|
|
|
267
270
|
means something refused to, which is a bug to fix rather than a
|
|
268
271
|
scrollbar to live with. */}
|
|
269
272
|
<Box sx={{ maxHeight: sxRem(320), overflowY: "auto", overflowX: "hidden", p: 1.5, minWidth: 0 }}>
|
|
270
|
-
<MoreFields fields={fields} {...rest} />
|
|
273
|
+
<MoreFields key={clearKey} fields={fields} {...rest} />
|
|
271
274
|
</Box>
|
|
272
275
|
{anyApplied && (
|
|
273
276
|
<MoreFooter onClearAll={onClearAll} testIdPrefix={rest.testIdPrefix} />
|
|
@@ -24,6 +24,7 @@ import { TableFilter } from '../../layout/TableFilter';
|
|
|
24
24
|
import { DayBoundInput } from './data-views-day-input';
|
|
25
25
|
import { NumberBoundInput } from './data-views-number-input';
|
|
26
26
|
import { RangePresets } from './data-views-preset-chips';
|
|
27
|
+
import { useOutsideResetKey } from './data-views-range-reset';
|
|
27
28
|
import { presetsFor } from './data-views-range-presets';
|
|
28
29
|
import {
|
|
29
30
|
isRangeInverted,
|
|
@@ -64,6 +65,7 @@ function BoundField<T extends Record<string, unknown>>({
|
|
|
64
65
|
return (
|
|
65
66
|
<DayBoundInput
|
|
66
67
|
mask={copy.filters.dayMask}
|
|
68
|
+
invalidMessage={copy.filters.dayInvalid}
|
|
67
69
|
label={label}
|
|
68
70
|
value={value == null ? undefined : String(value)}
|
|
69
71
|
onChange={onChange}
|
|
@@ -101,6 +103,7 @@ export function RangeBounds<T extends Record<string, unknown>>({
|
|
|
101
103
|
}): React.JSX.Element {
|
|
102
104
|
const copy = useDataViewsCopy();
|
|
103
105
|
const inverted = isRangeInverted(value);
|
|
106
|
+
const { key, emitted } = useOutsideResetKey(value);
|
|
104
107
|
return (
|
|
105
108
|
<Box data-testid={`${testId}-panel`}>
|
|
106
109
|
{/* Above the inputs, not below: the presets are the answer for most
|
|
@@ -108,19 +111,24 @@ export function RangeBounds<T extends Record<string, unknown>>({
|
|
|
108
111
|
<Box sx={{ '&:not(:empty)': { mb: 1.5 } }}>
|
|
109
112
|
<RangePresets presets={presetsFor(field, copy)} value={value} onChange={onChange} testId={testId} />
|
|
110
113
|
</Box>
|
|
111
|
-
|
|
114
|
+
{/* Top-aligned: a day that does not exist grows ITS field by a message
|
|
115
|
+
line, and centring would push the other box half a line down. The two
|
|
116
|
+
boxes are one height, so with no message this is the same row. */}
|
|
117
|
+
<Box sx={{ display: 'flex', alignItems: 'flex-start', gap: 1.5 }}>
|
|
112
118
|
<BoundField
|
|
119
|
+
key={`min-${key}`}
|
|
113
120
|
field={field}
|
|
114
121
|
label={copy.filters.rangeStart}
|
|
115
122
|
value={value.min}
|
|
116
|
-
onChange={(min) => onChange({ ...value, min })}
|
|
123
|
+
onChange={(min) => onChange(emitted({ ...value, min }))}
|
|
117
124
|
testId={`${testId}-min`}
|
|
118
125
|
/>
|
|
119
126
|
<BoundField
|
|
127
|
+
key={`max-${key}`}
|
|
120
128
|
field={field}
|
|
121
129
|
label={copy.filters.rangeEnd}
|
|
122
130
|
value={value.max}
|
|
123
|
-
onChange={(max) => onChange({ ...value, max })}
|
|
131
|
+
onChange={(max) => onChange(emitted({ ...value, max }))}
|
|
124
132
|
testId={`${testId}-max`}
|
|
125
133
|
/>
|
|
126
134
|
</Box>
|