diff --git a/application/controllers/jobs/ESIJob.php b/application/controllers/jobs/ESIJob.php new file mode 100644 index 000000000..c9a558a46 --- /dev/null +++ b/application/controllers/jobs/ESIJob.php @@ -0,0 +1,165 @@ +load->model('person/Person_model', 'PersonModel'); + $this->load->model('person/Kennzeichen_model', 'KennzeichenModel'); + } + + //------------------------------------------------------------------------------------------------------------------ + // Public methods + + /** + * Initialises generateESI job, handles job queue, logs infos/errors + */ + public function generateESI() + { + //$jobType = 'DVUHSendPruefungsaktivitaeten'; + $this->logInfo(ESIScheduler::JOB_TYPE_GENERATE_ESI.' job start'); + + // Gets the latest jobs + $lastJobs = $this->getLastJobs(ESIScheduler::JOB_TYPE_GENERATE_ESI); + + if (isError($lastJobs)) + { + $this->logError(getCode($lastJobs).': '.getError($lastJobs), ESIScheduler::JOB_TYPE_GENERATE_ESI); + } + else + { + $this->updateJobs( + getData($lastJobs), // Jobs to be updated + array(JobsQueueLib::PROPERTY_START_TIME), // Job properties to be updated + array(date('Y-m-d H:i:s')) // Job properties new values + ); + + $person_arr = $this->_getInputObjArray(getData($lastJobs)); + + foreach ($person_arr as $persobj) + { + if (!isset($persobj->person_id)) + $this->logError("Error when generating ESI: invalid parameters"); + else + { + $person_id = $persobj->person_id; + + // check if there already is an active ESI + $this->KennzeichenModel->addSelect('1'); + $activeKennzeichenRes = $this->KennzeichenModel->loadWhere( + array('person_id' => $person_id, 'kennzeichentyp_kurzbz' => ESIScheduler::KENNZEICHENTYP_KURZBZ, 'aktiv' => true) + ); + + if (hasData($activeKennzeichenRes)) + { + $this->logError("Active ESI for person Id $person_id already exists"); + continue; + } + + // get Matrikelnr for person for which ESI should be generated + $this->PersonModel->addSelect('matr_nr'); + $personRes = $this->PersonModel->load($person_id); + + if (!hasData($personRes)) + { + $this->logError("Person with Id $person_id not found"); + continue; + } + + $matr_nr = getData($personRes)[0]->matr_nr; + + if (isEmptyString($matr_nr)) + { + $this->logError("Matrikelnummer for person with Id $person_id is empty"); + continue; + } + + $esi = self::ESI_PREFIX.$matr_nr; + + // check if ESI was already used + $this->KennzeichenModel->addSelect('1'); + $existingKennzeichenRes = $this->KennzeichenModel->loadWhere( + array('person_id' => $person_id, 'kennzeichentyp_kurzbz' => ESIScheduler::KENNZEICHENTYP_KURZBZ, 'inhalt' => $esi) + ); + + if (hasData($existingKennzeichenRes)) + { + $this->logError("ESI $esi for person Id $person_id already exists"); + continue; + } + + // if everything ok, save the esi for the person + $saveEsiResult = $this->KennzeichenModel->insert( + array( + 'person_id' => $person_id, + 'kennzeichentyp_kurzbz' => ESIScheduler::KENNZEICHENTYP_KURZBZ, + 'inhalt' => $esi, + 'aktiv' => true, + 'insertvon' => self::INSERT_VON + ) + ); + + if (isError($saveEsiResult)) + { + $this->logError("Error when sending ESI, person Id $person_id ".getError($saveEsiResult)); + } + } + } + + // Update jobs properties values + $this->updateJobs( + getData($lastJobs), // Jobs to be updated + array(JobsQueueLib::PROPERTY_STATUS, JobsQueueLib::PROPERTY_END_TIME), // Job properties to be updated + array(JobsQueueLib::STATUS_DONE, date('Y-m-d H:i:s')) // Job properties new values + ); + + if (hasData($lastJobs)) $this->updateJobsQueue(ESIScheduler::JOB_TYPE_GENERATE_ESI, getData($lastJobs)); + } + + $this->logInfo(ESIScheduler::JOB_TYPE_GENERATE_ESI.' job stop'); + } + + // -------------------------------------------------------------------------------------------- + // Private methods + + /** + * Extracts input data from jobs. + * @param $jobs + * @return array with jobinput + */ + private function _getInputObjArray($jobs) + { + $mergedUsersArray = array(); + + if (count($jobs) == 0) return $mergedUsersArray; + + foreach ($jobs as $job) + { + $decodedInput = json_decode($job->input); + if ($decodedInput != null) + { + foreach ($decodedInput as $el) + { + $mergedUsersArray[] = $el; + } + } + } + return $mergedUsersArray; + } +} diff --git a/application/controllers/jobs/schedulers/ESIScheduler.php b/application/controllers/jobs/schedulers/ESIScheduler.php new file mode 100644 index 000000000..3ab858937 --- /dev/null +++ b/application/controllers/jobs/schedulers/ESIScheduler.php @@ -0,0 +1,108 @@ +load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); + } + + //------------------------------------------------------------------------------------------------------------------ + // Public methods + + /** + * Creates jobs queue entries for generateESI job. + * @param string $studiensemester_kurzbz semester for which ESIs should be generated + */ + public function generateESI($studiensemester_kurzbz = null) + { + // if no semester given, get current studiensemester + if (!isset($studiensemester_kurzbz)) + { + $semRes = $this->StudiensemesterModel->getAkt(); + + if (hasData($semRes)) + { + $studiensemester_kurzbz = getData($semRes)[0]->studiensemester_kurzbz; + } + } + + if (isset($studiensemester_kurzbz)) + { + $this->logInfo('Start job queue scheduler '.self::JOB_TYPE_GENERATE_ESI); + + $qry = " + SELECT + DISTINCT person_id + FROM + public.tbl_person pers + JOIN public.tbl_prestudent ps USING (person_id) + JOIN public.tbl_prestudentstatus pss USING (prestudent_id) + WHERE + pss.studiensemester_kurzbz = ? + AND pers.matr_nr IS NOT NULL + AND pss.status_kurzbz IN ? + AND NOT EXISTS ( -- has no ESI yet + SELECT 1 + FROM + public.tbl_kennzeichen + WHERE + person_id = pers.person_id + AND kennzeichentyp_kurzbz = ? + AND aktiv + ) + AND NOT EXISTS ( -- making sure it's not an incoming + SELECT 1 + FROM + public.tbl_prestudentstatus + WHERE + prestudent_id = ps.prestudent_id + AND status_kurzbz = 'Incoming' + )"; + + $db = new DB_Model(); + $jobInputResult = $db->execReadOnlyQuery($qry, array($studiensemester_kurzbz, $this->_active_status_kurzbz, self::KENNZEICHENTYP_KURZBZ)); + + // If an error occured then log it + if (isError($jobInputResult)) + { + $this->logError(getError($jobInputResult)); + } + elseif (hasData($jobInputResult)) // if persons found + { + // Add the new job to the jobs queue + $addNewJobResult = $this->addNewJobsToQueue( + self::JOB_TYPE_GENERATE_ESI, // job type + $this->generateJobs( // gnerate the structure of the new job + JobsQueueLib::STATUS_NEW, + json_encode(getData($jobInputResult)) + ) + ); + + // If error occurred return it + if (isError($addNewJobResult)) $this->logError(getError($addNewJobResult)); + } + } + else + { + $this->logError('Error when getting Studiensemester'); + } + + $this->logInfo('End job queue scheduler '.self::JOB_TYPE_GENERATE_ESI); + } +} diff --git a/application/core/FHCAPI_Controller.php b/application/core/FHCAPI_Controller.php new file mode 100644 index 000000000..e59740ded --- /dev/null +++ b/application/core/FHCAPI_Controller.php @@ -0,0 +1,255 @@ +config->set_item('error_views_path', VIEWPATH.'errors'.DIRECTORY_SEPARATOR.'json'.DIRECTORY_SEPARATOR); + + global $g_result; + $g_result = $this; + + ob_start(function ($content) { + $http_response_code = http_response_code(); + // NOTE(chris): For security reasons 404 will be displayed the same everywhere + if ($http_response_code == REST_Controller::HTTP_NOT_FOUND) + return $content; + + header('Content-Type: application/json; charset=utf-8'); + + if (!isset($this->returnObj['meta']) || !isset($this->returnObj['meta']['status'])) { + switch ($http_response_code) { + case 200: + $this->setStatus(self::STATUS_SUCCESS); + break; + case 400: + $this->setStatus(self::STATUS_FAIL); + break; + default: + $this->setStatus(self::STATUS_ERROR); + break; + } + } + + #$this->returnObj['test'] = implode('/n', headers_list()); + + return json_encode($this->returnObj); + }); + + // Load libraries + $this->load->library('AuthLib'); + $this->load->library('PermissionLib'); + + // Checks if the caller is allowed to access to this content + $this->_isAllowed($requiredPermissions); + + // For JSON Requests (as opposed to multipart/form-data) get the $_POST variable from the input stream instead + if ($this->input->get_request_header('Content-Type', true) == 'application/json') + $_POST = json_decode($this->security->xss_clean($this->input->raw_input_stream), true); + elseif (isset($_POST['_jsondata'])) { + $_POST = array_merge($_POST, json_decode($_POST['_jsondata'], true)); + unset($_POST['_jsondata']); + } + } + + + // --------------------------------------------------------------- + // Handle Output object + // --------------------------------------------------------------- + + /** + * @param array $data + * @param string $type (optional) + * @return void + */ + public function addError($data, $type = null) + { + if (!isset($this->returnObj['errors'])) + $this->returnObj['errors'] = []; + + $error = []; + + if (is_array($data)) { + if ($type == self::ERROR_TYPE_VALIDATION) + $error['messages'] = $data; + else + $error = $data; + } else { + $error['message'] = $data; + } + + if ($type) + $error['type'] = $type; + + $this->returnObj['errors'][] = $error; + } + + /** + * @param mixed $data + * @return void + */ + public function setData($data) + { + $this->returnObj['data'] = $data; + } + + /** + * @param string $status + * @return void + */ + public function setStatus($status) + { + if (!isset($this->returnObj['meta'])) + $this->returnObj['meta'] = []; + $this->returnObj['meta']['status'] = $status; + } + + + // --------------------------------------------------------------- + // Handle Output object - Shortcut functions + // --------------------------------------------------------------- + + /** + * @param array $errors + * @return void + */ + protected function terminateWithValidationErrors($errors) + { + $this->output->set_status_header(REST_Controller::HTTP_BAD_REQUEST); + $this->addError($errors, self::ERROR_TYPE_VALIDATION); + $this->setStatus(self::STATUS_FAIL); + exit(EXIT_ERROR); + } + + /** + * @param mixed $data (optional) + * @return void + */ + protected function terminateWithSuccess($data = null) + { + $this->setData($data); + $this->setStatus(self::STATUS_SUCCESS); + exit; + } + + /** + * @param array $error + * @param string $type (optional) + * @return void + */ + protected function terminateWithError($error, $type = null) + { + $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + $this->addError($error, $type); + $this->setStatus(self::STATUS_ERROR); + exit; + } + + /** + * @param stdclass $result + * @param string $errortype + * @return void + */ + protected function checkForErrors($result, $errortype = self::ERROR_TYPE_GENERAL) + { + // TODO(chris): IMPLEMENT! + if (isError($result)) { + $this->terminateWithError(getError($result), $errortype); + } + return $result->retval; + } + + // TODO(chris): complete list + + + // --------------------------------------------------------------- + // Security + // --------------------------------------------------------------- + + /** + * Checks if the caller is allowed to access to this content with the given permissions + * If it is not allowed will set the HTTP header with code 401 + * Wrapper for permissionlib->isEntitled + * + * @param array $requiredPermissions + * @return void + */ + protected function _isAllowed($requiredPermissions) + { + // Checks if this user is entitled to access to this content + if (!$this->permissionlib->isEntitled($requiredPermissions, $this->router->method)) + { + $this->output->set_status_header(isLogged() ? REST_Controller::HTTP_FORBIDDEN : REST_Controller::HTTP_UNAUTHORIZED); + + $this->addError([ + 'message' => 'You are not allowed to access to this content', + 'controller' => $this->router->class, + 'method' => $this->router->method, + 'required_permissions' => $this->_rpsToString($requiredPermissions, $this->router->method) + ]); + exit; // immediately terminate the execution + } + } + + /** + * Converts an array of permissions to a string that contains them as a comma separated list + * Ex: ", , " + * + * @param array $requiredPermissions + * @param string $method + * @return void + */ + protected function _rpsToString($requiredPermissions, $method) + { + if (!isset($requiredPermissions[$method])) + return ''; + + if (!is_array($requiredPermissions[$method])) + return $requiredPermissions[$method]; + + return implode(', ', $requiredPermissions[$method]); + } +} diff --git a/application/models/person/Kennzeichen_model.php b/application/models/person/Kennzeichen_model.php new file mode 100644 index 000000000..fe8a9ac62 --- /dev/null +++ b/application/models/person/Kennzeichen_model.php @@ -0,0 +1,15 @@ +dbTable = 'public.tbl_kennzeichen'; + $this->pk = 'kennzeichen_id'; + } + +} diff --git a/application/views/errors/json/html/error_404.php b/application/views/errors/json/html/error_404.php new file mode 100644 index 000000000..0caade2b1 --- /dev/null +++ b/application/views/errors/json/html/error_404.php @@ -0,0 +1,65 @@ + + + + +404 Page Not Found + + + +
+

+ +
+ + diff --git a/application/views/errors/json/html/error_db.php b/application/views/errors/json/html/error_db.php new file mode 100644 index 000000000..dce6a7572 --- /dev/null +++ b/application/views/errors/json/html/error_db.php @@ -0,0 +1,49 @@ +

', $msg); + +$msgs = []; + +$error = [ + 'heading' => $heading +]; + +/** NOTE(chris): extract Error Number and SQL + * @see: DB_driver.php:692 + */ +if (substr(current($msg), 0, 14) == 'Error Number: ') { + $code = substr(array_shift($msg), 14); + if ($code) + $error['code'] = (int)$code; + $msgs[] = array_shift($msg); + $error['sql'] = array_shift($msg); +} + +/** NOTE(chris): extract Line Number and Filename + * @see: DB_driver.php:1782 + * @see: DB_driver.php:1783 + */ +if (count($msg) >= 2) { + if (substr(end($msg), 0, 13) == 'Line Number: ' && substr(prev($msg), 0, 10) == 'Filename: ') { + $error['line'] = (int)substr(array_pop($msg), 13); + $error['filename'] = substr(array_pop($msg), 10); + } +} + +foreach ($msg as $m) + $msgs[] = $m; + + +if (count($msgs) == 1) + $error['message'] = current($msgs); +else + $error['messages'] = $msgs; + +$g_result->addError($error, FHCAPI_Controller::ERROR_TYPE_DB); +$g_result->setStatus(FHCAPI_Controller::STATUS_ERROR); diff --git a/application/views/errors/json/html/error_exception.php b/application/views/errors/json/html/error_exception.php new file mode 100644 index 000000000..7984bd13e --- /dev/null +++ b/application/views/errors/json/html/error_exception.php @@ -0,0 +1,27 @@ + $message, + 'class' => get_class($exception), + 'filename' => $exception->getFile(), + 'line' => $exception->getLine() +]; + +if (defined('SHOW_DEBUG_BACKTRACE') && SHOW_DEBUG_BACKTRACE === true) { + $error['backtrace'] = []; + foreach (debug_backtrace() as $err) { + if (isset($err['file']) && strpos($err['file'], realpath(BASEPATH)) !== 0) { + $error['backtrace'][] = [ + 'file' => $err['file'], + 'line' => $err['line'], + 'function' => $err['function'] + ]; + } + } +} + +$g_result->addError($error, FHCAPI_Controller::ERROR_TYPE_EXCEPTION); +$g_result->setStatus(FHCAPI_Controller::STATUS_ERROR); diff --git a/application/views/errors/json/html/error_general.php b/application/views/errors/json/html/error_general.php new file mode 100644 index 000000000..e69494463 --- /dev/null +++ b/application/views/errors/json/html/error_general.php @@ -0,0 +1,20 @@ +

', $msg); + +$error = [ + 'heading' => $heading +]; +if (count($msg) == 1) + $error['message'] = current($msg); +else + $error['messages'] = $msg; + +$g_result->addError($error, FHCAPI_Controller::ERROR_TYPE_GENERAL); +$g_result->setStatus(FHCAPI_Controller::STATUS_ERROR); diff --git a/application/views/errors/json/html/error_php.php b/application/views/errors/json/html/error_php.php new file mode 100644 index 000000000..91f2abf3c --- /dev/null +++ b/application/views/errors/json/html/error_php.php @@ -0,0 +1,31 @@ + $message, + 'severity' => $severity, + 'filename' => $filepath, + 'line' => $line +]; + +if (defined('SHOW_DEBUG_BACKTRACE') && SHOW_DEBUG_BACKTRACE === true) { + $error['backtrace'] = []; + foreach (debug_backtrace() as $err) { + if (isset($err['file']) && strpos($err['file'], realpath(BASEPATH)) !== 0) { + $error['backtrace'][] = [ + 'file' => $err['file'], + 'line' => $err['line'], + 'function' => $err['function'] + ]; + } + } +} + +// TODO(chris): change type with severity +$g_result->addError($error, 'php'); + +if (((E_ERROR | E_PARSE | E_COMPILE_ERROR | E_CORE_ERROR | E_USER_ERROR) & $severity) === $severity) { + $g_result->setStatus('error'); +} diff --git a/cis/private/lehre/notenliste.xls.php b/cis/private/lehre/notenliste.xls.php index 63cf45d29..6c8db5246 100644 --- a/cis/private/lehre/notenliste.xls.php +++ b/cis/private/lehre/notenliste.xls.php @@ -114,12 +114,15 @@ else $format_highlight->setFgColor(15); $format_highlight->setBorder(1); $format_highlight->setBorderColor('white'); + $format_highlight->setAlign('left'); + $format_highlight->setNumFormat(49); $format_highlightright=& $workbook->addFormat(); $format_highlightright->setFgColor(15); $format_highlightright->setBorder(1); $format_highlightright->setBorderColor('white'); $format_highlightright->setAlign('right'); + $format_highlightright->setNumFormat(49); $format_highlightright_date=& $workbook->addFormat(); $format_highlightright_date->setFgColor(15); @@ -318,17 +321,23 @@ else $worksheet->write($lines,1,$elem->uid); $worksheet->write($lines,2,$elem->nachname.$inc); - $worksheet->write($lines,3,$elem->vorname); - //wenn Wahlname vorhanden überschreibt dieser den Vornamen - $worksheet->write($lines,3,$elem->wahlname); - $worksheet->write($lines,4,'="'.$elem->semester.$elem->verband.$elem->gruppe.'"'); - $worksheet->write($lines,5,'="'.trim($elem->matrikelnr).'"',$format_highlight); + if( NULL !== $elem->wahlname ) + { + //wenn Wahlname vorhanden überschreibt dieser den Vornamen + $worksheet->write($lines,3,$elem->wahlname); + } + else + { + $worksheet->write($lines,3,$elem->vorname); + } + $worksheet->write($lines,4,$elem->semester.$elem->verband.$elem->gruppe); + $worksheet->write($lines,5,trim($elem->matrikelnr),$format_highlight); $worksheet->write($lines,6, $note, $format_highlightright); // Nachprüfung if (defined('CIS_GESAMTNOTE_PRUEFUNG_TERMIN2') && CIS_GESAMTNOTE_PRUEFUNG_TERMIN2) { - $worksheet->write($lines,8, '="'.trim($elem->matrikelnr).'"', $format_highlight); + $worksheet->write($lines,8, trim($elem->matrikelnr), $format_highlight); $pr = new Pruefung(); $pr->getPruefungen($elem->uid, "Termin2", $lvid, $sem); $output2 = $pr->result; @@ -349,7 +358,7 @@ else // Nachprüfung if (defined('CIS_GESAMTNOTE_PRUEFUNG_TERMIN3') && CIS_GESAMTNOTE_PRUEFUNG_TERMIN3) { - $worksheet->write($lines,12, '="'.trim($elem->matrikelnr).'"', $format_highlight); + $worksheet->write($lines,12, trim($elem->matrikelnr), $format_highlight); $pr = new Pruefung(); $pr->getPruefungen($elem->uid, "Termin3", $lvid, $sem); $output3 = $pr->result; diff --git a/config/vilesci.config-default.inc.php b/config/vilesci.config-default.inc.php index ddcf8d563..a372bc9da 100644 --- a/config/vilesci.config-default.inc.php +++ b/config/vilesci.config-default.inc.php @@ -283,7 +283,7 @@ define('FAS_DOPPELTE_BUCHUNGSTYPEN_CHECK', serialize( 'StudiengebuehrRestzahlung' => array('StudiengebuehrErhoeht', 'Studiengebuehr', 'StudiengebuehrRestzahlung'), 'OEH' => array('OEH') )) -)); +); // Spezialnoten die am Zeunigs und Diplomasupplement ignoriert werden define('ZEUGNISNOTE_NICHT_ANZEIGEN',serialize(array('iar', 'nz'))); @@ -295,4 +295,13 @@ define ('DEFAULT_LEHRMODUS','regulaer'); //Echter Dienstvertrag define ('DEFAULT_ECHTER_DIENSTVERTRAG',[103,110]); +//Buchungstypen die fix auf eine bestimmte Kostenstelle gebucht werden sollen +//Buchungstyp => Studiengang_kz +define('FAS_BUCHUNGSTYP_FIXE_KOSTENSTELLE', serialize( + array( + 'Test_1' => 0, + 'Test_2' => 2 + ) +)); + ?> diff --git a/content/statistik/projektarbeitexport.xls.php b/content/statistik/projektarbeitexport.xls.php index 3b8e6b31e..2422292e7 100644 --- a/content/statistik/projektarbeitexport.xls.php +++ b/content/statistik/projektarbeitexport.xls.php @@ -64,7 +64,7 @@ $format_title->setAlign('merge'); //Zeilenueberschriften ausgeben $headline = array('Typ der Projektarbeit','Titel der Projektarbeit','Student', - 'Note','Punkte','Beginn','Ende','Freigegeben','Gesperrt bis','Gesamtstunden','Themenbereich', + 'Note','Punkte','Beginn','Ende','Freigegeben','Gesperrt bis','Themenbereich', 'Anmerkung','Projektarbeit ID'); $i = 0; @@ -81,7 +81,7 @@ $qry = "SELECT trim(COALESCE(titelpre,'') || ' ' || COALESCE(vorname,'') || ' ' || COALESCE(nachname,'') || ' ' || COALESCE(titelpost,'')), (SELECT anmerkung FROM lehre.tbl_note WHERE note=tbl_projektarbeit.note) as anmerkung, punkte, beginn, - ende, CASE WHEN freigegeben THEN 'Ja' ELSE 'Nein' END, gesperrtbis, gesamtstunden, themenbereich, + ende, CASE WHEN freigegeben THEN 'Ja' ELSE 'Nein' END, gesperrtbis, themenbereich, tbl_projektarbeit.anmerkung, projektarbeit_id FROM lehre.tbl_projektarbeit, lehre.tbl_lehreinheit, lehre.tbl_lehrveranstaltung, diff --git a/content/student/studentDBDML.php b/content/student/studentDBDML.php index e4361c01a..ed0ee56e1 100644 --- a/content/student/studentDBDML.php +++ b/content/student/studentDBDML.php @@ -2584,13 +2584,16 @@ if(!$error) } else { + if(defined('FAS_BUCHUNGSTYP_FIXE_KOSTENSTELLE') && isset(unserialize(FAS_BUCHUNGSTYP_FIXE_KOSTENSTELLE)[$_POST['buchungstyp_kurzbz']])) + $kostenstelle = unserialize(FAS_BUCHUNGSTYP_FIXE_KOSTENSTELLE)[$_POST['buchungstyp_kurzbz']]; + foreach ($person_ids as $person_id) { if($person_id!='') { $buchung = new konto(); $buchung->person_id = $person_id; - $buchung->studiengang_kz = $_POST['studiengang_kz']; + $buchung->studiengang_kz = isset($kostenstelle) ? $kostenstelle : $_POST['studiengang_kz']; $buchung->studiensemester_kurzbz = $_POST['studiensemester_kurzbz']; $buchung->buchungsnr_verweis=''; $buchung->betrag = $_POST['betrag']; diff --git a/include/zgv.class.php b/include/zgv.class.php index 20e2ef353..45a4c0cc0 100644 --- a/include/zgv.class.php +++ b/include/zgv.class.php @@ -187,16 +187,16 @@ class zgv extends basis_db public function getAllDoktor($onlyAktiv = false) { $sprache = new sprache(); - $qry='SELECT *,'.$sprache->getSprachQuery('bezeichnung').' FROM bis.tbl_zgvdoktor;'; - + $qry='SELECT *,'.$sprache->getSprachQuery('bezeichnung').' FROM bis.tbl_zgvdoktor'; + if ($onlyAktiv === true) { $qry .= " WHERE aktiv"; } - + $qry .= " ORDER BY zgvdoktor_bez"; - - + + if($result = $this->db_query($qry)) { while($row= $this->db_fetch_object($result)) diff --git a/public/css/Fhc.css b/public/css/Fhc.css index 23c2379ea..376206f6e 100644 --- a/public/css/Fhc.css +++ b/public/css/Fhc.css @@ -1,83 +1,100 @@ -.text-prewrap { +.fhc-header { + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-between; + align-items: baseline; + margin-bottom: 3rem; +} +.fhc-header > h1:first-child { + font-size: calc(1.325rem + .9vw); +} +.fhc-header > :first-child > small { + color: var(--bs-secondary); + font-size: .65em; + padding-inline-start: 1em; +} + +.fhc-alert.p-toast-center { + width: 35rem; + max-width: 100vw; +} +.fhc-alert.p-toast-top-right { + max-width: calc(100vw - 40px); +} +.fhc-alert.p-toast-top-right .p-toast-detail, +.fhc-alert.p-toast-center .p-toast-message-text .card { + white-space: pre-wrap; +} + +.text-preline { white-space: pre-line; } - -.accordion-button-primary { - background-color: #e7f1ff; - color: #0c63e4; -} -.accordion-button-primary:not(.collapsed) { - background-color: #cfe2ff; - color: #0a58ca; +.text-prewrap { + white-space: pre-wrap; } -.accordion-button-secondary { - background-color: #f0f1f2; - color: #616971; -} -.accordion-button-secondary:not(.collapsed) { - background-color: #e2e3e5; - color: #565e64; +.btn-p-0 { + padding: 0 .375rem; } -.accordion-button-success { - background-color: #e8f3ee; - color: #177a4c; -} -.accordion-button-success:not(.collapsed) { - background-color: #d1e7dd; - color: #146c43; +.z-1 { + z-index: 1; } -.accordion-button-info { - background-color: #e7fafe; - color: #0cb6d8; -} -.accordion-button-info:not(.collapsed) { - background-color: #cff4fc; - color: #0aa2c0; +.input-group > .input-group-item { + position: relative; + flex: 1 1 auto; + width: 1%; + min-width: 0; } -.accordion-button-warning { - background-color: #fff9e6; - color: #e6ae06; -} -.accordion-button-warning:not(.collapsed) { - background-color: #fff3cd; - color: #cc9a06; +.input-group > .input-group-item .form-control:focus, +.input-group > .input-group-item .form-select:focus { + z-index: 3; + position: relative; } -.accordion-button-danger { - background-color: #fcebec; - color: #c6303e; -} -.accordion-button-danger:not(.collapsed) { - background-color: #f8d7da; - color: #b02a37; +.input-group-lg > .input-group-item .form-control, +.input-group-lg > .input-group-item .form-select { + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: 0.3rem; } -.accordion-button-light { - background-color: #fefeff; - color: #dfe0e1; -} -.accordion-button-light:not(.collapsed) { - background-color: #fefefe; - color: #c6c7c8; + +.input-group-sm > .input-group-item .form-control, +.input-group-sm > .input-group-item .form-select { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.2rem; } -.accordion-button-dark { - background-color: #e9e9ea; - color: #1e2125; -} -.accordion-button-dark:not(.collapsed) { - background-color: #d3d3d4; - color: #1a1e21; +.input-group-lg > .input-group-item .form-select, +.input-group-sm > .input-group-item .form-select { + padding-right: 3rem; } -.tabulator-edit-list .tabulator-edit-list-item { - background-color: white; +.input-group:not(.has-validation) > .input-group-item:not(:last-child) .form-control, +.input-group:not(.has-validation) > .input-group-item:not(:last-child) .form-select { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group.has-validation > .input-group-item:nth-last-child(n+3) .form-control, +.input-group.has-validation > .input-group-item:nth-last-child(n+3) .form-select { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group > .input-group-item:not(:first-child) .form-control, +.input-group > .input-group-item:not(:first-child) .form-select { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.form-control-color.is-invalid, +.was-validated .form-control-color:invalid, +.form-control-color.is-valid, +.was-validated .form-control-color:valid { + padding-right: .375rem; + background-image: none; } -.tabulator-edit-list .tabulator-edit-list-item:hover, -.tabulator-edit-list .tabulator-edit-list-item.active { - color: white; -} \ No newline at end of file diff --git a/public/css/Tabulator5.css b/public/css/Tabulator5.css index 48124335f..b755f0d76 100644 --- a/public/css/Tabulator5.css +++ b/public/css/Tabulator5.css @@ -1,4 +1,4 @@ -@import '../../vendor/olifolkerd/tabulator5/dist/css/tabulator_bootstrap5.min.css'; +@import '../../vendor/olifolkerd/tabulator5/dist/css/tabulator_simple.min.css'; /* Apply borders and background to Cell instead of the Row * otherwise frozen columns won't look good (columns behind @@ -38,3 +38,9 @@ .tabulator .tabulator-col-resize-handle:last-of-type { z-index: 999999; } + +.tabulator-cell .btn { + padding: 0 .5rem; + max-height: 22px; + min-width: 30px; +} diff --git a/public/css/components/FilterComponent.css b/public/css/components/FilterComponent.css index cd0b33a48..50bfe561e 100644 --- a/public/css/components/FilterComponent.css +++ b/public/css/components/FilterComponent.css @@ -64,3 +64,12 @@ margin-top: 20px; } +.tabulator { + font-size: 1rem; +} +.tabulator-cell .btn { + padding: 0 .375rem; + font-size: .875rem; + border-radius: .2rem; +} + diff --git a/public/css/components/NavigationComponent.css b/public/css/components/NavigationComponent.css index 2d64d9cdc..429a131b5 100644 --- a/public/css/components/NavigationComponent.css +++ b/public/css/components/NavigationComponent.css @@ -82,6 +82,7 @@ /* * To be moved outside */ +.navbar.navbar-left-side ~ *, #content { position: inherit; margin: 0 0 0 250px; diff --git a/public/css/components/Tabs.css b/public/css/components/Tabs.css new file mode 100644 index 000000000..7127869f0 --- /dev/null +++ b/public/css/components/Tabs.css @@ -0,0 +1,16 @@ +.nav-item.nav-link:focus { + box-shadow: 0 0 0 .24rem rgba(13,110,253,.25); + z-index: 1; + outline: 0; + position: relative; +} +.nav-item.nav-link:focus::after { + content: ""; + display: block; + position: absolute; + left: -.5rem; + right: -.5rem; + top: calc(100% + 1px); + background: white; + height: .25rem; +} diff --git a/public/css/components/primevue.css b/public/css/components/primevue.css new file mode 100644 index 000000000..6e27bbc10 --- /dev/null +++ b/public/css/components/primevue.css @@ -0,0 +1,5677 @@ +@import '../../../vendor/npm-asset/primevue/resources/primevue.min.css'; +@import '../../../vendor/npm-asset/primeicons/primeicons.css'; + +:root { + --surface-a:#ffffff; + --surface-b:#efefef; + --surface-c:#e9ecef; + --surface-d:#dee2e6; + --surface-e:#ffffff; + --surface-f:#ffffff; + --text-color:#212529; + --text-color-secondary:#6c757d; + --primary-color:#007bff; + --primary-color-text:#ffffff; + --font-family:-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol; + --surface-0: #ffffff; + --surface-50: #f9fafb; + --surface-100: #f8f9fa; + --surface-200: #e9ecef; + --surface-300: #dee2e6; + --surface-400: #ced4da; + --surface-500: #adb5bd; + --surface-600: #6c757d; + --surface-700: #495057; + --surface-800: #343a40; + --surface-900: #212529; + --gray-50: #f9fafb; + --gray-100: #f8f9fa; + --gray-200: #e9ecef; + --gray-300: #dee2e6; + --gray-400: #ced4da; + --gray-500: #adb5bd; + --gray-600: #6c757d; + --gray-700: #495057; + --gray-800: #343a40; + --gray-900: #212529; + --content-padding:1.25rem; + --inline-spacing:0.5rem; + --border-radius:4px; + --surface-ground:#efefef; + --surface-section:#ffffff; + --surface-card:#ffffff; + --surface-overlay:#ffffff; + --surface-border:#dee2e6; + --surface-hover:#e9ecef; + --focus-ring: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); + --maskbg: rgba(0, 0, 0, 0.4); +} + +* { + box-sizing: border-box; +} + +.p-component { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-size: 1rem; + font-weight: normal; +} + +.p-component-overlay { + background-color: rgba(0, 0, 0, 0.4); + transition-duration: 0.15s; +} + +.p-disabled, .p-component:disabled { + opacity: 0.65; +} + +.p-error { + color: #dc3545; +} + +.p-text-secondary { + color: #6c757d; +} + +.pi { + font-size: 1rem; +} + +.p-link { + font-size: 1rem; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + border-radius: 4px; +} +.p-link:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} + +.p-component-overlay-enter { + animation: p-component-overlay-enter-animation 150ms forwards; +} + +.p-component-overlay-leave { + animation: p-component-overlay-leave-animation 150ms forwards; +} + +@keyframes p-component-overlay-enter-animation { + from { + background-color: transparent; + } + to { + background-color: var(--maskbg); + } +} +@keyframes p-component-overlay-leave-animation { + from { + background-color: var(--maskbg); + } + to { + background-color: transparent; + } +} + +:root { + --blue-50:#f3f8ff; + --blue-100:#c5dcff; + --blue-200:#97c1fe; + --blue-300:#69a5fe; + --blue-400:#3b8afd; + --blue-500:#0d6efd; + --blue-600:#0b5ed7; + --blue-700:#094db1; + --blue-800:#073d8b; + --blue-900:#052c65; + --green-50:#f4f9f6; + --green-100:#c8e2d6; + --green-200:#9ccbb5; + --green-300:#70b595; + --green-400:#459e74; + --green-500:#198754; + --green-600:#157347; + --green-700:#125f3b; + --green-800:#0e4a2e; + --green-900:#0a3622; + --yellow-50:#fffcf3; + --yellow-100:#fff0c3; + --yellow-200:#ffe494; + --yellow-300:#ffd965; + --yellow-400:#ffcd36; + --yellow-500:#ffc107; + --yellow-600:#d9a406; + --yellow-700:#b38705; + --yellow-800:#8c6a04; + --yellow-900:#664d03; + --cyan-50:#f3fcfe; + --cyan-100:#c5f2fb; + --cyan-200:#97e8f9; + --cyan-300:#69def6; + --cyan-400:#3bd4f3; + --cyan-500:#0dcaf0; + --cyan-600:#0baccc; + --cyan-700:#098da8; + --cyan-800:#076f84; + --cyan-900:#055160; + --pink-50:#fdf5f9; + --pink-100:#f5cee1; + --pink-200:#eda7ca; + --pink-300:#e681b3; + --pink-400:#de5a9b; + --pink-500:#d63384; + --pink-600:#b62b70; + --pink-700:#96245c; + --pink-800:#761c49; + --pink-900:#561435; + --indigo-50:#f7f3fe; + --indigo-100:#dac6fc; + --indigo-200:#bd98f9; + --indigo-300:#a06bf7; + --indigo-400:#833df4; + --indigo-500:#6610f2; + --indigo-600:#570ece; + --indigo-700:#470ba9; + --indigo-800:#380985; + --indigo-900:#290661; + --teal-50:#f4fcfa; + --teal-100:#c9f2e6; + --teal-200:#9fe8d2; + --teal-300:#75debf; + --teal-400:#4ad3ab; + --teal-500:#20c997; + --teal-600:#1bab80; + --teal-700:#168d6a; + --teal-800:#126f53; + --teal-900:#0d503c; + --orange-50:#fff9f3; + --orange-100:#ffe0c7; + --orange-200:#fec89a; + --orange-300:#feaf6d; + --orange-400:#fd9741; + --orange-500:#fd7e14; + --orange-600:#d76b11; + --orange-700:#b1580e; + --orange-800:#8b450b; + --orange-900:#653208; + --bluegray-50:#f8f9fb; + --bluegray-100:#e0e4ea; + --bluegray-200:#c7ced9; + --bluegray-300:#aeb9c8; + --bluegray-400:#95a3b8; + --bluegray-500:#7c8ea7; + --bluegray-600:#69798e; + --bluegray-700:#576375; + --bluegray-800:#444e5c; + --bluegray-900:#323943; + --purple-50:#f8f6fc; + --purple-100:#dcd2f0; + --purple-200:#c1aee4; + --purple-300:#a68ad9; + --purple-400:#8a66cd; + --purple-500:#6f42c1; + --purple-600:#5e38a4; + --purple-700:#4e2e87; + --purple-800:#3d246a; + --purple-900:#2c1a4d; + --red-50:#fdf5f6; + --red-100:#f7cfd2; + --red-200:#f0a8af; + --red-300:#e9828c; + --red-400:#e35b68; + --red-500:#dc3545; + --red-600:#bb2d3b; + --red-700:#9a2530; + --red-800:#791d26; + --red-900:#58151c; + --primary-50:#f2f8ff; + --primary-100:#c2dfff; + --primary-200:#91c6ff; + --primary-300:#61adff; + --primary-400:#3094ff; + --primary-500:#007bff; + --primary-600:#0069d9; + --primary-700:#0056b3; + --primary-800:#00448c; + --primary-900:#003166; +} + +.p-autocomplete .p-autocomplete-loader { + right: 0.75rem; +} +.p-autocomplete.p-autocomplete-dd .p-autocomplete-loader { + right: 3.107rem; +} +.p-autocomplete .p-autocomplete-multiple-container { + padding: 0.25rem 0.75rem; +} +.p-autocomplete .p-autocomplete-multiple-container:not(.p-disabled):hover { + border-color: #ced4da; +} +.p-autocomplete .p-autocomplete-multiple-container:not(.p-disabled).p-focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); + border-color: #007bff; +} +.p-autocomplete .p-autocomplete-multiple-container .p-autocomplete-input-token { + padding: 0.25rem 0; +} +.p-autocomplete .p-autocomplete-multiple-container .p-autocomplete-input-token input { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-size: 1rem; + color: #212529; + padding: 0; + margin: 0; +} +.p-autocomplete .p-autocomplete-multiple-container .p-autocomplete-token { + padding: 0.25rem 0.75rem; + margin-right: 0.5rem; + background: #dee2e6; + color: #212529; + border-radius: 16px; +} +.p-autocomplete .p-autocomplete-multiple-container .p-autocomplete-token .p-autocomplete-token-icon { + margin-left: 0.5rem; +} +.p-autocomplete.p-invalid.p-component > .p-inputtext { + border-color: #dc3545; +} + +.p-autocomplete-panel { + background: #ffffff; + color: #212529; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + box-shadow: none; +} +.p-autocomplete-panel .p-autocomplete-items { + padding: 0.5rem 0; +} +.p-autocomplete-panel .p-autocomplete-items .p-autocomplete-item { + margin: 0; + padding: 0.5rem 1.5rem; + border: 0 none; + color: #212529; + background: transparent; + transition: box-shadow 0.15s; + border-radius: 0; +} +.p-autocomplete-panel .p-autocomplete-items .p-autocomplete-item:hover { + color: #212529; + background: #e9ecef; +} +.p-autocomplete-panel .p-autocomplete-items .p-autocomplete-item.p-highlight { + color: #ffffff; + background: #007bff; +} +.p-autocomplete-panel .p-autocomplete-items .p-autocomplete-item-group { + margin: 0; + padding: 0.75rem 1rem; + color: #212529; + background: #ffffff; + font-weight: 600; +} + +.p-calendar.p-invalid.p-component > .p-inputtext { + border-color: #dc3545; +} + +.p-datepicker { + padding: 0; + background: #ffffff; + color: #212529; + border: 1px solid #ced4da; + border-radius: 4px; +} +.p-datepicker:not(.p-datepicker-inline) { + background: #ffffff; + border: 1px solid rgba(0, 0, 0, 0.15); + box-shadow: none; +} +.p-datepicker:not(.p-datepicker-inline) .p-datepicker-header { + background: #efefef; +} +.p-datepicker .p-datepicker-header { + padding: 0.5rem; + color: #212529; + background: #ffffff; + font-weight: 600; + margin: 0; + border-bottom: 1px solid #dee2e6; + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} +.p-datepicker .p-datepicker-header .p-datepicker-prev, +.p-datepicker .p-datepicker-header .p-datepicker-next { + width: 2rem; + height: 2rem; + color: #6c757d; + border: 0 none; + background: transparent; + border-radius: 50%; + transition: box-shadow 0.15s; +} +.p-datepicker .p-datepicker-header .p-datepicker-prev:enabled:hover, +.p-datepicker .p-datepicker-header .p-datepicker-next:enabled:hover { + color: #495057; + border-color: transparent; + background: transparent; +} +.p-datepicker .p-datepicker-header .p-datepicker-prev:focus, +.p-datepicker .p-datepicker-header .p-datepicker-next:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.p-datepicker .p-datepicker-header .p-datepicker-title { + line-height: 2rem; +} +.p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-year, +.p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month { + color: #212529; + transition: box-shadow 0.15s; + font-weight: 600; + padding: 0.5rem; +} +.p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-year:enabled:hover, +.p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month:enabled:hover { + color: #007bff; +} +.p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month { + margin-right: 0.5rem; +} +.p-datepicker table { + font-size: 1rem; + margin: 0.5rem 0; +} +.p-datepicker table th { + padding: 0.5rem; +} +.p-datepicker table th > span { + width: 2.5rem; + height: 2.5rem; +} +.p-datepicker table td { + padding: 0.5rem; +} +.p-datepicker table td > span { + width: 2.5rem; + height: 2.5rem; + border-radius: 4px; + transition: box-shadow 0.15s; + border: 1px solid transparent; +} +.p-datepicker table td > span.p-highlight { + color: #ffffff; + background: #007bff; +} +.p-datepicker table td > span:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.p-datepicker table td.p-datepicker-today > span { + background: #ced4da; + color: #212529; + border-color: transparent; +} +.p-datepicker table td.p-datepicker-today > span.p-highlight { + color: #ffffff; + background: #007bff; +} +.p-datepicker .p-datepicker-buttonbar { + padding: 1rem 0; + border-top: 1px solid #dee2e6; +} +.p-datepicker .p-datepicker-buttonbar .p-button { + width: auto; +} +.p-datepicker .p-timepicker { + border-top: 1px solid #dee2e6; + padding: 0.5rem; +} +.p-datepicker .p-timepicker button { + width: 2rem; + height: 2rem; + color: #6c757d; + border: 0 none; + background: transparent; + border-radius: 50%; + transition: box-shadow 0.15s; +} +.p-datepicker .p-timepicker button:enabled:hover { + color: #495057; + border-color: transparent; + background: transparent; +} +.p-datepicker .p-timepicker button:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.p-datepicker .p-timepicker button:last-child { + margin-top: 0.2em; +} +.p-datepicker .p-timepicker span { + font-size: 1.25rem; +} +.p-datepicker .p-timepicker > div { + padding: 0 0.5rem; +} +.p-datepicker.p-datepicker-timeonly .p-timepicker { + border-top: 0 none; +} +.p-datepicker .p-monthpicker { + margin: 0.5rem 0; +} +.p-datepicker .p-monthpicker .p-monthpicker-month { + padding: 0.5rem; + transition: box-shadow 0.15s; + border-radius: 4px; +} +.p-datepicker .p-monthpicker .p-monthpicker-month.p-highlight { + color: #ffffff; + background: #007bff; +} +.p-datepicker .p-yearpicker { + margin: 0.5rem 0; +} +.p-datepicker .p-yearpicker .p-yearpicker-year { + padding: 0.5rem; + transition: box-shadow 0.15s; + border-radius: 4px; +} +.p-datepicker .p-yearpicker .p-yearpicker-year.p-highlight { + color: #ffffff; + background: #007bff; +} +.p-datepicker.p-datepicker-multiple-month .p-datepicker-group { + border-left: 1px solid #dee2e6; + padding-right: 0; + padding-left: 0; + padding-top: 0; + padding-bottom: 0; +} +.p-datepicker.p-datepicker-multiple-month .p-datepicker-group:first-child { + padding-left: 0; + border-left: 0 none; +} +.p-datepicker.p-datepicker-multiple-month .p-datepicker-group:last-child { + padding-right: 0; +} +.p-datepicker:not(.p-disabled) table td span:not(.p-highlight):not(.p-disabled):hover { + background: #e9ecef; +} +.p-datepicker:not(.p-disabled) table td span:not(.p-highlight):not(.p-disabled):focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.p-datepicker:not(.p-disabled) .p-monthpicker .p-monthpicker-month:not(.p-disabled):not(.p-highlight):hover { + background: #e9ecef; +} +.p-datepicker:not(.p-disabled) .p-monthpicker .p-monthpicker-month:not(.p-disabled):focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.p-datepicker:not(.p-disabled) .p-yearpicker .p-yearpicker-year:not(.p-disabled):not(.p-highlight):hover { + background: #e9ecef; +} +.p-datepicker:not(.p-disabled) .p-yearpicker .p-yearpicker-year:not(.p-disabled):focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} + +@media screen and (max-width: 769px) { + .p-datepicker table th, .p-datepicker table td { + padding: 0; + } +} +.p-cascadeselect { + background: #ffffff; + border: 1px solid #ced4da; + transition: background-color 0.15s, border-color 0.15s, box-shadow 0.15s; + border-radius: 4px; +} +.p-cascadeselect:not(.p-disabled):hover { + border-color: #ced4da; +} +.p-cascadeselect:not(.p-disabled).p-focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); + border-color: #007bff; +} +.p-cascadeselect .p-cascadeselect-label { + background: transparent; + border: 0 none; + padding: 0.5rem 0.75rem; +} +.p-cascadeselect .p-cascadeselect-label.p-placeholder { + color: #6c757d; +} +.p-cascadeselect .p-cascadeselect-label:enabled:focus { + outline: 0 none; + box-shadow: none; +} +.p-cascadeselect .p-cascadeselect-trigger { + background: transparent; + color: #495057; + width: 2.357rem; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.p-cascadeselect.p-invalid.p-component { + border-color: #dc3545; +} + +.p-cascadeselect-panel { + background: #ffffff; + color: #212529; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + box-shadow: none; +} +.p-cascadeselect-panel .p-cascadeselect-items { + padding: 0.5rem 0; +} +.p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item { + margin: 0; + border: 0 none; + color: #212529; + background: transparent; + transition: box-shadow 0.15s; + border-radius: 0; +} +.p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item .p-cascadeselect-item-content { + padding: 0.5rem 1.5rem; +} +.p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item .p-cascadeselect-item-content:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: inset 0 0 0 0.15rem rgba(38, 143, 255, 0.5); +} +.p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item.p-highlight { + color: #ffffff; + background: #007bff; +} +.p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item:not(.p-highlight):not(.p-disabled):hover { + color: #212529; + background: #e9ecef; +} +.p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item .p-cascadeselect-group-icon { + font-size: 0.875rem; +} + +.p-input-filled .p-cascadeselect { + background: #efefef; +} +.p-input-filled .p-cascadeselect:not(.p-disabled):hover { + background-color: #efefef; +} +.p-input-filled .p-cascadeselect:not(.p-disabled).p-focus { + background-color: #efefef; +} + +.p-checkbox { + width: 20px; + height: 20px; +} +.p-checkbox .p-checkbox-box { + border: 2px solid #ced4da; + background: #ffffff; + width: 20px; + height: 20px; + color: #212529; + border-radius: 4px; + transition: background-color 0.15s, border-color 0.15s, box-shadow 0.15s; +} +.p-checkbox .p-checkbox-box .p-checkbox-icon { + transition-duration: 0.15s; + color: #ffffff; + font-size: 14px; +} +.p-checkbox .p-checkbox-box.p-highlight { + border-color: #007bff; + background: #007bff; +} +.p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover { + border-color: #ced4da; +} +.p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); + border-color: #007bff; +} +.p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-highlight:hover { + border-color: #0062cc; + background: #0062cc; + color: #ffffff; +} +.p-checkbox.p-invalid > .p-checkbox-box { + border-color: #dc3545; +} + +.p-input-filled .p-checkbox .p-checkbox-box { + background-color: #efefef; +} +.p-input-filled .p-checkbox .p-checkbox-box.p-highlight { + background: #007bff; +} +.p-input-filled .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover { + background-color: #efefef; +} +.p-input-filled .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-highlight:hover { + background: #0062cc; +} + +.p-highlight .p-checkbox .p-checkbox-box { + border-color: #ffffff; +} + +.p-chips .p-chips-multiple-container { + padding: 0.25rem 0.75rem; +} +.p-chips .p-chips-multiple-container:not(.p-disabled):hover { + border-color: #ced4da; +} +.p-chips .p-chips-multiple-container:not(.p-disabled).p-focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); + border-color: #007bff; +} +.p-chips .p-chips-multiple-container .p-chips-token { + padding: 0.25rem 0.75rem; + margin-right: 0.5rem; + background: #dee2e6; + color: #212529; + border-radius: 16px; +} +.p-chips .p-chips-multiple-container .p-chips-token .p-chips-token-icon { + margin-left: 0.5rem; +} +.p-chips .p-chips-multiple-container .p-chips-input-token { + padding: 0.25rem 0; +} +.p-chips .p-chips-multiple-container .p-chips-input-token input { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-size: 1rem; + color: #212529; + padding: 0; + margin: 0; +} +.p-chips.p-invalid.p-component > .p-inputtext { + border-color: #dc3545; +} + +.p-colorpicker-preview { + width: 2rem; + height: 2rem; +} + +.p-colorpicker-panel { + background: #212529; + border: 1px solid #212529; +} +.p-colorpicker-panel .p-colorpicker-color-handle, +.p-colorpicker-panel .p-colorpicker-hue-handle { + border-color: #ffffff; +} + +.p-colorpicker-overlay-panel { + box-shadow: none; +} + +.p-dropdown { + background: #ffffff; + border: 1px solid #ced4da; + transition: background-color 0.15s, border-color 0.15s, box-shadow 0.15s; + border-radius: 4px; +} +.p-dropdown:not(.p-disabled):hover { + border-color: #ced4da; +} +.p-dropdown:not(.p-disabled).p-focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); + border-color: #007bff; +} +.p-dropdown.p-dropdown-clearable .p-dropdown-label { + padding-right: 1.75rem; +} +.p-dropdown .p-dropdown-label { + background: transparent; + border: 0 none; +} +.p-dropdown .p-dropdown-label.p-placeholder { + color: #6c757d; +} +.p-dropdown .p-dropdown-label:enabled:focus { + outline: 0 none; + box-shadow: none; +} +.p-dropdown .p-dropdown-trigger { + background: transparent; + color: #495057; + width: 2.357rem; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.p-dropdown .p-dropdown-clear-icon { + color: #495057; + right: 2.357rem; +} +.p-dropdown.p-invalid.p-component { + border-color: #dc3545; +} + +.p-dropdown-panel { + background: #ffffff; + color: #212529; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + box-shadow: none; +} +.p-dropdown-panel .p-dropdown-header { + padding: 0.75rem 1.5rem; + border-bottom: 1px solid #dee2e6; + color: #212529; + background: #efefef; + margin: 0; + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} +.p-dropdown-panel .p-dropdown-header .p-dropdown-filter { + padding-right: 1.75rem; + margin-right: -1.75rem; +} +.p-dropdown-panel .p-dropdown-header .p-dropdown-filter-icon { + right: 0.75rem; + color: #495057; +} +.p-dropdown-panel .p-dropdown-items { + padding: 0.5rem 0; +} +.p-dropdown-panel .p-dropdown-items .p-dropdown-item { + margin: 0; + padding: 0.5rem 1.5rem; + border: 0 none; + color: #212529; + background: transparent; + transition: box-shadow 0.15s; + border-radius: 0; +} +.p-dropdown-panel .p-dropdown-items .p-dropdown-item.p-highlight { + color: #ffffff; + background: #007bff; +} +.p-dropdown-panel .p-dropdown-items .p-dropdown-item:not(.p-highlight):not(.p-disabled):hover { + color: #212529; + background: #e9ecef; +} +.p-dropdown-panel .p-dropdown-items .p-dropdown-item-group { + margin: 0; + padding: 0.75rem 1rem; + color: #212529; + background: #ffffff; + font-weight: 600; +} +.p-dropdown-panel .p-dropdown-items .p-dropdown-empty-message { + padding: 0.5rem 1.5rem; + color: #212529; + background: transparent; +} + +.p-input-filled .p-dropdown { + background: #efefef; +} +.p-input-filled .p-dropdown:not(.p-disabled):hover { + background-color: #efefef; +} +.p-input-filled .p-dropdown:not(.p-disabled).p-focus { + background-color: #efefef; +} +.p-input-filled .p-dropdown:not(.p-disabled).p-focus .p-inputtext { + background-color: transparent; +} + +.p-editor-container .p-editor-toolbar { + background: #efefef; + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} +.p-editor-container .p-editor-toolbar.ql-snow { + border: 1px solid #dee2e6; +} +.p-editor-container .p-editor-toolbar.ql-snow .ql-stroke { + stroke: #6c757d; +} +.p-editor-container .p-editor-toolbar.ql-snow .ql-fill { + fill: #6c757d; +} +.p-editor-container .p-editor-toolbar.ql-snow .ql-picker .ql-picker-label { + border: 0 none; + color: #6c757d; +} +.p-editor-container .p-editor-toolbar.ql-snow .ql-picker .ql-picker-label:hover { + color: #212529; +} +.p-editor-container .p-editor-toolbar.ql-snow .ql-picker .ql-picker-label:hover .ql-stroke { + stroke: #212529; +} +.p-editor-container .p-editor-toolbar.ql-snow .ql-picker .ql-picker-label:hover .ql-fill { + fill: #212529; +} +.p-editor-container .p-editor-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label { + color: #212529; +} +.p-editor-container .p-editor-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-stroke { + stroke: #212529; +} +.p-editor-container .p-editor-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-fill { + fill: #212529; +} +.p-editor-container .p-editor-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options { + background: #ffffff; + border: 1px solid rgba(0, 0, 0, 0.15); + box-shadow: none; + border-radius: 4px; + padding: 0.5rem 0; +} +.p-editor-container .p-editor-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options .ql-picker-item { + color: #212529; +} +.p-editor-container .p-editor-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options .ql-picker-item:hover { + color: #212529; + background: #e9ecef; +} +.p-editor-container .p-editor-toolbar.ql-snow .ql-picker.ql-expanded:not(.ql-icon-picker) .ql-picker-item { + padding: 0.5rem 1.5rem; +} +.p-editor-container .p-editor-content { + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.p-editor-container .p-editor-content.ql-snow { + border: 1px solid #dee2e6; +} +.p-editor-container .p-editor-content .ql-editor { + background: #ffffff; + color: #495057; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.p-editor-container .ql-snow.ql-toolbar button:hover, +.p-editor-container .ql-snow.ql-toolbar button:focus { + color: #212529; +} +.p-editor-container .ql-snow.ql-toolbar button:hover .ql-stroke, +.p-editor-container .ql-snow.ql-toolbar button:focus .ql-stroke { + stroke: #212529; +} +.p-editor-container .ql-snow.ql-toolbar button:hover .ql-fill, +.p-editor-container .ql-snow.ql-toolbar button:focus .ql-fill { + fill: #212529; +} +.p-editor-container .ql-snow.ql-toolbar button.ql-active, +.p-editor-container .ql-snow.ql-toolbar .ql-picker-label.ql-active, +.p-editor-container .ql-snow.ql-toolbar .ql-picker-item.ql-selected { + color: #007bff; +} +.p-editor-container .ql-snow.ql-toolbar button.ql-active .ql-stroke, +.p-editor-container .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke, +.p-editor-container .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke { + stroke: #007bff; +} +.p-editor-container .ql-snow.ql-toolbar button.ql-active .ql-fill, +.p-editor-container .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-fill, +.p-editor-container .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-fill { + fill: #007bff; +} +.p-editor-container .ql-snow.ql-toolbar button.ql-active .ql-picker-label, +.p-editor-container .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-picker-label, +.p-editor-container .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-picker-label { + color: #007bff; +} + +.p-inputgroup-addon { + background: #e9ecef; + color: #495057; + border-top: 1px solid #ced4da; + border-left: 1px solid #ced4da; + border-bottom: 1px solid #ced4da; + padding: 0.5rem 0.75rem; + min-width: 2.357rem; +} +.p-inputgroup-addon:last-child { + border-right: 1px solid #ced4da; +} + +.p-inputgroup > .p-component, +.p-inputgroup > .p-inputwrapper > .p-inputtext, +.p-inputgroup > .p-float-label > .p-component { + border-radius: 0; + margin: 0; +} +.p-inputgroup > .p-component + .p-inputgroup-addon, +.p-inputgroup > .p-inputwrapper > .p-inputtext + .p-inputgroup-addon, +.p-inputgroup > .p-float-label > .p-component + .p-inputgroup-addon { + border-left: 0 none; +} +.p-inputgroup > .p-component:focus, +.p-inputgroup > .p-inputwrapper > .p-inputtext:focus, +.p-inputgroup > .p-float-label > .p-component:focus { + z-index: 1; +} +.p-inputgroup > .p-component:focus ~ label, +.p-inputgroup > .p-inputwrapper > .p-inputtext:focus ~ label, +.p-inputgroup > .p-float-label > .p-component:focus ~ label { + z-index: 1; +} + +.p-inputgroup-addon:first-child, +.p-inputgroup button:first-child, +.p-inputgroup input:first-child, +.p-inputgroup > .p-inputwrapper:first-child, +.p-inputgroup > .p-inputwrapper:first-child > .p-inputtext { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} + +.p-inputgroup .p-float-label:first-child input { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} + +.p-inputgroup-addon:last-child, +.p-inputgroup button:last-child, +.p-inputgroup input:last-child, +.p-inputgroup > .p-inputwrapper:last-child, +.p-inputgroup > .p-inputwrapper:last-child > .p-inputtext { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.p-inputgroup .p-float-label:last-child input { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.p-fluid .p-inputgroup .p-button { + width: auto; +} +.p-fluid .p-inputgroup .p-button.p-button-icon-only { + width: 2.357rem; +} + +.p-inputnumber.p-invalid.p-component > .p-inputtext { + border-color: #dc3545; +} + +.p-inputswitch { + width: 3rem; + height: 1.75rem; +} +.p-inputswitch .p-inputswitch-slider { + background: #ced4da; + transition: background-color 0.15s, border-color 0.15s, box-shadow 0.15s; + border-radius: 4px; +} +.p-inputswitch .p-inputswitch-slider:before { + background: #ffffff; + width: 1.25rem; + height: 1.25rem; + left: 0.25rem; + margin-top: -0.625rem; + border-radius: 4px; + transition-duration: 0.15s; +} +.p-inputswitch.p-inputswitch-checked .p-inputswitch-slider:before { + transform: translateX(1.25rem); +} +.p-inputswitch.p-focus .p-inputswitch-slider { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.p-inputswitch:not(.p-disabled):hover .p-inputswitch-slider { + background: #ced4da; +} +.p-inputswitch.p-inputswitch-checked .p-inputswitch-slider { + background: #007bff; +} +.p-inputswitch.p-inputswitch-checked .p-inputswitch-slider:before { + background: #ffffff; +} +.p-inputswitch.p-inputswitch-checked:not(.p-disabled):hover .p-inputswitch-slider { + background: #007bff; +} +.p-inputswitch.p-invalid { + border-color: #dc3545; +} + + +.p-float-label > label { + left: 0.75rem; + color: #6c757d; + transition-duration: 0.15s; +} + +.p-float-label > .p-invalid + label { + color: #dc3545; +} + +.p-input-icon-left > i:first-of-type { + left: 0.75rem; + color: #495057; +} + +.p-input-icon-left > .p-inputtext { + padding-left: 2.5rem; +} + +.p-input-icon-left.p-float-label > label { + left: 2.5rem; +} + +.p-input-icon-right > i:last-of-type { + right: 0.75rem; + color: #495057; +} + +.p-input-icon-right > .p-inputtext { + padding-right: 2.5rem; +} + +::-webkit-input-placeholder { + color: #6c757d; +} + +:-moz-placeholder { + color: #6c757d; +} + +::-moz-placeholder { + color: #6c757d; +} + +:-ms-input-placeholder { + color: #6c757d; +} + +.p-input-filled .p-inputtext { + background-color: #efefef; +} +.p-input-filled .p-inputtext:enabled:hover { + background-color: #efefef; +} +.p-input-filled .p-inputtext:enabled:focus { + background-color: #efefef; +} + +.p-inputtext-sm .p-inputtext { + font-size: 0.875rem; + padding: 0.4375rem 0.65625rem; +} + +.p-inputtext-lg .p-inputtext { + font-size: 1.25rem; + padding: 0.625rem 0.9375rem; +} + +.p-listbox { + background: #ffffff; + color: #212529; + border: 1px solid #ced4da; + border-radius: 4px; +} +.p-listbox .p-listbox-header { + padding: 0.75rem 1.5rem; + border-bottom: 1px solid #dee2e6; + color: #212529; + background: #efefef; + margin: 0; + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} +.p-listbox .p-listbox-header .p-listbox-filter { + padding-right: 1.75rem; +} +.p-listbox .p-listbox-header .p-listbox-filter-icon { + right: 0.75rem; + color: #495057; +} +.p-listbox .p-listbox-list { + padding: 0.5rem 0; +} +.p-listbox .p-listbox-list .p-listbox-item { + margin: 0; + padding: 0.5rem 1.5rem; + border: 0 none; + color: #212529; + transition: box-shadow 0.15s; + border-radius: 0; +} +.p-listbox .p-listbox-list .p-listbox-item.p-highlight { + color: #ffffff; + background: #007bff; +} +.p-listbox .p-listbox-list .p-listbox-item:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: inset 0 0 0 0.15rem rgba(38, 143, 255, 0.5); +} +.p-listbox .p-listbox-list .p-listbox-item-group { + margin: 0; + padding: 0.75rem 1rem; + color: #212529; + background: #ffffff; + font-weight: 600; +} +.p-listbox .p-listbox-list .p-listbox-empty-message { + padding: 0.5rem 1.5rem; + color: #212529; + background: transparent; +} +.p-listbox:not(.p-disabled) .p-listbox-item:not(.p-highlight):not(.p-disabled):hover { + color: #212529; + background: #e9ecef; +} +.p-listbox.p-invalid { + border-color: #dc3545; +} + +.p-multiselect { + background: #ffffff; + border: 1px solid #ced4da; + transition: background-color 0.15s, border-color 0.15s, box-shadow 0.15s; + border-radius: 4px; +} +.p-multiselect:not(.p-disabled):hover { + border-color: #ced4da; +} +.p-multiselect:not(.p-disabled).p-focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); + border-color: #007bff; +} +.p-multiselect .p-multiselect-label { + padding: 0.5rem 0.75rem; + transition: background-color 0.15s, border-color 0.15s, box-shadow 0.15s; +} +.p-multiselect .p-multiselect-label.p-placeholder { + color: #6c757d; +} +.p-multiselect.p-multiselect-chip .p-multiselect-token { + padding: 0.25rem 0.75rem; + margin-right: 0.5rem; + background: #dee2e6; + color: #212529; + border-radius: 16px; +} +.p-multiselect.p-multiselect-chip .p-multiselect-token .p-multiselect-token-icon { + margin-left: 0.5rem; +} +.p-multiselect .p-multiselect-trigger { + background: transparent; + color: #495057; + width: 2.357rem; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.p-multiselect.p-invalid.p-component { + border-color: #dc3545; +} + +.p-inputwrapper-filled.p-multiselect.p-multiselect-chip .p-multiselect-label { + padding: 0.25rem 0.75rem; +} + +.p-multiselect-panel { + background: #ffffff; + color: #212529; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + box-shadow: none; +} +.p-multiselect-panel .p-multiselect-header { + padding: 0.75rem 1.5rem; + border-bottom: 1px solid #dee2e6; + color: #212529; + background: #efefef; + margin: 0; + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} +.p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext { + padding-right: 1.75rem; +} +.p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-multiselect-filter-icon { + right: 0.75rem; + color: #495057; +} +.p-multiselect-panel .p-multiselect-header .p-checkbox { + margin-right: 0.5rem; +} +.p-multiselect-panel .p-multiselect-header .p-multiselect-close { + margin-left: 0.5rem; + width: 2rem; + height: 2rem; + color: #6c757d; + border: 0 none; + background: transparent; + border-radius: 50%; + transition: box-shadow 0.15s; +} +.p-multiselect-panel .p-multiselect-header .p-multiselect-close:enabled:hover { + color: #495057; + border-color: transparent; + background: transparent; +} +.p-multiselect-panel .p-multiselect-header .p-multiselect-close:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.p-multiselect-panel .p-multiselect-items { + padding: 0.5rem 0; +} +.p-multiselect-panel .p-multiselect-items .p-multiselect-item { + margin: 0; + padding: 0.5rem 1.5rem; + border: 0 none; + color: #212529; + background: transparent; + transition: box-shadow 0.15s; + border-radius: 0; +} +.p-multiselect-panel .p-multiselect-items .p-multiselect-item.p-highlight { + color: #ffffff; + background: #007bff; +} +.p-multiselect-panel .p-multiselect-items .p-multiselect-item:not(.p-highlight):not(.p-disabled):hover { + color: #212529; + background: #e9ecef; +} +.p-multiselect-panel .p-multiselect-items .p-multiselect-item:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: inset 0 0 0 0.15rem rgba(38, 143, 255, 0.5); +} +.p-multiselect-panel .p-multiselect-items .p-multiselect-item .p-checkbox { + margin-right: 0.5rem; +} +.p-multiselect-panel .p-multiselect-items .p-multiselect-item-group { + margin: 0; + padding: 0.75rem 1rem; + color: #212529; + background: #ffffff; + font-weight: 600; +} +.p-multiselect-panel .p-multiselect-items .p-multiselect-empty-message { + padding: 0.5rem 1.5rem; + color: #212529; + background: transparent; +} + +.p-input-filled .p-multiselect { + background: #efefef; +} +.p-input-filled .p-multiselect:not(.p-disabled):hover { + background-color: #efefef; +} +.p-input-filled .p-multiselect:not(.p-disabled).p-focus { + background-color: #efefef; +} + +.p-password.p-invalid.p-component > .p-inputtext { + border-color: #dc3545; +} + +.p-password-panel { + padding: 1.25rem; + background: #ffffff; + color: #212529; + border: 1px solid rgba(0, 0, 0, 0.2); + box-shadow: none; + border-radius: 4px; +} +.p-password-panel .p-password-meter { + margin-bottom: 0.5rem; + background: #e9ecef; +} +.p-password-panel .p-password-meter .p-password-strength.weak { + background: #dc3545; +} +.p-password-panel .p-password-meter .p-password-strength.medium { + background: #ffc107; +} +.p-password-panel .p-password-meter .p-password-strength.strong { + background: #28a745; +} + +.p-radiobutton { + width: 20px; + height: 20px; +} +.p-radiobutton .p-radiobutton-box { + border: 2px solid #ced4da; + background: #ffffff; + width: 20px; + height: 20px; + color: #212529; + border-radius: 50%; + transition: background-color 0.15s, border-color 0.15s, box-shadow 0.15s; +} +.p-radiobutton .p-radiobutton-box:not(.p-disabled):not(.p-highlight):hover { + border-color: #ced4da; +} +.p-radiobutton .p-radiobutton-box:not(.p-disabled).p-focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); + border-color: #007bff; +} +.p-radiobutton .p-radiobutton-box .p-radiobutton-icon { + width: 12px; + height: 12px; + transition-duration: 0.15s; + background-color: #ffffff; +} +.p-radiobutton .p-radiobutton-box.p-highlight { + border-color: #007bff; + background: #007bff; +} +.p-radiobutton .p-radiobutton-box.p-highlight:not(.p-disabled):hover { + border-color: #0062cc; + background: #0062cc; + color: #ffffff; +} +.p-radiobutton.p-invalid > .p-radiobutton-box { + border-color: #dc3545; +} +.p-radiobutton:focus { + outline: 0 none; +} + +.p-input-filled .p-radiobutton .p-radiobutton-box { + background-color: #efefef; +} +.p-input-filled .p-radiobutton .p-radiobutton-box:not(.p-disabled):hover { + background-color: #efefef; +} +.p-input-filled .p-radiobutton .p-radiobutton-box.p-highlight { + background: #007bff; +} +.p-input-filled .p-radiobutton .p-radiobutton-box.p-highlight:not(.p-disabled):hover { + background: #0062cc; +} + +.p-highlight .p-radiobutton .p-radiobutton-box { + border-color: #ffffff; +} + +.p-rating .p-rating-icon { + color: #495057; + margin-left: 0.5rem; + transition: background-color 0.15s, border-color 0.15s, box-shadow 0.15s; + font-size: 1.143rem; +} +.p-rating .p-rating-icon.p-rating-cancel { + color: #dc3545; +} +.p-rating .p-rating-icon:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.p-rating .p-rating-icon:first-child { + margin-left: 0; +} +.p-rating .p-rating-icon.pi-star-fill { + color: #007bff; +} +.p-rating:not(.p-disabled):not(.p-readonly) .p-rating-icon:hover { + color: #007bff; +} +.p-rating:not(.p-disabled):not(.p-readonly) .p-rating-icon.p-rating-cancel:hover { + color: #dc3545; +} + +.p-highlight .p-rating .p-rating-icon { + color: #ffffff; +} + +.p-selectbutton .p-button { + background: #6c757d; + border: 1px solid #6c757d; + color: #ffffff; + transition: background-color 0.15s, border-color 0.15s, box-shadow 0.15s; +} +.p-selectbutton .p-button .p-button-icon-left, +.p-selectbutton .p-button .p-button-icon-right { + color: #ffffff; +} +.p-selectbutton .p-button:not(.p-disabled):not(.p-highlight):hover { + background: #5a6268; + border-color: #545b62; + color: #ffffff; +} +.p-selectbutton .p-button:not(.p-disabled):not(.p-highlight):hover .p-button-icon-left, +.p-selectbutton .p-button:not(.p-disabled):not(.p-highlight):hover .p-button-icon-right { + color: #ffffff; +} +.p-selectbutton .p-button.p-highlight { + background: #545b62; + border-color: #4e555b; + color: #ffffff; +} +.p-selectbutton .p-button.p-highlight .p-button-icon-left, +.p-selectbutton .p-button.p-highlight .p-button-icon-right { + color: #ffffff; +} +.p-selectbutton .p-button.p-highlight:hover { + background: #545b62; + border-color: #4e555b; + color: #ffffff; +} +.p-selectbutton .p-button.p-highlight:hover .p-button-icon-left, +.p-selectbutton .p-button.p-highlight:hover .p-button-icon-right { + color: #ffffff; +} +.p-selectbutton.p-invalid > .p-button { + border-color: #dc3545; +} + +.p-slider { + background: #e9ecef; + border: 0 none; + border-radius: 4px; +} +.p-slider.p-slider-horizontal { + height: 0.286rem; +} +.p-slider.p-slider-horizontal .p-slider-handle { + margin-top: -0.5715rem; + margin-left: -0.5715rem; +} +.p-slider.p-slider-vertical { + width: 0.286rem; +} +.p-slider.p-slider-vertical .p-slider-handle { + margin-left: -0.5715rem; + margin-bottom: -0.5715rem; +} +.p-slider .p-slider-handle { + height: 1.143rem; + width: 1.143rem; + background: #007bff; + border: 2px solid #007bff; + border-radius: 4px; + transition: background-color 0.15s, border-color 0.15s, box-shadow 0.15s; +} +.p-slider .p-slider-handle:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.p-slider .p-slider-range { + background: #007bff; +} +.p-slider:not(.p-disabled) .p-slider-handle:hover { + background: #0069d9; + border-color: #0069d9; +} + +.p-treeselect { + background: #ffffff; + border: 1px solid #ced4da; + transition: background-color 0.15s, border-color 0.15s, box-shadow 0.15s; + border-radius: 4px; +} +.p-treeselect:not(.p-disabled):hover { + border-color: #ced4da; +} +.p-treeselect:not(.p-disabled).p-focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); + border-color: #007bff; +} +.p-treeselect .p-treeselect-label { + padding: 0.5rem 0.75rem; + transition: background-color 0.15s, border-color 0.15s, box-shadow 0.15s; +} +.p-treeselect .p-treeselect-label.p-placeholder { + color: #6c757d; +} +.p-treeselect.p-treeselect-chip .p-treeselect-token { + padding: 0.25rem 0.75rem; + margin-right: 0.5rem; + background: #dee2e6; + color: #212529; + border-radius: 16px; +} +.p-treeselect .p-treeselect-trigger { + background: transparent; + color: #495057; + width: 2.357rem; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.p-treeselect.p-invalid.p-component { + border-color: #dc3545; +} + +.p-inputwrapper-filled.p-treeselect.p-treeselect-chip .p-treeselect-label { + padding: 0.25rem 0.75rem; +} + +.p-treeselect-panel { + background: #ffffff; + color: #212529; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + box-shadow: none; +} +.p-treeselect-panel .p-treeselect-items-wrapper .p-tree { + border: 0 none; +} +.p-treeselect-panel .p-treeselect-items-wrapper .p-treeselect-empty-message { + padding: 0.5rem 1.5rem; + color: #212529; + background: transparent; +} + +.p-input-filled .p-treeselect { + background: #efefef; +} +.p-input-filled .p-treeselect:not(.p-disabled):hover { + background-color: #efefef; +} +.p-input-filled .p-treeselect:not(.p-disabled).p-focus { + background-color: #efefef; +} + +.p-togglebutton.p-button { + background: #6c757d; + border: 1px solid #6c757d; + color: #ffffff; + transition: background-color 0.15s, border-color 0.15s, box-shadow 0.15s; +} +.p-togglebutton.p-button .p-button-icon-left, +.p-togglebutton.p-button .p-button-icon-right { + color: #ffffff; +} +.p-togglebutton.p-button:not(.p-disabled):not(.p-highlight):hover { + background: #5a6268; + border-color: #545b62; + color: #ffffff; +} +.p-togglebutton.p-button:not(.p-disabled):not(.p-highlight):hover .p-button-icon-left, +.p-togglebutton.p-button:not(.p-disabled):not(.p-highlight):hover .p-button-icon-right { + color: #ffffff; +} +.p-togglebutton.p-button.p-highlight { + background: #545b62; + border-color: #4e555b; + color: #ffffff; +} +.p-togglebutton.p-button.p-highlight .p-button-icon-left, +.p-togglebutton.p-button.p-highlight .p-button-icon-right { + color: #ffffff; +} +.p-togglebutton.p-button.p-highlight:hover { + background: #545b62; + border-color: #4e555b; + color: #ffffff; +} +.p-togglebutton.p-button.p-highlight:hover .p-button-icon-left, +.p-togglebutton.p-button.p-highlight:hover .p-button-icon-right { + color: #ffffff; +} +.p-togglebutton.p-button.p-invalid > .p-button { + border-color: #dc3545; +} + +.p-button { + color: #ffffff; + background: #007bff; + border: 1px solid #007bff; + padding: 0.5rem 0.75rem; + font-size: 1rem; + transition: background-color 0.15s, border-color 0.15s, box-shadow 0.15s; + border-radius: 4px; +} +.p-button:enabled:hover { + background: #0069d9; + color: #ffffff; + border-color: #0069d9; +} +.p-button:enabled:active { + background: #0062cc; + color: #ffffff; + border-color: #0062cc; +} +.p-button.p-button-outlined { + background-color: transparent; + color: #007bff; + border: 1px solid; +} +.p-button.p-button-outlined:enabled:hover { + background: rgba(0, 123, 255, 0.04); + color: #007bff; + border: 1px solid; +} +.p-button.p-button-outlined:enabled:active { + background: rgba(0, 123, 255, 0.16); + color: #007bff; + border: 1px solid; +} +.p-button.p-button-outlined.p-button-plain { + color: #6c757d; + border-color: #6c757d; +} +.p-button.p-button-outlined.p-button-plain:enabled:hover { + background: #e9ecef; + color: #6c757d; +} +.p-button.p-button-outlined.p-button-plain:enabled:active { + background: #dee2e6; + color: #6c757d; +} +.p-button.p-button-text { + background-color: transparent; + color: #007bff; + border-color: transparent; +} +.p-button.p-button-text:enabled:hover { + background: rgba(0, 123, 255, 0.04); + color: #007bff; + border-color: transparent; +} +.p-button.p-button-text:enabled:active { + background: rgba(0, 123, 255, 0.16); + color: #007bff; + border-color: transparent; +} +.p-button.p-button-text.p-button-plain { + color: #6c757d; +} +.p-button.p-button-text.p-button-plain:enabled:hover { + background: #e9ecef; + color: #6c757d; +} +.p-button.p-button-text.p-button-plain:enabled:active { + background: #dee2e6; + color: #6c757d; +} +.p-button:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.p-button .p-button-icon-left { + margin-right: 0.5rem; +} +.p-button .p-button-icon-right { + margin-left: 0.5rem; +} +.p-button .p-button-icon-bottom { + margin-top: 0.5rem; +} +.p-button .p-button-icon-top { + margin-bottom: 0.5rem; +} +.p-button .p-badge { + margin-left: 0.5rem; + min-width: 1rem; + height: 1rem; + line-height: 1rem; + color: #007bff; + background-color: #ffffff; +} +.p-button.p-button-raised { + box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12); +} +.p-button.p-button-rounded { + border-radius: 2rem; +} +.p-button.p-button-icon-only { + width: 2.357rem; + padding: 0.5rem 0; +} +.p-button.p-button-icon-only .p-button-icon-left, +.p-button.p-button-icon-only .p-button-icon-right { + margin: 0; +} +.p-button.p-button-icon-only.p-button-rounded { + border-radius: 50%; + height: 2.357rem; +} +.p-button.p-button-sm { + font-size: 0.875rem; + padding: 0.4375rem 0.65625rem; +} +.p-button.p-button-sm .p-button-icon { + font-size: 0.875rem; +} +.p-button.p-button-lg { + font-size: 1.25rem; + padding: 0.625rem 0.9375rem; +} +.p-button.p-button-lg .p-button-icon { + font-size: 1.25rem; +} +.p-button.p-button-loading-label-only .p-button-label { + margin-left: 0.5rem; +} +.p-button.p-button-loading-label-only .p-button-loading-icon { + margin-right: 0; +} + +.p-fluid .p-button { + width: 100%; +} +.p-fluid .p-button-icon-only { + width: 2.357rem; +} +.p-fluid .p-buttonset { + display: flex; +} +.p-fluid .p-buttonset .p-button { + flex: 1; +} + +.p-button.p-button-secondary, .p-buttonset.p-button-secondary > .p-button, .p-splitbutton.p-button-secondary > .p-button { + color: #ffffff; + background: #6c757d; + border: 1px solid #6c757d; +} +.p-button.p-button-secondary:enabled:hover, .p-buttonset.p-button-secondary > .p-button:enabled:hover, .p-splitbutton.p-button-secondary > .p-button:enabled:hover { + background: #5a6268; + color: #ffffff; + border-color: #5a6268; +} +.p-button.p-button-secondary:enabled:focus, .p-buttonset.p-button-secondary > .p-button:enabled:focus, .p-splitbutton.p-button-secondary > .p-button:enabled:focus { + box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5); +} +.p-button.p-button-secondary:enabled:active, .p-buttonset.p-button-secondary > .p-button:enabled:active, .p-splitbutton.p-button-secondary > .p-button:enabled:active { + background: #545b62; + color: #ffffff; + border-color: #4e555b; +} +.p-button.p-button-secondary.p-button-outlined, .p-buttonset.p-button-secondary > .p-button.p-button-outlined, .p-splitbutton.p-button-secondary > .p-button.p-button-outlined { + background-color: transparent; + color: #6c757d; + border: 1px solid; +} +.p-button.p-button-secondary.p-button-outlined:enabled:hover, .p-buttonset.p-button-secondary > .p-button.p-button-outlined:enabled:hover, .p-splitbutton.p-button-secondary > .p-button.p-button-outlined:enabled:hover { + background: rgba(108, 117, 125, 0.04); + color: #6c757d; + border: 1px solid; +} +.p-button.p-button-secondary.p-button-outlined:enabled:active, .p-buttonset.p-button-secondary > .p-button.p-button-outlined:enabled:active, .p-splitbutton.p-button-secondary > .p-button.p-button-outlined:enabled:active { + background: rgba(108, 117, 125, 0.16); + color: #6c757d; + border: 1px solid; +} +.p-button.p-button-secondary.p-button-text, .p-buttonset.p-button-secondary > .p-button.p-button-text, .p-splitbutton.p-button-secondary > .p-button.p-button-text { + background-color: transparent; + color: #6c757d; + border-color: transparent; +} +.p-button.p-button-secondary.p-button-text:enabled:hover, .p-buttonset.p-button-secondary > .p-button.p-button-text:enabled:hover, .p-splitbutton.p-button-secondary > .p-button.p-button-text:enabled:hover { + background: rgba(108, 117, 125, 0.04); + border-color: transparent; + color: #6c757d; +} +.p-button.p-button-secondary.p-button-text:enabled:active, .p-buttonset.p-button-secondary > .p-button.p-button-text:enabled:active, .p-splitbutton.p-button-secondary > .p-button.p-button-text:enabled:active { + background: rgba(108, 117, 125, 0.16); + border-color: transparent; + color: #6c757d; +} + +.p-button.p-button-info, .p-buttonset.p-button-info > .p-button, .p-splitbutton.p-button-info > .p-button { + color: #ffffff; + background: #17a2b8; + border: 1px solid #17a2b8; +} +.p-button.p-button-info:enabled:hover, .p-buttonset.p-button-info > .p-button:enabled:hover, .p-splitbutton.p-button-info > .p-button:enabled:hover { + background: #138496; + color: #ffffff; + border-color: #117a8b; +} +.p-button.p-button-info:enabled:focus, .p-buttonset.p-button-info > .p-button:enabled:focus, .p-splitbutton.p-button-info > .p-button:enabled:focus { + box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5); +} +.p-button.p-button-info:enabled:active, .p-buttonset.p-button-info > .p-button:enabled:active, .p-splitbutton.p-button-info > .p-button:enabled:active { + background: #138496; + color: #ffffff; + border-color: #117a8b; +} +.p-button.p-button-info.p-button-outlined, .p-buttonset.p-button-info > .p-button.p-button-outlined, .p-splitbutton.p-button-info > .p-button.p-button-outlined { + background-color: transparent; + color: #17a2b8; + border: 1px solid; +} +.p-button.p-button-info.p-button-outlined:enabled:hover, .p-buttonset.p-button-info > .p-button.p-button-outlined:enabled:hover, .p-splitbutton.p-button-info > .p-button.p-button-outlined:enabled:hover { + background: rgba(23, 162, 184, 0.04); + color: #17a2b8; + border: 1px solid; +} +.p-button.p-button-info.p-button-outlined:enabled:active, .p-buttonset.p-button-info > .p-button.p-button-outlined:enabled:active, .p-splitbutton.p-button-info > .p-button.p-button-outlined:enabled:active { + background: rgba(23, 162, 184, 0.16); + color: #17a2b8; + border: 1px solid; +} +.p-button.p-button-info.p-button-text, .p-buttonset.p-button-info > .p-button.p-button-text, .p-splitbutton.p-button-info > .p-button.p-button-text { + background-color: transparent; + color: #17a2b8; + border-color: transparent; +} +.p-button.p-button-info.p-button-text:enabled:hover, .p-buttonset.p-button-info > .p-button.p-button-text:enabled:hover, .p-splitbutton.p-button-info > .p-button.p-button-text:enabled:hover { + background: rgba(23, 162, 184, 0.04); + border-color: transparent; + color: #17a2b8; +} +.p-button.p-button-info.p-button-text:enabled:active, .p-buttonset.p-button-info > .p-button.p-button-text:enabled:active, .p-splitbutton.p-button-info > .p-button.p-button-text:enabled:active { + background: rgba(23, 162, 184, 0.16); + border-color: transparent; + color: #17a2b8; +} + +.p-button.p-button-success, .p-buttonset.p-button-success > .p-button, .p-splitbutton.p-button-success > .p-button { + color: #ffffff; + background: #28a745; + border: 1px solid #28a745; +} +.p-button.p-button-success:enabled:hover, .p-buttonset.p-button-success > .p-button:enabled:hover, .p-splitbutton.p-button-success > .p-button:enabled:hover { + background: #218838; + color: #ffffff; + border-color: #1e7e34; +} +.p-button.p-button-success:enabled:focus, .p-buttonset.p-button-success > .p-button:enabled:focus, .p-splitbutton.p-button-success > .p-button:enabled:focus { + box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); +} +.p-button.p-button-success:enabled:active, .p-buttonset.p-button-success > .p-button:enabled:active, .p-splitbutton.p-button-success > .p-button:enabled:active { + background: #1e7e34; + color: #ffffff; + border-color: #1c7430; +} +.p-button.p-button-success.p-button-outlined, .p-buttonset.p-button-success > .p-button.p-button-outlined, .p-splitbutton.p-button-success > .p-button.p-button-outlined { + background-color: transparent; + color: #28a745; + border: 1px solid; +} +.p-button.p-button-success.p-button-outlined:enabled:hover, .p-buttonset.p-button-success > .p-button.p-button-outlined:enabled:hover, .p-splitbutton.p-button-success > .p-button.p-button-outlined:enabled:hover { + background: rgba(40, 167, 69, 0.04); + color: #28a745; + border: 1px solid; +} +.p-button.p-button-success.p-button-outlined:enabled:active, .p-buttonset.p-button-success > .p-button.p-button-outlined:enabled:active, .p-splitbutton.p-button-success > .p-button.p-button-outlined:enabled:active { + background: rgba(40, 167, 69, 0.16); + color: #28a745; + border: 1px solid; +} +.p-button.p-button-success.p-button-text, .p-buttonset.p-button-success > .p-button.p-button-text, .p-splitbutton.p-button-success > .p-button.p-button-text { + background-color: transparent; + color: #28a745; + border-color: transparent; +} +.p-button.p-button-success.p-button-text:enabled:hover, .p-buttonset.p-button-success > .p-button.p-button-text:enabled:hover, .p-splitbutton.p-button-success > .p-button.p-button-text:enabled:hover { + background: rgba(40, 167, 69, 0.04); + border-color: transparent; + color: #28a745; +} +.p-button.p-button-success.p-button-text:enabled:active, .p-buttonset.p-button-success > .p-button.p-button-text:enabled:active, .p-splitbutton.p-button-success > .p-button.p-button-text:enabled:active { + background: rgba(40, 167, 69, 0.16); + border-color: transparent; + color: #28a745; +} + +.p-button.p-button-warning, .p-buttonset.p-button-warning > .p-button, .p-splitbutton.p-button-warning > .p-button { + color: #212529; + background: #ffc107; + border: 1px solid #ffc107; +} +.p-button.p-button-warning:enabled:hover, .p-buttonset.p-button-warning > .p-button:enabled:hover, .p-splitbutton.p-button-warning > .p-button:enabled:hover { + background: #e0a800; + color: #212529; + border-color: #d39e00; +} +.p-button.p-button-warning:enabled:focus, .p-buttonset.p-button-warning > .p-button:enabled:focus, .p-splitbutton.p-button-warning > .p-button:enabled:focus { + box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5); +} +.p-button.p-button-warning:enabled:active, .p-buttonset.p-button-warning > .p-button:enabled:active, .p-splitbutton.p-button-warning > .p-button:enabled:active { + background: #d39e00; + color: #212529; + border-color: #c69500; +} +.p-button.p-button-warning.p-button-outlined, .p-buttonset.p-button-warning > .p-button.p-button-outlined, .p-splitbutton.p-button-warning > .p-button.p-button-outlined { + background-color: transparent; + color: #ffc107; + border: 1px solid; +} +.p-button.p-button-warning.p-button-outlined:enabled:hover, .p-buttonset.p-button-warning > .p-button.p-button-outlined:enabled:hover, .p-splitbutton.p-button-warning > .p-button.p-button-outlined:enabled:hover { + background: rgba(255, 193, 7, 0.04); + color: #ffc107; + border: 1px solid; +} +.p-button.p-button-warning.p-button-outlined:enabled:active, .p-buttonset.p-button-warning > .p-button.p-button-outlined:enabled:active, .p-splitbutton.p-button-warning > .p-button.p-button-outlined:enabled:active { + background: rgba(255, 193, 7, 0.16); + color: #ffc107; + border: 1px solid; +} +.p-button.p-button-warning.p-button-text, .p-buttonset.p-button-warning > .p-button.p-button-text, .p-splitbutton.p-button-warning > .p-button.p-button-text { + background-color: transparent; + color: #ffc107; + border-color: transparent; +} +.p-button.p-button-warning.p-button-text:enabled:hover, .p-buttonset.p-button-warning > .p-button.p-button-text:enabled:hover, .p-splitbutton.p-button-warning > .p-button.p-button-text:enabled:hover { + background: rgba(255, 193, 7, 0.04); + border-color: transparent; + color: #ffc107; +} +.p-button.p-button-warning.p-button-text:enabled:active, .p-buttonset.p-button-warning > .p-button.p-button-text:enabled:active, .p-splitbutton.p-button-warning > .p-button.p-button-text:enabled:active { + background: rgba(255, 193, 7, 0.16); + border-color: transparent; + color: #ffc107; +} + +.p-button.p-button-help, .p-buttonset.p-button-help > .p-button, .p-splitbutton.p-button-help > .p-button { + color: #ffffff; + background: #6f42c1; + border: 1px solid #6f42c1; +} +.p-button.p-button-help:enabled:hover, .p-buttonset.p-button-help > .p-button:enabled:hover, .p-splitbutton.p-button-help > .p-button:enabled:hover { + background: #633bad; + color: #ffffff; + border-color: #58349a; +} +.p-button.p-button-help:enabled:focus, .p-buttonset.p-button-help > .p-button:enabled:focus, .p-splitbutton.p-button-help > .p-button:enabled:focus { + box-shadow: 0 0 0 0.2rem #d3c6ec; +} +.p-button.p-button-help:enabled:active, .p-buttonset.p-button-help > .p-button:enabled:active, .p-splitbutton.p-button-help > .p-button:enabled:active { + background: #58349a; + color: #ffffff; + border-color: #4d2e87; +} +.p-button.p-button-help.p-button-outlined, .p-buttonset.p-button-help > .p-button.p-button-outlined, .p-splitbutton.p-button-help > .p-button.p-button-outlined { + background-color: transparent; + color: #6f42c1; + border: 1px solid; +} +.p-button.p-button-help.p-button-outlined:enabled:hover, .p-buttonset.p-button-help > .p-button.p-button-outlined:enabled:hover, .p-splitbutton.p-button-help > .p-button.p-button-outlined:enabled:hover { + background: rgba(111, 66, 193, 0.04); + color: #6f42c1; + border: 1px solid; +} +.p-button.p-button-help.p-button-outlined:enabled:active, .p-buttonset.p-button-help > .p-button.p-button-outlined:enabled:active, .p-splitbutton.p-button-help > .p-button.p-button-outlined:enabled:active { + background: rgba(111, 66, 193, 0.16); + color: #6f42c1; + border: 1px solid; +} +.p-button.p-button-help.p-button-text, .p-buttonset.p-button-help > .p-button.p-button-text, .p-splitbutton.p-button-help > .p-button.p-button-text { + background-color: transparent; + color: #6f42c1; + border-color: transparent; +} +.p-button.p-button-help.p-button-text:enabled:hover, .p-buttonset.p-button-help > .p-button.p-button-text:enabled:hover, .p-splitbutton.p-button-help > .p-button.p-button-text:enabled:hover { + background: rgba(111, 66, 193, 0.04); + border-color: transparent; + color: #6f42c1; +} +.p-button.p-button-help.p-button-text:enabled:active, .p-buttonset.p-button-help > .p-button.p-button-text:enabled:active, .p-splitbutton.p-button-help > .p-button.p-button-text:enabled:active { + background: rgba(111, 66, 193, 0.16); + border-color: transparent; + color: #6f42c1; +} + +.p-button.p-button-danger, .p-buttonset.p-button-danger > .p-button, .p-splitbutton.p-button-danger > .p-button { + color: #ffffff; + background: #dc3545; + border: 1px solid #dc3545; +} +.p-button.p-button-danger:enabled:hover, .p-buttonset.p-button-danger > .p-button:enabled:hover, .p-splitbutton.p-button-danger > .p-button:enabled:hover { + background: #c82333; + color: #ffffff; + border-color: #bd2130; +} +.p-button.p-button-danger:enabled:focus, .p-buttonset.p-button-danger > .p-button:enabled:focus, .p-splitbutton.p-button-danger > .p-button:enabled:focus { + box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5); +} +.p-button.p-button-danger:enabled:active, .p-buttonset.p-button-danger > .p-button:enabled:active, .p-splitbutton.p-button-danger > .p-button:enabled:active { + background: #bd2130; + color: #ffffff; + border-color: #b21f2d; +} +.p-button.p-button-danger.p-button-outlined, .p-buttonset.p-button-danger > .p-button.p-button-outlined, .p-splitbutton.p-button-danger > .p-button.p-button-outlined { + background-color: transparent; + color: #dc3545; + border: 1px solid; +} +.p-button.p-button-danger.p-button-outlined:enabled:hover, .p-buttonset.p-button-danger > .p-button.p-button-outlined:enabled:hover, .p-splitbutton.p-button-danger > .p-button.p-button-outlined:enabled:hover { + background: rgba(220, 53, 69, 0.04); + color: #dc3545; + border: 1px solid; +} +.p-button.p-button-danger.p-button-outlined:enabled:active, .p-buttonset.p-button-danger > .p-button.p-button-outlined:enabled:active, .p-splitbutton.p-button-danger > .p-button.p-button-outlined:enabled:active { + background: rgba(220, 53, 69, 0.16); + color: #dc3545; + border: 1px solid; +} +.p-button.p-button-danger.p-button-text, .p-buttonset.p-button-danger > .p-button.p-button-text, .p-splitbutton.p-button-danger > .p-button.p-button-text { + background-color: transparent; + color: #dc3545; + border-color: transparent; +} +.p-button.p-button-danger.p-button-text:enabled:hover, .p-buttonset.p-button-danger > .p-button.p-button-text:enabled:hover, .p-splitbutton.p-button-danger > .p-button.p-button-text:enabled:hover { + background: rgba(220, 53, 69, 0.04); + border-color: transparent; + color: #dc3545; +} +.p-button.p-button-danger.p-button-text:enabled:active, .p-buttonset.p-button-danger > .p-button.p-button-text:enabled:active, .p-splitbutton.p-button-danger > .p-button.p-button-text:enabled:active { + background: rgba(220, 53, 69, 0.16); + border-color: transparent; + color: #dc3545; +} + +.p-button.p-button-link { + color: #007bff; + background: transparent; + border: transparent; +} +.p-button.p-button-link:enabled:hover { + background: transparent; + color: #0069d9; + border-color: transparent; +} +.p-button.p-button-link:enabled:hover .p-button-label { + text-decoration: underline; +} +.p-button.p-button-link:enabled:focus { + background: transparent; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); + border-color: transparent; +} +.p-button.p-button-link:enabled:active { + background: transparent; + color: #007bff; + border-color: transparent; +} + +.p-speeddial-button.p-button.p-button-icon-only { + width: 4rem; + height: 4rem; +} +.p-speeddial-button.p-button.p-button-icon-only .p-button-icon { + font-size: 1.3rem; +} + +.p-speeddial-action { + width: 3rem; + height: 3rem; + background: #495057; + color: #fff; +} +.p-speeddial-action:hover { + background: #343a40; + color: #fff; +} + +.p-speeddial-direction-up .p-speeddial-item { + margin: 0.25rem 0; +} +.p-speeddial-direction-up .p-speeddial-item:first-child { + margin-bottom: 0.5rem; +} + +.p-speeddial-direction-down .p-speeddial-item { + margin: 0.25rem 0; +} +.p-speeddial-direction-down .p-speeddial-item:first-child { + margin-top: 0.5rem; +} + +.p-speeddial-direction-left .p-speeddial-item { + margin: 0 0.25rem; +} +.p-speeddial-direction-left .p-speeddial-item:first-child { + margin-right: 0.5rem; +} + +.p-speeddial-direction-right .p-speeddial-item { + margin: 0 0.25rem; +} +.p-speeddial-direction-right .p-speeddial-item:first-child { + margin-left: 0.5rem; +} + +.p-speeddial-circle .p-speeddial-item, +.p-speeddial-semi-circle .p-speeddial-item, +.p-speeddial-quarter-circle .p-speeddial-item { + margin: 0; +} +.p-speeddial-circle .p-speeddial-item:first-child, .p-speeddial-circle .p-speeddial-item:last-child, +.p-speeddial-semi-circle .p-speeddial-item:first-child, +.p-speeddial-semi-circle .p-speeddial-item:last-child, +.p-speeddial-quarter-circle .p-speeddial-item:first-child, +.p-speeddial-quarter-circle .p-speeddial-item:last-child { + margin: 0; +} + +.p-speeddial-mask { + background-color: rgba(0, 0, 0, 0.4); +} + +.p-splitbutton { + border-radius: 4px; +} +.p-splitbutton.p-button-outlined > .p-button { + background-color: transparent; + color: #007bff; + border: 1px solid; +} +.p-splitbutton.p-button-outlined > .p-button:enabled:hover, .p-splitbutton.p-button-outlined > .p-button:not(button):not(a):not(.p-disabled):hover { + background: rgba(0, 123, 255, 0.04); + color: #007bff; +} +.p-splitbutton.p-button-outlined > .p-button:enabled:active, .p-splitbutton.p-button-outlined > .p-button:not(button):not(a):not(.p-disabled):active { + background: rgba(0, 123, 255, 0.16); + color: #007bff; +} +.p-splitbutton.p-button-outlined.p-button-plain > .p-button { + color: #6c757d; + border-color: #6c757d; +} +.p-splitbutton.p-button-outlined.p-button-plain > .p-button:enabled:hover, .p-splitbutton.p-button-outlined.p-button-plain > .p-button:not(button):not(a):not(.p-disabled):hover { + background: #e9ecef; + color: #6c757d; +} +.p-splitbutton.p-button-outlined.p-button-plain > .p-button:enabled:active, .p-splitbutton.p-button-outlined.p-button-plain > .p-button:not(button):not(a):not(.p-disabled):active { + background: #dee2e6; + color: #6c757d; +} +.p-splitbutton.p-button-text > .p-button { + background-color: transparent; + color: #007bff; + border-color: transparent; +} +.p-splitbutton.p-button-text > .p-button:enabled:hover, .p-splitbutton.p-button-text > .p-button:not(button):not(a):not(.p-disabled):hover { + background: rgba(0, 123, 255, 0.04); + color: #007bff; + border-color: transparent; +} +.p-splitbutton.p-button-text > .p-button:enabled:active, .p-splitbutton.p-button-text > .p-button:not(button):not(a):not(.p-disabled):active { + background: rgba(0, 123, 255, 0.16); + color: #007bff; + border-color: transparent; +} +.p-splitbutton.p-button-text.p-button-plain > .p-button { + color: #6c757d; +} +.p-splitbutton.p-button-text.p-button-plain > .p-button:enabled:hover, .p-splitbutton.p-button-text.p-button-plain > .p-button:not(button):not(a):not(.p-disabled):hover { + background: #e9ecef; + color: #6c757d; +} +.p-splitbutton.p-button-text.p-button-plain > .p-button:enabled:active, .p-splitbutton.p-button-text.p-button-plain > .p-button:not(button):not(a):not(.p-disabled):active { + background: #dee2e6; + color: #6c757d; +} +.p-splitbutton.p-button-raised { + box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12); +} +.p-splitbutton.p-button-rounded { + border-radius: 2rem; +} +.p-splitbutton.p-button-rounded > .p-button { + border-radius: 2rem; +} +.p-splitbutton.p-button-sm > .p-button { + font-size: 0.875rem; + padding: 0.4375rem 0.65625rem; +} +.p-splitbutton.p-button-sm > .p-button .p-button-icon { + font-size: 0.875rem; +} +.p-splitbutton.p-button-lg > .p-button { + font-size: 1.25rem; + padding: 0.625rem 0.9375rem; +} +.p-splitbutton.p-button-lg > .p-button .p-button-icon { + font-size: 1.25rem; +} + +.p-splitbutton.p-button-secondary.p-button-outlined > .p-button { + background-color: transparent; + color: #6c757d; + border: 1px solid; +} +.p-splitbutton.p-button-secondary.p-button-outlined > .p-button:enabled:hover, .p-splitbutton.p-button-secondary.p-button-outlined > .p-button:not(button):not(a):not(.p-disabled):hover { + background: rgba(108, 117, 125, 0.04); + color: #6c757d; +} +.p-splitbutton.p-button-secondary.p-button-outlined > .p-button:enabled:active, .p-splitbutton.p-button-secondary.p-button-outlined > .p-button:not(button):not(a):not(.p-disabled):active { + background: rgba(108, 117, 125, 0.16); + color: #6c757d; +} +.p-splitbutton.p-button-secondary.p-button-text > .p-button { + background-color: transparent; + color: #6c757d; + border-color: transparent; +} +.p-splitbutton.p-button-secondary.p-button-text > .p-button:enabled:hover, .p-splitbutton.p-button-secondary.p-button-text > .p-button:not(button):not(a):not(.p-disabled):hover { + background: rgba(108, 117, 125, 0.04); + border-color: transparent; + color: #6c757d; +} +.p-splitbutton.p-button-secondary.p-button-text > .p-button:enabled:active, .p-splitbutton.p-button-secondary.p-button-text > .p-button:not(button):not(a):not(.p-disabled):active { + background: rgba(108, 117, 125, 0.16); + border-color: transparent; + color: #6c757d; +} + +.p-splitbutton.p-button-info.p-button-outlined > .p-button { + background-color: transparent; + color: #17a2b8; + border: 1px solid; +} +.p-splitbutton.p-button-info.p-button-outlined > .p-button:enabled:hover, .p-splitbutton.p-button-info.p-button-outlined > .p-button:not(button):not(a):not(.p-disabled):hover { + background: rgba(23, 162, 184, 0.04); + color: #17a2b8; +} +.p-splitbutton.p-button-info.p-button-outlined > .p-button:enabled:active, .p-splitbutton.p-button-info.p-button-outlined > .p-button:not(button):not(a):not(.p-disabled):active { + background: rgba(23, 162, 184, 0.16); + color: #17a2b8; +} +.p-splitbutton.p-button-info.p-button-text > .p-button { + background-color: transparent; + color: #17a2b8; + border-color: transparent; +} +.p-splitbutton.p-button-info.p-button-text > .p-button:enabled:hover, .p-splitbutton.p-button-info.p-button-text > .p-button:not(button):not(a):not(.p-disabled):hover { + background: rgba(23, 162, 184, 0.04); + border-color: transparent; + color: #17a2b8; +} +.p-splitbutton.p-button-info.p-button-text > .p-button:enabled:active, .p-splitbutton.p-button-info.p-button-text > .p-button:not(button):not(a):not(.p-disabled):active { + background: rgba(23, 162, 184, 0.16); + border-color: transparent; + color: #17a2b8; +} + +.p-splitbutton.p-button-success.p-button-outlined > .p-button { + background-color: transparent; + color: #28a745; + border: 1px solid; +} +.p-splitbutton.p-button-success.p-button-outlined > .p-button:enabled:hover, .p-splitbutton.p-button-success.p-button-outlined > .p-button:not(button):not(a):not(.p-disabled):hover { + background: rgba(40, 167, 69, 0.04); + color: #28a745; +} +.p-splitbutton.p-button-success.p-button-outlined > .p-button:enabled:active, .p-splitbutton.p-button-success.p-button-outlined > .p-button:not(button):not(a):not(.p-disabled):active { + background: rgba(40, 167, 69, 0.16); + color: #28a745; +} +.p-splitbutton.p-button-success.p-button-text > .p-button { + background-color: transparent; + color: #28a745; + border-color: transparent; +} +.p-splitbutton.p-button-success.p-button-text > .p-button:enabled:hover, .p-splitbutton.p-button-success.p-button-text > .p-button:not(button):not(a):not(.p-disabled):hover { + background: rgba(40, 167, 69, 0.04); + border-color: transparent; + color: #28a745; +} +.p-splitbutton.p-button-success.p-button-text > .p-button:enabled:active, .p-splitbutton.p-button-success.p-button-text > .p-button:not(button):not(a):not(.p-disabled):active { + background: rgba(40, 167, 69, 0.16); + border-color: transparent; + color: #28a745; +} + +.p-splitbutton.p-button-warning.p-button-outlined > .p-button { + background-color: transparent; + color: #ffc107; + border: 1px solid; +} +.p-splitbutton.p-button-warning.p-button-outlined > .p-button:enabled:hover, .p-splitbutton.p-button-warning.p-button-outlined > .p-button:not(button):not(a):not(.p-disabled):hover { + background: rgba(255, 193, 7, 0.04); + color: #ffc107; +} +.p-splitbutton.p-button-warning.p-button-outlined > .p-button:enabled:active, .p-splitbutton.p-button-warning.p-button-outlined > .p-button:not(button):not(a):not(.p-disabled):active { + background: rgba(255, 193, 7, 0.16); + color: #ffc107; +} +.p-splitbutton.p-button-warning.p-button-text > .p-button { + background-color: transparent; + color: #ffc107; + border-color: transparent; +} +.p-splitbutton.p-button-warning.p-button-text > .p-button:enabled:hover, .p-splitbutton.p-button-warning.p-button-text > .p-button:not(button):not(a):not(.p-disabled):hover { + background: rgba(255, 193, 7, 0.04); + border-color: transparent; + color: #ffc107; +} +.p-splitbutton.p-button-warning.p-button-text > .p-button:enabled:active, .p-splitbutton.p-button-warning.p-button-text > .p-button:not(button):not(a):not(.p-disabled):active { + background: rgba(255, 193, 7, 0.16); + border-color: transparent; + color: #ffc107; +} + +.p-splitbutton.p-button-help.p-button-outlined > .p-button { + background-color: transparent; + color: #6f42c1; + border: 1px solid; +} +.p-splitbutton.p-button-help.p-button-outlined > .p-button:enabled:hover, .p-splitbutton.p-button-help.p-button-outlined > .p-button:not(button):not(a):not(.p-disabled):hover { + background: rgba(111, 66, 193, 0.04); + color: #6f42c1; +} +.p-splitbutton.p-button-help.p-button-outlined > .p-button:enabled:active, .p-splitbutton.p-button-help.p-button-outlined > .p-button:not(button):not(a):not(.p-disabled):active { + background: rgba(111, 66, 193, 0.16); + color: #6f42c1; +} +.p-splitbutton.p-button-help.p-button-text > .p-button { + background-color: transparent; + color: #6f42c1; + border-color: transparent; +} +.p-splitbutton.p-button-help.p-button-text > .p-button:enabled:hover, .p-splitbutton.p-button-help.p-button-text > .p-button:not(button):not(a):not(.p-disabled):hover { + background: rgba(111, 66, 193, 0.04); + border-color: transparent; + color: #6f42c1; +} +.p-splitbutton.p-button-help.p-button-text > .p-button:enabled:active, .p-splitbutton.p-button-help.p-button-text > .p-button:not(button):not(a):not(.p-disabled):active { + background: rgba(111, 66, 193, 0.16); + border-color: transparent; + color: #6f42c1; +} + +.p-splitbutton.p-button-danger.p-button-outlined > .p-button { + background-color: transparent; + color: #dc3545; + border: 1px solid; +} +.p-splitbutton.p-button-danger.p-button-outlined > .p-button:enabled:hover, .p-splitbutton.p-button-danger.p-button-outlined > .p-button:not(button):not(a):not(.p-disabled):hover { + background: rgba(220, 53, 69, 0.04); + color: #dc3545; +} +.p-splitbutton.p-button-danger.p-button-outlined > .p-button:enabled:active, .p-splitbutton.p-button-danger.p-button-outlined > .p-button:not(button):not(a):not(.p-disabled):active { + background: rgba(220, 53, 69, 0.16); + color: #dc3545; +} +.p-splitbutton.p-button-danger.p-button-text > .p-button { + background-color: transparent; + color: #dc3545; + border-color: transparent; +} +.p-splitbutton.p-button-danger.p-button-text > .p-button:enabled:hover, .p-splitbutton.p-button-danger.p-button-text > .p-button:not(button):not(a):not(.p-disabled):hover { + background: rgba(220, 53, 69, 0.04); + border-color: transparent; + color: #dc3545; +} +.p-splitbutton.p-button-danger.p-button-text > .p-button:enabled:active, .p-splitbutton.p-button-danger.p-button-text > .p-button:not(button):not(a):not(.p-disabled):active { + background: rgba(220, 53, 69, 0.16); + border-color: transparent; + color: #dc3545; +} + +.p-carousel .p-carousel-content .p-carousel-prev, +.p-carousel .p-carousel-content .p-carousel-next { + width: 2rem; + height: 2rem; + color: #6c757d; + border: 0 none; + background: transparent; + border-radius: 50%; + transition: box-shadow 0.15s; + margin: 0.5rem; +} +.p-carousel .p-carousel-content .p-carousel-prev:enabled:hover, +.p-carousel .p-carousel-content .p-carousel-next:enabled:hover { + color: #495057; + border-color: transparent; + background: transparent; +} +.p-carousel .p-carousel-content .p-carousel-prev:focus, +.p-carousel .p-carousel-content .p-carousel-next:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.p-carousel .p-carousel-indicators { + padding: 1rem; +} +.p-carousel .p-carousel-indicators .p-carousel-indicator { + margin-right: 0.5rem; + margin-bottom: 0.5rem; +} +.p-carousel .p-carousel-indicators .p-carousel-indicator button { + background-color: #e9ecef; + width: 2rem; + height: 0.5rem; + transition: box-shadow 0.15s; + border-radius: 0; +} +.p-carousel .p-carousel-indicators .p-carousel-indicator button:hover { + background: #dee2e6; +} +.p-carousel .p-carousel-indicators .p-carousel-indicator.p-highlight button { + background: #007bff; + color: #ffffff; +} + +.p-datatable .p-paginator-top { + border-width: 1px 0 0 0; + border-radius: 0; +} +.p-datatable .p-paginator-bottom { + border-width: 1px 0 0 0; + border-radius: 0; +} +.p-datatable .p-datatable-header { + background: #efefef; + color: #212529; + border: solid #dee2e6; + border-width: 1px 0 0 0; + padding: 1rem 1rem; + font-weight: 600; +} +.p-datatable .p-datatable-footer { + background: #efefef; + color: #212529; + border: 1px solid #dee2e6; + border-width: 1px 0 1px 0; + padding: 1rem 1rem; + font-weight: 600; +} +.p-datatable .p-datatable-thead > tr > th { + text-align: left; + padding: 1rem 1rem; + border: 1px solid #dee2e6; + border-width: 1px 0 2px 0; + font-weight: 600; + color: #212529; + background: #ffffff; + transition: box-shadow 0.15s; +} +.p-datatable .p-datatable-tfoot > tr > td { + text-align: left; + padding: 1rem 1rem; + border: 1px solid #dee2e6; + border-width: 1px 0 1px 0; + font-weight: 600; + color: #212529; + background: #ffffff; +} +.p-datatable .p-sortable-column .p-sortable-column-icon { + color: #6c757d; + margin-left: 0.5rem; +} +.p-datatable .p-sortable-column .p-sortable-column-badge { + border-radius: 50%; + height: 1.143rem; + min-width: 1.143rem; + line-height: 1.143rem; + color: #ffffff; + background: #007bff; + margin-left: 0.5rem; +} +.p-datatable .p-sortable-column:not(.p-highlight):hover { + background: #e9ecef; + color: #212529; +} +.p-datatable .p-sortable-column:not(.p-highlight):hover .p-sortable-column-icon { + color: #6c757d; +} +.p-datatable .p-sortable-column.p-highlight { + background: #ffffff; + color: #007bff; +} +.p-datatable .p-sortable-column.p-highlight .p-sortable-column-icon { + color: #007bff; +} +.p-datatable .p-sortable-column.p-highlight:hover { + background: #e9ecef; + color: #007bff; +} +.p-datatable .p-sortable-column.p-highlight:hover .p-sortable-column-icon { + color: #007bff; +} +.p-datatable .p-sortable-column:focus { + box-shadow: inset 0 0 0 0.15rem rgba(38, 143, 255, 0.5); + outline: 0 none; +} +.p-datatable .p-datatable-tbody > tr { + background: #ffffff; + color: #212529; + transition: box-shadow 0.15s; +} +.p-datatable .p-datatable-tbody > tr > td { + text-align: left; + border: 1px solid #dee2e6; + border-width: 1px 0 0 0; + padding: 1rem 1rem; +} +.p-datatable .p-datatable-tbody > tr > td .p-row-toggler, +.p-datatable .p-datatable-tbody > tr > td .p-row-editor-init, +.p-datatable .p-datatable-tbody > tr > td .p-row-editor-save, +.p-datatable .p-datatable-tbody > tr > td .p-row-editor-cancel { + width: 2rem; + height: 2rem; + color: #6c757d; + border: 0 none; + background: transparent; + border-radius: 50%; + transition: box-shadow 0.15s; +} +.p-datatable .p-datatable-tbody > tr > td .p-row-toggler:enabled:hover, +.p-datatable .p-datatable-tbody > tr > td .p-row-editor-init:enabled:hover, +.p-datatable .p-datatable-tbody > tr > td .p-row-editor-save:enabled:hover, +.p-datatable .p-datatable-tbody > tr > td .p-row-editor-cancel:enabled:hover { + color: #495057; + border-color: transparent; + background: transparent; +} +.p-datatable .p-datatable-tbody > tr > td .p-row-toggler:focus, +.p-datatable .p-datatable-tbody > tr > td .p-row-editor-init:focus, +.p-datatable .p-datatable-tbody > tr > td .p-row-editor-save:focus, +.p-datatable .p-datatable-tbody > tr > td .p-row-editor-cancel:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.p-datatable .p-datatable-tbody > tr > td .p-row-editor-save { + margin-right: 0.5rem; +} +.p-datatable .p-datatable-tbody > tr > td > .p-column-title { + font-weight: 600; +} +.p-datatable .p-datatable-tbody > tr:focus { + outline: 0.15rem solid rgba(38, 143, 255, 0.5); + outline-offset: -0.15rem; +} +.p-datatable .p-datatable-tbody > tr.p-highlight { + background: #007bff; + color: #ffffff; +} +.p-datatable .p-datatable-tbody > tr.p-datatable-dragpoint-top > td { + box-shadow: inset 0 2px 0 0 #007bff; +} +.p-datatable .p-datatable-tbody > tr.p-datatable-dragpoint-bottom > td { + box-shadow: inset 0 -2px 0 0 #007bff; +} +.p-datatable.p-datatable-hoverable-rows .p-datatable-tbody > tr:not(.p-highlight):hover { + background: #e9ecef; + color: #212529; +} +.p-datatable .p-column-resizer-helper { + background: #007bff; +} +.p-datatable .p-datatable-scrollable-header, +.p-datatable .p-datatable-scrollable-footer { + background: #efefef; +} +.p-datatable.p-datatable-scrollable > .p-datatable-wrapper > .p-datatable-table > .p-datatable-thead, +.p-datatable.p-datatable-scrollable > .p-datatable-wrapper > .p-datatable-table > .p-datatable-tfoot { + background-color: #ffffff; +} +.p-datatable .p-datatable-loading-icon { + font-size: 2rem; +} +.p-datatable.p-datatable-gridlines .p-datatable-header { + border-width: 1px 1px 0 1px; +} +.p-datatable.p-datatable-gridlines .p-datatable-footer { + border-width: 0 1px 1px 1px; +} +.p-datatable.p-datatable-gridlines .p-paginator-top { + border-width: 0 1px 0 1px; +} +.p-datatable.p-datatable-gridlines .p-paginator-bottom { + border-width: 0 1px 1px 1px; +} +.p-datatable.p-datatable-gridlines .p-datatable-thead > tr > th { + border-width: 1px 1px 2px 1px; +} +.p-datatable.p-datatable-gridlines .p-datatable-tbody > tr > td { + border-width: 1px; +} +.p-datatable.p-datatable-gridlines .p-datatable-tfoot > tr > td { + border-width: 1px; +} +.p-datatable.p-datatable-gridlines.p-datatable-scrollable .p-datatable-thead > tr > th + th { + border-left-width: 0; +} +.p-datatable.p-datatable-gridlines.p-datatable-scrollable .p-datatable-tbody > tr > td + td { + border-left-width: 0; +} +.p-datatable.p-datatable-gridlines.p-datatable-scrollable .p-datatable-tbody > tr + tr > td, .p-datatable.p-datatable-gridlines.p-datatable-scrollable .p-datatable-tbody > tr:first-child > td { + border-top-width: 0; +} +.p-datatable.p-datatable-gridlines.p-datatable-scrollable .p-datatable-tfoot > tr > td + td { + border-left-width: 0; +} +.p-datatable.p-datatable-striped .p-datatable-tbody > tr:nth-child(even) { + background: rgba(0, 0, 0, 0.05); +} +.p-datatable.p-datatable-striped .p-datatable-tbody > tr:nth-child(even).p-highlight { + background: #007bff; + color: #ffffff; +} +.p-datatable.p-datatable-striped .p-datatable-tbody > tr:nth-child(even).p-highlight .p-row-toggler { + color: #ffffff; +} +.p-datatable.p-datatable-striped .p-datatable-tbody > tr:nth-child(even).p-highlight .p-row-toggler:hover { + color: #ffffff; +} +.p-datatable.p-datatable-sm .p-datatable-header { + padding: 0.5rem 0.5rem; +} +.p-datatable.p-datatable-sm .p-datatable-thead > tr > th { + padding: 0.5rem 0.5rem; +} +.p-datatable.p-datatable-sm .p-datatable-tbody > tr > td { + padding: 0.5rem 0.5rem; +} +.p-datatable.p-datatable-sm .p-datatable-tfoot > tr > td { + padding: 0.5rem 0.5rem; +} +.p-datatable.p-datatable-sm .p-datatable-footer { + padding: 0.5rem 0.5rem; +} +.p-datatable.p-datatable-lg .p-datatable-header { + padding: 1.25rem 1.25rem; +} +.p-datatable.p-datatable-lg .p-datatable-thead > tr > th { + padding: 1.25rem 1.25rem; +} +.p-datatable.p-datatable-lg .p-datatable-tbody > tr > td { + padding: 1.25rem 1.25rem; +} +.p-datatable.p-datatable-lg .p-datatable-tfoot > tr > td { + padding: 1.25rem 1.25rem; +} +.p-datatable.p-datatable-lg .p-datatable-footer { + padding: 1.25rem 1.25rem; +} + +.p-dataview .p-paginator-top { + border-width: 1px 0 0 0; + border-radius: 0; +} +.p-dataview .p-paginator-bottom { + border-width: 1px 0 0 0; + border-radius: 0; +} +.p-dataview .p-dataview-header { + background: #efefef; + color: #212529; + border: solid #dee2e6; + border-width: 1px 0 0 0; + padding: 1rem 1rem; + font-weight: 600; +} +.p-dataview .p-dataview-content { + background: #ffffff; + color: #212529; + border: 0 none; + padding: 0; +} +.p-dataview.p-dataview-list .p-dataview-content > .p-grid > div { + border: 1px solid #dee2e6; + border-width: 1px 0 0 0; +} +.p-dataview .p-dataview-footer { + background: #efefef; + color: #212529; + border: 1px solid #dee2e6; + border-width: 1px 0 1px 0; + padding: 1rem 1rem; + font-weight: 600; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +.p-column-filter-row .p-column-filter-menu-button, +.p-column-filter-row .p-column-filter-clear-button { + margin-left: 0.5rem; +} + +.p-column-filter-menu-button { + width: 2rem; + height: 2rem; + color: #6c757d; + border: 0 none; + background: transparent; + border-radius: 50%; + transition: box-shadow 0.15s; +} +.p-column-filter-menu-button:hover { + color: #495057; + border-color: transparent; + background: transparent; +} +.p-column-filter-menu-button.p-column-filter-menu-button-open, .p-column-filter-menu-button.p-column-filter-menu-button-open:hover { + background: transparent; + color: #495057; +} +.p-column-filter-menu-button.p-column-filter-menu-button-active, .p-column-filter-menu-button.p-column-filter-menu-button-active:hover { + background: #007bff; + color: #ffffff; +} +.p-column-filter-menu-button:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} + +.p-column-filter-clear-button { + width: 2rem; + height: 2rem; + color: #6c757d; + border: 0 none; + background: transparent; + border-radius: 50%; + transition: box-shadow 0.15s; +} +.p-column-filter-clear-button:hover { + color: #495057; + border-color: transparent; + background: transparent; +} +.p-column-filter-clear-button:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} + +.p-column-filter-overlay { + background: #ffffff; + color: #212529; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + box-shadow: none; + min-width: 12.5rem; +} +.p-column-filter-overlay .p-column-filter-row-items { + padding: 0.5rem 0; +} +.p-column-filter-overlay .p-column-filter-row-items .p-column-filter-row-item { + margin: 0; + padding: 0.5rem 1.5rem; + border: 0 none; + color: #212529; + background: transparent; + transition: box-shadow 0.15s; + border-radius: 0; +} +.p-column-filter-overlay .p-column-filter-row-items .p-column-filter-row-item.p-highlight { + color: #ffffff; + background: #007bff; +} +.p-column-filter-overlay .p-column-filter-row-items .p-column-filter-row-item:not(.p-highlight):not(.p-disabled):hover { + color: #212529; + background: #e9ecef; +} +.p-column-filter-overlay .p-column-filter-row-items .p-column-filter-row-item:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: inset 0 0 0 0.15rem rgba(38, 143, 255, 0.5); +} +.p-column-filter-overlay .p-column-filter-row-items .p-column-filter-separator { + border-top: 1px solid #dee2e6; + margin: 0.5rem 0; +} + +.p-column-filter-overlay-menu .p-column-filter-operator { + padding: 0.75rem 1.5rem; + border-bottom: 1px solid #dee2e6; + color: #212529; + background: #efefef; + margin: 0; + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} +.p-column-filter-overlay-menu .p-column-filter-constraint { + padding: 1.25rem; + border-bottom: 1px solid #dee2e6; +} +.p-column-filter-overlay-menu .p-column-filter-constraint .p-column-filter-matchmode-dropdown { + margin-bottom: 0.5rem; +} +.p-column-filter-overlay-menu .p-column-filter-constraint .p-column-filter-remove-button { + margin-top: 0.5rem; +} +.p-column-filter-overlay-menu .p-column-filter-constraint:last-child { + border-bottom: 0 none; +} +.p-column-filter-overlay-menu .p-column-filter-add-rule { + padding: 0.5rem 1.25rem; +} +.p-column-filter-overlay-menu .p-column-filter-buttonbar { + padding: 1.25rem; +} + +.fc { + /* FullCalendar 4 */ + /* FullCalendar 5 */ +} +.fc.fc-unthemed .fc-view-container th { + background: #efefef; + border: 1px solid #dee2e6; + color: #212529; +} +.fc.fc-unthemed .fc-view-container td.fc-widget-content { + border: 1px solid #dee2e6; + color: #212529; +} +.fc.fc-unthemed .fc-view-container td.fc-head-container { + border: 1px solid #dee2e6; +} +.fc.fc-unthemed .fc-view-container .fc-view { + background: #ffffff; +} +.fc.fc-unthemed .fc-view-container .fc-row { + border-right: 1px solid #dee2e6; +} +.fc.fc-unthemed .fc-view-container .fc-event { + background: #0069d9; + border: 1px solid #0069d9; + color: #ffffff; +} +.fc.fc-unthemed .fc-view-container .fc-divider { + background: #efefef; + border: 1px solid #dee2e6; +} +.fc.fc-unthemed .fc-toolbar .fc-button { + color: #ffffff; + background: #007bff; + border: 1px solid #007bff; + font-size: 1rem; + transition: background-color 0.15s, border-color 0.15s, box-shadow 0.15s; + border-radius: 4px; + display: flex; + align-items: center; +} +.fc.fc-unthemed .fc-toolbar .fc-button:enabled:hover { + background: #0069d9; + color: #ffffff; + border-color: #0069d9; +} +.fc.fc-unthemed .fc-toolbar .fc-button:enabled:active { + background: #0062cc; + color: #ffffff; + border-color: #0062cc; +} +.fc.fc-unthemed .fc-toolbar .fc-button:enabled:active:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.fc.fc-unthemed .fc-toolbar .fc-button .fc-icon-chevron-left { + font-family: "PrimeIcons" !important; + text-indent: 0; + font-size: 1rem; +} +.fc.fc-unthemed .fc-toolbar .fc-button .fc-icon-chevron-left:before { + content: "\e900"; +} +.fc.fc-unthemed .fc-toolbar .fc-button .fc-icon-chevron-right { + font-family: "PrimeIcons" !important; + text-indent: 0; + font-size: 1rem; +} +.fc.fc-unthemed .fc-toolbar .fc-button .fc-icon-chevron-right:before { + content: "\e901"; +} +.fc.fc-unthemed .fc-toolbar .fc-button:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.fc.fc-unthemed .fc-toolbar .fc-button.fc-dayGridMonth-button, .fc.fc-unthemed .fc-toolbar .fc-button.fc-timeGridWeek-button, .fc.fc-unthemed .fc-toolbar .fc-button.fc-timeGridDay-button { + background: #6c757d; + border: 1px solid #6c757d; + color: #ffffff; + transition: background-color 0.15s, border-color 0.15s, box-shadow 0.15s; +} +.fc.fc-unthemed .fc-toolbar .fc-button.fc-dayGridMonth-button:hover, .fc.fc-unthemed .fc-toolbar .fc-button.fc-timeGridWeek-button:hover, .fc.fc-unthemed .fc-toolbar .fc-button.fc-timeGridDay-button:hover { + background: #5a6268; + border-color: #545b62; + color: #ffffff; +} +.fc.fc-unthemed .fc-toolbar .fc-button.fc-dayGridMonth-button.fc-button-active, .fc.fc-unthemed .fc-toolbar .fc-button.fc-timeGridWeek-button.fc-button-active, .fc.fc-unthemed .fc-toolbar .fc-button.fc-timeGridDay-button.fc-button-active { + background: #545b62; + border-color: #4e555b; + color: #ffffff; +} +.fc.fc-unthemed .fc-toolbar .fc-button.fc-dayGridMonth-button.fc-button-active:hover, .fc.fc-unthemed .fc-toolbar .fc-button.fc-timeGridWeek-button.fc-button-active:hover, .fc.fc-unthemed .fc-toolbar .fc-button.fc-timeGridDay-button.fc-button-active:hover { + background: #545b62; + border-color: #4e555b; + color: #ffffff; +} +.fc.fc-unthemed .fc-toolbar .fc-button.fc-dayGridMonth-button:focus, .fc.fc-unthemed .fc-toolbar .fc-button.fc-timeGridWeek-button:focus, .fc.fc-unthemed .fc-toolbar .fc-button.fc-timeGridDay-button:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); + z-index: 1; +} +.fc.fc-unthemed .fc-toolbar .fc-button-group .fc-button { + border-radius: 0; +} +.fc.fc-unthemed .fc-toolbar .fc-button-group .fc-button:first-child { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.fc.fc-unthemed .fc-toolbar .fc-button-group .fc-button:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.fc.fc-theme-standard .fc-view-harness .fc-scrollgrid { + border-color: #dee2e6; +} +.fc.fc-theme-standard .fc-view-harness th { + background: #efefef; + border-color: #dee2e6; + color: #212529; +} +.fc.fc-theme-standard .fc-view-harness td { + color: #212529; + border-color: #dee2e6; +} +.fc.fc-theme-standard .fc-view-harness .fc-view { + background: #ffffff; +} +.fc.fc-theme-standard .fc-view-harness .fc-popover { + background: none; + border: 0 none; +} +.fc.fc-theme-standard .fc-view-harness .fc-popover .fc-popover-header { + border: 1px solid #dee2e6; + padding: 1rem 1.25rem; + background: #efefef; + color: #212529; +} +.fc.fc-theme-standard .fc-view-harness .fc-popover .fc-popover-header .fc-popover-close { + opacity: 1; + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; + font-family: "PrimeIcons" !important; + font-size: 1rem; + width: 2rem; + height: 2rem; + color: #6c757d; + border: 0 none; + background: transparent; + border-radius: 50%; + transition: box-shadow 0.15s; +} +.fc.fc-theme-standard .fc-view-harness .fc-popover .fc-popover-header .fc-popover-close:before { + content: "\e90b"; +} +.fc.fc-theme-standard .fc-view-harness .fc-popover .fc-popover-header .fc-popover-close:hover { + color: #495057; + border-color: transparent; + background: transparent; +} +.fc.fc-theme-standard .fc-view-harness .fc-popover .fc-popover-header .fc-popover-close:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.fc.fc-theme-standard .fc-view-harness .fc-popover .fc-popover-body { + padding: 1.25rem; + border: 1px solid #dee2e6; + background: #ffffff; + color: #212529; + border-top: 0 none; +} +.fc.fc-theme-standard .fc-view-harness .fc-event.fc-daygrid-block-event { + color: #ffffff; + background: #0069d9; + border-color: #0069d9; +} +.fc.fc-theme-standard .fc-view-harness .fc-event.fc-daygrid-block-event .fc-event-main { + color: #ffffff; +} +.fc.fc-theme-standard .fc-view-harness .fc-event.fc-daygrid-dot-event .fc-daygrid-event-dot { + background: #0069d9; + border-color: #0069d9; +} +.fc.fc-theme-standard .fc-view-harness .fc-event.fc-daygrid-dot-event:hover { + background: #e9ecef; + color: #212529; +} +.fc.fc-theme-standard .fc-view-harness .fc-cell-shaded { + background: #efefef; +} +.fc.fc-theme-standard .fc-toolbar .fc-button { + color: #ffffff; + background: #007bff; + border: 1px solid #007bff; + font-size: 1rem; + transition: background-color 0.15s, border-color 0.15s, box-shadow 0.15s; + border-radius: 4px; +} +.fc.fc-theme-standard .fc-toolbar .fc-button:enabled:hover { + background: #0069d9; + color: #ffffff; + border-color: #0069d9; +} +.fc.fc-theme-standard .fc-toolbar .fc-button:enabled:active { + background: #0062cc; + color: #ffffff; + border-color: #0062cc; +} +.fc.fc-theme-standard .fc-toolbar .fc-button:enabled:active:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.fc.fc-theme-standard .fc-toolbar .fc-button:disabled { + opacity: 0.65; + color: #ffffff; + background: #007bff; + border: 1px solid #007bff; +} +.fc.fc-theme-standard .fc-toolbar .fc-button .fc-icon-chevron-left { + font-family: "PrimeIcons" !important; + text-indent: 0; + font-size: 1rem; +} +.fc.fc-theme-standard .fc-toolbar .fc-button .fc-icon-chevron-left:before { + content: "\e900"; +} +.fc.fc-theme-standard .fc-toolbar .fc-button .fc-icon-chevron-right { + font-family: "PrimeIcons" !important; + text-indent: 0; + font-size: 1rem; +} +.fc.fc-theme-standard .fc-toolbar .fc-button .fc-icon-chevron-right:before { + content: "\e901"; +} +.fc.fc-theme-standard .fc-toolbar .fc-button:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.fc.fc-theme-standard .fc-toolbar .fc-button.fc-dayGridMonth-button, .fc.fc-theme-standard .fc-toolbar .fc-button.fc-timeGridWeek-button, .fc.fc-theme-standard .fc-toolbar .fc-button.fc-timeGridDay-button { + background: #6c757d; + border: 1px solid #6c757d; + color: #ffffff; + transition: background-color 0.15s, border-color 0.15s, box-shadow 0.15s; +} +.fc.fc-theme-standard .fc-toolbar .fc-button.fc-dayGridMonth-button:hover, .fc.fc-theme-standard .fc-toolbar .fc-button.fc-timeGridWeek-button:hover, .fc.fc-theme-standard .fc-toolbar .fc-button.fc-timeGridDay-button:hover { + background: #5a6268; + border-color: #545b62; + color: #ffffff; +} +.fc.fc-theme-standard .fc-toolbar .fc-button.fc-dayGridMonth-button.fc-button-active, .fc.fc-theme-standard .fc-toolbar .fc-button.fc-timeGridWeek-button.fc-button-active, .fc.fc-theme-standard .fc-toolbar .fc-button.fc-timeGridDay-button.fc-button-active { + background: #545b62; + border-color: #4e555b; + color: #ffffff; +} +.fc.fc-theme-standard .fc-toolbar .fc-button.fc-dayGridMonth-button.fc-button-active:hover, .fc.fc-theme-standard .fc-toolbar .fc-button.fc-timeGridWeek-button.fc-button-active:hover, .fc.fc-theme-standard .fc-toolbar .fc-button.fc-timeGridDay-button.fc-button-active:hover { + background: #545b62; + border-color: #4e555b; + color: #ffffff; +} +.fc.fc-theme-standard .fc-toolbar .fc-button.fc-dayGridMonth-button:not(:disabled):focus, .fc.fc-theme-standard .fc-toolbar .fc-button.fc-timeGridWeek-button:not(:disabled):focus, .fc.fc-theme-standard .fc-toolbar .fc-button.fc-timeGridDay-button:not(:disabled):focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); + z-index: 1; +} +.fc.fc-theme-standard .fc-toolbar .fc-button-group .fc-button { + border-radius: 0; +} +.fc.fc-theme-standard .fc-toolbar .fc-button-group .fc-button:first-child { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.fc.fc-theme-standard .fc-toolbar .fc-button-group .fc-button:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.fc.fc-theme-standard .fc-highlight { + color: #ffffff; + background: #007bff; +} + +.p-orderlist .p-orderlist-controls { + padding: 1.25rem; +} +.p-orderlist .p-orderlist-controls .p-button { + margin-bottom: 0.5rem; +} +.p-orderlist .p-orderlist-header { + background: #efefef; + color: #212529; + border: 1px solid #dee2e6; + padding: 1rem 1.25rem; + font-weight: 600; + border-bottom: 0 none; + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} +.p-orderlist .p-orderlist-list { + border: 1px solid #dee2e6; + background: #ffffff; + color: #212529; + padding: 0.5rem 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.p-orderlist .p-orderlist-list .p-orderlist-item { + padding: 0.5rem 1.5rem; + margin: 0; + border: 0 none; + color: #212529; + background: transparent; + transition: transform 0.15s, box-shadow 0.15s; +} +.p-orderlist .p-orderlist-list .p-orderlist-item:not(.p-highlight):hover { + background: #e9ecef; + color: #212529; +} +.p-orderlist .p-orderlist-list .p-orderlist-item:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: inset 0 0 0 0.15rem rgba(38, 143, 255, 0.5); +} +.p-orderlist .p-orderlist-list .p-orderlist-item.p-highlight { + color: #ffffff; + background: #007bff; +} +.p-orderlist.p-orderlist-striped .p-orderlist-list .p-orderlist-item:nth-child(even) { + background: rgba(0, 0, 0, 0.05); +} +.p-orderlist.p-orderlist-striped .p-orderlist-list .p-orderlist-item:nth-child(even):hover { + background: #e9ecef; +} + +.p-organizationchart .p-organizationchart-node-content.p-organizationchart-selectable-node:not(.p-highlight):hover { + background: #e9ecef; + color: #212529; +} +.p-organizationchart .p-organizationchart-node-content.p-highlight { + background: #007bff; + color: #ffffff; +} +.p-organizationchart .p-organizationchart-node-content.p-highlight .p-node-toggler i { + color: #003e80; +} +.p-organizationchart .p-organizationchart-line-down { + background: #dee2e6; +} +.p-organizationchart .p-organizationchart-line-left { + border-right: 1px solid #dee2e6; + border-color: #dee2e6; +} +.p-organizationchart .p-organizationchart-line-top { + border-top: 1px solid #dee2e6; + border-color: #dee2e6; +} +.p-organizationchart .p-organizationchart-node-content { + border: 1px solid #dee2e6; + background: #ffffff; + color: #212529; + padding: 1.25rem; +} +.p-organizationchart .p-organizationchart-node-content .p-node-toggler { + background: inherit; + color: inherit; + border-radius: 50%; +} +.p-organizationchart .p-organizationchart-node-content .p-node-toggler:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} + +.p-paginator { + background: #ffffff; + color: #007bff; + border: solid #dee2e6; + border-width: 0; + padding: 0.75rem; + border-radius: 4px; +} +.p-paginator .p-paginator-first, +.p-paginator .p-paginator-prev, +.p-paginator .p-paginator-next, +.p-paginator .p-paginator-last { + background-color: #ffffff; + border: 1px solid #dee2e6; + color: #007bff; + min-width: 2.357rem; + height: 2.357rem; + margin: 0 0 0 -1px; + transition: box-shadow 0.15s; + border-radius: 0; +} +.p-paginator .p-paginator-first:not(.p-disabled):not(.p-highlight):hover, +.p-paginator .p-paginator-prev:not(.p-disabled):not(.p-highlight):hover, +.p-paginator .p-paginator-next:not(.p-disabled):not(.p-highlight):hover, +.p-paginator .p-paginator-last:not(.p-disabled):not(.p-highlight):hover { + background: #e9ecef; + border-color: #dee2e6; + color: #007bff; +} +.p-paginator .p-paginator-first { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.p-paginator .p-paginator-last { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.p-paginator .p-dropdown { + margin-left: 0.5rem; + margin-right: 0.5rem; + height: 2.357rem; +} +.p-paginator .p-dropdown .p-dropdown-label { + padding-right: 0; +} +.p-paginator .p-paginator-page-input { + margin-left: 0.5rem; + margin-right: 0.5rem; +} +.p-paginator .p-paginator-page-input .p-inputtext { + max-width: 2.357rem; +} +.p-paginator .p-paginator-current { + background-color: #ffffff; + border: 1px solid #dee2e6; + color: #007bff; + min-width: 2.357rem; + height: 2.357rem; + margin: 0 0 0 -1px; + padding: 0 0.5rem; +} +.p-paginator .p-paginator-pages .p-paginator-page { + background-color: #ffffff; + border: 1px solid #dee2e6; + color: #007bff; + min-width: 2.357rem; + height: 2.357rem; + margin: 0 0 0 -1px; + transition: box-shadow 0.15s; + border-radius: 0; +} +.p-paginator .p-paginator-pages .p-paginator-page.p-highlight { + background: #007bff; + border-color: #007bff; + color: #ffffff; +} +.p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):hover { + background: #e9ecef; + border-color: #dee2e6; + color: #007bff; +} + +.p-picklist .p-picklist-buttons { + padding: 1.25rem; +} +.p-picklist .p-picklist-buttons .p-button { + margin-bottom: 0.5rem; +} +.p-picklist .p-picklist-header { + background: #efefef; + color: #212529; + border: 1px solid #dee2e6; + padding: 1rem 1.25rem; + font-weight: 600; + border-bottom: 0 none; + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} +.p-picklist .p-picklist-list { + border: 1px solid #dee2e6; + background: #ffffff; + color: #212529; + padding: 0.5rem 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.p-picklist .p-picklist-list .p-picklist-item { + padding: 0.5rem 1.5rem; + margin: 0; + border: 0 none; + color: #212529; + background: transparent; + transition: transform 0.15s, box-shadow 0.15s; +} +.p-picklist .p-picklist-list .p-picklist-item:not(.p-highlight):hover { + background: #e9ecef; + color: #212529; +} +.p-picklist .p-picklist-list .p-picklist-item:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: inset 0 0 0 0.15rem rgba(38, 143, 255, 0.5); +} +.p-picklist .p-picklist-list .p-picklist-item.p-highlight { + color: #ffffff; + background: #007bff; +} +.p-picklist.p-picklist-striped .p-picklist-list .p-picklist-item:nth-child(even) { + background: rgba(0, 0, 0, 0.05); +} +.p-picklist.p-picklist-striped .p-picklist-list .p-picklist-item:nth-child(even):hover { + background: #e9ecef; +} + +.p-timeline .p-timeline-event-marker { + border: 0 none; + border-radius: 50%; + width: 1rem; + height: 1rem; + background-color: #007bff; +} +.p-timeline .p-timeline-event-connector { + background-color: #dee2e6; +} +.p-timeline.p-timeline-vertical .p-timeline-event-opposite, +.p-timeline.p-timeline-vertical .p-timeline-event-content { + padding: 0 1rem; +} +.p-timeline.p-timeline-vertical .p-timeline-event-connector { + width: 2px; +} +.p-timeline.p-timeline-horizontal .p-timeline-event-opposite, +.p-timeline.p-timeline-horizontal .p-timeline-event-content { + padding: 1rem 0; +} +.p-timeline.p-timeline-horizontal .p-timeline-event-connector { + height: 2px; +} + +.p-tree { + border: 1px solid #dee2e6; + background: #ffffff; + color: #212529; + padding: 1.25rem; + border-radius: 4px; +} +.p-tree .p-tree-container .p-treenode { + padding: 0.143rem; +} +.p-tree .p-tree-container .p-treenode .p-treenode-content { + border-radius: 4px; + transition: box-shadow 0.15s; + padding: 0.286rem; +} +.p-tree .p-tree-container .p-treenode .p-treenode-content .p-tree-toggler { + margin-right: 0.5rem; + width: 2rem; + height: 2rem; + color: #6c757d; + border: 0 none; + background: transparent; + border-radius: 50%; + transition: box-shadow 0.15s; +} +.p-tree .p-tree-container .p-treenode .p-treenode-content .p-tree-toggler:enabled:hover { + color: #495057; + border-color: transparent; + background: transparent; +} +.p-tree .p-tree-container .p-treenode .p-treenode-content .p-tree-toggler:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.p-tree .p-tree-container .p-treenode .p-treenode-content .p-treenode-icon { + margin-right: 0.5rem; + color: #6c757d; +} +.p-tree .p-tree-container .p-treenode .p-treenode-content .p-checkbox { + margin-right: 0.5rem; +} +.p-tree .p-tree-container .p-treenode .p-treenode-content .p-checkbox .p-indeterminate .p-checkbox-icon { + color: #212529; +} +.p-tree .p-tree-container .p-treenode .p-treenode-content:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: inset 0 0 0 0.15rem rgba(38, 143, 255, 0.5); +} +.p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight { + background: #007bff; + color: #ffffff; +} +.p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight .p-tree-toggler, +.p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight .p-treenode-icon { + color: #ffffff; +} +.p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight .p-tree-toggler:hover, +.p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight .p-treenode-icon:hover { + color: #ffffff; +} +.p-tree .p-tree-container .p-treenode .p-treenode-content.p-treenode-selectable:not(.p-highlight):hover { + background: #e9ecef; + color: #212529; +} +.p-tree .p-tree-filter-container { + margin-bottom: 0.5rem; +} +.p-tree .p-tree-filter-container .p-tree-filter { + width: 100%; + padding-right: 1.75rem; +} +.p-tree .p-tree-filter-container .p-tree-filter-icon { + right: 0.75rem; + color: #495057; +} +.p-tree .p-treenode-children { + padding: 0 0 0 1rem; +} +.p-tree .p-tree-loading-icon { + font-size: 2rem; +} + +.p-treetable .p-paginator-top { + border-width: 1px 0 0 0; + border-radius: 0; +} +.p-treetable .p-paginator-bottom { + border-width: 1px 0 0 0; + border-radius: 0; +} +.p-treetable .p-treetable-header { + background: #efefef; + color: #212529; + border: solid #dee2e6; + border-width: 1px 0 0 0; + padding: 1rem 1rem; + font-weight: 600; +} +.p-treetable .p-treetable-footer { + background: #efefef; + color: #212529; + border: 1px solid #dee2e6; + border-width: 1px 0 1px 0; + padding: 1rem 1rem; + font-weight: 600; +} +.p-treetable .p-treetable-thead > tr > th { + text-align: left; + padding: 1rem 1rem; + border: 1px solid #dee2e6; + border-width: 1px 0 2px 0; + font-weight: 600; + color: #212529; + background: #ffffff; + transition: box-shadow 0.15s; +} +.p-treetable .p-treetable-tfoot > tr > td { + text-align: left; + padding: 1rem 1rem; + border: 1px solid #dee2e6; + border-width: 1px 0 1px 0; + font-weight: 600; + color: #212529; + background: #ffffff; +} +.p-treetable .p-sortable-column { + outline-color: rgba(38, 143, 255, 0.5); +} +.p-treetable .p-sortable-column .p-sortable-column-icon { + color: #6c757d; + margin-left: 0.5rem; +} +.p-treetable .p-sortable-column .p-sortable-column-badge { + border-radius: 50%; + height: 1.143rem; + min-width: 1.143rem; + line-height: 1.143rem; + color: #ffffff; + background: #007bff; + margin-left: 0.5rem; +} +.p-treetable .p-sortable-column:not(.p-highlight):hover { + background: #e9ecef; + color: #212529; +} +.p-treetable .p-sortable-column:not(.p-highlight):hover .p-sortable-column-icon { + color: #6c757d; +} +.p-treetable .p-sortable-column.p-highlight { + background: #ffffff; + color: #007bff; +} +.p-treetable .p-sortable-column.p-highlight .p-sortable-column-icon { + color: #007bff; +} +.p-treetable .p-treetable-tbody > tr { + background: #ffffff; + color: #212529; + transition: box-shadow 0.15s; +} +.p-treetable .p-treetable-tbody > tr > td { + text-align: left; + border: 1px solid #dee2e6; + border-width: 1px 0 0 0; + padding: 1rem 1rem; +} +.p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler { + width: 2rem; + height: 2rem; + color: #6c757d; + border: 0 none; + background: transparent; + border-radius: 50%; + transition: box-shadow 0.15s; + margin-right: 0.5rem; +} +.p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler:enabled:hover { + color: #495057; + border-color: transparent; + background: transparent; +} +.p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler + .p-checkbox { + margin-right: 0.5rem; +} +.p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler + .p-checkbox .p-indeterminate .p-checkbox-icon { + color: #212529; +} +.p-treetable .p-treetable-tbody > tr:focus { + outline: 0.15rem solid rgba(38, 143, 255, 0.5); + outline-offset: -0.15rem; +} +.p-treetable .p-treetable-tbody > tr.p-highlight { + background: #007bff; + color: #ffffff; +} +.p-treetable .p-treetable-tbody > tr.p-highlight .p-treetable-toggler { + color: #ffffff; +} +.p-treetable .p-treetable-tbody > tr.p-highlight .p-treetable-toggler:hover { + color: #ffffff; +} +.p-treetable.p-treetable-hoverable-rows .p-treetable-tbody > tr:not(.p-highlight):hover { + background: #e9ecef; + color: #212529; +} +.p-treetable.p-treetable-hoverable-rows .p-treetable-tbody > tr:not(.p-highlight):hover .p-treetable-toggler { + color: #212529; +} +.p-treetable .p-column-resizer-helper { + background: #007bff; +} +.p-treetable .p-treetable-scrollable-header, +.p-treetable .p-treetable-scrollable-footer { + background: #efefef; +} +.p-treetable .p-treetable-loading-icon { + font-size: 2rem; +} +.p-treetable.p-treetable-gridlines .p-datatable-header { + border-width: 1px 1px 0 1px; +} +.p-treetable.p-treetable-gridlines .p-treetable-footer { + border-width: 0 1px 1px 1px; +} +.p-treetable.p-treetable-gridlines .p-treetable-top { + border-width: 0 1px 0 1px; +} +.p-treetable.p-treetable-gridlines .p-treetable-bottom { + border-width: 0 1px 1px 1px; +} +.p-treetable.p-treetable-gridlines .p-treetable-thead > tr > th { + border-width: 1px; +} +.p-treetable.p-treetable-gridlines .p-treetable-tbody > tr > td { + border-width: 1px; +} +.p-treetable.p-treetable-gridlines .p-treetable-tfoot > tr > td { + border-width: 1px; +} +.p-treetable.p-treetable-sm .p-treetable-header { + padding: 0.875rem 0.875rem; +} +.p-treetable.p-treetable-sm .p-treetable-thead > tr > th { + padding: 0.5rem 0.5rem; +} +.p-treetable.p-treetable-sm .p-treetable-tbody > tr > td { + padding: 0.5rem 0.5rem; +} +.p-treetable.p-treetable-sm .p-treetable-tfoot > tr > td { + padding: 0.5rem 0.5rem; +} +.p-treetable.p-treetable-sm .p-treetable-footer { + padding: 0.5rem 0.5rem; +} +.p-treetable.p-treetable-lg .p-treetable-header { + padding: 1.25rem 1.25rem; +} +.p-treetable.p-treetable-lg .p-treetable-thead > tr > th { + padding: 1.25rem 1.25rem; +} +.p-treetable.p-treetable-lg .p-treetable-tbody > tr > td { + padding: 1.25rem 1.25rem; +} +.p-treetable.p-treetable-lg .p-treetable-tfoot > tr > td { + padding: 1.25rem 1.25rem; +} +.p-treetable.p-treetable-lg .p-treetable-footer { + padding: 1.25rem 1.25rem; +} + +.p-accordion .p-accordion-header .p-accordion-header-link { + padding: 1rem 1.25rem; + border: 1px solid #dee2e6; + color: #212529; + background: #efefef; + font-weight: 600; + border-radius: 4px; + transition: box-shadow 0.15s; +} +.p-accordion .p-accordion-header .p-accordion-header-link .p-accordion-toggle-icon { + margin-right: 0.5rem; +} +.p-accordion .p-accordion-header:not(.p-disabled) .p-accordion-header-link:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.p-accordion .p-accordion-header:not(.p-highlight):not(.p-disabled):hover .p-accordion-header-link { + background: #e9ecef; + border-color: #dee2e6; + color: #212529; +} +.p-accordion .p-accordion-header:not(.p-disabled).p-highlight .p-accordion-header-link { + background: #efefef; + border-color: #dee2e6; + color: #212529; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.p-accordion .p-accordion-header:not(.p-disabled).p-highlight:hover .p-accordion-header-link { + border-color: #dee2e6; + background: #e9ecef; + color: #212529; +} +.p-accordion .p-accordion-content { + padding: 1.25rem; + border: 1px solid #dee2e6; + background: #ffffff; + color: #212529; + border-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.p-accordion .p-accordion-tab { + margin-bottom: 0; +} +.p-accordion .p-accordion-tab .p-accordion-header .p-accordion-header-link { + border-radius: 0; +} +.p-accordion .p-accordion-tab .p-accordion-content { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.p-accordion .p-accordion-tab:not(:first-child) .p-accordion-header .p-accordion-header-link { + border-top: 0 none; +} +.p-accordion .p-accordion-tab:not(:first-child) .p-accordion-header:not(.p-highlight):not(.p-disabled):hover .p-accordion-header-link, .p-accordion .p-accordion-tab:not(:first-child) .p-accordion-header:not(.p-disabled).p-highlight:hover .p-accordion-header-link { + border-top: 0 none; +} +.p-accordion .p-accordion-tab:first-child .p-accordion-header .p-accordion-header-link { + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} +.p-accordion .p-accordion-tab:last-child .p-accordion-header:not(.p-highlight) .p-accordion-header-link { + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.p-accordion .p-accordion-tab:last-child .p-accordion-content { + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +.p-card { + background: #ffffff; + color: #212529; + box-shadow: 0 2px 1px -1px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 1px 3px 0 rgba(0, 0, 0, 0.12); + border-radius: 4px; +} +.p-card .p-card-body { + padding: 1.5rem; +} +.p-card .p-card-title { + font-size: 1.5rem; + font-weight: 700; + margin-bottom: 0.5rem; +} +.p-card .p-card-subtitle { + font-weight: 400; + margin-bottom: 0.5rem; + color: #6c757d; +} +.p-card .p-card-content { + padding: 1rem 0; +} +.p-card .p-card-footer { + padding: 1rem 0 0 0; +} + +.p-fieldset { + border: 1px solid #dee2e6; + background: #ffffff; + color: #212529; + border-radius: 4px; +} +.p-fieldset .p-fieldset-legend { + padding: 1rem 1.25rem; + border: 1px solid #dee2e6; + color: #212529; + background: #efefef; + font-weight: 600; + border-radius: 4px; +} +.p-fieldset.p-fieldset-toggleable .p-fieldset-legend { + padding: 0; + transition: box-shadow 0.15s; +} +.p-fieldset.p-fieldset-toggleable .p-fieldset-legend a { + padding: 1rem 1.25rem; + color: #212529; + border-radius: 4px; + transition: box-shadow 0.15s; +} +.p-fieldset.p-fieldset-toggleable .p-fieldset-legend a .p-fieldset-toggler { + margin-right: 0.5rem; +} +.p-fieldset.p-fieldset-toggleable .p-fieldset-legend a:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.p-fieldset.p-fieldset-toggleable .p-fieldset-legend a:hover { + color: #212529; +} +.p-fieldset.p-fieldset-toggleable .p-fieldset-legend:hover { + background: #e9ecef; + border-color: #dee2e6; + color: #212529; +} +.p-fieldset .p-fieldset-content { + padding: 1.25rem; +} + +.p-divider .p-divider-content { + background-color: #ffffff; +} +.p-divider.p-divider-horizontal { + margin: 1rem 0; + padding: 0 1rem; +} +.p-divider.p-divider-horizontal:before { + border-top: 1px #dee2e6; +} +.p-divider.p-divider-horizontal .p-divider-content { + padding: 0 0.5rem; +} +.p-divider.p-divider-vertical { + margin: 0 1rem; + padding: 1rem 0; +} +.p-divider.p-divider-vertical:before { + border-left: 1px #dee2e6; +} +.p-divider.p-divider-vertical .p-divider-content { + padding: 0.5rem 0; +} + +.p-panel .p-panel-header { + border: 1px solid #dee2e6; + padding: 1rem 1.25rem; + background: #efefef; + color: #212529; + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} +.p-panel .p-panel-header .p-panel-title { + font-weight: 600; +} +.p-panel .p-panel-header .p-panel-header-icon { + width: 2rem; + height: 2rem; + color: #6c757d; + border: 0 none; + background: transparent; + border-radius: 50%; + transition: box-shadow 0.15s; +} +.p-panel .p-panel-header .p-panel-header-icon:enabled:hover { + color: #495057; + border-color: transparent; + background: transparent; +} +.p-panel .p-panel-header .p-panel-header-icon:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.p-panel.p-panel-toggleable .p-panel-header { + padding: 0.5rem 1.25rem; +} +.p-panel .p-panel-content { + padding: 1.25rem; + border: 1px solid #dee2e6; + background: #ffffff; + color: #212529; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; + border-top: 0 none; +} +.p-panel .p-panel-footer { + padding: 0.5rem 1.25rem; + border: 1px solid #dee2e6; + background: #ffffff; + color: #212529; + border-top: 0 none; +} + +.p-scrollpanel .p-scrollpanel-bar { + background: #efefef; + border: 0 none; +} + +.p-splitter { + border: 1px solid #dee2e6; + background: #ffffff; + border-radius: 4px; + color: #212529; +} +.p-splitter .p-splitter-gutter { + transition: box-shadow 0.15s; + background: #efefef; +} +.p-splitter .p-splitter-gutter .p-splitter-gutter-handle { + background: #dee2e6; +} +.p-splitter .p-splitter-gutter-resizing { + background: #dee2e6; +} + +.p-tabview .p-tabview-nav { + background: transparent; + border: 1px solid #dee2e6; + border-width: 0 0 1px 0; +} +.p-tabview .p-tabview-nav li { + margin-right: 0; +} +.p-tabview .p-tabview-nav li .p-tabview-nav-link { + border: solid; + border-width: 1px; + border-color: #ffffff #ffffff #dee2e6 #ffffff; + background: #ffffff; + color: #6c757d; + padding: 0.75rem 1rem; + font-weight: 600; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + transition: box-shadow 0.15s; + margin: 0 0 -1px 0; +} +.p-tabview .p-tabview-nav li .p-tabview-nav-link:not(.p-disabled):focus { + outline: 0 none; + outline-offset: 0; + box-shadow: inset 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.p-tabview .p-tabview-nav li:not(.p-highlight):not(.p-disabled):hover .p-tabview-nav-link { + background: #ffffff; + border-color: #dee2e6; + color: #6c757d; +} +.p-tabview .p-tabview-nav li.p-highlight .p-tabview-nav-link { + background: #ffffff; + border-color: #dee2e6 #dee2e6 #ffffff #dee2e6; + color: #495057; +} +.p-tabview .p-tabview-nav-btn.p-link { + background: #ffffff; + color: #495057; + width: 2.357rem; + box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12); + border-radius: 0; +} +.p-tabview .p-tabview-nav-btn.p-link:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: inset 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.p-tabview .p-tabview-panels { + background: #ffffff; + padding: 1.25rem; + border: 0 none; + color: #212529; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +.p-toolbar { + background: #efefef; + border: 1px solid #dee2e6; + padding: 1rem 1.25rem; + border-radius: 4px; +} +.p-toolbar .p-toolbar-separator { + margin: 0 0.5rem; +} + +.p-confirm-popup { + background: #ffffff; + color: #212529; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 4px; + box-shadow: none; +} +.p-confirm-popup .p-confirm-popup-content { + padding: 1.25rem; +} +.p-confirm-popup .p-confirm-popup-footer { + text-align: right; + padding: 0 1.25rem 1.25rem 1.25rem; +} +.p-confirm-popup .p-confirm-popup-footer button { + margin: 0 0.5rem 0 0; + width: auto; +} +.p-confirm-popup .p-confirm-popup-footer button:last-child { + margin: 0; +} +.p-confirm-popup:after { + border: solid transparent; + border-color: rgba(255, 255, 255, 0); + border-bottom-color: #ffffff; +} +.p-confirm-popup:before { + border: solid transparent; + border-color: rgba(0, 0, 0, 0); + border-bottom-color: rgba(0, 0, 0, 0.2); +} +.p-confirm-popup.p-confirm-popup-flipped:after { + border-top-color: #ffffff; +} +.p-confirm-popup.p-confirm-popup-flipped:before { + border-top-color: rgba(0, 0, 0, 0.2); +} +.p-confirm-popup .p-confirm-popup-icon { + font-size: 1.5rem; +} +.p-confirm-popup .p-confirm-popup-message { + margin-left: 1rem; +} + +.p-dialog { + border-radius: 4px; + box-shadow: none; + border: 1px solid rgba(0, 0, 0, 0.2); +} +.p-dialog .p-dialog-header { + border-bottom: 1px solid #e9ecef; + background: #ffffff; + color: #212529; + padding: 1rem; + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} +.p-dialog .p-dialog-header .p-dialog-title { + font-weight: 600; + font-size: 1.25rem; +} +.p-dialog .p-dialog-header .p-dialog-header-icon { + width: 2rem; + height: 2rem; + color: #6c757d; + border: 0 none; + background: transparent; + border-radius: 50%; + transition: box-shadow 0.15s; + margin-right: 0.5rem; +} +.p-dialog .p-dialog-header .p-dialog-header-icon:enabled:hover { + color: #495057; + border-color: transparent; + background: transparent; +} +.p-dialog .p-dialog-header .p-dialog-header-icon:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.p-dialog .p-dialog-header .p-dialog-header-icon:last-child { + margin-right: 0; +} +.p-dialog .p-dialog-content { + background: #ffffff; + color: #212529; + padding: 1rem; +} +.p-dialog .p-dialog-content:last-of-type { + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.p-dialog .p-dialog-footer { + border-top: 1px solid #e9ecef; + background: #ffffff; + color: #212529; + padding: 1rem; + text-align: right; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.p-dialog .p-dialog-footer button { + margin: 0 0.5rem 0 0; + width: auto; +} +.p-dialog.p-confirm-dialog .p-confirm-dialog-icon { + font-size: 2rem; +} +.p-dialog.p-confirm-dialog .p-confirm-dialog-message { + margin-left: 1rem; +} + +.p-overlaypanel { + background: #ffffff; + color: #212529; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 4px; + box-shadow: none; +} +.p-overlaypanel .p-overlaypanel-content { + padding: 1.25rem; +} +.p-overlaypanel .p-overlaypanel-close { + background: #007bff; + color: #ffffff; + width: 2rem; + height: 2rem; + transition: box-shadow 0.15s; + border-radius: 50%; + position: absolute; + top: -1rem; + right: -1rem; +} +.p-overlaypanel .p-overlaypanel-close:enabled:hover { + background: #0069d9; + color: #ffffff; +} +.p-overlaypanel:after { + border: solid transparent; + border-color: rgba(255, 255, 255, 0); + border-bottom-color: #ffffff; +} +.p-overlaypanel:before { + border: solid transparent; + border-color: rgba(0, 0, 0, 0); + border-bottom-color: rgba(0, 0, 0, 0.2); +} +.p-overlaypanel.p-overlaypanel-flipped:after { + border-top-color: #ffffff; +} +.p-overlaypanel.p-overlaypanel-flipped:before { + border-top-color: rgba(0, 0, 0, 0.2); +} + +.p-sidebar { + background: #ffffff; + color: #212529; + border: 1px solid rgba(0, 0, 0, 0.2); + box-shadow: none; +} +.p-sidebar .p-sidebar-header { + padding: 1rem 1.25rem; +} +.p-sidebar .p-sidebar-header .p-sidebar-close, +.p-sidebar .p-sidebar-header .p-sidebar-icon { + width: 2rem; + height: 2rem; + color: #6c757d; + border: 0 none; + background: transparent; + border-radius: 50%; + transition: box-shadow 0.15s; +} +.p-sidebar .p-sidebar-header .p-sidebar-close:enabled:hover, +.p-sidebar .p-sidebar-header .p-sidebar-icon:enabled:hover { + color: #495057; + border-color: transparent; + background: transparent; +} +.p-sidebar .p-sidebar-header .p-sidebar-close:focus, +.p-sidebar .p-sidebar-header .p-sidebar-icon:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.p-sidebar .p-sidebar-header + .p-sidebar-content { + padding-top: 0; +} +.p-sidebar .p-sidebar-content { + padding: 1.25rem; +} + +.p-tooltip .p-tooltip-text { + background: #212529; + color: #ffffff; + padding: 0.5rem 0.75rem; + box-shadow: none; + border-radius: 4px; +} +.p-tooltip.p-tooltip-right .p-tooltip-arrow { + border-right-color: #212529; +} +.p-tooltip.p-tooltip-left .p-tooltip-arrow { + border-left-color: #212529; +} +.p-tooltip.p-tooltip-top .p-tooltip-arrow { + border-top-color: #212529; +} +.p-tooltip.p-tooltip-bottom .p-tooltip-arrow { + border-bottom-color: #212529; +} + +.p-fileupload .p-fileupload-buttonbar { + background: #efefef; + padding: 1rem 1.25rem; + border: 1px solid #dee2e6; + color: #212529; + border-bottom: 0 none; + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} +.p-fileupload .p-fileupload-buttonbar .p-button { + margin-right: 0.5rem; +} +.p-fileupload .p-fileupload-buttonbar .p-button.p-fileupload-choose.p-focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.p-fileupload .p-fileupload-content { + background: #ffffff; + padding: 2rem 1rem; + border: 1px solid #dee2e6; + color: #212529; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.p-fileupload .p-progressbar { + height: 0.25rem; +} +.p-fileupload .p-fileupload-row > div { + padding: 1rem 1rem; +} +.p-fileupload.p-fileupload-advanced .p-message { + margin-top: 0; +} + +.p-fileupload-choose:not(.p-disabled):hover { + background: #0069d9; + color: #ffffff; + border-color: #0069d9; +} +.p-fileupload-choose:not(.p-disabled):active { + background: #0062cc; + color: #ffffff; + border-color: #0062cc; +} + +.p-breadcrumb { + background: #efefef; + border: 0 none; + border-radius: 4px; + padding: 1rem; +} +.p-breadcrumb ul li .p-menuitem-link { + transition: box-shadow 0.15s; + border-radius: 4px; +} +.p-breadcrumb ul li .p-menuitem-link:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.p-breadcrumb ul li .p-menuitem-link .p-menuitem-text { + color: #007bff; +} +.p-breadcrumb ul li .p-menuitem-link .p-menuitem-icon { + color: #007bff; +} +.p-breadcrumb ul li.p-breadcrumb-chevron { + margin: 0 0.5rem 0 0.5rem; + color: #6c757d; +} +.p-breadcrumb ul li:last-child .p-menuitem-text { + color: #6c757d; +} +.p-breadcrumb ul li:last-child .p-menuitem-icon { + color: #6c757d; +} + +.p-contextmenu { + padding: 0.5rem 0; + background: #ffffff; + color: #212529; + border: 1px solid rgba(0, 0, 0, 0.15); + box-shadow: none; + border-radius: 4px; + width: 12.5rem; +} +.p-contextmenu .p-menuitem-link { + padding: 0.75rem 1rem; + color: #212529; + border-radius: 0; + transition: box-shadow 0.15s; + user-select: none; +} +.p-contextmenu .p-menuitem-link .p-menuitem-text { + color: #212529; +} +.p-contextmenu .p-menuitem-link .p-menuitem-icon { + color: #212529; + margin-right: 0.5rem; +} +.p-contextmenu .p-menuitem-link .p-submenu-icon { + color: #212529; +} +.p-contextmenu .p-menuitem-link:not(.p-disabled):hover { + background: #e9ecef; +} +.p-contextmenu .p-menuitem-link:not(.p-disabled):hover .p-menuitem-text { + color: #212529; +} +.p-contextmenu .p-menuitem-link:not(.p-disabled):hover .p-menuitem-icon { + color: #212529; +} +.p-contextmenu .p-menuitem-link:not(.p-disabled):hover .p-submenu-icon { + color: #212529; +} +.p-contextmenu .p-menuitem-link:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: inset 0 0 0 0.15rem rgba(38, 143, 255, 0.5); +} +.p-contextmenu .p-submenu-list { + padding: 0.5rem 0; + background: #ffffff; + border: 1px solid rgba(0, 0, 0, 0.15); + box-shadow: none; + border-radius: 4px; +} +.p-contextmenu .p-menuitem.p-menuitem-active > .p-menuitem-link { + background: #e9ecef; +} +.p-contextmenu .p-menuitem.p-menuitem-active > .p-menuitem-link .p-menuitem-text { + color: #212529; +} +.p-contextmenu .p-menuitem.p-menuitem-active > .p-menuitem-link .p-menuitem-icon, .p-contextmenu .p-menuitem.p-menuitem-active > .p-menuitem-link .p-submenu-icon { + color: #212529; +} +.p-contextmenu .p-menu-separator { + border-top: 1px solid #dee2e6; + margin: 0.5rem 0; +} +.p-contextmenu .p-submenu-icon { + font-size: 0.875rem; +} + +.p-dock .p-dock-list-container { + background: rgba(255, 255, 255, 0.1); + border: 1px solid rgba(255, 255, 255, 0.2); + padding: 0.5rem 0.5rem; + border-radius: 0.5rem; +} +.p-dock .p-dock-item { + padding: 0.5rem; +} +.p-dock .p-dock-action { + width: 4rem; + height: 4rem; +} +.p-dock.p-dock-top .p-dock-item-second-prev, +.p-dock.p-dock-top .p-dock-item-second-next, .p-dock.p-dock-bottom .p-dock-item-second-prev, +.p-dock.p-dock-bottom .p-dock-item-second-next { + margin: 0 0.9rem; +} +.p-dock.p-dock-top .p-dock-item-prev, +.p-dock.p-dock-top .p-dock-item-next, .p-dock.p-dock-bottom .p-dock-item-prev, +.p-dock.p-dock-bottom .p-dock-item-next { + margin: 0 1.3rem; +} +.p-dock.p-dock-top .p-dock-item-current, .p-dock.p-dock-bottom .p-dock-item-current { + margin: 0 1.5rem; +} +.p-dock.p-dock-left .p-dock-item-second-prev, +.p-dock.p-dock-left .p-dock-item-second-next, .p-dock.p-dock-right .p-dock-item-second-prev, +.p-dock.p-dock-right .p-dock-item-second-next { + margin: 0.9rem 0; +} +.p-dock.p-dock-left .p-dock-item-prev, +.p-dock.p-dock-left .p-dock-item-next, .p-dock.p-dock-right .p-dock-item-prev, +.p-dock.p-dock-right .p-dock-item-next { + margin: 1.3rem 0; +} +.p-dock.p-dock-left .p-dock-item-current, .p-dock.p-dock-right .p-dock-item-current { + margin: 1.5rem 0; +} + +@media screen and (max-width: 960px) { + .p-dock.p-dock-top .p-dock-list-container, .p-dock.p-dock-bottom .p-dock-list-container { + overflow-x: auto; + width: 100%; + } + .p-dock.p-dock-top .p-dock-list-container .p-dock-list, .p-dock.p-dock-bottom .p-dock-list-container .p-dock-list { + margin: 0 auto; + } + .p-dock.p-dock-left .p-dock-list-container, .p-dock.p-dock-right .p-dock-list-container { + overflow-y: auto; + height: 100%; + } + .p-dock.p-dock-left .p-dock-list-container .p-dock-list, .p-dock.p-dock-right .p-dock-list-container .p-dock-list { + margin: auto 0; + } + .p-dock .p-dock-list .p-dock-item { + transform: none; + margin: 0; + } +} +.p-megamenu { + padding: 0.5rem 1rem; + background: #efefef; + color: rgba(0, 0, 0, 0.9); + border: 0 none; + border-radius: 4px; +} +.p-megamenu .p-megamenu-root-list > .p-menuitem > .p-menuitem-link { + padding: 1rem; + color: rgba(0, 0, 0, 0.5); + border-radius: 4px; + transition: box-shadow 0.15s; + user-select: none; +} +.p-megamenu .p-megamenu-root-list > .p-menuitem > .p-menuitem-link .p-menuitem-text { + color: rgba(0, 0, 0, 0.5); +} +.p-megamenu .p-megamenu-root-list > .p-menuitem > .p-menuitem-link .p-menuitem-icon { + color: rgba(0, 0, 0, 0.5); + margin-right: 0.5rem; +} +.p-megamenu .p-megamenu-root-list > .p-menuitem > .p-menuitem-link .p-submenu-icon { + color: rgba(0, 0, 0, 0.5); + margin-left: 0.5rem; +} +.p-megamenu .p-megamenu-root-list > .p-menuitem > .p-menuitem-link:not(.p-disabled):hover { + background: transparent; +} +.p-megamenu .p-megamenu-root-list > .p-menuitem > .p-menuitem-link:not(.p-disabled):hover .p-menuitem-text { + color: rgba(0, 0, 0, 0.7); +} +.p-megamenu .p-megamenu-root-list > .p-menuitem > .p-menuitem-link:not(.p-disabled):hover .p-menuitem-icon { + color: rgba(0, 0, 0, 0.7); +} +.p-megamenu .p-megamenu-root-list > .p-menuitem > .p-menuitem-link:not(.p-disabled):hover .p-submenu-icon { + color: rgba(0, 0, 0, 0.7); +} +.p-megamenu .p-megamenu-root-list > .p-menuitem > .p-menuitem-link:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: inset 0 0 0 0.15rem rgba(38, 143, 255, 0.5); +} +.p-megamenu .p-megamenu-root-list > .p-menuitem.p-menuitem-active > .p-menuitem-link, +.p-megamenu .p-megamenu-root-list > .p-menuitem.p-menuitem-active > .p-menuitem-link:not(.p-disabled):hover { + background: transparent; +} +.p-megamenu .p-megamenu-root-list > .p-menuitem.p-menuitem-active > .p-menuitem-link .p-menuitem-text, +.p-megamenu .p-megamenu-root-list > .p-menuitem.p-menuitem-active > .p-menuitem-link:not(.p-disabled):hover .p-menuitem-text { + color: rgba(0, 0, 0, 0.9); +} +.p-megamenu .p-megamenu-root-list > .p-menuitem.p-menuitem-active > .p-menuitem-link .p-menuitem-icon, +.p-megamenu .p-megamenu-root-list > .p-menuitem.p-menuitem-active > .p-menuitem-link:not(.p-disabled):hover .p-menuitem-icon { + color: rgba(0, 0, 0, 0.9); +} +.p-megamenu .p-megamenu-root-list > .p-menuitem.p-menuitem-active > .p-menuitem-link .p-submenu-icon, +.p-megamenu .p-megamenu-root-list > .p-menuitem.p-menuitem-active > .p-menuitem-link:not(.p-disabled):hover .p-submenu-icon { + color: rgba(0, 0, 0, 0.9); +} +.p-megamenu .p-menuitem-link { + padding: 0.75rem 1rem; + color: #212529; + border-radius: 0; + transition: box-shadow 0.15s; + user-select: none; +} +.p-megamenu .p-menuitem-link .p-menuitem-text { + color: #212529; +} +.p-megamenu .p-menuitem-link .p-menuitem-icon { + color: #212529; + margin-right: 0.5rem; +} +.p-megamenu .p-menuitem-link .p-submenu-icon { + color: #212529; +} +.p-megamenu .p-menuitem-link:not(.p-disabled):hover { + background: #e9ecef; +} +.p-megamenu .p-menuitem-link:not(.p-disabled):hover .p-menuitem-text { + color: #212529; +} +.p-megamenu .p-menuitem-link:not(.p-disabled):hover .p-menuitem-icon { + color: #212529; +} +.p-megamenu .p-menuitem-link:not(.p-disabled):hover .p-submenu-icon { + color: #212529; +} +.p-megamenu .p-menuitem-link:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: inset 0 0 0 0.15rem rgba(38, 143, 255, 0.5); +} +.p-megamenu .p-megamenu-panel { + background: #ffffff; + color: #212529; + border: 1px solid rgba(0, 0, 0, 0.15); + box-shadow: none; +} +.p-megamenu .p-megamenu-submenu-header { + margin: 0; + padding: 0.75rem 1rem; + color: #212529; + background: #ffffff; + font-weight: 600; + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} +.p-megamenu .p-megamenu-submenu { + padding: 0.5rem 0; + width: 12.5rem; +} +.p-megamenu .p-megamenu-submenu .p-menu-separator { + border-top: 1px solid #dee2e6; + margin: 0.5rem 0; +} +.p-megamenu .p-menuitem.p-menuitem-active > .p-menuitem-link { + background: #e9ecef; +} +.p-megamenu .p-menuitem.p-menuitem-active > .p-menuitem-link .p-menuitem-text { + color: #212529; +} +.p-megamenu .p-menuitem.p-menuitem-active > .p-menuitem-link .p-menuitem-icon, .p-megamenu .p-menuitem.p-menuitem-active > .p-menuitem-link .p-submenu-icon { + color: #212529; +} +.p-megamenu.p-megamenu-vertical { + width: 12.5rem; + padding: 0.5rem 0; +} + +.p-menu { + padding: 0.5rem 0; + background: #ffffff; + color: #212529; + border: 1px solid #dee2e6; + border-radius: 4px; + width: 12.5rem; +} +.p-menu .p-menuitem-link { + padding: 0.75rem 1rem; + color: #212529; + border-radius: 0; + transition: box-shadow 0.15s; + user-select: none; +} +.p-menu .p-menuitem-link .p-menuitem-text { + color: #212529; +} +.p-menu .p-menuitem-link .p-menuitem-icon { + color: #212529; + margin-right: 0.5rem; +} +.p-menu .p-menuitem-link .p-submenu-icon { + color: #212529; +} +.p-menu .p-menuitem-link:not(.p-disabled):hover { + background: #e9ecef; +} +.p-menu .p-menuitem-link:not(.p-disabled):hover .p-menuitem-text { + color: #212529; +} +.p-menu .p-menuitem-link:not(.p-disabled):hover .p-menuitem-icon { + color: #212529; +} +.p-menu .p-menuitem-link:not(.p-disabled):hover .p-submenu-icon { + color: #212529; +} +.p-menu .p-menuitem-link:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: inset 0 0 0 0.15rem rgba(38, 143, 255, 0.5); +} +.p-menu.p-menu-overlay { + background: #ffffff; + border: 1px solid rgba(0, 0, 0, 0.15); + box-shadow: none; +} +.p-menu .p-submenu-header { + margin: 0; + padding: 0.75rem 1rem; + color: #212529; + background: #ffffff; + font-weight: 600; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.p-menu .p-menu-separator { + border-top: 1px solid #dee2e6; + margin: 0.5rem 0; +} + +.p-menubar { + padding: 0.5rem 1rem; + background: #efefef; + color: rgba(0, 0, 0, 0.9); + border: 0 none; + border-radius: 4px; +} +.p-menubar .p-menuitem-link { + padding: 0.75rem 1rem; + color: #212529; + border-radius: 0; + transition: box-shadow 0.15s; + user-select: none; +} +.p-menubar .p-menuitem-link .p-menuitem-text { + color: #212529; +} +.p-menubar .p-menuitem-link .p-menuitem-icon { + color: #212529; + margin-right: 0.5rem; +} +.p-menubar .p-menuitem-link .p-submenu-icon { + color: #212529; +} +.p-menubar .p-menuitem-link:not(.p-disabled):hover { + background: #e9ecef; +} +.p-menubar .p-menuitem-link:not(.p-disabled):hover .p-menuitem-text { + color: #212529; +} +.p-menubar .p-menuitem-link:not(.p-disabled):hover .p-menuitem-icon { + color: #212529; +} +.p-menubar .p-menuitem-link:not(.p-disabled):hover .p-submenu-icon { + color: #212529; +} +.p-menubar .p-menuitem-link:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: inset 0 0 0 0.15rem rgba(38, 143, 255, 0.5); +} +.p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link { + padding: 1rem; + color: rgba(0, 0, 0, 0.5); + border-radius: 4px; + transition: box-shadow 0.15s; + user-select: none; +} +.p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link .p-menuitem-text { + color: rgba(0, 0, 0, 0.5); +} +.p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link .p-menuitem-icon { + color: rgba(0, 0, 0, 0.5); + margin-right: 0.5rem; +} +.p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link .p-submenu-icon { + color: rgba(0, 0, 0, 0.5); + margin-left: 0.5rem; +} +.p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link:not(.p-disabled):hover { + background: transparent; +} +.p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link:not(.p-disabled):hover .p-menuitem-text { + color: rgba(0, 0, 0, 0.7); +} +.p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link:not(.p-disabled):hover .p-menuitem-icon { + color: rgba(0, 0, 0, 0.7); +} +.p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link:not(.p-disabled):hover .p-submenu-icon { + color: rgba(0, 0, 0, 0.7); +} +.p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: inset 0 0 0 0.15rem rgba(38, 143, 255, 0.5); +} +.p-menubar .p-menubar-root-list > .p-menuitem.p-menuitem-active > .p-menuitem-link, +.p-menubar .p-menubar-root-list > .p-menuitem.p-menuitem-active > .p-menuitem-link:not(.p-disabled):hover { + background: transparent; +} +.p-menubar .p-menubar-root-list > .p-menuitem.p-menuitem-active > .p-menuitem-link .p-menuitem-text, +.p-menubar .p-menubar-root-list > .p-menuitem.p-menuitem-active > .p-menuitem-link:not(.p-disabled):hover .p-menuitem-text { + color: rgba(0, 0, 0, 0.9); +} +.p-menubar .p-menubar-root-list > .p-menuitem.p-menuitem-active > .p-menuitem-link .p-menuitem-icon, +.p-menubar .p-menubar-root-list > .p-menuitem.p-menuitem-active > .p-menuitem-link:not(.p-disabled):hover .p-menuitem-icon { + color: rgba(0, 0, 0, 0.9); +} +.p-menubar .p-menubar-root-list > .p-menuitem.p-menuitem-active > .p-menuitem-link .p-submenu-icon, +.p-menubar .p-menubar-root-list > .p-menuitem.p-menuitem-active > .p-menuitem-link:not(.p-disabled):hover .p-submenu-icon { + color: rgba(0, 0, 0, 0.9); +} +.p-menubar .p-submenu-list { + padding: 0.5rem 0; + background: #ffffff; + border: 1px solid rgba(0, 0, 0, 0.15); + box-shadow: none; + width: 12.5rem; +} +.p-menubar .p-submenu-list .p-menu-separator { + border-top: 1px solid #dee2e6; + margin: 0.5rem 0; +} +.p-menubar .p-submenu-list .p-submenu-icon { + font-size: 0.875rem; +} +.p-menubar .p-menuitem.p-menuitem-active > .p-menuitem-link { + background: #e9ecef; +} +.p-menubar .p-menuitem.p-menuitem-active > .p-menuitem-link .p-menuitem-text { + color: #212529; +} +.p-menubar .p-menuitem.p-menuitem-active > .p-menuitem-link .p-menuitem-icon, .p-menubar .p-menuitem.p-menuitem-active > .p-menuitem-link .p-submenu-icon { + color: #212529; +} + +@media screen and (max-width: 960px) { + .p-menubar { + position: relative; + } + .p-menubar .p-menubar-button { + display: flex; + width: 2rem; + height: 2rem; + color: rgba(0, 0, 0, 0.5); + border-radius: 50%; + transition: box-shadow 0.15s; + } + .p-menubar .p-menubar-button:hover { + color: rgba(0, 0, 0, 0.7); + background: transparent; + } + .p-menubar .p-menubar-button:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); + } + .p-menubar .p-menubar-root-list { + position: absolute; + display: none; + padding: 0.5rem 0; + background: #ffffff; + border: 1px solid rgba(0, 0, 0, 0.15); + box-shadow: none; + width: 100%; + } + .p-menubar .p-menubar-root-list .p-menu-separator { + border-top: 1px solid #dee2e6; + margin: 0.5rem 0; + } + .p-menubar .p-menubar-root-list .p-submenu-icon { + font-size: 0.875rem; + } + .p-menubar .p-menubar-root-list > .p-menuitem { + width: 100%; + position: static; + } + .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link { + padding: 0.75rem 1rem; + color: #212529; + border-radius: 0; + transition: box-shadow 0.15s; + user-select: none; + } + .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link .p-menuitem-text { + color: #212529; + } + .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link .p-menuitem-icon { + color: #212529; + margin-right: 0.5rem; + } + .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link .p-submenu-icon { + color: #212529; + } + .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link:not(.p-disabled):hover { + background: #e9ecef; + } + .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link:not(.p-disabled):hover .p-menuitem-text { + color: #212529; + } + .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link:not(.p-disabled):hover .p-menuitem-icon { + color: #212529; + } + .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link:not(.p-disabled):hover .p-submenu-icon { + color: #212529; + } + .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: inset 0 0 0 0.15rem rgba(38, 143, 255, 0.5); + } + .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link > .p-submenu-icon { + margin-left: auto; + transition: transform 0.15s; + } + .p-menubar .p-menubar-root-list > .p-menuitem.p-menuitem-active > .p-menuitem-link > .p-submenu-icon { + transform: rotate(-180deg); + } + .p-menubar .p-menubar-root-list .p-submenu-list { + width: 100%; + position: static; + box-shadow: none; + border: 0 none; + } + .p-menubar .p-menubar-root-list .p-submenu-list .p-submenu-icon { + transition: transform 0.15s; + transform: rotate(90deg); + } + .p-menubar .p-menubar-root-list .p-submenu-list .p-menuitem-active > .p-menuitem-link > .p-submenu-icon { + transform: rotate(-90deg); + } + .p-menubar .p-menubar-root-list .p-menuitem { + width: 100%; + position: static; + } + .p-menubar .p-menubar-root-list ul li a { + padding-left: 2.25rem; + } + .p-menubar .p-menubar-root-list ul li ul li a { + padding-left: 3.75rem; + } + .p-menubar .p-menubar-root-list ul li ul li ul li a { + padding-left: 5.25rem; + } + .p-menubar .p-menubar-root-list ul li ul li ul li ul li a { + padding-left: 6.75rem; + } + .p-menubar .p-menubar-root-list ul li ul li ul li ul li ul li a { + padding-left: 8.25rem; + } + .p-menubar.p-menubar-mobile-active .p-menubar-root-list { + display: flex; + flex-direction: column; + top: 100%; + left: 0; + z-index: 1; + } +} +.p-panelmenu .p-panelmenu-header > a { + padding: 1rem 1.25rem; + border: 1px solid #dee2e6; + color: #212529; + background: #efefef; + font-weight: 600; + border-radius: 4px; + transition: box-shadow 0.15s; +} +.p-panelmenu .p-panelmenu-header > a .p-panelmenu-icon { + margin-right: 0.5rem; +} +.p-panelmenu .p-panelmenu-header > a .p-menuitem-icon { + margin-right: 0.5rem; +} +.p-panelmenu .p-panelmenu-header > a:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.p-panelmenu .p-panelmenu-header:not(.p-highlight):not(.p-disabled) > a:hover { + background: #e9ecef; + border-color: #dee2e6; + color: #212529; +} +.p-panelmenu .p-panelmenu-header.p-highlight { + margin-bottom: 0; +} +.p-panelmenu .p-panelmenu-header.p-highlight > a { + background: #efefef; + border-color: #dee2e6; + color: #212529; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.p-panelmenu .p-panelmenu-header.p-highlight:not(.p-disabled) > a:hover { + border-color: #dee2e6; + background: #e9ecef; + color: #212529; +} +.p-panelmenu .p-panelmenu-content { + padding: 0.5rem 0; + border: 1px solid #dee2e6; + background: #ffffff; + color: #212529; + border-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.p-panelmenu .p-panelmenu-content .p-menuitem .p-menuitem-link { + padding: 0.75rem 1rem; + color: #212529; + border-radius: 0; + transition: box-shadow 0.15s; + user-select: none; +} +.p-panelmenu .p-panelmenu-content .p-menuitem .p-menuitem-link .p-menuitem-text { + color: #212529; +} +.p-panelmenu .p-panelmenu-content .p-menuitem .p-menuitem-link .p-menuitem-icon { + color: #212529; + margin-right: 0.5rem; +} +.p-panelmenu .p-panelmenu-content .p-menuitem .p-menuitem-link .p-submenu-icon { + color: #212529; +} +.p-panelmenu .p-panelmenu-content .p-menuitem .p-menuitem-link:not(.p-disabled):hover { + background: #e9ecef; +} +.p-panelmenu .p-panelmenu-content .p-menuitem .p-menuitem-link:not(.p-disabled):hover .p-menuitem-text { + color: #212529; +} +.p-panelmenu .p-panelmenu-content .p-menuitem .p-menuitem-link:not(.p-disabled):hover .p-menuitem-icon { + color: #212529; +} +.p-panelmenu .p-panelmenu-content .p-menuitem .p-menuitem-link:not(.p-disabled):hover .p-submenu-icon { + color: #212529; +} +.p-panelmenu .p-panelmenu-content .p-menuitem .p-menuitem-link:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: inset 0 0 0 0.15rem rgba(38, 143, 255, 0.5); +} +.p-panelmenu .p-panelmenu-content .p-menuitem .p-menuitem-link .p-panelmenu-icon { + margin-right: 0.5rem; +} +.p-panelmenu .p-panelmenu-content .p-submenu-list:not(.p-panelmenu-root-submenu) { + padding: 0 0 0 1rem; +} +.p-panelmenu .p-panelmenu-panel { + margin-bottom: 0; +} +.p-panelmenu .p-panelmenu-panel .p-panelmenu-header > a { + border-radius: 0; +} +.p-panelmenu .p-panelmenu-panel .p-panelmenu-content { + border-radius: 0; +} +.p-panelmenu .p-panelmenu-panel:not(:first-child) .p-panelmenu-header > a { + border-top: 0 none; +} +.p-panelmenu .p-panelmenu-panel:not(:first-child) .p-panelmenu-header:not(.p-highlight):not(.p-disabled):hover > a, .p-panelmenu .p-panelmenu-panel:not(:first-child) .p-panelmenu-header:not(.p-disabled).p-highlight:hover > a { + border-top: 0 none; +} +.p-panelmenu .p-panelmenu-panel:first-child .p-panelmenu-header > a { + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} +.p-panelmenu .p-panelmenu-panel:last-child .p-panelmenu-header:not(.p-highlight) > a { + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.p-panelmenu .p-panelmenu-panel:last-child .p-panelmenu-content { + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +.p-steps .p-steps-item .p-menuitem-link { + background: transparent; + transition: box-shadow 0.15s; + border-radius: 4px; + background: transparent; +} +.p-steps .p-steps-item .p-menuitem-link .p-steps-number { + color: #212529; + border: 1px solid #dee2e6; + background: transparent; + min-width: 2rem; + height: 2rem; + line-height: 2rem; + font-size: 1.143rem; + z-index: 1; + border-radius: 4px; +} +.p-steps .p-steps-item .p-menuitem-link .p-steps-title { + margin-top: 0.5rem; + color: #6c757d; +} +.p-steps .p-steps-item .p-menuitem-link:not(.p-disabled):focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.p-steps .p-steps-item.p-highlight .p-steps-number { + background: #007bff; + color: #ffffff; +} +.p-steps .p-steps-item.p-highlight .p-steps-title { + font-weight: 600; + color: #212529; +} +.p-steps .p-steps-item:before { + content: " "; + border-top: 1px solid #dee2e6; + width: 100%; + top: 50%; + left: 0; + display: block; + position: absolute; + margin-top: -1rem; +} + +.p-tabmenu .p-tabmenu-nav { + background: transparent; + border: 1px solid #dee2e6; + border-width: 0 0 1px 0; +} +.p-tabmenu .p-tabmenu-nav .p-tabmenuitem { + margin-right: 0; +} +.p-tabmenu .p-tabmenu-nav .p-tabmenuitem .p-menuitem-link { + border: solid; + border-width: 1px; + border-color: #ffffff #ffffff #dee2e6 #ffffff; + background: #ffffff; + color: #6c757d; + padding: 0.75rem 1rem; + font-weight: 600; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + transition: box-shadow 0.15s; + margin: 0 0 -1px 0; +} +.p-tabmenu .p-tabmenu-nav .p-tabmenuitem .p-menuitem-link .p-menuitem-icon { + margin-right: 0.5rem; +} +.p-tabmenu .p-tabmenu-nav .p-tabmenuitem .p-menuitem-link:not(.p-disabled):focus { + outline: 0 none; + outline-offset: 0; + box-shadow: inset 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.p-tabmenu .p-tabmenu-nav .p-tabmenuitem:not(.p-highlight):not(.p-disabled):hover .p-menuitem-link { + background: #ffffff; + border-color: #dee2e6; + color: #6c757d; +} +.p-tabmenu .p-tabmenu-nav .p-tabmenuitem.p-highlight .p-menuitem-link { + background: #ffffff; + border-color: #dee2e6 #dee2e6 #ffffff #dee2e6; + color: #495057; +} + +.p-tieredmenu { + padding: 0.5rem 0; + background: #ffffff; + color: #212529; + border: 1px solid #dee2e6; + border-radius: 4px; + width: 12.5rem; +} +.p-tieredmenu .p-menuitem-link { + padding: 0.75rem 1rem; + color: #212529; + border-radius: 0; + transition: box-shadow 0.15s; + user-select: none; +} +.p-tieredmenu .p-menuitem-link .p-menuitem-text { + color: #212529; +} +.p-tieredmenu .p-menuitem-link .p-menuitem-icon { + color: #212529; + margin-right: 0.5rem; +} +.p-tieredmenu .p-menuitem-link .p-submenu-icon { + color: #212529; +} +.p-tieredmenu .p-menuitem-link:not(.p-disabled):hover { + background: #e9ecef; +} +.p-tieredmenu .p-menuitem-link:not(.p-disabled):hover .p-menuitem-text { + color: #212529; +} +.p-tieredmenu .p-menuitem-link:not(.p-disabled):hover .p-menuitem-icon { + color: #212529; +} +.p-tieredmenu .p-menuitem-link:not(.p-disabled):hover .p-submenu-icon { + color: #212529; +} +.p-tieredmenu .p-menuitem-link:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: inset 0 0 0 0.15rem rgba(38, 143, 255, 0.5); +} +.p-tieredmenu.p-tieredmenu-overlay { + background: #ffffff; + border: 1px solid rgba(0, 0, 0, 0.15); + box-shadow: none; +} +.p-tieredmenu .p-submenu-list { + padding: 0.5rem 0; + background: #ffffff; + border: 1px solid rgba(0, 0, 0, 0.15); + box-shadow: none; +} +.p-tieredmenu .p-menuitem.p-menuitem-active > .p-menuitem-link { + background: #e9ecef; +} +.p-tieredmenu .p-menuitem.p-menuitem-active > .p-menuitem-link .p-menuitem-text { + color: #212529; +} +.p-tieredmenu .p-menuitem.p-menuitem-active > .p-menuitem-link .p-menuitem-icon, .p-tieredmenu .p-menuitem.p-menuitem-active > .p-menuitem-link .p-submenu-icon { + color: #212529; +} +.p-tieredmenu .p-menu-separator { + border-top: 1px solid #dee2e6; + margin: 0.5rem 0; +} +.p-tieredmenu .p-submenu-icon { + font-size: 0.875rem; +} + +.p-inline-message { + padding: 0.5rem 0.75rem; + margin: 0; + border-radius: 4px; +} +.p-inline-message.p-inline-message-info { + background: #cce5ff; + border: solid #b8daff; + border-width: 0px; + color: #004085; +} +.p-inline-message.p-inline-message-info .p-inline-message-icon { + color: #004085; +} +.p-inline-message.p-inline-message-success { + background: #d4edda; + border: solid #c3e6cb; + border-width: 0px; + color: #155724; +} +.p-inline-message.p-inline-message-success .p-inline-message-icon { + color: #155724; +} +.p-inline-message.p-inline-message-warn { + background: #fff3cd; + border: solid #ffeeba; + border-width: 0px; + color: #856404; +} +.p-inline-message.p-inline-message-warn .p-inline-message-icon { + color: #856404; +} +.p-inline-message.p-inline-message-error { + background: #f8d7da; + border: solid #f5c6cb; + border-width: 0px; + color: #721c24; +} +.p-inline-message.p-inline-message-error .p-inline-message-icon { + color: #721c24; +} +.p-inline-message .p-inline-message-icon { + font-size: 1rem; + margin-right: 0.5rem; +} +.p-inline-message .p-inline-message-text { + font-size: 1rem; +} +.p-inline-message.p-inline-message-icon-only .p-inline-message-icon { + margin-right: 0; +} + +.p-message { + margin: 1rem 0; + border-radius: 4px; +} +.p-message .p-message-wrapper { + padding: 1rem 1.25rem; +} +.p-message .p-message-close { + width: 2rem; + height: 2rem; + border-radius: 50%; + background: transparent; + transition: box-shadow 0.15s; +} +.p-message .p-message-close:hover { + background: rgba(255, 255, 255, 0.3); +} +.p-message .p-message-close:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.p-message.p-message-info { + background: #cce5ff; + border: solid #b8daff; + border-width: 1px; + color: #004085; +} +.p-message.p-message-info .p-message-icon { + color: #004085; +} +.p-message.p-message-info .p-message-close { + color: #004085; +} +.p-message.p-message-success { + background: #d4edda; + border: solid #c3e6cb; + border-width: 1px; + color: #155724; +} +.p-message.p-message-success .p-message-icon { + color: #155724; +} +.p-message.p-message-success .p-message-close { + color: #155724; +} +.p-message.p-message-warn { + background: #fff3cd; + border: solid #ffeeba; + border-width: 1px; + color: #856404; +} +.p-message.p-message-warn .p-message-icon { + color: #856404; +} +.p-message.p-message-warn .p-message-close { + color: #856404; +} +.p-message.p-message-error { + background: #f8d7da; + border: solid #f5c6cb; + border-width: 1px; + color: #721c24; +} +.p-message.p-message-error .p-message-icon { + color: #721c24; +} +.p-message.p-message-error .p-message-close { + color: #721c24; +} +.p-message .p-message-text { + font-size: 1rem; + font-weight: 500; +} +.p-message .p-message-icon { + font-size: 1.5rem; + margin-right: 0.5rem; +} + +.p-toast { + opacity: 1; +} +.p-toast .p-toast-message { + margin: 0 0 1rem 0; + box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1); + border-radius: 4px; +} +.p-toast .p-toast-message .p-toast-message-content { + padding: 1rem; + border-width: 0; +} +.p-toast .p-toast-message .p-toast-message-content .p-toast-message-text { + margin: 0 0 0 1rem; +} +.p-toast .p-toast-message .p-toast-message-content .p-toast-message-icon { + font-size: 2rem; +} +.p-toast .p-toast-message .p-toast-message-content .p-toast-summary { + font-weight: 700; +} +.p-toast .p-toast-message .p-toast-message-content .p-toast-detail { + margin: 0.5rem 0 0 0; +} +.p-toast .p-toast-message .p-toast-icon-close { + width: 2rem; + height: 2rem; + border-radius: 50%; + background: transparent; + transition: box-shadow 0.15s; +} +.p-toast .p-toast-message .p-toast-icon-close:hover { + background: rgba(255, 255, 255, 0.3); +} +.p-toast .p-toast-message .p-toast-icon-close:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} +.p-toast .p-toast-message.p-toast-message-info { + background: #cce5ff; + border: solid #b8daff; + border-width: 1px; + color: #004085; +} +.p-toast .p-toast-message.p-toast-message-info .p-toast-message-icon, +.p-toast .p-toast-message.p-toast-message-info .p-toast-icon-close { + color: #004085; +} +.p-toast .p-toast-message.p-toast-message-success { + background: #d4edda; + border: solid #c3e6cb; + border-width: 1px; + color: #155724; +} +.p-toast .p-toast-message.p-toast-message-success .p-toast-message-icon, +.p-toast .p-toast-message.p-toast-message-success .p-toast-icon-close { + color: #155724; +} +.p-toast .p-toast-message.p-toast-message-warn { + background: #fff3cd; + border: solid #ffeeba; + border-width: 1px; + color: #856404; +} +.p-toast .p-toast-message.p-toast-message-warn .p-toast-message-icon, +.p-toast .p-toast-message.p-toast-message-warn .p-toast-icon-close { + color: #856404; +} +.p-toast .p-toast-message.p-toast-message-error { + background: #f8d7da; + border: solid #f5c6cb; + border-width: 1px; + color: #721c24; +} +.p-toast .p-toast-message.p-toast-message-error .p-toast-message-icon, +.p-toast .p-toast-message.p-toast-message-error .p-toast-icon-close { + color: #721c24; +} + +.p-galleria .p-galleria-close { + margin: 0.5rem; + background: transparent; + color: #efefef; + width: 4rem; + height: 4rem; + transition: box-shadow 0.15s; + border-radius: 4px; +} +.p-galleria .p-galleria-close .p-galleria-close-icon { + font-size: 2rem; +} +.p-galleria .p-galleria-close:hover { + background: rgba(255, 255, 255, 0.1); + color: #efefef; +} +.p-galleria .p-galleria-item-nav { + background: transparent; + color: #efefef; + width: 4rem; + height: 4rem; + transition: box-shadow 0.15s; + border-radius: 4px; + margin: 0 0.5rem; +} +.p-galleria .p-galleria-item-nav .p-galleria-item-prev-icon, +.p-galleria .p-galleria-item-nav .p-galleria-item-next-icon { + font-size: 2rem; +} +.p-galleria .p-galleria-item-nav:not(.p-disabled):hover { + background: rgba(255, 255, 255, 0.1); + color: #efefef; +} +.p-galleria .p-galleria-caption { + background: rgba(0, 0, 0, 0.5); + color: #efefef; + padding: 1rem; +} +.p-galleria .p-galleria-indicators { + padding: 1rem; +} +.p-galleria .p-galleria-indicators .p-galleria-indicator button { + background-color: #e9ecef; + width: 1rem; + height: 1rem; + transition: box-shadow 0.15s; + border-radius: 4px; +} +.p-galleria .p-galleria-indicators .p-galleria-indicator button:hover { + background: #dee2e6; +} +.p-galleria .p-galleria-indicators .p-galleria-indicator.p-highlight button { + background: #007bff; + color: #ffffff; +} +.p-galleria.p-galleria-indicators-bottom .p-galleria-indicator, .p-galleria.p-galleria-indicators-top .p-galleria-indicator { + margin-right: 0.5rem; +} +.p-galleria.p-galleria-indicators-left .p-galleria-indicator, .p-galleria.p-galleria-indicators-right .p-galleria-indicator { + margin-bottom: 0.5rem; +} +.p-galleria.p-galleria-indicator-onitem .p-galleria-indicators { + background: rgba(0, 0, 0, 0.5); +} +.p-galleria.p-galleria-indicator-onitem .p-galleria-indicators .p-galleria-indicator button { + background: rgba(255, 255, 255, 0.4); +} +.p-galleria.p-galleria-indicator-onitem .p-galleria-indicators .p-galleria-indicator button:hover { + background: rgba(255, 255, 255, 0.6); +} +.p-galleria.p-galleria-indicator-onitem .p-galleria-indicators .p-galleria-indicator.p-highlight button { + background: #007bff; + color: #ffffff; +} +.p-galleria .p-galleria-thumbnail-container { + background: rgba(0, 0, 0, 0.9); + padding: 1rem 0.25rem; +} +.p-galleria .p-galleria-thumbnail-container .p-galleria-thumbnail-prev, +.p-galleria .p-galleria-thumbnail-container .p-galleria-thumbnail-next { + margin: 0.5rem; + background-color: transparent; + color: #efefef; + width: 2rem; + height: 2rem; + transition: box-shadow 0.15s; + border-radius: 4px; +} +.p-galleria .p-galleria-thumbnail-container .p-galleria-thumbnail-prev:hover, +.p-galleria .p-galleria-thumbnail-container .p-galleria-thumbnail-next:hover { + background: rgba(255, 255, 255, 0.1); + color: #efefef; +} +.p-galleria .p-galleria-thumbnail-container .p-galleria-thumbnail-item-content:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} + +.p-galleria-mask { + --maskbg: rgba(0, 0, 0, 0.9); +} + +.p-image-mask { + --maskbg: rgba(0, 0, 0, 0.9); +} + +.p-image-preview-indicator { + background-color: transparent; + color: #f8f9fa; + transition: box-shadow 0.15s; +} + +.p-image-preview-container:hover > .p-image-preview-indicator { + background-color: rgba(0, 0, 0, 0.5); +} + +.p-image-toolbar { + padding: 1rem; +} + +.p-image-action.p-link { + color: #f8f9fa; + background-color: transparent; + width: 3rem; + height: 3rem; + border-radius: 50%; + transition: box-shadow 0.15s; + margin-right: 0.5rem; +} +.p-image-action.p-link:last-child { + margin-right: 0; +} +.p-image-action.p-link:hover { + color: #f8f9fa; + background-color: rgba(255, 255, 255, 0.1); +} +.p-image-action.p-link i { + font-size: 1.5rem; +} + +.p-avatar { + background-color: #dee2e6; + border-radius: 4px; +} +.p-avatar.p-avatar-lg { + width: 3rem; + height: 3rem; + font-size: 1.5rem; +} +.p-avatar.p-avatar-lg .p-avatar-icon { + font-size: 1.5rem; +} +.p-avatar.p-avatar-xl { + width: 4rem; + height: 4rem; + font-size: 2rem; +} +.p-avatar.p-avatar-xl .p-avatar-icon { + font-size: 2rem; +} + +.p-avatar-group .p-avatar { + border: 2px solid #ffffff; +} + +.p-badge { + background: #007bff; + color: #ffffff; + font-size: 0.75rem; + font-weight: 700; + min-width: 1.5rem; + height: 1.5rem; + line-height: 1.5rem; +} +.p-badge.p-badge-secondary { + background-color: #6c757d; + color: #ffffff; +} +.p-badge.p-badge-success { + background-color: #28a745; + color: #ffffff; +} +.p-badge.p-badge-info { + background-color: #17a2b8; + color: #ffffff; +} +.p-badge.p-badge-warning { + background-color: #ffc107; + color: #212529; +} +.p-badge.p-badge-danger { + background-color: #dc3545; + color: #ffffff; +} +.p-badge.p-badge-lg { + font-size: 1.125rem; + min-width: 2.25rem; + height: 2.25rem; + line-height: 2.25rem; +} +.p-badge.p-badge-xl { + font-size: 1.5rem; + min-width: 3rem; + height: 3rem; + line-height: 3rem; +} + +.p-chip { + background-color: #dee2e6; + color: #212529; + border-radius: 16px; + padding: 0 0.75rem; +} +.p-chip .p-chip-text { + line-height: 1.5; + margin-top: 0.25rem; + margin-bottom: 0.25rem; +} +.p-chip .p-chip-icon { + margin-right: 0.5rem; +} +.p-chip img { + width: 2rem; + height: 2rem; + margin-left: -0.75rem; + margin-right: 0.5rem; +} +.p-chip .p-chip-remove-icon { + margin-left: 0.5rem; + border-radius: 4px; + transition: box-shadow 0.15s; +} +.p-chip .p-chip-remove-icon:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} + +.p-inplace .p-inplace-display { + padding: 0.5rem 0.75rem; + border-radius: 4px; + transition: background-color 0.15s, border-color 0.15s, box-shadow 0.15s; +} +.p-inplace .p-inplace-display:not(.p-disabled):hover { + background: #e9ecef; + color: #212529; +} +.p-inplace .p-inplace-display:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} + +.p-progressbar { + border: 0 none; + height: 1.5rem; + background: #e9ecef; + border-radius: 4px; +} +.p-progressbar .p-progressbar-value { + border: 0 none; + margin: 0; + background: #007bff; +} +.p-progressbar .p-progressbar-label { + color: #ffffff; + line-height: 1.5rem; +} + +.p-scrolltop { + width: 3rem; + height: 3rem; + border-radius: 4px; + box-shadow: none; + transition: box-shadow 0.15s; +} +.p-scrolltop.p-link { + background: rgba(0, 0, 0, 0.7); +} +.p-scrolltop.p-link:hover { + background: rgba(0, 0, 0, 0.8); +} +.p-scrolltop .p-scrolltop-icon { + font-size: 1.5rem; + color: #efefef; +} + +.p-skeleton { + background-color: #e9ecef; + border-radius: 4px; +} +.p-skeleton:after { + background: linear-gradient(90deg, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.4), rgba(255, 255, 255, 0)); +} + +.p-tag { + background: #007bff; + color: #ffffff; + font-size: 0.75rem; + font-weight: 700; + padding: 0.25rem 0.4rem; + border-radius: 4px; +} +.p-tag.p-tag-success { + background-color: #28a745; + color: #ffffff; +} +.p-tag.p-tag-info { + background-color: #17a2b8; + color: #ffffff; +} +.p-tag.p-tag-warning { + background-color: #ffc107; + color: #212529; +} +.p-tag.p-tag-danger { + background-color: #dc3545; + color: #ffffff; +} +.p-tag .p-tag-icon { + margin-right: 0.25rem; + font-size: 0.75rem; +} + +.p-terminal { + background: #ffffff; + color: #212529; + border: 1px solid #dee2e6; + padding: 1.25rem; +} +.p-terminal .p-terminal-input { + font-size: 1rem; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; +} + +/* Vendor extensions to the designer enhanced bootstrap compatibility */ +.p-breadcrumb .p-breadcrumb-chevron { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; +} +.p-breadcrumb .p-breadcrumb-chevron:before { + content: "/"; +} + +.fc.fc-theme-standard .fc-highlight { + background: #cce5ff; +} + +/* Customizations to the designer theme should be defined here */ +.p-inputtext { + padding: 0.375rem 0.75rem; +} + +.p-inputtext:enabled:focus { + color: #212529; + background-color: #fff; + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 .25rem rgba(13,110,253,.25); +} diff --git a/public/css/components/vue-datepicker.css b/public/css/components/vue-datepicker.css new file mode 100644 index 000000000..c2551b9d8 --- /dev/null +++ b/public/css/components/vue-datepicker.css @@ -0,0 +1,46 @@ +@import '../../../vendor/vuejs/vuedatepicker_css/main.css'; +:root { + /*General*/ + --dp-font-family: var(--bs-body-font-family); + --dp-border-radius: .25rem; + --dp-cell-border-radius: .25rem; /*Specific border radius for the calendar cell*/ + + /*Sizing*/ + --dp-button-height: 2.1875rem; /*Size for buttons in overlays*/ + --dp-month-year-row-height: 2.1875rem; /*Height of the month-year select row*/ + --dp-month-year-row-button-size: 2.1875rem; /*Specific height for the next/previous buttons*/ + --dp-button-icon-height: 1.25rem; /*Icon sizing in buttons*/ + --dp-cell-size: 2.1875rem; /*Width and height of calendar cell*/ + --dp-cell-padding: .3125rem; /*Padding in the cell*/ + --dp-common-padding: .625rem; /*Common padding used*/ + --dp-input-icon-padding: 2.1875rem; + --dp-input-padding: .375rem .75rem; + --dp-action-buttons-padding: .125rem .3125rem; /*Adjust padding for the action buttons in action row*/ + --dp-row-margin: .3125rem 0; /*Adjust the spacing between rows in the calendar*/ + --dp-calendar-header-cell-padding: 0.5rem; /*Adjust padding in calendar header cells*/ + --dp-two-calendars-spacing: .625rem; /*Space between multiple calendars*/ + --dp-overlay-col-padding: .1875rem; /*Padding in the overlay column*/ + --dp-time-inc-dec-button-size: 2rem; /*Sizing for arrow buttons in the time picker*/ + --dp-menu-padding: .375rem .5rem; /*Menu padding*/ +} +.dp__theme_light { + --dp-text-color: var(--text-color); + --dp-primary-color: var(--bs-primary); + --dp-primary-disabled-color: rgba(var(--bs-primary-rgb), .65); + --dp-primary-text-color: var(--primary-color-text); + --dp-secondary-color: var(--bs-secondary); + --dp-border-color: var(--bs-gray-400); + --dp-menu-border-color: var(--bs-gray-400); + --dp-border-color-hover: var(--bs-gray-400); + --dp-icon-color: rgba(var(--bs-black-rgb), .5); + --dp-hover-icon-color: rgba(var(--bs-black-rgb), .75); + --dp-range-between-dates-text-color: var(--dp-hover-text-color, var(--text-color)); +} +.dp__theme_light .form-control.is-invalid { + --dp-border-color-hover: var(--bs-danger); +} +.dp__theme_light .form-control.is-valid { + --dp-border-color-hover: var(--bs-success); +} +.form-control.is-invalid ~ .dp__clear_icon, +.was-validated .form-control:invalid ~ .dp__clear_icon { margin-right: calc(1.5em + .75rem - 12px) } diff --git a/public/js/apps/Bismeldestichtag/Bismeldestichtag.js b/public/js/apps/Bismeldestichtag/Bismeldestichtag.js index 79b73a2e5..04275d76a 100644 --- a/public/js/apps/Bismeldestichtag/Bismeldestichtag.js +++ b/public/js/apps/Bismeldestichtag/Bismeldestichtag.js @@ -24,6 +24,8 @@ import {CoreRESTClient} from '../../RESTClient.js'; import {CoreFetchCmpt} from '../../components/Fetch.js'; import {BismeldestichtagAPIs} from './API.js'; +import Phrasen from '../../plugin/Phrasen.js'; + const bismeldestichtagApp = Vue.createApp({ data: function() { return { @@ -187,4 +189,4 @@ const bismeldestichtagApp = Vue.createApp({ } }); -bismeldestichtagApp.mount('#main'); +bismeldestichtagApp.use(Phrasen).mount('#main'); diff --git a/public/js/apps/LogsViewer/LogsViewer.js b/public/js/apps/LogsViewer/LogsViewer.js index 84798c3e1..8aefa1d67 100644 --- a/public/js/apps/LogsViewer/LogsViewer.js +++ b/public/js/apps/LogsViewer/LogsViewer.js @@ -21,6 +21,8 @@ import {LogsViewerTabulatorEventHandlers} from './TabulatorSetup.js'; import {CoreFilterCmpt} from '../../components/filter/Filter.js'; import {CoreNavigationCmpt} from '../../components/navigation/Navigation.js'; +import Phrasen from '../../plugin/Phrasen.js'; + const logsViewerApp = Vue.createApp({ data: function() { return { @@ -40,5 +42,5 @@ const logsViewerApp = Vue.createApp({ } }); -logsViewerApp.mount('#main'); +logsViewerApp.use(Phrasen).mount('#main'); diff --git a/public/js/components/Form/Form.js b/public/js/components/Form/Form.js new file mode 100644 index 000000000..9a729b88f --- /dev/null +++ b/public/js/components/Form/Form.js @@ -0,0 +1,123 @@ +import FhcFragment from "../Fragment.js"; + +export default { + components: { + FhcFragment + }, + provide() { + return { + $registerToForm: component => { + if (this.inputs.indexOf(component) < 0) + this.inputs.push(component); + }, + $clearValidationForName: this.clearValidationForName + }; + }, + props: { + tag: { + type: String, + default: 'form' + } + }, + data() { + return { + inputs: [] + } + }, + computed: { + sortedInputs() { + return this.inputs.reduce((a,c) => { + let name = c.name || '_default'; + if (!a[name]) + a[name] = []; + a[name].push(c); + + if (c.lcType == 'checkbox' && name.substr(-1) == ']' && name.indexOf('[')) { + name = name.substr(0, name.lastIndexOf('[')); + if (!a[name]) + a[name] = []; + a[name].push(c); + } + + return a; + }, {}); + }, + factory() { + const factory = Object.create(Object.getPrototypeOf(this.$fhcApi.factory), Object.getOwnPropertyDescriptors(this.$fhcApi.factory)); + factory.$fhcApi = { + get: this.get, + post: this.post + }; + return factory; + } + }, + methods: { + get(...args) { + if (typeof args[0] == 'object' && args[0].clearValidation && args[0].setFeedback) + args[0] = this; + else + args.unshift(this); + + return this.$fhcApi.get(...args); + }, + post(...args) { + if (typeof args[0] == 'object' && args[0].clearValidation && args[0].setFeedback) + args[0] = this; + else + args.unshift(this); + + return this.$fhcApi.post(...args); + }, + _sendFeedbackToInput(inputs, feedback, valid) { + if (inputs.length) { + inputs.forEach(input => input.setFeedback(valid, feedback)); + return false; + } + if (this.$fhcAlert) { + this.$fhcAlert[valid ? 'alertSuccess' : 'alertError'](feedback); + return false; + } + return true; + }, + setFeedback(valid, feedback) { + if (Array.isArray(feedback)) { + let remaining = feedback.filter(fb => + this._sendFeedbackToInput( + this.sortedInputs['_default'] || [], + fb, + valid + ) + ); + return remaining.length ? remaining : null; + } + if (typeof feedback === 'object') { + let remaining = Object.entries(feedback).filter(([name, fb]) => + this._sendFeedbackToInput( + this.sortedInputs[name.split('.')[0] + name.split('.').slice(1).map(p => `[${p}]`).join("")] || this.sortedInputs['_default'] || [], + fb, + valid + ) + ); + return remaining.length ? Object.fromEntries(remaining) : null; + } + + let remaining = this._sendFeedbackToInput( + this.sortedInputs['_default'] || [], + feedback, + valid + ); + return remaining ? feedback : null; + }, + clearValidation() { + this.inputs.forEach(input => input.clearValidation()); + }, + clearValidationForName(name) { + (this.sortedInputs[name.split('.')[0] + name.split('.').slice(1).map(p => `[${p}]`).join("")] || this.sortedInputs['_default'] || []) + .forEach(input => input.clearValidation()); + } + }, + template: ` + + + ` +} \ No newline at end of file diff --git a/public/js/components/Form/Input.js b/public/js/components/Form/Input.js new file mode 100644 index 000000000..11ad357a5 --- /dev/null +++ b/public/js/components/Form/Input.js @@ -0,0 +1,315 @@ +import FhcFragment from "../Fragment.js"; + +let _uuid = {}; + +export default { + inheritAttrs: false, + components: { + FhcFragment + }, + inject: { + registerToForm: { + from: '$registerToForm', + default: null + }, + clearValidationForName: { + from: '$clearValidationForName', + default: null + } + }, + props: { + bsFeedback: Boolean, + noAutoClass: Boolean, + noFeedback: Boolean, + inputGroup: Boolean, + type: String, + name: String, + containerClass: [String, Array, Object] + }, + data() { + return { + valid: undefined, + feedback: [], + modelValueDummy: undefined + } + }, + computed: { + hasContainer() { + if (!this.bsFeedback) + return true; + if (this.containerClass) + return true; + for (const prop in this.autoContainerClass) + if (Object.hasOwn(this.autoContainerClass, prop)) + return true; + return false; + }, + acc() { + if (!this.containerClass) + return {}; + if (typeof this.containerClass === 'string' || this.containerClass instanceof String) + return this.containerClass.split(' ').reduce((a,c) => {a[c] = true; return a}, {}); + if (Array.isArray(this.containerClass)) + return this.containerClass.reduce((a,c) => {a[c] = true; return a}, {}); + return this.containerClass; + }, + autoContainerClass() { + if (this.noAutoClass) + return this.acc; + + const acc = {...this.acc}; + + if (this.inputGroup) + acc['input-group-item'] = true; + + if (this.lcType == 'radio' || this.lcType == 'checkbox') + acc['form-check'] = true; + + if (this.inputGroup && acc['form-check']) { + acc['input-group-item'] = false; + acc['form-check'] = false; + acc['input-group-text'] = true; + } + return acc; + }, + lcType() { + if (!this.type) + return 'text'; + return this.type.toLowerCase(); + }, + tag() { + switch (this.lcType) { + case 'textarea': + case 'select': + return this.lcType; + case 'datepicker': + return 'VueDatePicker'; + case 'autocomplete': + return 'PvAutocomplete'; + case 'uploadimage': + return 'UploadImage'; + case 'uploadfile': + case 'uploaddms': + return 'UploadDms'; + default: + return 'input'; + } + }, + validationClass() { + const classes = []; + if (this.valid) + classes.push('is-valid'); + else if (this.valid === false) + classes.push('is-invalid'); + + if (!this.noAutoClass) { + let c = this.$attrs.class ? this.$attrs.class.split(' ') : []; + switch (this.lcType) { + // TODO(chris): complete list! + case 'select': + if (!c.includes('form-select')) + classes.push('form-select'); + break; + case 'range': + if (!c.includes('form-range')) + classes.push('form-range'); + break; + case 'radio': + case 'checkbox': + // TODO(chris): maybe different handling? + if (!c.includes('form-check-input') && !c.includes('btn-check')) + classes.push('form-check-input'); + break; + case 'color': + if (!c.includes('form-control-color')) + classes.push('form-control-color'); + if (!c.includes('form-control')) + classes.push('form-control'); + break; + case 'autocomplete': + case 'datepicker': + classes.push('p-0'); + classes.push('border-0'); + if (!c.includes('form-control')) + classes.push('form-control'); + break; + case 'text': + case 'number': + case 'password': + case 'textarea': + if (!c.includes('form-control')) + classes.push('form-control'); + break; + } + } + + return classes; + }, + feedbackClass() { + if (!this.feedback || this.feedback === true) + return ''; + if (!this.bsFeedback) + return { + 'valid-tooltip': this.valid === true, + 'invalid-tooltip': this.valid === false + }; + return { + 'valid-feedback': this.valid === true, + 'invalid-feedback': this.valid === false + }; + }, + modelValueCmp: { + get() { + if (this.$attrs.modelValue === undefined) + return this.modelValueDummy; + return this.$attrs.modelValue; + }, + set(v) { + if (this.$attrs.modelValue === undefined) + this.modelValueDummy = v; + this.$emit('update:modelValue', v); + } + }, + idCmp() { + let uuid = this.$attrs.id; + if (this.lcType == 'datepicker') + uuid = this.$attrs.uid; + if (!uuid && this.$attrs.label) + uuid = 'fhc-form-input'; + if (!uuid) + return undefined; + if (this.lcType == 'datepicker') + uuid = 'dp-input-' + uuid; + if (_uuid[uuid] === undefined) + _uuid[uuid] = 0; + return uuid + '-' + (_uuid[uuid]++); + } + }, + methods: { + clearValidation() { + this.valid = undefined; + this.feedback = []; + }, + clearValidationForThisName() { + if (this.valid === undefined) + return; + if (this.clearValidationForName && this.name) + this.clearValidationForName(this.name); + else + this.clearValidation(); + }, + setFeedback(valid, feedback) { + if (!feedback) + feedback = []; + if (!Array.isArray(feedback)) + feedback = [feedback]; + this.valid = valid; + // NOTE(chris): On a list of radios/checkboxes only add the feedback message to the last item + if (this.name && (this.lcType == 'radio' || this.lcType == 'checkbox')) { + const selector = 'input[type="' + this.lcType + '"][name="' + this.name + '"]'; + if ([...this.$el.parentNode.querySelectorAll(selector)].pop() != this.$refs.input) + return; + } + this.feedback = feedback; + }, + _loadComponents() { + if (this.tag == 'VueDatePicker' && !this._.components.VueDatePicker) { + this._.components.VueDatePicker = Vue.defineAsyncComponent(() => import("../vueDatepicker.js.php")); + } else if (this.tag == 'PvAutocomplete' && !this._.components.PvAutocomplete) { + this._.components.PvAutocomplete = Vue.defineAsyncComponent(() => import(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + "/public/js/components/primevue/autocomplete/autocomplete.esm.min.js")); + } else if (this.tag == 'UploadImage' && !this._.components.UploadImage) { + this._.components.UploadImage = Vue.defineAsyncComponent(() => import("./Upload/Image.js")); + } else if (this.tag == 'UploadDms' && !this._.components.UploadDms) { + this._.components.UploadDms = Vue.defineAsyncComponent(() => import("./Upload/Dms.js")); + } + } + }, + beforeMount() { + this._loadComponents(); + }, + beforeUpdate() { + this._loadComponents(); + }, + mounted() { + if (this.registerToForm) + this.registerToForm(this); + }, + template: ` + + + + + + {if(v) a.push(k);return a}, []), ...($attrs['input-class-name'] ? $attrs['input-class-name'].split(' ') : [])].join(' ')" + @update:model-value="clearValidationForThisName" + > + + + + + + + + + + + + +

+ +
+ + ` +} \ No newline at end of file diff --git a/public/js/components/Form/Upload/Dms.js b/public/js/components/Form/Upload/Dms.js new file mode 100644 index 000000000..fe58fa74b --- /dev/null +++ b/public/js/components/Form/Upload/Dms.js @@ -0,0 +1,87 @@ +export default { + emits: [ + 'update:modelValue' + ], + props: { + modelValue: { + type: [ FileList, Array ], + required: true + }, + multiple: Boolean, + id: String, + name: String, + inputClass: [String, Array, Object], + noList: Boolean + }, + methods: { + stringifyFile(file) { + return JSON.stringify({ + lastModified: file.lastModified, + lastModifiedDate: file.lastModifiedDate, + name: file.name, + size: file.size, + type: file.type + }); + }, + addFiles(event) { + if (!this.multiple) + return this.$emit('update:modelValue', event.target.files); + + const dt = new DataTransfer(); + const doubles = []; + for (var file of this.modelValue) { + dt.items.add(file); + doubles.push(this.stringifyFile(file)); + } + for (var file of event.target.files) { + // NOTE(chris): deep check (with FileReader) would require an async function so we only check the basic attributes + if (doubles.indexOf(this.stringifyFile(file)) < 0) + dt.items.add(file); + } + this.$emit('update:modelValue', dt.files); + }, + removeFile(id) { + const fileToRemove = Array.from(this.modelValue)[id]; + + const dt = new DataTransfer(); + for (var file of this.modelValue) { + if (file !== fileToRemove) + dt.items.add(file); + } + this.$emit('update:modelValue', dt.files); + } + }, + watch: { + modelValue(n) { + if (n instanceof FileList) + return this.$refs.upload.files = n; + + const dt = new DataTransfer(); + const dms = []; + for (var file of n) { + if (file instanceof File) { + dt.items.add(file); + } else { + const dmsFile = new File([JSON.stringify(file)], file.name, { + type: 'application/x.fhc-dms+json' + }); + dt.items.add(dmsFile); + } + } + this.$emit('update:modelValue', dt.files); + } + }, + template: ` +
+ +
    +
  • + + {{ file.name }} + +
  • +
+
` +} \ No newline at end of file diff --git a/public/js/components/Form/Upload/Image.js b/public/js/components/Form/Upload/Image.js new file mode 100644 index 000000000..b0b8d5b78 --- /dev/null +++ b/public/js/components/Form/Upload/Image.js @@ -0,0 +1,62 @@ +export default { + emits: [ + 'update:modelValue' + ], + props: { + modelValue: String + }, + computed: { + valueAsBase64DataString() { + if (!this.modelValue || this.modelValue.substring(0, 10) == 'data:image') + return this.modelValue; + return 'data:image/jpeg;charset=utf-8;base64,' + this.modelValue; + } + }, + methods: { + openUploadDialog() { + this.$refs.fileInput.click(); + }, + pickFile() { + let file = this.$refs.fileInput.files; + if (file && file[0]) { + let reader = new FileReader(); + reader.onload = e => { + this.$emit('update:modelValue', e.target.result); + } + reader.readAsDataURL(file[0]); + } + }, + deleteImage() { + this.$emit('update:modelValue', ''); + } + }, + template: ` +
+ + + +
` +} \ No newline at end of file diff --git a/public/js/components/Form/Validation.js b/public/js/components/Form/Validation.js new file mode 100644 index 000000000..fd6dabe16 --- /dev/null +++ b/public/js/components/Form/Validation.js @@ -0,0 +1,41 @@ +export default { + inject: [ + '$registerToForm' + ], + data() { + return { + feedback: { + success: [], + danger: [] + } + }; + }, + methods: { + clearValidation() { + this.feedback = { + success: [], + danger: [] + }; + }, + setFeedback(valid, feedback) { + if (!feedback) + feedback = []; + if (!Array.isArray(feedback)) + feedback = [feedback]; + const ts = Date.now(); + this.feedback[valid ? 'success' : 'danger'] = feedback.map(msg => [msg, ts]); + } + }, + mounted() { + if (this.$registerToForm) + this.$registerToForm(this); + }, + template: ` + + ` +}; \ No newline at end of file diff --git a/public/js/components/Fragment.js b/public/js/components/Fragment.js new file mode 100644 index 000000000..4d4af87c7 --- /dev/null +++ b/public/js/components/Fragment.js @@ -0,0 +1,5 @@ +export default { + render() { + return (this.$slots && this.$slots.default) ? this.$slots.default() : null; + } +}; \ No newline at end of file diff --git a/public/js/components/Tabs.js b/public/js/components/Tabs.js index 84104b812..36b6406c5 100644 --- a/public/js/components/Tabs.js +++ b/public/js/components/Tabs.js @@ -6,12 +6,19 @@ export default { accessibility }, emits: [ - 'update:modelValue' + 'update:modelValue', + 'change', + 'changed' ], props: { - configUrl: String, + config: { + type: [String, Object], + required: true + }, default: String, - modelValue: [String, Number, Boolean, Array, Object, Date, Function, Symbol] + modelValue: [String, Number, Boolean, Array, Object, Date, Function, Symbol], + vertical: Boolean, + border: Boolean }, data() { return { @@ -35,51 +42,85 @@ export default { } } }, - created() { - CoreRESTClient - .get(this.configUrl) - .then(result => CoreRESTClient.getData(result.data)) - .then(result => { - const tabs = {}; - // TODO(chris): check if result is array - Object.entries(result).forEach(([key, config]) => { - if (!config.component) + watch: { + config(n) { + this.initConfig(n); + } + }, + methods: { + change(key) { + this.$emit("change", key) + this.current = key; + this.$nextTick(() => this.$emit("changed", key)); + }, + initConfig(config) { + if (!config) + return; + if (typeof config === 'string' || config instanceof String) + return CoreRESTClient.get(config) + .then(result => CoreRESTClient.getData(result.data)) + .then(this.initConfig) + .catch(this.$fhcAlert.handleSystemError); + + const tabs = {}; + + if (Array.isArray(config)) { + config.forEach((item, key) => { + if (!item.component) return console.error('Component missing for ' + key); tabs[key] = { - component: Vue.markRaw(Vue.defineAsyncComponent(() => import(config.component))), - title: config.title || key, - config: config.config, + component: Vue.markRaw(Vue.defineAsyncComponent(() => import(item.component))), + title: item.title || key, + config: item.config, key } }); + } else { + Object.entries(config).forEach(([key, item]) => { + if (!item.component) + return console.error('Component missing for ' + key); + + tabs[key] = { + component: Vue.markRaw(Vue.defineAsyncComponent(() => import(item.component))), + title: item.title || key, + config: item.config, + key + } + }); + } + + if (this.current === null || !tabs[this.current]) { if (tabs[this.default]) this.current = this.default; else this.current = Object.keys(tabs)[0]; - this.tabs = tabs; - }) - .catch(this.$fhcAlert.handleSystemError); + } + this.tabs = tabs; + } + }, + created() { + this.initConfig(this.config); }, template: ` -
-