@uxland/primary-shell 8.0.0-rc.0 → 8.0.0-rc.2

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.
Files changed (84) hide show
  1. package/dist/component-BQj4158z.js +68 -0
  2. package/dist/component-BQj4158z.js.map +1 -0
  3. package/dist/{index-8n9_rIYI.js → index-BwN0QusL.js} +19320 -19795
  4. package/dist/index-BwN0QusL.js.map +1 -0
  5. package/dist/index.js +28 -17
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.umd.cjs +2667 -2694
  8. package/dist/index.umd.cjs.map +1 -1
  9. package/dist/{plugin-B5E6LZ4X.js → plugin-BE23BSP6.js} +5817 -5685
  10. package/dist/plugin-BE23BSP6.js.map +1 -0
  11. package/dist/primary/shell/src/UI/components/clinical-pathways-action-menu/clinical-pathways-action-menu.d.ts +4 -12
  12. package/dist/primary/shell/src/UI/components/communication-action-menu/communication-action-menu.d.ts +4 -12
  13. package/dist/primary/shell/src/UI/components/petitioner-action-menu/petitioner-action-menu.d.ts +4 -12
  14. package/dist/primary/shell/src/UI/components/sidenav-action-menu/sidenav-action-menu.d.ts +27 -0
  15. package/dist/primary/shell/src/UI/components/sidenav-action-menu/template.d.ts +2 -0
  16. package/dist/primary/shell/src/UI/shared-components/primaria-text-editor/primaria-rich-text-editor.d.ts +7 -1
  17. package/dist/primary/shell/src/api/broker/broker-events.d.ts +15 -0
  18. package/dist/primary/shell/src/api/broker/broker-requests.d.ts +20 -0
  19. package/dist/primary/shell/src/api/broker/primaria-broker.d.ts +4 -0
  20. package/dist/primary/shell/src/api/ecap-event-manager/ecap-event-manager.d.ts +2 -2
  21. package/dist/primary/shell/src/api/import-data-manager/component/component.d.ts +1 -0
  22. package/dist/primary/shell/src/api/region-manager/region-manager.d.ts +10 -3
  23. package/dist/primary/shell/src/api/region-manager/remove-view-idempotency.test.d.ts +1 -0
  24. package/dist/primary/shell/src/disposer.d.ts +1 -1
  25. package/dist/primary/shell/src/features/bootstrapper.d.ts +1 -1
  26. package/dist/primary/shell/src/features/exit/handler.d.ts +12 -0
  27. package/dist/primary/shell/src/features/get-user-info/backend-adapter.d.ts +4 -2
  28. package/dist/primary/shell/src/features/get-user-info/pds-token.d.ts +26 -0
  29. package/dist/primary/shell/src/features/get-visi-id/action.d.ts +2 -0
  30. package/dist/primary/shell/src/index.d.ts +5 -0
  31. package/dist/primary/shell/src/locales.d.ts +1 -0
  32. package/package.json +5 -8
  33. package/src/UI/components/clinical-pathways-action-menu/clinical-pathways-action-menu.ts +6 -41
  34. package/src/UI/components/communication-action-menu/communication-action-menu.ts +6 -41
  35. package/src/UI/components/petitioner-action-menu/petitioner-action-menu.ts +6 -41
  36. package/src/UI/components/primaria-shell/primaria-shell.ts +3 -1
  37. package/src/UI/components/sidenav-action-menu/sidenav-action-menu.ts +62 -0
  38. package/src/UI/components/{petitioner-action-menu → sidenav-action-menu}/template.ts +3 -3
  39. package/src/UI/internal-views/doctor-nav-menu.ts +9 -2
  40. package/src/UI/shared-components/bootstrapper.ts +3 -1
  41. package/src/UI/shared-components/primaria-nav-item/primaria-nav-item.ts +3 -1
  42. package/src/UI/shared-components/primaria-text-editor/primaria-rich-text-editor.ts +34 -21
  43. package/src/api/activity-monitor/activity-monitor.test.ts +1 -1
  44. package/src/api/broker/broker-events.ts +9 -0
  45. package/src/api/broker/broker-requests.ts +20 -0
  46. package/src/api/broker/factory.ts +2 -0
  47. package/src/api/broker/primaria-broker.ts +4 -0
  48. package/src/api/ecap-event-manager/ecap-event-manager.test.ts +12 -4
  49. package/src/api/ecap-event-manager/ecap-event-manager.ts +5 -1
  50. package/src/api/http-client/http-client.test.ts +12 -31
  51. package/src/api/import-data-manager/component/component.ts +3 -0
  52. package/src/api/import-data-manager/component/styles.css +25 -32
  53. package/src/api/import-data-manager/component/template.ts +16 -0
  54. package/src/api/import-data-manager/import-data-manager-impl.test.ts +2 -0
  55. package/src/api/interaction-service/interaction-service-impl.tsx +19 -8
  56. package/src/api/localization/localization.ts +44 -40
  57. package/src/api/notification-service/notification-service-impl.test.ts +2 -1
  58. package/src/api/region-manager/region-manager.test.ts +112 -3
  59. package/src/api/region-manager/region-manager.ts +85 -10
  60. package/src/api/region-manager/remove-view-idempotency.test.ts +98 -0
  61. package/src/api/token-manager/token-manager.test.ts +3 -6
  62. package/src/disposer.ts +2 -2
  63. package/src/features/bootstrapper.ts +2 -2
  64. package/src/features/exit/handler.test.ts +60 -0
  65. package/src/features/exit/handler.ts +19 -3
  66. package/src/features/get-user-info/backend-adapter.ts +30 -18
  67. package/src/features/get-user-info/handler.test.ts +8 -2
  68. package/src/features/get-user-info/pds-token.ts +28 -0
  69. package/src/features/get-visi-id/action.ts +11 -0
  70. package/src/index.ts +40 -1
  71. package/src/locales.ts +1 -0
  72. package/src/types/custom.d.ts +30 -0
  73. package/dist/component-Bt_gBs5e.js +0 -52
  74. package/dist/component-Bt_gBs5e.js.map +0 -1
  75. package/dist/index-8n9_rIYI.js.map +0 -1
  76. package/dist/plugin-B5E6LZ4X.js.map +0 -1
  77. package/dist/primary/shell/src/UI/components/clinical-pathways-action-menu/template.d.ts +0 -2
  78. package/dist/primary/shell/src/UI/components/communication-action-menu/template.d.ts +0 -2
  79. package/dist/primary/shell/src/UI/components/petitioner-action-menu/template.d.ts +0 -2
  80. package/src/UI/components/clinical-pathways-action-menu/template.ts +0 -24
  81. package/src/UI/components/communication-action-menu/styles.css +0 -29
  82. package/src/UI/components/communication-action-menu/template.ts +0 -24
  83. package/src/UI/components/petitioner-action-menu/styles.css +0 -29
  84. /package/src/UI/components/{clinical-pathways-action-menu → sidenav-action-menu}/styles.css +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin-B5E6LZ4X.js","sources":["../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/constructFrom.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/addDays.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/constants.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/_lib/defaultOptions.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startOfWeek.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startOfISOWeek.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getISOWeekYear.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startOfDay.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/differenceInCalendarDays.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startOfISOWeekYear.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isDate.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/isValid.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startOfYear.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/locale/en-US/_lib/formatDistance.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/locale/_lib/buildFormatLongFn.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/locale/en-US/_lib/formatLong.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/locale/en-US/_lib/formatRelative.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/locale/_lib/buildLocalizeFn.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/locale/en-US/_lib/localize.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/locale/_lib/buildMatchFn.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/locale/_lib/buildMatchPatternFn.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/locale/en-US/_lib/match.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/locale/en-US.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getDayOfYear.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getISOWeek.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getWeekYear.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/startOfWeekYear.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getWeek.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/_lib/addLeadingZeros.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/_lib/format/lightFormatters.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/_lib/format/formatters.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/_lib/format/longFormatters.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/_lib/protectedTokens.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/format.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getDefaultOptions.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/getISODay.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/transpose.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/Setter.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/Parser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/EraParser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/constants.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/utils.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/YearParser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/LocalWeekYearParser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/ISOWeekYearParser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/ExtendedYearParser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/QuarterParser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/StandAloneQuarterParser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/MonthParser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/StandAloneMonthParser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setWeek.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/LocalWeekParser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setISOWeek.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/ISOWeekParser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/DateParser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/DayOfYearParser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setDay.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/DayParser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/LocalDayParser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/StandAloneLocalDayParser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/setISODay.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/ISODayParser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/AMPMParser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/AMPMMidnightParser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/DayPeriodParser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/Hour1to12Parser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/Hour0to23Parser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/Hour0To11Parser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/Hour1To24Parser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/MinuteParser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/SecondParser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/FractionOfSecondParser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/ISOTimezoneWithZParser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/ISOTimezoneParser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/TimestampSecondsParser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers/TimestampMillisecondsParser.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse/_lib/parsers.mjs","../../../node_modules/.pnpm/date-fns@3.6.0/node_modules/date-fns/parse.mjs","../../../plugins/core/src/broker-extensions.ts","../../../plugins/core/src/utilities/generate-id.ts","../../../plugins/core/src/utilities/map-to-label-value.ts","../../../plugins/core/src/redux-utilities/redux-decorator-factory.ts","../../../plugins/core/src/redux-utilities/create-redux-connected-property.ts","../../../plugins/core/src/interfaces/activity-history.ts","../../../plugins/activity-history/src/infrastructure/ioc/types.ts","../../../node_modules/.pnpm/redux@5.0.1/node_modules/redux/dist/redux.mjs","../../../node_modules/.pnpm/immer@10.1.1/node_modules/immer/dist/immer.mjs","../../../node_modules/.pnpm/reselect@5.1.1/node_modules/reselect/dist/reselect.mjs","../../../node_modules/.pnpm/redux-thunk@3.1.0_redux@5.0.1/node_modules/redux-thunk/dist/redux-thunk.mjs","../../../node_modules/.pnpm/@reduxjs+toolkit@2.6.1_react@19.0.0/node_modules/@reduxjs/toolkit/dist/redux-toolkit.modern.mjs","../../../plugins/activity-history/src/activity-history-item/add/add-history-items/add-items-to-collection.ts","../../../plugins/activity-history/src/activity-history-item/add/add-history-item/add-item-to-collection.ts","../../../plugins/activity-history/src/activity-history-item/add/add-history-item/reducer.ts","../../../plugins/activity-history/src/activity-history-item/add/add-history-items/reducer.ts","../../../plugins/activity-history/src/activity-history-item/add/handle-busy/reducers.ts","../../../plugins/activity-history/src/activity-history-item/add/handle-error/reducers.ts","../../../plugins/activity-history/src/activity-history-item/clear/reducer.ts","../../../plugins/activity-history/src/activity-history-item/remove/remove-item-from-collection.ts","../../../plugins/activity-history/src/activity-history-item/remove/reducer.ts","../../../plugins/activity-history/src/activity-history-item/update/update-item-in-collection.ts","../../../plugins/activity-history/src/activity-history-item/update/reducer.ts","../../../plugins/activity-history/src/activity-history-item/slice.ts","../../../plugins/activity-history/src/activity-history-item/search/reducer.ts","../../../plugins/activity-history/src/activity-history-item/domain/specs/spec.ts","../../../plugins/activity-history/src/activity-history-item/domain/specs/own-spec.ts","../../../plugins/activity-history/src/activity-history-item/domain/specs/relevant-spec.ts","../../../plugins/activity-history/src/activity-history-item/filter/model.ts","../../../plugins/activity-history/src/activity-history-item/filter/common-filters/common-filters.ts","../../../plugins/activity-history/src/activity-history-item/filter/common-filters/set-common-filter/reducer.ts","../../../plugins/activity-history/src/activity-history-item/filter/custom-filters/add-custom-filters/reducer.ts","../../../plugins/activity-history/src/activity-history-item/filter/custom-filters/clear-custom-filters/reducer.ts","../../../plugins/activity-history/src/activity-history-item/filter/custom-filters/set-custom-filter-all-values/reducer.ts","../../../plugins/activity-history/src/activity-history-item/filter/custom-filters/set-custom-filter-group/reducer.ts","../../../plugins/activity-history/src/activity-history-item/filter/custom-filters/set-custom-filter-value/reducer.ts","../../../plugins/activity-history/src/activity-history-item/filter/diagnostic-filters/delete/reducer.ts","../../../plugins/activity-history/src/activity-history-item/filter/diagnostic-filters/set/reducer.ts","../../../plugins/activity-history/src/activity-history-item/filter/reset/reducer.ts","../../../plugins/activity-history/src/activity-history-item/filter/up-filters/add/reducer.ts","../../../plugins/activity-history/src/activity-history-item/filter/up-filters/set/reducer.ts","../../../plugins/activity-history/src/activity-history-item/filter/slice.ts","../../../plugins/activity-history/src/infrastructure/state/store.ts","../../../plugins/activity-history/src/infrastructure/ioc/container.ts","../../../plugins/activity-history/src/infrastructure/base-handlers.ts","../../../plugins/activity-history/src/activity-history-item/add/handle-busy/actions.ts","../../../plugins/activity-history/src/activity-history-item/add/handle-error/actions.ts","../../../plugins/activity-history/src/activity-history-item/add/add-async-history-items/validate-add-async-items-command.ts","../../../plugins/activity-history/src/activity-history-item/add/add-async-history-items/handler.ts","../../../plugins/activity-history/src/activity-history-item/add/add-async-history-items/bootstrapper.ts","../../../plugins/activity-history/src/localization.ts","../../../plugins/activity-history/src/activity-history-item/domain/exist-item-in-collection.ts","../../../plugins/activity-history/src/activity-history-item/domain/validation/utils.ts","../../../plugins/activity-history/src/activity-history-item/domain/validation/is-valid-basic-history-item.ts","../../../plugins/activity-history/src/activity-history-item/filter/up-filters/handle-add-up-options-from-item.ts","../../../plugins/activity-history/src/activity-history-item/add/add-history-item/action.ts","../../../plugins/activity-history/src/activity-history-item/add/add-history-item/handler.ts","../../../plugins/activity-history/src/activity-history-item/add/add-history-item/bootstrapper.ts","../../../plugins/activity-history/src/activity-history-item/filter/custom-filters/add-custom-filters/request.ts","../../../plugins/activity-history/src/activity-history-item/add/add-history-items/action.ts","../../../plugins/activity-history/src/activity-history-item/add/add-history-items/handler.ts","../../../plugins/activity-history/src/activity-history-item/add/add-history-items/bootstrapper.ts","../../../plugins/activity-history/src/infrastructure/state/connected-property.ts","../../../plugins/activity-history/src/activity-history-item/add/handle-busy/selectors.ts","../../../plugins/activity-history/src/activity-history-item/add/handle-busy/busy-component/template.ts","../../../plugins/activity-history/src/activity-history-item/add/handle-busy/busy-component/component.ts","../../../plugins/activity-history/src/activity-history-item/add/handle-error/handle-history-items-add-error/request.ts","../../../plugins/activity-history/src/activity-history-item/add/handle-error/handle-history-items-add-error/handler.ts","../../../plugins/activity-history/src/activity-history-item/add/handle-error/handle-history-items-add-error/bootstrapper.ts","../../../plugins/activity-history/src/activity-history-item/export-to-pdf/export-pdf-modal/template.ts","../../../plugins/activity-history/src/activity-history-item/export-to-pdf/export-pdf-modal/export-pdf-modal.ts","../../../plugins/activity-history/src/activity-history-item/export-to-pdf/handler.ts","../../../plugins/activity-history/src/activity-history-item/export-to-pdf/request.ts","../../../plugins/activity-history/src/activity-history-item/export-to-pdf/bootstrapper.ts","../../../plugins/activity-history/src/utils/get-unique-values-by-prop-path.ts","../../../plugins/activity-history/src/activity-history-item/domain/specs/true-spec.ts","../../../plugins/activity-history/src/activity-history-item/domain/specs/common-filter-spec.ts","../../../plugins/activity-history/src/activity-history-item/domain/specs/false-spec.ts","../../../plugins/activity-history/src/activity-history-item/domain/specs/prop-path-spec.ts","../../../plugins/activity-history/src/activity-history-item/domain/specs/custom-filter-spec.ts","../../../plugins/activity-history/src/activity-history-item/domain/specs/diagnostics-filter-spec.ts","../../../plugins/activity-history/src/utils/normalize-string.ts","../../../plugins/activity-history/src/utils/prop-contains-string.ts","../../../plugins/activity-history/src/activity-history-item/domain/specs/search-string-spec.ts","../../../plugins/activity-history/src/activity-history-item/domain/specs/type-spec.ts","../../../plugins/activity-history/src/activity-history-item/domain/specs/up-filter-spec.ts","../../../plugins/activity-history/src/activity-history-item/filter/selectors.ts","../../../plugins/activity-history/src/activity-history-item/filter/common-filters/selectors.ts","../../../plugins/activity-history/src/activity-history-item/filter/custom-filters/selectors.ts","../../../plugins/activity-history/src/activity-history-item/filter/diagnostic-filters/selectors.ts","../../../plugins/activity-history/src/activity-history-item/filter/up-filters/selectors.ts","../../../plugins/activity-history/src/activity-history-item/domain/validation/diagnostics/are-same-diagnostics.ts","../../../plugins/activity-history/src/activity-history-item/domain/validation/diagnostics/has-valid-diagnostics.ts","../../../plugins/activity-history/src/activity-history-item/list/group-history-items/group-history-items.ts","../../../plugins/activity-history/src/activity-history-item/list/sort-history-items-by-date/sort-history-items-by-date.ts","../../../plugins/activity-history/src/activity-history-item/search/selectors.ts","../../../plugins/activity-history/src/activity-history-item/selectors.ts","../../../plugins/activity-history/src/activity-history-item/filter/common-filters/set-common-filter/request.ts","../../../plugins/activity-history/src/activity-history-item/filter/custom-filters/set-custom-filter-all-values/request.ts","../../../plugins/activity-history/src/activity-history-item/filter/custom-filters/set-custom-filter-group/request.ts","../../../plugins/activity-history/src/activity-history-item/filter/custom-filters/set-custom-filter-value/request.ts","../../../plugins/activity-history/src/activity-history-item/filter/up-filters/set/request.ts","../../../plugins/activity-history/src/activity-history-item/filter/UI/activity-history-filters/template.ts","../../../plugins/activity-history/src/activity-history-item/filter/UI/activity-history-filters/activity-history-filters.ts","../../../plugins/activity-history/src/activity-history-item/filter/common-filters/set-common-filter/actions.ts","../../../plugins/activity-history/src/activity-history-item/filter/common-filters/set-common-filter/handler.ts","../../../plugins/activity-history/src/activity-history-item/filter/common-filters/set-common-filter/bootstrapper.ts","../../../plugins/activity-history/src/activity-history-item/filter/custom-filters/add-custom-filters/actions.ts","../../../plugins/activity-history/src/activity-history-item/filter/custom-filters/add-custom-filters/handler.ts","../../../plugins/activity-history/src/activity-history-item/filter/custom-filters/add-custom-filters/bootstrapper.ts","../../../plugins/activity-history/src/activity-history-item/filter/custom-filters/set-custom-filter-all-values/actions.ts","../../../plugins/activity-history/src/activity-history-item/filter/custom-filters/set-custom-filter-all-values/handler.ts","../../../plugins/activity-history/src/activity-history-item/filter/custom-filters/set-custom-filter-all-values/bootstrapper.ts","../../../plugins/activity-history/src/activity-history-item/filter/custom-filters/set-custom-filter-group/actions.ts","../../../plugins/activity-history/src/activity-history-item/filter/custom-filters/set-custom-filter-group/handler.ts","../../../plugins/activity-history/src/activity-history-item/filter/custom-filters/set-custom-filter-group/bootstrapper.ts","../../../plugins/activity-history/src/activity-history-item/filter/custom-filters/set-custom-filter-value/actions.ts","../../../plugins/activity-history/src/activity-history-item/filter/custom-filters/set-custom-filter-value/handler.ts","../../../plugins/activity-history/src/activity-history-item/filter/custom-filters/set-custom-filter-value/bootstrapper.ts","../../../plugins/activity-history/src/activity-history-item/filter/diagnostic-filters/delete/actions.ts","../../../plugins/activity-history/src/activity-history-item/filter/diagnostic-filters/delete/handler.ts","../../../plugins/activity-history/src/activity-history-item/filter/diagnostic-filters/delete/request.ts","../../../plugins/activity-history/src/activity-history-item/filter/diagnostic-filters/delete/bootstrapper.ts","../../../plugins/activity-history/src/activity-history-item/filter/diagnostic-filters/set/actions.ts","../../../plugins/activity-history/src/activity-history-item/filter/diagnostic-filters/set/handler.ts","../../../plugins/activity-history/src/activity-history-item/filter/diagnostic-filters/set/request.ts","../../../plugins/activity-history/src/activity-history-item/filter/diagnostic-filters/set/bootstrapper.ts","../../../plugins/activity-history/src/activity-history-item/filter/diagnostic-filters/subscribe-diagnostic-historic-filters.ts","../../../plugins/activity-history/src/activity-history-item/filter/reset/request.ts","../../../plugins/activity-history/src/activity-history-item/filter/reset/actions.ts","../../../plugins/activity-history/src/activity-history-item/filter/reset/handler.ts","../../../plugins/activity-history/src/activity-history-item/filter/reset/bootstrapper.ts","../../../plugins/activity-history/src/activity-history-item/filter/up-filters/add/actions.ts","../../../plugins/activity-history/src/activity-history-item/filter/up-filters/add/handler.ts","../../../plugins/activity-history/src/activity-history-item/filter/up-filters/add/request.ts","../../../plugins/activity-history/src/activity-history-item/filter/up-filters/add/bootstrapper.ts","../../../plugins/activity-history/src/activity-history-item/filter/up-filters/set/actions.ts","../../../plugins/activity-history/src/activity-history-item/filter/up-filters/set/handler.ts","../../../plugins/activity-history/src/activity-history-item/filter/up-filters/set/bootstrapper.ts","../../../plugins/activity-history/src/activity-history-item/filter/bootstrapper.ts","../../../plugins/activity-history/src/activity-history-item/list/UI/timeline/constants.ts","../../../plugins/activity-history/src/activity-history-item/list/UI/timeline/estimate-group-height.ts","../../../node_modules/.pnpm/lit-html@3.2.0/node_modules/lit-html/async-directive.js","../../../node_modules/.pnpm/lit-html@3.2.0/node_modules/lit-html/directives/ref.js","../../../plugins/activity-history/src/activity-history-item/add/handle-busy/is-grouping-busy/template.ts","../../../plugins/activity-history/src/activity-history-item/add/handle-busy/is-grouping-busy/component.ts","../../../plugins/activity-history/src/activity-history-item/domain/business-rules.ts","../../../plugins/activity-history/src/activity-history-item/list/merge-history-items-and-subgroups/merge-history-items-and-subgroups.ts","../../../plugins/activity-history/src/activity-history-item/list/UI/timeline/template.ts","../../../node_modules/.pnpm/@tanstack+virtual-core@3.14.0/node_modules/@tanstack/virtual-core/dist/esm/utils.js","../../../node_modules/.pnpm/@tanstack+virtual-core@3.14.0/node_modules/@tanstack/virtual-core/dist/esm/index.js","../../../plugins/activity-history/src/activity-history-item/list/UI/timeline/virtual-scroller.ts","../../../plugins/activity-history/src/activity-history-item/list/UI/timeline/activity-history-timeline.ts","../../../plugins/activity-history/src/activity-history-item/filter/UI/active-filters-header/template.ts","../../../plugins/activity-history/src/activity-history-item/filter/UI/active-filters-header/active-filters-header.ts","../../../plugins/activity-history/src/activity-history-item/add/handle-error/history-full-data-error/template.ts","../../../plugins/activity-history/src/activity-history-item/add/handle-error/selectors.ts","../../../plugins/activity-history/src/activity-history-item/add/handle-error/history-full-data-error/component.ts","../../../plugins/activity-history/src/activity-history-item/add/handle-error/history-partial-data-error/template.ts","../../../plugins/activity-history/src/activity-history-item/add/handle-error/history-partial-data-error/component.ts","../../../plugins/activity-history/src/activity-history-item/clear/action.ts","../../../plugins/activity-history/src/activity-history-item/refresh/handler.ts","../../../plugins/activity-history/src/activity-history-item/refresh/request.ts","../../../plugins/activity-history/src/activity-history-item/refresh/bootstrapper.ts","../../../plugins/activity-history/src/activity-history-item/remove/action.ts","../../../plugins/activity-history/src/activity-history-item/remove/handler.ts","../../../plugins/activity-history/src/activity-history-item/remove/bootstrapper.ts","../../../plugins/activity-history/src/activity-history-item/search/actions.ts","../../../plugins/activity-history/src/activity-history-item/search/handler.ts","../../../plugins/activity-history/src/activity-history-item/search/request.ts","../../../plugins/activity-history/src/activity-history-item/search/activity-history-search-results/template.ts","../../../plugins/activity-history/src/activity-history-item/search/activity-history-search-results/activity-history-search-results.ts","../../../plugins/activity-history/src/activity-history-item/search/activity-history-search-bar/template.ts","../../../plugins/activity-history/src/activity-history-item/search/activity-history-search-bar/activity-history-search-bar.ts","../../../plugins/activity-history/src/activity-history-item/filter/utils.ts","../../../plugins/activity-history/src/activity-history-item/filter/UI/active-filters-badges/template.ts","../../../plugins/activity-history/src/activity-history-item/filter/UI/active-filters-badges/active-filters-badges.ts","../../../plugins/activity-history/src/activity-history-item/search/bootstrapper.ts","../../../plugins/activity-history/src/activity-history-item/update/action.ts","../../../plugins/activity-history/src/activity-history-item/update/handler.ts","../../../plugins/activity-history/src/activity-history-item/update/bootstrapper.ts","../../../plugins/activity-history/src/activity-history-item/bootstrapper.ts","../../../plugins/activity-history/src/constants.ts","../../../plugins/activity-history/src/activity-history-item/shared/prepare-group-components.ts","../../../plugins/activity-history/src/activity-history-item/shared/scroller-controller.ts","../../../plugins/activity-history/src/activity-history-item/importer/filters.ts","../../../plugins/activity-history/src/activity-history-item/importer/template.ts","../../../plugins/activity-history/src/activity-history-item/importer/activity-history-importer.ts","../../../plugins/activity-history/src/activity-history-item/list/UI/main-view/template.ts","../../../plugins/activity-history/src/activity-history-item/list/UI/main-view/activity-history-main.ts","../../../plugins/activity-history/src/handle-views.ts","../../../plugins/activity-history/src/plugin.ts"],"sourcesContent":["/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from 'date-fns'\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date(date: DateType): DateType {\n * return constructFrom(\n * date, // Use contrustor from the given date\n * date.getTime() // Use the date value to create a new date\n * )\n * }\n */\nexport function constructFrom(date, value) {\n if (date instanceof Date) {\n return new date.constructor(value);\n } else {\n return new Date(value);\n }\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { toDate } from \"./toDate.mjs\";\nimport { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param amount - The amount of days to be added.\n *\n * @returns The new date with the days added\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * const result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\nexport function addDays(date, amount) {\n const _date = toDate(date);\n if (isNaN(amount)) return constructFrom(date, NaN);\n if (!amount) {\n // If 0 days, no-op to avoid changing times in the hour before end of DST\n return _date;\n }\n _date.setDate(_date.getDate() + amount);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default addDays;\n","/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n * return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occures every 4 years, except for years that are divisable by 100 and not divisable by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n","let defaultOptions = {};\n\nexport function getDefaultOptions() {\n return defaultOptions;\n}\n\nexport function setDefaultOptions(newOptions) {\n defaultOptions = newOptions;\n}\n","import { toDate } from \"./toDate.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link startOfWeek} function options.\n */\n\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfWeek(date, options) {\n const defaultOptions = getDefaultOptions();\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const _date = toDate(date);\n const day = _date.getDay();\n const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n\n _date.setDate(_date.getDate() - diff);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeek;\n","import { startOfWeek } from \"./startOfWeek.mjs\";\n\n/**\n * @name startOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of an ISO week\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * const result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfISOWeek(date) {\n return startOfWeek(date, { weekStartsOn: 1 });\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeek;\n","import { constructFrom } from \"./constructFrom.mjs\";\nimport { startOfISOWeek } from \"./startOfISOWeek.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name getISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n *\n * @returns The ISO week-numbering year\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * const result = getISOWeekYear(new Date(2005, 0, 2))\n * //=> 2004\n */\nexport function getISOWeekYear(date) {\n const _date = toDate(date);\n const year = _date.getFullYear();\n\n const fourthOfJanuaryOfNextYear = constructFrom(date, 0);\n fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);\n fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear);\n\n const fourthOfJanuaryOfThisYear = constructFrom(date, 0);\n fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4);\n fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear);\n\n if (_date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (_date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getISOWeekYear;\n","import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of a day\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nexport function startOfDay(date) {\n const _date = toDate(date);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfDay;\n","import { toDate } from \"../toDate.mjs\";\n\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport function getTimezoneOffsetInMilliseconds(date) {\n const _date = toDate(date);\n const utcDate = new Date(\n Date.UTC(\n _date.getFullYear(),\n _date.getMonth(),\n _date.getDate(),\n _date.getHours(),\n _date.getMinutes(),\n _date.getSeconds(),\n _date.getMilliseconds(),\n ),\n );\n utcDate.setUTCFullYear(_date.getFullYear());\n return +date - +utcDate;\n}\n","import { millisecondsInDay } from \"./constants.mjs\";\nimport { startOfDay } from \"./startOfDay.mjs\";\nimport { getTimezoneOffsetInMilliseconds } from \"./_lib/getTimezoneOffsetInMilliseconds.mjs\";\n\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateLeft - The later date\n * @param dateRight - The earlier date\n *\n * @returns The number of calendar days\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInCalendarDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInCalendarDays(\n * new Date(2011, 6, 3, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\nexport function differenceInCalendarDays(dateLeft, dateRight) {\n const startOfDayLeft = startOfDay(dateLeft);\n const startOfDayRight = startOfDay(dateRight);\n\n const timestampLeft =\n +startOfDayLeft - getTimezoneOffsetInMilliseconds(startOfDayLeft);\n const timestampRight =\n +startOfDayRight - getTimezoneOffsetInMilliseconds(startOfDayRight);\n\n // Round the number of days to the nearest integer because the number of\n // milliseconds in a day is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round((timestampLeft - timestampRight) / millisecondsInDay);\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarDays;\n","import { getISOWeekYear } from \"./getISOWeekYear.mjs\";\nimport { startOfISOWeek } from \"./startOfISOWeek.mjs\";\nimport { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name startOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of an ISO week-numbering year\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * const result = startOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfISOWeekYear(date) {\n const year = getISOWeekYear(date);\n const fourthOfJanuary = constructFrom(date, 0);\n fourthOfJanuary.setFullYear(year, 0, 4);\n fourthOfJanuary.setHours(0, 0, 0, 0);\n return startOfISOWeek(fourthOfJanuary);\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeekYear;\n","/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param value - The value to check\n *\n * @returns True if the given value is a date\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nexport function isDate(value) {\n return (\n value instanceof Date ||\n (typeof value === \"object\" &&\n Object.prototype.toString.call(value) === \"[object Date]\")\n );\n}\n\n// Fallback for modularized imports:\nexport default isDate;\n","import { isDate } from \"./isDate.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate](https://date-fns.org/docs/toDate)\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to check\n *\n * @returns The date is valid\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nexport function isValid(date) {\n if (!isDate(date) && typeof date !== \"number\") {\n return false;\n }\n const _date = toDate(date);\n return !isNaN(Number(_date));\n}\n\n// Fallback for modularized imports:\nexport default isValid;\n","import { toDate } from \"./toDate.mjs\";\nimport { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name startOfYear\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of a year\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\nexport function startOfYear(date) {\n const cleanDate = toDate(date);\n const _date = constructFrom(date, 0);\n _date.setFullYear(cleanDate.getFullYear(), 0, 1);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfYear;\n","const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"less than a second\",\n other: \"less than {{count}} seconds\",\n },\n\n xSeconds: {\n one: \"1 second\",\n other: \"{{count}} seconds\",\n },\n\n halfAMinute: \"half a minute\",\n\n lessThanXMinutes: {\n one: \"less than a minute\",\n other: \"less than {{count}} minutes\",\n },\n\n xMinutes: {\n one: \"1 minute\",\n other: \"{{count}} minutes\",\n },\n\n aboutXHours: {\n one: \"about 1 hour\",\n other: \"about {{count}} hours\",\n },\n\n xHours: {\n one: \"1 hour\",\n other: \"{{count}} hours\",\n },\n\n xDays: {\n one: \"1 day\",\n other: \"{{count}} days\",\n },\n\n aboutXWeeks: {\n one: \"about 1 week\",\n other: \"about {{count}} weeks\",\n },\n\n xWeeks: {\n one: \"1 week\",\n other: \"{{count}} weeks\",\n },\n\n aboutXMonths: {\n one: \"about 1 month\",\n other: \"about {{count}} months\",\n },\n\n xMonths: {\n one: \"1 month\",\n other: \"{{count}} months\",\n },\n\n aboutXYears: {\n one: \"about 1 year\",\n other: \"about {{count}} years\",\n },\n\n xYears: {\n one: \"1 year\",\n other: \"{{count}} years\",\n },\n\n overXYears: {\n one: \"over 1 year\",\n other: \"over {{count}} years\",\n },\n\n almostXYears: {\n one: \"almost 1 year\",\n other: \"almost {{count}} years\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n let result;\n\n const tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === \"string\") {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace(\"{{count}}\", count.toString());\n }\n\n if (options?.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return \"in \" + result;\n } else {\n return result + \" ago\";\n }\n }\n\n return result;\n};\n","export function buildFormatLongFn(args) {\n return (options = {}) => {\n // TODO: Remove String()\n const width = options.width ? String(options.width) : args.defaultWidth;\n const format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.mjs\";\n\nconst dateFormats = {\n full: \"EEEE, MMMM do, y\",\n long: \"MMMM do, y\",\n medium: \"MMM d, y\",\n short: \"MM/dd/yyyy\",\n};\n\nconst timeFormats = {\n full: \"h:mm:ss a zzzz\",\n long: \"h:mm:ss a z\",\n medium: \"h:mm:ss a\",\n short: \"h:mm a\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: \"{{date}}, {{time}}\",\n short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","const formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: \"P\",\n};\n\nexport const formatRelative = (token, _date, _baseDate, _options) =>\n formatRelativeLocale[token];\n","/* eslint-disable no-unused-vars */\n\n/**\n * The localize function argument callback which allows to convert raw value to\n * the actual type.\n *\n * @param value - The value to convert\n *\n * @returns The converted value\n */\n\n/**\n * The map of localized values for each width.\n */\n\n/**\n * The index type of the locale unit value. It types conversion of units of\n * values that don't start at 0 (i.e. quarters).\n */\n\n/**\n * Converts the unit value to the tuple of values.\n */\n\n/**\n * The tuple of localized era values. The first element represents BC,\n * the second element represents AD.\n */\n\n/**\n * The tuple of localized quarter values. The first element represents Q1.\n */\n\n/**\n * The tuple of localized day values. The first element represents Sunday.\n */\n\n/**\n * The tuple of localized month values. The first element represents January.\n */\n\nexport function buildLocalizeFn(args) {\n return (value, options) => {\n const context = options?.context ? String(options.context) : \"standalone\";\n\n let valuesArray;\n if (context === \"formatting\" && args.formattingValues) {\n const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n const width = options?.width ? String(options.width) : defaultWidth;\n\n valuesArray =\n args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n const defaultWidth = args.defaultWidth;\n const width = options?.width ? String(options.width) : args.defaultWidth;\n\n valuesArray = args.values[width] || args.values[defaultWidth];\n }\n const index = args.argumentCallback ? args.argumentCallback(value) : value;\n\n // @ts-expect-error - For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n return valuesArray[index];\n };\n}\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.mjs\";\n\nconst eraValues = {\n narrow: [\"B\", \"A\"],\n abbreviated: [\"BC\", \"AD\"],\n wide: [\"Before Christ\", \"Anno Domini\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"Q1\", \"Q2\", \"Q3\", \"Q4\"],\n wide: [\"1st quarter\", \"2nd quarter\", \"3rd quarter\", \"4th quarter\"],\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nconst monthValues = {\n narrow: [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n abbreviated: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n\n wide: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"],\n short: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n abbreviated: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n wide: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n};\n\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber, _options) => {\n const number = Number(dirtyNumber);\n\n // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`.\n //\n // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'.\n\n const rem100 = number % 100;\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + \"st\";\n case 2:\n return number + \"nd\";\n case 3:\n return number + \"rd\";\n }\n }\n return number + \"th\";\n};\n\nexport const localize = {\n ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => quarter - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","export function buildMatchFn(args) {\n return (string, options = {}) => {\n const width = options.width;\n\n const matchPattern =\n (width && args.matchPatterns[width]) ||\n args.matchPatterns[args.defaultMatchWidth];\n const matchResult = string.match(matchPattern);\n\n if (!matchResult) {\n return null;\n }\n const matchedString = matchResult[0];\n\n const parsePatterns =\n (width && args.parsePatterns[width]) ||\n args.parsePatterns[args.defaultParseWidth];\n\n const key = Array.isArray(parsePatterns)\n ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString))\n : // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type\n findKey(parsePatterns, (pattern) => pattern.test(matchedString));\n\n let value;\n\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type\n options.valueCallback(value)\n : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n\nfunction findKey(object, predicate) {\n for (const key in object) {\n if (\n Object.prototype.hasOwnProperty.call(object, key) &&\n predicate(object[key])\n ) {\n return key;\n }\n }\n return undefined;\n}\n\nfunction findIndex(array, predicate) {\n for (let key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n return undefined;\n}\n","export function buildMatchPatternFn(args) {\n return (string, options = {}) => {\n const matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n const matchedString = matchResult[0];\n\n const parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n let value = args.valueCallback\n ? args.valueCallback(parseResult[0])\n : parseResult[0];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type\n value = options.valueCallback ? options.valueCallback(value) : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.mjs\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.mjs\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i,\n};\nconst parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^j/i,\n /^f/i,\n /^m/i,\n /^a/i,\n /^m/i,\n /^j/i,\n /^j/i,\n /^a/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n\n any: [\n /^ja/i,\n /^f/i,\n /^mar/i,\n /^ap/i,\n /^may/i,\n /^jun/i,\n /^jul/i,\n /^au/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i,\n};\nconst parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: (value) => parseInt(value, 10),\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { formatDistance } from \"./en-US/_lib/formatDistance.mjs\";\nimport { formatLong } from \"./en-US/_lib/formatLong.mjs\";\nimport { formatRelative } from \"./en-US/_lib/formatRelative.mjs\";\nimport { localize } from \"./en-US/_lib/localize.mjs\";\nimport { match } from \"./en-US/_lib/match.mjs\";\n\n/**\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp](https://github.com/kossnocorp)\n * @author Lesha Koss [@leshakoss](https://github.com/leshakoss)\n */\nexport const enUS = {\n code: \"en-US\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0 /* Sunday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default enUS;\n","import { differenceInCalendarDays } from \"./differenceInCalendarDays.mjs\";\nimport { startOfYear } from \"./startOfYear.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name getDayOfYear\n * @category Day Helpers\n * @summary Get the day of the year of the given date.\n *\n * @description\n * Get the day of the year of the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n *\n * @returns The day of year\n *\n * @example\n * // Which day of the year is 2 July 2014?\n * const result = getDayOfYear(new Date(2014, 6, 2))\n * //=> 183\n */\nexport function getDayOfYear(date) {\n const _date = toDate(date);\n const diff = differenceInCalendarDays(_date, startOfYear(_date));\n const dayOfYear = diff + 1;\n return dayOfYear;\n}\n\n// Fallback for modularized imports:\nexport default getDayOfYear;\n","import { millisecondsInWeek } from \"./constants.mjs\";\nimport { startOfISOWeek } from \"./startOfISOWeek.mjs\";\nimport { startOfISOWeekYear } from \"./startOfISOWeekYear.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name getISOWeek\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n *\n * @returns The ISO week\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * const result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\nexport function getISOWeek(date) {\n const _date = toDate(date);\n const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date);\n\n // Round the number of weeks to the nearest integer because the number of\n // milliseconds in a week is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getISOWeek;\n","import { constructFrom } from \"./constructFrom.mjs\";\nimport { startOfWeek } from \"./startOfWeek.mjs\";\nimport { toDate } from \"./toDate.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link getWeekYear} function options.\n */\n\n/**\n * @name getWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Get the local week-numbering year of the given date.\n *\n * @description\n * Get the local week-numbering year of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n * @param options - An object with options.\n *\n * @returns The local week-numbering year\n *\n * @example\n * // Which week numbering year is 26 December 2004 with the default settings?\n * const result = getWeekYear(new Date(2004, 11, 26))\n * //=> 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * const result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * const result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */\nexport function getWeekYear(date, options) {\n const _date = toDate(date);\n const year = _date.getFullYear();\n\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const firstWeekOfNextYear = constructFrom(date, 0);\n firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);\n firstWeekOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfWeek(firstWeekOfNextYear, options);\n\n const firstWeekOfThisYear = constructFrom(date, 0);\n firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);\n firstWeekOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfWeek(firstWeekOfThisYear, options);\n\n if (_date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (_date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getWeekYear;\n","import { constructFrom } from \"./constructFrom.mjs\";\nimport { getWeekYear } from \"./getWeekYear.mjs\";\nimport { startOfWeek } from \"./startOfWeek.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link startOfWeekYear} function options.\n */\n\n/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week-numbering year\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * const result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * const result = startOfWeekYear(new Date(2005, 6, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfWeekYear(date, options) {\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const year = getWeekYear(date, options);\n const firstWeek = constructFrom(date, 0);\n firstWeek.setFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setHours(0, 0, 0, 0);\n const _date = startOfWeek(firstWeek, options);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeekYear;\n","import { millisecondsInWeek } from \"./constants.mjs\";\nimport { startOfWeek } from \"./startOfWeek.mjs\";\nimport { startOfWeekYear } from \"./startOfWeekYear.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * The {@link getWeek} function options.\n */\n\n/**\n * @name getWeek\n * @category Week Helpers\n * @summary Get the local week index of the given date.\n *\n * @description\n * Get the local week index of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The week\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005 with default options?\n * const result = getWeek(new Date(2005, 0, 2))\n * //=> 2\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January?\n * const result = getWeek(new Date(2005, 0, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> 53\n */\n\nexport function getWeek(date, options) {\n const _date = toDate(date);\n const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options);\n\n // Round the number of weeks to the nearest integer because the number of\n // milliseconds in a week is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getWeek;\n","export function addLeadingZeros(number, targetLength) {\n const sign = number < 0 ? \"-\" : \"\";\n const output = Math.abs(number).toString().padStart(targetLength, \"0\");\n return sign + output;\n}\n","import { addLeadingZeros } from \"../addLeadingZeros.mjs\";\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | |\n * | d | Day of month | D | |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | m | Minute | M | Month |\n * | s | Second | S | Fraction of second |\n * | y | Year (abs) | Y | |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\n\nexport const lightFormatters = {\n // Year\n y(date, token) {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n const signedYear = date.getFullYear();\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const year = signedYear > 0 ? signedYear : 1 - signedYear;\n return addLeadingZeros(token === \"yy\" ? year % 100 : year, token.length);\n },\n\n // Month\n M(date, token) {\n const month = date.getMonth();\n return token === \"M\" ? String(month + 1) : addLeadingZeros(month + 1, 2);\n },\n\n // Day of the month\n d(date, token) {\n return addLeadingZeros(date.getDate(), token.length);\n },\n\n // AM or PM\n a(date, token) {\n const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? \"pm\" : \"am\";\n\n switch (token) {\n case \"a\":\n case \"aa\":\n return dayPeriodEnumValue.toUpperCase();\n case \"aaa\":\n return dayPeriodEnumValue;\n case \"aaaaa\":\n return dayPeriodEnumValue[0];\n case \"aaaa\":\n default:\n return dayPeriodEnumValue === \"am\" ? \"a.m.\" : \"p.m.\";\n }\n },\n\n // Hour [1-12]\n h(date, token) {\n return addLeadingZeros(date.getHours() % 12 || 12, token.length);\n },\n\n // Hour [0-23]\n H(date, token) {\n return addLeadingZeros(date.getHours(), token.length);\n },\n\n // Minute\n m(date, token) {\n return addLeadingZeros(date.getMinutes(), token.length);\n },\n\n // Second\n s(date, token) {\n return addLeadingZeros(date.getSeconds(), token.length);\n },\n\n // Fraction of second\n S(date, token) {\n const numberOfDigits = token.length;\n const milliseconds = date.getMilliseconds();\n const fractionalSeconds = Math.trunc(\n milliseconds * Math.pow(10, numberOfDigits - 3),\n );\n return addLeadingZeros(fractionalSeconds, token.length);\n },\n};\n","import { getDayOfYear } from \"../../getDayOfYear.mjs\";\nimport { getISOWeek } from \"../../getISOWeek.mjs\";\nimport { getISOWeekYear } from \"../../getISOWeekYear.mjs\";\nimport { getWeek } from \"../../getWeek.mjs\";\nimport { getWeekYear } from \"../../getWeekYear.mjs\";\nimport { addLeadingZeros } from \"../addLeadingZeros.mjs\";\nimport { lightFormatters } from \"./lightFormatters.mjs\";\n\nconst dayPeriodEnum = {\n am: \"am\",\n pm: \"pm\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n};\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O | Timezone (GMT) |\n * | p! | Long localized time | P! | Long localized date |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nexport const formatters = {\n // Era\n G: function (date, token, localize) {\n const era = date.getFullYear() > 0 ? 1 : 0;\n switch (token) {\n // AD, BC\n case \"G\":\n case \"GG\":\n case \"GGG\":\n return localize.era(era, { width: \"abbreviated\" });\n // A, B\n case \"GGGGG\":\n return localize.era(era, { width: \"narrow\" });\n // Anno Domini, Before Christ\n case \"GGGG\":\n default:\n return localize.era(era, { width: \"wide\" });\n }\n },\n\n // Year\n y: function (date, token, localize) {\n // Ordinal number\n if (token === \"yo\") {\n const signedYear = date.getFullYear();\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const year = signedYear > 0 ? signedYear : 1 - signedYear;\n return localize.ordinalNumber(year, { unit: \"year\" });\n }\n\n return lightFormatters.y(date, token);\n },\n\n // Local week-numbering year\n Y: function (date, token, localize, options) {\n const signedWeekYear = getWeekYear(date, options);\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear;\n\n // Two digit year\n if (token === \"YY\") {\n const twoDigitYear = weekYear % 100;\n return addLeadingZeros(twoDigitYear, 2);\n }\n\n // Ordinal number\n if (token === \"Yo\") {\n return localize.ordinalNumber(weekYear, { unit: \"year\" });\n }\n\n // Padding\n return addLeadingZeros(weekYear, token.length);\n },\n\n // ISO week-numbering year\n R: function (date, token) {\n const isoWeekYear = getISOWeekYear(date);\n\n // Padding\n return addLeadingZeros(isoWeekYear, token.length);\n },\n\n // Extended year. This is a single number designating the year of this calendar system.\n // The main difference between `y` and `u` localizers are B.C. years:\n // | Year | `y` | `u` |\n // |------|-----|-----|\n // | AC 1 | 1 | 1 |\n // | BC 1 | 1 | 0 |\n // | BC 2 | 2 | -1 |\n // Also `yy` always returns the last two digits of a year,\n // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n u: function (date, token) {\n const year = date.getFullYear();\n return addLeadingZeros(year, token.length);\n },\n\n // Quarter\n Q: function (date, token, localize) {\n const quarter = Math.ceil((date.getMonth() + 1) / 3);\n switch (token) {\n // 1, 2, 3, 4\n case \"Q\":\n return String(quarter);\n // 01, 02, 03, 04\n case \"QQ\":\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n case \"Qo\":\n return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"QQQ\":\n return localize.quarter(quarter, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"QQQQQ\":\n return localize.quarter(quarter, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"QQQQ\":\n default:\n return localize.quarter(quarter, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Stand-alone quarter\n q: function (date, token, localize) {\n const quarter = Math.ceil((date.getMonth() + 1) / 3);\n switch (token) {\n // 1, 2, 3, 4\n case \"q\":\n return String(quarter);\n // 01, 02, 03, 04\n case \"qq\":\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n case \"qo\":\n return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"qqq\":\n return localize.quarter(quarter, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"qqqqq\":\n return localize.quarter(quarter, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"qqqq\":\n default:\n return localize.quarter(quarter, {\n width: \"wide\",\n context: \"standalone\",\n });\n }\n },\n\n // Month\n M: function (date, token, localize) {\n const month = date.getMonth();\n switch (token) {\n case \"M\":\n case \"MM\":\n return lightFormatters.M(date, token);\n // 1st, 2nd, ..., 12th\n case \"Mo\":\n return localize.ordinalNumber(month + 1, { unit: \"month\" });\n // Jan, Feb, ..., Dec\n case \"MMM\":\n return localize.month(month, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // J, F, ..., D\n case \"MMMMM\":\n return localize.month(month, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // January, February, ..., December\n case \"MMMM\":\n default:\n return localize.month(month, { width: \"wide\", context: \"formatting\" });\n }\n },\n\n // Stand-alone month\n L: function (date, token, localize) {\n const month = date.getMonth();\n switch (token) {\n // 1, 2, ..., 12\n case \"L\":\n return String(month + 1);\n // 01, 02, ..., 12\n case \"LL\":\n return addLeadingZeros(month + 1, 2);\n // 1st, 2nd, ..., 12th\n case \"Lo\":\n return localize.ordinalNumber(month + 1, { unit: \"month\" });\n // Jan, Feb, ..., Dec\n case \"LLL\":\n return localize.month(month, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // J, F, ..., D\n case \"LLLLL\":\n return localize.month(month, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // January, February, ..., December\n case \"LLLL\":\n default:\n return localize.month(month, { width: \"wide\", context: \"standalone\" });\n }\n },\n\n // Local week of year\n w: function (date, token, localize, options) {\n const week = getWeek(date, options);\n\n if (token === \"wo\") {\n return localize.ordinalNumber(week, { unit: \"week\" });\n }\n\n return addLeadingZeros(week, token.length);\n },\n\n // ISO week of year\n I: function (date, token, localize) {\n const isoWeek = getISOWeek(date);\n\n if (token === \"Io\") {\n return localize.ordinalNumber(isoWeek, { unit: \"week\" });\n }\n\n return addLeadingZeros(isoWeek, token.length);\n },\n\n // Day of the month\n d: function (date, token, localize) {\n if (token === \"do\") {\n return localize.ordinalNumber(date.getDate(), { unit: \"date\" });\n }\n\n return lightFormatters.d(date, token);\n },\n\n // Day of year\n D: function (date, token, localize) {\n const dayOfYear = getDayOfYear(date);\n\n if (token === \"Do\") {\n return localize.ordinalNumber(dayOfYear, { unit: \"dayOfYear\" });\n }\n\n return addLeadingZeros(dayOfYear, token.length);\n },\n\n // Day of week\n E: function (date, token, localize) {\n const dayOfWeek = date.getDay();\n switch (token) {\n // Tue\n case \"E\":\n case \"EE\":\n case \"EEE\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"EEEEE\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"EEEEEE\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"EEEE\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Local day of week\n e: function (date, token, localize, options) {\n const dayOfWeek = date.getDay();\n const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n switch (token) {\n // Numerical value (Nth day of week with current locale or weekStartsOn)\n case \"e\":\n return String(localDayOfWeek);\n // Padded numerical value\n case \"ee\":\n return addLeadingZeros(localDayOfWeek, 2);\n // 1st, 2nd, ..., 7th\n case \"eo\":\n return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n case \"eee\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"eeeee\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"eeeeee\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"eeee\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Stand-alone local day of week\n c: function (date, token, localize, options) {\n const dayOfWeek = date.getDay();\n const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n switch (token) {\n // Numerical value (same as in `e`)\n case \"c\":\n return String(localDayOfWeek);\n // Padded numerical value\n case \"cc\":\n return addLeadingZeros(localDayOfWeek, token.length);\n // 1st, 2nd, ..., 7th\n case \"co\":\n return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n case \"ccc\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // T\n case \"ccccc\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // Tu\n case \"cccccc\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"standalone\",\n });\n // Tuesday\n case \"cccc\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"standalone\",\n });\n }\n },\n\n // ISO day of week\n i: function (date, token, localize) {\n const dayOfWeek = date.getDay();\n const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n switch (token) {\n // 2\n case \"i\":\n return String(isoDayOfWeek);\n // 02\n case \"ii\":\n return addLeadingZeros(isoDayOfWeek, token.length);\n // 2nd\n case \"io\":\n return localize.ordinalNumber(isoDayOfWeek, { unit: \"day\" });\n // Tue\n case \"iii\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"iiiii\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"iiiiii\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"iiii\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // AM or PM\n a: function (date, token, localize) {\n const hours = date.getHours();\n const dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n\n switch (token) {\n case \"a\":\n case \"aa\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"aaa\":\n return localize\n .dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n })\n .toLowerCase();\n case \"aaaaa\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"aaaa\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // AM, PM, midnight, noon\n b: function (date, token, localize) {\n const hours = date.getHours();\n let dayPeriodEnumValue;\n if (hours === 12) {\n dayPeriodEnumValue = dayPeriodEnum.noon;\n } else if (hours === 0) {\n dayPeriodEnumValue = dayPeriodEnum.midnight;\n } else {\n dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n }\n\n switch (token) {\n case \"b\":\n case \"bb\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"bbb\":\n return localize\n .dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n })\n .toLowerCase();\n case \"bbbbb\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"bbbb\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // in the morning, in the afternoon, in the evening, at night\n B: function (date, token, localize) {\n const hours = date.getHours();\n let dayPeriodEnumValue;\n if (hours >= 17) {\n dayPeriodEnumValue = dayPeriodEnum.evening;\n } else if (hours >= 12) {\n dayPeriodEnumValue = dayPeriodEnum.afternoon;\n } else if (hours >= 4) {\n dayPeriodEnumValue = dayPeriodEnum.morning;\n } else {\n dayPeriodEnumValue = dayPeriodEnum.night;\n }\n\n switch (token) {\n case \"B\":\n case \"BB\":\n case \"BBB\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"BBBBB\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"BBBB\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Hour [1-12]\n h: function (date, token, localize) {\n if (token === \"ho\") {\n let hours = date.getHours() % 12;\n if (hours === 0) hours = 12;\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return lightFormatters.h(date, token);\n },\n\n // Hour [0-23]\n H: function (date, token, localize) {\n if (token === \"Ho\") {\n return localize.ordinalNumber(date.getHours(), { unit: \"hour\" });\n }\n\n return lightFormatters.H(date, token);\n },\n\n // Hour [0-11]\n K: function (date, token, localize) {\n const hours = date.getHours() % 12;\n\n if (token === \"Ko\") {\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n\n // Hour [1-24]\n k: function (date, token, localize) {\n let hours = date.getHours();\n if (hours === 0) hours = 24;\n\n if (token === \"ko\") {\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n\n // Minute\n m: function (date, token, localize) {\n if (token === \"mo\") {\n return localize.ordinalNumber(date.getMinutes(), { unit: \"minute\" });\n }\n\n return lightFormatters.m(date, token);\n },\n\n // Second\n s: function (date, token, localize) {\n if (token === \"so\") {\n return localize.ordinalNumber(date.getSeconds(), { unit: \"second\" });\n }\n\n return lightFormatters.s(date, token);\n },\n\n // Fraction of second\n S: function (date, token) {\n return lightFormatters.S(date, token);\n },\n\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n if (timezoneOffset === 0) {\n return \"Z\";\n }\n\n switch (token) {\n // Hours and optional minutes\n case \"X\":\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XX`\n case \"XXXX\":\n case \"XX\": // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XXX`\n case \"XXXXX\":\n case \"XXX\": // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Hours and optional minutes\n case \"x\":\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xx`\n case \"xxxx\":\n case \"xx\": // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xxx`\n case \"xxxxx\":\n case \"xxx\": // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (GMT)\n O: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Short\n case \"O\":\n case \"OO\":\n case \"OOO\":\n return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n // Long\n case \"OOOO\":\n default:\n return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (specific non-location)\n z: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Short\n case \"z\":\n case \"zz\":\n case \"zzz\":\n return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n // Long\n case \"zzzz\":\n default:\n return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Seconds timestamp\n t: function (date, token, _localize) {\n const timestamp = Math.trunc(date.getTime() / 1000);\n return addLeadingZeros(timestamp, token.length);\n },\n\n // Milliseconds timestamp\n T: function (date, token, _localize) {\n const timestamp = date.getTime();\n return addLeadingZeros(timestamp, token.length);\n },\n};\n\nfunction formatTimezoneShort(offset, delimiter = \"\") {\n const sign = offset > 0 ? \"-\" : \"+\";\n const absOffset = Math.abs(offset);\n const hours = Math.trunc(absOffset / 60);\n const minutes = absOffset % 60;\n if (minutes === 0) {\n return sign + String(hours);\n }\n return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, delimiter) {\n if (offset % 60 === 0) {\n const sign = offset > 0 ? \"-\" : \"+\";\n return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n }\n return formatTimezone(offset, delimiter);\n}\n\nfunction formatTimezone(offset, delimiter = \"\") {\n const sign = offset > 0 ? \"-\" : \"+\";\n const absOffset = Math.abs(offset);\n const hours = addLeadingZeros(Math.trunc(absOffset / 60), 2);\n const minutes = addLeadingZeros(absOffset % 60, 2);\n return sign + hours + delimiter + minutes;\n}\n","const dateLongFormatter = (pattern, formatLong) => {\n switch (pattern) {\n case \"P\":\n return formatLong.date({ width: \"short\" });\n case \"PP\":\n return formatLong.date({ width: \"medium\" });\n case \"PPP\":\n return formatLong.date({ width: \"long\" });\n case \"PPPP\":\n default:\n return formatLong.date({ width: \"full\" });\n }\n};\n\nconst timeLongFormatter = (pattern, formatLong) => {\n switch (pattern) {\n case \"p\":\n return formatLong.time({ width: \"short\" });\n case \"pp\":\n return formatLong.time({ width: \"medium\" });\n case \"ppp\":\n return formatLong.time({ width: \"long\" });\n case \"pppp\":\n default:\n return formatLong.time({ width: \"full\" });\n }\n};\n\nconst dateTimeLongFormatter = (pattern, formatLong) => {\n const matchResult = pattern.match(/(P+)(p+)?/) || [];\n const datePattern = matchResult[1];\n const timePattern = matchResult[2];\n\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong);\n }\n\n let dateTimeFormat;\n\n switch (datePattern) {\n case \"P\":\n dateTimeFormat = formatLong.dateTime({ width: \"short\" });\n break;\n case \"PP\":\n dateTimeFormat = formatLong.dateTime({ width: \"medium\" });\n break;\n case \"PPP\":\n dateTimeFormat = formatLong.dateTime({ width: \"long\" });\n break;\n case \"PPPP\":\n default:\n dateTimeFormat = formatLong.dateTime({ width: \"full\" });\n break;\n }\n\n return dateTimeFormat\n .replace(\"{{date}}\", dateLongFormatter(datePattern, formatLong))\n .replace(\"{{time}}\", timeLongFormatter(timePattern, formatLong));\n};\n\nexport const longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter,\n};\n","const dayOfYearTokenRE = /^D+$/;\nconst weekYearTokenRE = /^Y+$/;\n\nconst throwTokens = [\"D\", \"DD\", \"YY\", \"YYYY\"];\n\nexport function isProtectedDayOfYearToken(token) {\n return dayOfYearTokenRE.test(token);\n}\n\nexport function isProtectedWeekYearToken(token) {\n return weekYearTokenRE.test(token);\n}\n\nexport function warnOrThrowProtectedError(token, format, input) {\n const _message = message(token, format, input);\n console.warn(_message);\n if (throwTokens.includes(token)) throw new RangeError(_message);\n}\n\nfunction message(token, format, input) {\n const subject = token[0] === \"Y\" ? \"years\" : \"days of the month\";\n return `Use \\`${token.toLowerCase()}\\` instead of \\`${token}\\` (in \\`${format}\\`) for formatting ${subject} to the input \\`${input}\\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`;\n}\n","import { defaultLocale } from \"./_lib/defaultLocale.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\nimport { formatters } from \"./_lib/format/formatters.mjs\";\nimport { longFormatters } from \"./_lib/format/longFormatters.mjs\";\nimport {\n isProtectedDayOfYearToken,\n isProtectedWeekYearToken,\n warnOrThrowProtectedError,\n} from \"./_lib/protectedTokens.mjs\";\nimport { isValid } from \"./isValid.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n// Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\nexport { formatters, longFormatters };\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nconst formattingTokensRegExp =\n /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nconst longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\nexport { format as formatDate };\n\n/**\n * The {@link format} function options.\n */\n\n/**\n * @name format\n * @alias formatDate\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 9 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 9 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Sun | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | a..aa | AM, PM | |\n * | | aaa | am, pm | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | |\n * | | bbb | am, pm, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 |\n * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 04/29/1453 | 7 |\n * | | PP | Apr 29, 1453 | 7 |\n * | | PPP | April 29th, 1453 | 7 |\n * | | PPPP | Friday, April 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 |\n * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | April 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear](https://date-fns.org/docs/getISOWeekYear)\n * and [getWeekYear](https://date-fns.org/docs/getWeekYear)).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n * so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n * @param format - The string of tokens\n * @param options - An object with options\n *\n * @returns The formatted date string\n *\n * @throws `date` must not be Invalid Date\n * @throws `options.locale` must contain `localize` property\n * @throws `options.locale` must contain `formatLong` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * const result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\nexport function format(date, formatStr, options) {\n const defaultOptions = getDefaultOptions();\n const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const originalDate = toDate(date);\n\n if (!isValid(originalDate)) {\n throw new RangeError(\"Invalid time value\");\n }\n\n let parts = formatStr\n .match(longFormattingTokensRegExp)\n .map((substring) => {\n const firstCharacter = substring[0];\n if (firstCharacter === \"p\" || firstCharacter === \"P\") {\n const longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n return substring;\n })\n .join(\"\")\n .match(formattingTokensRegExp)\n .map((substring) => {\n // Replace two single quote characters with one single quote character\n if (substring === \"''\") {\n return { isToken: false, value: \"'\" };\n }\n\n const firstCharacter = substring[0];\n if (firstCharacter === \"'\") {\n return { isToken: false, value: cleanEscapedString(substring) };\n }\n\n if (formatters[firstCharacter]) {\n return { isToken: true, value: substring };\n }\n\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError(\n \"Format string contains an unescaped latin alphabet character `\" +\n firstCharacter +\n \"`\",\n );\n }\n\n return { isToken: false, value: substring };\n });\n\n // invoke localize preprocessor (only for french locales at the moment)\n if (locale.localize.preprocessor) {\n parts = locale.localize.preprocessor(originalDate, parts);\n }\n\n const formatterOptions = {\n firstWeekContainsDate,\n weekStartsOn,\n locale,\n };\n\n return parts\n .map((part) => {\n if (!part.isToken) return part.value;\n\n const token = part.value;\n\n if (\n (!options?.useAdditionalWeekYearTokens &&\n isProtectedWeekYearToken(token)) ||\n (!options?.useAdditionalDayOfYearTokens &&\n isProtectedDayOfYearToken(token))\n ) {\n warnOrThrowProtectedError(token, formatStr, String(date));\n }\n\n const formatter = formatters[token[0]];\n return formatter(originalDate, token, locale.localize, formatterOptions);\n })\n .join(\"\");\n}\n\nfunction cleanEscapedString(input) {\n const matched = input.match(escapedStringRegExp);\n\n if (!matched) {\n return input;\n }\n\n return matched[1].replace(doubleQuoteRegExp, \"'\");\n}\n\n// Fallback for modularized imports:\nexport default format;\n","import { getDefaultOptions as getInternalDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * @name getDefaultOptions\n * @category Common Helpers\n * @summary Get default options.\n * @pure false\n *\n * @description\n * Returns an object that contains defaults for\n * `options.locale`, `options.weekStartsOn` and `options.firstWeekContainsDate`\n * arguments for all functions.\n *\n * You can change these with [setDefaultOptions](https://date-fns.org/docs/setDefaultOptions).\n *\n * @returns The default options\n *\n * @example\n * const result = getDefaultOptions()\n * //=> {}\n *\n * @example\n * setDefaultOptions({ weekStarsOn: 1, firstWeekContainsDate: 4 })\n * const result = getDefaultOptions()\n * //=> { weekStarsOn: 1, firstWeekContainsDate: 4 }\n */\nexport function getDefaultOptions() {\n return Object.assign({}, getInternalDefaultOptions());\n}\n\n// Fallback for modularized imports:\nexport default getDefaultOptions;\n","import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name getISODay\n * @category Weekday Helpers\n * @summary Get the day of the ISO week of the given date.\n *\n * @description\n * Get the day of the ISO week of the given date,\n * which is 7 for Sunday, 1 for Monday etc.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n *\n * @returns The day of ISO week\n *\n * @example\n * // Which day of the ISO week is 26 February 2012?\n * const result = getISODay(new Date(2012, 1, 26))\n * //=> 7\n */\nexport function getISODay(date) {\n const _date = toDate(date);\n let day = _date.getDay();\n\n if (day === 0) {\n day = 7;\n }\n\n return day;\n}\n\n// Fallback for modularized imports:\nexport default getISODay;\n","import { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name transpose\n * @category Generic Helpers\n * @summary Transpose the date to the given constructor.\n *\n * @description\n * The function transposes the date to the given constructor. It helps you\n * to transpose the date in the system time zone to say `UTCDate` or any other\n * date extension.\n *\n * @typeParam DateInputType - The input `Date` type derived from the passed argument.\n * @typeParam DateOutputType - The output `Date` type derived from the passed constructor.\n *\n * @param fromDate - The date to use values from\n * @param constructor - The date constructor to use\n *\n * @returns Date transposed to the given constructor\n *\n * @example\n * // Create July 10, 2022 00:00 in locale time zone\n * const date = new Date(2022, 6, 10)\n * //=> 'Sun Jul 10 2022 00:00:00 GMT+0800 (Singapore Standard Time)'\n *\n * @example\n * // Transpose the date to July 10, 2022 00:00 in UTC\n * transpose(date, UTCDate)\n * //=> 'Sun Jul 10 2022 00:00:00 GMT+0000 (Coordinated Universal Time)'\n */\nexport function transpose(fromDate, constructor) {\n const date =\n constructor instanceof Date\n ? constructFrom(constructor, 0)\n : new constructor(0);\n date.setFullYear(\n fromDate.getFullYear(),\n fromDate.getMonth(),\n fromDate.getDate(),\n );\n date.setHours(\n fromDate.getHours(),\n fromDate.getMinutes(),\n fromDate.getSeconds(),\n fromDate.getMilliseconds(),\n );\n return date;\n}\n\n// Fallback for modularized imports:\nexport default transpose;\n","import { transpose } from \"../../transpose.mjs\";\nimport { constructFrom } from \"../../constructFrom.mjs\";\n\nconst TIMEZONE_UNIT_PRIORITY = 10;\n\nexport class Setter {\n subPriority = 0;\n\n validate(_utcDate, _options) {\n return true;\n }\n}\n\nexport class ValueSetter extends Setter {\n constructor(\n value,\n\n validateValue,\n\n setValue,\n\n priority,\n subPriority,\n ) {\n super();\n this.value = value;\n this.validateValue = validateValue;\n this.setValue = setValue;\n this.priority = priority;\n if (subPriority) {\n this.subPriority = subPriority;\n }\n }\n\n validate(date, options) {\n return this.validateValue(date, this.value, options);\n }\n\n set(date, flags, options) {\n return this.setValue(date, flags, this.value, options);\n }\n}\n\nexport class DateToSystemTimezoneSetter extends Setter {\n priority = TIMEZONE_UNIT_PRIORITY;\n subPriority = -1;\n set(date, flags) {\n if (flags.timestampIsSet) return date;\n return constructFrom(date, transpose(date, Date));\n }\n}\n","import { ValueSetter } from \"./Setter.mjs\";\n\nexport class Parser {\n run(dateString, token, match, options) {\n const result = this.parse(dateString, token, match, options);\n if (!result) {\n return null;\n }\n\n return {\n setter: new ValueSetter(\n result.value,\n this.validate,\n this.set,\n this.priority,\n this.subPriority,\n ),\n rest: result.rest,\n };\n }\n\n validate(_utcDate, _value, _options) {\n return true;\n }\n}\n","import { Parser } from \"../Parser.mjs\";\n\nexport class EraParser extends Parser {\n priority = 140;\n\n parse(dateString, token, match) {\n switch (token) {\n // AD, BC\n case \"G\":\n case \"GG\":\n case \"GGG\":\n return (\n match.era(dateString, { width: \"abbreviated\" }) ||\n match.era(dateString, { width: \"narrow\" })\n );\n\n // A, B\n case \"GGGGG\":\n return match.era(dateString, { width: \"narrow\" });\n // Anno Domini, Before Christ\n case \"GGGG\":\n default:\n return (\n match.era(dateString, { width: \"wide\" }) ||\n match.era(dateString, { width: \"abbreviated\" }) ||\n match.era(dateString, { width: \"narrow\" })\n );\n }\n }\n\n set(date, flags, value) {\n flags.era = value;\n date.setFullYear(value, 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"R\", \"u\", \"t\", \"T\"];\n}\n","export const numericPatterns = {\n month: /^(1[0-2]|0?\\d)/, // 0 to 12\n date: /^(3[0-1]|[0-2]?\\d)/, // 0 to 31\n dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/, // 0 to 366\n week: /^(5[0-3]|[0-4]?\\d)/, // 0 to 53\n hour23h: /^(2[0-3]|[0-1]?\\d)/, // 0 to 23\n hour24h: /^(2[0-4]|[0-1]?\\d)/, // 0 to 24\n hour11h: /^(1[0-1]|0?\\d)/, // 0 to 11\n hour12h: /^(1[0-2]|0?\\d)/, // 0 to 12\n minute: /^[0-5]?\\d/, // 0 to 59\n second: /^[0-5]?\\d/, // 0 to 59\n\n singleDigit: /^\\d/, // 0 to 9\n twoDigits: /^\\d{1,2}/, // 0 to 99\n threeDigits: /^\\d{1,3}/, // 0 to 999\n fourDigits: /^\\d{1,4}/, // 0 to 9999\n\n anyDigitsSigned: /^-?\\d+/,\n singleDigitSigned: /^-?\\d/, // 0 to 9, -0 to -9\n twoDigitsSigned: /^-?\\d{1,2}/, // 0 to 99, -0 to -99\n threeDigitsSigned: /^-?\\d{1,3}/, // 0 to 999, -0 to -999\n fourDigitsSigned: /^-?\\d{1,4}/, // 0 to 9999, -0 to -9999\n};\n\nexport const timezonePatterns = {\n basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/,\n};\n","import {\n millisecondsInHour,\n millisecondsInMinute,\n millisecondsInSecond,\n} from \"../../constants.mjs\";\nimport { numericPatterns } from \"./constants.mjs\";\n\nexport function mapValue(parseFnResult, mapFn) {\n if (!parseFnResult) {\n return parseFnResult;\n }\n\n return {\n value: mapFn(parseFnResult.value),\n rest: parseFnResult.rest,\n };\n}\n\nexport function parseNumericPattern(pattern, dateString) {\n const matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n }\n\n return {\n value: parseInt(matchResult[0], 10),\n rest: dateString.slice(matchResult[0].length),\n };\n}\n\nexport function parseTimezonePattern(pattern, dateString) {\n const matchResult = dateString.match(pattern);\n\n if (!matchResult) {\n return null;\n }\n\n // Input is 'Z'\n if (matchResult[0] === \"Z\") {\n return {\n value: 0,\n rest: dateString.slice(1),\n };\n }\n\n const sign = matchResult[1] === \"+\" ? 1 : -1;\n const hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;\n const minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;\n const seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;\n\n return {\n value:\n sign *\n (hours * millisecondsInHour +\n minutes * millisecondsInMinute +\n seconds * millisecondsInSecond),\n rest: dateString.slice(matchResult[0].length),\n };\n}\n\nexport function parseAnyDigitsSigned(dateString) {\n return parseNumericPattern(numericPatterns.anyDigitsSigned, dateString);\n}\n\nexport function parseNDigits(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigit, dateString);\n case 2:\n return parseNumericPattern(numericPatterns.twoDigits, dateString);\n case 3:\n return parseNumericPattern(numericPatterns.threeDigits, dateString);\n case 4:\n return parseNumericPattern(numericPatterns.fourDigits, dateString);\n default:\n return parseNumericPattern(new RegExp(\"^\\\\d{1,\" + n + \"}\"), dateString);\n }\n}\n\nexport function parseNDigitsSigned(n, dateString) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigitSigned, dateString);\n case 2:\n return parseNumericPattern(numericPatterns.twoDigitsSigned, dateString);\n case 3:\n return parseNumericPattern(numericPatterns.threeDigitsSigned, dateString);\n case 4:\n return parseNumericPattern(numericPatterns.fourDigitsSigned, dateString);\n default:\n return parseNumericPattern(new RegExp(\"^-?\\\\d{1,\" + n + \"}\"), dateString);\n }\n}\n\nexport function dayPeriodEnumToHours(dayPeriod) {\n switch (dayPeriod) {\n case \"morning\":\n return 4;\n case \"evening\":\n return 17;\n case \"pm\":\n case \"noon\":\n case \"afternoon\":\n return 12;\n case \"am\":\n case \"midnight\":\n case \"night\":\n default:\n return 0;\n }\n}\n\nexport function normalizeTwoDigitYear(twoDigitYear, currentYear) {\n const isCommonEra = currentYear > 0;\n // Absolute number of the current year:\n // 1 -> 1 AC\n // 0 -> 1 BC\n // -1 -> 2 BC\n const absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;\n\n let result;\n if (absCurrentYear <= 50) {\n result = twoDigitYear || 100;\n } else {\n const rangeEnd = absCurrentYear + 50;\n const rangeEndCentury = Math.trunc(rangeEnd / 100) * 100;\n const isPreviousCentury = twoDigitYear >= rangeEnd % 100;\n result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);\n }\n\n return isCommonEra ? result : 1 - result;\n}\n\nexport function isLeapYearIndex(year) {\n return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.mjs\";\n\n// From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\n// | Year | y | yy | yyy | yyyy | yyyyy |\n// |----------|-------|----|-------|-------|-------|\n// | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n// | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n// | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n// | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n// | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\nexport class YearParser extends Parser {\n priority = 130;\n incompatibleTokens = [\"Y\", \"R\", \"u\", \"w\", \"I\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n\n parse(dateString, token, match) {\n const valueCallback = (year) => ({\n year,\n isTwoDigitYear: token === \"yy\",\n });\n\n switch (token) {\n case \"y\":\n return mapValue(parseNDigits(4, dateString), valueCallback);\n case \"yo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"year\",\n }),\n valueCallback,\n );\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n\n validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n\n set(date, flags, value) {\n const currentYear = date.getFullYear();\n\n if (value.isTwoDigitYear) {\n const normalizedTwoDigitYear = normalizeTwoDigitYear(\n value.year,\n currentYear,\n );\n date.setFullYear(normalizedTwoDigitYear, 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n const year =\n !(\"era\" in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setFullYear(year, 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n}\n","import { getWeekYear } from \"../../../getWeekYear.mjs\";\nimport { startOfWeek } from \"../../../startOfWeek.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.mjs\";\n\n// Local week-numbering year\nexport class LocalWeekYearParser extends Parser {\n priority = 130;\n\n parse(dateString, token, match) {\n const valueCallback = (year) => ({\n year,\n isTwoDigitYear: token === \"YY\",\n });\n\n switch (token) {\n case \"Y\":\n return mapValue(parseNDigits(4, dateString), valueCallback);\n case \"Yo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"year\",\n }),\n valueCallback,\n );\n default:\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n }\n\n validate(_date, value) {\n return value.isTwoDigitYear || value.year > 0;\n }\n\n set(date, flags, value, options) {\n const currentYear = getWeekYear(date, options);\n\n if (value.isTwoDigitYear) {\n const normalizedTwoDigitYear = normalizeTwoDigitYear(\n value.year,\n currentYear,\n );\n date.setFullYear(\n normalizedTwoDigitYear,\n 0,\n options.firstWeekContainsDate,\n );\n date.setHours(0, 0, 0, 0);\n return startOfWeek(date, options);\n }\n\n const year =\n !(\"era\" in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setFullYear(year, 0, options.firstWeekContainsDate);\n date.setHours(0, 0, 0, 0);\n return startOfWeek(date, options);\n }\n\n incompatibleTokens = [\n \"y\",\n \"R\",\n \"u\",\n \"Q\",\n \"q\",\n \"M\",\n \"L\",\n \"I\",\n \"d\",\n \"D\",\n \"i\",\n \"t\",\n \"T\",\n ];\n}\n","import { startOfISOWeek } from \"../../../startOfISOWeek.mjs\";\nimport { constructFrom } from \"../../../constructFrom.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigitsSigned } from \"../utils.mjs\";\n\n// ISO week-numbering year\nexport class ISOWeekYearParser extends Parser {\n priority = 130;\n\n parse(dateString, token) {\n if (token === \"R\") {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n\n set(date, _flags, value) {\n const firstWeekOfYear = constructFrom(date, 0);\n firstWeekOfYear.setFullYear(value, 0, 4);\n firstWeekOfYear.setHours(0, 0, 0, 0);\n return startOfISOWeek(firstWeekOfYear);\n }\n\n incompatibleTokens = [\n \"G\",\n \"y\",\n \"Y\",\n \"u\",\n \"Q\",\n \"q\",\n \"M\",\n \"L\",\n \"w\",\n \"d\",\n \"D\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { parseNDigitsSigned } from \"../utils.mjs\";\n\nexport class ExtendedYearParser extends Parser {\n priority = 130;\n\n parse(dateString, token) {\n if (token === \"u\") {\n return parseNDigitsSigned(4, dateString);\n }\n\n return parseNDigitsSigned(token.length, dateString);\n }\n\n set(date, _flags, value) {\n date.setFullYear(value, 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"G\", \"y\", \"Y\", \"R\", \"w\", \"I\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { parseNDigits } from \"../utils.mjs\";\n\nexport class QuarterParser extends Parser {\n priority = 120;\n\n parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case \"Q\":\n case \"QQ\": // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n case \"Qo\":\n return match.ordinalNumber(dateString, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"QQQ\":\n return (\n match.quarter(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.quarter(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"QQQQQ\":\n return match.quarter(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"QQQQ\":\n default:\n return (\n match.quarter(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.quarter(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.quarter(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n\n set(date, _flags, value) {\n date.setMonth((value - 1) * 3, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"M\",\n \"L\",\n \"w\",\n \"I\",\n \"d\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { parseNDigits } from \"../utils.mjs\";\n\nexport class StandAloneQuarterParser extends Parser {\n priority = 120;\n\n parse(dateString, token, match) {\n switch (token) {\n // 1, 2, 3, 4\n case \"q\":\n case \"qq\": // 01, 02, 03, 04\n return parseNDigits(token.length, dateString);\n // 1st, 2nd, 3rd, 4th\n case \"qo\":\n return match.ordinalNumber(dateString, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"qqq\":\n return (\n match.quarter(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.quarter(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n })\n );\n\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"qqqqq\":\n return match.quarter(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"qqqq\":\n default:\n return (\n match.quarter(dateString, {\n width: \"wide\",\n context: \"standalone\",\n }) ||\n match.quarter(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.quarter(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 4;\n }\n\n set(date, _flags, value) {\n date.setMonth((value - 1) * 3, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"Q\",\n \"M\",\n \"L\",\n \"w\",\n \"I\",\n \"d\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class MonthParser extends Parser {\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"Q\",\n \"L\",\n \"w\",\n \"I\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n\n priority = 110;\n\n parse(dateString, token, match) {\n const valueCallback = (value) => value - 1;\n\n switch (token) {\n // 1, 2, ..., 12\n case \"M\":\n return mapValue(\n parseNumericPattern(numericPatterns.month, dateString),\n valueCallback,\n );\n // 01, 02, ..., 12\n case \"MM\":\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n case \"Mo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"month\",\n }),\n valueCallback,\n );\n // Jan, Feb, ..., Dec\n case \"MMM\":\n return (\n match.month(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.month(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // J, F, ..., D\n case \"MMMMM\":\n return match.month(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // January, February, ..., December\n case \"MMMM\":\n default:\n return (\n match.month(dateString, { width: \"wide\", context: \"formatting\" }) ||\n match.month(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.month(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n\n set(date, _flags, value) {\n date.setMonth(value, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class StandAloneMonthParser extends Parser {\n priority = 110;\n\n parse(dateString, token, match) {\n const valueCallback = (value) => value - 1;\n\n switch (token) {\n // 1, 2, ..., 12\n case \"L\":\n return mapValue(\n parseNumericPattern(numericPatterns.month, dateString),\n valueCallback,\n );\n // 01, 02, ..., 12\n case \"LL\":\n return mapValue(parseNDigits(2, dateString), valueCallback);\n // 1st, 2nd, ..., 12th\n case \"Lo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"month\",\n }),\n valueCallback,\n );\n // Jan, Feb, ..., Dec\n case \"LLL\":\n return (\n match.month(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.month(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n\n // J, F, ..., D\n case \"LLLLL\":\n return match.month(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // January, February, ..., December\n case \"LLLL\":\n default:\n return (\n match.month(dateString, { width: \"wide\", context: \"standalone\" }) ||\n match.month(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.month(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n\n set(date, _flags, value) {\n date.setMonth(value, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"Q\",\n \"M\",\n \"w\",\n \"I\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { getWeek } from \"./getWeek.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * The {@link setWeek} function options.\n */\n\n/**\n * @name setWeek\n * @category Week Helpers\n * @summary Set the local week to the given date.\n *\n * @description\n * Set the local week to the given date, saving the weekday number.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param week - The week of the new date\n * @param options - An object with options\n *\n * @returns The new date with the local week set\n *\n * @example\n * // Set the 1st week to 2 January 2005 with default options:\n * const result = setWeek(new Date(2005, 0, 2), 1)\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // Set the 1st week to 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January:\n * const result = setWeek(new Date(2005, 0, 2), 1, {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> Sun Jan 4 2004 00:00:00\n */\nexport function setWeek(date, week, options) {\n const _date = toDate(date);\n const diff = getWeek(_date, options) - week;\n _date.setDate(_date.getDate() - diff * 7);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default setWeek;\n","import { setWeek } from \"../../../setWeek.mjs\";\nimport { startOfWeek } from \"../../../startOfWeek.mjs\";\nimport { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\n// Local week of year\nexport class LocalWeekParser extends Parser {\n priority = 100;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"w\":\n return parseNumericPattern(numericPatterns.week, dateString);\n case \"wo\":\n return match.ordinalNumber(dateString, { unit: \"week\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n\n set(date, _flags, value, options) {\n return startOfWeek(setWeek(date, value, options), options);\n }\n\n incompatibleTokens = [\n \"y\",\n \"R\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"I\",\n \"d\",\n \"D\",\n \"i\",\n \"t\",\n \"T\",\n ];\n}\n","import { getISOWeek } from \"./getISOWeek.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name setISOWeek\n * @category ISO Week Helpers\n * @summary Set the ISO week to the given date.\n *\n * @description\n * Set the ISO week to the given date, saving the weekday number.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param week - The ISO week of the new date\n *\n * @returns The new date with the ISO week set\n *\n * @example\n * // Set the 53rd ISO week to 7 August 2004:\n * const result = setISOWeek(new Date(2004, 7, 7), 53)\n * //=> Sat Jan 01 2005 00:00:00\n */\nexport function setISOWeek(date, week) {\n const _date = toDate(date);\n const diff = getISOWeek(_date) - week;\n _date.setDate(_date.getDate() - diff * 7);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default setISOWeek;\n","import { setISOWeek } from \"../../../setISOWeek.mjs\";\nimport { startOfISOWeek } from \"../../../startOfISOWeek.mjs\";\nimport { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\n// ISO week of year\nexport class ISOWeekParser extends Parser {\n priority = 100;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"I\":\n return parseNumericPattern(numericPatterns.week, dateString);\n case \"Io\":\n return match.ordinalNumber(dateString, { unit: \"week\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 53;\n }\n\n set(date, _flags, value) {\n return startOfISOWeek(setISOWeek(date, value));\n }\n\n incompatibleTokens = [\n \"y\",\n \"Y\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"w\",\n \"d\",\n \"D\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport {\n isLeapYearIndex,\n parseNDigits,\n parseNumericPattern,\n} from \"../utils.mjs\";\n\nconst DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nconst DAYS_IN_MONTH_LEAP_YEAR = [\n 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,\n];\n\n// Day of the month\nexport class DateParser extends Parser {\n priority = 90;\n subPriority = 1;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"d\":\n return parseNumericPattern(numericPatterns.date, dateString);\n case \"do\":\n return match.ordinalNumber(dateString, { unit: \"date\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(date, value) {\n const year = date.getFullYear();\n const isLeapYear = isLeapYearIndex(year);\n const month = date.getMonth();\n if (isLeapYear) {\n return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];\n } else {\n return value >= 1 && value <= DAYS_IN_MONTH[month];\n }\n }\n\n set(date, _flags, value) {\n date.setDate(value);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"Q\",\n \"w\",\n \"I\",\n \"D\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport {\n isLeapYearIndex,\n parseNDigits,\n parseNumericPattern,\n} from \"../utils.mjs\";\n\nexport class DayOfYearParser extends Parser {\n priority = 90;\n\n subpriority = 1;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"D\":\n case \"DD\":\n return parseNumericPattern(numericPatterns.dayOfYear, dateString);\n case \"Do\":\n return match.ordinalNumber(dateString, { unit: \"date\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(date, value) {\n const year = date.getFullYear();\n const isLeapYear = isLeapYearIndex(year);\n if (isLeapYear) {\n return value >= 1 && value <= 366;\n } else {\n return value >= 1 && value <= 365;\n }\n }\n\n set(date, _flags, value) {\n date.setMonth(0, value);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"Y\",\n \"R\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"w\",\n \"I\",\n \"d\",\n \"E\",\n \"i\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { addDays } from \"./addDays.mjs\";\nimport { toDate } from \"./toDate.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link setDay} function options.\n */\n\n/**\n * @name setDay\n * @category Weekday Helpers\n * @summary Set the day of the week to the given date.\n *\n * @description\n * Set the day of the week to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param day - The day of the week of the new date\n * @param options - An object with options.\n *\n * @returns The new date with the day of the week set\n *\n * @example\n * // Set week day to Sunday, with the default weekStartsOn of Sunday:\n * const result = setDay(new Date(2014, 8, 1), 0)\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // Set week day to Sunday, with a weekStartsOn of Monday:\n * const result = setDay(new Date(2014, 8, 1), 0, { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport function setDay(date, day, options) {\n const defaultOptions = getDefaultOptions();\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const _date = toDate(date);\n const currentDay = _date.getDay();\n\n const remainder = day % 7;\n const dayIndex = (remainder + 7) % 7;\n\n const delta = 7 - weekStartsOn;\n const diff =\n day < 0 || day > 6\n ? day - ((currentDay + delta) % 7)\n : ((dayIndex + delta) % 7) - ((currentDay + delta) % 7);\n return addDays(_date, diff);\n}\n\n// Fallback for modularized imports:\nexport default setDay;\n","import { setDay } from \"../../../setDay.mjs\";\nimport { Parser } from \"../Parser.mjs\";\n\n// Day of week\nexport class DayParser extends Parser {\n priority = 90;\n\n parse(dateString, token, match) {\n switch (token) {\n // Tue\n case \"E\":\n case \"EE\":\n case \"EEE\":\n return (\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // T\n case \"EEEEE\":\n return match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"EEEEEE\":\n return (\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // Tuesday\n case \"EEEE\":\n default:\n return (\n match.day(dateString, { width: \"wide\", context: \"formatting\" }) ||\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n\n set(date, _flags, value, options) {\n date = setDay(date, value, options);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"D\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n}\n","import { setDay } from \"../../../setDay.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits } from \"../utils.mjs\";\n\n// Local day of week\nexport class LocalDayParser extends Parser {\n priority = 90;\n parse(dateString, token, match, options) {\n const valueCallback = (value) => {\n // We want here floor instead of trunc, so we get -7 for value 0 instead of 0\n const wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case \"e\":\n case \"ee\": // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n case \"eo\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"day\",\n }),\n valueCallback,\n );\n // Tue\n case \"eee\":\n return (\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // T\n case \"eeeee\":\n return match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"eeeeee\":\n return (\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n\n // Tuesday\n case \"eeee\":\n default:\n return (\n match.day(dateString, { width: \"wide\", context: \"formatting\" }) ||\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n\n set(date, _flags, value, options) {\n date = setDay(date, value, options);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"y\",\n \"R\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"I\",\n \"d\",\n \"D\",\n \"E\",\n \"i\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { setDay } from \"../../../setDay.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits } from \"../utils.mjs\";\n\n// Stand-alone local day of week\nexport class StandAloneLocalDayParser extends Parser {\n priority = 90;\n\n parse(dateString, token, match, options) {\n const valueCallback = (value) => {\n // We want here floor instead of trunc, so we get -7 for value 0 instead of 0\n const wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case \"c\":\n case \"cc\": // 03\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n // 3rd\n case \"co\":\n return mapValue(\n match.ordinalNumber(dateString, {\n unit: \"day\",\n }),\n valueCallback,\n );\n // Tue\n case \"ccc\":\n return (\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n\n // T\n case \"ccccc\":\n return match.day(dateString, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // Tu\n case \"cccccc\":\n return (\n match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n\n // Tuesday\n case \"cccc\":\n default:\n return (\n match.day(dateString, { width: \"wide\", context: \"standalone\" }) ||\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"standalone\",\n }) ||\n match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n );\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 6;\n }\n\n set(date, _flags, value, options) {\n date = setDay(date, value, options);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"y\",\n \"R\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"I\",\n \"d\",\n \"D\",\n \"E\",\n \"i\",\n \"e\",\n \"t\",\n \"T\",\n ];\n}\n","import { addDays } from \"./addDays.mjs\";\nimport { getISODay } from \"./getISODay.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name setISODay\n * @category Weekday Helpers\n * @summary Set the day of the ISO week to the given date.\n *\n * @description\n * Set the day of the ISO week to the given date.\n * ISO week starts with Monday.\n * 7 is the index of Sunday, 1 is the index of Monday etc.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param day - The day of the ISO week of the new date\n *\n * @returns The new date with the day of the ISO week set\n *\n * @example\n * // Set Sunday to 1 September 2014:\n * const result = setISODay(new Date(2014, 8, 1), 7)\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport function setISODay(date, day) {\n const _date = toDate(date);\n const currentDay = getISODay(_date);\n const diff = day - currentDay;\n return addDays(_date, diff);\n}\n\n// Fallback for modularized imports:\nexport default setISODay;\n","import { setISODay } from \"../../../setISODay.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits } from \"../utils.mjs\";\n\n// ISO day of week\nexport class ISODayParser extends Parser {\n priority = 90;\n\n parse(dateString, token, match) {\n const valueCallback = (value) => {\n if (value === 0) {\n return 7;\n }\n return value;\n };\n\n switch (token) {\n // 2\n case \"i\":\n case \"ii\": // 02\n return parseNDigits(token.length, dateString);\n // 2nd\n case \"io\":\n return match.ordinalNumber(dateString, { unit: \"day\" });\n // Tue\n case \"iii\":\n return mapValue(\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"short\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n }),\n valueCallback,\n );\n // T\n case \"iiiii\":\n return mapValue(\n match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n }),\n valueCallback,\n );\n // Tu\n case \"iiiiii\":\n return mapValue(\n match.day(dateString, {\n width: \"short\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n }),\n valueCallback,\n );\n // Tuesday\n case \"iiii\":\n default:\n return mapValue(\n match.day(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"short\",\n context: \"formatting\",\n }) ||\n match.day(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n }),\n valueCallback,\n );\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 7;\n }\n\n set(date, _flags, value) {\n date = setISODay(date, value);\n date.setHours(0, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\n \"y\",\n \"Y\",\n \"u\",\n \"q\",\n \"Q\",\n \"M\",\n \"L\",\n \"w\",\n \"d\",\n \"D\",\n \"E\",\n \"e\",\n \"c\",\n \"t\",\n \"T\",\n ];\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { dayPeriodEnumToHours } from \"../utils.mjs\";\n\nexport class AMPMParser extends Parser {\n priority = 80;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"a\":\n case \"aa\":\n case \"aaa\":\n return (\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n\n case \"aaaaa\":\n return match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"aaaa\":\n default:\n return (\n match.dayPeriod(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n }\n }\n\n set(date, _flags, value) {\n date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"b\", \"B\", \"H\", \"k\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { dayPeriodEnumToHours } from \"../utils.mjs\";\n\nexport class AMPMMidnightParser extends Parser {\n priority = 80;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"b\":\n case \"bb\":\n case \"bbb\":\n return (\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n\n case \"bbbbb\":\n return match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"bbbb\":\n default:\n return (\n match.dayPeriod(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n }\n }\n\n set(date, _flags, value) {\n date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"a\", \"B\", \"H\", \"k\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { dayPeriodEnumToHours } from \"../utils.mjs\";\n\n// in the morning, in the afternoon, in the evening, at night\nexport class DayPeriodParser extends Parser {\n priority = 80;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"B\":\n case \"BB\":\n case \"BBB\":\n return (\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n\n case \"BBBBB\":\n return match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"BBBB\":\n default:\n return (\n match.dayPeriod(dateString, {\n width: \"wide\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"abbreviated\",\n context: \"formatting\",\n }) ||\n match.dayPeriod(dateString, {\n width: \"narrow\",\n context: \"formatting\",\n })\n );\n }\n }\n\n set(date, _flags, value) {\n date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"a\", \"b\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class Hour1to12Parser extends Parser {\n priority = 70;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"h\":\n return parseNumericPattern(numericPatterns.hour12h, dateString);\n case \"ho\":\n return match.ordinalNumber(dateString, { unit: \"hour\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 12;\n }\n\n set(date, _flags, value) {\n const isPM = date.getHours() >= 12;\n if (isPM && value < 12) {\n date.setHours(value + 12, 0, 0, 0);\n } else if (!isPM && value === 12) {\n date.setHours(0, 0, 0, 0);\n } else {\n date.setHours(value, 0, 0, 0);\n }\n return date;\n }\n\n incompatibleTokens = [\"H\", \"K\", \"k\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class Hour0to23Parser extends Parser {\n priority = 70;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"H\":\n return parseNumericPattern(numericPatterns.hour23h, dateString);\n case \"Ho\":\n return match.ordinalNumber(dateString, { unit: \"hour\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 23;\n }\n\n set(date, _flags, value) {\n date.setHours(value, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"a\", \"b\", \"h\", \"K\", \"k\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class Hour0To11Parser extends Parser {\n priority = 70;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"K\":\n return parseNumericPattern(numericPatterns.hour11h, dateString);\n case \"Ko\":\n return match.ordinalNumber(dateString, { unit: \"hour\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 11;\n }\n\n set(date, _flags, value) {\n const isPM = date.getHours() >= 12;\n if (isPM && value < 12) {\n date.setHours(value + 12, 0, 0, 0);\n } else {\n date.setHours(value, 0, 0, 0);\n }\n return date;\n }\n\n incompatibleTokens = [\"h\", \"H\", \"k\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class Hour1To24Parser extends Parser {\n priority = 70;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"k\":\n return parseNumericPattern(numericPatterns.hour24h, dateString);\n case \"ko\":\n return match.ordinalNumber(dateString, { unit: \"hour\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 1 && value <= 24;\n }\n\n set(date, _flags, value) {\n const hours = value <= 24 ? value % 24 : value;\n date.setHours(hours, 0, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"a\", \"b\", \"h\", \"H\", \"K\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class MinuteParser extends Parser {\n priority = 60;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"m\":\n return parseNumericPattern(numericPatterns.minute, dateString);\n case \"mo\":\n return match.ordinalNumber(dateString, { unit: \"minute\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n\n set(date, _flags, value) {\n date.setMinutes(value, 0, 0);\n return date;\n }\n\n incompatibleTokens = [\"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class SecondParser extends Parser {\n priority = 50;\n\n parse(dateString, token, match) {\n switch (token) {\n case \"s\":\n return parseNumericPattern(numericPatterns.second, dateString);\n case \"so\":\n return match.ordinalNumber(dateString, { unit: \"second\" });\n default:\n return parseNDigits(token.length, dateString);\n }\n }\n\n validate(_date, value) {\n return value >= 0 && value <= 59;\n }\n\n set(date, _flags, value) {\n date.setSeconds(value, 0);\n return date;\n }\n\n incompatibleTokens = [\"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits } from \"../utils.mjs\";\n\nexport class FractionOfSecondParser extends Parser {\n priority = 30;\n\n parse(dateString, token) {\n const valueCallback = (value) =>\n Math.trunc(value * Math.pow(10, -token.length + 3));\n return mapValue(parseNDigits(token.length, dateString), valueCallback);\n }\n\n set(date, _flags, value) {\n date.setMilliseconds(value);\n return date;\n }\n\n incompatibleTokens = [\"t\", \"T\"];\n}\n","import { constructFrom } from \"../../../constructFrom.mjs\";\nimport { getTimezoneOffsetInMilliseconds } from \"../../../_lib/getTimezoneOffsetInMilliseconds.mjs\";\nimport { timezonePatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseTimezonePattern } from \"../utils.mjs\";\n\n// Timezone (ISO-8601. +00:00 is `'Z'`)\nexport class ISOTimezoneWithZParser extends Parser {\n priority = 10;\n\n parse(dateString, token) {\n switch (token) {\n case \"X\":\n return parseTimezonePattern(\n timezonePatterns.basicOptionalMinutes,\n dateString,\n );\n case \"XX\":\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n case \"XXXX\":\n return parseTimezonePattern(\n timezonePatterns.basicOptionalSeconds,\n dateString,\n );\n case \"XXXXX\":\n return parseTimezonePattern(\n timezonePatterns.extendedOptionalSeconds,\n dateString,\n );\n case \"XXX\":\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n\n set(date, flags, value) {\n if (flags.timestampIsSet) return date;\n return constructFrom(\n date,\n date.getTime() - getTimezoneOffsetInMilliseconds(date) - value,\n );\n }\n\n incompatibleTokens = [\"t\", \"T\", \"x\"];\n}\n","import { constructFrom } from \"../../../constructFrom.mjs\";\nimport { getTimezoneOffsetInMilliseconds } from \"../../../_lib/getTimezoneOffsetInMilliseconds.mjs\";\nimport { timezonePatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseTimezonePattern } from \"../utils.mjs\";\n\n// Timezone (ISO-8601)\nexport class ISOTimezoneParser extends Parser {\n priority = 10;\n\n parse(dateString, token) {\n switch (token) {\n case \"x\":\n return parseTimezonePattern(\n timezonePatterns.basicOptionalMinutes,\n dateString,\n );\n case \"xx\":\n return parseTimezonePattern(timezonePatterns.basic, dateString);\n case \"xxxx\":\n return parseTimezonePattern(\n timezonePatterns.basicOptionalSeconds,\n dateString,\n );\n case \"xxxxx\":\n return parseTimezonePattern(\n timezonePatterns.extendedOptionalSeconds,\n dateString,\n );\n case \"xxx\":\n default:\n return parseTimezonePattern(timezonePatterns.extended, dateString);\n }\n }\n\n set(date, flags, value) {\n if (flags.timestampIsSet) return date;\n return constructFrom(\n date,\n date.getTime() - getTimezoneOffsetInMilliseconds(date) - value,\n );\n }\n\n incompatibleTokens = [\"t\", \"T\", \"X\"];\n}\n","import { constructFrom } from \"../../../constructFrom.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseAnyDigitsSigned } from \"../utils.mjs\";\n\nexport class TimestampSecondsParser extends Parser {\n priority = 40;\n\n parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n\n set(date, _flags, value) {\n return [constructFrom(date, value * 1000), { timestampIsSet: true }];\n }\n\n incompatibleTokens = \"*\";\n}\n","import { constructFrom } from \"../../../constructFrom.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseAnyDigitsSigned } from \"../utils.mjs\";\n\nexport class TimestampMillisecondsParser extends Parser {\n priority = 20;\n\n parse(dateString) {\n return parseAnyDigitsSigned(dateString);\n }\n\n set(date, _flags, value) {\n return [constructFrom(date, value), { timestampIsSet: true }];\n }\n\n incompatibleTokens = \"*\";\n}\n","import { EraParser } from \"./parsers/EraParser.mjs\";\nimport { YearParser } from \"./parsers/YearParser.mjs\";\nimport { LocalWeekYearParser } from \"./parsers/LocalWeekYearParser.mjs\";\nimport { ISOWeekYearParser } from \"./parsers/ISOWeekYearParser.mjs\";\nimport { ExtendedYearParser } from \"./parsers/ExtendedYearParser.mjs\";\nimport { QuarterParser } from \"./parsers/QuarterParser.mjs\";\nimport { StandAloneQuarterParser } from \"./parsers/StandAloneQuarterParser.mjs\";\nimport { MonthParser } from \"./parsers/MonthParser.mjs\";\nimport { StandAloneMonthParser } from \"./parsers/StandAloneMonthParser.mjs\";\nimport { LocalWeekParser } from \"./parsers/LocalWeekParser.mjs\";\nimport { ISOWeekParser } from \"./parsers/ISOWeekParser.mjs\";\nimport { DateParser } from \"./parsers/DateParser.mjs\";\nimport { DayOfYearParser } from \"./parsers/DayOfYearParser.mjs\";\nimport { DayParser } from \"./parsers/DayParser.mjs\";\nimport { LocalDayParser } from \"./parsers/LocalDayParser.mjs\";\nimport { StandAloneLocalDayParser } from \"./parsers/StandAloneLocalDayParser.mjs\";\nimport { ISODayParser } from \"./parsers/ISODayParser.mjs\";\nimport { AMPMParser } from \"./parsers/AMPMParser.mjs\";\nimport { AMPMMidnightParser } from \"./parsers/AMPMMidnightParser.mjs\";\nimport { DayPeriodParser } from \"./parsers/DayPeriodParser.mjs\";\nimport { Hour1to12Parser } from \"./parsers/Hour1to12Parser.mjs\";\nimport { Hour0to23Parser } from \"./parsers/Hour0to23Parser.mjs\";\nimport { Hour0To11Parser } from \"./parsers/Hour0To11Parser.mjs\";\nimport { Hour1To24Parser } from \"./parsers/Hour1To24Parser.mjs\";\nimport { MinuteParser } from \"./parsers/MinuteParser.mjs\";\nimport { SecondParser } from \"./parsers/SecondParser.mjs\";\nimport { FractionOfSecondParser } from \"./parsers/FractionOfSecondParser.mjs\";\nimport { ISOTimezoneWithZParser } from \"./parsers/ISOTimezoneWithZParser.mjs\";\nimport { ISOTimezoneParser } from \"./parsers/ISOTimezoneParser.mjs\";\nimport { TimestampSecondsParser } from \"./parsers/TimestampSecondsParser.mjs\";\nimport { TimestampMillisecondsParser } from \"./parsers/TimestampMillisecondsParser.mjs\";\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O* | Timezone (GMT) |\n * | p | | P | |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z* | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- It's ok, we want any here\nexport const parsers = {\n G: new EraParser(),\n y: new YearParser(),\n Y: new LocalWeekYearParser(),\n R: new ISOWeekYearParser(),\n u: new ExtendedYearParser(),\n Q: new QuarterParser(),\n q: new StandAloneQuarterParser(),\n M: new MonthParser(),\n L: new StandAloneMonthParser(),\n w: new LocalWeekParser(),\n I: new ISOWeekParser(),\n d: new DateParser(),\n D: new DayOfYearParser(),\n E: new DayParser(),\n e: new LocalDayParser(),\n c: new StandAloneLocalDayParser(),\n i: new ISODayParser(),\n a: new AMPMParser(),\n b: new AMPMMidnightParser(),\n B: new DayPeriodParser(),\n h: new Hour1to12Parser(),\n H: new Hour0to23Parser(),\n K: new Hour0To11Parser(),\n k: new Hour1To24Parser(),\n m: new MinuteParser(),\n s: new SecondParser(),\n S: new FractionOfSecondParser(),\n X: new ISOTimezoneWithZParser(),\n x: new ISOTimezoneParser(),\n t: new TimestampSecondsParser(),\n T: new TimestampMillisecondsParser(),\n};\n","import { constructFrom } from \"./constructFrom.mjs\";\nimport { getDefaultOptions } from \"./getDefaultOptions.mjs\";\nimport { defaultLocale } from \"./_lib/defaultLocale.mjs\";\nimport { toDate } from \"./toDate.mjs\";\nimport { longFormatters } from \"./_lib/format/longFormatters.mjs\";\nimport {\n isProtectedDayOfYearToken,\n isProtectedWeekYearToken,\n warnOrThrowProtectedError,\n} from \"./_lib/protectedTokens.mjs\";\nimport { parsers } from \"./parse/_lib/parsers.mjs\";\nimport { DateToSystemTimezoneSetter } from \"./parse/_lib/Setter.mjs\";\n\n// Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\nexport { longFormatters, parsers };\n\n/**\n * The {@link parse} function options.\n */\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nconst formattingTokensRegExp =\n /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nconst longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\n\nconst notWhitespaceRegExp = /\\S/;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters in the format string wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n *\n * Format of the format string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * parse('23 AM', 'HH a', new Date())\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit |Prior| Pattern | Result examples | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era | 140 | G..GGG | AD, BC | |\n * | | | GGGG | Anno Domini, Before Christ | 2 |\n * | | | GGGGG | A, B | |\n * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 |\n * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | yy | 44, 01, 00, 17 | 4 |\n * | | | yyy | 044, 001, 123, 999 | 4 |\n * | | | yyyy | 0044, 0001, 1900, 2017 | 4 |\n * | | | yyyyy | ... | 2,4 |\n * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 |\n * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | YY | 44, 01, 00, 17 | 4,6 |\n * | | | YYY | 044, 001, 123, 999 | 4 |\n * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 |\n * | | | YYYYY | ... | 2,4 |\n * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 |\n * | | | RR | -43, 01, 00, 17 | 4,5 |\n * | | | RRR | -043, 001, 123, 999, -999 | 4,5 |\n * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 |\n * | | | RRRRR | ... | 2,4,5 |\n * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 |\n * | | | uu | -43, 01, 99, -99 | 4 |\n * | | | uuu | -043, 001, 123, 999, -999 | 4 |\n * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 |\n * | | | uuuuu | ... | 2,4 |\n * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | |\n * | | | Qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | QQ | 01, 02, 03, 04 | |\n * | | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | 120 | q | 1, 2, 3, 4 | |\n * | | | qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | qq | 01, 02, 03, 04 | |\n * | | | qqq | Q1, Q2, Q3, Q4 | |\n * | | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | | qqqqq | 1, 2, 3, 4 | 3 |\n * | Month (formatting) | 110 | M | 1, 2, ..., 12 | |\n * | | | Mo | 1st, 2nd, ..., 12th | 5 |\n * | | | MM | 01, 02, ..., 12 | |\n * | | | MMM | Jan, Feb, ..., Dec | |\n * | | | MMMM | January, February, ..., December | 2 |\n * | | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | 110 | L | 1, 2, ..., 12 | |\n * | | | Lo | 1st, 2nd, ..., 12th | 5 |\n * | | | LL | 01, 02, ..., 12 | |\n * | | | LLL | Jan, Feb, ..., Dec | |\n * | | | LLLL | January, February, ..., December | 2 |\n * | | | LLLLL | J, F, ..., D | |\n * | Local week of year | 100 | w | 1, 2, ..., 53 | |\n * | | | wo | 1st, 2nd, ..., 53th | 5 |\n * | | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 |\n * | | | Io | 1st, 2nd, ..., 53th | 5 |\n * | | | II | 01, 02, ..., 53 | 5 |\n * | Day of month | 90 | d | 1, 2, ..., 31 | |\n * | | | do | 1st, 2nd, ..., 31st | 5 |\n * | | | dd | 01, 02, ..., 31 | |\n * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 7 |\n * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 |\n * | | | DD | 01, 02, ..., 365, 366 | 7 |\n * | | | DDD | 001, 002, ..., 365, 366 | |\n * | | | DDDD | ... | 2 |\n * | Day of week (formatting) | 90 | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | | EEEEE | M, T, W, T, F, S, S | |\n * | | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | 90 | i | 1, 2, 3, ..., 7 | 5 |\n * | | | io | 1st, 2nd, ..., 7th | 5 |\n * | | | ii | 01, 02, ..., 07 | 5 |\n * | | | iii | Mon, Tue, Wed, ..., Sun | 5 |\n * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 |\n * | | | iiiii | M, T, W, T, F, S, S | 5 |\n * | | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 5 |\n * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | |\n * | | | eo | 2nd, 3rd, ..., 1st | 5 |\n * | | | ee | 02, 03, ..., 01 | |\n * | | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | | eeeee | M, T, W, T, F, S, S | |\n * | | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | 90 | c | 2, 3, 4, ..., 1 | |\n * | | | co | 2nd, 3rd, ..., 1st | 5 |\n * | | | cc | 02, 03, ..., 01 | |\n * | | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | | ccccc | M, T, W, T, F, S, S | |\n * | | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | 80 | a..aaa | AM, PM | |\n * | | | aaaa | a.m., p.m. | 2 |\n * | | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | |\n * | | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | | bbbbb | a, p, n, mi | |\n * | Flexible day period | 80 | B..BBB | at night, in the morning, ... | |\n * | | | BBBB | at night, in the morning, ... | 2 |\n * | | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | 70 | h | 1, 2, ..., 11, 12 | |\n * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 |\n * | | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | |\n * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 |\n * | | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | |\n * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 |\n * | | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | |\n * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 |\n * | | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | 60 | m | 0, 1, ..., 59 | |\n * | | | mo | 0th, 1st, ..., 59th | 5 |\n * | | | mm | 00, 01, ..., 59 | |\n * | Second | 50 | s | 0, 1, ..., 59 | |\n * | | | so | 0th, 1st, ..., 59th | 5 |\n * | | | ss | 00, 01, ..., 59 | |\n * | Seconds timestamp | 40 | t | 512969520 | |\n * | | | tt | ... | 2 |\n * | Fraction of second | 30 | S | 0, 1, ..., 9 | |\n * | | | SS | 00, 01, ..., 99 | |\n * | | | SSS | 000, 001, ..., 999 | |\n * | | | SSSS | ... | 2 |\n * | Milliseconds timestamp | 20 | T | 512969520900 | |\n * | | | TT | ... | 2 |\n * | Timezone (ISO-8601 w/ Z) | 10 | X | -08, +0530, Z | |\n * | | | XX | -0800, +0530, Z | |\n * | | | XXX | -08:00, +05:30, Z | |\n * | | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | 10 | x | -08, +0530, +00 | |\n * | | | xx | -0800, +0530, +0000 | |\n * | | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Long localized date | NA | P | 05/29/1453 | 5,8 |\n * | | | PP | May 29, 1453 | |\n * | | | PPP | May 29th, 1453 | |\n * | | | PPPP | Sunday, May 29th, 1453 | 2,5,8 |\n * | Long localized time | NA | p | 12:00 AM | 5,8 |\n * | | | pp | 12:00:00 AM | |\n * | Combination of date and time | NA | Pp | 05/29/1453, 12:00 AM | |\n * | | | PPpp | May 29, 1453, 12:00:00 AM | |\n * | | | PPPpp | May 29th, 1453 at ... | |\n * | | | PPPPpp | Sunday, May 29th, 1453 at ... | 2,5,8 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular.\n * In `format` function, they will produce different result:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * `parse` will try to match both formatting and stand-alone units interchangably.\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table:\n * - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n * as wide as the sequence\n * - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n * These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 4. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n * `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n * `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n * while `uu` will just assign the year as is:\n *\n * `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n * `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [setISOWeekYear](https://date-fns.org/docs/setISOWeekYear)\n * and [setWeekYear](https://date-fns.org/docs/setWeekYear)).\n *\n * 5. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 7. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n * on the given locale.\n *\n * using `en-US` locale: `P` => `MM/dd/yyyy`\n * using `en-US` locale: `p` => `hh:mm a`\n * using `pt-BR` locale: `P` => `dd/MM/yyyy`\n * using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing.\n *\n * `referenceDate` must be passed for correct work of the function.\n * If you're not sure which `referenceDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateStr - The string to parse\n * @param formatStr - The string of tokens\n * @param referenceDate - defines values missing from the parsed dateString\n * @param options - An object with options.\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @returns The parsed date\n *\n * @throws `options.locale` must contain `match` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n * locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\nexport function parse(dateStr, formatStr, referenceDate, options) {\n const defaultOptions = getDefaultOptions();\n const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n if (formatStr === \"\") {\n if (dateStr === \"\") {\n return toDate(referenceDate);\n } else {\n return constructFrom(referenceDate, NaN);\n }\n }\n\n const subFnOptions = {\n firstWeekContainsDate,\n weekStartsOn,\n locale,\n };\n\n // If timezone isn't specified, it will be set to the system timezone\n const setters = [new DateToSystemTimezoneSetter()];\n\n const tokens = formatStr\n .match(longFormattingTokensRegExp)\n .map((substring) => {\n const firstCharacter = substring[0];\n if (firstCharacter in longFormatters) {\n const longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n return substring;\n })\n .join(\"\")\n .match(formattingTokensRegExp);\n\n const usedTokens = [];\n\n for (let token of tokens) {\n if (\n !options?.useAdditionalWeekYearTokens &&\n isProtectedWeekYearToken(token)\n ) {\n warnOrThrowProtectedError(token, formatStr, dateStr);\n }\n if (\n !options?.useAdditionalDayOfYearTokens &&\n isProtectedDayOfYearToken(token)\n ) {\n warnOrThrowProtectedError(token, formatStr, dateStr);\n }\n\n const firstCharacter = token[0];\n const parser = parsers[firstCharacter];\n if (parser) {\n const { incompatibleTokens } = parser;\n if (Array.isArray(incompatibleTokens)) {\n const incompatibleToken = usedTokens.find(\n (usedToken) =>\n incompatibleTokens.includes(usedToken.token) ||\n usedToken.token === firstCharacter,\n );\n if (incompatibleToken) {\n throw new RangeError(\n `The format string mustn't contain \\`${incompatibleToken.fullToken}\\` and \\`${token}\\` at the same time`,\n );\n }\n } else if (parser.incompatibleTokens === \"*\" && usedTokens.length > 0) {\n throw new RangeError(\n `The format string mustn't contain \\`${token}\\` and any other token at the same time`,\n );\n }\n\n usedTokens.push({ token: firstCharacter, fullToken: token });\n\n const parseResult = parser.run(\n dateStr,\n token,\n locale.match,\n subFnOptions,\n );\n\n if (!parseResult) {\n return constructFrom(referenceDate, NaN);\n }\n\n setters.push(parseResult.setter);\n\n dateStr = parseResult.rest;\n } else {\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError(\n \"Format string contains an unescaped latin alphabet character `\" +\n firstCharacter +\n \"`\",\n );\n }\n\n // Replace two single quote characters with one single quote character\n if (token === \"''\") {\n token = \"'\";\n } else if (firstCharacter === \"'\") {\n token = cleanEscapedString(token);\n }\n\n // Cut token from string, or, if string doesn't match the token, return Invalid Date\n if (dateStr.indexOf(token) === 0) {\n dateStr = dateStr.slice(token.length);\n } else {\n return constructFrom(referenceDate, NaN);\n }\n }\n }\n\n // Check if the remaining input contains something other than whitespace\n if (dateStr.length > 0 && notWhitespaceRegExp.test(dateStr)) {\n return constructFrom(referenceDate, NaN);\n }\n\n const uniquePrioritySetters = setters\n .map((setter) => setter.priority)\n .sort((a, b) => b - a)\n .filter((priority, index, array) => array.indexOf(priority) === index)\n .map((priority) =>\n setters\n .filter((setter) => setter.priority === priority)\n .sort((a, b) => b.subPriority - a.subPriority),\n )\n .map((setterArray) => setterArray[0]);\n\n let date = toDate(referenceDate);\n\n if (isNaN(date.getTime())) {\n return constructFrom(referenceDate, NaN);\n }\n\n const flags = {};\n for (const setter of uniquePrioritySetters) {\n if (!setter.validate(date, subFnOptions)) {\n return constructFrom(referenceDate, NaN);\n }\n\n const result = setter.set(date, flags, subFnOptions);\n // Result is tuple (date, flags)\n if (Array.isArray(result)) {\n date = result[0];\n Object.assign(flags, result[1]);\n // Result is date\n } else {\n date = result;\n }\n }\n\n return constructFrom(referenceDate, date);\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}\n\n// Fallback for modularized imports:\nexport default parse;\n","import { Container, injectable} from \"inversify\";\nimport type { interfaces } from \"inversify\";\nimport {\n PrimariaApi,\n IRequest,\n IRequestClass,\n BrokerDisposableHandler,\n} from \"@uxland/primary-shell\";\n\nconst registerRequest =\n (api: PrimariaApi, container: Container) =>\n (command: IRequestClass<any>, handler: interfaces.Newable<any>) => {\n container.bind(handler).to(handler).inTransientScope();\n injectable()(handler);\n const disposable = api.broker.registerRequest(command, (cmd: IRequest<any>) => {\n const handlerInstance = container.get(handler);\n return handlerInstance.handle(cmd);\n });\n return {\n dispose: () => {\n container.isBound(handler) && container.unbind(handler);\n disposable.dispose();\n },\n };\n };\n\nexport interface BrokerExtensions {\n registerRequest: (\n command: IRequestClass<any> | string,\n handler: interfaces.Newable<any>,\n ) => BrokerDisposableHandler;\n}\n\nexport const brokerExtensions = (api: PrimariaApi, container: Container): BrokerExtensions => {\n const register = registerRequest(api, container);\n return {\n registerRequest: register,\n };\n};\n","export const generateId = ():string => {\n try {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n } catch (error) {\n console.warn(\"crypto.randomUUID() failed, using fallback\");\n }\n\n // Fallback\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n","export const mapArrayToLabelValue = (array: any[], labelProp: string, valueProp: string) => {\n return array\n .map((item) => {\n const label = item[labelProp];\n const value = item[valueProp];\n\n if ((label === '' || label == null) && typeof value === 'string' && value.trim() !== '') {\n return {\n label: value,\n value: value,\n };\n }\n\n if ((label === '' || label == null) && (value === '' || value == null)) {\n return null;\n }\n\n return {\n label,\n value,\n };\n })\n .filter((item) => item !== null);\n};\n\nexport const mapEntityDescriptionArrayToLabelValue = (array: any[]) =>\n mapArrayToLabelValue(array, \"description\", \"id\");\n","export function createConnectToStoreDecorator(store: any) {\n return function connectToStore(selector: (state: any) => any) {\n return (target: any, propertyKey: string): void => {\n Object.defineProperty(target, propertyKey, {\n get() {\n return this[`__${propertyKey}`];\n },\n set(newVal) {\n if (this[`__${propertyKey}`] !== newVal) {\n this[`__${propertyKey}`] = Array.isArray(newVal)\n ? [...newVal] // 🔥 Clonar array para cambiar referencia\n : typeof newVal === \"object\" && newVal !== null\n ? { ...newVal } // 🔥 Clonar objetos también\n : newVal;\n this.requestUpdate(propertyKey);\n }\n },\n configurable: true,\n enumerable: true,\n });\n\n const connectedCallback = target.connectedCallback;\n const disconnectedCallback = target.disconnectedCallback;\n\n target.connectedCallback = function () {\n if (connectedCallback) {\n connectedCallback.call(this);\n }\n\n // Set initial state value (con nueva referencia)\n this[propertyKey] = selector(store.getState());\n\n this[`__unsubscribe__${propertyKey}`] = store.subscribe(() => {\n const newValue = selector(store.getState());\n this[propertyKey] = Array.isArray(newValue)\n ? [...newValue] // 🔥 Clonar para evitar referencias iguales\n : typeof newValue === \"object\" && newValue !== null\n ? { ...newValue }\n : newValue;\n });\n };\n\n target.disconnectedCallback = function () {\n if (disconnectedCallback) {\n disconnectedCallback.call(this);\n }\n if (this[`__unsubscribe__${propertyKey}`]) {\n this[`__unsubscribe__${propertyKey}`]();\n }\n };\n };\n };\n}\n","import { createConnectToStoreDecorator } from \"./redux-decorator-factory\";\nimport { property } from \"lit/decorators.js\";\n\nexport function createConnectedProperty(store) {\n return (selector: (state: any) => any, options: any = {}) => {\n const connectToStore = createConnectToStoreDecorator(store);\n return (target: any, propertyKey: string): void => {\n property(options)(target, propertyKey);\n connectToStore(selector)(target, propertyKey);\n };\n };\n}\n","import { IEntityDescription } from \"./entity\";\nimport { IOwner } from \"./owner\";\n\n/**\n * Contractes compartits de la Història d'Activitat.\n *\n * Viuen a `@primaria/plugins-core` (i no dins del plugin activity-history)\n * perquè són part de l'API pública que el shell re-exporta i que consumeixen\n * altres iniciatives. Així el shell no depèn del codi font d'un plugin germà.\n */\n\nexport type TSearchActivityHistoryItemPredicate = (searchString: string, item: IActivityHistoryItem) => boolean;\n\nexport interface IActivityHistoryDiagnostic {\n codi: string;\n cataleg: string;\n descripcio: string;\n idEcap: string;\n idCipds: string;\n idCdr: string;\n}\n\nexport interface IActivityHistoryItem {\n id: string;\n date: string;\n professional: IOwner;\n relevant: boolean;\n diagnostics: IActivityHistoryDiagnostic[];\n center: IEntityDescription;\n up: IEntityDescription;\n ep: IEntityDescription;\n service: IEntityDescription;\n /** Plugin-defined short identifier shown as a small badge next to each\n * item. `id` is the stable code (e.g. \"CC\", \"SOL\", \"ECON\"), `description`\n * the human-readable label. Plugins must map their own field to this\n * property when injecting items. */\n tag: IEntityDescription;\n /** Optional textual payload of the item, used by the structured-data\n * importer's destination plugins to render the selection. Plugins whose\n * items have a written body (e.g. clinical-course notes, reports) should\n * populate it; plugins with only metadata (e.g. petition rows) can\n * leave it undefined. */\n content?: { html?: string; plainText?: string };\n componentFactory?: (item?: any) => HTMLElement;\n searchPredicate?: TSearchActivityHistoryItemPredicate;\n type?: string;\n}\n\n/**\n * Context the structured-data importer (the picker shown inside the\n * import-data modal) hands over to each collection's preselect rule. Lives\n * here to avoid coupling the activity-history domain to the shell's\n * `ImportParams` type.\n */\nexport interface IHistoryDataImporterContext {\n diagnostics?: Array<{ code: string; catalog?: string; description?: string }>;\n}\n\n/**\n * Per-collection rules that govern how the structured-data importer treats\n * the items injected by a plugin. Plugins declare these alongside their\n * other inject payload fields (componentFactory, searchPredicate, ...).\n */\nexport interface IHistoryDataImporterRules {\n /** Items from this collection are kept in the importer only if their\n * `tag.id` is in this list. If undefined, no allowlist (all items pass). */\n allowedTagIds?: string[];\n /** If provided, items matching this predicate are auto-selected the first\n * time the importer modal renders the data. */\n shouldPreselect?: (item: IActivityHistoryItem, ctx: IHistoryDataImporterContext) => boolean;\n}\n\nexport enum ActivityHistoryFilterType {\n Switch = \"switch\",\n Checkbox = \"checkbox\",\n Dropdown = \"dropdown\",\n}\n\nexport interface IActivityHistoryCustomFilter {\n id: string;\n title: string;\n propPathValue: string[];\n propsPathDescription: string[];\n enabled: boolean;\n type: ActivityHistoryFilterType;\n singleOption?: boolean;\n options?: {\n id: string;\n title: string;\n }[];\n enabledValues?: string[];\n}\n\nexport interface IActivityHistoryCustomFilterGroup {\n id: string;\n title: string;\n enabled: boolean;\n sort: string;\n filters: IActivityHistoryCustomFilter[];\n}\n\nexport interface InjectAsyncHistoryItemsPayload {\n entityId: string;\n entityDescription: string;\n asyncDataProvider: () => Promise<IActivityHistoryItem[]>;\n componentFactory: (item: IActivityHistoryItem) => HTMLElement;\n searchPredicate?: (searchString: string, item: IActivityHistoryItem) => boolean;\n errorMessage: string;\n filters: IActivityHistoryCustomFilterGroup;\n historyDataImporterRules?: IHistoryDataImporterRules;\n}\n\nexport interface AddHistoryItemPayload {\n entityId: string;\n item: IActivityHistoryItem;\n componentFactory: (item: IActivityHistoryItem) => HTMLElement;\n searchPredicate?: (searchString: string, item: any) => boolean;\n}\n\nexport interface AddHistoryItemsPayload {\n entityId: string;\n items: IActivityHistoryItem[];\n componentFactory: (item: IActivityHistoryItem) => HTMLElement;\n filters?: IActivityHistoryCustomFilterGroup;\n searchPredicate?: (searchString: string, item: any) => boolean;\n historyDataImporterRules?: IHistoryDataImporterRules;\n}\n","export const TYPES = {\n primaryApi: Symbol.for(\"primaryApi\"),\n store: Symbol.for(\"store\"),\n};\n","// src/utils/formatProdErrorMessage.ts\nfunction formatProdErrorMessage(code) {\n return `Minified Redux error #${code}; visit https://redux.js.org/Errors?code=${code} for the full message or use the non-minified dev environment for full errors. `;\n}\n\n// src/utils/symbol-observable.ts\nvar $$observable = /* @__PURE__ */ (() => typeof Symbol === \"function\" && Symbol.observable || \"@@observable\")();\nvar symbol_observable_default = $$observable;\n\n// src/utils/actionTypes.ts\nvar randomString = () => Math.random().toString(36).substring(7).split(\"\").join(\".\");\nvar ActionTypes = {\n INIT: `@@redux/INIT${/* @__PURE__ */ randomString()}`,\n REPLACE: `@@redux/REPLACE${/* @__PURE__ */ randomString()}`,\n PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`\n};\nvar actionTypes_default = ActionTypes;\n\n// src/utils/isPlainObject.ts\nfunction isPlainObject(obj) {\n if (typeof obj !== \"object\" || obj === null)\n return false;\n let proto = obj;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(obj) === proto || Object.getPrototypeOf(obj) === null;\n}\n\n// src/utils/kindOf.ts\nfunction miniKindOf(val) {\n if (val === void 0)\n return \"undefined\";\n if (val === null)\n return \"null\";\n const type = typeof val;\n switch (type) {\n case \"boolean\":\n case \"string\":\n case \"number\":\n case \"symbol\":\n case \"function\": {\n return type;\n }\n }\n if (Array.isArray(val))\n return \"array\";\n if (isDate(val))\n return \"date\";\n if (isError(val))\n return \"error\";\n const constructorName = ctorName(val);\n switch (constructorName) {\n case \"Symbol\":\n case \"Promise\":\n case \"WeakMap\":\n case \"WeakSet\":\n case \"Map\":\n case \"Set\":\n return constructorName;\n }\n return Object.prototype.toString.call(val).slice(8, -1).toLowerCase().replace(/\\s/g, \"\");\n}\nfunction ctorName(val) {\n return typeof val.constructor === \"function\" ? val.constructor.name : null;\n}\nfunction isError(val) {\n return val instanceof Error || typeof val.message === \"string\" && val.constructor && typeof val.constructor.stackTraceLimit === \"number\";\n}\nfunction isDate(val) {\n if (val instanceof Date)\n return true;\n return typeof val.toDateString === \"function\" && typeof val.getDate === \"function\" && typeof val.setDate === \"function\";\n}\nfunction kindOf(val) {\n let typeOfVal = typeof val;\n if (process.env.NODE_ENV !== \"production\") {\n typeOfVal = miniKindOf(val);\n }\n return typeOfVal;\n}\n\n// src/createStore.ts\nfunction createStore(reducer, preloadedState, enhancer) {\n if (typeof reducer !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(2) : `Expected the root reducer to be a function. Instead, received: '${kindOf(reducer)}'`);\n }\n if (typeof preloadedState === \"function\" && typeof enhancer === \"function\" || typeof enhancer === \"function\" && typeof arguments[3] === \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(0) : \"It looks like you are passing several store enhancers to createStore(). This is not supported. Instead, compose them together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.\");\n }\n if (typeof preloadedState === \"function\" && typeof enhancer === \"undefined\") {\n enhancer = preloadedState;\n preloadedState = void 0;\n }\n if (typeof enhancer !== \"undefined\") {\n if (typeof enhancer !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(1) : `Expected the enhancer to be a function. Instead, received: '${kindOf(enhancer)}'`);\n }\n return enhancer(createStore)(reducer, preloadedState);\n }\n let currentReducer = reducer;\n let currentState = preloadedState;\n let currentListeners = /* @__PURE__ */ new Map();\n let nextListeners = currentListeners;\n let listenerIdCounter = 0;\n let isDispatching = false;\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = /* @__PURE__ */ new Map();\n currentListeners.forEach((listener, key) => {\n nextListeners.set(key, listener);\n });\n }\n }\n function getState() {\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(3) : \"You may not call store.getState() while the reducer is executing. The reducer has already received the state as an argument. Pass it down from the top reducer instead of reading it from the store.\");\n }\n return currentState;\n }\n function subscribe(listener) {\n if (typeof listener !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(4) : `Expected the listener to be a function. Instead, received: '${kindOf(listener)}'`);\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(5) : \"You may not call store.subscribe() while the reducer is executing. If you would like to be notified after the store has been updated, subscribe from a component and invoke store.getState() in the callback to access the latest state. See https://redux.js.org/api/store#subscribelistener for more details.\");\n }\n let isSubscribed = true;\n ensureCanMutateNextListeners();\n const listenerId = listenerIdCounter++;\n nextListeners.set(listenerId, listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(6) : \"You may not unsubscribe from a store listener while the reducer is executing. See https://redux.js.org/api/store#subscribelistener for more details.\");\n }\n isSubscribed = false;\n ensureCanMutateNextListeners();\n nextListeners.delete(listenerId);\n currentListeners = null;\n };\n }\n function dispatch(action) {\n if (!isPlainObject(action)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(7) : `Actions must be plain objects. Instead, the actual type was: '${kindOf(action)}'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.`);\n }\n if (typeof action.type === \"undefined\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n }\n if (typeof action.type !== \"string\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(17) : `Action \"type\" property must be a string. Instead, the actual type was: '${kindOf(action.type)}'. Value was: '${action.type}' (stringified)`);\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(9) : \"Reducers may not dispatch actions.\");\n }\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n const listeners = currentListeners = nextListeners;\n listeners.forEach((listener) => {\n listener();\n });\n return action;\n }\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(10) : `Expected the nextReducer to be a function. Instead, received: '${kindOf(nextReducer)}`);\n }\n currentReducer = nextReducer;\n dispatch({\n type: actionTypes_default.REPLACE\n });\n }\n function observable() {\n const outerSubscribe = subscribe;\n return {\n /**\n * The minimal observable subscription method.\n * @param observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe(observer) {\n if (typeof observer !== \"object\" || observer === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(11) : `Expected the observer to be an object. Instead, received: '${kindOf(observer)}'`);\n }\n function observeState() {\n const observerAsObserver = observer;\n if (observerAsObserver.next) {\n observerAsObserver.next(getState());\n }\n }\n observeState();\n const unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe\n };\n },\n [symbol_observable_default]() {\n return this;\n }\n };\n }\n dispatch({\n type: actionTypes_default.INIT\n });\n const store = {\n dispatch,\n subscribe,\n getState,\n replaceReducer,\n [symbol_observable_default]: observable\n };\n return store;\n}\nfunction legacy_createStore(reducer, preloadedState, enhancer) {\n return createStore(reducer, preloadedState, enhancer);\n}\n\n// src/utils/warning.ts\nfunction warning(message) {\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(message);\n }\n try {\n throw new Error(message);\n } catch (e) {\n }\n}\n\n// src/combineReducers.ts\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n const reducerKeys = Object.keys(reducers);\n const argumentName = action && action.type === actionTypes_default.INIT ? \"preloadedState argument passed to createStore\" : \"previous state received by the reducer\";\n if (reducerKeys.length === 0) {\n return \"Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.\";\n }\n if (!isPlainObject(inputState)) {\n return `The ${argumentName} has unexpected type of \"${kindOf(inputState)}\". Expected argument to be an object with the following keys: \"${reducerKeys.join('\", \"')}\"`;\n }\n const unexpectedKeys = Object.keys(inputState).filter((key) => !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key]);\n unexpectedKeys.forEach((key) => {\n unexpectedKeyCache[key] = true;\n });\n if (action && action.type === actionTypes_default.REPLACE)\n return;\n if (unexpectedKeys.length > 0) {\n return `Unexpected ${unexpectedKeys.length > 1 ? \"keys\" : \"key\"} \"${unexpectedKeys.join('\", \"')}\" found in ${argumentName}. Expected to find one of the known reducer keys instead: \"${reducerKeys.join('\", \"')}\". Unexpected keys will be ignored.`;\n }\n}\nfunction assertReducerShape(reducers) {\n Object.keys(reducers).forEach((key) => {\n const reducer = reducers[key];\n const initialState = reducer(void 0, {\n type: actionTypes_default.INIT\n });\n if (typeof initialState === \"undefined\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(12) : `The slice reducer for key \"${key}\" returned undefined during initialization. If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don't want to set a value for this reducer, you can use null instead of undefined.`);\n }\n if (typeof reducer(void 0, {\n type: actionTypes_default.PROBE_UNKNOWN_ACTION()\n }) === \"undefined\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(13) : `The slice reducer for key \"${key}\" returned undefined when probed with a random type. Don't try to handle '${actionTypes_default.INIT}' or other actions in \"redux/*\" namespace. They are considered private. Instead, you must return the current state for any unknown actions, unless it is undefined, in which case you must return the initial state, regardless of the action type. The initial state may not be undefined, but can be null.`);\n }\n });\n}\nfunction combineReducers(reducers) {\n const reducerKeys = Object.keys(reducers);\n const finalReducers = {};\n for (let i = 0; i < reducerKeys.length; i++) {\n const key = reducerKeys[i];\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof reducers[key] === \"undefined\") {\n warning(`No reducer provided for key \"${key}\"`);\n }\n }\n if (typeof reducers[key] === \"function\") {\n finalReducers[key] = reducers[key];\n }\n }\n const finalReducerKeys = Object.keys(finalReducers);\n let unexpectedKeyCache;\n if (process.env.NODE_ENV !== \"production\") {\n unexpectedKeyCache = {};\n }\n let shapeAssertionError;\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n return function combination(state = {}, action) {\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n if (process.env.NODE_ENV !== \"production\") {\n const warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n let hasChanged = false;\n const nextState = {};\n for (let i = 0; i < finalReducerKeys.length; i++) {\n const key = finalReducerKeys[i];\n const reducer = finalReducers[key];\n const previousStateForKey = state[key];\n const nextStateForKey = reducer(previousStateForKey, action);\n if (typeof nextStateForKey === \"undefined\") {\n const actionType = action && action.type;\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(14) : `When called with an action of type ${actionType ? `\"${String(actionType)}\"` : \"(unknown type)\"}, the slice reducer for key \"${key}\" returned undefined. To ignore an action, you must explicitly return the previous state. If you want this reducer to hold no value, you can return null instead of undefined.`);\n }\n nextState[key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n return hasChanged ? nextState : state;\n };\n}\n\n// src/bindActionCreators.ts\nfunction bindActionCreator(actionCreator, dispatch) {\n return function(...args) {\n return dispatch(actionCreator.apply(this, args));\n };\n}\nfunction bindActionCreators(actionCreators, dispatch) {\n if (typeof actionCreators === \"function\") {\n return bindActionCreator(actionCreators, dispatch);\n }\n if (typeof actionCreators !== \"object\" || actionCreators === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(16) : `bindActionCreators expected an object or a function, but instead received: '${kindOf(actionCreators)}'. Did you write \"import ActionCreators from\" instead of \"import * as ActionCreators from\"?`);\n }\n const boundActionCreators = {};\n for (const key in actionCreators) {\n const actionCreator = actionCreators[key];\n if (typeof actionCreator === \"function\") {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n return boundActionCreators;\n}\n\n// src/compose.ts\nfunction compose(...funcs) {\n if (funcs.length === 0) {\n return (arg) => arg;\n }\n if (funcs.length === 1) {\n return funcs[0];\n }\n return funcs.reduce((a, b) => (...args) => a(b(...args)));\n}\n\n// src/applyMiddleware.ts\nfunction applyMiddleware(...middlewares) {\n return (createStore2) => (reducer, preloadedState) => {\n const store = createStore2(reducer, preloadedState);\n let dispatch = () => {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(15) : \"Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.\");\n };\n const middlewareAPI = {\n getState: store.getState,\n dispatch: (action, ...args) => dispatch(action, ...args)\n };\n const chain = middlewares.map((middleware) => middleware(middlewareAPI));\n dispatch = compose(...chain)(store.dispatch);\n return {\n ...store,\n dispatch\n };\n };\n}\n\n// src/utils/isAction.ts\nfunction isAction(action) {\n return isPlainObject(action) && \"type\" in action && typeof action.type === \"string\";\n}\nexport {\n actionTypes_default as __DO_NOT_USE__ActionTypes,\n applyMiddleware,\n bindActionCreators,\n combineReducers,\n compose,\n createStore,\n isAction,\n isPlainObject,\n legacy_createStore\n};\n//# sourceMappingURL=redux.mjs.map","// src/utils/env.ts\nvar NOTHING = Symbol.for(\"immer-nothing\");\nvar DRAFTABLE = Symbol.for(\"immer-draftable\");\nvar DRAFT_STATE = Symbol.for(\"immer-state\");\n\n// src/utils/errors.ts\nvar errors = process.env.NODE_ENV !== \"production\" ? [\n // All error codes, starting by 0:\n function(plugin) {\n return `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \\`enable${plugin}()\\` when initializing your application.`;\n },\n function(thing) {\n return `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`;\n },\n \"This object has been frozen and should not be mutated\",\n function(data) {\n return \"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \" + data;\n },\n \"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",\n \"Immer forbids circular references\",\n \"The first or second argument to `produce` must be a function\",\n \"The third argument to `produce` must be a function or undefined\",\n \"First argument to `createDraft` must be a plain object, an array, or an immerable object\",\n \"First argument to `finishDraft` must be a draft returned by `createDraft`\",\n function(thing) {\n return `'current' expects a draft, got: ${thing}`;\n },\n \"Object.defineProperty() cannot be used on an Immer draft\",\n \"Object.setPrototypeOf() cannot be used on an Immer draft\",\n \"Immer only supports deleting array indices\",\n \"Immer only supports setting array indices and the 'length' property\",\n function(thing) {\n return `'original' expects a draft, got: ${thing}`;\n }\n // Note: if more errors are added, the errorOffset in Patches.ts should be increased\n // See Patches.ts for additional errors\n] : [];\nfunction die(error, ...args) {\n if (process.env.NODE_ENV !== \"production\") {\n const e = errors[error];\n const msg = typeof e === \"function\" ? e.apply(null, args) : e;\n throw new Error(`[Immer] ${msg}`);\n }\n throw new Error(\n `[Immer] minified error nr: ${error}. Full error at: https://bit.ly/3cXEKWf`\n );\n}\n\n// src/utils/common.ts\nvar getPrototypeOf = Object.getPrototypeOf;\nfunction isDraft(value) {\n return !!value && !!value[DRAFT_STATE];\n}\nfunction isDraftable(value) {\n if (!value)\n return false;\n return isPlainObject(value) || Array.isArray(value) || !!value[DRAFTABLE] || !!value.constructor?.[DRAFTABLE] || isMap(value) || isSet(value);\n}\nvar objectCtorString = Object.prototype.constructor.toString();\nfunction isPlainObject(value) {\n if (!value || typeof value !== \"object\")\n return false;\n const proto = getPrototypeOf(value);\n if (proto === null) {\n return true;\n }\n const Ctor = Object.hasOwnProperty.call(proto, \"constructor\") && proto.constructor;\n if (Ctor === Object)\n return true;\n return typeof Ctor == \"function\" && Function.toString.call(Ctor) === objectCtorString;\n}\nfunction original(value) {\n if (!isDraft(value))\n die(15, value);\n return value[DRAFT_STATE].base_;\n}\nfunction each(obj, iter) {\n if (getArchtype(obj) === 0 /* Object */) {\n Reflect.ownKeys(obj).forEach((key) => {\n iter(key, obj[key], obj);\n });\n } else {\n obj.forEach((entry, index) => iter(index, entry, obj));\n }\n}\nfunction getArchtype(thing) {\n const state = thing[DRAFT_STATE];\n return state ? state.type_ : Array.isArray(thing) ? 1 /* Array */ : isMap(thing) ? 2 /* Map */ : isSet(thing) ? 3 /* Set */ : 0 /* Object */;\n}\nfunction has(thing, prop) {\n return getArchtype(thing) === 2 /* Map */ ? thing.has(prop) : Object.prototype.hasOwnProperty.call(thing, prop);\n}\nfunction get(thing, prop) {\n return getArchtype(thing) === 2 /* Map */ ? thing.get(prop) : thing[prop];\n}\nfunction set(thing, propOrOldValue, value) {\n const t = getArchtype(thing);\n if (t === 2 /* Map */)\n thing.set(propOrOldValue, value);\n else if (t === 3 /* Set */) {\n thing.add(value);\n } else\n thing[propOrOldValue] = value;\n}\nfunction is(x, y) {\n if (x === y) {\n return x !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\nfunction isMap(target) {\n return target instanceof Map;\n}\nfunction isSet(target) {\n return target instanceof Set;\n}\nfunction latest(state) {\n return state.copy_ || state.base_;\n}\nfunction shallowCopy(base, strict) {\n if (isMap(base)) {\n return new Map(base);\n }\n if (isSet(base)) {\n return new Set(base);\n }\n if (Array.isArray(base))\n return Array.prototype.slice.call(base);\n const isPlain = isPlainObject(base);\n if (strict === true || strict === \"class_only\" && !isPlain) {\n const descriptors = Object.getOwnPropertyDescriptors(base);\n delete descriptors[DRAFT_STATE];\n let keys = Reflect.ownKeys(descriptors);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const desc = descriptors[key];\n if (desc.writable === false) {\n desc.writable = true;\n desc.configurable = true;\n }\n if (desc.get || desc.set)\n descriptors[key] = {\n configurable: true,\n writable: true,\n // could live with !!desc.set as well here...\n enumerable: desc.enumerable,\n value: base[key]\n };\n }\n return Object.create(getPrototypeOf(base), descriptors);\n } else {\n const proto = getPrototypeOf(base);\n if (proto !== null && isPlain) {\n return { ...base };\n }\n const obj = Object.create(proto);\n return Object.assign(obj, base);\n }\n}\nfunction freeze(obj, deep = false) {\n if (isFrozen(obj) || isDraft(obj) || !isDraftable(obj))\n return obj;\n if (getArchtype(obj) > 1) {\n obj.set = obj.add = obj.clear = obj.delete = dontMutateFrozenCollections;\n }\n Object.freeze(obj);\n if (deep)\n Object.entries(obj).forEach(([key, value]) => freeze(value, true));\n return obj;\n}\nfunction dontMutateFrozenCollections() {\n die(2);\n}\nfunction isFrozen(obj) {\n return Object.isFrozen(obj);\n}\n\n// src/utils/plugins.ts\nvar plugins = {};\nfunction getPlugin(pluginKey) {\n const plugin = plugins[pluginKey];\n if (!plugin) {\n die(0, pluginKey);\n }\n return plugin;\n}\nfunction loadPlugin(pluginKey, implementation) {\n if (!plugins[pluginKey])\n plugins[pluginKey] = implementation;\n}\n\n// src/core/scope.ts\nvar currentScope;\nfunction getCurrentScope() {\n return currentScope;\n}\nfunction createScope(parent_, immer_) {\n return {\n drafts_: [],\n parent_,\n immer_,\n // Whenever the modified draft contains a draft from another scope, we\n // need to prevent auto-freezing so the unowned draft can be finalized.\n canAutoFreeze_: true,\n unfinalizedDrafts_: 0\n };\n}\nfunction usePatchesInScope(scope, patchListener) {\n if (patchListener) {\n getPlugin(\"Patches\");\n scope.patches_ = [];\n scope.inversePatches_ = [];\n scope.patchListener_ = patchListener;\n }\n}\nfunction revokeScope(scope) {\n leaveScope(scope);\n scope.drafts_.forEach(revokeDraft);\n scope.drafts_ = null;\n}\nfunction leaveScope(scope) {\n if (scope === currentScope) {\n currentScope = scope.parent_;\n }\n}\nfunction enterScope(immer2) {\n return currentScope = createScope(currentScope, immer2);\n}\nfunction revokeDraft(draft) {\n const state = draft[DRAFT_STATE];\n if (state.type_ === 0 /* Object */ || state.type_ === 1 /* Array */)\n state.revoke_();\n else\n state.revoked_ = true;\n}\n\n// src/core/finalize.ts\nfunction processResult(result, scope) {\n scope.unfinalizedDrafts_ = scope.drafts_.length;\n const baseDraft = scope.drafts_[0];\n const isReplaced = result !== void 0 && result !== baseDraft;\n if (isReplaced) {\n if (baseDraft[DRAFT_STATE].modified_) {\n revokeScope(scope);\n die(4);\n }\n if (isDraftable(result)) {\n result = finalize(scope, result);\n if (!scope.parent_)\n maybeFreeze(scope, result);\n }\n if (scope.patches_) {\n getPlugin(\"Patches\").generateReplacementPatches_(\n baseDraft[DRAFT_STATE].base_,\n result,\n scope.patches_,\n scope.inversePatches_\n );\n }\n } else {\n result = finalize(scope, baseDraft, []);\n }\n revokeScope(scope);\n if (scope.patches_) {\n scope.patchListener_(scope.patches_, scope.inversePatches_);\n }\n return result !== NOTHING ? result : void 0;\n}\nfunction finalize(rootScope, value, path) {\n if (isFrozen(value))\n return value;\n const state = value[DRAFT_STATE];\n if (!state) {\n each(\n value,\n (key, childValue) => finalizeProperty(rootScope, state, value, key, childValue, path)\n );\n return value;\n }\n if (state.scope_ !== rootScope)\n return value;\n if (!state.modified_) {\n maybeFreeze(rootScope, state.base_, true);\n return state.base_;\n }\n if (!state.finalized_) {\n state.finalized_ = true;\n state.scope_.unfinalizedDrafts_--;\n const result = state.copy_;\n let resultEach = result;\n let isSet2 = false;\n if (state.type_ === 3 /* Set */) {\n resultEach = new Set(result);\n result.clear();\n isSet2 = true;\n }\n each(\n resultEach,\n (key, childValue) => finalizeProperty(rootScope, state, result, key, childValue, path, isSet2)\n );\n maybeFreeze(rootScope, result, false);\n if (path && rootScope.patches_) {\n getPlugin(\"Patches\").generatePatches_(\n state,\n path,\n rootScope.patches_,\n rootScope.inversePatches_\n );\n }\n }\n return state.copy_;\n}\nfunction finalizeProperty(rootScope, parentState, targetObject, prop, childValue, rootPath, targetIsSet) {\n if (process.env.NODE_ENV !== \"production\" && childValue === targetObject)\n die(5);\n if (isDraft(childValue)) {\n const path = rootPath && parentState && parentState.type_ !== 3 /* Set */ && // Set objects are atomic since they have no keys.\n !has(parentState.assigned_, prop) ? rootPath.concat(prop) : void 0;\n const res = finalize(rootScope, childValue, path);\n set(targetObject, prop, res);\n if (isDraft(res)) {\n rootScope.canAutoFreeze_ = false;\n } else\n return;\n } else if (targetIsSet) {\n targetObject.add(childValue);\n }\n if (isDraftable(childValue) && !isFrozen(childValue)) {\n if (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {\n return;\n }\n finalize(rootScope, childValue);\n if ((!parentState || !parentState.scope_.parent_) && typeof prop !== \"symbol\" && Object.prototype.propertyIsEnumerable.call(targetObject, prop))\n maybeFreeze(rootScope, childValue);\n }\n}\nfunction maybeFreeze(scope, value, deep = false) {\n if (!scope.parent_ && scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {\n freeze(value, deep);\n }\n}\n\n// src/core/proxy.ts\nfunction createProxyProxy(base, parent) {\n const isArray = Array.isArray(base);\n const state = {\n type_: isArray ? 1 /* Array */ : 0 /* Object */,\n // Track which produce call this is associated with.\n scope_: parent ? parent.scope_ : getCurrentScope(),\n // True for both shallow and deep changes.\n modified_: false,\n // Used during finalization.\n finalized_: false,\n // Track which properties have been assigned (true) or deleted (false).\n assigned_: {},\n // The parent draft state.\n parent_: parent,\n // The base state.\n base_: base,\n // The base proxy.\n draft_: null,\n // set below\n // The base copy with any updated values.\n copy_: null,\n // Called by the `produce` function.\n revoke_: null,\n isManual_: false\n };\n let target = state;\n let traps = objectTraps;\n if (isArray) {\n target = [state];\n traps = arrayTraps;\n }\n const { revoke, proxy } = Proxy.revocable(target, traps);\n state.draft_ = proxy;\n state.revoke_ = revoke;\n return proxy;\n}\nvar objectTraps = {\n get(state, prop) {\n if (prop === DRAFT_STATE)\n return state;\n const source = latest(state);\n if (!has(source, prop)) {\n return readPropFromProto(state, source, prop);\n }\n const value = source[prop];\n if (state.finalized_ || !isDraftable(value)) {\n return value;\n }\n if (value === peek(state.base_, prop)) {\n prepareCopy(state);\n return state.copy_[prop] = createProxy(value, state);\n }\n return value;\n },\n has(state, prop) {\n return prop in latest(state);\n },\n ownKeys(state) {\n return Reflect.ownKeys(latest(state));\n },\n set(state, prop, value) {\n const desc = getDescriptorFromProto(latest(state), prop);\n if (desc?.set) {\n desc.set.call(state.draft_, value);\n return true;\n }\n if (!state.modified_) {\n const current2 = peek(latest(state), prop);\n const currentState = current2?.[DRAFT_STATE];\n if (currentState && currentState.base_ === value) {\n state.copy_[prop] = value;\n state.assigned_[prop] = false;\n return true;\n }\n if (is(value, current2) && (value !== void 0 || has(state.base_, prop)))\n return true;\n prepareCopy(state);\n markChanged(state);\n }\n if (state.copy_[prop] === value && // special case: handle new props with value 'undefined'\n (value !== void 0 || prop in state.copy_) || // special case: NaN\n Number.isNaN(value) && Number.isNaN(state.copy_[prop]))\n return true;\n state.copy_[prop] = value;\n state.assigned_[prop] = true;\n return true;\n },\n deleteProperty(state, prop) {\n if (peek(state.base_, prop) !== void 0 || prop in state.base_) {\n state.assigned_[prop] = false;\n prepareCopy(state);\n markChanged(state);\n } else {\n delete state.assigned_[prop];\n }\n if (state.copy_) {\n delete state.copy_[prop];\n }\n return true;\n },\n // Note: We never coerce `desc.value` into an Immer draft, because we can't make\n // the same guarantee in ES5 mode.\n getOwnPropertyDescriptor(state, prop) {\n const owner = latest(state);\n const desc = Reflect.getOwnPropertyDescriptor(owner, prop);\n if (!desc)\n return desc;\n return {\n writable: true,\n configurable: state.type_ !== 1 /* Array */ || prop !== \"length\",\n enumerable: desc.enumerable,\n value: owner[prop]\n };\n },\n defineProperty() {\n die(11);\n },\n getPrototypeOf(state) {\n return getPrototypeOf(state.base_);\n },\n setPrototypeOf() {\n die(12);\n }\n};\nvar arrayTraps = {};\neach(objectTraps, (key, fn) => {\n arrayTraps[key] = function() {\n arguments[0] = arguments[0][0];\n return fn.apply(this, arguments);\n };\n});\narrayTraps.deleteProperty = function(state, prop) {\n if (process.env.NODE_ENV !== \"production\" && isNaN(parseInt(prop)))\n die(13);\n return arrayTraps.set.call(this, state, prop, void 0);\n};\narrayTraps.set = function(state, prop, value) {\n if (process.env.NODE_ENV !== \"production\" && prop !== \"length\" && isNaN(parseInt(prop)))\n die(14);\n return objectTraps.set.call(this, state[0], prop, value, state[0]);\n};\nfunction peek(draft, prop) {\n const state = draft[DRAFT_STATE];\n const source = state ? latest(state) : draft;\n return source[prop];\n}\nfunction readPropFromProto(state, source, prop) {\n const desc = getDescriptorFromProto(source, prop);\n return desc ? `value` in desc ? desc.value : (\n // This is a very special case, if the prop is a getter defined by the\n // prototype, we should invoke it with the draft as context!\n desc.get?.call(state.draft_)\n ) : void 0;\n}\nfunction getDescriptorFromProto(source, prop) {\n if (!(prop in source))\n return void 0;\n let proto = getPrototypeOf(source);\n while (proto) {\n const desc = Object.getOwnPropertyDescriptor(proto, prop);\n if (desc)\n return desc;\n proto = getPrototypeOf(proto);\n }\n return void 0;\n}\nfunction markChanged(state) {\n if (!state.modified_) {\n state.modified_ = true;\n if (state.parent_) {\n markChanged(state.parent_);\n }\n }\n}\nfunction prepareCopy(state) {\n if (!state.copy_) {\n state.copy_ = shallowCopy(\n state.base_,\n state.scope_.immer_.useStrictShallowCopy_\n );\n }\n}\n\n// src/core/immerClass.ts\nvar Immer2 = class {\n constructor(config) {\n this.autoFreeze_ = true;\n this.useStrictShallowCopy_ = false;\n /**\n * The `produce` function takes a value and a \"recipe function\" (whose\n * return value often depends on the base state). The recipe function is\n * free to mutate its first argument however it wants. All mutations are\n * only ever applied to a __copy__ of the base state.\n *\n * Pass only a function to create a \"curried producer\" which relieves you\n * from passing the recipe function every time.\n *\n * Only plain objects and arrays are made mutable. All other objects are\n * considered uncopyable.\n *\n * Note: This function is __bound__ to its `Immer` instance.\n *\n * @param {any} base - the initial state\n * @param {Function} recipe - function that receives a proxy of the base state as first argument and which can be freely modified\n * @param {Function} patchListener - optional function that will be called with all the patches produced here\n * @returns {any} a new state, or the initial state if nothing was modified\n */\n this.produce = (base, recipe, patchListener) => {\n if (typeof base === \"function\" && typeof recipe !== \"function\") {\n const defaultBase = recipe;\n recipe = base;\n const self = this;\n return function curriedProduce(base2 = defaultBase, ...args) {\n return self.produce(base2, (draft) => recipe.call(this, draft, ...args));\n };\n }\n if (typeof recipe !== \"function\")\n die(6);\n if (patchListener !== void 0 && typeof patchListener !== \"function\")\n die(7);\n let result;\n if (isDraftable(base)) {\n const scope = enterScope(this);\n const proxy = createProxy(base, void 0);\n let hasError = true;\n try {\n result = recipe(proxy);\n hasError = false;\n } finally {\n if (hasError)\n revokeScope(scope);\n else\n leaveScope(scope);\n }\n usePatchesInScope(scope, patchListener);\n return processResult(result, scope);\n } else if (!base || typeof base !== \"object\") {\n result = recipe(base);\n if (result === void 0)\n result = base;\n if (result === NOTHING)\n result = void 0;\n if (this.autoFreeze_)\n freeze(result, true);\n if (patchListener) {\n const p = [];\n const ip = [];\n getPlugin(\"Patches\").generateReplacementPatches_(base, result, p, ip);\n patchListener(p, ip);\n }\n return result;\n } else\n die(1, base);\n };\n this.produceWithPatches = (base, recipe) => {\n if (typeof base === \"function\") {\n return (state, ...args) => this.produceWithPatches(state, (draft) => base(draft, ...args));\n }\n let patches, inversePatches;\n const result = this.produce(base, recipe, (p, ip) => {\n patches = p;\n inversePatches = ip;\n });\n return [result, patches, inversePatches];\n };\n if (typeof config?.autoFreeze === \"boolean\")\n this.setAutoFreeze(config.autoFreeze);\n if (typeof config?.useStrictShallowCopy === \"boolean\")\n this.setUseStrictShallowCopy(config.useStrictShallowCopy);\n }\n createDraft(base) {\n if (!isDraftable(base))\n die(8);\n if (isDraft(base))\n base = current(base);\n const scope = enterScope(this);\n const proxy = createProxy(base, void 0);\n proxy[DRAFT_STATE].isManual_ = true;\n leaveScope(scope);\n return proxy;\n }\n finishDraft(draft, patchListener) {\n const state = draft && draft[DRAFT_STATE];\n if (!state || !state.isManual_)\n die(9);\n const { scope_: scope } = state;\n usePatchesInScope(scope, patchListener);\n return processResult(void 0, scope);\n }\n /**\n * Pass true to automatically freeze all copies created by Immer.\n *\n * By default, auto-freezing is enabled.\n */\n setAutoFreeze(value) {\n this.autoFreeze_ = value;\n }\n /**\n * Pass true to enable strict shallow copy.\n *\n * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n */\n setUseStrictShallowCopy(value) {\n this.useStrictShallowCopy_ = value;\n }\n applyPatches(base, patches) {\n let i;\n for (i = patches.length - 1; i >= 0; i--) {\n const patch = patches[i];\n if (patch.path.length === 0 && patch.op === \"replace\") {\n base = patch.value;\n break;\n }\n }\n if (i > -1) {\n patches = patches.slice(i + 1);\n }\n const applyPatchesImpl = getPlugin(\"Patches\").applyPatches_;\n if (isDraft(base)) {\n return applyPatchesImpl(base, patches);\n }\n return this.produce(\n base,\n (draft) => applyPatchesImpl(draft, patches)\n );\n }\n};\nfunction createProxy(value, parent) {\n const draft = isMap(value) ? getPlugin(\"MapSet\").proxyMap_(value, parent) : isSet(value) ? getPlugin(\"MapSet\").proxySet_(value, parent) : createProxyProxy(value, parent);\n const scope = parent ? parent.scope_ : getCurrentScope();\n scope.drafts_.push(draft);\n return draft;\n}\n\n// src/core/current.ts\nfunction current(value) {\n if (!isDraft(value))\n die(10, value);\n return currentImpl(value);\n}\nfunction currentImpl(value) {\n if (!isDraftable(value) || isFrozen(value))\n return value;\n const state = value[DRAFT_STATE];\n let copy;\n if (state) {\n if (!state.modified_)\n return state.base_;\n state.finalized_ = true;\n copy = shallowCopy(value, state.scope_.immer_.useStrictShallowCopy_);\n } else {\n copy = shallowCopy(value, true);\n }\n each(copy, (key, childValue) => {\n set(copy, key, currentImpl(childValue));\n });\n if (state) {\n state.finalized_ = false;\n }\n return copy;\n}\n\n// src/plugins/patches.ts\nfunction enablePatches() {\n const errorOffset = 16;\n if (process.env.NODE_ENV !== \"production\") {\n errors.push(\n 'Sets cannot have \"replace\" patches.',\n function(op) {\n return \"Unsupported patch operation: \" + op;\n },\n function(path) {\n return \"Cannot apply patch, path doesn't resolve: \" + path;\n },\n \"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"\n );\n }\n const REPLACE = \"replace\";\n const ADD = \"add\";\n const REMOVE = \"remove\";\n function generatePatches_(state, basePath, patches, inversePatches) {\n switch (state.type_) {\n case 0 /* Object */:\n case 2 /* Map */:\n return generatePatchesFromAssigned(\n state,\n basePath,\n patches,\n inversePatches\n );\n case 1 /* Array */:\n return generateArrayPatches(state, basePath, patches, inversePatches);\n case 3 /* Set */:\n return generateSetPatches(\n state,\n basePath,\n patches,\n inversePatches\n );\n }\n }\n function generateArrayPatches(state, basePath, patches, inversePatches) {\n let { base_, assigned_ } = state;\n let copy_ = state.copy_;\n if (copy_.length < base_.length) {\n ;\n [base_, copy_] = [copy_, base_];\n [patches, inversePatches] = [inversePatches, patches];\n }\n for (let i = 0; i < base_.length; i++) {\n if (assigned_[i] && copy_[i] !== base_[i]) {\n const path = basePath.concat([i]);\n patches.push({\n op: REPLACE,\n path,\n // Need to maybe clone it, as it can in fact be the original value\n // due to the base/copy inversion at the start of this function\n value: clonePatchValueIfNeeded(copy_[i])\n });\n inversePatches.push({\n op: REPLACE,\n path,\n value: clonePatchValueIfNeeded(base_[i])\n });\n }\n }\n for (let i = base_.length; i < copy_.length; i++) {\n const path = basePath.concat([i]);\n patches.push({\n op: ADD,\n path,\n // Need to maybe clone it, as it can in fact be the original value\n // due to the base/copy inversion at the start of this function\n value: clonePatchValueIfNeeded(copy_[i])\n });\n }\n for (let i = copy_.length - 1; base_.length <= i; --i) {\n const path = basePath.concat([i]);\n inversePatches.push({\n op: REMOVE,\n path\n });\n }\n }\n function generatePatchesFromAssigned(state, basePath, patches, inversePatches) {\n const { base_, copy_ } = state;\n each(state.assigned_, (key, assignedValue) => {\n const origValue = get(base_, key);\n const value = get(copy_, key);\n const op = !assignedValue ? REMOVE : has(base_, key) ? REPLACE : ADD;\n if (origValue === value && op === REPLACE)\n return;\n const path = basePath.concat(key);\n patches.push(op === REMOVE ? { op, path } : { op, path, value });\n inversePatches.push(\n op === ADD ? { op: REMOVE, path } : op === REMOVE ? { op: ADD, path, value: clonePatchValueIfNeeded(origValue) } : { op: REPLACE, path, value: clonePatchValueIfNeeded(origValue) }\n );\n });\n }\n function generateSetPatches(state, basePath, patches, inversePatches) {\n let { base_, copy_ } = state;\n let i = 0;\n base_.forEach((value) => {\n if (!copy_.has(value)) {\n const path = basePath.concat([i]);\n patches.push({\n op: REMOVE,\n path,\n value\n });\n inversePatches.unshift({\n op: ADD,\n path,\n value\n });\n }\n i++;\n });\n i = 0;\n copy_.forEach((value) => {\n if (!base_.has(value)) {\n const path = basePath.concat([i]);\n patches.push({\n op: ADD,\n path,\n value\n });\n inversePatches.unshift({\n op: REMOVE,\n path,\n value\n });\n }\n i++;\n });\n }\n function generateReplacementPatches_(baseValue, replacement, patches, inversePatches) {\n patches.push({\n op: REPLACE,\n path: [],\n value: replacement === NOTHING ? void 0 : replacement\n });\n inversePatches.push({\n op: REPLACE,\n path: [],\n value: baseValue\n });\n }\n function applyPatches_(draft, patches) {\n patches.forEach((patch) => {\n const { path, op } = patch;\n let base = draft;\n for (let i = 0; i < path.length - 1; i++) {\n const parentType = getArchtype(base);\n let p = path[i];\n if (typeof p !== \"string\" && typeof p !== \"number\") {\n p = \"\" + p;\n }\n if ((parentType === 0 /* Object */ || parentType === 1 /* Array */) && (p === \"__proto__\" || p === \"constructor\"))\n die(errorOffset + 3);\n if (typeof base === \"function\" && p === \"prototype\")\n die(errorOffset + 3);\n base = get(base, p);\n if (typeof base !== \"object\")\n die(errorOffset + 2, path.join(\"/\"));\n }\n const type = getArchtype(base);\n const value = deepClonePatchValue(patch.value);\n const key = path[path.length - 1];\n switch (op) {\n case REPLACE:\n switch (type) {\n case 2 /* Map */:\n return base.set(key, value);\n case 3 /* Set */:\n die(errorOffset);\n default:\n return base[key] = value;\n }\n case ADD:\n switch (type) {\n case 1 /* Array */:\n return key === \"-\" ? base.push(value) : base.splice(key, 0, value);\n case 2 /* Map */:\n return base.set(key, value);\n case 3 /* Set */:\n return base.add(value);\n default:\n return base[key] = value;\n }\n case REMOVE:\n switch (type) {\n case 1 /* Array */:\n return base.splice(key, 1);\n case 2 /* Map */:\n return base.delete(key);\n case 3 /* Set */:\n return base.delete(patch.value);\n default:\n return delete base[key];\n }\n default:\n die(errorOffset + 1, op);\n }\n });\n return draft;\n }\n function deepClonePatchValue(obj) {\n if (!isDraftable(obj))\n return obj;\n if (Array.isArray(obj))\n return obj.map(deepClonePatchValue);\n if (isMap(obj))\n return new Map(\n Array.from(obj.entries()).map(([k, v]) => [k, deepClonePatchValue(v)])\n );\n if (isSet(obj))\n return new Set(Array.from(obj).map(deepClonePatchValue));\n const cloned = Object.create(getPrototypeOf(obj));\n for (const key in obj)\n cloned[key] = deepClonePatchValue(obj[key]);\n if (has(obj, DRAFTABLE))\n cloned[DRAFTABLE] = obj[DRAFTABLE];\n return cloned;\n }\n function clonePatchValueIfNeeded(obj) {\n if (isDraft(obj)) {\n return deepClonePatchValue(obj);\n } else\n return obj;\n }\n loadPlugin(\"Patches\", {\n applyPatches_,\n generatePatches_,\n generateReplacementPatches_\n });\n}\n\n// src/plugins/mapset.ts\nfunction enableMapSet() {\n class DraftMap extends Map {\n constructor(target, parent) {\n super();\n this[DRAFT_STATE] = {\n type_: 2 /* Map */,\n parent_: parent,\n scope_: parent ? parent.scope_ : getCurrentScope(),\n modified_: false,\n finalized_: false,\n copy_: void 0,\n assigned_: void 0,\n base_: target,\n draft_: this,\n isManual_: false,\n revoked_: false\n };\n }\n get size() {\n return latest(this[DRAFT_STATE]).size;\n }\n has(key) {\n return latest(this[DRAFT_STATE]).has(key);\n }\n set(key, value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!latest(state).has(key) || latest(state).get(key) !== value) {\n prepareMapCopy(state);\n markChanged(state);\n state.assigned_.set(key, true);\n state.copy_.set(key, value);\n state.assigned_.set(key, true);\n }\n return this;\n }\n delete(key) {\n if (!this.has(key)) {\n return false;\n }\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareMapCopy(state);\n markChanged(state);\n if (state.base_.has(key)) {\n state.assigned_.set(key, false);\n } else {\n state.assigned_.delete(key);\n }\n state.copy_.delete(key);\n return true;\n }\n clear() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (latest(state).size) {\n prepareMapCopy(state);\n markChanged(state);\n state.assigned_ = /* @__PURE__ */ new Map();\n each(state.base_, (key) => {\n state.assigned_.set(key, false);\n });\n state.copy_.clear();\n }\n }\n forEach(cb, thisArg) {\n const state = this[DRAFT_STATE];\n latest(state).forEach((_value, key, _map) => {\n cb.call(thisArg, this.get(key), key, this);\n });\n }\n get(key) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n const value = latest(state).get(key);\n if (state.finalized_ || !isDraftable(value)) {\n return value;\n }\n if (value !== state.base_.get(key)) {\n return value;\n }\n const draft = createProxy(value, state);\n prepareMapCopy(state);\n state.copy_.set(key, draft);\n return draft;\n }\n keys() {\n return latest(this[DRAFT_STATE]).keys();\n }\n values() {\n const iterator = this.keys();\n return {\n [Symbol.iterator]: () => this.values(),\n next: () => {\n const r = iterator.next();\n if (r.done)\n return r;\n const value = this.get(r.value);\n return {\n done: false,\n value\n };\n }\n };\n }\n entries() {\n const iterator = this.keys();\n return {\n [Symbol.iterator]: () => this.entries(),\n next: () => {\n const r = iterator.next();\n if (r.done)\n return r;\n const value = this.get(r.value);\n return {\n done: false,\n value: [r.value, value]\n };\n }\n };\n }\n [(DRAFT_STATE, Symbol.iterator)]() {\n return this.entries();\n }\n }\n function proxyMap_(target, parent) {\n return new DraftMap(target, parent);\n }\n function prepareMapCopy(state) {\n if (!state.copy_) {\n state.assigned_ = /* @__PURE__ */ new Map();\n state.copy_ = new Map(state.base_);\n }\n }\n class DraftSet extends Set {\n constructor(target, parent) {\n super();\n this[DRAFT_STATE] = {\n type_: 3 /* Set */,\n parent_: parent,\n scope_: parent ? parent.scope_ : getCurrentScope(),\n modified_: false,\n finalized_: false,\n copy_: void 0,\n base_: target,\n draft_: this,\n drafts_: /* @__PURE__ */ new Map(),\n revoked_: false,\n isManual_: false\n };\n }\n get size() {\n return latest(this[DRAFT_STATE]).size;\n }\n has(value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!state.copy_) {\n return state.base_.has(value);\n }\n if (state.copy_.has(value))\n return true;\n if (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))\n return true;\n return false;\n }\n add(value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!this.has(value)) {\n prepareSetCopy(state);\n markChanged(state);\n state.copy_.add(value);\n }\n return this;\n }\n delete(value) {\n if (!this.has(value)) {\n return false;\n }\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n markChanged(state);\n return state.copy_.delete(value) || (state.drafts_.has(value) ? state.copy_.delete(state.drafts_.get(value)) : (\n /* istanbul ignore next */\n false\n ));\n }\n clear() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (latest(state).size) {\n prepareSetCopy(state);\n markChanged(state);\n state.copy_.clear();\n }\n }\n values() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n return state.copy_.values();\n }\n entries() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n return state.copy_.entries();\n }\n keys() {\n return this.values();\n }\n [(DRAFT_STATE, Symbol.iterator)]() {\n return this.values();\n }\n forEach(cb, thisArg) {\n const iterator = this.values();\n let result = iterator.next();\n while (!result.done) {\n cb.call(thisArg, result.value, result.value, this);\n result = iterator.next();\n }\n }\n }\n function proxySet_(target, parent) {\n return new DraftSet(target, parent);\n }\n function prepareSetCopy(state) {\n if (!state.copy_) {\n state.copy_ = /* @__PURE__ */ new Set();\n state.base_.forEach((value) => {\n if (isDraftable(value)) {\n const draft = createProxy(value, state);\n state.drafts_.set(value, draft);\n state.copy_.add(draft);\n } else {\n state.copy_.add(value);\n }\n });\n }\n }\n function assertUnrevoked(state) {\n if (state.revoked_)\n die(3, JSON.stringify(latest(state)));\n }\n loadPlugin(\"MapSet\", { proxyMap_, proxySet_ });\n}\n\n// src/immer.ts\nvar immer = new Immer2();\nvar produce = immer.produce;\nvar produceWithPatches = immer.produceWithPatches.bind(\n immer\n);\nvar setAutoFreeze = immer.setAutoFreeze.bind(immer);\nvar setUseStrictShallowCopy = immer.setUseStrictShallowCopy.bind(immer);\nvar applyPatches = immer.applyPatches.bind(immer);\nvar createDraft = immer.createDraft.bind(immer);\nvar finishDraft = immer.finishDraft.bind(immer);\nfunction castDraft(value) {\n return value;\n}\nfunction castImmutable(value) {\n return value;\n}\nexport {\n Immer2 as Immer,\n applyPatches,\n castDraft,\n castImmutable,\n createDraft,\n current,\n enableMapSet,\n enablePatches,\n finishDraft,\n freeze,\n DRAFTABLE as immerable,\n isDraft,\n isDraftable,\n NOTHING as nothing,\n original,\n produce,\n produceWithPatches,\n setAutoFreeze,\n setUseStrictShallowCopy\n};\n//# sourceMappingURL=immer.mjs.map","// src/devModeChecks/identityFunctionCheck.ts\nvar runIdentityFunctionCheck = (resultFunc, inputSelectorsResults, outputSelectorResult) => {\n if (inputSelectorsResults.length === 1 && inputSelectorsResults[0] === outputSelectorResult) {\n let isInputSameAsOutput = false;\n try {\n const emptyObject = {};\n if (resultFunc(emptyObject) === emptyObject)\n isInputSameAsOutput = true;\n } catch {\n }\n if (isInputSameAsOutput) {\n let stack = void 0;\n try {\n throw new Error();\n } catch (e) {\n ;\n ({ stack } = e);\n }\n console.warn(\n \"The result function returned its own inputs without modification. e.g\\n`createSelector([state => state.todos], todos => todos)`\\nThis could lead to inefficient memoization and unnecessary re-renders.\\nEnsure transformation logic is in the result function, and extraction logic is in the input selectors.\",\n { stack }\n );\n }\n }\n};\n\n// src/devModeChecks/inputStabilityCheck.ts\nvar runInputStabilityCheck = (inputSelectorResultsObject, options, inputSelectorArgs) => {\n const { memoize, memoizeOptions } = options;\n const { inputSelectorResults, inputSelectorResultsCopy } = inputSelectorResultsObject;\n const createAnEmptyObject = memoize(() => ({}), ...memoizeOptions);\n const areInputSelectorResultsEqual = createAnEmptyObject.apply(null, inputSelectorResults) === createAnEmptyObject.apply(null, inputSelectorResultsCopy);\n if (!areInputSelectorResultsEqual) {\n let stack = void 0;\n try {\n throw new Error();\n } catch (e) {\n ;\n ({ stack } = e);\n }\n console.warn(\n \"An input selector returned a different result when passed same arguments.\\nThis means your output selector will likely run more frequently than intended.\\nAvoid returning a new reference inside your input selector, e.g.\\n`createSelector([state => state.todos.map(todo => todo.id)], todoIds => todoIds.length)`\",\n {\n arguments: inputSelectorArgs,\n firstInputs: inputSelectorResults,\n secondInputs: inputSelectorResultsCopy,\n stack\n }\n );\n }\n};\n\n// src/devModeChecks/setGlobalDevModeChecks.ts\nvar globalDevModeChecks = {\n inputStabilityCheck: \"once\",\n identityFunctionCheck: \"once\"\n};\nvar setGlobalDevModeChecks = (devModeChecks) => {\n Object.assign(globalDevModeChecks, devModeChecks);\n};\n\n// src/utils.ts\nvar NOT_FOUND = /* @__PURE__ */ Symbol(\"NOT_FOUND\");\nfunction assertIsFunction(func, errorMessage = `expected a function, instead received ${typeof func}`) {\n if (typeof func !== \"function\") {\n throw new TypeError(errorMessage);\n }\n}\nfunction assertIsObject(object, errorMessage = `expected an object, instead received ${typeof object}`) {\n if (typeof object !== \"object\") {\n throw new TypeError(errorMessage);\n }\n}\nfunction assertIsArrayOfFunctions(array, errorMessage = `expected all items to be functions, instead received the following types: `) {\n if (!array.every((item) => typeof item === \"function\")) {\n const itemTypes = array.map(\n (item) => typeof item === \"function\" ? `function ${item.name || \"unnamed\"}()` : typeof item\n ).join(\", \");\n throw new TypeError(`${errorMessage}[${itemTypes}]`);\n }\n}\nvar ensureIsArray = (item) => {\n return Array.isArray(item) ? item : [item];\n};\nfunction getDependencies(createSelectorArgs) {\n const dependencies = Array.isArray(createSelectorArgs[0]) ? createSelectorArgs[0] : createSelectorArgs;\n assertIsArrayOfFunctions(\n dependencies,\n `createSelector expects all input-selectors to be functions, but received the following types: `\n );\n return dependencies;\n}\nfunction collectInputSelectorResults(dependencies, inputSelectorArgs) {\n const inputSelectorResults = [];\n const { length } = dependencies;\n for (let i = 0; i < length; i++) {\n inputSelectorResults.push(dependencies[i].apply(null, inputSelectorArgs));\n }\n return inputSelectorResults;\n}\nvar getDevModeChecksExecutionInfo = (firstRun, devModeChecks) => {\n const { identityFunctionCheck, inputStabilityCheck } = {\n ...globalDevModeChecks,\n ...devModeChecks\n };\n return {\n identityFunctionCheck: {\n shouldRun: identityFunctionCheck === \"always\" || identityFunctionCheck === \"once\" && firstRun,\n run: runIdentityFunctionCheck\n },\n inputStabilityCheck: {\n shouldRun: inputStabilityCheck === \"always\" || inputStabilityCheck === \"once\" && firstRun,\n run: runInputStabilityCheck\n }\n };\n};\n\n// src/autotrackMemoize/autotracking.ts\nvar $REVISION = 0;\nvar CURRENT_TRACKER = null;\nvar Cell = class {\n revision = $REVISION;\n _value;\n _lastValue;\n _isEqual = tripleEq;\n constructor(initialValue, isEqual = tripleEq) {\n this._value = this._lastValue = initialValue;\n this._isEqual = isEqual;\n }\n // Whenever a storage value is read, it'll add itself to the current tracker if\n // one exists, entangling its state with that cache.\n get value() {\n CURRENT_TRACKER?.add(this);\n return this._value;\n }\n // Whenever a storage value is updated, we bump the global revision clock,\n // assign the revision for this storage to the new value, _and_ we schedule a\n // rerender. This is important, and it's what makes autotracking _pull_\n // based. We don't actively tell the caches which depend on the storage that\n // anything has happened. Instead, we recompute the caches when needed.\n set value(newValue) {\n if (this.value === newValue)\n return;\n this._value = newValue;\n this.revision = ++$REVISION;\n }\n};\nfunction tripleEq(a, b) {\n return a === b;\n}\nvar TrackingCache = class {\n _cachedValue;\n _cachedRevision = -1;\n _deps = [];\n hits = 0;\n fn;\n constructor(fn) {\n this.fn = fn;\n }\n clear() {\n this._cachedValue = void 0;\n this._cachedRevision = -1;\n this._deps = [];\n this.hits = 0;\n }\n get value() {\n if (this.revision > this._cachedRevision) {\n const { fn } = this;\n const currentTracker = /* @__PURE__ */ new Set();\n const prevTracker = CURRENT_TRACKER;\n CURRENT_TRACKER = currentTracker;\n this._cachedValue = fn();\n CURRENT_TRACKER = prevTracker;\n this.hits++;\n this._deps = Array.from(currentTracker);\n this._cachedRevision = this.revision;\n }\n CURRENT_TRACKER?.add(this);\n return this._cachedValue;\n }\n get revision() {\n return Math.max(...this._deps.map((d) => d.revision), 0);\n }\n};\nfunction getValue(cell) {\n if (!(cell instanceof Cell)) {\n console.warn(\"Not a valid cell! \", cell);\n }\n return cell.value;\n}\nfunction setValue(storage, value) {\n if (!(storage instanceof Cell)) {\n throw new TypeError(\n \"setValue must be passed a tracked store created with `createStorage`.\"\n );\n }\n storage.value = storage._lastValue = value;\n}\nfunction createCell(initialValue, isEqual = tripleEq) {\n return new Cell(initialValue, isEqual);\n}\nfunction createCache(fn) {\n assertIsFunction(\n fn,\n \"the first parameter to `createCache` must be a function\"\n );\n return new TrackingCache(fn);\n}\n\n// src/autotrackMemoize/tracking.ts\nvar neverEq = (a, b) => false;\nfunction createTag() {\n return createCell(null, neverEq);\n}\nfunction dirtyTag(tag, value) {\n setValue(tag, value);\n}\nvar consumeCollection = (node) => {\n let tag = node.collectionTag;\n if (tag === null) {\n tag = node.collectionTag = createTag();\n }\n getValue(tag);\n};\nvar dirtyCollection = (node) => {\n const tag = node.collectionTag;\n if (tag !== null) {\n dirtyTag(tag, null);\n }\n};\n\n// src/autotrackMemoize/proxy.ts\nvar REDUX_PROXY_LABEL = Symbol();\nvar nextId = 0;\nvar proto = Object.getPrototypeOf({});\nvar ObjectTreeNode = class {\n constructor(value) {\n this.value = value;\n this.value = value;\n this.tag.value = value;\n }\n proxy = new Proxy(this, objectProxyHandler);\n tag = createTag();\n tags = {};\n children = {};\n collectionTag = null;\n id = nextId++;\n};\nvar objectProxyHandler = {\n get(node, key) {\n function calculateResult() {\n const { value } = node;\n const childValue = Reflect.get(value, key);\n if (typeof key === \"symbol\") {\n return childValue;\n }\n if (key in proto) {\n return childValue;\n }\n if (typeof childValue === \"object\" && childValue !== null) {\n let childNode = node.children[key];\n if (childNode === void 0) {\n childNode = node.children[key] = createNode(childValue);\n }\n if (childNode.tag) {\n getValue(childNode.tag);\n }\n return childNode.proxy;\n } else {\n let tag = node.tags[key];\n if (tag === void 0) {\n tag = node.tags[key] = createTag();\n tag.value = childValue;\n }\n getValue(tag);\n return childValue;\n }\n }\n const res = calculateResult();\n return res;\n },\n ownKeys(node) {\n consumeCollection(node);\n return Reflect.ownKeys(node.value);\n },\n getOwnPropertyDescriptor(node, prop) {\n return Reflect.getOwnPropertyDescriptor(node.value, prop);\n },\n has(node, prop) {\n return Reflect.has(node.value, prop);\n }\n};\nvar ArrayTreeNode = class {\n constructor(value) {\n this.value = value;\n this.value = value;\n this.tag.value = value;\n }\n proxy = new Proxy([this], arrayProxyHandler);\n tag = createTag();\n tags = {};\n children = {};\n collectionTag = null;\n id = nextId++;\n};\nvar arrayProxyHandler = {\n get([node], key) {\n if (key === \"length\") {\n consumeCollection(node);\n }\n return objectProxyHandler.get(node, key);\n },\n ownKeys([node]) {\n return objectProxyHandler.ownKeys(node);\n },\n getOwnPropertyDescriptor([node], prop) {\n return objectProxyHandler.getOwnPropertyDescriptor(node, prop);\n },\n has([node], prop) {\n return objectProxyHandler.has(node, prop);\n }\n};\nfunction createNode(value) {\n if (Array.isArray(value)) {\n return new ArrayTreeNode(value);\n }\n return new ObjectTreeNode(value);\n}\nfunction updateNode(node, newValue) {\n const { value, tags, children } = node;\n node.value = newValue;\n if (Array.isArray(value) && Array.isArray(newValue) && value.length !== newValue.length) {\n dirtyCollection(node);\n } else {\n if (value !== newValue) {\n let oldKeysSize = 0;\n let newKeysSize = 0;\n let anyKeysAdded = false;\n for (const _key in value) {\n oldKeysSize++;\n }\n for (const key in newValue) {\n newKeysSize++;\n if (!(key in value)) {\n anyKeysAdded = true;\n break;\n }\n }\n const isDifferent = anyKeysAdded || oldKeysSize !== newKeysSize;\n if (isDifferent) {\n dirtyCollection(node);\n }\n }\n }\n for (const key in tags) {\n const childValue = value[key];\n const newChildValue = newValue[key];\n if (childValue !== newChildValue) {\n dirtyCollection(node);\n dirtyTag(tags[key], newChildValue);\n }\n if (typeof newChildValue === \"object\" && newChildValue !== null) {\n delete tags[key];\n }\n }\n for (const key in children) {\n const childNode = children[key];\n const newChildValue = newValue[key];\n const childValue = childNode.value;\n if (childValue === newChildValue) {\n continue;\n } else if (typeof newChildValue === \"object\" && newChildValue !== null) {\n updateNode(childNode, newChildValue);\n } else {\n deleteNode(childNode);\n delete children[key];\n }\n }\n}\nfunction deleteNode(node) {\n if (node.tag) {\n dirtyTag(node.tag, null);\n }\n dirtyCollection(node);\n for (const key in node.tags) {\n dirtyTag(node.tags[key], null);\n }\n for (const key in node.children) {\n deleteNode(node.children[key]);\n }\n}\n\n// src/lruMemoize.ts\nfunction createSingletonCache(equals) {\n let entry;\n return {\n get(key) {\n if (entry && equals(entry.key, key)) {\n return entry.value;\n }\n return NOT_FOUND;\n },\n put(key, value) {\n entry = { key, value };\n },\n getEntries() {\n return entry ? [entry] : [];\n },\n clear() {\n entry = void 0;\n }\n };\n}\nfunction createLruCache(maxSize, equals) {\n let entries = [];\n function get(key) {\n const cacheIndex = entries.findIndex((entry) => equals(key, entry.key));\n if (cacheIndex > -1) {\n const entry = entries[cacheIndex];\n if (cacheIndex > 0) {\n entries.splice(cacheIndex, 1);\n entries.unshift(entry);\n }\n return entry.value;\n }\n return NOT_FOUND;\n }\n function put(key, value) {\n if (get(key) === NOT_FOUND) {\n entries.unshift({ key, value });\n if (entries.length > maxSize) {\n entries.pop();\n }\n }\n }\n function getEntries() {\n return entries;\n }\n function clear() {\n entries = [];\n }\n return { get, put, getEntries, clear };\n}\nvar referenceEqualityCheck = (a, b) => a === b;\nfunction createCacheKeyComparator(equalityCheck) {\n return function areArgumentsShallowlyEqual(prev, next) {\n if (prev === null || next === null || prev.length !== next.length) {\n return false;\n }\n const { length } = prev;\n for (let i = 0; i < length; i++) {\n if (!equalityCheck(prev[i], next[i])) {\n return false;\n }\n }\n return true;\n };\n}\nfunction lruMemoize(func, equalityCheckOrOptions) {\n const providedOptions = typeof equalityCheckOrOptions === \"object\" ? equalityCheckOrOptions : { equalityCheck: equalityCheckOrOptions };\n const {\n equalityCheck = referenceEqualityCheck,\n maxSize = 1,\n resultEqualityCheck\n } = providedOptions;\n const comparator = createCacheKeyComparator(equalityCheck);\n let resultsCount = 0;\n const cache = maxSize <= 1 ? createSingletonCache(comparator) : createLruCache(maxSize, comparator);\n function memoized() {\n let value = cache.get(arguments);\n if (value === NOT_FOUND) {\n value = func.apply(null, arguments);\n resultsCount++;\n if (resultEqualityCheck) {\n const entries = cache.getEntries();\n const matchingEntry = entries.find(\n (entry) => resultEqualityCheck(entry.value, value)\n );\n if (matchingEntry) {\n value = matchingEntry.value;\n resultsCount !== 0 && resultsCount--;\n }\n }\n cache.put(arguments, value);\n }\n return value;\n }\n memoized.clearCache = () => {\n cache.clear();\n memoized.resetResultsCount();\n };\n memoized.resultsCount = () => resultsCount;\n memoized.resetResultsCount = () => {\n resultsCount = 0;\n };\n return memoized;\n}\n\n// src/autotrackMemoize/autotrackMemoize.ts\nfunction autotrackMemoize(func) {\n const node = createNode(\n []\n );\n let lastArgs = null;\n const shallowEqual = createCacheKeyComparator(referenceEqualityCheck);\n const cache = createCache(() => {\n const res = func.apply(null, node.proxy);\n return res;\n });\n function memoized() {\n if (!shallowEqual(lastArgs, arguments)) {\n updateNode(node, arguments);\n lastArgs = arguments;\n }\n return cache.value;\n }\n memoized.clearCache = () => {\n return cache.clear();\n };\n return memoized;\n}\n\n// src/weakMapMemoize.ts\nvar StrongRef = class {\n constructor(value) {\n this.value = value;\n }\n deref() {\n return this.value;\n }\n};\nvar Ref = typeof WeakRef !== \"undefined\" ? WeakRef : StrongRef;\nvar UNTERMINATED = 0;\nvar TERMINATED = 1;\nfunction createCacheNode() {\n return {\n s: UNTERMINATED,\n v: void 0,\n o: null,\n p: null\n };\n}\nfunction weakMapMemoize(func, options = {}) {\n let fnNode = createCacheNode();\n const { resultEqualityCheck } = options;\n let lastResult;\n let resultsCount = 0;\n function memoized() {\n let cacheNode = fnNode;\n const { length } = arguments;\n for (let i = 0, l = length; i < l; i++) {\n const arg = arguments[i];\n if (typeof arg === \"function\" || typeof arg === \"object\" && arg !== null) {\n let objectCache = cacheNode.o;\n if (objectCache === null) {\n cacheNode.o = objectCache = /* @__PURE__ */ new WeakMap();\n }\n const objectNode = objectCache.get(arg);\n if (objectNode === void 0) {\n cacheNode = createCacheNode();\n objectCache.set(arg, cacheNode);\n } else {\n cacheNode = objectNode;\n }\n } else {\n let primitiveCache = cacheNode.p;\n if (primitiveCache === null) {\n cacheNode.p = primitiveCache = /* @__PURE__ */ new Map();\n }\n const primitiveNode = primitiveCache.get(arg);\n if (primitiveNode === void 0) {\n cacheNode = createCacheNode();\n primitiveCache.set(arg, cacheNode);\n } else {\n cacheNode = primitiveNode;\n }\n }\n }\n const terminatedNode = cacheNode;\n let result;\n if (cacheNode.s === TERMINATED) {\n result = cacheNode.v;\n } else {\n result = func.apply(null, arguments);\n resultsCount++;\n if (resultEqualityCheck) {\n const lastResultValue = lastResult?.deref?.() ?? lastResult;\n if (lastResultValue != null && resultEqualityCheck(lastResultValue, result)) {\n result = lastResultValue;\n resultsCount !== 0 && resultsCount--;\n }\n const needsWeakRef = typeof result === \"object\" && result !== null || typeof result === \"function\";\n lastResult = needsWeakRef ? new Ref(result) : result;\n }\n }\n terminatedNode.s = TERMINATED;\n terminatedNode.v = result;\n return result;\n }\n memoized.clearCache = () => {\n fnNode = createCacheNode();\n memoized.resetResultsCount();\n };\n memoized.resultsCount = () => resultsCount;\n memoized.resetResultsCount = () => {\n resultsCount = 0;\n };\n return memoized;\n}\n\n// src/createSelectorCreator.ts\nfunction createSelectorCreator(memoizeOrOptions, ...memoizeOptionsFromArgs) {\n const createSelectorCreatorOptions = typeof memoizeOrOptions === \"function\" ? {\n memoize: memoizeOrOptions,\n memoizeOptions: memoizeOptionsFromArgs\n } : memoizeOrOptions;\n const createSelector2 = (...createSelectorArgs) => {\n let recomputations = 0;\n let dependencyRecomputations = 0;\n let lastResult;\n let directlyPassedOptions = {};\n let resultFunc = createSelectorArgs.pop();\n if (typeof resultFunc === \"object\") {\n directlyPassedOptions = resultFunc;\n resultFunc = createSelectorArgs.pop();\n }\n assertIsFunction(\n resultFunc,\n `createSelector expects an output function after the inputs, but received: [${typeof resultFunc}]`\n );\n const combinedOptions = {\n ...createSelectorCreatorOptions,\n ...directlyPassedOptions\n };\n const {\n memoize,\n memoizeOptions = [],\n argsMemoize = weakMapMemoize,\n argsMemoizeOptions = [],\n devModeChecks = {}\n } = combinedOptions;\n const finalMemoizeOptions = ensureIsArray(memoizeOptions);\n const finalArgsMemoizeOptions = ensureIsArray(argsMemoizeOptions);\n const dependencies = getDependencies(createSelectorArgs);\n const memoizedResultFunc = memoize(function recomputationWrapper() {\n recomputations++;\n return resultFunc.apply(\n null,\n arguments\n );\n }, ...finalMemoizeOptions);\n let firstRun = true;\n const selector = argsMemoize(function dependenciesChecker() {\n dependencyRecomputations++;\n const inputSelectorResults = collectInputSelectorResults(\n dependencies,\n arguments\n );\n lastResult = memoizedResultFunc.apply(null, inputSelectorResults);\n if (process.env.NODE_ENV !== \"production\") {\n const { identityFunctionCheck, inputStabilityCheck } = getDevModeChecksExecutionInfo(firstRun, devModeChecks);\n if (identityFunctionCheck.shouldRun) {\n identityFunctionCheck.run(\n resultFunc,\n inputSelectorResults,\n lastResult\n );\n }\n if (inputStabilityCheck.shouldRun) {\n const inputSelectorResultsCopy = collectInputSelectorResults(\n dependencies,\n arguments\n );\n inputStabilityCheck.run(\n { inputSelectorResults, inputSelectorResultsCopy },\n { memoize, memoizeOptions: finalMemoizeOptions },\n arguments\n );\n }\n if (firstRun)\n firstRun = false;\n }\n return lastResult;\n }, ...finalArgsMemoizeOptions);\n return Object.assign(selector, {\n resultFunc,\n memoizedResultFunc,\n dependencies,\n dependencyRecomputations: () => dependencyRecomputations,\n resetDependencyRecomputations: () => {\n dependencyRecomputations = 0;\n },\n lastResult: () => lastResult,\n recomputations: () => recomputations,\n resetRecomputations: () => {\n recomputations = 0;\n },\n memoize,\n argsMemoize\n });\n };\n Object.assign(createSelector2, {\n withTypes: () => createSelector2\n });\n return createSelector2;\n}\nvar createSelector = /* @__PURE__ */ createSelectorCreator(weakMapMemoize);\n\n// src/createStructuredSelector.ts\nvar createStructuredSelector = Object.assign(\n (inputSelectorsObject, selectorCreator = createSelector) => {\n assertIsObject(\n inputSelectorsObject,\n `createStructuredSelector expects first argument to be an object where each property is a selector, instead received a ${typeof inputSelectorsObject}`\n );\n const inputSelectorKeys = Object.keys(inputSelectorsObject);\n const dependencies = inputSelectorKeys.map(\n (key) => inputSelectorsObject[key]\n );\n const structuredSelector = selectorCreator(\n dependencies,\n (...inputSelectorResults) => {\n return inputSelectorResults.reduce((composition, value, index) => {\n composition[inputSelectorKeys[index]] = value;\n return composition;\n }, {});\n }\n );\n return structuredSelector;\n },\n { withTypes: () => createStructuredSelector }\n);\nexport {\n createSelector,\n createSelectorCreator,\n createStructuredSelector,\n lruMemoize,\n referenceEqualityCheck,\n setGlobalDevModeChecks,\n autotrackMemoize as unstable_autotrackMemoize,\n weakMapMemoize\n};\n//# sourceMappingURL=reselect.mjs.map","// src/index.ts\nfunction createThunkMiddleware(extraArgument) {\n const middleware = ({ dispatch, getState }) => (next) => (action) => {\n if (typeof action === \"function\") {\n return action(dispatch, getState, extraArgument);\n }\n return next(action);\n };\n return middleware;\n}\nvar thunk = createThunkMiddleware();\nvar withExtraArgument = createThunkMiddleware;\nexport {\n thunk,\n withExtraArgument\n};\n","// src/index.ts\nexport * from \"redux\";\nimport { produce, current as current3, freeze, original as original2, isDraft as isDraft5 } from \"immer\";\nimport { createSelector, createSelectorCreator as createSelectorCreator2, lruMemoize, weakMapMemoize as weakMapMemoize2 } from \"reselect\";\n\n// src/createDraftSafeSelector.ts\nimport { current, isDraft } from \"immer\";\nimport { createSelectorCreator, weakMapMemoize } from \"reselect\";\nvar createDraftSafeSelectorCreator = (...args) => {\n const createSelector2 = createSelectorCreator(...args);\n const createDraftSafeSelector2 = Object.assign((...args2) => {\n const selector = createSelector2(...args2);\n const wrappedSelector = (value, ...rest) => selector(isDraft(value) ? current(value) : value, ...rest);\n Object.assign(wrappedSelector, selector);\n return wrappedSelector;\n }, {\n withTypes: () => createDraftSafeSelector2\n });\n return createDraftSafeSelector2;\n};\nvar createDraftSafeSelector = /* @__PURE__ */ createDraftSafeSelectorCreator(weakMapMemoize);\n\n// src/configureStore.ts\nimport { applyMiddleware, createStore, compose as compose2, combineReducers, isPlainObject as isPlainObject2 } from \"redux\";\n\n// src/devtoolsExtension.ts\nimport { compose } from \"redux\";\nvar composeWithDevTools = typeof window !== \"undefined\" && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : function() {\n if (arguments.length === 0) return void 0;\n if (typeof arguments[0] === \"object\") return compose;\n return compose.apply(null, arguments);\n};\nvar devToolsEnhancer = typeof window !== \"undefined\" && window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__ : function() {\n return function(noop3) {\n return noop3;\n };\n};\n\n// src/getDefaultMiddleware.ts\nimport { thunk as thunkMiddleware, withExtraArgument } from \"redux-thunk\";\n\n// src/createAction.ts\nimport { isAction } from \"redux\";\n\n// src/tsHelpers.ts\nvar hasMatchFunction = (v) => {\n return v && typeof v.match === \"function\";\n};\n\n// src/createAction.ts\nfunction createAction(type, prepareAction) {\n function actionCreator(...args) {\n if (prepareAction) {\n let prepared = prepareAction(...args);\n if (!prepared) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(0) : \"prepareAction did not return an object\");\n }\n return {\n type,\n payload: prepared.payload,\n ...\"meta\" in prepared && {\n meta: prepared.meta\n },\n ...\"error\" in prepared && {\n error: prepared.error\n }\n };\n }\n return {\n type,\n payload: args[0]\n };\n }\n actionCreator.toString = () => `${type}`;\n actionCreator.type = type;\n actionCreator.match = (action) => isAction(action) && action.type === type;\n return actionCreator;\n}\nfunction isActionCreator(action) {\n return typeof action === \"function\" && \"type\" in action && // hasMatchFunction only wants Matchers but I don't see the point in rewriting it\n hasMatchFunction(action);\n}\nfunction isFSA(action) {\n return isAction(action) && Object.keys(action).every(isValidKey);\n}\nfunction isValidKey(key) {\n return [\"type\", \"payload\", \"error\", \"meta\"].indexOf(key) > -1;\n}\n\n// src/actionCreatorInvariantMiddleware.ts\nfunction getMessage(type) {\n const splitType = type ? `${type}`.split(\"/\") : [];\n const actionName = splitType[splitType.length - 1] || \"actionCreator\";\n return `Detected an action creator with type \"${type || \"unknown\"}\" being dispatched. \nMake sure you're calling the action creator before dispatching, i.e. \\`dispatch(${actionName}())\\` instead of \\`dispatch(${actionName})\\`. This is necessary even if the action has no payload.`;\n}\nfunction createActionCreatorInvariantMiddleware(options = {}) {\n if (process.env.NODE_ENV === \"production\") {\n return () => (next) => (action) => next(action);\n }\n const {\n isActionCreator: isActionCreator2 = isActionCreator\n } = options;\n return () => (next) => (action) => {\n if (isActionCreator2(action)) {\n console.warn(getMessage(action.type));\n }\n return next(action);\n };\n}\n\n// src/utils.ts\nimport { produce as createNextState, isDraftable } from \"immer\";\nfunction getTimeMeasureUtils(maxDelay, fnName) {\n let elapsed = 0;\n return {\n measureTime(fn) {\n const started = Date.now();\n try {\n return fn();\n } finally {\n const finished = Date.now();\n elapsed += finished - started;\n }\n },\n warnIfExceeded() {\n if (elapsed > maxDelay) {\n console.warn(`${fnName} took ${elapsed}ms, which is more than the warning threshold of ${maxDelay}ms. \nIf your state or actions are very large, you may want to disable the middleware as it might cause too much of a slowdown in development mode. See https://redux-toolkit.js.org/api/getDefaultMiddleware for instructions.\nIt is disabled in production builds, so you don't need to worry about that.`);\n }\n }\n };\n}\nvar Tuple = class _Tuple extends Array {\n constructor(...items) {\n super(...items);\n Object.setPrototypeOf(this, _Tuple.prototype);\n }\n static get [Symbol.species]() {\n return _Tuple;\n }\n concat(...arr) {\n return super.concat.apply(this, arr);\n }\n prepend(...arr) {\n if (arr.length === 1 && Array.isArray(arr[0])) {\n return new _Tuple(...arr[0].concat(this));\n }\n return new _Tuple(...arr.concat(this));\n }\n};\nfunction freezeDraftable(val) {\n return isDraftable(val) ? createNextState(val, () => {\n }) : val;\n}\nfunction getOrInsertComputed(map, key, compute) {\n if (map.has(key)) return map.get(key);\n return map.set(key, compute(key)).get(key);\n}\n\n// src/immutableStateInvariantMiddleware.ts\nfunction isImmutableDefault(value) {\n return typeof value !== \"object\" || value == null || Object.isFrozen(value);\n}\nfunction trackForMutations(isImmutable, ignorePaths, obj) {\n const trackedProperties = trackProperties(isImmutable, ignorePaths, obj);\n return {\n detectMutations() {\n return detectMutations(isImmutable, ignorePaths, trackedProperties, obj);\n }\n };\n}\nfunction trackProperties(isImmutable, ignorePaths = [], obj, path = \"\", checkedObjects = /* @__PURE__ */ new Set()) {\n const tracked = {\n value: obj\n };\n if (!isImmutable(obj) && !checkedObjects.has(obj)) {\n checkedObjects.add(obj);\n tracked.children = {};\n for (const key in obj) {\n const childPath = path ? path + \".\" + key : key;\n if (ignorePaths.length && ignorePaths.indexOf(childPath) !== -1) {\n continue;\n }\n tracked.children[key] = trackProperties(isImmutable, ignorePaths, obj[key], childPath);\n }\n }\n return tracked;\n}\nfunction detectMutations(isImmutable, ignoredPaths = [], trackedProperty, obj, sameParentRef = false, path = \"\") {\n const prevObj = trackedProperty ? trackedProperty.value : void 0;\n const sameRef = prevObj === obj;\n if (sameParentRef && !sameRef && !Number.isNaN(obj)) {\n return {\n wasMutated: true,\n path\n };\n }\n if (isImmutable(prevObj) || isImmutable(obj)) {\n return {\n wasMutated: false\n };\n }\n const keysToDetect = {};\n for (let key in trackedProperty.children) {\n keysToDetect[key] = true;\n }\n for (let key in obj) {\n keysToDetect[key] = true;\n }\n const hasIgnoredPaths = ignoredPaths.length > 0;\n for (let key in keysToDetect) {\n const nestedPath = path ? path + \".\" + key : key;\n if (hasIgnoredPaths) {\n const hasMatches = ignoredPaths.some((ignored) => {\n if (ignored instanceof RegExp) {\n return ignored.test(nestedPath);\n }\n return nestedPath === ignored;\n });\n if (hasMatches) {\n continue;\n }\n }\n const result = detectMutations(isImmutable, ignoredPaths, trackedProperty.children[key], obj[key], sameRef, nestedPath);\n if (result.wasMutated) {\n return result;\n }\n }\n return {\n wasMutated: false\n };\n}\nfunction createImmutableStateInvariantMiddleware(options = {}) {\n if (process.env.NODE_ENV === \"production\") {\n return () => (next) => (action) => next(action);\n } else {\n let stringify2 = function(obj, serializer, indent, decycler) {\n return JSON.stringify(obj, getSerialize2(serializer, decycler), indent);\n }, getSerialize2 = function(serializer, decycler) {\n let stack = [], keys = [];\n if (!decycler) decycler = function(_, value) {\n if (stack[0] === value) return \"[Circular ~]\";\n return \"[Circular ~.\" + keys.slice(0, stack.indexOf(value)).join(\".\") + \"]\";\n };\n return function(key, value) {\n if (stack.length > 0) {\n var thisPos = stack.indexOf(this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n if (~stack.indexOf(value)) value = decycler.call(this, key, value);\n } else stack.push(value);\n return serializer == null ? value : serializer.call(this, key, value);\n };\n };\n var stringify = stringify2, getSerialize = getSerialize2;\n let {\n isImmutable = isImmutableDefault,\n ignoredPaths,\n warnAfter = 32\n } = options;\n const track = trackForMutations.bind(null, isImmutable, ignoredPaths);\n return ({\n getState\n }) => {\n let state = getState();\n let tracker = track(state);\n let result;\n return (next) => (action) => {\n const measureUtils = getTimeMeasureUtils(warnAfter, \"ImmutableStateInvariantMiddleware\");\n measureUtils.measureTime(() => {\n state = getState();\n result = tracker.detectMutations();\n tracker = track(state);\n if (result.wasMutated) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(19) : `A state mutation was detected between dispatches, in the path '${result.path || \"\"}'. This may cause incorrect behavior. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`);\n }\n });\n const dispatchedAction = next(action);\n measureUtils.measureTime(() => {\n state = getState();\n result = tracker.detectMutations();\n tracker = track(state);\n if (result.wasMutated) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(20) : `A state mutation was detected inside a dispatch, in the path: ${result.path || \"\"}. Take a look at the reducer(s) handling the action ${stringify2(action)}. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`);\n }\n });\n measureUtils.warnIfExceeded();\n return dispatchedAction;\n };\n };\n }\n}\n\n// src/serializableStateInvariantMiddleware.ts\nimport { isAction as isAction2, isPlainObject } from \"redux\";\nfunction isPlain(val) {\n const type = typeof val;\n return val == null || type === \"string\" || type === \"boolean\" || type === \"number\" || Array.isArray(val) || isPlainObject(val);\n}\nfunction findNonSerializableValue(value, path = \"\", isSerializable = isPlain, getEntries, ignoredPaths = [], cache) {\n let foundNestedSerializable;\n if (!isSerializable(value)) {\n return {\n keyPath: path || \"<root>\",\n value\n };\n }\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n if (cache?.has(value)) return false;\n const entries = getEntries != null ? getEntries(value) : Object.entries(value);\n const hasIgnoredPaths = ignoredPaths.length > 0;\n for (const [key, nestedValue] of entries) {\n const nestedPath = path ? path + \".\" + key : key;\n if (hasIgnoredPaths) {\n const hasMatches = ignoredPaths.some((ignored) => {\n if (ignored instanceof RegExp) {\n return ignored.test(nestedPath);\n }\n return nestedPath === ignored;\n });\n if (hasMatches) {\n continue;\n }\n }\n if (!isSerializable(nestedValue)) {\n return {\n keyPath: nestedPath,\n value: nestedValue\n };\n }\n if (typeof nestedValue === \"object\") {\n foundNestedSerializable = findNonSerializableValue(nestedValue, nestedPath, isSerializable, getEntries, ignoredPaths, cache);\n if (foundNestedSerializable) {\n return foundNestedSerializable;\n }\n }\n }\n if (cache && isNestedFrozen(value)) cache.add(value);\n return false;\n}\nfunction isNestedFrozen(value) {\n if (!Object.isFrozen(value)) return false;\n for (const nestedValue of Object.values(value)) {\n if (typeof nestedValue !== \"object\" || nestedValue === null) continue;\n if (!isNestedFrozen(nestedValue)) return false;\n }\n return true;\n}\nfunction createSerializableStateInvariantMiddleware(options = {}) {\n if (process.env.NODE_ENV === \"production\") {\n return () => (next) => (action) => next(action);\n } else {\n const {\n isSerializable = isPlain,\n getEntries,\n ignoredActions = [],\n ignoredActionPaths = [\"meta.arg\", \"meta.baseQueryMeta\"],\n ignoredPaths = [],\n warnAfter = 32,\n ignoreState = false,\n ignoreActions = false,\n disableCache = false\n } = options;\n const cache = !disableCache && WeakSet ? /* @__PURE__ */ new WeakSet() : void 0;\n return (storeAPI) => (next) => (action) => {\n if (!isAction2(action)) {\n return next(action);\n }\n const result = next(action);\n const measureUtils = getTimeMeasureUtils(warnAfter, \"SerializableStateInvariantMiddleware\");\n if (!ignoreActions && !(ignoredActions.length && ignoredActions.indexOf(action.type) !== -1)) {\n measureUtils.measureTime(() => {\n const foundActionNonSerializableValue = findNonSerializableValue(action, \"\", isSerializable, getEntries, ignoredActionPaths, cache);\n if (foundActionNonSerializableValue) {\n const {\n keyPath,\n value\n } = foundActionNonSerializableValue;\n console.error(`A non-serializable value was detected in an action, in the path: \\`${keyPath}\\`. Value:`, value, \"\\nTake a look at the logic that dispatched this action: \", action, \"\\n(See https://redux.js.org/faq/actions#why-should-type-be-a-string-or-at-least-serializable-why-should-my-action-types-be-constants)\", \"\\n(To allow non-serializable values see: https://redux-toolkit.js.org/usage/usage-guide#working-with-non-serializable-data)\");\n }\n });\n }\n if (!ignoreState) {\n measureUtils.measureTime(() => {\n const state = storeAPI.getState();\n const foundStateNonSerializableValue = findNonSerializableValue(state, \"\", isSerializable, getEntries, ignoredPaths, cache);\n if (foundStateNonSerializableValue) {\n const {\n keyPath,\n value\n } = foundStateNonSerializableValue;\n console.error(`A non-serializable value was detected in the state, in the path: \\`${keyPath}\\`. Value:`, value, `\nTake a look at the reducer(s) handling this action type: ${action.type}.\n(See https://redux.js.org/faq/organizing-state#can-i-put-functions-promises-or-other-non-serializable-items-in-my-store-state)`);\n }\n });\n measureUtils.warnIfExceeded();\n }\n return result;\n };\n }\n}\n\n// src/getDefaultMiddleware.ts\nfunction isBoolean(x) {\n return typeof x === \"boolean\";\n}\nvar buildGetDefaultMiddleware = () => function getDefaultMiddleware(options) {\n const {\n thunk = true,\n immutableCheck = true,\n serializableCheck = true,\n actionCreatorCheck = true\n } = options ?? {};\n let middlewareArray = new Tuple();\n if (thunk) {\n if (isBoolean(thunk)) {\n middlewareArray.push(thunkMiddleware);\n } else {\n middlewareArray.push(withExtraArgument(thunk.extraArgument));\n }\n }\n if (process.env.NODE_ENV !== \"production\") {\n if (immutableCheck) {\n let immutableOptions = {};\n if (!isBoolean(immutableCheck)) {\n immutableOptions = immutableCheck;\n }\n middlewareArray.unshift(createImmutableStateInvariantMiddleware(immutableOptions));\n }\n if (serializableCheck) {\n let serializableOptions = {};\n if (!isBoolean(serializableCheck)) {\n serializableOptions = serializableCheck;\n }\n middlewareArray.push(createSerializableStateInvariantMiddleware(serializableOptions));\n }\n if (actionCreatorCheck) {\n let actionCreatorOptions = {};\n if (!isBoolean(actionCreatorCheck)) {\n actionCreatorOptions = actionCreatorCheck;\n }\n middlewareArray.unshift(createActionCreatorInvariantMiddleware(actionCreatorOptions));\n }\n }\n return middlewareArray;\n};\n\n// src/autoBatchEnhancer.ts\nvar SHOULD_AUTOBATCH = \"RTK_autoBatch\";\nvar prepareAutoBatched = () => (payload) => ({\n payload,\n meta: {\n [SHOULD_AUTOBATCH]: true\n }\n});\nvar createQueueWithTimer = (timeout) => {\n return (notify) => {\n setTimeout(notify, timeout);\n };\n};\nvar autoBatchEnhancer = (options = {\n type: \"raf\"\n}) => (next) => (...args) => {\n const store = next(...args);\n let notifying = true;\n let shouldNotifyAtEndOfTick = false;\n let notificationQueued = false;\n const listeners = /* @__PURE__ */ new Set();\n const queueCallback = options.type === \"tick\" ? queueMicrotask : options.type === \"raf\" ? (\n // requestAnimationFrame won't exist in SSR environments. Fall back to a vague approximation just to keep from erroring.\n typeof window !== \"undefined\" && window.requestAnimationFrame ? window.requestAnimationFrame : createQueueWithTimer(10)\n ) : options.type === \"callback\" ? options.queueNotification : createQueueWithTimer(options.timeout);\n const notifyListeners = () => {\n notificationQueued = false;\n if (shouldNotifyAtEndOfTick) {\n shouldNotifyAtEndOfTick = false;\n listeners.forEach((l) => l());\n }\n };\n return Object.assign({}, store, {\n // Override the base `store.subscribe` method to keep original listeners\n // from running if we're delaying notifications\n subscribe(listener2) {\n const wrappedListener = () => notifying && listener2();\n const unsubscribe = store.subscribe(wrappedListener);\n listeners.add(listener2);\n return () => {\n unsubscribe();\n listeners.delete(listener2);\n };\n },\n // Override the base `store.dispatch` method so that we can check actions\n // for the `shouldAutoBatch` flag and determine if batching is active\n dispatch(action) {\n try {\n notifying = !action?.meta?.[SHOULD_AUTOBATCH];\n shouldNotifyAtEndOfTick = !notifying;\n if (shouldNotifyAtEndOfTick) {\n if (!notificationQueued) {\n notificationQueued = true;\n queueCallback(notifyListeners);\n }\n }\n return store.dispatch(action);\n } finally {\n notifying = true;\n }\n }\n });\n};\n\n// src/getDefaultEnhancers.ts\nvar buildGetDefaultEnhancers = (middlewareEnhancer) => function getDefaultEnhancers(options) {\n const {\n autoBatch = true\n } = options ?? {};\n let enhancerArray = new Tuple(middlewareEnhancer);\n if (autoBatch) {\n enhancerArray.push(autoBatchEnhancer(typeof autoBatch === \"object\" ? autoBatch : void 0));\n }\n return enhancerArray;\n};\n\n// src/configureStore.ts\nfunction configureStore(options) {\n const getDefaultMiddleware = buildGetDefaultMiddleware();\n const {\n reducer = void 0,\n middleware,\n devTools = true,\n preloadedState = void 0,\n enhancers = void 0\n } = options || {};\n let rootReducer;\n if (typeof reducer === \"function\") {\n rootReducer = reducer;\n } else if (isPlainObject2(reducer)) {\n rootReducer = combineReducers(reducer);\n } else {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(1) : \"`reducer` is a required argument, and must be a function or an object of functions that can be passed to combineReducers\");\n }\n if (process.env.NODE_ENV !== \"production\" && middleware && typeof middleware !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(2) : \"`middleware` field must be a callback\");\n }\n let finalMiddleware;\n if (typeof middleware === \"function\") {\n finalMiddleware = middleware(getDefaultMiddleware);\n if (process.env.NODE_ENV !== \"production\" && !Array.isArray(finalMiddleware)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(3) : \"when using a middleware builder function, an array of middleware must be returned\");\n }\n } else {\n finalMiddleware = getDefaultMiddleware();\n }\n if (process.env.NODE_ENV !== \"production\" && finalMiddleware.some((item) => typeof item !== \"function\")) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(4) : \"each middleware provided to configureStore must be a function\");\n }\n let finalCompose = compose2;\n if (devTools) {\n finalCompose = composeWithDevTools({\n // Enable capture of stack traces for dispatched Redux actions\n trace: process.env.NODE_ENV !== \"production\",\n ...typeof devTools === \"object\" && devTools\n });\n }\n const middlewareEnhancer = applyMiddleware(...finalMiddleware);\n const getDefaultEnhancers = buildGetDefaultEnhancers(middlewareEnhancer);\n if (process.env.NODE_ENV !== \"production\" && enhancers && typeof enhancers !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(5) : \"`enhancers` field must be a callback\");\n }\n let storeEnhancers = typeof enhancers === \"function\" ? enhancers(getDefaultEnhancers) : getDefaultEnhancers();\n if (process.env.NODE_ENV !== \"production\" && !Array.isArray(storeEnhancers)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(6) : \"`enhancers` callback must return an array\");\n }\n if (process.env.NODE_ENV !== \"production\" && storeEnhancers.some((item) => typeof item !== \"function\")) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(7) : \"each enhancer provided to configureStore must be a function\");\n }\n if (process.env.NODE_ENV !== \"production\" && finalMiddleware.length && !storeEnhancers.includes(middlewareEnhancer)) {\n console.error(\"middlewares were provided, but middleware enhancer was not included in final enhancers - make sure to call `getDefaultEnhancers`\");\n }\n const composedEnhancer = finalCompose(...storeEnhancers);\n return createStore(rootReducer, preloadedState, composedEnhancer);\n}\n\n// src/createReducer.ts\nimport { produce as createNextState2, isDraft as isDraft2, isDraftable as isDraftable2 } from \"immer\";\n\n// src/mapBuilders.ts\nfunction executeReducerBuilderCallback(builderCallback) {\n const actionsMap = {};\n const actionMatchers = [];\n let defaultCaseReducer;\n const builder = {\n addCase(typeOrActionCreator, reducer) {\n if (process.env.NODE_ENV !== \"production\") {\n if (actionMatchers.length > 0) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(26) : \"`builder.addCase` should only be called before calling `builder.addMatcher`\");\n }\n if (defaultCaseReducer) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(27) : \"`builder.addCase` should only be called before calling `builder.addDefaultCase`\");\n }\n }\n const type = typeof typeOrActionCreator === \"string\" ? typeOrActionCreator : typeOrActionCreator.type;\n if (!type) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(28) : \"`builder.addCase` cannot be called with an empty action type\");\n }\n if (type in actionsMap) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(29) : `\\`builder.addCase\\` cannot be called with two reducers for the same action type '${type}'`);\n }\n actionsMap[type] = reducer;\n return builder;\n },\n addMatcher(matcher, reducer) {\n if (process.env.NODE_ENV !== \"production\") {\n if (defaultCaseReducer) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(30) : \"`builder.addMatcher` should only be called before calling `builder.addDefaultCase`\");\n }\n }\n actionMatchers.push({\n matcher,\n reducer\n });\n return builder;\n },\n addDefaultCase(reducer) {\n if (process.env.NODE_ENV !== \"production\") {\n if (defaultCaseReducer) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(31) : \"`builder.addDefaultCase` can only be called once\");\n }\n }\n defaultCaseReducer = reducer;\n return builder;\n }\n };\n builderCallback(builder);\n return [actionsMap, actionMatchers, defaultCaseReducer];\n}\n\n// src/createReducer.ts\nfunction isStateFunction(x) {\n return typeof x === \"function\";\n}\nfunction createReducer(initialState, mapOrBuilderCallback) {\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof mapOrBuilderCallback === \"object\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(8) : \"The object notation for `createReducer` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createReducer\");\n }\n }\n let [actionsMap, finalActionMatchers, finalDefaultCaseReducer] = executeReducerBuilderCallback(mapOrBuilderCallback);\n let getInitialState;\n if (isStateFunction(initialState)) {\n getInitialState = () => freezeDraftable(initialState());\n } else {\n const frozenInitialState = freezeDraftable(initialState);\n getInitialState = () => frozenInitialState;\n }\n function reducer(state = getInitialState(), action) {\n let caseReducers = [actionsMap[action.type], ...finalActionMatchers.filter(({\n matcher\n }) => matcher(action)).map(({\n reducer: reducer2\n }) => reducer2)];\n if (caseReducers.filter((cr) => !!cr).length === 0) {\n caseReducers = [finalDefaultCaseReducer];\n }\n return caseReducers.reduce((previousState, caseReducer) => {\n if (caseReducer) {\n if (isDraft2(previousState)) {\n const draft = previousState;\n const result = caseReducer(draft, action);\n if (result === void 0) {\n return previousState;\n }\n return result;\n } else if (!isDraftable2(previousState)) {\n const result = caseReducer(previousState, action);\n if (result === void 0) {\n if (previousState === null) {\n return previousState;\n }\n throw Error(\"A case reducer on a non-draftable value must not return undefined\");\n }\n return result;\n } else {\n return createNextState2(previousState, (draft) => {\n return caseReducer(draft, action);\n });\n }\n }\n return previousState;\n }, state);\n }\n reducer.getInitialState = getInitialState;\n return reducer;\n}\n\n// src/matchers.ts\nvar matches = (matcher, action) => {\n if (hasMatchFunction(matcher)) {\n return matcher.match(action);\n } else {\n return matcher(action);\n }\n};\nfunction isAnyOf(...matchers) {\n return (action) => {\n return matchers.some((matcher) => matches(matcher, action));\n };\n}\nfunction isAllOf(...matchers) {\n return (action) => {\n return matchers.every((matcher) => matches(matcher, action));\n };\n}\nfunction hasExpectedRequestMetadata(action, validStatus) {\n if (!action || !action.meta) return false;\n const hasValidRequestId = typeof action.meta.requestId === \"string\";\n const hasValidRequestStatus = validStatus.indexOf(action.meta.requestStatus) > -1;\n return hasValidRequestId && hasValidRequestStatus;\n}\nfunction isAsyncThunkArray(a) {\n return typeof a[0] === \"function\" && \"pending\" in a[0] && \"fulfilled\" in a[0] && \"rejected\" in a[0];\n}\nfunction isPending(...asyncThunks) {\n if (asyncThunks.length === 0) {\n return (action) => hasExpectedRequestMetadata(action, [\"pending\"]);\n }\n if (!isAsyncThunkArray(asyncThunks)) {\n return isPending()(asyncThunks[0]);\n }\n return isAnyOf(...asyncThunks.map((asyncThunk) => asyncThunk.pending));\n}\nfunction isRejected(...asyncThunks) {\n if (asyncThunks.length === 0) {\n return (action) => hasExpectedRequestMetadata(action, [\"rejected\"]);\n }\n if (!isAsyncThunkArray(asyncThunks)) {\n return isRejected()(asyncThunks[0]);\n }\n return isAnyOf(...asyncThunks.map((asyncThunk) => asyncThunk.rejected));\n}\nfunction isRejectedWithValue(...asyncThunks) {\n const hasFlag = (action) => {\n return action && action.meta && action.meta.rejectedWithValue;\n };\n if (asyncThunks.length === 0) {\n return isAllOf(isRejected(...asyncThunks), hasFlag);\n }\n if (!isAsyncThunkArray(asyncThunks)) {\n return isRejectedWithValue()(asyncThunks[0]);\n }\n return isAllOf(isRejected(...asyncThunks), hasFlag);\n}\nfunction isFulfilled(...asyncThunks) {\n if (asyncThunks.length === 0) {\n return (action) => hasExpectedRequestMetadata(action, [\"fulfilled\"]);\n }\n if (!isAsyncThunkArray(asyncThunks)) {\n return isFulfilled()(asyncThunks[0]);\n }\n return isAnyOf(...asyncThunks.map((asyncThunk) => asyncThunk.fulfilled));\n}\nfunction isAsyncThunkAction(...asyncThunks) {\n if (asyncThunks.length === 0) {\n return (action) => hasExpectedRequestMetadata(action, [\"pending\", \"fulfilled\", \"rejected\"]);\n }\n if (!isAsyncThunkArray(asyncThunks)) {\n return isAsyncThunkAction()(asyncThunks[0]);\n }\n return isAnyOf(...asyncThunks.flatMap((asyncThunk) => [asyncThunk.pending, asyncThunk.rejected, asyncThunk.fulfilled]));\n}\n\n// src/nanoid.ts\nvar urlAlphabet = \"ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW\";\nvar nanoid = (size = 21) => {\n let id = \"\";\n let i = size;\n while (i--) {\n id += urlAlphabet[Math.random() * 64 | 0];\n }\n return id;\n};\n\n// src/createAsyncThunk.ts\nvar commonProperties = [\"name\", \"message\", \"stack\", \"code\"];\nvar RejectWithValue = class {\n constructor(payload, meta) {\n this.payload = payload;\n this.meta = meta;\n }\n /*\n type-only property to distinguish between RejectWithValue and FulfillWithMeta\n does not exist at runtime\n */\n _type;\n};\nvar FulfillWithMeta = class {\n constructor(payload, meta) {\n this.payload = payload;\n this.meta = meta;\n }\n /*\n type-only property to distinguish between RejectWithValue and FulfillWithMeta\n does not exist at runtime\n */\n _type;\n};\nvar miniSerializeError = (value) => {\n if (typeof value === \"object\" && value !== null) {\n const simpleError = {};\n for (const property of commonProperties) {\n if (typeof value[property] === \"string\") {\n simpleError[property] = value[property];\n }\n }\n return simpleError;\n }\n return {\n message: String(value)\n };\n};\nvar externalAbortMessage = \"External signal was aborted\";\nvar createAsyncThunk = /* @__PURE__ */ (() => {\n function createAsyncThunk2(typePrefix, payloadCreator, options) {\n const fulfilled = createAction(typePrefix + \"/fulfilled\", (payload, requestId, arg, meta) => ({\n payload,\n meta: {\n ...meta || {},\n arg,\n requestId,\n requestStatus: \"fulfilled\"\n }\n }));\n const pending = createAction(typePrefix + \"/pending\", (requestId, arg, meta) => ({\n payload: void 0,\n meta: {\n ...meta || {},\n arg,\n requestId,\n requestStatus: \"pending\"\n }\n }));\n const rejected = createAction(typePrefix + \"/rejected\", (error, requestId, arg, payload, meta) => ({\n payload,\n error: (options && options.serializeError || miniSerializeError)(error || \"Rejected\"),\n meta: {\n ...meta || {},\n arg,\n requestId,\n rejectedWithValue: !!payload,\n requestStatus: \"rejected\",\n aborted: error?.name === \"AbortError\",\n condition: error?.name === \"ConditionError\"\n }\n }));\n function actionCreator(arg, {\n signal\n } = {}) {\n return (dispatch, getState, extra) => {\n const requestId = options?.idGenerator ? options.idGenerator(arg) : nanoid();\n const abortController = new AbortController();\n let abortHandler;\n let abortReason;\n function abort(reason) {\n abortReason = reason;\n abortController.abort();\n }\n if (signal) {\n if (signal.aborted) {\n abort(externalAbortMessage);\n } else {\n signal.addEventListener(\"abort\", () => abort(externalAbortMessage), {\n once: true\n });\n }\n }\n const promise = async function() {\n let finalAction;\n try {\n let conditionResult = options?.condition?.(arg, {\n getState,\n extra\n });\n if (isThenable(conditionResult)) {\n conditionResult = await conditionResult;\n }\n if (conditionResult === false || abortController.signal.aborted) {\n throw {\n name: \"ConditionError\",\n message: \"Aborted due to condition callback returning false.\"\n };\n }\n const abortedPromise = new Promise((_, reject) => {\n abortHandler = () => {\n reject({\n name: \"AbortError\",\n message: abortReason || \"Aborted\"\n });\n };\n abortController.signal.addEventListener(\"abort\", abortHandler);\n });\n dispatch(pending(requestId, arg, options?.getPendingMeta?.({\n requestId,\n arg\n }, {\n getState,\n extra\n })));\n finalAction = await Promise.race([abortedPromise, Promise.resolve(payloadCreator(arg, {\n dispatch,\n getState,\n extra,\n requestId,\n signal: abortController.signal,\n abort,\n rejectWithValue: (value, meta) => {\n return new RejectWithValue(value, meta);\n },\n fulfillWithValue: (value, meta) => {\n return new FulfillWithMeta(value, meta);\n }\n })).then((result) => {\n if (result instanceof RejectWithValue) {\n throw result;\n }\n if (result instanceof FulfillWithMeta) {\n return fulfilled(result.payload, requestId, arg, result.meta);\n }\n return fulfilled(result, requestId, arg);\n })]);\n } catch (err) {\n finalAction = err instanceof RejectWithValue ? rejected(null, requestId, arg, err.payload, err.meta) : rejected(err, requestId, arg);\n } finally {\n if (abortHandler) {\n abortController.signal.removeEventListener(\"abort\", abortHandler);\n }\n }\n const skipDispatch = options && !options.dispatchConditionRejection && rejected.match(finalAction) && finalAction.meta.condition;\n if (!skipDispatch) {\n dispatch(finalAction);\n }\n return finalAction;\n }();\n return Object.assign(promise, {\n abort,\n requestId,\n arg,\n unwrap() {\n return promise.then(unwrapResult);\n }\n });\n };\n }\n return Object.assign(actionCreator, {\n pending,\n rejected,\n fulfilled,\n settled: isAnyOf(rejected, fulfilled),\n typePrefix\n });\n }\n createAsyncThunk2.withTypes = () => createAsyncThunk2;\n return createAsyncThunk2;\n})();\nfunction unwrapResult(action) {\n if (action.meta && action.meta.rejectedWithValue) {\n throw action.payload;\n }\n if (action.error) {\n throw action.error;\n }\n return action.payload;\n}\nfunction isThenable(value) {\n return value !== null && typeof value === \"object\" && typeof value.then === \"function\";\n}\n\n// src/createSlice.ts\nvar asyncThunkSymbol = /* @__PURE__ */ Symbol.for(\"rtk-slice-createasyncthunk\");\nvar asyncThunkCreator = {\n [asyncThunkSymbol]: createAsyncThunk\n};\nvar ReducerType = /* @__PURE__ */ ((ReducerType2) => {\n ReducerType2[\"reducer\"] = \"reducer\";\n ReducerType2[\"reducerWithPrepare\"] = \"reducerWithPrepare\";\n ReducerType2[\"asyncThunk\"] = \"asyncThunk\";\n return ReducerType2;\n})(ReducerType || {});\nfunction getType(slice, actionKey) {\n return `${slice}/${actionKey}`;\n}\nfunction buildCreateSlice({\n creators\n} = {}) {\n const cAT = creators?.asyncThunk?.[asyncThunkSymbol];\n return function createSlice2(options) {\n const {\n name,\n reducerPath = name\n } = options;\n if (!name) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(11) : \"`name` is a required option for createSlice\");\n }\n if (typeof process !== \"undefined\" && process.env.NODE_ENV === \"development\") {\n if (options.initialState === void 0) {\n console.error(\"You must provide an `initialState` value that is not `undefined`. You may have misspelled `initialState`\");\n }\n }\n const reducers = (typeof options.reducers === \"function\" ? options.reducers(buildReducerCreators()) : options.reducers) || {};\n const reducerNames = Object.keys(reducers);\n const context = {\n sliceCaseReducersByName: {},\n sliceCaseReducersByType: {},\n actionCreators: {},\n sliceMatchers: []\n };\n const contextMethods = {\n addCase(typeOrActionCreator, reducer2) {\n const type = typeof typeOrActionCreator === \"string\" ? typeOrActionCreator : typeOrActionCreator.type;\n if (!type) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(12) : \"`context.addCase` cannot be called with an empty action type\");\n }\n if (type in context.sliceCaseReducersByType) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(13) : \"`context.addCase` cannot be called with two reducers for the same action type: \" + type);\n }\n context.sliceCaseReducersByType[type] = reducer2;\n return contextMethods;\n },\n addMatcher(matcher, reducer2) {\n context.sliceMatchers.push({\n matcher,\n reducer: reducer2\n });\n return contextMethods;\n },\n exposeAction(name2, actionCreator) {\n context.actionCreators[name2] = actionCreator;\n return contextMethods;\n },\n exposeCaseReducer(name2, reducer2) {\n context.sliceCaseReducersByName[name2] = reducer2;\n return contextMethods;\n }\n };\n reducerNames.forEach((reducerName) => {\n const reducerDefinition = reducers[reducerName];\n const reducerDetails = {\n reducerName,\n type: getType(name, reducerName),\n createNotation: typeof options.reducers === \"function\"\n };\n if (isAsyncThunkSliceReducerDefinition(reducerDefinition)) {\n handleThunkCaseReducerDefinition(reducerDetails, reducerDefinition, contextMethods, cAT);\n } else {\n handleNormalReducerDefinition(reducerDetails, reducerDefinition, contextMethods);\n }\n });\n function buildReducer() {\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof options.extraReducers === \"object\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(14) : \"The object notation for `createSlice.extraReducers` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createSlice\");\n }\n }\n const [extraReducers = {}, actionMatchers = [], defaultCaseReducer = void 0] = typeof options.extraReducers === \"function\" ? executeReducerBuilderCallback(options.extraReducers) : [options.extraReducers];\n const finalCaseReducers = {\n ...extraReducers,\n ...context.sliceCaseReducersByType\n };\n return createReducer(options.initialState, (builder) => {\n for (let key in finalCaseReducers) {\n builder.addCase(key, finalCaseReducers[key]);\n }\n for (let sM of context.sliceMatchers) {\n builder.addMatcher(sM.matcher, sM.reducer);\n }\n for (let m of actionMatchers) {\n builder.addMatcher(m.matcher, m.reducer);\n }\n if (defaultCaseReducer) {\n builder.addDefaultCase(defaultCaseReducer);\n }\n });\n }\n const selectSelf = (state) => state;\n const injectedSelectorCache = /* @__PURE__ */ new Map();\n let _reducer;\n function reducer(state, action) {\n if (!_reducer) _reducer = buildReducer();\n return _reducer(state, action);\n }\n function getInitialState() {\n if (!_reducer) _reducer = buildReducer();\n return _reducer.getInitialState();\n }\n function makeSelectorProps(reducerPath2, injected = false) {\n function selectSlice(state) {\n let sliceState = state[reducerPath2];\n if (typeof sliceState === \"undefined\") {\n if (injected) {\n sliceState = getInitialState();\n } else if (process.env.NODE_ENV !== \"production\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(15) : \"selectSlice returned undefined for an uninjected slice reducer\");\n }\n }\n return sliceState;\n }\n function getSelectors(selectState = selectSelf) {\n const selectorCache = getOrInsertComputed(injectedSelectorCache, injected, () => /* @__PURE__ */ new WeakMap());\n return getOrInsertComputed(selectorCache, selectState, () => {\n const map = {};\n for (const [name2, selector] of Object.entries(options.selectors ?? {})) {\n map[name2] = wrapSelector(selector, selectState, getInitialState, injected);\n }\n return map;\n });\n }\n return {\n reducerPath: reducerPath2,\n getSelectors,\n get selectors() {\n return getSelectors(selectSlice);\n },\n selectSlice\n };\n }\n const slice = {\n name,\n reducer,\n actions: context.actionCreators,\n caseReducers: context.sliceCaseReducersByName,\n getInitialState,\n ...makeSelectorProps(reducerPath),\n injectInto(injectable, {\n reducerPath: pathOpt,\n ...config\n } = {}) {\n const newReducerPath = pathOpt ?? reducerPath;\n injectable.inject({\n reducerPath: newReducerPath,\n reducer\n }, config);\n return {\n ...slice,\n ...makeSelectorProps(newReducerPath, true)\n };\n }\n };\n return slice;\n };\n}\nfunction wrapSelector(selector, selectState, getInitialState, injected) {\n function wrapper(rootState, ...args) {\n let sliceState = selectState(rootState);\n if (typeof sliceState === \"undefined\") {\n if (injected) {\n sliceState = getInitialState();\n } else if (process.env.NODE_ENV !== \"production\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(16) : \"selectState returned undefined for an uninjected slice reducer\");\n }\n }\n return selector(sliceState, ...args);\n }\n wrapper.unwrapped = selector;\n return wrapper;\n}\nvar createSlice = /* @__PURE__ */ buildCreateSlice();\nfunction buildReducerCreators() {\n function asyncThunk(payloadCreator, config) {\n return {\n _reducerDefinitionType: \"asyncThunk\" /* asyncThunk */,\n payloadCreator,\n ...config\n };\n }\n asyncThunk.withTypes = () => asyncThunk;\n return {\n reducer(caseReducer) {\n return Object.assign({\n // hack so the wrapping function has the same name as the original\n // we need to create a wrapper so the `reducerDefinitionType` is not assigned to the original\n [caseReducer.name](...args) {\n return caseReducer(...args);\n }\n }[caseReducer.name], {\n _reducerDefinitionType: \"reducer\" /* reducer */\n });\n },\n preparedReducer(prepare, reducer) {\n return {\n _reducerDefinitionType: \"reducerWithPrepare\" /* reducerWithPrepare */,\n prepare,\n reducer\n };\n },\n asyncThunk\n };\n}\nfunction handleNormalReducerDefinition({\n type,\n reducerName,\n createNotation\n}, maybeReducerWithPrepare, context) {\n let caseReducer;\n let prepareCallback;\n if (\"reducer\" in maybeReducerWithPrepare) {\n if (createNotation && !isCaseReducerWithPrepareDefinition(maybeReducerWithPrepare)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(17) : \"Please use the `create.preparedReducer` notation for prepared action creators with the `create` notation.\");\n }\n caseReducer = maybeReducerWithPrepare.reducer;\n prepareCallback = maybeReducerWithPrepare.prepare;\n } else {\n caseReducer = maybeReducerWithPrepare;\n }\n context.addCase(type, caseReducer).exposeCaseReducer(reducerName, caseReducer).exposeAction(reducerName, prepareCallback ? createAction(type, prepareCallback) : createAction(type));\n}\nfunction isAsyncThunkSliceReducerDefinition(reducerDefinition) {\n return reducerDefinition._reducerDefinitionType === \"asyncThunk\" /* asyncThunk */;\n}\nfunction isCaseReducerWithPrepareDefinition(reducerDefinition) {\n return reducerDefinition._reducerDefinitionType === \"reducerWithPrepare\" /* reducerWithPrepare */;\n}\nfunction handleThunkCaseReducerDefinition({\n type,\n reducerName\n}, reducerDefinition, context, cAT) {\n if (!cAT) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(18) : \"Cannot use `create.asyncThunk` in the built-in `createSlice`. Use `buildCreateSlice({ creators: { asyncThunk: asyncThunkCreator } })` to create a customised version of `createSlice`.\");\n }\n const {\n payloadCreator,\n fulfilled,\n pending,\n rejected,\n settled,\n options\n } = reducerDefinition;\n const thunk = cAT(type, payloadCreator, options);\n context.exposeAction(reducerName, thunk);\n if (fulfilled) {\n context.addCase(thunk.fulfilled, fulfilled);\n }\n if (pending) {\n context.addCase(thunk.pending, pending);\n }\n if (rejected) {\n context.addCase(thunk.rejected, rejected);\n }\n if (settled) {\n context.addMatcher(thunk.settled, settled);\n }\n context.exposeCaseReducer(reducerName, {\n fulfilled: fulfilled || noop,\n pending: pending || noop,\n rejected: rejected || noop,\n settled: settled || noop\n });\n}\nfunction noop() {\n}\n\n// src/entities/entity_state.ts\nfunction getInitialEntityState() {\n return {\n ids: [],\n entities: {}\n };\n}\nfunction createInitialStateFactory(stateAdapter) {\n function getInitialState(additionalState = {}, entities) {\n const state = Object.assign(getInitialEntityState(), additionalState);\n return entities ? stateAdapter.setAll(state, entities) : state;\n }\n return {\n getInitialState\n };\n}\n\n// src/entities/state_selectors.ts\nfunction createSelectorsFactory() {\n function getSelectors(selectState, options = {}) {\n const {\n createSelector: createSelector2 = createDraftSafeSelector\n } = options;\n const selectIds = (state) => state.ids;\n const selectEntities = (state) => state.entities;\n const selectAll = createSelector2(selectIds, selectEntities, (ids, entities) => ids.map((id) => entities[id]));\n const selectId = (_, id) => id;\n const selectById = (entities, id) => entities[id];\n const selectTotal = createSelector2(selectIds, (ids) => ids.length);\n if (!selectState) {\n return {\n selectIds,\n selectEntities,\n selectAll,\n selectTotal,\n selectById: createSelector2(selectEntities, selectId, selectById)\n };\n }\n const selectGlobalizedEntities = createSelector2(selectState, selectEntities);\n return {\n selectIds: createSelector2(selectState, selectIds),\n selectEntities: selectGlobalizedEntities,\n selectAll: createSelector2(selectState, selectAll),\n selectTotal: createSelector2(selectState, selectTotal),\n selectById: createSelector2(selectGlobalizedEntities, selectId, selectById)\n };\n }\n return {\n getSelectors\n };\n}\n\n// src/entities/state_adapter.ts\nimport { produce as createNextState3, isDraft as isDraft3 } from \"immer\";\nvar isDraftTyped = isDraft3;\nfunction createSingleArgumentStateOperator(mutator) {\n const operator = createStateOperator((_, state) => mutator(state));\n return function operation(state) {\n return operator(state, void 0);\n };\n}\nfunction createStateOperator(mutator) {\n return function operation(state, arg) {\n function isPayloadActionArgument(arg2) {\n return isFSA(arg2);\n }\n const runMutator = (draft) => {\n if (isPayloadActionArgument(arg)) {\n mutator(arg.payload, draft);\n } else {\n mutator(arg, draft);\n }\n };\n if (isDraftTyped(state)) {\n runMutator(state);\n return state;\n }\n return createNextState3(state, runMutator);\n };\n}\n\n// src/entities/utils.ts\nimport { current as current2, isDraft as isDraft4 } from \"immer\";\nfunction selectIdValue(entity, selectId) {\n const key = selectId(entity);\n if (process.env.NODE_ENV !== \"production\" && key === void 0) {\n console.warn(\"The entity passed to the `selectId` implementation returned undefined.\", \"You should probably provide your own `selectId` implementation.\", \"The entity that was passed:\", entity, \"The `selectId` implementation:\", selectId.toString());\n }\n return key;\n}\nfunction ensureEntitiesArray(entities) {\n if (!Array.isArray(entities)) {\n entities = Object.values(entities);\n }\n return entities;\n}\nfunction getCurrent(value) {\n return isDraft4(value) ? current2(value) : value;\n}\nfunction splitAddedUpdatedEntities(newEntities, selectId, state) {\n newEntities = ensureEntitiesArray(newEntities);\n const existingIdsArray = getCurrent(state.ids);\n const existingIds = new Set(existingIdsArray);\n const added = [];\n const updated = [];\n for (const entity of newEntities) {\n const id = selectIdValue(entity, selectId);\n if (existingIds.has(id)) {\n updated.push({\n id,\n changes: entity\n });\n } else {\n added.push(entity);\n }\n }\n return [added, updated, existingIdsArray];\n}\n\n// src/entities/unsorted_state_adapter.ts\nfunction createUnsortedStateAdapter(selectId) {\n function addOneMutably(entity, state) {\n const key = selectIdValue(entity, selectId);\n if (key in state.entities) {\n return;\n }\n state.ids.push(key);\n state.entities[key] = entity;\n }\n function addManyMutably(newEntities, state) {\n newEntities = ensureEntitiesArray(newEntities);\n for (const entity of newEntities) {\n addOneMutably(entity, state);\n }\n }\n function setOneMutably(entity, state) {\n const key = selectIdValue(entity, selectId);\n if (!(key in state.entities)) {\n state.ids.push(key);\n }\n ;\n state.entities[key] = entity;\n }\n function setManyMutably(newEntities, state) {\n newEntities = ensureEntitiesArray(newEntities);\n for (const entity of newEntities) {\n setOneMutably(entity, state);\n }\n }\n function setAllMutably(newEntities, state) {\n newEntities = ensureEntitiesArray(newEntities);\n state.ids = [];\n state.entities = {};\n addManyMutably(newEntities, state);\n }\n function removeOneMutably(key, state) {\n return removeManyMutably([key], state);\n }\n function removeManyMutably(keys, state) {\n let didMutate = false;\n keys.forEach((key) => {\n if (key in state.entities) {\n delete state.entities[key];\n didMutate = true;\n }\n });\n if (didMutate) {\n state.ids = state.ids.filter((id) => id in state.entities);\n }\n }\n function removeAllMutably(state) {\n Object.assign(state, {\n ids: [],\n entities: {}\n });\n }\n function takeNewKey(keys, update, state) {\n const original3 = state.entities[update.id];\n if (original3 === void 0) {\n return false;\n }\n const updated = Object.assign({}, original3, update.changes);\n const newKey = selectIdValue(updated, selectId);\n const hasNewKey = newKey !== update.id;\n if (hasNewKey) {\n keys[update.id] = newKey;\n delete state.entities[update.id];\n }\n ;\n state.entities[newKey] = updated;\n return hasNewKey;\n }\n function updateOneMutably(update, state) {\n return updateManyMutably([update], state);\n }\n function updateManyMutably(updates, state) {\n const newKeys = {};\n const updatesPerEntity = {};\n updates.forEach((update) => {\n if (update.id in state.entities) {\n updatesPerEntity[update.id] = {\n id: update.id,\n // Spreads ignore falsy values, so this works even if there isn't\n // an existing update already at this key\n changes: {\n ...updatesPerEntity[update.id]?.changes,\n ...update.changes\n }\n };\n }\n });\n updates = Object.values(updatesPerEntity);\n const didMutateEntities = updates.length > 0;\n if (didMutateEntities) {\n const didMutateIds = updates.filter((update) => takeNewKey(newKeys, update, state)).length > 0;\n if (didMutateIds) {\n state.ids = Object.values(state.entities).map((e) => selectIdValue(e, selectId));\n }\n }\n }\n function upsertOneMutably(entity, state) {\n return upsertManyMutably([entity], state);\n }\n function upsertManyMutably(newEntities, state) {\n const [added, updated] = splitAddedUpdatedEntities(newEntities, selectId, state);\n updateManyMutably(updated, state);\n addManyMutably(added, state);\n }\n return {\n removeAll: createSingleArgumentStateOperator(removeAllMutably),\n addOne: createStateOperator(addOneMutably),\n addMany: createStateOperator(addManyMutably),\n setOne: createStateOperator(setOneMutably),\n setMany: createStateOperator(setManyMutably),\n setAll: createStateOperator(setAllMutably),\n updateOne: createStateOperator(updateOneMutably),\n updateMany: createStateOperator(updateManyMutably),\n upsertOne: createStateOperator(upsertOneMutably),\n upsertMany: createStateOperator(upsertManyMutably),\n removeOne: createStateOperator(removeOneMutably),\n removeMany: createStateOperator(removeManyMutably)\n };\n}\n\n// src/entities/sorted_state_adapter.ts\nfunction findInsertIndex(sortedItems, item, comparisonFunction) {\n let lowIndex = 0;\n let highIndex = sortedItems.length;\n while (lowIndex < highIndex) {\n let middleIndex = lowIndex + highIndex >>> 1;\n const currentItem = sortedItems[middleIndex];\n const res = comparisonFunction(item, currentItem);\n if (res >= 0) {\n lowIndex = middleIndex + 1;\n } else {\n highIndex = middleIndex;\n }\n }\n return lowIndex;\n}\nfunction insert(sortedItems, item, comparisonFunction) {\n const insertAtIndex = findInsertIndex(sortedItems, item, comparisonFunction);\n sortedItems.splice(insertAtIndex, 0, item);\n return sortedItems;\n}\nfunction createSortedStateAdapter(selectId, comparer) {\n const {\n removeOne,\n removeMany,\n removeAll\n } = createUnsortedStateAdapter(selectId);\n function addOneMutably(entity, state) {\n return addManyMutably([entity], state);\n }\n function addManyMutably(newEntities, state, existingIds) {\n newEntities = ensureEntitiesArray(newEntities);\n const existingKeys = new Set(existingIds ?? getCurrent(state.ids));\n const models = newEntities.filter((model) => !existingKeys.has(selectIdValue(model, selectId)));\n if (models.length !== 0) {\n mergeFunction(state, models);\n }\n }\n function setOneMutably(entity, state) {\n return setManyMutably([entity], state);\n }\n function setManyMutably(newEntities, state) {\n newEntities = ensureEntitiesArray(newEntities);\n if (newEntities.length !== 0) {\n for (const item of newEntities) {\n delete state.entities[selectId(item)];\n }\n mergeFunction(state, newEntities);\n }\n }\n function setAllMutably(newEntities, state) {\n newEntities = ensureEntitiesArray(newEntities);\n state.entities = {};\n state.ids = [];\n addManyMutably(newEntities, state, []);\n }\n function updateOneMutably(update, state) {\n return updateManyMutably([update], state);\n }\n function updateManyMutably(updates, state) {\n let appliedUpdates = false;\n let replacedIds = false;\n for (let update of updates) {\n const entity = state.entities[update.id];\n if (!entity) {\n continue;\n }\n appliedUpdates = true;\n Object.assign(entity, update.changes);\n const newId = selectId(entity);\n if (update.id !== newId) {\n replacedIds = true;\n delete state.entities[update.id];\n const oldIndex = state.ids.indexOf(update.id);\n state.ids[oldIndex] = newId;\n state.entities[newId] = entity;\n }\n }\n if (appliedUpdates) {\n mergeFunction(state, [], appliedUpdates, replacedIds);\n }\n }\n function upsertOneMutably(entity, state) {\n return upsertManyMutably([entity], state);\n }\n function upsertManyMutably(newEntities, state) {\n const [added, updated, existingIdsArray] = splitAddedUpdatedEntities(newEntities, selectId, state);\n if (updated.length) {\n updateManyMutably(updated, state);\n }\n if (added.length) {\n addManyMutably(added, state, existingIdsArray);\n }\n }\n function areArraysEqual(a, b) {\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] === b[i]) {\n continue;\n }\n return false;\n }\n return true;\n }\n const mergeFunction = (state, addedItems, appliedUpdates, replacedIds) => {\n const currentEntities = getCurrent(state.entities);\n const currentIds = getCurrent(state.ids);\n const stateEntities = state.entities;\n let ids = currentIds;\n if (replacedIds) {\n ids = new Set(currentIds);\n }\n let sortedEntities = [];\n for (const id of ids) {\n const entity = currentEntities[id];\n if (entity) {\n sortedEntities.push(entity);\n }\n }\n const wasPreviouslyEmpty = sortedEntities.length === 0;\n for (const item of addedItems) {\n stateEntities[selectId(item)] = item;\n if (!wasPreviouslyEmpty) {\n insert(sortedEntities, item, comparer);\n }\n }\n if (wasPreviouslyEmpty) {\n sortedEntities = addedItems.slice().sort(comparer);\n } else if (appliedUpdates) {\n sortedEntities.sort(comparer);\n }\n const newSortedIds = sortedEntities.map(selectId);\n if (!areArraysEqual(currentIds, newSortedIds)) {\n state.ids = newSortedIds;\n }\n };\n return {\n removeOne,\n removeMany,\n removeAll,\n addOne: createStateOperator(addOneMutably),\n updateOne: createStateOperator(updateOneMutably),\n upsertOne: createStateOperator(upsertOneMutably),\n setOne: createStateOperator(setOneMutably),\n setMany: createStateOperator(setManyMutably),\n setAll: createStateOperator(setAllMutably),\n addMany: createStateOperator(addManyMutably),\n updateMany: createStateOperator(updateManyMutably),\n upsertMany: createStateOperator(upsertManyMutably)\n };\n}\n\n// src/entities/create_adapter.ts\nfunction createEntityAdapter(options = {}) {\n const {\n selectId,\n sortComparer\n } = {\n sortComparer: false,\n selectId: (instance) => instance.id,\n ...options\n };\n const stateAdapter = sortComparer ? createSortedStateAdapter(selectId, sortComparer) : createUnsortedStateAdapter(selectId);\n const stateFactory = createInitialStateFactory(stateAdapter);\n const selectorsFactory = createSelectorsFactory();\n return {\n selectId,\n sortComparer,\n ...stateFactory,\n ...selectorsFactory,\n ...stateAdapter\n };\n}\n\n// src/listenerMiddleware/index.ts\nimport { isAction as isAction3 } from \"redux\";\n\n// src/listenerMiddleware/exceptions.ts\nvar task = \"task\";\nvar listener = \"listener\";\nvar completed = \"completed\";\nvar cancelled = \"cancelled\";\nvar taskCancelled = `task-${cancelled}`;\nvar taskCompleted = `task-${completed}`;\nvar listenerCancelled = `${listener}-${cancelled}`;\nvar listenerCompleted = `${listener}-${completed}`;\nvar TaskAbortError = class {\n constructor(code) {\n this.code = code;\n this.message = `${task} ${cancelled} (reason: ${code})`;\n }\n name = \"TaskAbortError\";\n message;\n};\n\n// src/listenerMiddleware/utils.ts\nvar assertFunction = (func, expected) => {\n if (typeof func !== \"function\") {\n throw new TypeError(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(32) : `${expected} is not a function`);\n }\n};\nvar noop2 = () => {\n};\nvar catchRejection = (promise, onError = noop2) => {\n promise.catch(onError);\n return promise;\n};\nvar addAbortSignalListener = (abortSignal, callback) => {\n abortSignal.addEventListener(\"abort\", callback, {\n once: true\n });\n return () => abortSignal.removeEventListener(\"abort\", callback);\n};\nvar abortControllerWithReason = (abortController, reason) => {\n const signal = abortController.signal;\n if (signal.aborted) {\n return;\n }\n if (!(\"reason\" in signal)) {\n Object.defineProperty(signal, \"reason\", {\n enumerable: true,\n value: reason,\n configurable: true,\n writable: true\n });\n }\n ;\n abortController.abort(reason);\n};\n\n// src/listenerMiddleware/task.ts\nvar validateActive = (signal) => {\n if (signal.aborted) {\n const {\n reason\n } = signal;\n throw new TaskAbortError(reason);\n }\n};\nfunction raceWithSignal(signal, promise) {\n let cleanup = noop2;\n return new Promise((resolve, reject) => {\n const notifyRejection = () => reject(new TaskAbortError(signal.reason));\n if (signal.aborted) {\n notifyRejection();\n return;\n }\n cleanup = addAbortSignalListener(signal, notifyRejection);\n promise.finally(() => cleanup()).then(resolve, reject);\n }).finally(() => {\n cleanup = noop2;\n });\n}\nvar runTask = async (task2, cleanUp) => {\n try {\n await Promise.resolve();\n const value = await task2();\n return {\n status: \"ok\",\n value\n };\n } catch (error) {\n return {\n status: error instanceof TaskAbortError ? \"cancelled\" : \"rejected\",\n error\n };\n } finally {\n cleanUp?.();\n }\n};\nvar createPause = (signal) => {\n return (promise) => {\n return catchRejection(raceWithSignal(signal, promise).then((output) => {\n validateActive(signal);\n return output;\n }));\n };\n};\nvar createDelay = (signal) => {\n const pause = createPause(signal);\n return (timeoutMs) => {\n return pause(new Promise((resolve) => setTimeout(resolve, timeoutMs)));\n };\n};\n\n// src/listenerMiddleware/index.ts\nvar {\n assign\n} = Object;\nvar INTERNAL_NIL_TOKEN = {};\nvar alm = \"listenerMiddleware\";\nvar createFork = (parentAbortSignal, parentBlockingPromises) => {\n const linkControllers = (controller) => addAbortSignalListener(parentAbortSignal, () => abortControllerWithReason(controller, parentAbortSignal.reason));\n return (taskExecutor, opts) => {\n assertFunction(taskExecutor, \"taskExecutor\");\n const childAbortController = new AbortController();\n linkControllers(childAbortController);\n const result = runTask(async () => {\n validateActive(parentAbortSignal);\n validateActive(childAbortController.signal);\n const result2 = await taskExecutor({\n pause: createPause(childAbortController.signal),\n delay: createDelay(childAbortController.signal),\n signal: childAbortController.signal\n });\n validateActive(childAbortController.signal);\n return result2;\n }, () => abortControllerWithReason(childAbortController, taskCompleted));\n if (opts?.autoJoin) {\n parentBlockingPromises.push(result.catch(noop2));\n }\n return {\n result: createPause(parentAbortSignal)(result),\n cancel() {\n abortControllerWithReason(childAbortController, taskCancelled);\n }\n };\n };\n};\nvar createTakePattern = (startListening, signal) => {\n const take = async (predicate, timeout) => {\n validateActive(signal);\n let unsubscribe = () => {\n };\n const tuplePromise = new Promise((resolve, reject) => {\n let stopListening = startListening({\n predicate,\n effect: (action, listenerApi) => {\n listenerApi.unsubscribe();\n resolve([action, listenerApi.getState(), listenerApi.getOriginalState()]);\n }\n });\n unsubscribe = () => {\n stopListening();\n reject();\n };\n });\n const promises = [tuplePromise];\n if (timeout != null) {\n promises.push(new Promise((resolve) => setTimeout(resolve, timeout, null)));\n }\n try {\n const output = await raceWithSignal(signal, Promise.race(promises));\n validateActive(signal);\n return output;\n } finally {\n unsubscribe();\n }\n };\n return (predicate, timeout) => catchRejection(take(predicate, timeout));\n};\nvar getListenerEntryPropsFrom = (options) => {\n let {\n type,\n actionCreator,\n matcher,\n predicate,\n effect\n } = options;\n if (type) {\n predicate = createAction(type).match;\n } else if (actionCreator) {\n type = actionCreator.type;\n predicate = actionCreator.match;\n } else if (matcher) {\n predicate = matcher;\n } else if (predicate) {\n } else {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(21) : \"Creating or removing a listener requires one of the known fields for matching an action\");\n }\n assertFunction(effect, \"options.listener\");\n return {\n predicate,\n type,\n effect\n };\n};\nvar createListenerEntry = /* @__PURE__ */ assign((options) => {\n const {\n type,\n predicate,\n effect\n } = getListenerEntryPropsFrom(options);\n const entry = {\n id: nanoid(),\n effect,\n type,\n predicate,\n pending: /* @__PURE__ */ new Set(),\n unsubscribe: () => {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(22) : \"Unsubscribe not initialized\");\n }\n };\n return entry;\n}, {\n withTypes: () => createListenerEntry\n});\nvar findListenerEntry = (listenerMap, options) => {\n const {\n type,\n effect,\n predicate\n } = getListenerEntryPropsFrom(options);\n return Array.from(listenerMap.values()).find((entry) => {\n const matchPredicateOrType = typeof type === \"string\" ? entry.type === type : entry.predicate === predicate;\n return matchPredicateOrType && entry.effect === effect;\n });\n};\nvar cancelActiveListeners = (entry) => {\n entry.pending.forEach((controller) => {\n abortControllerWithReason(controller, listenerCancelled);\n });\n};\nvar createClearListenerMiddleware = (listenerMap) => {\n return () => {\n listenerMap.forEach(cancelActiveListeners);\n listenerMap.clear();\n };\n};\nvar safelyNotifyError = (errorHandler, errorToNotify, errorInfo) => {\n try {\n errorHandler(errorToNotify, errorInfo);\n } catch (errorHandlerError) {\n setTimeout(() => {\n throw errorHandlerError;\n }, 0);\n }\n};\nvar addListener = /* @__PURE__ */ assign(/* @__PURE__ */ createAction(`${alm}/add`), {\n withTypes: () => addListener\n});\nvar clearAllListeners = /* @__PURE__ */ createAction(`${alm}/removeAll`);\nvar removeListener = /* @__PURE__ */ assign(/* @__PURE__ */ createAction(`${alm}/remove`), {\n withTypes: () => removeListener\n});\nvar defaultErrorHandler = (...args) => {\n console.error(`${alm}/error`, ...args);\n};\nvar createListenerMiddleware = (middlewareOptions = {}) => {\n const listenerMap = /* @__PURE__ */ new Map();\n const {\n extra,\n onError = defaultErrorHandler\n } = middlewareOptions;\n assertFunction(onError, \"onError\");\n const insertEntry = (entry) => {\n entry.unsubscribe = () => listenerMap.delete(entry.id);\n listenerMap.set(entry.id, entry);\n return (cancelOptions) => {\n entry.unsubscribe();\n if (cancelOptions?.cancelActive) {\n cancelActiveListeners(entry);\n }\n };\n };\n const startListening = (options) => {\n const entry = findListenerEntry(listenerMap, options) ?? createListenerEntry(options);\n return insertEntry(entry);\n };\n assign(startListening, {\n withTypes: () => startListening\n });\n const stopListening = (options) => {\n const entry = findListenerEntry(listenerMap, options);\n if (entry) {\n entry.unsubscribe();\n if (options.cancelActive) {\n cancelActiveListeners(entry);\n }\n }\n return !!entry;\n };\n assign(stopListening, {\n withTypes: () => stopListening\n });\n const notifyListener = async (entry, action, api, getOriginalState) => {\n const internalTaskController = new AbortController();\n const take = createTakePattern(startListening, internalTaskController.signal);\n const autoJoinPromises = [];\n try {\n entry.pending.add(internalTaskController);\n await Promise.resolve(entry.effect(\n action,\n // Use assign() rather than ... to avoid extra helper functions added to bundle\n assign({}, api, {\n getOriginalState,\n condition: (predicate, timeout) => take(predicate, timeout).then(Boolean),\n take,\n delay: createDelay(internalTaskController.signal),\n pause: createPause(internalTaskController.signal),\n extra,\n signal: internalTaskController.signal,\n fork: createFork(internalTaskController.signal, autoJoinPromises),\n unsubscribe: entry.unsubscribe,\n subscribe: () => {\n listenerMap.set(entry.id, entry);\n },\n cancelActiveListeners: () => {\n entry.pending.forEach((controller, _, set) => {\n if (controller !== internalTaskController) {\n abortControllerWithReason(controller, listenerCancelled);\n set.delete(controller);\n }\n });\n },\n cancel: () => {\n abortControllerWithReason(internalTaskController, listenerCancelled);\n entry.pending.delete(internalTaskController);\n },\n throwIfCancelled: () => {\n validateActive(internalTaskController.signal);\n }\n })\n ));\n } catch (listenerError) {\n if (!(listenerError instanceof TaskAbortError)) {\n safelyNotifyError(onError, listenerError, {\n raisedBy: \"effect\"\n });\n }\n } finally {\n await Promise.all(autoJoinPromises);\n abortControllerWithReason(internalTaskController, listenerCompleted);\n entry.pending.delete(internalTaskController);\n }\n };\n const clearListenerMiddleware = createClearListenerMiddleware(listenerMap);\n const middleware = (api) => (next) => (action) => {\n if (!isAction3(action)) {\n return next(action);\n }\n if (addListener.match(action)) {\n return startListening(action.payload);\n }\n if (clearAllListeners.match(action)) {\n clearListenerMiddleware();\n return;\n }\n if (removeListener.match(action)) {\n return stopListening(action.payload);\n }\n let originalState = api.getState();\n const getOriginalState = () => {\n if (originalState === INTERNAL_NIL_TOKEN) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(23) : `${alm}: getOriginalState can only be called synchronously`);\n }\n return originalState;\n };\n let result;\n try {\n result = next(action);\n if (listenerMap.size > 0) {\n const currentState = api.getState();\n const listenerEntries = Array.from(listenerMap.values());\n for (const entry of listenerEntries) {\n let runListener = false;\n try {\n runListener = entry.predicate(action, currentState, originalState);\n } catch (predicateError) {\n runListener = false;\n safelyNotifyError(onError, predicateError, {\n raisedBy: \"predicate\"\n });\n }\n if (!runListener) {\n continue;\n }\n notifyListener(entry, action, api, getOriginalState);\n }\n }\n } finally {\n originalState = INTERNAL_NIL_TOKEN;\n }\n return result;\n };\n return {\n middleware,\n startListening,\n stopListening,\n clearListeners: clearListenerMiddleware\n };\n};\n\n// src/dynamicMiddleware/index.ts\nimport { compose as compose3 } from \"redux\";\nvar createMiddlewareEntry = (middleware) => ({\n middleware,\n applied: /* @__PURE__ */ new Map()\n});\nvar matchInstance = (instanceId) => (action) => action?.meta?.instanceId === instanceId;\nvar createDynamicMiddleware = () => {\n const instanceId = nanoid();\n const middlewareMap = /* @__PURE__ */ new Map();\n const withMiddleware = Object.assign(createAction(\"dynamicMiddleware/add\", (...middlewares) => ({\n payload: middlewares,\n meta: {\n instanceId\n }\n })), {\n withTypes: () => withMiddleware\n });\n const addMiddleware = Object.assign(function addMiddleware2(...middlewares) {\n middlewares.forEach((middleware2) => {\n getOrInsertComputed(middlewareMap, middleware2, createMiddlewareEntry);\n });\n }, {\n withTypes: () => addMiddleware\n });\n const getFinalMiddleware = (api) => {\n const appliedMiddleware = Array.from(middlewareMap.values()).map((entry) => getOrInsertComputed(entry.applied, api, entry.middleware));\n return compose3(...appliedMiddleware);\n };\n const isWithMiddleware = isAllOf(withMiddleware, matchInstance(instanceId));\n const middleware = (api) => (next) => (action) => {\n if (isWithMiddleware(action)) {\n addMiddleware(...action.payload);\n return api.dispatch;\n }\n return getFinalMiddleware(api)(next)(action);\n };\n return {\n middleware,\n addMiddleware,\n withMiddleware,\n instanceId\n };\n};\n\n// src/combineSlices.ts\nimport { combineReducers as combineReducers2 } from \"redux\";\nvar isSliceLike = (maybeSliceLike) => \"reducerPath\" in maybeSliceLike && typeof maybeSliceLike.reducerPath === \"string\";\nvar getReducers = (slices) => slices.flatMap((sliceOrMap) => isSliceLike(sliceOrMap) ? [[sliceOrMap.reducerPath, sliceOrMap.reducer]] : Object.entries(sliceOrMap));\nvar ORIGINAL_STATE = Symbol.for(\"rtk-state-proxy-original\");\nvar isStateProxy = (value) => !!value && !!value[ORIGINAL_STATE];\nvar stateProxyMap = /* @__PURE__ */ new WeakMap();\nvar createStateProxy = (state, reducerMap) => getOrInsertComputed(stateProxyMap, state, () => new Proxy(state, {\n get: (target, prop, receiver) => {\n if (prop === ORIGINAL_STATE) return target;\n const result = Reflect.get(target, prop, receiver);\n if (typeof result === \"undefined\") {\n const reducer = reducerMap[prop.toString()];\n if (reducer) {\n const reducerResult = reducer(void 0, {\n type: nanoid()\n });\n if (typeof reducerResult === \"undefined\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(24) : `The slice reducer for key \"${prop.toString()}\" returned undefined when called for selector(). If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don't want to set a value for this reducer, you can use null instead of undefined.`);\n }\n return reducerResult;\n }\n }\n return result;\n }\n}));\nvar original = (state) => {\n if (!isStateProxy(state)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(25) : \"original must be used on state Proxy\");\n }\n return state[ORIGINAL_STATE];\n};\nvar noopReducer = (state = {}) => state;\nfunction combineSlices(...slices) {\n const reducerMap = Object.fromEntries(getReducers(slices));\n const getReducer = () => Object.keys(reducerMap).length ? combineReducers2(reducerMap) : noopReducer;\n let reducer = getReducer();\n function combinedReducer(state, action) {\n return reducer(state, action);\n }\n combinedReducer.withLazyLoadedSlices = () => combinedReducer;\n const inject = (slice, config = {}) => {\n const {\n reducerPath,\n reducer: reducerToInject\n } = slice;\n const currentReducer = reducerMap[reducerPath];\n if (!config.overrideExisting && currentReducer && currentReducer !== reducerToInject) {\n if (typeof process !== \"undefined\" && process.env.NODE_ENV === \"development\") {\n console.error(`called \\`inject\\` to override already-existing reducer ${reducerPath} without specifying \\`overrideExisting: true\\``);\n }\n return combinedReducer;\n }\n reducerMap[reducerPath] = reducerToInject;\n reducer = getReducer();\n return combinedReducer;\n };\n const selector = Object.assign(function makeSelector(selectorFn, selectState) {\n return function selector2(state, ...args) {\n return selectorFn(createStateProxy(selectState ? selectState(state, ...args) : state, reducerMap), ...args);\n };\n }, {\n original\n });\n return Object.assign(combinedReducer, {\n inject,\n selector\n });\n}\n\n// src/formatProdErrorMessage.ts\nfunction formatProdErrorMessage(code) {\n return `Minified Redux Toolkit error #${code}; visit https://redux-toolkit.js.org/Errors?code=${code} for the full message or use the non-minified dev environment for full errors. `;\n}\nexport {\n ReducerType,\n SHOULD_AUTOBATCH,\n TaskAbortError,\n Tuple,\n addListener,\n asyncThunkCreator,\n autoBatchEnhancer,\n buildCreateSlice,\n clearAllListeners,\n combineSlices,\n configureStore,\n createAction,\n createActionCreatorInvariantMiddleware,\n createAsyncThunk,\n createDraftSafeSelector,\n createDraftSafeSelectorCreator,\n createDynamicMiddleware,\n createEntityAdapter,\n createImmutableStateInvariantMiddleware,\n createListenerMiddleware,\n produce as createNextState,\n createReducer,\n createSelector,\n createSelectorCreator2 as createSelectorCreator,\n createSerializableStateInvariantMiddleware,\n createSlice,\n current3 as current,\n findNonSerializableValue,\n formatProdErrorMessage,\n freeze,\n isActionCreator,\n isAllOf,\n isAnyOf,\n isAsyncThunkAction,\n isDraft5 as isDraft,\n isFSA as isFluxStandardAction,\n isFulfilled,\n isImmutableDefault,\n isPending,\n isPlain,\n isRejected,\n isRejectedWithValue,\n lruMemoize,\n miniSerializeError,\n nanoid,\n original2 as original,\n prepareAutoBatched,\n removeListener,\n unwrapResult,\n weakMapMemoize2 as weakMapMemoize\n};\n//# sourceMappingURL=redux-toolkit.modern.mjs.map","import {\n IActivityHistoryItem,\n IActivityHistoryItemCollection,\n IHistoryDataImporterRules,\n TSearchActivityHistoryItemPredicate,\n} from \"../../domain/model\";\n\nexport const addItemsToCollection = (\n collections: Record<string, IActivityHistoryItemCollection>,\n id: string,\n items: IActivityHistoryItem[],\n componentFactory?: (item: IActivityHistoryItem) => HTMLElement,\n searchPredicate?: TSearchActivityHistoryItemPredicate,\n historyDataImporterRules?: IHistoryDataImporterRules,\n) => {\n // Crea la colección si no existe\n if (!collections[id]) {\n return { ...collections, [id]: { id, items, componentFactory, searchPredicate, historyDataImporterRules } };\n }\n // Si la colección ya existe, fusiona el array existente con el nuevo; si arriba\n // un nou set de regles, prevaleix; si no, manté les que ja tenia.\n return {\n ...collections,\n [id]: {\n ...collections[id],\n items: [...(collections[id]?.items || []), ...items],\n historyDataImporterRules: historyDataImporterRules ?? collections[id]?.historyDataImporterRules,\n },\n };\n};\n","import { IActivityHistoryItem, IActivityHistoryItemCollection } from \"../../domain/model\";\nimport { addItemsToCollection } from \"../add-history-items/add-items-to-collection\";\n\nexport const addItemToCollection = (\n collections: Record<string, IActivityHistoryItemCollection>,\n id: string,\n item: IActivityHistoryItem,\n componentFactory?: (item: IActivityHistoryItem) => HTMLElement,\n) => {\n return addItemsToCollection(collections, id, [item], componentFactory);\n};\n","import { PayloadAction } from \"@reduxjs/toolkit\";\nimport { addItemToCollection } from \"./add-item-to-collection\";\nimport { IActivityHistoryItem } from \"../../domain/model\";\n\nexport function addActivityHistoryItemReducer(\n state,\n action: PayloadAction<{\n id: string;\n item: IActivityHistoryItem;\n componentFactory: (item: IActivityHistoryItem) => HTMLElement;\n }>,\n) {\n const { id, item, componentFactory } = action.payload;\n state.collections = addItemToCollection(state.collections, id, item, componentFactory);\n}\n","import { PayloadAction } from \"@reduxjs/toolkit\";\nimport { IActivityHistoryItem, IHistoryDataImporterRules, TSearchActivityHistoryItemPredicate } from \"../../domain/model\";\nimport { addItemsToCollection } from \"./add-items-to-collection\";\n\nexport function addActivityHistoryItemsReducer(\n state,\n action: PayloadAction<{\n id: string;\n items: IActivityHistoryItem[];\n componentFactory?: (item: IActivityHistoryItem) => HTMLElement;\n searchPredicate?: TSearchActivityHistoryItemPredicate;\n historyDataImporterRules?: IHistoryDataImporterRules;\n }>,\n) {\n const { id, items, componentFactory, searchPredicate, historyDataImporterRules } = action.payload;\n return {\n ...state,\n collections: addItemsToCollection(state.collections, id, items, componentFactory, searchPredicate, historyDataImporterRules),\n };\n}\n","import { PayloadAction } from \"@reduxjs/toolkit\";\n\nexport function addBusyHistoryItemReducer(state, action: PayloadAction<string>) {\n state.busy.push(action.payload);\n}\nexport function removeBusyHistoryItemReducer(state, action: PayloadAction<string>) {\n state.busy = state.busy.filter((i) => i !== action.payload);\n}\n","import { PayloadAction } from \"@reduxjs/toolkit\";\nimport { IErrorHistoryItem } from \"../../domain/model\";\n\nexport function addErrorHistoryItemReducer(\n state,\n action: PayloadAction<IErrorHistoryItem>,\n) {\n state.error.push(action.payload);\n}\nexport function removeErrorHistoryItemReducer(state, action: PayloadAction<string>) {\n state.error = state.error.filter((item) => item.entityId !== action.payload);\n}\n","export function clearActivityHistoryCollectionsReducer(state) {\n return {\n ...state,\n collections: {},\n error: [],\n };\n}\n","import { IActivityHistoryItem } from \"../domain/model\";\n\nexport const removeItemFromCollection = (\n collections: Record<string, any>,\n id: string,\n itemId: string,\n) => {\n if (!collections[id]?.items) return collections;\n const items = collections[id]?.items ?? [];\n\n return {\n ...collections,\n [id]: {\n ...collections[id],\n items: items.filter((i: IActivityHistoryItem) => i.id !== itemId),\n },\n };\n};","import { PayloadAction } from \"@reduxjs/toolkit\";\nimport { removeItemFromCollection } from \"./remove-item-from-collection\";\n\nexport function removeActivityHistoryItemReducer(\n state,\n action: PayloadAction<{ id: string; itemId: string }>,\n) {\n const { id, itemId } = action.payload;\n state.collections = removeItemFromCollection(state.collections, id, itemId);\n}\n","import { IActivityHistoryItem } from \"../domain/model\";\n\nexport const updateItemInCollection = (\n collections: Record<string, any>,\n id: string,\n updatedItem: IActivityHistoryItem,\n) => {\n if (!collections[id]?.items) return collections;\n const items = collections[id]?.items ?? [];\n\n return {\n ...collections,\n [id]: {\n ...collections[id],\n items: items.map((i: IActivityHistoryItem) => (i.id === updatedItem.id ? updatedItem : i)),\n },\n };\n};\n","import { PayloadAction } from \"@reduxjs/toolkit\";\nimport { updateItemInCollection } from \"./update-item-in-collection\";\nimport { IActivityHistoryItem } from \"../domain/model\";\n\nexport function updateActivityHistoryItemReducer(\n state,\n action: PayloadAction<{ id: string; item: IActivityHistoryItem }>,\n) {\n const { id, item } = action.payload;\n state.collections = updateItemInCollection(state.collections, id, item);\n}\n","import { createSlice } from \"@reduxjs/toolkit\";\nimport { addActivityHistoryItemReducer } from \"./add/add-history-item/reducer\";\nimport { addActivityHistoryItemsReducer } from \"./add/add-history-items/reducer\";\nimport { addBusyHistoryItemReducer, removeBusyHistoryItemReducer } from \"./add/handle-busy/reducers\";\nimport { addErrorHistoryItemReducer, removeErrorHistoryItemReducer } from \"./add/handle-error/reducers\";\nimport { clearActivityHistoryCollectionsReducer } from \"./clear/reducer\";\nimport { IActivityHistoryItemCollection, IBusyHistoryItem, IErrorHistoryItem } from \"./domain/model\";\nimport { removeActivityHistoryItemReducer } from \"./remove/reducer\";\nimport { updateActivityHistoryItemReducer } from \"./update/reducer\";\n\nexport const activityHistoryCollectionsSlice = createSlice({\n name: \"activity-history-collections\",\n initialState: {\n busy: [] as IBusyHistoryItem[],\n error: [] as IErrorHistoryItem[],\n collections: {} as Record<string, IActivityHistoryItemCollection>,\n },\n reducers: {\n addBusyHistoryItem: addBusyHistoryItemReducer,\n removeBusyHistoryItem: removeBusyHistoryItemReducer,\n addActivityHistoryItem: addActivityHistoryItemReducer,\n updateActivityHistoryItem: updateActivityHistoryItemReducer,\n addActivityHistoryItems: addActivityHistoryItemsReducer,\n clearActivityHistoryCollections: clearActivityHistoryCollectionsReducer,\n addErrorHistoryItem: addErrorHistoryItemReducer,\n removeErrorHistoryItem: removeErrorHistoryItemReducer,\n removeActivityHistoryItem: removeActivityHistoryItemReducer,\n },\n});\n","import { PayloadAction } from \"@reduxjs/toolkit\";\n\nexport function setSearchStringReducer(state, action: PayloadAction<string>) {\n state.searchString = action.payload;\n}\n","export interface ISpec<TContext> {\n isSatisfiedBy(context: TContext): boolean;\n and(spec: ISpec<TContext>): ISpec<TContext>;\n or(spec: ISpec<TContext>): ISpec<TContext>;\n not(): ISpec<TContext>;\n}\n\n\nexport abstract class Spec<TContext> implements ISpec<TContext> {\n abstract isSatisfiedBy(context: TContext): boolean;\n and(spec: ISpec<TContext>): ISpec<TContext> {\n return new AndSpec(this as unknown as ISpec<TContext>, spec);\n }\n or(spec: ISpec<TContext>): ISpec<TContext> {\n return new OrSpec(this as unknown as ISpec<TContext>, spec);\n }\n not(): ISpec<TContext> {\n return new NotSpec(this as unknown as ISpec<TContext>);\n }\n}\nexport class AndSpec<TContext> extends Spec<TContext> {\n constructor(\n private left: ISpec<TContext>,\n private right: ISpec<TContext>,\n ) {\n super();\n }\n isSatisfiedBy(context: TContext): boolean {\n return this.left.isSatisfiedBy(context) && this.right.isSatisfiedBy(context);\n }\n}\n\nexport class OrSpec<TContext> extends Spec<TContext> {\n constructor(\n private left: ISpec<TContext>,\n private right: ISpec<TContext>,\n ) {\n super();\n }\n\n isSatisfiedBy(context: TContext): boolean {\n return this.left.isSatisfiedBy(context) || this.right.isSatisfiedBy(context);\n }\n}\n\nexport class NotSpec<TContext> extends Spec<TContext> {\n constructor(private spec: ISpec<TContext>) {\n super();\n }\n\n isSatisfiedBy(context: TContext): boolean {\n return !this.spec.isSatisfiedBy(context);\n }\n}\n","import { IUserInfo } from \"@uxland/primary-shell\";\nimport { IActivityHistoryItem } from \"../model\";\nimport { Spec } from \"./spec\";\n\n// Global variable to hold shellApi reference\nlet shellApiRef: any = null;\n\n// Function to set the shellApi (called from plugin initialization)\nexport const setShellApiForOwnSpec = (api: any) => {\n shellApiRef = api;\n};\n\nexport class OwnSpec extends Spec<IActivityHistoryItem> {\n constructor(public context: IActivityHistoryItem) {\n super();\n }\n isSatisfiedBy(context: IActivityHistoryItem): boolean {\n // If no shellApi is available, return false (e.g., during tests)\n if (!shellApiRef) {\n return false;\n }\n \n try {\n const userInfo = shellApiRef.globalStateManager.getData(\"userInfo\") as IUserInfo;\n return context?.professional?.id === userInfo?.userId;\n } catch {\n return false;\n }\n }\n}\n","import { IActivityHistoryItem } from \"../model\";\nimport { Spec } from \"./spec\";\n\nexport class RelevantSpec extends Spec<IActivityHistoryItem> {\n constructor(public context: IActivityHistoryItem) {\n super();\n }\n isSatisfiedBy(context: IActivityHistoryItem): boolean {\n return context?.relevant ?? false;\n }\n}\n","import {\n ActivityHistoryFilterType,\n type IActivityHistoryCustomFilter,\n type IActivityHistoryCustomFilterGroup,\n} from \"@primaria/plugins-core\";\nimport { IActivityHistoryItem } from \"../domain/model\";\nimport { Spec } from \"../domain/specs/spec\";\n\n// Contractes compartits (definició a `@primaria/plugins-core`), re-exportats\n// aquí perquè els imports interns del plugin (`../../filter`) segueixin funcionant.\nexport { ActivityHistoryFilterType };\nexport type { IActivityHistoryCustomFilter, IActivityHistoryCustomFilterGroup };\n\ntype Constructor<T> = new (...args: any[]) => T;\n\nexport enum ActivityHistoryFilterOperation {\n And = \"and\",\n Or = \"or\",\n}\n\nexport interface IActivityHistoryCommonFilterGroup {\n id: string;\n title: string;\n filters: IActivityHistoryCommonFilter[];\n}\n\nexport interface IActivityHistoryCommonFilter {\n id: string;\n title: string;\n spec: Constructor<Spec<IActivityHistoryItem>>;\n enabled: boolean;\n type: ActivityHistoryFilterType;\n}\n\nexport type IActivityHistoryFilter =\n | IActivityHistoryCommonFilterGroup\n | IActivityHistoryCustomFilterGroup\n | IActivityHistoryDiagnosticsFilter;\n\nexport const isCommonFilterGroup = (group: IActivityHistoryFilter) => group.id === \"common\";\nexport const isNotCommonFilterGroup = (group: IActivityHistoryFilter) => !isCommonFilterGroup(group);\nexport const isDiagnosticFilter = (filter: IActivityHistoryFilter) => filter.id === diagnosticsfilterId;\nexport const isNotDiagnosticFilter = (filter: IActivityHistoryFilter) => !isDiagnosticFilter(filter);\nexport const isCustomFilter = (filter: IActivityHistoryFilter) =>\n !isCommonFilterGroup(filter) && !isDiagnosticFilter(filter) && !isUpFilter(filter);\nexport const isUpFilter = (filter: IActivityHistoryFilter) => filter.id === upFilterId;\nexport interface IActivityHistoryDiagnosticsFilter {\n id: string;\n title: string;\n values: { label: string; value: string }[];\n enabledValues: IDiagnosticWithRelations[];\n}\n\n// Nova estructura per diagnostics amb evolucions i relacions\nexport interface IDiagnosticRelation {\n codi: string;\n cataleg: string;\n nomCataleg: string;\n descripcio: string;\n idEcap: string;\n idCipds: string;\n}\n\nexport interface IDiagnosticWithRelations extends IDiagnosticRelation {\n evolucions?: IDiagnosticRelation[];\n relacions?: IDiagnosticRelation[];\n}\n\nexport interface ICiPdSDiagnosticFilter {\n diagnostics: IDiagnosticWithRelations[];\n}\n\nexport interface IActivityHistoryUpFilter {\n id: string;\n title: string;\n values: { label: string; value: string }[];\n enabledValues: string[];\n}\n\nexport const diagnosticsfilterId = \"history-diagnostics\";\nexport const relevantFilterId = \"history-relevant\";\nexport const ownFilterId = \"history-own\";\nexport const upFilterId = \"history-up\";\n","import { OwnSpec } from \"../../domain/specs/own-spec\";\nimport { RelevantSpec } from \"../../domain/specs/relevant-spec\";\nimport {\n IActivityHistoryCommonFilterGroup,\n ActivityHistoryFilterType,\n relevantFilterId,\n ownFilterId,\n} from \"../model\";\n\nexport const commonFilters: IActivityHistoryCommonFilterGroup[] = [\n {\n id: \"common\",\n title: \"Comuns\",\n filters: [\n {\n id: relevantFilterId,\n title: \"Veure rellevants\",\n spec: RelevantSpec,\n enabled: false,\n type: ActivityHistoryFilterType.Switch,\n },\n {\n id: ownFilterId,\n title: \"Veure meus\",\n spec: OwnSpec,\n enabled: false,\n type: ActivityHistoryFilterType.Switch,\n },\n ],\n },\n];\n","import { PayloadAction } from \"@reduxjs/toolkit\";\n\nexport function setCommonFilterValueReducer(\n state,\n action: PayloadAction<{ id: string; enabled: boolean }>,\n) {\n state.filters = state.filters.map((f) => {\n if (f.id === \"common\") {\n return {\n ...f,\n filters: f.filters.map((ff) =>\n ff.id === action.payload.id ? { ...ff, enabled: action.payload.enabled } : ff,\n ),\n };\n }\n return f;\n });\n}\n","import { PayloadAction } from \"@reduxjs/toolkit\";\nimport { IActivityHistoryCustomFilterGroup } from \"../../model\";\n\nexport function addCustomFiltersReducer(\n state,\n action: PayloadAction<IActivityHistoryCustomFilterGroup>,\n) {\n const exists = state.filters.some((filter) => filter.id === action.payload.id);\n\n if (!exists) {\n state.filters = [...state.filters, action.payload];\n }\n}\n","import { isCustomFilter } from \"../../model\";\n\nexport function clearCustomFiltersReducer(state) {\n state.filters = state.filters.filter((filter) => !isCustomFilter(filter));\n}\n","import { PayloadAction } from \"@reduxjs/toolkit\";\nimport { SetCustomFilterAllValuesPayload } from \"./request\";\n\nexport function setCustomFilterAllValuesReducer(\n state,\n action: PayloadAction<SetCustomFilterAllValuesPayload>,\n) {\n state.filters = state.filters.map((f) => {\n if (f.id === action.payload.filterGroupId) {\n return {\n ...f,\n filters: f.filters.map((ff) =>\n ff.id === action.payload.filterId\n ? { ...ff, enabledValues: action.payload.values }\n : ff,\n ),\n };\n }\n return f;\n });\n}\n","import { PayloadAction } from \"@reduxjs/toolkit\";\n\nexport function setCustomFilterGroupValueReducer(\n state,\n action: PayloadAction<{ id: string; enabled: boolean }>,\n) {\n //seteamos el valor de enabled en el filterGroup, y ademas vamos a todos los hijos y deshabilitamos todas sus opciones si estamos deshabilitando el grupo.\n state.filters = state.filters.map((f) => {\n if (f.id === action.payload.id) {\n return {\n ...f,\n enabled: action.payload.enabled,\n };\n }\n return f;\n });\n}\n","import { PayloadAction } from \"@reduxjs/toolkit\";\nimport { SetCustomFilterValuePayload } from \"./request\";\nimport { IActivityHistoryCustomFilter } from \"../../model\";\n\nexport function setCustomFilterValueReducer(\n state,\n action: PayloadAction<SetCustomFilterValuePayload>,\n) {\n state.filters = state.filters.map((f) => {\n if (f.id === action.payload.filterGroupId) {\n return {\n ...f,\n filters: f.filters.map((ff) =>\n ff.id === action.payload.filterId\n ? ff.singleOption\n ? setSingleOptionFilterValue(ff, action.payload.enabled)\n : setMultipleOptionsFilterValue(ff, action.payload)\n : ff,\n ),\n };\n }\n return f;\n });\n}\n\nconst setMultipleOptionsFilterValue = (\n filter: IActivityHistoryCustomFilter,\n payload: SetCustomFilterValuePayload,\n) => {\n const { optionId, enabled } = payload;\n //Si el option ya estaba habilitado, no cambiamos nada\n if (filter.enabledValues?.some((id) => id === optionId) && enabled) return filter;\n //Si no hay option id, devolvemos enabledValues vació, para evitar meter un undefined\n if(optionId === undefined || optionId === null)\n return {\n ...filter,\n enabledValues: [],\n };\n return {\n ...filter,\n enabledValues: enabled\n ? [...(filter.enabledValues || []), optionId]\n : filter.enabledValues.filter((id) => id !== optionId),\n };\n};\n\nconst setSingleOptionFilterValue = (filter, value: boolean) => {\n return {\n ...filter,\n enabled: value,\n enabledValues: value ? [true] : [],\n };\n};\n","import { PayloadAction } from \"@reduxjs/toolkit\";\nimport { IActivityHistoryDiagnosticsFilter, isDiagnosticFilter, IDiagnosticWithRelations } from \"../../model\";\n\nexport function deleteDiagnosticFilterValueReducer(state, action: PayloadAction<{ diagnosticCodi: string }>) {\n const diagnosticFilterExists = state.filters.some(isDiagnosticFilter);\n\n if (diagnosticFilterExists) {\n state.filters = [...state.filters].map((f) => {\n if (isDiagnosticFilter(f)) {\n // Filtrar el diagnostic pare i tots els seus fills (evolucions i relacions)\n const updatedDiagnostics = f.enabledValues.filter((diagnostic: IDiagnosticWithRelations) => {\n // Esborrar si és el diagnostic pare\n if (diagnostic.codi === action.payload.diagnosticCodi) {\n return false;\n }\n\n // Esborrar si és una evolució del diagnostic pare\n const isEvolution = f.enabledValues.some((parent: IDiagnosticWithRelations) =>\n parent.codi === action.payload.diagnosticCodi &&\n parent.evolucions?.some(ev => ev.codi === diagnostic.codi)\n );\n\n // Esborrar si és una relació del diagnostic pare\n const isRelation = f.enabledValues.some((parent: IDiagnosticWithRelations) =>\n parent.codi === action.payload.diagnosticCodi &&\n parent.relacions?.some(rel => rel.codi === diagnostic.codi)\n );\n\n return !isEvolution && !isRelation;\n });\n\n return { ...f, enabledValues: updatedDiagnostics } as IActivityHistoryDiagnosticsFilter;\n }\n return f;\n });\n }\n}\n","import { PayloadAction } from \"@reduxjs/toolkit\";\nimport { IActivityHistoryDiagnosticsFilter, isDiagnosticFilter, diagnosticsfilterId, IDiagnosticWithRelations } from \"../../model\";\n\nexport function setDiagnosticFilterValuesReducer(state, action: PayloadAction<IDiagnosticWithRelations[]>) {\n const diagnosticFilterExists = state.filters.some(isDiagnosticFilter);\n\n if (diagnosticFilterExists) {\n // Si el filtre existeix, actualitzar-lo\n state.filters = [...state.filters].map((f) => {\n if (isDiagnosticFilter(f)) {\n return { ...f, enabledValues: action.payload } as IActivityHistoryDiagnosticsFilter;\n }\n return f;\n });\n } else {\n // Si el filtre no existeix, crear-lo\n const newDiagnosticFilter: IActivityHistoryDiagnosticsFilter = {\n id: diagnosticsfilterId,\n title: \"Diagnòstics\",\n values: [],\n enabledValues: action.payload,\n };\n state.filters = [...state.filters, newDiagnosticFilter];\n }\n}\n","import { PayloadAction } from \"@reduxjs/toolkit\";\nimport { commonFilters } from \"../common-filters/common-filters\";\n\nexport function resetFiltersReducer(state, action: PayloadAction<void>) {\n state.filters = state.filters.map((f) => {\n if (f.id !== \"common\" && f.id !== \"history-diagnostics\" && f.id !== \"history-up\") {\n return {\n ...f,\n filters: f.filters.map((ff) => {\n if(ff.singleOption)\n return {...ff, enabled: false}\n return {...ff, enabled: true, enabledValues: []}\n }),\n };\n }\n\n if(f.id === \"history-diagnostics\" || f.id === \"history-up\") {\n return {\n ...f,\n enabledValues: [],\n };\n }\n if(f.id === \"common\") {\n return commonFilters[0]\n }\n return f;\n });\n}\n","import { PayloadAction } from \"@reduxjs/toolkit\";\nimport { IActivityHistoryUpFilter, isUpFilter } from \"../../model\";\n\nexport function addUpFiltersReducer(state, action: PayloadAction<IActivityHistoryUpFilter>) {\n const index = state.filters.findIndex(isUpFilter);\n\n if (index === -1) {\n state.filters.push(action.payload);\n } else {\n const existing = state.filters[index];\n\n const mergedValues = [\n ...existing.values,\n ...action.payload.values.filter((v) => !existing.values.some((ev) => ev.value === v.value)),\n ];\n\n state.filters[index] = {\n ...existing,\n values: mergedValues,\n };\n }\n}\n","import { PayloadAction } from \"@reduxjs/toolkit\";\nimport { IActivityHistoryUpFilter, isUpFilter } from \"../../model\";\n\nexport function setUpFilterValuesReducer(state, action: PayloadAction<string[]>) {\n state.filters = [...state.filters].map((f) => {\n if (isUpFilter(f)) {\n return { ...f, enabledValues: action.payload } as IActivityHistoryUpFilter;\n }\n return f;\n });\n}\n","import { createSlice } from \"@reduxjs/toolkit\";\nimport { setSearchStringReducer } from \"../search/reducer\";\nimport { commonFilters } from \"./common-filters/common-filters\";\nimport { setCommonFilterValueReducer } from \"./common-filters/set-common-filter/reducer\";\nimport { addCustomFiltersReducer } from \"./custom-filters/add-custom-filters/reducer\";\nimport { clearCustomFiltersReducer } from \"./custom-filters/clear-custom-filters/reducer\";\nimport { setCustomFilterAllValuesReducer } from \"./custom-filters/set-custom-filter-all-values/reducer\";\nimport { setCustomFilterGroupValueReducer } from \"./custom-filters/set-custom-filter-group/reducer\";\nimport { setCustomFilterValueReducer } from \"./custom-filters/set-custom-filter-value/reducer\";\nimport { deleteDiagnosticFilterValueReducer } from \"./diagnostic-filters/delete/reducer\";\nimport { setDiagnosticFilterValuesReducer } from \"./diagnostic-filters/set/reducer\";\nimport { IActivityHistoryFilter } from \"./model\";\nimport { resetFiltersReducer } from \"./reset/reducer\";\nimport { addUpFiltersReducer } from \"./up-filters/add/reducer\";\nimport { setUpFilterValuesReducer } from \"./up-filters/set/reducer\";\n\nexport const activityHistoryFiltersSlice = createSlice({\n name: \"activity-history-filters\",\n initialState: {\n searchString: \"\",\n filters: [...commonFilters] as IActivityHistoryFilter[],\n },\n reducers: {\n setSearchString: setSearchStringReducer,\n setCommonFilterValue: setCommonFilterValueReducer,\n addCustomFilters: addCustomFiltersReducer,\n clearCustomFilters: clearCustomFiltersReducer,\n setCustomFilterGroupValue: setCustomFilterGroupValueReducer,\n setCustomFilterValue: setCustomFilterValueReducer,\n setCustomFilterAllValues: setCustomFilterAllValuesReducer,\n setDiagnosticFilterValues: setDiagnosticFilterValuesReducer,\n deleteDiagnosticFilterValue: deleteDiagnosticFilterValueReducer,\n addUpFilters: addUpFiltersReducer,\n setUpFilterValues: setUpFilterValuesReducer,\n resetFilters: resetFiltersReducer,\n },\n});\n","import { configureStore } from \"@reduxjs/toolkit\";\nimport { activityHistoryCollectionsSlice } from \"../../activity-history-item/slice\";\nimport { activityHistoryFiltersSlice } from \"../../activity-history-item/filter/slice\";\n\nexport type RootState = ReturnType<typeof store.getState>;\nexport type AppDispatch = typeof store.dispatch;\n\nexport const store = configureStore({\n reducer: {\n activityHistoryCollections: activityHistoryCollectionsSlice.reducer,\n activityHistoryFilters: activityHistoryFiltersSlice.reducer,\n },\n devTools: {\n name: \"activity-history\",\n },\n middleware: (getDefaultMiddleware) =>\n getDefaultMiddleware({\n serializableCheck: false, // Disable serializable state invariant middleware\n }),\n});\n\nexport const dispatch = store.dispatch;\nexport const getState = store.getState;\n","import { Container } from \"inversify\";\nimport getDecorators from \"inversify-inject-decorators\";\nimport { PrimariaApi } from \"@uxland/primary-shell\";\nimport { TYPES } from \"./types\";\nimport { store } from \"../state/store\";\nconst container = new Container();\nconst { lazyInject } = getDecorators(container, false);\n\nexport { container, lazyInject };\n\nexport const bindDeps = (api: PrimariaApi) => {\n container.bind(TYPES.primaryApi).toConstantValue(api);\n container.bind(TYPES.store).toConstantValue(store);\n};\n\nexport const unbindDeps = () => {\n container.unbind(TYPES.primaryApi);\n container.unbind(TYPES.store);\n};\n","import { inject, injectable } from \"inversify\";\nimport { TYPES } from \"./ioc/types\";\nimport { Store } from \"@reduxjs/toolkit\";\nimport { PrimariaApi } from \"@uxland/primary-shell\";\n\n@injectable()\nexport class StoreBaseHandler {\n constructor(@inject(TYPES.store) protected readonly store: Store) {}\n}\n\n@injectable()\nexport class ApiBaseHandler {\n constructor(@inject(TYPES.primaryApi) protected readonly api: PrimariaApi) {}\n}\n\n@injectable()\nexport class BaseHandler {\n constructor(\n @inject(TYPES.store) protected readonly store: Store,\n @inject(TYPES.primaryApi) protected readonly api: PrimariaApi,\n ) {}\n}\n","import { activityHistoryCollectionsSlice } from \"../../slice\";\n\nexport const { addBusyHistoryItem, removeBusyHistoryItem } =\n activityHistoryCollectionsSlice.actions;\n","import { activityHistoryCollectionsSlice } from \"../../slice\";\n\nexport const { addErrorHistoryItem, removeErrorHistoryItem } =\n activityHistoryCollectionsSlice.actions;\n","import { IActivityHistoryItem } from \"../../domain/model\";\nimport { InjectAsyncHistoryItemsPayload } from \"./request\";\n\nexport const validateAddAsyncCommand = (payload: InjectAsyncHistoryItemsPayload, items: IActivityHistoryItem[]) => {\n if(!payload.filters)\n throw new Error(\"filters is required\");\n if(payload.entityId !== payload.filters.id)\n throw new Error(\"entityId and filters.id must be the same\");\n if(!payload.filters.title)\n throw new Error(\"filters.title is required\");\n if(!payload.asyncDataProvider)\n throw new Error(\"asyncDataProvider is required\");\n if(!payload.componentFactory)\n throw new Error(\"componentFactory is required\");\n if(!payload.errorMessage)\n throw new Error(\"errorMessage is required for failure asyncDataProviders\");\n if(items === null || items === undefined)\n throw new Error(\"items is required\");\n if(!Array.isArray(items))\n throw new Error(\"items must be an array\");\n};","import { BaseHandler } from \"../../../infrastructure/base-handlers\";\nimport { AddCustomFiltersCommand } from \"../../filter/custom-filters/add-custom-filters/request\";\nimport { addBusyHistoryItem, removeBusyHistoryItem } from \"../handle-busy/actions\";\nimport { addErrorHistoryItem } from \"../handle-error/actions\";\nimport { InjectAsyncHistoryItemsPayload } from \"./request\";\nimport { validateAddAsyncCommand } from \"./validate-add-async-items-command\";\n\nexport class InjectAsyncHistoryItemsHandler extends BaseHandler {\n async handle(payload: InjectAsyncHistoryItemsPayload) {\n this.store.dispatch(addBusyHistoryItem(payload.entityId));\n try {\n const items = await payload.asyncDataProvider();\n validateAddAsyncCommand(payload, items);\n this.api.broker.send(this.api.broker.events.activityHistory.addHistoryItemsRequest, {\n entityId: payload.entityId,\n entityDescription: payload.entityDescription,\n items,\n componentFactory: payload.componentFactory,\n searchPredicate: payload.searchPredicate,\n filters: payload.filters,\n historyDataImporterRules: payload.historyDataImporterRules,\n });\n } catch (e) {\n console.error(e.message);\n this.store.dispatch(\n addErrorHistoryItem({\n entityId: payload.entityId,\n message: payload.errorMessage || e.message,\n entityDescription: payload.entityDescription,\n }),\n );\n } finally {\n this.store.dispatch(removeBusyHistoryItem(payload.entityId));\n }\n }\n}\n","import { BrokerExtensions } from \"@primaria/plugins-core\";\nimport { BrokerDisposableHandler, PrimariaApi } from \"@uxland/primary-shell\";\nimport { InjectAsyncHistoryItemsHandler } from \"./handler\";\n\nlet request: BrokerDisposableHandler;\n\nexport const bootstrapInjectAsyncHistoryItems = (broker: BrokerExtensions, api: PrimariaApi) => {\n request = broker.registerRequest(\n api.broker.events.activityHistory.injectAsyncHistoryItemsRequest,\n InjectAsyncHistoryItemsHandler,\n );\n};\n\nexport const teardownInjectAsyncHistoryItems = () => {\n request?.dispose();\n};\n","import { PrimariaApi } from \"@uxland/primary-shell\";\n\ntype LocaleKeys<T> = T extends object\n ? {\n [K in keyof T]: `${K & string}` | (T[K] extends object ? `${K & string}.${LocaleKeys<T[K]>}` : never);\n }[keyof T]\n : never;\n\nexport type ActivityHistoryLocales = LocaleKeys<(typeof locales)[typeof defaultLang][\"activity-history\"]>;\n\nconst defaultLang = \"ca\";\n\nlet pluginLocaleManager;\n\nexport const initializeLocalization = async (api: PrimariaApi) => {\n pluginLocaleManager = await api.createLocaleManager(locales);\n};\n\nexport const translate = (path: ActivityHistoryLocales) => {\n if (pluginLocaleManager) return (pluginLocaleManager as any).translate(path);\n return path;\n};\n\nexport const locales = {\n ca: {\n \"activity-history\": {\n activityHistory: \"Històric d’activitat\",\n importer: {\n title: \"Històric d’activitat\",\n searchPlaceholder: \"Escriu per cercar\",\n selectAll: \"Seleccionar tot\",\n filters: \"Filtres:\",\n today: \"Avui\",\n diagnostics: \"Diagnòstics associats\",\n noResults: \"Sense resultats\",\n },\n search: \"Cercar\",\n searchPlaceholder: \"Escriu per cercar\",\n groupedView: \"Visió agrupada\",\n maximize: \"Ampliar\",\n deleted: \"Eliminat\",\n goToDate: \"Anar a data\",\n busyEntriesLoading: \"Carregant totes les entrades\",\n noResults: \"Sense resultats. Modifica la cerca\",\n noData: {\n title: \"Sense dades\",\n description: \"No existeix informació per a mostrar\",\n },\n isGrouping: \"Creant agrupacions i preparant les dades...\",\n searchBarResults: \"Resultats per\",\n actions: {\n cronogram: \"Cronograma\",\n exportPdf: \"Exportar PDF\",\n moreOptions: \"Més opcions\",\n refresh: \"Actualitzar\",\n entryLegend: \"Llegenda entrades\",\n maximizeButton: \"Botó maximitzar\",\n minimizeButton: \"Botó minimitzar\",\n menuButton: \"Botó menu\",\n },\n modal: {\n selectExportOption: \"Tria una opció d'exportació\",\n allActivityHistory: \"Tot l’històric d’activitat\",\n onlyAppliedFilters: \"Només amb filtres aplicats\",\n selectDateRange: \"En el cas que sigui necessari, selecciona un rang de dates\",\n helpText:\n \"Sense seleccionar data, s'aplicarà la de la primera entrada. Sense seleccionar data de fi, s'aplicarà la de l'última entrada.\",\n startDate: \"Data Inici\",\n endDate: \"Data Fi\",\n cancel: \"Cancel·lar\",\n export: \"Exportar\",\n },\n filters: {\n filters: \"Filtres\",\n searchFilter: \"Cercar filtre\",\n ownFilters: \"Els meus\",\n rellevantFilters: \"Rellevants\",\n episode: \"Episodi\",\n\n dates: \"Dates\",\n diagnoses: \"Diagnòstics\",\n clinicalCourseType: \"Tipus Curs Clínic\",\n\n selected: \"seleccionats\",\n applyFilters: \"Aplicar filtres\",\n\n deleted: \"Eliminats\",\n },\n tooltips: {\n subjective: \"Subjectiu\",\n UPconfidenciality: \"Confidencialitat: per a la meva UP\",\n },\n grouped: {\n clinicalCourses: \"Cursos clínics\",\n activities: \"Activitats\",\n variablees: \"Variables\",\n prescriptions: \"Prescripcions\",\n },\n chipHeader: {\n selection: \"Selecció:\",\n without: \"Sense\",\n cleanFilters: \"Netejar filtres\",\n },\n error: {\n general: {\n title: \"Hi ha hagut un problema durant la càrrega de contingut. Actualitza la pàgina o torna-ho a provar més tard.\",\n refresh: \"Actualitzar pàgina\",\n noInfo: \"No hi ha informació disponible.\",\n },\n partial: {\n title: \"Hi ha hagut un problema i no s'ha pogut carregar les notes de tipus\",\n refresh: \"Actualitzar\",\n limit: \"Límit de clicks superat\",\n },\n title: \"Error en la càrrega\",\n viewDetails: \"Veure detalls\",\n imageAlt: \"Imatge d'error\",\n errorToRefresh: \"Error en l'acció d'actualitzar la pàgina\",\n itemAlreadyExists: \"Aquest element ja existeix al històric d'activitat\",\n allItemsAlreadyExist: \"Tots els elements ja existeixen al històric d'activitat\",\n filterNotInitialized:\n \"No s'han pogut afegir elements ja que aquesta iniciativa no ha sigut inicialitzada a l'Històric d'Activitat.\",\n },\n warning: {\n someItemsAlreadyExist: \"Alguns elements ja existien al històric d'activitat i no s'han afegit\",\n },\n },\n },\n};\n","import { IActivityHistoryItem, IActivityHistoryItemCollection } from \"./model\";\n\n/**\n * Checks if an item with the given ID already exists in the specified collection\n * @param collections - Record of all activity history collections\n * @param entityId - The collection ID to check in\n * @param itemId - The item ID to check for\n * @returns true if the item exists in the collection, false otherwise\n */\nexport const existItemInCollection = (\n collections: Record<string, IActivityHistoryItemCollection>,\n entityId: string,\n itemId: string,\n): boolean => {\n const collection = collections?.[entityId];\n if (!collection?.items) {\n return false;\n }\n\n return collection.items.some((existingItem: IActivityHistoryItem) => existingItem.id === itemId);\n};\n","export const isString = (value) => typeof value === \"string\" && value.trim() !== \"\";\nexport const isBoolean = (value) => typeof value === \"boolean\";\nexport const isArray = (value) => Array.isArray(value);\n\n// Función para comprobar si un string representa una fecha válida\nexport const isValidDateString = (value: any) => {\n if (typeof value !== \"string\" || value.trim() === \"\") return false;\n\n const date = new Date(value);\n return date instanceof Date && !Number.isNaN(date.getTime());\n};\n","import { IActivityHistoryItem } from \"../model\";\nimport { isString, isValidDateString } from \"./utils\";\n\nexport const isValidBasicActivityHistoryItem = (obj: IActivityHistoryItem) => {\n // Comprobación del objeto principal\n return (\n obj &&\n isString(obj.id) && // Verifica que \"id\" esté informado\n isValidDateString(obj.date) // Verifica que \"date\" sea un string de fecha válido\n );\n};\n\nexport const ensureAreValidBasicActivityHistoryItems = (items: IActivityHistoryItem[]) => {\n const areValid = items.every(isValidBasicActivityHistoryItem);\n if (!areValid) {\n console.error(\"Invalid activity history items\", items);\n throw new Error(\"Invalid activity history items\");\n }\n return items;\n};\n\nconst notifyInvalidItem = (item: IActivityHistoryItem) => {\n console.error(\"Invalid history item\", item);\n};\n\nexport const validateAndFilterBasicItems = (items: IActivityHistoryItem[]) => {\n const validItems = [] as IActivityHistoryItem[];\n for (const item of items) {\n if (isValidBasicActivityHistoryItem(item)) validItems.push(item);\n else notifyInvalidItem(item);\n }\n return validItems;\n};\n","import { mapArrayToLabelValue } from \"@primaria/plugins-core\";\nimport { Store } from \"@reduxjs/toolkit\";\nimport { IActivityHistoryItem } from \"../../domain/model\";\nimport { upFilterId } from \"../model\";\nimport { activityHistoryFiltersSlice } from \"../slice\";\n\nexport const getUpFilter = (items: IActivityHistoryItem[]) => {\n const allUps = items\n .flatMap((item) => item.up ?? [])\n .filter((up) => up?.id?.trim()) // Filtrar UPs que tienen ID válido (no vacío ni solo espacios)\n .filter((up, index, self) => index === self.findIndex((u) => u.id === up.id)); // Filtrar duplicados\n\n if (allUps.length > 0) {\n const newUpFilter = {\n id: upFilterId,\n title: \"UP\",\n values: mapArrayToLabelValue(allUps, \"description\", \"id\"),\n enabledValues: [],\n };\n\n return newUpFilter;\n }\n};\n\nexport const handleAddUpFilter = (items: IActivityHistoryItem[], store: Store) => {\n const newUpFilter = getUpFilter(items);\n if (newUpFilter)\n store.dispatch(activityHistoryFiltersSlice.actions.addUpFilters(newUpFilter));\n};\n","import { activityHistoryCollectionsSlice } from \"../../slice\";\n\nexport const { addActivityHistoryItem } = activityHistoryCollectionsSlice.actions;\n","import { BaseHandler } from \"../../../infrastructure/base-handlers\";\nimport { translate } from \"../../../localization\";\nimport { existItemInCollection } from \"../../domain/exist-item-in-collection\";\nimport { ensureAreValidBasicActivityHistoryItems } from \"../../domain/validation/is-valid-basic-history-item\";\nimport { handleAddUpFilter } from \"../../filter/up-filters/handle-add-up-options-from-item\";\nimport { addActivityHistoryItem } from \"./action\";\nimport { AddHistoryItemPayload } from \"./request\";\n\nexport class AddHistoryItemHandler extends BaseHandler {\n async handle(payload: AddHistoryItemPayload) {\n try {\n ensureAreValidBasicActivityHistoryItems([payload.item]);\n\n // Check if item already exists in the collection\n const state = this.store.getState();\n const itemExists = existItemInCollection(state.activityHistoryCollections?.collections, payload.entityId, payload.item.id);\n const existFilterGroup = state.activityHistoryFilters?.filters?.find((item) => item.id === payload.entityId);\n if (itemExists) {\n throw new Error(translate(\"error.itemAlreadyExists\"));\n }\n\n if (!existFilterGroup) {\n throw new Error(translate(\"error.filterNotInitialized\"));\n }\n\n handleAddUpFilter([payload.item], this.store);\n this.store.dispatch(\n addActivityHistoryItem({\n id: payload.entityId,\n item: payload.item,\n componentFactory: payload.componentFactory,\n }),\n );\n } catch (e) {\n this.api.notificationService.error(e.message);\n }\n }\n}\n","import { BrokerExtensions } from \"@primaria/plugins-core\";\nimport { BrokerDisposableHandler, PrimariaApi } from \"@uxland/primary-shell\";\nimport { AddHistoryItemHandler } from \"./handler\";\n\nlet request: BrokerDisposableHandler;\n\nexport const bootstrapAddHistoryItem = (broker: BrokerExtensions, api: PrimariaApi) => {\n request = broker.registerRequest(api.broker.events.activityHistory.addHistoryItemRequest, AddHistoryItemHandler);\n};\n\nexport const teardownAddHistoryItem = () => {\n request?.dispose();\n};\n","import { IActivityHistoryCustomFilterGroup } from \"../../model\";\n\nexport class AddCustomFiltersCommand {\n constructor(public payload: IActivityHistoryCustomFilterGroup) {}\n}\n","import { activityHistoryCollectionsSlice } from \"../../slice\";\n\nexport const { addActivityHistoryItems } = activityHistoryCollectionsSlice.actions;\n","import { BaseHandler } from \"../../../infrastructure/base-handlers\";\nimport { translate } from \"../../../localization\";\nimport { existItemInCollection } from \"../../domain/exist-item-in-collection\";\nimport { IActivityHistoryItem } from \"../../domain/model\";\nimport { validateAndFilterBasicItems } from \"../../domain/validation/is-valid-basic-history-item\";\nimport { AddCustomFiltersCommand } from \"../../filter/custom-filters/add-custom-filters/request\";\nimport { handleAddUpFilter } from \"../../filter/up-filters/handle-add-up-options-from-item\";\nimport { addActivityHistoryItems } from \"./action\";\nimport { AddHistoryItemsPayload } from \"./request\";\n\nexport class AddHistoryItemsHandler extends BaseHandler {\n async handle(payload: AddHistoryItemsPayload) {\n try {\n const validItems = validateAndFilterBasicItems(payload.items);\n const newItems = this.filterDuplicateItems(validItems, payload.entityId);\n const state = this.store.getState();\n const existFilterGroup = state.activityHistoryFilters?.filters?.find((item) => item.id === payload.entityId);\n\n // Los filtros son obligatorios: debe existir un grupo previo O proporcionar uno nuevo\n if (!existFilterGroup && !payload.filters) {\n throw new Error(translate(\"error.filterNotInitialized\"));\n }\n\n if (newItems.length > 0) {\n handleAddUpFilter(newItems, this.store);\n }\n\n this.store.dispatch(\n addActivityHistoryItems({\n id: payload.entityId,\n items: newItems,\n componentFactory: payload.componentFactory,\n searchPredicate: payload.searchPredicate,\n historyDataImporterRules: payload.historyDataImporterRules,\n }),\n );\n\n if (payload.filters) {\n this.api.broker.send(new AddCustomFiltersCommand(payload.filters));\n }\n } catch (e) {\n this.api.notificationService.error(e.message);\n }\n }\n\n private filterDuplicateItems(validItems: IActivityHistoryItem[], entityId: string): IActivityHistoryItem[] {\n if (validItems.length === 0) {\n return [];\n }\n\n const state = this.store.getState();\n const newItems = validItems.filter(\n (item) => !existItemInCollection(state.activityHistoryCollections?.collections, entityId, item.id),\n );\n\n // If all items already exist, throw error\n if (newItems.length === 0 && validItems.length > 0) {\n throw new Error(translate(\"error.allItemsAlreadyExist\"));\n }\n\n // If some items were filtered, show warning\n if (newItems.length < validItems.length) {\n this.api.notificationService.warning(translate(\"warning.someItemsAlreadyExist\"));\n }\n\n return newItems;\n }\n}\n","import { BrokerExtensions } from \"@primaria/plugins-core\";\nimport { BrokerDisposableHandler, PrimariaApi } from \"@uxland/primary-shell\";\nimport { AddHistoryItemsHandler } from \"./handler\";\n\nlet request: BrokerDisposableHandler;\n\nexport const bootstrapAddHistoryItems = (broker: BrokerExtensions, api: PrimariaApi) => {\n request = broker.registerRequest(api.broker.events.activityHistory.addHistoryItemsRequest, AddHistoryItemsHandler);\n};\n\nexport const teardownAddHistoryItems = () => {\n request?.dispose();\n};\n","import { createConnectedProperty } from \"@primaria/plugins-core\";\nimport { store } from \"./store\";\n\nexport function connectedProperty(selector: (state: any) => any, options: any = {}) {\n return createConnectedProperty(store)(selector, options);\n}\n","import { RootState } from \"../../../infrastructure/state/store\";\n\nexport const isAnyCollectionBusySelector = (state: RootState) => state.activityHistoryCollections.busy.length > 0;\n\nexport const isSomeCollectionLoadedAndOtherLoading = (state: RootState) => {\n const collections = Object.values(state.activityHistoryCollections.collections);\n return collections && isAnyCollectionBusySelector(state);\n};\n\nexport const isEmptyDataAndOtherLoading = (state: RootState) => {\n const collections = Object.values(state.activityHistoryCollections.collections);\n return !collections?.length && isAnyCollectionBusySelector(state);\n};\n","import { html, nothing } from \"lit\";\nimport { ActivityHistoryBusy } from \"./component\";\nimport { translate } from \"../../../../localization\";\n\nexport const template = (props: ActivityHistoryBusy) =>\n props.isEmptyDataAndOtherLoading\n ? html`<div class=\"skeleton-container\">${props.skeletons}</div>`\n : props.isSomeCollectionLoadedAndOtherLoading\n ? html`<div class=\"spinner-container\"><dss-spinner size=\"sm\"></dss-spinner><div class=\"busy-description\">${translate(\"busyEntriesLoading\")}</div></div>`\n : nothing;\n","import { LitElement, css, html, unsafeCSS } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\nimport { connectedProperty } from \"../../../../infrastructure/state/connected-property\";\nimport { isEmptyDataAndOtherLoading, isSomeCollectionLoadedAndOtherLoading } from \"../selectors\";\nimport styles from \"./styles.css?inline\";\nimport { template } from \"./template\";\n\n//@ts-ignore\n@customElement(\"activity-history-busy\")\nexport class ActivityHistoryBusy extends LitElement {\n render() {\n return html`${template(this)}`;\n }\n\n static styles = css`\n ${unsafeCSS(styles)}\n `;\n\n @connectedProperty(isSomeCollectionLoadedAndOtherLoading)\n isSomeCollectionLoadedAndOtherLoading: boolean;\n\n @connectedProperty(isEmptyDataAndOtherLoading)\n isEmptyDataAndOtherLoading: boolean;\n\n get skeletons() {\n return Array.from({ length: 12 }, () => html`<dss-skeleton width=\"100\" height=\"10\"></dss-skeleton>`);\n }\n}\n","import { IErrorHistoryItem } from \"../../../domain/model\";\n\nexport class HandleHistoryItemsAddError {\n constructor(public entities: Array<IErrorHistoryItem>) {}\n}","import { BaseHandler } from \"../../../../infrastructure/base-handlers\";\nimport { translate } from \"../../../../localization\";\nimport { removeErrorHistoryItem } from \"../actions\";\nimport { HandleHistoryItemsAddError } from \"./request\";\n\nexport class HandleHistoryItemsAddErrorHandler extends BaseHandler {\n async handle(payload: HandleHistoryItemsAddError) {\n try {\n const entityIdsWithError = payload.entities.map((error) => error.entityId);\n\n await this.dispatchRemoveErrorItems(entityIdsWithError);\n\n this.api.broker.publish(this.api.broker.events.activityHistory.errorLoadingData, entityIdsWithError);\n } catch (e) {\n this.api.notificationService.error(translate(\"error.errorToRefresh\"));\n }\n }\n\n private async dispatchRemoveErrorItems(entityIds: string[]) {\n for (const entityId of entityIds) {\n this.store.dispatch(removeErrorHistoryItem(entityId));\n }\n }\n}\n","import { BrokerDisposableHandler } from \"@uxland/primary-shell\";\nimport { HandleHistoryItemsAddError } from \"./request\";\nimport { HandleHistoryItemsAddErrorHandler } from \"./handler\";\nimport { BrokerExtensions } from \"@primaria/plugins-core\";\n\nlet request: BrokerDisposableHandler;\n\nexport const bootstrapHandleHistoryItemsAddError = (broker: BrokerExtensions) => {\n teardownHandleHistoryItemsAddError();\n request = broker.registerRequest(HandleHistoryItemsAddError, HandleHistoryItemsAddErrorHandler);\n};\n\nexport const teardownHandleHistoryItemsAddError = () => {\n request?.dispose();\n};\n","import { html, nothing } from \"lit\";\nimport { ExportPdfModal } from \"./export-pdf-modal\";\nimport { translate } from \"../../../localization\";\n\nexport const template = (props: ExportPdfModal) => {\n return html`\n <div class=\"wrapper\">\n <div class=\"content-options\">\n <div class=\"selector-options\">\n <dss-radio-button-group\n hideLabel\n label=${translate(\"modal.selectExportOption\")}\n name=\"exportOption\"\n @value-changed=${(e) => {\n props.selectedRadioOption = e.detail.value;\n }}\n >\n <dss-radio-button value=\"history\" label=${translate(\"modal.allActivityHistory\")}></dss-radio-button>\n <dss-radio-button value=\"filters\" label=${translate(\"modal.onlyAppliedFilters\")}></dss-radio-button>\n </dss-radio-button-group>\n </div>\n </div>\n ${\n props.selectedRadioOption\n ? html`<div class=\"content-date\">\n <span>${translate(\"modal.selectDateRange\")}</span>\n <div class=\"datepicker-canvas\">\n <dss-datepicker-range\n size=\"md\"\n labelRangeStart=${translate(\"modal.startDate\")}\n labelRangeEnd=${translate(\"modal.endDate\")}\n helpText=${translate(\"modal.helpText\")}\n @value-changed=${(e) => {\n props.selectedPeriodDate = e.detail;\n }}\n ></dss-datepicker-range>\n </div>\n </div>`\n : nothing\n }\n </div>`;\n};\n","import { LitElement, css, html, unsafeCSS } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport styles from \"./export-pdf-modal.css?inline\";\nimport { template } from \"./template\";\n\n@customElement(\"export-pdf-modal\")\nexport class ExportPdfModal extends LitElement {\n render() {\n return html`\n ${template(this)} \n `;\n }\n\n static get styles() {\n return css`\n ${unsafeCSS(styles)}\n `;\n }\n\n @property()\n selectedRadioOption: string;\n\n @property()\n text: string;\n\n @property()\n selectedVisibilityLevelElement;\n\n @property()\n selectedPeriodDate;\n\n @property({ type: Array })\n arrayElements = [\n { label: \"Element 1\", value: \"1\" },\n { label: \"Element 2\", value: \"2\" },\n { label: \"Element 3\", value: \"3\" },\n { label: \"Element 4\", value: \"4\" },\n ];\n\n handleTest() {\n console.log(\n // this.selectedVisibilityLevelElement,\n this.selectedPeriodDate,\n );\n }\n}\n","import { ApiBaseHandler } from \"../../infrastructure/base-handlers\";\nimport { translate } from \"../../localization\";\nimport { ExportPdfModal } from \"./export-pdf-modal/export-pdf-modal\";\n\nexport class ExportToPdfHandler extends ApiBaseHandler {\n async handle() {\n try {\n this.api.interactionService.confirm(undefined, {component: ExportPdfModal}, {\n title: translate(\"modal.selectExportOption\"),\n confirmButtonText: \"Exportar\",\n cancelButtonText: \"Cancelar\",\n });\n } catch (error) {\n this._notifyError(error.message);\n }\n }\n\n _notifyError(errorMessage?: string) {\n this.api.notificationService.error(\n errorMessage || \"actions.delete.error\",\n );\n }\n}\n","export class ExportPdf {}\n","import { BrokerExtensions } from \"plugins/core\";\nimport { ExportToPdfHandler } from \"./handler\";\nimport { ExportPdf } from \"./request\";\nimport { BrokerDisposableHandler } from \"@uxland/primary-shell\";\nimport \"./export-pdf-modal/export-pdf-modal\";\n\nlet request: BrokerDisposableHandler;\n\nexport const bootstrapExportPdf = (broker: BrokerExtensions) => {\n request = broker.registerRequest(ExportPdf, ExportToPdfHandler);\n};\n\nexport const teardownExportPdf = () => {\n request?.dispose();\n};\n","export function getUniqueObjects<T>(\n items: T[],\n propPathId: string[],\n propPathDescription: string[],\n filterTitle: string\n): { id: string; title: string }[] {\n const SENSE_TITLE = `Sense ${filterTitle.toLocaleLowerCase()}`;\n const map = new Map<string, { id: string; title: string }>();\n let hasSenseItem = false;\n\n for (const item of items) {\n const id = propPathId.reduce((acc, key) => acc?.[key], item);\n const title = propPathDescription.reduce((acc, key) => acc?.[key], item);\n\n const isValidId = typeof id === \"string\" && id.trim() !== \"\";\n\n //Tret el trim del title pels casos de migració on arriben camps buits\n const isValidTitle = typeof title === \"string\";\n\n if (isValidId && isValidTitle) {\n if (!map.has(id)) {\n map.set(id, { id, title });\n }\n } else {\n hasSenseItem = true;\n }\n }\n\n const result = Array.from(map.values()).sort((a, b) =>\n a.title.localeCompare(b.title, \"ca\", { sensitivity: \"base\" })\n );\n\n if (hasSenseItem) {\n result.push({ id: \"\", title: SENSE_TITLE });\n }\n\n return result;\n}","import { IActivityHistoryItem } from \"../model\";\nimport { Spec } from \"./spec\";\n\nexport class TrueSpec extends Spec<IActivityHistoryItem> {\n isSatisfiedBy(): boolean {\n return true;\n }\n}\n","import { IActivityHistoryCommonFilter } from \"../../filter\";\nimport { IActivityHistoryItem } from \"../model\";\nimport { Spec } from \"./spec\";\nimport { TrueSpec } from \"./true-spec\";\n\nexport class CommonFilterSpec extends Spec<IActivityHistoryItem> {\n constructor(private commonFilters: IActivityHistoryCommonFilter[]) {\n super();\n }\n\n isSatisfiedBy(item: IActivityHistoryItem): boolean {\n const enabledCommonFilters = this.commonFilters.filter((f) => f.enabled);\n const finalCommonSpec = enabledCommonFilters.reduce((acc, filter) => {\n return acc.and(new filter.spec());\n }, new TrueSpec());\n return finalCommonSpec.isSatisfiedBy(item);\n }\n}\n","import { IActivityHistoryItem } from \"../model\";\nimport { Spec } from \"./spec\";\n\nexport class FalseSpec extends Spec<IActivityHistoryItem> {\n isSatisfiedBy(): boolean {\n return false;\n }\n}\n","import { IActivityHistoryItem } from \"../model\";\nimport { Spec } from \"./spec\";\n\nexport class PropPathSpec extends Spec<IActivityHistoryItem> {\n constructor(\n public propPath: string[],\n private value: any,\n ) {\n super();\n }\n\n isSatisfiedBy(context: IActivityHistoryItem): boolean {\n // Reducir el context siguiendo el path hasta llegar al valor final\n const propValue = this.propPath.reduce((acc, key) => acc?.[key], context);\n\n // Comparar con el valor esperado\n return propValue === this.value;\n }\n}\n","import { IActivityHistoryCommonFilterGroup, IActivityHistoryCustomFilterGroup } from \"../../filter\";\nimport { IActivityHistoryItem } from \"../model\";\nimport { FalseSpec } from \"./false-spec\";\nimport { PropPathSpec } from \"./prop-path-spec\";\nimport { Spec } from \"./spec\";\n\nexport class CustomFilterSpec extends Spec<IActivityHistoryItem> {\n constructor(private filters: IActivityHistoryCustomFilterGroup[]) {\n super();\n }\n\n isSatisfiedBy(item: IActivityHistoryItem): boolean {\n const enabledGroups = this.filters.filter((group) => group.enabled);\n\n if (enabledGroups.length === 0) {\n return true; // No hay filtros activados, se aceptan todos los items\n }\n\n return enabledGroups.every((group) => {\n if (!this.belongsToGroup(item, group)) {\n return true;\n }\n\n const enabledFilters = group.filters.filter(\n (filter) => filter.enabled || filter.singleOption,\n );\n\n if (enabledFilters.length === 0) {\n return true;\n }\n\n return enabledFilters.every((filter) => {\n if (filter.singleOption) {\n // Si el filtro booleano está DESACTIVADO, debe filtrar los elementos con ese valor\n return !filter.enabled\n ? new PropPathSpec(filter.propPathValue, false).isSatisfiedBy(item)\n : true; // Si está activado, no filtra nada\n }\n\n if (!filter.enabledValues || filter.enabledValues.length === 0) {\n return true;\n }\n\n const propSpec = filter.enabledValues.reduce((acc, value) => {\n return acc.or(new PropPathSpec(filter.propPathValue, value));\n }, new FalseSpec());\n\n return propSpec.isSatisfiedBy(item);\n });\n });\n }\n\n private belongsToGroup(\n item: IActivityHistoryItem,\n group: IActivityHistoryCustomFilterGroup,\n ): boolean {\n return item.type === group.id;\n }\n}\n","import { IDiagnosticWithRelations } from \"../../filter/model\";\nimport { IActivityHistoryItem } from \"../model\";\nimport { Spec } from \"./spec\";\n\nexport class DiagnosticCodeSpec extends Spec<IActivityHistoryItem> {\n private diagnosticCodes: string[];\n\n constructor(diagnostics: IDiagnosticWithRelations[]) {\n super();\n this.diagnosticCodes = this.extractAllCodes(diagnostics);\n }\n\n private extractAllCodes(diagnostics: IDiagnosticWithRelations[]): string[] {\n const codes = new Set<string>();\n\n for (const diagnostic of diagnostics) {\n // Afegir el codi principal (pare)\n if (diagnostic.codi) {\n codes.add(diagnostic.codi);\n }\n // Afegir codis de les evolucions\n if (diagnostic.evolucions && Array.isArray(diagnostic.evolucions)) {\n for (const evolucio of diagnostic.evolucions) {\n if (evolucio.codi) {\n codes.add(evolucio.codi);\n }\n }\n }\n // Afegir codis de les relacions\n if (diagnostic.relacions && Array.isArray(diagnostic.relacions)) {\n for (const relacio of diagnostic.relacions) {\n if (relacio.codi) {\n codes.add(relacio.codi);\n }\n }\n }\n }\n\n return Array.from(codes);\n }\n\n isSatisfiedBy(item: IActivityHistoryItem): boolean {\n if (!this.diagnosticCodes?.length) {\n return true; // No es filtra si no hi ha diagnòstics\n }\n\n const itemDiagnostics = item.diagnostics ?? [];\n\n return itemDiagnostics.some((d) => this.diagnosticCodes.includes(d.codi));\n }\n}\n","export const normalizeStringToNFD = (text: string | number | boolean | null | undefined) => {\n if (text == null) return \"\";\n const str = String(text);\n const normalized = str.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\n return normalized.toLocaleLowerCase();\n};\n","import { normalizeStringToNFD } from \"./normalize-string\";\n\nexport const propContainsString = (prop: any, searchString: string) => {\n const newProp = normalizeStringToNFD(prop);\n const newSearchString = normalizeStringToNFD(searchString);\n return (\n newProp.toString().toLowerCase().indexOf(newSearchString) !== -1 ||\n newProp.toString().indexOf(newSearchString) !== -1\n );\n};\n","import { IActivityHistoryItem, TSearchActivityHistoryItemPredicate } from \"../model\";\nimport { Spec } from \"./spec\";\nimport { propContainsString } from \"../../../utils/prop-contains-string\";\n\nconst commonFieldsSearchPredicate = (item: IActivityHistoryItem, searchString: string) => {\n const professionalNameContainsSearchString =\n item.professional?.name && propContainsString(item.professional?.name, searchString);\n const centerNameContainsSearchString = item.center?.description && propContainsString(item.center.description, searchString);\n const specialityNameContainsSearchString =\n item.professional?.speciality?.description && propContainsString(item.professional?.speciality.description, searchString);\n const roleNameContainsSearchString =\n item.professional?.role?.description && propContainsString(item.professional?.role.description, searchString);\n const serviceNameContainsSearchString = item.service?.description && propContainsString(item.service.description, searchString);\n const upNameContainsSearchString = item.up?.description && propContainsString(item.up.description, searchString);\n const diagnosticsMatch = item.diagnostics?.some(\n (diagnostic) => propContainsString(diagnostic.descripcio, searchString),\n );\n return (\n professionalNameContainsSearchString ||\n centerNameContainsSearchString ||\n specialityNameContainsSearchString ||\n roleNameContainsSearchString ||\n serviceNameContainsSearchString ||\n upNameContainsSearchString ||\n diagnosticsMatch\n );\n};\n\nexport class SearchStringSpec extends Spec<IActivityHistoryItem> {\n constructor(\n public searchString: string,\n public searchPredicate: TSearchActivityHistoryItemPredicate,\n ) {\n super();\n }\n\n isSatisfiedBy(context: IActivityHistoryItem): boolean {\n // Si searchString está vacío o solo tiene espacios, no filtramos y devolvemos true\n if (!this.searchString?.trim()) {\n return true;\n }\n\n // Verificamos coincidencias en los campos comunes\n const matchesCommonFields = commonFieldsSearchPredicate(context, this.searchString);\n\n // Verificamos coincidencias con el searchPredicate\n let matchesSearchPredicate = false;\n if (this.searchPredicate) {\n try {\n matchesSearchPredicate = !!this.searchPredicate(this.searchString.toLowerCase(), context);\n } catch {\n // searchPredicate de plugin externo lanzó un error — se trata como no-match\n }\n }\n\n // Aseguramos que siempre se retorne un valor booleano\n return !!(matchesCommonFields || matchesSearchPredicate);\n }\n}\n","import { IActivityHistoryCustomFilterGroup } from \"../../filter\";\nimport { IActivityHistoryItem } from \"../model\";\nimport { FalseSpec } from \"./false-spec\";\nimport { Spec } from \"./spec\";\n\nexport class TypeSpec extends Spec<IActivityHistoryItem> {\n constructor(public itemType: string) {\n super();\n }\n isSatisfiedBy(context: IActivityHistoryItem): boolean {\n return context?.type === this.itemType;\n }\n}\n\nexport class ComposedTypeSpec extends Spec<IActivityHistoryItem> {\n constructor(public filters: IActivityHistoryCustomFilterGroup[]) {\n super();\n }\n isSatisfiedBy(item: IActivityHistoryItem): boolean {\n const enabledGroupTypes = this.filters.filter((f) => f.enabled).map((f) => f.id);\n\n // Si no hay filtros de tipo habilitados, aceptar todos los items\n if (enabledGroupTypes.length === 0) {\n return true;\n }\n\n const finalSpec = enabledGroupTypes.reduce((acc, groupId) => {\n return acc.or(new TypeSpec(groupId));\n }, new FalseSpec());\n return finalSpec.isSatisfiedBy(item);\n }\n}\n","import { IActivityHistoryItem } from \"../model\";\nimport { Spec } from \"./spec\";\n\nexport class UpFilterSpec extends Spec<IActivityHistoryItem> {\n constructor(private upIds: string[]) {\n super();\n }\n\n isSatisfiedBy(item: IActivityHistoryItem): boolean {\n if (!this.upIds?.length) {\n return true; // No se filtra si no se proporcionan códigos\n }\n\n const itemUp = item.up ?? null;\n\n return this.upIds.some((upId) => itemUp.id === upId);\n }\n}\n","import { RootState } from \"../../infrastructure/state/store\";\n\nexport const activityHistoryFiltersSelector = (state: RootState) =>\n state.activityHistoryFilters.filters;\n","import { createSelector } from \"@reduxjs/toolkit\";\nimport { isCommonFilterGroup } from \"../model\";\nimport { activityHistoryFiltersSelector } from \"../selectors\";\n\nexport const activityHistoryCommonFiltersSelector = createSelector(\n activityHistoryFiltersSelector,\n (filters) => filters.find(isCommonFilterGroup)?.filters || [],\n);\n\nexport const isEnabledCommonFilterSelector = (filterId: string) =>\n createSelector(\n activityHistoryCommonFiltersSelector,\n (filterSpecs) => filterSpecs?.find((s) => s.id === filterId)?.enabled,\n );\n\nexport const activityHistoryEnabledCommonFiltersSelector = createSelector(\n activityHistoryCommonFiltersSelector,\n (filters) => filters.filter((f) => f.enabled),\n);\n\nexport const areCommonFiltersActive = createSelector(\n activityHistoryEnabledCommonFiltersSelector,\n (filters) => !!filters.length,\n);\n","import { createSelector } from \"@reduxjs/toolkit\";\nimport {\n IActivityHistoryCustomFilterGroup,\n IActivityHistoryFilter,\n isCustomFilter,\n} from \"../model\";\nimport { activityHistoryFiltersSelector } from \"../selectors\";\n\nexport const activityHistoryCustomFilterGroupsSelector = createSelector(\n activityHistoryFiltersSelector,\n (filters: IActivityHistoryFilter[]) => {\n const customFilters = filters.filter(isCustomFilter);\n return customFilters.sort(sortBySortProperty);\n },\n);\n\nconst sortBySortProperty = (\n a: IActivityHistoryCustomFilterGroup,\n b: IActivityHistoryCustomFilterGroup,\n) => Number(a.sort) - Number(b.sort);\n\nexport const areCustomFiltersActive = createSelector(\n activityHistoryCustomFilterGroupsSelector,\n (filters: IActivityHistoryCustomFilterGroup[]) => {\n return filters.some((filter) =>\n filter.filters.some((singleFilter) => singleFilter.enabledValues?.length),\n );\n },\n);\n\nexport const activeGroupsWithEnabledFilters = createSelector(\n activityHistoryCustomFilterGroupsSelector,\n (filters: IActivityHistoryCustomFilterGroup[]) => {\n return filters\n .filter((group) => group.enabled)\n .map(({ id, title, enabled, sort, filters }) => ({\n id,\n title,\n enabled,\n sort,\n filters: filters.filter((filter) => filter.enabledValues?.length),\n }))\n .filter((group) => group.filters.length > 0);\n },\n);\n","import { createSelector } from \"@reduxjs/toolkit\";\nimport {\n IActivityHistoryDiagnosticsFilter,\n IActivityHistoryFilter,\n IDiagnosticWithRelations,\n isDiagnosticFilter,\n} from \"../model\";\nimport { activityHistoryFiltersSelector } from \"../selectors\";\n\nexport const diagnosticFilterSelector = createSelector(activityHistoryFiltersSelector, (filters: IActivityHistoryFilter[]) =>\n filters.find(isDiagnosticFilter),\n);\n\nexport const diagnosticFilterEnabledValuesSelector = createSelector(\n diagnosticFilterSelector,\n (filter: IActivityHistoryDiagnosticsFilter) => filter?.enabledValues || [],\n);\n\nexport const areDiagnosticFiltersActive = createSelector(\n diagnosticFilterEnabledValuesSelector,\n (filters) => !!filters.length,\n);\n","import { createSelector } from \"@reduxjs/toolkit\";\nimport { IActivityHistoryFilter, IActivityHistoryUpFilter, isUpFilter } from \"../model\";\nimport { activityHistoryFiltersSelector } from \"../selectors\";\n\nexport const upFilterSelector = createSelector(activityHistoryFiltersSelector, (filters: IActivityHistoryFilter[]) =>\n filters.find(isUpFilter),\n);\n\nexport const upFilterEnabledValuesSelector = createSelector(\n upFilterSelector,\n (filter: IActivityHistoryUpFilter) => filter?.enabledValues || [],\n);\n\nexport const areUpFiltersActive = createSelector(upFilterEnabledValuesSelector, (filters) => !!filters.length);\n","import { IActivityHistoryDiagnostic } from \"../../model\";\n\nexport const areSameDiagnostics = (\n diag1: IActivityHistoryDiagnostic[],\n diag2: IActivityHistoryDiagnostic[],\n): boolean => {\n if (diag1.length !== diag2.length) {\n return false;\n }\n\n const sortedDiag1 = diag1.map((d) => d.codi).sort();\n const sortedDiag2 = diag2.map((d) => d.codi).sort();\n\n return sortedDiag1.every((id, index) => id === sortedDiag2[index]);\n};\n","import { IActivityHistoryDiagnostic } from \"../../model\";\n\nexport const hasValidDiagnostic = (diagnostic: IActivityHistoryDiagnostic) => {\n return (\n diagnostic !== null &&\n diagnostic !== undefined &&\n typeof diagnostic.codi === \"string\" &&\n (typeof diagnostic.cataleg === \"string\" || diagnostic.cataleg === null) &&\n typeof diagnostic.descripcio === \"string\"\n );\n};\n\n// Comprueba las propiedades de un diagnóstico\nexport const hasValidDiagnostics = (diagnostics: IActivityHistoryDiagnostic[]) => {\n if (diagnostics === null || diagnostics === undefined) {\n return true;\n }\n\n return Array.isArray(diagnostics) && diagnostics.every(hasValidDiagnostic);\n};\n","import { generateId } from \"@primaria/plugins-core\";\nimport { IActivityHistoryGroup, IActivityHistoryItem, IActivityHistorySubGroup } from \"../../domain/model\";\nimport { areSameDiagnostics } from \"../../domain/validation/diagnostics/are-same-diagnostics\";\nimport { hasValidDiagnostics } from \"../../domain/validation/diagnostics/has-valid-diagnostics\";\n\n// Cache para evitar recalcular fechas\nconst dateStringCache = new Map<string, string>();\nconst dateObjectCache = new Map<string, Date>();\n\nconst getDateString = (dateStr: string): string => {\n if (!dateStringCache.has(dateStr)) {\n dateStringCache.set(dateStr, new Date(dateStr).toDateString());\n }\n return dateStringCache.get(dateStr)!;\n};\n\nconst getDateObject = (dateStr: string): Date => {\n if (!dateObjectCache.has(dateStr)) {\n dateObjectCache.set(dateStr, new Date(dateStr));\n }\n return dateObjectCache.get(dateStr)!;\n};\n\n// Crear una clave base sin servicio (para comparaciones cuando el servicio no está informado)\nconst createVisitKeyWithoutService = (item: IActivityHistoryItem): string => {\n const professionalKey = `${item.professional?.id || 'null'}-${item.professional?.role?.id || 'null'}-${item.professional?.speciality?.id || 'null'}`;\n const locationKey = `${item.ep?.id || 'null'}-${item.up?.id || 'null'}-${item.center?.id || 'null'}`;\n const dayKey = getDateString(item.date);\n\n return `${professionalKey}|${locationKey}|${dayKey}`;\n};\n\n// Verificar si el servicio está informado (null, undefined o string vacío = no informado)\nconst hasService = (item: IActivityHistoryItem): boolean => {\n return item.service?.id != null && item.service.id !== \"\";\n};\n\n// Comparar si dos items pueden agruparse juntos\n// Si alguno de los items no tiene servicio informado, se ignora el servicio en la comparación\nconst canGroupTogether = (item1: IActivityHistoryItem, item2: IActivityHistoryItem): boolean => {\n const baseKey1 = createVisitKeyWithoutService(item1);\n const baseKey2 = createVisitKeyWithoutService(item2);\n\n // Si las claves base no coinciden, no se pueden agrupar\n if (baseKey1 !== baseKey2) return false;\n\n // Si alguno no tiene servicio informado, se pueden agrupar (ya que la base coincide)\n if (!hasService(item1) || !hasService(item2)) return true;\n\n // Si ambos tienen servicio, deben coincidir\n return item1.service?.id === item2.service?.id;\n};\n\nconst withinEightHours = (date1: string, date2: string): boolean => {\n const time1 = getDateObject(date1).getTime();\n const time2 = getDateObject(date2).getTime();\n return Math.abs(time1 - time2) <= 8 * 60 * 60 * 1000; // 8 hours in milliseconds\n};\n\nfunction groupByValidDiagnostics(groups: IActivityHistoryGroup[]) {\n groups.forEach((group) => {\n const subGroups: IActivityHistorySubGroup[] = [];\n const remainingItems: IActivityHistoryItem[] = [];\n\n group.items.forEach((item) => {\n const diagnostics = item.diagnostics;\n const allDiagnosticsValid = diagnostics?.length > 0 && hasValidDiagnostics(diagnostics);\n\n if (allDiagnosticsValid) {\n let addedToSubGroup = false;\n\n // Optimización: usar for...of con break para salir temprano\n for (const subGroup of subGroups) {\n const firstSubGroupItem = subGroup.items[0];\n\n if (areSameDiagnostics(firstSubGroupItem.diagnostics, diagnostics)) {\n subGroup.items.push(item);\n addedToSubGroup = true;\n break;\n }\n }\n\n if (!addedToSubGroup) {\n subGroups.push({\n idSubGroup: generateId(),\n items: [item],\n });\n }\n } else {\n remainingItems.push(item);\n }\n });\n\n group.items = remainingItems;\n group.subGroups = subGroups;\n });\n}\n\nconst groupActivityHistoryItems = (items: IActivityHistoryItem[]): IActivityHistoryGroup[] => {\n if (!items?.length) return [];\n\n // Clear caches\n dateStringCache.clear();\n dateObjectCache.clear();\n\n // Sort all items by date (most recent first)\n const sortedItems = [...items].sort((a, b) =>\n getDateObject(b.date).getTime() - getDateObject(a.date).getTime()\n );\n\n // Use a Map to track groups by base visit key (without service) for O(1) lookup\n const groupsByBaseKey = new Map<string, IActivityHistoryGroup[]>();\n const allGroups: IActivityHistoryGroup[] = [];\n\n for (const item of sortedItems) {\n const itemBaseKey = createVisitKeyWithoutService(item);\n const itemTime = getDateObject(item.date).getTime();\n let addedToExistingGroup = false;\n\n // Get all groups for this base key (O(1) lookup)\n const candidateGroups = groupsByBaseKey.get(itemBaseKey) || [];\n\n // Try to add to an existing group with the same base key\n for (const group of candidateGroups) {\n const firstItem = group.items[0];\n const lastItem = group.items[group.items.length - 1];\n\n if (!firstItem || !lastItem) continue;\n\n // Check if items can be grouped together (handles service logic)\n if (!canGroupTogether(firstItem, item)) continue;\n\n // Verificar si está dentro del rango de 8 horas\n if (\n withinEightHours(firstItem.date, item.date) &&\n withinEightHours(lastItem.date, item.date)\n ) {\n // Check for temporal conflicts with other groups\n const groupStartTime = getDateObject(lastItem.date).getTime();\n const groupEndTime = getDateObject(firstItem.date).getTime();\n const newGroupStartTime = Math.min(groupStartTime, itemTime);\n const newGroupEndTime = Math.max(groupEndTime, itemTime);\n\n let hasTemporalConflict = false;\n\n // Only check groups with different base keys (different professionals/locations)\n for (const [otherKey, otherGroups] of groupsByBaseKey) {\n if (otherKey === itemBaseKey) continue;\n\n for (const otherGroup of otherGroups) {\n for (const otherItem of otherGroup.items) {\n const otherTime = getDateObject(otherItem.date).getTime();\n if (otherTime > newGroupStartTime && otherTime < newGroupEndTime) {\n hasTemporalConflict = true;\n break;\n }\n }\n if (hasTemporalConflict) break;\n }\n if (hasTemporalConflict) break;\n }\n\n if (!hasTemporalConflict) {\n group.items.push(item);\n // Items are already sorted in sortedItems, no need to re-sort\n addedToExistingGroup = true;\n break;\n }\n }\n }\n\n // Create new group if not added to existing one\n if (!addedToExistingGroup) {\n const newGroup: IActivityHistoryGroup = {\n idGroup: Math.random().toString(36).substring(2, 11),\n items: [item],\n subGroups: [],\n };\n\n allGroups.push(newGroup);\n\n // Add to the map using base key (without service)\n const keyGroups = groupsByBaseKey.get(itemBaseKey);\n if (keyGroups) {\n keyGroups.push(newGroup);\n } else {\n groupsByBaseKey.set(itemBaseKey, [newGroup]);\n }\n }\n }\n\n // Sort groups by the most recent item date in each group\n allGroups.sort((a, b) => {\n const aFirstItem = a.items[0];\n const bFirstItem = b.items[0];\n if (!aFirstItem || !bFirstItem) return 0;\n return getDateObject(bFirstItem.date).getTime() - getDateObject(aFirstItem.date).getTime();\n });\n\n // Create subgroups by matching diagnostics\n groupByValidDiagnostics(allGroups);\n\n return allGroups;\n};\n\nexport { groupActivityHistoryItems };\n","import { IActivityHistoryGroup } from \"../../domain/model\";\n\n// Helper: obtener la fecha más reciente de una lista de items\nconst getMostRecentDate = (items: { date: string }[]): Date => {\n return items.reduce((latest, item) => {\n const itemDate = new Date(item.date);\n return itemDate > latest ? itemDate : latest;\n }, new Date(0));\n};\n\n// Obtener la fecha más reciente de un subgrupo\nconst getSubGroupMostRecentDate = (subGroup: { items: { date: string }[] }): Date => {\n return getMostRecentDate(subGroup.items);\n};\n\n/**\n * Fecha por la que un grupo queda posicionado en la lista: la más reciente\n * considerando TANTO sus items planos COMO sus subgrupos (diagnósticos).\n *\n * IMPORTANTE: esta es la misma clave que usa `sortGroupsByMostRecentDate` para\n * ordenar. Cualquier funcionalidad que mapee una fecha a la posición de un grupo\n * (p. ej. \"Anar a data\") DEBE usar esta función y no `group.items[0].date`, que\n * puede ser más antigua que el subgrupo y romper la monotonía del orden.\n */\nexport const getGroupMostRecentDate = (group: IActivityHistoryGroup): Date => {\n const itemDates = group.items.length > 0 ? [getMostRecentDate(group.items)] : [];\n const subGroupDates = group.subGroups.map(getSubGroupMostRecentDate);\n const allDates = [...itemDates, ...subGroupDates];\n return allDates.length > 0 ? new Date(Math.max(...allDates.map((d) => d.getTime()))) : new Date(0);\n};\n\nexport const sortGroupsByMostRecentDate = (arr: IActivityHistoryGroup[]) => {\n // Ordenar items de más reciente a más antiguo\n const sortItemsByDate = (items: { date: string }[]) => {\n return items.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime());\n };\n\n // Procesar cada grupo\n arr.forEach((group) => {\n // Ordenar items del grupo\n group.items = sortItemsByDate(group.items);\n\n // Ordenar items de cada subgrupo\n group.subGroups.forEach((subGroup) => {\n subGroup.items = sortItemsByDate(subGroup.items);\n });\n\n // Ordenar subgrupos según el item más reciente en cada uno\n group.subGroups.sort((a, b) => getSubGroupMostRecentDate(b).getTime() - getSubGroupMostRecentDate(a).getTime());\n });\n\n // Finalmente, ordenar los grupos por su fecha más reciente\n return arr.sort((a, b) => getGroupMostRecentDate(b).getTime() - getGroupMostRecentDate(a).getTime());\n};\n","import { RootState } from \"../../infrastructure/state/store\";\n\nexport const activityHistorySearchStringSelector = (state: RootState) =>\n state.activityHistoryFilters.searchString;\n","import { createSelector } from \"@reduxjs/toolkit\";\nimport { RootState } from \"../infrastructure/state/store\";\nimport { getUniqueObjects } from \"../utils/get-unique-values-by-prop-path\";\nimport {\n IActivityHistoryItem,\n IActivityHistoryItemCollection,\n IHistoryDataImporterRules,\n TSearchActivityHistoryItemPredicate,\n} from \"./domain/model\";\nimport { CommonFilterSpec } from \"./domain/specs/common-filter-spec\";\nimport { CustomFilterSpec } from \"./domain/specs/custom-filter-spec\";\nimport { DiagnosticCodeSpec } from \"./domain/specs/diagnostics-filter-spec\";\nimport { SearchStringSpec } from \"./domain/specs/search-string-spec\";\nimport { ComposedTypeSpec } from \"./domain/specs/type-spec\";\nimport { UpFilterSpec } from \"./domain/specs/up-filter-spec\";\nimport { IActivityHistoryCommonFilter, IActivityHistoryCustomFilterGroup, IDiagnosticWithRelations } from \"./filter\";\nimport { activityHistoryCommonFiltersSelector } from \"./filter/common-filters/selectors\";\nimport { activityHistoryCustomFilterGroupsSelector } from \"./filter/custom-filters/selectors\";\nimport { diagnosticFilterEnabledValuesSelector } from \"./filter/diagnostic-filters/selectors\";\nimport { upFilterEnabledValuesSelector } from \"./filter/up-filters/selectors\";\nimport { groupActivityHistoryItems } from \"./list/group-history-items/group-history-items\";\nimport { sortGroupsByMostRecentDate } from \"./list/sort-history-items-by-date/sort-history-items-by-date\";\nimport { activityHistorySearchStringSelector } from \"./search/selectors\";\n\nexport const activityHistoryCollectionsSelector = (state: RootState) => state.activityHistoryCollections.collections;\n\nexport const historyDataImporterRulesByCollectionIdSelector = createSelector(\n activityHistoryCollectionsSelector,\n (collections: Record<string, IActivityHistoryItemCollection>): Record<string, IHistoryDataImporterRules> => {\n const rules: Record<string, IHistoryDataImporterRules> = {};\n for (const [id, collection] of Object.entries(collections)) {\n if (collection?.historyDataImporterRules) {\n rules[id] = collection.historyDataImporterRules;\n }\n }\n return rules;\n },\n);\n\nconst mapItemsWithMetadata = (\n items: IActivityHistoryItem[],\n componentFactory: any,\n type: string,\n searchPredicate: TSearchActivityHistoryItemPredicate,\n) => {\n return items.map(\n (item) =>\n ({\n ...item,\n searchPredicate,\n componentFactory,\n type,\n }) as IActivityHistoryItem,\n );\n};\n\nexport const activityHistoryMappedItems = createSelector(\n activityHistoryCollectionsSelector,\n (collections: Record<string, IActivityHistoryItemCollection>) => {\n return Object.values(collections).flatMap((collection: IActivityHistoryItemCollection) => {\n return mapItemsWithMetadata(collection.items, collection.componentFactory, collection.id, collection.searchPredicate);\n });\n },\n);\n\nexport const customFilterGroupsWithItemsSelector = createSelector(\n activityHistoryCustomFilterGroupsSelector,\n activityHistoryCollectionsSelector,\n (filterGroups: IActivityHistoryCustomFilterGroup[], collections: Record<string, IActivityHistoryItemCollection>) => {\n return filterGroups.filter((g: IActivityHistoryCustomFilterGroup) => {\n const filterCollection = collections[g.id] as IActivityHistoryItemCollection;\n return filterCollection?.items && filterCollection.items.length > 0;\n });\n },\n);\nexport const customFilterGroupsWithOptionsSelector = createSelector(\n activityHistoryCustomFilterGroupsSelector,\n activityHistoryCollectionsSelector,\n (filterGroupsWithItems: IActivityHistoryCustomFilterGroup[], collections: Record<string, IActivityHistoryItemCollection>) => {\n const result = filterGroupsWithItems.map((filterGroup: IActivityHistoryCustomFilterGroup) => {\n const collection = collections[filterGroup.id] as IActivityHistoryItemCollection;\n return {\n ...filterGroup,\n filters: filterGroup.filters.map((f) => {\n return {\n ...f,\n options:\n (!f.singleOption\n ? collection?.items &&\n getUniqueObjects<IActivityHistoryItem>(collection.items, f.propPathValue, f.propsPathDescription, f.title)\n : []) || [],\n };\n }),\n };\n });\n return result;\n },\n);\n\nexport const activityHistoryGroupedItems = createSelector(\n activityHistoryMappedItems,\n activityHistorySearchStringSelector,\n activityHistoryCommonFiltersSelector,\n activityHistoryCustomFilterGroupsSelector,\n diagnosticFilterEnabledValuesSelector,\n upFilterEnabledValuesSelector,\n (\n items: IActivityHistoryItem[],\n searchString: string,\n commonFilters: IActivityHistoryCommonFilter[],\n customFilters: IActivityHistoryCustomFilterGroup[],\n diagnosticFilterEnabledValues: IDiagnosticWithRelations[],\n upFilterEnabledValues: string[],\n ) => {\n // Create the filter spec chain ONCE instead of creating it for every item\n const commonFilterSpec = new CommonFilterSpec(commonFilters);\n const typeSpec = new ComposedTypeSpec(customFilters);\n const customFilterSpec = new CustomFilterSpec(customFilters);\n const diagnosticSpec = new DiagnosticCodeSpec(diagnosticFilterEnabledValues);\n const upSpec = new UpFilterSpec(upFilterEnabledValues);\n\n const filteredItems = items.filter((item: IActivityHistoryItem) => {\n // Create search spec per item since it needs item.searchPredicate\n const searchSpec = new SearchStringSpec(searchString, item.searchPredicate);\n\n return searchSpec\n .and(commonFilterSpec)\n .and(typeSpec)\n .and(customFilterSpec)\n .and(diagnosticSpec)\n .and(upSpec)\n .isSatisfiedBy(item);\n });\n\n const groupedItems = groupActivityHistoryItems(filteredItems);\n const sortedByMostRecentDate = sortGroupsByMostRecentDate(groupedItems);\n return sortedByMostRecentDate;\n },\n);\n","export class SetCommonFilter {\n constructor(public payload: { id: string; enabled: boolean }) {}\n}\n","export interface SetCustomFilterAllValuesPayload {\n filterGroupId: string;\n filterId: string;\n values: string[];\n}\n\nexport class SetCustomFilterAllValues {\n constructor(public payload: SetCustomFilterAllValuesPayload) {}\n}\n","export class SetCustomFilterGroup {\n constructor(public payload: { id: string; enabled: boolean }) {}\n}\n","export interface SetCustomFilterValuePayload {\n filterGroupId: string;\n filterId: string;\n optionId: string;\n enabled: boolean;\n}\n\nexport class SetCustomFilterValue {\n constructor(public payload: SetCustomFilterValuePayload) {}\n}\n","export class SetUpFiltersCommand {\n constructor(public payload: string[]) {}\n}\n","import { generateId } from \"@primaria/plugins-core\";\nimport { html } from \"lit\";\nimport { repeat } from \"lit/directives/repeat.js\";\nimport { when } from \"lit/directives/when.js\";\nimport { translate } from \"../../../../localization\";\nimport {\n ActivityHistoryFilterType,\n IActivityHistoryCommonFilter,\n IActivityHistoryCustomFilter,\n IActivityHistoryCustomFilterGroup,\n IActivityHistoryFilter,\n} from \"../../model\";\nimport { ActivityHistoryFilters } from \"./activity-history-filters\";\n\nconst filterTemplates = {\n [ActivityHistoryFilterType.Switch]: (id, title, handleChange, isSelected, isEnabled) => html`\n <dss-toggle size=\"sm\" label=${title || id} ?checked=${isSelected} ?disabled=${!isEnabled} @change=${handleChange}></dss-toggle>`,\n\n [ActivityHistoryFilterType.Checkbox]: (id, title, handleChange, isSelected, isEnabled) => html`\n <dss-checkbox variant=\"default\" label=${title || id} ?checked=${isSelected} ?disabled=${!isEnabled} @change=${handleChange}></dss-checkbox>`,\n\n /* [ActivityHistoryFilterType.Dropdown]: (id, title, handleChange, isSelected, isEnabled) => html`\n <dss-select type=\"default\" label=${title || id} ?disabled=${!isEnabled} @value-changed=${(e) => handleChange(e)}></dss-select>`, */\n};\n\nconst getFilterTemplate = (\n filter: IActivityHistoryCommonFilter & IActivityHistoryCustomFilter,\n onChangeValue: (...args: any[]) => void,\n filterGroup?: IActivityHistoryFilter,\n option?: { id: string; title: string },\n) => {\n const isCustom = !!filterGroup?.id && !!option;\n //const id = isCustom ? `${filterGroupId}-${filter.id}-${option.id}` : filter.id;\n const id = generateId();\n const title = isCustom ? option.title || option.id : filter.title;\n\n const handleChange = (e: Event) => {\n const checked = (e.target as HTMLInputElement).checked;\n\n if (filter.singleOption) onChangeValue(filterGroup?.id, filter.id, null, checked);\n else if (isCustom && option) onChangeValue(filterGroup?.id, filter.id, option.id, checked);\n else onChangeValue(filter.id, checked);\n };\n\n const isSelected =\n isCustom && option ? (filter as IActivityHistoryCustomFilter).enabledValues?.includes(option.id) : filter.enabled;\n\n const isEnabled =\n (isCustom && option) || filter.singleOption ? (filterGroup as IActivityHistoryCustomFilterGroup).enabled : true;\n\n return filterTemplates[filter.type]?.(id, title, handleChange, isSelected, isEnabled) || html``;\n};\n\nexport const template = (props: ActivityHistoryFilters) =>\n html`\n <div class=\"filters-sidebar\" ?expanded=${props.filtersExpanded}>\n ${\n props.filtersExpanded\n ? html`<div class=\"filters-sidebar-opened\">${translate(\"filters.filters\")}<dss-icon-button ?hidden=${props.wrapperMaximized} @click=${() => props._toggleFilters()} size=\"md\" variant=\"primary\" icon=\"keyboard_double_arrow_left\"></dss-icon-button></div>\n <div class=\"filter-container\">\n ${repeat(props.commonFilters, (filter: IActivityHistoryCommonFilter) => html`<div class=\"filter\">${getFilterTemplate(filter, props._onChangeCommonFilterValue.bind(props))}</div> `)}\n <!-- Regió per al filtre de diagnostics extern -->\n <div class=\"filter\">\n <primaria-region name=${props.api.regionManager.regions.activityHistory.customFilters}></primaria-region>\n </div>\n ${\n props.upFilter &&\n html`<div class=\"filter\">\n <dss-select size=\"md\" multiple type=\"default\" label=${props.upFilter.title} .elements=${props.upFilter?.values} @value-changed=${props._handleUpFilterChange} .selectedValue=${props.upFilterEnabledValues} dropdownStyle=${\"max-height: 450px\"} autocomplete=\"off\"></dss-select>\n </div>`\n }\n ${repeat(\n props.customFilterGroups,\n (group: IActivityHistoryCustomFilterGroup) => html`\n <div class=\"filter-group\">\n <dss-toggle size=\"sm\" label=${group.title} ?checked=${group.enabled} @change=${(e: Event) => props._onChangeCustomFilterGroupValue(group.id, (e.target as HTMLInputElement).checked)}></dss-toggle>\n <div class=\"custom-subfilters-container\">\n ${\n group?.filters &&\n repeat(group.filters, (filter: IActivityHistoryCustomFilter) =>\n customFilterTemplate(filter, props, group),\n )\n }\n </div>\n </div> `,\n )}\n </div> `\n : html`\n <dss-icon-button label=${translate(\"filters.filters\")} @click=${() => props._toggleFilters()} size=\"md\" variant=\"primary\" icon=\"filter_list\"></dss-icon-button>\n `\n }\n </div>\n `;\n\nconst customFilterTemplate = (\n filter: IActivityHistoryCustomFilter,\n props: ActivityHistoryFilters,\n group: IActivityHistoryCustomFilterGroup,\n) => {\n if (filter.type === ActivityHistoryFilterType.Dropdown) {\n const elements = filter?.options.map((option) => ({ value: option.id, label: option.title || option.id }));\n return when(\n elements.length > 0,\n () => html`\n <dss-select\n size=\"md\"\n multiple\n type=\"default\"\n label=${filter.title}\n .elements=${elements}\n @value-changed=${(e) => props._onChangeCustomFilterAllValues(group.id, filter.id, e.detail.selectedValue)}\n .selectedValue=${filter.enabledValues}\n dropdownStyle=\"max-height: 450px\"\n autocomplete=\"off\"\n ?disabled=${!group.enabled}\n ></dss-select>\n `,\n );\n }\n\n return filter.singleOption\n ? getFilterTemplate(filter, props._onChangeCustomFilterValue.bind(props), group)\n : when(\n !!filter.options?.length,\n () => html`\n <primaria-accordion>\n <dss-typography slot=\"title\" tag=\"p\" variant=\"body-3\" fontweight=\"regular\">${filter.title}</dss-typography>\n <div class=\"custom-filter-content\" slot=\"content\">\n ${filter.options.map((option) =>\n getFilterTemplate(filter, props._onChangeCustomFilterValue.bind(props), group, option),\n )}\n </div>\n </primaria-accordion>\n `,\n );\n};\n","import { PrimariaApi } from \"@uxland/primary-shell\";\nimport { LitElement, css, html, unsafeCSS } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport { lazyInject } from \"../../../../infrastructure/ioc/container\";\nimport { TYPES } from \"../../../../infrastructure/ioc/types\";\nimport { connectedProperty } from \"../../../../infrastructure/state/connected-property\";\nimport { customFilterGroupsWithOptionsSelector } from \"../../../selectors\";\nimport { activityHistoryCommonFiltersSelector } from \"../../common-filters/selectors\";\nimport { SetCommonFilter } from \"../../common-filters/set-common-filter/request\";\nimport { SetCustomFilterAllValues } from \"../../custom-filters/set-custom-filter-all-values/request\";\nimport { SetCustomFilterGroup } from \"../../custom-filters/set-custom-filter-group/request\";\nimport { SetCustomFilterValue } from \"../../custom-filters/set-custom-filter-value/request\";\nimport { IActivityHistoryCommonFilter, IActivityHistoryCustomFilterGroup, IActivityHistoryUpFilter } from \"../../model\";\nimport { upFilterEnabledValuesSelector, upFilterSelector } from \"../../up-filters/selectors\";\nimport { SetUpFiltersCommand } from \"../../up-filters/set/request\";\nimport styles from \"./styles.css?inline\";\nimport { template } from \"./template\";\n\n//@ts-ignore\n@customElement(\"activity-history-filters\")\nexport class ActivityHistoryFilters extends LitElement {\n render() {\n return html`${template(this)}`;\n }\n\n static styles = css`\n ${unsafeCSS(styles)}\n `;\n\n @connectedProperty(activityHistoryCommonFiltersSelector)\n commonFilters: IActivityHistoryCommonFilter[];\n\n @connectedProperty(customFilterGroupsWithOptionsSelector)\n customFilterGroups: IActivityHistoryCustomFilterGroup[];\n\n @connectedProperty(upFilterSelector)\n upFilter: IActivityHistoryUpFilter;\n\n @connectedProperty(upFilterEnabledValuesSelector)\n upFilterEnabledValues: string[];\n\n @lazyInject(TYPES.primaryApi)\n api: PrimariaApi;\n\n @state()\n filtersExpanded = false;\n\n @property({ type: Boolean })\n wrapperMaximized: boolean;\n\n updated(changedProperties) {\n if (changedProperties.has(\"wrapperMaximized\")) {\n this.filtersExpanded = this.wrapperMaximized;\n }\n }\n\n _toggleFilters() {\n this.filtersExpanded = !this.filtersExpanded;\n }\n\n _onChangeCommonFilterValue(filterId: string, value: boolean) {\n this.api.broker.send(new SetCommonFilter({ id: filterId, enabled: value }));\n }\n\n _onChangeCustomFilterGroupValue(filterGroupId: string, value: boolean) {\n this.api.broker.send(new SetCustomFilterGroup({ id: filterGroupId, enabled: value }));\n }\n\n _onChangeCustomFilterValue(filterGroupId: string, filterId: string, optionId: string, value: boolean) {\n this.api.broker.send(\n new SetCustomFilterValue({\n filterGroupId,\n filterId,\n optionId,\n enabled: value,\n }),\n );\n }\n\n _onChangeCustomFilterAllValues(filterGroupId: string, filterId: string, values: string[]) {\n this.api.broker.send(\n new SetCustomFilterAllValues({\n filterGroupId,\n filterId,\n values: values,\n }),\n );\n }\n\n _handleUpFilterChange(e: CustomEvent) {\n const selectedValues = e.detail.selectedValue;\n this.api.broker.send(new SetUpFiltersCommand(selectedValues));\n }\n}\n","import { activityHistoryFiltersSlice } from \"../../slice\";\n\nexport const { setCommonFilterValue } = activityHistoryFiltersSlice.actions;\n","import { StoreBaseHandler } from \"../../../../infrastructure/base-handlers\";\nimport { setCommonFilterValue } from \"./actions\";\nimport { SetCommonFilter } from \"./request\";\n\nexport class SetCommonFilterHandler extends StoreBaseHandler {\n async handle(request: SetCommonFilter) {\n try {\n this.store.dispatch(setCommonFilterValue(request.payload));\n } catch (e) {\n console.error(e.message);\n }\n }\n}\n","import { BrokerExtensions } from \"@primaria/plugins-core\";\nimport { BrokerDisposableHandler } from \"@uxland/primary-shell\";\nimport { SetCommonFilter } from \"./request\";\nimport { SetCommonFilterHandler } from \"./handler\";\n\nlet request: BrokerDisposableHandler;\n\nexport const bootstrapSetCommonFilter = (broker: BrokerExtensions) => {\n request = broker.registerRequest(SetCommonFilter, SetCommonFilterHandler);\n};\n\nexport const teardownSetCommonFilter = () => {\n request?.dispose();\n};\n","import { activityHistoryFiltersSlice } from \"../../slice\";\n\nexport const { addCustomFilters } = activityHistoryFiltersSlice.actions;\n","import { StoreBaseHandler } from \"../../../../infrastructure/base-handlers\";\nimport { addCustomFilters } from \"./actions\";\nimport { AddCustomFiltersCommand } from \"./request\";\n\nexport class AddCustomFiltersHandler extends StoreBaseHandler {\n async handle(request: AddCustomFiltersCommand) {\n try {\n //TODO ensure are valid filters\n this.store.dispatch(addCustomFilters(request.payload));\n } catch (e) {\n console.error(e.message);\n }\n }\n}\n","import { BrokerExtensions } from \"@primaria/plugins-core\";\nimport { BrokerDisposableHandler } from \"@uxland/primary-shell\";\nimport { AddCustomFiltersHandler } from \"./handler\";\nimport { AddCustomFiltersCommand } from \"./request\";\n\nlet request: BrokerDisposableHandler;\n\nexport const bootstrapAddCustomFilter = (broker: BrokerExtensions) => {\n request = broker.registerRequest(AddCustomFiltersCommand, AddCustomFiltersHandler);\n};\n\nexport const teardownAddCustomFilter = () => {\n request?.dispose();\n};\n","import { activityHistoryFiltersSlice } from \"../../slice\";\n\nexport const { setCustomFilterAllValues } = activityHistoryFiltersSlice.actions;\n","import { StoreBaseHandler } from \"../../../../infrastructure/base-handlers\";\nimport { setCustomFilterAllValues } from \"./actions\";\nimport { SetCustomFilterAllValues } from \"./request\";\n\nexport class SetCustomFilterAllValuesHandler extends StoreBaseHandler {\n async handle(request: SetCustomFilterAllValues) {\n try {\n this.store.dispatch(setCustomFilterAllValues(request.payload));\n } catch (e) {\n console.error(e.message);\n }\n }\n}\n","import { BrokerExtensions } from \"@primaria/plugins-core\";\nimport { BrokerDisposableHandler } from \"@uxland/primary-shell\";\nimport { SetCustomFilterAllValues } from \"./request\";\nimport { SetCustomFilterAllValuesHandler } from \"./handler\";\n\nlet request: BrokerDisposableHandler;\n\nexport const bootstrapSetCustomFilterAllValues = (broker: BrokerExtensions) => {\n request = broker.registerRequest(SetCustomFilterAllValues, SetCustomFilterAllValuesHandler);\n};\n\nexport const teardownSetCustomFilterAllValues = () => {\n request?.dispose();\n};\n","import { activityHistoryFiltersSlice } from \"../../slice\";\n\nexport const { setCustomFilterGroupValue } = activityHistoryFiltersSlice.actions;\n","import { StoreBaseHandler } from \"../../../../infrastructure/base-handlers\";\nimport { setCustomFilterGroupValue } from \"./actions\";\nimport { SetCustomFilterGroup } from \"./request\";\n\nexport class SetCustomFilterGroupHandler extends StoreBaseHandler {\n async handle(request: SetCustomFilterGroup) {\n try {\n this.store.dispatch(setCustomFilterGroupValue(request.payload));\n } catch (e) {\n console.error(e.message);\n }\n }\n}\n","import { BrokerExtensions } from \"@primaria/plugins-core\";\nimport { BrokerDisposableHandler } from \"@uxland/primary-shell\";\nimport { SetCustomFilterGroup } from \"./request\";\nimport { SetCustomFilterGroupHandler } from \"./handler\";\n\nlet request: BrokerDisposableHandler;\n\nexport const bootstrapSetCustomFilterGroup = (broker: BrokerExtensions) => {\n request = broker.registerRequest(SetCustomFilterGroup, SetCustomFilterGroupHandler);\n};\n\nexport const teardownSetCustomFilterGroup = () => {\n request?.dispose();\n};\n","import { activityHistoryFiltersSlice } from \"../../slice\";\n\nexport const { setCustomFilterValue } = activityHistoryFiltersSlice.actions;\n","import { StoreBaseHandler } from \"../../../../infrastructure/base-handlers\";\nimport { setCustomFilterValue } from \"./actions\";\nimport { SetCustomFilterValue } from \"./request\";\n\nexport class SetCustomFilterValueHandler extends StoreBaseHandler {\n async handle(request: SetCustomFilterValue) {\n try {\n this.store.dispatch(setCustomFilterValue(request.payload));\n } catch (e) {\n console.error(e.message);\n }\n }\n}\n","import { BrokerExtensions } from \"@primaria/plugins-core\";\nimport { BrokerDisposableHandler } from \"@uxland/primary-shell\";\nimport { SetCustomFilterValue } from \"./request\";\nimport { SetCustomFilterValueHandler } from \"./handler\";\n\nlet request: BrokerDisposableHandler;\n\nexport const bootstrapSetCustomFilterValue = (broker: BrokerExtensions) => {\n request = broker.registerRequest(SetCustomFilterValue, SetCustomFilterValueHandler);\n};\n\nexport const teardownSetCustomFilterValue = () => {\n request?.dispose();\n};\n","import { activityHistoryFiltersSlice } from \"../../slice\";\n\nexport const { deleteDiagnosticFilterValue } = activityHistoryFiltersSlice.actions;\n","import { BaseHandler } from \"../../../../infrastructure/base-handlers\";\nimport { diagnosticFilterEnabledValuesSelector } from \"../selectors\";\nimport { deleteDiagnosticFilterValue } from \"./actions\";\nimport { DeleteDiagnosticFilterValueCommand } from \"./request\";\n\nexport class DeleteDiagnosticFilterValueHandler extends BaseHandler {\n async handle(request: DeleteDiagnosticFilterValueCommand) {\n try {\n const enabledDiagnostics = diagnosticFilterEnabledValuesSelector(this.store.getState());\n const diagnosticToDelete = enabledDiagnostics.find((d) => d.codi === request.payload.diagnosticCodi);\n if (diagnosticToDelete) {\n const { evolucions, relacions, ...diagnosticParent } = diagnosticToDelete;\n this.api.broker.publish(this.api.broker.events.activityHistory.diagnosticFilterDeactivated, {\n diagnostic: diagnosticParent,\n });\n }\n this.store.dispatch(deleteDiagnosticFilterValue(request.payload));\n } catch (e) {\n console.error(e.message);\n }\n }\n}\n","export class DeleteDiagnosticFilterValueCommand {\n constructor(public payload: { diagnosticCodi: string }) {}\n}\n","import { BrokerExtensions } from \"@primaria/plugins-core\";\nimport { BrokerDisposableHandler } from \"@uxland/primary-shell\";\nimport { DeleteDiagnosticFilterValueHandler } from \"./handler\";\nimport { DeleteDiagnosticFilterValueCommand } from \"./request\";\n\nlet deleteFilterValueRequest: BrokerDisposableHandler;\n\nexport const bootstrapDeleteDiagnosticFilterValue = (broker: BrokerExtensions) => {\n deleteFilterValueRequest = broker.registerRequest(DeleteDiagnosticFilterValueCommand, DeleteDiagnosticFilterValueHandler);\n};\n\nexport const teardownDeleteDiagnosticFilterValue = () => {\n deleteFilterValueRequest?.dispose();\n};\n","import { activityHistoryFiltersSlice } from \"../../slice\";\n\nexport const { setDiagnosticFilterValues } = activityHistoryFiltersSlice.actions;\n","import { StoreBaseHandler } from \"../../../../infrastructure/base-handlers\";\nimport { setDiagnosticFilterValues } from \"./actions\";\nimport { SetDiagnosticFiltersValuesCommand } from \"./request\";\n\nexport class SetDiagnosticFilterValuesHandler extends StoreBaseHandler {\n async handle(request: SetDiagnosticFiltersValuesCommand) {\n try {\n this.store.dispatch(setDiagnosticFilterValues(request.payload.diagnostics));\n } catch (e) {\n console.error(e.message);\n }\n }\n}\n","import { ICiPdSDiagnosticFilter } from \"../../model\";\n\nexport class SetDiagnosticFiltersValuesCommand {\n constructor(public payload: ICiPdSDiagnosticFilter) {}\n}\n","import { BrokerExtensions } from \"@primaria/plugins-core\";\nimport { BrokerDisposableHandler } from \"@uxland/primary-shell\";\nimport { SetDiagnosticFilterValuesHandler } from \"./handler\";\nimport { SetDiagnosticFiltersValuesCommand } from \"./request\";\n\nlet setFiltersValueRequest: BrokerDisposableHandler;\n\nexport const bootstrapSetDiagnosticFilter = (broker: BrokerExtensions) => {\n setFiltersValueRequest = broker.registerRequest(SetDiagnosticFiltersValuesCommand, SetDiagnosticFilterValuesHandler);\n};\n\nexport const teardownSetDiagnosticFilter = () => {\n setFiltersValueRequest?.dispose();\n};\n","import { PrimariaApi } from \"@uxland/primary-shell\";\nimport { ICiPdSDiagnosticFilter } from \"../model\";\nimport { SetDiagnosticFiltersValuesCommand } from \"./set/request\";\n\nexport const subscribeDiagnosticFilters = (api: PrimariaApi) => {\n api.broker.subscribe(\"cipds_diagnostic_filter_historic_requested\", (payload: ICiPdSDiagnosticFilter) => {\n api.broker.send(new SetDiagnosticFiltersValuesCommand(payload));\n });\n};\n","export class ResetFiltersCommand {}\n","import { activityHistoryFiltersSlice } from \"../slice\";\n\nexport const { resetFilters } = activityHistoryFiltersSlice.actions;\n","import { BaseHandler } from \"../../../infrastructure/base-handlers\";\nimport { resetFilters } from \"./actions\";\nimport { ResetFiltersCommand } from \"./request\";\n\nexport class ResetFiltersHandler extends BaseHandler {\n async handle(request: ResetFiltersCommand) {\n try {\n this.api.broker.publish(this.api.broker.events.activityHistory.filtersCleaned);\n this.store.dispatch(resetFilters());\n } catch (e) {\n console.error(e.message);\n }\n }\n}\n","import { BrokerExtensions } from \"@primaria/plugins-core\";\nimport { ResetFiltersCommand } from \"./request\";\nimport { ResetFiltersHandler } from \"./handler\";\nimport { BrokerDisposableHandler } from \"@uxland/primary-shell\";\n\nlet request: BrokerDisposableHandler;\n\nexport const bootstrapResetFilters = (broker: BrokerExtensions) => {\n request = broker.registerRequest(ResetFiltersCommand, ResetFiltersHandler);\n};\n\nexport const teardownResetFilters = () => {\n request?.dispose();\n};\n","import { activityHistoryFiltersSlice } from \"../../slice\";\n\nexport const { addUpFilters } = activityHistoryFiltersSlice.actions;\n","import { StoreBaseHandler } from \"../../../../infrastructure/base-handlers\";\nimport { addUpFilters } from \"./actions\";\nimport { AddUpFiltersCommand } from \"./request\";\n\nexport class AddUpFiltersHandler extends StoreBaseHandler {\n async handle(request: AddUpFiltersCommand) {\n try {\n //TODO ensure are valid filters\n this.store.dispatch(addUpFilters(request.payload));\n } catch (e) {\n console.error(e.message);\n }\n }\n}\n","import { IActivityHistoryUpFilter } from \"../../model\";\n\nexport class AddUpFiltersCommand {\n constructor(public payload: IActivityHistoryUpFilter) {}\n}\n","import { BrokerExtensions } from \"@primaria/plugins-core\";\nimport { BrokerDisposableHandler } from \"@uxland/primary-shell\";\nimport { AddUpFiltersHandler } from \"./handler\";\nimport { AddUpFiltersCommand } from \"./request\";\n\nlet request: BrokerDisposableHandler;\n\nexport const bootstrapAddUpFilter = (broker: BrokerExtensions) => {\n request = broker.registerRequest(AddUpFiltersCommand, AddUpFiltersHandler);\n};\n\nexport const teardownAddUpFilter = () => {\n request?.dispose();\n};\n","import { activityHistoryFiltersSlice } from \"../../slice\";\n\nexport const { setUpFilterValues } = activityHistoryFiltersSlice.actions;\n","import { StoreBaseHandler } from \"../../../../infrastructure/base-handlers\";\nimport { setUpFilterValues } from \"./actions\";\nimport { SetUpFiltersCommand } from \"./request\";\n\nexport class SetUpFiltersHandler extends StoreBaseHandler {\n async handle(request: SetUpFiltersCommand) {\n try {\n this.store.dispatch(setUpFilterValues(request.payload));\n } catch (e) {\n console.error(e.message);\n }\n }\n}\n","import { BrokerExtensions } from \"@primaria/plugins-core\";\nimport { BrokerDisposableHandler } from \"@uxland/primary-shell\";\nimport { SetUpFiltersHandler } from \"./handler\";\nimport { SetUpFiltersCommand } from \"./request\";\n\nlet request: BrokerDisposableHandler;\n\nexport const bootstrapSetUpFilter = (broker: BrokerExtensions) => {\n request = broker.registerRequest(SetUpFiltersCommand, SetUpFiltersHandler);\n};\n\nexport const teardownSetUpFilter = () => {\n request?.dispose();\n};\n","import { BrokerExtensions } from \"@primaria/plugins-core\";\nimport { PrimariaApi } from \"@uxland/primary-shell\";\nimport \"../../activity-history-item/filter/UI/activity-history-filters/activity-history-filters\";\nimport { bootstrapSetCommonFilter, teardownSetCommonFilter } from \"./common-filters/set-common-filter/bootstrapper\";\nimport { bootstrapAddCustomFilter, teardownAddCustomFilter } from \"./custom-filters/add-custom-filters/bootstrapper\";\nimport {\n bootstrapSetCustomFilterAllValues,\n teardownSetCustomFilterAllValues,\n} from \"./custom-filters/set-custom-filter-all-values/bootstrapper\";\nimport {\n bootstrapSetCustomFilterGroup,\n teardownSetCustomFilterGroup,\n} from \"./custom-filters/set-custom-filter-group/bootstrapper\";\nimport {\n bootstrapSetCustomFilterValue,\n teardownSetCustomFilterValue,\n} from \"./custom-filters/set-custom-filter-value/bootstrapper\";\nimport {\n bootstrapDeleteDiagnosticFilterValue,\n teardownDeleteDiagnosticFilterValue,\n} from \"./diagnostic-filters/delete/bootstrapper\";\nimport { bootstrapSetDiagnosticFilter, teardownSetDiagnosticFilter } from \"./diagnostic-filters/set/bootstrapper\";\nimport { subscribeDiagnosticFilters } from \"./diagnostic-filters/subscribe-diagnostic-historic-filters\";\nimport { bootstrapResetFilters, teardownResetFilters } from \"./reset/bootstrapper\";\nimport { bootstrapAddUpFilter, teardownAddUpFilter } from \"./up-filters/add/bootstrapper\";\nimport { bootstrapSetUpFilter, teardownSetUpFilter } from \"./up-filters/set/bootstrapper\";\n\nexport const bootstrapFilters = (broker: BrokerExtensions, api: PrimariaApi) => {\n bootstrapSetCommonFilter(broker);\n bootstrapAddCustomFilter(broker);\n bootstrapSetCustomFilterGroup(broker);\n bootstrapSetCustomFilterValue(broker);\n bootstrapSetCustomFilterAllValues(broker);\n bootstrapSetDiagnosticFilter(broker);\n bootstrapDeleteDiagnosticFilterValue(broker);\n bootstrapAddUpFilter(broker);\n bootstrapSetUpFilter(broker);\n bootstrapResetFilters(broker);\n subscribeDiagnosticFilters(api);\n};\n\nexport const teardownFilters = () => {\n teardownSetCommonFilter();\n teardownAddCustomFilter();\n teardownSetCustomFilterGroup();\n teardownSetCustomFilterValue();\n teardownSetCustomFilterAllValues();\n teardownSetDiagnosticFilter();\n teardownDeleteDiagnosticFilterValue();\n teardownAddUpFilter();\n teardownSetUpFilter();\n teardownResetFilters();\n};\n","// Rough per-element pixel costs used to pre-estimate each group's rendered\n// height for the virtual scroller. They don't need to be exact — only to scale\n// with a group's content so the virtualizer's offsets track reality. A flat\n// estimate left tall groups badly under-estimated, which produced large scroll\n// corrections when scrolling up into them (the \"stuck scroll\" symptom).\nexport const GROUP_BASE_HEIGHT = 88;\nexport const GROUP_ITEM_HEIGHT = 64;\nexport const GROUP_SUBGROUP_HEADER_HEIGHT = 44;\n","import { IActivityHistoryGroup } from \"../../../domain/model\";\nimport { GROUP_BASE_HEIGHT, GROUP_ITEM_HEIGHT, GROUP_SUBGROUP_HEADER_HEIGHT } from \"./constants\";\n\n// Deterministic, content-based height estimate for a group. It is a pure\n// function of the group's item/subgroup counts, so it never mutates the\n// virtualizer or schedules a render — unlike the adaptive running-average\n// estimate that did and hung the app. Scaling the estimate with item count\n// keeps the virtualizer's offsets close to the real heights, which is what\n// stops the scroll snapping back when you scroll up into groups that were\n// never measured.\nexport const estimateGroupHeight = (group: IActivityHistoryGroup | undefined): number => {\n if (!group) return GROUP_BASE_HEIGHT;\n\n const directItems = group.items?.length ?? 0;\n const subGroups = group.subGroups ?? [];\n const subGroupItems = subGroups.reduce((total, subGroup) => total + (subGroup.items?.length ?? 0), 0);\n\n return GROUP_BASE_HEIGHT + (directItems + subGroupItems) * GROUP_ITEM_HEIGHT + subGroups.length * GROUP_SUBGROUP_HEADER_HEIGHT;\n};\n","import{isSingleExpression as rt}from\"./directive-helpers.js\";import{Directive as i,PartType as t}from\"./directive.js\";export{directive}from\"./directive.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const mt=(i,t)=>{const e=i._$AN;if(void 0===e)return!1;for(const i of e)i._$AO?.(t,!1),mt(i,t);return!0},_t=i=>{let t,e;do{if(void 0===(t=i._$AM))break;e=t._$AN,e.delete(i),i=t}while(0===e?.size)},wt=i=>{for(let t;t=i._$AM;i=t){let e=t._$AN;if(void 0===e)t._$AN=e=new Set;else if(e.has(i))break;e.add(i),gt(t)}};function bt(i){void 0!==this._$AN?(_t(this),this._$AM=i,wt(this)):this._$AM=i}function yt(i,t=!1,e=0){const s=this._$AH,o=this._$AN;if(void 0!==o&&0!==o.size)if(t)if(Array.isArray(s))for(let i=e;i<s.length;i++)mt(s[i],!1),_t(s[i]);else null!=s&&(mt(s,!1),_t(s));else mt(this,i)}const gt=i=>{i.type==t.CHILD&&(i._$AP??=yt,i._$AQ??=bt)};class $t extends i{constructor(){super(...arguments),this._$AN=void 0}_$AT(i,t,e){super._$AT(i,t,e),wt(this),this.isConnected=i._$AU}_$AO(i,t=!0){i!==this.isConnected&&(this.isConnected=i,i?this.reconnected?.():this.disconnected?.()),t&&(mt(this,i),_t(this))}setValue(i){if(rt(this.t))this.t._$AI(i,this);else{const t=[...this.t._$AH];t[this.i]=i,this.t._$AI(t,this,0)}}disconnected(){}reconnected(){}}export{$t as AsyncDirective,i as Directive,t as PartType};\n//# sourceMappingURL=async-directive.js.map\n","import{nothing as D}from\"../lit-html.js\";import{AsyncDirective as $t}from\"../async-directive.js\";import{directive as e}from\"../directive.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const ii=()=>new Zt;class Zt{}const qt=new WeakMap,Kt=e(class extends $t{render(t){return D}update(t,[i]){const s=i!==this.Y;return s&&void 0!==this.Y&&this.rt(void 0),(s||this.lt!==this.ct)&&(this.Y=i,this.ht=t.options?.host,this.rt(this.ct=t.element)),D}rt(t){if(this.isConnected||(t=void 0),\"function\"==typeof this.Y){const i=this.ht??globalThis;let s=qt.get(i);void 0===s&&(s=new WeakMap,qt.set(i,s)),void 0!==s.get(this.Y)&&this.Y.call(this.ht,void 0),s.set(this.Y,t),void 0!==t&&this.Y.call(this.ht,t)}else this.Y.value=t}get lt(){return\"function\"==typeof this.Y?qt.get(this.ht??globalThis)?.get(this.Y):this.Y?.value}disconnected(){this.lt===this.ct&&this.rt(void 0)}reconnected(){this.rt(this.ct)}});export{ii as createRef,Kt as ref};\n//# sourceMappingURL=ref.js.map\n","import { html } from \"lit\";\nimport { ActivityHistoryIsGroupingBusy } from \"./component\";\nimport { translate } from \"../../../../localization\";\n\nexport const template = (_props: ActivityHistoryIsGroupingBusy) => html`\n <div class=\"grouping-busy-container\">\n <dss-spinner size=\"sm\"></dss-spinner>\n <div>${translate(\"isGrouping\")}</div>\n </div>\n`;\n","import { LitElement, html, css, unsafeCSS } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\nimport styles from \"./styles.css?inline\";\nimport { template } from \"./template\";\n\n@customElement(\"activity-history-is-grouping-busy\")\nexport class ActivityHistoryIsGroupingBusy extends LitElement {\n static styles = css`\n ${unsafeCSS(styles)}\n `;\n\n render() {\n return template(this);\n }\n} ","import { IActivityHistoryItem, IActivityHistoryItemWithComponent } from \"./model\";\n\nexport function shouldShowRole(item: IActivityHistoryItem): boolean {\n return !item.professional?.speciality?.description;\n}\n\nexport const hasItemDivider = (\n item: IActivityHistoryItemWithComponent,\n items: IActivityHistoryItemWithComponent[],\n): boolean => {\n const currentIndex = items.findIndex((i) => i.id === item.id);\n\n if (currentIndex === -1) {\n // Item no encontrado, por seguridad\n return false;\n }\n\n if (currentIndex === items.length - 1) {\n // Es el último elemento\n return true;\n }\n\n return !item.diagnostics?.length;\n};\n","import {\n IActivityHistoryGroup,\n IActivityHistoryItemWithComponent,\n IActivityHistorySubGroup,\n} from \"../../domain/model\";\n\nexport type ActivityHistoryEntry =\n | { type: \"item\"; date: Date; item: IActivityHistoryItemWithComponent }\n | { type: \"subGroup\"; date: Date; subGroup: IActivityHistorySubGroup };\n\nexport const mergeHistoryItemsAndSubgroups = (\n group: IActivityHistoryGroup,\n): ActivityHistoryEntry[] => {\n // 1. Prepara los items sueltos\n const itemEntries: ActivityHistoryEntry[] = group?.items.map((item) => ({\n type: \"item\",\n date: new Date(item.date),\n item,\n }));\n\n // 2. Prepara los subGroups, usando la fecha del ítem más reciente de cada subgrupo\n const subGroupEntries: ActivityHistoryEntry[] = group?.subGroups.map((subGroup) => {\n // Asumimos que subGroup.items ya está ordenado de más reciente a más antiguo\n const mostRecent = subGroup?.items.length ? new Date(subGroup.items[0].date) : new Date(0);\n return {\n type: \"subGroup\",\n date: mostRecent,\n subGroup,\n };\n });\n\n // 3. Fusiona y ordena\n return [...itemEntries, ...subGroupEntries].sort((a, b) => b.date.getTime() - a.date.getTime());\n};\n","import { format } from \"date-fns\";\nimport { html, nothing } from \"lit\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport { ref } from \"lit/directives/ref.js\";\nimport { repeat } from \"lit/directives/repeat.js\";\nimport { translate } from \"../../../../localization\";\nimport \"../../../add/handle-busy/is-grouping-busy/component\";\nimport { hasItemDivider, shouldShowRole } from \"../../../domain/business-rules\";\nimport {\n IActivityHistoryDiagnostic,\n IActivityHistoryGroup,\n IActivityHistoryItem,\n IActivityHistoryItemWithComponent,\n} from \"../../../domain/model\";\nimport {\n ActivityHistoryEntry,\n mergeHistoryItemsAndSubgroups,\n} from \"../../merge-history-items-and-subgroups/merge-history-items-and-subgroups\";\nimport { ActivityHistoryTimeline } from \"./activity-history-timeline\";\n\nexport const template = (props: ActivityHistoryTimeline) => {\n return html`\n <div class=\"container\">\n <activity-history-full-data-error></activity-history-full-data-error>\n <activity-history-partial-data-error></activity-history-partial-data-error>\n\n ${\n props.historyGroups?.length > 0\n ? html`\n <div class=\"virtual-container\">\n <div class=\"virtual-viewport\" @scroll=${props._onScroll}>\n <div class=\"virtual-content\" style=\"height: ${props._totalHeight}px;\">\n <div class=\"virtual-items\" style=\"transform: translateY(${props._containerOffset}px)\">\n ${repeat(\n props._visibleRows,\n (row) => row.group?.items?.[0]?.id || row.group?.subGroups?.[0]?.items?.[0]?.id,\n ({ index, group: itemGroup }) => {\n return html`\n <div class=\"visit\"\n data-index=${index}\n ${ref(props._measureElement)}\n data-date=${ifDefined(itemGroup?.items[0]?.date || itemGroup?.subGroups[0]?.items[0]?.date)}>\n ${visitHeaderTemplate(props, itemGroup?.items[0] || itemGroup?.subGroups[0]?.items[0], itemGroup)}\n <div class=\"visit__items\">\n ${repeat(\n mergeHistoryItemsAndSubgroups(itemGroup),\n (entry) => (entry.type === \"item\" ? entry.item.id : entry.subGroup.id),\n (entry: ActivityHistoryEntry) => {\n if (entry.type === \"item\") {\n const item = entry.item;\n return html`\n <div\n class=\"item\"\n ?has-divider=${hasItemDivider(item, itemGroup?.items as IActivityHistoryItemWithComponent[])}\n >\n ${item.component}\n </div>\n `;\n }\n const subGroup = entry.subGroup;\n return html`\n <div class=\"diagnostics\">\n ${diagnosticHeaderTemplate(subGroup?.items[0])}\n <div class=\"diagnostics__items\">\n ${repeat(\n subGroup?.items,\n (item) => item.id,\n (item: IActivityHistoryItemWithComponent) => html`\n <div class=\"item\"\n ?has-divider=${hasItemDivider(item, subGroup?.items as IActivityHistoryItemWithComponent[])}>\n ${item.component}\n </div>\n `,\n )}\n </div>\n </div>\n `;\n },\n )}\n </div>\n </div>\n `;\n },\n )}\n </div>\n </div>\n </div>\n </div>\n `\n : noGroupsTemplate(props)\n }\n </div>\n `;\n};\n\nconst noGroupsTemplate = (props: ActivityHistoryTimeline) => html`\n${\n props.searchString?.length > 1\n ? html`\n <dss-user-feedback\n class=\"feedback\"\n status=\"empty\"\n titleText=${translate(\"noResults\")}>\n </dss-user-feedback>\n `\n : props.isAnyCollectionBusy\n ? html`<activity-history-is-grouping-busy></activity-history-is-grouping-busy>`\n : props._canShowNoDataMessage\n ? html`<dss-user-feedback\n class=\"feedback\"\n status=\"empty\"\n titleText=${translate(\"noData.title\")}\n description=${translate(\"noData.description\")}>\n </dss-user-feedback>`\n : nothing\n}`;\n\nconst visitHeaderTemplate = (\n props: ActivityHistoryTimeline,\n item: IActivityHistoryItem | undefined,\n itemGroup?: IActivityHistoryGroup,\n) => {\n if (!item) return nothing;\n return html`\n <div class=\"visit__header\">\n <div class=\"title\">\n <div class=\"title-date\">\n <div>${format(new Date(item.date), \"dd/MM/yyyy\")}</div>\n </div>\n <div class=\"title-description\">\n <div>\n ${renderProfessionalValues(props, item, itemGroup)}\n </div>\n </div>\n </div>\n </div>\n `;\n};\n\n// Buscar el primer servei informat dins del grup\nconst findServiceInGroup = (itemGroup?: IActivityHistoryGroup): { id?: string; description?: string } | undefined => {\n if (!itemGroup) return undefined;\n\n // Buscar en items\n for (const item of itemGroup.items || []) {\n if (item.service?.id) return item.service;\n }\n\n // Buscar en subGroups\n for (const subGroup of itemGroup.subGroups || []) {\n for (const item of subGroup.items || []) {\n if (item.service?.id) return item.service;\n }\n }\n\n return undefined;\n};\n\nconst renderProfessionalValues = (\n props: ActivityHistoryTimeline,\n item: IActivityHistoryItem,\n itemGroup?: IActivityHistoryGroup,\n) => {\n if (!item.professional) return nothing;\n const showRole = shouldShowRole(item);\n\n const values: Array<any> = [];\n\n values.push(props.highlighted(item.professional.name));\n\n if (showRole && item.professional?.role?.description) {\n values.push(props.highlighted(item.professional.role.description));\n }\n\n if (item.professional?.speciality?.description) {\n values.push(props.highlighted(item.professional.speciality.description));\n }\n\n if (item.up?.description) {\n values.push(props.highlighted(item.up.description));\n }\n\n // Buscar el servei: primer de l'item, si no del grup\n const service = item.service?.description ? item.service : findServiceInGroup(itemGroup);\n if (service?.description) {\n values.push(props.highlighted(service.description));\n }\n\n return values.map((v, i) => html`${v}${i < values.length - 1 ? \" | \" : \"\"}`);\n};\n\nconst diagnosticHeaderTemplate = (item: IActivityHistoryItem | undefined) =>\n item &&\n html`\n <div class=\"diagnostics__header\">\n ${item.diagnostics\n .filter((diagnostic: IActivityHistoryDiagnostic) => diagnostic.descripcio != null && diagnostic.descripcio.trim() !== \"\")\n .map(\n (diagnostic: IActivityHistoryDiagnostic) =>\n html`<dss-badge label=${diagnostic.descripcio?.toUpperCase() as string} status=\"info\" size=\"sm\" outlined hideIcon></dss-badge>`,\n )}\n </div>\n `;\n","function memo(getDeps, fn, opts) {\n let deps = opts.initialDeps ?? [];\n let result;\n let isInitial = true;\n function memoizedFunction() {\n var _a, _b, _c;\n let depTime;\n if (opts.key && ((_a = opts.debug) == null ? void 0 : _a.call(opts))) depTime = Date.now();\n const newDeps = getDeps();\n const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);\n if (!depsChanged) {\n return result;\n }\n deps = newDeps;\n let resultTime;\n if (opts.key && ((_b = opts.debug) == null ? void 0 : _b.call(opts))) resultTime = Date.now();\n result = fn(...newDeps);\n if (opts.key && ((_c = opts.debug) == null ? void 0 : _c.call(opts))) {\n const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;\n const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;\n const resultFpsPercentage = resultEndTime / 16;\n const pad = (str, num) => {\n str = String(str);\n while (str.length < num) {\n str = \" \" + str;\n }\n return str;\n };\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120)\n )}deg 100% 31%);`,\n opts == null ? void 0 : opts.key\n );\n }\n if ((opts == null ? void 0 : opts.onChange) && !(isInitial && opts.skipInitialOnChange)) {\n opts.onChange(result);\n }\n isInitial = false;\n return result;\n }\n memoizedFunction.updateDeps = (newDeps) => {\n deps = newDeps;\n };\n return memoizedFunction;\n}\nfunction notUndefined(value, msg) {\n if (value === void 0) {\n throw new Error(`Unexpected undefined${msg ? `: ${msg}` : \"\"}`);\n } else {\n return value;\n }\n}\nconst approxEqual = (a, b) => Math.abs(a - b) < 1.01;\nconst debounce = (targetWindow, fn, ms) => {\n let timeoutId;\n return function(...args) {\n targetWindow.clearTimeout(timeoutId);\n timeoutId = targetWindow.setTimeout(() => fn.apply(this, args), ms);\n };\n};\nexport {\n approxEqual,\n debounce,\n memo,\n notUndefined\n};\n//# sourceMappingURL=utils.js.map\n","import { debounce, memo, notUndefined, approxEqual } from \"./utils.js\";\nconst getRect = (element) => {\n const { offsetWidth, offsetHeight } = element;\n return { width: offsetWidth, height: offsetHeight };\n};\nconst defaultKeyExtractor = (index) => index;\nconst defaultRangeExtractor = (range) => {\n const start = Math.max(range.startIndex - range.overscan, 0);\n const end = Math.min(range.endIndex + range.overscan, range.count - 1);\n const arr = [];\n for (let i = start; i <= end; i++) {\n arr.push(i);\n }\n return arr;\n};\nconst observeElementRect = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n const handler = (rect) => {\n const { width, height } = rect;\n cb({ width: Math.round(width), height: Math.round(height) });\n };\n handler(getRect(element));\n if (!targetWindow.ResizeObserver) {\n return () => {\n };\n }\n const observer = new targetWindow.ResizeObserver((entries) => {\n const run = () => {\n const entry = entries[0];\n if (entry == null ? void 0 : entry.borderBoxSize) {\n const box = entry.borderBoxSize[0];\n if (box) {\n handler({ width: box.inlineSize, height: box.blockSize });\n return;\n }\n }\n handler(getRect(element));\n };\n instance.options.useAnimationFrameWithResizeObserver ? requestAnimationFrame(run) : run();\n });\n observer.observe(element, { box: \"border-box\" });\n return () => {\n observer.unobserve(element);\n };\n};\nconst addEventListenerOptions = {\n passive: true\n};\nconst observeWindowRect = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const handler = () => {\n cb({ width: element.innerWidth, height: element.innerHeight });\n };\n handler();\n element.addEventListener(\"resize\", handler, addEventListenerOptions);\n return () => {\n element.removeEventListener(\"resize\", handler);\n };\n};\nconst supportsScrollend = typeof window == \"undefined\" ? true : \"onscrollend\" in window;\nconst observeElementOffset = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n let offset = 0;\n const fallback = instance.options.useScrollendEvent && supportsScrollend ? () => void 0 : debounce(\n targetWindow,\n () => {\n cb(offset, false);\n },\n instance.options.isScrollingResetDelay\n );\n const createHandler = (isScrolling) => () => {\n const { horizontal, isRtl } = instance.options;\n offset = horizontal ? element[\"scrollLeft\"] * (isRtl && -1 || 1) : element[\"scrollTop\"];\n fallback();\n cb(offset, isScrolling);\n };\n const handler = createHandler(true);\n const endHandler = createHandler(false);\n element.addEventListener(\"scroll\", handler, addEventListenerOptions);\n const registerScrollendEvent = instance.options.useScrollendEvent && supportsScrollend;\n if (registerScrollendEvent) {\n element.addEventListener(\"scrollend\", endHandler, addEventListenerOptions);\n }\n return () => {\n element.removeEventListener(\"scroll\", handler);\n if (registerScrollendEvent) {\n element.removeEventListener(\"scrollend\", endHandler);\n }\n };\n};\nconst observeWindowOffset = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n let offset = 0;\n const fallback = instance.options.useScrollendEvent && supportsScrollend ? () => void 0 : debounce(\n targetWindow,\n () => {\n cb(offset, false);\n },\n instance.options.isScrollingResetDelay\n );\n const createHandler = (isScrolling) => () => {\n offset = element[instance.options.horizontal ? \"scrollX\" : \"scrollY\"];\n fallback();\n cb(offset, isScrolling);\n };\n const handler = createHandler(true);\n const endHandler = createHandler(false);\n element.addEventListener(\"scroll\", handler, addEventListenerOptions);\n const registerScrollendEvent = instance.options.useScrollendEvent && supportsScrollend;\n if (registerScrollendEvent) {\n element.addEventListener(\"scrollend\", endHandler, addEventListenerOptions);\n }\n return () => {\n element.removeEventListener(\"scroll\", handler);\n if (registerScrollendEvent) {\n element.removeEventListener(\"scrollend\", endHandler);\n }\n };\n};\nconst measureElement = (element, entry, instance) => {\n if (entry == null ? void 0 : entry.borderBoxSize) {\n const box = entry.borderBoxSize[0];\n if (box) {\n const size = Math.round(\n box[instance.options.horizontal ? \"inlineSize\" : \"blockSize\"]\n );\n return size;\n }\n }\n return element[instance.options.horizontal ? \"offsetWidth\" : \"offsetHeight\"];\n};\nconst windowScroll = (offset, {\n adjustments = 0,\n behavior\n}, instance) => {\n var _a, _b;\n const toOffset = offset + adjustments;\n (_b = (_a = instance.scrollElement) == null ? void 0 : _a.scrollTo) == null ? void 0 : _b.call(_a, {\n [instance.options.horizontal ? \"left\" : \"top\"]: toOffset,\n behavior\n });\n};\nconst elementScroll = (offset, {\n adjustments = 0,\n behavior\n}, instance) => {\n var _a, _b;\n const toOffset = offset + adjustments;\n (_b = (_a = instance.scrollElement) == null ? void 0 : _a.scrollTo) == null ? void 0 : _b.call(_a, {\n [instance.options.horizontal ? \"left\" : \"top\"]: toOffset,\n behavior\n });\n};\nclass Virtualizer {\n constructor(opts) {\n this.unsubs = [];\n this.scrollElement = null;\n this.targetWindow = null;\n this.isScrolling = false;\n this.scrollState = null;\n this.measurementsCache = [];\n this.itemSizeCache = /* @__PURE__ */ new Map();\n this.laneAssignments = /* @__PURE__ */ new Map();\n this.pendingMeasuredCacheIndexes = [];\n this.prevLanes = void 0;\n this.lanesChangedFlag = false;\n this.lanesSettling = false;\n this.scrollRect = null;\n this.scrollOffset = null;\n this.scrollDirection = null;\n this.scrollAdjustments = 0;\n this.elementsCache = /* @__PURE__ */ new Map();\n this.now = () => {\n var _a, _b, _c;\n return ((_c = (_b = (_a = this.targetWindow) == null ? void 0 : _a.performance) == null ? void 0 : _b.now) == null ? void 0 : _c.call(_b)) ?? Date.now();\n };\n this.observer = /* @__PURE__ */ (() => {\n let _ro = null;\n const get = () => {\n if (_ro) {\n return _ro;\n }\n if (!this.targetWindow || !this.targetWindow.ResizeObserver) {\n return null;\n }\n return _ro = new this.targetWindow.ResizeObserver((entries) => {\n entries.forEach((entry) => {\n const run = () => {\n const node = entry.target;\n const index = this.indexFromElement(node);\n if (!node.isConnected) {\n this.observer.unobserve(node);\n return;\n }\n if (this.shouldMeasureDuringScroll(index)) {\n this.resizeItem(\n index,\n this.options.measureElement(node, entry, this)\n );\n }\n };\n this.options.useAnimationFrameWithResizeObserver ? requestAnimationFrame(run) : run();\n });\n });\n };\n return {\n disconnect: () => {\n var _a;\n (_a = get()) == null ? void 0 : _a.disconnect();\n _ro = null;\n },\n observe: (target) => {\n var _a;\n return (_a = get()) == null ? void 0 : _a.observe(target, { box: \"border-box\" });\n },\n unobserve: (target) => {\n var _a;\n return (_a = get()) == null ? void 0 : _a.unobserve(target);\n }\n };\n })();\n this.range = null;\n this.setOptions = (opts2) => {\n Object.entries(opts2).forEach(([key, value]) => {\n if (typeof value === \"undefined\") delete opts2[key];\n });\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {\n },\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n gap: 0,\n indexAttribute: \"data-index\",\n initialMeasurementsCache: [],\n lanes: 1,\n isScrollingResetDelay: 150,\n enabled: true,\n isRtl: false,\n useScrollendEvent: false,\n useAnimationFrameWithResizeObserver: false,\n laneAssignmentMode: \"estimate\",\n ...opts2\n };\n };\n this.notify = (sync) => {\n var _a, _b;\n (_b = (_a = this.options).onChange) == null ? void 0 : _b.call(_a, this, sync);\n };\n this.maybeNotify = memo(\n () => {\n this.calculateRange();\n return [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null\n ];\n },\n (isScrolling) => {\n this.notify(isScrolling);\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"maybeNotify\",\n debug: () => this.options.debug,\n initialDeps: [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null\n ]\n }\n );\n this.cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d());\n this.unsubs = [];\n this.observer.disconnect();\n if (this.rafId != null && this.targetWindow) {\n this.targetWindow.cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n this.scrollState = null;\n this.scrollElement = null;\n this.targetWindow = null;\n };\n this._didMount = () => {\n return () => {\n this.cleanup();\n };\n };\n this._willUpdate = () => {\n var _a;\n const scrollElement = this.options.enabled ? this.options.getScrollElement() : null;\n if (this.scrollElement !== scrollElement) {\n this.cleanup();\n if (!scrollElement) {\n this.maybeNotify();\n return;\n }\n this.scrollElement = scrollElement;\n if (this.scrollElement && \"ownerDocument\" in this.scrollElement) {\n this.targetWindow = this.scrollElement.ownerDocument.defaultView;\n } else {\n this.targetWindow = ((_a = this.scrollElement) == null ? void 0 : _a.window) ?? null;\n }\n this.elementsCache.forEach((cached) => {\n this.observer.observe(cached);\n });\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect;\n this.maybeNotify();\n })\n );\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset, isScrolling) => {\n this.scrollAdjustments = 0;\n this.scrollDirection = isScrolling ? this.getScrollOffset() < offset ? \"forward\" : \"backward\" : null;\n this.scrollOffset = offset;\n this.isScrolling = isScrolling;\n if (this.scrollState) {\n this.scheduleScrollReconcile();\n }\n this.maybeNotify();\n })\n );\n this._scrollToOffset(this.getScrollOffset(), {\n adjustments: void 0,\n behavior: void 0\n });\n }\n };\n this.rafId = null;\n this.getSize = () => {\n if (!this.options.enabled) {\n this.scrollRect = null;\n return 0;\n }\n this.scrollRect = this.scrollRect ?? this.options.initialRect;\n return this.scrollRect[this.options.horizontal ? \"width\" : \"height\"];\n };\n this.getScrollOffset = () => {\n if (!this.options.enabled) {\n this.scrollOffset = null;\n return 0;\n }\n this.scrollOffset = this.scrollOffset ?? (typeof this.options.initialOffset === \"function\" ? this.options.initialOffset() : this.options.initialOffset);\n return this.scrollOffset;\n };\n this.getFurthestMeasurement = (measurements, index) => {\n const furthestMeasurementsFound = /* @__PURE__ */ new Map();\n const furthestMeasurements = /* @__PURE__ */ new Map();\n for (let m = index - 1; m >= 0; m--) {\n const measurement = measurements[m];\n if (furthestMeasurementsFound.has(measurement.lane)) {\n continue;\n }\n const previousFurthestMeasurement = furthestMeasurements.get(\n measurement.lane\n );\n if (previousFurthestMeasurement == null || measurement.end > previousFurthestMeasurement.end) {\n furthestMeasurements.set(measurement.lane, measurement);\n } else if (measurement.end < previousFurthestMeasurement.end) {\n furthestMeasurementsFound.set(measurement.lane, true);\n }\n if (furthestMeasurementsFound.size === this.options.lanes) {\n break;\n }\n }\n return furthestMeasurements.size === this.options.lanes ? Array.from(furthestMeasurements.values()).sort((a, b) => {\n if (a.end === b.end) {\n return a.index - b.index;\n }\n return a.end - b.end;\n })[0] : void 0;\n };\n this.getMeasurementOptions = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.options.enabled,\n this.options.lanes,\n this.options.laneAssignmentMode\n ],\n (count, paddingStart, scrollMargin, getItemKey, enabled, lanes, laneAssignmentMode) => {\n const lanesChanged = this.prevLanes !== void 0 && this.prevLanes !== lanes;\n if (lanesChanged) {\n this.lanesChangedFlag = true;\n }\n this.prevLanes = lanes;\n this.pendingMeasuredCacheIndexes = [];\n return {\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n enabled,\n lanes,\n laneAssignmentMode\n };\n },\n {\n key: false\n }\n );\n this.getMeasurements = memo(\n () => [this.getMeasurementOptions(), this.itemSizeCache],\n ({\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n enabled,\n lanes,\n laneAssignmentMode\n }, itemSizeCache) => {\n if (!enabled) {\n this.measurementsCache = [];\n this.itemSizeCache.clear();\n this.laneAssignments.clear();\n return [];\n }\n if (this.laneAssignments.size > count) {\n for (const index of this.laneAssignments.keys()) {\n if (index >= count) {\n this.laneAssignments.delete(index);\n }\n }\n }\n if (this.lanesChangedFlag) {\n this.lanesChangedFlag = false;\n this.lanesSettling = true;\n this.measurementsCache = [];\n this.itemSizeCache.clear();\n this.laneAssignments.clear();\n this.pendingMeasuredCacheIndexes = [];\n }\n if (this.measurementsCache.length === 0 && !this.lanesSettling) {\n this.measurementsCache = this.options.initialMeasurementsCache;\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache.set(item.key, item.size);\n });\n }\n const min = this.lanesSettling ? 0 : this.pendingMeasuredCacheIndexes.length > 0 ? Math.min(...this.pendingMeasuredCacheIndexes) : 0;\n this.pendingMeasuredCacheIndexes = [];\n if (this.lanesSettling && this.measurementsCache.length === count) {\n this.lanesSettling = false;\n }\n const measurements = this.measurementsCache.slice(0, min);\n const laneLastIndex = new Array(lanes).fill(\n void 0\n );\n for (let m = 0; m < min; m++) {\n const item = measurements[m];\n if (item) {\n laneLastIndex[item.lane] = m;\n }\n }\n for (let i = min; i < count; i++) {\n const key = getItemKey(i);\n const cachedLane = this.laneAssignments.get(i);\n let lane;\n let start;\n const shouldCacheLane = laneAssignmentMode === \"estimate\" || itemSizeCache.has(key);\n if (cachedLane !== void 0 && this.options.lanes > 1) {\n lane = cachedLane;\n const prevIndex = laneLastIndex[lane];\n const prevInLane = prevIndex !== void 0 ? measurements[prevIndex] : void 0;\n start = prevInLane ? prevInLane.end + this.options.gap : paddingStart + scrollMargin;\n } else {\n const furthestMeasurement = this.options.lanes === 1 ? measurements[i - 1] : this.getFurthestMeasurement(measurements, i);\n start = furthestMeasurement ? furthestMeasurement.end + this.options.gap : paddingStart + scrollMargin;\n lane = furthestMeasurement ? furthestMeasurement.lane : i % this.options.lanes;\n if (this.options.lanes > 1 && shouldCacheLane) {\n this.laneAssignments.set(i, lane);\n }\n }\n const measuredSize = itemSizeCache.get(key);\n const size = typeof measuredSize === \"number\" ? measuredSize : this.options.estimateSize(i);\n const end = start + size;\n measurements[i] = {\n index: i,\n start,\n size,\n end,\n key,\n lane\n };\n laneLastIndex[lane] = i;\n }\n this.measurementsCache = measurements;\n return measurements;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getMeasurements\",\n debug: () => this.options.debug\n }\n );\n this.calculateRange = memo(\n () => [\n this.getMeasurements(),\n this.getSize(),\n this.getScrollOffset(),\n this.options.lanes\n ],\n (measurements, outerSize, scrollOffset, lanes) => {\n return this.range = measurements.length > 0 && outerSize > 0 ? calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n lanes\n }) : null;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"calculateRange\",\n debug: () => this.options.debug\n }\n );\n this.getVirtualIndexes = memo(\n () => {\n let startIndex = null;\n let endIndex = null;\n const range = this.calculateRange();\n if (range) {\n startIndex = range.startIndex;\n endIndex = range.endIndex;\n }\n this.maybeNotify.updateDeps([this.isScrolling, startIndex, endIndex]);\n return [\n this.options.rangeExtractor,\n this.options.overscan,\n this.options.count,\n startIndex,\n endIndex\n ];\n },\n (rangeExtractor, overscan, count, startIndex, endIndex) => {\n return startIndex === null || endIndex === null ? [] : rangeExtractor({\n startIndex,\n endIndex,\n overscan,\n count\n });\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getVirtualIndexes\",\n debug: () => this.options.debug\n }\n );\n this.indexFromElement = (node) => {\n const attributeName = this.options.indexAttribute;\n const indexStr = node.getAttribute(attributeName);\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`\n );\n return -1;\n }\n return parseInt(indexStr, 10);\n };\n this.shouldMeasureDuringScroll = (index) => {\n var _a;\n if (!this.scrollState || this.scrollState.behavior !== \"smooth\") {\n return true;\n }\n const scrollIndex = this.scrollState.index ?? ((_a = this.getVirtualItemForOffset(this.scrollState.lastTargetOffset)) == null ? void 0 : _a.index);\n if (scrollIndex !== void 0 && this.range) {\n const bufferSize = Math.max(\n this.options.overscan,\n Math.ceil((this.range.endIndex - this.range.startIndex) / 2)\n );\n const minIndex = Math.max(0, scrollIndex - bufferSize);\n const maxIndex = Math.min(\n this.options.count - 1,\n scrollIndex + bufferSize\n );\n return index >= minIndex && index <= maxIndex;\n }\n return true;\n };\n this.measureElement = (node) => {\n if (!node) {\n this.elementsCache.forEach((cached, key2) => {\n if (!cached.isConnected) {\n this.observer.unobserve(cached);\n this.elementsCache.delete(key2);\n }\n });\n return;\n }\n const index = this.indexFromElement(node);\n const key = this.options.getItemKey(index);\n const prevNode = this.elementsCache.get(key);\n if (prevNode !== node) {\n if (prevNode) {\n this.observer.unobserve(prevNode);\n }\n this.observer.observe(node);\n this.elementsCache.set(key, node);\n }\n if ((!this.isScrolling || this.scrollState) && this.shouldMeasureDuringScroll(index)) {\n this.resizeItem(index, this.options.measureElement(node, void 0, this));\n }\n };\n this.resizeItem = (index, size) => {\n var _a;\n const item = this.measurementsCache[index];\n if (!item) return;\n const itemSize = this.itemSizeCache.get(item.key) ?? item.size;\n const delta = size - itemSize;\n if (delta !== 0) {\n if (((_a = this.scrollState) == null ? void 0 : _a.behavior) !== \"smooth\" && (this.shouldAdjustScrollPositionOnItemSizeChange !== void 0 ? this.shouldAdjustScrollPositionOnItemSizeChange(item, delta, this) : item.start < this.getScrollOffset() + this.scrollAdjustments)) {\n if (process.env.NODE_ENV !== \"production\" && this.options.debug) {\n console.info(\"correction\", delta);\n }\n this._scrollToOffset(this.getScrollOffset(), {\n adjustments: this.scrollAdjustments += delta,\n behavior: void 0\n });\n }\n this.pendingMeasuredCacheIndexes.push(item.index);\n this.itemSizeCache = new Map(this.itemSizeCache.set(item.key, size));\n this.notify(false);\n }\n };\n this.getVirtualItems = memo(\n () => [this.getVirtualIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems = [];\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k];\n const measurement = measurements[i];\n virtualItems.push(measurement);\n }\n return virtualItems;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getVirtualItems\",\n debug: () => this.options.debug\n }\n );\n this.getVirtualItemForOffset = (offset) => {\n const measurements = this.getMeasurements();\n if (measurements.length === 0) {\n return void 0;\n }\n return notUndefined(\n measurements[findNearestBinarySearch(\n 0,\n measurements.length - 1,\n (index) => notUndefined(measurements[index]).start,\n offset\n )]\n );\n };\n this.getMaxScrollOffset = () => {\n if (!this.scrollElement) return 0;\n if (\"scrollHeight\" in this.scrollElement) {\n return this.options.horizontal ? this.scrollElement.scrollWidth - this.scrollElement.clientWidth : this.scrollElement.scrollHeight - this.scrollElement.clientHeight;\n } else {\n const doc = this.scrollElement.document.documentElement;\n return this.options.horizontal ? doc.scrollWidth - this.scrollElement.innerWidth : doc.scrollHeight - this.scrollElement.innerHeight;\n }\n };\n this.getOffsetForAlignment = (toOffset, align, itemSize = 0) => {\n if (!this.scrollElement) return 0;\n const size = this.getSize();\n const scrollOffset = this.getScrollOffset();\n if (align === \"auto\") {\n align = toOffset >= scrollOffset + size ? \"end\" : \"start\";\n }\n if (align === \"center\") {\n toOffset += (itemSize - size) / 2;\n } else if (align === \"end\") {\n toOffset -= size;\n }\n const maxOffset = this.getMaxScrollOffset();\n return Math.max(Math.min(maxOffset, toOffset), 0);\n };\n this.getOffsetForIndex = (index, align = \"auto\") => {\n index = Math.max(0, Math.min(index, this.options.count - 1));\n const size = this.getSize();\n const scrollOffset = this.getScrollOffset();\n const item = this.measurementsCache[index];\n if (!item) return;\n if (align === \"auto\") {\n if (item.end >= scrollOffset + size - this.options.scrollPaddingEnd) {\n align = \"end\";\n } else if (item.start <= scrollOffset + this.options.scrollPaddingStart) {\n align = \"start\";\n } else {\n return [scrollOffset, align];\n }\n }\n if (align === \"end\" && index === this.options.count - 1) {\n return [this.getMaxScrollOffset(), align];\n }\n const toOffset = align === \"end\" ? item.end + this.options.scrollPaddingEnd : item.start - this.options.scrollPaddingStart;\n return [\n this.getOffsetForAlignment(toOffset, align, item.size),\n align\n ];\n };\n this.scrollToOffset = (toOffset, { align = \"start\", behavior = \"auto\" } = {}) => {\n const offset = this.getOffsetForAlignment(toOffset, align);\n const now = this.now();\n this.scrollState = {\n index: null,\n align,\n behavior,\n startedAt: now,\n lastTargetOffset: offset,\n stableFrames: 0\n };\n this._scrollToOffset(offset, { adjustments: void 0, behavior });\n this.scheduleScrollReconcile();\n };\n this.scrollToIndex = (index, {\n align: initialAlign = \"auto\",\n behavior = \"auto\"\n } = {}) => {\n index = Math.max(0, Math.min(index, this.options.count - 1));\n const offsetInfo = this.getOffsetForIndex(index, initialAlign);\n if (!offsetInfo) {\n return;\n }\n const [offset, align] = offsetInfo;\n const now = this.now();\n this.scrollState = {\n index,\n align,\n behavior,\n startedAt: now,\n lastTargetOffset: offset,\n stableFrames: 0\n };\n this._scrollToOffset(offset, { adjustments: void 0, behavior });\n this.scheduleScrollReconcile();\n };\n this.scrollBy = (delta, { behavior = \"auto\" } = {}) => {\n const offset = this.getScrollOffset() + delta;\n const now = this.now();\n this.scrollState = {\n index: null,\n align: \"start\",\n behavior,\n startedAt: now,\n lastTargetOffset: offset,\n stableFrames: 0\n };\n this._scrollToOffset(offset, { adjustments: void 0, behavior });\n this.scheduleScrollReconcile();\n };\n this.getTotalSize = () => {\n var _a;\n const measurements = this.getMeasurements();\n let end;\n if (measurements.length === 0) {\n end = this.options.paddingStart;\n } else if (this.options.lanes === 1) {\n end = ((_a = measurements[measurements.length - 1]) == null ? void 0 : _a.end) ?? 0;\n } else {\n const endByLane = Array(this.options.lanes).fill(null);\n let endIndex = measurements.length - 1;\n while (endIndex >= 0 && endByLane.some((val) => val === null)) {\n const item = measurements[endIndex];\n if (endByLane[item.lane] === null) {\n endByLane[item.lane] = item.end;\n }\n endIndex--;\n }\n end = Math.max(...endByLane.filter((val) => val !== null));\n }\n return Math.max(\n end - this.options.scrollMargin + this.options.paddingEnd,\n 0\n );\n };\n this._scrollToOffset = (offset, {\n adjustments,\n behavior\n }) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this);\n };\n this.measure = () => {\n this.itemSizeCache = /* @__PURE__ */ new Map();\n this.laneAssignments = /* @__PURE__ */ new Map();\n this.notify(false);\n };\n this.setOptions(opts);\n }\n scheduleScrollReconcile() {\n if (!this.targetWindow) {\n this.scrollState = null;\n return;\n }\n if (this.rafId != null) return;\n this.rafId = this.targetWindow.requestAnimationFrame(() => {\n this.rafId = null;\n this.reconcileScroll();\n });\n }\n reconcileScroll() {\n if (!this.scrollState) return;\n const el = this.scrollElement;\n if (!el) return;\n const MAX_RECONCILE_MS = 5e3;\n if (this.now() - this.scrollState.startedAt > MAX_RECONCILE_MS) {\n this.scrollState = null;\n return;\n }\n const offsetInfo = this.scrollState.index != null ? this.getOffsetForIndex(this.scrollState.index, this.scrollState.align) : void 0;\n const targetOffset = offsetInfo ? offsetInfo[0] : this.scrollState.lastTargetOffset;\n const STABLE_FRAMES = 1;\n const targetChanged = targetOffset !== this.scrollState.lastTargetOffset;\n if (!targetChanged && approxEqual(targetOffset, this.getScrollOffset())) {\n this.scrollState.stableFrames++;\n if (this.scrollState.stableFrames >= STABLE_FRAMES) {\n this.scrollState = null;\n return;\n }\n } else {\n this.scrollState.stableFrames = 0;\n if (targetChanged) {\n this.scrollState.lastTargetOffset = targetOffset;\n this.scrollState.behavior = \"auto\";\n this._scrollToOffset(targetOffset, {\n adjustments: void 0,\n behavior: \"auto\"\n });\n }\n }\n this.scheduleScrollReconcile();\n }\n}\nconst findNearestBinarySearch = (low, high, getCurrentValue, value) => {\n while (low <= high) {\n const middle = (low + high) / 2 | 0;\n const currentValue = getCurrentValue(middle);\n if (currentValue < value) {\n low = middle + 1;\n } else if (currentValue > value) {\n high = middle - 1;\n } else {\n return middle;\n }\n }\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n};\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n lanes\n}) {\n const lastIndex = measurements.length - 1;\n const getOffset = (index) => measurements[index].start;\n if (measurements.length <= lanes) {\n return {\n startIndex: 0,\n endIndex: lastIndex\n };\n }\n let startIndex = findNearestBinarySearch(\n 0,\n lastIndex,\n getOffset,\n scrollOffset\n );\n let endIndex = startIndex;\n if (lanes === 1) {\n while (endIndex < lastIndex && measurements[endIndex].end < scrollOffset + outerSize) {\n endIndex++;\n }\n } else if (lanes > 1) {\n const endPerLane = Array(lanes).fill(0);\n while (endIndex < lastIndex && endPerLane.some((pos) => pos < scrollOffset + outerSize)) {\n const item = measurements[endIndex];\n endPerLane[item.lane] = item.end;\n endIndex++;\n }\n const startPerLane = Array(lanes).fill(scrollOffset + outerSize);\n while (startIndex >= 0 && startPerLane.some((pos) => pos >= scrollOffset)) {\n const item = measurements[startIndex];\n startPerLane[item.lane] = item.start;\n startIndex--;\n }\n startIndex = Math.max(0, startIndex - startIndex % lanes);\n endIndex = Math.min(lastIndex, endIndex + (lanes - 1 - endIndex % lanes));\n }\n return { startIndex, endIndex };\n}\nexport {\n Virtualizer,\n approxEqual,\n debounce,\n defaultKeyExtractor,\n defaultRangeExtractor,\n elementScroll,\n measureElement,\n memo,\n notUndefined,\n observeElementOffset,\n observeElementRect,\n observeWindowOffset,\n observeWindowRect,\n windowScroll\n};\n//# sourceMappingURL=index.js.map\n","import { VirtualItem, Virtualizer, elementScroll, observeElementOffset, observeElementRect } from \"@tanstack/virtual-core\";\n\nexport type { VirtualItem };\n\nexport interface VirtualScrollerOptions<T> {\n items: T[];\n // Per-index height estimate. Must be a pure function of the item data (no\n // virtualizer mutation, no render scheduling) so it can't re-enter the\n // measure cycle. Callers with uniform rows can return a constant.\n estimateItemHeight: (index: number) => number;\n overscan?: number;\n measureElement?: (element: HTMLElement) => number;\n}\n\n/**\n * Default element measurement. Unlike `getBoundingClientRect().height`, this\n * also accounts for the vertical margins of the item so the virtualizer's\n * cumulative offsets stay aligned with the real document flow (the visible\n * items are laid out with `margin-bottom` between them). Without this, every\n * item would be measured slightly shorter than it actually occupies, and the\n * error accumulates the further you scroll.\n */\nconst measureElementWithMargins = (element: HTMLElement): number => {\n const height = element.getBoundingClientRect().height;\n const style = window.getComputedStyle(element);\n const marginTop = Number.parseFloat(style.marginTop) || 0;\n const marginBottom = Number.parseFloat(style.marginBottom) || 0;\n return Math.round(height + marginTop + marginBottom);\n};\n\nexport interface VirtualScrollerState {\n virtualItems: VirtualItem[];\n totalHeight: number;\n}\n\nexport class VirtualScroller<T = any> {\n private _virtualizer?: Virtualizer<HTMLElement, HTMLElement>;\n private _viewport?: HTMLElement;\n private _cleanup?: () => void;\n private _options: VirtualScrollerOptions<T>;\n private _lastVisibleState: VirtualScrollerState = { virtualItems: [], totalHeight: 0 };\n private _savedScrollTop = 0;\n private _viewportWasHidden = false;\n\n constructor(options: VirtualScrollerOptions<T>) {\n this._options = options;\n }\n\n setup(viewport: HTMLElement, onStateChange: (state: VirtualScrollerState) => void): () => void {\n this._viewport = viewport;\n\n this._virtualizer = new Virtualizer<HTMLElement, HTMLElement>({\n count: this._options.items.length,\n getScrollElement: () => this._viewport ?? null,\n estimateSize: (index) => this._options.estimateItemHeight(index),\n overscan: this._options.overscan ?? 5,\n measureElement: (element) => this._measureItem(element as HTMLElement),\n observeElementRect,\n observeElementOffset,\n scrollToFn: elementScroll,\n onChange: () => {\n this._trackViewportVisibility();\n onStateChange(this.getState());\n },\n });\n\n this._cleanup = this._virtualizer._didMount();\n this._virtualizer._willUpdate();\n onStateChange(this.getState());\n\n return () => {\n this._cleanup?.();\n };\n }\n\n willUpdate() {\n this._virtualizer?._willUpdate();\n }\n\n updateItems(items: T[], onStateChange?: (state: VirtualScrollerState) => void) {\n this._options.items = items;\n if (this._virtualizer) {\n this._virtualizer.setOptions({\n ...this._virtualizer.options,\n count: items.length,\n });\n this._virtualizer._willUpdate();\n }\n if (onStateChange) {\n onStateChange(this.getState());\n }\n }\n\n measureElement(el: HTMLElement) {\n this._virtualizer?.measureElement(el);\n }\n\n scrollToIndex(index: number, behavior: ScrollBehavior = \"smooth\", align: \"auto\" | \"start\" | \"center\" | \"end\" = \"auto\") {\n this._virtualizer?.scrollToIndex(index, { behavior, align });\n }\n\n /**\n * Estimated `start` offset (px) of an item, using real measurements where\n * available and the size estimate for not-yet-rendered items. Used to jump\n * the viewport near a target before a precise DOM-based alignment, instead of\n * `scrollToIndex` (whose reconcile re-scrolls every frame and froze the UI).\n */\n getOffsetForIndex(index: number): number {\n return this._virtualizer?.getOffsetForIndex(index, \"start\")?.[0] ?? 0;\n }\n\n // While the view is hidden every rendered item's rect measures 0px (though\n // its computed margins do not); the virtualizer's per-item ResizeObserver\n // would push those collapsed sizes into its size cache and apply scroll\n // \"corrections\", shifting every offset. Reuse the cached measurement (or the\n // estimate) so sizes survive the hide/show cycle.\n private _measureItem(element: HTMLElement): number {\n if (element.getBoundingClientRect().height === 0) {\n const index = Number(element.getAttribute(\"data-index\"));\n const cachedSize = this._virtualizer?.measurementsCache[index]?.size;\n\n return cachedSize ?? this._options.estimateItemHeight(index);\n }\n\n return (this._options.measureElement ?? measureElementWithMargins)(element);\n }\n\n // Deactivated region views are hidden with display:none: the viewport\n // measures 0px, the virtualizer nulls its range (empty virtualItems) and the\n // browser may drop the scroll position. Track the hidden viewport so\n // `getState` keeps returning the last visible state, and restore the scroll\n // offset on the first change after the viewport shows again.\n private _trackViewportVisibility() {\n if (!this._viewport) return;\n\n if (this._viewport.clientHeight === 0) {\n this._viewportWasHidden = true;\n\n return;\n }\n\n if (this._viewportWasHidden) {\n this._viewportWasHidden = false;\n this._viewport.scrollTop = this._savedScrollTop;\n }\n\n this._savedScrollTop = this._viewport.scrollTop;\n }\n\n getState(): VirtualScrollerState {\n const isViewportVisible = Boolean(this._viewport && this._viewport.clientHeight > 0);\n\n if (this._virtualizer && isViewportVisible) {\n this._lastVisibleState = {\n virtualItems: this._virtualizer.getVirtualItems(),\n totalHeight: this._virtualizer.getTotalSize(),\n };\n }\n\n return this._lastVisibleState;\n }\n}\n","import { PrimariaApi } from \"@uxland/primary-shell\";\nimport { startOfDay } from \"date-fns\";\nimport { LitElement, css, html, unsafeCSS } from \"lit\";\nimport { customElement, query, state } from \"lit/decorators.js\";\nimport { unsafeHTML } from \"lit/directives/unsafe-html.js\";\nimport { lazyInject } from \"../../../../infrastructure/ioc/container\";\nimport { TYPES } from \"../../../../infrastructure/ioc/types\";\nimport { connectedProperty } from \"../../../../infrastructure/state/connected-property\";\nimport { isAnyCollectionBusySelector, isSomeCollectionLoadedAndOtherLoading } from \"../../../add/handle-busy/selectors\";\nimport { IActivityHistoryGroup } from \"../../../domain/model\";\nimport { activityHistorySearchStringSelector } from \"../../../search/selectors\";\nimport { activityHistoryGroupedItems } from \"../../../selectors\";\nimport { getGroupMostRecentDate } from \"../../sort-history-items-by-date/sort-history-items-by-date\";\nimport { estimateGroupHeight } from \"./estimate-group-height\";\nimport styles from \"./styles.css?inline\";\nimport { template } from \"./template\";\nimport { VirtualScroller, VirtualScrollerState } from \"./virtual-scroller\";\n\n//@ts-ignore\n@customElement(\"activity-history-timeline\")\nexport class ActivityHistoryTimeline extends LitElement {\n render() {\n return html`\n ${template(this)}\n `;\n }\n\n static styles = css`\n ${unsafeCSS(styles)}\n `;\n\n @connectedProperty(activityHistoryGroupedItems)\n historyGroups: IActivityHistoryGroup[];\n\n @connectedProperty(isSomeCollectionLoadedAndOtherLoading)\n isSomeCollectionLoadedAndOtherLoading: boolean;\n\n @connectedProperty(isAnyCollectionBusySelector)\n isAnyCollectionBusy: boolean;\n\n @connectedProperty(activityHistorySearchStringSelector)\n searchString: string;\n\n @lazyInject(TYPES.primaryApi)\n api: PrimariaApi;\n\n @query(\".virtual-container\") private _virtualContainer!: HTMLElement;\n @query(\".virtual-viewport\") private _viewport!: HTMLElement;\n\n // Virtual scroller instance and state\n private _virtualScroller?: VirtualScroller<IActivityHistoryGroup>;\n private _cleanupVirtualScroller?: () => void;\n\n @state()\n _virtualScrollerState: VirtualScrollerState = {\n virtualItems: [],\n totalHeight: 0,\n };\n\n @state()\n _canShowNoDataMessage = false;\n\n private _noDataMessageTimer?: ReturnType<typeof setTimeout>;\n\n connectedCallback(): void {\n super.connectedCallback();\n // Start timer to allow showing \"no data\" message after 5 seconds\n this._noDataMessageTimer = setTimeout(() => {\n this._canShowNoDataMessage = true;\n }, 2000);\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this._cleanupVirtualScroller?.();\n if (this._noDataMessageTimer) {\n clearTimeout(this._noDataMessageTimer);\n }\n }\n\n private _lastViewportElement?: HTMLElement;\n\n async updated(changedProperties) {\n this._virtualScroller?.willUpdate();\n\n if (changedProperties.has(\"historyGroups\") && this.historyGroups?.length) {\n // Resolver los elementos antes de actualizar el template\n await this.prepareComponents(this.historyGroups);\n this._updateVirtualScroller();\n\n // Esperar a que el DOM esté completamente actualizado\n await this.updateComplete;\n }\n\n // Setup virtualizer when viewport is available\n if (this._viewport && !this._virtualScroller) {\n setTimeout(() => this._setupVirtualScroller(), 0);\n }\n\n // Detect if viewport was remounted (new element after being removed from DOM)\n if (this._viewport && this._virtualScroller && this._viewport !== this._lastViewportElement) {\n this._cleanupVirtualScroller?.();\n this._virtualScroller = undefined;\n setTimeout(() => this._setupVirtualScroller(), 0);\n }\n\n // Track current viewport element\n if (this._viewport) {\n this._lastViewportElement = this._viewport;\n }\n }\n\n async prepareComponents(historyGroups) {\n for (const group of historyGroups) {\n // Resolver items del grupo principal\n group.items = await Promise.all(\n group.items.map(async (item) => ({\n ...item,\n component: await item.componentFactory({ item }),\n })),\n );\n\n // Resolver subgrupos\n for (const subGroup of group.subGroups) {\n subGroup.items = await Promise.all(\n subGroup.items.map(async (item) => ({\n ...item,\n component: await item.componentFactory({ item }),\n })),\n );\n }\n }\n }\n\n highlightMatch(text: string, searchString: string): string {\n if (!this.searchString || this.searchString.length < 2) return text;\n const regex = new RegExp(`(${searchString})`, \"gi\");\n return text.replace(regex, `<span class=\"highlight\">$1</span>`);\n }\n\n highlighted(text?: string) {\n return text ? unsafeHTML(this.highlightMatch(text, this.searchString)) : null;\n }\n\n // Public API: scroll the timeline to a given date (\"Anar a data\").\n //\n // The list is sorted newest -> oldest by `getGroupMostRecentDate` (the same key\n // is used here so the mapping date->index is monotonic). We compare at *day*\n // granularity because `selectedDate` is midnight while group dates carry a time\n // of day. We land on the first (topmost) group whose day is on or before the\n // requested day — i.e. the requested day if it has entries, otherwise the\n // closest earlier day (newer entries above, older below). Using an absolute\n // nearest-timestamp search here is what produced the \"jumps to another year\"\n // and \"lands on the day before\" bugs.\n _scrollIntoDate(selectedDate: number) {\n if (!this._virtualScroller || !this._viewport) return;\n\n const groups = this.historyGroups ?? [];\n if (!groups.length) return;\n\n const targetDay = startOfDay(selectedDate).getTime();\n const dayOf = (group: IActivityHistoryGroup) => startOfDay(getGroupMostRecentDate(group)).getTime();\n\n let index = groups.findIndex((group) => dayOf(group) <= targetDay);\n // Requested day is older than every entry -> go to the oldest group.\n if (index === -1) index = groups.length - 1;\n\n // Jump near the target using the virtualizer's estimated offset so it\n // renders the window around `index`. We set scrollTop directly (NOT\n // scrollToIndex) to avoid the reconcile loop that re-scrolls every frame and\n // froze the UI. The estimate leaves tall groups mid-screen, so we then align\n // the real group element's top to the viewport top in a few bounded passes.\n this._viewport.scrollTop = this._virtualScroller.getOffsetForIndex(index);\n this._alignGroupTop(index, 0);\n }\n\n // Align the top of group `index`'s rendered element with the top of the\n // viewport, using its real on-screen position (not the size estimate, which\n // is off for very tall visits). Bounded to a few frames so it converges\n // without ever turning into a scroll loop.\n private _alignGroupTop(index: number, attempt: number) {\n if (attempt >= 4 || !this._viewport) return;\n requestAnimationFrame(() => {\n const viewport = this._viewport;\n if (!viewport) return;\n const el = this.renderRoot?.querySelector(`.visit[data-index=\"${index}\"]`) as HTMLElement | null;\n if (!el) {\n // Window not rendered around the target yet — give it another frame.\n this._alignGroupTop(index, attempt + 1);\n return;\n }\n const delta = Math.round(el.getBoundingClientRect().top - viewport.getBoundingClientRect().top);\n if (Math.abs(delta) <= 1) return; // aligned\n viewport.scrollTop += delta;\n this._alignGroupTop(index, attempt + 1);\n });\n }\n\n // === VIRTUAL SCROLLER LOGIC ===\n\n private _setupVirtualScroller() {\n if (!this._viewport || this._virtualScroller) return;\n\n this._virtualScroller = new VirtualScroller({\n items: this.historyGroups || [],\n overscan: 8,\n estimateItemHeight: (index) => estimateGroupHeight(this.historyGroups?.[index]),\n });\n\n this._cleanupVirtualScroller = this._virtualScroller.setup(this._viewport, (state) => {\n this._virtualScrollerState = state;\n this.requestUpdate();\n\n if (this.api?.broker && this.searchString) {\n this.api.broker.publish(this.api.broker.events.activityHistory.searched, {\n searchQuery: this.searchString,\n });\n }\n });\n\n this._virtualScrollerState = this._virtualScroller.getState();\n }\n\n private _updateVirtualScroller() {\n if (!this._virtualScroller || !this.historyGroups?.length) return;\n\n this._virtualScroller.updateItems(this.historyGroups, (state) => {\n this._virtualScrollerState = state;\n this.requestUpdate();\n\n if (this.api?.broker && this.searchString) {\n this.api.broker.publish(this.api.broker.events.activityHistory.searched, {\n searchQuery: this.searchString,\n });\n }\n });\n\n this._virtualScrollerState = this._virtualScroller.getState();\n }\n\n // Pairs each visible virtual item with its absolute index in historyGroups.\n // The index is required so the template can stamp `data-index` on every\n // `.visit`, which is how the virtualizer measures each item's real height.\n get _visibleRows(): { index: number; group: IActivityHistoryGroup }[] {\n return this._virtualScrollerState.virtualItems\n .map((vi) => ({ index: vi.index, group: this.historyGroups?.[vi.index] }))\n .filter((row): row is { index: number; group: IActivityHistoryGroup } => Boolean(row.group));\n }\n\n get _containerOffset() {\n const firstItem = this._virtualScrollerState.virtualItems[0];\n return firstItem?.start ?? 0;\n }\n\n get _totalHeight() {\n return this._virtualScrollerState.totalHeight;\n }\n\n _measureElement = (el: Element | undefined) => {\n if (el) this._virtualScroller?.measureElement(el as HTMLElement);\n };\n\n _onScroll = () => {\n // Virtual scroller handles this internally\n };\n}\n","import { html, nothing } from \"lit\";\nimport { ActiveFiltersHeader } from \"./active-filters-header\";\nimport { when } from \"lit/directives/when.js\";\n\nexport const template = (props: ActiveFiltersHeader) => {\n const isAnyChipActive =\n props.areCustomFiltersActive || props.areCommonFiltersActive || props.areDiagnosticFiltersActive || props.areUpFiltersActive;\n\n if (!isAnyChipActive && props.searchString.length < 1) return nothing;\n\n return html`\n <div class=\"active-filters-header\">\n ${when(isAnyChipActive, () => html`<active-filters-badges></active-filters-badges>`)}\n ${when(props.searchString.length > 1, () => html`<activity-history-search-results searchQuery=${props.searchString}></activity-history-search-results>`)}\n </div>\n `;\n};\n","import { LitElement, css, html, unsafeCSS } from \"lit\";\nimport { template } from \"./template\";\nimport styles from \"./styles.css?inline\";\nimport { customElement } from \"lit/decorators.js\";\nimport { connectedProperty } from \"../../../../infrastructure/state/connected-property\";\nimport { activityHistorySearchStringSelector } from \"../../../search/selectors\";\nimport { areCustomFiltersActive } from \"../../custom-filters/selectors\";\nimport { areCommonFiltersActive } from \"../../common-filters/selectors\";\nimport { areDiagnosticFiltersActive } from \"../../diagnostic-filters/selectors\";\nimport { areUpFiltersActive } from \"../../up-filters/selectors\";\n\n//@ts-ignore\n@customElement(\"active-filters-header\")\nexport class ActiveFiltersHeader extends LitElement {\n render() {\n return html`${template(this)}`;\n }\n\n static styles = css`\n ${unsafeCSS(styles)}\n `;\n\n @connectedProperty(activityHistorySearchStringSelector)\n searchString: string;\n\n @connectedProperty(areCustomFiltersActive)\n areCustomFiltersActive: boolean;\n\n @connectedProperty(areCommonFiltersActive)\n areCommonFiltersActive: boolean;\n\n @connectedProperty(areDiagnosticFiltersActive)\n areDiagnosticFiltersActive: boolean;\n\n @connectedProperty(areUpFiltersActive)\n areUpFiltersActive: boolean;\n}\n","import { html, nothing } from \"lit\";\nimport { ActivityHistoryFullDataError } from \"./component\";\nimport { translate } from \"../../../../localization\";\nexport const template = (props: ActivityHistoryFullDataError) => {\n return html`\n ${props.isAllDataFailedToLoad ? renderErrorFeedback(props) : nothing}\n `;\n};\n\nconst renderErrorFeedback = (props: ActivityHistoryFullDataError) => {\n return html`\n <div class=\"container\">\n <dss-user-feedback status=\"error\" variant=\"default\" size=\"lg\" titleText=${translate(\"error.title\")} description=${translate(\"error.general.title\")} hasDetails detailsLabel=${translate(\"error.viewDetails\")}>\n <div slot=\"details\">\n ${props.errorMessages.length > 0 ? html`<div>${props.errorMessages.map((error) => html`<div>${error.message}</div>`)}</div>` : translate(\"error.general.noInfo\")}\n </div>\n <dss-button @onClick=${props.handleClickFeedback} label=${translate(\"error.general.refresh\")} size=\"lg\"></dss-button>\n </dss-user-feedback>\n </div>\n `;\n};\n","import { RootState } from \"../../../infrastructure/state/store\";\nimport { isSomeCollectionLoadedAndOtherLoading } from \"../handle-busy/selectors\";\n\nexport const isErrorOccurred = (state: RootState) => state.activityHistoryCollections.error.length > 0;\n\nconst areCollectionsEmpty = (state: RootState) => {\n const collections = state.activityHistoryCollections.collections;\n\n return Object.values(collections).every((collection) => {\n return !collection.items || collection.items.length === 0;\n });\n};\nexport const isAllDataFailedToLoad = (state: RootState) => {\n return !isSomeCollectionLoadedAndOtherLoading(state) && isErrorOccurred(state) && areCollectionsEmpty(state);\n};\n\nexport const selectErrorMessages = (state: RootState) => state.activityHistoryCollections.error;\n","import { LitElement, css, html, unsafeCSS } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\nimport styles from \"./styles.css?inline\";\nimport { template } from \"./template\";\nimport { connectedProperty } from \"../../../../infrastructure/state/connected-property\";\nimport { isAllDataFailedToLoad, selectErrorMessages } from \"../selectors\";\nimport { PrimariaApi } from \"@uxland/primary-shell\";\nimport { IErrorHistoryItem } from \"../../../domain/model\";\nimport { HandleHistoryItemsAddError } from \"../handle-history-items-add-error/request\";\nimport { lazyInject } from \"../../../../infrastructure/ioc/container\";\nimport { TYPES } from \"../../../../infrastructure/ioc/types\";\n\n//@ts-ignore\n@customElement(\"activity-history-full-data-error\")\nexport class ActivityHistoryFullDataError extends LitElement {\n render() {\n return html`${template(this)}`;\n }\n\n static styles = css`\n ${unsafeCSS(styles)}\n `;\n\n @connectedProperty(isAllDataFailedToLoad)\n isAllDataFailedToLoad: boolean;\n\n @connectedProperty(selectErrorMessages)\n errorMessages: Array<IErrorHistoryItem> = [];\n\n @lazyInject(TYPES.primaryApi)\n api: PrimariaApi;\n\n handleClickFeedback() {\n this.api.broker.send(new HandleHistoryItemsAddError(this.errorMessages));\n }\n}\n","import { html, nothing } from \"lit\";\nimport { translate } from \"../../../../localization\";\nimport { ActivityHistoryPartialDataError } from \"./component\";\n\nexport const template = (props: ActivityHistoryPartialDataError) => {\n const combinedMessage = props.getCombinedMessage();\n\n return html`\n ${props.isErrorOccurred ? renderPartialErrorAlert(props, combinedMessage) : nothing}\n `;\n};\n\nconst renderPartialErrorAlert = (props: ActivityHistoryPartialDataError, combinedMessage: string) => {\n return html`\n <div class=\"container\">\n <dss-alert @button-click=${props.handleClickAlert} status=\"warning\" size=\"lg\" titleText=\"${combinedMessage}\" buttonLabel=${translate(\"error.partial.refresh\")} hasButton></dss-alert>\n </div>\n `;\n};\n","import { LitElement, css, html, unsafeCSS } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\nimport styles from \"./styles.css?inline\";\nimport { template } from \"./template\";\nimport { connectedProperty } from \"../../../../infrastructure/state/connected-property\";\nimport { isErrorOccurred, selectErrorMessages } from \"../selectors\";\nimport { PrimariaApi } from \"@uxland/primary-shell\";\nimport { translate } from \"../../../../localization\";\nimport { IErrorHistoryItem } from \"../../../domain/model\";\nimport { HandleHistoryItemsAddError } from \"../handle-history-items-add-error/request\";\nimport { lazyInject } from \"../../../../infrastructure/ioc/container\";\nimport { TYPES } from \"../../../../infrastructure/ioc/types\";\n\n//@ts-ignore\n@customElement(\"activity-history-partial-data-error\")\nexport class ActivityHistoryPartialDataError extends LitElement {\n render() {\n return html`${template(this)}`;\n }\n\n static styles = css`\n ${unsafeCSS(styles)}\n `;\n\n @connectedProperty(isErrorOccurred)\n isErrorOccurred: boolean;\n\n @connectedProperty(selectErrorMessages)\n errorMessages: Array<IErrorHistoryItem> = [];\n\n @lazyInject(TYPES.primaryApi)\n api: PrimariaApi;\n\n handleClickAlert() {\n this.api.broker.send(new HandleHistoryItemsAddError(this.errorMessages));\n }\n\n getCombinedMessage() {\n const titleMessage = translate(\"error.partial.title\");\n\n const errorMessages = this.errorMessages.length > 0 ? this.errorMessages.map((error) => error.entityDescription) : [];\n\n return errorMessages.length > 0\n ? `${titleMessage} ${errorMessages[0]}${errorMessages.length > 1 ? ` i ${errorMessages.slice(1).join(\" i \")}` : \"\"}`\n : titleMessage;\n }\n}\n","import { activityHistoryCollectionsSlice } from \"../slice\";\n\nexport const { clearActivityHistoryCollections } = activityHistoryCollectionsSlice.actions;\n","import { BaseHandler } from \"../../infrastructure/base-handlers\";\nimport { clearActivityHistoryCollections } from \"../clear/action\";\nimport { activityHistoryFiltersSlice } from \"../filter/slice\";\n\nexport class RefreshHistoryItemsHandler extends BaseHandler {\n async handle() {\n this.store.dispatch(activityHistoryFiltersSlice.actions.clearCustomFilters());\n this.store.dispatch(clearActivityHistoryCollections());\n this.api.broker.publish(this.api.broker.events.activityHistory.refreshDataRequested);\n }\n}\n","export class HandleRefreshHistoryItems {}\n","import { BrokerExtensions } from \"@primaria/plugins-core\";\nimport { BrokerDisposableHandler } from \"@uxland/primary-shell\";\nimport { RefreshHistoryItemsHandler } from \"./handler\";\nimport { HandleRefreshHistoryItems } from \"./request\";\n\nlet request: BrokerDisposableHandler;\n\nexport const bootstrapHandleRefreshHistoryItems = (broker: BrokerExtensions) => {\n teardownHandleRefreshHistoryItems();\n request = broker.registerRequest(HandleRefreshHistoryItems, RefreshHistoryItemsHandler);\n};\n\nexport const teardownHandleRefreshHistoryItems = () => {\n request?.dispose();\n};\n","import { activityHistoryCollectionsSlice } from \"../slice\";\n\nexport const { removeActivityHistoryItem } = activityHistoryCollectionsSlice.actions;","import { StoreBaseHandler } from \"../../infrastructure/base-handlers\";\nimport { removeActivityHistoryItem } from \"./action\";\nimport { RemoveHistoryItemPayload } from \"./request\";\n\nexport class RemoveHistoryItemHandler extends StoreBaseHandler {\n async handle(payload: RemoveHistoryItemPayload) {\n try {\n this.store.dispatch(\n removeActivityHistoryItem({\n id: payload.entityId,\n itemId: payload.itemId,\n }),\n );\n } catch (e) {\n console.error(e.message);\n }\n }\n}\n","import { BrokerExtensions } from \"@primaria/plugins-core\";\nimport { RemoveHistoryItemHandler } from \"./handler\";\nimport { BrokerDisposableHandler } from \"@uxland/primary-shell\";\n\nlet request: BrokerDisposableHandler;\n\nexport const bootstrapRemoveHistoryItem = (broker: BrokerExtensions) => {\n request = broker.registerRequest(\"remove_history_item_request\", RemoveHistoryItemHandler);\n};\n\nexport const teardownRemoveHistoryItem = () => {\n request?.dispose();\n};","import { activityHistoryFiltersSlice } from \"../filter/slice\";\n\nexport const { setSearchString } = activityHistoryFiltersSlice.actions;\n","import { BaseHandler } from \"../../infrastructure/base-handlers\";\nimport { setSearchString } from \"./actions\";\nimport { SearchActivityHistoryItems } from \"./request\";\n\nexport class SearchItemsHandler extends BaseHandler {\n async handle(request: SearchActivityHistoryItems) {\n try {\n this.store.dispatch(setSearchString(request.searchString));\n setTimeout(() => {\n this.api.broker.publish(this.api.broker.events.activityHistory.searched, {\n searchQuery: request.searchString,\n });\n }, 300);\n } catch (e) {\n console.error(e.message);\n }\n }\n}\n","export class SearchActivityHistoryItems{\n\n constructor(\n public searchString: string\n ) {\n this.searchString = searchString\n } \n}\n","import { html } from \"lit\";\nimport { ActivityHistorySearchResults } from \"./activity-history-search-results\";\nimport { translate } from \"../../../localization\";\n\nexport const template = (props: ActivityHistorySearchResults) =>\n html`<div class=\"search-header\">\n ${translate(\"searchBarResults\")} “${props.searchQuery}”\n </div>`;\n","import { LitElement, css, html, unsafeCSS } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport styles from \"./styles.css?inline\";\nimport { template } from \"./template\";\n\n//@ts-ignore\n@customElement(\"activity-history-search-results\")\nexport class ActivityHistorySearchResults extends LitElement {\n render() {\n return html`${template(this)}`;\n }\n\n static styles = css`\n ${unsafeCSS(styles)}\n `;\n\n @property()\n searchQuery = \"\";\n}\n","import { html } from \"lit\";\nimport { translate } from \"../../../localization\";\nimport { ActivityHistorySearchBar } from \"./activity-history-search-bar\";\n\nexport const template = (props: ActivityHistorySearchBar) =>\n html`<dss-input\n hideLabel\n label=${translate(\"search\")}\n placeholder=${translate(\"searchPlaceholder\")}\n icon=\"search\"\n size=\"md\"\n .value=${props.searchQuery}\n @change=${props._handleSearchChange}\n ></dss-input>`;\n","import { LitElement, css, html, unsafeCSS } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport styles from \"./styles.css?inline\";\nimport { template } from \"./template\";\n\n//@ts-ignore\n@customElement(\"activity-history-search-bar\")\nexport class ActivityHistorySearchBar extends LitElement {\n render() {\n return html`${template(this)}`;\n }\n\n static styles = css`\n ${unsafeCSS(styles)}\n `;\n\n @property()\n searchQuery = \"\";\n\n _handleSearchChange(event: Event) {\n const searchQuery = (event.target as HTMLInputElement).value;\n const payload = searchQuery.length > 1 ? searchQuery : \"\";\n this.dispatchEvent(new CustomEvent(\"onSearchChange\", { detail: payload }));\n }\n}\n","import { translate } from \"../../localization\";\n\nexport const formatShowFilterTitle = (title: string) => {\n const filterTitle = title.replace(/veure/gi, \"\")?.trim();\n return filterTitle.charAt(0).toUpperCase() + filterTitle.slice(1);\n};\n\nexport const normalizeDeletedFilterBooleanValue = (value) => (value === true ? translate(\"filters.deleted\") : value);\n\nexport const normalizeEmptyFilterValue = (value, filterTitle) => (value === \"\" ? formatEmptyFilterValue(filterTitle) : value);\n\nconst formatEmptyFilterValue = (filterTitle) => {\n const chipLabel = `${translate(\"chipHeader.without\")} ${filterTitle.toLowerCase()}`;\n return chipLabel;\n};\n","import { html, nothing } from \"lit\";\nimport { ActiveFiltersBadges } from \"./active-filters-badges\";\nimport { translate } from \"../../../../localization\";\nimport { formatShowFilterTitle, normalizeDeletedFilterBooleanValue, normalizeEmptyFilterValue } from \"../../utils\";\n\nconst MAX_VISIBLE_CHIPS = 5;\n\nconst renderChip = (id, filter, option, props) => html`\n <dss-chip\n label=${normalizeEmptyFilterValue(option.title, filter.title)}\n size=\"sm\"\n hasdelete\n selected\n @click=${() => props._onDeleteFilterValue(id, filter.id, option.id, false)}\n @delete=${() => props._onDeleteFilterValue(id, filter.id, option.id, false)}\n ></dss-chip>\n`;\n\nconst renderCommonChip = (filter, props) => html`\n <dss-chip\n label=${formatShowFilterTitle(filter.title)}\n size=\"sm\"\n hasdelete\n selected\n @click=${() => props._onDeleteCommonFilterValue(filter.id)}\n @delete=${() => props._onDeleteCommonFilterValue(filter.id)}\n ></dss-chip>\n`;\n\nconst renderDiagnosticChip = (id, value, props) => html`\n <dss-chip\n label=${value}\n size=\"sm\"\n hasdelete\n selected\n @click=${() => props._onDeleteDiagnosticFilterValue(id)}\n @delete=${() => props._onDeleteDiagnosticFilterValue(id)}\n ></dss-chip>\n`;\n\nconst renderUpChip = (id, value, props) => html`\n <dss-chip\n label=${value}\n size=\"sm\"\n hasdelete\n selected\n @click=${() => props._onDeleteUpFilterValue(id)}\n @delete=${() => props._onDeleteUpFilterValue(id)}\n ></dss-chip>\n`;\n\nconst renderFilterTitle = (title) => html`<div class=\"filter-title\">${`${title}:`}</div>`;\n\nexport const template = (props: ActiveFiltersBadges) => {\n //TODO: refactor chips render\n if (\n props.enabledFilters.length === 0 &&\n props.enabledCommonFilters.length === 0 &&\n props.diagnosticFilterEnabled?.enabledValues?.length === 0 &&\n props.upFilterEnabled.enabledValues.length === 0\n )\n return nothing;\n\n let visibleCount = 0;\n const visibleChips: any[] = [];\n const hiddenElements: any[] = [];\n const hiddenChips: any[] = [];\n\n const diagnostic = props.diagnosticFilterEnabled;\n\n if (diagnostic) {\n const { title, enabledValues } = diagnostic;\n\n if (enabledValues && enabledValues.length > 0) {\n let titleAddedToVisible = false;\n let titleAddedToHidden = false;\n\n // Només mostrem els diagnòstics pare (no les evolucions ni relacions)\n for (const diagnosticItem of enabledValues) {\n const chip = renderDiagnosticChip(diagnosticItem.codi, diagnosticItem.descripcio, props);\n\n if (visibleCount < MAX_VISIBLE_CHIPS) {\n if (!titleAddedToVisible) {\n visibleChips.push(renderFilterTitle(title));\n titleAddedToVisible = true;\n }\n visibleChips.push(chip);\n visibleCount++;\n } else {\n if (!titleAddedToHidden) {\n hiddenElements.push(renderFilterTitle(title));\n titleAddedToHidden = true;\n }\n hiddenElements.push(chip);\n hiddenChips.push(chip);\n }\n }\n }\n }\n\n const up = props.upFilterEnabled;\n\n if (up) {\n const { title, values, enabledValues } = up;\n const selectedOptions = values.filter((opt) => enabledValues.includes(opt.value));\n\n if (selectedOptions.length > 0) {\n let titleAddedToVisible = false;\n let titleAddedToHidden = false;\n\n for (const option of selectedOptions) {\n const chip = renderUpChip(option.value, option.label, props);\n\n if (visibleCount < MAX_VISIBLE_CHIPS) {\n if (!titleAddedToVisible) {\n visibleChips.push(renderFilterTitle(title));\n titleAddedToVisible = true;\n }\n visibleChips.push(chip);\n visibleCount++;\n } else {\n if (!titleAddedToHidden) {\n hiddenElements.push(renderFilterTitle(title));\n titleAddedToHidden = true;\n }\n hiddenElements.push(chip);\n hiddenChips.push(chip);\n }\n }\n }\n }\n\n for (const filter of props.enabledCommonFilters) {\n const chip = renderCommonChip(filter, props);\n\n if (visibleCount < MAX_VISIBLE_CHIPS) {\n visibleChips.push(chip);\n visibleCount++;\n } else {\n hiddenElements.push(chip);\n hiddenChips.push(chip);\n }\n }\n\n for (const { title, id, filters } of props.enabledFilters) {\n let titleAddedToVisible = false;\n let titleAddedToHidden = false;\n\n for (const filter of filters) {\n for (const value of [...new Set(filter.enabledValues)]) {\n let filterOption = filter?.options?.find((o) => o.id === value);\n\n if (filterOption) {\n //Fill when filter option doesnt have title (description)\n filterOption.title = filterOption.title !== \"\" ? filterOption.title : value;\n } else {\n //Hi ha un filtre de curs clinic \"veure eliminats\" booleà que no serà un filterOption, per tant entra aquí\n //Aqui es crea el objecte que es passa al chip\n const deletedFiltersOption = normalizeDeletedFilterBooleanValue(value);\n filterOption = { title: deletedFiltersOption, id: deletedFiltersOption };\n }\n\n //const chip2 = renderChip(id, filter, normalizeDeletedFilterBooleanValue(value), props);\n\n const chip = renderChip(id, filter, filterOption, props);\n\n if (visibleCount < MAX_VISIBLE_CHIPS) {\n if (!titleAddedToVisible) {\n visibleChips.push(renderFilterTitle(title));\n titleAddedToVisible = true;\n }\n visibleChips.push(chip);\n visibleCount++;\n } else {\n if (!titleAddedToHidden) {\n hiddenElements.push(renderFilterTitle(title));\n titleAddedToHidden = true;\n }\n hiddenElements.push(chip);\n hiddenChips.push(chip);\n }\n }\n }\n }\n\n return html`\n <div class=\"filters-container\">\n <div class=\"filters-header\">${translate(\"chipHeader.selection\")}</div>\n <div class=\"filter-groups\">\n ${visibleChips}\n ${\n hiddenChips.length > 0\n ? html`\n <div>\n <dss-button label=\"+ ${hiddenChips.length}\" size=\"sm\" variant=\"primary\"></dss-button>\n <dss-popover title=${translate(\"chipHeader.selection\")} position=\"bottom\" popoverFixed>\n <dss-popover-body slot=\"body\">\n <div class=\"popover-content\">\n ${hiddenElements}\n </div>\n </dss-popover-body>\n </dss-popover>\n </div>\n `\n : nothing\n }\n </div>\n </div>\n <div class=\"clean-filters\">\n <div class=\"separator\">|</div>\n <dss-button variant=\"secondary\" size=\"sm\" label=${translate(\"chipHeader.cleanFilters\")} icon=\"cleaning_services\" @click=${props.resetFilters}></dss-button>\n </div>\n `;\n};\n","import { PrimariaApi } from \"@uxland/primary-shell\";\nimport { LitElement, css, html, unsafeCSS } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\nimport { lazyInject } from \"../../../../infrastructure/ioc/container\";\nimport { TYPES } from \"../../../../infrastructure/ioc/types\";\nimport { connectedProperty } from \"../../../../infrastructure/state/connected-property\";\nimport styles from \"./styles.css?inline\";\nimport { template } from \"./template\";\n\nimport { customFilterGroupsWithOptionsSelector } from \"../../../selectors\";\nimport { activityHistoryEnabledCommonFiltersSelector } from \"../../common-filters/selectors\";\nimport { SetCommonFilter } from \"../../common-filters/set-common-filter/request\";\nimport { SetCustomFilterValue } from \"../../custom-filters/set-custom-filter-value/request\";\nimport { DeleteDiagnosticFilterValueCommand } from \"../../diagnostic-filters/delete/request\";\nimport { diagnosticFilterSelector } from \"../../diagnostic-filters/selectors\";\nimport {\n IActivityHistoryCustomFilterGroup,\n IActivityHistoryDiagnosticsFilter,\n IActivityHistoryFilter,\n IActivityHistoryUpFilter,\n} from \"../../model\";\nimport { ResetFiltersCommand } from \"../../reset/request\";\nimport { upFilterSelector } from \"../../up-filters/selectors\";\nimport { SetUpFiltersCommand } from \"../../up-filters/set/request\";\n\n//@ts-ignore\n@customElement(\"active-filters-badges\")\nexport class ActiveFiltersBadges extends LitElement {\n render() {\n return html`${template(this)}`;\n }\n\n static styles = css`\n ${unsafeCSS(styles)}\n `;\n\n @lazyInject(TYPES.primaryApi)\n api: PrimariaApi;\n\n activityHistoryCommonFiltersSelector;\n\n @connectedProperty(activityHistoryEnabledCommonFiltersSelector)\n enabledCommonFilters: IActivityHistoryFilter[];\n\n @connectedProperty(customFilterGroupsWithOptionsSelector)\n enabledFilters: IActivityHistoryCustomFilterGroup[];\n\n @connectedProperty(diagnosticFilterSelector)\n diagnosticFilterEnabled: IActivityHistoryDiagnosticsFilter;\n\n @connectedProperty(upFilterSelector)\n upFilterEnabled: IActivityHistoryUpFilter;\n\n _onDeleteFilterValue(filterGroupId: string, filterId: string, optionId: string, value: boolean) {\n this.api.broker.send(\n new SetCustomFilterValue({\n filterGroupId,\n filterId,\n optionId,\n enabled: value,\n }),\n );\n }\n\n _onDeleteCommonFilterValue(filterId: string) {\n this.api.broker.send(new SetCommonFilter({ id: filterId, enabled: false }));\n }\n\n _onDeleteDiagnosticFilterValue(diagnosticCodi: string) {\n this.api.broker.send(new DeleteDiagnosticFilterValueCommand({ diagnosticCodi }));\n }\n\n _onDeleteUpFilterValue(upValue: string) {\n this.api.broker.send(new SetUpFiltersCommand([...this.upFilterEnabled.enabledValues.filter((v) => v !== upValue)]));\n }\n\n resetFilters() {\n this.api.broker.send(new ResetFiltersCommand());\n }\n}\n","import { BrokerExtensions } from \"@primaria/plugins-core\";\nimport { SearchItemsHandler } from \"./handler\";\nimport { SearchActivityHistoryItems } from \"./request\";\nimport { BrokerDisposableHandler } from \"@uxland/primary-shell\";\nimport \"./activity-history-search-results/activity-history-search-results\";\nimport \"./activity-history-search-bar/activity-history-search-bar\";\nimport \"../filter/UI/active-filters-badges/active-filters-badges\";\n\nlet request: BrokerDisposableHandler;\n\nexport const bootstrapSearchItems = (broker: BrokerExtensions) => {\n request = broker.registerRequest(SearchActivityHistoryItems, SearchItemsHandler);\n};\n\nexport const teardownSearchItems = () => {\n request?.dispose();\n};\n","import { activityHistoryCollectionsSlice } from \"../slice\";\n\nexport const { updateActivityHistoryItem } = activityHistoryCollectionsSlice.actions;\n","import { StoreBaseHandler } from \"../../infrastructure/base-handlers\";\nimport { ensureAreValidBasicActivityHistoryItems } from \"../domain/validation/is-valid-basic-history-item\";\nimport { updateActivityHistoryItem } from \"./action\";\nimport { UpdateHistoryItemPayload } from \"./request\";\n\nexport class UpdateHistoryItemHandler extends StoreBaseHandler {\n async handle(payload: UpdateHistoryItemPayload) {\n try {\n ensureAreValidBasicActivityHistoryItems([payload.item]);\n this.store.dispatch(\n updateActivityHistoryItem({\n id: payload.entityId,\n item: payload.item,\n }),\n );\n } catch (e) {\n console.error(e.message);\n }\n }\n}\n","import { BrokerExtensions } from \"@primaria/plugins-core\";\nimport { UpdateHistoryItemHandler } from \"./handler\";\nimport { BrokerDisposableHandler } from \"@uxland/primary-shell\";\n\nlet request: BrokerDisposableHandler;\n\nexport const bootstrapUpdateHistoryItem = (broker: BrokerExtensions) => {\n request = broker.registerRequest(\"update_history_item_request\", UpdateHistoryItemHandler);\n};\n\nexport const teardownUpdateHistoryItem = () => {\n request?.dispose();\n};\n","import { BrokerExtensions, brokerExtensions } from \"@primaria/plugins-core\";\nimport { PrimariaApi } from \"@uxland/primary-shell\";\nimport { container } from \"../infrastructure/ioc/container\";\nimport { bootstrapInjectAsyncHistoryItems, teardownInjectAsyncHistoryItems } from \"./add/add-async-history-items/bootstrapper\";\nimport { bootstrapAddHistoryItem, teardownAddHistoryItem } from \"./add/add-history-item/bootstrapper\";\nimport { bootstrapAddHistoryItems, teardownAddHistoryItems } from \"./add/add-history-items/bootstrapper\";\nimport { bootstrapActivityHistoryItemHandleBusy } from \"./add/handle-busy/bootstrapper\";\nimport {\n bootstrapHandleHistoryItemsAddError,\n teardownHandleHistoryItemsAddError,\n} from \"./add/handle-error/handle-history-items-add-error/bootstrapper\";\nimport { bootstrapExportPdf, teardownExportPdf } from \"./export-to-pdf/bootstrapper\";\nimport { bootstrapFilters, teardownFilters } from \"./filter/bootstrapper\";\nimport { bootstrapListActivityHistoryItems } from \"./list/bootstrapper\";\nimport { bootstrapHandleRefreshHistoryItems } from \"./refresh/bootstrapper\";\nimport { bootstrapRemoveHistoryItem, teardownRemoveHistoryItem } from \"./remove/bootstrapper\";\nimport { bootstrapSearchItems, teardownSearchItems } from \"./search/bootstrapper\";\nimport { bootstrapUpdateHistoryItem, teardownUpdateHistoryItem } from \"./update/bootstrapper\";\n\nlet broker: BrokerExtensions;\n\nexport const bootstrapActivityHistoryItem = (api: PrimariaApi) => {\n broker = brokerExtensions(api, container);\n bootstrapListActivityHistoryItems();\n bootstrapActivityHistoryItemHandleBusy();\n bootstrapInjectAsyncHistoryItems(broker, api);\n bootstrapAddHistoryItem(broker, api);\n bootstrapAddHistoryItems(broker, api);\n bootstrapHandleHistoryItemsAddError(broker);\n bootstrapHandleRefreshHistoryItems(broker);\n bootstrapUpdateHistoryItem(broker);\n bootstrapExportPdf(broker);\n bootstrapFilters(broker, api);\n bootstrapSearchItems(broker);\n bootstrapRemoveHistoryItem(broker);\n};\n\nexport const teardownActivityHistoryItem = () => {\n teardownInjectAsyncHistoryItems();\n teardownAddHistoryItem();\n teardownAddHistoryItems();\n teardownHandleHistoryItemsAddError();\n teardownUpdateHistoryItem();\n teardownExportPdf();\n teardownFilters();\n teardownSearchItems();\n teardownRemoveHistoryItem();\n};\n","export const pluginName = \"activity-history\";\n","import { IActivityHistoryGroup, IActivityHistoryItem } from \"../domain/model\";\n\n/**\n * Materializes the injected `component` (via each item's `componentFactory`)\n * on every item of the given groups, returning a fresh array of groups/items\n * without mutating the input.\n *\n * Both the main timeline and the importer view use this pattern: plugins\n * register a `componentFactory` on each item and the consumer expects\n * `item.component` to be a Lit template / HTMLElement ready to render.\n */\nexport const prepareGroupComponents = async (\n groups: IActivityHistoryGroup[],\n): Promise<IActivityHistoryGroup[]> => {\n const prepareItems = (items: IActivityHistoryItem[]) =>\n Promise.all(\n items.map(async (item) => ({\n ...item,\n component: item.componentFactory ? await item.componentFactory({ item }) : undefined,\n })),\n );\n\n return Promise.all(\n groups.map(async (group) => ({\n ...group,\n items: (await prepareItems(group.items || [])) as IActivityHistoryItem[],\n subGroups: await Promise.all(\n (group.subGroups || []).map(async (sub) => ({\n ...sub,\n items: (await prepareItems(sub.items)) as IActivityHistoryItem[],\n })),\n ),\n })),\n );\n};\n","import { VirtualScroller, VirtualScrollerState } from \"../list/UI/timeline/virtual-scroller\";\n\nexport const INITIAL_SCROLLER_STATE: VirtualScrollerState = {\n virtualItems: [],\n totalHeight: 0,\n};\n\nexport interface ScrollerSyncOptions<T> {\n viewport: HTMLElement | undefined;\n items: T[];\n onStateChange: (state: VirtualScrollerState) => void;\n estimateItemHeight: (index: number) => number;\n}\n\n/**\n * Small state-machine wrapper around VirtualScroller that both the timeline\n * and the importer reuse. It handles:\n * - first-time setup when the viewport/content elements become available,\n * - re-setup if the viewport element is swapped between renders,\n * - incremental item updates,\n * - cleanup on teardown.\n *\n * Each caller owns its own state field and own onStateChange callback (the\n * timeline, for example, also publishes a broker event inside it).\n */\nexport class ScrollerController<T> {\n private _scroller?: VirtualScroller<T>;\n private _cleanup?: () => void;\n private _lastViewport?: HTMLElement;\n\n /** Setup or update the scroller with the current items. No-op until the\n * viewport and content elements exist. Detects viewport swaps and re-setups. */\n sync({ viewport, items, onStateChange, estimateItemHeight }: ScrollerSyncOptions<T>): VirtualScrollerState {\n if (!viewport) {\n return this._scroller?.getState() ?? INITIAL_SCROLLER_STATE;\n }\n\n const viewportChanged = this._scroller && viewport !== this._lastViewport;\n if (viewportChanged) {\n this.teardown();\n }\n\n if (!this._scroller) {\n this._scroller = new VirtualScroller<T>({\n items,\n estimateItemHeight,\n });\n this._cleanup = this._scroller.setup(viewport, onStateChange);\n } else {\n this._scroller.updateItems(items, onStateChange);\n }\n\n this._lastViewport = viewport;\n return this._scroller.getState();\n }\n\n teardown() {\n this._cleanup?.();\n this._cleanup = undefined;\n this._scroller = undefined;\n this._lastViewport = undefined;\n }\n\n scrollToIndex(index: number, behavior?: ScrollBehavior) {\n this._scroller?.scrollToIndex(index, behavior);\n }\n\n /** Measure the real height of a rendered item so variable-height rows\n * (e.g. very tall visits) get accurate offsets instead of the estimate. */\n measureElement(element: HTMLElement) {\n this._scroller?.measureElement(element);\n }\n}\n","import { IActivityHistoryGroup, IActivityHistoryItem, IHistoryDataImporterRules } from \"../domain/model\";\n\nexport interface ImporterViewFilters {\n todayOnly: boolean;\n /** Codes (codi) of the diagnostics the user has selected in the dropdown.\n * Empty means: do not filter by diagnostics. */\n selectedDiagnosticCodes: string[];\n}\n\nexport type RulesByCollectionId = Record<string, IHistoryDataImporterRules>;\n\nconst isToday = (dateStr: string): boolean => {\n const d = new Date(dateStr);\n const now = new Date();\n return d.toDateString() === now.toDateString();\n};\n\nconst itemMatchesToday = (item: IActivityHistoryItem | undefined): boolean => Boolean(item && isToday(item.date));\n\nconst itemHasAnyDiagnostic = (item: IActivityHistoryItem, codes: string[]): boolean =>\n Boolean(item.diagnostics?.some((d) => codes.includes(d.codi)));\n\n/**\n * Per-collection allowlist check. Items from a collection without a rule\n * (or whose rule has no `allowedTagIds`) always pass. Items from a\n * collection with a rule must have a `tag.id` in the allowlist.\n */\nconst isAllowedItem = (item: IActivityHistoryItem, rules: RulesByCollectionId): boolean => {\n const collectionRule = item.type ? rules[item.type] : undefined;\n if (!collectionRule?.allowedTagIds || collectionRule.allowedTagIds.length === 0) return true;\n return collectionRule.allowedTagIds.includes(item.tag?.id ?? \"\");\n};\n\nconst groupMatchesToday = (group: IActivityHistoryGroup): boolean => {\n const firstItem = group.items?.[0] || group.subGroups?.[0]?.items?.[0];\n return itemMatchesToday(firstItem);\n};\n\nconst filterGroupItemsByPredicate = (\n group: IActivityHistoryGroup,\n predicate: (item: IActivityHistoryItem) => boolean,\n): IActivityHistoryGroup => ({\n ...group,\n items: (group.items || []).filter(predicate),\n subGroups: (group.subGroups || [])\n .map((sub) => ({ ...sub, items: sub.items.filter(predicate) }))\n .filter((sub) => sub.items.length > 0),\n});\n\nconst filterGroupByDiagnostics = (group: IActivityHistoryGroup, codes: string[]): IActivityHistoryGroup =>\n filterGroupItemsByPredicate(group, (it) => itemHasAnyDiagnostic(it, codes));\n\nconst isGroupNonEmpty = (group: IActivityHistoryGroup): boolean =>\n group.items.length > 0 || group.subGroups.length > 0;\n\n/**\n * Applies importer-only view filters on top of the already-filtered groups\n * returned by activityHistoryGroupedItems. Filters are visual: they only\n * affect what's rendered, never the underlying selection.\n *\n * `rulesByCollectionId` carries per-plugin rules (allowlist of tag ids,\n * etc.) declared at inject time. Items from a collection with no rule\n * pass through unchanged.\n *\n * The `todayOnly` and `selectedDiagnosticCodes` filters compose as a UNION\n * (OR): when both are active, a group is shown if it is from today (with\n * all its items) OR contains items matching the selected diagnostics\n * (only the matching items).\n */\nexport const applyImporterFilters = (\n groups: IActivityHistoryGroup[],\n { todayOnly, selectedDiagnosticCodes }: ImporterViewFilters,\n rulesByCollectionId: RulesByCollectionId = {},\n): IActivityHistoryGroup[] => {\n // 1) Per-collection allowlist (always applied). Plugins without rules\n // let all their items through.\n const baseFiltered = groups\n .map((group) => filterGroupItemsByPredicate(group, (item) => isAllowedItem(item, rulesByCollectionId)))\n .filter(isGroupNonEmpty);\n\n // 2) View filters from the user (today / diagnostics) compose as UNION.\n const todayActive = todayOnly;\n const diagActive = selectedDiagnosticCodes.length > 0;\n\n if (!todayActive && !diagActive) return baseFiltered;\n\n return baseFiltered\n .map((group) => {\n if (todayActive && groupMatchesToday(group)) return group;\n if (diagActive) return filterGroupByDiagnostics(group, selectedDiagnosticCodes);\n return null;\n })\n .filter((group): group is IActivityHistoryGroup => group !== null && isGroupNonEmpty(group));\n};\n\nexport const flattenGroupItems = (groups: IActivityHistoryGroup[]): IActivityHistoryItem[] => {\n const all: IActivityHistoryItem[] = [];\n for (const group of groups) {\n for (const item of group.items || []) all.push(item);\n for (const sub of group.subGroups || []) {\n for (const item of sub.items) all.push(item);\n }\n }\n return all;\n};\n","import { format } from \"date-fns\";\nimport { html, nothing } from \"lit\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport { ref } from \"lit/directives/ref.js\";\nimport { repeat } from \"lit/directives/repeat.js\";\nimport { translate } from \"../../localization\";\nimport { hasItemDivider, shouldShowRole } from \"../domain/business-rules\";\nimport {\n IActivityHistoryDiagnostic,\n IActivityHistoryGroup,\n IActivityHistoryItem,\n IActivityHistoryItemWithComponent,\n} from \"../domain/model\";\nimport {\n ActivityHistoryEntry,\n mergeHistoryItemsAndSubgroups,\n} from \"../list/merge-history-items-and-subgroups/merge-history-items-and-subgroups\";\nimport { ActivityHistoryImporter } from \"./activity-history-importer\";\n\nconst checkboxState = (state: \"all\" | \"some\" | \"none\") => ({\n checked: state === \"all\",\n indeterminate: state === \"some\",\n});\n\nexport const template = (props: ActivityHistoryImporter) => {\n const all = checkboxState(props.allState());\n\n return html`\n <div class=\"importer\">\n ${headerTemplate(props)} ${searchTemplate(props)} ${filtersTemplate(props, all)} ${listTemplate(props)}\n </div>\n `;\n};\n\nconst headerTemplate = (props: ActivityHistoryImporter) => html`\n <div class=\"importer__header\">\n <dss-typography tag=\"h4\" variant=\"subtitle-3\">${translate(\"importer.title\")}</dss-typography>\n <dss-badge label=\"${props.totalCount}\" status=\"info\" size=\"sm\" outlined hideIcon></dss-badge>\n </div>\n`;\n\nconst searchTemplate = (props: ActivityHistoryImporter) => html`\n <div class=\"importer__search\">\n <activity-history-search-bar\n .searchString=${props.searchString}\n @onSearchChange=${(e: CustomEvent) => props._onSearchChange(e)}\n ></activity-history-search-bar>\n </div>\n`;\n\nconst filtersTemplate = (props: ActivityHistoryImporter, all: { checked: boolean; indeterminate: boolean }) => html`\n <div class=\"importer__filters\">\n <dss-checkbox\n label=${translate(\"importer.selectAll\")}\n .checked=${all.checked}\n .indeterminate=${all.indeterminate}\n @change=${(e: Event) => props._toggleAll(e)}\n ></dss-checkbox>\n\n <span class=\"importer__filters-label\">${translate(\"importer.filters\")}</span>\n\n <dss-checkbox\n label=${translate(\"importer.today\")}\n .checked=${props.todayOnly}\n @change=${(e: Event) => props._onToggleToday(e)}\n ></dss-checkbox>\n\n ${\n props.hasDiagnosticsFilter()\n ? html`\n <dss-select\n dropdownStyle=\"max-height: 300px; overflow-y: auto;\"\n size=\"sm\"\n type=\"default\"\n multiple\n placeholder=\"${translate(\"importer.diagnostics\")}\"\n .elements=${props.diagnosticsOptions()}\n @value-changed=${(e: CustomEvent) => props._onDiagnosticsChanged(e)}\n ></dss-select>\n `\n : nothing\n }\n </div>\n`;\n\nconst listTemplate = (props: ActivityHistoryImporter) => {\n if (!props.filteredGroups?.length) {\n return html`<div class=\"importer__empty\">${translate(\"importer.noResults\")}</div>`;\n }\n\n return html`\n <div class=\"virtual-container\">\n <div class=\"virtual-viewport\">\n <div class=\"virtual-content\" style=\"height: ${props._totalHeight}px;\">\n <div class=\"virtual-items\" style=\"transform: translateY(${props._containerOffset}px)\">\n ${repeat(\n props._visibleRows,\n (row) => row.group.idGroup,\n (row) => visitTemplate(props, row.group, row.index),\n )}\n </div>\n </div>\n </div>\n </div>\n `;\n};\n\nconst visitTemplate = (props: ActivityHistoryImporter, group: IActivityHistoryGroup, index: number) => {\n const representative = group.items?.[0] || group.subGroups?.[0]?.items?.[0];\n const visit = checkboxState(props.visitState(group));\n\n return html`\n <div class=\"visit\" data-index=${index} ${ref(props._measureElement)} data-date=${ifDefined(representative?.date)}>\n <div class=\"visit__header\">\n <dss-checkbox\n .checked=${visit.checked}\n .indeterminate=${visit.indeterminate}\n hideLabel\n @change=${(e: Event) => props._toggleVisit(group, (e.target as HTMLInputElement).checked)}\n ></dss-checkbox>\n ${visitHeaderContent(representative)}\n </div>\n <div class=\"visit__items\">\n ${repeat(\n mergeHistoryItemsAndSubgroups(group),\n (entry) => (entry.type === \"item\" ? entry.item.id : (entry.subGroup as any).idSubGroup),\n (entry: ActivityHistoryEntry) => {\n if (entry.type === \"item\") {\n return itemRow(props, entry.item, group.items as IActivityHistoryItemWithComponent[]);\n }\n return subGroupTemplate(props, entry.subGroup);\n },\n )}\n </div>\n </div>\n `;\n};\n\nconst visitHeaderContent = (item: IActivityHistoryItem | undefined) => {\n if (!item) return nothing;\n const showRole = shouldShowRole(item);\n const values: string[] = [];\n if (item.professional?.name) values.push(item.professional.name);\n if (showRole && item.professional?.role?.description) values.push(item.professional.role.description);\n if (item.professional?.speciality?.description) values.push(item.professional.speciality.description);\n if (item.up?.description) values.push(item.up.description);\n if (item.service?.description) values.push(item.service.description);\n\n return html`\n <div class=\"title\">\n <div class=\"title-date\">\n <div>${format(new Date(item.date), \"dd/MM/yyyy\")}</div>\n </div>\n <div class=\"title-description\">\n <div>${values.map((v, i) => html`${v}${i < values.length - 1 ? \" | \" : \"\"}`)}</div>\n </div>\n </div>\n `;\n};\n\nconst subGroupTemplate = (props: ActivityHistoryImporter, subGroup: { items: IActivityHistoryItemWithComponent[] }) => {\n const sub = checkboxState(props.subGroupState(subGroup.items));\n\n return html`\n <div class=\"diagnostics\">\n <div class=\"diagnostics__header\">\n <dss-checkbox\n .checked=${sub.checked}\n .indeterminate=${sub.indeterminate}\n hideLabel\n @change=${(e: Event) => props._toggleSubGroup(subGroup.items, (e.target as HTMLInputElement).checked)}\n ></dss-checkbox>\n ${diagnosticHeaderTemplate(subGroup.items?.[0])}\n </div>\n <div class=\"diagnostics__items\">\n ${repeat(\n subGroup.items,\n (item) => item.id,\n (item) => itemRow(props, item, subGroup.items),\n )}\n </div>\n </div>\n `;\n};\n\nconst itemRow = (\n props: ActivityHistoryImporter,\n item: IActivityHistoryItemWithComponent,\n siblings: IActivityHistoryItemWithComponent[],\n) => html`\n <div class=\"item\" ?has-divider=${hasItemDivider(item, siblings)}>\n <dss-checkbox\n class=\"item__check\"\n .checked=${props.isItemSelected(item.id)}\n hideLabel\n @change=${() => props._toggleItem(item.id)}\n ></dss-checkbox>\n ${item.component}\n </div>\n`;\n\nconst diagnosticHeaderTemplate = (item: IActivityHistoryItem | undefined) =>\n item &&\n html`\n ${item.diagnostics\n .filter((diagnostic: IActivityHistoryDiagnostic) => diagnostic.descripcio != null && diagnostic.descripcio.trim() !== \"\")\n .map(\n (diagnostic: IActivityHistoryDiagnostic) =>\n html`<dss-badge label=${diagnostic.descripcio?.toUpperCase() as string} status=\"info\" size=\"sm\" outlined hideIcon></dss-badge>`,\n )}\n `;\n","import { ImportParams, PrimariaApi } from \"@uxland/primary-shell\";\nimport { LitElement, css, html, unsafeCSS } from \"lit\";\nimport { customElement, query, state } from \"lit/decorators.js\";\nimport { pluginName } from \"../../constants\";\nimport { lazyInject } from \"../../infrastructure/ioc/container\";\nimport { TYPES } from \"../../infrastructure/ioc/types\";\nimport { connectedProperty } from \"../../infrastructure/state/connected-property\";\nimport { IActivityHistoryGroup, IActivityHistoryItem, IHistoryDataImporterContext } from \"../domain/model\";\nimport { VirtualScrollerState } from \"../list/UI/timeline/virtual-scroller\";\nimport { SearchActivityHistoryItems } from \"../search/request\";\nimport { activityHistorySearchStringSelector } from \"../search/selectors\";\nimport { activityHistoryGroupedItems, historyDataImporterRulesByCollectionIdSelector } from \"../selectors\";\nimport { prepareGroupComponents } from \"../shared/prepare-group-components\";\nimport { INITIAL_SCROLLER_STATE, ScrollerController } from \"../shared/scroller-controller\";\nimport { ImporterViewFilters, RulesByCollectionId, applyImporterFilters, flattenGroupItems } from \"./filters\";\nimport styles from \"./styles.css?inline\";\nimport { template } from \"./template\";\n\nexport type TristateChecked = \"all\" | \"some\" | \"none\";\n\ntype AvailableDiagnostic = { code: string; catalog: string; description: string };\n\n/** Escapes a plain-text string so it can be safely embedded as HTML text. */\nconst escapeHtml = (value: string): string => {\n const div = document.createElement(\"div\");\n div.textContent = value;\n return div.innerHTML;\n};\n\nconst ALLOWED_HTML_TAGS = [\"p\", \"br\", \"span\", \"div\", \"strong\", \"em\", \"u\", \"s\", \"sub\", \"sup\", \"b\", \"i\", \"a\", \"code\", \"pre\", \"blockquote\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"ul\", \"ol\", \"li\"];\nconst strayLessThan = new RegExp(`<(?!/?(?:${ALLOWED_HTML_TAGS.join(\"|\")})\\\\b)`, \"gi\");\n/** Escapes `<` that don't open a known HTML tag, so strings like `(<P50)` aren't parsed as tags. */\nconst escapeUnknownTags = (html: string): string => html.replace(strayLessThan, \"&lt;\");\n\n/**\n * Builds the `{ raw, html }` text for a selection from each item's `content`.\n * Items with only a plain-text body are wrapped in a <p>; items without any\n * body contribute nothing. Parts are joined the same way the shell aggregates\n * text across plugins (blank line for raw, adjacent blocks for html).\n */\nconst buildSelectionText = (items: IActivityHistoryItem[]): { raw: string; html: string } => {\n const rawParts: string[] = [];\n const htmlParts: string[] = [];\n for (const item of items) {\n const plain = item.content?.plainText?.trim();\n const itemHtml = item.content?.html?.trim();\n if (plain) rawParts.push(plain);\n if (itemHtml) htmlParts.push(escapeUnknownTags(itemHtml));\n else if (plain) htmlParts.push(`<p>${escapeHtml(plain)}</p>`);\n }\n return { raw: rawParts.join(\"\\n\\n\"), html: htmlParts.join(\"\") };\n};\n\n@customElement(\"activity-history-importer\")\nexport class ActivityHistoryImporter extends LitElement {\n static styles = css`\n ${unsafeCSS(styles)}\n `;\n\n render() {\n return html`${template(this)}`;\n }\n\n // ── API & store ─────────────────────────────────────────────────────────\n @lazyInject(TYPES.primaryApi)\n api: PrimariaApi;\n\n @connectedProperty(activityHistoryGroupedItems)\n historyGroups: IActivityHistoryGroup[] = [];\n\n @connectedProperty(activityHistorySearchStringSelector)\n searchString = \"\";\n\n @connectedProperty(historyDataImporterRulesByCollectionIdSelector)\n rulesByCollectionId: RulesByCollectionId = {};\n\n // ── Filters (local) ─────────────────────────────────────────────────────\n @state() todayOnly = false;\n @state() selectedDiagnosticCodes: string[] = [];\n @state() availableDiagnostics: AvailableDiagnostic[] = [];\n\n // ── Derived state ───────────────────────────────────────────────────────\n @state() filteredGroups: IActivityHistoryGroup[] = [];\n @state() totalCount = 0;\n\n // ── Selection ───────────────────────────────────────────────────────────\n @state() selectedIds: string[] = [];\n\n // ── Virtual scroller ────────────────────────────────────────────────────\n @query(\".virtual-viewport\") private _viewport!: HTMLElement;\n @state() _virtualScrollerState: VirtualScrollerState = INITIAL_SCROLLER_STATE;\n private _scrollerController = new ScrollerController<IActivityHistoryGroup>();\n\n // ── Misc internals ──────────────────────────────────────────────────────\n private _searchTimeout: number | null = null;\n private _didInitialPreselect = false;\n\n // ── Lifecycle ───────────────────────────────────────────────────────────\n connectedCallback() {\n super.connectedCallback();\n this.selectedIds = [];\n this._didInitialPreselect = false;\n const params = this.api?.importDataManager?.getCurrentImportParams?.() as ImportParams | undefined;\n this.availableDiagnostics = params?.diagnostics ?? [];\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this._scrollerController.teardown();\n this._clearSearchTimeout();\n this.api.broker.send(new SearchActivityHistoryItems(\"\"));\n }\n\n updated(changedProperties: Map<PropertyKey, unknown>): void {\n super.updated(changedProperties);\n\n if (\n changedProperties.has(\"historyGroups\") ||\n changedProperties.has(\"todayOnly\") ||\n changedProperties.has(\"selectedDiagnosticCodes\")\n ) {\n void this._recomputeFiltered();\n }\n\n if (!this._didInitialPreselect && this.historyGroups?.length) {\n this._didInitialPreselect = true;\n this._preselectMatchingItems();\n }\n\n if (changedProperties.has(\"filteredGroups\")) {\n this._syncVirtualScroller();\n }\n\n if (changedProperties.has(\"selectedIds\")) {\n this._publishSelection();\n }\n }\n\n // ── Event handlers ──────────────────────────────────────────────────────\n _onSearchChange(event: CustomEvent) {\n if (typeof event.detail !== \"string\") return;\n this._clearSearchTimeout();\n this._searchTimeout = window.setTimeout(() => {\n this.api.broker.send(new SearchActivityHistoryItems(event.detail));\n }, 300);\n }\n\n _onToggleToday(event: Event) {\n this.todayOnly = (event.target as HTMLInputElement).checked;\n }\n\n _onDiagnosticsChanged(event: CustomEvent) {\n const detail = event.detail as { selectedItems?: { value: string }[] } | undefined;\n this.selectedDiagnosticCodes = (detail?.selectedItems || []).map((s) => s.value);\n }\n\n _toggleItem(itemId: string) {\n this.selectedIds = this.selectedIds.includes(itemId)\n ? this.selectedIds.filter((id) => id !== itemId)\n : [...this.selectedIds, itemId];\n }\n\n _toggleVisit(group: IActivityHistoryGroup, selected: boolean) {\n this._setSelection(\n flattenGroupItems([group]).map((it) => it.id),\n selected,\n );\n }\n\n _toggleSubGroup(items: { id: string }[], selected: boolean) {\n this._setSelection(\n items.map((it) => it.id),\n selected,\n );\n }\n\n _toggleAll(event: Event) {\n this._setSelection(\n flattenGroupItems(this.filteredGroups).map((it) => it.id),\n (event.target as HTMLInputElement).checked,\n );\n }\n\n // ── Template helpers ────────────────────────────────────────────────────\n isItemSelected(itemId: string): boolean {\n return this.selectedIds.includes(itemId);\n }\n\n visitState(group: IActivityHistoryGroup): TristateChecked {\n return this._tristate(flattenGroupItems([group]).map((it) => it.id));\n }\n\n subGroupState(items: { id: string }[]): TristateChecked {\n return this._tristate(items.map((it) => it.id));\n }\n\n allState(): TristateChecked {\n return this._tristate(flattenGroupItems(this.filteredGroups).map((it) => it.id));\n }\n\n hasDiagnosticsFilter(): boolean {\n return this.availableDiagnostics.length > 0;\n }\n\n diagnosticsOptions() {\n return this.availableDiagnostics.map((d) => ({ label: d.description, value: d.code }));\n }\n\n /**\n * Maps virtual scroller indices to actual filtered groups for rendering.\n *\n * The virtual scroller tells us which item positions are visible (e.g., items 5-7).\n * This getter translates those position numbers into the actual group objects\n * from filteredGroups that need to be displayed.\n * @example\n * virtualItems = [{ index: 0 }, { index: 1 }, { index: 2 }, { index: 3 }] // 4 items visible at positions 0, 1, 2, 3\n * returns [filteredGroups[0], [filteredGroups[1], [filteredGroups[2], [filteredGroups[3], ...] // the actual groups to render\n *\n * @returns The activity history groups currently visible in the viewport\n */\n get _visibleRows(): { index: number; group: IActivityHistoryGroup }[] {\n return this._virtualScrollerState.virtualItems\n .map((vi) => ({ index: vi.index, group: this.filteredGroups?.[vi.index] }))\n .filter((row): row is { index: number; group: IActivityHistoryGroup } => Boolean(row.group));\n }\n\n /** Callback ref used by each `.visit` so the virtualizer measures its real\n * height (variable-height visits) instead of relying on the estimate. */\n _measureElement = (el: Element | undefined) => {\n if (el) this._scrollerController.measureElement(el as HTMLElement);\n };\n /**\n * Calculates the vertical offset (in pixels) to position the visible items.\n *\n * When scrolling, visible items are positioned using CSS `transform: translateY()`.\n * This getter returns how many pixels to shift the container down so the visible\n * items appear in the correct scroll position.\n *\n * @example\n * First visible item is at pixel 5000 → returns 5000\n * CSS applies: transform: translateY(5000px)\n *\n * @returns Vertical offset in pixels for the items container\n */\n get _containerOffset(): number {\n return this._virtualScrollerState.virtualItems[0]?.start ?? 0;\n }\n\n get _totalHeight(): number {\n return this._virtualScrollerState.totalHeight;\n }\n\n // ── Private helpers ─────────────────────────────────────────────────────\n private _clearSearchTimeout() {\n if (this._searchTimeout !== null) {\n clearTimeout(this._searchTimeout);\n this._searchTimeout = null;\n }\n }\n\n private _setSelection(ids: string[], selected: boolean) {\n if (selected) {\n const additions = ids.filter((id) => !this.selectedIds.includes(id));\n if (additions.length) this.selectedIds = [...this.selectedIds, ...additions];\n } else {\n const toRemove = new Set(ids);\n this.selectedIds = this.selectedIds.filter((id) => !toRemove.has(id));\n }\n }\n\n private _tristate(ids: string[]): TristateChecked {\n if (!ids.length) return \"none\";\n const count = ids.filter((id) => this.selectedIds.includes(id)).length;\n if (count === 0) return \"none\";\n if (count === ids.length) return \"all\";\n return \"some\";\n }\n\n private async _recomputeFiltered() {\n const filters: ImporterViewFilters = {\n todayOnly: this.todayOnly,\n selectedDiagnosticCodes: this.selectedDiagnosticCodes,\n };\n const raw = applyImporterFilters(this.historyGroups || [], filters, this.rulesByCollectionId);\n this.filteredGroups = await prepareGroupComponents(raw);\n this.totalCount = flattenGroupItems(this.filteredGroups).length;\n }\n\n private _syncVirtualScroller() {\n this._virtualScrollerState = this._scrollerController.sync({\n viewport: this._viewport,\n items: this.filteredGroups,\n estimateItemHeight: () => 200,\n onStateChange: (state) => {\n this._virtualScrollerState = state;\n this.requestUpdate();\n },\n });\n }\n\n /**\n * On the first time the modal receives history data, auto-selects every\n * item whose collection's rule (`shouldPreselect`) returns true. The\n * activity-history plugin stays generic — each plugin owns its own\n * preselect predicate.\n */\n private _preselectMatchingItems() {\n const ctx: IHistoryDataImporterContext = { diagnostics: this.availableDiagnostics };\n const matchingIds: string[] = [];\n\n const collect = (items: IActivityHistoryItem[]) => {\n for (const item of items) {\n const rule = item.type ? this.rulesByCollectionId[item.type] : undefined;\n if (!rule?.shouldPreselect) continue;\n if (rule.shouldPreselect(item, ctx)) matchingIds.push(item.id);\n }\n };\n\n for (const group of this.historyGroups || []) {\n collect(group.items || []);\n for (const sub of group.subGroups || []) collect(sub.items);\n }\n\n if (matchingIds.length) {\n this.selectedIds = [...new Set([...this.selectedIds, ...matchingIds])];\n }\n }\n\n private _publishSelection() {\n const selectedSet = new Set(this.selectedIds);\n const groups = (this.historyGroups || [])\n .map((group) => ({\n ...group,\n items: (group.items || []).filter((it) => selectedSet.has(it.id)),\n subGroups: (group.subGroups || [])\n .map((sub) => ({ ...sub, items: sub.items.filter((it) => selectedSet.has(it.id)) }))\n .filter((sub) => sub.items.length > 0),\n }))\n .filter((g) => g.items.length > 0 || g.subGroups.length > 0);\n\n // Publish both the structured selection (for consumers that need the raw\n // items) and the formatted text built from each item's `content`, so the\n // destination plugin can just append `result.text` without re-deriving it.\n this.api.importDataManager.selectItems({\n pluginId: pluginName,\n data: groups as any[],\n text: buildSelectionText(flattenGroupItems(groups as IActivityHistoryGroup[])),\n });\n }\n}\n","import { html, nothing } from \"lit\";\nimport { translate } from \"../../../../localization\";\nimport { ExportPdf } from \"../../../export-to-pdf/request\";\nimport { ActivityHistoryMain } from \"./activity-history-main\";\n\nexport const template = (props: ActivityHistoryMain) =>\n html`<div class=\"container\" ?maximized=${props.maximized}>\n ${\n props.maximized\n ? html`${headerMaximizedTemplate(props)}`\n : html`<div class=\"header\">\n <div class=\"header__left\">\n <div class=\"title\">${translate(\"activityHistory\")}</div>\n <activity-history-search-bar @onSearchChange=${props._handleSearchChange} .searchQuery=${props.searchQuery}></activity-history-search-bar>\n <dss-datepicker size=\"md\" class=\"date-picker\" label=${translate(\"goToDate\")} @change=${(event: Event) => props._handleSelectDate((event.target as HTMLInputElement).value)}></dss-datepicker>\n </div>\n \n <div class=\"header__right\">\n <dss-icon-button @click=${() => props._refreshHistory()} size=\"md\" variant=\"primary\" icon=\"refresh\" label=${translate(\"actions.refresh\")}></dss-icon-button>\n <div>|</div>\n <dss-icon-button @click=${() => props._maximize()} size=\"md\" variant=\"primary\" icon=\"open_in_full\" label=${translate(\"actions.maximizeButton\")}></dss-icon-button>\n ${\n props.isAdministrative\n ? nothing\n : html`<div>|</div>\n <div>\n <dss-icon-button size=\"md\" variant=\"primary\" icon=\"more_vert\" label=${translate(\"actions.menuButton\")}></dss-icon-button>\n <dss-action-menu position=\"bottom-start\">\n <dss-action-menu-item lefticon=\"view_timeline\" label=${translate(\"actions.cronogram\")} @click=${props._raiseEcapCronogramEvent}></dss-action-menu-item>\n <!-- <dss-action-menu-item lefticon=\"file_download\" label=${translate(\"actions.exportPdf\")} @click=${() => props.api.broker.send(new ExportPdf())}></dss-action-menu-item> -->\n <!-- <dss-action-menu-item lefticon=\"info\" label=${translate(\"actions.entryLegend\")}></dss-action-menu-item> -->\n </dss-action-menu>\n </div>`\n }\n </div>\n </div>`\n } \n <div class=\"wrapper\" ?maximized=${props.maximized}>\n <activity-history-filters .wrapperMaximized=${props.maximized}></activity-history-filters>\n <div class=\"content\">\n <active-filters-header></active-filters-header>\n ${props.isAnyCollectionBusy ? html`<activity-history-busy></activity-history-busy>` : nothing}\n ${props.historyGroups?.length || !props.isAnyCollectionBusy ? html`<activity-history-timeline></activity-history-timeline>` : nothing}\n </div> \n </div>\n </div>`;\n\nexport const headerMaximizedTemplate = (props: ActivityHistoryMain) => html`\n <div class=\"header-maximized-container\">\n <div class=\"header__maximized\">\n <div class=\"header__maximized__left\">\n <div class=\"title\">${translate(\"activityHistory\")}</div>\n <activity-history-search-bar @onSearchChange=${props._handleSearchChange} .searchQuery=${props.searchQuery}></activity-history-search-bar>\n <dss-datepicker size=\"md\" class=\"date-picker\" label=${translate(\"goToDate\")} @change=${(event: Event) => props._handleSelectDate((event.target as HTMLInputElement).value)}></dss-datepicker>\n </div>\n <div class=\"header__maximized__right\">\n <!-- <div>\n <dss-button variant=\"subtle\" size=\"md\" label=\"${translate(\"actions.moreOptions\")}\" icon=\"more_horiz\" iconposition=\"left\"></dss-button>\n <dss-action-menu position=\"bottom-start\">\n <dss-action-menu-item @click=${() => props.api.broker.send(new ExportPdf())} lefticon=\"file_download\" label=${translate(\"actions.exportPdf\")}></dss-action-menu-item>\n </dss-action-menu>\n </div> -->\n <!-- <dss-button label=\"${translate(\"actions.entryLegend\")}\" size=\"md\" variant=\"secondary\" icon=\"info\"></dss-button> -->\n ${\n props.isAdministrative\n ? nothing\n : html`<dss-button label=\"${translate(\"actions.cronogram\")}\" size=\"md\" variant=\"primary\" icon=\"view_timeline\" @click=${props._raiseEcapCronogramEvent}></dss-button>`\n }\n <dss-icon-button @click=${() => props._minimize()} size=\"md\" variant=\"primary\" icon=\"close_fullscreen\" label=${translate(\"actions.minimizeButton\")}></dss-icon-button>\n </div>\n </div>\n </div>\n`;\n","import { BrokerDisposableHandler, PrimariaApi, PrimariaRegionHost } from \"@uxland/primary-shell\";\nimport { isValid, parse } from \"date-fns\";\nimport { LitElement, css, html, unsafeCSS } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport { lazyInject } from \"../../../../infrastructure/ioc/container\";\nimport { TYPES } from \"../../../../infrastructure/ioc/types\";\nimport { connectedProperty } from \"../../../../infrastructure/state/connected-property\";\nimport { isAnyCollectionBusySelector, isSomeCollectionLoadedAndOtherLoading } from \"../../../add/handle-busy/selectors\";\nimport { IActivityHistoryGroup } from \"../../../domain/model\";\nimport { HandleRefreshHistoryItems } from \"../../../refresh/request\";\nimport { SearchActivityHistoryItems } from \"../../../search/request\";\nimport { activityHistoryGroupedItems } from \"../../../selectors\";\nimport { ActivityHistoryTimeline } from \"../timeline/activity-history-timeline\";\nimport styles from \"./styles.css?inline\";\nimport { template } from \"./template\";\n\n//@ts-ignore\n@customElement(\"activity-history-main\")\nexport class ActivityHistoryMain extends PrimariaRegionHost(LitElement) {\n render() {\n return html`${template(this)}`;\n }\n\n static styles = css`\n ${unsafeCSS(styles)}\n `;\n\n subscriptions: BrokerDisposableHandler[] = [];\n private _searchTimeout: number | null = null;\n\n connectedCallback() {\n super.connectedCallback();\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this._unsubscribeEvents();\n }\n\n firstUpdated() {\n super.firstUpdated();\n this._subscribeEvents();\n }\n\n @property({ type: Boolean, reflect: true })\n maximized = false;\n\n @lazyInject(TYPES.primaryApi)\n api: PrimariaApi;\n\n @connectedProperty(activityHistoryGroupedItems)\n historyGroups: IActivityHistoryGroup[];\n\n @connectedProperty(isSomeCollectionLoadedAndOtherLoading)\n isSomeCollectionLoadedAndOtherLoading: boolean;\n\n @connectedProperty(isAnyCollectionBusySelector)\n isAnyCollectionBusy: boolean;\n\n // Administrative users cannot trigger the cronogram action, so the actions\n // that expose it (the 3-dots menu and the maximized cronogram button) are\n // hidden for them.\n get isAdministrative(): boolean {\n return !!this.api?.userManager?.isUserRoleAdministrative();\n }\n\n _maximize() {\n this.maximized = true;\n }\n\n _minimize() {\n this.maximized = false;\n }\n\n _subscribeEvents() {\n const mainViewSubscription = this.api.broker.subscribe(\"mainViewChanged\", ({ viewId }) => {\n if (viewId === \"clinical-monitoring\" || viewId === \"admin-clinical-monitoring\") {\n this.maximized = false;\n }\n });\n this.subscriptions.push(mainViewSubscription);\n }\n\n _unsubscribeEvents() {\n this.subscriptions.forEach((s) => s.dispose());\n }\n\n @property()\n searchQuery = \"\";\n\n _handleSelectDate(date: string) {\n const selectedDate = parse(date, \"dd/MM/yyyy\", new Date());\n // Una data buida o a mig escriure dona Invalid Date, i el fallback de\n // `_scrollIntoDate` ho interpretaria com \"més antiga que tot\" i saltaria al final.\n if (!isValid(selectedDate)) return;\n\n this.scrollToClosestDate(selectedDate);\n }\n\n _handleSearchChange(event: CustomEvent) {\n if (typeof event.detail !== \"string\") return;\n this.searchQuery = event.detail;\n\n if (this._searchTimeout) {\n clearTimeout(this._searchTimeout);\n }\n\n this._searchTimeout = setTimeout(() => {\n this.api.broker.send(new SearchActivityHistoryItems(this.searchQuery));\n }, 300);\n }\n\n async _raiseEcapCronogramEvent() {\n const CIP = (await this.api.broker.send(\"get_patient_cip\")) as string;\n this.api.ecapEventManager.publish(\"CRONOGRAMA\", \"NO_TANCAR\", { CIP });\n }\n\n scrollToClosestDate(date: Date) {\n const selectedDate = date.getTime();\n const timeline = this.shadowRoot.querySelector(\"activity-history-timeline\") as ActivityHistoryTimeline;\n timeline._scrollIntoDate(selectedDate);\n }\n\n _refreshHistory() {\n this.api.broker.send(new HandleRefreshHistoryItems());\n }\n}\n","import { PrimariaApi } from \"@uxland/primary-shell\";\nimport { ActivityHistoryImporter } from \"./activity-history-item/importer/activity-history-importer\";\nimport { ActivityHistoryMain } from \"./activity-history-item/list/UI/main-view/activity-history-main\";\nimport { container } from \"./infrastructure/ioc/container\";\nimport { TYPES } from \"./infrastructure/ioc/types\";\n\nconst IMPORTER_VIEW_ID = \"activity-history-importer\";\n\nexport const registerViews = (api: PrimariaApi) => {\n api.regionManager.registerView(api.regionManager.regions.clinicalMonitoring.content, {\n id: api.pluginInfo.pluginId,\n factory: () => Promise.resolve(new ActivityHistoryMain()),\n });\n\n api.regionManager.registerView(api.regionManager.regions.shell.importDataActivityHistory, {\n id: IMPORTER_VIEW_ID,\n factory: () => Promise.resolve(new ActivityHistoryImporter()),\n sortHint: \"0020\",\n });\n};\n\nexport const unregisterViews = () => {\n const api = container.get(TYPES.primaryApi) as PrimariaApi;\n api.regionManager.removeView(api.regionManager.regions.clinicalMonitoring.content, api.pluginInfo.pluginId);\n api.regionManager.removeView(api.regionManager.regions.shell.importDataActivityHistory, IMPORTER_VIEW_ID);\n};\n","import { PrimariaApi } from \"@uxland/primary-shell\";\nimport { bootstrapActivityHistoryItem, teardownActivityHistoryItem } from \"./activity-history-item/bootstrapper\";\nimport { registerViews, unregisterViews } from \"./handle-views\";\nimport { bindDeps, unbindDeps } from \"./infrastructure/ioc/container\";\nimport { initializeLocalization } from \"./localization\";\nimport { setShellApiForOwnSpec } from \"./activity-history-item/domain/specs/own-spec\";\n\nconst bootstrapFeatures = (api: PrimariaApi) => {\n bootstrapActivityHistoryItem(api);\n};\n\nconst teardownFeatures = () => {\n teardownActivityHistoryItem();\n};\n\nexport const initialize = async (api: PrimariaApi) => {\n // Initialize the shellApi for OwnSpec to avoid circular dependencies\n setShellApiForOwnSpec(api);\n \n registerViews(api);\n await initializeLocalization(api);\n bindDeps(api);\n bootstrapFeatures(api);\n return Promise.resolve();\n};\n\nexport const dispose = () => {\n // Clean up the shellApi reference\n setShellApiForOwnSpec(null);\n \n teardownFeatures();\n unregisterViews();\n unbindDeps();\n return Promise.resolve();\n};\n"],"names":["constructFrom","date","value","addDays","amount","_date","toDate","millisecondsInWeek","millisecondsInDay","millisecondsInMinute","millisecondsInHour","millisecondsInSecond","defaultOptions","getDefaultOptions","startOfWeek","options","weekStartsOn","day","diff","startOfISOWeek","getISOWeekYear","year","fourthOfJanuaryOfNextYear","startOfNextYear","fourthOfJanuaryOfThisYear","startOfThisYear","startOfDay","getTimezoneOffsetInMilliseconds","utcDate","differenceInCalendarDays","dateLeft","dateRight","startOfDayLeft","startOfDayRight","timestampLeft","timestampRight","startOfISOWeekYear","fourthOfJanuary","isDate","isValid","startOfYear","cleanDate","formatDistanceLocale","formatDistance","token","count","result","tokenValue","buildFormatLongFn","args","width","dateFormats","timeFormats","dateTimeFormats","formatLong","formatRelativeLocale","formatRelative","_baseDate","_options","buildLocalizeFn","context","valuesArray","defaultWidth","index","eraValues","quarterValues","monthValues","dayValues","dayPeriodValues","formattingDayPeriodValues","ordinalNumber","dirtyNumber","number","rem100","localize","quarter","buildMatchFn","string","matchPattern","matchResult","matchedString","parsePatterns","key","findIndex","pattern","findKey","rest","object","predicate","array","buildMatchPatternFn","parseResult","matchOrdinalNumberPattern","parseOrdinalNumberPattern","matchEraPatterns","parseEraPatterns","matchQuarterPatterns","parseQuarterPatterns","matchMonthPatterns","parseMonthPatterns","matchDayPatterns","parseDayPatterns","matchDayPeriodPatterns","parseDayPeriodPatterns","match","enUS","getDayOfYear","getISOWeek","getWeekYear","firstWeekContainsDate","firstWeekOfNextYear","firstWeekOfThisYear","startOfWeekYear","firstWeek","getWeek","addLeadingZeros","targetLength","sign","output","lightFormatters","signedYear","month","dayPeriodEnumValue","numberOfDigits","milliseconds","fractionalSeconds","dayPeriodEnum","formatters","era","signedWeekYear","weekYear","twoDigitYear","isoWeekYear","week","isoWeek","dayOfYear","dayOfWeek","localDayOfWeek","isoDayOfWeek","hours","_localize","timezoneOffset","formatTimezoneWithOptionalMinutes","formatTimezone","formatTimezoneShort","timestamp","offset","delimiter","absOffset","minutes","dateLongFormatter","timeLongFormatter","dateTimeLongFormatter","datePattern","timePattern","dateTimeFormat","longFormatters","dayOfYearTokenRE","weekYearTokenRE","throwTokens","isProtectedDayOfYearToken","isProtectedWeekYearToken","warnOrThrowProtectedError","format","input","_message","message","subject","formattingTokensRegExp","longFormattingTokensRegExp","escapedStringRegExp","doubleQuoteRegExp","unescapedLatinCharacterRegExp","formatStr","locale","defaultLocale","originalDate","parts","substring","firstCharacter","longFormatter","cleanEscapedString","formatterOptions","part","formatter","matched","getInternalDefaultOptions","getISODay","transpose","fromDate","constructor","TIMEZONE_UNIT_PRIORITY","Setter","_utcDate","ValueSetter","validateValue","setValue","priority","subPriority","flags","DateToSystemTimezoneSetter","Parser","dateString","_value","EraParser","numericPatterns","timezonePatterns","mapValue","parseFnResult","mapFn","parseNumericPattern","parseTimezonePattern","seconds","parseAnyDigitsSigned","parseNDigits","n","parseNDigitsSigned","dayPeriodEnumToHours","dayPeriod","normalizeTwoDigitYear","currentYear","isCommonEra","absCurrentYear","rangeEnd","rangeEndCentury","isPreviousCentury","isLeapYearIndex","YearParser","valueCallback","normalizedTwoDigitYear","LocalWeekYearParser","ISOWeekYearParser","_flags","firstWeekOfYear","ExtendedYearParser","QuarterParser","StandAloneQuarterParser","MonthParser","StandAloneMonthParser","setWeek","LocalWeekParser","setISOWeek","ISOWeekParser","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP_YEAR","DateParser","isLeapYear","DayOfYearParser","setDay","currentDay","dayIndex","delta","DayParser","LocalDayParser","wholeWeekDays","StandAloneLocalDayParser","setISODay","ISODayParser","AMPMParser","AMPMMidnightParser","DayPeriodParser","Hour1to12Parser","isPM","Hour0to23Parser","Hour0To11Parser","Hour1To24Parser","MinuteParser","SecondParser","FractionOfSecondParser","ISOTimezoneWithZParser","ISOTimezoneParser","TimestampSecondsParser","TimestampMillisecondsParser","parsers","notWhitespaceRegExp","parse","dateStr","referenceDate","subFnOptions","setters","tokens","usedTokens","parser","incompatibleTokens","incompatibleToken","usedToken","uniquePrioritySetters","setter","a","b","setterArray","registerRequest","api","container","command","handler","injectable","disposable","cmd","brokerExtensions","generateId","c","r","mapArrayToLabelValue","labelProp","valueProp","item","label","createConnectToStoreDecorator","store","selector","target","propertyKey","newVal","connectedCallback","disconnectedCallback","newValue","createConnectedProperty","connectToStore","property","ActivityHistoryFilterType","TYPES","formatProdErrorMessage","code","$$observable","symbol_observable_default","randomString","ActionTypes","actionTypes_default","isPlainObject","obj","proto","createStore","reducer","preloadedState","enhancer","currentReducer","currentState","currentListeners","nextListeners","listenerIdCounter","isDispatching","ensureCanMutateNextListeners","listener","getState","subscribe","isSubscribed","listenerId","dispatch","action","replaceReducer","nextReducer","observable","outerSubscribe","observer","observeState","observerAsObserver","assertReducerShape","reducers","combineReducers","reducerKeys","finalReducers","i","finalReducerKeys","shapeAssertionError","e","state","hasChanged","nextState","previousStateForKey","nextStateForKey","compose","funcs","arg","applyMiddleware","middlewares","createStore2","middlewareAPI","chain","middleware","isAction","NOTHING","DRAFTABLE","DRAFT_STATE","die","error","getPrototypeOf","isDraft","isDraftable","isMap","isSet","objectCtorString","Ctor","each","iter","getArchtype","entry","thing","has","prop","set","propOrOldValue","t","is","x","y","latest","shallowCopy","base","strict","isPlain","descriptors","keys","desc","freeze","deep","isFrozen","dontMutateFrozenCollections","plugins","getPlugin","pluginKey","plugin","currentScope","getCurrentScope","createScope","parent_","immer_","usePatchesInScope","scope","patchListener","revokeScope","leaveScope","revokeDraft","enterScope","immer2","draft","processResult","baseDraft","finalize","maybeFreeze","rootScope","path","childValue","finalizeProperty","resultEach","isSet2","parentState","targetObject","rootPath","targetIsSet","res","createProxyProxy","parent","isArray","traps","objectTraps","arrayTraps","revoke","proxy","source","readPropFromProto","peek","prepareCopy","createProxy","getDescriptorFromProto","current2","markChanged","owner","fn","Immer2","config","recipe","defaultBase","self","base2","hasError","p","ip","patches","inversePatches","current","patch","applyPatchesImpl","currentImpl","copy","immer","produce","assertIsFunction","func","errorMessage","assertIsObject","assertIsArrayOfFunctions","itemTypes","ensureIsArray","getDependencies","createSelectorArgs","dependencies","collectInputSelectorResults","inputSelectorArgs","inputSelectorResults","length","StrongRef","Ref","UNTERMINATED","TERMINATED","createCacheNode","weakMapMemoize","fnNode","resultEqualityCheck","lastResult","resultsCount","memoized","cacheNode","l","objectCache","objectNode","primitiveCache","primitiveNode","terminatedNode","lastResultValue","createSelectorCreator","memoizeOrOptions","memoizeOptionsFromArgs","createSelectorCreatorOptions","createSelector2","recomputations","dependencyRecomputations","directlyPassedOptions","resultFunc","combinedOptions","memoize","memoizeOptions","argsMemoize","argsMemoizeOptions","finalMemoizeOptions","finalArgsMemoizeOptions","memoizedResultFunc","createSelector","createStructuredSelector","inputSelectorsObject","selectorCreator","inputSelectorKeys","composition","createThunkMiddleware","extraArgument","next","thunk","withExtraArgument","composeWithDevTools","createAction","type","prepareAction","actionCreator","prepared","Tuple","_Tuple","items","arr","freezeDraftable","val","createNextState","getOrInsertComputed","map","compute","isBoolean","buildGetDefaultMiddleware","immutableCheck","serializableCheck","actionCreatorCheck","middlewareArray","thunkMiddleware","SHOULD_AUTOBATCH","createQueueWithTimer","timeout","notify","autoBatchEnhancer","notifying","shouldNotifyAtEndOfTick","notificationQueued","listeners","queueCallback","notifyListeners","listener2","wrappedListener","unsubscribe","buildGetDefaultEnhancers","middlewareEnhancer","autoBatch","enhancerArray","configureStore","getDefaultMiddleware","devTools","enhancers","rootReducer","isPlainObject2","finalMiddleware","finalCompose","compose2","getDefaultEnhancers","storeEnhancers","composedEnhancer","executeReducerBuilderCallback","builderCallback","actionsMap","actionMatchers","defaultCaseReducer","builder","typeOrActionCreator","matcher","isStateFunction","createReducer","initialState","mapOrBuilderCallback","finalActionMatchers","finalDefaultCaseReducer","getInitialState","frozenInitialState","caseReducers","reducer2","cr","previousState","caseReducer","isDraft2","isDraftable2","createNextState2","asyncThunkSymbol","getType","slice","actionKey","buildCreateSlice","creators","cAT","name","reducerPath","buildReducerCreators","reducerNames","contextMethods","name2","reducerName","reducerDefinition","reducerDetails","isAsyncThunkSliceReducerDefinition","handleThunkCaseReducerDefinition","handleNormalReducerDefinition","buildReducer","extraReducers","finalCaseReducers","sM","m","selectSelf","injectedSelectorCache","_reducer","makeSelectorProps","reducerPath2","injected","selectSlice","sliceState","getSelectors","selectState","selectorCache","wrapSelector","pathOpt","newReducerPath","wrapper","rootState","createSlice","asyncThunk","payloadCreator","prepare","createNotation","maybeReducerWithPrepare","prepareCallback","isCaseReducerWithPrepareDefinition","fulfilled","pending","rejected","settled","noop","addItemsToCollection","collections","id","componentFactory","searchPredicate","historyDataImporterRules","addItemToCollection","addActivityHistoryItemReducer","addActivityHistoryItemsReducer","addBusyHistoryItemReducer","removeBusyHistoryItemReducer","addErrorHistoryItemReducer","removeErrorHistoryItemReducer","clearActivityHistoryCollectionsReducer","removeItemFromCollection","itemId","removeActivityHistoryItemReducer","updateItemInCollection","updatedItem","updateActivityHistoryItemReducer","activityHistoryCollectionsSlice","setSearchStringReducer","Spec","spec","AndSpec","OrSpec","NotSpec","left","right","shellApiRef","setShellApiForOwnSpec","OwnSpec","userInfo","RelevantSpec","isCommonFilterGroup","group","isDiagnosticFilter","filter","diagnosticsfilterId","isCustomFilter","isUpFilter","upFilterId","relevantFilterId","ownFilterId","commonFilters","setCommonFilterValueReducer","f","ff","addCustomFiltersReducer","clearCustomFiltersReducer","setCustomFilterAllValuesReducer","setCustomFilterGroupValueReducer","setCustomFilterValueReducer","setSingleOptionFilterValue","setMultipleOptionsFilterValue","payload","optionId","enabled","deleteDiagnosticFilterValueReducer","updatedDiagnostics","diagnostic","isEvolution","ev","isRelation","rel","setDiagnosticFilterValuesReducer","newDiagnosticFilter","resetFiltersReducer","addUpFiltersReducer","existing","mergedValues","v","setUpFilterValuesReducer","activityHistoryFiltersSlice","Container","lazyInject","getDecorators","bindDeps","unbindDeps","StoreBaseHandler","__decorateClass","__decorateParam","inject","ApiBaseHandler","BaseHandler","addBusyHistoryItem","removeBusyHistoryItem","addErrorHistoryItem","removeErrorHistoryItem","validateAddAsyncCommand","InjectAsyncHistoryItemsHandler","request","bootstrapInjectAsyncHistoryItems","broker","teardownInjectAsyncHistoryItems","pluginLocaleManager","initializeLocalization","locales","translate","existItemInCollection","entityId","collection","existingItem","isString","isValidDateString","isValidBasicActivityHistoryItem","ensureAreValidBasicActivityHistoryItems","notifyInvalidItem","validateAndFilterBasicItems","validItems","getUpFilter","allUps","up","u","handleAddUpFilter","newUpFilter","addActivityHistoryItem","AddHistoryItemHandler","itemExists","existFilterGroup","bootstrapAddHistoryItem","teardownAddHistoryItem","AddCustomFiltersCommand","addActivityHistoryItems","AddHistoryItemsHandler","newItems","bootstrapAddHistoryItems","teardownAddHistoryItems","connectedProperty","isAnyCollectionBusySelector","isSomeCollectionLoadedAndOtherLoading","isEmptyDataAndOtherLoading","template","props","html","nothing","ActivityHistoryBusy","LitElement","css","unsafeCSS","styles","customElement","HandleHistoryItemsAddError","entities","HandleHistoryItemsAddErrorHandler","entityIdsWithError","entityIds","bootstrapHandleHistoryItemsAddError","teardownHandleHistoryItemsAddError","ExportPdfModal","ExportToPdfHandler","ExportPdf","bootstrapExportPdf","teardownExportPdf","getUniqueObjects","propPathId","propPathDescription","filterTitle","SENSE_TITLE","hasSenseItem","acc","title","TrueSpec","CommonFilterSpec","FalseSpec","PropPathSpec","propPath","CustomFilterSpec","filters","enabledGroups","enabledFilters","DiagnosticCodeSpec","diagnostics","codes","evolucio","relacio","d","normalizeStringToNFD","text","propContainsString","searchString","newProp","newSearchString","commonFieldsSearchPredicate","professionalNameContainsSearchString","centerNameContainsSearchString","specialityNameContainsSearchString","roleNameContainsSearchString","serviceNameContainsSearchString","upNameContainsSearchString","diagnosticsMatch","SearchStringSpec","matchesCommonFields","matchesSearchPredicate","TypeSpec","itemType","ComposedTypeSpec","enabledGroupTypes","groupId","UpFilterSpec","upIds","itemUp","upId","activityHistoryFiltersSelector","activityHistoryCommonFiltersSelector","activityHistoryEnabledCommonFiltersSelector","areCommonFiltersActive","activityHistoryCustomFilterGroupsSelector","sortBySortProperty","areCustomFiltersActive","singleFilter","sort","diagnosticFilterSelector","diagnosticFilterEnabledValuesSelector","areDiagnosticFiltersActive","upFilterSelector","upFilterEnabledValuesSelector","areUpFiltersActive","areSameDiagnostics","diag1","diag2","sortedDiag1","sortedDiag2","hasValidDiagnostic","hasValidDiagnostics","dateStringCache","dateObjectCache","getDateString","getDateObject","createVisitKeyWithoutService","professionalKey","locationKey","dayKey","hasService","canGroupTogether","item1","item2","baseKey1","baseKey2","withinEightHours","date1","date2","time1","time2","groupByValidDiagnostics","groups","subGroups","remainingItems","addedToSubGroup","subGroup","firstSubGroupItem","groupActivityHistoryItems","sortedItems","groupsByBaseKey","allGroups","itemBaseKey","itemTime","addedToExistingGroup","candidateGroups","firstItem","lastItem","groupStartTime","groupEndTime","newGroupStartTime","newGroupEndTime","hasTemporalConflict","otherKey","otherGroups","otherGroup","otherItem","otherTime","newGroup","keyGroups","aFirstItem","bFirstItem","getMostRecentDate","itemDate","getSubGroupMostRecentDate","getGroupMostRecentDate","itemDates","subGroupDates","allDates","sortGroupsByMostRecentDate","sortItemsByDate","activityHistorySearchStringSelector","activityHistoryCollectionsSelector","historyDataImporterRulesByCollectionIdSelector","rules","mapItemsWithMetadata","activityHistoryMappedItems","filterGroups","g","filterCollection","customFilterGroupsWithOptionsSelector","filterGroupsWithItems","filterGroup","activityHistoryGroupedItems","customFilters","diagnosticFilterEnabledValues","upFilterEnabledValues","commonFilterSpec","typeSpec","customFilterSpec","diagnosticSpec","upSpec","filteredItems","groupedItems","SetCommonFilter","SetCustomFilterAllValues","SetCustomFilterGroup","SetCustomFilterValue","SetUpFiltersCommand","filterTemplates","handleChange","isSelected","isEnabled","getFilterTemplate","onChangeValue","option","isCustom","checked","repeat","customFilterTemplate","elements","when","ActivityHistoryFilters","changedProperties","filterId","filterGroupId","values","selectedValues","setCommonFilterValue","SetCommonFilterHandler","bootstrapSetCommonFilter","teardownSetCommonFilter","addCustomFilters","AddCustomFiltersHandler","bootstrapAddCustomFilter","teardownAddCustomFilter","setCustomFilterAllValues","SetCustomFilterAllValuesHandler","bootstrapSetCustomFilterAllValues","teardownSetCustomFilterAllValues","setCustomFilterGroupValue","SetCustomFilterGroupHandler","bootstrapSetCustomFilterGroup","teardownSetCustomFilterGroup","setCustomFilterValue","SetCustomFilterValueHandler","bootstrapSetCustomFilterValue","teardownSetCustomFilterValue","deleteDiagnosticFilterValue","DeleteDiagnosticFilterValueHandler","diagnosticToDelete","evolucions","relacions","diagnosticParent","DeleteDiagnosticFilterValueCommand","deleteFilterValueRequest","bootstrapDeleteDiagnosticFilterValue","teardownDeleteDiagnosticFilterValue","setDiagnosticFilterValues","SetDiagnosticFilterValuesHandler","SetDiagnosticFiltersValuesCommand","setFiltersValueRequest","bootstrapSetDiagnosticFilter","teardownSetDiagnosticFilter","subscribeDiagnosticFilters","ResetFiltersCommand","resetFilters","ResetFiltersHandler","bootstrapResetFilters","teardownResetFilters","addUpFilters","AddUpFiltersHandler","AddUpFiltersCommand","bootstrapAddUpFilter","teardownAddUpFilter","setUpFilterValues","SetUpFiltersHandler","bootstrapSetUpFilter","teardownSetUpFilter","bootstrapFilters","teardownFilters","GROUP_BASE_HEIGHT","GROUP_ITEM_HEIGHT","GROUP_SUBGROUP_HEADER_HEIGHT","estimateGroupHeight","directItems","subGroupItems","total","mt","_t","wt","gt","bt","yt","s","o","$t","rt","qt","Kt","D","_props","ActivityHistoryIsGroupingBusy","shouldShowRole","hasItemDivider","currentIndex","mergeHistoryItemsAndSubgroups","itemEntries","subGroupEntries","row","itemGroup","ref","ifDefined","visitHeaderTemplate","diagnosticHeaderTemplate","noGroupsTemplate","renderProfessionalValues","findServiceInGroup","showRole","service","memo","getDeps","opts","deps","isInitial","memoizedFunction","_a","_b","_c","depTime","newDeps","dep","resultTime","depEndTime","resultEndTime","resultFpsPercentage","pad","str","num","notUndefined","msg","approxEqual","debounce","targetWindow","ms","timeoutId","getRect","element","offsetWidth","offsetHeight","defaultKeyExtractor","defaultRangeExtractor","range","start","end","observeElementRect","instance","cb","rect","height","entries","run","box","addEventListenerOptions","supportsScrollend","observeElementOffset","fallback","createHandler","isScrolling","horizontal","isRtl","endHandler","registerScrollendEvent","measureElement","elementScroll","adjustments","behavior","toOffset","Virtualizer","_ro","get","node","opts2","sync","scrollElement","cached","measurements","furthestMeasurementsFound","furthestMeasurements","measurement","previousFurthestMeasurement","paddingStart","scrollMargin","getItemKey","lanes","laneAssignmentMode","itemSizeCache","min","laneLastIndex","cachedLane","lane","shouldCacheLane","prevIndex","prevInLane","furthestMeasurement","measuredSize","size","outerSize","scrollOffset","calculateRange","startIndex","endIndex","rangeExtractor","overscan","attributeName","indexStr","scrollIndex","bufferSize","minIndex","maxIndex","key2","prevNode","itemSize","indexes","virtualItems","k","len","findNearestBinarySearch","doc","align","maxOffset","now","initialAlign","offsetInfo","endByLane","targetOffset","STABLE_FRAMES","targetChanged","low","high","getCurrentValue","middle","currentValue","lastIndex","getOffset","endPerLane","pos","startPerLane","measureElementWithMargins","style","marginTop","marginBottom","VirtualScroller","viewport","onStateChange","el","isViewportVisible","ActivityHistoryTimeline","historyGroups","regex","unsafeHTML","selectedDate","targetDay","dayOf","attempt","vi","query","isAnyChipActive","ActiveFiltersHeader","renderErrorFeedback","isErrorOccurred","areCollectionsEmpty","isAllDataFailedToLoad","selectErrorMessages","ActivityHistoryFullDataError","combinedMessage","renderPartialErrorAlert","ActivityHistoryPartialDataError","titleMessage","errorMessages","clearActivityHistoryCollections","RefreshHistoryItemsHandler","HandleRefreshHistoryItems","bootstrapHandleRefreshHistoryItems","teardownHandleRefreshHistoryItems","removeActivityHistoryItem","RemoveHistoryItemHandler","bootstrapRemoveHistoryItem","teardownRemoveHistoryItem","setSearchString","SearchItemsHandler","SearchActivityHistoryItems","ActivityHistorySearchResults","ActivityHistorySearchBar","event","searchQuery","formatShowFilterTitle","normalizeDeletedFilterBooleanValue","normalizeEmptyFilterValue","formatEmptyFilterValue","MAX_VISIBLE_CHIPS","renderChip","renderCommonChip","renderDiagnosticChip","renderUpChip","renderFilterTitle","visibleCount","visibleChips","hiddenElements","hiddenChips","enabledValues","titleAddedToVisible","titleAddedToHidden","diagnosticItem","chip","selectedOptions","opt","filterOption","deletedFiltersOption","ActiveFiltersBadges","diagnosticCodi","upValue","bootstrapSearchItems","teardownSearchItems","updateActivityHistoryItem","UpdateHistoryItemHandler","bootstrapUpdateHistoryItem","teardownUpdateHistoryItem","bootstrapActivityHistoryItem","teardownActivityHistoryItem","pluginName","prepareGroupComponents","prepareItems","sub","INITIAL_SCROLLER_STATE","ScrollerController","estimateItemHeight","isToday","itemMatchesToday","itemHasAnyDiagnostic","isAllowedItem","collectionRule","groupMatchesToday","filterGroupItemsByPredicate","filterGroupByDiagnostics","it","isGroupNonEmpty","applyImporterFilters","todayOnly","selectedDiagnosticCodes","rulesByCollectionId","baseFiltered","todayActive","diagActive","flattenGroupItems","all","checkboxState","headerTemplate","searchTemplate","filtersTemplate","listTemplate","visitTemplate","representative","visit","visitHeaderContent","itemRow","subGroupTemplate","siblings","escapeHtml","div","ALLOWED_HTML_TAGS","strayLessThan","escapeUnknownTags","buildSelectionText","rawParts","htmlParts","plain","itemHtml","ActivityHistoryImporter","params","detail","selected","ids","additions","toRemove","raw","ctx","matchingIds","collect","rule","selectedSet","headerMaximizedTemplate","ActivityHistoryMain","PrimariaRegionHost","mainViewSubscription","viewId","CIP","IMPORTER_VIEW_ID","registerViews","unregisterViews","bootstrapFeatures","teardownFeatures","initialize","dispose"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,86,87,88,89,90,221,222,228,229]}