38
lib/core/README.md
Normal file
@@ -0,0 +1,38 @@
|
||||
# Alfresco Core Library
|
||||
|
||||
Contains a variety of components, directives and services used throughout ADF
|
||||
|
||||
<!-- markdown-toc start - Don't edit this section. npm run toc to generate it-->
|
||||
|
||||
<!-- toc -->
|
||||
|
||||
- [Documentation](#documentation)
|
||||
- [Prerequisites](#prerequisites)
|
||||
- [Install](#install)
|
||||
- [License](#license)
|
||||
|
||||
<!-- tocstop -->
|
||||
|
||||
<!-- markdown-toc end -->
|
||||
|
||||
## Documentation
|
||||
|
||||
See the [ADF Core](../../docs/README.md#adf-core) section of the [docs index](../../docs/README.md)
|
||||
for all available documentation on this library.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
Before you start using this development framework, make sure you have installed all required software and done all the
|
||||
necessary configuration, see this [page](https://github.com/Alfresco/alfresco-ng2-components/blob/master/PREREQUISITES.md).
|
||||
|
||||
> If you plan using this component with projects generated by Angular CLI, please refer to the following article: [Using ADF with Angular CLI](https://github.com/Alfresco/alfresco-ng2-components/wiki/Angular-CLI)
|
||||
|
||||
## Install
|
||||
|
||||
```sh
|
||||
npm install @alfresco/core
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
[Apache Version 2.0](https://github.com/Alfresco/alfresco-ng2-components/blob/master/LICENSE)
|
43
lib/core/app-config/app-config.module.ts
Normal file
@@ -0,0 +1,43 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { HttpClientModule } from '@angular/common/http';
|
||||
import { APP_INITIALIZER, NgModule } from '@angular/core';
|
||||
import { AppConfigService } from './app-config.service';
|
||||
|
||||
export function startupServiceFactory(configService: AppConfigService): Function {
|
||||
return () => configService.load();
|
||||
}
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
HttpClientModule
|
||||
],
|
||||
providers: [
|
||||
AppConfigService,
|
||||
{
|
||||
provide: APP_INITIALIZER,
|
||||
useFactory: startupServiceFactory,
|
||||
deps: [
|
||||
AppConfigService
|
||||
],
|
||||
multi: true
|
||||
}
|
||||
]
|
||||
})
|
||||
export class AppConfigModule {
|
||||
}
|
120
lib/core/app-config/app-config.service.spec.ts
Normal file
@@ -0,0 +1,120 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { HttpClientModule } from '@angular/common/http';
|
||||
import { inject, TestBed } from '@angular/core/testing';
|
||||
import { AppConfigService } from './app-config.service';
|
||||
import { AppConfigModule } from './app-config.module';
|
||||
|
||||
declare let jasmine: any;
|
||||
|
||||
describe('AppConfigService', () => {
|
||||
|
||||
let appConfigService: AppConfigService;
|
||||
|
||||
const mockResponse = {
|
||||
ecmHost: 'http://localhost:4000/ecm',
|
||||
bpmHost: 'http://localhost:4000/ecm',
|
||||
application: {
|
||||
name: 'Custom Name'
|
||||
},
|
||||
files: {
|
||||
'excluded': ['exluded']
|
||||
}
|
||||
};
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [
|
||||
HttpClientModule,
|
||||
AppConfigModule
|
||||
],
|
||||
providers: [
|
||||
{ provide: AppConfigService, useClass: AppConfigService }
|
||||
]
|
||||
});
|
||||
|
||||
jasmine.Ajax.install();
|
||||
});
|
||||
|
||||
beforeEach(
|
||||
inject([AppConfigService], (appConfig: AppConfigService) => {
|
||||
appConfigService = appConfig;
|
||||
|
||||
jasmine.Ajax.requests.mostRecent().respondWith({
|
||||
'status': 200,
|
||||
contentType: 'application/json',
|
||||
responseText: JSON.stringify(mockResponse)
|
||||
});
|
||||
})
|
||||
);
|
||||
|
||||
afterEach(() => {
|
||||
jasmine.Ajax.uninstall();
|
||||
});
|
||||
|
||||
it('should export service in the module', () => {
|
||||
expect(appConfigService).toBeDefined();
|
||||
});
|
||||
|
||||
it('should skip the optional port number', () => {
|
||||
appConfigService.config.testUrl = 'http://{hostname}{:port}';
|
||||
|
||||
spyOn(appConfigService, 'getLocationHostname').and.returnValue('localhost');
|
||||
spyOn(appConfigService, 'getLocationPort').and.returnValue('');
|
||||
|
||||
expect(appConfigService.get('testUrl')).toBe('http://localhost');
|
||||
});
|
||||
|
||||
it('should set the optional port number', () => {
|
||||
appConfigService.config.testUrl = 'http://{hostname}{:port}';
|
||||
|
||||
spyOn(appConfigService, 'getLocationHostname').and.returnValue('localhost');
|
||||
spyOn(appConfigService, 'getLocationPort').and.returnValue(':9090');
|
||||
|
||||
expect(appConfigService.get('testUrl')).toBe('http://localhost:9090');
|
||||
});
|
||||
|
||||
it('should set the mandatory port number', () => {
|
||||
appConfigService.config.testUrl = 'http://{hostname}:{port}';
|
||||
|
||||
spyOn(appConfigService, 'getLocationHostname').and.returnValue('localhost');
|
||||
spyOn(appConfigService, 'getLocationPort').and.returnValue('9090');
|
||||
|
||||
expect(appConfigService.get('testUrl')).toBe('http://localhost:9090');
|
||||
});
|
||||
|
||||
it('should load external settings', () => {
|
||||
appConfigService.load().then(config => {
|
||||
expect(config).toEqual(mockResponse);
|
||||
});
|
||||
});
|
||||
|
||||
it('should retrieve settings', () => {
|
||||
appConfigService.load().then(() => {
|
||||
expect(appConfigService.get('ecmHost')).toBe(mockResponse.ecmHost);
|
||||
expect(appConfigService.get('bpmHost')).toBe(mockResponse.bpmHost);
|
||||
expect(appConfigService.get('application.name')).toBe(mockResponse.application.name);
|
||||
});
|
||||
});
|
||||
|
||||
it('should take excluded file list', () => {
|
||||
appConfigService.load().then(() => {
|
||||
expect(appConfigService.get('files.excluded')[0]).toBe('exluded');
|
||||
});
|
||||
});
|
||||
});
|
86
lib/core/app-config/app-config.service.ts
Normal file
@@ -0,0 +1,86 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
import { Injectable } from '@angular/core';
|
||||
import { ObjectUtils } from '../utils/object-utils';
|
||||
|
||||
@Injectable()
|
||||
export class AppConfigService {
|
||||
|
||||
static APP_CONFIG_LANGUAGES_KEY = 'languages';
|
||||
|
||||
config: any = {
|
||||
application: {
|
||||
name: 'Alfresco ADF Application'
|
||||
},
|
||||
ecmHost: 'http://{hostname}{:port}/ecm',
|
||||
bpmHost: 'http://{hostname}{:port}/bpm',
|
||||
logLevel: 'silent'
|
||||
};
|
||||
|
||||
constructor(private http: HttpClient) {
|
||||
}
|
||||
|
||||
get<T>(key: string, defaultValue?: T): T {
|
||||
let result: any = ObjectUtils.getValue(this.config, key);
|
||||
if (typeof result === 'string') {
|
||||
const map = new Map<string, string>();
|
||||
map.set('hostname', this.getLocationHostname());
|
||||
map.set(':port', this.getLocationPort(':'));
|
||||
map.set('port', this.getLocationPort());
|
||||
result = this.formatString(result, map);
|
||||
}
|
||||
if (result === undefined) {
|
||||
return defaultValue;
|
||||
}
|
||||
return <T> result;
|
||||
}
|
||||
|
||||
getLocationHostname(): string {
|
||||
return location.hostname;
|
||||
}
|
||||
|
||||
getLocationPort(prefix: string = ''): string {
|
||||
return location.port ? prefix + location.port : '';
|
||||
}
|
||||
|
||||
load(): Promise<any> {
|
||||
return new Promise(resolve => {
|
||||
this.http.get('app.config.json').subscribe(
|
||||
(data: any) => {
|
||||
this.config = Object.assign({}, this.config, data || {});
|
||||
resolve(this.config);
|
||||
},
|
||||
() => {
|
||||
resolve(this.config);
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
private formatString(str: string, map: Map<string, string>): string {
|
||||
let result = str;
|
||||
|
||||
map.forEach((value, key) => {
|
||||
const expr = new RegExp('{' + key + '}', 'gm');
|
||||
result = result.replace(expr, value);
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
18
lib/core/app-config/index.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
export * from './public-api';
|
20
lib/core/app-config/public-api.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
export * from './app-config.service';
|
||||
|
||||
export * from './app-config.module';
|
93
lib/core/assets/images/alfresco-logo.svg
Normal file
@@ -0,0 +1,93 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 187 43" style="enable-background:new 0 0 187 43;" width="187" height="43" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#77777A;}
|
||||
.st1{fill:none;}
|
||||
.st2{fill:#77BC1F;}
|
||||
.st3{fill:#F38B00;}
|
||||
.st4{fill:#0071CE;}
|
||||
.st5{fill:#002F87;}
|
||||
.st6{fill:#F9BE00;}
|
||||
.st7{fill:#00AF41;}
|
||||
</style>
|
||||
<g>
|
||||
<path class="st0" d="M59.7,4.4h3.2l11.9,30.2h-3.1L68,25.2H54.2l-3.7,9.4h-3.1L59.7,4.4z M55.1,22.7H67L61.1,7.2L55.1,22.7z"/>
|
||||
<rect x="75.6" y="4.4" class="st0" width="2.7" height="30.2"/>
|
||||
<path class="st0" d="M90.4,15h-4.3v19.6h-2.7V15h-3.7v-2.2h3.7v-2c0-3.8,1-6.4,5.3-6.4c0.8,0,1.4,0,2.2,0.2v2.3
|
||||
c-0.7-0.1-1.3-0.2-1.9-0.2c-3,0-2.9,1.9-2.9,4.2v1.9h4.3V15z"/>
|
||||
<path class="st0" d="M91.4,12.7h2.5v5.1H94c1.4-3.5,4.3-5.6,8.3-5.4v2.7c-4.8-0.3-8.2,3.3-8.2,7.8v11.6h-2.7V12.7z"/>
|
||||
<path class="st0" d="M104.2,24.4c0.1,3.9,2.1,8.6,7.2,8.6c3.9,0,6-2.3,6.9-5.6h2.7c-1.1,4.9-4,7.8-9.6,7.8c-7,0-9.9-5.3-9.9-11.6
|
||||
c0-5.8,2.9-11.6,9.9-11.6c7.1,0,9.9,6.1,9.6,12.3H104.2z M118.4,22.1c-0.1-4-2.6-7.8-7-7.8c-4.4,0-6.8,3.8-7.2,7.8H118.4z"/>
|
||||
<path class="st0" d="M136.3,19.1c-0.1-3.3-2.7-4.8-5.7-4.8c-2.4,0-5.2,0.9-5.2,3.8c0,2.4,2.7,3.2,4.6,3.7l3.6,0.8
|
||||
c3,0.5,6.2,2.2,6.2,6c0,4.7-4.7,6.6-8.8,6.6c-5.1,0-8.6-2.4-9-7.7h2.7c0.2,3.6,2.9,5.4,6.5,5.4c2.5,0,6-1.1,6-4.1
|
||||
c0-2.5-2.4-3.4-4.8-4l-3.4-0.8c-3.5-0.9-6.1-2.1-6.1-5.8c0-4.4,4.4-6.1,8.2-6.1c4.4,0,7.9,2.3,8,7H136.3z"/>
|
||||
<path class="st0" d="M157.6,19.6c-0.7-3.3-2.7-5.2-6.2-5.2c-5.1,0-7.7,4.6-7.7,9.3c0,4.7,2.6,9.3,7.7,9.3c3.3,0,6-2.6,6.4-6.2h2.7
|
||||
c-0.7,5.2-4.2,8.5-9.1,8.5c-6.7,0-10.4-5.3-10.4-11.6c0-6.3,3.7-11.6,10.4-11.6c4.7,0,8.3,2.5,8.9,7.5H157.6z"/>
|
||||
<path class="st0" d="M182.3,23.7c0,6.3-3.6,11.6-10.4,11.6s-10.4-5.3-10.4-11.6c0-6.3,3.6-11.6,10.4-11.6S182.3,17.4,182.3,23.7
|
||||
M164.3,23.7c0,4.7,2.6,9.3,7.7,9.3c5.2,0,7.7-4.7,7.7-9.3c0-4.7-2.5-9.3-7.7-9.3C166.8,14.4,164.3,19,164.3,23.7"/>
|
||||
<polygon class="st0" points="181.4,11.7 183.8,11.7 183.8,12 182.8,12 182.8,14.8 182.5,14.8 182.5,12 181.4,12 "/>
|
||||
<polygon class="st0" points="184,11.7 184.4,11.7 185.5,14.4 186.6,11.7 187,11.7 187,14.8 186.7,14.8 186.7,12.1 186.7,12.1
|
||||
185.6,14.8 185.3,14.8 184.3,12.1 184.3,14.8 184,14.8 "/>
|
||||
<path class="st1" d="M21.6,21.5v8.6l0,0.3c0,4.9-4,8.9-9,8.9c-4.9,0-9-4-9-8.9c0-0.5,0-1.1,0.1-1.6c3.5,2.4,8.3,2.1,11.4-1
|
||||
L21.6,21.5L21.6,21.5L21.6,21.5z"/>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st2" d="M15.3,27.8l5.2-5.2h-7.8c-4.3,0-7.8,3.5-7.8,7.8c0,4.3,3.5,7.8,7.8,7.8c0.3,0,0.7,0,1-0.1
|
||||
C11.9,34.8,12.5,30.6,15.3,27.8z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st2" d="M21.6,30.4v-7.3l-5.5,5.5l0,0c-3.1,3-3.1,8,0,11c3.1,3,8,3,11.1,0c0.2-0.2,0.4-0.5,0.6-0.7
|
||||
C24.2,37.7,21.6,34.3,21.6,30.4z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st2" d="M27.9,27.8l-5.2-5.2v7.8c0,4.3,3.5,7.8,7.8,7.8c4.3,0,7.8-3.5,7.8-7.8c0-0.3,0-0.6-0.1-1
|
||||
C34.9,31.1,30.7,30.6,27.9,27.8z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st2" d="M39.8,16c-0.2-0.2-0.5-0.4-0.7-0.6c-1.2,3.6-4.5,6.1-8.5,6.1h-7.3l5.5,5.5l0,0c3.1,3,8,3,11.1,0
|
||||
C42.8,23.9,42.8,19,39.8,16z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st3" d="M30.5,4.8c-0.3,0-0.7,0-1,0.1c1.7,3.3,1.2,7.5-1.7,10.3l-5.2,5.2h7.8c4.3,0,7.8-3.5,7.8-7.8
|
||||
C38.4,8.3,34.9,4.8,30.5,4.8z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st4" d="M27.1,3.4c-3.1-3-8-3-11.1,0c-0.2,0.2-0.4,0.5-0.6,0.7c3.6,1.2,6.2,4.5,6.2,8.5v7.3l5.5-5.5l0,0
|
||||
C30.2,11.4,30.2,6.4,27.1,3.4z"/>
|
||||
</g>
|
||||
</g>
|
||||
<path class="st4" d="M15.3,15.2l0.2,0.2l5,4.9h0l0-7.8v0c0-4.3-3.5-7.8-7.8-7.8c-4.3,0-7.8,3.5-7.8,7.8c0,0.3,0,0.6,0.1,1
|
||||
C8.3,11.9,12.5,12.4,15.3,15.2z"/>
|
||||
<path class="st1" d="M21.6,21.5L0,21.5c0-2.3,0.9-4.6,2.6-6.3c3.5-3.5,9.2-3.5,12.7,0L21.6,21.5L21.6,21.5z"/>
|
||||
<path class="st1" d="M21.6,21.5v8.6l0,0.3c0,4.9-4,8.9-9,8.9c-4.9,0-9-4-9-8.9c0-4.9,4-8.9,9-8.9H21.6L21.6,21.5z"/>
|
||||
<path class="st4" d="M4.2,27.6c0.1-0.2,0.1-0.4,0.2-0.5c0,0,0,0,0-0.1c0.1-0.2,0.2-0.4,0.3-0.6c0,0,0-0.1,0.1-0.1
|
||||
c0.1-0.2,0.2-0.4,0.3-0.5c0,0,0,0,0-0.1c0.1-0.2,0.2-0.3,0.3-0.5c0,0,0-0.1,0.1-0.1c0.1-0.2,0.2-0.3,0.4-0.5c0,0,0.1-0.1,0.1-0.1
|
||||
c0.1-0.1,0.3-0.3,0.4-0.4c0,0,0,0,0,0c0.1-0.1,0.3-0.3,0.4-0.4c0,0,0.1-0.1,0.1-0.1c0.2-0.1,0.3-0.3,0.5-0.4c0,0,0,0,0.1,0
|
||||
c0.2-0.1,0.3-0.2,0.5-0.3c0,0,0.1,0,0.1-0.1c0.2-0.1,0.3-0.2,0.5-0.3c0,0,0.1,0,0.1-0.1c0.2-0.1,0.4-0.2,0.5-0.3c0,0,0,0,0,0
|
||||
C9.4,22.1,9.6,22,9.8,22c0,0,0.1,0,0.1,0c0.2-0.1,0.4-0.1,0.6-0.2c0,0,0.1,0,0.1,0c0.2,0,0.4-0.1,0.6-0.1c0,0,0.1,0,0.1,0
|
||||
c0.2,0,0.4-0.1,0.6-0.1c0,0,0.1,0,0.1,0c0.2,0,0.4,0,0.7,0H20L14.5,16c-3.1-3-8-3-11.1,0c-3.1,3-3.1,8,0,11
|
||||
C3.7,27.2,3.9,27.4,4.2,27.6C4.2,27.6,4.2,27.6,4.2,27.6z"/>
|
||||
<path class="st5" d="M14.5,16l4.4,4.3H13l-0.3,0c-3.6,0-6.6-2.4-7.5-5.7C8.1,13,12,13.5,14.5,16L14.5,16L14.5,16z"/>
|
||||
<path class="st5" d="M20.5,12.6v6.2l-4.2-4.1l-0.2-0.2c-2.5-2.5-3-6.3-1.3-9.3C18.1,6,20.5,9,20.5,12.6L20.5,12.6L20.5,12.6z"/>
|
||||
<path class="st5" d="M27.1,14.4l-4.4,4.3v-5.8l0-0.3c0-3.6,2.4-6.6,5.7-7.5C30.1,8,29.7,11.9,27.1,14.4L27.1,14.4L27.1,14.4z"/>
|
||||
<path class="st6" d="M30.5,20.3h-6.2l4.2-4.1l0.2-0.2c2.5-2.5,6.4-2.9,9.3-1.3C37.2,17.9,34.1,20.3,30.5,20.3L30.5,20.3L30.5,20.3z
|
||||
"/>
|
||||
<path class="st7" d="M28.7,27l-4.4-4.3h5.9l0.3,0c3.6,0,6.6,2.4,7.5,5.7C35.1,29.9,31.3,29.5,28.7,27L28.7,27L28.7,27z"/>
|
||||
<path class="st7" d="M22.8,30.4v-6.2l4.2,4.1l0.2,0.2c2.5,2.5,3,6.3,1.3,9.3C25.2,36.9,22.8,33.9,22.8,30.4L22.8,30.4L22.8,30.4z"
|
||||
/>
|
||||
<path class="st7" d="M16.1,28.6l4.4-4.3v5.8l0,0.3c0,3.6-2.4,6.6-5.7,7.5C13.1,34.9,13.6,31.1,16.1,28.6L16.1,28.6L16.1,28.6z"/>
|
||||
<path class="st7" d="M12.7,22.6h6.2l-4.2,4.1L14.5,27C12,29.5,8.1,30,5.1,28.3C6.1,25,9.1,22.6,12.7,22.6L12.7,22.6L12.7,22.6z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 5.7 KiB |
25
lib/core/assets/images/background.svg
Normal file
@@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 20.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="2560px"
|
||||
height="2560px" viewBox="0 0 2560 2560" enable-background="new 0 0 2560 2560" xml:space="preserve">
|
||||
<g id="B">
|
||||
<rect y="0" fill="#FAFAFA" width="2560" height="2560"/>
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_1_" width="2560" height="2560"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" overflow="visible"/>
|
||||
</clipPath>
|
||||
<g clip-path="url(#SVGID_2_)">
|
||||
<circle opacity="0.8" fill="#8BC34A" cx="16" cy="6272" r="5120"/>
|
||||
<circle opacity="0.6" fill="#03A9F4" cx="4096" cy="2048" r="2560"/>
|
||||
<circle opacity="0.8" fill="#FF9800" cx="0" cy="-256" r="1920"/>
|
||||
<circle opacity="0.3" fill="#FFD600" cx="-384" cy="1280" r="1280"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Layer_2" display="none">
|
||||
<rect y="640" display="inline" fill="none" stroke="#FFFFFF" stroke-miterlimit="10" width="2560" height="1280"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
BIN
lib/core/assets/images/bpm-background.png
Normal file
After Width: | Height: | Size: 6.2 KiB |
BIN
lib/core/assets/images/ecm-background.png
Normal file
After Width: | Height: | Size: 4.9 KiB |
208
lib/core/assets/images/empty_doc_lib.svg
Normal file
@@ -0,0 +1,208 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="566px" height="165px" viewBox="0 0 566 165" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 3.8.3 (29802) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>empty_doc_lib</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs>
|
||||
<rect id="path-1" x="5.68434189e-14" y="-1.01962883e-12" width="78.1679389" height="78.1679389" rx="2"></rect>
|
||||
<filter x="-50%" y="-50%" width="200%" height="200%" filterUnits="objectBoundingBox" id="filter-2">
|
||||
<feOffset dx="0" dy="2" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||
<feGaussianBlur stdDeviation="1" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.24 0" type="matrix" in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix>
|
||||
<feOffset dx="0" dy="0" in="SourceAlpha" result="shadowOffsetOuter2"></feOffset>
|
||||
<feGaussianBlur stdDeviation="1" in="shadowOffsetOuter2" result="shadowBlurOuter2"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0" type="matrix" in="shadowBlurOuter2" result="shadowMatrixOuter2"></feColorMatrix>
|
||||
<feMerge>
|
||||
<feMergeNode in="shadowMatrixOuter1"></feMergeNode>
|
||||
<feMergeNode in="shadowMatrixOuter2"></feMergeNode>
|
||||
</feMerge>
|
||||
</filter>
|
||||
<rect id="path-3" x="-4.54747351e-13" y="5.68434189e-13" width="78.1679389" height="78.1679389" rx="2"></rect>
|
||||
<filter x="-50%" y="-50%" width="200%" height="200%" filterUnits="objectBoundingBox" id="filter-4">
|
||||
<feOffset dx="0" dy="2" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||
<feGaussianBlur stdDeviation="1" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.24 0" type="matrix" in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix>
|
||||
<feOffset dx="0" dy="0" in="SourceAlpha" result="shadowOffsetOuter2"></feOffset>
|
||||
<feGaussianBlur stdDeviation="1" in="shadowOffsetOuter2" result="shadowBlurOuter2"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0" type="matrix" in="shadowBlurOuter2" result="shadowMatrixOuter2"></feColorMatrix>
|
||||
<feMerge>
|
||||
<feMergeNode in="shadowMatrixOuter1"></feMergeNode>
|
||||
<feMergeNode in="shadowMatrixOuter2"></feMergeNode>
|
||||
</feMerge>
|
||||
</filter>
|
||||
<rect id="path-5" x="-1.08002496e-12" y="7.81597009e-14" width="78.1679389" height="78.1679389" rx="2"></rect>
|
||||
<filter x="-50%" y="-50%" width="200%" height="200%" filterUnits="objectBoundingBox" id="filter-6">
|
||||
<feOffset dx="0" dy="2" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||
<feGaussianBlur stdDeviation="1" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.24 0" type="matrix" in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix>
|
||||
<feOffset dx="0" dy="0" in="SourceAlpha" result="shadowOffsetOuter2"></feOffset>
|
||||
<feGaussianBlur stdDeviation="1" in="shadowOffsetOuter2" result="shadowBlurOuter2"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0" type="matrix" in="shadowBlurOuter2" result="shadowMatrixOuter2"></feColorMatrix>
|
||||
<feMerge>
|
||||
<feMergeNode in="shadowMatrixOuter1"></feMergeNode>
|
||||
<feMergeNode in="shadowMatrixOuter2"></feMergeNode>
|
||||
</feMerge>
|
||||
</filter>
|
||||
<rect id="path-7" x="1.29318778e-12" y="9.23705556e-14" width="78.1679389" height="78.1679389" rx="2"></rect>
|
||||
<filter x="-50%" y="-50%" width="200%" height="200%" filterUnits="objectBoundingBox" id="filter-8">
|
||||
<feOffset dx="0" dy="2" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||
<feGaussianBlur stdDeviation="1" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.24 0" type="matrix" in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix>
|
||||
<feOffset dx="0" dy="0" in="SourceAlpha" result="shadowOffsetOuter2"></feOffset>
|
||||
<feGaussianBlur stdDeviation="1" in="shadowOffsetOuter2" result="shadowBlurOuter2"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0" type="matrix" in="shadowBlurOuter2" result="shadowMatrixOuter2"></feColorMatrix>
|
||||
<feMerge>
|
||||
<feMergeNode in="shadowMatrixOuter1"></feMergeNode>
|
||||
<feMergeNode in="shadowMatrixOuter2"></feMergeNode>
|
||||
</feMerge>
|
||||
</filter>
|
||||
<rect id="path-9" x="-2.96651592e-13" y="-7.60280727e-13" width="78.1679389" height="78.1679389" rx="2"></rect>
|
||||
<filter x="-50%" y="-50%" width="200%" height="200%" filterUnits="objectBoundingBox" id="filter-10">
|
||||
<feOffset dx="0" dy="2" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||
<feGaussianBlur stdDeviation="1" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.24 0" type="matrix" in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix>
|
||||
<feOffset dx="0" dy="0" in="SourceAlpha" result="shadowOffsetOuter2"></feOffset>
|
||||
<feGaussianBlur stdDeviation="1" in="shadowOffsetOuter2" result="shadowBlurOuter2"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0" type="matrix" in="shadowBlurOuter2" result="shadowMatrixOuter2"></feColorMatrix>
|
||||
<feMerge>
|
||||
<feMergeNode in="shadowMatrixOuter1"></feMergeNode>
|
||||
<feMergeNode in="shadowMatrixOuter2"></feMergeNode>
|
||||
</feMerge>
|
||||
</filter>
|
||||
<rect id="path-11" x="3.48165941e-13" y="2.27373675e-13" width="78.1679389" height="78.1679389" rx="2"></rect>
|
||||
<filter x="-50%" y="-50%" width="200%" height="200%" filterUnits="objectBoundingBox" id="filter-12">
|
||||
<feOffset dx="0" dy="2" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||
<feGaussianBlur stdDeviation="1" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.24 0" type="matrix" in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix>
|
||||
<feOffset dx="0" dy="0" in="SourceAlpha" result="shadowOffsetOuter2"></feOffset>
|
||||
<feGaussianBlur stdDeviation="1" in="shadowOffsetOuter2" result="shadowBlurOuter2"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0" type="matrix" in="shadowBlurOuter2" result="shadowMatrixOuter2"></feColorMatrix>
|
||||
<feMerge>
|
||||
<feMergeNode in="shadowMatrixOuter1"></feMergeNode>
|
||||
<feMergeNode in="shadowMatrixOuter2"></feMergeNode>
|
||||
</feMerge>
|
||||
</filter>
|
||||
<rect id="path-13" x="0" y="-5.40012479e-13" width="78.1679389" height="78.1679389" rx="2"></rect>
|
||||
<filter x="-50%" y="-50%" width="200%" height="200%" filterUnits="objectBoundingBox" id="filter-14">
|
||||
<feOffset dx="0" dy="2" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||
<feGaussianBlur stdDeviation="1" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.24 0" type="matrix" in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix>
|
||||
<feOffset dx="0" dy="0" in="SourceAlpha" result="shadowOffsetOuter2"></feOffset>
|
||||
<feGaussianBlur stdDeviation="1" in="shadowOffsetOuter2" result="shadowBlurOuter2"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0" type="matrix" in="shadowBlurOuter2" result="shadowMatrixOuter2"></feColorMatrix>
|
||||
<feMerge>
|
||||
<feMergeNode in="shadowMatrixOuter1"></feMergeNode>
|
||||
<feMergeNode in="shadowMatrixOuter2"></feMergeNode>
|
||||
</feMerge>
|
||||
</filter>
|
||||
<rect id="path-15" x="0" y="0" width="78.1679389" height="78.1679389" rx="2"></rect>
|
||||
<filter x="-50%" y="-50%" width="200%" height="200%" filterUnits="objectBoundingBox" id="filter-16">
|
||||
<feOffset dx="0" dy="2" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||
<feGaussianBlur stdDeviation="1" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.24 0" type="matrix" in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix>
|
||||
<feOffset dx="0" dy="0" in="SourceAlpha" result="shadowOffsetOuter2"></feOffset>
|
||||
<feGaussianBlur stdDeviation="1" in="shadowOffsetOuter2" result="shadowBlurOuter2"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0" type="matrix" in="shadowBlurOuter2" result="shadowMatrixOuter2"></feColorMatrix>
|
||||
<feMerge>
|
||||
<feMergeNode in="shadowMatrixOuter1"></feMergeNode>
|
||||
<feMergeNode in="shadowMatrixOuter2"></feMergeNode>
|
||||
</feMerge>
|
||||
</filter>
|
||||
</defs>
|
||||
<g id="Symbols" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="empty-folder-state-desktop" transform="translate(-37.000000, -168.000000)">
|
||||
<g id="empty_doc_lib" transform="translate(38.000000, 169.000000)">
|
||||
<g id="Group-5" transform="translate(241.569490, 92.634375) rotate(-355.000000) translate(-241.569490, -92.634375) translate(202.069490, 53.134375)">
|
||||
<g id="Rectangle-1196-Copy-2">
|
||||
<use fill="black" fill-opacity="1" filter="url(#filter-2)" xlink:href="#path-1"></use>
|
||||
<use fill="#FFFFFF" fill-rule="evenodd" xlink:href="#path-1"></use>
|
||||
</g>
|
||||
<g id="filetype_video" transform="translate(9.770992, 9.770992)">
|
||||
<polygon id="Fill-1" points="0 58.6259542 58.6259542 58.6259542 58.6259542 0 0 0"></polygon>
|
||||
<path d="M39.0839695,21.9847328 L43.9694656,21.9847328 L43.9694656,17.0992366 L39.0839695,17.0992366 L39.0839695,21.9847328 Z M39.0839695,31.7557252 L43.9694656,31.7557252 L43.9694656,26.870229 L39.0839695,26.870229 L39.0839695,31.7557252 Z M39.0839695,41.5267176 L43.9694656,41.5267176 L43.9694656,36.6412214 L39.0839695,36.6412214 L39.0839695,41.5267176 Z M14.6564885,21.9847328 L19.5419847,21.9847328 L19.5419847,17.0992366 L14.6564885,17.0992366 L14.6564885,21.9847328 Z M14.6564885,31.7557252 L19.5419847,31.7557252 L19.5419847,26.870229 L14.6564885,26.870229 L14.6564885,31.7557252 Z M14.6564885,41.5267176 L19.5419847,41.5267176 L19.5419847,36.6412214 L14.6564885,36.6412214 L14.6564885,41.5267176 Z M43.9694656,7.32824427 L43.9694656,12.2137405 L39.0839695,12.2137405 L39.0839695,7.32824427 L19.5419847,7.32824427 L19.5419847,12.2137405 L14.6564885,12.2137405 L14.6564885,7.32824427 L9.77099237,7.32824427 L9.77099237,51.2977099 L14.6564885,51.2977099 L14.6564885,46.4122137 L19.5419847,46.4122137 L19.5419847,51.2977099 L39.0839695,51.2977099 L39.0839695,46.4122137 L43.9694656,46.4122137 L43.9694656,51.2977099 L48.8549618,51.2977099 L48.8549618,7.32824427 L43.9694656,7.32824427 Z" id="Fill-2" fill="#FFC107"></path>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Group-7" transform="translate(515.948329, 81.354522) rotate(-345.000000) translate(-515.948329, -81.354522) translate(476.448329, 41.854522)">
|
||||
<g id="Rectangle-1196-Copy-3">
|
||||
<use fill="black" fill-opacity="1" filter="url(#filter-4)" xlink:href="#path-3"></use>
|
||||
<use fill="#FFFFFF" fill-rule="evenodd" xlink:href="#path-3"></use>
|
||||
</g>
|
||||
<g id="filetype_image" transform="translate(9.770992, 9.770992)">
|
||||
<polygon id="Fill-1" points="0 58.6259542 58.6259542 58.6259542 58.6259542 0 0 0"></polygon>
|
||||
<path d="M20.7636031,32.9773435 L26.8704733,40.3178015 L35.4200916,29.3132214 L46.412458,43.9697099 L12.2139847,43.9697099 L20.7636031,32.9773435 Z M51.2979542,46.412458 L51.2979542,12.2139847 C51.2979542,9.51474809 49.1116947,7.32848855 46.412458,7.32848855 L12.2139847,7.32848855 C9.51474809,7.32848855 7.32848855,9.51474809 7.32848855,12.2139847 L7.32848855,46.412458 C7.32848855,49.1116947 9.51474809,51.2979542 12.2139847,51.2979542 L46.412458,51.2979542 C49.1116947,51.2979542 51.2979542,49.1116947 51.2979542,46.412458 L51.2979542,46.412458 Z" id="Fill-2" fill="#22BE73"></path>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Group-8" transform="translate(309.051884, 62.261808) rotate(-5.000000) translate(-309.051884, -62.261808) translate(269.551884, 22.761808)">
|
||||
<g id="Rectangle-1196-Copy-4">
|
||||
<use fill="black" fill-opacity="1" filter="url(#filter-6)" xlink:href="#path-5"></use>
|
||||
<use fill="#FFFFFF" fill-rule="evenodd" xlink:href="#path-5"></use>
|
||||
</g>
|
||||
<g id="filetype_googledocs" transform="translate(9.770992, 9.770992)">
|
||||
<polygon id="Fill-1" points="6.82121026e-13 58.6259542 58.6259542 58.6259542 58.6259542 -2.98427949e-13 6.82121026e-13 -2.98427949e-13"></polygon>
|
||||
<g id="Group-6" transform="translate(9.770992, 4.885496)">
|
||||
<path d="M7.32824427,21.9847328 L31.7557252,21.9847328 L31.7557252,19.5419847 L7.32824427,19.5419847 L7.32824427,21.9847328 Z M7.32824427,26.870229 L31.7557252,26.870229 L31.7557252,24.4274809 L7.32824427,24.4274809 L7.32824427,26.870229 Z M7.32824427,31.7557252 L31.7557252,31.7557252 L31.7557252,29.3129771 L7.32824427,29.3129771 L7.32824427,31.7557252 Z M7.32824427,36.6412214 L21.9847328,36.6412214 L21.9847328,34.1984733 L7.32824427,34.1984733 L7.32824427,36.6412214 Z M29.3129771,0 L4.88549618,0 C2.18625954,0 0.0244274809,2.18625954 0.0244274809,4.88549618 L0,43.9694656 C0,46.6687023 2.16183206,48.8549618 4.8610687,48.8549618 L34.1984733,48.8549618 C36.8977099,48.8549618 39.0839695,46.6687023 39.0839695,43.9694656 L39.0839695,9.77099237 L29.3129771,0 Z" id="Fill-2" fill="#2979FF"></path>
|
||||
<polygon id="Fill-4" fill-opacity="0.5" fill="#FFFFFF" points="29.3129771 9.77099237 29.3129771 -2.84217094e-14 39.0839695 9.77099237"></polygon>
|
||||
<polygon id="Fill-5" fill-opacity="0.2" fill="#000000" points="39.0839695 9.77099237 39.0839695 19.5419847 29.3129771 9.77099237"></polygon>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Group-9" transform="translate(155.408682, 49.364493) rotate(-345.000000) translate(-155.408682, -49.364493) translate(115.908682, 9.864493)">
|
||||
<g id="Rectangle-1196-Copy-5">
|
||||
<use fill="black" fill-opacity="1" filter="url(#filter-8)" xlink:href="#path-7"></use>
|
||||
<use fill="#FFFFFF" fill-rule="evenodd" xlink:href="#path-7"></use>
|
||||
</g>
|
||||
<g id="filetype_pdf" transform="translate(9.770992, 9.770992)">
|
||||
<polygon id="Fill-1" points="0 58.6259542 58.6259542 58.6259542 58.6259542 0 0 0"></polygon>
|
||||
<path d="M45.1888855,25.5877863 L45.1888855,21.9187786 L37.853313,21.9187786 L37.853313,36.5923664 L41.5198779,36.5923664 L41.5198779,31.7777099 L45.1888855,31.7777099 L45.1888855,28.1087023 L41.5198779,28.1087023 L41.5198779,25.5877863 L45.1888855,25.5877863 Z M29.3696489,32.9233588 L31.7757557,32.9233588 L31.7757557,25.5877863 L29.3696489,25.5877863 L29.3696489,32.9233588 Z M35.4447634,32.9233588 L35.4447634,25.5877863 C35.4447634,24.5960305 35.1027786,23.7361832 34.4139237,23.0082443 C33.7275115,22.2827481 32.8481221,21.9187786 31.7781985,21.9187786 L25.703084,21.9187786 L25.703084,36.5923664 L31.7781985,36.5923664 C32.8481221,36.5923664 33.7275115,36.2308397 34.4139237,35.5029008 C35.1027786,34.7774046 35.4447634,33.9175573 35.4447634,32.9233588 L35.4447634,32.9233588 Z M17.1070534,28.1087023 L19.5131603,28.1087023 L19.5131603,25.5877863 L17.1070534,25.5877863 L17.1070534,28.1087023 Z M23.1821679,28.1087023 L23.1821679,25.5877863 C23.1821679,24.5960305 22.8181985,23.7361832 22.0927023,23.0082443 C21.3672061,22.2827481 20.5073588,21.9187786 19.5131603,21.9187786 L13.4380458,21.9187786 L13.4380458,36.5923664 L17.1070534,36.5923664 L17.1070534,31.7777099 L19.5131603,31.7777099 C20.5073588,31.7777099 21.3672061,31.4161832 22.0927023,30.6882443 C22.8181985,29.9627481 23.1821679,29.1029008 23.1821679,28.1087023 L23.1821679,28.1087023 Z M46.483542,7.32824427 C47.783084,7.32824427 48.9091908,7.8070229 49.8643053,8.7621374 C50.8218626,9.71725191 51.2981985,10.8433588 51.2981985,12.1429008 L51.2981985,46.3682443 C51.2981985,47.670229 50.8218626,48.8158779 49.8643053,49.8076336 C48.9091908,50.8018321 47.783084,51.2977099 46.483542,51.2977099 L12.2581985,51.2977099 C10.9586565,51.2977099 9.81300763,50.8018321 8.81880916,49.8076336 C7.82461069,48.8158779 7.32873282,47.670229 7.32873282,46.3682443 L7.32873282,12.1429008 C7.32873282,10.8433588 7.82461069,9.71725191 8.81880916,8.7621374 C9.81300763,7.8070229 10.9586565,7.32824427 12.2581985,7.32824427 L46.483542,7.32824427 Z" id="Fill-2" fill="#E91E63"></path>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Group-12" transform="translate(49.364493, 62.584254) rotate(-15.000000) translate(-49.364493, -62.584254) translate(9.864493, 23.084254)">
|
||||
<g id="Rectangle-1196-Copy-7">
|
||||
<use fill="black" fill-opacity="1" filter="url(#filter-10)" xlink:href="#path-9"></use>
|
||||
<use fill="#FFFFFF" fill-rule="evenodd" xlink:href="#path-9"></use>
|
||||
</g>
|
||||
<g id="filetype_forms" transform="translate(9.770992, 9.770992)">
|
||||
<polygon id="Fill-1" points="0 58.6259542 58.6259542 58.6259542 58.6259542 0 0 0"></polygon>
|
||||
<path d="M24.4274809,24.4250382 L41.5267176,24.4250382 L41.5267176,19.539542 L24.4274809,19.539542 L24.4274809,24.4250382 Z M24.4274809,31.7532824 L41.5267176,31.7532824 L41.5267176,26.8677863 L24.4274809,26.8677863 L24.4274809,31.7532824 Z M24.4274809,39.0839695 L41.5267176,39.0839695 L41.5267176,34.1984733 L24.4274809,34.1984733 L24.4274809,39.0839695 Z M17.0992366,24.4250382 L21.9847328,24.4250382 L21.9847328,19.539542 L17.0992366,19.539542 L17.0992366,24.4250382 Z M17.0992366,31.7532824 L21.9847328,31.7532824 L21.9847328,26.8677863 L17.0992366,26.8677863 L17.0992366,31.7532824 Z M17.0992366,39.0839695 L21.9847328,39.0839695 L21.9847328,34.1984733 L17.0992366,34.1984733 L17.0992366,39.0839695 Z M43.9694656,9.77099237 L14.6564885,9.77099237 C11.9694656,9.77099237 9.77099237,11.9694656 9.77099237,14.6564885 L9.77099237,43.9694656 C9.77099237,46.6564885 11.9694656,48.8549618 14.6564885,48.8549618 L43.9694656,48.8549618 C46.6564885,48.8549618 48.8549618,46.6564885 48.8549618,43.9694656 L48.8549618,14.6564885 C48.8549618,11.9694656 46.6564885,9.77099237 43.9694656,9.77099237 L43.9694656,9.77099237 Z" id="Fill-2" fill="#651FFF"></path>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Group-11" transform="translate(107.814782, 114.998541) rotate(-10.000000) translate(-107.814782, -114.998541) translate(68.314782, 75.498541)">
|
||||
<g id="Rectangle-1196-Copy-6">
|
||||
<use fill="black" fill-opacity="1" filter="url(#filter-12)" xlink:href="#path-11"></use>
|
||||
<use fill="#FFFFFF" fill-rule="evenodd" xlink:href="#path-11"></use>
|
||||
</g>
|
||||
<g id="filetype_excel" transform="translate(9.770992, 9.770992)">
|
||||
<polygon id="Fill-1" points="-5.68434189e-14 58.6259542 58.6259542 58.6259542 58.6259542 -1.56319402e-13 -5.68434189e-14 -1.56319402e-13"></polygon>
|
||||
<g id="Group-10" transform="translate(4.885496, 4.885496)" fill="#22BE73">
|
||||
<path d="M47.1621374,41.632 L28.848855,41.632 L28.848855,38.3025344 L33.2873282,38.3025344 L33.2873282,34.4161221 L28.848855,34.4161221 L28.848855,32.1981069 L33.2873282,32.1981069 L33.2873282,28.3116947 L28.848855,28.3116947 L28.848855,26.0936794 L33.2873282,26.0936794 L33.2873282,22.2072672 L28.848855,22.2072672 L28.848855,19.9868092 L33.2873282,19.9868092 L33.2873282,16.1028397 L28.848855,16.1028397 L28.848855,13.8823817 L33.2873282,13.8823817 L33.2873282,9.99841221 L28.848855,9.99841221 L28.848855,6.66894656 L47.1621374,6.66894656 L47.1621374,41.632 L47.1621374,41.632 Z M16.3444275,33.1141374 C15.4015267,30.7984122 14.2509924,28.5632977 13.5743511,26.1425344 C12.819542,28.3947481 11.7422901,30.5223817 10.8775573,32.730626 C9.6610687,32.7135267 8.4470229,32.6646718 7.23053435,32.613374 C8.65709924,29.821313 10.0348092,27.0072672 11.5053435,24.2323053 C10.2546565,21.3742901 8.88427481,18.572458 7.59694656,15.731542 C8.81832061,15.6582595 10.0396947,15.5874198 11.2610687,15.5190229 C12.0867176,17.690626 12.9929771,19.832916 13.6745038,22.0582595 C14.4073282,19.6985649 15.5016794,17.4781069 16.4372519,15.1990229 C17.6928244,15.1086412 18.9532824,15.032916 20.2112977,14.9718473 C18.7309924,18.0057405 17.2433588,21.0420763 15.7337405,24.0661985 C17.260458,27.1758168 18.8189313,30.2610076 20.3505344,33.3681832 C19.0143511,33.2900153 17.6806107,33.2069618 16.3444275,33.1141374 L16.3444275,33.1141374 Z M48.8329771,37.2203969 C48.8280916,27.591084 48.8158779,17.961771 48.8427481,8.32757252 C48.8036641,7.38467176 48.8720611,6.34161832 48.300458,5.51841221 C47.4845802,4.9590229 46.4512977,5.0249771 45.5132824,4.98589313 C39.9584733,5.01520611 34.4036641,5.00299237 28.848855,5.00299237 L28.848855,0.564519084 L25.551145,0.564519084 C17.0381679,2.06680916 8.5178626,3.52757252 4.68958206e-13,5.00787786 L4.68958206e-13,43.852458 C8.46900763,45.3327634 16.9429008,46.7544427 25.4021374,48.2909313 L28.848855,48.2909313 L28.848855,43.2979542 C34.6039695,43.2857405 40.359084,43.3126107 46.1068702,43.2979542 C47.0351145,43.2588702 48.4225954,43.2295573 48.6448855,42.0765802 C48.9819847,40.4839084 48.8036641,38.8350534 48.8329771,37.2203969 L48.8329771,37.2203969 Z" id="Fill-2"></path>
|
||||
<path d="M35.5077863,13.8821374 L43.2781679,13.8821374 L43.2781679,9.99816794 L35.5077863,9.99816794 L35.5077863,13.8821374 Z M35.5077863,19.9865649 L43.2781679,19.9865649 L43.2781679,16.1025954 L35.5077863,16.1025954 L35.5077863,19.9865649 Z M35.5077863,26.0909924 L43.2781679,26.0909924 L43.2781679,22.2070229 L35.5077863,22.2070229 L35.5077863,26.0909924 Z M35.5077863,32.1954198 L43.2781679,32.1954198 L43.2781679,28.3114504 L35.5077863,28.3114504 L35.5077863,32.1954198 Z M35.5077863,38.3022901 L43.2781679,38.3022901 L43.2781679,34.4183206 L35.5077863,34.4183206 L35.5077863,38.3022901 Z" id="Combined-Shape"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Group-4" transform="translate(388.820630, 86.064353) rotate(-350.000000) translate(-388.820630, -86.064353) translate(349.320630, 46.564353)">
|
||||
<g id="Rectangle-1196-Copy">
|
||||
<use fill="black" fill-opacity="1" filter="url(#filter-14)" xlink:href="#path-13"></use>
|
||||
<use fill="#FFFFFF" fill-rule="evenodd" xlink:href="#path-13"></use>
|
||||
</g>
|
||||
<g id="filetype_audio" transform="translate(9.770992, 9.770992)">
|
||||
<polygon id="Fill-1" points="-1.13686838e-13 58.6259542 58.6259542 58.6259542 58.6259542 -6.39488462e-14 -1.13686838e-13 -6.39488462e-14"></polygon>
|
||||
<path d="M29.3129771,7.32824427 L43.9694656,7.32824427 L43.9694656,17.0601527 L34.2375573,17.0601527 L34.2375573,41.5658015 C34.2375573,44.2381679 33.2629008,46.5270229 31.3160305,48.4348092 C29.3691603,50.3450382 27.0607634,51.2977099 24.3883969,51.2977099 C21.7160305,51.2977099 19.4271756,50.3450382 17.5193893,48.4348092 C15.6091603,46.5270229 14.6564885,44.2381679 14.6564885,41.5658015 C14.6564885,38.8934351 15.6091603,36.5850382 17.5193893,34.6381679 C19.4271756,32.6912977 21.7160305,31.7166412 24.3883969,31.7166412 C25.9932824,31.7166412 27.6323664,32.1758779 29.3129771,33.0919084 L29.3129771,7.32824427 Z" id="Fill-2" fill="#E91E63"></path>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Group-2" transform="translate(411.603053, 1.221374)">
|
||||
<g id="Group-3">
|
||||
<g id="Rectangle-1196">
|
||||
<use fill="black" fill-opacity="1" filter="url(#filter-16)" xlink:href="#path-15"></use>
|
||||
<use fill="#FFFFFF" fill-rule="evenodd" xlink:href="#path-15"></use>
|
||||
</g>
|
||||
<polygon id="Fill-1" points="9.77099237 68.3969466 68.3969466 68.3969466 68.3969466 9.77099237 9.77099237 9.77099237"></polygon>
|
||||
</g>
|
||||
<g id="filetype_book" transform="translate(9.770992, 9.770992)">
|
||||
<polygon id="Fill-1" points="0 58.6259542 58.6259542 58.6259542 58.6259542 0 0 0"></polygon>
|
||||
<path d="M14.6564885,9.77099237 L26.870229,9.77099237 L26.870229,29.3129771 L20.7633588,25.648855 L14.6564885,29.3129771 L14.6564885,9.77099237 Z M43.9694656,4.88549618 L14.6564885,4.88549618 C11.9572519,4.88549618 9.77099237,7.07175573 9.77099237,9.77099237 L9.77099237,48.8549618 C9.77099237,51.5541985 11.9572519,53.740458 14.6564885,53.740458 L43.9694656,53.740458 C46.6687023,53.740458 48.8549618,51.5541985 48.8549618,48.8549618 L48.8549618,9.77099237 C48.8549618,7.07175573 46.6687023,4.88549618 43.9694656,4.88549618 L43.9694656,4.88549618 Z" id="Fill-2" fill="#FF6D40"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 26 KiB |
144
lib/core/assets/images/ft_ic_archive.svg
Executable file
@@ -0,0 +1,144 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
|
||||
height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{clip-path:url(#SVGID_2_);}
|
||||
.st2{fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st3{opacity:0.4;}
|
||||
.st4{clip-path:url(#SVGID_4_);fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st5{clip-path:url(#SVGID_4_);}
|
||||
.st6{fill:#FFFFFF;}
|
||||
.st7{fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:10;}
|
||||
.st8{fill:#22BE73;}
|
||||
.st9{fill:#D9E021;}
|
||||
.st10{fill-rule:evenodd;clip-rule:evenodd;}
|
||||
.st11{fill:#2979FF;}
|
||||
.st12{fill:#00B0FF;}
|
||||
.st13{fill:#FF6D40;}
|
||||
.st14{fill:#FFC107;}
|
||||
.st15{fill:#E91E63;}
|
||||
.st16{opacity:0.5;fill:#FFFFFF;}
|
||||
.st17{opacity:0.2;}
|
||||
.st18{fill:#651FFF;}
|
||||
.st19{fill-rule:evenodd;clip-rule:evenodd;fill:#E91E63;}
|
||||
.st20{display:none;}
|
||||
</style>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_border" viewBox="0 -48 48 48">
|
||||
<rect y="-48" class="st0" width="48" height="48"/>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_grid" viewBox="0 -48 48 48">
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_1_" x="0" y="-48" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st1">
|
||||
<g>
|
||||
<line class="st2" x1="2" y1="-48" x2="2" y2="0"/>
|
||||
<line class="st2" x1="4" y1="-48" x2="4" y2="0"/>
|
||||
<line class="st2" x1="6" y1="-48" x2="6" y2="0"/>
|
||||
<line class="st2" x1="8" y1="-48" x2="8" y2="0"/>
|
||||
<line class="st2" x1="10" y1="-48" x2="10" y2="0"/>
|
||||
<line class="st2" x1="12" y1="-48" x2="12" y2="0"/>
|
||||
<line class="st2" x1="14" y1="-48" x2="14" y2="0"/>
|
||||
<line class="st2" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st2" x1="18" y1="-48" x2="18" y2="0"/>
|
||||
<line class="st2" x1="20" y1="-48" x2="20" y2="0"/>
|
||||
<line class="st2" x1="22" y1="-48" x2="22" y2="0"/>
|
||||
<line class="st2" x1="24" y1="-48" x2="24" y2="0"/>
|
||||
<line class="st2" x1="26" y1="-48" x2="26" y2="0"/>
|
||||
<line class="st2" x1="28" y1="-48" x2="28" y2="0"/>
|
||||
<line class="st2" x1="30" y1="-48" x2="30" y2="0"/>
|
||||
<line class="st2" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st2" x1="34" y1="-48" x2="34" y2="0"/>
|
||||
<line class="st2" x1="36" y1="-48" x2="36" y2="0"/>
|
||||
<line class="st2" x1="38" y1="-48" x2="38" y2="0"/>
|
||||
<line class="st2" x1="40" y1="-48" x2="40" y2="0"/>
|
||||
<line class="st2" x1="42" y1="-48" x2="42" y2="0"/>
|
||||
<line class="st2" x1="44" y1="-48" x2="44" y2="0"/>
|
||||
<line class="st2" x1="46" y1="-48" x2="46" y2="0"/>
|
||||
</g>
|
||||
<g>
|
||||
<line class="st2" x1="0" y1="-2" x2="48" y2="-2"/>
|
||||
<line class="st2" x1="0" y1="-4" x2="48" y2="-4"/>
|
||||
<line class="st2" x1="0" y1="-6" x2="48" y2="-6"/>
|
||||
<line class="st2" x1="0" y1="-8" x2="48" y2="-8"/>
|
||||
<line class="st2" x1="0" y1="-10" x2="48" y2="-10"/>
|
||||
<line class="st2" x1="0" y1="-12" x2="48" y2="-12"/>
|
||||
<line class="st2" x1="0" y1="-14" x2="48" y2="-14"/>
|
||||
<line class="st2" x1="0" y1="-16" x2="48" y2="-16"/>
|
||||
<line class="st2" x1="0" y1="-18" x2="48" y2="-18"/>
|
||||
<line class="st2" x1="0" y1="-20" x2="48" y2="-20"/>
|
||||
<line class="st2" x1="0" y1="-22" x2="48" y2="-22"/>
|
||||
<line class="st2" x1="0" y1="-24" x2="48" y2="-24"/>
|
||||
<line class="st2" x1="0" y1="-26" x2="48" y2="-26"/>
|
||||
<line class="st2" x1="0" y1="-28" x2="48" y2="-28"/>
|
||||
<line class="st2" x1="0" y1="-30" x2="48" y2="-30"/>
|
||||
<line class="st2" x1="0" y1="-32" x2="48" y2="-32"/>
|
||||
<line class="st2" x1="0" y1="-34" x2="48" y2="-34"/>
|
||||
<line class="st2" x1="0" y1="-36" x2="48" y2="-36"/>
|
||||
<line class="st2" x1="0" y1="-38" x2="48" y2="-38"/>
|
||||
<line class="st2" x1="0" y1="-40" x2="48" y2="-40"/>
|
||||
<line class="st2" x1="0" y1="-42" x2="48" y2="-42"/>
|
||||
<line class="st2" x1="0" y1="-44" x2="48" y2="-44"/>
|
||||
<line class="st2" x1="0" y1="-46" x2="48" y2="-46"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M47.8-0.2v-47.5H0.2v47.5H47.8 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_keylines" viewBox="0 -48 48 48">
|
||||
<g class="st3">
|
||||
<defs>
|
||||
<rect id="SVGID_3_" x="0" y="-48" class="st3" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_4_">
|
||||
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<line class="st4" x1="24" y1="0" x2="24" y2="-48"/>
|
||||
<line class="st4" x1="48" y1="-24" x2="0" y2="-24"/>
|
||||
<line class="st4" x1="48" y1="-16" x2="0" y2="-16"/>
|
||||
<line class="st4" x1="48" y1="-32" x2="0" y2="-32"/>
|
||||
<line class="st4" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st4" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st4" x1="47.7" y1="-0.3" x2="0.2" y2="-47.8"/>
|
||||
<line class="st4" x1="0.2" y1="-0.3" x2="47.7" y2="-47.8"/>
|
||||
<path class="st4" d="M24-14c-5.5,0-10-4.5-10-10c0-5.5,4.5-10,10-10c5.5,0,10,4.5,10,10C34-18.5,29.5-14,24-14z"/>
|
||||
<path class="st4" d="M24-4C12.9-4,4-12.9,4-24c0-11.1,8.9-20,20-20c11.1,0,20,8.9,20,20C44-12.9,35.1-4,24-4z"/>
|
||||
<path class="st4" d="M38-6H10c-2.2,0-4-1.8-4-4v-28c0-2.2,1.8-4,4-4h28c2.2,0,4,1.8,4,4v28C42-7.8,40.2-6,38-6z"/>
|
||||
<path class="st4" d="M40-8H8c-2.2,0-4-1.8-4-4v-24c0-2.2,1.8-4,4-4h32c2.2,0,4,1.8,4,4l0,24C44-9.8,42.2-8,40-8z"/>
|
||||
<path class="st4" d="M40-40v32c0,2.2-1.8,4-4,4H12C9.8-4,8-5.8,8-8v-32c0-2.2,1.8-4,4-4h24C38.2-44,40-42.2,40-40z"/>
|
||||
<g class="st5">
|
||||
<path d="M47.7-0.3v-47.5H0.2v47.5H47.7 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<g id="label">
|
||||
</g>
|
||||
<g id="border">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_border" width="48" height="48" y="-48" transform="matrix(0.5 0 0 -0.5 3.916831e-04 5.698877e-05)" style="overflow:visible;"/>
|
||||
</g>
|
||||
<g id="icon">
|
||||
<g>
|
||||
<path class="st12" d="M20.5,5.2l-1.4-1.7C18.9,3.2,18.5,3,18,3H6C5.5,3,5.1,3.2,4.8,3.5L3.5,5.2C3.2,5.6,3,6,3,6.5V19
|
||||
c0,1.1,0.9,2,2,2h14c1.1,0,2-0.9,2-2V6.5C21,6,20.8,5.6,20.5,5.2z M17,11h-2v2h2v2h-2v2h2v2h-2v-2h-2v-2h2v-2h-2v-2h2V9h-2V7h2v2
|
||||
h2V11z M5.1,5l0.8-1h12l0.9,1H5.1z"/>
|
||||
<rect x="0" y="0" class="st0" width="24" height="24"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="grid" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_grid" width="48" height="48" id="XMLID_24_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.139775e-04 -2.620241e-04)" style="display:inline;overflow:visible;opacity:0.15;"/>
|
||||
</g>
|
||||
<g id="keylines" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_keylines" width="48" height="48" id="XMLID_22_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.709663e-04 -2.924798e-04)" style="display:inline;overflow:visible;"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.6 KiB |
143
lib/core/assets/images/ft_ic_audio.svg
Executable file
@@ -0,0 +1,143 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
|
||||
height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{clip-path:url(#SVGID_2_);}
|
||||
.st2{fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st3{opacity:0.4;}
|
||||
.st4{clip-path:url(#SVGID_4_);fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st5{clip-path:url(#SVGID_4_);}
|
||||
.st6{fill:#FFFFFF;}
|
||||
.st7{fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:10;}
|
||||
.st8{fill:#22BE73;}
|
||||
.st9{fill:#D9E021;}
|
||||
.st10{fill-rule:evenodd;clip-rule:evenodd;}
|
||||
.st11{fill:#2979FF;}
|
||||
.st12{fill:#00B0FF;}
|
||||
.st13{fill:#FF6D40;}
|
||||
.st14{fill:#FFC107;}
|
||||
.st15{fill:#E91E63;}
|
||||
.st16{opacity:0.5;fill:#FFFFFF;}
|
||||
.st17{opacity:0.2;}
|
||||
.st18{fill:#651FFF;}
|
||||
.st19{fill-rule:evenodd;clip-rule:evenodd;fill:#E91E63;}
|
||||
.st20{display:none;}
|
||||
</style>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_border" viewBox="0 -48 48 48">
|
||||
<rect y="-48" class="st0" width="48" height="48"/>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_grid" viewBox="0 -48 48 48">
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_1_" x="0" y="-48" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st1">
|
||||
<g>
|
||||
<line class="st2" x1="2" y1="-48" x2="2" y2="0"/>
|
||||
<line class="st2" x1="4" y1="-48" x2="4" y2="0"/>
|
||||
<line class="st2" x1="6" y1="-48" x2="6" y2="0"/>
|
||||
<line class="st2" x1="8" y1="-48" x2="8" y2="0"/>
|
||||
<line class="st2" x1="10" y1="-48" x2="10" y2="0"/>
|
||||
<line class="st2" x1="12" y1="-48" x2="12" y2="0"/>
|
||||
<line class="st2" x1="14" y1="-48" x2="14" y2="0"/>
|
||||
<line class="st2" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st2" x1="18" y1="-48" x2="18" y2="0"/>
|
||||
<line class="st2" x1="20" y1="-48" x2="20" y2="0"/>
|
||||
<line class="st2" x1="22" y1="-48" x2="22" y2="0"/>
|
||||
<line class="st2" x1="24" y1="-48" x2="24" y2="0"/>
|
||||
<line class="st2" x1="26" y1="-48" x2="26" y2="0"/>
|
||||
<line class="st2" x1="28" y1="-48" x2="28" y2="0"/>
|
||||
<line class="st2" x1="30" y1="-48" x2="30" y2="0"/>
|
||||
<line class="st2" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st2" x1="34" y1="-48" x2="34" y2="0"/>
|
||||
<line class="st2" x1="36" y1="-48" x2="36" y2="0"/>
|
||||
<line class="st2" x1="38" y1="-48" x2="38" y2="0"/>
|
||||
<line class="st2" x1="40" y1="-48" x2="40" y2="0"/>
|
||||
<line class="st2" x1="42" y1="-48" x2="42" y2="0"/>
|
||||
<line class="st2" x1="44" y1="-48" x2="44" y2="0"/>
|
||||
<line class="st2" x1="46" y1="-48" x2="46" y2="0"/>
|
||||
</g>
|
||||
<g>
|
||||
<line class="st2" x1="0" y1="-2" x2="48" y2="-2"/>
|
||||
<line class="st2" x1="0" y1="-4" x2="48" y2="-4"/>
|
||||
<line class="st2" x1="0" y1="-6" x2="48" y2="-6"/>
|
||||
<line class="st2" x1="0" y1="-8" x2="48" y2="-8"/>
|
||||
<line class="st2" x1="0" y1="-10" x2="48" y2="-10"/>
|
||||
<line class="st2" x1="0" y1="-12" x2="48" y2="-12"/>
|
||||
<line class="st2" x1="0" y1="-14" x2="48" y2="-14"/>
|
||||
<line class="st2" x1="0" y1="-16" x2="48" y2="-16"/>
|
||||
<line class="st2" x1="0" y1="-18" x2="48" y2="-18"/>
|
||||
<line class="st2" x1="0" y1="-20" x2="48" y2="-20"/>
|
||||
<line class="st2" x1="0" y1="-22" x2="48" y2="-22"/>
|
||||
<line class="st2" x1="0" y1="-24" x2="48" y2="-24"/>
|
||||
<line class="st2" x1="0" y1="-26" x2="48" y2="-26"/>
|
||||
<line class="st2" x1="0" y1="-28" x2="48" y2="-28"/>
|
||||
<line class="st2" x1="0" y1="-30" x2="48" y2="-30"/>
|
||||
<line class="st2" x1="0" y1="-32" x2="48" y2="-32"/>
|
||||
<line class="st2" x1="0" y1="-34" x2="48" y2="-34"/>
|
||||
<line class="st2" x1="0" y1="-36" x2="48" y2="-36"/>
|
||||
<line class="st2" x1="0" y1="-38" x2="48" y2="-38"/>
|
||||
<line class="st2" x1="0" y1="-40" x2="48" y2="-40"/>
|
||||
<line class="st2" x1="0" y1="-42" x2="48" y2="-42"/>
|
||||
<line class="st2" x1="0" y1="-44" x2="48" y2="-44"/>
|
||||
<line class="st2" x1="0" y1="-46" x2="48" y2="-46"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M47.8-0.2v-47.5H0.2v47.5H47.8 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_keylines" viewBox="0 -48 48 48">
|
||||
<g class="st3">
|
||||
<defs>
|
||||
<rect id="SVGID_3_" x="0" y="-48" class="st3" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_4_">
|
||||
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<line class="st4" x1="24" y1="0" x2="24" y2="-48"/>
|
||||
<line class="st4" x1="48" y1="-24" x2="0" y2="-24"/>
|
||||
<line class="st4" x1="48" y1="-16" x2="0" y2="-16"/>
|
||||
<line class="st4" x1="48" y1="-32" x2="0" y2="-32"/>
|
||||
<line class="st4" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st4" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st4" x1="47.7" y1="-0.3" x2="0.2" y2="-47.8"/>
|
||||
<line class="st4" x1="0.2" y1="-0.3" x2="47.7" y2="-47.8"/>
|
||||
<path class="st4" d="M24-14c-5.5,0-10-4.5-10-10c0-5.5,4.5-10,10-10c5.5,0,10,4.5,10,10C34-18.5,29.5-14,24-14z"/>
|
||||
<path class="st4" d="M24-4C12.9-4,4-12.9,4-24c0-11.1,8.9-20,20-20c11.1,0,20,8.9,20,20C44-12.9,35.1-4,24-4z"/>
|
||||
<path class="st4" d="M38-6H10c-2.2,0-4-1.8-4-4v-28c0-2.2,1.8-4,4-4h28c2.2,0,4,1.8,4,4v28C42-7.8,40.2-6,38-6z"/>
|
||||
<path class="st4" d="M40-8H8c-2.2,0-4-1.8-4-4v-24c0-2.2,1.8-4,4-4h32c2.2,0,4,1.8,4,4l0,24C44-9.8,42.2-8,40-8z"/>
|
||||
<path class="st4" d="M40-40v32c0,2.2-1.8,4-4,4H12C9.8-4,8-5.8,8-8v-32c0-2.2,1.8-4,4-4h24C38.2-44,40-42.2,40-40z"/>
|
||||
<g class="st5">
|
||||
<path d="M47.7-0.3v-47.5H0.2v47.5H47.7 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<g id="label">
|
||||
</g>
|
||||
<g id="border">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_border" width="48" height="48" y="-48" transform="matrix(0.5 0 0 -0.5 3.916831e-04 5.698877e-05)" style="overflow:visible;"/>
|
||||
</g>
|
||||
<g id="icon">
|
||||
<g>
|
||||
<path class="st0" d="M0,0h24v24H0V0z"/>
|
||||
<path class="st15" d="M12,3v9.3c-0.5-0.2-1-0.3-1.5-0.3C8,12,6,14,6,16.5S8,21,10.5,21c2.3,0,4.2-1.8,4.4-4H15V6h4V3H12z"/>
|
||||
<rect x="0" y="0" class="st0" width="24" height="24"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="grid" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_grid" width="48" height="48" id="XMLID_32_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.139775e-04 -2.620241e-04)" style="display:inline;overflow:visible;opacity:0.15;"/>
|
||||
</g>
|
||||
<g id="keylines" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_keylines" width="48" height="48" id="XMLID_30_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.709663e-04 -2.924798e-04)" style="display:inline;overflow:visible;"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.5 KiB |
142
lib/core/assets/images/ft_ic_database.svg
Executable file
@@ -0,0 +1,142 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
|
||||
height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{clip-path:url(#SVGID_2_);}
|
||||
.st2{fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st3{opacity:0.4;}
|
||||
.st4{clip-path:url(#SVGID_4_);fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st5{clip-path:url(#SVGID_4_);}
|
||||
.st6{fill:#FFFFFF;}
|
||||
.st7{fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:10;}
|
||||
.st8{fill:#22BE73;}
|
||||
.st9{fill:#D9E021;}
|
||||
.st10{fill-rule:evenodd;clip-rule:evenodd;}
|
||||
.st11{fill:#2979FF;}
|
||||
.st12{fill:#00B0FF;}
|
||||
.st13{fill:#FF6D40;}
|
||||
.st14{fill:#FFC107;}
|
||||
.st15{fill:#E91E63;}
|
||||
.st16{opacity:0.5;fill:#FFFFFF;}
|
||||
.st17{opacity:0.2;}
|
||||
.st18{fill:#651FFF;}
|
||||
.st19{fill-rule:evenodd;clip-rule:evenodd;fill:#E91E63;}
|
||||
.st20{display:none;}
|
||||
</style>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_border" viewBox="0 -48 48 48">
|
||||
<rect y="-48" class="st0" width="48" height="48"/>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_grid" viewBox="0 -48 48 48">
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_1_" x="0" y="-48" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st1">
|
||||
<g>
|
||||
<line class="st2" x1="2" y1="-48" x2="2" y2="0"/>
|
||||
<line class="st2" x1="4" y1="-48" x2="4" y2="0"/>
|
||||
<line class="st2" x1="6" y1="-48" x2="6" y2="0"/>
|
||||
<line class="st2" x1="8" y1="-48" x2="8" y2="0"/>
|
||||
<line class="st2" x1="10" y1="-48" x2="10" y2="0"/>
|
||||
<line class="st2" x1="12" y1="-48" x2="12" y2="0"/>
|
||||
<line class="st2" x1="14" y1="-48" x2="14" y2="0"/>
|
||||
<line class="st2" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st2" x1="18" y1="-48" x2="18" y2="0"/>
|
||||
<line class="st2" x1="20" y1="-48" x2="20" y2="0"/>
|
||||
<line class="st2" x1="22" y1="-48" x2="22" y2="0"/>
|
||||
<line class="st2" x1="24" y1="-48" x2="24" y2="0"/>
|
||||
<line class="st2" x1="26" y1="-48" x2="26" y2="0"/>
|
||||
<line class="st2" x1="28" y1="-48" x2="28" y2="0"/>
|
||||
<line class="st2" x1="30" y1="-48" x2="30" y2="0"/>
|
||||
<line class="st2" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st2" x1="34" y1="-48" x2="34" y2="0"/>
|
||||
<line class="st2" x1="36" y1="-48" x2="36" y2="0"/>
|
||||
<line class="st2" x1="38" y1="-48" x2="38" y2="0"/>
|
||||
<line class="st2" x1="40" y1="-48" x2="40" y2="0"/>
|
||||
<line class="st2" x1="42" y1="-48" x2="42" y2="0"/>
|
||||
<line class="st2" x1="44" y1="-48" x2="44" y2="0"/>
|
||||
<line class="st2" x1="46" y1="-48" x2="46" y2="0"/>
|
||||
</g>
|
||||
<g>
|
||||
<line class="st2" x1="0" y1="-2" x2="48" y2="-2"/>
|
||||
<line class="st2" x1="0" y1="-4" x2="48" y2="-4"/>
|
||||
<line class="st2" x1="0" y1="-6" x2="48" y2="-6"/>
|
||||
<line class="st2" x1="0" y1="-8" x2="48" y2="-8"/>
|
||||
<line class="st2" x1="0" y1="-10" x2="48" y2="-10"/>
|
||||
<line class="st2" x1="0" y1="-12" x2="48" y2="-12"/>
|
||||
<line class="st2" x1="0" y1="-14" x2="48" y2="-14"/>
|
||||
<line class="st2" x1="0" y1="-16" x2="48" y2="-16"/>
|
||||
<line class="st2" x1="0" y1="-18" x2="48" y2="-18"/>
|
||||
<line class="st2" x1="0" y1="-20" x2="48" y2="-20"/>
|
||||
<line class="st2" x1="0" y1="-22" x2="48" y2="-22"/>
|
||||
<line class="st2" x1="0" y1="-24" x2="48" y2="-24"/>
|
||||
<line class="st2" x1="0" y1="-26" x2="48" y2="-26"/>
|
||||
<line class="st2" x1="0" y1="-28" x2="48" y2="-28"/>
|
||||
<line class="st2" x1="0" y1="-30" x2="48" y2="-30"/>
|
||||
<line class="st2" x1="0" y1="-32" x2="48" y2="-32"/>
|
||||
<line class="st2" x1="0" y1="-34" x2="48" y2="-34"/>
|
||||
<line class="st2" x1="0" y1="-36" x2="48" y2="-36"/>
|
||||
<line class="st2" x1="0" y1="-38" x2="48" y2="-38"/>
|
||||
<line class="st2" x1="0" y1="-40" x2="48" y2="-40"/>
|
||||
<line class="st2" x1="0" y1="-42" x2="48" y2="-42"/>
|
||||
<line class="st2" x1="0" y1="-44" x2="48" y2="-44"/>
|
||||
<line class="st2" x1="0" y1="-46" x2="48" y2="-46"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M47.8-0.2v-47.5H0.2v47.5H47.8 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_keylines" viewBox="0 -48 48 48">
|
||||
<g class="st3">
|
||||
<defs>
|
||||
<rect id="SVGID_3_" x="0" y="-48" class="st3" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_4_">
|
||||
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<line class="st4" x1="24" y1="0" x2="24" y2="-48"/>
|
||||
<line class="st4" x1="48" y1="-24" x2="0" y2="-24"/>
|
||||
<line class="st4" x1="48" y1="-16" x2="0" y2="-16"/>
|
||||
<line class="st4" x1="48" y1="-32" x2="0" y2="-32"/>
|
||||
<line class="st4" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st4" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st4" x1="47.7" y1="-0.3" x2="0.2" y2="-47.8"/>
|
||||
<line class="st4" x1="0.2" y1="-0.3" x2="47.7" y2="-47.8"/>
|
||||
<path class="st4" d="M24-14c-5.5,0-10-4.5-10-10c0-5.5,4.5-10,10-10c5.5,0,10,4.5,10,10C34-18.5,29.5-14,24-14z"/>
|
||||
<path class="st4" d="M24-4C12.9-4,4-12.9,4-24c0-11.1,8.9-20,20-20c11.1,0,20,8.9,20,20C44-12.9,35.1-4,24-4z"/>
|
||||
<path class="st4" d="M38-6H10c-2.2,0-4-1.8-4-4v-28c0-2.2,1.8-4,4-4h28c2.2,0,4,1.8,4,4v28C42-7.8,40.2-6,38-6z"/>
|
||||
<path class="st4" d="M40-8H8c-2.2,0-4-1.8-4-4v-24c0-2.2,1.8-4,4-4h32c2.2,0,4,1.8,4,4l0,24C44-9.8,42.2-8,40-8z"/>
|
||||
<path class="st4" d="M40-40v32c0,2.2-1.8,4-4,4H12C9.8-4,8-5.8,8-8v-32c0-2.2,1.8-4,4-4h24C38.2-44,40-42.2,40-40z"/>
|
||||
<g class="st5">
|
||||
<path d="M47.7-0.3v-47.5H0.2v47.5H47.7 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<g id="label">
|
||||
</g>
|
||||
<g id="border">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_border" width="48" height="48" y="-48" transform="matrix(0.5 0 0 -0.5 3.916831e-04 5.698877e-05)" style="overflow:visible;"/>
|
||||
</g>
|
||||
<g id="icon">
|
||||
<g>
|
||||
<path class="st0" d="M0,0h24v24H0V0z"/>
|
||||
<path class="st12" d="M2,20h20v-4H2V20z M4,17h2v2H4V17z M2,4v4h20V4H2z M6,7H4V5h2V7z M2,14h20v-4H2V14z M4,11h2v2H4V11z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="grid" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_grid" width="48" height="48" id="XMLID_68_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.139775e-04 -2.620241e-04)" style="display:inline;overflow:visible;opacity:0.15;"/>
|
||||
</g>
|
||||
<g id="keylines" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_keylines" width="48" height="48" id="XMLID_48_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.709663e-04 -2.924798e-04)" style="display:inline;overflow:visible;"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.5 KiB |
143
lib/core/assets/images/ft_ic_document.svg
Executable file
@@ -0,0 +1,143 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
|
||||
height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{clip-path:url(#SVGID_2_);}
|
||||
.st2{fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st3{opacity:0.4;}
|
||||
.st4{clip-path:url(#SVGID_4_);fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st5{clip-path:url(#SVGID_4_);}
|
||||
.st6{fill:#FFFFFF;}
|
||||
.st7{fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:10;}
|
||||
.st8{fill:#22BE73;}
|
||||
.st9{fill:#D9E021;}
|
||||
.st10{fill-rule:evenodd;clip-rule:evenodd;}
|
||||
.st11{fill:#2979FF;}
|
||||
.st12{fill:#00B0FF;}
|
||||
.st13{fill:#FF6D40;}
|
||||
.st14{fill:#FFC107;}
|
||||
.st15{fill:#E91E63;}
|
||||
.st16{opacity:0.5;fill:#FFFFFF;}
|
||||
.st17{opacity:0.2;}
|
||||
.st18{fill:#651FFF;}
|
||||
.st19{fill-rule:evenodd;clip-rule:evenodd;fill:#E91E63;}
|
||||
.st20{display:none;}
|
||||
</style>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_border" viewBox="0 -48 48 48">
|
||||
<rect y="-48" class="st0" width="48" height="48"/>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_grid" viewBox="0 -48 48 48">
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_1_" x="0" y="-48" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st1">
|
||||
<g>
|
||||
<line class="st2" x1="2" y1="-48" x2="2" y2="0"/>
|
||||
<line class="st2" x1="4" y1="-48" x2="4" y2="0"/>
|
||||
<line class="st2" x1="6" y1="-48" x2="6" y2="0"/>
|
||||
<line class="st2" x1="8" y1="-48" x2="8" y2="0"/>
|
||||
<line class="st2" x1="10" y1="-48" x2="10" y2="0"/>
|
||||
<line class="st2" x1="12" y1="-48" x2="12" y2="0"/>
|
||||
<line class="st2" x1="14" y1="-48" x2="14" y2="0"/>
|
||||
<line class="st2" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st2" x1="18" y1="-48" x2="18" y2="0"/>
|
||||
<line class="st2" x1="20" y1="-48" x2="20" y2="0"/>
|
||||
<line class="st2" x1="22" y1="-48" x2="22" y2="0"/>
|
||||
<line class="st2" x1="24" y1="-48" x2="24" y2="0"/>
|
||||
<line class="st2" x1="26" y1="-48" x2="26" y2="0"/>
|
||||
<line class="st2" x1="28" y1="-48" x2="28" y2="0"/>
|
||||
<line class="st2" x1="30" y1="-48" x2="30" y2="0"/>
|
||||
<line class="st2" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st2" x1="34" y1="-48" x2="34" y2="0"/>
|
||||
<line class="st2" x1="36" y1="-48" x2="36" y2="0"/>
|
||||
<line class="st2" x1="38" y1="-48" x2="38" y2="0"/>
|
||||
<line class="st2" x1="40" y1="-48" x2="40" y2="0"/>
|
||||
<line class="st2" x1="42" y1="-48" x2="42" y2="0"/>
|
||||
<line class="st2" x1="44" y1="-48" x2="44" y2="0"/>
|
||||
<line class="st2" x1="46" y1="-48" x2="46" y2="0"/>
|
||||
</g>
|
||||
<g>
|
||||
<line class="st2" x1="0" y1="-2" x2="48" y2="-2"/>
|
||||
<line class="st2" x1="0" y1="-4" x2="48" y2="-4"/>
|
||||
<line class="st2" x1="0" y1="-6" x2="48" y2="-6"/>
|
||||
<line class="st2" x1="0" y1="-8" x2="48" y2="-8"/>
|
||||
<line class="st2" x1="0" y1="-10" x2="48" y2="-10"/>
|
||||
<line class="st2" x1="0" y1="-12" x2="48" y2="-12"/>
|
||||
<line class="st2" x1="0" y1="-14" x2="48" y2="-14"/>
|
||||
<line class="st2" x1="0" y1="-16" x2="48" y2="-16"/>
|
||||
<line class="st2" x1="0" y1="-18" x2="48" y2="-18"/>
|
||||
<line class="st2" x1="0" y1="-20" x2="48" y2="-20"/>
|
||||
<line class="st2" x1="0" y1="-22" x2="48" y2="-22"/>
|
||||
<line class="st2" x1="0" y1="-24" x2="48" y2="-24"/>
|
||||
<line class="st2" x1="0" y1="-26" x2="48" y2="-26"/>
|
||||
<line class="st2" x1="0" y1="-28" x2="48" y2="-28"/>
|
||||
<line class="st2" x1="0" y1="-30" x2="48" y2="-30"/>
|
||||
<line class="st2" x1="0" y1="-32" x2="48" y2="-32"/>
|
||||
<line class="st2" x1="0" y1="-34" x2="48" y2="-34"/>
|
||||
<line class="st2" x1="0" y1="-36" x2="48" y2="-36"/>
|
||||
<line class="st2" x1="0" y1="-38" x2="48" y2="-38"/>
|
||||
<line class="st2" x1="0" y1="-40" x2="48" y2="-40"/>
|
||||
<line class="st2" x1="0" y1="-42" x2="48" y2="-42"/>
|
||||
<line class="st2" x1="0" y1="-44" x2="48" y2="-44"/>
|
||||
<line class="st2" x1="0" y1="-46" x2="48" y2="-46"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M47.8-0.2v-47.5H0.2v47.5H47.8 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_keylines" viewBox="0 -48 48 48">
|
||||
<g class="st3">
|
||||
<defs>
|
||||
<rect id="SVGID_3_" x="0" y="-48" class="st3" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_4_">
|
||||
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<line class="st4" x1="24" y1="0" x2="24" y2="-48"/>
|
||||
<line class="st4" x1="48" y1="-24" x2="0" y2="-24"/>
|
||||
<line class="st4" x1="48" y1="-16" x2="0" y2="-16"/>
|
||||
<line class="st4" x1="48" y1="-32" x2="0" y2="-32"/>
|
||||
<line class="st4" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st4" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st4" x1="47.7" y1="-0.3" x2="0.2" y2="-47.8"/>
|
||||
<line class="st4" x1="0.2" y1="-0.3" x2="47.7" y2="-47.8"/>
|
||||
<path class="st4" d="M24-14c-5.5,0-10-4.5-10-10c0-5.5,4.5-10,10-10c5.5,0,10,4.5,10,10C34-18.5,29.5-14,24-14z"/>
|
||||
<path class="st4" d="M24-4C12.9-4,4-12.9,4-24c0-11.1,8.9-20,20-20c11.1,0,20,8.9,20,20C44-12.9,35.1-4,24-4z"/>
|
||||
<path class="st4" d="M38-6H10c-2.2,0-4-1.8-4-4v-28c0-2.2,1.8-4,4-4h28c2.2,0,4,1.8,4,4v28C42-7.8,40.2-6,38-6z"/>
|
||||
<path class="st4" d="M40-8H8c-2.2,0-4-1.8-4-4v-24c0-2.2,1.8-4,4-4h32c2.2,0,4,1.8,4,4l0,24C44-9.8,42.2-8,40-8z"/>
|
||||
<path class="st4" d="M40-40v32c0,2.2-1.8,4-4,4H12C9.8-4,8-5.8,8-8v-32c0-2.2,1.8-4,4-4h24C38.2-44,40-42.2,40-40z"/>
|
||||
<g class="st5">
|
||||
<path d="M47.7-0.3v-47.5H0.2v47.5H47.7 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<g id="label">
|
||||
</g>
|
||||
<g id="border">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_border" width="48" height="48" y="-48" transform="matrix(0.5 0 0 -0.5 3.916831e-04 5.698877e-05)" style="overflow:visible;"/>
|
||||
</g>
|
||||
<g id="icon">
|
||||
<g>
|
||||
<path class="st11" d="M19,4H5C4.5,4,4,4.5,4,5v14c0,0.5,0.5,1,1,1h14c0.6,0,1-0.5,1-1V5C20,4.5,19.6,4,19,4z M13,15H7v-1h6V15z
|
||||
M17,13H7v-1h10V13z M17,11H7v-1h10V11z M17,9H7V8h10V9z"/>
|
||||
<rect x="0" y="0" class="st0" width="24" height="24"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="grid" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_grid" width="48" height="48" id="XMLID_80_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.139775e-04 -2.620241e-04)" style="display:inline;overflow:visible;opacity:0.15;"/>
|
||||
</g>
|
||||
<g id="keylines" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_keylines" width="48" height="48" id="XMLID_60_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.709663e-04 -2.924798e-04)" style="display:inline;overflow:visible;"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.5 KiB |
143
lib/core/assets/images/ft_ic_ebook.svg
Executable file
@@ -0,0 +1,143 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
|
||||
height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{clip-path:url(#SVGID_2_);}
|
||||
.st2{fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st3{opacity:0.4;}
|
||||
.st4{clip-path:url(#SVGID_4_);fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st5{clip-path:url(#SVGID_4_);}
|
||||
.st6{fill:#FFFFFF;}
|
||||
.st7{fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:10;}
|
||||
.st8{fill:#22BE73;}
|
||||
.st9{fill:#D9E021;}
|
||||
.st10{fill-rule:evenodd;clip-rule:evenodd;}
|
||||
.st11{fill:#2979FF;}
|
||||
.st12{fill:#00B0FF;}
|
||||
.st13{fill:#FF6D40;}
|
||||
.st14{fill:#FFC107;}
|
||||
.st15{fill:#E91E63;}
|
||||
.st16{opacity:0.5;fill:#FFFFFF;}
|
||||
.st17{opacity:0.2;}
|
||||
.st18{fill:#651FFF;}
|
||||
.st19{fill-rule:evenodd;clip-rule:evenodd;fill:#E91E63;}
|
||||
.st20{display:none;}
|
||||
</style>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_border" viewBox="0 -48 48 48">
|
||||
<rect y="-48" class="st0" width="48" height="48"/>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_grid" viewBox="0 -48 48 48">
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_1_" x="0" y="-48" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st1">
|
||||
<g>
|
||||
<line class="st2" x1="2" y1="-48" x2="2" y2="0"/>
|
||||
<line class="st2" x1="4" y1="-48" x2="4" y2="0"/>
|
||||
<line class="st2" x1="6" y1="-48" x2="6" y2="0"/>
|
||||
<line class="st2" x1="8" y1="-48" x2="8" y2="0"/>
|
||||
<line class="st2" x1="10" y1="-48" x2="10" y2="0"/>
|
||||
<line class="st2" x1="12" y1="-48" x2="12" y2="0"/>
|
||||
<line class="st2" x1="14" y1="-48" x2="14" y2="0"/>
|
||||
<line class="st2" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st2" x1="18" y1="-48" x2="18" y2="0"/>
|
||||
<line class="st2" x1="20" y1="-48" x2="20" y2="0"/>
|
||||
<line class="st2" x1="22" y1="-48" x2="22" y2="0"/>
|
||||
<line class="st2" x1="24" y1="-48" x2="24" y2="0"/>
|
||||
<line class="st2" x1="26" y1="-48" x2="26" y2="0"/>
|
||||
<line class="st2" x1="28" y1="-48" x2="28" y2="0"/>
|
||||
<line class="st2" x1="30" y1="-48" x2="30" y2="0"/>
|
||||
<line class="st2" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st2" x1="34" y1="-48" x2="34" y2="0"/>
|
||||
<line class="st2" x1="36" y1="-48" x2="36" y2="0"/>
|
||||
<line class="st2" x1="38" y1="-48" x2="38" y2="0"/>
|
||||
<line class="st2" x1="40" y1="-48" x2="40" y2="0"/>
|
||||
<line class="st2" x1="42" y1="-48" x2="42" y2="0"/>
|
||||
<line class="st2" x1="44" y1="-48" x2="44" y2="0"/>
|
||||
<line class="st2" x1="46" y1="-48" x2="46" y2="0"/>
|
||||
</g>
|
||||
<g>
|
||||
<line class="st2" x1="0" y1="-2" x2="48" y2="-2"/>
|
||||
<line class="st2" x1="0" y1="-4" x2="48" y2="-4"/>
|
||||
<line class="st2" x1="0" y1="-6" x2="48" y2="-6"/>
|
||||
<line class="st2" x1="0" y1="-8" x2="48" y2="-8"/>
|
||||
<line class="st2" x1="0" y1="-10" x2="48" y2="-10"/>
|
||||
<line class="st2" x1="0" y1="-12" x2="48" y2="-12"/>
|
||||
<line class="st2" x1="0" y1="-14" x2="48" y2="-14"/>
|
||||
<line class="st2" x1="0" y1="-16" x2="48" y2="-16"/>
|
||||
<line class="st2" x1="0" y1="-18" x2="48" y2="-18"/>
|
||||
<line class="st2" x1="0" y1="-20" x2="48" y2="-20"/>
|
||||
<line class="st2" x1="0" y1="-22" x2="48" y2="-22"/>
|
||||
<line class="st2" x1="0" y1="-24" x2="48" y2="-24"/>
|
||||
<line class="st2" x1="0" y1="-26" x2="48" y2="-26"/>
|
||||
<line class="st2" x1="0" y1="-28" x2="48" y2="-28"/>
|
||||
<line class="st2" x1="0" y1="-30" x2="48" y2="-30"/>
|
||||
<line class="st2" x1="0" y1="-32" x2="48" y2="-32"/>
|
||||
<line class="st2" x1="0" y1="-34" x2="48" y2="-34"/>
|
||||
<line class="st2" x1="0" y1="-36" x2="48" y2="-36"/>
|
||||
<line class="st2" x1="0" y1="-38" x2="48" y2="-38"/>
|
||||
<line class="st2" x1="0" y1="-40" x2="48" y2="-40"/>
|
||||
<line class="st2" x1="0" y1="-42" x2="48" y2="-42"/>
|
||||
<line class="st2" x1="0" y1="-44" x2="48" y2="-44"/>
|
||||
<line class="st2" x1="0" y1="-46" x2="48" y2="-46"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M47.8-0.2v-47.5H0.2v47.5H47.8 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_keylines" viewBox="0 -48 48 48">
|
||||
<g class="st3">
|
||||
<defs>
|
||||
<rect id="SVGID_3_" x="0" y="-48" class="st3" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_4_">
|
||||
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<line class="st4" x1="24" y1="0" x2="24" y2="-48"/>
|
||||
<line class="st4" x1="48" y1="-24" x2="0" y2="-24"/>
|
||||
<line class="st4" x1="48" y1="-16" x2="0" y2="-16"/>
|
||||
<line class="st4" x1="48" y1="-32" x2="0" y2="-32"/>
|
||||
<line class="st4" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st4" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st4" x1="47.7" y1="-0.3" x2="0.2" y2="-47.8"/>
|
||||
<line class="st4" x1="0.2" y1="-0.3" x2="47.7" y2="-47.8"/>
|
||||
<path class="st4" d="M24-14c-5.5,0-10-4.5-10-10c0-5.5,4.5-10,10-10c5.5,0,10,4.5,10,10C34-18.5,29.5-14,24-14z"/>
|
||||
<path class="st4" d="M24-4C12.9-4,4-12.9,4-24c0-11.1,8.9-20,20-20c11.1,0,20,8.9,20,20C44-12.9,35.1-4,24-4z"/>
|
||||
<path class="st4" d="M38-6H10c-2.2,0-4-1.8-4-4v-28c0-2.2,1.8-4,4-4h28c2.2,0,4,1.8,4,4v28C42-7.8,40.2-6,38-6z"/>
|
||||
<path class="st4" d="M40-8H8c-2.2,0-4-1.8-4-4v-24c0-2.2,1.8-4,4-4h32c2.2,0,4,1.8,4,4l0,24C44-9.8,42.2-8,40-8z"/>
|
||||
<path class="st4" d="M40-40v32c0,2.2-1.8,4-4,4H12C9.8-4,8-5.8,8-8v-32c0-2.2,1.8-4,4-4h24C38.2-44,40-42.2,40-40z"/>
|
||||
<g class="st5">
|
||||
<path d="M47.7-0.3v-47.5H0.2v47.5H47.7 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<g id="label">
|
||||
</g>
|
||||
<g id="border">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_border" width="48" height="48" y="-48" transform="matrix(0.5 0 0 -0.5 3.916831e-04 5.698877e-05)" style="overflow:visible;"/>
|
||||
</g>
|
||||
<g id="icon">
|
||||
<g>
|
||||
<path class="st0" d="M0,0h24v24H0V0z"/>
|
||||
<path class="st13" d="M18,2H6C4.9,2,4,2.9,4,4v16c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2V4C20,2.9,19.1,2,18,2z M6,4h5v8l-2.5-1.5
|
||||
L6,12V4z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="grid" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_grid" width="48" height="48" id="XMLID_66_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.139775e-04 -2.620241e-04)" style="display:inline;overflow:visible;opacity:0.15;"/>
|
||||
</g>
|
||||
<g id="keylines" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_keylines" width="48" height="48" id="XMLID_46_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.709663e-04 -2.924798e-04)" style="display:inline;overflow:visible;"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.5 KiB |
142
lib/core/assets/images/ft_ic_folder.svg
Executable file
@@ -0,0 +1,142 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
|
||||
height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{clip-path:url(#SVGID_2_);}
|
||||
.st2{fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st3{opacity:0.4;}
|
||||
.st4{clip-path:url(#SVGID_4_);fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st5{clip-path:url(#SVGID_4_);}
|
||||
.st6{fill:#FFFFFF;}
|
||||
.st7{fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:10;}
|
||||
.st8{fill:#22BE73;}
|
||||
.st9{fill:#D9E021;}
|
||||
.st10{fill-rule:evenodd;clip-rule:evenodd;}
|
||||
.st11{fill:#2979FF;}
|
||||
.st12{fill:#00B0FF;}
|
||||
.st13{fill:#FF6D40;}
|
||||
.st14{fill:#FFC107;}
|
||||
.st15{fill:#E91E63;}
|
||||
.st16{opacity:0.5;fill:#FFFFFF;}
|
||||
.st17{opacity:0.2;}
|
||||
.st18{fill:#651FFF;}
|
||||
.st19{fill-rule:evenodd;clip-rule:evenodd;fill:#E91E63;}
|
||||
.st20{display:none;}
|
||||
</style>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_border" viewBox="0 -48 48 48">
|
||||
<rect y="-48" class="st0" width="48" height="48"/>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_grid" viewBox="0 -48 48 48">
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_1_" x="0" y="-48" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st1">
|
||||
<g>
|
||||
<line class="st2" x1="2" y1="-48" x2="2" y2="0"/>
|
||||
<line class="st2" x1="4" y1="-48" x2="4" y2="0"/>
|
||||
<line class="st2" x1="6" y1="-48" x2="6" y2="0"/>
|
||||
<line class="st2" x1="8" y1="-48" x2="8" y2="0"/>
|
||||
<line class="st2" x1="10" y1="-48" x2="10" y2="0"/>
|
||||
<line class="st2" x1="12" y1="-48" x2="12" y2="0"/>
|
||||
<line class="st2" x1="14" y1="-48" x2="14" y2="0"/>
|
||||
<line class="st2" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st2" x1="18" y1="-48" x2="18" y2="0"/>
|
||||
<line class="st2" x1="20" y1="-48" x2="20" y2="0"/>
|
||||
<line class="st2" x1="22" y1="-48" x2="22" y2="0"/>
|
||||
<line class="st2" x1="24" y1="-48" x2="24" y2="0"/>
|
||||
<line class="st2" x1="26" y1="-48" x2="26" y2="0"/>
|
||||
<line class="st2" x1="28" y1="-48" x2="28" y2="0"/>
|
||||
<line class="st2" x1="30" y1="-48" x2="30" y2="0"/>
|
||||
<line class="st2" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st2" x1="34" y1="-48" x2="34" y2="0"/>
|
||||
<line class="st2" x1="36" y1="-48" x2="36" y2="0"/>
|
||||
<line class="st2" x1="38" y1="-48" x2="38" y2="0"/>
|
||||
<line class="st2" x1="40" y1="-48" x2="40" y2="0"/>
|
||||
<line class="st2" x1="42" y1="-48" x2="42" y2="0"/>
|
||||
<line class="st2" x1="44" y1="-48" x2="44" y2="0"/>
|
||||
<line class="st2" x1="46" y1="-48" x2="46" y2="0"/>
|
||||
</g>
|
||||
<g>
|
||||
<line class="st2" x1="0" y1="-2" x2="48" y2="-2"/>
|
||||
<line class="st2" x1="0" y1="-4" x2="48" y2="-4"/>
|
||||
<line class="st2" x1="0" y1="-6" x2="48" y2="-6"/>
|
||||
<line class="st2" x1="0" y1="-8" x2="48" y2="-8"/>
|
||||
<line class="st2" x1="0" y1="-10" x2="48" y2="-10"/>
|
||||
<line class="st2" x1="0" y1="-12" x2="48" y2="-12"/>
|
||||
<line class="st2" x1="0" y1="-14" x2="48" y2="-14"/>
|
||||
<line class="st2" x1="0" y1="-16" x2="48" y2="-16"/>
|
||||
<line class="st2" x1="0" y1="-18" x2="48" y2="-18"/>
|
||||
<line class="st2" x1="0" y1="-20" x2="48" y2="-20"/>
|
||||
<line class="st2" x1="0" y1="-22" x2="48" y2="-22"/>
|
||||
<line class="st2" x1="0" y1="-24" x2="48" y2="-24"/>
|
||||
<line class="st2" x1="0" y1="-26" x2="48" y2="-26"/>
|
||||
<line class="st2" x1="0" y1="-28" x2="48" y2="-28"/>
|
||||
<line class="st2" x1="0" y1="-30" x2="48" y2="-30"/>
|
||||
<line class="st2" x1="0" y1="-32" x2="48" y2="-32"/>
|
||||
<line class="st2" x1="0" y1="-34" x2="48" y2="-34"/>
|
||||
<line class="st2" x1="0" y1="-36" x2="48" y2="-36"/>
|
||||
<line class="st2" x1="0" y1="-38" x2="48" y2="-38"/>
|
||||
<line class="st2" x1="0" y1="-40" x2="48" y2="-40"/>
|
||||
<line class="st2" x1="0" y1="-42" x2="48" y2="-42"/>
|
||||
<line class="st2" x1="0" y1="-44" x2="48" y2="-44"/>
|
||||
<line class="st2" x1="0" y1="-46" x2="48" y2="-46"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M47.8-0.2v-47.5H0.2v47.5H47.8 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_keylines" viewBox="0 -48 48 48">
|
||||
<g class="st3">
|
||||
<defs>
|
||||
<rect id="SVGID_3_" x="0" y="-48" class="st3" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_4_">
|
||||
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<line class="st4" x1="24" y1="0" x2="24" y2="-48"/>
|
||||
<line class="st4" x1="48" y1="-24" x2="0" y2="-24"/>
|
||||
<line class="st4" x1="48" y1="-16" x2="0" y2="-16"/>
|
||||
<line class="st4" x1="48" y1="-32" x2="0" y2="-32"/>
|
||||
<line class="st4" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st4" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st4" x1="47.7" y1="-0.3" x2="0.2" y2="-47.8"/>
|
||||
<line class="st4" x1="0.2" y1="-0.3" x2="47.7" y2="-47.8"/>
|
||||
<path class="st4" d="M24-14c-5.5,0-10-4.5-10-10c0-5.5,4.5-10,10-10c5.5,0,10,4.5,10,10C34-18.5,29.5-14,24-14z"/>
|
||||
<path class="st4" d="M24-4C12.9-4,4-12.9,4-24c0-11.1,8.9-20,20-20c11.1,0,20,8.9,20,20C44-12.9,35.1-4,24-4z"/>
|
||||
<path class="st4" d="M38-6H10c-2.2,0-4-1.8-4-4v-28c0-2.2,1.8-4,4-4h28c2.2,0,4,1.8,4,4v28C42-7.8,40.2-6,38-6z"/>
|
||||
<path class="st4" d="M40-8H8c-2.2,0-4-1.8-4-4v-24c0-2.2,1.8-4,4-4h32c2.2,0,4,1.8,4,4l0,24C44-9.8,42.2-8,40-8z"/>
|
||||
<path class="st4" d="M40-40v32c0,2.2-1.8,4-4,4H12C9.8-4,8-5.8,8-8v-32c0-2.2,1.8-4,4-4h24C38.2-44,40-42.2,40-40z"/>
|
||||
<g class="st5">
|
||||
<path d="M47.7-0.3v-47.5H0.2v47.5H47.7 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<g id="label">
|
||||
</g>
|
||||
<g id="border">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_border" width="48" height="48" y="-48" transform="matrix(0.5 0 0 -0.5 3.916831e-04 5.698877e-05)" style="overflow:visible;"/>
|
||||
</g>
|
||||
<g id="icon">
|
||||
<g>
|
||||
<path class="st9" d="M10,4H4C2.9,4,2,4.9,2,6l0,12c0,1.1,0.9,2,2,2h16c1.1,0,2-0.9,2-2V8c0-1.1-0.9-2-2-2h-8L10,4z"/>
|
||||
<path class="st0" d="M0,0h24v24H0V0z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="grid" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_grid" width="48" height="48" id="XMLID_1_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.139775e-04 -2.620241e-04)" style="display:inline;overflow:visible;opacity:0.15;"/>
|
||||
</g>
|
||||
<g id="keylines" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_keylines" width="48" height="48" id="XMLID_3_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.709663e-04 -2.924798e-04)" style="display:inline;overflow:visible;"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.4 KiB |
3
lib/core/assets/images/ft_ic_folder_disable.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><rect id="backgroundrect" width="100%" height="100%" x="0" y="0" fill="none" stroke="none" class="" style=""/>
|
||||
|
||||
<g class="currentLayer" style=""><title>Layer 1</title><path fill="#000" fill-opacity=".28" fill-rule="evenodd" d="M9.986754953861237,3.973509907722475 H3.986754953861237 C2.8867549538612365,3.973509907722475 1.986754953861237,4.8735099077224735 1.986754953861237,5.973509907722473 v12 c0,1.1 0.9,2 2,2 h16 c1.1,0 2,-0.9 2,-2 V7.973509907722473 c0,-1.1 -0.9,-2 -2,-2 h-8 L9.986754953861237,3.973509907722475 z" id="svg_1" class=""/></g></svg>
|
After Width: | Height: | Size: 621 B |
143
lib/core/assets/images/ft_ic_folder_empty.svg
Executable file
@@ -0,0 +1,143 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
|
||||
height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{clip-path:url(#SVGID_2_);}
|
||||
.st2{fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st3{opacity:0.4;}
|
||||
.st4{clip-path:url(#SVGID_4_);fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st5{clip-path:url(#SVGID_4_);}
|
||||
.st6{fill:#FFFFFF;}
|
||||
.st7{fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:10;}
|
||||
.st8{fill:#22BE73;}
|
||||
.st9{fill:#D9E021;}
|
||||
.st10{fill-rule:evenodd;clip-rule:evenodd;}
|
||||
.st11{fill:#2979FF;}
|
||||
.st12{fill:#00B0FF;}
|
||||
.st13{fill:#FF6D40;}
|
||||
.st14{fill:#FFC107;}
|
||||
.st15{fill:#E91E63;}
|
||||
.st16{opacity:0.5;fill:#FFFFFF;}
|
||||
.st17{opacity:0.2;}
|
||||
.st18{fill:#651FFF;}
|
||||
.st19{fill-rule:evenodd;clip-rule:evenodd;fill:#E91E63;}
|
||||
.st20{display:none;}
|
||||
</style>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_border" viewBox="0 -48 48 48">
|
||||
<rect y="-48" class="st0" width="48" height="48"/>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_grid" viewBox="0 -48 48 48">
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_1_" x="0" y="-48" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st1">
|
||||
<g>
|
||||
<line class="st2" x1="2" y1="-48" x2="2" y2="0"/>
|
||||
<line class="st2" x1="4" y1="-48" x2="4" y2="0"/>
|
||||
<line class="st2" x1="6" y1="-48" x2="6" y2="0"/>
|
||||
<line class="st2" x1="8" y1="-48" x2="8" y2="0"/>
|
||||
<line class="st2" x1="10" y1="-48" x2="10" y2="0"/>
|
||||
<line class="st2" x1="12" y1="-48" x2="12" y2="0"/>
|
||||
<line class="st2" x1="14" y1="-48" x2="14" y2="0"/>
|
||||
<line class="st2" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st2" x1="18" y1="-48" x2="18" y2="0"/>
|
||||
<line class="st2" x1="20" y1="-48" x2="20" y2="0"/>
|
||||
<line class="st2" x1="22" y1="-48" x2="22" y2="0"/>
|
||||
<line class="st2" x1="24" y1="-48" x2="24" y2="0"/>
|
||||
<line class="st2" x1="26" y1="-48" x2="26" y2="0"/>
|
||||
<line class="st2" x1="28" y1="-48" x2="28" y2="0"/>
|
||||
<line class="st2" x1="30" y1="-48" x2="30" y2="0"/>
|
||||
<line class="st2" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st2" x1="34" y1="-48" x2="34" y2="0"/>
|
||||
<line class="st2" x1="36" y1="-48" x2="36" y2="0"/>
|
||||
<line class="st2" x1="38" y1="-48" x2="38" y2="0"/>
|
||||
<line class="st2" x1="40" y1="-48" x2="40" y2="0"/>
|
||||
<line class="st2" x1="42" y1="-48" x2="42" y2="0"/>
|
||||
<line class="st2" x1="44" y1="-48" x2="44" y2="0"/>
|
||||
<line class="st2" x1="46" y1="-48" x2="46" y2="0"/>
|
||||
</g>
|
||||
<g>
|
||||
<line class="st2" x1="0" y1="-2" x2="48" y2="-2"/>
|
||||
<line class="st2" x1="0" y1="-4" x2="48" y2="-4"/>
|
||||
<line class="st2" x1="0" y1="-6" x2="48" y2="-6"/>
|
||||
<line class="st2" x1="0" y1="-8" x2="48" y2="-8"/>
|
||||
<line class="st2" x1="0" y1="-10" x2="48" y2="-10"/>
|
||||
<line class="st2" x1="0" y1="-12" x2="48" y2="-12"/>
|
||||
<line class="st2" x1="0" y1="-14" x2="48" y2="-14"/>
|
||||
<line class="st2" x1="0" y1="-16" x2="48" y2="-16"/>
|
||||
<line class="st2" x1="0" y1="-18" x2="48" y2="-18"/>
|
||||
<line class="st2" x1="0" y1="-20" x2="48" y2="-20"/>
|
||||
<line class="st2" x1="0" y1="-22" x2="48" y2="-22"/>
|
||||
<line class="st2" x1="0" y1="-24" x2="48" y2="-24"/>
|
||||
<line class="st2" x1="0" y1="-26" x2="48" y2="-26"/>
|
||||
<line class="st2" x1="0" y1="-28" x2="48" y2="-28"/>
|
||||
<line class="st2" x1="0" y1="-30" x2="48" y2="-30"/>
|
||||
<line class="st2" x1="0" y1="-32" x2="48" y2="-32"/>
|
||||
<line class="st2" x1="0" y1="-34" x2="48" y2="-34"/>
|
||||
<line class="st2" x1="0" y1="-36" x2="48" y2="-36"/>
|
||||
<line class="st2" x1="0" y1="-38" x2="48" y2="-38"/>
|
||||
<line class="st2" x1="0" y1="-40" x2="48" y2="-40"/>
|
||||
<line class="st2" x1="0" y1="-42" x2="48" y2="-42"/>
|
||||
<line class="st2" x1="0" y1="-44" x2="48" y2="-44"/>
|
||||
<line class="st2" x1="0" y1="-46" x2="48" y2="-46"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M47.8-0.2v-47.5H0.2v47.5H47.8 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_keylines" viewBox="0 -48 48 48">
|
||||
<g class="st3">
|
||||
<defs>
|
||||
<rect id="SVGID_3_" x="0" y="-48" class="st3" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_4_">
|
||||
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<line class="st4" x1="24" y1="0" x2="24" y2="-48"/>
|
||||
<line class="st4" x1="48" y1="-24" x2="0" y2="-24"/>
|
||||
<line class="st4" x1="48" y1="-16" x2="0" y2="-16"/>
|
||||
<line class="st4" x1="48" y1="-32" x2="0" y2="-32"/>
|
||||
<line class="st4" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st4" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st4" x1="47.7" y1="-0.3" x2="0.2" y2="-47.8"/>
|
||||
<line class="st4" x1="0.2" y1="-0.3" x2="47.7" y2="-47.8"/>
|
||||
<path class="st4" d="M24-14c-5.5,0-10-4.5-10-10c0-5.5,4.5-10,10-10c5.5,0,10,4.5,10,10C34-18.5,29.5-14,24-14z"/>
|
||||
<path class="st4" d="M24-4C12.9-4,4-12.9,4-24c0-11.1,8.9-20,20-20c11.1,0,20,8.9,20,20C44-12.9,35.1-4,24-4z"/>
|
||||
<path class="st4" d="M38-6H10c-2.2,0-4-1.8-4-4v-28c0-2.2,1.8-4,4-4h28c2.2,0,4,1.8,4,4v28C42-7.8,40.2-6,38-6z"/>
|
||||
<path class="st4" d="M40-8H8c-2.2,0-4-1.8-4-4v-24c0-2.2,1.8-4,4-4h32c2.2,0,4,1.8,4,4l0,24C44-9.8,42.2-8,40-8z"/>
|
||||
<path class="st4" d="M40-40v32c0,2.2-1.8,4-4,4H12C9.8-4,8-5.8,8-8v-32c0-2.2,1.8-4,4-4h24C38.2-44,40-42.2,40-40z"/>
|
||||
<g class="st5">
|
||||
<path d="M47.7-0.3v-47.5H0.2v47.5H47.7 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<g id="label">
|
||||
</g>
|
||||
<g id="border">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_border" width="48" height="48" y="-48" transform="matrix(0.5 0 0 -0.5 3.916831e-04 5.698877e-05)" style="overflow:visible;"/>
|
||||
</g>
|
||||
<g id="icon">
|
||||
<g>
|
||||
<path class="st0" d="M0,0h24v24H0V0z"/>
|
||||
<path class="st9" d="M20,6h-8l-2-2H4C2.9,4,2,4.9,2,6l0,12c0,1.1,0.9,2,2,2h16c1.1,0,2-0.9,2-2V8C22,6.9,21.1,6,20,6z M20,18H4V8
|
||||
h16V18z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="grid" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_grid" width="48" height="48" id="XMLID_8_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.139775e-04 -2.620241e-04)" style="display:inline;overflow:visible;opacity:0.15;"/>
|
||||
</g>
|
||||
<g id="keylines" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_keylines" width="48" height="48" id="XMLID_5_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.709663e-04 -2.924798e-04)" style="display:inline;overflow:visible;"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.5 KiB |
143
lib/core/assets/images/ft_ic_form.svg
Executable file
@@ -0,0 +1,143 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
|
||||
height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{clip-path:url(#SVGID_2_);}
|
||||
.st2{fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st3{opacity:0.4;}
|
||||
.st4{clip-path:url(#SVGID_4_);fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st5{clip-path:url(#SVGID_4_);}
|
||||
.st6{fill:#FFFFFF;}
|
||||
.st7{fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:10;}
|
||||
.st8{fill:#22BE73;}
|
||||
.st9{fill:#D9E021;}
|
||||
.st10{fill-rule:evenodd;clip-rule:evenodd;}
|
||||
.st11{fill:#2979FF;}
|
||||
.st12{fill:#00B0FF;}
|
||||
.st13{fill:#FF6D40;}
|
||||
.st14{fill:#FFC107;}
|
||||
.st15{fill:#E91E63;}
|
||||
.st16{opacity:0.5;fill:#FFFFFF;}
|
||||
.st17{opacity:0.2;}
|
||||
.st18{fill:#651FFF;}
|
||||
.st19{fill-rule:evenodd;clip-rule:evenodd;fill:#E91E63;}
|
||||
.st20{display:none;}
|
||||
</style>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_border" viewBox="0 -48 48 48">
|
||||
<rect y="-48" class="st0" width="48" height="48"/>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_grid" viewBox="0 -48 48 48">
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_1_" x="0" y="-48" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st1">
|
||||
<g>
|
||||
<line class="st2" x1="2" y1="-48" x2="2" y2="0"/>
|
||||
<line class="st2" x1="4" y1="-48" x2="4" y2="0"/>
|
||||
<line class="st2" x1="6" y1="-48" x2="6" y2="0"/>
|
||||
<line class="st2" x1="8" y1="-48" x2="8" y2="0"/>
|
||||
<line class="st2" x1="10" y1="-48" x2="10" y2="0"/>
|
||||
<line class="st2" x1="12" y1="-48" x2="12" y2="0"/>
|
||||
<line class="st2" x1="14" y1="-48" x2="14" y2="0"/>
|
||||
<line class="st2" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st2" x1="18" y1="-48" x2="18" y2="0"/>
|
||||
<line class="st2" x1="20" y1="-48" x2="20" y2="0"/>
|
||||
<line class="st2" x1="22" y1="-48" x2="22" y2="0"/>
|
||||
<line class="st2" x1="24" y1="-48" x2="24" y2="0"/>
|
||||
<line class="st2" x1="26" y1="-48" x2="26" y2="0"/>
|
||||
<line class="st2" x1="28" y1="-48" x2="28" y2="0"/>
|
||||
<line class="st2" x1="30" y1="-48" x2="30" y2="0"/>
|
||||
<line class="st2" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st2" x1="34" y1="-48" x2="34" y2="0"/>
|
||||
<line class="st2" x1="36" y1="-48" x2="36" y2="0"/>
|
||||
<line class="st2" x1="38" y1="-48" x2="38" y2="0"/>
|
||||
<line class="st2" x1="40" y1="-48" x2="40" y2="0"/>
|
||||
<line class="st2" x1="42" y1="-48" x2="42" y2="0"/>
|
||||
<line class="st2" x1="44" y1="-48" x2="44" y2="0"/>
|
||||
<line class="st2" x1="46" y1="-48" x2="46" y2="0"/>
|
||||
</g>
|
||||
<g>
|
||||
<line class="st2" x1="0" y1="-2" x2="48" y2="-2"/>
|
||||
<line class="st2" x1="0" y1="-4" x2="48" y2="-4"/>
|
||||
<line class="st2" x1="0" y1="-6" x2="48" y2="-6"/>
|
||||
<line class="st2" x1="0" y1="-8" x2="48" y2="-8"/>
|
||||
<line class="st2" x1="0" y1="-10" x2="48" y2="-10"/>
|
||||
<line class="st2" x1="0" y1="-12" x2="48" y2="-12"/>
|
||||
<line class="st2" x1="0" y1="-14" x2="48" y2="-14"/>
|
||||
<line class="st2" x1="0" y1="-16" x2="48" y2="-16"/>
|
||||
<line class="st2" x1="0" y1="-18" x2="48" y2="-18"/>
|
||||
<line class="st2" x1="0" y1="-20" x2="48" y2="-20"/>
|
||||
<line class="st2" x1="0" y1="-22" x2="48" y2="-22"/>
|
||||
<line class="st2" x1="0" y1="-24" x2="48" y2="-24"/>
|
||||
<line class="st2" x1="0" y1="-26" x2="48" y2="-26"/>
|
||||
<line class="st2" x1="0" y1="-28" x2="48" y2="-28"/>
|
||||
<line class="st2" x1="0" y1="-30" x2="48" y2="-30"/>
|
||||
<line class="st2" x1="0" y1="-32" x2="48" y2="-32"/>
|
||||
<line class="st2" x1="0" y1="-34" x2="48" y2="-34"/>
|
||||
<line class="st2" x1="0" y1="-36" x2="48" y2="-36"/>
|
||||
<line class="st2" x1="0" y1="-38" x2="48" y2="-38"/>
|
||||
<line class="st2" x1="0" y1="-40" x2="48" y2="-40"/>
|
||||
<line class="st2" x1="0" y1="-42" x2="48" y2="-42"/>
|
||||
<line class="st2" x1="0" y1="-44" x2="48" y2="-44"/>
|
||||
<line class="st2" x1="0" y1="-46" x2="48" y2="-46"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M47.8-0.2v-47.5H0.2v47.5H47.8 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_keylines" viewBox="0 -48 48 48">
|
||||
<g class="st3">
|
||||
<defs>
|
||||
<rect id="SVGID_3_" x="0" y="-48" class="st3" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_4_">
|
||||
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<line class="st4" x1="24" y1="0" x2="24" y2="-48"/>
|
||||
<line class="st4" x1="48" y1="-24" x2="0" y2="-24"/>
|
||||
<line class="st4" x1="48" y1="-16" x2="0" y2="-16"/>
|
||||
<line class="st4" x1="48" y1="-32" x2="0" y2="-32"/>
|
||||
<line class="st4" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st4" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st4" x1="47.7" y1="-0.3" x2="0.2" y2="-47.8"/>
|
||||
<line class="st4" x1="0.2" y1="-0.3" x2="47.7" y2="-47.8"/>
|
||||
<path class="st4" d="M24-14c-5.5,0-10-4.5-10-10c0-5.5,4.5-10,10-10c5.5,0,10,4.5,10,10C34-18.5,29.5-14,24-14z"/>
|
||||
<path class="st4" d="M24-4C12.9-4,4-12.9,4-24c0-11.1,8.9-20,20-20c11.1,0,20,8.9,20,20C44-12.9,35.1-4,24-4z"/>
|
||||
<path class="st4" d="M38-6H10c-2.2,0-4-1.8-4-4v-28c0-2.2,1.8-4,4-4h28c2.2,0,4,1.8,4,4v28C42-7.8,40.2-6,38-6z"/>
|
||||
<path class="st4" d="M40-8H8c-2.2,0-4-1.8-4-4v-24c0-2.2,1.8-4,4-4h32c2.2,0,4,1.8,4,4l0,24C44-9.8,42.2-8,40-8z"/>
|
||||
<path class="st4" d="M40-40v32c0,2.2-1.8,4-4,4H12C9.8-4,8-5.8,8-8v-32c0-2.2,1.8-4,4-4h24C38.2-44,40-42.2,40-40z"/>
|
||||
<g class="st5">
|
||||
<path d="M47.7-0.3v-47.5H0.2v47.5H47.7 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<g id="label">
|
||||
</g>
|
||||
<g id="border">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_border" width="48" height="48" y="-48" transform="matrix(0.5 0 0 -0.5 3.916831e-04 5.698877e-05)" style="overflow:visible;"/>
|
||||
</g>
|
||||
<g id="icon">
|
||||
<g>
|
||||
<path class="st18" d="M18,4H6C4.9,4,4,4.9,4,6v12c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2V6C20,4.9,19.1,4,18,4z M9,16H7v-2h2V16z
|
||||
M9,13H7v-2h2V13z M9,10H7V8h2V10z M17,16h-7v-2h7V16z M17,13h-7v-2h7V13z M17,10h-7V8h7V10z"/>
|
||||
<rect x="0" y="0" class="st0" width="24" height="24"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="grid" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_grid" width="48" height="48" id="XMLID_74_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.139775e-04 -2.620241e-04)" style="display:inline;overflow:visible;opacity:0.15;"/>
|
||||
</g>
|
||||
<g id="keylines" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_keylines" width="48" height="48" id="XMLID_54_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.709663e-04 -2.924798e-04)" style="display:inline;overflow:visible;"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.6 KiB |
147
lib/core/assets/images/ft_ic_google_docs.svg
Executable file
@@ -0,0 +1,147 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
|
||||
height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{clip-path:url(#SVGID_2_);}
|
||||
.st2{fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st3{opacity:0.4;}
|
||||
.st4{clip-path:url(#SVGID_4_);fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st5{clip-path:url(#SVGID_4_);}
|
||||
.st6{fill:#FFFFFF;}
|
||||
.st7{fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:10;}
|
||||
.st8{fill:#22BE73;}
|
||||
.st9{fill:#D9E021;}
|
||||
.st10{fill-rule:evenodd;clip-rule:evenodd;}
|
||||
.st11{fill:#2979FF;}
|
||||
.st12{fill:#00B0FF;}
|
||||
.st13{fill:#FF6D40;}
|
||||
.st14{fill:#FFC107;}
|
||||
.st15{fill:#E91E63;}
|
||||
.st16{opacity:0.5;fill:#FFFFFF;}
|
||||
.st17{opacity:0.2;}
|
||||
.st18{fill:#651FFF;}
|
||||
.st19{fill-rule:evenodd;clip-rule:evenodd;fill:#E91E63;}
|
||||
.st20{display:none;}
|
||||
</style>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_border" viewBox="0 -48 48 48">
|
||||
<rect y="-48" class="st0" width="48" height="48"/>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_grid" viewBox="0 -48 48 48">
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_1_" x="0" y="-48" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st1">
|
||||
<g>
|
||||
<line class="st2" x1="2" y1="-48" x2="2" y2="0"/>
|
||||
<line class="st2" x1="4" y1="-48" x2="4" y2="0"/>
|
||||
<line class="st2" x1="6" y1="-48" x2="6" y2="0"/>
|
||||
<line class="st2" x1="8" y1="-48" x2="8" y2="0"/>
|
||||
<line class="st2" x1="10" y1="-48" x2="10" y2="0"/>
|
||||
<line class="st2" x1="12" y1="-48" x2="12" y2="0"/>
|
||||
<line class="st2" x1="14" y1="-48" x2="14" y2="0"/>
|
||||
<line class="st2" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st2" x1="18" y1="-48" x2="18" y2="0"/>
|
||||
<line class="st2" x1="20" y1="-48" x2="20" y2="0"/>
|
||||
<line class="st2" x1="22" y1="-48" x2="22" y2="0"/>
|
||||
<line class="st2" x1="24" y1="-48" x2="24" y2="0"/>
|
||||
<line class="st2" x1="26" y1="-48" x2="26" y2="0"/>
|
||||
<line class="st2" x1="28" y1="-48" x2="28" y2="0"/>
|
||||
<line class="st2" x1="30" y1="-48" x2="30" y2="0"/>
|
||||
<line class="st2" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st2" x1="34" y1="-48" x2="34" y2="0"/>
|
||||
<line class="st2" x1="36" y1="-48" x2="36" y2="0"/>
|
||||
<line class="st2" x1="38" y1="-48" x2="38" y2="0"/>
|
||||
<line class="st2" x1="40" y1="-48" x2="40" y2="0"/>
|
||||
<line class="st2" x1="42" y1="-48" x2="42" y2="0"/>
|
||||
<line class="st2" x1="44" y1="-48" x2="44" y2="0"/>
|
||||
<line class="st2" x1="46" y1="-48" x2="46" y2="0"/>
|
||||
</g>
|
||||
<g>
|
||||
<line class="st2" x1="0" y1="-2" x2="48" y2="-2"/>
|
||||
<line class="st2" x1="0" y1="-4" x2="48" y2="-4"/>
|
||||
<line class="st2" x1="0" y1="-6" x2="48" y2="-6"/>
|
||||
<line class="st2" x1="0" y1="-8" x2="48" y2="-8"/>
|
||||
<line class="st2" x1="0" y1="-10" x2="48" y2="-10"/>
|
||||
<line class="st2" x1="0" y1="-12" x2="48" y2="-12"/>
|
||||
<line class="st2" x1="0" y1="-14" x2="48" y2="-14"/>
|
||||
<line class="st2" x1="0" y1="-16" x2="48" y2="-16"/>
|
||||
<line class="st2" x1="0" y1="-18" x2="48" y2="-18"/>
|
||||
<line class="st2" x1="0" y1="-20" x2="48" y2="-20"/>
|
||||
<line class="st2" x1="0" y1="-22" x2="48" y2="-22"/>
|
||||
<line class="st2" x1="0" y1="-24" x2="48" y2="-24"/>
|
||||
<line class="st2" x1="0" y1="-26" x2="48" y2="-26"/>
|
||||
<line class="st2" x1="0" y1="-28" x2="48" y2="-28"/>
|
||||
<line class="st2" x1="0" y1="-30" x2="48" y2="-30"/>
|
||||
<line class="st2" x1="0" y1="-32" x2="48" y2="-32"/>
|
||||
<line class="st2" x1="0" y1="-34" x2="48" y2="-34"/>
|
||||
<line class="st2" x1="0" y1="-36" x2="48" y2="-36"/>
|
||||
<line class="st2" x1="0" y1="-38" x2="48" y2="-38"/>
|
||||
<line class="st2" x1="0" y1="-40" x2="48" y2="-40"/>
|
||||
<line class="st2" x1="0" y1="-42" x2="48" y2="-42"/>
|
||||
<line class="st2" x1="0" y1="-44" x2="48" y2="-44"/>
|
||||
<line class="st2" x1="0" y1="-46" x2="48" y2="-46"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M47.8-0.2v-47.5H0.2v47.5H47.8 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_keylines" viewBox="0 -48 48 48">
|
||||
<g class="st3">
|
||||
<defs>
|
||||
<rect id="SVGID_3_" x="0" y="-48" class="st3" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_4_">
|
||||
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<line class="st4" x1="24" y1="0" x2="24" y2="-48"/>
|
||||
<line class="st4" x1="48" y1="-24" x2="0" y2="-24"/>
|
||||
<line class="st4" x1="48" y1="-16" x2="0" y2="-16"/>
|
||||
<line class="st4" x1="48" y1="-32" x2="0" y2="-32"/>
|
||||
<line class="st4" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st4" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st4" x1="47.7" y1="-0.3" x2="0.2" y2="-47.8"/>
|
||||
<line class="st4" x1="0.2" y1="-0.3" x2="47.7" y2="-47.8"/>
|
||||
<path class="st4" d="M24-14c-5.5,0-10-4.5-10-10c0-5.5,4.5-10,10-10c5.5,0,10,4.5,10,10C34-18.5,29.5-14,24-14z"/>
|
||||
<path class="st4" d="M24-4C12.9-4,4-12.9,4-24c0-11.1,8.9-20,20-20c11.1,0,20,8.9,20,20C44-12.9,35.1-4,24-4z"/>
|
||||
<path class="st4" d="M38-6H10c-2.2,0-4-1.8-4-4v-28c0-2.2,1.8-4,4-4h28c2.2,0,4,1.8,4,4v28C42-7.8,40.2-6,38-6z"/>
|
||||
<path class="st4" d="M40-8H8c-2.2,0-4-1.8-4-4v-24c0-2.2,1.8-4,4-4h32c2.2,0,4,1.8,4,4l0,24C44-9.8,42.2-8,40-8z"/>
|
||||
<path class="st4" d="M40-40v32c0,2.2-1.8,4-4,4H12C9.8-4,8-5.8,8-8v-32c0-2.2,1.8-4,4-4h24C38.2-44,40-42.2,40-40z"/>
|
||||
<g class="st5">
|
||||
<path d="M47.7-0.3v-47.5H0.2v47.5H47.7 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<g id="label">
|
||||
</g>
|
||||
<g id="border">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_border" width="48" height="48" y="-48" transform="matrix(0.5 0 0 -0.5 3.916831e-04 5.698877e-05)" style="overflow:visible;"/>
|
||||
</g>
|
||||
<g id="icon">
|
||||
<g>
|
||||
<rect x="0" y="0" class="st0" width="24" height="24"/>
|
||||
<g>
|
||||
<path class="st11" d="M16,2H6C4.9,2,4,2.9,4,4l0,16c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2V6L16,2z M13,17H7v-1h6V17z M17,15H7v-1
|
||||
h10V15z M17,13H7v-1h10V13z M17,11H7v-1h10V11z"/>
|
||||
<path class="st16" d="M16,6V2l4,4H16z"/>
|
||||
<path class="st17" d="M20,6v4l-4-4H20z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="grid" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_grid" width="48" height="48" id="XMLID_112_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.139775e-04 -2.620241e-04)" style="display:inline;overflow:visible;opacity:0.15;"/>
|
||||
</g>
|
||||
<g id="keylines" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_keylines" width="48" height="48" id="XMLID_92_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.709663e-04 -2.924798e-04)" style="display:inline;overflow:visible;"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.6 KiB |
147
lib/core/assets/images/ft_ic_google_drawings.svg
Executable file
@@ -0,0 +1,147 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
|
||||
height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{clip-path:url(#SVGID_2_);}
|
||||
.st2{fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st3{opacity:0.4;}
|
||||
.st4{clip-path:url(#SVGID_4_);fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st5{clip-path:url(#SVGID_4_);}
|
||||
.st6{fill:#FFFFFF;}
|
||||
.st7{fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:10;}
|
||||
.st8{fill:#22BE73;}
|
||||
.st9{fill:#D9E021;}
|
||||
.st10{fill-rule:evenodd;clip-rule:evenodd;}
|
||||
.st11{fill:#2979FF;}
|
||||
.st12{fill:#00B0FF;}
|
||||
.st13{fill:#FF6D40;}
|
||||
.st14{fill:#FFC107;}
|
||||
.st15{fill:#E91E63;}
|
||||
.st16{opacity:0.5;fill:#FFFFFF;}
|
||||
.st17{opacity:0.2;}
|
||||
.st18{fill:#651FFF;}
|
||||
.st19{fill-rule:evenodd;clip-rule:evenodd;fill:#E91E63;}
|
||||
.st20{display:none;}
|
||||
</style>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_border" viewBox="0 -48 48 48">
|
||||
<rect y="-48" class="st0" width="48" height="48"/>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_grid" viewBox="0 -48 48 48">
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_1_" x="0" y="-48" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st1">
|
||||
<g>
|
||||
<line class="st2" x1="2" y1="-48" x2="2" y2="0"/>
|
||||
<line class="st2" x1="4" y1="-48" x2="4" y2="0"/>
|
||||
<line class="st2" x1="6" y1="-48" x2="6" y2="0"/>
|
||||
<line class="st2" x1="8" y1="-48" x2="8" y2="0"/>
|
||||
<line class="st2" x1="10" y1="-48" x2="10" y2="0"/>
|
||||
<line class="st2" x1="12" y1="-48" x2="12" y2="0"/>
|
||||
<line class="st2" x1="14" y1="-48" x2="14" y2="0"/>
|
||||
<line class="st2" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st2" x1="18" y1="-48" x2="18" y2="0"/>
|
||||
<line class="st2" x1="20" y1="-48" x2="20" y2="0"/>
|
||||
<line class="st2" x1="22" y1="-48" x2="22" y2="0"/>
|
||||
<line class="st2" x1="24" y1="-48" x2="24" y2="0"/>
|
||||
<line class="st2" x1="26" y1="-48" x2="26" y2="0"/>
|
||||
<line class="st2" x1="28" y1="-48" x2="28" y2="0"/>
|
||||
<line class="st2" x1="30" y1="-48" x2="30" y2="0"/>
|
||||
<line class="st2" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st2" x1="34" y1="-48" x2="34" y2="0"/>
|
||||
<line class="st2" x1="36" y1="-48" x2="36" y2="0"/>
|
||||
<line class="st2" x1="38" y1="-48" x2="38" y2="0"/>
|
||||
<line class="st2" x1="40" y1="-48" x2="40" y2="0"/>
|
||||
<line class="st2" x1="42" y1="-48" x2="42" y2="0"/>
|
||||
<line class="st2" x1="44" y1="-48" x2="44" y2="0"/>
|
||||
<line class="st2" x1="46" y1="-48" x2="46" y2="0"/>
|
||||
</g>
|
||||
<g>
|
||||
<line class="st2" x1="0" y1="-2" x2="48" y2="-2"/>
|
||||
<line class="st2" x1="0" y1="-4" x2="48" y2="-4"/>
|
||||
<line class="st2" x1="0" y1="-6" x2="48" y2="-6"/>
|
||||
<line class="st2" x1="0" y1="-8" x2="48" y2="-8"/>
|
||||
<line class="st2" x1="0" y1="-10" x2="48" y2="-10"/>
|
||||
<line class="st2" x1="0" y1="-12" x2="48" y2="-12"/>
|
||||
<line class="st2" x1="0" y1="-14" x2="48" y2="-14"/>
|
||||
<line class="st2" x1="0" y1="-16" x2="48" y2="-16"/>
|
||||
<line class="st2" x1="0" y1="-18" x2="48" y2="-18"/>
|
||||
<line class="st2" x1="0" y1="-20" x2="48" y2="-20"/>
|
||||
<line class="st2" x1="0" y1="-22" x2="48" y2="-22"/>
|
||||
<line class="st2" x1="0" y1="-24" x2="48" y2="-24"/>
|
||||
<line class="st2" x1="0" y1="-26" x2="48" y2="-26"/>
|
||||
<line class="st2" x1="0" y1="-28" x2="48" y2="-28"/>
|
||||
<line class="st2" x1="0" y1="-30" x2="48" y2="-30"/>
|
||||
<line class="st2" x1="0" y1="-32" x2="48" y2="-32"/>
|
||||
<line class="st2" x1="0" y1="-34" x2="48" y2="-34"/>
|
||||
<line class="st2" x1="0" y1="-36" x2="48" y2="-36"/>
|
||||
<line class="st2" x1="0" y1="-38" x2="48" y2="-38"/>
|
||||
<line class="st2" x1="0" y1="-40" x2="48" y2="-40"/>
|
||||
<line class="st2" x1="0" y1="-42" x2="48" y2="-42"/>
|
||||
<line class="st2" x1="0" y1="-44" x2="48" y2="-44"/>
|
||||
<line class="st2" x1="0" y1="-46" x2="48" y2="-46"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M47.8-0.2v-47.5H0.2v47.5H47.8 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_keylines" viewBox="0 -48 48 48">
|
||||
<g class="st3">
|
||||
<defs>
|
||||
<rect id="SVGID_3_" x="0" y="-48" class="st3" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_4_">
|
||||
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<line class="st4" x1="24" y1="0" x2="24" y2="-48"/>
|
||||
<line class="st4" x1="48" y1="-24" x2="0" y2="-24"/>
|
||||
<line class="st4" x1="48" y1="-16" x2="0" y2="-16"/>
|
||||
<line class="st4" x1="48" y1="-32" x2="0" y2="-32"/>
|
||||
<line class="st4" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st4" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st4" x1="47.7" y1="-0.3" x2="0.2" y2="-47.8"/>
|
||||
<line class="st4" x1="0.2" y1="-0.3" x2="47.7" y2="-47.8"/>
|
||||
<path class="st4" d="M24-14c-5.5,0-10-4.5-10-10c0-5.5,4.5-10,10-10c5.5,0,10,4.5,10,10C34-18.5,29.5-14,24-14z"/>
|
||||
<path class="st4" d="M24-4C12.9-4,4-12.9,4-24c0-11.1,8.9-20,20-20c11.1,0,20,8.9,20,20C44-12.9,35.1-4,24-4z"/>
|
||||
<path class="st4" d="M38-6H10c-2.2,0-4-1.8-4-4v-28c0-2.2,1.8-4,4-4h28c2.2,0,4,1.8,4,4v28C42-7.8,40.2-6,38-6z"/>
|
||||
<path class="st4" d="M40-8H8c-2.2,0-4-1.8-4-4v-24c0-2.2,1.8-4,4-4h32c2.2,0,4,1.8,4,4l0,24C44-9.8,42.2-8,40-8z"/>
|
||||
<path class="st4" d="M40-40v32c0,2.2-1.8,4-4,4H12C9.8-4,8-5.8,8-8v-32c0-2.2,1.8-4,4-4h24C38.2-44,40-42.2,40-40z"/>
|
||||
<g class="st5">
|
||||
<path d="M47.7-0.3v-47.5H0.2v47.5H47.7 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<g id="label">
|
||||
</g>
|
||||
<g id="border">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_border" width="48" height="48" y="-48" transform="matrix(0.5 0 0 -0.5 3.916831e-04 5.698877e-05)" style="overflow:visible;"/>
|
||||
</g>
|
||||
<g id="icon">
|
||||
<g>
|
||||
<g>
|
||||
<path class="st13" d="M16,2H6C4.9,2,4,2.9,4,4l0,16c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2V6L16,2z M7,12.5C7,10.6,8.6,9,10.5,9
|
||||
s3.5,1.6,3.5,3.5c0,0.2,0,0.3-0.1,0.5H11v2.9c-0.2,0-0.3,0.1-0.5,0.1C8.6,16,7,14.4,7,12.5z M17,19h-5v-5l5,0V19z"/>
|
||||
<path class="st16" d="M16,6V2l4,4H16z"/>
|
||||
<path class="st17" d="M20,6v4l-4-4H20z"/>
|
||||
</g>
|
||||
<rect x="0" y="0" class="st0" width="24" height="24"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="grid" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_grid" width="48" height="48" id="XMLID_104_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.139775e-04 -2.620241e-04)" style="display:inline;overflow:visible;opacity:0.15;"/>
|
||||
</g>
|
||||
<g id="keylines" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_keylines" width="48" height="48" id="XMLID_84_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.709663e-04 -2.924798e-04)" style="display:inline;overflow:visible;"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.7 KiB |
147
lib/core/assets/images/ft_ic_google_forms.svg
Executable file
@@ -0,0 +1,147 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
|
||||
height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{clip-path:url(#SVGID_2_);}
|
||||
.st2{fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st3{opacity:0.4;}
|
||||
.st4{clip-path:url(#SVGID_4_);fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st5{clip-path:url(#SVGID_4_);}
|
||||
.st6{fill:#FFFFFF;}
|
||||
.st7{fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:10;}
|
||||
.st8{fill:#22BE73;}
|
||||
.st9{fill:#D9E021;}
|
||||
.st10{fill-rule:evenodd;clip-rule:evenodd;}
|
||||
.st11{fill:#2979FF;}
|
||||
.st12{fill:#00B0FF;}
|
||||
.st13{fill:#FF6D40;}
|
||||
.st14{fill:#FFC107;}
|
||||
.st15{fill:#E91E63;}
|
||||
.st16{opacity:0.5;fill:#FFFFFF;}
|
||||
.st17{opacity:0.2;}
|
||||
.st18{fill:#651FFF;}
|
||||
.st19{fill-rule:evenodd;clip-rule:evenodd;fill:#E91E63;}
|
||||
.st20{display:none;}
|
||||
</style>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_border" viewBox="0 -48 48 48">
|
||||
<rect y="-48" class="st0" width="48" height="48"/>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_grid" viewBox="0 -48 48 48">
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_1_" x="0" y="-48" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st1">
|
||||
<g>
|
||||
<line class="st2" x1="2" y1="-48" x2="2" y2="0"/>
|
||||
<line class="st2" x1="4" y1="-48" x2="4" y2="0"/>
|
||||
<line class="st2" x1="6" y1="-48" x2="6" y2="0"/>
|
||||
<line class="st2" x1="8" y1="-48" x2="8" y2="0"/>
|
||||
<line class="st2" x1="10" y1="-48" x2="10" y2="0"/>
|
||||
<line class="st2" x1="12" y1="-48" x2="12" y2="0"/>
|
||||
<line class="st2" x1="14" y1="-48" x2="14" y2="0"/>
|
||||
<line class="st2" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st2" x1="18" y1="-48" x2="18" y2="0"/>
|
||||
<line class="st2" x1="20" y1="-48" x2="20" y2="0"/>
|
||||
<line class="st2" x1="22" y1="-48" x2="22" y2="0"/>
|
||||
<line class="st2" x1="24" y1="-48" x2="24" y2="0"/>
|
||||
<line class="st2" x1="26" y1="-48" x2="26" y2="0"/>
|
||||
<line class="st2" x1="28" y1="-48" x2="28" y2="0"/>
|
||||
<line class="st2" x1="30" y1="-48" x2="30" y2="0"/>
|
||||
<line class="st2" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st2" x1="34" y1="-48" x2="34" y2="0"/>
|
||||
<line class="st2" x1="36" y1="-48" x2="36" y2="0"/>
|
||||
<line class="st2" x1="38" y1="-48" x2="38" y2="0"/>
|
||||
<line class="st2" x1="40" y1="-48" x2="40" y2="0"/>
|
||||
<line class="st2" x1="42" y1="-48" x2="42" y2="0"/>
|
||||
<line class="st2" x1="44" y1="-48" x2="44" y2="0"/>
|
||||
<line class="st2" x1="46" y1="-48" x2="46" y2="0"/>
|
||||
</g>
|
||||
<g>
|
||||
<line class="st2" x1="0" y1="-2" x2="48" y2="-2"/>
|
||||
<line class="st2" x1="0" y1="-4" x2="48" y2="-4"/>
|
||||
<line class="st2" x1="0" y1="-6" x2="48" y2="-6"/>
|
||||
<line class="st2" x1="0" y1="-8" x2="48" y2="-8"/>
|
||||
<line class="st2" x1="0" y1="-10" x2="48" y2="-10"/>
|
||||
<line class="st2" x1="0" y1="-12" x2="48" y2="-12"/>
|
||||
<line class="st2" x1="0" y1="-14" x2="48" y2="-14"/>
|
||||
<line class="st2" x1="0" y1="-16" x2="48" y2="-16"/>
|
||||
<line class="st2" x1="0" y1="-18" x2="48" y2="-18"/>
|
||||
<line class="st2" x1="0" y1="-20" x2="48" y2="-20"/>
|
||||
<line class="st2" x1="0" y1="-22" x2="48" y2="-22"/>
|
||||
<line class="st2" x1="0" y1="-24" x2="48" y2="-24"/>
|
||||
<line class="st2" x1="0" y1="-26" x2="48" y2="-26"/>
|
||||
<line class="st2" x1="0" y1="-28" x2="48" y2="-28"/>
|
||||
<line class="st2" x1="0" y1="-30" x2="48" y2="-30"/>
|
||||
<line class="st2" x1="0" y1="-32" x2="48" y2="-32"/>
|
||||
<line class="st2" x1="0" y1="-34" x2="48" y2="-34"/>
|
||||
<line class="st2" x1="0" y1="-36" x2="48" y2="-36"/>
|
||||
<line class="st2" x1="0" y1="-38" x2="48" y2="-38"/>
|
||||
<line class="st2" x1="0" y1="-40" x2="48" y2="-40"/>
|
||||
<line class="st2" x1="0" y1="-42" x2="48" y2="-42"/>
|
||||
<line class="st2" x1="0" y1="-44" x2="48" y2="-44"/>
|
||||
<line class="st2" x1="0" y1="-46" x2="48" y2="-46"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M47.8-0.2v-47.5H0.2v47.5H47.8 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_keylines" viewBox="0 -48 48 48">
|
||||
<g class="st3">
|
||||
<defs>
|
||||
<rect id="SVGID_3_" x="0" y="-48" class="st3" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_4_">
|
||||
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<line class="st4" x1="24" y1="0" x2="24" y2="-48"/>
|
||||
<line class="st4" x1="48" y1="-24" x2="0" y2="-24"/>
|
||||
<line class="st4" x1="48" y1="-16" x2="0" y2="-16"/>
|
||||
<line class="st4" x1="48" y1="-32" x2="0" y2="-32"/>
|
||||
<line class="st4" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st4" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st4" x1="47.7" y1="-0.3" x2="0.2" y2="-47.8"/>
|
||||
<line class="st4" x1="0.2" y1="-0.3" x2="47.7" y2="-47.8"/>
|
||||
<path class="st4" d="M24-14c-5.5,0-10-4.5-10-10c0-5.5,4.5-10,10-10c5.5,0,10,4.5,10,10C34-18.5,29.5-14,24-14z"/>
|
||||
<path class="st4" d="M24-4C12.9-4,4-12.9,4-24c0-11.1,8.9-20,20-20c11.1,0,20,8.9,20,20C44-12.9,35.1-4,24-4z"/>
|
||||
<path class="st4" d="M38-6H10c-2.2,0-4-1.8-4-4v-28c0-2.2,1.8-4,4-4h28c2.2,0,4,1.8,4,4v28C42-7.8,40.2-6,38-6z"/>
|
||||
<path class="st4" d="M40-8H8c-2.2,0-4-1.8-4-4v-24c0-2.2,1.8-4,4-4h32c2.2,0,4,1.8,4,4l0,24C44-9.8,42.2-8,40-8z"/>
|
||||
<path class="st4" d="M40-40v32c0,2.2-1.8,4-4,4H12C9.8-4,8-5.8,8-8v-32c0-2.2,1.8-4,4-4h24C38.2-44,40-42.2,40-40z"/>
|
||||
<g class="st5">
|
||||
<path d="M47.7-0.3v-47.5H0.2v47.5H47.7 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<g id="label">
|
||||
</g>
|
||||
<g id="border">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_border" width="48" height="48" y="-48" transform="matrix(0.5 0 0 -0.5 3.916831e-04 5.698877e-05)" style="overflow:visible;"/>
|
||||
</g>
|
||||
<g id="icon">
|
||||
<g>
|
||||
<rect x="0" y="0" class="st0" width="24" height="24"/>
|
||||
<g>
|
||||
<path class="st18" d="M16,2H6C4.9,2,4,2.9,4,4l0,16c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2V6L16,2z M9,18H7v-2h2V18z M9,15H7v-2h2
|
||||
V15z M9,12H7v-2h2V12z M17,18h-7v-2h7V18z M17,15h-7v-2h7V15z M17,12h-7v-2h7V12z"/>
|
||||
<path class="st16" d="M16,6V2l4,4H16z"/>
|
||||
<path class="st17" d="M20,6v4l-4-4H20z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="grid" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_grid" width="48" height="48" id="XMLID_106_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.139775e-04 -2.620241e-04)" style="display:inline;overflow:visible;opacity:0.15;"/>
|
||||
</g>
|
||||
<g id="keylines" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_keylines" width="48" height="48" id="XMLID_86_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.709663e-04 -2.924798e-04)" style="display:inline;overflow:visible;"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.7 KiB |
148
lib/core/assets/images/ft_ic_google_sheets.svg
Executable file
@@ -0,0 +1,148 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
|
||||
height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{clip-path:url(#SVGID_2_);}
|
||||
.st2{fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st3{opacity:0.4;}
|
||||
.st4{clip-path:url(#SVGID_4_);fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st5{clip-path:url(#SVGID_4_);}
|
||||
.st6{fill:#FFFFFF;}
|
||||
.st7{fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:10;}
|
||||
.st8{fill:#22BE73;}
|
||||
.st9{fill:#D9E021;}
|
||||
.st10{fill-rule:evenodd;clip-rule:evenodd;}
|
||||
.st11{fill:#2979FF;}
|
||||
.st12{fill:#00B0FF;}
|
||||
.st13{fill:#FF6D40;}
|
||||
.st14{fill:#FFC107;}
|
||||
.st15{fill:#E91E63;}
|
||||
.st16{opacity:0.5;fill:#FFFFFF;}
|
||||
.st17{opacity:0.2;}
|
||||
.st18{fill:#651FFF;}
|
||||
.st19{fill-rule:evenodd;clip-rule:evenodd;fill:#E91E63;}
|
||||
.st20{display:none;}
|
||||
</style>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_border" viewBox="0 -48 48 48">
|
||||
<rect y="-48" class="st0" width="48" height="48"/>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_grid" viewBox="0 -48 48 48">
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_1_" x="0" y="-48" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st1">
|
||||
<g>
|
||||
<line class="st2" x1="2" y1="-48" x2="2" y2="0"/>
|
||||
<line class="st2" x1="4" y1="-48" x2="4" y2="0"/>
|
||||
<line class="st2" x1="6" y1="-48" x2="6" y2="0"/>
|
||||
<line class="st2" x1="8" y1="-48" x2="8" y2="0"/>
|
||||
<line class="st2" x1="10" y1="-48" x2="10" y2="0"/>
|
||||
<line class="st2" x1="12" y1="-48" x2="12" y2="0"/>
|
||||
<line class="st2" x1="14" y1="-48" x2="14" y2="0"/>
|
||||
<line class="st2" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st2" x1="18" y1="-48" x2="18" y2="0"/>
|
||||
<line class="st2" x1="20" y1="-48" x2="20" y2="0"/>
|
||||
<line class="st2" x1="22" y1="-48" x2="22" y2="0"/>
|
||||
<line class="st2" x1="24" y1="-48" x2="24" y2="0"/>
|
||||
<line class="st2" x1="26" y1="-48" x2="26" y2="0"/>
|
||||
<line class="st2" x1="28" y1="-48" x2="28" y2="0"/>
|
||||
<line class="st2" x1="30" y1="-48" x2="30" y2="0"/>
|
||||
<line class="st2" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st2" x1="34" y1="-48" x2="34" y2="0"/>
|
||||
<line class="st2" x1="36" y1="-48" x2="36" y2="0"/>
|
||||
<line class="st2" x1="38" y1="-48" x2="38" y2="0"/>
|
||||
<line class="st2" x1="40" y1="-48" x2="40" y2="0"/>
|
||||
<line class="st2" x1="42" y1="-48" x2="42" y2="0"/>
|
||||
<line class="st2" x1="44" y1="-48" x2="44" y2="0"/>
|
||||
<line class="st2" x1="46" y1="-48" x2="46" y2="0"/>
|
||||
</g>
|
||||
<g>
|
||||
<line class="st2" x1="0" y1="-2" x2="48" y2="-2"/>
|
||||
<line class="st2" x1="0" y1="-4" x2="48" y2="-4"/>
|
||||
<line class="st2" x1="0" y1="-6" x2="48" y2="-6"/>
|
||||
<line class="st2" x1="0" y1="-8" x2="48" y2="-8"/>
|
||||
<line class="st2" x1="0" y1="-10" x2="48" y2="-10"/>
|
||||
<line class="st2" x1="0" y1="-12" x2="48" y2="-12"/>
|
||||
<line class="st2" x1="0" y1="-14" x2="48" y2="-14"/>
|
||||
<line class="st2" x1="0" y1="-16" x2="48" y2="-16"/>
|
||||
<line class="st2" x1="0" y1="-18" x2="48" y2="-18"/>
|
||||
<line class="st2" x1="0" y1="-20" x2="48" y2="-20"/>
|
||||
<line class="st2" x1="0" y1="-22" x2="48" y2="-22"/>
|
||||
<line class="st2" x1="0" y1="-24" x2="48" y2="-24"/>
|
||||
<line class="st2" x1="0" y1="-26" x2="48" y2="-26"/>
|
||||
<line class="st2" x1="0" y1="-28" x2="48" y2="-28"/>
|
||||
<line class="st2" x1="0" y1="-30" x2="48" y2="-30"/>
|
||||
<line class="st2" x1="0" y1="-32" x2="48" y2="-32"/>
|
||||
<line class="st2" x1="0" y1="-34" x2="48" y2="-34"/>
|
||||
<line class="st2" x1="0" y1="-36" x2="48" y2="-36"/>
|
||||
<line class="st2" x1="0" y1="-38" x2="48" y2="-38"/>
|
||||
<line class="st2" x1="0" y1="-40" x2="48" y2="-40"/>
|
||||
<line class="st2" x1="0" y1="-42" x2="48" y2="-42"/>
|
||||
<line class="st2" x1="0" y1="-44" x2="48" y2="-44"/>
|
||||
<line class="st2" x1="0" y1="-46" x2="48" y2="-46"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M47.8-0.2v-47.5H0.2v47.5H47.8 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_keylines" viewBox="0 -48 48 48">
|
||||
<g class="st3">
|
||||
<defs>
|
||||
<rect id="SVGID_3_" x="0" y="-48" class="st3" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_4_">
|
||||
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<line class="st4" x1="24" y1="0" x2="24" y2="-48"/>
|
||||
<line class="st4" x1="48" y1="-24" x2="0" y2="-24"/>
|
||||
<line class="st4" x1="48" y1="-16" x2="0" y2="-16"/>
|
||||
<line class="st4" x1="48" y1="-32" x2="0" y2="-32"/>
|
||||
<line class="st4" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st4" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st4" x1="47.7" y1="-0.3" x2="0.2" y2="-47.8"/>
|
||||
<line class="st4" x1="0.2" y1="-0.3" x2="47.7" y2="-47.8"/>
|
||||
<path class="st4" d="M24-14c-5.5,0-10-4.5-10-10c0-5.5,4.5-10,10-10c5.5,0,10,4.5,10,10C34-18.5,29.5-14,24-14z"/>
|
||||
<path class="st4" d="M24-4C12.9-4,4-12.9,4-24c0-11.1,8.9-20,20-20c11.1,0,20,8.9,20,20C44-12.9,35.1-4,24-4z"/>
|
||||
<path class="st4" d="M38-6H10c-2.2,0-4-1.8-4-4v-28c0-2.2,1.8-4,4-4h28c2.2,0,4,1.8,4,4v28C42-7.8,40.2-6,38-6z"/>
|
||||
<path class="st4" d="M40-8H8c-2.2,0-4-1.8-4-4v-24c0-2.2,1.8-4,4-4h32c2.2,0,4,1.8,4,4l0,24C44-9.8,42.2-8,40-8z"/>
|
||||
<path class="st4" d="M40-40v32c0,2.2-1.8,4-4,4H12C9.8-4,8-5.8,8-8v-32c0-2.2,1.8-4,4-4h24C38.2-44,40-42.2,40-40z"/>
|
||||
<g class="st5">
|
||||
<path d="M47.7-0.3v-47.5H0.2v47.5H47.7 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<g id="label">
|
||||
</g>
|
||||
<g id="border">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_border" width="48" height="48" y="-48" transform="matrix(0.5 0 0 -0.5 3.916831e-04 5.698877e-05)" style="overflow:visible;"/>
|
||||
</g>
|
||||
<g id="icon">
|
||||
<g>
|
||||
<rect x="0" y="0" class="st0" width="24" height="24"/>
|
||||
<g>
|
||||
<path class="st8" d="M6,2C4.9,2,4,2.9,4,4l0,16c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2V6l-4-4H6z"/>
|
||||
<path class="st6" d="M17,9L17,9L7,9v0h0v10h10L17,9L17,9z M10,13v2H8v-2H10z M8,12v-2h2v2H8z M11,13h5v2h-5V13z M11,12v-2h5v2H11
|
||||
z M8,18v-2h2v2H8z M11,18v-2h5v2H11z"/>
|
||||
<path class="st16" d="M16,6V2l4,4H16z"/>
|
||||
<path class="st17" d="M20,6v4l-4-4H20z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="grid" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_grid" width="48" height="48" id="XMLID_110_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.139775e-04 -2.620241e-04)" style="display:inline;overflow:visible;opacity:0.15;"/>
|
||||
</g>
|
||||
<g id="keylines" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_keylines" width="48" height="48" id="XMLID_90_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.709663e-04 -2.924798e-04)" style="display:inline;overflow:visible;"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.7 KiB |
146
lib/core/assets/images/ft_ic_google_slides.svg
Executable file
@@ -0,0 +1,146 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
|
||||
height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{clip-path:url(#SVGID_2_);}
|
||||
.st2{fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st3{opacity:0.4;}
|
||||
.st4{clip-path:url(#SVGID_4_);fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st5{clip-path:url(#SVGID_4_);}
|
||||
.st6{fill:#FFFFFF;}
|
||||
.st7{fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:10;}
|
||||
.st8{fill:#22BE73;}
|
||||
.st9{fill:#D9E021;}
|
||||
.st10{fill-rule:evenodd;clip-rule:evenodd;}
|
||||
.st11{fill:#2979FF;}
|
||||
.st12{fill:#00B0FF;}
|
||||
.st13{fill:#FF6D40;}
|
||||
.st14{fill:#FFC107;}
|
||||
.st15{fill:#E91E63;}
|
||||
.st16{opacity:0.5;fill:#FFFFFF;}
|
||||
.st17{opacity:0.2;}
|
||||
.st18{fill:#651FFF;}
|
||||
.st19{fill-rule:evenodd;clip-rule:evenodd;fill:#E91E63;}
|
||||
.st20{display:none;}
|
||||
</style>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_border" viewBox="0 -48 48 48">
|
||||
<rect y="-48" class="st0" width="48" height="48"/>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_grid" viewBox="0 -48 48 48">
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_1_" x="0" y="-48" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st1">
|
||||
<g>
|
||||
<line class="st2" x1="2" y1="-48" x2="2" y2="0"/>
|
||||
<line class="st2" x1="4" y1="-48" x2="4" y2="0"/>
|
||||
<line class="st2" x1="6" y1="-48" x2="6" y2="0"/>
|
||||
<line class="st2" x1="8" y1="-48" x2="8" y2="0"/>
|
||||
<line class="st2" x1="10" y1="-48" x2="10" y2="0"/>
|
||||
<line class="st2" x1="12" y1="-48" x2="12" y2="0"/>
|
||||
<line class="st2" x1="14" y1="-48" x2="14" y2="0"/>
|
||||
<line class="st2" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st2" x1="18" y1="-48" x2="18" y2="0"/>
|
||||
<line class="st2" x1="20" y1="-48" x2="20" y2="0"/>
|
||||
<line class="st2" x1="22" y1="-48" x2="22" y2="0"/>
|
||||
<line class="st2" x1="24" y1="-48" x2="24" y2="0"/>
|
||||
<line class="st2" x1="26" y1="-48" x2="26" y2="0"/>
|
||||
<line class="st2" x1="28" y1="-48" x2="28" y2="0"/>
|
||||
<line class="st2" x1="30" y1="-48" x2="30" y2="0"/>
|
||||
<line class="st2" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st2" x1="34" y1="-48" x2="34" y2="0"/>
|
||||
<line class="st2" x1="36" y1="-48" x2="36" y2="0"/>
|
||||
<line class="st2" x1="38" y1="-48" x2="38" y2="0"/>
|
||||
<line class="st2" x1="40" y1="-48" x2="40" y2="0"/>
|
||||
<line class="st2" x1="42" y1="-48" x2="42" y2="0"/>
|
||||
<line class="st2" x1="44" y1="-48" x2="44" y2="0"/>
|
||||
<line class="st2" x1="46" y1="-48" x2="46" y2="0"/>
|
||||
</g>
|
||||
<g>
|
||||
<line class="st2" x1="0" y1="-2" x2="48" y2="-2"/>
|
||||
<line class="st2" x1="0" y1="-4" x2="48" y2="-4"/>
|
||||
<line class="st2" x1="0" y1="-6" x2="48" y2="-6"/>
|
||||
<line class="st2" x1="0" y1="-8" x2="48" y2="-8"/>
|
||||
<line class="st2" x1="0" y1="-10" x2="48" y2="-10"/>
|
||||
<line class="st2" x1="0" y1="-12" x2="48" y2="-12"/>
|
||||
<line class="st2" x1="0" y1="-14" x2="48" y2="-14"/>
|
||||
<line class="st2" x1="0" y1="-16" x2="48" y2="-16"/>
|
||||
<line class="st2" x1="0" y1="-18" x2="48" y2="-18"/>
|
||||
<line class="st2" x1="0" y1="-20" x2="48" y2="-20"/>
|
||||
<line class="st2" x1="0" y1="-22" x2="48" y2="-22"/>
|
||||
<line class="st2" x1="0" y1="-24" x2="48" y2="-24"/>
|
||||
<line class="st2" x1="0" y1="-26" x2="48" y2="-26"/>
|
||||
<line class="st2" x1="0" y1="-28" x2="48" y2="-28"/>
|
||||
<line class="st2" x1="0" y1="-30" x2="48" y2="-30"/>
|
||||
<line class="st2" x1="0" y1="-32" x2="48" y2="-32"/>
|
||||
<line class="st2" x1="0" y1="-34" x2="48" y2="-34"/>
|
||||
<line class="st2" x1="0" y1="-36" x2="48" y2="-36"/>
|
||||
<line class="st2" x1="0" y1="-38" x2="48" y2="-38"/>
|
||||
<line class="st2" x1="0" y1="-40" x2="48" y2="-40"/>
|
||||
<line class="st2" x1="0" y1="-42" x2="48" y2="-42"/>
|
||||
<line class="st2" x1="0" y1="-44" x2="48" y2="-44"/>
|
||||
<line class="st2" x1="0" y1="-46" x2="48" y2="-46"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M47.8-0.2v-47.5H0.2v47.5H47.8 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_keylines" viewBox="0 -48 48 48">
|
||||
<g class="st3">
|
||||
<defs>
|
||||
<rect id="SVGID_3_" x="0" y="-48" class="st3" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_4_">
|
||||
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<line class="st4" x1="24" y1="0" x2="24" y2="-48"/>
|
||||
<line class="st4" x1="48" y1="-24" x2="0" y2="-24"/>
|
||||
<line class="st4" x1="48" y1="-16" x2="0" y2="-16"/>
|
||||
<line class="st4" x1="48" y1="-32" x2="0" y2="-32"/>
|
||||
<line class="st4" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st4" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st4" x1="47.7" y1="-0.3" x2="0.2" y2="-47.8"/>
|
||||
<line class="st4" x1="0.2" y1="-0.3" x2="47.7" y2="-47.8"/>
|
||||
<path class="st4" d="M24-14c-5.5,0-10-4.5-10-10c0-5.5,4.5-10,10-10c5.5,0,10,4.5,10,10C34-18.5,29.5-14,24-14z"/>
|
||||
<path class="st4" d="M24-4C12.9-4,4-12.9,4-24c0-11.1,8.9-20,20-20c11.1,0,20,8.9,20,20C44-12.9,35.1-4,24-4z"/>
|
||||
<path class="st4" d="M38-6H10c-2.2,0-4-1.8-4-4v-28c0-2.2,1.8-4,4-4h28c2.2,0,4,1.8,4,4v28C42-7.8,40.2-6,38-6z"/>
|
||||
<path class="st4" d="M40-8H8c-2.2,0-4-1.8-4-4v-24c0-2.2,1.8-4,4-4h32c2.2,0,4,1.8,4,4l0,24C44-9.8,42.2-8,40-8z"/>
|
||||
<path class="st4" d="M40-40v32c0,2.2-1.8,4-4,4H12C9.8-4,8-5.8,8-8v-32c0-2.2,1.8-4,4-4h24C38.2-44,40-42.2,40-40z"/>
|
||||
<g class="st5">
|
||||
<path d="M47.7-0.3v-47.5H0.2v47.5H47.7 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<g id="label">
|
||||
</g>
|
||||
<g id="border">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_border" width="48" height="48" y="-48" transform="matrix(0.5 0 0 -0.5 3.916831e-04 5.698877e-05)" style="overflow:visible;"/>
|
||||
</g>
|
||||
<g id="icon">
|
||||
<g>
|
||||
<rect x="0" y="0" class="st0" width="24" height="24"/>
|
||||
<g>
|
||||
<path class="st14" d="M16,2H6C4.9,2,4,2.9,4,4l0,16c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2V6L16,2z M17,17H7v-7h10V17z"/>
|
||||
<path class="st16" d="M16,6V2l4,4H16z"/>
|
||||
<path class="st17" d="M20,6v4l-4-4H20z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="grid" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_grid" width="48" height="48" id="XMLID_108_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.139775e-04 -2.620241e-04)" style="display:inline;overflow:visible;opacity:0.15;"/>
|
||||
</g>
|
||||
<g id="keylines" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_keylines" width="48" height="48" id="XMLID_88_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.709663e-04 -2.924798e-04)" style="display:inline;overflow:visible;"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.6 KiB |
142
lib/core/assets/images/ft_ic_miscellaneous.svg
Executable file
@@ -0,0 +1,142 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
|
||||
height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{clip-path:url(#SVGID_2_);}
|
||||
.st2{fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st3{opacity:0.4;}
|
||||
.st4{clip-path:url(#SVGID_4_);fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st5{clip-path:url(#SVGID_4_);}
|
||||
.st6{fill:#FFFFFF;}
|
||||
.st7{fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:10;}
|
||||
.st8{fill:#22BE73;}
|
||||
.st9{fill:#D9E021;}
|
||||
.st10{fill-rule:evenodd;clip-rule:evenodd;}
|
||||
.st11{fill:#2979FF;}
|
||||
.st12{fill:#00B0FF;}
|
||||
.st13{fill:#FF6D40;}
|
||||
.st14{fill:#FFC107;}
|
||||
.st15{fill:#E91E63;}
|
||||
.st16{opacity:0.5;fill:#FFFFFF;}
|
||||
.st17{opacity:0.2;}
|
||||
.st18{fill:#651FFF;}
|
||||
.st19{fill-rule:evenodd;clip-rule:evenodd;fill:#E91E63;}
|
||||
.st20{display:none;}
|
||||
</style>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_border" viewBox="0 -48 48 48">
|
||||
<rect y="-48" class="st0" width="48" height="48"/>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_grid" viewBox="0 -48 48 48">
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_1_" x="0" y="-48" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st1">
|
||||
<g>
|
||||
<line class="st2" x1="2" y1="-48" x2="2" y2="0"/>
|
||||
<line class="st2" x1="4" y1="-48" x2="4" y2="0"/>
|
||||
<line class="st2" x1="6" y1="-48" x2="6" y2="0"/>
|
||||
<line class="st2" x1="8" y1="-48" x2="8" y2="0"/>
|
||||
<line class="st2" x1="10" y1="-48" x2="10" y2="0"/>
|
||||
<line class="st2" x1="12" y1="-48" x2="12" y2="0"/>
|
||||
<line class="st2" x1="14" y1="-48" x2="14" y2="0"/>
|
||||
<line class="st2" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st2" x1="18" y1="-48" x2="18" y2="0"/>
|
||||
<line class="st2" x1="20" y1="-48" x2="20" y2="0"/>
|
||||
<line class="st2" x1="22" y1="-48" x2="22" y2="0"/>
|
||||
<line class="st2" x1="24" y1="-48" x2="24" y2="0"/>
|
||||
<line class="st2" x1="26" y1="-48" x2="26" y2="0"/>
|
||||
<line class="st2" x1="28" y1="-48" x2="28" y2="0"/>
|
||||
<line class="st2" x1="30" y1="-48" x2="30" y2="0"/>
|
||||
<line class="st2" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st2" x1="34" y1="-48" x2="34" y2="0"/>
|
||||
<line class="st2" x1="36" y1="-48" x2="36" y2="0"/>
|
||||
<line class="st2" x1="38" y1="-48" x2="38" y2="0"/>
|
||||
<line class="st2" x1="40" y1="-48" x2="40" y2="0"/>
|
||||
<line class="st2" x1="42" y1="-48" x2="42" y2="0"/>
|
||||
<line class="st2" x1="44" y1="-48" x2="44" y2="0"/>
|
||||
<line class="st2" x1="46" y1="-48" x2="46" y2="0"/>
|
||||
</g>
|
||||
<g>
|
||||
<line class="st2" x1="0" y1="-2" x2="48" y2="-2"/>
|
||||
<line class="st2" x1="0" y1="-4" x2="48" y2="-4"/>
|
||||
<line class="st2" x1="0" y1="-6" x2="48" y2="-6"/>
|
||||
<line class="st2" x1="0" y1="-8" x2="48" y2="-8"/>
|
||||
<line class="st2" x1="0" y1="-10" x2="48" y2="-10"/>
|
||||
<line class="st2" x1="0" y1="-12" x2="48" y2="-12"/>
|
||||
<line class="st2" x1="0" y1="-14" x2="48" y2="-14"/>
|
||||
<line class="st2" x1="0" y1="-16" x2="48" y2="-16"/>
|
||||
<line class="st2" x1="0" y1="-18" x2="48" y2="-18"/>
|
||||
<line class="st2" x1="0" y1="-20" x2="48" y2="-20"/>
|
||||
<line class="st2" x1="0" y1="-22" x2="48" y2="-22"/>
|
||||
<line class="st2" x1="0" y1="-24" x2="48" y2="-24"/>
|
||||
<line class="st2" x1="0" y1="-26" x2="48" y2="-26"/>
|
||||
<line class="st2" x1="0" y1="-28" x2="48" y2="-28"/>
|
||||
<line class="st2" x1="0" y1="-30" x2="48" y2="-30"/>
|
||||
<line class="st2" x1="0" y1="-32" x2="48" y2="-32"/>
|
||||
<line class="st2" x1="0" y1="-34" x2="48" y2="-34"/>
|
||||
<line class="st2" x1="0" y1="-36" x2="48" y2="-36"/>
|
||||
<line class="st2" x1="0" y1="-38" x2="48" y2="-38"/>
|
||||
<line class="st2" x1="0" y1="-40" x2="48" y2="-40"/>
|
||||
<line class="st2" x1="0" y1="-42" x2="48" y2="-42"/>
|
||||
<line class="st2" x1="0" y1="-44" x2="48" y2="-44"/>
|
||||
<line class="st2" x1="0" y1="-46" x2="48" y2="-46"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M47.8-0.2v-47.5H0.2v47.5H47.8 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_keylines" viewBox="0 -48 48 48">
|
||||
<g class="st3">
|
||||
<defs>
|
||||
<rect id="SVGID_3_" x="0" y="-48" class="st3" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_4_">
|
||||
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<line class="st4" x1="24" y1="0" x2="24" y2="-48"/>
|
||||
<line class="st4" x1="48" y1="-24" x2="0" y2="-24"/>
|
||||
<line class="st4" x1="48" y1="-16" x2="0" y2="-16"/>
|
||||
<line class="st4" x1="48" y1="-32" x2="0" y2="-32"/>
|
||||
<line class="st4" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st4" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st4" x1="47.7" y1="-0.3" x2="0.2" y2="-47.8"/>
|
||||
<line class="st4" x1="0.2" y1="-0.3" x2="47.7" y2="-47.8"/>
|
||||
<path class="st4" d="M24-14c-5.5,0-10-4.5-10-10c0-5.5,4.5-10,10-10c5.5,0,10,4.5,10,10C34-18.5,29.5-14,24-14z"/>
|
||||
<path class="st4" d="M24-4C12.9-4,4-12.9,4-24c0-11.1,8.9-20,20-20c11.1,0,20,8.9,20,20C44-12.9,35.1-4,24-4z"/>
|
||||
<path class="st4" d="M38-6H10c-2.2,0-4-1.8-4-4v-28c0-2.2,1.8-4,4-4h28c2.2,0,4,1.8,4,4v28C42-7.8,40.2-6,38-6z"/>
|
||||
<path class="st4" d="M40-8H8c-2.2,0-4-1.8-4-4v-24c0-2.2,1.8-4,4-4h32c2.2,0,4,1.8,4,4l0,24C44-9.8,42.2-8,40-8z"/>
|
||||
<path class="st4" d="M40-40v32c0,2.2-1.8,4-4,4H12C9.8-4,8-5.8,8-8v-32c0-2.2,1.8-4,4-4h24C38.2-44,40-42.2,40-40z"/>
|
||||
<g class="st5">
|
||||
<path d="M47.7-0.3v-47.5H0.2v47.5H47.7 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<g id="label">
|
||||
</g>
|
||||
<g id="border">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_border" width="48" height="48" y="-48" transform="matrix(0.5 0 0 -0.5 3.916831e-04 5.698877e-05)" style="overflow:visible;"/>
|
||||
</g>
|
||||
<g id="icon">
|
||||
<g>
|
||||
<path class="st9" d="M6,2C4.9,2,4,2.9,4,4l0,16c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2V8l-6-6H6z M13,9V3.5L18.5,9H13z"/>
|
||||
<path class="st0" d="M0,0h24v24H0V0z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="grid" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_grid" width="48" height="48" id="XMLID_28_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.139775e-04 -2.620241e-04)" style="display:inline;overflow:visible;opacity:0.15;"/>
|
||||
</g>
|
||||
<g id="keylines" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_keylines" width="48" height="48" id="XMLID_26_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.709663e-04 -2.924798e-04)" style="display:inline;overflow:visible;"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.5 KiB |
157
lib/core/assets/images/ft_ic_ms_excel.svg
Executable file
@@ -0,0 +1,157 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
|
||||
height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{clip-path:url(#SVGID_2_);}
|
||||
.st2{fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st3{opacity:0.4;}
|
||||
.st4{clip-path:url(#SVGID_4_);fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st5{clip-path:url(#SVGID_4_);}
|
||||
.st6{fill:#FFFFFF;}
|
||||
.st7{fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:10;}
|
||||
.st8{fill:#22BE73;}
|
||||
.st9{fill:#D9E021;}
|
||||
.st10{fill-rule:evenodd;clip-rule:evenodd;}
|
||||
.st11{fill:#2979FF;}
|
||||
.st12{fill:#00B0FF;}
|
||||
.st13{fill:#FF6D40;}
|
||||
.st14{fill:#FFC107;}
|
||||
.st15{fill:#E91E63;}
|
||||
.st16{opacity:0.5;fill:#FFFFFF;}
|
||||
.st17{opacity:0.2;}
|
||||
.st18{fill:#651FFF;}
|
||||
.st19{fill-rule:evenodd;clip-rule:evenodd;fill:#E91E63;}
|
||||
.st20{display:none;}
|
||||
</style>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_border" viewBox="0 -48 48 48">
|
||||
<rect y="-48" class="st0" width="48" height="48"/>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_grid" viewBox="0 -48 48 48">
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_1_" x="0" y="-48" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st1">
|
||||
<g>
|
||||
<line class="st2" x1="2" y1="-48" x2="2" y2="0"/>
|
||||
<line class="st2" x1="4" y1="-48" x2="4" y2="0"/>
|
||||
<line class="st2" x1="6" y1="-48" x2="6" y2="0"/>
|
||||
<line class="st2" x1="8" y1="-48" x2="8" y2="0"/>
|
||||
<line class="st2" x1="10" y1="-48" x2="10" y2="0"/>
|
||||
<line class="st2" x1="12" y1="-48" x2="12" y2="0"/>
|
||||
<line class="st2" x1="14" y1="-48" x2="14" y2="0"/>
|
||||
<line class="st2" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st2" x1="18" y1="-48" x2="18" y2="0"/>
|
||||
<line class="st2" x1="20" y1="-48" x2="20" y2="0"/>
|
||||
<line class="st2" x1="22" y1="-48" x2="22" y2="0"/>
|
||||
<line class="st2" x1="24" y1="-48" x2="24" y2="0"/>
|
||||
<line class="st2" x1="26" y1="-48" x2="26" y2="0"/>
|
||||
<line class="st2" x1="28" y1="-48" x2="28" y2="0"/>
|
||||
<line class="st2" x1="30" y1="-48" x2="30" y2="0"/>
|
||||
<line class="st2" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st2" x1="34" y1="-48" x2="34" y2="0"/>
|
||||
<line class="st2" x1="36" y1="-48" x2="36" y2="0"/>
|
||||
<line class="st2" x1="38" y1="-48" x2="38" y2="0"/>
|
||||
<line class="st2" x1="40" y1="-48" x2="40" y2="0"/>
|
||||
<line class="st2" x1="42" y1="-48" x2="42" y2="0"/>
|
||||
<line class="st2" x1="44" y1="-48" x2="44" y2="0"/>
|
||||
<line class="st2" x1="46" y1="-48" x2="46" y2="0"/>
|
||||
</g>
|
||||
<g>
|
||||
<line class="st2" x1="0" y1="-2" x2="48" y2="-2"/>
|
||||
<line class="st2" x1="0" y1="-4" x2="48" y2="-4"/>
|
||||
<line class="st2" x1="0" y1="-6" x2="48" y2="-6"/>
|
||||
<line class="st2" x1="0" y1="-8" x2="48" y2="-8"/>
|
||||
<line class="st2" x1="0" y1="-10" x2="48" y2="-10"/>
|
||||
<line class="st2" x1="0" y1="-12" x2="48" y2="-12"/>
|
||||
<line class="st2" x1="0" y1="-14" x2="48" y2="-14"/>
|
||||
<line class="st2" x1="0" y1="-16" x2="48" y2="-16"/>
|
||||
<line class="st2" x1="0" y1="-18" x2="48" y2="-18"/>
|
||||
<line class="st2" x1="0" y1="-20" x2="48" y2="-20"/>
|
||||
<line class="st2" x1="0" y1="-22" x2="48" y2="-22"/>
|
||||
<line class="st2" x1="0" y1="-24" x2="48" y2="-24"/>
|
||||
<line class="st2" x1="0" y1="-26" x2="48" y2="-26"/>
|
||||
<line class="st2" x1="0" y1="-28" x2="48" y2="-28"/>
|
||||
<line class="st2" x1="0" y1="-30" x2="48" y2="-30"/>
|
||||
<line class="st2" x1="0" y1="-32" x2="48" y2="-32"/>
|
||||
<line class="st2" x1="0" y1="-34" x2="48" y2="-34"/>
|
||||
<line class="st2" x1="0" y1="-36" x2="48" y2="-36"/>
|
||||
<line class="st2" x1="0" y1="-38" x2="48" y2="-38"/>
|
||||
<line class="st2" x1="0" y1="-40" x2="48" y2="-40"/>
|
||||
<line class="st2" x1="0" y1="-42" x2="48" y2="-42"/>
|
||||
<line class="st2" x1="0" y1="-44" x2="48" y2="-44"/>
|
||||
<line class="st2" x1="0" y1="-46" x2="48" y2="-46"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M47.8-0.2v-47.5H0.2v47.5H47.8 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_keylines" viewBox="0 -48 48 48">
|
||||
<g class="st3">
|
||||
<defs>
|
||||
<rect id="SVGID_3_" x="0" y="-48" class="st3" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_4_">
|
||||
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<line class="st4" x1="24" y1="0" x2="24" y2="-48"/>
|
||||
<line class="st4" x1="48" y1="-24" x2="0" y2="-24"/>
|
||||
<line class="st4" x1="48" y1="-16" x2="0" y2="-16"/>
|
||||
<line class="st4" x1="48" y1="-32" x2="0" y2="-32"/>
|
||||
<line class="st4" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st4" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st4" x1="47.7" y1="-0.3" x2="0.2" y2="-47.8"/>
|
||||
<line class="st4" x1="0.2" y1="-0.3" x2="47.7" y2="-47.8"/>
|
||||
<path class="st4" d="M24-14c-5.5,0-10-4.5-10-10c0-5.5,4.5-10,10-10c5.5,0,10,4.5,10,10C34-18.5,29.5-14,24-14z"/>
|
||||
<path class="st4" d="M24-4C12.9-4,4-12.9,4-24c0-11.1,8.9-20,20-20c11.1,0,20,8.9,20,20C44-12.9,35.1-4,24-4z"/>
|
||||
<path class="st4" d="M38-6H10c-2.2,0-4-1.8-4-4v-28c0-2.2,1.8-4,4-4h28c2.2,0,4,1.8,4,4v28C42-7.8,40.2-6,38-6z"/>
|
||||
<path class="st4" d="M40-8H8c-2.2,0-4-1.8-4-4v-24c0-2.2,1.8-4,4-4h32c2.2,0,4,1.8,4,4l0,24C44-9.8,42.2-8,40-8z"/>
|
||||
<path class="st4" d="M40-40v32c0,2.2-1.8,4-4,4H12C9.8-4,8-5.8,8-8v-32c0-2.2,1.8-4,4-4h24C38.2-44,40-42.2,40-40z"/>
|
||||
<g class="st5">
|
||||
<path d="M47.7-0.3v-47.5H0.2v47.5H47.7 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<g id="label">
|
||||
</g>
|
||||
<g id="border">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_border" width="48" height="48" y="-48" transform="matrix(0.5 0 0 -0.5 3.916831e-04 5.698877e-05)" style="overflow:visible;"/>
|
||||
</g>
|
||||
<g id="icon">
|
||||
<g>
|
||||
<g>
|
||||
<path class="st8" d="M22,17.2c0-3.9,0-7.9,0-11.8c0-0.4,0-0.8-0.2-1.1C21.4,4,21,4.1,20.6,4c-2.3,0-4.5,0-6.8,0
|
||||
c0-0.6,0-1.2,0-1.8h-1.3C9,2.8,5.5,3.4,2,4.1C2,9.4,2,14.7,2,20c3.5,0.6,6.9,1.2,10.4,1.8h1.4c0-0.7,0-1.4,0-2c2.4,0,4.7,0,7.1,0
|
||||
c0.4,0,0.9,0,1-0.5C22.1,18.6,22,17.9,22,17.2z M8.7,15.6c-0.4-0.9-0.9-1.9-1.1-2.9c-0.3,0.9-0.7,1.8-1.1,2.7c-0.5,0-1,0-1.5,0
|
||||
c0.6-1.1,1.1-2.3,1.7-3.4c-0.5-1.2-1.1-2.3-1.6-3.5c0.5,0,1-0.1,1.5-0.1c0.3,0.9,0.7,1.8,1,2.7c0.3-1,0.7-1.9,1.1-2.8
|
||||
c0.5,0,1-0.1,1.5-0.1c-0.6,1.2-1.2,2.5-1.8,3.7c0.6,1.3,1.3,2.5,1.9,3.8C9.8,15.6,9.2,15.6,8.7,15.6z M21.3,19c-2.5,0-5,0-7.5,0
|
||||
c0-0.5,0-0.9,0-1.4c0.6,0,1.2,0,1.8,0c0-0.5,0-1.1,0-1.6c-0.6,0-1.2,0-1.8,0c0-0.3,0-0.6,0-0.9c0.6,0,1.2,0,1.8,0
|
||||
c0-0.5,0-1.1,0-1.6c-0.6,0-1.2,0-1.8,0c0-0.3,0-0.6,0-0.9c0.6,0,1.2,0,1.8,0c0-0.5,0-1.1,0-1.6c-0.6,0-1.2,0-1.8,0
|
||||
c0-0.3,0-0.6,0-0.9c0.6,0,1.2,0,1.8,0c0-0.5,0-1.1,0-1.6c-0.6,0-1.2,0-1.8,0c0-0.3,0-0.6,0-0.9c0.6,0,1.2,0,1.8,0
|
||||
c0-0.5,0-1.1,0-1.6c-0.6,0-1.2,0-1.8,0c0-0.5,0-0.9,0-1.4c2.5,0,5,0,7.5,0C21.3,9.5,21.3,14.3,21.3,19z"/>
|
||||
<path class="st8" d="M16.5,6.1c1.1,0,2.1,0,3.2,0c0,0.5,0,1.1,0,1.6c-1.1,0-2.1,0-3.2,0C16.5,7.2,16.5,6.6,16.5,6.1z"/>
|
||||
<path class="st8" d="M16.5,8.6c1.1,0,2.1,0,3.2,0c0,0.5,0,1.1,0,1.6c-1.1,0-2.1,0-3.2,0C16.5,9.7,16.5,9.1,16.5,8.6z"/>
|
||||
<path class="st8" d="M16.5,11.1c1.1,0,2.1,0,3.2,0c0,0.5,0,1.1,0,1.6c-1.1,0-2.1,0-3.2,0C16.5,12.2,16.5,11.6,16.5,11.1z"/>
|
||||
<path class="st8" d="M16.5,13.6c1.1,0,2.1,0,3.2,0c0,0.5,0,1.1,0,1.6c-1.1,0-2.1,0-3.2,0C16.5,14.7,16.5,14.1,16.5,13.6z"/>
|
||||
<path class="st8" d="M16.5,16.1c1.1,0,2.1,0,3.2,0c0,0.5,0,1.1,0,1.6c-1.1,0-2.1,0-3.2,0C16.5,17.2,16.5,16.6,16.5,16.1z"/>
|
||||
</g>
|
||||
<rect x="0" y="0" class="st0" width="24" height="24"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="grid" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_grid" width="48" height="48" id="XMLID_118_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.139775e-04 -2.620241e-04)" style="display:inline;overflow:visible;opacity:0.15;"/>
|
||||
</g>
|
||||
<g id="keylines" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_keylines" width="48" height="48" id="XMLID_98_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.709663e-04 -2.924798e-04)" style="display:inline;overflow:visible;"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 8.0 KiB |
152
lib/core/assets/images/ft_ic_ms_powerpoint.svg
Executable file
@@ -0,0 +1,152 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
|
||||
height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{clip-path:url(#SVGID_2_);}
|
||||
.st2{fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st3{opacity:0.4;}
|
||||
.st4{clip-path:url(#SVGID_4_);fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st5{clip-path:url(#SVGID_4_);}
|
||||
.st6{fill:#FFFFFF;}
|
||||
.st7{fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:10;}
|
||||
.st8{fill:#22BE73;}
|
||||
.st9{fill:#D9E021;}
|
||||
.st10{fill-rule:evenodd;clip-rule:evenodd;}
|
||||
.st11{fill:#2979FF;}
|
||||
.st12{fill:#00B0FF;}
|
||||
.st13{fill:#FF6D40;}
|
||||
.st14{fill:#FFC107;}
|
||||
.st15{fill:#E91E63;}
|
||||
.st16{opacity:0.5;fill:#FFFFFF;}
|
||||
.st17{opacity:0.2;}
|
||||
.st18{fill:#651FFF;}
|
||||
.st19{fill-rule:evenodd;clip-rule:evenodd;fill:#E91E63;}
|
||||
.st20{display:none;}
|
||||
</style>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_border" viewBox="0 -48 48 48">
|
||||
<rect y="-48" class="st0" width="48" height="48"/>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_grid" viewBox="0 -48 48 48">
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_1_" x="0" y="-48" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st1">
|
||||
<g>
|
||||
<line class="st2" x1="2" y1="-48" x2="2" y2="0"/>
|
||||
<line class="st2" x1="4" y1="-48" x2="4" y2="0"/>
|
||||
<line class="st2" x1="6" y1="-48" x2="6" y2="0"/>
|
||||
<line class="st2" x1="8" y1="-48" x2="8" y2="0"/>
|
||||
<line class="st2" x1="10" y1="-48" x2="10" y2="0"/>
|
||||
<line class="st2" x1="12" y1="-48" x2="12" y2="0"/>
|
||||
<line class="st2" x1="14" y1="-48" x2="14" y2="0"/>
|
||||
<line class="st2" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st2" x1="18" y1="-48" x2="18" y2="0"/>
|
||||
<line class="st2" x1="20" y1="-48" x2="20" y2="0"/>
|
||||
<line class="st2" x1="22" y1="-48" x2="22" y2="0"/>
|
||||
<line class="st2" x1="24" y1="-48" x2="24" y2="0"/>
|
||||
<line class="st2" x1="26" y1="-48" x2="26" y2="0"/>
|
||||
<line class="st2" x1="28" y1="-48" x2="28" y2="0"/>
|
||||
<line class="st2" x1="30" y1="-48" x2="30" y2="0"/>
|
||||
<line class="st2" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st2" x1="34" y1="-48" x2="34" y2="0"/>
|
||||
<line class="st2" x1="36" y1="-48" x2="36" y2="0"/>
|
||||
<line class="st2" x1="38" y1="-48" x2="38" y2="0"/>
|
||||
<line class="st2" x1="40" y1="-48" x2="40" y2="0"/>
|
||||
<line class="st2" x1="42" y1="-48" x2="42" y2="0"/>
|
||||
<line class="st2" x1="44" y1="-48" x2="44" y2="0"/>
|
||||
<line class="st2" x1="46" y1="-48" x2="46" y2="0"/>
|
||||
</g>
|
||||
<g>
|
||||
<line class="st2" x1="0" y1="-2" x2="48" y2="-2"/>
|
||||
<line class="st2" x1="0" y1="-4" x2="48" y2="-4"/>
|
||||
<line class="st2" x1="0" y1="-6" x2="48" y2="-6"/>
|
||||
<line class="st2" x1="0" y1="-8" x2="48" y2="-8"/>
|
||||
<line class="st2" x1="0" y1="-10" x2="48" y2="-10"/>
|
||||
<line class="st2" x1="0" y1="-12" x2="48" y2="-12"/>
|
||||
<line class="st2" x1="0" y1="-14" x2="48" y2="-14"/>
|
||||
<line class="st2" x1="0" y1="-16" x2="48" y2="-16"/>
|
||||
<line class="st2" x1="0" y1="-18" x2="48" y2="-18"/>
|
||||
<line class="st2" x1="0" y1="-20" x2="48" y2="-20"/>
|
||||
<line class="st2" x1="0" y1="-22" x2="48" y2="-22"/>
|
||||
<line class="st2" x1="0" y1="-24" x2="48" y2="-24"/>
|
||||
<line class="st2" x1="0" y1="-26" x2="48" y2="-26"/>
|
||||
<line class="st2" x1="0" y1="-28" x2="48" y2="-28"/>
|
||||
<line class="st2" x1="0" y1="-30" x2="48" y2="-30"/>
|
||||
<line class="st2" x1="0" y1="-32" x2="48" y2="-32"/>
|
||||
<line class="st2" x1="0" y1="-34" x2="48" y2="-34"/>
|
||||
<line class="st2" x1="0" y1="-36" x2="48" y2="-36"/>
|
||||
<line class="st2" x1="0" y1="-38" x2="48" y2="-38"/>
|
||||
<line class="st2" x1="0" y1="-40" x2="48" y2="-40"/>
|
||||
<line class="st2" x1="0" y1="-42" x2="48" y2="-42"/>
|
||||
<line class="st2" x1="0" y1="-44" x2="48" y2="-44"/>
|
||||
<line class="st2" x1="0" y1="-46" x2="48" y2="-46"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M47.8-0.2v-47.5H0.2v47.5H47.8 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_keylines" viewBox="0 -48 48 48">
|
||||
<g class="st3">
|
||||
<defs>
|
||||
<rect id="SVGID_3_" x="0" y="-48" class="st3" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_4_">
|
||||
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<line class="st4" x1="24" y1="0" x2="24" y2="-48"/>
|
||||
<line class="st4" x1="48" y1="-24" x2="0" y2="-24"/>
|
||||
<line class="st4" x1="48" y1="-16" x2="0" y2="-16"/>
|
||||
<line class="st4" x1="48" y1="-32" x2="0" y2="-32"/>
|
||||
<line class="st4" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st4" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st4" x1="47.7" y1="-0.3" x2="0.2" y2="-47.8"/>
|
||||
<line class="st4" x1="0.2" y1="-0.3" x2="47.7" y2="-47.8"/>
|
||||
<path class="st4" d="M24-14c-5.5,0-10-4.5-10-10c0-5.5,4.5-10,10-10c5.5,0,10,4.5,10,10C34-18.5,29.5-14,24-14z"/>
|
||||
<path class="st4" d="M24-4C12.9-4,4-12.9,4-24c0-11.1,8.9-20,20-20c11.1,0,20,8.9,20,20C44-12.9,35.1-4,24-4z"/>
|
||||
<path class="st4" d="M38-6H10c-2.2,0-4-1.8-4-4v-28c0-2.2,1.8-4,4-4h28c2.2,0,4,1.8,4,4v28C42-7.8,40.2-6,38-6z"/>
|
||||
<path class="st4" d="M40-8H8c-2.2,0-4-1.8-4-4v-24c0-2.2,1.8-4,4-4h32c2.2,0,4,1.8,4,4l0,24C44-9.8,42.2-8,40-8z"/>
|
||||
<path class="st4" d="M40-40v32c0,2.2-1.8,4-4,4H12C9.8-4,8-5.8,8-8v-32c0-2.2,1.8-4,4-4h24C38.2-44,40-42.2,40-40z"/>
|
||||
<g class="st5">
|
||||
<path d="M47.7-0.3v-47.5H0.2v47.5H47.7 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<g id="label">
|
||||
</g>
|
||||
<g id="border">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_border" width="48" height="48" y="-48" transform="matrix(0.5 0 0 -0.5 3.916831e-04 5.698877e-05)" style="overflow:visible;"/>
|
||||
</g>
|
||||
<g id="icon">
|
||||
<g>
|
||||
<g>
|
||||
<path class="st14" d="M15.4,6.5c0,1,0,2,0,3c1,0,2,0,3,0C18.3,7.9,17,6.6,15.4,6.5z"/>
|
||||
<path class="st14" d="M22,5.2c0.1-0.5-0.4-0.9-0.9-0.9c-2.4,0-4.9,0-7.3,0c0-0.7,0-1.4,0-2h-1.3C9,2.8,5.5,3.4,2,4.1
|
||||
C2,9.4,2,14.7,2,20c3.5,0.6,6.9,1.2,10.4,1.8h1.4c0-0.8,0-1.5,0-2.3c2.3,0,4.5,0,6.8,0c0.4,0,0.8,0,1.2-0.2
|
||||
c0.3-0.4,0.2-0.9,0.2-1.4C22,13.7,22,9.4,22,5.2z M8.7,12.8C8.1,13,7.6,13,7,13c0,0.9,0,1.8,0,2.7c-0.4,0-0.9-0.1-1.4-0.1
|
||||
c0-2.4,0-4.9,0-7.3c1.2,0.1,2.7-0.5,3.8,0.4C10.4,9.9,10.1,12,8.7,12.8z M21.3,18.8c-2.5,0-5,0-7.5,0c0-0.6,0-1.2,0-1.8
|
||||
c1.8,0,3.6,0,5.5,0c0-0.3,0-0.6,0-0.9c-1.8,0-3.6,0-5.5,0c0-0.4,0-0.8,0-1.1c1.8,0,3.6,0,5.5,0c0-0.3,0-0.6,0-0.9
|
||||
c-1.8,0-3.6,0-5.5,0c0-0.4,0-0.9,0-1.3c0.9,0.3,1.9,0.3,2.7-0.3c0.9-0.5,1.3-1.5,1.4-2.5c-1,0-2,0-3,0c0-1,0-2,0-3
|
||||
c-0.4,0.1-0.7,0.1-1.1,0.2c0-0.8,0-1.5,0-2.3c2.5,0,5,0,7.5,0C21.3,9.6,21.3,14.2,21.3,18.8z"/>
|
||||
<path class="st14" d="M7,9.5c0,0.8,0,1.5,0,2.3c0.5-0.1,1,0,1.3-0.5c0.2-0.5,0.2-1,0-1.5C8,9.4,7.4,9.4,7,9.5z"/>
|
||||
</g>
|
||||
<rect x="0" y="0" class="st0" width="24" height="24"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="grid" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_grid" width="48" height="48" id="XMLID_116_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.139775e-04 -2.620241e-04)" style="display:inline;overflow:visible;opacity:0.15;"/>
|
||||
</g>
|
||||
<g id="keylines" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_keylines" width="48" height="48" id="XMLID_96_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.709663e-04 -2.924798e-04)" style="display:inline;overflow:visible;"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 7.3 KiB |
151
lib/core/assets/images/ft_ic_ms_word.svg
Executable file
@@ -0,0 +1,151 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
|
||||
height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{clip-path:url(#SVGID_2_);}
|
||||
.st2{fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st3{opacity:0.4;}
|
||||
.st4{clip-path:url(#SVGID_4_);fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st5{clip-path:url(#SVGID_4_);}
|
||||
.st6{fill:#FFFFFF;}
|
||||
.st7{fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:10;}
|
||||
.st8{fill:#22BE73;}
|
||||
.st9{fill:#D9E021;}
|
||||
.st10{fill-rule:evenodd;clip-rule:evenodd;}
|
||||
.st11{fill:#2979FF;}
|
||||
.st12{fill:#00B0FF;}
|
||||
.st13{fill:#FF6D40;}
|
||||
.st14{fill:#FFC107;}
|
||||
.st15{fill:#E91E63;}
|
||||
.st16{opacity:0.5;fill:#FFFFFF;}
|
||||
.st17{opacity:0.2;}
|
||||
.st18{fill:#651FFF;}
|
||||
.st19{fill-rule:evenodd;clip-rule:evenodd;fill:#E91E63;}
|
||||
.st20{display:none;}
|
||||
</style>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_border" viewBox="0 -48 48 48">
|
||||
<rect y="-48" class="st0" width="48" height="48"/>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_grid" viewBox="0 -48 48 48">
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_1_" x="0" y="-48" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st1">
|
||||
<g>
|
||||
<line class="st2" x1="2" y1="-48" x2="2" y2="0"/>
|
||||
<line class="st2" x1="4" y1="-48" x2="4" y2="0"/>
|
||||
<line class="st2" x1="6" y1="-48" x2="6" y2="0"/>
|
||||
<line class="st2" x1="8" y1="-48" x2="8" y2="0"/>
|
||||
<line class="st2" x1="10" y1="-48" x2="10" y2="0"/>
|
||||
<line class="st2" x1="12" y1="-48" x2="12" y2="0"/>
|
||||
<line class="st2" x1="14" y1="-48" x2="14" y2="0"/>
|
||||
<line class="st2" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st2" x1="18" y1="-48" x2="18" y2="0"/>
|
||||
<line class="st2" x1="20" y1="-48" x2="20" y2="0"/>
|
||||
<line class="st2" x1="22" y1="-48" x2="22" y2="0"/>
|
||||
<line class="st2" x1="24" y1="-48" x2="24" y2="0"/>
|
||||
<line class="st2" x1="26" y1="-48" x2="26" y2="0"/>
|
||||
<line class="st2" x1="28" y1="-48" x2="28" y2="0"/>
|
||||
<line class="st2" x1="30" y1="-48" x2="30" y2="0"/>
|
||||
<line class="st2" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st2" x1="34" y1="-48" x2="34" y2="0"/>
|
||||
<line class="st2" x1="36" y1="-48" x2="36" y2="0"/>
|
||||
<line class="st2" x1="38" y1="-48" x2="38" y2="0"/>
|
||||
<line class="st2" x1="40" y1="-48" x2="40" y2="0"/>
|
||||
<line class="st2" x1="42" y1="-48" x2="42" y2="0"/>
|
||||
<line class="st2" x1="44" y1="-48" x2="44" y2="0"/>
|
||||
<line class="st2" x1="46" y1="-48" x2="46" y2="0"/>
|
||||
</g>
|
||||
<g>
|
||||
<line class="st2" x1="0" y1="-2" x2="48" y2="-2"/>
|
||||
<line class="st2" x1="0" y1="-4" x2="48" y2="-4"/>
|
||||
<line class="st2" x1="0" y1="-6" x2="48" y2="-6"/>
|
||||
<line class="st2" x1="0" y1="-8" x2="48" y2="-8"/>
|
||||
<line class="st2" x1="0" y1="-10" x2="48" y2="-10"/>
|
||||
<line class="st2" x1="0" y1="-12" x2="48" y2="-12"/>
|
||||
<line class="st2" x1="0" y1="-14" x2="48" y2="-14"/>
|
||||
<line class="st2" x1="0" y1="-16" x2="48" y2="-16"/>
|
||||
<line class="st2" x1="0" y1="-18" x2="48" y2="-18"/>
|
||||
<line class="st2" x1="0" y1="-20" x2="48" y2="-20"/>
|
||||
<line class="st2" x1="0" y1="-22" x2="48" y2="-22"/>
|
||||
<line class="st2" x1="0" y1="-24" x2="48" y2="-24"/>
|
||||
<line class="st2" x1="0" y1="-26" x2="48" y2="-26"/>
|
||||
<line class="st2" x1="0" y1="-28" x2="48" y2="-28"/>
|
||||
<line class="st2" x1="0" y1="-30" x2="48" y2="-30"/>
|
||||
<line class="st2" x1="0" y1="-32" x2="48" y2="-32"/>
|
||||
<line class="st2" x1="0" y1="-34" x2="48" y2="-34"/>
|
||||
<line class="st2" x1="0" y1="-36" x2="48" y2="-36"/>
|
||||
<line class="st2" x1="0" y1="-38" x2="48" y2="-38"/>
|
||||
<line class="st2" x1="0" y1="-40" x2="48" y2="-40"/>
|
||||
<line class="st2" x1="0" y1="-42" x2="48" y2="-42"/>
|
||||
<line class="st2" x1="0" y1="-44" x2="48" y2="-44"/>
|
||||
<line class="st2" x1="0" y1="-46" x2="48" y2="-46"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M47.8-0.2v-47.5H0.2v47.5H47.8 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_keylines" viewBox="0 -48 48 48">
|
||||
<g class="st3">
|
||||
<defs>
|
||||
<rect id="SVGID_3_" x="0" y="-48" class="st3" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_4_">
|
||||
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<line class="st4" x1="24" y1="0" x2="24" y2="-48"/>
|
||||
<line class="st4" x1="48" y1="-24" x2="0" y2="-24"/>
|
||||
<line class="st4" x1="48" y1="-16" x2="0" y2="-16"/>
|
||||
<line class="st4" x1="48" y1="-32" x2="0" y2="-32"/>
|
||||
<line class="st4" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st4" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st4" x1="47.7" y1="-0.3" x2="0.2" y2="-47.8"/>
|
||||
<line class="st4" x1="0.2" y1="-0.3" x2="47.7" y2="-47.8"/>
|
||||
<path class="st4" d="M24-14c-5.5,0-10-4.5-10-10c0-5.5,4.5-10,10-10c5.5,0,10,4.5,10,10C34-18.5,29.5-14,24-14z"/>
|
||||
<path class="st4" d="M24-4C12.9-4,4-12.9,4-24c0-11.1,8.9-20,20-20c11.1,0,20,8.9,20,20C44-12.9,35.1-4,24-4z"/>
|
||||
<path class="st4" d="M38-6H10c-2.2,0-4-1.8-4-4v-28c0-2.2,1.8-4,4-4h28c2.2,0,4,1.8,4,4v28C42-7.8,40.2-6,38-6z"/>
|
||||
<path class="st4" d="M40-8H8c-2.2,0-4-1.8-4-4v-24c0-2.2,1.8-4,4-4h32c2.2,0,4,1.8,4,4l0,24C44-9.8,42.2-8,40-8z"/>
|
||||
<path class="st4" d="M40-40v32c0,2.2-1.8,4-4,4H12C9.8-4,8-5.8,8-8v-32c0-2.2,1.8-4,4-4h24C38.2-44,40-42.2,40-40z"/>
|
||||
<g class="st5">
|
||||
<path d="M47.7-0.3v-47.5H0.2v47.5H47.7 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<g id="label">
|
||||
</g>
|
||||
<g id="border">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_border" width="48" height="48" y="-48" transform="matrix(0.5 0 0 -0.5 3.916831e-04 5.698877e-05)" style="overflow:visible;"/>
|
||||
</g>
|
||||
<g id="icon">
|
||||
<g>
|
||||
<path class="st11" d="M22,4.9c0-0.5-0.4-0.9-0.9-0.9c-2.4,0-4.9,0-7.3,0c0-0.6,0-1.2,0-1.8h-1.4C9,2.8,5.5,3.4,2,4.1
|
||||
C2,9.4,2,14.7,2,20c3.5,0.6,6.9,1.2,10.4,1.8h1.4c0-0.6,0-1.2,0-1.8c2.3,0,4.5,0,6.8,0c0.4,0,0.8,0,1.1-0.2
|
||||
c0.3-0.4,0.2-0.9,0.2-1.4C22,13.9,22,9.4,22,4.9z M9.6,15.1c-0.4,0.2-0.9,0-1.4,0c-0.3-1.5-0.7-3-0.9-4.5C7,12.1,6.6,13.5,6.3,15
|
||||
c-0.4,0-0.9,0-1.3-0.1c-0.4-2-0.8-4-1.2-6c0.4,0,0.8,0,1.2,0c0.2,1.4,0.5,2.9,0.7,4.3c0.3-1.5,0.6-3,1-4.5c0.4,0,0.9,0,1.3-0.1
|
||||
c0.3,1.5,0.6,3.1,0.9,4.6c0.3-1.6,0.5-3.1,0.8-4.7c0.5,0,0.9,0,1.4-0.1C10.6,10.7,10.1,12.9,9.6,15.1z M21.3,19.3
|
||||
c-2.5,0-5,0-7.5,0c0-0.6,0-1.2,0-1.8c2,0,3.9,0,5.9,0c0-0.3,0-0.6,0-0.9c-2,0-3.9,0-5.9,0c0-0.4,0-0.8,0-1.1c2,0,3.9,0,5.9,0
|
||||
c0-0.3,0-0.6,0-0.9c-2,0-3.9,0-5.9,0c0-0.4,0-0.8,0-1.1c2,0,3.9,0,5.9,0c0-0.3,0-0.6,0-0.9c-2,0-3.9,0-5.9,0c0-0.4,0-0.8,0-1.1
|
||||
c2,0,3.9,0,5.9,0c0-0.3,0-0.6,0-0.9c-2,0-3.9,0-5.9,0c0-0.4,0-0.8,0-1.1c2,0,3.9,0,5.9,0c0-0.3,0-0.6,0-0.9c-2,0-3.9,0-5.9,0
|
||||
c0-0.4,0-0.8,0-1.1c2,0,3.9,0,5.9,0c0-0.3,0-0.6,0-0.9c-2,0-3.9,0-5.9,0c0-0.5,0-1.1,0-1.6c2.5,0,5,0,7.5,0
|
||||
C21.3,9.6,21.3,14.4,21.3,19.3z"/>
|
||||
<rect x="0" y="0" class="st0" width="24" height="24"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="grid" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_grid" width="48" height="48" id="XMLID_120_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.139775e-04 -2.620241e-04)" style="display:inline;overflow:visible;opacity:0.15;"/>
|
||||
</g>
|
||||
<g id="keylines" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_keylines" width="48" height="48" id="XMLID_100_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.709663e-04 -2.924798e-04)" style="display:inline;overflow:visible;"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 7.4 KiB |
144
lib/core/assets/images/ft_ic_pdf.svg
Executable file
@@ -0,0 +1,144 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
|
||||
height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{clip-path:url(#SVGID_2_);}
|
||||
.st2{fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st3{opacity:0.4;}
|
||||
.st4{clip-path:url(#SVGID_4_);fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st5{clip-path:url(#SVGID_4_);}
|
||||
.st6{fill:#FFFFFF;}
|
||||
.st7{fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:10;}
|
||||
.st8{fill:#22BE73;}
|
||||
.st9{fill:#D9E021;}
|
||||
.st10{fill-rule:evenodd;clip-rule:evenodd;}
|
||||
.st11{fill:#2979FF;}
|
||||
.st12{fill:#00B0FF;}
|
||||
.st13{fill:#FF6D40;}
|
||||
.st14{fill:#FFC107;}
|
||||
.st15{fill:#E91E63;}
|
||||
.st16{opacity:0.5;fill:#FFFFFF;}
|
||||
.st17{opacity:0.2;}
|
||||
.st18{fill:#651FFF;}
|
||||
.st19{fill-rule:evenodd;clip-rule:evenodd;fill:#E91E63;}
|
||||
.st20{display:none;}
|
||||
</style>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_border" viewBox="0 -48 48 48">
|
||||
<rect y="-48" class="st0" width="48" height="48"/>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_grid" viewBox="0 -48 48 48">
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_1_" x="0" y="-48" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st1">
|
||||
<g>
|
||||
<line class="st2" x1="2" y1="-48" x2="2" y2="0"/>
|
||||
<line class="st2" x1="4" y1="-48" x2="4" y2="0"/>
|
||||
<line class="st2" x1="6" y1="-48" x2="6" y2="0"/>
|
||||
<line class="st2" x1="8" y1="-48" x2="8" y2="0"/>
|
||||
<line class="st2" x1="10" y1="-48" x2="10" y2="0"/>
|
||||
<line class="st2" x1="12" y1="-48" x2="12" y2="0"/>
|
||||
<line class="st2" x1="14" y1="-48" x2="14" y2="0"/>
|
||||
<line class="st2" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st2" x1="18" y1="-48" x2="18" y2="0"/>
|
||||
<line class="st2" x1="20" y1="-48" x2="20" y2="0"/>
|
||||
<line class="st2" x1="22" y1="-48" x2="22" y2="0"/>
|
||||
<line class="st2" x1="24" y1="-48" x2="24" y2="0"/>
|
||||
<line class="st2" x1="26" y1="-48" x2="26" y2="0"/>
|
||||
<line class="st2" x1="28" y1="-48" x2="28" y2="0"/>
|
||||
<line class="st2" x1="30" y1="-48" x2="30" y2="0"/>
|
||||
<line class="st2" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st2" x1="34" y1="-48" x2="34" y2="0"/>
|
||||
<line class="st2" x1="36" y1="-48" x2="36" y2="0"/>
|
||||
<line class="st2" x1="38" y1="-48" x2="38" y2="0"/>
|
||||
<line class="st2" x1="40" y1="-48" x2="40" y2="0"/>
|
||||
<line class="st2" x1="42" y1="-48" x2="42" y2="0"/>
|
||||
<line class="st2" x1="44" y1="-48" x2="44" y2="0"/>
|
||||
<line class="st2" x1="46" y1="-48" x2="46" y2="0"/>
|
||||
</g>
|
||||
<g>
|
||||
<line class="st2" x1="0" y1="-2" x2="48" y2="-2"/>
|
||||
<line class="st2" x1="0" y1="-4" x2="48" y2="-4"/>
|
||||
<line class="st2" x1="0" y1="-6" x2="48" y2="-6"/>
|
||||
<line class="st2" x1="0" y1="-8" x2="48" y2="-8"/>
|
||||
<line class="st2" x1="0" y1="-10" x2="48" y2="-10"/>
|
||||
<line class="st2" x1="0" y1="-12" x2="48" y2="-12"/>
|
||||
<line class="st2" x1="0" y1="-14" x2="48" y2="-14"/>
|
||||
<line class="st2" x1="0" y1="-16" x2="48" y2="-16"/>
|
||||
<line class="st2" x1="0" y1="-18" x2="48" y2="-18"/>
|
||||
<line class="st2" x1="0" y1="-20" x2="48" y2="-20"/>
|
||||
<line class="st2" x1="0" y1="-22" x2="48" y2="-22"/>
|
||||
<line class="st2" x1="0" y1="-24" x2="48" y2="-24"/>
|
||||
<line class="st2" x1="0" y1="-26" x2="48" y2="-26"/>
|
||||
<line class="st2" x1="0" y1="-28" x2="48" y2="-28"/>
|
||||
<line class="st2" x1="0" y1="-30" x2="48" y2="-30"/>
|
||||
<line class="st2" x1="0" y1="-32" x2="48" y2="-32"/>
|
||||
<line class="st2" x1="0" y1="-34" x2="48" y2="-34"/>
|
||||
<line class="st2" x1="0" y1="-36" x2="48" y2="-36"/>
|
||||
<line class="st2" x1="0" y1="-38" x2="48" y2="-38"/>
|
||||
<line class="st2" x1="0" y1="-40" x2="48" y2="-40"/>
|
||||
<line class="st2" x1="0" y1="-42" x2="48" y2="-42"/>
|
||||
<line class="st2" x1="0" y1="-44" x2="48" y2="-44"/>
|
||||
<line class="st2" x1="0" y1="-46" x2="48" y2="-46"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M47.8-0.2v-47.5H0.2v47.5H47.8 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_keylines" viewBox="0 -48 48 48">
|
||||
<g class="st3">
|
||||
<defs>
|
||||
<rect id="SVGID_3_" x="0" y="-48" class="st3" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_4_">
|
||||
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<line class="st4" x1="24" y1="0" x2="24" y2="-48"/>
|
||||
<line class="st4" x1="48" y1="-24" x2="0" y2="-24"/>
|
||||
<line class="st4" x1="48" y1="-16" x2="0" y2="-16"/>
|
||||
<line class="st4" x1="48" y1="-32" x2="0" y2="-32"/>
|
||||
<line class="st4" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st4" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st4" x1="47.7" y1="-0.3" x2="0.2" y2="-47.8"/>
|
||||
<line class="st4" x1="0.2" y1="-0.3" x2="47.7" y2="-47.8"/>
|
||||
<path class="st4" d="M24-14c-5.5,0-10-4.5-10-10c0-5.5,4.5-10,10-10c5.5,0,10,4.5,10,10C34-18.5,29.5-14,24-14z"/>
|
||||
<path class="st4" d="M24-4C12.9-4,4-12.9,4-24c0-11.1,8.9-20,20-20c11.1,0,20,8.9,20,20C44-12.9,35.1-4,24-4z"/>
|
||||
<path class="st4" d="M38-6H10c-2.2,0-4-1.8-4-4v-28c0-2.2,1.8-4,4-4h28c2.2,0,4,1.8,4,4v28C42-7.8,40.2-6,38-6z"/>
|
||||
<path class="st4" d="M40-8H8c-2.2,0-4-1.8-4-4v-24c0-2.2,1.8-4,4-4h32c2.2,0,4,1.8,4,4l0,24C44-9.8,42.2-8,40-8z"/>
|
||||
<path class="st4" d="M40-40v32c0,2.2-1.8,4-4,4H12C9.8-4,8-5.8,8-8v-32c0-2.2,1.8-4,4-4h24C38.2-44,40-42.2,40-40z"/>
|
||||
<g class="st5">
|
||||
<path d="M47.7-0.3v-47.5H0.2v47.5H47.7 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<g id="label">
|
||||
</g>
|
||||
<g id="border">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_border" width="48" height="48" y="-48" transform="matrix(0.5 0 0 -0.5 3.916831e-04 5.698877e-05)" style="overflow:visible;"/>
|
||||
</g>
|
||||
<g id="icon">
|
||||
<path class="st19" d="M19,3c0.5,0,1,0.2,1.4,0.6C20.8,4,21,4.4,21,5v14c0,0.5-0.2,1-0.6,1.4C20,20.8,19.6,21,19,21H5
|
||||
c-0.5,0-1-0.2-1.4-0.6C3.2,20,3,19.5,3,19V5c0-0.5,0.2-1,0.6-1.4S4.5,3,5,3H19z M9.5,11.5v-1c0-0.4-0.1-0.8-0.4-1.1
|
||||
C8.7,9.1,8.4,9,8,9H5.5v6H7v-2h1c0.4,0,0.8-0.1,1.1-0.4C9.3,12.3,9.5,11.9,9.5,11.5z M7,11.5h1v-1H7V11.5z M14.5,13.5v-3
|
||||
c0-0.4-0.1-0.8-0.4-1.1C13.8,9.1,13.4,9,13,9h-2.5v6H13c0.4,0,0.8-0.1,1.1-0.4C14.4,14.2,14.5,13.9,14.5,13.5z M12,13.5h1v-3h-1
|
||||
V13.5z M18.5,10.5V9h-3v6H17v-2h1.5v-1.5H17v-1H18.5z"/>
|
||||
<rect x="0" y="0" class="st0" width="24" height="24"/>
|
||||
</g>
|
||||
<g id="grid" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_grid" width="48" height="48" id="XMLID_62_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.139775e-04 -2.620241e-04)" style="display:inline;overflow:visible;opacity:0.15;"/>
|
||||
</g>
|
||||
<g id="keylines" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_keylines" width="48" height="48" id="XMLID_42_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.709663e-04 -2.924798e-04)" style="display:inline;overflow:visible;"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.9 KiB |
142
lib/core/assets/images/ft_ic_presentation.svg
Executable file
@@ -0,0 +1,142 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
|
||||
height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{clip-path:url(#SVGID_2_);}
|
||||
.st2{fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st3{opacity:0.4;}
|
||||
.st4{clip-path:url(#SVGID_4_);fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st5{clip-path:url(#SVGID_4_);}
|
||||
.st6{fill:#FFFFFF;}
|
||||
.st7{fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:10;}
|
||||
.st8{fill:#22BE73;}
|
||||
.st9{fill:#D9E021;}
|
||||
.st10{fill-rule:evenodd;clip-rule:evenodd;}
|
||||
.st11{fill:#2979FF;}
|
||||
.st12{fill:#00B0FF;}
|
||||
.st13{fill:#FF6D40;}
|
||||
.st14{fill:#FFC107;}
|
||||
.st15{fill:#E91E63;}
|
||||
.st16{opacity:0.5;fill:#FFFFFF;}
|
||||
.st17{opacity:0.2;}
|
||||
.st18{fill:#651FFF;}
|
||||
.st19{fill-rule:evenodd;clip-rule:evenodd;fill:#E91E63;}
|
||||
.st20{display:none;}
|
||||
</style>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_border" viewBox="0 -48 48 48">
|
||||
<rect y="-48" class="st0" width="48" height="48"/>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_grid" viewBox="0 -48 48 48">
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_1_" x="0" y="-48" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st1">
|
||||
<g>
|
||||
<line class="st2" x1="2" y1="-48" x2="2" y2="0"/>
|
||||
<line class="st2" x1="4" y1="-48" x2="4" y2="0"/>
|
||||
<line class="st2" x1="6" y1="-48" x2="6" y2="0"/>
|
||||
<line class="st2" x1="8" y1="-48" x2="8" y2="0"/>
|
||||
<line class="st2" x1="10" y1="-48" x2="10" y2="0"/>
|
||||
<line class="st2" x1="12" y1="-48" x2="12" y2="0"/>
|
||||
<line class="st2" x1="14" y1="-48" x2="14" y2="0"/>
|
||||
<line class="st2" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st2" x1="18" y1="-48" x2="18" y2="0"/>
|
||||
<line class="st2" x1="20" y1="-48" x2="20" y2="0"/>
|
||||
<line class="st2" x1="22" y1="-48" x2="22" y2="0"/>
|
||||
<line class="st2" x1="24" y1="-48" x2="24" y2="0"/>
|
||||
<line class="st2" x1="26" y1="-48" x2="26" y2="0"/>
|
||||
<line class="st2" x1="28" y1="-48" x2="28" y2="0"/>
|
||||
<line class="st2" x1="30" y1="-48" x2="30" y2="0"/>
|
||||
<line class="st2" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st2" x1="34" y1="-48" x2="34" y2="0"/>
|
||||
<line class="st2" x1="36" y1="-48" x2="36" y2="0"/>
|
||||
<line class="st2" x1="38" y1="-48" x2="38" y2="0"/>
|
||||
<line class="st2" x1="40" y1="-48" x2="40" y2="0"/>
|
||||
<line class="st2" x1="42" y1="-48" x2="42" y2="0"/>
|
||||
<line class="st2" x1="44" y1="-48" x2="44" y2="0"/>
|
||||
<line class="st2" x1="46" y1="-48" x2="46" y2="0"/>
|
||||
</g>
|
||||
<g>
|
||||
<line class="st2" x1="0" y1="-2" x2="48" y2="-2"/>
|
||||
<line class="st2" x1="0" y1="-4" x2="48" y2="-4"/>
|
||||
<line class="st2" x1="0" y1="-6" x2="48" y2="-6"/>
|
||||
<line class="st2" x1="0" y1="-8" x2="48" y2="-8"/>
|
||||
<line class="st2" x1="0" y1="-10" x2="48" y2="-10"/>
|
||||
<line class="st2" x1="0" y1="-12" x2="48" y2="-12"/>
|
||||
<line class="st2" x1="0" y1="-14" x2="48" y2="-14"/>
|
||||
<line class="st2" x1="0" y1="-16" x2="48" y2="-16"/>
|
||||
<line class="st2" x1="0" y1="-18" x2="48" y2="-18"/>
|
||||
<line class="st2" x1="0" y1="-20" x2="48" y2="-20"/>
|
||||
<line class="st2" x1="0" y1="-22" x2="48" y2="-22"/>
|
||||
<line class="st2" x1="0" y1="-24" x2="48" y2="-24"/>
|
||||
<line class="st2" x1="0" y1="-26" x2="48" y2="-26"/>
|
||||
<line class="st2" x1="0" y1="-28" x2="48" y2="-28"/>
|
||||
<line class="st2" x1="0" y1="-30" x2="48" y2="-30"/>
|
||||
<line class="st2" x1="0" y1="-32" x2="48" y2="-32"/>
|
||||
<line class="st2" x1="0" y1="-34" x2="48" y2="-34"/>
|
||||
<line class="st2" x1="0" y1="-36" x2="48" y2="-36"/>
|
||||
<line class="st2" x1="0" y1="-38" x2="48" y2="-38"/>
|
||||
<line class="st2" x1="0" y1="-40" x2="48" y2="-40"/>
|
||||
<line class="st2" x1="0" y1="-42" x2="48" y2="-42"/>
|
||||
<line class="st2" x1="0" y1="-44" x2="48" y2="-44"/>
|
||||
<line class="st2" x1="0" y1="-46" x2="48" y2="-46"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M47.8-0.2v-47.5H0.2v47.5H47.8 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_keylines" viewBox="0 -48 48 48">
|
||||
<g class="st3">
|
||||
<defs>
|
||||
<rect id="SVGID_3_" x="0" y="-48" class="st3" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_4_">
|
||||
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<line class="st4" x1="24" y1="0" x2="24" y2="-48"/>
|
||||
<line class="st4" x1="48" y1="-24" x2="0" y2="-24"/>
|
||||
<line class="st4" x1="48" y1="-16" x2="0" y2="-16"/>
|
||||
<line class="st4" x1="48" y1="-32" x2="0" y2="-32"/>
|
||||
<line class="st4" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st4" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st4" x1="47.7" y1="-0.3" x2="0.2" y2="-47.8"/>
|
||||
<line class="st4" x1="0.2" y1="-0.3" x2="47.7" y2="-47.8"/>
|
||||
<path class="st4" d="M24-14c-5.5,0-10-4.5-10-10c0-5.5,4.5-10,10-10c5.5,0,10,4.5,10,10C34-18.5,29.5-14,24-14z"/>
|
||||
<path class="st4" d="M24-4C12.9-4,4-12.9,4-24c0-11.1,8.9-20,20-20c11.1,0,20,8.9,20,20C44-12.9,35.1-4,24-4z"/>
|
||||
<path class="st4" d="M38-6H10c-2.2,0-4-1.8-4-4v-28c0-2.2,1.8-4,4-4h28c2.2,0,4,1.8,4,4v28C42-7.8,40.2-6,38-6z"/>
|
||||
<path class="st4" d="M40-8H8c-2.2,0-4-1.8-4-4v-24c0-2.2,1.8-4,4-4h32c2.2,0,4,1.8,4,4l0,24C44-9.8,42.2-8,40-8z"/>
|
||||
<path class="st4" d="M40-40v32c0,2.2-1.8,4-4,4H12C9.8-4,8-5.8,8-8v-32c0-2.2,1.8-4,4-4h24C38.2-44,40-42.2,40-40z"/>
|
||||
<g class="st5">
|
||||
<path d="M47.7-0.3v-47.5H0.2v47.5H47.7 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<g id="label">
|
||||
</g>
|
||||
<g id="border">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_border" width="48" height="48" y="-48" transform="matrix(0.5 0 0 -0.5 3.916831e-04 5.698877e-05)" style="overflow:visible;"/>
|
||||
</g>
|
||||
<g id="icon">
|
||||
<g>
|
||||
<path class="st14" d="M18,4H6C4.9,4,4,4.9,4,6v12c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2V6C20,4.9,19.1,4,18,4z M17,14H7V8h10V14z"/>
|
||||
<rect x="0" y="0" class="st0" width="24" height="24"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="grid" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_grid" width="48" height="48" id="XMLID_76_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.139775e-04 -2.620241e-04)" style="display:inline;overflow:visible;opacity:0.15;"/>
|
||||
</g>
|
||||
<g id="keylines" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_keylines" width="48" height="48" id="XMLID_56_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.709663e-04 -2.924798e-04)" style="display:inline;overflow:visible;"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.5 KiB |
143
lib/core/assets/images/ft_ic_raster_image.svg
Executable file
@@ -0,0 +1,143 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
|
||||
height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{clip-path:url(#SVGID_2_);}
|
||||
.st2{fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st3{opacity:0.4;}
|
||||
.st4{clip-path:url(#SVGID_4_);fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st5{clip-path:url(#SVGID_4_);}
|
||||
.st6{fill:#FFFFFF;}
|
||||
.st7{fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:10;}
|
||||
.st8{fill:#22BE73;}
|
||||
.st9{fill:#D9E021;}
|
||||
.st10{fill-rule:evenodd;clip-rule:evenodd;}
|
||||
.st11{fill:#2979FF;}
|
||||
.st12{fill:#00B0FF;}
|
||||
.st13{fill:#FF6D40;}
|
||||
.st14{fill:#FFC107;}
|
||||
.st15{fill:#E91E63;}
|
||||
.st16{opacity:0.5;fill:#FFFFFF;}
|
||||
.st17{opacity:0.2;}
|
||||
.st18{fill:#651FFF;}
|
||||
.st19{fill-rule:evenodd;clip-rule:evenodd;fill:#E91E63;}
|
||||
.st20{display:none;}
|
||||
</style>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_border" viewBox="0 -48 48 48">
|
||||
<rect y="-48" class="st0" width="48" height="48"/>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_grid" viewBox="0 -48 48 48">
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_1_" x="0" y="-48" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st1">
|
||||
<g>
|
||||
<line class="st2" x1="2" y1="-48" x2="2" y2="0"/>
|
||||
<line class="st2" x1="4" y1="-48" x2="4" y2="0"/>
|
||||
<line class="st2" x1="6" y1="-48" x2="6" y2="0"/>
|
||||
<line class="st2" x1="8" y1="-48" x2="8" y2="0"/>
|
||||
<line class="st2" x1="10" y1="-48" x2="10" y2="0"/>
|
||||
<line class="st2" x1="12" y1="-48" x2="12" y2="0"/>
|
||||
<line class="st2" x1="14" y1="-48" x2="14" y2="0"/>
|
||||
<line class="st2" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st2" x1="18" y1="-48" x2="18" y2="0"/>
|
||||
<line class="st2" x1="20" y1="-48" x2="20" y2="0"/>
|
||||
<line class="st2" x1="22" y1="-48" x2="22" y2="0"/>
|
||||
<line class="st2" x1="24" y1="-48" x2="24" y2="0"/>
|
||||
<line class="st2" x1="26" y1="-48" x2="26" y2="0"/>
|
||||
<line class="st2" x1="28" y1="-48" x2="28" y2="0"/>
|
||||
<line class="st2" x1="30" y1="-48" x2="30" y2="0"/>
|
||||
<line class="st2" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st2" x1="34" y1="-48" x2="34" y2="0"/>
|
||||
<line class="st2" x1="36" y1="-48" x2="36" y2="0"/>
|
||||
<line class="st2" x1="38" y1="-48" x2="38" y2="0"/>
|
||||
<line class="st2" x1="40" y1="-48" x2="40" y2="0"/>
|
||||
<line class="st2" x1="42" y1="-48" x2="42" y2="0"/>
|
||||
<line class="st2" x1="44" y1="-48" x2="44" y2="0"/>
|
||||
<line class="st2" x1="46" y1="-48" x2="46" y2="0"/>
|
||||
</g>
|
||||
<g>
|
||||
<line class="st2" x1="0" y1="-2" x2="48" y2="-2"/>
|
||||
<line class="st2" x1="0" y1="-4" x2="48" y2="-4"/>
|
||||
<line class="st2" x1="0" y1="-6" x2="48" y2="-6"/>
|
||||
<line class="st2" x1="0" y1="-8" x2="48" y2="-8"/>
|
||||
<line class="st2" x1="0" y1="-10" x2="48" y2="-10"/>
|
||||
<line class="st2" x1="0" y1="-12" x2="48" y2="-12"/>
|
||||
<line class="st2" x1="0" y1="-14" x2="48" y2="-14"/>
|
||||
<line class="st2" x1="0" y1="-16" x2="48" y2="-16"/>
|
||||
<line class="st2" x1="0" y1="-18" x2="48" y2="-18"/>
|
||||
<line class="st2" x1="0" y1="-20" x2="48" y2="-20"/>
|
||||
<line class="st2" x1="0" y1="-22" x2="48" y2="-22"/>
|
||||
<line class="st2" x1="0" y1="-24" x2="48" y2="-24"/>
|
||||
<line class="st2" x1="0" y1="-26" x2="48" y2="-26"/>
|
||||
<line class="st2" x1="0" y1="-28" x2="48" y2="-28"/>
|
||||
<line class="st2" x1="0" y1="-30" x2="48" y2="-30"/>
|
||||
<line class="st2" x1="0" y1="-32" x2="48" y2="-32"/>
|
||||
<line class="st2" x1="0" y1="-34" x2="48" y2="-34"/>
|
||||
<line class="st2" x1="0" y1="-36" x2="48" y2="-36"/>
|
||||
<line class="st2" x1="0" y1="-38" x2="48" y2="-38"/>
|
||||
<line class="st2" x1="0" y1="-40" x2="48" y2="-40"/>
|
||||
<line class="st2" x1="0" y1="-42" x2="48" y2="-42"/>
|
||||
<line class="st2" x1="0" y1="-44" x2="48" y2="-44"/>
|
||||
<line class="st2" x1="0" y1="-46" x2="48" y2="-46"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M47.8-0.2v-47.5H0.2v47.5H47.8 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_keylines" viewBox="0 -48 48 48">
|
||||
<g class="st3">
|
||||
<defs>
|
||||
<rect id="SVGID_3_" x="0" y="-48" class="st3" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_4_">
|
||||
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<line class="st4" x1="24" y1="0" x2="24" y2="-48"/>
|
||||
<line class="st4" x1="48" y1="-24" x2="0" y2="-24"/>
|
||||
<line class="st4" x1="48" y1="-16" x2="0" y2="-16"/>
|
||||
<line class="st4" x1="48" y1="-32" x2="0" y2="-32"/>
|
||||
<line class="st4" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st4" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st4" x1="47.7" y1="-0.3" x2="0.2" y2="-47.8"/>
|
||||
<line class="st4" x1="0.2" y1="-0.3" x2="47.7" y2="-47.8"/>
|
||||
<path class="st4" d="M24-14c-5.5,0-10-4.5-10-10c0-5.5,4.5-10,10-10c5.5,0,10,4.5,10,10C34-18.5,29.5-14,24-14z"/>
|
||||
<path class="st4" d="M24-4C12.9-4,4-12.9,4-24c0-11.1,8.9-20,20-20c11.1,0,20,8.9,20,20C44-12.9,35.1-4,24-4z"/>
|
||||
<path class="st4" d="M38-6H10c-2.2,0-4-1.8-4-4v-28c0-2.2,1.8-4,4-4h28c2.2,0,4,1.8,4,4v28C42-7.8,40.2-6,38-6z"/>
|
||||
<path class="st4" d="M40-8H8c-2.2,0-4-1.8-4-4v-24c0-2.2,1.8-4,4-4h32c2.2,0,4,1.8,4,4l0,24C44-9.8,42.2-8,40-8z"/>
|
||||
<path class="st4" d="M40-40v32c0,2.2-1.8,4-4,4H12C9.8-4,8-5.8,8-8v-32c0-2.2,1.8-4,4-4h24C38.2-44,40-42.2,40-40z"/>
|
||||
<g class="st5">
|
||||
<path d="M47.7-0.3v-47.5H0.2v47.5H47.7 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<g id="label">
|
||||
</g>
|
||||
<g id="border">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_border" width="48" height="48" y="-48" transform="matrix(0.5 0 0 -0.5 3.916831e-04 5.698877e-05)" style="overflow:visible;"/>
|
||||
</g>
|
||||
<g id="icon">
|
||||
<g>
|
||||
<path class="st8" d="M21,19V5c0-1.1-0.9-2-2-2H5C3.9,3,3,3.9,3,5v14c0,1.1,0.9,2,2,2h14C20.1,21,21,20.1,21,19z M8.5,13.5l2.5,3
|
||||
l3.5-4.5l4.5,6H5L8.5,13.5z"/>
|
||||
<path class="st0" d="M0,0h24v24H0V0z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="grid" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_grid" width="48" height="48" id="XMLID_64_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.139775e-04 -2.620241e-04)" style="display:inline;overflow:visible;opacity:0.15;"/>
|
||||
</g>
|
||||
<g id="keylines" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_keylines" width="48" height="48" id="XMLID_44_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.709663e-04 -2.924798e-04)" style="display:inline;overflow:visible;"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.5 KiB |
4
lib/core/assets/images/ft_ic_selected.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M0 0h24v24H0z" fill="none"/>
|
||||
<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 281 B |
151
lib/core/assets/images/ft_ic_spreadsheet.svg
Executable file
@@ -0,0 +1,151 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
|
||||
height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{clip-path:url(#SVGID_2_);}
|
||||
.st2{fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st3{opacity:0.4;}
|
||||
.st4{clip-path:url(#SVGID_4_);fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st5{clip-path:url(#SVGID_4_);}
|
||||
.st6{fill:#FFFFFF;}
|
||||
.st7{fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:10;}
|
||||
.st8{fill:#22BE73;}
|
||||
.st9{fill:#D9E021;}
|
||||
.st10{fill-rule:evenodd;clip-rule:evenodd;}
|
||||
.st11{fill:#2979FF;}
|
||||
.st12{fill:#00B0FF;}
|
||||
.st13{fill:#FF6D40;}
|
||||
.st14{fill:#FFC107;}
|
||||
.st15{fill:#E91E63;}
|
||||
.st16{opacity:0.5;fill:#FFFFFF;}
|
||||
.st17{opacity:0.2;}
|
||||
.st18{fill:#651FFF;}
|
||||
.st19{fill-rule:evenodd;clip-rule:evenodd;fill:#E91E63;}
|
||||
.st20{display:none;}
|
||||
</style>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_border" viewBox="0 -48 48 48">
|
||||
<rect y="-48" class="st0" width="48" height="48"/>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_grid" viewBox="0 -48 48 48">
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_1_" x="0" y="-48" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st1">
|
||||
<g>
|
||||
<line class="st2" x1="2" y1="-48" x2="2" y2="0"/>
|
||||
<line class="st2" x1="4" y1="-48" x2="4" y2="0"/>
|
||||
<line class="st2" x1="6" y1="-48" x2="6" y2="0"/>
|
||||
<line class="st2" x1="8" y1="-48" x2="8" y2="0"/>
|
||||
<line class="st2" x1="10" y1="-48" x2="10" y2="0"/>
|
||||
<line class="st2" x1="12" y1="-48" x2="12" y2="0"/>
|
||||
<line class="st2" x1="14" y1="-48" x2="14" y2="0"/>
|
||||
<line class="st2" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st2" x1="18" y1="-48" x2="18" y2="0"/>
|
||||
<line class="st2" x1="20" y1="-48" x2="20" y2="0"/>
|
||||
<line class="st2" x1="22" y1="-48" x2="22" y2="0"/>
|
||||
<line class="st2" x1="24" y1="-48" x2="24" y2="0"/>
|
||||
<line class="st2" x1="26" y1="-48" x2="26" y2="0"/>
|
||||
<line class="st2" x1="28" y1="-48" x2="28" y2="0"/>
|
||||
<line class="st2" x1="30" y1="-48" x2="30" y2="0"/>
|
||||
<line class="st2" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st2" x1="34" y1="-48" x2="34" y2="0"/>
|
||||
<line class="st2" x1="36" y1="-48" x2="36" y2="0"/>
|
||||
<line class="st2" x1="38" y1="-48" x2="38" y2="0"/>
|
||||
<line class="st2" x1="40" y1="-48" x2="40" y2="0"/>
|
||||
<line class="st2" x1="42" y1="-48" x2="42" y2="0"/>
|
||||
<line class="st2" x1="44" y1="-48" x2="44" y2="0"/>
|
||||
<line class="st2" x1="46" y1="-48" x2="46" y2="0"/>
|
||||
</g>
|
||||
<g>
|
||||
<line class="st2" x1="0" y1="-2" x2="48" y2="-2"/>
|
||||
<line class="st2" x1="0" y1="-4" x2="48" y2="-4"/>
|
||||
<line class="st2" x1="0" y1="-6" x2="48" y2="-6"/>
|
||||
<line class="st2" x1="0" y1="-8" x2="48" y2="-8"/>
|
||||
<line class="st2" x1="0" y1="-10" x2="48" y2="-10"/>
|
||||
<line class="st2" x1="0" y1="-12" x2="48" y2="-12"/>
|
||||
<line class="st2" x1="0" y1="-14" x2="48" y2="-14"/>
|
||||
<line class="st2" x1="0" y1="-16" x2="48" y2="-16"/>
|
||||
<line class="st2" x1="0" y1="-18" x2="48" y2="-18"/>
|
||||
<line class="st2" x1="0" y1="-20" x2="48" y2="-20"/>
|
||||
<line class="st2" x1="0" y1="-22" x2="48" y2="-22"/>
|
||||
<line class="st2" x1="0" y1="-24" x2="48" y2="-24"/>
|
||||
<line class="st2" x1="0" y1="-26" x2="48" y2="-26"/>
|
||||
<line class="st2" x1="0" y1="-28" x2="48" y2="-28"/>
|
||||
<line class="st2" x1="0" y1="-30" x2="48" y2="-30"/>
|
||||
<line class="st2" x1="0" y1="-32" x2="48" y2="-32"/>
|
||||
<line class="st2" x1="0" y1="-34" x2="48" y2="-34"/>
|
||||
<line class="st2" x1="0" y1="-36" x2="48" y2="-36"/>
|
||||
<line class="st2" x1="0" y1="-38" x2="48" y2="-38"/>
|
||||
<line class="st2" x1="0" y1="-40" x2="48" y2="-40"/>
|
||||
<line class="st2" x1="0" y1="-42" x2="48" y2="-42"/>
|
||||
<line class="st2" x1="0" y1="-44" x2="48" y2="-44"/>
|
||||
<line class="st2" x1="0" y1="-46" x2="48" y2="-46"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M47.8-0.2v-47.5H0.2v47.5H47.8 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_keylines" viewBox="0 -48 48 48">
|
||||
<g class="st3">
|
||||
<defs>
|
||||
<rect id="SVGID_3_" x="0" y="-48" class="st3" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_4_">
|
||||
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<line class="st4" x1="24" y1="0" x2="24" y2="-48"/>
|
||||
<line class="st4" x1="48" y1="-24" x2="0" y2="-24"/>
|
||||
<line class="st4" x1="48" y1="-16" x2="0" y2="-16"/>
|
||||
<line class="st4" x1="48" y1="-32" x2="0" y2="-32"/>
|
||||
<line class="st4" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st4" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st4" x1="47.7" y1="-0.3" x2="0.2" y2="-47.8"/>
|
||||
<line class="st4" x1="0.2" y1="-0.3" x2="47.7" y2="-47.8"/>
|
||||
<path class="st4" d="M24-14c-5.5,0-10-4.5-10-10c0-5.5,4.5-10,10-10c5.5,0,10,4.5,10,10C34-18.5,29.5-14,24-14z"/>
|
||||
<path class="st4" d="M24-4C12.9-4,4-12.9,4-24c0-11.1,8.9-20,20-20c11.1,0,20,8.9,20,20C44-12.9,35.1-4,24-4z"/>
|
||||
<path class="st4" d="M38-6H10c-2.2,0-4-1.8-4-4v-28c0-2.2,1.8-4,4-4h28c2.2,0,4,1.8,4,4v28C42-7.8,40.2-6,38-6z"/>
|
||||
<path class="st4" d="M40-8H8c-2.2,0-4-1.8-4-4v-24c0-2.2,1.8-4,4-4h32c2.2,0,4,1.8,4,4l0,24C44-9.8,42.2-8,40-8z"/>
|
||||
<path class="st4" d="M40-40v32c0,2.2-1.8,4-4,4H12C9.8-4,8-5.8,8-8v-32c0-2.2,1.8-4,4-4h24C38.2-44,40-42.2,40-40z"/>
|
||||
<g class="st5">
|
||||
<path d="M47.7-0.3v-47.5H0.2v47.5H47.7 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<g id="label">
|
||||
</g>
|
||||
<g id="border">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_border" width="48" height="48" y="-48" transform="matrix(0.5 0 0 -0.5 3.916831e-04 5.698877e-05)" style="overflow:visible;"/>
|
||||
</g>
|
||||
<g id="icon">
|
||||
<g>
|
||||
<rect x="0" y="0" class="st0" width="24" height="24"/>
|
||||
<g>
|
||||
<rect x="8" y="14" class="st8" width="2" height="2"/>
|
||||
<rect x="11" y="14" class="st8" width="5" height="2"/>
|
||||
<rect x="8" y="11" class="st8" width="2" height="2"/>
|
||||
<rect x="8" y="8" class="st8" width="2" height="2"/>
|
||||
<path class="st8" d="M19,4H5C4.5,4,4,4.5,4,5v14c0,0.5,0.5,1,1,1h14c0.6,0,1-0.5,1-1V5C20,4.5,19.6,4,19,4z M17,17H7V7h0v0h10v0
|
||||
h0V17z"/>
|
||||
<rect x="11" y="8" class="st8" width="5" height="2"/>
|
||||
<rect x="11" y="11" class="st8" width="5" height="2"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="grid" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_grid" width="48" height="48" id="XMLID_78_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.139775e-04 -2.620241e-04)" style="display:inline;overflow:visible;opacity:0.15;"/>
|
||||
</g>
|
||||
<g id="keylines" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_keylines" width="48" height="48" id="XMLID_58_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.709663e-04 -2.924798e-04)" style="display:inline;overflow:visible;"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.8 KiB |
144
lib/core/assets/images/ft_ic_vector_image.svg
Executable file
@@ -0,0 +1,144 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
|
||||
height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{clip-path:url(#SVGID_2_);}
|
||||
.st2{fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st3{opacity:0.4;}
|
||||
.st4{clip-path:url(#SVGID_4_);fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st5{clip-path:url(#SVGID_4_);}
|
||||
.st6{fill:#FFFFFF;}
|
||||
.st7{fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:10;}
|
||||
.st8{fill:#22BE73;}
|
||||
.st9{fill:#D9E021;}
|
||||
.st10{fill-rule:evenodd;clip-rule:evenodd;}
|
||||
.st11{fill:#2979FF;}
|
||||
.st12{fill:#00B0FF;}
|
||||
.st13{fill:#FF6D40;}
|
||||
.st14{fill:#FFC107;}
|
||||
.st15{fill:#E91E63;}
|
||||
.st16{opacity:0.5;fill:#FFFFFF;}
|
||||
.st17{opacity:0.2;}
|
||||
.st18{fill:#651FFF;}
|
||||
.st19{fill-rule:evenodd;clip-rule:evenodd;fill:#E91E63;}
|
||||
.st20{display:none;}
|
||||
</style>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_border" viewBox="0 -48 48 48">
|
||||
<rect y="-48" class="st0" width="48" height="48"/>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_grid" viewBox="0 -48 48 48">
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_1_" x="0" y="-48" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st1">
|
||||
<g>
|
||||
<line class="st2" x1="2" y1="-48" x2="2" y2="0"/>
|
||||
<line class="st2" x1="4" y1="-48" x2="4" y2="0"/>
|
||||
<line class="st2" x1="6" y1="-48" x2="6" y2="0"/>
|
||||
<line class="st2" x1="8" y1="-48" x2="8" y2="0"/>
|
||||
<line class="st2" x1="10" y1="-48" x2="10" y2="0"/>
|
||||
<line class="st2" x1="12" y1="-48" x2="12" y2="0"/>
|
||||
<line class="st2" x1="14" y1="-48" x2="14" y2="0"/>
|
||||
<line class="st2" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st2" x1="18" y1="-48" x2="18" y2="0"/>
|
||||
<line class="st2" x1="20" y1="-48" x2="20" y2="0"/>
|
||||
<line class="st2" x1="22" y1="-48" x2="22" y2="0"/>
|
||||
<line class="st2" x1="24" y1="-48" x2="24" y2="0"/>
|
||||
<line class="st2" x1="26" y1="-48" x2="26" y2="0"/>
|
||||
<line class="st2" x1="28" y1="-48" x2="28" y2="0"/>
|
||||
<line class="st2" x1="30" y1="-48" x2="30" y2="0"/>
|
||||
<line class="st2" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st2" x1="34" y1="-48" x2="34" y2="0"/>
|
||||
<line class="st2" x1="36" y1="-48" x2="36" y2="0"/>
|
||||
<line class="st2" x1="38" y1="-48" x2="38" y2="0"/>
|
||||
<line class="st2" x1="40" y1="-48" x2="40" y2="0"/>
|
||||
<line class="st2" x1="42" y1="-48" x2="42" y2="0"/>
|
||||
<line class="st2" x1="44" y1="-48" x2="44" y2="0"/>
|
||||
<line class="st2" x1="46" y1="-48" x2="46" y2="0"/>
|
||||
</g>
|
||||
<g>
|
||||
<line class="st2" x1="0" y1="-2" x2="48" y2="-2"/>
|
||||
<line class="st2" x1="0" y1="-4" x2="48" y2="-4"/>
|
||||
<line class="st2" x1="0" y1="-6" x2="48" y2="-6"/>
|
||||
<line class="st2" x1="0" y1="-8" x2="48" y2="-8"/>
|
||||
<line class="st2" x1="0" y1="-10" x2="48" y2="-10"/>
|
||||
<line class="st2" x1="0" y1="-12" x2="48" y2="-12"/>
|
||||
<line class="st2" x1="0" y1="-14" x2="48" y2="-14"/>
|
||||
<line class="st2" x1="0" y1="-16" x2="48" y2="-16"/>
|
||||
<line class="st2" x1="0" y1="-18" x2="48" y2="-18"/>
|
||||
<line class="st2" x1="0" y1="-20" x2="48" y2="-20"/>
|
||||
<line class="st2" x1="0" y1="-22" x2="48" y2="-22"/>
|
||||
<line class="st2" x1="0" y1="-24" x2="48" y2="-24"/>
|
||||
<line class="st2" x1="0" y1="-26" x2="48" y2="-26"/>
|
||||
<line class="st2" x1="0" y1="-28" x2="48" y2="-28"/>
|
||||
<line class="st2" x1="0" y1="-30" x2="48" y2="-30"/>
|
||||
<line class="st2" x1="0" y1="-32" x2="48" y2="-32"/>
|
||||
<line class="st2" x1="0" y1="-34" x2="48" y2="-34"/>
|
||||
<line class="st2" x1="0" y1="-36" x2="48" y2="-36"/>
|
||||
<line class="st2" x1="0" y1="-38" x2="48" y2="-38"/>
|
||||
<line class="st2" x1="0" y1="-40" x2="48" y2="-40"/>
|
||||
<line class="st2" x1="0" y1="-42" x2="48" y2="-42"/>
|
||||
<line class="st2" x1="0" y1="-44" x2="48" y2="-44"/>
|
||||
<line class="st2" x1="0" y1="-46" x2="48" y2="-46"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M47.8-0.2v-47.5H0.2v47.5H47.8 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_keylines" viewBox="0 -48 48 48">
|
||||
<g class="st3">
|
||||
<defs>
|
||||
<rect id="SVGID_3_" x="0" y="-48" class="st3" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_4_">
|
||||
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<line class="st4" x1="24" y1="0" x2="24" y2="-48"/>
|
||||
<line class="st4" x1="48" y1="-24" x2="0" y2="-24"/>
|
||||
<line class="st4" x1="48" y1="-16" x2="0" y2="-16"/>
|
||||
<line class="st4" x1="48" y1="-32" x2="0" y2="-32"/>
|
||||
<line class="st4" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st4" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st4" x1="47.7" y1="-0.3" x2="0.2" y2="-47.8"/>
|
||||
<line class="st4" x1="0.2" y1="-0.3" x2="47.7" y2="-47.8"/>
|
||||
<path class="st4" d="M24-14c-5.5,0-10-4.5-10-10c0-5.5,4.5-10,10-10c5.5,0,10,4.5,10,10C34-18.5,29.5-14,24-14z"/>
|
||||
<path class="st4" d="M24-4C12.9-4,4-12.9,4-24c0-11.1,8.9-20,20-20c11.1,0,20,8.9,20,20C44-12.9,35.1-4,24-4z"/>
|
||||
<path class="st4" d="M38-6H10c-2.2,0-4-1.8-4-4v-28c0-2.2,1.8-4,4-4h28c2.2,0,4,1.8,4,4v28C42-7.8,40.2-6,38-6z"/>
|
||||
<path class="st4" d="M40-8H8c-2.2,0-4-1.8-4-4v-24c0-2.2,1.8-4,4-4h32c2.2,0,4,1.8,4,4l0,24C44-9.8,42.2-8,40-8z"/>
|
||||
<path class="st4" d="M40-40v32c0,2.2-1.8,4-4,4H12C9.8-4,8-5.8,8-8v-32c0-2.2,1.8-4,4-4h24C38.2-44,40-42.2,40-40z"/>
|
||||
<g class="st5">
|
||||
<path d="M47.7-0.3v-47.5H0.2v47.5H47.7 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<g id="label">
|
||||
</g>
|
||||
<g id="border">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_border" width="48" height="48" y="-48" transform="matrix(0.5 0 0 -0.5 3.916831e-04 5.698877e-05)" style="overflow:visible;"/>
|
||||
</g>
|
||||
<g id="icon">
|
||||
<g>
|
||||
<rect x="0" y="0" class="st0" width="24" height="24"/>
|
||||
<path class="st13" d="M18,4H6C4.9,4,4,4.9,4,6v12c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2V6C20,4.9,19.1,4,18,4z M7,10.5
|
||||
C7,8.6,8.6,7,10.5,7S14,8.6,14,10.5c0,0.2,0,0.3-0.1,0.5H11v2.9c-0.2,0-0.3,0.1-0.5,0.1C8.6,14,7,12.4,7,10.5z M17,17h-5v-5l5,0
|
||||
V17z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="grid" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_grid" width="48" height="48" id="XMLID_72_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.139775e-04 -2.620241e-04)" style="display:inline;overflow:visible;opacity:0.15;"/>
|
||||
</g>
|
||||
<g id="keylines" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_keylines" width="48" height="48" id="XMLID_52_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.709663e-04 -2.924798e-04)" style="display:inline;overflow:visible;"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.6 KiB |
144
lib/core/assets/images/ft_ic_video.svg
Executable file
@@ -0,0 +1,144 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
|
||||
height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{clip-path:url(#SVGID_2_);}
|
||||
.st2{fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st3{opacity:0.4;}
|
||||
.st4{clip-path:url(#SVGID_4_);fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st5{clip-path:url(#SVGID_4_);}
|
||||
.st6{fill:#FFFFFF;}
|
||||
.st7{fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:10;}
|
||||
.st8{fill:#22BE73;}
|
||||
.st9{fill:#D9E021;}
|
||||
.st10{fill-rule:evenodd;clip-rule:evenodd;}
|
||||
.st11{fill:#2979FF;}
|
||||
.st12{fill:#00B0FF;}
|
||||
.st13{fill:#FF6D40;}
|
||||
.st14{fill:#FFC107;}
|
||||
.st15{fill:#E91E63;}
|
||||
.st16{opacity:0.5;fill:#FFFFFF;}
|
||||
.st17{opacity:0.2;}
|
||||
.st18{fill:#651FFF;}
|
||||
.st19{fill-rule:evenodd;clip-rule:evenodd;fill:#E91E63;}
|
||||
.st20{display:none;}
|
||||
</style>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_border" viewBox="0 -48 48 48">
|
||||
<rect y="-48" class="st0" width="48" height="48"/>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_grid" viewBox="0 -48 48 48">
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_1_" x="0" y="-48" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st1">
|
||||
<g>
|
||||
<line class="st2" x1="2" y1="-48" x2="2" y2="0"/>
|
||||
<line class="st2" x1="4" y1="-48" x2="4" y2="0"/>
|
||||
<line class="st2" x1="6" y1="-48" x2="6" y2="0"/>
|
||||
<line class="st2" x1="8" y1="-48" x2="8" y2="0"/>
|
||||
<line class="st2" x1="10" y1="-48" x2="10" y2="0"/>
|
||||
<line class="st2" x1="12" y1="-48" x2="12" y2="0"/>
|
||||
<line class="st2" x1="14" y1="-48" x2="14" y2="0"/>
|
||||
<line class="st2" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st2" x1="18" y1="-48" x2="18" y2="0"/>
|
||||
<line class="st2" x1="20" y1="-48" x2="20" y2="0"/>
|
||||
<line class="st2" x1="22" y1="-48" x2="22" y2="0"/>
|
||||
<line class="st2" x1="24" y1="-48" x2="24" y2="0"/>
|
||||
<line class="st2" x1="26" y1="-48" x2="26" y2="0"/>
|
||||
<line class="st2" x1="28" y1="-48" x2="28" y2="0"/>
|
||||
<line class="st2" x1="30" y1="-48" x2="30" y2="0"/>
|
||||
<line class="st2" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st2" x1="34" y1="-48" x2="34" y2="0"/>
|
||||
<line class="st2" x1="36" y1="-48" x2="36" y2="0"/>
|
||||
<line class="st2" x1="38" y1="-48" x2="38" y2="0"/>
|
||||
<line class="st2" x1="40" y1="-48" x2="40" y2="0"/>
|
||||
<line class="st2" x1="42" y1="-48" x2="42" y2="0"/>
|
||||
<line class="st2" x1="44" y1="-48" x2="44" y2="0"/>
|
||||
<line class="st2" x1="46" y1="-48" x2="46" y2="0"/>
|
||||
</g>
|
||||
<g>
|
||||
<line class="st2" x1="0" y1="-2" x2="48" y2="-2"/>
|
||||
<line class="st2" x1="0" y1="-4" x2="48" y2="-4"/>
|
||||
<line class="st2" x1="0" y1="-6" x2="48" y2="-6"/>
|
||||
<line class="st2" x1="0" y1="-8" x2="48" y2="-8"/>
|
||||
<line class="st2" x1="0" y1="-10" x2="48" y2="-10"/>
|
||||
<line class="st2" x1="0" y1="-12" x2="48" y2="-12"/>
|
||||
<line class="st2" x1="0" y1="-14" x2="48" y2="-14"/>
|
||||
<line class="st2" x1="0" y1="-16" x2="48" y2="-16"/>
|
||||
<line class="st2" x1="0" y1="-18" x2="48" y2="-18"/>
|
||||
<line class="st2" x1="0" y1="-20" x2="48" y2="-20"/>
|
||||
<line class="st2" x1="0" y1="-22" x2="48" y2="-22"/>
|
||||
<line class="st2" x1="0" y1="-24" x2="48" y2="-24"/>
|
||||
<line class="st2" x1="0" y1="-26" x2="48" y2="-26"/>
|
||||
<line class="st2" x1="0" y1="-28" x2="48" y2="-28"/>
|
||||
<line class="st2" x1="0" y1="-30" x2="48" y2="-30"/>
|
||||
<line class="st2" x1="0" y1="-32" x2="48" y2="-32"/>
|
||||
<line class="st2" x1="0" y1="-34" x2="48" y2="-34"/>
|
||||
<line class="st2" x1="0" y1="-36" x2="48" y2="-36"/>
|
||||
<line class="st2" x1="0" y1="-38" x2="48" y2="-38"/>
|
||||
<line class="st2" x1="0" y1="-40" x2="48" y2="-40"/>
|
||||
<line class="st2" x1="0" y1="-42" x2="48" y2="-42"/>
|
||||
<line class="st2" x1="0" y1="-44" x2="48" y2="-44"/>
|
||||
<line class="st2" x1="0" y1="-46" x2="48" y2="-46"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M47.8-0.2v-47.5H0.2v47.5H47.8 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_keylines" viewBox="0 -48 48 48">
|
||||
<g class="st3">
|
||||
<defs>
|
||||
<rect id="SVGID_3_" x="0" y="-48" class="st3" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_4_">
|
||||
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<line class="st4" x1="24" y1="0" x2="24" y2="-48"/>
|
||||
<line class="st4" x1="48" y1="-24" x2="0" y2="-24"/>
|
||||
<line class="st4" x1="48" y1="-16" x2="0" y2="-16"/>
|
||||
<line class="st4" x1="48" y1="-32" x2="0" y2="-32"/>
|
||||
<line class="st4" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st4" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st4" x1="47.7" y1="-0.3" x2="0.2" y2="-47.8"/>
|
||||
<line class="st4" x1="0.2" y1="-0.3" x2="47.7" y2="-47.8"/>
|
||||
<path class="st4" d="M24-14c-5.5,0-10-4.5-10-10c0-5.5,4.5-10,10-10c5.5,0,10,4.5,10,10C34-18.5,29.5-14,24-14z"/>
|
||||
<path class="st4" d="M24-4C12.9-4,4-12.9,4-24c0-11.1,8.9-20,20-20c11.1,0,20,8.9,20,20C44-12.9,35.1-4,24-4z"/>
|
||||
<path class="st4" d="M38-6H10c-2.2,0-4-1.8-4-4v-28c0-2.2,1.8-4,4-4h28c2.2,0,4,1.8,4,4v28C42-7.8,40.2-6,38-6z"/>
|
||||
<path class="st4" d="M40-8H8c-2.2,0-4-1.8-4-4v-24c0-2.2,1.8-4,4-4h32c2.2,0,4,1.8,4,4l0,24C44-9.8,42.2-8,40-8z"/>
|
||||
<path class="st4" d="M40-40v32c0,2.2-1.8,4-4,4H12C9.8-4,8-5.8,8-8v-32c0-2.2,1.8-4,4-4h24C38.2-44,40-42.2,40-40z"/>
|
||||
<g class="st5">
|
||||
<path d="M47.7-0.3v-47.5H0.2v47.5H47.7 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<g id="label">
|
||||
</g>
|
||||
<g id="border">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_border" width="48" height="48" y="-48" transform="matrix(0.5 0 0 -0.5 3.916831e-04 5.698877e-05)" style="overflow:visible;"/>
|
||||
</g>
|
||||
<g id="icon">
|
||||
<g>
|
||||
<rect x="0" class="st0" width="24" height="24"/>
|
||||
<path class="st14" d="M18,3v2h-2V3H8v2H6V3H4v18h2v-2h2v2h8v-2h2v2h2V3H18z M8,17H6v-2h2V17z M8,13H6v-2h2V13z M8,9H6V7h2V9z
|
||||
M18,17h-2v-2h2V17z M18,13h-2v-2h2V13z M18,9h-2V7h2V9z"/>
|
||||
<path class="st0" d="M0,0h24v24H0V0z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="grid" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_grid" width="48" height="48" id="XMLID_36_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.139775e-04 -2.620241e-04)" style="display:inline;overflow:visible;opacity:0.15;"/>
|
||||
</g>
|
||||
<g id="keylines" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_keylines" width="48" height="48" id="XMLID_34_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.709663e-04 -2.924798e-04)" style="display:inline;overflow:visible;"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.6 KiB |
142
lib/core/assets/images/ft_ic_website.svg
Executable file
@@ -0,0 +1,142 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
|
||||
height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{clip-path:url(#SVGID_2_);}
|
||||
.st2{fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st3{opacity:0.4;}
|
||||
.st4{clip-path:url(#SVGID_4_);fill:none;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st5{clip-path:url(#SVGID_4_);}
|
||||
.st6{fill:#FFFFFF;}
|
||||
.st7{fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:10;}
|
||||
.st8{fill:#22BE73;}
|
||||
.st9{fill:#D9E021;}
|
||||
.st10{fill-rule:evenodd;clip-rule:evenodd;}
|
||||
.st11{fill:#2979FF;}
|
||||
.st12{fill:#00B0FF;}
|
||||
.st13{fill:#FF6D40;}
|
||||
.st14{fill:#FFC107;}
|
||||
.st15{fill:#E91E63;}
|
||||
.st16{opacity:0.5;fill:#FFFFFF;}
|
||||
.st17{opacity:0.2;}
|
||||
.st18{fill:#651FFF;}
|
||||
.st19{fill-rule:evenodd;clip-rule:evenodd;fill:#E91E63;}
|
||||
.st20{display:none;}
|
||||
</style>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_border" viewBox="0 -48 48 48">
|
||||
<rect y="-48" class="st0" width="48" height="48"/>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_grid" viewBox="0 -48 48 48">
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_1_" x="0" y="-48" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g class="st1">
|
||||
<g>
|
||||
<line class="st2" x1="2" y1="-48" x2="2" y2="0"/>
|
||||
<line class="st2" x1="4" y1="-48" x2="4" y2="0"/>
|
||||
<line class="st2" x1="6" y1="-48" x2="6" y2="0"/>
|
||||
<line class="st2" x1="8" y1="-48" x2="8" y2="0"/>
|
||||
<line class="st2" x1="10" y1="-48" x2="10" y2="0"/>
|
||||
<line class="st2" x1="12" y1="-48" x2="12" y2="0"/>
|
||||
<line class="st2" x1="14" y1="-48" x2="14" y2="0"/>
|
||||
<line class="st2" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st2" x1="18" y1="-48" x2="18" y2="0"/>
|
||||
<line class="st2" x1="20" y1="-48" x2="20" y2="0"/>
|
||||
<line class="st2" x1="22" y1="-48" x2="22" y2="0"/>
|
||||
<line class="st2" x1="24" y1="-48" x2="24" y2="0"/>
|
||||
<line class="st2" x1="26" y1="-48" x2="26" y2="0"/>
|
||||
<line class="st2" x1="28" y1="-48" x2="28" y2="0"/>
|
||||
<line class="st2" x1="30" y1="-48" x2="30" y2="0"/>
|
||||
<line class="st2" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st2" x1="34" y1="-48" x2="34" y2="0"/>
|
||||
<line class="st2" x1="36" y1="-48" x2="36" y2="0"/>
|
||||
<line class="st2" x1="38" y1="-48" x2="38" y2="0"/>
|
||||
<line class="st2" x1="40" y1="-48" x2="40" y2="0"/>
|
||||
<line class="st2" x1="42" y1="-48" x2="42" y2="0"/>
|
||||
<line class="st2" x1="44" y1="-48" x2="44" y2="0"/>
|
||||
<line class="st2" x1="46" y1="-48" x2="46" y2="0"/>
|
||||
</g>
|
||||
<g>
|
||||
<line class="st2" x1="0" y1="-2" x2="48" y2="-2"/>
|
||||
<line class="st2" x1="0" y1="-4" x2="48" y2="-4"/>
|
||||
<line class="st2" x1="0" y1="-6" x2="48" y2="-6"/>
|
||||
<line class="st2" x1="0" y1="-8" x2="48" y2="-8"/>
|
||||
<line class="st2" x1="0" y1="-10" x2="48" y2="-10"/>
|
||||
<line class="st2" x1="0" y1="-12" x2="48" y2="-12"/>
|
||||
<line class="st2" x1="0" y1="-14" x2="48" y2="-14"/>
|
||||
<line class="st2" x1="0" y1="-16" x2="48" y2="-16"/>
|
||||
<line class="st2" x1="0" y1="-18" x2="48" y2="-18"/>
|
||||
<line class="st2" x1="0" y1="-20" x2="48" y2="-20"/>
|
||||
<line class="st2" x1="0" y1="-22" x2="48" y2="-22"/>
|
||||
<line class="st2" x1="0" y1="-24" x2="48" y2="-24"/>
|
||||
<line class="st2" x1="0" y1="-26" x2="48" y2="-26"/>
|
||||
<line class="st2" x1="0" y1="-28" x2="48" y2="-28"/>
|
||||
<line class="st2" x1="0" y1="-30" x2="48" y2="-30"/>
|
||||
<line class="st2" x1="0" y1="-32" x2="48" y2="-32"/>
|
||||
<line class="st2" x1="0" y1="-34" x2="48" y2="-34"/>
|
||||
<line class="st2" x1="0" y1="-36" x2="48" y2="-36"/>
|
||||
<line class="st2" x1="0" y1="-38" x2="48" y2="-38"/>
|
||||
<line class="st2" x1="0" y1="-40" x2="48" y2="-40"/>
|
||||
<line class="st2" x1="0" y1="-42" x2="48" y2="-42"/>
|
||||
<line class="st2" x1="0" y1="-44" x2="48" y2="-44"/>
|
||||
<line class="st2" x1="0" y1="-46" x2="48" y2="-46"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M47.8-0.2v-47.5H0.2v47.5H47.8 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<symbol id="material_x5F_system_x5F_icon_x5F_keylines" viewBox="0 -48 48 48">
|
||||
<g class="st3">
|
||||
<defs>
|
||||
<rect id="SVGID_3_" x="0" y="-48" class="st3" width="48" height="48"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_4_">
|
||||
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<line class="st4" x1="24" y1="0" x2="24" y2="-48"/>
|
||||
<line class="st4" x1="48" y1="-24" x2="0" y2="-24"/>
|
||||
<line class="st4" x1="48" y1="-16" x2="0" y2="-16"/>
|
||||
<line class="st4" x1="48" y1="-32" x2="0" y2="-32"/>
|
||||
<line class="st4" x1="32" y1="-48" x2="32" y2="0"/>
|
||||
<line class="st4" x1="16" y1="-48" x2="16" y2="0"/>
|
||||
<line class="st4" x1="47.7" y1="-0.3" x2="0.2" y2="-47.8"/>
|
||||
<line class="st4" x1="0.2" y1="-0.3" x2="47.7" y2="-47.8"/>
|
||||
<path class="st4" d="M24-14c-5.5,0-10-4.5-10-10c0-5.5,4.5-10,10-10c5.5,0,10,4.5,10,10C34-18.5,29.5-14,24-14z"/>
|
||||
<path class="st4" d="M24-4C12.9-4,4-12.9,4-24c0-11.1,8.9-20,20-20c11.1,0,20,8.9,20,20C44-12.9,35.1-4,24-4z"/>
|
||||
<path class="st4" d="M38-6H10c-2.2,0-4-1.8-4-4v-28c0-2.2,1.8-4,4-4h28c2.2,0,4,1.8,4,4v28C42-7.8,40.2-6,38-6z"/>
|
||||
<path class="st4" d="M40-8H8c-2.2,0-4-1.8-4-4v-24c0-2.2,1.8-4,4-4h32c2.2,0,4,1.8,4,4l0,24C44-9.8,42.2-8,40-8z"/>
|
||||
<path class="st4" d="M40-40v32c0,2.2-1.8,4-4,4H12C9.8-4,8-5.8,8-8v-32c0-2.2,1.8-4,4-4h24C38.2-44,40-42.2,40-40z"/>
|
||||
<g class="st5">
|
||||
<path d="M47.7-0.3v-47.5H0.2v47.5H47.7 M48,0H0v-48h48V0L48,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
<g id="label">
|
||||
</g>
|
||||
<g id="border">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_border" width="48" height="48" y="-48" transform="matrix(0.5 0 0 -0.5 3.916831e-04 5.698877e-05)" style="overflow:visible;"/>
|
||||
</g>
|
||||
<g id="icon">
|
||||
<g>
|
||||
<path class="st0" d="M0,0h24v24H0V0z"/>
|
||||
<path class="st11" d="M9.4,16.6L4.8,12l4.6-4.6L8,6l-6,6l6,6L9.4,16.6z M14.6,16.6l4.6-4.6l-4.6-4.6L16,6l6,6l-6,6L14.6,16.6z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="grid" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_grid" width="48" height="48" id="XMLID_70_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.139775e-04 -2.620241e-04)" style="display:inline;overflow:visible;opacity:0.15;"/>
|
||||
</g>
|
||||
<g id="keylines" class="st20">
|
||||
|
||||
<use xlink:href="#material_x5F_system_x5F_icon_x5F_keylines" width="48" height="48" id="XMLID_50_" x="0" y="-48" transform="matrix(0.5 0 0 -0.5 1.709663e-04 -2.924798e-04)" style="display:inline;overflow:visible;"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.5 KiB |
25
lib/core/card-view/card-view-content-proxy.directive.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Directive, ViewContainerRef } from '@angular/core';
|
||||
|
||||
@Directive({
|
||||
selector: '[adf-card-view-content-proxy]'
|
||||
})
|
||||
export class CardViewContentProxyDirective {
|
||||
constructor(public viewContainerRef: ViewContainerRef) { }
|
||||
}
|
30
lib/core/card-view/card-view-dateitem.component.html
Normal file
@@ -0,0 +1,30 @@
|
||||
<div class="adf-property-label">{{ property.label | translate }}</div>
|
||||
<div class="adf-property-value">
|
||||
<span *ngIf="!isEditable()">
|
||||
<span [attr.data-automation-id]="'card-dateitem-' + property.key">
|
||||
<span *ngIf="!property.isEmpty(); else elseEmptyValueBlock">{{ property.displayValue }}</span>
|
||||
</span>
|
||||
</span>
|
||||
<span *ngIf="isEditable()" class="adf-dateitem-editable">
|
||||
<input class="adf-invisible-date-input" [matDatepicker]="picker" [value]="valueDate"
|
||||
(dateChange)="onDateChanged($event)">
|
||||
<span
|
||||
class="adf-datepicker-toggle"
|
||||
[attr.data-automation-id]="'datepicker-label-toggle-' + property.key"
|
||||
(click)="showDatePicker($event)">
|
||||
<span *ngIf="!property.isEmpty(); else elseEmptyValueBlock">{{ property.displayValue }}</span>
|
||||
</span>
|
||||
<mat-datepicker-toggle
|
||||
[attr.data-automation-id]="'datepickertoggle-' + property.key"
|
||||
[for]="picker">
|
||||
</mat-datepicker-toggle>
|
||||
<mat-datepicker #picker
|
||||
[attr.data-automation-id]="'datepicker-' + property.key"
|
||||
[startAt]="valueDate"
|
||||
[touchUi]="true">
|
||||
</mat-datepicker>
|
||||
</span>
|
||||
<ng-template #elseEmptyValueBlock>
|
||||
{{ property.default | translate }}
|
||||
</ng-template>
|
||||
</div>
|
36
lib/core/card-view/card-view-dateitem.component.scss
Normal file
@@ -0,0 +1,36 @@
|
||||
@mixin adf-card-view-dateitem-theme($theme) {
|
||||
|
||||
.adf {
|
||||
&-invisible-date-input {
|
||||
height: 24px;
|
||||
width: 0;
|
||||
overflow: hidden;
|
||||
opacity: 0;
|
||||
border: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
display: none;
|
||||
}
|
||||
|
||||
&-dateitem-editable {
|
||||
cursor: pointer;
|
||||
|
||||
button.mat-icon-button {
|
||||
line-height: 20px;
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
}
|
||||
|
||||
mat-icon {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
opacity: 0.5;
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
&:hover mat-icon {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
193
lib/core/card-view/card-view-dateitem.component.spec.ts
Normal file
@@ -0,0 +1,193 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { HttpClientModule } from '@angular/common/http';
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { MatDatepickerModule, MatInputModule, MatNativeDateModule } from '@angular/material';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
|
||||
import * as moment from 'moment';
|
||||
import { AppConfigService } from '../index';
|
||||
import { CardViewDateItemModel } from '../models/card-view-dateitem.model';
|
||||
import { CardViewUpdateService } from '../services/card-view-update.service';
|
||||
import { TranslateLoaderService } from '../services/translate-loader.service';
|
||||
|
||||
import { CardViewDateItemComponent } from './card-view-dateitem.component';
|
||||
|
||||
describe('CardViewDateItemComponent', () => {
|
||||
|
||||
let fixture: ComponentFixture<CardViewDateItemComponent>;
|
||||
let component: CardViewDateItemComponent;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [
|
||||
HttpClientModule,
|
||||
MatDatepickerModule,
|
||||
MatInputModule,
|
||||
MatNativeDateModule,
|
||||
TranslateModule.forRoot({
|
||||
loader: {
|
||||
provide: TranslateLoader,
|
||||
useClass: TranslateLoaderService
|
||||
}
|
||||
})
|
||||
],
|
||||
declarations: [
|
||||
CardViewDateItemComponent
|
||||
],
|
||||
providers: [
|
||||
CardViewUpdateService,
|
||||
AppConfigService
|
||||
]
|
||||
}).compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(CardViewDateItemComponent);
|
||||
component = fixture.componentInstance;
|
||||
component.property = new CardViewDateItemModel({
|
||||
label: 'Date label',
|
||||
value: new Date('07/10/2017'),
|
||||
key: 'datekey',
|
||||
default: '',
|
||||
format: '',
|
||||
editable: false
|
||||
});
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
fixture.destroy();
|
||||
TestBed.resetTestingModule();
|
||||
});
|
||||
|
||||
it('should render the label and value', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
let labelValue = fixture.debugElement.query(By.css('.adf-property-label'));
|
||||
expect(labelValue).not.toBeNull();
|
||||
expect(labelValue.nativeElement.innerText).toBe('Date label');
|
||||
|
||||
let value = fixture.debugElement.query(By.css('.adf-property-value'));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.innerText.trim()).toBe('Jul 10 2017');
|
||||
});
|
||||
|
||||
it('should render the default as value if the value is empty and editable:false', () => {
|
||||
component.property = new CardViewDateItemModel ({
|
||||
label: 'Date label',
|
||||
value: '',
|
||||
key: 'datekey',
|
||||
default: 'FAKE-DEFAULT-KEY',
|
||||
format: '',
|
||||
editable: false
|
||||
});
|
||||
fixture.detectChanges();
|
||||
|
||||
let value = fixture.debugElement.query(By.css('.adf-property-value'));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.innerText.trim()).toBe('FAKE-DEFAULT-KEY');
|
||||
});
|
||||
|
||||
it('should render the default as value if the value is empty and editable:true', () => {
|
||||
component.property = new CardViewDateItemModel ({
|
||||
label: 'Date label',
|
||||
value: '',
|
||||
key: 'datekey',
|
||||
default: 'FAKE-DEFAULT-KEY',
|
||||
format: '',
|
||||
editable: true
|
||||
});
|
||||
fixture.detectChanges();
|
||||
|
||||
let value = fixture.debugElement.query(By.css('.adf-property-value'));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.innerText.trim()).toBe('FAKE-DEFAULT-KEY');
|
||||
});
|
||||
|
||||
it('should render value when editable:true', () => {
|
||||
component.editable = true;
|
||||
component.property.editable = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
let value = fixture.debugElement.query(By.css('.adf-property-value'));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.innerText.trim()).toBe('Jul 10 2017');
|
||||
});
|
||||
|
||||
it('should render the picker and toggle in case of editable:true', () => {
|
||||
component.editable = true;
|
||||
component.property.editable = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
let datePicker = fixture.debugElement.query(By.css(`[data-automation-id="datepicker-${component.property.key}"]`));
|
||||
let datePickerToggle = fixture.debugElement.query(By.css(`[data-automation-id="datepickertoggle-${component.property.key}"]`));
|
||||
expect(datePicker).not.toBeNull('Datepicker should be in DOM');
|
||||
expect(datePickerToggle).not.toBeNull('Datepicker toggle should be shown');
|
||||
});
|
||||
|
||||
it('should NOT render the picker and toggle in case of editable:false', () => {
|
||||
component.property.editable = false;
|
||||
fixture.detectChanges();
|
||||
|
||||
let datePicker = fixture.debugElement.query(By.css(`[data-automation-id="datepicker-${component.property.key}"]`));
|
||||
let datePickerToggle = fixture.debugElement.query(By.css(`[data-automation-id="datepickertoggle-${component.property.key}"]`));
|
||||
expect(datePicker).toBeNull('Datepicker should NOT be in DOM');
|
||||
expect(datePickerToggle).toBeNull('Datepicker toggle should NOT be shown');
|
||||
});
|
||||
|
||||
it('should NOT render the picker and toggle in case of editable:true but (general) editable:false', () => {
|
||||
component.editable = false;
|
||||
component.property.editable = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
let datePicker = fixture.debugElement.query(By.css(`[data-automation-id="datepicker-${component.property.key}"]`));
|
||||
let datePickerToggle = fixture.debugElement.query(By.css(`[data-automation-id="datepickertoggle-${component.property.key}"]`));
|
||||
expect(datePicker).toBeNull('Datepicker should NOT be in DOM');
|
||||
expect(datePickerToggle).toBeNull('Datepicker toggle should NOT be shown');
|
||||
});
|
||||
|
||||
it('should open the datetimepicker when clicking on the label', () => {
|
||||
component.editable = true;
|
||||
component.property.editable = true;
|
||||
fixture.detectChanges();
|
||||
spyOn(component.datepicker, 'open');
|
||||
|
||||
let datePickerLabelToggle = fixture.debugElement.query(By.css(`[data-automation-id="datepicker-label-toggle-${component.property.key}"]`));
|
||||
datePickerLabelToggle.triggerEventHandler('click', {});
|
||||
|
||||
expect(component.datepicker.open).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should trigger an update event on the CardViewUpdateService', (done) => {
|
||||
component.editable = true;
|
||||
component.property.editable = true;
|
||||
const cardViewUpdateService = TestBed.get(CardViewUpdateService);
|
||||
const expectedDate = moment('Jul 10 2017', 'MMM DD YY');
|
||||
fixture.detectChanges();
|
||||
|
||||
cardViewUpdateService.itemUpdated$.subscribe(
|
||||
(updateNotification) => {
|
||||
expect(updateNotification.target).toBe(component.property);
|
||||
expect(updateNotification.changed).toEqual({datekey: expectedDate.toDate()});
|
||||
done();
|
||||
}
|
||||
);
|
||||
|
||||
component.onDateChanged({value: expectedDate});
|
||||
});
|
||||
});
|
88
lib/core/card-view/card-view-dateitem.component.ts
Normal file
@@ -0,0 +1,88 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Component, Input, OnInit, ViewChild } from '@angular/core';
|
||||
import { MatDatepicker } from '@angular/material';
|
||||
import { DateAdapter, MAT_DATE_FORMATS } from '@angular/material';
|
||||
import * as moment from 'moment';
|
||||
import { Moment } from 'moment';
|
||||
import { CardViewDateItemModel } from '../models/card-view-dateitem.model';
|
||||
import { CardViewUpdateService } from '../services/card-view-update.service';
|
||||
import { UserPreferencesService } from '../services/user-preferences.service';
|
||||
import { MOMENT_DATE_FORMATS, MomentDateAdapter } from '../utils/momentDateAdapter';
|
||||
|
||||
@Component({
|
||||
providers: [
|
||||
{provide: DateAdapter, useClass: MomentDateAdapter},
|
||||
{provide: MAT_DATE_FORMATS, useValue: MOMENT_DATE_FORMATS}],
|
||||
selector: 'adf-card-view-dateitem',
|
||||
templateUrl: './card-view-dateitem.component.html',
|
||||
styleUrls: ['./card-view-dateitem.component.scss']
|
||||
})
|
||||
export class CardViewDateItemComponent implements OnInit {
|
||||
|
||||
public SHOW_FORMAT: string = 'MMM DD YY';
|
||||
|
||||
@Input()
|
||||
property: CardViewDateItemModel;
|
||||
|
||||
@Input()
|
||||
editable: boolean;
|
||||
|
||||
@ViewChild(MatDatepicker)
|
||||
public datepicker: MatDatepicker<any>;
|
||||
|
||||
valueDate: Moment;
|
||||
|
||||
constructor(
|
||||
private cardViewUpdateService: CardViewUpdateService,
|
||||
private dateAdapter: DateAdapter<Moment>,
|
||||
private preferences: UserPreferencesService) {
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
this.preferences.locale$.subscribe( (locale) => {
|
||||
this.dateAdapter.setLocale(locale);
|
||||
});
|
||||
let momentDateAdapter = <MomentDateAdapter> this.dateAdapter;
|
||||
momentDateAdapter.overrideDisplyaFormat = this.SHOW_FORMAT;
|
||||
|
||||
if (this.property.value) {
|
||||
this.valueDate = moment(this.property.value, this.SHOW_FORMAT);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
isEditable() {
|
||||
return this.editable && this.property.editable;
|
||||
}
|
||||
|
||||
showDatePicker() {
|
||||
this.datepicker.open();
|
||||
}
|
||||
|
||||
onDateChanged(newDateValue) {
|
||||
if (newDateValue) {
|
||||
let momentDate = moment(newDateValue.value, this.SHOW_FORMAT, true);
|
||||
if (momentDate.isValid()) {
|
||||
this.valueDate = momentDate;
|
||||
this.cardViewUpdateService.update(this.property, {[this.property.key]: momentDate.toDate()});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
162
lib/core/card-view/card-view-item-dispatcher.component.spec.ts
Normal file
@@ -0,0 +1,162 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* tslint:disable:component-selector */
|
||||
|
||||
import { Component, Input } from '@angular/core';
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/testing';
|
||||
import { CardViewItem } from '../interface/card-view-item.interface';
|
||||
import { CardItemTypeService } from '../services/card-item-types.service';
|
||||
import { CardViewContentProxyDirective } from './card-view-content-proxy.directive';
|
||||
import { CardViewItemDispatcherComponent } from './card-view-item-dispatcher.component';
|
||||
|
||||
@Component({
|
||||
selector: 'whatever-you-want-to-have',
|
||||
template: '<div data-automation-id="found-me">Hey I am shiny!</div>'
|
||||
})
|
||||
export class CardViewShinyCustomElementItemComponent {
|
||||
@Input() property: CardViewItem;
|
||||
@Input() editable: boolean;
|
||||
}
|
||||
|
||||
describe('CardViewItemDispatcherComponent', () => {
|
||||
|
||||
let fixture: ComponentFixture<CardViewItemDispatcherComponent>;
|
||||
let cardItemTypeService: CardItemTypeService;
|
||||
let component: CardViewItemDispatcherComponent;
|
||||
|
||||
beforeEach(async(() => {
|
||||
cardItemTypeService = new CardItemTypeService();
|
||||
cardItemTypeService.setComponentTypeResolver('shiny-custom-element', () => CardViewShinyCustomElementItemComponent);
|
||||
|
||||
TestBed.configureTestingModule({
|
||||
imports: [],
|
||||
declarations: [
|
||||
CardViewItemDispatcherComponent,
|
||||
CardViewShinyCustomElementItemComponent,
|
||||
CardViewContentProxyDirective
|
||||
],
|
||||
providers: [ { provide: CardItemTypeService, useValue: cardItemTypeService } ]
|
||||
});
|
||||
|
||||
// entryComponents are not supported yet on TestBed, that is why this ugly workaround:
|
||||
// https://github.com/angular/angular/issues/10760
|
||||
TestBed.overrideModule(BrowserDynamicTestingModule, {
|
||||
set: { entryComponents: [ CardViewShinyCustomElementItemComponent ] }
|
||||
});
|
||||
|
||||
TestBed.compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(CardViewItemDispatcherComponent);
|
||||
component = fixture.componentInstance;
|
||||
component.property = <CardViewItem> {
|
||||
type: 'shiny-custom-element',
|
||||
label: 'Shiny custom element',
|
||||
value: null,
|
||||
key: 'customkey',
|
||||
default: '',
|
||||
editable: false,
|
||||
get displayValue(): string {
|
||||
return 'custom value displayed';
|
||||
}
|
||||
};
|
||||
component.editable = true;
|
||||
|
||||
fixture.detectChanges();
|
||||
component.ngOnChanges(null);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
fixture.destroy();
|
||||
TestBed.resetTestingModule();
|
||||
});
|
||||
|
||||
describe('Subcompomnent creation', () => {
|
||||
|
||||
it('should load the CardViewShinyCustomElementItemComponent', () => {
|
||||
const innerElement = fixture.debugElement.query(By.css('[data-automation-id="found-me"]'));
|
||||
expect(innerElement).not.toBeNull();
|
||||
});
|
||||
|
||||
it('should load the CardViewShinyCustomElementItemComponent only ONCE', () => {
|
||||
component.ngOnChanges();
|
||||
component.ngOnChanges();
|
||||
component.ngOnChanges();
|
||||
fixture.detectChanges();
|
||||
|
||||
const shinyCustomElementItemComponent = fixture.debugElement.queryAll(By.css('whatever-you-want-to-have'));
|
||||
|
||||
expect(shinyCustomElementItemComponent.length).toEqual(1);
|
||||
});
|
||||
|
||||
it('should pass through the property and editable parameters', () => {
|
||||
const shinyCustomElementItemComponent = fixture.debugElement.query(By.css('whatever-you-want-to-have')).componentInstance;
|
||||
|
||||
expect(shinyCustomElementItemComponent.property).toBe(component.property);
|
||||
expect(shinyCustomElementItemComponent.editable).toBe(component.editable);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Angular lifecycle methods', () => {
|
||||
|
||||
let shinyCustomElementItemComponent;
|
||||
|
||||
const lifeCycleMethods = [
|
||||
'ngOnChanges',
|
||||
'ngOnInit',
|
||||
'ngDoCheck',
|
||||
'ngAfterContentInit',
|
||||
'ngAfterContentChecked',
|
||||
'ngAfterViewInit',
|
||||
'ngAfterViewChecked',
|
||||
'ngOnDestroy'
|
||||
];
|
||||
|
||||
beforeEach(() => {
|
||||
shinyCustomElementItemComponent = fixture.debugElement.query(By.css('whatever-you-want-to-have')).componentInstance;
|
||||
});
|
||||
|
||||
it('should call through the lifecycle methods', () => {
|
||||
lifeCycleMethods.forEach((lifeCycleMethod) => {
|
||||
shinyCustomElementItemComponent[lifeCycleMethod] = () => {};
|
||||
spyOn(shinyCustomElementItemComponent, lifeCycleMethod);
|
||||
const param1 = {};
|
||||
const param2 = {};
|
||||
|
||||
component[lifeCycleMethod].call(component, param1, param2);
|
||||
|
||||
expect(shinyCustomElementItemComponent[lifeCycleMethod]).toHaveBeenCalledWith(param1, param2);
|
||||
});
|
||||
});
|
||||
|
||||
it('should NOT call through the lifecycle methods if the method does not exist (no error should be thrown)', () => {
|
||||
lifeCycleMethods.forEach((lifeCycleMethod) => {
|
||||
shinyCustomElementItemComponent[lifeCycleMethod] = undefined;
|
||||
|
||||
const execution = () => {
|
||||
component[lifeCycleMethod].call(component);
|
||||
};
|
||||
|
||||
expect(execution).not.toThrowError();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
90
lib/core/card-view/card-view-item-dispatcher.component.ts
Normal file
@@ -0,0 +1,90 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import {
|
||||
Component,
|
||||
ComponentFactoryResolver,
|
||||
Input,
|
||||
OnChanges,
|
||||
ViewChild
|
||||
} from '@angular/core';
|
||||
import { CardViewItem } from '../interface/card-view-item.interface';
|
||||
import { CardItemTypeService } from '../services/card-item-types.service';
|
||||
import { CardViewContentProxyDirective } from './card-view-content-proxy.directive';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-card-view-item-dispatcher',
|
||||
template: '<ng-template adf-card-view-content-proxy></ng-template>'
|
||||
})
|
||||
export class CardViewItemDispatcherComponent implements OnChanges {
|
||||
@Input()
|
||||
property: CardViewItem;
|
||||
|
||||
@Input()
|
||||
editable: boolean;
|
||||
|
||||
@ViewChild(CardViewContentProxyDirective)
|
||||
private content: CardViewContentProxyDirective;
|
||||
|
||||
private loaded: boolean = false;
|
||||
private componentReference: any = null;
|
||||
|
||||
public ngOnInit;
|
||||
public ngDoCheck;
|
||||
|
||||
constructor(private cardItemTypeService: CardItemTypeService,
|
||||
private resolver: ComponentFactoryResolver) {
|
||||
const dynamicLifecycleMethods = [
|
||||
'ngOnInit',
|
||||
'ngDoCheck',
|
||||
'ngAfterContentInit',
|
||||
'ngAfterContentChecked',
|
||||
'ngAfterViewInit',
|
||||
'ngAfterViewChecked',
|
||||
'ngOnDestroy'
|
||||
];
|
||||
|
||||
dynamicLifecycleMethods.forEach((dynamicLifecycleMethod) => {
|
||||
this[dynamicLifecycleMethod] = this.proxy.bind(this, dynamicLifecycleMethod);
|
||||
});
|
||||
}
|
||||
|
||||
ngOnChanges(...args) {
|
||||
if (!this.loaded) {
|
||||
this.loadComponent();
|
||||
this.loaded = true;
|
||||
}
|
||||
|
||||
this.proxy('ngOnChanges', ...args);
|
||||
}
|
||||
|
||||
private loadComponent() {
|
||||
const factoryClass = this.cardItemTypeService.resolveComponentType(this.property);
|
||||
|
||||
const factory = this.resolver.resolveComponentFactory(factoryClass);
|
||||
this.componentReference = this.content.viewContainerRef.createComponent(factory);
|
||||
|
||||
this.componentReference.instance.editable = this.editable;
|
||||
this.componentReference.instance.property = this.property;
|
||||
}
|
||||
|
||||
private proxy(methodName, ...args) {
|
||||
if (this.componentReference.instance[methodName]) {
|
||||
this.componentReference.instance[methodName].apply(this.componentReference.instance, args);
|
||||
}
|
||||
}
|
||||
}
|
16
lib/core/card-view/card-view-mapitem.component.html
Normal file
@@ -0,0 +1,16 @@
|
||||
<div class="adf-property-label">{{ property.label | translate }}</div>
|
||||
<div class="adf-property-value">
|
||||
<div>
|
||||
<span *ngIf="!isClickable(); else elseBlock" [attr.data-automation-id]="'card-mapitem-value-' + property.key">
|
||||
<span *ngIf="!property.isEmpty(); else elseEmptyValueBlock">{{ property.displayValue }}</span>
|
||||
</span>
|
||||
<ng-template #elseBlock>
|
||||
<span class="adf-mapitem-clickable-value" (click)="clicked()" [attr.data-automation-id]="'card-mapitem-value-' + property.key">
|
||||
<span *ngIf="!property.isEmpty(); else elseEmptyValueBlock">{{ property.displayValue }}</span>
|
||||
</span>
|
||||
</ng-template>
|
||||
</div>
|
||||
<ng-template #elseEmptyValueBlock>
|
||||
{{ property.default | translate }}
|
||||
</ng-template>
|
||||
</div>
|
5
lib/core/card-view/card-view-mapitem.component.scss
Normal file
@@ -0,0 +1,5 @@
|
||||
.adf {
|
||||
&-mapitem-clickable-value {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
141
lib/core/card-view/card-view-mapitem.component.spec.ts
Normal file
@@ -0,0 +1,141 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { HttpClientModule } from '@angular/common/http';
|
||||
import { DebugElement } from '@angular/core';
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
import { MaterialModule } from '../material.module';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
|
||||
import { CardViewMapItemModel } from '../models/card-view-mapitem.model';
|
||||
import { AppConfigService } from '../app-config/app-config.service';
|
||||
import { CardViewUpdateService } from '../services/card-view-update.service';
|
||||
import { LogService } from '../services/log.service';
|
||||
import { TranslateLoaderService } from '../services/translate-loader.service';
|
||||
|
||||
import { CardViewMapItemComponent } from './card-view-mapitem.component';
|
||||
|
||||
describe('CardViewMapItemComponent', () => {
|
||||
let service: CardViewUpdateService;
|
||||
|
||||
let fixture: ComponentFixture<CardViewMapItemComponent>;
|
||||
let component: CardViewMapItemComponent;
|
||||
let debug: DebugElement;
|
||||
let element: HTMLElement;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [
|
||||
HttpClientModule,
|
||||
FormsModule,
|
||||
NoopAnimationsModule,
|
||||
MaterialModule,
|
||||
TranslateModule.forRoot({
|
||||
loader: {
|
||||
provide: TranslateLoader,
|
||||
useClass: TranslateLoaderService
|
||||
}
|
||||
})
|
||||
],
|
||||
declarations: [
|
||||
CardViewMapItemComponent
|
||||
],
|
||||
providers: [
|
||||
AppConfigService,
|
||||
CardViewUpdateService,
|
||||
LogService
|
||||
]
|
||||
}).compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(CardViewMapItemComponent);
|
||||
service = TestBed.get(CardViewUpdateService);
|
||||
component = fixture.componentInstance;
|
||||
debug = fixture.debugElement;
|
||||
element = fixture.nativeElement;
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
fixture.destroy();
|
||||
TestBed.resetTestingModule();
|
||||
});
|
||||
|
||||
it('should render the default if the value is empty', () => {
|
||||
component.property = new CardViewMapItemModel({
|
||||
label: 'Map label',
|
||||
value: null,
|
||||
key: 'mapkey',
|
||||
default: 'Fake default'
|
||||
});
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
let labelValue = debug.query(By.css('.adf-property-label'));
|
||||
expect(labelValue).not.toBeNull();
|
||||
expect(labelValue.nativeElement.innerText).toBe('Map label');
|
||||
|
||||
let value = debug.query(By.css(`[data-automation-id="card-mapitem-value-${component.property.key}"]`));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.innerText.trim()).toBe('Fake default');
|
||||
});
|
||||
|
||||
it('should render the label and value', () => {
|
||||
component.property = new CardViewMapItemModel({
|
||||
label: 'Map label',
|
||||
value: new Map([['999', 'fakeProcessName']]),
|
||||
key: 'mapkey',
|
||||
default: ''
|
||||
});
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
let labelValue = debug.query(By.css('.adf-property-label'));
|
||||
expect(labelValue).not.toBeNull();
|
||||
expect(labelValue.nativeElement.innerText).toBe('Map label');
|
||||
|
||||
let value = debug.query(By.css(`[data-automation-id="card-mapitem-value-${component.property.key}"]`));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.innerText.trim()).toBe('fakeProcessName');
|
||||
});
|
||||
|
||||
it('should render a clickable value', (done) => {
|
||||
component.property = new CardViewMapItemModel({
|
||||
label: 'Map label',
|
||||
value: new Map([['999', 'fakeProcessName']]),
|
||||
key: 'mapkey',
|
||||
default: 'Fake default',
|
||||
clickable: true
|
||||
});
|
||||
|
||||
fixture.detectChanges();
|
||||
let value: any = element.querySelector('.adf-mapitem-clickable-value');
|
||||
|
||||
service.itemClicked$.subscribe((response) => {
|
||||
expect(response.target).not.toBeNull();
|
||||
expect(response.target.type).toEqual('map');
|
||||
expect(response.target.clickable).toBeTruthy();
|
||||
expect(response.target.displayValue).toEqual('fakeProcessName');
|
||||
done();
|
||||
});
|
||||
|
||||
value.click();
|
||||
});
|
||||
|
||||
});
|
41
lib/core/card-view/card-view-mapitem.component.ts
Normal file
@@ -0,0 +1,41 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Component, Input } from '@angular/core';
|
||||
import { CardViewMapItemModel } from '../models/card-view-mapitem.model';
|
||||
import { CardViewUpdateService } from '../services/card-view-update.service';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-card-view-mapitem',
|
||||
templateUrl: './card-view-mapitem.component.html',
|
||||
styleUrls: ['./card-view-mapitem.component.scss']
|
||||
})
|
||||
|
||||
export class CardViewMapItemComponent {
|
||||
@Input()
|
||||
property: CardViewMapItemModel;
|
||||
|
||||
constructor(private cardViewUpdateService: CardViewUpdateService) {}
|
||||
|
||||
isClickable() {
|
||||
return this.property.clickable;
|
||||
}
|
||||
|
||||
clicked(): void {
|
||||
this.cardViewUpdateService.clicked(this.property);
|
||||
}
|
||||
}
|
51
lib/core/card-view/card-view-textitem.component.html
Normal file
@@ -0,0 +1,51 @@
|
||||
<div class="adf-property-label">{{ property.label | translate }}</div>
|
||||
<div class="adf-property-value">
|
||||
<span *ngIf="!isEditble()">
|
||||
<span *ngIf="!isClickable(); else elseBlock" [attr.data-automation-id]="'card-textitem-value-' + property.key">
|
||||
<span *ngIf="!property.isEmpty(); else elseEmptyValueBlock">{{ property.displayValue }}</span>
|
||||
</span>
|
||||
<ng-template #elseBlock>
|
||||
<span class="adf-textitem-clickable-value" (click)="clicked()" [attr.data-automation-id]="'card-textitem-value-' + property.key">
|
||||
<span *ngIf="!property.isEmpty(); else elseEmptyValueBlock">{{ property.displayValue }}</span>
|
||||
</span>
|
||||
</ng-template>
|
||||
</span>
|
||||
<span *ngIf="isEditble()">
|
||||
<div *ngIf="!inEdit" (click)="setEditMode(true)" class="adf-textitem-readonly" [attr.data-automation-id]="'card-textitem-edit-toggle-' + property.key">
|
||||
<span [attr.data-automation-id]="'card-textitem-value-' + property.key">
|
||||
<span *ngIf="!property.isEmpty(); else elseEmptyValueBlock">{{ property.displayValue }}</span>
|
||||
</span>
|
||||
<mat-icon [attr.data-automation-id]="'card-textitem-edit-icon-' + property.key" class="adf-textitem-icon">create</mat-icon>
|
||||
</div>
|
||||
<div *ngIf="inEdit" class="adf-textitem-editable">
|
||||
<mat-form-field floatPlaceholder="never" class="adf-input-container">
|
||||
<input *ngIf="!property.multiline" #editorInput
|
||||
matInput
|
||||
class="adf-input"
|
||||
[placeholder]="property.default | translate"
|
||||
[(ngModel)]="editedValue"
|
||||
[attr.data-automation-id]="'card-textitem-editinput-' + property.key">
|
||||
<textarea *ngIf="property.multiline" #editorInput
|
||||
matInput
|
||||
matTextareaAutosize
|
||||
matAutosizeMaxRows="1"
|
||||
matAutosizeMaxRows="5"
|
||||
class="adf-textarea"
|
||||
[placeholder]="property.default | translate"
|
||||
[(ngModel)]="editedValue"
|
||||
[attr.data-automation-id]="'card-textitem-edittextarea-' + property.key"></textarea>
|
||||
</mat-form-field>
|
||||
<mat-icon
|
||||
class="adf-textitem-icon adf-update-icon"
|
||||
(click)="update()"
|
||||
[attr.data-automation-id]="'card-textitem-update-' + property.key">done</mat-icon>
|
||||
<mat-icon
|
||||
class="adf-textitem-icon adf-reset-icon"
|
||||
(click)="reset()"
|
||||
[attr.data-automation-id]="'card-textitem-reset-' + property.key">clear</mat-icon>
|
||||
</div>
|
||||
</span>
|
||||
<ng-template #elseEmptyValueBlock>
|
||||
{{ property.default | translate }}
|
||||
</ng-template>
|
||||
</div>
|
92
lib/core/card-view/card-view-textitem.component.scss
Normal file
@@ -0,0 +1,92 @@
|
||||
@mixin adf-card-view-textitem-theme($theme) {
|
||||
|
||||
.adf {
|
||||
&-textitem-icon {
|
||||
font-size: 16px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
position: relative;
|
||||
top: 3px;
|
||||
padding-left: 8px;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
&-update-icon {
|
||||
padding-left: 13px;
|
||||
}
|
||||
|
||||
&-textitem-readonly {
|
||||
cursor: pointer;
|
||||
|
||||
&:hover mat-icon {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
&-textitem-clickable-value {
|
||||
cursor: pointer;
|
||||
color: mat-color($primary);
|
||||
}
|
||||
|
||||
&-textitem-editable {
|
||||
display: flex;
|
||||
|
||||
mat-icon:hover {
|
||||
opacity: 1;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
mat-form-field {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
input:focus,
|
||||
textarea:focus {
|
||||
border: 1px solid #EEE;
|
||||
}
|
||||
}
|
||||
|
||||
&-textitem-editable .mat-input-wrapper {
|
||||
margin: 0;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
&-textitem-editable .mat-input-underline {
|
||||
display: none;
|
||||
}
|
||||
|
||||
&-textitem-editable .mat-input-infix {
|
||||
padding: 0;
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
&-textitem-editable .mat-input-placeholder-wrapper {
|
||||
padding-top: 2em;
|
||||
position: static;
|
||||
}
|
||||
|
||||
&-textitem-editable .mat-input-placeholder {
|
||||
top: 0;
|
||||
}
|
||||
|
||||
&-textitem-editable .mat-input-element {
|
||||
font-family: inherit;
|
||||
position: relative;
|
||||
padding-top: 3px;
|
||||
}
|
||||
|
||||
&-textitem-editable .mat-input-element:focus {
|
||||
padding: 5px;
|
||||
left: -6px;
|
||||
top: -6px;
|
||||
}
|
||||
|
||||
&-textitem-editable input.mat-input-element {
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
&-textitem-editable input.mat-input-element:focus {
|
||||
margin-bottom: -8px;
|
||||
}
|
||||
}
|
||||
}
|
218
lib/core/card-view/card-view-textitem.component.spec.ts
Normal file
@@ -0,0 +1,218 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { HttpClientModule } from '@angular/common/http';
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
import { MatDatepickerModule, MatIconModule, MatInputModule, MatNativeDateModule } from '@angular/material';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
|
||||
import { CardViewTextItemModel } from '../models/card-view-textitem.model';
|
||||
import { AppConfigService } from '../app-config/app-config.service';
|
||||
import { CardViewUpdateService } from '../services/card-view-update.service';
|
||||
import { LogService } from '../services/log.service';
|
||||
import { TranslateLoaderService } from '../services/translate-loader.service';
|
||||
|
||||
import { CardViewTextItemComponent } from './card-view-textitem.component';
|
||||
|
||||
describe('CardViewTextItemComponent', () => {
|
||||
|
||||
let fixture: ComponentFixture<CardViewTextItemComponent>;
|
||||
let component: CardViewTextItemComponent;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [
|
||||
HttpClientModule,
|
||||
FormsModule,
|
||||
NoopAnimationsModule,
|
||||
MatDatepickerModule,
|
||||
MatIconModule,
|
||||
MatInputModule,
|
||||
MatNativeDateModule,
|
||||
TranslateModule.forRoot({
|
||||
loader: {
|
||||
provide: TranslateLoader,
|
||||
useClass: TranslateLoaderService
|
||||
}
|
||||
})
|
||||
],
|
||||
declarations: [
|
||||
CardViewTextItemComponent
|
||||
],
|
||||
providers: [
|
||||
AppConfigService,
|
||||
CardViewUpdateService,
|
||||
LogService
|
||||
]
|
||||
}).compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(CardViewTextItemComponent);
|
||||
component = fixture.componentInstance;
|
||||
component.property = new CardViewTextItemModel ({
|
||||
label: 'Text label',
|
||||
value: 'Lorem ipsum',
|
||||
key: 'textkey',
|
||||
default: 'FAKE-DEFAULT-KEY',
|
||||
editable: false
|
||||
});
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
fixture.destroy();
|
||||
TestBed.resetTestingModule();
|
||||
});
|
||||
|
||||
it('should render the label and value', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
let labelValue = fixture.debugElement.query(By.css('.adf-property-label'));
|
||||
expect(labelValue).not.toBeNull();
|
||||
expect(labelValue.nativeElement.innerText).toBe('Text label');
|
||||
|
||||
let value = fixture.debugElement.query(By.css(`[data-automation-id="card-textitem-value-${component.property.key}"]`));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.innerText.trim()).toBe('Lorem ipsum');
|
||||
});
|
||||
|
||||
it('should render the default as value if the value is empty and editable false', () => {
|
||||
component.property = new CardViewTextItemModel ({
|
||||
label: 'Text label',
|
||||
value: '',
|
||||
key: 'textkey',
|
||||
default: 'FAKE-DEFAULT-KEY',
|
||||
editable: false
|
||||
});
|
||||
fixture.detectChanges();
|
||||
|
||||
let value = fixture.debugElement.query(By.css(`[data-automation-id="card-textitem-value-${component.property.key}"]`));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.innerText.trim()).toBe('FAKE-DEFAULT-KEY');
|
||||
});
|
||||
|
||||
it('should render the default as value if the value is empty and editable true', () => {
|
||||
component.property = new CardViewTextItemModel ({
|
||||
label: 'Text label',
|
||||
value: '',
|
||||
key: 'textkey',
|
||||
default: 'FAKE-DEFAULT-KEY',
|
||||
editable: true
|
||||
});
|
||||
fixture.detectChanges();
|
||||
|
||||
let value = fixture.debugElement.query(By.css(`[data-automation-id="card-textitem-value-${component.property.key}"]`));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.innerText.trim()).toBe('FAKE-DEFAULT-KEY');
|
||||
});
|
||||
|
||||
it('should render the default as value if the value is empty and clickable false', () => {
|
||||
component.property = new CardViewTextItemModel ({
|
||||
label: 'Text label',
|
||||
value: '',
|
||||
key: 'textkey',
|
||||
default: 'FAKE-DEFAULT-KEY',
|
||||
clickable: false
|
||||
});
|
||||
fixture.detectChanges();
|
||||
|
||||
let value = fixture.debugElement.query(By.css(`[data-automation-id="card-textitem-value-${component.property.key}"]`));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.innerText.trim()).toBe('FAKE-DEFAULT-KEY');
|
||||
});
|
||||
|
||||
it('should render the default as value if the value is empty and clickable true', () => {
|
||||
component.property = new CardViewTextItemModel ({
|
||||
label: 'Text label',
|
||||
value: '',
|
||||
key: 'textkey',
|
||||
default: 'FAKE-DEFAULT-KEY',
|
||||
clickable: true
|
||||
});
|
||||
fixture.detectChanges();
|
||||
|
||||
let value = fixture.debugElement.query(By.css(`[data-automation-id="card-textitem-value-${component.property.key}"]`));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.innerText.trim()).toBe('FAKE-DEFAULT-KEY');
|
||||
});
|
||||
|
||||
it('should render value when editable:true', () => {
|
||||
component.editable = true;
|
||||
component.property.editable = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
let value = fixture.debugElement.query(By.css(`[data-automation-id="card-textitem-value-${component.property.key}"]`));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.innerText.trim()).toBe('Lorem ipsum');
|
||||
});
|
||||
|
||||
it('should render the edit icon in case of editable:true', () => {
|
||||
component.editable = true;
|
||||
component.property.editable = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
let editIcon = fixture.debugElement.query(By.css(`[data-automation-id="card-textitem-edit-icon-${component.property.key}"]`));
|
||||
expect(editIcon).not.toBeNull('Edit icon should be shown');
|
||||
});
|
||||
|
||||
it('should NOT render the edit icon in case of editable:false', () => {
|
||||
component.editable = false;
|
||||
fixture.detectChanges();
|
||||
|
||||
let editIcon = fixture.debugElement.query(By.css(`[data-automation-id="card-textitem-edit-icon-${component.property.key}"]`));
|
||||
expect(editIcon).toBeNull('Edit icon should NOT be shown');
|
||||
});
|
||||
|
||||
it('should NOT render the picker and toggle in case of editable:true but (general) editable:false', () => {
|
||||
component.editable = false;
|
||||
component.property.editable = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
let editIcon = fixture.debugElement.query(By.css(`[data-automation-id="card-textitem-edit-icon-${component.property.key}"]`));
|
||||
expect(editIcon).toBeNull('Edit icon should NOT be shown');
|
||||
});
|
||||
|
||||
it('should trigger an update event on the CardViewUpdateService', (done) => {
|
||||
component.editable = true;
|
||||
component.property.editable = true;
|
||||
const cardViewUpdateService = TestBed.get(CardViewUpdateService);
|
||||
const expectedText = 'changed text';
|
||||
fixture.detectChanges();
|
||||
|
||||
cardViewUpdateService.itemUpdated$.subscribe(
|
||||
(updateNotification) => {
|
||||
expect(updateNotification.target).toBe(component.property);
|
||||
expect(updateNotification.changed).toEqual({ textkey: expectedText });
|
||||
done();
|
||||
}
|
||||
);
|
||||
|
||||
let editIcon = fixture.debugElement.query(By.css(`[data-automation-id="card-textitem-edit-toggle-${component.property.key}"]`));
|
||||
editIcon.triggerEventHandler('click', null);
|
||||
fixture.detectChanges();
|
||||
|
||||
let editInput = fixture.debugElement.query(By.css(`[data-automation-id="card-textitem-editinput-${component.property.key}"]`));
|
||||
editInput.nativeElement.value = expectedText;
|
||||
editInput.nativeElement.dispatchEvent(new Event('input'));
|
||||
fixture.detectChanges();
|
||||
|
||||
let updateInput = fixture.debugElement.query(By.css(`[data-automation-id="card-textitem-update-${component.property.key}"]`));
|
||||
updateInput.triggerEventHandler('click', null);
|
||||
});
|
||||
});
|
73
lib/core/card-view/card-view-textitem.component.ts
Normal file
@@ -0,0 +1,73 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Component, Input, OnChanges, ViewChild } from '@angular/core';
|
||||
import { CardViewTextItemModel } from '../models/card-view-textitem.model';
|
||||
import { CardViewUpdateService } from '../services/card-view-update.service';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-card-view-textitem',
|
||||
templateUrl: './card-view-textitem.component.html',
|
||||
styleUrls: ['./card-view-textitem.component.scss']
|
||||
})
|
||||
export class CardViewTextItemComponent implements OnChanges {
|
||||
@Input()
|
||||
property: CardViewTextItemModel;
|
||||
|
||||
@Input()
|
||||
editable: boolean;
|
||||
|
||||
@ViewChild('editorInput')
|
||||
private editorInput: any;
|
||||
|
||||
inEdit: boolean = false;
|
||||
editedValue: string;
|
||||
|
||||
constructor(private cardViewUpdateService: CardViewUpdateService) {}
|
||||
|
||||
ngOnChanges() {
|
||||
this.editedValue = this.property.value;
|
||||
}
|
||||
|
||||
isEditble() {
|
||||
return this.editable && this.property.editable;
|
||||
}
|
||||
|
||||
isClickable() {
|
||||
return this.property.clickable;
|
||||
}
|
||||
|
||||
setEditMode(editStatus: boolean): void {
|
||||
this.inEdit = editStatus;
|
||||
setTimeout(() => {
|
||||
this.editorInput.nativeElement.click();
|
||||
}, 0);
|
||||
}
|
||||
|
||||
reset(): void {
|
||||
this.editedValue = this.property.value;
|
||||
this.setEditMode(false);
|
||||
}
|
||||
|
||||
update(): void {
|
||||
this.cardViewUpdateService.update(this.property, { [this.property.key]: this.editedValue });
|
||||
}
|
||||
|
||||
clicked(): void {
|
||||
this.cardViewUpdateService.clicked(this.property);
|
||||
}
|
||||
}
|
7
lib/core/card-view/card-view.component.html
Normal file
@@ -0,0 +1,7 @@
|
||||
<div class="adf-property-list">
|
||||
<ng-container *ngFor="let property of properties">
|
||||
<div [attr.data-automation-id]="'header-'+property.key" class="adf-property">
|
||||
<adf-card-view-item-dispatcher [property]="property" [editable]="editable"></adf-card-view-item-dispatcher>
|
||||
</div>
|
||||
</ng-container>
|
||||
</div>
|
34
lib/core/card-view/card-view.component.scss
Normal file
@@ -0,0 +1,34 @@
|
||||
|
||||
@mixin adf-card-view-theme($theme) {
|
||||
|
||||
.adf {
|
||||
&-property-list {
|
||||
display: table;
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
&-property {
|
||||
display: table-row;
|
||||
}
|
||||
|
||||
&-property &-property-label {
|
||||
display: table-cell;
|
||||
min-width: 100px;
|
||||
padding-right: 30px;
|
||||
word-wrap: break-word;
|
||||
color: rgb(186, 186, 186);;
|
||||
vertical-align: top;
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
|
||||
&-property &-property-value {
|
||||
width: 100%;
|
||||
display: table-cell;
|
||||
color: rgb(101, 101, 101);
|
||||
vertical-align: top;
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
}
|
||||
}
|
158
lib/core/card-view/card-view.component.spec.ts
Normal file
@@ -0,0 +1,158 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { HttpClientModule } from '@angular/common/http';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
import { MatDatepickerModule, MatIconModule, MatInputModule, MatNativeDateModule } from '@angular/material';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/testing';
|
||||
|
||||
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
|
||||
import { AppConfigService } from '../app-config/app-config.service';
|
||||
|
||||
import { CardViewDateItemModel } from '../models/card-view-dateitem.model';
|
||||
import { CardViewTextItemModel } from '../models/card-view-textitem.model';
|
||||
import { CardViewUpdateService } from '../services/card-view-update.service';
|
||||
|
||||
import { TranslateLoaderService } from '../services/translate-loader.service';
|
||||
import { CardViewContentProxyDirective } from './card-view-content-proxy.directive';
|
||||
import { CardViewDateItemComponent } from './card-view-dateitem.component';
|
||||
import { CardViewItemDispatcherComponent } from './card-view-item-dispatcher.component';
|
||||
import { CardViewTextItemComponent } from './card-view-textitem.component';
|
||||
import { CardViewComponent } from './card-view.component';
|
||||
|
||||
describe('AdfCardView', () => {
|
||||
|
||||
let fixture: ComponentFixture<CardViewComponent>;
|
||||
let component: CardViewComponent;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [
|
||||
HttpClientModule,
|
||||
MatDatepickerModule,
|
||||
MatIconModule,
|
||||
MatInputModule,
|
||||
MatNativeDateModule,
|
||||
FormsModule,
|
||||
TranslateModule.forRoot({
|
||||
loader: {
|
||||
provide: TranslateLoader,
|
||||
useClass: TranslateLoaderService
|
||||
}
|
||||
})
|
||||
],
|
||||
declarations: [
|
||||
CardViewComponent,
|
||||
CardViewItemDispatcherComponent,
|
||||
CardViewContentProxyDirective,
|
||||
CardViewTextItemComponent,
|
||||
CardViewDateItemComponent
|
||||
],
|
||||
providers: [
|
||||
CardViewUpdateService,
|
||||
AppConfigService
|
||||
]
|
||||
});
|
||||
|
||||
// entryComponents are not supported yet on TestBed, that is why this ugly workaround:
|
||||
// https://github.com/angular/angular/issues/10760
|
||||
TestBed.overrideModule(BrowserDynamicTestingModule, {
|
||||
set: { entryComponents: [ CardViewTextItemComponent, CardViewDateItemComponent ] }
|
||||
});
|
||||
|
||||
TestBed.compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(CardViewComponent);
|
||||
component = fixture.componentInstance;
|
||||
});
|
||||
|
||||
it('should render the label and value', async(() => {
|
||||
component.properties = [new CardViewTextItemModel({label: 'My label', value: 'My value', key: 'some key'})];
|
||||
fixture.detectChanges();
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
|
||||
let labelValue = fixture.debugElement.query(By.css('.adf-property-label'));
|
||||
expect(labelValue).not.toBeNull();
|
||||
expect(labelValue.nativeElement.innerText).toBe('My label');
|
||||
|
||||
let value = fixture.debugElement.query(By.css('.adf-property-value'));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.innerText).toBe('My value');
|
||||
});
|
||||
}));
|
||||
|
||||
it('should pass through editable property to the items', () => {
|
||||
component.editable = true;
|
||||
component.properties = [new CardViewDateItemModel({
|
||||
label: 'My date label',
|
||||
value: '2017-06-14',
|
||||
key: 'some-key',
|
||||
editable: true
|
||||
})];
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
let datePicker = fixture.debugElement.query(By.css(`[data-automation-id="datepicker-some-key"]`));
|
||||
expect(datePicker).not.toBeNull('Datepicker should be in DOM');
|
||||
});
|
||||
|
||||
it('should render the date in the correct format', async(() => {
|
||||
component.properties = [new CardViewDateItemModel({
|
||||
label: 'My date label', value: '2017-06-14', key: 'some key',
|
||||
format: 'MMM DD YYYY'
|
||||
})];
|
||||
fixture.detectChanges();
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
|
||||
let labelValue = fixture.debugElement.query(By.css('.adf-property-label'));
|
||||
expect(labelValue).not.toBeNull();
|
||||
expect(labelValue.nativeElement.innerText).toBe('My date label');
|
||||
|
||||
let value = fixture.debugElement.query(By.css('.adf-property-value'));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.innerText).toBe('Jun 14 2017');
|
||||
});
|
||||
}));
|
||||
|
||||
it('should render the default value if the value is empty', async(() => {
|
||||
component.properties = [new CardViewTextItemModel({
|
||||
label: 'My default label',
|
||||
value: null,
|
||||
default: 'default value',
|
||||
key: 'some key'
|
||||
})];
|
||||
fixture.detectChanges();
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
|
||||
let labelValue = fixture.debugElement.query(By.css('.adf-property-label'));
|
||||
expect(labelValue).not.toBeNull();
|
||||
expect(labelValue.nativeElement.innerText).toBe('My default label');
|
||||
|
||||
let value = fixture.debugElement.query(By.css('.adf-property-value'));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.innerText).toBe('default value');
|
||||
});
|
||||
}));
|
||||
});
|
32
lib/core/card-view/card-view.component.ts
Normal file
@@ -0,0 +1,32 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Component, Input } from '@angular/core';
|
||||
import { CardViewItem } from '../interface/card-view-item.interface';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-card-view',
|
||||
templateUrl: './card-view.component.html',
|
||||
styleUrls: ['./card-view.component.scss']
|
||||
})
|
||||
export class CardViewComponent {
|
||||
@Input()
|
||||
properties: CardViewItem [];
|
||||
|
||||
@Input()
|
||||
editable: boolean;
|
||||
}
|
62
lib/core/card-view/card-view.module.ts
Normal file
@@ -0,0 +1,62 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { NgModule } from '@angular/core';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
import { MatButtonModule, MatDatepickerModule, MatIconModule, MatInputModule, MatNativeDateModule } from '@angular/material';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
import { CardViewContentProxyDirective } from './card-view-content-proxy.directive';
|
||||
import { CardViewDateItemComponent } from './card-view-dateitem.component';
|
||||
import { CardViewItemDispatcherComponent } from './card-view-item-dispatcher.component';
|
||||
import { CardViewMapItemComponent } from './card-view-mapitem.component';
|
||||
import { CardViewTextItemComponent } from './card-view-textitem.component';
|
||||
import { CardViewComponent } from './card-view.component';
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
CommonModule,
|
||||
MatDatepickerModule,
|
||||
MatNativeDateModule,
|
||||
MatInputModule,
|
||||
MatIconModule,
|
||||
MatButtonModule,
|
||||
FormsModule,
|
||||
TranslateModule
|
||||
],
|
||||
declarations: [
|
||||
CardViewComponent,
|
||||
CardViewItemDispatcherComponent,
|
||||
CardViewContentProxyDirective,
|
||||
CardViewTextItemComponent,
|
||||
CardViewMapItemComponent,
|
||||
CardViewDateItemComponent
|
||||
],
|
||||
entryComponents: [
|
||||
CardViewTextItemComponent,
|
||||
CardViewMapItemComponent,
|
||||
CardViewDateItemComponent
|
||||
],
|
||||
exports: [
|
||||
CardViewComponent,
|
||||
CardViewTextItemComponent,
|
||||
CardViewMapItemComponent,
|
||||
CardViewDateItemComponent
|
||||
]
|
||||
})
|
||||
export class CardViewModule {}
|
18
lib/core/card-view/index.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
export * from './public-api';
|
25
lib/core/card-view/public-api.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
export * from './card-view-content-proxy.directive';
|
||||
export * from './card-view-dateitem.component';
|
||||
export * from './card-view-item-dispatcher.component';
|
||||
export * from './card-view-mapitem.component';
|
||||
export * from './card-view-textitem.component';
|
||||
export * from './card-view.component';
|
||||
|
||||
export * from './card-view.module';
|
20
lib/core/collapsable/accordion-group.component.html
Normal file
@@ -0,0 +1,20 @@
|
||||
<div class="adf-panel adf-panel-default" [ngClass]="{'adf-panel-open': isOpen}">
|
||||
<div class="adf-panel-heading" [ngClass]="{'adf-panel-heading-selected': isSelected}" (click)="toggleOpen($event)">
|
||||
<div id="heading-icon" *ngIf="hasHeadingIcon()" class="adf-panel-heading-icon">
|
||||
<mat-icon class="material-icons"
|
||||
[matTooltip]="headingIconTooltip"
|
||||
[matTooltipDisabled]="!headingIconTooltip">
|
||||
{{headingIcon}}
|
||||
</mat-icon>
|
||||
</div>
|
||||
<div id="heading-text" class="adf-panel-heading-text">{{heading}}</div>
|
||||
<div id="accordion-button" *ngIf="hasAccordionIcon" class="adf-panel-heading-toggle">
|
||||
<i class="material-icons">{{getAccordionIcon()}}</i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="adf-panel-collapse" [hidden]="!isOpen">
|
||||
<div class="adf-panel-body" #contentWrapper>
|
||||
<ng-content></ng-content>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
43
lib/core/collapsable/accordion-group.component.scss
Normal file
@@ -0,0 +1,43 @@
|
||||
@mixin adf-accordion-theme($theme) {
|
||||
$primary: map-get($theme, primary);
|
||||
|
||||
.adf-panel-heading {
|
||||
float: left;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
font-style: normal;
|
||||
font-stretch: normal;
|
||||
line-height: normal;
|
||||
letter-spacing: normal;
|
||||
text-align: left;
|
||||
width: 100%;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.adf-panel-heading-selected {
|
||||
color: mat-color($primary);
|
||||
}
|
||||
|
||||
.adf-panel-heading-icon {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.adf-panel-body {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.adf-panel-heading-text {
|
||||
float: left;
|
||||
padding-left: 20px;
|
||||
padding-top: 4px;
|
||||
}
|
||||
|
||||
.adf-panel-heading-toggle {
|
||||
float: right;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.adf-panel-heading-toggle:hover {
|
||||
opacity: 0.4;
|
||||
}
|
||||
}
|
118
lib/core/collapsable/accordion-group.component.spec.ts
Normal file
@@ -0,0 +1,118 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { AccordionGroupComponent } from './accordion-group.component';
|
||||
import { AccordionComponent } from './accordion.component';
|
||||
import { MaterialModule } from '../material.module';
|
||||
|
||||
describe('AccordionGroupComponent', () => {
|
||||
|
||||
let fixture: ComponentFixture<AccordionGroupComponent>;
|
||||
let component: AccordionGroupComponent;
|
||||
let element: any;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [
|
||||
MaterialModule
|
||||
],
|
||||
declarations: [
|
||||
AccordionGroupComponent
|
||||
],
|
||||
providers: [AccordionComponent]
|
||||
}).compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(AccordionGroupComponent);
|
||||
|
||||
element = fixture.nativeElement;
|
||||
component = fixture.componentInstance;
|
||||
|
||||
});
|
||||
|
||||
it('should be closed by default', () => {
|
||||
component.heading = 'Fake Header';
|
||||
component.headingIcon = 'fake-icon';
|
||||
component.contentWrapper.nativeElement.innerHTML = '<a>Test</a>';
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
let headerText = element.querySelector('#heading-text');
|
||||
expect(headerText.innerText).toEqual('Fake Header');
|
||||
let headerIcon = element.querySelector('#heading-icon .material-icons');
|
||||
expect(headerIcon.innerText).toEqual('fake-icon');
|
||||
let headerToggle = element.querySelector('#accordion-button .material-icons');
|
||||
expect(headerToggle.innerText).toEqual('expand_more');
|
||||
});
|
||||
});
|
||||
|
||||
it('should be open when click', () => {
|
||||
component.isSelected = true;
|
||||
component.heading = 'Fake Header';
|
||||
component.headingIcon = 'fake-icon';
|
||||
component.contentWrapper.nativeElement.innerHTML = '<a>Test</a>';
|
||||
fixture.detectChanges();
|
||||
element.querySelector('#accordion-button').click();
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
let headerText = element.querySelector('#heading-text');
|
||||
expect(headerText.innerText).toEqual('Fake Header');
|
||||
let headerIcon = element.querySelector('#heading-icon .material-icons');
|
||||
expect(headerIcon.innerText).toEqual('fake-icon');
|
||||
let headerToggle = element.querySelector('#accordion-button .material-icons');
|
||||
expect(headerToggle.innerText).toEqual('expand_less');
|
||||
});
|
||||
});
|
||||
|
||||
it('should show expand icon by default', () => {
|
||||
component.heading = 'Fake Header';
|
||||
component.headingIcon = 'fake-icon';
|
||||
component.contentWrapper.nativeElement.innerHTML = '<a>Test</a>';
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
let headerIcon = element.querySelector('#accordion-button');
|
||||
expect(headerIcon).toBeDefined();
|
||||
});
|
||||
});
|
||||
|
||||
it('should hide expand icon', () => {
|
||||
component.heading = 'Fake Header';
|
||||
component.headingIcon = 'fake-icon';
|
||||
component.hasAccordionIcon = false;
|
||||
component.contentWrapper.nativeElement.innerHTML = '<a>Test</a>';
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
let headerIcon = element.querySelector('#accordion-button');
|
||||
expect(headerIcon).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
it('should emit an event when a heading clicked', (done) => {
|
||||
component.heading = 'Fake Header';
|
||||
fixture.detectChanges();
|
||||
let heading: string = component.heading;
|
||||
component.headingClick.subscribe((headName: string) => {
|
||||
expect(headName).toBeDefined();
|
||||
expect(headName).toEqual(heading);
|
||||
done();
|
||||
});
|
||||
let header = element.querySelector('.adf-panel-heading');
|
||||
header.click();
|
||||
});
|
||||
|
||||
});
|
92
lib/core/collapsable/accordion-group.component.ts
Normal file
@@ -0,0 +1,92 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Component, EventEmitter, Input, OnDestroy, Output, ViewChild, ViewEncapsulation } from '@angular/core';
|
||||
import { AccordionComponent } from './accordion.component';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-accordion-group',
|
||||
templateUrl: 'accordion-group.component.html',
|
||||
styleUrls: ['./accordion-group.component.scss'],
|
||||
encapsulation: ViewEncapsulation.None
|
||||
})
|
||||
export class AccordionGroupComponent implements OnDestroy {
|
||||
private _isOpen: boolean = false;
|
||||
private _isSelected: boolean = false;
|
||||
|
||||
@ViewChild('contentWrapper')
|
||||
contentWrapper: any;
|
||||
|
||||
@Input()
|
||||
heading: string;
|
||||
|
||||
@Input()
|
||||
headingIcon: string;
|
||||
|
||||
@Input()
|
||||
headingIconTooltip: string;
|
||||
|
||||
@Input()
|
||||
hasAccordionIcon: boolean = true;
|
||||
|
||||
@Output()
|
||||
headingClick: EventEmitter<any> = new EventEmitter<any>();
|
||||
|
||||
@Input()
|
||||
set isOpen(value: boolean) {
|
||||
this._isOpen = value;
|
||||
if (value) {
|
||||
this.accordion.closeOthers(this);
|
||||
}
|
||||
}
|
||||
|
||||
get isOpen() {
|
||||
return this._isOpen;
|
||||
}
|
||||
|
||||
@Input()
|
||||
set isSelected(value: boolean) {
|
||||
this._isSelected = value;
|
||||
}
|
||||
|
||||
get isSelected() {
|
||||
return this._isSelected;
|
||||
}
|
||||
|
||||
constructor(private accordion: AccordionComponent) {
|
||||
this.accordion.addGroup(this);
|
||||
}
|
||||
|
||||
ngOnDestroy() {
|
||||
this.accordion.removeGroup(this);
|
||||
}
|
||||
|
||||
hasHeadingIcon() {
|
||||
return this.headingIcon ? true : false;
|
||||
}
|
||||
|
||||
toggleOpen(event: MouseEvent): void {
|
||||
event.preventDefault();
|
||||
this.isOpen = !this.isOpen;
|
||||
this.headingClick.emit(this.heading);
|
||||
}
|
||||
|
||||
getAccordionIcon(): string {
|
||||
return this.isOpen ? 'expand_less' : 'expand_more';
|
||||
}
|
||||
|
||||
}
|
81
lib/core/collapsable/accordion.component.spec.ts
Normal file
@@ -0,0 +1,81 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { AccordionGroupComponent } from './accordion-group.component';
|
||||
import { AccordionComponent } from './accordion.component';
|
||||
|
||||
describe('AccordionComponent', () => {
|
||||
|
||||
let fixture: ComponentFixture<AccordionComponent>;
|
||||
let component: AccordionComponent;
|
||||
let componentGroup1: AccordionGroupComponent;
|
||||
let componentGroup2: AccordionGroupComponent;
|
||||
let componentGroup3: AccordionGroupComponent;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [
|
||||
AccordionComponent
|
||||
]
|
||||
}).compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(AccordionComponent);
|
||||
component = fixture.componentInstance;
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
component.groups = [];
|
||||
});
|
||||
|
||||
it('should create the component', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should add the AccordionGroup', () => {
|
||||
component.addGroup(componentGroup1);
|
||||
expect(component.groups.length).toBe(1);
|
||||
});
|
||||
|
||||
it('should close all the other group', () => {
|
||||
componentGroup1 = new AccordionGroupComponent(component);
|
||||
componentGroup2 = new AccordionGroupComponent(component);
|
||||
componentGroup3 = new AccordionGroupComponent(component);
|
||||
componentGroup1.isOpen = false;
|
||||
componentGroup2.isOpen = true;
|
||||
componentGroup3.isOpen = false;
|
||||
|
||||
expect(component.groups[0].isOpen).toBeFalsy();
|
||||
expect(component.groups[1].isOpen).toBeTruthy();
|
||||
expect(component.groups[2].isOpen).toBeFalsy();
|
||||
|
||||
componentGroup1.isOpen = true;
|
||||
|
||||
expect(component.groups[0].isOpen).toBeTruthy();
|
||||
expect(component.groups[1].isOpen).toBeFalsy();
|
||||
expect(component.groups[2].isOpen).toBeFalsy();
|
||||
});
|
||||
|
||||
it('should remove the AccordionGroup', () => {
|
||||
component.addGroup(componentGroup1);
|
||||
component.removeGroup(componentGroup1);
|
||||
expect(component.groups.length).toBe(0);
|
||||
});
|
||||
|
||||
});
|
52
lib/core/collapsable/accordion.component.ts
Normal file
@@ -0,0 +1,52 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Component, ViewEncapsulation } from '@angular/core';
|
||||
import { AccordionGroupComponent } from './accordion-group.component';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-accordion',
|
||||
template: `
|
||||
<ng-content></ng-content>
|
||||
`,
|
||||
host: {
|
||||
'class': 'panel-group'
|
||||
},
|
||||
encapsulation: ViewEncapsulation.None
|
||||
})
|
||||
export class AccordionComponent {
|
||||
groups: Array<AccordionGroupComponent> = [];
|
||||
|
||||
addGroup(group: AccordionGroupComponent): void {
|
||||
this.groups.push(group);
|
||||
}
|
||||
|
||||
closeOthers(openGroup: AccordionGroupComponent): void {
|
||||
this.groups.forEach((group: AccordionGroupComponent) => {
|
||||
if (group !== openGroup) {
|
||||
group.isOpen = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
removeGroup(group: AccordionGroupComponent): void {
|
||||
const index = this.groups.indexOf(group);
|
||||
if (index !== -1) {
|
||||
this.groups.splice(index, 1);
|
||||
}
|
||||
}
|
||||
}
|
39
lib/core/collapsable/collapsable.module.ts
Normal file
@@ -0,0 +1,39 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { NgModule } from '@angular/core';
|
||||
import { MaterialModule } from '../material.module';
|
||||
|
||||
import { AccordionGroupComponent } from './accordion-group.component';
|
||||
import { AccordionComponent } from './accordion.component';
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
MaterialModule,
|
||||
CommonModule
|
||||
],
|
||||
declarations: [
|
||||
AccordionComponent,
|
||||
AccordionGroupComponent
|
||||
],
|
||||
exports: [
|
||||
AccordionComponent,
|
||||
AccordionGroupComponent
|
||||
]
|
||||
})
|
||||
export class CollapsableModule {}
|
18
lib/core/collapsable/index.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
export * from './public-api';
|
21
lib/core/collapsable/public-api.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
export * from './accordion-group.component';
|
||||
export * from './accordion.component';
|
||||
|
||||
export * from './collapsable.module';
|
263
lib/core/context-menu/context-menu-holder.component.spec.ts
Normal file
@@ -0,0 +1,263 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { OverlayContainer } from '@angular/cdk/overlay';
|
||||
import { ViewportRuler } from '@angular/cdk/scrolling';
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { ContextMenuHolderComponent } from './context-menu-holder.component';
|
||||
import { ContextMenuModule } from './context-menu.module';
|
||||
import { ContextMenuService } from './context-menu.service';
|
||||
|
||||
describe('ContextMenuHolderComponent', () => {
|
||||
let fixture: ComponentFixture<ContextMenuHolderComponent>;
|
||||
let component: ContextMenuHolderComponent;
|
||||
let contextMenuService: ContextMenuService;
|
||||
let overlayContainer = {
|
||||
getContainerElement: () => ({
|
||||
addEventListener: () => {},
|
||||
querySelector: (val) => ({
|
||||
name: val,
|
||||
clientWidth: 0,
|
||||
clientHeight: 0,
|
||||
parentElement: {
|
||||
style: {
|
||||
left: 0,
|
||||
top: 0
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
})
|
||||
};
|
||||
|
||||
let getViewportRect = {
|
||||
getViewportRect: () => ({
|
||||
left: 0, top: 0, width: 1014, height: 686, bottom: 0, right: 0
|
||||
})
|
||||
};
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [
|
||||
ContextMenuModule
|
||||
],
|
||||
providers: [
|
||||
{
|
||||
provide: OverlayContainer,
|
||||
useValue: overlayContainer
|
||||
},
|
||||
{
|
||||
provide: ViewportRuler,
|
||||
useValue: getViewportRect
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
fixture = TestBed.createComponent(ContextMenuHolderComponent);
|
||||
component = fixture.componentInstance;
|
||||
contextMenuService = TestBed.get(ContextMenuService);
|
||||
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
spyOn(component.menuTrigger, 'openMenu');
|
||||
});
|
||||
|
||||
describe('Events', () => {
|
||||
it('should show menu on service event', () => {
|
||||
spyOn(component, 'showMenu');
|
||||
|
||||
contextMenuService.show.next(<any> {});
|
||||
|
||||
expect(component.showMenu).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should set DOM element reference on menu open event', () => {
|
||||
component.menuTrigger.onMenuOpen.next();
|
||||
|
||||
expect(component.mdMenuElement.name).toBe('.context-menu');
|
||||
});
|
||||
|
||||
it('should reset DOM element reference on menu close event', () => {
|
||||
component.menuTrigger.onMenuClose.next();
|
||||
|
||||
expect(component.mdMenuElement).toBe(null);
|
||||
});
|
||||
});
|
||||
|
||||
describe('onMenuItemClick()', () => {
|
||||
const menuItem = {
|
||||
model: {
|
||||
disabled: false
|
||||
},
|
||||
subject: {
|
||||
next: (val) => val
|
||||
}
|
||||
};
|
||||
|
||||
const event = {
|
||||
preventDefault: () => null,
|
||||
stopImmediatePropagation: () => null
|
||||
};
|
||||
|
||||
beforeEach(() => {
|
||||
spyOn(menuItem.subject, 'next');
|
||||
});
|
||||
|
||||
it('should emit when link is not disabled', () => {
|
||||
component.onMenuItemClick(<any> event, menuItem);
|
||||
|
||||
expect(menuItem.subject.next).toHaveBeenCalledWith(menuItem);
|
||||
});
|
||||
|
||||
it('should not emit when link is disabled', () => {
|
||||
menuItem.model.disabled = true;
|
||||
component.onMenuItemClick(<any> event, menuItem);
|
||||
|
||||
expect(menuItem.subject.next).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
describe('showMenu()', () => {
|
||||
it('should open menu panel', () => {
|
||||
component.showMenu(<any> {}, [{}]);
|
||||
|
||||
expect(component.menuTrigger.openMenu).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
describe('Menu position', () => {
|
||||
beforeEach(() => {
|
||||
component.menuTrigger.onMenuOpen.next();
|
||||
component.mdMenuElement.clientHeight = 160;
|
||||
component.mdMenuElement.clientWidth = 200;
|
||||
});
|
||||
|
||||
it('should set position to mouse position', () => {
|
||||
const contextMenuEvent = {
|
||||
clientX: 100,
|
||||
clientY: 210
|
||||
};
|
||||
|
||||
component.showMenu(<any> contextMenuEvent, [{}]);
|
||||
|
||||
expect(component.mdMenuElement.parentElement.style).toEqual({
|
||||
left: '100px',
|
||||
top: '210px'
|
||||
});
|
||||
});
|
||||
|
||||
it('should ajust position relative to right margin of the screen', () => {
|
||||
const contextMenuEvent = {
|
||||
clientX: 1000,
|
||||
clientY: 210
|
||||
};
|
||||
|
||||
component.showMenu(<any> contextMenuEvent, [{}]);
|
||||
|
||||
expect(component.mdMenuElement.parentElement.style).toEqual({
|
||||
left: '800px',
|
||||
top: '210px'
|
||||
});
|
||||
});
|
||||
|
||||
it('should ajust position relative to bottom margin of the screen', () => {
|
||||
const contextMenuEvent = {
|
||||
clientX: 100,
|
||||
clientY: 600
|
||||
};
|
||||
|
||||
component.showMenu(<any> contextMenuEvent, [{}]);
|
||||
|
||||
expect(component.mdMenuElement.parentElement.style).toEqual({
|
||||
left: '100px',
|
||||
top: '440px'
|
||||
});
|
||||
});
|
||||
|
||||
it('should ajust position relative to bottom - right margin of the screen', () => {
|
||||
const contextMenuEvent = {
|
||||
clientX: 900,
|
||||
clientY: 610
|
||||
};
|
||||
|
||||
component.showMenu(<any> contextMenuEvent, [{}]);
|
||||
|
||||
expect(component.mdMenuElement.parentElement.style).toEqual({
|
||||
left: '700px',
|
||||
top: '450px'
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('Menu direction', () => {
|
||||
beforeEach(() => {
|
||||
component.menuTrigger.onMenuOpen.next();
|
||||
component.mdMenuElement.clientHeight = 160;
|
||||
component.mdMenuElement.clientWidth = 200;
|
||||
});
|
||||
|
||||
it('should set default menu direction', () => {
|
||||
const contextMenuEvent = {
|
||||
clientX: 100,
|
||||
clientY: 210
|
||||
};
|
||||
|
||||
component.showMenu(<any> contextMenuEvent, [{}]);
|
||||
|
||||
expect(component.menuTrigger.menu.xPosition).toBe('after');
|
||||
expect(component.menuTrigger.menu.yPosition).toBe('below');
|
||||
});
|
||||
|
||||
it('should ajust direction relative to right margin of the screen', () => {
|
||||
const contextMenuEvent = {
|
||||
clientX: 1000,
|
||||
clientY: 210
|
||||
};
|
||||
|
||||
component.showMenu(<any> contextMenuEvent, [{}]);
|
||||
|
||||
expect(component.menuTrigger.menu.xPosition).toBe('before');
|
||||
expect(component.menuTrigger.menu.yPosition).toBe('below');
|
||||
});
|
||||
|
||||
it('should ajust direction relative to bottom margin of the screen', () => {
|
||||
const contextMenuEvent = {
|
||||
clientX: 100,
|
||||
clientY: 600
|
||||
};
|
||||
|
||||
component.showMenu(<any> contextMenuEvent, [{}]);
|
||||
|
||||
expect(component.menuTrigger.menu.xPosition).toBe('after');
|
||||
expect(component.menuTrigger.menu.yPosition).toBe('above');
|
||||
});
|
||||
|
||||
it('should ajust position relative to bottom - right margin of the screen', () => {
|
||||
const contextMenuEvent = {
|
||||
clientX: 900,
|
||||
clientY: 610
|
||||
};
|
||||
|
||||
component.showMenu(<any> contextMenuEvent, [{}]);
|
||||
|
||||
expect(component.menuTrigger.menu.xPosition).toBe('before');
|
||||
expect(component.menuTrigger.menu.yPosition).toBe('above');
|
||||
});
|
||||
});
|
||||
});
|
169
lib/core/context-menu/context-menu-holder.component.ts
Normal file
@@ -0,0 +1,169 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { OverlayContainer } from '@angular/cdk/overlay';
|
||||
import { ViewportRuler } from '@angular/cdk/scrolling';
|
||||
import { Component, HostListener, Input, OnDestroy, OnInit, Renderer2, ViewChild } from '@angular/core';
|
||||
import { MatMenuTrigger } from '@angular/material';
|
||||
import { Subscription } from 'rxjs/Rx';
|
||||
import { ContextMenuService } from './context-menu.service';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-context-menu-holder, context-menu-holder',
|
||||
template: `
|
||||
<button mat-button [matMenuTriggerFor]="contextMenu"></button>
|
||||
<mat-menu #contextMenu="matMenu" class="context-menu">
|
||||
<button
|
||||
*ngFor="let link of links"
|
||||
mat-menu-item
|
||||
(click)="onMenuItemClick($event, link)"
|
||||
[attr.disabled]="link.model?.disabled || undefined">
|
||||
<mat-icon *ngIf="showIcons && link.model?.icon">
|
||||
{{ link.model?.icon }}
|
||||
</mat-icon>
|
||||
{{link.title || link.model?.title}}
|
||||
</button>
|
||||
</mat-menu>
|
||||
`
|
||||
})
|
||||
export class ContextMenuHolderComponent implements OnInit, OnDestroy {
|
||||
links = [];
|
||||
|
||||
private mouseLocation: { left: number, top: number } = {left: 0, top: 0};
|
||||
private menuElement = null;
|
||||
private openSubscription: Subscription;
|
||||
private closeSubscription: Subscription;
|
||||
private contextSubscription: Subscription;
|
||||
private contextMenuListenerFn: () => void;
|
||||
|
||||
@Input()
|
||||
showIcons: boolean = false;
|
||||
|
||||
@ViewChild(MatMenuTrigger)
|
||||
menuTrigger: MatMenuTrigger;
|
||||
|
||||
@HostListener('contextmenu', ['$event'])
|
||||
onShowContextMenu(event?: MouseEvent) {
|
||||
if (event) {
|
||||
event.preventDefault();
|
||||
}
|
||||
}
|
||||
|
||||
@HostListener('window:resize', ['$event'])
|
||||
onResize(event) {
|
||||
if (this.mdMenuElement) {
|
||||
this.setPosition();
|
||||
}
|
||||
}
|
||||
|
||||
constructor(
|
||||
private viewport: ViewportRuler,
|
||||
private overlayContainer: OverlayContainer,
|
||||
private contextMenuService: ContextMenuService,
|
||||
private renderer: Renderer2
|
||||
) {}
|
||||
|
||||
ngOnInit() {
|
||||
this.contextSubscription = this.contextMenuService.show.subscribe(e => this.showMenu(e.event, e.obj));
|
||||
|
||||
this.openSubscription = this.menuTrigger.onMenuOpen.subscribe(() => {
|
||||
const container = this.overlayContainer.getContainerElement();
|
||||
if (container) {
|
||||
this.contextMenuListenerFn = this.renderer.listen(container, 'contextmenu', (e: Event) => {
|
||||
e.preventDefault();
|
||||
});
|
||||
}
|
||||
this.menuElement = this.getContextMenuElement();
|
||||
});
|
||||
|
||||
this.closeSubscription = this.menuTrigger.onMenuClose.subscribe(() => {
|
||||
this.menuElement = null;
|
||||
if (this.contextMenuListenerFn) {
|
||||
this.contextMenuListenerFn();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
ngOnDestroy() {
|
||||
if (this.contextMenuListenerFn) {
|
||||
this.contextMenuListenerFn();
|
||||
}
|
||||
this.contextSubscription.unsubscribe();
|
||||
this.openSubscription.unsubscribe();
|
||||
this.closeSubscription.unsubscribe();
|
||||
this.menuElement = null;
|
||||
}
|
||||
|
||||
onMenuItemClick(event: Event, menuItem: any): void {
|
||||
if (menuItem && menuItem.model && menuItem.model.disabled) {
|
||||
event.preventDefault();
|
||||
event.stopImmediatePropagation();
|
||||
return;
|
||||
}
|
||||
menuItem.subject.next(menuItem);
|
||||
}
|
||||
|
||||
showMenu(e, links) {
|
||||
this.links = links;
|
||||
|
||||
if (e) {
|
||||
this.mouseLocation = {
|
||||
left: e.clientX,
|
||||
top: e.clientY
|
||||
};
|
||||
}
|
||||
|
||||
this.menuTrigger.openMenu();
|
||||
|
||||
if (this.mdMenuElement) {
|
||||
this.setPosition();
|
||||
}
|
||||
}
|
||||
|
||||
get mdMenuElement() {
|
||||
return this.menuElement;
|
||||
}
|
||||
|
||||
private locationCss() {
|
||||
return {
|
||||
left: this.mouseLocation.left + 'px',
|
||||
top: this.mouseLocation.top + 'px'
|
||||
};
|
||||
}
|
||||
|
||||
private setPosition() {
|
||||
if (this.mdMenuElement.clientWidth + this.mouseLocation.left > this.viewport.getViewportRect().width) {
|
||||
this.menuTrigger.menu.xPosition = 'before';
|
||||
this.mdMenuElement.parentElement.style.left = this.mouseLocation.left - this.mdMenuElement.clientWidth + 'px';
|
||||
} else {
|
||||
this.menuTrigger.menu.xPosition = 'after';
|
||||
this.mdMenuElement.parentElement.style.left = this.locationCss().left;
|
||||
}
|
||||
|
||||
if (this.mdMenuElement.clientHeight + this.mouseLocation.top > this.viewport.getViewportRect().height) {
|
||||
this.menuTrigger.menu.yPosition = 'above';
|
||||
this.mdMenuElement.parentElement.style.top = this.mouseLocation.top - this.mdMenuElement.clientHeight + 'px';
|
||||
} else {
|
||||
this.menuTrigger.menu.yPosition = 'below';
|
||||
this.mdMenuElement.parentElement.style.top = this.locationCss().top;
|
||||
}
|
||||
}
|
||||
|
||||
private getContextMenuElement() {
|
||||
return this.overlayContainer.getContainerElement().querySelector('.context-menu');
|
||||
}
|
||||
}
|
72
lib/core/context-menu/context-menu.directive.spec.ts
Normal file
@@ -0,0 +1,72 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { ContextMenuDirective } from './context-menu.directive';
|
||||
import { ContextMenuService } from './context-menu.service';
|
||||
|
||||
describe('ContextMenuDirective', () => {
|
||||
|
||||
let contextMenuService;
|
||||
let directive;
|
||||
|
||||
beforeEach(() => {
|
||||
contextMenuService = new ContextMenuService();
|
||||
directive = new ContextMenuDirective(contextMenuService);
|
||||
directive.enabled = true;
|
||||
});
|
||||
|
||||
it('should show menu via service', (done) => {
|
||||
contextMenuService.show.subscribe(() => {
|
||||
done();
|
||||
});
|
||||
|
||||
directive.links = [{}];
|
||||
directive.onShowContextMenu(null);
|
||||
});
|
||||
|
||||
it('should prevent default behavior', () => {
|
||||
let event = new MouseEvent('click');
|
||||
spyOn(event, 'preventDefault').and.callThrough();
|
||||
|
||||
directive.onShowContextMenu(event);
|
||||
expect(event.preventDefault).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should forward event to service', () => {
|
||||
let event = new MouseEvent('click');
|
||||
|
||||
contextMenuService.show.subscribe(e => {
|
||||
expect(e.event).toBeDefined();
|
||||
expect(e.event).toBe(event);
|
||||
});
|
||||
|
||||
directive.onShowContextMenu(event);
|
||||
});
|
||||
|
||||
it('should forward menu items to service', () => {
|
||||
let links = [{}, {}];
|
||||
directive.links = links;
|
||||
|
||||
contextMenuService.show.subscribe(e => {
|
||||
expect(e.obj).toBeDefined();
|
||||
expect(e.obj).toBe(links);
|
||||
});
|
||||
|
||||
directive.onShowContextMenu(null);
|
||||
});
|
||||
|
||||
});
|
48
lib/core/context-menu/context-menu.directive.ts
Normal file
@@ -0,0 +1,48 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Directive, HostListener, Input } from '@angular/core';
|
||||
import { ContextMenuService } from './context-menu.service';
|
||||
|
||||
@Directive({
|
||||
selector: '[adf-context-menu], [context-menu]'
|
||||
})
|
||||
export class ContextMenuDirective {
|
||||
@Input('context-menu')
|
||||
links: any[];
|
||||
|
||||
@Input('context-menu-enabled')
|
||||
enabled: boolean = false;
|
||||
|
||||
constructor(private _contextMenuService: ContextMenuService) {
|
||||
}
|
||||
|
||||
@HostListener('contextmenu', ['$event'])
|
||||
onShowContextMenu(event?: MouseEvent) {
|
||||
if (this.enabled) {
|
||||
if (event) {
|
||||
event.preventDefault();
|
||||
}
|
||||
|
||||
if (this.links && this.links.length > 0) {
|
||||
if (this._contextMenuService) {
|
||||
this._contextMenuService.show.next({event: event, obj: this.links});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
43
lib/core/context-menu/context-menu.module.ts
Normal file
@@ -0,0 +1,43 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { NgModule } from '@angular/core';
|
||||
import { MaterialModule } from '../material.module';
|
||||
|
||||
import { ContextMenuHolderComponent } from './context-menu-holder.component';
|
||||
import { ContextMenuDirective } from './context-menu.directive';
|
||||
import { ContextMenuService } from './context-menu.service';
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
CommonModule,
|
||||
MaterialModule
|
||||
],
|
||||
declarations: [
|
||||
ContextMenuHolderComponent,
|
||||
ContextMenuDirective
|
||||
],
|
||||
exports: [
|
||||
ContextMenuHolderComponent,
|
||||
ContextMenuDirective
|
||||
],
|
||||
providers: [
|
||||
ContextMenuService
|
||||
]
|
||||
})
|
||||
export class ContextMenuModule {}
|
32
lib/core/context-menu/context-menu.service.spec.ts
Normal file
@@ -0,0 +1,32 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { ContextMenuService } from './context-menu.service';
|
||||
|
||||
describe('ContextMenuService', () => {
|
||||
|
||||
let service;
|
||||
|
||||
beforeEach(() => {
|
||||
service = new ContextMenuService();
|
||||
});
|
||||
|
||||
it('should setup default show subject', () => {
|
||||
expect(service.show).toBeDefined();
|
||||
});
|
||||
|
||||
});
|
24
lib/core/context-menu/context-menu.service.ts
Normal file
@@ -0,0 +1,24 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Injectable } from '@angular/core';
|
||||
import { Subject } from 'rxjs/Rx';
|
||||
|
||||
@Injectable()
|
||||
export class ContextMenuService {
|
||||
public show: Subject<{event: MouseEvent, obj: any[]}> = new Subject<{event: MouseEvent, obj: any[]}>();
|
||||
}
|
18
lib/core/context-menu/index.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
export * from './public-api';
|
22
lib/core/context-menu/public-api.ts
Normal file
@@ -0,0 +1,22 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
export * from './context-menu-holder.component';
|
||||
export * from './context-menu.directive';
|
||||
export * from './context-menu.service';
|
||||
|
||||
export * from './context-menu.module';
|
121
lib/core/core.module.ts
Normal file
@@ -0,0 +1,121 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { HttpClient, HttpClientModule } from '@angular/common/http';
|
||||
import { NgModule } from '@angular/core';
|
||||
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
import { TRANSLATION_PROVIDER, TranslationService } from './services/translation.service';
|
||||
|
||||
import { MaterialModule } from './material.module';
|
||||
|
||||
import { AppConfigModule } from './app-config';
|
||||
import { CardViewModule } from './card-view';
|
||||
import { CollapsableModule } from './collapsable';
|
||||
import { ContextMenuModule } from './context-menu';
|
||||
import { DataColumnModule } from './data-column';
|
||||
import { DataTableModule } from './datatable';
|
||||
import { InfoDrawerModule } from './info-drawer';
|
||||
import { LanguageMenuModule } from './language-menu';
|
||||
import { LoginModule } from './login';
|
||||
import { PaginationModule } from './pagination';
|
||||
import { HostSettingsModule } from './settings';
|
||||
import { ToolbarModule } from './toolbar';
|
||||
import { UserInfoModule } from './userinfo';
|
||||
import { ViewerModule } from './viewer';
|
||||
import { FormModule } from './form';
|
||||
|
||||
import { DirectiveModule } from './directives';
|
||||
import { PipeModule } from './pipes';
|
||||
import { LogService , ServiceModule, TranslateLoaderService } from './services';
|
||||
|
||||
export function createTranslateLoader(http: HttpClient, logService: LogService) {
|
||||
return new TranslateLoaderService(http, logService);
|
||||
}
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
ViewerModule,
|
||||
PipeModule,
|
||||
CommonModule,
|
||||
DirectiveModule,
|
||||
FormsModule,
|
||||
ReactiveFormsModule,
|
||||
HttpClientModule,
|
||||
BrowserAnimationsModule,
|
||||
HostSettingsModule,
|
||||
UserInfoModule,
|
||||
MaterialModule,
|
||||
AppConfigModule,
|
||||
PaginationModule,
|
||||
ToolbarModule,
|
||||
ContextMenuModule,
|
||||
CardViewModule,
|
||||
CollapsableModule,
|
||||
ServiceModule,
|
||||
FormModule,
|
||||
TranslateModule.forRoot({
|
||||
loader: {
|
||||
provide: TranslateLoader,
|
||||
useFactory: (createTranslateLoader),
|
||||
deps: [HttpClient, LogService]
|
||||
}
|
||||
})
|
||||
],
|
||||
providers: [
|
||||
TranslationService,
|
||||
{
|
||||
provide: TRANSLATION_PROVIDER,
|
||||
multi: true,
|
||||
useValue: {
|
||||
name: '@adf/core',
|
||||
source: 'assets/@adf/core'
|
||||
}
|
||||
}
|
||||
],
|
||||
exports: [
|
||||
AppConfigModule,
|
||||
BrowserAnimationsModule,
|
||||
CommonModule,
|
||||
FormsModule,
|
||||
ReactiveFormsModule,
|
||||
HttpClientModule,
|
||||
TranslateModule,
|
||||
ContextMenuModule,
|
||||
CardViewModule,
|
||||
CollapsableModule,
|
||||
PaginationModule,
|
||||
ToolbarModule,
|
||||
LoginModule,
|
||||
UserInfoModule,
|
||||
LanguageMenuModule,
|
||||
InfoDrawerModule,
|
||||
DataColumnModule,
|
||||
DataTableModule,
|
||||
HostSettingsModule,
|
||||
ServiceModule,
|
||||
ViewerModule,
|
||||
PipeModule,
|
||||
DirectiveModule,
|
||||
FormModule
|
||||
]
|
||||
})
|
||||
export class CoreModule {
|
||||
}
|
37
lib/core/data-column/data-column-list.component.spec.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { async, TestBed } from '@angular/core/testing';
|
||||
import { DataColumnListComponent } from './data-column-list.component';
|
||||
|
||||
describe('DataColumnListComponent', () => {
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [
|
||||
DataColumnListComponent
|
||||
]
|
||||
}).compileComponents();
|
||||
}));
|
||||
|
||||
it('should create the component', () => {
|
||||
const fixture = TestBed.createComponent(DataColumnListComponent);
|
||||
const component = fixture.debugElement.componentInstance;
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
|
||||
});
|
31
lib/core/data-column/data-column-list.component.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* tslint:disable:component-selector */
|
||||
|
||||
import { Component, ContentChildren, QueryList } from '@angular/core';
|
||||
import { DataColumnComponent } from './data-column.component';
|
||||
|
||||
@Component({
|
||||
selector: 'data-columns',
|
||||
template: ''
|
||||
})
|
||||
export class DataColumnListComponent {
|
||||
|
||||
@ContentChildren(DataColumnComponent) columns: QueryList<DataColumnComponent>;
|
||||
|
||||
}
|
45
lib/core/data-column/data-column.component.spec.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { async, TestBed } from '@angular/core/testing';
|
||||
import { DataColumnComponent } from './data-column.component';
|
||||
|
||||
describe('DataColumnListComponent', () => {
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [
|
||||
DataColumnComponent
|
||||
]
|
||||
}).compileComponents();
|
||||
}));
|
||||
|
||||
it('should create the component', () => {
|
||||
const fixture = TestBed.createComponent(DataColumnComponent);
|
||||
const component = fixture.debugElement.componentInstance;
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
|
||||
it('sould setup screen reader title for thumbnails', () => {
|
||||
const component = new DataColumnComponent();
|
||||
component.key = '$thumbnail';
|
||||
expect(component.srTitle).toBeFalsy();
|
||||
component.ngOnInit();
|
||||
expect(component.srTitle).toBeTruthy();
|
||||
});
|
||||
|
||||
});
|
63
lib/core/data-column/data-column.component.ts
Normal file
@@ -0,0 +1,63 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* tslint:disable:component-selector */
|
||||
|
||||
import { Component, ContentChild, Input, OnInit, TemplateRef } from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'data-column',
|
||||
template: ''
|
||||
})
|
||||
export class DataColumnComponent implements OnInit {
|
||||
|
||||
@Input()
|
||||
key: string;
|
||||
|
||||
@Input()
|
||||
type: string = 'text';
|
||||
|
||||
@Input()
|
||||
format: string;
|
||||
|
||||
@Input()
|
||||
sortable: boolean = true;
|
||||
|
||||
@Input()
|
||||
title: string = '';
|
||||
|
||||
@ContentChild(TemplateRef)
|
||||
template: any;
|
||||
|
||||
@Input()
|
||||
formatTooltip: Function;
|
||||
|
||||
/**
|
||||
* Title to be used for screen readers.
|
||||
*/
|
||||
@Input('sr-title')
|
||||
srTitle: string;
|
||||
|
||||
@Input('class')
|
||||
cssClass: string;
|
||||
|
||||
ngOnInit() {
|
||||
if (!this.srTitle && this.key === '$thumbnail') {
|
||||
this.srTitle = 'Thumbnail';
|
||||
}
|
||||
}
|
||||
}
|
37
lib/core/data-column/data-column.module.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { NgModule } from '@angular/core';
|
||||
|
||||
import { DataColumnListComponent } from './data-column-list.component';
|
||||
import { DataColumnComponent } from './data-column.component';
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
CommonModule
|
||||
],
|
||||
declarations: [
|
||||
DataColumnComponent,
|
||||
DataColumnListComponent
|
||||
],
|
||||
exports: [
|
||||
DataColumnComponent,
|
||||
DataColumnListComponent
|
||||
]
|
||||
})
|
||||
export class DataColumnModule {}
|
18
lib/core/data-column/index.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
export * from './public-api';
|
21
lib/core/data-column/public-api.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
export * from './data-column-list.component';
|
||||
export * from './data-column.component';
|
||||
|
||||
export * from './data-column.module';
|
43
lib/core/datatable/components/datatable/data-cell.event.ts
Normal file
@@ -0,0 +1,43 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { BaseEvent } from '../../../events';
|
||||
import { DataColumn } from '../../data/data-column.model';
|
||||
import { DataRow } from '../../data/data-row.model';
|
||||
|
||||
export class DataCellEventModel {
|
||||
|
||||
readonly row: DataRow;
|
||||
readonly col: DataColumn;
|
||||
actions: any[];
|
||||
|
||||
constructor(row: DataRow, col: DataColumn, actions: any[]) {
|
||||
this.row = row;
|
||||
this.col = col;
|
||||
this.actions = actions || [];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export class DataCellEvent extends BaseEvent<DataCellEventModel> {
|
||||
|
||||
constructor(row: DataRow, col: DataColumn, actions: any[]) {
|
||||
super();
|
||||
this.value = new DataCellEventModel(row, col, actions);
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,44 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { BaseEvent } from '../../../events';
|
||||
import { DataRow } from '../../data/data-row.model';
|
||||
|
||||
export class DataRowActionEvent extends BaseEvent<DataRowActionModel> {
|
||||
|
||||
// backwards compatibility with 1.2.0 and earlier
|
||||
get args(): DataRowActionModel {
|
||||
return this.value;
|
||||
}
|
||||
|
||||
constructor(row: DataRow, action: any) {
|
||||
super();
|
||||
this.value = new DataRowActionModel(row, action);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export class DataRowActionModel {
|
||||
|
||||
row: DataRow;
|
||||
action: any;
|
||||
|
||||
constructor(row: DataRow, action: any) {
|
||||
this.row = row;
|
||||
this.action = action;
|
||||
}
|
||||
}
|
@@ -0,0 +1,60 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { ChangeDetectionStrategy, Component, Input, OnInit, ViewEncapsulation } from '@angular/core';
|
||||
import { DataColumn } from '../../data/data-column.model';
|
||||
import { DataRow } from '../../data/data-row.model';
|
||||
import { DataTableAdapter } from '../../data/datatable-adapter';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-datatable-cell',
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
template: `
|
||||
<ng-container>
|
||||
<span [title]="tooltip" class="adf-datatable-cell-value">{{value}}</span>
|
||||
</ng-container>`,
|
||||
encapsulation: ViewEncapsulation.None,
|
||||
host: { class: 'adf-datatable-cell' }
|
||||
})
|
||||
export class DataTableCellComponent implements OnInit {
|
||||
|
||||
@Input()
|
||||
data: DataTableAdapter;
|
||||
|
||||
@Input()
|
||||
column: DataColumn;
|
||||
|
||||
@Input()
|
||||
row: DataRow;
|
||||
|
||||
@Input()
|
||||
value: any;
|
||||
|
||||
@Input()
|
||||
tooltip: string;
|
||||
|
||||
ngOnInit() {
|
||||
if (!this.value && this.column && this.column.key && this.row && this.data) {
|
||||
this.value = this.data.getValue(this.row, this.column);
|
||||
|
||||
if (!this.tooltip) {
|
||||
this.tooltip = this.value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
187
lib/core/datatable/components/datatable/datatable.component.html
Normal file
@@ -0,0 +1,187 @@
|
||||
<table
|
||||
*ngIf="data"
|
||||
class="full-width adf-data-table">
|
||||
|
||||
<thead *ngIf="showHeader">
|
||||
<tr>
|
||||
<!-- Actions (left) -->
|
||||
<th *ngIf="actions && actionsPosition === 'left'" class="actions-column">
|
||||
<span class="sr-only">Actions</span>
|
||||
</th>
|
||||
<!-- Columns -->
|
||||
<th *ngIf="multiselect">
|
||||
<mat-checkbox [checked]="isSelectAllChecked" (change)="onSelectAllClick($event)"></mat-checkbox>
|
||||
</th>
|
||||
<th class="adf-data-table-cell--{{col.type || 'text'}} {{col.cssClass}}"
|
||||
*ngFor="let col of data.getColumns()"
|
||||
[class.sortable]="col.sortable"
|
||||
[attr.data-automation-id]="'auto_id_' + col.key"
|
||||
[class.adf-data-table__header--sorted-asc]="isColumnSorted(col, 'asc')"
|
||||
[class.adf-data-table__header--sorted-desc]="isColumnSorted(col, 'desc')"
|
||||
(click)="onColumnHeaderClick(col)"
|
||||
(keyup.enter)="onColumnHeaderClick(col)"
|
||||
role="button"
|
||||
tabindex="0"
|
||||
title="{{ col.title | translate }}">
|
||||
<span *ngIf="col.srTitle" class="sr-only">{{ col.srTitle | translate }}</span>
|
||||
<span *ngIf="col.title">{{ col.title | translate}}</span>
|
||||
</th>
|
||||
<!-- Actions (right) -->
|
||||
<th *ngIf="actions && actionsPosition === 'right'" class="actions-column">
|
||||
<span class="sr-only">Actions</span>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<ng-container *ngIf="!loading && !noPermission">
|
||||
<tr *ngFor="let row of data.getRows(); let idx = index"
|
||||
role="button"
|
||||
[class.is-selected]="row.isSelected"
|
||||
[adf-upload]="allowDropFiles && rowAllowsDrop(row)" [adf-upload-data]="row"
|
||||
[ngStyle]="rowStyle"
|
||||
[ngClass]="getRowStyle(row)"
|
||||
(keyup)="onRowKeyUp(row, $event)">
|
||||
|
||||
<!-- Actions (left) -->
|
||||
<td *ngIf="actions && actionsPosition === 'left'">
|
||||
<button mat-icon-button [matMenuTriggerFor]="menu"
|
||||
[attr.data-automation-id]="'action_menu_' + idx">
|
||||
<mat-icon>more_vert</mat-icon>
|
||||
</button>
|
||||
<mat-menu #menu="matMenu">
|
||||
<button mat-menu-item *ngFor="let action of getRowActions(row)"
|
||||
[attr.data-automation-id]="action.title"
|
||||
[disabled]="action.disabled"
|
||||
(click)="onExecuteRowAction(row, action)">
|
||||
<mat-icon *ngIf="action.icon">{{ action.icon }}</mat-icon>
|
||||
<span>{{ action.title | translate }}</span>
|
||||
</button>
|
||||
</mat-menu>
|
||||
</td>
|
||||
|
||||
<td *ngIf="multiselect">
|
||||
<mat-checkbox
|
||||
[checked]="row.isSelected"
|
||||
(change)="onCheckboxChange(row, $event)">
|
||||
</mat-checkbox>
|
||||
</td>
|
||||
<td *ngFor="let col of data.getColumns()"
|
||||
class="adf-data-table-cell adf-data-table-cell--{{col.type || 'text'}} {{col.cssClass}}"
|
||||
tabindex="0"
|
||||
(click)="onRowClick(row, $event)"
|
||||
[context-menu]="getContextMenuActions(row, col)"
|
||||
[context-menu-enabled]="contextMenu">
|
||||
<div *ngIf="!col.template" class="cell-container">
|
||||
<ng-container [ngSwitch]="col.type">
|
||||
<div *ngSwitchCase="'image'" class="cell-value">
|
||||
<mat-icon *ngIf="isIconValue(row, col)">{{ asIconValue(row, col) }}</mat-icon>
|
||||
<mat-icon *ngIf="!isIconValue(row, col) && row.isSelected" svgIcon="selected" >
|
||||
</mat-icon>
|
||||
|
||||
<img *ngIf="!isIconValue(row, col) && !row.isSelected"
|
||||
alt="{{ iconAltTextKey(data.getValue(row, col)) | translate }}"
|
||||
src="{{ data.getValue(row, col) }}"
|
||||
(error)="onImageLoadingError($event)">
|
||||
</div>
|
||||
<div *ngSwitchCase="'icon'" class="cell-value">
|
||||
<span class="sr-only">{{ iconAltTextKey(data.getValue(row, col)) | translate }}</span>
|
||||
<mat-icon>{{ data.getValue(row, col) }}</mat-icon>
|
||||
</div>
|
||||
<div *ngSwitchCase="'date'" class="cell-value"
|
||||
[attr.data-automation-id]="'date_' + data.getValue(row, col)">
|
||||
<adf-date-cell
|
||||
[data]="data"
|
||||
[column]="col"
|
||||
[row]="row"
|
||||
[tooltip]="getCellTooltip(row, col)">
|
||||
</adf-date-cell>
|
||||
</div>
|
||||
<div *ngSwitchCase="'location'" class="cell-value"
|
||||
[attr.data-automation-id]="'location' + data.getValue(row, col)">
|
||||
<adf-location-cell
|
||||
[data]="data"
|
||||
[column]="col"
|
||||
[row]="row"
|
||||
[tooltip]="getCellTooltip(row, col)">
|
||||
</adf-location-cell>
|
||||
</div>
|
||||
<div *ngSwitchCase="'fileSize'" class="cell-value"
|
||||
[attr.data-automation-id]="'fileSize_' + data.getValue(row, col)">
|
||||
<adf-filesize-cell
|
||||
[data]="data"
|
||||
[column]="col"
|
||||
[row]="row"
|
||||
[tooltip]="getCellTooltip(row, col)">
|
||||
</adf-filesize-cell>
|
||||
</div>
|
||||
<div *ngSwitchCase="'text'" class="cell-value"
|
||||
[attr.data-automation-id]="'text_' + data.getValue(row, col)">
|
||||
<adf-datatable-cell
|
||||
[data]="data"
|
||||
[column]="col"
|
||||
[row]="row"
|
||||
[tooltip]="getCellTooltip(row, col)">
|
||||
</adf-datatable-cell>
|
||||
</div>
|
||||
<span *ngSwitchDefault class="cell-value">
|
||||
<!-- empty cell for unknown column type -->
|
||||
</span>
|
||||
</ng-container>
|
||||
</div>
|
||||
<div *ngIf="col.template" class="cell-container">
|
||||
<ng-container
|
||||
[ngTemplateOutlet]="col.template"
|
||||
[ngTemplateOutletContext]="{ $implicit: { data: data, row: row, col: col }, value: data.getValue(row, col) }">
|
||||
</ng-container>
|
||||
</div>
|
||||
</td>
|
||||
|
||||
<!-- Actions (right) -->
|
||||
<td *ngIf="actions && actionsPosition === 'right'" class="alfresco-datatable__actions-cell">
|
||||
<button mat-icon-button [matMenuTriggerFor]="menu"
|
||||
[attr.data-automation-id]="'action_menu_' + idx">
|
||||
<mat-icon>more_vert</mat-icon>
|
||||
</button>
|
||||
<mat-menu #menu="matMenu">
|
||||
<button mat-menu-item *ngFor="let action of getRowActions(row)"
|
||||
[attr.data-automation-id]="action.title"
|
||||
[disabled]="action.disabled"
|
||||
(click)="onExecuteRowAction(row, action)">
|
||||
<mat-icon *ngIf="action.icon">{{ action.icon }}</mat-icon>
|
||||
<span>{{ action.title | translate }}</span>
|
||||
</button>
|
||||
</mat-menu>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
<tr *ngIf="data.getRows().length === 0">
|
||||
<td class="adf-no-content-container"
|
||||
[attr.colspan]="1 + data.getColumns().length">
|
||||
<ng-template *ngIf="noContentTemplate"
|
||||
ngFor [ngForOf]="[data]"
|
||||
[ngForTemplate]="noContentTemplate">
|
||||
</ng-template>
|
||||
<ng-content select="adf-empty-list"></ng-content>
|
||||
</td>
|
||||
</tr>
|
||||
</ng-container>
|
||||
<tr *ngIf="!loading && noPermission" class="adf-no-permission__row">
|
||||
<td class="adf-no-permission__cell">
|
||||
<ng-template *ngIf="noPermissionTemplate"
|
||||
ngFor [ngForOf]="[data]"
|
||||
[ngForTemplate]="noPermissionTemplate">
|
||||
</ng-template>
|
||||
</td>
|
||||
</tr>
|
||||
<tr *ngIf="loading">
|
||||
<td class="adf-loading-content-container"
|
||||
[attr.colspan]="1 + data.getColumns().length">
|
||||
<ng-template *ngIf="loadingTemplate"
|
||||
ngFor [ngForOf]="[data]"
|
||||
[ngForTemplate]="loadingTemplate">
|
||||
</ng-template>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
296
lib/core/datatable/components/datatable/datatable.component.scss
Normal file
@@ -0,0 +1,296 @@
|
||||
|
||||
@mixin adf-datatable-theme($theme) {
|
||||
$foreground: map-get($theme, foreground);
|
||||
$background: map-get($theme, background);
|
||||
$primary: map-get($theme, primary);
|
||||
|
||||
$data-table-font-size: 14px !default;
|
||||
$data-table-header-font-size: 12px !default;
|
||||
$data-table-header-sort-icon-size: 16px !default;
|
||||
$data-table-header-color: mat-color($foreground, text) !default;
|
||||
$data-table-header-sorted-color: mat-color($foreground, text) !default;
|
||||
$data-table-header-sorted-icon-hover-color: mat-color($foreground, disabled-text) !default;
|
||||
$data-table-divider-color: mat-color($foreground, text, .07) !default;
|
||||
$data-table-hover-color: mat-color($background, 'hover') !default;
|
||||
$data-table-selection-color: mat-color($background, 'selected-button') !default;
|
||||
$data-table-dividers: 1px solid $data-table-divider-color !default;
|
||||
$data-table-row-height: 56px !default;
|
||||
// $data-table-last-row-height: 56px !default;
|
||||
// $data-table-header-height: 56px !default;
|
||||
$data-table-column-spacing: 36px !default;
|
||||
$data-table-column-padding: $data-table-column-spacing / 2;
|
||||
// $data-table-card-header-height: 64px !default;
|
||||
// $data-table-card-title-top: 20px !default;
|
||||
$data-table-card-padding: 24px !default;
|
||||
// $data-table-button-padding-right: 16px !default;
|
||||
$data-table-cell-top: $data-table-card-padding / 2;
|
||||
$data-table-drag-border: 1px dashed rgb(68, 138, 255);
|
||||
|
||||
.adf-data-table {
|
||||
width: 100%;
|
||||
position: relative;
|
||||
border: $data-table-dividers;
|
||||
border-collapse: collapse;
|
||||
white-space: nowrap;
|
||||
font-size: $data-table-font-size;
|
||||
|
||||
/* Firefox fixes */
|
||||
border-collapse: unset;
|
||||
border-spacing: 0;
|
||||
|
||||
thead {
|
||||
padding-bottom: 3px;
|
||||
}
|
||||
|
||||
tbody {
|
||||
tr {
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
height: $data-table-row-height;
|
||||
@include material-animation-default(0.28s);
|
||||
transition-property: background-color;
|
||||
|
||||
&:hover {
|
||||
background-color: $data-table-hover-color;
|
||||
}
|
||||
|
||||
&.is-selected, &.is-selected:hover {
|
||||
background-color: $data-table-selection-color;
|
||||
}
|
||||
|
||||
&:focus {
|
||||
outline-offset: -1px;
|
||||
outline-width: 1px;
|
||||
outline-color: rgb(68, 138, 255);
|
||||
outline-style: solid;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
& > td {
|
||||
border-bottom: $data-table-dividers;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
td, th {
|
||||
padding: 0 $data-table-column-padding 12px $data-table-column-padding;
|
||||
text-align: right;
|
||||
|
||||
&:first-of-type {
|
||||
padding-left: 24px;
|
||||
}
|
||||
|
||||
&:last-of-type {
|
||||
padding-right: 24px;
|
||||
}
|
||||
|
||||
&:focus {
|
||||
outline-offset: -1px;
|
||||
outline-width: 1px;
|
||||
outline-color: rgb(68, 138, 255);
|
||||
outline-style: solid;
|
||||
}
|
||||
}
|
||||
|
||||
td {
|
||||
color: mat-color($foreground, text);
|
||||
position: relative;
|
||||
vertical-align: middle;
|
||||
height: $data-table-row-height;
|
||||
border-top: $data-table-dividers;
|
||||
padding-top: $data-table-cell-top;
|
||||
box-sizing: border-box;
|
||||
|
||||
@include no-select;
|
||||
}
|
||||
|
||||
th {
|
||||
@include no-select;
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
vertical-align: bottom;
|
||||
text-overflow: ellipsis;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
line-height: 24px;
|
||||
letter-spacing: 0;
|
||||
height: $data-table-row-height;
|
||||
font-size: $data-table-header-font-size;
|
||||
color: $data-table-header-color;
|
||||
padding-bottom: 8px;
|
||||
box-sizing: border-box;
|
||||
|
||||
&.sortable {
|
||||
@include no-select;
|
||||
&:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
&.adf-data-table__header--sorted-asc,
|
||||
&.adf-data-table__header--sorted-desc {
|
||||
color: $data-table-header-sorted-color;
|
||||
&:before {
|
||||
@include typo-icon;
|
||||
font-size: $data-table-header-sort-icon-size;
|
||||
content: "\e5d8";
|
||||
margin-right: 5px;
|
||||
vertical-align: sub;
|
||||
}
|
||||
&:hover {
|
||||
cursor: pointer;
|
||||
&:before {
|
||||
color: $data-table-header-sorted-icon-hover-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
&.adf-data-table__header--sorted-desc:before {
|
||||
content: "\e5db";
|
||||
}
|
||||
}
|
||||
|
||||
.adf-data-table-cell {
|
||||
text-align: left;
|
||||
height: 100%;
|
||||
|
||||
&--text {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
&--date {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
&--number {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
&--image {
|
||||
|
||||
.cell-value {
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
text-align: left;
|
||||
|
||||
img {
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.full-width {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* Empty folder */
|
||||
.adf-no-content-container {
|
||||
padding: 0 !important;
|
||||
|
||||
& > img {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
/* Loading folder */
|
||||
.adf-loading-content-container {
|
||||
padding: 0 !important;
|
||||
|
||||
& > img {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.adf-no-permission {
|
||||
&__row:hover {
|
||||
cursor: default;
|
||||
background-color: inherit;
|
||||
}
|
||||
|
||||
&__cell {
|
||||
padding: 0 !important;
|
||||
}
|
||||
}
|
||||
|
||||
.ellipsis-cell {
|
||||
.cell-container {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.cell-container > * {
|
||||
display: block;
|
||||
position: absolute;
|
||||
max-width: calc(100% - 2em);
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
line-height: 1.12em;
|
||||
}
|
||||
|
||||
/* visible content */
|
||||
.cell-value {
|
||||
display: block;
|
||||
position: relative;
|
||||
max-width: calc(100% - 2em);
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
line-height: 1.12em;
|
||||
}
|
||||
|
||||
/* cell stretching content */
|
||||
& > div:after {
|
||||
content: attr(title);
|
||||
overflow: hidden;
|
||||
height: 0;
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
/* [Accessibility] For screen reader only */
|
||||
.sr-only {
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
padding: 0;
|
||||
margin: -1px;
|
||||
overflow: hidden;
|
||||
clip: rect(0, 0, 0, 0);
|
||||
border: 0;
|
||||
}
|
||||
|
||||
/* Utils */
|
||||
.hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* mobile phone */
|
||||
@media all and (max-width: 768px) {
|
||||
.desktop-only {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-device-width: 768px) {
|
||||
.desktop-only {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.adf-upload__dragging {
|
||||
& > td {
|
||||
border-top: $data-table-drag-border;
|
||||
border-bottom: $data-table-drag-border;
|
||||
|
||||
&:first-child {
|
||||
border-left: $data-table-drag-border;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
border-right: $data-table-drag-border;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,650 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { SimpleChange } from '@angular/core';
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { MatCheckboxChange } from '@angular/material';
|
||||
import { RouterTestingModule } from '@angular/router/testing';
|
||||
import { DataTableModule } from '../../datatable.module';
|
||||
import { MaterialModule } from '../../../material.module';
|
||||
import {
|
||||
DataColumn,
|
||||
DataRow,
|
||||
DataSorting,
|
||||
ObjectDataColumn,
|
||||
ObjectDataTableAdapter
|
||||
} from './../../data/index';
|
||||
import { DataTableComponent } from './datatable.component';
|
||||
|
||||
describe('DataTable', () => {
|
||||
|
||||
let fixture: ComponentFixture<DataTableComponent>;
|
||||
let dataTable: DataTableComponent;
|
||||
let element: any;
|
||||
let eventMock: any;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [
|
||||
RouterTestingModule,
|
||||
DataTableModule,
|
||||
MaterialModule
|
||||
]
|
||||
}).compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(DataTableComponent);
|
||||
dataTable = fixture.componentInstance;
|
||||
element = fixture.debugElement.nativeElement;
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
eventMock = {
|
||||
preventDefault: function () {
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
it('should change the rows on changing of the data', () => {
|
||||
let newData = new ObjectDataTableAdapter(
|
||||
[
|
||||
{ name: 'TEST' },
|
||||
{ name: 'FAKE' }
|
||||
],
|
||||
[new ObjectDataColumn({ key: 'name' })]
|
||||
);
|
||||
dataTable.data = new ObjectDataTableAdapter(
|
||||
[
|
||||
{ name: '1' },
|
||||
{ name: '2' }
|
||||
],
|
||||
[new ObjectDataColumn({ key: 'name' })]
|
||||
);
|
||||
|
||||
dataTable.ngOnChanges({
|
||||
data: new SimpleChange(null, newData, false)
|
||||
});
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(element.querySelector('[data-automation-id="text_TEST"]')).not.toBeNull();
|
||||
expect(element.querySelector('[data-automation-id="text_FAKE"]')).not.toBeNull();
|
||||
});
|
||||
|
||||
it('should reset selection on mode change', () => {
|
||||
spyOn(dataTable, 'resetSelection').and.callThrough();
|
||||
|
||||
dataTable.data = new ObjectDataTableAdapter(
|
||||
[
|
||||
{ name: '1' },
|
||||
{ name: '2' }
|
||||
],
|
||||
[ new ObjectDataColumn({ key: 'name'}) ]
|
||||
);
|
||||
const rows = dataTable.data.getRows();
|
||||
rows[0].isSelected = true;
|
||||
rows[1].isSelected = true;
|
||||
|
||||
expect(rows[0].isSelected).toBeTruthy();
|
||||
expect(rows[1].isSelected).toBeTruthy();
|
||||
|
||||
dataTable.ngOnChanges({
|
||||
selectionMode: new SimpleChange(null, 'multiple', false)
|
||||
});
|
||||
|
||||
expect(dataTable.resetSelection).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should select only one row with [single] selection mode', () => {
|
||||
dataTable.selectionMode = 'single';
|
||||
dataTable.data = new ObjectDataTableAdapter(
|
||||
[
|
||||
{ name: '1' },
|
||||
{ name: '2' }
|
||||
],
|
||||
[ new ObjectDataColumn({ key: 'name'}) ]
|
||||
);
|
||||
const rows = dataTable.data.getRows();
|
||||
|
||||
dataTable.ngOnChanges({});
|
||||
dataTable.onRowClick(rows[0], null);
|
||||
expect(rows[0].isSelected).toBeTruthy();
|
||||
expect(rows[1].isSelected).toBeFalsy();
|
||||
|
||||
dataTable.onRowClick(rows[1], null);
|
||||
expect(rows[0].isSelected).toBeFalsy();
|
||||
expect(rows[1].isSelected).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should not unselect the row with [single] selection mode', () => {
|
||||
dataTable.selectionMode = 'single';
|
||||
dataTable.data = new ObjectDataTableAdapter(
|
||||
[
|
||||
{ name: '1' },
|
||||
{ name: '2' }
|
||||
],
|
||||
[ new ObjectDataColumn({ key: 'name'}) ]
|
||||
);
|
||||
const rows = dataTable.data.getRows();
|
||||
|
||||
dataTable.ngOnChanges({});
|
||||
dataTable.onRowClick(rows[0], null);
|
||||
expect(rows[0].isSelected).toBeTruthy();
|
||||
expect(rows[1].isSelected).toBeFalsy();
|
||||
|
||||
dataTable.onRowClick(rows[0], null);
|
||||
expect(rows[0].isSelected).toBeTruthy();
|
||||
expect(rows[1].isSelected).toBeFalsy();
|
||||
});
|
||||
|
||||
it('should unselect the row with [multiple] selection mode and modifier key', () => {
|
||||
dataTable.selectionMode = 'multiple';
|
||||
dataTable.data = new ObjectDataTableAdapter(
|
||||
[ { name: '1' } ],
|
||||
[ new ObjectDataColumn({ key: 'name'}) ]
|
||||
);
|
||||
const rows = dataTable.data.getRows();
|
||||
|
||||
dataTable.ngOnChanges({});
|
||||
dataTable.onRowClick(rows[0], null);
|
||||
expect(rows[0].isSelected).toBeTruthy();
|
||||
|
||||
dataTable.onRowClick(rows[0], null);
|
||||
expect(rows[0].isSelected).toBeTruthy();
|
||||
|
||||
dataTable.onRowClick(rows[0], <any> { metaKey: true, preventDefault() {} });
|
||||
expect(rows[0].isSelected).toBeFalsy();
|
||||
});
|
||||
|
||||
it('should select multiple rows with [multiple] selection mode', () => {
|
||||
dataTable.selectionMode = 'multiple';
|
||||
dataTable.data = new ObjectDataTableAdapter(
|
||||
[
|
||||
{ name: '1' },
|
||||
{ name: '2' }
|
||||
],
|
||||
[ new ObjectDataColumn({ key: 'name'}) ]
|
||||
);
|
||||
const rows = dataTable.data.getRows();
|
||||
|
||||
const event = new MouseEvent('click', {
|
||||
metaKey: true
|
||||
});
|
||||
|
||||
dataTable.ngOnChanges({});
|
||||
dataTable.onRowClick(rows[0], event);
|
||||
dataTable.onRowClick(rows[1], event);
|
||||
|
||||
expect(rows[0].isSelected).toBeTruthy();
|
||||
expect(rows[1].isSelected).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should put actions menu to the right by default', () => {
|
||||
dataTable.data = new ObjectDataTableAdapter([], [
|
||||
<DataColumn> {},
|
||||
<DataColumn> {},
|
||||
<DataColumn> {}
|
||||
]);
|
||||
dataTable.actions = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
let headers = element.querySelectorAll('th');
|
||||
expect(headers.length).toBe(4);
|
||||
expect(headers[headers.length - 1].classList.contains('actions-column')).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should put actions menu to the left', () => {
|
||||
dataTable.data = new ObjectDataTableAdapter([], [
|
||||
<DataColumn> {},
|
||||
<DataColumn> {},
|
||||
<DataColumn> {}
|
||||
]);
|
||||
dataTable.actions = true;
|
||||
dataTable.actionsPosition = 'left';
|
||||
fixture.detectChanges();
|
||||
|
||||
let headers = element.querySelectorAll('th');
|
||||
expect(headers.length).toBe(4);
|
||||
expect(headers[0].classList.contains('actions-column')).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should initialize default adapter', () => {
|
||||
let table = new DataTableComponent(null, null);
|
||||
expect(table.data).toBeUndefined();
|
||||
table.ngOnChanges({'data': new SimpleChange('123', {}, true)});
|
||||
expect(table.data).toEqual(jasmine.any(ObjectDataTableAdapter));
|
||||
});
|
||||
|
||||
it('should load data table on onChange', () => {
|
||||
let table = new DataTableComponent(null, null);
|
||||
let data = new ObjectDataTableAdapter([], []);
|
||||
|
||||
expect(table.data).toBeUndefined();
|
||||
table.ngOnChanges({'data': new SimpleChange('123', data, true)});
|
||||
expect(table.data).toEqual(data);
|
||||
});
|
||||
|
||||
it('should initialize with custom data', () => {
|
||||
let data = new ObjectDataTableAdapter([], []);
|
||||
dataTable.data = data;
|
||||
dataTable.ngAfterContentInit();
|
||||
expect(dataTable.data).toBe(data);
|
||||
});
|
||||
|
||||
it('should emit row click event', done => {
|
||||
let row = <DataRow> {};
|
||||
|
||||
dataTable.rowClick.subscribe(e => {
|
||||
expect(e.value).toBe(row);
|
||||
done();
|
||||
});
|
||||
|
||||
dataTable.ngOnChanges({});
|
||||
dataTable.onRowClick(row, null);
|
||||
});
|
||||
|
||||
it('should emit double click if there are two single click in 250ms', (done) => {
|
||||
|
||||
let row = <DataRow> {};
|
||||
dataTable.ngOnChanges({});
|
||||
|
||||
dataTable.rowDblClick.subscribe( () => {
|
||||
done();
|
||||
});
|
||||
|
||||
dataTable.onRowClick(row, null);
|
||||
setTimeout(() => {
|
||||
dataTable.onRowClick(row, null);
|
||||
}
|
||||
, 240);
|
||||
|
||||
});
|
||||
|
||||
it('should emit double click if there are more than two single click in 250ms', (done) => {
|
||||
|
||||
let row = <DataRow> {};
|
||||
dataTable.ngOnChanges({});
|
||||
|
||||
dataTable.rowDblClick.subscribe( () => {
|
||||
done();
|
||||
});
|
||||
|
||||
dataTable.onRowClick(row, null);
|
||||
setTimeout(() => {
|
||||
|
||||
dataTable.onRowClick(row, null);
|
||||
dataTable.onRowClick(row, null);
|
||||
}
|
||||
, 240);
|
||||
|
||||
});
|
||||
|
||||
it('should emit single click if there are two single click in more than 250ms', (done) => {
|
||||
|
||||
let row = <DataRow> {};
|
||||
let clickCount = 0;
|
||||
|
||||
dataTable.ngOnChanges({});
|
||||
|
||||
dataTable.rowClick.subscribe( () => {
|
||||
clickCount += 1;
|
||||
if (clickCount === 2) {
|
||||
done();
|
||||
}
|
||||
});
|
||||
|
||||
dataTable.onRowClick(row, null);
|
||||
setTimeout(() => {
|
||||
dataTable.onRowClick(row, null);
|
||||
}
|
||||
, 260);
|
||||
});
|
||||
|
||||
it('should emit row-click dom event', (done) => {
|
||||
let row = <DataRow> {};
|
||||
|
||||
fixture.nativeElement.addEventListener('row-click', (e) => {
|
||||
expect(e.detail.value).toBe(row);
|
||||
done();
|
||||
});
|
||||
|
||||
dataTable.ngOnChanges({});
|
||||
dataTable.onRowClick(row, null);
|
||||
});
|
||||
|
||||
it('should emit row-dblclick dom event', (done) => {
|
||||
let row = <DataRow> {};
|
||||
|
||||
fixture.nativeElement.addEventListener('row-dblclick', (e) => {
|
||||
expect(e.detail.value).toBe(row);
|
||||
done();
|
||||
});
|
||||
dataTable.ngOnChanges({});
|
||||
dataTable.onRowClick(row, null);
|
||||
dataTable.onRowClick(row, null);
|
||||
});
|
||||
|
||||
it('should prevent default behaviour on row click event', () => {
|
||||
let e = jasmine.createSpyObj('event', ['preventDefault']);
|
||||
dataTable.ngAfterContentInit();
|
||||
dataTable.onRowClick(null, e);
|
||||
expect(e.preventDefault).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should prevent default behaviour on row double-click event', () => {
|
||||
let e = jasmine.createSpyObj('event', ['preventDefault']);
|
||||
dataTable.ngOnChanges({});
|
||||
dataTable.ngAfterContentInit();
|
||||
dataTable.onRowDblClick(null, e);
|
||||
expect(e.preventDefault).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should not sort if column is missing', () => {
|
||||
dataTable.ngOnChanges({'data': new SimpleChange('123', {}, true)});
|
||||
let adapter = dataTable.data;
|
||||
spyOn(adapter, 'setSorting').and.callThrough();
|
||||
dataTable.onColumnHeaderClick(null);
|
||||
expect(adapter.setSorting).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should not sort upon clicking non-sortable column header', () => {
|
||||
dataTable.ngOnChanges({'data': new SimpleChange('123', {}, true)});
|
||||
let adapter = dataTable.data;
|
||||
spyOn(adapter, 'setSorting').and.callThrough();
|
||||
|
||||
let column = new ObjectDataColumn({
|
||||
key: 'column_1'
|
||||
});
|
||||
|
||||
dataTable.onColumnHeaderClick(column);
|
||||
expect(adapter.setSorting).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should set sorting upon column header clicked', () => {
|
||||
dataTable.ngOnChanges({'data': new SimpleChange('123', {}, true)});
|
||||
let adapter = dataTable.data;
|
||||
spyOn(adapter, 'setSorting').and.callThrough();
|
||||
|
||||
let column = new ObjectDataColumn({
|
||||
key: 'column_1',
|
||||
sortable: true
|
||||
});
|
||||
|
||||
dataTable.onColumnHeaderClick(column);
|
||||
expect(adapter.setSorting).toHaveBeenCalledWith(
|
||||
jasmine.objectContaining({
|
||||
key: 'column_1',
|
||||
direction: 'asc'
|
||||
})
|
||||
);
|
||||
});
|
||||
|
||||
it('should invert sorting upon column header clicked', () => {
|
||||
dataTable.ngOnChanges({'data': new SimpleChange('123', {}, true)});
|
||||
|
||||
let adapter = dataTable.data;
|
||||
let sorting = new DataSorting('column_1', 'asc');
|
||||
spyOn(adapter, 'setSorting').and.callThrough();
|
||||
spyOn(adapter, 'getSorting').and.returnValue(sorting);
|
||||
|
||||
let column = new ObjectDataColumn({
|
||||
key: 'column_1',
|
||||
sortable: true
|
||||
});
|
||||
|
||||
// check first click on the header
|
||||
dataTable.onColumnHeaderClick(column);
|
||||
expect(adapter.setSorting).toHaveBeenCalledWith(
|
||||
jasmine.objectContaining({
|
||||
key: 'column_1',
|
||||
direction: 'desc'
|
||||
})
|
||||
);
|
||||
|
||||
// check second click on the header
|
||||
sorting.direction = 'desc';
|
||||
dataTable.onColumnHeaderClick(column);
|
||||
expect(adapter.setSorting).toHaveBeenCalledWith(
|
||||
jasmine.objectContaining({
|
||||
key: 'column_1',
|
||||
direction: 'asc'
|
||||
})
|
||||
);
|
||||
|
||||
});
|
||||
|
||||
it('should invert "select all" status', () => {
|
||||
expect(dataTable.isSelectAllChecked).toBeFalsy();
|
||||
dataTable.onSelectAllClick(<MatCheckboxChange> { checked: true });
|
||||
expect(dataTable.isSelectAllChecked).toBeTruthy();
|
||||
dataTable.onSelectAllClick(<MatCheckboxChange> { checked: false });
|
||||
expect(dataTable.isSelectAllChecked).toBeFalsy();
|
||||
});
|
||||
|
||||
it('should update rows on "select all" click', () => {
|
||||
let data = new ObjectDataTableAdapter([{}, {}, {}], []);
|
||||
let rows = data.getRows();
|
||||
|
||||
dataTable.data = data;
|
||||
dataTable.multiselect = true;
|
||||
dataTable.ngAfterContentInit();
|
||||
|
||||
dataTable.onSelectAllClick(<MatCheckboxChange> { checked: true });
|
||||
expect(dataTable.isSelectAllChecked).toBe(true);
|
||||
for (let i = 0; i < rows.length; i++) {
|
||||
expect(rows[i].isSelected).toBe(true);
|
||||
}
|
||||
|
||||
dataTable.onSelectAllClick(<MatCheckboxChange> { checked: false });
|
||||
expect(dataTable.isSelectAllChecked).toBe(false);
|
||||
for (let i = 0; i < rows.length; i++) {
|
||||
expect(rows[i].isSelected).toBe(false);
|
||||
}
|
||||
});
|
||||
|
||||
it('should allow "select all" calls with no rows', () => {
|
||||
dataTable.multiselect = true;
|
||||
dataTable.ngOnChanges({'data': new SimpleChange('123', {}, true)});
|
||||
|
||||
dataTable.onSelectAllClick(<MatCheckboxChange> { checked: true });
|
||||
expect(dataTable.isSelectAllChecked).toBe(true);
|
||||
});
|
||||
|
||||
it('should require multiselect option to toggle row state', () => {
|
||||
let data = new ObjectDataTableAdapter([{}, {}, {}], []);
|
||||
let rows = data.getRows();
|
||||
|
||||
dataTable.data = data;
|
||||
dataTable.multiselect = false;
|
||||
dataTable.ngAfterContentInit();
|
||||
|
||||
dataTable.onSelectAllClick(<MatCheckboxChange> { checked: true });
|
||||
expect(dataTable.isSelectAllChecked).toBe(true);
|
||||
for (let i = 0; i < rows.length; i++) {
|
||||
expect(rows[i].isSelected).toBe(false);
|
||||
}
|
||||
});
|
||||
|
||||
it('should require row and column for icon value check', () => {
|
||||
expect(dataTable.isIconValue(null, null)).toBeFalsy();
|
||||
expect(dataTable.isIconValue(<DataRow> {}, null)).toBeFalsy();
|
||||
expect(dataTable.isIconValue(null, <DataColumn> {})).toBeFalsy();
|
||||
});
|
||||
|
||||
it('should use special material url scheme', () => {
|
||||
let column = <DataColumn> {};
|
||||
|
||||
let row = {
|
||||
getValue: function (key: string) {
|
||||
return 'material-icons://android';
|
||||
}
|
||||
};
|
||||
|
||||
expect(dataTable.isIconValue(<DataRow> row, column)).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should not use special material url scheme', () => {
|
||||
let column = <DataColumn> {};
|
||||
|
||||
let row = {
|
||||
getValue: function (key: string) {
|
||||
return 'http://www.google.com';
|
||||
}
|
||||
};
|
||||
|
||||
expect(dataTable.isIconValue(<DataRow> row, column)).toBeFalsy();
|
||||
});
|
||||
|
||||
it('should parse icon value', () => {
|
||||
let column = <DataColumn> {};
|
||||
|
||||
let row = {
|
||||
getValue: function (key: string) {
|
||||
return 'material-icons://android';
|
||||
}
|
||||
};
|
||||
|
||||
expect(dataTable.asIconValue(<DataRow> row, column)).toBe('android');
|
||||
});
|
||||
|
||||
it('should not parse icon value', () => {
|
||||
let column = <DataColumn> {};
|
||||
|
||||
let row = {
|
||||
getValue: function (key: string) {
|
||||
return 'http://www.google.com';
|
||||
}
|
||||
};
|
||||
|
||||
expect(dataTable.asIconValue(<DataRow> row, column)).toBe(null);
|
||||
});
|
||||
|
||||
it('should parse icon values to a valid i18n key', () => {
|
||||
expect(dataTable.iconAltTextKey('custom')).toBe('ICONS.custom');
|
||||
expect(dataTable.iconAltTextKey('/path/to/custom')).toBe('ICONS.custom');
|
||||
expect(dataTable.iconAltTextKey('/path/to/custom.svg')).toBe('ICONS.custom');
|
||||
});
|
||||
|
||||
it('should require column and direction to evaluate sorting state', () => {
|
||||
expect(dataTable.isColumnSorted(null, null)).toBeFalsy();
|
||||
expect(dataTable.isColumnSorted(<DataColumn> {}, null)).toBeFalsy();
|
||||
expect(dataTable.isColumnSorted(null, 'asc')).toBeFalsy();
|
||||
});
|
||||
|
||||
it('should require adapter sorting to evaluate sorting state', () => {
|
||||
dataTable.ngOnChanges({'data': new SimpleChange('123', {}, true)});
|
||||
spyOn(dataTable.data, 'getSorting').and.returnValue(null);
|
||||
expect(dataTable.isColumnSorted(<DataColumn> {}, 'asc')).toBeFalsy();
|
||||
});
|
||||
|
||||
it('should evaluate column sorting state', () => {
|
||||
dataTable.ngOnChanges({'data': new SimpleChange('123', {}, true)});
|
||||
spyOn(dataTable.data, 'getSorting').and.returnValue(new DataSorting('column_1', 'asc'));
|
||||
expect(dataTable.isColumnSorted(<DataColumn> {key: 'column_1'}, 'asc')).toBeTruthy();
|
||||
expect(dataTable.isColumnSorted(<DataColumn> {key: 'column_2'}, 'desc')).toBeFalsy();
|
||||
});
|
||||
|
||||
it('should replace image source with fallback thumbnail on error', () => {
|
||||
let event = <any> {
|
||||
target: {
|
||||
src: 'missing-image'
|
||||
}
|
||||
};
|
||||
|
||||
dataTable.fallbackThumbnail = '<fallback>';
|
||||
dataTable.onImageLoadingError(event);
|
||||
expect(event.target.src).toBe(dataTable.fallbackThumbnail);
|
||||
});
|
||||
|
||||
it('should replace image source only when fallback available', () => {
|
||||
const originalSrc = 'missing-image';
|
||||
let event = <any> {
|
||||
target: {
|
||||
src: originalSrc
|
||||
}
|
||||
};
|
||||
|
||||
dataTable.fallbackThumbnail = null;
|
||||
dataTable.onImageLoadingError(event);
|
||||
expect(event.target.src).toBe(originalSrc);
|
||||
});
|
||||
|
||||
it('should not get cell tooltip when row is not provided', () => {
|
||||
const col = <DataColumn> { key: 'name', type: 'text' };
|
||||
expect(dataTable.getCellTooltip(null, col)).toBeNull();
|
||||
});
|
||||
|
||||
it('should not get cell tooltip when column is not provided', () => {
|
||||
const row = <DataRow> {};
|
||||
expect(dataTable.getCellTooltip(row, null)).toBeNull();
|
||||
});
|
||||
|
||||
it('should not get cell tooltip when formatter is not provided', () => {
|
||||
const col = <DataColumn> { key: 'name', type: 'text' };
|
||||
const row = <DataRow> {};
|
||||
expect(dataTable.getCellTooltip(row, col)).toBeNull();
|
||||
});
|
||||
|
||||
it('should use formatter function to generate tooltip', () => {
|
||||
const tooltip = 'tooltip value';
|
||||
const col = <DataColumn> {
|
||||
key: 'name',
|
||||
type: 'text',
|
||||
formatTooltip: () => tooltip
|
||||
};
|
||||
const row = <DataRow> {};
|
||||
expect(dataTable.getCellTooltip(row, col)).toBe(tooltip);
|
||||
});
|
||||
|
||||
it('should return null value from the tooltip formatter', () => {
|
||||
const col = <DataColumn> {
|
||||
key: 'name',
|
||||
type: 'text',
|
||||
formatTooltip: () => null
|
||||
};
|
||||
const row = <DataRow> {};
|
||||
expect(dataTable.getCellTooltip(row, col)).toBeNull();
|
||||
});
|
||||
|
||||
it('should cache the rows menu', () => {
|
||||
let emitted = 0;
|
||||
dataTable.showRowActionsMenu.subscribe(() => { emitted++; });
|
||||
|
||||
const column = <DataColumn> {};
|
||||
const row = <DataRow> { getValue: function (key: string) { return 'id'; } };
|
||||
|
||||
dataTable.getRowActions(row, column);
|
||||
dataTable.getRowActions(row, column);
|
||||
dataTable.getRowActions(row, column);
|
||||
|
||||
expect(emitted).toBe(1);
|
||||
});
|
||||
|
||||
it('should reset the menu cache after rows change', () => {
|
||||
let emitted = 0;
|
||||
dataTable.showRowActionsMenu.subscribe(() => { emitted++; });
|
||||
|
||||
const column = <DataColumn> {};
|
||||
const row = <DataRow> { getValue: function (key: string) { return 'id'; } };
|
||||
|
||||
dataTable.getRowActions(row, column);
|
||||
dataTable.ngOnChanges({'data': new SimpleChange('123', {}, true)});
|
||||
dataTable.getRowActions(row, column);
|
||||
|
||||
expect(emitted).toBe(2);
|
||||
});
|
||||
});
|
490
lib/core/datatable/components/datatable/datatable.component.ts
Normal file
@@ -0,0 +1,490 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import {
|
||||
AfterContentInit, Component, ContentChild, DoCheck, ElementRef, EventEmitter, Input,
|
||||
IterableDiffers, OnChanges, Output, SimpleChange, SimpleChanges, TemplateRef, ViewEncapsulation
|
||||
} from '@angular/core';
|
||||
import { MatCheckboxChange } from '@angular/material';
|
||||
import { Observable, Observer, Subscription } from 'rxjs/Rx';
|
||||
import { DataColumnListComponent } from '../../../data-column';
|
||||
import { DataColumn } from '../../data/data-column.model';
|
||||
import { DataRowEvent } from '../../data/data-row-event.model';
|
||||
import { DataRow } from '../../data/data-row.model';
|
||||
import { DataSorting } from '../../data/data-sorting.model';
|
||||
import { DataTableAdapter } from '../../data/datatable-adapter';
|
||||
|
||||
import { ObjectDataRow, ObjectDataTableAdapter } from '../../data/object-datatable-adapter';
|
||||
import { DataCellEvent } from './data-cell.event';
|
||||
import { DataRowActionEvent } from './data-row-action.event';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-datatable',
|
||||
styleUrls: ['./datatable.component.scss'],
|
||||
templateUrl: './datatable.component.html',
|
||||
encapsulation: ViewEncapsulation.None
|
||||
})
|
||||
export class DataTableComponent implements AfterContentInit, OnChanges, DoCheck {
|
||||
|
||||
@ContentChild(DataColumnListComponent) columnList: DataColumnListComponent;
|
||||
|
||||
@Input()
|
||||
data: DataTableAdapter;
|
||||
|
||||
@Input()
|
||||
rows: any[] = [];
|
||||
|
||||
@Input()
|
||||
selectionMode: string = 'single'; // none|single|multiple
|
||||
|
||||
@Input()
|
||||
multiselect: boolean = false;
|
||||
|
||||
@Input()
|
||||
actions: boolean = false;
|
||||
|
||||
@Input()
|
||||
actionsPosition: string = 'right'; // left|right
|
||||
|
||||
@Input()
|
||||
fallbackThumbnail: string;
|
||||
|
||||
@Input()
|
||||
contextMenu: boolean = false;
|
||||
|
||||
@Input()
|
||||
allowDropFiles: boolean = false;
|
||||
|
||||
@Input()
|
||||
rowStyle: string;
|
||||
|
||||
@Input()
|
||||
rowStyleClass: string = '';
|
||||
|
||||
@Input()
|
||||
showHeader: boolean = true;
|
||||
|
||||
@Output()
|
||||
rowClick = new EventEmitter<DataRowEvent>();
|
||||
|
||||
@Output()
|
||||
rowDblClick = new EventEmitter<DataRowEvent>();
|
||||
|
||||
@Output()
|
||||
showRowContextMenu = new EventEmitter<DataCellEvent>();
|
||||
|
||||
@Output()
|
||||
showRowActionsMenu = new EventEmitter<DataCellEvent>();
|
||||
|
||||
@Output()
|
||||
executeRowAction = new EventEmitter<DataRowActionEvent>();
|
||||
|
||||
@Input()
|
||||
loading: boolean = false;
|
||||
|
||||
@Input()
|
||||
noPermission: boolean = false;
|
||||
|
||||
noContentTemplate: TemplateRef<any>;
|
||||
noPermissionTemplate: TemplateRef<any>;
|
||||
loadingTemplate: TemplateRef<any>;
|
||||
|
||||
isSelectAllChecked: boolean = false;
|
||||
selection = new Array<DataRow>();
|
||||
|
||||
private clickObserver: Observer<DataRowEvent>;
|
||||
private click$: Observable<DataRowEvent>;
|
||||
|
||||
private schema: DataColumn[] = [];
|
||||
|
||||
private differ: any;
|
||||
private rowMenuCache: object = {};
|
||||
|
||||
private singleClickStreamSub: Subscription;
|
||||
private multiClickStreamSub: Subscription;
|
||||
|
||||
constructor(private elementRef: ElementRef, differs: IterableDiffers) {
|
||||
if (differs) {
|
||||
this.differ = differs.find([]).create(null);
|
||||
}
|
||||
this.click$ = new Observable<DataRowEvent>(observer => this.clickObserver = observer).share();
|
||||
}
|
||||
|
||||
ngAfterContentInit() {
|
||||
this.setTableSchema();
|
||||
}
|
||||
|
||||
ngOnChanges(changes: SimpleChanges) {
|
||||
this.initAndSubscribeClickStream();
|
||||
if (this.isPropertyChanged(changes['data'])) {
|
||||
if (this.isTableEmpty()) {
|
||||
this.initTable();
|
||||
} else {
|
||||
this.data = changes['data'].currentValue;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.isPropertyChanged(changes['rows'])) {
|
||||
if (this.isTableEmpty()) {
|
||||
this.initTable();
|
||||
} else {
|
||||
this.setTableRows(changes['rows'].currentValue);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (changes.selectionMode && !changes.selectionMode.isFirstChange()) {
|
||||
this.resetSelection();
|
||||
this.emitRowSelectionEvent('row-unselect', null);
|
||||
}
|
||||
}
|
||||
|
||||
ngDoCheck() {
|
||||
let changes = this.differ.diff(this.rows);
|
||||
if (changes) {
|
||||
this.setTableRows(this.rows);
|
||||
}
|
||||
}
|
||||
|
||||
isPropertyChanged(property: SimpleChange): boolean {
|
||||
return property && property.currentValue ? true : false;
|
||||
}
|
||||
|
||||
convertToRowsData(rows: any []): ObjectDataRow[] {
|
||||
return rows.map(row => new ObjectDataRow(row));
|
||||
}
|
||||
|
||||
private initAndSubscribeClickStream() {
|
||||
this.unsubscribeClickStream();
|
||||
let singleClickStream = this.click$
|
||||
.buffer(this.click$.debounceTime(250))
|
||||
.map(list => list)
|
||||
.filter(x => x.length === 1);
|
||||
|
||||
this.singleClickStreamSub = singleClickStream.subscribe((obj: DataRowEvent[]) => {
|
||||
let event: DataRowEvent = obj[0];
|
||||
this.rowClick.emit(event);
|
||||
if (!event.defaultPrevented) {
|
||||
this.elementRef.nativeElement.dispatchEvent(
|
||||
new CustomEvent('row-click', {
|
||||
detail: event,
|
||||
bubbles: true
|
||||
})
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
let multiClickStream = this.click$
|
||||
.buffer(this.click$.debounceTime(250))
|
||||
.map(list => list)
|
||||
.filter(x => x.length >= 2);
|
||||
|
||||
this.multiClickStreamSub = multiClickStream.subscribe((obj: DataRowEvent[]) => {
|
||||
let event: DataRowEvent = obj[0];
|
||||
this.rowDblClick.emit(event);
|
||||
if (!event.defaultPrevented) {
|
||||
this.elementRef.nativeElement.dispatchEvent(
|
||||
new CustomEvent('row-dblclick', {
|
||||
detail: event,
|
||||
bubbles: true
|
||||
})
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private unsubscribeClickStream() {
|
||||
if (this.singleClickStreamSub) {
|
||||
this.singleClickStreamSub.unsubscribe();
|
||||
}
|
||||
if (this.multiClickStreamSub) {
|
||||
this.multiClickStreamSub.unsubscribe();
|
||||
}
|
||||
}
|
||||
|
||||
private initTable() {
|
||||
this.data = new ObjectDataTableAdapter(this.rows, this.schema);
|
||||
this.rowMenuCache = {};
|
||||
}
|
||||
|
||||
isTableEmpty() {
|
||||
return this.data === undefined || this.data === null;
|
||||
}
|
||||
|
||||
private setTableRows(rows) {
|
||||
if (this.data) {
|
||||
this.data.setRows(this.convertToRowsData(rows));
|
||||
}
|
||||
}
|
||||
|
||||
private setTableSchema() {
|
||||
if (this.columnList && this.columnList.columns) {
|
||||
this.schema = this.columnList.columns.map(c => <DataColumn> c);
|
||||
}
|
||||
|
||||
if (this.data && this.schema && this.schema.length > 0) {
|
||||
this.data.setColumns(this.schema);
|
||||
}
|
||||
}
|
||||
|
||||
onRowClick(row: DataRow, e: MouseEvent) {
|
||||
if (e) {
|
||||
e.preventDefault();
|
||||
}
|
||||
|
||||
if (row) {
|
||||
if (this.data) {
|
||||
if (this.isSingleSelectionMode()) {
|
||||
this.resetSelection();
|
||||
this.selectRow(row, true);
|
||||
this.emitRowSelectionEvent('row-select', row);
|
||||
}
|
||||
|
||||
if (this.isMultiSelectionMode()) {
|
||||
const modifier = e && (e.metaKey || e.ctrlKey);
|
||||
const newValue = modifier ? !row.isSelected : true;
|
||||
const domEventName = newValue ? 'row-select' : 'row-unselect';
|
||||
|
||||
if (!modifier) {
|
||||
this.resetSelection();
|
||||
}
|
||||
this.selectRow(row, newValue);
|
||||
this.emitRowSelectionEvent(domEventName, row);
|
||||
}
|
||||
}
|
||||
|
||||
const dataRowEvent = new DataRowEvent(row, e, this);
|
||||
this.clickObserver.next(dataRowEvent);
|
||||
}
|
||||
}
|
||||
|
||||
resetSelection(): void {
|
||||
if (this.data) {
|
||||
const rows = this.data.getRows();
|
||||
if (rows && rows.length > 0) {
|
||||
rows.forEach(r => r.isSelected = false);
|
||||
}
|
||||
this.selection.splice(0);
|
||||
}
|
||||
this.isSelectAllChecked = false;
|
||||
}
|
||||
|
||||
onRowDblClick(row: DataRow, e?: Event) {
|
||||
if (e) {
|
||||
e.preventDefault();
|
||||
}
|
||||
let dataRowEvent = new DataRowEvent(row, e, this);
|
||||
this.clickObserver.next(dataRowEvent);
|
||||
}
|
||||
|
||||
onRowKeyUp(row: DataRow, e: KeyboardEvent) {
|
||||
const event = new CustomEvent('row-keyup', {
|
||||
detail: {
|
||||
row: row,
|
||||
keyboardEvent: e,
|
||||
sender: this
|
||||
},
|
||||
bubbles: true
|
||||
});
|
||||
|
||||
this.elementRef.nativeElement.dispatchEvent(event);
|
||||
|
||||
if (event.defaultPrevented) {
|
||||
e.preventDefault();
|
||||
} else {
|
||||
if (e.key === 'Enter') {
|
||||
this.onKeyboardNavigate(row, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private onKeyboardNavigate(row: DataRow, e: KeyboardEvent) {
|
||||
if (e) {
|
||||
e.preventDefault();
|
||||
}
|
||||
|
||||
const event = new DataRowEvent(row, e, this);
|
||||
|
||||
this.rowDblClick.emit(event);
|
||||
this.elementRef.nativeElement.dispatchEvent(
|
||||
new CustomEvent('row-dblclick', {
|
||||
detail: event,
|
||||
bubbles: true
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
onColumnHeaderClick(column: DataColumn) {
|
||||
if (column && column.sortable) {
|
||||
let current = this.data.getSorting();
|
||||
let newDirection = 'asc';
|
||||
if (current && column.key === current.key) {
|
||||
newDirection = current.direction === 'asc' ? 'desc' : 'asc';
|
||||
}
|
||||
this.data.setSorting(new DataSorting(column.key, newDirection));
|
||||
}
|
||||
}
|
||||
|
||||
onSelectAllClick(e: MatCheckboxChange) {
|
||||
this.isSelectAllChecked = e.checked;
|
||||
|
||||
if (this.multiselect) {
|
||||
let rows = this.data.getRows();
|
||||
if (rows && rows.length > 0) {
|
||||
for (let i = 0; i < rows.length; i++) {
|
||||
this.selectRow(rows[i], e.checked);
|
||||
}
|
||||
}
|
||||
|
||||
const domEventName = e.checked ? 'row-select' : 'row-unselect';
|
||||
const row = this.selection.length > 0 ? this.selection[0] : null;
|
||||
|
||||
this.emitRowSelectionEvent(domEventName, row);
|
||||
}
|
||||
}
|
||||
|
||||
onCheckboxChange(row: DataRow, event: MatCheckboxChange) {
|
||||
const newValue = event.checked;
|
||||
|
||||
this.selectRow(row, newValue);
|
||||
|
||||
const domEventName = newValue ? 'row-select' : 'row-unselect';
|
||||
this.emitRowSelectionEvent(domEventName, row);
|
||||
}
|
||||
|
||||
onImageLoadingError(event: Event) {
|
||||
if (event && this.fallbackThumbnail) {
|
||||
let element = <any> event.target;
|
||||
element.src = this.fallbackThumbnail;
|
||||
}
|
||||
}
|
||||
|
||||
isIconValue(row: DataRow, col: DataColumn): boolean {
|
||||
if (row && col) {
|
||||
let value = row.getValue(col.key);
|
||||
return value && value.startsWith('material-icons://');
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
asIconValue(row: DataRow, col: DataColumn): string {
|
||||
if (this.isIconValue(row, col)) {
|
||||
let value = row.getValue(col.key) || '';
|
||||
return value.replace('material-icons://', '');
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
iconAltTextKey(value: string): string {
|
||||
return value ? 'ICONS.' + value.substring(value.lastIndexOf('/') + 1).replace(/\.[a-z]+/, '') : '';
|
||||
}
|
||||
|
||||
isColumnSorted(col: DataColumn, direction: string): boolean {
|
||||
if (col && direction) {
|
||||
let sorting = this.data.getSorting();
|
||||
return sorting && sorting.key === col.key && sorting.direction === direction;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
getContextMenuActions(row: DataRow, col: DataColumn): any[] {
|
||||
let event = new DataCellEvent(row, col, []);
|
||||
this.showRowContextMenu.emit(event);
|
||||
return event.value.actions;
|
||||
}
|
||||
|
||||
getRowActions(row: DataRow, col: DataColumn): any[] {
|
||||
const id = row.getValue('id');
|
||||
|
||||
if (!this.rowMenuCache[id]) {
|
||||
let event = new DataCellEvent(row, col, []);
|
||||
this.showRowActionsMenu.emit(event);
|
||||
this.rowMenuCache[id] = event.value.actions;
|
||||
}
|
||||
|
||||
return this.rowMenuCache[id];
|
||||
}
|
||||
|
||||
onExecuteRowAction(row: DataRow, action: any) {
|
||||
if (action.disabled || action.disabled) {
|
||||
event.stopPropagation();
|
||||
} else {
|
||||
this.executeRowAction.emit(new DataRowActionEvent(row, action));
|
||||
}
|
||||
}
|
||||
|
||||
rowAllowsDrop(row: DataRow): boolean {
|
||||
return row.isDropTarget === true;
|
||||
}
|
||||
|
||||
hasSelectionMode(): boolean {
|
||||
return this.isSingleSelectionMode() || this.isMultiSelectionMode();
|
||||
}
|
||||
|
||||
isSingleSelectionMode(): boolean {
|
||||
return this.selectionMode && this.selectionMode.toLowerCase() === 'single';
|
||||
}
|
||||
|
||||
isMultiSelectionMode(): boolean {
|
||||
return this.selectionMode && this.selectionMode.toLowerCase() === 'multiple';
|
||||
}
|
||||
|
||||
getRowStyle(row: DataRow): string {
|
||||
row.cssClass = row.cssClass ? row.cssClass : '';
|
||||
this.rowStyleClass = this.rowStyleClass ? this.rowStyleClass : '';
|
||||
return `${row.cssClass} ${this.rowStyleClass}`;
|
||||
}
|
||||
|
||||
private selectRow(row: DataRow, value: boolean) {
|
||||
if (row) {
|
||||
row.isSelected = value;
|
||||
const idx = this.selection.indexOf(row);
|
||||
|
||||
if (value) {
|
||||
if (idx < 0) {
|
||||
this.selection.push(row);
|
||||
}
|
||||
} else {
|
||||
if (idx > -1) {
|
||||
this.selection.splice(idx, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
getCellTooltip(row: DataRow, col: DataColumn): string {
|
||||
if (row && col && col.formatTooltip) {
|
||||
const result: string = col.formatTooltip(row, col);
|
||||
if (result) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private emitRowSelectionEvent(name: string, row: DataRow) {
|
||||
const domEvent = new CustomEvent(name, {
|
||||
detail: {
|
||||
row: row,
|
||||
selection: this.selection
|
||||
},
|
||||
bubbles: true
|
||||
});
|
||||
this.elementRef.nativeElement.dispatchEvent(domEvent);
|
||||
}
|
||||
}
|
@@ -0,0 +1,32 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';
|
||||
import { DataTableCellComponent } from './datatable-cell.component';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-date-cell',
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
template: `
|
||||
<ng-container>
|
||||
<span [title]="tooltip">{{value}}</span>
|
||||
</ng-container>
|
||||
`,
|
||||
encapsulation: ViewEncapsulation.None,
|
||||
host: { class: 'adf-date-cell' }
|
||||
})
|
||||
export class DateCellComponent extends DataTableCellComponent {}
|
@@ -0,0 +1,6 @@
|
||||
<div class="adf-empty-list_template">
|
||||
<ng-content select="[adf-empty-list-header]"></ng-content>
|
||||
<ng-content select="[adf-empty-list-body]"></ng-content>
|
||||
<ng-content select="[adf-empty-list-footer]"></ng-content>
|
||||
<ng-content></ng-content>
|
||||
</div>
|
@@ -0,0 +1,5 @@
|
||||
.adf-empty-list_template {
|
||||
text-align: center;
|
||||
margin-top: 20px;
|
||||
margin-bottom: 20px;
|
||||
}
|
@@ -0,0 +1,47 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { EmptyListComponent } from './empty-list.component';
|
||||
|
||||
describe('EmptyListComponentComponent', () => {
|
||||
let component: EmptyListComponent;
|
||||
let fixture: ComponentFixture<EmptyListComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [
|
||||
EmptyListComponent
|
||||
]
|
||||
}).compileComponents();
|
||||
|
||||
fixture = TestBed.createComponent(EmptyListComponent);
|
||||
component = fixture.componentInstance;
|
||||
}));
|
||||
|
||||
it('should be defined', () => {
|
||||
expect(component).toBeDefined();
|
||||
});
|
||||
|
||||
it('should render the input values', async(() => {
|
||||
fixture.detectChanges();
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
expect(fixture.nativeElement.querySelector('.adf-empty-list_template')).toBeDefined();
|
||||
});
|
||||
}));
|
||||
});
|
@@ -0,0 +1,30 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Component, Directive, ViewEncapsulation } from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-empty-list',
|
||||
styleUrls: ['./empty-list.component.scss'],
|
||||
templateUrl: './empty-list.component.html',
|
||||
encapsulation: ViewEncapsulation.None
|
||||
})
|
||||
export class EmptyListComponent {}
|
||||
|
||||
@Directive({ selector: '[adf-empty-list-header]' }) export class EmptyListHeaderDirective {}
|
||||
@Directive({ selector: '[adf-empty-list-body]' }) export class EmptyListBodyDirective {}
|
||||
@Directive({ selector: '[adf-empty-list-footer]' }) export class EmptyListFooterDirective {}
|
@@ -0,0 +1,32 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';
|
||||
import { DataTableCellComponent } from './datatable-cell.component';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-filesize-cell',
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
template: `
|
||||
<ng-container>
|
||||
<span [title]="tooltip">{{ value | adfFileSize }}</span>
|
||||
</ng-container>
|
||||
`,
|
||||
encapsulation: ViewEncapsulation.None,
|
||||
host: { class: 'adf-filesize-cell' }
|
||||
})
|
||||
export class FileSizeCellComponent extends DataTableCellComponent {}
|
@@ -0,0 +1,132 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { RouterTestingModule } from '@angular/router/testing';
|
||||
import {
|
||||
ObjectDataColumn,
|
||||
ObjectDataTableAdapter
|
||||
} from './../../data/index';
|
||||
import { LocationCellComponent } from './location-cell.component';
|
||||
|
||||
describe('LocationCellComponent', () => {
|
||||
let component: LocationCellComponent;
|
||||
let fixture: ComponentFixture<LocationCellComponent>;
|
||||
let dataTableAdapter: ObjectDataTableAdapter;
|
||||
let rowData;
|
||||
let columnData;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [
|
||||
RouterTestingModule
|
||||
],
|
||||
declarations: [
|
||||
LocationCellComponent
|
||||
]
|
||||
}).compileComponents();
|
||||
|
||||
fixture = TestBed.createComponent(LocationCellComponent);
|
||||
component = fixture.componentInstance;
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
rowData = {
|
||||
name: '1',
|
||||
path: {
|
||||
elements: [
|
||||
{ id: '1', name: 'path' },
|
||||
{ id: '2', name: 'to' },
|
||||
{ id: '3', name: 'location' }
|
||||
],
|
||||
name: '/path/to/location'
|
||||
}
|
||||
};
|
||||
|
||||
columnData = { format: '/somewhere', type: 'location', key: 'path'};
|
||||
|
||||
dataTableAdapter = new ObjectDataTableAdapter(
|
||||
[rowData],
|
||||
[ new ObjectDataColumn(columnData) ]
|
||||
);
|
||||
|
||||
component.link = [];
|
||||
component.column = dataTableAdapter.getColumns()[0];
|
||||
component.data = dataTableAdapter;
|
||||
component.row = dataTableAdapter.getRows()[0];
|
||||
});
|
||||
|
||||
it('should set displayText', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(component.displayText).toBe('location');
|
||||
});
|
||||
|
||||
it('should set tooltip', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(component.tooltip).toEqual(rowData.path.name);
|
||||
});
|
||||
|
||||
it('should set router link', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(component.link).toEqual([ columnData.format , rowData.path.elements[2].id ]);
|
||||
});
|
||||
|
||||
it('should not setup cell when path has no data', () => {
|
||||
rowData.path = {};
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(component.displayText).toBe('');
|
||||
expect(component.tooltip).toBeUndefined();
|
||||
expect(component.link).toEqual([]);
|
||||
});
|
||||
|
||||
it('should not setup cell when path is missing required properties', () => {
|
||||
rowData.path = { someProp: '' };
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(component.displayText).toBe('');
|
||||
expect(component.tooltip).toBeUndefined();
|
||||
expect(component.link).toEqual([]);
|
||||
});
|
||||
|
||||
it('should not setup cell when path data is missing one of the property', () => {
|
||||
rowData.path = {
|
||||
name: 'some-name'
|
||||
};
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(component.displayText).toBe('');
|
||||
expect(component.tooltip).toBeUndefined();
|
||||
expect(component.link).toEqual([]);
|
||||
|
||||
rowData.path = {
|
||||
elements: []
|
||||
};
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(component.displayText).toBe('');
|
||||
expect(component.tooltip).toBeUndefined();
|
||||
expect(component.link).toEqual([]);
|
||||
});
|
||||
});
|
@@ -0,0 +1,61 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { ChangeDetectionStrategy, Component, Input, OnInit, ViewEncapsulation } from '@angular/core';
|
||||
import { PathInfoEntity } from 'alfresco-js-api';
|
||||
import { DataTableCellComponent } from './datatable-cell.component';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-location-cell',
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
template: `
|
||||
<ng-container>
|
||||
<a href="" [title]="tooltip" [routerLink]="link">
|
||||
{{ displayText }}
|
||||
</a>
|
||||
</ng-container>
|
||||
`,
|
||||
encapsulation: ViewEncapsulation.None,
|
||||
host: { class: 'adf-location-cell' }
|
||||
})
|
||||
export class LocationCellComponent extends DataTableCellComponent implements OnInit {
|
||||
|
||||
@Input()
|
||||
link: any[];
|
||||
|
||||
@Input()
|
||||
displayText: string = '';
|
||||
|
||||
/** @override */
|
||||
ngOnInit() {
|
||||
if (!this.value && this.column && this.column.key && this.row && this.data) {
|
||||
const path: PathInfoEntity = this.data.getValue(this.row, this.column);
|
||||
|
||||
if (path && path.name && path.elements) {
|
||||
this.value = path;
|
||||
this.displayText = path.name.split('/').pop();
|
||||
|
||||
if (!this.tooltip) {
|
||||
this.tooltip = path.name;
|
||||
}
|
||||
|
||||
const parent = path.elements[path.elements.length - 1];
|
||||
this.link = [ this.column.format, parent.id ];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|