pgkiln 0.72.0 → 0.73.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 (54) hide show
  1. package/db/migrations/140_item_region_types.sql +27 -0
  2. package/docs/apex-feature-parity.md +84 -8
  3. package/docs/guide/04-pages-and-regions.md +41 -1
  4. package/docs/guide/05-items.md +43 -3
  5. package/docs/guide/11-from-apex.md +3 -0
  6. package/docs/guide/12-development.md +10 -2
  7. package/examples/hr/hr_75_item_region_types.sql +81 -0
  8. package/package.json +1 -1
  9. package/public/app.css +48 -0
  10. package/public/app.js +377 -1
  11. package/src/builder/advisor.ts +5 -1
  12. package/src/builder/arrange.ts +7 -0
  13. package/src/builder/components.ts +5 -5
  14. package/src/builder/designer.ts +8 -2
  15. package/src/builder/i18n/de.ts +6 -0
  16. package/src/builder/i18n/en.ts +6 -0
  17. package/src/builder/i18n/es.ts +6 -0
  18. package/src/builder/i18n/fr.ts +6 -0
  19. package/src/builder/i18n/it.ts +6 -0
  20. package/src/builder/i18n/ja.ts +6 -0
  21. package/src/builder/i18n/ko.ts +6 -0
  22. package/src/builder/i18n/nl.ts +6 -0
  23. package/src/builder/i18n/pt.ts +6 -0
  24. package/src/builder/i18n/zh-cn.ts +6 -0
  25. package/src/builder/i18n/zh-tw.ts +6 -0
  26. package/src/builder/region-help.ts +8 -2
  27. package/src/i18n/ar.ts +13 -0
  28. package/src/i18n/cs.ts +13 -0
  29. package/src/i18n/da.ts +13 -0
  30. package/src/i18n/de.ts +13 -0
  31. package/src/i18n/el.ts +13 -0
  32. package/src/i18n/es.ts +13 -0
  33. package/src/i18n/fi.ts +13 -0
  34. package/src/i18n/fr.ts +13 -0
  35. package/src/i18n/he.ts +13 -0
  36. package/src/i18n/it.ts +13 -0
  37. package/src/i18n/ja.ts +13 -0
  38. package/src/i18n/ko.ts +13 -0
  39. package/src/i18n/nb.ts +13 -0
  40. package/src/i18n/pl.ts +13 -0
  41. package/src/i18n/pt.ts +13 -0
  42. package/src/i18n/ru.ts +13 -0
  43. package/src/i18n/sv.ts +13 -0
  44. package/src/i18n/tr.ts +13 -0
  45. package/src/i18n/uk.ts +13 -0
  46. package/src/i18n/zh.ts +13 -0
  47. package/src/i18n.ts +26 -0
  48. package/src/metadata.ts +5 -2
  49. package/src/runtime/items.ts +32 -3
  50. package/src/runtime/page-regions.ts +50 -0
  51. package/src/runtime/region-cache.ts +1 -1
  52. package/src/runtime/regions.ts +11 -0
  53. package/src/runtime/render.ts +3 -17
  54. package/src/runtime/report.ts +55 -3
@@ -0,0 +1,27 @@
1
+ -- Sprint 140 (AP-4): item and region types that were still missing from the Page Designer's gallery.
2
+ --
3
+ -- Items: shuttle two lists (available, chosen) with move and order buttons; a <select multiple> without JavaScript
4
+ -- select_one a searchable single pick from a list of values; a <select> without JavaScript
5
+ -- select_many a searchable multi pick with chips; a <select multiple> without JavaScript
6
+ -- (shuttle and select_many store their values colon-separated, like multiselect)
7
+ -- Regions: classic_report a report without the Actions menu and the interactive features (report templates, pagination types)
8
+ -- breadcrumb the page's breadcrumb trail (for the Breadcrumb bar position)
9
+ -- help_text the page's help text (meta.page.help, new here)
10
+
11
+ alter table meta.item drop constraint item_type_check;
12
+ alter table meta.item add constraint item_type_check check (type in (
13
+ 'text', 'textarea', 'number', 'date', 'datetime', 'select', 'radio', 'checkbox', 'switch', 'hidden', 'display', 'password',
14
+ 'checkbox_group', 'multiselect', 'popup_lov', 'email', 'tel', 'url', 'color', 'file', 'location', 'richtext', 'markdown',
15
+ 'rating', 'combobox', 'daterange', 'qrcode', 'plugin', 'image', 'address',
16
+ 'shuttle', 'select_one', 'select_many'));
17
+
18
+ alter table meta.region drop constraint region_type_check;
19
+ alter table meta.region add constraint region_type_check
20
+ check (type in ('report', 'form', 'chart', 'cards', 'static', 'grid', 'calendar', 'dynamic', 'facets', 'tasks', 'workflows', 'map', 'tree',
21
+ 'template_component', 'smart_filters', 'display_selector', 'list', 'data_reporter', 'ai_assistant', 'plugin', 'url', 'search',
22
+ 'login', 'form_designer', 'classic_report', 'breadcrumb', 'help_text'));
23
+
24
+ -- (APEX: Page → Help → Help Text) Markdown with &ITEM. substitutions, shown by a help_text region of the page.
25
+ -- Nullable, so exports of older versions import as they are (export_app and import_app copy every page column).
26
+ alter table meta.page add column help text check (help is null or length(help) <= 20000);
27
+ comment on column meta.page.help is 'The page''s help text (Markdown, &ITEM. substitutions), shown by a region of type help_text.';
@@ -7,15 +7,15 @@ open item and open an issue or pull request; see [CONTRIBUTING.md](../CONTRIBUTI
7
7
  Legend: ✅ available · 🟡 partial (see notes) · ❌ not yet · ➖ not planned (a deliberate choice,
8
8
  or better served by the PostgreSQL ecosystem; see the notes and [extensions](guide/15-extensions.md))
9
9
 
10
- Last reviewed: 2026-11-04 against **APEX 26.2** (sprint 139: OpenTelemetry, traces with a span per SQL statement, web call, AI request and tool call, logs, metrics and `/metrics` for Prometheus, browser spans relayed by pgkiln, per workspace off or its own collector (AP-6); sprint 138: an application's Utilities tab with a dashboard, database object dependencies, change history per component, Upgrade application, UI defaults (APEX's Attribute Dictionary), application and page checksums and an icon browser (AP-5); sprint 137: Create page as a grid of page types with previews, the page types interactive report, smart filters, search page, data loading, tree, timeline, media list, content row, comments, dashboard, wizard, unified task list and workflow console, a Feature tab with nine features that install once, and Create page as copy with shared components mapped or copied (AP-3); sprint 136: vector providers (an AI service with an embedding model or a SQL function), `meta.embed`, *Add vector column* in Table Properties with an HNSW index and a queue that keeps embeddings current, search types vector and hybrid (reciprocal rank fusion with full-text) and a Retrieve (RAG) tool for AI agents, all as the app's role through RLS, on pgvector (AP-1); sprint 135: full-text search configurations, APEX's Oracle Text search type on PostgreSQL full-text search with stemming, ranking, highlights, *Did you mean* and *Add full-text search* in Table Properties (AP-2); sprint 134: the builder also in Italiano, 中文 (简体), 中文 (繁體), 日本語 and 한국어, APEX's ten builder languages plus Nederlands (SEC-5); sprints 121, 123–125: the builder in Deutsch, English, Español, Français, Nederlands and Português, step by step: the frame, sign-in, Workspace home, App Builder, Page Designer menus, the SQL Workshop's home, SQL Worksheet, Object Browser and Table Properties, Shared Components, application settings, users, identity providers, developers and workspaces (WS-7); sprint 122: *Ask in your own words* sets faceted search and smart filter facets, smart filters read a typed phrase (WS-5), and Sample Maps, Sample Approvals, Sample Data Loading and Sample Files in the App Gallery (WS-8); sprint 120: the App Gallery's single-topic sample apps (charts, cards, calendar, interactive grids, dynamic actions, reporting), the UX Pattern Catalog and a Utility Apps tab with Lookup Lists, Release Notes and Announcements (WS-8); sprint 119: data security per table, a roles × columns matrix and masked values per application role in a masking view, the same identity for pages, AI tools, REST, AutoREST and MCP (WS-13); sprint 118: Administration → Mail queue with delivery per hour and per workspace, the slowest provider calls and failures with Retry and Purge, a workspace's own mail service, and workspace network access lists that narrow the installation's allow-list (WS-9); sprint 117: Pillar Light and Pillar Dark navigation appearances with a header strip, clearer navigation tree states, subtle colour utilities, RTL; sprint 116: the comparison moved from 26.1 to 26.2, with a section for the 26.2 workspace items WS-1 … WS-13 and OCI managed identities; the App Builder list with Updated by, working copies and the lock; `pgkiln import --only`, a file-level import; stale rows on facet menus and blueprints fixed; sprint 115: popup LOVs that load on scroll, Wait Popup dynamic actions and dynamic actions on menu entries; sprint 114: Workflow 26.2 with custom task outcomes, task events and notifications, Send E-Mail and draft steps, migrating running instances and the diagram as SVG / PNG; sprint 113: Team Development with issues, labels, milestones, templates, a board and a set-up wizard; sprint 112: AI interactive reports with chips, Undo, computed columns and a phrase parser that needs no AI service; sprint 111: AI Agents with tools as a shared component, a Navigate tool with checksummed URLs, Gemini and OpenAI-compatible services; sprint 110: Data Reporter as a workspace tool with datasets, reporting applications, editors and viewers, published reports with stable URLs and pins; sprint 109: the Workspace home above the App Builder and SQL Workshop, with a summary, top applications, users and developers, and an optional release check; sprint 108: the code editor's syntax colours in the builder's light and dark themes, read-only SQL highlighted, the Data Modeler in dark mode; sprint 107: a transaction mode in the SQL Worksheet with Commit and Rollback; DA-18: JavaScript (MLE) not planned, plv8 where installed; sprint 106: the change log of DDL change sets with Flyway, Liquibase and SQL downloads; sprint 104: RESTful Services modules, templates and handlers with PL/pgSQL and media handlers, privileges, OpenAPI and Try it; sprint 103: Schema Export / Import with pg_dump and pg_restore; sprint 102: the SQL Monitor with live sessions, Top SQL and a statement's plan; sprint 101: Scheduling of pg_cron jobs with a schedule builder, run now and run history; sprint 100: RESTful Services, tables and views published as REST endpoints with paging, filters, keys and OpenAPI; sprint 99: Administration → Database Users for PostgreSQL roles; sprint 98: the Data Modeler with relational diagrams, DDL and a data dictionary; sprint 97: charts of a query in the worksheet, saved charts and their dashboard; sprint 96: the SQL Workshop's Launchpad with pins and tool groups, the builder's search with Ctrl+K; sprint 95: Table Properties: create, edit or copy a table in a form with a DDL preview and Apply in one transaction; sprint 94: an object's menu with Open in a panel, Quick DDL, Add index / trigger / policy and Drop with dependents; sprint 93: worksheets saved as SQL Scripts with tabs and a Files list, Format, Convert case, find and replace, bind and substitution variables; sprint 92: the worksheet's Query Result with sort, value dialog, copy and downloads, plans as a tree with the slowest step and misestimates, SQL History with status, search and run again; sprint 91: the SQL Worksheet like Database Actions' SQL: navigator, Run Statement at the cursor and Run Script with a log per statement, Explain Plan, Autotrace, notices, history, Run as an application role; sprint 90: Comment Out in the page designer, gallery labels in title case; sprint 89: the Object Browser's schema, one row of tabs, blank NULLs, Modify column; sprint 88: home cards with colour bands and round icons, the hero on the page background, a page footer with the version and Back to top; sprint 87: the Create Application wizard reloads the page list for a schema, RLS badges, the alias from the name; sprint 86: the page designer by page number, HTML error pages in the builder; sprint 85: the Form Designer, beyond APEX; sprint 84: the date picker, facet menus; sprint 83: Component Settings and Component Groups; sprint 82: Report Queries; sprint 81: Application Computations and Shortcuts in Shared Components; sprint 80: the master grid's first row selected when the page opens and after a search; grid cells as text with their format mask until edited, with cell navigation by arrow keys, Enter, F2 and Escape; sprint 79: generated dashboards with sums, donuts and lines, leaving out charts that say nothing; applications open in their own light or dark mode until the user chooses, per application; a user menu with Appearance and Sign in when signed out; the developer toolbar's App and Page texts and debug state; the report search's column scope in the magnifier; sprint 78: generated faceted search reports with one column per foreign key, the faceted search's total row count, Show all and Yes/No values, one search field, friendly headings and number formats in generated grids and master-detail pages, friendly names in the Create Application wizard's page list; sprint 77: the Page Designer's layout and tree by display position, button positions, the tree's context menu with Duplicate and Copy to other page, Show Common / Show All, Go to group and the Template Options dialog; display positions, button positions and side-column page templates at runtime; sprint 76: the interactive report's menus and pagination, date items in the date format; sprint 75: the SQL Workshop's Object Browser and tabs; sprint 74: the builder's information architecture: Shared Components grid, Settings tabs, application home search and tasks; sprint 73: the Create Application wizard on one page with page types and features; sprint 72: the runtime chrome compared with APEX 26.2's: the developer toolbar, the Iris look, the navigation bar's Help menu and Install button; sprint 71: generated applications compared with APEX 26.2's: labels, foreign key names in reports, file columns, format masks, the Home page and the dashboard; sprint 70: treemap, sunburst and timeline charts; sprint 69: dragging tasks on a Gantt chart; sprint 68: the Data Reporter's welcome page, Find my workspace; sprint 67: REST source catalogs from OpenAPI documents, a workspace's export and import (two rows added); sprint 66: a blueprint from an existing application; sprint 65: facet charts; sprint 64: approval vacation rules and expiration policies; sprint 63: range, box plot and stock charts; sprint 62: workspace preferences (SQL Workshop and RESTful services per workspace), extension links, Manage backups across applications, SQL Workshop utilities with object reports, About Database and a database monitor; sprint 61: the builder's screens compared with APEX 26.1: the workspace sign-in page, the Administration menu with workspace message, environment banner and utilization, the SQL Workshop home, the App Gallery, application groups and cross application reports (four rows added); sprint 60: isolated workspaces with their own database logins, row-level security on pgkiln's tables and workspace database roles, workspace administrators; sprint 59: the Page Designer's help pane, Quick edit from the developer toolbar; sprint 58: page groups; sprint 57: region templates hero, title bar, buttons container, inline dialog and drawer, wizard with wizard progress, the carousel; sprint 56: Generate DDL and Schema Comparison in the SQL Workshop, `pgkiln ddl` and `pgkiln compare`; sprint 55: an editable login page with a Login region and the Minimal page template, Forgot password through the application's mail service; sprint 54: interactive grid views, the single row view, group by and chart; sprint 53: application settings, user preferences and items kept per user, dynamic translations, `meta.data_export` and data export downloads, display image and geocoded address items; sprint 52: every dynamic action event and action, Ajax callbacks, an error handling function, the session timeout warning; sprint 51: checked imports, application backups, availability and Run only, feedback, type-specific attribute help; sprint 50: lost update detection, warn on unsaved changes, the URL and search regions with search configurations, the developer toolbar with a session state viewer, and e-mail through SMTP with OAuth2, Microsoft Graph, Amazon SES and HTTP APIs; import checks, application availability, property help and e-mail compared again; 2026-10-06: pgkiln 0.31.0, in progress: static application files and the Execute JavaScript dynamic action; region, item, dynamic action and process plug-ins; conditional and dynamic theme styles; XML and Excel in `meta.parse_data`, zips in SQL, `meta.v_boolean`; file items in S3-compatible object storage; map layers by the visible area and as vector tiles; a graphical query builder; tenants for workflows and tasks; application files as YAML and region static IDs; Lucide icons and icon modifiers; PWA push notifications; 0.30.0: 136 icons and an icon picker; an axe-core accessibility audit; cropping pictures; session sharing between applications; twenty-two built-in languages; 0.29.0: workspaces; the Iris base style; drawers; built-in template components including the metric card; Theme Roller dark-mode colours, live preview and template options on items and report columns; report selection across pages; instance settings; fourteen built-in languages; 0.28.0: AI with Claude and OpenAI; 0.27.0: Data Reporter; sample data generator; create application from several sheets, pasted data or existing tables; 0.26.0: working copies with a three-way merge; theme, library and boilerplate applications with subscriptions; 0.25.0: Gantt, pyramid and polar charts; map layers, clustering and server-side spatial filters; REST data sources that write back from forms and grids and synchronise into tables, OAuth2 password and refresh-token grants; debug messages per request and an install/upgrade log; `meta.web_request()` and `meta.parse_data()`; Theme Roller style variants and template options; 0.24.0: automations with several actions, error handling per row and runs from SQL; invoke-API workflow steps; Unload Data in the Data Workshop; create page wizards for cards, calendar, chart, map, faceted search, form and master-detail; create an application from a file; 0.23.0: interactive grid aggregates, frozen/moved/resized columns, layouts and saved grid reports, master-detail, row actions and copy/paste; download processes, execution chains in the background, workflow processes, branches to a function's URL or another app, the Dialog Closed event; number format masks, automatic time zone, runtime messages in German, French and Spanish; SQL scripts, Quick SQL, a query builder, XML loading and data load definitions; custom authentication, lists, page and application locks with developer comments, supporting objects; 0.22.0: keyset paging, report PDFs and REST collections streamed from a cursor, database-account authentication; 0.21.0: HTTP-header authentication behind a reverse proxy; 0.20.0: a popup list of values with server-side search; 0.19.0: row-range pagination, maximum row counts and row limits, lazy loading and caching of regions, streamed CSV/Excel downloads; 0.18.0: calendar week/day/list views with drag and drop, bubble/gauge/funnel/radar charts and drill-down, smart filters, a region display selector and more facet types, computations, conditional branches, build options, menu buttons, REST data sources and web credentials, rich text/Markdown, rating, combobox, date range and QR code items; 0.17.0: an App Builder home, workspace dashboard and utilities like APEX's; 0.16.0: a Page Designer with drag-and-drop layout, a code editor with autocomplete, template components and plug-ins, parallel branches and versions of workflows, the `pgkiln` command line with one file per component; 0.15.0: drop and paste files, heat maps, filtering a report by the map area; 0.14.0: stacked, combo, scatter and pie charts, several files per upload item; 0.13.0: map and tree regions; 0.12.0: REST modules in the builder; 0.11.0: workflows and Progressive Web Apps; 0.10.0: LDAP, SAML, "Keep me signed in", document templates, JSON loading, approvals and the task list; pgkiln installs no application, HR is an example).
10
+ Last reviewed: 2026-11-04 against **APEX 26.2** (sprint 140: the items Shuttle (ordered), Select One and Select Many, the regions Classic Report (report templates, pagination types), Breadcrumb and Help Text with a page help text, and a [mapping of every APEX item and region type](#item-and-region-types-one-by-one) (AP-4); sprint 139: OpenTelemetry, traces with a span per SQL statement, web call, AI request and tool call, logs, metrics and `/metrics` for Prometheus, browser spans relayed by pgkiln, per workspace off or its own collector (AP-6); sprint 138: an application's Utilities tab with a dashboard, database object dependencies, change history per component, Upgrade application, UI defaults (APEX's Attribute Dictionary), application and page checksums and an icon browser (AP-5); sprint 137: Create page as a grid of page types with previews, the page types interactive report, smart filters, search page, data loading, tree, timeline, media list, content row, comments, dashboard, wizard, unified task list and workflow console, a Feature tab with nine features that install once, and Create page as copy with shared components mapped or copied (AP-3); sprint 136: vector providers (an AI service with an embedding model or a SQL function), `meta.embed`, *Add vector column* in Table Properties with an HNSW index and a queue that keeps embeddings current, search types vector and hybrid (reciprocal rank fusion with full-text) and a Retrieve (RAG) tool for AI agents, all as the app's role through RLS, on pgvector (AP-1); sprint 135: full-text search configurations, APEX's Oracle Text search type on PostgreSQL full-text search with stemming, ranking, highlights, *Did you mean* and *Add full-text search* in Table Properties (AP-2); sprint 134: the builder also in Italiano, 中文 (简体), 中文 (繁體), 日本語 and 한국어, APEX's ten builder languages plus Nederlands (SEC-5); sprints 121, 123–125: the builder in Deutsch, English, Español, Français, Nederlands and Português, step by step: the frame, sign-in, Workspace home, App Builder, Page Designer menus, the SQL Workshop's home, SQL Worksheet, Object Browser and Table Properties, Shared Components, application settings, users, identity providers, developers and workspaces (WS-7); sprint 122: *Ask in your own words* sets faceted search and smart filter facets, smart filters read a typed phrase (WS-5), and Sample Maps, Sample Approvals, Sample Data Loading and Sample Files in the App Gallery (WS-8); sprint 120: the App Gallery's single-topic sample apps (charts, cards, calendar, interactive grids, dynamic actions, reporting), the UX Pattern Catalog and a Utility Apps tab with Lookup Lists, Release Notes and Announcements (WS-8); sprint 119: data security per table, a roles × columns matrix and masked values per application role in a masking view, the same identity for pages, AI tools, REST, AutoREST and MCP (WS-13); sprint 118: Administration → Mail queue with delivery per hour and per workspace, the slowest provider calls and failures with Retry and Purge, a workspace's own mail service, and workspace network access lists that narrow the installation's allow-list (WS-9); sprint 117: Pillar Light and Pillar Dark navigation appearances with a header strip, clearer navigation tree states, subtle colour utilities, RTL; sprint 116: the comparison moved from 26.1 to 26.2, with a section for the 26.2 workspace items WS-1 … WS-13 and OCI managed identities; the App Builder list with Updated by, working copies and the lock; `pgkiln import --only`, a file-level import; stale rows on facet menus and blueprints fixed; sprint 115: popup LOVs that load on scroll, Wait Popup dynamic actions and dynamic actions on menu entries; sprint 114: Workflow 26.2 with custom task outcomes, task events and notifications, Send E-Mail and draft steps, migrating running instances and the diagram as SVG / PNG; sprint 113: Team Development with issues, labels, milestones, templates, a board and a set-up wizard; sprint 112: AI interactive reports with chips, Undo, computed columns and a phrase parser that needs no AI service; sprint 111: AI Agents with tools as a shared component, a Navigate tool with checksummed URLs, Gemini and OpenAI-compatible services; sprint 110: Data Reporter as a workspace tool with datasets, reporting applications, editors and viewers, published reports with stable URLs and pins; sprint 109: the Workspace home above the App Builder and SQL Workshop, with a summary, top applications, users and developers, and an optional release check; sprint 108: the code editor's syntax colours in the builder's light and dark themes, read-only SQL highlighted, the Data Modeler in dark mode; sprint 107: a transaction mode in the SQL Worksheet with Commit and Rollback; DA-18: JavaScript (MLE) not planned, plv8 where installed; sprint 106: the change log of DDL change sets with Flyway, Liquibase and SQL downloads; sprint 104: RESTful Services modules, templates and handlers with PL/pgSQL and media handlers, privileges, OpenAPI and Try it; sprint 103: Schema Export / Import with pg_dump and pg_restore; sprint 102: the SQL Monitor with live sessions, Top SQL and a statement's plan; sprint 101: Scheduling of pg_cron jobs with a schedule builder, run now and run history; sprint 100: RESTful Services, tables and views published as REST endpoints with paging, filters, keys and OpenAPI; sprint 99: Administration → Database Users for PostgreSQL roles; sprint 98: the Data Modeler with relational diagrams, DDL and a data dictionary; sprint 97: charts of a query in the worksheet, saved charts and their dashboard; sprint 96: the SQL Workshop's Launchpad with pins and tool groups, the builder's search with Ctrl+K; sprint 95: Table Properties: create, edit or copy a table in a form with a DDL preview and Apply in one transaction; sprint 94: an object's menu with Open in a panel, Quick DDL, Add index / trigger / policy and Drop with dependents; sprint 93: worksheets saved as SQL Scripts with tabs and a Files list, Format, Convert case, find and replace, bind and substitution variables; sprint 92: the worksheet's Query Result with sort, value dialog, copy and downloads, plans as a tree with the slowest step and misestimates, SQL History with status, search and run again; sprint 91: the SQL Worksheet like Database Actions' SQL: navigator, Run Statement at the cursor and Run Script with a log per statement, Explain Plan, Autotrace, notices, history, Run as an application role; sprint 90: Comment Out in the page designer, gallery labels in title case; sprint 89: the Object Browser's schema, one row of tabs, blank NULLs, Modify column; sprint 88: home cards with colour bands and round icons, the hero on the page background, a page footer with the version and Back to top; sprint 87: the Create Application wizard reloads the page list for a schema, RLS badges, the alias from the name; sprint 86: the page designer by page number, HTML error pages in the builder; sprint 85: the Form Designer, beyond APEX; sprint 84: the date picker, facet menus; sprint 83: Component Settings and Component Groups; sprint 82: Report Queries; sprint 81: Application Computations and Shortcuts in Shared Components; sprint 80: the master grid's first row selected when the page opens and after a search; grid cells as text with their format mask until edited, with cell navigation by arrow keys, Enter, F2 and Escape; sprint 79: generated dashboards with sums, donuts and lines, leaving out charts that say nothing; applications open in their own light or dark mode until the user chooses, per application; a user menu with Appearance and Sign in when signed out; the developer toolbar's App and Page texts and debug state; the report search's column scope in the magnifier; sprint 78: generated faceted search reports with one column per foreign key, the faceted search's total row count, Show all and Yes/No values, one search field, friendly headings and number formats in generated grids and master-detail pages, friendly names in the Create Application wizard's page list; sprint 77: the Page Designer's layout and tree by display position, button positions, the tree's context menu with Duplicate and Copy to other page, Show Common / Show All, Go to group and the Template Options dialog; display positions, button positions and side-column page templates at runtime; sprint 76: the interactive report's menus and pagination, date items in the date format; sprint 75: the SQL Workshop's Object Browser and tabs; sprint 74: the builder's information architecture: Shared Components grid, Settings tabs, application home search and tasks; sprint 73: the Create Application wizard on one page with page types and features; sprint 72: the runtime chrome compared with APEX 26.2's: the developer toolbar, the Iris look, the navigation bar's Help menu and Install button; sprint 71: generated applications compared with APEX 26.2's: labels, foreign key names in reports, file columns, format masks, the Home page and the dashboard; sprint 70: treemap, sunburst and timeline charts; sprint 69: dragging tasks on a Gantt chart; sprint 68: the Data Reporter's welcome page, Find my workspace; sprint 67: REST source catalogs from OpenAPI documents, a workspace's export and import (two rows added); sprint 66: a blueprint from an existing application; sprint 65: facet charts; sprint 64: approval vacation rules and expiration policies; sprint 63: range, box plot and stock charts; sprint 62: workspace preferences (SQL Workshop and RESTful services per workspace), extension links, Manage backups across applications, SQL Workshop utilities with object reports, About Database and a database monitor; sprint 61: the builder's screens compared with APEX 26.1: the workspace sign-in page, the Administration menu with workspace message, environment banner and utilization, the SQL Workshop home, the App Gallery, application groups and cross application reports (four rows added); sprint 60: isolated workspaces with their own database logins, row-level security on pgkiln's tables and workspace database roles, workspace administrators; sprint 59: the Page Designer's help pane, Quick edit from the developer toolbar; sprint 58: page groups; sprint 57: region templates hero, title bar, buttons container, inline dialog and drawer, wizard with wizard progress, the carousel; sprint 56: Generate DDL and Schema Comparison in the SQL Workshop, `pgkiln ddl` and `pgkiln compare`; sprint 55: an editable login page with a Login region and the Minimal page template, Forgot password through the application's mail service; sprint 54: interactive grid views, the single row view, group by and chart; sprint 53: application settings, user preferences and items kept per user, dynamic translations, `meta.data_export` and data export downloads, display image and geocoded address items; sprint 52: every dynamic action event and action, Ajax callbacks, an error handling function, the session timeout warning; sprint 51: checked imports, application backups, availability and Run only, feedback, type-specific attribute help; sprint 50: lost update detection, warn on unsaved changes, the URL and search regions with search configurations, the developer toolbar with a session state viewer, and e-mail through SMTP with OAuth2, Microsoft Graph, Amazon SES and HTTP APIs; import checks, application availability, property help and e-mail compared again; 2026-10-06: pgkiln 0.31.0, in progress: static application files and the Execute JavaScript dynamic action; region, item, dynamic action and process plug-ins; conditional and dynamic theme styles; XML and Excel in `meta.parse_data`, zips in SQL, `meta.v_boolean`; file items in S3-compatible object storage; map layers by the visible area and as vector tiles; a graphical query builder; tenants for workflows and tasks; application files as YAML and region static IDs; Lucide icons and icon modifiers; PWA push notifications; 0.30.0: 136 icons and an icon picker; an axe-core accessibility audit; cropping pictures; session sharing between applications; twenty-two built-in languages; 0.29.0: workspaces; the Iris base style; drawers; built-in template components including the metric card; Theme Roller dark-mode colours, live preview and template options on items and report columns; report selection across pages; instance settings; fourteen built-in languages; 0.28.0: AI with Claude and OpenAI; 0.27.0: Data Reporter; sample data generator; create application from several sheets, pasted data or existing tables; 0.26.0: working copies with a three-way merge; theme, library and boilerplate applications with subscriptions; 0.25.0: Gantt, pyramid and polar charts; map layers, clustering and server-side spatial filters; REST data sources that write back from forms and grids and synchronise into tables, OAuth2 password and refresh-token grants; debug messages per request and an install/upgrade log; `meta.web_request()` and `meta.parse_data()`; Theme Roller style variants and template options; 0.24.0: automations with several actions, error handling per row and runs from SQL; invoke-API workflow steps; Unload Data in the Data Workshop; create page wizards for cards, calendar, chart, map, faceted search, form and master-detail; create an application from a file; 0.23.0: interactive grid aggregates, frozen/moved/resized columns, layouts and saved grid reports, master-detail, row actions and copy/paste; download processes, execution chains in the background, workflow processes, branches to a function's URL or another app, the Dialog Closed event; number format masks, automatic time zone, runtime messages in German, French and Spanish; SQL scripts, Quick SQL, a query builder, XML loading and data load definitions; custom authentication, lists, page and application locks with developer comments, supporting objects; 0.22.0: keyset paging, report PDFs and REST collections streamed from a cursor, database-account authentication; 0.21.0: HTTP-header authentication behind a reverse proxy; 0.20.0: a popup list of values with server-side search; 0.19.0: row-range pagination, maximum row counts and row limits, lazy loading and caching of regions, streamed CSV/Excel downloads; 0.18.0: calendar week/day/list views with drag and drop, bubble/gauge/funnel/radar charts and drill-down, smart filters, a region display selector and more facet types, computations, conditional branches, build options, menu buttons, REST data sources and web credentials, rich text/Markdown, rating, combobox, date range and QR code items; 0.17.0: an App Builder home, workspace dashboard and utilities like APEX's; 0.16.0: a Page Designer with drag-and-drop layout, a code editor with autocomplete, template components and plug-ins, parallel branches and versions of workflows, the `pgkiln` command line with one file per component; 0.15.0: drop and paste files, heat maps, filtering a report by the map area; 0.14.0: stacked, combo, scatter and pie charts, several files per upload item; 0.13.0: map and tree regions; 0.12.0: REST modules in the builder; 0.11.0: workflows and Progressive Web Apps; 0.10.0: LDAP, SAML, "Keep me signed in", document templates, JSON loading, approvals and the task list; pgkiln installs no application, HR is an example).
11
11
 
12
12
  ## At a glance
13
13
 
14
14
  | Area | ✅ | 🟡 | ❌ | ➖ | In short |
15
15
  |---|---:|---:|---:|---:|---|
16
16
  | App Builder and development | 22 | 0 | 0 | 0 | Page Designer with drag-and-drop and a code editor, wizards, search, where used, an Advisor, a CLI with one file per component, page locks and comments, supporting objects, working copies with a three-way merge, theme/library/boilerplate apps with subscriptions; App Builder AI (pages, SQL and table descriptions) |
17
- | Regions | 23 | 0 | 0 | 0 | All everyday regions, a search region over search configurations and a URL region; twenty-two chart types with drill-down; calendars with week/day/list views and drag and drop; faceted search, smart filters and a region display selector; interactive reports with breaks, aggregates, highlights, compute, group by, pivot, chart view and saved reports; interactive grids with single row, group by and chart views; maps (with vector tiles) and trees; template components; row ranges, lazy loading and region caching for large tables |
18
- | Items | 13 | 0 | 0 | 0 | All common items, file upload (several files per item), rich text and Markdown editors, star rating, combobox, date range, QR code, password reveal, display image and geocoded address |
17
+ | Regions | 24 | 0 | 0 | 0 | All everyday regions incl. classic reports with report templates, breadcrumb and help text regions, a search region over search configurations and a URL region; twenty-two chart types with drill-down; calendars with week/day/list views and drag and drop; faceted search, smart filters and a region display selector; interactive reports with breaks, aggregates, highlights, compute, group by, pivot, chart view and saved reports; interactive grids with single row, group by and chart views; maps (with vector tiles) and trees; template components; row ranges, lazy loading and region caching for large tables |
18
+ | Items | 15 | 0 | 0 | 0 | All common items incl. shuttle, Select One and Select Many, file upload (several files per item), rich text and Markdown editors, star rating, combobox, date range, QR code, password reveal, display image and geocoded address |
19
19
  | Logic and processing | 18 | 0 | 0 | 1 | User preferences and application settings; all dynamic action events and actions, Ajax callbacks and an error handling function; Core APEX model complete with computations, conditional branches, build options and menu buttons, download, chain and workflow processes; JavaScript from static application files in dynamic actions; region, item, dynamic action and process plug-ins |
20
20
  | Security | 22 | 0 | 0 | 0 | An editable login page and Forgot password; a session timeout warning; On par or stricter (CSP without `unsafe-inline`); OIDC, SAML and LDAP; header authentication behind a proxy; database accounts; custom authentication |
21
21
  | User interface | 12 | 0 | 0 | 0 | Region templates incl. hero, inline dialog and drawer, wizard and carousel; Universal Theme-like and responsive; a Theme Roller with style variants and conditional, dynamic styles; about 1,700 icons with Font APEX-like modifiers |
@@ -24,7 +24,7 @@ Last reviewed: 2026-11-04 against **APEX 26.2** (sprint 139: OpenTelemetry, trac
24
24
  | Workflow, automation and AI | 6 | 0 | 0 | 0 | Scheduled automations with several actions and runs from SQL, approvals, a task list and workflows with parallel branches, versions and invoke-API steps; AI with Claude or OpenAI: *Generate text with AI*, an assistant region with tools, natural-language report filters and blueprints |
25
25
  | Administration | 15 | 0 | 0 | 0 | OpenTelemetry traces, logs and metrics to the team's own monitoring and `/metrics` for Prometheus (24.2); An APEX-like sign-in with a workspace and a Workspace home; a mail queue dashboard, a workspace's own mail service and network access list (26.1 / 26.2); a workspace's components exported and imported as one file; workspace message, environment banner and utilization; isolated workspaces with their own database logins and roles, and workspace administrators; application availability and Run only, automatic backups, user feedback; a developer toolbar with a session state viewer and debug per session; Top SQL per app; debug messages per request; an install/upgrade log |
26
26
  | APEX 26.2 workspace (WS-1 … WS-13) | 13 | 0 | 0 | 1 | Workspace home, Data Reporter as a workspace tool, Team Development, AI Agents, AI interactive reports, Workflow 26.2, the mail queue, workspace mail and network access, the 26.1 component details, the App Builder list's details, the Pillar navigation appearances and data security per table (rows, columns and masked values), the App Gallery's single-topic sample apps, UX Pattern Catalog and Utility Apps; the builder in eleven languages (APEX's ten and Nederlands) |
27
- | **Total** | **163** | **0** | **0** | **4** | 167 APEX features compared: 98% available, none missing, 4 deliberately not planned |
27
+ | **Total** | **166** | **0** | **0** | **4** | 170 APEX features compared: 98% available, none missing, 4 deliberately not planned |
28
28
 
29
29
  (Counts are of the rows in the tables below. A review on 2026-10-06 added 18 rows for APEX features that were
30
30
  not compared before, one on 2026-10-12 added two more (property help, application availability), and one on
@@ -33,7 +33,8 @@ application reports, Manage Service), so the share available dropped without any
33
33
  two, REST source catalogs and the workspace export, with their features. Sprint 116 compared with APEX 26.2 and added
34
34
  the section [APEX 26.2 workspace](#apex-262-workspace-ws-1--ws-13): fourteen rows, the 26.2 workspace items WS-1 … WS-13
35
35
  and OCI managed identities. Some of them repeat a row above from the workspace's side; they are counted on purpose, as
36
- the 26.2 comparison. Sprint 139 added OpenTelemetry (24.2), found missing by the 27 Oct pass (AP-6).)
36
+ the 26.2 comparison. Sprint 139 added OpenTelemetry (24.2), found missing by the 27 Oct pass (AP-6). Sprint 140 split the shuttle off the
37
+ multi-select row and added Select One / Select Many (24.2) and the Help Text region (AP-4).)
37
38
 
38
39
  ## App Builder and development
39
40
 
@@ -66,7 +67,7 @@ the 26.2 comparison. Sprint 139 added OpenTelemetry (24.2), found missing by the
66
67
 
67
68
  | APEX | pgkiln | Notes |
68
69
  |---|---|---|
69
- | Classic report | ✅ | `report` with `interactive: false` |
70
+ | Classic report (report templates, pagination types) | ✅ | (sprint 140) Region type `classic_report`: the report renderer without the Actions menu, column menus, saved reports or downloads, and none of an interactive report's settings from the URL; sorting by headings, an optional search; `report_template` `standard` (a table), `value_pairs` (Value Attribute Pairs), `badges` (Badge List) or `media_list` (Media List); `pagination` `total` (X–Y of Z), `range` (X–Y) or `none` ([chapter 4](guide/04-pages-and-regions.md#classic_report-classic-report)) |
70
71
  | Interactive report | ✅ | (sprint 76) An Actions menu of nine entries with dialogs, a column heading menu (sort, hide, control break, the column's values to filter by), a search in one column, hidden columns, pagination with the range, first/last and rows per page. Search, column filters, sort, rows per page, control break, aggregates (with subtotals), highlight, saved private and public reports, computed columns, group by, pivot, chart view, row selection into a page item, CSV, Excel (typed cells) and PDF download, print, reset, reflow on phones. a maximum row count (`max_rows`), natural-language control (*Ask in your own words*, 26.1) and row selection that stays across pages. Not possible: flashback queries (PostgreSQL has none; use an audit or temporal table) |
71
72
  | Interactive grid | ✅ | Inline edit, add and delete rows, lists of values, required columns, per-row errors, all-or-nothing save, signed row keys, search and paging; **aggregates** over the whole result (developer and user defined), **frozen columns**, column **reorder/resize/hide** (Actions → Columns, or drag and drop), per-user layouts and **saved grid reports** (private and public), **master-detail** (signed row selection, the first row selected on load and after a search, details refreshed in place), **navigation and edit mode** (cells as text with their format mask until clicked, Enter or F2; arrow keys between cells), a **row actions menu** (edit, duplicate, delete, links) and **copy/paste** of cell ranges (tab-separated, spreadsheet compatible) ([chapter 4](guide/04-pages-and-regions.md)) |
72
73
  | Interactive grid views: single row view, chart view, group by | ✅ | (sprint 54) **Single row view**: one row of the search as a form with first/previous/next/last and *Add row*, from the Actions or row actions menu, saved by the grid's own process with the same checks; **group by** and **chart** set up in the Actions menu over every row of the search, as for the interactive report; `views` limits them; Save comes back to the same search, page and view ([chapter 4](guide/04-pages-and-regions.md#grid-interactive-grid)). No pivot view on grids (the interactive report has one), no editing in the single row view of columns the grid doesn't show |
@@ -77,7 +78,8 @@ the 26.2 comparison. Sprint 139 added OpenTelemetry (24.2), found missing by the
77
78
  | Faceted search | ✅ | Checkbox, range (predefined, or a custom from/to on numbers and dates), star rating and search facets with live counts that honour the other facets; exclude on checkbox facets (26.1). Values travel as query parameters, never as SQL text. (sprint 65) **Facet charts**: a bar or pie chart of a facet's counts, each mark filtering on its value. (sprint 78) The **total row count**, *Show all* after seven values, booleans as Yes/No, one search field (the report's own is left out). (sprint 84) A checkbox facet's **⋮ menu** (APEX: the facet's menu): *Clear* and *Sort by count* / *Sort by name* ([chapter 4](guide/04-pages-and-regions.md#facets-faceted-search)) |
78
79
  | Smart filters | ✅ | One search field with filter chips and suggestions over a report, the same facet types; URL-based, works without JavaScript ([chapter 4](guide/04-pages-and-regions.md#smart_filters)) |
79
80
  | Static content, dynamic content | ✅ | `static` (HTML with substitutions) and `dynamic` (a SELECT returning HTML) |
80
- | Breadcrumb | ✅ | Automatic, from the page's breadcrumb parent |
81
+ | Breadcrumb | ✅ | Automatic, from the page's breadcrumb parent; (sprint 140) also a `breadcrumb` region for the Breadcrumb bar position (the title bar then leaves its own out), with or without the current page. No separate breadcrumb shared component: the trail follows the pages' parents |
82
+ | Help Text region, page help | ✅ | (sprint 140) The page's *Help text* (Markdown with `&ITEM.` substitutions, item values stay text) and a `help_text` region that shows it ([chapter 4](guide/04-pages-and-regions.md#breadcrumb-and-help_text)) |
81
83
  | Navigation menu (side or top) | ✅ | Collapsible side menu or top bar; a drawer on tablets and phones |
82
84
  | Region display selector, tabs | ✅ | Tabs or a select list; regions can share a tab, *Show all*, the choice remembered in the session, `#R<id>` links. Accessible tabs with JavaScript; without it every region shows with links to each |
83
85
  | Tree | ✅ | `tree` region from id / parent id / label rows, with icons, links and the first levels open; works without JavaScript |
@@ -96,7 +98,9 @@ the 26.2 comparison. Sprint 139 added OpenTelemetry (24.2), found missing by the
96
98
  |---|---|---|
97
99
  | Text field, textarea, number, date picker, password, hidden, display only | ✅ | Native inputs, with the right phone keyboard (`inputmode`) |
98
100
  | Select list, radio group, checkbox, switch | ✅ | |
99
- | Checkbox group, shuttle / multi-select | ✅ | Colon-separated values, as in APEX |
101
+ | Checkbox group, multi-select | ✅ | Colon-separated values, as in APEX |
102
+ | Shuttle | ✅ | (sprint 140) `shuttle`: available and selected lists, a filter, move one / all, remove one / all, top / up / down / bottom, double-click and keyboard; colon-separated in the chosen order; a multi-select list without JavaScript ([chapter 5](guide/05-items.md#shuttle-select-one-and-select-many)) |
103
+ | Select One, Select Many (24.2) | ✅ | (sprint 140) `select_one`, `select_many`: a search field with a list box over the list of values (ARIA combobox), chips for Select Many; a select list or multi-select list without JavaScript. The list box filters the rows the page read (`max_rows`); a Popup LOV searches on the server |
100
104
  | Popup LOV | ✅ | `popup_lov`: a dialog with server-side search (loaded page after page as the dialog scrolls, at most 100 rows a request; ‹ / More without IntersectionObserver) of the item's own shared, static or SQL list of values, extra display columns, return vs display value; the posted value is checked against the list; a select list without JavaScript ([chapter 5](guide/05-items.md)) |
101
105
  | Cascading, shared and static lists of values | ✅ | `cascade_parents`, `LOV:NAME`, `STATIC:` |
102
106
  | E-mail, phone, URL, colour picker | ✅ | Typed inputs |
@@ -108,6 +112,78 @@ the 26.2 comparison. Sprint 139 added OpenTelemetry (24.2), found missing by the
108
112
  | Password reveal toggle (24.2) | ✅ | `{"reveal": true}` on password items; the value is never sent back to the page |
109
113
  | Display image, geocoded address | ✅ | (sprint 53) `image` items show a picture from an https URL, a path or a BLOB from a query (served as the application's role, sandboxed); `address` items check the text against the installation's Nominatim-compatible geocoder (`GEOCODER_URL`) and put the chosen address's position into another item |
110
114
 
115
+ ## Item and region types, one by one
116
+
117
+ (sprint 140) Every item type and region type of APEX 26.2's Page Designer, and what pgkiln uses for it, so the next
118
+ review is a diff. Not counted in [At a glance](#at-a-glance): the rows above compare features.
119
+
120
+ **Items**
121
+
122
+ | APEX item type | pgkiln | Notes |
123
+ |---|---|---|
124
+ | Checkbox | `checkbox` | `true` / `false` |
125
+ | Checkbox Group | `checkbox_group` | colon-separated; `{"switches": true}` |
126
+ | Color Picker | `color` | `#rrggbb` |
127
+ | Combobox | `combobox` | free text with suggestions, tags |
128
+ | Date Picker | `date`, `datetime` | pgkiln's date picker in the date format; `daterange` has no APEX type |
129
+ | Display Image | `image` | |
130
+ | Display Only | `display` | display values of a list of values |
131
+ | File Upload (File Browse) | `file` | several files per item |
132
+ | Geocoded Address | `address` | `GEOCODER_URL` |
133
+ | Hidden | `hidden` | |
134
+ | Image Upload (24.2) | `file` | with `{"accept": "image/*", "crop": "1:1", "max_px": 1600}` |
135
+ | Markdown Editor | `markdown` | |
136
+ | Number Field | `number` | format masks |
137
+ | Password | `password` | `{"reveal": true}` |
138
+ | Percent Graph | — | a template component or a report column template draws it ([template components](guide/04-pages-and-regions.md#template-components)) |
139
+ | Popup LOV | `popup_lov` | server-side search, infinite scrolling |
140
+ | QR Code | `qrcode` | |
141
+ | Radio Group | `radio` | |
142
+ | Rich Text Editor | `richtext` | sanitised HTML |
143
+ | Select List | `select` | |
144
+ | Select Many (24.2) | `select_many` | sprint 140 |
145
+ | Select One (24.2) | `select_one` | sprint 140 |
146
+ | Shuttle | `shuttle` | sprint 140 |
147
+ | Star Rating | `rating` | |
148
+ | Switch | `switch` | |
149
+ | Text Field | `text`, `email`, `tel`, `url` | the subtypes as their own types |
150
+ | Text Field with autocomplete (desupported) | `combobox` | |
151
+ | Textarea | `textarea` | |
152
+ | List Manager (desupported) | — | desupported in APEX; a `shuttle` or `select_many` does the job |
153
+ | Plug-in | `plugin` | item plug-ins with their own JavaScript |
154
+
155
+ **Regions**
156
+
157
+ | APEX region type | pgkiln | Notes |
158
+ |---|---|---|
159
+ | AI Assistant | `ai_assistant` | |
160
+ | Breadcrumb | `breadcrumb` | sprint 140; the title bar shows the trail without one |
161
+ | Calendar | `calendar` | |
162
+ | Cards | `cards` | |
163
+ | Chart | `chart` | |
164
+ | Classic Report | `classic_report` | sprint 140; before: `report` with `interactive: false` |
165
+ | Dynamic Content (PL/SQL Dynamic Content) | `dynamic` | a SELECT returning HTML |
166
+ | Faceted Search | `facets` | |
167
+ | Form | `form` | |
168
+ | Help Text | `help_text` | sprint 140 |
169
+ | Interactive Grid | `grid` | |
170
+ | Interactive Report | `report` | |
171
+ | List | `list` | |
172
+ | Map | `map` | |
173
+ | Region Display Selector | `display_selector` | |
174
+ | Search | `search` | |
175
+ | Smart Filters | `smart_filters` | |
176
+ | Static Content | `static` | |
177
+ | Template Component (Avatar, Badge, Comments, Content Row, Media List, Metric Card, Timeline) | `template_component` | built in, and your own |
178
+ | Tree | `tree` | |
179
+ | URL | `url` | |
180
+ | Unified Task List | `tasks` | |
181
+ | Workflow Console | `workflows` | |
182
+ | Data Reporter (26.2, a workspace tool) | `data_reporter` | also a region in an application |
183
+ | Column Toggle Report, Reflow Report, List View (jQuery Mobile, desupported) | — | desupported in APEX; reports reflow on phones (`"mobile": "reflow"`) |
184
+ | Plug-in | `plugin` | region plug-ins with their own code |
185
+ | — | `login`, `form_designer` | pgkiln's own: the login page's sign-in form, a form designer for business users |
186
+
111
187
  ## Logic and processing
112
188
 
113
189
  | APEX | pgkiln | Notes |
@@ -14,6 +14,7 @@ A page has a number (unique in the app), a name, a title, and these behaviours:
14
14
  | `authz` | scheme name | Who may open it (403 otherwise) |
15
15
  | `protection` | `checksum`, `unrestricted` | Whether URL item values need a checksum |
16
16
  | `warn_unsaved` | boolean | Ask before the user leaves the page with unsaved changes, see [below](#warn-on-unsaved-changes) |
17
+ | `help` | Markdown | (140; APEX: Page → Help Text) The page's help text, with `&ITEM.` substitutions; a [`help_text` region](#breadcrumb-and-help_text) shows it. At most 20,000 characters |
17
18
 
18
19
  ### Warn on unsaved changes
19
20
 
@@ -170,6 +171,7 @@ database only checks the shape (at most 12 names of lower case letters, digits a
170
171
  | Type | Purpose |
171
172
  |---|---|
172
173
  | [`report`](#report-interactive-report) | Read-only table from a SELECT, with search, filters, sorting, control break, aggregates, highlights, computed columns, group by, pivot and chart views, row selection, saved reports, paging and CSV/Excel/PDF download |
174
+ | [`classic_report`](#classic_report-classic-report) | (140) A report without the Actions menu and the interactive features: a table, value/attribute pairs, a badge list or a media list, with a choice of pagination |
173
175
  | [`grid`](#grid-interactive-grid) | Editable table on one database table, with aggregates, frozen, movable and resizable columns, saved grid reports, a row actions menu, master-detail, copy/paste of cells, and single row, group by and chart views |
174
176
  | [`form`](#form) | Fields for one row of a table, with automatic fetch and save |
175
177
  | [`chart`](#chart) | Bar, column, stacked, line, area, combo, scatter, bubble, donut, pie, gauge, funnel, radar, Gantt, pyramid, polar, range, box plot, stock, treemap, sunburst or timeline chart from a SELECT, with drill-down links |
@@ -189,6 +191,8 @@ database only checks the shape (at most 12 names of lower case letters, digits a
189
191
  | [`search`](#search-search-region) | One search field over several sources (search configurations), results grouped per source |
190
192
  | [`url`](#url-url-region) | Another site's page (or a page of this server) in a sandboxed frame |
191
193
  | `login` | The sign-in form of the application's own login page (no attributes): identity providers, user name and password, *Keep me signed in*, *Forgot password?*; see [chapter 8](08-security.md#the-login-page) |
194
+ | [`breadcrumb`](#breadcrumb-and-help_text) | (140) The page's breadcrumb trail, for the Breadcrumb bar position |
195
+ | [`help_text`](#breadcrumb-and-help_text) | (140) The page's help text |
192
196
  | [`static`](#static-and-dynamic-content) | Fixed HTML with `&ITEM.` substitutions |
193
197
  | [`dynamic`](#static-and-dynamic-content) | HTML produced by a SELECT |
194
198
 
@@ -403,7 +407,7 @@ Attributes (most of them are also in the page designer's **Report settings** for
403
407
  | `max_rows` | none | Maximum row count: the report, its total and its downloads read at most this many rows (1 to 1,000,000) |
404
408
  | `lazy` | `false` | Load the region after the page shows (see [large tables](#large-tables)) |
405
409
  | `cache` | none | Keep the rendered region: `{"scope": "user" \| "session" \| "all", "seconds": 300}` |
406
- | `searchable` | `true` | Show the search box (`false` = a "classic report") |
410
+ | `searchable` | `true` | Show the search box (`false`: no search, no Actions menu; or use a [`classic_report`](#classic_report-classic-report)) |
407
411
  | `fulltext` | none | (sprint 135) A `tsvector` column of the source that the search box also uses: a row is found when its text contains the search text, **or** its tsvector matches it (`websearch_to_tsquery`: stemmed words, `"phrases"`, `or`, `-word`). It may be a `hidden` column (you chose it). Without it, the only `tsvector` column the user may see is used, if there is one. Not with a search in one column |
408
412
  | `fulltext_config` | language's | (sprint 135) The text search configuration of that search (`english`, `dutch`…, the one the tsvector was made with); by default the application's primary language's, else `simple`. Only names in `pg_ts_config` are used |
409
413
  | `interactive` | `true` | Show the Actions menu (only when searchable) |
@@ -432,6 +436,25 @@ downloads; highlights, aggregates and the group by, pivot and chart views are sh
432
436
 
433
437
  ---
434
438
 
439
+ ### `classic_report` (classic report)
440
+
441
+ (sprint 140; APEX: Classic Report) A report from a SELECT without the Actions menu, column heading
442
+ menus, saved reports, downloads or row selection: the same renderer as the interactive report
443
+ with those left out, and none of their settings is read from the URL. Users can sort by a column
444
+ heading (`"sortable": false` leaves that out) and page; a search field only with
445
+ `"searchable": true`. Items placed in the region show above it, as filters for its query.
446
+
447
+ | Attribute | Default | Meaning |
448
+ |---|---|---|
449
+ | `report_template` | `"standard"` | `standard`: a table (a card per row on phones, `"mobile": "scroll"` keeps the table); `value_pairs`: each row as headings and values (APEX: Value Attribute Pairs); `badges`: the first column as the label and the second as a large value (APEX: Badge List); `media_list`: a title (column `title`, else the first) and a text (`description`, `text` or `body`, else the second), the title a link with `link` |
450
+ | `pagination` | `"total"` | `total`: rows X–Y of Z; `range`: rows X–Y without counting them all; `none`: every row on one page (at most `max_rows`, 500) and no pager |
451
+ | `page_size` | 15 | Rows per page (the user has no rows-per-page choice) |
452
+ | `headings`, `hidden`, `formats`, `link`, `empty`, `max_rows`, `lazy`, `cache` | | As for [`report`](#report-interactive-report) |
453
+
454
+ ```json
455
+ {"report_template": "badges", "pagination": "none"}
456
+ ```
457
+
435
458
  ### `grid` (interactive grid)
436
459
 
437
460
  An editable table on **one** table. Required properties: `table_name` (e.g. `hr.dept`),
@@ -1791,6 +1814,23 @@ Attributes:
1791
1814
  {"height": 640, "sandbox": ["allow-scripts", "allow-same-origin"], "fullscreen": true}
1792
1815
  ```
1793
1816
 
1817
+ ### `breadcrumb` and `help_text`
1818
+
1819
+ (sprint 140; APEX: Breadcrumb and Help Text regions)
1820
+
1821
+ - **`breadcrumb`**: the page's breadcrumb trail as links: the pages above it by their *Breadcrumb
1822
+ parent* (else the home page), the ones the user may open, then the current page's title
1823
+ (`{"current": false}` leaves that out). Put it in the **Breadcrumb bar** position with template
1824
+ `plain`, which is where the Page Designer's gallery puts one. A page with a breadcrumb region
1825
+ shows the trail only there: its title bar leaves its own out.
1826
+ - **`help_text`**: the page's **Help text** (Page Designer → page properties → Help), Markdown with
1827
+ `&ITEM.` substitutions; item values stay text (no Markdown or HTML of their own). HTML in the help
1828
+ text itself is shown as text, links to `javascript:` are not links. Without a help text the region
1829
+ says *No help is available for this page.* (the runtime message `region.no_help`), or
1830
+ `{"empty": "…"}`.
1831
+
1832
+ HR page 50 (*Project team*) has both, and two classic reports.
1833
+
1794
1834
  ### `static` and `dynamic` content
1795
1835
 
1796
1836
  - **`static`**: `source` is HTML written by the developer, with `&ITEM.` substitutions
@@ -23,6 +23,9 @@ page, optionally inside a region. Name them `P<page>_<NAME>` (uppercase letters,
23
23
  | `switch` | on/off switch | `true` / `false` |
24
24
  | `checkbox_group` | several checkboxes | **colon-separated** return values, e.g. `10:30`; (137) `{"switches": true}` shows each as a switch, one per line |
25
25
  | `multiselect` | multi-select list | **colon-separated** return values |
26
+ | `shuttle` | (140) two lists, *Available* and *Selected*, with buttons to move values across and put the chosen ones in order ([Shuttle](#shuttle-select-one-and-select-many)); a multi-select list without JavaScript | **colon-separated** return values, in the chosen order |
27
+ | `select_one` | (140) a search field over the list of values: typing filters a list under it ([Select One](#shuttle-select-one-and-select-many)); a select list without JavaScript | the chosen return value |
28
+ | `select_many` | (140) as `select_one`, for several values shown as chips with a remove button; a multi-select list without JavaScript | **colon-separated** return values |
26
29
  | `display` | read-only text (shows the display value for list items) | whatever was set |
27
30
  | `hidden` | not rendered | set by URL (with checksum), fetch or processes |
28
31
  | `file` | file upload ([chapter 16](16-files.md)); on phones the camera with `{"capture": "environment"}`, photos made smaller with `{"max_px": 1600}` ([chapter 17](17-mobile.md)) | the id of the uploaded temporary file (a uuid) |
@@ -191,7 +194,8 @@ pages and applications without sign-in keep nothing.
191
194
  ## Lists of values
192
195
 
193
196
  A list of values (LOV) provides the options of select lists, radio groups, checkbox groups,
194
- multi-selects, popup LOVs, grid columns and display items. Three forms:
197
+ multi-selects, shuttles, Select One and Select Many items, popup LOVs, grid columns and display
198
+ items. Three forms:
195
199
 
196
200
  1. **A SELECT returning (display, return)**. Bind variables are allowed:
197
201
  ```sql
@@ -205,8 +209,9 @@ multi-selects, popup LOVs, grid columns and display items. Three forms:
205
209
  list can also read a web service: give it a **REST data source** and query the rows from
206
210
  `rest` ([chapter 19](19-rest-data-sources.md#lists-of-values)).
207
211
 
208
- On submit, the value of a select list, radio group, checkbox group, multi-select or popup LOV (each
209
- value of a multi-value item), and of a grid column with a list of values, must be one its list
212
+ On submit, the value of a select list, radio group, checkbox group, multi-select, shuttle, Select
213
+ One, Select Many or popup LOV (each value of a multi-value item), and of a grid column with a list
214
+ of values, must be one its list
210
215
  returns at that moment, for that user: a list that leaves out departments a user may not pick also
211
216
  keeps a crafted request from choosing them. Otherwise the item gets *"choose a value from the
212
217
  list"*. For a list that may legitimately miss the current value, set `"any_value": true` in the
@@ -241,6 +246,41 @@ new search starts over at the first page. A browser without `IntersectionObserve
241
246
  The HR example's page 26 (*Pick an employee*) has one with name, job and department columns;
242
247
  page 47 (*Component details*) one over 6,000 rows, 100 a page.
243
248
 
249
+ ## Shuttle, Select One and Select Many
250
+
251
+ (sprint 140; APEX: Shuttle, and 24.2's Select One and Select Many) Three list items for choosing from
252
+ a list of values, each a plain select list without JavaScript (the page saves the same values):
253
+
254
+ - **Shuttle** (`shuttle`): two lists side by side, *Available* and *Selected* (stacked on phones),
255
+ with a filter field over the available values. Move values across with the buttons between the
256
+ lists (*Move all* », *Move* ›, *Remove* ‹, *Remove all* «), by double-clicking one, or with the
257
+ keyboard: **Enter** moves the marked values across, **Delete** removes them from *Selected*, and in
258
+ *Selected* **Alt+↑ / Alt+↓** move them up or down (with **Shift**: to the top or bottom; the buttons
259
+ ⤒ ↑ ↓ ⤓ do the same). The value is the chosen return values **in their order**, colon-separated
260
+ (`7566:7902`), so `string_to_array(:P50_MEMBERS, ':') with ordinality` keeps the order. Without
261
+ JavaScript the shuttle is a multi-select list (the chosen values first, in their order); a value
262
+ posted from it comes in the list's order.
263
+ - **Select One** (`select_one`): a search field. Clicking it or typing opens a list box under it
264
+ that shows the list's display values containing what was typed (case-insensitive); **↑ / ↓**
265
+ move through it, **Enter** chooses, **Escape** closes. Emptying the field chooses no value.
266
+ `{"null_label": "- None -"}` names the empty entry, `false` leaves it out (a required item).
267
+ - **Select Many** (`select_many`): the same, for several values: the chosen ones are chips above the
268
+ field, each with a remove button (named *Remove …* for screen readers); **Backspace** in the
269
+ empty field removes the last one, Enter on a chosen value in the list removes it again. The
270
+ value is colon-separated, like a multi-select.
271
+
272
+ Like the other list items they are checked against their list of values on submit, take
273
+ `cascade_parents` (a cascading shuttle is reloaded with its new values), show their display values
274
+ (comma-separated, in order) when read-only, and dynamic actions see the colon-separated value
275
+ (*Set value* with `A:B` chooses those values). The list box searches the rows the page read
276
+ (`max_rows`, 5,000 by default): for lists of tens of thousands of rows use a [Popup LOV](#popup-lov),
277
+ which searches on the server. Texts such as *Move all*, *Selected* and *Remove {value}* are runtime
278
+ messages (`shuttle.*`, `lov.search`, `item.tag_remove`) an application can replace with a text
279
+ message of the same name.
280
+
281
+ HR page 50 (*Project team*, Administration) has a Select One of departments, a shuttle of that
282
+ department's employees (cascading) and a Select Many of skills.
283
+
244
284
  ## Cascading lists of values
245
285
 
246
286
  A list that depends on another item, for example managers filtered by department:
@@ -59,6 +59,9 @@ What's missing is listed in the [feature parity matrix](../apex-feature-parity.m
59
59
  | `APEX_DATA_EXPORT.EXPORT` | `meta.data_export(query, format, options)` (CSV, JSON, XML, HTML) and the download process's `{"export": "xlsx"}` (also PDF) ([chapter 6](06-processing.md#data-export-from-sql)) |
60
60
  | `APEX_LANG.LANG`, dynamic translations | Shared Components → Dynamic translations and `meta.lang(text)` ([chapter 14](14-globalization.md#dynamic-translations)) |
61
61
  | Display Image, Geocoded Address items | Item types `image` and `address` (geocoder: `GEOCODER_URL`) ([chapter 5](05-items.md#display-image-and-geocoded-address)) |
62
+ | Shuttle, Select One, Select Many (24.2) items | Item types `shuttle` (ordered, colon-separated), `select_one` and `select_many` (a search field over the list of values; chips): plain selects without JavaScript ([chapter 5](05-items.md#shuttle-select-one-and-select-many)) |
63
+ | Classic Report region (report templates, pagination types) | Region type `classic_report`: `report_template` `standard`, `value_pairs`, `badges` or `media_list`; `pagination` `total`, `range` or `none` ([chapter 4](04-pages-and-regions.md#classic_report-classic-report)) |
64
+ | Breadcrumb region (Breadcrumb Bar), Help Text region and page help | Region types `breadcrumb` (from each page's *Breadcrumb parent*; no separate breadcrumb shared component) and `help_text`; the page's *Help text* (Markdown) ([chapter 4](04-pages-and-regions.md#breadcrumb-and-help_text)) |
62
65
  | Translated applications (XLIFF), `APEX_LANG.MESSAGE`, `&APP_TEXT$NAME.` | Translations in the app (XLIFF/CSV import and export), `meta.message()`, `&APP_TEXT$NAME.` ([chapter 14](14-globalization.md)) |
63
66
  | Application date format mask | Settings → Globalization → Date format (Oracle-style masks) |
64
67
  | Number format masks (`FML999G999G990D00`) on columns and items | `{"formats": {...}}` on report, grid and cards columns, `{"format_mask": "..."}` on charts and number/display items ([chapter 14](14-globalization.md#number-formats)) |
@@ -221,6 +221,8 @@ src/
221
221
  logic.ts computations (the page's and (102) the application's), branches (page, URL, function returning a URL, another application) and their conditions
222
222
  shortcuts.ts (103) "NAME" shortcuts in static content, help texts and confirm messages
223
223
  render.ts page chrome (nav, breadcrumb), dynamic action JSON, theme (the page's nonce'd <style>, light/dark and style switches)
224
+ page-regions.ts (sprint 140) breadcrumb and help_text regions: breadcrumbLinks (also the title bar's trail, left out when the
225
+ page has a breadcrumb region), the page's help text (meta.page.help) as Markdown with escaped &ITEM. values
224
226
  styles.ts base styles (BASE_STYLES: Iris, Lavender, Standard; baseStyleOf → html data-style), Theme Roller style variants: fixed lists (fonts, sizes, corners), parseStyle/appStyles checks, the request's
225
227
  style (user choice, default), themeCss() (only hex values and constants reach the CSS); (sprint 117) NAV_APPEARANCES
226
228
  (Pillar Light / Dark), navAppearance() → the <body> classes nav-pillar-*, the header strip (--strip)
@@ -228,7 +230,10 @@ src/
228
230
  regions.ts region shell + chart (drill-down links, gauge settings)/cards/dynamic dispatch with row limits, lazy placeholder and cache, buttons (menu buttons, badges; (124) menu entries {action} → data-menu-entry for menu_entry dynamic actions)
229
231
  report.ts, report-views.ts (group by, pivot, chart), compute.ts (computed column expressions), grid.ts (aggregates, row actions, Actions menu, single row view, layoutFromForm), grid-layout.ts (column layouts: clean, arrange, per user), master-detail.ts (signed master row selection, details), facets.ts (facetChart: a facet's counts as a chart, sprint 65), items.ts
230
232
  (report.ts: paging with row ranges and max_rows, keyset paging (keysetPlan, seekCondition, signed r<id>_k), pagerNav, streamed CSV/Excel downloads with a cursor;
231
- items.ts: lovOptions, searchLov/lovLookup for popup LOVs, served by POST /a/:alias/:page/lov/:item/search in routes.ts)
233
+ (140) classic_report through renderReport: reportState drops the interactive settings, classicTemplate (value_pairs, badges, media_list),
234
+ pagination total/range/none;
235
+ items.ts: lovOptions, searchLov/lovLookup for popup LOVs, served by POST /a/:alias/:page/lov/:item/search in routes.ts;
236
+ LOV_TYPES / LOV_CHECKED / MULTI_VALUE: the list item types (shuttle, select_one, select_many since 140) checked on submit and colon-separated)
232
237
  region-cache.ts region caching (keys per scope, CSRF placeholder, invalidation on submit) and lazy regions (GET …/region/:id is in routes.ts)
233
238
  gantt-move.ts (sprint 69) Gantt drag and drop: ganttEditable, targetTime, moveGanttTask (the task in the region's
234
239
  query, gantt_move with :TASK_ID/:NEW_START/:NEW_END); the dragging itself is in app.js
@@ -519,7 +524,8 @@ public/
519
524
  (sprint 117) navigation tree states, RTL via logical properties, body.nav-pillar-*, u-color-*-subtle, the busy bar)
520
525
  app.js client runtime: dialogs (dialog_closed actions), popup LOVs (sprint 115: the next page loads on scroll through an
521
526
  IntersectionObserver, ‹/More without one), dynamic actions (focus, classes, messages; sprint 115: wait_popup /
522
- remove_wait_popup as a modal <dialog class="wait-popup">, pgkiln.waitPopup(), the menu_entry event), grids (add/duplicate rows, master-detail refresh, move/resize columns, copy/paste of cell ranges), menus, lazy regions, maps (Leaflet layers, marker clusters, heat layer, layer legend, area/distance filter) (no inline JS)
527
+ remove_wait_popup as a modal <dialog class="wait-popup">, pgkiln.waitPopup(), the menu_entry event), (sprint 140) shuttle()
528
+ and selectPick() (Select One / Many: combobox + listbox, chips) over the item's hidden <select>, grids (add/duplicate rows, master-detail refresh, move/resize columns, copy/paste of cell ranges), menus, lazy regions, maps (Leaflet layers, marker clusters, heat layer, layer legend, area/distance filter) (no inline JS)
523
529
  code-editor.js, .css builder code editor: enhances <textarea data-code>, highlighting, suggestions (no dependencies);
524
530
  (sprint 108) the current line, and read-only <pre data-code-view="sql|plpgsql|json|html"> highlighted;
525
531
  its colours are the --ce-* tokens in builder.css
@@ -545,6 +551,7 @@ test/
545
551
  globalization.test.ts masks on HR page 29, time zones, the de/fr/es texts
546
552
  files.test.ts file items: storage, limits, downloads, temporary files
547
553
  items.test.ts rich text, Markdown, rating, combobox, date range, password reveal and QR code items
554
+ item-region-types.test.ts (sprint 140) shuttle, select one/many, classic report, breadcrumb and help text: gallery, runtime, export, Advisor, HR page 50
548
555
  dataload.test.ts parsing, Load Data, the data_load process
549
556
  sampledata.test.ts Sample Data: CHECK parsing, proposals, option errors, seeds and streams, preview/insert/rollback, parents first, downloads, saved generators
550
557
  unload.test.ts Unload Data: CSV/JSON/XLSX/XML output, read back with Load Data, read-only and one-statement checks, streaming
@@ -641,6 +648,7 @@ test/
641
648
  e2e/worksheet.test.ts (sprint 91) the SQL Worksheet in a browser: run keys, tabs, navigator, drag and drop, splitters, phone, no JavaScript;
642
649
  (107) transaction mode: badge, reload, Rollback, closing a tab, Autocommit switch, beforeunload
643
650
  e2e/items.test.ts sprint 26 item types in a browser: editors, tags, stars, dates, reveal; without JavaScript
651
+ e2e/item-region-types.test.ts (sprint 140) the shuttle (buttons, keyboard, order) and Select One / Many in a browser; without JavaScript; 390 px
644
652
  e2e/designer.test.ts page designer: panes per width, drag and drop, keyboard, Arrange buttons, builder theme
645
653
  e2e/calendar.test.ts calendar drag and drop and create on click, view switching, chart drill-down
646
654
  e2e/gantt.test.ts Gantt drag and drop: moving a task, its end, the keyboard, a click still drills down, the phone
@@ -0,0 +1,81 @@
1
+ -- =====================================================================
2
+ -- HR example, part 75: the item and region types of sprint 140 (AP-4;
3
+ -- migration 140; docs/guide/05-items.md, 04-pages-and-regions.md)
4
+ --
5
+ -- Page 50 "Project team" (Administration → Project team) puts a team
6
+ -- together the way an APEX page would:
7
+ --
8
+ -- - P50_DEPTNO, a Select One (a searchable single pick) of the
9
+ -- departments;
10
+ -- - P50_MEMBERS, a Shuttle of that department's employees (a cascading
11
+ -- list of values: choosing another department reloads it). The chosen
12
+ -- employees keep their order (Move up / Move down), stored
13
+ -- colon-separated like a multiselect: 7839:7566:7902;
14
+ -- - P50_SKILLS, a Select Many (chips) of a static list of values.
15
+ -- Without JavaScript the three are a plain select list and two
16
+ -- multi-selection lists, and Save works the same;
17
+ -- - "Chosen team", a Classic Report (no Actions menu) of the chosen
18
+ -- employees in the shuttle's order, and "Head count", a classic report
19
+ -- with the badges template;
20
+ -- - a Breadcrumb region in the Breadcrumb bar position (the title bar
21
+ -- then leaves its own trail out), and a Help Text region showing the
22
+ -- page's help text (Page → Help text, Markdown).
23
+ -- Save keeps the values in the session only: the page has no table.
24
+ -- =====================================================================
25
+
26
+ insert into meta.page (app_id, page_no, name, title, parent_page, help)
27
+ select id, 50, 'Project team', 'Project team', 1,
28
+ $h$Put a **project team** together:
29
+
30
+ 1. Choose a *department* (type to search the list).
31
+ 2. Move its employees from **Available** to **Selected** (double-click, Enter, or the › and » buttons) and put them in order with the arrow buttons.
32
+ 3. Choose the skills the team needs, then **Save**.
33
+
34
+ Team lead for now: &APP_USER..$h$
35
+ from meta.app where alias = 'hr';
36
+
37
+ insert into meta.region (page_id, seq, title, type, columns, template, position, source, config)
38
+ select p.id, r.seq, r.title, r.type, r.cols, r.template, r.position, r.source, r.config::jsonb
39
+ from meta.page p join meta.app a on a.id = p.app_id, (values
40
+ (5, 'Breadcrumb', 'breadcrumb', 12, 'plain', 'breadcrumb', null, '{}'),
41
+ (10, 'Team', 'static', 8, 'standard', null, null, '{}'),
42
+ (20, 'How it works', 'help_text', 4, 'standard', null, null, '{}'),
43
+ (30, 'Chosen team', 'classic_report', 8, 'standard', null,
44
+ 'select e.empno, e.ename, e.job, d.dname
45
+ from unnest(string_to_array(:P50_MEMBERS, '':'')) with ordinality m(empno, n)
46
+ join hr.emp e on e.empno::text = m.empno
47
+ left join hr.dept d on d.deptno = e.deptno
48
+ order by m.n',
49
+ '{"headings": {"empno": "No.", "ename": "Name", "job": "Job", "dname": "Department"}, "sortable": false, "pagination": "none", "empty": "Nobody chosen yet: move employees to Selected and save."}'),
50
+ (40, 'Head count', 'classic_report', 4, 'standard', null,
51
+ 'select d.dname as label, count(e.empno) as value
52
+ from hr.dept d left join hr.emp e on e.deptno = d.deptno
53
+ group by d.dname order by d.dname',
54
+ '{"report_template": "badges", "pagination": "none"}')
55
+ ) as r (seq, title, type, cols, template, position, source, config)
56
+ where a.alias = 'hr' and p.page_no = 50;
57
+
58
+ insert into meta.item (page_id, region_id, seq, name, label, type, lov, config, help)
59
+ select p.id, r.id, i.seq, i.name, i.label, i.type, i.lov, i.config::jsonb, i.help
60
+ from meta.page p join meta.app a on a.id = p.app_id
61
+ join meta.region r on r.page_id = p.id and r.title = 'Team', (values
62
+ (10, 'P50_DEPTNO', 'Department', 'select_one', 'select dname, deptno from hr.dept order by 1', '{"wide": true}', null),
63
+ (20, 'P50_MEMBERS', 'Team members', 'shuttle',
64
+ 'select ename || '' ('' || coalesce(job, ''-'') || '')'' as d, empno as r from hr.emp where deptno = :P50_DEPTNO order by ename',
65
+ '{"cascade_parents": "P50_DEPTNO", "wide": true}', 'In the order they lead the project.'),
66
+ (30, 'P50_SKILLS', 'Skills needed', 'select_many',
67
+ 'STATIC:SQL;SQL,PL/pgSQL;PLPGSQL,TypeScript;TS,Design;DESIGN,Testing;TEST,Accessibility;A11Y',
68
+ '{"wide": true}', null)
69
+ ) as i (seq, name, label, type, lov, config, help)
70
+ where a.alias = 'hr' and p.page_no = 50;
71
+
72
+ insert into meta.button (page_id, region_id, seq, name, label, action, hot)
73
+ select p.id, r.id, 10, 'SAVE', 'Save', 'submit', true
74
+ from meta.page p join meta.app a on a.id = p.app_id
75
+ join meta.region r on r.page_id = p.id and r.title = 'Team'
76
+ where a.alias = 'hr' and p.page_no = 50;
77
+
78
+ insert into meta.nav_entry (app_id, parent_id, seq, label, icon, target_page)
79
+ select a.id, n.id, 70, 'Project team', 'users', 50
80
+ from meta.app a join meta.nav_entry n on n.app_id = a.id and n.label = 'Administration' and n.parent_id is null
81
+ where a.alias = 'hr';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pgkiln",
3
- "version": "0.72.0",
3
+ "version": "0.73.0",
4
4
  "description": "Open source low-code, SQL-driven application builder for PostgreSQL, inspired by Oracle APEX",
5
5
  "keywords": [
6
6
  "postgresql",