cjm-transcript-source-select 0.0.10__tar.gz → 0.0.12__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 (39) hide show
  1. {cjm_transcript_source_select-0.0.10/cjm_transcript_source_select.egg-info → cjm_transcript_source_select-0.0.12}/PKG-INFO +26 -24
  2. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/README.md +25 -23
  3. cjm_transcript_source_select-0.0.12/cjm_transcript_source_select/__init__.py +1 -0
  4. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/cjm_transcript_source_select/components/preview_panel.py +2 -1
  5. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/cjm_transcript_source_select/components/selection_queue.py +4 -4
  6. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/cjm_transcript_source_select/components/step_renderer.py +11 -10
  7. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/cjm_transcript_source_select/routes/local_files.py +14 -7
  8. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12/cjm_transcript_source_select.egg-info}/PKG-INFO +26 -24
  9. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/settings.ini +1 -1
  10. cjm_transcript_source_select-0.0.10/cjm_transcript_source_select/__init__.py +0 -1
  11. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/LICENSE +0 -0
  12. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/MANIFEST.in +0 -0
  13. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/cjm_transcript_source_select/_modidx.py +0 -0
  14. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/cjm_transcript_source_select/components/__init__.py +0 -0
  15. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/cjm_transcript_source_select/components/helpers.py +0 -0
  16. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/cjm_transcript_source_select/components/local_files.py +0 -0
  17. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/cjm_transcript_source_select/components/source_browser.py +0 -0
  18. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/cjm_transcript_source_select/html_ids.py +0 -0
  19. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/cjm_transcript_source_select/models.py +0 -0
  20. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/cjm_transcript_source_select/routes/__init__.py +0 -0
  21. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/cjm_transcript_source_select/routes/core.py +0 -0
  22. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/cjm_transcript_source_select/routes/filtering.py +0 -0
  23. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/cjm_transcript_source_select/routes/init.py +0 -0
  24. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/cjm_transcript_source_select/routes/queue.py +0 -0
  25. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/cjm_transcript_source_select/routes/source_browser.py +0 -0
  26. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/cjm_transcript_source_select/routes/tabs.py +0 -0
  27. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/cjm_transcript_source_select/services/__init__.py +0 -0
  28. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/cjm_transcript_source_select/services/source.py +0 -0
  29. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/cjm_transcript_source_select/services/source_utils.py +0 -0
  30. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/cjm_transcript_source_select/utils.py +0 -0
  31. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/cjm_transcript_source_select.egg-info/SOURCES.txt +0 -0
  32. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/cjm_transcript_source_select.egg-info/dependency_links.txt +0 -0
  33. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/cjm_transcript_source_select.egg-info/entry_points.txt +0 -0
  34. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/cjm_transcript_source_select.egg-info/not-zip-safe +0 -0
  35. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/cjm_transcript_source_select.egg-info/requires.txt +0 -0
  36. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/cjm_transcript_source_select.egg-info/top_level.txt +0 -0
  37. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/pyproject.toml +0 -0
  38. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/setup.cfg +0 -0
  39. {cjm_transcript_source_select-0.0.10 → cjm_transcript_source_select-0.0.12}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: cjm-transcript-source-select
3
- Version: 0.0.10
3
+ Version: 0.0.12
4
4
  Summary: FastHTML source selection component for transcript decomposition workflows, with federated database browsing, drag-drop ordering, and keyboard navigation.
5
5
  Home-page: https://github.com/cj-mills/cjm-transcript-source-select
6
6
  Author: Christian J. Mills
@@ -112,51 +112,51 @@ graph LR
112
112
  components_source_browser --> services_source_utils
113
113
  components_source_browser --> utils
114
114
  components_source_browser --> html_ids
115
- components_step_renderer --> utils
115
+ components_step_renderer --> components_local_files
116
+ components_step_renderer --> html_ids
116
117
  components_step_renderer --> components_preview_panel
117
118
  components_step_renderer --> components_selection_queue
118
- components_step_renderer --> components_source_browser
119
119
  components_step_renderer --> models
120
- components_step_renderer --> html_ids
121
- components_step_renderer --> components_local_files
122
- routes_core --> models
123
- routes_core --> html_ids
124
- routes_core --> services_source
120
+ components_step_renderer --> utils
121
+ components_step_renderer --> components_source_browser
125
122
  routes_core --> components_step_renderer
123
+ routes_core --> services_source
126
124
  routes_core --> components_selection_queue
125
+ routes_core --> html_ids
126
+ routes_core --> models
127
127
  routes_filtering --> services_source_utils
128
128
  routes_filtering --> routes_core
129
- routes_filtering --> models
130
129
  routes_filtering --> services_source
130
+ routes_filtering --> models
131
+ routes_init --> routes_core
131
132
  routes_init --> routes_queue
133
+ routes_init --> routes_tabs
132
134
  routes_init --> routes_local_files
133
- routes_init --> routes_core
134
- routes_init --> models
135
135
  routes_init --> services_source
136
+ routes_init --> models
136
137
  routes_init --> routes_source_browser
137
138
  routes_init --> routes_filtering
138
- routes_init --> routes_tabs
139
- routes_local_files --> models
140
139
  routes_local_files --> components_local_files
141
140
  routes_local_files --> routes_core
142
141
  routes_local_files --> services_source
143
- routes_queue --> components_preview_panel
142
+ routes_local_files --> models
144
143
  routes_queue --> services_source_utils
144
+ routes_queue --> components_preview_panel
145
145
  routes_queue --> routes_core
146
- routes_queue --> models
147
146
  routes_queue --> services_source
148
- routes_source_browser --> components_preview_panel
147
+ routes_queue --> models
148
+ routes_source_browser --> services_source_utils
149
149
  routes_source_browser --> components_source_browser
150
- routes_source_browser --> models
151
- routes_source_browser --> services_source
152
150
  routes_source_browser --> routes_core
153
- routes_source_browser --> services_source_utils
151
+ routes_source_browser --> components_preview_panel
152
+ routes_source_browser --> services_source
153
+ routes_source_browser --> models
154
154
  routes_source_browser --> html_ids
155
- routes_tabs --> models
156
- routes_tabs --> routes_core
157
155
  routes_tabs --> services_source
158
- routes_tabs --> services_source_utils
156
+ routes_tabs --> routes_core
157
+ routes_tabs --> models
159
158
  routes_tabs --> components_step_renderer
159
+ routes_tabs --> services_source_utils
160
160
  ```
161
161
 
162
162
  *52 cross-module dependencies detected*
@@ -528,8 +528,9 @@ def _handle_remove_external_source(
528
528
  external_db_paths_ref: List[str], # Shared external paths list (mutated in place)
529
529
  fb_state_getter: Callable[[], BrowserState], # File browser state getter
530
530
  fb_state_setter: Callable[[BrowserState], None], # File browser state setter
531
- render_panel_fn: Callable, # Function to render the full local files panel
532
- ): # Local files browser component
531
+ fb_routers: FileBrowserRouters, # File browser routers (for targeted OOB)
532
+ remove_url: str, # URL for remove button in external sources list
533
+ ): # Tuple of OOB elements (external sources list + checkbox cells)
533
534
  "Remove an external database source from the Added Sources list."
534
535
  ```
535
536
 
@@ -1415,6 +1416,7 @@ SD_TAB_PREV_BTN = 'sd-tab-prev-btn'
1415
1416
  SD_TAB_NEXT_BTN = 'sd-tab-next-btn'
1416
1417
  SD_PREVIEW_BTN = 'sd-preview-btn'
1417
1418
  FB_SYSTEM_ID = 'lfb-collection'
1419
+ _ZONE_FOCUS_CLASSES
1418
1420
  _VIEWPORT_FIT_CONFIG
1419
1421
  ```
1420
1422
 
@@ -66,51 +66,51 @@ graph LR
66
66
  components_source_browser --> services_source_utils
67
67
  components_source_browser --> utils
68
68
  components_source_browser --> html_ids
69
- components_step_renderer --> utils
69
+ components_step_renderer --> components_local_files
70
+ components_step_renderer --> html_ids
70
71
  components_step_renderer --> components_preview_panel
71
72
  components_step_renderer --> components_selection_queue
72
- components_step_renderer --> components_source_browser
73
73
  components_step_renderer --> models
74
- components_step_renderer --> html_ids
75
- components_step_renderer --> components_local_files
76
- routes_core --> models
77
- routes_core --> html_ids
78
- routes_core --> services_source
74
+ components_step_renderer --> utils
75
+ components_step_renderer --> components_source_browser
79
76
  routes_core --> components_step_renderer
77
+ routes_core --> services_source
80
78
  routes_core --> components_selection_queue
79
+ routes_core --> html_ids
80
+ routes_core --> models
81
81
  routes_filtering --> services_source_utils
82
82
  routes_filtering --> routes_core
83
- routes_filtering --> models
84
83
  routes_filtering --> services_source
84
+ routes_filtering --> models
85
+ routes_init --> routes_core
85
86
  routes_init --> routes_queue
87
+ routes_init --> routes_tabs
86
88
  routes_init --> routes_local_files
87
- routes_init --> routes_core
88
- routes_init --> models
89
89
  routes_init --> services_source
90
+ routes_init --> models
90
91
  routes_init --> routes_source_browser
91
92
  routes_init --> routes_filtering
92
- routes_init --> routes_tabs
93
- routes_local_files --> models
94
93
  routes_local_files --> components_local_files
95
94
  routes_local_files --> routes_core
96
95
  routes_local_files --> services_source
97
- routes_queue --> components_preview_panel
96
+ routes_local_files --> models
98
97
  routes_queue --> services_source_utils
98
+ routes_queue --> components_preview_panel
99
99
  routes_queue --> routes_core
100
- routes_queue --> models
101
100
  routes_queue --> services_source
102
- routes_source_browser --> components_preview_panel
101
+ routes_queue --> models
102
+ routes_source_browser --> services_source_utils
103
103
  routes_source_browser --> components_source_browser
104
- routes_source_browser --> models
105
- routes_source_browser --> services_source
106
104
  routes_source_browser --> routes_core
107
- routes_source_browser --> services_source_utils
105
+ routes_source_browser --> components_preview_panel
106
+ routes_source_browser --> services_source
107
+ routes_source_browser --> models
108
108
  routes_source_browser --> html_ids
109
- routes_tabs --> models
110
- routes_tabs --> routes_core
111
109
  routes_tabs --> services_source
112
- routes_tabs --> services_source_utils
110
+ routes_tabs --> routes_core
111
+ routes_tabs --> models
113
112
  routes_tabs --> components_step_renderer
113
+ routes_tabs --> services_source_utils
114
114
  ```
115
115
 
116
116
  *52 cross-module dependencies detected*
@@ -482,8 +482,9 @@ def _handle_remove_external_source(
482
482
  external_db_paths_ref: List[str], # Shared external paths list (mutated in place)
483
483
  fb_state_getter: Callable[[], BrowserState], # File browser state getter
484
484
  fb_state_setter: Callable[[BrowserState], None], # File browser state setter
485
- render_panel_fn: Callable, # Function to render the full local files panel
486
- ): # Local files browser component
485
+ fb_routers: FileBrowserRouters, # File browser routers (for targeted OOB)
486
+ remove_url: str, # URL for remove button in external sources list
487
+ ): # Tuple of OOB elements (external sources list + checkbox cells)
487
488
  "Remove an external database source from the Added Sources list."
488
489
  ```
489
490
 
@@ -1369,6 +1370,7 @@ SD_TAB_PREV_BTN = 'sd-tab-prev-btn'
1369
1370
  SD_TAB_NEXT_BTN = 'sd-tab-next-btn'
1370
1371
  SD_PREVIEW_BTN = 'sd-preview-btn'
1371
1372
  FB_SYSTEM_ID = 'lfb-collection'
1373
+ _ZONE_FOCUS_CLASSES
1372
1374
  _VIEWPORT_FIT_CONFIG
1373
1375
  ```
1374
1376
 
@@ -0,0 +1 @@
1
+ __version__ = "0.0.12"
@@ -14,7 +14,7 @@ from fasthtml.common import Div, H3, P, Span, Input
14
14
  from cjm_fasthtml_daisyui.components.data_display.collapse import (
15
15
  collapse, collapse_title, collapse_content, collapse_modifiers
16
16
  )
17
- from cjm_fasthtml_daisyui.utilities.semantic_colors import bg_dui, text_dui, border_dui
17
+ from cjm_fasthtml_daisyui.utilities.semantic_colors import bg_dui, text_dui, border_dui, shadow_dui
18
18
  from cjm_fasthtml_daisyui.utilities.border_radius import border_radius
19
19
 
20
20
  # Tailwind utilities
@@ -98,6 +98,7 @@ def _render_preview_panel(
98
98
  bg_dui.base_100,
99
99
  border_radius.box,
100
100
  shadow.lg,
101
+ shadow_dui.base_300,
101
102
  border_dui.base_300,
102
103
  border(),
103
104
  m.t(4)
@@ -12,7 +12,7 @@ from fasthtml.common import Span, P
12
12
 
13
13
  from cjm_fasthtml_tailwind.utilities.spacing import p
14
14
  from cjm_fasthtml_tailwind.utilities.typography import (
15
- font_size, font_family, text_align, truncate
15
+ font_size, font_family, text_align
16
16
  )
17
17
  from cjm_fasthtml_tailwind.utilities.flexbox_and_grid import (
18
18
  flex_display, flex_direction, justify, items, grow
@@ -44,8 +44,8 @@ def _render_queue_content(
44
44
  """Render the job ID display as custom content for each queue item."""
45
45
  record_id = item.get("record_id", "")
46
46
  return Span(
47
- record_id[:10] + "..." if len(record_id) > 10 else record_id,
48
- cls=combine_classes(grow(), font_size.sm, font_family.mono, truncate),
47
+ record_id,
48
+ cls=combine_classes(grow(), font_size.sm, font_family.mono),
49
49
  title=record_id
50
50
  )
51
51
 
@@ -54,7 +54,7 @@ def _render_queue_empty() -> Any: # Empty state element
54
54
  """Render the custom empty state for the source selection queue."""
55
55
  return P(
56
56
  "Select transcriptions from the browser",
57
- cls=combine_classes(text_dui.base_content.opacity(30), text_align.center, font_size.xs)
57
+ cls=combine_classes(text_dui.base_content.opacity(50), text_align.center, font_size.sm, p(2))
58
58
  )
59
59
 
60
60
  # %% ../../nbs/components/selection_queue.ipynb #17uipzddaut
@@ -18,7 +18,7 @@ from cjm_fasthtml_daisyui.components.data_display.collapse import (
18
18
  collapse, collapse_title, collapse_content, collapse_modifiers
19
19
  )
20
20
  from cjm_fasthtml_daisyui.components.navigation.tabs import tabs, tabs_styles, tab
21
- from cjm_fasthtml_daisyui.utilities.semantic_colors import bg_dui, text_dui, border_dui, ring_dui
21
+ from cjm_fasthtml_daisyui.utilities.semantic_colors import bg_dui, text_dui, border_dui, ring_dui, shadow_dui
22
22
  from cjm_fasthtml_daisyui.utilities.border_radius import border_radius
23
23
 
24
24
  # Tailwind utilities
@@ -27,7 +27,7 @@ from cjm_fasthtml_tailwind.utilities.sizing import w, h, min_h, min_w
27
27
  from cjm_fasthtml_tailwind.utilities.typography import font_size, font_weight
28
28
  from cjm_fasthtml_tailwind.utilities.layout import overflow
29
29
  from cjm_fasthtml_tailwind.utilities.borders import border
30
- from cjm_fasthtml_tailwind.utilities.effects import ring
30
+ from cjm_fasthtml_tailwind.utilities.effects import ring, shadow
31
31
  from cjm_fasthtml_tailwind.utilities.flexbox_and_grid import (
32
32
  flex_display, flex_direction, justify, items, gap, grow
33
33
  )
@@ -79,6 +79,9 @@ SD_PREVIEW_BTN = "sd-preview-btn"
79
79
  # File browser system ID (matches vc_prefix="lfb" → zone "lfb-collection")
80
80
  FB_SYSTEM_ID = "lfb-collection"
81
81
 
82
+ # Shadow-based zone focus styling (shadow appears only when zone is active)
83
+ _ZONE_FOCUS_CLASSES = (str(shadow.lg), str(shadow_dui.primary))
84
+
82
85
 
83
86
  def _create_parent_keyboard_manager() -> ZoneManager: # Parent keyboard manager for hierarchy
84
87
  """Create the parent keyboard manager with two ghost zones for column switching."""
@@ -87,7 +90,7 @@ def _create_parent_keyboard_manager() -> ZoneManager: # Parent keyboard manager
87
90
  id=SelectionHtmlIds.GHOST_BROWSER,
88
91
  item_selector=None,
89
92
  navigation=ScrollOnly(),
90
- zone_focus_classes=(str(ring(2)), str(ring_dui.primary)),
93
+ zone_focus_classes=_ZONE_FOCUS_CLASSES,
91
94
  )
92
95
 
93
96
  # Ghost zone for queue area (wraps queue panel — queue child system lives here)
@@ -95,7 +98,7 @@ def _create_parent_keyboard_manager() -> ZoneManager: # Parent keyboard manager
95
98
  id=SelectionHtmlIds.GHOST_QUEUE,
96
99
  item_selector=None,
97
100
  navigation=ScrollOnly(),
98
- zone_focus_classes=(str(ring(1)), str(ring_dui.secondary)),
101
+ zone_focus_classes=_ZONE_FOCUS_CLASSES,
99
102
  )
100
103
 
101
104
  # Parent-level actions (no queue-scoped actions — those live in queue child system)
@@ -317,6 +320,7 @@ _VIEWPORT_FIT_CONFIG = ViewportFitConfig(
317
320
  target_id=SelectionHtmlIds.MAIN_CONTENT,
318
321
  )
319
322
 
323
+ # %% ../../nbs/components/step_renderer.ipynb #rz60ckek1hi
320
324
  def _generate_hierarchy_js(
321
325
  active_tab: str, # Active tab: "db" or "files"
322
326
  ) -> Script: # Script element with hierarchy wiring and activation logic
@@ -390,7 +394,7 @@ def _generate_hierarchy_js(
390
394
  }})();
391
395
  """)
392
396
 
393
-
397
+ # %% ../../nbs/components/step_renderer.ipynb #jes3pdhj1hg
394
398
  def render_selection_step(
395
399
  sources: List[Dict[str, Any]], # Available source plugins
396
400
  transcriptions: List[Dict[str, Any]], # Available transcription records
@@ -434,8 +438,6 @@ def render_selection_step(
434
438
  config=SD_QUEUE_CONFIG,
435
439
  ids=SD_QUEUE_IDS,
436
440
  urls=SortableQueueUrls(reorder=urls.keyboard_reorder or urls.reorder, remove=urls.remove, clear=urls.clear),
437
- zone_focus_classes=(str(ring(1)), str(ring_dui.secondary)),
438
- item_focus_classes=(str(bg_dui.secondary.opacity(10)), str(ring(1)), str(ring_dui.secondary)),
439
441
  data_attributes=("key", "record-id", "provider-id"),
440
442
  on_focus_change="triggerPreviewUpdate",
441
443
  hidden_input_prefix="sd-focused",
@@ -526,7 +528,8 @@ def render_selection_step(
526
528
  Div(
527
529
  queue_panel,
528
530
  id=SelectionHtmlIds.GHOST_QUEUE,
529
- cls=combine_classes(min_h(0), min_w._0, border_radius.box)),
531
+ cls=combine_classes(min_h(48), border_radius.box, transition.all, border(), border_dui.base_300),
532
+ ),
530
533
  id=SelectionHtmlIds.MAIN_CONTENT,
531
534
  cls=combine_classes(
532
535
  grow(),
@@ -535,8 +538,6 @@ def render_selection_step(
535
538
  flex_direction.col,
536
539
  flex_direction.row.lg,
537
540
  gap(4),
538
- overflow.hidden,
539
- p(1)
540
541
  )
541
542
  ),
542
543
 
@@ -54,23 +54,29 @@ def _handle_remove_external_source(
54
54
  external_db_paths_ref: List[str], # Shared external paths list (mutated in place)
55
55
  fb_state_getter: Callable[[], BrowserState], # File browser state getter
56
56
  fb_state_setter: Callable[[BrowserState], None], # File browser state setter
57
- render_panel_fn: Callable, # Function to render the full local files panel
58
- ): # Local files browser component
57
+ fb_routers: FileBrowserRouters, # File browser routers (for targeted OOB)
58
+ remove_url: str, # URL for remove button in external sources list
59
+ ): # Tuple of OOB elements (external sources list + checkbox cells)
59
60
  """Remove an external database source from the Added Sources list."""
60
61
  session_id = get_session_id(sess)
61
-
62
+
62
63
  # Remove the path if it exists
63
64
  if db_path in external_db_paths_ref:
64
65
  external_db_paths_ref.remove(db_path)
65
66
  _update_step_state(state_store, workflow_id, session_id, external_db_paths=list(external_db_paths_ref))
66
67
  source_service.set_external_paths(list(external_db_paths_ref))
67
-
68
+
68
69
  # Sync browser selection state with external_db_paths for checkbox display
69
70
  browser_state = fb_state_getter()
70
71
  browser_state.selection.selected_paths = list(external_db_paths_ref)
71
72
  fb_state_setter(browser_state)
72
-
73
- return render_panel_fn()
73
+
74
+ # Targeted OOB updates instead of full panel re-render
75
+ checkbox_oobs = fb_routers.render_selection_oobs([db_path])
76
+ external_list_oob = _render_external_sources_list(
77
+ list(external_db_paths_ref), remove_url, oob=True,
78
+ )
79
+ return (external_list_oob, *checkbox_oobs)
74
80
 
75
81
  # %% ../../nbs/routes/local_files.ipynb #rdrpw4jrxpc
76
82
  def init_local_files_router(
@@ -178,7 +184,8 @@ def init_local_files_router(
178
184
  external_db_paths_ref=_external_db_paths,
179
185
  fb_state_getter=_fb_state_getter,
180
186
  fb_state_setter=_fb_state_setter,
181
- render_panel_fn=_render_panel,
187
+ fb_routers=fb_routers,
188
+ remove_url=urls.remove_external,
182
189
  )
183
190
 
184
191
  # All routers to register
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: cjm-transcript-source-select
3
- Version: 0.0.10
3
+ Version: 0.0.12
4
4
  Summary: FastHTML source selection component for transcript decomposition workflows, with federated database browsing, drag-drop ordering, and keyboard navigation.
5
5
  Home-page: https://github.com/cj-mills/cjm-transcript-source-select
6
6
  Author: Christian J. Mills
@@ -112,51 +112,51 @@ graph LR
112
112
  components_source_browser --> services_source_utils
113
113
  components_source_browser --> utils
114
114
  components_source_browser --> html_ids
115
- components_step_renderer --> utils
115
+ components_step_renderer --> components_local_files
116
+ components_step_renderer --> html_ids
116
117
  components_step_renderer --> components_preview_panel
117
118
  components_step_renderer --> components_selection_queue
118
- components_step_renderer --> components_source_browser
119
119
  components_step_renderer --> models
120
- components_step_renderer --> html_ids
121
- components_step_renderer --> components_local_files
122
- routes_core --> models
123
- routes_core --> html_ids
124
- routes_core --> services_source
120
+ components_step_renderer --> utils
121
+ components_step_renderer --> components_source_browser
125
122
  routes_core --> components_step_renderer
123
+ routes_core --> services_source
126
124
  routes_core --> components_selection_queue
125
+ routes_core --> html_ids
126
+ routes_core --> models
127
127
  routes_filtering --> services_source_utils
128
128
  routes_filtering --> routes_core
129
- routes_filtering --> models
130
129
  routes_filtering --> services_source
130
+ routes_filtering --> models
131
+ routes_init --> routes_core
131
132
  routes_init --> routes_queue
133
+ routes_init --> routes_tabs
132
134
  routes_init --> routes_local_files
133
- routes_init --> routes_core
134
- routes_init --> models
135
135
  routes_init --> services_source
136
+ routes_init --> models
136
137
  routes_init --> routes_source_browser
137
138
  routes_init --> routes_filtering
138
- routes_init --> routes_tabs
139
- routes_local_files --> models
140
139
  routes_local_files --> components_local_files
141
140
  routes_local_files --> routes_core
142
141
  routes_local_files --> services_source
143
- routes_queue --> components_preview_panel
142
+ routes_local_files --> models
144
143
  routes_queue --> services_source_utils
144
+ routes_queue --> components_preview_panel
145
145
  routes_queue --> routes_core
146
- routes_queue --> models
147
146
  routes_queue --> services_source
148
- routes_source_browser --> components_preview_panel
147
+ routes_queue --> models
148
+ routes_source_browser --> services_source_utils
149
149
  routes_source_browser --> components_source_browser
150
- routes_source_browser --> models
151
- routes_source_browser --> services_source
152
150
  routes_source_browser --> routes_core
153
- routes_source_browser --> services_source_utils
151
+ routes_source_browser --> components_preview_panel
152
+ routes_source_browser --> services_source
153
+ routes_source_browser --> models
154
154
  routes_source_browser --> html_ids
155
- routes_tabs --> models
156
- routes_tabs --> routes_core
157
155
  routes_tabs --> services_source
158
- routes_tabs --> services_source_utils
156
+ routes_tabs --> routes_core
157
+ routes_tabs --> models
159
158
  routes_tabs --> components_step_renderer
159
+ routes_tabs --> services_source_utils
160
160
  ```
161
161
 
162
162
  *52 cross-module dependencies detected*
@@ -528,8 +528,9 @@ def _handle_remove_external_source(
528
528
  external_db_paths_ref: List[str], # Shared external paths list (mutated in place)
529
529
  fb_state_getter: Callable[[], BrowserState], # File browser state getter
530
530
  fb_state_setter: Callable[[BrowserState], None], # File browser state setter
531
- render_panel_fn: Callable, # Function to render the full local files panel
532
- ): # Local files browser component
531
+ fb_routers: FileBrowserRouters, # File browser routers (for targeted OOB)
532
+ remove_url: str, # URL for remove button in external sources list
533
+ ): # Tuple of OOB elements (external sources list + checkbox cells)
533
534
  "Remove an external database source from the Added Sources list."
534
535
  ```
535
536
 
@@ -1415,6 +1416,7 @@ SD_TAB_PREV_BTN = 'sd-tab-prev-btn'
1415
1416
  SD_TAB_NEXT_BTN = 'sd-tab-next-btn'
1416
1417
  SD_PREVIEW_BTN = 'sd-preview-btn'
1417
1418
  FB_SYSTEM_ID = 'lfb-collection'
1419
+ _ZONE_FOCUS_CLASSES
1418
1420
  _VIEWPORT_FIT_CONFIG
1419
1421
  ```
1420
1422
 
@@ -1,7 +1,7 @@
1
1
  [DEFAULT]
2
2
  repo = cjm-transcript-source-select
3
3
  lib_name = cjm-transcript-source-select
4
- version = 0.0.10
4
+ version = 0.0.12
5
5
  min_python = 3.12
6
6
  license = apache2
7
7
  black_formatting = False
@@ -1 +0,0 @@
1
- __version__ = "0.0.10"