Squashed commit of the following:

commit dac58bbbcd5e5883da0ec765441b0788bafc7915
Merge: 6e2287306e 6eda4e4997
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Sun Nov 12 01:06:22 2023 +0330

    Merge branch 'master' into v4

commit 6e2287306ee36f44955b60270b692f777a84c207
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Sun Nov 12 01:01:47 2023 +0330

    working on theme-generator

commit 87e83108c70e207a0cd15705afb6f0f894a082cb
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Sat Nov 11 17:57:49 2023 +0330

    docs cleanup

commit f0b74c34ef112f3dd2b185ff527a2c44aca5e560
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Sat Nov 11 17:57:41 2023 +0330

    docs cleanup

commit 2ec5fc043b10419910e66731bc519a12d3d4ef6a
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Sat Nov 11 16:40:52 2023 +0330

    docs cleanup

commit a1e2d375c77ec103812cac73977ed3e93cc552ab
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Sat Nov 11 16:40:45 2023 +0330

    docs cleanup

commit b825810d042e6e7880aab5467b54b6bb18ff4919
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Sat Nov 11 16:20:55 2023 +0330

    store

commit 8593e836cdd1d3f2c6dc4d960d12d3d0d54c699b
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Sat Nov 11 15:55:16 2023 +0330

    store

commit 15f74de9ef4a573db0b4c6ad9dea7e506410fe06
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Sat Nov 11 04:50:59 2023 +0330

    docs

commit f46c9bdca7f0d5969a2aa0d3e39fa34da61c4f45
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Sat Nov 11 04:48:26 2023 +0330

    docs

commit 6e61ed4f66f0dac820558337218ecbfb0dc6154e
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Sat Nov 11 04:45:06 2023 +0330

    blog

commit 6050fa116350f44d8161ff93577b954a280cb140
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Sat Nov 11 04:41:53 2023 +0330

    docs: update deps

commit 13f7f8f8f8e480efb036c7f1550d7944fd932c9b
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Sat Nov 11 04:34:59 2023 +0330

    blog

commit 5591aafbad7ab5ddc8c897d69a389a5a488f563d
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Sat Nov 11 03:23:24 2023 +0330

    version

commit b37d5abee9e2753374909b4b838d4fd57cee94a3
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Sat Nov 11 02:51:33 2023 +0330

    docs

commit ab8c78ffd8d0b52287de7f363b7e9dd79ec0211d
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Nov 10 19:05:27 2023 +0330

    docs: show browser support data on components with new CSS rules

commit bb24d775bdd8c7b12f194f44baa484cc33a72088
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Nov 10 17:15:47 2023 +0330

    docs

commit a8f62a68484be437ed6828f5a07de51ded2daefd
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Nov 10 16:41:12 2023 +0330

    fix: #1622

commit 5ca85803b21f6064902ed13a5cf12e7f6ea8264b
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Nov 10 16:30:09 2023 +0330

    prettier

commit d4b7ea3c0f50e1b60c7d220f90778a8294c444e6
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Nov 10 14:18:03 2023 +0330

    bump version

commit 11a52421be8a3b7455bb9a0e876635689e06a88c
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Nov 10 14:17:47 2023 +0330

    fix homepage overscroll

commit 3e5556df2d9a658d385b73de57229d4d3b348de0
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Nov 10 14:14:40 2023 +0330

    improve themes

commit f3a923cdabe34429f543cf6a9dabc271d9413cda
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Nov 10 14:07:20 2023 +0330

    docs

commit 3f801e79296b19fe35e09fc0d90f910ae175dce2
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Nov 10 14:07:14 2023 +0330

    improve themes

commit 8de4734b050f0d13ba65066d6adb46397ccd1678
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Nov 10 14:07:07 2023 +0330

    fix input font size

commit cbbf997c05b5da26460281de7d9c8408c9eca2be
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Nov 10 14:07:00 2023 +0330

    improve tab

commit affd734c3e4854b04b37df97b5cd7e0e33d2e137
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Nov 10 05:17:11 2023 +0330

    bump alpha

commit 7f2ab939f93c7a72352e1c732df2053b516ec7a5
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Nov 10 05:02:26 2023 +0330

    fix: #2445

commit 8fc67972326016e1ccf198ef18e39ffa2def7ea1
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Nov 10 04:41:29 2023 +0330

    improve tab gradient

commit c444216dbdb91118565b5bc9316e5849c778b3ec
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Nov 10 03:56:26 2023 +0330

    fix form input size bug

commit d6a46bd549a045c953fb7cd045e6b249cfac3844
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Nov 10 03:51:56 2023 +0330

    update themes

commit 833ae5f5d38373a0621690503d0ea4e563710254
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Nov 10 03:00:17 2023 +0330

    update readme

commit ad7b4e3b3e924c5ac7100d0f37af8370346a53b2
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Nov 10 02:48:57 2023 +0330

    docs

commit 9a762af9c99def2f80c96b1a09f98efa182ec9da
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Nov 10 02:40:36 2023 +0330

    docs

commit bcd1338d755b0b9c291a7f12b8b56ff2c08d2cff
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Nov 10 02:40:28 2023 +0330

    improve compatibility with `@tailwindcss/forms`

commit 0c203fed18bab2b52ad6110872056621a1bb698d
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Nov 10 01:33:21 2023 +0330

    cleanup button styles

commit e6c099ce7016362d027a40ab896c4c30b0553c42
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Nov 10 01:20:25 2023 +0330

    oklch fallbacks

commit 0e24805f43416a9c8fc8f9afc1ce5092a0ca56b1
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 9 16:50:36 2023 +0330

    cleanup color values in components (use theme() instead of raw color)

commit a8d8d2f48f745ece66e757ea4bfde48236d34a39
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 9 16:49:59 2023 +0330

    docs

commit 586e534daea2ebde979cbac4297f3e57a74f319c
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 9 15:46:13 2023 +0330

    feat: new theme: sunset

commit c914f039e32f5b57a6268408dddcb679e2bead70
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 9 15:18:32 2023 +0330

    improve nord theme

commit e76821cf2165d526443581d7791ddc0fd149bb4b
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 9 15:15:17 2023 +0330

    improve theme colors

commit 35672bba3101939aa51c97c34a3b19a1f3753085
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 9 15:14:59 2023 +0330

    feat: new themes: dim, nord

commit 80da3b19af29b46a77f36628a147181e9bb76a10
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 9 15:14:16 2023 +0330

    tests

commit 3dc55a9b9b4d626195182cacbd44d493f6dd4478
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 9 15:14:07 2023 +0330

    docs

commit 2d76a62ad0e663e7f2157e43204d23f2a6075b22
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 9 12:54:08 2023 +0330

    remove unused function

commit a9bfce28eaba03bf68e176da4461f6c37ef698a1
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 9 12:48:36 2023 +0330

    increase oklch convert accuracy

commit 0055d359489e87ba4ad364aa4e766e76317aee33
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 9 12:44:52 2023 +0330

    docs

commit cb9474ae13a10f9f95d6b4984f7b052e2266845b
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 9 12:43:35 2023 +0330

    feat: remove --btn-text-case CSS variable

commit 3fc34514a97f3fb23fc2f9da4ef05a505505b969
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 9 12:42:20 2023 +0330

    feat: Reduce tab class name repetition

    Removed tab-lifted, tab-bordered, tab-lg, tab-md, tab-sm, tab-xs modifier classes for 'tab' item. Added tabs-lifted, tabs-bordered, tabs-lg, tabs-md, tabs-sm, tabs-xs classes for the parent 'tabs' class instead.

commit 9703e8c867522fbd9b37fefc90be3d6c15b48daf
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 9 03:00:02 2023 +0330

    workflows

commit 4bd202cf6bd39d21164dc268ab330dd3350212db
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 9 02:53:33 2023 +0330

    docs

commit 383794f5ce43cc57fe6c798c1fb2924f8ba61e81
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 9 02:53:29 2023 +0330

    fix drawer transition

commit db5a2bef1b75596d7f4f2164ca0bc08d6e81cc28
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 9 02:09:19 2023 +0330

    bump alpha version

commit ce0109a115bf69d05ce7e1d5c288d5eacdff34e1
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 9 02:08:30 2023 +0330

    docs

commit d80154170829d24c4d0b998f8fd02e57aed385d9
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 9 02:05:03 2023 +0330

    docs

commit a4ef8683f7c389b5ffa11366db4085e9e60ea265
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 9 01:46:29 2023 +0330

    feat: add new `theme-controller` component

commit d565c06a9b2be2e346ab15ba745d08a97f8c8a0b
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Nov 8 20:22:44 2023 +0330

    docs

commit a7108f54a9dbc8a1cfc0e2909736d593ab5858bf
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Nov 8 20:06:11 2023 +0330

    bump alpha version

commit 231046ac4c5b8bd6485d6f3d2ee364fea1c80dac
Merge: 492b4e10b9 ad23d6f966
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Nov 8 17:12:32 2023 +0330

    Merge branch 'master' into v4

commit 492b4e10b95ccddd154ec24882bae0b70ae4b1fa
Merge: faf0e5c6e0 bdfcd3fa54
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Nov 8 16:34:25 2023 +0330

    Merge branch 'master' into v4

    # Conflicts:
    #	src/docs/src/routes/(docs)/+page.svelte

commit faf0e5c6e0d02120a21824229513857172934a76
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Nov 8 16:30:08 2023 +0330

    set timeout-minutes for workflows

commit 4ba55c628e6b36fc6ef81026609b11e14786bde6
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Tue Nov 7 11:19:13 2023 +0300

    docs: inert drawer-content when drawer is open

commit b2561c2571088afc1864f31dab1366c9fde76cde
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Tue Nov 7 11:16:29 2023 +0300

    feat: button text is normal-case now by default

commit cbee20384563c7cf5bde71129f859e166487c169
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Tue Nov 7 11:10:15 2023 +0300

    feat: add color modifier and position modifier classes for `divider`

commit 8f477df37e54a67e867705d3053615015c7424f9
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Sat Nov 4 14:20:34 2023 +0300

    update deps

commit a5d8ff442de21d3509fab03988b5e5aa18d49e71
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Nov 3 04:43:37 2023 +0300

    alpha release

commit 4664ac00be05421db3a605d06b6cc1c6598ea534
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Nov 3 04:42:31 2023 +0300

    update themes and tests

commit dafe73dee588c23c36b6ad39fbf0b3e47570f0f3
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Nov 3 04:26:18 2023 +0300

    update package.json

commit 9cd508f298a6ab414f6568e02d76e5589c5b64b2
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Nov 3 04:26:11 2023 +0300

    fix test files

commit 9f8e08cb6849fad5a9b329303de562be1c9198b4
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Nov 3 03:29:30 2023 +0300

    prettier

commit f86000f14d37e5b52eb89b62f6faa4431b617a99
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Nov 3 03:23:42 2023 +0300

    fix sveltekit warnings

commit 00a3e35e16685808c55a9640114afb0f50fe6ee9
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Nov 3 02:18:55 2023 +0300

    docs

commit 90670e4829af6f11b40d832c910b4801dd3befd9
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Nov 3 01:21:26 2023 +0300

    fix timeline bugs

commit 17a9f0768dafac64fc705ae22819e7ea1bab25f1
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 2 21:47:28 2023 +0300

    fix theme-generator

commit 39f57f3fd5bd29096745154967e78cee52849e03
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 2 20:52:28 2023 +0300

    fix theme-generator func

commit 7d0cb79af378d619e5cb73ebec7d17d2cf33389f
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 2 20:14:19 2023 +0300

    fix ghost btn border color

commit 47a7d2fca551af599a2966274a1aefc3b813c47f
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 2 20:08:33 2023 +0300

    docs: improve font loading

commit 57eafa019fe5d8e78072bbcf1d854dbb1a368b57
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 2 12:59:57 2023 +0300

    bump alpha ver

commit 8e2887a09bc3d8bfc4f0315d6edf38a034ed0c66
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 2 12:59:10 2023 +0300

    improve button style

commit 5ec73219cdf35143719acf2bb789d60f6d49b929
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 2 12:17:53 2023 +0300

    feat: removed `primary-focus`, `secondary-focus`, `accent-focus`, `neutral-focus`, color names. Darker colors are now generated using CSS color-mix() under the hood

commit 60bfc507168f4b44c37320c829cb0dacaf7affff
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 2 10:49:15 2023 +0300

    docs

commit c7601b5d5355e8fb076995653122d927ea790eab
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 2 10:38:03 2023 +0300

    docs

commit 9c6d797882db0e3704395bd8360790624a322a07
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 2 09:50:59 2023 +0300

    bump alpha version

commit f31075105e31af4d14e708d446cf440815f0ce77
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 2 09:50:26 2023 +0300

    docs

commit 1954b3cbcca6255e0eb71e535bdc1dc416592acb
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 2 09:47:18 2023 +0300

    feat: new `diff` component

commit 96592292856d84ac134cbef81c3fbf23da22a916
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 2 07:19:52 2023 +0300

    docs

commit 8b8ddb2d22f4856008a86828cb092373d7011b4c
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 2 05:59:22 2023 +0300

    update readme

commit 3f846c86f1d3bcc3ad1863b7f478ebf020862095
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 2 05:57:00 2023 +0300

    docs

commit 0696343f461408aeda3d89bb0b367e02ca0f96cd
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 2 05:53:01 2023 +0300

    docs: auto set lang direction

commit 257fbab83ae9e289bdaa128834d2f32381de982f
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 2 05:52:43 2023 +0300

    docs: add farsi translation

commit 45bbfc041111a3c951c4dbbc437598445922405b
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 2 05:52:25 2023 +0300

    fix tab RTL issue

commit 45e883812152b5bda1e1ea4fc0145f664ac8f498
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 2 05:52:14 2023 +0300

    add direction to translation files

commit 2c3a03e7bda7f80e280b73d93e894d2f2db13432
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 2 03:43:11 2023 +0300

    docs: add /docs/roadmap/

commit f2c24ac1d701a070d11794d33a83c44ff4610710
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Nov 2 03:42:54 2023 +0300

    update timeline style

commit 34c53a5c269202b523b5b6bc065cd0e11220b865
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Nov 1 23:30:42 2023 +0300

    bump alpha version

commit 82e865981d665a0644b08f3588da7e5ff37397b5
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Nov 1 23:30:06 2023 +0300

    feat: add `timeline-snap-icon` modifier for timeline

commit 2b2fb03fa8aceb9fc72c1213e9ba6cf679020434
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Nov 1 22:35:17 2023 +0300

    bump alpha version

commit d6cd24117c347f90ac19ceb12d1586761b3ebcdd
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Nov 1 22:34:39 2023 +0300

    fix color issue

commit d47e0575d24bd0022d84bf57c59c733d279b23fe
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Nov 1 22:23:09 2023 +0300

    feat: add `skeleton` class

commit 31dbb41e2dfb7c5ad165393ac5eed832d2dc08d7
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Nov 1 20:33:11 2023 +0300

    feat: remove `btn-group` and `input-group`. (use `join` instead)

commit dca160edcb792906bf6805860195dd3eb841e17e
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Nov 1 19:29:59 2023 +0300

    docs

commit 9073d3ab611b85881f5476718eb770e7fe7dfc92
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Nov 1 18:32:24 2023 +0300

    docs

commit 52fcdf4cc6ac18eb78666e2f961648c81214909f
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Nov 1 18:32:18 2023 +0300

    update deps

commit 488228f8c2d8b6aa5855c509250cbc80b174d7e1
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Nov 1 18:20:11 2023 +0300

    remove `randomcolor`

commit c26541954771cdc37524e0769fcc5be546efcc0f
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Nov 1 18:19:19 2023 +0300

    docs: update deps, remove `colord`, fix theme generator

commit 27625d7cbab5320e2d47a89ce1f57d992e2e237f
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Nov 1 04:46:20 2023 +0300

    bump alpha version

commit 7b0da321c5ba1da7ca41fa53f3f0000e70ea2a61
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Nov 1 04:45:09 2023 +0300

    docs: add missing thumbnail

commit bcc07666b767f068c8872f5f8050283e4369fca5
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Nov 1 04:41:36 2023 +0300

    fix drawer overlay color

commit 4795afdc1bb18e1e54cfe8ab6d70a6f893dd1044
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Nov 1 04:39:09 2023 +0300

    cleanup build log

commit ce5c4d4c00dbc449b2fbe31548f8af08cc6be3f9
Merge: 6320c0dde0 ed5ff0efc0
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Nov 1 04:15:21 2023 +0300

    Merge branch 'master' into v4

    # Conflicts:
    #	src/docs/src/lib/data.js

commit 6320c0dde06eea386783bcb6a6ac9865e0acdda9
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Nov 1 03:56:48 2023 +0300

    feat: add new `timeline` component

commit b2dc0701c8d8b8980b29cdc666b3af0e1614e22d
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Nov 1 00:15:58 2023 +0300

    feat: empty tab tag now fills the free space

commit 867ddfabf1e82b638030d8a8704886184a19da89
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Tue Oct 31 01:04:10 2023 +0300

    feat: add new `tab-content` class. allows showing content based on checked radio input

commit 539915ea77d2e3d6c1fc9fda0c65539c1ea6b831
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Mon Oct 30 23:40:19 2023 +0300

    feat: improve tab-lifted style

    feat: use only one pseudo element for tab-lifted corners
    feat: improve tab-lifted focus-visible style

commit 2b54cfb1564bff7decde684618cbbe6e414c3e52
Merge: be930bad39 6e9b52932e
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Sun Oct 29 02:34:46 2023 +0300

    Merge branch 'master' into v4

    # Conflicts:
    #	.github/workflows/deploy-docs.yml
    #	package.json

commit be930bad391d1e0f8aee944c68f09d6f0f2e1da5
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Oct 27 12:22:57 2023 +0300

    color functions

commit 3d5038802a37eab61d536e7540f33e1825fe2ab3
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Oct 27 01:12:41 2023 +0300

    docs

commit 8d40b870cb31f93c1282e4287c7f581742c5e7b8
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Oct 26 21:32:37 2023 +0300

    color functions

commit 2ff3df60b6fa0fd54daa4b6487785570ef8818db
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Oct 26 02:45:14 2023 +0300

    bump alpha version

commit 58acde67565c40ad733031ab46507a91f76d3b73
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Oct 26 02:44:13 2023 +0300

    use oklch in dark theme

commit c44a4246711bfa1c2c2f91b212ff81afccd269a5
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Oct 26 02:41:47 2023 +0300

    fix isDark func

commit 2695de8ab1fa3fae943be47e2c81c9d8e5a2d663
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Oct 26 02:41:36 2023 +0300

    use oklch in docs

commit 5029881442753c9959b002859040928af5a84938
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Oct 26 02:28:45 2023 +0300

    use oklch in components

commit e27192153ba588495eeee9b709c30fe2235a932c
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Oct 26 02:28:36 2023 +0300

    use oklch in light theme

commit 36bcf69920f4022ae5d254d51459798c039ac8fe
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Oct 26 02:28:29 2023 +0300

    use oklch in functions

commit 574bd943e3ebbbadfd26264a6986f424dedaa6b3
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 25 14:25:48 2023 +0300

    cleanup readme

commit e94dd831762593b025eebf1504a7b7487914e0d4
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 25 14:14:30 2023 +0300

    docs

commit 9942c7e995d00ea9b29ff2a32cf856985eaa4189
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 25 13:31:59 2023 +0300

    docs

commit 3b294675245d79fa5f9bb5666d54364342166aad
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 25 12:36:19 2023 +0300

    docs

commit 3675ffaee2b79e702241758d768006d8723e9a15
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 25 12:34:15 2023 +0300

    docs

commit d54900b984829d934bc5da5a2a6e4c41df5545ae
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 25 12:21:11 2023 +0300

    docs

commit 2e922c3607a04be2487837126d9dd17aebd23720
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 25 03:35:42 2023 +0300

    docs

commit faac6bff84a1f27bbf014962a5371fe5e5a51c71
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 25 02:29:02 2023 +0300

    docs

commit f8cfa08b6aef2762b75339b6635f688fdc111ea0
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 25 02:27:42 2023 +0300

    docs

commit 987d22df7d0d1684b4edc39cb0757bbb2bd4ed24
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 25 01:05:54 2023 +0300

    docs

commit 29c192568708d228f0dc116c3c4d724a45468f36
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 25 00:54:03 2023 +0300

    docs

commit c9f681091ca702198f8c7c5d8d9a064ae977c12c
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 25 00:44:35 2023 +0300

    docs

commit e26dc2fd45f5b6b102b9000f5e5f93bd1a6e89d3
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 25 00:18:50 2023 +0300

    docs

commit 5ef2b39971d617e7a204344f7a4f5497f03aa87d
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Tue Oct 24 20:29:25 2023 +0300

    test

commit 75facf4d13e09cc463ff68b9955bd8b39061499b
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Sun Oct 22 10:53:37 2023 +0300

    docs

commit 17b287a3eacf895f3cb57bcaceee051d4399775d
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Sun Oct 22 10:35:49 2023 +0300

    docs

commit c1b7ccd0beb92fe56f7bf5e4438b0a5a595ea2ca
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Sun Oct 22 08:54:15 2023 +0300

    docs

commit edb78a07bcee6924e2e5b57a3d2bd25be83393aa
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Sun Oct 22 01:16:12 2023 +0300

    docs: resources

commit d945b94281c9b8f5518766ac5d317961433ed7a5
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Sat Oct 21 13:06:23 2023 +0300

    docs cleanup

commit 9e7e3377e6eb70828fed5c810b5c40e0ae1b71bb
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Sat Oct 21 10:44:31 2023 +0300

    docs

commit f4861ae570e26456ad9d5b15e89439300da6cd16
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Fri Oct 20 09:18:35 2023 +0300

    doc: new sidebar. lots of improvements

commit da028aa1560e0c18f528cac42d8fed15be47bea0
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Oct 19 21:57:14 2023 +0300

    docs

commit 5df00e48233e1146892f69bbefb60f1169975487
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Oct 19 21:49:46 2023 +0300

    Squashed commit of the following:

    commit 76b4fb727e
    Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
    Date:   Thu Oct 19 21:49:09 2023 +0300

        workflows

    commit 7082c77247
    Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
    Date:   Thu Oct 19 21:04:07 2023 +0300

        workflows

    commit 74178c6e5e
    Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
    Date:   Thu Oct 19 15:39:46 2023 +0300

        workflows

    commit 2da5b2c7c3
    Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
    Date:   Wed Oct 18 05:25:44 2023 +0300

        update issue template

commit d61aa25b71dedac96747269748ab17a643ad7f70
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Oct 19 21:46:12 2023 +0300

    docs

commit d601b17cba297089da0859f3b1b09a4f2aa9bd5c
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Oct 19 21:30:16 2023 +0300

    docs

commit 174f1fadf87ad9171accc40be20fd9c7957ec4ac
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Oct 19 21:05:17 2023 +0300

    Squashed commit of the following:

    commit 7082c77247
    Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
    Date:   Thu Oct 19 21:04:07 2023 +0300

        workflows

    commit 74178c6e5e
    Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
    Date:   Thu Oct 19 15:39:46 2023 +0300

        workflows

    commit 2da5b2c7c3
    Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
    Date:   Wed Oct 18 05:25:44 2023 +0300

        update issue template

commit 969f726b6afbb97cc51b8eaacf019549bb493b7f
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Oct 19 20:26:27 2023 +0300

    docs

commit 458c0a465e184aaa2c0ad2006cceedeccac0de6b
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Oct 19 19:55:32 2023 +0300

    add store page

commit fec60db6463db304a1ace12dd7c19366d63275e1
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Oct 19 17:33:46 2023 +0300

    docs

commit 35e88ce1fff706b049765ceba360ed58a30048c2
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Oct 19 17:33:39 2023 +0300

    fix mockup window

commit 5d8300826a37f02c4f25a6c9cfa37b1eef4a1d60
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Oct 19 16:38:06 2023 +0300

    feat: deprecate RTL config

commit 50648302964adfb1eef3bb4d555d7765d20c0a59
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Oct 19 15:45:35 2023 +0300

    Squashed commit of the following:

    commit 74178c6e5e
    Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
    Date:   Thu Oct 19 15:39:46 2023 +0300

        workflows

    commit 2da5b2c7c3
    Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
    Date:   Wed Oct 18 05:25:44 2023 +0300

        update issue template

commit ec6ad62e41a047f0af76eb4e0cfc9d5646c6c9c8
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Oct 19 14:02:11 2023 +0300

    docs: load data on server

commit ec590ce5ebbf1473c343f1b392be24228f73e0e3
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Oct 19 03:29:21 2023 +0300

    docs

commit c5894dc9a92fc944095f8f54f149c619daab629b
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Oct 19 03:29:17 2023 +0300

    docs: add Farsi translation draft

commit 8bd94315bc13f7022fa93a2d415c469fafc8c05c
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Thu Oct 19 02:07:02 2023 +0300

    docs RTL

commit aee2feb29e94a748ec7af4e8291538c26d52bb1a
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 18 10:14:58 2023 +0300

    docs

commit d016f52d9041a9c047a22bb01a612dea5342c532
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 18 10:14:51 2023 +0300

    mockup RTL style

commit d6c447c746d5357dd57c08a264b229801f681765
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 18 09:43:45 2023 +0300

    Use logical properties for components

    feat: use logical properties for `mockup`, `steps`, `tab`

commit a95c5f512b9229e72cf4508eaba0b90c903dba18
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 18 08:34:39 2023 +0300

    docs

commit 9700f3ec7183b3efd82855716988754ecb3d0e17
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 18 08:34:31 2023 +0300

    fix radio button width

commit 931fe928cf6d93a1bfee09f1d2908beebc9fa757
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 18 08:29:01 2023 +0300

    Use logical properties for components

    feat: use logical properties for `breadcrumbs`, `checkbox`, `join`, `menu`, `table`, `alert`, `drawer`, `file-input`, `mask`, `indicator`, `toast`

commit 742c676ee44f27b084d1f43df1e3c0c28c91a1c3
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 18 05:27:03 2023 +0300

    Squashed commit of the following:

    commit 2da5b2c7c3
    Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
    Date:   Wed Oct 18 05:25:44 2023 +0300

        update issue template

commit b9dfef91b989001656890d3748451a13dcc64f1b
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 18 04:07:44 2023 +0300

    docs

commit 2327a1f1dfb5189634ee8d5830c8d5749e4c7254
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 18 04:03:08 2023 +0300

    use gap instead of space-* for table examples

commit 3f7169352e876aa15fbc081e5e290d05e7f6f9c3
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 18 04:02:44 2023 +0300

    feat: use logical properties for `stats`

commit c08e3d7cd9eb1cc67a308e537257d2c743cc0852
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 18 04:02:17 2023 +0300

    use automatic utility generation instead of using raw CSS

commit 34fd6bf230124c9246b110a9fb554e116fabe027
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 18 03:20:35 2023 +0300

    feat: use logical properties for `avatar` examples

commit 763a4f20c894d1b4b4aadea93c50f2ac66203751
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 18 03:20:24 2023 +0300

    feat: use logical properties for `collapse`

commit fbe15dd5287247dfcd3c895f952fda7dbf69e95d
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 18 03:07:58 2023 +0300

    feat: use logical properties for `dropdown`

commit f556f4077b5dfc66ce68c329a1fa3031734140b9
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 18 03:01:25 2023 +0300

    feat: use logical properties for `chat`

commit f667d221d2afc041484e8ab963427f1e2e6b512a
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 18 02:58:21 2023 +0300

    add `tailwindcss` to dev dependencies

commit fd6fa3b1b49f01ed545254b6e47973a976ee99c2
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 18 02:57:45 2023 +0300

    add autoprefixer to playground

commit e8db053f5f222c0091c41740e45647e59b482def
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 18 02:36:38 2023 +0300

    typo

commit d2b1c78e8ef2a6ee63b7387180fc9c026e7158dd
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 18 02:30:27 2023 +0300

    logs

commit 7e85e6100053427199f37bc97803702a2a0c8e8d
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 18 02:28:53 2023 +0300

    logs

commit 2855b19fa7334864e021274cfdbd45d76c31008b
Author: Pouya Saadeghi <pouya.saadeghi@gmail.com>
Date:   Wed Oct 18 02:18:48 2023 +0300

    Clean up dependencies and logs

    feat: remove `tailwindcss` and `postcss` dependencies.
    feat: use `picocolors` for logs
    fix: update prettier plugin
This commit is contained in:
Pouya Saadeghi 2023-11-12 01:08:10 +03:30
parent 2fa42730ba
commit 81d1748da8
251 changed files with 8005 additions and 7096 deletions

View File

@ -6,17 +6,10 @@ on:
runtime:
type: choice
description: JS runtime
default: "bun"
default: "npm"
options:
- "bun"
- "npm"
npm-tag:
type: choice
description: Version of daisyUI to install
default: "latest"
options:
- "latest"
- "alpha"
workflow_call:
push:
branches:
@ -31,11 +24,12 @@ on:
jobs:
deploy-docs:
timeout-minutes: 10
runs-on: ubuntu-latest
env:
runtime: ${{ github.event.inputs.runtime || 'bun'}}
npm-tag: ${{ github.event.inputs.npm-tag || 'latest'}}
runtime: ${{ github.event.inputs.runtime || 'npm'}}
LEMONSQUEEZY_API_KEY: ${{ secrets.LEMONSQUEEZY_API_KEY }}
YOUTUBE_API_KEY: ${{ secrets.YOUTUBE_API_KEY }}
if: |
github.event_name == 'workflow_dispatch' ||
github.event_name == 'workflow_call' ||
@ -65,15 +59,20 @@ jobs:
- name: Install docs dependencies
run: cd src/docs && ${{ env.runtime }} install
- name: Install daisyUI fixed tag if production
- name: Install daisyUI latest version if production
if: github.repository == 'saadeghi/daisyui'
run: cd src/docs && ${{ env.runtime }} i daisyui@${{ env.npm-tag }}
run: cd src/docs && ${{ env.runtime }} i daisyui@latest
- name: Install daisyUI newest version if staging
- name: Install daisyUI newest tag if staging
if: github.repository == 'daisyui/daisyui.github.io'
run: cd src/docs && ${{ env.runtime }} i daisyui@$([[ $(npm view daisyui version) > $(npm view daisyui dist-tags.alpha) ]] && echo "latest" || echo "alpha")
- name: Add robots.txt if staging repo
- name: Set daisyUI version in env file if staging
if: github.repository == 'daisyui/daisyui.github.io'
run: |
echo 'VITE_DAISYUI_VERSION=ALPHA' > src/docs/.env
- name: Add robots.txt if not main repo
if: github.repository != 'saadeghi/daisyui'
run: |
echo 'User-agent: *

View File

@ -27,6 +27,7 @@ on:
jobs:
release:
timeout-minutes: 10
if: github.repository == 'saadeghi/daisyui'
runs-on: ubuntu-latest
env:

View File

@ -9,6 +9,7 @@ on:
- "src/theming/**"
jobs:
release:
timeout-minutes: 10
name: "Build"
runs-on: ubuntu-latest
steps:

187
README.md
View File

@ -2,58 +2,22 @@
[![][logo-url]][docs-url]
**The most popular, free and open-source Tailwind CSS component library**
**The most popular, free and open-source component library for Tailwind CSS**
[ [See all components](https://daisyui.com/components/) ]
[![][tweet]][tweet-url]
[![][build]][build-url] [![][npm]][npm-url] [![][license]][license-url]
[![][dl]][npm-url] [![][stars]][gh-url] [![][commit]][gh-url]
</div>
[![][banner-url]][docs-url]
# daisyUI 4
# daisyUI 3.0
### 🌼 [Official website →](https://daisyui.com/)
[![][build]][build-url] [![][npm]][npm-url] [![][number-of-components]][docs-url] [![][license]][license-url]
[![][dl]][npm-url] [![][stars]][gh-url] [![][commit]][gh-url]
### 🌼 [See all components →](https://daisyui.com/components/)
- [Official website →](https://daisyui.com/)
- [See all components →](https://daisyui.com/components/)
- [How to use →](https://daisyui.com/docs/install/)
### 🌼 [How to use →](https://daisyui.com/docs/install/)
## 🌼 Features
- A plugin for Tailwind CSS
- Faster development
- Cleaner HTML
- Customizable and themeable
- Pure CSS. Works on all frameworks
## 📀 Install now!
```bash
npm i -D daisyui@latest
```
Then add daisyUI to your `tailwind.config.js`:
```js
module.exports = {
plugins: [require("daisyui")],
}
```
[ [Read more →][docs-url-install] ]
## 🚀 Use
[[See all components →](https://daisyui.com/components/)]
## 📘 Documents + Examples
See the official site: [ [daisyui.com →](https://daisyui.com/)]
## 🤝 Support daisyUI
## Sponsors
| | |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@ -61,139 +25,6 @@ See the official site: [ [daisyui.com →](https://daisyui.com/)]
| **Backers** <br /> Thank you to all our backers! <br /> [[Become a backer](https://opencollective.com/daisyui)] | <a href="https://opencollective.com/daisyui" target="_blank"><img src="https://opencollective.com/daisyui/backers.svg?button=false&width=500&avatarHeight=46"><img src="https://opencollective.com/daisyui/organizations.svg?button=false&width=500&avatarHeight=46"></a> |
| **Contributors** <br /> This project exists thanks to all the people who contribute. <br /> [[Contribute](https://github.com/saadeghi/daisyui/blob/master/.github/CONTRIBUTING.md)] | <a href="https://github.com/saadeghi/daisyui/graphs/contributors" target="_blank"><img src="https://contrib.rocks/image?repo=saadeghi/daisyui&columns=14&anon=1&max=300" width="500"></a> |
Tweet about daisyUI: [![][tweet]][tweet-url]
## 📁 List of components
<details>
<summary>
show / hide
</summary>
- Actions
- [x] Button
- [x] Dropdown
- [x] Modal
- [x] Swap
- Data display
- [x] Alert
- [x] Avatar
- [x] Badge
- [ ] Banner
- [ ] Calendar
- [x] Card
- [x] Carousel
- [x] Chat bubble
- [x] Collapse
- [x] Countdown
- [ ] Empty placeholder
- [x] Kbd
- [x] Loading
- [x] Progress
- [x] Radial progress
- [x] Stat
- [x] Table
- [ ] Tag
- [ ] Timeline
- [x] Toast
- [x] Tooltip
- [x] Treeview
- Data input
- [x] Checkbox
- [x] File input
- [x] Text input
- [x] Radio
- [x] Range
- [x] Rating
- [x] Select
- [x] Textarea
- [x] Toggle
- Layout
- [x] Artboard
- [x] Button group
- [x] Divider
- [x] Drawer
- [x] Footer
- [x] Join
- [x] Hero
- [x] Indicator
- [x] Input group
- [x] Mask
- [x] Stack
- Navigation
- [x] Bottom Navigation
- [x] Breadcrumbs
- [x] Link
- [x] Menu
- [x] Navbar
- [x] Pagination
- [x] Steps
- [x] Tab
- Mockup
- [x] Browser
- [x] Code
- [x] Phone
- [x] Window
</details>
## 📰 Featured on:
<details>
<summary>
show / hide
</summary>
- Blogs
- [Logrocket](https://blog.logrocket.com/daisyui-tailwind-components-react-apps/)
- [GraphCMS](https://graphcms.com/blog/build-a-personal-timeline-with-graphcms-and-sveltekit)
- [wweb.dev](https://wweb.dev/weekly/85/)
- [flaming.codes](https://flaming.codes/posts/boostrap-tailwind-alternative-with-daisy-ui)
- [rockyourcode](https://www.rockyourcode.com/how-to-setup-react-typescript-with-snowpack-and-daisyui/)
- [HackerNews](https://news.ycombinator.com/item?id=28004515)
- [Product Hunt](https://www.producthunt.com/posts/daisyui)
- [Siecle Digital](https://siecledigital.fr/2021/05/29/daisyui-plugin-gratuit-avec-composants-tailwind-css-a/)
- [speckyboy](https://speckyboy.com/weekly-news-for-designers-594/)
- [dailydev](https://app.daily.dev/posts/-4OPGw0te)
- [Future Tech Blog (Japanese)](https://future-architect.github.io/articles/20211124a/)
- [Adding Tailwind and Daisy UI to SvelteKit](https://dev.to/brewhousedigital/adding-tailwind-and-daisy-ui-to-sveltekit-2hk5)
- Youtube videos
- [Supabase & Sveltekit - Build Twitter in 75 minutes](https://www.youtube.com/watch?v=mPQyckogDYc)
- [Setup the Best Frontend JavaScript Stack - Svelte, Vite, TailwindCSS and DaisyUI](https://www.youtube.com/watch?v=mEBPN_9jTAE)
- [Jamstack powered Image gallery with Cloudinary, Tailwind and DaisyUI](https://www.youtube.com/watch?v=Hpjq0D1vcpM)
- [SvelteKit Crash Course w/ Tailwind CSS and DaisyUI, GraphQL and dynamic routes](https://www.youtube.com/watch?v=zH2qG9YwN3s)
- [DaisyUI : Worth a try or skip on by?](https://www.youtube.com/watch?v=hM9fENyAquM)
- [How to use daisyUI in SvelteKit?](https://www.youtube.com/watch?v=haKnkk6ds20)
- [DaisyUI Untuk Yang Mau Pindah ke TailwindCSS dari Bootstrap (Indonesian)](https://www.youtube.com/watch?v=Wm2g6FWec34)
- [Next.js - Tailwind - DeisyUI Setup](https://www.youtube.com/watch?v=uXQgJbUj3PQ)
- [Svelte Setup with Vite, Tailwind, DaisyUI. Custom Themes!](https://www.youtube.com/watch?v=5lF5PxBJoso)
- [Build a blog with Svelte](https://www.youtube.com/watch?v=u9jtHBE6NL8)
- [Building a product in less than 10 minutes: Laravel, InertiaJS, VueJS, TailwindCSS, DaisyUI](https://www.youtube.com/watch?v=XR1rS-CCfx0)
- [Infinite scrolling with MERN | ReactJS, TailwindCSS v3, DaisyUI | NodeJs, Express, MongoDB](https://www.youtube.com/watch?v=y7LYoRGRqRI)
- [How to install TailwindCSS v3 and DaisyUI to your React app](https://www.youtube.com/watch?v=XBYvzPe7skc)
- [Laravel: DaisyUI Agiliza Tus Desarrollos Con TailwindCSS + Select2 Tailwind Style (Spanish)](https://www.youtube.com/watch?v=28db3jojTgo)
- [Build a Responsive Landing Page using DaisyUI, ReactJS and Tailwind CSS](https://www.youtube.com/watch?v=37gtpvy-k9U)
- Courses
- [Building with SvelteKit and GraphCMS](https://explorers.netlify.com/learn/building-with-sveltekit-and-graphcms)
- [Svelte for Beginners by Mike Karan](https://www.udemy.com/course/svelte-for-beginners/)
- [React Front To Back 2022 by Brad Traversy](https://www.udemy.com/course/react-front-to-back-2022/)
- [Build Instagram profile page UI clone w/Next.js TailwindCSS](https://www.udemy.com/course/build-instagram-profile-page-ui-clone-nextjs-tailwindcss/)
- [Instagram UI Clone Login Page w/ NextJS & TailwindCSS](https://www.udemy.com/course/instagram-ui-clone-login-page-w-nextjs-tailwindcss/)
- [Build your Developer Portfolio and Blog from Scratch with Svelte and GraphCMS](https://www.freecodecamp.org/news/build-your-developer-portfolio-from-scratch-with-sveltekit-and-graphcms/)
- Starters
- [Vite-Boot](https://github.com/kirklin/vite-boot) Vite + Vue3 + TypeScript + Vue-Router4 + Pinia + Tailwind CSS + daisyUI Template.
- [Nuxtwind Daisy](https://nuxtwind-daisy.ossph.org) Nuxt 3 + Tailwind CSS + daisyUI Template and more pre-installed configurations like fonts, icons, animations, etc.
</details>
---
<div align="center">
@ -224,7 +55,7 @@ Tweet about daisyUI: [![][tweet]][tweet-url]
[jsdeliver-url]: https://www.jsdelivr.com/package/npm/daisyui
[build-url]: https://github.com/saadeghi/daisyui/actions
[tweet-url]: https://twitter.com/intent/tweet?text=daisyUI%20%0D%0AComponents%20for%20Tailwind%20CSS%20%0D%0Ahttps://github.com/saadeghi/daisyui
[number-of-components]: https://badgen.net/badge/total%20components/53/green
[number-of-components]: https://badgen.net/badge/total%20components/55/green
[docs-url-install]: https://daisyui.com/docs/install
[docs-url]: https://daisyui.com/
[logo-url]: https://raw.githubusercontent.com/saadeghi/daisyui/master/src/docs/static/images/daisyui-logo/favicon-192.png

BIN
bun.lockb

Binary file not shown.

View File

@ -38,7 +38,6 @@
"src/lib/**/*.js",
"dist/*.js",
"dist/{themes,styled,unstyled,full}.css",
"!dist/*.rtl.css",
"src/index.js",
"src/theming/*.js",
"src/theming/*.d.ts",
@ -57,13 +56,11 @@
]
},
"scripts": {
"init": "npm install && npm run build && cd src/docs && npm install && cd src/experiments/playground && npm install",
"init": "npm install && npm run build && cd src/docs && npm install && npm run get-json --silent && cd src/experiments/playground && npm install",
"prettier": "prettier --write '**/*.{js,svelte,md,json,html,css}' --config src/.prettierrc.yaml --ignore-path src/.prettierignore",
"build": "node src/build",
"build:skipfullcss": "node src/build --skipfullcss",
"dev": "cd src/docs && npm run dev",
"add": "touch src/components/unstyled/$npm_config_name.css && touch src/components/styled/$npm_config_name.css",
"postadd": "open src/components/unstyled/$npm_config_name.css && open src/components/styled/$npm_config_name.css",
"playground": "cd src/experiments/playground && npm run dev",
"release": "rm -f package-lock.json && standard-version",
"release:patch": "rm -f package-lock.json && standard-version --release-as patch",
@ -77,15 +74,14 @@
"prejss-cli": "0.3.3",
"prettier": "^3.0.3",
"prettier-plugin-svelte": "^3.0.3",
"prettier-plugin-tailwindcss": "^0.5.5",
"rtlcss": "4.1.1",
"standard-version": "^9.5.0"
"prettier-plugin-tailwindcss": "^0.5.6",
"standard-version": "^9.5.0",
"tailwindcss": "^3.3.5"
},
"dependencies": {
"colord": "^2.9",
"css-selector-tokenizer": "^0.8",
"postcss": "^8",
"postcss-js": "^4",
"tailwindcss": "^3.1"
"culori": "^3",
"picocolors": "^1",
"postcss-js": "^4"
}
}

View File

@ -1,12 +1,56 @@
:root,
[data-theme] {
background-color: hsl(var(--b1) / var(--tw-bg-opacity, 1));
color: hsl(var(--bc) / var(--tw-text-opacity, 1));
background-color: theme(colors.base-100);
color: theme(colors.base-content);
}
/* @supports (color: lch(0 0 0)) {
:root,
[data-theme] {
background-color: lch(var(--b1) / var(--tw-bg-opacity, 1));
color: lch(var(--bc) / var(--tw-text-opacity, 1));
@supports not (color: oklch(0 0 0)) {
:root {
color-scheme: light;
--fallback-p: #491eff;
--fallback-pc: #d4dbff;
--fallback-s: #ff41c7;
--fallback-sc: #fff9fc;
--fallback-a: #00cfbd;
--fallback-ac: #00100d;
--fallback-n: #2b3440;
--fallback-nc: #d7dde4;
--fallback-b1: #ffffff;
--fallback-b2: #e5e6e6;
--fallback-b3: #e5e6e6;
--fallback-bc: #1f2937;
--fallback-in: #00b3f0;
--fallback-inc: #000000;
--fallback-su: #00ca92;
--fallback-suc: #000000;
--fallback-wa: #ffc22d;
--fallback-wac: #000000;
--fallback-er: #ff6f70;
--fallback-erc: #000000;
}
} */
@media (prefers-color-scheme: dark) {
:root {
color-scheme: dark;
--fallback-p: #7582ff;
--fallback-pc: #050617;
--fallback-s: #ff71cf;
--fallback-sc: #190211;
--fallback-a: #00c7b5;
--fallback-ac: #000e0c;
--fallback-n: #2a323c;
--fallback-nc: #a6adbb;
--fallback-b1: #1d232a;
--fallback-b2: #191e24;
--fallback-b3: #15191e;
--fallback-bc: #a6adbb;
--fallback-in: #00b3f0;
--fallback-inc: #000000;
--fallback-su: #00ca92;
--fallback-suc: #000000;
--fallback-wa: #ffc22d;
--fallback-wac: #000000;
--fallback-er: #ff6f70;
--fallback-erc: #000000;
}
}
}

View File

@ -9,12 +9,14 @@ execSync(
execSync("cat dist/utilities/global/*.css > dist/utilities.css")
execSync("node_modules/.bin/prejss-cli dist/utilities.css --format commonjs")
execSync(
"node_modules/.bin/postcss --config src/utilities/unstyled src/utilities/unstyled/*.css --base src --dir dist"
"node_modules/.bin/postcss --config src/utilities/unstyled src/utilities/unstyled/*.css --base src --dir dist",
{ stdio: [] }
)
execSync("cat dist/utilities/unstyled/*.css > dist/utilities-unstyled.css")
execSync("node_modules/.bin/prejss-cli dist/utilities-unstyled.css --format commonjs")
execSync(
"node_modules/.bin/postcss --config src/utilities/styled src/utilities/styled/*.css --base src --dir dist"
"node_modules/.bin/postcss --config src/utilities/styled src/utilities/styled/*.css --base src --dir dist",
{ stdio: [] }
)
execSync("cat dist/utilities/styled/*.css > dist/utilities-styled.css")
execSync("node_modules/.bin/prejss-cli dist/utilities-styled.css --format commonjs")
@ -23,11 +25,10 @@ execSync(
)
execSync("cat dist/components/unstyled/*.css > dist/unstyled.css")
execSync("cat dist/components/unstyled/*.css dist/components/styled/*.css > dist/styled.css")
execSync(
"node_modules/.bin/rtlcss dist/unstyled.css -s && node_modules/.bin/rtlcss dist/styled.css -s"
)
execSync("node_modules/.bin/prejss-cli dist/{unstyled,styled}{,.rtl}.css --format commonjs")
execSync("node_modules/.bin/postcss src/themes/index.css -o dist/themes.css --config src/themes")
execSync("node_modules/.bin/prejss-cli dist/{unstyled,styled}.css --format commonjs")
execSync("node_modules/.bin/postcss src/themes/index.css -o dist/themes.css --config src/themes", {
stdio: [],
})
if (!process.argv.includes("--skipfullcss")) {
execSync("node_modules/.bin/postcss src/full/index.css -o dist/full.css --config src/full")
}

View File

@ -1,29 +1,29 @@
.alert {
@apply rounded-box text-base-content border-base-200 border p-4;
--alert-bg: hsl(var(--b2));
--alert-bg-mix: hsl(var(--b1));
--alert-bg: theme(colors.base-200);
--alert-bg-mix: theme(colors.base-100);
background-color: var(--alert-bg);
/* @supports (background-color: color-mix(in srgb, var(--alert-bg) 50%, var(--alert-bg-mix))) {
background-color: color-mix(in srgb, var(--alert-bg) 50%, var(--alert-bg-mix));
} */
&-info {
@apply text-info-content border-info/20;
--alert-bg: hsl(var(--in));
--alert-bg-mix: hsl(var(--b1));
--alert-bg: theme(colors.info);
--alert-bg-mix: theme(colors.base-100);
}
&-success {
@apply text-success-content border-success/20;
--alert-bg: hsl(var(--su));
--alert-bg-mix: hsl(var(--b1));
--alert-bg: theme(colors.success);
--alert-bg-mix: theme(colors.base-100);
}
&-warning {
@apply text-warning-content border-warning/20;
--alert-bg: hsl(var(--wa));
--alert-bg-mix: hsl(var(--b1));
--alert-bg: theme(colors.warning);
--alert-bg-mix: theme(colors.base-100);
}
&-error {
@apply text-error-content border-error/20;
--alert-bg: hsl(var(--er));
--alert-bg-mix: hsl(var(--b1));
--alert-bg: theme(colors.error);
--alert-bg-mix: theme(colors.base-100);
}
}

View File

@ -25,5 +25,5 @@
[dir="rtl"] .breadcrumbs > ul > li + *:before,
[dir="rtl"] .breadcrumbs > ol > li + *:before {
--tw-rotate: -45deg;
--tw-rotate: -135deg;
}

View File

@ -1,8 +1,8 @@
.btn {
@apply gap-2 font-semibold no-underline;
@apply gap-2 font-semibold no-underline duration-200 ease-out;
border-width: var(--border-btn, 1px);
animation: button-pop var(--animation-btn, 0.25s) ease-out;
text-transform: var(--btn-text-case, uppercase);
transition-property: color, background-color, border-color, opacity, box-shadow, transform;
&:active:hover,
&:active:focus {
animation: button-pop 0s ease-out;
@ -11,14 +11,43 @@
/* default btn */
& {
@apply border-base-200 bg-base-200 text-base-content outline-base-content no-underline;
@apply text-base-content outline-base-content no-underline shadow-sm;
background-color: oklch(var(--btn-color, var(--b2)) / var(--tw-bg-opacity, 1));
border-color: oklch(var(--btn-color, var(--b2)) / var(--tw-border-opacity, 1));
@supports not (color: oklch(0 0 0)) {
background-color: var(--btn-color, var(--fallback-b2));
border-color: var(--btn-color, var(--fallback-b2));
}
@media (hover: hover) {
&:hover {
@apply border-base-300 bg-base-300;
background-color: color-mix(
in oklab,
oklch(var(--btn-color, var(--b2)) / var(--tw-bg-opacity)) 90%,
black
);
border-color: color-mix(
in oklab,
oklch(var(--btn-color, var(--b2)) / var(--tw-border-opacity)) 90%,
black
);
@supports not (color: oklch(0 0 0)) {
background-color: var(--btn-color, var(--fallback-b2));
border-color: var(--btn-color, var(--fallback-b2));
}
}
}
&-active {
@apply border-base-300 bg-base-300;
background-color: color-mix(
in oklab,
oklch(var(--btn-color, var(--b3)) / var(--tw-bg-opacity)) 90%,
black
);
border-color: color-mix(
in oklab,
oklch(var(--btn-color, var(--b3)) / var(--tw-border-opacity)) 90%,
black
);
}
&:focus-visible {
@apply outline outline-2 outline-offset-2;
@ -26,93 +55,77 @@
}
/* brand colors */
&-primary {
@apply border-primary bg-primary text-primary-content outline-primary;
@media (hover: hover) {
&:hover {
@apply border-primary-focus bg-primary-focus;
}
@apply text-primary-content outline-primary;
@supports (color: oklch(0 0 0)) {
--btn-color: var(--p);
}
&.btn-active {
@apply border-primary-focus bg-primary-focus;
@supports not (color: oklch(0 0 0)) {
--btn-color: var(--fallback-p);
}
}
&-secondary {
@apply border-secondary bg-secondary text-secondary-content outline-secondary;
@media (hover: hover) {
&:hover {
@apply border-secondary-focus bg-secondary-focus;
}
@apply text-secondary-content outline-secondary;
@supports (color: oklch(0 0 0)) {
--btn-color: var(--s);
}
&.btn-active {
@apply border-secondary-focus bg-secondary-focus;
@supports not (color: oklch(0 0 0)) {
--btn-color: var(--fallback-s);
}
}
&-accent {
@apply border-accent bg-accent text-accent-content outline-accent;
@media (hover: hover) {
&:hover {
@apply border-accent-focus bg-accent-focus;
}
@apply text-accent-content outline-accent;
@supports (color: oklch(0 0 0)) {
--btn-color: var(--a);
}
&.btn-active {
@apply border-accent-focus bg-accent-focus;
@supports not (color: oklch(0 0 0)) {
--btn-color: var(--fallback-a);
}
}
&-neutral {
@apply border-neutral bg-neutral text-neutral-content outline-neutral;
@media (hover: hover) {
&:hover {
@apply border-neutral-focus bg-neutral-focus;
}
@apply text-neutral-content outline-neutral;
@supports (color: oklch(0 0 0)) {
--btn-color: var(--n);
}
&.btn-active {
@apply border-neutral-focus bg-neutral-focus;
@supports not (color: oklch(0 0 0)) {
--btn-color: var(--fallback-n);
}
}
/* btn with state colors */
&-info {
@apply border-info bg-info text-info-content outline-info;
@media (hover: hover) {
&:hover {
@apply border-info bg-info;
}
@apply text-info-content outline-info;
@supports (color: oklch(0 0 0)) {
--btn-color: var(--in);
}
&.btn-active {
@apply border-info bg-info;
@supports not (color: oklch(0 0 0)) {
--btn-color: var(--fallback-in);
}
}
&-success {
@apply border-success bg-success text-success-content outline-success;
@media (hover: hover) {
&:hover {
@apply border-success bg-success;
}
@apply text-success-content outline-success;
@supports (color: oklch(0 0 0)) {
--btn-color: var(--su);
}
&.btn-active {
@apply border-success bg-success;
@supports not (color: oklch(0 0 0)) {
--btn-color: var(--fallback-su);
}
}
&-warning {
@apply border-warning bg-warning text-warning-content outline-warning;
@media (hover: hover) {
&:hover {
@apply border-warning bg-warning;
}
@apply text-warning-content outline-warning;
@supports (color: oklch(0 0 0)) {
--btn-color: var(--wa);
}
&.btn-active {
@apply border-warning bg-warning;
@supports not (color: oklch(0 0 0)) {
--btn-color: var(--fallback-wa);
}
}
&-error {
@apply border-error bg-error text-error-content outline-error;
@media (hover: hover) {
&:hover {
@apply border-error bg-error;
}
@apply text-error-content outline-error;
@supports (color: oklch(0 0 0)) {
--btn-color: var(--er);
}
&.btn-active {
@apply border-error bg-error;
@supports not (color: oklch(0 0 0)) {
--btn-color: var(--fallback-er);
}
}
@ -136,11 +149,14 @@
@apply border border-transparent bg-transparent text-current shadow-none outline-current;
@media (hover: hover) {
&:hover {
@apply bg-base-content border-opacity-0 bg-opacity-20;
@apply border-transparent;
@supports (color: oklch(0 0 0)) {
@apply bg-base-content/20;
}
}
}
&.btn-active {
@apply bg-base-content border-opacity-0 bg-opacity-20;
@apply bg-base-content/20 border-transparent;
}
}
&-link {
@ -170,77 +186,105 @@
@apply text-primary;
@media (hover: hover) {
&:hover {
@apply border-primary-focus bg-primary-focus text-primary-content;
@apply text-primary-content;
background-color: color-mix(in oklab, theme(colors.primary) 90%, black);
border-color: color-mix(in oklab, theme(colors.primary) 90%, black);
}
}
&.btn-active {
@apply border-primary-focus bg-primary-focus text-primary-content;
@apply text-primary-content;
background-color: color-mix(in oklab, theme(colors.primary) 90%, black);
border-color: color-mix(in oklab, theme(colors.primary) 90%, black);
}
}
&.btn-secondary {
@apply text-secondary;
@media (hover: hover) {
&:hover {
@apply border-secondary-focus bg-secondary-focus text-secondary-content;
@apply text-secondary-content;
background-color: color-mix(in oklab, theme(colors.secondary) 90%, black);
border-color: color-mix(in oklab, theme(colors.secondary) 90%, black);
}
}
&.btn-active {
@apply border-secondary-focus bg-secondary-focus text-secondary-content;
@apply text-secondary-content;
background-color: color-mix(in oklab, theme(colors.secondary) 90%, black);
border-color: color-mix(in oklab, theme(colors.secondary) 90%, black);
}
}
&.btn-accent {
@apply text-accent;
@media (hover: hover) {
&:hover {
@apply border-accent-focus bg-accent-focus text-accent-content;
@apply text-accent-content;
background-color: color-mix(in oklab, theme(colors.accent) 90%, black);
border-color: color-mix(in oklab, theme(colors.accent) 90%, black);
}
}
&.btn-active {
@apply border-accent-focus bg-accent-focus text-accent-content;
@apply text-accent-content;
background-color: color-mix(in oklab, theme(colors.accent) 90%, black);
border-color: color-mix(in oklab, theme(colors.accent) 90%, black);
}
}
&.btn-success {
@apply text-success;
@media (hover: hover) {
&:hover {
@apply border-success bg-success text-success-content;
@apply text-success-content;
background-color: color-mix(in oklab, theme(colors.success) 90%, black);
border-color: color-mix(in oklab, theme(colors.success) 90%, black);
}
}
&.btn-active {
@apply border-success bg-success text-success-content;
@apply text-success-content;
background-color: color-mix(in oklab, theme(colors.success) 90%, black);
border-color: color-mix(in oklab, theme(colors.success) 90%, black);
}
}
&.btn-info {
@apply text-info;
@media (hover: hover) {
&:hover {
@apply border-info bg-info text-info-content;
@apply text-info-content;
background-color: color-mix(in oklab, theme(colors.info) 90%, black);
border-color: color-mix(in oklab, theme(colors.info) 90%, black);
}
}
&.btn-active {
@apply border-info bg-info text-info-content;
@apply text-info-content;
background-color: color-mix(in oklab, theme(colors.info) 90%, black);
border-color: color-mix(in oklab, theme(colors.info) 90%, black);
}
}
&.btn-warning {
@apply text-warning;
@media (hover: hover) {
&:hover {
@apply border-warning bg-warning text-warning-content;
@apply text-warning-content;
background-color: color-mix(in oklab, theme(colors.warning) 90%, black);
border-color: color-mix(in oklab, theme(colors.warning) 90%, black);
}
}
&.btn-active {
@apply border-warning bg-warning text-warning-content;
@apply text-warning-content;
background-color: color-mix(in oklab, theme(colors.warning) 90%, black);
border-color: color-mix(in oklab, theme(colors.warning) 90%, black);
}
}
&.btn-error {
@apply text-error;
@media (hover: hover) {
&:hover {
@apply border-error bg-error text-error-content;
@apply text-error-content;
background-color: color-mix(in oklab, theme(colors.error) 90%, black);
border-color: color-mix(in oklab, theme(colors.error) 90%, black);
}
}
&.btn-active {
@apply border-error bg-error text-error-content;
@apply text-error-content;
background-color: color-mix(in oklab, theme(colors.error) 90%, black);
border-color: color-mix(in oklab, theme(colors.error) 90%, black);
}
}
}
@ -259,16 +303,6 @@
}
}
}
/* group */
.btn-group {
& > input[type="radio"]:checked.btn,
& > .btn-active {
@apply border-primary bg-primary text-primary-content;
&:focus-visible {
@apply outline-primary outline outline-2;
}
}
}
/* radio input and checkbox as button */
.btn:is(input[type="checkbox"]:checked),
@ -276,7 +310,8 @@
@apply border-primary bg-primary text-primary-content;
@media (hover: hover) {
&:hover {
@apply border-primary-focus bg-primary-focus;
background-color: color-mix(in oklab, theme(colors.primary) 90%, black);
border-color: color-mix(in oklab, theme(colors.primary) 90%, black);
}
}
&:focus-visible {

View File

@ -36,16 +36,16 @@
}
&-start .chat-bubble {
@apply rounded-bl-none;
@apply rounded-es-none;
&:before {
left: -0.749rem;
inset-inline-start: -0.749rem;
}
}
&-end .chat-bubble {
@apply rounded-br-none;
@apply rounded-ee-none;
&:before {
left: 99.9%;
inset-inline-start: 99.9%;
}
}
}

View File

@ -1,7 +1,10 @@
.checkbox {
--chkbg: var(--bc);
--chkfg: var(--b1);
[type="checkbox"].checkbox {
--chkbg: theme(colors.base-content);
--chkfg: theme(colors.base-100);
@apply border-base-content rounded-btn h-6 w-6 cursor-pointer appearance-none border border-opacity-20;
&:focus {
box-shadow: none;
}
&:focus-visible {
@apply outline-base-content outline outline-2 outline-offset-2;
}
@ -10,34 +13,28 @@
&[aria-checked="true"] {
@apply bg-base-content bg-no-repeat;
animation: checkmark var(--animation-input, 0.2s) ease-out;
background-image: linear-gradient(-45deg, transparent 65%, hsl(var(--chkbg)) 65.99%),
linear-gradient(45deg, transparent 75%, hsl(var(--chkbg)) 75.99%),
linear-gradient(-45deg, hsl(var(--chkbg)) 40%, transparent 40.99%),
background-image: linear-gradient(-45deg, transparent 65%, var(--chkbg) 65.99%),
linear-gradient(45deg, transparent 75%, var(--chkbg) 75.99%),
linear-gradient(-45deg, var(--chkbg) 40%, transparent 40.99%),
linear-gradient(
45deg,
hsl(var(--chkbg)) 30%,
hsl(var(--chkfg)) 30.99%,
hsl(var(--chkfg)) 40%,
var(--chkbg) 30%,
var(--chkfg) 30.99%,
var(--chkfg) 40%,
transparent 40.99%
),
linear-gradient(-45deg, hsl(var(--chkfg)) 50%, hsl(var(--chkbg)) 50.99%);
linear-gradient(-45deg, var(--chkfg) 50%, var(--chkbg) 50.99%);
}
&:indeterminate {
@apply bg-base-content bg-no-repeat;
animation: checkmark var(--animation-input, 0.2s) ease-out;
background-image: linear-gradient(90deg, transparent 80%, hsl(var(--chkbg)) 80%),
linear-gradient(-90deg, transparent 80%, hsl(var(--chkbg)) 80%),
linear-gradient(
0deg,
hsl(var(--chkbg)) 43%,
hsl(var(--chkfg)) 43%,
hsl(var(--chkfg)) 57%,
hsl(var(--chkbg)) 57%
);
background-image: linear-gradient(90deg, transparent 80%, var(--chkbg) 80%),
linear-gradient(-90deg, transparent 80%, var(--chkbg) 80%),
linear-gradient(0deg, var(--chkbg) 43%, var(--chkfg) 43%, var(--chkfg) 57%, var(--chkbg) 57%);
}
&-primary {
--chkbg: var(--p);
--chkfg: var(--pc);
--chkbg: theme(colors.primary);
--chkfg: theme(colors.primary-content);
@apply border-primary [@media(hover:hover)]:hover:border-primary;
&:focus-visible {
@apply outline-primary;
@ -49,8 +46,8 @@
}
}
&-secondary {
--chkbg: var(--s);
--chkfg: var(--sc);
--chkbg: theme(colors.secondary);
--chkfg: theme(colors.secondary-content);
@apply border-secondary [@media(hover:hover)]:hover:border-secondary;
&:focus-visible {
@apply outline-secondary;
@ -62,8 +59,8 @@
}
}
&-accent {
--chkbg: var(--a);
--chkfg: var(--ac);
--chkbg: theme(colors.accent);
--chkfg: theme(colors.accent-content);
@apply border-accent [@media(hover:hover)]:hover:border-accent;
&:focus-visible {
@apply outline-accent;
@ -75,8 +72,8 @@
}
}
&-success {
--chkbg: var(--su);
--chkfg: var(--suc);
--chkbg: theme(colors.success);
--chkfg: theme(colors.success-content);
@apply border-success [@media(hover:hover)]:hover:border-success;
&:focus-visible {
@apply outline-success;
@ -88,8 +85,8 @@
}
}
&-warning {
--chkbg: var(--wa);
--chkfg: var(--wac);
--chkbg: theme(colors.warning);
--chkfg: theme(colors.warning-content);
@apply border-warning [@media(hover:hover)]:hover:border-warning;
&:focus-visible {
@apply outline-warning;
@ -101,8 +98,8 @@
}
}
&-info {
--chkbg: var(--in);
--chkfg: var(--inc);
--chkbg: theme(colors.info);
--chkfg: theme(colors.info-content);
@apply border-info [@media(hover:hover)]:hover:border-info;
&:focus-visible {
@apply outline-info;
@ -114,8 +111,8 @@
}
}
&-error {
--chkbg: var(--er);
--chkfg: var(--erc);
--chkbg: theme(colors.error);
--chkfg: theme(colors.error-content);
@apply border-error [@media(hover:hover)]:hover:border-error;
&:focus-visible {
@apply outline-error;
@ -147,23 +144,3 @@
.checkbox-mark {
@apply hidden;
}
[dir="rtl"] {
.checkbox {
&:checked,
&[checked="true"],
&[aria-checked="true"] {
background-image: linear-gradient(45deg, transparent 65%, hsl(var(--chkbg)) 65.99%),
linear-gradient(-45deg, transparent 75%, hsl(var(--chkbg)) 75.99%),
linear-gradient(45deg, hsl(var(--chkbg)) 40%, transparent 40.99%),
linear-gradient(
-45deg,
hsl(var(--chkbg)) 30%,
hsl(var(--chkfg)) 30.99%,
hsl(var(--chkfg)) 40%,
transparent 40.99%
),
linear-gradient(45deg, hsl(var(--chkfg)) 50%, hsl(var(--chkbg)) 50.99%);
}
}
}

View File

@ -26,19 +26,16 @@ details.collapse summary {
@apply absolute block h-2 w-2 translate-y-[-100%] rotate-[45deg] transition-all ease-out;
transition-duration: 0.2s;
top: 50%;
right: 1.4rem;
inset-inline-end: 1.4rem;
content: "";
transform-origin: 75% 75%;
box-shadow: 2px 2px;
pointer-events: none;
}
[dir="rtl"] .collapse-arrow > .collapse-title:after {
--tw-rotate: -45deg;
}
.collapse-plus > .collapse-title:after {
@apply absolute block h-2 w-2 transition-all duration-300 ease-out;
top: 0.9rem;
right: 1.4rem;
inset-inline-end: 1.4rem;
content: "+";
pointer-events: none;
}
@ -61,7 +58,7 @@ details.collapse summary {
.collapse-title,
:where(.collapse > input[type="checkbox"]),
:where(.collapse > input[type="radio"]) {
@apply w-full p-4 pr-12;
@apply w-full p-4 pe-12;
min-height: 3.75rem;
transition: background-color 0.2s ease-out;
}
@ -91,15 +88,6 @@ details.collapse summary {
.collapse-arrow:not(.collapse-close) > input[type="radio"]:checked ~ .collapse-title:after {
@apply translate-y-[-50%] rotate-[225deg];
}
[dir="rtl"] .collapse[open].collapse-arrow > .collapse-title:after,
[dir="rtl"] .collapse-open.collapse-arrow > .collapse-title:after,
[dir="rtl"] .collapse-arrow:focus:not(.collapse-close) .collapse-title:after,
[dir="rtl"]
.collapse-arrow:not(.collapse-close)
input[type="checkbox"]:checked
~ .collapse-title:after {
--tw-rotate: 135deg;
}
.collapse[open].collapse-plus > .collapse-title:after,
.collapse-open.collapse-plus > .collapse-title:after,
.collapse-plus:focus:not(.collapse-close) > .collapse-title:after,

View File

@ -0,0 +1,7 @@
.diff-item-1:after {
@apply bg-base-100/50 border-base-100 outline-base-content/5 rounded-full border-2 shadow-sm outline outline-offset-[-3px] backdrop-blur;
translate: 50% -50%;
}
.diff-item-2 {
@apply border-base-100 border-r-2;
}

View File

@ -1,12 +1,42 @@
.divider {
@apply my-4 h-4 whitespace-nowrap;
&:before {
@apply bg-base-content bg-opacity-10;
}
&:before,
&:after {
@apply bg-base-content bg-opacity-10;
@apply bg-base-300;
}
&:not(:empty) {
@apply gap-4;
}
&-neutral:before,
&-neutral:after {
@apply bg-neutral;
}
&-primary:before,
&-primary:after {
@apply bg-primary;
}
&-secondary:before,
&-secondary:after {
@apply bg-secondary;
}
&-accent:before,
&-accent:after {
@apply bg-accent;
}
&-success:before,
&-success:after {
@apply bg-success;
}
&-warning:before,
&-warning:after {
@apply bg-warning;
}
&-info:before,
&-info:after {
@apply bg-info;
}
&-error:before,
&-error:after {
@apply bg-error;
}
}

View File

@ -8,7 +8,7 @@
&-toggle {
&:checked ~ .drawer-side {
& > .drawer-overlay {
background-color: hsl(0 0% 0%/0.4);
background-color: #00000066;
}
}
&:focus-visible ~ .drawer-content label.drawer-button {

View File

@ -5,7 +5,6 @@
@apply border-neutral bg-neutral text-neutral-content font-semibold uppercase no-underline;
border-width: var(--border-btn, 1px);
animation: button-pop var(--animation-btn, 0.25s) ease-out;
text-transform: var(--btn-text-case, uppercase);
}
&-bordered {
@apply border-opacity-20;

View File

@ -1,5 +1,6 @@
.input {
@apply border-base-content bg-base-100 rounded-btn border border-opacity-0 text-base;
.input,
input.input {
@apply bg-base-100 rounded-btn border border-transparent text-base;
input:focus {
@apply outline-none;
}
@ -7,11 +8,12 @@
line-height: 1em;
}
&-bordered {
@apply border-opacity-20;
@apply border-base-content/20;
}
&:focus,
&:focus-within {
@apply outline-base-content/20 outline outline-2 outline-offset-2;
box-shadow: none;
@apply border-base-content/20 outline-base-content/20 outline outline-2 outline-offset-2;
}
&-ghost {
@apply bg-opacity-5;
@ -25,55 +27,55 @@
@apply border-primary;
&:focus,
&:focus-within {
@apply outline-primary;
@apply outline-primary border-primary;
}
}
&-secondary {
@apply border-secondary;
&:focus,
&:focus-within {
@apply outline-secondary;
@apply outline-secondary border-secondary;
}
}
&-accent {
@apply border-accent;
&:focus,
&:focus-within {
@apply outline-accent;
@apply outline-accent border-accent;
}
}
&-info {
@apply border-info;
&:focus,
&:focus-within {
@apply outline-info;
@apply outline-info border-info;
}
}
&-success {
@apply border-success;
&:focus,
&:focus-within {
@apply outline-success;
@apply outline-success border-success;
}
}
&-warning {
@apply border-warning;
&:focus,
&:focus-within {
@apply outline-warning;
@apply outline-warning border-warning;
}
}
&-error {
@apply border-error;
&:focus,
&:focus-within {
@apply outline-error;
@apply outline-error border-error;
}
}
&-disabled,
&:disabled,
&[disabled] {
@apply border-base-200 bg-base-200 placeholder-base-content cursor-not-allowed text-opacity-20 placeholder-opacity-20;
@apply border-base-200 bg-base-200 placeholder-base-content text-base-content/40 cursor-not-allowed placeholder-opacity-20;
}
/* &::-webkit-calendar-picker-indicator {
display: none;

View File

@ -1,7 +1,7 @@
.join {
@apply rounded-btn;
& > :where(*:not(:first-child)) {
@apply my-0 -ml-px;
@apply my-0 -ms-px;
}
&-item:focus {
@apply isolate;

View File

@ -1,27 +1,27 @@
.link {
&-primary {
@apply text-primary [@media(hover:hover)]:hover:text-primary-focus;
@apply text-primary [@media(hover:hover)]:hover:text-[color-mix(in_oklab,theme(colors.primary)_80%,black)];
}
&-secondary {
@apply text-secondary [@media(hover:hover)]:hover:text-secondary-focus;
@apply text-secondary [@media(hover:hover)]:hover:text-[color-mix(in_oklab,theme(colors.secondary)_80%,black)];
}
&-accent {
@apply text-accent [@media(hover:hover)]:hover:text-accent-focus;
@apply text-accent [@media(hover:hover)]:hover:text-[color-mix(in_oklab,theme(colors.accent)_80%,black)];
}
&-neutral {
@apply text-neutral [@media(hover:hover)]:hover:text-neutral-focus;
@apply text-neutral [@media(hover:hover)]:hover:text-[color-mix(in_oklab,theme(colors.neutral)_80%,black)];
}
&-success {
@apply text-success [@media(hover:hover)]:hover:text-success;
@apply text-success [@media(hover:hover)]:hover:text-[color-mix(in_oklab,theme(colors.success)_80%,black)];
}
&-info {
@apply text-info [@media(hover:hover)]:hover:text-info;
@apply text-info [@media(hover:hover)]:hover:text-[color-mix(in_oklab,theme(colors.info)_80%,black)];
}
&-warning {
@apply text-warning [@media(hover:hover)]:hover:text-warning;
@apply text-warning [@media(hover:hover)]:hover:text-[color-mix(in_oklab,theme(colors.warning)_80%,black)];
}
&-error {
@apply text-error [@media(hover:hover)]:hover:text-error;
@apply text-error [@media(hover:hover)]:hover:text-[color-mix(in_oklab,theme(colors.error)_80%,black)];
}
&:focus {
@apply outline-none;

View File

@ -7,15 +7,15 @@
height: 1px;
}
.menu :where(li ul) {
@apply ml-4 pl-2;
@apply ms-4 ps-2;
&:before {
@apply bg-base-content/10 absolute bottom-3 left-0 top-3 w-px;
@apply bg-base-content/10 absolute bottom-3 start-0 top-3 w-px;
content: "";
}
}
.menu :where(li:not(.menu-title) > *:not(ul):not(details):not(.menu-title)),
.menu :where(li:not(.menu-title) > details > summary:not(.menu-title)) {
@apply rounded-btn px-4 py-2 text-left transition duration-200 ease-out;
@apply rounded-btn px-4 py-2 text-start transition duration-200 ease-out;
text-wrap: balance;
}
@ -28,7 +28,10 @@
}
@media (hover: hover) {
&:not(.active):hover {
@apply bg-base-content/10 text-base-content cursor-pointer outline-none;
@apply text-base-content cursor-pointer outline-none;
@supports (color: oklch(0 0 0)) {
@apply bg-base-content/10;
}
}
}
}

View File

@ -1,6 +1,7 @@
.mockup {
&-code {
@apply bg-neutral text-neutral-content rounded-box min-w-[18rem] py-5;
direction: ltr;
&:before {
content: "";
@apply mb-4 block h-3 w-3 rounded-full opacity-30;
@ -24,10 +25,10 @@
}
}
&-window {
@apply rounded-box pt-5;
@apply rounded-box flex flex-col pt-5;
&:before {
content: "";
@apply mb-4 block aspect-square h-3 rounded-full opacity-30;
@apply mb-4 block aspect-square h-3 shrink-0 self-start rounded-full opacity-30 rtl:self-end;
box-shadow:
1.4em 0,
2.8em 0,
@ -84,7 +85,7 @@
&-browser {
@apply rounded-box;
.mockup-browser-toolbar {
@apply my-3 inline-flex w-full items-center pr-[1.4em];
@apply my-3 inline-flex w-full items-center pr-[1.4em] rtl:flex-row-reverse;
&:before {
content: "";
@apply mr-[4.8rem] inline-block aspect-square h-3 rounded-full opacity-30;
@ -95,6 +96,7 @@
}
.input {
@apply bg-base-200 relative mx-auto block h-7 w-96 overflow-hidden text-ellipsis whitespace-nowrap pl-8;
direction: ltr;
&:before {
content: "";
@apply absolute left-2 top-1/2 aspect-square h-3 -translate-y-1/2 rounded-full border-2 border-current opacity-60;

View File

@ -26,28 +26,28 @@
}
&:indeterminate {
--progress-color: hsl(var(--bc));
--progress-color: theme(colors.base-content);
}
&-primary:indeterminate {
--progress-color: hsl(var(--p));
--progress-color: theme(colors.primary);
}
&-secondary:indeterminate {
--progress-color: hsl(var(--s));
--progress-color: theme(colors.secondary);
}
&-accent:indeterminate {
--progress-color: hsl(var(--a));
--progress-color: theme(colors.accent);
}
&-info:indeterminate {
--progress-color: hsl(var(--in));
--progress-color: theme(colors.info);
}
&-success:indeterminate {
--progress-color: hsl(var(--su));
--progress-color: theme(colors.success);
}
&-warning:indeterminate {
--progress-color: hsl(var(--wa));
--progress-color: theme(colors.warning);
}
&-error:indeterminate {
--progress-color: hsl(var(--er));
--progress-color: theme(colors.error);
}
&::-webkit-progress-bar {

View File

@ -1,16 +1,20 @@
.radio {
[type="radio"].radio {
--chkbg: var(--bc);
@apply border-base-content h-6 w-6 cursor-pointer appearance-none rounded-full border border-opacity-20;
&:focus {
box-shadow: none;
}
&:focus-visible {
@apply outline-base-content outline outline-2 outline-offset-2;
}
&:checked,
&[aria-checked="true"] {
@apply bg-base-content;
background-image: none;
animation: radiomark var(--animation-input, 0.2s) ease-out;
box-shadow:
0 0 0 4px hsl(var(--b1)) inset,
0 0 0 4px hsl(var(--b1)) inset;
0 0 0 4px theme(colors.base-100) inset,
0 0 0 4px theme(colors.base-100) inset;
}
&-primary {
--chkbg: var(--p);
@ -97,18 +101,18 @@
@keyframes radiomark {
0% {
box-shadow:
0 0 0 12px hsl(var(--b1)) inset,
0 0 0 12px hsl(var(--b1)) inset;
0 0 0 12px theme(colors.base-100) inset,
0 0 0 12px theme(colors.base-100) inset;
}
50% {
box-shadow:
0 0 0 3px hsl(var(--b1)) inset,
0 0 0 3px hsl(var(--b1)) inset;
0 0 0 3px theme(colors.base-100) inset,
0 0 0 3px theme(colors.base-100) inset;
}
100% {
box-shadow:
0 0 0 4px hsl(var(--b1)) inset,
0 0 0 4px hsl(var(--b1)) inset;
0 0 0 4px theme(colors.base-100) inset,
0 0 0 4px theme(colors.base-100) inset;
}
}

View File

@ -1,13 +1,13 @@
.range {
appearance: none;
-webkit-appearance: none;
--range-shdw: var(--bc);
--range-shdw: theme(colors.base-content);
@apply rounded-box overflow-hidden bg-transparent;
&:focus-visible::-webkit-slider-thumb {
--focus-shadow: 0 0 0 6px hsl(var(--b1)) inset, 0 0 0 2rem hsl(var(--range-shdw)) inset;
--focus-shadow: 0 0 0 6px theme(colors.base-100) inset, 0 0 0 2rem var(--range-shdw) inset;
}
&:focus-visible::-moz-range-thumb {
--focus-shadow: 0 0 0 6px hsl(var(--b1)) inset, 0 0 0 2rem hsl(var(--range-shdw)) inset;
--focus-shadow: 0 0 0 6px theme(colors.base-100) inset, 0 0 0 2rem var(--range-shdw) inset;
}
&::-webkit-slider-runnable-track {
@apply rounded-box bg-base-content/10 h-2 w-full;
@ -20,45 +20,45 @@
appearance: none;
-webkit-appearance: none;
top: 50%;
color: hsl(var(--range-shdw));
color: var(--range-shdw);
transform: translateY(-50%);
--filler-size: 100rem;
--filler-offset: 0.6rem;
box-shadow:
0 0 0 3px hsl(var(--range-shdw)) inset,
0 0 0 3px var(--range-shdw) inset,
var(--focus-shadow, 0 0),
calc(var(--filler-size) * -1 - var(--filler-offset)) 0 0 var(--filler-size);
}
&::-moz-range-thumb {
@apply rounded-box bg-base-100 relative h-6 w-6 border-none;
top: 50%;
color: hsl(var(--range-shdw));
color: var(--range-shdw);
--filler-size: 100rem;
--filler-offset: 0.5rem;
box-shadow:
0 0 0 3px hsl(var(--range-shdw)) inset,
0 0 0 3px var(--range-shdw) inset,
var(--focus-shadow, 0 0),
calc(var(--filler-size) * -1 - var(--filler-offset)) 0 0 var(--filler-size);
}
&-primary {
--range-shdw: var(--p);
--range-shdw: theme(colors.primary);
}
&-secondary {
--range-shdw: var(--s);
--range-shdw: theme(colors.secondary);
}
&-accent {
--range-shdw: var(--a);
--range-shdw: theme(colors.accent);
}
&-success {
--range-shdw: var(--su);
--range-shdw: theme(colors.success);
}
&-warning {
--range-shdw: var(--wa);
--range-shdw: theme(colors.warning);
}
&-info {
--range-shdw: var(--in);
--range-shdw: theme(colors.info);
}
&-error {
--range-shdw: var(--er);
--range-shdw: theme(colors.error);
}
}

View File

@ -10,6 +10,9 @@
& .rating-hidden {
@apply w-2 bg-transparent;
}
input[type="radio"]:checked {
background-image: none;
}
input:checked ~ input,
input[aria-checked="true"] ~ input {
@apply bg-opacity-20;

View File

@ -1,7 +1,8 @@
.select {
@apply border-base-content bg-base-100 rounded-btn border border-opacity-0 pr-10;
.select,
select.select {
@apply bg-base-100 rounded-btn border border-transparent pr-10;
&-bordered {
@apply border-opacity-20;
@apply border-base-content/20;
}
background-image: linear-gradient(45deg, transparent 50%, currentColor 50%),
linear-gradient(135deg, currentColor 50%, transparent 50%);
@ -13,7 +14,8 @@
4px 4px;
background-repeat: no-repeat;
&:focus {
@apply outline-base-content/20 outline outline-2 outline-offset-2;
box-shadow: none;
@apply border-base-content/20 outline-base-content/20 outline outline-2 outline-offset-2;
}
&-ghost {
@apply bg-opacity-5;
@ -24,43 +26,43 @@
&-primary {
@apply border-primary;
&:focus {
@apply outline-primary;
@apply outline-primary border-primary;
}
}
&-secondary {
@apply border-secondary;
&:focus {
@apply outline-secondary;
@apply outline-secondary border-secondary;
}
}
&-accent {
@apply border-accent;
&:focus {
@apply outline-accent;
@apply outline-accent border-accent;
}
}
&-info {
@apply border-info;
&:focus {
@apply outline-info;
@apply outline-info border-info;
}
}
&-success {
@apply border-success;
&:focus {
@apply outline-success;
@apply outline-success border-success;
}
}
&-warning {
@apply border-warning;
&:focus {
@apply outline-warning;
@apply outline-warning border-warning;
}
}
&-error {
@apply border-error;
&:focus {
@apply outline-error;
@apply outline-error border-error;
}
}
&-disabled,

29
src/components/styled/skeleton.css vendored Normal file
View File

@ -0,0 +1,29 @@
.skeleton {
@apply bg-base-300 rounded-box;
will-change: background-position;
animation: skeleton 2.5s ease-in-out infinite;
background-image: linear-gradient(
105deg,
transparent 0%,
transparent 40%,
theme(colors.base-100) 50%,
transparent 60%,
transparent 100%
);
background-size: 200% auto;
background-repeat: no-repeat;
background-position-x: -50%;
}
@media (prefers-reduced-motion) {
.skeleton {
animation-duration: 15s;
}
}
@keyframes skeleton {
from {
background-position: 150%;
}
to {
background-position: -50%;
}
}

View File

@ -4,6 +4,9 @@
:where(.stats) {
@apply divide-x divide-y-0 overflow-x-auto;
}
:is([dir="rtl"] .stats > :not([hidden]) ~ :not([hidden])) {
--tw-divide-x-reverse: 1;
}
.stat {
@apply border-base-content gap-x-4 border-opacity-10 px-6 py-4;
&-title {

View File

@ -8,7 +8,7 @@
&:before {
@apply bg-base-300 text-base-content top-0 col-start-1 row-start-1 h-2 w-full transform;
content: "";
margin-left: -100%;
margin-inline-start: -100%;
}
}
/* } */

View File

@ -1,12 +1,17 @@
.tabs-lifted .tab:focus-visible {
border-end-end-radius: 0;
border-end-start-radius: 0;
}
.tab {
@apply text-opacity-50 [@media(hover:hover)]:hover:text-opacity-100;
--tab-color: hsl(var(--bc) / var(--tw-text-opacity, 1));
--tab-bg: hsl(var(--b1) / var(--tw-bg-opacity, 1));
--tab-border-color: hsl(var(--b3) / var(--tw-bg-opacity, 1));
--tab-color: theme(colors.base-content);
--tab-bg: theme(colors.base-100);
--tab-border-color: theme(colors.base-300);
color: var(--tab-color);
padding-left: var(--tab-padding, 1rem);
padding-right: var(--tab-padding, 1rem);
&.tab-active:not(.tab-disabled):not([disabled]) {
padding-inline-start: var(--tab-padding, 1rem);
padding-inline-end: var(--tab-padding, 1rem);
&.tab-active:not(.tab-disabled):not([disabled]),
&:is(input:checked) {
@apply border-base-content border-opacity-100 text-opacity-100;
}
&:focus {
@ -14,11 +19,7 @@
}
&:focus-visible {
outline: 2px solid currentColor;
outline-offset: -3px;
&.tab-lifted {
border-bottom-right-radius: var(--tab-radius, 0.5rem);
border-bottom-left-radius: var(--tab-radius, 0.5rem);
}
outline-offset: -5px;
}
/* disabled */
&-disabled,
@ -32,80 +33,88 @@
}
}
}
.tab-bordered {
.tabs-bordered .tab {
@apply border-base-content border-opacity-20;
border-style: solid;
border-bottom-width: calc(var(--tab-border, 1px) + 1px);
}
.tab-lifted {
.tabs-lifted .tab {
border: var(--tab-border, 1px) solid transparent;
border-width: 0 0 var(--tab-border, 1px) 0;
border-top-left-radius: var(--tab-radius, 0.5rem);
border-top-right-radius: var(--tab-radius, 0.5rem);
border-start-start-radius: var(--tab-radius, 0.5rem);
border-start-end-radius: var(--tab-radius, 0.5rem);
border-bottom-color: var(--tab-border-color);
padding-left: var(--tab-padding, 1rem);
padding-right: var(--tab-padding, 1rem);
padding-inline-start: var(--tab-padding, 1rem);
padding-inline-end: var(--tab-padding, 1rem);
padding-top: var(--tab-border, 1px);
&.tab-active:not(.tab-disabled):not([disabled]) {
&.tab-active:not(.tab-disabled):not([disabled]),
&:is(input:checked) {
background-color: var(--tab-bg);
border-width: var(--tab-border, 1px) var(--tab-border, 1px) 0 var(--tab-border, 1px);
border-left-color: var(--tab-border-color);
border-right-color: var(--tab-border-color);
border-inline-start-color: var(--tab-border-color);
border-inline-end-color: var(--tab-border-color);
border-top-color: var(--tab-border-color);
padding-left: calc(var(--tab-padding, 1rem) - var(--tab-border, 1px));
padding-right: calc(var(--tab-padding, 1rem) - var(--tab-border, 1px));
padding-inline-start: calc(var(--tab-padding, 1rem) - var(--tab-border, 1px));
padding-inline-end: calc(var(--tab-padding, 1rem) - var(--tab-border, 1px));
padding-bottom: var(--tab-border, 1px);
padding-top: 0;
&:before,
&:after {
&:before {
z-index: 1;
content: "";
display: block;
position: absolute;
width: var(--tab-radius, 0.5rem);
width: calc(100% + var(--tab-radius, 0.5rem) * 2);
height: var(--tab-radius, 0.5rem);
bottom: 0;
--tab-grad: calc(68% - var(--tab-border, 1px));
--tab-corner-bg: radial-gradient(
circle at var(--circle-pos),
background-size: var(--tab-radius, 0.5rem);
background-position:
top left,
top right;
background-repeat: no-repeat;
--tab-grad: calc(69% - var(--tab-border, 1px));
--radius-start: radial-gradient(
circle at top left,
transparent var(--tab-grad),
var(--tab-border-color) calc(var(--tab-grad) + 0.3px),
var(--tab-border-color) calc(var(--tab-grad) + 0.25px),
var(--tab-border-color) calc(var(--tab-grad) + var(--tab-border, 1px)),
var(--tab-bg) calc(var(--tab-grad) + var(--tab-border, 1px) + 0.3px)
var(--tab-bg) calc(var(--tab-grad) + var(--tab-border, 1px) + 0.25px)
);
--radius-end: radial-gradient(
circle at top right,
transparent var(--tab-grad),
var(--tab-border-color) calc(var(--tab-grad) + 0.25px),
var(--tab-border-color) calc(var(--tab-grad) + var(--tab-border, 1px)),
var(--tab-bg) calc(var(--tab-grad) + var(--tab-border, 1px) + 0.25px)
);
background-image: var(--radius-start), var(--radius-end);
}
&:before {
left: calc(var(--tab-radius, 0.5rem) * -1);
--circle-pos: top left;
background-image: var(--tab-corner-bg);
/* RTL quick fix */
[dir="rtl"] & {
--circle-pos: top right;
}
}
&:after {
right: calc(var(--tab-radius, 0.5rem) * -1);
--circle-pos: top right;
background-image: var(--tab-corner-bg);
/* RTL quick fix */
[dir="rtl"] & {
--circle-pos: top left;
}
}
&:first-child:before {
background: none;
background-image: var(--radius-end);
background-position: top right;
[dir="rtl"] & {
background-image: var(--radius-start);
background-position: top left;
}
}
&:last-child:after {
background: none;
&:last-child:before {
background-image: var(--radius-start);
background-position: top left;
[dir="rtl"] & {
background-image: var(--radius-end);
background-position: top right;
}
}
}
}
.tab-lifted.tab-active:not(.tab-disabled):not([disabled])
+ .tab-lifted.tab-active:not(.tab-disabled):not([disabled]) {
.tabs-lifted
.tab-active:not(.tab-disabled):not([disabled])
+ .tabs-lifted
.tab-active:not(.tab-disabled):not([disabled]),
.tabs-lifted .tab:is(input:checked) + .tabs-lifted .tab:is(input:checked) {
&:before {
background: none;
background-image: var(--radius-end);
background-position: top right;
}
}
.tabs-boxed {
@ -113,7 +122,8 @@
.tab {
@apply rounded-btn;
}
.tab-active:not(.tab-disabled):not([disabled]) {
.tab-active:not(.tab-disabled):not([disabled]),
:is(input:checked) {
@apply bg-primary text-primary-content [@media(hover:hover)]:hover:text-primary-content;
}
}

View File

@ -1,5 +1,5 @@
.table {
@apply rounded-box text-left text-sm;
@apply rounded-box text-left text-sm rtl:text-right;
:where(th, td) {
@apply px-4 py-3 align-middle;
}

View File

@ -1,10 +1,11 @@
.textarea {
@apply border-base-content bg-base-100 rounded-btn border border-opacity-0;
@apply bg-base-100 rounded-btn border border-transparent;
&-bordered {
@apply border-opacity-20;
@apply border-base-content/20;
}
&:focus {
@apply outline-base-content/20 outline outline-2 outline-offset-2;
box-shadow: none;
@apply border-base-content/20 outline-base-content/20 outline outline-2 outline-offset-2;
}
&-ghost {
@apply bg-opacity-5;
@ -16,43 +17,43 @@
&-primary {
@apply border-primary;
&:focus {
@apply outline-primary;
@apply outline-primary border-primary;
}
}
&-secondary {
@apply border-secondary;
&:focus {
@apply outline-secondary;
@apply outline-secondary border-secondary;
}
}
&-accent {
@apply border-accent;
&:focus {
@apply outline-accent;
@apply outline-accent border-accent;
}
}
&-info {
@apply border-info;
&:focus {
@apply outline-info;
@apply outline-info border-info;
}
}
&-success {
@apply border-success;
&:focus {
@apply outline-success;
@apply outline-success border-success;
}
}
&-warning {
@apply border-warning;
&:focus {
@apply outline-warning;
@apply outline-warning border-warning;
}
}
&-error {
@apply border-error;
&:focus {
@apply outline-error;
@apply outline-error border-error;
}
}
&-disabled,

View File

@ -0,0 +1,23 @@
.timeline hr {
@apply h-1;
}
:where(.timeline hr) {
@apply bg-base-300;
}
:where(.timeline:has(.timeline-middle) hr) {
&:first-child {
@apply rounded-e-badge rounded-s-none;
}
&:last-child {
@apply rounded-s-badge rounded-e-none;
}
}
:where(.timeline:not(:has(.timeline-middle)) :first-child hr:last-child) {
@apply rounded-s-badge rounded-e-none;
}
:where(.timeline:not(:has(.timeline-middle)) :last-child hr:first-child) {
@apply rounded-e-badge rounded-s-none;
}
.timeline-box {
@apply rounded-box bg-base-100 border-base-300 border px-4 py-2 shadow-sm;
}

View File

@ -1,9 +1,9 @@
.toggle {
--tglbg: hsl(var(--b1));
[type="checkbox"].toggle {
--tglbg: theme(colors.base-100);
--handleoffset: 1.5rem;
--handleoffsetcalculator: calc(var(--handleoffset) * -1);
--togglehandleborder: 0 0;
@apply border-base-content bg-base-content rounded-badge h-6 w-12 cursor-pointer appearance-none border border-opacity-20 bg-opacity-50;
@apply text-base-content/50 rounded-badge h-6 w-12 cursor-pointer appearance-none border border-current bg-current;
transition:
background,
box-shadow var(--animation-input, 0.2s) ease-out;
@ -17,17 +17,21 @@
&:focus-visible {
@apply outline-base-content/20 outline outline-2 outline-offset-2;
}
&:hover {
@apply bg-current;
}
&:checked,
&[checked="true"],
&[aria-checked="true"] {
background-image: none;
--handleoffsetcalculator: var(--handleoffset);
@apply border-opacity-100 bg-opacity-100;
@apply text-base-content;
[dir="rtl"] & {
--handleoffsetcalculator: calc(var(--handleoffset) * -1);
}
}
&:indeterminate {
@apply border-opacity-100 bg-opacity-100;
@apply text-base-content;
box-shadow:
calc(var(--handleoffset) / 2) 0 0 2px var(--tglbg) inset,
calc(var(--handleoffset) / -2) 0 0 2px var(--tglbg) inset,
@ -46,7 +50,6 @@
&:checked,
&[checked="true"],
&[aria-checked="true"] {
@apply border-primary;
@apply border-primary bg-primary text-primary-content border-opacity-10;
}
}
@ -57,7 +60,6 @@
&:checked,
&[checked="true"],
&[aria-checked="true"] {
@apply border-secondary;
@apply border-secondary bg-secondary text-secondary-content border-opacity-10;
}
}
@ -68,7 +70,6 @@
&:checked,
&[checked="true"],
&[aria-checked="true"] {
@apply border-accent;
@apply border-accent bg-accent text-accent-content border-opacity-10;
}
}
@ -79,7 +80,6 @@
&:checked,
&[checked="true"],
&[aria-checked="true"] {
@apply border-success;
@apply border-success bg-success text-success-content border-opacity-10;
}
}
@ -90,7 +90,6 @@
&:checked,
&[checked="true"],
&[aria-checked="true"] {
@apply border-warning;
@apply border-warning bg-warning text-warning-content border-opacity-10;
}
}
@ -101,7 +100,6 @@
&:checked,
&[checked="true"],
&[aria-checked="true"] {
@apply border-info;
@apply border-info bg-info text-info-content border-opacity-10;
}
}
@ -117,8 +115,8 @@
}
&:disabled {
@apply border-base-content cursor-not-allowed bg-transparent opacity-30;
--togglehandleborder: 0 0 0 3px hsl(var(--bc)) inset,
var(--handleoffsetcalculator) 0 0 3px hsl(var(--bc)) inset;
--togglehandleborder: 0 0 0 3px theme(colors.base-content) inset,
var(--handleoffsetcalculator) 0 0 3px theme(colors.base-content) inset;
}
}

View File

@ -1,20 +1,20 @@
:root .prose {
--tw-prose-body: hsl(var(--bc) / 0.8);
--tw-prose-headings: hsl(var(--bc));
--tw-prose-lead: hsl(var(--bc));
--tw-prose-links: hsl(var(--bc));
--tw-prose-bold: hsl(var(--bc));
--tw-prose-counters: hsl(var(--bc));
--tw-prose-bullets: hsl(var(--bc) / 0.5);
--tw-prose-hr: hsl(var(--bc) / 0.2);
--tw-prose-quotes: hsl(var(--bc));
--tw-prose-quote-borders: hsl(var(--bc) / 0.2);
--tw-prose-captions: hsl(var(--bc) / 0.5);
--tw-prose-code: hsl(var(--bc));
--tw-prose-pre-code: hsl(var(--nc));
--tw-prose-pre-bg: hsl(var(--n));
--tw-prose-th-borders: hsl(var(--bc) / 0.5);
--tw-prose-td-borders: hsl(var(--bc) / 0.2);
--tw-prose-body: theme(colors.base-content/0.8);
--tw-prose-headings: theme(colors.base-content);
--tw-prose-lead: theme(colors.base-content);
--tw-prose-links: theme(colors.base-content);
--tw-prose-bold: theme(colors.base-content);
--tw-prose-counters: theme(colors.base-content);
--tw-prose-bullets: theme(colors.base-content/0.5);
--tw-prose-hr: theme(colors.base-content/0.2);
--tw-prose-quotes: theme(colors.base-content);
--tw-prose-quote-borders: theme(colors.base-content/0.2);
--tw-prose-captions: theme(colors.base-content/0.5);
--tw-prose-code: theme(colors.base-content);
--tw-prose-pre-code: theme(colors.neutral-content);
--tw-prose-pre-bg: theme(colors.neutral);
--tw-prose-th-borders: theme(colors.base-content/0.5);
--tw-prose-td-borders: theme(colors.base-content/0.2);
}
.prose {
& :where(code):not(:where([class~="not-prose"] *)) {
@ -32,6 +32,6 @@
}
}
& :where(tbody tr, thead):not(:where([class~="not-prose"] *)) {
border-bottom-color: hsl(var(--bc) / 20%);
border-bottom-color: theme(colors.base-content/0.2);
}
}

View File

@ -5,6 +5,7 @@ module.exports = {
safelist: responsiveRegex,
theme: {
colors: require("../theming"),
extend: require("../lib/utility-classes"),
},
plugins: [
plugin(function ({ addBase, addUtilities, matchUtilities, matchComponents, theme }) {

View File

@ -1,3 +1,3 @@
.alert {
@apply grid w-full grid-flow-row content-start items-center justify-items-center gap-4 text-center sm:grid-flow-col sm:grid-cols-[auto_minmax(auto,1fr)] sm:justify-items-start sm:text-left;
@apply grid w-full grid-flow-row content-start items-center justify-items-center gap-4 text-center sm:grid-flow-col sm:grid-cols-[auto_minmax(auto,1fr)] sm:justify-items-start sm:text-start;
}

View File

@ -1,9 +1,7 @@
.btn {
@apply rounded-btn inline-flex flex-shrink-0 cursor-pointer select-none flex-wrap items-center justify-center border-transparent text-center transition duration-200 ease-out;
@apply min-h-12 h-12 px-4;
@apply rounded-btn inline-flex h-12 min-h-[3rem] flex-shrink-0 cursor-pointer select-none flex-wrap items-center justify-center border-transparent px-4 text-center;
font-size: 0.875rem;
line-height: 1em;
/* disabled */
&-disabled,
&[disabled],
@ -20,20 +18,9 @@
}
}
/* group */
.btn-group {
@apply inline-flex;
& > input[type="radio"].btn {
@apply appearance-none;
}
& > input[type="radio"].btn:before {
content: attr(data-title);
}
}
/* radio input and checkbox as button */
.btn:is(input[type="checkbox"]),
.btn:is(input[type="radio"]) {
:where(.btn:is(input[type="checkbox"])),
:where(.btn:is(input[type="radio"])) {
@apply w-auto appearance-none;
}
.btn:is(input[type="checkbox"]):after,

View File

@ -0,0 +1,28 @@
.diff {
@apply relative grid w-full overflow-hidden;
container-type: inline-size;
grid-template-columns: auto 1fr;
}
.diff-resizer {
@apply relative top-1/2 z-[1] h-12 w-[25rem] min-w-[1rem] max-w-[calc(100cqi-1rem)] resize-x overflow-hidden opacity-0;
transform-origin: 100% 100%;
scale: 4;
translate: 1.5rem -1.5rem;
clip-path: inset(calc(100% - 0.75rem) 0 0 calc(100% - 0.75rem));
}
.diff-resizer,
.diff-item-1,
.diff-item-2 {
@apply relative col-start-1 row-start-1;
}
.diff-item-1:after {
@apply pointer-events-none absolute bottom-0 right-px top-1/2 z-[1] h-8 w-8 content-[''];
translate: 50% -50%;
}
.diff-item-2 {
@apply overflow-hidden;
}
.diff-item-1 > *,
.diff-item-2 > * {
@apply pointer-events-none absolute bottom-0 left-0 top-0 h-full w-[100cqi] max-w-none object-cover object-center;
}

View File

@ -2,8 +2,12 @@
@apply flex flex-row items-center self-stretch;
&:before,
&:after {
content: "";
@apply flex-grow;
@apply h-0.5 w-full;
@apply h-0.5 w-full flex-grow content-[''];
}
&-start:before {
@apply hidden;
}
&-end:after {
@apply hidden;
}
}

View File

@ -5,7 +5,7 @@
@apply col-start-2 row-start-1;
}
&-side {
@apply pointer-events-none fixed left-0 top-0 col-start-1 row-start-1 grid w-full grid-cols-1 grid-rows-1 items-start justify-items-start overflow-y-auto overscroll-contain;
@apply pointer-events-none fixed start-0 top-0 col-start-1 row-start-1 grid w-full grid-cols-1 grid-rows-1 items-start justify-items-start overflow-y-auto overscroll-contain;
height: 100vh;
height: 100dvh;
scrollbar-width: none;
@ -19,10 +19,10 @@
@apply col-start-1 row-start-1;
}
& > *:not(.drawer-overlay) {
@apply transition duration-300 ease-out;
@apply transition-transform duration-300 ease-out will-change-transform;
transform: translateX(-100%);
[dir="rtl"] & {
transform: translateX(-100%);
transform: translateX(100%);
}
}
}
@ -48,6 +48,9 @@
}
& ~ .drawer-side > *:not(.drawer-overlay) {
transform: translateX(100%);
[dir="rtl"] & {
transform: translateX(-100%);
}
}
&:checked ~ .drawer-side > *:not(.drawer-overlay) {
transform: translateX(0%);

View File

@ -11,13 +11,13 @@
@apply invisible opacity-0;
}
.dropdown-end .dropdown-content {
@apply right-0;
@apply end-0;
}
.dropdown-left .dropdown-content {
@apply bottom-auto right-full top-0;
@apply bottom-auto end-full top-0;
}
.dropdown-right .dropdown-content {
@apply bottom-auto left-full top-0;
@apply bottom-auto start-full top-0;
}
.dropdown-bottom .dropdown-content {
@apply bottom-auto top-full;

View File

@ -1,7 +1,7 @@
.file-input {
@apply h-12 flex-shrink pr-4 text-sm leading-loose;
@apply h-12 flex-shrink pe-4 text-sm leading-loose;
&::file-selector-button {
@apply mr-4 inline-flex h-full flex-shrink-0 cursor-pointer select-none flex-wrap items-center justify-center px-4 text-center text-sm transition duration-200 ease-out;
@apply me-4 inline-flex h-full flex-shrink-0 cursor-pointer select-none flex-wrap items-center justify-center px-4 text-center text-sm transition duration-200 ease-out;
line-height: 1em;
}
}

View File

@ -2,57 +2,3 @@
@apply flex-shrink;
@apply h-12 px-4 text-sm leading-loose;
}
.input-group {
@apply flex w-full items-stretch;
> .input {
@apply isolate;
}
> *,
> .input,
> .textarea,
> .select {
@apply rounded-none;
}
&-md {
@apply text-sm leading-loose;
}
&-lg {
@apply text-lg leading-loose;
}
&-sm {
@apply text-sm leading-8;
}
&-xs {
@apply text-xs leading-relaxed;
}
:where(span) {
@apply bg-base-300 flex items-center px-4;
}
> :first-child {
border-top-left-radius: var(--rounded-btn, 0.5rem);
border-top-right-radius: 0;
border-bottom-left-radius: var(--rounded-btn, 0.5rem);
border-bottom-right-radius: 0;
}
> :last-child {
border-top-left-radius: 0;
border-top-right-radius: var(--rounded-btn, 0.5rem);
border-bottom-left-radius: 0;
border-bottom-right-radius: var(--rounded-btn, 0.5rem);
}
&-vertical {
@apply flex-col;
:first-child {
border-top-left-radius: var(--rounded-btn, 0.5rem);
border-top-right-radius: var(--rounded-btn, 0.5rem);
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
}
:last-child {
border-top-left-radius: 0;
border-top-right-radius: 0;
border-bottom-left-radius: var(--rounded-btn, 0.5rem);
border-bottom-right-radius: var(--rounded-btn, 0.5rem);
}
}
}

View File

@ -6,8 +6,10 @@
.mask-half-1 {
mask-size: 200%;
mask-position: left;
@apply [mask-position:left] rtl:[mask-position:right];
}
.mask-half-2 {
mask-size: 200%;
mask-position: right;
@apply [mask-position:right] rtl:[mask-position:left];
}

View File

@ -1,6 +1,6 @@
.select {
@apply inline-flex cursor-pointer select-none appearance-none;
@apply min-h-12 h-12 pl-4 pr-10 text-sm leading-loose;
@apply h-12 min-h-[3rem] pl-4 pr-10 text-sm leading-loose;
/* disabled */
/* &-disabled,

View File

@ -1,8 +1,33 @@
.tabs {
@apply flex flex-wrap items-end;
@apply grid items-end;
}
.tabs-lifted {
&:has(.tab-content[class^="rounded-"]) :first-child:not(.tab-active),
&:has(.tab-content[class*=" rounded-"]) :first-child:not(.tab-active) {
@apply border-b-transparent;
}
}
.tab {
@apply relative inline-flex cursor-pointer select-none flex-wrap items-center justify-center text-center;
@apply h-8 text-sm leading-loose;
@apply relative row-start-1 inline-flex h-8 cursor-pointer select-none appearance-none flex-wrap items-center justify-center text-center text-sm leading-loose;
--tab-padding: 1rem;
&:is(input[type="radio"]):after {
--tw-content: attr(aria-label);
content: var(--tw-content);
}
&:not(input):empty {
@apply cursor-default;
grid-column-start: span 9999;
}
}
.tab-content {
@apply col-span-full col-end-[span_9999] row-start-2 -mt-[--tab-border] hidden border-transparent;
border-width: var(--tab-border, 0);
:checked + &:nth-child(2),
.tab-active + &:nth-child(2) {
@apply rounded-ss-none;
}
}
input.tab:checked + .tab-content,
.tab-active + .tab-content {
@apply block;
}

View File

@ -1,4 +1,4 @@
.textarea {
@apply min-h-12 flex-shrink;
@apply min-h-[3rem] flex-shrink;
@apply px-4 py-2 text-sm leading-loose;
}

View File

@ -0,0 +1,35 @@
.timeline {
@apply relative flex;
}
:where(.timeline > li) {
@apply relative grid shrink-0 items-center;
grid-template-rows: var(--timeline-row-start, minmax(0, 1fr)) auto var(
--timeline-row-end,
minmax(0, 1fr)
);
grid-template-columns: var(--timeline-col-start, minmax(0, 1fr)) auto var(
--timeline-col-end,
minmax(0, 1fr)
);
}
.timeline > li > hr {
@apply w-full border-0;
}
:where(.timeline > li > hr) {
&:first-child {
@apply col-start-1 row-start-2;
}
&:last-child {
@apply col-start-3 col-end-[none] row-start-2 row-end-auto;
}
}
.timeline-start {
@apply col-start-1 col-end-4 row-start-1 row-end-2 m-1 self-end justify-self-center;
}
.timeline-middle {
@apply col-start-2 row-start-2;
}
.timeline-end {
@apply col-start-1 col-end-4 row-start-3 row-end-4 m-1 self-start justify-self-center;
}

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -1,17 +1,20 @@
{
"type": "module",
"engines": {
"node": ">=20.6.0"
},
"scripts": {
"get-json": "node src/lib/scripts/get-json",
"dev": "npm run get-json --silent && npm run createStyleHandlerComponent:dev --silent && vite dev --port 3000 --open",
"dev": "npm run createStyleHandlerComponent:dev --silent && vite dev --port 3000 --open",
"build": "npm run get-json --silent && npm run createStyleHandlerComponent:prod --silent && NODE_ENV=production vite build --logLevel error",
"preview": "npm run build && vite preview --port 3000 --open",
"createStyleHandlerComponent:dev": "echo $'<script>import \"@components/StyleDevelopment.svelte\"</script>' > src/components/StyleHandler.svelte",
"createStyleHandlerComponent:prod": "echo $'<script>import \"@components/StyleProduction.svelte\"</script>' > src/components/StyleHandler.svelte",
"createStyleHandlerComponent:dev": "echo $'<script>import \"$components/StyleDevelopment.svelte\"</script>' > src/components/StyleHandler.svelte",
"createStyleHandlerComponent:prod": "echo $'<script>import \"$components/StyleProduction.svelte\"</script>' > src/components/StyleHandler.svelte",
"langdiff": "node src/lib/scripts/compare-translate-files"
},
"devDependencies": {
"@sveltejs/adapter-static": "^2.0.3",
"@sveltejs/kit": "^1.25.2",
"@sveltejs/kit": "^1.27.4",
"@tailwindcss/typography": "0.5.10",
"autoprefixer": "10.4.16",
"dep-graph-count": "^1.0.0",
@ -20,24 +23,23 @@
"postcss": "8.4.31",
"postcss-nesting": "12.0.1",
"prism-themes": "1.9.0",
"rehype-autolink-headings": "^7.0.0",
"rehype-autolink-headings": "^7.1.0",
"rehype-external-links": "^3.0.0",
"rehype-slug": "^6.0.0",
"sharp": "^0.32.6",
"svelte": "^4.2.1",
"svelte-preprocess": "^5.0.4",
"svelte": "^4.2.3",
"svelte-preprocess": "^5.1.0",
"svelte-prism": "1.1.6",
"svelte-typeahead": "^4.4.1",
"tailwindcss": "^3.3.3",
"tailwindcss": "^3.3.5",
"theme-change": "2.5.0",
"vite": "^4.4.11"
"vite": "^4.5.0"
},
"dependencies": {
"colord": "^2.9.3",
"daisyui": "^3.9.2",
"culori": "^3.2.0",
"daisyui": "^4.0.0-alpha.4",
"lodash.debounce": "^4.0.8",
"nanoid": "^5.0.1",
"randomcolor": "^0.6.2",
"nanoid": "^5.0.3",
"svelte-countup": "^0.2.6"
}
}

View File

@ -9,7 +9,11 @@
} catch (e) {}
</script>
%sveltekit.head%
<script src="https://cdn.counter.dev/script.js" data-id="89c87d3c-db72-4b44-a0be-564ad71e48ee" data-utcoffset="3" defer></script>
<script
src="https://cdn.counter.dev/script.js"
data-id="89c87d3c-db72-4b44-a0be-564ad71e48ee"
data-utcoffset="3"
defer></script>
</head>
<body>
<div>%sveltekit.body%</div>

View File

@ -2,7 +2,7 @@
import { onMount } from "svelte"
import { readEnv } from "$lib/util"
export let slot
import Sponsors from "@components/Sponsors.svelte"
import Sponsors from "$components/Sponsors.svelte"
</script>
{#if slot === "adesense-1"}

View File

@ -0,0 +1,40 @@
<script>
export let data
const browsers = {
firefox: {
name: "Firefox",
safeversion: 118,
icon: '<svg style="width: 1.0009765625em; height: 1em;vertical-align: middle;fill:currentColor;overflow: hidden;" viewBox="0 0 1025 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M516.010667 1024q-161.706667 0-288.277333-85.994667t-188.288-227.712q-33.152-74.858667-38.293333-172.010667t14.848-189.994667 63.424-178.282667 102.293333-138.581333l-6.293333 160.576q6.293333-8 38.848-8.853333t40 8.853333q24-46.293333 91.712-78.848t133.994667-33.706667q-30.848 25.706667-68.288 84.864t-33.429333 93.418667q14.293333 4.565333 35.712 7.722667t36.010667 4.288 38.848 2.282667 28.864 1.706667q8.576 2.858667 5.418667 26.005333t-17.429333 43.136q-2.858667 4.010667-9.429333 10.581333t-32.277333 20.288-57.706667 19.434667l8.576 108.010667-79.424-38.293333q-10.282667 24.576-4.288 46.570667t20.565333 37.994667 37.418667 23.722667 46.293333 3.712q29.141333-5.141333 56-19.712t47.722667-25.706667 42.005333-10.005333q34.858667 2.282667 51.136 18.858667t11.136 37.141333q-0.576 1.152-1.429333 3.136t-4.864 7.146667-10.282667 8.853333-18.005333 5.994667-26.581333 0.576q-34.282667 54.293333-82.581333 77.418667t-119.722667 16.853333q42.282667 34.858667 92.864 47.146667t96.277333 3.434667 88.277333-29.717333 73.152-50.005333 45.994667-59.434667q24.576-52.010667 22.293333-109.994667t-21.418667-107.712-44.864-71.424q49.706667 21.717333 78.293333 45.418667t44.010667 64.277333q8.576-97.152-32.853333-196.010667t-119.722667-162.282667q151.424 44.010667 235.434667 159.722667t86.293333 295.722667q1.152 72.576-23.146667 145.706667t-70.570667 136-108.010667 112-141.418667 77.418667-164.864 28.288z" /></svg>',
},
chrome: {
name: "Chrome",
safeversion: 117,
icon: '<svg style="width: 1em; height: 1em;vertical-align: middle;fill:currentColor;overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M258.27328 446.54592l-146.5344-253.80864c93.81888-117.47328 238.24384-192.73728 400.26112-192.73728 187.43296 0 351.31392 100.74112 440.5248 251.00288l-417.77152 0c-7.49568-0.65536-15.09376-1.00352-22.75328-1.00352-121.87648 0-224.58368 83.64032-253.72672 196.54656zM695.296 324.99712l293.45792 0c22.7328 57.93792 35.2256 120.99584 35.2256 187.00288 0 280.82176-226.0992 508.80512-506.18368 511.91808l209.38752-362.68032c29.47072-42.37312 46.7968-93.81888 46.7968-149.23776 0-73.17504-30.16704-139.42784-78.68416-187.00288zM326.00064 512c0-102.56384 83.43552-185.99936 185.99936-185.99936s185.99936 83.43552 185.99936 185.99936c0 102.56384-83.43552 185.99936-185.99936 185.99936s-185.99936-83.43552-185.99936-185.99936zM582.18496 764.43648l-146.57536 253.87008c-246.53824-36.88448-435.6096-249.50784-435.6096-506.32704 0-91.21792 23.87968-176.8448 65.69984-251.02336l209.03936 362.04544c41.86112 89.10848 132.48512 150.97856 237.28128 150.97856 24.30976 0 47.84128-3.33824 70.18496-9.56416z" /></svg>',
},
safari: {
name: "Safari",
safeversion: 16.6,
icon: '<svg style="width: 1em; height: 1em;vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M512 32a480 480 0 1 0 480 480A480 480 0 0 0 512 32z m281.92 243.84a859.52 859.52 0 0 1-77.44 198.72A207.36 207.36 0 0 1 512 720a207.68 207.68 0 0 1-37.44-3.52 859.84 859.84 0 0 1-198.4 77.44 36.8 36.8 0 0 1-45.76-45.76 859.84 859.84 0 0 1 77.44-198.4 207.36 207.36 0 0 1 241.92-241.92 859.52 859.52 0 0 1 198.72-77.44 36.8 36.8 0 0 1 45.44 45.44zM512 424A88 88 0 1 0 600 512 88 88 0 0 0 512 424z" fill="currentColor" /></svg>',
},
iossafari: {
name: "Safari iOS",
safeversion: 16.7,
icon: '<svg class="svg-icon" style="width: 1em;height: 1em;vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M46.933333 258.133333c-26.197333 0-46.933333 20.48-46.933333 46.08a46.08 46.08 0 0 0 46.933333 46.08c26.453333 0 47.36-20.48 47.36-46.08 0-25.6-20.906667-46.08-47.36-46.08m324.693334 0.853334c-143.36 0-232.96 97.706667-232.96 253.013333 0 156.586667 89.6 253.866667 232.96 253.866667 142.506667 0 232.533333-97.28 232.533333-253.866667 0-155.306667-90.026667-253.013333-232.533333-253.013333m462.506666 0c-106.666667 0-182.613333 58.88-182.613333 146.346666 0 69.546667 43.093333 113.066667 133.546667 133.973334l63.573333 15.36c61.866667 14.08 87.04 34.56 87.04 69.973333 0 40.96-41.386667 69.973333-100.266667 69.973333-60.16 0-105.386667-29.44-110.08-74.666666h-85.333333c3.413333 90.453333 77.653333 145.92 190.293333 145.92 119.04 0 193.706667-58.453333 193.706667-151.466667 0-72.96-42.666667-114.346667-141.653333-136.96l-56.746667-12.8c-60.16-14.506667-84.906667-33.706667-84.906667-66.133333 0-40.96 37.546667-68.266667 93.013334-68.266667 55.893333 0 94.293333 27.733333 98.56 73.386667h83.626666c-2.133333-86.186667-73.386667-144.64-181.76-144.64M371.626667 333.653333c87.04 0 142.933333 69.546667 142.933333 178.346667 0 109.653333-55.893333 179.2-142.933333 179.2-87.893333 0-143.36-69.546667-143.36-179.2 0-108.8 55.466667-178.346667 143.36-178.346667M4.736 397.226667v360.533333H89.6V397.226667H4.693333z" /></svg>',
},
}
</script>
<div class="flex gap-2 lg:gap-4">
<span class="text-base-content/50 text-xs">Supported on</span>
{#each Object.entries(data) as [browser, version]}
<div class="inline-flex items-center gap-1 lg:gap-2">
<div class="tooltip" data-tip={browsers[browser].name}>
<span class={version <= browsers[browser].safeversion ? "text-success" : "text-error"}>
{@html browsers[browser].icon}
</span>
</div>
<span class="text-base-content/50 font-mono text-xs">{version}+</span>
</div>
{/each}
</div>

View File

@ -1,8 +1,8 @@
<script>
import { prefix } from "$lib/stores"
import PrefixEdit from "@components/PrefixEdit.svelte"
import Translate from "@components/Translate.svelte"
import { t } from "@src/lib/i18n"
import PrefixEdit from "$components/PrefixEdit.svelte"
import Translate from "$components/Translate.svelte"
import { t } from "$lib/i18n"
export let data
</script>
@ -10,12 +10,12 @@
<table class="table-xs md:table-sm table-pin-rows table w-full">
<thead>
<tr class="border-b-0">
<th class="bg-base-200 rounded-l-box flex items-center gap-2 normal-case lg:py-3">
<th class="bg-base-200 rounded-s-box flex items-center gap-2 lg:py-3">
<PrefixEdit />
<span><Translate text="Class name" /></span>
</th>
<th class="bg-base-200 normal-case lg:py-3"><Translate text="Type" /></th>
<th class="bg-base-200 rounded-r-box lg:py-3" />
<th class="bg-base-200 lg:py-3"><Translate text="Type" /></th>
<th class="bg-base-200 rounded-e-box lg:py-3" />
</tr>
</thead>
<tbody>
@ -54,7 +54,9 @@
{#each data as item, index}
<tr>
<th class="w-3/12 font-normal">
<span class="whitespace-nowrap font-mono lowercase">{`${$prefix}${item.class}`}</span>
<span class="whitespace-nowrap font-mono lowercase">
{`${item.prefix !== false ? $prefix : ""}${item.class}`}
</span>
</th>
<td class="w-1/12">
{#if item.type == "component"}

View File

@ -1,6 +1,6 @@
<script>
import { onMount } from "svelte"
import Translate from "@components/Translate.svelte"
import Translate from "$components/Translate.svelte"
import { htmlToJsx } from "$lib/actions"
let Prism
onMount(async () => {
@ -59,41 +59,41 @@
</div>
{/if}
<div class="grid">
<div class="tabs z-10 -mb-px">
<div class="tabs tabs-lifted z-10 -mb-[var(--tab-border)] justify-self-start">
<button
on:click={() => (showContent = "preview")}
class={`tab tab-lifted ${
class={`tab ${
showContent == "preview"
? "tab-active [--tab-bg:hsl(var(--b1))]"
? "tab-active [--tab-bg:var(--fallback-b1,oklch(var(--b1)))]"
: "[--tab-border-color:transparent]"
}`}>
<Translate text="Preview" />
</button>
<button
on:click={() => (showContent = "html")}
class={`tab tab-lifted ${
class={`tab ${
showContent == "html"
? "tab-active [--tab-bg:hsl(var(--n))] [--tab-border-color:hsl(var(--n))] [--tab-color:hsl(var(--nc))]"
? "tab-active [--tab-bg:var(--fallback-n,oklch(var(--n)))] [--tab-border-color:var(--fallback-n,oklch(var(--n)))] [--tab-color:var(--fallback-nc,oklch(var(--nc)))]"
: "[--tab-border-color:transparent]"
}`}>
HTML
</button>
<button
on:click={() => (showContent = "jsx")}
class={`tab tab-lifted ${
class={`tab ${
showContent == "jsx"
? "tab-active [--tab-bg:hsl(var(--n))] [--tab-border-color:hsl(var(--n))] [--tab-color:hsl(var(--nc))]"
? "tab-active [--tab-bg:var(--fallback-n,oklch(var(--n)))] [--tab-border-color:var(--fallback-n,oklch(var(--n)))] [--tab-color:var(--fallback-nc,oklch(var(--nc)))]"
: "[--tab-border-color:transparent]"
}`}>
JSX
</button>
<div class="tab tab-lifted mr-6 flex-1 cursor-default [--tab-border-color:transparent]" />
<div class="tab [--tab-border-color:transparent]" />
</div>
{#if showContent == "preview"}
<div class="bg-base-300 rounded-b-box rounded-tr-box relative overflow-x-auto">
<div class="bg-base-300 rounded-b-box rounded-se-box relative overflow-x-auto">
<div
class="preview border-base-300 bg-base-100 rounded-b-box rounded-tr-box flex min-h-[6rem] min-w-[18rem] max-w-4xl flex-wrap items-center justify-center gap-2 overflow-x-hidden border bg-cover bg-top p-4 {classes}"
class="preview border-base-300 bg-base-100 rounded-b-box rounded-se-box flex min-h-[6rem] min-w-[18rem] max-w-4xl flex-wrap items-center justify-center gap-2 overflow-x-hidden bg-cover bg-top p-4 [border-width:var(--tab-border)] {classes}"
style={bg ? `background-image: url(${bg})` : ``}
class:resize-x={responsive}>
<slot />
@ -111,7 +111,7 @@
<slot name="html" />
</svelte:component>
</div>
<div class="col-start-1 row-start-1 flex items-start justify-end p-2">
<div class="col-start-1 row-start-1 flex items-start justify-end p-2 rtl:justify-start">
<div
data-tip={isClipboardButtonPressed ? "copied" : "copy"}
class="tooltip tooltip-left tooltip-accent">
@ -207,26 +207,26 @@
padding-right: 2.5rem;
padding-top: 1rem;
padding-bottom: 1rem;
border-top-right-radius: 0.75rem;
border-top-left-radius: 0.75rem;
border-bottom-right-radius: 0.75rem;
border-bottom-left-radius: 0.75rem;
border-top-right-radius: var(--rounded-box, 1rem);
border-top-left-radius: var(--rounded-box, 1rem);
border-bottom-right-radius: var(--rounded-box, 1rem);
border-bottom-left-radius: var(--rounded-box, 1rem);
margin: 0;
min-height: 6rem;
}
.prose .component-preview pre[class*="language-"] .token.comment {
color: hsl(var(--nc) / 0.4);
color: var(--fallback-nc, oklch(var(--nc) / 0.4));
}
.prose .component-preview .preview {
background-image: repeating-linear-gradient(
45deg,
hsl(var(--b1)),
hsl(var(--b1)) 13px,
hsl(var(--b2)) 13px,
hsl(var(--b2)) 14px
var(--fallback-b1, oklch(var(--b1))),
var(--fallback-b1, oklch(var(--b1))) 13px,
var(--fallback-b2, oklch(var(--b2))) 13px,
var(--fallback-b2, oklch(var(--b2))) 14px
);
/* background-size: 40px 40px;
background-image: linear-gradient(to right, hsl(var(--bc) / 0.04) 1px, transparent 1px),
linear-gradient(to bottom, hsl(var(--bc) / 0.04) 1px, transparent 1px); */
background-image: linear-gradient(to right, oklch(var(--bc) / 0.04) 1px, transparent 1px),
linear-gradient(to bottom, oklch(var(--bc) / 0.04) 1px, transparent 1px); */
}
</style>

View File

@ -1,15 +1,28 @@
<script>
import { page } from "$app/stores"
import { pages } from "@src/lib/data.js"
import { currentLang, defaultLang, t } from "$lib/i18n"
import { currentLang, defaultLang, t } from "@src/lib/i18n"
export let pages = []
let arrayOfPagesInOrder = []
pages.map((items) => {
items.items.forEach((item) => {
arrayOfPagesInOrder.push(item)
function extractPages(obj) {
const items = []
function recursiveExtract(obj) {
if (obj.href) {
items.push(obj)
}
if (obj.items) {
obj.items.forEach((item) => {
recursiveExtract(item)
})
}
}
obj.forEach((item) => {
recursiveExtract(item)
})
})
return items
}
let arrayOfPagesInOrder = extractPages(pages)
$: currentPageIndex = arrayOfPagesInOrder.findIndex((item) => item.href == $page.url.pathname)
</script>
@ -22,7 +35,7 @@
{#if currentPageIndex > 0 && arrayOfPagesInOrder[currentPageIndex - 1]}
<a
href={arrayOfPagesInOrder[currentPageIndex - 1].href}
class="btn btn-sm md:btn-md gap-2 normal-case lg:gap-3">
class="btn btn-sm md:btn-md gap-2 lg:gap-3">
<svg
class="h-6 w-6 fill-current md:h-8 md:w-8"
xmlns="http://www.w3.org/2000/svg"
@ -44,7 +57,7 @@
{#if currentPageIndex < arrayOfPagesInOrder.length - 1 && arrayOfPagesInOrder[currentPageIndex + 1]}
<a
href={arrayOfPagesInOrder[currentPageIndex + 1].href}
class="btn btn-neutral btn-sm md:btn-md gap-2 normal-case lg:gap-3">
class="btn btn-neutral btn-sm md:btn-md gap-2 lg:gap-3">
<div class="flex flex-col items-end">
<span class="text-neutral-content/50 hidden text-xs font-normal md:block">
{$t("Next")}
@ -180,6 +193,17 @@
</div>
{#if $currentLang != defaultLang}
<div class="flex items-center gap-2">
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20"
fill="currentColor"
class="inline-block h-4 w-4 fill-current">
<path
fill-rule="evenodd"
d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-1.5 0a6.5 6.5 0 11-11-4.69v.447a3.5 3.5 0 001.025 2.475L8.293 10 8 10.293a1 1 0 000 1.414l1.06 1.06a1.5 1.5 0 01.44 1.061v.363a1 1 0 00.553.894l.276.139a1 1 0 001.342-.448l1.454-2.908a1.5 1.5 0 00-.281-1.731l-.772-.772a1 1 0 00-1.023-.242l-.384.128a.5.5 0 01-.606-.25l-.296-.592a.481.481 0 01.646-.646l.262.131a1 1 0 00.447.106h.188a1 1 0 00.949-1.316l-.068-.204a.5.5 0 01.149-.538l1.44-1.234A6.492 6.492 0 0116.5 10z"
clip-rule="evenodd" />
</svg>
<div>
<a
target="_blank"

View File

@ -1,10 +1,12 @@
<script>
import Sponsors from "@components/Sponsors.svelte"
import { t } from "@src/lib/i18n"
import Sponsors from "$components/Sponsors.svelte"
import { t } from "$lib/i18n"
const newtabicon = `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" class="inline-block w-4 fill-current opacity-0 group-hover:opacity-50"><path fill-rule="evenodd" d="M19,14 L19,19 C19,20.1045695 18.1045695,21 17,21 L5,21 C3.8954305,21 3,20.1045695 3,19 L3,7 C3,5.8954305 3.8954305,5 5,5 L10,5 L10,7 L5,7 L5,19 L17,19 L17,14 L19,14 Z M18.9971001,6.41421356 L11.7042068,13.7071068 L10.2899933,12.2928932 L17.5828865,5 L12.9971001,5 L12.9971001,3 L20.9971001,3 L20.9971001,11 L18.9971001,11 L18.9971001,6.41421356 Z" /></svg>`
</script>
<div class="h-20" />
<div>
<div class="bg-base-100 text-base-content">
<footer class="footer mx-auto max-w-6xl px-4 py-20">
@ -36,6 +38,9 @@
<a href="/docs/changelog" class="link link-hover">
{$t("changelog")}
</a>
<a href="/docs/roadmap" class="link link-hover">
{$t("Roadmap")}
</a>
<a
target="_blank"
rel="noopener, noreferrer"
@ -62,6 +67,7 @@
<a href="/docs/colors/" class="link link-hover">{$t("color-system")}</a>
<a href="/docs/config/" class="link link-hover">{$t("config")}</a>
<a href="/blog/" class="link link-hover">{$t("Blog")}</a>
<a href="/store/" class="link link-hover">{$t("Store")}</a>
</div>
<div>
<span class="footer-title">{$t("available-on")}</span>
@ -175,7 +181,7 @@
rel="noopener, noreferrer"
target="_blank"
class="inline-flex items-center justify-center hover:opacity-90">
<div class="avatar mr-3">
<div class="avatar me-3">
<div class="mask mask-squircle bg-neutral h-14 w-14 p-px">
<img
loading="lazy"

View File

@ -1,6 +1,6 @@
<script>
import { page } from "$app/stores"
import { t } from "@src/lib/i18n"
import { t } from "$lib/i18n"
const tabs = [
{
name: "Tailwind Plugin",
@ -26,21 +26,19 @@
</script>
<div class="not-prose mb-10 overflow-x-auto">
<div class="tabs flex-nowrap whitespace-nowrap">
<nav class="tabs tabs-lifted xl:tabs-lg">
{#each tabs as { name, href }}
<a
{href}
class={`tab tab-lifted xl:tab-lg ${$page.url.pathname == href ? "tab-active" : ""}`}>
<a {href} class={`tab ${$page.url.pathname == href ? "tab-active" : ""}`}>
{@html $t(name)}
</a>
{/each}
<!-- <a target="_blank" rel="noopener, noreferrer" href="https://github.com/saadeghi/daisyui/tree/master/examples" class="tab tab-lifted xl:tab-lg">
<!-- <a target="_blank" rel="noopener, noreferrer" href="https://github.com/saadeghi/daisyui/tree/master/examples" class="tab">
<span class="link link-hover flex items-center text-sm">
More examples on github
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" class="ml-2 fill-current"><path d="M14,3V5H17.59L7.76,14.83L9.17,16.24L19,6.41V10H21V3M19,19H5V5H12V3H5C3.89,3 3,3.9 3,5V19C3,20.1 3.9,21 5,21H19C20.1,21 21,20.1 21,19V12H19V19Z" /></svg>
</span>
</a> -->
<span class="tab tab-lifted xl:tab-lg flex-grow cursor-default" />
</div>
<span class="tab" />
</nav>
</div>

View File

@ -1,10 +1,10 @@
<script>
import { currentLang, langs, setLang } from "@src/lib/i18n"
import { t } from "@src/lib/i18n"
import { currentLang, langs, setLang } from "$lib/i18n"
import { t } from "$lib/i18n"
</script>
<div title="Change Language" class="dropdown dropdown-end">
<div tabindex="0" class="btn btn-ghost normal-case">
<div tabindex="0" class="btn btn-ghost">
<svg
class="h-5 w-5 fill-current"
xmlns="http://www.w3.org/2000/svg"
@ -39,7 +39,7 @@
{$t("__code", {}, langItem)}
</span>
{/if}
{$t("__name", {}, langItem)}
<span class="font-[sans-serif]">{$t("__name", {}, langItem)}</span>
{#if $t("__status", {}, langItem) !== "__status" && $t("__status", {}, langItem) !== ""}
<span class="badge badge-sm badge-ghost">
{$t("__status", {}, langItem)}

View File

@ -1,23 +1,23 @@
<script>
import { page } from "$app/stores"
import { readEnv } from "$lib/util"
import ThemeChange from "@components/ThemeChange.svelte"
import LangChange from "@components/LangChange.svelte"
import Search from "@components/Search.svelte"
import LogoContextMenu from "@components/LogoContextMenu.svelte"
import ThemeChange from "$components/ThemeChange.svelte"
import LangChange from "$components/LangChange.svelte"
import Search from "$components/Search.svelte"
import LogoContextMenu from "$components/LogoContextMenu.svelte"
let contextMenuEl
export let pages
export let themes
export let hideLogoOnLargeScreen = false
export let hideSidebarButton = false
export let hideSidebarButtonOnLargeScreen = false
export let showComponentsBtn = false
export let showBlogBtn = false
export let showSearch = false
export let showVersion = false
export let showLanguage = false
import { t } from "@src/lib/i18n"
import { t } from "$lib/i18n"
let version = readEnv("VITE_DAISYUI_VERSION", "latest")
@ -32,7 +32,7 @@
<div
class={`
bg-base-100 text-base-content sticky top-0 z-30 flex h-16 w-full justify-center bg-opacity-90 backdrop-blur transition-all duration-100 [transform:translate3d(0,0,0)]
bg-base-100 text-base-content sticky top-0 z-30 flex h-16 w-full justify-center bg-opacity-90 backdrop-blur transition-shadow duration-100 [transform:translate3d(0,0,0)]
${switchNavbarStyle ? "shadow-sm" : ""}
`}>
<nav class="navbar w-full">
@ -45,9 +45,7 @@
for="drawer"
class={`btn btn-square btn-ghost drawer-button ${
hideSidebarButtonOnLargeScreen ? "lg:hidden" : ""
}
${hideSidebarButton ? "hidden" : ""}
}`}>
} ${hideSidebarButton ? "hidden" : ""}`}>
<svg
width="20"
height="20"
@ -83,7 +81,7 @@
<circle cx="207.5" cy="135" r="56" fill="#FF9903" />
</svg>
<div class="font-title inline-flex text-lg md:text-2xl">
<div class="font-title inline-flex text-lg rtl:flex-row-reverse md:text-2xl">
<span class="lowercase">daisy</span>
<span class="uppercase text-[#1AD1A5]">UI</span>
</div>
@ -118,7 +116,7 @@
{#if showSearch}
<div class="hidden w-full max-w-sm lg:flex">
<Search {removeScrollPaddingFromNavbar} {addScrollPaddingToNavbar} />
<Search {pages} {removeScrollPaddingFromNavbar} {addScrollPaddingToNavbar} />
</div>
{/if}
</div>
@ -128,7 +126,7 @@
<a
data-sveltekit-preload-data="hover"
href="/components/"
class="btn btn-ghost drawer-button font-normal normal-case">
class="btn btn-ghost drawer-button font-normal">
<!-- <svg
width="20"
height="20"
@ -142,43 +140,10 @@
</a>
</div>
{/if}
{#if showBlogBtn}
<div class={`hidden flex-none items-center lg:block`}>
<a
data-sveltekit-preload-data="hover"
href="/blog/"
class="btn btn-ghost drawer-button font-normal normal-case">
Blog
</a>
</div>
{/if}
<ThemeChange />
<ThemeChange {themes} />
{#if showLanguage}
<LangChange />
{/if}
<span
class="tooltip tooltip-bottom before:text-xs before:content-[attr(data-tip)] max-lg:hidden"
data-tip="GitHub">
<div class="flex-none items-center">
<a
aria-label="Github"
target="_blank"
href="https://github.com/saadeghi/daisyui"
rel="noopener, noreferrer"
class="btn btn-ghost drawer-button btn-square normal-case">
<svg
width="20"
height="20"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 512 512"
class="inline-block h-5 w-5 fill-current md:h-6 md:w-6">
<path
d="M256,32C132.3,32,32,134.9,32,261.7c0,101.5,64.2,187.5,153.2,217.9a17.56,17.56,0,0,0,3.8.4c8.3,0,11.5-6.1,11.5-11.4,0-5.5-.2-19.9-.3-39.1a102.4,102.4,0,0,1-22.6,2.7c-43.1,0-52.9-33.5-52.9-33.5-10.2-26.5-24.9-33.6-24.9-33.6-19.5-13.7-.1-14.1,1.4-14.1h.1c22.5,2,34.3,23.8,34.3,23.8,11.2,19.6,26.2,25.1,39.6,25.1a63,63,0,0,0,25.6-6c2-14.8,7.8-24.9,14.2-30.7-49.7-5.8-102-25.5-102-113.5,0-25.1,8.7-45.6,23-61.6-2.3-5.8-10-29.2,2.2-60.8a18.64,18.64,0,0,1,5-.5c8.1,0,26.4,3.1,56.6,24.1a208.21,208.21,0,0,1,112.2,0c30.2-21,48.5-24.1,56.6-24.1a18.64,18.64,0,0,1,5,.5c12.2,31.6,4.5,55,2.2,60.8,14.3,16.1,23,36.6,23,61.6,0,88.2-52.4,107.6-102.3,113.3,8,7.1,15.2,21.1,15.2,42.5,0,30.7-.3,55.5-.3,63,0,5.4,3.1,11.5,11.4,11.5a19.35,19.35,0,0,0,4-.4C415.9,449.2,480,363.1,480,261.7,480,134.9,379.7,32,256,32Z" />
</svg>
</a>
</div>
</span>
</div>
</nav>
</div>

View File

@ -9,7 +9,7 @@
}, 500)
</script>
<div class="tooltip tooltip-right font-normal" data-tip="Add custom prefix">
<div class="tooltip tooltip-right rtl:tooltip-left font-normal" data-tip="Add custom prefix">
<input
class="input input-bordered input-xs w-min max-w-[3.8rem]"
type="text"

View File

@ -1,9 +1,13 @@
<script>
import { siteData } from "@src/lib/data.js"
import { t } from "@src/lib/i18n"
import { t } from "$lib/i18n"
import { readEnv } from "$lib/util"
let siteData = {
title: "Tailwind CSS Components",
desc: "Free Tailwind Components",
card: "/images/default.jpg",
}
export let formatTitle = true
export let title = ""
export let desc = siteData.desc

View File

@ -4,18 +4,31 @@
import { goto } from "$app/navigation"
import Typeahead from "svelte-typeahead"
import { pages } from "$lib/data.js"
import { getOS } from "$lib/util"
import { t } from "$lib/i18n"
export let pages = []
const dispatch = createEventDispatcher()
let searchIndex = []
pages.forEach((group) => {
group.items.forEach((item) => {
searchIndex.push(item)
function extractPages(obj) {
const items = []
function recursiveExtract(obj) {
if (obj.href) {
items.push(obj)
}
if (obj.items) {
obj.items.forEach((item) => {
recursiveExtract(item)
})
}
}
obj.forEach((item) => {
recursiveExtract(item)
})
})
return items
}
let searchIndex = extractPages(pages)
let os
onMount(() => {
@ -36,8 +49,8 @@
dispatch("search", detail)
}
export let addScrollPaddingToNavbar
export let removeScrollPaddingFromNavbar
export let addScrollPaddingToNavbar = undefined
export let removeScrollPaddingFromNavbar = undefined
</script>
<svelte:window on:keydown={handleKeydown} />
@ -45,7 +58,7 @@
<!-- svelte-ignore a11y-label-has-associated-control -->
<label class={`searchbox relative mx-3 w-full`} bind:this={seachboxEl}>
<svg
class={`pointer-events-none absolute z-10 my-3.5 ml-4 stroke-current opacity-60 ${
class={`pointer-events-none absolute z-10 my-3.5 ms-4 stroke-current opacity-60 ${
$page.url.pathname == "/" ? "text-current" : "text-base-content"
}`}
width="16"
@ -64,7 +77,7 @@
limit={8}
label="Search"
data={searchIndex}
extract={(item) => item.tags}
extract={(item) => (item.tags ? item.tags : item.name)}
inputAfterSelect="clear"
on:select={onSelect}
on:focus={removeScrollPaddingFromNavbar}
@ -75,7 +88,7 @@
</div>
</Typeahead>
<div
class={`pointer-events-none absolute right-10 top-2.5 gap-1 opacity-50 ${
class={`pointer-events-none absolute end-10 top-2.5 gap-1 opacity-50 rtl:flex-row-reverse ${
$page.url.pathname == "/" ? "hidden" : "hidden lg:flex"
}`}>
{#if ["macos"].includes(os)}

View File

@ -1,11 +1,10 @@
<script>
import { page } from "$app/stores"
import { pages } from "@src/lib/data.js"
import { readEnv } from "$lib/util"
// import { useBreakpoints } from "$lib/breakpoints"
import Search from "@components/Search.svelte"
import LogoContextMenu from "@components/LogoContextMenu.svelte"
import Search from "$components/Search.svelte"
import LogoContextMenu from "$components/LogoContextMenu.svelte"
import SidebarMenuItem from "$components/SidebarMenuItem.svelte"
let contextMenuEl
export let closeDrawer
@ -13,14 +12,15 @@
let version = readEnv("VITE_DAISYUI_VERSION", "latest")
export let pages
export let drawerSidebarScrollY
$: switchNavbarStyle = drawerSidebarScrollY > 40 ? true : false
// const breakpoints = useBreakpoints()
// const showSearch = breakpoints.smaller("lg")
import { t } from "@src/lib/i18n"
$: innerWidth = 0
import { t } from "$lib/i18n"
$: innerWidth = undefined
</script>
<svelte:window bind:innerWidth />
@ -50,7 +50,7 @@
<LogoContextMenu bind:this={contextMenuEl} />
<div class="dropdown">
<div tabindex="0" class="link link-hover font-mono text-xs">
{version}
<span class="opacity-60">{version}</span>
</div>
<ul
tabindex="0"
@ -73,67 +73,25 @@
switchNavbarStyle ? "shadow-sm" : ""
}`}>
<div class="flex w-full">
<Search on:search={closeDrawer} on:focus={openDrawer} />
<Search {pages} on:search={closeDrawer} on:focus={openDrawer} />
</div>
</div>
{/if}
<ul class="menu bg-base-200 menu-horizontal w-full justify-between px-4 py-2 lg:hidden">
<li>
<a href="/components/">{$t("components-btn")}</a>
</li>
<li>
<a href="/blog/">{$t("Blog")}</a>
</li>
<li>
<a target="_blank" href="https://github.com/saadeghi/daisyui" rel="noopener, noreferrer">
{$t("GitHub")}
</a>
</li>
</ul>
<div class="h-4" />
{#each pages as { name, icon, items }}
<ul class="menu menu-sm lg:menu-md px-4 py-0">
{#if name && name != "excluded"}
<li />
<li class="menu-title flex flex-row gap-4">
{#if icon}
<span class="text-base-content">{@html icon}</span>
{/if}
<span>{$t(name)}</span>
</li>
{/if}
{#if name != "excluded"}
{#each items as { name, href, icon, badge, hidden, highlightAnotherItem, deprecated }}
{#if !hidden}
<li>
<a
{href}
data-sveltekit-preload-data="hover"
on:click={closeDrawer}
id={$page.url.pathname.startsWith(href + "/") ? "active-menu" : ""}
class={`${$page.url.pathname == href ? "active" : ""} ${
$page.url.pathname == highlightAnotherItem + "/" ? "active" : ""
} ${$page.url.pathname.startsWith(href + "/") ? "active" : ""}`}>
{#if icon}
<span>
{@html icon}
</span>
{/if}
<span class={deprecated ? "line-through" : undefined}>
{@html $t(name)}
</span>
{#if badge}
<span class="badge badge-sm font-mono lowercase">
{$t(badge)}
</span>
{/if}
</a>
</li>
{/if}
{/each}
{/if}
</ul>
{/each}
<ul class="menu px-4 py-0">
{#each pages as { name, href, icon, badge, highlightAnotherItem, deprecated, items, collapsible, target }}
<SidebarMenuItem
{closeDrawer}
{name}
{href}
{icon}
{badge}
{highlightAnotherItem}
{deprecated}
{items}
{collapsible}
{target} />
{/each}
</ul>

View File

@ -0,0 +1,147 @@
<script>
import { browser } from "$app/environment"
import { page } from "$app/stores"
import { t } from "$lib/i18n"
import SidebarMenuItem from "$components/SidebarMenuItem.svelte"
export let closeDrawer
export let name = null,
href = null,
icon = null,
badge = null,
highlightAnotherItem = null,
deprecated = null,
items = null,
collapsible = null,
target = null
const sanitize = (name) => {
return name.toLowerCase().replace(/\W/g, "-")
}
$: getDisclosureState = (name, items) => {
// open the disclosure if the user has opened it before
if (browser && localStorage.getItem(`disclosure-${sanitize(name)}`) === "open") {
return "open"
}
// open the disclosure if the current page is a child of the disclosure
if (
items.some((item) => item.href === $page.url.pathname) ||
items.some((item) => item.items?.some((subitem) => subitem.href === $page.url.pathname))
) {
return "open"
}
return null
}
const saveDisclosureState = (id, value) => {
if (browser) {
localStorage.setItem(id, value)
}
}
</script>
{#if name}
<li>
{#if items}
{#if collapsible}
<details
id={`disclosure-${sanitize(name)}`}
open={getDisclosureState(name, items)}
on:toggle={(el) => saveDisclosureState(el.target.id, el.target.open ? "open" : "close")}>
<summary class="group">
{#if icon}
<span>{@html icon}</span>
{/if}
{$t(name)}
</summary>
<ul>
{#each items as { name, href, icon, badge, highlightAnotherItem, deprecated, items }}
<SidebarMenuItem
{closeDrawer}
{name}
{href}
{icon}
{badge}
{highlightAnotherItem}
{deprecated}
{items} />
{/each}
</ul>
</details>
{:else}
{#if !href}
<h2 class="menu-title flex items-center gap-4 px-1.5">
{#if icon}
<span class="text-base-content">{@html icon}</span>
{/if}
{$t(name)}
</h2>
{/if}
{#if items}
<ul>
{#each items as { name, href, icon, badge, highlightAnotherItem, deprecated, items }}
<SidebarMenuItem
{closeDrawer}
{name}
{href}
{icon}
{badge}
{highlightAnotherItem}
{deprecated}
{items} />
{/each}
</ul>
{/if}
{/if}
{/if}
{#if !items && href}
<a
{href}
target={target === "blank" ? "_blank" : undefined}
rel={target === "blank" ? "noopener noreferrer" : undefined}
data-sveltekit-preload-data="hover"
on:click={closeDrawer}
class={`group ${$page.url.pathname == href ? "active" : ""} ${
$page.url.pathname == highlightAnotherItem + "/" ? "active" : ""
} ${$page.url.pathname.startsWith(href + "/") ? "active" : ""}`}>
{#if icon}
<span>
{@html icon}
</span>
{/if}
<span class={deprecated ? "line-through" : undefined}>
{@html $t(name)}
</span>
{#if badge}
<span class="badge badge-sm font-mono lowercase">
{$t(badge)}
</span>
{/if}
{#if target === "blank"}
<svg
width="12"
height="12"
class="opacity-0 transition-opacity duration-300 ease-out group-hover:opacity-100"
viewBox="0 0 48 48"
fill="none"
xmlns="http://www.w3.org/2000/svg">
<path
d="M19 11H37V29"
stroke="currentColor"
stroke-width="4"
stroke-linecap="butt"
stroke-linejoin="bevel" />
<path
d="M11.5439 36.4559L36.9997 11"
stroke="currentColor"
stroke-width="4"
stroke-linecap="butt"
stroke-linejoin="bevel" />
</svg>
{/if}
</a>
{/if}
</li>
{:else if !items}
<li />
{/if}

View File

@ -1,19 +1,20 @@
<script>
import { onMount } from "svelte"
import { themes } from "@src/lib/data.js"
import { themeChange } from "theme-change"
import { t } from "@src/lib/i18n"
import { t } from "$lib/i18n"
onMount(() => {
themeChange(false)
})
export let themes
export let dropdownClasses = ""
export let btnClasses = "btn-ghost"
export let contentClasses = "mt-16"
</script>
<div title="Change Theme" class={`dropdown dropdown-end ${dropdownClasses}`}>
<div tabindex="0" class={`btn normal-case ${btnClasses}`}>
<div
title="Change Theme"
class={`dropdown dropdown-end hidden [@supports(color:oklch(0_0_0))]:block ${dropdownClasses}`}>
<div tabindex="0" class={`btn ${btnClasses}`}>
<svg
width="20"
height="20"

View File

@ -1,7 +1,7 @@
<script>
import { onMount } from "svelte"
import { themes } from "@src/lib/data.js"
import { themeChange } from "theme-change"
export let themes
onMount(() => {
themeChange(false)
})

View File

@ -1,5 +1,5 @@
<script>
import { t } from "@src/lib/i18n"
import { t } from "$lib/i18n"
export let text
export let variables = {}
</script>

View File

@ -1,5 +1,5 @@
<script>
import { t } from "@src/lib/i18n"
import { t } from "$lib/i18n"
export let animateValue
export let section
export let index

View File

@ -1,5 +1,5 @@
<script>
import { t } from "@src/lib/i18n"
import { t } from "$lib/i18n"
</script>
<div class="hero bg-base-100 text-base-content mx-auto min-h-screen max-w-md md:max-w-full">
@ -9,12 +9,12 @@
{$t("install-title")}
</h2>
<!-- <p class="mx-auto mt-5 w-full max-w-lg">{@html $t("install-desc")}</p> -->
<p class="mx-auto mt-5 w-full max-w-lg text-left">1. {$t("install-step-1")}:</p>
<p class="mx-auto mt-5 w-full max-w-lg text-start">1. {$t("install-step-1")}:</p>
<div class="mx-auto my-2 w-full max-w-md">
<div class="mockup-code mx-auto w-full max-w-xs text-left shadow-lg sm:max-w-none">
<pre data-prefix="$"><code>npm i -D daisyui@latest</code></pre>
</div>
<p class="mx-auto mt-5 w-full max-w-lg text-left">2. {$t("install-step-2")}:</p>
<p class="mx-auto mt-5 w-full max-w-lg text-start">2. {$t("install-step-2")}:</p>
<div class="my-2 w-full max-w-4xl">
<div
class="mockup-code mx-auto w-full max-w-xs text-left text-sm shadow-lg sm:max-w-none">

View File

@ -10,8 +10,8 @@
#carbonads {
display: flex;
max-width: 350px;
color: hsl(var(--bc));
background-color: hsl(var(--b2));
color: var(--fallback-bc, oklch(var(--bc)));
background-color: var(--fallback-b2, oklch(var(--b2)));
z-index: 100;
border-radius: 4px;
overflow: hidden;
@ -49,7 +49,7 @@
#carbonads .carbon-poweredby {
display: block;
padding: 6px 8px;
background: hsl(var(--b3));
background: var(--fallback-b3, oklch(var(--b3)));
text-align: center;
text-transform: uppercase;
letter-spacing: 0.5px;
@ -96,7 +96,7 @@
color: inherit;
border: 2px solid transparent;
border-radius: var(--rounded-btn);
padding-left: 2.5em;
padding-inline-start: 2.5em;
}
[data-svelte-search][data-svelte-search] input::placeholder {
color: inherit;
@ -104,15 +104,15 @@
[data-svelte-search][data-svelte-search] input:focus {
outline: none;
outline-offset: 0;
border: 2px solid hsl(var(--bc) / 0.2);
background-color: hsl(var(--b1));
color: hsl(var(--bc));
border: 2px solid var(--fallback-bc, oklch(var(--bc) / 0.2));
background-color: var(--fallback-b1, oklch(var(--b1)));
color: var(--fallback-bc, oklch(var(--bc)));
}
[data-svelte-typeahead][data-svelte-typeahead].dropdown[aria-expanded="true"]
.svelte-typeahead-list {
transform: translateY(0.5em);
background: hsl(var(--b1) / 0.99);
border: 0 solid hsl(var(--bc) / 0.2);
background: var(--fallback-b1, oklch(var(--b1) / 0.99));
border: 0 solid var(--fallback-bc, oklch(var(--bc) / 0.2));
border-radius: var(--rounded-box);
overflow: hidden;
padding: 0.5rem;
@ -124,16 +124,16 @@
}
[data-svelte-typeahead][data-svelte-typeahead] .svelte-typeahead-list .selected,
[data-svelte-typeahead][data-svelte-typeahead] .svelte-typeahead-list .selected:hover {
background: hsl(var(--n));
color: hsl(var(--nc));
background: var(--fallback-n, oklch(var(--n)));
color: var(--fallback-nc, oklch(var(--nc)));
}
[data-svelte-typeahead][data-svelte-typeahead] .svelte-typeahead-list li {
color: hsl(var(--bc));
color: var(--fallback-bc, oklch(var(--bc)));
border-radius: var(--rounded-btn);
}
[data-svelte-typeahead][data-svelte-typeahead] .svelte-typeahead-list li:hover {
background: hsl(var(--b2));
color: hsl(var(--bc));
background: var(--fallback-b2, oklch(var(--b2)));
color: var(--fallback-bc, oklch(var(--bc)));
}
[data-svelte-typeahead][data-svelte-typeahead] .svelte-typeahead-list li:not(:last-of-type) {
border-bottom: none;
@ -145,14 +145,16 @@
code[class*="language-"],
pre[class*="language-"] {
background: unset;
direction: ltr;
}
.prose pre[class*="language-"] {
max-width: clamp(20rem, calc(100vw - 4rem), 80ch);
background-color: hsl(var(--n));
color: hsl(var(--nc));
background-color: var(--fallback-n, oklch(var(--n)));
color: var(--fallback-nc, oklch(var(--nc)));
border-radius: var(--rounded-box);
::selection {
background-color: hsl(var(--nc));
color: hsl(var(--n));
background-color: var(--fallback-nc, oklch(var(--nc)));
color: var(--fallback-n, oklch(var(--n)));
}
}
@media (min-width: 1024px) {

View File

@ -1,556 +0,0 @@
export let siteStats = {
components: "53",
themes: "29",
githubStars: "+25,000",
npmInstalls: "+8,000,000",
}
export let siteData = {
title: "Tailwind CSS Components",
desc: "Free Tailwind Components",
card: "/images/default.jpg",
}
export let pagesThatDontNeedSidebar = ["/"]
export let themes = [
"light",
"dark",
"cupcake",
"bumblebee",
"emerald",
"corporate",
"synthwave",
"retro",
"cyberpunk",
"valentine",
"halloween",
"garden",
"forest",
"aqua",
"lofi",
"pastel",
"fantasy",
"wireframe",
"black",
"luxury",
"dracula",
"cmyk",
"autumn",
"business",
"acid",
"lemonade",
"night",
"coffee",
"winter",
]
export let exampleRepos = [
{
name: "Next.js",
href: "https://stackblitz.com/edit/daisyui-nextjs/",
logos: ["/logos/nextjs.svg"],
},
{
name: "SvelteKit",
href: "https://stackblitz.com/edit/daisyui-sveltekit/",
logos: ["/logos/svelte.svg"],
},
{
name: "Nuxt 3",
href: "https://stackblitz.com/edit/daisyui-nuxt3/",
logos: ["/logos/nuxtjs.svg"],
},
{
name: "Astro",
href: "https://stackblitz.com/edit/daisyui-astro/",
logos: ["/logos/astro.svg"],
},
{
name: "Vue.js 3",
href: "https://stackblitz.com/edit/daisyui-vue-vite/",
logos: ["/logos/vue.svg"],
},
{
name: "Solid.js",
href: "https://stackblitz.com/edit/daisyui-solidjs/",
logos: ["/logos/solidjs.svg", "/logos/vite.svg"],
},
{
name: "Vite",
href: "https://stackblitz.com/edit/daisyui-vite/",
logos: ["/logos/vite.svg"],
},
{
name: "React (Vite)",
href: "https://stackblitz.com/edit/daisyui-react-vite/",
logos: ["/logos/react.svg", "/logos/vite.svg"],
},
{
name: "Svelte (Vite)",
href: "https://stackblitz.com/edit/daisyui-svelte-vite/",
logos: ["/logos/svelte.svg", "/logos/vite.svg"],
},
{
name: "Remix",
href: "https://stackblitz.com/edit/daisyui-remix/",
logos: ["/logos/remix.svg"],
},
{
name: "Refine",
href: "https://stackblitz.com/edit/daisyui-refine/",
logos: ["/logos/refine.svg", "/logos/vite.svg"],
},
{
name: "PostCSS",
href: "https://stackblitz.com/edit/daisyui-postcss/",
logos: ["/logos/postcss.svg"],
},
{
name: "React (Webpack)",
href: "https://stackblitz.com/edit/daisyui-react-webpack/",
logos: ["/logos/react.svg", "/logos/webpack.svg"],
},
{
name: "Qwik",
href: "https://stackblitz.com/edit/daisyui-qwik/",
logos: ["/logos/qwik.svg", "/logos/vite.svg"],
},
{
name: "Preact",
href: "https://stackblitz.com/edit/daisyui-preact-vite/",
logos: ["/logos/preact.svg", "/logos/vite.svg"],
},
{
name: "Lit",
href: "https://stackblitz.com/edit/daisyui-lit-vite/",
logos: ["/logos/lit.svg", "/logos/vite.svg"],
},
{
name: "Angular",
href: "https://stackblitz.com/edit/daisyui-angular/",
logos: ["/logos/angular.svg"],
},
{
name: "11ty",
href: "https://stackblitz.com/edit/daisyui-11ty/",
logos: ["/logos/11ty.svg"],
},
{
name: "Snowpack",
href: "https://stackblitz.com/edit/daisyui-snowpack/",
logos: ["/logos/snowpack.svg"],
},
{
name: "React (CRA)",
href: "https://stackblitz.com/edit/daisyui-react-cra/",
logos: ["/logos/react.svg", "/logos/cra.svg"],
},
{
name: "Elm",
href: "https://stackblitz.com/edit/elm-daisyui/",
logos: ["/logos/elm.svg", "/logos/vite.svg"],
},
{
name: "CDN (Tailwind)",
href: "https://stackblitz.com/edit/daisyui-cdn/",
logos: ["/logos/jsdelivr.svg"],
},
{
name: "CDN (BassCSS)",
href: "https://stackblitz.com/edit/daisyui-basscss/",
logos: ["/logos/jsdelivr.svg"],
},
{
name: "CDN (Tachyons)",
href: "https://stackblitz.com/edit/daisyui-tachyons/",
logos: ["/logos/jsdelivr.svg"],
},
{
name: "WordPress (Gust)",
href: "https://wordpress.org/plugins/gust-daisy-ui",
logos: ["/logos/wordpress.svg", "/logos/gust.svg"],
},
]
export let pages = [
{
items: [
{
name: "Install",
tags: "how setup install npm",
href: "/docs/install/",
icon: '<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" class="w-6 h-6 stroke-current"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 4H6a2 2 0 00-2 2v12a2 2 0 002 2h12a2 2 0 002-2V6a2 2 0 00-2-2h-2m-4-1v8m0 0l3-3m-3 3L9 8m-5 5h2.586a1 1 0 01.707.293l2.414 2.414a1 1 0 00.707.293h3.172a1 1 0 00.707-.293l2.414-2.414a1 1 0 01.707-.293H20" /></svg>',
highlightAnotherItem: "/docs/cdn",
},
{
name: "CDN",
tags: "how cdn",
href: "/docs/cdn/",
hidden: true,
},
{
name: "Use",
tags: "how use",
href: "/docs/use/",
icon: '<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" class="w-6 h-6 stroke-current"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z" /></svg>',
},
{
name: "Customize components",
tags: "customize components",
href: "/docs/customize/",
icon: '<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" class="w-6 h-6 stroke-current"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4" /></svg>',
},
{
name: "Config",
tags: "setup config styled themes base logs utils rtl",
href: "/docs/config/",
icon: '<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" class="w-6 h-6 stroke-current"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6V4m0 2a2 2 0 100 4m0-4a2 2 0 110 4m-6 8a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4m6 6v10m6-2a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4" /></svg>',
},
{
name: "Colors",
tags: "colors 🎨",
href: "/docs/colors/",
icon: '<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" class="w-6 h-6 fill-current"><path d="M19,11.5C19,11.5 17,13.67 17,15C17,16.1 17.9,17 19,17C20.1,17 21,16.1 21,15C21,13.67 19,11.5 19,11.5M5.21,10L10,5.21L14.79,10M16.56,8.94L7.62,0L6.21,1.41L8.59,3.79L3.44,8.94C2.85,9.5 2.85,10.47 3.44,11.06L8.94,16.56C9.23,16.85 9.62,17 10,17C10.38,17 10.77,16.85 11.06,16.56L16.56,11.06C17.15,10.47 17.15,9.5 16.56,8.94Z"/></svg>',
},
{
name: "Themes",
tags: "themes disable custom color generator",
href: "/docs/themes/",
icon: '<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" class="w-6 h-6 stroke-current"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 21a4 4 0 01-4-4V5a2 2 0 012-2h4a2 2 0 012 2v12a4 4 0 01-4 4zm0 0h12a2 2 0 002-2v-4a2 2 0 00-2-2h-2.343M11 7.343l1.657-1.657a2 2 0 012.828 0l2.829 2.829a2 2 0 010 2.828l-8.486 8.485M7 17h.01" /></svg>',
},
{
name: "Theme Generator",
tags: "theme generator custom color generator",
href: "/theme-generator/",
icon: '<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" class="w-6 h-6 fill-current" viewBox="0 0 512 512"><title>ionicons-v5-m</title><path d="M96,208H48a16,16,0,0,1,0-32H96a16,16,0,0,1,0,32Z"/><line x1="90.25" y1="90.25" x2="124.19" y2="124.19"/><path d="M124.19,140.19a15.91,15.91,0,0,1-11.31-4.69L78.93,101.56a16,16,0,0,1,22.63-22.63l33.94,33.95a16,16,0,0,1-11.31,27.31Z"/><path d="M192,112a16,16,0,0,1-16-16V48a16,16,0,0,1,32,0V96A16,16,0,0,1,192,112Z"/><line x1="293.89" y1="90.25" x2="259.95" y2="124.19"/><path d="M260,140.19a16,16,0,0,1-11.31-27.31l33.94-33.95a16,16,0,0,1,22.63,22.63L271.27,135.5A15.94,15.94,0,0,1,260,140.19Z"/><line x1="124.19" y1="259.95" x2="90.25" y2="293.89"/><path d="M90.25,309.89a16,16,0,0,1-11.32-27.31l33.95-33.94a16,16,0,0,1,22.62,22.63l-33.94,33.94A16,16,0,0,1,90.25,309.89Z"/><path d="M219,151.83a26,26,0,0,0-36.77,0l-30.43,30.43a26,26,0,0,0,0,36.77L208.76,276a4,4,0,0,0,5.66,0L276,214.42a4,4,0,0,0,0-5.66Z"/><path d="M472.31,405.11,304.24,237a4,4,0,0,0-5.66,0L237,298.58a4,4,0,0,0,0,5.66L405.12,472.31a26,26,0,0,0,36.76,0l30.43-30.43h0A26,26,0,0,0,472.31,405.11Z"/></svg>',
},
{
name: "Layout & Typography",
tags: "layout typography padding margin grid flex spacing font",
href: "/docs/layout-and-typography/",
icon: '<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" class="w-6 h-6 fill-current"><path d="M4,2 L20,2 C21.1045695,2 22,2.8954305 22,4 L22,20 C22,21.1045695 21.1045695,22 20,22 L4,22 C2.8954305,22 2,21.1045695 2,20 L2,4 C2,2.8954305 2.8954305,2 4,2 Z M4,4 L4,20 L20,20 L20,4 L4,4 Z M14.7999209,15 L9.19992091,15 L8,18 L6,18 L11,6 L13,6 L18,18 L16,18 L14.7999209,15 Z M13.9998682,13 L11.9997364,8 L9.99986818,13 L13.9998682,13 Z"/></svg>',
},
],
},
{
name: "Actions",
icon: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 text-fuchsia-600"><path fill-rule="evenodd" d="M10 1a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0v-1.5A.75.75 0 0110 1zM5.05 3.05a.75.75 0 011.06 0l1.062 1.06A.75.75 0 116.11 5.173L5.05 4.11a.75.75 0 010-1.06zm9.9 0a.75.75 0 010 1.06l-1.06 1.062a.75.75 0 01-1.062-1.061l1.061-1.06a.75.75 0 011.06 0zM3 8a.75.75 0 01.75-.75h1.5a.75.75 0 010 1.5h-1.5A.75.75 0 013 8zm11 0a.75.75 0 01.75-.75h1.5a.75.75 0 010 1.5h-1.5A.75.75 0 0114 8zm-6.828 2.828a.75.75 0 010 1.061L6.11 12.95a.75.75 0 01-1.06-1.06l1.06-1.06a.75.75 0 011.06 0zm3.594-3.317a.75.75 0 00-1.37.364l-.492 6.861a.75.75 0 001.204.65l1.043-.799.985 3.678a.75.75 0 001.45-.388l-.978-3.646 1.292.204a.75.75 0 00.74-1.16l-3.874-5.764z" clip-rule="evenodd" /></svg>',
items: [
{
name: "Button",
tags: "button btn 🍑",
href: "/components/button/",
},
{
name: "Dropdown",
tags: "dropdown popover menu listbox",
href: "/components/dropdown/",
},
{
name: "Modal",
tags: "dialog modal window popup",
href: "/components/modal/",
},
{
name: "Swap",
tags: "swap transition toggle icon",
href: "/components/swap/",
},
],
},
{
name: "Data display",
icon: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 text-teal-600"><path fill-rule="evenodd" d="M3.25 3A2.25 2.25 0 001 5.25v9.5A2.25 2.25 0 003.25 17h13.5A2.25 2.25 0 0019 14.75v-9.5A2.25 2.25 0 0016.75 3H3.25zM2.5 9v5.75c0 .414.336.75.75.75h13.5a.75.75 0 00.75-.75V9h-15zM4 5.25a.75.75 0 00-.75.75v.01c0 .414.336.75.75.75h.01a.75.75 0 00.75-.75V6a.75.75 0 00-.75-.75H4zM6.25 6A.75.75 0 017 5.25h.01a.75.75 0 01.75.75v.01a.75.75 0 01-.75.75H7a.75.75 0 01-.75-.75V6zM10 5.25a.75.75 0 00-.75.75v.01c0 .414.336.75.75.75h.01a.75.75 0 00.75-.75V6a.75.75 0 00-.75-.75H10z" clip-rule="evenodd" /></svg>',
items: [
{
name: "Accordion",
tags: "accordion disclosure collapse show hide faq",
href: "/components/accordion/",
},
{
name: "Alert",
tags: "alert warning error message",
href: "/components/alert/",
},
{
name: "Avatar",
tags: "avatar image profile picture",
href: "/components/avatar/",
},
{
name: "Badge",
tags: "badge tag label",
href: "/components/badge/",
},
{
name: "Card",
tags: "card",
href: "/components/card/",
},
{
name: "Carousel",
tags: "carousel slider image",
href: "/components/carousel/",
},
{
name: "Chat bubble",
tags: "chat bubble dialog message messenger",
href: "/components/chat/",
},
{
name: "Collapse",
tags: "collapse disclosure accordion show hide",
href: "/components/collapse/",
},
{
name: "Countdown",
tags: "countdown counter timer",
href: "/components/countdown/",
},
{
name: "Kbd",
tags: "kbd keyboard ⌨️",
href: "/components/kbd/",
},
{
name: "Loading",
tags: "loading loader spinner progress",
href: "/components/loading/",
},
{
name: "Progress",
tags: "progressbar progress loading percentage",
href: "/components/progress/",
},
{
name: "Radial progress",
tags: "progressbar progress loading percentage",
href: "/components/radial-progress/",
},
{
name: "Stat",
tags: "stats data",
href: "/components/stat/",
},
{
name: "Table",
tags: "table",
href: "/components/table/",
},
{
name: "Tooltip",
tags: "tooltip",
href: "/components/tooltip/",
},
],
},
{
name: "Data input",
icon: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 text-rose-600"><path d="M5.433 13.917l1.262-3.155A4 4 0 017.58 9.42l6.92-6.918a2.121 2.121 0 013 3l-6.92 6.918c-.383.383-.84.685-1.343.886l-3.154 1.262a.5.5 0 01-.65-.65z" /><path d="M3.5 5.75c0-.69.56-1.25 1.25-1.25H10A.75.75 0 0010 3H4.75A2.75 2.75 0 002 5.75v9.5A2.75 2.75 0 004.75 18h9.5A2.75 2.75 0 0017 15.25V10a.75.75 0 00-1.5 0v5.25c0 .69-.56 1.25-1.25 1.25h-9.5c-.69 0-1.25-.56-1.25-1.25v-9.5z" /></svg>',
items: [
{
name: "Checkbox",
tags: "checkbox ✅",
href: "/components/checkbox/",
},
{
name: "File Input",
tags: "file upload",
href: "/components/file-input/",
},
{
name: "Radio",
tags: "radio",
href: "/components/radio/",
},
{
name: "Range",
tags: "range slider",
href: "/components/range/",
},
{
name: "Rating",
tags: "star rating radio",
href: "/components/rating/",
},
{
name: "Select",
tags: "select option menu",
href: "/components/select/",
},
{
name: "Text input",
tags: "text input",
href: "/components/input/",
},
{
name: "Textarea",
tags: "textarea",
href: "/components/textarea/",
},
{
name: "Toggle",
tags: "toggle switch checkbox",
href: "/components/toggle/",
},
],
},
{
name: "Layout",
icon: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 text-blue-600"><path fill-rule="evenodd" d="M4.25 2A2.25 2.25 0 002 4.25v2.5A2.25 2.25 0 004.25 9h2.5A2.25 2.25 0 009 6.75v-2.5A2.25 2.25 0 006.75 2h-2.5zm0 9A2.25 2.25 0 002 13.25v2.5A2.25 2.25 0 004.25 18h2.5A2.25 2.25 0 009 15.75v-2.5A2.25 2.25 0 006.75 11h-2.5zm9-9A2.25 2.25 0 0011 4.25v2.5A2.25 2.25 0 0013.25 9h2.5A2.25 2.25 0 0018 6.75v-2.5A2.25 2.25 0 0015.75 2h-2.5zm0 9A2.25 2.25 0 0011 13.25v2.5A2.25 2.25 0 0013.25 18h2.5A2.25 2.25 0 0018 15.75v-2.5A2.25 2.25 0 0015.75 11h-2.5z" clip-rule="evenodd" /></svg>',
items: [
{
name: "Artboard",
tags: "artboard mobile",
href: "/components/artboard/",
},
{
name: "Button group",
tags: "button group",
href: "/components/button-group/",
deprecated: true,
},
{
name: "Divider",
tags: "divider",
href: "/components/divider/",
},
{
name: "Drawer",
tags: "drawer sidebar menu",
href: "/components/drawer/",
},
{
name: "Footer",
tags: "footer 🦶",
href: "/components/footer/",
},
{
name: "Hero",
tags: "hero title",
href: "/components/hero/",
},
{
name: "Indicator",
tags: "indicator badge corner",
href: "/components/indicator/",
},
{
name: "Input group",
tags: "input group label",
href: "/components/input-group/",
deprecated: true,
},
{
name: "Join (group items)",
tags: "join group button group input group form group",
href: "/components/join/",
},
{
name: "Mask",
tags: "mask crop 😷",
href: "/components/mask/",
},
{
name: "Stack",
tags: "stack",
href: "/components/stack/",
},
{
name: "Toast",
tags: "toast notification snackbar",
href: "/components/toast/",
},
],
},
{
name: "Navigation",
icon: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 text-cyan-600"><path d="M12.232 4.232a2.5 2.5 0 013.536 3.536l-1.225 1.224a.75.75 0 001.061 1.06l1.224-1.224a4 4 0 00-5.656-5.656l-3 3a4 4 0 00.225 5.865.75.75 0 00.977-1.138 2.5 2.5 0 01-.142-3.667l3-3z" /><path d="M11.603 7.963a.75.75 0 00-.977 1.138 2.5 2.5 0 01.142 3.667l-3 3a2.5 2.5 0 01-3.536-3.536l1.225-1.224a.75.75 0 00-1.061-1.06l-1.224 1.224a4 4 0 105.656 5.656l3-3a4 4 0 00-.225-5.865z" /></svg>',
items: [
{
name: "Breadcrumbs",
tags: "breadcrumbs links",
href: "/components/breadcrumbs/",
},
{
name: "Bottom navigation",
tags: "bottom navigation app bar",
href: "/components/bottom-navigation/",
},
{
name: "Link",
tags: "link href anchor 🔗",
href: "/components/link/",
},
{
name: "Menu",
tags: "menu list",
href: "/components/menu/",
},
{
name: "Navbar",
tags: "navbar navigation menu",
href: "/components/navbar/",
},
{
name: "Pagination",
tags: "pagination links next previous",
href: "/components/pagination/",
},
{
name: "Steps",
tags: "steps progress",
href: "/components/steps/",
},
{
name: "Tab",
tags: "tabs",
href: "/components/tab/",
},
],
},
{
name: "Mockup",
icon: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 text-lime-600"><path d="M8 16.25a.75.75 0 01.75-.75h2.5a.75.75 0 010 1.5h-2.5a.75.75 0 01-.75-.75z" /><path fill-rule="evenodd" d="M4 4a3 3 0 013-3h6a3 3 0 013 3v12a3 3 0 01-3 3H7a3 3 0 01-3-3V4zm4-1.5v.75c0 .414.336.75.75.75h2.5a.75.75 0 00.75-.75V2.5h1A1.5 1.5 0 0114.5 4v12a1.5 1.5 0 01-1.5 1.5H7A1.5 1.5 0 015.5 16V4A1.5 1.5 0 017 2.5h1z" clip-rule="evenodd" /></svg>',
items: [
{
name: "Browser",
tags: "mockup browser",
href: "/components/mockup-browser/",
},
{
name: "Code",
tags: "mockup code",
href: "/components/mockup-code/",
},
{
name: "Phone",
tags: "mockup iphone 📱",
href: "/components/mockup-phone/",
},
{
name: "Window",
tags: "mockup window 🪟",
href: "/components/mockup-window/",
},
],
},
{
name: "excluded",
items: [
{
name: "CodePen example page",
tags: "codepen",
href: "/codepen/",
},
{
name: "Tailwind Play example page",
tags: "tailwind play",
href: "/tailwindplay/",
},
],
},
]

View File

@ -0,0 +1,82 @@
export const articles = [
{
title: "daisyUI: Tailwind CSS components for reducing markup",
site: "Logrocket",
link: "https://blog.logrocket.com/daisyui-tailwind-components-react-apps/",
},
{
title: "Build a Personal Timeline with Hygraph and SvelteKit",
site: "GraphCMS",
link: "https://graphcms.com/blog/build-a-personal-timeline-with-graphcms-and-sveltekit",
},
{
title: "Weekly Web Development Resources #85",
site: "wweb.dev",
link: "https://wweb.dev/weekly/85/",
},
{
title: "DaisyUI - Tailwind components",
site: "flaming.codes",
link: "https://flaming.codes/posts/boostrap-tailwind-alternative-with-daisy-ui",
},
{
title: "How to Setup React Typescript With Snowpack and Daisy UI",
site: "rockyourcode",
link: "https://www.rockyourcode.com/how-to-setup-react-typescript-with-snowpack-and-daisyui/",
},
{
title: "DaisyUI : un plugin gratuit avec de nombreux composants pour Tailwind CSS",
site: "Siecle Digital",
link: "https://siecledigital.fr/2021/05/29/daisyui-plugin-gratuit-avec-composants-tailwind-css-a/",
},
{
title: "Weekly News for Designers № 594",
site: "speckyboy",
link: "https://speckyboy.com/weekly-news-for-designers-594/",
},
{
title: "DaisyUI — Free UI components plugin for Tailwind CSS",
site: "dailydev",
link: "https://app.daily.dev/posts/-4OPGw0te",
},
{
title: "JSレスBootstrapなdaisyUIの秘密",
site: "Future Tech Blog",
link: "https://future-architect.github.io/articles/20211124a/",
},
{
title: "Adding Tailwind and Daisy UI to SvelteKit",
site: "Adding Tailwind and Daisy UI to SvelteKit",
link: "https://dev.to/brewhousedigital/adding-tailwind-and-daisy-ui-to-sveltekit-2hk5",
},
{
title: "Building React Components With DaisyUI",
site: "Open Replay",
link: "https://blog.openreplay.com/building-react-components-with-daisyui/",
},
{
title: "How to Install DaisyUI in Tailwind CSS",
site: "Larainfo",
link: "https://larainfo.com/blogs/how-to-install-daisyui-in-tailwind-css",
},
{
title: "DaisyUI - Make Tailwind components with ease!",
site: "James Perkins",
link: "https://www.jamesperkins.dev/post/daisyui-make-tailwind-components-with-ease/",
},
{
title: "DaisyUI - Free Vue UI Components for Tailwind CSS",
site: "Morioh",
link: "https://morioh.com/a/350ca835203f/daisyui-free-vue-ui-components-for-tailwind-css",
},
{
title: "Daisy UI 3.0 Released: New components, themes, improvements, and more!",
site: "SHOWWCASE",
link: "https://www.showwcase.com/show/35362/daisy-ui-30-released-new-components-themes-improvements-and-more",
},
{
title: "How to install daisyUI in Laravel Vite",
site: "Medium",
link: "https://balajidharma.medium.com/how-to-install-daisyui-in-laravel-vite-29f606883ff6",
},
]

View File

@ -0,0 +1,42 @@
export const courses = [
{
title: "Tailwind + DaisyUI",
site: "Fireship.io",
link: "https://fireship.io/courses/sveltekit/setup-tailwind/",
},
{
title: "Building with SvelteKit and GraphCMS - Styling with Tailwind and DaisyUI",
site: "Netlify",
link: "https://explorers.netlify.com/learn/building-with-sveltekit-and-graphcms/styling-with-tailwind-and-daisyui",
},
{
title: "Svelte for Beginners by Mike Karan",
site: "Udemy",
link: "https://www.udemy.com/course/svelte-for-beginners/",
},
{
title: "React Front To Back 2022 by Brad Traversy",
site: "Udemy",
link: "https://www.udemy.com/course/react-front-to-back-2022/",
},
{
title: "Build Instagram profile page UI clone w/Next.js TailwindCSS",
site: "Udemy",
link: "https://www.udemy.com/course/build-instagram-profile-page-ui-clone-nextjs-tailwindcss/",
},
{
title: "Instagram UI Clone Login Page w/ NextJS & TailwindCSS",
site: "Udemy",
link: "https://www.udemy.com/course/instagram-ui-clone-login-page-w-nextjs-tailwindcss/",
},
{
title: "Build your Developer Portfolio and Blog from Scratch with Svelte and GraphCMS",
site: "freeCodeCamp",
link: "https://www.freecodecamp.org/news/build-your-developer-portfolio-from-scratch-with-sveltekit-and-graphcms/",
},
{
title: "Building a React Admin Panel with refine and daisyUI",
site: "Refine.dev",
link: "https://refine.dev/blog/daisy-ui-react-admin-panel/",
},
]

View File

@ -0,0 +1,127 @@
export const exampleRepos = [
{
name: "Next.js",
href: "https://stackblitz.com/edit/daisyui-nextjs/",
logos: ["/logos/nextjs.svg"],
},
{
name: "SvelteKit",
href: "https://stackblitz.com/edit/daisyui-sveltekit/",
logos: ["/logos/svelte.svg"],
},
{
name: "Nuxt 3",
href: "https://stackblitz.com/edit/daisyui-nuxt3/",
logos: ["/logos/nuxtjs.svg"],
},
{
name: "Astro",
href: "https://stackblitz.com/edit/daisyui-astro/",
logos: ["/logos/astro.svg"],
},
{
name: "Vue.js 3",
href: "https://stackblitz.com/edit/daisyui-vue-vite/",
logos: ["/logos/vue.svg"],
},
{
name: "Solid.js",
href: "https://stackblitz.com/edit/daisyui-solidjs/",
logos: ["/logos/solidjs.svg", "/logos/vite.svg"],
},
{
name: "Vite",
href: "https://stackblitz.com/edit/daisyui-vite/",
logos: ["/logos/vite.svg"],
},
{
name: "React (Vite)",
href: "https://stackblitz.com/edit/daisyui-react-vite/",
logos: ["/logos/react.svg", "/logos/vite.svg"],
},
{
name: "Svelte (Vite)",
href: "https://stackblitz.com/edit/daisyui-svelte-vite/",
logos: ["/logos/svelte.svg", "/logos/vite.svg"],
},
{
name: "Remix",
href: "https://stackblitz.com/edit/daisyui-remix/",
logos: ["/logos/remix.svg"],
},
{
name: "Refine",
href: "https://stackblitz.com/edit/daisyui-refine/",
logos: ["/logos/refine.svg", "/logos/vite.svg"],
},
{
name: "PostCSS",
href: "https://stackblitz.com/edit/daisyui-postcss/",
logos: ["/logos/postcss.svg"],
},
{
name: "React (Webpack)",
href: "https://stackblitz.com/edit/daisyui-react-webpack/",
logos: ["/logos/react.svg", "/logos/webpack.svg"],
},
{
name: "Qwik",
href: "https://stackblitz.com/edit/daisyui-qwik/",
logos: ["/logos/qwik.svg", "/logos/vite.svg"],
},
{
name: "Preact",
href: "https://stackblitz.com/edit/daisyui-preact-vite/",
logos: ["/logos/preact.svg", "/logos/vite.svg"],
},
{
name: "Lit",
href: "https://stackblitz.com/edit/daisyui-lit-vite/",
logos: ["/logos/lit.svg", "/logos/vite.svg"],
},
{
name: "Angular",
href: "https://stackblitz.com/edit/daisyui-angular/",
logos: ["/logos/angular.svg"],
},
{
name: "11ty",
href: "https://stackblitz.com/edit/daisyui-11ty/",
logos: ["/logos/11ty.svg"],
},
{
name: "Snowpack",
href: "https://stackblitz.com/edit/daisyui-snowpack/",
logos: ["/logos/snowpack.svg"],
},
{
name: "React (CRA)",
href: "https://stackblitz.com/edit/daisyui-react-cra/",
logos: ["/logos/react.svg", "/logos/cra.svg"],
},
{
name: "Elm",
href: "https://stackblitz.com/edit/elm-daisyui/",
logos: ["/logos/elm.svg", "/logos/vite.svg"],
},
{
name: "CDN (Tailwind)",
href: "https://stackblitz.com/edit/daisyui-cdn/",
logos: ["/logos/jsdelivr.svg"],
},
{
name: "CDN (BassCSS)",
href: "https://stackblitz.com/edit/daisyui-basscss/",
logos: ["/logos/jsdelivr.svg"],
},
{
name: "CDN (Tachyons)",
href: "https://stackblitz.com/edit/daisyui-tachyons/",
logos: ["/logos/jsdelivr.svg"],
},
{
name: "WordPress (Gust)",
href: "https://wordpress.org/plugins/gust-daisy-ui",
logos: ["/logos/wordpress.svg", "/logos/gust.svg"],
},
]

View File

@ -0,0 +1,448 @@
export const pagesThatDontNeedSidebar = ["/", "/blog/", "/blog/*/", "/store/", "/resources/*/"]
export const pages = [
{
name: "Docs",
icon: '<svg width="18" height="18" viewBox="0 0 48 48" class="text-orange-400 h-5 w-5" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M5 7H16C20.4183 7 24 10.5817 24 15V42C24 38.6863 21.3137 36 18 36H5V7Z" fill="none" stroke="currentColor" stroke-width="4" stroke-linejoin="bevel"/><path d="M43 7H32C27.5817 7 24 10.5817 24 15V42C24 38.6863 26.6863 36 30 36H43V7Z" fill="none" stroke="currentColor" stroke-width="4" stroke-linejoin="bevel"/></svg>',
collapsible: true,
items: [
{
name: "Install",
tags: "how setup install npm",
href: "/docs/install/",
highlightAnotherItem: "/docs/cdn",
},
{
name: "Use",
tags: "how use",
href: "/docs/use/",
},
{
name: "Customize components",
tags: "customize components",
href: "/docs/customize/",
},
{
name: "Config",
tags: "setup config styled themes base logs utils rtl",
href: "/docs/config/",
badge: "updated",
},
{
name: "Colors",
tags: "colors 🎨",
href: "/docs/colors/",
badge: "updated",
},
{
name: "Themes",
tags: "themes disable custom color generator",
href: "/docs/themes/",
},
{
name: "Utilities",
tags: "Utilities utility class",
href: "/docs/utilities/",
badge: "new",
},
{
name: "Layout & Typography",
tags: "layout typography padding margin grid flex spacing font",
href: "/docs/layout-and-typography/",
},
],
},
{
name: "Components",
icon: '<svg class="w-5 h-5 text-green-600" width="18" height="18" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M20 29H6V43H20V29Z" fill="none" stroke="currentColor" stroke-width="4" stroke-linecap="butt" stroke-linejoin="bevel"/><path d="M24 4L34 21H14L24 4Z" fill="none" stroke="currentColor" stroke-width="4" stroke-linecap="butt" stroke-linejoin="bevel"/><path d="M36 44C40.4183 44 44 40.4183 44 36C44 31.5817 40.4183 28 36 28C31.5817 28 28 31.5817 28 36C28 40.4183 31.5817 44 36 44Z" fill="none" stroke="currentColor" stroke-width="4" stroke-linecap="butt" stroke-linejoin="bevel"/></svg>',
collapsible: true,
items: [
{
name: "Actions",
icon: '<svg width="18" height="18" viewBox="0 0 48 48" fill="none" stroke="currentColor" class="w-5 h-5" xmlns="http://www.w3.org/2000/svg"><path d="M24 4V12" stroke-width="4" stroke-linecap="butt" stroke-linejoin="bevel"/><path fill-rule="evenodd" clip-rule="evenodd" d="M22 22L42 26L36 30L42 36L36 42L30 36L26 42L22 22Z" fill="none" stroke-width="4" stroke-linecap="butt" stroke-linejoin="bevel"/><path d="M38.1421 9.85789L32.4853 15.5147" stroke-width="4" stroke-linecap="butt" stroke-linejoin="bevel"/><path d="M9.85787 38.1421L15.5147 32.4853" stroke-width="4" stroke-linecap="butt" stroke-linejoin="bevel"/><path d="M4 24H12" stroke-width="4" stroke-linecap="butt" stroke-linejoin="bevel"/><path d="M9.85795 9.85787L15.5148 15.5147" stroke-width="4" stroke-linecap="butt" stroke-linejoin="bevel"/></svg>',
items: [
{
name: "Button",
tags: "button btn 🍑",
href: "/components/button/",
badge: "updated",
},
{
name: "Dropdown",
tags: "dropdown popover menu listbox",
href: "/components/dropdown/",
},
{
name: "Modal",
tags: "dialog modal window popup",
href: "/components/modal/",
},
{
name: "Swap",
tags: "swap transition toggle icon",
href: "/components/swap/",
},
{
name: "Theme Controller",
tags: "theme controller change dark mode",
href: "/components/theme-controller/",
badge: "new",
},
],
},
{
name: "Data display",
icon: '<svg width="18" height="18" viewBox="0 0 48 48" class="w-5 h-5" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="4" y="8" width="40" height="32" rx="3" stroke="currentColor" stroke-width="4" stroke-linejoin="bevel"/><path d="M4 11C4 9.34315 5.34315 8 7 8H41C42.6569 8 44 9.34315 44 11V20H4V11Z" fill="none" stroke="currentColor" stroke-width="4"/><circle r="2" transform="matrix(-1.31134e-07 -1 -1 1.31134e-07 10 14)" fill="currentColor"/><circle r="2" transform="matrix(-1.31134e-07 -1 -1 1.31134e-07 16 14)" fill="currentColor"/></svg>',
items: [
{
name: "Accordion",
tags: "accordion disclosure collapse show hide faq",
href: "/components/accordion/",
},
{
name: "Avatar",
tags: "avatar image profile picture",
href: "/components/avatar/",
},
{
name: "Badge",
tags: "badge tag label",
href: "/components/badge/",
},
{
name: "Card",
tags: "card",
href: "/components/card/",
},
{
name: "Carousel",
tags: "carousel slider image",
href: "/components/carousel/",
},
{
name: "Chat bubble",
tags: "chat bubble dialog message messenger",
href: "/components/chat/",
},
{
name: "Collapse",
tags: "collapse disclosure accordion show hide",
href: "/components/collapse/",
},
{
name: "Countdown",
tags: "countdown counter timer",
href: "/components/countdown/",
},
{
name: "Diff",
tags: "diff compare comparison image slider",
href: "/components/diff/",
badge: "new",
},
{
name: "Kbd",
tags: "kbd keyboard ⌨️",
href: "/components/kbd/",
},
{
name: "Stat",
tags: "stats data",
href: "/components/stat/",
},
{
name: "Table",
tags: "table",
href: "/components/table/",
},
{
name: "Timeline",
tags: "timeline",
href: "/components/timeline/",
badge: "new",
},
],
},
{
name: "Navigation",
icon: '<svg width="18" height="18" viewBox="0 0 48 48" class="h-5 w-5" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M30 19H20C15.5817 19 12 22.5817 12 27C12 31.4183 15.5817 35 20 35H36C40.4183 35 44 31.4183 44 27C44 24.9711 43.2447 23.1186 42 21.7084" stroke="currentColor" stroke-width="4" stroke-linecap="butt" stroke-linejoin="bevel"/><path d="M6 24.2916C4.75527 22.8814 4 21.0289 4 19C4 14.5817 7.58172 11 12 11H28C32.4183 11 36 14.5817 36 19C36 23.4183 32.4183 27 28 27H18" stroke="currentColor" stroke-width="4" stroke-linecap="butt" stroke-linejoin="bevel"/></svg>',
items: [
{
name: "Breadcrumbs",
tags: "breadcrumbs links",
href: "/components/breadcrumbs/",
},
{
name: "Bottom navigation",
tags: "bottom navigation app bar",
href: "/components/bottom-navigation/",
},
{
name: "Link",
tags: "link href anchor 🔗",
href: "/components/link/",
},
{
name: "Menu",
tags: "menu list",
href: "/components/menu/",
},
{
name: "Navbar",
tags: "navbar navigation menu",
href: "/components/navbar/",
},
{
name: "Pagination",
tags: "pagination links next previous",
href: "/components/pagination/",
},
{
name: "Steps",
tags: "steps progress",
href: "/components/steps/",
},
{
name: "Tab",
tags: "tabs",
href: "/components/tab/",
badge: "updated",
},
],
},
{
name: "Feedback",
icon: '<svg width="18" height="18" class="w-5 h-5" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4 6H44V36H29L24 41L19 36H4V6Z" fill="none" stroke="currentColor" stroke-width="4" stroke-linecap="butt" stroke-linejoin="bevel"/><path d="M23 21H25.0025" stroke="currentColor" stroke-width="4" stroke-linecap="butt"/><path d="M33.001 21H34.9999" stroke="currentColor" stroke-width="4" stroke-linecap="butt"/><path d="M13.001 21H14.9999" stroke="currentColor" stroke-width="4" stroke-linecap="butt"/></svg>',
items: [
{
name: "Alert",
tags: "alert warning error message",
href: "/components/alert/",
},
{
name: "Loading",
tags: "loading loader spinner progress",
href: "/components/loading/",
},
{
name: "Progress",
tags: "progressbar progress loading percentage",
href: "/components/progress/",
},
{
name: "Radial progress",
tags: "progressbar progress loading percentage",
href: "/components/radial-progress/",
},
{
name: "Skeleton",
tags: "skeleton loading placeholder",
href: "/components/skeleton/",
badge: "new",
},
{
name: "Toast",
tags: "toast notification snackbar",
href: "/components/toast/",
},
{
name: "Tooltip",
tags: "tooltip",
href: "/components/tooltip/",
},
],
},
{
name: "Data input",
icon: '<svg width="18" height="18" viewBox="0 0 48 48" class="w-5 h-5" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M7 42H43" stroke="currentColor" stroke-width="4" stroke-linecap="butt" stroke-linejoin="bevel"/><path d="M11 26.7199V34H18.3172L39 13.3081L31.6951 6L11 26.7199Z" fill="none" stroke="currentColor" stroke-width="4" stroke-linejoin="bevel"/></svg>',
items: [
{
name: "Checkbox",
tags: "checkbox ✅",
href: "/components/checkbox/",
},
{
name: "File Input",
tags: "file upload",
href: "/components/file-input/",
},
{
name: "Radio",
tags: "radio",
href: "/components/radio/",
},
{
name: "Range",
tags: "range slider",
href: "/components/range/",
},
{
name: "Rating",
tags: "star rating radio",
href: "/components/rating/",
},
{
name: "Select",
tags: "select option menu",
href: "/components/select/",
},
{
name: "Text input",
tags: "text input",
href: "/components/input/",
},
{
name: "Textarea",
tags: "textarea",
href: "/components/textarea/",
},
{
name: "Toggle",
tags: "toggle switch checkbox",
href: "/components/toggle/",
},
],
},
{
name: "Layout",
icon: '<svg width="18" height="18" class="w-5 h-5" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="6" y="6" width="36" height="36" rx="3" fill="none" stroke="currentColor" stroke-width="4" stroke-linejoin="bevel"/><path d="M6 22L42 22" stroke="currentColor" stroke-width="4" stroke-linecap="butt" stroke-linejoin="bevel"/><path d="M29 22V6" stroke="currentColor" stroke-width="4" stroke-linecap="butt" stroke-linejoin="bevel"/><path d="M26 6H32" stroke="currentColor" stroke-width="4" stroke-linecap="butt" stroke-linejoin="bevel"/><path d="M6 19V25" stroke="currentColor" stroke-width="4" stroke-linecap="butt" stroke-linejoin="bevel"/><path d="M42 19V25" stroke="currentColor" stroke-width="4" stroke-linecap="butt" stroke-linejoin="bevel"/></svg>',
items: [
{
name: "Artboard",
tags: "artboard mobile",
href: "/components/artboard/",
},
{
name: "Divider",
tags: "divider",
href: "/components/divider/",
badge: "updated",
},
{
name: "Drawer",
tags: "drawer sidebar menu",
href: "/components/drawer/",
},
{
name: "Footer",
tags: "footer 🦶",
href: "/components/footer/",
},
{
name: "Hero",
tags: "hero title",
href: "/components/hero/",
},
{
name: "Indicator",
tags: "indicator badge corner",
href: "/components/indicator/",
},
{
name: "Join (group items)",
tags: "join group button group input group form group",
href: "/components/join/",
},
{
name: "Mask",
tags: "mask crop 😷",
href: "/components/mask/",
},
{
name: "Stack",
tags: "stack",
href: "/components/stack/",
},
],
},
{
name: "Mockup",
icon: '<svg width="18" height="18" viewBox="0 0 48 48" class="w-5 h-5" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 30H40V42C40 43.1046 39.1046 44 38 44H10C8.89543 44 8 43.1046 8 42V30Z" fill="none" stroke="currentColor" stroke-width="4" stroke-linejoin="bevel"/><path d="M40 30V6C40 4.89543 39.1046 4 38 4H10C8.89543 4 8 4.89543 8 6V30" stroke="currentColor" stroke-width="4" stroke-linejoin="bevel"/><path d="M22 37H26" stroke="currentColor" stroke-width="4" stroke-linecap="butt"/></svg>',
items: [
{
name: "Browser",
tags: "mockup browser",
href: "/components/mockup-browser/",
},
{
name: "Code",
tags: "mockup code",
href: "/components/mockup-code/",
},
{
name: "Phone",
tags: "mockup iphone 📱",
href: "/components/mockup-phone/",
},
{
name: "Window",
tags: "mockup window 🪟",
href: "/components/mockup-window/",
},
],
},
],
},
{
name: "Theme Generator",
tags: "theme generator custom color generator",
href: "/theme-generator/",
icon: '<svg class="h-5 w-5 text-fuchsia-400" width="18" height="18" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M20.1005 8.1005L24.3431 12.3431M30 4V10V4ZM39.8995 8.1005L35.6569 12.3431L39.8995 8.1005ZM44 18H38H44ZM39.8995 27.8995L35.6569 23.6569L39.8995 27.8995ZM30 32V26V32ZM20.1005 27.8995L24.3431 23.6569L20.1005 27.8995ZM16 18H22H16Z" stroke="currentColor" stroke-width="4" stroke-linecap="butt" stroke-linejoin="bevel"/><path d="M29.5856 18.4143L5.54395 42.4559" stroke="currentColor" stroke-width="4" stroke-linecap="butt" stroke-linejoin="bevel"/></svg>',
},
{},
{
name: "Store",
tags: "store template dashboard",
href: "/store/",
icon: '<svg class="h-5 w-5" width="18" height="18" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M40.0391 22V42H8.03906V22" stroke="currentColor" stroke-width="4" stroke-linecap="butt" stroke-linejoin="bevel"/><path d="M5.84231 13.7766C4.31276 17.7377 7.26307 22 11.5092 22C14.8229 22 17.5276 19.3137 17.5276 16C17.5276 19.3137 20.2139 22 23.5276 22H24.546C27.8597 22 30.546 19.3137 30.546 16C30.546 19.3137 33.2518 22 36.5655 22C40.8139 22 43.767 17.7352 42.2362 13.7723L39.2337 6H8.84523L5.84231 13.7766Z" fill="none" stroke="currentColor" stroke-width="4" stroke-linejoin="bevel"/></svg>',
badge: "new",
},
{
name: "Blog",
tags: "blog tutorial news",
href: "/blog/",
icon: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5"><path d="M3.75 3a.75.75 0 00-.75.75v.5c0 .414.336.75.75.75H4c6.075 0 11 4.925 11 11v.25c0 .414.336.75.75.75h.5a.75.75 0 00.75-.75V16C17 8.82 11.18 3 4 3h-.25z" /><path d="M3 8.75A.75.75 0 013.75 8H4a8 8 0 018 8v.25a.75.75 0 01-.75.75h-.5a.75.75 0 01-.75-.75V16a6 6 0 00-6-6h-.25A.75.75 0 013 9.25v-.5zM7 15a2 2 0 11-4 0 2 2 0 014 0z" /></svg>',
},
{
name: "Resources",
tags: "resources",
href: "/resources/videos/",
icon: '<svg width="18" height="18" viewBox="0 0 48 48" class="w-5 h-5" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="none" stroke="currentColor" stroke-width="4" stroke-linejoin="bevel"/><path d="M20 24V17.0718L26 20.5359L32 24L26 27.4641L20 30.9282V24Z" fill="none" stroke="currentColor" stroke-width="4" stroke-linejoin="bevel"/></svg>',
},
{},
{
name: "Playground",
tags: "playground tailwind play",
href: "/tailwindplay/",
icon: '<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 54 33"><g clip-path="url(#prefix__clip0)"><path fill="currentColor" fill-rule="evenodd" d="M27 0c-7.2 0-11.7 3.6-13.5 10.8 2.7-3.6 5.85-4.95 9.45-4.05 2.054.513 3.522 2.004 5.147 3.653C30.744 13.09 33.808 16.2 40.5 16.2c7.2 0 11.7-3.6 13.5-10.8-2.7 3.6-5.85 4.95-9.45 4.05-2.054-.513-3.522-2.004-5.147-3.653C36.756 3.11 33.692 0 27 0zM13.5 16.2C6.3 16.2 1.8 19.8 0 27c2.7-3.6 5.85-4.95 9.45-4.05 2.054.514 3.522 2.004 5.147 3.653C17.244 29.29 20.308 32.4 27 32.4c7.2 0 11.7-3.6 13.5-10.8-2.7 3.6-5.85 4.95-9.45 4.05-2.054-.513-3.522-2.004-5.147-3.653C23.256 19.31 20.192 16.2 13.5 16.2z" clip-rule="evenodd"/></g><defs><clipPath id="prefix__clip0"><path fill="#fff" d="M0 0h54v32.4H0z"/></clipPath></defs></svg>',
target: "blank",
},
{
name: "GitHub",
tags: "github",
href: "https://github.com/saadeghi/daisyui",
icon: '<svg width="18" height="18" class="h-5 w-5" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M29.3444 30.4765C31.7481 29.977 33.9292 29.1108 35.6247 27.8391C38.5202 25.6676 40 22.3136 40 18.9999C40 16.6752 39.1187 14.505 37.5929 12.6668C36.7427 11.6425 39.2295 3.99989 37.02 5.02919C34.8105 6.05848 31.5708 8.33679 29.8726 7.83398C28.0545 7.29565 26.0733 6.99989 24 6.99989C22.1992 6.99989 20.4679 7.22301 18.8526 7.6344C16.5046 8.23237 14.2591 5.99989 12 5.02919C9.74086 4.05848 10.9736 11.9632 10.3026 12.7944C8.84119 14.6051 8 16.7288 8 18.9999C8 22.3136 9.79086 25.6676 12.6863 27.8391C14.6151 29.2857 17.034 30.2076 19.7401 30.6619" stroke="currentColor" stroke-width="4" stroke-linecap="butt"/><path d="M19.7397 30.6619C18.5812 31.937 18.002 33.1478 18.002 34.2944C18.002 35.441 18.002 38.3464 18.002 43.0106" stroke="currentColor" stroke-width="4" stroke-linecap="butt"/><path d="M29.3446 30.4766C30.4423 31.9174 30.9912 33.211 30.9912 34.3576C30.9912 35.5042 30.9912 38.3885 30.9912 43.0107" stroke="currentColor" stroke-width="4" stroke-linecap="butt"/><path d="M6 31.2155C6.89887 31.3254 7.56554 31.7387 8 32.4554C8.65169 33.5303 11.0742 37.518 13.8251 37.518C15.6591 37.518 17.0515 37.518 18.0024 37.518" stroke="currentColor" stroke-width="4" stroke-linecap="butt"/></svg>',
target: "blank",
},
{
name: "Support daisyUI",
tags: "support",
href: "https://opencollective.com/daisyui",
icon: '<svg width="18" class="h-5 w-5" height="18" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M15 8C8.92487 8 4 12.9249 4 19C4 30 17 40 24 42.3262C31 40 44 30 44 19C44 12.9249 39.0751 8 33 8C29.2797 8 25.9907 9.8469 24 12.6738C22.0093 9.8469 18.7203 8 15 8Z" fill="none" stroke="currentColor" stroke-width="4" stroke-linecap="butt" stroke-linejoin="bevel"/></svg>',
target: "blank",
},
{
items: [
{
name: "CodePen example page",
tags: "codepen",
href: "/codepen/",
},
{
name: "CDN",
tags: "how cdn",
href: "/docs/cdn/",
},
],
},
]

View File

@ -0,0 +1,366 @@
export const roadmap = [
{
title: "daisyUI 2",
done: true,
items: [
{
title: "New component: Chat",
done: true,
},
{
title: "New component: toast",
done: true,
},
{
title: "New component: radial-progress",
done: true,
},
{
title: "New component: swap",
done: true,
},
{
title: "New component: input-group",
done: true,
},
{
title: "New component: bottom-navigation",
done: true,
},
{
title: "New color names: info-content, success-content, warning-content, error-content",
done: true,
},
{
title:
"Add support for RGB, HSL, etc. color formats for daisyUI themes in tailiwnd.config.js",
done: true,
},
{
title: "New responsive modifier classes for modal",
done: true,
},
{
title: "New responsive modifiers for stats",
done: true,
},
{
title: "New responsive modifiers for divider",
done: true,
},
{
title: "New rating-half modifier for rating component to show half stars",
done: true,
},
{
title: "New modifiers for mask component: mask-half-1, mask-half-2",
done: true,
},
{
title: "Empty li tag in a menu now shows a separator line",
done: true,
},
{
title: "New themes: night, cafe, winter, autumn, business, acid, lemonade",
done: true,
},
{
title: "New 'prefix' config",
done: true,
},
{
title: "New 'darkTheme' config",
done: true,
},
],
},
{
title: "daisyUI 3",
done: true,
items: [
{
title: "New component: Loading",
done: true,
},
{
title: "New component: Accordion",
done: true,
},
{
title: "New component: Join",
done: true,
},
{
title: "New component: browser mockup",
done: true,
},
{
title: "Drawer support for responsive prefixes",
done: true,
},
{
title: "Drawer accessibility for keyboard navigation",
done: true,
},
{
title: "Modal component using dialog element",
done: true,
},
{
title: "Dropdown component using details/summary element",
done: true,
},
{
title: "Tooltip accessibility for keyboard navigation",
done: true,
},
{
title: "New component: btn-neutral variant for button",
done: true,
},
{
title: "menu support for details/summary element",
done: true,
},
{
title: "menu size variants: menu-xs, menu-sm, menu-md, menu-lg",
done: true,
},
{
title: "table size variants: table-xs, table-sm, table-md, table-lg",
done: true,
},
{
title: "table redesing",
done: true,
},
{
title: "collapse support for details/summary element",
done: true,
},
{
title: "New tool: npm init daisyui",
done: true,
},
],
},
{
title: "Docs updates",
done: true,
items: [
{
title: "add Ukrainian translation",
done: true,
},
{
title: "daisyUI blog",
done: true,
},
{
title: "daisyUI newsletter",
done: true,
},
{
title: "Update example repos",
done: true,
},
],
},
{
title: "daisyUI 4",
done: true,
items: [
{
title: "daisyUI uses OKLCH colors now. Unlocking access to 30% more colors than RGB/HSL",
done: true,
},
{
title: "New component: Timeline",
done: true,
},
{
title: "New component: Skeleton",
done: true,
},
{
title: "New component: Diff",
done: true,
},
{
title: "New component: Theme Controller change the page theme without JS",
done: true,
},
{
title: "3 new themes: dim, nord, sunset",
done: true,
},
{
title: "New 'tab-content' class: switch tab content without JS",
done: true,
},
{
title: "Replace all directional styles with CSS logical properties",
done: true,
},
{
title: "RTL support without any extra config or dependencies, using CSS logical properties",
done: true,
},
{
title: "92% less NPM module dependencies",
done: true,
},
{
title: "70% smaller node_modules footprint and install size",
done: true,
},
{
title: "15% smaller CSS file size (CDN)",
done: true,
},
{
title: "Removed RTLCSS, PostCSS, Tailwind CSS dependencies",
done: true,
},
{
title:
"Removed all *-focus color names. Darker colors are now generated using CSS color-mix() under the hood",
done: true,
},
{
title:
"btn-info, btn-success, btn-warning, btn-error now have hover color change just like other buttons",
done: true,
},
{
title:
"Reduce tab class name repetition. Removed tab-lifted, tab-bordered, tab-lg, tab-md, tab-sm, tab-xs modifier classes for 'tab' item. Added tabs-lifted, tabs-bordered, tabs-lg, tabs-md, tabs-sm, tabs-xs classes for the parent 'tabs' class instead.",
done: true,
},
{
title: "Improve improve compatibility with @tailwindcss/forms plugin",
done: true,
},
{
title: "Use Culori package instead of Colord which supports P3 colors",
done: true,
},
{
title: "Add divider color modifiers",
done: true,
},
{
title: "Add divider color position modifiers",
done: true,
},
{
title: "rewrite 'label' component to work best with 'join'",
done: false,
},
],
},
{
title: "Docs updates",
done: false,
items: [
{
title: "daisyUI Resources",
done: true,
},
{
title: "daisyUI store",
done: true,
},
{
title: "Document utiltiy classes",
done: true,
},
{
title: "Document CSS variables",
done: true,
},
{
title: "Docs: add Farsi translation",
done: true,
},
{
title: "Docs: add Arabic translation",
done: false,
},
{
title: "Docs: add German translation",
done: false,
},
{
title: "Docs: add FAQ to the site",
done: false,
},
{
title: "Add 'integrations' pages with tutorials about using third-party JS packages",
done: false,
},
{
title: "Add internal CSS variables in class name tables",
done: false,
},
{
title: "Improve the loading of translation files",
done: false,
},
],
},
{
title: "Upcoming",
done: false,
items: [
{
title: "New component: Banner",
done: false,
},
{
title: "New component: Calendar",
done: false,
},
{
title: "New component: Tag",
done: false,
},
{
title: "New component: Banner",
done: false,
},
{
title: "Support the upcoming Tailwind CSS v4",
done: false,
},
{
title: "Pre-built grid layouts",
done: false,
},
{
title: "New themes",
done: false,
},
{
title: "Animate tab background using CSS grid",
done: false,
},
{
title: "Use popover API when browsers support it",
done: false,
},
{
title: "Use CSS color-contrast() when browsers support it",
done: false,
},
{
title: "Use CSS relative colors when browsers support them",
done: false,
},
{
title: "Use Container queries for responsive components",
done: false,
},
],
},
]

View File

@ -0,0 +1,5 @@
export const stats = {
components: "55",
utilities: "500+",
themes: "32",
}

View File

@ -0,0 +1,34 @@
export const themes = [
"light",
"dark",
"cupcake",
"bumblebee",
"emerald",
"corporate",
"synthwave",
"retro",
"cyberpunk",
"valentine",
"halloween",
"garden",
"forest",
"aqua",
"lofi",
"pastel",
"fantasy",
"wireframe",
"black",
"luxury",
"dracula",
"cmyk",
"autumn",
"business",
"acid",
"lemonade",
"night",
"coffee",
"winter",
"dim",
"nord",
"sunset",
]

View File

@ -0,0 +1,102 @@
export const videoIds = [
"tZbOO97urWs",
"mqe9a7kHUvo",
"mJgNSN5YAMI",
"KLxgQFOCZjQ",
"l4sbqrY0XGk",
"ovPZ_oWRdVU",
"c7UFf1asCRE",
"B-MzDlbxHRw",
"AaiijESQH5o",
"fX3AhKuZnXc",
"I78f5Atoa-Y",
"haKnkk6ds20",
"LHDJCQMEE3M",
"SDK_UKMzgyE",
"th8OswsAq6Q",
"K4ziF0MhbLc",
"9js_4PwapEc",
"jzSL4HsPbZk",
"UAKNwCvFxoU",
"1kON7Q9MBak",
"JN4uI4cNljE",
"KteaV_c4NUQ",
"NWzGJanh3Lg",
"J827X9j0R60",
"Kd6n3B0JRO8",
"8VWAj4CHdOk",
"whvp0nSy6Y4",
"1HzFYpmx_zs",
"XBYvzPe7skc",
"mPQyckogDYc",
"mEBPN_9jTAE",
"Hpjq0D1vcpM",
"zH2qG9YwN3s",
"hM9fENyAquM",
"Wm2g6FWec34",
"uXQgJbUj3PQ",
"5lF5PxBJoso",
"u9jtHBE6NL8",
"XR1rS-CCfx0",
"y7LYoRGRqRI",
"28db3jojTgo",
"37gtpvy-k9U",
"2rXSE_KMZKM",
"1VC8ps7EI18",
"X5_ZQmddfyk",
"RyZbYZAXAa4",
"BkM6INWM1Yo",
"2tXuoNV1-WA",
"XI3rnvhH-Go",
"l04LcLNM390",
"XzUeom623Cs",
"K5QUx6iPyfQ",
"Z-EgUIh27nU",
"uK5fEIiFEAI",
"9XeiyFsfzlE",
"-elV2erzt10",
"6nEcQFnfx8U",
"9AydJ-cg8fU",
"v3QJAdVE-7Q",
"mRvohmjna-o",
"8DQVMcP0ZUY",
"Rn7pnxtHf_c",
"7Wxql6rP-Xg",
"l6NDDv3KcZg",
"kytDBk6UBw4",
"kVdU1e5HPIo",
"2nXsvpk9rd0",
"Z-KSLMRM_jI",
"IQJE2VIeXQk",
"nne_lr711Iw",
"2FZrW2TsRVs",
"ifbQ3S2bWyc",
"HfUDVJoBk7k",
"Z4_4QKyuIkM",
"n_S5IOLdsSk",
"IkmlcZgMeH0",
"ZHBhA5gb4iM",
"HB7f_Mz4x7Y",
"osNYQvn19Zo",
"11CCTx7rkjU",
"jX2cS9pj4hw",
"jlWfXcRUQ3g",
"Fe8MZGoNcJE",
"oGZOrIfRnYQ",
"CDxZ_rHyiP0",
"kclTvXlVh0w",
"1OCN03HHXAQ",
"9quJEOVW9Bk",
"2WQs7Em6dYw",
"qJcUjEsp9aY",
"g2owVghzXzY",
"fIdfxsKWnxQ",
"zJ5bGZA9oWE",
"cJV1G_w39wM",
"yz9_8ehtBu8",
"bwQvPBh3xYU",
"wwsHlo7UkKk",
"Gpm3w7Mib_M",
"sFyUWHH2sVg",
"YPYpPn-bY_o",
]

View File

@ -63,8 +63,14 @@ const replaceStateWithQuery = (values) => {
history.replaceState({}, "", url)
}
export const setLang = (lang) => {
export const setLang = (lang, replaceQuery = true) => {
if (!langs.includes(lang)) {
return null
}
currentLang.set(lang)
replaceStateWithQuery({ lang: lang })
replaceQuery && replaceStateWithQuery({ lang: lang })
localStorage.setItem("lang", lang)
document.documentElement.setAttribute("lang", lang)
// set direction
document.documentElement.setAttribute("dir", translations[`${path}/${lang}.json`]["__direction"])
}

View File

@ -1,6 +1,6 @@
<script>
import { page } from "$app/stores"
import SEO from "@components/SEO.svelte"
import SEO from "$components/SEO.svelte"
import { timeago, formattedDate } from "$lib/util"
export let title, desc, date, author, tags, thumbnail, published
const slug = $page.url.pathname.split("/").at(-2)

View File

@ -1,10 +1,11 @@
<script>
import { page } from "$app/stores"
import Ads from "@components/Ads.svelte"
import ComponentFooter from "@components/ComponentFooter.svelte"
import SEO from "@components/SEO.svelte"
import Sponsors from "@components/Sponsors.svelte"
import { t } from "@src/lib/i18n"
import Ads from "$components/Ads.svelte"
import ComponentFooter from "$components/ComponentFooter.svelte"
import SEO from "$components/SEO.svelte"
import Sponsors from "$components/Sponsors.svelte"
import { t } from "$lib/i18n"
export let data
export let title
export let desc
</script>
@ -23,7 +24,7 @@
<p>{@html $t(desc)}</p>
{/if}
<slot />
<ComponentFooter />
<ComponentFooter pages={data.pages} />
<div class="not-prose flex justify-center xl:hidden">
<Sponsors wrapperClasses="flex-col sm:flex-row" />
</div>

View File

@ -1,10 +1,11 @@
<script>
import { page } from "$app/stores"
import Ads from "@components/Ads.svelte"
import ComponentFooter from "@components/ComponentFooter.svelte"
import SEO from "@components/SEO.svelte"
import Sponsors from "@components/Sponsors.svelte"
import { t } from "@src/lib/i18n"
import Ads from "$components/Ads.svelte"
import ComponentFooter from "$components/ComponentFooter.svelte"
import SEO from "$components/SEO.svelte"
import Sponsors from "$components/Sponsors.svelte"
import { t } from "$lib/i18n"
export let data
export let title
export let desc
</script>
@ -20,7 +21,7 @@
<p>{@html $t(desc)}</p>
{/if}
<slot />
<ComponentFooter />
<ComponentFooter pages={data?.pages} />
<div class="not-prose flex justify-center xl:hidden">
<Sponsors wrapperClasses="flex-col sm:flex-row" />
</div>

View File

@ -1,12 +1,13 @@
import { exec } from "child_process"
const commands = [
"node src/lib/scripts/download-file 'https://api.npmjs.org/downloads/point/1970:2100/daisyui' 'src/lib/json/npm-downloads.json'",
"node src/lib/scripts/download-file 'https://api.github.com/repos/saadeghi/daisyui' 'src/lib/json/github-repo.json'",
"node src/lib/scripts/download-file 'https://api.github.com/repos/saadeghi/daisyui/contributors?page=1&per_page=100' 'src/lib/json/github-contributors-1.json'",
"node src/lib/scripts/download-file 'https://api.github.com/repos/saadeghi/daisyui/contributors?page=2&per_page=100' 'src/lib/json/github-contributors-2.json'",
"node src/lib/scripts/download-file 'https://opencollective.com/daisyui.json' 'src/lib/json/opencollective-info.json'",
"node src/lib/scripts/download-file 'https://opencollective.com/daisyui/members/all.json' 'src/lib/json/opencollective-members.json'",
"node src/lib/scripts/download-file.js 'https://api.npmjs.org/downloads/point/1970:2100/daisyui' 'src/lib/json/npm-downloads.json'",
"node src/lib/scripts/download-file.js 'https://api.github.com/repos/saadeghi/daisyui' 'src/lib/json/github-repo.json'",
"node src/lib/scripts/download-file.js 'https://api.github.com/repos/saadeghi/daisyui/contributors?page=1&per_page=100' 'src/lib/json/github-contributors-1.json'",
"node src/lib/scripts/download-file.js 'https://api.github.com/repos/saadeghi/daisyui/contributors?page=2&per_page=100' 'src/lib/json/github-contributors-2.json'",
"node src/lib/scripts/download-file.js 'https://opencollective.com/daisyui.json' 'src/lib/json/opencollective-info.json'",
"node src/lib/scripts/download-file.js 'https://opencollective.com/daisyui/members/all.json' 'src/lib/json/opencollective-members.json'",
"node --env-file=.env.local src/lib/scripts/get-youtube-resources.js 'src/lib/json/youtube.json'",
]
let number_of_files = 0
const promises = commands.map((command) => {

View File

@ -1,7 +1,6 @@
import https from "https"
import fs from "fs"
import sharp from "sharp"
import { exec } from "child_process"
import { tweets } from "../testimonials.js"
const downloadImage = (url, filename) => {

View File

@ -0,0 +1,86 @@
import https from "https"
import fs from "fs"
import { videoIds } from "../data/youtube.js"
const YOUTUBE_API_KEY = process.env.YOUTUBE_API_KEY
const chunkSize = 50
const apiUrl = `https://www.googleapis.com/youtube/v3/videos?part=snippet&part=status&key=${YOUTUBE_API_KEY}&id=`
const outputFilePath = process.argv[2]
const fallbackData = [
{
id: "ky18YtME8UQ",
snippet: {
title: "daisyUI 3.0",
description: "daisyUI is the most popular component library for Tailwind CSS",
channelTitle: "daisyUI",
thumbnails: {
high: {
url: "https://i.ytimg.com/vi/ky18YtME8UQ/hqdefault.jpg",
},
},
},
status: {
embeddable: true,
},
},
]
// Function to make a request to the API
function makeApiRequest(ids) {
return new Promise((resolve, reject) => {
const url = apiUrl + ids.join(",")
https
.get(url, (res) => {
let data = ""
res.on("data", (chunk) => {
data += chunk
})
res.on("end", () => {
resolve(JSON.parse(data))
})
})
.on("error", (err) => {
reject(err)
})
})
}
// Function to chunk the videoIds array and make API requests
async function processVideoIds(videoIds) {
const results = []
for (let i = 0; i < videoIds.length; i += chunkSize) {
const chunk = videoIds.slice(i, i + chunkSize)
const result = await makeApiRequest(chunk)
// if results has error
if (!result.error) {
results.push(result.items)
}
}
return results
}
// Process the videoIds and save the results as JSON
processVideoIds(videoIds)
.then((results) => {
let combinedResults
combinedResults = [].concat(...results)
if (!combinedResults.length) {
combinedResults = fallbackData
}
fs.writeFile(outputFilePath, JSON.stringify(combinedResults, null, 2), (err) => {
if (err) {
console.error("Error writing to file:", err)
} else {
console.log("Data saved to", outputFilePath)
}
})
})
.catch((error) => {
console.error("Error making API requests:", error)
})

View File

@ -62,7 +62,7 @@
.prose pre[class*="language-"] {
.token.comment {
color: hsl(var(--nc) / 0.5);
color: var(--fallback-nc, oklch(var(--nc) / 0.5));
}
}

View File

@ -68,3 +68,15 @@ export const timeago = (timestamp, locale = "en") => {
export const formattedDate = (date) => {
return new Date(date).toLocaleDateString("en-UK", { dateStyle: "medium" })
}
export const slugify = (str) => {
return String(str)
.normalize("NFKD") // split accented characters into their base characters and diacritical marks
.replace(/[\u0300-\u036f]/g, "") // remove all the accents, which happen to be all in the \u03xx UNICODE block.
.trim() // trim leading or trailing whitespace
.toLowerCase() // convert to lowercase
.replace(/[^a-z0-9 -]/g, "") // remove non-alphanumeric characters
.replace(/\s+/g, "-") // replace spaces with hyphens
.replace(/-+/g, "-") // remove consecutive hyphens
.replace(/^-+|-+$/g, "") // remove leading and trailing hyphens
}

View File

@ -0,0 +1,7 @@
import { exampleRepos } from "$lib/data/exampleRepos.js"
export function load() {
return {
exampleRepos,
}
}

View File

@ -1,125 +1,12 @@
<script>
import { onMount } from "svelte"
import { pagesThatDontNeedSidebar } from "@src/lib/data.js"
import { currentLang, langs } from "@src/lib/i18n"
onMount(() => {
let lang = new URL(document.location).searchParams.get("lang")
if (langs.includes(lang)) {
$currentLang = lang
localStorage.setItem("lang", $currentLang)
}
if (localStorage.getItem("lang")) {
$currentLang = localStorage.getItem("lang")
}
})
import { page } from "$app/stores"
import "@components/StyleHandler.svelte"
import { onMount } from "svelte"
import "prism-themes/themes/prism-material-dark.min.css"
import "@src/prism-themes-modify.css"
import Navbar from "@components/Navbar.svelte"
import Scripts from "@components/Scripts.svelte"
import Sidebar from "@components/Sidebar.svelte"
// let Sidebar
// const sleep = (ms) => new Promise((f) => setTimeout(f, ms))
// onMount(async () => {
// await sleep(1000)
// Sidebar = (await import("../../components/Sidebar.svelte")).default
// })
let drawersidebar
let drawerSidebarScrollY = 0
function parseSidebarScroll() {
drawerSidebarScrollY = drawersidebar.scrollTop
}
onMount(() => {
parseSidebarScroll()
document.documentElement.style.scrollPaddingTop = "5rem"
document.documentElement.style.scrollBehavior = "smooth"
})
let checked = ""
function closeDrawer() {
checked = ""
}
function openDrawer() {
checked = true
}
let navbarScrollPadding = "5rem"
function addScrollPaddingToNavbar(action) {
navbarScrollPadding = "5rem"
document.documentElement.style.scrollPaddingTop = "5rem"
}
function removeScrollPaddingFromNavbar(action) {
navbarScrollPadding = "0rem"
document.documentElement.style.scrollPaddingTop = "0rem"
}
import "$lib/style/prism-themes-modify.css"
export let data
</script>
<svelte:head>
<link
media="screen and (min-width: 520px)"
rel="preconnect"
href="https://fonts.googleapis.com" />
<link
media="screen and (min-width: 520px)"
rel="preconnect"
href="https://fonts.gstatic.com"
crossorigin />
<link
media="screen and (min-width: 520px)"
href="https://fonts.googleapis.com/css2?family=Figtree:wght@300;900&family=Noto+Sans+JP:wght@300;900&family=Noto+Sans:wght@300;900&display=swap"
rel="stylesheet" />
</svelte:head>
<div
class={`bg-base-100 drawer ${
pagesThatDontNeedSidebar.includes($page.url.pathname) ? "" : "lg:drawer-open"
}`}>
<input id="drawer" type="checkbox" class="drawer-toggle" bind:checked />
<div class={`drawer-content`}>
<Navbar
{addScrollPaddingToNavbar}
{removeScrollPaddingFromNavbar}
showBlogBtn="true"
showComponentsBtn="true"
hideLogoOnLargeScreen={$page.url.pathname == "/" ? false : true}
hideSidebarButtonOnLargeScreen={$page.url.pathname == "/" ? false : true}
showSearch="true"
showVersion="true"
showLanguage="true" />
<div
class={`${
pagesThatDontNeedSidebar.includes($page.url.pathname)
? ""
: "max-w-[100vw] px-6 pb-16 xl:pr-2"
}`}>
<slot />
</div>
</div>
<div
class="drawer-side z-40"
style="scroll-behavior: smooth; scroll-padding-top: {navbarScrollPadding};"
bind:this={drawersidebar}
on:scroll={parseSidebarScroll}>
<label for="drawer" class="drawer-overlay" aria-label="Close menu" />
<aside class="bg-base-100 w-80">
<svelte:component this={Sidebar} {closeDrawer} {openDrawer} {drawerSidebarScrollY} />
<div
class="bg-base-100 pointer-events-none sticky bottom-0 flex h-40 [mask-image:linear-gradient(transparent,#000000)]" />
</aside>
</div>
</div>
<slot />
{#if $page.url.pathname == "/components/modal/"}
<input type="checkbox" id="my_modal_6" class="modal-toggle" aria-label="Open or close modal" />
@ -155,5 +42,3 @@
</div>
</div>
{/if}
<Scripts />

View File

@ -4,8 +4,8 @@ import npmDownloadsInfo from "$lib/json/npm-downloads.json"
import contributors1 from "$lib/json/github-contributors-1.json"
import contributors2 from "$lib/json/github-contributors-2.json"
import openCollectiveBackers from "$lib/json/opencollective-members.json"
import { tweets } from "@src/lib/testimonials.js"
import { siteStats } from "@src/lib/data.js"
import { tweets } from "$lib/testimonials.js"
import { stats } from "$lib/data/stats.js"
let stargazers_count = 25000
let npmInstalls = 8000000
@ -43,6 +43,6 @@ export async function load() {
contributors,
backers,
tweets,
siteStats,
stats,
}
}

View File

@ -1,13 +1,13 @@
<script>
import { onMount } from "svelte"
import Countup from "svelte-countup"
import SEO from "@components/SEO.svelte"
import Ads from "@components/Ads.svelte"
import HomepageInstall from "@components/homepage/Install.svelte"
import Footer from "@components/Footer.svelte"
import { t } from "@src/lib/i18n"
import SEO from "$components/SEO.svelte"
import Ads from "$components/Ads.svelte"
import HomepageInstall from "$components/homepage/Install.svelte"
import Footer from "$components/Footer.svelte"
import { t } from "$lib/i18n"
// import ComponentsPreview from "@components/homepage/ComponentsPreview.svelte"
// import ComponentsPreview from "$components/homepage/ComponentsPreview.svelte"
let ComponentsPreview
// const sleep = (ms) => new Promise((f) => setTimeout(f, ms))
onMount(async () => {
@ -118,7 +118,7 @@
bind:this={section["hero"]}>
<div class="shrink xl:w-1/2">
<div
class="flex min-h-[calc(100vh-4rem)] items-center justify-center px-2 py-10 text-center xl:justify-start xl:pl-10 xl:pr-0 xl:text-left"
class="flex min-h-[calc(100vh-4rem)] items-center justify-center px-2 py-10 text-center xl:justify-start xl:pe-0 xl:ps-10 xl:text-start"
class:invisible={section["hero"] && scrollY > section["hero"].clientHeight}>
<div>
<div class="flex flex-col items-center gap-6 xl:flex-row">
@ -126,7 +126,7 @@
data-tip={isClipboardButtonPressed ? "copied" : "copy"}
class="tooltip tooltip-accent">
<button
class="btn btn-sm cursor-copy rounded-full font-mono font-light normal-case"
class="btn btn-sm cursor-copy rounded-full font-mono font-light"
on:click={() => copyText("npm i -D daisyui@latest")}>
<pre><code>npm i -D daisyui</code></pre>
</button>
@ -146,7 +146,7 @@
</div>
<div class="h-4" />
<h1
class="font-title text-center text-[clamp(2rem,6vw,4.2rem)] font-black leading-[1.1] xl:text-left">
class="font-title text-center text-[clamp(2rem,6vw,4.2rem)] font-black leading-[1.1] xl:text-start [:root[dir=rtl]_&]:leading-[1.35]">
<span
class="[&::selection]:text-base-content brightness-150 contrast-150 [&::selection]:bg-blue-700/20">
{@html $t("The most popular")}
@ -154,12 +154,12 @@
<br />
<span class="inline-grid">
<span
class="pointer-events-none col-start-1 row-start-1 bg-[linear-gradient(90deg,hsl(var(--s))_0%,hsl(var(--sf))_9%,hsl(var(--pf))_42%,hsl(var(--p))_47%,hsl(var(--a))_100%)] bg-clip-text opacity-70 blur-3xl [-webkit-text-fill-color:transparent] [transform:translate3d(0,0,0)] [@supports(color:oklch(0_0_0))]:bg-[linear-gradient(90deg,hsl(var(--s))_4%,color-mix(in_oklch,hsl(var(--sf)),hsl(var(--pf)))_22%,hsl(var(--p))_45%,color-mix(in_oklch,hsl(var(--p)),hsl(var(--a)))_67%,hsl(var(--a))_100.2%)]"
class="pointer-events-none col-start-1 row-start-1 bg-[linear-gradient(90deg,theme(colors.error)_0%,theme(colors.secondary)_9%,theme(colors.secondary)_42%,theme(colors.primary)_47%,theme(colors.accent)_100%)] bg-clip-text blur-2xl [-webkit-text-fill-color:transparent] [transform:translate3d(0,0,0)] [@supports(color:oklch(0_0_0))]:bg-[linear-gradient(90deg,oklch(var(--s))_4%,color-mix(in_oklch,oklch(var(--s)),oklch(var(--er)))_22%,oklch(var(--p))_45%,color-mix(in_oklch,oklch(var(--p)),oklch(var(--a)))_67%,oklch(var(--a))_100.2%)]"
aria-hidden="true">
{@html $t("component library")}
</span>
<span
class="[&::selection]:text-base-content relative col-start-1 row-start-1 bg-[linear-gradient(90deg,hsl(var(--s))_0%,hsl(var(--sf))_9%,hsl(var(--pf))_42%,hsl(var(--p))_47%,hsl(var(--a))_100%)] bg-clip-text [-webkit-text-fill-color:transparent] [&::selection]:bg-blue-700/20 [@supports(color:oklch(0_0_0))]:bg-[linear-gradient(90deg,hsl(var(--s))_4%,color-mix(in_oklch,hsl(var(--sf)),hsl(var(--pf)))_22%,hsl(var(--p))_45%,color-mix(in_oklch,hsl(var(--p)),hsl(var(--a)))_67%,hsl(var(--a))_100.2%)]">
class="[&::selection]:text-base-content relative col-start-1 row-start-1 bg-[linear-gradient(90deg,theme(colors.error)_0%,theme(colors.secondary)_9%,theme(colors.secondary)_42%,theme(colors.primary)_47%,theme(colors.accent)_100%)] bg-clip-text [-webkit-text-fill-color:transparent] [&::selection]:bg-blue-700/20 [@supports(color:oklch(0_0_0))]:bg-[linear-gradient(90deg,oklch(var(--s))_4%,color-mix(in_oklch,oklch(var(--s)),oklch(var(--er)))_22%,oklch(var(--p))_45%,color-mix(in_oklch,oklch(var(--p)),oklch(var(--a)))_67%,oklch(var(--a))_100.2%)]">
{@html $t("component library")}
</span>
</span>
@ -182,14 +182,14 @@
<a
data-sveltekit-preload-data="hover"
href="/components/"
class="btn md:btn-lg md:btn-wide group px-12 normal-case">
class="btn md:btn-lg md:btn-wide group px-12">
<span class="hidden sm:inline">{$t("cta-1")}</span>
<span class="inline sm:hidden">{$t("cta-1-mobile")}</span>
</a>
<a
data-sveltekit-preload-data="hover"
href="/docs/install/"
class="btn btn-neutral md:btn-lg md:btn-wide group px-12 normal-case">
class="btn btn-neutral md:btn-lg md:btn-wide group px-12">
{$t("cta-2")}
<svg
xmlns="http://www.w3.org/2000/svg"
@ -197,7 +197,7 @@
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
class="hidden h-6 w-6 transition-transform duration-300 group-hover:translate-x-1 md:inline-block">
class="hidden h-6 w-6 transition-transform duration-300 group-hover:translate-x-1 rtl:rotate-180 rtl:group-hover:-translate-x-1 md:inline-block">
<path
stroke-linecap="round"
stroke-linejoin="round"
@ -211,15 +211,15 @@
<div class="xl:h-[calc(20vh)]" />
<div>
<div class="max-w-[100vw] px-2 py-10 lg:px-10 xl:max-w-[50vw]">
<div class="font-title text-center xl:text-left">
<div class="font-title text-center xl:text-start">
<h2 class="text-[clamp(2.5rem,6vw,4.5rem)] font-bold leading-none">
{@html $t("don't re-invent<br/>the wheel<br/>every time")}
<img
loading="lazy"
width="72"
height="72"
alt="yawing face"
src="/images/emoji/yawning-face@72.webp"
alt="yawing face emoji"
src="/images/emoji/yawning-face@80.webp"
srcset={`/images/emoji/yawning-face.webp 2x`}
class="pointer-events-none inline-block h-[1em] w-[1em] align-bottom" />
</h2>
@ -254,7 +254,7 @@
loading="lazy"
width="72"
height="72"
alt="yawing face"
alt="sunglasses emoji"
src="/images/emoji/smiling-face-with-sunglasses@80.webp"
srcset={`/images/emoji/smiling-face-with-sunglasses.webp 2x`}
class="pointer-events-none inline-block h-[1em] w-[1em] align-bottom" />
@ -274,24 +274,28 @@
<!-- hero figure -->
<div
class="invisible sticky bottom-4 flex w-[calc(100%-2rem)] shrink duration-700 xl:visible xl:-right-32 xl:bottom-auto xl:top-16 xl:w-auto xl:!transform-none xl:overflow-x-hidden xl:overflow-y-clip xl:bg-transparent xl:pb-16 xl:pt-16"
class="invisible sticky bottom-4 flex w-[calc(100%-2rem)] shrink duration-700 xl:visible xl:-end-32 xl:bottom-auto xl:top-16 xl:w-auto xl:!transform-none xl:overflow-x-hidden xl:overflow-y-clip xl:bg-transparent xl:pb-16 xl:pt-16"
style={`${
section["hero"] && scrollY > section["hero"].clientHeight * 0.2
? "visibility: visible;"
: ""
}transform:translateY(${animateValue(section["hero"], [17, 25], [120, 0])}%)`}>
<div
class="mockup mockup-window bg-base-200/90 xl:bg-base-200 mx-auto origin-top overflow-visible pb-4 backdrop-blur will-change-auto [transform:rotateX(20deg)rotateZ(-20deg)skewY(8deg)scale(1)] max-[1280px]:![transform:translate3d(0,0,0)] xl:-right-20 xl:-mr-10 xl:h-[32rem] xl:w-[50rem] xl:rounded-r-none xl:pr-4 xl:shadow-[-0.05rem_0.1rem_0rem_#00000014] xl:backdrop-blur-0"
class="mockup mockup-window bg-base-200/90 xl:bg-base-200 mx-auto origin-top overflow-visible pb-4 backdrop-blur will-change-auto [--rtl-reverse:1] [transform:rotateX(20deg)rotateZ(-20deg)skewY(8deg)scale(1)] rtl:[--rtl-reverse:-1] rtl:[transform:rotateX(20deg)rotateZ(20deg)skewY(-8deg)scale(1)] max-[1280px]:![transform:translate3d(0,0,0)] xl:-end-20 xl:-me-10 xl:h-[32rem] xl:w-[50rem] xl:rounded-e-none xl:pe-4 xl:shadow-[-0.05rem_0.1rem_0rem_#00000014] xl:backdrop-blur-0"
style={section["hero"] &&
`transform: rotateX(${animateValue(
section["hero"],
[7, 17],
[20, 0]
)}deg)rotateZ(${animateValue(section["hero"], [7, 17], [-20, 0])}deg)skewY(${animateValue(
)}deg)rotateZ(calc(${animateValue(
section["hero"],
[7, 17],
[-20, 0]
)}deg * var(--rtl-reverse)))skewY(calc(${animateValue(
section["hero"],
[7, 17],
[8, 0]
)}deg)`}
)}deg * var(--rtl-reverse)))`}
class:invisible={section["hero"] && scrollY > section["hero"].clientHeight}>
<div class="grid">
<div
@ -302,36 +306,40 @@
class="col-start-1 row-start-1 mx-6 flex items-end gap-6 xl:mx-0 xl:items-start xl:gap-0">
<div class="flex gap-6 xl:w-60 xl:flex-col xl:gap-0">
<div
class="relative z-[1] w-80 will-change-auto motion-reduce:!transform-none max-[1280px]:![transform:translate3d(0,0,0)] xl:-left-6 xl:w-auto xl:[filter:drop-shadow(-1rem_3rem_1rem_#00000012)]"
style={`transform:translate(${animateValue(
class="relative z-[1] w-80 will-change-auto motion-reduce:!transform-none max-[1280px]:![transform:translate3d(0,0,0)] xl:-start-6 xl:w-auto xl:[filter:drop-shadow(-1rem_3rem_1rem_#00000012)]"
style={`filter: drop-shadow(calc(-1rem * var(--rtl-reverse)) 3rem 1rem #00000012);transform:translate(calc(${animateValue(
section["hero"],
[2, 9],
[0, 250]
)}px,${animateValue(section["hero"], [2, 9], [0, -800])}px)`}>
<div class="tabs">
)}px * var(--rtl-reverse)),${animateValue(
section["hero"],
[2, 9],
[0, -800]
)}px)`}>
<div class="tabs tabs-lifted">
<button
on:click={() => (activeMenuItemOnHeroMockup = 1)}
class:tab-active={activeMenuItemOnHeroMockup === 1}
class="tab tab-lifted tab-border-none w-1/3 grow whitespace-nowrap text-xs">
class="tab tab-border-none whitespace-nowrap text-xs">
{$t("Features")}
</button>
<button
on:click={() => (activeMenuItemOnHeroMockup = 2)}
class:tab-active={activeMenuItemOnHeroMockup === 2}
class="tab tab-lifted tab-border-none w-1/3 grow whitespace-nowrap text-xs">
class="tab tab-border-none whitespace-nowrap text-xs">
{$t("Links")}
</button>
<button
on:click={() => (activeMenuItemOnHeroMockup = 3)}
class:tab-active={activeMenuItemOnHeroMockup === 3}
class="tab tab-lifted tab-border-none w-1/3 grow whitespace-nowrap text-xs">
class="tab tab-border-none whitespace-nowrap text-xs">
{$t("Message")}
</button>
</div>
<div
class="bg-base-100 rounded-b-box h-60 shrink-0"
class:rounded-tr-box={activeMenuItemOnHeroMockup !== 3}
class:rounded-tl-box={activeMenuItemOnHeroMockup !== 1}>
class:rounded-se-box={activeMenuItemOnHeroMockup !== 3}
class:rounded-ss-box={activeMenuItemOnHeroMockup !== 1}>
{#if activeMenuItemOnHeroMockup === 1}
<div class="flex flex-col items-stretch p-6">
<div class="form-control">
@ -470,7 +478,8 @@
alt="tailwind css avatar component" />
</div>
</div>
<div class="chat-bubble text-xs [.chat_&]:before:[left:-0.73rem]">
<div
class="chat-bubble text-xs [.chat_&]:before:[inset-inline-start:-0.73rem]">
{$t("Use Tailwind CSS but write fewer class names.")}
</div>
</div>
@ -498,20 +507,28 @@
<div
class="flex w-60 flex-col justify-end gap-4 xl:w-auto xl:justify-normal xl:p-6">
<div
class="alert border-base-300 border will-change-auto motion-reduce:!transform-none motion-reduce:!shadow-none max-[1280px]:![transform:translate3d(0,0,0)]"
style={`box-shadow:${animateValue(
class="alert rounded-btn border-base-300 border will-change-auto motion-reduce:!transform-none motion-reduce:!shadow-none max-[1280px]:![transform:translate3d(0,0,0)]"
style={`box-shadow:calc(${animateValue(
section["hero"],
[5, 5.5],
[0, -1]
)}rem ${animateValue(section["hero"], [5, 5.5], [0, 3])}rem ${animateValue(
)}rem * var(--rtl-reverse)) ${animateValue(
section["hero"],
[5, 5.5],
[0, 3]
)}rem ${animateValue(
section["hero"],
[5, 5.5],
[0, 1]
)}rem #00000012;transform:translate(${animateValue(
)}rem #00000012;transform:translate(calc(${animateValue(
section["hero"],
[5, 15],
[0, 250]
)}px,${animateValue(section["hero"], [5, 15], [0, -800])}px)`}>
)}px * var(--rtl-reverse)),${animateValue(
section["hero"],
[5, 15],
[0, -800]
)}px)`}>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20"
@ -527,20 +544,28 @@
</span>
</div>
<div
class="alert border-base-300 border will-change-auto motion-reduce:!transform-none motion-reduce:!shadow-none max-[1280px]:![transform:translate3d(0,0,0)]"
style={`box-shadow:${animateValue(
class="alert rounded-btn border-base-300 border will-change-auto motion-reduce:!transform-none motion-reduce:!shadow-none max-[1280px]:![transform:translate3d(0,0,0)]"
style={`box-shadow:calc(${animateValue(
section["hero"],
[6, 6.5],
[0, -1]
)}rem ${animateValue(section["hero"], [6, 6.5], [0, 3])}rem ${animateValue(
)}rem * var(--rtl-reverse)) ${animateValue(
section["hero"],
[6, 6.5],
[0, 3]
)}rem ${animateValue(
section["hero"],
[6, 6.5],
[0, 1]
)}rem #00000012;transform:translate(${animateValue(
)}rem #00000012;transform:translate(calc(${animateValue(
section["hero"],
[6, 16],
[0, 250]
)}px,${animateValue(section["hero"], [6, 16], [0, -800])}px)`}>
)}px * var(--rtl-reverse)),${animateValue(
section["hero"],
[6, 16],
[0, -800]
)}px)`}>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20"
@ -556,22 +581,30 @@
</div>
</div>
<div class="flex shrink-0 gap-6 pr-4 xl:flex-col xl:pr-0">
<div class="flex shrink-0 gap-6 pe-4 xl:flex-col xl:pe-0">
<div
class="card bg-base-100 shadow-sm will-change-auto motion-reduce:!transform-none motion-reduce:!shadow-sm max-[1280px]:![transform:translate3d(0,0,0)]"
style={`--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05), ${animateValue(
style={`--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05), calc(${animateValue(
section["hero"],
[0, 0.5],
[0, -1]
)}rem ${animateValue(section["hero"], [0, 0.5], [0, 3])}rem ${animateValue(
)}rem * var(--rtl-reverse)) ${animateValue(
section["hero"],
[0, 0.5],
[0, 3]
)}rem ${animateValue(
section["hero"],
[0, 0.5],
[0, 1]
)}rem #00000012;transform:translate(${animateValue(
)}rem #00000012;transform:translate(calc(${animateValue(
section["hero"],
[0, 8],
[0, 250]
)}px,${animateValue(section["hero"], [0, 8], [0, -800])}px)`}>
)}px * var(--rtl-reverse)),${animateValue(
section["hero"],
[0, 8],
[0, -800]
)}px)`}>
<div class="card-body">
<h2 class="card-title mb-4 text-sm">{$t("Design system")}</h2>
<div class="grid grid-cols-4 items-end gap-4">
@ -630,19 +663,27 @@
</div>
<div
class="card bg-base-100 shadow-sm will-change-auto motion-reduce:!transform-none motion-reduce:!shadow-sm max-[1280px]:![transform:translate3d(0,0,0)]"
style={`--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05), ${animateValue(
style={`--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05), calc(${animateValue(
section["hero"],
[4, 4.5],
[0, -1]
)}rem ${animateValue(section["hero"], [4, 4.5], [0, 3])}rem ${animateValue(
)}rem * var(--rtl-reverse)) ${animateValue(
section["hero"],
[4, 4.5],
[0, 3]
)}rem ${animateValue(
section["hero"],
[4, 4.5],
[0, 1]
)}rem #00000012;transform:translate(${animateValue(
)}rem #00000012;transform:translate(calc(${animateValue(
section["hero"],
[4, 10],
[0, 250]
)}px,${animateValue(section["hero"], [4, 10], [0, -800])}px)`}>
)}px * var(--rtl-reverse)),${animateValue(
section["hero"],
[4, 10],
[0, -800]
)}px)`}>
<div class="card-body">
<h2 class="card-title mb-4 text-sm">Semantic colors</h2>
<div class="grid grid-cols-4 gap-4">
@ -685,7 +726,8 @@
</div>
</div>
<div
class="col-start-1 row-start-1 w-11/12 px-6 pb-3 opacity-0 sm:px-10 sm:pb-10 xl:pt-10"
dir="ltr"
class="col-start-1 row-start-1 w-11/12 pb-3 pe-10 ps-10 opacity-0 rtl:ps-0 sm:pb-10 lg:pe-4 rtl:lg:ps-20 xl:ps-20 xl:pt-10"
style={`opacity:${animateValue(
section["hero"],
[16, 17],
@ -723,7 +765,7 @@
{$t("Take Tailwind CSS")}
<br />
<span
class="bg-[linear-gradient(90deg,hsl(var(--s))_0%,hsl(var(--sf))_9%,hsl(var(--pf))_42%,hsl(var(--p))_47%,hsl(var(--a))_100%)] bg-clip-text will-change-auto [-webkit-text-fill-color:transparent] [transform:translate3d(0,0,0)] motion-reduce:!tracking-normal max-[1280px]:!tracking-normal [@supports(color:oklch(0_0_0))]:bg-[linear-gradient(90deg,hsl(var(--s))_4%,color-mix(in_oklch,hsl(var(--sf)),hsl(var(--pf)))_22%,hsl(var(--p))_45%,color-mix(in_oklch,hsl(var(--p)),hsl(var(--a)))_67%,hsl(var(--a))_100.2%)]"
class="bg-[linear-gradient(90deg,theme(colors.error)_0%,theme(colors.secondary)_9%,theme(colors.secondary)_42%,theme(colors.primary)_47%,theme(colors.accent)_100%)] bg-clip-text will-change-auto [-webkit-text-fill-color:transparent] [transform:translate3d(0,0,0)] motion-reduce:!tracking-normal max-[1280px]:!tracking-normal [@supports(color:oklch(0_0_0))]:bg-[linear-gradient(90deg,oklch(var(--s))_4%,color-mix(in_oklch,oklch(var(--s)),oklch(var(--er)))_22%,oklch(var(--p))_45%,color-mix(in_oklch,oklch(var(--p)),oklch(var(--a)))_67%,oklch(var(--a))_100.2%)]"
style={`letter-spacing:${animateValue(section["nextlevel"], [-100, 20], [0, 1])}rem`}>
{$t("to the next level")}
</span>
@ -804,10 +846,10 @@
)}
</p>
<div class="h-4" />
<div class="text-base-content/40 mx-auto w-72 text-left">
<div class="text-base-content/40 mx-auto w-72 text-start">
<span class="inline-block -translate-y-2 -rotate-12">{$t("Click")}</span>
<svg
class="inline-block h-8 w-20"
class="inline-block h-8 w-20 rtl:[transform:rotateY(180deg)]"
viewBox="0 0 45 20"
fill="none"
xmlns="http://www.w3.org/2000/svg">
@ -821,7 +863,7 @@
{$t("Tailwind only")}
<div class="relative">
<div
class="pointer-events-none absolute left-1/2 top-1/2 grid h-20 w-60 -translate-x-1/2 -translate-y-1/2">
class="pointer-events-none absolute start-1/2 top-1/2 grid h-20 w-60 -translate-x-1/2 -translate-y-1/2">
<div
class="bg-primary/30 col-start-1 row-start-1 scale-[2] rounded-full blur-[5rem] [transform:translate3d(0,0,0)]" />
</div>
@ -862,7 +904,7 @@
&lt;/div&gt;</pre>
</div>
<div class="divider xl:divider-horizontal">
<span class="hidden xl:inline"></span>
<span class="hidden rtl:rotate-180 xl:inline"></span>
<span class="xl:hidden"></span>
</div>
<div>
@ -900,7 +942,7 @@
&lt;input type=&quot;checkbox&quot; class=&quot;<span
class="text-amber-600">peer h-6 w-12 cursor-pointer appearance-none rounded-full border border-gray-300 bg-white checked:border-gray-900 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-gray-900 focus-visible:ring-offset-2</span>&quot; /&gt;
&lt;span class=&quot;<span
class="text-amber-600">pointer-events-none absolute left-1 top-1 block h-4 w-4 rounded-full bg-gray-400 transition-all duration-200 peer-checked:left-7 peer-checked:bg-gray-900</span>&quot;&gt;&lt;/span&gt;
class="text-amber-600">pointer-events-none absolute start-1 top-1 block h-4 w-4 rounded-full bg-gray-400 transition-all duration-200 peer-checked:start-7 peer-checked:bg-gray-900</span>&quot;&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;/label&gt;
&lt;label class=&quot;<span
@ -910,7 +952,7 @@
&lt;input type=&quot;checkbox&quot; class=&quot;<span
class="text-amber-600">peer h-6 w-12 cursor-pointer appearance-none rounded-full border border-gray-300 bg-white checked:border-gray-900 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-gray-900 focus-visible:ring-offset-2</span>&quot; /&gt;
&lt;span class=&quot;<span
class="text-amber-600">pointer-events-none absolute left-1 top-1 block h-4 w-4 rounded-full bg-gray-400 transition-all duration-200 peer-checked:left-7 peer-checked:bg-gray-900</span>&quot;&gt;&lt;/span&gt;
class="text-amber-600">pointer-events-none absolute start-1 top-1 block h-4 w-4 rounded-full bg-gray-400 transition-all duration-200 peer-checked:start-7 peer-checked:bg-gray-900</span>&quot;&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;/label&gt;
&lt;button class=&quot;<span
@ -921,7 +963,7 @@
&lt;/div&gt;</pre>
</div>
<div class="divider xl:divider-horizontal">
<span class="hidden xl:inline"></span>
<span class="hidden rtl:rotate-180 xl:inline"></span>
<span class="xl:hidden"></span>
</div>
<div>
@ -939,7 +981,7 @@
type="checkbox"
class="peer h-6 w-12 cursor-pointer appearance-none rounded-full border border-gray-300 bg-white checked:border-gray-900 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-gray-900 focus-visible:ring-offset-2" />
<span
class="pointer-events-none absolute left-1 top-1 block h-4 w-4 rounded-full bg-gray-400 transition-all duration-200 peer-checked:left-7 peer-checked:bg-gray-900" />
class="pointer-events-none absolute start-1 top-1 block h-4 w-4 rounded-full bg-gray-400 transition-all duration-200 peer-checked:start-7 peer-checked:bg-gray-900" />
</div>
</label>
<label class="flex cursor-pointer items-center justify-between p-1">
@ -950,7 +992,7 @@
name="sample-checkbox"
class="peer h-6 w-12 cursor-pointer appearance-none rounded-full border border-gray-300 bg-white checked:border-gray-900 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-gray-900 focus-visible:ring-offset-2" />
<span
class="pointer-events-none absolute left-1 top-1 block h-4 w-4 rounded-full bg-gray-400 transition-all duration-200 peer-checked:left-7 peer-checked:bg-gray-900" />
class="pointer-events-none absolute start-1 top-1 block h-4 w-4 rounded-full bg-gray-400 transition-all duration-200 peer-checked:start-7 peer-checked:bg-gray-900" />
</span>
</label>
<button
@ -973,11 +1015,11 @@
class="relative flex flex-col items-center justify-center gap-10 px-4 md:px-10 xl:flex-row-reverse xl:gap-20">
<div>
<div
class="bg-primary pointer-events-none absolute left-20 aspect-square w-96 rounded-full opacity-20 blur-3xl [transform:translate3d(0,0,0)]" />
class="bg-primary pointer-events-none absolute start-20 aspect-square w-96 rounded-full opacity-20 blur-3xl [transform:translate3d(0,0,0)]" />
<div
class="bg-success pointer-events-none absolute aspect-square w-full rounded-full opacity-10 blur-3xl [transform:translate3d(0,0,0)]" />
<h2
class="font-title text-center text-[clamp(2rem,8vw,4rem)] font-black leading-none xl:text-left">
class="font-title text-center text-[clamp(2rem,8vw,4rem)] font-black leading-none xl:text-start">
<span
class="motion-reduce:!opacity-100"
style={`opacity:${
@ -1009,7 +1051,7 @@
</span>
</h2>
<div class="h-10" />
<p class="text-base-content/60 font-title text-center font-light md:text-3xl xl:text-left">
<p class="text-base-content/60 font-title text-center font-light md:text-3xl xl:text-start">
{@html $t(
"With daisyUI, you write 80% fewer class names<br />And your HTML size will be about 70% smaller."
)}
@ -1027,7 +1069,7 @@
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
class="hidden h-6 w-6 transition-transform duration-300 group-hover:translate-x-1 md:inline-block">
class="hidden h-6 w-6 transition-transform duration-300 group-hover:translate-x-1 rtl:rotate-180 rtl:group-hover:-translate-x-1 md:inline-block">
<path
stroke-linecap="round"
stroke-linejoin="round"
@ -1129,40 +1171,40 @@
</div>
<div
class="bg-neutral from-neutral to-neutral-focus text-neutral-content relative flex min-h-[100vh] max-w-[100vw] items-center justify-center overflow-hidden bg-gradient-to-br p-10 md:p-20"
class="bg-neutral text-neutral-content relative flex min-h-[100vh] max-w-[100vw] items-center justify-center overflow-hidden p-10 md:p-20"
bind:this={section["customizable"]}>
<div
class="relative flex max-w-[100rem] flex-col items-center justify-center xl:flex-row xl:gap-20">
<div class="relative z-[1] w-full py-10">
<h2 class="font-title text-center font-black leading-none xl:text-left">
<h2 class="font-title text-center font-black leading-none xl:text-start">
<span
class="inline-block text-[clamp(2rem,8vw,3.6rem)] font-black will-change-auto motion-reduce:!transform-none max-[1280px]:![transform:translate3d(0,0,0)]"
style={`transform:translateX(${animateValue(
class="inline-block text-[clamp(2rem,8vw,3.6rem)] font-black will-change-auto [--rtl-reverse:1] rtl:[--rtl-reverse:-1] motion-reduce:!transform-none max-[1280px]:![transform:translate3d(0,0,0)]"
style={`transform:translateX(calc(${animateValue(
section["customizable"],
[-100, 100],
[10, 0]
)}rem)`}>
)}rem * var(--rtl-reverse)))`}>
{@html $t("Highly customizable")}
</span>
<br />
<span
class="inline-block text-[clamp(2rem,8vw,3rem)] font-light will-change-auto motion-reduce:!transform-none max-[1280px]:![transform:translate3d(0,0,0)]"
style={`transform:translateX(${animateValue(
class="inline-block text-[clamp(2rem,8vw,3rem)] font-light will-change-auto [--rtl-reverse:1] rtl:[--rtl-reverse:-1] motion-reduce:!transform-none max-[1280px]:![transform:translate3d(0,0,0)]"
style={`transform:translateX(calc(${animateValue(
section["customizable"],
[-100, 100],
[0, 8]
)}rem)`}>
)}rem * var(--rtl-reverse)))`}>
{@html $t("Powered by Tailwind&nbsp;CSS utility&nbsp;classes")}
</span>
</h2>
<div class="h-10" />
<p
class="text-neutral-content/60 font-title inline-block w-full text-center font-light will-change-auto motion-reduce:!transform-none max-[1280px]:![transform:translate3d(0,0,0)] md:text-2xl xl:text-left"
style={`transform:translateX(${animateValue(
class="text-neutral-content/60 font-title inline-block w-full text-center font-light will-change-auto [--rtl-reverse:1] [text-wrap:balance] rtl:[--rtl-reverse:-1] motion-reduce:!transform-none max-[1280px]:![transform:translate3d(0,0,0)] md:text-2xl xl:text-start"
style={`transform:translateX(calc(${animateValue(
section["customizable"],
[-100, 100],
[10, 2]
)}rem)`}>
)}rem * var(--rtl-reverse)))`}>
{@html $t(
"daisyUI is built on top of Tailwind&nbsp;CSS so you can customize everything using utility classes."
)}
@ -1172,7 +1214,7 @@
<a
data-sveltekit-preload-data="hover"
href="/docs/customize"
class="btn btn-lg btn-wide group normal-case">
class="btn btn-lg btn-wide group">
{$t("how-to-customize")}
<svg
xmlns="http://www.w3.org/2000/svg"
@ -1180,7 +1222,7 @@
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
class="hidden h-6 w-6 transition-transform duration-300 group-hover:translate-x-1 md:inline-block">
class="hidden h-6 w-6 transition-transform duration-300 group-hover:translate-x-1 rtl:rotate-180 rtl:group-hover:-translate-x-1 md:inline-block">
<path
stroke-linecap="round"
stroke-linejoin="round"
@ -1190,11 +1232,11 @@
</div>
</div>
<div class="flex flex-col">
<div class="mockup-code bg-neutral-focus mx-auto w-full max-w-xs text-left sm:max-w-none">
<div class="mockup-code mx-auto w-full max-w-xs bg-black/20 text-start sm:max-w-none">
<pre><code>&lt;a class="<span>btn btn-primary</span>"&gt;Button&lt;/a&gt;</code></pre>
</div>
<div class="divider text-neutral-content text-opacity-30"></div>
<div class="mockup-code bg-neutral-focus mx-auto w-full max-w-xs text-left sm:max-w-none">
<div class="mockup-code mx-auto w-full max-w-xs bg-black/20 text-start sm:max-w-none">
<pre><code>&lt;a class="<span>btn btn-primary</span> <span
class="text-teal-500">rounded-full</span>"&gt;Button&lt;/a&gt;</code></pre>
</div>
@ -1206,15 +1248,15 @@
class="from-base-100 to-base-300 relative flex min-h-[100vh] items-center justify-center bg-gradient-to-t py-16"
bind:this={section["agnostic"]}>
<div
class="bg-warning right-1/5 pointer-events-none absolute -top-full aspect-square w-full -translate-x-1/2 rounded-full opacity-5 blur-3xl [transform:translate3d(0,0,0)]" />
class="bg-warning end-1/5 pointer-events-none absolute -top-full aspect-square w-full -translate-x-1/2 rounded-full opacity-5 blur-3xl [transform:translate3d(0,0,0)]" />
<div
class="bg-base-content top-1/5 pointer-events-none absolute -left-40 aspect-square w-2/3 rounded-full border-2 opacity-5 blur-3xl [transform:translate3d(0,0,0)]" />
class="bg-base-content top-1/5 pointer-events-none absolute -start-40 aspect-square w-2/3 rounded-full border-2 opacity-5 blur-3xl [transform:translate3d(0,0,0)]" />
<div
class="bg-info pointer-events-none absolute left-0 top-1/2 aspect-square w-1/2 -translate-y-1/2 rounded-full opacity-5 blur-3xl [transform:translate3d(0,0,0)]" />
class="bg-info pointer-events-none absolute start-0 top-1/2 aspect-square w-1/2 -translate-y-1/2 rounded-full opacity-5 blur-3xl [transform:translate3d(0,0,0)]" />
<div
class="flex max-w-[100rem] flex-col-reverse items-center justify-center gap-10 p-4 md:gap-20 md:p-20 xl:flex-row-reverse">
<div>
<h2 class="font-title text-center leading-none xl:text-left">
<h2 class="font-title text-center leading-none xl:text-start">
<span class="text-[clamp(2rem,8vw,4rem)] font-black">{$t("Pure CSS.")}</span>
<br />
<span class="text-[clamp(2rem,8vw,4rem)] font-black">{$t("Framework agnostic.")}</span>
@ -1223,13 +1265,13 @@
</h2>
<div class="h-10" />
<p
class="text-base-content/60 font-title mb-6 text-center font-light md:text-3xl xl:text-left">
class="text-base-content/60 font-title mb-6 text-center font-light md:text-3xl xl:text-start">
{@html $t(
"daisyUI is a plugin for Tailwind CSS. It works on all JS frameworks and doesn't need a JS bundle file."
)}
</p>
<p
class="text-base-content/60 font-title mb-6 text-center font-light md:text-3xl xl:text-left">
class="text-base-content/60 font-title mb-6 text-center font-light md:text-3xl xl:text-start">
{@html $t(
"Install daisyUI as a dev dependency and use the class names just like any other Tailwind CSS class name."
)}
@ -1239,7 +1281,7 @@
<a
data-sveltekit-preload-data="hover"
href="/docs/install/"
class="btn btn-lg btn-wide group normal-case">
class="btn btn-lg btn-wide group">
{$t("cta-2")}
<svg
xmlns="http://www.w3.org/2000/svg"
@ -1247,7 +1289,7 @@
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
class="hidden h-6 w-6 transition-transform duration-300 group-hover:translate-x-1 md:inline-block">
class="hidden h-6 w-6 transition-transform duration-300 group-hover:translate-x-1 rtl:rotate-180 rtl:group-hover:-translate-x-1 md:inline-block">
<path
stroke-linecap="round"
stroke-linejoin="round"
@ -1292,10 +1334,10 @@
</div>
</div>
<div class="min-h-[600vh] py-20" bind:this={section["themes"]}>
<div class="min-h-[320vh] py-20" bind:this={section["themes"]}>
<div
class="sticky top-[calc(50vh-10rem)] mx-auto grid w-[calc(100%-2rem)] max-w-[85rem] overflow-hidden rounded-2xl sm:top-20">
{#each ["light", "valentine", "cyberpunk", "cupcake", "retro", "synthwave", "business", "dracula", "luxury", "night"] as currentTheme, index}
{#each ["light", "valentine", "cyberpunk", "cupcake", "retro", "synthwave", "luxury", "night"] as currentTheme, index}
<div
class="col-start-1 row-start-1 flex items-start [transform:translate3d(0,0,0)]"
data-theme={currentTheme}
@ -1383,13 +1425,10 @@
</p>
<div class="h-10" />
<div class="flex w-full flex-col justify-center gap-4 md:flex-row">
<a data-sveltekit-preload-data="hover" href="/theme-generator/" class="btn normal-case">
<a data-sveltekit-preload-data="hover" href="/theme-generator/" class="btn">
{$t("Theme Generator")}
</a>
<a
data-sveltekit-preload-data="hover"
href="/docs/themes/#-4"
class="btn btn-neutral normal-case">
<a data-sveltekit-preload-data="hover" href="/docs/themes/#-4" class="btn btn-neutral">
{$t("Learn more about themes")}
</a>
</div>
@ -1409,7 +1448,7 @@
? 0.1
: Math.trunc(animateValue(section["possibilities"], [-30, -20], [0, 1]))
}`}>
{data.siteStats.components}
{data.stats.components}
{$t("components")}
</span>
<br />
@ -1420,13 +1459,14 @@
? 0.1
: Math.trunc(animateValue(section["possibilities"], [-20, -10], [0, 1]))
}`}>
500+ {$t("utility classes")}
{data.stats.utilities}
{$t("utility classes")}
</span>
<br />
<span class="inline-grid">
{#if Math.trunc(animateValue(section["possibilities"], [-10, 0], [0, 1])) !== 0}
<span
class="pointer-events-none col-start-1 row-start-1 bg-[linear-gradient(90deg,hsl(var(--s))_0%,hsl(var(--sf))_9%,hsl(var(--pf))_42%,hsl(var(--p))_47%,hsl(var(--a))_100%)] bg-clip-text opacity-70 blur-3xl [-webkit-text-fill-color:transparent] [transform:translate3d(0,0,0)] [@supports(color:oklch(0_0_0))]:bg-[linear-gradient(90deg,hsl(var(--s))_4%,color-mix(in_oklch,hsl(var(--sf)),hsl(var(--pf)))_22%,hsl(var(--p))_45%,color-mix(in_oklch,hsl(var(--p)),hsl(var(--a)))_67%,hsl(var(--a))_100.2%)]"
class="pointer-events-none col-start-1 row-start-1 bg-[linear-gradient(90deg,theme(colors.error)_0%,theme(colors.secondary)_9%,theme(colors.secondary)_42%,theme(colors.primary)_47%,theme(colors.accent)_100%)] bg-clip-text opacity-70 blur-3xl [-webkit-text-fill-color:transparent] [transform:translate3d(0,0,0)] [:root[dir=rtl]_&]:leading-[1.35] [@supports(color:oklch(0_0_0))]:bg-[linear-gradient(90deg,oklch(var(--s))_4%,color-mix(in_oklch,oklch(var(--s)),oklch(var(--er)))_22%,oklch(var(--p))_45%,color-mix(in_oklch,oklch(var(--p)),oklch(var(--a)))_67%,oklch(var(--a))_100.2%)]"
aria-hidden="true">
{$t("endless possibilities")}
</span>
@ -1439,8 +1479,8 @@
}`}
class={`[&::selection]:text-base-content relative col-start-1 row-start-1 leading-tight motion-reduce:!opacity-100 [&::selection]:bg-blue-700/20 ${
Math.trunc(animateValue(section["possibilities"], [-10, 0], [0, 1])) !== 0
? "bg-[linear-gradient(90deg,hsl(var(--s))_0%,hsl(var(--sf))_9%,hsl(var(--pf))_42%,hsl(var(--p))_47%,hsl(var(--a))_100%)] bg-clip-text [-webkit-text-fill-color:transparent] [@supports(color:oklch(0_0_0))]:bg-[linear-gradient(90deg,hsl(var(--s))_4%,color-mix(in_oklch,hsl(var(--sf)),hsl(var(--pf)))_22%,hsl(var(--p))_45%,color-mix(in_oklch,hsl(var(--p)),hsl(var(--a)))_67%,hsl(var(--a))_100.2%)]"
: "motion-reduce:!bg-[linear-gradient(90deg,hsl(var(--s))_0%,hsl(var(--sf))_9%,hsl(var(--pf))_42%,hsl(var(--p))_47%,hsl(var(--a))_100%)] motion-reduce:!bg-clip-text motion-reduce:![-webkit-text-fill-color:transparent] [@supports(color:oklch(0_0_0))]:motion-reduce:!bg-[linear-gradient(90deg,hsl(var(--s))_4%,color-mix(in_oklch,hsl(var(--sf)),hsl(var(--pf)))_22%,hsl(var(--p))_45%,color-mix(in_oklch,hsl(var(--p)),hsl(var(--a)))_67%,hsl(var(--a))_100.2%)]"
? "bg-[linear-gradient(90deg,theme(colors.error)_0%,theme(colors.secondary)_9%,theme(colors.secondary)_42%,theme(colors.primary)_47%,theme(colors.accent)_100%)] bg-clip-text [-webkit-text-fill-color:transparent] [@supports(color:oklch(0_0_0))]:bg-[linear-gradient(90deg,oklch(var(--s))_4%,color-mix(in_oklch,oklch(var(--s)),oklch(var(--er)))_22%,oklch(var(--p))_45%,color-mix(in_oklch,oklch(var(--p)),oklch(var(--a)))_67%,oklch(var(--a))_100.2%)]"
: "motion-reduce:!bg-[linear-gradient(90deg,theme(colors.error)_0%,theme(colors.secondary)_9%,theme(colors.secondary)_42%,theme(colors.primary)_47%,theme(colors.accent)_100%)] motion-reduce:!bg-clip-text motion-reduce:![-webkit-text-fill-color:transparent] [@supports(color:oklch(0_0_0))]:motion-reduce:!bg-[linear-gradient(90deg,oklch(var(--s))_4%,color-mix(in_oklch,oklch(var(--s)),oklch(var(--er)))_22%,oklch(var(--p))_45%,color-mix(in_oklch,oklch(var(--p)),oklch(var(--a)))_67%,oklch(var(--a))_100.2%)]"
}`}>
{$t("endless possibilities")}
</span>
@ -1546,7 +1586,7 @@
<div
class="mx-auto grid max-w-5xl grid-cols-1 gap-6 px-10 md:grid-cols-2 lg:grid-cols-3 lg:[&>*:nth-child(3n-1)]:translate-y-16">
{#each data.tweets as tweet, index}
<div class="card border-base-content/5 card-compact border text-left">
<div class="card border-base-content/5 card-compact border text-start">
<div class="card-body">
<div class="flex items-center gap-2">
<div class="avatar">
@ -1576,7 +1616,7 @@
</div>
</div>
<div class="px-2 py-40 lg:px-10">
<div class="w-full overflow-hidden px-2 py-40 lg:px-10">
<div class="text-center">
<div class="h-6" />
<div>
@ -1584,7 +1624,7 @@
loading="lazy"
width="80"
height="80"
alt="yawing face"
alt="heart emoji"
src="/images/emoji/heart-on-fire@80.webp"
srcset={`/images/emoji/heart-on-fire.webp 2x`}
class="pointer-events-none inline-block h-20 w-20 align-bottom" />
@ -1658,8 +1698,8 @@
<div class="avatar placeholder">
<div
class="mask mask-squircle w-8 text-black"
style={`background-color:hsl(${Math.floor(Math.random() * 360)}, 15%, 80%)`}>
<span class="font-mono text-xs uppercase">
style={`background-color:hsl(${Math.floor(Math.random() * 360)} 10% 80%)`}>
<span class="select-none font-mono text-xs uppercase">
{backer.name
.split(" ")
.map((n, i, arr) => (i === 0 || i === arr.length - 1 ? n[0] : ""))
@ -1739,11 +1779,7 @@
<div class="h-10" />
<div class="flex w-full flex-col items-center justify-center gap-2 md:flex-row">
<span class="text-base-content/60">{$t("Or play with daisyUI on")}:</span>
<a
target="_blank"
rel="noopener, noreferrer"
href="/codepen"
class="btn-ghost btn-sm btn normal-case">
<a target="_blank" rel="noopener, noreferrer" href="/codepen" class="btn-ghost btn-sm btn">
<svg
class="h-4 w-4 stroke-current"
viewBox="0 0 64 64"
@ -1760,7 +1796,7 @@
</a>
<a
href="/tailwindplay"
class="btn-ghost btn-sm btn normal-case"
class="btn-ghost btn-sm btn"
target="_blank"
rel="noopener, noreferrer">
<svg class="h-5 w-5" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 54 33">

View File

@ -6,9 +6,10 @@ layout: components
---
<script>
import Component from "@components/Component.svelte"
import ClassTable from "@components/ClassTable.svelte"
import Translate from "@components/Translate.svelte"
import Component from "$components/Component.svelte"
import ClassTable from "$components/ClassTable.svelte"
import BrowserSupport from "$components/BrowserSupport.svelte"
import Translate from "$components/Translate.svelte"
import { prefix } from '$lib/stores';
import { replace } from '$lib/actions';
</script>

View File

@ -6,9 +6,10 @@ layout: components
---
<script>
import Component from "@components/Component.svelte"
import ClassTable from "@components/ClassTable.svelte"
import Translate from "@components/Translate.svelte"
import Component from "$components/Component.svelte"
import ClassTable from "$components/ClassTable.svelte"
import BrowserSupport from "$components/BrowserSupport.svelte"
import Translate from "$components/Translate.svelte"
import { prefix } from '$lib/stores';
import { replace } from '$lib/actions';
</script>

View File

@ -1,8 +1,8 @@
<script>
import { page } from "$app/stores"
import SEO from "@components/SEO.svelte"
import Translate from "@components/Translate.svelte"
import Ads from "@components/Ads.svelte"
import SEO from "$components/SEO.svelte"
import Translate from "$components/Translate.svelte"
import Ads from "$components/Ads.svelte"
export let data
let { components } = data
</script>

Some files were not shown because too many files have changed in this diff Show More