@danhachuel/thunderbolt 0.6.97 → 0.6.99

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.
@@ -222,7 +222,7 @@ def render_ai_influencer_characters(
222
222
  key="influencer_new_assets",
223
223
  help="Pode seleccionar várias imagens e ficheiros .md/.json no mesmo upload.",
224
224
  )
225
- create = st.form_submit_button("Guardar personagem", type="primary", use_container_width=True)
225
+ create = st.form_submit_button("Guardar personagem", type="primary", width="stretch")
226
226
  if create:
227
227
  try:
228
228
  record = repository.create_influencer({"name": name, "bio": bio, "language": language, "instagram_business_id": instagram_id})
@@ -281,7 +281,7 @@ def render_ai_influencer_characters(
281
281
  accept_multiple_files=True,
282
282
  key=f"influencer_append_assets_{selected_id}",
283
283
  )
284
- append_assets = st.form_submit_button("Adicionar assets ao personagem", use_container_width=True)
284
+ append_assets = st.form_submit_button("Adicionar assets ao personagem", width="stretch")
285
285
  if append_assets:
286
286
  try:
287
287
  saved_assets = 0
@@ -307,7 +307,7 @@ def render_ai_influencer_characters(
307
307
  st.caption(_asset_label(asset))
308
308
  path = _local_asset_path(asset)
309
309
  if str(asset.get("asset_type") or "") == "image" and path:
310
- st.image(str(path), use_container_width=True)
310
+ st.image(str(path), width="stretch")
311
311
  elif str(asset.get("asset_type") or "") == "document":
312
312
  raw = str(asset.get("document_json") or "")
313
313
  try:
@@ -336,7 +336,7 @@ def _render_content_history(repository: Any, influencer_id: str = "") -> None:
336
336
  preview_col, detail_col = st.columns([1.25, 2.75])
337
337
  with preview_col:
338
338
  if artifact.is_file() and content_type == "image":
339
- st.image(str(artifact), caption=f"{type_label} gerada", use_container_width=True)
339
+ st.image(str(artifact), caption=f"{type_label} gerada", width="stretch")
340
340
  elif artifact.is_file() and content_type == "video":
341
341
  st.video(str(artifact))
342
342
  else:
@@ -356,7 +356,7 @@ def _render_content_history(repository: Any, influencer_id: str = "") -> None:
356
356
  file_name=artifact.name,
357
357
  mime=mime,
358
358
  key=f"influencer_content_download_{content_type}_{content_id}",
359
- use_container_width=True,
359
+ width="stretch",
360
360
  )
361
361
 
362
362
 
@@ -405,7 +405,7 @@ def render_motion_control(settings: dict[str, Any]) -> None:
405
405
  image_upload = st.file_uploader("Imagem de referência", type=["jpg", "jpeg", "png"], key="motion_control_image")
406
406
  prompt = st.text_area("Prompt (opcional)", height=120, max_chars=2500, placeholder="Descreva como preservar a identidade da imagem e aplicar o movimento…", key="motion_control_prompt")
407
407
  provider_id = st.selectbox("Provider / modelo", card_options, format_func=lambda value: _provider_label(next(card for card in cards if str(card.get("id")) == value)), key="motion_control_provider")
408
- generate = st.form_submit_button("Gerar Motion Control", type="primary", use_container_width=True)
408
+ generate = st.form_submit_button("Gerar Motion Control", type="primary", width="stretch")
409
409
  if generate:
410
410
  if video_upload is None or image_upload is None:
411
411
  st.error("Seleccione o vídeo original e a imagem de referência.")
@@ -517,8 +517,8 @@ def render_ugc_products(settings: dict[str, Any]) -> None:
517
517
  else:
518
518
  video_provider_id = st.selectbox("Provider / modelo de vídeo", video_options, format_func=lambda value: _provider_label(next(card for card in video_cards if str(card.get("id")) == value)), key="ugc_products_video_provider") if video_cards else ""
519
519
  script = st.text_area("Roteiro de vídeo (UGC)", height=150, key="ugc_products_script", placeholder="O roteiro gerado pela IA aparecerá aqui; também pode editá-lo antes de gerar.")
520
- generate_script = st.button("Gerar roteiro com IA", use_container_width=True, key="ugc_products_generate_script")
521
- generate = st.button("Gerar Mídia (Foto/Vídeo)", type="primary", use_container_width=True, key="ugc_products_generate")
520
+ generate_script = st.button("Gerar roteiro com IA", width="stretch", key="ugc_products_generate_script")
521
+ generate = st.button("Gerar Mídia (Foto/Vídeo)", type="primary", width="stretch", key="ugc_products_generate")
522
522
  if generate_script:
523
523
  context = "\n".join(
524
524
  item for item in [
@@ -598,7 +598,7 @@ def render_ugc_products(settings: dict[str, Any]) -> None:
598
598
  preview_col, detail_col, edit_col, download_col = st.columns([1.2, 2.7, 0.35, 0.9])
599
599
  with preview_col:
600
600
  if artifact.is_file() and str(item.get("content_type") or "") == "image":
601
- st.image(str(artifact), use_container_width=True)
601
+ st.image(str(artifact), width="stretch")
602
602
  elif artifact.is_file():
603
603
  st.video(str(artifact))
604
604
  else:
@@ -613,7 +613,7 @@ def render_ugc_products(settings: dict[str, Any]) -> None:
613
613
  with download_col:
614
614
  if artifact.is_file() and str(item.get("state") or "") == "completed":
615
615
  mime = mimetypes.guess_type(artifact.name)[0] or ("image/png" if str(item.get("content_type") or "") == "image" else "video/mp4")
616
- st.download_button("Download", data=artifact.read_bytes(), file_name=artifact.name, mime=mime, key=f"ugc_ready_download_{content_id}", use_container_width=True)
616
+ st.download_button("Download", data=artifact.read_bytes(), file_name=artifact.name, mime=mime, key=f"ugc_ready_download_{content_id}", width="stretch")
617
617
  if st.session_state.get(f"ugc_ready_editing_{content_id}"):
618
618
  with st.form(f"ugc_ready_rename_form_{content_id}"):
619
619
  renamed = st.text_input("Nome da mídia", value=title, key=f"ugc_ready_name_{content_id}")
@@ -655,7 +655,7 @@ def render_ai_influencer_content(settings: dict[str, Any]) -> None:
655
655
  caption = st.text_area("Legenda/caption (opcional)", height=90, key="content_image_caption")
656
656
  platforms = st.multiselect("Redes sociais de destino", PLATFORM_OPTIONS, default=["Instagram"], key="content_image_platforms")
657
657
  provider_id = st.selectbox("Provider / modelo", provider_options, format_func=lambda value: _provider_label(next(card for card in cards if str(card.get("id")) == value)), key="content_image_provider") if cards else ""
658
- generate = st.form_submit_button("Gerar imagem", type="primary", use_container_width=True)
658
+ generate = st.form_submit_button("Gerar imagem", type="primary", width="stretch")
659
659
  if generate:
660
660
  if not prompt.strip():
661
661
  st.error("Informe o prompt da imagem.")
@@ -703,7 +703,7 @@ def render_ai_influencer_content(settings: dict[str, Any]) -> None:
703
703
  caption = st.text_area("Legenda/caption (opcional)", height=90, key="content_video_caption")
704
704
  platforms = st.multiselect("Redes sociais de destino", PLATFORM_OPTIONS, default=["Instagram", "TikTok"], key="content_video_platforms")
705
705
  provider_id = st.selectbox("Provider / modelo de vídeo", provider_options, format_func=lambda value: _provider_label(next(card for card in cards if str(card.get("id")) == value)), key="content_video_provider") if cards else ""
706
- generate = st.form_submit_button("Gerar vídeo", type="primary", use_container_width=True)
706
+ generate = st.form_submit_button("Gerar vídeo", type="primary", width="stretch")
707
707
  if generate:
708
708
  if not prompt.strip():
709
709
  st.error("Informe o prompt de movimento.")