mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
Merge branch 'master' into localize-datetime-admin
This commit is contained in:
commit
900105de05
169
CHANGELOG.md
169
CHANGELOG.md
@ -4,6 +4,175 @@ All notable changes to this project will be documented in this file. Dates are d
|
||||
|
||||
Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
|
||||
#### [1.6.1](https://github.com/gradido/gradido/compare/1.6.0...1.6.1)
|
||||
|
||||
- Check if user email is activated to make a creation. [`#1356`](https://github.com/gradido/gradido/pull/1356)
|
||||
- fix: Creation Confirmation User Ids [`#1345`](https://github.com/gradido/gradido/pull/1345)
|
||||
- fix and improve test [`1c833d3`](https://github.com/gradido/gradido/commit/1c833d394f502a7aed2b5a648c0171a2fe4ee1e6)
|
||||
- rewrote elopage hook to handle actual elopage hook [`65bc347`](https://github.com/gradido/gradido/commit/65bc3479fa169920eff57b5a2fa662a4090d7364)
|
||||
- simple test for mass creation, improved test for single creation [`ffc4727`](https://github.com/gradido/gradido/commit/ffc4727e7a7105ac5dc97515b901be8dbe415627)
|
||||
|
||||
#### [1.6.0](https://github.com/gradido/gradido/compare/1.5.1...1.6.0)
|
||||
|
||||
> 27 January 2022
|
||||
|
||||
- v1.6.0 [`#1357`](https://github.com/gradido/gradido/pull/1357)
|
||||
- fix updatePendingCreation method [`#1346`](https://github.com/gradido/gradido/pull/1346)
|
||||
- klicktipp_config [`#1348`](https://github.com/gradido/gradido/pull/1348)
|
||||
- 1351 form to create incorrect due to change of bootstrap version [`#1352`](https://github.com/gradido/gradido/pull/1352)
|
||||
- first draft of releaseplan [`#1349`](https://github.com/gradido/gradido/pull/1349)
|
||||
- Rechtschreibfehler behoben, entgültig zu endgültig [`#1354`](https://github.com/gradido/gradido/pull/1354)
|
||||
- production_deployment [`#1341`](https://github.com/gradido/gradido/pull/1341)
|
||||
- import_production_data [`#1324`](https://github.com/gradido/gradido/pull/1324)
|
||||
- remove division / 100 for GDT [`#1339`](https://github.com/gradido/gradido/pull/1339)
|
||||
- fix: Language Set Correctly after Page Reload in Admin Interface [`#1334`](https://github.com/gradido/gradido/pull/1334)
|
||||
- fix: Set Locale after Login [`#1328`](https://github.com/gradido/gradido/pull/1328)
|
||||
- deployment_community_parameters [`#1331`](https://github.com/gradido/gradido/pull/1331)
|
||||
- bold text if acive page [`#1337`](https://github.com/gradido/gradido/pull/1337)
|
||||
- 1303 thanks page after set password [`#1335`](https://github.com/gradido/gradido/pull/1335)
|
||||
- Changed the toasted message for successful creating a creation. [`#1332`](https://github.com/gradido/gradido/pull/1332)
|
||||
- Added a required to the password repeat field, errors are shown immed… [`#1333`](https://github.com/gradido/gradido/pull/1333)
|
||||
- fix_rejected_login [`#1329`](https://github.com/gradido/gradido/pull/1329)
|
||||
- defined fields for Transactionlist in UserSearch in Adminarea, add Lo… [`#1322`](https://github.com/gradido/gradido/pull/1322)
|
||||
- fix: Render Localized Balance in NavBar [`#1321`](https://github.com/gradido/gradido/pull/1321)
|
||||
- 1227 vergaenglichkeit besser darstellen [`#1312`](https://github.com/gradido/gradido/pull/1312)
|
||||
- 1300 gray out register button further when disabled [`#1316`](https://github.com/gradido/gradido/pull/1316)
|
||||
- change Admin Gradido-Logo font color to white [`#1315`](https://github.com/gradido/gradido/pull/1315)
|
||||
- 1299 remove text from register publisher [`#1317`](https://github.com/gradido/gradido/pull/1317)
|
||||
- 1249 gdd gdt values look displaced or cut off [`#1318`](https://github.com/gradido/gradido/pull/1318)
|
||||
- 1307 admin rename wallet to my account [`#1314`](https://github.com/gradido/gradido/pull/1314)
|
||||
- 1011 visualize and refine the register process [`#1136`](https://github.com/gradido/gradido/pull/1136)
|
||||
- New roadmap [`#1219`](https://github.com/gradido/gradido/pull/1219)
|
||||
- fix: Redirect after Email Confirmation [`#1308`](https://github.com/gradido/gradido/pull/1308)
|
||||
- fix_docker_logging [`#1309`](https://github.com/gradido/gradido/pull/1309)
|
||||
- feat: Paginate User Table [`#1293`](https://github.com/gradido/gradido/pull/1293)
|
||||
- Adding button, to link back to the login page from the error not activated page. [`#1297`](https://github.com/gradido/gradido/pull/1297)
|
||||
- [WIP] new_deployment_stage2 [`#1290`](https://github.com/gradido/gradido/pull/1290)
|
||||
- add icons in menu and navbarmenu [`#1298`](https://github.com/gradido/gradido/pull/1298)
|
||||
- Withdrew horrizontal scrollbar [`#1295`](https://github.com/gradido/gradido/pull/1295)
|
||||
- transactionCount false or transactionCount error text hide [`#1259`](https://github.com/gradido/gradido/pull/1259)
|
||||
- 1265 mouse hovering over pencil in settings [`#1270`](https://github.com/gradido/gradido/pull/1270)
|
||||
- Fix redirect to /logout, now redirects to the wallet login. [`#1285`](https://github.com/gradido/gradido/pull/1285)
|
||||
- feat: Test and Refactor Send Email [`#1224`](https://github.com/gradido/gradido/pull/1224)
|
||||
- new_deployment [`#1220`](https://github.com/gradido/gradido/pull/1220)
|
||||
- Withdrew space at the end of an locale definition. [`#1283`](https://github.com/gradido/gradido/pull/1283)
|
||||
- Fix removing from masscreationlist now gives right item to the left l… [`#1284`](https://github.com/gradido/gradido/pull/1284)
|
||||
- onboarding process document [`#1148`](https://github.com/gradido/gradido/pull/1148)
|
||||
- Don't show the language-switch on the /register page. [`#1282`](https://github.com/gradido/gradido/pull/1282)
|
||||
- language_updates_bernd [`#1260`](https://github.com/gradido/gradido/pull/1260)
|
||||
- Admin Logout redirectes to the wallet login page. [`#1271`](https://github.com/gradido/gradido/pull/1271)
|
||||
- fix: Admin Creation List [`#1276`](https://github.com/gradido/gradido/pull/1276)
|
||||
- fix: Override Existing Token in Response Header [`#1278`](https://github.com/gradido/gradido/pull/1278)
|
||||
- fix: Pass Language to Admin Interface [`#1280`](https://github.com/gradido/gradido/pull/1280)
|
||||
- feat: Seed Garrick Ollivander [`#1277`](https://github.com/gradido/gradido/pull/1277)
|
||||
- fix: Fix Update of Open Creations [`#1273`](https://github.com/gradido/gradido/pull/1273)
|
||||
- fix: Change Password in User Profile [`#1266`](https://github.com/gradido/gradido/pull/1266)
|
||||
- Wallet shows the wrong gdt sum (gdtSum * 100) [`#1269`](https://github.com/gradido/gradido/pull/1269)
|
||||
- 1240 account not activated needs a button to login page [`#1261`](https://github.com/gradido/gradido/pull/1261)
|
||||
- reverse filter for unregistered emails [`#1256`](https://github.com/gradido/gradido/pull/1256)
|
||||
- close row-details automatically when switching to multiple creation page [`#1245`](https://github.com/gradido/gradido/pull/1245)
|
||||
- change creationdatas if change pending creation [`#1244`](https://github.com/gradido/gradido/pull/1244)
|
||||
- 1230 details für wiederholte email bestaetigen versenden [`#1255`](https://github.com/gradido/gradido/pull/1255)
|
||||
- 1221 month names of the open creation in multiple creation [`#1222`](https://github.com/gradido/gradido/pull/1222)
|
||||
- Documentation Template-Overview-2021 PDF [`#1194`](https://github.com/gradido/gradido/pull/1194)
|
||||
- Admin create multiple pending creations [`#1203`](https://github.com/gradido/gradido/pull/1203)
|
||||
- feat: Catch No Cookies Allowed [`#1187`](https://github.com/gradido/gradido/pull/1187)
|
||||
- Remove confirmation of own pending creation [`#1215`](https://github.com/gradido/gradido/pull/1215)
|
||||
- feat: Test Create User Mutation [`#1217`](https://github.com/gradido/gradido/pull/1217)
|
||||
- #751 Änderungen auf Federation und Community-Erstellprozess [`#969`](https://github.com/gradido/gradido/pull/969)
|
||||
- 1055 concept of operations requirements [`#1129`](https://github.com/gradido/gradido/pull/1129)
|
||||
- Admin Translations German English [`#1218`](https://github.com/gradido/gradido/pull/1218)
|
||||
- Roadmap [`#1213`](https://github.com/gradido/gradido/pull/1213)
|
||||
- pr_admin_refactor [`#1214`](https://github.com/gradido/gradido/pull/1214)
|
||||
- 1197 admin interface created transactions list [`#1202`](https://github.com/gradido/gradido/pull/1202)
|
||||
- migration_0006_login_users_collation [`#1207`](https://github.com/gradido/gradido/pull/1207)
|
||||
- wrong_login_is_not_password_reset [`#1179`](https://github.com/gradido/gradido/pull/1179)
|
||||
- Moved reverse of the getPendingCreations to the AdminResolver instead… [`#1185`](https://github.com/gradido/gradido/pull/1185)
|
||||
- Withdrew password argument of createUser. [`#1206`](https://github.com/gradido/gradido/pull/1206)
|
||||
- fix_optin_code_regeneration [`#1195`](https://github.com/gradido/gradido/pull/1195)
|
||||
- 1057 display gdd balance when sending [`#1149`](https://github.com/gradido/gradido/pull/1149)
|
||||
- 1145 refactor admin resolver from master [`#1164`](https://github.com/gradido/gradido/pull/1164)
|
||||
- Error handling in GddTransactionList.vue [`#1183`](https://github.com/gradido/gradido/pull/1183)
|
||||
- state-balance balanceDate can't get the date of the last transaction [`#1182`](https://github.com/gradido/gradido/pull/1182)
|
||||
- feat: Frontend Refactor and Tests [`#1186`](https://github.com/gradido/gradido/pull/1186)
|
||||
- fix: No Nodemon in Database Scripts [`#1167`](https://github.com/gradido/gradido/pull/1167)
|
||||
- feat: Test Creation in Admin Interface [`#1172`](https://github.com/gradido/gradido/pull/1172)
|
||||
- 533 refactor menu remove tim [`#1162`](https://github.com/gradido/gradido/pull/1162)
|
||||
- database_docker_fixes [`#1176`](https://github.com/gradido/gradido/pull/1176)
|
||||
- naming_conventions_pending_tasks [`#1184`](https://github.com/gradido/gradido/pull/1184)
|
||||
- fix_i18n [`#1180`](https://github.com/gradido/gradido/pull/1180)
|
||||
- fix_corrupted_sender_balance [`#1178`](https://github.com/gradido/gradido/pull/1178)
|
||||
- Withdrew * 10000 and / 10000 since we need to store the full value. [`#1181`](https://github.com/gradido/gradido/pull/1181)
|
||||
- catch error Client certificate revoked and pass error.session-expired… [`#1152`](https://github.com/gradido/gradido/pull/1152)
|
||||
- feat: Test Apollo Provider in Frontend [`#1161`](https://github.com/gradido/gradido/pull/1161)
|
||||
- fix: Pending Creations are Updated Without Page Reload [`#1160`](https://github.com/gradido/gradido/pull/1160)
|
||||
- Error on upgrade database after downgrade [`#1119`](https://github.com/gradido/gradido/pull/1119)
|
||||
- Login fix creation validation [`#1159`](https://github.com/gradido/gradido/pull/1159)
|
||||
- login_call_resetPassword [`#1130`](https://github.com/gradido/gradido/pull/1130)
|
||||
- register add tabindex-1 on password show [`#1158`](https://github.com/gradido/gradido/pull/1158)
|
||||
- feat: Seed Transaction Creations [`#1146`](https://github.com/gradido/gradido/pull/1146)
|
||||
- Admin confirm pending creation [`#1153`](https://github.com/gradido/gradido/pull/1153)
|
||||
- Admin delete pending creation query [`#1141`](https://github.com/gradido/gradido/pull/1141)
|
||||
- fix: Catch Expired Session when Coming from Admin Interface [`#1151`](https://github.com/gradido/gradido/pull/1151)
|
||||
- docu_release [`#1138`](https://github.com/gradido/gradido/pull/1138)
|
||||
- feat: Verify Login in Admin Interface [`#1150`](https://github.com/gradido/gradido/pull/1150)
|
||||
- Admin pending creation queries [`#1140`](https://github.com/gradido/gradido/pull/1140)
|
||||
- 1137 publisher id as input field on register [`#1147`](https://github.com/gradido/gradido/pull/1147)
|
||||
- Admin pending creation [`#1135`](https://github.com/gradido/gradido/pull/1135)
|
||||
- feat: Setup Data Seeding [`#1121`](https://github.com/gradido/gradido/pull/1121)
|
||||
- fix_admin_token_renewal [`#1139`](https://github.com/gradido/gradido/pull/1139)
|
||||
- backend_rights [`#1126`](https://github.com/gradido/gradido/pull/1126)
|
||||
- Login admin interface [`#1125`](https://github.com/gradido/gradido/pull/1125)
|
||||
- Adminbereich first step [`#1116`](https://github.com/gradido/gradido/pull/1116)
|
||||
- Login hook elopage [`#1112`](https://github.com/gradido/gradido/pull/1112)
|
||||
- Since we don't make a request to the login_server we need to catch if… [`#1131`](https://github.com/gradido/gradido/pull/1131)
|
||||
- feat: Add Server Users Entity [`#1127`](https://github.com/gradido/gradido/pull/1127)
|
||||
- Stale: 1002-language-selection-register [`#1113`](https://github.com/gradido/gradido/pull/1113)
|
||||
- Error for removing coin animation [`#1120`](https://github.com/gradido/gradido/pull/1120)
|
||||
- Adding a check that the user is activated before letting them login. [`#1099`](https://github.com/gradido/gradido/pull/1099)
|
||||
- Changed the Auto increment so that it is done after the rollback and … [`#1128`](https://github.com/gradido/gradido/pull/1128)
|
||||
- Login call unsecure login [`#1095`](https://github.com/gradido/gradido/pull/1095)
|
||||
- feat: Setup Admin Interface [`#1045`](https://github.com/gradido/gradido/pull/1045)
|
||||
- login_call_updateUserInfos [`#1084`](https://github.com/gradido/gradido/pull/1084)
|
||||
- fix: Await Resolved Promises in Backend Unit Tests [`#1079`](https://github.com/gradido/gradido/pull/1079)
|
||||
- feat: Raise Test Coverage Frontend [`#1102`](https://github.com/gradido/gradido/pull/1102)
|
||||
- login_call_logout [`#1096`](https://github.com/gradido/gradido/pull/1096)
|
||||
- login_call_hasElopage [`#1083`](https://github.com/gradido/gradido/pull/1083)
|
||||
- login_call_create_user [`#1070`](https://github.com/gradido/gradido/pull/1070)
|
||||
- 1036 register page breaks without community [`#1043`](https://github.com/gradido/gradido/pull/1043)
|
||||
- Apollo create transactions without signation [`#1044`](https://github.com/gradido/gradido/pull/1044)
|
||||
- change getCustomRepository to createUser function [`#1046`](https://github.com/gradido/gradido/pull/1046)
|
||||
- fresh_install_instructions [`#1065`](https://github.com/gradido/gradido/pull/1065)
|
||||
- login_call_check_username [`#1037`](https://github.com/gradido/gradido/pull/1037)
|
||||
- feat: Setup Unit Tests for Resolvers in Backend [`#951`](https://github.com/gradido/gradido/pull/951)
|
||||
- Login hotfixes 1.5.1 [`#1075`](https://github.com/gradido/gradido/pull/1075)
|
||||
- vscode_suggest_extensions [`#1073`](https://github.com/gradido/gradido/pull/1073)
|
||||
- Documentation on the coin creation and the steps to have the accounts… [`#1052`](https://github.com/gradido/gradido/pull/1052)
|
||||
- fix open community server user account creation [`#1072`](https://github.com/gradido/gradido/pull/1072)
|
||||
- when creating the register page, everything in the form is set to blank [`#1025`](https://github.com/gradido/gradido/pull/1025)
|
||||
- Spelling error fixed 'Berechnungsformel' [`#1048`](https://github.com/gradido/gradido/pull/1048)
|
||||
- checkEmail.vue page text is displayed correctly now [`#1051`](https://github.com/gradido/gradido/pull/1051)
|
||||
- Adminarea old [`#1058`](https://github.com/gradido/gradido/pull/1058)
|
||||
- migrate_login_database [`#1031`](https://github.com/gradido/gradido/pull/1031)
|
||||
- Text changes for german and english. [`#1041`](https://github.com/gradido/gradido/pull/1041)
|
||||
- refactor: Transaction Component [`#1026`](https://github.com/gradido/gradido/pull/1026)
|
||||
- 1017 fixe dashboard layout safari [`#1038`](https://github.com/gradido/gradido/pull/1038)
|
||||
- 707 separate account overview and send [`#970`](https://github.com/gradido/gradido/pull/970)
|
||||
- Link to the funding contributions of gradido.net memberships [`#984`](https://github.com/gradido/gradido/pull/984)
|
||||
- fix: Decay Rounded to Ceil [`#1021`](https://github.com/gradido/gradido/pull/1021)
|
||||
- fix: Flaky Dashboard Layout Test on Logout [`#1024`](https://github.com/gradido/gradido/pull/1024)
|
||||
- Move Entity models into database [`#956`](https://github.com/gradido/gradido/pull/956)
|
||||
- Text 'No decay' replaced by the number 0.00 [`#1023`](https://github.com/gradido/gradido/pull/1023)
|
||||
- change text 'eingetraten' to 'eingetragen' [`#1022`](https://github.com/gradido/gradido/pull/1022)
|
||||
- fix: Test Default Publisher ID in Sidebar Menu [`#987`](https://github.com/gradido/gradido/pull/987)
|
||||
- increase_frontend_coverage [`#1020`](https://github.com/gradido/gradido/pull/1020)
|
||||
- analyse_bundle [`#1019`](https://github.com/gradido/gradido/pull/1019)
|
||||
- release_issue_template [`#1013`](https://github.com/gradido/gradido/pull/1013)
|
||||
- fix_changelog [`#1014`](https://github.com/gradido/gradido/pull/1014)
|
||||
- removed incorrect mnemonic lists [`08200f4`](https://github.com/gradido/gradido/commit/08200f49f2ceb5ac121534a19ad2a8347c900145)
|
||||
- update jest, install transform-require-context [`165ed18`](https://github.com/gradido/gradido/commit/165ed1801ba1aba862d0b0006d8c17e322c4b7ff)
|
||||
- rework roadmap [`b337bcd`](https://github.com/gradido/gradido/commit/b337bcd850423e67b2119c562575b0ec692dddf2)
|
||||
|
||||
#### [1.5.1](https://github.com/gradido/gradido/compare/1.5.0...1.5.1)
|
||||
|
||||
> 15 October 2021
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
"description": "Administraion Interface for Gradido",
|
||||
"main": "index.js",
|
||||
"author": "Moriz Wahl",
|
||||
"version": "0.1.0",
|
||||
"version": "1.6.1",
|
||||
"license": "MIT",
|
||||
"private": false,
|
||||
"scripts": {
|
||||
@ -28,7 +28,7 @@
|
||||
"babel-plugin-component": "^1.1.1",
|
||||
"babel-preset-env": "^1.7.0",
|
||||
"babel-preset-vue": "^2.0.2",
|
||||
"bootstrap": "^5.1.3",
|
||||
"bootstrap": "4.3.1",
|
||||
"bootstrap-vue": "^2.21.2",
|
||||
"core-js": "^3.6.5",
|
||||
"dotenv-webpack": "^7.0.3",
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
import { mount } from '@vue/test-utils'
|
||||
import CreationFormular from './CreationFormular.vue'
|
||||
import { createPendingCreation } from '../graphql/createPendingCreation'
|
||||
import { createPendingCreations } from '../graphql/createPendingCreations'
|
||||
|
||||
const localVue = global.localVue
|
||||
|
||||
@ -111,10 +113,14 @@ describe('CreationFormular', () => {
|
||||
describe('with single creation', () => {
|
||||
beforeEach(async () => {
|
||||
jest.clearAllMocks()
|
||||
await wrapper.setProps({ type: 'singleCreation', creation: [200, 400, 600] })
|
||||
await wrapper.setData({ rangeMin: 180 })
|
||||
await wrapper.setData({ text: 'Test create coins' })
|
||||
await wrapper.setData({ value: 90 })
|
||||
await wrapper.setProps({
|
||||
type: 'singleCreation',
|
||||
creation: [200, 400, 600],
|
||||
item: { email: 'benjamin@bluemchen.de' },
|
||||
})
|
||||
await wrapper.findAll('input[type="radio"]').at(1).setChecked()
|
||||
await wrapper.find('textarea').setValue('Test create coins')
|
||||
await wrapper.find('input[type="number"]').setValue(90)
|
||||
})
|
||||
|
||||
describe('first radio button', () => {
|
||||
@ -122,12 +128,8 @@ describe('CreationFormular', () => {
|
||||
await wrapper.findAll('input[type="radio"]').at(0).setChecked()
|
||||
})
|
||||
|
||||
it('sets rangeMin to 0', () => {
|
||||
expect(wrapper.vm.rangeMin).toBe(0)
|
||||
})
|
||||
|
||||
it('sets rangeMax to 200', () => {
|
||||
expect(wrapper.vm.rangeMax).toBe(200)
|
||||
expect(wrapper.vm.rangeMax).toBe(400)
|
||||
})
|
||||
|
||||
describe('sendForm', () => {
|
||||
@ -136,7 +138,18 @@ describe('CreationFormular', () => {
|
||||
})
|
||||
|
||||
it('sends ... to apollo', () => {
|
||||
expect(apolloMutateMock).toBeCalled()
|
||||
expect(apolloMutateMock).toBeCalledWith(
|
||||
expect.objectContaining({
|
||||
mutation: createPendingCreation,
|
||||
variables: {
|
||||
email: 'benjamin@bluemchen.de',
|
||||
creationDate: 'YYYY-MM-01',
|
||||
amount: 90,
|
||||
memo: 'Test create coins',
|
||||
moderator: 0,
|
||||
},
|
||||
}),
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
@ -325,6 +338,47 @@ describe('CreationFormular', () => {
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe('with mass creation', () => {
|
||||
beforeEach(async () => {
|
||||
jest.clearAllMocks()
|
||||
await wrapper.setProps({
|
||||
type: 'massCreation',
|
||||
creation: [200, 400, 600],
|
||||
items: [{ email: 'bob@baumeister.de' }, { email: 'bibi@bloxberg.de' }],
|
||||
})
|
||||
await wrapper.findAll('input[type="radio"]').at(1).setChecked()
|
||||
await wrapper.find('textarea').setValue('Test mass create coins')
|
||||
await wrapper.find('input[type="number"]').setValue(200)
|
||||
await wrapper.find('.test-submit').trigger('click')
|
||||
})
|
||||
|
||||
it('calls the API', () => {
|
||||
expect(apolloMutateMock).toBeCalledWith(
|
||||
expect.objectContaining({
|
||||
mutation: createPendingCreations,
|
||||
variables: {
|
||||
pendingCreations: [
|
||||
{
|
||||
email: 'bob@baumeister.de',
|
||||
creationDate: 'YYYY-MM-01',
|
||||
amount: 200,
|
||||
memo: 'Test mass create coins',
|
||||
moderator: 0,
|
||||
},
|
||||
{
|
||||
email: 'bibi@bloxberg.de',
|
||||
creationDate: 'YYYY-MM-01',
|
||||
amount: 200,
|
||||
memo: 'Test mass create coins',
|
||||
moderator: 0,
|
||||
},
|
||||
],
|
||||
},
|
||||
}),
|
||||
)
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@ -3,8 +3,10 @@
|
||||
{{ $t('creation_form.form') }}
|
||||
<div class="shadow p-3 mb-5 bg-white rounded">
|
||||
<b-form ref="creationForm">
|
||||
<b-row>
|
||||
<div class="ml-4">
|
||||
<label>{{ $t('creation_form.select_month') }}</label>
|
||||
</div>
|
||||
<b-row class="ml-4">
|
||||
<b-form-radio-group
|
||||
v-model="selected"
|
||||
:options="radioOptions"
|
||||
@ -35,7 +37,7 @@
|
||||
</b-input-group>
|
||||
</div>
|
||||
</b-row>
|
||||
<b-row class="m-4">
|
||||
<div class="m-4">
|
||||
<label>{{ $t('creation_form.enter_text') }}</label>
|
||||
<div>
|
||||
<b-form-textarea
|
||||
@ -46,9 +48,9 @@
|
||||
rows="3"
|
||||
></b-form-textarea>
|
||||
</div>
|
||||
</b-row>
|
||||
</div>
|
||||
<b-row class="m-4">
|
||||
<b-col class="text-center">
|
||||
<b-col class="text-left">
|
||||
<b-button type="reset" variant="danger" @click="$refs.creationForm.reset()">
|
||||
{{ $t('creation_form.reset') }}
|
||||
</b-button>
|
||||
|
||||
@ -2,8 +2,10 @@
|
||||
<div class="component-edit-creation-formular">
|
||||
<div class="shadow p-3 mb-5 bg-white rounded">
|
||||
<b-form ref="updateCreationForm">
|
||||
<b-row class="m-4">
|
||||
<div class="ml-4">
|
||||
<label>{{ $t('creation_form.select_month') }}</label>
|
||||
</div>
|
||||
<b-row class="m-4">
|
||||
<b-form-radio-group
|
||||
v-model="selected"
|
||||
:options="radioOptions"
|
||||
@ -12,7 +14,7 @@
|
||||
name="month-selection"
|
||||
></b-form-radio-group>
|
||||
</b-row>
|
||||
<b-row class="m-4">
|
||||
<div class="m-4">
|
||||
<label>{{ $t('creation_form.select_value') }}</label>
|
||||
<div>
|
||||
<b-input-group prepend="GDD" append=".00">
|
||||
@ -23,7 +25,6 @@
|
||||
:max="rangeMax"
|
||||
></b-form-input>
|
||||
</b-input-group>
|
||||
|
||||
<b-input-group prepend="0" :append="String(rangeMax)" class="mt-3">
|
||||
<b-form-input
|
||||
type="range"
|
||||
@ -34,8 +35,8 @@
|
||||
></b-form-input>
|
||||
</b-input-group>
|
||||
</div>
|
||||
</b-row>
|
||||
<b-row class="m-4">
|
||||
</div>
|
||||
<div class="m-4">
|
||||
<label>{{ $t('creation_form.enter_text') }}</label>
|
||||
<div>
|
||||
<b-form-textarea
|
||||
@ -46,9 +47,9 @@
|
||||
rows="3"
|
||||
></b-form-textarea>
|
||||
</div>
|
||||
</b-row>
|
||||
</div>
|
||||
<b-row class="m-4">
|
||||
<b-col class="text-center">
|
||||
<b-col class="text-left">
|
||||
<b-button type="reset" variant="danger" @click="$refs.updateCreationForm.reset()">
|
||||
{{ $t('creation_form.reset') }}
|
||||
</b-button>
|
||||
|
||||
@ -183,8 +183,10 @@ describe('UserTable', () => {
|
||||
expect(wrapper.findAll('tr:nth-child(1) > td').length).toBe(7)
|
||||
})
|
||||
|
||||
it('click button on fifth column', () => {
|
||||
wrapper.find('tbody tr td[aria-colindex="5"] button').trigger('click')
|
||||
it('find button on fifth column', () => {
|
||||
expect(
|
||||
wrapper.findAll('tr:nth-child(1) > td').at(5).find('button').isVisible(),
|
||||
).toBeTruthy()
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@ -47,7 +47,13 @@
|
||||
</template>
|
||||
|
||||
<template #cell(show_details)="row">
|
||||
<b-button variant="info" size="md" @click="rowToogleDetails(row, 0)" class="mr-2">
|
||||
<b-button
|
||||
variant="info"
|
||||
size="md"
|
||||
v-if="row.item.emailChecked"
|
||||
@click="rowToogleDetails(row, 0)"
|
||||
class="mr-2"
|
||||
>
|
||||
<b-icon :icon="row.detailsShowing ? 'eye-slash-fill' : 'eye-fill'"></b-icon>
|
||||
</b-button>
|
||||
</template>
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
"bookmark": "bookmark",
|
||||
"confirmed": "bestätigt",
|
||||
"creation_form": {
|
||||
"creation_for": "Schöpfung für",
|
||||
"creation_for": "Aktives Grundeinkommen für",
|
||||
"enter_text": "Text eintragen",
|
||||
"form": "Schöpfungsformular",
|
||||
"min_characters": "Mindestens 10 Zeichen eingeben",
|
||||
@ -40,7 +40,7 @@
|
||||
"overlay": {
|
||||
"confirm": {
|
||||
"no": "Nein, nicht speichern.",
|
||||
"question": "Willst du diese vorgespeicherte Schöpfung wirklich vollziehen und entgültig speichern?",
|
||||
"question": "Willst du diese vorgespeicherte Schöpfung wirklich vollziehen und endgültig speichern?",
|
||||
"text": "Nach dem Speichern ist der Datensatz nicht mehr änderbar und kann auch nicht mehr gelöscht werden. Bitte überprüfe genau, dass alles stimmt.",
|
||||
"title": "Schöpfung bestätigen!",
|
||||
"yes": "Ja, Schöpfung bestätigen und speichern!"
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
"bookmark": "Remember",
|
||||
"confirmed": "confirmed",
|
||||
"creation_form": {
|
||||
"creation_for": "Creation for",
|
||||
"creation_for": "Active Basic Income for",
|
||||
"enter_text": "Enter text",
|
||||
"form": "Creation form",
|
||||
"min_characters": "Enter at least 10 characters",
|
||||
|
||||
@ -3634,16 +3634,16 @@ bootstrap-vue@^2.21.2:
|
||||
portal-vue "^2.1.7"
|
||||
vue-functional-data-merge "^3.1.0"
|
||||
|
||||
bootstrap@4.3.1:
|
||||
version "4.3.1"
|
||||
resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.3.1.tgz#280ca8f610504d99d7b6b4bfc4b68cec601704ac"
|
||||
integrity sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag==
|
||||
|
||||
"bootstrap@>=4.5.3 <5.0.0":
|
||||
version "4.6.0"
|
||||
resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.6.0.tgz#97b9f29ac98f98dfa43bf7468262d84392552fd7"
|
||||
integrity sha512-Io55IuQY3kydzHtbGvQya3H+KorS/M9rSNyfCGCg9WZ4pyT/lCxIlpJgG1GXW/PswzC84Tr2fBYi+7+jFVQQBw==
|
||||
|
||||
bootstrap@^5.1.3:
|
||||
version "5.1.3"
|
||||
resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.1.3.tgz#ba081b0c130f810fa70900acbc1c6d3c28fa8f34"
|
||||
integrity sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q==
|
||||
|
||||
brace-expansion@^1.1.7:
|
||||
version "1.1.11"
|
||||
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
||||
|
||||
@ -1,8 +1,11 @@
|
||||
# Server
|
||||
PORT=4000
|
||||
JWT_SECRET=secret123
|
||||
JWT_EXPIRES_IN=10m
|
||||
GRAPHIQL=false
|
||||
GDT_API_URL=https://gdt.gradido.net
|
||||
|
||||
# Database
|
||||
DB_HOST=localhost
|
||||
DB_PORT=3306
|
||||
DB_USER=root
|
||||
@ -10,29 +13,34 @@ DB_PASSWORD=
|
||||
DB_DATABASE=gradido_community
|
||||
TYPEORM_LOGGING_RELATIVE_PATH=typeorm.backend.log
|
||||
|
||||
#EMAIL=true
|
||||
#EMAIL_USERNAME=
|
||||
#EMAIL_SENDER=
|
||||
#EMAIL_PASSWORD=
|
||||
#EMAIL_SMTP_URL=
|
||||
#EMAIL_SMTP_PORT=587
|
||||
#RESEND_TIME=1 minute, 60 => 1hour, 1440 (60 minutes * 24 hours) => 24 hours
|
||||
#RESEND_TIME=
|
||||
RESEND_TIME=10
|
||||
# Klicktipp
|
||||
KLICKTIPP=false
|
||||
KLICKTTIPP_API_URL=https://api.klicktipp.com
|
||||
KLICKTIPP_USER=gradido_test
|
||||
KLICKTIPP_PASSWORD=secret321
|
||||
KLICKTIPP_APIKEY_DE=SomeFakeKeyDE
|
||||
KLICKTIPP_APIKEY_EN=SomeFakeKeyEN
|
||||
|
||||
#EMAIL_LINK_VERIFICATION=http://localhost/checkEmail/{code}
|
||||
#EMAIL_LINK_SETPASSWORD=http://localhost/reset/{code}
|
||||
# Community
|
||||
COMMUNITY_NAME=Gradido Entwicklung
|
||||
COMMUNITY_URL=http://localhost/
|
||||
COMMUNITY_REGISTER_URL=http://localhost/register
|
||||
COMMUNITY_DESCRIPTION=Die lokale Entwicklungsumgebung von Gradido.
|
||||
|
||||
#KLICKTIPP_USER=
|
||||
#KLICKTIPP_PASSWORD=
|
||||
#KLICKTIPP_APIKEY_DE=
|
||||
#KLICKTIPP_APIKEY_EN=
|
||||
#KLICKTIPP=true
|
||||
COMMUNITY_NAME=
|
||||
COMMUNITY_URL=
|
||||
COMMUNITY_REGISTER_URL=
|
||||
COMMUNITY_DESCRIPTION=
|
||||
# Login Server
|
||||
LOGIN_APP_SECRET=21ffbbc616fe
|
||||
LOGIN_SERVER_KEY=a51ef8ac7ef1abf162fb7a65261acd7a
|
||||
|
||||
# EMail
|
||||
EMAIL=false
|
||||
EMAIL_USERNAME=gradido_email
|
||||
EMAIL_SENDER=info@gradido.net
|
||||
EMAIL_PASSWORD=xxx
|
||||
EMAIL_SMTP_URL=gmail.com
|
||||
EMAIL_SMTP_PORT=587
|
||||
EMAIL_LINK_VERIFICATION=http://localhost/checkEmail/{code}
|
||||
EMAIL_LINK_SETPASSWORD=http://localhost/reset/{code}
|
||||
RESEND_TIME=10
|
||||
|
||||
# Webhook
|
||||
WEBHOOK_ELOPAGE_SECRET=secret
|
||||
@ -1,8 +1,10 @@
|
||||
PORT=4000
|
||||
# Server
|
||||
JWT_SECRET=$JWT_SECRET
|
||||
JWT_EXPIRES_IN=10m
|
||||
GRAPHIQL=false
|
||||
GDT_API_URL=$GDT_API_URL
|
||||
|
||||
# Database
|
||||
DB_HOST=localhost
|
||||
DB_PORT=3306
|
||||
DB_USER=$DB_USER
|
||||
@ -10,26 +12,35 @@ DB_PASSWORD=$DB_PASSWORD
|
||||
DB_DATABASE=gradido_community
|
||||
TYPEORM_LOGGING_RELATIVE_PATH=$TYPEORM_LOGGING_RELATIVE_PATH
|
||||
|
||||
# Klicktipp
|
||||
KLICKTIPP=$KLICKTIPP
|
||||
KLICKTTIPP_API_URL=https://api.klicktipp.com
|
||||
KLICKTIPP_USER=$KLICKTIPP_USER
|
||||
KLICKTIPP_PASSWORD=$KLICKTIPP_PASSWORD
|
||||
KLICKTIPP_APIKEY_DE=$KLICKTIPP_APIKEY_DE
|
||||
KLICKTIPP_APIKEY_EN=$KLICKTIPP_APIKEY_EN
|
||||
|
||||
# Community
|
||||
COMMUNITY_NAME=$COMMUNITY_NAME
|
||||
COMMUNITY_URL=$COMMUNITY_URL
|
||||
COMMUNITY_REGISTER_URL=$COMMUNITY_REGISTER_URL
|
||||
COMMUNITY_DESCRIPTION=$COMMUNITY_DESCRIPTION
|
||||
|
||||
# Login Server
|
||||
LOGIN_APP_SECRET=21ffbbc616fe
|
||||
LOGIN_SERVER_KEY=a51ef8ac7ef1abf162fb7a65261acd7a
|
||||
|
||||
# EMail
|
||||
RESEND_TIME=10
|
||||
EMAIL=$EMAIL
|
||||
EMAIL_USERNAME=$EMAIL_USERNAME
|
||||
EMAIL_SENDER=$EMAIL_SENDER
|
||||
EMAIL_PASSWORD=$EMAIL_PASSWORD
|
||||
EMAIL_SMTP_URL=$EMAIL_SMTP_URL
|
||||
EMAIL_SMTP_PORT=587
|
||||
#RESEND_TIME=1 minute, 60 => 1hour, 1440 (60 minutes * 24 hours) => 24 hours
|
||||
RESEND_TIME=10
|
||||
|
||||
EMAIL_LINK_VERIFICATION=$EMAIL_LINK_VERIFICATION
|
||||
EMAIL_LINK_SETPASSWORD=$EMAIL_LINK_SETPASSWORD
|
||||
RESEND_TIME=10
|
||||
|
||||
#KLICKTIPP_USER=
|
||||
#KLICKTIPP_PASSWORD=
|
||||
#KLICKTIPP_APIKEY_DE=
|
||||
#KLICKTIPP_APIKEY_EN=
|
||||
#KLICKTIPP=true
|
||||
COMMUNITY_NAME=$COMMUNITY_NAME
|
||||
COMMUNITY_URL=$COMMUNITY_URL
|
||||
COMMUNITY_REGISTER_URL=$COMMUNITY_REGISTER_URL
|
||||
COMMUNITY_DESCRIPTION=$COMMUNITY_DESCRIPTION
|
||||
|
||||
# Webhook
|
||||
WEBHOOK_ELOPAGE_SECRET=$WEBHOOK_ELOPAGE_SECRET
|
||||
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "gradido-backend",
|
||||
"version": "1.5.1",
|
||||
"version": "1.6.1",
|
||||
"description": "Gradido unified backend providing an API-Service for Gradido Transactions",
|
||||
"main": "src/index.ts",
|
||||
"repository": "https://github.com/gradido/gradido/backend",
|
||||
|
||||
@ -43,6 +43,7 @@ const loginServer = {
|
||||
LOGIN_SERVER_KEY: process.env.LOGIN_SERVER_KEY || 'a51ef8ac7ef1abf162fb7a65261acd7a',
|
||||
}
|
||||
|
||||
// TODO: Hannes if I find you... this looks like blasphemy
|
||||
const resendTime = parseInt(process.env.RESEND_TIME ? process.env.RESEND_TIME : 'null')
|
||||
const email = {
|
||||
EMAIL: process.env.EMAIL === 'true' || false,
|
||||
|
||||
@ -23,6 +23,7 @@ import { UserTransactionRepository } from '../../typeorm/repository/UserTransact
|
||||
import { BalanceRepository } from '../../typeorm/repository/Balance'
|
||||
import { calculateDecay } from '../../util/decay'
|
||||
import { LoginUserRepository } from '../../typeorm/repository/LoginUser'
|
||||
import { LoginPendingTasksAdmin } from '@entity/LoginPendingTasksAdmin'
|
||||
|
||||
@Resolver()
|
||||
export class AdminResolver {
|
||||
@ -60,7 +61,10 @@ export class AdminResolver {
|
||||
): Promise<number[]> {
|
||||
const userRepository = getCustomRepository(UserRepository)
|
||||
const user = await userRepository.findByEmail(email)
|
||||
|
||||
const isActivated = await hasActivatedEmail(user.email)
|
||||
if (!isActivated) {
|
||||
throw new Error('Creation could not be saved, Email is not activated')
|
||||
}
|
||||
const creations = await getUserCreations(user.id)
|
||||
const creationDateObj = new Date(creationDate)
|
||||
if (isCreationValid(creations, amount, creationDateObj)) {
|
||||
@ -113,22 +117,32 @@ export class AdminResolver {
|
||||
const user = await userRepository.findByEmail(email)
|
||||
|
||||
const loginPendingTasksAdminRepository = getCustomRepository(LoginPendingTasksAdminRepository)
|
||||
const updatedCreation = await loginPendingTasksAdminRepository.findOneOrFail({ id })
|
||||
const pendingCreationToUpdate = await loginPendingTasksAdminRepository.findOneOrFail({ id })
|
||||
|
||||
if (updatedCreation.userId !== user.id)
|
||||
if (pendingCreationToUpdate.userId !== user.id) {
|
||||
throw new Error('user of the pending creation and send user does not correspond')
|
||||
}
|
||||
|
||||
updatedCreation.amount = BigInt(amount * 10000)
|
||||
updatedCreation.memo = memo
|
||||
updatedCreation.date = new Date(creationDate)
|
||||
updatedCreation.moderator = moderator
|
||||
const creationDateObj = new Date(creationDate)
|
||||
let creations = await getUserCreations(user.id)
|
||||
if (pendingCreationToUpdate.date.getMonth() === creationDateObj.getMonth()) {
|
||||
creations = updateCreations(creations, pendingCreationToUpdate)
|
||||
}
|
||||
|
||||
await loginPendingTasksAdminRepository.save(updatedCreation)
|
||||
if (!isCreationValid(creations, amount, creationDateObj)) {
|
||||
throw new Error('Creation is not valid')
|
||||
}
|
||||
pendingCreationToUpdate.amount = BigInt(amount * 10000)
|
||||
pendingCreationToUpdate.memo = memo
|
||||
pendingCreationToUpdate.date = new Date(creationDate)
|
||||
pendingCreationToUpdate.moderator = moderator
|
||||
|
||||
await loginPendingTasksAdminRepository.save(pendingCreationToUpdate)
|
||||
const result = new UpdatePendingCreation()
|
||||
result.amount = parseInt(amount.toString())
|
||||
result.memo = updatedCreation.memo
|
||||
result.date = updatedCreation.date
|
||||
result.moderator = updatedCreation.moderator
|
||||
result.memo = pendingCreationToUpdate.memo
|
||||
result.date = pendingCreationToUpdate.date
|
||||
result.moderator = pendingCreationToUpdate.moderator
|
||||
result.creation = await getUserCreations(user.id)
|
||||
|
||||
return result
|
||||
@ -322,6 +336,28 @@ async function getUserCreations(id: number): Promise<number[]> {
|
||||
]
|
||||
}
|
||||
|
||||
function updateCreations(creations: number[], pendingCreation: LoginPendingTasksAdmin): number[] {
|
||||
const dateMonth = moment().format('YYYY-MM')
|
||||
const dateLastMonth = moment().subtract(1, 'month').format('YYYY-MM')
|
||||
const dateBeforeLastMonth = moment().subtract(2, 'month').format('YYYY-MM')
|
||||
const creationDateMonth = moment(pendingCreation.date).format('YYYY-MM')
|
||||
|
||||
switch (creationDateMonth) {
|
||||
case dateMonth:
|
||||
creations[2] += parseInt(pendingCreation.amount.toString())
|
||||
break
|
||||
case dateLastMonth:
|
||||
creations[1] += parseInt(pendingCreation.amount.toString())
|
||||
break
|
||||
case dateBeforeLastMonth:
|
||||
creations[0] += parseInt(pendingCreation.amount.toString())
|
||||
break
|
||||
default:
|
||||
throw new Error('UpdatedCreationDate is not in the last three months')
|
||||
}
|
||||
return creations
|
||||
}
|
||||
|
||||
function isCreationValid(creations: number[], amount: number, creationDate: Date) {
|
||||
const dateMonth = moment().format('YYYY-MM')
|
||||
const dateLastMonth = moment().subtract(1, 'month').format('YYYY-MM')
|
||||
|
||||
@ -55,8 +55,8 @@ const createServer = async (context: any = serverContext): Promise<any> => {
|
||||
|
||||
// bodyparser json
|
||||
app.use(express.json())
|
||||
// bodyparser text for elopage
|
||||
app.use(express.text())
|
||||
// bodyparser urlencoded for elopage
|
||||
app.use(express.urlencoded({ extended: true }))
|
||||
|
||||
// Log every request
|
||||
/*
|
||||
|
||||
@ -39,65 +39,40 @@ export const elopageWebhook = async (req: any, res: any): Promise<void> => {
|
||||
res.status(200).end() // Responding is important
|
||||
const loginElopageBuyRepository = await getCustomRepository(LoginElopageBuysRepository)
|
||||
const loginElopageBuy = new LoginElopageBuys()
|
||||
let firstName = ''
|
||||
let lastName = ''
|
||||
const entries = req.body.split('&')
|
||||
entries.forEach((entry: string) => {
|
||||
const keyVal = entry.split('=')
|
||||
if (keyVal.length > 2) {
|
||||
throw new Error(`Error parsing entry '${entry}'`)
|
||||
}
|
||||
const key = keyVal[0]
|
||||
const val = decodeURIComponent(keyVal[1]).replace('+', ' ').trim()
|
||||
switch (key) {
|
||||
case 'product[affiliate_program_id]':
|
||||
loginElopageBuy.affiliateProgramId = parseInt(val)
|
||||
break
|
||||
case 'publisher[id]':
|
||||
loginElopageBuy.publisherId = parseInt(val)
|
||||
break
|
||||
case 'order_id':
|
||||
loginElopageBuy.orderId = parseInt(val)
|
||||
break
|
||||
case 'product_id':
|
||||
loginElopageBuy.productId = parseInt(val)
|
||||
break
|
||||
case 'product[price]':
|
||||
// TODO: WHAT THE ACTUAL FUK? Please save this as float in the future directly in the database
|
||||
loginElopageBuy.productPrice = Math.trunc(parseFloat(val) * 100)
|
||||
break
|
||||
case 'payer[email]':
|
||||
loginElopageBuy.payerEmail = val
|
||||
break
|
||||
case 'publisher[email]':
|
||||
loginElopageBuy.publisherEmail = val
|
||||
break
|
||||
case 'payment_state':
|
||||
loginElopageBuy.payed = val === 'paid'
|
||||
break
|
||||
case 'success_date':
|
||||
loginElopageBuy.successDate = new Date(val)
|
||||
break
|
||||
case 'event':
|
||||
loginElopageBuy.event = val
|
||||
break
|
||||
case 'membership[id]':
|
||||
// TODO this was never set on login_server - its unclear if this is the correct value
|
||||
loginElopageBuy.elopageUserId = parseInt(val)
|
||||
break
|
||||
case 'payer[first_name]':
|
||||
firstName = val
|
||||
break
|
||||
case 'payer[last_name]':
|
||||
lastName = val
|
||||
break
|
||||
default:
|
||||
// this is too spammy
|
||||
// eslint-disable-next-line no-console
|
||||
// console.log(`Unknown Elopage Value '${entry}'`)
|
||||
break
|
||||
}
|
||||
})
|
||||
|
||||
const {
|
||||
payer,
|
||||
product,
|
||||
publisher,
|
||||
// eslint-disable-next-line camelcase
|
||||
order_id,
|
||||
// eslint-disable-next-line camelcase
|
||||
product_id,
|
||||
// eslint-disable-next-line camelcase
|
||||
payment_state,
|
||||
// eslint-disable-next-line camelcase
|
||||
success_date,
|
||||
event,
|
||||
membership,
|
||||
} = req.body
|
||||
|
||||
loginElopageBuy.affiliateProgramId = parseInt(product.affiliate_program_id)
|
||||
loginElopageBuy.publisherId = parseInt(publisher.id)
|
||||
loginElopageBuy.orderId = parseInt(order_id)
|
||||
loginElopageBuy.productId = parseInt(product_id)
|
||||
// TODO: WHAT THE ACTUAL FUK? Please save this as float in the future directly in the database
|
||||
loginElopageBuy.productPrice = Math.trunc(parseFloat(product.price) * 100)
|
||||
loginElopageBuy.payerEmail = payer.email
|
||||
loginElopageBuy.publisherEmail = publisher.email
|
||||
// eslint-disable-next-line camelcase
|
||||
loginElopageBuy.payed = payment_state === 'paid'
|
||||
loginElopageBuy.successDate = new Date(success_date)
|
||||
loginElopageBuy.event = event
|
||||
// TODO this was never set on login_server - its unclear if this is the correct value
|
||||
loginElopageBuy.elopageUserId = parseInt(membership.id)
|
||||
|
||||
const firstName = payer.first_name
|
||||
const lastName = payer.last_name
|
||||
|
||||
// Do not process certain events
|
||||
if (['lesson.viewed', 'lesson.completed', 'lesson.commented'].includes(loginElopageBuy.event)) {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "gradido-database",
|
||||
"version": "0.0.1",
|
||||
"version": "1.6.1",
|
||||
"description": "Gradido Database Tool to execute database migrations",
|
||||
"main": "src/index.ts",
|
||||
"repository": "https://github.com/gradido/gradido/database",
|
||||
|
||||
@ -37,6 +37,12 @@ COMMUNITY_URL=https://stage1.gradido.net/
|
||||
COMMUNITY_REGISTER_URL=https://stage1.gradido.net/register
|
||||
COMMUNITY_DESCRIPTION=Gradido Development Stage1 Test Community
|
||||
|
||||
KLICKTIPP=false
|
||||
KLICKTIPP_USER=
|
||||
KLICKTIPP_PASSWORD=
|
||||
KLICKTIPP_APIKEY_DE=
|
||||
KLICKTIPP_APIKEY_EN=
|
||||
|
||||
# frontend
|
||||
GRAPHQL_URI=https://stage1.gradido.net/graphql
|
||||
ADMIN_AUTH_URL=https://stage1.gradido.net/admin/authenticate?token={token}
|
||||
|
||||
25
docu/ReleasePlaning/2022-01-27_V-1.6.0_Releaseplan.md
Normal file
25
docu/ReleasePlaning/2022-01-27_V-1.6.0_Releaseplan.md
Normal file
@ -0,0 +1,25 @@
|
||||
# Releaseplan V1.6.0
|
||||
|
||||
Die folgenden Schritte dienen zur Vorbereitung und Durchführung der Inbetriebnahme von Release V-1.6.0.
|
||||
|
||||
|
||||
| LfdNr. | Aktion | verantwortlich | Status<br />(Ok / Err / Ongoing) | Startzeit | Dauer in min | Endezeit |
|
||||
| ------ | ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | -------------------------------- | --------- | ------------ | -------- |
|
||||
| 1 | Finish all PRs & Finally merge everything | **@Hannes** **@ogerly** **@moriz** **@ulfgebh** | | | | |
|
||||
| 2 | Make a new version 1.6.0 | **@Developer** | | | | |
|
||||
| 2a | Deploy V1.6.0 on Stage 2 and make Tests to confirm a working release build | **@Developer @Bernd von Gradido** | | | | |
|
||||
| 3 | Setup Klicktip settings from old production on new production (?)Make a new version 1.6.0 | ****@ulfgebhardt** **@einhornimmon**** | | | | |
|
||||
| 4 | Deploy 1.6.0 on gdd.gradido.net and make sure things work as expected(rudimentary) | **@ulfgebhardt** | | | | |
|
||||
| 5a | Disable Klicktipp Hook to current production gdd1.gradido.com | **@einhornimmond** | | | | |
|
||||
| 5b | Disable Elopage Hook to current production gdd1.gradido.com | **@einhornimmond** | | | | |
|
||||
| 6 | Deploy Maintenance page to current production & enable it | **@einhornimmond** | | | | |
|
||||
| 7 | Shut down current production servers except mariadb & nginx serving the maintenance page | **@einhornimmond** | | | | |
|
||||
| 8 | Create backup from production (correct format & correct data) | **@einhornimmond** | | | | |
|
||||
| 9 | Shut down mariadb server | **@einhornimmond** | | | | |
|
||||
| 10 | Transmit backup to new production | **@ulfgebhardt** | | | | |
|
||||
| 11 | Import production data on new production | **@ulfgebhardt** | | | | |
|
||||
| 12a | Enable new Klicktipp hook to new production | **@einhornimmond** **@ulfgebhard** | | | | |
|
||||
| 12b | Enable new Elopage hooks to new production | **@einhornimmond** **@ulfgebhard** | | | | |
|
||||
| 13 | Do extended tests on the new production | **@Team** | | | | |
|
||||
| 14 | Have a permanent redirect from all old urls to the new production server:<br />Which one?<br />- URL1<br />- URL2<br />- etc. | **@einhornimmond** | | | | |
|
||||
| 15 | Update links on Wordpress to the new production server | **@Bernd von Gradido** | | | | |
|
||||
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "bootstrap-vue-gradido-wallet",
|
||||
"version": "1.5.1",
|
||||
"version": "1.6.1",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"start": "node run/server.js",
|
||||
@ -20,16 +20,11 @@
|
||||
"@vue/cli-plugin-unit-jest": "^4.5.12",
|
||||
"@vue/test-utils": "^1.1.3",
|
||||
"apollo-boost": "^0.4.9",
|
||||
"axios": "^0.21.1",
|
||||
"babel-core": "^7.0.0-bridge.0",
|
||||
"babel-jest": "^27.3.1",
|
||||
"babel-preset-vue": "^2.0.2",
|
||||
"bootstrap": "4.3.1",
|
||||
"bootstrap-vue": "^2.5.0",
|
||||
"d3": "^5.7.0",
|
||||
"datamaps": "^0.5.9",
|
||||
"date-fns": "^1.30.1",
|
||||
"dropzone": "^5.5.1",
|
||||
"bootstrap": "^4.5.3",
|
||||
"bootstrap-vue": "^2.21.2",
|
||||
"es6-promise": "^4.1.1",
|
||||
"eslint": "^7.25.0",
|
||||
"eslint-config-prettier": "^8.1.0",
|
||||
@ -44,31 +39,22 @@
|
||||
"express": "^4.17.1",
|
||||
"flatpickr": "^4.5.7",
|
||||
"flush-promises": "^1.0.2",
|
||||
"fuse.js": "^3.2.0",
|
||||
"google-maps": "^3.2.1",
|
||||
"graphql": "^15.5.1",
|
||||
"identity-obj-proxy": "^3.0.0",
|
||||
"jest": "^26.6.3",
|
||||
"jest-canvas-mock": "^2.3.1",
|
||||
"jest-environment-jsdom-sixteen": "^2.0.0",
|
||||
"nouislider": "^12.1.0",
|
||||
"particles-bg-vue": "1.2.3",
|
||||
"perfect-scrollbar": "^1.3.0",
|
||||
"portal-vue": "^2.1.7",
|
||||
"prettier": "^2.2.1",
|
||||
"qrcode": "^1.4.4",
|
||||
"quill": "^1.3.6",
|
||||
"regenerator-runtime": "^0.13.7",
|
||||
"sweetalert2": "^9.5.4",
|
||||
"vee-validate": "^3.4.5",
|
||||
"vue": "^2.6.11",
|
||||
"vue": "2.6.12",
|
||||
"vue-apollo": "^3.0.7",
|
||||
"vue-bootstrap-typeahead": "^0.2.6",
|
||||
"vue-cli-plugin-i18n": "^1.0.1",
|
||||
"vue-clickaway": "^2.2.2",
|
||||
"vue-clipboard2": "^0.3.0",
|
||||
"vue-flatpickr-component": "^8.1.2",
|
||||
"vue-focus": "^2.1.0",
|
||||
"vue-good-table": "^2.21.3",
|
||||
"vue-i18n": "^8.22.4",
|
||||
"vue-jest": "^3.0.7",
|
||||
"vue-loading-overlay": "^3.4.2",
|
||||
|
||||
@ -1,126 +0,0 @@
|
||||
/*!
|
||||
|
||||
=========================================================
|
||||
* Bootstrap Vue Gradido Wallet- v0.0.1
|
||||
=========================================================
|
||||
|
||||
* Product Page: https://www.gradido.net
|
||||
* Copyright 2020 Bernd Hückstädt - Gradido (https://www.gradido.net)
|
||||
|
||||
* Coded by www.gradido.net
|
||||
|
||||
=========================================================
|
||||
|
||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
*/
|
||||
|
||||
// Core
|
||||
|
||||
@import "custom/functions";
|
||||
@import "custom/variables";
|
||||
@import "custom/mixins";
|
||||
|
||||
// Bootstrap (4.1.3) components
|
||||
|
||||
@import "~bootstrap/scss/alert";
|
||||
@import "~bootstrap/scss/badge";
|
||||
@import "~bootstrap/scss/breadcrumb";
|
||||
@import "~bootstrap/scss/button-group";
|
||||
@import "~bootstrap/scss/buttons";
|
||||
@import "~bootstrap/scss/card";
|
||||
@import "~bootstrap/scss/carousel";
|
||||
@import "~bootstrap/scss/close";
|
||||
@import "~bootstrap/scss/code";
|
||||
@import "~bootstrap/scss/custom-forms";
|
||||
@import "~bootstrap/scss/dropdown";
|
||||
@import "~bootstrap/scss/forms";
|
||||
@import "~bootstrap/scss/grid";
|
||||
@import "~bootstrap/scss/images";
|
||||
@import "~bootstrap/scss/input-group";
|
||||
@import "~bootstrap/scss/jumbotron";
|
||||
@import "~bootstrap/scss/list-group";
|
||||
@import "~bootstrap/scss/media";
|
||||
@import "~bootstrap/scss/modal";
|
||||
@import "~bootstrap/scss/nav";
|
||||
@import "~bootstrap/scss/navbar";
|
||||
@import "~bootstrap/scss/pagination";
|
||||
@import "~bootstrap/scss/popover";
|
||||
@import "~bootstrap/scss/print";
|
||||
@import "~bootstrap/scss/progress";
|
||||
@import "~bootstrap/scss/reboot";
|
||||
@import "~bootstrap/scss/root";
|
||||
@import "~bootstrap/scss/tables";
|
||||
@import "~bootstrap/scss/toasts";
|
||||
@import "~bootstrap/scss/tooltip";
|
||||
@import "~bootstrap/scss/transitions";
|
||||
@import "~bootstrap/scss/type";
|
||||
@import "~bootstrap/scss/utilities";
|
||||
@import "~bootstrap/scss/variables";
|
||||
|
||||
// Utilities
|
||||
|
||||
@import "~bootstrap/scss/utilities/align";
|
||||
@import "~bootstrap/scss/utilities/background";
|
||||
@import "~bootstrap/scss/utilities/borders";
|
||||
@import "~bootstrap/scss/utilities/clearfix";
|
||||
@import "~bootstrap/scss/utilities/display";
|
||||
@import "~bootstrap/scss/utilities/embed";
|
||||
@import "~bootstrap/scss/utilities/flex";
|
||||
@import "~bootstrap/scss/utilities/float";
|
||||
@import "~bootstrap/scss/utilities/overflow";
|
||||
@import "~bootstrap/scss/utilities/position";
|
||||
@import "~bootstrap/scss/utilities/screenreaders";
|
||||
@import "~bootstrap/scss/utilities/shadows";
|
||||
@import "~bootstrap/scss/utilities/sizing";
|
||||
@import "~bootstrap/scss/utilities/spacing";
|
||||
@import "~bootstrap/scss/utilities/stretched-link";
|
||||
@import "~bootstrap/scss/utilities/text";
|
||||
@import "~bootstrap/scss/utilities/visibility";
|
||||
|
||||
|
||||
// Mixins
|
||||
|
||||
@import "~bootstrap/scss/mixins/alert";
|
||||
@import "~bootstrap/scss/mixins/badge";
|
||||
@import "~bootstrap/scss/mixins/border-radius";
|
||||
@import "~bootstrap/scss/mixins/box-shadow";
|
||||
@import "~bootstrap/scss/mixins/breakpoints";
|
||||
@import "~bootstrap/scss/mixins/buttons";
|
||||
@import "~bootstrap/scss/mixins/caret";
|
||||
@import "~bootstrap/scss/mixins/clearfix";
|
||||
@import "~bootstrap/scss/mixins/deprecate";
|
||||
@import "~bootstrap/scss/mixins/float";
|
||||
@import "~bootstrap/scss/mixins/forms";
|
||||
@import "~bootstrap/scss/mixins/gradients";
|
||||
@import "~bootstrap/scss/mixins/grid-framework";
|
||||
@import "~bootstrap/scss/mixins/grid";
|
||||
@import "~bootstrap/scss/mixins/hover";
|
||||
@import "~bootstrap/scss/mixins/image";
|
||||
@import "~bootstrap/scss/mixins/list-group";
|
||||
@import "~bootstrap/scss/mixins/lists";
|
||||
@import "~bootstrap/scss/mixins/nav-divider";
|
||||
@import "~bootstrap/scss/mixins/pagination";
|
||||
@import "~bootstrap/scss/mixins/reset-text";
|
||||
@import "~bootstrap/scss/mixins/resize";
|
||||
@import "~bootstrap/scss/mixins/screen-reader";
|
||||
@import "~bootstrap/scss/mixins/size";
|
||||
@import "~bootstrap/scss/mixins/table-row";
|
||||
@import "~bootstrap/scss/mixins/text-emphasis";
|
||||
@import "~bootstrap/scss/mixins/text-hide";
|
||||
@import "~bootstrap/scss/mixins/text-truncate";
|
||||
@import "~bootstrap/scss/mixins/transition";
|
||||
@import "~bootstrap/scss/mixins/visibility";
|
||||
|
||||
|
||||
// Argon utilities and components
|
||||
|
||||
@import "custom/reboot";
|
||||
@import "custom/utilities";
|
||||
@import "custom/components";
|
||||
|
||||
// Vendor (Plugins)
|
||||
|
||||
@import "custom/vendors";
|
||||
|
||||
|
||||
@ -1,39 +0,0 @@
|
||||
//
|
||||
// Dismissible alert
|
||||
//
|
||||
|
||||
.alert-dismissible {
|
||||
.close {
|
||||
top: 50%;
|
||||
right: $alert-padding-x;
|
||||
padding: 0;
|
||||
transform: translateY(-50%);
|
||||
color: rgba($white, .6);
|
||||
opacity: 1;
|
||||
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: rgba($white, .9);
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
@include media-breakpoint-down(xs) {
|
||||
top: 1rem;
|
||||
right: .5rem;
|
||||
}
|
||||
|
||||
&>span:not(.sr-only) {
|
||||
font-size: 1.5rem;
|
||||
background-color: transparent;
|
||||
color: rgba($white, .6);
|
||||
}
|
||||
|
||||
&:hover,
|
||||
&:focus {
|
||||
&>span:not(.sr-only) {
|
||||
background-color: transparent;
|
||||
color: rgba($white, .9);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,46 +0,0 @@
|
||||
//
|
||||
// Alert
|
||||
//
|
||||
|
||||
.alert {
|
||||
font-size: $font-size-sm;
|
||||
}
|
||||
|
||||
// Alert heading
|
||||
|
||||
.alert-heading {
|
||||
font-weight: $font-weight-bold;
|
||||
font-size: $h4-font-size;
|
||||
margin-top: .15rem;
|
||||
}
|
||||
|
||||
|
||||
// Alert icon
|
||||
.alert-icon {
|
||||
font-size: 1.25rem;
|
||||
margin-right: 1.25rem;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
|
||||
i.ni {
|
||||
position: relative;
|
||||
top: 1px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Alert text next to an alert icon
|
||||
.alert-text {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
|
||||
// Alert links
|
||||
|
||||
[class*="alert-"] {
|
||||
.alert-link {
|
||||
color: $white;
|
||||
border-bottom: 1px dotted rgba($white, .5);
|
||||
}
|
||||
}
|
||||
@ -1,22 +0,0 @@
|
||||
//
|
||||
// Avatar group
|
||||
//
|
||||
|
||||
// General styles
|
||||
|
||||
.avatar-group {
|
||||
.avatar {
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
border: 2px solid $card-bg;
|
||||
|
||||
&:hover {
|
||||
z-index: 3;
|
||||
}
|
||||
}
|
||||
|
||||
.avatar + .avatar {
|
||||
margin-left: -1rem;
|
||||
|
||||
}
|
||||
}
|
||||
@ -1,42 +0,0 @@
|
||||
//
|
||||
// Avatar
|
||||
//
|
||||
|
||||
// General styles
|
||||
|
||||
.avatar {
|
||||
color: $white;
|
||||
background-color: $gray-500;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 1rem;
|
||||
border-radius: 50%;
|
||||
height: 48px;
|
||||
width: 48px;
|
||||
|
||||
img {
|
||||
width: 100%;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
+ .avatar-content {
|
||||
display: inline-block;
|
||||
margin-left: .75rem;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Avatar size variations
|
||||
|
||||
.avatar-lg {
|
||||
width: 58px;
|
||||
height: 58px;
|
||||
font-size: $font-size-sm;
|
||||
}
|
||||
|
||||
.avatar-sm {
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
font-size: $font-size-sm;
|
||||
}
|
||||
@ -1,12 +0,0 @@
|
||||
//
|
||||
// Brand buttons
|
||||
//
|
||||
|
||||
|
||||
// Color variations
|
||||
|
||||
@each $color, $value in $brand-colors {
|
||||
.btn-#{$color} {
|
||||
@include button-variant($value, $value);
|
||||
}
|
||||
}
|
||||
@ -1,92 +0,0 @@
|
||||
//
|
||||
// Icon buttons
|
||||
//
|
||||
|
||||
.btn-icon {
|
||||
.btn-inner--icon {
|
||||
img {
|
||||
width: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-inner--text:not(:first-child) {
|
||||
margin-left: 0.75em;
|
||||
}
|
||||
|
||||
.btn-inner--text:not(:last-child) {
|
||||
margin-right: 0.75em;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Button only with icon and NO text
|
||||
|
||||
.btn-icon-only {
|
||||
width: 2.375rem;
|
||||
height: 2.375rem;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
a.btn-icon-only {
|
||||
line-height: 2.5;
|
||||
}
|
||||
|
||||
.btn-icon-only.btn-sm {
|
||||
width: 2rem;
|
||||
height: 2rem;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Clipboard button
|
||||
// dedicated element for copying icons
|
||||
//
|
||||
|
||||
.btn-icon-clipboard {
|
||||
margin: 0;
|
||||
padding: 1.5rem;
|
||||
font-size: $font-size-base;
|
||||
font-weight: $font-weight-normal;
|
||||
line-height: 1.25;
|
||||
color: $gray-800;
|
||||
background-color: $gray-100;
|
||||
border-radius: $border-radius;
|
||||
border: 0;
|
||||
text-align: left;
|
||||
font-family: inherit;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
text-decoration: none;
|
||||
-moz-appearance: none;
|
||||
cursor: pointer;
|
||||
width: 100%;
|
||||
margin: .5rem 0;
|
||||
|
||||
&:hover {
|
||||
background-color: $white;
|
||||
box-shadow: rgba(0, 0, 0, .1) 0 0 0 1px, rgba(0, 0, 0, .1) 0 4px 16px;
|
||||
}
|
||||
|
||||
> div {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
i {
|
||||
box-sizing: content-box;
|
||||
color: theme-color("primary");
|
||||
vertical-align: middle;
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
span {
|
||||
display: inline-block;
|
||||
font-size: 0.875rem;
|
||||
line-height: 1.5;
|
||||
margin-left: 16px;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
@ -1,91 +0,0 @@
|
||||
//
|
||||
// Icon buttons
|
||||
//
|
||||
|
||||
// General styles
|
||||
|
||||
.btn {
|
||||
position: relative;
|
||||
text-transform: $btn-text-transform;
|
||||
transition: $transition-base;
|
||||
letter-spacing: $btn-letter-spacing;
|
||||
font-size: $input-btn-font-size;
|
||||
will-change: transform;
|
||||
|
||||
&:hover {
|
||||
@include box-shadow($btn-hover-box-shadow);
|
||||
transform: translateY($btn-hover-translate-y);
|
||||
}
|
||||
|
||||
&:not(:last-child) {
|
||||
margin-right: .5rem;
|
||||
}
|
||||
|
||||
|
||||
// Icons
|
||||
|
||||
i:not(:first-child),
|
||||
svg:not(:first-child) {
|
||||
margin-left: .5rem;
|
||||
}
|
||||
|
||||
i:not(:last-child),
|
||||
svg:not(:last-child) {
|
||||
margin-right: .5rem;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Remove translateY and margin animation when btn is included in a btn-group or input-group
|
||||
|
||||
.btn-group,
|
||||
.input-group {
|
||||
.btn {
|
||||
margin-right: 0;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Size variations
|
||||
|
||||
.btn-sm {
|
||||
font-size: $input-btn-font-size-sm;
|
||||
}
|
||||
|
||||
.btn-lg {
|
||||
font-size: $input-btn-font-size-lg;
|
||||
}
|
||||
|
||||
|
||||
// Some quick fixes (to revise)
|
||||
|
||||
// Fixes
|
||||
[class*="btn-outline-"] {
|
||||
border-width: 1px;
|
||||
}
|
||||
|
||||
.btn-outline-secondary {
|
||||
color: darken(theme-color("secondary"), 50%);
|
||||
}
|
||||
|
||||
.btn-inner--icon {
|
||||
i:not(.fa) {
|
||||
position: relative;
|
||||
top: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-link {
|
||||
font-weight: $btn-font-weight;
|
||||
box-shadow: none;
|
||||
|
||||
&:hover {
|
||||
box-shadow: none;
|
||||
transform: none;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-neutral {
|
||||
color: theme-color("primary");
|
||||
}
|
||||
@ -1,10 +0,0 @@
|
||||
//
|
||||
// Card with hover animations
|
||||
//
|
||||
|
||||
.card-lift--hover {
|
||||
&:hover {
|
||||
transform: translateY(-20px);
|
||||
@include transition($transition-base);
|
||||
}
|
||||
}
|
||||
@ -1,17 +0,0 @@
|
||||
//
|
||||
// Card with blockquote
|
||||
//
|
||||
|
||||
.card-blockquote {
|
||||
padding: 2rem;
|
||||
position: relative;
|
||||
|
||||
.svg-bg {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 95px;
|
||||
position: absolute;
|
||||
top: -94px;
|
||||
left: 0;
|
||||
}
|
||||
}
|
||||
@ -1,49 +0,0 @@
|
||||
//
|
||||
// Profile card
|
||||
//
|
||||
|
||||
.card-profile-image {
|
||||
position: relative;
|
||||
|
||||
img {
|
||||
max-width: 180px;
|
||||
border-radius: $border-radius;
|
||||
@extend .shadow;
|
||||
transform: translate(-50%,-30%);
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
transition: $transition-base;
|
||||
|
||||
&:hover {
|
||||
transform: translate(-50%, -33%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.card-profile-stats {
|
||||
padding: 1rem 0;
|
||||
|
||||
> div {
|
||||
text-align: center;
|
||||
margin-right: 1rem;
|
||||
padding: .875rem;
|
||||
|
||||
&:last-child {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.heading {
|
||||
font-size: 1.1rem;
|
||||
font-weight: bold;
|
||||
display: block;
|
||||
}
|
||||
.description {
|
||||
font-size: .875rem;
|
||||
color: $gray-500;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.card-profile-actions {
|
||||
padding: .875rem;
|
||||
}
|
||||
@ -1,16 +0,0 @@
|
||||
//
|
||||
// Card stats
|
||||
//
|
||||
|
||||
.card-stats {
|
||||
.card-body {
|
||||
padding: 1rem 1.5rem;
|
||||
}
|
||||
|
||||
.card-status-bullet {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
transform: translate(50%, -50%);
|
||||
}
|
||||
}
|
||||
@ -1,8 +0,0 @@
|
||||
//
|
||||
// Card
|
||||
//
|
||||
|
||||
|
||||
.card-translucent {
|
||||
background-color: rgba(18, 91, 152, 0.08);
|
||||
}
|
||||
@ -1,69 +0,0 @@
|
||||
//
|
||||
// Chart
|
||||
//
|
||||
|
||||
.chart {
|
||||
position: relative;
|
||||
height: $chart-height;
|
||||
}
|
||||
|
||||
|
||||
// Size variations
|
||||
|
||||
.chart-sm {
|
||||
height: $chart-height-sm;
|
||||
}
|
||||
|
||||
|
||||
// Legend
|
||||
|
||||
.chart-legend {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
margin-top: $chart-legend-margin-top;
|
||||
font-size: $chart-legend-font-size;
|
||||
text-align: center;
|
||||
color: $chart-legend-color;
|
||||
}
|
||||
|
||||
.chart-legend-item {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
|
||||
+ .chart-legend-item {
|
||||
margin-left: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
.chart-legend-indicator {
|
||||
display: inline-block;
|
||||
width: 0.5rem;
|
||||
height: 0.5rem;
|
||||
margin-right: 0.375rem;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
|
||||
// Tooltip
|
||||
|
||||
#chart-tooltip {
|
||||
z-index: 0;
|
||||
|
||||
.arrow {
|
||||
top: 100%;
|
||||
left: 50%;
|
||||
transform: translateX(-50%) translateX(-.5rem);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Chart info overlay
|
||||
|
||||
.chart-info-overlay {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 5%;
|
||||
max-width: 350px;
|
||||
padding: 20px;
|
||||
z-index: 1;
|
||||
}
|
||||
@ -1,34 +0,0 @@
|
||||
//
|
||||
// Close
|
||||
//
|
||||
|
||||
.close {
|
||||
@if $enable-transitions {
|
||||
transition: $transition-base;
|
||||
}
|
||||
|
||||
&>span:not(.sr-only) {
|
||||
background-color: $close-bg;
|
||||
color: $close-color;
|
||||
line-height: 17px;
|
||||
height: 1.25rem;
|
||||
width: 1.25rem;
|
||||
border-radius: 50%;
|
||||
font-size: 1.25rem;
|
||||
display: block;
|
||||
@if $enable-transitions {
|
||||
transition: $transition-base;
|
||||
}
|
||||
}
|
||||
|
||||
&:hover,
|
||||
&:focus {
|
||||
background-color: $close-hover-bg;
|
||||
color: $close-hover-color;
|
||||
outline: none;
|
||||
|
||||
span:not(.sr-only) {
|
||||
background-color: $close-hover-bg;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,37 +0,0 @@
|
||||
//
|
||||
// Custom checkbox
|
||||
//
|
||||
|
||||
.custom-checkbox {
|
||||
.custom-control-input ~ .custom-control-label {
|
||||
cursor: pointer;
|
||||
font-size: $font-size-sm;
|
||||
}
|
||||
|
||||
.custom-control-input {
|
||||
&:checked {
|
||||
~ .custom-control-label {
|
||||
&::before {
|
||||
border-color: $custom-control-indicator-checked-border-color;
|
||||
}
|
||||
&::after {
|
||||
background-image: $custom-checkbox-indicator-icon-checked;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&:disabled {
|
||||
~ .custom-control-label {
|
||||
&::before {
|
||||
border-color: $custom-control-indicator-disabled-bg;
|
||||
}
|
||||
}
|
||||
|
||||
&:checked {
|
||||
&::before {
|
||||
border-color: $custom-control-indicator-checked-disabled-bg;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,51 +0,0 @@
|
||||
//
|
||||
// Custom control
|
||||
// additional styles for custom checkboxes, radios and other
|
||||
//
|
||||
|
||||
.custom-control-label {
|
||||
// Background-color and (when enabled) gradient
|
||||
&::before {
|
||||
border: $custom-control-indicator-border-width solid $custom-control-indicator-border-color;
|
||||
@if $enable-transitions {
|
||||
transition: $input-transition;
|
||||
}
|
||||
}
|
||||
|
||||
span {
|
||||
position: relative;
|
||||
top: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
.custom-control-label {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
|
||||
// Alternative style
|
||||
|
||||
.custom-control-alternative {
|
||||
.custom-control-label {
|
||||
// Background-color and (when enabled) gradient
|
||||
&::before {
|
||||
border: 0;
|
||||
box-shadow: $input-alternative-box-shadow;
|
||||
}
|
||||
}
|
||||
|
||||
.custom-control-input {
|
||||
&:checked {
|
||||
~ .custom-control-label {
|
||||
&::before {
|
||||
box-shadow: $input-focus-alternative-box-shadow;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&:active~.custom-control-label::before,
|
||||
&:focus~.custom-control-label::before {
|
||||
box-shadow: $input-alternative-box-shadow;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,37 +0,0 @@
|
||||
//
|
||||
// Custom checkbox
|
||||
//
|
||||
|
||||
.custom-checkbox {
|
||||
.custom-control-input ~ .custom-control-label {
|
||||
cursor: pointer;
|
||||
font-size: $font-size-sm;
|
||||
}
|
||||
|
||||
.custom-control-input {
|
||||
&:checked {
|
||||
~ .custom-control-label {
|
||||
&::before {
|
||||
border-color: $custom-control-indicator-checked-border-color;
|
||||
}
|
||||
&::after {
|
||||
background-image: $custom-checkbox-indicator-icon-checked;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&:disabled {
|
||||
~ .custom-control-label {
|
||||
&::before {
|
||||
border-color: $custom-control-indicator-disabled-bg;
|
||||
}
|
||||
}
|
||||
|
||||
&:checked {
|
||||
&::before {
|
||||
border-color: $custom-control-indicator-checked-disabled-bg;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,37 +0,0 @@
|
||||
//
|
||||
// Custom radio
|
||||
//
|
||||
|
||||
.custom-radio {
|
||||
.custom-control-input ~ .custom-control-label {
|
||||
cursor: pointer;
|
||||
font-size: $font-size-sm;
|
||||
}
|
||||
|
||||
.custom-control-input {
|
||||
&:checked {
|
||||
~ .custom-control-label {
|
||||
&::before {
|
||||
border-color: $custom-control-indicator-checked-border-color;
|
||||
}
|
||||
&::after {
|
||||
background-image: $custom-radio-indicator-icon-checked;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&:disabled {
|
||||
~ .custom-control-label {
|
||||
&::before {
|
||||
border-color: $custom-control-indicator-disabled-bg;
|
||||
}
|
||||
}
|
||||
|
||||
&:checked {
|
||||
&::before {
|
||||
border-color: $custom-control-indicator-checked-disabled-bg;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,66 +0,0 @@
|
||||
//
|
||||
// Custom toggle
|
||||
//
|
||||
|
||||
.custom-toggle {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
width: $custom-toggle-width;
|
||||
height: 1.5rem;
|
||||
|
||||
input {
|
||||
display: none;
|
||||
|
||||
&:checked {
|
||||
+ .custom-toggle-slider {
|
||||
border: $custom-control-indicator-border-width solid $custom-control-indicator-checked-border-color;
|
||||
|
||||
&:before {
|
||||
background: $custom-toggle-checked-bg;
|
||||
transform: translateX(1.625rem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&:disabled {
|
||||
+ .custom-toggle-slider {
|
||||
border: $custom-control-indicator-border-width solid $custom-control-indicator-disabled-bg;
|
||||
}
|
||||
|
||||
&:checked {
|
||||
+ .custom-toggle-slider {
|
||||
border: $custom-control-indicator-border-width solid $custom-control-indicator-disabled-bg;
|
||||
|
||||
&:before {
|
||||
background-color: lighten($custom-control-indicator-checked-bg, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.custom-toggle-slider {
|
||||
position: absolute;
|
||||
cursor: pointer;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
border: $custom-control-indicator-border-width solid $input-border-color;
|
||||
border-radius: 34px !important;
|
||||
background-color: transparent;
|
||||
|
||||
|
||||
&:before {
|
||||
position: absolute;
|
||||
content: "";
|
||||
height: 18px;
|
||||
width: 18px;
|
||||
left: 2px;
|
||||
bottom: 2px;
|
||||
border-radius: 50% !important;
|
||||
background-color: $custom-toggle-slider-bg;
|
||||
transition: $input-transition;
|
||||
}
|
||||
}
|
||||
@ -1,79 +0,0 @@
|
||||
//
|
||||
// Dropdown
|
||||
//
|
||||
|
||||
// General styles
|
||||
|
||||
.dropdown,
|
||||
.dropup,
|
||||
.dropright,
|
||||
.dropleft {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.dropdown-menu {
|
||||
min-width: 12rem;
|
||||
|
||||
.dropdown-item {
|
||||
padding: .5rem 1rem;
|
||||
font-size: $font-size-sm;
|
||||
> i,
|
||||
> svg {
|
||||
margin-right: 1rem;
|
||||
font-size: 1rem;
|
||||
vertical-align: -17%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.dropdown-header {
|
||||
padding-left: 1rem;
|
||||
padding-right: 1rem;
|
||||
color: $gray-100;
|
||||
font-size: .625rem;
|
||||
text-transform: uppercase;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
|
||||
// Media components inside dropdown link
|
||||
|
||||
.dropdown-menu {
|
||||
a.media {
|
||||
|
||||
> div {
|
||||
&:first-child {
|
||||
line-height: 1;
|
||||
}
|
||||
}
|
||||
|
||||
p {
|
||||
color: $gray-600;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
.heading,
|
||||
p {
|
||||
color: theme-color("default") !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Size variations
|
||||
|
||||
.dropdown-menu-sm {
|
||||
min-width: 100px;
|
||||
border: $border-radius-lg;
|
||||
}
|
||||
|
||||
.dropdown-menu-lg {
|
||||
min-width: 260px;
|
||||
border-radius: $border-radius-lg;
|
||||
}
|
||||
|
||||
.dropdown-menu-xl {
|
||||
min-width: 450px;
|
||||
border-radius: $border-radius-lg;
|
||||
}
|
||||
@ -1,98 +0,0 @@
|
||||
//
|
||||
// Footer
|
||||
//
|
||||
|
||||
|
||||
// General styles
|
||||
|
||||
.footer {
|
||||
background: $footer-bg;
|
||||
padding: $footer-padding-y $footer-padding-x;
|
||||
|
||||
.col-footer {
|
||||
.heading {
|
||||
color: $footer-heading-color;
|
||||
letter-spacing: 0;
|
||||
font-size: $footer-heading-font-size;
|
||||
text-transform: uppercase;
|
||||
font-weight: $font-weight-bold;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
.nav .nav-item .nav-link,
|
||||
.footer-link {
|
||||
color: $footer-link-color !important;
|
||||
|
||||
&:hover {
|
||||
color: $footer-link-hover-color !important;
|
||||
}
|
||||
}
|
||||
|
||||
.list-unstyled li a {
|
||||
display: inline-block;
|
||||
padding: .125rem 0;
|
||||
color: $footer-link-color;
|
||||
font-size: $footer-link-font-size;
|
||||
|
||||
&:hover {
|
||||
color: $footer-link-hover-color;
|
||||
}
|
||||
}
|
||||
|
||||
.copyright {
|
||||
font-size: $font-size-sm;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Dark footer
|
||||
|
||||
.footer-dark {
|
||||
.col-footer .heading {
|
||||
color: $white;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Footer nav used for copyright and some links, but not limited to this
|
||||
|
||||
.nav-footer {
|
||||
.nav-link {
|
||||
font-size: $font-size-sm;
|
||||
}
|
||||
|
||||
.nav-item:last-child {
|
||||
.nav-link {
|
||||
padding-right: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Footer with cards over
|
||||
|
||||
.footer.has-cards {
|
||||
overflow: hidden;
|
||||
padding-top: 500px;
|
||||
margin-top: -420px;
|
||||
position: relative;
|
||||
background: transparent;
|
||||
pointer-events: none;
|
||||
|
||||
&:before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
top: 600px;
|
||||
height: 2000px;
|
||||
background: theme-color("secondary");
|
||||
transform: skew(0,-8deg);
|
||||
}
|
||||
|
||||
.container {
|
||||
pointer-events: auto;
|
||||
position: relative;
|
||||
}
|
||||
}
|
||||
@ -1,71 +0,0 @@
|
||||
//
|
||||
// Form validation
|
||||
//
|
||||
|
||||
// Validation
|
||||
|
||||
.has-success,
|
||||
.has-danger {
|
||||
position: relative;
|
||||
|
||||
&:after, {
|
||||
width: 19px;
|
||||
height: 19px;
|
||||
line-height: 19px;
|
||||
text-align: center;
|
||||
font-family: 'NucleoIcons';
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
right: 15px;
|
||||
top: 2px;
|
||||
transform: translateY(50%);
|
||||
border-radius: 50%;
|
||||
font-size: 9px;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.has-success {
|
||||
&:after {
|
||||
content: "\ea26";
|
||||
color: daken($form-feedback-valid-color, 18%);
|
||||
background-color: $form-feedback-valid-bg;
|
||||
}
|
||||
|
||||
.form-control {
|
||||
background-color: $input-focus-bg;
|
||||
|
||||
&:focus {
|
||||
border-color: $input-focus-border-color;
|
||||
}
|
||||
|
||||
|
||||
// Placeholder
|
||||
|
||||
&::placeholder {
|
||||
color: $form-feedback-valid-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.has-danger {
|
||||
&:after {
|
||||
content: "\ea53";
|
||||
color: daken($form-feedback-invalid-color, 18%);
|
||||
background-color: $form-feedback-invalid-bg;
|
||||
}
|
||||
|
||||
.form-control {
|
||||
background-color: $input-focus-bg;
|
||||
|
||||
&:focus {
|
||||
border-color: $input-focus-border-color;
|
||||
}
|
||||
|
||||
// Placeholder
|
||||
|
||||
&::placeholder {
|
||||
color: $form-feedback-invalid-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,78 +0,0 @@
|
||||
//
|
||||
// Forms
|
||||
//
|
||||
|
||||
|
||||
// Labels
|
||||
|
||||
.form-control-label {
|
||||
color: $gray-700;
|
||||
font-size: $font-size-sm;
|
||||
font-weight: $font-weight-bold;
|
||||
}
|
||||
|
||||
|
||||
// Text inputs
|
||||
|
||||
.form-control {
|
||||
font-size: $input-btn-font-size;
|
||||
|
||||
&:focus {
|
||||
&::placeholder {
|
||||
color: $input-focus-placeholder-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Textarea
|
||||
|
||||
textarea[resize="none"] {
|
||||
resize: none!important;
|
||||
}
|
||||
|
||||
textarea[resize="both"] {
|
||||
resize: both!important;
|
||||
}
|
||||
|
||||
textarea[resize="vertical"] {
|
||||
resize: vertical!important;
|
||||
}
|
||||
|
||||
textarea[resize="horizontal"] {
|
||||
resize: horizontal!important;
|
||||
}
|
||||
|
||||
|
||||
// Form input variations
|
||||
|
||||
// Muted input
|
||||
|
||||
.form-control-muted {
|
||||
background-color: $input-muted-bg;
|
||||
border-color: $input-muted-bg;
|
||||
box-shadow: none;
|
||||
|
||||
&:focus {
|
||||
background-color: $input-focus-muted-bg;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Alternative input
|
||||
|
||||
.form-control-alternative {
|
||||
box-shadow: $input-alternative-box-shadow;
|
||||
border: 0;
|
||||
transition: box-shadow .15s ease;
|
||||
|
||||
&:focus {
|
||||
box-shadow: $input-focus-alternative-box-shadow;
|
||||
}
|
||||
}
|
||||
|
||||
// Size variations: Fixes to the bootstrap defaults
|
||||
|
||||
.form-control-lg {
|
||||
font-size: $font-size-base;
|
||||
}
|
||||
@ -1,70 +0,0 @@
|
||||
//
|
||||
// Input group
|
||||
//
|
||||
|
||||
.input-group {
|
||||
box-shadow: $input-box-shadow;
|
||||
border-radius: $input-border-radius;
|
||||
transition: $transition-base;
|
||||
|
||||
.form-control {
|
||||
box-shadow: none;
|
||||
|
||||
&:not(:first-child) {
|
||||
border-left: 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
&:not(:last-child) {
|
||||
border-right: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
&:focus {
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.input-group-text {
|
||||
transition: $input-transition;
|
||||
}
|
||||
|
||||
|
||||
// Alternative input groups related to .form-control-alternative
|
||||
|
||||
|
||||
.input-group-alternative {
|
||||
box-shadow: $input-alternative-box-shadow;
|
||||
border: 0;
|
||||
transition: box-shadow .15s ease;
|
||||
|
||||
.form-control,
|
||||
.input-group-text {
|
||||
border: 0;
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
|
||||
.focused {
|
||||
.input-group-alternative {
|
||||
box-shadow: $input-focus-alternative-box-shadow !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// .focus class is applied dinamycally from theme.js
|
||||
|
||||
.focused {
|
||||
.input-group {
|
||||
box-shadow: $input-focus-box-shadow;
|
||||
}
|
||||
|
||||
.input-group-text {
|
||||
color: $input-group-addon-focus-color;
|
||||
background-color: $input-group-addon-focus-bg;
|
||||
border-color: $input-group-addon-focus-border-color;
|
||||
}
|
||||
|
||||
.form-control {
|
||||
border-color: $input-group-addon-focus-border-color;
|
||||
}
|
||||
}
|
||||
@ -1,7 +0,0 @@
|
||||
//
|
||||
// Header
|
||||
//
|
||||
|
||||
.header {
|
||||
position: relative;
|
||||
}
|
||||
@ -1,42 +0,0 @@
|
||||
//
|
||||
// Icon shape
|
||||
//
|
||||
|
||||
|
||||
.icon-shape {
|
||||
padding: 12px;
|
||||
text-align: center;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 50%;
|
||||
|
||||
|
||||
i, svg {
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
|
||||
&.icon-lg {
|
||||
i, svg {
|
||||
font-size: 1.625rem;
|
||||
}
|
||||
}
|
||||
|
||||
&.icon-sm {
|
||||
i, svg {
|
||||
font-size: .875rem;
|
||||
}
|
||||
}
|
||||
|
||||
svg {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@each $color, $value in $theme-colors {
|
||||
.icon-shape-#{$color} {
|
||||
@include icon-shape-variant(theme-color($color));
|
||||
}
|
||||
}
|
||||
@ -1,65 +0,0 @@
|
||||
//
|
||||
// Icon
|
||||
//
|
||||
|
||||
.icon {
|
||||
width: $icon-size;
|
||||
height: $icon-size;
|
||||
|
||||
i, svg {
|
||||
font-size: $icon-size - .75;
|
||||
}
|
||||
|
||||
+ .icon-text {
|
||||
padding-left: 1rem;
|
||||
width: calc(100% - #{$icon-size} - 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Extra large icons
|
||||
|
||||
.icon-xl {
|
||||
width: $icon-size-xl;
|
||||
height: $icon-size-xl;
|
||||
|
||||
i, svg {
|
||||
font-size: $icon-size-xl - .75;
|
||||
}
|
||||
|
||||
+ .icon-text {
|
||||
width: calc(100% - #{$icon-size-xl} - 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Large icons
|
||||
|
||||
.icon-lg {
|
||||
width: $icon-size-lg;
|
||||
height: $icon-size-lg;
|
||||
|
||||
i, svg {
|
||||
font-size: $icon-size-lg - .75;
|
||||
}
|
||||
|
||||
+ .icon-text {
|
||||
width: calc(100% - #{$icon-size-lg} - 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Small icon
|
||||
|
||||
.icon-sm {
|
||||
width: $icon-size-sm;
|
||||
height: $icon-size-sm;
|
||||
|
||||
i, svg {
|
||||
font-size: $icon-size-sm - .75;
|
||||
}
|
||||
|
||||
+ .icon-text {
|
||||
width: calc(100% - #{$icon-size-sm} - 1);
|
||||
}
|
||||
}
|
||||
@ -1,46 +0,0 @@
|
||||
//
|
||||
// List group
|
||||
//
|
||||
|
||||
|
||||
// Space list items
|
||||
|
||||
.list-group-space {
|
||||
.list-group-item {
|
||||
margin-bottom: 1.5rem;
|
||||
@include border-radius($list-group-border-radius);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Extended list group components
|
||||
|
||||
.list-group-img {
|
||||
width: 3rem;
|
||||
height: 3rem;
|
||||
border-radius: 50%;
|
||||
vertical-align: top;
|
||||
margin: -.1rem 1.2rem 0 -.2rem;
|
||||
}
|
||||
|
||||
.list-group-content {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
|
||||
> p {
|
||||
color: $gray-500;
|
||||
line-height: 1.5;
|
||||
margin: .2rem 0 0;
|
||||
}
|
||||
}
|
||||
|
||||
.list-group-heading {
|
||||
font-size: $font-size-base;
|
||||
color: $gray-800;
|
||||
|
||||
> small {
|
||||
float: right;
|
||||
color: $gray-500;
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
@ -1,10 +0,0 @@
|
||||
//
|
||||
// Map
|
||||
//
|
||||
|
||||
.map-canvas {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: $map-height;
|
||||
border-radius: $border-radius;
|
||||
}
|
||||
@ -1,12 +0,0 @@
|
||||
//
|
||||
// Mask
|
||||
//
|
||||
|
||||
.mask {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
@include transition($transition-base);
|
||||
}
|
||||
@ -1,13 +0,0 @@
|
||||
@mixin alert-variant($background, $border, $color) {
|
||||
color: color-yiq($background);
|
||||
@include gradient-bg($background);
|
||||
border-color: $border;
|
||||
|
||||
hr {
|
||||
border-top-color: darken($border, 5%);
|
||||
}
|
||||
|
||||
.alert-link {
|
||||
color: darken($color, 10%);
|
||||
}
|
||||
}
|
||||
@ -1,30 +0,0 @@
|
||||
// Contextual backgrounds
|
||||
@mixin bg-variant($parent, $color, $ignore-warning: true) {
|
||||
#{$parent} {
|
||||
background-color: $color !important;
|
||||
}
|
||||
a#{$parent},
|
||||
button#{$parent} {
|
||||
@include hover-focus {
|
||||
background-color: darken($color, 10%) !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@mixin bg-gradient-variant($parent, $color, $ignore-warning: true) {
|
||||
#{$parent} {
|
||||
background: linear-gradient(87deg, $color 0, adjust-hue($color, 25%) 100%) !important;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin bg-translucent-variant($parent, $color, $ignore-warning: true) {
|
||||
#{$parent} {
|
||||
background-color: darken(rgba($color, $translucent-color-opacity), 7%) !important;
|
||||
}
|
||||
a#{$parent},
|
||||
button#{$parent} {
|
||||
@include hover-focus {
|
||||
background-color: darken(rgba($color, $translucent-color-opacity), 12%) !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,12 +0,0 @@
|
||||
@mixin badge-variant($bg) {
|
||||
color: saturate(darken($bg, 10%), 10);
|
||||
background-color: transparentize(lighten($bg, 25%), .5);
|
||||
|
||||
&[href] {
|
||||
@include hover-focus {
|
||||
color: color-yiq($bg);
|
||||
text-decoration: none;
|
||||
background-color: darken($bg, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,105 +0,0 @@
|
||||
@mixin button-variant($background, $border, $hover-background: darken($background, 0%), $hover-border: darken($border, 0%), $active-background: darken($background, 10%), $active-border: darken($border, 0%)) {
|
||||
color: color-yiq($background);
|
||||
@include gradient-bg($background);
|
||||
border-color: $border;
|
||||
@include box-shadow($btn-box-shadow);
|
||||
|
||||
@include hover {
|
||||
color: color-yiq($hover-background);
|
||||
@include gradient-bg($hover-background);
|
||||
border-color: $hover-border;
|
||||
}
|
||||
|
||||
&:focus,
|
||||
&.focus {
|
||||
// Avoid using mixin so we can pass custom focus shadow properly
|
||||
@if $enable-shadows {
|
||||
box-shadow: $btn-box-shadow, 0 0 0 $btn-focus-width rgba($border, .5);
|
||||
}
|
||||
@else {
|
||||
box-shadow: 0 0 0 $btn-focus-width rgba($border, .5);
|
||||
}
|
||||
} // Disabled comes first so active can properly restyle
|
||||
&.disabled,
|
||||
&:disabled {
|
||||
color: color-yiq($background);
|
||||
background-color: $background;
|
||||
border-color: $border;
|
||||
}
|
||||
|
||||
&:not(:disabled):not(.disabled):active,
|
||||
&:not(:disabled):not(.disabled).active,
|
||||
.show>&.dropdown-toggle {
|
||||
color: color-yiq($active-background);
|
||||
background-color: $active-background;
|
||||
@if $enable-gradients {
|
||||
background-image: none; // Remove the gradient for the pressed/active state
|
||||
}
|
||||
border-color: $active-border;
|
||||
|
||||
&:focus {
|
||||
// Avoid using mixin so we can pass custom focus shadow properly
|
||||
@if $enable-shadows {
|
||||
box-shadow: $btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($border, .5);
|
||||
}
|
||||
@else {
|
||||
box-shadow: 0 0 0 $btn-focus-width rgba($border, .5);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@mixin button-outline-variant($color, $color-hover: color-yiq($color), $active-background: $color, $active-border: $color) {
|
||||
color: $color;
|
||||
background-color: transparent;
|
||||
background-image: none;
|
||||
border-color: $color;
|
||||
|
||||
&:hover {
|
||||
color: $color-hover;
|
||||
background-color: $active-background;
|
||||
border-color: $active-border;
|
||||
}
|
||||
|
||||
&:focus,
|
||||
&.focus {
|
||||
box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);
|
||||
}
|
||||
|
||||
&.disabled,
|
||||
&:disabled {
|
||||
color: $color;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
&:not(:disabled):not(.disabled):active,
|
||||
&:not(:disabled):not(.disabled).active,
|
||||
.show>&.dropdown-toggle {
|
||||
color: color-yiq($active-background);
|
||||
background-color: $active-background;
|
||||
border-color: $active-border;
|
||||
|
||||
&:focus {
|
||||
// Avoid using mixin so we can pass custom focus shadow properly
|
||||
@if $enable-shadows and $btn-active-box-shadow !=none {
|
||||
box-shadow: $btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($color, .5);
|
||||
}
|
||||
@else {
|
||||
box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Button sizes
|
||||
@mixin button-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) {
|
||||
padding: $padding-y $padding-x;
|
||||
font-size: $font-size;
|
||||
line-height: $line-height; // Manually declare to provide an override to the browser default
|
||||
@if $enable-rounded {
|
||||
border-radius: $border-radius;
|
||||
}
|
||||
@else {
|
||||
border-radius: 0;
|
||||
}
|
||||
}
|
||||
@ -1,127 +0,0 @@
|
||||
@mixin form-control-focus($ignore-warning: true) {
|
||||
&:focus {
|
||||
color: $input-focus-color;
|
||||
background-color: $input-focus-bg;
|
||||
border-color: $input-focus-border-color;
|
||||
outline: 0;
|
||||
// Avoid using mixin so we can pass custom focus shadow properly
|
||||
@if $enable-shadows {
|
||||
box-shadow: $input-box-shadow, $input-focus-box-shadow;
|
||||
} @else {
|
||||
box-shadow: $input-focus-box-shadow;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@mixin form-validation-state($state, $color, $icon) {
|
||||
.#{$state}-feedback {
|
||||
display: none;
|
||||
width: 100%;
|
||||
margin-top: $form-feedback-margin-top;
|
||||
font-size: $form-feedback-font-size;
|
||||
color: $color;
|
||||
}
|
||||
|
||||
.#{$state}-tooltip {
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
z-index: 5;
|
||||
display: none;
|
||||
max-width: 100%; // Contain to parent when possible
|
||||
padding: .5rem;
|
||||
margin-top: .1rem;
|
||||
font-size: .875rem;
|
||||
line-height: 1;
|
||||
color: #fff;
|
||||
background-color: rgba($color, .8);
|
||||
border-radius: .2rem;
|
||||
}
|
||||
|
||||
.form-control,
|
||||
.custom-select {
|
||||
.was-validated &:#{$state},
|
||||
&.is-#{$state} {
|
||||
border-color: $color;
|
||||
|
||||
&:focus {
|
||||
border-color: $color;
|
||||
//box-shadow: 0 1px $input-focus-width 0 rgba($color, .75);
|
||||
}
|
||||
|
||||
~ .#{$state}-feedback,
|
||||
~ .#{$state}-tooltip {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.form-check-input {
|
||||
.was-validated &:#{$state},
|
||||
&.is-#{$state} {
|
||||
~ .form-check-label {
|
||||
color: $color;
|
||||
}
|
||||
|
||||
~ .#{$state}-feedback,
|
||||
~ .#{$state}-tooltip {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.custom-control-input {
|
||||
.was-validated &:#{$state},
|
||||
&.is-#{$state} {
|
||||
~ .custom-control-label {
|
||||
color: $color;
|
||||
|
||||
&::before {
|
||||
background-color: lighten($color, 25%);
|
||||
border-color: lighten($color, 25%);
|
||||
}
|
||||
}
|
||||
|
||||
~ .#{$state}-feedback,
|
||||
~ .#{$state}-tooltip {
|
||||
display: block;
|
||||
}
|
||||
|
||||
&:checked {
|
||||
~ .custom-control-label::before {
|
||||
@include gradient-bg(lighten($color, 10%));
|
||||
border-color: lighten($color, 25%);
|
||||
}
|
||||
}
|
||||
|
||||
&:focus {
|
||||
~ .custom-control-label::before {
|
||||
box-shadow: 0 0 0 1px $body-bg, 0 0 0 $input-focus-width rgba($color, .25);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// custom file
|
||||
.custom-file-input {
|
||||
.was-validated &:#{$state},
|
||||
&.is-#{$state} {
|
||||
~ .custom-file-label {
|
||||
border-color: $color;
|
||||
|
||||
&::before { border-color: inherit; }
|
||||
}
|
||||
|
||||
~ .#{$state}-feedback,
|
||||
~ .#{$state}-tooltip {
|
||||
display: block;
|
||||
}
|
||||
|
||||
&:focus {
|
||||
~ .custom-file-label {
|
||||
box-shadow: 0 0 0 $input-focus-width rgba($color, .25);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,4 +0,0 @@
|
||||
@mixin icon-shape-variant($color) {
|
||||
color: saturate(darken($color, 10%), 10);
|
||||
background-color: transparentize(lighten($color, 10%), .5);
|
||||
}
|
||||
@ -1,23 +0,0 @@
|
||||
@mixin modal-variant($background) {
|
||||
.modal-title {
|
||||
color: color-yiq($background);
|
||||
}
|
||||
.modal-header,
|
||||
.modal-footer {
|
||||
border-color: rgba(color-yiq($background), .075);
|
||||
}
|
||||
.modal-content {
|
||||
background-color: $background;
|
||||
color: color-yiq($background);
|
||||
|
||||
.heading {
|
||||
color: color-yiq($background);
|
||||
}
|
||||
}
|
||||
|
||||
.close {
|
||||
&>span:not(.sr-only) {
|
||||
color: $white;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,36 +0,0 @@
|
||||
@mixin popover-variant($background) {
|
||||
|
||||
background-color: $background;
|
||||
|
||||
.popover-header {
|
||||
background-color: $background;
|
||||
color: color-yiq($background);
|
||||
}
|
||||
|
||||
.popover-body {
|
||||
color: color-yiq($background);
|
||||
}
|
||||
.popover-header{
|
||||
border-color: rgba(color-yiq($background), .2);
|
||||
}
|
||||
&.bs-popover-top {
|
||||
.arrow::after {
|
||||
border-top-color: $background;
|
||||
}
|
||||
}
|
||||
&.bs-popover-right {
|
||||
.arrow::after {
|
||||
border-right-color: $background;
|
||||
}
|
||||
}
|
||||
&.bs-popover-bottom {
|
||||
.arrow::after {
|
||||
border-bottom-color: $background;
|
||||
}
|
||||
}
|
||||
&.bs-popover-left {
|
||||
.arrow::after {
|
||||
border-left-color: $background;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,25 +0,0 @@
|
||||
//
|
||||
// Modal
|
||||
//
|
||||
|
||||
|
||||
// Fluid modal
|
||||
|
||||
.modal-fluid {
|
||||
.modal-dialog {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.modal-content {
|
||||
border-radius: 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Background color variations
|
||||
|
||||
@each $color, $value in $theme-colors {
|
||||
.modal-#{$color} {
|
||||
@include modal-variant($value);
|
||||
}
|
||||
}
|
||||
@ -1,125 +0,0 @@
|
||||
//
|
||||
// Navabar collapse
|
||||
//
|
||||
|
||||
// Collapse
|
||||
|
||||
.navbar-collapse-header {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@include media-breakpoint-down(sm) {
|
||||
.navbar-nav {
|
||||
.nav-link {
|
||||
padding: .625rem 0;
|
||||
color: theme-color("default") !important;
|
||||
}
|
||||
|
||||
.dropdown-menu {
|
||||
box-shadow: none;
|
||||
min-width: auto;
|
||||
|
||||
.media {
|
||||
svg {
|
||||
width: 30px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-collapse {
|
||||
width: calc(100% - 1.4rem);
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
z-index: 1050;
|
||||
margin: .7rem;
|
||||
overflow-y: auto;
|
||||
height: auto !important;
|
||||
opacity: 0;
|
||||
|
||||
.navbar-toggler {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
padding: 0;
|
||||
|
||||
span {
|
||||
display: block;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 2px;
|
||||
border-radius: 2px;
|
||||
opacity: 1;
|
||||
background: #283448;
|
||||
}
|
||||
|
||||
:nth-child(1) {
|
||||
transform: rotate(135deg);
|
||||
}
|
||||
|
||||
:nth-child(2) {
|
||||
transform: rotate(-135deg);
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-collapse-header {
|
||||
display: block;
|
||||
padding-bottom: 1rem;
|
||||
margin-bottom: 1rem;
|
||||
border-bottom: 1px solid rgba(0, 0, 0, .1);
|
||||
}
|
||||
|
||||
.collapse-brand {
|
||||
img {
|
||||
height: 36px;
|
||||
}
|
||||
}
|
||||
|
||||
.collapse-close {
|
||||
text-align: right;
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-collapse.collapsing,
|
||||
.navbar-collapse.show {
|
||||
padding: 1.5rem;
|
||||
border-radius: $border-radius;
|
||||
background: #FFF;
|
||||
box-shadow: 0 50px 100px rgba(50,50,93,.1),0 15px 35px rgba(50,50,93,.15),0 5px 15px rgba(0,0,0,.1);
|
||||
animation: show-navbar-collapse .2s ease forwards;
|
||||
}
|
||||
|
||||
.navbar-collapse.collapsing-out {
|
||||
animation: hide-navbar-collapse .2s ease forwards;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes show-navbar-collapse {
|
||||
0% {
|
||||
opacity: 0;
|
||||
transform: scale(.95);
|
||||
transform-origin: 100% 0;
|
||||
}
|
||||
|
||||
100% {
|
||||
opacity: 1;
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes hide-navbar-collapse {
|
||||
from {
|
||||
opacity: 1;
|
||||
transform: scale(1);
|
||||
transform-origin: 100% 0;
|
||||
}
|
||||
|
||||
to {
|
||||
opacity: 0;
|
||||
transform: scale(.95);
|
||||
}
|
||||
}
|
||||
@ -1,101 +0,0 @@
|
||||
// Dropdown menu
|
||||
|
||||
@include media-breakpoint-up(md) {
|
||||
.navbar {
|
||||
.dropdown-menu {
|
||||
opacity: 0;
|
||||
pointer-events: none;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.dropdown-menu-arrow {
|
||||
&:before {
|
||||
background: $dropdown-bg;
|
||||
box-shadow: none;
|
||||
content: '';
|
||||
display: block;
|
||||
height: 12px;
|
||||
width: 12px;
|
||||
left: 20px;
|
||||
position: absolute;
|
||||
bottom: 100%;
|
||||
transform: rotate(-45deg) translateY(12px);
|
||||
z-index: -5;
|
||||
border-radius: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
.dropdown-menu-right {
|
||||
&:before {
|
||||
right: 20px;
|
||||
left: auto;
|
||||
}
|
||||
}
|
||||
|
||||
&:not(.navbar-nav-hover) {
|
||||
.dropdown-menu {
|
||||
&.show {
|
||||
opacity: 1;
|
||||
pointer-events: auto;
|
||||
animation: show-navbar-dropdown .25s ease forwards;
|
||||
}
|
||||
|
||||
&.close {
|
||||
display: block;
|
||||
animation: hide-navbar-dropdown .15s ease backwards;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.navbar-nav-hover {
|
||||
.dropdown-menu {
|
||||
opacity: 0;
|
||||
display: block;
|
||||
pointer-events: none;
|
||||
transform: translate(0, 10px) perspective(200px) rotateX(-2deg);
|
||||
transition: visibility 0.25s, opacity 0.25s, transform 0.25s;
|
||||
}
|
||||
|
||||
.nav-item.dropdown:hover > .dropdown-menu {
|
||||
display: block;
|
||||
opacity: 1;
|
||||
pointer-events: auto;
|
||||
visibility: visible;
|
||||
transform: translate(0, 0);
|
||||
animation: none;
|
||||
}
|
||||
}
|
||||
|
||||
.dropdown-menu-inner {
|
||||
position: relative;
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
|
||||
// Keyframes
|
||||
|
||||
@keyframes show-navbar-dropdown {
|
||||
0% {
|
||||
opacity: 0;
|
||||
transform: translate(0, 10px) perspective(200px) rotateX(-2deg);
|
||||
transition: visibility 0.25s, opacity 0.25s, transform 0.25s;
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: translate(0, 0);
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes hide-navbar-dropdown {
|
||||
from {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
to {
|
||||
opacity: 0;
|
||||
transform: translate(0, 10px);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,69 +0,0 @@
|
||||
//
|
||||
// Navbar search
|
||||
//
|
||||
|
||||
.navbar-search {
|
||||
.input-group {
|
||||
border-radius: $navbar-search-border-radius;
|
||||
border: $navbar-search-border-width solid;
|
||||
background-color: transparent;
|
||||
|
||||
.input-group-text {
|
||||
background-color: transparent;
|
||||
padding-left: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
.form-control {
|
||||
width: $navbar-search-width;
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-search-dark {
|
||||
.input-group {
|
||||
border-color: $navbar-search-dark-border-color;
|
||||
}
|
||||
|
||||
.input-group-text {
|
||||
color: $navbar-search-dark-color;
|
||||
}
|
||||
|
||||
.form-control {
|
||||
color: $navbar-search-dark-focus-color;
|
||||
|
||||
&::placeholder {
|
||||
color: $navbar-search-dark-color;
|
||||
}
|
||||
}
|
||||
|
||||
.focused {
|
||||
.input-group {
|
||||
border-color: $navbar-search-dark-focus-border-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-search-light {
|
||||
.input-group {
|
||||
border-color: $navbar-search-light-border-color;
|
||||
}
|
||||
|
||||
.input-group-text {
|
||||
color: $navbar-search-light-color;
|
||||
}
|
||||
|
||||
.form-control {
|
||||
color: $navbar-search-light-focus-color;
|
||||
|
||||
&::placeholder {
|
||||
color: $navbar-search-light-color;
|
||||
}
|
||||
}
|
||||
|
||||
.focused {
|
||||
.input-group {
|
||||
border-color: $navbar-search-light-focus-border-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,286 +0,0 @@
|
||||
//
|
||||
// Vertical navbar
|
||||
//
|
||||
|
||||
|
||||
// Vertical
|
||||
//
|
||||
// Creates a vertically aligned version of the navbar
|
||||
.navbar-vertical {
|
||||
box-shadow: $navbar-vertical-box-shadow;
|
||||
|
||||
.navbar {
|
||||
border-width: 0 0 1px 0;
|
||||
border-style: solid;
|
||||
}
|
||||
|
||||
|
||||
// Navbar light
|
||||
|
||||
.navbar-light {
|
||||
background-color: $navbar-light-bg;
|
||||
border-color: $navbar-light-border-color;
|
||||
}
|
||||
|
||||
|
||||
// Navbar brand
|
||||
|
||||
.navbar-brand {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.navbar-brand-img,
|
||||
.navbar-brand > img {
|
||||
max-width: 100%;
|
||||
max-height: 2rem;
|
||||
}
|
||||
|
||||
|
||||
// Navbar collapse
|
||||
|
||||
@include media-breakpoint-up(md) {
|
||||
.navbar-collapse {
|
||||
margin-left: -$navbar-padding-x;
|
||||
margin-right: -$navbar-padding-x;
|
||||
padding-left: $navbar-padding-x;
|
||||
padding-right: $navbar-padding-x;
|
||||
|
||||
&:before {
|
||||
content: '';
|
||||
display: block;
|
||||
margin: $navbar-padding-y (-$navbar-padding-x);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Navbar navigaton
|
||||
|
||||
.navbar-nav {
|
||||
margin-left: -$navbar-padding-x;
|
||||
margin-right: -$navbar-padding-x;
|
||||
|
||||
|
||||
// Navbar link
|
||||
|
||||
.nav-link {
|
||||
padding-left: $navbar-padding-x;
|
||||
padding-right: $navbar-padding-x;
|
||||
font-size: $navbar-nav-link-font-size;
|
||||
|
||||
&.active {
|
||||
position: relative;
|
||||
|
||||
&:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: $nav-link-padding-y;
|
||||
bottom: $nav-link-padding-y;
|
||||
border-left: 2px solid $primary;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Icon
|
||||
|
||||
> i {
|
||||
min-width: $navbar-icon-min-width;
|
||||
font-size: .9375rem;
|
||||
line-height: ($font-size-base * $line-height-base);
|
||||
}
|
||||
|
||||
|
||||
// Dropdown
|
||||
|
||||
.dropdown-menu {
|
||||
border: none;
|
||||
|
||||
.dropdown-menu {
|
||||
margin-left: $dropdown-item-padding-x / 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Navbar navigation
|
||||
.navbar-nav .nav-link {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.navbar-nav .nav-link[data-toggle="collapse"] {
|
||||
&:after {
|
||||
display: inline-block;
|
||||
font-style: normal;
|
||||
font-variant: normal;
|
||||
text-rendering: auto;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
font-family: 'Font Awesome 5 Free';
|
||||
font-weight: 700;
|
||||
content: "\f105";
|
||||
margin-left: auto;
|
||||
color: $text-muted;
|
||||
transition: $transition-base;
|
||||
} // Expanded
|
||||
&[aria-expanded="true"] {
|
||||
|
||||
&:after {
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Second level
|
||||
.navbar-nav .nav .nav-link {
|
||||
padding-left: $navbar-padding-x + $navbar-icon-min-width;
|
||||
}
|
||||
|
||||
// Third level
|
||||
.navbar-nav .nav .nav .nav-link {
|
||||
padding-left: $navbar-padding-x * 1.5 + $navbar-icon-min-width;
|
||||
}
|
||||
|
||||
|
||||
// Navbar heading
|
||||
.navbar-heading {
|
||||
padding-top: $nav-link-padding-y;
|
||||
padding-bottom: $nav-link-padding-y;
|
||||
font-size: $font-size-xs;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: .04em;
|
||||
}
|
||||
|
||||
|
||||
// Expanded navbar specific styles
|
||||
&.navbar-expand {
|
||||
@each $breakpoint,
|
||||
$dimension in $grid-breakpoints {
|
||||
|
||||
&-#{$breakpoint} {
|
||||
@include media-breakpoint-up(#{$breakpoint}) {
|
||||
display: block;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
max-width: $navbar-vertical-width;
|
||||
padding-left: $navbar-vertical-padding-x;
|
||||
padding-right: $navbar-vertical-padding-x;
|
||||
|
||||
overflow-y: auto;
|
||||
|
||||
// Container
|
||||
>[class*="container"] {
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
min-height: 100%;
|
||||
padding-left: 0;
|
||||
padding-right: 0; // Target IE 10 & 11
|
||||
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
|
||||
min-height: none;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Fixes the vertical navbar to the left
|
||||
&.fixed-left {
|
||||
left: 0;
|
||||
border-width: 0 1px 0 0;
|
||||
}
|
||||
|
||||
|
||||
// Fixed the vertical navbar to the right
|
||||
&.fixed-right {
|
||||
right: 0;
|
||||
border-width: 0 0 0 1px;
|
||||
}
|
||||
|
||||
|
||||
// Navbar collapse
|
||||
.navbar-collapse {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
margin-left: -$navbar-vertical-padding-x;
|
||||
margin-right: -$navbar-vertical-padding-x;
|
||||
padding-left: $navbar-vertical-padding-x;
|
||||
padding-right: $navbar-vertical-padding-x;
|
||||
|
||||
> * {
|
||||
min-width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Navbar navigation
|
||||
.navbar-nav {
|
||||
flex-direction: column;
|
||||
margin-left: -$navbar-vertical-padding-x;
|
||||
margin-right: -$navbar-vertical-padding-x;
|
||||
}
|
||||
|
||||
.navbar-nav .nav-link {
|
||||
padding: $navbar-vertical-nav-link-padding-y $navbar-vertical-nav-link-padding-x;
|
||||
|
||||
&.active {
|
||||
&:before {
|
||||
top: $nav-link-padding-y;
|
||||
bottom: $nav-link-padding-y;
|
||||
left: 0;
|
||||
right: auto;
|
||||
border-left: 2px solid $primary;
|
||||
border-bottom: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Second level
|
||||
.navbar-nav .nav .nav-link {
|
||||
padding-left: $navbar-vertical-padding-x + $navbar-icon-min-width;
|
||||
}
|
||||
|
||||
|
||||
// Third level
|
||||
.navbar-nav .nav .nav .nav-link {
|
||||
padding-left: $navbar-vertical-padding-x * 1.5 + $navbar-icon-min-width;
|
||||
}
|
||||
|
||||
// Navbar brand
|
||||
.navbar-brand {
|
||||
display: block;
|
||||
text-align: center;
|
||||
padding-top: (2rem - $navbar-padding-y);
|
||||
padding-bottom: (2rem - $navbar-padding-y);
|
||||
}
|
||||
|
||||
.navbar-brand-img {
|
||||
max-height: 2.5rem;
|
||||
}
|
||||
|
||||
// Navbar user
|
||||
.navbar-user {
|
||||
margin-left: -$navbar-vertical-padding-x;
|
||||
margin-right: -$navbar-vertical-padding-x;
|
||||
padding-top: $spacer;
|
||||
padding-bottom: $spacer - $navbar-padding-y;
|
||||
padding-left: $navbar-vertical-padding-x;
|
||||
padding-right: $navbar-vertical-padding-x;
|
||||
border-top: 1px solid $border-color;
|
||||
|
||||
// Dropup menu
|
||||
.dropup .dropdown-menu {
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,153 +0,0 @@
|
||||
//
|
||||
// Navbar
|
||||
//
|
||||
|
||||
|
||||
// Navbar links
|
||||
|
||||
.navbar-horizontal {
|
||||
.navbar-nav {
|
||||
.nav-link {
|
||||
font-size: $navbar-nav-link-font-size;
|
||||
font-weight: $navbar-nav-link-font-weight;
|
||||
text-transform: $navbar-nav-link-text-transform;
|
||||
letter-spacing: $navbar-nav-link-letter-spacing;
|
||||
@include transition($navbar-transition);
|
||||
|
||||
.nav-link-inner--text {
|
||||
margin-left: .25rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Navbar brand (logo)
|
||||
|
||||
.navbar-brand {
|
||||
font-size: $font-size-sm;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
font-size: .875rem;
|
||||
letter-spacing: .05px;
|
||||
|
||||
img {
|
||||
height: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-dark {
|
||||
.navbar-brand {
|
||||
color: $white;
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-light {
|
||||
.navbar-brand {
|
||||
color: $gray-800;
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-nav {
|
||||
.nav-item {
|
||||
.media:not(:last-child){
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(lg) {
|
||||
.navbar-nav {
|
||||
.nav-item {
|
||||
margin-right: .5rem;
|
||||
|
||||
[data-toggle="dropdown"]::after {
|
||||
transition: $transition-base;
|
||||
}
|
||||
|
||||
&.show {
|
||||
[data-toggle="dropdown"]::after {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
}
|
||||
}
|
||||
.nav-link {
|
||||
padding-top: $navbar-nav-link-padding-y;
|
||||
padding-bottom: $navbar-nav-link-padding-y;
|
||||
border-radius: $navbar-nav-link-border-radius;
|
||||
|
||||
i {
|
||||
margin-right: .625rem;
|
||||
}
|
||||
}
|
||||
|
||||
.nav-link-icon {
|
||||
padding-left: .5rem !important;
|
||||
padding-right: .5rem !important;
|
||||
font-size: 1rem;
|
||||
border-radius: $navbar-nav-link-border-radius;
|
||||
|
||||
i {
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Transparent navbar
|
||||
|
||||
.navbar-transparent {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
z-index: 100;
|
||||
background-color: transparent;
|
||||
border: 0;
|
||||
box-shadow: none;
|
||||
|
||||
.navbar-brand {
|
||||
color: rgba(255, 255, 255, 1);
|
||||
}
|
||||
|
||||
.navbar-toggler {
|
||||
color: rgba(255, 255, 255, 1);
|
||||
}
|
||||
|
||||
.navbar-toggler-icon {
|
||||
background-image: $navbar-dark-toggler-icon-bg;
|
||||
}
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(md) {
|
||||
.navbar-transparent {
|
||||
.navbar-nav {
|
||||
.nav-link {
|
||||
color: $navbar-dark-color;
|
||||
|
||||
@include hover-focus {
|
||||
color: $navbar-dark-hover-color;
|
||||
}
|
||||
|
||||
&.disabled {
|
||||
color: $navbar-dark-disabled-color;
|
||||
}
|
||||
}
|
||||
|
||||
.show > .nav-link,
|
||||
.active > .nav-link,
|
||||
.nav-link.show,
|
||||
.nav-link.active {
|
||||
color: $navbar-dark-active-color;
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-brand {
|
||||
color: $navbar-dark-color;
|
||||
|
||||
@include hover-focus {
|
||||
color: $navbar-dark-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,66 +0,0 @@
|
||||
//
|
||||
// Nav pills
|
||||
//
|
||||
|
||||
|
||||
// General styles
|
||||
|
||||
.nav-pills {
|
||||
.nav-item:not(:last-child) {
|
||||
padding-right: $nav-pills-space-x;
|
||||
}
|
||||
|
||||
.nav-link {
|
||||
padding: $nav-pills-padding-y $nav-pills-padding-x;
|
||||
color: $nav-pills-link-color;
|
||||
font-weight: 500;
|
||||
font-size: $font-size-sm;
|
||||
box-shadow: $nav-pills-box-shadow;
|
||||
background-color: $nav-pills-bg;
|
||||
transition: $transition-base;
|
||||
|
||||
&:hover {
|
||||
color: $nav-pills-link-hover-color;
|
||||
}
|
||||
}
|
||||
|
||||
.nav-link.active,
|
||||
.show > .nav-link {
|
||||
color: $nav-pills-link-active-color;
|
||||
background-color: $nav-pills-link-active-bg;
|
||||
}
|
||||
|
||||
@include media-breakpoint-down(xs) {
|
||||
.nav-item {
|
||||
margin-bottom: $spacer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@include media-breakpoint-down(sm) {
|
||||
.nav-pills:not(.nav-pills-circle) {
|
||||
.nav-item {
|
||||
padding-right: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Rounded circle nav pills
|
||||
|
||||
.nav-pills-circle {
|
||||
.nav-link {
|
||||
text-align: center;
|
||||
height: 60px;
|
||||
width: 60px;
|
||||
padding: 0;
|
||||
line-height: 60px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.nav-link-icon {
|
||||
i, svg {
|
||||
font-size: 1rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,33 +0,0 @@
|
||||
//
|
||||
// Nav
|
||||
//
|
||||
|
||||
|
||||
// Nav wrapper (container)
|
||||
|
||||
// Nav wrapper
|
||||
.nav-wrapper {
|
||||
padding: 1rem 0;
|
||||
@include border-top-radius($card-border-radius);
|
||||
|
||||
+ .card {
|
||||
@include border-top-radius(0);
|
||||
@include border-bottom-radius($card-border-radius);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Nav links
|
||||
|
||||
.nav-link {
|
||||
color: $nav-link-color;
|
||||
|
||||
&:hover {
|
||||
color: $nav-link-hover-color;
|
||||
}
|
||||
|
||||
i.ni {
|
||||
position: relative;
|
||||
top: 2px;
|
||||
}
|
||||
}
|
||||
@ -1,48 +0,0 @@
|
||||
//
|
||||
// Pagination
|
||||
//
|
||||
|
||||
|
||||
.page-item {
|
||||
&.active .page-link {
|
||||
box-shadow: $pagination-active-box-shadow;
|
||||
}
|
||||
|
||||
.page-link,
|
||||
span {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 0;
|
||||
margin: 0 3px;
|
||||
border-radius: 50% !important;
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
font-size: $font-size-sm;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Size variations
|
||||
|
||||
.pagination-lg {
|
||||
.page-item {
|
||||
.page-link,
|
||||
span {
|
||||
width: 46px;
|
||||
height: 46px;
|
||||
line-height: 46px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.pagination-sm {
|
||||
.page-item {
|
||||
.page-link,
|
||||
span {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,21 +0,0 @@
|
||||
//
|
||||
// Popover
|
||||
//
|
||||
|
||||
|
||||
.popover {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.popover-header {
|
||||
font-weight: $font-weight-bold;
|
||||
}
|
||||
|
||||
|
||||
// Alternative colors
|
||||
|
||||
@each $color, $value in $theme-colors {
|
||||
.popover-#{$color} {
|
||||
@include popover-variant($value);
|
||||
}
|
||||
}
|
||||
@ -1,79 +0,0 @@
|
||||
//
|
||||
// Progress
|
||||
//
|
||||
|
||||
|
||||
// Progress container
|
||||
|
||||
.progress-wrapper {
|
||||
position: relative;
|
||||
padding-top: 1.5rem;
|
||||
}
|
||||
|
||||
|
||||
// General styles
|
||||
|
||||
.progress {
|
||||
height: 8px;
|
||||
margin-bottom: $spacer;
|
||||
overflow: hidden;
|
||||
border-radius: $border-radius-sm;
|
||||
background-color: $progress-bg;
|
||||
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
||||
|
||||
.sr-only {
|
||||
width: auto;
|
||||
height: 20px;
|
||||
margin: 0 0 0 30px;
|
||||
left: 0;
|
||||
clip: auto;
|
||||
line-height: 20px;
|
||||
font-size: 13px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Progress inner elements
|
||||
|
||||
.progress-heading {
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
margin: 0 0 2px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.progress-bar {
|
||||
box-shadow: none;
|
||||
border-radius: 0;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.progress-info{
|
||||
margin-bottom: .5rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.progress-label {
|
||||
span {
|
||||
display: inline-block;
|
||||
color: $primary;
|
||||
font-size: .625rem;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
background: rgba($primary, .1);
|
||||
padding: .25rem 1rem;
|
||||
border-radius: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
.progress-percentage {
|
||||
text-align: right;
|
||||
span {
|
||||
display: inline-block;
|
||||
color: $gray-600;
|
||||
font-size: .875rem;
|
||||
font-weight: 600;
|
||||
}
|
||||
}
|
||||
@ -1,54 +0,0 @@
|
||||
//
|
||||
// Separator
|
||||
// add svg on top or bottom of a section for a more stylish visual
|
||||
//
|
||||
|
||||
|
||||
.separator {
|
||||
position: absolute;
|
||||
top: auto;
|
||||
left: 0;
|
||||
right: 0;
|
||||
width: 100%;
|
||||
height: 150px;
|
||||
transform: translateZ(0);
|
||||
overflow: hidden;
|
||||
pointer-events: none;
|
||||
|
||||
svg {
|
||||
position: absolute;
|
||||
pointer-events: none;
|
||||
}
|
||||
}
|
||||
|
||||
.separator-top {
|
||||
top: 0;
|
||||
bottom: auto;
|
||||
|
||||
svg {
|
||||
top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.separator-bottom {
|
||||
top: auto;
|
||||
bottom: 0;
|
||||
|
||||
svg {
|
||||
bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.separator-inverse {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
|
||||
// Styles
|
||||
|
||||
.separator-skew {
|
||||
height: 60px;
|
||||
|
||||
@include media-breakpoint-up(xl) {
|
||||
height: 70px;
|
||||
}
|
||||
}
|
||||
@ -1,118 +0,0 @@
|
||||
//
|
||||
// Table
|
||||
//
|
||||
|
||||
|
||||
// General styles
|
||||
|
||||
.table {
|
||||
thead th {
|
||||
padding-top: $table-head-spacer-y;
|
||||
padding-bottom: $table-head-spacer-y;
|
||||
font-size: $table-head-font-size;
|
||||
text-transform: $table-head-text-transform;
|
||||
letter-spacing: $table-head-letter-spacing;
|
||||
border-bottom: $table-border-width solid $table-border-color;
|
||||
}
|
||||
|
||||
th {
|
||||
font-weight: $table-head-font-weight;
|
||||
}
|
||||
|
||||
td {
|
||||
.progress {
|
||||
height: 3px;
|
||||
width: 120px;
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
|
||||
td,
|
||||
th {
|
||||
font-size: $table-body-font-size;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
|
||||
// Vetical align table content
|
||||
|
||||
&.align-items-center {
|
||||
td,
|
||||
th {
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Styles for dark table
|
||||
|
||||
.thead-dark {
|
||||
th {
|
||||
background-color: $table-dark-head-bg;
|
||||
color: $table-dark-head-color;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Styles for light table
|
||||
|
||||
.thead-light {
|
||||
th {
|
||||
background-color: $table-head-bg;
|
||||
color: $table-head-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Add transition for hover state
|
||||
|
||||
.table-hover {
|
||||
tr {
|
||||
@include transition($transition-base);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Flush tables
|
||||
|
||||
.table-flush {
|
||||
td,
|
||||
th {
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
}
|
||||
|
||||
tbody {
|
||||
tr {
|
||||
&:first-child {
|
||||
td,
|
||||
th {
|
||||
border-top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
td,
|
||||
th {
|
||||
border-bottom: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Tables inside cards
|
||||
|
||||
.card {
|
||||
.table {
|
||||
margin-bottom: 0;
|
||||
|
||||
td,
|
||||
th {
|
||||
padding-left: $card-spacer-x;
|
||||
padding-right: $card-spacer-x;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,22 +0,0 @@
|
||||
//
|
||||
// Article
|
||||
//
|
||||
|
||||
article {
|
||||
h4:not(:first-child),
|
||||
h5:not(:first-child) {
|
||||
margin-top: 3rem;
|
||||
}
|
||||
|
||||
h4, h5 {
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
figure {
|
||||
margin: 3rem 0;
|
||||
}
|
||||
|
||||
h5 + figure {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
@ -1,14 +0,0 @@
|
||||
//
|
||||
// Display
|
||||
//
|
||||
|
||||
|
||||
.display-1,
|
||||
.display-2,
|
||||
.display-3,
|
||||
.display-4 {
|
||||
span {
|
||||
display: block;
|
||||
font-weight: $font-weight-light;
|
||||
}
|
||||
}
|
||||
@ -1,52 +0,0 @@
|
||||
//
|
||||
// Heading
|
||||
//
|
||||
|
||||
|
||||
// General styles
|
||||
|
||||
.heading {
|
||||
letter-spacing: $heading-letter-spacing;
|
||||
font-size: $heading-font-size;
|
||||
text-transform: $heading-text-transform;
|
||||
font-weight: $heading-font-weight;
|
||||
}
|
||||
|
||||
|
||||
// Heading variations
|
||||
|
||||
.heading-small {
|
||||
padding-top: .25rem;
|
||||
padding-bottom: .25rem;
|
||||
font-size: .75rem;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: .04em;
|
||||
}
|
||||
|
||||
.heading-title {
|
||||
letter-spacing: $heading-title-letter-spacing;
|
||||
font-size: $heading-title-font-size;
|
||||
font-weight: $heading-title-font-weight;
|
||||
text-transform: $heading-title-text-transform;
|
||||
}
|
||||
|
||||
.heading-section {
|
||||
letter-spacing: $heading-section-letter-spacing;
|
||||
font-size: $heading-section-font-size;
|
||||
font-weight: $heading-section-font-weight;
|
||||
text-transform: $heading-section-text-transform;
|
||||
|
||||
img {
|
||||
display: block;
|
||||
width: 72px;
|
||||
height: 72px;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
&.text-center {
|
||||
img {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,27 +0,0 @@
|
||||
//
|
||||
// Type
|
||||
//
|
||||
|
||||
|
||||
// Paragraphs
|
||||
|
||||
p {
|
||||
font-size: $paragraph-font-size;
|
||||
font-weight: $paragraph-font-weight;
|
||||
line-height: $paragraph-line-height;
|
||||
}
|
||||
|
||||
.lead {
|
||||
font-size: $lead-font-size;
|
||||
font-weight: $lead-font-weight;
|
||||
line-height: $paragraph-line-height;
|
||||
margin-top: 1.5rem;
|
||||
|
||||
+ .btn-wrapper {
|
||||
margin-top: 3rem;
|
||||
}
|
||||
}
|
||||
|
||||
.description {
|
||||
font-size: $font-size-sm;
|
||||
}
|
||||
@ -1,51 +0,0 @@
|
||||
//
|
||||
// Backgrounds
|
||||
//
|
||||
|
||||
|
||||
@each $color, $value in $colors {
|
||||
@include bg-variant(".bg-#{$color}", $value, $ignore-warning: true);
|
||||
}
|
||||
|
||||
@each $color, $value in $theme-colors {
|
||||
@include bg-gradient-variant(".bg-gradient-#{$color}", $value, $ignore-warning: true);
|
||||
}
|
||||
|
||||
@each $color, $value in $colors {
|
||||
@include bg-gradient-variant(".bg-gradient-#{$color}", $value, $ignore-warning: true);
|
||||
}
|
||||
|
||||
|
||||
// Background colors with transparency
|
||||
|
||||
@each $color, $value in $theme-colors {
|
||||
@include bg-translucent-variant(".bg-translucent-#{$color}", $value, $ignore-warning: true);
|
||||
}
|
||||
|
||||
|
||||
// Sections backgrounds
|
||||
|
||||
@each $color, $value in $section-colors {
|
||||
@include bg-variant(".section-#{$color}", $value, $ignore-warning: true);
|
||||
}
|
||||
|
||||
@each $color, $value in $theme-colors {
|
||||
@include bg-gradient-variant(".bg-gradient-#{$color}", $value, $ignore-warning: true);
|
||||
}
|
||||
|
||||
|
||||
// Shape (svg) fill colors
|
||||
|
||||
@each $color, $value in $theme-colors {
|
||||
.fill-#{$color} {
|
||||
fill: $value;
|
||||
}
|
||||
|
||||
.stroke-#{$color} {
|
||||
stroke: $value;
|
||||
}
|
||||
}
|
||||
|
||||
.fill-opacity-8 {
|
||||
fill-opacity: .8;
|
||||
}
|
||||
@ -1,37 +0,0 @@
|
||||
//
|
||||
// Blurable
|
||||
// add a blue effect on hover on any element with .blur--hover class
|
||||
//
|
||||
|
||||
.blur--hover {
|
||||
position: relative;
|
||||
|
||||
.blur-item {
|
||||
transition: 1s cubic-bezier(.19,1,.22,1);
|
||||
will-change: transform;
|
||||
filter: blur(0);
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.blur-hidden {
|
||||
position: absolute;
|
||||
top: calc(50% + 7px);
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
opacity: 0;
|
||||
transition: $transition-base;
|
||||
z-index: 100;
|
||||
}
|
||||
&:hover {
|
||||
.blur-item {
|
||||
opacity: .8;
|
||||
filter: blur(10px);
|
||||
transform: scale(.95);
|
||||
z-index: 1;
|
||||
}
|
||||
.blur-hidden {
|
||||
opacity: 1;
|
||||
top: 50%;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,64 +0,0 @@
|
||||
//
|
||||
// Floating
|
||||
// floating animation utility class
|
||||
//
|
||||
|
||||
|
||||
.floating {
|
||||
animation: floating 3s ease infinite;
|
||||
will-change: transform;
|
||||
|
||||
&:hover {
|
||||
animation-play-state: paused;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Size variations
|
||||
|
||||
.floating-lg {
|
||||
animation: floating-lg 3s ease infinite;
|
||||
}
|
||||
|
||||
.floating-sm {
|
||||
animation: floating-sm 3s ease infinite;
|
||||
}
|
||||
|
||||
|
||||
// Keyframes
|
||||
|
||||
@keyframes floating-lg {
|
||||
0% {
|
||||
transform: translateY(0px)
|
||||
}
|
||||
50% {
|
||||
transform: translateY(15px)
|
||||
}
|
||||
100% {
|
||||
transform: translateY(0px)
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes floating {
|
||||
0% {
|
||||
transform: translateY(0px)
|
||||
}
|
||||
50% {
|
||||
transform: translateY(10px)
|
||||
}
|
||||
100% {
|
||||
transform: translateY(0px)
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes floating-sm {
|
||||
0% {
|
||||
transform: translateY(0px)
|
||||
}
|
||||
50% {
|
||||
transform: translateY(5px)
|
||||
}
|
||||
100% {
|
||||
transform: translateY(0px)
|
||||
}
|
||||
}
|
||||
@ -1,18 +0,0 @@
|
||||
//
|
||||
// Helper
|
||||
// helper classes for different cases
|
||||
//
|
||||
|
||||
|
||||
// Clearfix for sections that use float property
|
||||
|
||||
.floatfix {
|
||||
&:before,
|
||||
&:after {
|
||||
content: '';
|
||||
display: table;
|
||||
}
|
||||
&:after {
|
||||
clear: both;
|
||||
}
|
||||
}
|
||||
@ -1,9 +0,0 @@
|
||||
//
|
||||
// Image
|
||||
//
|
||||
|
||||
.img-center {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
@ -1,35 +0,0 @@
|
||||
//
|
||||
// Opacity
|
||||
// modify the transparency of an element with this quick modifier classes
|
||||
//
|
||||
|
||||
.opacity-1 {
|
||||
opacity: .1 !important;
|
||||
}
|
||||
.opacity-2 {
|
||||
opacity: .2 !important;
|
||||
}
|
||||
.opacity-3 {
|
||||
opacity: .3 !important;
|
||||
}
|
||||
.opacity-4 {
|
||||
opacity: .4 !important;
|
||||
}
|
||||
.opacity-5 {
|
||||
opacity: .5 !important;
|
||||
}
|
||||
.opacity-6 {
|
||||
opacity: .6 !important;
|
||||
}
|
||||
.opacity-7 {
|
||||
opacity: .7 !important;
|
||||
}
|
||||
.opacity-8 {
|
||||
opacity: .8 !important;
|
||||
}
|
||||
.opacity-8 {
|
||||
opacity: .9 !important;
|
||||
}
|
||||
.opacity-10 {
|
||||
opacity: 1 !important;
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
//
|
||||
// Overflow
|
||||
//
|
||||
|
||||
.overflow-visible {
|
||||
overflow: visible !important;
|
||||
}
|
||||
|
||||
.overflow-hidden {
|
||||
overflow: hidden !important;
|
||||
}
|
||||
@ -1,25 +0,0 @@
|
||||
//
|
||||
// Position
|
||||
// modifier classes to be applied on an abosolute positioned element
|
||||
// use it next to .position-absolute class
|
||||
//
|
||||
|
||||
@each $size, $value in $spacers {
|
||||
.top-#{$size} {
|
||||
top: $value;
|
||||
}
|
||||
.right-#{$size} {
|
||||
right: $value;
|
||||
}
|
||||
.bottom-#{$size} {
|
||||
bottom: $value;
|
||||
}
|
||||
.left-#{$size} {
|
||||
left: $value;
|
||||
}
|
||||
}
|
||||
|
||||
.center {
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
@ -1,28 +0,0 @@
|
||||
//
|
||||
// Shadows
|
||||
//
|
||||
|
||||
// General styles
|
||||
[class*="shadow"] {
|
||||
@if $enable-transitions {
|
||||
transition: $transition-base;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Size variations
|
||||
.shadow-sm--hover:hover {
|
||||
box-shadow: $box-shadow-sm !important;
|
||||
}
|
||||
|
||||
.shadow--hover:hover {
|
||||
box-shadow: $box-shadow !important;
|
||||
}
|
||||
|
||||
.shadow-lg--hover:hover {
|
||||
box-shadow: $box-shadow-lg !important;
|
||||
}
|
||||
|
||||
.shadow-none--hover:hover {
|
||||
box-shadow: none !important;
|
||||
}
|
||||
@ -1,7 +0,0 @@
|
||||
//
|
||||
// Height
|
||||
//
|
||||
|
||||
.h-100vh {
|
||||
height: 100vh !important;
|
||||
}
|
||||
@ -1,107 +0,0 @@
|
||||
//
|
||||
// Spacing
|
||||
//
|
||||
|
||||
.row.row-grid > [class*="col-"] + [class*="col-"] {
|
||||
margin-top: 3rem;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(lg) {
|
||||
.row.row-grid > [class*="col-lg-"] + [class*="col-lg-"] {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
@include media-breakpoint-up(md) {
|
||||
.row.row-grid > [class*="col-md-"] + [class*="col-md-"] {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
@include media-breakpoint-up(sm) {
|
||||
.row.row-grid > [class*="col-sm-"] + [class*="col-sm-"] {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.row-grid + .row-grid {
|
||||
margin-top: 3rem;
|
||||
}
|
||||
|
||||
|
||||
// Negative margins and paddings
|
||||
|
||||
@media(min-width: 992px) {
|
||||
[class*="mt--"],
|
||||
[class*="mr--"],
|
||||
[class*="mb--"],
|
||||
[class*="ml--"] {
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Large negative margins in pixels
|
||||
|
||||
.mt--100 {
|
||||
margin-top: -100px !important;
|
||||
}
|
||||
.mr--100 {
|
||||
margin-right: -100px !important;
|
||||
}
|
||||
.mb--100 {
|
||||
margin-bottom: -100px !important;
|
||||
}
|
||||
.ml--100 {
|
||||
margin-left: -100px !important;
|
||||
}
|
||||
.mt--150 {
|
||||
margin-top: -150px !important;
|
||||
}
|
||||
.mb--150 {
|
||||
margin-bottom: -150px !important;
|
||||
}
|
||||
.mt--200 {
|
||||
margin-top: -200px !important;
|
||||
}
|
||||
.mb--200 {
|
||||
margin-bottom: -200px !important;
|
||||
}
|
||||
.mt--300 {
|
||||
margin-top: -300px !important;
|
||||
}
|
||||
.mb--300 {
|
||||
margin-bottom: -300px !important;
|
||||
}
|
||||
|
||||
|
||||
// Large margins in pixels
|
||||
|
||||
.pt-100 {
|
||||
padding-top: 100px !important;
|
||||
}
|
||||
.pb-100 {
|
||||
padding-bottom: 100px !important;
|
||||
}
|
||||
.pt-150 {
|
||||
padding-top: 150px !important;
|
||||
}
|
||||
.pb-150 {
|
||||
padding-bottom: 150px !important;
|
||||
}
|
||||
.pt-200 {
|
||||
padding-top: 200px !important;
|
||||
}
|
||||
.pb-200 {
|
||||
padding-bottom: 200px !important;
|
||||
}
|
||||
.pt-250 {
|
||||
padding-top: 250px !important;
|
||||
}
|
||||
.pb-250 {
|
||||
padding-bottom: 250px !important;
|
||||
}
|
||||
.pt-300 {
|
||||
padding-top: 300px!important;
|
||||
}
|
||||
.pb-300 {
|
||||
padding-bottom: 300px!important;
|
||||
}
|
||||
}
|
||||
@ -1,49 +0,0 @@
|
||||
// Weight and italics
|
||||
|
||||
.font-weight-300 { font-weight: 300 !important; }
|
||||
.font-weight-400 { font-weight: 400 !important; }
|
||||
.font-weight-500 { font-weight: 500 !important; }
|
||||
.font-weight-600 { font-weight: 600 !important; }
|
||||
.font-weight-700 { font-weight: 700 !important; }
|
||||
.font-weight-800 { font-weight: 800 !important; }
|
||||
.font-weight-900 { font-weight: 900 !important; }
|
||||
|
||||
|
||||
// Text decorations
|
||||
|
||||
.text-underline { text-decoration: underline; }
|
||||
.text-through { text-decoration: line-through; }
|
||||
|
||||
|
||||
// Text size
|
||||
|
||||
.text-xs { font-size: $font-size-xs !important; }
|
||||
.text-sm { font-size: $font-size-sm !important; }
|
||||
.text-lg { font-size: $font-size-lg !important; }
|
||||
.text-xl { font-size: $font-size-xl !important; }
|
||||
|
||||
|
||||
// Line heights
|
||||
|
||||
.lh-100 { line-height: 1; }
|
||||
.lh-110 { line-height: 1.1; }
|
||||
.lh-120 { line-height: 1.2; }
|
||||
.lh-130 { line-height: 1.3; }
|
||||
.lh-140 { line-height: 1.4; }
|
||||
.lh-150 { line-height: 1.5; }
|
||||
.lh-160 { line-height: 1.6; }
|
||||
.lh-170 { line-height: 1.7; }
|
||||
.lh-180 { line-height: 1.8; }
|
||||
|
||||
|
||||
// Letter spacings
|
||||
|
||||
.ls-1 { letter-spacing: .0625rem; }
|
||||
.ls-15 { letter-spacing: .09375rem; }
|
||||
.ls-2 { letter-spacing: 0.125rem; }
|
||||
|
||||
// Color variations
|
||||
|
||||
@each $color, $value in $colors {
|
||||
@include text-emphasis-variant(".text-#{$color}", $value);
|
||||
}
|
||||
@ -1,13 +0,0 @@
|
||||
//
|
||||
// Tranform
|
||||
//
|
||||
|
||||
|
||||
@include media-breakpoint-up(lg) {
|
||||
.transform-perspective-right {
|
||||
transform: scale(1) perspective(1040px) rotateY(-11deg) rotateX(2deg) rotate(2deg);
|
||||
}
|
||||
.transform-perspective-left{
|
||||
transform: scale(1) perspective(2000px) rotateY(11deg) rotateX(2deg) rotate(-2deg)
|
||||
}
|
||||
}
|
||||
@ -1,72 +0,0 @@
|
||||
%active-day {
|
||||
background: $datepicker-active-background;
|
||||
color: $datepicker-active-color;
|
||||
box-shadow: $datepicker-active-box-shadow;
|
||||
border: none;
|
||||
}
|
||||
.flatpickr-calendar {
|
||||
@include box-shadow($dropdown-box-shadow);
|
||||
padding: $datepicker-dropdown-padding;
|
||||
width: 347px;
|
||||
color: $gray-700;
|
||||
|
||||
.flatpickr-weekday {
|
||||
text-align: center;
|
||||
font-size: $font-size-sm;
|
||||
color: $gray-700;
|
||||
font-weight: normal;
|
||||
}
|
||||
.flatpickr-day {
|
||||
border: none;
|
||||
}
|
||||
.flatpickr-day:hover {
|
||||
@extend %active-day;
|
||||
}
|
||||
.flatpickr-day.selected {
|
||||
@extend %active-day;
|
||||
&:hover {
|
||||
@extend %active-day;
|
||||
}
|
||||
}
|
||||
|
||||
.flatpickr-day.today {
|
||||
border: 1px solid $datepicker-active-background;
|
||||
&:hover {
|
||||
background: $datepicker-active-background;
|
||||
color: $datepicker-active-color;
|
||||
}
|
||||
}
|
||||
.flatpickr-day.inRange {
|
||||
background: $datepicker-active-background !important;
|
||||
color: $datepicker-active-color;
|
||||
box-shadow: -5px 0 0 $datepicker-active-background, 5px 0 0 $datepicker-active-background;
|
||||
border: none !important;
|
||||
}
|
||||
|
||||
.flatpickr-day.startRange, .flatpickr-day.endRange {
|
||||
background: $datepicker-active-background;
|
||||
}
|
||||
|
||||
.flatpickr-day.selected.startRange + .endRange:not(:nth-child(7n+1)),
|
||||
.flatpickr-day.startRange.startRange + .endRange:not(:nth-child(7n+1)),
|
||||
.flatpickr-day.endRange.startRange + .endRange:not(:nth-child(7n+1)) {
|
||||
box-shadow: -10px 0 0 $datepicker-active-background;
|
||||
}
|
||||
|
||||
.flatpickr-months .flatpickr-prev-month:hover svg,
|
||||
.flatpickr-months .flatpickr-next-month:hover svg{
|
||||
fill: $datepicker-active-background;
|
||||
}
|
||||
|
||||
.flatpickr-current-month span.cur-month,
|
||||
.flatpickr-current-month input.cur-year{
|
||||
padding: 0 10px;
|
||||
color: $gray-700;
|
||||
font-size: $font-size-sm;
|
||||
font-weight: 500;
|
||||
&:hover {
|
||||
background: $gray-200;
|
||||
border-radius: $datepicker-header-cell-border-radius;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,25 +0,0 @@
|
||||
//
|
||||
// Headroom
|
||||
//
|
||||
|
||||
|
||||
.headroom {
|
||||
will-change: transform;
|
||||
background-color: inherit;
|
||||
@include transition($transition-base);
|
||||
}
|
||||
.headroom--pinned {
|
||||
@extend .position-fixed;
|
||||
transform: translateY(0%);
|
||||
}
|
||||
.headroom--unpinned {
|
||||
@extend .position-fixed;
|
||||
transform: translateY(-100%);
|
||||
}
|
||||
|
||||
.headroom--not-top {
|
||||
padding-top: .5rem;
|
||||
padding-bottom: .5rem;
|
||||
background-color: theme-color("default") !important;
|
||||
box-shadow: 0 1px 10px rgba(130, 130, 134, 0.1);
|
||||
}
|
||||
@ -1,410 +0,0 @@
|
||||
//
|
||||
// NoUi Slider
|
||||
//
|
||||
|
||||
|
||||
// Original styles
|
||||
|
||||
.noUi-target,
|
||||
.noUi-target * {
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||
-webkit-user-select: none;
|
||||
touch-action: none;
|
||||
user-select: none;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.noUi-target {
|
||||
position: relative;
|
||||
direction: ltr;
|
||||
}
|
||||
|
||||
.noUi-base,
|
||||
.noUi-connects {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
|
||||
// Wrapper for all connect elements
|
||||
|
||||
.noUi-connects {
|
||||
overflow: hidden;
|
||||
z-index: 0;
|
||||
}
|
||||
|
||||
.noUi-connect,
|
||||
.noUi-origin {
|
||||
will-change: transform;
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
top: 0;
|
||||
left: 0;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
transform-origin: 0 0;
|
||||
}
|
||||
|
||||
|
||||
html:not([dir="rtl"]) .noUi-horizontal .noUi-origin {
|
||||
left: 100%;
|
||||
width: 10%;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.noUi-vertical .noUi-origin {
|
||||
width: 0;
|
||||
}
|
||||
|
||||
.noUi-horizontal .noUi-origin {
|
||||
height: 0;
|
||||
}
|
||||
|
||||
.noUi-handle {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.noUi-state-tap .noUi-connect,
|
||||
.noUi-state-tap .noUi-origin {
|
||||
transition: transform .3s;
|
||||
}
|
||||
|
||||
.noUi-state-drag * {
|
||||
cursor: inherit !important;
|
||||
}
|
||||
|
||||
.noUi-horizontal {
|
||||
height: $noui-target-thickness;
|
||||
}
|
||||
|
||||
.noUi-horizontal .noUi-handle {
|
||||
width: 34px;
|
||||
height: 28px;
|
||||
left: -17px;
|
||||
top: -6px;
|
||||
}
|
||||
|
||||
.noUi-vertical {
|
||||
width: $noui-target-thickness;
|
||||
}
|
||||
|
||||
.noUi-vertical .noUi-handle {
|
||||
width: 28px;
|
||||
height: 34px;
|
||||
left: -6px;
|
||||
top: -17px;
|
||||
}
|
||||
|
||||
html:not([dir="rtl"]) .noUi-horizontal .noUi-handle {
|
||||
left: auto;
|
||||
}
|
||||
|
||||
.noUi-connects {
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.noUi-connect {
|
||||
background: $noui-slider-connect-bg;
|
||||
}
|
||||
|
||||
.noUi-draggable {
|
||||
cursor: ew-resize;
|
||||
}
|
||||
|
||||
.noUi-vertical .noUi-draggable {
|
||||
cursor: ns-resize;
|
||||
}
|
||||
|
||||
.noUi-handle {
|
||||
border: 1px solid #D9D9D9;
|
||||
border-radius: 3px;
|
||||
background: #FFF;
|
||||
cursor: default;
|
||||
box-shadow: inset 0 0 1px #FFF, inset 0 1px 7px #EBEBEB, 0 3px 6px -3px #BBB;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.noUi-active {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
|
||||
/* Disabled state;
|
||||
*/
|
||||
|
||||
[disabled] .noUi-connect {
|
||||
background: #B8B8B8;
|
||||
}
|
||||
|
||||
[disabled].noUi-target,
|
||||
[disabled].noUi-handle,
|
||||
[disabled] .noUi-handle {
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
|
||||
/* Base;
|
||||
*
|
||||
*/
|
||||
|
||||
.noUi-pips,
|
||||
.noUi-pips * {
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.noUi-pips {
|
||||
position: absolute;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
|
||||
/* Values;
|
||||
*
|
||||
*/
|
||||
|
||||
.noUi-value {
|
||||
position: absolute;
|
||||
white-space: nowrap;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.noUi-value-sub {
|
||||
color: #ccc;
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
|
||||
/* Markings;
|
||||
*
|
||||
*/
|
||||
|
||||
.noUi-marker {
|
||||
position: absolute;
|
||||
background: #CCC;
|
||||
}
|
||||
|
||||
.noUi-marker-sub {
|
||||
background: #AAA;
|
||||
}
|
||||
|
||||
.noUi-marker-large {
|
||||
background: #AAA;
|
||||
}
|
||||
|
||||
|
||||
/* Horizontal layout;
|
||||
*
|
||||
*/
|
||||
|
||||
.noUi-pips-horizontal {
|
||||
padding: 10px 0;
|
||||
height: 80px;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.noUi-value-horizontal {
|
||||
transform: translate(-50%, 50%);
|
||||
}
|
||||
|
||||
.noUi-rtl .noUi-value-horizontal {
|
||||
transform: translate(50%, 50%);
|
||||
}
|
||||
|
||||
.noUi-marker-horizontal.noUi-marker {
|
||||
margin-left: -1px;
|
||||
width: 2px;
|
||||
height: 5px;
|
||||
}
|
||||
|
||||
.noUi-marker-horizontal.noUi-marker-sub {
|
||||
height: 10px;
|
||||
}
|
||||
|
||||
.noUi-marker-horizontal.noUi-marker-large {
|
||||
height: 15px;
|
||||
}
|
||||
|
||||
|
||||
/* Vertical layout;
|
||||
*
|
||||
*/
|
||||
|
||||
.noUi-pips-vertical {
|
||||
padding: 0 10px;
|
||||
height: 100%;
|
||||
top: 0;
|
||||
left: 100%;
|
||||
}
|
||||
|
||||
.noUi-value-vertical {
|
||||
-webkit-transform: translate(0, -50%);
|
||||
transform: translate(0, -50%, 0);
|
||||
padding-left: 25px;
|
||||
}
|
||||
|
||||
.noUi-rtl .noUi-value-vertical {
|
||||
-webkit-transform: translate(0, 50%);
|
||||
transform: translate(0, 50%);
|
||||
}
|
||||
|
||||
.noUi-marker-vertical.noUi-marker {
|
||||
width: 5px;
|
||||
height: 2px;
|
||||
margin-top: -1px;
|
||||
}
|
||||
|
||||
.noUi-marker-vertical.noUi-marker-sub {
|
||||
width: 10px;
|
||||
}
|
||||
|
||||
.noUi-marker-vertical.noUi-marker-large {
|
||||
width: 15px;
|
||||
}
|
||||
|
||||
.noUi-tooltip {
|
||||
display: block;
|
||||
position: absolute;
|
||||
border: 1px solid #D9D9D9;
|
||||
border-radius: 3px;
|
||||
background: #fff;
|
||||
color: #000;
|
||||
padding: 5px;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.noUi-horizontal .noUi-tooltip {
|
||||
-webkit-transform: translate(-50%, 0);
|
||||
transform: translate(-50%, 0);
|
||||
left: 50%;
|
||||
bottom: 120%;
|
||||
}
|
||||
|
||||
.noUi-vertical .noUi-tooltip {
|
||||
-webkit-transform: translate(0, -50%);
|
||||
transform: translate(0, -50%);
|
||||
top: 50%;
|
||||
right: 120%;
|
||||
}
|
||||
|
||||
|
||||
// Custom styles
|
||||
|
||||
.noUi-target {
|
||||
background: $noui-target-bg;
|
||||
border-radius: $noui-target-border-radius;
|
||||
border: 0;
|
||||
box-shadow: $noui-target-box-shadow;
|
||||
margin: 15px 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.noUi-horizontal {
|
||||
height: $noui-target-thickness;
|
||||
}
|
||||
|
||||
|
||||
.noUi-vertical {
|
||||
width: $noui-target-thickness;
|
||||
}
|
||||
|
||||
.noUi-connect {
|
||||
background: theme-color("primary");
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.noUi-handle {
|
||||
|
||||
}
|
||||
|
||||
.noUi-horizontal .noUi-handle,
|
||||
.noUi-vertical .noUi-handle {
|
||||
top: -$noui-target-thickness;
|
||||
width: $noui-handle-width;
|
||||
height: $noui-handle-width;
|
||||
border-radius: 100%;
|
||||
box-shadow: none;
|
||||
cursor: pointer;
|
||||
background-color: $noui-handle-bg;
|
||||
border: $noui-handle-border;
|
||||
transition: box-shadow .15s, transform .15s;
|
||||
}
|
||||
|
||||
.noUi-horizontal .noUi-handle.noUi-active,
|
||||
.noUi-vertical .noUi-handle.noUi-active {
|
||||
box-shadow: 0px 0px 0px 2px rgba($noui-handle-bg, 1);
|
||||
}
|
||||
|
||||
.input-slider--cyan .noUi-connect {
|
||||
background: $cyan;
|
||||
}
|
||||
|
||||
|
||||
/* Disabled state */
|
||||
|
||||
[disabled] .noUi-connect,
|
||||
[disabled].noUi-connect {
|
||||
background: $noui-slider-connect-disabled-bg;
|
||||
}
|
||||
|
||||
[disabled] .noUi-handle,
|
||||
[disabled].noUi-origin {
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
/* Range slider value labels */
|
||||
|
||||
.range-slider-value {
|
||||
font-size: $font-size-xs;
|
||||
font-weight: 500;
|
||||
background-color: rgba($dark, .7);
|
||||
color: color-yiq($dark);
|
||||
border-radius: 10px;
|
||||
padding: .4em .8em .3em .85em;
|
||||
}
|
||||
|
||||
.range-slider-wrapper .upper-info {
|
||||
font-weight: 400;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.input-slider-value-output {
|
||||
background: #333;
|
||||
color: #fff;
|
||||
padding: 4px 8px;
|
||||
position: relative;
|
||||
top: 12px;
|
||||
font-size: 11px;
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
.input-slider-value-output:after {
|
||||
bottom: 100%;
|
||||
left: 10px;
|
||||
border: solid transparent;
|
||||
content: " ";
|
||||
height: 0;
|
||||
width: 0;
|
||||
position: absolute;
|
||||
pointer-events: none;
|
||||
border-color: rgba(136, 183, 213, 0);
|
||||
border-bottom-color: #333;
|
||||
border-width: 4px;
|
||||
margin-left: -4px;
|
||||
}
|
||||
|
||||
.input-slider-value-output.left:after {
|
||||
left: 10px;
|
||||
right: auto;
|
||||
}
|
||||
|
||||
.input-slider-value-output.right:after {
|
||||
right: 10px;
|
||||
left: auto;
|
||||
}
|
||||
@ -1,35 +0,0 @@
|
||||
//
|
||||
// Custom scrollbar
|
||||
//
|
||||
|
||||
.scrollbar-inner {
|
||||
height: 100%;
|
||||
|
||||
&:not(:hover) .scroll-element {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.scroll-element {
|
||||
transition: opacity 300ms;
|
||||
margin-right: 2px;
|
||||
|
||||
.scroll-bar,
|
||||
.scroll-element_track {
|
||||
transition: background-color 300ms;
|
||||
}
|
||||
|
||||
.scroll-element_track {
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
.scroll-element.scroll-y {
|
||||
width: 3px;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.scroll-element.scroll-x {
|
||||
height: 3px;
|
||||
bottom: 0;
|
||||
}
|
||||
}
|
||||
@ -1,6 +0,0 @@
|
||||
//
|
||||
// Alert
|
||||
//
|
||||
|
||||
@import "../core/alerts/alert";
|
||||
@import "../core/alerts/alert-dismissible";
|
||||
@ -1,6 +0,0 @@
|
||||
//
|
||||
// Avatar
|
||||
//
|
||||
|
||||
@import "../core/avatars/avatar";
|
||||
@import "../core/avatars/avatar-group";
|
||||
@ -1,7 +0,0 @@
|
||||
//
|
||||
// Badge
|
||||
//
|
||||
|
||||
@import "../core/badges/badge";
|
||||
@import "../core/badges/badge-circle";
|
||||
@import "../core/badges/badge-dot";
|
||||
@ -1,7 +0,0 @@
|
||||
//
|
||||
// Button
|
||||
//
|
||||
|
||||
@import "../core/buttons/button";
|
||||
@import "../core/buttons/button-icon";
|
||||
@import "../core/buttons/button-brand";
|
||||
@ -1,9 +0,0 @@
|
||||
//
|
||||
// Cards
|
||||
//
|
||||
|
||||
@import "../core/cards/card";
|
||||
@import "../core/cards/card-profile";
|
||||
@import "../core/cards/card-blockquote";
|
||||
@import "../core/cards/card-animations";
|
||||
@import "../core/cards/card-stats";
|
||||
@ -1,5 +0,0 @@
|
||||
//
|
||||
// Chart
|
||||
//
|
||||
|
||||
@import "../core/charts/chart";
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user