diff --git a/awx/ui/client/features/credentials/add-credentials.controller.js b/awx/ui/client/features/credentials/add-credentials.controller.js index 05d9c4ce89..e980407e74 100644 --- a/awx/ui/client/features/credentials/add-credentials.controller.js +++ b/awx/ui/client/features/credentials/add-credentials.controller.js @@ -4,23 +4,13 @@ function AddCredentialsController (models) { let credential = models.credential; let credentialType = models.credentialType; - vm.heading = { - text: 'Create Credentials' - }; + vm.name = credential.getPostOptions('name'); + vm.description = credential.getPostOptions('description'); - vm.name = { - options: credential.getPostOptions('name') - }; - - vm.description = { - options: credential.getPostOptions('description') - }; - - vm.kind = { - options: credential.getPostOptions('credential_type'), + vm.kind = Object.assign({ data: credentialType.categorizeByKind(), placeholder: 'Select a Type' - }; + }, credential.getPostOptions('credential_type')); vm.dynamic = { getInputs: credentialType.getTypeFromName, diff --git a/awx/ui/client/features/credentials/add-credentials.view.html b/awx/ui/client/features/credentials/add-credentials.view.html index 64850ec4b6..24e5fee3fc 100644 --- a/awx/ui/client/features/credentials/add-credentials.view.html +++ b/awx/ui/client/features/credentials/add-credentials.view.html @@ -1,5 +1,5 @@ - - + + Create Credentials @@ -8,11 +8,11 @@ - - - + + + - + diff --git a/awx/ui/client/lib/components/_index.less b/awx/ui/client/lib/components/_index.less index b8be713d43..ca2b8ab132 100644 --- a/awx/ui/client/lib/components/_index.less +++ b/awx/ui/client/lib/components/_index.less @@ -1,5 +1,6 @@ @import 'action/_index'; @import 'badge/_index'; +@import 'dynamic/_index'; @import 'form/_index'; @import 'input/_index'; @import 'panel/_index'; diff --git a/awx/ui/client/lib/components/action/action-group.directive.js b/awx/ui/client/lib/components/action/action-group.directive.js index da1bf668d7..41655c379a 100644 --- a/awx/ui/client/lib/components/action/action-group.directive.js +++ b/awx/ui/client/lib/components/action/action-group.directive.js @@ -1,8 +1,8 @@ function atActionGroup (pathService) { return { restrict: 'E', - transclude: true, replace: true, + transclude: true, templateUrl: pathService.getPartialPath('components/action/action-group'), scope: { col: '@', diff --git a/awx/ui/client/lib/components/action/action-group.partial.html b/awx/ui/client/lib/components/action/action-group.partial.html index b704a1f981..855f6ee179 100644 --- a/awx/ui/client/lib/components/action/action-group.partial.html +++ b/awx/ui/client/lib/components/action/action-group.partial.html @@ -1,4 +1,4 @@ -
+
diff --git a/awx/ui/client/lib/components/dynamic/_index.less b/awx/ui/client/lib/components/dynamic/_index.less new file mode 100644 index 0000000000..c6417b01e7 --- /dev/null +++ b/awx/ui/client/lib/components/dynamic/_index.less @@ -0,0 +1,12 @@ +.at-DynamicInputGroup { + padding: 0; + margin: @at-space-6x 0 0 0; +} + +.at-DynamicInputGroup-inset { + position: absolute; + width: @at-inset-width; + height: 100%; + background: @at-gray; + left: -@at-inset-width; +} diff --git a/awx/ui/client/lib/components/dynamic/input-group.directive.js b/awx/ui/client/lib/components/dynamic/input-group.directive.js index 0f6fb05d76..c615b640e6 100644 --- a/awx/ui/client/lib/components/dynamic/input-group.directive.js +++ b/awx/ui/client/lib/components/dynamic/input-group.directive.js @@ -1,44 +1,49 @@ function link (scope, el, attrs, controllers) { - let formController = controllers[0]; - let dynamicController = controllers[1]; - el = el[0]; + let dynamicController = controllers[0]; + let element = el[0].getElementsByClassName('at-DynamicInputGroup-container')[0]; - dynamicController.init(scope, formController, el); + dynamicController.init(scope, element); } -function atDynamicInputGroupController ($scope, $compile) { +function AtDynamicInputGroupController ($scope, $compile) { let vm = this || {}; - let state; let scope; + let state; let source; - let form; - let el; + let element; - vm.init = (_scope_, _form_, _el_) => { - form = _form_; + vm.init = (_scope_, _element_) => { scope = _scope_; - el = _el_; + element = _element_; + state = scope.state || {}; + source = state.source; - scope.config.state = scope.config.state || {}; - state = scope.config.state; - source = scope.config.source; + $scope.$watch('state.source.value', vm.update); + }; - $scope.$watch('config.source.state.value', vm.update); + vm.isValidSource = () => { + if (!source.value || source.value === state.value) { + return false; + } + + return true; }; vm.update = () => { - if (!source.state.value || source.state.value === state.value) { + if (!vm.isValidSource()) { return; } - state.value = source.state.value; + vm.clear(); - let inputs = scope.config.getInputs(source.state.value); + state.value = source.value; + + let inputs = state.getInputs(source.value); let components = vm.createComponentConfigs(inputs); vm.insert(components); - scope.config.components = components; + state.components = components; vm.compile(components); }; @@ -56,45 +61,61 @@ function atDynamicInputGroupController ($scope, $compile) { } } - let html = angular.element(` - <${input.component} - col="${scope.col}" - config="${scope.config.reference}.components[${i}]"> - - `); - components.push({ options: input, - html + element: vm.createElement(input, i) }); }); return components; }; + vm.createElement = (input, index) => { + let tabindex = Number(scope.tab) + index; + + let element = + `<${input.component} col="${scope.col}" tab="${tabindex}" + state="${state.reference}.components[${index}]"> + `; + + return angular.element(element); + }; + vm.insert = components => { - components.forEach(component => el.appendChild(component.html[0])); + let group = document.createElement('div'); + + components.forEach(component => { + group.appendChild(component.element[0]); + }); + + element.appendChild(group); }; vm.compile = components => { - components.forEach(component => $compile(component.html[0])(scope.$parent)); + components.forEach(component => $compile(component.element[0])(scope.$parent)); + }; + + vm.clear = () => { + element.innerHTML = ''; }; } -atDynamicInputGroupController.$inject = ['$scope', '$compile']; +AtDynamicInputGroupController.$inject = ['$scope', '$compile']; function atDynamicInputGroup (pathService) { return { restrict: 'E', replace: true, - require: ['^^atForm', 'atDynamicInputGroup'], + transclude: true, + require: ['atDynamicInputGroup'], templateUrl: pathService.getPartialPath('components/dynamic/input-group'), - controller: atDynamicInputGroupController, + controller: AtDynamicInputGroupController, controllerAs: 'vm', link, scope: { - config: '=', - col: '@' + state: '=', + col: '@', + tab: '@' } }; } diff --git a/awx/ui/client/lib/components/dynamic/input-group.partial.html b/awx/ui/client/lib/components/dynamic/input-group.partial.html index d58db9e7bf..a30915c282 100644 --- a/awx/ui/client/lib/components/dynamic/input-group.partial.html +++ b/awx/ui/client/lib/components/dynamic/input-group.partial.html @@ -1,2 +1,4 @@ -
+
+
+
diff --git a/awx/ui/client/lib/components/form/action.directive.js b/awx/ui/client/lib/components/form/action.directive.js index 04094d6c28..20b590a287 100644 --- a/awx/ui/client/lib/components/form/action.directive.js +++ b/awx/ui/client/lib/components/form/action.directive.js @@ -10,19 +10,11 @@ function atFormActionController ($state) { let form; let scope; - let state; vm.init = (_form_, _scope_) => { form = _form_; scope = _scope_; - scope.config = scope.config || {}; - scope.config.state = scope.config.state || {}; - - state = scope.config.state; - - scope.form = form.use('action', state); - switch(scope.type) { case 'cancel': vm.setCancelDefaults(); @@ -31,8 +23,14 @@ function atFormActionController ($state) { vm.setSaveDefaults(); break; default: - // TODO: custom type (when needed) + vm.setCustomDefaults(); } + + form.use('action', scope); + }; + + vm.setCustomDefaults = () => { + }; vm.setCancelDefaults = () => { @@ -62,6 +60,7 @@ function atFormAction (pathService) { controllerAs: 'vm', link, scope: { + state: '=', type: '@' } }; diff --git a/awx/ui/client/lib/components/form/action.partial.html b/awx/ui/client/lib/components/form/action.partial.html index b6f5e9dc90..fd4df0881b 100644 --- a/awx/ui/client/lib/components/form/action.partial.html +++ b/awx/ui/client/lib/components/form/action.partial.html @@ -1,5 +1,5 @@ diff --git a/awx/ui/client/lib/components/form/form.directive.js b/awx/ui/client/lib/components/form/form.directive.js index d7559c4381..6e6244212b 100644 --- a/awx/ui/client/lib/components/form/form.directive.js +++ b/awx/ui/client/lib/components/form/form.directive.js @@ -11,34 +11,26 @@ function AtFormController () { return vm.trackComponent(type, component, el); }; - vm.trackComponent = (type, component, el) => { - let meta = { - el, - type, - state: vm.state, - disabled: false, - tabindex: vm.components.length + 1 - }; + vm.trackComponent = (type, component) => { + component.type = type; + component.form = vm.state; - if (!vm.components.length) { - el.focus(); - } - - vm.components.push(meta) - - return meta; + vm.components.push(component) }; vm.validate = () => { let isValid = true; - vm.components - .filter(component => component.type === 'input') - .forEach(input => { - if (input.isValid) { - isValid = false; - } - }); + for (let i = 0; i < vm.components.length; i++) { + if (vm.components[i].type !== 'input') { + continue; + } + + if (!vm.components[i].state.isValid) { + isValid = false; + break; + } + } return isValid; }; @@ -56,20 +48,16 @@ function AtFormController () { }; } -function link (scope, el, attrs, controller, fn) { - //console.log(fn); -} - function atForm (pathService) { return { restrict: 'E', + replace: true, transclude: true, templateUrl: pathService.getPartialPath('components/form/form'), controller: AtFormController, controllerAs: 'vm', - link, scope: { - config: '=' + state: '=' } }; } diff --git a/awx/ui/client/lib/components/input/label.directive.js b/awx/ui/client/lib/components/input/label.directive.js index c2dc7a08b9..d583ea4990 100644 --- a/awx/ui/client/lib/components/input/label.directive.js +++ b/awx/ui/client/lib/components/input/label.directive.js @@ -5,7 +5,7 @@ function atInputLabel (pathService) { replace: true, templateUrl: pathService.getPartialPath('components/input/label'), scope: { - config: '=' + state: '=' } }; } diff --git a/awx/ui/client/lib/components/input/label.partial.html b/awx/ui/client/lib/components/input/label.partial.html index 8227c88ff9..4130ee1a3c 100644 --- a/awx/ui/client/lib/components/input/label.partial.html +++ b/awx/ui/client/lib/components/input/label.partial.html @@ -1,5 +1,5 @@ diff --git a/awx/ui/client/lib/components/input/select.directive.js b/awx/ui/client/lib/components/input/select.directive.js index 040658dbb4..8ac2bef4a4 100644 --- a/awx/ui/client/lib/components/input/select.directive.js +++ b/awx/ui/client/lib/components/input/select.directive.js @@ -1,10 +1,16 @@ -function link (scope, el, attrs, controllers) { +function atInputSelectLink (scope, el, attrs, controllers) { let formController = controllers[0]; let inputController = controllers[1]; - let input = el.find('input')[0]; - let select = el.find('select')[0]; + let elements = { + input: el.find('input')[0], + select: el.find('select')[0] + }; - inputController.init(formController, scope, input, select); + if (scope.tab === '1') { + elements.select.focus(); + } + + inputController.init(formController, scope, elements); } function AtInputSelectController (eventService) { @@ -12,31 +18,29 @@ function AtInputSelectController (eventService) { let scope; let state; + let form; let input; let select; - let form; - vm.init = (_form_, _scope_, _input_, _select_) => { + vm.init = (_form_, _scope_, elements) => { form = _form_; + input = elements.input; + select = elements.select; scope = _scope_; - input = _input_; - select = _select_; - - scope.config.state = scope.config.state || {}; - state = scope.config.state; + state = scope.state || {}; + state.required = state.required || false; state.isValid = state.isValid || false; - state.message = state.message || ''; - state.required = scope.config.options.required || false; + state.disabled = state.disabled || false; - scope.form = form.use('input', state, input); + form.use('input', scope); vm.setListeners(); vm.check(); }; vm.setListeners = () => { - let listeners = eventService.addListeners(scope, [ + let listeners = eventService.addListeners([ [input, 'focus', () => select.focus], [select, 'mousedown', () => scope.$apply(() => scope.open = !scope.open)], [select, 'focus', () => input.classList.add('at-Input--focus')], @@ -58,7 +62,9 @@ function AtInputSelectController (eventService) { if (state.required && !state.value) { isValid = false; - } else if (state.validate && !state.validate(scope.config.input)) { + } + + if (state.validate && !state.validate(state.value)) { isValid = false; } @@ -86,9 +92,9 @@ function atInputSelect (pathService) { templateUrl: pathService.getPartialPath('components/input/select'), controller: AtInputSelectController, controllerAs: 'vm', - link, + link: atInputSelectLink, scope: { - config: '=', + state: '=', col: '@', tab: '@' } diff --git a/awx/ui/client/lib/components/input/select.partial.html b/awx/ui/client/lib/components/input/select.partial.html index bf08067022..50093274b8 100644 --- a/awx/ui/client/lib/components/input/select.partial.html +++ b/awx/ui/client/lib/components/input/select.partial.html @@ -1,17 +1,16 @@ -
+
- +
- + diff --git a/awx/ui/client/lib/components/input/text.directive.js b/awx/ui/client/lib/components/input/text.directive.js index 9019fd0d80..8b2443bb97 100644 --- a/awx/ui/client/lib/components/input/text.directive.js +++ b/awx/ui/client/lib/components/input/text.directive.js @@ -1,33 +1,31 @@ -function link (scope, el, attrs, controllers) { +function atInputTextLink (scope, el, attrs, controllers) { let formController = controllers[0]; let inputController = controllers[1]; - let input = el.find('input')[0]; - inputController.init(formController, scope, input); + if (scope.tab === '1') { + el.find('input')[0].focus(); + } + + inputController.init(formController, scope); } function AtInputTextController () { let vm = this || {}; - let state; let scope; - let input; + let state; let form; - vm.init = (_form_, _scope_, _input_) => { + vm.init = (_form_, _scope_) => { form = _form_; scope = _scope_; - input = _input_; + state = scope.state || {}; - scope.config.state = scope.config.state || {}; - state = scope.config.state; - state.required = scope.config.options.required; - - state.isValid = state.isValid || false; - state.message = state.message || ''; state.required = state.required || false; + state.isValid = state.isValid || false; + state.disabled = state.disabled || false; - scope.form = form.use('input', state, input); + form.use('input', scope); vm.check(); }; @@ -37,7 +35,9 @@ function AtInputTextController () { if (state.required && !state.value) { isValid = false; - } else if (state.validate && !state.validate(scope.config.input)) { + } + + if (state.validate && !state.validate(state.value)) { isValid = false; } @@ -63,9 +63,9 @@ function atInputText (pathService) { templateUrl: pathService.getPartialPath('components/input/text'), controller: AtInputTextController, controllerAs: 'vm', - link, + link: atInputTextLink, scope: { - config: '=', + state: '=', col: '@', tab: '@' } diff --git a/awx/ui/client/lib/components/input/text.partial.html b/awx/ui/client/lib/components/input/text.partial.html index d29305742d..f9441e6ecc 100644 --- a/awx/ui/client/lib/components/input/text.partial.html +++ b/awx/ui/client/lib/components/input/text.partial.html @@ -1,11 +1,10 @@
- - + +
diff --git a/awx/ui/client/lib/components/panel/body.directive.js b/awx/ui/client/lib/components/panel/body.directive.js index 157a8d8ad7..6011a81d92 100644 --- a/awx/ui/client/lib/components/panel/body.directive.js +++ b/awx/ui/client/lib/components/panel/body.directive.js @@ -1,9 +1,12 @@ function atPanelBody (pathService) { return { restrict: 'E', - require: '^^atPanel', + replace: true, transclude: true, templateUrl: pathService.getPartialPath('components/panel/body'), + scope: { + state: '=' + } }; } diff --git a/awx/ui/client/lib/components/panel/heading.directive.js b/awx/ui/client/lib/components/panel/heading.directive.js index 1f8e4459a8..0ce8b2aee6 100644 --- a/awx/ui/client/lib/components/panel/heading.directive.js +++ b/awx/ui/client/lib/components/panel/heading.directive.js @@ -6,12 +6,10 @@ function atPanelHeading (pathService) { return { restrict: 'E', require: '^^atPanel', + replace: true, transclude: true, templateUrl: pathService.getPartialPath('components/panel/heading'), - link, - scope: { - config: '=' - } + link }; } diff --git a/awx/ui/client/lib/components/panel/heading.partial.html b/awx/ui/client/lib/components/panel/heading.partial.html index d6aa273e8c..2c14e3732d 100644 --- a/awx/ui/client/lib/components/panel/heading.partial.html +++ b/awx/ui/client/lib/components/panel/heading.partial.html @@ -1,7 +1,7 @@

- {{ config.text }} +

diff --git a/awx/ui/client/lib/components/panel/panel.directive.js b/awx/ui/client/lib/components/panel/panel.directive.js index 386ff543fe..2fe356ff55 100644 --- a/awx/ui/client/lib/components/panel/panel.directive.js +++ b/awx/ui/client/lib/components/panel/panel.directive.js @@ -6,24 +6,25 @@ function dismiss ($state) { $state.go('^'); } -function controller ($state) { +function AtPanelController ($state) { let vm = this; vm.dismiss = dismiss.bind(vm, $state); vm.use = use; } -controller.$inject = ['$state']; +AtPanelController.$inject = ['$state']; function atPanel (pathService) { return { restrict: 'E', + replace: true, transclude: true, templateUrl: pathService.getPartialPath('components/panel/panel'), - controller, + controller: AtPanelController, controllerAs: 'vm', scope: { - config: '=' + state: '=' } }; } diff --git a/awx/ui/client/lib/components/popover/popover.directive.js b/awx/ui/client/lib/components/popover/popover.directive.js index 748e92df4c..dba58a1680 100644 --- a/awx/ui/client/lib/components/popover/popover.directive.js +++ b/awx/ui/client/lib/components/popover/popover.directive.js @@ -60,7 +60,7 @@ function atPopover (_pathService_) { templateUrl: pathService.getPartialPath('components/popover/popover'), link, scope: { - config: '=' + state: '=' } }; } diff --git a/awx/ui/client/lib/components/popover/popover.partial.html b/awx/ui/client/lib/components/popover/popover.partial.html index 74769372b1..1ad5a9dcbf 100644 --- a/awx/ui/client/lib/components/popover/popover.partial.html +++ b/awx/ui/client/lib/components/popover/popover.partial.html @@ -1,4 +1,4 @@ -
+
@@ -6,6 +6,6 @@
-
{{::config.options.help_text}}
+
{{::state.options.help_text}}
diff --git a/awx/ui/client/lib/models/Base.js b/awx/ui/client/lib/models/Base.js index fe0c067da8..923b11c59b 100644 --- a/awx/ui/client/lib/models/Base.js +++ b/awx/ui/client/lib/models/Base.js @@ -1,5 +1,12 @@ let $resource; +function get() { + return $resource(this.path).get().$promise + .then(response => { + this.model.data = response; + }); +} + function options () { let actions = { options: { @@ -13,13 +20,6 @@ function options () { }); } -function get () { - return $resource(this.path).get().$promise - .then(response => { - this.model.data = response; - }); -} - function getPostOptions (name) { return this.model.options.actions.POST[name]; } @@ -30,18 +30,20 @@ function normalizePath (resource) { return `${version}${resource}/`; } -function Base (_$resource_) { +function BaseModel (_$resource_) { $resource = _$resource_; - return () => ({ - model: {}, - get, - options, - getPostOptions, - normalizePath - }); + return function extend (path) { + this.get = get; + this.options = options; + this.getPostOptions = getPostOptions; + this.normalizePath = normalizePath; + + this.model = {}; + this.path = this.normalizePath(path); + }; } -Base.$inject = ['$resource']; +BaseModel.$inject = ['$resource']; -export default Base; +export default BaseModel; diff --git a/awx/ui/client/lib/models/Credential.js b/awx/ui/client/lib/models/Credential.js index 75f5066d0c..ae8c42d9eb 100644 --- a/awx/ui/client/lib/models/Credential.js +++ b/awx/ui/client/lib/models/Credential.js @@ -1,9 +1,7 @@ -function Credential (BaseModel) { - Object.assign(this, BaseModel()); - - this.path = this.normalizePath('credentials'); +function CredentialModel (BaseModel) { + BaseModel.call(this, 'credentials'); } -Credential.$inject = ['BaseModel']; +CredentialModel.$inject = ['BaseModel']; -export default Credential; +export default CredentialModel; diff --git a/awx/ui/client/lib/models/CredentialType.js b/awx/ui/client/lib/models/CredentialType.js index d5217b9c3b..0674f6f630 100644 --- a/awx/ui/client/lib/models/CredentialType.js +++ b/awx/ui/client/lib/models/CredentialType.js @@ -1,7 +1,5 @@ -function CredentialType (BaseModel) { - Object.assign(this, BaseModel()); - - this.path = this.normalizePath('credential_types'); +function CredentialTypeModel (BaseModel) { + BaseModel.call(this, 'credential_types'); this.categorizeByKind = () => { let group = {}; @@ -40,6 +38,6 @@ function CredentialType (BaseModel) { }; } -CredentialType.$inject = ['BaseModel']; +CredentialTypeModel.$inject = ['BaseModel']; -export default CredentialType; +export default CredentialTypeModel; diff --git a/awx/ui/client/lib/services/event.service.js b/awx/ui/client/lib/services/event.service.js index 24e4dd25bf..6c59db927d 100644 --- a/awx/ui/client/lib/services/event.service.js +++ b/awx/ui/client/lib/services/event.service.js @@ -1,35 +1,28 @@ -function addListeners (scope, list) { - let listeners = []; +function EventService () { + this.addListeners = list => { + let listeners = []; - list.forEach(args => { - listeners.push(addListener.call(null, scope, ...args)); - }); + list.forEach(args => listeners.push(this.addListener(...args))); - return listeners; -} - -function addListener (scope, el, name, fn) { - let listener = { - fn, - name, - el + return listeners; }; - listener.el.addEventListener(listener.name, listener.fn); + this.addListener = (el, name, fn) => { + let listener = { + fn, + name, + el + }; - return listener; -} + listener.el.addEventListener(listener.name, listener.fn); -function remove (listeners) { - listeners.forEach(listener => { - listener.el.removeEventListener(listener.name, listener.fn); - }); -} + return listener; + }; -function EventService () { - return { - addListeners, - remove + this.remove = listeners => { + listeners.forEach(listener => { + listener.el.removeEventListener(listener.name, listener.fn); + }); }; } diff --git a/awx/ui/client/lib/services/index.js b/awx/ui/client/lib/services/index.js index d4c3462542..d6a256b0fc 100644 --- a/awx/ui/client/lib/services/index.js +++ b/awx/ui/client/lib/services/index.js @@ -3,5 +3,5 @@ import PathService from './path.service'; angular .module('at.lib.services', []) - .factory('EventService', EventService) - .factory('PathService', PathService); + .service('EventService', EventService) + .service('PathService', PathService); diff --git a/awx/ui/client/lib/services/path.service.js b/awx/ui/client/lib/services/path.service.js index fd1180c935..9d41c25cc2 100644 --- a/awx/ui/client/lib/services/path.service.js +++ b/awx/ui/client/lib/services/path.service.js @@ -1,16 +1,11 @@ -function getPartialPath (path) { - return `/static/partials/${path}.partial.html`; -} - -function getViewPath (path) { - return `/static/views/${path}.view.html`; -} - function PathService () { - return { - getPartialPath, - getViewPath + this.getPartialPath = path => { + return `/static/partials/${path}.partial.html`; }; + + this.getViewPath = path => { + return `/static/views/${path}.view.html`; + } } export default PathService; diff --git a/awx/ui/client/lib/theme/_utility.less b/awx/ui/client/lib/theme/_utility.less index 178e7faa7e..1f47a481f3 100644 --- a/awx/ui/client/lib/theme/_utility.less +++ b/awx/ui/client/lib/theme/_utility.less @@ -1,3 +1,8 @@ +.at-u-noSpace { + margin: 0; + padding: 0; +} + .at-u-flat { padding-top: 0; padding-bottom: 0; diff --git a/awx/ui/client/lib/theme/_variables.less b/awx/ui/client/lib/theme/_variables.less index 852700b147..0fe4d6100f 100644 --- a/awx/ui/client/lib/theme/_variables.less +++ b/awx/ui/client/lib/theme/_variables.less @@ -63,3 +63,4 @@ @at-border-radius: 5px; @at-input-height: 34px; @at-popover-width: 320px; +@at-inset-width: 5px; diff --git a/echo b/echo new file mode 100644 index 0000000000..e69de29bb2