@navette-js/panels 0.0.0-stage → 1.0.0-beta.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/LICENSE +21 -0
- package/README.md +8 -2
- package/THIRD-PARTY-NOTICES.md +12 -0
- package/dist/FILAMENT-LICENSE.md +21 -0
- package/dist/filament/css/filament/filament/app.css +2 -0
- package/dist/filament/fonts/INTER-LICENSE.txt +92 -0
- package/dist/filament/fonts/filament/filament/inter/index.css +1 -0
- package/dist/filament/fonts/filament/filament/inter/inter-cyrillic-ext-wght-normal-SP7Z6XGK.woff2 +0 -0
- package/dist/filament/fonts/filament/filament/inter/inter-cyrillic-wght-normal-DR6K5BQD.woff2 +0 -0
- package/dist/filament/fonts/filament/filament/inter/inter-greek-ext-wght-normal-A2J6H3EX.woff2 +0 -0
- package/dist/filament/fonts/filament/filament/inter/inter-greek-wght-normal-ZABHMKQG.woff2 +0 -0
- package/dist/filament/fonts/filament/filament/inter/inter-latin-ext-wght-normal-ZIT2UBIY.woff2 +0 -0
- package/dist/filament/fonts/filament/filament/inter/inter-latin-wght-normal-DIHYUR35.woff2 +0 -0
- package/dist/filament/fonts/filament/filament/inter/inter-vietnamese-wght-normal-VWEHJHBA.woff2 +0 -0
- package/dist/filament/js/filament/actions/actions.js +1 -0
- package/dist/filament/js/filament/filament/app.js +1 -0
- package/dist/filament/js/filament/filament/echo.js +13 -0
- package/dist/filament/js/filament/forms/components/builder.js +1 -0
- package/dist/filament/js/filament/forms/components/checkbox-list.js +1 -0
- package/dist/filament/js/filament/forms/components/code-editor.js +38 -0
- package/dist/filament/js/filament/forms/components/color-picker.js +1 -0
- package/dist/filament/js/filament/forms/components/date-time-picker.js +1 -0
- package/dist/filament/js/filament/forms/components/file-upload.js +116 -0
- package/dist/filament/js/filament/forms/components/js-field.js +1 -0
- package/dist/filament/js/filament/forms/components/key-value.js +1 -0
- package/dist/filament/js/filament/forms/components/markdown-editor.js +51 -0
- package/dist/filament/js/filament/forms/components/repeater.js +1 -0
- package/dist/filament/js/filament/forms/components/rich-editor.js +161 -0
- package/dist/filament/js/filament/forms/components/select.js +11 -0
- package/dist/filament/js/filament/forms/components/slider.js +1 -0
- package/dist/filament/js/filament/forms/components/tags-input.js +1 -0
- package/dist/filament/js/filament/forms/components/text-input/password-reveal.js +1 -0
- package/dist/filament/js/filament/forms/components/textarea.js +1 -0
- package/dist/filament/js/filament/forms/components/toggle-buttons.js +1 -0
- package/dist/filament/js/filament/notifications/notifications.js +1 -0
- package/dist/filament/js/filament/schemas/components/actions.js +1 -0
- package/dist/filament/js/filament/schemas/components/js-component.js +1 -0
- package/dist/filament/js/filament/schemas/components/tabs.js +1 -0
- package/dist/filament/js/filament/schemas/components/wizard.js +1 -0
- package/dist/filament/js/filament/schemas/schemas.js +1 -0
- package/dist/filament/js/filament/support/support.js +46 -0
- package/dist/filament/js/filament/tables/components/columns/checkbox.js +1 -0
- package/dist/filament/js/filament/tables/components/columns/select.js +11 -0
- package/dist/filament/js/filament/tables/components/columns/text-input.js +1 -0
- package/dist/filament/js/filament/tables/components/columns/toggle.js +1 -0
- package/dist/filament/js/filament/tables/tables.js +1 -0
- package/dist/filament/js/filament/widgets/components/chart.js +31 -0
- package/dist/filament/js/filament/widgets/components/js-widget.js +1 -0
- package/dist/filament/js/filament/widgets/components/stats-overview/stat/chart.js +20 -0
- package/dist/navette/navette/calendar.css +108 -0
- package/dist/navette/navette/motion.css +101 -0
- package/dist/navette/navette/motion.js +49 -0
- package/lib/auth.d.ts +61 -0
- package/lib/auth.js +142 -0
- package/lib/calendar.d.ts +82 -0
- package/lib/calendar.js +107 -0
- package/lib/index.d.ts +1619 -0
- package/lib/index.js +3487 -0
- package/lib/notifications.d.ts +76 -0
- package/lib/notifications.js +112 -0
- package/lib/topbar.d.ts +90 -0
- package/lib/topbar.js +241 -0
- package/package.json +59 -4
- package/resources/filament/LICENSE.md +21 -0
- package/resources/filament/README.md +2 -0
- package/resources/filament/packages/actions/resources/css/actions.css +30 -0
- package/resources/filament/packages/actions/resources/css/index.css +1 -0
- package/resources/filament/packages/forms/dist/index.css +1 -0
- package/resources/filament/packages/forms/resources/css/components/builder.css +206 -0
- package/resources/filament/packages/forms/resources/css/components/checkbox-list.css +55 -0
- package/resources/filament/packages/forms/resources/css/components/code-editor.css +79 -0
- package/resources/filament/packages/forms/resources/css/components/color-picker.css +17 -0
- package/resources/filament/packages/forms/resources/css/components/date-time-picker.css +127 -0
- package/resources/filament/packages/forms/resources/css/components/field.css +88 -0
- package/resources/filament/packages/forms/resources/css/components/file-upload/filepond-plugin-media-preview.css +104 -0
- package/resources/filament/packages/forms/resources/css/components/file-upload.css +199 -0
- package/resources/filament/packages/forms/resources/css/components/key-value.css +57 -0
- package/resources/filament/packages/forms/resources/css/components/markdown-editor.css +343 -0
- package/resources/filament/packages/forms/resources/css/components/modal-table-select.css +17 -0
- package/resources/filament/packages/forms/resources/css/components/radio.css +41 -0
- package/resources/filament/packages/forms/resources/css/components/repeater.css +401 -0
- package/resources/filament/packages/forms/resources/css/components/rich-editor.css +666 -0
- package/resources/filament/packages/forms/resources/css/components/select.css +13 -0
- package/resources/filament/packages/forms/resources/css/components/slider.css +54 -0
- package/resources/filament/packages/forms/resources/css/components/tags-input.css +33 -0
- package/resources/filament/packages/forms/resources/css/components/text-input.css +20 -0
- package/resources/filament/packages/forms/resources/css/components/textarea.css +26 -0
- package/resources/filament/packages/forms/resources/css/components/toggle-buttons.css +49 -0
- package/resources/filament/packages/forms/resources/css/index.css +32 -0
- package/resources/filament/packages/infolists/resources/css/components/code.css +21 -0
- package/resources/filament/packages/infolists/resources/css/components/color.css +34 -0
- package/resources/filament/packages/infolists/resources/css/components/entry.css +68 -0
- package/resources/filament/packages/infolists/resources/css/components/icon.css +39 -0
- package/resources/filament/packages/infolists/resources/css/components/image.css +161 -0
- package/resources/filament/packages/infolists/resources/css/components/key-value.css +24 -0
- package/resources/filament/packages/infolists/resources/css/components/repeatable.css +136 -0
- package/resources/filament/packages/infolists/resources/css/components/text.css +234 -0
- package/resources/filament/packages/infolists/resources/css/index.css +14 -0
- package/resources/filament/packages/notifications/resources/css/database-notifications.css +56 -0
- package/resources/filament/packages/notifications/resources/css/index.css +3 -0
- package/resources/filament/packages/notifications/resources/css/notification.css +109 -0
- package/resources/filament/packages/notifications/resources/css/notifications.css +29 -0
- package/resources/filament/packages/panels/resources/css/base.css +13 -0
- package/resources/filament/packages/panels/resources/css/components/global-search.css +93 -0
- package/resources/filament/packages/panels/resources/css/components/header.css +56 -0
- package/resources/filament/packages/panels/resources/css/components/layout.css +182 -0
- package/resources/filament/packages/panels/resources/css/components/logo.css +11 -0
- package/resources/filament/packages/panels/resources/css/components/page.css +60 -0
- package/resources/filament/packages/panels/resources/css/components/sidebar.css +311 -0
- package/resources/filament/packages/panels/resources/css/components/tenant-menu.css +49 -0
- package/resources/filament/packages/panels/resources/css/components/theme-switcher.css +15 -0
- package/resources/filament/packages/panels/resources/css/components/topbar.css +89 -0
- package/resources/filament/packages/panels/resources/css/components/user-menu.css +46 -0
- package/resources/filament/packages/panels/resources/css/index.css +40 -0
- package/resources/filament/packages/panels/resources/css/theme.css +2 -0
- package/resources/filament/packages/panels/resources/css/utilities.css +3 -0
- package/resources/filament/packages/panels/resources/css/widgets/account-widget.css +21 -0
- package/resources/filament/packages/panels/resources/css/widgets/filament-info-widget.css +21 -0
- package/resources/filament/packages/schemas/resources/css/components/actions.css +29 -0
- package/resources/filament/packages/schemas/resources/css/components/flex.css +106 -0
- package/resources/filament/packages/schemas/resources/css/components/form.css +7 -0
- package/resources/filament/packages/schemas/resources/css/components/fused-group.css +337 -0
- package/resources/filament/packages/schemas/resources/css/components/icon.css +11 -0
- package/resources/filament/packages/schemas/resources/css/components/image.css +12 -0
- package/resources/filament/packages/schemas/resources/css/components/section.css +24 -0
- package/resources/filament/packages/schemas/resources/css/components/tabs.css +77 -0
- package/resources/filament/packages/schemas/resources/css/components/text.css +77 -0
- package/resources/filament/packages/schemas/resources/css/components/unordered-list.css +15 -0
- package/resources/filament/packages/schemas/resources/css/components/wizard.css +177 -0
- package/resources/filament/packages/schemas/resources/css/index.css +12 -0
- package/resources/filament/packages/schemas/resources/css/schema.css +132 -0
- package/resources/filament/packages/support/dist/index.css +1 -0
- package/resources/filament/packages/support/resources/css/base.css +23 -0
- package/resources/filament/packages/support/resources/css/components/avatar.css +15 -0
- package/resources/filament/packages/support/resources/css/components/badge.css +90 -0
- package/resources/filament/packages/support/resources/css/components/breadcrumbs.css +25 -0
- package/resources/filament/packages/support/resources/css/components/button.css +214 -0
- package/resources/filament/packages/support/resources/css/components/callout.css +57 -0
- package/resources/filament/packages/support/resources/css/components/dropdown/header.css +21 -0
- package/resources/filament/packages/support/resources/css/components/dropdown/index.css +79 -0
- package/resources/filament/packages/support/resources/css/components/dropdown/list/index.css +7 -0
- package/resources/filament/packages/support/resources/css/components/dropdown/list/item.css +74 -0
- package/resources/filament/packages/support/resources/css/components/empty-state.css +67 -0
- package/resources/filament/packages/support/resources/css/components/fieldset.css +23 -0
- package/resources/filament/packages/support/resources/css/components/grid.css +511 -0
- package/resources/filament/packages/support/resources/css/components/icon-button.css +124 -0
- package/resources/filament/packages/support/resources/css/components/icon.css +31 -0
- package/resources/filament/packages/support/resources/css/components/input/checkbox.css +32 -0
- package/resources/filament/packages/support/resources/css/components/input/index.css +55 -0
- package/resources/filament/packages/support/resources/css/components/input/one-time-code.css +7 -0
- package/resources/filament/packages/support/resources/css/components/input/radio.css +11 -0
- package/resources/filament/packages/support/resources/css/components/input/select.css +154 -0
- package/resources/filament/packages/support/resources/css/components/input/wrapper.css +107 -0
- package/resources/filament/packages/support/resources/css/components/link.css +90 -0
- package/resources/filament/packages/support/resources/css/components/loading-indicator.css +3 -0
- package/resources/filament/packages/support/resources/css/components/loading-section.css +3 -0
- package/resources/filament/packages/support/resources/css/components/modal.css +494 -0
- package/resources/filament/packages/support/resources/css/components/pagination.css +160 -0
- package/resources/filament/packages/support/resources/css/components/section.css +234 -0
- package/resources/filament/packages/support/resources/css/components/tabs.css +70 -0
- package/resources/filament/packages/support/resources/css/components/toggle.css +60 -0
- package/resources/filament/packages/support/resources/css/components/tooltip.css +36 -0
- package/resources/filament/packages/support/resources/css/index.css +133 -0
- package/resources/filament/packages/support/resources/css/sortable.css +3 -0
- package/resources/filament/packages/support/resources/css/utilities.css +897 -0
- package/resources/filament/packages/tables/resources/css/actions.css +51 -0
- package/resources/filament/packages/tables/resources/css/cell.css +139 -0
- package/resources/filament/packages/tables/resources/css/column-manager.css +48 -0
- package/resources/filament/packages/tables/resources/css/columns/checkbox.css +54 -0
- package/resources/filament/packages/tables/resources/css/columns/color.css +76 -0
- package/resources/filament/packages/tables/resources/css/columns/icon.css +81 -0
- package/resources/filament/packages/tables/resources/css/columns/image.css +207 -0
- package/resources/filament/packages/tables/resources/css/columns/layout/grid.css +49 -0
- package/resources/filament/packages/tables/resources/css/columns/layout/panel.css +3 -0
- package/resources/filament/packages/tables/resources/css/columns/layout/split.css +35 -0
- package/resources/filament/packages/tables/resources/css/columns/layout/stack.css +29 -0
- package/resources/filament/packages/tables/resources/css/columns/select.css +36 -0
- package/resources/filament/packages/tables/resources/css/columns/summaries/icon-count.css +43 -0
- package/resources/filament/packages/tables/resources/css/columns/summaries/range.css +27 -0
- package/resources/filament/packages/tables/resources/css/columns/summaries/text.css +29 -0
- package/resources/filament/packages/tables/resources/css/columns/summaries/values.css +33 -0
- package/resources/filament/packages/tables/resources/css/columns/text-input.css +36 -0
- package/resources/filament/packages/tables/resources/css/columns/text.css +319 -0
- package/resources/filament/packages/tables/resources/css/columns/toggle.css +54 -0
- package/resources/filament/packages/tables/resources/css/container.css +311 -0
- package/resources/filament/packages/tables/resources/css/content.css +342 -0
- package/resources/filament/packages/tables/resources/css/empty-state.css +31 -0
- package/resources/filament/packages/tables/resources/css/group-header.css +54 -0
- package/resources/filament/packages/tables/resources/css/header-cell.css +224 -0
- package/resources/filament/packages/tables/resources/css/index.css +26 -0
- package/resources/filament/packages/tables/resources/css/row.css +47 -0
- package/resources/filament/packages/tables/resources/css/table.css +394 -0
- package/resources/filament/packages/widgets/resources/css/chart-widget.css +88 -0
- package/resources/filament/packages/widgets/resources/css/index.css +3 -0
- package/resources/filament/packages/widgets/resources/css/stats-overview-widget.css +67 -0
- package/resources/filament/packages/widgets/resources/css/widget.css +3 -0
- package/theme.css +17 -0
- package/views/components/logo.ejs +9 -0
- package/views/components/tenant-menu.ejs +13 -0
- package/views/components/user-menu.ejs +82 -0
- package/views/layout/base.ejs +129 -0
- package/views/layout/index.ejs +41 -0
- package/views/layout/simple.ejs +19 -0
- package/views/livewire/sidebar.ejs +123 -0
- package/views/livewire/topbar.ejs +47 -0
- package/views/pages/page.ejs +143 -0
- package/views/pages/simple.ejs +32 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
<%# Document HTML d'un panel — port de filament-panels::components.layout.base %>
|
|
2
|
+
<!DOCTYPE html>
|
|
3
|
+
<html lang="en" dir="ltr" class="fi">
|
|
4
|
+
<head>
|
|
5
|
+
<%- renderHook('panels::head.start', renderHookScopes) %>
|
|
6
|
+
<meta charset="utf-8" />
|
|
7
|
+
<meta name="csrf-token" content="<%- csrf %>" />
|
|
8
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
9
|
+
|
|
10
|
+
<% if (locals.favicon) { %><link rel="icon" href="<%= favicon %>" /><% } %>
|
|
11
|
+
|
|
12
|
+
<title>
|
|
13
|
+
<%= title %>
|
|
14
|
+
-
|
|
15
|
+
<%= brandName %>
|
|
16
|
+
</title>
|
|
17
|
+
|
|
18
|
+
<%- renderHook('panels::styles.before', renderHookScopes) %>
|
|
19
|
+
<style>
|
|
20
|
+
[x-cloak=''],
|
|
21
|
+
[x-cloak='x-cloak'],
|
|
22
|
+
[x-cloak='1'] {
|
|
23
|
+
display: none !important;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
[x-cloak='inline-flex'] {
|
|
27
|
+
display: inline-flex !important;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
@media (max-width: 1023px) {
|
|
31
|
+
[x-cloak='-lg'] {
|
|
32
|
+
display: none !important;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@media (min-width: 1024px) {
|
|
37
|
+
[x-cloak='lg'] {
|
|
38
|
+
display: none !important;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
</style>
|
|
42
|
+
|
|
43
|
+
<link href="<%- assetUrl('fonts/filament/filament/inter/index.css') %>" rel="stylesheet" data-navigate-track />
|
|
44
|
+
|
|
45
|
+
<%- colorVariables %>
|
|
46
|
+
|
|
47
|
+
<%# Thème compilé par l'application s'il existe, sinon la feuille par défaut de Filament %>
|
|
48
|
+
<link rel="stylesheet" href="<%- locals.theme ? theme : assetUrl('css/filament/filament/app.css') %>" data-navigate-track="reload" />
|
|
49
|
+
|
|
50
|
+
<% if (font.url) { %>
|
|
51
|
+
<% if (font.preconnect) { %><link rel="preconnect" href="<%- font.preconnect %>"><% } %>
|
|
52
|
+
<link href="<%= font.url %>" rel="stylesheet" />
|
|
53
|
+
<% } %>
|
|
54
|
+
|
|
55
|
+
<style>
|
|
56
|
+
:root {
|
|
57
|
+
--font-family: '<%- font.family %>';
|
|
58
|
+
--font-family-mono: 'ui-monospace';
|
|
59
|
+
--font-family-serif: 'ui-serif';
|
|
60
|
+
--sidebar-width: 20rem;
|
|
61
|
+
--sidebar-collapsed-width: 4.5rem;
|
|
62
|
+
--default-theme-mode: system;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
html.fi {
|
|
66
|
+
--livewire-progress-bar-color: var(--primary-500);
|
|
67
|
+
}
|
|
68
|
+
</style>
|
|
69
|
+
|
|
70
|
+
<%- renderHook('panels::styles.after', renderHookScopes) %>
|
|
71
|
+
<script>
|
|
72
|
+
const loadDarkMode = () => {
|
|
73
|
+
window.theme =
|
|
74
|
+
localStorage.getItem('filament:theme:mode') ?? 'system'
|
|
75
|
+
|
|
76
|
+
if (
|
|
77
|
+
window.theme === 'dark' ||
|
|
78
|
+
(window.theme === 'system' &&
|
|
79
|
+
window.matchMedia('(prefers-color-scheme: dark)')
|
|
80
|
+
.matches)
|
|
81
|
+
) {
|
|
82
|
+
document.documentElement.classList.add('dark')
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
loadDarkMode()
|
|
87
|
+
|
|
88
|
+
document.addEventListener('livewire:navigated', loadDarkMode)
|
|
89
|
+
</script>
|
|
90
|
+
|
|
91
|
+
<% if (locals.themeCss) { %><style data-navette-theme><%- themeCss %></style><% } %>
|
|
92
|
+
|
|
93
|
+
<% if (locals.motion) { %><link rel="stylesheet" href="<%- assetUrl('navette/motion.css') %>" data-navigate-track /><% } %>
|
|
94
|
+
<link rel="stylesheet" href="<%- assetUrl('navette/calendar.css') %>" data-navigate-track />
|
|
95
|
+
|
|
96
|
+
<%- wireStyles %>
|
|
97
|
+
<%- renderHook('panels::head.end', renderHookScopes) %>
|
|
98
|
+
</head>
|
|
99
|
+
|
|
100
|
+
<body class="<%- cls(['fi-body', 'fi-panel-' + panelId, bodyClass]) %>">
|
|
101
|
+
<%- renderHook('panels::body.start', renderHookScopes) %>
|
|
102
|
+
<%- body %>
|
|
103
|
+
|
|
104
|
+
<%- notifications %>
|
|
105
|
+
|
|
106
|
+
<%- renderHook('panels::scripts.before', renderHookScopes) %>
|
|
107
|
+
<script>
|
|
108
|
+
window.filamentData = []
|
|
109
|
+
</script>
|
|
110
|
+
|
|
111
|
+
<% for (const src of ['js/filament/actions/actions.js', 'js/filament/notifications/notifications.js', 'js/filament/schemas/schemas.js', 'js/filament/support/support.js', 'js/filament/tables/tables.js', 'js/filament/filament/echo.js', 'js/filament/filament/app.js']) { %>
|
|
112
|
+
<script src="<%- assetUrl(src) %>"<% if (locals.spa !== false) { %> data-navigate-once data-navigate-track<% } %>></script>
|
|
113
|
+
<% } %>
|
|
114
|
+
|
|
115
|
+
<style>
|
|
116
|
+
:root {
|
|
117
|
+
}
|
|
118
|
+
</style>
|
|
119
|
+
|
|
120
|
+
<script>
|
|
121
|
+
loadDarkMode()
|
|
122
|
+
</script>
|
|
123
|
+
|
|
124
|
+
<%- wireScripts %>
|
|
125
|
+
<%- renderHook('panels::scripts.after', renderHookScopes) %>
|
|
126
|
+
<%- renderHook('panels::body.end', renderHookScopes) %>
|
|
127
|
+
<% if (locals.motion) { %><script src="<%- assetUrl('navette/motion.js') %>" data-navigate-once defer></script><% } %>
|
|
128
|
+
</body>
|
|
129
|
+
</html>
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<%# Mise en page d'un panel — port de filament-panels::components.layout.index %>
|
|
2
|
+
<% const collapsible = isSidebarCollapsibleOnDesktop || isSidebarFullyCollapsibleOnDesktop; %>
|
|
3
|
+
<a x-data="{}" x-bind:inert="$store.sidebar.isOpenMobile" href="#fi-main-content" class="fi-skip-link fi-sr-only">
|
|
4
|
+
<%= t('filament-panels::layout.skip_to_content.label') %>
|
|
5
|
+
</a>
|
|
6
|
+
|
|
7
|
+
<% if (topbar) { %>
|
|
8
|
+
<%- renderHook('panels::topbar.before', renderHookScopes) %>
|
|
9
|
+
<%- topbar %>
|
|
10
|
+
<%- renderHook('panels::topbar.after', renderHookScopes) %>
|
|
11
|
+
<% } else if (hasNavigation) { %>
|
|
12
|
+
<div x-data="{}" x-bind:inert="$store.sidebar.isOpenMobile"<% if (isSidebarFullyCollapsibleOnDesktop) { %> x-bind:class="{ 'lg:fi-hidden': $store.sidebar.isOpen }"<% } %> class="<%- cls(['fi-layout-sidebar-toggle-btn-ctn', { 'lg:fi-hidden': !isSidebarFullyCollapsibleOnDesktop }]) %>">
|
|
13
|
+
<%- view('filament::components.icon-button', {
|
|
14
|
+
iconName: 'o-bars-3', iconSize: 'lg', label: t('filament-panels::layout.actions.sidebar.expand.label'), className: 'fi-layout-sidebar-toggle-btn',
|
|
15
|
+
extra: attrs({ 'x-cloak': 'x-cloak', 'x-data': '{}', 'aria-controls': 'fi-main-sidebar', 'x-bind:aria-expanded': '$store.sidebar.isOpen', 'x-on:click': '$store.sidebar.open($event.currentTarget)' }),
|
|
16
|
+
}) %>
|
|
17
|
+
</div>
|
|
18
|
+
<% } %>
|
|
19
|
+
|
|
20
|
+
<div class="fi-layout">
|
|
21
|
+
<%- renderHook('panels::layout.start', renderHookScopes) %>
|
|
22
|
+
<% if (hasNavigation) { %>
|
|
23
|
+
<div x-cloak x-data="{}" x-on:click="$store.sidebar.close()" x-show="$store.sidebar.isOpen" x-transition.opacity.300ms class="fi-sidebar-close-overlay"></div>
|
|
24
|
+
|
|
25
|
+
<%- sidebar %>
|
|
26
|
+
<% } %>
|
|
27
|
+
|
|
28
|
+
<div x-data="filamentSidebarBackground" x-bind:inert="$store.sidebar.isOpenMobile && ! hasOpenModal"<% if (collapsible) { %> x-bind:class="{
|
|
29
|
+
'fi-main-ctn-sidebar-open': $store.sidebar.isOpen,
|
|
30
|
+
}" x-bind:style="'display: flex; opacity:1;'"<% } else if (!(hasTopNavigation || !hasNavigation)) { %> x-bind:style="'display: flex; opacity:1;'"<% } %> class="fi-main-ctn">
|
|
31
|
+
<%- renderHook('panels::content.before', renderHookScopes) %>
|
|
32
|
+
<main id="fi-main-content" tabindex="-1" class="fi-main fi-width-<%- maxContentWidth %>">
|
|
33
|
+
<%- renderHook('panels::content.start', renderHookScopes) %>
|
|
34
|
+
<%- slot %>
|
|
35
|
+
<%- renderHook('panels::content.end', renderHookScopes) %>
|
|
36
|
+
</main>
|
|
37
|
+
<%- renderHook('panels::content.after', renderHookScopes) %>
|
|
38
|
+
<%- renderHook('panels::footer', renderHookScopes) %>
|
|
39
|
+
</div>
|
|
40
|
+
<%- renderHook('panels::layout.end', renderHookScopes) %>
|
|
41
|
+
</div>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<%# Mise en page « simple » — port de filament-panels::components.layout.simple %>
|
|
2
|
+
<div class="fi-simple-layout">
|
|
3
|
+
<% if (locals.header) { %>
|
|
4
|
+
<a href="#fi-main-content" class="fi-skip-link fi-sr-only">
|
|
5
|
+
<%= t('filament-panels::layout.skip_to_content.label') %>
|
|
6
|
+
</a>
|
|
7
|
+
<% } %>
|
|
8
|
+
<%- renderHook('panels::simple-layout.start', renderHookScopes) %>
|
|
9
|
+
<% if (locals.header) { %>
|
|
10
|
+
<div class="fi-simple-layout-header"><%- header %></div>
|
|
11
|
+
<% } %>
|
|
12
|
+
<div class="fi-simple-main-ctn">
|
|
13
|
+
<main id="fi-main-content" tabindex="-1" class="fi-simple-main fi-width-<%- locals.maxContentWidth ?? 'lg' %>">
|
|
14
|
+
<%- slot %>
|
|
15
|
+
</main>
|
|
16
|
+
</div>
|
|
17
|
+
<%- renderHook('panels::footer', renderHookScopes) %>
|
|
18
|
+
<%- renderHook('panels::simple-layout.end', renderHookScopes) %>
|
|
19
|
+
</div>
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
<%# Sidebar — port de filament-panels::livewire.sidebar, components.sidebar.group et components.sidebar.item %>
|
|
2
|
+
<% const collapsible = isSidebarCollapsibleOnDesktop || isSidebarFullyCollapsibleOnDesktop; %>
|
|
3
|
+
<div>
|
|
4
|
+
<div x-data="filamentSidebar({
|
|
5
|
+
hasTopNavigation: <%= hasTopNavigation ? 'true' : 'false' %>,
|
|
6
|
+
isSidebarCollapsibleOnDesktop: <%= isSidebarCollapsibleOnDesktop ? 'true' : 'false' %>,
|
|
7
|
+
isSidebarFullyCollapsibleOnDesktop: <%= isSidebarFullyCollapsibleOnDesktop ? 'true' : 'false' %>,
|
|
8
|
+
})" <% if (collapsible) { %>x-cloak<% } else { %>x-cloak="-lg"<% } %> x-bind:class="{ 'fi-sidebar-open': $store.sidebar.isOpen }" x-bind:inert="isHidden" x-effect="focusInitialNavigation()" x-on:keydown.tab="handleTab($event)" x-on:keydown.escape.document="handleEscape($event)" id="fi-main-sidebar" class="fi-sidebar fi-main-sidebar">
|
|
9
|
+
<%- renderHook('panels::sidebar.start') %>
|
|
10
|
+
<div class="fi-sidebar-header-ctn">
|
|
11
|
+
<header class="fi-sidebar-header">
|
|
12
|
+
<% if (!hasTopbar && isSidebarCollapsibleOnDesktop) { %>
|
|
13
|
+
<%- view('filament::components.icon-button', {
|
|
14
|
+
iconName: 'o-chevron-right', iconSize: 'lg', label: t('filament-panels::layout.actions.sidebar.expand.label'), className: 'fi-sidebar-open-collapse-sidebar-btn',
|
|
15
|
+
extra: attrs({ 'x-cloak': 'x-cloak', 'x-data': '{}', 'aria-controls': 'fi-main-sidebar', 'x-bind:aria-expanded': '$store.sidebar.isOpen', 'x-on:click': '$store.sidebar.open()', 'x-show': '! $store.sidebar.isOpen' }),
|
|
16
|
+
}) %>
|
|
17
|
+
<% } %>
|
|
18
|
+
<% if (!hasTopbar && collapsible) { %>
|
|
19
|
+
<%- view('filament::components.icon-button', {
|
|
20
|
+
iconName: 'o-chevron-left', iconSize: 'lg', label: t('filament-panels::layout.actions.sidebar.collapse.label'), className: 'fi-sidebar-close-collapse-sidebar-btn',
|
|
21
|
+
extra: attrs({ 'x-cloak': 'x-cloak', 'x-data': '{}', 'aria-controls': 'fi-main-sidebar', 'x-bind:aria-expanded': '$store.sidebar.isOpen', 'x-on:click': '$store.sidebar.close()', 'x-show': '$store.sidebar.isOpen' }),
|
|
22
|
+
}) %>
|
|
23
|
+
<% } %>
|
|
24
|
+
<%- renderHook('panels::sidebar.logo.before') %>
|
|
25
|
+
<div<% if (collapsible) { %> x-show="$store.sidebar.isOpen"<% } %> class="fi-sidebar-header-logo-ctn">
|
|
26
|
+
<a href="<%= homeUrl %>"<% if (spa) { %> wire:navigate<% } %>>
|
|
27
|
+
<%- view('filament-panels::components.logo', { brand }) %>
|
|
28
|
+
</a>
|
|
29
|
+
</div>
|
|
30
|
+
<%- renderHook('panels::sidebar.logo.after') %>
|
|
31
|
+
</header>
|
|
32
|
+
</div>
|
|
33
|
+
<% if (tenantMenu || globalSearch) { %>
|
|
34
|
+
<div<% if (!tenantMenu && collapsible) { %> x-show="$store.sidebar.isOpen"<% } %> class="fi-sidebar-header-controls">
|
|
35
|
+
<% if (tenantMenu) { %><%- tenantMenu %><% } %>
|
|
36
|
+
<% if (globalSearch) { %> <div<% if (collapsible) { %> x-show="$store.sidebar.isOpen"<% } %>><%- globalSearch %></div>
|
|
37
|
+
<% } %>
|
|
38
|
+
</div>
|
|
39
|
+
<% } %>
|
|
40
|
+
|
|
41
|
+
<nav aria-label="<%= t('filament-panels::layout.navigation.label') %>" class="fi-sidebar-nav">
|
|
42
|
+
<%- renderHook('panels::sidebar.nav.start') %>
|
|
43
|
+
<ul class="fi-sidebar-nav-groups">
|
|
44
|
+
<% for (const group of groups) { %>
|
|
45
|
+
<li x-data="{ label: <%- js(group.label ?? '') %> }" data-group-label="<%= group.label ?? '' %>" x-bind:class="{ 'fi-collapsed': $store.sidebar.groupIsCollapsed(label) }" class="<%- cls(['fi-sidebar-group', { 'fi-active': group.isActive }, 'fi-collapsible']) %>">
|
|
46
|
+
<% if (group.label) { %>
|
|
47
|
+
<div x-on:click="$store.sidebar.toggleCollapsedGroup(label)" class="fi-sidebar-group-btn">
|
|
48
|
+
<span class="fi-sidebar-group-label">
|
|
49
|
+
<%= group.label %>
|
|
50
|
+
</span>
|
|
51
|
+
<%- view('filament::components.icon-button', {
|
|
52
|
+
iconName: 'm-chevron-up', label: group.label, className: 'fi-sidebar-group-collapse-btn',
|
|
53
|
+
extra: attrs({ 'aria-controls': group.itemsId, 'x-bind:aria-expanded': '! $store.sidebar.groupIsCollapsed(label)', 'x-on:click.stop': '$store.sidebar.toggleCollapsedGroup(label)' }),
|
|
54
|
+
}) %>
|
|
55
|
+
</div>
|
|
56
|
+
<% } %>
|
|
57
|
+
<ul<% if (group.label) { %> id="<%= group.itemsId %>" x-show="! $store.sidebar.groupIsCollapsed(label)" x-collapse.duration.200ms<% } %> class="fi-sidebar-group-items">
|
|
58
|
+
<% for (const item of group.items) { %>
|
|
59
|
+
<li class="<%- cls(['fi-sidebar-item', { 'fi-active': item.isActive }, 'fi-sidebar-item-has-url']) %>">
|
|
60
|
+
<a href="<%= item.url %>"<% if (spa) { %> wire:navigate<% } %><% if (item.isActive) { %> aria-current="page"<% } %> x-on:click="$store.sidebar.isMobile && $store.sidebar.close()" class="fi-sidebar-item-btn">
|
|
61
|
+
<% if (item.icon) { %><%- icon(item.icon, { size: 'lg', attributes: attrs({ class: 'fi-sidebar-item-icon' }) }) %><% } %>
|
|
62
|
+
<span class="fi-sidebar-item-label">
|
|
63
|
+
<%= item.label %>
|
|
64
|
+
</span>
|
|
65
|
+
<% if (item.badge !== null) { %>
|
|
66
|
+
<span class="fi-sidebar-item-badge-ctn">
|
|
67
|
+
<%- view('filament::components.badge', { label: item.badge, colorClasses: item.badgeColorClasses }) %>
|
|
68
|
+
</span>
|
|
69
|
+
<% } %>
|
|
70
|
+
</a>
|
|
71
|
+
</li>
|
|
72
|
+
<% } %>
|
|
73
|
+
</ul>
|
|
74
|
+
</li>
|
|
75
|
+
<% } %>
|
|
76
|
+
</ul>
|
|
77
|
+
|
|
78
|
+
<script>
|
|
79
|
+
if (! window.Alpine?.store('sidebar')) {
|
|
80
|
+
let collapsedGroups = JSON.parse(
|
|
81
|
+
localStorage.getItem('filament:sidebar:collapsed_groups'),
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
if (collapsedGroups === null || collapsedGroups === 'null') {
|
|
85
|
+
collapsedGroups = []
|
|
86
|
+
|
|
87
|
+
localStorage.setItem(
|
|
88
|
+
'filament:sidebar:collapsed_groups',
|
|
89
|
+
JSON.stringify(collapsedGroups),
|
|
90
|
+
)
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
document.currentScript
|
|
94
|
+
.closest('nav')
|
|
95
|
+
.querySelectorAll('.fi-sidebar-group')
|
|
96
|
+
.forEach((group) => {
|
|
97
|
+
if (! collapsedGroups.includes(group.dataset.groupLabel)) {
|
|
98
|
+
return
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Hide collapsed groups before Alpine initializes to avoid a flash.
|
|
102
|
+
group.querySelector('.fi-sidebar-group-items').style.display = 'none'
|
|
103
|
+
group.classList.add('fi-collapsed')
|
|
104
|
+
})
|
|
105
|
+
}
|
|
106
|
+
</script>
|
|
107
|
+
<%- renderHook('panels::sidebar.nav.end') %>
|
|
108
|
+
</nav>
|
|
109
|
+
|
|
110
|
+
<% if (databaseNotifications || userMenu) { %>
|
|
111
|
+
<div class="fi-sidebar-footer">
|
|
112
|
+
<%- databaseNotifications ?? '' %>
|
|
113
|
+
<%- userMenu ?? '' %>
|
|
114
|
+
</div>
|
|
115
|
+
<% } %>
|
|
116
|
+
<%# Comme Filament : après le pied de sidebar, pas dedans. %>
|
|
117
|
+
<%- renderHook('panels::sidebar.footer') %>
|
|
118
|
+
</div>
|
|
119
|
+
|
|
120
|
+
<div wire:partial="action-modals" x-data="filamentActionModals({
|
|
121
|
+
livewireId: <%- js(livewireId) %>,
|
|
122
|
+
})" style="height: 0"></div>
|
|
123
|
+
</div>
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<%# Barre du haut — port de filament-panels::livewire.topbar et components.topbar.item %>
|
|
2
|
+
<div x-data="filamentSidebarBackground" x-bind:inert="$store.sidebar.isOpenMobile && ! hasOpenModal" class="fi-topbar-ctn" ><nav aria-label="<%= t('filament-panels::layout.topbar.label') %>" class="fi-topbar" >
|
|
3
|
+
<%- renderHook('panels::topbar.start') %>
|
|
4
|
+
<% if (hasNavigation) { %>
|
|
5
|
+
<%- view('filament::components.icon-button', {
|
|
6
|
+
iconName: 'o-bars-3', iconSize: 'lg', label: t('filament-panels::layout.actions.sidebar.expand.label'), className: 'fi-topbar-open-sidebar-btn',
|
|
7
|
+
extra: attrs({ 'x-cloak': 'x-cloak', 'x-data': '{}', 'aria-controls': 'fi-main-sidebar', 'x-bind:aria-expanded': '$store.sidebar.isOpen', 'x-on:click': '$store.sidebar.open($event.currentTarget)', 'x-show': '! $store.sidebar.isOpen' }),
|
|
8
|
+
}) %><%- view('filament::components.icon-button', {
|
|
9
|
+
iconName: 'o-x-mark', iconSize: 'lg', label: t('filament-panels::layout.actions.sidebar.collapse.label'), className: 'fi-topbar-close-sidebar-btn',
|
|
10
|
+
extra: attrs({ 'x-cloak': 'x-cloak', 'x-data': '{}', 'aria-controls': 'fi-main-sidebar', 'x-bind:aria-expanded': '$store.sidebar.isOpen', 'x-on:click': '$store.sidebar.close()', 'x-show': '$store.sidebar.isOpen' }),
|
|
11
|
+
}) %>
|
|
12
|
+
<% } %>
|
|
13
|
+
<div class="fi-topbar-start">
|
|
14
|
+
<% if (isSidebarCollapsibleOnDesktop || isSidebarFullyCollapsibleOnDesktop) { %>
|
|
15
|
+
<div x-show="$store.sidebar.isOpen || <%= isSidebarCollapsibleOnDesktop ? 'true' : 'false' %>" class="fi-topbar-collapse-sidebar-btn-ctn" >
|
|
16
|
+
<% if (isSidebarCollapsibleOnDesktop) { %><%- view('filament::components.icon-button', {
|
|
17
|
+
iconName: 'o-chevron-right', iconSize: 'lg', label: t('filament-panels::layout.actions.sidebar.expand.label'), className: 'fi-topbar-open-collapse-sidebar-btn',
|
|
18
|
+
extra: attrs({ 'x-cloak': 'x-cloak', 'x-data': '{}', 'aria-controls': 'fi-main-sidebar', 'x-bind:aria-expanded': '$store.sidebar.isOpen', 'x-on:click': '$store.sidebar.open()', 'x-show': '! $store.sidebar.isOpen' }),
|
|
19
|
+
}) %><% } %><%- view('filament::components.icon-button', {
|
|
20
|
+
iconName: 'o-chevron-left', iconSize: 'lg', label: t('filament-panels::layout.actions.sidebar.collapse.label'), className: 'fi-topbar-close-collapse-sidebar-btn',
|
|
21
|
+
extra: attrs({ 'x-cloak': 'x-cloak', 'x-data': '{}', 'aria-controls': 'fi-main-sidebar', 'x-bind:aria-expanded': '$store.sidebar.isOpen', 'x-on:click': '$store.sidebar.close()', 'x-show': '$store.sidebar.isOpen' }),
|
|
22
|
+
}) %>
|
|
23
|
+
</div>
|
|
24
|
+
<% } %>
|
|
25
|
+
<%- renderHook('panels::topbar.logo.before') %><a href="<%= homeUrl %>"<% if (spa) { %> wire:navigate<% } %>><%- view('filament-panels::components.logo', { brand }) %></a><%- renderHook('panels::topbar.logo.after') %>
|
|
26
|
+
</div>
|
|
27
|
+
<% if (tenantMenu) { %><%- tenantMenu %><% } %>
|
|
28
|
+
<% if (topNavigation) { %>
|
|
29
|
+
<ul class="fi-topbar-nav-groups">
|
|
30
|
+
<% for (const group of topNavigation) { %>
|
|
31
|
+
<% if (group.label) { %>
|
|
32
|
+
<div x-data="filamentDropdown({ isMenu: true })" class="fi-dropdown" ><div x-on:mousedown="if ($event.button === 0) toggle($event)" class="fi-dropdown-trigger" ><li class="<%- cls(['fi-topbar-item', { 'fi-active': group.isActive }]) %>"><button type="button" class="fi-topbar-item-btn"><span class="fi-topbar-item-label"> <%= group.label %> </span><%- icon('m-chevron-down', { attributes: attrs({ class: 'fi-topbar-group-toggle-icon' }) }) %></button></li></div><div x-cloak x-float.placement.bottom-start.flip.teleport.offset="{ offset: 8, }" x-ref="panel" x-transition:enter-start="fi-opacity-0" x-transition:leave-end="fi-opacity-0" role="menu" class="fi-dropdown-panel " style="" ><div class="fi-dropdown-list"><% for (const item of group.items) { %><a href="<%= item.url %>"<% if (spa) { %> wire:navigate<% } %><% if (item.isActive) { %> aria-current="page"<% } %> class="<%- cls(['fi-dropdown-list-item', ...item.colorClasses]) %>" role="menuitem" tabindex="-1"><% if (item.icon) { %><%- icon(item.icon, item.isActive ? { attributes: attrs({ class: 'fi-color fi-color-primary' }) } : {}) %><% } %><span class="fi-dropdown-list-item-label"><%= item.label %></span><% if (item.badge !== null) { %><%- view('filament::components.badge', { label: item.badge, colorClasses: item.badgeColorClasses }) %><% } %></a><% } %></div></div></div>
|
|
33
|
+
<% } else { %>
|
|
34
|
+
<% for (const item of group.items) { %><li class="<%- cls(['fi-topbar-item', { 'fi-active': item.isActive }]) %>"><a href="<%= item.url %>"<% if (spa) { %> wire:navigate<% } %><% if (item.isActive) { %> aria-current="page"<% } %> class="fi-topbar-item-btn"><% if (item.icon) { %><%- icon(item.icon, { attributes: attrs({ class: 'fi-topbar-item-icon' }) }) %><% } %><span class="fi-topbar-item-label"> <%= item.label %> </span><% if (item.badge !== null) { %><%- view('filament::components.badge', { label: item.badge, colorClasses: item.badgeColorClasses }) %><% } %></a></li><% } %>
|
|
35
|
+
<% } %>
|
|
36
|
+
<% } %>
|
|
37
|
+
</ul>
|
|
38
|
+
<% } %>
|
|
39
|
+
<div x-persist="<%= persistKey %>" class="fi-topbar-end" >
|
|
40
|
+
<%- renderHook('panels::global-search.before') %><%- globalSearch ?? '' %><%- renderHook('panels::global-search.after') %>
|
|
41
|
+
<%- databaseNotifications ?? '' %>
|
|
42
|
+
<%- userMenu ?? '' %>
|
|
43
|
+
</div>
|
|
44
|
+
<%- renderHook('panels::topbar.end') %>
|
|
45
|
+
</nav><div wire:partial="action-modals" x-data="filamentActionModals({
|
|
46
|
+
livewireId: <%- js(livewireId) %>,
|
|
47
|
+
})" style="height: 0"></div></div>
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
<%# Page d'un panel — port de filament-panels::components.page.index, components.header.index et filament::components.breadcrumbs %>
|
|
2
|
+
<% const beforeHeaderActions = renderHook('panels::page.header.actions.before', renderHookScopes), afterHeaderActions = renderHook('panels::page.header.actions.after', renderHookScopes); %>
|
|
3
|
+
<% const subNavigation = locals.subNavigation ?? []; const activeSubItem = subNavigation.find((item) => item.active) ?? subNavigation[0]; const subNavigationPosition = locals.subNavigationPosition ?? 'top'; %>
|
|
4
|
+
<div class="<%- cls(['fi-page', subNavigation.length ? `fi-page-has-sub-navigation fi-page-has-sub-navigation-${subNavigationPosition}` : null, ...(locals.pageClasses ?? [])]) %>">
|
|
5
|
+
<%- renderHook('panels::page.start', renderHookScopes) %>
|
|
6
|
+
<div class="fi-page-header-main-ctn">
|
|
7
|
+
<% if (subNavigation.length) { %>
|
|
8
|
+
<%# Sous-navigation : menu déroulant sur mobile ; sur grand écran, onglets (top) ou colonne (start, end) %>
|
|
9
|
+
<div class="fi-page-main-sub-navigation-mobile-menu-render-hook-ctn"><%- renderHook('panels::page.sub-navigation.module-menu.before', renderHookScopes) %></div>
|
|
10
|
+
<div x-data="filamentDropdown({ isMenu: true })" class="fi-dropdown fi-page-sub-navigation-dropdown">
|
|
11
|
+
<div x-on:mousedown="if ($event.button === 0) toggle($event)" class="fi-dropdown-trigger">
|
|
12
|
+
<button class="fi-btn fi-size-md" type="button" wire:loading.attr="aria-disabled" wire:loading.class="fi-disabled"><%= activeSubItem.label %><%- icon('m-chevron-down') %></button>
|
|
13
|
+
</div>
|
|
14
|
+
<div x-cloak x-float.placement.bottom-start.flip.offset="{ offset: 8, }" x-ref="panel" x-transition:enter-start="fi-opacity-0" x-transition:leave-end="fi-opacity-0" role="menu" class="fi-dropdown-panel fi-width-xs" style="">
|
|
15
|
+
<div class="fi-dropdown-list">
|
|
16
|
+
<% for (const item of subNavigation) { %>
|
|
17
|
+
<a href="<%= item.url %>" wire:navigate class="fi-dropdown-list-item" role="menuitem" tabindex="-1"<% if (item.active) { %> aria-current="page"<% } %>><% if (item.icon) { %><%- icon(item.icon) %><% } %><span class="fi-dropdown-list-item-label"><%= item.label %></span></a>
|
|
18
|
+
<% } %>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
<div class="fi-page-main-sub-navigation-mobile-menu-render-hook-ctn"><%- renderHook('panels::page.sub-navigation.module-menu.after', renderHookScopes) %></div>
|
|
23
|
+
<% } %>
|
|
24
|
+
<header class="<%- cls(['fi-header', { 'fi-header-has-breadcrumbs': breadcrumbs.length }]) %>">
|
|
25
|
+
<div>
|
|
26
|
+
<% if (breadcrumbs.length) { %>
|
|
27
|
+
<nav class="fi-breadcrumbs" aria-label="<%= t('filament::components/breadcrumbs.label') %>">
|
|
28
|
+
<ol class="fi-breadcrumbs-list">
|
|
29
|
+
<% breadcrumbs.forEach((crumb, i) => { %>
|
|
30
|
+
<li class="fi-breadcrumbs-item">
|
|
31
|
+
<% if (i > 0) { %>
|
|
32
|
+
<%- icon('m-chevron-right', { attributes: attrs({ 'aria-hidden': 'true', class: 'fi-breadcrumbs-item-separator fi-ltr' }) }) %>
|
|
33
|
+
<%- icon('m-chevron-left', { attributes: attrs({ 'aria-hidden': 'true', class: 'fi-breadcrumbs-item-separator fi-rtl' }) }) %>
|
|
34
|
+
<% } %>
|
|
35
|
+
<% if (crumb.url) { %>
|
|
36
|
+
<a href="<%= crumb.url %>" wire:navigate class="fi-breadcrumbs-item-label">
|
|
37
|
+
<%= crumb.label %>
|
|
38
|
+
</a>
|
|
39
|
+
<% } else { %>
|
|
40
|
+
<span<% if (i === breadcrumbs.length - 1) { %> aria-current="page"<% } %> class="fi-breadcrumbs-item-label">
|
|
41
|
+
<%= crumb.label %>
|
|
42
|
+
</span>
|
|
43
|
+
<% } %>
|
|
44
|
+
</li>
|
|
45
|
+
<% }) %>
|
|
46
|
+
</ol>
|
|
47
|
+
</nav>
|
|
48
|
+
<% } %>
|
|
49
|
+
|
|
50
|
+
<%- renderHook('panels::page.header.heading.before', renderHookScopes) %>
|
|
51
|
+
<h1 class="fi-header-heading">
|
|
52
|
+
<%= heading %>
|
|
53
|
+
</h1>
|
|
54
|
+
<%- renderHook('panels::page.header.heading.after', renderHookScopes) %>
|
|
55
|
+
</div>
|
|
56
|
+
|
|
57
|
+
<%# Comme Filament : le conteneur existe dès qu'il y a une action ou qu'un des deux emplacements rend quelque chose. %>
|
|
58
|
+
<% if (headerActions.length || (beforeHeaderActions + afterHeaderActions).trim() !== '') { %>
|
|
59
|
+
<div class="fi-header-actions-ctn">
|
|
60
|
+
<%- beforeHeaderActions %>
|
|
61
|
+
<% if (headerActions.length) { %>
|
|
62
|
+
<div class="fi-ac fi-align-start" wire:key="<%= livewireId %>.header-actions.<%- headerActionsKey %>">
|
|
63
|
+
<%- headerActions.join('') %>
|
|
64
|
+
</div>
|
|
65
|
+
<% } %>
|
|
66
|
+
<%- afterHeaderActions %>
|
|
67
|
+
</div>
|
|
68
|
+
<% } %>
|
|
69
|
+
</header>
|
|
70
|
+
|
|
71
|
+
<div class="fi-page-main">
|
|
72
|
+
<% if (subNavigation.length && subNavigationPosition === 'start') { %>
|
|
73
|
+
<%- renderHook('panels::page.sub-navigation.start.before', renderHookScopes) %>
|
|
74
|
+
<div class="fi-page-sub-navigation-sidebar-ctn">
|
|
75
|
+
<%- renderHook('panels::page.sub-navigation.sidebar.before', renderHookScopes) %>
|
|
76
|
+
<ul class="fi-page-sub-navigation-sidebar">
|
|
77
|
+
<li x-data="{ label: 'sub_navigation_' }" data-group-label="sub_navigation_" x-bind:class="{ 'fi-collapsed': $store.sidebar.groupIsCollapsed(label) }" class="<%- cls(['fi-sidebar-group', { 'fi-active': subNavigation.some((item) => item.active) }, 'fi-collapsible']) %>">
|
|
78
|
+
<ul class="fi-sidebar-group-items">
|
|
79
|
+
<% for (const item of subNavigation) { %>
|
|
80
|
+
<li class="<%- cls(['fi-sidebar-item', { 'fi-active': item.active }, 'fi-sidebar-item-has-url']) %>">
|
|
81
|
+
<a href="<%= item.url %>" wire:navigate<% if (item.active) { %> aria-current="page"<% } %> x-on:click="$store.sidebar.isMobile && $store.sidebar.close()" class="fi-sidebar-item-btn">
|
|
82
|
+
<% if (item.icon) { %><%- icon(item.icon, { size: 'lg', attributes: attrs({ class: 'fi-sidebar-item-icon' }) }) %><% } %>
|
|
83
|
+
<span class="fi-sidebar-item-label">
|
|
84
|
+
<%= item.label %>
|
|
85
|
+
</span>
|
|
86
|
+
</a>
|
|
87
|
+
</li>
|
|
88
|
+
<% } %>
|
|
89
|
+
</ul>
|
|
90
|
+
</li>
|
|
91
|
+
</ul>
|
|
92
|
+
<%- renderHook('panels::page.sub-navigation.sidebar.after', renderHookScopes) %>
|
|
93
|
+
</div>
|
|
94
|
+
<%- renderHook('panels::page.sub-navigation.start.after', renderHookScopes) %>
|
|
95
|
+
<% } %>
|
|
96
|
+
<% if (subNavigation.length && subNavigationPosition === 'top') { %>
|
|
97
|
+
<%- renderHook('panels::page.sub-navigation.top.before', renderHookScopes) %>
|
|
98
|
+
<nav class="fi-tabs fi-page-sub-navigation-tabs" aria-label="<%= t('filament::components/tabs.label') %>">
|
|
99
|
+
<% for (const item of subNavigation) { %>
|
|
100
|
+
<a href="<%= item.url %>" wire:navigate class="<%- cls(['fi-tabs-item', { 'fi-active': item.active }]) %>"<% if (item.active) { %> aria-current="page"<% } %>><% if (item.icon) { %><%- icon(item.icon) %><% } %><span class="fi-tabs-item-label"><%= item.label %></span></a>
|
|
101
|
+
<% } %>
|
|
102
|
+
</nav>
|
|
103
|
+
<%- renderHook('panels::page.sub-navigation.top.after', renderHookScopes) %>
|
|
104
|
+
<% } %>
|
|
105
|
+
<div class="fi-page-content">
|
|
106
|
+
<%- renderHook('panels::page.header-widgets.before', renderHookScopes) %>
|
|
107
|
+
<%- headerWidgets %>
|
|
108
|
+
<%- renderHook('panels::page.header-widgets.after', renderHookScopes) %>
|
|
109
|
+
<%- content %>
|
|
110
|
+
<%- renderHook('panels::page.footer-widgets.before', renderHookScopes) %>
|
|
111
|
+
<%- locals.footerWidgets ?? '' %>
|
|
112
|
+
<%- renderHook('panels::page.footer-widgets.after', renderHookScopes) %>
|
|
113
|
+
</div>
|
|
114
|
+
<% if (subNavigation.length && subNavigationPosition === 'end') { %>
|
|
115
|
+
<%- renderHook('panels::page.sub-navigation.end.before', renderHookScopes) %>
|
|
116
|
+
<div class="fi-page-sub-navigation-sidebar-ctn">
|
|
117
|
+
<%- renderHook('panels::page.sub-navigation.sidebar.before', renderHookScopes) %>
|
|
118
|
+
<ul class="fi-page-sub-navigation-sidebar">
|
|
119
|
+
<li x-data="{ label: 'sub_navigation_' }" data-group-label="sub_navigation_" x-bind:class="{ 'fi-collapsed': $store.sidebar.groupIsCollapsed(label) }" class="<%- cls(['fi-sidebar-group', { 'fi-active': subNavigation.some((item) => item.active) }, 'fi-collapsible']) %>">
|
|
120
|
+
<ul class="fi-sidebar-group-items">
|
|
121
|
+
<% for (const item of subNavigation) { %>
|
|
122
|
+
<li class="<%- cls(['fi-sidebar-item', { 'fi-active': item.active }, 'fi-sidebar-item-has-url']) %>">
|
|
123
|
+
<a href="<%= item.url %>" wire:navigate<% if (item.active) { %> aria-current="page"<% } %> x-on:click="$store.sidebar.isMobile && $store.sidebar.close()" class="fi-sidebar-item-btn">
|
|
124
|
+
<% if (item.icon) { %><%- icon(item.icon, { size: 'lg', attributes: attrs({ class: 'fi-sidebar-item-icon' }) }) %><% } %>
|
|
125
|
+
<span class="fi-sidebar-item-label">
|
|
126
|
+
<%= item.label %>
|
|
127
|
+
</span>
|
|
128
|
+
</a>
|
|
129
|
+
</li>
|
|
130
|
+
<% } %>
|
|
131
|
+
</ul>
|
|
132
|
+
</li>
|
|
133
|
+
</ul>
|
|
134
|
+
<%- renderHook('panels::page.sub-navigation.sidebar.after', renderHookScopes) %>
|
|
135
|
+
</div>
|
|
136
|
+
<%- renderHook('panels::page.sub-navigation.end.after', renderHookScopes) %>
|
|
137
|
+
<% } %>
|
|
138
|
+
</div>
|
|
139
|
+
</div>
|
|
140
|
+
|
|
141
|
+
<%- actionModals %>
|
|
142
|
+
<%- renderHook('panels::page.end', renderHookScopes) %>
|
|
143
|
+
</div>
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
<%# Page « simple » — port de filament-panels::components.page.simple + header.simple + logo %>
|
|
2
|
+
<div class="fi-simple-page">
|
|
3
|
+
<%- renderHook('panels::simple-page.start', renderHookScopes) %>
|
|
4
|
+
<div class="fi-simple-page-content">
|
|
5
|
+
<% if (heading || locals.hasLogo !== false || locals.subheading) { %>
|
|
6
|
+
<header class="fi-simple-header">
|
|
7
|
+
<% if (locals.hasLogo !== false) { %>
|
|
8
|
+
<%- view('filament-panels::components.logo', { brand }) %>
|
|
9
|
+
<% } %>
|
|
10
|
+
|
|
11
|
+
<% if (heading) { %>
|
|
12
|
+
<h1 class="fi-simple-header-heading">
|
|
13
|
+
<%= heading %>
|
|
14
|
+
</h1>
|
|
15
|
+
<% } %>
|
|
16
|
+
|
|
17
|
+
<% if (locals.subheading) { %>
|
|
18
|
+
<p class="fi-simple-header-subheading">
|
|
19
|
+
<%- subheading %>
|
|
20
|
+
</p>
|
|
21
|
+
<% } %>
|
|
22
|
+
</header>
|
|
23
|
+
<% } %>
|
|
24
|
+
|
|
25
|
+
<%- content %>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
<div wire:partial="action-modals" x-data="filamentActionModals({
|
|
29
|
+
livewireId: <%- js(livewireId) %>,
|
|
30
|
+
})" style="height: 0"></div>
|
|
31
|
+
<%- renderHook('panels::simple-page.end', renderHookScopes) %>
|
|
32
|
+
</div>
|