cjm-transcript-source-select 0.0.16__tar.gz → 0.0.18__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.
- {cjm_transcript_source_select-0.0.16/cjm_transcript_source_select.egg-info → cjm_transcript_source_select-0.0.18}/PKG-INFO +32 -51
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/README.md +20 -27
- cjm_transcript_source_select-0.0.18/cjm_transcript_source_select/__init__.py +1 -0
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/_modidx.py +0 -2
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/components/preview_panel.py +1 -1
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/components/source_browser.py +1 -1
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/components/step_renderer.py +19 -39
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18/cjm_transcript_source_select.egg-info}/PKG-INFO +32 -51
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select.egg-info/SOURCES.txt +0 -3
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select.egg-info/requires.txt +1 -3
- cjm_transcript_source_select-0.0.18/pyproject.toml +30 -0
- cjm_transcript_source_select-0.0.16/cjm_transcript_source_select/__init__.py +0 -1
- cjm_transcript_source_select-0.0.16/cjm_transcript_source_select.egg-info/not-zip-safe +0 -1
- cjm_transcript_source_select-0.0.16/pyproject.toml +0 -11
- cjm_transcript_source_select-0.0.16/settings.ini +0 -38
- cjm_transcript_source_select-0.0.16/setup.py +0 -63
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/LICENSE +0 -0
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/MANIFEST.in +0 -0
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/components/__init__.py +0 -0
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/components/helpers.py +0 -0
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/components/local_files.py +0 -0
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/components/selection_queue.py +0 -0
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/html_ids.py +0 -0
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/models.py +0 -0
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/routes/__init__.py +0 -0
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/routes/core.py +0 -0
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/routes/filtering.py +0 -0
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/routes/init.py +0 -0
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/routes/local_files.py +0 -0
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/routes/queue.py +0 -0
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/routes/source_browser.py +0 -0
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/routes/tabs.py +0 -0
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/services/__init__.py +0 -0
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/services/source.py +0 -0
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/services/source_utils.py +0 -0
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/utils.py +0 -0
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select.egg-info/dependency_links.txt +0 -0
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select.egg-info/entry_points.txt +0 -0
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select.egg-info/top_level.txt +0 -0
- {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/setup.cfg +0 -0
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: cjm-transcript-source-select
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.18
|
|
4
4
|
Summary: FastHTML source selection component for transcript decomposition workflows, with federated database browsing, drag-drop ordering, and keyboard navigation.
|
|
5
|
-
|
|
6
|
-
Author: Christian J. Mills
|
|
7
|
-
Author-email: 9126128+cj-mills@users.noreply.github.com
|
|
5
|
+
Author-email: "Christian J. Mills" <9126128+cj-mills@users.noreply.github.com>
|
|
8
6
|
License: Apache-2.0
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
Project-URL: Repository, https://github.com/cj-mills/cjm-transcript-source-select
|
|
8
|
+
Project-URL: Documentation, https://cj-mills.github.io/cjm-transcript-source-select
|
|
9
|
+
Keywords: nbdev,jupyter,notebook,python
|
|
12
10
|
Classifier: Natural Language :: English
|
|
13
|
-
Classifier:
|
|
14
|
-
Classifier:
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
15
15
|
Requires-Python: >=3.12
|
|
16
16
|
Description-Content-Type: text/markdown
|
|
17
17
|
License-File: LICENSE
|
|
@@ -29,20 +29,8 @@ Requires-Dist: cjm_source_provider
|
|
|
29
29
|
Requires-Dist: cjm_fasthtml_interactions
|
|
30
30
|
Requires-Dist: cjm_fasthtml_viewport_fit
|
|
31
31
|
Requires-Dist: cjm_fasthtml_virtual_collection
|
|
32
|
-
Requires-Dist: cjm_fasthtml_sortable_queue
|
|
33
|
-
|
|
34
|
-
Dynamic: author
|
|
35
|
-
Dynamic: author-email
|
|
36
|
-
Dynamic: classifier
|
|
37
|
-
Dynamic: description
|
|
38
|
-
Dynamic: description-content-type
|
|
39
|
-
Dynamic: home-page
|
|
40
|
-
Dynamic: keywords
|
|
41
|
-
Dynamic: license
|
|
42
|
-
Dynamic: provides-extra
|
|
43
|
-
Dynamic: requires-dist
|
|
44
|
-
Dynamic: requires-python
|
|
45
|
-
Dynamic: summary
|
|
32
|
+
Requires-Dist: cjm_fasthtml_sortable_queue>=0.0.7
|
|
33
|
+
Dynamic: license-file
|
|
46
34
|
|
|
47
35
|
# cjm-transcript-source-select
|
|
48
36
|
|
|
@@ -106,57 +94,57 @@ graph LR
|
|
|
106
94
|
utils[utils<br/>utils]
|
|
107
95
|
|
|
108
96
|
components_helpers --> models
|
|
109
|
-
components_local_files --> html_ids
|
|
110
97
|
components_local_files --> components_helpers
|
|
98
|
+
components_local_files --> html_ids
|
|
111
99
|
components_preview_panel --> html_ids
|
|
112
100
|
components_source_browser --> services_source_utils
|
|
113
|
-
components_source_browser --> utils
|
|
114
101
|
components_source_browser --> html_ids
|
|
115
|
-
|
|
116
|
-
components_step_renderer --> html_ids
|
|
117
|
-
components_step_renderer --> utils
|
|
102
|
+
components_source_browser --> utils
|
|
118
103
|
components_step_renderer --> components_selection_queue
|
|
119
104
|
components_step_renderer --> models
|
|
120
105
|
components_step_renderer --> components_preview_panel
|
|
106
|
+
components_step_renderer --> utils
|
|
121
107
|
components_step_renderer --> components_local_files
|
|
122
|
-
|
|
123
|
-
|
|
108
|
+
components_step_renderer --> html_ids
|
|
109
|
+
components_step_renderer --> components_source_browser
|
|
124
110
|
routes_core --> html_ids
|
|
125
111
|
routes_core --> components_selection_queue
|
|
126
112
|
routes_core --> services_source
|
|
113
|
+
routes_core --> components_step_renderer
|
|
114
|
+
routes_core --> models
|
|
127
115
|
routes_filtering --> routes_core
|
|
128
116
|
routes_filtering --> services_source_utils
|
|
129
|
-
routes_filtering --> models
|
|
130
117
|
routes_filtering --> services_source
|
|
131
|
-
|
|
118
|
+
routes_filtering --> models
|
|
132
119
|
routes_init --> routes_core
|
|
133
120
|
routes_init --> models
|
|
121
|
+
routes_init --> routes_queue
|
|
134
122
|
routes_init --> routes_filtering
|
|
135
|
-
routes_init --> routes_tabs
|
|
136
|
-
routes_init --> services_source
|
|
137
123
|
routes_init --> routes_source_browser
|
|
138
124
|
routes_init --> routes_local_files
|
|
125
|
+
routes_init --> services_source
|
|
126
|
+
routes_init --> routes_tabs
|
|
139
127
|
routes_local_files --> components_local_files
|
|
140
128
|
routes_local_files --> routes_core
|
|
141
|
-
routes_local_files --> services_source
|
|
142
129
|
routes_local_files --> models
|
|
143
|
-
|
|
130
|
+
routes_local_files --> services_source
|
|
144
131
|
routes_queue --> services_source_utils
|
|
145
|
-
routes_queue -->
|
|
132
|
+
routes_queue --> routes_core
|
|
146
133
|
routes_queue --> components_preview_panel
|
|
147
134
|
routes_queue --> services_source
|
|
148
|
-
|
|
149
|
-
routes_source_browser --> html_ids
|
|
150
|
-
routes_source_browser --> models
|
|
135
|
+
routes_queue --> models
|
|
151
136
|
routes_source_browser --> components_source_browser
|
|
137
|
+
routes_source_browser --> services_source_utils
|
|
138
|
+
routes_source_browser --> routes_core
|
|
152
139
|
routes_source_browser --> components_preview_panel
|
|
140
|
+
routes_source_browser --> html_ids
|
|
153
141
|
routes_source_browser --> services_source
|
|
154
|
-
routes_source_browser -->
|
|
142
|
+
routes_source_browser --> models
|
|
143
|
+
routes_tabs --> services_source
|
|
155
144
|
routes_tabs --> routes_core
|
|
156
145
|
routes_tabs --> services_source_utils
|
|
157
|
-
routes_tabs --> models
|
|
158
146
|
routes_tabs --> components_step_renderer
|
|
159
|
-
routes_tabs -->
|
|
147
|
+
routes_tabs --> models
|
|
160
148
|
```
|
|
161
149
|
|
|
162
150
|
*52 cross-module dependencies detected*
|
|
@@ -1394,13 +1382,6 @@ def _create_parent_keyboard_manager() -> ZoneManager: # Parent keyboard manager
|
|
|
1394
1382
|
"Create the parent keyboard manager with two ghost zones for column switching."
|
|
1395
1383
|
```
|
|
1396
1384
|
|
|
1397
|
-
``` python
|
|
1398
|
-
def _render_selection_keyboard_hints(
|
|
1399
|
-
manager: ZoneManager, # Keyboard zone manager with actions configured
|
|
1400
|
-
) -> Any: # Collapsible keyboard hints component
|
|
1401
|
-
"Render keyboard shortcut hints in a collapsible container."
|
|
1402
|
-
```
|
|
1403
|
-
|
|
1404
1385
|
``` python
|
|
1405
1386
|
def _render_selection_stats(
|
|
1406
1387
|
selected_sources: List[Dict[str, str]], # Selected sources
|
|
@@ -60,57 +60,57 @@ graph LR
|
|
|
60
60
|
utils[utils<br/>utils]
|
|
61
61
|
|
|
62
62
|
components_helpers --> models
|
|
63
|
-
components_local_files --> html_ids
|
|
64
63
|
components_local_files --> components_helpers
|
|
64
|
+
components_local_files --> html_ids
|
|
65
65
|
components_preview_panel --> html_ids
|
|
66
66
|
components_source_browser --> services_source_utils
|
|
67
|
-
components_source_browser --> utils
|
|
68
67
|
components_source_browser --> html_ids
|
|
69
|
-
|
|
70
|
-
components_step_renderer --> html_ids
|
|
71
|
-
components_step_renderer --> utils
|
|
68
|
+
components_source_browser --> utils
|
|
72
69
|
components_step_renderer --> components_selection_queue
|
|
73
70
|
components_step_renderer --> models
|
|
74
71
|
components_step_renderer --> components_preview_panel
|
|
72
|
+
components_step_renderer --> utils
|
|
75
73
|
components_step_renderer --> components_local_files
|
|
76
|
-
|
|
77
|
-
|
|
74
|
+
components_step_renderer --> html_ids
|
|
75
|
+
components_step_renderer --> components_source_browser
|
|
78
76
|
routes_core --> html_ids
|
|
79
77
|
routes_core --> components_selection_queue
|
|
80
78
|
routes_core --> services_source
|
|
79
|
+
routes_core --> components_step_renderer
|
|
80
|
+
routes_core --> models
|
|
81
81
|
routes_filtering --> routes_core
|
|
82
82
|
routes_filtering --> services_source_utils
|
|
83
|
-
routes_filtering --> models
|
|
84
83
|
routes_filtering --> services_source
|
|
85
|
-
|
|
84
|
+
routes_filtering --> models
|
|
86
85
|
routes_init --> routes_core
|
|
87
86
|
routes_init --> models
|
|
87
|
+
routes_init --> routes_queue
|
|
88
88
|
routes_init --> routes_filtering
|
|
89
|
-
routes_init --> routes_tabs
|
|
90
|
-
routes_init --> services_source
|
|
91
89
|
routes_init --> routes_source_browser
|
|
92
90
|
routes_init --> routes_local_files
|
|
91
|
+
routes_init --> services_source
|
|
92
|
+
routes_init --> routes_tabs
|
|
93
93
|
routes_local_files --> components_local_files
|
|
94
94
|
routes_local_files --> routes_core
|
|
95
|
-
routes_local_files --> services_source
|
|
96
95
|
routes_local_files --> models
|
|
97
|
-
|
|
96
|
+
routes_local_files --> services_source
|
|
98
97
|
routes_queue --> services_source_utils
|
|
99
|
-
routes_queue -->
|
|
98
|
+
routes_queue --> routes_core
|
|
100
99
|
routes_queue --> components_preview_panel
|
|
101
100
|
routes_queue --> services_source
|
|
102
|
-
|
|
103
|
-
routes_source_browser --> html_ids
|
|
104
|
-
routes_source_browser --> models
|
|
101
|
+
routes_queue --> models
|
|
105
102
|
routes_source_browser --> components_source_browser
|
|
103
|
+
routes_source_browser --> services_source_utils
|
|
104
|
+
routes_source_browser --> routes_core
|
|
106
105
|
routes_source_browser --> components_preview_panel
|
|
106
|
+
routes_source_browser --> html_ids
|
|
107
107
|
routes_source_browser --> services_source
|
|
108
|
-
routes_source_browser -->
|
|
108
|
+
routes_source_browser --> models
|
|
109
|
+
routes_tabs --> services_source
|
|
109
110
|
routes_tabs --> routes_core
|
|
110
111
|
routes_tabs --> services_source_utils
|
|
111
|
-
routes_tabs --> models
|
|
112
112
|
routes_tabs --> components_step_renderer
|
|
113
|
-
routes_tabs -->
|
|
113
|
+
routes_tabs --> models
|
|
114
114
|
```
|
|
115
115
|
|
|
116
116
|
*52 cross-module dependencies detected*
|
|
@@ -1348,13 +1348,6 @@ def _create_parent_keyboard_manager() -> ZoneManager: # Parent keyboard manager
|
|
|
1348
1348
|
"Create the parent keyboard manager with two ghost zones for column switching."
|
|
1349
1349
|
```
|
|
1350
1350
|
|
|
1351
|
-
``` python
|
|
1352
|
-
def _render_selection_keyboard_hints(
|
|
1353
|
-
manager: ZoneManager, # Keyboard zone manager with actions configured
|
|
1354
|
-
) -> Any: # Collapsible keyboard hints component
|
|
1355
|
-
"Render keyboard shortcut hints in a collapsible container."
|
|
1356
|
-
```
|
|
1357
|
-
|
|
1358
1351
|
``` python
|
|
1359
1352
|
def _render_selection_stats(
|
|
1360
1353
|
selected_sources: List[Dict[str, str]], # Selected sources
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.0.18"
|
|
@@ -59,8 +59,6 @@ d = { 'settings': { 'branch': 'main',
|
|
|
59
59
|
'cjm_transcript_source_select/components/step_renderer.py'),
|
|
60
60
|
'cjm_transcript_source_select.components.step_renderer._render_selection_footer': ( 'components/step_renderer.html#_render_selection_footer',
|
|
61
61
|
'cjm_transcript_source_select/components/step_renderer.py'),
|
|
62
|
-
'cjm_transcript_source_select.components.step_renderer._render_selection_keyboard_hints': ( 'components/step_renderer.html#_render_selection_keyboard_hints',
|
|
63
|
-
'cjm_transcript_source_select/components/step_renderer.py'),
|
|
64
62
|
'cjm_transcript_source_select.components.step_renderer._render_selection_stats': ( 'components/step_renderer.html#_render_selection_stats',
|
|
65
63
|
'cjm_transcript_source_select/components/step_renderer.py'),
|
|
66
64
|
'cjm_transcript_source_select.components.step_renderer._render_source_tabs': ( 'components/step_renderer.html#_render_source_tabs',
|
|
@@ -402,7 +402,7 @@ def _render_source_browser_vc(
|
|
|
402
402
|
id=SelectionHtmlIds.SOURCE_BROWSER,
|
|
403
403
|
cls=combine_classes(
|
|
404
404
|
w.full, grow(), min_h(64),
|
|
405
|
-
bg_dui.
|
|
405
|
+
bg_dui.base_200, border_radius.box, shadow.lg, border_dui.base_300,
|
|
406
406
|
flex_display, flex_direction.col, overflow.hidden,
|
|
407
407
|
),
|
|
408
408
|
)
|
|
@@ -9,14 +9,11 @@ __all__ = ['SD_TAB_PREV_BTN', 'SD_TAB_NEXT_BTN', 'SD_PREVIEW_BTN', 'FB_SYSTEM_ID
|
|
|
9
9
|
from typing import Any, Callable, Dict, List, Optional
|
|
10
10
|
|
|
11
11
|
from fasthtml.common import (
|
|
12
|
-
Div, H2, P, Span, Input, Script
|
|
12
|
+
Div, H2, P, Span, Input, Script
|
|
13
13
|
)
|
|
14
14
|
|
|
15
15
|
# DaisyUI components
|
|
16
16
|
from cjm_fasthtml_daisyui.components.data_display.badge import badge, badge_colors, badge_sizes
|
|
17
|
-
from cjm_fasthtml_daisyui.components.data_display.collapse import (
|
|
18
|
-
collapse, collapse_title, collapse_content, collapse_modifiers
|
|
19
|
-
)
|
|
20
17
|
from cjm_fasthtml_daisyui.components.navigation.tabs import tabs, tabs_styles, tab
|
|
21
18
|
from cjm_fasthtml_daisyui.utilities.semantic_colors import bg_dui, text_dui, border_dui, ring_dui, shadow_dui
|
|
22
19
|
from cjm_fasthtml_daisyui.utilities.border_radius import border_radius
|
|
@@ -49,7 +46,7 @@ from cjm_fasthtml_keyboard_navigation.core.actions import KeyAction
|
|
|
49
46
|
from cjm_fasthtml_keyboard_navigation.core.manager import ZoneManager
|
|
50
47
|
from cjm_fasthtml_keyboard_navigation.core.navigation import ScrollOnly
|
|
51
48
|
from cjm_fasthtml_keyboard_navigation.components.system import render_keyboard_system
|
|
52
|
-
from cjm_fasthtml_keyboard_navigation.components.
|
|
49
|
+
from cjm_fasthtml_keyboard_navigation.components.hints_modal import render_keyboard_hints_modal
|
|
53
50
|
|
|
54
51
|
# Source browser system ID (for hierarchy wiring)
|
|
55
52
|
from .source_browser import SB_SYSTEM_ID
|
|
@@ -148,32 +145,6 @@ def _create_parent_keyboard_manager() -> ZoneManager: # Parent keyboard manager
|
|
|
148
145
|
state_hidden_inputs=True,
|
|
149
146
|
)
|
|
150
147
|
|
|
151
|
-
# %% ../../nbs/components/step_renderer.ipynb #52i7b5ddglt
|
|
152
|
-
def _render_selection_keyboard_hints(
|
|
153
|
-
manager: ZoneManager, # Keyboard zone manager with actions configured
|
|
154
|
-
) -> Any: # Collapsible keyboard hints component
|
|
155
|
-
"""Render keyboard shortcut hints in a collapsible container."""
|
|
156
|
-
hints = render_keyboard_hints(
|
|
157
|
-
manager,
|
|
158
|
-
include_navigation=True,
|
|
159
|
-
include_zone_switch=True,
|
|
160
|
-
badge_style="outline",
|
|
161
|
-
container_id="sd-keyboard-hints",
|
|
162
|
-
use_icons=False
|
|
163
|
-
)
|
|
164
|
-
|
|
165
|
-
return Details(
|
|
166
|
-
Summary(
|
|
167
|
-
"Keyboard Shortcuts",
|
|
168
|
-
cls=combine_classes(collapse_title, font_size.sm, font_weight.medium)
|
|
169
|
-
),
|
|
170
|
-
Div(
|
|
171
|
-
hints,
|
|
172
|
-
cls=collapse_content
|
|
173
|
-
),
|
|
174
|
-
cls=combine_classes(collapse, collapse_modifiers.arrow, bg_dui.base_200)
|
|
175
|
-
)
|
|
176
|
-
|
|
177
148
|
# %% ../../nbs/components/step_renderer.ipynb #8d397d19
|
|
178
149
|
def _render_selection_stats(
|
|
179
150
|
selected_sources: List[Dict[str, str]], # Selected sources
|
|
@@ -286,7 +257,7 @@ def _render_source_tabs(
|
|
|
286
257
|
grow(),
|
|
287
258
|
min_h(0),
|
|
288
259
|
min_w._0, # Allow content to shrink below intrinsic width
|
|
289
|
-
bg_dui.
|
|
260
|
+
bg_dui.base_200,
|
|
290
261
|
border_radius.box,
|
|
291
262
|
overflow.hidden, # Propagate height constraint to children
|
|
292
263
|
flex_display,
|
|
@@ -499,16 +470,21 @@ def render_selection_step(
|
|
|
499
470
|
# Hierarchy wiring script (must come after all keyboard systems are rendered)
|
|
500
471
|
hierarchy_js = _generate_hierarchy_js(active_tab)
|
|
501
472
|
|
|
473
|
+
# Keyboard hints modal
|
|
474
|
+
hints_modal, hints_trigger, hints_script = render_keyboard_hints_modal(kb_manager)
|
|
475
|
+
|
|
502
476
|
return Div(
|
|
503
|
-
# Header with keyboard hints
|
|
477
|
+
# Header with keyboard hints trigger
|
|
504
478
|
Div(
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
479
|
+
Div(
|
|
480
|
+
H2("Select Source Material", cls=combine_classes(font_size._3xl, font_weight.bold)),
|
|
481
|
+
P(
|
|
482
|
+
"Choose transcription sources to decompose into a structural spine.",
|
|
483
|
+
cls=combine_classes(text_dui.base_content.opacity(70), m.b(4))
|
|
484
|
+
),
|
|
509
485
|
),
|
|
510
|
-
|
|
511
|
-
cls=combine_classes(m.b(4))
|
|
486
|
+
hints_trigger,
|
|
487
|
+
cls=combine_classes(flex_display, items.start, justify.between, m.b(4))
|
|
512
488
|
),
|
|
513
489
|
|
|
514
490
|
# Main content area (two columns: tabs + queue)
|
|
@@ -571,6 +547,10 @@ def render_selection_step(
|
|
|
571
547
|
# Script runner for OOB-triggered JS (duplicate rejection flash)
|
|
572
548
|
Div(id=SelectionHtmlIds.SCRIPT_RUNNER),
|
|
573
549
|
|
|
550
|
+
# Keyboard hints modal + ? key listener
|
|
551
|
+
hints_modal,
|
|
552
|
+
hints_script,
|
|
553
|
+
|
|
574
554
|
id=SelectionHtmlIds.SOURCE_SELECTOR,
|
|
575
555
|
cls=combine_classes(
|
|
576
556
|
w.full,
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: cjm-transcript-source-select
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.18
|
|
4
4
|
Summary: FastHTML source selection component for transcript decomposition workflows, with federated database browsing, drag-drop ordering, and keyboard navigation.
|
|
5
|
-
|
|
6
|
-
Author: Christian J. Mills
|
|
7
|
-
Author-email: 9126128+cj-mills@users.noreply.github.com
|
|
5
|
+
Author-email: "Christian J. Mills" <9126128+cj-mills@users.noreply.github.com>
|
|
8
6
|
License: Apache-2.0
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
Project-URL: Repository, https://github.com/cj-mills/cjm-transcript-source-select
|
|
8
|
+
Project-URL: Documentation, https://cj-mills.github.io/cjm-transcript-source-select
|
|
9
|
+
Keywords: nbdev,jupyter,notebook,python
|
|
12
10
|
Classifier: Natural Language :: English
|
|
13
|
-
Classifier:
|
|
14
|
-
Classifier:
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
15
15
|
Requires-Python: >=3.12
|
|
16
16
|
Description-Content-Type: text/markdown
|
|
17
17
|
License-File: LICENSE
|
|
@@ -29,20 +29,8 @@ Requires-Dist: cjm_source_provider
|
|
|
29
29
|
Requires-Dist: cjm_fasthtml_interactions
|
|
30
30
|
Requires-Dist: cjm_fasthtml_viewport_fit
|
|
31
31
|
Requires-Dist: cjm_fasthtml_virtual_collection
|
|
32
|
-
Requires-Dist: cjm_fasthtml_sortable_queue
|
|
33
|
-
|
|
34
|
-
Dynamic: author
|
|
35
|
-
Dynamic: author-email
|
|
36
|
-
Dynamic: classifier
|
|
37
|
-
Dynamic: description
|
|
38
|
-
Dynamic: description-content-type
|
|
39
|
-
Dynamic: home-page
|
|
40
|
-
Dynamic: keywords
|
|
41
|
-
Dynamic: license
|
|
42
|
-
Dynamic: provides-extra
|
|
43
|
-
Dynamic: requires-dist
|
|
44
|
-
Dynamic: requires-python
|
|
45
|
-
Dynamic: summary
|
|
32
|
+
Requires-Dist: cjm_fasthtml_sortable_queue>=0.0.7
|
|
33
|
+
Dynamic: license-file
|
|
46
34
|
|
|
47
35
|
# cjm-transcript-source-select
|
|
48
36
|
|
|
@@ -106,57 +94,57 @@ graph LR
|
|
|
106
94
|
utils[utils<br/>utils]
|
|
107
95
|
|
|
108
96
|
components_helpers --> models
|
|
109
|
-
components_local_files --> html_ids
|
|
110
97
|
components_local_files --> components_helpers
|
|
98
|
+
components_local_files --> html_ids
|
|
111
99
|
components_preview_panel --> html_ids
|
|
112
100
|
components_source_browser --> services_source_utils
|
|
113
|
-
components_source_browser --> utils
|
|
114
101
|
components_source_browser --> html_ids
|
|
115
|
-
|
|
116
|
-
components_step_renderer --> html_ids
|
|
117
|
-
components_step_renderer --> utils
|
|
102
|
+
components_source_browser --> utils
|
|
118
103
|
components_step_renderer --> components_selection_queue
|
|
119
104
|
components_step_renderer --> models
|
|
120
105
|
components_step_renderer --> components_preview_panel
|
|
106
|
+
components_step_renderer --> utils
|
|
121
107
|
components_step_renderer --> components_local_files
|
|
122
|
-
|
|
123
|
-
|
|
108
|
+
components_step_renderer --> html_ids
|
|
109
|
+
components_step_renderer --> components_source_browser
|
|
124
110
|
routes_core --> html_ids
|
|
125
111
|
routes_core --> components_selection_queue
|
|
126
112
|
routes_core --> services_source
|
|
113
|
+
routes_core --> components_step_renderer
|
|
114
|
+
routes_core --> models
|
|
127
115
|
routes_filtering --> routes_core
|
|
128
116
|
routes_filtering --> services_source_utils
|
|
129
|
-
routes_filtering --> models
|
|
130
117
|
routes_filtering --> services_source
|
|
131
|
-
|
|
118
|
+
routes_filtering --> models
|
|
132
119
|
routes_init --> routes_core
|
|
133
120
|
routes_init --> models
|
|
121
|
+
routes_init --> routes_queue
|
|
134
122
|
routes_init --> routes_filtering
|
|
135
|
-
routes_init --> routes_tabs
|
|
136
|
-
routes_init --> services_source
|
|
137
123
|
routes_init --> routes_source_browser
|
|
138
124
|
routes_init --> routes_local_files
|
|
125
|
+
routes_init --> services_source
|
|
126
|
+
routes_init --> routes_tabs
|
|
139
127
|
routes_local_files --> components_local_files
|
|
140
128
|
routes_local_files --> routes_core
|
|
141
|
-
routes_local_files --> services_source
|
|
142
129
|
routes_local_files --> models
|
|
143
|
-
|
|
130
|
+
routes_local_files --> services_source
|
|
144
131
|
routes_queue --> services_source_utils
|
|
145
|
-
routes_queue -->
|
|
132
|
+
routes_queue --> routes_core
|
|
146
133
|
routes_queue --> components_preview_panel
|
|
147
134
|
routes_queue --> services_source
|
|
148
|
-
|
|
149
|
-
routes_source_browser --> html_ids
|
|
150
|
-
routes_source_browser --> models
|
|
135
|
+
routes_queue --> models
|
|
151
136
|
routes_source_browser --> components_source_browser
|
|
137
|
+
routes_source_browser --> services_source_utils
|
|
138
|
+
routes_source_browser --> routes_core
|
|
152
139
|
routes_source_browser --> components_preview_panel
|
|
140
|
+
routes_source_browser --> html_ids
|
|
153
141
|
routes_source_browser --> services_source
|
|
154
|
-
routes_source_browser -->
|
|
142
|
+
routes_source_browser --> models
|
|
143
|
+
routes_tabs --> services_source
|
|
155
144
|
routes_tabs --> routes_core
|
|
156
145
|
routes_tabs --> services_source_utils
|
|
157
|
-
routes_tabs --> models
|
|
158
146
|
routes_tabs --> components_step_renderer
|
|
159
|
-
routes_tabs -->
|
|
147
|
+
routes_tabs --> models
|
|
160
148
|
```
|
|
161
149
|
|
|
162
150
|
*52 cross-module dependencies detected*
|
|
@@ -1394,13 +1382,6 @@ def _create_parent_keyboard_manager() -> ZoneManager: # Parent keyboard manager
|
|
|
1394
1382
|
"Create the parent keyboard manager with two ghost zones for column switching."
|
|
1395
1383
|
```
|
|
1396
1384
|
|
|
1397
|
-
``` python
|
|
1398
|
-
def _render_selection_keyboard_hints(
|
|
1399
|
-
manager: ZoneManager, # Keyboard zone manager with actions configured
|
|
1400
|
-
) -> Any: # Collapsible keyboard hints component
|
|
1401
|
-
"Render keyboard shortcut hints in a collapsible container."
|
|
1402
|
-
```
|
|
1403
|
-
|
|
1404
1385
|
``` python
|
|
1405
1386
|
def _render_selection_stats(
|
|
1406
1387
|
selected_sources: List[Dict[str, str]], # Selected sources
|
|
@@ -2,8 +2,6 @@ LICENSE
|
|
|
2
2
|
MANIFEST.in
|
|
3
3
|
README.md
|
|
4
4
|
pyproject.toml
|
|
5
|
-
settings.ini
|
|
6
|
-
setup.py
|
|
7
5
|
cjm_transcript_source_select/__init__.py
|
|
8
6
|
cjm_transcript_source_select/_modidx.py
|
|
9
7
|
cjm_transcript_source_select/html_ids.py
|
|
@@ -13,7 +11,6 @@ cjm_transcript_source_select.egg-info/PKG-INFO
|
|
|
13
11
|
cjm_transcript_source_select.egg-info/SOURCES.txt
|
|
14
12
|
cjm_transcript_source_select.egg-info/dependency_links.txt
|
|
15
13
|
cjm_transcript_source_select.egg-info/entry_points.txt
|
|
16
|
-
cjm_transcript_source_select.egg-info/not-zip-safe
|
|
17
14
|
cjm_transcript_source_select.egg-info/requires.txt
|
|
18
15
|
cjm_transcript_source_select.egg-info/top_level.txt
|
|
19
16
|
cjm_transcript_source_select/components/__init__.py
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=64"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "cjm-transcript-source-select"
|
|
7
|
+
dynamic = ["version"]
|
|
8
|
+
description = "FastHTML source selection component for transcript decomposition workflows, with federated database browsing, drag-drop ordering, and keyboard navigation."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.12"
|
|
11
|
+
license = {text = "Apache-2.0"}
|
|
12
|
+
authors = [{name = "Christian J. Mills", email = "9126128+cj-mills@users.noreply.github.com"}]
|
|
13
|
+
keywords = ['nbdev', 'jupyter', 'notebook', 'python']
|
|
14
|
+
classifiers = ["Natural Language :: English", "Intended Audience :: Developers", "Development Status :: 3 - Alpha", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only"]
|
|
15
|
+
dependencies = ['cjm-plugin-system', 'cjm-transcription-plugin-system', 'cjm-fasthtml-app-core', 'cjm-fasthtml-daisyui', 'cjm_fasthtml_lucide_icons', 'cjm_fasthtml_file_browser', 'cjm_fasthtml_keyboard_navigation', 'duckdb', 'pandas', 'cjm_workflow_state', 'cjm_source_provider', 'cjm_fasthtml_interactions', 'cjm_fasthtml_viewport_fit', 'cjm_fasthtml_virtual_collection', 'cjm_fasthtml_sortable_queue>=0.0.7']
|
|
16
|
+
|
|
17
|
+
[project.urls]
|
|
18
|
+
Repository = "https://github.com/cj-mills/cjm-transcript-source-select"
|
|
19
|
+
Documentation = "https://cj-mills.github.io/cjm-transcript-source-select"
|
|
20
|
+
|
|
21
|
+
[project.entry-points.nbdev]
|
|
22
|
+
cjm_transcript_source_select = "cjm_transcript_source_select._modidx:d"
|
|
23
|
+
|
|
24
|
+
[tool.setuptools.dynamic]
|
|
25
|
+
version = {attr = "cjm_transcript_source_select.__version__"}
|
|
26
|
+
|
|
27
|
+
[tool.setuptools.packages.find]
|
|
28
|
+
include = ["cjm_transcript_source_select"]
|
|
29
|
+
|
|
30
|
+
[tool.nbdev]
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.0.16"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
[build-system]
|
|
2
|
-
requires = ["setuptools>=64.0,<76.0"]
|
|
3
|
-
build-backend = "setuptools.build_meta"
|
|
4
|
-
|
|
5
|
-
[project]
|
|
6
|
-
name="cjm-transcript-source-select"
|
|
7
|
-
requires-python=">=3.12"
|
|
8
|
-
dynamic = [ "keywords", "description", "version", "dependencies", "optional-dependencies", "readme", "license", "authors", "classifiers", "entry-points", "scripts", "urls"]
|
|
9
|
-
|
|
10
|
-
[tool.uv]
|
|
11
|
-
cache-keys = [{ file = "pyproject.toml" }, { file = "settings.ini" }, { file = "setup.py" }]
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
[DEFAULT]
|
|
2
|
-
repo = cjm-transcript-source-select
|
|
3
|
-
lib_name = cjm-transcript-source-select
|
|
4
|
-
version = 0.0.16
|
|
5
|
-
min_python = 3.12
|
|
6
|
-
license = apache2
|
|
7
|
-
black_formatting = False
|
|
8
|
-
doc_path = _docs
|
|
9
|
-
lib_path = cjm_transcript_source_select
|
|
10
|
-
nbs_path = nbs
|
|
11
|
-
recursive = True
|
|
12
|
-
tst_flags = notest
|
|
13
|
-
put_version_in_init = True
|
|
14
|
-
update_pyproject = True
|
|
15
|
-
branch = main
|
|
16
|
-
custom_sidebar = False
|
|
17
|
-
doc_host = https://cj-mills.github.io
|
|
18
|
-
doc_baseurl = /cjm-transcript-source-select
|
|
19
|
-
git_url = https://github.com/cj-mills/cjm-transcript-source-select
|
|
20
|
-
title = cjm-transcript-source-select
|
|
21
|
-
audience = Developers
|
|
22
|
-
author = Christian J. Mills
|
|
23
|
-
author_email = 9126128+cj-mills@users.noreply.github.com
|
|
24
|
-
copyright = 2026 onwards, Christian J. Mills
|
|
25
|
-
description = FastHTML source selection component for transcript decomposition workflows, with federated database browsing, drag-drop ordering, and keyboard navigation.
|
|
26
|
-
keywords = nbdev jupyter notebook python
|
|
27
|
-
language = English
|
|
28
|
-
status = 3
|
|
29
|
-
user = cj-mills
|
|
30
|
-
requirements = cjm-plugin-system cjm-transcription-plugin-system cjm-fasthtml-app-core cjm-fasthtml-daisyui cjm_fasthtml_lucide_icons cjm_fasthtml_file_browser cjm_fasthtml_keyboard_navigation duckdb pandas cjm_workflow_state cjm_source_provider cjm_fasthtml_interactions cjm_fasthtml_viewport_fit cjm_fasthtml_virtual_collection cjm_fasthtml_sortable_queue
|
|
31
|
-
readme_nb = index.ipynb
|
|
32
|
-
allowed_metadata_keys =
|
|
33
|
-
allowed_cell_metadata_keys =
|
|
34
|
-
jupyter_hooks = False
|
|
35
|
-
clean_ids = True
|
|
36
|
-
clear_all = False
|
|
37
|
-
skip_procs =
|
|
38
|
-
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
from pkg_resources import parse_version
|
|
2
|
-
from configparser import ConfigParser
|
|
3
|
-
import setuptools, shlex
|
|
4
|
-
assert parse_version(setuptools.__version__)>=parse_version('36.2')
|
|
5
|
-
|
|
6
|
-
# note: all settings are in settings.ini; edit there, not here
|
|
7
|
-
config = ConfigParser(delimiters=['='])
|
|
8
|
-
config.read('settings.ini', encoding='utf-8')
|
|
9
|
-
cfg = config['DEFAULT']
|
|
10
|
-
|
|
11
|
-
cfg_keys = 'version description keywords author author_email'.split()
|
|
12
|
-
expected = cfg_keys + "lib_name user branch license status min_python audience language".split()
|
|
13
|
-
for o in expected: assert o in cfg, "missing expected setting: {}".format(o)
|
|
14
|
-
setup_cfg = {o:cfg[o] for o in cfg_keys}
|
|
15
|
-
|
|
16
|
-
licenses = {
|
|
17
|
-
'apache2': 'Apache-2.0',
|
|
18
|
-
'mit': 'MIT',
|
|
19
|
-
'gpl2': 'GPL-2.0-only',
|
|
20
|
-
'gpl3': 'GPL-3.0-or-later',
|
|
21
|
-
'bsd3': 'BSD-3-Clause',
|
|
22
|
-
}
|
|
23
|
-
statuses = [ '1 - Planning', '2 - Pre-Alpha', '3 - Alpha',
|
|
24
|
-
'4 - Beta', '5 - Production/Stable', '6 - Mature', '7 - Inactive' ]
|
|
25
|
-
py_versions = '3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13'.split()
|
|
26
|
-
|
|
27
|
-
requirements = shlex.split(cfg.get('requirements', ''))
|
|
28
|
-
if cfg.get('pip_requirements'): requirements += shlex.split(cfg.get('pip_requirements', ''))
|
|
29
|
-
min_python = cfg['min_python']
|
|
30
|
-
dev_requirements = (cfg.get('dev_requirements') or '').split()
|
|
31
|
-
|
|
32
|
-
package_data = dict()
|
|
33
|
-
pkg_data = cfg.get('package_data', None)
|
|
34
|
-
if pkg_data:
|
|
35
|
-
package_data[cfg['lib_name']] = pkg_data.split() # split as multiple files might be listed
|
|
36
|
-
# Add package data to setup_cfg for setuptools.setup(..., **setup_cfg)
|
|
37
|
-
setup_cfg['package_data'] = package_data
|
|
38
|
-
|
|
39
|
-
setuptools.setup(
|
|
40
|
-
name = cfg['lib_name'],
|
|
41
|
-
license = licenses.get(cfg['license'].lower(), cfg['license']),
|
|
42
|
-
classifiers = [
|
|
43
|
-
'Development Status :: ' + statuses[int(cfg['status'])],
|
|
44
|
-
'Intended Audience :: ' + cfg['audience'].title(),
|
|
45
|
-
'Natural Language :: ' + cfg['language'].title(),
|
|
46
|
-
] + ['Programming Language :: Python :: '+o for o in py_versions[py_versions.index(min_python):]],
|
|
47
|
-
url = cfg['git_url'],
|
|
48
|
-
packages = setuptools.find_packages(),
|
|
49
|
-
include_package_data = True,
|
|
50
|
-
install_requires = requirements,
|
|
51
|
-
extras_require={ 'dev': dev_requirements },
|
|
52
|
-
dependency_links = cfg.get('dep_links','').split(),
|
|
53
|
-
python_requires = '>=' + cfg['min_python'],
|
|
54
|
-
long_description = open('README.md', encoding='utf-8').read(),
|
|
55
|
-
long_description_content_type = 'text/markdown',
|
|
56
|
-
zip_safe = False,
|
|
57
|
-
entry_points = {
|
|
58
|
-
'console_scripts': cfg.get('console_scripts','').split(),
|
|
59
|
-
'nbdev': [f'{cfg.get("lib_path")}={cfg.get("lib_path")}._modidx:d']
|
|
60
|
-
},
|
|
61
|
-
**setup_cfg)
|
|
62
|
-
|
|
63
|
-
|
|
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
|