openadmin-dev 0.7.21__tar.gz → 0.7.22__tar.gz
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.
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/PKG-INFO +1 -1
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/docs/content/components/action.md +4 -4
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/docs/content/components/form.md +3 -3
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/docs/content/components/index.md +3 -3
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/docs/content/components/table.md +3 -3
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/docs/content/cookbook/implementing-form-with-reference.md +5 -5
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/docs/content/cookbook/implementing-table.md +3 -3
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/examples/admin/authors.py +5 -5
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/examples/admin/books.py +2 -2
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/examples/admin/control_panel.py +3 -3
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/examples/lib/lifespan.py +7 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/examples/main.py +1 -0
- openadmin_dev-0.7.22/openadmin/__client__/assets/Dashboard-DC0heEA9.js +1 -0
- openadmin_dev-0.7.22/openadmin/__client__/assets/PageView-lwaKn_q5.js +67 -0
- openadmin_dev-0.7.21/openadmin/__client__/assets/index-BizGlCPa.js → openadmin_dev-0.7.22/openadmin/__client__/assets/index-C-H-Lt3A.js +2 -2
- openadmin_dev-0.7.22/openadmin/__client__/assets/index-DiaT67nK.css +1 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/index.html +2 -2
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/fastapi/__init__.py +2 -3
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/fastapi/admin_page.py +2 -2
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/fastapi/admin_panel.py +4 -0
- openadmin_dev-0.7.22/openadmin/fastapi/refs.py +9 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/pyproject.toml +1 -1
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/uv.lock +1 -1
- openadmin_dev-0.7.21/openadmin/__client__/assets/Dashboard-Csf46hSD.js +0 -1
- openadmin_dev-0.7.21/openadmin/__client__/assets/PageView-CeSjIznC.js +0 -67
- openadmin_dev-0.7.21/openadmin/__client__/assets/index-jj-VaJvv.css +0 -1
- openadmin_dev-0.7.21/openadmin/fastapi/refs.py +0 -13
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/.claude/launch.json +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/.github/ISSUE_TEMPLATE/bug.md +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/.github/ISSUE_TEMPLATE/chore.md +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/.github/ISSUE_TEMPLATE/feature.md +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/.github/actions/branch-name/action.yml +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/.github/actions/dependency-cves/action.yml +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/.github/actions/format/action.yml +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/.github/actions/license/action.yml +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/.github/actions/lint/action.yml +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/.github/actions/security/action.yml +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/.github/actions/spell-check/action.yml +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/.github/actions/test/action.yml +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/.github/actions/typecheck/action.yml +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/.github/actions/unused-code/action.yml +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/.github/workflows/ci.yml +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/.github/workflows/docs.yml +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/.github/workflows/publish.yml +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/.gitignore +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/.python-version +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/LICENSE +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/LICENSES/AGPL-3.0-or-later.txt +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/Makefile +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/README.md +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/REUSE.toml +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/docs/.gitignore +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/docs/assets/dashboard-screenshot.png +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/docs/assets/logo.png +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/docs/bun.lock +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/docs/config/.vitepress/config.mts +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/docs/config/.vitepress/theme/index.ts +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/docs/config/.vitepress/theme/style.css +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/docs/content/auth/index.md +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/docs/content/components/area-chart.md +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/docs/content/components/bar-chart.md +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/docs/content/components/line-chart.md +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/docs/content/components/markdown.md +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/docs/content/components/pie-chart.md +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/docs/content/components/stat.md +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/docs/content/cookbook/implementing-auth.md +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/docs/content/index.md +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/docs/content/introduction/getting-started.md +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/docs/content/introduction/what-is-openadmin.md +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/docs/package.json +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/examples/__init__.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/examples/admin/__init__.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/examples/admin/analytics.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/examples/admin/auth.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/examples/admin/docs.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/examples/admin/form_test.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/examples/admin/genres.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/examples/admin/health.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/examples/admin/overview.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/examples/admin/publishers.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/examples/admin/reports.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/examples/admin/tags.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/examples/admin/weekdays.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/examples/lib/__init__.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/examples/lib/database.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/examples/lib/models.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/examples/lib/seed.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/CardTitle-g-eR1YB7.js +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/FormView-B50K-7hw.js +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/HomeView-BY92UWl4.js +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/Kbd-B-iXrtaS.js +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/LoginView-6w0mm9cn.js +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/SelectValue-DOZVBj2o.js +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/error-C_Ap5sRv.js +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/field-DJNQppOg.js +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/geist-cyrillic-400-normal-DXusLSnH.woff2 +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/geist-cyrillic-400-normal-DkrqoNl2.woff +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/geist-cyrillic-ext-400-normal-ChfpGzr5.woff +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/geist-latin-400-normal-B40WzpMT.woff2 +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/geist-latin-400-normal-akEymXtG.woff +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/geist-latin-ext-400-normal-Bz1pQMyt.woff +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/geist-latin-ext-400-normal-CND6cjiG.woff2 +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/geist-mono-cyrillic-400-normal-C51Di1Mf.woff2 +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/geist-mono-cyrillic-400-normal-CPJFfJgk.woff +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/geist-mono-latin-400-normal-B2yvC1Cq.woff +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/geist-mono-latin-400-normal-DTRLJnHl.woff2 +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/geist-mono-latin-ext-400-normal-CfzLURNc.woff +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/geist-mono-latin-ext-400-normal-DI-rJ0UV.woff2 +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/geist-mono-symbols2-400-normal-DjbiTEEA.woff +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/geist-mono-vietnamese-400-normal-CZEPLOgu.woff +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/geist-vietnamese-400-normal-C8xY9-dI.woff +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/logo-D9vyMJZl.png +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/openadmin-form-ycccrOMh.js +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/openadmin-spec-BbpNYr6e.js +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/rolldown-runtime-DK3Fl9T5.js +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/runtime-core.esm-bundler-B4b-2GOK.js +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/theme-CcRXhvWV.js +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/assets/useForm-CV62cptb.js +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/favicon.svg +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/__client__/icons.svg +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/fastapi/admin_auth.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/fastapi/counter.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/fastapi/deps.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/fastapi/exc_handler.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/fastapi/req.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/fastapi/utils.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/spec/__init__.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/spec/action.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/spec/area_chart.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/spec/bar_chart.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/spec/colors.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/spec/component.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/spec/error.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/spec/form.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/spec/http_methods.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/spec/icons.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/spec/json_schema.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/spec/line_chart.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/spec/markdown.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/spec/page.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/spec/pie_chart.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/spec/section.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/spec/spec.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/spec/stat.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/openadmin/spec/table.py +0 -0
- {openadmin_dev-0.7.21 → openadmin_dev-0.7.22}/tests/test_hello.py +0 -0
|
@@ -69,10 +69,10 @@ async def rotate_api_key(
|
|
|
69
69
|
|
|
70
70
|
## Attaching an action to a table row
|
|
71
71
|
|
|
72
|
-
Give an action `is_hidden=True` when its only purpose is to be triggered from a row, then reference it from that row's `__actions__` with `
|
|
72
|
+
Give an action `is_hidden=True` when its only purpose is to be triggered from a row, then reference it from that row's `__actions__` with `reference`:
|
|
73
73
|
|
|
74
74
|
```python
|
|
75
|
-
from openadmin.fastapi import
|
|
75
|
+
from openadmin.fastapi import reference
|
|
76
76
|
|
|
77
77
|
@page.action("Delete Author", is_hidden=True)
|
|
78
78
|
async def delete_author(id: str) -> spec.Action:
|
|
@@ -90,7 +90,7 @@ async def get_all_authors(...) -> spec.Table:
|
|
|
90
90
|
"__actions__": [
|
|
91
91
|
{
|
|
92
92
|
"label": "Delete this user",
|
|
93
|
-
"action":
|
|
93
|
+
"action": reference(delete_author),
|
|
94
94
|
"query": {"id": author.id},
|
|
95
95
|
"color": "red",
|
|
96
96
|
"icon": "trash",
|
|
@@ -102,4 +102,4 @@ async def get_all_authors(...) -> spec.Table:
|
|
|
102
102
|
}
|
|
103
103
|
```
|
|
104
104
|
|
|
105
|
-
`
|
|
105
|
+
`reference` reads the ID that the `@page.action(...)` decorator stamped onto `delete_author`, so `delete_author` must already be decorated before it's referenced this way — a plain top-to-bottom ordering requirement, not special behavior. See [Implementing a Table](/cookbook/implementing-table) for the full recipe.
|
|
@@ -78,14 +78,14 @@ class FieldConfig(TypedDict):
|
|
|
78
78
|
```
|
|
79
79
|
|
|
80
80
|
```python
|
|
81
|
-
from openadmin.fastapi import
|
|
81
|
+
from openadmin.fastapi import reference
|
|
82
82
|
|
|
83
83
|
|
|
84
84
|
@page.form(
|
|
85
85
|
"Add Author",
|
|
86
86
|
fields={
|
|
87
87
|
"friend": {
|
|
88
|
-
"reference":
|
|
88
|
+
"reference": reference(get_all_authors),
|
|
89
89
|
"reference_field": "id",
|
|
90
90
|
"icon": "user",
|
|
91
91
|
"color": "blue",
|
|
@@ -95,7 +95,7 @@ from openadmin.fastapi import reference_table
|
|
|
95
95
|
async def add_author(body: AddAuthorBody, session: AsyncSessionDep) -> spec.Form: ...
|
|
96
96
|
```
|
|
97
97
|
|
|
98
|
-
`reference` is the ID of a table (obtained with `
|
|
98
|
+
`reference` is the ID of a table (obtained with `reference`, so `get_all_authors` must already be decorated with `@page.table(...)`); `reference_field` is the column of that table's rows to submit as the field's value. See [Implementing a Form with a Reference](/cookbook/implementing-form-with-reference) for the full walkthrough.
|
|
99
99
|
|
|
100
100
|
## Other HTTP methods
|
|
101
101
|
|
|
@@ -29,10 +29,10 @@ A few things apply to every component, not just one:
|
|
|
29
29
|
Two helpers let one component point at another by its generated ID, instead of hardcoding route paths:
|
|
30
30
|
|
|
31
31
|
```python
|
|
32
|
-
from openadmin.fastapi import
|
|
32
|
+
from openadmin.fastapi import reference, reference
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
- `
|
|
36
|
-
- `
|
|
35
|
+
- `reference(table_func)` — returns the ID of a `@page.table(...)`-decorated function. Used in a form field's `reference` to source a value picker from that table's rows.
|
|
36
|
+
- `reference(action_func)` — returns the ID of a `@page.action(...)`-decorated function. Used in a table row's `__actions__` to attach that action as a row button.
|
|
37
37
|
|
|
38
38
|
Both simply read an attribute (`__openadmin_table_id__` / `__openadmin_action_id__`) that the decorator stamped onto the function, so the referenced function must already be decorated — but not necessarily called — before you reference it.
|
|
@@ -117,15 +117,15 @@ return {"data": [...], "total": total_count}
|
|
|
117
117
|
A row dict can include three special keys alongside your own columns:
|
|
118
118
|
|
|
119
119
|
- **`__view__`** — a compact label used to represent the whole row elsewhere (for example, when the row is offered as an option in a form's reference picker — see [Implementing a Form with a Reference](/cookbook/implementing-form-with-reference)).
|
|
120
|
-
- **`__actions__`** — a list of buttons attached to that row. Each entry references an action registered elsewhere on the page via `
|
|
120
|
+
- **`__actions__`** — a list of buttons attached to that row. Each entry references an action registered elsewhere on the page via `reference`:
|
|
121
121
|
|
|
122
122
|
```python
|
|
123
|
-
from openadmin.fastapi import
|
|
123
|
+
from openadmin.fastapi import reference
|
|
124
124
|
|
|
125
125
|
"__actions__": [
|
|
126
126
|
{
|
|
127
127
|
"label": "Delete this user",
|
|
128
|
-
"action":
|
|
128
|
+
"action": reference(delete_author),
|
|
129
129
|
"query": {"id": author.id},
|
|
130
130
|
"color": "red",
|
|
131
131
|
"icon": "trash",
|
|
@@ -46,7 +46,7 @@ class AddBookBody(BaseModel):
|
|
|
46
46
|
## 3. Point the field at the table
|
|
47
47
|
|
|
48
48
|
```python
|
|
49
|
-
from openadmin.fastapi import AdminPage,
|
|
49
|
+
from openadmin.fastapi import AdminPage, reference
|
|
50
50
|
|
|
51
51
|
from .authors import get_all_authors
|
|
52
52
|
|
|
@@ -57,7 +57,7 @@ page = AdminPage("Books", icon="book")
|
|
|
57
57
|
"Add Book",
|
|
58
58
|
fields={
|
|
59
59
|
"author_id": {
|
|
60
|
-
"reference":
|
|
60
|
+
"reference": reference(get_all_authors),
|
|
61
61
|
"reference_field": "id",
|
|
62
62
|
"icon": "user-pen",
|
|
63
63
|
"color": "violet",
|
|
@@ -72,10 +72,10 @@ async def add_book(body: AddBookBody, session: AsyncSessionDep) -> spec.Form:
|
|
|
72
72
|
return {"message": f"Added book '{book.title}'"}
|
|
73
73
|
```
|
|
74
74
|
|
|
75
|
-
- **`reference`** is the referenced table's generated ID, obtained with `
|
|
75
|
+
- **`reference`** is the referenced table's generated ID, obtained with `reference(get_all_authors)` — pass the function itself, not a string, so a rename of the table doesn't silently break the link.
|
|
76
76
|
- **`reference_field`** is the column of the referenced table's rows to actually submit as `author_id`'s value. The picker shows each row's `__view__` label, but writes `row[reference_field]` when one is chosen — here, the author's `id`.
|
|
77
77
|
|
|
78
|
-
Because `
|
|
78
|
+
Because `reference` reads an attribute the `@page.table(...)` decorator stamps directly onto `get_all_authors`, that function must already be decorated by the time `add_book` is defined — in practice, just make sure the module defining the table is imported before the module defining the form runs, as in the example above.
|
|
79
79
|
|
|
80
80
|
## 4. Cross-page references
|
|
81
81
|
|
|
@@ -83,4 +83,4 @@ The referenced table doesn't have to live on the same `AdminPage` as the form
|
|
|
83
83
|
|
|
84
84
|
## Referencing an action instead of a table
|
|
85
85
|
|
|
86
|
-
The equivalent helper for attaching an action to a table row is `
|
|
86
|
+
The equivalent helper for attaching an action to a table row is `reference`, covered in [Implementing a Table](/cookbook/implementing-table). Both helpers work the same way — they read an ID the decorator stamped onto an already-decorated function.
|
|
@@ -11,7 +11,7 @@ A step-by-step recipe for a searchable, paginated table with styled columns and
|
|
|
11
11
|
```python
|
|
12
12
|
# admin/users.py
|
|
13
13
|
from openadmin import spec
|
|
14
|
-
from openadmin.fastapi import AdminPage,
|
|
14
|
+
from openadmin.fastapi import AdminPage, reference
|
|
15
15
|
from openadmin.fastapi.deps import PageDep, SearchDep
|
|
16
16
|
|
|
17
17
|
page = AdminPage("Users", icon="users")
|
|
@@ -99,7 +99,7 @@ async def get_all_users(...) -> spec.Table:
|
|
|
99
99
|
"__actions__": [
|
|
100
100
|
{
|
|
101
101
|
"label": "Delete",
|
|
102
|
-
"action":
|
|
102
|
+
"action": reference(delete_user),
|
|
103
103
|
"query": {"user_id": u.id},
|
|
104
104
|
"icon": "trash",
|
|
105
105
|
"color": "red",
|
|
@@ -112,7 +112,7 @@ async def get_all_users(...) -> spec.Table:
|
|
|
112
112
|
}
|
|
113
113
|
```
|
|
114
114
|
|
|
115
|
-
`
|
|
115
|
+
`reference` reads the ID that `@page.action(...)` stamped onto `delete_user`, so `delete_user` needs to be defined (decorated) above `get_all_users` in the file, or at least imported before this function runs — plain Python name resolution, nothing OpenAdmin-specific.
|
|
116
116
|
|
|
117
117
|
The action's own `query`/`body`/`form` schema (inferred from `Query(...)` on `user_id`) still applies — the `query` dict in `__actions__` is what actually gets sent as that action's parameters when the row's button is clicked.
|
|
118
118
|
|
|
@@ -6,7 +6,7 @@ from pydantic import BaseModel
|
|
|
6
6
|
from sqlalchemy import func, select
|
|
7
7
|
|
|
8
8
|
from openadmin import spec
|
|
9
|
-
from openadmin.fastapi import AdminPage,
|
|
9
|
+
from openadmin.fastapi import AdminPage, reference
|
|
10
10
|
from openadmin.fastapi.deps import PageDep, SearchDep
|
|
11
11
|
|
|
12
12
|
from ..lib import models
|
|
@@ -107,7 +107,7 @@ async def get_all_authors(
|
|
|
107
107
|
"__actions__": [
|
|
108
108
|
{
|
|
109
109
|
"label": "Delete this user",
|
|
110
|
-
"action":
|
|
110
|
+
"action": reference(delete_author),
|
|
111
111
|
"query": {
|
|
112
112
|
"id": author.id,
|
|
113
113
|
},
|
|
@@ -116,7 +116,7 @@ async def get_all_authors(
|
|
|
116
116
|
},
|
|
117
117
|
{
|
|
118
118
|
"label": "Bun this user",
|
|
119
|
-
"action":
|
|
119
|
+
"action": reference(delete_author),
|
|
120
120
|
"query": {
|
|
121
121
|
"id": author.id,
|
|
122
122
|
},
|
|
@@ -125,7 +125,7 @@ async def get_all_authors(
|
|
|
125
125
|
},
|
|
126
126
|
{
|
|
127
127
|
"label": "Unban this user",
|
|
128
|
-
"action":
|
|
128
|
+
"action": reference(delete_author),
|
|
129
129
|
"query": {
|
|
130
130
|
"id": author.id,
|
|
131
131
|
},
|
|
@@ -170,7 +170,7 @@ class AddAuthorBody(BaseModel):
|
|
|
170
170
|
description="Register a new author in the catalog",
|
|
171
171
|
fields={
|
|
172
172
|
"friend": {
|
|
173
|
-
"reference":
|
|
173
|
+
"reference": reference(get_all_authors),
|
|
174
174
|
"icon": "user",
|
|
175
175
|
"color": "blue",
|
|
176
176
|
"reference_field": "id",
|
|
@@ -10,7 +10,7 @@ from pydantic import BaseModel
|
|
|
10
10
|
from sqlalchemy import func, select
|
|
11
11
|
|
|
12
12
|
from openadmin import spec
|
|
13
|
-
from openadmin.fastapi import AdminPage,
|
|
13
|
+
from openadmin.fastapi import AdminPage, reference
|
|
14
14
|
from openadmin.fastapi.deps import PageDep, SearchDep
|
|
15
15
|
|
|
16
16
|
from ..lib import models
|
|
@@ -121,7 +121,7 @@ async def get_all_books(
|
|
|
121
121
|
"attachment": {"label": "Book in pdf"},
|
|
122
122
|
},
|
|
123
123
|
"__actions__": [
|
|
124
|
-
{"action":
|
|
124
|
+
{"action": reference(upload_cover), "form": {"id": book.id}}
|
|
125
125
|
],
|
|
126
126
|
}
|
|
127
127
|
for book, author in result.all()
|
|
@@ -11,7 +11,7 @@ from fastapi import Body, Depends, Form, Query
|
|
|
11
11
|
from pydantic import BaseModel
|
|
12
12
|
|
|
13
13
|
from openadmin import spec
|
|
14
|
-
from openadmin.fastapi import AdminPage,
|
|
14
|
+
from openadmin.fastapi import AdminPage, reference
|
|
15
15
|
from openadmin.fastapi.deps import PageDep, SearchDep
|
|
16
16
|
|
|
17
17
|
page = AdminPage(
|
|
@@ -393,7 +393,7 @@ async def get_feature_flags(search: SearchDep, pagination: PageDep) -> spec.Tabl
|
|
|
393
393
|
"__actions__": [
|
|
394
394
|
{
|
|
395
395
|
"label": "Disable",
|
|
396
|
-
"action":
|
|
396
|
+
"action": reference(disable_feature_flag),
|
|
397
397
|
"query": {"name": flag["name"]},
|
|
398
398
|
"icon": "toggle-left",
|
|
399
399
|
"color": "red",
|
|
@@ -401,7 +401,7 @@ async def get_feature_flags(search: SearchDep, pagination: PageDep) -> spec.Tabl
|
|
|
401
401
|
if flag["enabled"]
|
|
402
402
|
else {
|
|
403
403
|
"label": "Enable",
|
|
404
|
-
"action":
|
|
404
|
+
"action": reference(enable_feature_flag),
|
|
405
405
|
"query": {"name": flag["name"]},
|
|
406
406
|
"icon": "toggle-right",
|
|
407
407
|
"color": "green",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{$n as e,D as t,E as n,Ht as r,On as i,St as a,Tn as o,Ut as s,Zn as c,_ as l,b as u,bt as d,ct as f,er as p,et as m,ft as h,g,gn as _,jt as v,k as y,mt as b,o as x,qt as S,tr as C,un as ee,v as w,vn as T,wt as E,xt as D,y as O,z as k}from"./runtime-core.esm-bundler-B4b-2GOK.js";import{Hc as te,Vc as A,Wc as j,eu as ne}from"./error-C_Ap5sRv.js";import{F as M,I as re,M as ie,N as ae,O as N,S as oe,_ as se,h as P,i as F,k as ce,l as le,o as I,p as ue,r as L,v as de,x as fe}from"./useForm-CV62cptb.js";import{c as pe,l as R,t as me}from"./openadmin-spec-BbpNYr6e.js";import{B as z,C as he,F as ge,G as _e,H as B,L as ve,U as V,X as ye,a as H,c as be,d as xe,f as Se,i as U,it as Ce,l as we,m as Te,n as Ee,p as De,r as Oe,s as ke,t as Ae,tt as W,u as je,x as Me}from"./openadmin-form-ycccrOMh.js";import{t as Ne}from"./index-C-H-Lt3A.js";import{a as Pe,c as Fe,i as Ie,l as Le,o as Re,r as ze,s as Be,t as Ve,u as He}from"./Kbd-B-iXrtaS.js";import{i as Ue,n as We,t as Ge}from"./theme-CcRXhvWV.js";var Ke=R(`command`,[[`path`,{d:`M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3`,key:`11bfej`}]]),qe=R(`moon`,[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]),Je=R(`panel-left`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M9 3v18`,key:`fh3hqa`}]]),Ye=R(`search`,[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]),Xe=R(`sun`,[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]);function Ze(e,t){let n=ce(!1,300);ie(()=>{n.value=!1});let r=T(null),i=oe();function a(){r.value=null,n.value=!1}function o(e,t){if(!t)return;let i=e.currentTarget,a={x:e.clientX,y:e.clientY},o=$e(a,Qe(a,i.getBoundingClientRect()),1),s=et(t.getBoundingClientRect()),c=nt([...o,...s]);r.value=c,n.value=!0}return s(n=>{if(e.value&&t.value){let r=e=>o(e,t.value),i=t=>o(t,e.value);e.value.addEventListener(`pointerleave`,r),t.value.addEventListener(`pointerleave`,i),n(()=>{e.value?.removeEventListener(`pointerleave`,r),t.value?.removeEventListener(`pointerleave`,i)})}}),s(n=>{if(r.value){let o=n=>{if(!r.value||!(n.target instanceof Element))return;let o=n.target,s={x:n.clientX,y:n.clientY},c=e.value?.contains(o)||t.value?.contains(o),l=!tt(s,r.value),u=!!o.closest(`[data-grace-area-trigger]`);c?a():(l||u)&&(a(),i.trigger())};e.value?.ownerDocument.addEventListener(`pointermove`,o),n(()=>e.value?.ownerDocument.removeEventListener(`pointermove`,o))}}),{isPointerInTransit:n,onPointerExit:i.on}}function Qe(e,t){let n=Math.abs(t.top-e.y),r=Math.abs(t.bottom-e.y),i=Math.abs(t.right-e.x),a=Math.abs(t.left-e.x);switch(Math.min(n,r,i,a)){case a:return`left`;case i:return`right`;case n:return`top`;case r:return`bottom`;default:throw Error(`unreachable`)}}function $e(e,t,n=5){let r=[];switch(t){case`top`:r.push({x:e.x-n,y:e.y+n},{x:e.x+n,y:e.y+n});break;case`bottom`:r.push({x:e.x-n,y:e.y-n},{x:e.x+n,y:e.y-n});break;case`left`:r.push({x:e.x+n,y:e.y-n},{x:e.x+n,y:e.y+n});break;case`right`:r.push({x:e.x-n,y:e.y-n},{x:e.x-n,y:e.y+n})}return r}function et(e){let{top:t,right:n,bottom:r,left:i}=e;return[{x:i,y:t},{x:n,y:t},{x:n,y:r},{x:i,y:r}]}function tt(e,t){let{x:n,y:r}=e,i=!1;for(let e=0,a=t.length-1;e<t.length;a=e++){let o=t[e].x,s=t[e].y,c=t[a].x,l=t[a].y;s>r!=l>r&&n<(c-o)*(r-s)/(l-s)+o&&(i=!i)}return i}function nt(e){let t=e.slice();return t.sort((e,t)=>e.x<t.x?-1:e.x>t.x?1:e.y<t.y?-1:+(e.y>t.y)),rt(t)}function rt(e){if(e.length<=1)return e.slice();let t=[];for(let n=0;n<e.length;n++){let r=e[n];for(;t.length>=2;){let e=t.at(-1),n=t[t.length-2];if((e.x-n.x)*(r.y-n.y)>=(e.y-n.y)*(r.x-n.x))t.pop();else break}t.push(r)}t.pop();let n=[];for(let t=e.length-1;t>=0;t--){let r=e[t];for(;n.length>=2;){let e=n.at(-1),t=n[n.length-2];if((e.x-t.x)*(r.y-t.y)>=(e.y-t.y)*(r.x-t.x))n.pop();else break}n.push(r)}return n.pop(),t.length===1&&n.length===1&&t[0].x===n[0].x&&t[0].y===n[0].y?t:t.concat(n)}var G=y({__name:`DialogDescription`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`p`}},setup(e){let t=e;I();let n=He();return(e,r)=>(b(),w(i(F),m(t,{id:i(n).descriptionId}),{default:S(()=>[D(e.$slots,`default`)]),_:3},16,[`id`]))}}),K=y({__name:`DialogTitle`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`h2`}},setup(e){let t=e,n=He();return I(),(e,r)=>(b(),w(i(F),m(t,{id:i(n).titleId}),{default:S(()=>[D(e.$slots,`default`)]),_:3},16,[`id`]))}}),[it,at]=W(`ListboxGroup`),ot=y({__name:`ListboxGroup`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){let t=e,n=z(void 0,`reka-listbox-group`);return at({id:n}),(e,r)=>(b(),w(i(F),m({role:`group`},t,{"aria-labelledby":i(n)}),{default:S(()=>[D(e.$slots,`default`)]),_:3},16,[`aria-labelledby`]))}}),st=y({__name:`ListboxGroupLabel`,props:{for:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`div`}},setup(e){let t=e,n=it({id:``});return(e,r)=>(b(),w(i(F),m(t,{id:i(n).id}),{default:S(()=>[D(e.$slots,`default`)]),_:3},16,[`id`]))}}),ct={key:0,d:`M0 0L6 6L12 0`},lt={key:1,d:`M0 0L4.58579 4.58579C5.36683 5.36683 6.63316 5.36684 7.41421 4.58579L12 0`},ut=y({__name:`Arrow`,props:{width:{type:Number,required:!1,default:10},height:{type:Number,required:!1,default:5},rounded:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`svg`}},setup(e){let t=e;return I(),(e,n)=>(b(),w(i(F),m(t,{width:e.width,height:e.height,viewBox:e.asChild?void 0:`0 0 12 6`,preserveAspectRatio:e.asChild?void 0:`none`}),{default:S(()=>[D(e.$slots,`default`,{},()=>[e.rounded?(b(),u(`path`,lt)):(b(),u(`path`,ct))])]),_:3},16,[`width`,`height`,`viewBox`,`preserveAspectRatio`]))}}),dt={top:`bottom`,right:`left`,bottom:`top`,left:`right`},ft=y({inheritAttrs:!1,__name:`PopperArrow`,props:{width:{type:Number,required:!1},height:{type:Number,required:!1},rounded:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`svg`}},setup(e){let{forwardRef:n}=I(),r=be(),a=g(()=>dt[r.placedSide.value]);return(e,o)=>(b(),u(`span`,{ref:e=>{i(r).onArrowChange(e??void 0)},style:p({position:`absolute`,left:i(r).arrowX?.value?`${i(r).arrowX?.value}px`:void 0,top:i(r).arrowY?.value?`${i(r).arrowY?.value}px`:void 0,[a.value]:0,transformOrigin:{top:``,right:`0 0`,bottom:`center 0`,left:`100% 0`}[i(r).placedSide.value],transform:{top:`translateY(100%)`,right:`translateY(50%) rotate(90deg) translateX(-50%)`,bottom:`rotate(180deg)`,left:`translateY(50%) rotate(-90deg) translateX(50%)`}[i(r).placedSide.value],visibility:i(r).shouldHideArrow.value?`hidden`:void 0})},[t(ut,m(e.$attrs,{ref:i(n),style:{display:`block`},as:e.as,"as-child":e.asChild,rounded:e.rounded,width:e.width,height:e.height}),{default:S(()=>[D(e.$slots,`default`)]),_:3},16,[`as`,`as-child`,`rounded`,`width`,`height`])],4))}}),pt=y({__name:`BaseSeparator`,props:{orientation:{type:String,required:!1,default:`horizontal`},decorative:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){let t=e,n=[`horizontal`,`vertical`];function r(e){return n.includes(e)}let a=g(()=>r(t.orientation)?t.orientation:`horizontal`),o=g(()=>a.value===`vertical`?t.orientation:void 0),s=g(()=>t.decorative?{role:`none`}:{"aria-orientation":o.value,role:`separator`});return(e,t)=>(b(),w(i(F),m({as:e.as,"as-child":e.asChild,"data-orientation":a.value},s.value),{default:S(()=>[D(e.$slots,`default`)]),_:3},16,[`as`,`as-child`,`data-orientation`]))}}),q=y({__name:`Separator`,props:{orientation:{type:String,required:!1,default:`horizontal`},decorative:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(t){let n=t;return(t,r)=>(b(),w(pt,e(k(n)),{default:S(()=>[D(t.$slots,`default`)]),_:3},16))}}),mt=y({__name:`TooltipArrow`,props:{width:{type:Number,required:!1,default:10},height:{type:Number,required:!1,default:5},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`svg`}},setup(t){let n=t;return I(),(t,r)=>(b(),w(i(ft),e(k(n)),{default:S(()=>[D(t.$slots,`default`)]),_:3},16))}}),[J,ht]=W(`TooltipProvider`),gt=y({inheritAttrs:!1,__name:`TooltipProvider`,props:{delayDuration:{type:Number,required:!1,default:700},skipDelayDuration:{type:Number,required:!1,default:300},disableHoverableContent:{type:Boolean,required:!1,default:!1},disableClosingTrigger:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},ignoreNonKeyboardFocus:{type:Boolean,required:!1,default:!1},content:{type:Object,required:!1}},setup(e){let{delayDuration:t,skipDelayDuration:n,disableHoverableContent:r,disableClosingTrigger:i,ignoreNonKeyboardFocus:a,disabled:s,content:c}=o(e);I();let l=T(!0),u=T(!1),{start:d,stop:f}=ae(()=>{l.value=!0},n,{immediate:!1});return ht({isOpenDelayed:l,delayDuration:t,onOpen(){f(),l.value=!1},onClose(){d()},isPointerInTransitRef:u,disableHoverableContent:r,disableClosingTrigger:i,disabled:s,ignoreNonKeyboardFocus:a,content:c}),(e,t)=>D(e.$slots,`default`)}}),_t=`tooltip.open`,[Y,vt]=W(`TooltipRoot`),yt=y({__name:`TooltipRoot`,props:{defaultOpen:{type:Boolean,required:!1,default:!1},open:{type:Boolean,required:!1,default:void 0},delayDuration:{type:Number,required:!1,default:void 0},disableHoverableContent:{type:Boolean,required:!1,default:void 0},disableClosingTrigger:{type:Boolean,required:!1,default:void 0},disabled:{type:Boolean,required:!1,default:void 0},ignoreNonKeyboardFocus:{type:Boolean,required:!1,default:void 0}},emits:[`update:open`],setup(e,{emit:t}){let n=e,a=t;I();let o=J(),s=g(()=>n.disableHoverableContent??o.disableHoverableContent.value),c=g(()=>n.disableClosingTrigger??o.disableClosingTrigger.value),l=g(()=>n.disabled??o.disabled.value),u=g(()=>n.delayDuration??o.delayDuration.value),d=g(()=>n.ignoreNonKeyboardFocus??o.ignoreNonKeyboardFocus.value),f=fe(n,`open`,a,{defaultValue:n.defaultOpen,passive:n.open===void 0});r(f,e=>{o.onClose&&(e?(o.onOpen(),document.dispatchEvent(new CustomEvent(_t))):o.onClose())});let p=T(!1),m=T(),h=g(()=>f.value?p.value?`delayed-open`:`instant-open`:`closed`),{start:_,stop:v}=ae(()=>{p.value=!0,f.value=!0},u,{immediate:!1});function y(){v(),p.value=!1,f.value=!0}function x(){v(),f.value=!1}function C(){_()}return vt({contentId:``,open:f,stateAttribute:h,trigger:m,onTriggerChange(e){m.value=e},onTriggerEnter(){o.isOpenDelayed.value?C():y()},onTriggerLeave(){s.value?x():v()},onOpen:y,onClose:x,disableHoverableContent:s,disableClosingTrigger:c,disabled:l,ignoreNonKeyboardFocus:d}),(e,t)=>(b(),w(i(je),null,{default:S(()=>[D(e.$slots,`default`,{open:i(f)})]),_:3}))}}),bt=y({__name:`TooltipContentImpl`,props:{ariaLabel:{type:String,required:!1},asChild:{type:Boolean,required:!1,default:void 0},as:{type:null,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},avoidCollisions:{type:Boolean,required:!1,default:void 0},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1,default:void 0},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1}},emits:[`escapeKeyDown`,`pointerDownOutside`],setup(e,{emit:r}){let a=e,o=r,s=Y(),c=J(),{forwardRef:l,currentElement:u}=I(),d=g(()=>a.ariaLabel||u.value?.textContent),p=g(()=>{let{ariaLabel:e,...t}=a;return ye(t,c.content.value??{},{side:`top`,sideOffset:0,align:`center`,avoidCollisions:!0,collisionBoundary:[],collisionPadding:0,arrowPadding:0,sticky:`partial`,hideWhenDetached:!1})});return f(()=>{P(window,`scroll`,e=>{e.target?.contains(s.trigger.value)&&s.onClose()},{capture:!0}),P(document,_t,s.onClose)}),(e,r)=>(b(),w(i(ge),{"as-child":``,"disable-outside-pointer-events":!1,onEscapeKeyDown:r[0]||=e=>o(`escapeKeyDown`,e),onPointerDownOutside:r[1]||=e=>{i(s).disableClosingTrigger.value&&i(s).trigger.value?.contains(e.target)&&e.preventDefault(),o(`pointerDownOutside`,e)},onFocusOutside:r[2]||=ne(()=>{},[`prevent`]),onDismiss:r[3]||=e=>i(s).onClose()},{default:S(()=>[t(i(ke),m({ref:i(l),"data-state":i(s).stateAttribute.value},{...e.$attrs,...p.value},{style:{"--reka-tooltip-content-transform-origin":`var(--reka-popper-transform-origin)`,"--reka-tooltip-content-available-width":`var(--reka-popper-available-width)`,"--reka-tooltip-content-available-height":`var(--reka-popper-available-height)`,"--reka-tooltip-trigger-width":`var(--reka-popper-anchor-width)`,"--reka-tooltip-trigger-height":`var(--reka-popper-anchor-height)`}}),{default:S(()=>[D(e.$slots,`default`),t(i(Me),{id:i(s).contentId,role:`tooltip`},{default:S(()=>[n(C(d.value),1)]),_:1},8,[`id`])]),_:3},16,[`data-state`])]),_:3}))}}),xt=y({__name:`TooltipContentHoverable`,props:{ariaLabel:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1}},setup(e){let t=V(e),{forwardRef:n,currentElement:r}=I(),{trigger:a,onClose:o}=Y(),s=J(),{isPointerInTransit:c,onPointerExit:l}=Ze(a,r);return s.isPointerInTransitRef=c,l(()=>{o()}),(e,r)=>(b(),w(bt,m({ref:i(n)},i(t)),{default:S(()=>[D(e.$slots,`default`)]),_:3},16))}}),St=y({__name:`TooltipContent`,props:{forceMount:{type:Boolean,required:!1},ariaLabel:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1}},emits:[`escapeKeyDown`,`pointerDownOutside`],setup(e,{emit:t}){let n=e,r=t,a=Y(),o=B(n,r),{forwardRef:s}=I();return(e,t)=>(b(),w(i(ve),{present:e.forceMount||i(a).open.value},{default:S(()=>[(b(),w(E(i(a).disableHoverableContent.value?bt:xt),m({ref:i(s)},i(o)),{default:S(()=>[D(e.$slots,`default`)]),_:3},16))]),_:3},8,[`present`]))}}),Ct=y({__name:`TooltipPortal`,props:{to:{type:null,required:!1},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(t){let n=t;return(t,r)=>(b(),w(i(he),e(k(n)),{default:S(()=>[D(t.$slots,`default`)]),_:3},16))}}),wt=y({__name:`TooltipTrigger`,props:{reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`button`}},setup(e){let n=e,r=Y(),a=J();r.contentId||=z(void 0,`reka-tooltip-content`);let{forwardRef:o,currentElement:s}=I(),c=T(!1),l=T(!1),u=g(()=>r.disabled.value?{}:{click:C,focus:y,pointermove:h,pointerleave:_,pointerdown:p,blur:x});f(()=>{r.onTriggerChange(s.value)});function d(){setTimeout(()=>{c.value=!1},1)}function p(){r.open&&!r.disableClosingTrigger.value&&r.onClose(),c.value=!0,document.addEventListener(`pointerup`,d,{once:!0})}function h(e){e.pointerType!==`touch`&&!l.value&&!a.isPointerInTransitRef.value&&(r.onTriggerEnter(),l.value=!0)}function _(){r.onTriggerLeave(),l.value=!1}function y(e){c.value||r.ignoreNonKeyboardFocus.value&&!e.target.matches?.(`:focus-visible`)||r.onOpen()}function x(){r.onClose()}function C(){r.disableClosingTrigger.value||r.onClose()}return(e,a)=>(b(),w(i(we),{"as-child":``,reference:e.reference},{default:S(()=>[t(i(F),m({ref:i(o),"aria-describedby":i(r).open.value?i(r).contentId:void 0,"data-state":i(r).stateAttribute.value,as:e.as,"as-child":n.asChild,"data-grace-area-trigger":``},v(u.value)),{default:S(()=>[D(e.$slots,`default`)]),_:3},16,[`aria-describedby`,`data-state`,`as`,`as-child`])]),_:3},8,[`reference`]))}}),Tt=y({__name:`Sheet`,props:{open:{type:Boolean},defaultOpen:{type:Boolean},modal:{type:Boolean},unmountOnHide:{type:Boolean}},emits:[`update:open`],setup(t,{emit:n}){let r=B(t,n);return(t,n)=>(b(),w(i(Le),m({"data-slot":`sheet`},i(r)),{default:S(n=>[D(t.$slots,`default`,e(k(n)))]),_:3},16))}}),Et=y({__name:`SheetOverlay`,props:{forceMount:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e,n=N(t,`class`);return(e,r)=>(b(),w(i(Re),m({"data-slot":`sheet-overlay`,class:i(j)(`data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/80`,t.class)},i(n)),{default:S(()=>[D(e.$slots,`default`)]),_:3},16,[`class`]))}}),Dt=y({inheritAttrs:!1,__name:`SheetContent`,props:{class:{type:[Boolean,null,String,Object,Array]},side:{default:`right`},forceMount:{type:Boolean},disableOutsidePointerEvents:{type:Boolean},asChild:{type:Boolean},as:{}},emits:[`escapeKeyDown`,`pointerDownOutside`,`focusOutside`,`interactOutside`,`openAutoFocus`,`closeAutoFocus`],setup(e,{emit:n}){let r=e,a=n,o=N(r,`class`,`side`),s=B(o,a);return(n,a)=>(b(),w(i(Pe),null,{default:S(()=>[t(Et),t(i(Be),m({"data-slot":`sheet-content`,class:i(j)(`bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500`,e.side===`right`&&`data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm`,e.side===`left`&&`data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm`,e.side===`top`&&`data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b`,e.side===`bottom`&&`data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t`,r.class)},{...n.$attrs,...i(s)}),{default:S(()=>[D(n.$slots,`default`),t(i(Fe),{class:`ring-offset-background focus:ring-ring data-[state=open]:bg-accent absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none`},{default:S(()=>[t(i(pe),{class:`size-4`}),a[0]||=l(`span`,{class:`sr-only`},`Close`,-1)]),_:1})]),_:3},16,[`class`])]),_:3}))}}),Ot=y({__name:`SheetDescription`,props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e,n=N(t,`class`);return(e,r)=>(b(),w(i(G),m({"data-slot":`sheet-description`,class:i(j)(`text-muted-foreground text-sm`,t.class)},i(n)),{default:S(()=>[D(e.$slots,`default`)]),_:3},16,[`class`]))}}),kt=y({__name:`SheetHeader`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,n)=>(b(),u(`div`,{"data-slot":`sheet-header`,class:c(i(j)(`flex flex-col gap-1.5 p-4`,t.class))},[D(e.$slots,`default`)],2))}}),At=y({__name:`SheetTitle`,props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e,n=N(t,`class`);return(e,r)=>(b(),w(i(K),m({"data-slot":`sheet-title`,class:i(j)(`text-foreground font-semibold`,t.class)},i(n)),{default:S(()=>[D(e.$slots,`default`)]),_:3},16,[`class`]))}}),jt=`sidebar_state`,Mt=604800,Nt=`16rem`,Pt=`18rem`,Ft=`3rem`,[X,It]=W(`Sidebar`),Lt={class:`flex h-full w-full flex-col`},Rt=[`data-state`,`data-collapsible`,`data-variant`,`data-side`],zt={"data-sidebar":`sidebar`,class:`bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm`},Bt=y({inheritAttrs:!1,__name:`Sidebar`,props:{side:{default:`left`},variant:{default:`sidebar`},collapsible:{default:`offcanvas`},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let r=e,{isMobile:a,state:o,openMobile:s,setOpenMobile:d}=X();return(f,h)=>e.collapsible===`none`?(b(),u(`div`,m({key:0,"data-slot":`sidebar`,class:i(j)(`bg-sidebar text-sidebar-foreground flex w-(--sidebar-width) flex-col`,r.class)},f.$attrs),[D(f.$slots,`default`)],16)):i(a)?(b(),w(i(Tt),m({key:1,open:i(s)},f.$attrs,{"onUpdate:open":i(d)}),{default:S(()=>[t(i(Dt),{"data-sidebar":`sidebar`,"data-slot":`sidebar`,"data-mobile":`true`,side:e.side,class:`bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden`,style:p({"--sidebar-width":i(Pt)})},{default:S(()=>[t(kt,{class:`sr-only`},{default:S(()=>[t(At,null,{default:S(()=>[...h[0]||=[n(`Sidebar`,-1)]]),_:1}),t(Ot,null,{default:S(()=>[...h[1]||=[n(`Displays the mobile sidebar.`,-1)]]),_:1})]),_:1}),l(`div`,Lt,[D(f.$slots,`default`)])]),_:3},8,[`side`,`style`])]),_:3},16,[`open`,`onUpdate:open`])):(b(),u(`div`,{key:2,class:`group peer text-sidebar-foreground hidden md:block`,"data-slot":`sidebar`,"data-state":i(o),"data-collapsible":i(o)===`collapsed`?e.collapsible:``,"data-variant":e.variant,"data-side":e.side},[l(`div`,{class:c(i(j)(`relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear`,`group-data-[collapsible=offcanvas]:w-0`,`group-data-[side=right]:rotate-180`,e.variant===`floating`||e.variant===`inset`?`group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]`:`group-data-[collapsible=icon]:w-(--sidebar-width-icon)`))},null,2),l(`div`,m({class:i(j)(`fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex`,e.side===`left`?`left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]`:`right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]`,e.variant===`floating`||e.variant===`inset`?`p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]`:`group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l`,r.class)},f.$attrs),[l(`div`,zt,[D(f.$slots,`default`)])],16)],8,Rt))}}),Vt=y({__name:`SidebarContent`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,n)=>(b(),u(`div`,{"data-slot":`sidebar-content`,"data-sidebar":`content`,class:c(i(j)(`flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden`,t.class))},[D(e.$slots,`default`)],2))}}),Ht=y({__name:`SidebarFooter`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,n)=>(b(),u(`div`,{"data-slot":`sidebar-footer`,"data-sidebar":`footer`,class:c(i(j)(`flex flex-col gap-2 p-2`,t.class))},[D(e.$slots,`default`)],2))}}),Ut=y({__name:`SidebarGroup`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,n)=>(b(),u(`div`,{"data-slot":`sidebar-group`,"data-sidebar":`group`,class:c(i(j)(`relative flex w-full min-w-0 flex-col p-2`,t.class))},[D(e.$slots,`default`)],2))}}),Wt=y({__name:`SidebarGroupContent`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,n)=>(b(),u(`div`,{"data-slot":`sidebar-group-content`,"data-sidebar":`group-content`,class:c(i(j)(`w-full text-sm`,t.class))},[D(e.$slots,`default`)],2))}}),Gt=y({__name:`SidebarGroupLabel`,props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(n,r)=>(b(),w(i(F),{"data-slot":`sidebar-group-label`,"data-sidebar":`group-label`,as:e.as,"as-child":e.asChild,class:c(i(j)(`text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0`,`group-data-[collapsible=icon]:pointer-events-none group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:select-none group-data-[collapsible=icon]:opacity-0`,t.class))},{default:S(()=>[D(n.$slots,`default`)]),_:3},8,[`as`,`as-child`,`class`]))}}),Kt=y({__name:`SidebarHeader`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,n)=>(b(),u(`div`,{"data-slot":`sidebar-header`,"data-sidebar":`header`,class:c(i(j)(`flex flex-col gap-2 p-2`,t.class))},[D(e.$slots,`default`)],2))}}),qt=y({__name:`SidebarInset`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,n)=>(b(),u(`main`,{"data-slot":`sidebar-inset`,class:c(i(j)(`bg-background relative flex min-w-0 w-full flex-1 flex-col`,`md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2`,t.class))},[D(e.$slots,`default`)],2))}}),Jt=y({__name:`SidebarMenu`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,n)=>(b(),u(`ul`,{"data-slot":`sidebar-menu`,"data-sidebar":`menu`,class:c(i(j)(`flex w-full min-w-0 flex-col gap-1`,t.class))},[D(e.$slots,`default`)],2))}}),Yt=y({__name:`Tooltip`,props:{defaultOpen:{type:Boolean},open:{type:Boolean},delayDuration:{},disableHoverableContent:{type:Boolean},disableClosingTrigger:{type:Boolean},disabled:{type:Boolean},ignoreNonKeyboardFocus:{type:Boolean}},emits:[`update:open`],setup(t,{emit:n}){let r=B(t,n);return(t,n)=>(b(),w(i(yt),m({"data-slot":`tooltip`},i(r)),{default:S(n=>[D(t.$slots,`default`,e(k(n)))]),_:3},16))}}),Xt=y({inheritAttrs:!1,__name:`TooltipContent`,props:{forceMount:{type:Boolean},ariaLabel:{},asChild:{type:Boolean},as:{},side:{},sideOffset:{default:4},align:{},alignOffset:{},avoidCollisions:{type:Boolean},collisionBoundary:{},collisionPadding:{},arrowPadding:{},sticky:{},hideWhenDetached:{type:Boolean},positionStrategy:{},updatePositionStrategy:{},class:{type:[Boolean,null,String,Object,Array]}},emits:[`escapeKeyDown`,`pointerDownOutside`],setup(e,{emit:n}){let r=e,a=n,o=N(r,`class`),s=B(o,a);return(e,n)=>(b(),w(i(Ct),null,{default:S(()=>[t(i(St),m({"data-slot":`tooltip-content`},{...i(s),...e.$attrs},{class:i(j)(`bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit rounded-md px-3 py-1.5 text-xs text-balance`,r.class)}),{default:S(()=>[D(e.$slots,`default`),t(i(mt),{class:`bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-xs`})]),_:3},16,[`class`])]),_:3}))}}),Zt=y({__name:`TooltipTrigger`,props:{reference:{},asChild:{type:Boolean},as:{}},setup(e){let t=e;return(e,n)=>(b(),w(i(wt),m({"data-slot":`tooltip-trigger`},t),{default:S(()=>[D(e.$slots,`default`)]),_:3},16))}}),Qt=y({__name:`SidebarMenuButtonChild`,props:{variant:{default:`default`},size:{default:`default`},isActive:{type:Boolean},class:{type:[Boolean,null,String,Object,Array]},asChild:{type:Boolean},as:{default:`button`}},setup(e){let t=e;return(n,r)=>(b(),w(i(F),m({"data-slot":`sidebar-menu-button`,"data-sidebar":`menu-button`,"data-size":e.size,"data-active":e.isActive,class:i(j)(i(on)({variant:e.variant,size:e.size}),t.class),as:e.as,"as-child":e.asChild},n.$attrs),{default:S(()=>[D(n.$slots,`default`)]),_:3},16,[`data-size`,`data-active`,`class`,`as`,`as-child`]))}}),$t=y({inheritAttrs:!1,__name:`SidebarMenuButton`,props:{variant:{default:`default`},size:{default:`default`},isActive:{type:Boolean},class:{type:[Boolean,null,String,Object,Array]},asChild:{type:Boolean},as:{default:`button`},tooltip:{}},setup(r){let a=r,{isMobile:o,state:s}=X(),c=N(a,`tooltip`);return(a,l)=>r.tooltip?(b(),w(i(Yt),{key:1},{default:S(()=>[t(i(Zt),{"as-child":``},{default:S(()=>[t(Qt,e(k({...i(c),...a.$attrs})),{default:S(()=>[D(a.$slots,`default`)]),_:3},16)]),_:3}),t(i(Xt),{side:`right`,align:`center`,hidden:i(s)!==`collapsed`||i(o)},{default:S(()=>[typeof r.tooltip==`string`?(b(),u(x,{key:0},[n(C(r.tooltip),1)],64)):(b(),w(E(r.tooltip),{key:1}))]),_:1},8,[`hidden`])]),_:3})):(b(),w(Qt,e(m({key:0},{...i(c),...a.$attrs})),{default:S(()=>[D(a.$slots,`default`)]),_:3},16))}}),en=y({__name:`SidebarMenuItem`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,n)=>(b(),u(`li`,{"data-slot":`sidebar-menu-item`,"data-sidebar":`menu-item`,class:c(i(j)(`group/menu-item relative`,t.class))},[D(e.$slots,`default`)],2))}}),tn=y({__name:`SidebarProvider`,props:{defaultOpen:{type:Boolean,default:!le?.cookie.includes(`${jt}=false`)},open:{type:Boolean,default:void 0},class:{type:[Boolean,null,String,Object,Array]}},emits:[`update:open`],setup(e,{emit:t}){let n=e,r=t,a=de(`(max-width: 768px)`),o=T(!1),s=fe(n,`open`,r,{defaultValue:n.defaultOpen??!1,passive:n.open===void 0});function c(e){s.value=e,document.cookie=`${jt}=${s.value}; path=/; max-age=${Mt}`}function u(e){o.value=e}function d(){return a.value?u(!o.value):c(!s.value)}return P(`keydown`,e=>{e.key===`b`&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),d())}),It({state:g(()=>s.value?`expanded`:`collapsed`),open:s,setOpen:c,isMobile:a,openMobile:o,setOpenMobile:u,toggleSidebar:d}),(e,t)=>(b(),w(i(gt),{"delay-duration":0},{default:S(()=>[l(`div`,m({"data-slot":`sidebar-wrapper`,style:{"--sidebar-width":i(Nt),"--sidebar-width-icon":i(Ft)},class:i(j)(`group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full`,n.class)},e.$attrs),[D(e.$slots,`default`)],16)]),_:3}))}}),nn=y({__name:`SidebarRail`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e,{toggleSidebar:n}=X();return(e,r)=>(b(),u(`button`,{"data-sidebar":`rail`,"data-slot":`sidebar-rail`,"aria-label":`Toggle Sidebar`,tabindex:-1,title:`Toggle Sidebar`,class:c(i(j)(`hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-0.5 sm:flex`,`in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize`,`[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize`,`hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full`,`[[data-side=left][data-collapsible=offcanvas]_&]:-right-2`,`[[data-side=right][data-collapsible=offcanvas]_&]:-left-2`,t.class)),onClick:r[0]||=(...e)=>i(n)&&i(n)(...e)},[D(e.$slots,`default`)],2))}}),rn=y({__name:`Separator`,props:{orientation:{default:`horizontal`},decorative:{type:Boolean,default:!0},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e,n=N(t,`class`);return(e,r)=>(b(),w(i(q),m({"data-slot":`separator`},i(n),{class:i(j)(`bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px`,t.class)}),null,16,[`class`]))}}),an=y({__name:`SidebarTrigger`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let n=e,{toggleSidebar:r}=X();return(e,a)=>(b(),w(i(L),{"data-sidebar":`trigger`,"data-slot":`sidebar-trigger`,variant:`ghost`,size:`icon`,class:c(i(j)(`h-7 w-7`,n.class)),onClick:i(r)},{default:S(()=>[t(i(Je)),a[0]||=l(`span`,{class:`sr-only`},`Toggle Sidebar`,-1)]),_:1},8,[`class`,`onClick`]))}}),on=re(`peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-sm p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-primary/10 data-[active=true]:font-medium data-[active=true]:text-primary dark:data-[active=true]:bg-primary/15 data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0`,{variants:{variant:{default:`hover:bg-sidebar-accent hover:text-sidebar-accent-foreground`,outline:`bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]`},size:{default:`h-8 text-sm`,sm:`h-7 text-xs`,lg:`h-12 text-sm group-data-[collapsible=icon]:p-0!`}},defaultVariants:{variant:`default`,size:`default`}}),sn=``+new URL(`logo-D9vyMJZl.png`,import.meta.url).href,cn={class:`flex items-center gap-2 px-2 py-1.5 group-data-[collapsible=icon]:p-0!`},ln=[`src`],un={class:`flex flex-col overflow-hidden group-data-[collapsible=icon]:hidden`},dn={class:`truncate text-sm font-semibold`},fn={key:0,class:`text-muted-foreground truncate text-xs`},pn=y({__name:`Sidebar`,setup(e){let{data:r}=me(),a=A(),o=te(),{mutate:s}=Ue();function f(){s(void 0,{onSuccess:()=>o.push({name:`login`})})}function p(e){return e?H(e).style.value:null}return(e,o)=>(b(),w(i(Bt),{collapsible:`icon`},{default:S(()=>[t(i(Kt),null,{default:S(()=>[l(`div`,cn,[l(`img`,{src:i(sn),alt:`Logo`,class:`shrink-0 rounded-md object-contain size-7`},null,8,ln),l(`div`,un,[l(`span`,dn,C(i(r)?.name??`Admin`),1),i(r)?.description?(b(),u(`span`,fn,C(i(r).description),1)):O(``,!0)])])]),_:1}),t(i(Vt),null,{default:S(()=>[(b(!0),u(x,null,d(i(r)?.sections??[],e=>(b(),w(i(Ut),{key:e.id},{default:S(()=>[t(i(Gt),null,{default:S(()=>[n(C(e.name),1)]),_:2},1024),t(i(Wt),null,{default:S(()=>[t(i(Jt),null,{default:S(()=>[(b(!0),u(x,null,d(e.pages,n=>(b(),w(i(en),{key:n.id},{default:S(()=>[t(i($t),{"as-child":``,"is-active":i(a).params.sectionId===e.id&&i(a).params.pageId===n.id,tooltip:n.name},{default:S(()=>[t(i(Ne),{to:{name:`page`,params:{sectionId:e.id,pageId:n.id}}},{default:S(()=>[n.icon?(b(),w(i(U),{key:0,icon:`lucide:${n.icon}`,class:c(p(n.color)?.text)},null,8,[`icon`,`class`])):n.color?(b(),u(`span`,{key:1,class:c([p(n.color)?.dot,`size-1.5 rounded-full shrink-0`])},null,2)):O(``,!0),l(`span`,null,C(n.name),1)]),_:2},1032,[`to`])]),_:2},1032,[`is-active`,`tooltip`])]),_:2},1024))),128))]),_:2},1024)]),_:2},1024)]),_:2},1024))),128))]),_:1}),t(i(Ht),null,{default:S(()=>[t(i(Jt),null,{default:S(()=>[t(i(en),null,{default:S(()=>[t(i($t),{tooltip:`Logout`,onClick:f},{default:S(()=>[t(i(U),{icon:`lucide:log-out`}),o[0]||=l(`span`,null,`Logout`,-1)]),_:1})]),_:1})]),_:1})]),_:1}),t(i(nn))]),_:1}))}}),mn=y({__name:`Command`,props:{modelValue:{default:``},defaultValue:{},multiple:{type:Boolean},orientation:{},dir:{},disabled:{type:Boolean},selectionBehavior:{},highlightOnHover:{type:Boolean,default:!0},by:{},asChild:{type:Boolean},as:{},name:{},required:{type:Boolean},class:{type:[Boolean,null,String,Object,Array]}},emits:[`update:modelValue`,`highlight`,`entryFocus`,`leave`],setup(e,{emit:t}){let n=e,a=t,o=N(n,`class`),s=B(o,a),c=T(new Map),l=T(new Map),{contains:u}=_e({sensitivity:`base`}),d=_({search:``,filtered:{count:0,items:new Map,groups:new Set}});function f(){if(!d.search){d.filtered.count=c.value.size;return}d.filtered.groups=new Set;let e=0;for(let[t,n]of c.value){let r=u(n,d.search);d.filtered.items.set(t,+!!r),r&&e++}for(let[e,t]of l.value)for(let n of t)if(d.filtered.items.get(n)>0){d.filtered.groups.add(e);break}d.filtered.count=e}return r(()=>d.search,()=>{f()}),Dn({allItems:c,allGroups:l,filterState:d}),(e,t)=>(b(),w(i(Te),m({"data-slot":`command`},i(s),{class:i(j)(`bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md`,n.class)}),{default:S(()=>[D(e.$slots,`default`)]),_:3},16,[`class`]))}}),hn=y({__name:`DialogDescription`,props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e,n=N(t,`class`),r=V(n);return(e,n)=>(b(),w(i(G),m({"data-slot":`dialog-description`},i(r),{class:i(j)(`text-muted-foreground text-sm`,t.class)}),{default:S(()=>[D(e.$slots,`default`)]),_:3},16,[`class`]))}}),gn=y({__name:`DialogHeader`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,n)=>(b(),u(`div`,{"data-slot":`dialog-header`,class:c(i(j)(`flex flex-col gap-2 text-center sm:text-left`,t.class))},[D(e.$slots,`default`)],2))}}),_n=y({__name:`DialogTitle`,props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e,n=N(t,`class`),r=V(n);return(e,n)=>(b(),w(i(K),m({"data-slot":`dialog-title`},i(r),{class:i(j)(`text-lg leading-none font-semibold`,t.class)}),{default:S(()=>[D(e.$slots,`default`)]),_:3},16,[`class`]))}}),vn=y({__name:`CommandDialog`,props:{open:{type:Boolean},defaultOpen:{type:Boolean},modal:{type:Boolean},unmountOnHide:{type:Boolean},title:{default:`Command Palette`},description:{default:`Search for a command to run...`}},emits:[`update:open`],setup(r,{emit:a}){let o=B(r,a);return(a,s)=>(b(),w(i(Ie),e(k(i(o))),{default:S(o=>[t(i(ze),{class:`overflow-hidden p-0`,"overlay-class":`bg-transparent backdrop-blur-sm`,"show-close-button":!1},{default:S(()=>[t(i(gn),{class:`sr-only`},{default:S(()=>[t(i(_n),null,{default:S(()=>[n(C(r.title),1)]),_:1}),t(i(hn),null,{default:S(()=>[n(C(r.description),1)]),_:1})]),_:1}),t(mn,null,{default:S(()=>[D(a.$slots,`default`,e(k(o)))]),_:2},1024)]),_:2},1024)]),_:3},16))}}),yn=y({__name:`CommandEmpty`,props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e,n=N(t,`class`),{filterState:r}=Z(),a=g(()=>!!r.search&&r.filtered.count===0);return(e,r)=>a.value?(b(),w(i(F),m({key:0,"data-slot":`command-empty`},i(n),{class:i(j)(`py-6 text-center text-sm`,t.class)}),{default:S(()=>[D(e.$slots,`default`)]),_:3},16,[`class`])):O(``,!0)}}),bn=y({__name:`CommandGroup`,props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]},heading:{}},setup(e){let t=e,r=N(t,`class`),{allGroups:a,filterState:o}=Z(),s=z(),c=g(()=>!o.search||o.filtered.groups.has(s));return kn({id:s}),f(()=>{a.value.has(s)||a.value.set(s,new Set)}),h(()=>{a.value.delete(s)}),(a,o)=>(b(),w(i(ot),m(i(r),{id:i(s),"data-slot":`command-group`,class:i(j)(`text-foreground overflow-hidden p-1`,t.class),hidden:!c.value||void 0}),{default:S(()=>[e.heading?(b(),w(i(st),{key:0,"data-slot":`command-group-heading`,class:`px-2 py-1.5 text-xs font-medium text-muted-foreground`},{default:S(()=>[n(C(e.heading),1)]),_:1})):O(``,!0),D(a.$slots,`default`)]),_:3},16,[`id`,`class`,`hidden`]))}}),xn={"data-slot":`command-input-wrapper`,class:`flex h-9 items-center gap-2 border-b px-3`},Sn=y({inheritAttrs:!1,__name:`CommandInput`,props:{modelValue:{},autoFocus:{type:Boolean},disabled:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let n=e,r=N(n,`class`),a=V(r),{filterState:o}=Z();return(e,r)=>(b(),u(`div`,xn,[t(i(Ye),{class:`size-4 shrink-0 opacity-50`}),t(i(Se),m({...i(a),...e.$attrs},{modelValue:i(o).search,"onUpdate:modelValue":r[0]||=e=>i(o).search=e,"data-slot":`command-input`,"auto-focus":``,class:i(j)(`placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50`,n.class)}),null,16,[`modelValue`,`class`])]))}}),Cn=y({__name:`CommandItem`,props:{value:{},disabled:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},emits:[`select`],setup(e,{emit:t}){let n=e,r=t,a=N(n,`class`),o=B(a,r),s=z(),{filterState:c,allItems:l,allGroups:u}=Z(),d=On(),p=g(()=>{if(c.search){let e=c.filtered.items.get(s);return e===void 0||e>0}return!0}),_=T(),v=ue(_);return f(()=>{if(!(v.value instanceof HTMLElement))return;l.value.set(s,v.value.textContent??n.value?.toString()??``);let e=d?.id;e&&(u.value.has(e)?u.value.get(e)?.add(s):u.value.set(e,new Set([s])))}),h(()=>{l.value.delete(s)}),(e,t)=>p.value?(b(),w(i(xe),m({key:0},i(o),{id:i(s),ref_key:`itemRef`,ref:_,"data-slot":`command-item`,class:i(j)(`data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,n.class),onSelect:t[0]||=()=>{i(c).search=``}}),{default:S(()=>[D(e.$slots,`default`)]),_:3},16,[`id`,`class`])):O(``,!0)}}),wn={role:`presentation`},Tn=y({__name:`CommandList`,props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e,n=N(t,`class`),r=V(n);return(e,n)=>(b(),w(i(De),m({"data-slot":`command-list`},i(r),{class:i(j)(`max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto`,t.class)}),{default:S(()=>[l(`div`,wn,[D(e.$slots,`default`)])]),_:3},16,[`class`]))}}),En=y({__name:`CommandSeparator`,props:{orientation:{},decorative:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e,n=N(t,`class`);return(e,r)=>(b(),w(i(q),m({"data-slot":`command-separator`},i(n),{class:i(j)(`bg-border -mx-1 h-px`,t.class)}),{default:S(()=>[D(e.$slots,`default`)]),_:3},16,[`class`]))}}),[Z,Dn]=W(`Command`),[On,kn]=W(`CommandGroup`),Q=T(!1),An={class:`text-muted-foreground flex items-center gap-1.5 px-2 py-1.5 text-xs font-medium`},jn={class:`text-muted-foreground`},Mn=y({__name:`CommandPanel`,setup(e){let r=te(),{data:a}=me();function o(e,t){Q.value=!1,r.push({name:`page`,params:{sectionId:e,pageId:t}})}function s(e,t,n){Q.value=!1,n.type===`form`?r.push({name:`form`,params:{sectionId:e,pageId:t,formId:n.id}}):r.push({name:`page`,params:{sectionId:e,pageId:t}})}let{meta_p:f,ctrl_p:p}=se({passive:!1,onEventFired(e){e.key.toLowerCase()===`p`&&(e.metaKey||e.ctrlKey)&&e.preventDefault()}});M(f,()=>{Q.value=!0}),M(p,()=>{Q.value=!0});function m(e){return`icon`in e?e.icon??null:null}function h(e){return`color`in e?e.color??null:null}function g(e){return e?H(e).style.value.text:void 0}function _(e){return e?[H(e).style.value.dot,`size-1.5 rounded-full shrink-0`]:void 0}return(e,r)=>(b(),w(i(vn),{open:i(Q),"onUpdate:open":r[0]||=e=>ee(Q)?Q.value=e:null,title:`Command Panel`,description:`Search sections, pages, and components...`},{default:S(()=>[t(i(Sn),{placeholder:`Search sections, pages, and components...`}),t(i(Tn),null,{default:S(()=>[t(i(yn),null,{default:S(()=>[...r[1]||=[n(`No results found.`,-1)]]),_:1}),(b(!0),u(x,null,d(i(a)?.sections??[],(e,n)=>(b(),u(x,{key:e.id},[n>0?(b(),w(i(En),{key:0})):O(``,!0),t(i(bn),null,{default:S(()=>[l(`div`,An,[e.icon?(b(),w(i(U),{key:0,icon:`lucide:${e.icon}`,class:`size-3.5 shrink-0`},null,8,[`icon`])):O(``,!0),l(`span`,null,C(e.name),1)]),(b(!0),u(x,null,d(e.pages,n=>(b(),u(x,{key:n.id},[t(i(Cn),{value:n.id,onSelect:t=>o(e.id,n.id)},{default:S(()=>[n.icon?(b(),w(i(U),{key:0,icon:`lucide:${n.icon}`,class:c(g(n.color))},null,8,[`icon`,`class`])):n.color?(b(),u(`span`,{key:1,class:c(_(n.color))},null,2)):O(``,!0),l(`span`,null,C(n.name),1)]),_:2},1032,[`value`,`onSelect`]),(b(!0),u(x,null,d(n.components,t=>(b(),w(i(Cn),{key:t.id,value:t.id,class:`pl-8`,onSelect:r=>s(e.id,n.id,t)},{default:S(()=>[m(t)?(b(),w(i(U),{key:0,icon:`lucide:${m(t)}`,class:c(g(h(t)))},null,8,[`icon`,`class`])):h(t)?(b(),u(`span`,{key:1,class:c(_(h(t)))},null,2)):O(``,!0),l(`span`,jn,C(t.name),1)]),_:2},1032,[`value`,`onSelect`]))),128))],64))),128))]),_:2},1024)],64))),128))]),_:1})]),_:1},8,[`open`]))}}),Nn=y({__name:`KbdGroup`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,n)=>(b(),u(`kbd`,{"data-slot":`kbd-group`,class:c(i(j)(`inline-flex items-center gap-1`,t.class))},[D(e.$slots,`default`)],2))}}),Pn=y({inheritAttrs:!1,__name:`CommandTrigger`,setup(e){let r=g(()=>/Mac|iPhone|iPad|iPod/.test(navigator.platform));return(e,a)=>(b(),w(i(Yt),null,{default:S(()=>[t(i(Zt),{"as-child":``},{default:S(()=>[t(i(L),m({type:`button`,variant:`ghost`,size:`icon`,"aria-label":`Open command palette`},e.$attrs,{onClick:a[0]||=e=>Q.value=!0}),{default:S(()=>[t(i(Ke))]),_:1},16)]),_:1}),t(i(Xt),{class:`flex items-center gap-2`},{default:S(()=>[a[2]||=n(` Command Palette `,-1),t(i(Nn),null,{default:S(()=>[t(i(Ve),null,{default:S(()=>[n(C(r.value?`⌘`:`Ctrl`),1)]),_:1}),t(i(Ve),null,{default:S(()=>[...a[1]||=[n(`P`,-1)]]),_:1})]),_:1})]),_:1})]),_:1}))}}),Fn=y({__name:`ThemeToggle`,setup(e){return(e,t)=>(b(),w(i(L),{type:`button`,variant:`ghost`,size:`icon`,"aria-label":i(Ge)?`Switch to light theme`:`Switch to dark theme`,onClick:t[0]||=e=>i(We)()},{default:S(()=>[i(Ge)?(b(),w(i(Xe),{key:0})):(b(),w(i(qe),{key:1}))]),_:1},8,[`aria-label`]))}}),In=y({__name:`Breadcrumb`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,n)=>(b(),u(`nav`,{"aria-label":`breadcrumb`,"data-slot":`breadcrumb`,class:c(t.class)},[D(e.$slots,`default`)],2))}}),$=y({__name:`BreadcrumbItem`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,n)=>(b(),u(`li`,{"data-slot":`breadcrumb-item`,class:c(i(j)(`inline-flex items-center gap-1.5`,t.class))},[D(e.$slots,`default`)],2))}}),Ln=y({__name:`BreadcrumbList`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,n)=>(b(),u(`ol`,{"data-slot":`breadcrumb-list`,class:c(i(j)(`text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5`,t.class))},[D(e.$slots,`default`)],2))}}),Rn=y({__name:`BreadcrumbPage`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,n)=>(b(),u(`span`,{"data-slot":`breadcrumb-page`,role:`link`,"aria-disabled":`true`,"aria-current":`page`,class:c(i(j)(`text-foreground font-normal`,t.class))},[D(e.$slots,`default`)],2))}}),zn=y({__name:`BreadcrumbSeparator`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let n=e;return(e,r)=>(b(),u(`li`,{"data-slot":`breadcrumb-separator`,role:`presentation`,"aria-hidden":`true`,class:c(i(j)(`[&>svg]:size-3.5`,n.class))},[D(e.$slots,`default`,{},()=>[t(i(Ce))])],2))}}),Bn={class:`flex h-14 shrink-0 items-center gap-2 border-b px-4`},Vn={class:`text-muted-foreground`},Hn=y({__name:`TopPanel`,setup(e){let r=A(),a=g(()=>r.params.sectionId),o=g(()=>r.params.pageId),s=g(()=>r.params.formId||``),{data:d}=Oe({sectionId:a}),{page:f}=Ee({sectionId:a,pageId:o}),{form:p}=Ae({sectionId:a,pageId:o,formId:s}),{style:m}=H(()=>p.value?.color||`slate`);return(e,r)=>(b(),u(x,null,[l(`header`,Bn,[t(i(an)),t(i(rn),{orientation:`vertical`,class:`mr-2 h-4`}),i(d)&&i(f)?(b(),w(i(In),{key:0},{default:S(()=>[t(i(Ln),null,{default:S(()=>[t(i($),null,{default:S(()=>[l(`span`,Vn,C(i(d).name),1)]),_:1}),t(i(zn)),t(i($),null,{default:S(()=>[t(i(Rn),{class:`flex items-center gap-1.5`},{default:S(()=>[i(f).icon?(b(),w(i(U),{key:0,icon:`lucide:${i(f).icon}`},null,8,[`icon`])):O(``,!0),n(` `+C(i(f).name),1)]),_:1})]),_:1}),i(p)?(b(),w(i(zn),{key:0})):O(``,!0),i(p)?(b(),w(i($),{key:1},{default:S(()=>[t(i(Rn),{class:`flex items-center gap-1.5`},{default:S(()=>[i(p).icon?(b(),w(i(U),{key:0,icon:`lucide:${i(p).icon}`,class:c(i(m).text)},null,8,[`icon`,`class`])):O(``,!0),n(` `+C(i(p).name),1)]),_:1})]),_:1})):O(``,!0)]),_:1})]),_:1})):O(``,!0),t(Pn,{class:`ml-auto`}),t(Fn)]),t(Mn)],64))}}),Un={class:`flex-1 overflow-auto p-4 md:p-6`},Wn=y({__name:`Dashboard`,setup(e){let n=A();return(e,r)=>{let o=a(`router-view`);return b(),w(i(tn),null,{default:S(()=>[t(pn),t(i(qt),null,{default:S(()=>[t(Hn),l(`main`,Un,[(b(),w(o,{key:i(n).fullPath}))])]),_:1})]),_:1})}}});export{Wn as default};
|