새로운 Svelte 컴포넌트 추가 및 기존 컴포넌트의 내보내기 수정
This commit is contained in:
commit
a2df477507
1
.env.example
Normal file
1
.env.example
Normal file
@ -0,0 +1 @@
|
||||
DATABASE_URL=file:local.db
|
||||
23
.github/copilot-instructions.md
vendored
Normal file
23
.github/copilot-instructions.md
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
You are able to use the Svelte MCP server, where you have access to comprehensive Svelte 5 and SvelteKit documentation. Here's how to use the available tools effectively:
|
||||
|
||||
## Available MCP Tools:
|
||||
|
||||
### 1. list-sections
|
||||
|
||||
Use this FIRST to discover all available documentation sections. Returns a structured list with titles, use_cases, and paths.
|
||||
When asked about Svelte or SvelteKit topics, ALWAYS use this tool at the start of the chat to find relevant sections.
|
||||
|
||||
### 2. get-documentation
|
||||
|
||||
Retrieves full documentation content for specific sections. Accepts single or multiple sections.
|
||||
After calling the list-sections tool, you MUST analyze the returned documentation sections (especially the use_cases field) and then use the get-documentation tool to fetch ALL documentation sections that are relevant for the user's task.
|
||||
|
||||
### 3. svelte-autofixer
|
||||
|
||||
Analyzes Svelte code and returns issues and suggestions.
|
||||
You MUST use this tool whenever writing Svelte code before sending it to the user. Keep calling it until no issues or suggestions are returned.
|
||||
|
||||
### 4. playground-link
|
||||
|
||||
Generates a Svelte Playground link with the provided code.
|
||||
After completing the code, ask the user if they want a playground link. Only call this tool after user confirmation and NEVER if code was written to files in their project.
|
||||
26
.gitignore
vendored
Normal file
26
.gitignore
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
node_modules
|
||||
|
||||
# Output
|
||||
.output
|
||||
.vercel
|
||||
.netlify
|
||||
.wrangler
|
||||
/.svelte-kit
|
||||
/build
|
||||
|
||||
# OS
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# Env
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
||||
!.env.test
|
||||
|
||||
# Vite
|
||||
vite.config.js.timestamp-*
|
||||
vite.config.ts.timestamp-*
|
||||
|
||||
# SQLite
|
||||
*.db
|
||||
8
.idea/.gitignore
generated
vendored
Normal file
8
.idea/.gitignore
generated
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
# 디폴트 무시된 파일
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# 에디터 기반 HTTP 클라이언트 요청
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
||||
63
.idea/codeStyles/Project.xml
generated
Normal file
63
.idea/codeStyles/Project.xml
generated
Normal file
@ -0,0 +1,63 @@
|
||||
<component name="ProjectCodeStyleConfiguration">
|
||||
<code_scheme name="Project" version="173">
|
||||
<HTMLCodeStyleSettings>
|
||||
<option name="HTML_SPACE_INSIDE_EMPTY_TAG" value="true" />
|
||||
</HTMLCodeStyleSettings>
|
||||
<JSCodeStyleSettings version="0">
|
||||
<option name="FORCE_SEMICOLON_STYLE" value="true" />
|
||||
<option name="SPACE_BEFORE_FUNCTION_LEFT_PARENTH" value="false" />
|
||||
<option name="USE_DOUBLE_QUOTES" value="false" />
|
||||
<option name="FORCE_QUOTE_STYlE" value="true" />
|
||||
<option name="ENFORCE_TRAILING_COMMA" value="Remove" />
|
||||
<option name="SPACES_WITHIN_OBJECT_LITERAL_BRACES" value="true" />
|
||||
<option name="SPACES_WITHIN_IMPORTS" value="true" />
|
||||
</JSCodeStyleSettings>
|
||||
<TypeScriptCodeStyleSettings version="0">
|
||||
<option name="FORCE_SEMICOLON_STYLE" value="true" />
|
||||
<option name="SPACE_BEFORE_FUNCTION_LEFT_PARENTH" value="false" />
|
||||
<option name="USE_DOUBLE_QUOTES" value="false" />
|
||||
<option name="FORCE_QUOTE_STYlE" value="true" />
|
||||
<option name="ENFORCE_TRAILING_COMMA" value="Remove" />
|
||||
<option name="SPACES_WITHIN_OBJECT_LITERAL_BRACES" value="true" />
|
||||
<option name="SPACES_WITHIN_IMPORTS" value="true" />
|
||||
</TypeScriptCodeStyleSettings>
|
||||
<VueCodeStyleSettings>
|
||||
<option name="INTERPOLATION_NEW_LINE_AFTER_START_DELIMITER" value="false" />
|
||||
<option name="INTERPOLATION_NEW_LINE_BEFORE_END_DELIMITER" value="false" />
|
||||
</VueCodeStyleSettings>
|
||||
<codeStyleSettings language="HTML">
|
||||
<option name="SOFT_MARGINS" value="100" />
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
||||
<option name="TAB_SIZE" value="2" />
|
||||
<option name="USE_TAB_CHARACTER" value="true" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="JavaScript">
|
||||
<option name="SOFT_MARGINS" value="100" />
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
||||
<option name="TAB_SIZE" value="2" />
|
||||
<option name="USE_TAB_CHARACTER" value="true" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="TypeScript">
|
||||
<option name="SOFT_MARGINS" value="100" />
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
||||
<option name="TAB_SIZE" value="2" />
|
||||
<option name="USE_TAB_CHARACTER" value="true" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="Vue">
|
||||
<option name="SOFT_MARGINS" value="100" />
|
||||
<indentOptions>
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
||||
<option name="USE_TAB_CHARACTER" value="true" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
</code_scheme>
|
||||
</component>
|
||||
5
.idea/codeStyles/codeStyleConfig.xml
generated
Normal file
5
.idea/codeStyles/codeStyleConfig.xml
generated
Normal file
@ -0,0 +1,5 @@
|
||||
<component name="ProjectCodeStyleConfiguration">
|
||||
<state>
|
||||
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
|
||||
</state>
|
||||
</component>
|
||||
6
.idea/copilot.data.migration.agent.xml
generated
Normal file
6
.idea/copilot.data.migration.agent.xml
generated
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="AgentMigrationStateService">
|
||||
<option name="migrationStatus" value="COMPLETED" />
|
||||
</component>
|
||||
</project>
|
||||
6
.idea/copilot.data.migration.ask.xml
generated
Normal file
6
.idea/copilot.data.migration.ask.xml
generated
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="AskMigrationStateService">
|
||||
<option name="migrationStatus" value="COMPLETED" />
|
||||
</component>
|
||||
</project>
|
||||
6
.idea/copilot.data.migration.ask2agent.xml
generated
Normal file
6
.idea/copilot.data.migration.ask2agent.xml
generated
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Ask2AgentMigrationStateService">
|
||||
<option name="migrationStatus" value="COMPLETED" />
|
||||
</component>
|
||||
</project>
|
||||
6
.idea/copilot.data.migration.edit.xml
generated
Normal file
6
.idea/copilot.data.migration.edit.xml
generated
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="EditMigrationStateService">
|
||||
<option name="migrationStatus" value="COMPLETED" />
|
||||
</component>
|
||||
</project>
|
||||
7
.idea/misc.xml
generated
Normal file
7
.idea/misc.xml
generated
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="KubernetesApiProvider"><![CDATA[{}]]></component>
|
||||
<component name="ProjectRootManager">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
</project>
|
||||
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/taisai-svelte.iml" filepath="$PROJECT_DIR$/.idea/taisai-svelte.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
6
.idea/prettier.xml
generated
Normal file
6
.idea/prettier.xml
generated
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="PrettierConfiguration">
|
||||
<option name="myConfigurationMode" value="AUTOMATIC" />
|
||||
</component>
|
||||
</project>
|
||||
9
.idea/taisai-svelte.iml
generated
Normal file
9
.idea/taisai-svelte.iml
generated
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
508
.idea/workspace.xml
generated
Normal file
508
.idea/workspace.xml
generated
Normal file
@ -0,0 +1,508 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="AutoImportSettings">
|
||||
<option name="autoReloadType" value="SELECTIVE" />
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="027e6af4-a007-480d-9766-cd603cf60fb1" name="변경" comment="">
|
||||
<change afterPath="$PROJECT_DIR$/.env" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.env.example" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.github/copilot-instructions.md" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.gitignore" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.idea/.gitignore" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.idea/codeStyles/Project.xml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.idea/codeStyles/codeStyleConfig.xml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.idea/copilot.data.migration.agent.xml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.idea/copilot.data.migration.ask.xml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.idea/copilot.data.migration.ask2agent.xml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.idea/copilot.data.migration.edit.xml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.idea/modules.xml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.idea/prettier.xml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.idea/taisai-svelte.iml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.npmrc" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.prettierignore" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.prettierrc" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/components.json" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/drizzle.config.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/package.json" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/pnpm-lock.yaml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/pnpm-workspace.yaml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/app.css" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/app.d.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/app.html" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/hooks.server.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/assets/favicon.svg" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/accordion/accordion-content.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/accordion/accordion-item.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/accordion/accordion-trigger.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/accordion/accordion.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/accordion/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/alert-dialog/alert-dialog-action.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/alert-dialog/alert-dialog-cancel.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/alert-dialog/alert-dialog-content.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/alert-dialog/alert-dialog-description.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/alert-dialog/alert-dialog-footer.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/alert-dialog/alert-dialog-header.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/alert-dialog/alert-dialog-overlay.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/alert-dialog/alert-dialog-title.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/alert-dialog/alert-dialog-trigger.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/alert-dialog/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/alert/alert-description.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/alert/alert-title.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/alert/alert.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/alert/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/aspect-ratio/aspect-ratio.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/aspect-ratio/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/avatar/avatar-fallback.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/avatar/avatar-image.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/avatar/avatar.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/avatar/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/badge/badge.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/badge/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/breadcrumb/breadcrumb-ellipsis.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/breadcrumb/breadcrumb-item.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/breadcrumb/breadcrumb-link.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/breadcrumb/breadcrumb-list.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/breadcrumb/breadcrumb-page.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/breadcrumb/breadcrumb-separator.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/breadcrumb/breadcrumb.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/breadcrumb/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/button-group/button-group-separator.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/button-group/button-group-text.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/button-group/button-group.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/button-group/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/button/button.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/button/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/calendar/calendar-caption.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/calendar/calendar-cell.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/calendar/calendar-day.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/calendar/calendar-grid-body.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/calendar/calendar-grid-head.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/calendar/calendar-grid-row.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/calendar/calendar-grid.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/calendar/calendar-head-cell.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/calendar/calendar-header.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/calendar/calendar-heading.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/calendar/calendar-month-select.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/calendar/calendar-month.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/calendar/calendar-months.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/calendar/calendar-nav.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/calendar/calendar-next-button.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/calendar/calendar-prev-button.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/calendar/calendar-year-select.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/calendar/calendar.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/calendar/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/card/card-action.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/card/card-content.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/card/card-description.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/card/card-footer.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/card/card-header.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/card/card-title.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/card/card.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/card/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/carousel/carousel-content.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/carousel/carousel-item.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/carousel/carousel-next.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/carousel/carousel-previous.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/carousel/carousel.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/carousel/context.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/carousel/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/chart/chart-container.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/chart/chart-style.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/chart/chart-tooltip.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/chart/chart-utils.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/chart/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/checkbox/checkbox.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/checkbox/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/collapsible/collapsible-content.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/collapsible/collapsible-trigger.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/collapsible/collapsible.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/collapsible/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/command/command-dialog.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/command/command-empty.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/command/command-group.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/command/command-input.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/command/command-item.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/command/command-link-item.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/command/command-list.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/command/command-separator.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/command/command-shortcut.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/command/command.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/command/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/context-menu/context-menu-checkbox-item.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/context-menu/context-menu-content.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/context-menu/context-menu-group-heading.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/context-menu/context-menu-group.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/context-menu/context-menu-item.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/context-menu/context-menu-label.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/context-menu/context-menu-radio-group.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/context-menu/context-menu-radio-item.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/context-menu/context-menu-separator.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/context-menu/context-menu-shortcut.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/context-menu/context-menu-sub-content.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/context-menu/context-menu-sub-trigger.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/context-menu/context-menu-trigger.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/context-menu/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/data-table/data-table.svelte.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/data-table/flex-render.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/data-table/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/data-table/render-helpers.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/dialog/dialog-close.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/dialog/dialog-content.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/dialog/dialog-description.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/dialog/dialog-footer.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/dialog/dialog-header.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/dialog/dialog-overlay.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/dialog/dialog-title.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/dialog/dialog-trigger.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/dialog/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/drawer/drawer-close.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/drawer/drawer-content.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/drawer/drawer-description.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/drawer/drawer-footer.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/drawer/drawer-header.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/drawer/drawer-nested.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/drawer/drawer-overlay.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/drawer/drawer-title.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/drawer/drawer-trigger.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/drawer/drawer.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/drawer/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/dropdown-menu/dropdown-menu-group.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/dropdown-menu/dropdown-menu-trigger.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/dropdown-menu/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/empty/empty-content.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/empty/empty-description.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/empty/empty-header.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/empty/empty-media.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/empty/empty-title.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/empty/empty.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/empty/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/field/field-content.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/field/field-description.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/field/field-error.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/field/field-group.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/field/field-label.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/field/field-legend.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/field/field-separator.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/field/field-set.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/field/field-title.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/field/field.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/field/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/form/form-button.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/form/form-description.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/form/form-element-field.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/form/form-field-errors.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/form/form-field.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/form/form-fieldset.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/form/form-label.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/form/form-legend.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/form/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/hover-card/hover-card-content.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/hover-card/hover-card-trigger.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/hover-card/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/input-group/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/input-group/input-group-addon.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/input-group/input-group-button.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/input-group/input-group-input.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/input-group/input-group-text.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/input-group/input-group-textarea.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/input-group/input-group.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/input-otp/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/input-otp/input-otp-group.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/input-otp/input-otp-separator.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/input-otp/input-otp-slot.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/input-otp/input-otp.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/input/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/input/input.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/item/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/item/item-actions.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/item/item-content.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/item/item-description.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/item/item-footer.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/item/item-group.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/item/item-header.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/item/item-media.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/item/item-separator.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/item/item-title.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/item/item.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/kbd/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/kbd/kbd-group.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/kbd/kbd.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/label/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/label/label.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/menubar/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/menubar/menubar-checkbox-item.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/menubar/menubar-content.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/menubar/menubar-group-heading.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/menubar/menubar-group.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/menubar/menubar-item.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/menubar/menubar-label.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/menubar/menubar-radio-item.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/menubar/menubar-separator.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/menubar/menubar-shortcut.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/menubar/menubar-sub-content.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/menubar/menubar-sub-trigger.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/menubar/menubar-trigger.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/menubar/menubar.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/native-select/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/native-select/native-select-opt-group.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/native-select/native-select-option.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/native-select/native-select.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/navigation-menu/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/navigation-menu/navigation-menu-content.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/navigation-menu/navigation-menu-indicator.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/navigation-menu/navigation-menu-item.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/navigation-menu/navigation-menu-link.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/navigation-menu/navigation-menu-list.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/navigation-menu/navigation-menu-trigger.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/navigation-menu/navigation-menu-viewport.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/navigation-menu/navigation-menu.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/pagination/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/pagination/pagination-content.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/pagination/pagination-ellipsis.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/pagination/pagination-item.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/pagination/pagination-link.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/pagination/pagination-next-button.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/pagination/pagination-prev-button.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/pagination/pagination.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/popover/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/popover/popover-content.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/popover/popover-trigger.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/progress/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/progress/progress.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/radio-group/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/radio-group/radio-group-item.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/radio-group/radio-group.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/range-calendar/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/range-calendar/range-calendar-caption.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/range-calendar/range-calendar-cell.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/range-calendar/range-calendar-day.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/range-calendar/range-calendar-grid-row.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/range-calendar/range-calendar-grid.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/range-calendar/range-calendar-head-cell.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/range-calendar/range-calendar-header.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/range-calendar/range-calendar-heading.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/range-calendar/range-calendar-month-select.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/range-calendar/range-calendar-month.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/range-calendar/range-calendar-months.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/range-calendar/range-calendar-nav.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/range-calendar/range-calendar-next-button.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/range-calendar/range-calendar-prev-button.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/range-calendar/range-calendar-year-select.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/range-calendar/range-calendar.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/resizable/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/resizable/resizable-handle.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/resizable/resizable-pane-group.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/scroll-area/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/scroll-area/scroll-area-scrollbar.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/scroll-area/scroll-area.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/select/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/select/select-content.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/select/select-group-heading.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/select/select-group.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/select/select-item.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/select/select-label.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/select/select-scroll-down-button.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/select/select-scroll-up-button.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/select/select-separator.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/select/select-trigger.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/separator/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/separator/separator.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sheet/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sheet/sheet-close.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sheet/sheet-content.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sheet/sheet-description.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sheet/sheet-footer.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sheet/sheet-header.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sheet/sheet-overlay.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sheet/sheet-title.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sheet/sheet-trigger.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sidebar/constants.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sidebar/context.svelte.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sidebar/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sidebar/sidebar-content.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sidebar/sidebar-footer.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sidebar/sidebar-group-action.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sidebar/sidebar-group-content.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sidebar/sidebar-group-label.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sidebar/sidebar-group.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sidebar/sidebar-header.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sidebar/sidebar-input.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sidebar/sidebar-inset.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sidebar/sidebar-menu-action.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sidebar/sidebar-menu-badge.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sidebar/sidebar-menu-button.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sidebar/sidebar-menu-item.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sidebar/sidebar-menu-skeleton.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sidebar/sidebar-menu-sub-button.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sidebar/sidebar-menu-sub-item.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sidebar/sidebar-menu-sub.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sidebar/sidebar-menu.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sidebar/sidebar-provider.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sidebar/sidebar-rail.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sidebar/sidebar-separator.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sidebar/sidebar-trigger.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sidebar/sidebar.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/skeleton/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/skeleton/skeleton.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/slider/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/slider/slider.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sonner/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/sonner/sonner.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/spinner/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/spinner/spinner.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/switch/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/switch/switch.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/table/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/table/table-body.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/table/table-caption.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/table/table-cell.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/table/table-footer.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/table/table-head.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/table/table-header.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/table/table-row.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/table/table.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/tabs/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/tabs/tabs-content.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/tabs/tabs-list.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/tabs/tabs-trigger.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/tabs/tabs.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/textarea/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/textarea/textarea.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/toggle-group/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/toggle-group/toggle-group-item.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/toggle-group/toggle-group.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/toggle/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/toggle/toggle.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/tooltip/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/tooltip/tooltip-content.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/components/ui/tooltip/tooltip-trigger.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/hooks/is-mobile.svelte.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/server/auth.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/server/db/index.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/server/db/schema.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/lib/utils.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/routes/+layout.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/routes/+page.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/routes/demo/+page.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/routes/demo/lucia/+page.server.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/routes/demo/lucia/+page.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/routes/demo/lucia/login/+page.server.ts" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/src/routes/demo/lucia/login/+page.svelte" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/static/robots.txt" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/svelte-mcp-instruction.md" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/svelte.config.js" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/tsconfig.json" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/vite.config.ts" afterDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||
</component>
|
||||
<component name="Git.Settings">
|
||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||
</component>
|
||||
<component name="ProjectColorInfo"><![CDATA[{
|
||||
"associatedIndex": 4
|
||||
}]]></component>
|
||||
<component name="ProjectId" id="35QZk9eFiT4PzUegrfJTvpdLB6i" />
|
||||
<component name="ProjectViewState">
|
||||
<option name="hideEmptyMiddlePackages" value="true" />
|
||||
<option name="showLibraryContents" value="true" />
|
||||
</component>
|
||||
<component name="PropertiesComponent"><![CDATA[{
|
||||
"keyToString": {
|
||||
"ModuleVcsDetector.initialDetectionPerformed": "true",
|
||||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||
"RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true",
|
||||
"com.intellij.ml.llm.matterhorn.ej.ui.settings.DefaultModelSelectionForGA.v1": "true",
|
||||
"git-widget-placeholder": "master",
|
||||
"ignore.virus.scanning.warn.message": "true",
|
||||
"junie.onboarding.icon.badge.shown": "true",
|
||||
"kotlin-language-version-configured": "true",
|
||||
"last_opened_file_path": "C:/gitea/taisai-svelte",
|
||||
"node.js.detected.package.eslint": "true",
|
||||
"node.js.detected.package.tslint": "true",
|
||||
"node.js.selected.package.eslint": "(autodetect)",
|
||||
"node.js.selected.package.tslint": "(autodetect)",
|
||||
"nodejs_package_manager_path": "pnpm",
|
||||
"npm.dev.executor": "Run",
|
||||
"prettierjs.PrettierConfiguration.Package": "C:\\gitea\\taisai-svelte\\node_modules\\prettier",
|
||||
"settings.editor.selected.configurable": "com.github.copilot.settings.customization.CustomizationConfigurable",
|
||||
"to.speed.mode.migration.done": "true",
|
||||
"ts.external.directory.path": "C:\\gitea\\taisai-svelte\\node_modules\\typescript\\lib",
|
||||
"vue.rearranger.settings.migration": "true"
|
||||
}
|
||||
}]]></component>
|
||||
<component name="RunManager" selected="npm.dev">
|
||||
<configuration name="이름이 지정되지 않았습니다" type="NodeJSConfigurationType" nameIsGenerated="true" working-dir="$PROJECT_DIR$">
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
<configuration name="dev" type="js.build_tools.npm" nameIsGenerated="true">
|
||||
<package-json value="$PROJECT_DIR$/package.json" />
|
||||
<command value="run" />
|
||||
<scripts>
|
||||
<script value="dev" />
|
||||
</scripts>
|
||||
<node-interpreter value="project" />
|
||||
<envs />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
<list>
|
||||
<item itemvalue="Node.js.이름이 지정되지 않았습니다" />
|
||||
<item itemvalue="npm.dev" />
|
||||
</list>
|
||||
</component>
|
||||
<component name="SharedIndexes">
|
||||
<attachedChunks>
|
||||
<set>
|
||||
<option value="bundled-jdk-9823dce3aa75-bf35d07a577b-intellij.indexing.shared.core-IU-252.27397.103" />
|
||||
<option value="bundled-js-predefined-d6986cc7102b-3aa1da707db6-JavaScript-IU-252.27397.103" />
|
||||
</set>
|
||||
</attachedChunks>
|
||||
</component>
|
||||
<component name="TaskManager">
|
||||
<task active="true" id="Default" summary="디폴트 작업">
|
||||
<changelist id="027e6af4-a007-480d-9766-cd603cf60fb1" name="변경" comment="" />
|
||||
<created>1763044396291</created>
|
||||
<option name="number" value="Default" />
|
||||
<option name="presentableId" value="Default" />
|
||||
<updated>1763044396291</updated>
|
||||
<workItem from="1763044399917" duration="3349000" />
|
||||
</task>
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TypeScriptGeneratedFilesManager">
|
||||
<option name="version" value="3" />
|
||||
</component>
|
||||
<component name="XSLT-Support.FileAssociations.UIState">
|
||||
<expand />
|
||||
<select />
|
||||
</component>
|
||||
<component name="github-copilot-workspace">
|
||||
<instructionFileLocations>
|
||||
<option value=".github/instructions" />
|
||||
</instructionFileLocations>
|
||||
<promptFileLocations>
|
||||
<option value=".github/prompts" />
|
||||
</promptFileLocations>
|
||||
</component>
|
||||
</project>
|
||||
10
.prettierignore
Normal file
10
.prettierignore
Normal file
@ -0,0 +1,10 @@
|
||||
# Package Managers
|
||||
package-lock.json
|
||||
pnpm-lock.yaml
|
||||
yarn.lock
|
||||
bun.lock
|
||||
bun.lockb
|
||||
|
||||
# Miscellaneous
|
||||
/static/
|
||||
/drizzle/
|
||||
19
.prettierrc
Normal file
19
.prettierrc
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"useTabs": true,
|
||||
"singleQuote": true,
|
||||
"trailingComma": "none",
|
||||
"printWidth": 100,
|
||||
"plugins": [
|
||||
"prettier-plugin-svelte",
|
||||
"prettier-plugin-tailwindcss"
|
||||
],
|
||||
"overrides": [
|
||||
{
|
||||
"files": "*.svelte",
|
||||
"options": {
|
||||
"parser": "svelte"
|
||||
}
|
||||
}
|
||||
],
|
||||
"tailwindStylesheet": "./src/app.css"
|
||||
}
|
||||
38
README.md
Normal file
38
README.md
Normal file
@ -0,0 +1,38 @@
|
||||
# sv
|
||||
|
||||
Everything you need to build a Svelte project, powered by [`sv`](https://github.com/sveltejs/cli).
|
||||
|
||||
## Creating a project
|
||||
|
||||
If you're seeing this, you've probably already done this step. Congrats!
|
||||
|
||||
```sh
|
||||
# create a new project in the current directory
|
||||
npx sv create
|
||||
|
||||
# create a new project in my-app
|
||||
npx sv create my-app
|
||||
```
|
||||
|
||||
## Developing
|
||||
|
||||
Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server:
|
||||
|
||||
```sh
|
||||
npm run dev
|
||||
|
||||
# or start the server and open the app in a new browser tab
|
||||
npm run dev -- --open
|
||||
```
|
||||
|
||||
## Building
|
||||
|
||||
To create a production version of your app:
|
||||
|
||||
```sh
|
||||
npm run build
|
||||
```
|
||||
|
||||
You can preview the production build with `npm run preview`.
|
||||
|
||||
> To deploy your app, you may need to install an [adapter](https://svelte.dev/docs/kit/adapters) for your target environment.
|
||||
16
components.json
Normal file
16
components.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"$schema": "https://shadcn-svelte.com/schema.json",
|
||||
"tailwind": {
|
||||
"css": "src\\app.css",
|
||||
"baseColor": "slate"
|
||||
},
|
||||
"aliases": {
|
||||
"components": "$lib/components",
|
||||
"utils": "$lib/utils",
|
||||
"ui": "$lib/components/ui",
|
||||
"hooks": "$lib/hooks",
|
||||
"lib": "$lib"
|
||||
},
|
||||
"typescript": true,
|
||||
"registry": "https://shadcn-svelte.com/registry"
|
||||
}
|
||||
11
drizzle.config.ts
Normal file
11
drizzle.config.ts
Normal file
@ -0,0 +1,11 @@
|
||||
import { defineConfig } from 'drizzle-kit';
|
||||
|
||||
if (!process.env.DATABASE_URL) throw new Error('DATABASE_URL is not set');
|
||||
|
||||
export default defineConfig({
|
||||
schema: './src/lib/server/db/schema.ts',
|
||||
dialect: 'sqlite',
|
||||
dbCredentials: { url: process.env.DATABASE_URL },
|
||||
verbose: true,
|
||||
strict: true
|
||||
});
|
||||
60
package.json
Normal file
60
package.json
Normal file
@ -0,0 +1,60 @@
|
||||
{
|
||||
"name": "taisai-svelte",
|
||||
"private": true,
|
||||
"version": "0.0.1",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite dev",
|
||||
"build": "vite build",
|
||||
"preview": "vite preview",
|
||||
"prepare": "svelte-kit sync || echo ''",
|
||||
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
||||
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
|
||||
"format": "prettier --write .",
|
||||
"lint": "prettier --check .",
|
||||
"db:push": "drizzle-kit push",
|
||||
"db:generate": "drizzle-kit generate",
|
||||
"db:migrate": "drizzle-kit migrate",
|
||||
"db:studio": "drizzle-kit studio"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@internationalized/date": "^3.10.0",
|
||||
"@libsql/client": "^0.15.15",
|
||||
"@lucide/svelte": "^0.544.0",
|
||||
"@oslojs/crypto": "^1.0.1",
|
||||
"@oslojs/encoding": "^1.1.0",
|
||||
"@sveltejs/adapter-auto": "^7.0.0",
|
||||
"@sveltejs/kit": "^2.47.1",
|
||||
"@sveltejs/vite-plugin-svelte": "^6.2.1",
|
||||
"@tailwindcss/vite": "^4.1.14",
|
||||
"@tanstack/table-core": "^8.21.3",
|
||||
"@types/node": "^24",
|
||||
"bits-ui": "^2.14.3",
|
||||
"clsx": "^2.1.1",
|
||||
"drizzle-kit": "^0.31.5",
|
||||
"drizzle-orm": "^0.44.6",
|
||||
"embla-carousel-svelte": "^8.6.0",
|
||||
"formsnap": "^2.0.1",
|
||||
"layerchart": "2.0.0-next.27",
|
||||
"mode-watcher": "^1.1.0",
|
||||
"paneforge": "^1.0.2",
|
||||
"prettier": "^3.6.2",
|
||||
"prettier-plugin-svelte": "^3.4.0",
|
||||
"prettier-plugin-tailwindcss": "^0.7.1",
|
||||
"svelte": "^5.41.0",
|
||||
"svelte-check": "^4.3.3",
|
||||
"svelte-sonner": "^1.0.6",
|
||||
"sveltekit-superforms": "^2.28.1",
|
||||
"tailwind-merge": "^3.4.0",
|
||||
"tailwind-variants": "^3.1.1",
|
||||
"tailwindcss": "^4.1.14",
|
||||
"tw-animate-css": "^1.4.0",
|
||||
"typescript": "^5.9.3",
|
||||
"vaul-svelte": "1.0.0-next.7",
|
||||
"vite": "^7.1.10"
|
||||
},
|
||||
"dependencies": {
|
||||
"@node-rs/argon2": "^2.0.2",
|
||||
"lucide-svelte": "^0.553.0"
|
||||
}
|
||||
}
|
||||
3444
pnpm-lock.yaml
generated
Normal file
3444
pnpm-lock.yaml
generated
Normal file
File diff suppressed because it is too large
Load Diff
3
pnpm-workspace.yaml
Normal file
3
pnpm-workspace.yaml
Normal file
@ -0,0 +1,3 @@
|
||||
onlyBuiltDependencies:
|
||||
- esbuild
|
||||
- '@tailwindcss/oxide'
|
||||
121
src/app.css
Normal file
121
src/app.css
Normal file
@ -0,0 +1,121 @@
|
||||
@import "tailwindcss";
|
||||
|
||||
@import "tw-animate-css";
|
||||
|
||||
@custom-variant dark (&:is(.dark *));
|
||||
|
||||
:root {
|
||||
--radius: 0.625rem;
|
||||
--background: oklch(1 0 0);
|
||||
--foreground: oklch(0.129 0.042 264.695);
|
||||
--card: oklch(1 0 0);
|
||||
--card-foreground: oklch(0.129 0.042 264.695);
|
||||
--popover: oklch(1 0 0);
|
||||
--popover-foreground: oklch(0.129 0.042 264.695);
|
||||
--primary: oklch(0.208 0.042 265.755);
|
||||
--primary-foreground: oklch(0.984 0.003 247.858);
|
||||
--secondary: oklch(0.968 0.007 247.896);
|
||||
--secondary-foreground: oklch(0.208 0.042 265.755);
|
||||
--muted: oklch(0.968 0.007 247.896);
|
||||
--muted-foreground: oklch(0.554 0.046 257.417);
|
||||
--accent: oklch(0.968 0.007 247.896);
|
||||
--accent-foreground: oklch(0.208 0.042 265.755);
|
||||
--destructive: oklch(0.577 0.245 27.325);
|
||||
--border: oklch(0.929 0.013 255.508);
|
||||
--input: oklch(0.929 0.013 255.508);
|
||||
--ring: oklch(0.704 0.04 256.788);
|
||||
--chart-1: oklch(0.646 0.222 41.116);
|
||||
--chart-2: oklch(0.6 0.118 184.704);
|
||||
--chart-3: oklch(0.398 0.07 227.392);
|
||||
--chart-4: oklch(0.828 0.189 84.429);
|
||||
--chart-5: oklch(0.769 0.188 70.08);
|
||||
--sidebar: oklch(0.984 0.003 247.858);
|
||||
--sidebar-foreground: oklch(0.129 0.042 264.695);
|
||||
--sidebar-primary: oklch(0.208 0.042 265.755);
|
||||
--sidebar-primary-foreground: oklch(0.984 0.003 247.858);
|
||||
--sidebar-accent: oklch(0.968 0.007 247.896);
|
||||
--sidebar-accent-foreground: oklch(0.208 0.042 265.755);
|
||||
--sidebar-border: oklch(0.929 0.013 255.508);
|
||||
--sidebar-ring: oklch(0.704 0.04 256.788);
|
||||
}
|
||||
|
||||
.dark {
|
||||
--background: oklch(0.129 0.042 264.695);
|
||||
--foreground: oklch(0.984 0.003 247.858);
|
||||
--card: oklch(0.208 0.042 265.755);
|
||||
--card-foreground: oklch(0.984 0.003 247.858);
|
||||
--popover: oklch(0.208 0.042 265.755);
|
||||
--popover-foreground: oklch(0.984 0.003 247.858);
|
||||
--primary: oklch(0.929 0.013 255.508);
|
||||
--primary-foreground: oklch(0.208 0.042 265.755);
|
||||
--secondary: oklch(0.279 0.041 260.031);
|
||||
--secondary-foreground: oklch(0.984 0.003 247.858);
|
||||
--muted: oklch(0.279 0.041 260.031);
|
||||
--muted-foreground: oklch(0.704 0.04 256.788);
|
||||
--accent: oklch(0.279 0.041 260.031);
|
||||
--accent-foreground: oklch(0.984 0.003 247.858);
|
||||
--destructive: oklch(0.704 0.191 22.216);
|
||||
--border: oklch(1 0 0 / 10%);
|
||||
--input: oklch(1 0 0 / 15%);
|
||||
--ring: oklch(0.551 0.027 264.364);
|
||||
--chart-1: oklch(0.488 0.243 264.376);
|
||||
--chart-2: oklch(0.696 0.17 162.48);
|
||||
--chart-3: oklch(0.769 0.188 70.08);
|
||||
--chart-4: oklch(0.627 0.265 303.9);
|
||||
--chart-5: oklch(0.645 0.246 16.439);
|
||||
--sidebar: oklch(0.208 0.042 265.755);
|
||||
--sidebar-foreground: oklch(0.984 0.003 247.858);
|
||||
--sidebar-primary: oklch(0.488 0.243 264.376);
|
||||
--sidebar-primary-foreground: oklch(0.984 0.003 247.858);
|
||||
--sidebar-accent: oklch(0.279 0.041 260.031);
|
||||
--sidebar-accent-foreground: oklch(0.984 0.003 247.858);
|
||||
--sidebar-border: oklch(1 0 0 / 10%);
|
||||
--sidebar-ring: oklch(0.551 0.027 264.364);
|
||||
}
|
||||
|
||||
@theme inline {
|
||||
--radius-sm: calc(var(--radius) - 4px);
|
||||
--radius-md: calc(var(--radius) - 2px);
|
||||
--radius-lg: var(--radius);
|
||||
--radius-xl: calc(var(--radius) + 4px);
|
||||
--color-background: var(--background);
|
||||
--color-foreground: var(--foreground);
|
||||
--color-card: var(--card);
|
||||
--color-card-foreground: var(--card-foreground);
|
||||
--color-popover: var(--popover);
|
||||
--color-popover-foreground: var(--popover-foreground);
|
||||
--color-primary: var(--primary);
|
||||
--color-primary-foreground: var(--primary-foreground);
|
||||
--color-secondary: var(--secondary);
|
||||
--color-secondary-foreground: var(--secondary-foreground);
|
||||
--color-muted: var(--muted);
|
||||
--color-muted-foreground: var(--muted-foreground);
|
||||
--color-accent: var(--accent);
|
||||
--color-accent-foreground: var(--accent-foreground);
|
||||
--color-destructive: var(--destructive);
|
||||
--color-border: var(--border);
|
||||
--color-input: var(--input);
|
||||
--color-ring: var(--ring);
|
||||
--color-chart-1: var(--chart-1);
|
||||
--color-chart-2: var(--chart-2);
|
||||
--color-chart-3: var(--chart-3);
|
||||
--color-chart-4: var(--chart-4);
|
||||
--color-chart-5: var(--chart-5);
|
||||
--color-sidebar: var(--sidebar);
|
||||
--color-sidebar-foreground: var(--sidebar-foreground);
|
||||
--color-sidebar-primary: var(--sidebar-primary);
|
||||
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
|
||||
--color-sidebar-accent: var(--sidebar-accent);
|
||||
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
|
||||
--color-sidebar-border: var(--sidebar-border);
|
||||
--color-sidebar-ring: var(--sidebar-ring);
|
||||
}
|
||||
|
||||
@layer base {
|
||||
* {
|
||||
@apply border-border outline-ring/50;
|
||||
}
|
||||
body {
|
||||
@apply bg-background text-foreground;
|
||||
}
|
||||
}
|
||||
15
src/app.d.ts
vendored
Normal file
15
src/app.d.ts
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
// See https://svelte.dev/docs/kit/types#app.d.ts
|
||||
// for information about these interfaces
|
||||
declare global {
|
||||
namespace App {
|
||||
interface Locals {
|
||||
user: import('$lib/server/auth').SessionValidationResult['user'];
|
||||
session: import('$lib/server/auth').SessionValidationResult['session'];
|
||||
}
|
||||
} // interface Error {}
|
||||
// interface Locals {}
|
||||
} // interface PageData {}
|
||||
// interface PageState {}
|
||||
|
||||
// interface Platform {}
|
||||
export {};
|
||||
11
src/app.html
Normal file
11
src/app.html
Normal file
@ -0,0 +1,11 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
%sveltekit.head%
|
||||
</head>
|
||||
<body data-sveltekit-preload-data="hover">
|
||||
<div style="display: contents">%sveltekit.body%</div>
|
||||
</body>
|
||||
</html>
|
||||
26
src/hooks.server.ts
Normal file
26
src/hooks.server.ts
Normal file
@ -0,0 +1,26 @@
|
||||
import type { Handle } from '@sveltejs/kit';
|
||||
import * as auth from '$lib/server/auth';
|
||||
|
||||
const handleAuth: Handle = async ({ event, resolve }) => {
|
||||
const sessionToken = event.cookies.get(auth.sessionCookieName);
|
||||
|
||||
if (!sessionToken) {
|
||||
event.locals.user = null;
|
||||
event.locals.session = null;
|
||||
return resolve(event);
|
||||
}
|
||||
|
||||
const { session, user } = await auth.validateSessionToken(sessionToken);
|
||||
|
||||
if (session) {
|
||||
auth.setSessionTokenCookie(event, sessionToken, session.expiresAt);
|
||||
} else {
|
||||
auth.deleteSessionTokenCookie(event);
|
||||
}
|
||||
|
||||
event.locals.user = user;
|
||||
event.locals.session = session;
|
||||
return resolve(event);
|
||||
};
|
||||
|
||||
export const handle: Handle = handleAuth;
|
||||
1
src/lib/assets/favicon.svg
Normal file
1
src/lib/assets/favicon.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="107" height="128" viewBox="0 0 107 128"><title>svelte-logo</title><path d="M94.157 22.819c-10.4-14.885-30.94-19.297-45.792-9.835L22.282 29.608A29.92 29.92 0 0 0 8.764 49.65a31.5 31.5 0 0 0 3.108 20.231 30 30 0 0 0-4.477 11.183 31.9 31.9 0 0 0 5.448 24.116c10.402 14.887 30.942 19.297 45.791 9.835l26.083-16.624A29.92 29.92 0 0 0 98.235 78.35a31.53 31.53 0 0 0-3.105-20.232 30 30 0 0 0 4.474-11.182 31.88 31.88 0 0 0-5.447-24.116" style="fill:#ff3e00"/><path d="M45.817 106.582a20.72 20.72 0 0 1-22.237-8.243 19.17 19.17 0 0 1-3.277-14.503 18 18 0 0 1 .624-2.435l.49-1.498 1.337.981a33.6 33.6 0 0 0 10.203 5.098l.97.294-.09.968a5.85 5.85 0 0 0 1.052 3.878 6.24 6.24 0 0 0 6.695 2.485 5.8 5.8 0 0 0 1.603-.704L69.27 76.28a5.43 5.43 0 0 0 2.45-3.631 5.8 5.8 0 0 0-.987-4.371 6.24 6.24 0 0 0-6.698-2.487 5.7 5.7 0 0 0-1.6.704l-9.953 6.345a19 19 0 0 1-5.296 2.326 20.72 20.72 0 0 1-22.237-8.243 19.17 19.17 0 0 1-3.277-14.502 17.99 17.99 0 0 1 8.13-12.052l26.081-16.623a19 19 0 0 1 5.3-2.329 20.72 20.72 0 0 1 22.237 8.243 19.17 19.17 0 0 1 3.277 14.503 18 18 0 0 1-.624 2.435l-.49 1.498-1.337-.98a33.6 33.6 0 0 0-10.203-5.1l-.97-.294.09-.968a5.86 5.86 0 0 0-1.052-3.878 6.24 6.24 0 0 0-6.696-2.485 5.8 5.8 0 0 0-1.602.704L37.73 51.72a5.42 5.42 0 0 0-2.449 3.63 5.79 5.79 0 0 0 .986 4.372 6.24 6.24 0 0 0 6.698 2.486 5.8 5.8 0 0 0 1.602-.704l9.952-6.342a19 19 0 0 1 5.295-2.328 20.72 20.72 0 0 1 22.237 8.242 19.17 19.17 0 0 1 3.277 14.503 18 18 0 0 1-8.13 12.053l-26.081 16.622a19 19 0 0 1-5.3 2.328" style="fill:#fff"/></svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
22
src/lib/components/ui/accordion/accordion-content.svelte
Normal file
22
src/lib/components/ui/accordion/accordion-content.svelte
Normal file
@ -0,0 +1,22 @@
|
||||
<script lang="ts">
|
||||
import { Accordion as AccordionPrimitive } from "bits-ui";
|
||||
import { cn, type WithoutChild } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
children,
|
||||
...restProps
|
||||
}: WithoutChild<AccordionPrimitive.ContentProps> = $props();
|
||||
</script>
|
||||
|
||||
<AccordionPrimitive.Content
|
||||
bind:ref
|
||||
data-slot="accordion-content"
|
||||
class="data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm"
|
||||
{...restProps}
|
||||
>
|
||||
<div class={cn("pb-4 pt-0", className)}>
|
||||
{@render children?.()}
|
||||
</div>
|
||||
</AccordionPrimitive.Content>
|
||||
17
src/lib/components/ui/accordion/accordion-item.svelte
Normal file
17
src/lib/components/ui/accordion/accordion-item.svelte
Normal file
@ -0,0 +1,17 @@
|
||||
<script lang="ts">
|
||||
import { Accordion as AccordionPrimitive } from "bits-ui";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
...restProps
|
||||
}: AccordionPrimitive.ItemProps = $props();
|
||||
</script>
|
||||
|
||||
<AccordionPrimitive.Item
|
||||
bind:ref
|
||||
data-slot="accordion-item"
|
||||
class={cn("border-b last:border-b-0", className)}
|
||||
{...restProps}
|
||||
/>
|
||||
32
src/lib/components/ui/accordion/accordion-trigger.svelte
Normal file
32
src/lib/components/ui/accordion/accordion-trigger.svelte
Normal file
@ -0,0 +1,32 @@
|
||||
<script lang="ts">
|
||||
import { Accordion as AccordionPrimitive } from "bits-ui";
|
||||
import ChevronDownIcon from "@lucide/svelte/icons/chevron-down";
|
||||
import { cn, type WithoutChild } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
level = 3,
|
||||
children,
|
||||
...restProps
|
||||
}: WithoutChild<AccordionPrimitive.TriggerProps> & {
|
||||
level?: AccordionPrimitive.HeaderProps["level"];
|
||||
} = $props();
|
||||
</script>
|
||||
|
||||
<AccordionPrimitive.Header {level} class="flex">
|
||||
<AccordionPrimitive.Trigger
|
||||
data-slot="accordion-trigger"
|
||||
bind:ref
|
||||
class={cn(
|
||||
"focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium outline-none transition-all hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180",
|
||||
className
|
||||
)}
|
||||
{...restProps}
|
||||
>
|
||||
{@render children?.()}
|
||||
<ChevronDownIcon
|
||||
class="text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200"
|
||||
/>
|
||||
</AccordionPrimitive.Trigger>
|
||||
</AccordionPrimitive.Header>
|
||||
16
src/lib/components/ui/accordion/accordion.svelte
Normal file
16
src/lib/components/ui/accordion/accordion.svelte
Normal file
@ -0,0 +1,16 @@
|
||||
<script lang="ts">
|
||||
import { Accordion as AccordionPrimitive } from "bits-ui";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
value = $bindable(),
|
||||
...restProps
|
||||
}: AccordionPrimitive.RootProps = $props();
|
||||
</script>
|
||||
|
||||
<AccordionPrimitive.Root
|
||||
bind:ref
|
||||
bind:value={value as never}
|
||||
data-slot="accordion"
|
||||
{...restProps}
|
||||
/>
|
||||
16
src/lib/components/ui/accordion/index.ts
Normal file
16
src/lib/components/ui/accordion/index.ts
Normal file
@ -0,0 +1,16 @@
|
||||
import Root from "./accordion.svelte";
|
||||
import Content from "./accordion-content.svelte";
|
||||
import Item from "./accordion-item.svelte";
|
||||
import Trigger from "./accordion-trigger.svelte";
|
||||
|
||||
export {
|
||||
Root,
|
||||
Content,
|
||||
Item,
|
||||
Trigger,
|
||||
//
|
||||
Root as Accordion,
|
||||
Content as AccordionContent,
|
||||
Item as AccordionItem,
|
||||
Trigger as AccordionTrigger,
|
||||
};
|
||||
@ -0,0 +1,18 @@
|
||||
<script lang="ts">
|
||||
import { AlertDialog as AlertDialogPrimitive } from "bits-ui";
|
||||
import { buttonVariants } from "$lib/components/ui/button/index.js";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
...restProps
|
||||
}: AlertDialogPrimitive.ActionProps = $props();
|
||||
</script>
|
||||
|
||||
<AlertDialogPrimitive.Action
|
||||
bind:ref
|
||||
data-slot="alert-dialog-action"
|
||||
class={cn(buttonVariants(), className)}
|
||||
{...restProps}
|
||||
/>
|
||||
@ -0,0 +1,18 @@
|
||||
<script lang="ts">
|
||||
import { AlertDialog as AlertDialogPrimitive } from "bits-ui";
|
||||
import { buttonVariants } from "$lib/components/ui/button/index.js";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
...restProps
|
||||
}: AlertDialogPrimitive.CancelProps = $props();
|
||||
</script>
|
||||
|
||||
<AlertDialogPrimitive.Cancel
|
||||
bind:ref
|
||||
data-slot="alert-dialog-cancel"
|
||||
class={cn(buttonVariants({ variant: "outline" }), className)}
|
||||
{...restProps}
|
||||
/>
|
||||
@ -0,0 +1,27 @@
|
||||
<script lang="ts">
|
||||
import { AlertDialog as AlertDialogPrimitive } from "bits-ui";
|
||||
import AlertDialogOverlay from "./alert-dialog-overlay.svelte";
|
||||
import { cn, type WithoutChild, type WithoutChildrenOrChild } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
portalProps,
|
||||
...restProps
|
||||
}: WithoutChild<AlertDialogPrimitive.ContentProps> & {
|
||||
portalProps?: WithoutChildrenOrChild<AlertDialogPrimitive.PortalProps>;
|
||||
} = $props();
|
||||
</script>
|
||||
|
||||
<AlertDialogPrimitive.Portal {...portalProps}>
|
||||
<AlertDialogOverlay />
|
||||
<AlertDialogPrimitive.Content
|
||||
bind:ref
|
||||
data-slot="alert-dialog-content"
|
||||
class={cn(
|
||||
"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed left-[50%] top-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",
|
||||
className
|
||||
)}
|
||||
{...restProps}
|
||||
/>
|
||||
</AlertDialogPrimitive.Portal>
|
||||
@ -0,0 +1,17 @@
|
||||
<script lang="ts">
|
||||
import { AlertDialog as AlertDialogPrimitive } from "bits-ui";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
...restProps
|
||||
}: AlertDialogPrimitive.DescriptionProps = $props();
|
||||
</script>
|
||||
|
||||
<AlertDialogPrimitive.Description
|
||||
bind:ref
|
||||
data-slot="alert-dialog-description"
|
||||
class={cn("text-muted-foreground text-sm", className)}
|
||||
{...restProps}
|
||||
/>
|
||||
@ -0,0 +1,20 @@
|
||||
<script lang="ts">
|
||||
import { cn, type WithElementRef } from "$lib/utils.js";
|
||||
import type { HTMLAttributes } from "svelte/elements";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
children,
|
||||
...restProps
|
||||
}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();
|
||||
</script>
|
||||
|
||||
<div
|
||||
bind:this={ref}
|
||||
data-slot="alert-dialog-footer"
|
||||
class={cn("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", className)}
|
||||
{...restProps}
|
||||
>
|
||||
{@render children?.()}
|
||||
</div>
|
||||
@ -0,0 +1,20 @@
|
||||
<script lang="ts">
|
||||
import type { HTMLAttributes } from "svelte/elements";
|
||||
import { cn, type WithElementRef } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
children,
|
||||
...restProps
|
||||
}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();
|
||||
</script>
|
||||
|
||||
<div
|
||||
bind:this={ref}
|
||||
data-slot="alert-dialog-header"
|
||||
class={cn("flex flex-col gap-2 text-center sm:text-left", className)}
|
||||
{...restProps}
|
||||
>
|
||||
{@render children?.()}
|
||||
</div>
|
||||
@ -0,0 +1,20 @@
|
||||
<script lang="ts">
|
||||
import { AlertDialog as AlertDialogPrimitive } from "bits-ui";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
...restProps
|
||||
}: AlertDialogPrimitive.OverlayProps = $props();
|
||||
</script>
|
||||
|
||||
<AlertDialogPrimitive.Overlay
|
||||
bind:ref
|
||||
data-slot="alert-dialog-overlay"
|
||||
class={cn(
|
||||
"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/50",
|
||||
className
|
||||
)}
|
||||
{...restProps}
|
||||
/>
|
||||
17
src/lib/components/ui/alert-dialog/alert-dialog-title.svelte
Normal file
17
src/lib/components/ui/alert-dialog/alert-dialog-title.svelte
Normal file
@ -0,0 +1,17 @@
|
||||
<script lang="ts">
|
||||
import { AlertDialog as AlertDialogPrimitive } from "bits-ui";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
...restProps
|
||||
}: AlertDialogPrimitive.TitleProps = $props();
|
||||
</script>
|
||||
|
||||
<AlertDialogPrimitive.Title
|
||||
bind:ref
|
||||
data-slot="alert-dialog-title"
|
||||
class={cn("text-lg font-semibold", className)}
|
||||
{...restProps}
|
||||
/>
|
||||
@ -0,0 +1,7 @@
|
||||
<script lang="ts">
|
||||
import { AlertDialog as AlertDialogPrimitive } from "bits-ui";
|
||||
|
||||
let { ref = $bindable(null), ...restProps }: AlertDialogPrimitive.TriggerProps = $props();
|
||||
</script>
|
||||
|
||||
<AlertDialogPrimitive.Trigger bind:ref data-slot="alert-dialog-trigger" {...restProps} />
|
||||
39
src/lib/components/ui/alert-dialog/index.ts
Normal file
39
src/lib/components/ui/alert-dialog/index.ts
Normal file
@ -0,0 +1,39 @@
|
||||
import { AlertDialog as AlertDialogPrimitive } from "bits-ui";
|
||||
import Trigger from "./alert-dialog-trigger.svelte";
|
||||
import Title from "./alert-dialog-title.svelte";
|
||||
import Action from "./alert-dialog-action.svelte";
|
||||
import Cancel from "./alert-dialog-cancel.svelte";
|
||||
import Footer from "./alert-dialog-footer.svelte";
|
||||
import Header from "./alert-dialog-header.svelte";
|
||||
import Overlay from "./alert-dialog-overlay.svelte";
|
||||
import Content from "./alert-dialog-content.svelte";
|
||||
import Description from "./alert-dialog-description.svelte";
|
||||
|
||||
const Root = AlertDialogPrimitive.Root;
|
||||
const Portal = AlertDialogPrimitive.Portal;
|
||||
|
||||
export {
|
||||
Root,
|
||||
Title,
|
||||
Action,
|
||||
Cancel,
|
||||
Portal,
|
||||
Footer,
|
||||
Header,
|
||||
Trigger,
|
||||
Overlay,
|
||||
Content,
|
||||
Description,
|
||||
//
|
||||
Root as AlertDialog,
|
||||
Title as AlertDialogTitle,
|
||||
Action as AlertDialogAction,
|
||||
Cancel as AlertDialogCancel,
|
||||
Portal as AlertDialogPortal,
|
||||
Footer as AlertDialogFooter,
|
||||
Header as AlertDialogHeader,
|
||||
Trigger as AlertDialogTrigger,
|
||||
Overlay as AlertDialogOverlay,
|
||||
Content as AlertDialogContent,
|
||||
Description as AlertDialogDescription,
|
||||
};
|
||||
23
src/lib/components/ui/alert/alert-description.svelte
Normal file
23
src/lib/components/ui/alert/alert-description.svelte
Normal file
@ -0,0 +1,23 @@
|
||||
<script lang="ts">
|
||||
import type { HTMLAttributes } from "svelte/elements";
|
||||
import { cn, type WithElementRef } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
children,
|
||||
...restProps
|
||||
}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();
|
||||
</script>
|
||||
|
||||
<div
|
||||
bind:this={ref}
|
||||
data-slot="alert-description"
|
||||
class={cn(
|
||||
"text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed",
|
||||
className
|
||||
)}
|
||||
{...restProps}
|
||||
>
|
||||
{@render children?.()}
|
||||
</div>
|
||||
20
src/lib/components/ui/alert/alert-title.svelte
Normal file
20
src/lib/components/ui/alert/alert-title.svelte
Normal file
@ -0,0 +1,20 @@
|
||||
<script lang="ts">
|
||||
import type { HTMLAttributes } from "svelte/elements";
|
||||
import { cn, type WithElementRef } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
children,
|
||||
...restProps
|
||||
}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();
|
||||
</script>
|
||||
|
||||
<div
|
||||
bind:this={ref}
|
||||
data-slot="alert-title"
|
||||
class={cn("col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight", className)}
|
||||
{...restProps}
|
||||
>
|
||||
{@render children?.()}
|
||||
</div>
|
||||
44
src/lib/components/ui/alert/alert.svelte
Normal file
44
src/lib/components/ui/alert/alert.svelte
Normal file
@ -0,0 +1,44 @@
|
||||
<script lang="ts" module>
|
||||
import { type VariantProps, tv } from "tailwind-variants";
|
||||
|
||||
export const alertVariants = tv({
|
||||
base: "relative grid w-full grid-cols-[0_1fr] items-start gap-y-0.5 rounded-lg border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",
|
||||
variants: {
|
||||
variant: {
|
||||
default: "bg-card text-card-foreground",
|
||||
destructive:
|
||||
"text-destructive bg-card *:data-[slot=alert-description]:text-destructive/90 [&>svg]:text-current",
|
||||
},
|
||||
},
|
||||
defaultVariants: {
|
||||
variant: "default",
|
||||
},
|
||||
});
|
||||
|
||||
export type AlertVariant = VariantProps<typeof alertVariants>["variant"];
|
||||
</script>
|
||||
|
||||
<script lang="ts">
|
||||
import type { HTMLAttributes } from "svelte/elements";
|
||||
import { cn, type WithElementRef } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
variant = "default",
|
||||
children,
|
||||
...restProps
|
||||
}: WithElementRef<HTMLAttributes<HTMLDivElement>> & {
|
||||
variant?: AlertVariant;
|
||||
} = $props();
|
||||
</script>
|
||||
|
||||
<div
|
||||
bind:this={ref}
|
||||
data-slot="alert"
|
||||
class={cn(alertVariants({ variant }), className)}
|
||||
{...restProps}
|
||||
role="alert"
|
||||
>
|
||||
{@render children?.()}
|
||||
</div>
|
||||
14
src/lib/components/ui/alert/index.ts
Normal file
14
src/lib/components/ui/alert/index.ts
Normal file
@ -0,0 +1,14 @@
|
||||
import Root from "./alert.svelte";
|
||||
import Description from "./alert-description.svelte";
|
||||
import Title from "./alert-title.svelte";
|
||||
export { alertVariants, type AlertVariant } from "./alert.svelte";
|
||||
|
||||
export {
|
||||
Root,
|
||||
Description,
|
||||
Title,
|
||||
//
|
||||
Root as Alert,
|
||||
Description as AlertDescription,
|
||||
Title as AlertTitle,
|
||||
};
|
||||
7
src/lib/components/ui/aspect-ratio/aspect-ratio.svelte
Normal file
7
src/lib/components/ui/aspect-ratio/aspect-ratio.svelte
Normal file
@ -0,0 +1,7 @@
|
||||
<script lang="ts">
|
||||
import { AspectRatio as AspectRatioPrimitive } from "bits-ui";
|
||||
|
||||
let { ref = $bindable(null), ...restProps }: AspectRatioPrimitive.RootProps = $props();
|
||||
</script>
|
||||
|
||||
<AspectRatioPrimitive.Root bind:ref data-slot="aspect-ratio" {...restProps} />
|
||||
3
src/lib/components/ui/aspect-ratio/index.ts
Normal file
3
src/lib/components/ui/aspect-ratio/index.ts
Normal file
@ -0,0 +1,3 @@
|
||||
import Root from "./aspect-ratio.svelte";
|
||||
|
||||
export { Root, Root as AspectRatio };
|
||||
17
src/lib/components/ui/avatar/avatar-fallback.svelte
Normal file
17
src/lib/components/ui/avatar/avatar-fallback.svelte
Normal file
@ -0,0 +1,17 @@
|
||||
<script lang="ts">
|
||||
import { Avatar as AvatarPrimitive } from "bits-ui";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
...restProps
|
||||
}: AvatarPrimitive.FallbackProps = $props();
|
||||
</script>
|
||||
|
||||
<AvatarPrimitive.Fallback
|
||||
bind:ref
|
||||
data-slot="avatar-fallback"
|
||||
class={cn("bg-muted flex size-full items-center justify-center rounded-full", className)}
|
||||
{...restProps}
|
||||
/>
|
||||
17
src/lib/components/ui/avatar/avatar-image.svelte
Normal file
17
src/lib/components/ui/avatar/avatar-image.svelte
Normal file
@ -0,0 +1,17 @@
|
||||
<script lang="ts">
|
||||
import { Avatar as AvatarPrimitive } from "bits-ui";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
...restProps
|
||||
}: AvatarPrimitive.ImageProps = $props();
|
||||
</script>
|
||||
|
||||
<AvatarPrimitive.Image
|
||||
bind:ref
|
||||
data-slot="avatar-image"
|
||||
class={cn("aspect-square size-full", className)}
|
||||
{...restProps}
|
||||
/>
|
||||
19
src/lib/components/ui/avatar/avatar.svelte
Normal file
19
src/lib/components/ui/avatar/avatar.svelte
Normal file
@ -0,0 +1,19 @@
|
||||
<script lang="ts">
|
||||
import { Avatar as AvatarPrimitive } from "bits-ui";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
loadingStatus = $bindable("loading"),
|
||||
class: className,
|
||||
...restProps
|
||||
}: AvatarPrimitive.RootProps = $props();
|
||||
</script>
|
||||
|
||||
<AvatarPrimitive.Root
|
||||
bind:ref
|
||||
bind:loadingStatus
|
||||
data-slot="avatar"
|
||||
class={cn("relative flex size-8 shrink-0 overflow-hidden rounded-full", className)}
|
||||
{...restProps}
|
||||
/>
|
||||
13
src/lib/components/ui/avatar/index.ts
Normal file
13
src/lib/components/ui/avatar/index.ts
Normal file
@ -0,0 +1,13 @@
|
||||
import Root from "./avatar.svelte";
|
||||
import Image from "./avatar-image.svelte";
|
||||
import Fallback from "./avatar-fallback.svelte";
|
||||
|
||||
export {
|
||||
Root,
|
||||
Image,
|
||||
Fallback,
|
||||
//
|
||||
Root as Avatar,
|
||||
Image as AvatarImage,
|
||||
Fallback as AvatarFallback,
|
||||
};
|
||||
50
src/lib/components/ui/badge/badge.svelte
Normal file
50
src/lib/components/ui/badge/badge.svelte
Normal file
@ -0,0 +1,50 @@
|
||||
<script lang="ts" module>
|
||||
import { type VariantProps, tv } from "tailwind-variants";
|
||||
|
||||
export const badgeVariants = tv({
|
||||
base: "focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden whitespace-nowrap rounded-full border px-2 py-0.5 text-xs font-medium transition-[color,box-shadow] focus-visible:ring-[3px] [&>svg]:pointer-events-none [&>svg]:size-3",
|
||||
variants: {
|
||||
variant: {
|
||||
default:
|
||||
"bg-primary text-primary-foreground [a&]:hover:bg-primary/90 border-transparent",
|
||||
secondary:
|
||||
"bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90 border-transparent",
|
||||
destructive:
|
||||
"bg-destructive [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/70 border-transparent text-white",
|
||||
outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
|
||||
},
|
||||
},
|
||||
defaultVariants: {
|
||||
variant: "default",
|
||||
},
|
||||
});
|
||||
|
||||
export type BadgeVariant = VariantProps<typeof badgeVariants>["variant"];
|
||||
</script>
|
||||
|
||||
<script lang="ts">
|
||||
import type { HTMLAnchorAttributes } from "svelte/elements";
|
||||
import { cn, type WithElementRef } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
href,
|
||||
class: className,
|
||||
variant = "default",
|
||||
children,
|
||||
...restProps
|
||||
}: WithElementRef<HTMLAnchorAttributes> & {
|
||||
variant?: BadgeVariant;
|
||||
} = $props();
|
||||
</script>
|
||||
|
||||
<svelte:element
|
||||
this={href ? "a" : "span"}
|
||||
bind:this={ref}
|
||||
data-slot="badge"
|
||||
{href}
|
||||
class={cn(badgeVariants({ variant }), className)}
|
||||
{...restProps}
|
||||
>
|
||||
{@render children?.()}
|
||||
</svelte:element>
|
||||
2
src/lib/components/ui/badge/index.ts
Normal file
2
src/lib/components/ui/badge/index.ts
Normal file
@ -0,0 +1,2 @@
|
||||
export { default as Badge } from "./badge.svelte";
|
||||
export { badgeVariants, type BadgeVariant } from "./badge.svelte";
|
||||
23
src/lib/components/ui/breadcrumb/breadcrumb-ellipsis.svelte
Normal file
23
src/lib/components/ui/breadcrumb/breadcrumb-ellipsis.svelte
Normal file
@ -0,0 +1,23 @@
|
||||
<script lang="ts">
|
||||
import EllipsisIcon from "@lucide/svelte/icons/ellipsis";
|
||||
import type { HTMLAttributes } from "svelte/elements";
|
||||
import { cn, type WithElementRef, type WithoutChildren } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
...restProps
|
||||
}: WithoutChildren<WithElementRef<HTMLAttributes<HTMLSpanElement>>> = $props();
|
||||
</script>
|
||||
|
||||
<span
|
||||
bind:this={ref}
|
||||
data-slot="breadcrumb-ellipsis"
|
||||
role="presentation"
|
||||
aria-hidden="true"
|
||||
class={cn("flex size-9 items-center justify-center", className)}
|
||||
{...restProps}
|
||||
>
|
||||
<EllipsisIcon class="size-4" />
|
||||
<span class="sr-only">More</span>
|
||||
</span>
|
||||
20
src/lib/components/ui/breadcrumb/breadcrumb-item.svelte
Normal file
20
src/lib/components/ui/breadcrumb/breadcrumb-item.svelte
Normal file
@ -0,0 +1,20 @@
|
||||
<script lang="ts">
|
||||
import type { HTMLLiAttributes } from "svelte/elements";
|
||||
import { cn, type WithElementRef } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
children,
|
||||
...restProps
|
||||
}: WithElementRef<HTMLLiAttributes> = $props();
|
||||
</script>
|
||||
|
||||
<li
|
||||
bind:this={ref}
|
||||
data-slot="breadcrumb-item"
|
||||
class={cn("inline-flex items-center gap-1.5", className)}
|
||||
{...restProps}
|
||||
>
|
||||
{@render children?.()}
|
||||
</li>
|
||||
31
src/lib/components/ui/breadcrumb/breadcrumb-link.svelte
Normal file
31
src/lib/components/ui/breadcrumb/breadcrumb-link.svelte
Normal file
@ -0,0 +1,31 @@
|
||||
<script lang="ts">
|
||||
import type { HTMLAnchorAttributes } from "svelte/elements";
|
||||
import type { Snippet } from "svelte";
|
||||
import { cn, type WithElementRef } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
href = undefined,
|
||||
child,
|
||||
children,
|
||||
...restProps
|
||||
}: WithElementRef<HTMLAnchorAttributes> & {
|
||||
child?: Snippet<[{ props: HTMLAnchorAttributes }]>;
|
||||
} = $props();
|
||||
|
||||
const attrs = $derived({
|
||||
"data-slot": "breadcrumb-link",
|
||||
class: cn("hover:text-foreground transition-colors", className),
|
||||
href,
|
||||
...restProps,
|
||||
});
|
||||
</script>
|
||||
|
||||
{#if child}
|
||||
{@render child({ props: attrs })}
|
||||
{:else}
|
||||
<a bind:this={ref} {...attrs}>
|
||||
{@render children?.()}
|
||||
</a>
|
||||
{/if}
|
||||
23
src/lib/components/ui/breadcrumb/breadcrumb-list.svelte
Normal file
23
src/lib/components/ui/breadcrumb/breadcrumb-list.svelte
Normal file
@ -0,0 +1,23 @@
|
||||
<script lang="ts">
|
||||
import type { HTMLOlAttributes } from "svelte/elements";
|
||||
import { cn, type WithElementRef } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
children,
|
||||
...restProps
|
||||
}: WithElementRef<HTMLOlAttributes> = $props();
|
||||
</script>
|
||||
|
||||
<ol
|
||||
bind:this={ref}
|
||||
data-slot="breadcrumb-list"
|
||||
class={cn(
|
||||
"text-muted-foreground flex flex-wrap items-center gap-1.5 break-words text-sm sm:gap-2.5",
|
||||
className
|
||||
)}
|
||||
{...restProps}
|
||||
>
|
||||
{@render children?.()}
|
||||
</ol>
|
||||
23
src/lib/components/ui/breadcrumb/breadcrumb-page.svelte
Normal file
23
src/lib/components/ui/breadcrumb/breadcrumb-page.svelte
Normal file
@ -0,0 +1,23 @@
|
||||
<script lang="ts">
|
||||
import type { HTMLAttributes } from "svelte/elements";
|
||||
import { cn, type WithElementRef } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
children,
|
||||
...restProps
|
||||
}: WithElementRef<HTMLAttributes<HTMLSpanElement>> = $props();
|
||||
</script>
|
||||
|
||||
<span
|
||||
bind:this={ref}
|
||||
data-slot="breadcrumb-page"
|
||||
role="link"
|
||||
aria-disabled="true"
|
||||
aria-current="page"
|
||||
class={cn("text-foreground font-normal", className)}
|
||||
{...restProps}
|
||||
>
|
||||
{@render children?.()}
|
||||
</span>
|
||||
27
src/lib/components/ui/breadcrumb/breadcrumb-separator.svelte
Normal file
27
src/lib/components/ui/breadcrumb/breadcrumb-separator.svelte
Normal file
@ -0,0 +1,27 @@
|
||||
<script lang="ts">
|
||||
import ChevronRightIcon from "@lucide/svelte/icons/chevron-right";
|
||||
import { cn, type WithElementRef } from "$lib/utils.js";
|
||||
import type { HTMLLiAttributes } from "svelte/elements";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
children,
|
||||
...restProps
|
||||
}: WithElementRef<HTMLLiAttributes> = $props();
|
||||
</script>
|
||||
|
||||
<li
|
||||
bind:this={ref}
|
||||
data-slot="breadcrumb-separator"
|
||||
role="presentation"
|
||||
aria-hidden="true"
|
||||
class={cn("[&>svg]:size-3.5", className)}
|
||||
{...restProps}
|
||||
>
|
||||
{#if children}
|
||||
{@render children?.()}
|
||||
{:else}
|
||||
<ChevronRightIcon />
|
||||
{/if}
|
||||
</li>
|
||||
21
src/lib/components/ui/breadcrumb/breadcrumb.svelte
Normal file
21
src/lib/components/ui/breadcrumb/breadcrumb.svelte
Normal file
@ -0,0 +1,21 @@
|
||||
<script lang="ts">
|
||||
import type { WithElementRef } from "$lib/utils.js";
|
||||
import type { HTMLAttributes } from "svelte/elements";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
children,
|
||||
...restProps
|
||||
}: WithElementRef<HTMLAttributes<HTMLElement>> = $props();
|
||||
</script>
|
||||
|
||||
<nav
|
||||
bind:this={ref}
|
||||
data-slot="breadcrumb"
|
||||
class={className}
|
||||
aria-label="breadcrumb"
|
||||
{...restProps}
|
||||
>
|
||||
{@render children?.()}
|
||||
</nav>
|
||||
25
src/lib/components/ui/breadcrumb/index.ts
Normal file
25
src/lib/components/ui/breadcrumb/index.ts
Normal file
@ -0,0 +1,25 @@
|
||||
import Root from "./breadcrumb.svelte";
|
||||
import Ellipsis from "./breadcrumb-ellipsis.svelte";
|
||||
import Item from "./breadcrumb-item.svelte";
|
||||
import Separator from "./breadcrumb-separator.svelte";
|
||||
import Link from "./breadcrumb-link.svelte";
|
||||
import List from "./breadcrumb-list.svelte";
|
||||
import Page from "./breadcrumb-page.svelte";
|
||||
|
||||
export {
|
||||
Root,
|
||||
Ellipsis,
|
||||
Item,
|
||||
Separator,
|
||||
Link,
|
||||
List,
|
||||
Page,
|
||||
//
|
||||
Root as Breadcrumb,
|
||||
Ellipsis as BreadcrumbEllipsis,
|
||||
Item as BreadcrumbItem,
|
||||
Separator as BreadcrumbSeparator,
|
||||
Link as BreadcrumbLink,
|
||||
List as BreadcrumbList,
|
||||
Page as BreadcrumbPage,
|
||||
};
|
||||
@ -0,0 +1,20 @@
|
||||
<script lang="ts">
|
||||
import { cn } from "$lib/utils.js";
|
||||
import type { ComponentProps } from "svelte";
|
||||
import { Separator } from "$lib/components/ui/separator/index.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
orientation = "vertical",
|
||||
...restProps
|
||||
}: ComponentProps<typeof Separator> = $props();
|
||||
</script>
|
||||
|
||||
<Separator
|
||||
bind:ref
|
||||
data-slot="button-group-separator"
|
||||
{orientation}
|
||||
class={cn("bg-input relative !m-0 self-stretch data-[orientation=vertical]:h-auto", className)}
|
||||
{...restProps}
|
||||
/>
|
||||
30
src/lib/components/ui/button-group/button-group-text.svelte
Normal file
30
src/lib/components/ui/button-group/button-group-text.svelte
Normal file
@ -0,0 +1,30 @@
|
||||
<script lang="ts">
|
||||
import { cn, type WithElementRef } from "$lib/utils.js";
|
||||
import type { HTMLAttributes } from "svelte/elements";
|
||||
import type { Snippet } from "svelte";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
child,
|
||||
...restProps
|
||||
}: WithElementRef<HTMLAttributes<HTMLDivElement>> & {
|
||||
child?: Snippet<[{ props: Record<string, unknown> }]>;
|
||||
} = $props();
|
||||
|
||||
const mergedProps = $derived({
|
||||
...restProps,
|
||||
class: cn(
|
||||
"bg-muted shadow-xs flex items-center gap-2 rounded-md border px-4 text-sm font-medium [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none",
|
||||
className
|
||||
),
|
||||
});
|
||||
</script>
|
||||
|
||||
{#if child}
|
||||
{@render child({ props: mergedProps })}
|
||||
{:else}
|
||||
<div bind:this={ref} {...mergedProps}>
|
||||
{@render mergedProps.children?.()}
|
||||
</div>
|
||||
{/if}
|
||||
46
src/lib/components/ui/button-group/button-group.svelte
Normal file
46
src/lib/components/ui/button-group/button-group.svelte
Normal file
@ -0,0 +1,46 @@
|
||||
<script lang="ts" module>
|
||||
import { tv, type VariantProps } from "tailwind-variants";
|
||||
|
||||
export const buttonGroupVariants = tv({
|
||||
base: "flex w-fit items-stretch has-[>[data-slot=button-group]]:gap-2 [&>*]:focus-visible:relative [&>*]:focus-visible:z-10 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-md [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1",
|
||||
variants: {
|
||||
orientation: {
|
||||
horizontal:
|
||||
"[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none",
|
||||
vertical:
|
||||
"flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none",
|
||||
},
|
||||
},
|
||||
defaultVariants: {
|
||||
orientation: "horizontal",
|
||||
},
|
||||
});
|
||||
|
||||
export type ButtonGroupOrientation = VariantProps<typeof buttonGroupVariants>["orientation"];
|
||||
</script>
|
||||
|
||||
<script lang="ts">
|
||||
import { cn, type WithElementRef } from "$lib/utils.js";
|
||||
import type { HTMLAttributes } from "svelte/elements";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
children,
|
||||
orientation = "horizontal",
|
||||
...restProps
|
||||
}: WithElementRef<HTMLAttributes<HTMLDivElement>> & {
|
||||
orientation?: ButtonGroupOrientation;
|
||||
} = $props();
|
||||
</script>
|
||||
|
||||
<div
|
||||
bind:this={ref}
|
||||
role="group"
|
||||
data-slot="button-group"
|
||||
data-orientation={orientation}
|
||||
class={cn(buttonGroupVariants({ orientation }), className)}
|
||||
{...restProps}
|
||||
>
|
||||
{@render children?.()}
|
||||
</div>
|
||||
13
src/lib/components/ui/button-group/index.ts
Normal file
13
src/lib/components/ui/button-group/index.ts
Normal file
@ -0,0 +1,13 @@
|
||||
import Root from "./button-group.svelte";
|
||||
import Text from "./button-group-text.svelte";
|
||||
import Separator from "./button-group-separator.svelte";
|
||||
|
||||
export {
|
||||
Root,
|
||||
Text,
|
||||
Separator,
|
||||
//
|
||||
Root as ButtonGroup,
|
||||
Text as ButtonGroupText,
|
||||
Separator as ButtonGroupSeparator,
|
||||
};
|
||||
82
src/lib/components/ui/button/button.svelte
Normal file
82
src/lib/components/ui/button/button.svelte
Normal file
@ -0,0 +1,82 @@
|
||||
<script lang="ts" module>
|
||||
import { cn, type WithElementRef } from "$lib/utils.js";
|
||||
import type { HTMLAnchorAttributes, HTMLButtonAttributes } from "svelte/elements";
|
||||
import { type VariantProps, tv } from "tailwind-variants";
|
||||
|
||||
export const buttonVariants = tv({
|
||||
base: "focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium outline-none transition-all focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||
variants: {
|
||||
variant: {
|
||||
default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
|
||||
destructive:
|
||||
"bg-destructive shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 text-white",
|
||||
outline:
|
||||
"bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 border",
|
||||
secondary: "bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",
|
||||
ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
|
||||
link: "text-primary underline-offset-4 hover:underline",
|
||||
},
|
||||
size: {
|
||||
default: "h-9 px-4 py-2 has-[>svg]:px-3",
|
||||
sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",
|
||||
lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
|
||||
icon: "size-9",
|
||||
"icon-sm": "size-8",
|
||||
"icon-lg": "size-10",
|
||||
},
|
||||
},
|
||||
defaultVariants: {
|
||||
variant: "default",
|
||||
size: "default",
|
||||
},
|
||||
});
|
||||
|
||||
export type ButtonVariant = VariantProps<typeof buttonVariants>["variant"];
|
||||
export type ButtonSize = VariantProps<typeof buttonVariants>["size"];
|
||||
|
||||
export type ButtonProps = WithElementRef<HTMLButtonAttributes> &
|
||||
WithElementRef<HTMLAnchorAttributes> & {
|
||||
variant?: ButtonVariant;
|
||||
size?: ButtonSize;
|
||||
};
|
||||
</script>
|
||||
|
||||
<script lang="ts">
|
||||
let {
|
||||
class: className,
|
||||
variant = "default",
|
||||
size = "default",
|
||||
ref = $bindable(null),
|
||||
href = undefined,
|
||||
type = "button",
|
||||
disabled,
|
||||
children,
|
||||
...restProps
|
||||
}: ButtonProps = $props();
|
||||
</script>
|
||||
|
||||
{#if href}
|
||||
<a
|
||||
bind:this={ref}
|
||||
data-slot="button"
|
||||
class={cn(buttonVariants({ variant, size }), className)}
|
||||
href={disabled ? undefined : href}
|
||||
aria-disabled={disabled}
|
||||
role={disabled ? "link" : undefined}
|
||||
tabindex={disabled ? -1 : undefined}
|
||||
{...restProps}
|
||||
>
|
||||
{@render children?.()}
|
||||
</a>
|
||||
{:else}
|
||||
<button
|
||||
bind:this={ref}
|
||||
data-slot="button"
|
||||
class={cn(buttonVariants({ variant, size }), className)}
|
||||
{type}
|
||||
{disabled}
|
||||
{...restProps}
|
||||
>
|
||||
{@render children?.()}
|
||||
</button>
|
||||
{/if}
|
||||
17
src/lib/components/ui/button/index.ts
Normal file
17
src/lib/components/ui/button/index.ts
Normal file
@ -0,0 +1,17 @@
|
||||
import Root, {
|
||||
type ButtonProps,
|
||||
type ButtonSize,
|
||||
type ButtonVariant,
|
||||
buttonVariants,
|
||||
} from "./button.svelte";
|
||||
|
||||
export {
|
||||
Root,
|
||||
type ButtonProps as Props,
|
||||
//
|
||||
Root as Button,
|
||||
buttonVariants,
|
||||
type ButtonProps,
|
||||
type ButtonSize,
|
||||
type ButtonVariant,
|
||||
};
|
||||
76
src/lib/components/ui/calendar/calendar-caption.svelte
Normal file
76
src/lib/components/ui/calendar/calendar-caption.svelte
Normal file
@ -0,0 +1,76 @@
|
||||
<script lang="ts">
|
||||
import type { ComponentProps } from "svelte";
|
||||
import type Calendar from "./calendar.svelte";
|
||||
import CalendarMonthSelect from "./calendar-month-select.svelte";
|
||||
import CalendarYearSelect from "./calendar-year-select.svelte";
|
||||
import { DateFormatter, getLocalTimeZone, type DateValue } from "@internationalized/date";
|
||||
|
||||
let {
|
||||
captionLayout,
|
||||
months,
|
||||
monthFormat,
|
||||
years,
|
||||
yearFormat,
|
||||
month,
|
||||
locale,
|
||||
placeholder = $bindable(),
|
||||
monthIndex = 0,
|
||||
}: {
|
||||
captionLayout: ComponentProps<typeof Calendar>["captionLayout"];
|
||||
months: ComponentProps<typeof CalendarMonthSelect>["months"];
|
||||
monthFormat: ComponentProps<typeof CalendarMonthSelect>["monthFormat"];
|
||||
years: ComponentProps<typeof CalendarYearSelect>["years"];
|
||||
yearFormat: ComponentProps<typeof CalendarYearSelect>["yearFormat"];
|
||||
month: DateValue;
|
||||
placeholder: DateValue | undefined;
|
||||
locale: string;
|
||||
monthIndex: number;
|
||||
} = $props();
|
||||
|
||||
function formatYear(date: DateValue) {
|
||||
const dateObj = date.toDate(getLocalTimeZone());
|
||||
if (typeof yearFormat === "function") return yearFormat(dateObj.getFullYear());
|
||||
return new DateFormatter(locale, { year: yearFormat }).format(dateObj);
|
||||
}
|
||||
|
||||
function formatMonth(date: DateValue) {
|
||||
const dateObj = date.toDate(getLocalTimeZone());
|
||||
if (typeof monthFormat === "function") return monthFormat(dateObj.getMonth() + 1);
|
||||
return new DateFormatter(locale, { month: monthFormat }).format(dateObj);
|
||||
}
|
||||
</script>
|
||||
|
||||
{#snippet MonthSelect()}
|
||||
<CalendarMonthSelect
|
||||
{months}
|
||||
{monthFormat}
|
||||
value={month.month}
|
||||
onchange={(e) => {
|
||||
if (!placeholder) return;
|
||||
const v = Number.parseInt(e.currentTarget.value);
|
||||
const newPlaceholder = placeholder.set({ month: v });
|
||||
placeholder = newPlaceholder.subtract({ months: monthIndex });
|
||||
}}
|
||||
/>
|
||||
{/snippet}
|
||||
|
||||
{#snippet YearSelect()}
|
||||
<CalendarYearSelect {years} {yearFormat} value={month.year} />
|
||||
{/snippet}
|
||||
|
||||
{#if captionLayout === "dropdown"}
|
||||
{@render MonthSelect()}
|
||||
{@render YearSelect()}
|
||||
{:else if captionLayout === "dropdown-months"}
|
||||
{@render MonthSelect()}
|
||||
{#if placeholder}
|
||||
{formatYear(placeholder)}
|
||||
{/if}
|
||||
{:else if captionLayout === "dropdown-years"}
|
||||
{#if placeholder}
|
||||
{formatMonth(placeholder)}
|
||||
{/if}
|
||||
{@render YearSelect()}
|
||||
{:else}
|
||||
{formatMonth(month)} {formatYear(month)}
|
||||
{/if}
|
||||
19
src/lib/components/ui/calendar/calendar-cell.svelte
Normal file
19
src/lib/components/ui/calendar/calendar-cell.svelte
Normal file
@ -0,0 +1,19 @@
|
||||
<script lang="ts">
|
||||
import { Calendar as CalendarPrimitive } from "bits-ui";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
...restProps
|
||||
}: CalendarPrimitive.CellProps = $props();
|
||||
</script>
|
||||
|
||||
<CalendarPrimitive.Cell
|
||||
bind:ref
|
||||
class={cn(
|
||||
"size-(--cell-size) relative p-0 text-center text-sm focus-within:z-20 [&:first-child[data-selected]_[data-bits-day]]:rounded-l-md [&:last-child[data-selected]_[data-bits-day]]:rounded-r-md",
|
||||
className
|
||||
)}
|
||||
{...restProps}
|
||||
/>
|
||||
35
src/lib/components/ui/calendar/calendar-day.svelte
Normal file
35
src/lib/components/ui/calendar/calendar-day.svelte
Normal file
@ -0,0 +1,35 @@
|
||||
<script lang="ts">
|
||||
import { buttonVariants } from "$lib/components/ui/button/index.js";
|
||||
import { cn } from "$lib/utils.js";
|
||||
import { Calendar as CalendarPrimitive } from "bits-ui";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
...restProps
|
||||
}: CalendarPrimitive.DayProps = $props();
|
||||
</script>
|
||||
|
||||
<CalendarPrimitive.Day
|
||||
bind:ref
|
||||
class={cn(
|
||||
buttonVariants({ variant: "ghost" }),
|
||||
"size-(--cell-size) flex select-none flex-col items-center justify-center gap-1 whitespace-nowrap p-0 font-normal leading-none",
|
||||
"[&[data-today]:not([data-selected])]:bg-accent [&[data-today]:not([data-selected])]:text-accent-foreground [&[data-today][data-disabled]]:text-muted-foreground",
|
||||
"data-[selected]:bg-primary dark:data-[selected]:hover:bg-accent/50 data-[selected]:text-primary-foreground",
|
||||
// Outside months
|
||||
"[&[data-outside-month]:not([data-selected])]:text-muted-foreground [&[data-outside-month]:not([data-selected])]:hover:text-accent-foreground",
|
||||
// Disabled
|
||||
"data-[disabled]:text-muted-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
||||
// Unavailable
|
||||
"data-[unavailable]:text-muted-foreground data-[unavailable]:line-through",
|
||||
// hover
|
||||
"dark:hover:text-accent-foreground",
|
||||
// focus
|
||||
"focus:border-ring focus:ring-ring/50 focus:relative",
|
||||
// inner spans
|
||||
"[&>span]:text-xs [&>span]:opacity-70",
|
||||
className
|
||||
)}
|
||||
{...restProps}
|
||||
/>
|
||||
12
src/lib/components/ui/calendar/calendar-grid-body.svelte
Normal file
12
src/lib/components/ui/calendar/calendar-grid-body.svelte
Normal file
@ -0,0 +1,12 @@
|
||||
<script lang="ts">
|
||||
import { Calendar as CalendarPrimitive } from "bits-ui";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
...restProps
|
||||
}: CalendarPrimitive.GridBodyProps = $props();
|
||||
</script>
|
||||
|
||||
<CalendarPrimitive.GridBody bind:ref class={cn(className)} {...restProps} />
|
||||
12
src/lib/components/ui/calendar/calendar-grid-head.svelte
Normal file
12
src/lib/components/ui/calendar/calendar-grid-head.svelte
Normal file
@ -0,0 +1,12 @@
|
||||
<script lang="ts">
|
||||
import { Calendar as CalendarPrimitive } from "bits-ui";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
...restProps
|
||||
}: CalendarPrimitive.GridHeadProps = $props();
|
||||
</script>
|
||||
|
||||
<CalendarPrimitive.GridHead bind:ref class={cn(className)} {...restProps} />
|
||||
12
src/lib/components/ui/calendar/calendar-grid-row.svelte
Normal file
12
src/lib/components/ui/calendar/calendar-grid-row.svelte
Normal file
@ -0,0 +1,12 @@
|
||||
<script lang="ts">
|
||||
import { Calendar as CalendarPrimitive } from "bits-ui";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
...restProps
|
||||
}: CalendarPrimitive.GridRowProps = $props();
|
||||
</script>
|
||||
|
||||
<CalendarPrimitive.GridRow bind:ref class={cn("flex", className)} {...restProps} />
|
||||
16
src/lib/components/ui/calendar/calendar-grid.svelte
Normal file
16
src/lib/components/ui/calendar/calendar-grid.svelte
Normal file
@ -0,0 +1,16 @@
|
||||
<script lang="ts">
|
||||
import { Calendar as CalendarPrimitive } from "bits-ui";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
...restProps
|
||||
}: CalendarPrimitive.GridProps = $props();
|
||||
</script>
|
||||
|
||||
<CalendarPrimitive.Grid
|
||||
bind:ref
|
||||
class={cn("mt-4 flex w-full border-collapse flex-col gap-1", className)}
|
||||
{...restProps}
|
||||
/>
|
||||
19
src/lib/components/ui/calendar/calendar-head-cell.svelte
Normal file
19
src/lib/components/ui/calendar/calendar-head-cell.svelte
Normal file
@ -0,0 +1,19 @@
|
||||
<script lang="ts">
|
||||
import { Calendar as CalendarPrimitive } from "bits-ui";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
...restProps
|
||||
}: CalendarPrimitive.HeadCellProps = $props();
|
||||
</script>
|
||||
|
||||
<CalendarPrimitive.HeadCell
|
||||
bind:ref
|
||||
class={cn(
|
||||
"text-muted-foreground w-(--cell-size) rounded-md text-[0.8rem] font-normal",
|
||||
className
|
||||
)}
|
||||
{...restProps}
|
||||
/>
|
||||
19
src/lib/components/ui/calendar/calendar-header.svelte
Normal file
19
src/lib/components/ui/calendar/calendar-header.svelte
Normal file
@ -0,0 +1,19 @@
|
||||
<script lang="ts">
|
||||
import { Calendar as CalendarPrimitive } from "bits-ui";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
...restProps
|
||||
}: CalendarPrimitive.HeaderProps = $props();
|
||||
</script>
|
||||
|
||||
<CalendarPrimitive.Header
|
||||
bind:ref
|
||||
class={cn(
|
||||
"h-(--cell-size) flex w-full items-center justify-center gap-1.5 text-sm font-medium",
|
||||
className
|
||||
)}
|
||||
{...restProps}
|
||||
/>
|
||||
16
src/lib/components/ui/calendar/calendar-heading.svelte
Normal file
16
src/lib/components/ui/calendar/calendar-heading.svelte
Normal file
@ -0,0 +1,16 @@
|
||||
<script lang="ts">
|
||||
import { Calendar as CalendarPrimitive } from "bits-ui";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
...restProps
|
||||
}: CalendarPrimitive.HeadingProps = $props();
|
||||
</script>
|
||||
|
||||
<CalendarPrimitive.Heading
|
||||
bind:ref
|
||||
class={cn("px-(--cell-size) text-sm font-medium", className)}
|
||||
{...restProps}
|
||||
/>
|
||||
44
src/lib/components/ui/calendar/calendar-month-select.svelte
Normal file
44
src/lib/components/ui/calendar/calendar-month-select.svelte
Normal file
@ -0,0 +1,44 @@
|
||||
<script lang="ts">
|
||||
import { Calendar as CalendarPrimitive } from "bits-ui";
|
||||
import { cn, type WithoutChildrenOrChild } from "$lib/utils.js";
|
||||
import ChevronDownIcon from "@lucide/svelte/icons/chevron-down";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
value,
|
||||
onchange,
|
||||
...restProps
|
||||
}: WithoutChildrenOrChild<CalendarPrimitive.MonthSelectProps> = $props();
|
||||
</script>
|
||||
|
||||
<span
|
||||
class={cn(
|
||||
"has-focus:border-ring border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] relative flex rounded-md border",
|
||||
className
|
||||
)}
|
||||
>
|
||||
<CalendarPrimitive.MonthSelect bind:ref class="absolute inset-0 opacity-0" {...restProps}>
|
||||
{#snippet child({ props, monthItems, selectedMonthItem })}
|
||||
<select {...props} {value} {onchange}>
|
||||
{#each monthItems as monthItem (monthItem.value)}
|
||||
<option
|
||||
value={monthItem.value}
|
||||
selected={value !== undefined
|
||||
? monthItem.value === value
|
||||
: monthItem.value === selectedMonthItem.value}
|
||||
>
|
||||
{monthItem.label}
|
||||
</option>
|
||||
{/each}
|
||||
</select>
|
||||
<span
|
||||
class="[&>svg]:text-muted-foreground flex h-8 select-none items-center gap-1 rounded-md pl-2 pr-1 text-sm font-medium [&>svg]:size-3.5"
|
||||
aria-hidden="true"
|
||||
>
|
||||
{monthItems.find((item) => item.value === value)?.label || selectedMonthItem.label}
|
||||
<ChevronDownIcon class="size-4" />
|
||||
</span>
|
||||
{/snippet}
|
||||
</CalendarPrimitive.MonthSelect>
|
||||
</span>
|
||||
15
src/lib/components/ui/calendar/calendar-month.svelte
Normal file
15
src/lib/components/ui/calendar/calendar-month.svelte
Normal file
@ -0,0 +1,15 @@
|
||||
<script lang="ts">
|
||||
import { type WithElementRef, cn } from "$lib/utils.js";
|
||||
import type { HTMLAttributes } from "svelte/elements";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
children,
|
||||
...restProps
|
||||
}: WithElementRef<HTMLAttributes<HTMLElement>> = $props();
|
||||
</script>
|
||||
|
||||
<div {...restProps} bind:this={ref} class={cn("flex flex-col", className)}>
|
||||
{@render children?.()}
|
||||
</div>
|
||||
19
src/lib/components/ui/calendar/calendar-months.svelte
Normal file
19
src/lib/components/ui/calendar/calendar-months.svelte
Normal file
@ -0,0 +1,19 @@
|
||||
<script lang="ts">
|
||||
import type { HTMLAttributes } from "svelte/elements";
|
||||
import { cn, type WithElementRef } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
children,
|
||||
...restProps
|
||||
}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();
|
||||
</script>
|
||||
|
||||
<div
|
||||
bind:this={ref}
|
||||
class={cn("relative flex flex-col gap-4 md:flex-row", className)}
|
||||
{...restProps}
|
||||
>
|
||||
{@render children?.()}
|
||||
</div>
|
||||
19
src/lib/components/ui/calendar/calendar-nav.svelte
Normal file
19
src/lib/components/ui/calendar/calendar-nav.svelte
Normal file
@ -0,0 +1,19 @@
|
||||
<script lang="ts">
|
||||
import { cn, type WithElementRef } from "$lib/utils.js";
|
||||
import type { HTMLAttributes } from "svelte/elements";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
children,
|
||||
...restProps
|
||||
}: WithElementRef<HTMLAttributes<HTMLElement>> = $props();
|
||||
</script>
|
||||
|
||||
<nav
|
||||
{...restProps}
|
||||
bind:this={ref}
|
||||
class={cn("absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1", className)}
|
||||
>
|
||||
{@render children?.()}
|
||||
</nav>
|
||||
31
src/lib/components/ui/calendar/calendar-next-button.svelte
Normal file
31
src/lib/components/ui/calendar/calendar-next-button.svelte
Normal file
@ -0,0 +1,31 @@
|
||||
<script lang="ts">
|
||||
import { Calendar as CalendarPrimitive } from "bits-ui";
|
||||
import ChevronRightIcon from "@lucide/svelte/icons/chevron-right";
|
||||
import { buttonVariants, type ButtonVariant } from "$lib/components/ui/button/index.js";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
children,
|
||||
variant = "ghost",
|
||||
...restProps
|
||||
}: CalendarPrimitive.NextButtonProps & {
|
||||
variant?: ButtonVariant;
|
||||
} = $props();
|
||||
</script>
|
||||
|
||||
{#snippet Fallback()}
|
||||
<ChevronRightIcon class="size-4" />
|
||||
{/snippet}
|
||||
|
||||
<CalendarPrimitive.NextButton
|
||||
bind:ref
|
||||
class={cn(
|
||||
buttonVariants({ variant }),
|
||||
"size-(--cell-size) select-none bg-transparent p-0 disabled:opacity-50 rtl:rotate-180",
|
||||
className
|
||||
)}
|
||||
children={children || Fallback}
|
||||
{...restProps}
|
||||
/>
|
||||
31
src/lib/components/ui/calendar/calendar-prev-button.svelte
Normal file
31
src/lib/components/ui/calendar/calendar-prev-button.svelte
Normal file
@ -0,0 +1,31 @@
|
||||
<script lang="ts">
|
||||
import { Calendar as CalendarPrimitive } from "bits-ui";
|
||||
import ChevronLeftIcon from "@lucide/svelte/icons/chevron-left";
|
||||
import { buttonVariants, type ButtonVariant } from "$lib/components/ui/button/index.js";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
children,
|
||||
variant = "ghost",
|
||||
...restProps
|
||||
}: CalendarPrimitive.PrevButtonProps & {
|
||||
variant?: ButtonVariant;
|
||||
} = $props();
|
||||
</script>
|
||||
|
||||
{#snippet Fallback()}
|
||||
<ChevronLeftIcon class="size-4" />
|
||||
{/snippet}
|
||||
|
||||
<CalendarPrimitive.PrevButton
|
||||
bind:ref
|
||||
class={cn(
|
||||
buttonVariants({ variant }),
|
||||
"size-(--cell-size) select-none bg-transparent p-0 disabled:opacity-50 rtl:rotate-180",
|
||||
className
|
||||
)}
|
||||
children={children || Fallback}
|
||||
{...restProps}
|
||||
/>
|
||||
43
src/lib/components/ui/calendar/calendar-year-select.svelte
Normal file
43
src/lib/components/ui/calendar/calendar-year-select.svelte
Normal file
@ -0,0 +1,43 @@
|
||||
<script lang="ts">
|
||||
import { Calendar as CalendarPrimitive } from "bits-ui";
|
||||
import { cn, type WithoutChildrenOrChild } from "$lib/utils.js";
|
||||
import ChevronDownIcon from "@lucide/svelte/icons/chevron-down";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
value,
|
||||
...restProps
|
||||
}: WithoutChildrenOrChild<CalendarPrimitive.YearSelectProps> = $props();
|
||||
</script>
|
||||
|
||||
<span
|
||||
class={cn(
|
||||
"has-focus:border-ring border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] relative flex rounded-md border",
|
||||
className
|
||||
)}
|
||||
>
|
||||
<CalendarPrimitive.YearSelect bind:ref class="absolute inset-0 opacity-0" {...restProps}>
|
||||
{#snippet child({ props, yearItems, selectedYearItem })}
|
||||
<select {...props} {value}>
|
||||
{#each yearItems as yearItem (yearItem.value)}
|
||||
<option
|
||||
value={yearItem.value}
|
||||
selected={value !== undefined
|
||||
? yearItem.value === value
|
||||
: yearItem.value === selectedYearItem.value}
|
||||
>
|
||||
{yearItem.label}
|
||||
</option>
|
||||
{/each}
|
||||
</select>
|
||||
<span
|
||||
class="[&>svg]:text-muted-foreground flex h-8 select-none items-center gap-1 rounded-md pl-2 pr-1 text-sm font-medium [&>svg]:size-3.5"
|
||||
aria-hidden="true"
|
||||
>
|
||||
{yearItems.find((item) => item.value === value)?.label || selectedYearItem.label}
|
||||
<ChevronDownIcon class="size-4" />
|
||||
</span>
|
||||
{/snippet}
|
||||
</CalendarPrimitive.YearSelect>
|
||||
</span>
|
||||
115
src/lib/components/ui/calendar/calendar.svelte
Normal file
115
src/lib/components/ui/calendar/calendar.svelte
Normal file
@ -0,0 +1,115 @@
|
||||
<script lang="ts">
|
||||
import { Calendar as CalendarPrimitive } from "bits-ui";
|
||||
import * as Calendar from "./index.js";
|
||||
import { cn, type WithoutChildrenOrChild } from "$lib/utils.js";
|
||||
import type { ButtonVariant } from "../button/button.svelte";
|
||||
import { isEqualMonth, type DateValue } from "@internationalized/date";
|
||||
import type { Snippet } from "svelte";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
value = $bindable(),
|
||||
placeholder = $bindable(),
|
||||
class: className,
|
||||
weekdayFormat = "short",
|
||||
buttonVariant = "ghost",
|
||||
captionLayout = "label",
|
||||
locale = "en-US",
|
||||
months: monthsProp,
|
||||
years,
|
||||
monthFormat: monthFormatProp,
|
||||
yearFormat = "numeric",
|
||||
day,
|
||||
disableDaysOutsideMonth = false,
|
||||
...restProps
|
||||
}: WithoutChildrenOrChild<CalendarPrimitive.RootProps> & {
|
||||
buttonVariant?: ButtonVariant;
|
||||
captionLayout?: "dropdown" | "dropdown-months" | "dropdown-years" | "label";
|
||||
months?: CalendarPrimitive.MonthSelectProps["months"];
|
||||
years?: CalendarPrimitive.YearSelectProps["years"];
|
||||
monthFormat?: CalendarPrimitive.MonthSelectProps["monthFormat"];
|
||||
yearFormat?: CalendarPrimitive.YearSelectProps["yearFormat"];
|
||||
day?: Snippet<[{ day: DateValue; outsideMonth: boolean }]>;
|
||||
} = $props();
|
||||
|
||||
const monthFormat = $derived.by(() => {
|
||||
if (monthFormatProp) return monthFormatProp;
|
||||
if (captionLayout.startsWith("dropdown")) return "short";
|
||||
return "long";
|
||||
});
|
||||
</script>
|
||||
|
||||
<!--
|
||||
Discriminated Unions + Destructing (required for bindable) do not
|
||||
get along, so we shut typescript up by casting `value` to `never`.
|
||||
-->
|
||||
<CalendarPrimitive.Root
|
||||
bind:value={value as never}
|
||||
bind:ref
|
||||
bind:placeholder
|
||||
{weekdayFormat}
|
||||
{disableDaysOutsideMonth}
|
||||
class={cn(
|
||||
"bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent",
|
||||
className
|
||||
)}
|
||||
{locale}
|
||||
{monthFormat}
|
||||
{yearFormat}
|
||||
{...restProps}
|
||||
>
|
||||
{#snippet children({ months, weekdays })}
|
||||
<Calendar.Months>
|
||||
<Calendar.Nav>
|
||||
<Calendar.PrevButton variant={buttonVariant} />
|
||||
<Calendar.NextButton variant={buttonVariant} />
|
||||
</Calendar.Nav>
|
||||
{#each months as month, monthIndex (month)}
|
||||
<Calendar.Month>
|
||||
<Calendar.Header>
|
||||
<Calendar.Caption
|
||||
{captionLayout}
|
||||
months={monthsProp}
|
||||
{monthFormat}
|
||||
{years}
|
||||
{yearFormat}
|
||||
month={month.value}
|
||||
bind:placeholder
|
||||
{locale}
|
||||
{monthIndex}
|
||||
/>
|
||||
</Calendar.Header>
|
||||
<Calendar.Grid>
|
||||
<Calendar.GridHead>
|
||||
<Calendar.GridRow class="select-none">
|
||||
{#each weekdays as weekday (weekday)}
|
||||
<Calendar.HeadCell>
|
||||
{weekday.slice(0, 2)}
|
||||
</Calendar.HeadCell>
|
||||
{/each}
|
||||
</Calendar.GridRow>
|
||||
</Calendar.GridHead>
|
||||
<Calendar.GridBody>
|
||||
{#each month.weeks as weekDates (weekDates)}
|
||||
<Calendar.GridRow class="mt-2 w-full">
|
||||
{#each weekDates as date (date)}
|
||||
<Calendar.Cell {date} month={month.value}>
|
||||
{#if day}
|
||||
{@render day({
|
||||
day: date,
|
||||
outsideMonth: !isEqualMonth(date, month.value),
|
||||
})}
|
||||
{:else}
|
||||
<Calendar.Day />
|
||||
{/if}
|
||||
</Calendar.Cell>
|
||||
{/each}
|
||||
</Calendar.GridRow>
|
||||
{/each}
|
||||
</Calendar.GridBody>
|
||||
</Calendar.Grid>
|
||||
</Calendar.Month>
|
||||
{/each}
|
||||
</Calendar.Months>
|
||||
{/snippet}
|
||||
</CalendarPrimitive.Root>
|
||||
40
src/lib/components/ui/calendar/index.ts
Normal file
40
src/lib/components/ui/calendar/index.ts
Normal file
@ -0,0 +1,40 @@
|
||||
import Root from "./calendar.svelte";
|
||||
import Cell from "./calendar-cell.svelte";
|
||||
import Day from "./calendar-day.svelte";
|
||||
import Grid from "./calendar-grid.svelte";
|
||||
import Header from "./calendar-header.svelte";
|
||||
import Months from "./calendar-months.svelte";
|
||||
import GridRow from "./calendar-grid-row.svelte";
|
||||
import Heading from "./calendar-heading.svelte";
|
||||
import GridBody from "./calendar-grid-body.svelte";
|
||||
import GridHead from "./calendar-grid-head.svelte";
|
||||
import HeadCell from "./calendar-head-cell.svelte";
|
||||
import NextButton from "./calendar-next-button.svelte";
|
||||
import PrevButton from "./calendar-prev-button.svelte";
|
||||
import MonthSelect from "./calendar-month-select.svelte";
|
||||
import YearSelect from "./calendar-year-select.svelte";
|
||||
import Month from "./calendar-month.svelte";
|
||||
import Nav from "./calendar-nav.svelte";
|
||||
import Caption from "./calendar-caption.svelte";
|
||||
|
||||
export {
|
||||
Day,
|
||||
Cell,
|
||||
Grid,
|
||||
Header,
|
||||
Months,
|
||||
GridRow,
|
||||
Heading,
|
||||
GridBody,
|
||||
GridHead,
|
||||
HeadCell,
|
||||
NextButton,
|
||||
PrevButton,
|
||||
Nav,
|
||||
Month,
|
||||
YearSelect,
|
||||
MonthSelect,
|
||||
Caption,
|
||||
//
|
||||
Root as Calendar,
|
||||
};
|
||||
20
src/lib/components/ui/card/card-action.svelte
Normal file
20
src/lib/components/ui/card/card-action.svelte
Normal file
@ -0,0 +1,20 @@
|
||||
<script lang="ts">
|
||||
import { cn, type WithElementRef } from "$lib/utils.js";
|
||||
import type { HTMLAttributes } from "svelte/elements";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
children,
|
||||
...restProps
|
||||
}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();
|
||||
</script>
|
||||
|
||||
<div
|
||||
bind:this={ref}
|
||||
data-slot="card-action"
|
||||
class={cn("col-start-2 row-span-2 row-start-1 self-start justify-self-end", className)}
|
||||
{...restProps}
|
||||
>
|
||||
{@render children?.()}
|
||||
</div>
|
||||
15
src/lib/components/ui/card/card-content.svelte
Normal file
15
src/lib/components/ui/card/card-content.svelte
Normal file
@ -0,0 +1,15 @@
|
||||
<script lang="ts">
|
||||
import type { HTMLAttributes } from "svelte/elements";
|
||||
import { cn, type WithElementRef } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
children,
|
||||
...restProps
|
||||
}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();
|
||||
</script>
|
||||
|
||||
<div bind:this={ref} data-slot="card-content" class={cn("px-6", className)} {...restProps}>
|
||||
{@render children?.()}
|
||||
</div>
|
||||
20
src/lib/components/ui/card/card-description.svelte
Normal file
20
src/lib/components/ui/card/card-description.svelte
Normal file
@ -0,0 +1,20 @@
|
||||
<script lang="ts">
|
||||
import type { HTMLAttributes } from "svelte/elements";
|
||||
import { cn, type WithElementRef } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
children,
|
||||
...restProps
|
||||
}: WithElementRef<HTMLAttributes<HTMLParagraphElement>> = $props();
|
||||
</script>
|
||||
|
||||
<p
|
||||
bind:this={ref}
|
||||
data-slot="card-description"
|
||||
class={cn("text-muted-foreground text-sm", className)}
|
||||
{...restProps}
|
||||
>
|
||||
{@render children?.()}
|
||||
</p>
|
||||
20
src/lib/components/ui/card/card-footer.svelte
Normal file
20
src/lib/components/ui/card/card-footer.svelte
Normal file
@ -0,0 +1,20 @@
|
||||
<script lang="ts">
|
||||
import { cn, type WithElementRef } from "$lib/utils.js";
|
||||
import type { HTMLAttributes } from "svelte/elements";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
children,
|
||||
...restProps
|
||||
}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();
|
||||
</script>
|
||||
|
||||
<div
|
||||
bind:this={ref}
|
||||
data-slot="card-footer"
|
||||
class={cn("[.border-t]:pt-6 flex items-center px-6", className)}
|
||||
{...restProps}
|
||||
>
|
||||
{@render children?.()}
|
||||
</div>
|
||||
23
src/lib/components/ui/card/card-header.svelte
Normal file
23
src/lib/components/ui/card/card-header.svelte
Normal file
@ -0,0 +1,23 @@
|
||||
<script lang="ts">
|
||||
import { cn, type WithElementRef } from "$lib/utils.js";
|
||||
import type { HTMLAttributes } from "svelte/elements";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
children,
|
||||
...restProps
|
||||
}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();
|
||||
</script>
|
||||
|
||||
<div
|
||||
bind:this={ref}
|
||||
data-slot="card-header"
|
||||
class={cn(
|
||||
"@container/card-header has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6 grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6",
|
||||
className
|
||||
)}
|
||||
{...restProps}
|
||||
>
|
||||
{@render children?.()}
|
||||
</div>
|
||||
20
src/lib/components/ui/card/card-title.svelte
Normal file
20
src/lib/components/ui/card/card-title.svelte
Normal file
@ -0,0 +1,20 @@
|
||||
<script lang="ts">
|
||||
import type { HTMLAttributes } from "svelte/elements";
|
||||
import { cn, type WithElementRef } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
children,
|
||||
...restProps
|
||||
}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();
|
||||
</script>
|
||||
|
||||
<div
|
||||
bind:this={ref}
|
||||
data-slot="card-title"
|
||||
class={cn("font-semibold leading-none", className)}
|
||||
{...restProps}
|
||||
>
|
||||
{@render children?.()}
|
||||
</div>
|
||||
23
src/lib/components/ui/card/card.svelte
Normal file
23
src/lib/components/ui/card/card.svelte
Normal file
@ -0,0 +1,23 @@
|
||||
<script lang="ts">
|
||||
import type { HTMLAttributes } from "svelte/elements";
|
||||
import { cn, type WithElementRef } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
children,
|
||||
...restProps
|
||||
}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();
|
||||
</script>
|
||||
|
||||
<div
|
||||
bind:this={ref}
|
||||
data-slot="card"
|
||||
class={cn(
|
||||
"bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",
|
||||
className
|
||||
)}
|
||||
{...restProps}
|
||||
>
|
||||
{@render children?.()}
|
||||
</div>
|
||||
25
src/lib/components/ui/card/index.ts
Normal file
25
src/lib/components/ui/card/index.ts
Normal file
@ -0,0 +1,25 @@
|
||||
import Root from "./card.svelte";
|
||||
import Content from "./card-content.svelte";
|
||||
import Description from "./card-description.svelte";
|
||||
import Footer from "./card-footer.svelte";
|
||||
import Header from "./card-header.svelte";
|
||||
import Title from "./card-title.svelte";
|
||||
import Action from "./card-action.svelte";
|
||||
|
||||
export {
|
||||
Root,
|
||||
Content,
|
||||
Description,
|
||||
Footer,
|
||||
Header,
|
||||
Title,
|
||||
Action,
|
||||
//
|
||||
Root as Card,
|
||||
Content as CardContent,
|
||||
Description as CardDescription,
|
||||
Footer as CardFooter,
|
||||
Header as CardHeader,
|
||||
Title as CardTitle,
|
||||
Action as CardAction,
|
||||
};
|
||||
43
src/lib/components/ui/carousel/carousel-content.svelte
Normal file
43
src/lib/components/ui/carousel/carousel-content.svelte
Normal file
@ -0,0 +1,43 @@
|
||||
<script lang="ts">
|
||||
import emblaCarouselSvelte from "embla-carousel-svelte";
|
||||
import type { HTMLAttributes } from "svelte/elements";
|
||||
import { getEmblaContext } from "./context.js";
|
||||
import { cn, type WithElementRef } from "$lib/utils.js";
|
||||
|
||||
let {
|
||||
ref = $bindable(null),
|
||||
class: className,
|
||||
children,
|
||||
...restProps
|
||||
}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();
|
||||
|
||||
const emblaCtx = getEmblaContext("<Carousel.Content/>");
|
||||
</script>
|
||||
|
||||
<div
|
||||
data-slot="carousel-content"
|
||||
class="overflow-hidden"
|
||||
use:emblaCarouselSvelte={{
|
||||
options: {
|
||||
container: "[data-embla-container]",
|
||||
slides: "[data-embla-slide]",
|
||||
...emblaCtx.options,
|
||||
axis: emblaCtx.orientation === "horizontal" ? "x" : "y",
|
||||
},
|
||||
plugins: emblaCtx.plugins,
|
||||
}}
|
||||
onemblaInit={emblaCtx.onInit}
|
||||
>
|
||||
<div
|
||||
bind:this={ref}
|
||||
class={cn(
|
||||
"flex",
|
||||
emblaCtx.orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col",
|
||||
className
|
||||
)}
|
||||
data-embla-container=""
|
||||
{...restProps}
|
||||
>
|
||||
{@render children?.()}
|
||||
</div>
|
||||
</div>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user