anywidget-graph 0.2.6__tar.gz → 0.2.7__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.
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/PKG-INFO +1 -1
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/pyproject.toml +1 -1
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/src/anywidget_graph/__init__.py +1 -1
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/src/anywidget_graph/ui/icons.js +1 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/src/anywidget_graph/ui/index.js +62 -2
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/src/anywidget_graph/ui/styles.css +48 -1
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/src/anywidget_graph/ui/toolbar.js +33 -1
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/uv.lock +29 -29
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/.github/workflows/ci.yml +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/.github/workflows/pypi.yml +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/.gitignore +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/.python-version +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/LICENSE +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/README.md +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/examples/demo.py +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/src/anywidget_graph/backends/__init__.py +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/src/anywidget_graph/backends/arango.py +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/src/anywidget_graph/backends/cosmosdb.py +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/src/anywidget_graph/backends/grafeo.py +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/src/anywidget_graph/backends/ladybug.py +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/src/anywidget_graph/backends/neo4j.py +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/src/anywidget_graph/converters/__init__.py +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/src/anywidget_graph/converters/base.py +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/src/anywidget_graph/converters/common.py +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/src/anywidget_graph/converters/cypher.py +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/src/anywidget_graph/converters/gql.py +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/src/anywidget_graph/converters/graphql.py +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/src/anywidget_graph/converters/gremlin.py +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/src/anywidget_graph/converters/sparql.py +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/src/anywidget_graph/demo.py +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/src/anywidget_graph/py.typed +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/src/anywidget_graph/ui/__init__.py +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/src/anywidget_graph/ui/grafeo-embed.js +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/src/anywidget_graph/ui/grafeo.js +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/src/anywidget_graph/ui/neo4j.js +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/src/anywidget_graph/ui/properties.js +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/src/anywidget_graph/ui/schema.js +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/src/anywidget_graph/ui/settings.js +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/src/anywidget_graph/widget.py +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/tests/__init__.py +0 -0
- {anywidget_graph-0.2.6 → anywidget_graph-0.2.7}/tests/test_graph.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: anywidget-graph
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.7
|
|
4
4
|
Summary: Interactive graph visualization for Python notebooks using anywidget
|
|
5
5
|
Project-URL: Homepage, https://grafeo.dev/
|
|
6
6
|
Project-URL: Repository, https://github.com/GrafeoDB/anywidget-graph
|
|
@@ -15,4 +15,5 @@ export const ICONS = {
|
|
|
15
15
|
zoomIn: `<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/><line x1="11" y1="8" x2="11" y2="14"/><line x1="8" y1="11" x2="14" y2="11"/></svg>`,
|
|
16
16
|
zoomOut: `<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/><line x1="8" y1="11" x2="14" y2="11"/></svg>`,
|
|
17
17
|
zoomFit: `<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"/></svg>`,
|
|
18
|
+
search: `<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>`,
|
|
18
19
|
};
|
|
@@ -236,9 +236,28 @@ function render({ model, el }) {
|
|
|
236
236
|
// Panel references for mutual exclusion
|
|
237
237
|
const panels = { schema, settings, properties };
|
|
238
238
|
|
|
239
|
+
// Search state (shared with nodeReducer)
|
|
240
|
+
let searchTerm = "";
|
|
241
|
+
let searchMatches = new Set();
|
|
242
|
+
|
|
243
|
+
function onSearch(term) {
|
|
244
|
+
searchTerm = (term || "").toLowerCase().trim();
|
|
245
|
+
searchMatches.clear();
|
|
246
|
+
if (searchTerm) {
|
|
247
|
+
graph.forEachNode((id, attrs) => {
|
|
248
|
+
const label = (attrs.label || "").toLowerCase();
|
|
249
|
+
const nodeId = String(id).toLowerCase();
|
|
250
|
+
if (label.includes(searchTerm) || nodeId.includes(searchTerm)) {
|
|
251
|
+
searchMatches.add(id);
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
renderer.refresh();
|
|
256
|
+
}
|
|
257
|
+
|
|
239
258
|
// Create toolbar if enabled
|
|
240
259
|
if (model.get("show_toolbar")) {
|
|
241
|
-
const toolbar = createToolbar(model, onExecuteQuery, panels);
|
|
260
|
+
const toolbar = createToolbar(model, onExecuteQuery, panels, onSearch);
|
|
242
261
|
wrapper.appendChild(toolbar);
|
|
243
262
|
}
|
|
244
263
|
|
|
@@ -351,7 +370,7 @@ function render({ model, el }) {
|
|
|
351
370
|
labelWeight: "500",
|
|
352
371
|
});
|
|
353
372
|
|
|
354
|
-
// Node reducer for selection highlighting
|
|
373
|
+
// Node reducer for selection highlighting, search filtering, and pinned indicator
|
|
355
374
|
renderer.setSetting("nodeReducer", (node, data) => {
|
|
356
375
|
const selectedNodes = model.get("selected_nodes") || [];
|
|
357
376
|
const pinnedNodes = model.get("pinned_nodes") || {};
|
|
@@ -363,6 +382,12 @@ function render({ model, el }) {
|
|
|
363
382
|
res.label = "";
|
|
364
383
|
}
|
|
365
384
|
|
|
385
|
+
// Dim non-matching nodes when search is active
|
|
386
|
+
if (searchTerm && !searchMatches.has(node)) {
|
|
387
|
+
res.color = data.color + "20";
|
|
388
|
+
res.label = "";
|
|
389
|
+
}
|
|
390
|
+
|
|
366
391
|
// Show ring on pinned nodes
|
|
367
392
|
if (pinnedNodes[node]) {
|
|
368
393
|
res.borderColor = "#f59e0b";
|
|
@@ -676,6 +701,41 @@ function render({ model, el }) {
|
|
|
676
701
|
model.save_changes();
|
|
677
702
|
});
|
|
678
703
|
|
|
704
|
+
// Keyboard shortcuts
|
|
705
|
+
wrapper.tabIndex = 0;
|
|
706
|
+
wrapper.style.outline = "none";
|
|
707
|
+
wrapper.addEventListener("keydown", (e) => {
|
|
708
|
+
const tag = e.target.tagName;
|
|
709
|
+
if (tag === "INPUT" || tag === "SELECT" || tag === "TEXTAREA") return;
|
|
710
|
+
|
|
711
|
+
if (e.key === "f" || e.key === "F") {
|
|
712
|
+
e.preventDefault();
|
|
713
|
+
renderer.getCamera().animatedReset({ duration: 200 });
|
|
714
|
+
} else if (e.key === "Escape") {
|
|
715
|
+
model.set("selected_node", null);
|
|
716
|
+
model.set("selected_edge", null);
|
|
717
|
+
model.set("selected_nodes", []);
|
|
718
|
+
model.set("selected_edges", []);
|
|
719
|
+
model.save_changes();
|
|
720
|
+
} else if (e.key === "Delete" || e.key === "Backspace") {
|
|
721
|
+
const selected = model.get("selected_nodes") || [];
|
|
722
|
+
if (selected.length === 0) return;
|
|
723
|
+
e.preventDefault();
|
|
724
|
+
const removeSet = new Set(selected);
|
|
725
|
+
const nodes = (model.get("nodes") || []).filter(n => !removeSet.has(n.id));
|
|
726
|
+
const edges = (model.get("edges") || []).filter(
|
|
727
|
+
edge => !removeSet.has(edge.source) && !removeSet.has(edge.target)
|
|
728
|
+
);
|
|
729
|
+
model.set("nodes", nodes);
|
|
730
|
+
model.set("edges", edges);
|
|
731
|
+
model.set("selected_node", null);
|
|
732
|
+
model.set("selected_edge", null);
|
|
733
|
+
model.set("selected_nodes", []);
|
|
734
|
+
model.set("selected_edges", []);
|
|
735
|
+
model.save_changes();
|
|
736
|
+
}
|
|
737
|
+
});
|
|
738
|
+
|
|
679
739
|
// Double-click node: unpin if pinned, otherwise expand (fetch neighbors)
|
|
680
740
|
renderer.on("doubleClickNode", ({ node }) => {
|
|
681
741
|
const pinned = { ...(model.get("pinned_nodes") || {}) };
|
|
@@ -90,6 +90,53 @@
|
|
|
90
90
|
color: var(--awg-text-muted);
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
+
/* === SEARCH INPUT === */
|
|
94
|
+
.awg-search-wrap {
|
|
95
|
+
display: flex;
|
|
96
|
+
align-items: center;
|
|
97
|
+
position: relative;
|
|
98
|
+
flex-shrink: 0;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.awg-search-icon {
|
|
102
|
+
position: absolute;
|
|
103
|
+
left: 8px;
|
|
104
|
+
color: var(--awg-text-muted);
|
|
105
|
+
display: flex;
|
|
106
|
+
pointer-events: none;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.awg-search-input {
|
|
110
|
+
width: 140px;
|
|
111
|
+
padding: 6px 8px 6px 28px;
|
|
112
|
+
border: 1px solid var(--awg-input-border);
|
|
113
|
+
border-radius: 6px;
|
|
114
|
+
font-size: 12px;
|
|
115
|
+
background: var(--awg-input-bg);
|
|
116
|
+
color: var(--awg-text);
|
|
117
|
+
transition: border-color 0.15s, box-shadow 0.15s, width 0.2s;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.awg-search-input:focus {
|
|
121
|
+
outline: none;
|
|
122
|
+
border-color: var(--awg-accent);
|
|
123
|
+
box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.15);
|
|
124
|
+
width: 180px;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.awg-search-input::placeholder {
|
|
128
|
+
color: var(--awg-text-muted);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/* === COUNT BADGE === */
|
|
132
|
+
.awg-count-badge {
|
|
133
|
+
font-size: 11px;
|
|
134
|
+
color: var(--awg-text-muted);
|
|
135
|
+
white-space: nowrap;
|
|
136
|
+
flex-shrink: 0;
|
|
137
|
+
font-variant-numeric: tabular-nums;
|
|
138
|
+
}
|
|
139
|
+
|
|
93
140
|
/* === BUTTONS === */
|
|
94
141
|
.awg-btn {
|
|
95
142
|
display: inline-flex;
|
|
@@ -218,7 +265,7 @@
|
|
|
218
265
|
display: flex;
|
|
219
266
|
flex-direction: column;
|
|
220
267
|
gap: 2px;
|
|
221
|
-
z-index:
|
|
268
|
+
z-index: 25;
|
|
222
269
|
}
|
|
223
270
|
|
|
224
271
|
.awg-zoom-btn {
|
|
@@ -7,8 +7,9 @@ import { updateStatusDot } from "./settings.js";
|
|
|
7
7
|
/**
|
|
8
8
|
* Create the toolbar component.
|
|
9
9
|
* @param {object} panels - { schema, settings, properties } panel objects with toggle/close/isOpen
|
|
10
|
+
* @param {function} onSearch - callback(term) for search filtering
|
|
10
11
|
*/
|
|
11
|
-
export function createToolbar(model, onExecuteQuery, panels) {
|
|
12
|
+
export function createToolbar(model, onExecuteQuery, panels, onSearch) {
|
|
12
13
|
const toolbar = document.createElement("div");
|
|
13
14
|
toolbar.className = "awg-toolbar";
|
|
14
15
|
|
|
@@ -71,6 +72,37 @@ export function createToolbar(model, onExecuteQuery, panels) {
|
|
|
71
72
|
toolbar.appendChild(queryContainer);
|
|
72
73
|
}
|
|
73
74
|
|
|
75
|
+
// Search input (compact filter for nodes)
|
|
76
|
+
const searchWrap = document.createElement("div");
|
|
77
|
+
searchWrap.className = "awg-search-wrap";
|
|
78
|
+
const searchIcon = document.createElement("span");
|
|
79
|
+
searchIcon.className = "awg-search-icon";
|
|
80
|
+
searchIcon.innerHTML = ICONS.search;
|
|
81
|
+
searchWrap.appendChild(searchIcon);
|
|
82
|
+
|
|
83
|
+
const searchInput = document.createElement("input");
|
|
84
|
+
searchInput.type = "text";
|
|
85
|
+
searchInput.className = "awg-search-input";
|
|
86
|
+
searchInput.placeholder = "Filter nodes...";
|
|
87
|
+
searchInput.addEventListener("input", () => {
|
|
88
|
+
onSearch?.(searchInput.value);
|
|
89
|
+
});
|
|
90
|
+
searchWrap.appendChild(searchInput);
|
|
91
|
+
toolbar.appendChild(searchWrap);
|
|
92
|
+
|
|
93
|
+
// Count badge
|
|
94
|
+
const countBadge = document.createElement("span");
|
|
95
|
+
countBadge.className = "awg-count-badge";
|
|
96
|
+
function updateCount() {
|
|
97
|
+
const nodes = model.get("nodes") || [];
|
|
98
|
+
const edges = model.get("edges") || [];
|
|
99
|
+
countBadge.textContent = `${nodes.length} nodes \u00b7 ${edges.length} edges`;
|
|
100
|
+
}
|
|
101
|
+
updateCount();
|
|
102
|
+
model.on("change:nodes", updateCount);
|
|
103
|
+
model.on("change:edges", updateCount);
|
|
104
|
+
toolbar.appendChild(countBadge);
|
|
105
|
+
|
|
74
106
|
// Settings button (mutual exclusion with properties)
|
|
75
107
|
if (model.get("show_settings")) {
|
|
76
108
|
const settingsBtn = document.createElement("button");
|
|
@@ -154,7 +154,7 @@ wheels = [
|
|
|
154
154
|
|
|
155
155
|
[[package]]
|
|
156
156
|
name = "anywidget-graph"
|
|
157
|
-
version = "0.2.
|
|
157
|
+
version = "0.2.7"
|
|
158
158
|
source = { editable = "." }
|
|
159
159
|
dependencies = [
|
|
160
160
|
{ name = "anywidget" },
|
|
@@ -191,16 +191,16 @@ dev = [
|
|
|
191
191
|
[package.metadata]
|
|
192
192
|
requires-dist = [
|
|
193
193
|
{ name = "anywidget", specifier = ">=0.9.21" },
|
|
194
|
-
{ name = "grafeo", marker = "extra == 'grafeo'", specifier = ">=0.5
|
|
194
|
+
{ name = "grafeo", marker = "extra == 'grafeo'", specifier = ">=0.5" },
|
|
195
195
|
{ name = "gremlinpython", marker = "extra == 'cosmosdb'", specifier = ">=3.7" },
|
|
196
196
|
{ name = "marimo", specifier = ">=0.19.9" },
|
|
197
|
-
{ name = "marimo", marker = "extra == 'dev'", specifier = ">=0.
|
|
197
|
+
{ name = "marimo", marker = "extra == 'dev'", specifier = ">=0.20" },
|
|
198
198
|
{ name = "networkx", marker = "extra == 'networkx'", specifier = ">=3.0" },
|
|
199
199
|
{ name = "pandas", marker = "extra == 'pandas'", specifier = ">=2.0" },
|
|
200
|
-
{ name = "prek", marker = "extra == 'dev'", specifier = ">=0.3
|
|
200
|
+
{ name = "prek", marker = "extra == 'dev'", specifier = ">=0.3" },
|
|
201
201
|
{ name = "pytest", marker = "extra == 'dev'", specifier = ">=9.0.2" },
|
|
202
|
-
{ name = "ruff", marker = "extra == 'dev'", specifier = ">=0.15
|
|
203
|
-
{ name = "ty", marker = "extra == 'dev'", specifier = ">=0.0.
|
|
202
|
+
{ name = "ruff", marker = "extra == 'dev'", specifier = ">=0.15" },
|
|
203
|
+
{ name = "ty", marker = "extra == 'dev'", specifier = ">=0.0.20" },
|
|
204
204
|
]
|
|
205
205
|
|
|
206
206
|
[package.metadata.requires-dev]
|
|
@@ -614,7 +614,7 @@ wheels = [
|
|
|
614
614
|
|
|
615
615
|
[[package]]
|
|
616
616
|
name = "marimo"
|
|
617
|
-
version = "0.
|
|
617
|
+
version = "0.20.4"
|
|
618
618
|
source = { registry = "https://pypi.org/simple" }
|
|
619
619
|
dependencies = [
|
|
620
620
|
{ name = "click" },
|
|
@@ -635,9 +635,9 @@ dependencies = [
|
|
|
635
635
|
{ name = "uvicorn" },
|
|
636
636
|
{ name = "websockets" },
|
|
637
637
|
]
|
|
638
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
638
|
+
sdist = { url = "https://files.pythonhosted.org/packages/9c/eb/3c19ce54be3440cece96bffbb2027c57d618ab336d53ef6a962f570ce468/marimo-0.20.4.tar.gz", hash = "sha256:7f46ce837953717504673e33e47fb42a619bf5f9d2000d1a3a3b1663a47c5498", size = 38336283 }
|
|
639
639
|
wheels = [
|
|
640
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
640
|
+
{ url = "https://files.pythonhosted.org/packages/56/62/bf2c92cc7aab69edfb3907e9bf102c37c1e16b8f4bc6ddd4258ae4c8063c/marimo-0.20.4-py3-none-any.whl", hash = "sha256:3200edd7209f470821b58deb4a45e0577889fab1052748d77088f18bef7d9dd8", size = 38752562 },
|
|
641
641
|
]
|
|
642
642
|
|
|
643
643
|
[[package]]
|
|
@@ -1381,26 +1381,26 @@ wheels = [
|
|
|
1381
1381
|
|
|
1382
1382
|
[[package]]
|
|
1383
1383
|
name = "ty"
|
|
1384
|
-
version = "0.0.
|
|
1385
|
-
source = { registry = "https://pypi.org/simple" }
|
|
1386
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1387
|
-
wheels = [
|
|
1388
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1389
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1390
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1391
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1392
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1393
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1394
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1395
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1396
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1397
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1398
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1399
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1400
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1401
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1402
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1403
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1384
|
+
version = "0.0.20"
|
|
1385
|
+
source = { registry = "https://pypi.org/simple" }
|
|
1386
|
+
sdist = { url = "https://files.pythonhosted.org/packages/56/95/8de69bb98417227b01f1b1d743c819d6456c9fd140255b6124b05b17dfd6/ty-0.0.20.tar.gz", hash = "sha256:ebba6be7974c14efbb2a9adda6ac59848f880d7259f089dfa72a093039f1dcc6", size = 5262529 }
|
|
1387
|
+
wheels = [
|
|
1388
|
+
{ url = "https://files.pythonhosted.org/packages/0b/2c/718abe48393e521bf852cd6b0f984766869b09c258d6e38a118768a91731/ty-0.0.20-py3-none-linux_armv6l.whl", hash = "sha256:7cc12769c169c9709a829c2248ee2826b7aae82e92caeac813d856f07c021eae", size = 10333656 },
|
|
1389
|
+
{ url = "https://files.pythonhosted.org/packages/41/0e/eb1c4cc4a12862e2327b72657bcebb10b7d9f17046f1bdcd6457a0211615/ty-0.0.20-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3b777c1bf13bc0a95985ebb8a324b8668a4a9b2e514dde5ccf09e4d55d2ff232", size = 10168505 },
|
|
1390
|
+
{ url = "https://files.pythonhosted.org/packages/89/7f/10230798e673f0dd3094dfd16e43bfd90e9494e7af6e8e7db516fb431ddf/ty-0.0.20-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b2a4a7db48bf8cba30365001bc2cad7fd13c1a5aacdd704cc4b7925de8ca5eb3", size = 9678510 },
|
|
1391
|
+
{ url = "https://files.pythonhosted.org/packages/7a/3d/59d9159577494edd1728f7db77b51bb07884bd21384f517963114e3ab5f6/ty-0.0.20-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6846427b8b353a43483e9c19936dc6a25612573b44c8f7d983dfa317e7f00d4c", size = 10162926 },
|
|
1392
|
+
{ url = "https://files.pythonhosted.org/packages/9c/a8/b7273eec3e802f78eb913fbe0ce0c16ef263723173e06a5776a8359b2c66/ty-0.0.20-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:245ceef5bd88df366869385cf96411cb14696334f8daa75597cf7e41c3012eb8", size = 10171702 },
|
|
1393
|
+
{ url = "https://files.pythonhosted.org/packages/9f/32/5f1144f2f04a275109db06e3498450c4721554215b80ae73652ef412eeab/ty-0.0.20-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c4d21d1cdf67a444d3c37583c17291ddba9382a9871021f3f5d5735e09e85efe", size = 10682552 },
|
|
1394
|
+
{ url = "https://files.pythonhosted.org/packages/6a/db/9f1f637310792f12bd6ed37d5fc8ab39ba1a9b0c6c55a33865e9f1cad840/ty-0.0.20-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bd4ffd907d1bd70e46af9e9a2f88622f215e1bf44658ea43b32c2c0b357299e4", size = 11242605 },
|
|
1395
|
+
{ url = "https://files.pythonhosted.org/packages/1a/68/cc9cae2e732fcfd20ccdffc508407905a023fc8493b8771c392d915528dc/ty-0.0.20-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b6594b58d8b0e9d16a22b3045fc1305db4b132c8d70c17784ab8c7a7cc986807", size = 10974655 },
|
|
1396
|
+
{ url = "https://files.pythonhosted.org/packages/1c/c1/b9e3e3f28fe63486331e653f6aeb4184af8b1fe80542fcf74d2dda40a93d/ty-0.0.20-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3662f890518ce6cf4d7568f57d03906912d2afbf948a01089a28e325b1ef198c", size = 10761325 },
|
|
1397
|
+
{ url = "https://files.pythonhosted.org/packages/39/9e/67db935bdedf219a00fb69ec5437ba24dab66e0f2e706dd54a4eca234b84/ty-0.0.20-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:0e3ffbae58f9f0d17cdc4ac6d175ceae560b7ed7d54f9ddfb1c9f31054bcdc2c", size = 10145793 },
|
|
1398
|
+
{ url = "https://files.pythonhosted.org/packages/c7/de/b0eb815d4dc5a819c7e4faddc2a79058611169f7eef07ccc006531ce228c/ty-0.0.20-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:176e52bc8bb00b0e84efd34583962878a447a3a0e34ecc45fd7097a37554261b", size = 10189640 },
|
|
1399
|
+
{ url = "https://files.pythonhosted.org/packages/b8/71/63734923965cbb70df1da3e93e4b8875434e326b89e9f850611122f279bf/ty-0.0.20-py3-none-musllinux_1_2_i686.whl", hash = "sha256:b2bc73025418e976ca4143dde71fb9025a90754a08ac03e6aa9b80d4bed1294b", size = 10370568 },
|
|
1400
|
+
{ url = "https://files.pythonhosted.org/packages/32/a0/a532c2048533347dff48e9ca98bd86d2c224356e101688a8edaf8d6973fb/ty-0.0.20-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:d52f7c9ec6e363e094b3c389c344d5a140401f14a77f0625e3f28c21918552f5", size = 10853999 },
|
|
1401
|
+
{ url = "https://files.pythonhosted.org/packages/48/88/36c652c658fe96658043e4abc8ea97801de6fb6e63ab50aaa82807bff1d8/ty-0.0.20-py3-none-win32.whl", hash = "sha256:c7d32bfe93f8fcaa52b6eef3f1b930fd7da410c2c94e96f7412c30cfbabf1d17", size = 9744206 },
|
|
1402
|
+
{ url = "https://files.pythonhosted.org/packages/ff/a7/a4a13bed1d7fd9d97aaa3c5bb5e6d3e9a689e6984806cbca2ab4c9233cac/ty-0.0.20-py3-none-win_amd64.whl", hash = "sha256:a5e10f40fc4a0a1cbcb740a4aad5c7ce35d79f030836ea3183b7a28f43170248", size = 10711999 },
|
|
1403
|
+
{ url = "https://files.pythonhosted.org/packages/8d/7e/6bfd748a9f4ff9267ed3329b86a0f02cdf6ab49f87bc36c8a164852f99fc/ty-0.0.20-py3-none-win_arm64.whl", hash = "sha256:53f7a5c12c960e71f160b734f328eff9a35d578af4b67a36b0bb5990ac5cdc27", size = 10150143 },
|
|
1404
1404
|
]
|
|
1405
1405
|
|
|
1406
1406
|
[[package]]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|