SaaS-FrameWork 0.1.1__tar.gz → 0.1.2__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.2}/MANIFEST.in +16 -16
- {saas_framework-0.1.1 → saas_framework-0.1.2}/PKG-INFO +4 -4
- {saas_framework-0.1.1 → saas_framework-0.1.2}/README.md +121 -121
- {saas_framework-0.1.1 → saas_framework-0.1.2}/SaaS_FrameWork.egg-info/SOURCES.txt +3 -0
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/__init__.py +125 -119
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/buttons/DEx_BtnFAB.py +37 -37
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/buttons/DEx_BtnFilled.py +20 -20
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/buttons/DEx_BtnGhost.py +23 -20
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/buttons/DEx_BtnIcon.py +18 -18
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/buttons/DEx_BtnPrimary.py +21 -21
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/buttons/DEx_BtnSegmented.py +45 -45
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/buttons/DEx_BtnText.py +22 -19
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/buttons/DEx_BtnTonal.py +20 -20
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/buttons/DEx_MenuBar.py +61 -61
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/buttons/DEx_PopupMenu.py +43 -43
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/cards/DEx_Card.py +23 -23
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/cards/DEx_ContactCard.py +52 -52
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/cards/DEx_MetricCard.py +36 -36
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/data/DEx_DataTable.py +82 -82
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/data/DEx_ExpansionPanel.py +39 -39
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/data/DEx_ExpansionTile.py +29 -29
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/data/DEx_GridView.py +65 -65
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/data/DEx_ListTile.py +27 -27
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/data/DEx_ListView.py +65 -65
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/data/DEx_PipelineColumn.py +74 -74
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/data/DEx_TreeView.py +769 -536
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/feedback/DEx_AlertDialog.py +26 -26
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/feedback/DEx_Banner.py +19 -19
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/feedback/DEx_BottomSheet.py +39 -37
- saas_framework-0.1.2/components/feedback/DEx_Notify.py +17 -0
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/feedback/DEx_ProgressBar.py +34 -34
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/feedback/DEx_ProgressRing.py +52 -52
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/feedback/DEx_Shimmer.py +84 -84
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/feedback/DEx_Tooltip.py +24 -24
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/inputs/DEx_AutoComplete.py +29 -29
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/inputs/DEx_Checkbox.py +27 -27
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/inputs/DEx_Chip.py +33 -33
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/inputs/DEx_DatePicker.py +74 -72
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/inputs/DEx_Dropdown.py +25 -25
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/inputs/DEx_FilePicker.py +70 -70
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/inputs/DEx_Radio.py +37 -37
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/inputs/DEx_SearchBar.py +37 -37
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/inputs/DEx_SearchField.py +9 -9
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/inputs/DEx_Slider.py +49 -49
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/inputs/DEx_Switch.py +22 -22
- saas_framework-0.1.2/components/inputs/DEx_TagInput.py +175 -0
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/inputs/DEx_TextField.py +29 -29
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/inputs/DEx_TimePicker.py +71 -71
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/layout/DEx_AnimatedSwitcher.py +43 -43
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/layout/DEx_AppBar.py +48 -48
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/layout/DEx_AppShell.py +80 -80
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/layout/DEx_Draggable.py +67 -67
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/layout/DEx_GestureDetector.py +52 -52
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/layout/DEx_Header.py +57 -57
- saas_framework-0.1.2/components/layout/DEx_Marquee.py +108 -0
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/layout/DEx_NavItem.py +80 -61
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/layout/DEx_NavigationBar.py +30 -30
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/layout/DEx_NavigationDrawer.py +60 -60
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/layout/DEx_NavigationRail.py +42 -42
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/layout/DEx_ResponsiveRow.py +42 -42
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/layout/DEx_Sidebar.py +131 -131
- saas_framework-0.1.2/components/layout/DEx_Splitter.py +127 -0
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/layout/DEx_Stack.py +73 -73
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/layout/DEx_Tabs.py +110 -110
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/metadata.py +104 -98
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/primitives/DEx_Avatar.py +87 -87
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/primitives/DEx_Badge.py +18 -18
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/primitives/DEx_Divider.py +13 -13
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/primitives/DEx_Icon.py +46 -46
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/primitives/DEx_Image.py +55 -55
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/primitives/DEx_Markdown.py +21 -21
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/primitives/DEx_SectionEyebrow.py +22 -22
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/primitives/DEx_StatusDot.py +8 -8
- saas_framework-0.1.2/components/project.py +54 -0
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/theme/DEx_ColorThemes.py +469 -375
- saas_framework-0.1.2/components/theme/DEx_Theme.py +196 -0
- saas_framework-0.1.2/components/theme/__init__.py +19 -0
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/versioning.py +103 -103
- {saas_framework-0.1.1 → saas_framework-0.1.2}/pyproject.toml +47 -47
- saas_framework-0.1.1/components/feedback/DEx_Notify.py +0 -15
- 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.2}/components/buttons/__init__.py +0 -0
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/cards/__init__.py +0 -0
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/data/__init__.py +0 -0
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/feedback/__init__.py +0 -0
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/inputs/__init__.py +0 -0
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/layout/__init__.py +0 -0
- {saas_framework-0.1.1 → saas_framework-0.1.2}/components/primitives/__init__.py +0 -0
- {saas_framework-0.1.1 → saas_framework-0.1.2}/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 docs
|
|
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 docs
|
|
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.2
|
|
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
|
|
@@ -106,7 +106,7 @@ The repository governance tests fail when this contract is broken.
|
|
|
106
106
|
## Folder Structure
|
|
107
107
|
|
|
108
108
|
```text
|
|
109
|
-
|
|
109
|
+
SaaS-Framework/
|
|
110
110
|
|-- _base/ preserved original reference
|
|
111
111
|
|-- components/
|
|
112
112
|
| |-- buttons/
|
|
@@ -149,14 +149,14 @@ Documented local virtual environment:
|
|
|
149
149
|
C:\Python\venv\.venv_313_FW
|
|
150
150
|
```
|
|
151
151
|
|
|
152
|
-
Run the catalog:
|
|
152
|
+
Run the catalog as desktop app:
|
|
153
153
|
|
|
154
154
|
```cmd
|
|
155
155
|
call C:\Python\venv\.venv_313_FW\Scripts\activate.bat
|
|
156
156
|
flet run catalog/main.py
|
|
157
157
|
```
|
|
158
158
|
|
|
159
|
-
Run as web catalog:
|
|
159
|
+
Run as web catalog only when browser validation is required:
|
|
160
160
|
|
|
161
161
|
```cmd
|
|
162
162
|
call C:\Python\venv\.venv_313_FW\Scripts\activate.bat
|
|
@@ -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
|
+
- `docs/`: component documentation and generated structure images.
|
|
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 `docs/components/Documentação/DEx_<Name>.md`
|
|
79
|
+
- four structure images in `docs/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/
|
|
@@ -126,14 +126,14 @@ Documented local virtual environment:
|
|
|
126
126
|
C:\Python\venv\.venv_313_FW
|
|
127
127
|
```
|
|
128
128
|
|
|
129
|
-
Run the catalog:
|
|
129
|
+
Run the catalog as desktop app:
|
|
130
130
|
|
|
131
131
|
```cmd
|
|
132
132
|
call C:\Python\venv\.venv_313_FW\Scripts\activate.bat
|
|
133
133
|
flet run catalog/main.py
|
|
134
134
|
```
|
|
135
135
|
|
|
136
|
-
Run as web catalog:
|
|
136
|
+
Run as web catalog only when browser validation is required:
|
|
137
137
|
|
|
138
138
|
```cmd
|
|
139
139
|
call C:\Python\venv\.venv_313_FW\Scripts\activate.bat
|
|
@@ -147,51 +147,51 @@ call C:\Python\venv\.venv_313_FW\Scripts\activate.bat
|
|
|
147
147
|
flet run use_cases/UC_MetricCard_01.py
|
|
148
148
|
```
|
|
149
149
|
|
|
150
|
-
## Validation
|
|
151
|
-
|
|
152
|
-
Quick syntax validation:
|
|
150
|
+
## Validation
|
|
151
|
+
|
|
152
|
+
Quick syntax validation:
|
|
153
|
+
|
|
154
|
+
```cmd
|
|
155
|
+
python -m compileall components use_cases catalog
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Run the automated test suite:
|
|
159
|
+
|
|
160
|
+
```cmd
|
|
161
|
+
C:\Python\venv\.venv_313_FW\Scripts\python.exe -m pytest -q
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Run optional visual screenshots:
|
|
165
|
+
|
|
166
|
+
```powershell
|
|
167
|
+
C:\Python\venv\.venv_313_FW\Scripts\python.exe -m playwright install chromium
|
|
168
|
+
$env:DEX_RUN_VISUAL_TESTS="1"
|
|
169
|
+
C:\Python\venv\.venv_313_FW\Scripts\python.exe -m pytest tests/test_visual_screenshots.py -q
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Build and validate package metadata:
|
|
153
173
|
|
|
154
174
|
```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.
|
|
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.
|
|
195
195
|
|
|
196
196
|
With the documented Flet environment:
|
|
197
197
|
|
|
@@ -418,7 +418,7 @@ Controles de feedback do usuário para estados transitórios.
|
|
|
418
418
|
## Adding a Component
|
|
419
419
|
|
|
420
420
|
1. Create the component under the correct `components/<group>/` folder.
|
|
421
|
-
2. Add `COMPONENT_VERSION = "0.0.1"` for a new component.
|
|
421
|
+
2. Add `COMPONENT_VERSION = "0.0.1"` for a new component.
|
|
422
422
|
3. Add a docstring to the public component factory or class.
|
|
423
423
|
4. Add metadata to `components/metadata.py`.
|
|
424
424
|
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
|
|
@@ -1,119 +1,125 @@
|
|
|
1
|
-
"""FrameWork — public API root."""
|
|
2
|
-
|
|
3
|
-
from components.theme.DEx_Theme import Colors, Spacing, build_theme, build_theme_from_color_theme
|
|
4
|
-
from components.theme.DEx_ColorThemes import COLOR_THEMES, DEx_ColorTheme
|
|
5
|
-
|
|
6
|
-
from components.primitives.DEx_Badge import DEx_Badge
|
|
7
|
-
from components.primitives.DEx_Divider import DEx_Divider
|
|
8
|
-
from components.primitives.DEx_SectionEyebrow import DEx_SectionEyebrow
|
|
9
|
-
from components.primitives.DEx_StatusDot import DEx_StatusDot
|
|
10
|
-
from components.primitives.DEx_Avatar import DEx_Avatar, DEx_AvatarGroup
|
|
11
|
-
from components.primitives.DEx_Image import DEx_Image, DEx_ImagePlaceholder
|
|
12
|
-
from components.primitives.DEx_Icon import DEx_Icon, DEx_IconBadge
|
|
13
|
-
from components.primitives.DEx_Markdown import DEx_Markdown
|
|
14
|
-
|
|
15
|
-
from components.cards.DEx_Card import DEx_Card
|
|
16
|
-
from components.cards.DEx_MetricCard import DEx_MetricCard
|
|
17
|
-
from components.cards.DEx_ContactCard import DEx_ContactCard
|
|
18
|
-
|
|
19
|
-
from components.buttons.DEx_BtnPrimary import DEx_BtnPrimary
|
|
20
|
-
from components.buttons.DEx_BtnGhost import DEx_BtnGhost
|
|
21
|
-
from components.buttons.DEx_BtnIcon import DEx_BtnIcon
|
|
22
|
-
from components.buttons.DEx_BtnFilled import DEx_BtnFilled
|
|
23
|
-
from components.buttons.DEx_BtnTonal import DEx_BtnTonal
|
|
24
|
-
from components.buttons.DEx_BtnText import DEx_BtnText
|
|
25
|
-
from components.buttons.DEx_BtnFAB import DEx_BtnFAB
|
|
26
|
-
from components.buttons.DEx_BtnSegmented import DEx_BtnSegmented
|
|
27
|
-
from components.buttons.DEx_MenuBar import DEx_MenuBar
|
|
28
|
-
from components.buttons.DEx_PopupMenu import DEx_PopupMenu
|
|
29
|
-
|
|
30
|
-
from components.inputs.DEx_TextField import DEx_TextField
|
|
31
|
-
from components.inputs.DEx_SearchField import DEx_SearchField
|
|
32
|
-
from components.inputs.DEx_Dropdown import DEx_Dropdown
|
|
33
|
-
from components.inputs.DEx_Checkbox import DEx_Checkbox
|
|
34
|
-
from components.inputs.DEx_Switch import DEx_Switch
|
|
35
|
-
from components.inputs.DEx_Radio import DEx_Radio
|
|
36
|
-
from components.inputs.DEx_Slider import DEx_Slider
|
|
37
|
-
from components.inputs.DEx_Chip import DEx_Chip
|
|
38
|
-
from components.inputs.DEx_AutoComplete import DEx_AutoComplete
|
|
39
|
-
from components.inputs.DEx_SearchBar import DEx_SearchBar
|
|
40
|
-
from components.inputs.DEx_DatePicker import DEx_DateField, DEx_DateRangeField
|
|
41
|
-
from components.inputs.DEx_TimePicker import DEx_TimeField, DEx_TimeRangeField
|
|
42
|
-
from components.inputs.DEx_FilePicker import DEx_FilePicker, DEx_FilePickerButton
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
from components.data.
|
|
46
|
-
from components.data.
|
|
47
|
-
from components.data.
|
|
48
|
-
from components.data.
|
|
49
|
-
from components.data.
|
|
50
|
-
from components.data.
|
|
51
|
-
from components.data.
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
from components.layout.
|
|
55
|
-
from components.layout.
|
|
56
|
-
from components.layout.
|
|
57
|
-
from components.layout.
|
|
58
|
-
from components.layout.
|
|
59
|
-
from components.layout.
|
|
60
|
-
from components.layout.
|
|
61
|
-
from components.layout.
|
|
62
|
-
from components.layout.
|
|
63
|
-
from components.layout.
|
|
64
|
-
from components.layout.
|
|
65
|
-
from components.layout.
|
|
66
|
-
from components.layout.
|
|
67
|
-
|
|
68
|
-
from components.
|
|
69
|
-
from components.
|
|
70
|
-
|
|
71
|
-
from components.feedback.
|
|
72
|
-
from components.feedback.
|
|
73
|
-
from components.feedback.
|
|
74
|
-
from components.feedback.
|
|
75
|
-
from components.feedback.
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
"
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
"
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
"
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
"
|
|
94
|
-
"
|
|
95
|
-
|
|
96
|
-
"
|
|
97
|
-
"
|
|
98
|
-
"
|
|
99
|
-
|
|
100
|
-
"
|
|
101
|
-
"
|
|
102
|
-
"
|
|
103
|
-
#
|
|
104
|
-
"
|
|
105
|
-
"
|
|
106
|
-
"
|
|
107
|
-
|
|
108
|
-
"
|
|
109
|
-
"
|
|
110
|
-
"
|
|
111
|
-
"
|
|
112
|
-
"
|
|
113
|
-
|
|
114
|
-
"
|
|
115
|
-
"
|
|
116
|
-
"
|
|
117
|
-
|
|
118
|
-
"
|
|
119
|
-
|
|
1
|
+
"""FrameWork — public API root."""
|
|
2
|
+
|
|
3
|
+
from components.theme.DEx_Theme import Colors, Spacing, build_theme, build_theme_from_color_theme
|
|
4
|
+
from components.theme.DEx_ColorThemes import COLOR_THEMES, DEx_ColorTheme
|
|
5
|
+
|
|
6
|
+
from components.primitives.DEx_Badge import DEx_Badge
|
|
7
|
+
from components.primitives.DEx_Divider import DEx_Divider
|
|
8
|
+
from components.primitives.DEx_SectionEyebrow import DEx_SectionEyebrow
|
|
9
|
+
from components.primitives.DEx_StatusDot import DEx_StatusDot
|
|
10
|
+
from components.primitives.DEx_Avatar import DEx_Avatar, DEx_AvatarGroup
|
|
11
|
+
from components.primitives.DEx_Image import DEx_Image, DEx_ImagePlaceholder
|
|
12
|
+
from components.primitives.DEx_Icon import DEx_Icon, DEx_IconBadge
|
|
13
|
+
from components.primitives.DEx_Markdown import DEx_Markdown
|
|
14
|
+
|
|
15
|
+
from components.cards.DEx_Card import DEx_Card
|
|
16
|
+
from components.cards.DEx_MetricCard import DEx_MetricCard
|
|
17
|
+
from components.cards.DEx_ContactCard import DEx_ContactCard
|
|
18
|
+
|
|
19
|
+
from components.buttons.DEx_BtnPrimary import DEx_BtnPrimary
|
|
20
|
+
from components.buttons.DEx_BtnGhost import DEx_BtnGhost
|
|
21
|
+
from components.buttons.DEx_BtnIcon import DEx_BtnIcon
|
|
22
|
+
from components.buttons.DEx_BtnFilled import DEx_BtnFilled
|
|
23
|
+
from components.buttons.DEx_BtnTonal import DEx_BtnTonal
|
|
24
|
+
from components.buttons.DEx_BtnText import DEx_BtnText
|
|
25
|
+
from components.buttons.DEx_BtnFAB import DEx_BtnFAB
|
|
26
|
+
from components.buttons.DEx_BtnSegmented import DEx_BtnSegmented
|
|
27
|
+
from components.buttons.DEx_MenuBar import DEx_MenuBar
|
|
28
|
+
from components.buttons.DEx_PopupMenu import DEx_PopupMenu
|
|
29
|
+
|
|
30
|
+
from components.inputs.DEx_TextField import DEx_TextField
|
|
31
|
+
from components.inputs.DEx_SearchField import DEx_SearchField
|
|
32
|
+
from components.inputs.DEx_Dropdown import DEx_Dropdown
|
|
33
|
+
from components.inputs.DEx_Checkbox import DEx_Checkbox
|
|
34
|
+
from components.inputs.DEx_Switch import DEx_Switch
|
|
35
|
+
from components.inputs.DEx_Radio import DEx_Radio
|
|
36
|
+
from components.inputs.DEx_Slider import DEx_Slider
|
|
37
|
+
from components.inputs.DEx_Chip import DEx_Chip
|
|
38
|
+
from components.inputs.DEx_AutoComplete import DEx_AutoComplete
|
|
39
|
+
from components.inputs.DEx_SearchBar import DEx_SearchBar
|
|
40
|
+
from components.inputs.DEx_DatePicker import DEx_DateField, DEx_DateRangeField
|
|
41
|
+
from components.inputs.DEx_TimePicker import DEx_TimeField, DEx_TimeRangeField
|
|
42
|
+
from components.inputs.DEx_FilePicker import DEx_FilePicker, DEx_FilePickerButton
|
|
43
|
+
from components.inputs.DEx_TagInput import DEx_TagInput, DEx_TagChips
|
|
44
|
+
|
|
45
|
+
from components.data.DEx_DataTable import DEx_DataTable
|
|
46
|
+
from components.data.DEx_PipelineColumn import DEx_PipelineColumn
|
|
47
|
+
from components.data.DEx_TreeView import DEx_TreeView
|
|
48
|
+
from components.data.DEx_ListTile import DEx_ListTile
|
|
49
|
+
from components.data.DEx_ExpansionTile import DEx_ExpansionTile
|
|
50
|
+
from components.data.DEx_ExpansionPanel import DEx_ExpansionPanel
|
|
51
|
+
from components.data.DEx_ListView import DEx_ListView
|
|
52
|
+
from components.data.DEx_GridView import DEx_GridView
|
|
53
|
+
|
|
54
|
+
from components.layout.DEx_AppShell import DEx_AppShell
|
|
55
|
+
from components.layout.DEx_Sidebar import DEx_Sidebar
|
|
56
|
+
from components.layout.DEx_Header import DEx_Header
|
|
57
|
+
from components.layout.DEx_NavItem import DEx_NavItem
|
|
58
|
+
from components.layout.DEx_Tabs import DEx_Tabs, DEx_Tab
|
|
59
|
+
from components.layout.DEx_NavigationBar import DEx_NavigationBar
|
|
60
|
+
from components.layout.DEx_NavigationRail import DEx_NavigationRail
|
|
61
|
+
from components.layout.DEx_NavigationDrawer import DEx_NavigationDrawer
|
|
62
|
+
from components.layout.DEx_AppBar import DEx_AppBar, DEx_BottomAppBar
|
|
63
|
+
from components.layout.DEx_Stack import DEx_Stack, DEx_StackOverlay, DEx_StackBadge
|
|
64
|
+
from components.layout.DEx_ResponsiveRow import DEx_ResponsiveRow, DEx_Col
|
|
65
|
+
from components.layout.DEx_GestureDetector import DEx_GestureDetector, DEx_Hoverable
|
|
66
|
+
from components.layout.DEx_Draggable import DEx_Draggable, DEx_DragTarget
|
|
67
|
+
from components.layout.DEx_AnimatedSwitcher import DEx_AnimatedSwitcher, DEx_AnimatedContainer
|
|
68
|
+
from components.layout.DEx_Splitter import DEx_Splitter
|
|
69
|
+
from components.layout.DEx_Marquee import DEx_Marquee
|
|
70
|
+
|
|
71
|
+
from components.feedback.DEx_Notify import DEx_Notify
|
|
72
|
+
from components.feedback.DEx_AlertDialog import DEx_AlertDialog
|
|
73
|
+
from components.feedback.DEx_BottomSheet import DEx_BottomSheet
|
|
74
|
+
from components.feedback.DEx_Banner import DEx_Banner
|
|
75
|
+
from components.feedback.DEx_Tooltip import DEx_Tooltip
|
|
76
|
+
from components.feedback.DEx_ProgressBar import DEx_ProgressBar
|
|
77
|
+
from components.feedback.DEx_ProgressRing import DEx_ProgressRing
|
|
78
|
+
from components.feedback.DEx_Shimmer import DEx_ShimmerCard, DEx_ShimmerListItem, DEx_ShimmerList
|
|
79
|
+
|
|
80
|
+
__version__ = "0.1.1"
|
|
81
|
+
|
|
82
|
+
__all__ = [
|
|
83
|
+
# theme
|
|
84
|
+
"Colors", "Spacing", "build_theme", "build_theme_from_color_theme", "COLOR_THEMES", "DEx_ColorTheme",
|
|
85
|
+
# primitives
|
|
86
|
+
"DEx_Badge", "DEx_Divider", "DEx_SectionEyebrow", "DEx_StatusDot",
|
|
87
|
+
"DEx_Avatar", "DEx_AvatarGroup", "DEx_Image", "DEx_ImagePlaceholder",
|
|
88
|
+
"DEx_Icon", "DEx_IconBadge", "DEx_Markdown",
|
|
89
|
+
# cards
|
|
90
|
+
"DEx_Card", "DEx_MetricCard", "DEx_ContactCard",
|
|
91
|
+
# buttons
|
|
92
|
+
"DEx_BtnPrimary", "DEx_BtnGhost", "DEx_BtnIcon", "DEx_BtnFilled",
|
|
93
|
+
"DEx_BtnTonal", "DEx_BtnText", "DEx_BtnFAB", "DEx_BtnSegmented",
|
|
94
|
+
"DEx_MenuBar", "DEx_PopupMenu",
|
|
95
|
+
# inputs
|
|
96
|
+
"DEx_TextField", "DEx_SearchField", "DEx_Dropdown", "DEx_Checkbox",
|
|
97
|
+
"DEx_Switch", "DEx_Radio", "DEx_Slider", "DEx_Chip",
|
|
98
|
+
"DEx_AutoComplete", "DEx_SearchBar",
|
|
99
|
+
"DEx_DateField", "DEx_DateRangeField",
|
|
100
|
+
"DEx_TimeField", "DEx_TimeRangeField",
|
|
101
|
+
"DEx_FilePicker", "DEx_FilePickerButton",
|
|
102
|
+
"DEx_TagInput", "DEx_TagChips",
|
|
103
|
+
# data
|
|
104
|
+
"DEx_DataTable", "DEx_PipelineColumn", "DEx_TreeView",
|
|
105
|
+
"DEx_ListTile", "DEx_ExpansionTile", "DEx_ExpansionPanel",
|
|
106
|
+
"DEx_ListView", "DEx_GridView",
|
|
107
|
+
# layout
|
|
108
|
+
"DEx_AppShell", "DEx_Sidebar", "DEx_Header", "DEx_NavItem",
|
|
109
|
+
"DEx_Tabs", "DEx_Tab",
|
|
110
|
+
"DEx_NavigationBar", "DEx_NavigationRail", "DEx_NavigationDrawer", "DEx_AppBar",
|
|
111
|
+
"DEx_BottomAppBar",
|
|
112
|
+
"DEx_Stack", "DEx_StackOverlay", "DEx_StackBadge",
|
|
113
|
+
"DEx_ResponsiveRow", "DEx_Col",
|
|
114
|
+
"DEx_GestureDetector", "DEx_Hoverable",
|
|
115
|
+
"DEx_Draggable", "DEx_DragTarget",
|
|
116
|
+
"DEx_AnimatedSwitcher", "DEx_AnimatedContainer",
|
|
117
|
+
"DEx_Splitter",
|
|
118
|
+
"DEx_Marquee",
|
|
119
|
+
# feedback
|
|
120
|
+
"DEx_Notify", "DEx_AlertDialog", "DEx_BottomSheet", "DEx_Banner",
|
|
121
|
+
"DEx_Tooltip", "DEx_ProgressBar", "DEx_ProgressRing",
|
|
122
|
+
"DEx_ShimmerCard", "DEx_ShimmerListItem", "DEx_ShimmerList",
|
|
123
|
+
# meta
|
|
124
|
+
"__version__",
|
|
125
|
+
]
|