pgkiln 0.40.0 → 0.41.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 (52) hide show
  1. package/db/migrations/095_rest_catalogs.sql +59 -0
  2. package/db/migrations/096_developer_email.sql +15 -0
  3. package/docs/apex-feature-parity.md +12 -9
  4. package/docs/guide/03-builder.md +37 -1
  5. package/docs/guide/04-pages-and-regions.md +37 -4
  6. package/docs/guide/12-development.md +18 -1
  7. package/docs/guide/19-rest-data-sources.md +39 -1
  8. package/examples/hr/hr_59_gantt_editing.sql +21 -0
  9. package/examples/hr/hr_60_tree_charts.sql +46 -0
  10. package/package.json +1 -1
  11. package/public/app.css +44 -0
  12. package/public/app.js +126 -0
  13. package/public/builder.css +1 -1
  14. package/public/sw.js +5 -2
  15. package/src/app.ts +6 -0
  16. package/src/builder/find-workspace.ts +120 -0
  17. package/src/builder/home.ts +2 -0
  18. package/src/builder/mail.ts +39 -0
  19. package/src/builder/region-settings.ts +19 -1
  20. package/src/builder/rest-catalogs.ts +424 -0
  21. package/src/builder/routes.ts +32 -6
  22. package/src/builder/shared.ts +2 -0
  23. package/src/builder/workspace-transfer.ts +136 -0
  24. package/src/i18n/ar.ts +14 -0
  25. package/src/i18n/cs.ts +14 -0
  26. package/src/i18n/da.ts +14 -0
  27. package/src/i18n/de.ts +14 -0
  28. package/src/i18n/el.ts +14 -0
  29. package/src/i18n/es.ts +14 -0
  30. package/src/i18n/fi.ts +14 -0
  31. package/src/i18n/fr.ts +14 -0
  32. package/src/i18n/he.ts +14 -0
  33. package/src/i18n/it.ts +14 -0
  34. package/src/i18n/ja.ts +14 -0
  35. package/src/i18n/ko.ts +14 -0
  36. package/src/i18n/nb.ts +14 -0
  37. package/src/i18n/pl.ts +14 -0
  38. package/src/i18n/pt.ts +14 -0
  39. package/src/i18n/ru.ts +14 -0
  40. package/src/i18n/sv.ts +14 -0
  41. package/src/i18n/tr.ts +14 -0
  42. package/src/i18n/uk.ts +14 -0
  43. package/src/i18n/zh.ts +14 -0
  44. package/src/i18n.ts +28 -0
  45. package/src/restcatalog.ts +605 -0
  46. package/src/runtime/charts.ts +296 -12
  47. package/src/runtime/data-reporter.ts +48 -16
  48. package/src/runtime/gantt-move.ts +63 -0
  49. package/src/runtime/regions.ts +3 -0
  50. package/src/runtime/routes.ts +39 -0
  51. package/src/websources.ts +11 -3
  52. package/src/workspace-export.ts +240 -0
package/src/i18n/sv.ts CHANGED
@@ -496,6 +496,13 @@ export const sv: Record<MessageKey, string> = {
496
496
  'chart.no_range': "Ett intervalldiagram behöver en etikettkolumn och två numeriska kolumner: låg och hög.",
497
497
  'chart.no_boxplot': "Ett lådagram behöver en etikettkolumn och antingen en numerisk kolumn (en rad per värde) eller fem: minimum, första kvartil, median, tredje kvartil och maximum.",
498
498
  'chart.no_stock': "Ett aktiediagram behöver en etikettkolumn (datumet) och fyra numeriska kolumner: öppning, högsta, lägsta och stängning.",
499
+ 'chart.no_tree': "En trädkarta eller sunburst behöver en etikettkolumn och en numerisk kolumn (eventuellt kolumnerna node_id och parent_id för en hierarki).",
500
+ 'chart.no_timeline': "En tidslinje behöver en etikettkolumn och ett startdatum (ett slutdatum och en series-kolumn är valfria).",
501
+ 'chart.total': "Totalt",
502
+ 'chart.gantt_hint': "Dra en uppgift för att flytta den, eller dess slut för att ändra längden. Med tangentbordet: piltangenterna flyttar en uppgift, Skift och piltangenterna ändrar slutet, Enter sparar, Escape avbryter.",
503
+ 'chart.gantt_moved': "{task}: {start} – {end}.",
504
+ 'chart.gantt_cannot_move': "Uppgiften kan inte flyttas.",
505
+ 'chart.gantt_bad_dates': "Välj en start och ett slut på eller efter starten.",
499
506
  'chart.min': "Minimum",
500
507
  'chart.q1': "Första kvartil",
501
508
  'chart.median': "Median",
@@ -652,6 +659,13 @@ export const sv: Record<MessageKey, string> = {
652
659
  'reporter.name_required': "Ge rapporten ett namn.",
653
660
  'reporter.not_found': "Den rapporten är inte tillgänglig.",
654
661
  'reporter.unknown_source': "Datakällan är inte längre tillgänglig.",
662
+ 'reporter.welcome_title': "Skapa egna rapporter",
663
+ 'reporter.welcome_text': "Välj data för att börja en rapport: välj kolumner, filtrera, gruppera med summor, lägg till ett diagram och spara eller dela den.",
664
+ 'reporter.columns_count': "{n} kolumner",
665
+ 'reporter.search': "Sök rapporter",
666
+ 'reporter.changed': "ändrad {date}",
667
+ 'reporter.no_match': "Inga rapporter matchar sökningen.",
668
+ 'reporter.chart_tag': "diagram",
655
669
  // AI assistant region and natural-language report filters (assistant.ts, ai-filter.ts)
656
670
  'assistant.conversation': "Konversation",
657
671
  'assistant.you': "Du",
package/src/i18n/tr.ts CHANGED
@@ -496,6 +496,13 @@ export const tr: Record<MessageKey, string> = {
496
496
  'chart.no_range': "Aralık grafiği bir etiket sütunu ve iki sayısal sütun gerektirir: en düşük ve en yüksek.",
497
497
  'chart.no_boxplot': "Kutu grafiği bir etiket sütunu ve ya bir sayısal sütun (her değer için bir satır) ya da beş sütun gerektirir: minimum, birinci çeyrek, medyan, üçüncü çeyrek ve maksimum.",
498
498
  'chart.no_stock': "Borsa grafiği bir etiket sütunu (tarih) ve dört sayısal sütun gerektirir: açılış, en yüksek, en düşük ve kapanış.",
499
+ 'chart.no_tree': "Ağaç haritası veya sunburst bir etiket sütunu ve sayısal bir sütun gerektirir (hiyerarşi için isteğe bağlı node_id ve parent_id sütunları).",
500
+ 'chart.no_timeline': "Zaman çizelgesi bir etiket sütunu ve başlangıç tarihi gerektirir (bitiş tarihi ve series sütunu isteğe bağlıdır).",
501
+ 'chart.total': "Toplam",
502
+ 'chart.gantt_hint': "Bir görevi taşımak için sürükleyin, süresini değiştirmek için sonunu sürükleyin. Klavyeyle: ok tuşları görevi taşır, Shift ve ok tuşları sonunu değiştirir, Enter kaydeder, Escape iptal eder.",
503
+ 'chart.gantt_moved': "{task}: {start} – {end}.",
504
+ 'chart.gantt_cannot_move': "Bu görev taşınamaz.",
505
+ 'chart.gantt_bad_dates': "Bir başlangıç ve başlangıçla aynı ya da sonraki bir bitiş seçin.",
499
506
  'chart.min': "Minimum",
500
507
  'chart.q1': "Birinci çeyrek",
501
508
  'chart.median': "Medyan",
@@ -652,6 +659,13 @@ export const tr: Record<MessageKey, string> = {
652
659
  'reporter.name_required': "Rapora bir ad verin.",
653
660
  'reporter.not_found': "Bu rapor kullanılamıyor.",
654
661
  'reporter.unknown_source': "Bu veri kaynağı artık kullanılamıyor.",
662
+ 'reporter.welcome_title': "Kendi raporlarınızı oluşturun",
663
+ 'reporter.welcome_text': "Bir rapora başlamak için verileri seçin: sütunlar, filtreler, toplamlarla gruplama ve bir grafik ekleyin, sonra kaydedin veya paylaşın.",
664
+ 'reporter.columns_count': "{n} sütun",
665
+ 'reporter.search': "Raporlarda ara",
666
+ 'reporter.changed': "{date} tarihinde değişti",
667
+ 'reporter.no_match': "Aramayla eşleşen rapor yok.",
668
+ 'reporter.chart_tag': "grafik",
655
669
  // AI assistant region and natural-language report filters (assistant.ts, ai-filter.ts)
656
670
  'assistant.conversation': "Sohbet",
657
671
  'assistant.you': "Siz",
package/src/i18n/uk.ts CHANGED
@@ -496,6 +496,13 @@ export const uk: Record<MessageKey, string> = {
496
496
  'chart.no_range': "Для діаграми діапазонів потрібні стовпець підписів і два числові стовпці: мінімум і максимум.",
497
497
  'chart.no_boxplot': "Для скринькової діаграми потрібні стовпець підписів і або один числовий стовпець (рядок на значення), або п’ять: мінімум, перший квартиль, медіана, третій квартиль і максимум.",
498
498
  'chart.no_stock': "Для біржової діаграми потрібні стовпець підписів (дата) і чотири числові стовпці: відкриття, максимум, мінімум і закриття.",
499
+ 'chart.no_tree': "Для деревоподібної карти або діаграми sunburst потрібні стовпець підписів і числовий стовпець (для ієрархії — також стовпці node_id і parent_id).",
500
+ 'chart.no_timeline': "Для часової шкали потрібні стовпець підписів і дата початку (дата закінчення та стовпець series необов'язкові).",
501
+ 'chart.total': "Разом",
502
+ 'chart.gantt_hint': "Перетягніть завдання, щоб перемістити його, або його кінець, щоб змінити тривалість. З клавіатури: стрілки переміщують завдання, Shift зі стрілками змінює кінець, Enter зберігає, Escape скасовує.",
503
+ 'chart.gantt_moved': "{task}: {start} – {end}.",
504
+ 'chart.gantt_cannot_move': "Це завдання не можна перемістити.",
505
+ 'chart.gantt_bad_dates': "Виберіть початок і кінець не раніше початку.",
499
506
  'chart.min': "Мінімум",
500
507
  'chart.q1': "Перший квартиль",
501
508
  'chart.median': "Медіана",
@@ -652,6 +659,13 @@ export const uk: Record<MessageKey, string> = {
652
659
  'reporter.name_required': "Дайте звіту назву.",
653
660
  'reporter.not_found': "Цей звіт недоступний.",
654
661
  'reporter.unknown_source': "Це джерело даних більше недоступне.",
662
+ 'reporter.welcome_title': "Створюйте власні звіти",
663
+ 'reporter.welcome_text': "Виберіть дані для нового звіту: стовпці, фільтри, групування з підсумками та діаграму, потім збережіть його або поділіться ним.",
664
+ 'reporter.columns_count': "Стовпців: {n}",
665
+ 'reporter.search': "Пошук звітів",
666
+ 'reporter.changed': "змінено {date}",
667
+ 'reporter.no_match': "Немає звітів, що відповідають пошуку.",
668
+ 'reporter.chart_tag': "діаграма",
655
669
  // AI assistant region and natural-language report filters (assistant.ts, ai-filter.ts)
656
670
  'assistant.conversation': "Розмова",
657
671
  'assistant.you': "Ви",
package/src/i18n/zh.ts CHANGED
@@ -496,6 +496,13 @@ export const zh: Record<MessageKey, string> = {
496
496
  'chart.no_range': "范围图需要一个标签列和两个数值列:最低值和最高值。",
497
497
  'chart.no_boxplot': "箱线图需要一个标签列,以及一个数值列(每个值一行)或五个数值列:最小值、第一四分位数、中位数、第三四分位数和最大值。",
498
498
  'chart.no_stock': "股价图需要一个标签列(日期)和四个数值列:开盘、最高、最低和收盘。",
499
+ 'chart.no_tree': "矩形树图或旭日图需要一个标签列和一个数值列(可选 node_id 和 parent_id 列表示层级)。",
500
+ 'chart.no_timeline': "时间轴需要一个标签列和一个开始日期(结束日期和 series 列可选)。",
501
+ 'chart.total': "合计",
502
+ 'chart.gantt_hint': "拖动任务以移动它,或拖动其末尾以更改时长。使用键盘:方向键移动任务,Shift 加方向键更改末尾,Enter 保存,Escape 取消。",
503
+ 'chart.gantt_moved': "{task}:{start} – {end}。",
504
+ 'chart.gantt_cannot_move': "此任务无法移动。",
505
+ 'chart.gantt_bad_dates': "请选择开始日期,以及不早于开始日期的结束日期。",
499
506
  'chart.min': "最小值",
500
507
  'chart.q1': "第一四分位数",
501
508
  'chart.median': "中位数",
@@ -652,6 +659,13 @@ export const zh: Record<MessageKey, string> = {
652
659
  'reporter.name_required': "请为报表命名。",
653
660
  'reporter.not_found': "该报表不可用。",
654
661
  'reporter.unknown_source': "此数据源已不可用。",
662
+ 'reporter.welcome_title': "创建自己的报表",
663
+ 'reporter.welcome_text': "选择数据开始一个报表:选择列、筛选、按合计分组、添加图表,然后保存或共享。",
664
+ 'reporter.columns_count': "{n} 列",
665
+ 'reporter.search': "搜索报表",
666
+ 'reporter.changed': "修改于 {date}",
667
+ 'reporter.no_match': "没有与搜索匹配的报表。",
668
+ 'reporter.chart_tag': "图表",
655
669
  // AI assistant region and natural-language report filters (assistant.ts, ai-filter.ts)
656
670
  'assistant.conversation': "对话",
657
671
  'assistant.you': "您",
package/src/i18n.ts CHANGED
@@ -523,6 +523,13 @@ const en = {
523
523
  'chart.no_range': 'A range chart needs a label column and two numeric columns: low and high.',
524
524
  'chart.no_boxplot': 'A box plot needs a label column and either one numeric column (a row per value) or five: minimum, first quartile, median, third quartile and maximum.',
525
525
  'chart.no_stock': 'A stock chart needs a label column (the date) and four numeric columns: open, high, low and close.',
526
+ 'chart.no_tree': "A treemap or sunburst needs a label column and a numeric column (optionally node_id and parent_id columns for a hierarchy).",
527
+ 'chart.no_timeline': "A timeline needs a label column and a start date (an end date and a series column are optional).",
528
+ 'chart.total': "Total",
529
+ 'chart.gantt_hint': "Drag a task to move it, or its end to change its length. With the keyboard: the arrow keys move a task, Shift and the arrow keys change its end, Enter saves, Escape cancels.",
530
+ 'chart.gantt_moved': "{task}: {start} – {end}.",
531
+ 'chart.gantt_cannot_move': "This task can't be moved.",
532
+ 'chart.gantt_bad_dates': "Choose a start and an end on or after the start.",
526
533
  'chart.min': 'Minimum',
527
534
  'chart.q1': 'First quartile',
528
535
  'chart.median': 'Median',
@@ -679,6 +686,13 @@ const en = {
679
686
  'reporter.name_required': "Give the report a name.",
680
687
  'reporter.not_found': "That report is not available.",
681
688
  'reporter.unknown_source': "This data source is no longer available.",
689
+ 'reporter.welcome_title': "Build your own reports",
690
+ 'reporter.welcome_text': "Choose the data to start a report: pick columns, filter, group with totals, add a chart, then save it for later or share it.",
691
+ 'reporter.columns_count': "{n} columns",
692
+ 'reporter.search': "Search reports",
693
+ 'reporter.changed': "changed {date}",
694
+ 'reporter.no_match': "No reports match the search.",
695
+ 'reporter.chart_tag': "chart",
682
696
  // AI assistant region and natural-language report filters (assistant.ts, ai-filter.ts)
683
697
  'assistant.conversation': "Conversation",
684
698
  'assistant.you': "You",
@@ -1195,6 +1209,13 @@ const nl: Record<MessageKey, string> = {
1195
1209
  'chart.no_range': 'Een bereikgrafiek heeft een labelkolom en twee numerieke kolommen nodig: laag en hoog.',
1196
1210
  'chart.no_boxplot': 'Een boxplot heeft een labelkolom nodig en één numerieke kolom (een rij per waarde) of vijf: minimum, eerste kwartiel, mediaan, derde kwartiel en maximum.',
1197
1211
  'chart.no_stock': 'Een koersgrafiek heeft een labelkolom (de datum) en vier numerieke kolommen nodig: opening, hoog, laag en slot.',
1212
+ 'chart.no_tree': "Een treemap of sunburst heeft een labelkolom en een numerieke kolom nodig (eventueel node_id- en parent_id-kolommen voor een hiërarchie).",
1213
+ 'chart.no_timeline': "Een tijdlijn heeft een labelkolom en een begindatum nodig (een einddatum en een series-kolom zijn optioneel).",
1214
+ 'chart.total': "Totaal",
1215
+ 'chart.gantt_hint': "Sleep een taak om haar te verplaatsen, of haar einde om de duur te wijzigen. Met het toetsenbord: de pijltjestoetsen verplaatsen een taak, Shift met de pijltjestoetsen wijzigt het einde, Enter bewaart, Escape annuleert.",
1216
+ 'chart.gantt_moved': "{task}: {start} – {end}.",
1217
+ 'chart.gantt_cannot_move': "Deze taak kan niet worden verplaatst.",
1218
+ 'chart.gantt_bad_dates': "Kies een begin en een einde op of na het begin.",
1198
1219
  'chart.min': 'Minimum',
1199
1220
  'chart.q1': 'Eerste kwartiel',
1200
1221
  'chart.median': 'Mediaan',
@@ -1351,6 +1372,13 @@ const nl: Record<MessageKey, string> = {
1351
1372
  'reporter.name_required': "Geef het rapport een naam.",
1352
1373
  'reporter.not_found': "Dat rapport is niet beschikbaar.",
1353
1374
  'reporter.unknown_source': "Deze gegevensbron is niet meer beschikbaar.",
1375
+ 'reporter.welcome_title': "Maak je eigen rapporten",
1376
+ 'reporter.welcome_text': "Kies de gegevens om een rapport te beginnen: kies kolommen, filter, groepeer met totalen, voeg een grafiek toe en bewaar of deel het rapport.",
1377
+ 'reporter.columns_count': "{n} kolommen",
1378
+ 'reporter.search': "Rapporten zoeken",
1379
+ 'reporter.changed': "gewijzigd {date}",
1380
+ 'reporter.no_match': "Geen rapporten gevonden.",
1381
+ 'reporter.chart_tag': "grafiek",
1354
1382
  // AI assistant region and natural-language report filters (assistant.ts, ai-filter.ts)
1355
1383
  'assistant.conversation': "Gesprek",
1356
1384
  'assistant.you': "Jij",