diff --git a/common/__generated__/graphql.ts b/common/__generated__/graphql.ts index 4dab38e6..a2b81a71 100644 --- a/common/__generated__/graphql.ts +++ b/common/__generated__/graphql.ts @@ -8660,7 +8660,7 @@ type StreamFieldFragment_IndicatorShowcaseBlock_Fragment = ( type StreamFieldFragment_LargeImageBlock_Fragment = ( { width?: string | null, id?: string | null, blockType: string, field: string, image?: ( - { title: string, altText: string, width: number, height: number, renditionUncropped?: ( + { title: string, altText: string, width: number, height: number, imageCredit: string, renditionUncropped?: ( { src: string } & { __typename?: 'ImageRendition' } ) | null } @@ -14557,7 +14557,7 @@ export type GetContentPageQuery = ( & { __typename?: 'IndicatorShowcaseBlock' } ) | ( { width?: string | null, id?: string | null, blockType: string, field: string, image?: ( - { title: string, altText: string, width: number, height: number, renditionUncropped?: ( + { title: string, altText: string, width: number, height: number, imageCredit: string, renditionUncropped?: ( { src: string } & { __typename?: 'ImageRendition' } ) | null } @@ -15883,7 +15883,7 @@ export type GetContentPageQuery = ( & { __typename?: 'IndicatorShowcaseBlock' } ) | ( { width?: string | null, id?: string | null, blockType: string, field: string, image?: ( - { title: string, altText: string, width: number, height: number, renditionUncropped?: ( + { title: string, altText: string, width: number, height: number, imageCredit: string, renditionUncropped?: ( { src: string } & { __typename?: 'ImageRendition' } ) | null } @@ -16729,7 +16729,7 @@ export type GetContentPageQuery = ( & { __typename?: 'IndicatorShowcaseBlock' } ) | ( { width?: string | null, id?: string | null, blockType: string, field: string, image?: ( - { title: string, altText: string, width: number, height: number, renditionUncropped?: ( + { title: string, altText: string, width: number, height: number, imageCredit: string, renditionUncropped?: ( { src: string } & { __typename?: 'ImageRendition' } ) | null } @@ -17584,7 +17584,7 @@ export type GetHomePageQuery = ( & { __typename?: 'IndicatorShowcaseBlock' } ) | ( { id?: string | null, width?: string | null, blockType: string, field: string, image?: ( - { title: string, altText: string, width: number, height: number, renditionUncropped?: ( + { title: string, altText: string, width: number, height: number, imageCredit: string, renditionUncropped?: ( { src: string } & { __typename?: 'ImageRendition' } ) | null } diff --git a/components/common/GlobalNav.tsx b/components/common/GlobalNav.tsx index d1399594..47e50590 100644 --- a/components/common/GlobalNav.tsx +++ b/components/common/GlobalNav.tsx @@ -32,7 +32,9 @@ import NavbarSearch from './NavbarSearch'; const getRootLink = (plan, locale, primaryLanguage) => { if (plan.parent && plan.parent.viewUrl) { - const shouldAppendLocale = locale !== primaryLanguage; + const shouldAppendLocale = + locale !== primaryLanguage && + !plan.parent.viewUrl.includes(`/${locale}/`); if (shouldAppendLocale) { return `${plan.parent.viewUrl}/${locale}/`; } diff --git a/components/common/StreamField.tsx b/components/common/StreamField.tsx index f1a8fb5e..5d139137 100644 --- a/components/common/StreamField.tsx +++ b/components/common/StreamField.tsx @@ -22,6 +22,8 @@ import IndicatorShowcaseBlock from 'components/contentblocks/IndicatorShowcaseBl import QuestionAnswerBlock from 'components/contentblocks/QuestionAnswerBlock'; import RelatedIndicatorsBlock from 'components/contentblocks/RelatedIndicatorsBlock'; import RelatedPlanListBlock from 'components/contentblocks/RelatedPlanListBlock'; +import { ImageCredit } from 'components/contentblocks/ContentPageHeaderBlock'; +import { useTranslations } from 'next-intl'; import { usePlan } from 'context/plan'; import { Col, ColProps, Container, Row } from 'reactstrap'; import { ColumnProps } from 'reactstrap/types/lib/Col'; @@ -124,6 +126,7 @@ function StreamFieldBlock(props: StreamFieldBlockProps) { const { __typename } = block; const plan = usePlan(); const theme = useTheme(); + const t = useTranslations(); switch (__typename) { case 'RichTextBlock': { @@ -255,6 +258,7 @@ function StreamFieldBlock(props: StreamFieldBlockProps) { * fit_to_column: image is limited to text block width * Image keeps it original ratio and doesn't crop */ + const getColSize = (breakpoint) => { if (block.width === 'maximum') return {}; switch (breakpoint) { @@ -275,16 +279,31 @@ function StreamFieldBlock(props: StreamFieldBlockProps) { xl={getColSize('xl')} lg={getColSize('lg')} md={getColSize('md')} + style={{ + position: 'relative', + }} > - {block.image?.altText} + > + {block.image?.altText} + {block.image?.imageCredit && ( + + {`${t('image-credit')}: ${block.image.imageCredit}`} + + )} + diff --git a/components/contentblocks/ContentPageHeaderBlock.js b/components/contentblocks/ContentPageHeaderBlock.js index 2cf3894f..af7168a2 100644 --- a/components/contentblocks/ContentPageHeaderBlock.js +++ b/components/contentblocks/ContentPageHeaderBlock.js @@ -47,7 +47,7 @@ const ContentHeader = styled.header` } `; -const ImageCredit = styled.span` +export const ImageCredit = styled.span` position: absolute; top: 0; right: 0; diff --git a/components/dashboard/ActionStatusExport.js b/components/dashboard/ActionStatusExport.js index f9a816a3..159ac086 100644 --- a/components/dashboard/ActionStatusExport.js +++ b/components/dashboard/ActionStatusExport.js @@ -1,5 +1,3 @@ -import { getActionTaskTermContext, getActionTermContext } from 'common/i18n'; -import { cleanActionStatus } from 'common/preprocess'; import { usePlan } from 'context/plan'; import { useTranslations } from 'next-intl'; import { @@ -9,193 +7,18 @@ import { DropdownItem, } from 'reactstrap'; -async function exportActions( - t, - actions, - actionStatuses, - plan, - fileFormat = 'excel' -) { - const Excel = (await import('exceljs')).default; - const fileSaver = (await import('file-saver')).default; - const workbook = new Excel.Workbook(); - const worksheet = workbook.addWorksheet( - t('actions', getActionTermContext(plan)) - ); - const planIds = new Set(actions.map((action) => action.plan.id)); - const multiplePlans = planIds.size > 1; - const columns = [ - { header: t('action-identifier'), key: 'id', width: 10 }, - { - header: t('action-name-title', getActionTermContext(plan)), - key: 'name', - width: 50, - }, - { header: t('status'), key: 'status', width: 20 }, - { - header: t('action-implementation-phase'), - key: 'implementationPhase', - width: 20, - }, - { header: t('action-last-updated'), key: 'lastUpdated', width: 15 }, - { - header: t('tasks-on-time', getActionTaskTermContext(plan)), - key: 'ontimeTasks', - width: 10, - }, - { - header: t('tasks-late', getActionTaskTermContext(plan)), - key: 'lateTasks', - width: 10, - }, - { - header: t('tasks-completed', getActionTaskTermContext(plan)), - key: 'completedTasks', - width: 10, - }, - { - header: t('action-tasks', getActionTaskTermContext(plan)), - key: 'tasks', - width: 10, - }, - { - header: t('responsible-organizations-primary'), - key: 'primaryResponsibleOrgs', - width: 20, - }, - { - header: t('responsible-organizations-collaborator'), - key: 'collaboratorResponsibleOrgs', - width: 20, - }, - { - header: t('responsible-organizations-other'), - key: 'otherResponsibleOrgs', - width: 20, - }, - ]; - if (multiplePlans) { - columns.unshift({ - header: t('plan'), - key: 'plan', - width: 20, - }); - } - // When assigning to worksheet.columns, some magic happens and manipulating worksheet.columns afterwards does not - // yield the desired results. So we prepare the columns array separately before assigning it to worksheet.columns. - worksheet.columns = columns; - actions.forEach((act) => { - const status = cleanActionStatus(act, actionStatuses); - // Remove any soft hyphens in action name (due to `hyphenated: true` when querying the name) as Excel renders - // visible hyphens instead. - const actionName = act.name?.replaceAll('­', ''); - let activePhaseName = act.implementationPhase?.name; - if (status != null) { - // FIXME: Duplicated logic from ActionPhase.js - const inactive = [ - 'cancelled', - 'merged', - 'postponed', - 'completed', - ].includes(status.identifier); - if (inactive) activePhaseName = status.name; - } - - const tasks = act.tasks; - let tasksCount = tasks.length; - // FIXME: Duplicated logic from ActionStatusTable.js - let ontimeTasks = 0; - let lateTasks = 0; - let completedTasks = 0; - const nowDate = new Date(); - - tasks.forEach((task) => { - const taskDue = new Date(task.dueAt); - switch (task.state) { - case 'NOT_STARTED': - case 'IN_PROGRESS': - if (taskDue < nowDate) lateTasks += 1; - else ontimeTasks += 1; - break; - case 'COMPLETED': - completedTasks += 1; - break; - default: - tasksCount -= 1; - } - }); - - const getOrgName = ({ organization }) => organization.name; - - const parties = act.responsibleParties; - const primaryResponsibleOrgs = parties - .filter((p) => p.role === 'PRIMARY') - .map(getOrgName); - const collaboratorResponsibleOrgs = parties - .filter((p) => p.role === 'COLLABORATOR') - .map(getOrgName); - const otherResponsibleOrgs = parties - .filter((p) => p.role === null) - .map(getOrgName); - - const row = [ - act.identifier, - actionName, - status?.name, - activePhaseName, - new Date(act.updatedAt), - ontimeTasks, - lateTasks, - completedTasks, - tasksCount, - primaryResponsibleOrgs.join(';'), - collaboratorResponsibleOrgs.join(';'), - otherResponsibleOrgs.join(';'), - ]; - if (multiplePlans) { - row.unshift(act.plan.name); - } - worksheet.addRow(row); - }); - - const today = new Date().toISOString().split('T')[0]; - switch (fileFormat) { - case 'excel': - const xls64 = await workbook.xlsx.writeBuffer({ base64: true }); - fileSaver.saveAs( - new Blob([xls64], { - type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', - }), - `${t('actions', getActionTermContext(plan))}-${today}.xlsx` - ); - break; - - case 'csv': - const csv64 = await workbook.csv.writeBuffer({ base64: true }); - fileSaver.saveAs( - new Blob([csv64], { type: 'text/csv' }), - `${t('actions', getActionTermContext(plan))}-${today}.csv` - ); - break; - - default: - throw new Error('Unknown file format'); - } -} - export default function ActionStatusExport({ actions }) { const t = useTranslations(); const plan = usePlan(); - const { actionStatuses } = plan; - const handleExport = async (format) => { - await exportActions(t, actions, actionStatuses, plan, format); - }; + const url = plan.actionReportExportViewUrl; + const csvExportUrl = `${url}?format=csv`; + const excelExportUrl = `${url}?format=xlsx`; return ( {t('export')} - handleExport('excel')}>Excel - handleExport('csv')}>CSV + Excel + CSV ); diff --git a/components/dashboard/dashboard.constants.tsx b/components/dashboard/dashboard.constants.tsx index 72a1aee5..2e83c27e 100644 --- a/components/dashboard/dashboard.constants.tsx +++ b/components/dashboard/dashboard.constants.tsx @@ -71,12 +71,6 @@ export const COLUMN_CONFIG: { [key in ColumnBlock]: Column } = { renderCell: (action) => action.identifier, }, - // TODO: Remove from the backend - ImpactColumnBlock: { - renderHeader: () => '', - renderCell: () => '', - }, - NameColumnBlock: { sortable: true, headerKey: 'name', diff --git a/fragments/action-list.fragment.ts b/fragments/action-list.fragment.ts index 5f4941c7..ad9fca66 100644 --- a/fragments/action-list.fragment.ts +++ b/fragments/action-list.fragment.ts @@ -106,9 +106,6 @@ export const ACTION_TABLE_COLUMN_FRAGMENT = gql` ... on OrganizationColumnBlock { columnLabel } - ... on ImpactColumnBlock { - columnLabel - } ... on FieldColumnBlock { columnLabel field diff --git a/fragments/stream-field.fragment.ts b/fragments/stream-field.fragment.ts index bfd1f58c..b0fdc429 100644 --- a/fragments/stream-field.fragment.ts +++ b/fragments/stream-field.fragment.ts @@ -172,6 +172,7 @@ export const STREAM_FIELD_FRAGMENT = gql` renditionUncropped: rendition(size: "1320x1320", crop: false) { src } + imageCredit } width } diff --git a/package.json b/package.json index 3fb0baa7..e1c23d49 100644 --- a/package.json +++ b/package.json @@ -27,9 +27,7 @@ "dotenv": "^16.0.0", "echarts": "^5.5.1", "escape-string-regexp": "^5.0.0", - "exceljs": "^4.3.0", "express-robots-txt": "^1.0.0", - "file-saver": "^2.0.5", "fontfaceobserver": "^2.1.0", "framer-motion": "^11.0.24", "html-react-parser": "^1.4.12", diff --git a/queries/get-plan.ts b/queries/get-plan.ts index 60a44e66..5f074d1d 100644 --- a/queries/get-plan.ts +++ b/queries/get-plan.ts @@ -28,6 +28,7 @@ const GET_PLAN_CONTEXT = gql` publishedAt kausalPathsInstanceUuid viewUrl(clientUrl: $clientUrl) + actionReportExportViewUrl primaryActionClassification { id identifier diff --git a/yarn.lock b/yarn.lock index 09da3984..861781be 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2347,35 +2347,6 @@ __metadata: languageName: node linkType: hard -"@fast-csv/format@npm:4.3.5": - version: 4.3.5 - resolution: "@fast-csv/format@npm:4.3.5" - dependencies: - "@types/node": ^14.0.1 - lodash.escaperegexp: ^4.1.2 - lodash.isboolean: ^3.0.3 - lodash.isequal: ^4.5.0 - lodash.isfunction: ^3.0.9 - lodash.isnil: ^4.0.0 - checksum: 36d5fb76c26179bd1718dffd49fc88f4ab62675464d7ec44c5f1de55b8c454ecdf3faf84fe291df934832233f531d24c810a71cc0c390c7c4df09685d614c65b - languageName: node - linkType: hard - -"@fast-csv/parse@npm:4.3.6": - version: 4.3.6 - resolution: "@fast-csv/parse@npm:4.3.6" - dependencies: - "@types/node": ^14.0.1 - lodash.escaperegexp: ^4.1.2 - lodash.groupby: ^4.6.0 - lodash.isfunction: ^3.0.9 - lodash.isnil: ^4.0.0 - lodash.isundefined: ^3.0.1 - lodash.uniq: ^4.5.0 - checksum: 15434d2bc7a71af63a4cc45352a58f6edd69d464233fd6f9a808a8efb9ae326832b4f78d1ddcf9fc3bbf166e9c1dce19671c4de40371a926d60cb7c5a8bad08a - languageName: node - linkType: hard - "@floating-ui/core@npm:^1.0.0": version: 1.6.0 resolution: "@floating-ui/core@npm:1.6.0" @@ -8708,13 +8679,6 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^14.0.1": - version: 14.18.63 - resolution: "@types/node@npm:14.18.63" - checksum: be909061a54931778c71c49dc562586c32f909c4b6197e3d71e6dac726d8bd9fccb9f599c0df99f52742b68153712b5097c0f00cac4e279fa894b0ea6719a8fd - languageName: node - linkType: hard - "@types/node@npm:^17.0.31": version: 17.0.45 resolution: "@types/node@npm:17.0.45" @@ -10117,57 +10081,6 @@ __metadata: languageName: node linkType: hard -"archiver-utils@npm:^2.1.0": - version: 2.1.0 - resolution: "archiver-utils@npm:2.1.0" - dependencies: - glob: ^7.1.4 - graceful-fs: ^4.2.0 - lazystream: ^1.0.0 - lodash.defaults: ^4.2.0 - lodash.difference: ^4.5.0 - lodash.flatten: ^4.4.0 - lodash.isplainobject: ^4.0.6 - lodash.union: ^4.6.0 - normalize-path: ^3.0.0 - readable-stream: ^2.0.0 - checksum: 5665f40bde87ee82cb638177bdccca8cc6e55edea1b94338f7e6b56a1d9367b0d9a39e42b47866eaf84b8c67669a7d250900a226207ecc30fa163b52aae859a5 - languageName: node - linkType: hard - -"archiver-utils@npm:^3.0.4": - version: 3.0.4 - resolution: "archiver-utils@npm:3.0.4" - dependencies: - glob: ^7.2.3 - graceful-fs: ^4.2.0 - lazystream: ^1.0.0 - lodash.defaults: ^4.2.0 - lodash.difference: ^4.5.0 - lodash.flatten: ^4.4.0 - lodash.isplainobject: ^4.0.6 - lodash.union: ^4.6.0 - normalize-path: ^3.0.0 - readable-stream: ^3.6.0 - checksum: 5c6568f1185fb6c4b85282ad3281a5a024761bf27e525de1ec54255d15ca98e19532e7b5403930273911a5c8c961aa0c1e9148d6c2810784fa6bd8a97c0021a7 - languageName: node - linkType: hard - -"archiver@npm:^5.0.0": - version: 5.3.2 - resolution: "archiver@npm:5.3.2" - dependencies: - archiver-utils: ^2.1.0 - async: ^3.2.4 - buffer-crc32: ^0.2.1 - readable-stream: ^3.6.0 - readdir-glob: ^1.1.2 - tar-stream: ^2.2.0 - zip-stream: ^4.1.0 - checksum: 7d3b9b9b51cf54d88c89fbca9b0847c120bfcf9776c7025c52dd0b62f6603dc63dc0f3f1a09582f936f67e3906b46d58954cc762a255be45e8d3e14e3cb0b0b1 - languageName: node - linkType: hard - "arg@npm:^4.1.0": version: 4.1.3 resolution: "arg@npm:4.1.3" @@ -10482,7 +10395,7 @@ __metadata: languageName: node linkType: hard -"async@npm:^3.2.3, async@npm:^3.2.4": +"async@npm:^3.2.3": version: 3.2.5 resolution: "async@npm:3.2.5" checksum: 5ec77f1312301dee02d62140a6b1f7ee0edd2a0f983b6fd2b0849b969f245225b990b47b8243e7b9ad16451a53e7f68e753700385b706198ced888beedba3af4 @@ -10902,7 +10815,7 @@ __metadata: languageName: node linkType: hard -"big-integer@npm:^1.6.17, big-integer@npm:^1.6.44": +"big-integer@npm:^1.6.44": version: 1.6.52 resolution: "big-integer@npm:1.6.52" checksum: 6e86885787a20fed96521958ae9086960e4e4b5e74d04f3ef7513d4d0ad631a9f3bde2730fc8aaa4b00419fc865f6ec573e5320234531ef37505da7da192c40b @@ -10930,16 +10843,6 @@ __metadata: languageName: node linkType: hard -"binary@npm:~0.3.0": - version: 0.3.0 - resolution: "binary@npm:0.3.0" - dependencies: - buffers: ~0.1.1 - chainsaw: ~0.1.0 - checksum: b4699fda9e2c2981e74a46b0115cf0d472eda9b68c0e9d229ef494e92f29ce81acf0a834415094cffcc340dfee7c4ef8ce5d048c65c18067a7ed850323f777af - languageName: node - linkType: hard - "bit-twiddle@npm:^1.0.0, bit-twiddle@npm:^1.0.2": version: 1.0.2 resolution: "bit-twiddle@npm:1.0.2" @@ -10975,13 +10878,6 @@ __metadata: languageName: node linkType: hard -"bluebird@npm:~3.4.1": - version: 3.4.7 - resolution: "bluebird@npm:3.4.7" - checksum: bffa9dee7d3a41ab15c4f3f24687b49959b4e64e55c058a062176feb8ccefc2163414fb4e1a0f3053bf187600936509660c3ebd168fd9f0e48c7eba23b019466 - languageName: node - linkType: hard - "bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.11.9": version: 4.12.0 resolution: "bn.js@npm:4.12.0" @@ -11216,7 +11112,7 @@ __metadata: languageName: node linkType: hard -"buffer-crc32@npm:^0.2.1, buffer-crc32@npm:^0.2.13, buffer-crc32@npm:~0.2.3": +"buffer-crc32@npm:~0.2.3": version: 0.2.13 resolution: "buffer-crc32@npm:0.2.13" checksum: 06252347ae6daca3453b94e4b2f1d3754a3b146a111d81c68924c22d91889a40623264e95e67955b1cb4a68cbedf317abeabb5140a9766ed248973096db5ce1c @@ -11230,13 +11126,6 @@ __metadata: languageName: node linkType: hard -"buffer-indexof-polyfill@npm:~1.0.0": - version: 1.0.2 - resolution: "buffer-indexof-polyfill@npm:1.0.2" - checksum: fbfb2d69c6bb2df235683126f9dc140150c08ac3630da149913a9971947b667df816a913b6993bc48f4d611999cb99a1589914d34c02dccd2234afda5cb75bbc - languageName: node - linkType: hard - "buffer-xor@npm:^1.0.3": version: 1.0.3 resolution: "buffer-xor@npm:1.0.3" @@ -11264,13 +11153,6 @@ __metadata: languageName: node linkType: hard -"buffers@npm:~0.1.1": - version: 0.1.1 - resolution: "buffers@npm:0.1.1" - checksum: ad6f8e483efab39cefd92bdc04edbff6805e4211b002f4d1cfb70c6c472a61cc89fb18c37bcdfdd4ee416ca096e9ff606286698a7d41a18b539bac12fd76d4d5 - languageName: node - linkType: hard - "builtin-status-codes@npm:^3.0.0": version: 3.0.0 resolution: "builtin-status-codes@npm:3.0.0" @@ -11471,15 +11353,6 @@ __metadata: languageName: node linkType: hard -"chainsaw@npm:~0.1.0": - version: 0.1.0 - resolution: "chainsaw@npm:0.1.0" - dependencies: - traverse: ">=0.3.0 <0.4" - checksum: 22a96b9fb0cd9fb20813607c0869e61817d1acc81b5d455cc6456b5e460ea1dd52630e0f76b291cf8294bfb6c1fc42e299afb52104af9096242699d6d3aa6d3e - languageName: node - linkType: hard - "chalk@npm:3.0.0, chalk@npm:^3.0.0": version: 3.0.0 resolution: "chalk@npm:3.0.0" @@ -12196,18 +12069,6 @@ __metadata: languageName: node linkType: hard -"compress-commons@npm:^4.1.2": - version: 4.1.2 - resolution: "compress-commons@npm:4.1.2" - dependencies: - buffer-crc32: ^0.2.13 - crc32-stream: ^4.0.2 - normalize-path: ^3.0.0 - readable-stream: ^3.6.0 - checksum: b50c4b5d6b8917ea164eef81d414b1824f27e02427f9266926c80aad55f9e15f81f74c274770773c2b732c22d1081b81dedce4f133271a466151f7f36b8e9dc9 - languageName: node - linkType: hard - "compressible@npm:~2.0.16": version: 2.0.18 resolution: "compressible@npm:2.0.18" @@ -12461,25 +12322,6 @@ __metadata: languageName: node linkType: hard -"crc-32@npm:^1.2.0": - version: 1.2.2 - resolution: "crc-32@npm:1.2.2" - bin: - crc32: bin/crc32.njs - checksum: ad2d0ad0cbd465b75dcaeeff0600f8195b686816ab5f3ba4c6e052a07f728c3e70df2e3ca9fd3d4484dc4ba70586e161ca5a2334ec8bf5a41bf022a6103ff243 - languageName: node - linkType: hard - -"crc32-stream@npm:^4.0.2": - version: 4.0.3 - resolution: "crc32-stream@npm:4.0.3" - dependencies: - crc-32: ^1.2.0 - readable-stream: ^3.4.0 - checksum: d44d0ec6f04d8a1bed899ac3e4fbb82111ed567ea6d506be39147362af45c747887fce1032f4beca1646b4824e5a9614cd3332bfa94bbc5577ca5445e7f75ddd - languageName: node - linkType: hard - "create-ecdh@npm:^4.0.0": version: 4.0.4 resolution: "create-ecdh@npm:4.0.4" @@ -12989,7 +12831,7 @@ __metadata: languageName: node linkType: hard -"dayjs@npm:^1.11.1, dayjs@npm:^1.8.34": +"dayjs@npm:^1.11.1": version: 1.11.10 resolution: "dayjs@npm:1.11.10" checksum: a6b5a3813b8884f5cd557e2e6b7fa569f4c5d0c97aca9558e38534af4f2d60daafd3ff8c2000fed3435cfcec9e805bcebd99f90130c6d1c5ef524084ced588c4 @@ -13558,15 +13400,6 @@ __metadata: languageName: node linkType: hard -"duplexer2@npm:~0.1.4": - version: 0.1.4 - resolution: "duplexer2@npm:0.1.4" - dependencies: - readable-stream: ^2.0.2 - checksum: 744961f03c7f54313f90555ac20284a3fb7bf22fdff6538f041a86c22499560eb6eac9d30ab5768054137cb40e6b18b40f621094e0261d7d8c35a37b7a5ad241 - languageName: node - linkType: hard - "duplexer@npm:^0.1.2": version: 0.1.2 resolution: "duplexer@npm:0.1.2" @@ -14513,23 +14346,6 @@ __metadata: languageName: node linkType: hard -"exceljs@npm:^4.3.0": - version: 4.4.0 - resolution: "exceljs@npm:4.4.0" - dependencies: - archiver: ^5.0.0 - dayjs: ^1.8.34 - fast-csv: ^4.3.1 - jszip: ^3.10.1 - readable-stream: ^3.6.0 - saxes: ^5.0.1 - tmp: ^0.2.0 - unzipper: ^0.10.11 - uuid: ^8.3.0 - checksum: e2ab1b4667988c213edf47ab67fc83be64dc4de5b1de64b41c9d564ae00eb7ee774fd00a907520a93757dd90fd6b601583f18ded28dd7d833001e0ed188792b7 - languageName: node - linkType: hard - "execa@npm:7.2.0": version: 7.2.0 resolution: "execa@npm:7.2.0" @@ -14767,16 +14583,6 @@ __metadata: languageName: node linkType: hard -"fast-csv@npm:^4.3.1": - version: 4.3.6 - resolution: "fast-csv@npm:4.3.6" - dependencies: - "@fast-csv/format": 4.3.5 - "@fast-csv/parse": 4.3.6 - checksum: 77ae68c08b368a19f2b6e933160d0c5d4934513ef903577c44c84ea08befe1a6638a9480238dfcd55f14c7ddcafdb772c9408dd9d145eca62a147c503ff493a9 - languageName: node - linkType: hard - "fast-decode-uri-component@npm:^1.0.1": version: 1.0.1 resolution: "fast-decode-uri-component@npm:1.0.1" @@ -14980,13 +14786,6 @@ __metadata: languageName: node linkType: hard -"file-saver@npm:^2.0.5": - version: 2.0.5 - resolution: "file-saver@npm:2.0.5" - checksum: c62d96e5cebc58b4bdf3ae8a60d5cf9607ad82f75f798c33a4ee63435ac2203002584d5256a2a780eda7feb5e19dc3b6351c2212e58b3f529e63d265a7cc79f7 - languageName: node - linkType: hard - "file-system-cache@npm:2.3.0": version: 2.3.0 resolution: "file-system-cache@npm:2.3.0" @@ -15418,18 +15217,6 @@ __metadata: languageName: node linkType: hard -"fstream@npm:^1.0.12": - version: 1.0.12 - resolution: "fstream@npm:1.0.12" - dependencies: - graceful-fs: ^4.1.2 - inherits: ~2.0.0 - mkdirp: ">=0.5 0" - rimraf: 2 - checksum: e6998651aeb85fd0f0a8a68cec4d05a3ada685ecc4e3f56e0d063d0564a4fc39ad11a856f9020f926daf869fc67f7a90e891def5d48e4cadab875dc313094536 - languageName: node - linkType: hard - "function-bind@npm:^1.1.1, function-bind@npm:^1.1.2": version: 1.1.2 resolution: "function-bind@npm:1.1.2" @@ -15774,7 +15561,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.0.0, glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.2.3": +"glob@npm:^7.0.0, glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4": version: 7.2.3 resolution: "glob@npm:7.2.3" dependencies: @@ -16040,7 +15827,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.2, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": +"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 @@ -16805,7 +16592,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.0, inherits@npm:~2.0.1, inherits@npm:~2.0.3, inherits@npm:~2.0.4": +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.1, inherits@npm:~2.0.3, inherits@npm:~2.0.4": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 @@ -18549,18 +18336,6 @@ __metadata: languageName: node linkType: hard -"jszip@npm:^3.10.1": - version: 3.10.1 - resolution: "jszip@npm:3.10.1" - dependencies: - lie: ~3.3.0 - pako: ~1.0.2 - readable-stream: ~2.3.6 - setimmediate: ^1.0.5 - checksum: abc77bfbe33e691d4d1ac9c74c8851b5761fba6a6986630864f98d876f3fcc2d36817dfc183779f32c00157b5d53a016796677298272a714ae096dfe6b1c8b60 - languageName: node - linkType: hard - "kausal-watch-ui@workspace:.": version: 0.0.0-use.local resolution: "kausal-watch-ui@workspace:." @@ -18625,9 +18400,7 @@ __metadata: eslint: 8.56.0 eslint-config-next: 14.0.4 eslint-plugin-storybook: ^0.8.0 - exceljs: ^4.3.0 express-robots-txt: ^1.0.0 - file-saver: ^2.0.5 fontfaceobserver: ^2.1.0 framer-motion: ^11.0.24 html-react-parser: ^1.4.12 @@ -18757,15 +18530,6 @@ __metadata: languageName: node linkType: hard -"lazystream@npm:^1.0.0": - version: 1.0.1 - resolution: "lazystream@npm:1.0.1" - dependencies: - readable-stream: ^2.0.5 - checksum: 822c54c6b87701a6491c70d4fabc4cafcf0f87d6b656af168ee7bb3c45de9128a801cb612e6eeeefc64d298a7524a698dd49b13b0121ae50c2ae305f0dcc5310 - languageName: node - linkType: hard - "leven@npm:^3.1.0": version: 3.1.0 resolution: "leven@npm:3.1.0" @@ -18792,15 +18556,6 @@ __metadata: languageName: node linkType: hard -"lie@npm:~3.3.0": - version: 3.3.0 - resolution: "lie@npm:3.3.0" - dependencies: - immediate: ~3.0.5 - checksum: 33102302cf19766f97919a6a98d481e01393288b17a6aa1f030a3542031df42736edde8dab29ffdbf90bebeffc48c761eb1d064dc77592ca3ba3556f9fe6d2a8 - languageName: node - linkType: hard - "lilconfig@npm:2.1.0": version: 2.1.0 resolution: "lilconfig@npm:2.1.0" @@ -18835,13 +18590,6 @@ __metadata: languageName: node linkType: hard -"listenercount@npm:~1.0.1": - version: 1.0.1 - resolution: "listenercount@npm:1.0.1" - checksum: 0f1c9077cdaf2ebc16473c7d72eb7de6d983898ca42500f03da63c3914b6b312dd5f7a90d2657691ea25adf3fe0ac5a43226e8b2c673fd73415ed038041f4757 - languageName: node - linkType: hard - "listr-silent-renderer@npm:^1.1.1": version: 1.1.1 resolution: "listr-silent-renderer@npm:1.1.1" @@ -19034,34 +18782,6 @@ __metadata: languageName: node linkType: hard -"lodash.defaults@npm:^4.2.0": - version: 4.2.0 - resolution: "lodash.defaults@npm:4.2.0" - checksum: 84923258235592c8886e29de5491946ff8c2ae5c82a7ac5cddd2e3cb697e6fbdfbbb6efcca015795c86eec2bb953a5a2ee4016e3735a3f02720428a40efbb8f1 - languageName: node - linkType: hard - -"lodash.difference@npm:^4.5.0": - version: 4.5.0 - resolution: "lodash.difference@npm:4.5.0" - checksum: ecee276aa578f300e79350805a14a51be8d1f12b3c1389a19996d8ab516f814211a5f65c68331571ecdad96522b863ccc484b55504ce8c9947212a29f8857d5a - languageName: node - linkType: hard - -"lodash.escaperegexp@npm:^4.1.2": - version: 4.1.2 - resolution: "lodash.escaperegexp@npm:4.1.2" - checksum: 6d99452b1cfd6073175a9b741a9b09ece159eac463f86f02ea3bee2e2092923fce812c8d2bf446309cc52d1d61bf9af51c8118b0d7421388e6cead7bd3798f0f - languageName: node - linkType: hard - -"lodash.flatten@npm:^4.4.0": - version: 4.4.0 - resolution: "lodash.flatten@npm:4.4.0" - checksum: 0ac34a393d4b795d4b7421153d27c13ae67e08786c9cbb60ff5b732210d46f833598eee3fb3844bb10070e8488efe390ea53bb567377e0cb47e9e630bf0811cb - languageName: node - linkType: hard - "lodash.get@npm:^4": version: 4.4.2 resolution: "lodash.get@npm:4.4.2" @@ -19069,13 +18789,6 @@ __metadata: languageName: node linkType: hard -"lodash.groupby@npm:^4.6.0": - version: 4.6.0 - resolution: "lodash.groupby@npm:4.6.0" - checksum: e2d4d13d12790a1cacab3f5f120b7c072a792224e83b2f403218866d18efde76024b2579996dfebb230a61ce06469332e16639103669a35a605287e19ced6b9b - languageName: node - linkType: hard - "lodash.identity@npm:3.0.0": version: 3.0.0 resolution: "lodash.identity@npm:3.0.0" @@ -19083,34 +18796,6 @@ __metadata: languageName: node linkType: hard -"lodash.isboolean@npm:^3.0.3": - version: 3.0.3 - resolution: "lodash.isboolean@npm:3.0.3" - checksum: b70068b4a8b8837912b54052557b21fc4774174e3512ed3c5b94621e5aff5eb6c68089d0a386b7e801d679cd105d2e35417978a5e99071750aa2ed90bffd0250 - languageName: node - linkType: hard - -"lodash.isequal@npm:^4.5.0": - version: 4.5.0 - resolution: "lodash.isequal@npm:4.5.0" - checksum: da27515dc5230eb1140ba65ff8de3613649620e8656b19a6270afe4866b7bd461d9ba2ac8a48dcc57f7adac4ee80e1de9f965d89d4d81a0ad52bb3eec2609644 - languageName: node - linkType: hard - -"lodash.isfunction@npm:^3.0.9": - version: 3.0.9 - resolution: "lodash.isfunction@npm:3.0.9" - checksum: 99e54c34b1e8a9ba75c034deb39cedbd2aca7af685815e67a2a8ec4f73ec9748cda6ebee5a07d7de4b938e90d421fd280e9c385cc190f903ac217ac8aff30314 - languageName: node - linkType: hard - -"lodash.isnil@npm:^4.0.0": - version: 4.0.0 - resolution: "lodash.isnil@npm:4.0.0" - checksum: ebf8df69879badd6ad99c4f64c54c470248df5cf92b208ca730861b1d8ac058da7b632ac811d18b0929d93cbac8d8fc866e781ee816b0142c56952e85edc682f - languageName: node - linkType: hard - "lodash.isplainobject@npm:^4.0.6": version: 4.0.6 resolution: "lodash.isplainobject@npm:4.0.6" @@ -19118,13 +18803,6 @@ __metadata: languageName: node linkType: hard -"lodash.isundefined@npm:^3.0.1": - version: 3.0.1 - resolution: "lodash.isundefined@npm:3.0.1" - checksum: 52b4d99a47bd41daa4e2860200258f56b1f2c99263c11a5f607fbbd91d6447fe674bdafc172735d099908a09136d4a0f98cf79715e38ca4b490fdda7162be289 - languageName: node - linkType: hard - "lodash.merge@npm:^4.6.1, lodash.merge@npm:^4.6.2": version: 4.6.2 resolution: "lodash.merge@npm:4.6.2" @@ -19153,20 +18831,6 @@ __metadata: languageName: node linkType: hard -"lodash.union@npm:^4.6.0": - version: 4.6.0 - resolution: "lodash.union@npm:4.6.0" - checksum: 1514dc6508b2614ec071a6470f36eb7a70f69bf1abb6d55bdfdc21069635a4517783654b28504c0f025059a7598d37529766888e6d5902b8ab28b712228f7b2a - languageName: node - linkType: hard - -"lodash.uniq@npm:^4.5.0": - version: 4.5.0 - resolution: "lodash.uniq@npm:4.5.0" - checksum: a4779b57a8d0f3c441af13d9afe7ecff22dd1b8ce1129849f71d9bbc8e8ee4e46dfb4b7c28f7ad3d67481edd6e51126e4e2a6ee276e25906d10f7140187c392d - languageName: node - linkType: hard - "lodash.xorby@npm:^4.7.0": version: 4.7.0 resolution: "lodash.xorby@npm:4.7.0" @@ -19733,7 +19397,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^5.0.0, minimatch@npm:^5.0.1, minimatch@npm:^5.1.0": +"minimatch@npm:^5.0.0, minimatch@npm:^5.0.1": version: 5.1.6 resolution: "minimatch@npm:5.1.6" dependencies: @@ -19858,7 +19522,7 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:>=0.5 0, mkdirp@npm:^0.5.4": +"mkdirp@npm:^0.5.4": version: 0.5.6 resolution: "mkdirp@npm:0.5.6" dependencies: @@ -20806,7 +20470,7 @@ __metadata: languageName: node linkType: hard -"pako@npm:~1.0.2, pako@npm:~1.0.5": +"pako@npm:~1.0.5": version: 1.0.11 resolution: "pako@npm:1.0.11" checksum: 1be2bfa1f807608c7538afa15d6f25baa523c30ec870a3228a89579e474a4d992f4293859524e46d5d87fd30fa17c5edf34dbef0671251d9749820b488660b16 @@ -22547,7 +22211,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.2, readable-stream@npm:^2.0.5, readable-stream@npm:^2.2.2, readable-stream@npm:^2.3.5, readable-stream@npm:~2.3.6": +"readable-stream@npm:^2.0.0, readable-stream@npm:^2.2.2, readable-stream@npm:^2.3.5, readable-stream@npm:~2.3.6": version: 2.3.8 resolution: "readable-stream@npm:2.3.8" dependencies: @@ -22586,15 +22250,6 @@ __metadata: languageName: node linkType: hard -"readdir-glob@npm:^1.1.2": - version: 1.1.3 - resolution: "readdir-glob@npm:1.1.3" - dependencies: - minimatch: ^5.1.0 - checksum: 1dc0f7440ff5d9378b593abe9d42f34ebaf387516615e98ab410cf3a68f840abbf9ff1032d15e0a0dbffa78f9e2c46d4fafdbaac1ca435af2efe3264e3f21874 - languageName: node - linkType: hard - "readdirp@npm:~3.6.0": version: 3.6.0 resolution: "readdirp@npm:3.6.0" @@ -23170,7 +22825,7 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:2, rimraf@npm:^2.6.1": +"rimraf@npm:^2.6.1": version: 2.7.1 resolution: "rimraf@npm:2.7.1" dependencies: @@ -23587,7 +23242,7 @@ __metadata: languageName: node linkType: hard -"setimmediate@npm:^1.0.4, setimmediate@npm:^1.0.5, setimmediate@npm:~1.0.4": +"setimmediate@npm:^1.0.4, setimmediate@npm:^1.0.5": version: 1.0.5 resolution: "setimmediate@npm:1.0.5" checksum: c9a6f2c5b51a2dabdc0247db9c46460152ffc62ee139f3157440bd48e7c59425093f42719ac1d7931f054f153e2d26cf37dfeb8da17a794a58198a2705e527fd @@ -24734,7 +24389,7 @@ __metadata: languageName: node linkType: hard -"tar-stream@npm:^2.1.4, tar-stream@npm:^2.2.0": +"tar-stream@npm:^2.1.4": version: 2.2.0 resolution: "tar-stream@npm:2.2.0" dependencies: @@ -24970,15 +24625,6 @@ __metadata: languageName: node linkType: hard -"tmp@npm:^0.2.0": - version: 0.2.1 - resolution: "tmp@npm:0.2.1" - dependencies: - rimraf: ^3.0.0 - checksum: 8b1214654182575124498c87ca986ac53dc76ff36e8f0e0b67139a8d221eaecfdec108c0e6ec54d76f49f1f72ab9325500b246f562b926f85bcdfca8bf35df9e - languageName: node - linkType: hard - "tmpl@npm:1.0.5": version: 1.0.5 resolution: "tmpl@npm:1.0.5" @@ -25096,13 +24742,6 @@ __metadata: languageName: node linkType: hard -"traverse@npm:>=0.3.0 <0.4": - version: 0.3.9 - resolution: "traverse@npm:0.3.9" - checksum: 982982e4e249e9bbf063732a41fe5595939892758524bbef5d547c67cdf371b13af72b5434c6a61d88d4bb4351d6dabc6e22d832e0d16bc1bc684ef97a1cc59e - languageName: node - linkType: hard - "ts-api-utils@npm:^1.0.1": version: 1.0.3 resolution: "ts-api-utils@npm:1.0.3" @@ -25726,24 +25365,6 @@ __metadata: languageName: node linkType: hard -"unzipper@npm:^0.10.11": - version: 0.10.14 - resolution: "unzipper@npm:0.10.14" - dependencies: - big-integer: ^1.6.17 - binary: ~0.3.0 - bluebird: ~3.4.1 - buffer-indexof-polyfill: ~1.0.0 - duplexer2: ~0.1.4 - fstream: ^1.0.12 - graceful-fs: ^4.2.2 - listenercount: ~1.0.1 - readable-stream: ~2.3.6 - setimmediate: ~1.0.4 - checksum: b46ae9a72e4b4c224be6a8f46447dd7cb3761a59450827e869747c4564a8f555f877fc19c7e3b5d146127a7dd3e2ffea186116682f6646e64479f99dd23565bc - languageName: node - linkType: hard - "update-browserslist-db@npm:^1.0.13": version: 1.0.13 resolution: "update-browserslist-db@npm:1.0.13" @@ -25959,15 +25580,6 @@ __metadata: languageName: node linkType: hard -"uuid@npm:^8.3.0": - version: 8.3.2 - resolution: "uuid@npm:8.3.2" - bin: - uuid: dist/bin/uuid - checksum: 5575a8a75c13120e2f10e6ddc801b2c7ed7d8f3c8ac22c7ed0c7b2ba6383ec0abda88c905085d630e251719e0777045ae3236f04c812184b7c765f63a70e58df - languageName: node - linkType: hard - "uuid@npm:^9.0.0": version: 9.0.1 resolution: "uuid@npm:9.0.1" @@ -26796,23 +26408,3 @@ __metadata: checksum: b7289084bc1fc74a559b7259faa23d3214b14b538a8843d2b001a35e27147833f4107590b1b44bf5bc7f6dfe6f488660d3a3725f268e09b3925b3476153b7821 languageName: node linkType: hard - -"zip-stream@npm:^4.1.0": - version: 4.1.1 - resolution: "zip-stream@npm:4.1.1" - dependencies: - archiver-utils: ^3.0.4 - compress-commons: ^4.1.2 - readable-stream: ^3.6.0 - checksum: 33bd5ee7017656c2ad728b5d4ba510e15bd65ce1ec180c5bbdc7a5f063256353ec482e6a2bc74de7515219d8494147924b9aae16e63fdaaf37cdf7d1ee8df125 - languageName: node - linkType: hard - -"zrender@npm:5.6.0": - version: 5.6.0 - resolution: "zrender@npm:5.6.0" - dependencies: - tslib: 2.3.0 - checksum: 58875a8ed8b813c739f6b6e727eb5eead39b66278143ff231cdd270349a5743af034f7f20567c7895eecb1cadbdae499e17708d96f1faae958ad3acdb3d46687 - languageName: node - linkType: hard