Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
869c593
Initial plan
Copilot Mar 12, 2026
f277e63
feat: add @dynamia-tools/ui-core package
Copilot Mar 12, 2026
db77ac4
fix: address code review comments in ui-core package
Copilot Mar 12, 2026
9099cb7
feat: add @dynamia-tools/vue TypeScript/Vue 3 adapter package
Copilot Mar 12, 2026
7581808
fix: clarify Longbox→Intbox mapping in Field.vue component map
Copilot Mar 12, 2026
2b39d59
feat: implement @dynamia-tools/ui-core and @dynamia-tools/vue packages
Copilot Mar 12, 2026
3db3697
docs: add README.md for @dynamia-tools/ui-core and @dynamia-tools/vue…
Copilot Mar 13, 2026
20f5a35
Merge pull request #56 from dynamiatools/copilot/implement-ui-core-vue
marioserrano09 Mar 13, 2026
e44b70b
refactor(navigation): update NavigationNode structure and adjust rela…
marioserrano09 Mar 14, 2026
8ca2075
feat(crud): add CrudPage component and resolver for automatic CRUD in…
marioserrano09 Mar 14, 2026
c97f01f
feat(docs): enhance README.md with API exports, usage examples, and n…
marioserrano09 Mar 14, 2026
85cd5b3
feat(navigation): add navigation helpers and update README with usage…
marioserrano09 Mar 14, 2026
b7921d6
feat(docs): add navigation helpers section to README and update usage…
marioserrano09 Mar 14, 2026
1481ccf
feat(navigation): add NavigationResolver with path resolution helpers…
marioserrano09 Mar 14, 2026
e91cc8d
feat(docs): add initial README for Dynamia Tools Vue backoffice demo
marioserrano09 Mar 14, 2026
734eb9f
feat(docs): add JavaScript/TypeScript guidelines for SDK and Vue usage
marioserrano09 Mar 14, 2026
11409c2
feat(api): update entity view types and enhance metadata interfaces
marioserrano09 Mar 14, 2026
8f0613e
feat(layout): enhance field group sorting and improve group parameter…
marioserrano09 Mar 14, 2026
e647d4b
feat(global-components): augment Vue's GlobalComponents for DynamiaVu…
marioserrano09 Mar 14, 2026
af34ecb
feat(http): enhance URL building and add CORS mode support
marioserrano09 Mar 14, 2026
4f17ef1
feat(crud): streamline save and delete methods, enhance error handlin…
marioserrano09 Mar 14, 2026
4ca5685
feat(crud): enhance reload functionality to support navigation change…
marioserrano09 Mar 14, 2026
b65a541
feat(data-set-view): introduce DataSetView abstraction for managing c…
marioserrano09 Mar 14, 2026
bb71335
feat(metadata): enhance ApplicationMetadataController and loader for …
marioserrano09 Mar 14, 2026
0a906d7
feat(demo): initialize Vue backoffice demo with Dynamia integration a…
marioserrano09 Mar 14, 2026
24addd2
feat(config): add CORS configuration for API endpoints and create Met…
marioserrano09 Mar 14, 2026
5c221c9
feat(crud): refactor view handling to use 'view' key and introduce de…
marioserrano09 Mar 14, 2026
eadc667
feat(dependencies): add package-lock.json for dependency management a…
marioserrano09 Mar 14, 2026
3e6e204
feat(metadata): enhance type definitions and documentation for improv…
marioserrano09 Mar 14, 2026
8e95325
feat(actions): enhance action metadata with type and className proper…
marioserrano09 Mar 15, 2026
41b0995
feat(crud): enhance CRUD functionality with dataset view support and …
marioserrano09 Mar 15, 2026
61a4dc7
chore(dependencies): update version from 26.3.1 to 26.3.2 across all …
marioserrano09 Mar 16, 2026
6fa8862
chore(dependencies): update version from 26.3.1 to 26.3.2 for all pac…
marioserrano09 Mar 16, 2026
f2fa090
refactor(actions): Actions now have LocalAction and RemoteAction
marioserrano09 Mar 16, 2026
a846560
feat(workspace): initialize pnpm workspace with package.json and tsco…
marioserrano09 Mar 17, 2026
7d077f6
feat(workspace): initialize pnpm workspace with package.json and tsco…
marioserrano09 Mar 17, 2026
f99dfbe
fix(actions): update action type handling to include CrudRemoteAction
marioserrano09 Mar 17, 2026
475d7ee
feat(actions): implement client-side action system with registry and …
marioserrano09 Mar 17, 2026
e76e6f2
refactor(package): rename workspace from @dynamia-tools/workspace to …
marioserrano09 Mar 17, 2026
c3f9fcb
feat(api): implement FilesApi for downloading files and generating URLs
marioserrano09 Mar 17, 2026
e7707e4
feat(reports): implement ReportsApi for accessing the Reports extensi…
marioserrano09 Mar 17, 2026
e16bfdc
feat(saas): implement SaasApi for managing multi-tenant accounts via …
marioserrano09 Mar 17, 2026
5552deb
feat(types): add SaaS and Reports type definitions for API integration
marioserrano09 Mar 17, 2026
3a28775
refactor(workspace): simplify package structure in pnpm workspace con…
marioserrano09 Mar 17, 2026
4765f02
chore(ci): update publish workflow for improved dependency management…
marioserrano09 Mar 17, 2026
82255ac
docs: update copilot instructions for clarity and consistency
marioserrano09 Mar 17, 2026
8644509
docs: add README documentation for @dynamia-tools/files-sdk, @dynamia…
marioserrano09 Mar 17, 2026
ce5cd6a
docs: enhance copilot instructions for IDE integration and symbol man…
marioserrano09 Mar 17, 2026
22b887a
docs: enhance copilot instructions for IDE integration and symbol man…
marioserrano09 Mar 17, 2026
3857cd1
feat: add support for loading enum values in DefaultFieldCustomizer
marioserrano09 Mar 17, 2026
c96cd60
chore: update tools.version to 26.3.2 in pom.xml
marioserrano09 Mar 17, 2026
5a85d32
feat: add support for resolving enum constants in ViewField
marioserrano09 Mar 17, 2026
d11553c
feat: add entity reference retrieval and enhance field customization
marioserrano09 Mar 18, 2026
1498d25
feat: add entity reference retrieval and improve code formatting
marioserrano09 Mar 18, 2026
80c274d
feat: enhance entity picker components with backend search and enum s…
marioserrano09 Mar 18, 2026
bf95576
feat: update entity picker and reference components to use CrudListRe…
marioserrano09 Mar 19, 2026
756ae97
feat: add BookLog entity and integrate with entity reference system
marioserrano09 Mar 19, 2026
3a21130
feat: add development condition to package and tsconfig for improved …
marioserrano09 Mar 19, 2026
63e314a
feat: add comprehensive documentation for frontend and backend develo…
marioserrano09 Mar 19, 2026
4e7fdc0
feat: add Vue Integration Guide for API Client Patterns
marioserrano09 Mar 19, 2026
25df425
feat: add InstallValidator annotation for dynamic validator registration
marioserrano09 Mar 19, 2026
6092b5e
chore: update version to 26.4.0 across all dependencies in pom.xml
marioserrano09 Apr 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
93 changes: 70 additions & 23 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
@@ -1,60 +1,70 @@
# Copilot Instructions for Dynamia Tools (Framework Internal)

These guidelines are for contributing to the **Dynamia Tools framework itself**, not for applications that use the framework.
These guidelines are for contributing to the **Dynamia Tools framework itself**, not for applications that use the framework.
The focus is on keeping the codebase consistent, maintainable, and well-documented.

## IDE Integration Always use the `intellij-index` MCP server when applicable for:
- **Finding references** — Use `ide_find_references` instead of grep/search
- **Go to definition** — Use `ide_find_definition` for accurate navigation
- **Renaming symbols** — Use `ide_refactor_rename` for safe, project-wide renames
- **Type hierarchy** — Use `ide_type_hierarchy` to understand class relationships
- **Finding implementations** — Use `ide_find_implementations` for interfaces/abstract classes
- **Diagnostics** — Use `ide_diagnostics` to check for code problems The IDE's semantic understanding is far more accurate than text-based search.
- Prefer IDE tools over grep, ripgrep, or manual file searching when working with code symbols.


---

## Project Structure

The framework is organized into modules. Each module has a specific responsibility:

- **actions**
- **actions**
Handles platform actions, implementing operations users can perform (create, update, delete entities).

- **app**
- **app**
Main application module, orchestrating the integration of all other modules and providing the entry point.

- **commons**
- **commons**
Contains shared utilities and common code used across multiple modules to avoid duplication.

- **crud**
- **crud**
Provides generic Create, Read, Update, Delete functionalities for entities, simplifying data management.

- **domain**
- **domain**
Defines core business entities and domain logic, serving as the foundation for other modules.

- **domain-jpa**
- **domain-jpa**
Adds JPA (Java Persistence API) support for domain entities, enabling ORM and database integration.

- **integration**
- **integration**
Manages integration with external systems and services, handling communication and data exchange.

- **io**
- **io**
Responsible for input/output operations, such as file handling and data streams.

- **navigation**
- **navigation**
Implements navigation logic and structures for the application's user interface.

- **reports**
- **reports**
Generates and manages reports, providing tools for data analysis and export.

- **starter**
- **starter**
Offers starter templates and configurations to bootstrap new projects or modules.

- **templates**
- **templates**
Contains reusable templates for UI, emails, or documents.

- **ui**
- **ui**
Manages user interface components and visual elements.

- **viewers**
- **viewers**
Provides components for viewing and presenting data in various formats.

- **web**
- **web**
Exposes web functionalities, including REST endpoints and web resources.

- **zk**
- **zk**
Integrates ZK framework components for building rich web interfaces.

---
Expand All @@ -68,6 +78,42 @@ The framework is organized into modules. Each module has a specific responsibili

---

## JavaScript/TypeScript (SDK + Vue) Guidelines

When generating frontend code for Dynamia Platform, prefer the current APIs from:

- `platform/packages/sdk/src/index.ts`
- `platform/packages/sdk/src/client.ts`
- `platform/packages/vue/src/index.ts`
- `platform/packages/vue/src/plugin.ts`

### `@dynamia-tools/sdk`

- Use `new DynamiaClient({ baseUrl, token? })` as the entry point.
- Prefer `baseUrl` as app origin (for example `https://app.example.com`), because SDK endpoints already include `/api/...` internally.
- Use `client.metadata.getNavigation()` for menus/routing (shape: `NavigationTree.navigation`, not `modules/groups/pages`).
- Use `client.crud(path)` for `CrudPage` virtual paths (`findAll`, `findById`, `create`, `update`, `delete`).
- Use `client.crudService(className)` only for class-name based `/crud-service` use cases.
- `findAll()` returns `CrudListResult` with `content`, `total`, `page`, `pageSize`, `totalPages`.
- Handle API failures with `DynamiaApiError` (`status`, `url`, `body`).

### `@dynamia-tools/vue`

- Register the plugin once: `app.use(DynamiaVue)`.
- Use global components provided by the plugin: `DynamiaViewer`, `DynamiaForm`, `DynamiaTable`, `DynamiaCrud`, `DynamiaCrudPage`, `DynamiaNavMenu`, `DynamiaNavBreadcrumb`, etc.
- Prefer composables over manual wiring: `useViewer`, `useView`, `useForm`, `useTable`, `useCrud`, `useCrudPage`, `useEntityPicker`, `useNavigation`.
- For app shells driven by navigation, use `useNavigation(client)` and render by node type.
- For nodes with `node.type === 'CrudPage'`, render with `DynamiaCrudPage` or wire with `useCrudPage`.
- In menu/breadcrumb code use `NavigationNode.internalPath` and `children`.

### Accuracy Rules for Generated Examples

- Do not invent SDK or Vue APIs that are not exported from the package `index.ts` files.
- Keep examples aligned with real return types (for example `CrudListResult`, `NavigationNode`).
- If an API is uncertain, prefer a short TODO comment over guessing a method/signature.

---

## Documentation Guidelines (Javadoc)

- Every class and public method must have **Javadoc in English**.
Expand Down Expand Up @@ -133,7 +179,7 @@ Start fast with DynamiaTools

## Installation

1. Create a new SpringBoot project using [start.spring.io](https://start.spring.io) and select Web, JPA and a programming language for your Spring Boot app.
1. Create a new SpringBoot project using [start.spring.io](https://start.spring.io) and select Web, JPA and a programming language for your Spring Boot app.
DynamiaTools is compatible with Java, Groovy and Kotlin.

You can also [click here](https://start.spring.io/#!type=maven-project&language=java&packaging=jar&jvmVersion=21&groupId=com.example&artifactId=dynamia-tools-project&name=Dynaima&description=Demo%20project%20for%20Spring%20Boot&packageName=com.example.demo&dependencies=web,data-jpa,h2) to get a preconfigured Spring Boot project with Java, Maven and Web with JPA support.
Expand Down Expand Up @@ -183,7 +229,7 @@ class MyApplication {
}
```

After running the application, open your browser and go to http://localhost:8080.
After running the application, open your browser and go to http://localhost:8080.
You should see a blank page with a fully functional HTML template called Dynamical.

---
Expand Down Expand Up @@ -264,14 +310,14 @@ public class ContactModuleProvider implements ModuleProvider {
}
```

Modules include ID, name, pages and page groups. Pages include ID, name and path, which in this case is represented by an entity class.
Modules include ID, name, pages and page groups. Pages include ID, name and path, which in this case is represented by an entity class.
For example, the `Contact` crud page has the path `/pages/my-module/contacts`.

---

### 3. View descriptors

Descriptors are YAML files defining how views for entities are rendered at runtime.
Descriptors are YAML files defining how views for entities are rendered at runtime.
Create a folder `/resources/META-INF/descriptors` and a file `ContactForm.yml`:

```yaml
Expand Down Expand Up @@ -310,7 +356,7 @@ fields:

### 4. Run and enjoy

Your app now has a new menu called *My Module* and a submenu called *Contacts*.
Your app now has a new menu called *My Module* and a submenu called *Contacts*.
This is a fully functional CRUD with create, read, update, delete, and many more ready-to-use actions.

---
Expand All @@ -335,7 +381,7 @@ dynamia:

### Automatic REST

Every `CrudPage` automatically generates a REST endpoint.
Every `CrudPage` automatically generates a REST endpoint.
Example: `http://localhost:8080/api/my-module/contacts`

```json
Expand Down Expand Up @@ -368,3 +414,4 @@ With this guide, you’ve just built a web application with:
- A responsive template

Continue with the advanced guides to explore more features of DynamiaTools.

18 changes: 7 additions & 11 deletions .github/workflows/publish-npm.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,17 @@ name: Publish NPM Packages

on:
release:
types: [published] # triggers when a release is published on GitHub
workflow_dispatch: # allows manual trigger from the Actions tab
types: [published]
workflow_dispatch:

jobs:
publish:
name: Build, Test & Publish to NPM
runs-on: ubuntu-latest
defaults:
run:
working-directory: platform/packages

permissions:
contents: read
id-token: write # required for npm provenance
id-token: write

steps:
- name: Checkout repository
Expand All @@ -33,19 +30,18 @@ jobs:
node-version: '24'
registry-url: 'https://registry.npmjs.org'
cache: 'pnpm'
cache-dependency-path: platform/packages/pnpm-lock.yaml
cache-dependency-path: pnpm-lock.yaml

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Build all packages
run: pnpm build
run: pnpm -r build

- name: Run tests
run: pnpm test
run: pnpm -r test

- name: Publish all packages to NPM
run: pnpm -r publish --access public --no-git-checks
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
3 changes: 3 additions & 0 deletions .npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
access=public
registry=https://registry.npmjs.org/

40 changes: 20 additions & 20 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,16 @@

### 📅 CalVer Versioning

Starting with version **26.2.2**, Dynamia Platform adopts **Calendar Versioning (CalVer)** with the format `YY.MM.MINOR`. This means:
Starting with version **26.4.0**, Dynamia Platform adopts **Calendar Versioning (CalVer)** with the format `YY.MM.MINOR`. This means:
- **All modules share the same version**: Core, extensions, starters, themes—everything is released together
- **26.2.2** = First release of February 2026 (Year 26, Month 02, Release 0)
- **26.4.0** = First release of February 2026 (Year 26, Month 02, Release 0)
- **26.2.1** = Second release of February 2026
- **26.3.0** = First release of March 2026
- **Unified releases** ensure compatibility and simplify dependency management
- No more version mismatches between platform components!

**Examples**:
- `26.2.2` → February 2026, first release
- `26.4.0` → February 2026, first release
- `26.2.1` → February 2026, second release (hotfix or minor update)
- `26.12.3` → December 2026, fourth release

Expand Down Expand Up @@ -230,29 +230,29 @@ Enterprise authentication and authorization:
<dependency>
<groupId>tools.dynamia</groupId>
<artifactId>tools.dynamia.app</artifactId>
<version>26.2.2</version>
<version>26.4.0</version>
</dependency>

<dependency>
<groupId>tools.dynamia</groupId>
<artifactId>tools.dynamia.zk</artifactId>
<version>26.2.2</version>
<version>26.4.0</version>
</dependency>

<dependency>
<groupId>tools.dynamia</groupId>
<artifactId>tools.dynamia.domain.jpa</artifactId>
<version>26.2.2</version>
<version>26.4.0</version>
</dependency>
</dependencies>
```

**Gradle** (`build.gradle`)
```groovy
dependencies {
implementation 'tools.dynamia:tools.dynamia.app:26.2.2'
implementation 'tools.dynamia:tools.dynamia.zk:26.2.2'
implementation 'tools.dynamia:tools.dynamia.domain.jpa:26.2.2'
implementation 'tools.dynamia:tools.dynamia.app:26.4.0'
implementation 'tools.dynamia:tools.dynamia.zk:26.4.0'
implementation 'tools.dynamia:tools.dynamia.domain.jpa:26.4.0'
}
```

Expand Down Expand Up @@ -291,65 +291,65 @@ Enterprise authentication and authorization:

### Adding Extensions

To use any of the built-in extensions, simply add their dependencies. **All extensions now share the same version (26.2.2)** thanks to unified CalVer:
To use any of the built-in extensions, simply add their dependencies. **All extensions now share the same version (26.4.0)** thanks to unified CalVer:

```xml
<!-- Multi-tenancy / SaaS -->
<dependency>
<groupId>tools.dynamia.modules</groupId>
<artifactId>tools.dynamia.modules.saas</artifactId>
<version>26.2.2</version>
<version>26.4.0</version>
</dependency>

<!-- Email & SMS -->
<dependency>
<groupId>tools.dynamia.modules</groupId>
<artifactId>tools.dynamia.modules.email</artifactId>
<version>26.2.2</version>
<version>26.4.0</version>
</dependency>

<!-- Entity Files with S3 Support -->
<dependency>
<groupId>tools.dynamia.modules</groupId>
<artifactId>tools.dynamia.modules.entityfiles</artifactId>
<version>26.2.2</version>
<version>26.4.0</version>
</dependency>
<dependency>
<groupId>tools.dynamia.modules</groupId>
<artifactId>tools.dynamia.modules.entityfiles.s3</artifactId>
<version>26.2.2</version>
<version>26.4.0</version>
</dependency>

<!-- Dashboard -->
<dependency>
<groupId>tools.dynamia.modules</groupId>
<artifactId>tools.dynamia.modules.dashboard</artifactId>
<version>26.2.2</version>
<version>26.4.0</version>
</dependency>

<!-- Reporting -->
<dependency>
<groupId>tools.dynamia.reports</groupId>
<artifactId>tools.dynamia.reports.core</artifactId>
<version>26.2.2</version>
<version>26.4.0</version>
</dependency>

<!-- File Importer -->
<dependency>
<groupId>tools.dynamia.modules</groupId>
<artifactId>tools.dynamia.modules.fileimporter</artifactId>
<version>26.2.2</version>
<version>26.4.0</version>
</dependency>

<!-- Security -->
<dependency>
<groupId>tools.dynamia.modules</groupId>
<artifactId>tools.dynamia.modules.security</artifactId>
<version>26.2.2</version>
<version>26.4.0</version>
</dependency>
```

> **💡 Pro Tip**: With CalVer, all Dynamia Platform components use the same version. Just use `26.2.2` for everything!
> **💡 Pro Tip**: With CalVer, all Dynamia Platform components use the same version. Just use `26.4.0` for everything!

> **Note**: All artifacts are available on [Maven Central](https://search.maven.org/search?q=tools.dynamia)

Expand Down Expand Up @@ -472,7 +472,7 @@ Java 11+ and ecosystem update:
- 🚀 **Spring Boot 4** - Next-gen Spring ecosystem
- 🎨 **ZK 10+** - Modern web UI capabilities
- 🔄 **Synchronized Releases** - Core, extensions, starters, and themes share the same version
- 🎯 **Simplified Dependencies** - One version to rule them all (e.g., 26.2.2 for February 2026)
- 🎯 **Simplified Dependencies** - One version to rule them all (e.g., 26.4.0 for February 2026)
- ⚡ **Enhanced Performance** - Optimized for modern JVM and cloud environments
- 🛡️ **Production Hardened** - Battle-tested in enterprise environments

Expand Down
Loading
Loading