diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index cb6ec6d84..996023984 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -51,6 +51,8 @@ jobs: - name: Install Node.js dependencies run: "npm ci" - name: Build admin CMS + env: + FIPGUIDE_BRANCH: ${{ github.ref_name }} run: "npm run build:admin" - name: Cache Hugo Resources uses: actions/cache@v4 @@ -63,7 +65,6 @@ jobs: env: HUGO_CACHEDIR: ${{ runner.temp }}/hugo_cache HUGO_ENVIRONMENT: production - FIPGUIDE_BRANCH: ${{ github.ref_name }} TZ: Europe/Berlin run: | hugo \ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 93a526529..738ee39c9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -26,7 +26,6 @@ repos: exclude: glob: - "**/validity.yaml" - - "layouts/admin/section.cmsconfig.yml" - id: debug-statements - id: destroyed-symlinks - id: end-of-file-fixer diff --git a/assets/admin/fields.js b/assets/admin/fields.js index 46f8cfdba..514bf85a0 100644 --- a/assets/admin/fields.js +++ b/assets/admin/fields.js @@ -8,17 +8,15 @@ function FipValiditySelectControl(props) { var groups = props.entry ? props.entry.getIn(["data", "groups"]) : null; groups = groups && typeof groups.toJS === "function" ? groups.toJS() : []; var groupType = props.field ? props.field.get("group_type") : null; - if (groupType) { - groups = groups.filter(function (group) { - return !group.type || group.type === groupType; - }); - } + var options = groups .filter(function (group) { - return !!group.name; + return ( + !!group.id && (!groupType || !group.type || group.type === groupType) + ); }) .map(function (group) { - return { label: group.name, value: group.name }; + return { label: group.id, value: group.id }; }); return h(SelectControl, { diff --git a/assets/admin/shortcodes.js b/assets/admin/shortcodes.js index 22addf953..2dfdb4c9e 100644 --- a/assets/admin/shortcodes.js +++ b/assets/admin/shortcodes.js @@ -157,6 +157,69 @@ function makeToBlock(name, cfg) { }; } +// Matches `![prefix[linkText](linkHref)suffix](src "title")`, where the +// nested `[linkText](linkHref)` link and the quoted title are both optional. +var imagePattern = + /!\[([^[\]]*)(?:\[([^\]]*)\]\(([^)]*)\))?([^\]]*)\]\(([^) "]+)(?: "([^"]*)")?\)/; + +var imageFields = [ + { + name: "src", + label: "Source", + widget: "image", + param: { required: true }, + }, + { + name: "alt", + label: "Alt Text / Caption", + widget: "markdown", + required: false, + minimal: true, + hint: "Describes the image for accessibility and is also shown as a visible caption below the image.", + editor_components: ["icon", "dialog-trigger", "footnote-reference"], + param: {}, + }, + { + name: "title", + label: "Title", + widget: "string", + required: false, + hint: "Shown as a tooltip when hovering over the image.", + param: {}, + }, +]; + +CMS.registerEditorComponent({ + id: "image2", + label: "Image", + icon: "image", + fields: imageFields, + pattern: imagePattern, + fromBlock: function (match) { + var prefix = match[1] || ""; + var linkText = match[2]; + var linkHref = match[3]; + var suffix = match[4] || ""; + var alt = + linkText !== undefined + ? prefix + "[" + linkText + "](" + linkHref + ")" + suffix + : prefix + suffix; + return { + alt: alt, + src: String(match[5] || ""), + title: String(match[6] || ""), + }; + }, + toBlock: function (data) { + var alt = data.alt || ""; + var title = data.title ? ' "' + data.title + '"' : ""; + return "![" + alt + "](" + (data.src || "") + title + ")"; + }, + toPreview: function () { + return ""; + }, +}); + var highlightFields = [ { name: "type", @@ -167,12 +230,21 @@ var highlightFields = [ { label: "Tip", value: "tip" }, { label: "Inofficial", value: "inofficial" }, ], + param: { positional: true, required: true }, }, { name: "body", label: "Content", widget: "markdown", - editor_components: ["button", "float-image", "icon", "image"], + editor_components: [ + "button", + "float-image", + "icon", + "image2", + "table", + "dialog-trigger", + "footnote-reference", + ], }, ]; @@ -224,12 +296,21 @@ var confusionFields = [ search_fields: ["title"], value_field: "country", display_fields: ["title"], + param: { positional: true, required: true }, }, { name: "body", label: "Content", widget: "markdown", - editor_components: ["button", "float-image", "icon", "image"], + editor_components: [ + "button", + "float-image", + "icon", + "image2", + "table", + "dialog-trigger", + "footnote-reference", + ], }, ]; @@ -281,7 +362,10 @@ var expanderFields = [ "float-image", "highlight-raw", "icon", - "image", + "image2", + "table", + "dialog-trigger", + "footnote-reference", ], }, ]; @@ -475,8 +559,11 @@ var trainCategoryFields = [ "float-image", "highlight-raw", "icon", - "image", + "image2", + "table", + "dialog-trigger", "confusion", + "footnote-reference", ], }, ]; @@ -533,6 +620,7 @@ var bookingFields = [ label: "Booking Platform Link", widget: "cms-edit-link", static: true, + required: false, href: "#/collections/booking", label_template: "Manage Booking Platforms \u2192", }, @@ -626,7 +714,15 @@ var bookingFields = [ label: "Additional info", widget: "markdown", required: false, - editor_components: ["button", "float-image", "icon", "image"], + editor_components: [ + "button", + "float-image", + "icon", + "image2", + "table", + "dialog-trigger", + "footnote-reference", + ], }, ]; @@ -688,7 +784,10 @@ var bookingSectionFields = [ "float-image", "highlight-raw", "icon", - "image", + "image2", + "table", + "dialog-trigger", + "footnote-reference", ], }, ]; @@ -781,7 +880,15 @@ var identifyOperatorFields = [ label: "Additional info", widget: "markdown", required: false, - editor_components: ["button", "float-image", "highlight", "icon", "image"], + editor_components: [ + "button", + "float-image", + "highlight", + "icon", + "image2", + "table", + "dialog-trigger", + ], }, ]; @@ -819,7 +926,15 @@ var satelliteFields = [ label: "Additional info", widget: "markdown", required: false, - editor_components: ["button", "float-image", "icon", "image"], + editor_components: [ + "button", + "float-image", + "icon", + "image2", + "table", + "dialog-trigger", + "footnote-reference", + ], }, ]; @@ -859,7 +974,15 @@ var dialogFields = [ name: "body", label: "Content", widget: "markdown", - editor_components: ["button", "float-image", "highlight", "icon", "image"], + editor_components: [ + "button", + "float-image", + "highlight", + "icon", + "image2", + "table", + "dialog-trigger", + ], }, ]; @@ -888,6 +1011,48 @@ CMS.registerEditorComponent({ }, }); +// Matches `[text](dialog:dialogId)`, a link that opens the dialog with the +// given ID (see the "Dialog" component) instead of navigating anywhere. +var dialogTriggerPattern = /\[([^\]\n]*)\]\(dialog:([^)\s]+)\)/; + +var dialogTriggerFields = [ + { + name: "text", + label: "Link text", + widget: "string", + required: true, + }, + { + name: "dialog_id", + label: "Dialog ID (anchor)", + widget: "string", + required: true, + hint: 'Must match the "Dialog ID (anchor)" of a Dialog component on this page.', + }, +]; + +CMS.registerEditorComponent({ + id: "dialog-trigger", + label: "Dialog Trigger", + icon: "open_in_browser", + mode: "dialog", + summary: "{{text}}", + fields: dialogTriggerFields, + pattern: dialogTriggerPattern, + fromBlock: function (match) { + return { + text: String(match[1] || ""), + dialog_id: String(match[2] || ""), + }; + }, + toBlock: function (data) { + return "[" + (data.text || "") + "](dialog:" + (data.dialog_id || "") + ")"; + }, + toPreview: function () { + return ""; + }, +}); + var floatImageFields = [ { name: "src", label: "Image", widget: "image", param: { required: true } }, { @@ -927,7 +1092,14 @@ var floatImageFields = [ label: "Surrounding text", widget: "markdown", required: false, - editor_components: ["button", "icon", "image"], + editor_components: [ + "button", + "icon", + "image2", + "table", + "dialog-trigger", + "footnote-reference", + ], }, ]; @@ -973,6 +1145,25 @@ CMS.registerEditorComponent({ }, }); +CMS.registerEditorComponent({ + id: "children-discount", + label: "Children Discount Notice", + icon: "child_care", + fields: [], + pattern: selfClosingPattern("children-discount"), + fromBlock: function () { + return {}; + }, + toBlock: makeToBlock("children-discount", { + bracket: "<", + fields: [], + bodyMode: "none", + }), + toPreview: function () { + return ""; + }, +}); + var iconFields = [ { name: "name", @@ -1046,7 +1237,16 @@ var updateFields = [ name: "body", label: "Content", widget: "markdown", - editor_components: ["button", "float-image", "highlight", "icon", "image"], + editor_components: [ + "button", + "float-image", + "highlight", + "icon", + "image2", + "table", + "dialog-trigger", + "footnote-reference", + ], }, ]; @@ -1081,7 +1281,15 @@ var columnFields = [ name: "body", label: "Content", widget: "markdown", - editor_components: ["button", "float-image", "highlight", "icon", "image"], + editor_components: [ + "button", + "float-image", + "highlight", + "icon", + "image2", + "table", + "footnote-reference", + ], }, ]; @@ -1110,7 +1318,7 @@ var columnsFields = [ name: "body", label: "Content", widget: "markdown", - editor_components: ["column", "icon"], + editor_components: ["column"], }, ]; diff --git a/layouts/admin/section.cmsconfig.yml b/assets/admin/static/config.yml similarity index 81% rename from layouts/admin/section.cmsconfig.yml rename to assets/admin/static/config.yml index 4c939383f..f0d650777 100644 --- a/layouts/admin/section.cmsconfig.yml +++ b/assets/admin/static/config.yml @@ -1,11 +1,13 @@ backend: name: github repo: fipguide/fipguide.github.io - branch: "{{ or (os.Getenv "FIPGUIDE_BRANCH") "main" }}" - auth_scope: repo + branch: main + auth_scope: public_repo open_authoring: true site_domain: fipguide.netlify.app preview_context: netlify/fipguide-test/deploy-preview + prompt_commit_messages: true + cms_label_prefix: cms/ publish_mode: editorial_workflow app_title: "FIP Guide CMS" editor: @@ -90,27 +92,19 @@ x_fip_validity_target_fields_reduced: &fip_validity_target_fields_reduced group_type: "fip-reduced-ticket" required: false -x_fip_validity_columns: &fip_validity_columns - - label: "FIP Coupon" - name: "fip-coupon" - widget: "object" - summary: "Target groups" - hint: "Number and validity of FIP Coupons available to this target group." - fields: *fip_validity_target_fields_coupon - - label: "FIP Reduced Ticket" - name: "fip-reduced-ticket" - widget: "object" - summary: "Target groups" - hint: "Discount on FIP Reduced Tickets (FIP 50 / FIP 75) available to this target group." - fields: *fip_validity_target_fields_reduced - collections: - name: "news" label: "News" label_singular: "News Article" + editor: + second_pane: false folder: "content/news" - path: "{{"{{"}}slug}}/index" - preview_path: "{{"{{"}}locale}}/news/{{"{{"}}slug}}/" + path: "{{slug}}/index" + preview_path: "{{locale}}/news/{{slug}}/" + slug: + auto_increment: true + hint: "A sequential number used as the article slug, e.g. 1." + pattern: ["^[0-9]+$", "Must contain only numbers"] publish: false create: true delete: false @@ -174,11 +168,13 @@ collections: widget: "markdown" i18n: true editor_components: - - "image" + - "image2" + - "table" - "highlight" - "expander" - "button" - "dialog" + - "dialog-trigger" - "float-image" - "wip" - "icon" @@ -190,10 +186,12 @@ collections: - name: "country" label: "Countries" label_singular: "Country" + editor: + second_pane: false folder: "content/country" - path: "{{"{{"}}slug}}/index" - preview_path: "{{"{{"}}locale}}/country/{{"{{"}}slug}}/" - thumbnail: "/images/flags/{{"{{"}}slug}}.webp" + path: "{{slug}}/index" + preview_path: "{{locale}}/country/{{slug}}/" + thumbnail: "/images/flags/{{slug}}.webp" create: false publish: false delete: false @@ -231,11 +229,13 @@ collections: widget: "markdown" i18n: true editor_components: - - "image" + - "image2" + - "table" - "highlight" - "expander" - "button" - "dialog" + - "dialog-trigger" - "float-image" - "wip" - "icon" @@ -247,9 +247,11 @@ collections: - name: "operator" label: "Operators" label_singular: "Operator" + editor: + second_pane: false folder: "content/operator" - path: "{{"{{"}}slug}}/index" - preview_path: "{{"{{"}}locale}}/operator/{{"{{"}}slug}}/" + path: "{{slug}}/index" + preview_path: "{{locale}}/operator/{{slug}}/" publish: false create: false delete: false @@ -292,7 +294,8 @@ collections: widget: "markdown" i18n: true editor_components: - - "image" + - "image2" + - "table" - "highlight" - "expander" - "fip-validity" @@ -300,19 +303,23 @@ collections: - "booking" - "button" - "dialog" + - "dialog-trigger" - "float-image" - "wip" - "icon" - "footnote-reference" - "columns" - "footnote" + - "children-discount" - name: "application" label: "FIP Application" label_singular: "FIP Application Page" + editor: + second_pane: false folder: "content/application" - path: "{{"{{"}}slug}}/index" - preview_path: "{{"{{"}}locale}}/application/{{"{{"}}slug}}/" + path: "{{slug}}/index" + preview_path: "{{locale}}/application/{{slug}}/" publish: false create: true delete: false @@ -356,7 +363,7 @@ collections: How and when can employees of this issuer request FIP Coupons? --> - {{"{{"}}< fip-validity-table type="fip-coupon" >}} + {{< fip-validity-table type="fip-coupon" >}} ## FIP Reduced Ticket @@ -364,14 +371,16 @@ collections: How and when can employees of this issuer request FIP Reduced Tickets (FIP 50 / FIP 75)? --> - {{"{{"}}< fip-validity-table type="fip-reduced-ticket" >}} + {{< fip-validity-table type="fip-reduced-ticket" >}} editor_components: - - "image" + - "image2" + - "table" - "highlight" - "expander" - "fip-validity-table" - "button" - "dialog" + - "dialog-trigger" - "float-image" - "wip" - "icon" @@ -382,11 +391,13 @@ collections: - name: "fip-validity" label: "FIP Validity Tables" label_singular: "FIP Validity Table" + editor: + second_pane: false folder: "content/application" - path: "{{"{{"}}slug}}/validity" + path: "{{slug}}/validity" extension: "yaml" format: "yaml" - summary: "{{"{{"}}dirname}}" + summary: "{{dirname}}" create: true publish: false delete: false @@ -394,23 +405,36 @@ collections: - label: "Validity Groups" name: "groups" widget: "list" - summary: "{{"{{"}}fields.name}} ({{"{{"}}fields.type}}, {{"{{"}}fields.status}})" - hint: "The validity groups available for this issuer. Referenced by name in the Operators section below." + map_key_field: "id" + summary: "{{fields.id}} ({{fields.type}}, {{fields.status}})" + hint: "The validity groups available for this issuer. Referenced by ID in the Operators section below." fields: - - label: "Name" - name: "name" + - label: "ID" + name: "id" widget: "string" + pattern: + ["^[a-z0-9-]+$", "Use lowercase letters, digits and hyphens only"] hint: 'Unique identifier of this group, e.g. "coupon-1".' - label: "Type" name: "type" widget: "select" - options: ["fip-coupon", "fip-reduced-ticket"] + options: + - label: "FIP Coupon" + value: "fip-coupon" + - label: "FIP Reduced Ticket" + value: "fip-reduced-ticket" required: false hint: "Which FIP product this group applies to. Restricts which dropdowns it shows up in below. Leave unset to show it under both." - label: "Status" name: "status" widget: "select" - options: ["valid", "invalid", "unknown"] + options: + - label: "Valid" + value: "valid" + - label: "Invalid" + value: "invalid" + - label: "Unknown" + value: "unknown" - label: "Text" name: "text" widget: "object" @@ -438,26 +462,41 @@ collections: minimal: true - label: "Operators" name: "operators" - widget: "object" + widget: "list" + map_key_field: "operator" collapsed: true - summary: "Validity Groups" + summary: "{{fields.operator}}" hint: "For each target operator, select the applicable validity group per FIP product and target group." fields: -{{- range (sort (where site.RegularPages "Type" "operator") "File.ContentBaseName") }} - - label: {{ printf "%q" .Title }} - name: {{ printf "%q" .File.ContentBaseName }} + - label: "Operator" + name: "operator" + widget: "relation" + collection: "operator" + search_fields: ["title"] + value_field: "operator" + display_fields: ["title"] + hint: "The operator this validity information applies to." + - label: "FIP Coupon" + name: "fip-coupon" + widget: "object" + summary: "Target groups" + hint: "Number and validity of FIP Coupons available to this target group." + fields: *fip_validity_target_fields_coupon + - label: "FIP Reduced Ticket" + name: "fip-reduced-ticket" widget: "object" - collapsed: true - summary: "FIP Coupon & FIP Reduced Ticket" - fields: *fip_validity_columns -{{- end }} + summary: "Target groups" + hint: "Discount on FIP Reduced Tickets (FIP 50 / FIP 75) available to this target group." + fields: *fip_validity_target_fields_reduced - name: "booking" label: "Booking Platforms" label_singular: "Booking Platform" + editor: + second_pane: false folder: "content/booking" - path: "{{"{{"}}slug}}/index" - preview_path: "{{"{{"}}locale}}/booking/{{"{{"}}slug}}/" + path: "{{slug}}/index" + preview_path: "{{locale}}/booking/{{slug}}/" publish: false create: true delete: false @@ -566,7 +605,20 @@ collections: name: type widget: select options: - [website, online, onsite, phone, email, socialmedia, machine] + - label: "Website" + value: "website" + - label: "Online" + value: "online" + - label: "On-Site" + value: "onsite" + - label: "Telephone" + value: "phone" + - label: "Email" + value: "email" + - label: "Social Media" + value: "socialmedia" + - label: "Ticket Machine" + value: "machine" i18n: duplicate - label: "Email Templates" name: email_templates @@ -664,7 +716,7 @@ collections: widget: "markdown" i18n: true default: | - {{"{{"}}% booking-section "fip_50" %}} + {{% booking-section "fip_50" %}} ## FIP 50 Tickets @@ -672,9 +724,9 @@ collections: Explain the steps for booking FIP 50 Tickets with this booking platform. --> - {{"{{"}}% /booking-section %}} + {{% /booking-section %}} - {{"{{"}}% booking-section "fip_global_fare" %}} + {{% booking-section "fip_global_fare" %}} ## FIP Global Fare @@ -682,9 +734,9 @@ collections: Explain the steps for booking FIP Global Fares with this booking platform. --> - {{"{{"}}% /booking-section %}} + {{% /booking-section %}} - {{"{{"}}% booking-section "reservations" %}} + {{% booking-section "reservations" %}} ## Reservations @@ -692,15 +744,17 @@ collections: Explain the steps for booking reservations with this booking platform. --> - {{"{{"}}% /booking-section %}} + {{% /booking-section %}} editor_components: - - "image" + - "image2" + - "table" - "highlight-raw" - "expander" - "booking-section" - "button" - "satellite" - "dialog" + - "dialog-trigger" - "float-image" - "wip" - "icon" @@ -711,14 +765,16 @@ collections: - name: "general" label: "General Pages" i18n: true + editor: + second_pane: false files: - name: "contribution" label: "Contribution" - file: "content/contribution/index.{{"{{"}}locale}}.md" + file: "content/contribution/index.{{locale}}.md" media_folder: "" public_folder: "" i18n: true - preview_path: "{{"{{"}}locale}}/contribution/" + preview_path: "{{locale}}/contribution/" fields: - label: "Title" name: "title" @@ -729,11 +785,13 @@ collections: widget: "markdown" i18n: true editor_components: - - "image" + - "image2" + - "table" - "highlight" - "expander" - "button" - "dialog" + - "dialog-trigger" - "float-image" - "wip" - "icon" @@ -743,11 +801,11 @@ collections: - name: "generalinformation" label: "General Information" - file: "content/general/generalinformation/index.{{"{{"}}locale}}.md" + file: "content/general/generalinformation/index.{{locale}}.md" media_folder: "" public_folder: "" i18n: true - preview_path: "{{"{{"}}locale}}/general/generalinformation/" + preview_path: "{{locale}}/general/generalinformation/" fields: - label: "Title" name: "title" @@ -768,11 +826,13 @@ collections: widget: "markdown" i18n: true editor_components: - - "image" + - "image2" + - "table" - "highlight" - "expander" - "button" - "dialog" + - "dialog-trigger" - "float-image" - "wip" - "icon" @@ -782,11 +842,11 @@ collections: - name: "fip-application" label: "FIP Application" - file: "content/general/fip-validity/index.{{"{{"}}locale}}.md" + file: "content/general/fip-validity/index.{{locale}}.md" media_folder: "" public_folder: "" i18n: true - preview_path: "{{"{{"}}locale}}/general/fip-validity/" + preview_path: "{{locale}}/general/fip-validity/" fields: - label: "Title" name: "title" @@ -807,11 +867,13 @@ collections: widget: "markdown" i18n: true editor_components: - - "image" + - "image2" + - "table" - "highlight" - "expander" - "button" - "dialog" + - "dialog-trigger" - "float-image" - "wip" - "icon" @@ -822,9 +884,11 @@ collections: - name: "faq" label: "FAQ" label_singular: "FAQ Entry" + editor: + second_pane: false folder: "content/general/faq" - path: "{{"{{"}}slug}}/index" - preview_path: "{{"{{"}}locale}}/general/faq/{{"{{"}}slug}}/" + path: "{{slug}}/index" + preview_path: "{{locale}}/general/faq/{{slug}}/" publish: false create: true delete: false @@ -838,17 +902,20 @@ collections: name: "weight" widget: "number" required: false + min: 0 i18n: duplicate - label: "Body" name: "body" widget: "markdown" i18n: true editor_components: - - "image" + - "image2" + - "table" - "highlight" - "expander" - "button" - "dialog" + - "dialog-trigger" - "float-image" - "wip" - "icon" @@ -859,9 +926,11 @@ collections: - name: "identify-operator" label: "Identify Operator" label_singular: "Identify Operator" + editor: + second_pane: false folder: "content/identify-operator" - path: "{{"{{"}}slug}}/index" - preview_path: "{{"{{"}}locale}}/identify-operator/{{"{{"}}slug}}/" + path: "{{slug}}/index" + preview_path: "{{locale}}/identify-operator/{{slug}}/" publish: false create: true delete: false @@ -886,11 +955,13 @@ collections: widget: "markdown" i18n: true editor_components: - - "image" + - "image2" + - "table" - "highlight" - "expander" - "button" - "dialog" + - "dialog-trigger" - "float-image" - "wip" - "icon" diff --git a/content/admin/_index.md b/content/admin/_index.md deleted file mode 100644 index f5bf6ac9b..000000000 --- a/content/admin/_index.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Admin" -url: "/admin/" -outputs: ["CMSConfig"] -sitemap: - disable: true -build: - list: never - render: always ---- diff --git a/content/application/cd/validity.yaml b/content/application/cd/validity.yaml index 5ee87509f..2bdc285ab 100644 --- a/content/application/cd/validity.yaml +++ b/content/application/cd/validity.yaml @@ -1,12 +1,12 @@ groups: - - name: coupon-not-available + coupon-not-available: status: invalid text: de: Nicht verfügbar en: Not available fr: Non disponible type: fip-coupon - - name: coupon-1 + coupon-1: status: valid text: de: | @@ -20,7 +20,7 @@ groups: Avec 4 champs par an. Chaque champ est valable deux jours. type: fip-coupon - - name: coupon-2 + coupon-2: status: valid text: de: | @@ -34,7 +34,7 @@ groups: Avec 4 champs par an. Chaque champ est valable deux jours. type: fip-coupon - - name: coupon-3 + coupon-3: status: valid text: de: | @@ -48,7 +48,7 @@ groups: Avec 4 champs par an. Chaque champ est valable deux jours. type: fip-coupon - - name: coupon-crossing-1 + coupon-crossing-1: status: valid text: de: > @@ -64,7 +64,7 @@ groups: Avec 2 champs par an. Chaque champ est valable pour une traversée. type: fip-coupon - - name: coupon-zssk + coupon-zssk: status: valid text: de: | diff --git a/content/application/cie/validity.yaml b/content/application/cie/validity.yaml index f5e3cdf1b..1e11776f3 100644 --- a/content/application/cie/validity.yaml +++ b/content/application/cie/validity.yaml @@ -1,5 +1,5 @@ groups: - - name: reduced-75 + reduced-75: status: valid text: de: 75 % Rabatt diff --git a/content/application/db/validity.yaml b/content/application/db/validity.yaml index 878e012cf..8093d182e 100644 --- a/content/application/db/validity.yaml +++ b/content/application/db/validity.yaml @@ -1,5 +1,5 @@ groups: - - name: coupon-4fields + coupon-4fields: status: valid text: de: > @@ -15,14 +15,14 @@ groups: Avec 4 champs chacun par an. Chaque champ est valable deux jours. type: fip-coupon - - name: coupon-not-available + coupon-not-available: status: invalid text: de: Nicht verfügbar en: Not available fr: Non disponible type: fip-coupon - - name: coupon-crossing + coupon-crossing: status: valid text: de: > @@ -38,7 +38,7 @@ groups: Avec 2 champs chacun par an. Chaque champ est valable pour une traversée. type: fip-coupon - - name: coupon-former-1-onetime + coupon-former-1-onetime: status: valid text: de: | @@ -51,7 +51,7 @@ groups: **1 coupon** Unique, dans les 45 mois suivant le départ. type: fip-coupon - - name: reduced-50 + reduced-50: status: valid text: de: 50 % Rabatt diff --git a/content/application/gb/validity.yaml b/content/application/gb/validity.yaml index ff633087a..968724f9b 100644 --- a/content/application/gb/validity.yaml +++ b/content/application/gb/validity.yaml @@ -1,12 +1,12 @@ groups: - - name: coupon-not-available + coupon-not-available: status: invalid text: de: Nicht verfügbar en: Not available fr: Non disponible type: fip-coupon - - name: coupon-active-1 + coupon-active-1: status: valid text: de: | @@ -19,7 +19,7 @@ groups: **1 coupon** Par an. type: fip-coupon - - name: coupon-active-2 + coupon-active-2: status: valid text: de: | @@ -32,14 +32,14 @@ groups: **2 coupons** Par an. type: fip-coupon - - name: reduced-50 + reduced-50: status: valid text: de: 50 % Rabatt en: 50 % discount fr: 50 % de réduction type: fip-reduced-ticket - - name: reduced-75 + reduced-75: status: valid text: de: 75 % Rabatt diff --git a/content/application/nir/validity.yaml b/content/application/nir/validity.yaml index f5e3cdf1b..1e11776f3 100644 --- a/content/application/nir/validity.yaml +++ b/content/application/nir/validity.yaml @@ -1,5 +1,5 @@ groups: - - name: reduced-75 + reduced-75: status: valid text: de: 75 % Rabatt diff --git a/content/application/ns/validity.yaml b/content/application/ns/validity.yaml index 5534eb366..15cf3aefb 100644 --- a/content/application/ns/validity.yaml +++ b/content/application/ns/validity.yaml @@ -1,12 +1,12 @@ groups: - - name: coupon-not-available + coupon-not-available: status: invalid text: de: Nicht verfügbar en: Not available fr: Non disponible type: fip-coupon - - name: free-travel + free-travel: status: valid text: de: > @@ -22,7 +22,7 @@ groups: Un nombre illimité de coupons pays peut être demandé (un coupon par demande). type: fip-coupon - - name: coupon-1 + coupon-1: status: valid text: de: | @@ -35,7 +35,7 @@ groups: **1 coupon** Par an. type: fip-coupon - - name: coupon-2 + coupon-2: status: valid text: de: | @@ -48,7 +48,7 @@ groups: **2 coupons** Par an. type: fip-coupon - - name: coupon-4 + coupon-4: status: valid text: de: | @@ -61,7 +61,7 @@ groups: **4 coupons** Par an. type: fip-coupon - - name: coupon-1-onetime + coupon-1-onetime: status: valid text: de: | @@ -74,7 +74,7 @@ groups: **1 coupon** Unique, dans les 45 mois suivant le départ. type: fip-coupon - - name: relatives-sncf-active + relatives-sncf-active: status: valid text: de: > diff --git a/content/application/oebb/validity.yaml b/content/application/oebb/validity.yaml index af5912b9f..e477aa398 100644 --- a/content/application/oebb/validity.yaml +++ b/content/application/oebb/validity.yaml @@ -1,12 +1,12 @@ groups: - - name: coupon-not-available + coupon-not-available: status: invalid text: de: Nicht verfügbar en: Not available fr: Non disponible type: fip-coupon - - name: coupon-1 + coupon-1: status: valid text: de: | @@ -16,7 +16,7 @@ groups: fr: | **1 coupon** Temps plein uniquement type: fip-coupon - - name: coupon-1-1 + coupon-1-1: status: valid text: de: > @@ -28,7 +28,7 @@ groups: **1 coupon** Temps plein
Temps partiel (min. 50%): 1 coupon
type: fip-coupon - - name: coupon-2-1 + coupon-2-1: status: valid text: de: > @@ -41,7 +41,7 @@ groups: **2 coupons** Temps plein
Temps partiel (min. 50%): 1 coupon
type: fip-coupon - - name: coupon-3-1 + coupon-3-1: status: valid text: de: > @@ -54,7 +54,7 @@ groups: **3 coupons** Temps plein
Temps partiel (min. 50%): 1 coupon
type: fip-coupon - - name: coupon-y1-9x1-45x0 + coupon-y1-9x1-45x0: status: valid text: de: > @@ -71,7 +71,7 @@ groups: mois** après le départ à la retraite: 1 coupon
**Unique dans les 45 mois** après le départ à la retraite: 0 coupon type: fip-coupon - - name: coupon-y0-9x1-45x1 + coupon-y0-9x1-45x1: status: valid text: de: > @@ -88,7 +88,7 @@ groups: mois** après le départ à la retraite: 1 coupon
**Unique dans les 45 mois** après le départ à la retraite: 1 coupon type: fip-coupon - - name: coupon-y0-9x2-45x1 + coupon-y0-9x2-45x1: status: valid text: de: > @@ -105,7 +105,7 @@ groups: mois** après le départ à la retraite: 2 coupons
**Unique dans les 45 mois** après le départ à la retraite: 1 coupon type: fip-coupon - - name: coupon-y1-9x3-45x0 + coupon-y1-9x3-45x0: status: valid text: de: > @@ -122,7 +122,7 @@ groups: mois** après le départ à la retraite: 3 coupons
**Unique dans les 45 mois** après le départ à la retraite: 0 coupon type: fip-coupon - - name: coupon-y0-9x0-45x1 + coupon-y0-9x0-45x1: status: valid text: de: > @@ -139,14 +139,14 @@ groups: mois** après le départ à la retraite: 0 coupon
**Unique dans les 45 mois** après le départ à la retraite: 1 coupon type: fip-coupon - - name: reduced-50 + reduced-50: status: valid text: de: 50 % Rabatt en: 50 % discount fr: 50 % de réduction type: fip-reduced-ticket - - name: reduced-no-discount + reduced-no-discount: status: invalid text: de: Kein Rabatt diff --git a/content/application/sncb/validity.yaml b/content/application/sncb/validity.yaml index bc20d0fbe..a1e5764ca 100644 --- a/content/application/sncb/validity.yaml +++ b/content/application/sncb/validity.yaml @@ -1,12 +1,12 @@ groups: - - name: coupon-not-available + coupon-not-available: status: invalid text: de: Nicht verfügbar en: Not available fr: Non disponible type: fip-coupon - - name: coupon-1 + coupon-1: status: valid text: de: | @@ -19,7 +19,7 @@ groups: **1 coupon** Par an. type: fip-coupon - - name: coupon-2 + coupon-2: status: valid text: de: | @@ -32,7 +32,7 @@ groups: **2 coupons** Par an. type: fip-coupon - - name: coupon-sncf-nord + coupon-sncf-nord: status: valid text: de: > @@ -48,7 +48,7 @@ groups: Réseau entier : 4 coupons par an. Région Nord : 8 coupons par an. type: fip-coupon - - name: relatives-sncf-nord + relatives-sncf-nord: status: valid text: de: > @@ -64,7 +64,7 @@ groups: Réseau entier : 2 coupons par an. Région Nord : 4 coupons par an. type: fip-coupon - - name: relatives-sncf-retired + relatives-sncf-retired: status: valid text: de: | @@ -77,14 +77,14 @@ groups: **1 coupon** Par an (enfant uniquement). type: fip-coupon - - name: reduced-50 + reduced-50: status: valid text: de: 50 % Rabatt en: 50 % discount fr: 50 % de réduction type: fip-reduced-ticket - - name: reduced-75 + reduced-75: status: valid text: de: 75 % Rabatt diff --git a/content/application/sncf/validity.yaml b/content/application/sncf/validity.yaml index 9b4edb8c2..860163f53 100644 --- a/content/application/sncf/validity.yaml +++ b/content/application/sncf/validity.yaml @@ -1,5 +1,5 @@ groups: - - name: coupon-4fields + coupon-4fields: status: valid text: de: > @@ -15,14 +15,14 @@ groups: Avec 4 champs chacun par an. Chaque champ est valable deux jours. type: fip-coupon - - name: coupon-not-available + coupon-not-available: status: invalid text: de: Nicht verfügbar en: Not available fr: Non disponible type: fip-coupon - - name: coupon-2fields + coupon-2fields: status: valid text: de: > @@ -38,7 +38,7 @@ groups: Avec 4 champs chacun par an. Chaque champ est valable deux jours. type: fip-coupon - - name: coupon-4fields-4 + coupon-4fields-4: status: valid text: de: > @@ -54,7 +54,7 @@ groups: Avec 4 champs chacun par an. Chaque champ est valable deux jours. type: fip-coupon - - name: coupon-6fields + coupon-6fields: status: valid text: de: > @@ -70,7 +70,7 @@ groups: Avec 4 champs chacun par an. Chaque champ est valable deux jours. type: fip-coupon - - name: coupon-crossing + coupon-crossing: status: valid text: de: > @@ -86,14 +86,14 @@ groups: Avec 2 champs chacun par an. Chaque champ est valable pour une traversée. type: fip-coupon - - name: reduced-50 + reduced-50: status: valid text: de: 50 % Rabatt en: 50 % discount fr: 50 % de réduction type: fip-reduced-ticket - - name: reduced-75 + reduced-75: status: valid text: de: 75 % Rabatt diff --git a/content/operator/bls/index.de.md b/content/operator/bls/index.de.md index 0a0529a08..3e3c3b5b5 100644 --- a/content/operator/bls/index.de.md +++ b/content/operator/bls/index.de.md @@ -2,6 +2,7 @@ title: BLS country: - switzerland +operator: bls content_images: - image.webp aliases: diff --git a/content/operator/bls/index.en.md b/content/operator/bls/index.en.md index c556e9bcf..b85dcbe1e 100644 --- a/content/operator/bls/index.en.md +++ b/content/operator/bls/index.en.md @@ -2,6 +2,7 @@ title: BLS country: - switzerland +operator: bls content_images: - image.webp aliases: diff --git a/content/operator/bls/index.fr.md b/content/operator/bls/index.fr.md index a88c14bd8..7f6805d2b 100644 --- a/content/operator/bls/index.fr.md +++ b/content/operator/bls/index.fr.md @@ -2,6 +2,7 @@ title: BLS country: - switzerland +operator: bls content_images: - image.webp aliases: diff --git a/content/operator/sbb/index.de.md b/content/operator/sbb/index.de.md index 3ecb168de..42c4b4e1d 100644 --- a/content/operator/sbb/index.de.md +++ b/content/operator/sbb/index.de.md @@ -2,6 +2,7 @@ title: SBB CFF FFS country: - switzerland +operator: sbb content_images: - image.webp aliases: diff --git a/content/operator/sbb/index.en.md b/content/operator/sbb/index.en.md index 024db463a..3a4b501b6 100644 --- a/content/operator/sbb/index.en.md +++ b/content/operator/sbb/index.en.md @@ -2,6 +2,7 @@ title: SBB CFF FFS country: - switzerland +operator: sbb content_images: - image.webp aliases: diff --git a/content/operator/sbb/index.fr.md b/content/operator/sbb/index.fr.md index 4a1c31959..6d5a14697 100644 --- a/content/operator/sbb/index.fr.md +++ b/content/operator/sbb/index.fr.md @@ -2,6 +2,7 @@ title: SBB CFF FFS country: - switzerland +operator: sbb content_images: - image.webp aliases: diff --git a/hugo.yaml b/hugo.yaml index ae6ce0ea7..167593e8d 100644 --- a/hugo.yaml +++ b/hugo.yaml @@ -4,7 +4,7 @@ ignoreLogs: ["warning-rendershortcodes-in-html"] security: funcs: - getenv: ["^HUGO_", "^CI$", "^FIPGUIDE_"] + getenv: ["^HUGO_", "^CI$"] defaultContentLanguage: "en" defaultContentLanguageInSubdir: true @@ -38,17 +38,6 @@ module: hugoVersion: min: "0.164.0" -mediaTypes: - application/x-yaml: - suffixes: ["yml"] - -outputFormats: - CMSConfig: - mediaType: "application/x-yaml" - baseName: "config" - isPlainText: true - notAlternative: true - related: includeNewer: true indices: diff --git a/layouts/_partials/fip-validity/dialog.html b/layouts/_partials/fip-validity/dialog.html index ea8f39582..8fed9523e 100644 --- a/layouts/_partials/fip-validity/dialog.html +++ b/layouts/_partials/fip-validity/dialog.html @@ -14,7 +14,7 @@ {{- with $appPage -}} {{- with .Resources.Get "validity.yaml" -}} {{- $validity := . | transform.Unmarshal -}} - {{- $groupsMap = partial "fip-validity/groups-map" $validity -}} + {{- $groupsMap = $validity.groups -}} {{- $entry = index (index (index $validity "operators") $currentSlug) $type -}} {{- end -}} {{- end -}} diff --git a/layouts/_partials/fip-validity/groups-map.html b/layouts/_partials/fip-validity/groups-map.html deleted file mode 100644 index 79130ff84..000000000 --- a/layouts/_partials/fip-validity/groups-map.html +++ /dev/null @@ -1,5 +0,0 @@ -{{- $map := dict -}} -{{- range $g := index . "groups" -}} - {{- $map = merge $map (dict $g.name $g) -}} -{{- end -}} -{{- return $map -}} diff --git a/layouts/_shortcodes/fip-validity-table.html b/layouts/_shortcodes/fip-validity-table.html index ff184a192..9e59638ae 100644 --- a/layouts/_shortcodes/fip-validity-table.html +++ b/layouts/_shortcodes/fip-validity-table.html @@ -4,7 +4,7 @@ {{- $excluded := slice "eurostar" "euskotren" -}} {{- $issuerSlug := $page.File.ContentBaseName -}} {{- $validity := $page.Resources.Get "validity.yaml" | transform.Unmarshal -}} -{{- $groupsMap := partial "fip-validity/groups-map" $validity -}} +{{- $groupsMap := $validity.groups -}} {{- $entries := dict -}} {{- range where $page.Site.RegularPages "Type" "operator" -}} {{- $targetSlug := .File.ContentBaseName -}} diff --git a/netlify.toml b/netlify.toml index 8fab1904c..4fd828719 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,5 +1,5 @@ [build] - command = "npm run build:admin && echo 'resourceDir: /opt/build/cache/resources_cache' >> hugo.yaml && FIPGUIDE_BRANCH=\"$HEAD\" hugo --gc --minify -b $DEPLOY_PRIME_URL && npx -y pagefind --site public" + command = "FIPGUIDE_BRANCH=\"$HEAD\" npm run build:admin && echo 'resourceDir: /opt/build/cache/resources_cache' >> hugo.yaml && hugo --gc --minify -b $DEPLOY_PRIME_URL && npx -y pagefind --site public" publish = "public" [build.environment] diff --git a/package-lock.json b/package-lock.json index 37b96ff61..3e4237932 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,15 +11,15 @@ "dependencies": { "@fontsource/roboto": "^5.3.0", "@fontsource/sansita": "^5.3.0", - "@material-symbols/svg-700": "^0.47.6", + "@material-symbols/svg-700": "^0.48.0", "@panzoom/panzoom": "^4.6.2", - "@sveltia/cms": "^0.227.3", + "@sveltia/cms": "^0.248.1", "pagefind": "^1.5.2", - "prettier": "^3.9.9" + "prettier": "^3.9.10" }, "devDependencies": { "prettier-plugin-go-template": "^0.0.15", - "vite": "7.3.6" + "vite": "8.3.4" } }, "node_modules/@esbuild/aix-ppc64": { @@ -35,6 +35,7 @@ "os": [ "aix" ], + "peer": true, "engines": { "node": ">=18" } @@ -52,6 +53,7 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">=18" } @@ -69,6 +71,7 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">=18" } @@ -86,6 +89,7 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">=18" } @@ -103,6 +107,7 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": ">=18" } @@ -120,6 +125,7 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": ">=18" } @@ -137,6 +143,7 @@ "os": [ "freebsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -154,6 +161,7 @@ "os": [ "freebsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -171,6 +179,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -188,6 +197,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -205,6 +215,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -222,6 +233,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -239,6 +251,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -256,6 +269,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -273,6 +287,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -290,6 +305,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -307,6 +323,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -324,6 +341,7 @@ "os": [ "netbsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -341,6 +359,7 @@ "os": [ "netbsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -358,6 +377,7 @@ "os": [ "openbsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -375,6 +395,7 @@ "os": [ "openbsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -392,6 +413,7 @@ "os": [ "openharmony" ], + "peer": true, "engines": { "node": ">=18" } @@ -409,6 +431,7 @@ "os": [ "sunos" ], + "peer": true, "engines": { "node": ">=18" } @@ -426,6 +449,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">=18" } @@ -443,6 +467,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">=18" } @@ -460,6 +485,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">=18" } @@ -483,9 +509,9 @@ } }, "node_modules/@material-symbols/svg-700": { - "version": "0.47.6", - "resolved": "https://registry.npmjs.org/@material-symbols/svg-700/-/svg-700-0.47.6.tgz", - "integrity": "sha512-qF9HS5YtdK8pQ6S3/dsm6fGS79Pq/7op71kAGwtLAL+5OD1mseSnCYDjhHGaMSqk1Vdqt2BEExE+OdjLWBBSUg==", + "version": "0.48.0", + "resolved": "https://registry.npmjs.org/@material-symbols/svg-700/-/svg-700-0.48.0.tgz", + "integrity": "sha512-E1uUoqBN4NhcE4JlZo89027cQ8HzDMrEcA21c/UPPJExSC/g5125YlCpSq9mTQEOqDbinF6WVVbdJ0IEsFTLMA==", "license": "Apache-2.0" }, "node_modules/@mixmark-io/domino": { @@ -494,21 +520,264 @@ "integrity": "sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==", "license": "BSD-2-Clause" }, - "node_modules/@napi-rs/lzma-linux-x64-gnu": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz", - "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==", + "node_modules/@napi-rs/canvas": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-1.0.11.tgz", + "integrity": "sha512-vt5tog1cr+QKadIddGe+3LrcX0EmjEd0izF717Uwf92mBmgYfq2XRmL2r4bZU40spB69exxhrBn9I91HYEr/7w==", + "license": "MIT", + "optional": true, + "workspaces": [ + "e2e/*" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/canvas-android-arm64": "1.0.11", + "@napi-rs/canvas-darwin-arm64": "1.0.11", + "@napi-rs/canvas-darwin-x64": "1.0.11", + "@napi-rs/canvas-linux-arm-gnueabihf": "1.0.11", + "@napi-rs/canvas-linux-arm64-gnu": "1.0.11", + "@napi-rs/canvas-linux-arm64-musl": "1.0.11", + "@napi-rs/canvas-linux-riscv64-gnu": "1.0.11", + "@napi-rs/canvas-linux-x64-gnu": "1.0.11", + "@napi-rs/canvas-linux-x64-musl": "1.0.11", + "@napi-rs/canvas-win32-arm64-msvc": "1.0.11", + "@napi-rs/canvas-win32-x64-msvc": "1.0.11" + } + }, + "node_modules/@napi-rs/canvas-android-arm64": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-1.0.11.tgz", + "integrity": "sha512-dtJS4FQEfH9OwSYLtMrEnj7T8DzBbJc/97LI/OkiWOYpW/iW5t6R/gcxVrUXS8l45gCVpwMufgucRe/pe0ISqA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-darwin-arm64": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-1.0.11.tgz", + "integrity": "sha512-J/JylWoJTG8OQqZaiqly4IODyAxNofUlZo0wtSBJtHk6AdymbdIkPynAM1JvQaZpPaG5h+msk9QuK8y4i1ooqw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-darwin-x64": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-1.0.11.tgz", + "integrity": "sha512-nlecCk3xy06eAGC7krZtzNDm9UNTHKuHQYK8ZYegdjzgSL8anGt/eLJZm86OWaNgZkwQwvDqfSmG8Nqe6MPZNQ==", "cpu": [ "x64" ], - "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-arm-gnueabihf": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-1.0.11.tgz", + "integrity": "sha512-DKImmG+sTPolE0kGPsYPBxTtOjb3INALp32O2lW2CfSr0bAzSEKKuu+GrQbtilClyoPOahUErS3OrznFDraoWA==", + "cpu": [ + "arm" + ], "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": "^22.20 || ^24.12 || >=25" + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-arm64-gnu": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-1.0.11.tgz", + "integrity": "sha512-55sykACGENj5j1rhj+81AO8JbR9HYgGjRZ7/H+pNr4VE1DvINKYNMTcutk8ZmWxk276jAQvUKJ3+Kdj9GXU3lQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-arm64-musl": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-1.0.11.tgz", + "integrity": "sha512-6Jz6jys17yXydO+WdJgu7JhoB4K7/w9sWHByzzTmLjQghUx3TDMWvLv+UcCdnWhg4oprET67EMymnrETdeGNAg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-riscv64-gnu": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-1.0.11.tgz", + "integrity": "sha512-lf2XeEebWiUYVOVEjLXxF7dfXrBBSEOBn9AqBh39VYXrPt5cDqI+1t58IFSjn8npqkg5jIOs8TQbjKABbFW1gQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-x64-gnu": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-1.0.11.tgz", + "integrity": "sha512-iDapw7nFSE5tsmQxcH2+KotJhyfVPmHd6vUOQN/Em+8WNbkZJwJ/rDowlJMFnMl0SYSDSfgKCNUGi6Sn5++Smg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-x64-musl": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-1.0.11.tgz", + "integrity": "sha512-26q26AyITo3CGZX4HWFIMgBMA1lu3YN07gxzBm4tW6Hglq/OVyTP50kDrmWuKybCX6dh3m8Ly+c7YhI+sqCgCQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-win32-arm64-msvc": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-arm64-msvc/-/canvas-win32-arm64-msvc-1.0.11.tgz", + "integrity": "sha512-cUO96IdsfvIj2S+2PNcDSkTcLhjPj8pIOEWRV1Kj70MOP4wnE9zSk7N4C1EKHlFGRcgdR5AkbnBZj0dfHK9nbQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-win32-x64-msvc": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-1.0.11.tgz", + "integrity": "sha512-DFYp/ZQRdKunI/LPc0UkRXG1vlNjJKOJf8O8Ctb8+wm2Nt2ELg9Eamc31D2VoakkfGo8L+z0Iejz6WtFbQwyGw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.154.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.154.0.tgz", + "integrity": "sha512-KYOUGQFlLWR+s4QMV2Q9ko38TZm7EdO87Qm7rvZLqk/webse/cDjtyxKhg/47l0byCbs/k46LT8qc4PKjAikzA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/oxc-project" } }, "node_modules/@pagefind/darwin-arm64": { @@ -608,10 +877,10 @@ "integrity": "sha512-Zn3B5/hwa6eYIPRSKX0xf2clv8nviTX8AnAU5kU/EugiTDhG41ya2wlBqYrZJYCWQROr/5XkWObZhIkepi89qw==", "license": "MIT" }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.63.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.63.5.tgz", - "integrity": "sha512-J25QJU+B78T4FhhBsNpLJyVWOi31mwtpcMwywHmOKH65Q9IWGA81gPj+dnwlhU8wktVriYE+tFAaQgrnJRzAZg==", + "node_modules/@rolldown/binding-android-arm-eabi": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.14.tgz", + "integrity": "sha512-aWR+XKH9+rW7m5fWq/5360J3mHycrx/o6xZM2DQFdJnTMdyP7/WzxPjhtLbVWdKo2y612/4U1bWqb3HQhiF7vg==", "cpu": [ "arm" ], @@ -620,12 +889,15 @@ "optional": true, "os": [ "android" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.63.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.63.5.tgz", - "integrity": "sha512-LDopB3zuZM5Ux9TT2luNEBJW/tYbGU2g1d+VpKk6I+gSKDb+/7sYE6M225gRQt4RbMX6MSwMsVR/phdjVUgRLg==", + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.14.tgz", + "integrity": "sha512-QiVxHofl6A8lQU7WAtOUY4QMVZXohxwz7WJJoeh8NBEUyKfIkMRKhYyq8az/1RypNiIXzNTtiS6KwHz0erxYRQ==", "cpu": [ "arm64" ], @@ -634,12 +906,15 @@ "optional": true, "os": [ "android" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.63.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.63.5.tgz", - "integrity": "sha512-wlJEERGfeuHeBavCL2qVnNacOK43NDoZM4sjkeRPymd04OAE9T1zBqDJgmZ+CIsPTYKwdzpUC8vmOw84dwY4Tg==", + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.14.tgz", + "integrity": "sha512-lTQOzHuBIooh3jIr5XINQkjPGEuGy+Dsy0meXDr6Sjty0b99kYgGh4uBC/8mJX1T0kC8d6S0aPP1Y+bHkh6aBw==", "cpu": [ "arm64" ], @@ -648,12 +923,15 @@ "optional": true, "os": [ "darwin" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.63.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.63.5.tgz", - "integrity": "sha512-4nJJGg5jbo2wwPP4JP+LfEBA3bvP8rU9CLuhp7jWvq9sxEyhjQFTFdrqi+/dHEin/pd8jpT0vcehIpnZtmEdcQ==", + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.14.tgz", + "integrity": "sha512-hyMKEGatjmBYCs/Q4sbIcL/GqpFEqsX3wc+HYVQ/85A4rxc1o7rPm4DUI4GV4k/h0ITddwFSGpqQunI14GXjTA==", "cpu": [ "x64" ], @@ -662,26 +940,15 @@ "optional": true, "os": [ "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.63.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.63.5.tgz", - "integrity": "sha512-DrZbyCDF1hneuO6jRbvZ2D7+PIBM6yIwYnJpg2vIk58T+wuFpiaGZrfUr59lDWw45bg+IrpTGLPiNi/Fk4w3Cg==", - "cpu": [ - "arm64" ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.63.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.63.5.tgz", - "integrity": "sha512-gqfUVMJMB3mehqywxp6hTBFfgtMQykZY19+cfiaYP0toIJLb/1DZRJHVkQQGP13W4TAwfZDWeg1qBcheTRioXQ==", + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.14.tgz", + "integrity": "sha512-u371GbXoVXrEgP20PwzoGNOdAOqAMhzo19JzzY+V4YmmnC+DTOoqdbMu+O+54emM59Mik/UdrtWgcuEDKWRPKA==", "cpu": [ "x64" ], @@ -690,26 +957,15 @@ "optional": true, "os": [ "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.63.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.63.5.tgz", - "integrity": "sha512-CFmhpvAwzSaWMlN3VN7UtmoTihlZNzoP0juQib5TQRnYUyDV8dXeWOp29sobWAT6gXl/hQgAClLlEiYozQG3OQ==", - "cpu": [ - "arm" ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.63.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.63.5.tgz", - "integrity": "sha512-Uc9H8eXCOayV6JLTH5bXKMId6qbhNHa818/BgYjm4jrlq3vZquC9cqyvHBw17xy5Mnj5f+I3gFK5JcEf3hSqrw==", + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.14.tgz", + "integrity": "sha512-BqwKsdZQf6EqVWr8fv2MrDYzAvOZ7+NYFSJESRGs87fkseEhs0TU9TXgRJTkZoRRkxTizyEg1LKUXfU3/78uqg==", "cpu": [ "arm" ], @@ -718,26 +974,15 @@ "optional": true, "os": [ "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.63.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.63.5.tgz", - "integrity": "sha512-VcPr/szv/1BFw112Kt//fxulXt/JPqzzidU84iW68L2DdjnOO8QFUv2zTSYBEPHD6movBD4z+bbr5y60GYM7Jw==", - "cpu": [ - "arm64" ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.63.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.63.5.tgz", - "integrity": "sha512-BnxtJ5/91BrIHYIkGrmjz/lbMhqEHt1dPFqIxIFR+jPn0xVc/oUSCtIT089zfp5ufwGDlYz2UC+Fe1SRBpYFbQ==", + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.14.tgz", + "integrity": "sha512-SD9kY8M009x/7s57Z1dgUVlP5+uYBgKQK0Tkr1WIWngrtUJmRCW1RJFMY7QDla2khXhmg2i5Io7MUjcmZNZ/KQ==", "cpu": [ "arm64" ], @@ -746,54 +991,32 @@ "optional": true, "os": [ "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.63.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.63.5.tgz", - "integrity": "sha512-LrYcHZwF+fAMNKHYTOQ5osWM4AZF7YF6D+XtsjDyEvljtt11twc+zHVXBLNEjxVSUnKYsOhvVz4Z213eW02COQ==", - "cpu": [ - "loong64" ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.63.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.63.5.tgz", - "integrity": "sha512-nj7QKQePAAUpCpJHtg0pR0W/b92A9NO17JS3BAQmHDn/yhmkir2p8llrKY9TOhleKIaSzy1JhxS3T9FVld6coA==", + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.14.tgz", + "integrity": "sha512-BJ2CL19M6uuWesMgnqJzgxoI+N+eV7b0A9O9vLV42y+gitC41fNa8KElau1tHVzuLWX5GzEuxMPhAO0tQXQMkg==", "cpu": [ - "loong64" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.63.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.63.5.tgz", - "integrity": "sha512-5ylkX6dWMeBKge9nTU+Rxfb+ZfaCIJ9lRqIFaK0eAMcWp7OJbYnLveLgXmm0VrvuLKb8qIK+mHyH0qu88RM+iA==", - "cpu": [ - "ppc64" ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.63.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.63.5.tgz", - "integrity": "sha512-oHK4ZHYFDKjZviK34I+NwgfbGxgI7ztrNxj2hPTSSNFgeq1a/lEd7dHV2fdGAuTH4Iym3RHJg+vAbWaWG4B7Zg==", + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.14.tgz", + "integrity": "sha512-4+Kl8daPV8NDHaD7mfCcc1pRM+Qg7ab8DyMm5FG5WoZgv4h2i3KFN1CybYBNbQqmuYm7ftJLvmMI1eHYJ22S/Q==", "cpu": [ "ppc64" ], @@ -802,40 +1025,15 @@ "optional": true, "os": [ "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.63.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.63.5.tgz", - "integrity": "sha512-UcetmHZ6XOXuUByiKZyQmb55ZPr0LABr3Ec/HB9wKZn6CEAFWZkE+hsJErJ9hbPBC7nI0dKuELx7CoV6IM7TMg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.63.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.63.5.tgz", - "integrity": "sha512-C5CmDPQBtvjVo8cgQsBs+w6WB0JLkiixhgi6hVLV11hERWdn/p0XcPU2OUcZzac9BPOFq7SbaHFa8r3SWEysCQ==", - "cpu": [ - "riscv64" ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.63.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.63.5.tgz", - "integrity": "sha512-lHVQHJFKsuuxLMi3MQO9XVL8Tje3JR82CzB+QDKC5NWBcsIWuwsn9uIM5e3lBhI+fF1/s63qnyYqsg65+8rV/w==", + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.14.tgz", + "integrity": "sha512-V/h8ePq1fKDrmtFMz6xcCN3DKvuvMRrwwD1q0PkBeeo4DpK64biaKvqWGVxqCeYKqeRk7gE7/iKPxLCn08O97A==", "cpu": [ "s390x" ], @@ -844,12 +1042,15 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.63.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.63.5.tgz", - "integrity": "sha512-3W9bTFcQNJn71cSJVM9RKIiZOy8DO/XLDii8Uv/Pm6WKqDRj7JV3ZfuXIEfyuy5LXpIzAbB/1M4Ukp9GKNa7nA==", + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.14.tgz", + "integrity": "sha512-WxalXzgrLVpKC93xfpaJ3gCXUWzeCr+FRCbDVD2mUAy4L6Vo3lNVz0epUEUpxPWJkLNYUwM4OSIikv36OJ9mLg==", "cpu": [ "x64" ], @@ -858,12 +1059,15 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.63.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.63.5.tgz", - "integrity": "sha512-VDC7rRJlee/scpki96GZ27Omf6yU87s1YXwVTpjE5841faVlDYYT565rgfmoR1U0sqL7z5ivQSDjcsF6VRXyBA==", + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.14.tgz", + "integrity": "sha512-3G3tnAmTpdk9jO3GQtyHXqeFD2SlecfTws/Y3M2mmj9nMBwwuLT4kur8sZKeu7ENUHSpVO3cIsm5A52LEWWwlg==", "cpu": [ "x64" ], @@ -872,26 +1076,15 @@ "optional": true, "os": [ "linux" - ] - }, - "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.63.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.63.5.tgz", - "integrity": "sha512-z86Ok2p4pTdv5xqCKZsTooO7yBEiaJR/HzU3Wx8RmWsPoLppnMKROhJusQob8B3IE1ghC343kUW9rC2r+Wf3ig==", - "cpu": [ - "x64" ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.63.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.63.5.tgz", - "integrity": "sha512-IzQmj+xXwQFGhMAMKMQVXkMwMZN3TqkJgAE0nSsqvVwWWciP4AIPMmWRqOQ2GfX7TUDZr+xqGFcBS36CRPGw0g==", + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.14.tgz", + "integrity": "sha512-qyr5XiNGxm2ytx17vvtcJ9nXn6v1gENETi503bJx3OGwZ1tSonj7BosxbMa/xeAfSl5iS9X6KjEWYXLu6v1L7Q==", "cpu": [ "arm64" ], @@ -900,12 +1093,15 @@ "optional": true, "os": [ "openharmony" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.63.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.63.5.tgz", - "integrity": "sha512-F6qpTaPc9bwBH85kjy0/BLmLSW1uv7AoOXCoRIkg2arlgCYlWYcAbiMkvZuAcaWk9TpCRG//okznLAqLGshkMw==", + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.14.tgz", + "integrity": "sha512-oA4o5o0S2yB199YyYXDzKUv1Z56Rc+mgOjwm7Z/vJ9Z8igiDPYvoOuDyo6g7AK/ZaF09nPhDKVnGBcYHO11GXA==", "cpu": [ "arm64" ], @@ -914,26 +1110,15 @@ "optional": true, "os": [ "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.63.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.63.5.tgz", - "integrity": "sha512-igoDsTFhhwECBeGbUuLeIk7t8Y1apa+cs6mDWpx2EZ0ch7oEQgzHbFUXN9euoHekCAQzXdXApAGkV6jznS7tWw==", - "cpu": [ - "ia32" ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.63.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.63.5.tgz", - "integrity": "sha512-U3teMeMbXFmaM5D+OTJpsOXd+wV/qftIeYF9kBKL4v73641qyJmoXFtA28DQLsnmlyayEsTe72xpLHrArq6vHw==", + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.14.tgz", + "integrity": "sha512-9mE94bf2GZUaR/fUSXCMpBoWkctu421Mi0ORpm4zqfbkjKep7RxzPFa5etcGs5h+2KApoWBOA/hAJa/7saGgEQ==", "cpu": [ "x64" ], @@ -942,50 +1127,46 @@ "optional": true, "os": [ "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.63.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.63.5.tgz", - "integrity": "sha512-ypfC34F3RKXvCXBglGqGMsUSMKlgwd1HX9AOAlx9RoZZ6GaI42YHVeKpzg3JG+wpBUJYTG+NNZhqbDWL8tBZkw==", - "cpu": [ - "x64" ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "license": "MIT" }, "node_modules/@shikijs/langs": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.4.3.tgz", - "integrity": "sha512-ePic0yfAJGOF83D5wBHK/00EjK65oahBYxFk5epgq33WRv7X9UuxLEV8PtR0szC0z8dl7INIpIodB99JRFlR+A==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.5.0.tgz", + "integrity": "sha512-wwBTqwduXSz0X4v9Qa2EWeFaYJEw1clCncWjoRNQRbVDu3SPRTRWucnouYapKj3b8Q+sk/41Vbc4B5c8nuYzLA==", "license": "MIT", "dependencies": { - "@shikijs/types": "4.4.3" + "@shikijs/types": "4.5.0" }, "engines": { "node": ">=20" } }, "node_modules/@shikijs/themes": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.4.3.tgz", - "integrity": "sha512-w8UHjeUnIR965KMWJHUPXOc2mNJUnK3vpVLYLvw5IYU2mnTTJ89E24OrJDBNiJDQ0qzb0tc4l7mrIXx5cFeIyw==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.5.0.tgz", + "integrity": "sha512-zGb87H3UBbpuI4yoh5UguB1XbU+2BDU3kflM7UfZ+Cy2hWo9lBtqjSVK20gmLY6ukYl040hAypGXMgud9vul8Q==", "license": "MIT", "dependencies": { - "@shikijs/types": "4.4.3" + "@shikijs/types": "4.5.0" }, "engines": { "node": ">=20" } }, "node_modules/@shikijs/types": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.4.3.tgz", - "integrity": "sha512-UEJxmRR++MAGR6hugn0vgVS2W/6lWAts84FFSrnlH9sP0LNol7E5+NQ792pH8liWUhyMyjhTgSUH3k7iD7tc5g==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.5.0.tgz", + "integrity": "sha512-drtPrtD8N0DENyD2cyt6Ajy+IWsiCLgMxODwLTpvH1UsN6a9jf90tNTPjqwHvA+0Lzu9e0txk8DjfqH1p9UJRw==", "license": "MIT", "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", @@ -1002,18 +1183,19 @@ "license": "MIT" }, "node_modules/@sveltia/cms": { - "version": "0.227.3", - "resolved": "https://registry.npmjs.org/@sveltia/cms/-/cms-0.227.3.tgz", - "integrity": "sha512-DZd4TkNGF53sdOGvKHCkIUzwM9oJtnT6tI4KNKxlV3BSkgqg6+Dh2JigV0E4LjE0jbQeGadaNxoH37RIiYAxmQ==", + "version": "0.248.1", + "resolved": "https://registry.npmjs.org/@sveltia/cms/-/cms-0.248.1.tgz", + "integrity": "sha512-p1ggCMZnTJb76lA00Y0bDhfDS1AWMErW+TbnAGC8rz+jpYn/PfC2U14oWQO/dEGry22JVGPORoOZKSOH8iNbPQ==", "license": "MIT", "dependencies": { - "@shikijs/langs": "4.4.3", - "@shikijs/themes": "4.4.3", + "@shikijs/langs": "4.5.0", + "@shikijs/themes": "4.5.0", "exifr": "^7.1.3", "immutable": "^5.1.9", "leaflet": "^1.9.4", + "pdfjs-dist": "^6.4.299", "svgo": "^4.1.0", - "terra-draw": "^1.35.0", + "terra-draw": "^1.38.0", "terra-draw-leaflet-adapter": "1.0.3", "turndown": "^7.2.4" }, @@ -1030,13 +1212,6 @@ } } }, - "node_modules/@types/estree": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", - "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/hast": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz", @@ -1141,6 +1316,16 @@ "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", "license": "CC0-1.0" }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, "node_modules/dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", @@ -1215,6 +1400,8 @@ "dev": true, "hasInstallScript": true, "license": "MIT", + "optional": true, + "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -1301,6 +1488,267 @@ "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==", "license": "BSD-2-Clause" }, + "node_modules/lightningcss": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/mdn-data": { "version": "2.27.1", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", @@ -1308,9 +1756,9 @@ "license": "CC0-1.0" }, "node_modules/nanoid": { - "version": "3.3.19", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz", - "integrity": "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==", + "version": "3.3.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz", + "integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==", "dev": true, "funding": [ { @@ -1356,6 +1804,18 @@ "@pagefind/windows-x64": "1.5.2" } }, + "node_modules/pdfjs-dist": { + "version": "6.4.299", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-6.4.299.tgz", + "integrity": "sha512-AVl138zALtfaAPvADulE0PZThbYzCBS79nL4pOSL/6Sm/4AH5A21BD9VHt97OlCuzJuCpmeZtAtkinisF4Vb1g==", + "license": "Apache-2.0", + "engines": { + "node": ">=22.13.0 || >=24" + }, + "optionalDependencies": { + "@napi-rs/canvas": "^1.0.10" + } + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -1376,9 +1836,9 @@ } }, "node_modules/postcss": { - "version": "8.5.28", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz", - "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==", + "version": "8.5.30", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.30.tgz", + "integrity": "sha512-zkd+e9S1AQHhmaBKye9zlFHWjOwVgqXl1q3ECYy8561K7qxR2cREf/STLskulBFd78k6AOFeA+ff1TtEzk9bAA==", "dev": true, "funding": [ { @@ -1396,18 +1856,18 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.18", + "nanoid": "^3.3.20", "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" + "source-map-js": "^1.2.2" }, "engines": { "node": "^10 || ^12 || >=14" } }, "node_modules/prettier": { - "version": "3.9.9", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.9.tgz", - "integrity": "sha512-Z/CJHIkdujO/OtN7nXUii0Rf3VT5SRuhjBA82Xvu2XhBUgX3nhP67T0LHceBdQLex7OOFGTox+Q5Yg8Jk2Qivg==", + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.10.tgz", + "integrity": "sha512-skGHTH1Yb9QvaTC4hWnRTzEYtCpApF0UMBPz+t/0ZPzP8ihefo/btKd+QA7pUE0fEwA1SbS/NmhyEcstdXOIdA==", "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" @@ -1435,50 +1895,38 @@ "prettier": "^3.0.0" } }, - "node_modules/rollup": { - "version": "4.63.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.63.5.tgz", - "integrity": "sha512-KRWwmNLlPw5M7HcdYfm15oBv9n9LPtjzpzCIxS/phwqvPyxHSoKX6Y2YU3pxSPfy0CLquVgsx/j/hBi6OvH1Nw==", + "node_modules/rolldown": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.14.tgz", + "integrity": "sha512-eTBTTqMR6uHKLgcUqpJP8ntzDI6V4LYA8negAMBEI7gkgVvOdrx6VsvS2Ym+83KhOPdLCHWJu0w7UQFJZhHKNw==", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "1.0.9" + "@oxc-project/types": "=0.154.0", + "@rolldown/pluginutils": "^1.0.0" }, "bin": { - "rollup": "dist/bin/rollup" + "rolldown": "bin/cli.mjs" }, "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" + "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { - "@napi-rs/lzma-linux-x64-gnu": "1.5.1", - "@rollup/rollup-android-arm-eabi": "4.63.5", - "@rollup/rollup-android-arm64": "4.63.5", - "@rollup/rollup-darwin-arm64": "4.63.5", - "@rollup/rollup-darwin-x64": "4.63.5", - "@rollup/rollup-freebsd-arm64": "4.63.5", - "@rollup/rollup-freebsd-x64": "4.63.5", - "@rollup/rollup-linux-arm-gnueabihf": "4.63.5", - "@rollup/rollup-linux-arm-musleabihf": "4.63.5", - "@rollup/rollup-linux-arm64-gnu": "4.63.5", - "@rollup/rollup-linux-arm64-musl": "4.63.5", - "@rollup/rollup-linux-loong64-gnu": "4.63.5", - "@rollup/rollup-linux-loong64-musl": "4.63.5", - "@rollup/rollup-linux-ppc64-gnu": "4.63.5", - "@rollup/rollup-linux-ppc64-musl": "4.63.5", - "@rollup/rollup-linux-riscv64-gnu": "4.63.5", - "@rollup/rollup-linux-riscv64-musl": "4.63.5", - "@rollup/rollup-linux-s390x-gnu": "4.63.5", - "@rollup/rollup-linux-x64-gnu": "4.63.5", - "@rollup/rollup-linux-x64-musl": "4.63.5", - "@rollup/rollup-openbsd-x64": "4.63.5", - "@rollup/rollup-openharmony-arm64": "4.63.5", - "@rollup/rollup-win32-arm64-msvc": "4.63.5", - "@rollup/rollup-win32-ia32-msvc": "4.63.5", - "@rollup/rollup-win32-x64-gnu": "4.63.5", - "@rollup/rollup-win32-x64-msvc": "4.63.5", - "fsevents": "~2.3.2" + "@rolldown/binding-android-arm-eabi": "1.2.14", + "@rolldown/binding-android-arm64": "1.2.14", + "@rolldown/binding-darwin-arm64": "1.2.14", + "@rolldown/binding-darwin-x64": "1.2.14", + "@rolldown/binding-freebsd-x64": "1.2.14", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.14", + "@rolldown/binding-linux-arm64-gnu": "1.2.14", + "@rolldown/binding-linux-arm64-musl": "1.2.14", + "@rolldown/binding-linux-ppc64-gnu": "1.2.14", + "@rolldown/binding-linux-s390x-gnu": "1.2.14", + "@rolldown/binding-linux-x64-gnu": "1.2.14", + "@rolldown/binding-linux-x64-musl": "1.2.14", + "@rolldown/binding-openharmony-arm64": "1.2.14", + "@rolldown/binding-win32-arm64-msvc": "1.2.14", + "@rolldown/binding-win32-x64-msvc": "1.2.14" } }, "node_modules/sax": { @@ -1525,9 +1973,9 @@ } }, "node_modules/terra-draw": { - "version": "1.36.0", - "resolved": "https://registry.npmjs.org/terra-draw/-/terra-draw-1.36.0.tgz", - "integrity": "sha512-qvfMP2t8pVJectt3VL4h9VOoRaI7NEaKsvoiU+7rXzKuyDfsc+h0wsbl0d3ru7etiVSwl+ic64YCKVdVrcqJnA==", + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/terra-draw/-/terra-draw-1.38.0.tgz", + "integrity": "sha512-h7bD5/mIN/t1qNKmPLqwZvsHnwtZpvFWo49PGA3n7CzM28lyc/xcMl85xWNOMBgF0Tq20UT06+KlBJ7g7B24rg==", "license": "MIT" }, "node_modules/terra-draw-leaflet-adapter": { @@ -1581,18 +2029,17 @@ } }, "node_modules/vite": { - "version": "7.3.6", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.6.tgz", - "integrity": "sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg==", + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.4.tgz", + "integrity": "sha512-IftLE8phJhdNRIGNEV4JCCvfNScoZQVfcXaN8TQropWGJtOHcu+iAB9pHcuGvmEb/kddw0LBe/jS8ztdC6xdiQ==", "dev": true, "license": "MIT", "dependencies": { - "esbuild": "^0.27.0 || ^0.28.0", - "fdir": "^6.5.0", - "picomatch": "^4.0.3", - "postcss": "^8.5.6", - "rollup": "^4.43.0", - "tinyglobby": "^0.2.15" + "lightningcss": "^1.33.0", + "picomatch": "^4.0.7", + "postcss": "^8.5.29", + "rolldown": "~1.2.12", + "tinyglobby": "^0.2.17" }, "bin": { "vite": "bin/vite.js" @@ -1608,9 +2055,10 @@ }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.7.1", + "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", - "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", @@ -1623,13 +2071,16 @@ "@types/node": { "optional": true }, - "jiti": { + "@vitejs/devtools": { "optional": true }, - "less": { + "esbuild": { "optional": true }, - "lightningcss": { + "jiti": { + "optional": true + }, + "less": { "optional": true }, "sass": { diff --git a/package.json b/package.json index 620524b34..45cd5df0a 100644 --- a/package.json +++ b/package.json @@ -20,14 +20,14 @@ "dependencies": { "@fontsource/roboto": "^5.3.0", "@fontsource/sansita": "^5.3.0", - "@material-symbols/svg-700": "^0.47.6", + "@material-symbols/svg-700": "^0.48.0", "@panzoom/panzoom": "^4.6.2", - "@sveltia/cms": "^0.227.3", + "@sveltia/cms": "^0.248.1", "pagefind": "^1.5.2", - "prettier": "^3.9.9" + "prettier": "^3.9.10" }, "devDependencies": { "prettier-plugin-go-template": "^0.0.15", - "vite": "7.3.6" + "vite": "8.3.4" } } diff --git a/vite.config.js b/vite.config.js index c1c956cc6..cd55575ee 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,9 +1,28 @@ import { defineConfig } from "vite"; import { resolve } from "path"; +import { readFileSync, writeFileSync } from "fs"; + +const branch = process.env.FIPGUIDE_BRANCH || "main"; + +function cmsConfigBranchPlugin() { + return { + name: "cms-config-branch", + closeBundle() { + const configPath = resolve(__dirname, "static/admin/config.yml"); + const content = readFileSync(configPath, "utf-8"); + writeFileSync( + configPath, + content.replace(/^(\s*branch:\s*).+$/m, `$1${branch}`), + ); + }, + }; +} export default defineConfig({ root: "assets/admin", base: "./", + publicDir: resolve(__dirname, "assets/admin/static"), + plugins: [cmsConfigBranchPlugin()], build: { outDir: resolve(__dirname, "static/admin"), emptyOutDir: true,