pgkiln 0.44.0 → 0.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/db/migrations/102_app_computations.sql +345 -0
  2. package/db/migrations/103_shortcuts.sql +341 -0
  3. package/db/migrations/104_report_queries.sql +413 -0
  4. package/db/migrations/105_component_settings_groups.sql +367 -0
  5. package/db/migrations/106_form_designer.sql +102 -0
  6. package/db/migrations/107_app_version.sql +9 -0
  7. package/docs/apex-feature-parity.md +15 -12
  8. package/docs/guide/02-concepts.md +24 -0
  9. package/docs/guide/03-builder.md +69 -13
  10. package/docs/guide/04-pages-and-regions.md +84 -3
  11. package/docs/guide/05-items.md +14 -2
  12. package/docs/guide/06-processing.md +22 -0
  13. package/docs/guide/09-reference.md +14 -1
  14. package/docs/guide/11-from-apex.md +2 -1
  15. package/docs/guide/12-development.md +8 -2
  16. package/docs/guide/16-files.md +23 -0
  17. package/docs/guide/18-cli.md +4 -0
  18. package/examples/hr/hr_61_form_designer.sql +80 -0
  19. package/package.json +1 -1
  20. package/public/app.css +79 -2
  21. package/public/app.js +307 -35
  22. package/public/builder.css +21 -1
  23. package/public/builder.js +67 -0
  24. package/public/sw.js +2 -1
  25. package/src/app.ts +9 -1
  26. package/src/appfiles.ts +18 -2
  27. package/src/builder/advisor.ts +7 -2
  28. package/src/builder/appwizard.ts +22 -6
  29. package/src/builder/arrange.ts +33 -12
  30. package/src/builder/code-editor.ts +7 -2
  31. package/src/builder/components.ts +86 -4
  32. package/src/builder/designer.ts +44 -17
  33. package/src/builder/errors.ts +65 -0
  34. package/src/builder/form-designer.ts +229 -0
  35. package/src/builder/forms.ts +1 -1
  36. package/src/builder/locks.ts +6 -0
  37. package/src/builder/newapp.ts +2 -1
  38. package/src/builder/object-browser.ts +81 -18
  39. package/src/builder/region-help.ts +2 -0
  40. package/src/builder/region-settings.ts +2 -0
  41. package/src/builder/reporter.ts +1 -1
  42. package/src/builder/routes.ts +7 -5
  43. package/src/builder/search.ts +3 -3
  44. package/src/builder/shared.ts +41 -8
  45. package/src/builder/subscriptions.ts +30 -4
  46. package/src/builder/ui.ts +2 -0
  47. package/src/cli/replace.ts +16 -2
  48. package/src/i18n/ar.ts +62 -0
  49. package/src/i18n/cs.ts +62 -0
  50. package/src/i18n/da.ts +62 -0
  51. package/src/i18n/de.ts +62 -0
  52. package/src/i18n/el.ts +62 -0
  53. package/src/i18n/es.ts +62 -0
  54. package/src/i18n/fi.ts +62 -0
  55. package/src/i18n/fr.ts +62 -0
  56. package/src/i18n/he.ts +62 -0
  57. package/src/i18n/it.ts +62 -0
  58. package/src/i18n/ja.ts +62 -0
  59. package/src/i18n/ko.ts +62 -0
  60. package/src/i18n/nb.ts +62 -0
  61. package/src/i18n/pl.ts +62 -0
  62. package/src/i18n/pt.ts +62 -0
  63. package/src/i18n/ru.ts +62 -0
  64. package/src/i18n/sv.ts +62 -0
  65. package/src/i18n/tr.ts +62 -0
  66. package/src/i18n/uk.ts +62 -0
  67. package/src/i18n/zh.ts +62 -0
  68. package/src/i18n.ts +124 -0
  69. package/src/metadata.ts +18 -3
  70. package/src/runtime/component-settings.ts +42 -0
  71. package/src/runtime/context.ts +4 -0
  72. package/src/runtime/devbar.ts +1 -1
  73. package/src/runtime/documents.ts +29 -3
  74. package/src/runtime/engine.ts +2 -2
  75. package/src/runtime/facet-state.ts +10 -5
  76. package/src/runtime/facets.ts +29 -5
  77. package/src/runtime/form-designer.ts +676 -0
  78. package/src/runtime/grid.ts +36 -11
  79. package/src/runtime/items.ts +47 -32
  80. package/src/runtime/lists.ts +1 -1
  81. package/src/runtime/logic.ts +12 -7
  82. package/src/runtime/pdf.ts +2 -1
  83. package/src/runtime/regions.ts +8 -3
  84. package/src/runtime/render.ts +8 -3
  85. package/src/runtime/report.ts +4 -3
  86. package/src/runtime/routes.ts +7 -3
  87. package/src/runtime/shortcuts.ts +43 -0
  88. package/src/runtime/smart-filters.ts +2 -1
  89. package/src/runtime/tasks.ts +6 -3
  90. package/src/security.ts +2 -1
  91. package/src/subscriptions.ts +67 -0
package/src/i18n/el.ts CHANGED
@@ -63,6 +63,7 @@ export const el: Record<MessageKey, string> = {
63
63
  'common.back': "Επιστροφή",
64
64
  'common.home': "Μετάβαση στην αρχική σελίδα",
65
65
  'common.skip': "Μετάβαση στο περιεχόμενο",
66
+ 'common.back_to_top': "Επιστροφή στην αρχή",
66
67
  'common.toggle_nav': "Εμφάνιση ή απόκρυψη πλοήγησης",
67
68
  'common.dismiss': "Κλείσιμο",
68
69
  // messages and errors
@@ -390,6 +391,9 @@ export const el: Record<MessageKey, string> = {
390
391
  'facets.stars_up': "{n} αστέρια και πάνω",
391
392
  'facets.star_up': "1 αστέρι και πάνω",
392
393
  'facets.clear_short': "Απαλοιφή",
394
+ 'facets.menu': "Επιλογές για {facet}",
395
+ 'facets.sort_count': "Ταξινόμηση κατά πλήθος",
396
+ 'facets.sort_name': "Ταξινόμηση κατά όνομα",
393
397
  'facets.show_all': "Εμφάνιση όλων ({n})",
394
398
  'facets.total': "Συνολικός αριθμός γραμμών {n}",
395
399
  'smart.placeholder': "Αναζήτηση ή φιλτράρισμα…",
@@ -685,6 +689,64 @@ export const el: Record<MessageKey, string> = {
685
689
  'reporter.changed': "άλλαξε {date}",
686
690
  'reporter.no_match': "Καμία αναφορά δεν ταιριάζει με την αναζήτηση.",
687
691
  'reporter.chart_tag': "γράφημα",
692
+ // Form Designer (form-designer.ts)
693
+ 'formdesigner.no_sources': "Δεν έχουν οριστεί ακόμη πίνακες για αυτή την περιοχή.",
694
+ 'formdesigner.no_forms': "Δεν υπάρχουν ακόμη φόρμες.",
695
+ 'formdesigner.new': "Νέα φόρμα",
696
+ 'formdesigner.create': "Σχεδίαση",
697
+ 'formdesigner.draft': "Πρόχειρο",
698
+ 'formdesigner.design': "Σχεδίαση φόρμας",
699
+ 'formdesigner.design_of': "Σχεδίαση: {name}",
700
+ 'formdesigner.back': "Όλες οι φόρμες",
701
+ 'formdesigner.add': "Προσθήκη",
702
+ 'formdesigner.edit_row': "Επεξεργασία",
703
+ 'formdesigner.rows': "Γραμμές: {form}",
704
+ 'formdesigner.save': "Αποθήκευση",
705
+ 'formdesigner.delete': "Διαγραφή",
706
+ 'formdesigner.delete_confirm': "Διαγραφή αυτής της γραμμής;",
707
+ 'formdesigner.cancel': "Ακύρωση",
708
+ 'formdesigner.saved_row': "Αποθηκεύτηκε.",
709
+ 'formdesigner.deleted_row': "Διαγράφηκε.",
710
+ 'formdesigner.required': "Το πεδίο {field} είναι υποχρεωτικό.",
711
+ 'formdesigner.not_in_list': "{field}: επιλέξτε μια τιμή από τη λίστα.",
712
+ 'formdesigner.changed': "Κάποιος άλλος άλλαξε αυτή τη γραμμή στο μεταξύ. Ελέγξτε την και αποθηκεύστε ξανά.",
713
+ 'formdesigner.row_not_found': "Αυτή η γραμμή δεν υπάρχει ή δεν επιτρέπεται να τη δείτε.",
714
+ 'formdesigner.not_allowed': "Δεν επιτρέπεται να το κάνετε αυτό σε αυτή τη γραμμή.",
715
+ 'formdesigner.form_not_found': "Αυτή η φόρμα δεν υπάρχει (πια).",
716
+ 'formdesigner.unknown_source': "Ο πίνακας αυτής της φόρμας δεν προσφέρεται πια.",
717
+ 'formdesigner.nothing': "Αυτή η φόρμα δεν έχει ακόμη πεδία.",
718
+ 'formdesigner.choose': "- Επιλέξτε -",
719
+ 'formdesigner.name': "Όνομα",
720
+ 'formdesigner.description': "Περιγραφή",
721
+ 'formdesigner.published': "Δημοσιευμένη: όποιος βλέπει αυτή τη σελίδα μπορεί να χρησιμοποιήσει τη φόρμα",
722
+ 'formdesigner.fields': "Πεδία",
723
+ 'formdesigner.field_on': "Στη φόρμα",
724
+ 'formdesigner.column': "Στήλη",
725
+ 'formdesigner.key': "κλειδί",
726
+ 'formdesigner.order': "Σειρά",
727
+ 'formdesigner.label': "Ετικέτα",
728
+ 'formdesigner.help': "Κείμενο βοήθειας",
729
+ 'formdesigner.required_short': "Υποχρεωτικό",
730
+ 'formdesigner.display': "Εμφάνιση",
731
+ 'formdesigner.default': "Προεπιλογή",
732
+ 'formdesigner.in_list': "Στη λίστα",
733
+ 'formdesigner.display_auto': "Πεδίο",
734
+ 'formdesigner.display_textarea': "Περιοχή κειμένου",
735
+ 'formdesigner.display_select': "Λίστα επιλογής",
736
+ 'formdesigner.display_radio': "Ομάδα επιλογών",
737
+ 'formdesigner.actions': "Οι χρήστες μπορούν να",
738
+ 'formdesigner.allow_insert': "προσθέτουν γραμμές",
739
+ 'formdesigner.allow_update': "αλλάζουν γραμμές",
740
+ 'formdesigner.allow_delete': "διαγράφουν γραμμές",
741
+ 'formdesigner.list_help': "Η λίστα γραμμών δείχνει τις στήλες με σημάδι «Στη λίστα»· χωρίς καμία, η φόρμα μόνο προσθέτει γραμμές.",
742
+ 'formdesigner.save_form': "Αποθήκευση φόρμας",
743
+ 'formdesigner.delete_form': "Διαγραφή φόρμας",
744
+ 'formdesigner.delete_form_confirm': "Διαγραφή της φόρμας «{name}»; Οι γραμμές που αποθήκευσε μένουν.",
745
+ 'formdesigner.form_saved': "Η φόρμα «{name}» αποθηκεύτηκε.",
746
+ 'formdesigner.form_deleted': "Η φόρμα διαγράφηκε.",
747
+ 'formdesigner.name_required': "Δώστε όνομα στη φόρμα.",
748
+ 'formdesigner.no_fields': "Βάλτε τουλάχιστον μία στήλη στη φόρμα.",
749
+ 'formdesigner.changed_by': "άλλαξε από {user} στις {date}",
688
750
  // AI assistant region and natural-language report filters (assistant.ts, ai-filter.ts)
689
751
  'assistant.conversation': "Συνομιλία",
690
752
  'assistant.you': "Εσείς",
package/src/i18n/es.ts CHANGED
@@ -63,6 +63,7 @@ export const es: Record<MessageKey, string> = {
63
63
  'common.back': 'Volver',
64
64
  'common.home': 'Ir a la página de inicio',
65
65
  'common.skip': 'Saltar al contenido',
66
+ 'common.back_to_top': "Volver arriba",
66
67
  'common.toggle_nav': 'Mostrar u ocultar la navegación',
67
68
  'common.dismiss': 'Descartar',
68
69
  // messages and errors
@@ -390,6 +391,9 @@ export const es: Record<MessageKey, string> = {
390
391
  'facets.stars_up': '{n} estrellas o más',
391
392
  'facets.star_up': '1 estrella o más',
392
393
  'facets.clear_short': 'Borrar',
394
+ 'facets.menu': 'Opciones de {facet}',
395
+ 'facets.sort_count': 'Ordenar por cantidad',
396
+ 'facets.sort_name': 'Ordenar por nombre',
393
397
  'facets.show_all': 'Mostrar todo ({n})',
394
398
  'facets.total': 'Total de filas {n}',
395
399
  'smart.placeholder': 'Buscar o filtrar…',
@@ -685,6 +689,64 @@ export const es: Record<MessageKey, string> = {
685
689
  'reporter.changed': "modificado el {date}",
686
690
  'reporter.no_match': "Ningún informe coincide con la búsqueda.",
687
691
  'reporter.chart_tag': "gráfico",
692
+ // Form Designer (form-designer.ts)
693
+ 'formdesigner.no_sources': "Todavía no hay tablas configuradas para esta región.",
694
+ 'formdesigner.no_forms': "Todavía no hay formularios.",
695
+ 'formdesigner.new': "Nuevo formulario",
696
+ 'formdesigner.create': "Diseñar",
697
+ 'formdesigner.draft': "Borrador",
698
+ 'formdesigner.design': "Diseñar formulario",
699
+ 'formdesigner.design_of': "Diseño de {name}",
700
+ 'formdesigner.back': "Todos los formularios",
701
+ 'formdesigner.add': "Añadir",
702
+ 'formdesigner.edit_row': "Editar",
703
+ 'formdesigner.rows': "Filas de {form}",
704
+ 'formdesigner.save': "Guardar",
705
+ 'formdesigner.delete': "Eliminar",
706
+ 'formdesigner.delete_confirm': "¿Eliminar esta fila?",
707
+ 'formdesigner.cancel': "Cancelar",
708
+ 'formdesigner.saved_row': "Guardado.",
709
+ 'formdesigner.deleted_row': "Eliminado.",
710
+ 'formdesigner.required': "{field} es obligatorio.",
711
+ 'formdesigner.not_in_list': "{field}: elija un valor de la lista.",
712
+ 'formdesigner.changed': "Otra persona ha cambiado esta fila mientras tanto. Revísela y guarde de nuevo.",
713
+ 'formdesigner.row_not_found': "Esta fila no existe, o no puede verla.",
714
+ 'formdesigner.not_allowed': "No puede hacer eso con esta fila.",
715
+ 'formdesigner.form_not_found': "Este formulario no existe (ya).",
716
+ 'formdesigner.unknown_source': "La tabla de este formulario ya no se ofrece.",
717
+ 'formdesigner.nothing': "Este formulario todavía no tiene campos.",
718
+ 'formdesigner.choose': "- Elegir -",
719
+ 'formdesigner.name': "Nombre",
720
+ 'formdesigner.description': "Descripción",
721
+ 'formdesigner.published': "Publicado: cualquiera que vea esta página puede usar el formulario",
722
+ 'formdesigner.fields': "Campos",
723
+ 'formdesigner.field_on': "En el formulario",
724
+ 'formdesigner.column': "Columna",
725
+ 'formdesigner.key': "clave",
726
+ 'formdesigner.order': "Orden",
727
+ 'formdesigner.label': "Etiqueta",
728
+ 'formdesigner.help': "Texto de ayuda",
729
+ 'formdesigner.required_short': "Obligatorio",
730
+ 'formdesigner.display': "Presentación",
731
+ 'formdesigner.default': "Valor por defecto",
732
+ 'formdesigner.in_list': "En la lista",
733
+ 'formdesigner.display_auto': "Campo",
734
+ 'formdesigner.display_textarea': "Área de texto",
735
+ 'formdesigner.display_select': "Lista de selección",
736
+ 'formdesigner.display_radio': "Grupo de opciones",
737
+ 'formdesigner.actions': "Los usuarios pueden",
738
+ 'formdesigner.allow_insert': "añadir filas",
739
+ 'formdesigner.allow_update': "cambiar filas",
740
+ 'formdesigner.allow_delete': "eliminar filas",
741
+ 'formdesigner.list_help': "La lista de filas muestra las columnas marcadas «En la lista»; sin ninguna, el formulario solo añade filas.",
742
+ 'formdesigner.save_form': "Guardar formulario",
743
+ 'formdesigner.delete_form': "Eliminar formulario",
744
+ 'formdesigner.delete_form_confirm': "¿Eliminar el formulario «{name}»? Las filas guardadas se mantienen.",
745
+ 'formdesigner.form_saved': "Formulario «{name}» guardado.",
746
+ 'formdesigner.form_deleted': "Formulario eliminado.",
747
+ 'formdesigner.name_required': "Dé un nombre al formulario.",
748
+ 'formdesigner.no_fields': "Ponga al menos una columna en el formulario.",
749
+ 'formdesigner.changed_by': "cambiado por {user} el {date}",
688
750
  // AI assistant region and natural-language report filters (assistant.ts, ai-filter.ts)
689
751
  'assistant.conversation': "Conversación",
690
752
  'assistant.you': "Usted",
package/src/i18n/fi.ts CHANGED
@@ -63,6 +63,7 @@ export const fi: Record<MessageKey, string> = {
63
63
  'common.back': "Takaisin",
64
64
  'common.home': "Siirry etusivulle",
65
65
  'common.skip': "Siirry sisältöön",
66
+ 'common.back_to_top': "Takaisin ylös",
66
67
  'common.toggle_nav': "Näytä tai piilota navigointi",
67
68
  'common.dismiss': "Sulje",
68
69
  // messages and errors
@@ -390,6 +391,9 @@ export const fi: Record<MessageKey, string> = {
390
391
  'facets.stars_up': "{n} tähteä tai enemmän",
391
392
  'facets.star_up': "1 tähti tai enemmän",
392
393
  'facets.clear_short': "Tyhjennä",
394
+ 'facets.menu': "Asetukset: {facet}",
395
+ 'facets.sort_count': "Lajittele määrän mukaan",
396
+ 'facets.sort_name': "Lajittele nimen mukaan",
393
397
  'facets.show_all': "Näytä kaikki ({n})",
394
398
  'facets.total': "Rivejä yhteensä {n}",
395
399
  'smart.placeholder': "Hae tai suodata…",
@@ -685,6 +689,64 @@ export const fi: Record<MessageKey, string> = {
685
689
  'reporter.changed': "muutettu {date}",
686
690
  'reporter.no_match': "Haulla ei löytynyt raportteja.",
687
691
  'reporter.chart_tag': "kaavio",
692
+ // Form Designer (form-designer.ts)
693
+ 'formdesigner.no_sources': "Tälle alueelle ei ole vielä määritetty tauluja.",
694
+ 'formdesigner.no_forms': "Lomakkeita ei ole vielä.",
695
+ 'formdesigner.new': "Uusi lomake",
696
+ 'formdesigner.create': "Suunnittele",
697
+ 'formdesigner.draft': "Luonnos",
698
+ 'formdesigner.design': "Suunnittele lomake",
699
+ 'formdesigner.design_of': "Lomakkeen {name} suunnittelu",
700
+ 'formdesigner.back': "Kaikki lomakkeet",
701
+ 'formdesigner.add': "Lisää",
702
+ 'formdesigner.edit_row': "Muokkaa",
703
+ 'formdesigner.rows': "Lomakkeen {form} rivit",
704
+ 'formdesigner.save': "Tallenna",
705
+ 'formdesigner.delete': "Poista",
706
+ 'formdesigner.delete_confirm': "Poistetaanko tämä rivi?",
707
+ 'formdesigner.cancel': "Peruuta",
708
+ 'formdesigner.saved_row': "Tallennettu.",
709
+ 'formdesigner.deleted_row': "Poistettu.",
710
+ 'formdesigner.required': "{field} on pakollinen.",
711
+ 'formdesigner.not_in_list': "{field}: valitse arvo luettelosta.",
712
+ 'formdesigner.changed': "Joku muu on muuttanut tätä riviä sillä välin. Tarkista se ja tallenna uudelleen.",
713
+ 'formdesigner.row_not_found': "Tätä riviä ei ole, tai et saa nähdä sitä.",
714
+ 'formdesigner.not_allowed': "Et saa tehdä sitä tälle riville.",
715
+ 'formdesigner.form_not_found': "Tätä lomaketta ei ole (enää).",
716
+ 'formdesigner.unknown_source': "Tämän lomakkeen taulua ei enää tarjota.",
717
+ 'formdesigner.nothing': "Tällä lomakkeella ei ole vielä kenttiä.",
718
+ 'formdesigner.choose': "- Valitse -",
719
+ 'formdesigner.name': "Nimi",
720
+ 'formdesigner.description': "Kuvaus",
721
+ 'formdesigner.published': "Julkaistu: kaikki, jotka näkevät tämän sivun, voivat käyttää lomaketta",
722
+ 'formdesigner.fields': "Kentät",
723
+ 'formdesigner.field_on': "Lomakkeella",
724
+ 'formdesigner.column': "Sarake",
725
+ 'formdesigner.key': "avain",
726
+ 'formdesigner.order': "Järjestys",
727
+ 'formdesigner.label': "Nimike",
728
+ 'formdesigner.help': "Ohjeteksti",
729
+ 'formdesigner.required_short': "Pakollinen",
730
+ 'formdesigner.display': "Esitys",
731
+ 'formdesigner.default': "Oletus",
732
+ 'formdesigner.in_list': "Luettelossa",
733
+ 'formdesigner.display_auto': "Kenttä",
734
+ 'formdesigner.display_textarea': "Tekstialue",
735
+ 'formdesigner.display_select': "Valintaluettelo",
736
+ 'formdesigner.display_radio': "Valintanapit",
737
+ 'formdesigner.actions': "Käyttäjät saavat",
738
+ 'formdesigner.allow_insert': "lisätä rivejä",
739
+ 'formdesigner.allow_update': "muuttaa rivejä",
740
+ 'formdesigner.allow_delete': "poistaa rivejä",
741
+ 'formdesigner.list_help': "Riviluettelo näyttää sarakkeet, joissa on rasti kohdassa \"Luettelossa\"; ilman niitä lomake vain lisää rivejä.",
742
+ 'formdesigner.save_form': "Tallenna lomake",
743
+ 'formdesigner.delete_form': "Poista lomake",
744
+ 'formdesigner.delete_form_confirm': "Poistetaanko lomake \"{name}\"? Sillä tallennetut rivit säilyvät.",
745
+ 'formdesigner.form_saved': "Lomake \"{name}\" tallennettu.",
746
+ 'formdesigner.form_deleted': "Lomake poistettu.",
747
+ 'formdesigner.name_required': "Anna lomakkeelle nimi.",
748
+ 'formdesigner.no_fields': "Lisää lomakkeelle vähintään yksi sarake.",
749
+ 'formdesigner.changed_by': "muuttanut {user} {date}",
688
750
  // AI assistant region and natural-language report filters (assistant.ts, ai-filter.ts)
689
751
  'assistant.conversation': "Keskustelu",
690
752
  'assistant.you': "Sinä",
package/src/i18n/fr.ts CHANGED
@@ -63,6 +63,7 @@ export const fr: Record<MessageKey, string> = {
63
63
  'common.back': 'Retour',
64
64
  'common.home': 'Aller à la page d’accueil',
65
65
  'common.skip': 'Aller au contenu',
66
+ 'common.back_to_top': "Haut de page",
66
67
  'common.toggle_nav': 'Afficher ou masquer la navigation',
67
68
  'common.dismiss': 'Fermer',
68
69
  // messages and errors
@@ -390,6 +391,9 @@ export const fr: Record<MessageKey, string> = {
390
391
  'facets.stars_up': '{n} étoiles et plus',
391
392
  'facets.star_up': '1 étoile et plus',
392
393
  'facets.clear_short': 'Effacer',
394
+ 'facets.menu': 'Options de {facet}',
395
+ 'facets.sort_count': 'Trier par nombre',
396
+ 'facets.sort_name': 'Trier par nom',
393
397
  'facets.show_all': 'Tout afficher ({n})',
394
398
  'facets.total': 'Nombre total de lignes {n}',
395
399
  'smart.placeholder': 'Rechercher ou filtrer…',
@@ -685,6 +689,64 @@ export const fr: Record<MessageKey, string> = {
685
689
  'reporter.changed': "modifié le {date}",
686
690
  'reporter.no_match': "Aucun rapport ne correspond à la recherche.",
687
691
  'reporter.chart_tag': "graphique",
692
+ // Form Designer (form-designer.ts)
693
+ 'formdesigner.no_sources': "Aucune table n’est encore configurée pour cette région.",
694
+ 'formdesigner.no_forms': "Il n’y a pas encore de formulaires.",
695
+ 'formdesigner.new': "Nouveau formulaire",
696
+ 'formdesigner.create': "Concevoir",
697
+ 'formdesigner.draft': "Brouillon",
698
+ 'formdesigner.design': "Concevoir le formulaire",
699
+ 'formdesigner.design_of': "Conception de {name}",
700
+ 'formdesigner.back': "Tous les formulaires",
701
+ 'formdesigner.add': "Ajouter",
702
+ 'formdesigner.edit_row': "Modifier",
703
+ 'formdesigner.rows': "Lignes de {form}",
704
+ 'formdesigner.save': "Enregistrer",
705
+ 'formdesigner.delete': "Supprimer",
706
+ 'formdesigner.delete_confirm': "Supprimer cette ligne ?",
707
+ 'formdesigner.cancel': "Annuler",
708
+ 'formdesigner.saved_row': "Enregistré.",
709
+ 'formdesigner.deleted_row': "Supprimé.",
710
+ 'formdesigner.required': "{field} est obligatoire.",
711
+ 'formdesigner.not_in_list': "{field} : choisissez une valeur dans la liste.",
712
+ 'formdesigner.changed': "Quelqu’un d’autre a modifié cette ligne entre-temps. Vérifiez-la et enregistrez à nouveau.",
713
+ 'formdesigner.row_not_found': "Cette ligne n’existe pas, ou vous ne pouvez pas la voir.",
714
+ 'formdesigner.not_allowed': "Vous ne pouvez pas faire cela avec cette ligne.",
715
+ 'formdesigner.form_not_found': "Ce formulaire n’existe pas (ou plus).",
716
+ 'formdesigner.unknown_source': "La table de ce formulaire n’est plus proposée.",
717
+ 'formdesigner.nothing': "Ce formulaire n’a pas encore de champs.",
718
+ 'formdesigner.choose': "- Choisir -",
719
+ 'formdesigner.name': "Nom",
720
+ 'formdesigner.description': "Description",
721
+ 'formdesigner.published': "Publié : toute personne qui voit cette page peut utiliser le formulaire",
722
+ 'formdesigner.fields': "Champs",
723
+ 'formdesigner.field_on': "Sur le formulaire",
724
+ 'formdesigner.column': "Colonne",
725
+ 'formdesigner.key': "clé",
726
+ 'formdesigner.order': "Ordre",
727
+ 'formdesigner.label': "Libellé",
728
+ 'formdesigner.help': "Texte d’aide",
729
+ 'formdesigner.required_short': "Obligatoire",
730
+ 'formdesigner.display': "Affichage",
731
+ 'formdesigner.default': "Valeur par défaut",
732
+ 'formdesigner.in_list': "Dans la liste",
733
+ 'formdesigner.display_auto': "Champ",
734
+ 'formdesigner.display_textarea': "Zone de texte",
735
+ 'formdesigner.display_select': "Liste de sélection",
736
+ 'formdesigner.display_radio': "Groupe de boutons radio",
737
+ 'formdesigner.actions': "Les utilisateurs peuvent",
738
+ 'formdesigner.allow_insert': "ajouter des lignes",
739
+ 'formdesigner.allow_update': "modifier des lignes",
740
+ 'formdesigner.allow_delete': "supprimer des lignes",
741
+ 'formdesigner.list_help': "La liste des lignes affiche les colonnes cochées « Dans la liste » ; sans aucune, le formulaire ne fait qu’ajouter des lignes.",
742
+ 'formdesigner.save_form': "Enregistrer le formulaire",
743
+ 'formdesigner.delete_form': "Supprimer le formulaire",
744
+ 'formdesigner.delete_form_confirm': "Supprimer le formulaire « {name} » ? Les lignes enregistrées restent.",
745
+ 'formdesigner.form_saved': "Formulaire « {name} » enregistré.",
746
+ 'formdesigner.form_deleted': "Formulaire supprimé.",
747
+ 'formdesigner.name_required': "Donnez un nom au formulaire.",
748
+ 'formdesigner.no_fields': "Placez au moins une colonne sur le formulaire.",
749
+ 'formdesigner.changed_by': "modifié par {user} le {date}",
688
750
  // AI assistant region and natural-language report filters (assistant.ts, ai-filter.ts)
689
751
  'assistant.conversation': "Conversation",
690
752
  'assistant.you': "Vous",
package/src/i18n/he.ts CHANGED
@@ -63,6 +63,7 @@ export const he: Record<MessageKey, string> = {
63
63
  'common.back': "חזרה",
64
64
  'common.home': "מעבר לדף הבית",
65
65
  'common.skip': "דילוג לתוכן",
66
+ 'common.back_to_top': "חזרה למעלה",
66
67
  'common.toggle_nav': "הצגה או הסתרה של הניווט",
67
68
  'common.dismiss': "סגירה",
68
69
  // messages and errors
@@ -390,6 +391,9 @@ export const he: Record<MessageKey, string> = {
390
391
  'facets.stars_up': "{n} כוכבים ומעלה",
391
392
  'facets.star_up': "כוכב אחד ומעלה",
392
393
  'facets.clear_short': "ניקוי",
394
+ 'facets.menu': "אפשרויות של {facet}",
395
+ 'facets.sort_count': "מיון לפי כמות",
396
+ 'facets.sort_name': "מיון לפי שם",
393
397
  'facets.show_all': "הצג הכול ({n})",
394
398
  'facets.total': "סך כל השורות {n}",
395
399
  'smart.placeholder': "חיפוש או סינון…",
@@ -685,6 +689,64 @@ export const he: Record<MessageKey, string> = {
685
689
  'reporter.changed': "שונה ב-{date}",
686
690
  'reporter.no_match': "אין דוחות התואמים לחיפוש.",
687
691
  'reporter.chart_tag': "תרשים",
692
+ // Form Designer (form-designer.ts)
693
+ 'formdesigner.no_sources': "עדיין לא הוגדרו טבלאות לאזור הזה.",
694
+ 'formdesigner.no_forms': "עדיין אין טפסים.",
695
+ 'formdesigner.new': "טופס חדש",
696
+ 'formdesigner.create': "עיצוב",
697
+ 'formdesigner.draft': "טיוטה",
698
+ 'formdesigner.design': "עיצוב הטופס",
699
+ 'formdesigner.design_of': "עיצוב {name}",
700
+ 'formdesigner.back': "כל הטפסים",
701
+ 'formdesigner.add': "הוספה",
702
+ 'formdesigner.edit_row': "עריכה",
703
+ 'formdesigner.rows': "השורות של {form}",
704
+ 'formdesigner.save': "שמירה",
705
+ 'formdesigner.delete': "מחיקה",
706
+ 'formdesigner.delete_confirm': "למחוק את השורה הזאת?",
707
+ 'formdesigner.cancel': "ביטול",
708
+ 'formdesigner.saved_row': "נשמר.",
709
+ 'formdesigner.deleted_row': "נמחק.",
710
+ 'formdesigner.required': "{field} הוא שדה חובה.",
711
+ 'formdesigner.not_in_list': "{field}: בחרו ערך מהרשימה.",
712
+ 'formdesigner.changed': "מישהו אחר שינה את השורה הזאת בינתיים. בדקו אותה ושמרו שוב.",
713
+ 'formdesigner.row_not_found': "השורה הזאת לא קיימת, או שאין לך הרשאה לראות אותה.",
714
+ 'formdesigner.not_allowed': "אין לך הרשאה לעשות זאת עם השורה הזאת.",
715
+ 'formdesigner.form_not_found': "הטופס הזה לא קיים (יותר).",
716
+ 'formdesigner.unknown_source': "הטבלה של הטופס הזה כבר לא מוצעת.",
717
+ 'formdesigner.nothing': "לטופס הזה עדיין אין שדות.",
718
+ 'formdesigner.choose': "- בחירה -",
719
+ 'formdesigner.name': "שם",
720
+ 'formdesigner.description': "תיאור",
721
+ 'formdesigner.published': "פורסם: כל מי שרואה את הדף הזה יכול להשתמש בטופס",
722
+ 'formdesigner.fields': "שדות",
723
+ 'formdesigner.field_on': "בטופס",
724
+ 'formdesigner.column': "עמודה",
725
+ 'formdesigner.key': "מפתח",
726
+ 'formdesigner.order': "סדר",
727
+ 'formdesigner.label': "תווית",
728
+ 'formdesigner.help': "טקסט עזרה",
729
+ 'formdesigner.required_short': "חובה",
730
+ 'formdesigner.display': "תצוגה",
731
+ 'formdesigner.default': "ברירת מחדל",
732
+ 'formdesigner.in_list': "ברשימה",
733
+ 'formdesigner.display_auto': "שדה",
734
+ 'formdesigner.display_textarea': "אזור טקסט",
735
+ 'formdesigner.display_select': "רשימת בחירה",
736
+ 'formdesigner.display_radio': "קבוצת אפשרויות",
737
+ 'formdesigner.actions': "המשתמשים יכולים",
738
+ 'formdesigner.allow_insert': "להוסיף שורות",
739
+ 'formdesigner.allow_update': "לשנות שורות",
740
+ 'formdesigner.allow_delete': "למחוק שורות",
741
+ 'formdesigner.list_help': "רשימת השורות מציגה את העמודות המסומנות \"ברשימה\"; בלי אף אחת, הטופס רק מוסיף שורות.",
742
+ 'formdesigner.save_form': "שמירת הטופס",
743
+ 'formdesigner.delete_form': "מחיקת הטופס",
744
+ 'formdesigner.delete_form_confirm': "למחוק את הטופס \"{name}\"? השורות שנשמרו בו יישארו.",
745
+ 'formdesigner.form_saved': "הטופס \"{name}\" נשמר.",
746
+ 'formdesigner.form_deleted': "הטופס נמחק.",
747
+ 'formdesigner.name_required': "תנו לטופס שם.",
748
+ 'formdesigner.no_fields': "הוסיפו לטופס עמודה אחת לפחות.",
749
+ 'formdesigner.changed_by': "שונה על ידי {user} ב-{date}",
688
750
  // AI assistant region and natural-language report filters (assistant.ts, ai-filter.ts)
689
751
  'assistant.conversation': "שיחה",
690
752
  'assistant.you': "את/ה",
package/src/i18n/it.ts CHANGED
@@ -63,6 +63,7 @@ export const it: Record<MessageKey, string> = {
63
63
  'common.back': "Indietro",
64
64
  'common.home': "Vai alla pagina iniziale",
65
65
  'common.skip': "Vai al contenuto",
66
+ 'common.back_to_top': "Torna su",
66
67
  'common.toggle_nav': "Mostra o nascondi la navigazione",
67
68
  'common.dismiss': "Chiudi",
68
69
  // messages and errors
@@ -390,6 +391,9 @@ export const it: Record<MessageKey, string> = {
390
391
  'facets.stars_up': "{n} stelle e più",
391
392
  'facets.star_up': "1 stella e più",
392
393
  'facets.clear_short': "Cancella",
394
+ 'facets.menu': "Opzioni di {facet}",
395
+ 'facets.sort_count': "Ordina per numero",
396
+ 'facets.sort_name': "Ordina per nome",
393
397
  'facets.show_all': "Mostra tutto ({n})",
394
398
  'facets.total': "Numero totale di righe {n}",
395
399
  'smart.placeholder': "Cerca o filtra…",
@@ -685,6 +689,64 @@ export const it: Record<MessageKey, string> = {
685
689
  'reporter.changed': "modificato il {date}",
686
690
  'reporter.no_match': "Nessun report corrisponde alla ricerca.",
687
691
  'reporter.chart_tag': "grafico",
692
+ // Form Designer (form-designer.ts)
693
+ 'formdesigner.no_sources': "Per questa regione non sono ancora impostate tabelle.",
694
+ 'formdesigner.no_forms': "Non ci sono ancora moduli.",
695
+ 'formdesigner.new': "Nuovo modulo",
696
+ 'formdesigner.create': "Progetta",
697
+ 'formdesigner.draft': "Bozza",
698
+ 'formdesigner.design': "Progetta modulo",
699
+ 'formdesigner.design_of': "Progetto di {name}",
700
+ 'formdesigner.back': "Tutti i moduli",
701
+ 'formdesigner.add': "Aggiungi",
702
+ 'formdesigner.edit_row': "Modifica",
703
+ 'formdesigner.rows': "Righe di {form}",
704
+ 'formdesigner.save': "Salva",
705
+ 'formdesigner.delete': "Elimina",
706
+ 'formdesigner.delete_confirm': "Eliminare questa riga?",
707
+ 'formdesigner.cancel': "Annulla",
708
+ 'formdesigner.saved_row': "Salvato.",
709
+ 'formdesigner.deleted_row': "Eliminato.",
710
+ 'formdesigner.required': "{field} è obbligatorio.",
711
+ 'formdesigner.not_in_list': "{field}: scegli un valore dall’elenco.",
712
+ 'formdesigner.changed': "Qualcun altro ha modificato questa riga nel frattempo. Controllala e salva di nuovo.",
713
+ 'formdesigner.row_not_found': "Questa riga non esiste, oppure non puoi vederla.",
714
+ 'formdesigner.not_allowed': "Non puoi farlo con questa riga.",
715
+ 'formdesigner.form_not_found': "Questo modulo non esiste (più).",
716
+ 'formdesigner.unknown_source': "La tabella di questo modulo non è più offerta.",
717
+ 'formdesigner.nothing': "Questo modulo non ha ancora campi.",
718
+ 'formdesigner.choose': "- Scegli -",
719
+ 'formdesigner.name': "Nome",
720
+ 'formdesigner.description': "Descrizione",
721
+ 'formdesigner.published': "Pubblicato: chiunque veda questa pagina può usare il modulo",
722
+ 'formdesigner.fields': "Campi",
723
+ 'formdesigner.field_on': "Nel modulo",
724
+ 'formdesigner.column': "Colonna",
725
+ 'formdesigner.key': "chiave",
726
+ 'formdesigner.order': "Ordine",
727
+ 'formdesigner.label': "Etichetta",
728
+ 'formdesigner.help': "Testo di aiuto",
729
+ 'formdesigner.required_short': "Obbligatorio",
730
+ 'formdesigner.display': "Visualizzazione",
731
+ 'formdesigner.default': "Predefinito",
732
+ 'formdesigner.in_list': "Nell’elenco",
733
+ 'formdesigner.display_auto': "Campo",
734
+ 'formdesigner.display_textarea': "Area di testo",
735
+ 'formdesigner.display_select': "Elenco di selezione",
736
+ 'formdesigner.display_radio': "Gruppo di opzioni",
737
+ 'formdesigner.actions': "Gli utenti possono",
738
+ 'formdesigner.allow_insert': "aggiungere righe",
739
+ 'formdesigner.allow_update': "modificare righe",
740
+ 'formdesigner.allow_delete': "eliminare righe",
741
+ 'formdesigner.list_help': "L’elenco delle righe mostra le colonne spuntate «Nell’elenco»; senza nessuna, il modulo aggiunge solo righe.",
742
+ 'formdesigner.save_form': "Salva modulo",
743
+ 'formdesigner.delete_form': "Elimina modulo",
744
+ 'formdesigner.delete_form_confirm': "Eliminare il modulo «{name}»? Le righe salvate restano.",
745
+ 'formdesigner.form_saved': "Modulo «{name}» salvato.",
746
+ 'formdesigner.form_deleted': "Modulo eliminato.",
747
+ 'formdesigner.name_required': "Dai un nome al modulo.",
748
+ 'formdesigner.no_fields': "Metti almeno una colonna nel modulo.",
749
+ 'formdesigner.changed_by': "modificato da {user} il {date}",
688
750
  // AI assistant region and natural-language report filters (assistant.ts, ai-filter.ts)
689
751
  'assistant.conversation': "Conversazione",
690
752
  'assistant.you': "Tu",
package/src/i18n/ja.ts CHANGED
@@ -63,6 +63,7 @@ export const ja: Record<MessageKey, string> = {
63
63
  'common.back': "戻る",
64
64
  'common.home': "ホームページへ",
65
65
  'common.skip': "本文へスキップ",
66
+ 'common.back_to_top': "ページの先頭へ",
66
67
  'common.toggle_nav': "ナビゲーションの表示切替",
67
68
  'common.dismiss': "閉じる",
68
69
  // messages and errors
@@ -390,6 +391,9 @@ export const ja: Record<MessageKey, string> = {
390
391
  'facets.stars_up': "星 {n} つ以上",
391
392
  'facets.star_up': "星 1 つ以上",
392
393
  'facets.clear_short': "クリア",
394
+ 'facets.menu': "{facet} のオプション",
395
+ 'facets.sort_count': "件数順に並べ替え",
396
+ 'facets.sort_name': "名前順に並べ替え",
393
397
  'facets.show_all': "すべて表示 ({n})",
394
398
  'facets.total': "合計行数 {n}",
395
399
  'smart.placeholder': "検索またはフィルター…",
@@ -685,6 +689,64 @@ export const ja: Record<MessageKey, string> = {
685
689
  'reporter.changed': "{date} に変更",
686
690
  'reporter.no_match': "検索に一致するレポートはありません。",
687
691
  'reporter.chart_tag': "グラフ",
692
+ // Form Designer (form-designer.ts)
693
+ 'formdesigner.no_sources': "この領域にはまだテーブルが設定されていません。",
694
+ 'formdesigner.no_forms': "フォームはまだありません。",
695
+ 'formdesigner.new': "新しいフォーム",
696
+ 'formdesigner.create': "デザイン",
697
+ 'formdesigner.draft': "下書き",
698
+ 'formdesigner.design': "フォームをデザイン",
699
+ 'formdesigner.design_of': "{name} のデザイン",
700
+ 'formdesigner.back': "すべてのフォーム",
701
+ 'formdesigner.add': "追加",
702
+ 'formdesigner.edit_row': "編集",
703
+ 'formdesigner.rows': "{form} の行",
704
+ 'formdesigner.save': "保存",
705
+ 'formdesigner.delete': "削除",
706
+ 'formdesigner.delete_confirm': "この行を削除しますか?",
707
+ 'formdesigner.cancel': "キャンセル",
708
+ 'formdesigner.saved_row': "保存しました。",
709
+ 'formdesigner.deleted_row': "削除しました。",
710
+ 'formdesigner.required': "{field} は必須です。",
711
+ 'formdesigner.not_in_list': "{field}: リストから値を選んでください。",
712
+ 'formdesigner.changed': "その間に別のユーザーがこの行を変更しました。確認してからもう一度保存してください。",
713
+ 'formdesigner.row_not_found': "この行は存在しないか、表示する権限がありません。",
714
+ 'formdesigner.not_allowed': "この行に対してその操作はできません。",
715
+ 'formdesigner.form_not_found': "このフォームは存在しません (もうありません)。",
716
+ 'formdesigner.unknown_source': "このフォームのテーブルはもう提供されていません。",
717
+ 'formdesigner.nothing': "このフォームにはまだフィールドがありません。",
718
+ 'formdesigner.choose': "- 選択 -",
719
+ 'formdesigner.name': "名前",
720
+ 'formdesigner.description': "説明",
721
+ 'formdesigner.published': "公開: このページを見られる人は誰でもフォームを使えます",
722
+ 'formdesigner.fields': "フィールド",
723
+ 'formdesigner.field_on': "フォームに表示",
724
+ 'formdesigner.column': "列",
725
+ 'formdesigner.key': "キー",
726
+ 'formdesigner.order': "順序",
727
+ 'formdesigner.label': "ラベル",
728
+ 'formdesigner.help': "ヘルプテキスト",
729
+ 'formdesigner.required_short': "必須",
730
+ 'formdesigner.display': "表示形式",
731
+ 'formdesigner.default': "既定値",
732
+ 'formdesigner.in_list': "一覧に表示",
733
+ 'formdesigner.display_auto': "フィールド",
734
+ 'formdesigner.display_textarea': "テキストエリア",
735
+ 'formdesigner.display_select': "選択リスト",
736
+ 'formdesigner.display_radio': "ラジオグループ",
737
+ 'formdesigner.actions': "ユーザーができること",
738
+ 'formdesigner.allow_insert': "行の追加",
739
+ 'formdesigner.allow_update': "行の変更",
740
+ 'formdesigner.allow_delete': "行の削除",
741
+ 'formdesigner.list_help': "行の一覧には「一覧に表示」にチェックした列が表示されます。チェックがなければ、フォームは行を追加するだけです。",
742
+ 'formdesigner.save_form': "フォームを保存",
743
+ 'formdesigner.delete_form': "フォームを削除",
744
+ 'formdesigner.delete_form_confirm': "フォーム「{name}」を削除しますか? 保存された行は残ります。",
745
+ 'formdesigner.form_saved': "フォーム「{name}」を保存しました。",
746
+ 'formdesigner.form_deleted': "フォームを削除しました。",
747
+ 'formdesigner.name_required': "フォームに名前を付けてください。",
748
+ 'formdesigner.no_fields': "フォームに少なくとも 1 つの列を置いてください。",
749
+ 'formdesigner.changed_by': "{date} に {user} が変更",
688
750
  // AI assistant region and natural-language report filters (assistant.ts, ai-filter.ts)
689
751
  'assistant.conversation': "会話",
690
752
  'assistant.you': "あなた",