mirror of
				https://github.com/livebook-dev/livebook.git
				synced 2025-11-01 00:06:04 +08:00 
			
		
		
		
	* Introduce file system abstraction and an S3 implementation * Support arbitrary absolute paths and delegate resolution to file system * Remove accidental notebook file * Apply suggestions from code review Co-authored-by: José Valim <jose.valim@dashbit.co> * Apply review comments * Add missing path assertions * Apply review comments * Fix test saving notebook in project root Co-authored-by: José Valim <jose.valim@dashbit.co>
		
			
				
	
	
		
			46 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
| defmodule LivebookWeb.ModalComponent do
 | |
|   use LivebookWeb, :live_component
 | |
| 
 | |
|   @impl true
 | |
|   def render(assigns) do
 | |
|     ~H"""
 | |
|     <div class="fixed z-[10000] inset-0">
 | |
| 
 | |
|       <!-- Modal container -->
 | |
|       <div class="h-screen flex items-center justify-center p-4">
 | |
|         <!-- Overlay -->
 | |
|         <div class="absolute inset-0 bg-gray-500 opacity-75 z-0"
 | |
|           aria-hidden="true"
 | |
|           phx-capture-click="close"
 | |
|           phx-window-keydown="close"
 | |
|           phx-key="escape"
 | |
|           phx-target={@myself}
 | |
|           phx-page-loading></div>
 | |
| 
 | |
|         <!-- Modal box -->
 | |
|         <div class={"relative max-h-full overflow-y-auto bg-white rounded-lg shadow-xl #{@modal_class}"}
 | |
|           role="dialog"
 | |
|           aria-modal="true">
 | |
| 
 | |
|           <%= live_patch to: @return_to, class: "absolute top-6 right-6 text-gray-400 flex space-x-1 items-center" do %>
 | |
|             <span class="text-sm">(esc)</span>
 | |
|             <.remix_icon icon="close-line" class="text-2xl" />
 | |
|           <% end %>
 | |
| 
 | |
|           <%=
 | |
|             case @render_spec do
 | |
|               {:component, component, opts} -> live_component(component, opts)
 | |
|               {:live_view, socket, live_view, opts} -> live_render(socket, live_view, opts)
 | |
|             end
 | |
|           %>
 | |
|         </div>
 | |
|       </div>
 | |
|     </div>
 | |
|     """
 | |
|   end
 | |
| 
 | |
|   @impl true
 | |
|   def handle_event("close", _params, socket) do
 | |
|     {:noreply, push_patch(socket, to: socket.assigns.return_to)}
 | |
|   end
 | |
| end
 |