Skip to content
This repository has been archived by the owner on Jun 27, 2024. It is now read-only.

Commit

Permalink
Add a dark-mode theme
Browse files Browse the repository at this point in the history
  • Loading branch information
heymerridew committed Sep 5, 2022
1 parent febd1a9 commit 17e9f72
Show file tree
Hide file tree
Showing 15 changed files with 503 additions and 474 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

This package provides a *DataTables-like* experience for [Inertia.js](https://inertiajs.com/) with support for searching, filtering, sorting, toggling columns, and pagination. It generates URLs that can be consumed by Spatie's excellent [Laravel Query Builder](https://github.com/spatie/laravel-query-builder) package, with no additional logic needed. The components are styled with [Tailwind CSS 3.0](https://tailwindcss.com/), but it's fully customizable with slots. The data refresh logic is based on Inertia's [Ping CRM demo](https://github.com/inertiajs/pingcrm).

![Inertia.js Table for Laravel Query Builder](https://user-images.githubusercontent.com/8403149/177773377-86c32d69-8f86-47e4-8063-ea227e480d10.mp4)
[![Inertia.js Table for Laravel Query Builder](https://protone.media/storage/introducing-inertiajs-tables-a-datatables-like-package-for-laravel-query-builder.jpg)](https://user-images.githubusercontent.com/8403149/177773377-86c32d69-8f86-47e4-8063-ea227e480d10.mp4)

## Support this package!

Expand Down
889 changes: 461 additions & 428 deletions app/package-lock.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion app/resources/js/Layouts/Guest.vue
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<template>
<div class="min-h-screen flex flex-col items-center bg-gray-100">
<div class="w-full max-w-7xl mt-6 sm:px-6 py-4 bg-white shadow-md overflow-hidden sm:rounded-lg">
<div class="w-full max-w-7xl mt-6 sm:px-6 py-4 bg-white shadow-md overflow-hidden sm:rounded-lg dark:bg-gray-800">
<slot />
</div>
</div>
Expand Down
4 changes: 2 additions & 2 deletions js/Components/ButtonWithDropdown.vue
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
type="button"
:dusk="dusk"
:disabled="disabled"
class="w-full bg-white border rounded-md shadow-sm px-4 py-2 inline-flex justify-center text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500"
class="w-full bg-white border rounded-md shadow-sm px-4 py-2 inline-flex justify-center text-sm font-medium text-gray-700 hover:bg-gray-50 focus:ring-2 focus:ring-indigo-500 dark:bg-gray-700 dark:hover:bg-gray-600 dark:border-gray-500"
:class="{'border-green-300': active, 'border-gray-300': !active, 'cursor-not-allowed': disabled }"
aria-haspopup="true"
@click.prevent="toggle"
Expand All @@ -19,7 +19,7 @@
ref="tooltip"
class="absolute z-10"
>
<div class="mt-2 rounded-md shadow-lg bg-white ring-1 ring-black ring-opacity-5">
<div class="mt-2 rounded-md shadow-lg bg-white ring-1 ring-black ring-opacity-5 dark:bg-gray-700">
<slot />
</div>
</div>
Expand Down
20 changes: 10 additions & 10 deletions js/Components/Pagination.vue
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<template>
<nav
v-if="hasPagination"
class="bg-white px-4 py-3 flex items-center justify-between border-t border-gray-200 sm:px-6"
class="bg-white px-4 py-3 flex items-center justify-between border-t border-gray-200 sm:px-6 dark:bg-gray-500 dark:border-gray-400 dark:text-gray-100"
>
<p v-if="!hasData || pagination.total < 1">
{{ translations.no_results_found }}
Expand Down Expand Up @@ -88,7 +88,7 @@
:on-change="onPerPageChange"
/>

<p class="hidden lg:block text-sm text-gray-700 flex-grow">
<p class="hidden lg:block text-sm text-gray-700 flex-grow dark:text-gray-100">
<span class="font-medium">{{ pagination.from }}</span>
{{ translations.to }}
<span class="font-medium">{{ pagination.to }}</span>
Expand All @@ -105,12 +105,12 @@
<component
:is="previousPageUrl ? 'a' : 'div'"
:class="{
'cursor-not-allowed text-gray-400': !previousPageUrl,
'text-gray-500 hover:bg-gray-50': previousPageUrl
'cursor-not-allowed text-gray-400 dark:bg-gray-700 dark:text-gray-500': !previousPageUrl,
'text-gray-500 hover:bg-gray-50 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600': previousPageUrl
}"
:href="previousPageUrl"
:dusk="previousPageUrl ? 'pagination-previous' : null"
class="relative inline-flex items-center px-2 py-2 rounded-l-md border border-gray-300 bg-white text-sm font-medium"
class="relative inline-flex items-center px-2 py-2 rounded-l-md border border-gray-300 bg-white text-sm font-medium dark:border-gray-500"
@click.prevent="onClick(previousPageUrl)"
>
<span class="sr-only">{{ translations.previous }}</span>
Expand Down Expand Up @@ -140,11 +140,11 @@
"
:href="link.url"
:dusk="link.url ? `pagination-${link.label}` : null"
class="relative inline-flex items-center px-4 py-2 border border-gray-300 bg-white text-sm font-medium text-gray-700"
class="relative inline-flex items-center px-4 py-2 border border-gray-300 bg-white text-sm font-medium text-gray-700 dark:bg-gray-700 dark:text-gray-100 dark:border-gray-500 dark:hover:bg-gray-500"
:class="{
'cursor-not-allowed': !link.url,
'hover:bg-gray-50': link.url,
'bg-gray-100': link.active,
'bg-gray-100 dark:bg-blue-500 dark:hover:bg-blue-400': link.active,
}"
@click.prevent="onClick(link.url)"
>
Expand All @@ -156,12 +156,12 @@
<component
:is="nextPageUrl ? 'a' : 'div'"
:class="{
'cursor-not-allowed text-gray-400': !nextPageUrl,
'text-gray-500 hover:bg-gray-50': nextPageUrl
'cursor-not-allowed text-gray-400 dark:bg-gray-700 dark:text-gray-500': !nextPageUrl,
'text-gray-500 hover:bg-gray-50 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600': nextPageUrl
}"
:href="nextPageUrl"
:dusk="nextPageUrl ? 'pagination-next' : null"
class="relative inline-flex items-center px-2 py-2 rounded-r-md border border-gray-300 bg-white text-sm font-medium"
class="relative inline-flex items-center px-2 py-2 rounded-r-md border border-gray-300 bg-white text-sm font-medium dark:border-gray-500"
@click.prevent="onClick(nextPageUrl)"
>
<span class="sr-only">{{ translations.next }}</span>
Expand Down
2 changes: 1 addition & 1 deletion js/Components/PerPageSelector.vue
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
name="per_page"
:dusk="dusk"
:value="value"
class="block focus:ring-indigo-500 focus:border-indigo-500 min-w-max shadow-sm text-sm border-gray-300 rounded-md"
class="block focus:ring-indigo-500 focus:border-indigo-500 min-w-max shadow-sm text-sm border-gray-300 rounded-md dark:bg-gray-700 dark:text-gray-100 dark:border-gray-500"
@change="onChange($event.target.value)"
>
<option
Expand Down
31 changes: 13 additions & 18 deletions js/Components/Table.vue
Original file line number Diff line number Diff line change
Expand Up @@ -46,19 +46,14 @@
</slot>
</div>


<slot
name="tableReset"
can-be-reset="canBeReset"
:on-click="resetQuery"
<div
v-if="canBeReset"
class="order-5 sm:order-3 sm:mr-4 ml-auto"
>
<div
v-if="canBeReset"
class="order-5 sm:order-3 sm:mr-4 ml-auto"
>
<slot name="tableReset" :on-click="resetQuery">
<TableReset :on-click="resetQuery" />
</div>
</slot>
</slot>
</div>

<slot
name="tableAddSearchRow"
Expand Down Expand Up @@ -115,15 +110,15 @@
>
<TableWrapper :class="{ 'mt-3': !hasOnlyData }">
<slot name="table">
<table class="min-w-full divide-y divide-gray-200 bg-white">
<table class="min-w-full divide-y divide-gray-200 bg-white dark:divide-gray-400">
<thead class="bg-gray-50">
<slot
name="head"
:show="show"
:sort-by="sortBy"
:header="header"
>
<tr class="font-medium text-xs uppercase text-left tracking-wider text-gray-500 py-3 px-6">
<tr class="font-medium text-xs uppercase text-left tracking-wider text-gray-500 py-3 px-6 dark:bg-gray-500 dark:text-gray-100">
<HeaderCell
v-for="column in queryBuilderProps.columns"
:key="`table-${name}-header-${column.key}`"
Expand All @@ -133,7 +128,7 @@
</slot>
</thead>

<tbody class="bg-white divide-y divide-gray-200">
<tbody class="bg-white divide-y divide-gray-200 dark:bg-gray-600 dark:divide-gray-400">
<slot
name="body"
:show="show"
Expand All @@ -143,16 +138,16 @@
:key="`table-${name}-row-${key}`"
class=""
:class="{
'bg-gray-50': striped && key % 2,
'hover:bg-gray-100': striped,
'hover:bg-gray-50': !striped
'bg-gray-50 dark:bg-gray-500': striped && key % 2,
'hover:bg-gray-100 dark:hover:bg-gray-400': striped,
'hover:bg-gray-50 dark:hover:bg-gray-500': !striped
}"
>
<td
v-for="column in queryBuilderProps.columns"
v-show="show(column.key)"
:key="`table-${name}-row-${key}-column-${column.key}`"
class="text-sm py-4 px-6 text-gray-500 whitespace-nowrap"
class="text-sm py-4 px-6 text-gray-500 whitespace-nowrap dark:text-gray-100"
>
<slot
:name="`cell(${column.key})`"
Expand Down
2 changes: 1 addition & 1 deletion js/Components/TableAddSearchRow.vue
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
v-for="(searchInput, key) in searchInputs"
:key="key"
:dusk="`add-search-row-${searchInput.key}`"
class="text-left w-full px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 hover:text-gray-900"
class="text-left w-full px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-100 dark:hover:bg-gray-600 dark:hover:text-gray-100 rounded-md"
role="menuitem"
@click.prevent="enableSearch(searchInput.key)"
>
Expand Down
6 changes: 3 additions & 3 deletions js/Components/TableColumns.vue
Original file line number Diff line number Diff line change
Expand Up @@ -31,22 +31,22 @@
class="min-w-max"
>
<div class="px-2">
<ul class="divide-y divide-gray-200">
<ul class="divide-y divide-gray-200 dark:divide-gray-500">
<li
v-for="(column, key) in props.columns"
v-show="column.can_be_hidden"
:key="key"
class="py-2 flex items-center justify-between"
>
<p
class="text-sm text-gray-900"
class="text-sm text-gray-900 dark:text-gray-100"
>
{{ column.label }}
</p>

<button
type="button"
class="ml-4 relative inline-flex flex-shrink-0 h-6 w-11 border-2 border-transparent rounded-full cursor-pointer transition-colors ease-in-out duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-light-blue-500"
class="ml-4 relative inline-flex flex-shrink-0 h-6 w-11 border-2 border-transparent rounded-full cursor-pointer transition-colors ease-in-out duration-200 focus:outline-none focus:ring-2 focus:ring-light-blue-500"
:class="{
'bg-green-500': !column.hidden,
'bg-gray-200': column.hidden,
Expand Down
5 changes: 3 additions & 2 deletions js/Components/TableFilter.vue
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,17 @@
<div
v-for="(filter, key) in filters"
:key="key"
class="rounded-md dark:bg-gray-700"
>
<h3 class="text-xs uppercase tracking-wide bg-gray-100 p-3">
<h3 class="text-xs uppercase tracking-wide bg-gray-100 p-3 dark:text-gray-100 dark:bg-gray-700 dark:rounded-md">
{{ filter.label }}
</h3>
<div class="p-2">
<select
v-if="filter.type === 'select'"
:name="filter.key"
:value="filter.value"
class="block focus:ring-indigo-500 focus:border-indigo-500 w-full shadow-sm text-sm border-gray-300 rounded-md"
class="block focus:ring-indigo-500 focus:border-indigo-500 w-full shadow-sm text-sm border-gray-300 rounded-md dark:bg-gray-600 dark:text-gray-100 dark:border-gray-500"
@change="onFilterChange(filter.key, $event.target.value)"
>
<option
Expand Down
2 changes: 1 addition & 1 deletion js/Components/TableGlobalSearch.vue
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<template>
<div class="relative">
<input
class="block w-full pl-9 text-sm rounded-md shadow-sm focus:ring-indigo-500 focus:border-indigo-500 border-gray-300"
class="block w-full pl-9 text-sm rounded-md shadow-sm focus:ring-indigo-500 focus:border-gray-500 border-gray-300 focus:ring-2 dark:bg-gray-700 dark:text-gray-100 dark:border-gray-500"
:placeholder="label"
:value="value"
type="text"
Expand Down
2 changes: 1 addition & 1 deletion js/Components/TableReset.vue
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
ref="button"
type="button"
dusk="reset-table"
class="w-full bg-white border rounded-md shadow-sm px-4 py-2 inline-flex justify-center text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 border-gray-300"
class="w-full bg-white border rounded-md shadow-sm px-4 py-2 inline-flex justify-center text-sm font-medium text-gray-700 hover:bg-gray-50 focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 border-gray-300 dark:bg-gray-700 dark:text-gray-100 dark:border-gray-500 dark:hover:bg-gray-600"
aria-haspopup="true"
@click.prevent="onClick"
>
Expand Down
4 changes: 2 additions & 2 deletions js/Components/TableSearchRows.vue
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<div class="flex rounded-md shadow-sm relative mt-3">
<label
:for="searchInput.key"
class="inline-flex items-center px-4 rounded-l-md border border-r-0 border-gray-300 bg-gray-50 text-gray-500 text-sm"
class="inline-flex items-center px-4 rounded-l-md border border-r-0 border-gray-300 bg-gray-50 text-gray-500 text-sm dark:text-gray-100 dark:bg-gray-600 dark:border-gray-500"
>
<svg
xmlns="http://www.w3.org/2000/svg"
Expand All @@ -31,7 +31,7 @@
:name="searchInput.key"
:value="searchInput.value"
type="text"
class="flex-1 min-w-0 block w-full px-3 py-2 rounded-none rounded-r-md focus:ring-indigo-500 focus:border-indigo-500 text-sm border-gray-300"
class="flex-1 min-w-0 block w-full px-3 py-2 rounded-none rounded-r-md focus:ring-indigo-500 focus:border-gray-500 text-sm border-gray-300 focus:ring-2 dark:bg-gray-700 dark:border-gray-500 dark:text-gray-100"
@input="onChange(searchInput.key, $event.target.value)"
>
<div
Expand Down
2 changes: 1 addition & 1 deletion js/Components/TableWrapper.vue
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<div class="flex flex-col">
<div class="-my-2 overflow-x-auto sm:-mx-6 lg:-mx-8">
<div class="py-2 align-middle inline-block min-w-full sm:px-6 lg:px-8">
<div class="shadow border-b border-gray-200 relative">
<div class="shadow border-b border-gray-200 relative dark:border-0 dark:shadow-none">
<slot />
</div>
</div>
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 17e9f72

Please sign in to comment.