File size: 3,941 Bytes
c58df45
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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
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
120
121
122
123
124
125
126
127
128
import streamlit as st
import uuid
import streamlit.components.v1 as components
import base64

# Lista de estilos de sombra
shadow_list = [
    "box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 12px;",
    "box-shadow: rgba(0, 0, 0, 0.15) 0px 5px 15px 0px;",
    "box-shadow: rgba(0, 0, 0, 0.05) 0px 6px 24px 0px, rgba(0, 0, 0, 0.08) 0px 0px 0px 1px;",
    "box-shadow: rgba(0, 0, 0, 0.16) 0px 10px 36px 0px, rgba(0, 0, 0, 0.06) 0px 0px 0px 1px;",
]

# Lista de estilos de transición
transition_list = [
    "transition: all 0.3s ease;",
    "transition: all 0.5s cubic-bezier(0.25, 0.8, 0.25, 1);",
    "transition: all 0.4s cubic-bezier(0.165, 0.84, 0.44, 1);",
]

def semantic_float_init():
    components.html("""

    <style>

    .semantic-float {

        position: fixed;

        z-index: 9999;

        background-color: white;

        border-radius: 8px;

        padding: 16px;

        overflow: auto;

        box-shadow: 0 0 10px rgba(0,0,0,0.1);

    }

    </style>

    """, height=0)

def float_graph(content, width="40%", height="60%", position="center-right", shadow=0, transition=0):
    position_css = {
        "top-left": "top: 20px; left: 20px;",
        "top-right": "top: 20px; right: 20px;",
        "bottom-left": "bottom: 20px; left: 20px;",
        "bottom-right": "bottom: 20px; right: 20px;",
        "center-right": "top: 50%; right: 20px; transform: translateY(-50%);"
    }

    css = f"""

    position: fixed;

    width: {width};

    height: {height};

    {position_css.get(position, position_css['center-right'])}

    {shadow_list[shadow % len(shadow_list)]}

    {transition_list[transition % len(transition_list)]}

    z-index: 9999;

    display: block !important;

    background-color: white;

    border: 1px solid #ddd;

    border-radius: 5px;

    padding: 10px;

    overflow: auto;

    """

    box_id = f"semantic-float-{str(uuid.uuid4())[:8]}"
    components.html(f"""

    <div id="{box_id}" class="semantic-float" style="{css}">

        {content}

    </div>

    <script>

    (function() {{

        const box = document.getElementById('{box_id}');

        if (box) {{

            box.style.display = 'block';

            console.log('Float graph created with ID: {box_id}');

        }} else {{

            console.error('Float graph element not found');

        }}

    }})();

    </script>

    """, height=0)
    return box_id

def float_box(content, css=""):
    box_id = f"semantic-float-{str(uuid.uuid4())[:8]}"
    components.html(f"""

    <div id="{box_id}" class="semantic-float" style="{css}">

        {content}

    </div>

    <script>

    (function() {{

        const box = document.getElementById('{box_id}');

        if (box) {{

            console.log('Float box created with ID: {box_id}');

        }} else {{

            console.error('Float box element not found');

        }}

    }})();

    </script>

    """, height=0)
    return box_id

def toggle_float_visibility(box_id, visible):
    display = "block" if visible else "none"
    components.html(f"""

    <script>

    (function() {{

        const element = document.getElementById('{box_id}');

        if (element) {{

            element.style.display = '{display}';

            console.log('Float visibility toggled: {display}');

        }} else {{

            console.error('Float element not found for toggling visibility');

        }}

    }})();

    </script>

    """, height=0)

def update_float_content(box_id, new_content):
    components.html(f"""

    <script>

    (function() {{

        const element = document.getElementById('{box_id}');

        if (element) {{

            element.innerHTML = `{new_content}`;

            console.log('Float content updated');

        }} else {{

            console.error('Float element not found for updating content');

        }}

    }})();

    </script>

    """, height=0)