JobTarget UI Theme
Version:
File Version:
How to use
What is jt-ui-theme?
jt-ui-theme is meant to replace Metronic and create a lighter layer of theming for our JobTarget projects.
The goal of this project is to allow for drop-in theming across all JobTarget apps (you should be able to simply add the stylesheet and follow the markup structure and your app will reflect the JobTarget brand).
jt-ui-theme relies heavily on Bootstrap 4. When in doubt, refer to the Bootstrap 4 Documentation for HTML snippets.
You can view the designs in Figma here https://www.figma.com/files/1024312224877226276/team/1024308968604884822/JobTarget-Design-Team?fuid=1042493409103375107
Pulling HTML snippets
You can View the Source Markup by hovering over the section and clicking this button:
jt-ui-theme is JavaScript agnostic. It expects you to use Markup and CSS from Bootstrap 4, but you can use any flavor of Bootstrap 4 JavaScript that you need...
For the most part, you will just use standard Bootstrap Markup and the library should work.
When using inside of a Client-side rendering framework, you can hookup plugins once they have mounted on the DOM.
Examples of Bootstrap JavaScript flavors include the following:
- jQuery
- React
- VueJS
- Vanilla JavaScript
Versioning
You may notice that the version is but the files reference . This is because we use SemVer to version our theme. Path/Bugfix pushes will be available without updating the reference to the CSS and JS.
When a Minor or Major version is pushed out, developers should migrate to the latest version within 4 weeks.
Usage With React/Vue
Using these vanilla and jQuery components/plugins with React and Vue is quite easy. The best way to implement them is hook into the component lifecycle methods
// React
componentDidMount(){
// instantiate jQuery or vanilla plugin
}
componentWillUnmount(){
// destroy the instance
}
componentDidUpdate(){
// refresh the instance if you need to
}
// Vue
mounted(){
// instantiate jQuery or vanilla plugin
}
beforeUnmount(){
// destroy the instance
}
updated(){
// refresh the instance if you need to
}
Using the Navbar and Footer
The Shared Navbar and Footer are written as Web Components, compiled by StencilJS.
https://developer.mozilla.org/en-US/docs/Web/Web_Components
In order to use these components, you must add them to the DOM as shown in the Starter Template
The x-x in the src attribute should be replaced with the Major and Minor version found on the UI Kit Repository in the master branch inside of the package.json file.
Job Target Custom Components
By including the Job Target theme JavaScript, custom UI component JavaScript will be accessible via the JTComponents object attached to the window
window.JTComponents; // Object containing component class definitions
You can check the exact version of the script by accessing the version property on window.JTComponents
The current list of JobTarget components includes
Live Demos
Theme Scripts and Styles
Theme CSS
-
Prod:
https://uithemeplatform.jobtarget.com/jt.ui.theme.v1.0.bundle.min.css
-
UAT:
https://uat-uithemeplatform.jobtarget.com/jt.ui.theme.v1.0.bundle.min.css
-
QA:
https://qa-uithemeplatform.jobtarget.com/jt.ui.theme.v1.0.bundle.min.css
Theme JS
-
Prod:
https://uithemeplatform.jobtarget.com/jt.ui.theme.v1.0.bundle.min.js
-
UAT:
https://uat-uithemeplatform.jobtarget.com/jt.ui.theme.v1.0.bundle.min.js
-
QA:
https://qa-uithemeplatform.jobtarget.com/jt.ui.theme.v1.0.bundle.min.js
Navbar JS
-
Prod:
https://uikitplatform.jobtarget.com/js/jt-ui-kit-v-1-1/jt-ui-kit-v-1-1.js
-
UAT:
https://uat-uikitplatform.jobtarget.com/js/jt-ui-kit-v-1-1/jt-ui-kit-v-1-1.js
-
QA:
https://qa-uikitplatform.jobtarget.com/js/jt-ui-kit-v-1-1/jt-ui-kit-v-1-1.js
Template Changelog
- Oct 5, 2021 - updated #jt-app HTML to remove mt-4 mb-4 classes and add my-1 class.
- Oct 7, 2021 - updated #jt-app-header HTML to add align-items-center class to the first col-sm-6 columns.
- Oct 7, 2021 - Swapped out multiple font-awesome link tags for one that pulls in all of font-awesome pro. This should remedy any issues where icons are not rendering.
- Nov 11, 2021 - Adds class px-2 to "More" button in #jt-app-header to make button square.
Starter Template
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>Metronic Navbar Test</title> <meta name="description" content="JT Navbar Test" /> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /> <!-- Google Tag Manager --> <script> (function (w, d, s, l, i) { w[l] = w[l] || []; w[l].push({ "gtm.start": new Date().getTime(), event: "gtm.js", }); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != "dataLayer" ? "&l=" + l : ""; j.async = true; j.src = "https://www.googletagmanager.com/gtm.js?id=" + i + dl; f.parentNode.insertBefore(j, f); })(window, document, "script", "dataLayer", "GTM-P2L7PHQ"); </script> <!-- End Google Tag Manager --> <!--fonts and icons --> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Poppins:300,400,500,600,700" /> <link rel="stylesheet" href="https://pro.fontawesome.com/releases/v5.15.4/css/all.css" integrity="sha384-rqn26AG5Pj86AF4SO72RK5fyefcQ/x32DNQfChxWvbXIyXFePlEktwD18fEz+kQU" crossorigin="anonymous"> <link rel="stylesheet" href="https://ui-theme.jobtarget.com/jt.ui.theme.vx.x.bundle.min.css"> <!-- Any custom stylesheets you need --> </head> <body> <!-- Google Tag Manager (noscript) --> <noscript> <iframe src="https://www.googletagmanager.com/ns.html?id=GTM-P2L7PHQ" height="0" width="0" style="display: none; visibility: hidden" ></iframe> </noscript> <!-- End Google Tag Manager (noscript) --> <jt-navbar divisionflag="1"></jt-navbar> <!-- BEGIN: NEEDED HTML --> <div class="container my-1" id="jt-app"> <div class="row"> <div class="col-12"> <!-- BEGIN: CARD ---> <div class="card border-0 w-100" id="jt-app-card"> <!-- BEGIN: CARD HEADING --> <div id="jt-app-header" class="card-header bg-transparent"> <div class="row"> <div class="col-sm-6 d-flex align-items-center"> <!-- BEGIN: YOUR APP TITLE --> <div class="app__logo mr-3"> <!-- App Logo --> <i class="fal fa-eye"></i> </div> <!-- App Title --> <h2 class="mb-sm-0 h5">My JobTarget App</h2> <!-- END: YOUR APP TITLE --> </div> <div class="col-sm-6 d-flex justify-content-sm-end align-items-center"> <!-- BEGIN: YOUR HEADING CTAs --> <div class="float-right"> <button class="btn btn-primary">Primary</button> <div class="dropdown d-inline"> <button class="ml-2 px-2 btn btn-sm btn-light-primary text-primary" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" > <span class="sr-only">More</span> <i aria-hidden="true" class="fal fa-ellipsis-v text-15" ></i> </button> <div class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdownMenuButton" > <a class="dropdown-item" href="#">Action</a> <a class="dropdown-item" href="#">Another action</a> <a class="dropdown-item" href="#" >Something else here</a > </div> </div> </div> <!-- END: YOUR HEADING CTAs --> </div> </div> </div> <!-- END: CARD HEADING --> <!-- BEGIN: CARD BODY --> <div class="card-body" id="jt-app-body"> <!-- BEGIN: YOUR CONTENT --> <div class="row"> <div class="col-sm-6 border pb-3">Here is some cool stuff</div> <div class="col-sm-6 border pb-3">Here is some cool stuff</div> <div class="col-sm-7 border pb-3">Here is some cool stuff</div> <div class="col-sm-5 border pb-3">Here is some cool stuff</div> <div class="col-sm-3 border pb-3">Here is some cool stuff</div> <div class="col-sm-3 border pb-3">Here is some cool stuff</div> <div class="col-sm-4 border pb-3">Here is some cool stuff</div> <div class="col-sm-5 border pb-3">Here is some cool stuff</div> </div> <!-- END: Your Content --> </div> <!-- END: CARD BODY --> </div> <!-- END: CARD--> </div> </div> </div> <!-- END: NEEDED HTML --> <jt-footer></jt-footer> <!-- These scripts are needed for the Navbar (If you are using the jQuery version of Bootstrap then you're all set to go)--> <script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-Piv4xVNRyMGpqkS2by6br4gNJ7DXjqk09RmUpJ8jgGtD7zP9yug3goQfGII0yAns" crossorigin="anonymous" ></script> <!-- JT Components and custom JS for Bootstrap --> <script src="https://ui-theme.jobtarget.com/jt.ui.theme.vx.x.bundle.min.js"></script> <!-- StencilJS components for the header and footer --> <script src="https://ui-kit.jobtarget.com/js/jt-ui-kit/jt-ui-kit-v-x-x.js"></script> <!--Your custom scripts--> </body> </html>
Tokens
Bootstrap v4 has a large number of SASS variables which can be found at the following link:
https://raw.githubusercontent.com/twbs/bootstrap/v4-dev/scss/_variables.scss
These variables are overwritten by the JobTarget theme.
Colors
Bootstrap class names can be found here https://getbootstrap.com/docs/4.6/utilities/colors/
Theme
Theme colors have built-in utility CSS classes you can use throughout your HTML.
Example | Name | SASS Var | Hex | RGBA | Disabled | Focus/Active/Hover | CSS Classes |
---|---|---|---|---|---|---|---|
Primary | $primary | #2f86dd | rgba(47, 134, 221, 1) | rgba(47, 134, 221, 0.65) |
#1e6dbb
rgba(30, 109, 187, 1) |
*-primary |
|
Success | $success | #1bc5bd | rgba(27, 197, 189, 1) | rgba(27, 197, 189, 0.65) |
#16a39d
rgba(22, 163, 157, 1) |
*-success |
|
Info | $info | #8950FC | rgba(137, 80, 252, 1) | rgba(137, 80, 252, 0.65) |
#671efb
rgba(103, 30, 251, 1) |
*-info |
|
Warning | $warning | #ffa800 | rgba(255, 168, 0, 1) | rgba(255, 168, 0, 0.65) |
#d98f00
rgba(217, 143, 0, 1) |
*-warning |
|
Danger | $danger | #f64e60 | rgba(246, 78, 96, 1) | rgba(246, 78, 96, 0.65) |
#f42a3f
rgba(244, 42, 63, 1) |
*-danger |
|
Light | $light | #f8f9fa | rgba(248, 249, 250, 1) | n/a | n/a |
*-light |
|
Dark | $dark | #181c32 | rgba(24, 28, 50, 1) | n/a | n/a |
*-dark |
|
Light Success | $light-success | #c9f7f5 | rgba(201, 247, 245, 1) | n/a | n/a |
*-light-success |
|
Light Danger | $light-danger | #ffe2e5 | rgba(255, 226, 229, 1) | n/a | n/a |
*-light-danger |
|
Light Warning | $light-warning | #fff4de | rgba(255, 244, 222, 1) | n/a | n/a |
*-light-warning |
|
Light Info | $light-info | #eee5ff | rgba(238, 229, 255, 1) | n/a | n/a |
*-light-info |
|
Dark Fill | $dark-fill | #d1d3e0 | rgba(209, 211, 224, 1) | n/a | n/a |
*-dark-fill |
|
Light Fill | $light-fill | #f3f6f9 | rgba(243, 246, 249, 1) | n/a | n/a |
*-light-fill |
|
Dark Success | $dark-success | #0e6662 | n/a | n/a | n/a |
*-dark-success |
|
Dark Primary | $dark-primary | #184673 | n/a | n/a | n/a |
*-dark-primary |
|
Dark Warning | $dark-warning | #855700 | n/a | n/a | n/a |
*-dark-warning |
|
Dark Info | $dark-info | #5c3d9d | n/a | n/a | n/a |
*-dark-info |
|
Dark Danger | $dark-danger | #802932 | n/a | n/a | n/a |
*-dark-danger |
|
Blue 90 | $blue-90 | #4392E0 | rgba(67, 146, 224, 1) | n/a | n/a |
*-blue-90 |
|
Blue 80 | $blue-80 | #599EE4 | rgba(89, 158, 228, 1) | n/a | n/a |
*-blue-80 |
|
Blue 70 | $blue-70 | #6DAAE7 | rgba(109, 170, 231, 1) | n/a | n/a |
*-blue-70 |
|
Blue 60 | $blue-60 | #8CB6EB | rgba(140, 182, 235, 1) | n/a | n/a |
*-blue-60 |
|
Blue 50 | $blue-50 | #97C2EE | rgba(151, 194, 238, 1) | n/a | n/a |
*-blue-50 |
|
Blue 40 | $blue-40 | #ACCFF1 | rgba(172, 207, 241, 1) | n/a | n/a |
*-blue-40 |
|
Blue 30 | $blue-30 | #C0DAF5 | rgba(192, 218, 245, 1) | n/a | n/a |
*-blue-30 |
|
Blue 20 | $blue-20 | #D5E7F8 | rgba(213, 231, 248, 1) | n/a | n/a |
*-blue-20 |
|
Blue 10 | $blue-10 | #EAF3FC | rgba(234, 243, 252, 1) | n/a | n/a |
*-blue-10 |
Utility/Content
Example | Name | SASS var | Hex | RGBA | Description |
---|---|---|---|---|---|
Body Background | $body-bg | #f2f3f7 | rgba(242, 243, 247, 1) | The background color of the body element | |
Body Text Color | $body-color | #3F4254 | rgba(63, 66, 84, 1) | The base font color for text | |
Text Muted | $text-muted | #b5b5c3 | rgba(181, 181, 195, 1) | Font color for .text-muted CSS class as well as input field help text. | |
Border Color | $border-color | #e4e6ef | rgba(228, 230, 239, 1) | Default border color for Bootstrap components | |
Card Lines | $card-border-color | #ebedf3 | rgba(235, 237, 243, 1) | Border color for Bootstrap Cards |
Grays
Example | Name | SASS var | Hex | RGBA | Description |
---|---|---|---|---|---|
Gray-100 | $gray-100 | #f8f9fa | rgba(248, 249, 250, 1) |
*-gray-100 |
|
Gray-200 | $gray-200 | #e9ecef | rgba(233, 236, 239, 1) |
*-gray-200 |
|
Gray-300 | $gray-300 | #dee2e6 | rgba(222, 226, 230, 1) |
*-gray-300 |
|
Gray-400 | $gray-400 | #ced4da | rgba(206, 212, 218, 1) |
*-gray-400 |
|
Gray-500 | $gray-500 | #adb5bd | rgba(173, 181, 189, 1) |
*-gray-500 |
|
Gray-600 | $gray-600 | #6c757d | rgba(108, 117, 125, 1) |
*-gray-600 |
|
Gray-700 | $gray-700 | #495057 | rgba(73, 80, 87, 1) |
*-gray-700 |
|
Gray-800 | $gray-800 | #343a40 | rgba(52, 58, 64, 1) |
*-gray-800 |
|
Gray-900 | $gray-900 | #212529 | rgba(33, 37, 41, 1) |
*-gray-900 |
Icons
.text-primary
.text-success
.text-info
.text-warning
.text-danger
Custom Utilities
These are custom utility classes that are added in addition to Bootstrap 4's utility classes
Sizing Utilities
Used as {prefix}-{breakpoint}-{value}
Type | Class prefix | Breakpoints | Value | Usage |
---|---|---|---|---|
Width Percentages | .wp |
|
0,5,10,15,20,25,30,33,35,40,45,50,55,60,65,66,70,75,80,85,90,95,100 % | Setting widths by percentages relative to containing element |
Width by viewport | .vw |
|
|
Setting width by vw unit |
Height by viewport | .vh |
|
|
Setting height by vh units |
Position Utilities
Used as {position}-{value}
Position | Prefix | Values |
---|---|---|
Top | t | 1,2,3,4,5,6 rem |
Right | r | 1,2,3,4,5,6 rem |
Bottom | b | 1,2,3,4,5,6 rem |
Left | l | 1,2,3,4,5,6 rem |
Top by Percent | tp | 0,5,10,15,20,25,30,33,35,40,45,50,55,60,65,66,70,75,80,85,90,95,100 % |
Right by Percent | rp | 0,5,10,15,20,25,30,33,35,40,45,50,55,60,65,66,70,75,80,85,90,95,100 % |
Bottom by Percent | bp | 0,5,10,15,20,25,30,33,35,40,45,50,55,60,65,66,70,75,80,85,90,95,100 % |
Left by Percent | lp | 0,5,10,15,20,25,30,33,35,40,45,50,55,60,65,66,70,75,80,85,90,95,100 % |
Text Utilities
Used as text-{breakpoint}-{value}
Font Size | Breakpoint Prefix | Values |
---|---|---|
text | xs, sm, md, lg, xl | 0: 0rem, 25: 0.25rem, 5: 0.5rem, 75: 0.75rem, 100: 1rem, 125: 1.25rem, 150: 1.5rem, 175: 1.75rem, 200: 2rem, 225: 2.25rem, 250: 2.5rem, 275: 2.75rem, 300: 3rem, 325: 3.25rem, 350: 3.5rem, 375: 3.75rem, 400: 4rem, 425: 4.25rem, 450: 4.5rem, 475: 4.75rem, 500: 5rem, 525: 5.25rem, 550: 5.5rem, 575: 5.75rem, 600: 6rem, |
Color Utilities
Class | Description |
---|---|
.hover-primary | Changes the background color to the primary color on hover |
Themeable Aspects
Theme Aspect | Themeable |
---|---|
BG Colors | Yes |
Text Colors | Yes |
Base Font Sizes | Yes |
Font | Yes |
Heading Sizes | Contingent upon base font size |
Border Radius | Yes |
Border Widths | Yes |
Container Max Width | Yes |
Buttons | Yes |
Dropdown Padding | Yes |
Popovers | Yes |
Tooltips | Yes |
Theme Aspect | Themeable |
---|---|
Hover/Active Colors | No |
Icons | No |
# of Columns | No |
Modal sizes | No |
Dropdown Width | No |
Pagination | No |
Navbar | No |
Footer | No |
Spinners | No |
Progress Bars | No |
Alerts | No |
Tabs | No |
Breadcrumbs | No |
Badges | No |
Label | No |
Toasts | No |
Blockquotes | No |
Forms
Basic Inputs
JTClearInput
Markup
Please follow the markup in the example. You can alter ids, text, field names, as needed.
The necessary markup needed for the JavaScript to function are as follows:
data-jt-ref="JTClearInput" // place this on the button
data-jt-target="query selector string" // target the input to clear
input placeholder=" "
// you need the placeholder value as string
// or an empty space to allow the clear button
// to show and hide
Events
The JTClearInput component emits the following events:
- clear:jt:clearinput : emitted when the input field value is cleared.
Input with spinner
Hide the spinner with the class d-none
Phone Numbers
This uses the the plugin intl-tel-input
Usage
The plugin this component relies on is quite large. Instead of loading the JavaScript by default (therefore increasing the load on the client), you dynamically load the Phone component. The JTPhone.create method create returns a new instance of the component. Please pass it a query selector string
Please review the underlying script below.
Browse/File Upload
Select
All <select> elements must be enhanced with Boostrap-Select.
For Bootstrap 4, you must use version 1.13.4
The jQuery Bootstrap-Select plugin is here: bootstrap-select
Use the window.JTComponents.JTSelectBox.create method to create your instance
window.JTComponents.JTSelectBox.create(queryselector);
// To create an instance that you can refresh and reference
const myInstance = window.JTComponents.JTSelectBox.create(queryselector);
myInstance.refresh();
// reference the underlying jQuery object
// to get access to the plugin methods
myInstance.bootstrap_select_instance
// The default options used are the following:
{
liveSearch: true,
style: '',
styleBase: 'form-control',
dropupAuto: false,
static: true,
size: 6
}
// You can override any options or insert additional with a second parameter to "create"
window.JTComponents.JTSelectBox.create(queryselector, optionsObject);
Single Select
Multi Select
Markup
Bootstrap-select wraps the select box in additional HTML
Please format all select boxes as such:
link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-select@1.13.4/dist/css/bootstrap-select.min.css"
script src="https://cdn.jsdelivr.net/npm/bootstrap-select@1.13.4/dist/js/bootstrap-select.min.js
<div class="form-group">
<label for="selectID">Your label</label>
<select
class="form-control selectpicker"
id="selectID"
data-size="6"
>
<option>Select</option>
<option value="1">Your options</option>
</select>
</div>
NOTE: you can add optgroup elements as needed.
If you are dynamically creating options for the select element, please call the following method on the select box, where query is a CSS selector for the select box element.
$(query).selectpicker('refresh');
Typeahead
Note: The Typeahead HTML must follow this specific structure to apply Bootstrap styling correctly.
We are using this plugin http://www.runningcoder.org/jquerytypeahead/
JT Password Field
Example
Instantiation
new window.JTComponents.JTPasswordField(root : {HTMLElement | DOMString})
- root - The containing div of the password field
Markup
Please follow the markup in the example. You can alter ids, text, field names, as needed.
The necessary markup needed for the JavaScript to function are as follows:
data-jt-component="JTPasswordField" // specifies that the DOM node is the root element of the JTPasswordField Component
data-jt-ref="JTPasswordField.input" // maps to the $input property of the JTPasswordField object, which is a reference to the input node
data-jt-ref="JTPasswordField.toggle" // maps to the $toggle property of the JTPasswordField object, which is a reference to the button node
data-jt-ref="JTPasswordField.icon" // maps to the $icon property of the JTPasswordField object, which is a reference to the icon node
Methods
- toggleInputType():void
Events
The JTPasswordField component emits the following events:
- mask:jt:passwordfield : emitted when the password is hidden/the input type is changed to "password"
- unmask:jt:passwordfield : emitted when the password is shown/the input type is changed to "text"
DateRangePicker
Input Group
Radio Buttons
IMPORTANT!
The empty SPAN inside the RADIO and CHECKBOX LABEL should remain EMPTY. This is for custom styles.
The text should go either BEFORE OR AFTER that SPAN. Any additional SPANs or markup added to the LABEL should be placed AFTER that initial SPAN.
DIV > LABEL > INPUT > SPAN + Your custom markup and text
<div class="form-check">
<label class="form-check-label" for="matchWithLabel">
<input type="radio" class="form-check-input" name="optionsRadios" id="matchWithLabel" value="option1" checked="" />
<span></span>
Keep ^ this empty. Put your custom markup here
<span>I'm custom markup</span>
</label>
</div>
Checkboxes
IMPORTANT!
The empty SPAN inside the RADIO and CHECKBOX LABEL should remain EMPTY. This is for custom styles.
The text should go either BEFORE OR AFTER that SPAN. Any additional SPANs or markup added to the LABEL should be placed AFTER that initial SPAN.
DIV > LABEL > INPUT > SPAN + Your custom markup and text
<div class="form-check">
<label class="form-check-label" for="matchWithLabel">
<input type="radio" class="form-check-input" name="optionsRadios" id="matchWithLabel" value="option1" checked="" />
<span></span>
Keep ^ this empty. Put your custom markup here
<span>I'm custom markup</span>
</label>
</div>
Inline Checkboxes
JT Radio Select
JobTarget Custom Componentspacing between components should be handled with Bootstrap Margin Utilites
IMPORTANT!
The empty SPAN inside the RADIO and CHECKBOX LABEL should remain EMPTY. This is for custom styles.
The text should go either BEFORE OR AFTER that SPAN. Any additional SPANs or markup added to the LABEL should be placed AFTER that initial SPAN.
DIV > LABEL > INPUT > SPAN + Your custom markup and text
<div class="form-check">
<label class="form-check-label" for="matchWithLabel">
<input type="radio" class="form-check-input" name="optionsRadios" id="matchWithLabel" value="option1" checked="" />
<span></span>
Keep ^ this empty. Put your custom markup here
<span>I'm custom markup</span>
</label>
</div>
Radio Button Example
Checkbox Example
Budget Card Example
Budget Checkbox Example
I've added the following utility classes to the label to create space:pt-5 pb-5
Instantiation
new window.JTComponents.JTRadioSelect(root : {HTMLElement | DOMString})
- root - The containing element of the radio select
Markup
data-jt-component="JTRadioSelect" // data attribute creates the component
Methods
- toggleClass():void --- checks if the input (radio or checkbox) is checked and provides the appropriate CSS class to the root DOM node.
Events
- active:jt:radioselect
- inactive:jt:radioselect
JT Radio Select Minimal Example
JobTarget Custom Componentspacing between components should be handled with Bootstrap Margin Utilites
Add the class JTRadioSelect--minimal to the root element
IMPORTANT!
The empty SPAN inside the RADIO and CHECKBOX LABEL should remain EMPTY. This is for custom styles.
The text should go either BEFORE OR AFTER that SPAN. Any additional SPANs or markup added to the LABEL should be placed AFTER that initial SPAN.
DIV > LABEL > INPUT > SPAN + Your custom markup and text
<div class="form-check">
<label class="form-check-label" for="matchWithLabel">
<input type="radio" class="form-check-input" name="optionsRadios" id="matchWithLabel" value="option1" checked="" />
<span></span>
Keep ^ this empty. Put your custom markup here
<span>I'm custom markup</span>
</label>
</div>
Radio Button Example
Checkbox Example
Budget Card Example
Instantiation
new window.JTComponents.JTRadioSelect(root : {HTMLElement | DOMString})
- root - The containing element of the radio select
Markup
data-jt-component="JTRadioSelect" // data attribute creates the component
Methods
- toggleClass():void --- checks if the input (radio or checkbox) is checked and provides the appropriate CSS class to the root DOM node.
Events
- active:jt:radioselect
- inactive:jt:radioselect
Responsive Forms
To align the Submit button there's a little hack that needs to be put in where we create an empty label with a non-breaking space. The label is then hidden from screenreaders for accessibility reasons with aria-hidden="true"
Buttons
Typography
Font weight utilities
- .font-weight-lighter
- .font-weight-light
- .font-weight-normal
- .font-weight-semi-bold
- .font-weight-bold
- .font-weight-bolder
Heading Utilities
Heading 1 .h1
Heading 2 .h2
Heading 3 .h3
Heading 4 .h4
Heading 5 .h5
Heading 6 .h6
Misc Utilities
The .lead class will make text stand out.
You can use the mark tag to highlight text.
This line of text is meant to be treated as deleted text.
This line of text is meant to be treated as no longer accurate.
This line of text is meant to be treated as an addition to the document.
This line of text will render as underlined
This line of text is meant to be treated as fine print.
This line rendered as bold text.
This line rendered as italicized text.
An abbreviation of the word attribute is attr.
Text Colors
.text-muted
.text-primary
.text-warning
.text-danger
.text-success
.text-info
.text-dark-primary
.text-dark-warning
.text-dark-danger
.text-dark-success
.text-dark-info
.text-light
.text-body
.text-subtitle
.text-white
.text-black-50
.text-white-50
.text-dark
.text-dark-75
.text-dark-50
.text-dark-25
Blockquotes
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.
Collapse
Regular Collapse
Highlighted Collapse
Collapse with Icon
Highlighted Collapse
Accordion
.show
class.
.show
class.
JT Custom Progress
Extra Small Steps
-
1step
-
2Another step
-
3Some Step
-
4Some Step
Small Steps
-
1step
-
2Another step
-
3Some Step
-
4Some Step
Medium Steps
-
1step
-
2Another step
-
3Some Step
-
4Some Step
Large Steps
-
1step
-
2Another step
-
3Some Step
-
4Some Step
Checkout Steps
Instantiation
new window.JTComponents.JTCustomProgress(root : {HTMLElement | DOMString})
- root - The containing div of the custom progress
Markup
The Custom Progress component relies on an underlying progress HTML element.
For accessibility the containing div uses an aria tag to semantically connect the hidden progress bar to a hidden description.
To shape the Steps use Bootstraps Border-radius utility classes found here https://getbootstrap.com/docs/4.6/utilities/borders/#border-radius
This component relies on the following data- attributes
data-jt-component="JTCustomProgress" // denotes the root DOM node of the component
data-jt-ref-array="JTCustomProgress.steps" // maps to a Nodelist of the steps called $steps
data-jt-ref="JtCustomProgress.progress"
Methods
- setProgressValue(number):void -- triggers rerender
- calcActiveSteps():number -- returns the step number that the progress bar is active through
- rerenderActiveSteps():void -- rerenders the steps determining whether or not they are active and applying the ".active" class
- renderCurrentStep():void -- renders the current step with the ".current" class
Events
- change:jt:customprogress - fired from window when a the custom progress is rerendered
JTOffcanvas
Offcanvas can be customized via the Utility classes for height and width and the additional Bootstrap utils here https://getbootstrap.com/docs/4.6/utilities/sizing/
Instantiation
new window.JTComponents.JTOffCanvas(panel : {HTMLElement | DOMString}, trigger?: {NodeList | DOMString})
- panel - the section of HTML that will open and close
- trigger - optional -- the triggers that will open and close the panel
Markup
This components requires the following classes for styling:
Element | Purpose | Markup |
---|---|---|
Panel | The section that will appear on and off the HTML page. |
The [direction] class can be:
Additional classes for height and width can be added to customize the size of the panel. Custom job target classes for sizing can be found Here Bootstrap classes for sizing can be found here The [selector] can be any string that will uniquely identify the panel for instantiation. [padding] should be replaced with the appropriate padding needed for the pannel toggle. If the toggle button is right, you should add additional padding to the right to avoid content overlap
|
Toggle | The button inside of the panel that will trigger a close |
Additional utility classes can be used to position the button as needed
|
Methods
- hide():void -- hides the panel
- show():void -- shows the panel
Events
- hide:jt:offcanvas -- triggered when the panel is hidden
- show:jt:offcanvas -- triggered when the panel is shown
Spinners
Regular
Small
Large
X-Large
Modals
NOTE: When triggering the modal from an anchor tag, you must use data-target attributes in addition to href
Pagination
Non-Table Pagination
The JavaScript or links should be implemented with specific logic outside the scope of this theme.
Tables
Static Tables
Type | Column heading | Column heading | Column heading |
---|---|---|---|
Active | Column content | Column content | Column content |
Default | Column content | Column content | Column content |
Primary | Column content | Column content | Column content |
Secondary | Column content | Column content | Column content |
Success | Column content | Column content | Column content |
Danger | Column content | Column content | Column content |
Warning | Column content | Column content | Column content |
Info | Column content | Column content | Column content |
Light | Column content | Column content | Column content |
Dark | Column content | Column content | Column content |
DataTables
This relies on the DataTables plugin found here
For REACT please use this library
Name | Position | Office | Age | Start date | Salary | Notes |
---|---|---|---|---|---|---|
Tiger Nixon | System Architect | Edinburgh | 61 | 2011/04/25 | $320,800 |
|
Garrett Winters | Accountant | Tokyo | 63 | 2011/07/25 | $170,750 | Hey |
Ashton Cox | Junior Technical Author | San Francisco | 66 | 2009/01/12 | $86,000 | Hey |
Cedric Kelly | Senior Javascript Developer | Edinburgh | 22 | 2012/03/29 | $433,060 | Hey |
Airi Satou | Accountant | Tokyo | 33 | 2008/11/28 | $162,700 | Hey |
Brielle Williamson | Integration Specialist | New York | 61 | 2012/12/02 | $372,000 | Hey |
Herrod Chandler | Sales Assistant | San Francisco | 59 | 2012/08/06 | $137,500 | Hey |
Rhona Davidson | Integration Specialist | Tokyo | 55 | 2010/10/14 | $327,900 | Hey |
Colleen Hurst | Javascript Developer | San Francisco | 39 | 2009/09/15 | $205,500 | Hey |
Sonya Frost | Software Engineer | Edinburgh | 23 | 2008/12/13 | $103,600 | Hey |
Jena Gaines | Office Manager | London | 30 | 2008/12/19 | $90,560 | Hey |
Quinn Flynn | Support Lead | Edinburgh | 22 | 2013/03/03 | $342,000 | Hey |
Charde Marshall | Regional Director | San Francisco | 36 | 2008/10/16 | $470,600 | Hey |
Haley Kennedy | Senior Marketing Designer | London | 43 | 2012/12/18 | $313,500 | Hey |
Tatyana Fitzpatrick | Regional Director | London | 19 | 2010/03/17 | $385,750 | Hey |
Michael Silva | Marketing Designer | London | 66 | 2012/11/27 | $198,500 | Hey |
Paul Byrd | Chief Financial Officer (CFO) | New York | 64 | 2010/06/09 | $725,000 | Hey |
Gloria Little | Systems Administrator | New York | 59 | 2009/04/10 | $237,500 | Hey |
Bradley Greer | Software Engineer | London | 41 | 2012/10/13 | $132,000 | Hey |
Dai Rios | Personnel Lead | Edinburgh | 35 | 2012/09/26 | $217,500 | Hey |
Jenette Caldwell | Development Lead | New York | 30 | 2011/09/03 | $345,000 | Hey |
Yuri Berry | Chief Marketing Officer (CMO) | New York | 40 | 2009/06/25 | $675,000 | Hey |
Caesar Vance | Pre-Sales Support | New York | 21 | 2011/12/12 | $106,450 | Hey |
Doris Wilder | Sales Assistant | Sydney | 23 | 2010/09/20 | $85,600 | Hey |
Angelica Ramos | Chief Executive Officer (CEO) | London | 47 | 2009/10/09 | $1,200,000 | Hey |
Gavin Joyce | Developer | Edinburgh | 42 | 2010/12/22 | $92,575 | Hey |
Jennifer Chang | Regional Director | Singapore | 28 | 2010/11/14 | $357,650 | Hey |
Brenden Wagner | Software Engineer | San Francisco | 28 | 2011/06/07 | $206,850 | Hey |
Fiona Green | Chief Operating Officer (COO) | San Francisco | 48 | 2010/03/11 | $850,000 | Hey |
Shou Itou | Regional Marketing | Tokyo | 20 | 2011/08/14 | $163,000 | Hey |
Michelle House | Integration Specialist | Sydney | 37 | 2011/06/02 | $95,400 | Hey |
Suki Burks | Developer | London | 53 | 2009/10/22 | $114,500 | Hey |
Prescott Bartlett | Technical Author | London | 27 | 2011/05/07 | $145,000 | Hey |
Gavin Cortez | Team Leader | San Francisco | 22 | 2008/10/26 | $235,500 | Hey |
Martena Mccray | Post-Sales support | Edinburgh | 46 | 2011/03/09 | $324,050 | Hey |
Unity Butler | Marketing Designer | San Francisco | 47 | 2009/12/09 | $85,675 | Hey |
Howard Hatfield | Office Manager | San Francisco | 51 | 2008/12/16 | $164,500 | Hey |
Hope Fuentes | Secretary | San Francisco | 41 | 2010/02/12 | $109,850 | Hey |
Vivian Harrell | Financial Controller | San Francisco | 62 | 2009/02/14 | $452,500 | Hey |
Timothy Mooney | Office Manager | London | 37 | 2008/12/11 | $136,200 | Hey |
Jackson Bradshaw | Director | New York | 65 | 2008/09/26 | $645,750 | Hey |
Olivia Liang | Support Engineer | Singapore | 64 | 2011/02/03 | $234,500 | Hey |
Bruno Nash | Software Engineer | London | 38 | 2011/05/03 | $163,500 | Hey |
Sakura Yamamoto | Support Engineer | Tokyo | 37 | 2009/08/19 | $139,575 | Hey |
Thor Walton | Developer | New York | 61 | 2013/08/11 | $98,540 | Hey |
Finn Camacho | Support Engineer | San Francisco | 47 | 2009/07/07 | $87,500 | Hey |
Serge Baldwin | Data Coordinator | Singapore | 64 | 2012/04/09 | $138,575 | Hey |
Zenaida Frank | Software Engineer | New York | 63 | 2010/01/04 | $125,250 | Hey |
Zorita Serrano | Software Engineer | San Francisco | 56 | 2012/06/01 | $115,000 | Hey |
Jennifer Acosta | Junior Javascript Developer | Edinburgh | 43 | 2013/02/01 | $75,650 | Hey |
Cara Stevens | Sales Assistant | New York | 46 | 2011/12/06 | $145,600 | Hey |
Hermione Butler | Regional Director | London | 47 | 2011/03/21 | $356,250 | Hey |
Lael Greer | Systems Administrator | London | 21 | 2009/02/27 | $103,500 | Hey |
Jonas Alexander | Developer | San Francisco | 30 | 2010/07/14 | $86,500 | Hey |
Shad Decker | Regional Director | Edinburgh | 51 | 2008/11/13 | $183,000 | Hey |
Michael Bruce | Javascript Developer | Singapore | 29 | 2011/06/27 | $183,000 | Hey |
Donna Snider | Customer Support | New York | 27 | 2011/01/25 | $112,000 | Hey |
Name | Position | Office | Age | Start date | Salary |
Messages
Popovers
NOTE: to initiate Popovers you must use the following script after your HTML has been loaded into the DOM.
$('[data-toggle="popover"]').popover();
Trigger on Click
Trigger on Hover & Focus
Tooltips
Toasts
Alerts
Here is a message.
Here is a message.
Here is a message.
Here is a message.
Here is a message.
Here is a message.
Here is a message.
Here is a message.
Indicators
Circular Badges
Circular Badges w/ Icons
Badges
Labels
Regular
Light
Outline
Sizes
Labels are made by using Utility Classes. You can mix and match the classes to create whatever combination you need.
Ribbons
Card title
Card subtitle
Some quick example text to build on the card title and make up the bulk of the card's content.
Card link Another link RibbonCard title
Card subtitle
Some quick example text to build on the card title and make up the bulk of the card's content.
Card link Another link RibbonCard title
Card subtitle
Some quick example text to build on the card title and make up the bulk of the card's content.
Card link Another link RibbonCard title
Card subtitle
Some quick example text to build on the card title and make up the bulk of the card's content.
Card link Another link RibbonRibbons are made with Bootstrap Utility Classes. Their containing element should have the class position-relative
Navs
JT Navbar
Top level pills
Tabs Underline
NOTE: You must use data-target attributes in addition to href
Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.
Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic, assumenda labore aesthetic magna delectus mollit.
Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork.
Trust fund seitan letterpress, keytar raw denim keffiyeh etsy art party before they sold out master cleanse gluten-free squid scenester freegan cosby sweater. Fanny pack portland seitan DIY, art party locavore wolf cliche high life echo park Austin. Cred vinyl keffiyeh DIY salvia PBR, banh mi before they sold out farm-to-table VHS viral locavore cosby sweater.
Pills
Tabs Underline Fill
NOTE: You must use data-target attributes in addition to href
Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.
Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic, assumenda labore aesthetic magna delectus mollit.
Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork.
Trust fund seitan letterpress, keytar raw denim keffiyeh etsy art party before they sold out master cleanse gluten-free squid scenester freegan cosby sweater. Fanny pack portland seitan DIY, art party locavore wolf cliche high life echo park Austin. Cred vinyl keffiyeh DIY salvia PBR, banh mi before they sold out farm-to-table VHS viral locavore cosby sweater.
Breadcrumbs
Progress
Basic
Arrows w/ Popovers
To align text inside the arrows, use the Bootstrap flex utilities
Deprecated Version (should migrate to newer progress bar)
- Some Step
- Some Step
- Some Step
- Some Step
- Some Step
Contextual alternatives
Multiple bars
Striped
Animated
Containers
Hello, world!
This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.
It uses utility classes for typography and spacing to space content out within the larger container.
List groups
- Cras justo odio 14
- Dapibus ac facilisis in 2
- Morbi leo risus 1
List group item heading
3 days agoDonec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.
Donec id elit non mi porta.List group item heading
3 days agoDonec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.
Donec id elit non mi porta.Cards
Primary card title
Some quick example text to build on the card title and make up the bulk of the card's content.
Secondary card title
Some quick example text to build on the card title and make up the bulk of the card's content.
Success card title
Some quick example text to build on the card title and make up the bulk of the card's content.
Danger card title
Some quick example text to build on the card title and make up the bulk of the card's content.
Warning card title
Some quick example text to build on the card title and make up the bulk of the card's content.
Info card title
Some quick example text to build on the card title and make up the bulk of the card's content.
Light card title
Some quick example text to build on the card title and make up the bulk of the card's content.
Dark card title
Some quick example text to build on the card title and make up the bulk of the card's content.
Primary card title
Some quick example text to build on the card title and make up the bulk of the card's content.
Secondary card title
Some quick example text to build on the card title and make up the bulk of the card's content.
Success card title
Some quick example text to build on the card title and make up the bulk of the card's content.
Danger card title
Some quick example text to build on the card title and make up the bulk of the card's content.
Warning card title
Some quick example text to build on the card title and make up the bulk of the card's content.
Info card title
Some quick example text to build on the card title and make up the bulk of the card's content.
Light card title
Some quick example text to build on the card title and make up the bulk of the card's content.
Dark card title
Some quick example text to build on the card title and make up the bulk of the card's content.
Card header
Special title treatment
Support card subtitle
Some quick example text to build on the card title and make up the bulk of the card's content.
- Cras justo odio
- Dapibus ac facilisis in
- Vestibulum at eros
Card title
Card subtitle
Some quick example text to build on the card title and make up the bulk of the card's content.
Card link Another linkHigh Charts
Form Validation Example
Front-end validation is handled by using Bootstrap conventions.
The basic idea is this:
- Add HTML validation attributes to your form input fields
- Follow Bootstraps form structure Bootstrap Docs
- Turn off built-in browser messages for validation by applying the no-validate attribute to the form element.
- call [myformelement].checkValidity(); in your javascript
- Bootstraps styles, if your HTML is correct will handle displaying validation messages