.gitignore 업데이트: 불필요 파일 및 디렉토리 추가 제외 (.junie/, sneat-bootstrap-html-admin-template-v2.0.0/)
parent
f75dfd4249
commit
52bd660aba
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,2 @@
|
||||
#Fri May 02 16:15:50 KST 2025
|
||||
gradle.version=8.12
|
||||
Binary file not shown.
Binary file not shown.
@ -0,0 +1,10 @@
|
||||
# 디폴트 무시된 파일
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# 에디터 기반 HTTP 클라이언트 요청
|
||||
/httpRequests/
|
||||
# 환경에 따라 달라지는 Maven 홈 디렉터리
|
||||
/mavenHomeManager.xml
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
||||
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CompilerConfiguration">
|
||||
<annotationProcessing>
|
||||
<profile name="Gradle Imported" enabled="true">
|
||||
<outputRelativeToContentRoot value="true" />
|
||||
<processorPath useClasspath="false">
|
||||
<entry name="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.projectlombok/lombok/1.18.30/f195ee86e6c896ea47a1d39defbe20eb59cd149d/lombok-1.18.30.jar" />
|
||||
</processorPath>
|
||||
<module name="xit-framework.main" />
|
||||
</profile>
|
||||
</annotationProcessing>
|
||||
<bytecodeTargetLevel target="1.8" />
|
||||
</component>
|
||||
<component name="JavacSettings">
|
||||
<option name="ADDITIONAL_OPTIONS_STRING" value="-parameters" />
|
||||
</component>
|
||||
</project>
|
||||
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
|
||||
<data-source source="LOCAL" name="xitframework@211.119.124.9" uuid="1a418512-6250-4ba1-a353-5243d31a3982">
|
||||
<driver-ref>mariadb</driver-ref>
|
||||
<synchronize>true</synchronize>
|
||||
<jdbc-driver>org.mariadb.jdbc.Driver</jdbc-driver>
|
||||
<jdbc-url>jdbc:mariadb://211.119.124.9:4407/xitframework</jdbc-url>
|
||||
<jdbc-additional-properties>
|
||||
<property name="com.intellij.clouds.kubernetes.db.host.port" />
|
||||
<property name="com.intellij.clouds.kubernetes.db.enabled" value="false" />
|
||||
<property name="com.intellij.clouds.kubernetes.db.container.port" />
|
||||
</jdbc-additional-properties>
|
||||
<working-dir>$ProjectFileDir$</working-dir>
|
||||
</data-source>
|
||||
</component>
|
||||
</project>
|
||||
@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="GradleMigrationSettings" migrationVersion="1" />
|
||||
<component name="GradleSettings">
|
||||
<option name="linkedExternalProjectsSettings">
|
||||
<GradleProjectSettings>
|
||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||
<option name="modules">
|
||||
<set>
|
||||
<option value="$PROJECT_DIR$" />
|
||||
</set>
|
||||
</option>
|
||||
</GradleProjectSettings>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
||||
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||
<component name="FrameworkDetectionExcludesConfiguration">
|
||||
<file type="web" url="file://$PROJECT_DIR$" />
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="zulu-17-d" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
</project>
|
||||
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/xit-framework.main.iml" filepath="$PROJECT_DIR$/.idea/modules/xit-framework.main.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module version="4">
|
||||
<component name="AdditionalModuleElements">
|
||||
<content url="file://$MODULE_DIR$/../../build/generated/sources/annotationProcessor/java/main">
|
||||
<sourceFolder url="file://$MODULE_DIR$/../../build/generated/sources/annotationProcessor/java/main" isTestSource="false" generated="true" />
|
||||
</content>
|
||||
</component>
|
||||
</module>
|
||||
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="TemplatesSettings">
|
||||
<option name="templateConfigs">
|
||||
<TemplateContext>
|
||||
<option name="projectPath" value="$PROJECT_DIR$" />
|
||||
</TemplateContext>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
||||
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
@ -0,0 +1,82 @@
|
||||
plugins {
|
||||
id 'org.springframework.boot' version '2.7.18'
|
||||
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
|
||||
id 'java'
|
||||
id 'war'
|
||||
}
|
||||
|
||||
group = 'com.example'
|
||||
version = '0.0.1-SNAPSHOT'
|
||||
java {
|
||||
sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
targetCompatibility = JavaVersion.VERSION_1_8
|
||||
}
|
||||
|
||||
configurations {
|
||||
compileOnly {
|
||||
extendsFrom annotationProcessor
|
||||
}
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
maven { url 'https://maven.egovframe.go.kr/maven/' } // eGovFrame repository
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
// Spring Boot
|
||||
implementation 'org.springframework.boot:spring-boot-starter-web'
|
||||
implementation 'org.springframework.boot:spring-boot-starter-validation'
|
||||
implementation 'org.springframework.boot:spring-boot-starter-aop'
|
||||
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
|
||||
|
||||
// Servlet & JSP
|
||||
implementation 'javax.servlet:jstl'
|
||||
implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
|
||||
|
||||
// Tiles
|
||||
implementation 'org.apache.tiles:tiles-jsp:3.0.8'
|
||||
implementation 'org.apache.tiles:tiles-core:3.0.8'
|
||||
implementation 'org.apache.tiles:tiles-api:3.0.8'
|
||||
implementation 'org.apache.tiles:tiles-servlet:3.0.8'
|
||||
implementation 'org.apache.tiles:tiles-el:3.0.8'
|
||||
|
||||
// MyBatis
|
||||
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.3.1'
|
||||
|
||||
// MariaDB
|
||||
implementation 'org.mariadb.jdbc:mariadb-java-client'
|
||||
|
||||
// HikariCP (included in spring-boot-starter-jdbc)
|
||||
|
||||
// eGovFrame
|
||||
implementation('org.egovframe.rte:org.egovframe.rte.fdl.cmmn:4.3.0') {
|
||||
exclude group: 'org.apache.logging.log4j', module: 'log4j-slf4j-impl'
|
||||
}
|
||||
implementation('org.egovframe.rte:org.egovframe.rte.ptl.mvc:4.3.0') {
|
||||
exclude group: 'org.apache.logging.log4j', module: 'log4j-slf4j-impl'
|
||||
}
|
||||
|
||||
// Lombok
|
||||
compileOnly 'org.projectlombok:lombok'
|
||||
annotationProcessor 'org.projectlombok:lombok'
|
||||
|
||||
// Dev Tools
|
||||
developmentOnly 'org.springframework.boot:spring-boot-devtools'
|
||||
|
||||
// Test
|
||||
testImplementation 'org.springframework.boot:spring-boot-starter-test'
|
||||
|
||||
// Provided
|
||||
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
|
||||
}
|
||||
|
||||
tasks.named('test') {
|
||||
useJUnitPlatform()
|
||||
}
|
||||
|
||||
// WAR file name
|
||||
war {
|
||||
archiveFileName = 'xit-framework.war'
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,24 @@
|
||||
# Development profile
|
||||
spring:
|
||||
config:
|
||||
activate:
|
||||
on-profile: dev
|
||||
datasource:
|
||||
driver-class-name: org.mariadb.jdbc.Driver
|
||||
url: jdbc:mariadb://211.119.124.9:4407/xitframework?characterEncoding=UTF-8&serverTimezone=Asia/Seoul
|
||||
username: egov
|
||||
password: xit1807
|
||||
hikari:
|
||||
maximum-pool-size: 20
|
||||
minimum-idle: 10
|
||||
connection-timeout: 30000
|
||||
idle-timeout: 600000
|
||||
max-lifetime: 1800000
|
||||
|
||||
# Logging configuration for development environment
|
||||
logging:
|
||||
level:
|
||||
root: INFO
|
||||
com.example.demo: DEBUG # Detailed logging for application code in dev environment
|
||||
org.springframework: INFO
|
||||
org.mybatis: INFO # Standard logging for frameworks in dev
|
||||
@ -0,0 +1,24 @@
|
||||
# Local profile
|
||||
spring:
|
||||
config:
|
||||
activate:
|
||||
on-profile: local
|
||||
datasource:
|
||||
driver-class-name: org.mariadb.jdbc.Driver
|
||||
url: jdbc:mariadb://211.119.124.9:4407/xitframework?characterEncoding=UTF-8&serverTimezone=Asia/Seoul
|
||||
username: egov
|
||||
password: xit1807
|
||||
hikari:
|
||||
maximum-pool-size: 10
|
||||
minimum-idle: 5
|
||||
connection-timeout: 30000
|
||||
idle-timeout: 600000
|
||||
max-lifetime: 1800000
|
||||
|
||||
# Logging configuration for local environment
|
||||
logging:
|
||||
level:
|
||||
root: INFO
|
||||
com.example.demo: DEBUG # More detailed logging for application code in local environment
|
||||
org.springframework: INFO
|
||||
org.mybatis: DEBUG # More detailed SQL logging for local development
|
||||
@ -0,0 +1,24 @@
|
||||
# Production profile
|
||||
spring:
|
||||
config:
|
||||
activate:
|
||||
on-profile: prod
|
||||
datasource:
|
||||
driver-class-name: org.mariadb.jdbc.Driver
|
||||
url: jdbc:mariadb://211.119.124.9:4407/xitframework?characterEncoding=UTF-8&serverTimezone=Asia/Seoul
|
||||
username: egov
|
||||
password: xit1807
|
||||
hikari:
|
||||
maximum-pool-size: 50
|
||||
minimum-idle: 20
|
||||
connection-timeout: 30000
|
||||
idle-timeout: 600000
|
||||
max-lifetime: 1800000
|
||||
|
||||
# Logging configuration for production environment
|
||||
logging:
|
||||
level:
|
||||
root: WARN # Higher threshold for root logger in production
|
||||
com.example.demo: INFO # Standard logging for application code in production
|
||||
org.springframework: WARN # Minimal framework logging in production
|
||||
org.mybatis: WARN # Minimal SQL logging in production
|
||||
@ -0,0 +1,37 @@
|
||||
# Common application properties
|
||||
spring:
|
||||
profiles:
|
||||
active: local
|
||||
mvc:
|
||||
view:
|
||||
prefix: /WEB-INF/views/
|
||||
suffix: .jsp
|
||||
devtools:
|
||||
livereload:
|
||||
enabled: true
|
||||
restart:
|
||||
enabled: true
|
||||
|
||||
# MyBatis configuration
|
||||
mybatis:
|
||||
config-location: classpath:mybatis/mybatis-config.xml
|
||||
mapper-locations: classpath:mybatis/mappers/**/*.xml
|
||||
type-aliases-package: com.example.demo.domain
|
||||
|
||||
# Server configuration
|
||||
server:
|
||||
port: 8080
|
||||
servlet:
|
||||
context-path: /
|
||||
encoding:
|
||||
charset: UTF-8
|
||||
enabled: true
|
||||
force: true
|
||||
|
||||
# Default logging configuration (overridden by profile-specific settings)
|
||||
logging:
|
||||
level:
|
||||
root: INFO
|
||||
com.example.demo: DEBUG
|
||||
org.springframework: INFO
|
||||
org.mybatis: INFO
|
||||
@ -0,0 +1,69 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.example.demo.mapper.UserMapper">
|
||||
|
||||
<!-- Result map for User -->
|
||||
<resultMap id="UserResultMap" type="com.example.demo.domain.User">
|
||||
<id property="id" column="id"/>
|
||||
<result property="username" column="username"/>
|
||||
<result property="password" column="password"/>
|
||||
<result property="name" column="name"/>
|
||||
<result property="email" column="email"/>
|
||||
<result property="role" column="role"/>
|
||||
<result property="enabled" column="enabled"/>
|
||||
<result property="createdAt" column="created_at"/>
|
||||
<result property="updatedAt" column="updated_at"/>
|
||||
</resultMap>
|
||||
|
||||
<!-- Common SQL fragments -->
|
||||
<sql id="userColumns">
|
||||
id, username, password, name, email, role, enabled, created_at, updated_at
|
||||
</sql>
|
||||
|
||||
<!-- Find all users -->
|
||||
<select id="findAll" resultMap="UserResultMap">
|
||||
SELECT <include refid="userColumns"/>
|
||||
FROM users
|
||||
ORDER BY id
|
||||
</select>
|
||||
|
||||
<!-- Find user by ID -->
|
||||
<select id="findById" resultMap="UserResultMap">
|
||||
SELECT <include refid="userColumns"/>
|
||||
FROM users
|
||||
WHERE id = #{id}
|
||||
</select>
|
||||
|
||||
<!-- Find user by username -->
|
||||
<select id="findByUsername" resultMap="UserResultMap">
|
||||
SELECT <include refid="userColumns"/>
|
||||
FROM users
|
||||
WHERE username = #{username}
|
||||
</select>
|
||||
|
||||
<!-- Insert a new user -->
|
||||
<insert id="insert" parameterType="com.example.demo.domain.User" useGeneratedKeys="true" keyProperty="id">
|
||||
INSERT INTO users (username, password, name, email, role, enabled, created_at, updated_at)
|
||||
VALUES (#{username}, #{password}, #{name}, #{email}, #{role}, #{enabled}, NOW(), NOW())
|
||||
</insert>
|
||||
|
||||
<!-- Update an existing user -->
|
||||
<update id="update" parameterType="com.example.demo.domain.User">
|
||||
UPDATE users
|
||||
SET username = #{username},
|
||||
password = #{password},
|
||||
name = #{name},
|
||||
email = #{email},
|
||||
role = #{role},
|
||||
enabled = #{enabled},
|
||||
updated_at = NOW()
|
||||
WHERE id = #{id}
|
||||
</update>
|
||||
|
||||
<!-- Delete a user by ID -->
|
||||
<delete id="deleteById">
|
||||
DELETE FROM users
|
||||
WHERE id = #{id}
|
||||
</delete>
|
||||
|
||||
</mapper>
|
||||
@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
|
||||
<configuration>
|
||||
<settings>
|
||||
<!-- Use camelCase for Java properties and snake_case for database columns -->
|
||||
<setting name="mapUnderscoreToCamelCase" value="true"/>
|
||||
<!-- Enable auto-mapping of fields -->
|
||||
<setting name="autoMappingBehavior" value="FULL"/>
|
||||
<!-- Cache prepared statements -->
|
||||
<setting name="defaultExecutorType" value="REUSE"/>
|
||||
<!-- Enable lazy loading -->
|
||||
<setting name="lazyLoadingEnabled" value="true"/>
|
||||
<!-- Log SQL statements -->
|
||||
<setting name="logImpl" value="SLF4J"/>
|
||||
</settings>
|
||||
|
||||
<typeAliases>
|
||||
<!-- Type aliases will be defined in the type-aliases-package in application.yml -->
|
||||
</typeAliases>
|
||||
</configuration>
|
||||
@ -0,0 +1,2 @@
|
||||
Manifest-Version: 1.0
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,2 @@
|
||||
Manifest-Version: 1.0
|
||||
|
||||
@ -0,0 +1,7 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
@ -0,0 +1,251 @@
|
||||
#!/bin/sh
|
||||
|
||||
#
|
||||
# Copyright © 2015-2021 the original authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# https://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
# Gradle start up script for POSIX generated by Gradle.
|
||||
#
|
||||
# Important for running:
|
||||
#
|
||||
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
|
||||
# noncompliant, but you have some other compliant shell such as ksh or
|
||||
# bash, then to run this script, type that shell name before the whole
|
||||
# command line, like:
|
||||
#
|
||||
# ksh Gradle
|
||||
#
|
||||
# Busybox and similar reduced shells will NOT work, because this script
|
||||
# requires all of these POSIX shell features:
|
||||
# * functions;
|
||||
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
|
||||
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
|
||||
# * compound commands having a testable exit status, especially «case»;
|
||||
# * various built-in commands including «command», «set», and «ulimit».
|
||||
#
|
||||
# Important for patching:
|
||||
#
|
||||
# (2) This script targets any POSIX shell, so it avoids extensions provided
|
||||
# by Bash, Ksh, etc; in particular arrays are avoided.
|
||||
#
|
||||
# The "traditional" practice of packing multiple parameters into a
|
||||
# space-separated string is a well documented source of bugs and security
|
||||
# problems, so this is (mostly) avoided, by progressively accumulating
|
||||
# options in "$@", and eventually passing that to Java.
|
||||
#
|
||||
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
|
||||
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
|
||||
# see the in-line comments for details.
|
||||
#
|
||||
# There are tweaks for specific operating systems such as AIX, CygWin,
|
||||
# Darwin, MinGW, and NonStop.
|
||||
#
|
||||
# (3) This script is generated from the Groovy template
|
||||
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
|
||||
# within the Gradle project.
|
||||
#
|
||||
# You can find Gradle at https://github.com/gradle/gradle/.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
# Attempt to set APP_HOME
|
||||
|
||||
# Resolve links: $0 may be a link
|
||||
app_path=$0
|
||||
|
||||
# Need this for daisy-chained symlinks.
|
||||
while
|
||||
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
|
||||
[ -h "$app_path" ]
|
||||
do
|
||||
ls=$( ls -ld "$app_path" )
|
||||
link=${ls#*' -> '}
|
||||
case $link in #(
|
||||
/*) app_path=$link ;; #(
|
||||
*) app_path=$APP_HOME$link ;;
|
||||
esac
|
||||
done
|
||||
|
||||
# This is normally unused
|
||||
# shellcheck disable=SC2034
|
||||
APP_BASE_NAME=${0##*/}
|
||||
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
|
||||
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD=maximum
|
||||
|
||||
warn () {
|
||||
echo "$*"
|
||||
} >&2
|
||||
|
||||
die () {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
exit 1
|
||||
} >&2
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
nonstop=false
|
||||
case "$( uname )" in #(
|
||||
CYGWIN* ) cygwin=true ;; #(
|
||||
Darwin* ) darwin=true ;; #(
|
||||
MSYS* | MINGW* ) msys=true ;; #(
|
||||
NONSTOP* ) nonstop=true ;;
|
||||
esac
|
||||
|
||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
|
||||
# Determine the Java command to use to start the JVM.
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
# IBM's JDK on AIX uses strange locations for the executables
|
||||
JAVACMD=$JAVA_HOME/jre/sh/java
|
||||
else
|
||||
JAVACMD=$JAVA_HOME/bin/java
|
||||
fi
|
||||
if [ ! -x "$JAVACMD" ] ; then
|
||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
else
|
||||
JAVACMD=java
|
||||
if ! command -v java >/dev/null 2>&1
|
||||
then
|
||||
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
fi
|
||||
|
||||
# Increase the maximum file descriptors if we can.
|
||||
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
|
||||
case $MAX_FD in #(
|
||||
max*)
|
||||
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
|
||||
# shellcheck disable=SC2039,SC3045
|
||||
MAX_FD=$( ulimit -H -n ) ||
|
||||
warn "Could not query maximum file descriptor limit"
|
||||
esac
|
||||
case $MAX_FD in #(
|
||||
'' | soft) :;; #(
|
||||
*)
|
||||
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
|
||||
# shellcheck disable=SC2039,SC3045
|
||||
ulimit -n "$MAX_FD" ||
|
||||
warn "Could not set maximum file descriptor limit to $MAX_FD"
|
||||
esac
|
||||
fi
|
||||
|
||||
# Collect all arguments for the java command, stacking in reverse order:
|
||||
# * args from the command line
|
||||
# * the main class name
|
||||
# * -classpath
|
||||
# * -D...appname settings
|
||||
# * --module-path (only if needed)
|
||||
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
|
||||
|
||||
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||
if "$cygwin" || "$msys" ; then
|
||||
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
|
||||
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
|
||||
|
||||
JAVACMD=$( cygpath --unix "$JAVACMD" )
|
||||
|
||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||
for arg do
|
||||
if
|
||||
case $arg in #(
|
||||
-*) false ;; # don't mess with options #(
|
||||
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
|
||||
[ -e "$t" ] ;; #(
|
||||
*) false ;;
|
||||
esac
|
||||
then
|
||||
arg=$( cygpath --path --ignore --mixed "$arg" )
|
||||
fi
|
||||
# Roll the args list around exactly as many times as the number of
|
||||
# args, so each arg winds up back in the position where it started, but
|
||||
# possibly modified.
|
||||
#
|
||||
# NB: a `for` loop captures its iteration list before it begins, so
|
||||
# changing the positional parameters here affects neither the number of
|
||||
# iterations, nor the values presented in `arg`.
|
||||
shift # remove old arg
|
||||
set -- "$@" "$arg" # push replacement arg
|
||||
done
|
||||
fi
|
||||
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
|
||||
# Collect all arguments for the java command:
|
||||
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
|
||||
# and any embedded shellness will be escaped.
|
||||
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
|
||||
# treated as '${Hostname}' itself on the command line.
|
||||
|
||||
set -- \
|
||||
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
||||
-classpath "$CLASSPATH" \
|
||||
org.gradle.wrapper.GradleWrapperMain \
|
||||
"$@"
|
||||
|
||||
# Stop when "xargs" is not available.
|
||||
if ! command -v xargs >/dev/null 2>&1
|
||||
then
|
||||
die "xargs is not available"
|
||||
fi
|
||||
|
||||
# Use "xargs" to parse quoted args.
|
||||
#
|
||||
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
|
||||
#
|
||||
# In Bash we could simply go:
|
||||
#
|
||||
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
|
||||
# set -- "${ARGS[@]}" "$@"
|
||||
#
|
||||
# but POSIX shell has neither arrays nor command substitution, so instead we
|
||||
# post-process each arg (as a line of input to sed) to backslash-escape any
|
||||
# character that might be a shell metacharacter, then use eval to reverse
|
||||
# that process (while maintaining the separation between arguments), and wrap
|
||||
# the whole thing up as a single "set" statement.
|
||||
#
|
||||
# This will of course break if any of these variables contains a newline or
|
||||
# an unmatched quote.
|
||||
#
|
||||
|
||||
eval "set -- $(
|
||||
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
|
||||
xargs -n1 |
|
||||
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
|
||||
tr '\n' ' '
|
||||
)" '"$@"'
|
||||
|
||||
exec "$JAVACMD" "$@"
|
||||
@ -0,0 +1,94 @@
|
||||
@rem
|
||||
@rem Copyright 2015 the original author or authors.
|
||||
@rem
|
||||
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@rem you may not use this file except in compliance with the License.
|
||||
@rem You may obtain a copy of the License at
|
||||
@rem
|
||||
@rem https://www.apache.org/licenses/LICENSE-2.0
|
||||
@rem
|
||||
@rem Unless required by applicable law or agreed to in writing, software
|
||||
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
@rem See the License for the specific language governing permissions and
|
||||
@rem limitations under the License.
|
||||
@rem
|
||||
@rem SPDX-License-Identifier: Apache-2.0
|
||||
@rem
|
||||
|
||||
@if "%DEBUG%"=="" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%"=="" set DIRNAME=.
|
||||
@rem This is normally unused
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
|
||||
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if %ERRORLEVEL% equ 0 goto execute
|
||||
|
||||
echo. 1>&2
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
|
||||
echo. 1>&2
|
||||
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
|
||||
echo location of your Java installation. 1>&2
|
||||
|
||||
goto fail
|
||||
|
||||
:findJavaFromJavaHome
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto execute
|
||||
|
||||
echo. 1>&2
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
|
||||
echo. 1>&2
|
||||
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
|
||||
echo location of your Java installation. 1>&2
|
||||
|
||||
goto fail
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if %ERRORLEVEL% equ 0 goto mainEnd
|
||||
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
set EXIT_CODE=%ERRORLEVEL%
|
||||
if %EXIT_CODE% equ 0 set EXIT_CODE=1
|
||||
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
|
||||
exit /b %EXIT_CODE%
|
||||
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
||||
:omega
|
||||
@ -0,0 +1 @@
|
||||
rootProject.name = 'xit-framework'
|
||||
@ -0,0 +1,19 @@
|
||||
package com.example.demo;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.builder.SpringApplicationBuilder;
|
||||
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
|
||||
|
||||
@SpringBootApplication
|
||||
public class XitFrameworkApplication extends SpringBootServletInitializer {
|
||||
|
||||
@Override
|
||||
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
|
||||
return application.sources(XitFrameworkApplication.class);
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(XitFrameworkApplication.class, args);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,29 @@
|
||||
package com.example.demo.config;
|
||||
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.web.servlet.view.UrlBasedViewResolver;
|
||||
import org.springframework.web.servlet.view.tiles3.TilesConfigurer;
|
||||
import org.springframework.web.servlet.view.tiles3.TilesView;
|
||||
|
||||
@Configuration
|
||||
public class TilesConfig {
|
||||
|
||||
@Bean
|
||||
public UrlBasedViewResolver viewResolver() {
|
||||
UrlBasedViewResolver tilesViewResolver = new UrlBasedViewResolver();
|
||||
tilesViewResolver.setViewClass(TilesView.class);
|
||||
tilesViewResolver.setOrder(1);
|
||||
return tilesViewResolver;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public TilesConfigurer tilesConfigurer() {
|
||||
TilesConfigurer tilesConfigurer = new TilesConfigurer();
|
||||
tilesConfigurer.setDefinitions(
|
||||
"/WEB-INF/tiles/tiles.xml"
|
||||
);
|
||||
tilesConfigurer.setCheckRefresh(true);
|
||||
return tilesConfigurer;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,35 @@
|
||||
package com.example.demo.controller;
|
||||
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
|
||||
@Controller
|
||||
@RequestMapping("/sample")
|
||||
public class SampleController {
|
||||
|
||||
@GetMapping("/login")
|
||||
public String login() {
|
||||
return "sample/login";
|
||||
}
|
||||
|
||||
@GetMapping("/register")
|
||||
public String register() {
|
||||
return "sample/register";
|
||||
}
|
||||
|
||||
@GetMapping("/list")
|
||||
public String list() {
|
||||
return "sample/list";
|
||||
}
|
||||
|
||||
@GetMapping("/detail")
|
||||
public String detail() {
|
||||
return "sample/detail";
|
||||
}
|
||||
|
||||
@GetMapping("/tree")
|
||||
public String tree() {
|
||||
return "sample/tree";
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,69 @@
|
||||
package com.example.demo.controller;
|
||||
|
||||
import com.example.demo.domain.User;
|
||||
import com.example.demo.service.UserService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Controller
|
||||
@RequestMapping("/users")
|
||||
@RequiredArgsConstructor
|
||||
public class UserController {
|
||||
|
||||
private final UserService userService;
|
||||
|
||||
@GetMapping
|
||||
public String listUsers(Model model) {
|
||||
List<User> users = userService.findAllUsers();
|
||||
model.addAttribute("users", users);
|
||||
return "user/list";
|
||||
}
|
||||
|
||||
@GetMapping("/{id}")
|
||||
public String viewUser(@PathVariable Long id, Model model) {
|
||||
userService.findUserById(id).ifPresent(user -> model.addAttribute("user", user));
|
||||
return "user/view";
|
||||
}
|
||||
|
||||
@GetMapping("/create")
|
||||
public String createUserForm(Model model) {
|
||||
model.addAttribute("user", new User());
|
||||
return "user/form";
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
public String createUser(@ModelAttribute User user, RedirectAttributes redirectAttributes) {
|
||||
userService.createUser(user);
|
||||
redirectAttributes.addFlashAttribute("message", "User created successfully");
|
||||
return "redirect:/users";
|
||||
}
|
||||
|
||||
@GetMapping("/{id}/edit")
|
||||
public String editUserForm(@PathVariable Long id, Model model) {
|
||||
userService.findUserById(id).ifPresent(user -> model.addAttribute("user", user));
|
||||
return "user/form";
|
||||
}
|
||||
|
||||
@PostMapping("/{id}")
|
||||
public String updateUser(@PathVariable Long id, @ModelAttribute User user, RedirectAttributes redirectAttributes) {
|
||||
user.setId(id);
|
||||
userService.updateUser(user);
|
||||
redirectAttributes.addFlashAttribute("message", "User updated successfully");
|
||||
return "redirect:/users";
|
||||
}
|
||||
|
||||
@GetMapping("/{id}/delete")
|
||||
public String deleteUser(@PathVariable Long id, RedirectAttributes redirectAttributes) {
|
||||
if (userService.deleteUserById(id)) {
|
||||
redirectAttributes.addFlashAttribute("message", "User deleted successfully");
|
||||
} else {
|
||||
redirectAttributes.addFlashAttribute("error", "Failed to delete user");
|
||||
}
|
||||
return "redirect:/users";
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,24 @@
|
||||
package com.example.demo.domain;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public class User {
|
||||
private Long id;
|
||||
private String username;
|
||||
private String password;
|
||||
private String name;
|
||||
private String email;
|
||||
private String role;
|
||||
private boolean enabled;
|
||||
private LocalDateTime createdAt;
|
||||
private LocalDateTime updatedAt;
|
||||
}
|
||||
@ -0,0 +1,30 @@
|
||||
package com.example.demo.mapper;
|
||||
|
||||
import com.example.demo.domain.User;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
@Mapper
|
||||
public interface UserMapper {
|
||||
|
||||
// Find all users
|
||||
List<User> findAll();
|
||||
|
||||
// Find user by ID
|
||||
Optional<User> findById(@Param("id") Long id);
|
||||
|
||||
// Find user by username
|
||||
Optional<User> findByUsername(@Param("username") String username);
|
||||
|
||||
// Insert a new user
|
||||
int insert(User user);
|
||||
|
||||
// Update an existing user
|
||||
int update(User user);
|
||||
|
||||
// Delete a user by ID
|
||||
int deleteById(@Param("id") Long id);
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
package com.example.demo.service;
|
||||
|
||||
import com.example.demo.domain.User;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public interface UserService {
|
||||
|
||||
// Find all users
|
||||
List<User> findAllUsers();
|
||||
|
||||
// Find user by ID
|
||||
Optional<User> findUserById(Long id);
|
||||
|
||||
// Find user by username
|
||||
Optional<User> findUserByUsername(String username);
|
||||
|
||||
// Create a new user
|
||||
User createUser(User user);
|
||||
|
||||
// Update an existing user
|
||||
User updateUser(User user);
|
||||
|
||||
// Delete a user by ID
|
||||
boolean deleteUserById(Long id);
|
||||
}
|
||||
@ -0,0 +1,56 @@
|
||||
package com.example.demo.service.impl;
|
||||
|
||||
import com.example.demo.domain.User;
|
||||
import com.example.demo.mapper.UserMapper;
|
||||
import com.example.demo.service.UserService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class UserServiceImpl implements UserService {
|
||||
|
||||
private final UserMapper userMapper;
|
||||
|
||||
@Override
|
||||
public List<User> findAllUsers() {
|
||||
return userMapper.findAll();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<User> findUserById(Long id) {
|
||||
return userMapper.findById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<User> findUserByUsername(String username) {
|
||||
return userMapper.findByUsername(username);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public User createUser(User user) {
|
||||
userMapper.insert(user);
|
||||
return user;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public User updateUser(User user) {
|
||||
int updated = userMapper.update(user);
|
||||
if (updated == 0) {
|
||||
throw new RuntimeException("Failed to update user with ID: " + user.getId());
|
||||
}
|
||||
return user;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public boolean deleteUserById(Long id) {
|
||||
return userMapper.deleteById(id) > 0;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,24 @@
|
||||
# Development profile
|
||||
spring:
|
||||
config:
|
||||
activate:
|
||||
on-profile: dev
|
||||
datasource:
|
||||
driver-class-name: org.mariadb.jdbc.Driver
|
||||
url: jdbc:mariadb://211.119.124.9:4407/xitframework?characterEncoding=UTF-8&serverTimezone=Asia/Seoul
|
||||
username: egov
|
||||
password: xit1807
|
||||
hikari:
|
||||
maximum-pool-size: 20
|
||||
minimum-idle: 10
|
||||
connection-timeout: 30000
|
||||
idle-timeout: 600000
|
||||
max-lifetime: 1800000
|
||||
|
||||
# Logging configuration for development environment
|
||||
logging:
|
||||
level:
|
||||
root: INFO
|
||||
com.example.demo: DEBUG # Detailed logging for application code in dev environment
|
||||
org.springframework: INFO
|
||||
org.mybatis: INFO # Standard logging for frameworks in dev
|
||||
@ -0,0 +1,24 @@
|
||||
# Local profile
|
||||
spring:
|
||||
config:
|
||||
activate:
|
||||
on-profile: local
|
||||
datasource:
|
||||
driver-class-name: org.mariadb.jdbc.Driver
|
||||
url: jdbc:mariadb://211.119.124.9:4407/xitframework?characterEncoding=UTF-8&serverTimezone=Asia/Seoul
|
||||
username: egov
|
||||
password: xit1807
|
||||
hikari:
|
||||
maximum-pool-size: 10
|
||||
minimum-idle: 5
|
||||
connection-timeout: 30000
|
||||
idle-timeout: 600000
|
||||
max-lifetime: 1800000
|
||||
|
||||
# Logging configuration for local environment
|
||||
logging:
|
||||
level:
|
||||
root: INFO
|
||||
com.example.demo: DEBUG # More detailed logging for application code in local environment
|
||||
org.springframework: INFO
|
||||
org.mybatis: DEBUG # More detailed SQL logging for local development
|
||||
@ -0,0 +1,24 @@
|
||||
# Production profile
|
||||
spring:
|
||||
config:
|
||||
activate:
|
||||
on-profile: prod
|
||||
datasource:
|
||||
driver-class-name: org.mariadb.jdbc.Driver
|
||||
url: jdbc:mariadb://211.119.124.9:4407/xitframework?characterEncoding=UTF-8&serverTimezone=Asia/Seoul
|
||||
username: egov
|
||||
password: xit1807
|
||||
hikari:
|
||||
maximum-pool-size: 50
|
||||
minimum-idle: 20
|
||||
connection-timeout: 30000
|
||||
idle-timeout: 600000
|
||||
max-lifetime: 1800000
|
||||
|
||||
# Logging configuration for production environment
|
||||
logging:
|
||||
level:
|
||||
root: WARN # Higher threshold for root logger in production
|
||||
com.example.demo: INFO # Standard logging for application code in production
|
||||
org.springframework: WARN # Minimal framework logging in production
|
||||
org.mybatis: WARN # Minimal SQL logging in production
|
||||
@ -0,0 +1,37 @@
|
||||
# Common application properties
|
||||
spring:
|
||||
profiles:
|
||||
active: local
|
||||
mvc:
|
||||
view:
|
||||
prefix: /WEB-INF/views/
|
||||
suffix: .jsp
|
||||
devtools:
|
||||
livereload:
|
||||
enabled: true
|
||||
restart:
|
||||
enabled: true
|
||||
|
||||
# MyBatis configuration
|
||||
mybatis:
|
||||
config-location: classpath:mybatis/mybatis-config.xml
|
||||
mapper-locations: classpath:mybatis/mappers/**/*.xml
|
||||
type-aliases-package: com.example.demo.domain
|
||||
|
||||
# Server configuration
|
||||
server:
|
||||
port: 8080
|
||||
servlet:
|
||||
context-path: /
|
||||
encoding:
|
||||
charset: UTF-8
|
||||
enabled: true
|
||||
force: true
|
||||
|
||||
# Default logging configuration (overridden by profile-specific settings)
|
||||
logging:
|
||||
level:
|
||||
root: INFO
|
||||
com.example.demo: DEBUG
|
||||
org.springframework: INFO
|
||||
org.mybatis: INFO
|
||||
@ -0,0 +1,69 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.example.demo.mapper.UserMapper">
|
||||
|
||||
<!-- Result map for User -->
|
||||
<resultMap id="UserResultMap" type="com.example.demo.domain.User">
|
||||
<id property="id" column="id"/>
|
||||
<result property="username" column="username"/>
|
||||
<result property="password" column="password"/>
|
||||
<result property="name" column="name"/>
|
||||
<result property="email" column="email"/>
|
||||
<result property="role" column="role"/>
|
||||
<result property="enabled" column="enabled"/>
|
||||
<result property="createdAt" column="created_at"/>
|
||||
<result property="updatedAt" column="updated_at"/>
|
||||
</resultMap>
|
||||
|
||||
<!-- Common SQL fragments -->
|
||||
<sql id="userColumns">
|
||||
id, username, password, name, email, role, enabled, created_at, updated_at
|
||||
</sql>
|
||||
|
||||
<!-- Find all users -->
|
||||
<select id="findAll" resultMap="UserResultMap">
|
||||
SELECT <include refid="userColumns"/>
|
||||
FROM users
|
||||
ORDER BY id
|
||||
</select>
|
||||
|
||||
<!-- Find user by ID -->
|
||||
<select id="findById" resultMap="UserResultMap">
|
||||
SELECT <include refid="userColumns"/>
|
||||
FROM users
|
||||
WHERE id = #{id}
|
||||
</select>
|
||||
|
||||
<!-- Find user by username -->
|
||||
<select id="findByUsername" resultMap="UserResultMap">
|
||||
SELECT <include refid="userColumns"/>
|
||||
FROM users
|
||||
WHERE username = #{username}
|
||||
</select>
|
||||
|
||||
<!-- Insert a new user -->
|
||||
<insert id="insert" parameterType="com.example.demo.domain.User" useGeneratedKeys="true" keyProperty="id">
|
||||
INSERT INTO users (username, password, name, email, role, enabled, created_at, updated_at)
|
||||
VALUES (#{username}, #{password}, #{name}, #{email}, #{role}, #{enabled}, NOW(), NOW())
|
||||
</insert>
|
||||
|
||||
<!-- Update an existing user -->
|
||||
<update id="update" parameterType="com.example.demo.domain.User">
|
||||
UPDATE users
|
||||
SET username = #{username},
|
||||
password = #{password},
|
||||
name = #{name},
|
||||
email = #{email},
|
||||
role = #{role},
|
||||
enabled = #{enabled},
|
||||
updated_at = NOW()
|
||||
WHERE id = #{id}
|
||||
</update>
|
||||
|
||||
<!-- Delete a user by ID -->
|
||||
<delete id="deleteById">
|
||||
DELETE FROM users
|
||||
WHERE id = #{id}
|
||||
</delete>
|
||||
|
||||
</mapper>
|
||||
@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
|
||||
<configuration>
|
||||
<settings>
|
||||
<!-- Use camelCase for Java properties and snake_case for database columns -->
|
||||
<setting name="mapUnderscoreToCamelCase" value="true"/>
|
||||
<!-- Enable auto-mapping of fields -->
|
||||
<setting name="autoMappingBehavior" value="FULL"/>
|
||||
<!-- Cache prepared statements -->
|
||||
<setting name="defaultExecutorType" value="REUSE"/>
|
||||
<!-- Enable lazy loading -->
|
||||
<setting name="lazyLoadingEnabled" value="true"/>
|
||||
<!-- Log SQL statements -->
|
||||
<setting name="logImpl" value="SLF4J"/>
|
||||
</settings>
|
||||
|
||||
<typeAliases>
|
||||
<!-- Type aliases will be defined in the type-aliases-package in application.yml -->
|
||||
</typeAliases>
|
||||
</configuration>
|
||||
@ -0,0 +1,62 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN" "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
|
||||
<tiles-definitions>
|
||||
|
||||
<!-- Base Definition -->
|
||||
<definition name="base" template="/WEB-INF/views/layouts/default.jsp">
|
||||
<put-attribute name="title" value="XIT Framework" />
|
||||
<put-attribute name="header" value="/WEB-INF/views/layouts/header.jsp" />
|
||||
<put-attribute name="menu" value="/WEB-INF/views/layouts/menu.jsp" />
|
||||
<put-attribute name="content" value="" />
|
||||
<put-attribute name="footer" value="/WEB-INF/views/layouts/footer.jsp" />
|
||||
</definition>
|
||||
|
||||
<!-- Home Page -->
|
||||
<definition name="home" extends="base">
|
||||
<put-attribute name="title" value="Home - XIT Framework" />
|
||||
<put-attribute name="content" value="/WEB-INF/views/home.jsp" />
|
||||
</definition>
|
||||
|
||||
<!-- User Pages -->
|
||||
<definition name="user/list" extends="base">
|
||||
<put-attribute name="title" value="User List - XIT Framework" />
|
||||
<put-attribute name="content" value="/WEB-INF/views/user/list.jsp" />
|
||||
</definition>
|
||||
|
||||
<definition name="user/view" extends="base">
|
||||
<put-attribute name="title" value="User Details - XIT Framework" />
|
||||
<put-attribute name="content" value="/WEB-INF/views/user/view.jsp" />
|
||||
</definition>
|
||||
|
||||
<definition name="user/form" extends="base">
|
||||
<put-attribute name="title" value="User Form - XIT Framework" />
|
||||
<put-attribute name="content" value="/WEB-INF/views/user/form.jsp" />
|
||||
</definition>
|
||||
|
||||
<!-- Sample Pages -->
|
||||
<definition name="sample/login" extends="base">
|
||||
<put-attribute name="title" value="Login - XIT Framework" />
|
||||
<put-attribute name="content" value="/WEB-INF/views/sample/login.jsp" />
|
||||
</definition>
|
||||
|
||||
<definition name="sample/register" extends="base">
|
||||
<put-attribute name="title" value="Register - XIT Framework" />
|
||||
<put-attribute name="content" value="/WEB-INF/views/sample/register.jsp" />
|
||||
</definition>
|
||||
|
||||
<definition name="sample/list" extends="base">
|
||||
<put-attribute name="title" value="User List - XIT Framework" />
|
||||
<put-attribute name="content" value="/WEB-INF/views/sample/list.jsp" />
|
||||
</definition>
|
||||
|
||||
<definition name="sample/detail" extends="base">
|
||||
<put-attribute name="title" value="User Detail - XIT Framework" />
|
||||
<put-attribute name="content" value="/WEB-INF/views/sample/detail.jsp" />
|
||||
</definition>
|
||||
|
||||
<definition name="sample/tree" extends="base">
|
||||
<put-attribute name="title" value="Tree Management - XIT Framework" />
|
||||
<put-attribute name="content" value="/WEB-INF/views/sample/tree.jsp" />
|
||||
</definition>
|
||||
|
||||
</tiles-definitions>
|
||||
@ -0,0 +1,181 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles" %>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
|
||||
<title><tiles:getAsString name="title" /> | XIT Framework</title>
|
||||
<meta name="description" content="XIT Framework - Modern Admin Dashboard">
|
||||
|
||||
<!-- Favicon -->
|
||||
<!-- Favicon can be added here when available -->
|
||||
|
||||
<!-- Fonts -->
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
||||
|
||||
<!-- Icons -->
|
||||
<link rel="stylesheet" href="<c:url value='/resources/fonts/boxicons.css' />">
|
||||
<link rel="stylesheet" href="<c:url value='/resources/fonts/fontawesome.css' />">
|
||||
|
||||
<!-- Core CSS -->
|
||||
<link rel="stylesheet" href="<c:url value='/resources/css/core.css' />">
|
||||
<link rel="stylesheet" href="<c:url value='/resources/css/theme-default.css' />">
|
||||
<link rel="stylesheet" href="<c:url value='/resources/css/styles.css' />">
|
||||
|
||||
<!-- Vendors CSS -->
|
||||
<link rel="stylesheet" href="<c:url value='/resources/libs/perfect-scrollbar/perfect-scrollbar.css' />">
|
||||
|
||||
<!-- Page CSS -->
|
||||
<link rel="stylesheet" href="<c:url value='/resources/css/pages/dashboard.css' />">
|
||||
|
||||
<!-- Helper CSS -->
|
||||
<style>
|
||||
.app-container {
|
||||
display: flex;
|
||||
overflow: hidden;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
width: 260px;
|
||||
background: #fff;
|
||||
box-shadow: 0 0 15px 0 rgba(0,0,0,.05);
|
||||
z-index: 999;
|
||||
transition: all .25s ease;
|
||||
}
|
||||
|
||||
.sidebar.open {
|
||||
transform: translateX(0);
|
||||
}
|
||||
|
||||
.layout-container {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
margin-left: 260px;
|
||||
transition: margin-left .25s ease;
|
||||
}
|
||||
|
||||
.header {
|
||||
height: 70px;
|
||||
background: #fff;
|
||||
border-bottom: 1px solid #eee;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 0 1.5rem;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 99;
|
||||
}
|
||||
|
||||
.main-content {
|
||||
flex: 1;
|
||||
padding: 1.5rem;
|
||||
background: #f5f5f9;
|
||||
}
|
||||
|
||||
.footer {
|
||||
background: #fff;
|
||||
border-top: 1px solid #eee;
|
||||
padding: 1rem 0;
|
||||
}
|
||||
|
||||
@media (max-width: 992px) {
|
||||
.sidebar {
|
||||
transform: translateX(-100%);
|
||||
}
|
||||
|
||||
.layout-container {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<!-- Layout wrapper -->
|
||||
<div class="app-container">
|
||||
<!-- Menu -->
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-header">
|
||||
<a href="<c:url value='/' />" class="sidebar-brand">
|
||||
<span>XIT</span> Framework
|
||||
</a>
|
||||
<button class="sidebar-toggle d-block d-lg-none">
|
||||
<i class="bx bx-menu"></i>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<tiles:insertAttribute name="menu" />
|
||||
</aside>
|
||||
<!-- / Menu -->
|
||||
|
||||
<!-- Layout container -->
|
||||
<div class="layout-container">
|
||||
<!-- Header -->
|
||||
<header class="header">
|
||||
<button class="sidebar-toggle d-block d-lg-none">
|
||||
<i class="bx bx-menu"></i>
|
||||
</button>
|
||||
|
||||
<tiles:insertAttribute name="header" />
|
||||
</header>
|
||||
<!-- / Header -->
|
||||
|
||||
<!-- Content wrapper -->
|
||||
<div class="main-content">
|
||||
<tiles:insertAttribute name="content" />
|
||||
|
||||
<!-- Footer -->
|
||||
<footer class="footer">
|
||||
<tiles:insertAttribute name="footer" />
|
||||
</footer>
|
||||
<!-- / Footer -->
|
||||
</div>
|
||||
<!-- / Content wrapper -->
|
||||
</div>
|
||||
<!-- / Layout container -->
|
||||
</div>
|
||||
<!-- / Layout wrapper -->
|
||||
|
||||
<!-- Core JS -->
|
||||
<script src="<c:url value='/resources/libs/jquery/jquery.js' />"></script>
|
||||
<script src="<c:url value='/resources/js/bootstrap.js' />"></script>
|
||||
<script src="<c:url value='/resources/libs/perfect-scrollbar/perfect-scrollbar.js' />"></script>
|
||||
|
||||
<!-- Main JS -->
|
||||
<script src="<c:url value='/resources/js/menu.js' />"></script>
|
||||
<script src="<c:url value='/resources/js/main.js' />"></script>
|
||||
|
||||
<!-- Page JS -->
|
||||
<script>
|
||||
// Toggle sidebar on mobile
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const sidebarToggles = document.querySelectorAll('.sidebar-toggle');
|
||||
const sidebar = document.querySelector('.sidebar');
|
||||
const layoutContainer = document.querySelector('.layout-container');
|
||||
|
||||
sidebarToggles.forEach(toggle => {
|
||||
toggle.addEventListener('click', function() {
|
||||
sidebar.classList.toggle('open');
|
||||
});
|
||||
});
|
||||
|
||||
// Initialize perfect scrollbar for sidebar
|
||||
if (typeof PerfectScrollbar !== 'undefined') {
|
||||
const sidebarMenu = document.querySelector('.sidebar-menu');
|
||||
if (sidebarMenu) {
|
||||
new PerfectScrollbar(sidebarMenu);
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@ -0,0 +1,90 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="footer-content py-3">
|
||||
<div class="row g-4 py-3">
|
||||
<div class="col-12 col-md-6 col-lg-4 mb-4 mb-lg-0">
|
||||
<div class="d-flex align-items-center mb-3">
|
||||
<i class="bx bx-code-block fs-3 me-2 text-primary"></i>
|
||||
<h5 class="footer-title mb-0 fw-bold">XIT Framework</h5>
|
||||
</div>
|
||||
<p class="footer-text text-muted mb-3">A modern, responsive web application framework built with Spring Boot and modern UI components.</p>
|
||||
<div class="footer-social d-flex gap-2">
|
||||
<a href="#" class="footer-social-link btn btn-sm btn-icon btn-outline-secondary rounded-circle">
|
||||
<i class="bx bxl-github"></i>
|
||||
</a>
|
||||
<a href="#" class="footer-social-link btn btn-sm btn-icon btn-outline-secondary rounded-circle">
|
||||
<i class="bx bxl-twitter"></i>
|
||||
</a>
|
||||
<a href="#" class="footer-social-link btn btn-sm btn-icon btn-outline-secondary rounded-circle">
|
||||
<i class="bx bxl-linkedin"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-6 col-md-6 col-lg-2 mb-4 mb-lg-0">
|
||||
<h6 class="footer-title fw-semibold mb-3">Quick Links</h6>
|
||||
<ul class="footer-links list-unstyled">
|
||||
<li class="mb-2"><a href="#" class="footer-link text-decoration-none text-muted"><i class="bx bx-chevron-right me-1 text-primary"></i>Home</a></li>
|
||||
<li class="mb-2"><a href="#" class="footer-link text-decoration-none text-muted"><i class="bx bx-chevron-right me-1 text-primary"></i>Dashboard</a></li>
|
||||
<li class="mb-2"><a href="#" class="footer-link text-decoration-none text-muted"><i class="bx bx-chevron-right me-1 text-primary"></i>Users</a></li>
|
||||
<li class="mb-2"><a href="#" class="footer-link text-decoration-none text-muted"><i class="bx bx-chevron-right me-1 text-primary"></i>Settings</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-6 col-md-6 col-lg-2 mb-4 mb-lg-0">
|
||||
<h6 class="footer-title fw-semibold mb-3">Resources</h6>
|
||||
<ul class="footer-links list-unstyled">
|
||||
<li class="mb-2"><a href="#" class="footer-link text-decoration-none text-muted"><i class="bx bx-chevron-right me-1 text-primary"></i>Documentation</a></li>
|
||||
<li class="mb-2"><a href="#" class="footer-link text-decoration-none text-muted"><i class="bx bx-chevron-right me-1 text-primary"></i>API Reference</a></li>
|
||||
<li class="mb-2"><a href="#" class="footer-link text-decoration-none text-muted"><i class="bx bx-chevron-right me-1 text-primary"></i>Tutorials</a></li>
|
||||
<li class="mb-2"><a href="#" class="footer-link text-decoration-none text-muted"><i class="bx bx-chevron-right me-1 text-primary"></i>Support</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-md-6 col-lg-4">
|
||||
<h6 class="footer-title fw-semibold mb-3">Contact Us</h6>
|
||||
<ul class="footer-contact list-unstyled">
|
||||
<li class="d-flex align-items-center mb-2">
|
||||
<i class="bx bx-envelope text-primary me-2"></i>
|
||||
<a href="mailto:info@xit-framework.com" class="text-decoration-none text-muted">info@xit-framework.com</a>
|
||||
</li>
|
||||
<li class="d-flex align-items-center mb-2">
|
||||
<i class="bx bx-phone text-primary me-2"></i>
|
||||
<a href="tel:+1234567890" class="text-decoration-none text-muted">+1 (234) 567-890</a>
|
||||
</li>
|
||||
<li class="d-flex align-items-center mb-2">
|
||||
<i class="bx bx-map text-primary me-2"></i>
|
||||
<span class="text-muted">123 Tech Street, Silicon Valley, CA</span>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div class="mt-3">
|
||||
<h6 class="footer-title fw-semibold mb-3">Subscribe to Newsletter</h6>
|
||||
<div class="input-group">
|
||||
<input type="email" class="form-control" placeholder="Your email" aria-label="Your email">
|
||||
<button class="btn btn-primary" type="button">Subscribe</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr class="my-3">
|
||||
|
||||
<div class="footer-bottom py-2">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-md-6 text-center text-md-start">
|
||||
<p class="footer-copyright mb-0 text-muted small">© <%= java.time.Year.now().getValue() %> XIT Framework. All rights reserved.</p>
|
||||
</div>
|
||||
<div class="col-md-6 mt-3 mt-md-0">
|
||||
<ul class="footer-legal list-inline mb-0 text-center text-md-end">
|
||||
<li class="list-inline-item"><a href="#" class="footer-link text-decoration-none text-muted small">Privacy Policy</a></li>
|
||||
<li class="list-inline-item ms-3"><a href="#" class="footer-link text-decoration-none text-muted small">Terms of Service</a></li>
|
||||
<li class="list-inline-item ms-3"><a href="#" class="footer-link text-decoration-none text-muted small">Cookie Policy</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -0,0 +1,229 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
|
||||
<div class="header-content">
|
||||
<!-- Search -->
|
||||
<div class="header-search flex-grow-1">
|
||||
<form action="#" method="GET">
|
||||
<div class="input-group">
|
||||
<span class="input-group-text border-0 bg-transparent">
|
||||
<i class="bx bx-search fs-4 text-muted"></i>
|
||||
</span>
|
||||
<input type="text" class="form-control header-search-input border-0 shadow-none bg-transparent" placeholder="Search..." aria-label="Search">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<!-- /Search -->
|
||||
|
||||
<div class="header-actions d-flex align-items-center">
|
||||
<!-- Language -->
|
||||
<div class="dropdown header-action-item me-3">
|
||||
<a class="dropdown-toggle hide-arrow" href="javascript:void(0);" data-bs-toggle="dropdown">
|
||||
<i class="bx bx-globe fs-4"></i>
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
<li>
|
||||
<a class="dropdown-item d-flex align-items-center" href="javascript:void(0);">
|
||||
<i class="bx bx-check me-2 text-primary"></i>
|
||||
<span class="align-middle">English</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item d-flex align-items-center" href="javascript:void(0);">
|
||||
<i class="bx bx-circle me-2 text-muted"></i>
|
||||
<span class="align-middle">한국어</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item d-flex align-items-center" href="javascript:void(0);">
|
||||
<i class="bx bx-circle me-2 text-muted"></i>
|
||||
<span class="align-middle">日本語</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- /Language -->
|
||||
|
||||
<!-- Notifications -->
|
||||
<div class="dropdown header-action-item me-3">
|
||||
<a class="dropdown-toggle hide-arrow" href="javascript:void(0);" data-bs-toggle="dropdown">
|
||||
<i class="bx bx-bell fs-4"></i>
|
||||
<span class="badge bg-danger rounded-pill badge-notifications">5</span>
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-menu-end py-0" style="width: 320px; max-height: 400px; overflow-y: auto;">
|
||||
<li>
|
||||
<div class="dropdown-header d-flex justify-content-between align-items-center px-3 py-2">
|
||||
<h6 class="mb-0 fw-semibold">Notifications</h6>
|
||||
<a href="javascript:void(0);" class="text-muted fs-sm">Mark all as read</a>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="dropdown-divider m-0"></div>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item py-2" href="javascript:void(0);">
|
||||
<div class="d-flex">
|
||||
<div class="flex-shrink-0 me-3">
|
||||
<div class="avatar">
|
||||
<span class="avatar-initial rounded-circle bg-primary">
|
||||
<i class="bx bx-user"></i>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex-grow-1">
|
||||
<h6 class="mb-1 fw-semibold">New user registered</h6>
|
||||
<p class="mb-0 text-muted fs-sm">John Doe has registered</p>
|
||||
<small class="text-muted">5 min ago</small>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item py-2" href="javascript:void(0);">
|
||||
<div class="d-flex">
|
||||
<div class="flex-shrink-0 me-3">
|
||||
<div class="avatar">
|
||||
<span class="avatar-initial rounded-circle bg-success">
|
||||
<i class="bx bx-check"></i>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex-grow-1">
|
||||
<h6 class="mb-1 fw-semibold">Task completed</h6>
|
||||
<p class="mb-0 text-muted fs-sm">Project XYZ has been completed</p>
|
||||
<small class="text-muted">2 hours ago</small>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item py-2" href="javascript:void(0);">
|
||||
<div class="d-flex">
|
||||
<div class="flex-shrink-0 me-3">
|
||||
<div class="avatar">
|
||||
<span class="avatar-initial rounded-circle bg-warning">
|
||||
<i class="bx bx-error"></i>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex-grow-1">
|
||||
<h6 class="mb-1 fw-semibold">System alert</h6>
|
||||
<p class="mb-0 text-muted fs-sm">Server load is high</p>
|
||||
<small class="text-muted">3 hours ago</small>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<div class="dropdown-divider m-0"></div>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item text-center p-2" href="javascript:void(0);">
|
||||
<span class="fw-semibold">View all notifications</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- /Notifications -->
|
||||
|
||||
<!-- Quick Actions -->
|
||||
<div class="dropdown header-action-item me-3">
|
||||
<a class="dropdown-toggle hide-arrow" href="javascript:void(0);" data-bs-toggle="dropdown">
|
||||
<i class="bx bx-grid-alt fs-4"></i>
|
||||
</a>
|
||||
<div class="dropdown-menu dropdown-menu-end p-3" style="width: 280px;">
|
||||
<div class="row g-2">
|
||||
<div class="col-4">
|
||||
<a href="javascript:void(0);" class="d-flex flex-column align-items-center text-center p-2 rounded text-decoration-none">
|
||||
<i class="bx bx-user-circle fs-3 mb-1"></i>
|
||||
<span class="fs-sm">Profile</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<a href="javascript:void(0);" class="d-flex flex-column align-items-center text-center p-2 rounded text-decoration-none">
|
||||
<i class="bx bx-message-square-dots fs-3 mb-1"></i>
|
||||
<span class="fs-sm">Messages</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<a href="javascript:void(0);" class="d-flex flex-column align-items-center text-center p-2 rounded text-decoration-none">
|
||||
<i class="bx bx-calendar fs-3 mb-1"></i>
|
||||
<span class="fs-sm">Calendar</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<a href="javascript:void(0);" class="d-flex flex-column align-items-center text-center p-2 rounded text-decoration-none">
|
||||
<i class="bx bx-file fs-3 mb-1"></i>
|
||||
<span class="fs-sm">Files</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<a href="javascript:void(0);" class="d-flex flex-column align-items-center text-center p-2 rounded text-decoration-none">
|
||||
<i class="bx bx-task fs-3 mb-1"></i>
|
||||
<span class="fs-sm">Tasks</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<a href="javascript:void(0);" class="d-flex flex-column align-items-center text-center p-2 rounded text-decoration-none">
|
||||
<i class="bx bx-cog fs-3 mb-1"></i>
|
||||
<span class="fs-sm">Settings</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Quick Actions -->
|
||||
|
||||
<!-- User -->
|
||||
<div class="dropdown header-user">
|
||||
<a class="dropdown-toggle d-flex align-items-center" href="javascript:void(0);" data-bs-toggle="dropdown">
|
||||
<div class="avatar avatar-sm">
|
||||
<span class="avatar-initial rounded-circle bg-primary">
|
||||
<i class="bx bx-user"></i>
|
||||
</span>
|
||||
</div>
|
||||
<div class="header-user-info ms-2 d-none d-lg-block">
|
||||
<span class="header-user-name fw-semibold">Admin User</span>
|
||||
<small class="header-user-role text-muted">Administrator</small>
|
||||
</div>
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
<li>
|
||||
<a class="dropdown-item d-flex align-items-center" href="javascript:void(0);">
|
||||
<i class="bx bx-user me-2"></i>
|
||||
<span class="align-middle">My Profile</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item d-flex align-items-center" href="javascript:void(0);">
|
||||
<i class="bx bx-cog me-2"></i>
|
||||
<span class="align-middle">Settings</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item d-flex align-items-center" href="javascript:void(0);">
|
||||
<i class="bx bx-wallet me-2"></i>
|
||||
<span class="align-middle">Wallet</span>
|
||||
<span class="badge bg-success ms-auto">New</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<div class="dropdown-divider"></div>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item d-flex align-items-center" href="javascript:void(0);">
|
||||
<i class="bx bx-help-circle me-2"></i>
|
||||
<span class="align-middle">Help</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item d-flex align-items-center" href="javascript:void(0);">
|
||||
<i class="bx bx-power-off me-2"></i>
|
||||
<span class="align-middle">Log Out</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- /User -->
|
||||
</div>
|
||||
</div>
|
||||
@ -0,0 +1,301 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
|
||||
<div class="sidebar-menu">
|
||||
<div class="px-3 py-3">
|
||||
<div class="d-flex align-items-center justify-content-between mb-3">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="avatar avatar-sm me-2">
|
||||
<span class="avatar-initial rounded-circle bg-primary">
|
||||
<i class="bx bx-user"></i>
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
<h6 class="mb-0 fw-semibold">Admin User</h6>
|
||||
<small class="text-muted">Administrator</small>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<span class="badge bg-success">Online</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text bg-transparent border-end-0">
|
||||
<i class="bx bx-search text-muted"></i>
|
||||
</span>
|
||||
<input type="text" class="form-control border-start-0 ps-0" placeholder="Search menu...">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ul class="menu-inner p-0 m-0 list-unstyled">
|
||||
<!-- Dashboard -->
|
||||
<li class="sidebar-item mb-1">
|
||||
<a href="<c:url value='/' />" class="sidebar-link d-flex align-items-center px-3 py-2 rounded text-decoration-none">
|
||||
<i class="bx bx-home-circle me-2 fs-5"></i>
|
||||
<span>Dashboard</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<!-- User Management -->
|
||||
<li class="sidebar-item mb-1">
|
||||
<a href="javascript:void(0);" class="sidebar-link d-flex align-items-center justify-content-between px-3 py-2 rounded text-decoration-none" data-bs-toggle="collapse" data-bs-target="#userManagement" aria-expanded="false" aria-controls="userManagement">
|
||||
<div class="d-flex align-items-center">
|
||||
<i class="bx bx-user me-2 fs-5"></i>
|
||||
<span>User Management</span>
|
||||
</div>
|
||||
<i class="bx bx-chevron-down fs-5"></i>
|
||||
</a>
|
||||
<ul id="userManagement" class="sidebar-submenu collapse list-unstyled ps-4 pt-1 pb-1">
|
||||
<li class="sidebar-item mb-1">
|
||||
<a href="#" class="sidebar-link d-flex align-items-center px-3 py-2 rounded text-decoration-none">
|
||||
<i class="bx bx-group me-2"></i>
|
||||
<span>User List</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="sidebar-item mb-1">
|
||||
<a href="#" class="sidebar-link d-flex align-items-center px-3 py-2 rounded text-decoration-none">
|
||||
<i class="bx bx-user-plus me-2"></i>
|
||||
<span>Add User</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="sidebar-item mb-1">
|
||||
<a href="#" class="sidebar-link d-flex align-items-center px-3 py-2 rounded text-decoration-none">
|
||||
<i class="bx bx-shield-quarter me-2"></i>
|
||||
<span>Roles & Permissions</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<!-- Content Management -->
|
||||
<li class="sidebar-item mb-1">
|
||||
<a href="javascript:void(0);" class="sidebar-link d-flex align-items-center justify-content-between px-3 py-2 rounded text-decoration-none" data-bs-toggle="collapse" data-bs-target="#contentManagement" aria-expanded="false" aria-controls="contentManagement">
|
||||
<div class="d-flex align-items-center">
|
||||
<i class="bx bx-file me-2 fs-5"></i>
|
||||
<span>Content</span>
|
||||
</div>
|
||||
<i class="bx bx-chevron-down fs-5"></i>
|
||||
</a>
|
||||
<ul id="contentManagement" class="sidebar-submenu collapse list-unstyled ps-4 pt-1 pb-1">
|
||||
<li class="sidebar-item mb-1">
|
||||
<a href="#" class="sidebar-link d-flex align-items-center px-3 py-2 rounded text-decoration-none">
|
||||
<i class="bx bx-file-blank me-2"></i>
|
||||
<span>Pages</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="sidebar-item mb-1">
|
||||
<a href="#" class="sidebar-link d-flex align-items-center px-3 py-2 rounded text-decoration-none">
|
||||
<i class="bx bx-image me-2"></i>
|
||||
<span>Media Library</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li class="menu-header small text-uppercase px-3 py-2 mt-2">
|
||||
<span class="text-muted">Components</span>
|
||||
</li>
|
||||
|
||||
<!-- Tree Menu Example -->
|
||||
<li class="sidebar-item mb-1">
|
||||
<a href="#" class="sidebar-link d-flex align-items-center px-3 py-2 rounded text-decoration-none">
|
||||
<i class="bx bx-git-branch me-2 fs-5"></i>
|
||||
<span>Tree Menu</span>
|
||||
<span class="badge bg-primary rounded-pill ms-auto">New</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<!-- Forms Example -->
|
||||
<li class="sidebar-item mb-1">
|
||||
<a href="#" class="sidebar-link d-flex align-items-center px-3 py-2 rounded text-decoration-none">
|
||||
<i class="bx bx-detail me-2 fs-5"></i>
|
||||
<span>Forms</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<!-- Tables Example -->
|
||||
<li class="sidebar-item mb-1">
|
||||
<a href="#" class="sidebar-link d-flex align-items-center px-3 py-2 rounded text-decoration-none">
|
||||
<i class="bx bx-table me-2 fs-5"></i>
|
||||
<span>Tables</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="menu-header small text-uppercase px-3 py-2 mt-2">
|
||||
<span class="text-muted">Administration</span>
|
||||
</li>
|
||||
|
||||
<!-- System -->
|
||||
<li class="sidebar-item mb-1">
|
||||
<a href="javascript:void(0);" class="sidebar-link d-flex align-items-center justify-content-between px-3 py-2 rounded text-decoration-none" data-bs-toggle="collapse" data-bs-target="#systemMenu" aria-expanded="false" aria-controls="systemMenu">
|
||||
<div class="d-flex align-items-center">
|
||||
<i class="bx bx-cog me-2 fs-5"></i>
|
||||
<span>System</span>
|
||||
</div>
|
||||
<i class="bx bx-chevron-down fs-5"></i>
|
||||
</a>
|
||||
<ul id="systemMenu" class="sidebar-submenu collapse list-unstyled ps-4 pt-1 pb-1">
|
||||
<li class="sidebar-item mb-1">
|
||||
<a href="#" class="sidebar-link d-flex align-items-center px-3 py-2 rounded text-decoration-none">
|
||||
<i class="bx bx-wrench me-2"></i>
|
||||
<span>Settings</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="sidebar-item mb-1">
|
||||
<a href="#" class="sidebar-link d-flex align-items-center px-3 py-2 rounded text-decoration-none">
|
||||
<i class="bx bx-list-ul me-2"></i>
|
||||
<span>Logs</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="sidebar-item mb-1">
|
||||
<a href="#" class="sidebar-link d-flex align-items-center px-3 py-2 rounded text-decoration-none">
|
||||
<i class="bx bx-server me-2"></i>
|
||||
<span>Backup</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<!-- Authentication -->
|
||||
<li class="sidebar-item mb-1">
|
||||
<a href="javascript:void(0);" class="sidebar-link d-flex align-items-center justify-content-between px-3 py-2 rounded text-decoration-none" data-bs-toggle="collapse" data-bs-target="#authMenu" aria-expanded="false" aria-controls="authMenu">
|
||||
<div class="d-flex align-items-center">
|
||||
<i class="bx bx-lock-open-alt me-2 fs-5"></i>
|
||||
<span>Authentication</span>
|
||||
</div>
|
||||
<i class="bx bx-chevron-down fs-5"></i>
|
||||
</a>
|
||||
<ul id="authMenu" class="sidebar-submenu collapse list-unstyled ps-4 pt-1 pb-1">
|
||||
<li class="sidebar-item mb-1">
|
||||
<a href="#" class="sidebar-link d-flex align-items-center px-3 py-2 rounded text-decoration-none">
|
||||
<i class="bx bx-log-in me-2"></i>
|
||||
<span>Login</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="sidebar-item mb-1">
|
||||
<a href="#" class="sidebar-link d-flex align-items-center px-3 py-2 rounded text-decoration-none">
|
||||
<i class="bx bx-user-plus me-2"></i>
|
||||
<span>Register</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="sidebar-item mb-1">
|
||||
<a href="#" class="sidebar-link d-flex align-items-center px-3 py-2 rounded text-decoration-none">
|
||||
<i class="bx bx-key me-2"></i>
|
||||
<span>Forgot Password</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div class="px-3 py-4 mt-3">
|
||||
<div class="card bg-primary text-white">
|
||||
<div class="card-body p-3">
|
||||
<h6 class="card-title mb-2">Need Help?</h6>
|
||||
<p class="card-text small mb-2">Check our documentation for detailed instructions and examples.</p>
|
||||
<a href="#" class="btn btn-sm btn-light text-primary fw-semibold">View Documentation</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// Add active class to current menu item
|
||||
const currentPath = window.location.pathname;
|
||||
const menuLinks = document.querySelectorAll('.sidebar-link');
|
||||
|
||||
menuLinks.forEach(link => {
|
||||
const href = link.getAttribute('href');
|
||||
if (href && href !== 'javascript:void(0);' && currentPath.includes(href)) {
|
||||
link.classList.add('active');
|
||||
|
||||
// If it's in a submenu, expand the parent
|
||||
const submenu = link.closest('.sidebar-submenu');
|
||||
if (submenu) {
|
||||
submenu.classList.add('show');
|
||||
const parentToggle = document.querySelector(`[data-bs-target="#${submenu.id}"]`);
|
||||
if (parentToggle) {
|
||||
parentToggle.setAttribute('aria-expanded', 'true');
|
||||
parentToggle.classList.add('active');
|
||||
parentToggle.querySelector('.bx-chevron-down').classList.replace('bx-chevron-down', 'bx-chevron-up');
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Toggle submenu on click
|
||||
const menuToggles = document.querySelectorAll('.sidebar-link[data-bs-toggle="collapse"]');
|
||||
menuToggles.forEach(toggle => {
|
||||
toggle.addEventListener('click', function() {
|
||||
const isExpanded = this.getAttribute('aria-expanded') === 'true';
|
||||
const icon = this.querySelector('.bx-chevron-down, .bx-chevron-up');
|
||||
|
||||
if (isExpanded) {
|
||||
icon.classList.replace('bx-chevron-up', 'bx-chevron-down');
|
||||
} else {
|
||||
icon.classList.replace('bx-chevron-down', 'bx-chevron-up');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Search functionality
|
||||
const searchInput = document.querySelector('.sidebar-menu input[type="text"]');
|
||||
if (searchInput) {
|
||||
searchInput.addEventListener('keyup', function() {
|
||||
const searchTerm = this.value.toLowerCase();
|
||||
const menuItems = document.querySelectorAll('.sidebar-item');
|
||||
|
||||
menuItems.forEach(item => {
|
||||
const text = item.textContent.toLowerCase();
|
||||
const submenu = item.querySelector('.sidebar-submenu');
|
||||
const isSubmenuItem = item.closest('.sidebar-submenu') !== null;
|
||||
|
||||
if (text.includes(searchTerm)) {
|
||||
item.style.display = '';
|
||||
|
||||
// If it's a parent with submenu, expand it
|
||||
if (submenu && searchTerm.length > 0) {
|
||||
submenu.classList.add('show');
|
||||
const toggle = item.querySelector('[data-bs-toggle="collapse"]');
|
||||
if (toggle) {
|
||||
toggle.setAttribute('aria-expanded', 'true');
|
||||
toggle.querySelector('.bx-chevron-down')?.classList.replace('bx-chevron-down', 'bx-chevron-up');
|
||||
}
|
||||
}
|
||||
|
||||
// If it's a submenu item, make sure parent is visible
|
||||
if (isSubmenuItem) {
|
||||
const parentMenu = item.closest('.sidebar-item');
|
||||
if (parentMenu) {
|
||||
parentMenu.style.display = '';
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Don't hide submenu items if we're filtering
|
||||
if (!isSubmenuItem || searchTerm.length === 0) {
|
||||
item.style.display = 'none';
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Show/hide section headers based on visible items
|
||||
const sectionHeaders = document.querySelectorAll('.menu-header');
|
||||
sectionHeaders.forEach(header => {
|
||||
let nextEl = header.nextElementSibling;
|
||||
let hasVisibleItems = false;
|
||||
|
||||
while (nextEl && !nextEl.classList.contains('menu-header')) {
|
||||
if (nextEl.style.display !== 'none' && nextEl.classList.contains('sidebar-item')) {
|
||||
hasVisibleItems = true;
|
||||
break;
|
||||
}
|
||||
nextEl = nextEl.nextElementSibling;
|
||||
}
|
||||
|
||||
header.style.display = hasVisibleItems || searchTerm.length === 0 ? '' : 'none';
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
</script>
|
||||
@ -0,0 +1,151 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
|
||||
<!-- Content -->
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
<h4 class="py-3 mb-4"><span class="text-muted fw-light">User Management / <a href="<c:url value='/sample/list'/>">Users</a> /</span> John Doe</h4>
|
||||
|
||||
<div class="row">
|
||||
<!-- User Sidebar -->
|
||||
<div class="col-xl-4 col-lg-5 col-md-5 order-1 order-md-0">
|
||||
<!-- User Card -->
|
||||
<div class="card mb-4">
|
||||
<div class="card-body">
|
||||
<div class="user-avatar-section">
|
||||
<div class="d-flex align-items-center flex-column">
|
||||
<img class="img-fluid rounded mb-3 pt-1 mt-4" src="<c:url value='/resources/sneat-bootstrap-html-admin-template-v2.0.0/sneat-bootstrap-html-admin-template/assets/img/avatars/1.png'/>" height="100" width="100" alt="User avatar" />
|
||||
<div class="user-info text-center">
|
||||
<h4 class="mb-2">John Doe</h4>
|
||||
<span class="badge bg-label-primary">Admin</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h5 class="mt-4 small text-uppercase text-muted">Details</h5>
|
||||
<div class="info-container">
|
||||
<ul class="list-unstyled">
|
||||
<li class="mb-2">
|
||||
<span class="fw-medium me-1">Username:</span>
|
||||
<span>johndoe</span>
|
||||
</li>
|
||||
<li class="mb-2 pt-1">
|
||||
<span class="fw-medium me-1">Email:</span>
|
||||
<span>john.doe@example.com</span>
|
||||
</li>
|
||||
<li class="mb-2 pt-1">
|
||||
<span class="fw-medium me-1">Status:</span>
|
||||
<span class="badge bg-label-success">Active</span>
|
||||
</li>
|
||||
<li class="mb-2 pt-1">
|
||||
<span class="fw-medium me-1">Role:</span>
|
||||
<span>Admin</span>
|
||||
</li>
|
||||
<li class="mb-2 pt-1">
|
||||
<span class="fw-medium me-1">Contact:</span>
|
||||
<span>(123) 456-7890</span>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="d-flex justify-content-center">
|
||||
<a href="javascript:;" class="btn btn-primary me-3">Edit</a>
|
||||
<a href="javascript:;" class="btn btn-label-danger">Suspend</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /User Card -->
|
||||
</div>
|
||||
<!--/ User Sidebar -->
|
||||
|
||||
<!-- User Content -->
|
||||
<div class="col-xl-8 col-lg-7 col-md-7 order-0 order-md-1">
|
||||
<!-- User Pills -->
|
||||
<ul class="nav nav-pills flex-column flex-md-row mb-4">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link active" href="javascript:void(0);"><i class="bx bx-user me-1"></i>Account</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="javascript:void(0);"><i class="bx bx-lock-alt me-1"></i>Security</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="javascript:void(0);"><i class="bx bx-bell me-1"></i>Notifications</a>
|
||||
</li>
|
||||
</ul>
|
||||
<!--/ User Pills -->
|
||||
|
||||
<!-- Projects table -->
|
||||
<div class="card mb-4">
|
||||
<h5 class="card-header">User's Projects</h5>
|
||||
<div class="table-responsive mb-3">
|
||||
<table class="table datatable-project border-top">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Project</th>
|
||||
<th>Total Task</th>
|
||||
<th>Progress</th>
|
||||
<th>Hours</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="d-flex justify-content-start align-items-center">
|
||||
<div class="avatar-wrapper">
|
||||
<div class="avatar avatar-sm me-3">
|
||||
<span class="avatar-initial rounded-circle bg-label-primary">
|
||||
<i class="bx bx-pie-chart-alt"></i>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex flex-column">
|
||||
<h6 class="mb-0 text-truncate">Dashboard UI</h6>
|
||||
<small class="text-truncate text-muted">Ecommerce</small>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td>134/240</td>
|
||||
<td>
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="progress w-100 me-3" style="height: 6px;">
|
||||
<div class="progress-bar" style="width: 65%; background-color: #696cff;" role="progressbar" aria-valuenow="65" aria-valuemin="0" aria-valuemax="100"></div>
|
||||
</div>
|
||||
<span>65%</span>
|
||||
</div>
|
||||
</td>
|
||||
<td>124h</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="d-flex justify-content-start align-items-center">
|
||||
<div class="avatar-wrapper">
|
||||
<div class="avatar avatar-sm me-3">
|
||||
<span class="avatar-initial rounded-circle bg-label-success">
|
||||
<i class="bx bx-line-chart"></i>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex flex-column">
|
||||
<h6 class="mb-0 text-truncate">App Design</h6>
|
||||
<small class="text-truncate text-muted">UI/UX Project</small>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td>32/100</td>
|
||||
<td>
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="progress w-100 me-3" style="height: 6px;">
|
||||
<div class="progress-bar" style="width: 32%; background-color: #696cff;" role="progressbar" aria-valuenow="32" aria-valuemin="0" aria-valuemax="100"></div>
|
||||
</div>
|
||||
<span>32%</span>
|
||||
</div>
|
||||
</td>
|
||||
<td>42h</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Projects table -->
|
||||
</div>
|
||||
<!--/ User Content -->
|
||||
</div>
|
||||
</div>
|
||||
<!-- / Content -->
|
||||
@ -0,0 +1,116 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
|
||||
<!-- Content -->
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
<h4 class="py-3 mb-4"><span class="text-muted fw-light">User Management /</span> Users</h4>
|
||||
|
||||
<!-- Users List Table -->
|
||||
<div class="card">
|
||||
<div class="card-header border-bottom">
|
||||
<h5 class="card-title">Users</h5>
|
||||
<div class="d-flex justify-content-between align-items-center row py-3 gap-3 gap-md-0">
|
||||
<div class="col-md-4 user_role"></div>
|
||||
<div class="col-md-4 user_plan"></div>
|
||||
<div class="col-md-4 user_status"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-datatable table-responsive">
|
||||
<div class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
<div class="row mx-2">
|
||||
<div class="col-md-2">
|
||||
<div class="me-3">
|
||||
<div class="dataTables_length" id="DataTables_Table_0_length">
|
||||
<label>
|
||||
<select name="DataTables_Table_0_length" aria-controls="DataTables_Table_0" class="form-select">
|
||||
<option value="10">10</option>
|
||||
<option value="25">25</option>
|
||||
<option value="50">50</option>
|
||||
<option value="100">100</option>
|
||||
</select>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
<div class="dt-action-buttons text-xl-end text-lg-start text-md-end text-start d-flex align-items-center justify-content-end flex-md-row flex-column mb-3 mb-md-0">
|
||||
<div class="me-4">
|
||||
<div id="DataTables_Table_0_filter" class="dataTables_filter">
|
||||
<label>
|
||||
<input type="search" class="form-control" placeholder="Search.." aria-controls="DataTables_Table_0">
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="dt-buttons">
|
||||
<button class="dt-button add-new btn btn-primary" tabindex="0" aria-controls="DataTables_Table_0" type="button" onclick="window.location.href='<c:url value='/sample/detail'/>'">
|
||||
<span>
|
||||
<i class="bx bx-plus me-0 me-sm-1"></i>
|
||||
<span class="d-none d-sm-inline-block">Add New User</span>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<table class="datatables-users table border-top dataTable no-footer dtr-column" id="DataTables_Table_0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>User</th>
|
||||
<th>Role</th>
|
||||
<th>Plan</th>
|
||||
<th>Status</th>
|
||||
<th>Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="odd">
|
||||
<td class="sorting_1">
|
||||
<div class="d-flex justify-content-start align-items-center user-name">
|
||||
<div class="avatar-wrapper">
|
||||
<div class="avatar avatar-sm me-3">
|
||||
<img src="<c:url value='/resources/sneat-bootstrap-html-admin-template-v2.0.0/sneat-bootstrap-html-admin-template/assets/img/avatars/1.png'/>" alt="Avatar" class="rounded-circle">
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex flex-column">
|
||||
<a href="<c:url value='/sample/detail'/>" class="text-body text-truncate">
|
||||
<span class="fw-medium">John Doe</span>
|
||||
</a>
|
||||
<small class="text-muted">john.doe@example.com</small>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<span class="text-truncate d-flex align-items-center">
|
||||
<span class="badge badge-center rounded-pill bg-label-primary w-px-30 h-px-30 me-2">
|
||||
<i class="bx bx-user bx-xs"></i>
|
||||
</span>
|
||||
Admin
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<span class="fw-medium">Enterprise</span>
|
||||
</td>
|
||||
<td>
|
||||
<span class="badge bg-label-success">Active</span>
|
||||
</td>
|
||||
<td>
|
||||
<div class="d-inline-block text-nowrap">
|
||||
<button class="btn btn-sm btn-icon" onclick="window.location.href='<c:url value='/sample/detail'/>'">
|
||||
<i class="bx bx-show mx-1"></i>
|
||||
</button>
|
||||
<button class="btn btn-sm btn-icon" onclick="window.location.href='<c:url value='/sample/detail'/>'">
|
||||
<i class="bx bx-edit mx-1"></i>
|
||||
</button>
|
||||
<button class="btn btn-sm btn-icon delete-record">
|
||||
<i class="bx bx-trash mx-1"></i>
|
||||
</button>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- / Content -->
|
||||
@ -0,0 +1,142 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
|
||||
<div class="container-xxl">
|
||||
<div class="authentication-wrapper authentication-basic container-p-y">
|
||||
<div class="authentication-inner">
|
||||
<!-- Register -->
|
||||
<div class="card px-sm-6 px-0">
|
||||
<div class="card-body">
|
||||
<!-- Logo -->
|
||||
<div class="app-brand justify-content-center">
|
||||
<a href="<c:url value='/sample/list'/>" class="app-brand-link gap-2">
|
||||
<span class="app-brand-logo demo">
|
||||
<svg
|
||||
width="25"
|
||||
viewBox="0 0 25 42"
|
||||
version="1.1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<path
|
||||
d="M13.7918663,0.358365126 L3.39788168,7.44174259 C0.566865006,9.69408886 -0.379795268,12.4788597 0.557900856,15.7960551 C0.68998853,16.2305145 1.09562888,17.7872135 3.12357076,19.2293357 C3.8146334,19.7207684 5.32369333,20.3834223 7.65075054,21.2172976 L7.59773219,21.2525164 L2.63468769,24.5493413 C0.445452254,26.3002124 0.0884951797,28.5083815 1.56381646,31.1738486 C2.83770406,32.8170431 5.20850219,33.2640127 7.09180128,32.5391577 C8.347334,32.0559211 11.4559176,30.0011079 16.4175519,26.3747182 C18.0338572,24.4997857 18.6973423,22.4544883 18.4080071,20.2388261 C17.963753,17.5346866 16.1776345,15.5799961 13.0496516,14.3747546 L10.9194936,13.4715819 L18.6192054,7.984237 L13.7918663,0.358365126 Z"
|
||||
id="path-1"></path>
|
||||
<path
|
||||
d="M5.47320593,6.00457225 C4.05321814,8.216144 4.36334763,10.0722806 6.40359441,11.5729822 C8.61520715,12.571656 10.0999176,13.2171421 10.8577257,13.5094407 L15.5088241,14.433041 L18.6192054,7.984237 C15.5364148,3.11535317 13.9273018,0.573395879 13.7918663,0.358365126 C13.5790555,0.511491653 10.8061687,2.3935607 5.47320593,6.00457225 Z"
|
||||
id="path-3"></path>
|
||||
<path
|
||||
d="M7.50063644,21.2294429 L12.3234468,23.3159332 C14.1688022,24.7579751 14.397098,26.4880487 13.008334,28.506154 C11.6195701,30.5242593 10.3099883,31.790241 9.07958868,32.3040991 C5.78142938,33.4346997 4.13234973,34 4.13234973,34 C4.13234973,34 2.75489982,33.0538207 2.37032616e-14,31.1614621 C-0.55822714,27.8186216 -0.55822714,26.0572515 -4.05231404e-15,25.8773518 C0.83734071,25.6075023 2.77988457,22.8248993 3.3049379,22.52991 C3.65497346,22.3332504 5.05353963,21.8997614 7.50063644,21.2294429 Z"
|
||||
id="path-4"></path>
|
||||
<path
|
||||
d="M20.6,7.13333333 L25.6,13.8 C26.2627417,14.6836556 26.0836556,15.9372583 25.2,16.6 C24.8538077,16.8596443 24.4327404,17 24,17 L14,17 C12.8954305,17 12,16.1045695 12,15 C12,14.5672596 12.1403557,14.1461923 12.4,13.8 L17.4,7.13333333 C18.0627417,6.24967773 19.3163444,6.07059163 20.2,6.73333333 C20.3516113,6.84704183 20.4862915,6.981722 20.6,7.13333333 Z"
|
||||
id="path-5"></path>
|
||||
</defs>
|
||||
<g id="g-app-brand" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="Brand-Logo" transform="translate(-27.000000, -15.000000)">
|
||||
<g id="Icon" transform="translate(27.000000, 15.000000)">
|
||||
<g id="Mask" transform="translate(0.000000, 8.000000)">
|
||||
<mask id="mask-2" fill="white">
|
||||
<use xlink:href="#path-1"></use>
|
||||
</mask>
|
||||
<use fill="#696cff" xlink:href="#path-1"></use>
|
||||
<g id="Path-3" mask="url(#mask-2)">
|
||||
<use fill="#696cff" xlink:href="#path-3"></use>
|
||||
<use fill-opacity="0.2" fill="#FFFFFF" xlink:href="#path-3"></use>
|
||||
</g>
|
||||
<g id="Path-4" mask="url(#mask-2)">
|
||||
<use fill="#696cff" xlink:href="#path-4"></use>
|
||||
<use fill-opacity="0.2" fill="#FFFFFF" xlink:href="#path-4"></use>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="Triangle"
|
||||
transform="translate(19.000000, 11.000000) rotate(-300.000000) translate(-19.000000, -11.000000) ">
|
||||
<use fill="#696cff" xlink:href="#path-5"></use>
|
||||
<use fill-opacity="0.2" fill="#FFFFFF" xlink:href="#path-5"></use>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
</span>
|
||||
<span class="app-brand-text demo text-heading fw-bold">XIT Framework</span>
|
||||
</a>
|
||||
</div>
|
||||
<!-- /Logo -->
|
||||
<h4 class="mb-1">Welcome to XIT Framework! 👋</h4>
|
||||
<p class="mb-6">Please sign-in to your account and start the adventure</p>
|
||||
|
||||
<form id="formAuthentication" class="mb-6" action="<c:url value='/sample/list'/>" method="GET">
|
||||
<div class="mb-6">
|
||||
<label for="email" class="form-label">Email or Username</label>
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
id="email"
|
||||
name="email-username"
|
||||
placeholder="Enter your email or username"
|
||||
autofocus />
|
||||
</div>
|
||||
<div class="mb-6 form-password-toggle">
|
||||
<label class="form-label" for="password">Password</label>
|
||||
<div class="input-group input-group-merge">
|
||||
<input
|
||||
type="password"
|
||||
id="password"
|
||||
class="form-control"
|
||||
name="password"
|
||||
placeholder="············"
|
||||
aria-describedby="password" />
|
||||
<span class="input-group-text cursor-pointer"><i class="bx bx-hide"></i></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-8">
|
||||
<div class="d-flex justify-content-between mt-8">
|
||||
<div class="form-check mb-0 ms-2">
|
||||
<input class="form-check-input" type="checkbox" id="remember-me" />
|
||||
<label class="form-check-label" for="remember-me"> Remember Me </label>
|
||||
</div>
|
||||
<a href="#">
|
||||
<span>Forgot Password?</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-6">
|
||||
<button class="btn btn-primary d-grid w-100" type="submit">Login</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<p class="text-center">
|
||||
<span>New on our platform?</span>
|
||||
<a href="<c:url value='/sample/register'/>">
|
||||
<span>Create an account</span>
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<div class="divider my-6">
|
||||
<div class="divider-text">or</div>
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-center">
|
||||
<a href="javascript:;" class="btn btn-sm btn-icon rounded-circle btn-text-facebook me-1_5">
|
||||
<i class="bx bxl-facebook-circle"></i>
|
||||
</a>
|
||||
|
||||
<a href="javascript:;" class="btn btn-sm btn-icon rounded-circle btn-text-twitter me-1_5">
|
||||
<i class="tf-icons bx bxl-twitter"></i>
|
||||
</a>
|
||||
|
||||
<a href="javascript:;" class="btn btn-sm btn-icon rounded-circle btn-text-github me-1_5">
|
||||
<i class="bx bxl-github"></i>
|
||||
</a>
|
||||
|
||||
<a href="javascript:;" class="btn btn-sm btn-icon rounded-circle btn-text-google-plus">
|
||||
<i class="tf-icons bx bxl-google"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Register -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -0,0 +1,143 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
|
||||
<div class="container-xxl">
|
||||
<div class="authentication-wrapper authentication-basic container-p-y">
|
||||
<div class="authentication-inner">
|
||||
<!-- Register Card -->
|
||||
<div class="card px-sm-6 px-0">
|
||||
<div class="card-body">
|
||||
<!-- Logo -->
|
||||
<div class="app-brand justify-content-center">
|
||||
<a href="<c:url value='/sample/list'/>" class="app-brand-link gap-2">
|
||||
<span class="app-brand-logo demo">
|
||||
<svg
|
||||
width="25"
|
||||
viewBox="0 0 25 42"
|
||||
version="1.1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<path
|
||||
d="M13.7918663,0.358365126 L3.39788168,7.44174259 C0.566865006,9.69408886 -0.379795268,12.4788597 0.557900856,15.7960551 C0.68998853,16.2305145 1.09562888,17.7872135 3.12357076,19.2293357 C3.8146334,19.7207684 5.32369333,20.3834223 7.65075054,21.2172976 L7.59773219,21.2525164 L2.63468769,24.5493413 C0.445452254,26.3002124 0.0884951797,28.5083815 1.56381646,31.1738486 C2.83770406,32.8170431 5.20850219,33.2640127 7.09180128,32.5391577 C8.347334,32.0559211 11.4559176,30.0011079 16.4175519,26.3747182 C18.0338572,24.4997857 18.6973423,22.4544883 18.4080071,20.2388261 C17.963753,17.5346866 16.1776345,15.5799961 13.0496516,14.3747546 L10.9194936,13.4715819 L18.6192054,7.984237 L13.7918663,0.358365126 Z"
|
||||
id="path-1"></path>
|
||||
<path
|
||||
d="M5.47320593,6.00457225 C4.05321814,8.216144 4.36334763,10.0722806 6.40359441,11.5729822 C8.61520715,12.571656 10.0999176,13.2171421 10.8577257,13.5094407 L15.5088241,14.433041 L18.6192054,7.984237 C15.5364148,3.11535317 13.9273018,0.573395879 13.7918663,0.358365126 C13.5790555,0.511491653 10.8061687,2.3935607 5.47320593,6.00457225 Z"
|
||||
id="path-3"></path>
|
||||
<path
|
||||
d="M7.50063644,21.2294429 L12.3234468,23.3159332 C14.1688022,24.7579751 14.397098,26.4880487 13.008334,28.506154 C11.6195701,30.5242593 10.3099883,31.790241 9.07958868,32.3040991 C5.78142938,33.4346997 4.13234973,34 4.13234973,34 C4.13234973,34 2.75489982,33.0538207 2.37032616e-14,31.1614621 C-0.55822714,27.8186216 -0.55822714,26.0572515 -4.05231404e-15,25.8773518 C0.83734071,25.6075023 2.77988457,22.8248993 3.3049379,22.52991 C3.65497346,22.3332504 5.05353963,21.8997614 7.50063644,21.2294429 Z"
|
||||
id="path-4"></path>
|
||||
<path
|
||||
d="M20.6,7.13333333 L25.6,13.8 C26.2627417,14.6836556 26.0836556,15.9372583 25.2,16.6 C24.8538077,16.8596443 24.4327404,17 24,17 L14,17 C12.8954305,17 12,16.1045695 12,15 C12,14.5672596 12.1403557,14.1461923 12.4,13.8 L17.4,7.13333333 C18.0627417,6.24967773 19.3163444,6.07059163 20.2,6.73333333 C20.3516113,6.84704183 20.4862915,6.981722 20.6,7.13333333 Z"
|
||||
id="path-5"></path>
|
||||
</defs>
|
||||
<g id="g-app-brand" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="Brand-Logo" transform="translate(-27.000000, -15.000000)">
|
||||
<g id="Icon" transform="translate(27.000000, 15.000000)">
|
||||
<g id="Mask" transform="translate(0.000000, 8.000000)">
|
||||
<mask id="mask-2" fill="white">
|
||||
<use xlink:href="#path-1"></use>
|
||||
</mask>
|
||||
<use fill="#696cff" xlink:href="#path-1"></use>
|
||||
<g id="Path-3" mask="url(#mask-2)">
|
||||
<use fill="#696cff" xlink:href="#path-3"></use>
|
||||
<use fill-opacity="0.2" fill="#FFFFFF" xlink:href="#path-3"></use>
|
||||
</g>
|
||||
<g id="Path-4" mask="url(#mask-2)">
|
||||
<use fill="#696cff" xlink:href="#path-4"></use>
|
||||
<use fill-opacity="0.2" fill="#FFFFFF" xlink:href="#path-4"></use>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="Triangle"
|
||||
transform="translate(19.000000, 11.000000) rotate(-300.000000) translate(-19.000000, -11.000000) ">
|
||||
<use fill="#696cff" xlink:href="#path-5"></use>
|
||||
<use fill-opacity="0.2" fill="#FFFFFF" xlink:href="#path-5"></use>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
</span>
|
||||
<span class="app-brand-text demo text-heading fw-bold">XIT Framework</span>
|
||||
</a>
|
||||
</div>
|
||||
<!-- /Logo -->
|
||||
<h4 class="mb-1">Adventure starts here 🚀</h4>
|
||||
<p class="mb-6">Make your app management easy and fun!</p>
|
||||
|
||||
<form id="formAuthentication" class="mb-6" action="<c:url value='/sample/list'/>" method="GET">
|
||||
<div class="mb-6">
|
||||
<label for="username" class="form-label">Username</label>
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
id="username"
|
||||
name="username"
|
||||
placeholder="Enter your username"
|
||||
autofocus />
|
||||
</div>
|
||||
<div class="mb-6">
|
||||
<label for="email" class="form-label">Email</label>
|
||||
<input type="text" class="form-control" id="email" name="email" placeholder="Enter your email" />
|
||||
</div>
|
||||
<div class="mb-6 form-password-toggle">
|
||||
<label class="form-label" for="password">Password</label>
|
||||
<div class="input-group input-group-merge">
|
||||
<input
|
||||
type="password"
|
||||
id="password"
|
||||
class="form-control"
|
||||
name="password"
|
||||
placeholder="············"
|
||||
aria-describedby="password" />
|
||||
<span class="input-group-text cursor-pointer"><i class="bx bx-hide"></i></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-6">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" id="terms-conditions" name="terms" />
|
||||
<label class="form-check-label" for="terms-conditions">
|
||||
I agree to
|
||||
<a href="javascript:void(0);">privacy policy & terms</a>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<button class="btn btn-primary d-grid w-100">Sign up</button>
|
||||
</form>
|
||||
|
||||
<p class="text-center">
|
||||
<span>Already have an account?</span>
|
||||
<a href="<c:url value='/sample/login'/>">
|
||||
<span>Sign in instead</span>
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<div class="divider my-6">
|
||||
<div class="divider-text">or</div>
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-center">
|
||||
<a href="javascript:;" class="btn btn-sm btn-icon rounded-circle btn-text-facebook me-1_5">
|
||||
<i class="bx bxl-facebook-circle"></i>
|
||||
</a>
|
||||
|
||||
<a href="javascript:;" class="btn btn-sm btn-icon rounded-circle btn-text-twitter me-1_5">
|
||||
<i class="tf-icons bx bxl-twitter"></i>
|
||||
</a>
|
||||
|
||||
<a href="javascript:;" class="btn btn-sm btn-icon rounded-circle btn-text-github me-1_5">
|
||||
<i class="bx bxl-github"></i>
|
||||
</a>
|
||||
|
||||
<a href="javascript:;" class="btn btn-sm btn-icon rounded-circle btn-text-google-plus">
|
||||
<i class="tf-icons bx bxl-google"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Register Card -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -0,0 +1,170 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
|
||||
<!-- Content -->
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
<h4 class="py-3 mb-4"><span class="text-muted fw-light">Tree Management</span></h4>
|
||||
|
||||
<div class="row">
|
||||
<!-- JSTree Basic -->
|
||||
<div class="col-md-6 col-12">
|
||||
<div class="card mb-4">
|
||||
<h5 class="card-header">Basic Tree</h5>
|
||||
<div class="card-body">
|
||||
<div id="jstree-basic">
|
||||
<ul>
|
||||
<li data-jstree='{"icon" : "bx bx-folder"}'>
|
||||
Root node
|
||||
<ul>
|
||||
<li data-jstree='{"icon" : "bx bx-folder"}'>
|
||||
Child node 1
|
||||
<ul>
|
||||
<li data-jstree='{"icon" : "bx bx-file"}'>Grandchild node 1</li>
|
||||
<li data-jstree='{"icon" : "bx bx-file"}'>Grandchild node 2</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li data-jstree='{"icon" : "bx bx-folder"}'>
|
||||
Child node 2
|
||||
<ul>
|
||||
<li data-jstree='{"icon" : "bx bx-file"}'>Grandchild node 3</li>
|
||||
<li data-jstree='{"icon" : "bx bx-file"}'>Grandchild node 4</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /JSTree Basic -->
|
||||
|
||||
<!-- JSTree Contextmenu -->
|
||||
<div class="col-md-6 col-12">
|
||||
<div class="card mb-4">
|
||||
<h5 class="card-header">Contextmenu Tree</h5>
|
||||
<div class="card-body">
|
||||
<div id="jstree-contextmenu">
|
||||
<ul>
|
||||
<li data-jstree='{"icon" : "bx bx-folder"}'>
|
||||
Root node
|
||||
<ul>
|
||||
<li data-jstree='{"icon" : "bx bx-folder"}'>
|
||||
Child node 1
|
||||
<ul>
|
||||
<li data-jstree='{"icon" : "bx bx-file"}'>Grandchild node 1</li>
|
||||
<li data-jstree='{"icon" : "bx bx-file"}'>Grandchild node 2</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li data-jstree='{"icon" : "bx bx-folder"}'>
|
||||
Child node 2
|
||||
<ul>
|
||||
<li data-jstree='{"icon" : "bx bx-file"}'>Grandchild node 3</li>
|
||||
<li data-jstree='{"icon" : "bx bx-file"}'>Grandchild node 4</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /JSTree Contextmenu -->
|
||||
|
||||
<!-- JSTree Drag & Drop -->
|
||||
<div class="col-md-6 col-12">
|
||||
<div class="card mb-4">
|
||||
<h5 class="card-header">Drag & Drop Tree</h5>
|
||||
<div class="card-body">
|
||||
<div id="jstree-drag-drop">
|
||||
<ul>
|
||||
<li data-jstree='{"icon" : "bx bx-folder"}'>
|
||||
Root node
|
||||
<ul>
|
||||
<li data-jstree='{"icon" : "bx bx-folder"}'>
|
||||
Child node 1
|
||||
<ul>
|
||||
<li data-jstree='{"icon" : "bx bx-file"}'>Grandchild node 1</li>
|
||||
<li data-jstree='{"icon" : "bx bx-file"}'>Grandchild node 2</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li data-jstree='{"icon" : "bx bx-folder"}'>
|
||||
Child node 2
|
||||
<ul>
|
||||
<li data-jstree='{"icon" : "bx bx-file"}'>Grandchild node 3</li>
|
||||
<li data-jstree='{"icon" : "bx bx-file"}'>Grandchild node 4</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /JSTree Drag & Drop -->
|
||||
|
||||
<!-- JSTree Checkbox -->
|
||||
<div class="col-md-6 col-12">
|
||||
<div class="card mb-4">
|
||||
<h5 class="card-header">Checkbox Tree</h5>
|
||||
<div class="card-body">
|
||||
<div id="jstree-checkbox">
|
||||
<ul>
|
||||
<li data-jstree='{"icon" : "bx bx-folder"}'>
|
||||
Root node
|
||||
<ul>
|
||||
<li data-jstree='{"icon" : "bx bx-folder"}'>
|
||||
Child node 1
|
||||
<ul>
|
||||
<li data-jstree='{"icon" : "bx bx-file"}'>Grandchild node 1</li>
|
||||
<li data-jstree='{"icon" : "bx bx-file"}'>Grandchild node 2</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li data-jstree='{"icon" : "bx bx-folder"}'>
|
||||
Child node 2
|
||||
<ul>
|
||||
<li data-jstree='{"icon" : "bx bx-file"}'>Grandchild node 3</li>
|
||||
<li data-jstree='{"icon" : "bx bx-file"}'>Grandchild node 4</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /JSTree Checkbox -->
|
||||
</div>
|
||||
</div>
|
||||
<!-- / Content -->
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// Basic
|
||||
$('#jstree-basic').jstree();
|
||||
|
||||
// Contextmenu
|
||||
$('#jstree-contextmenu').jstree({
|
||||
core: {
|
||||
check_callback: true
|
||||
},
|
||||
plugins: ['contextmenu', 'types']
|
||||
});
|
||||
|
||||
// Drag & Drop
|
||||
$('#jstree-drag-drop').jstree({
|
||||
core: {
|
||||
check_callback: true
|
||||
},
|
||||
plugins: ['dnd', 'types']
|
||||
});
|
||||
|
||||
// Checkbox
|
||||
$('#jstree-checkbox').jstree({
|
||||
plugins: ['checkbox', 'types']
|
||||
});
|
||||
});
|
||||
</script>
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,60 @@
|
||||
.wizard-checkout-example .content {
|
||||
min-height: 30rem;
|
||||
}
|
||||
.wizard-checkout-example .content .wizard-header.title {
|
||||
display: none;
|
||||
}
|
||||
.wizard-checkout-example .content .card-body.offers {
|
||||
border-left-width: 0.25rem !important;
|
||||
}
|
||||
.wizard-checkout-example .content .card-body .size-qty-inputs input {
|
||||
width: 2.1875rem;
|
||||
text-align: center;
|
||||
}
|
||||
.wizard-checkout-example .order-details .list-group-item {
|
||||
position: relative;
|
||||
}
|
||||
.wizard-checkout-example .order-details .list-group-item .remove-item {
|
||||
font-size: 1.15rem;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0.3125rem;
|
||||
}
|
||||
.wizard-checkout-example .order-details i {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
.property-wizard svg {
|
||||
height: 9.375rem;
|
||||
width: 9.375rem;
|
||||
}
|
||||
|
||||
.loan-application-wizard svg {
|
||||
height: 6.25rem;
|
||||
width: 6.25rem;
|
||||
}
|
||||
|
||||
.light-style .custom-wizard-header {
|
||||
background-color: #fff;
|
||||
color: #fff;
|
||||
}
|
||||
.light-style .custom-wizard-header .app-brand-text {
|
||||
color: #fff;
|
||||
}
|
||||
@media (min-width: 768px) {
|
||||
.light-style [dir=rtl] .checkout-wizard.wizard > .steps li a .step-title {
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.dark-style .custom-wizard-header {
|
||||
background-color: #494a5d;
|
||||
}
|
||||
.dark-style .custom-wizard-header .app-brand-text {
|
||||
color: #fff;
|
||||
}
|
||||
@media (min-width: 768px) {
|
||||
.dark-style [dir=rtl] .checkout-wizard.wizard > .steps li a .step-title {
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
/**
|
||||
* Academy Course courseContent
|
||||
*/
|
||||
.stick-top {
|
||||
position: sticky;
|
||||
bottom: 0;
|
||||
top: 10px;
|
||||
}
|
||||
.stick-top.course-content-fixed {
|
||||
top: 80px;
|
||||
}
|
||||
@ -0,0 +1,31 @@
|
||||
.app-academy .app-academy-img-height {
|
||||
height: 130px;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.app-academy .app-academy-md-25 {
|
||||
width: 25%;
|
||||
}
|
||||
.app-academy .app-academy-md-50 {
|
||||
width: 50%;
|
||||
}
|
||||
.app-academy .app-academy-md-80 {
|
||||
width: 80%;
|
||||
}
|
||||
}
|
||||
@media (min-width: 576px) {
|
||||
.app-academy .app-academy-sm-40 {
|
||||
width: 40% !important;
|
||||
}
|
||||
.app-academy .app-academy-sm-60 {
|
||||
width: 60% !important;
|
||||
}
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
.app-academy .app-academy-xl-100 {
|
||||
width: 100% !important;
|
||||
}
|
||||
.app-academy .app-academy-xl-100 {
|
||||
width: 100% !important;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,107 @@
|
||||
.app-calendar-wrapper {
|
||||
position: relative;
|
||||
border-radius: 0.375rem;
|
||||
}
|
||||
.app-calendar-wrapper .app-calendar-sidebar {
|
||||
position: absolute;
|
||||
overflow: hidden;
|
||||
flex-grow: 0;
|
||||
flex-basis: 18.75rem;
|
||||
left: calc(-18.75rem - 1.2rem);
|
||||
height: 100%;
|
||||
width: 18.75rem;
|
||||
transition: all 0.2s;
|
||||
z-index: 4;
|
||||
}
|
||||
.app-calendar-wrapper .app-calendar-sidebar.show {
|
||||
left: 0;
|
||||
}
|
||||
.app-calendar-wrapper .app-calendar-sidebar .flatpickr-calendar {
|
||||
box-shadow: none;
|
||||
}
|
||||
.app-calendar-wrapper .app-calendar-sidebar .flatpickr-calendar .flatpickr-month,
|
||||
.app-calendar-wrapper .app-calendar-sidebar .flatpickr-calendar .flatpickr-weekday,
|
||||
.app-calendar-wrapper .app-calendar-sidebar .flatpickr-calendar .flatpickr-weekdays {
|
||||
background: transparent;
|
||||
}
|
||||
.app-calendar-wrapper .app-calendar-sidebar .flatpickr-calendar .flatpickr-days {
|
||||
border: 0;
|
||||
}
|
||||
.app-calendar-wrapper .app-calendar-sidebar .flatpickr-calendar:focus {
|
||||
outline: 0;
|
||||
}
|
||||
.app-calendar-wrapper .app-calendar-content {
|
||||
position: relative;
|
||||
}
|
||||
.app-calendar-wrapper .fc-toolbar h2 {
|
||||
font-size: 1.5rem;
|
||||
line-height: 2.375rem;
|
||||
}
|
||||
@media (max-width: 767.98px) {
|
||||
.app-calendar-wrapper .fc-toolbar h2 {
|
||||
font-size: 1rem;
|
||||
}
|
||||
}
|
||||
.app-calendar-wrapper .fc-toolbar-chunk {
|
||||
overflow: auto;
|
||||
}
|
||||
.app-calendar-wrapper table.fc-scrollgrid {
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
}
|
||||
.app-calendar-wrapper table.fc-scrollgrid th,
|
||||
.app-calendar-wrapper table.fc-scrollgrid td {
|
||||
border-right: 0;
|
||||
}
|
||||
.app-calendar-wrapper .fc-timeGridDay-view table.fc-scrollgrid tbody tr:not(.fc-scrollgrid-section:first-of-type) td,
|
||||
.app-calendar-wrapper .fc-timeGridWeek-view table.fc-scrollgrid tbody tr:not(.fc-scrollgrid-section:first-of-type) td {
|
||||
border-bottom: 0;
|
||||
}
|
||||
.app-calendar-wrapper .fc-dayGridMonth-view table.fc-scrollgrid td {
|
||||
border-bottom: 0 !important;
|
||||
}
|
||||
.app-calendar-wrapper .fc-header-toolbar {
|
||||
margin-bottom: 1.5rem !important;
|
||||
}
|
||||
.app-calendar-wrapper .fc-view-container {
|
||||
margin: 0 -1.6rem;
|
||||
}
|
||||
.app-calendar-wrapper .event-sidebar .ql-editor {
|
||||
min-height: 5rem;
|
||||
}
|
||||
.app-calendar-wrapper .event-sidebar .select2 .select2-selection__choice {
|
||||
display: flex;
|
||||
}
|
||||
.app-calendar-wrapper .event-sidebar .select2 .select2-selection__choice .avatar {
|
||||
display: none;
|
||||
}
|
||||
@media (min-width: 992px) {
|
||||
.app-calendar-wrapper .app-calendar-sidebar {
|
||||
position: static;
|
||||
height: auto;
|
||||
background-color: transparent !important;
|
||||
}
|
||||
.app-calendar-wrapper .app-calendar-sidebar .flatpickr-days {
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
[dir=rtl] .app-calendar-wrapper .fc .fc-toolbar .fc-sidebarToggle-button {
|
||||
order: 1;
|
||||
}
|
||||
[dir=rtl] .app-calendar-wrapper .app-calendar-sidebar {
|
||||
left: auto;
|
||||
right: calc(-18.75rem - 1.2rem);
|
||||
}
|
||||
[dir=rtl] .app-calendar-wrapper .app-calendar-sidebar.show {
|
||||
left: auto;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.light-style .app-calendar-wrapper .app-calendar-sidebar {
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.dark-style .app-calendar-wrapper .app-calendar-sidebar {
|
||||
background-color: #2b2c40;
|
||||
}
|
||||
@ -0,0 +1,369 @@
|
||||
.app-chat {
|
||||
position: relative;
|
||||
height: calc(100vh - 11.3rem);
|
||||
}
|
||||
.layout-navbar-hidden .app-chat {
|
||||
height: calc(100vh - 6.5rem);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
.layout-horizontal .app-chat {
|
||||
height: calc(100vh - 11.3rem - 3rem);
|
||||
}
|
||||
}
|
||||
@media (max-width: 992px) {
|
||||
.app-chat .app-sidebar {
|
||||
z-index: 4;
|
||||
}
|
||||
}
|
||||
.app-chat .app-sidebar .sidebar-header {
|
||||
position: relative;
|
||||
}
|
||||
.app-chat .app-sidebar .sidebar-header .close-sidebar {
|
||||
position: absolute;
|
||||
top: 1.25rem;
|
||||
right: 1.25rem;
|
||||
}
|
||||
.app-chat .app-sidebar .sidebar-header .chat-sidebar-avatar {
|
||||
width: 84px;
|
||||
height: 84px;
|
||||
}
|
||||
.app-chat .app-sidebar .sidebar-header .chat-sidebar-avatar::after {
|
||||
bottom: 6px;
|
||||
width: 16.8px;
|
||||
height: 16.8px;
|
||||
}
|
||||
.app-chat .app-chat-contacts {
|
||||
position: absolute;
|
||||
left: calc(-21rem - 1rem);
|
||||
height: calc(100vh - 11.3rem);
|
||||
width: 21rem;
|
||||
flex-basis: 21rem;
|
||||
transition: all 0.25s ease;
|
||||
}
|
||||
.app-chat .app-chat-contacts .sidebar-header {
|
||||
height: 4.75rem;
|
||||
}
|
||||
.layout-navbar-hidden .app-chat .app-chat-contacts {
|
||||
height: calc(100vh - 6.5rem);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
.layout-horizontal .app-chat .app-chat-contacts {
|
||||
height: calc(100vh - 11.3rem - 3rem);
|
||||
}
|
||||
}
|
||||
@media (min-width: 992px) {
|
||||
.app-chat .app-chat-contacts {
|
||||
position: static;
|
||||
}
|
||||
}
|
||||
.app-chat .app-chat-contacts.show {
|
||||
left: 0rem;
|
||||
}
|
||||
.app-chat .app-chat-contacts .sidebar-body {
|
||||
height: calc(calc(100vh - 11.3rem) - 4.7rem);
|
||||
}
|
||||
.layout-navbar-hidden .app-chat .app-chat-contacts .sidebar-body {
|
||||
height: calc(calc(100vh - 6.5rem) - 4.7rem);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
.layout-horizontal .app-chat .app-chat-contacts .sidebar-body {
|
||||
height: calc(calc(100vh - 11.3rem) - 4.7rem - 3rem);
|
||||
}
|
||||
}
|
||||
.app-chat .app-chat-contacts .sidebar-body .chat-contact-list li.chat-contact-list-item {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
border-radius: 0.375rem;
|
||||
padding: 0.528rem 0.75rem;
|
||||
margin: 0.25rem 0.75rem;
|
||||
cursor: pointer;
|
||||
}
|
||||
.app-chat .app-chat-contacts .sidebar-body .chat-contact-list li.chat-contact-list-item a {
|
||||
width: 100%;
|
||||
}
|
||||
.app-chat .app-chat-contacts .sidebar-body .chat-contact-list li.chat-contact-list-item .chat-contact-info {
|
||||
min-width: 0;
|
||||
}
|
||||
.app-chat .app-chat-contacts .sidebar-body .chat-contact-list li.chat-contact-list-item .chat-contact-info .chat-contact-name {
|
||||
line-height: 1.5;
|
||||
}
|
||||
.app-chat .app-chat-contacts .sidebar-body .chat-contact-list li.chat-contact-list-item small {
|
||||
white-space: nowrap;
|
||||
}
|
||||
.app-chat .app-chat-contacts .sidebar-body .chat-contact-list li.chat-contact-list-item-title {
|
||||
padding: 0.528rem 1.0032rem 0.264rem;
|
||||
}
|
||||
.app-chat .app-chat-sidebar-left {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: calc(-21rem - 1rem);
|
||||
width: 21rem;
|
||||
height: calc(100vh - 11.3rem);
|
||||
opacity: 0;
|
||||
z-index: 5;
|
||||
transition: all 0.25s ease;
|
||||
}
|
||||
.layout-navbar-hidden .app-chat .app-chat-sidebar-left {
|
||||
height: calc(100vh - 6.5rem);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
.layout-horizontal .app-chat .app-chat-sidebar-left {
|
||||
height: calc(100vh - 11.3rem - 3rem);
|
||||
}
|
||||
}
|
||||
.app-chat .app-chat-sidebar-left.show {
|
||||
left: 0;
|
||||
opacity: 1;
|
||||
}
|
||||
.app-chat .app-chat-sidebar-left .sidebar-body {
|
||||
height: calc(calc(100vh - 11.3rem) - 12.5rem);
|
||||
}
|
||||
.layout-navbar-hidden .app-chat .app-chat-sidebar-left .sidebar-body {
|
||||
height: calc(calc(100vh - 6.5rem) - 12.5rem);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
.layout-horizontal .app-chat .app-chat-sidebar-left .sidebar-body {
|
||||
height: calc(calc(100vh - 11.3rem) - 12.3rem - 3rem);
|
||||
}
|
||||
}
|
||||
.app-chat .app-chat-history {
|
||||
position: relative;
|
||||
height: calc(100vh - 11.3rem);
|
||||
transition: all 0.25s ease;
|
||||
}
|
||||
.layout-navbar-hidden .app-chat .app-chat-history {
|
||||
height: calc(100vh - 6.5rem);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
.layout-horizontal .app-chat .app-chat-history {
|
||||
height: calc(100vh - 11.3rem - 3rem);
|
||||
}
|
||||
}
|
||||
.app-chat .app-chat-history .chat-history-header {
|
||||
padding: 1.05rem 1.5rem;
|
||||
margin-top: -1px;
|
||||
}
|
||||
.app-chat .app-chat-history .chat-history-body {
|
||||
height: calc(100vh - 22rem);
|
||||
padding: 1.5rem 1.5rem;
|
||||
overflow: hidden;
|
||||
}
|
||||
.layout-navbar-hidden .app-chat .app-chat-history .chat-history-body {
|
||||
height: calc(100vh - 17.6rem);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
.layout-horizontal .app-chat .app-chat-history .chat-history-body {
|
||||
height: calc(100vh - 22rem - 3rem);
|
||||
}
|
||||
}
|
||||
.app-chat .app-chat-history .chat-history-body .chat-history .chat-message {
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
}
|
||||
.app-chat .app-chat-history .chat-history-body .chat-history .chat-message .chat-message-text {
|
||||
border-radius: 0.375rem;
|
||||
padding: 0.543rem 1rem;
|
||||
}
|
||||
.app-chat .app-chat-history .chat-history-body .chat-history .chat-message.chat-message-right {
|
||||
justify-content: flex-end;
|
||||
}
|
||||
.app-chat .app-chat-history .chat-history-body .chat-history .chat-message.chat-message-right .chat-message-text {
|
||||
border-top-right-radius: 0;
|
||||
}
|
||||
.app-chat .app-chat-history .chat-history-body .chat-history .chat-message.chat-message-right .user-avatar {
|
||||
margin-right: 0rem;
|
||||
margin-left: 1rem;
|
||||
}
|
||||
.app-chat .app-chat-history .chat-history-body .chat-history .chat-message:not(.chat-message-right) .chat-message-text {
|
||||
border-top-left-radius: 0;
|
||||
}
|
||||
.app-chat .app-chat-history .chat-history-body .chat-history .chat-message .thumbnail {
|
||||
cursor: zoom-in;
|
||||
}
|
||||
.app-chat .app-chat-history .chat-history-body .chat-history .chat-message:not(:last-child) {
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
.app-chat .app-chat-history .chat-history-footer {
|
||||
padding: 0.5rem;
|
||||
padding-inline-start: 2px;
|
||||
margin: 1.5rem;
|
||||
border-radius: 0.375rem;
|
||||
}
|
||||
.app-chat .app-chat-history .chat-history-footer .form-control.message-input {
|
||||
padding: calc(0.543rem - var(--bs-border-width)) calc(0.9375rem - var(--bs-border-width));
|
||||
}
|
||||
.app-chat .app-chat-sidebar-right {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: calc(-21rem - 1rem);
|
||||
width: 21rem;
|
||||
height: calc(100vh - 11.3rem);
|
||||
opacity: 0;
|
||||
z-index: 5;
|
||||
transition: all 0.25s ease;
|
||||
}
|
||||
.layout-navbar-hidden .app-chat .app-chat-sidebar-right {
|
||||
height: calc(100vh - 6.5rem);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
.layout-horizontal .app-chat .app-chat-sidebar-right {
|
||||
height: calc(100vh - 11.3rem - 3rem);
|
||||
}
|
||||
}
|
||||
.app-chat .app-chat-sidebar-right.show {
|
||||
opacity: 1;
|
||||
right: 0;
|
||||
}
|
||||
.app-chat .app-chat-sidebar-right .sidebar-body {
|
||||
height: calc(calc(100vh - 11.3rem) - 12.3rem);
|
||||
}
|
||||
.layout-navbar-hidden .app-chat .app-chat-sidebar-right .sidebar-body {
|
||||
height: calc(calc(100vh - 6.5rem) - 12.3rem);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
.layout-horizontal .app-chat .app-chat-sidebar-right .sidebar-body {
|
||||
height: calc(calc(100vh - 11.3rem) - 12.1rem - 3rem);
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 576px) {
|
||||
.app-chat .app-chat-sidebar-right.show,
|
||||
.app-chat .app-chat-sidebar-left.show,
|
||||
.app-chat .app-chat-contacts.show {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.light-style .app-chat .app-sidebar .sidebar-header .chat-sidebar-avatar::after {
|
||||
box-shadow: 0 0 0 0.25rem #fff;
|
||||
}
|
||||
.light-style .app-chat .app-chat-contacts,
|
||||
.light-style .app-chat .app-chat-sidebar-left {
|
||||
background-color: #fff;
|
||||
}
|
||||
.light-style .app-chat .app-chat-contacts .chat-actions .chat-search-input,
|
||||
.light-style .app-chat .app-chat-sidebar-left .chat-actions .chat-search-input {
|
||||
background-color: #f5f5f9;
|
||||
}
|
||||
.light-style .app-chat .app-chat-contacts .sidebar-body .chat-contact-list li.active,
|
||||
.light-style .app-chat .app-chat-sidebar-left .sidebar-body .chat-contact-list li.active {
|
||||
color: #fff;
|
||||
box-shadow: 0px 0.125rem 0.25rem 0px rgba(105, 108, 255, 0.4);
|
||||
}
|
||||
.light-style .app-chat .app-chat-contacts .sidebar-body .chat-contact-list li.active h6,
|
||||
.light-style .app-chat .app-chat-contacts .sidebar-body .chat-contact-list li.active .text-muted,
|
||||
.light-style .app-chat .app-chat-sidebar-left .sidebar-body .chat-contact-list li.active h6,
|
||||
.light-style .app-chat .app-chat-sidebar-left .sidebar-body .chat-contact-list li.active .text-muted {
|
||||
color: #fff !important;
|
||||
}
|
||||
.light-style .app-chat .app-chat-history {
|
||||
background-color: #f7f8f8;
|
||||
}
|
||||
.light-style .app-chat .app-chat-history .chat-history-wrapper {
|
||||
background-color: #f7f8f8;
|
||||
}
|
||||
.light-style .app-chat .app-chat-history .chat-history-header,
|
||||
.light-style .app-chat .app-chat-history .chat-history-footer {
|
||||
background-color: #fff;
|
||||
}
|
||||
.light-style .app-chat .app-chat-history .chat-history-footer {
|
||||
box-shadow: 0 0.0625rem 0.3175rem 0 rgba(34, 48, 62, 0.06);
|
||||
}
|
||||
.light-style .app-chat .app-chat-history .chat-history-body .chat-history .chat-message .chat-message-text {
|
||||
background-color: #fff;
|
||||
box-shadow: 0 0.0625rem 0.3175rem 0 rgba(34, 48, 62, 0.06);
|
||||
}
|
||||
.light-style .app-chat .app-chat-history .chat-history-body .chat-history .chat-message.chat-message-right {
|
||||
justify-content: flex-end;
|
||||
}
|
||||
.light-style .app-chat .app-chat-history .chat-history-body .chat-history .chat-message.chat-message-right .chat-message-text {
|
||||
color: #fff;
|
||||
}
|
||||
.light-style .app-chat .app-chat-sidebar-right {
|
||||
background-color: #fff;
|
||||
box-shadow: 16px 1px 45px 3px rgba(34, 48, 62, 0.5);
|
||||
}
|
||||
@media (max-width: 992px) {
|
||||
.light-style .app-chat .app-chat-contacts .chat-actions .chat-search-input {
|
||||
background-color: #fff;
|
||||
}
|
||||
}
|
||||
|
||||
.dark-style .app-chat .app-sidebar .sidebar-header .chat-sidebar-avatar::after {
|
||||
box-shadow: 0 0 0 0.25rem #2b2c40;
|
||||
}
|
||||
.dark-style .app-chat .app-chat-contacts,
|
||||
.dark-style .app-chat .app-chat-sidebar-left {
|
||||
background-color: #2b2c40;
|
||||
}
|
||||
.dark-style .app-chat .app-chat-contacts .chat-actions .chat-search-input,
|
||||
.dark-style .app-chat .app-chat-sidebar-left .chat-actions .chat-search-input {
|
||||
background-color: #232333;
|
||||
}
|
||||
.dark-style .app-chat .app-chat-contacts .sidebar-body .chat-contact-list li.active,
|
||||
.dark-style .app-chat .app-chat-sidebar-left .sidebar-body .chat-contact-list li.active {
|
||||
color: #fff;
|
||||
box-shadow: 0px 0.125rem 0.25rem 0px rgba(105, 108, 255, 0.4);
|
||||
}
|
||||
.dark-style .app-chat .app-chat-contacts .sidebar-body .chat-contact-list li.active h6,
|
||||
.dark-style .app-chat .app-chat-contacts .sidebar-body .chat-contact-list li.active .text-muted,
|
||||
.dark-style .app-chat .app-chat-sidebar-left .sidebar-body .chat-contact-list li.active h6,
|
||||
.dark-style .app-chat .app-chat-sidebar-left .sidebar-body .chat-contact-list li.active .text-muted {
|
||||
color: #fff !important;
|
||||
}
|
||||
.dark-style .app-chat .app-chat-history {
|
||||
background-color: #20202e;
|
||||
}
|
||||
.dark-style .app-chat .app-chat-history .chat-history-wrapper {
|
||||
background-color: #20202e;
|
||||
}
|
||||
.dark-style .app-chat .app-chat-history .chat-history-header,
|
||||
.dark-style .app-chat .app-chat-history .chat-history-footer {
|
||||
background-color: #2b2c40;
|
||||
}
|
||||
.dark-style .app-chat .app-chat-history .chat-history-footer {
|
||||
box-shadow: 0 0.0625rem 0.3175rem 0 rgba(20, 20, 29, 0.18);
|
||||
}
|
||||
.dark-style .app-chat .app-chat-history .chat-history-body .chat-history .chat-message .chat-message-text {
|
||||
background-color: #2b2c40;
|
||||
box-shadow: 0 0.0625rem 0.3175rem 0 rgba(20, 20, 29, 0.18);
|
||||
}
|
||||
.dark-style .app-chat .app-chat-history .chat-history-body .chat-history .chat-message.chat-message-right {
|
||||
justify-content: flex-end;
|
||||
}
|
||||
.dark-style .app-chat .app-chat-history .chat-history-body .chat-history .chat-message.chat-message-right .chat-message-text {
|
||||
color: #fff;
|
||||
}
|
||||
.dark-style .app-chat .app-chat-sidebar-right {
|
||||
background-color: #2b2c40;
|
||||
}
|
||||
|
||||
[dir=rtl] .app-chat .app-chat-sidebar-left,
|
||||
[dir=rtl] .app-chat .app-chat-contacts {
|
||||
right: calc(-21rem - 1rem);
|
||||
left: auto;
|
||||
}
|
||||
[dir=rtl] .app-chat .app-chat-sidebar-left.show,
|
||||
[dir=rtl] .app-chat .app-chat-contacts.show {
|
||||
left: auto;
|
||||
right: 0;
|
||||
}
|
||||
[dir=rtl] .app-chat .app-chat-sidebar-right {
|
||||
left: calc(-21rem - 1rem);
|
||||
right: auto;
|
||||
}
|
||||
[dir=rtl] .app-chat .app-chat-sidebar-right.show {
|
||||
left: 0;
|
||||
right: auto;
|
||||
}
|
||||
[dir=rtl] .app-chat .app-chat-history .chat-history-body .chat-history .chat .user-avatar {
|
||||
margin-left: 1rem;
|
||||
margin-right: 0;
|
||||
}
|
||||
[dir=rtl] .app-chat .app-chat-history .chat-message:not(.chat-message-right) .chat-message-text {
|
||||
border-top-right-radius: 0 !important;
|
||||
border-top-left-radius: 0.375rem !important;
|
||||
}
|
||||
[dir=rtl] .app-chat .app-chat-history .chat-message.chat-message-right .chat-message-text {
|
||||
border-top-left-radius: 0 !important;
|
||||
border-top-right-radius: 0.375rem !important;
|
||||
}
|
||||
@ -0,0 +1,13 @@
|
||||
.app-ecommerce-category .comment-editor .ql-editor,
|
||||
.app-ecommerce .comment-editor .ql-editor {
|
||||
min-height: 7rem;
|
||||
border-top-left-radius: 0.375rem;
|
||||
border-top-right-radius: 0.375rem;
|
||||
}
|
||||
|
||||
@media (max-width: 575.98px) {
|
||||
.widget-separator .border-shift.border-end {
|
||||
border-right: none !important;
|
||||
border-left: none !important;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,469 @@
|
||||
.app-email {
|
||||
position: relative;
|
||||
height: calc(100vh - 12rem) !important;
|
||||
overflow: hidden;
|
||||
}
|
||||
@media (max-width: 767.98px) {
|
||||
.app-email {
|
||||
height: calc(100vh - 11rem) !important;
|
||||
}
|
||||
}
|
||||
.layout-navbar-hidden .app-email {
|
||||
height: calc(100vh - 8.5rem) !important;
|
||||
}
|
||||
.layout-horizontal .app-email {
|
||||
height: calc(100vh - 12rem + 0.7894736842rem) !important;
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
.layout-horizontal .app-email {
|
||||
height: calc(100vh - 12rem - 2.1rem) !important;
|
||||
}
|
||||
}
|
||||
.app-email .app-email-sidebar {
|
||||
position: absolute;
|
||||
left: calc(-16.25rem - 1.2rem);
|
||||
width: 16.25rem;
|
||||
height: 100%;
|
||||
z-index: 4;
|
||||
flex-basis: 16.25rem;
|
||||
transition: all 0.2s;
|
||||
}
|
||||
.app-email .app-email-sidebar .btn-compost-wrapper {
|
||||
padding: 1.5rem;
|
||||
}
|
||||
.app-email .app-email-sidebar.show {
|
||||
left: 0;
|
||||
}
|
||||
.app-email .app-email-sidebar .email-filters {
|
||||
height: calc(100vh - 16.6rem);
|
||||
}
|
||||
.layout-navbar-hidden .app-email .app-email-sidebar .email-filters {
|
||||
height: calc(100vh - 12.6rem);
|
||||
}
|
||||
.layout-horizontal .app-email .app-email-sidebar .email-filters {
|
||||
height: calc(100vh - 15.6rem);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
.layout-horizontal .app-email .app-email-sidebar .email-filters {
|
||||
height: calc(100vh - 16.6rem - 2.1rem);
|
||||
}
|
||||
}
|
||||
.app-email .app-email-sidebar .email-filters .email-filter-folders li:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
.app-email .app-email-sidebar .email-filters .email-filter-folders li:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.app-email .app-email-sidebar .email-filters .email-filter-folders li.active {
|
||||
border-color: #696cff;
|
||||
}
|
||||
.app-email .app-email-sidebar .email-filters li {
|
||||
padding: 0.25rem 1.5rem;
|
||||
padding-inline-start: calc(1.5rem - 3px);
|
||||
border-left: 3px solid transparent;
|
||||
min-height: 1.875rem;
|
||||
}
|
||||
.app-email .app-email-sidebar .email-filters li h6 {
|
||||
font-size: 1rem;
|
||||
}
|
||||
.app-email .app-email-sidebar .email-filter-labels .badge-dot {
|
||||
width: 0.625rem;
|
||||
height: 0.625rem;
|
||||
}
|
||||
.app-email .app-email-compose .modal-dialog {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
width: 100%;
|
||||
}
|
||||
.app-email .app-email-compose .email-compose-to .select2-selection {
|
||||
border: none;
|
||||
padding-inline: calc(0.9375rem - var(--bs-border-width));
|
||||
padding-block: 0;
|
||||
}
|
||||
.app-email .app-email-compose .email-compose-to .select2-selection .select2-selection__choice {
|
||||
padding-top: 0.2rem;
|
||||
padding-bottom: 0.2rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
line-height: 0;
|
||||
}
|
||||
.app-email .app-email-compose .email-compose-to .select2-selection__choice__remove {
|
||||
top: unset;
|
||||
}
|
||||
.app-email .app-email-compose .email-compose-toggle-wrapper {
|
||||
width: 80px;
|
||||
}
|
||||
.app-email .app-email-compose .ql-editor {
|
||||
height: 10rem;
|
||||
min-height: 10rem;
|
||||
padding-inline: 1.75rem;
|
||||
}
|
||||
.app-email .app-email-compose .ql-snow.ql-toolbar {
|
||||
padding: 0.5rem 1rem;
|
||||
}
|
||||
.app-email .app-email-compose .ql-editor.ql-blank {
|
||||
padding-inline: 1.5rem;
|
||||
}
|
||||
.app-email .app-email-compose .ql-editor.ql-blank::before {
|
||||
padding-left: 1.5rem;
|
||||
}
|
||||
.app-email .app-emails-list .emails-list-header .emails-list-header-hr {
|
||||
margin-top: 0rem;
|
||||
}
|
||||
@media (min-width: 992px) {
|
||||
.app-email .app-emails-list .email-list {
|
||||
height: calc(100vh - 18.9rem);
|
||||
}
|
||||
}
|
||||
@media (max-width: 991.98px) {
|
||||
.app-email .app-emails-list .email-list {
|
||||
height: calc(100vh - 18.9rem);
|
||||
}
|
||||
}
|
||||
@media (max-width: 767.98px) {
|
||||
.app-email .app-emails-list .email-list {
|
||||
height: calc(100vh - 18rem);
|
||||
}
|
||||
}
|
||||
@media (min-width: 992px) {
|
||||
.layout-navbar-hidden .app-email .app-emails-list .email-list {
|
||||
height: calc(100vh - 15.5rem);
|
||||
}
|
||||
}
|
||||
@media (max-width: 991.98px) {
|
||||
.layout-navbar-hidden .app-email .app-emails-list .email-list {
|
||||
height: calc(100vh - 15.5rem);
|
||||
}
|
||||
}
|
||||
.layout-horizontal .app-email .app-emails-list .email-list {
|
||||
height: calc(100vh - 18.2rem);
|
||||
}
|
||||
@media (min-width: 992px) {
|
||||
.layout-horizontal .app-email .app-emails-list .email-list {
|
||||
height: calc(100vh - 17.75rem);
|
||||
}
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
.layout-horizontal .app-email .app-emails-list .email-list {
|
||||
height: calc(100vh - 18.75rem - 2.1rem) !important;
|
||||
}
|
||||
}
|
||||
.app-email .app-emails-list .email-list li.email-list-item {
|
||||
padding: 0.875rem 1rem;
|
||||
min-height: 4.375rem;
|
||||
transition: all 0.2s ease-in-out;
|
||||
cursor: pointer;
|
||||
z-index: 1;
|
||||
}
|
||||
.app-email .app-emails-list .email-list li.email-list-item:last-child {
|
||||
border-bottom: 0;
|
||||
}
|
||||
.app-email .app-emails-list .email-list li.email-list-item .email-list-item-username {
|
||||
font-weight: 500;
|
||||
}
|
||||
.app-email .app-emails-list .email-list li.email-list-item .email-list-item-time {
|
||||
width: 60px;
|
||||
display: inline-block;
|
||||
text-align: right;
|
||||
}
|
||||
.app-email .app-emails-list .email-list li.email-list-item .email-list-item-meta .email-list-item-actions {
|
||||
display: none;
|
||||
}
|
||||
.app-email .app-emails-list .email-list li.email-list-item .email-list-item-meta .email-list-item-actions li {
|
||||
padding: 0;
|
||||
}
|
||||
.app-email .app-emails-list .email-list li.email-list-item .list-inline-item:not(:last-child) {
|
||||
margin-inline-end: 0.25rem;
|
||||
}
|
||||
.app-email .app-emails-list .email-list li.email-list-item.email-list-item:not(.list-inline-item):hover {
|
||||
z-index: 5;
|
||||
transform: translateY(-2px);
|
||||
}
|
||||
.app-email .app-email-view {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: -100%;
|
||||
width: 100%;
|
||||
height: calc(100vh - 12rem);
|
||||
z-index: -1;
|
||||
transition: all 0.25s ease;
|
||||
}
|
||||
@media (max-width: 767.98px) {
|
||||
.app-email .app-email-view {
|
||||
height: calc(100vh - 12rem + 2rem);
|
||||
}
|
||||
}
|
||||
.layout-navbar-hidden .app-email .app-email-view {
|
||||
height: calc(100vh - 8.5rem);
|
||||
}
|
||||
.layout-horizontal .app-email .app-email-view {
|
||||
height: calc(100vh - 12rem + 1rem);
|
||||
}
|
||||
@media (min-width: 992px) {
|
||||
.layout-horizontal .app-email .app-email-view {
|
||||
height: calc(100vh - 12rem + 1rem);
|
||||
}
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
.layout-horizontal .app-email .app-email-view {
|
||||
height: calc(100vh - 12rem - 2.1rem) !important;
|
||||
}
|
||||
}
|
||||
.app-email .app-email-view.show {
|
||||
right: -1px;
|
||||
z-index: 4;
|
||||
}
|
||||
.app-email .app-email-view .app-email-view-header {
|
||||
padding-bottom: 1.3rem;
|
||||
}
|
||||
@media (min-width: 768px) {
|
||||
.app-email .app-email-view .app-email-view-content {
|
||||
height: calc(100vh - 19.6rem);
|
||||
}
|
||||
}
|
||||
@media (max-width: 767.98px) {
|
||||
.app-email .app-email-view .app-email-view-content {
|
||||
height: calc(100vh - 17.65rem);
|
||||
}
|
||||
}
|
||||
.layout-horizontal .app-email .app-email-view .app-email-view-content {
|
||||
height: calc(100vh - 18rem);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
.layout-horizontal .app-email .app-email-view .app-email-view-content {
|
||||
height: calc(100vh - 19.2rem - 2.1rem) !important;
|
||||
}
|
||||
}
|
||||
.app-email .app-email-view .app-email-view-content .ql-container {
|
||||
border: 0;
|
||||
}
|
||||
.app-email .app-email-view .app-email-view-content .ql-container .ql-editor {
|
||||
height: 7rem;
|
||||
min-height: 7rem;
|
||||
}
|
||||
.app-email .app-email-view .app-email-view-content .ql-editor,
|
||||
.app-email .app-email-view .app-email-view-content .ql-editor.ql-blank::before {
|
||||
padding-left: 0.5rem;
|
||||
}
|
||||
.app-email .app-email-view .app-email-view-content .email-card-prev {
|
||||
display: none;
|
||||
}
|
||||
.app-email .app-email-view .app-email-view-content .email-card-last {
|
||||
transition: all 0.25s ease-in-out;
|
||||
}
|
||||
.app-email .app-email-view .app-email-view-content .email-card-last:before {
|
||||
position: absolute;
|
||||
bottom: 1rem;
|
||||
left: 2.5rem;
|
||||
right: 2.5rem;
|
||||
top: -2rem;
|
||||
border-radius: 0.375rem;
|
||||
z-index: -1;
|
||||
content: "";
|
||||
}
|
||||
.app-email .app-email-view .app-email-view-content .email-card-last:after {
|
||||
position: absolute;
|
||||
bottom: 0.5rem;
|
||||
left: 1rem;
|
||||
right: 1rem;
|
||||
top: -1rem;
|
||||
border-radius: 0.375rem;
|
||||
z-index: -1;
|
||||
content: "";
|
||||
}
|
||||
.app-email .app-email-view .app-email-view-content .email-card-last.hide-pseudo:before, .app-email .app-email-view .app-email-view-content .email-card-last.hide-pseudo:after {
|
||||
display: none !important;
|
||||
}
|
||||
.app-email .app-email-compose .email-compose-actions .email-send-btn::after {
|
||||
display: none;
|
||||
}
|
||||
.app-email .email-compose-form .form-control {
|
||||
padding: 0.543rem 0.9375rem;
|
||||
}
|
||||
@media (min-width: 1199px) {
|
||||
.app-email .email-list li .email-list-item-meta {
|
||||
margin-right: 0.45rem;
|
||||
}
|
||||
}
|
||||
@media (min-width: 992px) {
|
||||
.app-email .app-email-sidebar {
|
||||
position: static;
|
||||
height: auto;
|
||||
}
|
||||
.app-email .email-list li.email-list-item:hover .email-list-item-meta .email-list-item-attachment,
|
||||
.app-email .email-list li.email-list-item:hover .email-list-item-meta .email-list-item-time,
|
||||
.app-email .email-list li.email-list-item:hover .email-list-item-meta .email-list-item-label {
|
||||
display: none !important;
|
||||
}
|
||||
.app-email .email-list li.email-list-item:hover .email-list-item-meta .email-list-item-actions {
|
||||
display: block;
|
||||
}
|
||||
.app-email .app-email-view {
|
||||
width: calc(100% - 16.2rem);
|
||||
}
|
||||
}
|
||||
@media (max-width: 576px) {
|
||||
.app-email .app-emails-list .emails-list-header {
|
||||
padding: 1rem;
|
||||
}
|
||||
.app-email .app-emails-list .email-list li.email-list-item {
|
||||
padding: 1rem;
|
||||
}
|
||||
.app-email .app-emails-list .email-list li.email-list-item .email-list-item-username {
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
.app-email .app-emails-list .email-list li.email-list-item .email-list-item-user {
|
||||
min-width: auto !important;
|
||||
margin-right: 1rem;
|
||||
}
|
||||
.app-email .app-email-view .email-list-item-username {
|
||||
font-size: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
.light-style .app-email .app-email-sidebar {
|
||||
background-color: #fff;
|
||||
}
|
||||
.light-style .app-email .app-email-sidebar ul li:not(.active) a {
|
||||
color: #384551;
|
||||
}
|
||||
.light-style .app-email .email-list li.email-list-item {
|
||||
border-bottom: 1px solid #e4e6e8;
|
||||
}
|
||||
.light-style .app-email .email-list li.email-list-item .email-list-item-user {
|
||||
min-width: 12rem;
|
||||
}
|
||||
.light-style .app-email .email-list li.email-list-item.email-marked-read {
|
||||
background-color: rgba(34, 48, 62, 0.06);
|
||||
}
|
||||
.light-style .app-email .email-list li.email-list-item:hover {
|
||||
box-shadow: 0 0.125rem 0.375rem 0 rgba(34, 48, 62, 0.08);
|
||||
border-bottom-color: transparent;
|
||||
}
|
||||
.light-style .app-email .email-list li.email-list-item .email-list-item-actions li {
|
||||
box-shadow: none;
|
||||
}
|
||||
.light-style .app-email .email-list li.email-list-item[data-starred=true] .email-list-item-bookmark {
|
||||
color: #ffab00;
|
||||
}
|
||||
.light-style .app-email .app-email-view .email-card-last {
|
||||
border: 1px solid #e4e6e8;
|
||||
}
|
||||
.light-style .app-email .app-email-view .email-card-last:before {
|
||||
background-color: rgba(255, 255, 255, 0.4);
|
||||
box-shadow: 0 0.1875rem 0.5rem 0 rgba(34, 48, 62, 0.1);
|
||||
border: 1px solid #e4e6e8;
|
||||
}
|
||||
.light-style .app-email .app-email-view .email-card-last:after {
|
||||
background-color: rgba(255, 255, 255, 0.7);
|
||||
box-shadow: 0 0.1875rem 0.5rem 0 rgba(34, 48, 62, 0.1);
|
||||
border: 1px solid #e4e6e8;
|
||||
}
|
||||
.light-style .app-email .app-email-view .email-reply {
|
||||
border: 1px solid #e4e6e8;
|
||||
}
|
||||
.light-style .app-email .app-email-view .email-attachment-title {
|
||||
font-weight: 500;
|
||||
}
|
||||
.light-style .app-email .app-email-compose .modal-dialog .modal-header {
|
||||
background-color: rgba(34, 48, 62, 0.06);
|
||||
}
|
||||
.light-style .app-email .app-email-compose .modal-dialog .modal-content {
|
||||
box-shadow: 0 0.3125rem 1.375rem 0 rgba(34, 48, 62, 0.18);
|
||||
}
|
||||
|
||||
.dark-style .app-email .app-email-sidebar {
|
||||
background-color: #2b2c40;
|
||||
}
|
||||
.dark-style .app-email .app-email-sidebar ul li:not(.active) a {
|
||||
color: #d5d5e2;
|
||||
}
|
||||
.dark-style .app-email .emails-list-header .email-search-input,
|
||||
.dark-style .app-email .emails-list-header .input-group-text {
|
||||
background-color: transparent;
|
||||
}
|
||||
.dark-style .app-email .email-list li.email-list-item {
|
||||
border-bottom: 1px solid #4e4f6c;
|
||||
}
|
||||
.dark-style .app-email .email-list li.email-list-item.email-marked-read {
|
||||
background-color: rgba(230, 230, 241, 0.06);
|
||||
}
|
||||
.dark-style .app-email .email-list li.email-list-item:hover {
|
||||
box-shadow: 0 0.125rem 0.375rem 0 rgba(20, 20, 29, 0.2);
|
||||
border-bottom-color: transparent;
|
||||
}
|
||||
.dark-style .app-email .email-list li.email-list-item .email-list-item-actions li {
|
||||
box-shadow: none;
|
||||
}
|
||||
.dark-style .app-email .email-list li.email-list-item[data-starred=true] .email-list-item-bookmark {
|
||||
color: #ffab00;
|
||||
}
|
||||
.dark-style .app-email .app-email-view .email-card-last {
|
||||
border: 1px solid #4e4f6c;
|
||||
}
|
||||
.dark-style .app-email .app-email-view .email-card-last:before {
|
||||
background-color: rgba(43, 44, 64, 0.4);
|
||||
box-shadow: 0 0.1875rem 0.5rem 0 rgba(20, 20, 29, 0.22);
|
||||
border: 1px solid #4e4f6c;
|
||||
}
|
||||
.dark-style .app-email .app-email-view .email-card-last:after {
|
||||
background-color: rgba(43, 44, 64, 0.7);
|
||||
box-shadow: 0 0.1875rem 0.5rem 0 rgba(20, 20, 29, 0.22);
|
||||
border: 1px solid #4e4f6c;
|
||||
}
|
||||
.dark-style .app-email .app-email-view .email-reply {
|
||||
border: 1px solid #4e4f6c;
|
||||
}
|
||||
.dark-style .app-email .app-email-view .app-email-view-header {
|
||||
background-color: #2b2c40;
|
||||
}
|
||||
.dark-style .app-email .app-email-compose .modal-dialog .modal-header {
|
||||
background-color: rgba(230, 230, 241, 0.06);
|
||||
}
|
||||
.dark-style .app-email .app-email-compose .modal-dialog .modal-content {
|
||||
box-shadow: 0 0.3125rem 1.375rem 0 rgba(20, 20, 29, 0.26);
|
||||
}
|
||||
|
||||
[dir=rtl] .app-email .app-emails-list .emails-list-header .dropdown-menu-end {
|
||||
right: auto !important;
|
||||
left: 0 !important;
|
||||
}
|
||||
[dir=rtl] .app-email .app-email-sidebar {
|
||||
right: calc(-16.25rem - 1.2rem);
|
||||
left: auto;
|
||||
}
|
||||
[dir=rtl] .app-email .app-email-sidebar.show {
|
||||
right: 0;
|
||||
left: auto;
|
||||
}
|
||||
[dir=rtl] .app-email .app-email-sidebar .email-filters li {
|
||||
border-left: 0;
|
||||
border-right: 3px solid transparent;
|
||||
}
|
||||
[dir=rtl] .app-email .app-email-compose .modal-dialog {
|
||||
left: 0;
|
||||
right: auto;
|
||||
}
|
||||
[dir=rtl] .app-email .app-email-view {
|
||||
right: auto;
|
||||
left: -100%;
|
||||
}
|
||||
[dir=rtl] .app-email .app-email-view.show {
|
||||
right: auto;
|
||||
left: -1px;
|
||||
}
|
||||
[dir=rtl] .app-email .app-email-view .app-email-view-header .bx-chevron-right,
|
||||
[dir=rtl] .app-email .app-email-view .app-email-view-header .bx-chevron-left {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
@media (min-width: 1199px) {
|
||||
[dir=rtl] .email-list li .email-list-item-meta {
|
||||
text-align: left;
|
||||
}
|
||||
}
|
||||
@media (max-width: 576px) {
|
||||
[dir=rtl] .app-emails-list .email-list li.email-list-item .email-list-item-user {
|
||||
margin-left: 1rem;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,24 @@
|
||||
html,
|
||||
body {
|
||||
background: #fff !important;
|
||||
}
|
||||
|
||||
body > :not(.invoice-print) {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.invoice-print {
|
||||
min-width: 768px !important;
|
||||
font-size: 15px !important;
|
||||
}
|
||||
.invoice-print svg {
|
||||
fill: #646e78 !important;
|
||||
}
|
||||
|
||||
.invoice-print * {
|
||||
color: #646e78 !important;
|
||||
}
|
||||
|
||||
.dark-style .invoice-print th {
|
||||
color: #fff !important;
|
||||
}
|
||||
@ -0,0 +1,36 @@
|
||||
@media (max-width: 575.98px) {
|
||||
.invoice-edit .invoice-preview-card .invoice-calculations,
|
||||
.invoice-add .invoice-preview-card .invoice-calculations {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
@media (min-width: 768px) {
|
||||
.invoice-edit .repeater-title,
|
||||
.invoice-add .repeater-title {
|
||||
position: absolute;
|
||||
top: -2.4rem;
|
||||
}
|
||||
}
|
||||
.invoice-edit .invoice-preview-card .repeater-wrapper:not(:last-child),
|
||||
.invoice-add .invoice-preview-card .repeater-wrapper:not(:last-child) {
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
@media print {
|
||||
.invoice-edit hr,
|
||||
.invoice-add hr {
|
||||
margin-top: 1rem !important;
|
||||
margin-bottom: 1rem !important;
|
||||
}
|
||||
}
|
||||
|
||||
.invoice-preview .invoice-preview-header,
|
||||
.invoice-edit .invoice-preview-header,
|
||||
.invoice-add .invoice-preview-header {
|
||||
background-color: rgba(34, 48, 62, 0.06);
|
||||
}
|
||||
|
||||
.dark-style .invoice-preview .invoice-preview-header,
|
||||
.dark-style .invoice-edit .invoice-preview-header,
|
||||
.dark-style .invoice-add .invoice-preview-header {
|
||||
background-color: rgba(230, 230, 241, 0.06);
|
||||
}
|
||||
@ -0,0 +1,189 @@
|
||||
.app-kanban .kanban-wrapper {
|
||||
width: 100%;
|
||||
height: calc(100vh - 12rem);
|
||||
overflow-x: auto;
|
||||
overflow-y: auto;
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
.layout-horizontal .app-kanban .kanban-wrapper {
|
||||
height: calc(100vh - 12rem - 3.5rem);
|
||||
}
|
||||
}
|
||||
.app-kanban .kanban-wrapper .kanban-container {
|
||||
display: flex;
|
||||
width: max-content !important;
|
||||
}
|
||||
.app-kanban .kanban-wrapper .kanban-container .kanban-board {
|
||||
width: auto !important;
|
||||
height: 100%;
|
||||
background: transparent;
|
||||
}
|
||||
.app-kanban .kanban-wrapper .kanban-container .kanban-board:focus {
|
||||
outline: 0;
|
||||
}
|
||||
.app-kanban .kanban-wrapper .kanban-container .kanban-board .kanban-board-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 0 0 1rem 0;
|
||||
}
|
||||
.app-kanban .kanban-wrapper .kanban-container .kanban-board .kanban-board-header .kanban-title-board {
|
||||
font-size: 1.125rem;
|
||||
max-width: 13rem;
|
||||
font-weight: 500;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
}
|
||||
.app-kanban .kanban-wrapper .kanban-container .kanban-board .kanban-board-header .kanban-title-board:focus {
|
||||
outline: 0;
|
||||
}
|
||||
.app-kanban .kanban-wrapper .kanban-container .kanban-board .kanban-board-header .btn-default.btn:active {
|
||||
border-color: transparent;
|
||||
}
|
||||
.app-kanban .kanban-wrapper .kanban-container .kanban-board .kanban-board-header .dropdown .dropdown-toggle:after {
|
||||
display: none;
|
||||
}
|
||||
.app-kanban .kanban-wrapper .kanban-container .kanban-board .kanban-drag {
|
||||
min-height: 1rem;
|
||||
min-width: 16.25rem;
|
||||
padding: 0;
|
||||
}
|
||||
.app-kanban .kanban-wrapper .kanban-container .kanban-board .kanban-title-button {
|
||||
position: absolute;
|
||||
left: -4px;
|
||||
bottom: 0;
|
||||
margin: -1.5rem 0;
|
||||
font-weight: 400;
|
||||
}
|
||||
.app-kanban .kanban-wrapper .kanban-container .kanban-board .kanban-title-button:focus {
|
||||
box-shadow: none;
|
||||
}
|
||||
.app-kanban .kanban-wrapper .kanban-container .kanban-board .kanban-item {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: 16.25rem;
|
||||
padding: 1.5rem 1.5rem;
|
||||
margin-bottom: 1rem;
|
||||
border-radius: 0.375rem;
|
||||
}
|
||||
.app-kanban .kanban-wrapper .kanban-container .kanban-board .kanban-item .kanban-tasks-item-dropdown {
|
||||
display: none;
|
||||
position: absolute;
|
||||
right: 0.75rem;
|
||||
cursor: pointer;
|
||||
}
|
||||
.app-kanban .kanban-wrapper .kanban-container .kanban-board .kanban-item .kanban-tasks-item-dropdown .dropdown-toggle:after {
|
||||
display: none;
|
||||
}
|
||||
.app-kanban .kanban-wrapper .kanban-container .kanban-board .kanban-item:hover {
|
||||
box-shadow: rgba(0, 0, 0, 0.1) 0 4px 20px 0;
|
||||
}
|
||||
.app-kanban .kanban-wrapper .kanban-container .kanban-board .kanban-item:hover .kanban-tasks-item-dropdown {
|
||||
display: block;
|
||||
}
|
||||
.app-kanban .kanban-add-new-board {
|
||||
float: left;
|
||||
padding: 0 0.75rem;
|
||||
}
|
||||
.app-kanban .kanban-add-new-board .kanban-add-board-btn {
|
||||
padding-bottom: 1rem;
|
||||
}
|
||||
.app-kanban .kanban-add-new-board label {
|
||||
font-size: 1.125rem;
|
||||
font-weight: 500;
|
||||
margin-bottom: 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
.app-kanban .kanban-update-item-sidebar {
|
||||
text-align: left;
|
||||
}
|
||||
.app-kanban .kanban-update-item-sidebar .comment-editor.ql-container {
|
||||
border-top-left-radius: 0.375rem;
|
||||
border-top-right-radius: 0.375rem;
|
||||
}
|
||||
.app-kanban .kanban-update-item-sidebar .comment-editor .ql-editor {
|
||||
min-height: 7rem;
|
||||
background: unset;
|
||||
}
|
||||
.app-kanban .kanban-update-item-sidebar .comment-toolbar.ql-toolbar {
|
||||
width: 100%;
|
||||
text-align: right;
|
||||
border-top: 0;
|
||||
border-bottom-right-radius: 0.375rem;
|
||||
border-bottom-left-radius: 0.375rem;
|
||||
border-top-left-radius: 0;
|
||||
border-top-right-radius: 0;
|
||||
}
|
||||
|
||||
.kanban-board.gu-mirror .kanban-board-header .dropdown {
|
||||
display: none;
|
||||
}
|
||||
.kanban-board.gu-mirror .kanban-item .kanban-tasks-item-dropdown .dropdown-toggle:after {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.kanban-item.gu-mirror .kanban-tasks-item-dropdown .dropdown-toggle:after {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.kanban-board.is-moving.gu-mirror .kanban-drag {
|
||||
padding-right: 20px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.light-style .app-kanban .kanban-board .kanban-board-header {
|
||||
color: #384551;
|
||||
}
|
||||
.light-style .app-kanban .kanban-board .kanban-board-header .kanban-title-button {
|
||||
color: #384551;
|
||||
}
|
||||
.light-style .app-kanban .kanban-board .kanban-item {
|
||||
background-color: #fff;
|
||||
box-shadow: 0 0.1875rem 0.5rem 0 rgba(34, 48, 62, 0.1);
|
||||
}
|
||||
.light-style .app-kanban .kanban-board .kanban-item .kanban-text {
|
||||
color: #384551;
|
||||
}
|
||||
.light-style .app-kanban .kanban-add-new-board label {
|
||||
color: #384551;
|
||||
}
|
||||
|
||||
.dark-style .app-kanban .kanban-board .kanban-board-header {
|
||||
color: #d5d5e2;
|
||||
}
|
||||
.dark-style .app-kanban .kanban-board .kanban-board-header .kanban-title-button {
|
||||
color: #d5d5e2;
|
||||
}
|
||||
.dark-style .app-kanban .kanban-board .kanban-item {
|
||||
background-color: #2b2c40;
|
||||
box-shadow: 0 0.1875rem 0.5rem 0 rgba(20, 20, 29, 0.22);
|
||||
}
|
||||
.dark-style .app-kanban .kanban-board .kanban-item .kanban-text {
|
||||
color: #d5d5e2;
|
||||
}
|
||||
.dark-style .app-kanban .kanban-add-new-board label {
|
||||
color: #d5d5e2;
|
||||
}
|
||||
.dark-style .kanban-item.gu-mirror {
|
||||
background-color: #2b2c40;
|
||||
}
|
||||
|
||||
[dir=rtl] .app-kanban .kanban-board,
|
||||
[dir=rtl] .app-kanban .kanban-add-new-btn {
|
||||
float: right;
|
||||
}
|
||||
[dir=rtl] .app-kanban .kanban-board .kanban-board-header .kanban-title-button {
|
||||
left: auto !important;
|
||||
right: -8px;
|
||||
}
|
||||
[dir=rtl] .app-kanban .kanban-board .kanban-tasks-item-dropdown {
|
||||
left: 1.2rem;
|
||||
right: auto !important;
|
||||
}
|
||||
[dir=rtl] .app-kanban .kanban-update-item-sidebar {
|
||||
text-align: right;
|
||||
}
|
||||
[dir=rtl] .app-kanban .kanban-update-item-sidebar .comment-toolbar.ql-toolbar {
|
||||
text-align: right;
|
||||
}
|
||||
@ -0,0 +1,51 @@
|
||||
.vehicles-progress-labels .vehicles-progress-label {
|
||||
position: relative;
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
.vehicles-progress-labels .vehicles-progress-label::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
display: inline-block;
|
||||
height: 10px;
|
||||
width: 2px;
|
||||
}
|
||||
[dir=rtl] .vehicles-progress-labels .vehicles-progress-label::after {
|
||||
left: unset;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.vehicles-overview-progress .bg-gray-900 {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
#shipmentStatisticsChart .apexcharts-legend-series,
|
||||
#carrierPerformance .apexcharts-legend-series {
|
||||
padding: 4px 12px;
|
||||
padding-inline-start: 17px;
|
||||
border-radius: 0.375rem;
|
||||
height: 83%;
|
||||
}
|
||||
|
||||
.light-style .vehicles-progress-labels .vehicles-progress-label::after {
|
||||
background-color: #e4e6e8;
|
||||
}
|
||||
.light-style .vehicles-overview-progress .snackbar {
|
||||
background-color: #22303e;
|
||||
}
|
||||
.light-style #shipmentStatisticsChart .apexcharts-legend-series,
|
||||
.light-style #carrierPerformance .apexcharts-legend-series {
|
||||
border: 1px solid #e4e6e8;
|
||||
}
|
||||
|
||||
.dark-style .vehicles-progress-labels .vehicles-progress-label::after {
|
||||
background-color: #4e4f6c;
|
||||
}
|
||||
.dark-style .vehicles-overview-progress .snackbar {
|
||||
background-color: #e6e6f1;
|
||||
}
|
||||
.dark-style #shipmentStatisticsChart .apexcharts-legend-series,
|
||||
.dark-style #carrierPerformance .apexcharts-legend-series {
|
||||
border: 1px solid #4e4f6c;
|
||||
}
|
||||
@ -0,0 +1,96 @@
|
||||
.app-logistics-fleet-wrapper {
|
||||
position: relative;
|
||||
border: none;
|
||||
overflow: hidden;
|
||||
height: calc(100vh - 14.1rem);
|
||||
}
|
||||
@media (max-width: 1199.98px) {
|
||||
.app-logistics-fleet-wrapper {
|
||||
height: calc(100vh - 10.5rem);
|
||||
}
|
||||
}
|
||||
.layout-navbar-hidden .app-logistics-fleet-wrapper {
|
||||
height: calc(100vh - 6.5rem);
|
||||
}
|
||||
.layout-navbar-hidden .app-logistics-fleet-wrapper .logistics-fleet-sidebar-body {
|
||||
height: calc(100vh - 15.8rem + 4rem) !important;
|
||||
}
|
||||
.app-logistics-fleet-wrapper .app-logistics-fleet-sidebar {
|
||||
position: absolute;
|
||||
overflow: hidden;
|
||||
background-color: #fff;
|
||||
flex-grow: 0;
|
||||
flex-basis: 21.5rem;
|
||||
left: calc(-21.5rem - 1.2rem);
|
||||
height: 100%;
|
||||
width: 21.5rem;
|
||||
transition: all 0.3s;
|
||||
z-index: 2;
|
||||
}
|
||||
.app-logistics-fleet-wrapper .app-logistics-fleet-sidebar.show {
|
||||
left: 0;
|
||||
}
|
||||
.app-logistics-fleet-wrapper .close-sidebar {
|
||||
position: absolute;
|
||||
top: 0.5rem;
|
||||
right: 0.5rem;
|
||||
}
|
||||
.app-logistics-fleet-wrapper .logistics-fleet-sidebar-body {
|
||||
height: calc(100vh - 13rem);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
.app-logistics-fleet-wrapper .logistics-fleet-sidebar-body {
|
||||
height: calc(100vh - 15.8rem) !important;
|
||||
}
|
||||
}
|
||||
@media (max-width: 767.98px) {
|
||||
.app-logistics-fleet-wrapper {
|
||||
height: calc(100vh - 11.5rem);
|
||||
}
|
||||
.app-logistics-fleet-wrapper .logistics-fleet-sidebar-body {
|
||||
height: calc(100vh - 15.8rem + 0.8rem);
|
||||
}
|
||||
.layout-navbar-hidden .app-logistics-fleet-wrapper {
|
||||
height: calc(100vh - 7.5rem);
|
||||
}
|
||||
.layout-navbar-hidden .app-logistics-fleet-wrapper .logistics-fleet-sidebar-body {
|
||||
height: calc(100vh - 15.8rem + 2.5rem) !important;
|
||||
}
|
||||
}
|
||||
@media (min-width: 768px) {
|
||||
.app-logistics-fleet-wrapper .app-logistics-fleet-sidebar {
|
||||
position: static;
|
||||
height: auto;
|
||||
background-color: transparent !important;
|
||||
}
|
||||
}
|
||||
|
||||
[dir=rtl] .app-logistics-fleet-wrapper .app-logistics-fleet-sidebar {
|
||||
left: auto;
|
||||
right: calc(-21.5rem - 1.2rem);
|
||||
}
|
||||
[dir=rtl] .app-logistics-fleet-wrapper .app-logistics-fleet-sidebar.show {
|
||||
left: auto;
|
||||
right: 0;
|
||||
}
|
||||
[dir=rtl] .app-logistics-fleet-wrapper .close-sidebar {
|
||||
position: absolute;
|
||||
top: 0.5rem;
|
||||
left: 0.5rem;
|
||||
right: auto;
|
||||
}
|
||||
|
||||
.light-style .btn-white.btn-white-dark-variant {
|
||||
color: #384551;
|
||||
box-shadow: 0 0.0625rem 0.3175rem 0 rgba(34, 48, 62, 0.06) !important;
|
||||
}
|
||||
|
||||
.dark-style .app-logistics-fleet-wrapper .app-logistics-fleet-sidebar {
|
||||
background-color: #2b2c40;
|
||||
}
|
||||
.dark-style .app-logistics-fleet-wrapper .btn-white.btn-white-dark-variant {
|
||||
border-color: #2b2c40;
|
||||
background-color: #2b2c40;
|
||||
color: #d5d5e2;
|
||||
box-shadow: 0 0.0625rem 0.3175rem 0 rgba(20, 20, 29, 0.18) !important;
|
||||
}
|
||||
@ -0,0 +1,76 @@
|
||||
.report-list .report-list-item {
|
||||
padding: 0.75rem 1rem;
|
||||
}
|
||||
.report-list .report-list-icon {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
min-height: 40px;
|
||||
min-width: 40px;
|
||||
}
|
||||
|
||||
.vehicles-progress-labels .vehicles-progress-label {
|
||||
position: relative;
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
.vehicles-progress-labels .vehicles-progress-label::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
display: inline-block;
|
||||
height: 10px;
|
||||
width: 2px;
|
||||
}
|
||||
[dir=rtl] .vehicles-progress-labels .vehicles-progress-label::after {
|
||||
left: unset;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.vehicles-overview-progress .bg-gray-900 {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
#shipmentStatisticsChart .apexcharts-legend-series,
|
||||
#carrierPerformance .apexcharts-legend-series {
|
||||
padding: 4px 12px;
|
||||
padding-inline-start: 17px;
|
||||
border-radius: 0.375rem;
|
||||
height: 83%;
|
||||
}
|
||||
|
||||
.light-style .report-list .report-list-item {
|
||||
background-color: rgba(34, 48, 62, 0.06);
|
||||
}
|
||||
.light-style .report-list .report-list-icon {
|
||||
background-color: #fff;
|
||||
border-radius: 0.375rem;
|
||||
}
|
||||
.light-style .vehicles-progress-labels .vehicles-progress-label::after {
|
||||
background-color: #e4e6e8;
|
||||
}
|
||||
.light-style .vehicles-overview-progress .snackbar {
|
||||
background-color: #22303e;
|
||||
}
|
||||
.light-style #shipmentStatisticsChart .apexcharts-legend-series,
|
||||
.light-style #carrierPerformance .apexcharts-legend-series {
|
||||
border: 1px solid #e4e6e8;
|
||||
}
|
||||
|
||||
.dark-style .report-list .report-list-item {
|
||||
background-color: rgba(230, 230, 241, 0.06);
|
||||
}
|
||||
.dark-style .report-list .report-list-icon {
|
||||
background-color: #2b2c40;
|
||||
border-radius: 0.375rem;
|
||||
}
|
||||
.dark-style .vehicles-progress-labels .vehicles-progress-label::after {
|
||||
background-color: #4e4f6c;
|
||||
}
|
||||
.dark-style .vehicles-overview-progress .snackbar {
|
||||
background-color: #e6e6f1;
|
||||
}
|
||||
.dark-style #shipmentStatisticsChart .apexcharts-legend-series,
|
||||
.dark-style #carrierPerformance .apexcharts-legend-series {
|
||||
border: 1px solid #4e4f6c;
|
||||
}
|
||||
@ -0,0 +1,196 @@
|
||||
/**
|
||||
* Dashboard specific styles for XIT Framework
|
||||
*/
|
||||
|
||||
/* Dashboard Cards */
|
||||
.dashboard-card {
|
||||
position: relative;
|
||||
border-radius: 0.5rem;
|
||||
box-shadow: 0 0.25rem 1rem rgba(0, 0, 0, 0.05);
|
||||
transition: all 0.3s ease;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.dashboard-card:hover {
|
||||
transform: translateY(-5px);
|
||||
box-shadow: 0 0.5rem 1.5rem rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.dashboard-card .card-body {
|
||||
padding: 1.5rem;
|
||||
}
|
||||
|
||||
.dashboard-card .card-title {
|
||||
font-weight: 600;
|
||||
margin-bottom: 0.75rem;
|
||||
}
|
||||
|
||||
.dashboard-card .card-subtitle {
|
||||
color: #6c757d;
|
||||
margin-bottom: 1.25rem;
|
||||
}
|
||||
|
||||
/* Stats Cards */
|
||||
.stats-card {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.stats-card-icon {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 3.5rem;
|
||||
height: 3.5rem;
|
||||
border-radius: 0.5rem;
|
||||
margin-right: 1rem;
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
.stats-card-content {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.stats-card-value {
|
||||
font-size: 1.75rem;
|
||||
font-weight: 600;
|
||||
margin-bottom: 0.25rem;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.stats-card-label {
|
||||
color: #6c757d;
|
||||
font-size: 0.875rem;
|
||||
}
|
||||
|
||||
.stats-card-trend {
|
||||
font-size: 0.875rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-top: 0.25rem;
|
||||
}
|
||||
|
||||
.stats-card-trend.positive {
|
||||
color: #28a745;
|
||||
}
|
||||
|
||||
.stats-card-trend.negative {
|
||||
color: #dc3545;
|
||||
}
|
||||
|
||||
.stats-card-trend i {
|
||||
margin-right: 0.25rem;
|
||||
}
|
||||
|
||||
/* Activity Timeline */
|
||||
.activity-timeline {
|
||||
position: relative;
|
||||
padding-left: 1.5rem;
|
||||
}
|
||||
|
||||
.activity-timeline::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0.5rem;
|
||||
width: 2px;
|
||||
background-color: #e9ecef;
|
||||
}
|
||||
|
||||
.activity-item {
|
||||
position: relative;
|
||||
padding-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.activity-item:last-child {
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.activity-item::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: -1.5rem;
|
||||
width: 1rem;
|
||||
height: 1rem;
|
||||
border-radius: 50%;
|
||||
background-color: #fff;
|
||||
border: 2px solid #6c757d;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.activity-item.success::before {
|
||||
border-color: #28a745;
|
||||
}
|
||||
|
||||
.activity-item.warning::before {
|
||||
border-color: #ffc107;
|
||||
}
|
||||
|
||||
.activity-item.danger::before {
|
||||
border-color: #dc3545;
|
||||
}
|
||||
|
||||
.activity-item.info::before {
|
||||
border-color: #17a2b8;
|
||||
}
|
||||
|
||||
.activity-item.primary::before {
|
||||
border-color: #007bff;
|
||||
}
|
||||
|
||||
.activity-time {
|
||||
font-size: 0.75rem;
|
||||
color: #6c757d;
|
||||
margin-bottom: 0.25rem;
|
||||
}
|
||||
|
||||
.activity-title {
|
||||
font-weight: 600;
|
||||
margin-bottom: 0.25rem;
|
||||
}
|
||||
|
||||
.activity-text {
|
||||
color: #6c757d;
|
||||
font-size: 0.875rem;
|
||||
}
|
||||
|
||||
/* Charts */
|
||||
.chart-container {
|
||||
position: relative;
|
||||
height: 300px;
|
||||
}
|
||||
|
||||
/* Recent Users */
|
||||
.recent-users .avatar {
|
||||
width: 2.5rem;
|
||||
height: 2.5rem;
|
||||
}
|
||||
|
||||
.recent-users .table td {
|
||||
vertical-align: middle;
|
||||
padding: 0.75rem 1rem;
|
||||
}
|
||||
|
||||
.recent-users .user-info {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.recent-users .user-name {
|
||||
font-weight: 600;
|
||||
margin-bottom: 0.25rem;
|
||||
}
|
||||
|
||||
.recent-users .user-email {
|
||||
font-size: 0.75rem;
|
||||
color: #6c757d;
|
||||
}
|
||||
|
||||
/* Responsive adjustments */
|
||||
@media (max-width: 992px) {
|
||||
.dashboard-card {
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,18 @@
|
||||
.help-center-header .input-wrapper {
|
||||
max-width: 29rem;
|
||||
}
|
||||
@media (max-width: 575.98px) {
|
||||
.help-center-header .input-wrapper {
|
||||
max-width: 80%;
|
||||
}
|
||||
}
|
||||
|
||||
.light-style .help-center-header .input-wrapper .input-group-text,
|
||||
.light-style .help-center-header .input-wrapper .form-control {
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.dark-style .help-center-header .input-wrapper .input-group-text,
|
||||
.dark-style .help-center-header .input-wrapper .form-control {
|
||||
background-color: #2b2c40;
|
||||
}
|
||||
@ -0,0 +1,274 @@
|
||||
.section-py {
|
||||
padding: 6.25rem 0;
|
||||
}
|
||||
@media (max-width: 1199.98px) {
|
||||
.section-py {
|
||||
padding: 5rem 0;
|
||||
}
|
||||
}
|
||||
@media (max-width: 767.98px) {
|
||||
.section-py {
|
||||
padding: 3rem 0;
|
||||
}
|
||||
}
|
||||
|
||||
.landing-hero {
|
||||
border-radius: 0 0 3.5rem 3.5rem;
|
||||
padding-top: 10.2rem;
|
||||
}
|
||||
.landing-hero::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: -1;
|
||||
}
|
||||
@media (min-width: 992px) {
|
||||
.landing-hero .hero-text-box {
|
||||
max-width: 34.375rem;
|
||||
margin: 0 auto;
|
||||
}
|
||||
}
|
||||
.landing-hero .hero-title {
|
||||
background: linear-gradient(to right, #28c76f 0%, #5a4aff 47.92%, #ff3739 100%);
|
||||
background-size: 200% auto;
|
||||
color: #384551;
|
||||
font-size: calc(1.3875rem + 1.65vw);
|
||||
background-clip: text;
|
||||
line-height: 1.2;
|
||||
text-fill-color: transparent;
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
animation: shine 2s ease-in-out infinite alternate;
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
.landing-hero .hero-title {
|
||||
font-size: 2.625rem;
|
||||
}
|
||||
}
|
||||
.landing-hero .landing-hero-btn .hero-btn-item {
|
||||
inset-inline-start: -94%;
|
||||
top: 65%;
|
||||
}
|
||||
.landing-hero .hero-animation-img {
|
||||
margin-bottom: -32rem;
|
||||
}
|
||||
@media (max-width: 1199.98px) {
|
||||
.landing-hero .hero-animation-img {
|
||||
margin-bottom: -20rem;
|
||||
}
|
||||
}
|
||||
@media (max-width: 575.98px) {
|
||||
.landing-hero .hero-animation-img {
|
||||
margin-bottom: -10rem;
|
||||
}
|
||||
}
|
||||
.landing-hero .hero-animation-img .hero-dashboard-img {
|
||||
width: 80%;
|
||||
margin: 0 auto;
|
||||
will-change: transform;
|
||||
transform-style: preserve-3d;
|
||||
transition: all 0.1s;
|
||||
}
|
||||
.landing-hero .hero-animation-img .hero-dashboard-img img {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.landing-hero-blank {
|
||||
padding-top: 26rem;
|
||||
}
|
||||
@media (max-width: 1199.98px) {
|
||||
.landing-hero-blank {
|
||||
padding-top: 15rem;
|
||||
}
|
||||
}
|
||||
@media (max-width: 575.98px) {
|
||||
.landing-hero-blank {
|
||||
padding-top: 7rem;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes shine {
|
||||
0% {
|
||||
background-position: 0% 50%;
|
||||
}
|
||||
80% {
|
||||
background-position: 50% 90%;
|
||||
}
|
||||
100% {
|
||||
background-position: 91% 100%;
|
||||
}
|
||||
}
|
||||
.landing-features .features-icon-wrapper .features-icon-box .features-icon-description {
|
||||
max-width: 19.25rem;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.landing-reviews {
|
||||
border-top-left-radius: 3.75rem;
|
||||
border-top-right-radius: 3.75rem;
|
||||
}
|
||||
.landing-reviews .swiper-reviews-carousel .swiper-button-prev,
|
||||
.landing-reviews .swiper-reviews-carousel .swiper-button-next {
|
||||
display: none;
|
||||
}
|
||||
.landing-reviews .swiper-reviews-carousel .swiper-slide {
|
||||
height: auto;
|
||||
padding: 0.8125rem;
|
||||
}
|
||||
.landing-reviews .swiper-reviews-carousel .client-logo {
|
||||
height: 1.375rem;
|
||||
object-fit: contain;
|
||||
}
|
||||
.landing-reviews .swiper-logo-carousel {
|
||||
padding-bottom: 6.25rem;
|
||||
}
|
||||
.landing-reviews .swiper-logo-carousel .swiper {
|
||||
max-width: 45rem;
|
||||
}
|
||||
.landing-reviews .swiper-logo-carousel .swiper .swiper-slide {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
.landing-reviews .swiper-logo-carousel .swiper .client-logo {
|
||||
max-height: 2.5rem;
|
||||
max-width: 95%;
|
||||
object-fit: contain;
|
||||
}
|
||||
|
||||
.landing-team .card,
|
||||
.landing-team .card .team-image-box {
|
||||
border-top-left-radius: 5.625rem;
|
||||
border-top-right-radius: 1.25rem;
|
||||
}
|
||||
.landing-team .card .card-body {
|
||||
border-bottom-left-radius: 0.375rem;
|
||||
border-bottom-right-radius: 0.375rem;
|
||||
}
|
||||
.landing-team .team-image-box {
|
||||
height: 11.5625rem;
|
||||
}
|
||||
.landing-team .team-image-box .card-img-position {
|
||||
height: 15rem;
|
||||
transform: translateX(-50%);
|
||||
max-width: 100%;
|
||||
object-fit: cover;
|
||||
}
|
||||
@media (max-width: 991.98px) {
|
||||
.landing-team .team-image-box .card-img-position {
|
||||
height: 13rem;
|
||||
}
|
||||
}
|
||||
@media (max-width: 575.98px) {
|
||||
.landing-team .team-image-box {
|
||||
height: 11rem;
|
||||
}
|
||||
}
|
||||
.landing-team .card .team-media-icons i {
|
||||
transition: all 0.2s ease-in-out;
|
||||
}
|
||||
|
||||
.landing-pricing {
|
||||
border-radius: 3.75rem;
|
||||
}
|
||||
.landing-pricing .pricing-plans-item {
|
||||
inset-inline-end: -56%;
|
||||
bottom: -0.5rem;
|
||||
}
|
||||
@media (max-width: 767.98px) {
|
||||
.landing-pricing .pricing-plans-item {
|
||||
inset-inline-end: 0;
|
||||
bottom: 1rem;
|
||||
}
|
||||
}
|
||||
.landing-pricing .pricing-list .badge.badge-center {
|
||||
width: 1rem;
|
||||
height: 1rem;
|
||||
}
|
||||
.landing-pricing .pricing-list .badge.badge-center i {
|
||||
margin-top: -5px;
|
||||
}
|
||||
.landing-pricing .price-yearly-toggle {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
.landing-pricing .card .card-header,
|
||||
.landing-pricing .card .card-body {
|
||||
padding: 2rem;
|
||||
padding-top: 3rem;
|
||||
}
|
||||
|
||||
.landing-faq {
|
||||
border-top-left-radius: 3.75rem;
|
||||
border-top-right-radius: 3.75rem;
|
||||
}
|
||||
.landing-faq .faq-image {
|
||||
max-width: 20rem;
|
||||
width: 80%;
|
||||
}
|
||||
|
||||
.landing-cta .cta-title {
|
||||
font-size: 2.125rem;
|
||||
}
|
||||
@media (max-width: 767.98px) {
|
||||
.landing-cta .cta-title {
|
||||
font-size: 1.8rem;
|
||||
}
|
||||
}
|
||||
|
||||
.landing-contact .text-heading {
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
.landing-contact .contact-img-box,
|
||||
.landing-contact .contact-img-box .contact-img {
|
||||
border-radius: 3.75rem 0.375rem 0.375rem 0.375rem;
|
||||
}
|
||||
.landing-contact .contact-img-box .contact-border-img {
|
||||
inset-block-start: -2.5rem;
|
||||
inset-inline-start: -2.8125rem;
|
||||
}
|
||||
|
||||
.light-style .landing-hero {
|
||||
background: linear-gradient(138.18deg, #eae8fd 0%, #fce5e6 94.44%);
|
||||
}
|
||||
.light-style .landing-hero::after {
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.dark-style .landing-hero {
|
||||
background: #1e2130;
|
||||
}
|
||||
.dark-style .landing-hero::after {
|
||||
background-color: #2b2c40;
|
||||
}
|
||||
|
||||
[dir=rtl] .landing-reviews-btns {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
flex-direction: row-reverse;
|
||||
gap: 1rem;
|
||||
}
|
||||
[dir=rtl] .landing-team .team-image-box .card-img-position {
|
||||
transform: translateX(50%) !important;
|
||||
}
|
||||
[dir=rtl] .landing-pricing .switch .switch-label {
|
||||
padding-right: 0;
|
||||
}
|
||||
[dir=rtl] .landing-pricing .switch .switch-label:first-child {
|
||||
padding-left: 0.5rem;
|
||||
}
|
||||
[dir=rtl] .landing-pricing .switch .switch-input ~ .switch-label {
|
||||
padding-right: 3rem;
|
||||
}
|
||||
[dir=rtl] .landing-contact .contact-img-box {
|
||||
border-radius: 0.375rem 3.75rem 0.375rem 0.375rem;
|
||||
}
|
||||
[dir=rtl] .landing-contact .contact-img-box::before {
|
||||
inset-block-start: -1.875rem;
|
||||
inset-inline-start: -3.125rem;
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
@ -0,0 +1,6 @@
|
||||
@media (max-width: 991.98px) {
|
||||
.section-py .card-body.border-end {
|
||||
border: 0 !important;
|
||||
border-bottom: 1px solid #e4e6e8 !important;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,29 @@
|
||||
.circle-bullets {
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
.pricing-plans-comparison .table tr > th:first-child,
|
||||
.pricing-plans-comparison .table tr > td:first-child {
|
||||
white-space: nowrap;
|
||||
text-align: start;
|
||||
}
|
||||
.pricing-plans-comparison .table tbody tr:last-child td {
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
.price-yearly-toggle {
|
||||
position: absolute;
|
||||
margin: auto;
|
||||
left: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
@media (min-width: 992px) {
|
||||
.pricing-free-trial img {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
inset-inline-end: 0;
|
||||
height: 115%;
|
||||
width: auto;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,282 @@
|
||||
.section-py {
|
||||
padding: 6.25rem 0;
|
||||
}
|
||||
@media (max-width: 1199.98px) {
|
||||
.section-py {
|
||||
padding: 4rem 0;
|
||||
}
|
||||
}
|
||||
@media (max-width: 767.98px) {
|
||||
.section-py {
|
||||
padding: 3rem 0;
|
||||
}
|
||||
}
|
||||
|
||||
.first-section-pt {
|
||||
padding-top: 11.28rem;
|
||||
}
|
||||
@media (max-width: 1199.98px) {
|
||||
.first-section-pt {
|
||||
padding-top: 7.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.card[class*=card-hover-border-] {
|
||||
transition: all 0.2s ease-in-out;
|
||||
}
|
||||
|
||||
.banner-bg-img {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
object-fit: cover;
|
||||
object-position: left;
|
||||
}
|
||||
|
||||
.section-title-img {
|
||||
height: 100%;
|
||||
width: 120%;
|
||||
inset-inline-start: -12%;
|
||||
top: 10px;
|
||||
}
|
||||
|
||||
.light-style body {
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.dark-style body {
|
||||
background-color: #2b2c40;
|
||||
}
|
||||
|
||||
nav.layout-navbar {
|
||||
backdrop-filter: unset !important;
|
||||
height: auto !important;
|
||||
z-index: 999 !important;
|
||||
background-color: transparent !important;
|
||||
}
|
||||
nav.layout-navbar::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
display: block;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
nav.layout-navbar.navbar-active::after {
|
||||
backdrop-filter: saturate(100%) blur(6px);
|
||||
-webkit-backdrop-filter: saturate(100%) blur(6px);
|
||||
}
|
||||
|
||||
.navbar.landing-navbar {
|
||||
box-shadow: none;
|
||||
transition: all 0.2s ease-in-out;
|
||||
transform: unset !important;
|
||||
padding-top: 0.614rem;
|
||||
padding-bottom: 0.614rem;
|
||||
margin-top: 1rem;
|
||||
border-width: 2px;
|
||||
border-style: solid;
|
||||
border-radius: 0.375rem;
|
||||
}
|
||||
.navbar.landing-navbar .navbar-nav .nav-link {
|
||||
padding: 0.5rem 0.625rem;
|
||||
margin-inline-end: 0.625rem;
|
||||
}
|
||||
@media (max-width: 1199.98px) {
|
||||
.navbar.landing-navbar .navbar-nav .nav-link {
|
||||
padding-left: 0.5rem;
|
||||
padding-right: 0.5rem;
|
||||
margin-inline-end: 0;
|
||||
}
|
||||
}
|
||||
.navbar.landing-navbar .navbar-nav .nav-item:last-child .nav-link {
|
||||
margin-inline-end: 0;
|
||||
}
|
||||
@media (min-width: 992px) {
|
||||
.navbar.landing-navbar .navbar-nav .nav-item.mega-dropdown > .dropdown-menu {
|
||||
max-width: 1300px;
|
||||
inset-inline-start: 50% !important;
|
||||
transform: translateX(-50%);
|
||||
top: 100%;
|
||||
}
|
||||
}
|
||||
@media (max-width: 991.98px) {
|
||||
.navbar.landing-navbar .navbar-nav .nav-item.mega-dropdown > .dropdown-menu {
|
||||
background: transparent;
|
||||
box-shadow: none;
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
.navbar.landing-navbar .navbar-nav .nav-item.mega-dropdown > .dropdown-menu .mega-dropdown-link {
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
margin: 0;
|
||||
font-weight: 400;
|
||||
}
|
||||
.navbar.landing-navbar .navbar-nav .nav-item.mega-dropdown > .dropdown-menu .mega-dropdown-link i {
|
||||
font-size: 1rem;
|
||||
font-weight: 700;
|
||||
margin-top: -0.125rem;
|
||||
}
|
||||
.navbar.landing-navbar .navbar-nav .nav-item .nav-img-col,
|
||||
.navbar.landing-navbar .navbar-nav .nav-item .nav-img-col img {
|
||||
border-radius: 0.625rem;
|
||||
}
|
||||
@media (max-width: 991.98px) {
|
||||
.navbar.landing-navbar .landing-menu-overlay {
|
||||
position: fixed;
|
||||
display: none;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: rgba(34, 48, 62, 0.78);
|
||||
transition: all 0.2s ease-in-out;
|
||||
z-index: 9998;
|
||||
}
|
||||
.navbar.landing-navbar .landing-nav-menu {
|
||||
position: fixed;
|
||||
display: block !important;
|
||||
height: 100%;
|
||||
max-width: 300px;
|
||||
width: 80%;
|
||||
padding: 1rem;
|
||||
inset-inline-start: -100%;
|
||||
top: 0;
|
||||
overflow-y: auto;
|
||||
transition: all 0.3s ease-in-out;
|
||||
z-index: 9999;
|
||||
}
|
||||
.navbar.landing-navbar .landing-nav-menu.show {
|
||||
inset-inline-start: 0;
|
||||
}
|
||||
.navbar.landing-navbar .landing-nav-menu.show ~ .landing-menu-overlay {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
.light-style .layout-navbar .navbar.landing-navbar {
|
||||
border-color: rgba(255, 255, 255, 0.68);
|
||||
background: rgba(255, 255, 255, 0.38);
|
||||
}
|
||||
.light-style .layout-navbar .navbar.landing-navbar .navbar-nav .nav-link {
|
||||
color: #384551;
|
||||
}
|
||||
.light-style .layout-navbar .navbar.landing-navbar .navbar-nav .show > .nav-link,
|
||||
.light-style .layout-navbar .navbar.landing-navbar .navbar-nav .active > .nav-link,
|
||||
.light-style .layout-navbar .navbar.landing-navbar .navbar-nav .nav-link.show,
|
||||
.light-style .layout-navbar .navbar.landing-navbar .navbar-nav .nav-link.active {
|
||||
color: #696cff !important;
|
||||
}
|
||||
.light-style .layout-navbar .navbar.landing-navbar .navbar-nav .nav-item.mega-dropdown > .dropdown-menu .mega-dropdown-link i {
|
||||
color: #646e78;
|
||||
}
|
||||
@media (max-width: 991.98px) {
|
||||
.light-style .layout-navbar .navbar.landing-navbar .landing-nav-menu {
|
||||
background-color: #fff;
|
||||
}
|
||||
}
|
||||
.light-style .layout-navbar.navbar-active .navbar.landing-navbar {
|
||||
background: #fff;
|
||||
box-shadow: 0 0.125rem 0.375rem 0 rgba(34, 48, 62, 0.08);
|
||||
}
|
||||
.light-style .layout-navbar .menu-text {
|
||||
color: #384551;
|
||||
}
|
||||
|
||||
.dark-style .layout-navbar .navbar.landing-navbar {
|
||||
border-color: rgba(65, 65, 95, 0.68);
|
||||
background-color: rgba(65, 65, 95, 0.38);
|
||||
}
|
||||
.dark-style .layout-navbar .navbar.landing-navbar .navbar-nav .nav-link {
|
||||
color: #d5d5e2;
|
||||
}
|
||||
.dark-style .layout-navbar .navbar.landing-navbar .navbar-nav .show > .nav-link,
|
||||
.dark-style .layout-navbar .navbar.landing-navbar .navbar-nav .active > .nav-link,
|
||||
.dark-style .layout-navbar .navbar.landing-navbar .navbar-nav .nav-link.show,
|
||||
.dark-style .layout-navbar .navbar.landing-navbar .navbar-nav .nav-link.active {
|
||||
color: #696cff !important;
|
||||
}
|
||||
.dark-style .layout-navbar .navbar.landing-navbar .navbar-nav .nav-item.mega-dropdown > .dropdown-menu .mega-dropdown-link i {
|
||||
color: #b2b2c4;
|
||||
}
|
||||
@media (max-width: 991.98px) {
|
||||
.dark-style .layout-navbar .navbar.landing-navbar .landing-nav-menu {
|
||||
background-color: #2b2c40;
|
||||
}
|
||||
}
|
||||
.dark-style .layout-navbar .navbar .menu-text {
|
||||
color: #d5d5e2;
|
||||
}
|
||||
.dark-style .layout-navbar.navbar-active .navbar.landing-navbar {
|
||||
background: #2b2c40;
|
||||
border-color: #2b2c40;
|
||||
box-shadow: 0 0.125rem 0.375rem 0 rgba(20, 20, 29, 0.2);
|
||||
}
|
||||
|
||||
@media (min-width: 992px) {
|
||||
[dir=rtl] .navbar.landing-navbar .navbar-nav .nav-item.mega-dropdown > .dropdown-menu {
|
||||
transform: translateX(50%);
|
||||
}
|
||||
}
|
||||
|
||||
.landing-footer .footer-link,
|
||||
.landing-footer .footer-text {
|
||||
color: #fff;
|
||||
opacity: 0.78;
|
||||
}
|
||||
.landing-footer .footer-title {
|
||||
color: #fff;
|
||||
opacity: 0.92;
|
||||
}
|
||||
.landing-footer .footer-bottom-text {
|
||||
color: #d3d4dc;
|
||||
}
|
||||
.landing-footer .footer-bottom {
|
||||
background-color: #282c3e;
|
||||
}
|
||||
.landing-footer .footer-link {
|
||||
transition: all 0.2s ease-in-out;
|
||||
}
|
||||
.landing-footer .footer-link:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
.landing-footer .footer-top {
|
||||
padding-top: 3.3rem;
|
||||
padding-bottom: 2.3rem;
|
||||
border-top-left-radius: 3.75rem;
|
||||
border-top-right-radius: 3.75rem;
|
||||
}
|
||||
@media (max-width: 767.98px) {
|
||||
.landing-footer .footer-top {
|
||||
padding: 3rem 0;
|
||||
}
|
||||
}
|
||||
.landing-footer .footer-top .footer-bg {
|
||||
object-position: center;
|
||||
}
|
||||
@media (min-width: 992px) {
|
||||
.landing-footer .footer-logo-description {
|
||||
max-width: 385px;
|
||||
}
|
||||
}
|
||||
.landing-footer .footer-form {
|
||||
max-width: 22.25rem;
|
||||
}
|
||||
.landing-footer .footer-form input {
|
||||
background-color: transparent;
|
||||
border-color: #4e4f6c;
|
||||
color: #fff;
|
||||
}
|
||||
.landing-footer .footer-form input:hover:not([disabled]):not([focus]) {
|
||||
border-color: #4e4f6c;
|
||||
}
|
||||
.landing-footer .footer-form input::placeholder {
|
||||
color: rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
.landing-footer .footer-form label {
|
||||
color: #d5d5e2;
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
.api-key-actions {
|
||||
position: absolute !important;
|
||||
top: 0.75rem;
|
||||
}
|
||||
html:not([dir=rtl]) .api-key-actions {
|
||||
right: 0.5rem;
|
||||
}
|
||||
[dir=rtl] .api-key-actions {
|
||||
left: 0.5rem;
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,41 @@
|
||||
.faq-header .input-wrapper {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
max-width: 450px;
|
||||
}
|
||||
@media (max-width: 575.98px) {
|
||||
.faq-header .input-wrapper {
|
||||
max-width: 70%;
|
||||
}
|
||||
}
|
||||
|
||||
.faq-nav-icon {
|
||||
font-size: 1.125rem;
|
||||
}
|
||||
|
||||
.faq-banner-img {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
object-fit: cover;
|
||||
object-position: left;
|
||||
border-radius: 0.375rem;
|
||||
}
|
||||
|
||||
.light-style .bg-faq-section {
|
||||
background-color: rgba(34, 48, 62, 0.06);
|
||||
}
|
||||
.light-style .faq-header .input-wrapper .input-group-text,
|
||||
.light-style .faq-header .input-wrapper .form-control {
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.dark-style .bg-faq-section {
|
||||
background-color: rgba(230, 230, 241, 0.06);
|
||||
}
|
||||
.dark-style .faq-header .input-wrapper .input-group-text,
|
||||
.dark-style .faq-header .input-wrapper .form-control {
|
||||
background-color: #2b2c40;
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
#icons-container .icon-card {
|
||||
width: 128px;
|
||||
}
|
||||
#icons-container .icon-card i {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
@media (max-width: 1024px) {
|
||||
#icons-container .icon-card {
|
||||
width: 126px;
|
||||
}
|
||||
}
|
||||
@media (max-width: 767.98px) {
|
||||
#icons-container .icon-card {
|
||||
width: 131px;
|
||||
}
|
||||
}
|
||||
@media (max-width: 414px) {
|
||||
#icons-container .icon-card {
|
||||
width: 110px;
|
||||
}
|
||||
}
|
||||
@media (max-width: 375px) {
|
||||
#icons-container .icon-card {
|
||||
width: 150px;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,8 @@
|
||||
.misc-wrapper {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
min-height: calc(100vh - 1.5rem * 2);
|
||||
text-align: center;
|
||||
}
|
||||
@ -0,0 +1,48 @@
|
||||
.pricing-plans-comparison .table tr > th:first-child,
|
||||
.pricing-plans-comparison .table tr > td:first-child {
|
||||
white-space: nowrap;
|
||||
text-align: start;
|
||||
}
|
||||
.pricing-plans-comparison .table tbody tr:last-child td {
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
.price-yearly-toggle {
|
||||
position: absolute;
|
||||
margin: auto;
|
||||
left: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.light-style .bg-alt-pricing {
|
||||
background-color: #f5f5f9;
|
||||
}
|
||||
.light-style .pricing-free-trial {
|
||||
background-color: #f3f3ff;
|
||||
}
|
||||
.light-style .pricing-faqs {
|
||||
background-color: #edeef0;
|
||||
}
|
||||
|
||||
.dark-style .bg-alt-pricing {
|
||||
background-color: #232333;
|
||||
}
|
||||
.dark-style .pricing-free-trial {
|
||||
background-color: #30314f;
|
||||
}
|
||||
.dark-style .pricing-faqs {
|
||||
background-color: #3a3b4e;
|
||||
}
|
||||
|
||||
@media (min-width: 992px) {
|
||||
.pricing-free-trial img {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
}
|
||||
html:not([dir=rtl]) .pricing-free-trial img {
|
||||
right: 0;
|
||||
}
|
||||
[dir=rtl] .pricing-free-trial img {
|
||||
left: 0;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,35 @@
|
||||
.user-profile-header-banner img {
|
||||
width: 100%;
|
||||
object-fit: cover;
|
||||
height: 250px;
|
||||
}
|
||||
|
||||
.user-profile-header {
|
||||
margin-top: -2rem;
|
||||
}
|
||||
.user-profile-header .user-profile-img {
|
||||
border: 5px solid;
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
.light-style .user-profile-header .user-profile-img {
|
||||
border-color: #fff;
|
||||
}
|
||||
|
||||
.dark-style .user-profile-header .user-profile-img {
|
||||
border-color: #2b2c40;
|
||||
}
|
||||
|
||||
.dataTables_wrapper .card-header .dataTables_filter label {
|
||||
margin-top: 0 !important;
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.user-profile-header-banner img {
|
||||
height: 150px;
|
||||
}
|
||||
.user-profile-header .user-profile-img {
|
||||
width: 100px;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,56 @@
|
||||
.user-card .user-info-title {
|
||||
min-width: 100px;
|
||||
}
|
||||
|
||||
.card.primary-shadow {
|
||||
box-shadow: 0 0.125rem 0.375rem 0 rgba(105, 108, 255, 0.3) !important;
|
||||
}
|
||||
|
||||
@media (min-width: 1200px) {
|
||||
.light-style .user-card .border-container-lg {
|
||||
border-right: 1px solid #e4e6e8;
|
||||
}
|
||||
.light-style[dir=rtl] .user-card .border-container-lg {
|
||||
border-right: 0;
|
||||
border-left: 1px solid #e4e6e8;
|
||||
}
|
||||
}
|
||||
@media (max-width: 1199.98px) {
|
||||
.light-style .user-card .border-container-lg {
|
||||
padding-bottom: 1rem;
|
||||
}
|
||||
}
|
||||
@media (min-width: 576px) {
|
||||
.light-style .user-card .border-container {
|
||||
border-right: 1px solid #e4e6e8;
|
||||
}
|
||||
.light-style .timeline .break-text {
|
||||
width: calc(100% - 90px);
|
||||
}
|
||||
.light-style[dir=rtl] .user-card .border-container {
|
||||
border-right: 0;
|
||||
border-left: 1px solid #e4e6e8;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 992px) {
|
||||
.dark-style .user-card .border-container-lg {
|
||||
border-right: 1px solid #4e4f6c;
|
||||
}
|
||||
.dark-style[dir=rtl] .user-card .border-container-lg {
|
||||
border-right: 0;
|
||||
border-left: 1px solid #4e4f6c;
|
||||
}
|
||||
}
|
||||
@media (min-width: 576px) {
|
||||
.dark-style .user-card .border-container {
|
||||
border-right: 1px solid #4e4f6c;
|
||||
}
|
||||
.dark-style .timeline .break-text {
|
||||
width: calc(100% - 90px);
|
||||
}
|
||||
.dark-style[dir=rtl] .user-card .border-container {
|
||||
border-right: 0;
|
||||
border-left: 1px solid #4e4f6c;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,52 @@
|
||||
.swiper {
|
||||
width: 100%;
|
||||
/* height: 100%; */
|
||||
height: 400px;
|
||||
}
|
||||
.swiper .swiper-slide {
|
||||
padding: 2rem 0;
|
||||
text-align: center;
|
||||
font-size: 1.5rem;
|
||||
background-color: #ecebed;
|
||||
background-position: center;
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
#swiper-multiple-slides,
|
||||
#swiper-3d-coverflow-effect {
|
||||
height: 300px;
|
||||
}
|
||||
|
||||
#swiper-3d-coverflow-effect .swiper-slide {
|
||||
max-width: 300px;
|
||||
}
|
||||
|
||||
#swiper-3d-cube-effect {
|
||||
max-width: 400px;
|
||||
}
|
||||
|
||||
#swiper-3d-flip-effect {
|
||||
padding: 50px;
|
||||
}
|
||||
|
||||
#swiper-gallery {
|
||||
height: 500px;
|
||||
}
|
||||
#swiper-gallery .gallery-top {
|
||||
height: 80%;
|
||||
width: 100%;
|
||||
}
|
||||
#swiper-gallery .gallery-thumbs {
|
||||
height: 20%;
|
||||
box-sizing: border-box;
|
||||
padding: 10px 0;
|
||||
}
|
||||
#swiper-gallery .gallery-thumbs .swiper-slide {
|
||||
width: 25%;
|
||||
height: 100%;
|
||||
opacity: 0.4;
|
||||
cursor: pointer;
|
||||
}
|
||||
#swiper-gallery .gallery-thumbs .swiper-slide-thumb-active {
|
||||
opacity: 1;
|
||||
}
|
||||
@ -0,0 +1,13 @@
|
||||
#wizard-checkout .bs-stepper-header {
|
||||
max-width: 800px;
|
||||
}
|
||||
|
||||
.list-group .btn-pinned.btn-close {
|
||||
top: 1.5rem !important;
|
||||
}
|
||||
html:not([dir=rtl]) .list-group .btn-pinned.btn-close {
|
||||
right: 1.5rem !important;
|
||||
}
|
||||
[dir=rtl] .list-group .btn-pinned.btn-close {
|
||||
left: 1.5rem !important;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue