eidosui 0.5.0__py3-none-any.whl → 0.7.0__py3-none-any.whl
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.
- eidos/__init__.py +2 -2
- eidos/components/__init__.py +2 -1
- eidos/components/tabs.py +140 -0
- eidos/css/styles.css +107 -0
- eidos/styles.py +27 -4
- eidos/tags.py +37 -220
- {eidosui-0.5.0.dist-info → eidosui-0.7.0.dist-info}/METADATA +1 -1
- {eidosui-0.5.0.dist-info → eidosui-0.7.0.dist-info}/RECORD +10 -9
- {eidosui-0.5.0.dist-info → eidosui-0.7.0.dist-info}/WHEEL +0 -0
- {eidosui-0.5.0.dist-info → eidosui-0.7.0.dist-info}/licenses/LICENSE +0 -0
eidos/__init__.py
CHANGED
@@ -15,7 +15,7 @@ from . import styles
|
|
15
15
|
|
16
16
|
# Import components
|
17
17
|
from .components import DataTable, EidosHeaders, NavBar
|
18
|
-
from .styles import buttons,
|
18
|
+
from .styles import buttons, lists, tables, typography
|
19
19
|
from .tags import (
|
20
20
|
# Headings
|
21
21
|
H1,
|
@@ -148,7 +148,7 @@ __all__ = [
|
|
148
148
|
"styles",
|
149
149
|
"buttons",
|
150
150
|
"typography",
|
151
|
-
"
|
151
|
+
"lists",
|
152
152
|
"tables",
|
153
153
|
# Components
|
154
154
|
"DataTable",
|
eidos/components/__init__.py
CHANGED
@@ -6,5 +6,6 @@ Higher-level components built on top of the base tags.
|
|
6
6
|
from .headers import EidosHeaders
|
7
7
|
from .navigation import NavBar
|
8
8
|
from .table import DataTable
|
9
|
+
from .tabs import TabContainer, TabList, TabPanel, Tabs
|
9
10
|
|
10
|
-
__all__ = ["DataTable", "NavBar", "EidosHeaders"]
|
11
|
+
__all__ = ["DataTable", "NavBar", "EidosHeaders", "TabContainer", "TabList", "TabPanel", "Tabs"]
|
eidos/components/tabs.py
ADDED
@@ -0,0 +1,140 @@
|
|
1
|
+
from air import Button, Div, Tag
|
2
|
+
|
3
|
+
from .. import styles
|
4
|
+
from ..utils import stringify
|
5
|
+
|
6
|
+
|
7
|
+
def TabContainer(
|
8
|
+
initial_tab_url: str,
|
9
|
+
cls: str = "",
|
10
|
+
target_id: str = "tabs",
|
11
|
+
) -> Tag:
|
12
|
+
"""HTMX-based tab container that loads tabs dynamically.
|
13
|
+
|
14
|
+
Args:
|
15
|
+
initial_tab_url: URL to load the initial tab content
|
16
|
+
cls: Additional classes for the container
|
17
|
+
target_id: ID for the tab container (default: "tabs")
|
18
|
+
|
19
|
+
Returns:
|
20
|
+
Tag: The tab container that will be populated via HTMX
|
21
|
+
|
22
|
+
Example:
|
23
|
+
TabContainer("/settings/general")
|
24
|
+
"""
|
25
|
+
return Div(
|
26
|
+
id=target_id,
|
27
|
+
hx_get=initial_tab_url,
|
28
|
+
hx_trigger="load delay:100ms",
|
29
|
+
hx_target=f"#{target_id}",
|
30
|
+
hx_swap="innerHTML",
|
31
|
+
class_=stringify(styles.tabs.container, cls),
|
32
|
+
)
|
33
|
+
|
34
|
+
|
35
|
+
def TabList(
|
36
|
+
*tabs: tuple[str, str],
|
37
|
+
selected: int = 0,
|
38
|
+
tab_cls: str = "",
|
39
|
+
hx_target: str = "#tabs",
|
40
|
+
hx_swap: str = "innerHTML",
|
41
|
+
) -> Tag:
|
42
|
+
"""HTMX-based tab list for server-rendered tabs.
|
43
|
+
|
44
|
+
Args:
|
45
|
+
*tabs: Variable number of (label, url) tuples
|
46
|
+
selected: Index of the selected tab (0-based)
|
47
|
+
tab_cls: Additional classes for tab buttons
|
48
|
+
hx_target: HTMX target for tab content (default: "#tabs")
|
49
|
+
hx_swap: HTMX swap method (default: "innerHTML")
|
50
|
+
|
51
|
+
Returns:
|
52
|
+
Tag: The tab list component
|
53
|
+
|
54
|
+
Example:
|
55
|
+
TabList(
|
56
|
+
("General", "/settings/general"),
|
57
|
+
("Security", "/settings/security"),
|
58
|
+
("Advanced", "/settings/advanced"),
|
59
|
+
selected=0
|
60
|
+
)
|
61
|
+
"""
|
62
|
+
tab_buttons = []
|
63
|
+
|
64
|
+
for i, (label, url) in enumerate(tabs):
|
65
|
+
is_selected = i == selected
|
66
|
+
|
67
|
+
tab_button = Button(
|
68
|
+
label,
|
69
|
+
hx_get=url,
|
70
|
+
hx_target=hx_target,
|
71
|
+
hx_swap=hx_swap,
|
72
|
+
role="tab",
|
73
|
+
aria_selected="true" if is_selected else "false",
|
74
|
+
aria_controls="tab-content",
|
75
|
+
class_=stringify(
|
76
|
+
styles.tabs.tab,
|
77
|
+
styles.tabs.tab_active if is_selected else "",
|
78
|
+
tab_cls
|
79
|
+
),
|
80
|
+
)
|
81
|
+
tab_buttons.append(tab_button)
|
82
|
+
|
83
|
+
return Div(
|
84
|
+
*tab_buttons,
|
85
|
+
role="tablist",
|
86
|
+
class_=styles.tabs.list,
|
87
|
+
)
|
88
|
+
|
89
|
+
|
90
|
+
def TabPanel(
|
91
|
+
content: Tag,
|
92
|
+
panel_cls: str = "",
|
93
|
+
) -> Tag:
|
94
|
+
"""Tab panel content wrapper.
|
95
|
+
|
96
|
+
Args:
|
97
|
+
content: The content to display in the tab panel
|
98
|
+
panel_cls: Additional classes for the panel
|
99
|
+
|
100
|
+
Returns:
|
101
|
+
Tag: The tab panel component
|
102
|
+
"""
|
103
|
+
return Div(
|
104
|
+
content,
|
105
|
+
id="tab-content",
|
106
|
+
role="tabpanel",
|
107
|
+
class_=stringify(styles.tabs.panel, styles.tabs.panel_active, panel_cls),
|
108
|
+
)
|
109
|
+
|
110
|
+
|
111
|
+
def Tabs(
|
112
|
+
tab_list: Tag,
|
113
|
+
tab_panel: Tag,
|
114
|
+
cls: str = "",
|
115
|
+
) -> Tag:
|
116
|
+
"""Complete tab component with list and panel.
|
117
|
+
|
118
|
+
Args:
|
119
|
+
tab_list: The TabList component
|
120
|
+
tab_panel: The TabPanel component
|
121
|
+
cls: Additional classes for the container
|
122
|
+
|
123
|
+
Returns:
|
124
|
+
Tag: The complete tabs component
|
125
|
+
|
126
|
+
Example:
|
127
|
+
# In your route handler:
|
128
|
+
tab_list = TabList(
|
129
|
+
("General", "/settings/general"),
|
130
|
+
("Security", "/settings/security"),
|
131
|
+
selected=0
|
132
|
+
)
|
133
|
+
tab_panel = TabPanel(general_settings_content)
|
134
|
+
return Tabs(tab_list, tab_panel)
|
135
|
+
"""
|
136
|
+
return Div(
|
137
|
+
tab_list,
|
138
|
+
tab_panel,
|
139
|
+
class_=stringify(styles.tabs.container, cls),
|
140
|
+
)
|
eidos/css/styles.css
CHANGED
@@ -475,4 +475,111 @@
|
|
475
475
|
transform: translateY(0);
|
476
476
|
opacity: 1;
|
477
477
|
}
|
478
|
+
}
|
479
|
+
|
480
|
+
/* List Styles */
|
481
|
+
.eidos-ul {
|
482
|
+
list-style-type: disc;
|
483
|
+
margin: var(--space-md) 0;
|
484
|
+
padding-left: var(--space-xl);
|
485
|
+
color: var(--color-text);
|
486
|
+
}
|
487
|
+
|
488
|
+
.eidos-ol {
|
489
|
+
list-style-type: decimal;
|
490
|
+
margin: var(--space-md) 0;
|
491
|
+
padding-left: var(--space-xl);
|
492
|
+
color: var(--color-text);
|
493
|
+
}
|
494
|
+
|
495
|
+
.eidos-li {
|
496
|
+
margin-bottom: var(--space-xs);
|
497
|
+
line-height: var(--line-height-relaxed);
|
498
|
+
}
|
499
|
+
|
500
|
+
/* Nested lists */
|
501
|
+
.eidos-ul .eidos-ul,
|
502
|
+
.eidos-ul .eidos-ol,
|
503
|
+
.eidos-ol .eidos-ul,
|
504
|
+
.eidos-ol .eidos-ol {
|
505
|
+
margin: var(--space-xs) 0;
|
506
|
+
}
|
507
|
+
|
508
|
+
/* Remove bottom margin from last list item */
|
509
|
+
.eidos-li:last-child {
|
510
|
+
margin-bottom: 0;
|
511
|
+
}
|
512
|
+
|
513
|
+
/* List item hover effect for interactive lists */
|
514
|
+
.eidos-li-interactive {
|
515
|
+
padding: var(--space-xs) var(--space-sm);
|
516
|
+
margin-left: calc(var(--space-xl) * -1);
|
517
|
+
margin-right: calc(var(--space-sm) * -1);
|
518
|
+
padding-left: var(--space-xl);
|
519
|
+
border-radius: var(--radius-sm);
|
520
|
+
transition: background-color var(--transition-fast);
|
521
|
+
cursor: pointer;
|
522
|
+
}
|
523
|
+
|
524
|
+
.eidos-li-interactive:hover {
|
525
|
+
background-color: var(--color-surface);
|
526
|
+
}
|
527
|
+
|
528
|
+
/* Tabs Component */
|
529
|
+
.eidos-tabs {
|
530
|
+
position: relative;
|
531
|
+
}
|
532
|
+
|
533
|
+
.eidos-tabs-list {
|
534
|
+
display: flex;
|
535
|
+
border-bottom: 1px solid var(--color-border);
|
536
|
+
overflow-x: auto;
|
537
|
+
scrollbar-width: thin;
|
538
|
+
-webkit-overflow-scrolling: touch;
|
539
|
+
}
|
540
|
+
|
541
|
+
.eidos-tab {
|
542
|
+
padding: var(--space-sm) var(--space-lg);
|
543
|
+
border-bottom: 2px solid transparent;
|
544
|
+
color: var(--color-text-muted);
|
545
|
+
text-decoration: none;
|
546
|
+
white-space: nowrap;
|
547
|
+
transition: all var(--transition-fast);
|
548
|
+
position: relative;
|
549
|
+
top: 1px;
|
550
|
+
}
|
551
|
+
|
552
|
+
.eidos-tab:hover {
|
553
|
+
color: var(--color-text);
|
554
|
+
}
|
555
|
+
|
556
|
+
.eidos-tab:focus {
|
557
|
+
outline: 2px solid var(--color-focus);
|
558
|
+
outline-offset: -2px;
|
559
|
+
}
|
560
|
+
|
561
|
+
.eidos-tab-active {
|
562
|
+
color: var(--color-primary);
|
563
|
+
border-bottom-color: var(--color-primary);
|
564
|
+
}
|
565
|
+
|
566
|
+
.eidos-tab-panel {
|
567
|
+
padding: var(--space-lg) 0;
|
568
|
+
display: none;
|
569
|
+
}
|
570
|
+
|
571
|
+
.eidos-tab-panel-active {
|
572
|
+
display: block;
|
573
|
+
}
|
574
|
+
|
575
|
+
/* HTMX-enhanced transitions */
|
576
|
+
.eidos-tabs.htmx-swapping .eidos-tab-panel {
|
577
|
+
opacity: 0;
|
578
|
+
transform: translateY(-4px);
|
579
|
+
}
|
580
|
+
|
581
|
+
.eidos-tabs.htmx-settling .eidos-tab-panel {
|
582
|
+
opacity: 1;
|
583
|
+
transform: translateY(0);
|
584
|
+
transition: opacity var(--transition-normal), transform var(--transition-normal);
|
478
585
|
}
|
eidos/styles.py
CHANGED
@@ -40,9 +40,6 @@ class Typography:
|
|
40
40
|
h6: Final[str] = "eidos-h6"
|
41
41
|
|
42
42
|
|
43
|
-
class Semantic:
|
44
|
-
"""Semantic HTML element CSS classes from styles.css."""
|
45
|
-
|
46
43
|
# Text formatting
|
47
44
|
strong: Final[str] = "eidos-strong"
|
48
45
|
i: Final[str] = "eidos-i"
|
@@ -80,6 +77,15 @@ class Semantic:
|
|
80
77
|
figcaption: Final[str] = "eidos-figcaption"
|
81
78
|
|
82
79
|
|
80
|
+
class Lists:
|
81
|
+
"""List-related CSS classes from styles.css."""
|
82
|
+
|
83
|
+
ul: Final[str] = "eidos-ul"
|
84
|
+
ol: Final[str] = "eidos-ol"
|
85
|
+
li: Final[str] = "eidos-li"
|
86
|
+
li_interactive: Final[str] = "eidos-li-interactive"
|
87
|
+
|
88
|
+
|
83
89
|
class Tables:
|
84
90
|
"""Table-related CSS classes from styles.css."""
|
85
91
|
|
@@ -97,8 +103,25 @@ class Tables:
|
|
97
103
|
td: Final[str] = "eidos-td"
|
98
104
|
|
99
105
|
|
106
|
+
class Tabs:
|
107
|
+
"""Tab-related CSS classes from styles.css."""
|
108
|
+
|
109
|
+
# Container and structure
|
110
|
+
container: Final[str] = "eidos-tabs"
|
111
|
+
list: Final[str] = "eidos-tabs-list"
|
112
|
+
|
113
|
+
# Tab elements
|
114
|
+
tab: Final[str] = "eidos-tab"
|
115
|
+
tab_active: Final[str] = "eidos-tab-active"
|
116
|
+
|
117
|
+
# Panel elements
|
118
|
+
panel: Final[str] = "eidos-tab-panel"
|
119
|
+
panel_active: Final[str] = "eidos-tab-panel-active"
|
120
|
+
|
121
|
+
|
100
122
|
# Create singleton instance for easy access
|
101
123
|
buttons = Buttons()
|
102
124
|
typography = Typography()
|
103
|
-
semantic = Semantic()
|
104
125
|
tables = Tables()
|
126
|
+
lists = Lists()
|
127
|
+
tabs = Tabs()
|
eidos/tags.py
CHANGED
@@ -1,130 +1,10 @@
|
|
1
1
|
from typing import Any
|
2
2
|
|
3
3
|
import air
|
4
|
-
|
4
|
+
from air.tags import *
|
5
5
|
from . import styles
|
6
6
|
from .utils import stringify
|
7
7
|
|
8
|
-
# Define exports for this module
|
9
|
-
__all__ = [
|
10
|
-
# Custom EidosUI components
|
11
|
-
"Button",
|
12
|
-
"H1",
|
13
|
-
"H2",
|
14
|
-
"H3",
|
15
|
-
"H4",
|
16
|
-
"H5",
|
17
|
-
"H6",
|
18
|
-
"Body",
|
19
|
-
# Semantic components with styling
|
20
|
-
"Strong",
|
21
|
-
"I",
|
22
|
-
"Small",
|
23
|
-
"Del",
|
24
|
-
"Abbr",
|
25
|
-
"Var",
|
26
|
-
"Mark",
|
27
|
-
"Time",
|
28
|
-
"Code",
|
29
|
-
"Pre",
|
30
|
-
"Kbd",
|
31
|
-
"Samp",
|
32
|
-
"Blockquote",
|
33
|
-
"Cite",
|
34
|
-
"Address",
|
35
|
-
"Hr",
|
36
|
-
"Details",
|
37
|
-
"Summary",
|
38
|
-
"Dl",
|
39
|
-
"Dt",
|
40
|
-
"Dd",
|
41
|
-
"Figure",
|
42
|
-
"Figcaption",
|
43
|
-
# Table components with styling
|
44
|
-
"Table",
|
45
|
-
"Thead",
|
46
|
-
"Tbody",
|
47
|
-
"Tfoot",
|
48
|
-
"Tr",
|
49
|
-
"Th",
|
50
|
-
"Td",
|
51
|
-
# Pass-through HTML tags from air.tags
|
52
|
-
"A",
|
53
|
-
"Area",
|
54
|
-
"Article",
|
55
|
-
"Aside",
|
56
|
-
"Audio",
|
57
|
-
"B",
|
58
|
-
"Base",
|
59
|
-
"Bdi",
|
60
|
-
"Bdo",
|
61
|
-
"Br",
|
62
|
-
"Canvas",
|
63
|
-
"Caption",
|
64
|
-
"Col",
|
65
|
-
"Colgroup",
|
66
|
-
"Data",
|
67
|
-
"Datalist",
|
68
|
-
"Dfn",
|
69
|
-
"Dialog",
|
70
|
-
"Div",
|
71
|
-
"Em",
|
72
|
-
"Embed",
|
73
|
-
"Fieldset",
|
74
|
-
"Footer",
|
75
|
-
"Form",
|
76
|
-
"Head",
|
77
|
-
"Header",
|
78
|
-
"Hgroup",
|
79
|
-
"Html",
|
80
|
-
"Iframe",
|
81
|
-
"Img",
|
82
|
-
"Input",
|
83
|
-
"Ins",
|
84
|
-
"Label",
|
85
|
-
"Legend",
|
86
|
-
"Li",
|
87
|
-
"Link",
|
88
|
-
"Main",
|
89
|
-
"Map",
|
90
|
-
"Menu",
|
91
|
-
"Meta",
|
92
|
-
"Meter",
|
93
|
-
"Nav",
|
94
|
-
"Noscript",
|
95
|
-
"Object",
|
96
|
-
"Ol",
|
97
|
-
"Optgroup",
|
98
|
-
"Option",
|
99
|
-
"Output",
|
100
|
-
"P",
|
101
|
-
"Param",
|
102
|
-
"Picture",
|
103
|
-
"Progress",
|
104
|
-
"Q",
|
105
|
-
"Rp",
|
106
|
-
"Rt",
|
107
|
-
"Ruby",
|
108
|
-
"S",
|
109
|
-
"Script",
|
110
|
-
"Search",
|
111
|
-
"Section",
|
112
|
-
"Select",
|
113
|
-
"Source",
|
114
|
-
"Span",
|
115
|
-
"Style",
|
116
|
-
"Sub",
|
117
|
-
"Sup",
|
118
|
-
"Template",
|
119
|
-
"Textarea",
|
120
|
-
"Title",
|
121
|
-
"Track",
|
122
|
-
"U",
|
123
|
-
"Ul",
|
124
|
-
"Video",
|
125
|
-
"Wbr",
|
126
|
-
]
|
127
|
-
|
128
8
|
|
129
9
|
def Button(
|
130
10
|
*content: Any,
|
@@ -214,19 +94,19 @@ def Body(*content: Any, class_: str | list[str] | None = None, **kwargs: Any) ->
|
|
214
94
|
|
215
95
|
|
216
96
|
def Strong(*content: Any, class_: str | list[str] | None = None, **kwargs: Any) -> air.Tag:
|
217
|
-
return air.Strong(*content, class_=stringify(styles.
|
97
|
+
return air.Strong(*content, class_=stringify(styles.typography.strong, class_), **kwargs)
|
218
98
|
|
219
99
|
|
220
100
|
def I(*content: Any, class_: str | list[str] | None = None, **kwargs: Any) -> air.Tag:
|
221
|
-
return air.I(*content, class_=stringify(styles.
|
101
|
+
return air.I(*content, class_=stringify(styles.typography.i, class_), **kwargs)
|
222
102
|
|
223
103
|
|
224
104
|
def Small(*content: Any, class_: str | list[str] | None = None, **kwargs: Any) -> air.Tag:
|
225
|
-
return air.Small(*content, class_=stringify(styles.
|
105
|
+
return air.Small(*content, class_=stringify(styles.typography.small, class_), **kwargs)
|
226
106
|
|
227
107
|
|
228
108
|
def Del(*content: Any, class_: str | list[str] | None = None, **kwargs: Any) -> air.Tag:
|
229
|
-
return air.Del(*content, class_=stringify(styles.
|
109
|
+
return air.Del(*content, class_=stringify(styles.typography.del_, class_), **kwargs)
|
230
110
|
|
231
111
|
|
232
112
|
def Abbr(*content: Any, class_: str | list[str] | None = None, **kwargs: Any) -> air.Tag:
|
@@ -242,79 +122,79 @@ def Abbr(*content: Any, class_: str | list[str] | None = None, **kwargs: Any) ->
|
|
242
122
|
Example:
|
243
123
|
Abbr("HTML", title="Hyper Text Markup Language")
|
244
124
|
"""
|
245
|
-
return air.Abbr(*content, class_=stringify(styles.
|
125
|
+
return air.Abbr(*content, class_=stringify(styles.typography.abbr, class_), **kwargs)
|
246
126
|
|
247
127
|
|
248
128
|
def Var(*content: Any, class_: str | list[str] | None = None, **kwargs: Any) -> air.Tag:
|
249
|
-
return air.Var(*content, class_=stringify(styles.
|
129
|
+
return air.Var(*content, class_=stringify(styles.typography.var, class_), **kwargs)
|
250
130
|
|
251
131
|
|
252
132
|
def Mark(*content: Any, class_: str | list[str] | None = None, **kwargs: Any) -> air.Tag:
|
253
|
-
return air.Mark(*content, class_=stringify(styles.
|
133
|
+
return air.Mark(*content, class_=stringify(styles.typography.mark, class_), **kwargs)
|
254
134
|
|
255
135
|
|
256
136
|
def Time(*content: Any, class_: str | list[str] | None = None, **kwargs: Any) -> air.Tag:
|
257
|
-
return air.Time(*content, class_=stringify(styles.
|
137
|
+
return air.Time(*content, class_=stringify(styles.typography.time, class_), **kwargs)
|
258
138
|
|
259
139
|
|
260
140
|
def Code(*content: Any, class_: str | list[str] | None = None, **kwargs: Any) -> air.Tag:
|
261
|
-
return air.Code(*content, class_=stringify(styles.
|
141
|
+
return air.Code(*content, class_=stringify(styles.typography.code, class_), **kwargs)
|
262
142
|
|
263
143
|
|
264
144
|
def Pre(*content: Any, class_: str | list[str] | None = None, **kwargs: Any) -> air.Tag:
|
265
|
-
return air.Pre(*content, class_=stringify(styles.
|
145
|
+
return air.Pre(*content, class_=stringify(styles.typography.pre, class_), **kwargs)
|
266
146
|
|
267
147
|
|
268
148
|
def Kbd(*content: Any, class_: str | list[str] | None = None, **kwargs: Any) -> air.Tag:
|
269
|
-
return air.Kbd(*content, class_=stringify(styles.
|
149
|
+
return air.Kbd(*content, class_=stringify(styles.typography.kbd, class_), **kwargs)
|
270
150
|
|
271
151
|
|
272
152
|
def Samp(*content: Any, class_: str | list[str] | None = None, **kwargs: Any) -> air.Tag:
|
273
|
-
return air.Samp(*content, class_=stringify(styles.
|
153
|
+
return air.Samp(*content, class_=stringify(styles.typography.samp, class_), **kwargs)
|
274
154
|
|
275
155
|
|
276
156
|
def Blockquote(*content: Any, class_: str | list[str] | None = None, **kwargs: Any) -> air.Tag:
|
277
|
-
return air.Blockquote(*content, class_=stringify(styles.
|
157
|
+
return air.Blockquote(*content, class_=stringify(styles.typography.blockquote, class_), **kwargs)
|
278
158
|
|
279
159
|
|
280
160
|
def Cite(*content: Any, class_: str | list[str] | None = None, **kwargs: Any) -> air.Tag:
|
281
|
-
return air.Cite(*content, class_=stringify(styles.
|
161
|
+
return air.Cite(*content, class_=stringify(styles.typography.cite, class_), **kwargs)
|
282
162
|
|
283
163
|
|
284
164
|
def Address(*content: Any, class_: str | list[str] | None = None, **kwargs: Any) -> air.Tag:
|
285
|
-
return air.Address(*content, class_=stringify(styles.
|
165
|
+
return air.Address(*content, class_=stringify(styles.typography.address, class_), **kwargs)
|
286
166
|
|
287
167
|
|
288
168
|
def Hr(class_: str | list[str] | None = None, **kwargs: Any) -> air.Tag:
|
289
|
-
return air.Hr(class_=stringify(styles.
|
169
|
+
return air.Hr(class_=stringify(styles.typography.hr, class_), **kwargs)
|
290
170
|
|
291
171
|
|
292
172
|
def Details(*content: Any, class_: str | list[str] | None = None, **kwargs: Any) -> air.Tag:
|
293
|
-
return air.Details(*content, class_=stringify(styles.
|
173
|
+
return air.Details(*content, class_=stringify(styles.typography.details, class_), **kwargs)
|
294
174
|
|
295
175
|
|
296
176
|
def Summary(*content: Any, class_: str | list[str] | None = None, **kwargs: Any) -> air.Tag:
|
297
|
-
return air.Summary(*content, class_=stringify(styles.
|
177
|
+
return air.Summary(*content, class_=stringify(styles.typography.summary, class_), **kwargs)
|
298
178
|
|
299
179
|
|
300
180
|
def Dl(*content: Any, class_: str | list[str] | None = None, **kwargs: Any) -> air.Tag:
|
301
|
-
return air.Dl(*content, class_=stringify(styles.
|
181
|
+
return air.Dl(*content, class_=stringify(styles.typography.dl, class_), **kwargs)
|
302
182
|
|
303
183
|
|
304
184
|
def Dt(*content: Any, class_: str | list[str] | None = None, **kwargs: Any) -> air.Tag:
|
305
|
-
return air.Dt(*content, class_=stringify(styles.
|
185
|
+
return air.Dt(*content, class_=stringify(styles.typography.dt, class_), **kwargs)
|
306
186
|
|
307
187
|
|
308
188
|
def Dd(*content: Any, class_: str | list[str] | None = None, **kwargs: Any) -> air.Tag:
|
309
|
-
return air.Dd(*content, class_=stringify(styles.
|
189
|
+
return air.Dd(*content, class_=stringify(styles.typography.dd, class_), **kwargs)
|
310
190
|
|
311
191
|
|
312
192
|
def Figure(*content: Any, class_: str | list[str] | None = None, **kwargs: Any) -> air.Tag:
|
313
|
-
return air.Figure(*content, class_=stringify(styles.
|
193
|
+
return air.Figure(*content, class_=stringify(styles.typography.figure, class_), **kwargs)
|
314
194
|
|
315
195
|
|
316
196
|
def Figcaption(*content: Any, class_: str | list[str] | None = None, **kwargs: Any) -> air.Tag:
|
317
|
-
return air.Figcaption(*content, class_=stringify(styles.
|
197
|
+
return air.Figcaption(*content, class_=stringify(styles.typography.figcaption, class_), **kwargs)
|
318
198
|
|
319
199
|
|
320
200
|
# Table elements with styling
|
@@ -355,81 +235,18 @@ def Td(*content: Any, class_: str | list[str] | None = None, **kwargs: Any) -> a
|
|
355
235
|
return air.Td(*content, class_=stringify(styles.tables.td, class_), **kwargs)
|
356
236
|
|
357
237
|
|
238
|
+
def Ul(*content: Any, class_: str | list[str] | None = None, **kwargs: Any) -> air.Tag:
|
239
|
+
return air.Ul(*content, class_=stringify(styles.lists.ul, class_), **kwargs)
|
240
|
+
|
241
|
+
|
242
|
+
def Ol(*content: Any, class_: str | list[str] | None = None, **kwargs: Any) -> air.Tag:
|
243
|
+
return air.Ol(*content, class_=stringify(styles.lists.ol, class_), **kwargs)
|
244
|
+
|
245
|
+
|
246
|
+
def Li(*content: Any, class_: str | list[str] | None = None, **kwargs: Any) -> air.Tag:
|
247
|
+
return air.Li(*content, class_=stringify(styles.lists.li, class_), **kwargs)
|
248
|
+
|
249
|
+
|
250
|
+
|
358
251
|
# Pass-through tags from air.tags
|
359
252
|
# Import all standard HTML tags that don't have custom styling
|
360
|
-
from air.tags import (
|
361
|
-
A,
|
362
|
-
Area,
|
363
|
-
Article,
|
364
|
-
Aside,
|
365
|
-
Audio,
|
366
|
-
B,
|
367
|
-
Base,
|
368
|
-
Bdi,
|
369
|
-
Bdo,
|
370
|
-
Br,
|
371
|
-
Canvas,
|
372
|
-
Caption,
|
373
|
-
Col,
|
374
|
-
Colgroup,
|
375
|
-
Data,
|
376
|
-
Datalist,
|
377
|
-
Dfn,
|
378
|
-
Dialog,
|
379
|
-
Div,
|
380
|
-
Em,
|
381
|
-
Embed,
|
382
|
-
Fieldset,
|
383
|
-
Footer,
|
384
|
-
Form,
|
385
|
-
Head,
|
386
|
-
Header,
|
387
|
-
Hgroup,
|
388
|
-
Html,
|
389
|
-
Iframe,
|
390
|
-
Img,
|
391
|
-
Input,
|
392
|
-
Ins,
|
393
|
-
Label,
|
394
|
-
Legend,
|
395
|
-
Li,
|
396
|
-
Link,
|
397
|
-
Main,
|
398
|
-
Map,
|
399
|
-
Menu,
|
400
|
-
Meta,
|
401
|
-
Meter,
|
402
|
-
Nav,
|
403
|
-
Noscript,
|
404
|
-
Object,
|
405
|
-
Ol,
|
406
|
-
Optgroup,
|
407
|
-
Option,
|
408
|
-
Output,
|
409
|
-
P,
|
410
|
-
Param,
|
411
|
-
Picture,
|
412
|
-
Progress,
|
413
|
-
Q,
|
414
|
-
Rp,
|
415
|
-
Rt,
|
416
|
-
Ruby,
|
417
|
-
S,
|
418
|
-
Script,
|
419
|
-
Search,
|
420
|
-
Section,
|
421
|
-
Select,
|
422
|
-
Source,
|
423
|
-
Span,
|
424
|
-
Style,
|
425
|
-
Sub,
|
426
|
-
Sup,
|
427
|
-
Template,
|
428
|
-
Textarea,
|
429
|
-
Title,
|
430
|
-
Track,
|
431
|
-
U,
|
432
|
-
Ul,
|
433
|
-
Video,
|
434
|
-
Wbr,
|
435
|
-
)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: eidosui
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.7.0
|
4
4
|
Summary: A modern, Tailwind CSS-based UI library for air development
|
5
5
|
Project-URL: Homepage, https://github.com/isaac-flath/EidosUI
|
6
6
|
Project-URL: Repository, https://github.com/isaac-flath/EidosUI
|
@@ -1,12 +1,13 @@
|
|
1
|
-
eidos/__init__.py,sha256=
|
2
|
-
eidos/styles.py,sha256=
|
3
|
-
eidos/tags.py,sha256=
|
1
|
+
eidos/__init__.py,sha256=zXRgrBv7PD1Om8AIV77-fUMkxFXlD3z5KWd-OyBoIZo,3538
|
2
|
+
eidos/styles.py,sha256=771gD4y0ORvOPoF5yy9sPvDaVKpcH9WoovEeY1-0638,3308
|
3
|
+
eidos/tags.py,sha256=XS_S8krMuD5DvgCjd8akpRUurvuHSrhb_IvCvc6bavM,9331
|
4
4
|
eidos/utils.py,sha256=9hRZUL7DzyO3apo_lwpmTOEIPf2fCv-xTdVmh1u_0i8,2375
|
5
|
-
eidos/components/__init__.py,sha256=
|
5
|
+
eidos/components/__init__.py,sha256=AUpvyy_PdNxleiNPBwtjDZhs8SArFvaqmUn2x7b0E28,339
|
6
6
|
eidos/components/headers.py,sha256=jWsQxXHxATL4kVAZiYb4IkfvLYN6zPCCAyj-JQ_yBCg,1949
|
7
7
|
eidos/components/navigation.py,sha256=gMIwvM75tVK2We1MNhVKMFvBD7H3gM6qDeVEX5XNUt0,2481
|
8
8
|
eidos/components/table.py,sha256=nmtVXh0fRunJ0Uhwq4CXDzKdFbhbY09NafXQRJZyoSc,2538
|
9
|
-
eidos/
|
9
|
+
eidos/components/tabs.py,sha256=Xiph2HgP0Eph80E2UvYriPvQtfSY7CsdDOIcD1NJVnA,3535
|
10
|
+
eidos/css/styles.css,sha256=Th7e3z3UF8hdVjOelwos2zqzUM9C8tGi-hVaGfX4tjU,13056
|
10
11
|
eidos/css/themes/dark.css,sha256=yUDNz7iLEJ_Q63MrKXlrhYcpojm1L2eNUOthzhYc3Vs,4170
|
11
12
|
eidos/css/themes/eidos-variables.css,sha256=s4_CUivnqvndE4c7T1stp59orEHL_0C9tmN0rxai7bU,5686
|
12
13
|
eidos/css/themes/light.css,sha256=kESbN5Z4ovCn-Q3fxilQcjafgMCIyyJiocU9kMC5sIM,2674
|
@@ -18,7 +19,7 @@ eidos/plugins/markdown/renderer.py,sha256=pBO-iTfcfXDICKIhu5tS3YsAgSV7A6OOG9N_xR
|
|
18
19
|
eidos/plugins/markdown/css/markdown.css,sha256=RxNx7aJDmJMx3zuydX10uAMaPFtl9r6zOFDni9Idsdk,6226
|
19
20
|
eidos/plugins/markdown/extensions/__init__.py,sha256=hRe8Pk_5ahmZjf68sJCbBGTj9B1KONLlv-nhOg7kudk,29
|
20
21
|
eidos/plugins/markdown/extensions/alerts.py,sha256=xY0NCNxUshhdKOe43fkGOV4ibcmQ4QzR0e_kQ1oq0kc,4002
|
21
|
-
eidosui-0.
|
22
|
-
eidosui-0.
|
23
|
-
eidosui-0.
|
24
|
-
eidosui-0.
|
22
|
+
eidosui-0.7.0.dist-info/METADATA,sha256=mLaYRT2Ij-KWI6BXW1V8BjBr0xSk7ZAYaSOQ0DBsSJg,2878
|
23
|
+
eidosui-0.7.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
24
|
+
eidosui-0.7.0.dist-info/licenses/LICENSE,sha256=evjPJs6lg9eka9CYtC6ErQrZ71IovVbdvZqqz3ax8E8,1064
|
25
|
+
eidosui-0.7.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|