SaaS-FrameWork 0.1.1__tar.gz → 0.1.3__tar.gz
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.
- {saas_framework-0.1.1 → saas_framework-0.1.3}/MANIFEST.in +16 -16
- {saas_framework-0.1.1 → saas_framework-0.1.3}/PKG-INFO +21 -13
- {saas_framework-0.1.1 → saas_framework-0.1.3}/README.md +133 -127
- {saas_framework-0.1.1 → saas_framework-0.1.3}/SaaS_FrameWork.egg-info/SOURCES.txt +3 -0
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/__init__.py +125 -119
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/buttons/DEx_BtnFAB.py +37 -37
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/buttons/DEx_BtnFilled.py +20 -20
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/buttons/DEx_BtnGhost.py +23 -20
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/buttons/DEx_BtnIcon.py +18 -18
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/buttons/DEx_BtnPrimary.py +21 -21
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/buttons/DEx_BtnSegmented.py +45 -45
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/buttons/DEx_BtnText.py +22 -19
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/buttons/DEx_BtnTonal.py +20 -20
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/buttons/DEx_MenuBar.py +61 -61
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/buttons/DEx_PopupMenu.py +43 -43
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/cards/DEx_Card.py +23 -23
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/cards/DEx_ContactCard.py +52 -52
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/cards/DEx_MetricCard.py +36 -36
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/data/DEx_DataTable.py +98 -82
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/data/DEx_ExpansionPanel.py +39 -39
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/data/DEx_ExpansionTile.py +29 -29
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/data/DEx_GridView.py +65 -65
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/data/DEx_ListTile.py +27 -27
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/data/DEx_ListView.py +65 -65
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/data/DEx_PipelineColumn.py +74 -74
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/data/DEx_TreeView.py +769 -536
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/feedback/DEx_AlertDialog.py +32 -26
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/feedback/DEx_Banner.py +19 -19
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/feedback/DEx_BottomSheet.py +39 -37
- saas_framework-0.1.3/components/feedback/DEx_Notify.py +17 -0
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/feedback/DEx_ProgressBar.py +34 -34
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/feedback/DEx_ProgressRing.py +52 -52
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/feedback/DEx_Shimmer.py +84 -84
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/feedback/DEx_Tooltip.py +24 -24
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/inputs/DEx_AutoComplete.py +29 -29
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/inputs/DEx_Checkbox.py +27 -27
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/inputs/DEx_Chip.py +33 -33
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/inputs/DEx_DatePicker.py +74 -72
- saas_framework-0.1.3/components/inputs/DEx_Dropdown.py +41 -0
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/inputs/DEx_FilePicker.py +70 -70
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/inputs/DEx_Radio.py +37 -37
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/inputs/DEx_SearchBar.py +37 -37
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/inputs/DEx_SearchField.py +9 -9
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/inputs/DEx_Slider.py +49 -49
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/inputs/DEx_Switch.py +22 -22
- saas_framework-0.1.3/components/inputs/DEx_TagInput.py +175 -0
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/inputs/DEx_TextField.py +45 -29
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/inputs/DEx_TimePicker.py +71 -71
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/layout/DEx_AnimatedSwitcher.py +43 -43
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/layout/DEx_AppBar.py +48 -48
- saas_framework-0.1.3/components/layout/DEx_AppShell.py +137 -0
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/layout/DEx_Draggable.py +67 -67
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/layout/DEx_GestureDetector.py +52 -52
- saas_framework-0.1.3/components/layout/DEx_Header.py +80 -0
- saas_framework-0.1.3/components/layout/DEx_Marquee.py +108 -0
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/layout/DEx_NavItem.py +80 -61
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/layout/DEx_NavigationBar.py +30 -30
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/layout/DEx_NavigationDrawer.py +60 -60
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/layout/DEx_NavigationRail.py +42 -42
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/layout/DEx_ResponsiveRow.py +42 -42
- saas_framework-0.1.3/components/layout/DEx_Sidebar.py +177 -0
- saas_framework-0.1.3/components/layout/DEx_Splitter.py +127 -0
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/layout/DEx_Stack.py +73 -73
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/layout/DEx_Tabs.py +110 -110
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/metadata.py +104 -98
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/primitives/DEx_Avatar.py +87 -87
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/primitives/DEx_Badge.py +18 -18
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/primitives/DEx_Divider.py +13 -13
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/primitives/DEx_Icon.py +46 -46
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/primitives/DEx_Image.py +55 -55
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/primitives/DEx_Markdown.py +21 -21
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/primitives/DEx_SectionEyebrow.py +22 -22
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/primitives/DEx_StatusDot.py +8 -8
- saas_framework-0.1.3/components/project.py +58 -0
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/theme/DEx_ColorThemes.py +469 -375
- saas_framework-0.1.3/components/theme/DEx_Theme.py +196 -0
- saas_framework-0.1.3/components/theme/__init__.py +19 -0
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/versioning.py +103 -103
- {saas_framework-0.1.1 → saas_framework-0.1.3}/pyproject.toml +50 -47
- saas_framework-0.1.1/components/feedback/DEx_Notify.py +0 -15
- saas_framework-0.1.1/components/inputs/DEx_Dropdown.py +0 -25
- saas_framework-0.1.1/components/layout/DEx_AppShell.py +0 -80
- saas_framework-0.1.1/components/layout/DEx_Header.py +0 -57
- saas_framework-0.1.1/components/layout/DEx_Sidebar.py +0 -131
- saas_framework-0.1.1/components/project.py +0 -23
- saas_framework-0.1.1/components/theme/DEx_Theme.py +0 -136
- saas_framework-0.1.1/components/theme/__init__.py +0 -4
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/buttons/__init__.py +0 -0
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/cards/__init__.py +0 -0
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/data/__init__.py +0 -0
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/feedback/__init__.py +0 -0
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/inputs/__init__.py +0 -0
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/layout/__init__.py +0 -0
- {saas_framework-0.1.1 → saas_framework-0.1.3}/components/primitives/__init__.py +0 -0
- {saas_framework-0.1.1 → saas_framework-0.1.3}/setup.cfg +0 -0
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
include README.md
|
|
2
|
-
include pyproject.toml
|
|
3
|
-
recursive-include components *.py
|
|
4
|
-
recursive-exclude * __pycache__ *.py[cod]
|
|
5
|
-
prune .github
|
|
6
|
-
prune .pytest_cache
|
|
7
|
-
prune .pytest_tmp
|
|
8
|
-
prune _base
|
|
9
|
-
prune build
|
|
10
|
-
prune catalog
|
|
11
|
-
prune *.egg-info
|
|
12
|
-
prune dist
|
|
13
|
-
prune
|
|
14
|
-
prune tests
|
|
15
|
-
prune use_cases
|
|
16
|
-
exclude files.zip
|
|
1
|
+
include README.md
|
|
2
|
+
include pyproject.toml
|
|
3
|
+
recursive-include components *.py
|
|
4
|
+
recursive-exclude * __pycache__ *.py[cod]
|
|
5
|
+
prune .github
|
|
6
|
+
prune .pytest_cache
|
|
7
|
+
prune .pytest_tmp
|
|
8
|
+
prune _base
|
|
9
|
+
prune build
|
|
10
|
+
prune catalog
|
|
11
|
+
prune *.egg-info
|
|
12
|
+
prune dist
|
|
13
|
+
prune Diretrizes
|
|
14
|
+
prune tests
|
|
15
|
+
prune use_cases
|
|
16
|
+
exclude files.zip
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: SaaS-FrameWork
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.3
|
|
4
4
|
Summary: SaaS-FrameWork - sistema de componentes reutilizaveis para apps SaaS construido com Python e Flet
|
|
5
5
|
Author-email: Almir Duarte <almir.jg@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -13,6 +13,8 @@ Classifier: Topic :: Software Development :: User Interfaces
|
|
|
13
13
|
Requires-Python: >=3.13
|
|
14
14
|
Description-Content-Type: text/markdown
|
|
15
15
|
Requires-Dist: flet==0.84.0
|
|
16
|
+
Provides-Extra: web
|
|
17
|
+
Requires-Dist: flet-web==0.84.0; extra == "web"
|
|
16
18
|
Provides-Extra: dev
|
|
17
19
|
Requires-Dist: flet==0.84.0; extra == "dev"
|
|
18
20
|
Requires-Dist: pytest<10,>=9.1; extra == "dev"
|
|
@@ -86,7 +88,7 @@ The following folders are repository assets and are intentionally excluded from
|
|
|
86
88
|
|
|
87
89
|
- `catalog/`: local visual catalog and inspection tool.
|
|
88
90
|
- `use_cases/`: executable examples for development and documentation.
|
|
89
|
-
- `
|
|
91
|
+
- `Diretrizes/`: project guidelines — prompts, design/component documentation, management artifacts, and QA evidence.
|
|
90
92
|
- `_base/`: preserved reference material.
|
|
91
93
|
|
|
92
94
|
This separation is enforced in `pyproject.toml` through `tool.setuptools.packages.find`.
|
|
@@ -98,15 +100,15 @@ Adding a public component requires all of the following:
|
|
|
98
100
|
- entry in `components/metadata.py`
|
|
99
101
|
- public export in `components/__init__.py`
|
|
100
102
|
- use case `use_cases/UC_<Name>_01.py`
|
|
101
|
-
- documentation `
|
|
102
|
-
- four structure images in `
|
|
103
|
+
- documentation `Diretrizes/design/components/Documentação/DEx_<Name>.md`
|
|
104
|
+
- four structure images in `Diretrizes/design/components/images/`
|
|
103
105
|
|
|
104
106
|
The repository governance tests fail when this contract is broken.
|
|
105
107
|
|
|
106
108
|
## Folder Structure
|
|
107
109
|
|
|
108
110
|
```text
|
|
109
|
-
|
|
111
|
+
SaaS-Framework/
|
|
110
112
|
|-- _base/ preserved original reference
|
|
111
113
|
|-- components/
|
|
112
114
|
| |-- buttons/
|
|
@@ -126,8 +128,14 @@ DEx-FW_4/
|
|
|
126
128
|
| |-- UC_TreeView_01.py
|
|
127
129
|
| `-- UC_ColorThemes_01.py
|
|
128
130
|
|-- catalog/
|
|
129
|
-
| `--
|
|
130
|
-
|--
|
|
131
|
+
| `-- catalog.py
|
|
132
|
+
|-- Diretrizes/
|
|
133
|
+
| |-- Dados/ data artifacts (DDL, DML, scripts)
|
|
134
|
+
| |-- Prompt/ prompt files
|
|
135
|
+
| |-- design/ design references and component docs/images
|
|
136
|
+
| | `-- components/
|
|
137
|
+
| |-- gestao/ roadmap, policies, and management reports
|
|
138
|
+
| `-- qa/ QA evidence
|
|
131
139
|
|-- AGENTS.md
|
|
132
140
|
|-- pyproject.toml
|
|
133
141
|
`-- README.md
|
|
@@ -149,18 +157,18 @@ Documented local virtual environment:
|
|
|
149
157
|
C:\Python\venv\.venv_313_FW
|
|
150
158
|
```
|
|
151
159
|
|
|
152
|
-
Run the catalog:
|
|
160
|
+
Run the catalog as desktop app:
|
|
153
161
|
|
|
154
162
|
```cmd
|
|
155
163
|
call C:\Python\venv\.venv_313_FW\Scripts\activate.bat
|
|
156
|
-
flet run catalog/
|
|
164
|
+
flet run catalog/catalog.py
|
|
157
165
|
```
|
|
158
166
|
|
|
159
|
-
Run as web catalog:
|
|
167
|
+
Run as web catalog only when browser validation is required:
|
|
160
168
|
|
|
161
169
|
```cmd
|
|
162
170
|
call C:\Python\venv\.venv_313_FW\Scripts\activate.bat
|
|
163
|
-
flet run --web --port 8550 catalog/
|
|
171
|
+
flet run --web --port 8550 catalog/catalog.py
|
|
164
172
|
```
|
|
165
173
|
|
|
166
174
|
Run a use case:
|
|
@@ -219,12 +227,12 @@ The script builds the package, checks the artifacts, and uploads to TestPyPI or
|
|
|
219
227
|
With the documented Flet environment:
|
|
220
228
|
|
|
221
229
|
```cmd
|
|
222
|
-
C:\Python\venv\.venv_313_FW\Scripts\python.exe -c "import catalog.
|
|
230
|
+
C:\Python\venv\.venv_313_FW\Scripts\python.exe -c "import catalog.constants as c; print(c.PROJECT_VERSION)"
|
|
223
231
|
```
|
|
224
232
|
|
|
225
233
|
## Catalog
|
|
226
234
|
|
|
227
|
-
The catalog entry point is `catalog/
|
|
235
|
+
The catalog entry point is `catalog/catalog.py`.
|
|
228
236
|
|
|
229
237
|
It follows the project window structure:
|
|
230
238
|
|
|
@@ -1,89 +1,89 @@
|
|
|
1
|
-
# SaaS-FrameWork
|
|
1
|
+
# SaaS-FrameWork
|
|
2
2
|
|
|
3
3
|
Python 3.13 + Flet design framework for reusable SaaS UI components.
|
|
4
4
|
|
|
5
5
|
The project provides versioned UI components, isolated use cases, and a navigable component catalog.
|
|
6
6
|
|
|
7
|
-
## Versioning
|
|
8
|
-
|
|
9
|
-
Library, component, and release branch versions follow the same `vv.rr.bb` rule.
|
|
10
|
-
|
|
11
|
-
The library version is declared in `pyproject.toml`:
|
|
12
|
-
|
|
13
|
-
```toml
|
|
14
|
-
[project]
|
|
15
|
-
version = "0.1.1"
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
Use cases and the catalog header read this version through `components/project.py`. Do not duplicate the project version manually in UI files.
|
|
19
|
-
|
|
20
|
-
Each public component exposes its own version:
|
|
21
|
-
|
|
22
|
-
```python
|
|
23
|
-
COMPONENT_VERSION = "0.0.1"
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
Release branches must use the same format as the branch name:
|
|
27
|
-
|
|
28
|
-
```text
|
|
29
|
-
0.1.1
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
Do not prefix release branch names with `v`, `release/`, or any other text.
|
|
33
|
-
|
|
34
|
-
The accepted format is:
|
|
35
|
-
|
|
36
|
-
```text
|
|
37
|
-
vv.rr.bb
|
|
38
|
-
0.0.0 through 99.99.99
|
|
7
|
+
## Versioning
|
|
8
|
+
|
|
9
|
+
Library, component, and release branch versions follow the same `vv.rr.bb` rule.
|
|
10
|
+
|
|
11
|
+
The library version is declared in `pyproject.toml`:
|
|
12
|
+
|
|
13
|
+
```toml
|
|
14
|
+
[project]
|
|
15
|
+
version = "0.1.1"
|
|
39
16
|
```
|
|
40
17
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
- `
|
|
67
|
-
- `
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
- `
|
|
75
|
-
-
|
|
76
|
-
-
|
|
77
|
-
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
18
|
+
Use cases and the catalog header read this version through `components/project.py`. Do not duplicate the project version manually in UI files.
|
|
19
|
+
|
|
20
|
+
Each public component exposes its own version:
|
|
21
|
+
|
|
22
|
+
```python
|
|
23
|
+
COMPONENT_VERSION = "0.0.1"
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Release branches must use the same format as the branch name:
|
|
27
|
+
|
|
28
|
+
```text
|
|
29
|
+
0.1.1
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Do not prefix release branch names with `v`, `release/`, or any other text.
|
|
33
|
+
|
|
34
|
+
The accepted format is:
|
|
35
|
+
|
|
36
|
+
```text
|
|
37
|
+
vv.rr.bb
|
|
38
|
+
0.0.0 through 99.99.99
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Segment meaning:
|
|
42
|
+
|
|
43
|
+
- `vv`: version. Increment for large changes that alter visual form, public API, or how the library/component is used.
|
|
44
|
+
- `rr`: release. Increment for small scoped changes, such as a specific behavior or item adjustment.
|
|
45
|
+
- `bb`: bug correction. Increment when a bug is fixed.
|
|
46
|
+
|
|
47
|
+
Every library or component change must increment the relevant version. Each segment is incremented by one numeral. When `bb` reaches `99`, the next `bb` increment increments `rr` and resets `bb` to `0`. When `rr` reaches `99`, the next `rr` increment increments `vv` and resets `rr` to `0`.
|
|
48
|
+
|
|
49
|
+
Version helpers live in `components/versioning.py`:
|
|
50
|
+
|
|
51
|
+
- `validate_version(version)`
|
|
52
|
+
- `validate_branch_version(branch_name)`
|
|
53
|
+
- `bump_version(version, segment="bugfix")`
|
|
54
|
+
- `ComponentMeta`
|
|
55
|
+
|
|
56
|
+
Catalog metadata lives in `components/metadata.py` and is the source of truth for component name, group, version, and description.
|
|
57
|
+
|
|
58
|
+
## Package Boundary
|
|
59
|
+
|
|
60
|
+
The distributable Python library is the `components` package.
|
|
61
|
+
|
|
62
|
+
The following folders are repository assets and are intentionally excluded from the wheel:
|
|
63
|
+
|
|
64
|
+
- `catalog/`: local visual catalog and inspection tool.
|
|
65
|
+
- `use_cases/`: executable examples for development and documentation.
|
|
66
|
+
- `Diretrizes/`: project guidelines — prompts, design/component documentation, management artifacts, and QA evidence.
|
|
67
|
+
- `_base/`: preserved reference material.
|
|
68
|
+
|
|
69
|
+
This separation is enforced in `pyproject.toml` through `tool.setuptools.packages.find`.
|
|
70
|
+
|
|
71
|
+
Adding a public component requires all of the following:
|
|
72
|
+
|
|
73
|
+
- source file under `components/**/DEx_<Name>.py`
|
|
74
|
+
- `COMPONENT_VERSION` in the source file
|
|
75
|
+
- entry in `components/metadata.py`
|
|
76
|
+
- public export in `components/__init__.py`
|
|
77
|
+
- use case `use_cases/UC_<Name>_01.py`
|
|
78
|
+
- documentation `Diretrizes/design/components/Documentação/DEx_<Name>.md`
|
|
79
|
+
- four structure images in `Diretrizes/design/components/images/`
|
|
80
|
+
|
|
81
|
+
The repository governance tests fail when this contract is broken.
|
|
82
82
|
|
|
83
83
|
## Folder Structure
|
|
84
84
|
|
|
85
85
|
```text
|
|
86
|
-
|
|
86
|
+
SaaS-Framework/
|
|
87
87
|
|-- _base/ preserved original reference
|
|
88
88
|
|-- components/
|
|
89
89
|
| |-- buttons/
|
|
@@ -103,8 +103,14 @@ DEx-FW_4/
|
|
|
103
103
|
| |-- UC_TreeView_01.py
|
|
104
104
|
| `-- UC_ColorThemes_01.py
|
|
105
105
|
|-- catalog/
|
|
106
|
-
| `--
|
|
107
|
-
|--
|
|
106
|
+
| `-- catalog.py
|
|
107
|
+
|-- Diretrizes/
|
|
108
|
+
| |-- Dados/ data artifacts (DDL, DML, scripts)
|
|
109
|
+
| |-- Prompt/ prompt files
|
|
110
|
+
| |-- design/ design references and component docs/images
|
|
111
|
+
| | `-- components/
|
|
112
|
+
| |-- gestao/ roadmap, policies, and management reports
|
|
113
|
+
| `-- qa/ QA evidence
|
|
108
114
|
|-- AGENTS.md
|
|
109
115
|
|-- pyproject.toml
|
|
110
116
|
`-- README.md
|
|
@@ -126,18 +132,18 @@ Documented local virtual environment:
|
|
|
126
132
|
C:\Python\venv\.venv_313_FW
|
|
127
133
|
```
|
|
128
134
|
|
|
129
|
-
Run the catalog:
|
|
135
|
+
Run the catalog as desktop app:
|
|
130
136
|
|
|
131
137
|
```cmd
|
|
132
138
|
call C:\Python\venv\.venv_313_FW\Scripts\activate.bat
|
|
133
|
-
flet run catalog/
|
|
139
|
+
flet run catalog/catalog.py
|
|
134
140
|
```
|
|
135
141
|
|
|
136
|
-
Run as web catalog:
|
|
142
|
+
Run as web catalog only when browser validation is required:
|
|
137
143
|
|
|
138
144
|
```cmd
|
|
139
145
|
call C:\Python\venv\.venv_313_FW\Scripts\activate.bat
|
|
140
|
-
flet run --web --port 8550 catalog/
|
|
146
|
+
flet run --web --port 8550 catalog/catalog.py
|
|
141
147
|
```
|
|
142
148
|
|
|
143
149
|
Run a use case:
|
|
@@ -147,61 +153,61 @@ call C:\Python\venv\.venv_313_FW\Scripts\activate.bat
|
|
|
147
153
|
flet run use_cases/UC_MetricCard_01.py
|
|
148
154
|
```
|
|
149
155
|
|
|
150
|
-
## Validation
|
|
151
|
-
|
|
152
|
-
Quick syntax validation:
|
|
156
|
+
## Validation
|
|
157
|
+
|
|
158
|
+
Quick syntax validation:
|
|
159
|
+
|
|
160
|
+
```cmd
|
|
161
|
+
python -m compileall components use_cases catalog
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Run the automated test suite:
|
|
165
|
+
|
|
166
|
+
```cmd
|
|
167
|
+
C:\Python\venv\.venv_313_FW\Scripts\python.exe -m pytest -q
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Run optional visual screenshots:
|
|
171
|
+
|
|
172
|
+
```powershell
|
|
173
|
+
C:\Python\venv\.venv_313_FW\Scripts\python.exe -m playwright install chromium
|
|
174
|
+
$env:DEX_RUN_VISUAL_TESTS="1"
|
|
175
|
+
C:\Python\venv\.venv_313_FW\Scripts\python.exe -m pytest tests/test_visual_screenshots.py -q
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Build and validate package metadata:
|
|
153
179
|
|
|
154
180
|
```cmd
|
|
155
|
-
python -m
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
C:\Python\venv\.venv_313_FW\Scripts\python.exe -m build
|
|
176
|
-
C:\Python\venv\.venv_313_FW\Scripts\python.exe -m twine check dist/*
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
Publish the package:
|
|
180
|
-
|
|
181
|
-
```powershell
|
|
182
|
-
.\tools\publish_package.ps1 --test
|
|
183
|
-
.\tools\publish_package.ps1 --prod
|
|
184
|
-
.\tools\publish_package.ps1 --both
|
|
185
|
-
.\tools\publish_package.ps1
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
Without flags, the script asks:
|
|
189
|
-
|
|
190
|
-
1. teste
|
|
191
|
-
2. prod
|
|
192
|
-
3. ambos
|
|
193
|
-
|
|
194
|
-
The script builds the package, checks the artifacts, and uploads to TestPyPI or PyPI based on the chosen destination.
|
|
181
|
+
C:\Python\venv\.venv_313_FW\Scripts\python.exe -m build
|
|
182
|
+
C:\Python\venv\.venv_313_FW\Scripts\python.exe -m twine check dist/*
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
Publish the package:
|
|
186
|
+
|
|
187
|
+
```powershell
|
|
188
|
+
.\tools\publish_package.ps1 --test
|
|
189
|
+
.\tools\publish_package.ps1 --prod
|
|
190
|
+
.\tools\publish_package.ps1 --both
|
|
191
|
+
.\tools\publish_package.ps1
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Without flags, the script asks:
|
|
195
|
+
|
|
196
|
+
1. teste
|
|
197
|
+
2. prod
|
|
198
|
+
3. ambos
|
|
199
|
+
|
|
200
|
+
The script builds the package, checks the artifacts, and uploads to TestPyPI or PyPI based on the chosen destination.
|
|
195
201
|
|
|
196
202
|
With the documented Flet environment:
|
|
197
203
|
|
|
198
204
|
```cmd
|
|
199
|
-
C:\Python\venv\.venv_313_FW\Scripts\python.exe -c "import catalog.
|
|
205
|
+
C:\Python\venv\.venv_313_FW\Scripts\python.exe -c "import catalog.constants as c; print(c.PROJECT_VERSION)"
|
|
200
206
|
```
|
|
201
207
|
|
|
202
208
|
## Catalog
|
|
203
209
|
|
|
204
|
-
The catalog entry point is `catalog/
|
|
210
|
+
The catalog entry point is `catalog/catalog.py`.
|
|
205
211
|
|
|
206
212
|
It follows the project window structure:
|
|
207
213
|
|
|
@@ -418,7 +424,7 @@ Controles de feedback do usuário para estados transitórios.
|
|
|
418
424
|
## Adding a Component
|
|
419
425
|
|
|
420
426
|
1. Create the component under the correct `components/<group>/` folder.
|
|
421
|
-
2. Add `COMPONENT_VERSION = "0.0.1"` for a new component.
|
|
427
|
+
2. Add `COMPONENT_VERSION = "0.0.1"` for a new component.
|
|
422
428
|
3. Add a docstring to the public component factory or class.
|
|
423
429
|
4. Add metadata to `components/metadata.py`.
|
|
424
430
|
5. Create an isolated use case in `use_cases/`.
|
|
@@ -49,6 +49,7 @@ components/inputs/DEx_SearchBar.py
|
|
|
49
49
|
components/inputs/DEx_SearchField.py
|
|
50
50
|
components/inputs/DEx_Slider.py
|
|
51
51
|
components/inputs/DEx_Switch.py
|
|
52
|
+
components/inputs/DEx_TagInput.py
|
|
52
53
|
components/inputs/DEx_TextField.py
|
|
53
54
|
components/inputs/DEx_TimePicker.py
|
|
54
55
|
components/inputs/__init__.py
|
|
@@ -58,12 +59,14 @@ components/layout/DEx_AppShell.py
|
|
|
58
59
|
components/layout/DEx_Draggable.py
|
|
59
60
|
components/layout/DEx_GestureDetector.py
|
|
60
61
|
components/layout/DEx_Header.py
|
|
62
|
+
components/layout/DEx_Marquee.py
|
|
61
63
|
components/layout/DEx_NavItem.py
|
|
62
64
|
components/layout/DEx_NavigationBar.py
|
|
63
65
|
components/layout/DEx_NavigationDrawer.py
|
|
64
66
|
components/layout/DEx_NavigationRail.py
|
|
65
67
|
components/layout/DEx_ResponsiveRow.py
|
|
66
68
|
components/layout/DEx_Sidebar.py
|
|
69
|
+
components/layout/DEx_Splitter.py
|
|
67
70
|
components/layout/DEx_Stack.py
|
|
68
71
|
components/layout/DEx_Tabs.py
|
|
69
72
|
components/layout/__init__.py
|