phoenix_duskmoon 9.0.0-rc.4 → 9.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +116 -15
- package/assets/css/element-theme-bridge.css +15 -0
- package/assets/css/phoenix_duskmoon.css +14 -7
- package/package.json +3 -1
- package/priv/static/phoenix_duskmoon.css +2683 -828
- package/assets/css/css_art/button-noise.css +0 -490
- package/assets/css/css_art/eclipse.css +0 -75
- package/assets/css/css_art/plasma-ball.css +0 -656
- package/assets/css/css_art/signature.css +0 -36
- package/assets/css/css_art/snow.css +0 -22
- package/assets/css/css_art/spotlight-search.css +0 -112
package/README.md
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
# PhoenixDuskmoon
|
|
2
2
|
|
|
3
|
-
[](https://github.com/duskmoon-dev/phoenix-duskmoon-ui/actions/workflows/ci.yml)
|
|
4
|
+
[](https://github.com/duskmoon-dev/phoenix-duskmoon-ui/actions/workflows/release.yml)
|
|
5
|
+
[](https://hex.pm/packages/phoenix_duskmoon)
|
|
6
|
+
[](https://hexdocs.pm/phoenix_duskmoon/)
|
|
7
|
+
[](https://www.npmjs.com/package/phoenix_duskmoon)
|
|
4
8
|
|
|
5
|
-
|
|
9
|
+
Duskmoon UI component library for Phoenix LiveView applications.
|
|
6
10
|
|
|
7
|
-
**v9**: Uses `@duskmoon-dev/core` CSS design system and
|
|
11
|
+
**v9**: Uses `@duskmoon-dev/core` CSS design system, HTML Custom Elements (`@duskmoon-dev/elements`), and Art Custom Elements (`@duskmoon-dev/art-elements`).
|
|
8
12
|
|
|
9
13
|
Requires `tailwindcss >= 4.0`
|
|
10
14
|
|
|
@@ -13,41 +17,138 @@ See the [docs](https://hexdocs.pm/phoenix_duskmoon/) for more information.
|
|
|
13
17
|
|
|
14
18
|
## Install
|
|
15
19
|
|
|
16
|
-
Add
|
|
20
|
+
Add to `mix.exs`:
|
|
21
|
+
|
|
17
22
|
```elixir
|
|
18
|
-
|
|
23
|
+
{:phoenix_duskmoon, "~> 9.0"},
|
|
19
24
|
```
|
|
20
25
|
|
|
21
26
|
Install frontend packages:
|
|
27
|
+
|
|
22
28
|
```bash
|
|
23
29
|
bun add @duskmoon-dev/core @duskmoon-dev/elements
|
|
24
30
|
```
|
|
25
31
|
|
|
26
|
-
|
|
32
|
+
Optionally, add CSS Art and Art Custom Elements support:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
bun add @duskmoon-dev/css-art @duskmoon-dev/art-elements
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### View Helpers
|
|
39
|
+
|
|
40
|
+
Add to your Phoenix view helpers (e.g. `lib/my_app_web.ex`):
|
|
27
41
|
|
|
28
42
|
```elixir
|
|
29
43
|
defp html_helpers do
|
|
30
44
|
quote do
|
|
31
|
-
#
|
|
45
|
+
# Standard UI components (buttons, cards, forms, navigation, etc.)
|
|
32
46
|
use PhoenixDuskmoon.Component
|
|
33
|
-
#
|
|
34
|
-
use PhoenixDuskmoon.
|
|
47
|
+
# CSS Art decorative components (snow, plasma ball, eclipse, etc.)
|
|
48
|
+
use PhoenixDuskmoon.CssArt
|
|
35
49
|
end
|
|
36
50
|
end
|
|
37
51
|
```
|
|
38
52
|
|
|
39
|
-
|
|
53
|
+
### CSS Setup
|
|
40
54
|
|
|
41
|
-
|
|
42
|
-
@source "../js/**/*.js";
|
|
43
|
-
@source '../../lib/**/*.exs';
|
|
44
|
-
@source '../../lib/**/*.ex';
|
|
55
|
+
In your CSS entry file (e.g. `assets/css/app.css`):
|
|
45
56
|
|
|
57
|
+
```css
|
|
46
58
|
@import "tailwindcss";
|
|
47
|
-
@
|
|
59
|
+
@plugin "@duskmoon-dev/core/plugin";
|
|
48
60
|
@import "phoenix_duskmoon/components";
|
|
49
61
|
```
|
|
50
62
|
|
|
63
|
+
### JavaScript Setup
|
|
64
|
+
|
|
65
|
+
Register the custom elements in `assets/js/app.js`:
|
|
66
|
+
|
|
67
|
+
```javascript
|
|
68
|
+
import "@duskmoon-dev/elements/register";
|
|
69
|
+
// Optionally, register art custom elements
|
|
70
|
+
import "@duskmoon-dev/art-elements/register";
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Hooks Setup
|
|
74
|
+
|
|
75
|
+
Some components require LiveView hooks. Add them when creating your `LiveSocket`:
|
|
76
|
+
|
|
77
|
+
```javascript
|
|
78
|
+
import {LiveSocket} from "phoenix_live_view"
|
|
79
|
+
import * as DuskmoonHooks from "phoenix_duskmoon/hooks"
|
|
80
|
+
|
|
81
|
+
let liveSocket = new LiveSocket("/live", Socket, {
|
|
82
|
+
params: {_csrf_token: csrfToken},
|
|
83
|
+
hooks: DuskmoonHooks
|
|
84
|
+
})
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Components that require hooks:
|
|
88
|
+
- `<.dm_theme_switcher>` — theme switching with localStorage
|
|
89
|
+
- `<.dmf_spotlight>` — keyboard shortcut handling (Cmd/Ctrl+K)
|
|
90
|
+
- `<.dm_page_header>` — scroll-based intersection observer
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
## Usage
|
|
94
|
+
|
|
95
|
+
### Buttons
|
|
96
|
+
|
|
97
|
+
```heex
|
|
98
|
+
<.dm_btn variant="primary">Click me</.dm_btn>
|
|
99
|
+
<.dm_btn variant="secondary" loading={@loading}>Loading</.dm_btn>
|
|
100
|
+
<.dm_btn variant="error" shape="circle">×</.dm_btn>
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Cards
|
|
104
|
+
|
|
105
|
+
```heex
|
|
106
|
+
<.dm_card class="p-6">
|
|
107
|
+
<:title><h3>Title</h3></:title>
|
|
108
|
+
<p>Content here</p>
|
|
109
|
+
<:footer><.dm_btn>Action</.dm_btn></:footer>
|
|
110
|
+
</.dm_card>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Icons
|
|
114
|
+
|
|
115
|
+
```heex
|
|
116
|
+
<.dm_mdi name="home" />
|
|
117
|
+
<.dm_bsi name="house" />
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Forms
|
|
121
|
+
|
|
122
|
+
```heex
|
|
123
|
+
<.dm_form for={@form} phx-submit="save">
|
|
124
|
+
<.dmf_input field={@form[:email]} label="Email" />
|
|
125
|
+
<.dm_btn variant="primary" type="submit">Save</.dm_btn>
|
|
126
|
+
</.dm_form>
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Common Attributes
|
|
130
|
+
|
|
131
|
+
| Attribute | Values |
|
|
132
|
+
|-----------|--------|
|
|
133
|
+
| `variant` | `primary`, `secondary`, `accent`, `info`, `success`, `warning`, `error`, `ghost`, `link`, `outline` |
|
|
134
|
+
| `size` | `xs`, `sm`, `md`, `lg` |
|
|
135
|
+
| `shape` | `square`, `circle` |
|
|
136
|
+
| `loading` | boolean |
|
|
137
|
+
| `disabled`| boolean |
|
|
138
|
+
| `class` | additional CSS classes |
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
## Available Components
|
|
142
|
+
|
|
143
|
+
- **Action**: buttons, dropdowns, links, menus, toggles
|
|
144
|
+
- **Data Display**: accordion, avatar, badge, card, chip, collapse, flash, list, markdown, pagination, popover, progress, skeleton, stat, table, timeline, tooltip
|
|
145
|
+
- **Data Entry**: autocomplete, cascader, checkbox, compact input, file upload, form, input, multi-select, OTP input, PIN input, radio, rating, segment control, select, slider, switch, textarea, time input, tree select
|
|
146
|
+
- **Feedback**: dialog, loading, snackbar, toast
|
|
147
|
+
- **Navigation**: actionbar, appbar, bottom nav, breadcrumb, left menu, navbar, nested menu, page footer, page header, stepper, steps, tabs
|
|
148
|
+
- **Layout**: bottom sheet, divider, drawer, theme switcher
|
|
149
|
+
- **CSS Art**: button noise, eclipse, plasma ball, signature, snow, spotlight search
|
|
150
|
+
|
|
151
|
+
|
|
51
152
|
## Live Storybook
|
|
52
153
|
|
|
53
154
|
[Live Storybook](https://duskmoon-storybook.gsmlg.dev)
|
|
@@ -13,6 +13,18 @@
|
|
|
13
13
|
|
|
14
14
|
el-dm-accordion,
|
|
15
15
|
el-dm-alert,
|
|
16
|
+
el-dm-art-atom,
|
|
17
|
+
el-dm-art-cat-stargazer,
|
|
18
|
+
el-dm-art-circular-gallery,
|
|
19
|
+
el-dm-art-color-spin,
|
|
20
|
+
el-dm-art-eclipse,
|
|
21
|
+
el-dm-art-flower-animation,
|
|
22
|
+
el-dm-art-moon,
|
|
23
|
+
el-dm-art-mountain,
|
|
24
|
+
el-dm-art-plasma-ball,
|
|
25
|
+
el-dm-art-snow,
|
|
26
|
+
el-dm-art-sun,
|
|
27
|
+
el-dm-art-synthwave-starfield,
|
|
16
28
|
el-dm-autocomplete,
|
|
17
29
|
el-dm-badge,
|
|
18
30
|
el-dm-bottom-navigation,
|
|
@@ -20,6 +32,7 @@ el-dm-bottom-sheet,
|
|
|
20
32
|
el-dm-breadcrumbs,
|
|
21
33
|
el-dm-button,
|
|
22
34
|
el-dm-card,
|
|
35
|
+
el-dm-cascader,
|
|
23
36
|
el-dm-chip,
|
|
24
37
|
el-dm-datepicker,
|
|
25
38
|
el-dm-dialog,
|
|
@@ -32,7 +45,9 @@ el-dm-menu,
|
|
|
32
45
|
el-dm-navbar,
|
|
33
46
|
el-dm-pagination,
|
|
34
47
|
el-dm-popover,
|
|
48
|
+
el-dm-pro-data-grid,
|
|
35
49
|
el-dm-progress,
|
|
50
|
+
el-dm-select,
|
|
36
51
|
el-dm-slider,
|
|
37
52
|
el-dm-stepper,
|
|
38
53
|
el-dm-switch,
|
|
@@ -11,10 +11,17 @@
|
|
|
11
11
|
@import "@duskmoon-dev/core/components";
|
|
12
12
|
@import "./element-theme-bridge.css";
|
|
13
13
|
|
|
14
|
-
/* CSS Art — decorative/animated visual effects */
|
|
15
|
-
@import "
|
|
16
|
-
@import "
|
|
17
|
-
@import "
|
|
18
|
-
@import "
|
|
19
|
-
@import "
|
|
20
|
-
@import "
|
|
14
|
+
/* CSS Art — decorative/animated visual effects from @duskmoon-dev/css-art */
|
|
15
|
+
@import "@duskmoon-dev/css-art/dist/art/atom.css";
|
|
16
|
+
@import "@duskmoon-dev/css-art/dist/art/cat-stargazer.css";
|
|
17
|
+
@import "@duskmoon-dev/css-art/dist/art/circular-gallery.css";
|
|
18
|
+
@import "@duskmoon-dev/css-art/dist/art/color-spin.css";
|
|
19
|
+
@import "@duskmoon-dev/css-art/dist/art/eclipse.css";
|
|
20
|
+
@import "@duskmoon-dev/css-art/dist/art/flower-animation.css";
|
|
21
|
+
@import "@duskmoon-dev/css-art/dist/art/gemini-input.css";
|
|
22
|
+
@import "@duskmoon-dev/css-art/dist/art/moon.css";
|
|
23
|
+
@import "@duskmoon-dev/css-art/dist/art/mountain.css";
|
|
24
|
+
@import "@duskmoon-dev/css-art/dist/art/plasma-ball.css";
|
|
25
|
+
@import "@duskmoon-dev/css-art/dist/art/snow.css";
|
|
26
|
+
@import "@duskmoon-dev/css-art/dist/art/sun.css";
|
|
27
|
+
@import "@duskmoon-dev/css-art/dist/art/synthwave-starfield.css";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "phoenix_duskmoon",
|
|
3
|
-
"version": "9.0.
|
|
3
|
+
"version": "9.0.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./priv/static/phoenix_duskmoon.js",
|
|
@@ -30,7 +30,9 @@
|
|
|
30
30
|
"registry": "https://registry.npmjs.org/"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
+
"@duskmoon-dev/art-elements": ">=0.9.0",
|
|
33
34
|
"@duskmoon-dev/core": ">=1.11.0",
|
|
35
|
+
"@duskmoon-dev/css-art": ">=1.12.0",
|
|
34
36
|
"@duskmoon-dev/elements": ">=0.5.0"
|
|
35
37
|
},
|
|
36
38
|
"devDependencies": {
|