Sidepanel

Example

<button
  x-data
  @click="$dispatch('open-sidepanel', { id: 'sidepanel' })"
  class="mx-auto block rounded-md border-violet-700 bg-violet-500 px-4 py-2 font-medium text-gray-100 hover:bg-violet-600 focus:ring-violet-200 dark:bg-violet-500 dark:hover:bg-violet-600"
>
  Open sidepanel
</button>

<div x-data="sidepanel" id="sidepanel" x-cloak>
  <template x-if="_isModal">
    <div
      x-bind="backdrop"
      x-alt-transition='{
        "enter": ["opacity-0", "transition ease-out duration-100", "opacity-100"],
        "leave": ["opacity-100", "transition ease-in duration-100", "opacity-0"]
      }'
      class="fixed inset-0 z-30 overflow-y-auto bg-black/50"
    ></div>
  </template>
  <aside
    x-bind="sidepanel"
    class="fixed right-0 data-left:left-0 top-0 z-30 flex h-full w-[350px] flex-col bg-secondary-100 px-6 text-left shadow-lg shadow-black/40 dark:bg-dark-700 dark:text-text-300"
    x-alt-transition='{
      "enter": ["opacity-0 translate-x-40 data-left:-translate-x-40", "transition ease-out duration-100", "opacity-100"],
      "leave": ["opacity-100", "transition ease-in duration-100", "opacity-0 translate-x-40 data-left:-translate-x-40"]
    }'
  >
    <div class="flex w-full items-center justify-between">
      <div class="my-4 text-lg font-semibold">Header</div>
      <button @click="close()" class="hover:bg-gray-300 rounded-md p-2 dark:hover:bg-dark-500">
        <svg
          xmlns="http://www.w3.org/2000/svg"
          width="16"
          height="16"
          fill="currentColor"
          viewBox="0 0 16 16"
        >
          <path
            d="M1.293 1.293a1 1 0 0 1 1.414 0L8 6.586l5.293-5.293a1 1 0 1 1 1.414 1.414L9.414 8l5.293 5.293a1 1 0 0 1-1.414 1.414L8 9.414l-5.293 5.293a1 1 0 0 1-1.414-1.414L6.586 8 1.293 2.707a1 1 0 0 1 0-1.414z"
          />
        </svg>
      </button>
    </div>
    <div class="h-full overflow-y-auto">sidepanel</div>
  </aside>
</div>

Usage

<script defer src="https://cdn.jsdelivr.net/npm/litewind-alpine@0.x.x/components/sidepanel/dist/cdn.min.js"></script>

The data for the component is provided by the sidepanel function in the x-data directive and the props in the data-* attributes.

Props

data-left
false Boolean

If true, the sidepanel is placed on the left side.


data-modal
false Boolean

Adds backdrop after opening sidepanel. Clicking backdrop closes sidepanel.

Opening sidepanel

To open sidepanel simply dispatch open-sidepanel event anywhere in your application. The data in the event is the id of the sidepanel to open.

To make sidepanel with a backdrop add the data-modal prop. Backdrop can be clicked to close the sidepanel.

Example

<button
  x-data
  @click="$dispatch('open-sidepanel', { id: 'sidepanelModal' })"
  class="mx-auto block rounded-md border-violet-700 bg-violet-500 px-4 py-2 font-medium text-gray-100 hover:bg-violet-600 focus:ring-violet-200 dark:bg-violet-500 dark:hover:bg-violet-600"
>
  Open modal sidepanel
</button>

<div x-data="sidepanel" data-modal="true" id="sidepanelModal" x-cloak>
  <template x-if="_isModal">
    <div
      x-bind="backdrop"
      x-alt-transition='{
        "enter": ["opacity-0", "transition ease-out duration-100", "opacity-100"],
        "leave": ["opacity-100", "transition ease-in duration-100", "opacity-0"]
      }'
      class="fixed inset-0 z-30 overflow-y-auto bg-black/50"
    ></div>
  </template>
  <aside
    x-bind="sidepanel"
    class="fixed right-0 data-left:left-0 top-0 z-30 flex h-full w-[350px] flex-col bg-secondary-100 px-6 text-left shadow-lg shadow-black/40 dark:bg-dark-700 dark:text-text-300"
    x-alt-transition='{
      "enter": ["opacity-0 translate-x-40 data-left:-translate-x-40", "transition ease-out duration-100", "opacity-100"],
      "leave": ["opacity-100", "transition ease-in duration-100", "opacity-0 translate-x-40 data-left:-translate-x-40"]
    }'
  >
    <div class="flex w-full items-center justify-between">
      <div class="my-4 text-lg font-semibold">Header</div>
      <button @click="close()" class="hover:bg-gray-300 rounded-md p-2 dark:hover:bg-dark-500">
        <svg
          xmlns="http://www.w3.org/2000/svg"
          width="16"
          height="16"
          fill="currentColor"
          viewBox="0 0 16 16"
        >
          <path
            d="M1.293 1.293a1 1 0 0 1 1.414 0L8 6.586l5.293-5.293a1 1 0 1 1 1.414 1.414L9.414 8l5.293 5.293a1 1 0 0 1-1.414 1.414L8 9.414l-5.293 5.293a1 1 0 0 1-1.414-1.414L6.586 8 1.293 2.707a1 1 0 0 1 0-1.414z"
          />
        </svg>
      </button>
    </div>
    <div class="h-full overflow-y-auto">sidepanel</div>
  </aside>
</div>
Litewind-alpine 0.1.0