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.
Files changed (40) hide show
  1. {cjm_transcript_source_select-0.0.16/cjm_transcript_source_select.egg-info → cjm_transcript_source_select-0.0.18}/PKG-INFO +32 -51
  2. {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/README.md +20 -27
  3. cjm_transcript_source_select-0.0.18/cjm_transcript_source_select/__init__.py +1 -0
  4. {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/_modidx.py +0 -2
  5. {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/components/preview_panel.py +1 -1
  6. {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/components/source_browser.py +1 -1
  7. {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/components/step_renderer.py +19 -39
  8. {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18/cjm_transcript_source_select.egg-info}/PKG-INFO +32 -51
  9. {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select.egg-info/SOURCES.txt +0 -3
  10. {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select.egg-info/requires.txt +1 -3
  11. cjm_transcript_source_select-0.0.18/pyproject.toml +30 -0
  12. cjm_transcript_source_select-0.0.16/cjm_transcript_source_select/__init__.py +0 -1
  13. cjm_transcript_source_select-0.0.16/cjm_transcript_source_select.egg-info/not-zip-safe +0 -1
  14. cjm_transcript_source_select-0.0.16/pyproject.toml +0 -11
  15. cjm_transcript_source_select-0.0.16/settings.ini +0 -38
  16. cjm_transcript_source_select-0.0.16/setup.py +0 -63
  17. {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/LICENSE +0 -0
  18. {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/MANIFEST.in +0 -0
  19. {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/components/__init__.py +0 -0
  20. {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/components/helpers.py +0 -0
  21. {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/components/local_files.py +0 -0
  22. {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/components/selection_queue.py +0 -0
  23. {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/html_ids.py +0 -0
  24. {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/models.py +0 -0
  25. {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/routes/__init__.py +0 -0
  26. {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/routes/core.py +0 -0
  27. {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/routes/filtering.py +0 -0
  28. {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/routes/init.py +0 -0
  29. {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/routes/local_files.py +0 -0
  30. {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/routes/queue.py +0 -0
  31. {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/routes/source_browser.py +0 -0
  32. {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/routes/tabs.py +0 -0
  33. {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/services/__init__.py +0 -0
  34. {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/services/source.py +0 -0
  35. {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/services/source_utils.py +0 -0
  36. {cjm_transcript_source_select-0.0.16 → cjm_transcript_source_select-0.0.18}/cjm_transcript_source_select/utils.py +0 -0
  37. {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
  38. {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
  39. {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
  40. {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.2
1
+ Metadata-Version: 2.4
2
2
  Name: cjm-transcript-source-select
3
- Version: 0.0.16
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
- Home-page: https://github.com/cj-mills/cjm-transcript-source-select
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
- Keywords: nbdev jupyter notebook python
10
- Classifier: Development Status :: 4 - Beta
11
- Classifier: Intended Audience :: Developers
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: Programming Language :: Python :: 3.12
14
- Classifier: Programming Language :: Python :: 3.13
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
- Provides-Extra: dev
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
- components_step_renderer --> components_source_browser
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
- routes_core --> components_step_renderer
123
- routes_core --> models
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
- routes_init --> routes_queue
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
- routes_queue --> routes_core
130
+ routes_local_files --> services_source
144
131
  routes_queue --> services_source_utils
145
- routes_queue --> models
132
+ routes_queue --> routes_core
146
133
  routes_queue --> components_preview_panel
147
134
  routes_queue --> services_source
148
- routes_source_browser --> routes_core
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 --> services_source_utils
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 --> services_source
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
- components_step_renderer --> components_source_browser
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
- routes_core --> components_step_renderer
77
- routes_core --> models
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
- routes_init --> routes_queue
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
- routes_queue --> routes_core
96
+ routes_local_files --> services_source
98
97
  routes_queue --> services_source_utils
99
- routes_queue --> models
98
+ routes_queue --> routes_core
100
99
  routes_queue --> components_preview_panel
101
100
  routes_queue --> services_source
102
- routes_source_browser --> routes_core
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 --> services_source_utils
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 --> services_source
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',
@@ -95,7 +95,7 @@ def _render_preview_panel(
95
95
  collapse,
96
96
  collapse_modifiers.arrow,
97
97
  w.full,
98
- bg_dui.base_100,
98
+ bg_dui.base_200,
99
99
  border_radius.box,
100
100
  shadow.lg,
101
101
  shadow_dui.base_300,
@@ -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.base_100, border_radius.box, shadow.lg, border_dui.base_300,
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, Details, Summary
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.hints import render_keyboard_hints
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.base_100,
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
- H2("Select Source Material", cls=combine_classes(font_size._3xl, font_weight.bold)),
506
- P(
507
- "Choose transcription sources to decompose into a structural spine.",
508
- cls=combine_classes(text_dui.base_content.opacity(70), m.b(4))
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
- _render_selection_keyboard_hints(kb_manager),
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.2
1
+ Metadata-Version: 2.4
2
2
  Name: cjm-transcript-source-select
3
- Version: 0.0.16
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
- Home-page: https://github.com/cj-mills/cjm-transcript-source-select
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
- Keywords: nbdev jupyter notebook python
10
- Classifier: Development Status :: 4 - Beta
11
- Classifier: Intended Audience :: Developers
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: Programming Language :: Python :: 3.12
14
- Classifier: Programming Language :: Python :: 3.13
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
- Provides-Extra: dev
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
- components_step_renderer --> components_source_browser
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
- routes_core --> components_step_renderer
123
- routes_core --> models
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
- routes_init --> routes_queue
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
- routes_queue --> routes_core
130
+ routes_local_files --> services_source
144
131
  routes_queue --> services_source_utils
145
- routes_queue --> models
132
+ routes_queue --> routes_core
146
133
  routes_queue --> components_preview_panel
147
134
  routes_queue --> services_source
148
- routes_source_browser --> routes_core
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 --> services_source_utils
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 --> services_source
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
@@ -12,6 +12,4 @@ cjm_source_provider
12
12
  cjm_fasthtml_interactions
13
13
  cjm_fasthtml_viewport_fit
14
14
  cjm_fasthtml_virtual_collection
15
- cjm_fasthtml_sortable_queue
16
-
17
- [dev]
15
+ cjm_fasthtml_sortable_queue>=0.0.7
@@ -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,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
-