@wordpress/dataviews 13.1.1-next.v.202603161435.0 → 14.1.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 +36 -6
- package/README.md +33 -7
- package/build/components/dataform-controls/array.cjs +2 -0
- package/build/components/dataform-controls/array.cjs.map +2 -2
- package/build/components/dataform-controls/checkbox.cjs +3 -1
- package/build/components/dataform-controls/checkbox.cjs.map +2 -2
- package/build/components/dataform-controls/color.cjs +8 -2
- package/build/components/dataform-controls/color.cjs.map +2 -2
- package/build/components/dataform-controls/date.cjs +31 -9
- package/build/components/dataform-controls/date.cjs.map +3 -3
- package/build/components/dataform-controls/datetime.cjs +17 -6
- package/build/components/dataform-controls/datetime.cjs.map +3 -3
- package/build/components/dataform-controls/password.cjs +4 -1
- package/build/components/dataform-controls/password.cjs.map +2 -2
- package/build/components/dataform-controls/radio.cjs +3 -1
- package/build/components/dataform-controls/radio.cjs.map +2 -2
- package/build/components/dataform-controls/select.cjs +3 -1
- package/build/components/dataform-controls/select.cjs.map +2 -2
- package/build/components/dataform-controls/textarea.cjs +2 -0
- package/build/components/dataform-controls/textarea.cjs.map +2 -2
- package/build/components/dataform-controls/toggle-group.cjs +3 -1
- package/build/components/dataform-controls/toggle-group.cjs.map +2 -2
- package/build/components/dataform-controls/toggle.cjs +3 -1
- package/build/components/dataform-controls/toggle.cjs.map +2 -2
- package/build/components/dataform-controls/utils/relative-date-control.cjs +5 -2
- package/build/components/dataform-controls/utils/relative-date-control.cjs.map +2 -2
- package/build/components/dataform-controls/utils/use-disabled-date-matchers.cjs +48 -0
- package/build/components/dataform-controls/utils/use-disabled-date-matchers.cjs.map +7 -0
- package/build/components/dataform-controls/utils/validated-input.cjs +2 -0
- package/build/components/dataform-controls/utils/validated-input.cjs.map +2 -2
- package/build/components/dataform-controls/utils/validated-number.cjs +3 -1
- package/build/components/dataform-controls/utils/validated-number.cjs.map +2 -2
- package/build/components/dataform-layouts/card/index.cjs +132 -128
- package/build/components/dataform-layouts/card/index.cjs.map +3 -3
- package/build/components/dataform-layouts/panel/summary-button.cjs +0 -1
- package/build/components/dataform-layouts/panel/summary-button.cjs.map +2 -2
- package/build/components/dataviews-bulk-actions/index.cjs +28 -5
- package/build/components/dataviews-bulk-actions/index.cjs.map +2 -2
- package/build/components/dataviews-context/index.cjs +2 -2
- package/build/components/dataviews-context/index.cjs.map +2 -2
- package/build/components/dataviews-filters/input-widget.cjs +4 -0
- package/build/components/dataviews-filters/input-widget.cjs.map +2 -2
- package/build/components/dataviews-footer/index.cjs +2 -3
- package/build/components/dataviews-footer/index.cjs.map +2 -2
- package/build/components/dataviews-layouts/grid/composite-grid.cjs +378 -249
- package/build/components/dataviews-layouts/grid/composite-grid.cjs.map +2 -2
- package/build/components/dataviews-layouts/picker-grid/index.cjs +60 -30
- package/build/components/dataviews-layouts/picker-grid/index.cjs.map +2 -2
- package/build/components/dataviews-layouts/picker-table/index.cjs +45 -30
- package/build/components/dataviews-layouts/picker-table/index.cjs.map +2 -2
- package/build/components/dataviews-layouts/table/index.cjs +0 -1
- package/build/components/dataviews-layouts/table/index.cjs.map +2 -2
- package/build/components/dataviews-layouts/utils/use-infinite-scroll.cjs +62 -0
- package/build/components/dataviews-layouts/utils/use-infinite-scroll.cjs.map +7 -0
- package/build/components/dataviews-pagination/index.cjs +1 -0
- package/build/components/dataviews-pagination/index.cjs.map +2 -2
- package/build/components/dataviews-picker-footer/index.cjs +23 -4
- package/build/components/dataviews-picker-footer/index.cjs.map +2 -2
- package/build/components/dataviews-search/index.cjs +2 -1
- package/build/components/dataviews-search/index.cjs.map +2 -2
- package/build/components/dataviews-selection-checkbox/index.cjs +3 -2
- package/build/components/dataviews-selection-checkbox/index.cjs.map +2 -2
- package/build/components/dataviews-view-config/index.cjs +0 -2
- package/build/components/dataviews-view-config/index.cjs.map +3 -3
- package/build/components/dataviews-view-config/infinite-scroll-toggle.cjs +0 -3
- package/build/components/dataviews-view-config/infinite-scroll-toggle.cjs.map +2 -2
- package/build/dataviews/index.cjs +47 -45
- package/build/dataviews/index.cjs.map +3 -3
- package/build/dataviews-picker/index.cjs +41 -33
- package/build/dataviews-picker/index.cjs.map +3 -3
- package/build/field-types/date.cjs +4 -1
- package/build/field-types/date.cjs.map +2 -2
- package/build/field-types/datetime.cjs +4 -1
- package/build/field-types/datetime.cjs.map +2 -2
- package/build/field-types/index.cjs +1 -0
- package/build/field-types/index.cjs.map +2 -2
- package/build/field-types/utils/get-is-valid.cjs +29 -24
- package/build/field-types/utils/get-is-valid.cjs.map +2 -2
- package/build/field-types/utils/is-valid-date-boundary.cjs +64 -0
- package/build/field-types/utils/is-valid-date-boundary.cjs.map +7 -0
- package/build/hooks/index.cjs +11 -2
- package/build/hooks/index.cjs.map +2 -2
- package/build/hooks/use-data.cjs +146 -9
- package/build/hooks/use-data.cjs.map +2 -2
- package/build/hooks/use-infinite-scroll.cjs +208 -0
- package/build/hooks/use-infinite-scroll.cjs.map +7 -0
- package/build/hooks/use-selected-items.cjs +57 -0
- package/build/hooks/use-selected-items.cjs.map +7 -0
- package/build/types/dataviews.cjs.map +1 -1
- package/build/types/field-api.cjs.map +1 -1
- package/build/utils/filter-sort-and-paginate.cjs +5 -1
- package/build/utils/filter-sort-and-paginate.cjs.map +2 -2
- package/build/utils/get-footer-message.cjs +8 -8
- package/build/utils/get-footer-message.cjs.map +2 -2
- package/build-module/components/dataform-controls/array.mjs +2 -0
- package/build-module/components/dataform-controls/array.mjs.map +2 -2
- package/build-module/components/dataform-controls/checkbox.mjs +3 -1
- package/build-module/components/dataform-controls/checkbox.mjs.map +2 -2
- package/build-module/components/dataform-controls/color.mjs +8 -2
- package/build-module/components/dataform-controls/color.mjs.map +2 -2
- package/build-module/components/dataform-controls/date.mjs +31 -9
- package/build-module/components/dataform-controls/date.mjs.map +2 -2
- package/build-module/components/dataform-controls/datetime.mjs +17 -6
- package/build-module/components/dataform-controls/datetime.mjs.map +2 -2
- package/build-module/components/dataform-controls/password.mjs +4 -1
- package/build-module/components/dataform-controls/password.mjs.map +2 -2
- package/build-module/components/dataform-controls/radio.mjs +3 -1
- package/build-module/components/dataform-controls/radio.mjs.map +2 -2
- package/build-module/components/dataform-controls/select.mjs +3 -1
- package/build-module/components/dataform-controls/select.mjs.map +2 -2
- package/build-module/components/dataform-controls/textarea.mjs +2 -0
- package/build-module/components/dataform-controls/textarea.mjs.map +2 -2
- package/build-module/components/dataform-controls/toggle-group.mjs +3 -1
- package/build-module/components/dataform-controls/toggle-group.mjs.map +2 -2
- package/build-module/components/dataform-controls/toggle.mjs +3 -1
- package/build-module/components/dataform-controls/toggle.mjs.map +2 -2
- package/build-module/components/dataform-controls/utils/relative-date-control.mjs +5 -2
- package/build-module/components/dataform-controls/utils/relative-date-control.mjs.map +2 -2
- package/build-module/components/dataform-controls/utils/use-disabled-date-matchers.mjs +27 -0
- package/build-module/components/dataform-controls/utils/use-disabled-date-matchers.mjs.map +7 -0
- package/build-module/components/dataform-controls/utils/validated-input.mjs +2 -0
- package/build-module/components/dataform-controls/utils/validated-input.mjs.map +2 -2
- package/build-module/components/dataform-controls/utils/validated-number.mjs +3 -1
- package/build-module/components/dataform-controls/utils/validated-number.mjs.map +2 -2
- package/build-module/components/dataform-layouts/card/index.mjs +132 -133
- package/build-module/components/dataform-layouts/card/index.mjs.map +2 -2
- package/build-module/components/dataform-layouts/panel/summary-button.mjs +0 -1
- package/build-module/components/dataform-layouts/panel/summary-button.mjs.map +2 -2
- package/build-module/components/dataviews-bulk-actions/index.mjs +28 -5
- package/build-module/components/dataviews-bulk-actions/index.mjs.map +2 -2
- package/build-module/components/dataviews-context/index.mjs +2 -2
- package/build-module/components/dataviews-context/index.mjs.map +2 -2
- package/build-module/components/dataviews-filters/input-widget.mjs +4 -0
- package/build-module/components/dataviews-filters/input-widget.mjs.map +2 -2
- package/build-module/components/dataviews-footer/index.mjs +2 -3
- package/build-module/components/dataviews-footer/index.mjs.map +2 -2
- package/build-module/components/dataviews-layouts/grid/composite-grid.mjs +387 -250
- package/build-module/components/dataviews-layouts/grid/composite-grid.mjs.map +2 -2
- package/build-module/components/dataviews-layouts/picker-grid/index.mjs +64 -31
- package/build-module/components/dataviews-layouts/picker-grid/index.mjs.map +2 -2
- package/build-module/components/dataviews-layouts/picker-table/index.mjs +45 -30
- package/build-module/components/dataviews-layouts/picker-table/index.mjs.map +2 -2
- package/build-module/components/dataviews-layouts/table/index.mjs +0 -1
- package/build-module/components/dataviews-layouts/table/index.mjs.map +2 -2
- package/build-module/components/dataviews-layouts/utils/use-infinite-scroll.mjs +26 -0
- package/build-module/components/dataviews-layouts/utils/use-infinite-scroll.mjs.map +7 -0
- package/build-module/components/dataviews-pagination/index.mjs +1 -0
- package/build-module/components/dataviews-pagination/index.mjs.map +2 -2
- package/build-module/components/dataviews-picker-footer/index.mjs +23 -4
- package/build-module/components/dataviews-picker-footer/index.mjs.map +2 -2
- package/build-module/components/dataviews-search/index.mjs +2 -1
- package/build-module/components/dataviews-search/index.mjs.map +2 -2
- package/build-module/components/dataviews-selection-checkbox/index.mjs +3 -2
- package/build-module/components/dataviews-selection-checkbox/index.mjs.map +2 -2
- package/build-module/components/dataviews-view-config/index.mjs +0 -2
- package/build-module/components/dataviews-view-config/index.mjs.map +2 -2
- package/build-module/components/dataviews-view-config/infinite-scroll-toggle.mjs +0 -3
- package/build-module/components/dataviews-view-config/infinite-scroll-toggle.mjs.map +2 -2
- package/build-module/dataviews/index.mjs +55 -47
- package/build-module/dataviews/index.mjs.map +2 -2
- package/build-module/dataviews-picker/index.mjs +49 -35
- package/build-module/dataviews-picker/index.mjs.map +2 -2
- package/build-module/field-types/date.mjs +4 -1
- package/build-module/field-types/date.mjs.map +2 -2
- package/build-module/field-types/datetime.mjs +4 -1
- package/build-module/field-types/datetime.mjs.map +2 -2
- package/build-module/field-types/index.mjs +1 -0
- package/build-module/field-types/index.mjs.map +2 -2
- package/build-module/field-types/utils/get-is-valid.mjs +29 -24
- package/build-module/field-types/utils/get-is-valid.mjs.map +2 -2
- package/build-module/field-types/utils/is-valid-date-boundary.mjs +38 -0
- package/build-module/field-types/utils/is-valid-date-boundary.mjs.map +7 -0
- package/build-module/hooks/index.mjs +7 -1
- package/build-module/hooks/index.mjs.map +2 -2
- package/build-module/hooks/use-data.mjs +147 -10
- package/build-module/hooks/use-data.mjs.map +2 -2
- package/build-module/hooks/use-infinite-scroll.mjs +188 -0
- package/build-module/hooks/use-infinite-scroll.mjs.map +7 -0
- package/build-module/hooks/use-selected-items.mjs +36 -0
- package/build-module/hooks/use-selected-items.mjs.map +7 -0
- package/build-module/utils/filter-sort-and-paginate.mjs +5 -1
- package/build-module/utils/filter-sort-and-paginate.mjs.map +2 -2
- package/build-module/utils/get-footer-message.mjs +8 -8
- package/build-module/utils/get-footer-message.mjs.map +2 -2
- package/build-style/style-rtl.css +75 -52
- package/build-style/style.css +75 -52
- package/build-types/components/dataform-controls/array.d.ts.map +1 -1
- package/build-types/components/dataform-controls/checkbox.d.ts.map +1 -1
- package/build-types/components/dataform-controls/color.d.ts.map +1 -1
- package/build-types/components/dataform-controls/date.d.ts.map +1 -1
- package/build-types/components/dataform-controls/datetime.d.ts +1 -1
- package/build-types/components/dataform-controls/datetime.d.ts.map +1 -1
- package/build-types/components/dataform-controls/password.d.ts.map +1 -1
- package/build-types/components/dataform-controls/radio.d.ts.map +1 -1
- package/build-types/components/dataform-controls/select.d.ts.map +1 -1
- package/build-types/components/dataform-controls/textarea.d.ts.map +1 -1
- package/build-types/components/dataform-controls/toggle-group.d.ts.map +1 -1
- package/build-types/components/dataform-controls/toggle.d.ts.map +1 -1
- package/build-types/components/dataform-controls/utils/relative-date-control.d.ts.map +1 -1
- package/build-types/components/dataform-controls/utils/use-disabled-date-matchers.d.ts +16 -0
- package/build-types/components/dataform-controls/utils/use-disabled-date-matchers.d.ts.map +1 -0
- package/build-types/components/dataform-controls/utils/validated-input.d.ts.map +1 -1
- package/build-types/components/dataform-controls/utils/validated-number.d.ts.map +1 -1
- package/build-types/components/dataform-layouts/card/index.d.ts.map +1 -1
- package/build-types/components/dataform-layouts/panel/summary-button.d.ts.map +1 -1
- package/build-types/components/dataviews-bulk-actions/index.d.ts +2 -1
- package/build-types/components/dataviews-bulk-actions/index.d.ts.map +1 -1
- package/build-types/components/dataviews-context/index.d.ts +3 -3
- package/build-types/components/dataviews-context/index.d.ts.map +1 -1
- package/build-types/components/dataviews-filters/input-widget.d.ts.map +1 -1
- package/build-types/components/dataviews-footer/index.d.ts.map +1 -1
- package/build-types/components/dataviews-layouts/grid/composite-grid.d.ts.map +1 -1
- package/build-types/components/dataviews-layouts/index.d.ts +6 -6
- package/build-types/components/dataviews-layouts/picker-grid/index.d.ts.map +1 -1
- package/build-types/components/dataviews-layouts/picker-table/index.d.ts.map +1 -1
- package/build-types/components/dataviews-layouts/table/index.d.ts.map +1 -1
- package/build-types/components/dataviews-layouts/utils/use-infinite-scroll.d.ts +22 -0
- package/build-types/components/dataviews-layouts/utils/use-infinite-scroll.d.ts.map +1 -0
- package/build-types/components/dataviews-pagination/index.d.ts.map +1 -1
- package/build-types/components/dataviews-picker-footer/index.d.ts.map +1 -1
- package/build-types/components/dataviews-search/index.d.ts +1 -1
- package/build-types/components/dataviews-search/index.d.ts.map +1 -1
- package/build-types/components/dataviews-selection-checkbox/index.d.ts.map +1 -1
- package/build-types/components/dataviews-view-config/index.d.ts.map +1 -1
- package/build-types/components/dataviews-view-config/infinite-scroll-toggle.d.ts +1 -1
- package/build-types/components/dataviews-view-config/infinite-scroll-toggle.d.ts.map +1 -1
- package/build-types/constants.d.ts +2 -2
- package/build-types/dataform/stories/index.story.d.ts +11 -1
- package/build-types/dataform/stories/index.story.d.ts.map +1 -1
- package/build-types/dataform/stories/layout-regular.d.ts +2 -1
- package/build-types/dataform/stories/layout-regular.d.ts.map +1 -1
- package/build-types/dataform/stories/validation.d.ts.map +1 -1
- package/build-types/dataviews/index.d.ts +1 -2
- package/build-types/dataviews/index.d.ts.map +1 -1
- package/build-types/dataviews/stories/fixtures.d.ts.map +1 -1
- package/build-types/dataviews/stories/free-composition.d.ts.map +1 -1
- package/build-types/dataviews/stories/index.story.d.ts +11 -0
- package/build-types/dataviews/stories/index.story.d.ts.map +1 -1
- package/build-types/dataviews/stories/infinite-scroll.d.ts.map +1 -1
- package/build-types/dataviews/stories/with-card.d.ts.map +1 -1
- package/build-types/dataviews-picker/index.d.ts +3 -3
- package/build-types/dataviews-picker/index.d.ts.map +1 -1
- package/build-types/dataviews-picker/stories/fixtures.d.ts.map +1 -1
- package/build-types/dataviews-picker/stories/index.story.d.ts.map +1 -1
- package/build-types/field-types/array.d.ts +1 -1
- package/build-types/field-types/array.d.ts.map +1 -1
- package/build-types/field-types/boolean.d.ts +1 -1
- package/build-types/field-types/boolean.d.ts.map +1 -1
- package/build-types/field-types/color.d.ts +1 -1
- package/build-types/field-types/color.d.ts.map +1 -1
- package/build-types/field-types/date.d.ts +3 -0
- package/build-types/field-types/date.d.ts.map +1 -1
- package/build-types/field-types/datetime.d.ts +3 -0
- package/build-types/field-types/datetime.d.ts.map +1 -1
- package/build-types/field-types/email.d.ts +1 -1
- package/build-types/field-types/email.d.ts.map +1 -1
- package/build-types/field-types/index.d.ts.map +1 -1
- package/build-types/field-types/integer.d.ts +1 -1
- package/build-types/field-types/integer.d.ts.map +1 -1
- package/build-types/field-types/number.d.ts +1 -1
- package/build-types/field-types/number.d.ts.map +1 -1
- package/build-types/field-types/stories/index.story.d.ts +37 -15
- package/build-types/field-types/stories/index.story.d.ts.map +1 -1
- package/build-types/field-types/utils/get-is-valid.d.ts.map +1 -1
- package/build-types/field-types/utils/is-valid-date-boundary.d.ts +7 -0
- package/build-types/field-types/utils/is-valid-date-boundary.d.ts.map +1 -0
- package/build-types/hooks/index.d.ts +3 -0
- package/build-types/hooks/index.d.ts.map +1 -1
- package/build-types/hooks/test/use-data.d.ts +2 -0
- package/build-types/hooks/test/use-data.d.ts.map +1 -0
- package/build-types/hooks/use-data.d.ts +41 -3
- package/build-types/hooks/use-data.d.ts.map +1 -1
- package/build-types/hooks/use-infinite-scroll.d.ts +21 -0
- package/build-types/hooks/use-infinite-scroll.d.ts.map +1 -0
- package/build-types/hooks/use-selected-items.d.ts +19 -0
- package/build-types/hooks/use-selected-items.d.ts.map +1 -0
- package/build-types/types/dataviews.d.ts +15 -1
- package/build-types/types/dataviews.d.ts.map +1 -1
- package/build-types/types/field-api.d.ts +39 -13
- package/build-types/types/field-api.d.ts.map +1 -1
- package/build-types/utils/filter-sort-and-paginate.d.ts.map +1 -1
- package/build-types/utils/get-footer-message.d.ts +3 -2
- package/build-types/utils/get-footer-message.d.ts.map +1 -1
- package/build-wp/index.js +3264 -2713
- package/package.json +19 -19
- package/src/components/dataform-controls/array.tsx +2 -0
- package/src/components/dataform-controls/checkbox.tsx +2 -0
- package/src/components/dataform-controls/color.tsx +7 -0
- package/src/components/dataform-controls/date.tsx +30 -4
- package/src/components/dataform-controls/datetime.tsx +36 -11
- package/src/components/dataform-controls/password.tsx +3 -0
- package/src/components/dataform-controls/radio.tsx +2 -0
- package/src/components/dataform-controls/select.tsx +2 -0
- package/src/components/dataform-controls/textarea.tsx +2 -0
- package/src/components/dataform-controls/toggle-group.tsx +2 -0
- package/src/components/dataform-controls/toggle.tsx +2 -0
- package/src/components/dataform-controls/utils/relative-date-control.tsx +3 -0
- package/src/components/dataform-controls/utils/use-disabled-date-matchers.ts +48 -0
- package/src/components/dataform-controls/utils/validated-input.tsx +2 -0
- package/src/components/dataform-controls/utils/validated-number.tsx +2 -0
- package/src/components/dataform-layouts/card/index.tsx +171 -146
- package/src/components/dataform-layouts/card/style.scss +8 -5
- package/src/components/dataform-layouts/panel/style.scss +4 -5
- package/src/components/dataform-layouts/panel/summary-button.tsx +0 -1
- package/src/components/dataviews-bulk-actions/index.tsx +28 -1
- package/src/components/dataviews-context/index.ts +4 -4
- package/src/components/dataviews-filters/input-widget.tsx +4 -0
- package/src/components/dataviews-filters/style.scss +2 -2
- package/src/components/dataviews-footer/index.tsx +1 -6
- package/src/components/dataviews-layouts/activity/style.scss +3 -3
- package/src/components/dataviews-layouts/grid/composite-grid.tsx +433 -284
- package/src/components/dataviews-layouts/grid/style.scss +5 -1
- package/src/components/dataviews-layouts/list/style.scss +1 -1
- package/src/components/dataviews-layouts/picker-grid/index.tsx +49 -15
- package/src/components/dataviews-layouts/picker-grid/style.scss +1 -1
- package/src/components/dataviews-layouts/picker-table/index.tsx +45 -23
- package/src/components/dataviews-layouts/picker-table/style.scss +1 -1
- package/src/components/dataviews-layouts/table/index.tsx +0 -2
- package/src/components/dataviews-layouts/utils/use-infinite-scroll.ts +64 -0
- package/src/components/dataviews-pagination/index.tsx +1 -0
- package/src/components/dataviews-picker-footer/index.tsx +21 -1
- package/src/components/dataviews-search/index.tsx +2 -1
- package/src/components/dataviews-selection-checkbox/index.tsx +4 -2
- package/src/components/dataviews-view-config/index.tsx +0 -2
- package/src/components/dataviews-view-config/infinite-scroll-toggle.tsx +0 -5
- package/src/dataform/stories/content.story.tsx +1 -1
- package/src/dataform/stories/data-adapter.tsx +6 -6
- package/src/dataform/stories/index.story.tsx +7 -0
- package/src/dataform/stories/layout-card.tsx +5 -5
- package/src/dataform/stories/layout-details.tsx +5 -5
- package/src/dataform/stories/layout-panel.tsx +9 -9
- package/src/dataform/stories/layout-regular.tsx +31 -10
- package/src/dataform/stories/layout-row.tsx +9 -9
- package/src/dataform/stories/validation.tsx +25 -10
- package/src/dataviews/index.tsx +68 -59
- package/src/dataviews/stories/empty.tsx +4 -4
- package/src/dataviews/stories/fixtures.tsx +288 -0
- package/src/dataviews/stories/free-composition.tsx +14 -13
- package/src/dataviews/stories/index.story.tsx +19 -2
- package/src/dataviews/stories/infinite-scroll.tsx +16 -96
- package/src/dataviews/stories/layout-custom.tsx +1 -1
- package/src/dataviews/stories/layout-grid.tsx +1 -1
- package/src/dataviews/stories/layout-list.tsx +1 -1
- package/src/dataviews/stories/layout-table.tsx +1 -1
- package/src/dataviews/stories/minimal-ui.tsx +1 -1
- package/src/dataviews/stories/with-card.tsx +30 -23
- package/src/dataviews/style.scss +6 -8
- package/src/dataviews/test/dataviews.tsx +94 -15
- package/src/dataviews-picker/index.tsx +57 -41
- package/src/dataviews-picker/stories/fixtures.tsx +270 -0
- package/src/dataviews-picker/stories/index.story.tsx +62 -133
- package/src/dataviews-picker/test/dataviews-picker.tsx +79 -2
- package/src/field-types/date.tsx +3 -0
- package/src/field-types/datetime.tsx +3 -0
- package/src/field-types/index.tsx +4 -0
- package/src/field-types/stories/index.story.tsx +79 -6
- package/src/field-types/test/normalize-fields.ts +44 -0
- package/src/field-types/utils/get-is-valid.ts +44 -31
- package/src/field-types/utils/is-valid-date-boundary.ts +80 -0
- package/src/hooks/index.ts +3 -0
- package/src/hooks/test/use-data.ts +791 -0
- package/src/hooks/test/use-form-validity.ts +479 -0
- package/src/hooks/use-data.ts +288 -21
- package/src/hooks/use-infinite-scroll.ts +304 -0
- package/src/hooks/use-selected-items.ts +72 -0
- package/src/types/dataviews.ts +17 -1
- package/src/types/field-api.ts +43 -12
- package/src/utils/filter-sort-and-paginate.ts +13 -1
- package/src/utils/get-footer-message.ts +12 -9
- package/src/utils/test/filter-sort-and-paginate.js +78 -54
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/field-types/date.tsx"],
|
|
4
|
-
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { dateI18n, getDate, getSettings } from '@wordpress/date';\n\n/**\n * Internal dependencies\n */\nimport type { FormatDate, NormalizedField, SortDirection } from '../types';\nimport type { FieldType } from '../types/private';\nimport isValidElements from './utils/is-valid-elements';\nimport {\n\tOPERATOR_ON,\n\tOPERATOR_NOT_ON,\n\tOPERATOR_BEFORE,\n\tOPERATOR_AFTER,\n\tOPERATOR_BEFORE_INC,\n\tOPERATOR_AFTER_INC,\n\tOPERATOR_IN_THE_PAST,\n\tOPERATOR_OVER,\n\tOPERATOR_BETWEEN,\n} from '../constants';\nimport isValidRequired from './utils/is-valid-required';\nimport render from './utils/render-default';\n\nconst format = {\n\tdate: getSettings().formats.date,\n\tweekStartsOn: getSettings().l10n.startOfWeek,\n};\n\nfunction getValueFormatted< Item >( {\n\titem,\n\tfield,\n}: {\n\titem: Item;\n\tfield: NormalizedField< Item >;\n} ): string {\n\tconst value = field.getValue( { item } );\n\tif ( [ '', undefined, null ].includes( value ) ) {\n\t\treturn '';\n\t}\n\n\tlet formatDate: Required< FormatDate >;\n\tif ( field.type !== 'date' ) {\n\t\tformatDate = format;\n\t} else {\n\t\tformatDate = field.format as Required< FormatDate >;\n\t}\n\n\treturn dateI18n( formatDate.date, getDate( value ) );\n}\n\nconst sort = ( a: any, b: any, direction: SortDirection ) => {\n\tconst timeA = new Date( a ).getTime();\n\tconst timeB = new Date( b ).getTime();\n\n\treturn direction === 'asc' ? timeA - timeB : timeB - timeA;\n};\n\nexport default {\n\ttype: 'date',\n\trender,\n\tEdit: 'date',\n\tsort,\n\tenableSorting: true,\n\tenableGlobalSearch: false,\n\tdefaultOperators: [\n\t\tOPERATOR_ON,\n\t\tOPERATOR_NOT_ON,\n\t\tOPERATOR_BEFORE,\n\t\tOPERATOR_AFTER,\n\t\tOPERATOR_BEFORE_INC,\n\t\tOPERATOR_AFTER_INC,\n\t\tOPERATOR_IN_THE_PAST,\n\t\tOPERATOR_OVER,\n\t\tOPERATOR_BETWEEN,\n\t],\n\tvalidOperators: [\n\t\tOPERATOR_ON,\n\t\tOPERATOR_NOT_ON,\n\t\tOPERATOR_BEFORE,\n\t\tOPERATOR_AFTER,\n\t\tOPERATOR_BEFORE_INC,\n\t\tOPERATOR_AFTER_INC,\n\t\tOPERATOR_IN_THE_PAST,\n\t\tOPERATOR_OVER,\n\t\tOPERATOR_BETWEEN,\n\t],\n\tformat,\n\tgetValueFormatted,\n\tvalidate: {\n\t\trequired: isValidRequired,\n\t\telements: isValidElements,\n\t},\n} satisfies FieldType< any >;\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAA+C;AAO/C,+BAA4B;AAC5B,uBAUO;AACP,+BAA4B;AAC5B,4BAAmB;AAEnB,IAAM,SAAS;AAAA,EACd,UAAM,yBAAY,EAAE,QAAQ;AAAA,EAC5B,kBAAc,yBAAY,EAAE,KAAK;AAClC;AAEA,SAAS,kBAA2B;AAAA,EACnC;AAAA,EACA;AACD,GAGY;AACX,QAAM,QAAQ,MAAM,SAAU,EAAE,KAAK,CAAE;AACvC,MAAK,CAAE,IAAI,QAAW,IAAK,EAAE,SAAU,KAAM,GAAI;AAChD,WAAO;AAAA,EACR;AAEA,MAAI;AACJ,MAAK,MAAM,SAAS,QAAS;AAC5B,iBAAa;AAAA,EACd,OAAO;AACN,iBAAa,MAAM;AAAA,EACpB;AAEA,aAAO,sBAAU,WAAW,UAAM,qBAAS,KAAM,CAAE;AACpD;AAEA,IAAM,OAAO,CAAE,GAAQ,GAAQ,cAA8B;AAC5D,QAAM,QAAQ,IAAI,KAAM,CAAE,EAAE,QAAQ;AACpC,QAAM,QAAQ,IAAI,KAAM,CAAE,EAAE,QAAQ;AAEpC,SAAO,cAAc,QAAQ,QAAQ,QAAQ,QAAQ;AACtD;AAEA,IAAO,eAAQ;AAAA,EACd,MAAM;AAAA,EACN,8BAAAA;AAAA,EACA,MAAM;AAAA,EACN;AAAA,EACA,eAAe;AAAA,EACf,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,gBAAgB;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,IACT,UAAU,yBAAAC;AAAA,IACV,UAAU,yBAAAC;AAAA,
|
|
4
|
+
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { dateI18n, getDate, getSettings } from '@wordpress/date';\n\n/**\n * Internal dependencies\n */\nimport type { FormatDate, NormalizedField, SortDirection } from '../types';\nimport type { FieldType } from '../types/private';\nimport isValidElements from './utils/is-valid-elements';\nimport {\n\tOPERATOR_ON,\n\tOPERATOR_NOT_ON,\n\tOPERATOR_BEFORE,\n\tOPERATOR_AFTER,\n\tOPERATOR_BEFORE_INC,\n\tOPERATOR_AFTER_INC,\n\tOPERATOR_IN_THE_PAST,\n\tOPERATOR_OVER,\n\tOPERATOR_BETWEEN,\n} from '../constants';\nimport isValidRequired from './utils/is-valid-required';\nimport { isValidMaxDate, isValidMinDate } from './utils/is-valid-date-boundary';\nimport render from './utils/render-default';\n\nconst format = {\n\tdate: getSettings().formats.date,\n\tweekStartsOn: getSettings().l10n.startOfWeek,\n};\n\nfunction getValueFormatted< Item >( {\n\titem,\n\tfield,\n}: {\n\titem: Item;\n\tfield: NormalizedField< Item >;\n} ): string {\n\tconst value = field.getValue( { item } );\n\tif ( [ '', undefined, null ].includes( value ) ) {\n\t\treturn '';\n\t}\n\n\tlet formatDate: Required< FormatDate >;\n\tif ( field.type !== 'date' ) {\n\t\tformatDate = format;\n\t} else {\n\t\tformatDate = field.format as Required< FormatDate >;\n\t}\n\n\treturn dateI18n( formatDate.date, getDate( value ) );\n}\n\nconst sort = ( a: any, b: any, direction: SortDirection ) => {\n\tconst timeA = new Date( a ).getTime();\n\tconst timeB = new Date( b ).getTime();\n\n\treturn direction === 'asc' ? timeA - timeB : timeB - timeA;\n};\n\nexport default {\n\ttype: 'date',\n\trender,\n\tEdit: 'date',\n\tsort,\n\tenableSorting: true,\n\tenableGlobalSearch: false,\n\tdefaultOperators: [\n\t\tOPERATOR_ON,\n\t\tOPERATOR_NOT_ON,\n\t\tOPERATOR_BEFORE,\n\t\tOPERATOR_AFTER,\n\t\tOPERATOR_BEFORE_INC,\n\t\tOPERATOR_AFTER_INC,\n\t\tOPERATOR_IN_THE_PAST,\n\t\tOPERATOR_OVER,\n\t\tOPERATOR_BETWEEN,\n\t],\n\tvalidOperators: [\n\t\tOPERATOR_ON,\n\t\tOPERATOR_NOT_ON,\n\t\tOPERATOR_BEFORE,\n\t\tOPERATOR_AFTER,\n\t\tOPERATOR_BEFORE_INC,\n\t\tOPERATOR_AFTER_INC,\n\t\tOPERATOR_IN_THE_PAST,\n\t\tOPERATOR_OVER,\n\t\tOPERATOR_BETWEEN,\n\t],\n\tformat,\n\tgetValueFormatted,\n\tvalidate: {\n\t\trequired: isValidRequired,\n\t\telements: isValidElements,\n\t\tmin: isValidMinDate,\n\t\tmax: isValidMaxDate,\n\t},\n} satisfies FieldType< any >;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAA+C;AAO/C,+BAA4B;AAC5B,uBAUO;AACP,+BAA4B;AAC5B,oCAA+C;AAC/C,4BAAmB;AAEnB,IAAM,SAAS;AAAA,EACd,UAAM,yBAAY,EAAE,QAAQ;AAAA,EAC5B,kBAAc,yBAAY,EAAE,KAAK;AAClC;AAEA,SAAS,kBAA2B;AAAA,EACnC;AAAA,EACA;AACD,GAGY;AACX,QAAM,QAAQ,MAAM,SAAU,EAAE,KAAK,CAAE;AACvC,MAAK,CAAE,IAAI,QAAW,IAAK,EAAE,SAAU,KAAM,GAAI;AAChD,WAAO;AAAA,EACR;AAEA,MAAI;AACJ,MAAK,MAAM,SAAS,QAAS;AAC5B,iBAAa;AAAA,EACd,OAAO;AACN,iBAAa,MAAM;AAAA,EACpB;AAEA,aAAO,sBAAU,WAAW,UAAM,qBAAS,KAAM,CAAE;AACpD;AAEA,IAAM,OAAO,CAAE,GAAQ,GAAQ,cAA8B;AAC5D,QAAM,QAAQ,IAAI,KAAM,CAAE,EAAE,QAAQ;AACpC,QAAM,QAAQ,IAAI,KAAM,CAAE,EAAE,QAAQ;AAEpC,SAAO,cAAc,QAAQ,QAAQ,QAAQ,QAAQ;AACtD;AAEA,IAAO,eAAQ;AAAA,EACd,MAAM;AAAA,EACN,8BAAAA;AAAA,EACA,MAAM;AAAA,EACN;AAAA,EACA,eAAe;AAAA,EACf,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,gBAAgB;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,IACT,UAAU,yBAAAC;AAAA,IACV,UAAU,yBAAAC;AAAA,IACV,KAAK;AAAA,IACL,KAAK;AAAA,EACN;AACD;",
|
|
6
6
|
"names": ["render", "isValidRequired", "isValidElements"]
|
|
7
7
|
}
|
|
@@ -37,6 +37,7 @@ var import_date = require("@wordpress/date");
|
|
|
37
37
|
var import_is_valid_elements = __toESM(require("./utils/is-valid-elements.cjs"));
|
|
38
38
|
var import_constants = require("../constants.cjs");
|
|
39
39
|
var import_is_valid_required = __toESM(require("./utils/is-valid-required.cjs"));
|
|
40
|
+
var import_is_valid_date_boundary = require("./utils/is-valid-date-boundary.cjs");
|
|
40
41
|
var import_render_default = __toESM(require("./utils/render-default.cjs"));
|
|
41
42
|
var format = {
|
|
42
43
|
datetime: (0, import_date.getSettings)().formats.datetime,
|
|
@@ -94,7 +95,9 @@ var datetime_default = {
|
|
|
94
95
|
getValueFormatted,
|
|
95
96
|
validate: {
|
|
96
97
|
required: import_is_valid_required.default,
|
|
97
|
-
elements: import_is_valid_elements.default
|
|
98
|
+
elements: import_is_valid_elements.default,
|
|
99
|
+
min: import_is_valid_date_boundary.isValidMinDate,
|
|
100
|
+
max: import_is_valid_date_boundary.isValidMaxDate
|
|
98
101
|
}
|
|
99
102
|
};
|
|
100
103
|
//# sourceMappingURL=datetime.cjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/field-types/datetime.tsx"],
|
|
4
|
-
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { dateI18n, getDate, getSettings } from '@wordpress/date';\n\n/**\n * Internal dependencies\n */\nimport type { FormatDatetime, NormalizedField, SortDirection } from '../types';\nimport type { FieldType } from '../types/private';\nimport isValidElements from './utils/is-valid-elements';\nimport {\n\tOPERATOR_ON,\n\tOPERATOR_NOT_ON,\n\tOPERATOR_BEFORE,\n\tOPERATOR_AFTER,\n\tOPERATOR_BEFORE_INC,\n\tOPERATOR_AFTER_INC,\n\tOPERATOR_IN_THE_PAST,\n\tOPERATOR_OVER,\n} from '../constants';\nimport isValidRequired from './utils/is-valid-required';\nimport render from './utils/render-default';\n\nconst format = {\n\tdatetime: getSettings().formats.datetime,\n\tweekStartsOn: getSettings().l10n.startOfWeek,\n};\n\nfunction getValueFormatted< Item >( {\n\titem,\n\tfield,\n}: {\n\titem: Item;\n\tfield: NormalizedField< Item >;\n} ): string {\n\tconst value = field.getValue( { item } );\n\tif ( [ '', undefined, null ].includes( value ) ) {\n\t\treturn '';\n\t}\n\n\tlet formatDatetime: Required< FormatDatetime >;\n\tif ( field.type !== 'datetime' ) {\n\t\tformatDatetime = format;\n\t} else {\n\t\tformatDatetime = field.format as Required< FormatDatetime >;\n\t}\n\n\treturn dateI18n( formatDatetime.datetime, getDate( value ) );\n}\n\nconst sort = ( a: any, b: any, direction: SortDirection ) => {\n\tconst timeA = new Date( a ).getTime();\n\tconst timeB = new Date( b ).getTime();\n\n\treturn direction === 'asc' ? timeA - timeB : timeB - timeA;\n};\n\nexport default {\n\ttype: 'datetime',\n\trender,\n\tEdit: 'datetime',\n\tsort,\n\tenableSorting: true,\n\tenableGlobalSearch: false,\n\tdefaultOperators: [\n\t\tOPERATOR_ON,\n\t\tOPERATOR_NOT_ON,\n\t\tOPERATOR_BEFORE,\n\t\tOPERATOR_AFTER,\n\t\tOPERATOR_BEFORE_INC,\n\t\tOPERATOR_AFTER_INC,\n\t\tOPERATOR_IN_THE_PAST,\n\t\tOPERATOR_OVER,\n\t],\n\tvalidOperators: [\n\t\tOPERATOR_ON,\n\t\tOPERATOR_NOT_ON,\n\t\tOPERATOR_BEFORE,\n\t\tOPERATOR_AFTER,\n\t\tOPERATOR_BEFORE_INC,\n\t\tOPERATOR_AFTER_INC,\n\t\tOPERATOR_IN_THE_PAST,\n\t\tOPERATOR_OVER,\n\t],\n\tformat,\n\tgetValueFormatted,\n\tvalidate: {\n\t\trequired: isValidRequired,\n\t\telements: isValidElements,\n\t},\n} satisfies FieldType< any >;\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAA+C;AAO/C,+BAA4B;AAC5B,uBASO;AACP,+BAA4B;AAC5B,4BAAmB;AAEnB,IAAM,SAAS;AAAA,EACd,cAAU,yBAAY,EAAE,QAAQ;AAAA,EAChC,kBAAc,yBAAY,EAAE,KAAK;AAClC;AAEA,SAAS,kBAA2B;AAAA,EACnC;AAAA,EACA;AACD,GAGY;AACX,QAAM,QAAQ,MAAM,SAAU,EAAE,KAAK,CAAE;AACvC,MAAK,CAAE,IAAI,QAAW,IAAK,EAAE,SAAU,KAAM,GAAI;AAChD,WAAO;AAAA,EACR;AAEA,MAAI;AACJ,MAAK,MAAM,SAAS,YAAa;AAChC,qBAAiB;AAAA,EAClB,OAAO;AACN,qBAAiB,MAAM;AAAA,EACxB;AAEA,aAAO,sBAAU,eAAe,cAAU,qBAAS,KAAM,CAAE;AAC5D;AAEA,IAAM,OAAO,CAAE,GAAQ,GAAQ,cAA8B;AAC5D,QAAM,QAAQ,IAAI,KAAM,CAAE,EAAE,QAAQ;AACpC,QAAM,QAAQ,IAAI,KAAM,CAAE,EAAE,QAAQ;AAEpC,SAAO,cAAc,QAAQ,QAAQ,QAAQ,QAAQ;AACtD;AAEA,IAAO,mBAAQ;AAAA,EACd,MAAM;AAAA,EACN,8BAAAA;AAAA,EACA,MAAM;AAAA,EACN;AAAA,EACA,eAAe;AAAA,EACf,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,gBAAgB;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,IACT,UAAU,yBAAAC;AAAA,IACV,UAAU,yBAAAC;AAAA,
|
|
4
|
+
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { dateI18n, getDate, getSettings } from '@wordpress/date';\n\n/**\n * Internal dependencies\n */\nimport type { FormatDatetime, NormalizedField, SortDirection } from '../types';\nimport type { FieldType } from '../types/private';\nimport isValidElements from './utils/is-valid-elements';\nimport {\n\tOPERATOR_ON,\n\tOPERATOR_NOT_ON,\n\tOPERATOR_BEFORE,\n\tOPERATOR_AFTER,\n\tOPERATOR_BEFORE_INC,\n\tOPERATOR_AFTER_INC,\n\tOPERATOR_IN_THE_PAST,\n\tOPERATOR_OVER,\n} from '../constants';\nimport isValidRequired from './utils/is-valid-required';\nimport { isValidMaxDate, isValidMinDate } from './utils/is-valid-date-boundary';\nimport render from './utils/render-default';\n\nconst format = {\n\tdatetime: getSettings().formats.datetime,\n\tweekStartsOn: getSettings().l10n.startOfWeek,\n};\n\nfunction getValueFormatted< Item >( {\n\titem,\n\tfield,\n}: {\n\titem: Item;\n\tfield: NormalizedField< Item >;\n} ): string {\n\tconst value = field.getValue( { item } );\n\tif ( [ '', undefined, null ].includes( value ) ) {\n\t\treturn '';\n\t}\n\n\tlet formatDatetime: Required< FormatDatetime >;\n\tif ( field.type !== 'datetime' ) {\n\t\tformatDatetime = format;\n\t} else {\n\t\tformatDatetime = field.format as Required< FormatDatetime >;\n\t}\n\n\treturn dateI18n( formatDatetime.datetime, getDate( value ) );\n}\n\nconst sort = ( a: any, b: any, direction: SortDirection ) => {\n\tconst timeA = new Date( a ).getTime();\n\tconst timeB = new Date( b ).getTime();\n\n\treturn direction === 'asc' ? timeA - timeB : timeB - timeA;\n};\n\nexport default {\n\ttype: 'datetime',\n\trender,\n\tEdit: 'datetime',\n\tsort,\n\tenableSorting: true,\n\tenableGlobalSearch: false,\n\tdefaultOperators: [\n\t\tOPERATOR_ON,\n\t\tOPERATOR_NOT_ON,\n\t\tOPERATOR_BEFORE,\n\t\tOPERATOR_AFTER,\n\t\tOPERATOR_BEFORE_INC,\n\t\tOPERATOR_AFTER_INC,\n\t\tOPERATOR_IN_THE_PAST,\n\t\tOPERATOR_OVER,\n\t],\n\tvalidOperators: [\n\t\tOPERATOR_ON,\n\t\tOPERATOR_NOT_ON,\n\t\tOPERATOR_BEFORE,\n\t\tOPERATOR_AFTER,\n\t\tOPERATOR_BEFORE_INC,\n\t\tOPERATOR_AFTER_INC,\n\t\tOPERATOR_IN_THE_PAST,\n\t\tOPERATOR_OVER,\n\t],\n\tformat,\n\tgetValueFormatted,\n\tvalidate: {\n\t\trequired: isValidRequired,\n\t\telements: isValidElements,\n\t\tmin: isValidMinDate,\n\t\tmax: isValidMaxDate,\n\t},\n} satisfies FieldType< any >;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAA+C;AAO/C,+BAA4B;AAC5B,uBASO;AACP,+BAA4B;AAC5B,oCAA+C;AAC/C,4BAAmB;AAEnB,IAAM,SAAS;AAAA,EACd,cAAU,yBAAY,EAAE,QAAQ;AAAA,EAChC,kBAAc,yBAAY,EAAE,KAAK;AAClC;AAEA,SAAS,kBAA2B;AAAA,EACnC;AAAA,EACA;AACD,GAGY;AACX,QAAM,QAAQ,MAAM,SAAU,EAAE,KAAK,CAAE;AACvC,MAAK,CAAE,IAAI,QAAW,IAAK,EAAE,SAAU,KAAM,GAAI;AAChD,WAAO;AAAA,EACR;AAEA,MAAI;AACJ,MAAK,MAAM,SAAS,YAAa;AAChC,qBAAiB;AAAA,EAClB,OAAO;AACN,qBAAiB,MAAM;AAAA,EACxB;AAEA,aAAO,sBAAU,eAAe,cAAU,qBAAS,KAAM,CAAE;AAC5D;AAEA,IAAM,OAAO,CAAE,GAAQ,GAAQ,cAA8B;AAC5D,QAAM,QAAQ,IAAI,KAAM,CAAE,EAAE,QAAQ;AACpC,QAAM,QAAQ,IAAI,KAAM,CAAE,EAAE,QAAQ;AAEpC,SAAO,cAAc,QAAQ,QAAQ,QAAQ,QAAQ;AACtD;AAEA,IAAO,mBAAQ;AAAA,EACd,MAAM;AAAA,EACN,8BAAAA;AAAA,EACA,MAAM;AAAA,EACN;AAAA,EACA,eAAe;AAAA,EACf,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,gBAAgB;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,IACT,UAAU,yBAAAC;AAAA,IACV,UAAU,yBAAAC;AAAA,IACV,KAAK;AAAA,IACL,KAAK;AAAA,EACN;AACD;",
|
|
6
6
|
"names": ["render", "isValidRequired", "isValidElements"]
|
|
7
7
|
}
|
|
@@ -97,6 +97,7 @@ function normalizeFields(fields) {
|
|
|
97
97
|
getElements: field.getElements,
|
|
98
98
|
hasElements: (0, import_has_elements.default)(field),
|
|
99
99
|
isVisible: field.isVisible,
|
|
100
|
+
isDisabled: typeof field.isDisabled === "function" ? field.isDisabled : () => !!field.isDisabled,
|
|
100
101
|
enableHiding: field.enableHiding ?? true,
|
|
101
102
|
readOnly: field.readOnly ?? false,
|
|
102
103
|
// The type provides defaults for the following props
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/field-types/index.tsx"],
|
|
4
|
-
"sourcesContent": ["/**\n * Internal dependencies\n */\nimport type {\n\tField,\n\tFieldTypeName,\n\tNormalizedField,\n\tSortDirection,\n} from '../types';\nimport type { FieldType } from '../types/private';\nimport { getControl } from '../components/dataform-controls';\nimport getFilterBy from './utils/get-filter-by';\nimport getValueFromId from './utils/get-value-from-id';\nimport hasElements from './utils/has-elements';\nimport setValueFromId from './utils/set-value-from-id';\nimport { default as email } from './email';\nimport { default as integer } from './integer';\nimport { default as number } from './number';\nimport { default as text } from './text';\nimport { default as datetime } from './datetime';\nimport { default as date } from './date';\nimport { default as boolean } from './boolean';\nimport { default as media } from './media';\nimport { default as array } from './array';\nimport { default as password } from './password';\nimport { default as telephone } from './telephone';\nimport { default as color } from './color';\nimport { default as url } from './url';\nimport { default as noType } from './no-type';\nimport getIsValid from './utils/get-is-valid';\nimport getFilter from './utils/get-filter';\nimport getFormat from './utils/get-format';\n\n/**\n *\n * @param {FieldTypeName} type The field type definition to get.\n *\n * @return A field type definition.\n */\nfunction getFieldTypeByName< Item >( type?: FieldTypeName ): FieldType< Item > {\n\tconst found = [\n\t\temail,\n\t\tinteger,\n\t\tnumber,\n\t\ttext,\n\t\tdatetime,\n\t\tdate,\n\t\tboolean,\n\t\tmedia,\n\t\tarray,\n\t\tpassword,\n\t\ttelephone,\n\t\tcolor,\n\t\turl,\n\t].find( ( fieldType ) => fieldType?.type === type );\n\n\tif ( !! found ) {\n\t\treturn found;\n\t}\n\n\t// This is a fallback for fields that don't provide a type.\n\t// It can be removed when/if the field.type becomes mandatory.\n\treturn noType;\n}\n\n/**\n * Apply default values and normalize the fields config.\n *\n * @param fields Fields config.\n * @return Normalized fields config.\n */\nexport default function normalizeFields< Item >(\n\tfields: Field< Item >[]\n): NormalizedField< Item >[] {\n\treturn fields.map( ( field ) => {\n\t\tconst fieldType = getFieldTypeByName< Item >( field.type );\n\n\t\tconst getValue = field.getValue || getValueFromId( field.id );\n\t\tconst sort = function ( a: any, b: any, direction: SortDirection ) {\n\t\t\tconst aValue = getValue( { item: a } );\n\t\t\tconst bValue = getValue( { item: b } );\n\t\t\treturn field.sort\n\t\t\t\t? field.sort( aValue, bValue, direction )\n\t\t\t\t: fieldType.sort( aValue, bValue, direction );\n\t\t};\n\n\t\treturn {\n\t\t\tid: field.id,\n\t\t\tlabel: field.label || field.id,\n\t\t\theader: field.header || field.label || field.id,\n\t\t\tdescription: field.description,\n\t\t\tplaceholder: field.placeholder,\n\t\t\tgetValue,\n\t\t\tsetValue: field.setValue || setValueFromId( field.id ),\n\t\t\telements: field.elements,\n\t\t\tgetElements: field.getElements,\n\t\t\thasElements: hasElements( field ),\n\t\t\tisVisible: field.isVisible,\n\t\t\tenableHiding: field.enableHiding ?? true,\n\t\t\treadOnly: field.readOnly ?? false,\n\t\t\t// The type provides defaults for the following props\n\t\t\ttype: fieldType.type,\n\t\t\trender: field.render ?? fieldType.render,\n\t\t\tEdit: getControl( field, fieldType.Edit ),\n\t\t\tsort,\n\t\t\tenableSorting: field.enableSorting ?? fieldType.enableSorting,\n\t\t\tenableGlobalSearch:\n\t\t\t\tfield.enableGlobalSearch ?? fieldType.enableGlobalSearch,\n\t\t\tisValid: getIsValid( field, fieldType ),\n\t\t\tfilterBy: getFilterBy(\n\t\t\t\tfield,\n\t\t\t\tfieldType.defaultOperators,\n\t\t\t\tfieldType.validOperators\n\t\t\t),\n\t\t\tfilter: getFilter( fieldType ),\n\t\t\tformat: getFormat( field, fieldType ),\n\t\t\tgetValueFormatted:\n\t\t\t\tfield.getValueFormatted ?? fieldType.getValueFormatted,\n\t\t};\n\t} );\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA,+BAA2B;AAC3B,2BAAwB;AACxB,+BAA2B;AAC3B,0BAAwB;AACxB,+BAA2B;AAC3B,mBAAiC;AACjC,qBAAmC;AACnC,oBAAkC;AAClC,kBAAgC;AAChC,sBAAoC;AACpC,kBAAgC;AAChC,qBAAmC;AACnC,mBAAiC;AACjC,mBAAiC;AACjC,sBAAoC;AACpC,uBAAqC;AACrC,mBAAiC;AACjC,iBAA+B;AAC/B,qBAAkC;AAClC,0BAAuB;AACvB,wBAAsB;AACtB,wBAAsB;AAQtB,SAAS,mBAA4B,MAA0C;AAC9E,QAAM,QAAQ;AAAA,IACb,aAAAA;AAAA,IACA,eAAAC;AAAA,IACA,cAAAC;AAAA,IACA,YAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,YAAAC;AAAA,IACA,eAAAC;AAAA,IACA,aAAAC;AAAA,IACA,aAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,aAAAC;AAAA,IACA,WAAAC;AAAA,EACD,EAAE,KAAM,CAAE,cAAe,WAAW,SAAS,IAAK;AAElD,MAAK,CAAC,CAAE,OAAQ;AACf,WAAO;AAAA,EACR;AAIA,SAAO,eAAAC;AACR;AAQe,SAAR,gBACN,QAC4B;AAC5B,SAAO,OAAO,IAAK,CAAE,UAAW;AAC/B,UAAM,YAAY,mBAA4B,MAAM,IAAK;AAEzD,UAAM,WAAW,MAAM,gBAAY,yBAAAC,SAAgB,MAAM,EAAG;AAC5D,UAAM,OAAO,SAAW,GAAQ,GAAQ,WAA2B;AAClE,YAAM,SAAS,SAAU,EAAE,MAAM,EAAE,CAAE;AACrC,YAAM,SAAS,SAAU,EAAE,MAAM,EAAE,CAAE;AACrC,aAAO,MAAM,OACV,MAAM,KAAM,QAAQ,QAAQ,SAAU,IACtC,UAAU,KAAM,QAAQ,QAAQ,SAAU;AAAA,IAC9C;AAEA,WAAO;AAAA,MACN,IAAI,MAAM;AAAA,MACV,OAAO,MAAM,SAAS,MAAM;AAAA,MAC5B,QAAQ,MAAM,UAAU,MAAM,SAAS,MAAM;AAAA,MAC7C,aAAa,MAAM;AAAA,MACnB,aAAa,MAAM;AAAA,MACnB;AAAA,MACA,UAAU,MAAM,gBAAY,yBAAAC,SAAgB,MAAM,EAAG;AAAA,MACrD,UAAU,MAAM;AAAA,MAChB,aAAa,MAAM;AAAA,MACnB,iBAAa,oBAAAC,SAAa,KAAM;AAAA,MAChC,WAAW,MAAM;AAAA,MACjB,cAAc,MAAM,gBAAgB;AAAA,MACpC,UAAU,MAAM,YAAY;AAAA;AAAA,MAE5B,MAAM,UAAU;AAAA,MAChB,QAAQ,MAAM,UAAU,UAAU;AAAA,MAClC,UAAM,qCAAY,OAAO,UAAU,IAAK;AAAA,MACxC;AAAA,MACA,eAAe,MAAM,iBAAiB,UAAU;AAAA,MAChD,oBACC,MAAM,sBAAsB,UAAU;AAAA,MACvC,aAAS,oBAAAC,SAAY,OAAO,SAAU;AAAA,MACtC,cAAU,qBAAAC;AAAA,QACT;AAAA,QACA,UAAU;AAAA,QACV,UAAU;AAAA,MACX;AAAA,MACA,YAAQ,kBAAAC,SAAW,SAAU;AAAA,MAC7B,YAAQ,kBAAAC,SAAW,OAAO,SAAU;AAAA,MACpC,mBACC,MAAM,qBAAqB,UAAU;AAAA,IACvC;AAAA,EACD,CAAE;AACH;",
|
|
4
|
+
"sourcesContent": ["/**\n * Internal dependencies\n */\nimport type {\n\tField,\n\tFieldTypeName,\n\tNormalizedField,\n\tSortDirection,\n} from '../types';\nimport type { FieldType } from '../types/private';\nimport { getControl } from '../components/dataform-controls';\nimport getFilterBy from './utils/get-filter-by';\nimport getValueFromId from './utils/get-value-from-id';\nimport hasElements from './utils/has-elements';\nimport setValueFromId from './utils/set-value-from-id';\nimport { default as email } from './email';\nimport { default as integer } from './integer';\nimport { default as number } from './number';\nimport { default as text } from './text';\nimport { default as datetime } from './datetime';\nimport { default as date } from './date';\nimport { default as boolean } from './boolean';\nimport { default as media } from './media';\nimport { default as array } from './array';\nimport { default as password } from './password';\nimport { default as telephone } from './telephone';\nimport { default as color } from './color';\nimport { default as url } from './url';\nimport { default as noType } from './no-type';\nimport getIsValid from './utils/get-is-valid';\nimport getFilter from './utils/get-filter';\nimport getFormat from './utils/get-format';\n\n/**\n *\n * @param {FieldTypeName} type The field type definition to get.\n *\n * @return A field type definition.\n */\nfunction getFieldTypeByName< Item >( type?: FieldTypeName ): FieldType< Item > {\n\tconst found = [\n\t\temail,\n\t\tinteger,\n\t\tnumber,\n\t\ttext,\n\t\tdatetime,\n\t\tdate,\n\t\tboolean,\n\t\tmedia,\n\t\tarray,\n\t\tpassword,\n\t\ttelephone,\n\t\tcolor,\n\t\turl,\n\t].find( ( fieldType ) => fieldType?.type === type );\n\n\tif ( !! found ) {\n\t\treturn found;\n\t}\n\n\t// This is a fallback for fields that don't provide a type.\n\t// It can be removed when/if the field.type becomes mandatory.\n\treturn noType;\n}\n\n/**\n * Apply default values and normalize the fields config.\n *\n * @param fields Fields config.\n * @return Normalized fields config.\n */\nexport default function normalizeFields< Item >(\n\tfields: Field< Item >[]\n): NormalizedField< Item >[] {\n\treturn fields.map( ( field ) => {\n\t\tconst fieldType = getFieldTypeByName< Item >( field.type );\n\n\t\tconst getValue = field.getValue || getValueFromId( field.id );\n\t\tconst sort = function ( a: any, b: any, direction: SortDirection ) {\n\t\t\tconst aValue = getValue( { item: a } );\n\t\t\tconst bValue = getValue( { item: b } );\n\t\t\treturn field.sort\n\t\t\t\t? field.sort( aValue, bValue, direction )\n\t\t\t\t: fieldType.sort( aValue, bValue, direction );\n\t\t};\n\n\t\treturn {\n\t\t\tid: field.id,\n\t\t\tlabel: field.label || field.id,\n\t\t\theader: field.header || field.label || field.id,\n\t\t\tdescription: field.description,\n\t\t\tplaceholder: field.placeholder,\n\t\t\tgetValue,\n\t\t\tsetValue: field.setValue || setValueFromId( field.id ),\n\t\t\telements: field.elements,\n\t\t\tgetElements: field.getElements,\n\t\t\thasElements: hasElements( field ),\n\t\t\tisVisible: field.isVisible,\n\t\t\tisDisabled:\n\t\t\t\ttypeof field.isDisabled === 'function'\n\t\t\t\t\t? field.isDisabled\n\t\t\t\t\t: () => !! field.isDisabled,\n\t\t\tenableHiding: field.enableHiding ?? true,\n\t\t\treadOnly: field.readOnly ?? false,\n\t\t\t// The type provides defaults for the following props\n\t\t\ttype: fieldType.type,\n\t\t\trender: field.render ?? fieldType.render,\n\t\t\tEdit: getControl( field, fieldType.Edit ),\n\t\t\tsort,\n\t\t\tenableSorting: field.enableSorting ?? fieldType.enableSorting,\n\t\t\tenableGlobalSearch:\n\t\t\t\tfield.enableGlobalSearch ?? fieldType.enableGlobalSearch,\n\t\t\tisValid: getIsValid( field, fieldType ),\n\t\t\tfilterBy: getFilterBy(\n\t\t\t\tfield,\n\t\t\t\tfieldType.defaultOperators,\n\t\t\t\tfieldType.validOperators\n\t\t\t),\n\t\t\tfilter: getFilter( fieldType ),\n\t\t\tformat: getFormat( field, fieldType ),\n\t\t\tgetValueFormatted:\n\t\t\t\tfield.getValueFormatted ?? fieldType.getValueFormatted,\n\t\t};\n\t} );\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA,+BAA2B;AAC3B,2BAAwB;AACxB,+BAA2B;AAC3B,0BAAwB;AACxB,+BAA2B;AAC3B,mBAAiC;AACjC,qBAAmC;AACnC,oBAAkC;AAClC,kBAAgC;AAChC,sBAAoC;AACpC,kBAAgC;AAChC,qBAAmC;AACnC,mBAAiC;AACjC,mBAAiC;AACjC,sBAAoC;AACpC,uBAAqC;AACrC,mBAAiC;AACjC,iBAA+B;AAC/B,qBAAkC;AAClC,0BAAuB;AACvB,wBAAsB;AACtB,wBAAsB;AAQtB,SAAS,mBAA4B,MAA0C;AAC9E,QAAM,QAAQ;AAAA,IACb,aAAAA;AAAA,IACA,eAAAC;AAAA,IACA,cAAAC;AAAA,IACA,YAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,YAAAC;AAAA,IACA,eAAAC;AAAA,IACA,aAAAC;AAAA,IACA,aAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,aAAAC;AAAA,IACA,WAAAC;AAAA,EACD,EAAE,KAAM,CAAE,cAAe,WAAW,SAAS,IAAK;AAElD,MAAK,CAAC,CAAE,OAAQ;AACf,WAAO;AAAA,EACR;AAIA,SAAO,eAAAC;AACR;AAQe,SAAR,gBACN,QAC4B;AAC5B,SAAO,OAAO,IAAK,CAAE,UAAW;AAC/B,UAAM,YAAY,mBAA4B,MAAM,IAAK;AAEzD,UAAM,WAAW,MAAM,gBAAY,yBAAAC,SAAgB,MAAM,EAAG;AAC5D,UAAM,OAAO,SAAW,GAAQ,GAAQ,WAA2B;AAClE,YAAM,SAAS,SAAU,EAAE,MAAM,EAAE,CAAE;AACrC,YAAM,SAAS,SAAU,EAAE,MAAM,EAAE,CAAE;AACrC,aAAO,MAAM,OACV,MAAM,KAAM,QAAQ,QAAQ,SAAU,IACtC,UAAU,KAAM,QAAQ,QAAQ,SAAU;AAAA,IAC9C;AAEA,WAAO;AAAA,MACN,IAAI,MAAM;AAAA,MACV,OAAO,MAAM,SAAS,MAAM;AAAA,MAC5B,QAAQ,MAAM,UAAU,MAAM,SAAS,MAAM;AAAA,MAC7C,aAAa,MAAM;AAAA,MACnB,aAAa,MAAM;AAAA,MACnB;AAAA,MACA,UAAU,MAAM,gBAAY,yBAAAC,SAAgB,MAAM,EAAG;AAAA,MACrD,UAAU,MAAM;AAAA,MAChB,aAAa,MAAM;AAAA,MACnB,iBAAa,oBAAAC,SAAa,KAAM;AAAA,MAChC,WAAW,MAAM;AAAA,MACjB,YACC,OAAO,MAAM,eAAe,aACzB,MAAM,aACN,MAAM,CAAC,CAAE,MAAM;AAAA,MACnB,cAAc,MAAM,gBAAgB;AAAA,MACpC,UAAU,MAAM,YAAY;AAAA;AAAA,MAE5B,MAAM,UAAU;AAAA,MAChB,QAAQ,MAAM,UAAU,UAAU;AAAA,MAClC,UAAM,qCAAY,OAAO,UAAU,IAAK;AAAA,MACxC;AAAA,MACA,eAAe,MAAM,iBAAiB,UAAU;AAAA,MAChD,oBACC,MAAM,sBAAsB,UAAU;AAAA,MACvC,aAAS,oBAAAC,SAAY,OAAO,SAAU;AAAA,MACtC,cAAU,qBAAAC;AAAA,QACT;AAAA,QACA,UAAU;AAAA,QACV,UAAU;AAAA,MACX;AAAA,MACA,YAAQ,kBAAAC,SAAW,SAAU;AAAA,MAC7B,YAAQ,kBAAAC,SAAW,OAAO,SAAU;AAAA,MACpC,mBACC,MAAM,qBAAqB,UAAU;AAAA,IACvC;AAAA,EACD,CAAE;AACH;",
|
|
6
6
|
"names": ["email", "integer", "number", "text", "datetime", "date", "boolean", "media", "array", "password", "telephone", "color", "url", "noType", "getValueFromId", "setValueFromId", "hasElements", "getIsValid", "getFilterBy", "getFilter", "getFormat"]
|
|
7
7
|
}
|
|
@@ -23,58 +23,63 @@ __export(get_is_valid_exports, {
|
|
|
23
23
|
default: () => getIsValid
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(get_is_valid_exports);
|
|
26
|
+
function supportsNumericRangeConstraint(type) {
|
|
27
|
+
return type === "integer" || type === "number";
|
|
28
|
+
}
|
|
29
|
+
function supportsDateRangeConstraint(type) {
|
|
30
|
+
return type === "date" || type === "datetime";
|
|
31
|
+
}
|
|
32
|
+
function normalizeRangeRule(value, fieldType, key) {
|
|
33
|
+
const validator = fieldType.validate[key];
|
|
34
|
+
if (validator && (typeof value === "number" && supportsNumericRangeConstraint(fieldType.type) || typeof value === "string" && supportsDateRangeConstraint(fieldType.type))) {
|
|
35
|
+
return { constraint: value, validate: validator };
|
|
36
|
+
}
|
|
37
|
+
return void 0;
|
|
38
|
+
}
|
|
26
39
|
function getIsValid(field, fieldType) {
|
|
40
|
+
const rules = field.isValid;
|
|
27
41
|
let required;
|
|
28
|
-
if (
|
|
42
|
+
if (rules?.required === true && fieldType.validate.required !== void 0) {
|
|
29
43
|
required = {
|
|
30
44
|
constraint: true,
|
|
31
45
|
validate: fieldType.validate.required
|
|
32
46
|
};
|
|
33
47
|
}
|
|
34
48
|
let elements;
|
|
35
|
-
if ((
|
|
36
|
-
|
|
49
|
+
if ((rules?.elements === true || // elements is enabled unless the field opts-out
|
|
50
|
+
rules?.elements === void 0 && (!!field.elements || !!field.getElements)) && fieldType.validate.elements !== void 0) {
|
|
37
51
|
elements = {
|
|
38
52
|
constraint: true,
|
|
39
53
|
validate: fieldType.validate.elements
|
|
40
54
|
};
|
|
41
55
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
constraint: field.isValid.min,
|
|
46
|
-
validate: fieldType.validate.min
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
let max;
|
|
50
|
-
if (typeof field.isValid?.max === "number" && fieldType.validate.max !== void 0) {
|
|
51
|
-
max = {
|
|
52
|
-
constraint: field.isValid.max,
|
|
53
|
-
validate: fieldType.validate.max
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
+
const min = normalizeRangeRule(rules?.min, fieldType, "min");
|
|
57
|
+
const max = normalizeRangeRule(rules?.max, fieldType, "max");
|
|
58
|
+
const minLengthValue = rules?.minLength;
|
|
56
59
|
let minLength;
|
|
57
|
-
if (typeof
|
|
60
|
+
if (typeof minLengthValue === "number" && fieldType.validate.minLength !== void 0) {
|
|
58
61
|
minLength = {
|
|
59
|
-
constraint:
|
|
62
|
+
constraint: minLengthValue,
|
|
60
63
|
validate: fieldType.validate.minLength
|
|
61
64
|
};
|
|
62
65
|
}
|
|
66
|
+
const maxLengthValue = rules?.maxLength;
|
|
63
67
|
let maxLength;
|
|
64
|
-
if (typeof
|
|
68
|
+
if (typeof maxLengthValue === "number" && fieldType.validate.maxLength !== void 0) {
|
|
65
69
|
maxLength = {
|
|
66
|
-
constraint:
|
|
70
|
+
constraint: maxLengthValue,
|
|
67
71
|
validate: fieldType.validate.maxLength
|
|
68
72
|
};
|
|
69
73
|
}
|
|
74
|
+
const patternValue = rules?.pattern;
|
|
70
75
|
let pattern;
|
|
71
|
-
if (
|
|
76
|
+
if (patternValue !== void 0 && fieldType.validate.pattern !== void 0) {
|
|
72
77
|
pattern = {
|
|
73
|
-
constraint:
|
|
78
|
+
constraint: patternValue,
|
|
74
79
|
validate: fieldType.validate.pattern
|
|
75
80
|
};
|
|
76
81
|
}
|
|
77
|
-
const custom =
|
|
82
|
+
const custom = rules?.custom ?? fieldType.validate.custom;
|
|
78
83
|
return {
|
|
79
84
|
required,
|
|
80
85
|
elements,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/field-types/utils/get-is-valid.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Internal dependencies\n */\nimport type { Field, NormalizedRules } from '../../types';\nimport type { FieldType } from '../../types/private';\n\nexport default function getIsValid< Item >(\n\tfield: Field< Item >,\n\tfieldType: FieldType< Item >\n): NormalizedRules< Item > {\n\tlet required;\n\tif (\n\t\
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"sourcesContent": ["/**\n * Internal dependencies\n */\nimport type { Field, NormalizedRules } from '../../types';\nimport type { FieldType } from '../../types/private';\n\nfunction supportsNumericRangeConstraint( type?: string ) {\n\treturn type === 'integer' || type === 'number';\n}\n\nfunction supportsDateRangeConstraint( type?: string ) {\n\treturn type === 'date' || type === 'datetime';\n}\n\nfunction normalizeRangeRule< Item >(\n\tvalue: number | string | undefined,\n\tfieldType: FieldType< Item >,\n\tkey: 'min' | 'max'\n): NormalizedRules< Item >[ 'min' ] {\n\tconst validator = fieldType.validate[ key ];\n\tif (\n\t\tvalidator &&\n\t\t( ( typeof value === 'number' &&\n\t\t\tsupportsNumericRangeConstraint( fieldType.type ) ) ||\n\t\t\t( typeof value === 'string' &&\n\t\t\t\tsupportsDateRangeConstraint( fieldType.type ) ) )\n\t) {\n\t\treturn { constraint: value, validate: validator } as NonNullable<\n\t\t\tNormalizedRules< Item >[ typeof key ]\n\t\t>;\n\t}\n\treturn undefined;\n}\n\nexport default function getIsValid< Item >(\n\tfield: Field< Item >,\n\tfieldType: FieldType< Item >\n): NormalizedRules< Item > {\n\tconst rules = field.isValid;\n\tlet required;\n\tif (\n\t\trules?.required === true &&\n\t\tfieldType.validate.required !== undefined\n\t) {\n\t\trequired = {\n\t\t\tconstraint: true,\n\t\t\tvalidate: fieldType.validate.required,\n\t\t};\n\t}\n\n\tlet elements;\n\tif (\n\t\t( rules?.elements === true ||\n\t\t\t// elements is enabled unless the field opts-out\n\t\t\t( rules?.elements === undefined &&\n\t\t\t\t( !! field.elements || !! field.getElements ) ) ) &&\n\t\tfieldType.validate.elements !== undefined\n\t) {\n\t\telements = {\n\t\t\tconstraint: true,\n\t\t\tvalidate: fieldType.validate.elements,\n\t\t};\n\t}\n\n\tconst min = normalizeRangeRule( rules?.min, fieldType, 'min' );\n\tconst max = normalizeRangeRule( rules?.max, fieldType, 'max' );\n\n\tconst minLengthValue = rules?.minLength;\n\tlet minLength;\n\tif (\n\t\ttypeof minLengthValue === 'number' &&\n\t\tfieldType.validate.minLength !== undefined\n\t) {\n\t\tminLength = {\n\t\t\tconstraint: minLengthValue,\n\t\t\tvalidate: fieldType.validate.minLength,\n\t\t};\n\t}\n\n\tconst maxLengthValue = rules?.maxLength;\n\tlet maxLength;\n\tif (\n\t\ttypeof maxLengthValue === 'number' &&\n\t\tfieldType.validate.maxLength !== undefined\n\t) {\n\t\tmaxLength = {\n\t\t\tconstraint: maxLengthValue,\n\t\t\tvalidate: fieldType.validate.maxLength,\n\t\t};\n\t}\n\n\tconst patternValue = rules?.pattern;\n\tlet pattern;\n\tif (\n\t\tpatternValue !== undefined &&\n\t\tfieldType.validate.pattern !== undefined\n\t) {\n\t\tpattern = {\n\t\t\tconstraint: patternValue,\n\t\t\tvalidate: fieldType.validate.pattern,\n\t\t};\n\t}\n\n\tconst custom = rules?.custom ?? fieldType.validate.custom;\n\n\treturn {\n\t\trequired,\n\t\telements,\n\t\tmin,\n\t\tmax,\n\t\tminLength,\n\t\tmaxLength,\n\t\tpattern,\n\t\tcustom,\n\t};\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,+BAAgC,MAAgB;AACxD,SAAO,SAAS,aAAa,SAAS;AACvC;AAEA,SAAS,4BAA6B,MAAgB;AACrD,SAAO,SAAS,UAAU,SAAS;AACpC;AAEA,SAAS,mBACR,OACA,WACA,KACmC;AACnC,QAAM,YAAY,UAAU,SAAU,GAAI;AAC1C,MACC,cACI,OAAO,UAAU,YACpB,+BAAgC,UAAU,IAAK,KAC7C,OAAO,UAAU,YAClB,4BAA6B,UAAU,IAAK,IAC7C;AACD,WAAO,EAAE,YAAY,OAAO,UAAU,UAAU;AAAA,EAGjD;AACA,SAAO;AACR;AAEe,SAAR,WACN,OACA,WAC0B;AAC1B,QAAM,QAAQ,MAAM;AACpB,MAAI;AACJ,MACC,OAAO,aAAa,QACpB,UAAU,SAAS,aAAa,QAC/B;AACD,eAAW;AAAA,MACV,YAAY;AAAA,MACZ,UAAU,UAAU,SAAS;AAAA,IAC9B;AAAA,EACD;AAEA,MAAI;AACJ,OACG,OAAO,aAAa;AAAA,EAEnB,OAAO,aAAa,WACnB,CAAC,CAAE,MAAM,YAAY,CAAC,CAAE,MAAM,iBAClC,UAAU,SAAS,aAAa,QAC/B;AACD,eAAW;AAAA,MACV,YAAY;AAAA,MACZ,UAAU,UAAU,SAAS;AAAA,IAC9B;AAAA,EACD;AAEA,QAAM,MAAM,mBAAoB,OAAO,KAAK,WAAW,KAAM;AAC7D,QAAM,MAAM,mBAAoB,OAAO,KAAK,WAAW,KAAM;AAE7D,QAAM,iBAAiB,OAAO;AAC9B,MAAI;AACJ,MACC,OAAO,mBAAmB,YAC1B,UAAU,SAAS,cAAc,QAChC;AACD,gBAAY;AAAA,MACX,YAAY;AAAA,MACZ,UAAU,UAAU,SAAS;AAAA,IAC9B;AAAA,EACD;AAEA,QAAM,iBAAiB,OAAO;AAC9B,MAAI;AACJ,MACC,OAAO,mBAAmB,YAC1B,UAAU,SAAS,cAAc,QAChC;AACD,gBAAY;AAAA,MACX,YAAY;AAAA,MACZ,UAAU,UAAU,SAAS;AAAA,IAC9B;AAAA,EACD;AAEA,QAAM,eAAe,OAAO;AAC5B,MAAI;AACJ,MACC,iBAAiB,UACjB,UAAU,SAAS,YAAY,QAC9B;AACD,cAAU;AAAA,MACT,YAAY;AAAA,MACZ,UAAU,UAAU,SAAS;AAAA,IAC9B;AAAA,EACD;AAEA,QAAM,SAAS,OAAO,UAAU,UAAU,SAAS;AAEnD,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// packages/dataviews/src/field-types/utils/is-valid-date-boundary.ts
|
|
21
|
+
var is_valid_date_boundary_exports = {};
|
|
22
|
+
__export(is_valid_date_boundary_exports, {
|
|
23
|
+
isValidMaxDate: () => isValidMaxDate,
|
|
24
|
+
isValidMinDate: () => isValidMinDate
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(is_valid_date_boundary_exports);
|
|
27
|
+
var import_date_fns = require("date-fns");
|
|
28
|
+
var import_date = require("@wordpress/date");
|
|
29
|
+
function parseDateLike(value) {
|
|
30
|
+
if (!value) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
if (!(0, import_date_fns.isValid)(new Date(value))) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
const parsed = (0, import_date.getDate)(value);
|
|
37
|
+
return parsed && (0, import_date_fns.isValid)(parsed) ? parsed : null;
|
|
38
|
+
}
|
|
39
|
+
function validateDateLikeBoundary(item, field, boundary) {
|
|
40
|
+
const constraint = field.isValid[boundary]?.constraint;
|
|
41
|
+
if (typeof constraint !== "string") {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
const value = field.getValue({ item });
|
|
45
|
+
const boundaryValue = Array.isArray(value) ? value[boundary === "min" ? 0 : value.length - 1] : value;
|
|
46
|
+
if (boundaryValue === void 0 || boundaryValue === null || boundaryValue === "") {
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
const parsedConstraint = parseDateLike(constraint);
|
|
50
|
+
const parsedValue = parseDateLike(String(boundaryValue));
|
|
51
|
+
return !!parsedConstraint && !!parsedValue && (boundary === "min" ? parsedValue.getTime() >= parsedConstraint.getTime() : parsedValue.getTime() <= parsedConstraint.getTime());
|
|
52
|
+
}
|
|
53
|
+
function isValidMinDate(item, field) {
|
|
54
|
+
return validateDateLikeBoundary(item, field, "min");
|
|
55
|
+
}
|
|
56
|
+
function isValidMaxDate(item, field) {
|
|
57
|
+
return validateDateLikeBoundary(item, field, "max");
|
|
58
|
+
}
|
|
59
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
60
|
+
0 && (module.exports = {
|
|
61
|
+
isValidMaxDate,
|
|
62
|
+
isValidMinDate
|
|
63
|
+
});
|
|
64
|
+
//# sourceMappingURL=is-valid-date-boundary.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/field-types/utils/is-valid-date-boundary.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * External dependencies\n */\nimport { isValid as isValidDate } from 'date-fns';\n\n/**\n * WordPress dependencies\n */\nimport { getDate } from '@wordpress/date';\n\n/**\n * Internal dependencies\n */\nimport type { NormalizedField } from '../../types';\n\ntype Boundary = 'min' | 'max';\n\nfunction parseDateLike( value?: string ) {\n\tif ( ! value ) {\n\t\treturn null;\n\t}\n\n\t// Pre-check to avoid passing unparseable strings to getDate,\n\t// which uses moment.js and emits deprecation warnings.\n\tif ( ! isValidDate( new Date( value ) ) ) {\n\t\treturn null;\n\t}\n\n\tconst parsed = getDate( value );\n\treturn parsed && isValidDate( parsed ) ? parsed : null;\n}\n\nfunction validateDateLikeBoundary< Item >(\n\titem: Item,\n\tfield: NormalizedField< Item >,\n\tboundary: Boundary\n): boolean {\n\tconst constraint = field.isValid[ boundary ]?.constraint;\n\tif ( typeof constraint !== 'string' ) {\n\t\treturn false;\n\t}\n\n\tconst value = field.getValue( { item } );\n\tconst boundaryValue = Array.isArray( value )\n\t\t? value[ boundary === 'min' ? 0 : value.length - 1 ]\n\t\t: value;\n\n\tif (\n\t\tboundaryValue === undefined ||\n\t\tboundaryValue === null ||\n\t\tboundaryValue === ''\n\t) {\n\t\treturn true;\n\t}\n\n\tconst parsedConstraint = parseDateLike( constraint );\n\tconst parsedValue = parseDateLike( String( boundaryValue ) );\n\n\treturn (\n\t\t!! parsedConstraint &&\n\t\t!! parsedValue &&\n\t\t( boundary === 'min'\n\t\t\t? parsedValue.getTime() >= parsedConstraint.getTime()\n\t\t\t: parsedValue.getTime() <= parsedConstraint.getTime() )\n\t);\n}\n\nexport function isValidMinDate< Item >(\n\titem: Item,\n\tfield: NormalizedField< Item >\n): boolean {\n\treturn validateDateLikeBoundary( item, field, 'min' );\n}\n\nexport function isValidMaxDate< Item >(\n\titem: Item,\n\tfield: NormalizedField< Item >\n): boolean {\n\treturn validateDateLikeBoundary( item, field, 'max' );\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,sBAAuC;AAKvC,kBAAwB;AASxB,SAAS,cAAe,OAAiB;AACxC,MAAK,CAAE,OAAQ;AACd,WAAO;AAAA,EACR;AAIA,MAAK,KAAE,gBAAAA,SAAa,IAAI,KAAM,KAAM,CAAE,GAAI;AACzC,WAAO;AAAA,EACR;AAEA,QAAM,aAAS,qBAAS,KAAM;AAC9B,SAAO,cAAU,gBAAAA,SAAa,MAAO,IAAI,SAAS;AACnD;AAEA,SAAS,yBACR,MACA,OACA,UACU;AACV,QAAM,aAAa,MAAM,QAAS,QAAS,GAAG;AAC9C,MAAK,OAAO,eAAe,UAAW;AACrC,WAAO;AAAA,EACR;AAEA,QAAM,QAAQ,MAAM,SAAU,EAAE,KAAK,CAAE;AACvC,QAAM,gBAAgB,MAAM,QAAS,KAAM,IACxC,MAAO,aAAa,QAAQ,IAAI,MAAM,SAAS,CAAE,IACjD;AAEH,MACC,kBAAkB,UAClB,kBAAkB,QAClB,kBAAkB,IACjB;AACD,WAAO;AAAA,EACR;AAEA,QAAM,mBAAmB,cAAe,UAAW;AACnD,QAAM,cAAc,cAAe,OAAQ,aAAc,CAAE;AAE3D,SACC,CAAC,CAAE,oBACH,CAAC,CAAE,gBACD,aAAa,QACZ,YAAY,QAAQ,KAAK,iBAAiB,QAAQ,IAClD,YAAY,QAAQ,KAAK,iBAAiB,QAAQ;AAEvD;AAEO,SAAS,eACf,MACA,OACU;AACV,SAAO,yBAA0B,MAAM,OAAO,KAAM;AACrD;AAEO,SAAS,eACf,MACA,OACU;AACV,SAAO,yBAA0B,MAAM,OAAO,KAAM;AACrD;",
|
|
6
|
+
"names": ["isValidDate"]
|
|
7
|
+
}
|
package/build/hooks/index.cjs
CHANGED
|
@@ -30,12 +30,21 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
30
30
|
// packages/dataviews/src/hooks/index.ts
|
|
31
31
|
var hooks_exports = {};
|
|
32
32
|
__export(hooks_exports, {
|
|
33
|
-
|
|
33
|
+
useData: () => import_use_data.default,
|
|
34
|
+
useFormValidity: () => import_use_form_validity.default,
|
|
35
|
+
useInfiniteScroll: () => import_use_infinite_scroll.useInfiniteScroll,
|
|
36
|
+
useSelectedItems: () => import_use_selected_items.default
|
|
34
37
|
});
|
|
35
38
|
module.exports = __toCommonJS(hooks_exports);
|
|
36
39
|
var import_use_form_validity = __toESM(require("./use-form-validity.cjs"));
|
|
40
|
+
var import_use_data = __toESM(require("./use-data.cjs"));
|
|
41
|
+
var import_use_infinite_scroll = require("./use-infinite-scroll.cjs");
|
|
42
|
+
var import_use_selected_items = __toESM(require("./use-selected-items.cjs"));
|
|
37
43
|
// Annotate the CommonJS export names for ESM import in node:
|
|
38
44
|
0 && (module.exports = {
|
|
39
|
-
|
|
45
|
+
useData,
|
|
46
|
+
useFormValidity,
|
|
47
|
+
useInfiniteScroll,
|
|
48
|
+
useSelectedItems
|
|
40
49
|
});
|
|
41
50
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/hooks/index.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Internal dependencies\n */\nexport { default as useFormValidity } from './use-form-validity';\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,+BAA2C;",
|
|
4
|
+
"sourcesContent": ["/**\n * Internal dependencies\n */\nexport { default as useFormValidity } from './use-form-validity';\nexport { default as useData } from './use-data';\nexport { useInfiniteScroll } from './use-infinite-scroll';\nexport { default as useSelectedItems } from './use-selected-items';\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,+BAA2C;AAC3C,sBAAmC;AACnC,iCAAkC;AAClC,gCAA4C;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/build/hooks/use-data.cjs
CHANGED
|
@@ -24,23 +24,160 @@ __export(use_data_exports, {
|
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(use_data_exports);
|
|
26
26
|
var import_element = require("@wordpress/element");
|
|
27
|
-
function useData(
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
function useData({
|
|
28
|
+
view,
|
|
29
|
+
data: shownData,
|
|
30
|
+
getItemId,
|
|
31
|
+
isLoading,
|
|
32
|
+
paginationInfo,
|
|
33
|
+
selection
|
|
34
|
+
}) {
|
|
35
|
+
const isInfiniteScrollEnabled = view.infiniteScrollEnabled;
|
|
30
36
|
const [hasInitiallyLoaded, setHasInitiallyLoaded] = (0, import_element.useState)(
|
|
31
37
|
!isLoading
|
|
32
38
|
);
|
|
33
39
|
(0, import_element.useEffect)(() => {
|
|
34
40
|
if (!isLoading) {
|
|
35
|
-
previousDataRef.current = data;
|
|
36
|
-
previousPaginationInfoRef.current = paginationInfo;
|
|
37
41
|
setHasInitiallyLoaded(true);
|
|
38
42
|
}
|
|
39
|
-
}, [
|
|
43
|
+
}, [isLoading]);
|
|
44
|
+
const previousDataRef = (0, import_element.useRef)(shownData);
|
|
45
|
+
const previousPaginationInfoRef = (0, import_element.useRef)(paginationInfo);
|
|
46
|
+
(0, import_element.useEffect)(() => {
|
|
47
|
+
if (!isLoading) {
|
|
48
|
+
previousDataRef.current = shownData;
|
|
49
|
+
previousPaginationInfoRef.current = paginationInfo;
|
|
50
|
+
}
|
|
51
|
+
}, [shownData, isLoading, paginationInfo]);
|
|
52
|
+
const [visibleEntries, setVisibleEntries] = (0, import_element.useState)([]);
|
|
53
|
+
const positionMapRef = (0, import_element.useRef)(/* @__PURE__ */ new Map());
|
|
54
|
+
const allLoadedRecordsRef = (0, import_element.useRef)([]);
|
|
55
|
+
const prevViewParamsRef = (0, import_element.useRef)({
|
|
56
|
+
search: void 0,
|
|
57
|
+
filters: void 0,
|
|
58
|
+
perPage: void 0
|
|
59
|
+
});
|
|
60
|
+
const scrollDirectionRef = (0, import_element.useRef)(void 0);
|
|
61
|
+
const prevStartPositionRef = (0, import_element.useRef)(void 0);
|
|
62
|
+
const hasInitializedRef = (0, import_element.useRef)(false);
|
|
63
|
+
const allLoadedRecords = (0, import_element.useMemo)(() => {
|
|
64
|
+
if (view.startPosition !== void 0 && prevStartPositionRef.current !== void 0) {
|
|
65
|
+
if (view.startPosition < prevStartPositionRef.current) {
|
|
66
|
+
scrollDirectionRef.current = "up";
|
|
67
|
+
} else if (view.startPosition > prevStartPositionRef.current) {
|
|
68
|
+
scrollDirectionRef.current = "down";
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
prevStartPositionRef.current = view.startPosition;
|
|
72
|
+
const currentFiltersKey = JSON.stringify(view.filters ?? []);
|
|
73
|
+
const prevFiltersKey = prevViewParamsRef.current.filters;
|
|
74
|
+
const shouldReset = !hasInitializedRef.current || !view.infiniteScrollEnabled || view.search !== prevViewParamsRef.current.search || currentFiltersKey !== prevFiltersKey || view.perPage !== prevViewParamsRef.current.perPage;
|
|
75
|
+
hasInitializedRef.current = true;
|
|
76
|
+
prevViewParamsRef.current = {
|
|
77
|
+
search: view.search,
|
|
78
|
+
filters: currentFiltersKey,
|
|
79
|
+
perPage: view.perPage
|
|
80
|
+
};
|
|
81
|
+
if (shouldReset) {
|
|
82
|
+
positionMapRef.current.clear();
|
|
83
|
+
scrollDirectionRef.current = void 0;
|
|
84
|
+
const startPosition = view.search ? 1 : view.startPosition ?? 1;
|
|
85
|
+
const records = shownData.map((record, index) => {
|
|
86
|
+
const position = startPosition + index;
|
|
87
|
+
positionMapRef.current.set(getItemId(record), position);
|
|
88
|
+
return {
|
|
89
|
+
...record,
|
|
90
|
+
position
|
|
91
|
+
};
|
|
92
|
+
});
|
|
93
|
+
allLoadedRecordsRef.current = records;
|
|
94
|
+
return records;
|
|
95
|
+
}
|
|
96
|
+
const prev = allLoadedRecordsRef.current;
|
|
97
|
+
const shownDataIds = new Set(shownData.map(getItemId));
|
|
98
|
+
const scrollDirection = scrollDirectionRef.current;
|
|
99
|
+
const basePosition = view.search ? 1 : view.startPosition ?? 1;
|
|
100
|
+
const newRecords = shownData.map((record, index) => {
|
|
101
|
+
const itemId = getItemId(record);
|
|
102
|
+
const position = view.infiniteScrollEnabled ? basePosition + index : void 0;
|
|
103
|
+
if (position !== void 0) {
|
|
104
|
+
positionMapRef.current.set(itemId, position);
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
...record,
|
|
108
|
+
position
|
|
109
|
+
};
|
|
110
|
+
});
|
|
111
|
+
if (newRecords.length === 0) {
|
|
112
|
+
return prev;
|
|
113
|
+
}
|
|
114
|
+
const prevWithoutDuplicates = prev.filter(
|
|
115
|
+
(record) => !shownDataIds.has(getItemId(record))
|
|
116
|
+
);
|
|
117
|
+
const allRecords = scrollDirection === "up" ? [...newRecords, ...prevWithoutDuplicates] : [...prevWithoutDuplicates, ...newRecords];
|
|
118
|
+
allRecords.sort((a, b) => {
|
|
119
|
+
const posA = a.position;
|
|
120
|
+
const posB = b.position;
|
|
121
|
+
return posA - posB;
|
|
122
|
+
});
|
|
123
|
+
let result = allRecords;
|
|
124
|
+
if (visibleEntries.length > 0) {
|
|
125
|
+
const visibleMin = Math.min(...visibleEntries);
|
|
126
|
+
const visibleMax = Math.max(...visibleEntries);
|
|
127
|
+
const buffer = 20;
|
|
128
|
+
const recordPositions = allRecords.map(
|
|
129
|
+
(r) => r.position
|
|
130
|
+
);
|
|
131
|
+
const minRecordPos = Math.min(...recordPositions);
|
|
132
|
+
const maxRecordPos = Math.max(...recordPositions);
|
|
133
|
+
const hasOverlap = !(maxRecordPos < visibleMin - buffer || minRecordPos > visibleMax + buffer);
|
|
134
|
+
if (hasOverlap) {
|
|
135
|
+
result = allRecords.filter((record) => {
|
|
136
|
+
const itemId = getItemId(record);
|
|
137
|
+
const isSelected = selection?.includes(itemId);
|
|
138
|
+
if (isSelected) {
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
const itemPosition = record.position;
|
|
142
|
+
if (scrollDirection === "up") {
|
|
143
|
+
return itemPosition <= visibleMax + buffer;
|
|
144
|
+
} else if (scrollDirection === "down") {
|
|
145
|
+
return itemPosition >= visibleMin - buffer;
|
|
146
|
+
}
|
|
147
|
+
return itemPosition >= visibleMin - buffer && itemPosition <= visibleMax + buffer;
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
allLoadedRecordsRef.current = result;
|
|
152
|
+
return result;
|
|
153
|
+
}, [
|
|
154
|
+
shownData,
|
|
155
|
+
view.search,
|
|
156
|
+
view.filters,
|
|
157
|
+
view.perPage,
|
|
158
|
+
view.startPosition,
|
|
159
|
+
view.infiniteScrollEnabled,
|
|
160
|
+
visibleEntries,
|
|
161
|
+
selection,
|
|
162
|
+
getItemId
|
|
163
|
+
]);
|
|
164
|
+
if (!isInfiniteScrollEnabled) {
|
|
165
|
+
const dataToReturn = isLoading && previousDataRef.current?.length ? previousDataRef.current : shownData;
|
|
166
|
+
return {
|
|
167
|
+
data: dataToReturn.map((item) => ({
|
|
168
|
+
...item,
|
|
169
|
+
position: void 0
|
|
170
|
+
})),
|
|
171
|
+
paginationInfo: isLoading && previousDataRef.current?.length ? previousPaginationInfoRef.current : paginationInfo,
|
|
172
|
+
hasInitiallyLoaded,
|
|
173
|
+
setVisibleEntries: void 0
|
|
174
|
+
};
|
|
175
|
+
}
|
|
40
176
|
return {
|
|
41
|
-
data:
|
|
42
|
-
paginationInfo
|
|
43
|
-
hasInitiallyLoaded
|
|
177
|
+
data: allLoadedRecords,
|
|
178
|
+
paginationInfo,
|
|
179
|
+
hasInitiallyLoaded,
|
|
180
|
+
setVisibleEntries
|
|
44
181
|
};
|
|
45
182
|
}
|
|
46
183
|
//# sourceMappingURL=use-data.cjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/hooks/use-data.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useEffect, useRef, useState } from '@wordpress/element';\n\ntype PaginationInfo = {\n\ttotalItems: number;\n\ttotalPages: number;\n\tinfiniteScrollHandler?: () => void;\n};\n\nexport default function useData< Item >(\n\tdata: Item[],\n\tisLoading: boolean | undefined,\n\tpaginationInfo: PaginationInfo\n): {\n\tdata: Item[];\n\tpaginationInfo: PaginationInfo;\n\thasInitiallyLoaded: boolean;\n} {\n\tconst previousDataRef = useRef< Item[] >( data );\n\tconst previousPaginationInfoRef =\n\t\tuseRef< PaginationInfo >( paginationInfo );\n\tconst [ hasInitiallyLoaded, setHasInitiallyLoaded ] = useState(\n\t\t! isLoading\n\t);\n\tuseEffect( () => {\n\t\tif ( ! isLoading ) {\n\t\t\tpreviousDataRef.current = data;\n\t\t\tpreviousPaginationInfoRef.current = paginationInfo;\n\t\t\tsetHasInitiallyLoaded( true );\n\t\t}\n\t}, [ data, isLoading, paginationInfo ] );\n\treturn {\n\t\tdata:\n\t\t\tisLoading && previousDataRef.current?.length\n\t\t\t\t? previousDataRef.current\n\t\t\t\t: data,\n\t\tpaginationInfo:\n\t\t\tisLoading && previousDataRef.current?.length\n\t\t\t\t? previousPaginationInfoRef.current\n\t\t\t\t: paginationInfo,\n\t\thasInitiallyLoaded,\n\t};\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,
|
|
4
|
+
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useState, useEffect, useMemo, useRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport type { View } from '../types';\n\ntype PaginationInfo = {\n\ttotalItems: number;\n\ttotalPages: number;\n};\n\ninterface UseDataParams< Item > {\n\tview: View;\n\tdata: Item[];\n\tgetItemId: ( item: Item ) => string;\n\tisLoading?: boolean;\n\tpaginationInfo: PaginationInfo;\n\tselection?: string[];\n}\n\ninterface UseDataResult< Item > {\n\tdata: ( Item & { position?: number } )[];\n\tpaginationInfo: PaginationInfo;\n\thasInitiallyLoaded: boolean;\n\tsetVisibleEntries?: React.Dispatch< React.SetStateAction< number[] > >;\n}\n\n/**\n * Hook to manage data for DataViews.\n *\n * When infinite scroll is enabled, this hook handles:\n * - Loading more data when scrolling up or down\n * - Maintaining stable positions for items\n * - Unloading items that are no longer visible (with a buffer)\n *\n * When infinite scroll is disabled, it preserves the previous data and\n * pagination info while loading, so the UI doesn't flash empty.\n *\n * In both cases, it tracks whether data has initially loaded.\n *\n * @param params - Configuration parameters\n * @param params.view - Current view configuration\n * @param params.data - Current page of data\n * @param params.getItemId - Function to extract item ID\n * @param params.isLoading - Whether data is currently loading\n * @param params.paginationInfo - Pagination info (totalItems, totalPages)\n * @param params.selection - Currently selected item IDs\n * @return Object containing data, paginationInfo, hasInitiallyLoaded,\n * and optional setVisibleEntries callback\n */\nexport default function useData< Item >( {\n\tview,\n\tdata: shownData,\n\tgetItemId,\n\tisLoading,\n\tpaginationInfo,\n\tselection,\n}: UseDataParams< Item > ): UseDataResult< Item > {\n\tconst isInfiniteScrollEnabled = view.infiniteScrollEnabled;\n\n\tconst [ hasInitiallyLoaded, setHasInitiallyLoaded ] = useState(\n\t\t! isLoading\n\t);\n\tuseEffect( () => {\n\t\tif ( ! isLoading ) {\n\t\t\tsetHasInitiallyLoaded( true );\n\t\t}\n\t}, [ isLoading ] );\n\n\tconst previousDataRef = useRef< Item[] >( shownData );\n\tconst previousPaginationInfoRef =\n\t\tuseRef< PaginationInfo >( paginationInfo );\n\tuseEffect( () => {\n\t\tif ( ! isLoading ) {\n\t\t\tpreviousDataRef.current = shownData;\n\t\t\tpreviousPaginationInfoRef.current = paginationInfo;\n\t\t}\n\t}, [ shownData, isLoading, paginationInfo ] );\n\n\t// Infinite scroll state.\n\tconst [ visibleEntries, setVisibleEntries ] = useState< number[] >( [] );\n\n\t// Track the mapping of item IDs to their positions in the full dataset\n\tconst positionMapRef = useRef< Map< string, number > >( new Map() );\n\n\t// Store accumulated records in a ref for persistence across renders\n\tconst allLoadedRecordsRef = useRef< Item[] >( [] );\n\n\t// Track previous view parameters to detect when we need to reset\n\tconst prevViewParamsRef = useRef< {\n\t\tsearch: string | undefined;\n\t\tfilters: string | undefined;\n\t\tperPage: number | undefined;\n\t} >( {\n\t\tsearch: undefined,\n\t\tfilters: undefined,\n\t\tperPage: undefined,\n\t} );\n\n\t// Determine scroll direction based on position changes\n\tconst scrollDirectionRef = useRef< 'up' | 'down' | undefined >( undefined );\n\tconst prevStartPositionRef = useRef< number | undefined >( undefined );\n\n\t// Track whether we've done initial load\n\tconst hasInitializedRef = useRef( false );\n\n\t// Compute data synchronously during render using useMemo\n\t// This ensures the returned data is always in sync with shownData\n\tconst allLoadedRecords = useMemo( () => {\n\t\t// Update scroll direction based on position changes\n\t\tif (\n\t\t\tview.startPosition !== undefined &&\n\t\t\tprevStartPositionRef.current !== undefined\n\t\t) {\n\t\t\tif ( view.startPosition < prevStartPositionRef.current ) {\n\t\t\t\tscrollDirectionRef.current = 'up';\n\t\t\t} else if ( view.startPosition > prevStartPositionRef.current ) {\n\t\t\t\tscrollDirectionRef.current = 'down';\n\t\t\t}\n\t\t}\n\t\tprevStartPositionRef.current = view.startPosition;\n\n\t\t// Serialize filters for comparison\n\t\tconst currentFiltersKey = JSON.stringify( view.filters ?? [] );\n\t\tconst prevFiltersKey = prevViewParamsRef.current.filters;\n\n\t\t// Check if view parameters that require a reset have changed\n\t\tconst shouldReset =\n\t\t\t! hasInitializedRef.current ||\n\t\t\t! view.infiniteScrollEnabled ||\n\t\t\tview.search !== prevViewParamsRef.current.search ||\n\t\t\tcurrentFiltersKey !== prevFiltersKey ||\n\t\t\tview.perPage !== prevViewParamsRef.current.perPage;\n\t\thasInitializedRef.current = true;\n\t\t// Update tracked view parameters\n\t\tprevViewParamsRef.current = {\n\t\t\tsearch: view.search,\n\t\t\tfilters: currentFiltersKey,\n\t\t\tperPage: view.perPage,\n\t\t};\n\n\t\tif ( shouldReset ) {\n\t\t\t// Reset - clear position map and replace all data\n\t\t\tpositionMapRef.current.clear();\n\t\t\t// Reset scroll direction to prevent stale directional filtering\n\t\t\tscrollDirectionRef.current = undefined;\n\t\t\t// Use the view's startPosition if defined, otherwise default to 1\n\t\t\tconst startPosition = view.search ? 1 : view.startPosition ?? 1;\n\t\t\tconst records = shownData.map( ( record, index ) => {\n\t\t\t\tconst position = startPosition + index;\n\t\t\t\tpositionMapRef.current.set( getItemId( record ), position );\n\t\t\t\treturn {\n\t\t\t\t\t...record,\n\t\t\t\t\tposition,\n\t\t\t\t};\n\t\t\t} );\n\t\t\tallLoadedRecordsRef.current = records;\n\t\t\treturn records;\n\t\t}\n\n\t\t// Subsequent pages - merge with existing data\n\t\tconst prev = allLoadedRecordsRef.current;\n\t\tconst shownDataIds = new Set( shownData.map( getItemId ) );\n\t\tconst scrollDirection = scrollDirectionRef.current;\n\n\t\t// The position for each item in shownData should be based on the\n\t\t// current startPosition from the view, which reflects the actual\n\t\t// offset in the dataset. This ensures aria-posinset values are\n\t\t// semantically correct - if startPosition is 40, there are exactly\n\t\t// 39 items before the first item in shownData.\n\t\t// When there's an active search, always start from position 1 since\n\t\t// search results are a filtered subset, not a paginated view.\n\t\tconst basePosition = view.search ? 1 : view.startPosition ?? 1;\n\t\tconst newRecords = shownData.map( ( record, index ) => {\n\t\t\tconst itemId = getItemId( record );\n\t\t\tconst position = view.infiniteScrollEnabled\n\t\t\t\t? basePosition + index\n\t\t\t\t: undefined;\n\n\t\t\t// Always update the position map with the correct position\n\t\t\t// based on the current query's startPosition\n\t\t\tif ( position !== undefined ) {\n\t\t\t\tpositionMapRef.current.set( itemId, position );\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...record,\n\t\t\t\tposition,\n\t\t\t};\n\t\t} );\n\n\t\tif ( newRecords.length === 0 ) {\n\t\t\treturn prev;\n\t\t}\n\n\t\t// Remove duplicates from prev, keeping only records not in shownData\n\t\tconst prevWithoutDuplicates = prev.filter(\n\t\t\t( record ) => ! shownDataIds.has( getItemId( record ) )\n\t\t);\n\n\t\t// Update the loaded range\n\t\tconst allRecords =\n\t\t\tscrollDirection === 'up'\n\t\t\t\t? [ ...newRecords, ...prevWithoutDuplicates ]\n\t\t\t\t: [ ...prevWithoutDuplicates, ...newRecords ];\n\n\t\t// Sort all records by position to ensure correct order\n\t\t// This is crucial when items are reloaded after scrolling in different directions\n\t\tallRecords.sort( ( a, b ) => {\n\t\t\tconst posA = ( a as Item & { position: number } ).position;\n\t\t\tconst posB = ( b as Item & { position: number } ).position;\n\t\t\treturn posA - posB;\n\t\t} );\n\n\t\tlet result = allRecords;\n\n\t\tif ( visibleEntries.length > 0 ) {\n\t\t\tconst visibleMin = Math.min( ...visibleEntries );\n\t\t\tconst visibleMax = Math.max( ...visibleEntries );\n\t\t\t// Buffer size balances allowing new items to render (when prepended\n\t\t\t// during scroll up) while unloading items no longer on screen.\n\t\t\t// Use a larger buffer to prevent scrollbar from jumping when items\n\t\t\t// are unloaded, which could trigger unwanted scroll events.\n\t\t\tconst buffer = 20;\n\n\t\t\tconst recordPositions = allRecords.map(\n\t\t\t\t( r ) => ( r as Item & { position: number } ).position\n\t\t\t);\n\t\t\tconst minRecordPos = Math.min( ...recordPositions );\n\t\t\tconst maxRecordPos = Math.max( ...recordPositions );\n\n\t\t\t// Check if there's any overlap between visible range and actual record positions\n\t\t\t// to avoid filtering when visibleEntries are stale (e.g., after search/filter reset)\n\t\t\tconst hasOverlap = ! (\n\t\t\t\tmaxRecordPos < visibleMin - buffer ||\n\t\t\t\tminRecordPos > visibleMax + buffer\n\t\t\t);\n\n\t\t\tif ( hasOverlap ) {\n\t\t\t\tresult = allRecords.filter( ( record ) => {\n\t\t\t\t\tconst itemId = getItemId( record );\n\t\t\t\t\tconst isSelected = selection?.includes( itemId );\n\t\t\t\t\t// Never unload selected items, even if outside visible range\n\t\t\t\t\tif ( isSelected ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst itemPosition = (\n\t\t\t\t\t\trecord as Item & { position: number }\n\t\t\t\t\t ).position;\n\t\t\t\t\t// When scrolling, only trim items from the end we're scrolling away from\n\t\t\t\t\tif ( scrollDirection === 'up' ) {\n\t\t\t\t\t\t// When scrolling up, only trim items below the visible range\n\t\t\t\t\t\treturn itemPosition <= visibleMax + buffer;\n\t\t\t\t\t} else if ( scrollDirection === 'down' ) {\n\t\t\t\t\t\t// When scrolling down, only trim items above the visible range\n\t\t\t\t\t\treturn itemPosition >= visibleMin - buffer;\n\t\t\t\t\t}\n\t\t\t\t\t// When not scrolling or first load, keep items within buffer range\n\t\t\t\t\treturn (\n\t\t\t\t\t\titemPosition >= visibleMin - buffer &&\n\t\t\t\t\t\titemPosition <= visibleMax + buffer\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\tallLoadedRecordsRef.current = result;\n\t\treturn result;\n\t}, [\n\t\tshownData,\n\t\tview.search,\n\t\tview.filters,\n\t\tview.perPage,\n\t\tview.startPosition,\n\t\tview.infiniteScrollEnabled,\n\t\tvisibleEntries,\n\t\tselection,\n\t\tgetItemId,\n\t] );\n\n\t// When infinite scroll is disabled, preserve previous data while loading\n\tif ( ! isInfiniteScrollEnabled ) {\n\t\tconst dataToReturn =\n\t\t\tisLoading && previousDataRef.current?.length\n\t\t\t\t? previousDataRef.current\n\t\t\t\t: shownData;\n\t\treturn {\n\t\t\tdata: dataToReturn.map( ( item ) => ( {\n\t\t\t\t...item,\n\t\t\t\tposition: undefined,\n\t\t\t} ) ) as ( Item & { position?: number } )[],\n\t\t\tpaginationInfo:\n\t\t\t\tisLoading && previousDataRef.current?.length\n\t\t\t\t\t? previousPaginationInfoRef.current\n\t\t\t\t\t: paginationInfo,\n\t\t\thasInitiallyLoaded,\n\t\t\tsetVisibleEntries: undefined,\n\t\t};\n\t}\n\n\treturn {\n\t\tdata: allLoadedRecords as ( Item & { position?: number } )[],\n\t\tpaginationInfo,\n\t\thasInitiallyLoaded,\n\t\tsetVisibleEntries,\n\t};\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,qBAAqD;AAmDtC,SAAR,QAAkC;AAAA,EACxC;AAAA,EACA,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAkD;AACjD,QAAM,0BAA0B,KAAK;AAErC,QAAM,CAAE,oBAAoB,qBAAsB,QAAI;AAAA,IACrD,CAAE;AAAA,EACH;AACA,gCAAW,MAAM;AAChB,QAAK,CAAE,WAAY;AAClB,4BAAuB,IAAK;AAAA,IAC7B;AAAA,EACD,GAAG,CAAE,SAAU,CAAE;AAEjB,QAAM,sBAAkB,uBAAkB,SAAU;AACpD,QAAM,gCACL,uBAA0B,cAAe;AAC1C,gCAAW,MAAM;AAChB,QAAK,CAAE,WAAY;AAClB,sBAAgB,UAAU;AAC1B,gCAA0B,UAAU;AAAA,IACrC;AAAA,EACD,GAAG,CAAE,WAAW,WAAW,cAAe,CAAE;AAG5C,QAAM,CAAE,gBAAgB,iBAAkB,QAAI,yBAAsB,CAAC,CAAE;AAGvE,QAAM,qBAAiB,uBAAiC,oBAAI,IAAI,CAAE;AAGlE,QAAM,0BAAsB,uBAAkB,CAAC,CAAE;AAGjD,QAAM,wBAAoB,uBAIrB;AAAA,IACJ,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,SAAS;AAAA,EACV,CAAE;AAGF,QAAM,yBAAqB,uBAAqC,MAAU;AAC1E,QAAM,2BAAuB,uBAA8B,MAAU;AAGrE,QAAM,wBAAoB,uBAAQ,KAAM;AAIxC,QAAM,uBAAmB,wBAAS,MAAM;AAEvC,QACC,KAAK,kBAAkB,UACvB,qBAAqB,YAAY,QAChC;AACD,UAAK,KAAK,gBAAgB,qBAAqB,SAAU;AACxD,2BAAmB,UAAU;AAAA,MAC9B,WAAY,KAAK,gBAAgB,qBAAqB,SAAU;AAC/D,2BAAmB,UAAU;AAAA,MAC9B;AAAA,IACD;AACA,yBAAqB,UAAU,KAAK;AAGpC,UAAM,oBAAoB,KAAK,UAAW,KAAK,WAAW,CAAC,CAAE;AAC7D,UAAM,iBAAiB,kBAAkB,QAAQ;AAGjD,UAAM,cACL,CAAE,kBAAkB,WACpB,CAAE,KAAK,yBACP,KAAK,WAAW,kBAAkB,QAAQ,UAC1C,sBAAsB,kBACtB,KAAK,YAAY,kBAAkB,QAAQ;AAC5C,sBAAkB,UAAU;AAE5B,sBAAkB,UAAU;AAAA,MAC3B,QAAQ,KAAK;AAAA,MACb,SAAS;AAAA,MACT,SAAS,KAAK;AAAA,IACf;AAEA,QAAK,aAAc;AAElB,qBAAe,QAAQ,MAAM;AAE7B,yBAAmB,UAAU;AAE7B,YAAM,gBAAgB,KAAK,SAAS,IAAI,KAAK,iBAAiB;AAC9D,YAAM,UAAU,UAAU,IAAK,CAAE,QAAQ,UAAW;AACnD,cAAM,WAAW,gBAAgB;AACjC,uBAAe,QAAQ,IAAK,UAAW,MAAO,GAAG,QAAS;AAC1D,eAAO;AAAA,UACN,GAAG;AAAA,UACH;AAAA,QACD;AAAA,MACD,CAAE;AACF,0BAAoB,UAAU;AAC9B,aAAO;AAAA,IACR;AAGA,UAAM,OAAO,oBAAoB;AACjC,UAAM,eAAe,IAAI,IAAK,UAAU,IAAK,SAAU,CAAE;AACzD,UAAM,kBAAkB,mBAAmB;AAS3C,UAAM,eAAe,KAAK,SAAS,IAAI,KAAK,iBAAiB;AAC7D,UAAM,aAAa,UAAU,IAAK,CAAE,QAAQ,UAAW;AACtD,YAAM,SAAS,UAAW,MAAO;AACjC,YAAM,WAAW,KAAK,wBACnB,eAAe,QACf;AAIH,UAAK,aAAa,QAAY;AAC7B,uBAAe,QAAQ,IAAK,QAAQ,QAAS;AAAA,MAC9C;AAEA,aAAO;AAAA,QACN,GAAG;AAAA,QACH;AAAA,MACD;AAAA,IACD,CAAE;AAEF,QAAK,WAAW,WAAW,GAAI;AAC9B,aAAO;AAAA,IACR;AAGA,UAAM,wBAAwB,KAAK;AAAA,MAClC,CAAE,WAAY,CAAE,aAAa,IAAK,UAAW,MAAO,CAAE;AAAA,IACvD;AAGA,UAAM,aACL,oBAAoB,OACjB,CAAE,GAAG,YAAY,GAAG,qBAAsB,IAC1C,CAAE,GAAG,uBAAuB,GAAG,UAAW;AAI9C,eAAW,KAAM,CAAE,GAAG,MAAO;AAC5B,YAAM,OAAS,EAAmC;AAClD,YAAM,OAAS,EAAmC;AAClD,aAAO,OAAO;AAAA,IACf,CAAE;AAEF,QAAI,SAAS;AAEb,QAAK,eAAe,SAAS,GAAI;AAChC,YAAM,aAAa,KAAK,IAAK,GAAG,cAAe;AAC/C,YAAM,aAAa,KAAK,IAAK,GAAG,cAAe;AAK/C,YAAM,SAAS;AAEf,YAAM,kBAAkB,WAAW;AAAA,QAClC,CAAE,MAAS,EAAmC;AAAA,MAC/C;AACA,YAAM,eAAe,KAAK,IAAK,GAAG,eAAgB;AAClD,YAAM,eAAe,KAAK,IAAK,GAAG,eAAgB;AAIlD,YAAM,aAAa,EAClB,eAAe,aAAa,UAC5B,eAAe,aAAa;AAG7B,UAAK,YAAa;AACjB,iBAAS,WAAW,OAAQ,CAAE,WAAY;AACzC,gBAAM,SAAS,UAAW,MAAO;AACjC,gBAAM,aAAa,WAAW,SAAU,MAAO;AAE/C,cAAK,YAAa;AACjB,mBAAO;AAAA,UACR;AAEA,gBAAM,eACL,OACE;AAEH,cAAK,oBAAoB,MAAO;AAE/B,mBAAO,gBAAgB,aAAa;AAAA,UACrC,WAAY,oBAAoB,QAAS;AAExC,mBAAO,gBAAgB,aAAa;AAAA,UACrC;AAEA,iBACC,gBAAgB,aAAa,UAC7B,gBAAgB,aAAa;AAAA,QAE/B,CAAE;AAAA,MACH;AAAA,IACD;AAEA,wBAAoB,UAAU;AAC9B,WAAO;AAAA,EACR,GAAG;AAAA,IACF;AAAA,IACA,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAE;AAGF,MAAK,CAAE,yBAA0B;AAChC,UAAM,eACL,aAAa,gBAAgB,SAAS,SACnC,gBAAgB,UAChB;AACJ,WAAO;AAAA,MACN,MAAM,aAAa,IAAK,CAAE,UAAY;AAAA,QACrC,GAAG;AAAA,QACH,UAAU;AAAA,MACX,EAAI;AAAA,MACJ,gBACC,aAAa,gBAAgB,SAAS,SACnC,0BAA0B,UAC1B;AAAA,MACJ;AAAA,MACA,mBAAmB;AAAA,IACpB;AAAA,EACD;AAEA,SAAO;AAAA,IACN,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|