From f638ab5618c5e8eaa4fe618229d91a5dbb828a04 Mon Sep 17 00:00:00 2001 From: Colin Darie Date: Tue, 5 Nov 2024 11:30:42 +0100 Subject: [PATCH 01/21] chore: bump dsfr 1.11.2 => 1.12.1 --- bun.lockb | Bin 554916 -> 580300 bytes package.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/bun.lockb b/bun.lockb index 1208c65fc40a688acf29c81c32d6911642824753..dacbd6c63cea1767681fd743c2612d01d776349b 100755 GIT binary patch delta 60365 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�R+f{=PnNG(E2Y@>2b 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 b9GoH6aIz17FNmM$eFQ#og{VM#n;iKEH0yJ< diff --git a/package.json b/package.json index b43e16b07..eb9a004c2 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "@coldwired/utils": "^0.13.0", "@formatjs/intl-listformat": "^7.5.7", "@frsource/autoresize-textarea": "^2.0.87", - "@gouvfr/dsfr": "^1.11.2", + "@gouvfr/dsfr": "^1.12.1", "@graphiql/plugin-explorer": "^3.1.0", "@graphiql/toolkit": "^0.9.1", "@heroicons/react": "^1.0.6", From c6ab4f7f91fcf128cb81a4a17c3319945863971e Mon Sep 17 00:00:00 2001 From: Colin Darie Date: Tue, 5 Nov 2024 11:30:56 +0100 Subject: [PATCH 02/21] chore(footer): update footer links order --- app/views/shared/_footer_content_list.html.haml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/shared/_footer_content_list.html.haml b/app/views/shared/_footer_content_list.html.haml index af1f5f533..95f1a2c50 100644 --- a/app/views/shared/_footer_content_list.html.haml +++ b/app/views/shared/_footer_content_list.html.haml @@ -1,9 +1,9 @@ %ul.fr-footer__content-list - %li.fr-footer__content-item - = link_to t('users.procedure_footer.official_links.legifrance.title'), t('users.procedure_footer.official_links.legifrance.url'), title: new_tab_suffix(t('users.procedure_footer.official_links.legifrance.title')), class: 'fr-footer__content-link', hreflang: 'fr', **external_link_attributes %li.fr-footer__content-item = link_to t('users.procedure_footer.official_links.gouvernement.title'), t('users.procedure_footer.official_links.gouvernement.url'), title: new_tab_suffix(t('users.procedure_footer.official_links.gouvernement.title')), class: 'fr-footer__content-link', hreflang:'fr', **external_link_attributes %li.fr-footer__content-item = link_to t('users.procedure_footer.official_links.service_public.title'), t('users.procedure_footer.official_links.service_public.url'), title: new_tab_suffix(t('users.procedure_footer.official_links.service_public.title')), class: 'fr-footer__content-link', hreflang:'fr', **external_link_attributes + %li.fr-footer__content-item + = link_to t('users.procedure_footer.official_links.legifrance.title'), t('users.procedure_footer.official_links.legifrance.url'), title: new_tab_suffix(t('users.procedure_footer.official_links.legifrance.title')), class: 'fr-footer__content-link', hreflang: 'fr', **external_link_attributes %li.fr-footer__content-item = link_to t('users.procedure_footer.official_links.data_gouv.title'), t('users.procedure_footer.official_links.data_gouv.url'), title: new_tab_suffix(t('users.procedure_footer.official_links.data_gouv.title')), class: 'fr-footer__content-link', hreflang:'fr', **external_link_attributes From 8b68350e0cbebf058d2d9706674364d928e0d23a Mon Sep 17 00:00:00 2001 From: Colin Darie Date: Tue, 5 Nov 2024 11:37:50 +0100 Subject: [PATCH 03/21] fix: betagouv => demarches-simplifiees github organization --- config/locales/links.en.yml | 2 +- config/locales/links.fr.yml | 2 +- publiccode.yml | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/config/locales/links.en.yml b/config/locales/links.en.yml index 1fa94d1e8..7c10f76c6 100644 --- a/config/locales/links.en.yml +++ b/config/locales/links.en.yml @@ -61,7 +61,7 @@ en: security: label: "Security" title: "Security policy and procedures" - url: "https://github.com/betagouv/demarches-simplifiees.fr/blob/main/SECURITY.md" + url: 'https://github.com/demarches-simplifiees/demarches-simplifiees.fr/blob/main/SECURITY.md' carte: label: "Deployment map" title: "Deployment map by department" diff --git a/config/locales/links.fr.yml b/config/locales/links.fr.yml index 095363e27..29a1c92f5 100644 --- a/config/locales/links.fr.yml +++ b/config/locales/links.fr.yml @@ -66,7 +66,7 @@ fr: security: label: "Sécurité" title: "Politique et procédure de sécurité" - url: "https://github.com/betagouv/demarches-simplifiees.fr/blob/main/SECURITY.md" + url: 'https://github.com/demarches-simplifiees/demarches-simplifiees.fr/blob/main/SECURITY.md' stats: label: "Statistiques" carte: diff --git a/publiccode.yml b/publiccode.yml index 30d09707c..d619c45c7 100644 --- a/publiccode.yml +++ b/publiccode.yml @@ -1,13 +1,13 @@ -# This repository adheres to the publiccode.yml standard by including this +# This repository adheres to the publiccode.yml standard by including this # metadata file that makes public software easily discoverable. # More info at https://github.com/italia/publiccode.yml publiccodeYmlVersion: '0.2' name: Démarches Simplifiéees -url: 'https://github.com/betagouv/demarches-simplifiees.fr' +url: 'https://github.com/demarches-simplifiees/demarches-simplifiees.fr' landingURL: 'https://www.demarches-simplifiees.fr/' -roadmap: 'https://github.com/betagouv/demarches-simplifiees.fr/wiki/Feuille-de-route' -releaseDate: 'https://github.com/betagouv/demarches-simplifiees.fr/releases/latest' +roadmap: 'https://github.com/demarches-simplifiees/demarches-simplifiees.fr/wiki/Feuille-de-route' +releaseDate: 'https://github.com/demarches-simplifiees/demarches-simplifiees.fr/releases/latest' developmentStatus: beta softwareType: standalone/backend categories: From 35a17cc2c6f1ae968f0a651dd0f8d9b16691091d Mon Sep 17 00:00:00 2001 From: Colin Darie Date: Tue, 5 Nov 2024 18:23:14 +0100 Subject: [PATCH 04/21] refactor(dsfr): all procedures table to v1.12 --- app/assets/stylesheets/dsfr.scss | 5 + .../procedures/_detail.html.haml | 15 ++- .../administrateurs/procedures/all.html.haml | 112 ++++++++++-------- 3 files changed, 72 insertions(+), 60 deletions(-) diff --git a/app/assets/stylesheets/dsfr.scss b/app/assets/stylesheets/dsfr.scss index 6478ea3c7..a3cec9d0e 100644 --- a/app/assets/stylesheets/dsfr.scss +++ b/app/assets/stylesheets/dsfr.scss @@ -266,6 +266,11 @@ button.fr-tag-bug { white-space: nowrap; } +// Caption is bold, but all-procedures table use fr-tag in caption +.fr-table caption .fr-tag { + font-weight: normal; +} + // We remove the line height because it creates unharmonized spaces - most of all in table .fr-tags-group > li { line-height: inherit; diff --git a/app/views/administrateurs/procedures/_detail.html.haml b/app/views/administrateurs/procedures/_detail.html.haml index 99b8b1410..a2855bbf9 100644 --- a/app/views/administrateurs/procedures/_detail.html.haml +++ b/app/views/administrateurs/procedures/_detail.html.haml @@ -1,9 +1,9 @@ %tr.procedure{ id: "procedure_#{procedure.id}" } - %td + %th.fr-cell--fixed{ scope: 'row' } - title = show_detail ? 'Cacher les détails de la démarche' : 'Afficher les détails de la démarche' - icon = show_detail ? 'fr-icon-subtract-line' : 'fr-icon-add-line' - params = show_detail ? {} : { show_detail: true } - = button_to detail_admin_procedure_path(procedure["id"]), method: :post, params:, title:, class: [icon, "fr-icon--sm fr-mr-1w fr-mb-1w fr-text-action-high--blue-france fr-btn fr-btn--tertiary-no-outline" ] do + = button_to detail_admin_procedure_path(procedure["id"]), method: :post, params:, title:, class: [icon, "fr-icon--sm fr-mb-1w fr-text-action-high--blue-france fr-btn fr-btn--tertiary-no-outline" ] do = title %td - if procedure.template @@ -11,7 +11,7 @@ %abbr{ title: APPLICATION_NAME }= acronymize(APPLICATION_NAME) = procedure.libelle %td= procedure.id - %td= procedure.estimated_dossiers_count + %td.fr-cell--right= procedure.estimated_dossiers_count %td - if procedure.respond_to?(:parsed_latest_zone_labels) - procedure.parsed_latest_zone_labels.uniq.each do |zone_label| @@ -31,8 +31,7 @@ - if show_detail %tr.procedure{ id: "procedure_detail_#{procedure.id}" } - %td.fr-highlight--green-emeraude{ colspan: '8' } - .fr-container - .fr-col-6 - - procedure.administrateurs.uniq.each do |admin| - = admin.email + %td.fr-background-alt--green-emeraude{ colspan: '8' } + %ul + - procedure.administrateurs.uniq.each do |admin| + %li= admin.email diff --git a/app/views/administrateurs/procedures/all.html.haml b/app/views/administrateurs/procedures/all.html.haml index 224e59fc6..1b4c21f80 100644 --- a/app/views/administrateurs/procedures/all.html.haml +++ b/app/views/administrateurs/procedures/all.html.haml @@ -14,55 +14,63 @@ .actions .link.fr-mx-1w= link_to 'Voir les administrateurs', administrateurs_admin_procedures_path(@filter.params), class: 'fr-btn fr-btn--secondary' .link.fr-mx-1w{ "data-turbo": "false" }= link_to 'Exporter les résultats', all_admin_procedures_path(@filter.params.merge(format: :xlsx)), class: 'fr-btn fr-btn--secondary' - .fr-table.fr-table--bordered - %table#all-demarches - %caption - = "#{@procedures.total_count} #{t('pluralize.procedures', count: @procedures.total_count)}" - %span.hidden.spinner{ 'aria-hidden': 'true', 'data-turbo-target': 'spinner' } - - if @filter.libelle - .selected-query.fr-mb-2w - = link_to @filter.libelle, all_admin_procedures_path(@filter.without(:libelle)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' - - if @filter.service_siret - .selected-query.fr-mb-2w - = link_to @filter.service_siret, all_admin_procedures_path(@filter.without(:service_siret)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' - - if @filter.service_departement - .selected-query.fr-mb-2w - = link_to "#{@filter.service_departement} – #{APIGeoService.departement_name(@filter.service_departement)}", all_admin_procedures_path(@filter.without(:service_departement)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' - - if @filter.selected_zones.present? - .selected-zones.fr-mb-2w - - @filter.selected_zones.each do |zone| - = link_to zone.current_label, all_admin_procedures_path(@filter.without(:zone_ids, zone.id)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' - - if @filter.statuses.present? - .selected-statuses.fr-mb-2w - - @filter.statuses.each do |status| - = link_to status, all_admin_procedures_path(@filter.without(:statuses, status)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' - - if @filter.kind_usagers.present? - .selected-kind_usagers.fr-mb-2w - - @filter.kind_usagers.each do |kind_usager| - = link_to t(kind_usager, scope: 'activerecord.attributes.procedure.kind_usager'), all_admin_procedures_path(@filter.without(:kind_usagers, kind_usager)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' - - if @filter.tags.present? - .selected-tag.fr-mb-2w - - @filter.tags.each do |tag| - = link_to tag, all_admin_procedures_path(@filter.without(:tags, tag)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' - - params[:tags].delete(tag) - - if @filter.template? - .selected-template.fr-mb-2w - = link_to "Modèle DS", all_admin_procedures_path(@filter.without(:template)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' - - if @filter.from_publication_date.present? - .selected-from-publication-date.fr-mb-2w - = link_to "Depuis #{l(@filter.from_publication_date)}", all_admin_procedures_path(@filter.without(:from_publication_date)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' - = paginate @procedures, params: @filter.params, views_prefix: 'shared' - %thead - %tr - %th{ scope: 'col' } - %th{ scope: 'col' } Démarche - %th{ scope: 'col' } № - %th{ scope: 'col' } Nombre de dossiers - %th{ scope: 'col' } Zones - %th{ scope: 'col' } Statut - %th{ scope: 'col' } Date - %th{ scope: 'col' } Action - %tbody{ 'data-turbo': 'true' } - - @procedures.each do |procedure| - = render partial: 'detail', locals: { procedure: procedure, show_detail: false } - .fr-mt-2w= paginate @procedures, params: @filter.params, views_prefix: 'shared' + + .fr-table.fr-table--sm.fr-table--no-scroll.fr-table--bordered + .fr-table__wrapper + .fr-table__container + .fr-table__content + %table + %caption + = "#{@procedures.total_count} #{t('pluralize.procedures', count: @procedures.total_count)}" + %span.hidden.spinner{ 'aria-hidden': 'true', 'data-turbo-target': 'spinner' } + - if @filter.libelle + .selected-query.fr-mb-2w + = link_to @filter.libelle, all_admin_procedures_path(@filter.without(:libelle)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' + - if @filter.service_siret + .selected-query.fr-mb-2w + = link_to @filter.service_siret, all_admin_procedures_path(@filter.without(:service_siret)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' + - if @filter.service_departement + .selected-query.fr-mb-2w + = link_to "#{@filter.service_departement} – #{APIGeoService.departement_name(@filter.service_departement)}", all_admin_procedures_path(@filter.without(:service_departement)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' + - if @filter.selected_zones.present? + .selected-zones.fr-mb-2w + - @filter.selected_zones.each do |zone| + = link_to zone.current_label, all_admin_procedures_path(@filter.without(:zone_ids, zone.id)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' + - if @filter.statuses.present? + .selected-statuses.fr-mb-2w + - @filter.statuses.each do |status| + = link_to status, all_admin_procedures_path(@filter.without(:statuses, status)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' + - if @filter.kind_usagers.present? + .selected-kind_usagers.fr-mb-2w + - @filter.kind_usagers.each do |kind_usager| + = link_to t(kind_usager, scope: 'activerecord.attributes.procedure.kind_usager'), all_admin_procedures_path(@filter.without(:kind_usagers, kind_usager)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' + - if @filter.tags.present? + .selected-tag.fr-mb-2w + - @filter.tags.each do |tag| + = link_to tag, all_admin_procedures_path(@filter.without(:tags, tag)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' + - params[:tags].delete(tag) + - if @filter.template? + .selected-template.fr-mb-2w + = link_to "Modèle DS", all_admin_procedures_path(@filter.without(:template)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' + - if @filter.from_publication_date.present? + .selected-from-publication-date.fr-mb-2w + = link_to "Depuis #{l(@filter.from_publication_date)}", all_admin_procedures_path(@filter.without(:from_publication_date)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' + + %thead + %tr + %th{ role: 'columnheader' } + %th{ scope: 'col' } Démarche + %th{ scope: 'col' } № + %th{ scope: 'col' } Nombre de dossiers + %th{ scope: 'col' } Zones + %th{ scope: 'col' } Statut + %th{ scope: 'col' } Date + %th{ scope: 'col' } Action + %tbody{ 'data-turbo': 'true' } + - @procedures.each do |procedure| + = render partial: 'detail', locals: { procedure: procedure, show_detail: false } + .fr-table__footer + .fr-table__footer--start + .fr-table__footer--middle + = paginate @procedures, params: @filter.params, views_prefix: 'shared' + .fr-table__footer--end.flex-no-grow From af6dd67ceff70ce0b07b5309400750f8b219f1c7 Mon Sep 17 00:00:00 2001 From: Colin Darie Date: Tue, 5 Nov 2024 18:24:13 +0100 Subject: [PATCH 05/21] chore(css): remove legacy dsfr hacks --- app/assets/stylesheets/dsfr.scss | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/app/assets/stylesheets/dsfr.scss b/app/assets/stylesheets/dsfr.scss index a3cec9d0e..9a1bc9007 100644 --- a/app/assets/stylesheets/dsfr.scss +++ b/app/assets/stylesheets/dsfr.scss @@ -159,11 +159,6 @@ input[type='radio'] { box-shadow: 0px 0px 0px 1px $light-red; } -.fr-table table.hack-to-display-dropdown { - padding-bottom: 300px; - margin-bottom: -300px; -} - // on utilise le dropdown de sélecteur de langue pour un autre usage donc on veut retirer l'icone .fr-translate .fr-translate__btn.custom-fr-translate-no-icon::before { display: none; @@ -174,21 +169,6 @@ input[type='radio'] { width: max-content; } -button.fr-tag-bug { - background-color: $blue-france-500; - color: #ffffff; - - &:hover { - background-color: #1212ff; - color: #ffffff; - } - - .tag-dismiss { - font-size: 1rem; - margin-left: 10px; - } -} - // on applique le comportement desktop du sélecteur de langue aux terminaux de toute dimension .fr-translate .fr-menu__list { display: grid; @@ -248,13 +228,6 @@ button.fr-tag-bug { display: block; // Pour cette valeur spécifique, on récupère celle de .fr-label } -// Fix toggles having labels on 2 lines -// From upstream https://github.com/GouvernementFR/dsfr/pull/928 -// Remove it when PR is merged (v1.12 ?) -.fr-toggle label[data-fr-unchecked-label][data-fr-checked-label]::before { - word-wrap: normal; -} - // We use the DSFR badge design to highlight the email in France Connect page // but we don't want it to be uppercase .fr-badge--lowercase { From 753c6028028bca773127e83940d324cb3caa7c64 Mon Sep 17 00:00:00 2001 From: Colin Darie Date: Tue, 12 Nov 2024 14:57:09 +0100 Subject: [PATCH 06/21] chore(js): patch dsfr/table to use data attr instead of name on checkbox --- bun.lockb | Bin 580300 -> 580488 bytes package.json | 3 +++ patches/@gouvfr%2Fdsfr@1.12.1.patch | 16 ++++++++++++++++ 3 files changed, 19 insertions(+) create mode 100644 patches/@gouvfr%2Fdsfr@1.12.1.patch diff --git a/bun.lockb b/bun.lockb index dacbd6c63cea1767681fd743c2612d01d776349b..a3ae1b76d94a58d934a43d1abc59164e4f084ef6 100755 GIT binary patch delta 268 zcmX@JRk>rk@&rG|AC3O4{*0~uOs)RRt^O>n{;aM3Y+L==Gp(3}Znf{SV&A^Yio

  • %M>*CIad3JgaplW{r4dyOjm9Y!}J1)f~wZKln$OMa4{`rgy$_xw*FelEi QD2}`7+IV_;qdCh20QK`yp#T5? delta 100 zcmeC!u6$;z@&rFdn@0auf5ujSrdEIER)3aOf7Vuiwypl`nO02iZ?^BUV&A^Yio
  • *i6^H#i7a%WFK9yS3yA8);S>Ow#W2FbCwAJOUWK( diff --git a/package.json b/package.json index eb9a004c2..01c2be0ea 100644 --- a/package.json +++ b/package.json @@ -195,5 +195,8 @@ } } ] + }, + "patchedDependencies": { + "@gouvfr/dsfr@1.12.1": "patches/@gouvfr%2Fdsfr@1.12.1.patch" } } diff --git a/patches/@gouvfr%2Fdsfr@1.12.1.patch b/patches/@gouvfr%2Fdsfr@1.12.1.patch new file mode 100644 index 000000000..cd69bef22 --- /dev/null +++ b/patches/@gouvfr%2Fdsfr@1.12.1.patch @@ -0,0 +1,16 @@ +index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 +diff --git a/dist/component/table/table.module.js b/dist/component/table/table.module.js +index 5d61112f0cdc60ec85adc0c1a39ddabca4c332d2..0de2a3fadaaec783903def5084c4c77add3fc723 100644 +--- a/dist/component/table/table.module.js ++++ b/dist/component/table/table.module.js +@@ -157,7 +157,9 @@ class TableRow extends api.core.Instance { + } + + _handleCheckboxChange (node) { +- if (node.name === 'row-select') { ++ if (node.name === 'row-select' || ++ node.getAttribute(api.internals.ns.attr('row-select')) === 'true' ++ ) { + this.isSelected = node.checked === true; + } + } From e7768bbf4b2c7f008356ad90581ff56bfe265a72 Mon Sep 17 00:00:00 2001 From: Colin Darie Date: Tue, 12 Nov 2024 17:04:30 +0100 Subject: [PATCH 07/21] refactor(dossiers): table in new dsfr design - remove obsolete css - handle check / check all dsfr UI - min height hack does not work anymore (pending a new solution) --- app/assets/stylesheets/dossiers_table.scss | 56 +----- app/assets/stylesheets/flex.scss | 4 + app/assets/stylesheets/procedure_show.scss | 14 -- app/assets/stylesheets/table.scss | 11 -- .../batch_select_more_component.html.haml | 4 +- .../deleted_dossiers_component.html.haml | 2 +- .../column_table_header_component.rb | 1 - .../controllers/batch_operation_controller.ts | 10 +- app/javascript/shared/dsfr.ts | 1 + app/views/experts/avis/procedure.html.haml | 38 ++-- .../instructeurs/procedures/show.html.haml | 165 +++++++++------- app/views/recherche/_hidden_dossier.html.haml | 4 +- app/views/recherche/index.html.haml | 183 +++++++++--------- app/views/root/patron.html.haml | 15 -- app/views/shared/archives/_table.html.haml | 2 +- 15 files changed, 228 insertions(+), 282 deletions(-) diff --git a/app/assets/stylesheets/dossiers_table.scss b/app/assets/stylesheets/dossiers_table.scss index 4cea963a4..4fca583c1 100644 --- a/app/assets/stylesheets/dossiers_table.scss +++ b/app/assets/stylesheets/dossiers_table.scss @@ -1,70 +1,20 @@ @import 'colors'; @import 'constants'; -.table.dossiers-table { - font-size: 14px; - - th { - padding: (2 * $default-spacer) $default-spacer; - } - +.dossiers-table { a { background-image: none; // remove DSFR underline } - .caret-icon { - vertical-align: top; - margin-top: 9px; - margin-left: 4px; - } - - .cell-link { - // In order to have identical height in the table header and the table rows, - // we compensate for the height difference between the biggest element of the header - // (the Personnaliser button, 38px) and the biggest cell-link element of the rows (the label, 28px) - padding: calc((2 * #{$default-spacer}) + ((38px - 28px) / 2)) - $default-spacer; - display: block; - } - - .deleted-cell { - padding: (2 * $default-spacer) $default-spacer; - } - - .notification-col { - a { - font-size: 16px; - } - } - - .number-col, .fr-badge { white-space: nowrap; } - .text-center { - text-align: center; - } - - .status-col { - width: 175px; - } - - .updated-at-col { - width: 110px; - } - .follow-col { - width: 450px; - .fr-btn { margin-bottom: 0; } } - - .no-border { - background-image: none; - } } .file-hidden-by-user { @@ -74,7 +24,3 @@ background-color: rgba(242, 137, 0, 0.6) !important; } } - -table.display-table { - display: table; -} diff --git a/app/assets/stylesheets/flex.scss b/app/assets/stylesheets/flex.scss index 9e4ccf324..a21a9c36c 100644 --- a/app/assets/stylesheets/flex.scss +++ b/app/assets/stylesheets/flex.scss @@ -56,6 +56,10 @@ flex-grow: 1; } +.flex-no-grow { + flex-grow: 0; +} + .flex-no-shrink { flex-shrink: 0; } diff --git a/app/assets/stylesheets/procedure_show.scss b/app/assets/stylesheets/procedure_show.scss index 84ed620fb..86642f285 100644 --- a/app/assets/stylesheets/procedure_show.scss +++ b/app/assets/stylesheets/procedure_show.scss @@ -9,15 +9,6 @@ } #procedure-show { - .titre-dossiers { - text-align: center; - } - - .dossiers-table { - margin-top: $default-spacer; - margin-bottom: 3 * $default-spacer; - } - .procedure-actions { margin-left: auto; flex-shrink: 0; @@ -48,9 +39,4 @@ .fr-ds-combobox__multiple { margin-bottom: $default-fields-spacer; } - - // fix/dsfr - .fr-checkbox-group.fix-dsfr-notified-toggle-component { - margin-top: -0.5rem; - } } diff --git a/app/assets/stylesheets/table.scss b/app/assets/stylesheets/table.scss index 8a22ede37..7043823a4 100644 --- a/app/assets/stylesheets/table.scss +++ b/app/assets/stylesheets/table.scss @@ -27,12 +27,6 @@ } } - &.hoverable { - tbody tr:hover { - background-color: var(--hover); - } - } - &.vertical { font-size: 16px; line-height: 22px; @@ -66,8 +60,3 @@ } } } - -// Hacky css to display dropdown "customize table" for table with only 1 or 2 lines -table.min-height-300 { - min-height: 300px; -} diff --git a/app/components/dossiers/batch_select_more_component/batch_select_more_component.html.haml b/app/components/dossiers/batch_select_more_component/batch_select_more_component.html.haml index 69f772299..c8fc98b50 100644 --- a/app/components/dossiers/batch_select_more_component/batch_select_more_component.html.haml +++ b/app/components/dossiers/batch_select_more_component/batch_select_more_component.html.haml @@ -1,5 +1,5 @@ -%tr#js_batch_select_more.fr-background-alt--blue-france.hidden - %td.fr-py-2w.text-center{ colspan: 100 } +%tr#js_batch_select_more.hidden + %td.fr-py-2w.fr-cell--center.fr-background-alt--blue-france{ colspan: 100 } #not_selected %p{ role: "status" } = t('.pagination_files_selected_html') diff --git a/app/components/dossiers/deleted_dossiers_component/deleted_dossiers_component.html.haml b/app/components/dossiers/deleted_dossiers_component/deleted_dossiers_component.html.haml index d32eac862..c1d03d08c 100644 --- a/app/components/dossiers/deleted_dossiers_component/deleted_dossiers_component.html.haml +++ b/app/components/dossiers/deleted_dossiers_component/deleted_dossiers_component.html.haml @@ -20,7 +20,7 @@ %table %thead %tr - %th.number-col N° dossier + %th N° dossier %th Libellé de la démarche %th Raison de suppression %th Date de suppression diff --git a/app/components/instructeurs/column_table_header_component.rb b/app/components/instructeurs/column_table_header_component.rb index 4cb90dd93..61d485f4b 100644 --- a/app/components/instructeurs/column_table_header_component.rb +++ b/app/components/instructeurs/column_table_header_component.rb @@ -10,7 +10,6 @@ class Instructeurs::ColumnTableHeaderComponent < ApplicationComponent private def classname(column) - return 'status-col' if column.dossier_state? return 'number-col' if column.dossier_id? return 'sva-col' if column.column == 'sva_svr_decision_on' end diff --git a/app/javascript/controllers/batch_operation_controller.ts b/app/javascript/controllers/batch_operation_controller.ts index 972552ad8..4866262a5 100644 --- a/app/javascript/controllers/batch_operation_controller.ts +++ b/app/javascript/controllers/batch_operation_controller.ts @@ -17,10 +17,16 @@ export class BatchOperationController extends ApplicationController { onCheckAll(event: Event) { const target = event.target as HTMLInputElement; - this.inputTargets.forEach((e) => (e.checked = target.checked)); + this.inputTargets.forEach((e) => { + e.checked = target.checked; + e.dispatchEvent(new Event('change')); // dispatch change for dsfr checkbox behavior + }); + this.toggleSubmitButtonWhenNeeded(); - const pagination = document.querySelector('tfoot .fr-pagination'); + const pagination = document.querySelector( + '.fr-table__footer .fr-pagination' + ); if (pagination) { displayNotice(this.inputTargets); } diff --git a/app/javascript/shared/dsfr.ts b/app/javascript/shared/dsfr.ts index 4a342376d..93d6bb1f0 100644 --- a/app/javascript/shared/dsfr.ts +++ b/app/javascript/shared/dsfr.ts @@ -4,6 +4,7 @@ import '@gouvfr/dsfr/dist/scheme/scheme.module'; import '@gouvfr/dsfr/dist/component/display/display.module'; import '@gouvfr/dsfr/dist/component/toggle/toggle.module'; import '@gouvfr/dsfr/dist/component/breadcrumb/breadcrumb.module'; +import '@gouvfr/dsfr/dist/component/checkbox/checkbox.module'; import '@gouvfr/dsfr/dist/component/modal/modal.module'; import '@gouvfr/dsfr/dist/component/navigation/navigation.module'; import '@gouvfr/dsfr/dist/component/segmented/segmented.module'; diff --git a/app/views/experts/avis/procedure.html.haml b/app/views/experts/avis/procedure.html.haml index 604302fc8..e99b39d37 100644 --- a/app/views/experts/avis/procedure.html.haml +++ b/app/views/experts/avis/procedure.html.haml @@ -29,20 +29,28 @@ .fr-container - if @avis.present? - %table.table.dossiers-table.hoverable - %thead - %tr - %th.number-col Nº dossier - %th Demandeur - %th Démarche - %tbody - - @avis.each do |avis| - %tr - %td.number-col - = link_to(expert_avis_path(avis.procedure, avis), class: 'cell-link') do - = avis.dossier.id - %td= link_to(avis.dossier.user_email_for(:display), expert_avis_path(avis.procedure, avis), class: 'cell-link') - %td= link_to(avis.procedure.libelle, expert_avis_path(avis.procedure, avis), class: 'cell-link') - = paginate @avis, views_prefix: 'shared' + .fr-table.fr-table--no-scroll.fr-table--bordered + .fr-table__wrapper + .fr-table__container + .fr-table__content + %table.dossiers-table + %thead + %tr + %th Nº dossier + %th Demandeur + %th Démarche + %tbody + - @avis.each do |avis| + %tr + %td.number-col + = link_to(expert_avis_path(avis.procedure, avis), class: 'cell-link') do + = avis.dossier.id + %td= link_to(avis.dossier.user_email_for(:display), expert_avis_path(avis.procedure, avis), class: 'cell-link') + %td= link_to(avis.procedure.libelle, expert_avis_path(avis.procedure, avis), class: 'cell-link') + .fr-table__footer + .fr-table__footer--start + .fr-table__footer--middle + = paginate @avis, views_prefix: 'shared' + .fr-table__footer--end.flex-no-grow - else %h2.empty-text Aucun avis diff --git a/app/views/instructeurs/procedures/show.html.haml b/app/views/instructeurs/procedures/show.html.haml index 9fb78de03..62be96c8d 100644 --- a/app/views/instructeurs/procedures/show.html.haml +++ b/app/views/instructeurs/procedures/show.html.haml @@ -82,92 +82,109 @@ = render batch_operation_component .fr-table.fr-table--bordered - %table.table.dossiers-table.hoverable.min-height-300 - %thead - %tr - - if batch_operation_component.render? - %th.text-center - %input{ type: "checkbox", disabled: @disable_checkbox_all, checked: @disable_checkbox_all, data: { action: "batch-operation#onCheckAll" }, id: dom_id(BatchOperation.new, :checkbox_all), aria: { label: t('views.instructeurs.dossiers.select_all') } } + .fr-table__wrapper + .fr-table__container + .fr-table__content + %table#table-dossiers.dossiers-table + %thead + %tr + - if batch_operation_component.render? + %th.fr-cell--fixed{ role: 'columnheader', scope: 'col' } + .fr-checkbox-group.fr-checkbox-group--sm + %input{ type: "checkbox", disabled: @disable_checkbox_all, checked: @disable_checkbox_all, data: { action: "batch-operation#onCheckAll" }, id: dom_id(BatchOperation.new, :checkbox_all), aria: { label: t('views.instructeurs.dossiers.select_all') } } + = label_tag dom_id(BatchOperation.new, :checkbox_all), "Sélectionner tous les dossiers", class: 'fr-label' - = render Instructeurs::ColumnTableHeaderComponent.new(procedure_presentation: @procedure_presentation) + = render Instructeurs::ColumnTableHeaderComponent.new(procedure_presentation: @procedure_presentation) - %th.follow-col - Actions + %th.follow-col{ scope: 'col' } + Actions - %th.text-right - = render Dropdown::MenuComponent.new(wrapper: :span, button_options: { class: ['fr-btn--sm', 'fr-btn--tertiary-no-outline', 'fr-btn--icon-right', 'fr-icon-settings-5-line'] }, menu_options: { id: 'custom-menu' }) do |menu| - - menu.with_button_inner_html do - = t('views.instructeurs.dossiers.personalize') - - menu.with_form do - = render Instructeurs::ColumnPickerComponent.new(procedure: @procedure, procedure_presentation: @procedure_presentation) + %th.fr-cell--right + = render Dropdown::MenuComponent.new(wrapper: :span, button_options: { class: ['fr-btn--sm', 'fr-btn--tertiary-no-outline', 'fr-btn--icon-right', 'fr-icon-settings-5-line'] }, menu_options: { id: 'custom-menu' }) do |menu| + - menu.with_button_inner_html do + = t('views.instructeurs.dossiers.personalize') + - menu.with_form do + = render Instructeurs::ColumnPickerComponent.new(procedure: @procedure, procedure_presentation: @procedure_presentation) - %tbody - = render Dossiers::BatchSelectMoreComponent.new(dossiers_count: @dossiers_count, filtered_sorted_ids: @filtered_sorted_ids) + %tbody + = render Dossiers::BatchSelectMoreComponent.new(dossiers_count: @dossiers_count, filtered_sorted_ids: @filtered_sorted_ids) - - @projected_dossiers.each do |p| - - path = instructeur_dossier_path(@procedure, p.dossier_id) - %tr{ class: [p.hidden_by_user_at.present? && "file-hidden-by-user"] } - - if batch_operation_component.render? - %td.text-center - - if p.batch_operation_id.present? - = check_box_tag :"batch_operation[dossier_ids][]", p.dossier_id, true, disabled: true, id: dom_id(BatchOperation.new, "checkbox_#{p.dossier_id}"), aria: { label: t('views.instructeurs.dossiers.batch_operation.disabled', dossier_id: p.dossier_id) } - - else - = check_box_tag :"batch_operation[dossier_ids][]", p.dossier_id, false, data: { batch_operation_target: "input", action: "batch-operation#onCheckOne", operations: batch_operation_component.operations_for_dossier(p).join(',') }, form: dom_id(BatchOperation.new), id: dom_id(BatchOperation.new, "checkbox_#{p.dossier_id}"), aria: { label: t('views.instructeurs.dossiers.batch_operation.enabled', dossier_id: p.dossier_id) } + - @projected_dossiers.each do |p| + - path = instructeur_dossier_path(@procedure, p.dossier_id) + %tr{ class: class_names("file-hidden-by-user" => p.hidden_by_user_at.present?), id: "table-dossiers-row-#{p.dossier_id}", "aria-selected" => "false", "data-row-key" => p.dossier_id } + - if batch_operation_component.render? + %th.fr-cell--fixed{ scope: 'row' } + .fr-checkbox-group.fr-checkbox-group--sm + - if p.batch_operation_id.present? + = check_box_tag "batch_operation[dossier_ids][]", p.dossier_id, true, disabled: true, + id: dom_id(BatchOperation.new, "checkbox_#{p.dossier_id}"), + aria: { label: t('views.instructeurs.dossiers.batch_operation.disabled', dossier_id: p.dossier_id) }, + data: { "fr-row-select" => "true" } + - else + = check_box_tag "batch_operation[dossier_ids][]", p.dossier_id, false, + data: { batch_operation_target: "input", action: "batch-operation#onCheckOne", operations: batch_operation_component.operations_for_dossier(p).join(','), "fr-row-select" => "true" }, + form: dom_id(BatchOperation.new), id: dom_id(BatchOperation.new, "checkbox_#{p.dossier_id}"), + aria: { label: t('views.instructeurs.dossiers.batch_operation.enabled', dossier_id: p.dossier_id) } + = label_tag dom_id(BatchOperation.new, "checkbox_#{p.dossier_id}"), "Sélectionner le dossier #{p.dossier_id}", class: 'fr-label' - %td.number-col - - if p.hidden_by_administration_at.present? - %span.cell-link= p.dossier_id - - else - %a.cell-link.relative{ href: path } - = p.dossier_id - - if @not_archived_notifications_dossier_ids.include?(p.dossier_id) - %span.notifications{ 'aria-label': 'notifications' } + %td.number-col + - if p.hidden_by_administration_at.present? + %span.cell-link= p.dossier_id + - else + %a.cell-link.relative{ href: path } + = p.dossier_id + - if @not_archived_notifications_dossier_ids.include?(p.dossier_id) + %span.notifications{ 'aria-label': 'notifications' } - - p.columns.each do |column| - %td - - if p.hidden_by_administration_at.present? - %span.cell-link - = column.is_a?(Hash) ? tags_label(column[:value]) : column - - if p.hidden_by_user_at.present? - = "- #{t("views.instructeurs.dossiers.deleted_reason.#{p.hidden_by_reason}")}" - - else - %a.cell-link{ href: path } - = column.is_a?(Hash) ? tags_label(column[:value]) : column - = "- #{t("views.instructeurs.dossiers.deleted_reason.#{p.hidden_by_reason}")}" if p.hidden_by_user_at.present? + - p.columns.each do |column| + %td + - if p.hidden_by_administration_at.present? + %span.cell-link + = column.is_a?(Hash) ? tags_label(column[:value]) : column + - if p.hidden_by_user_at.present? + = "- #{t("views.instructeurs.dossiers.deleted_reason.#{p.hidden_by_reason}")}" + - else + %a.cell-link{ href: path } + = column.is_a?(Hash) ? tags_label(column[:value]) : column + = "- #{t("views.instructeurs.dossiers.deleted_reason.#{p.hidden_by_reason}")}" if p.hidden_by_user_at.present? - %td.status-col - - status = [status_badge(p.state)] - - if p.pending_correction? - - status << pending_correction_badge(:for_instructeur, html_class: "fr-mt-1v") - - elsif p.state.to_sym == :en_construction && p.resolved_corrections? - - status << correction_resolved_badge(html_class: "fr-mt-1v") - = link_to_if(p.hidden_by_administration_at.blank?, safe_join(status), path, class: class_names("cell-link": true, "fr-py-0": status.many?)) + %td + - status = [status_badge(p.state)] + - if p.pending_correction? + - status << pending_correction_badge(:for_instructeur, html_class: "fr-mt-1v") + - elsif p.state.to_sym == :en_construction && p.resolved_corrections? + - status << correction_resolved_badge(html_class: "fr-mt-1v") + = link_to_if(p.hidden_by_administration_at.blank?, safe_join(status), path, class: "cell-link flex column") - - if @procedure.sva_svr_enabled? - %td - %span.cell-link - = link_to_if p.hidden_by_administration_at.blank?, render(Instructeurs::SVASVRDecisionBadgeComponent.new(projection_or_dossier: p, procedure: @procedure)), path + - if @procedure.sva_svr_enabled? + %td + %span.cell-link + = link_to_if p.hidden_by_administration_at.blank?, render(Instructeurs::SVASVRDecisionBadgeComponent.new(projection_or_dossier: p, procedure: @procedure)), path - %td.follow-col{ colspan:'2' } - %ul.inline.fr-btns-group.fr-btns-group--sm.fr-btns-group--inline.fr-btns-group--icon-right - = render partial: 'instructeurs/procedures/dossier_actions', locals: { procedure_id: @procedure.id, - dossier_id: p.dossier_id, - state: p.state, - archived: p.archived, - dossier_is_followed: @followed_dossiers_id.include?(p.dossier_id), - close_to_expiration: @statut == 'expirant', - hidden_by_administration: @statut == 'supprimes', - hidden_by_expired: p.hidden_by_reason == 'expired', - sva_svr: @procedure.sva_svr_enabled?, - has_blocking_pending_correction: @procedure.feature_enabled?(:blocking_pending_correction) && p.pending_correction?, - turbo: false, - with_menu: false } + %td.follow-col + %ul.fr-btns-group.fr-btns-group--lg.fr-btns-group--inline-lg.fr-btns-group--icon-right + = render partial: 'instructeurs/procedures/dossier_actions', locals: { procedure_id: @procedure.id, + dossier_id: p.dossier_id, + state: p.state, + archived: p.archived, + dossier_is_followed: @followed_dossiers_id.include?(p.dossier_id), + close_to_expiration: @statut == 'expirant', + hidden_by_administration: @statut == 'supprimes', + hidden_by_expired: p.hidden_by_reason == 'expired', + sva_svr: @procedure.sva_svr_enabled?, + has_blocking_pending_correction: @procedure.feature_enabled?(:blocking_pending_correction) && p.pending_correction?, + turbo: false, + with_menu: false } - %tfoot - %tr - %td.force-table-100{ colspan: @procedure_presentation.displayed_fields_for_headers.size + 2 } - = paginate @filtered_sorted_paginated_ids, views_prefix: 'shared' + .fr-table__footer + .fr-table__footer--start + %p.fr-table__detail + = number_with_delimiter @dossiers_count + = t('activerecord.models.dossier', count: @dossiers_count).downcase + .fr-table__footer--middle + = paginate @filtered_sorted_paginated_ids, views_prefix: 'shared' + .fr-table__footer--end.flex-no-grow - else %h2.empty-text diff --git a/app/views/recherche/_hidden_dossier.html.haml b/app/views/recherche/_hidden_dossier.html.haml index 142a3845a..6f72ce7cb 100644 --- a/app/views/recherche/_hidden_dossier.html.haml +++ b/app/views/recherche/_hidden_dossier.html.haml @@ -9,5 +9,5 @@ = user_email = "- #{t('views.instructeurs.dossiers.deleted_by_administration')}" if p.hidden_by_administration_at.present? -%td.status-col - %p.cell-link= status_badge(p.state) +%td + %p.cell-link.flex.column= status_badge(p.state) diff --git a/app/views/recherche/index.html.haml b/app/views/recherche/index.html.haml index bb2964eb5..1f4f2ecbb 100644 --- a/app/views/recherche/index.html.haml +++ b/app/views/recherche/index.html.haml @@ -9,108 +9,113 @@ .fr-alert.fr-alert--info.fr-alert--sm.fr-mt-3w = p t('views.instructeurs.search.deleted_dossier', dossier_id: @deleted_dossier.dossier_id, procedure_libelle: @deleted_dossier.procedure.libelle, deleted_at: l(@deleted_dossier.deleted_at)) - .page-title - Résultat de la recherche : - = t('pluralize.dossier_trouve', count: @dossiers_count) - - if @projected_dossiers.present? - = paginate @paginated_ids, views_prefix: 'shared' - .fr-table.fr-table--bordered - %table.table.dossiers-table.hoverable - %thead - %tr - %th.number-col Nº dossier - %th Démarche - %th Demandeur - %th.status-col Statut - %th.follow-col - %tbody - - @projected_dossiers.each do |p| - - procedure_libelle, user_email, procedure_id = p.columns - - instructeur_dossier = @instructeur_dossiers_ids.include?(p.dossier_id) - - expert_dossier = @dossier_avis_ids_h[p.dossier_id].present? - - hidden_by_administration = p.hidden_by_administration_at.present? - - instructeur_and_expert_dossier = instructeur_dossier && expert_dossier - - path = instructeur_dossier ? instructeur_dossier_path(procedure_id, p.dossier_id) : expert_avis_path(procedure_id, @dossier_avis_ids_h[p.dossier_id]) + .fr-table.fr-table--no-scroll.fr-table--bordered + .fr-table__wrapper + .fr-table__container + .fr-table__content + %table.dossiers-table + %caption + Résultat de la recherche : + = t('pluralize.dossier_trouve', count: @dossiers_count) + %thead + %tr + %th Nº dossier + %th Démarche + %th Demandeur + %th Statut + %th.follow-col + %tbody + - @projected_dossiers.each do |p| + - procedure_libelle, user_email, procedure_id = p.columns + - instructeur_dossier = @instructeur_dossiers_ids.include?(p.dossier_id) + - expert_dossier = @dossier_avis_ids_h[p.dossier_id].present? + - hidden_by_administration = p.hidden_by_administration_at.present? + - instructeur_and_expert_dossier = instructeur_dossier && expert_dossier + - path = instructeur_dossier ? instructeur_dossier_path(procedure_id, p.dossier_id) : expert_avis_path(procedure_id, @dossier_avis_ids_h[p.dossier_id]) - %tr{ class: [p.hidden_by_administration_at.present? && "file-hidden-by-user"] } - - if instructeur_and_expert_dossier - %td.number-col - .cell-link.relative - = p.dossier_id - - if @notifications_dossier_ids.include?(p.dossier_id) - %span.notifications{ 'aria-label': 'notifications' } - %td - .cell-link= procedure_libelle - %td - .cell-link= user_email - %td.status-col - .cell-link= status_badge(p.state) + %tr{ class: [p.hidden_by_administration_at.present? && "file-hidden-by-user"] } + - if instructeur_and_expert_dossier + %td.number-col + .cell-link.relative + = p.dossier_id + - if @notifications_dossier_ids.include?(p.dossier_id) + %span.notifications{ 'aria-label': 'notifications' } + %td + .cell-link= procedure_libelle + %td + .cell-link= user_email + %td + .cell-link.flex.column= status_badge(p.state) - - elsif hidden_by_administration - = render partial: "recherche/hidden_dossier", locals: {p: p, procedure_libelle: procedure_libelle, user_email: user_email} + - elsif hidden_by_administration + = render partial: "recherche/hidden_dossier", locals: {p: p, procedure_libelle: procedure_libelle, user_email: user_email} - - else - %td.number-col - %a.cell-link.relative{ href: path } - = p.dossier_id - - if @notifications_dossier_ids.include?(p.dossier_id) - %span.notifications{ 'aria-label': 'notifications' } + - else + %td.number-col + %a.cell-link.relative{ href: path } + = p.dossier_id + - if @notifications_dossier_ids.include?(p.dossier_id) + %span.notifications{ 'aria-label': 'notifications' } - %td - %a.cell-link{ href: path }= procedure_libelle + %td + %a.cell-link{ href: path }= procedure_libelle - %td - %a.cell-link{ href: path }= user_email + %td + %a.cell-link{ href: path }= user_email - %td.status-col - %a.cell-link{ href: path }= status_badge(p.state) + %td + %a.cell-link.flex.column{ href: path }= status_badge(p.state) - - if instructeur_dossier && expert_dossier - %td.follow-col - = render Dropdown::MenuComponent.new(wrapper: :div, button_options: {class: ['fr-btn--sm']}) do |menu| - - menu.with_button_inner_html do - Actions + - if instructeur_dossier && expert_dossier + %td.follow-col + = render Dropdown::MenuComponent.new(wrapper: :div, button_options: {class: ['fr-btn--sm']}) do |menu| + - menu.with_button_inner_html do + Actions - - menu.with_item do - = link_to(instructeur_dossier_path(procedure_id, p.dossier_id), role: 'menuitem') do - = dsfr_icon('fr-icon-file-text-fill', :sm) - .dropdown-description - Voir le dossier + - menu.with_item do + = link_to(instructeur_dossier_path(procedure_id, p.dossier_id), role: 'menuitem') do + = dsfr_icon('fr-icon-file-text-fill', :sm) + .dropdown-description + Voir le dossier - - menu.with_item do - = link_to(expert_avis_path(procedure_id, @dossier_avis_ids_h[p.dossier_id]), role: 'menuitem') do - = dsfr_icon('fr-icon-chat-3-fill', :sm) - .dropdown-description - Donner mon avis + - menu.with_item do + = link_to(expert_avis_path(procedure_id, @dossier_avis_ids_h[p.dossier_id]), role: 'menuitem') do + = dsfr_icon('fr-icon-chat-3-fill', :sm) + .dropdown-description + Donner mon avis - - elsif instructeur_dossier - - if hidden_by_administration - %td.follow-col - = link_to restore_instructeur_dossier_path(procedure_id, p.dossier_id), method: :patch, class: "button primary" do - = t('views.instructeurs.dossiers.restore') + - elsif instructeur_dossier + - if hidden_by_administration + %td.follow-col + = link_to restore_instructeur_dossier_path(procedure_id, p.dossier_id), method: :patch, class: "button primary" do + = t('views.instructeurs.dossiers.restore') - - else - %td.follow-col - %ul.inline.fr-btns-group.fr-btns-group--sm.fr-btns-group--inline.fr-btns-group--icon-right - = render partial: "instructeurs/procedures/dossier_actions", - locals: { procedure_id: procedure_id, - dossier_id: p.dossier_id, - state: p.state, - archived: p.archived, - dossier_is_followed: @followed_dossiers_id.include?(p.dossier_id), - close_to_expiration: nil, - hidden_by_administration: nil, - hidden_by_expired: nil, - sva_svr: p.sva_svr_decision_on.present?, - has_blocking_pending_correction: p.pending_correction? && Flipper.enabled?(:blocking_pending_correction, ProcedureFlipperActor.new(procedure_id)), - turbo: false, - with_menu: false } + - else + %td.follow-col + %ul.fr-btns-group.fr-btns-group--sm.fr-btns-group--inline-lg.fr-btns-group--icon-right + = render partial: "instructeurs/procedures/dossier_actions", + locals: { procedure_id: procedure_id, + dossier_id: p.dossier_id, + state: p.state, + archived: p.archived, + dossier_is_followed: @followed_dossiers_id.include?(p.dossier_id), + close_to_expiration: nil, + hidden_by_administration: nil, + hidden_by_expired: nil, + sva_svr: p.sva_svr_decision_on.present?, + has_blocking_pending_correction: p.pending_correction? && Flipper.enabled?(:blocking_pending_correction, ProcedureFlipperActor.new(procedure_id)), + turbo: false, + with_menu: false } - - else - %td - = paginate @paginated_ids, views_prefix: 'shared' + - else + %td + .fr-table__footer + .fr-table__footer--start + .fr-table__footer--middle + = paginate @paginated_ids, views_prefix: 'shared' + .fr-table__footer--end - else - %h2 Aucun dossier correspondant à votre recherche n’a été trouvé + %h2.fr-h4.fr-my-4w Aucun dossier correspondant à votre recherche n’a été trouvé diff --git a/app/views/root/patron.html.haml b/app/views/root/patron.html.haml index e6b2dd10e..64d1ab9ce 100644 --- a/app/views/root/patron.html.haml +++ b/app/views/root/patron.html.haml @@ -180,21 +180,6 @@ %td Table Data 3 %td Table Data 4 - %h2 Hoverable (.table.hoverable) - - %table.table.hoverable - %thead - %tr - %th Header 1 - %th Header 2 - %tbody - %tr - %td Table Data 1 - %td Table Data 2 - %tr - %td Table Data 3 - %td Table Data 4 - %h2 Vertical layout (.table.vertical) %table.table.vertical diff --git a/app/views/shared/archives/_table.html.haml b/app/views/shared/archives/_table.html.haml index 704c078db..dcfd4be49 100644 --- a/app/views/shared/archives/_table.html.haml +++ b/app/views/shared/archives/_table.html.haml @@ -1,4 +1,4 @@ -%table.table.hoverable.archive-table +%table.archive-table %thead %tr %th   From b2a575a460e8fcdc95cff734678842b3b7b908b6 Mon Sep 17 00:00:00 2001 From: Colin Darie Date: Tue, 12 Nov 2024 17:09:18 +0100 Subject: [PATCH 08/21] style(dossiers): nice display rendering for dossier numbers --- app/assets/stylesheets/dossiers_table.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/assets/stylesheets/dossiers_table.scss b/app/assets/stylesheets/dossiers_table.scss index 4fca583c1..381267c62 100644 --- a/app/assets/stylesheets/dossiers_table.scss +++ b/app/assets/stylesheets/dossiers_table.scss @@ -10,6 +10,10 @@ white-space: nowrap; } + .number-col { + font-variant-numeric: tabular-nums; + } + .follow-col { .fr-btn { margin-bottom: 0; From 5d6e35c5401f801bee15e48d277bf1ab27eac6dd Mon Sep 17 00:00:00 2001 From: Colin Darie Date: Tue, 12 Nov 2024 18:14:26 +0100 Subject: [PATCH 09/21] style(dossiers): customize table above --- .../dossiers/export_dropdown_component.rb | 5 ++++- .../export_dropdown_component.html.haml | 2 +- .../_dossiers_filter_dropdown.html.haml | 2 +- .../instructeurs/procedures/show.html.haml | 20 +++++++++---------- config/locales/en.yml | 2 +- config/locales/fr.yml | 2 +- 6 files changed, 18 insertions(+), 15 deletions(-) diff --git a/app/components/dossiers/export_dropdown_component.rb b/app/components/dossiers/export_dropdown_component.rb index 9710c3704..962fff71c 100644 --- a/app/components/dossiers/export_dropdown_component.rb +++ b/app/components/dossiers/export_dropdown_component.rb @@ -3,7 +3,9 @@ class Dossiers::ExportDropdownComponent < ApplicationComponent include ApplicationHelper - def initialize(procedure:, export_templates: nil, statut: nil, count: nil, class_btn: nil, export_url: nil, show_export_template_tab: true) + attr_reader :wrapper + + def initialize(procedure:, export_templates: nil, statut: nil, count: nil, class_btn: nil, export_url: nil, show_export_template_tab: true, wrapper: :div) @procedure = procedure @export_templates = export_templates @statut = statut @@ -11,6 +13,7 @@ class Dossiers::ExportDropdownComponent < ApplicationComponent @class_btn = class_btn @export_url = export_url @show_export_template_tab = show_export_template_tab + @wrapper = wrapper end def formats diff --git a/app/components/dossiers/export_dropdown_component/export_dropdown_component.html.haml b/app/components/dossiers/export_dropdown_component/export_dropdown_component.html.haml index cbde910f2..46b89fab0 100644 --- a/app/components/dossiers/export_dropdown_component/export_dropdown_component.html.haml +++ b/app/components/dossiers/export_dropdown_component/export_dropdown_component.html.haml @@ -1,4 +1,4 @@ -= render Dropdown::MenuComponent.new(wrapper: :div, button_options: { class: ['fr-btn--sm', @class_btn.present? ? @class_btn : 'fr-btn--secondary']}, menu_options: { id: @count.nil? ? "download_menu" : "download_all_menu", class: ['dropdown-export'] }) do |menu| += render Dropdown::MenuComponent.new(wrapper:, button_options: { class: ['fr-btn--sm', @class_btn.present? ? @class_btn : 'fr-btn--secondary']}, menu_options: { id: @count.nil? ? "download_all_menu" : "download_menu", class: ['dropdown-export'] }) do |menu| - menu.with_button_inner_html do = @count.nil? ? t(".download_all") : t(".download", count: @count) diff --git a/app/views/instructeurs/procedures/_dossiers_filter_dropdown.html.haml b/app/views/instructeurs/procedures/_dossiers_filter_dropdown.html.haml index 56c08315b..2c7b901bb 100644 --- a/app/views/instructeurs/procedures/_dossiers_filter_dropdown.html.haml +++ b/app/views/instructeurs/procedures/_dossiers_filter_dropdown.html.haml @@ -1,4 +1,4 @@ -= render Dropdown::MenuComponent.new(wrapper: :div, button_options: { class: ['fr-btn--secondary', 'fr-btn--sm', 'fr-mr-1w'] }, menu_options: { id: 'filter-menu', class:['left-aligned'] }) do |menu| += render Dropdown::MenuComponent.new(wrapper: :div, button_options: { class: ['fr-btn--secondary', 'fr-btn--sm', 'fr-mr-1w', 'fr-mb-2w'] }, menu_options: { id: 'filter-menu', class:['left-aligned'] }) do |menu| - menu.with_button_inner_html do = t('views.instructeurs.dossiers.filters.title') diff --git a/app/views/instructeurs/procedures/show.html.haml b/app/views/instructeurs/procedures/show.html.haml index 62be96c8d..9e8b2d52f 100644 --- a/app/views/instructeurs/procedures/show.html.haml +++ b/app/views/instructeurs/procedures/show.html.haml @@ -62,8 +62,15 @@ .fr-ml-auto - if @dossiers_count > 0 - %span.dossiers-export - = render Dossiers::ExportDropdownComponent.new(procedure: @procedure, export_templates: current_instructeur.export_templates_for(@procedure), statut: @statut, count: @dossiers_count, class_btn: 'fr-btn--tertiary', export_url: method(:download_export_instructeur_procedure_path)) + %ul.fr-btns-group.fr-btns-group--right.fr-btns-group--sm.fr-btns-group--inline-md.fr-btns-group--icon-left + = render Dossiers::ExportDropdownComponent.new(wrapper: :li, procedure: @procedure, export_templates: current_instructeur.export_templates_for(@procedure), statut: @statut, count: @dossiers_count, + class_btn: 'fr-btn--secondary fr-icon-download-line', export_url: method(:download_export_instructeur_procedure_path)) + + = render Dropdown::MenuComponent.new(wrapper: :li, button_options: { class: ['fr-btn--tertiary', 'fr-icon-settings-5-line'] }, menu_options: { id: 'custom-menu' }) do |menu| + - menu.with_button_inner_html do + = t('views.instructeurs.dossiers.customize') + - menu.with_form do + = render Instructeurs::ColumnPickerComponent.new(procedure: @procedure, procedure_presentation: @procedure_presentation) - if @filtered_sorted_paginated_ids.present? || @current_filters.count > 0 = render Instructeurs::FilterButtonsComponent.new(filters: @current_filters, procedure_presentation: @procedure_presentation, statut: @statut) @@ -99,13 +106,6 @@ %th.follow-col{ scope: 'col' } Actions - %th.fr-cell--right - = render Dropdown::MenuComponent.new(wrapper: :span, button_options: { class: ['fr-btn--sm', 'fr-btn--tertiary-no-outline', 'fr-btn--icon-right', 'fr-icon-settings-5-line'] }, menu_options: { id: 'custom-menu' }) do |menu| - - menu.with_button_inner_html do - = t('views.instructeurs.dossiers.personalize') - - menu.with_form do - = render Instructeurs::ColumnPickerComponent.new(procedure: @procedure, procedure_presentation: @procedure_presentation) - %tbody = render Dossiers::BatchSelectMoreComponent.new(dossiers_count: @dossiers_count, filtered_sorted_ids: @filtered_sorted_ids) @@ -163,7 +163,7 @@ = link_to_if p.hidden_by_administration_at.blank?, render(Instructeurs::SVASVRDecisionBadgeComponent.new(projection_or_dossier: p, procedure: @procedure)), path %td.follow-col - %ul.fr-btns-group.fr-btns-group--lg.fr-btns-group--inline-lg.fr-btns-group--icon-right + %ul.fr-btns-group.fr-btns-group--sm.fr-btns-group--inline.fr-btns-group--icon-right = render partial: 'instructeurs/procedures/dossier_actions', locals: { procedure_id: @procedure.id, dossier_id: p.dossier_id, state: p.state, diff --git a/config/locales/en.yml b/config/locales/en.yml index 0a7bf8a67..c81282afe 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -409,7 +409,7 @@ en: batch_operation: enabled: "Add file %{dossier_id} to the selection for the bulk operation" disabled: "Impossible to add file %{dossier_id} to the selection because it is already in a bulk operation" - personalize: Personalize + customize: Customize the table passer_en_instruction: Switch to instruction repasser_en_construction: Revert to submitted show_deleted_dossiers: Show deleted files diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 1d512a13f..45d09462c 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -413,7 +413,7 @@ fr: enabled: "Ajouter le dossier %{dossier_id} à la sélection pour un traitement de masse" disabled: "Impossible d'ajouter le dossier %{dossier_id} à la selection car il est déjà dans un traitement de masse" show_deleted_dossiers: Historique des dossiers supprimés - personalize: Personnaliser + customize: Personnaliser le tableau passer_en_instruction: Passer en instruction repasser_en_construction: Repasser en construction follow_file: Suivre le dossier From 8ebdb00fc2d5129a3e9d740909e6cdab9fd18fd8 Mon Sep 17 00:00:00 2001 From: Colin Darie Date: Wed, 13 Nov 2024 12:49:41 +0100 Subject: [PATCH 10/21] fix(procedures): turbo force server, fix table JS style --- .../administrateurs/procedures/all.html.haml | 69 ++++++++++--------- 1 file changed, 35 insertions(+), 34 deletions(-) diff --git a/app/views/administrateurs/procedures/all.html.haml b/app/views/administrateurs/procedures/all.html.haml index 1b4c21f80..bcc513e36 100644 --- a/app/views/administrateurs/procedures/all.html.haml +++ b/app/views/administrateurs/procedures/all.html.haml @@ -15,7 +15,40 @@ .link.fr-mx-1w= link_to 'Voir les administrateurs', administrateurs_admin_procedures_path(@filter.params), class: 'fr-btn fr-btn--secondary' .link.fr-mx-1w{ "data-turbo": "false" }= link_to 'Exporter les résultats', all_admin_procedures_path(@filter.params.merge(format: :xlsx)), class: 'fr-btn fr-btn--secondary' - .fr-table.fr-table--sm.fr-table--no-scroll.fr-table--bordered + - if @filter.libelle + .selected-query.fr-mb-2w + = link_to @filter.libelle, all_admin_procedures_path(@filter.without(:libelle)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' + - if @filter.service_siret + .selected-query.fr-mb-2w + = link_to @filter.service_siret, all_admin_procedures_path(@filter.without(:service_siret)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' + - if @filter.service_departement + .selected-query.fr-mb-2w + = link_to "#{@filter.service_departement} – #{APIGeoService.departement_name(@filter.service_departement)}", all_admin_procedures_path(@filter.without(:service_departement)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' + - if @filter.selected_zones.present? + .selected-zones.fr-mb-2w + - @filter.selected_zones.each do |zone| + = link_to zone.current_label, all_admin_procedures_path(@filter.without(:zone_ids, zone.id)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' + - if @filter.statuses.present? + .selected-statuses.fr-mb-2w + - @filter.statuses.each do |status| + = link_to status, all_admin_procedures_path(@filter.without(:statuses, status)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' + - if @filter.kind_usagers.present? + .selected-kind_usagers.fr-mb-2w + - @filter.kind_usagers.each do |kind_usager| + = link_to t(kind_usager, scope: 'activerecord.attributes.procedure.kind_usager'), all_admin_procedures_path(@filter.without(:kind_usagers, kind_usager)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' + - if @filter.tags.present? + .selected-tag.fr-mb-2w + - @filter.tags.each do |tag| + = link_to tag, all_admin_procedures_path(@filter.without(:tags, tag)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' + - params[:tags].delete(tag) + - if @filter.template? + .selected-template.fr-mb-2w + = link_to "Modèle DS", all_admin_procedures_path(@filter.without(:template)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' + - if @filter.from_publication_date.present? + .selected-from-publication-date.fr-mb-2w + = link_to "Depuis #{l(@filter.from_publication_date)}", all_admin_procedures_path(@filter.without(:from_publication_date)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' + + .fr-table.fr-table--sm.fr-table--no-scroll.fr-table--bordered{ 'data-turbo': 'true', 'data-turbo-force': 'server' } .fr-table__wrapper .fr-table__container .fr-table__content @@ -23,38 +56,6 @@ %caption = "#{@procedures.total_count} #{t('pluralize.procedures', count: @procedures.total_count)}" %span.hidden.spinner{ 'aria-hidden': 'true', 'data-turbo-target': 'spinner' } - - if @filter.libelle - .selected-query.fr-mb-2w - = link_to @filter.libelle, all_admin_procedures_path(@filter.without(:libelle)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' - - if @filter.service_siret - .selected-query.fr-mb-2w - = link_to @filter.service_siret, all_admin_procedures_path(@filter.without(:service_siret)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' - - if @filter.service_departement - .selected-query.fr-mb-2w - = link_to "#{@filter.service_departement} – #{APIGeoService.departement_name(@filter.service_departement)}", all_admin_procedures_path(@filter.without(:service_departement)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' - - if @filter.selected_zones.present? - .selected-zones.fr-mb-2w - - @filter.selected_zones.each do |zone| - = link_to zone.current_label, all_admin_procedures_path(@filter.without(:zone_ids, zone.id)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' - - if @filter.statuses.present? - .selected-statuses.fr-mb-2w - - @filter.statuses.each do |status| - = link_to status, all_admin_procedures_path(@filter.without(:statuses, status)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' - - if @filter.kind_usagers.present? - .selected-kind_usagers.fr-mb-2w - - @filter.kind_usagers.each do |kind_usager| - = link_to t(kind_usager, scope: 'activerecord.attributes.procedure.kind_usager'), all_admin_procedures_path(@filter.without(:kind_usagers, kind_usager)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' - - if @filter.tags.present? - .selected-tag.fr-mb-2w - - @filter.tags.each do |tag| - = link_to tag, all_admin_procedures_path(@filter.without(:tags, tag)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' - - params[:tags].delete(tag) - - if @filter.template? - .selected-template.fr-mb-2w - = link_to "Modèle DS", all_admin_procedures_path(@filter.without(:template)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' - - if @filter.from_publication_date.present? - .selected-from-publication-date.fr-mb-2w - = link_to "Depuis #{l(@filter.from_publication_date)}", all_admin_procedures_path(@filter.without(:from_publication_date)), class: 'fr-tag fr-tag--dismiss fr-mb-1w' %thead %tr @@ -66,7 +67,7 @@ %th{ scope: 'col' } Statut %th{ scope: 'col' } Date %th{ scope: 'col' } Action - %tbody{ 'data-turbo': 'true' } + %tbody - @procedures.each do |procedure| = render partial: 'detail', locals: { procedure: procedure, show_detail: false } .fr-table__footer From 605c550e6cfeafac53f4c2010e0d113b8903c4ab Mon Sep 17 00:00:00 2001 From: Colin Darie Date: Wed, 13 Nov 2024 12:53:49 +0100 Subject: [PATCH 11/21] style(procedures): all layout responsivness --- app/views/layouts/all.html.haml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/layouts/all.html.haml b/app/views/layouts/all.html.haml index c8c95491e..e10893304 100644 --- a/app/views/layouts/all.html.haml +++ b/app/views/layouts/all.html.haml @@ -12,7 +12,7 @@ .fr-container--fluid{ data: { turbo: 'true' } } %turbo-frame#procedures.fr-grid-row.fr-grid-row--gutters{ 'data-turbo-action': 'advance' } - .fr-col-3 + .fr-col-12.fr-col-lg-3 = form_with(url: all_admin_procedures_path, method: :get, data: { controller: 'autosubmit', turbo_frame: 'procedures' }) do |f| %fieldset.sidebar-filter @@ -120,6 +120,6 @@ = b.check_box(checked: @filter.status_filtered?(b.value)) = b.label(class: 'fr-label') { t b.text, scope: 'activerecord.attributes.procedure.aasm_state' } - .fr-col-9 + .fr-col-12.fr-col-lg-9 = yield(:results) = render template: 'layouts/application' From eabc43ce5329580a49b99f89ef584042547e2f43 Mon Sep 17 00:00:00 2001 From: Colin Darie Date: Wed, 13 Nov 2024 18:07:01 +0100 Subject: [PATCH 12/21] refactor: minor improvements --- app/components/dossiers/export_dropdown_component.rb | 5 +---- app/views/instructeurs/procedures/show.html.haml | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/app/components/dossiers/export_dropdown_component.rb b/app/components/dossiers/export_dropdown_component.rb index 962fff71c..b9215ce99 100644 --- a/app/components/dossiers/export_dropdown_component.rb +++ b/app/components/dossiers/export_dropdown_component.rb @@ -4,6 +4,7 @@ class Dossiers::ExportDropdownComponent < ApplicationComponent include ApplicationHelper attr_reader :wrapper + attr_reader :export_templates def initialize(procedure:, export_templates: nil, statut: nil, count: nil, class_btn: nil, export_url: nil, show_export_template_tab: true, wrapper: :div) @procedure = procedure @@ -35,8 +36,4 @@ class Dossiers::ExportDropdownComponent < ApplicationComponent statut: @statut, no_progress_notification: no_progress_notification) end - - def export_templates - @export_templates - end end diff --git a/app/views/instructeurs/procedures/show.html.haml b/app/views/instructeurs/procedures/show.html.haml index 9e8b2d52f..25b98f8b0 100644 --- a/app/views/instructeurs/procedures/show.html.haml +++ b/app/views/instructeurs/procedures/show.html.haml @@ -44,7 +44,7 @@ %p = t('views.instructeurs.dossiers.tab_explainations.archives') %br - Ces dossiers seront supprimés lorsque leur délai de conservation dans Démarches-simplifiées + Ces dossiers seront supprimés lorsque leur délai de conservation dans #{APPLICATION_NAME} - if @procedure.duree_conservation_dossiers_dans_ds = "(#{@procedure.duree_conservation_dossiers_dans_ds} mois)" sera expiré. From 9bec007dfa4b7523a7e4932f1ce563d9812fc65a Mon Sep 17 00:00:00 2001 From: Colin Darie Date: Wed, 13 Nov 2024 18:13:56 +0100 Subject: [PATCH 13/21] refactor(download): remove useless turbo of menu since it's not dynamic anymore --- app/controllers/instructeurs/procedures_controller.rb | 5 ----- .../administrateurs/exports/download.turbo_stream.haml | 5 +---- .../procedures/download_export.turbo_stream.haml | 9 --------- .../administrateurs/exports_controller_spec.rb | 1 - 4 files changed, 1 insertion(+), 19 deletions(-) diff --git a/app/controllers/instructeurs/procedures_controller.rb b/app/controllers/instructeurs/procedures_controller.rb index 4aababff6..e7772b88e 100644 --- a/app/controllers/instructeurs/procedures_controller.rb +++ b/app/controllers/instructeurs/procedures_controller.rb @@ -137,11 +137,6 @@ module Instructeurs .groupe_instructeurs .where(procedure: procedure) - @can_download_dossiers = current_instructeur - .dossiers - .visible_by_administration - .exists?(groupe_instructeur_id: groupe_instructeur_ids) && !instructeur_as_manager? - export = Export.find_or_create_fresh_export(export_format, groupe_instructeurs, current_instructeur, **export_options) @procedure = procedure diff --git a/app/views/administrateurs/exports/download.turbo_stream.haml b/app/views/administrateurs/exports/download.turbo_stream.haml index 6db447783..c7fdcb17d 100644 --- a/app/views/administrateurs/exports/download.turbo_stream.haml +++ b/app/views/administrateurs/exports/download.turbo_stream.haml @@ -1,4 +1 @@ --# not renderable as administrateur flagged as manager, so render it anyway -- if @can_download_dossiers - = turbo_stream.update_all '.procedure-actions' do - = render Dossiers::ExportDropdownComponent.new(procedure: @procedure, count: @dossiers_count, export_url: method(:admin_procedure_exports_path)) +-# empty file so notice are still rendered diff --git a/app/views/instructeurs/procedures/download_export.turbo_stream.haml b/app/views/instructeurs/procedures/download_export.turbo_stream.haml index c6e47b799..68e1f096c 100644 --- a/app/views/instructeurs/procedures/download_export.turbo_stream.haml +++ b/app/views/instructeurs/procedures/download_export.turbo_stream.haml @@ -1,11 +1,2 @@ --# not renderable as instructeur flagged as manager, so render it anyway -- if @can_download_dossiers - - if @statut.nil? - = turbo_stream.update_all '.procedure-actions' do - = render Dossiers::ExportDropdownComponent.new(procedure: @procedure, export_templates: current_instructeur.export_templates_for(@procedure), export_url: method(:download_export_instructeur_procedure_path)) - - else - = turbo_stream.update_all '.dossiers-export' do - = render Dossiers::ExportDropdownComponent.new(procedure: @procedure, export_templates: current_instructeur.export_templates_for(@procedure), statut: @statut, count: @dossiers_count, export_url: method(:download_export_instructeur_procedure_path)) - = turbo_stream.update "last-export-alert" do = render partial: "last_export_alert", locals: { export: @last_export, statut: @statut } diff --git a/spec/controllers/administrateurs/exports_controller_spec.rb b/spec/controllers/administrateurs/exports_controller_spec.rb index 5ec1a4962..bf128ee17 100644 --- a/spec/controllers/administrateurs/exports_controller_spec.rb +++ b/spec/controllers/administrateurs/exports_controller_spec.rb @@ -59,7 +59,6 @@ describe Administrateurs::ExportsController, type: :controller do end it 'responds in the correct format' do - expect(response.media_type).to eq('text/vnd.turbo-stream.html') expect(response).to have_http_status(:ok) end end From 77f88bbbbe6d41b36fea211422fb5c275bc36c7a Mon Sep 17 00:00:00 2001 From: Colin Darie Date: Wed, 13 Nov 2024 18:40:09 +0100 Subject: [PATCH 14/21] style(admin): fix archives table --- app/assets/stylesheets/archive.scss | 19 ------ app/assets/stylesheets/dossiers_table.scss | 4 -- app/assets/stylesheets/dsfr.scss | 4 ++ .../deleted_dossiers_component.html.haml | 51 ++++++++------- .../administrateurs/archives/index.html.haml | 10 +-- app/views/experts/avis/procedure.html.haml | 2 +- .../instructeurs/procedures/show.html.haml | 2 +- app/views/recherche/_hidden_dossier.html.haml | 2 +- app/views/recherche/index.html.haml | 4 +- app/views/shared/archives/_table.html.haml | 64 ++++++++++--------- .../procedure_archive_and_export_spec.rb | 2 +- spec/system/instructeurs/instruction_spec.rb | 2 +- .../instructeurs/procedure_sort_spec.rb | 36 +++++------ 13 files changed, 98 insertions(+), 104 deletions(-) delete mode 100644 app/assets/stylesheets/archive.scss diff --git a/app/assets/stylesheets/archive.scss b/app/assets/stylesheets/archive.scss deleted file mode 100644 index 09bcb85c5..000000000 --- a/app/assets/stylesheets/archive.scss +++ /dev/null @@ -1,19 +0,0 @@ -@import 'constants'; - -table.archive-table { - .text-right { - text-align: right; - } - - .center { - text-align: center; - } - - td { - padding: 3 * $default-spacer $default-spacer; - } - - a.button { - background-image: none; // remove DSFR underline - } -} diff --git a/app/assets/stylesheets/dossiers_table.scss b/app/assets/stylesheets/dossiers_table.scss index 381267c62..4fca583c1 100644 --- a/app/assets/stylesheets/dossiers_table.scss +++ b/app/assets/stylesheets/dossiers_table.scss @@ -10,10 +10,6 @@ white-space: nowrap; } - .number-col { - font-variant-numeric: tabular-nums; - } - .follow-col { .fr-btn { margin-bottom: 0; diff --git a/app/assets/stylesheets/dsfr.scss b/app/assets/stylesheets/dsfr.scss index 9a1bc9007..94653512a 100644 --- a/app/assets/stylesheets/dsfr.scss +++ b/app/assets/stylesheets/dsfr.scss @@ -248,3 +248,7 @@ input[type='radio'] { .fr-tags-group > li { line-height: inherit; } + +.fr-cell--numeric { + font-variant-numeric: tabular-nums; +} diff --git a/app/components/dossiers/deleted_dossiers_component/deleted_dossiers_component.html.haml b/app/components/dossiers/deleted_dossiers_component/deleted_dossiers_component.html.haml index c1d03d08c..488e0c634 100644 --- a/app/components/dossiers/deleted_dossiers_component/deleted_dossiers_component.html.haml +++ b/app/components/dossiers/deleted_dossiers_component/deleted_dossiers_component.html.haml @@ -16,31 +16,38 @@ %li = t(".deleted_explanation_second_#{role}") - .fr-table.fr-table--layout-fixed.fr-mt-3w - %table - %thead - %tr - %th N° dossier - %th Libellé de la démarche - %th Raison de suppression - %th Date de suppression - %tbody - - @deleted_dossiers.each do |deleted_dossier| - %tr - %td.number-col - = deleted_dossier.dossier_id + .fr-table + .fr-table__wrapper + .fr-table__container + .fr-table__content + %table + %thead + %tr + %th N° dossier + %th Libellé de la démarche + %th Raison de suppression + %th Date de suppression + %tbody + - @deleted_dossiers.each do |deleted_dossier| + %tr + %td.fr-cell--numeric + = deleted_dossier.dossier_id - %td.number-col - = deleted_dossier.procedure.libelle.truncate_words(10) + %td.fr-cell--numeric + = deleted_dossier.procedure.libelle.truncate_words(10) - %td - = deletion_reason_badge(deleted_dossier.reason) - -# .fr-badge - -# = t("activerecord.attributes.deleted_dossier.reason.#{deleted_dossier.reason}") - %td.deleted-cell - = l(deleted_dossier.deleted_at, format: '%d/%m/%y') + %td + = deletion_reason_badge(deleted_dossier.reason) + -# .fr-badge + -# = t("activerecord.attributes.deleted_dossier.reason.#{deleted_dossier.reason}") + %td.deleted-cell + = l(deleted_dossier.deleted_at, format: '%d/%m/%y') - = paginate @deleted_dossiers, views_prefix: 'shared' + .fr-table__footer + .fr-table__footer--start + .fr-table__footer--middle + = paginate @deleted_dossiers, views_prefix: 'shared' + .fr-table__footer--end.flex-no-grow - else %p diff --git a/app/views/administrateurs/archives/index.html.haml b/app/views/administrateurs/archives/index.html.haml index 86cc6465e..5f2bad20b 100644 --- a/app/views/administrateurs/archives/index.html.haml +++ b/app/views/administrateurs/archives/index.html.haml @@ -4,12 +4,14 @@ ['Export et Archives']] } -.container.flex - %h1.mb-2.mr-2 +.fr-container.flex + %h1 Archives -# index not renderable as administrateur flagged as manager, so render it anyway - = render Dossiers::ExportDropdownComponent.new(procedure: @procedure, export_url: method(:download_admin_procedure_exports_path), show_export_template_tab: false) -.container + .fr-ml-2w.fr-my-1w + = render Dossiers::ExportDropdownComponent.new(procedure: @procedure, export_url: method(:download_admin_procedure_exports_path), show_export_template_tab: false) + +.fr-container = render Dossiers::ExportLinkComponent.new(procedure: @procedure, exports: @exports, export_url: method(:download_admin_procedure_exports_path)) = render partial: "shared/archives/notice" diff --git a/app/views/experts/avis/procedure.html.haml b/app/views/experts/avis/procedure.html.haml index e99b39d37..d0db1c7e0 100644 --- a/app/views/experts/avis/procedure.html.haml +++ b/app/views/experts/avis/procedure.html.haml @@ -42,7 +42,7 @@ %tbody - @avis.each do |avis| %tr - %td.number-col + %td.fr-cell--numeric = link_to(expert_avis_path(avis.procedure, avis), class: 'cell-link') do = avis.dossier.id %td= link_to(avis.dossier.user_email_for(:display), expert_avis_path(avis.procedure, avis), class: 'cell-link') diff --git a/app/views/instructeurs/procedures/show.html.haml b/app/views/instructeurs/procedures/show.html.haml index 25b98f8b0..14dc7f824 100644 --- a/app/views/instructeurs/procedures/show.html.haml +++ b/app/views/instructeurs/procedures/show.html.haml @@ -127,7 +127,7 @@ aria: { label: t('views.instructeurs.dossiers.batch_operation.enabled', dossier_id: p.dossier_id) } = label_tag dom_id(BatchOperation.new, "checkbox_#{p.dossier_id}"), "Sélectionner le dossier #{p.dossier_id}", class: 'fr-label' - %td.number-col + %td.fr-cell--numeric - if p.hidden_by_administration_at.present? %span.cell-link= p.dossier_id - else diff --git a/app/views/recherche/_hidden_dossier.html.haml b/app/views/recherche/_hidden_dossier.html.haml index 6f72ce7cb..9939ec0ed 100644 --- a/app/views/recherche/_hidden_dossier.html.haml +++ b/app/views/recherche/_hidden_dossier.html.haml @@ -1,4 +1,4 @@ -%td.number-col +%td.fr-cell--numeric %p.cell-link= p.dossier_id %td diff --git a/app/views/recherche/index.html.haml b/app/views/recherche/index.html.haml index 1f4f2ecbb..a661edda3 100644 --- a/app/views/recherche/index.html.haml +++ b/app/views/recherche/index.html.haml @@ -36,7 +36,7 @@ %tr{ class: [p.hidden_by_administration_at.present? && "file-hidden-by-user"] } - if instructeur_and_expert_dossier - %td.number-col + %td.fr-cell--numeric .cell-link.relative = p.dossier_id - if @notifications_dossier_ids.include?(p.dossier_id) @@ -52,7 +52,7 @@ = render partial: "recherche/hidden_dossier", locals: {p: p, procedure_libelle: procedure_libelle, user_email: user_email} - else - %td.number-col + %td.fr-cell--numeric %a.cell-link.relative{ href: path } = p.dossier_id - if @notifications_dossier_ids.include?(p.dossier_id) diff --git a/app/views/shared/archives/_table.html.haml b/app/views/shared/archives/_table.html.haml index dcfd4be49..c6baf0934 100644 --- a/app/views/shared/archives/_table.html.haml +++ b/app/views/shared/archives/_table.html.haml @@ -1,32 +1,36 @@ -%table.archive-table - %thead - %tr - %th   - %th.text-right Nombre de dossiers terminés - %th.text-right Poids estimé - %th.center Télécharger +.fr-table.fr-table--bordered.fr-my-4w + .fr-table__wrapper + .fr-table__container + .fr-table__content + %table + %thead + %tr + %th{ scope: 'col' } + %th.fr-cell---right{ scope: 'col' } Nombre de dossiers terminés + %th.fr-cell---right{ scope: 'col' } Poids estimé + %th{ scope: 'col' } Télécharger - %tbody - - count_dossiers_termines_by_month.each do |date, count| - - matching_archive = archives.find { |archive| archive.time_span_type == 'monthly' && archive.month == date } - - weight = estimate_weight(matching_archive, count, average_dossier_weight) + %tbody + - count_dossiers_termines_by_month.each do |date, count| + - matching_archive = archives.find { |archive| archive.time_span_type == 'monthly' && archive.month == date } + - weight = estimate_weight(matching_archive, count, average_dossier_weight) - %tr - %td - = I18n.l(date, format: "%B %Y").capitalize - %td.text-right - = count - %td.text-right - = number_to_human_size(weight) - %td.center - - if matching_archive.present? - - if matching_archive.available? - = link_to url_for(matching_archive.file), class: 'fr-btn fr-btn--secondary fr-icon-download-line fr-btn--icon-left fr-btn--sm' do - = t(:archive_ready_html, scope: [:instructeurs, :procedure], generated_period: time_ago_in_words(matching_archive.updated_at)) - - else - = dsfr_icon("fr-icon-flashlight-line", :sm) - = t(:archive_pending_html, scope: [:instructeurs, :procedure], created_period: time_ago_in_words(matching_archive.created_at)) - - elsif weight.nil? || weight < Archive::MAX_SIZE - = link_to "Demander la création", create_archive_url(procedure, date), method: :post, class: "fr-btn fr-btn--secondary fr-icon-download-line fr-btn--icon-left fr-btn--sm" - - else - Archive trop volumineuse + %tr + %td + = I18n.l(date, format: "%B %Y").capitalize + %td.fr-cell--right.fr-cell--numeric + = count + %td.fr-cell--right + = number_to_human_size(weight) + %td + - if matching_archive.present? + - if matching_archive.available? + = link_to url_for(matching_archive.file), class: 'fr-btn fr-btn--secondary fr-icon-download-line fr-btn--icon-left fr-btn--sm' do + = t(:archive_ready_html, scope: [:instructeurs, :procedure], generated_period: time_ago_in_words(matching_archive.updated_at)) + - else + = dsfr_icon("fr-icon-flashlight-line", :sm) + = t(:archive_pending_html, scope: [:instructeurs, :procedure], created_period: time_ago_in_words(matching_archive.created_at)) + - elsif weight.nil? || weight < Archive::MAX_SIZE + = link_to "Demander la création", create_archive_url(procedure, date), method: :post, class: "fr-btn fr-btn--secondary fr-icon-download-line fr-btn--icon-left fr-btn--sm" + - else + Archive trop volumineuse diff --git a/spec/system/administrateurs/procedure_archive_and_export_spec.rb b/spec/system/administrateurs/procedure_archive_and_export_spec.rb index eb868f788..c4c06f456 100644 --- a/spec/system/administrateurs/procedure_archive_and_export_spec.rb +++ b/spec/system/administrateurs/procedure_archive_and_export_spec.rb @@ -32,7 +32,7 @@ describe 'Creating a new procedure', js: true do # check archive expect { - page.first(".archive-table .fr-btn").click + page.first(".fr-table .fr-btn").click }.to have_enqueued_job(ArchiveCreationJob).with(procedure, an_instance_of(Archive), administrateur) expect(page).to have_content("Votre demande a été prise en compte. Selon le nombre de dossiers, cela peut prendre de quelques minutes à plusieurs heures. Vous recevrez un courriel lorsque le fichier sera disponible.") expect(Archive.first.month).not_to be_nil diff --git a/spec/system/instructeurs/instruction_spec.rb b/spec/system/instructeurs/instruction_spec.rb index 5e06cd74f..cdbf85c42 100644 --- a/spec/system/instructeurs/instruction_spec.rb +++ b/spec/system/instructeurs/instruction_spec.rb @@ -208,7 +208,7 @@ describe 'Instructing a dossier:', js: true do end scenario 'download' do expect { - page.first(".archive-table .fr-btn").click + page.first(".fr-table .fr-btn").click }.to have_enqueued_job(ArchiveCreationJob).with(procedure, an_instance_of(Archive), instructeur) expect(Archive.first.month).not_to be_nil end diff --git a/spec/system/instructeurs/procedure_sort_spec.rb b/spec/system/instructeurs/procedure_sort_spec.rb index beb59e8a0..2bde17e47 100644 --- a/spec/system/instructeurs/procedure_sort_spec.rb +++ b/spec/system/instructeurs/procedure_sort_spec.rb @@ -19,18 +19,18 @@ describe "procedure sort", js: true do scenario "should be able to sort with header" do # sorted by notifications (updated_at desc) by default, filtered by followed expect(all(".dossiers-table tbody tr").count).to eq(3) - expect(find(".dossiers-table tbody tr:nth-child(2) .number-col a").text).to eq(followed_dossier.id.to_s) - expect(find(".dossiers-table tbody tr:nth-child(3) .number-col a").text).to eq(followed_dossier_2.id.to_s) + expect(find(".dossiers-table tbody tr:nth-child(2) .fr-cell--numeric a").text).to eq(followed_dossier.id.to_s) + expect(find(".dossiers-table tbody tr:nth-child(3) .fr-cell--numeric a").text).to eq(followed_dossier_2.id.to_s) click_on "Nº dossier" # sort by id asc - expect(find(".dossiers-table tbody tr:nth-child(2) .number-col a").text).to eq(followed_dossier.id.to_s) - expect(find(".dossiers-table tbody tr:nth-child(3) .number-col a").text).to eq(followed_dossier_2.id.to_s) + expect(find(".dossiers-table tbody tr:nth-child(2) .fr-cell--numeric a").text).to eq(followed_dossier.id.to_s) + expect(find(".dossiers-table tbody tr:nth-child(3) .fr-cell--numeric a").text).to eq(followed_dossier_2.id.to_s) click_on "Nº dossier" # reverse order - sort by id desc - expect(find(".dossiers-table tbody tr:nth-child(2) .number-col a").text).to eq(followed_dossier_2.id.to_s) - expect(find(".dossiers-table tbody tr:nth-child(3) .number-col a").text).to eq(followed_dossier.id.to_s) + expect(find(".dossiers-table tbody tr:nth-child(2) .fr-cell--numeric a").text).to eq(followed_dossier_2.id.to_s) + expect(find(".dossiers-table tbody tr:nth-child(3) .fr-cell--numeric a").text).to eq(followed_dossier.id.to_s) end scenario "should be able to sort with header with sva date" do @@ -41,20 +41,20 @@ describe "procedure sort", js: true do visit instructeur_procedure_path(procedure, statut: "suivis") # sorted by notifications (updated_at desc) by default, filtered by followed expect(all(".dossiers-table tbody tr").count).to eq(3) - expect(find(".dossiers-table tbody tr:nth-child(2) .number-col a").text).to eq(followed_dossier.id.to_s) - expect(find(".dossiers-table tbody tr:nth-child(3) .number-col a").text).to eq(followed_dossier_2.id.to_s) + expect(find(".dossiers-table tbody tr:nth-child(2) .fr-cell--numeric a").text).to eq(followed_dossier.id.to_s) + expect(find(".dossiers-table tbody tr:nth-child(3) .fr-cell--numeric a").text).to eq(followed_dossier_2.id.to_s) click_on "Date décision SVA", exact: true # sort by sva date asc # find("thead .sva-col a").click # sort by sva date asc - expect(find(".dossiers-table tbody tr:nth-child(2) .number-col a").text).to eq(followed_dossier.id.to_s) - expect(find(".dossiers-table tbody tr:nth-child(3) .number-col a").text).to eq(followed_dossier_2.id.to_s) + expect(find(".dossiers-table tbody tr:nth-child(2) .fr-cell--numeric a").text).to eq(followed_dossier.id.to_s) + expect(find(".dossiers-table tbody tr:nth-child(3) .fr-cell--numeric a").text).to eq(followed_dossier_2.id.to_s) click_on "Date décision SVA ↑", exact: true # reverse order - sort by sva date desc # find("thead .sva-col a").click # reverse order - sort by sva date desc - expect(find(".dossiers-table tbody tr:nth-child(2) .number-col a").text).to eq(followed_dossier_2.id.to_s) - expect(find(".dossiers-table tbody tr:nth-child(3) .number-col a").text).to eq(followed_dossier.id.to_s) + expect(find(".dossiers-table tbody tr:nth-child(2) .fr-cell--numeric a").text).to eq(followed_dossier_2.id.to_s) + expect(find(".dossiers-table tbody tr:nth-child(3) .fr-cell--numeric a").text).to eq(followed_dossier.id.to_s) end scenario "should be able to sort with direct link to notification sort" do @@ -65,14 +65,14 @@ describe "procedure sort", js: true do find("label", text: "Remonter les dossiers avec une notification").click # reverse order - sort by updated_at asc expect(page).not_to have_checked_field("Remonter les dossiers avec une notification") - expect(find(".dossiers-table tbody tr:nth-child(2) .number-col a").text).to eq(followed_dossier_2.id.to_s) - expect(find(".dossiers-table tbody tr:nth-child(3) .number-col a").text).to eq(followed_dossier.id.to_s) + expect(find(".dossiers-table tbody tr:nth-child(2) .fr-cell--numeric a").text).to eq(followed_dossier_2.id.to_s) + expect(find(".dossiers-table tbody tr:nth-child(3) .fr-cell--numeric a").text).to eq(followed_dossier.id.to_s) find("label", text: "Remonter les dossiers avec une notification").click # set order back - sort by updated_at desc expect(page).to have_checked_field("Remonter les dossiers avec une notification") - expect(find(".dossiers-table tbody tr:nth-child(2) .number-col a").text).to eq(followed_dossier.id.to_s) - expect(find(".dossiers-table tbody tr:nth-child(3) .number-col a").text).to eq(followed_dossier_2.id.to_s) + expect(find(".dossiers-table tbody tr:nth-child(2) .fr-cell--numeric a").text).to eq(followed_dossier.id.to_s) + expect(find(".dossiers-table tbody tr:nth-child(3) .fr-cell--numeric a").text).to eq(followed_dossier_2.id.to_s) end scenario "should be able to sort back by notification filter after any other sort" do @@ -83,7 +83,7 @@ describe "procedure sort", js: true do find("label", text: "Remonter les dossiers avec une notification").click # sort by updated_at desc expect(page).to have_checked_field("Remonter les dossiers avec une notification") - expect(find(".dossiers-table tbody tr:nth-child(2) .number-col a").text).to eq(followed_dossier.id.to_s) - expect(find(".dossiers-table tbody tr:nth-child(3) .number-col a").text).to eq(followed_dossier_2.id.to_s) + expect(find(".dossiers-table tbody tr:nth-child(2) .fr-cell--numeric a").text).to eq(followed_dossier.id.to_s) + expect(find(".dossiers-table tbody tr:nth-child(3) .fr-cell--numeric a").text).to eq(followed_dossier_2.id.to_s) end end From bae00091201fd4233c17f4437dd57291d2ae117c Mon Sep 17 00:00:00 2001 From: Colin Darie Date: Wed, 13 Nov 2024 19:05:05 +0100 Subject: [PATCH 15/21] refactor(admin): fix exports invitation list, also use dsfr toggle --- app/assets/stylesheets/table.scss | 14 -- app/components/dsfr/toggle_component.rb | 16 +- .../toggle_component.html.haml | 13 +- .../experts_procedures/index.html.haml | 179 +++++++++--------- 4 files changed, 110 insertions(+), 112 deletions(-) diff --git a/app/assets/stylesheets/table.scss b/app/assets/stylesheets/table.scss index 7043823a4..d4589b306 100644 --- a/app/assets/stylesheets/table.scss +++ b/app/assets/stylesheets/table.scss @@ -46,17 +46,3 @@ } } } - -.force-table-100 { - width: calc(100vw); -} - -.fr-table--bordered { - .table { - &.hoverable { - tbody tr:hover { - background-color: var(--hover); - } - } - } -} diff --git a/app/components/dsfr/toggle_component.rb b/app/components/dsfr/toggle_component.rb index 7e7f3ca40..43084c6f0 100644 --- a/app/components/dsfr/toggle_component.rb +++ b/app/components/dsfr/toggle_component.rb @@ -1,6 +1,14 @@ # frozen_string_literal: true class Dsfr::ToggleComponent < ApplicationComponent + attr_reader :target + attr_reader :title + attr_reader :hint + attr_reader :toggle_labels + attr_reader :disabled + attr_reader :data + attr_reader :extra_class_names + def initialize(form:, target:, title:, disabled: nil, hint: nil, toggle_labels: { checked: 'Activé', unchecked: 'Désactivé' }, opt: nil, extra_class_names: nil) @form = form @target = target @@ -8,9 +16,13 @@ class Dsfr::ToggleComponent < ApplicationComponent @hint = hint @disabled = disabled @toggle_labels = toggle_labels - @opt = opt + @data = opt @extra_class_names = extra_class_names end - attr_reader :toggle_labels, :extra_class_names + private + + def input_id + dom_id(@form.object, target) + end end diff --git a/app/components/dsfr/toggle_component/toggle_component.html.haml b/app/components/dsfr/toggle_component/toggle_component.html.haml index 18bde573d..90fa24433 100644 --- a/app/components/dsfr/toggle_component/toggle_component.html.haml +++ b/app/components/dsfr/toggle_component/toggle_component.html.haml @@ -1,9 +1,10 @@ %div{ class: "fr-toggle fr-toggle--label-left #{extra_class_names}" } - = @form.check_box @target, class: 'fr-toggle__input', disabled: @disabled, - data: @opt - = @form.label @target, - @title, + = @form.check_box target, class: 'fr-toggle__input', disabled:, data:, id: input_id + = @form.label target, + title, + for: input_id, data: { 'fr-checked-label': toggle_labels[:checked], 'fr-unchecked-label': toggle_labels[:unchecked] }, class: 'fr-toggle__label' - - if @hint - %p.fr-hint-text= @hint + + - if hint + %p.fr-hint-text= hint diff --git a/app/views/administrateurs/experts_procedures/index.html.haml b/app/views/administrateurs/experts_procedures/index.html.haml index 865d1cb67..f021fcb58 100644 --- a/app/views/administrateurs/experts_procedures/index.html.haml +++ b/app/views/administrateurs/experts_procedures/index.html.haml @@ -4,8 +4,7 @@ ['Avis externes']] } .fr-container - %h1.fr-h2 - Avis externes + %h1 Avis externes = render Dsfr::CalloutComponent.new(title: nil) do |c| - c.with_body do @@ -15,106 +14,106 @@ title: t('.experts_doc.title'), **external_link_attributes) - %ul.fr-toggle__list - %li - = form_for @procedure, - method: :put, - url: allow_expert_review_admin_procedure_path(@procedure), - data: { controller: 'autosubmit', turbo: 'true' } do |f| + %fieldset.fr-fieldset + .fr-fieldset__element + %ul.fr-toggle__list + %li + = form_for @procedure, + method: :put, + url: allow_expert_review_admin_procedure_path(@procedure), + data: { controller: 'autosubmit', turbo: 'true' } do |f| - = render Dsfr::ToggleComponent.new(form: f, - target: :allow_expert_review, - title: t('.titles.allow_invite_experts'), - hint: t('.descriptions.allow_invite_experts'), - disabled: false, - extra_class_names: 'fr-toggle--border-bottom') + = render Dsfr::ToggleComponent.new(form: f, + target: :allow_expert_review, + title: t('.titles.allow_invite_experts'), + hint: t('.descriptions.allow_invite_experts'), + disabled: false, + extra_class_names: 'fr-toggle--border-bottom') - - if @procedure.allow_expert_review? - %li - = form_for @procedure, - method: :put, - url: allow_expert_messaging_admin_procedure_path(@procedure), - data: { controller: 'autosubmit', turbo: 'true' } do |f| + - if @procedure.allow_expert_review? + %li + = form_for @procedure, + method: :put, + url: allow_expert_messaging_admin_procedure_path(@procedure), + data: { controller: 'autosubmit', turbo: 'true' } do |f| - = render Dsfr::ToggleComponent.new(form: f, - target: :allow_expert_messaging, - title: t('.titles.allow_expert_messaging'), - hint: t('.descriptions.allow_expert_messaging'), - disabled: false, - extra_class_names: 'fr-toggle--border-bottom') + = render Dsfr::ToggleComponent.new(form: f, + target: :allow_expert_messaging, + title: t('.titles.allow_expert_messaging'), + hint: t('.descriptions.allow_expert_messaging'), + disabled: false, + extra_class_names: 'fr-toggle--border-bottom') - %li - = form_for @procedure, - method: :put, - url: experts_require_administrateur_invitation_admin_procedure_path(@procedure), - data: { controller: 'autosubmit', turbo: 'true' } do |f| + %li + = form_for @procedure, + method: :put, + url: experts_require_administrateur_invitation_admin_procedure_path(@procedure), + data: { controller: 'autosubmit', turbo: 'true' } do |f| - = render Dsfr::ToggleComponent.new(form: f, - target: :experts_require_administrateur_invitation, - title: t('.titles.manage_procedure_experts'), - hint: t('.descriptions.manage_procedure_experts'), - disabled: false) + = render Dsfr::ToggleComponent.new(form: f, + target: :experts_require_administrateur_invitation, + title: t('.titles.manage_procedure_experts'), + hint: t('.descriptions.manage_procedure_experts'), + disabled: false) - - if @procedure.experts_require_administrateur_invitation? - .card - = render Procedure::InvitationWithTypoComponent.new(maybe_typos: @maybe_typos, url: admin_procedure_experts_path(@procedure), title: "Avant d'ajouter l'email à la liste d'expert prédéfinie, veuillez confirmer" ) - = form_for :experts_procedure, - url: admin_procedure_experts_path(@procedure), - html: { class: 'form' } do |f| + - if @procedure.experts_require_administrateur_invitation? + .card + = render Procedure::InvitationWithTypoComponent.new(maybe_typos: @maybe_typos, url: admin_procedure_experts_path(@procedure), title: "Avant d'ajouter l'email à la liste d'expert prédéfinie, veuillez confirmer" ) + = form_for :experts_procedure, + url: admin_procedure_experts_path(@procedure), + html: { class: 'form' } do |f| - .instructeur-wrapper - %p#experts-emails Entrez les adresses emails des experts que vous souhaitez ajouter à la liste prédéfinie - %react-fragment - = render ReactComponent.new "ComboBox/MultiComboBox", - id: 'emails', - name: 'emails[]', - allows_custom_value: true, - 'aria-label': 'Emails', - 'aria-describedby': 'experts-emails' + .instructeur-wrapper + %p#experts-emails Entrez les adresses emails des experts que vous souhaitez ajouter à la liste prédéfinie + %react-fragment + = render ReactComponent.new "ComboBox/MultiComboBox", + id: 'emails', + name: 'emails[]', + allows_custom_value: true, + 'aria-label': 'Emails', + 'aria-describedby': 'experts-emails' - = f.submit 'Ajouter à la liste', class: 'fr-btn' + = f.submit 'Ajouter à la liste', class: 'fr-btn' - - if @experts_procedure.present? - .fr-table.fr-table--no-caption.fr-table--layout-fixed.fr-mt-3w - %table - %thead + - if @experts_procedure.present? + .fr-table.fr-table--no-caption.fr-table--layout-fixed.fr-mt-3w + %table + %thead + %tr + %th Liste des experts + %th Nombre d’avis + - if @procedure.experts_require_administrateur_invitation + %th Notifier des décisions sur les dossiers + - if @procedure.experts_require_administrateur_invitation + %th Action + %tbody + - @experts_procedure.each do |expert_procedure| %tr - %th Liste des experts - %th Nombre d’avis + %td + = dsfr_icon('fr-icon-user-fill') + = expert_procedure.expert.email + %td.fr-cell--center + = expert_procedure.avis.count - if @procedure.experts_require_administrateur_invitation - %th Notifier des décisions sur les dossiers + %td.fr-cell--center + = form_for expert_procedure, + url: admin_procedure_expert_path(id: expert_procedure), + method: :put, + data: { controller: 'autosubmit', turbo: 'true' } do |f| + = render Dsfr::ToggleComponent.new(form: f, + title: "Notifier", + target: :allow_decision_access, + ) - if @procedure.experts_require_administrateur_invitation - %th Action - %tbody - - @experts_procedure.each do |expert_procedure| - %tr - %td - = dsfr_icon('fr-icon-user-fill') - = expert_procedure.expert.email - %td.text-center - = expert_procedure.avis.count - - if @procedure.experts_require_administrateur_invitation - %td.text-center - = form_for expert_procedure, - url: admin_procedure_expert_path(id: expert_procedure), - method: :put, - data: { turbo: true }, - html: { class: 'form procedure-form__column--form no-background' } do |f| - %label.toggle-switch{ data: { controller: 'autosubmit' } } - = f.check_box :allow_decision_access, class: 'toggle-switch-checkbox' - %span.toggle-switch-control.round - %span.toggle-switch-label.on - %span.toggle-switch-label.off - - if @procedure.experts_require_administrateur_invitation - %td.actions= button_to 'retirer', - admin_procedure_expert_path(id: expert_procedure, procedure: @procedure), - method: :delete, - data: { confirm: "Êtes-vous sûr de vouloir révoquer l'expert « #{expert_procedure.expert.email} » de la démarche #{expert_procedure.procedure.libelle} ? Les instructeurs ne pourront plus lui demander d’avis" }, - class: 'fr-btn fr-btn--secondary' - - else - .blank-tab - %h2.empty-text Aucun expert invité pour le moment. - %p.empty-text-details Les instructeurs de cette démarche n’ont pas encore fait appel aux experts. + %td.actions= button_to 'Retirer', + admin_procedure_expert_path(id: expert_procedure, procedure: @procedure), + method: :delete, + data: { confirm: "Êtes-vous sûr de vouloir révoquer l'expert « #{expert_procedure.expert.email} » de la démarche #{expert_procedure.procedure.libelle} ? Les instructeurs ne pourront plus lui demander d’avis" }, + class: 'fr-btn fr-btn--secondary' + - else + .blank-tab + %h2.empty-text Aucun expert invité pour le moment. + %p.empty-text-details Les instructeurs de cette démarche n’ont pas encore fait appel aux experts. = render Procedure::FixedFooterComponent.new(procedure: @procedure) From 7e9e57cb177f5d7c6f614de1021b882d9aca02cd Mon Sep 17 00:00:00 2001 From: Colin Darie Date: Thu, 14 Nov 2024 14:56:14 +0100 Subject: [PATCH 16/21] style: update instructeurs to new design table --- .../_instructeurs.html.haml | 50 +++++++++++-------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/app/views/administrateurs/groupe_instructeurs/_instructeurs.html.haml b/app/views/administrateurs/groupe_instructeurs/_instructeurs.html.haml index 968c6b938..685a3be23 100644 --- a/app/views/administrateurs/groupe_instructeurs/_instructeurs.html.haml +++ b/app/views/administrateurs/groupe_instructeurs/_instructeurs.html.haml @@ -19,28 +19,38 @@ %hr.fr-mt-4w .flex.justify-between.align-baseline - .card-title= t('.assigned_instructeur', count: instructeurs.count) + .card-title= t('.assigned_instructeur', count: instructeurs.total_count) = button_to export_groupe_instructeurs_admin_procedure_groupe_instructeurs_path(procedure, format: :csv), method: :get, class: 'fr-btn fr-btn--tertiary fr-btn--icon-left fr-icon-download-line' do Exporter la liste (.CSV) - %table.fr-table.fr-table--bordered.width-100 - %thead - %tr - %th= t('.title') - %th.text-right= t('.actions') - %tbody - - instructeurs.each do |instructeur| - %tr - %td - = dsfr_icon('fr-icon-user-line') - #{instructeur.email} + .fr-table + .fr-table__wrapper + .fr-table__container + .fr-table__content + %table + %thead + %tr + %th{ scope: 'col' }= t('.title') + %th{ scope: 'col' }= t('.actions') + %tbody + - instructeurs.each do |instructeur| + %tr + %td + = dsfr_icon('fr-icon-user-line') + #{instructeur.email} - - confirmation_message = procedure.routing_enabled? ? "Êtes-vous sûr de vouloir retirer l’instructeur « #{instructeur.email} » du groupe « #{groupe_instructeur.label} » ?" : "Êtes-vous sûr de vouloir retirer l’instructeur « #{instructeur.email} » de la démarche ?" - %td.actions= button_to t('.remove'), - { action: :remove_instructeur, id: groupe_instructeur.id }, - { method: :delete, - data: { confirm: confirmation_message }, - params: { instructeur: { id: instructeur.id }}, - class: 'fr-btn fr-btn--secondary fr-btn--icon-left fr-icon-subtract-line' } + - confirmation_message = procedure.routing_enabled? ? "Êtes-vous sûr de vouloir retirer l’instructeur « #{instructeur.email} » du groupe « #{groupe_instructeur.label} » ?" : "Êtes-vous sûr de vouloir retirer l’instructeur « #{instructeur.email} » de la démarche ?" + %td.actions= button_to t('.remove'), + { action: :remove_instructeur, id: groupe_instructeur.id }, + { method: :delete, + data: { confirm: confirmation_message }, + params: { instructeur: { id: instructeur.id }}, + class: 'fr-btn fr-btn--sm fr-btn--secondary fr-btn--icon-left fr-icon-subtract-line' } - = paginate instructeurs, views_prefix: 'shared' + .fr-table__footer + .fr-table__footer--start + %p.fr-table__detail + = number_with_delimiter instructeurs.total_count + = t('activerecord.models.instructeur', count: instructeurs.total_count).downcase + .fr-table__footer--middle + = paginate instructeurs, views_prefix: 'shared' From 0c533113bee04c3f2f8b43721864e484dd592fcb Mon Sep 17 00:00:00 2001 From: Colin Darie Date: Thu, 14 Nov 2024 14:56:34 +0100 Subject: [PATCH 17/21] style: update groupes for reaffactation in new design table --- .../reaffecter_dossiers.html.haml | 47 ++++++++++++------- 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/app/views/administrateurs/groupe_instructeurs/reaffecter_dossiers.html.haml b/app/views/administrateurs/groupe_instructeurs/reaffecter_dossiers.html.haml index d74cccae2..5529c80a8 100644 --- a/app/views/administrateurs/groupe_instructeurs/reaffecter_dossiers.html.haml +++ b/app/views/administrateurs/groupe_instructeurs/reaffecter_dossiers.html.haml @@ -4,23 +4,34 @@ ['Groupes d’instructeurs', admin_procedure_groupe_instructeurs_path(@procedure)], [@groupe_instructeur.label]] } -.container.groupe-instructeur +.fr-container + %h1.fr-h2 Réaffectation des dossiers du groupe « #{@groupe_instructeur.label} » + %p + Le groupe « #{@groupe_instructeur.label} » contient des dossiers. Afin de procéder à sa suppression, vous devez réaffecter ses dossiers à un autre groupe d’instructeurs. - .card - .card-title Réaffectation des dossiers du groupe « #{@groupe_instructeur.label} » - %p - Le groupe « #{@groupe_instructeur.label} » contient des dossiers. Afin de procéder à sa suppression, vous devez réaffecter ses dossiers à un autre groupe d’instructeurs. - %table.table.mt-2 - %thead - %tr - %th{ colspan: 2 }= t(".existing_groupe", count: @groupes_instructeurs.total_count) - %tbody - - @groupes_instructeurs.each do |group| - .flex.justify-between.align-center.fr-mb-2w - %p.fr-mb-0= group.label - = button_to 'Réaffecter les dossiers à ce groupe', - reaffecter_admin_procedure_groupe_instructeur_path(:target_group => group), - { class: 'fr-btn fr-btn--secondary fr-btn--sm', - data: { confirm: "Êtes-vous sûr de vouloir réaffecter les dossiers du groupe « #{@groupe_instructeur.label} » vers le groupe  « #{group.label} » ?" } } + .fr-table + .fr-table__wrapper + .fr-table__container + .fr-table__content + %table + %caption + = t(".existing_groupe", count: @groupes_instructeurs.total_count) + %thead + %tr + %th{ scope: 'col' } Groupe + %th{ scope: 'col' } Réaffectation + %tbody + - @groupes_instructeurs.each do |group| + %tr + %td= group.label + %td + = button_to 'Réaffecter les dossiers à ce groupe', + reaffecter_admin_procedure_groupe_instructeur_path(:target_group => group), + { class: 'fr-btn fr-btn--secondary fr-btn--sm', + data: { confirm: "Êtes-vous sûr de vouloir réaffecter les dossiers du groupe « #{@groupe_instructeur.label} » vers le groupe  « #{group.label} » ?" } } - = paginate @groupes_instructeurs, views_prefix: 'shared' + .fr-table__footer + .fr-table__footer--start + %p.fr-table__detail + .fr-table__footer--middle + = paginate @groupes_instructeurs, views_prefix: 'shared' From f6be8eb823e63a011223ecd09f26ea86a9586400 Mon Sep 17 00:00:00 2001 From: Colin Darie Date: Thu, 14 Nov 2024 15:05:28 +0100 Subject: [PATCH 18/21] chore(pagination): remove redondant symbols with dsfr paginator --- app/views/shared/kaminari/_paginator.html.haml | 2 +- config/locales/kaminari.en.yml | 10 +++++----- config/locales/kaminari.fr.yml | 10 +++++----- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/app/views/shared/kaminari/_paginator.html.haml b/app/views/shared/kaminari/_paginator.html.haml index 9c018cf5f..4c535c675 100644 --- a/app/views/shared/kaminari/_paginator.html.haml +++ b/app/views/shared/kaminari/_paginator.html.haml @@ -1,5 +1,5 @@ = paginator.render do - %nav.fr-pagination.fr-mt-2w{ role: 'navigation', 'aria-label': 'Pagination' } + %nav.fr-pagination{ role: 'navigation', 'aria-label': 'Pagination' } %ul.fr-pagination__list = first_page_tag unless current_page.first? = prev_page_tag unless current_page.first? diff --git a/config/locales/kaminari.en.yml b/config/locales/kaminari.en.yml index b64d7d40b..6e495b45b 100644 --- a/config/locales/kaminari.en.yml +++ b/config/locales/kaminari.en.yml @@ -13,8 +13,8 @@ en: other: "%{count} %{entry_name}" views: pagination: - first: "« First" - last: Last » - next: Next › - previous: "‹ Prev" - truncate: "…" + first: 'First' + last: Last + next: Next + previous: 'Prev' + truncate: '…' diff --git a/config/locales/kaminari.fr.yml b/config/locales/kaminari.fr.yml index 725223c58..e07552d5b 100644 --- a/config/locales/kaminari.fr.yml +++ b/config/locales/kaminari.fr.yml @@ -13,8 +13,8 @@ fr: other: "%{count} %{entry_name}" views: pagination: - first: "« Premier" - last: Dernier » - next: Suivant › - previous: "‹ Précédent" - truncate: "…" + first: 'Premier' + last: Dernier + next: Suivant + previous: 'Précédent' + truncate: '…' From 9abac909df20a6c002c84145d32cc0fc564fd5d6 Mon Sep 17 00:00:00 2001 From: Colin Darie Date: Thu, 14 Nov 2024 16:53:35 +0100 Subject: [PATCH 19/21] test: various fix due to recent refactor --- spec/system/routing/rules_full_scenario_spec.rb | 6 +++--- spec/system/users/dropdown_spec.rb | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/spec/system/routing/rules_full_scenario_spec.rb b/spec/system/routing/rules_full_scenario_spec.rb index 682f7ed10..b5fce1ac3 100644 --- a/spec/system/routing/rules_full_scenario_spec.rb +++ b/spec/system/routing/rules_full_scenario_spec.rb @@ -157,7 +157,7 @@ describe 'The routing with rules', js: true do # the search only show litteraires dossiers fill_in 'q', with: scientifique_user.email find('.fr-search-bar .fr-btn').click - expect(page).to have_text('0 dossier trouvé') + expect(page).to have_text('Aucun dossier') # weird bug, capabary appends text instead of replaces it # see https://github.com/redux-form/redux-form/issues/686 @@ -284,7 +284,7 @@ describe 'The routing with rules', js: true do expect(dossier.groupe_instructeur_id).to be_nil expect(page).to have_text(procedure.service.nom) - choose(groupe) + choose(groupe, allow_label_click: true) wait_for_autosave expect(dossier.reload.groupe_instructeur_id).not_to be_nil @@ -303,7 +303,7 @@ describe 'The routing with rules', js: true do click_on user.dossiers.first.procedure.libelle click_on "Modifier mon dossier" - choose(new_group) + choose(new_group, allow_label_click: true) wait_for_autosave expect(page).to have_text(new_group) diff --git a/spec/system/users/dropdown_spec.rb b/spec/system/users/dropdown_spec.rb index 2a442f706..8d7849c4b 100644 --- a/spec/system/users/dropdown_spec.rb +++ b/spec/system/users/dropdown_spec.rb @@ -25,20 +25,20 @@ describe 'dropdown list with other option activated', js: true do scenario 'Select other option and the other input hidden must appear' do fill_individual - choose I18n.t('shared.champs.drop_down_list.other') + choose I18n.t('shared.champs.drop_down_list.other'), allow_label_click: true expect(page).to have_selector('.drop_down_other', visible: true) end scenario "Getting back from other save the new option" do fill_individual - choose I18n.t('shared.champs.drop_down_list.other') + choose I18n.t('shared.champs.drop_down_list.other'), allow_label_click: true fill_in(I18n.t('shared.champs.drop_down_list.other_label'), with: "My choice") wait_until { user_dossier.reload.project_champs_public.first.value == "My choice" } expect(user_dossier.project_champs_public.first.value).to eq("My choice") - choose "Secondary 1.1" + choose "Secondary 1.1", allow_label_click: true wait_until { user_dossier.reload.project_champs_public.first.value == "Secondary 1.1" } expect(user_dossier.project_champs_public.first.value).to eq("Secondary 1.1") From aeffd19abd3b7197eeb2a7560aa9e1466fa1833b Mon Sep 17 00:00:00 2001 From: Colin Darie Date: Thu, 14 Nov 2024 17:23:30 +0100 Subject: [PATCH 20/21] chore(footer): add digital inclusion sites --- app/assets/images/footer/logo-france-services.svg | 1 - app/views/administrateurs/labels/index.html.haml | 2 +- app/views/users/_procedure_footer.html.haml | 11 ++++++++--- config/locales/views/users/procedure_footer/en.yml | 9 +++++++-- config/locales/views/users/procedure_footer/fr.yml | 10 +++++++--- 5 files changed, 23 insertions(+), 10 deletions(-) delete mode 100644 app/assets/images/footer/logo-france-services.svg diff --git a/app/assets/images/footer/logo-france-services.svg b/app/assets/images/footer/logo-france-services.svg deleted file mode 100644 index 7f3a64671..000000000 --- a/app/assets/images/footer/logo-france-services.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/app/views/administrateurs/labels/index.html.haml b/app/views/administrateurs/labels/index.html.haml index f0dc512f5..f6ea78c76 100644 --- a/app/views/administrateurs/labels/index.html.haml +++ b/app/views/administrateurs/labels/index.html.haml @@ -13,7 +13,7 @@ class: "fr-btn fr-btn--primary fr-btn--icon-left fr-icon-add-circle-line mb-3" - if @procedure.labels.present? - .fr-table.fr-table--layout-fixed.fr-table--bordered + .fr-table.fr-table--layout-fixed %table %caption Liste des labels %thead diff --git a/app/views/users/_procedure_footer.html.haml b/app/views/users/_procedure_footer.html.haml index d4b149ec1..c1aa47387 100644 --- a/app/views/users/_procedure_footer.html.haml +++ b/app/views/users/_procedure_footer.html.haml @@ -37,9 +37,14 @@ .fr-download = link_to I18n.t('users.procedure_footer.dematerialisation.title_1'), commencer_dossier_vide_for_revision_path(procedure.active_revision), download: 'true', class: 'fr-download__link' %h3.fr-footer__top-cat= I18n.t('users.procedure_footer.support.header') - .fr-footer__brand.fr-enlarge-link - = link_to t("users.procedure_footer.dematerialisation.link"), title: t("users.procedure_footer.dematerialisation.alt"), class: "fr-footer__brand-link" do - = image_tag("footer/logo-france-services.svg", class: "fr-footer__logo logo-france-service-fr", alt: t("users.procedure_footer.dematerialisation.alt")) + %ul.fr-footer__top-list + %li + = link_to I18n.t('users.procedure_footer.support_links.france_service.title'), t("users.procedure_footer.support_links.france_service.url"), + title: new_tab_suffix(t("users.procedure_footer.support_links.france_service.title")), class: "fr-footer__link", **external_link_attributes + + %li + = link_to I18n.t('users.procedure_footer.support_links.carte_inclusion.title'), t("users.procedure_footer.support_links.carte_inclusion.url"), + title: new_tab_suffix(t("users.procedure_footer.support_links.carte_inclusion.title")), class: "fr-footer__link", **external_link_attributes .fr-footer__bottom.fr-mt-0 .fr-container diff --git a/config/locales/views/users/procedure_footer/en.yml b/config/locales/views/users/procedure_footer/en.yml index 102b8a5f0..da21953ed 100644 --- a/config/locales/views/users/procedure_footer/en.yml +++ b/config/locales/views/users/procedure_footer/en.yml @@ -23,7 +23,12 @@ en: dematerialisation: header: Paperless title_1: Download the PDF form - link: "https://www.transformation.gouv.fr/france-services" - alt: France services support: header: Being supported in your approach + support_links: + france_service: + title: Find a France Services house + url: 'https://www.transformation.gouv.fr/france-services' + carte_inclusion: + title: Map of digital inclusion sites + url: 'https://cartographie.societenumerique.gouv.fr/' diff --git a/config/locales/views/users/procedure_footer/fr.yml b/config/locales/views/users/procedure_footer/fr.yml index 557905380..59404d781 100644 --- a/config/locales/views/users/procedure_footer/fr.yml +++ b/config/locales/views/users/procedure_footer/fr.yml @@ -39,8 +39,12 @@ fr: dematerialisation: header: Dématérialisation title_1: Télécharger le formulaire PDF - title_2: Trouver une maison France Services - link: "https://www.transformation.gouv.fr/france-services" - alt: France services support: header: Être accompagné dans votre démarche + support_links: + france_service: + title: Trouver une maison France Services + url: 'https://www.transformation.gouv.fr/france-services' + carte_inclusion: + title: Carte des lieux d‘inclusion numérique + url: 'https://cartographie.societenumerique.gouv.fr/' From 0286a56b782ba9e49b6cdff32ef968f81785e111 Mon Sep 17 00:00:00 2001 From: Colin Darie Date: Thu, 21 Nov 2024 16:13:00 +0100 Subject: [PATCH 21/21] chore: remove patch-package, bun supports it --- bun.lockb | Bin 580488 -> 573688 bytes package.json | 5 ++--- ....0.patch => @hotwired%2Fturbo@7.3.0.patch} | 12 ++++++------ 3 files changed, 8 insertions(+), 9 deletions(-) rename patches/{@hotwired+turbo+7.3.0.patch => @hotwired%2Fturbo@7.3.0.patch} (65%) diff --git a/bun.lockb b/bun.lockb index a3ae1b76d94a58d934a43d1abc59164e4f084ef6..11093e0eba99601b3cd76bb81b3fc50a7aef40ec 100755 GIT binary patch delta 110823 zcmeFad303Oy7gUEp`dmUF(?8ey$C2EC{Td_1tLgL(5N7diU9%yLK2eD*(Inbpr~<+ z3+%DQ<{U*u@px=dQG%jIMX?t>DE2Li4f_4&UTcTI%k|#xzJGjUe1jTNbIrN>XFaRg zt2VOm(RMrLx4WuqrwxxB&~PI3KC3(3M%aDJ7?*|`IFB0*<>);K+vXcC{%2k$M zTs*Jqw9>4!NMwKXLBtEo@=8kcN+OXrsjU%w0GZRlo}kL#i0++6Aa`O>Ng)M2if}Oe zI#M+Qn~|zH7z3Mt7oiKA)0)O$rfX(7ifY1Zrj+vuhlw$bN- zN>k{sh&CzTpI9}enEt4Xi32UpELF!Mk+&VsI>>gZE7*W^?}N%WHPd)nP|^+ z#U({E@=Nm~xuvKj=Tfip%*@MgOF~(r*T3^U|iaA$bnR zg33Pxq`->&(%h1g+1K zWlBNOgh;Q}w(_r?{xqE7sQ4JJPE07totRe|i7aVj)4dKVe|x_&tx5N=j#+ZpoD5T>P@XpHZh(`Bxom z%`@@~^NVv!OONkpTfV2)RFO{RTinT7;e1fTGy4duXM?J<&5;%lhRgh+{vf(M_byO9 zeTR5(LdEr+Z9!jvD&W5>ux(dsl06Elspv5ps$m**l&vV!&xkiE-vGl771wvOwH4=< zP3S{5Ex4l^@sJ=D9Ly@pZV$x&SWkD(Pb}OgFWtXu3L^kFGJzo10&z zMhBh`7LrdUY}41SMiZyz7EDKf0mby*6Q&Ki|s2{D@r2C}F)rOm2Dkl&eZ&gQ)$>a z=s`DKy1cn%d4-cAku*%Ch6c+6>B90t-iPuv&$@x>kwK9Pbw{=?%P*YQrJy7-;zXNZ zpu=N8HQ=z}*7l1*t&8D0d7giFqScs&Ct16c)a5bGUuT1MtB(J2T2oH%2 zIoYQBbA)xFDY@t5AxG4_Sp|7D^CNVfulzP%6YtnltZ{n#1HD$|lTWoR*i5t3l0#0j zU49~>8-p` zP95%#N$=3?G0IlnFl|`&0sivzWcKK@Y#09NQoRSK)fHXGTl0qIn^;s>h*w9}p{umV zK(%;QVR3#jZMo5JR{yB{zs|O$P0E`vYYOd~p%LS={cNij73UR-v+K+$Er>+c=Gy+R z0yVF1q-qVs0E{A^Tnv{>mE_MT$(?KmSNYHNSJiJ)UQDdoG6j?sLrmQGNIh)Komkr5{Im(kD*M%PYw*iZo@Kw1Nkl z6RVwDLdz@Ci6Cvo#8Ub*HMi{4eB115Pz{<;R8%m5T|SFM>Q-54LH-09vSeB$!v0xt zIJ*4fmFc#jVSJ-K(*KIn=+HH*Fn_K(U^nkHM#-<*@2F$T3vG38&an1aNAeydZ(7$@ zTNji&?~L1YXBAug41O^B&&7V91})29gQ_+C%OVj@9u>nGJelda5<9~d!qtmGaGB@S zS=MY53rgo|P}-AEt!w}`1%D=e6YxWa*Uz!NjFMXAPXg7f$h@E#ah1k_7L3`Y(m);`w`HH48PbmF| z3aaN%fGX#jOD$duD&53|Hr;gcl}q>yK^e|K(3DuR$QFDOTr1Zvi*3Wsy3AVW19&jz zms<5=*HRJ&ozue(PizDSh&)>MhHlWaD7!0aGtFE*SIU244 z23}l8mP6PE0_-6ceQQ6Qir2`+u+ARS#C_FwLm%XviKF(xUrpvpq7pTRdL}` z%a3*ZCo-x5CtqvhyE^?Vcq8;f9Ipo|-N&StUU!-0uR8vu!}}awUrr!{go_={bNKdh zTR=WsLo^K3&^*s{)inI(I=cvcry;nawHObF-?EG(OTy0n=Iz% z<>e)N_K1`(xxr=}3Cbi3NvKuqJWv%)pEO}sDJ$MgxC$;VDl5*NI6X26F5d_b7UNvL z98g1%ms>J%Rv9NCxGYjdBUs=ndbs#QK-Pouik(#4f{2enJzG|T8Q?0gHTeAPZjA4+ zSOKbm)u0;qEU1E;f@)CioxAfezM;!E$6@;bng69lC1qW5ODF2AF^6ZuvU$Y;ez4LO zxZGh03z0tIkvDvhIhTfNtb2f3-*0gpm=0>_T7t4{nD5bht%dH7(*e!@I|#^RQ#e;o z&7WCN=O5NPX~p@Gr16I1bb-dhAg< z_M_I=p$m7qo8cO=A#0fbGEsMg#^5K9*|B}c;UVZ+Q2t3la=xoUH6)t~Wb(@&wLS(UtyLIL=kk3NGh6hkQ-JNuY*egv0Zm#Qti@q$h2H6CEZ&HK+}!4BtLwP1xsY zYpG)>Ktt06RD*t|LXG{^Ywc#%9m_Ooe9uo64WHJ$}jI{h++~ z-=HjWv%@;;tOc%sYp6b>AmJ-cZ}hy)x5MeT!<9cw_omaUK$YKVy=_?eVggF|#|yT= z&p|ockD#X6M-E>DWvOrshiLZ0b(J5ZJj^@ecyLdciBXzOu2EAj>2tFfImvFnWd zi6uotUb1|~q*)~eczIuVdad|y{@=CHk2UF9egl(7?VOZb#xc3Dw9hMcBssm8lyL{v z{8iiGC8TRex^qE|#7t1d7QbfuF%DF_KdiRxoBX|YS$yB6t-DrT) z-Ax0933wCcPsMi#O7IG(k*oma^gp~~D;fyb2uv)=D=5RDk2@Y3-iOOar-O~bk&Yh) zs-i=jeodNPK1N|V`F=TnNphB zgFFXQp)BzeTZVjM1E?OJ`;BeTlW_HX(YF?-eP@U8bWpxCBfl(Y*-*I3dGULj?{QG& zUH5~AFv}N=$Kl{*D zX{v1cq3ye`z{GOSh0gSI!2{sApqw%VYI@BmDk+}IbzF|W_RuEfjp{}NHMCa(t|o4d zTfMBLM=x2jcvj)OiA9t0enoFc{1*6Rd zRO?mYop4Qos~uk8aGJwW4v%%%)!`uy>wyPqIs0jU0^k;hFFWi&MH;Yw!-Z5D;608n zb68STP%x{Q3xlT7zyUOeHAQ?-4si&&=HeesqQSDb89WTW1}tw);5rvE7iyM*TR>HC1{G+149^0`VOqJlE|;-wWMb|_z9W%;qHAsygR)#f(JWo&L?*O~ zmIo1Ux3mdva|P&bue5kxWGP&e6vx05a6$^6om&u@l$TfBC2wZIJFRVnFM@K)1*Dfx z90ke=C%F74fwJ%?ZSB~X=1<8loLt23R^^5Bin%_?B7vNxv}{tByu#U$yt#Q3bE$CB zVK!q?VP2Uo!?+R4pUAF18eJ8H*XSoYJ_uAfy+HLiJbE8e$M!t@U90AItOTXVBuDvU zT6ZW9f7l3JQhiozxY#vyQ+a<-K3-gsSH|sn$@ZvSZS%PKDP$dep|hO>PdGfUi{&K_ z3-V?cs_Y4H*(I*0O7go*D~&|%>*eMy zsGYqr`LssbwmkAEWGOtPkVcB0Ee%S8EW<3>;;7ydpurKot43>f|% zIk~8$3%}}4Z85;+3xBV?aFFfLN2zFVCOQk$q7&xZ0r#|86)OOKLIy2=`@;_gw-2_a zoZuSp?;+OZhaYd#hYcD_#mc{DL;I0VmhB8`op0yzt)d*cny_4flc_*0n@B9{>E$(xcl_inh-^TTR+ z@XM-?pdJq#VIyt;Wr<7BHTL08#WUfWrN_DSJwWxaBPgHQA5=wAQ2D~2nz`o>egS%u z1}lHq;HOjNw&J^qP*1OOJ<2%MS|S|Nh3K+SHmDx;aCjJ~2KiKK}wp~?0v_-T5mq1jWPN<%bjz8Y&gFl?Mn_b{jqg|jF0snDrUI>TD*nls(} z-?QMwHbTzAMNaUO!wmhv--nDceLGM?)d-Xmg+sTe1wzaGy(O6cp#{Q*gcueW_9UDo z|JAGr^Mw_L`9sr(LlLeAL3+*qu%+QN31>r?A@qfC7KCHCr?-br8cw@#nuQJ9Te;=( z!my&Sg0SE)W9S>9mxp?oFZB9wZ#Ws>&@71MTOa8S*O0Ywdg#P2vHk?k<=&5oq)oT; z^X_Rj!*aM*wntc^<%E;+3c5@z$dAm(E1IJvINTf$o?)j`N!}!W9*;ymf@?kKTxiRC z-Nn}jwczm<&ZI8I)2AF?RBjVIUSyr=CQt{w;K#}?d2=5qwi%YV_+jd$ z4~Todf^a4IbPn8JU}wpHO6@LKP+n%e`eRTF$?Kq2u(Lt+AY4F-2H1zIO=ML35w4+I zDNy;onQhbariy-OioAuc^<+J$^h}{H{JtG|60Q|6#6uo%3Bv?m%(W(8QQ(j5)UrHv zj?I4!D9eSrX?SdTb)MC0e$wOEGJ*QTpZ4xyp=z%n@aZI|wDP_;Y*%454wPDk*M3fs&nd4=-T$ak06a>8<5dF2&hfm=wR{)NZ5u;5OM zqQO1uexMxf`-QdvuetPlI@+tmw;^2_@fzo8{J5+~fal;E-#b7(Sd3eua#+n$1oR|v zF%inR=j$goU15(&mxHoUc#dvMdhO};=&>$>&u8GYgUze7k2ZZkRn!*L-2NSuMZ<%0 z@LG#jv(RJ5kf1gEObQa7bdBwC5>x^CQwobpIB=dwyw>r)pn4eIV7GEQ=lo!ZxUdN< z_T{zK5>;?n;4M)39smc+X98I zZ9iXd*^{qcTmS8!mX3a;{!IVuejS^(ICN)uaYBjCv{95_`&&4y*{ybqlaES>D725bJ&J&j=uhoxewhkvSV8G z48Ll0D*BY~jY-A+tm_XO)89M29-ATUt>ahDO8TwOO8Bpi$@D5wyP-z?j4{dRT0eVi zD)wtVfAQG<(H?%)*i`gF-y4^TZu7JG9_B9^mx^D)(%Ro_tcdpYy)#nLgrCiKmcNMa zhx{tOd-&d&spzGC_L(WKnprxG@*^rg-i@Ij;%^+66`k#S9Bd!%K%QU}wTr%3h_i|I-CHP5S+lKK;?-|%}D#Fh=D;cfpSLLRn{e5pj%A1X2_YY#Q zkoPcb0IaTGJv!+f#G%D9<+{)JCZ@ctPNOliqL~Snm%%~qoHLT%6|iG1J2UBRgV~bF z?H$f}q-zjYotuoG20K=q)3>`Rn*Ad)(sZ(GbSXx zUa*s4X+gg(@v|qVqEGvaCa1iHEJ-75x#N@3GktGL%3FixY%(Dk`>Bb)cuIe7J`=3Q zG~T)zmO~djX0^Hymtno*VXBO(F{y#6Sy8!GbffR(r@RKN3QQda9&<#8_>1yW(dB*> z-*5WfG~!u5hXi@5$0WU6n5|i+zXO(O^Wv26``+|aG{ev48xQ3Ba=(i2YTqkJd5u^O zvu)iB_&9%2K`QF|ReZnbdoxmAS03){Kxp8K{Y5iU(R=(VVm#I*)e`fo$0nl#{p`Y& zcOjaFAht9onpqE`Mww{Gv~K>>qZ3}Fwe4sfKO;Zs4S>mpF<%Bc52n-zi5_L zh^kqs*e@OY^x6Hrli4qoi3GVxZy_uTmL3%NEKH-~1!ms~ljm698`Q~-m|sc3*ZGU) zq`dc>me5r2ZaJd15x2r*qPiyIDyGnpmRWO8fej#zZeYHelrm`uq(1_SpoOzp69ts85F zTp|(-PZ><}(DSS5+k=kP^>b>s*yK!MbtG=6Km5!rZ^ThHj~$-N9mC=Blkx9iNBa%V z%8IvRe2(^)%*u+7Bs4^!#7aWyM@_HeU!Y_Lr5@egwlb;_)115@&Uu-M-3D1EgffO`im-3(N2CjjLc(LmX>E zydFjNFiXyl_Dv8{iR@1-ZL|EU1u1V68b#rD^gdeO&%PuTAAte-`VI24qKo~iOH$s4 zaJd9Ckma`(McCCv_PWS1)&q_I9#Zy$srIPJ7>M)37)`~obl&Ax zElefeMjMJ&GvHp5!cIf6>)K^7^%+;99WTOU*I-tA4f|Q!1t$#ecvxToQ{4$?gpCMn zUgcLUPQ~|Q=z94Z3$o&;5E`nUdUq01AFb^_g{gJHS{pss_byLy5^?PhCiYU8?J3hd zUJdKvHyEE4&Gfw`Deq2-njDrE-OpdNBo!U%S1n1!mJIY4&+4zk&J`)|mw`2fV4wjw zyZqfQpcfL=8S-`~4MLQO%R!knitLMLJ} zSq;CLlbIl-Az`0n6ZsjYY{8IteK}9qIL-ChFl^$?Qw6K(ycZ`^5N9&_GO!^FX5n=( zid79PJG-LtlHQ@mhpntUCo=)DXO(~r&?@0|$2*kD4)T?bS$n+;Q%%-F zo!OQHTUuv>1tu^#chEwZO0Q#buCr`c&)VVHvTT~Eyooqi;Ii5YqLu!lYg67@G^LMd zI>-JR=BJzf(QbaWNqMCw*n*jb4B7p#5kZ60rJXPhC(UC4I?=YSPGI*N9b!|h22>z$MIzJaOcxYpZfXTNHBiZg|GUCO(adRX+e#4zn%hRJzZ!Kt|A zNuilFT_?fZ5_4@bdV`;Reaib7%{quy%7ad}te$F#kAw~JhmX(lt|z2v9~`E=t*~w| zxr11P43I?4AqXs#1_S|%R3W>?VZa! z0+Y+w$*==ND-WA;-A7Ym11|@YdOjeTFg}MYZ zlXtZ!{w>Oh{t`~$S*P3jDUX4=8fMocvDaWhyG`X}mYAyBQqf%ByFKMSJlYz-o=3id z)nt-~kYd`H(AKivtuQ-oST_C|tbfqxBgTd~eY!=)lkzAF`PeFknCSn)(c?3H7)q8Iy%R;HrQ z_*E-Y-hO9>O|6`t^p1lCjR@R$p^KxV92}m8bqk*5zS*PX?}*_bfj!%vRpXTG*b`tH zEtD>g=RI(@JFJP`FCSX6m>fTf|aNFobe)fGS@73`(b+FLH_dgp`1mKdelY38-x@VBLdKo)qu5Ddly8k2XU>9o#c|J@-$N{r7>1}|i4YntL z!ZZYd55+SlXm^uORuIxmV1by;4z&tfPqeF(Epsf)mXdQtGWvlYccWMM-h({!PKrc0 zPE;J=S6`U)^!Kdf0OaCKa=l;mU@HC&S|5Moy;)w5JlhMF=bMwBe%uYLW2$?|0Uk=l ze?~gS-*{V=*J*M%I685Uhq0xo*vpgN1F!)wwkS5NzhFZw!!rj@iA30I)e)+=0;ZI7 z_r7HGWxr~5%1chQTd#d=xe=yDa7Y-JnSf}7?9seoz8!UYwm1`}m4w6W-I)o9oW-u7 z@4&24GZthfrq%c;V}2rRAPGG`=hnBx<-08PUu9sx=&PL0xc_I~m3+Y6E zqfYb19I5>VW3r-C{HiC|pWvsFIM|z`5kLFMl-F;jEgZ*MlJw@lI8#?N3dZ~%nA*qn z2fM|4uv3EET;q5P%CIY}j>))DZuL|udXVq&lg|V{oA2BGMSOqcS3RBb4w-FdiZ#zL z7$*sxe%U_R%-5#8570&hMXREmId+S)XW@JO>}OJ5^SO4|(zFG0b5wT*`av+z5ZC zNp@!Omv4SaRp4%fKxZC*+y8ufK@+~^wKY| zlY*49lio0xJe2ldk&JJI;gnBjMUVCuy}-6yUQ^D^$>_g*Z+$A-$j|2cRDaR>lxHf! z`06{8-k&gM!Ml>tv3_<{DtfcOi0}9PD!vc*y$z{oo}axT6~FaD`s6QJpA|jLuR^`c z_g+l#M4$a)%A0brU5#k{jLZbYHZbFfWNgR9e)>!O$@)JzaYhyqjUpy0<5z@A=-Vsd&a^vg4BHvb@=ZG(EBQ zs-(9TcA{n2{;z3yCuQ#ic!w@z1LFSQ}7yN#3NV83d3K_ ziXR_@sis1pZ#_!ez6HAz=o{&^MpA6zm^qmwk#O<=d$8sgHVH)ve<+cy^~^C zs@_S(4_%JC`VC&mijNCIl;&NhkR1}%$S*@?GBUJmy_fPPUl)#c^S z0h2p%*q@(_4Y=MPwzYq(@_K*q*8cI2uE(JMlKEL)<&Adn#OXK;uY+|BD$HTSO25g@ ze>SXhGV6%=!wa*#jf8rUh(~l1rQICvaa!TBVR9l4qHINwK9HEnDPh}ysda1=WNUbf zt(SF!$G}0b;4l}TPpDV0`aDYL*q|CtD2ZPk+qLXxt*G7iSuoAApgeCCOj{@WV+9vd zF!?Rp>f~gs^R52kFZz2kZne7#9cMSb6*f|pnVc~+6~+-zz2Mp9l-nYa(_v|*vVapM zY>>ZkAy*~0M-G?`1OQ10Y8-Gy-sKXowmDd&wE0TQ$OdyCIlB`?-Jss zUOm3o`T#BGu4g*TItxc~Z!Jux7)*9u()$&r@w69vJ?{(it3Bwx5VazB_V@%g%Chmv zSnr4ZVLSTA<~-~#-qGKC;bGfBdxBiLIue-{ru14p5{aBu!_J4POq=qhN5cbi<#Wkc z?izo?xc>1CYv{bc@%Ak54?=36J$wy#%-&?-dARjL*eO9lIe6t)Fgv3wxtmJ-%Q87R zX9<`ZPL-@akH9n?D3iFKTpWxe^RUN5zsk5OGXXg}NT@;@{M&A?w#YMKa*%+lSpkbLfen*g<8K8a{Xn$%$=VHl4mKhz)ob)rEfzl;W-rxN5;~q# zF_Y05-+*QL8y9DJCp>L^gEsNQ+(OuC{*u4?CJ59FTm0y?bjoZjjP|WVh*>~$4t|Et z_zfmxc@qc?3mPD6+y@)3iu{bnlCcKQnqjeMe{a~cwu|;c_ybrU(ge4M@utt|QG}oG zyb}mz1tsNRh)ZAt1IFx)z3`mbkVZ)j*V&O^E#!nX+%b-)w_*$}WxMSL z`?)s;rqwcd0*qC@><=qs5qjBdXuyC(Ua>_6zs|%?dBqIdKiWTW8LF1YU0diUC@O@z zJchgDt2P%~#JyZPz|<0+BRM|b3e$|U8|tU9n(Z}K@tR3LfLg0w3!imz{*#O~f88vW zTKu~0dhj3t##h9 zD?vTFj~O-emmOK;L+0-^BZ2lXZk!4%@Zje+iS(?7+ACAY9{hu9^oM zT@zQm8|(C;Ez{{iF?dB=Te%@fQE?_rqShPc-_Ho!Uu zOy}vQU)hwzF(*o4Lx{6SgJ)oBoV@}21J>8(!!a|zwg(f|CmLP>JKB6-r_M3K8wL+T zm6VM9Quz(6pC(59$ZznA;Ou!hpTS7Ub9cpmI{8}S}NTd;1j4*$Wn61QaCyk{4~p?-krDT57F?}GdoT3IW_ zJXmMqm=wg_0UHWq6XXK8;ZHTLcVA}oCzF08qk0RXlCVItc-P-<&B*S+b6gIr7jX>6 zj|^9k9Cbd-4%)-9+=PuJhUv`ll&#&c6*2Zt6|MsVM^1SXr=>#et7@&W3- zIhoet*ND07sA#|VS-%F=@I(BygpMYGeaT@xOx4hH++qjJHbLg^`desJmbkRDe~Xy< z-J|`|ZX<940q-l~)u`aU$~)rsn#0_Nq&FWHEVZV384Y%fEr|^({ztg%YfBgilMU@4 zFNN98aJ=?Dba8g*y6?1YrE4!FEYCz>i|@{2APMw)`u6w84R5XZooSFaKl z6k>83U_+Rk8as_n#=ei5^xk+b2i#z-=0%EC$=G!8-ZmL!$4y$X+t2uLd#VB2fr`?$JMp!@C{=s$h zJ1%vw@FWhe7Y#gYSKd)5wgocP6)-t$a9oMMAr`#aaR`5BurE4;wlbNR43l5%D&+wb zS)T(J3*oP@EEr?)cG5f6i-t!mp1m)DDJ3Pro`=cC3=M17PcZdA&Ey=4jnnOD*e8Wa zFy|=by8-4b^+IMe-J}n|&<*QHBU5c*<(UbH+DN}|=Dh@%+RqQD%%yt!MS~TFablr9 z33du`_E~=g%+3J)e)KL(w&aO?aWc`gfsNbM?^96JDm&{I!)&Xx#BNgRVEhi*-&!3{ zI)lg5{mrmJEIXa}Ta6>k@ImZQa|oVjgU{{?Hq59|$L$K*N9!gCw2wX8rLMqCU~4pyJT0edRMUV z!Ah`k2v3JWNPY9}BiK_WGC5tM>`zUj!4;IF_d>_)imlUZx7hK}Q+LHa2tBig#v2|I zjpUo***rHB%B_j;-iGc<=k;nHjpXf$y&gJ#7yWH_I_A*b@;(BsmAG+>-I`knJ$+YE z>!8-}D}T+b(-LPeOU}U#r1^jCW5QSw<=}uIM%$4byc37 zaQahWa#g!eRl@8(#p7}OEf^Phyt~q*t=W*n%o@|yP9IXw&P+f?1X*>D@)b<;B{=lN z4{sM%cLpKN4Bhi(CLl^g{{JM?UTzolPq?q2SBJlfsnwp>-^w%VK~!o@m%Mc->ZG0j zzr*ZI)4V*UyICVMkB_UN?Q)Z(5;ntwLX7CggtqgX}zYXR#Y+fY! z{BW~)6vLI-L4&m93@*?JDV~*$R{+<;bW+(>+5sJ-k?tsQlM#z%Mmw4fr(?d^s9L|N zV`4IPcSkd9H0npFsyVm`jUC#_Y(R~l+DX%U<7ife8wv85JtNC|h0v%VsTR%dN7#%U z6D~-`&xhG-!qtSvl8VJ>N-{R;NV9k>)l_%3sqKQ>pi9Uy-eWPYVL2@R&o~xz&ifN4 zKeGFD*RHm!_JVUZOhXef)t7OH1mkAv;;i`3gxD}RKlMGz4p7h*?>tyZ(0=^O`v!I# z%-$#;-K}QPJSQ11hV@Yiv3t6iVP|nl`?#A~40&iB%3#Gf?qyD9k0UZf_uD7i~QuzXJ=-rzWEjJv#<#1vjTt3CS94_}Kh5 z81Gl`!pRmwYDb!>Jc`w=Ne@dgQ&DEZk*LYgkpZURwk}%*({aKJenGC=(>g!r9)9jP z4JNl`e0fe@3Dbtj5s`WOy^EuldCA0)ysiU(wq?v}M($eJ zh~TjBAEz_EUu7oxgpQzjdp=AHT5w{IuZIP9`v1pZ$FicqlO4@pmh?`5*&P};jjhQt z8>Z5z-CoDt{h}rIb(UG2Pn!PxZIB%5V?5~2m3@PpvFG}lVbh2`qJKE8Xj|-t{$>Me z?81R2eLAu44GiZx4i|5GY%t`!Qgb#TxdPMV(#!=*~-c++8a*-{JhQ07bUKsuTbI~ljqw-T~#)w9!kFwHMY-Nb8tHH4~1!-AXR`0a!S z`%CEP=Y(A5%Xrr>93ZuOUJc914We|a4jStbJA;A@Q&*55QW#JiwY%d=rq?sQ)+j(EZP75m0{naTWf)$as zBOf57na5bO@nDS*rhPL9cWaZg`H+Lwq{gLu333`$!a`ofEhl3 zQw1STZr9n+u^Op(ha6&qd$TEoH2-<7nv_`w61+R?y+z2{Lhjn;l(5lM8Jl&ANuPt? zzla)G&tx=X2|Sg>+Fx>WR(v9%{(&>DASBx}tGF)t8fM)I_lT!XgZT}1_DvAbO3DCn zrg$56R`9D(a%5=oU`mcOi|0}47pQ74t2v@=+R{BYK{26BPe3rz!&oCRn_%~;eR?grZ zduHv?y$Obc;qQOff_IckZew!J#Iep|#7%?7_^(1i?=K*9sz3aatavq{QD%48wd^4 zLgXDZF?6T@Zr}?@S+g3(AB3G2T!!xMo^>bLHUv-bv7wVp`sGZgC8*9#IdpA-sid0o zwAUdoY`J=z53^Ger}kFE+%|I^&)k!1R-Qe3?Bx*WoOnK0gf%HO&39{8yr%!LZzr4d zD`{bmDYi`!6&N53bVL7dxVvo8GnOfVXB`|H~ETN;5@p}{( zSiW(7xP5C=nh3L_ti#%4Ft?v9OnMp9+@fMK&W$F$kx+Fr_!-~Z2-E&yf3a^cJ!IOJ z2Elf@&aE)FC1Q|IVJd~c@5AY>Pl3(HSrJwY)8j|FE=%L>W@rc3Y5Yt=axnHCntU^? zN5JGdU%~9vjaaY3nq7zooD!Jw)tsBXhf%bf+rQ)V1575ek7zkXHZN`ABKaj4J0)BC z!Nt+=Wjr?7xiIBnN94Df$6@{TE_>|PVza^E?89eLr`c#2Dndt-l5K{UYCnN#h35P` zKbh!IVoTZOisMn#GQ0BM2(wd4&p98$?B1$Xt$C^0upHN!UurFBpF<*L(a70Be!22| zn4CAwWEA06F#XVglg(owvu0VJW9#P$cs@)9B&puI)Zcnqi=?*VI^31VXWQiLLO9Y1 zuyMib33n3G4jJg)Z!i^uT{Nz9>=*^Rr&kDbN~bD@Z2Zhv^Ws%Z<96Ynv04l$Z%qYCD(}+q~Gh+z@=y&-;c5 z-5oUu_V0G*+3OXak{(RP3ePj?x3V{-oo|MLUZ3-AB|(+mVwjr4Nt~VkRhVr~&e&vZ z{|n5p+sHBU0(<#Oj_t|VI~SM@sIkm)lYTp~my}0?7eMj8pOdkwa35Lo;fin!Ik$Kh&kyfjIRD2Uo^LjgCieM!lYS@I`a&~IIPpTWSQx*^Y!IG$kx9P` z&;Qp&ET7uxVs$Szi&4B87u)5eo~f=AO~%$;Y|>Yfu>ArJa)Z0LUCSk?U7d@~7n89E z7MKl6(DxE%huOF?niXq!sTp=R(utS4!sE*b^$8;5uMwPVgP9Ad$_B3@I3NgmCoQtm ztiFDJjo$$4Ytw8dSZISo7PDX3;H?B*A-@r{g~a<@#$ek77Z7A})3Er{1Si?xVV8%h zS47axd7YzI!1$ZxO8y~1-aJuo_L7=fUM4u!svWNg%k%zCPzz@8ms8?D!+Hf5Yn`vu zE)bNlnBb5g=)I~Ssdd&x2Fy5J=4ZW|mmzlvG zdF-ldP5NrG|Bk9(NU%;}GS=6a#Zu2RwoopB=3|d1p~0eIa+)*wVPna{9Dic`narOkf2KH`3hJ{Pnx$)^t;*{l&)|=;74b)(zeA;)$sb`UfAp!1 zY4F*Bx;rZUT&LHxH-dHfa~ps35k}37$M^@4RL)(}`0Nc8e|HdT zQSG^pKlS7WZ8Apj?**bo@%Q;7 z{J`l#mA}RD+L%E5-04E)`$F7wc|6+6oc4IMsVU>DT-ta1k)eLzj|$w*AARerPB;xw4T~#s50q4wFJV2tl+F`zC`W7vSA!dYiaOB6 z3#A_%rT@~JxQN;)sVQH=W-eZ+jQp|^=q;Qsl-}C$y`iGo@TG>fbLrZ#Q3n|h2c>mz z5kdt!I$j&)qn%xR7l&P4I-!C`Iqc^2+NcH`?ey|6AXLGJ3Wj<8-0)evS(@ zRNNj0pT9#T8N^pZ@Dz~$x<*cw%BMC;I*l*2bd-x1MopI|nY5aeJPHNTJa7h|{|Typ zJlF;KrZ~(8RRm8o!Dnx%{uQ}&#rpqsDJ@6(;3HH!OC8Q~dTrEfJRe<#t8nqPQ4+_m zpxg@`a-a&z<&YHU9E*a_B~df%sc73^;&RvtjL%6TD4U%=NXr%H@eb4qlv4}GcKV}!DsnWL!Ni~-cV65xOkxoe$jEE8obf*+9>H|r@w5r zJRLo-Tvfe>B=vQNZ-6RtvqXpD?>R116(2ZW8zp_{bfL=s7?ku0U&^;t#A2hsSYJ3n z7&S}QGD8&q71RT_yJ(^E|KfOURQrBMZvZBgXb)5t&*`;MW2OK5l|HqQQ}FJ>f6JNK z&qSMa*UUbc^3R!Lb#d5L zx@qw&hZyy?hf5|@vYw6$#e0Dowcd{Raq+cL@%@}G6d&Ny4+Q1m$AkPA$<~)e>+-dP zVDv}0geSX%LIqFZOAR{J=|TlZI(?MW_lB~^nJ)c!m;US+^~-RR5Y)nHt^lDdQ{)mB zJ6))rl{zj|gUUdqpXc=2sPyMKU8wphK;@esn*2hSpf;*O`d^gmQyZh^{pXku%72-Q z7OI{rKHD z*c23zLQuO0xdekCqE%K6t^n1L3qf`0a>uU# zRo~TVc&I8^<`UfM@IFw6T@9+>XF#P}@9m1F9#PE+Pw5iwA?M;CN6&HNx?eK{aTU!!tnsi=54u3ZCfr6j15( zPfnA674q{7FEjN~c*GyGEe6{&5ZQ!$I|+GpK^Pf(L;8UHlM-BS2L! z9#jR>K>mvq@uht3-#v-w-$7CNmj*iHzeuV02<0@39Tzr->t88S&sTyf=pIn%?gjO! zjneOPdTo^c52x>j-S&u3MGv@ydqcLbDrT*cJ?xUzM%A+#U50xCl;NHQv2o-DhcALk z_Y$c7yzKZZpgy%x>0WhuEwuYeEg>jK|Dv8UyzVjx#ouuJe}ih^n=bz@U8!%iWqJJS;hS5J4rQ{-NXVhT~lpa^2{{j`CAYMuK=Sv1|1WIoV zs=R|0=};cmwyrw^AMO%%0-F#q0MuML9#lamfcn%%6+8l6T{{(21*f@mLggFn^fBQ6 z@F`B84k~|PT?S5pnNBDJHObEhRp14n8nOW7zsO~LX_?c%v#t2+K~;3K!`ndqi`>nZ z%DoR%x_?M?C|6wV;@6ZD(6aUnsDhpcHEG`h4+Ose)x&Q=eS`{bcU-6nes)|a{tKuE z{O0u9sQBMqy7E6<0-+*yIxZCd6I4M_%pl98gVO8EEDq(94ICG$BN;ATBTz*)b@4)# z*WB{*Fc6?3TDpWn71Y*op(;AeaiI!6!tuSK8hWIQ7b<@j$1O7cy9;~gYFIayQK*8B z235f^P8W*zaPhrB&90%K@}J=1PjomO)SE;R1(e`qP(2!@2#4A`Cps>SnvE}W`Sjk) z(F1C}66Pytumt6iMD8*TR2vIG6LXOTa~&5d|M{Srbdlo=K;>Tq zD*ff4%3V^AD_;e!aKe=iuX3pWudL#)cIZ32#^F+j*Mcf|x#QP~n}58*N~QMP;^Y+$ zZv~~_?)V)J?{s(<$bXT4@}+h^=9tY%$LR8u z&p=t?3sCx(U<)vzWy+!A>(`NBHdaTQm_MqciC{RIx0Tzf(g^_ z^=OCSN#;TqEmZOaF4-kc-y163A{Q?dzZ_KiuW-6hdL`HlyazlOeA>l>$T*EwDrr9bcDUvRh{RL5TeRnE(xK7WTQ=M{~RKCie8dqWjiO}sL^<|=r@@lBw5 zxEa((sPyl+_;;Nyl&^mT>X`i{s54BgT-&7r{~uxb|4qd@gB<7@{=dZX|JwroHottL z2@TZHHFem`HCU+Y)yN?(qPdF@Dq|~9V|JL+{|@B?9Z08&I)d_nBOG>i`S*(QzuFN> z+tXzbs=!{33&nXyH2C~aPz~u#dSMo*hVpmhgO9L{gn6Z)5g3Vl9$qZLJ*>}nIhRSx0ix(=Naa^eQWuW?Xo#WR#yaAMXZ*hDDs1InD zp;|&15ma!yOIRBv{ln=(Rd~PSLN(+8$A#jn9IuVa_mKW+D2>?LF5x>ap-?@1-|^b0 z2aoU2RlpA*uK-0_vukO}vRF9&1tzbgo+0hOQ%Sn3j7>(Dq{1}fe4pwiv!_^mGfHc%g-(%tFsZin|d zydTu=_$a6=@5o~W^uWIk)JLcS);oOB;me>Ze$DYspe*#3)87U45vqspff|Y}pvwD? zix=t+ZU-2==kW&t74#>ljDI;E)!N8sZ>R$65HGCf(g{_L=k)!YF4P6XA)p%63Y4$3 zuaEuJ^X^Vax&(beeT3@q08j-V3#!7wF8=RO9T`G8;qeZKf-3JsP!>45KK7R|2|*vB zDw+%`;}pm9U3_g+LkiH9zZmQQ8c;pF0aX0Wj^7R{-Abq5>-hcUPIwS(O@h}P-vp{5 zZ-HvaW~aXk>LXMIA2{3sD&5DRD*6=EM=1R>Q009ND&JQQ%fEGjA3$aN+2Lx@Xq3aTE?sR@ z{&7whik|^0|9FQJoIVlMM;O%&$0Qe#=OSvOD$Yk&Po@ja&JUydn=IVQxojman^5)5 za(r*7V&=H`-O%*=$o;B&F40<^E^^6)s_tS?*)MVYQWyVssByiVbiztd&w9&1HS>Cx zzZPmS+&x0wzu9HD6%@bIW&Aso6e#EAkom--< za@5f(mrkho4WRUwK;3e_>*8yp%KyOWwK3hC`7wt{74tdK!Y@D-_Z6sY-#Y$1sBUft z^%08y>bOw(eh1afC{Ow-FXk`}RJRh2d!Rm`wQnsUD5$hYxswC}aa zeXmW*ANcI;HA=0?`(B&G2>V`}-1pk#Zm&;jX6$=y5+m5xC$)y`du`J0spHvLWskG> zy*A0S2!`1A+N6EF+V|SzzSk!Ay*9b;wMkvI@cEy-MyY4C+HXfH-<$D$uT2IU?7r6~ z_q{fGgl?|+2zBV%_u3>z*!S9`y-wcu+N55e)U??5+9XEU?R851vQztYNyUrHTKis` z#1J}q?0ao;-)ocq!`CSHy*9b;waLGET~f=dUaQ>q+N2Dz@3qO=uS?1z;@Xn;y*9b; zwaI<2P44aWNgYi0y*9b;waI<2O}h8(^ctleQg(Y?GUWSSo80%>Brg-nKmPyw+GOkh z?zPEB=N%BcVYQi29Xo-4cImO|*y(1?^RWh|#cK!$n*7%groMo%Q9@(W>~(~u>k-a> z9ifS-lCWMvmp2fanR#y@%&kIrA0gH}X67gBoM3jI9;{cgbpVAZG@pO zBmCoSgihvH2|Fa5`3}O7=I(b8R=$GJ;9Z0+X3Vylm9-#)YlL;O6X~teSpyPb%gUjKuDS@3F{?v`4FMEnfD>W+&2*3myl&T zeT2|)Q*1wT`A4x6qy5a=5;kulMZYZ=AywN53*SWk8aX=9^!}K1nQxKthL2+>#s<|+ zx9u&`4gZ96gU#|!NVjY=!cGato3$?>41F76S;AHc<4yOk5EgF1 z2-kdt^>WP?37H?0V({0bm}n}$M%eZ-DSrBz6nSRgHweoXX{7GZ~k_;(1?P0n`+E4L!7mN3IazegDTDMH@&2t{Uxx+SR-Mb zgi@37Bf`{e2(x}fm}S;VX!To@NQl=Z%e^M2F2c&+5mrn1hl$oh z82txAUOj~S%_<3rod}H+2&+tP0%6TgeDbnnoq@r^7=6fOc&JnVB-t#FWUI|u2~Gb( zXrGSosF|6LuwKF@36GgJ_0vvYIyVgmsSkhLRKrcjC_>Nu5S}pe_e0n$VXK6vO!o!| z3u6dN8z8JTTO?$rAq?Ih;aO9;Kf*Q%+a;_s0~;bNtAlVyLxdO1_Y#K25k?+>P-Rve zfUrYCJOklHlaqn4vM$1E2^&qc5yI$t2ziYVUNNgABoYXX4@9Uoxd$SwNu=#(o;xt@ z#OUiL;~<2o9w}xWM2byjt%RoO2<;mqyk%xKMp!RllZ3ZTn}ZSN)<;-yFv7d0T0+PD z5PCL2c;C!#g0NY_RtX=P?oAOEHb7X~H0^}gmYDgtY1$~0xj)L_W+C%FAtin&%9k;7%AqJLGf-Ab`8sA| zEl@@`Ldk1^@@>pKC?#I&-^a{^mMCkatdsI%%rt6+GW8&oS*=jE$ILTQnl?sh z-x}qYm?>$EvR=w2DZj={+cqe34@Ozg2Icpdc}+^kCMZ4IqU?;B3)`Y>maHP~YTqKv;PwgTG%#2ET#+clr2Bi%@82R!K;-422AvVogiRSl5X%4m24@ zkYZ{pgjq)*G`1<4whps2vBLV+q}X&MDVmu!oyjt{4Z?!X2+d8kgpO?ydUio*Vdi&1 z*eqeIgjS||SA>P_5SDgDXk)fW$UF>T@KFfu_y?8{wn^A7p}iT{4PjY(ggd$+bTHpb z7g>GS>B=jAKkjPlTyQAk6BC(9^7y(DX>M9M+30Ni(w-!ulggv8fj+dYd*$ zgt?s&79H-tN~5RNzBOBmW6VPs!~Y_p;-!VU@Xeh4R+oPG!^k49K6VL1Pq z2EyoL5c2vXoMcu>Nc2ExoI=PkxhaG-64psL)np7nnA#Iz)&PW&X03##y%5?DL^$2d z9Eh-9!X^o0Oq*j7<|Yvq9E&i{R7>cXiO_Qp!kK3NAcV~lwn`Xpx*vzIus6ce;}CMq z773Ys5C#uMm}n{oBW#nfT|%B2I0Ru?7Q!7v5T=;#B@FG0F!FeWe6!+sgdGy%LlLH% zoS_IS`ys5BFvCQ%5k~h%$je43GOHvcQV5NQAWSoF7bpXPw6A)&Z zwGx^RL}-5^!W=X6M1=JcHc6Og+6+gSdo03&;RxrNY6%?&A@m%9aK4#80%5a+trE&j z_mdD79*3~>B!u~9i-gR<2!l^XxX4tVjId3@b_om2z#N2SLlExBLAca>FJb8M2qRBH zSY%e5g0MqE{8WU?OwOrkr$;Y0cMF!7=xM+eW{luUvr2H4@kRobCRcE^c}(D&j8VWf zCSS1BtQA~qnw<_9GgGk4R0)=wHlu;-%sj#Mrdn`==`;qo(aaazWZo9sY`TvHZZV4l zE6f(bt)}-l;5Jh!xZQj%xWf!Q1Gv*H7u;pO7pyedX99Pd6@q)ruY!9`&RM{H=5E11 zOmsZ(PcuevzgZ=Cz<6f^t4yxoLGzg4A(N2{JZ$m>tIb-$Bc|B|;88PEu*Osg9y4tw z0{=4e1dp3)!M{zXNx&0kzTipow%{q#Jr8)=EE23WTLjOT-jji6O{L&D^SNN188`)a z-YgfqV7?cuH`!BxDziec!Tc(C(d6UFSFq$3>#q*p;e-s?U)3rP%q_4j|zhl`oL_nAIBJG*mo1|{uVD7OMl z`?pZmO4%;uPM}FO5T$DmlmP=#?gg5yQi6M;QeFP$>`>Y!z?2?_6KJO4 zm`i;*eQy}2J*M(-ggN~XmJCNoU~WmM(I27F2!upt(FlYG5A5gthJ zOhCwI8caY~8i{ai53dLc1exFW2GC8SQ0nX>nL=inOcIVnNIH>rDiUP!?#5)Tl*zjZ z6cJ>OOX)farM#jk9%Lr$K?xp>Qgts%$sjXb5$}|;L=l%Z%_b7@ptlh=5HWLvM3WG5 zk3r};38B1MC*i1sjFS;6nr@R3#=V2EPeNsrQbMV*2*ck+c*X2`7vYkG0#gvGn!!^L z=8Qu)DWST_GZmr6c!bGQ5o(%a5*|n>KMkRl89xnS=>&vp66%=J(-E3ZM2Mb_P|sYJ zkZ=-0fnAiPfvG$LVXcHEGq8Bg+>+3BGD4%72#w65nFzt}BAir^Cg!1pof2Bj!lId3 zHVa|U6ojO+5n7mLvk`JnMc5#rl}Tg}j!Nih5Zah^62?tK$T$a~o#{3Qq11GQeG)pD zkhut#Bn+R6(8+B15Mj;?gaYp&bTNb9L#Qzm;iQCaCeJ*C2NEXFL+EafNmx1yq5OP= zo@V@fgr>6*u1V-^N=G9kGzihr2z||E32Pr%w2%cbq>N42?I>cg$TiO5tc7R z7-$|!*eRja`v`;0viA`Ny@%jy{h?0QbI(KAun3FcX8#f_j!N)ZM4ELUAdH(Y;X^D& znk}Crl!`{!CtY)@xf%ZjLetL>u1Q#7_OC=pxEvw+ON3SC@|Or}CDi!};Y$;~ z9--^!2u~!ec9IQVf#9p;HRj=JEOtt0^)(jjoU9L8iI8*+!g|we4HmgqA#9Ma!6aIX za8yFiwFsNcItk;xK*+cbVTb5PmeJHzFilix9mLVZXU7 zVXcHZn-G3Bb2lM$U5D^Q!XZ<0GeYn;2+KDk95D|i?3B=I3&Jt8YzxAm^$1C~BAhVI zwj$*I7GZ;glP1wNgrgFAZbLY2)=3z*0U_ge2xm>V?+{9DMA#?cyb0Nka7n`O?Fhe` zT@vPOLMZS(!bLOqdxRRB5l$imTn>uyR{nwH$vd#SVvg;=Zs`_;@;kA+#$912clf4T zQLah35oF5jLP@v{C3+XiEp9+k)=H_f8|6-rd2csL*Y8lCNVykeUfqKdyd7ov9+W?V z%%4(rN@=whAM@o-r z_@nN>Kai2T2gyikQ~3}kU4KMadWm5}xrLT1zM7{a)p5w=SRHz|)Jlsbqo;5b4yvqi!s z2{}$60tAj~<0a7aQf6aEWAjl&3IenH4%_Dgsmq4-IJd}icHgr!Fiew9$b6gh>^ z^eDotQwW93SqTY`Ayhq$P{d3-jj&e2JqZz}@)?A##}SsCK`3r+NeDiH(C92eNwerI z!cGaEa|oqPgL4RjenD6*p{(&gkC6K$LZ|Zx<;^MyMY?lQu53GGbEn+T-b4`)Ef!X~12bonZgPP3P+%(9nycd|z^OWD>OT^pu zpglfq(tWfMEL|oy;ZFk7uUUCN@QjDtPJ0~K!Sh{q7Hp+wqs22m3C!g=mV@6YlahJH zPt6jVK2HKu_$M?Yb!uQPwh&lD#PtFcbJAmle7{l~bsjgF5`4`Nc~D5!BEGE#qF4;} zee_kDNVKF1%W{N_D8xShpis}w;`}Pr^RQ{}l_2weeo;OBf!7cnvn^DDyGw!K{}IQ&CgkaxC6BM z)c132Q9jplYyQd}R3<^v-#_#Hcu&;td-x%sHU2q*cuZ6N zJgjk@twGK=DQM#HH+;X$6*cR|n(IM9 znf!g?rMpxZ6>;yb8BrprSJE^$9i#F0)nck_nVI?}gTewY{^7T#cgdi20iI!eq25=` z34F06eXHA>o%+AYPv8am`z2mOsNTM&i&!7z@2lpWNwFst?LHm8Nn#~o15_+Q3`THeTjcoEonXn#F@{^EJYod|_&2btzuN#%3 z)ki&H5MOrZ+lNs))<@dYM5c9>pfZ6ZV@ReZT`$O7suC3D>6zExFNLq;`f8<9{~q0X zQJ$Ll))cH7^hS`UWB^l4n&8;16rLC%cpB7f*^7LzCHSM3GG-y!2GIS(;S~*&z??#+honVx(e#ZK&)%saY zKj{3c)duJnCEb>)XcHM|Bh+tU>!;N98DzB#`1M2b`e-*9WkxN!*=j?q7KT>AYD2B2 zpJI3SUm0e#Nc|STG^cm@4M$Y2GsAqVMOnivXbY56J|nFbj(?%mMp-Q@+F%*+8Ev&} z_=oruei+Yc**PAnUo_Nbj1_a>ALdi|ZkP7+2>iiV)zeA;1g{%Zj^qT z&=loDt8ugR+idL?+4xGLZ9((Z{|DBv6yjEExY!z&MjMKzOKpj@D}#TewforGl|_5S zYD=wMIkak4`^0MH(LSc5>oWZ;i1bzc6`-&+Ty7(*h*s2UpWDEd&{C*c_-M~0g{=&! zt+vW)FQcWm+80)P1x>#JtIJvYEb)(R%qjn24NH91pr|8N1^35gzp;U

    48u>#bHD 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ɞMsi^=n&!%T?rFn@0FmG78k& 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 N?I#|kpX!&N`G2VpB=P_N diff --git a/package.json b/package.json index 01c2be0ea..6f3a8a446 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,6 @@ "lightgallery": "^2.7.2", "maplibre-gl": "^4.5.0", "match-sorter": "^6.3.4", - "patch-package": "^8.0.0", "react": "^18.3.1", "react-aria-components": "^1.3.1", "react-coordinate-input": "^1.0.0", @@ -112,7 +111,6 @@ "lint:css": "prettier app/assets/stylesheets --check", "lint:css:fix": "prettier app/assets/stylesheets --write", "graphql:doc:build": "RAILS_ENV=production bin/rake graphql:schema:idl && spectaql spectaql_config.yml", - "postinstall": "patch-package", "test": "vitest", "coverage": "vitest run --coverage", "up": "bunx npm-check-updates --root --format group -i", @@ -197,6 +195,7 @@ ] }, "patchedDependencies": { - "@gouvfr/dsfr@1.12.1": "patches/@gouvfr%2Fdsfr@1.12.1.patch" + "@gouvfr/dsfr@1.12.1": "patches/@gouvfr%2Fdsfr@1.12.1.patch", + "@hotwired/turbo@7.3.0": "patches/@hotwired%2Fturbo@7.3.0.patch" } } diff --git a/patches/@hotwired+turbo+7.3.0.patch b/patches/@hotwired%2Fturbo@7.3.0.patch similarity index 65% rename from patches/@hotwired+turbo+7.3.0.patch rename to patches/@hotwired%2Fturbo@7.3.0.patch index e19c76115..646a4741e 100644 --- a/patches/@hotwired+turbo+7.3.0.patch +++ b/patches/@hotwired%2Fturbo@7.3.0.patch @@ -1,7 +1,7 @@ -diff --git a/node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js b/node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js +diff --git a/dist/turbo.es2017-esm.js b/dist/turbo.es2017-esm.js index cfe4084..fd54933 100644 ---- a/node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js -+++ b/node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js +--- a/dist/turbo.es2017-esm.js ++++ b/dist/turbo.es2017-esm.js @@ -802,6 +802,7 @@ class FormSubmission { var _a; this.state = FormSubmissionState.stopped; @@ -10,10 +10,10 @@ index cfe4084..fd54933 100644 this.resetSubmitterText(); dispatch("turbo:submit-end", { target: this.formElement, -diff --git a/node_modules/@hotwired/turbo/dist/turbo.es2017-umd.js b/node_modules/@hotwired/turbo/dist/turbo.es2017-umd.js +diff --git a/dist/turbo.es2017-umd.js b/dist/turbo.es2017-umd.js index 303ecf2..08dd969 100644 ---- a/node_modules/@hotwired/turbo/dist/turbo.es2017-umd.js -+++ b/node_modules/@hotwired/turbo/dist/turbo.es2017-umd.js +--- a/dist/turbo.es2017-umd.js ++++ b/dist/turbo.es2017-umd.js @@ -808,6 +808,7 @@ Copyright © 2023 37signals LLC var _a; this.state = FormSubmissionState.stopped;