提交 21ec496d 编写于 作者: ibiz's avatar ibiz

init

上级 42a8247a

要显示的变更太多。

为了保持性能,仅显示文件中的 1000/1000+

node_modules
.DS_Store
# VUE_R2
#### 项目介绍
{**以下是码云平台说明,您可以替换为您的项目简介**
码云是开源中国推出的基于 Git 的代码托管平台(同时支持 SVN)。专为开发者提供稳定、高效、安全的云端软件开发协作平台
无论是个人、团队、或是企业,都能够用码云实现代码托管、项目管理、协作开发。企业项目请看 [https://gitee.com/enterprises](https://gitee.com/enterprises)}
#### 软件架构
软件架构说明
#### 安装教程
1. xxxx
2. xxxx
3. xxxx
#### 使用说明
1. xxxx
2. xxxx
3. xxxx
#### 参与贡献
1. Fork 本项目
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request
#### 码云特技
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com)
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目
4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目
5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
\ No newline at end of file
{
"compilerOptions": {
"removeComments": false,
"preserveConstEnums": true,
"outDir": "./dist",
"target": "es5",
"lib": [
"es2017",
"dom"
],
"alwaysStrict": true
},
"include": [
"src/activiti/**/*"
],
"exclude": [
"node_modules",
"**/*.spec.ts"
]
}
\ No newline at end of file
此差异已折叠。
此差异已折叠。
"use strict";
Vue.component('ibiz-activiti-full-screen', {
template: "\n <div style=\"width:100%; height:100%;\">\n <iframe width=\"100%\" height=\"100%\" ref=\"ibizactivitifullscreen\" :src=\"url\" frameborder=\"0\" ></iframe>\n </div>\n ",
props: ['params'],
data: function () {
var data = {
wfDesign: new IBizWFDesignField2({ vue: this, workFlow: this.params.workFlow }),
$iframeIsLoadEnd: false,
workflowDesign: null,
};
var url = "../../../packages/assets/plugins/static/activiti/index.html?fsmode=true&_=" + data.wfDesign.newGuid();
Object.assign(data, { url: url });
if (this.params && this.params.activitiModel) {
Object.assign(data, { activitiModel: this.params.activitiModel });
}
return data;
},
mounted: function () {
this.designInit();
if (this.wfDesign) {
this.wfDesign.setValue(this.activitiModel);
}
},
methods: {
designInit: function () {
var _this = this;
var iframe = this.$refs.ibizactivitifullscreen;
if (!iframe) {
return;
}
this.workflowDesign = iframe.contentWindow;
if (this.workflowDesign) {
this.workflowDesign.onload = function () {
_this.wfDesign.setFlowFrame(_this.workflowDesign);
_this.wfDesign.onFlowFrameLoad();
_this.$iframeIsLoadEnd = true;
// this.wfDesign.setValue(this.activitiModel);
};
this.workflowDesign.onSelectionChanged = function () {
var activitiModel = _this.wfDesign.getValue();
_this.$emit('dataChange', { ret: 'OK', activitiModel: activitiModel });
};
this.isDesignInitEnd = true;
}
else {
console.error('设计工具初始化失败');
}
}
}
});
"use strict";
var _this = this;
Vue.component('ibiz-activiti', {
template: "\n <div style=\"width:100%; height:600px;\">\n <iframe width=\"100%\" height=\"100%\" ref=\"ibizactiviti\" :src=\"url\" frameborder=\"0\"></iframe>\n </div>\n ",
props: ['field', 'form'],
data: function () {
var data = {
wfDesign: new IBizWFDesignField2({ vue: this, workFlow: this.field.editorParams }),
activitimodel: null,
$iframeIsLoadEnd: false,
formLoaded: false,
};
var url = "../../../packages/assets/plugins/static/activiti/index.html?_=" + data.wfDesign.newGuid();
Object.assign(data, { url: url });
return data;
},
mounted: function () {
var _this = this;
this.wfDesign.wfDataChange().subscribe(function (res) {
_this.activitimodel = res;
_this.onChangeCallback(_this.activitimodel);
});
this.wfDesign.onFullScreen().subscribe(function (model) {
var subject = new rxjs.Subject();
var view = {
subject: subject,
viewname: 'ibiz-activiti-full-screen',
modalviewname: 'ibiz-activiti-full-screen',
title: '工作流设计',
viewparam: { activitiModel: model, workFlow: _this.field.editorParams },
};
_this.$root.addModal(view);
subject.subscribe(function (result) {
if (result && Object.is(result.ret, 'OK')) {
console.log(result);
_this.wfDesign.setValue(result.activitiModel);
}
});
});
if (this.field) {
this.writeValue(this.field.getValue());
this.field.getValue = function () {
if (_this.$iframeIsLoadEnd && _this.activitimodel) {
_this.activitimodel = _this.wfDesign.getValue();
_this.field.setValue(_this.activitimodel);
return _this.activitimodel;
}
return undefined;
};
}
},
activated: function () {
console.log(123123123);
this.initActiviti();
},
methods: {
initActiviti: function () {
var _this = this;
var iframe = this.$refs.ibizactiviti;
if (iframe) {
this.workflowDesign = iframe.contentWindow;
if (this.workflowDesign) {
this.workflowDesign.editorOnLoad = function () {
console.log('form before ');
if (_this.formLoaded) {
console.log('form after ');
_this.wfDesign.setFlowFrame(_this.workflowDesign);
_this.wfDesign.onFlowFrameLoad();
_this.$iframeIsLoadEnd = true;
delete _this.workflowDesign.editorOnLoad;
}
};
}
else {
console.error('设计工具初始化失败');
}
}
if (this.form) {
this.form.on('FORMLOADED').subscribe(function () {
// this.formLoaded = true;
});
}
},
onTouchedCallback: function () {
return function () { };
},
onChangeCallback: function (data) {
if (_this.field) {
_this.field.setValue(data);
}
},
writeValue: function (value) {
if (value) {
this.activitimodel = value;
if (this.wfDesign) {
this.wfDesign.setValue(this.activitimodel);
}
}
},
registerOnChange: function (fn) {
this.onChangeCallback = fn;
},
registerOnTouched: function (fn) {
this.onTouchedCallback = fn;
},
},
watch: {
'field.value': function (newVal, oldVal) {
this.writeValue(newVal);
if (!Object.is(newVal, '')) {
this.formLoaded = true;
console.log(newVal);
}
}
},
});
"use strict";
/**
* 工作流编辑服务
*
* @class WorkFlowEditService
*/
var WorkFlowEditService = /** @class */ (function () {
/**
* Creates an instance of WorkFlowEditService.
* 创建 WorkFlowEditService 实例
*
* @param {*} opts
* @memberof WorkFlowEditService
*/
function WorkFlowEditService(opts) {
if (opts === void 0) { opts = {}; }
/**
* vue 对象
*
* @private
* @type {*}
* @memberof WorkFlowEditService
*/
this.$vue = null;
/**
*
*
* @private
* @type {*}
* @memberof WorkFlowEditService
*/
this.workFlow = {};
this.$vue = opts.vue;
Object.assign(this.workFlow, opts.workFlow);
}
WorkFlowEditService.prototype.openProcessEditView = function (viewType, opt) {
if (opt === void 0) { opt = {}; }
return this.openProcess(viewType, opt);
};
WorkFlowEditService.prototype.openProcess = function (viewType, opt) {
var subject = new rxjs.Subject();
if (!this.$vue) {
return null;
}
var view = { subject: subject, viewparam: opt.viewParam };
if (Object.is(viewType, 'START') && this.workFlow.START && Object.keys(this.workFlow.START).length > 0) {
Object.assign(view, this.workFlow.START);
this.$vue.$root.addModal(view);
}
else if (Object.is(viewType, 'INTERACTIVE') && this.workFlow.INTERACTIVE && Object.keys(this.workFlow.INTERACTIVE).length > 0) {
Object.assign(view, this.workFlow.INTERACTIVE);
this.$vue.$root.addModal(view);
}
else if (Object.is(viewType, 'PROCESS') && this.workFlow.PROCESS && Object.keys(this.workFlow.PROCESS).length > 0) {
Object.assign(view, this.workFlow.PROCESS);
this.$vue.$root.addModal(view);
}
else if (Object.is(viewType, 'END') && this.workFlow.END && Object.keys(this.workFlow.END).length > 0) {
Object.assign(view, this.workFlow.END);
this.$vue.$root.addModal(view);
}
else if (Object.is(viewType, 'EMBED') && this.workFlow.EMBED && Object.keys(this.workFlow.EMBED).length > 0) {
Object.assign(view, this.workFlow.EMBED);
this.$vue.$root.addModal(view);
}
else if (Object.is(viewType, 'PARALLEL') && this.workFlow.PARALLEL && Object.keys(this.workFlow.PARALLEL).length > 0) {
Object.assign(view, this.workFlow.PARALLEL);
this.$vue.$root.addModal(view);
}
else if (Object.is(viewType, 'PARALLELGATEWAY') && this.workFlow.PARALLELGATEWAY && Object.keys(this.workFlow.PARALLELGATEWAY).length > 0) {
Object.assign(view, this.workFlow.PARALLELGATEWAY);
this.$vue.$root.addModal(view);
}
else if (Object.is(viewType, 'EXCLUSIVEGATEWAY') && this.workFlow.EXCLUSIVEGATEWAY && Object.keys(this.workFlow.EXCLUSIVEGATEWAY).length > 0) {
Object.assign(view, this.workFlow.EXCLUSIVEGATEWAY);
this.$vue.$root.addModal(view);
}
else if (Object.is(viewType, 'INCLUSIVEGATEWAY') && this.workFlow.INCLUSIVEGATEWAY && Object.keys(this.workFlow.INCLUSIVEGATEWAY).length > 0) {
Object.assign(view, this.workFlow.INCLUSIVEGATEWAY);
this.$vue.$root.addModal(view);
}
else if (Object.is(viewType, 'TIMEREVENT') && this.workFlow.TIMEREVENT && Object.keys(this.workFlow.TIMEREVENT).length > 0) {
Object.assign(view, this.workFlow.TIMEREVENT);
this.$vue.$root.addModal(view);
}
return subject;
};
WorkFlowEditService.prototype.openLinkEditView = function (viewType, opt) {
if (opt === void 0) { opt = {}; }
return this.openLink(viewType, opt);
};
WorkFlowEditService.prototype.openLink = function (viewType, opt) {
if (!this.$vue) {
return null;
}
var subject = new rxjs.Subject();
var view = { subject: subject, viewparam: opt.viewParam };
if (Object.is(viewType, 'ROUTE') && this.workFlow.ROUTE && Object.keys(this.workFlow.ROUTE).length > 0) {
Object.assign(view, this.workFlow.ROUTE);
this.$vue.$root.addModal(view);
}
else if (Object.is(viewType, 'IAACTION') && this.workFlow.IAACTION && Object.keys(this.workFlow.IAACTION).length > 0) {
Object.assign(view, this.workFlow.IAACTION);
this.$vue.$root.addModal(view);
}
else if (Object.is(viewType, 'TIMEOUT') && this.workFlow.TIMEOUT && Object.keys(this.workFlow.TIMEOUT).length > 0) {
Object.assign(view, this.workFlow.TIMEOUT);
this.$vue.$root.addModal(view);
}
else if (Object.is(viewType, 'WFRETURN') && this.workFlow.WFRETURN && Object.keys(this.workFlow.WFRETURN).length > 0) {
Object.assign(view, this.workFlow.WFRETURN);
this.$vue.$root.addModal(view);
}
return subject;
};
WorkFlowEditService.prototype.openEditTextAnnotationView = function (opt) {
return;
};
/**
* 单例变量声明
*
* @private
* @static
* @type {WorkFlowEditService}
* @memberof WorkFlowEditService
*/
WorkFlowEditService.workFlowEditService = null;
return WorkFlowEditService;
}());
"use strict";
var IBizActivitiUtil = /** @class */ (function () {
function IBizActivitiUtil() {
}
/**
* 将文本格式的xml转换为dom模式
*
* @static
* @param {string} strXml
* @returns {Document}
* @memberof IBizActivitiUtil
*/
IBizActivitiUtil.parseXML = function (strXml) {
if (strXml) {
return new DOMParser().parseFromString(strXml, 'text/xml');
}
};
/**
* 将xml转换为object对象
*
* @static
* @param {*} node
* @param {*} [obj={}]
* @memberof IBizActivitiUtil
*/
IBizActivitiUtil.loadXMLNode = function (node, obj) {
if (obj === void 0) { obj = {}; }
if (node && node.attributes) {
var arr = node.attributes;
for (var i = 0; i < arr.length; i++) {
var A = arr.item(i).name;
var B = arr.item(i).value;
A = A.toLowerCase();
obj[A] = B;
}
}
};
/**
* 将object转换为xml对象
*
* @static
* @param {*} XML
* @param {*} obj
* @memberof IBizActivitiUtil
*/
IBizActivitiUtil.saveXMLNode = function (XML, obj) {
var proName = '';
for (proName in obj) {
var value = obj[proName];
if (!value || value instanceof Object || typeof (value) === 'function') {
continue;
}
var proValue = obj[proName].toString();
if (proValue !== '') {
XML.attrib(proName, proValue);
}
}
};
return IBizActivitiUtil;
}());
"use strict";
/**
* xml工具类
*
* @class IBizXMLWriter
*/
var IBizXMLWriter = /** @class */ (function () {
function IBizXMLWriter() {
/**
*
*
* @type {any[]}
* @memberof IBizXMLWriter
*/
this.XML = [];
/**
*
*
* @type {any[]}
* @memberof IBizXMLWriter
*/
this.nodes = [];
/**
*
*
* @memberof IBizXMLWriter
*/
this.State = '';
}
/**
*
*
* @param {any} Str
* @returns
* @memberof XMLWriter
*/
IBizXMLWriter.prototype.formatXML = function (Str) {
if (Str) {
return Str.replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\n/g, '&#xA;').replace(/\r/g, '&#xD;');
}
return '';
};
/**
*
*
* @param {any} Name
* @returns
* @memberof XMLWriter
*/
IBizXMLWriter.prototype.beginNode = function (Name) {
if (!Name) {
return;
}
if (this.State === 'beg') {
this.XML.push('>');
}
this.State = 'beg';
this.nodes.push(Name);
this.XML.push('<' + Name);
};
/**
*
*
* @memberof XMLWriter
*/
IBizXMLWriter.prototype.endNode = function () {
if (this.State === 'beg') {
this.XML.push('/>');
this.nodes.pop();
}
else if (this.nodes.length > 0) {
this.XML.push('</' + this.nodes.pop() + '>');
}
this.State = '';
};
/**
*
*
* @param {any} Name
* @param {any} Value
* @returns
* @memberof XMLWriter
*/
IBizXMLWriter.prototype.attrib = function (Name, Value) {
if (this.State !== 'beg' || !Name) {
return;
}
this.XML.push(' ' + Name + '="' + this.formatXML(Value) + '"');
};
/**
*
*
* @param {any} Value
* @memberof XMLWriter
*/
IBizXMLWriter.prototype.writeString = function (Value) {
if (this.State === 'beg') {
this.XML.push('>');
}
this.XML.push(this.formatXML(Value));
this.State = '';
};
/**
*
*
* @param {any} Name
* @param {any} Value
* @returns
* @memberof XMLWriter
*/
IBizXMLWriter.prototype.node = function (Name, Value) {
if (!Name) {
return;
}
if (this.State === 'beg') {
this.XML.push('>');
}
this.XML.push((Value === '' || !Value) ? '<' + Name + '/>' : '<' + Name + '>' + this.formatXML(Value) + '</' + Name + '>');
this.State = '';
};
/**
*
*
* @memberof XMLWriter
*/
IBizXMLWriter.prototype.close = function () {
while (this.nodes.length > 0) {
this.endNode();
}
this.State = 'closed';
};
/**
*
*
* @returns
* @memberof XMLWriter
*/
IBizXMLWriter.prototype.toString = function () { return this.XML.join(''); };
return IBizXMLWriter;
}());
{
"compilerOptions": {
"removeComments": false,
"preserveConstEnums": true,
"outDir": "./dist",
"target": "es5",
"lib": [
"es2017",
"dom"
],
"alwaysStrict": true
},
"include": [
"src/apputil/**/*"
],
"exclude": [
"node_modules",
"**/*.spec.ts"
]
}
\ No newline at end of file
"use strict";
Vue.component("ibiz-theme", {
template: "\n <div>\n <Poptip title=\"\u4E3B\u9898\" popper-class=\"ibiz-theme\" placement=\"bottom-end\">\n <a>\n <Icon class=\"ibiz-theme-icon\" type=\"md-settings\"/>\n </a>\n <template slot=\"content\">\n <div class=\"ibiz-theme-color\">\n <template v-for=\"(theme,index) of defaultThemes\">\n <Tooltip :content=\"theme.title\">\n <div class=\"ibiz-theme-item\" :class=\"{active: selectTheme==theme.tag}\" :style=\"{background: theme.color}\" @click=\"themeChange(theme.tag)\"></div>\n </Tooltip>\n </template>\n <template v-for=\"(theme,index) of themes\">\n <Tooltip :content=\"theme.title\">\n <div :key=\"index\" class=\"ibiz-theme-item\" :class=\"{active: selectTheme==theme.tag}\" :style=\"{background: theme.color}\" @click=\"themeChange(theme.tag)\"></div>\n </Tooltip>\n </template>\n </div>\n <div>\n <Form :label-width=\"60\" label-position=\"left\">\n <FormItem label=\"\u5B57\u4F53\">\n <Select :value=\"selectFont\" size=\"small\" style=\"width:100px\" @on-change=\"fontChange\" transfer>\n <Option v-for=\"font in fontFamilys\" :value=\"font.value\" :key=\"font.value\">{{ font.label }}</Option>\n </Select>\n </FormItem>\n </Form>\n </div>\n </template>\n </Poptip>\n </div>\n ",
data: function () {
var data = {
selectTheme: '',
defaultThemes: [
{
tag: 'ibiz-default-theme',
title: 'light',
color: '#f6f6f6',
},
{
title: 'Blue',
tag: 'ibiz_theme_blue',
color: '#6ba1d1'
},
{
title: 'Dark Blue',
tag: 'ibiz_theme_darkblue',
color: '#606d80'
}
],
themes: IBizTheme,
selectFont: '',
fontFamilys: [
{
label: '微软雅黑',
value: 'Microsoft YaHei',
},
{
label: '黑体',
value: 'SimHei',
},
{
label: '幼圆',
value: 'YouYuan',
},
]
};
return data;
},
mounted: function () {
var win = window;
if (win.iBizApp) {
this.selectTheme = win.iBizApp.getThemeClass();
this.selectFont = win.iBizApp.getFontFamily();
}
},
methods: {
'themeChange': function (val) {
if (!Object.is(this.activeTheme, val)) {
this.selectTheme = val;
this.$root.setThemeClass(val);
}
},
'fontChange': function (val) {
if (!Object.is(this.selectFont, val)) {
this.selectFont = val;
this.$root.setFontFamily(val);
}
}
}
});
"use strict";
Vue.component('ibiz-header-user', {
template: "\n <div class=\"ibiz-header-user\">\n <dropdown @on-click=\"userSelect($event)\">\n <div style=\"font-size: 15px;cursor: pointer;margin-right: 10px;\">\n <span>{{ user.name }}</span>\n <Avatar :src=\"user.avatar\" />\n </div>\n <dropdown-menu slot=\"list\" style=\"font-size: 15px !important;\">\n <dropdown-item name=\"insrt\" style=\"font-size: 15px !important;\">\n <span> <i aria-hidden=\"true\" class=\"fa fa-cogs\" style=\"margin-right: 8px;\"></i></span>\n <span>\u5B89\u88C5\u4F9D\u8D56</span>\n </dropdown-item>\n <dropdown-item name=\"logout\" style=\"font-size: 15px !important;\">\n <span> <i aria-hidden=\"true\" class=\"fa fa-cogs\" style=\"margin-right: 8px;\"></i></span>\n <span>\u9000\u51FA\u767B\u9646</span>\n </dropdown-item>\n </dropdown-menu>\n </dropdown>\n </div>\n ",
data: function () {
var data = {
iBizHttp: IBizHttp.getInstance(),
iBizNotification: IBizNotification.getInstance(),
user: {
name: '匿名访问',
avatar: '../../../packages/assets/img/avatar.png',
}
};
return data;
},
mounted: function () {
var _this = this;
_this.iBizHttp.post("" + IBizEnvironment.AppLogin, { srfaction: 'getcuruserinfo' }).subscribe(function (result) {
if (result.ret === 0) {
if (Object.keys(result.data).length !== 0) {
var _data = {};
Object.assign(_data, result.data);
Object.assign(_this.user, {
name: _data.username,
email: _data.loginname,
id: _data.userid,
time: +new Date
});
}
}
}, function (error) {
void 0;
});
},
methods: {
installRTData: function () {
var _this = this;
_this.iBizHttp.post("" + IBizEnvironment.InstallRTData, {}).subscribe(function (result) {
if (result.ret === 0) {
_this.iBizNotification.success('成功', result.info);
}
else {
_this.iBizNotification.error('错误', result.info);
}
}, function (error) {
_this.iBizNotification.error('错误', error.info);
});
},
logout: function () {
var curUrl = window.location.href;
if (curUrl.indexOf('#') !== -1) {
curUrl = curUrl.substring(0, curUrl.indexOf('#'));
}
curUrl = decodeURIComponent(curUrl);
// window.location.href = `/${IBizEnvironment.BaseUrl}${IBizEnvironment.Logout}?RU=${curUrl}`;
window.location.href = "/" + IBizEnvironment.BaseUrl + IBizEnvironment.Logout;
},
userSelect: function (name) {
var _this_1 = this;
void 0;
if (Object.is(name, 'insrt')) {
this.installRTData();
}
else if (Object.is(name, 'logout')) {
this.$Modal.confirm({
title: '确认要退出登陆?',
onOk: function () {
_this_1.logout();
}
});
}
}
}
});
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
node_modules/
bower_components/
web-root/
src/ts/*.js
src/ts/**/*.js
.idea/encodings.xml
.idea/misc.xml
.idea/modules.xml
.idea/vcs.xml
.idea/workspace.xml
ag-grid.iml
.DS_Store
.sass-cache
.cache-loader
package-lock.json
module.tgz
dist/lib/**/*ngsummary.json
*ngsummary.json
!dist/
.sass-cache
.cache-loader
.prettierrc
.sasslintrc
.travis.yml
github-banner.png
github-grid-demo.jpg
gulpfile.js
tsconfig.json
tsconfig-main.json
tslint.json
tslint-fix.json
webpack.config.js
\ No newline at end of file
# vim: ft=yaml
printWidth: 180
tabWidth: 4
semi: true
rules:
hex-length:
- 0
variable-name-format:
- 0
no-color-literals:
- 0
force-pseudo-nesting:
- 0
force-element-nesting:
- 0
force-attribute-nesting:
- 0
no-qualifying-elements:
- 0
leading-zero:
- 0
no-important:
- 0
quotes:
- 0
indentation:
- 0
-
size: 4
language: node_js
node_js:
- "6"
branches:
only:
- latest
\ No newline at end of file
- [Question or Problem?](#question)
- [Issues and Bugs](#issue)
- [Feature Requests](#feature)
- [Submission Guidelines](#submit)
- [Coding Rules](#rules)
- [Commit Message Guidelines](#commit)
- [Signing the CLA](#cla)
## <a name="question"></a> Got a Question or Problem?
Please, do not open issues for the general support questions as we want to keep GitHub issues for bug reports and feature requests. You've got much better chances of getting your question answered on [StackOverflow](https://stackoverflow.com/questions/tagged/ag-grid) where the questions should be tagged with tag `ag-grid`,
or on our [Forum](https://ag-grid.com/forum)
If you're using the Enterprise version of ag-Grid (ag-grid-enterprise), then the [Members Forum](https://ag-grid.com/forum/forumdisplay.php?fid=5) is the best place to ask - you'll get a much quicker response there. Please contact accounts@ag-grid.com for access.
To save your and our time we will be systematically closing all the issues that are requests for general support (for ag-Grid Free) and redirecting people to StackOverflow.
## <a name="issue"></a> Found a Bug?
If you find a bug in the source code, you can help us by
[submitting an issue](#submit-issue) to our [GitHub Repository][github].
## <a name="feature"></a> Missing a Feature?
You can *request* a new feature by [submitting an issue](#submit-issue) to our GitHub
Repository.
## <a name="submit"></a> Submission Guidelines
### <a name="submit-issue"></a> Submitting an Issue
Before you submit an issue, please search the issue tracker, maybe an issue for your problem already exists and the discussion might inform you of workarounds readily available.
We want to fix all the issues as soon as possible, but before fixing a bug we need to reproduce and confirm it. In order to reproduce bugs we will systematically ask you to provide a minimal reproduction scenario using http://plnkr.co. Having a live, reproducible scenario gives us wealth of important information without going back & forth to you with additional questions like:
- version of ag-Grid used
- 3rd-party libraries and their versions
- and most importantly - a use-case that fails
A minimal reproduce scenario using http://plnkr.co/ allows us to quickly confirm a bug (or point out coding problem) as well as confirm that we are fixing the right problem. If plunker is not a suitable way to demonstrate the problem (for example for issues related to our npm packaging), please create a standalone git repository demonstrating the problem.
We will be insisting on a minimal reproduce scenario in order to save maintainers time and ultimately be able to fix more bugs. Interestingly, from our experience users often find coding problems themselves while preparing a minimal plunk. We understand that sometimes it might be hard to extract essentials bits of code from a larger code-base but we really need to isolate the problem before we can fix it.
You can file new issues by filling out our [new issue form](https://github.com/ag-grid/ag-grid/issues/new).
PR's on new features **are not** generally accepted.
PR's on small bug fixes **are** generally accepted.
[github]: https://github.com/ag-grid/ag-grid
[jsfiddle]: http://jsfiddle.net
[plunker]: http://plnkr.co/edit
[runnable]: http://runnable.com
[stackoverflow]: http://stackoverflow.com/questions/tagged/ag-grid
The MIT License
Copyright (c) 2015-2016 AG GRID LTD
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
![alt text](./github-banner.png "Logo Title Text 1")
[![CDNJS](https://img.shields.io/cdnjs/v/ag-grid.svg)](https://cdnjs.com/libraries/ag-grid)
[![npm](https://img.shields.io/npm/dm/ag-grid.svg)](https://www.npmjs.com/package/ag-grid)
[![npm](https://img.shields.io/npm/dt/ag-grid.svg)](https://www.npmjs.com/package/ag-grid)
ag-Grid
------
ag-Grid is a fully-featured and highly customizable JavaScript data grid.
It delivers [outstanding performance](https://www.ag-grid.com/example.php?utm_source=ag-grid-readme&utm_medium=repository&utm_campaign=github#/performance/1), has no 3rd party dependencies and [integrates smoothly with all major JavaScript frameworks](https://www.ag-grid.com/javascript-grid-getting-started?utm_source=ag-grid-readme&utm_medium=repository&utm_campaign=github). Here's how our grid looks like with multiple filters and grouping enabled:
![alt text](./github-grid-demo.jpg "Logo Title Text 1")
Features
--------------
Besides the standard set of features you'd expect from any grid:
* Column Interactions (resize, reorder, and pin columns)
* Pagination
* Sorting
* Row Selection
Here are some of the features that make ag-Grid stand out:
* Grouping / Aggregation*
* Custom Filtering
* In-place Cell Editing
* Records Lazy Loading *
* Server-Side Records Operations *
* Live Stream Updates
* Hierarchical Data Support & Tree View *
* Customizable Appearance
* Customizable Cell Contents
* Excel-like Pivoting *
* State Persistence
* Keyboard navigation
* Data Export to CSV
* Data Export to Excel *
* Row Reordering
* Copy / Paste
* Column Spanning
* Pinned Rows
* Full Width Rows
\* The features marked with an asterisk are available in the [enterprise version](https://www.ag-grid.com/license-pricing.php?utm_source=ag-grid-readme&utm_medium=repository&utm_campaign=github) only.
Check out [developers documentation](https://www.ag-grid.com/documentation-main/documentation.php?utm_source=ag-grid-readme&utm_medium=repository&utm_campaign=github) for a complete list of features or visit [our official docs](https://www.ag-grid.com/features-overview?utm_source=ag-grid-readme&utm_medium=repository&utm_campaign=github) for tutorials and feature demos.
Looking for a framework specific solution?
--------------
* [Get Started with AngularJS](https://www.ag-grid.com/best-angularjs-data-grid?utm_source=ag-grid-readme&utm_medium=repository&utm_campaign=github)
* [Get Started with Angular](https://www.ag-grid.com/angular-getting-started?utm_source=ag-grid-readme&utm_medium=repository&utm_campaign=github)
* [Get Started with React](https://www.ag-grid.com/react-getting-started?utm_source=ag-grid-readme&utm_medium=repository&utm_campaign=github)
* [Get Started with Vue](https://www.ag-grid.com/vue-getting-started?utm_source=ag-grid-readme&utm_medium=repository&utm_campaign=github)
* [Get Started with WebComponents](https://www.ag-grid.com/best-web-component-data-grid?utm_source=ag-grid-readme&utm_medium=repository&utm_campaign=github)
Usage Overview
--------------
#### Install dependencies
$ npm i --save ag-grid
### Add a placeholder to HTML
<div id="myGrid" style="height: 150px;width: 600px" class="ag-theme-balham"></div>
#### Import the grid and styles
import {Grid} from "ag-grid/main";
import "ag-grid/dist/styles/ag-grid.css";
import "ag-grid/dist/styles/ag-theme-balham.css";
### Set configuration
const gridOptions = {
columnDefs: [
{headerName: 'Make', field: 'make'},
{headerName: 'Model', field: 'model'},
{headerName: 'Price', field: 'price'}
],
rowData: [
{make: 'Toyota', model: 'Celica', price: 35000},
{make: 'Ford', model: 'Mondeo', price: 32000},
{make: 'Porsche', model: 'Boxter', price: 72000}
]
};
### Initialize the grid
let eGridDiv = document.querySelector('#myGrid');
new Grid(eGridDiv, this.gridOptions);
For more information on how to integrate the grid into your project see [TypeScript - Building with Webpack 2](https://www.ag-grid.com/ag-grid-typescript-webpack-2?utm_source=ag-grid-readme&utm_medium=repository&utm_campaign=github).
Issue Reporting
----------
If you have found a bug, please report them at this repository `issues` section. If you're using Enterprise version please use the private ticketing system to do that. For more information on support check out our [dedicated page](https://www.ag-grid.com/support.php?utm_source=ag-grid-readme&utm_medium=repository&utm_campaign=github).
Asking Questions
-------------
Look for similar problems on [StackOverflow](https://stackoverflow.com/questions/tagged/ag-grid) using the `ag-grid` tag. If nothing seems related, post a new message there. Do not use GitHub issues to ask questions.
Contributing
------------
ag-Grid is developed by a team of co-located developers in London. If you want to join the team check out our [jobs listing](https://www.ag-grid.com/ag-grid-jobs-board?utm_source=ag-grid-readme&utm_medium=repository&utm_campaign=github) or send your application to info@ag-grid.com.
License
------------------
This project is licensed under the MIT license. See the [LICENSE file](./LICENSE.txt) for more info.
{
"name": "ag-grid-community",
"version": "19.1.4",
"homepage": "http://www.ag-grid.com/",
"authors": [
"Niall Crosby <niall.crosby@ag-grid.com>"
],
"description": "Advanced Javascript Datagrid. Supports raw Javascript, React, AngularJS 1.x, AngularJS 2.0 and Web Components",
"main": [
"./main.js"
],
"moduleType": [
"node"
],
"keywords": [
"web-components",
"grid",
"data",
"table",
"react",
"reactjs",
"angular",
"angularjs"
],
"license": "MIT",
"ignore": [
"**/.*",
"node_modules",
"test",
"tests"
],
"devDependencies": {},
"dependencies": {}
}
\ No newline at end of file
// Type definitions for ag-grid-community v19.1.4
// Project: http://www.ag-grid.com/
// Definitions by: Niall Crosby <https://github.com/ag-grid/>
import { GridPanel } from "./gridPanel/gridPanel";
import { AgEvent, ColumnEvent } from "./events";
import { Column } from "./entities/column";
export declare class AlignedGridsService {
private gridOptionsWrapper;
private columnController;
private eventService;
private logger;
private gridPanel;
private consuming;
private setBeans;
registerGridComp(gridPanel: GridPanel): void;
init(): void;
private fireEvent;
private onEvent;
private fireColumnEvent;
private fireScrollEvent;
private onScrollEvent;
getMasterColumns(event: ColumnEvent): Column[];
getColumnIds(event: ColumnEvent): string[];
onColumnEvent(event: AgEvent): void;
private processGroupOpenedEvent;
private processColumnEvent;
}
//# sourceMappingURL=alignedGridsService.d.ts.map
\ No newline at end of file
// Type definitions for ag-grid-community v19.1.4
// Project: http://www.ag-grid.com/
// Definitions by: Niall Crosby <https://github.com/ag-grid/>
import { ICellRendererFunc, ICellRendererComp } from "./rendering/cellRenderers/iCellRenderer";
import { ColDef } from "./entities/colDef";
import { GridOptions } from "./entities/gridOptions";
import { ICellEditorComp } from "./rendering/cellEditors/iCellEditor";
import { IFilterComp } from "./interfaces/iFilter";
import { IFrameworkFactory } from "./interfaces/iFrameworkFactory";
import { IDateComp } from "./rendering/dateComponent";
/** The base frameworks, eg React & Angular 2, override this bean with implementations specific to their requirement. */
export declare class BaseFrameworkFactory implements IFrameworkFactory {
dateComponent(gridOptions: GridOptions): {
new (): IDateComp;
} | undefined;
colDefFloatingCellRenderer(colDef: ColDef): {
new (): ICellRendererComp;
} | ICellRendererFunc | string | undefined;
colDefCellRenderer(colDef: ColDef): {
new (): ICellRendererComp;
} | ICellRendererFunc | string | undefined;
colDefCellEditor(colDef: ColDef): {
new (): ICellEditorComp;
} | string | undefined;
colDefFilter(colDef: ColDef): {
new (): IFilterComp;
} | string | undefined;
gridOptionsFullWidthCellRenderer(gridOptions: GridOptions): {
new (): ICellRendererComp;
} | ICellRendererFunc | string | undefined;
gridOptionsGroupRowRenderer(gridOptions: GridOptions): {
new (): ICellRendererComp;
} | ICellRendererFunc | string | undefined;
gridOptionsGroupRowInnerRenderer(gridOptions: GridOptions): {
new (): ICellRendererComp;
} | ICellRendererFunc | string | undefined;
setTimeout(action: any, timeout?: any): void;
}
//# sourceMappingURL=baseFrameworkFactory.d.ts.map
\ No newline at end of file
/**
* ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v19.1.4
* @link http://www.ag-grid.com/
* @license MIT
*/
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/** The base frameworks, eg React & Angular 2, override this bean with implementations specific to their requirement. */
var BaseFrameworkFactory = /** @class */ (function () {
function BaseFrameworkFactory() {
}
BaseFrameworkFactory.prototype.dateComponent = function (gridOptions) {
return gridOptions.dateComponent;
};
BaseFrameworkFactory.prototype.colDefFloatingCellRenderer = function (colDef) {
return colDef.pinnedRowCellRenderer;
};
BaseFrameworkFactory.prototype.colDefCellRenderer = function (colDef) {
return colDef.cellRenderer;
};
BaseFrameworkFactory.prototype.colDefCellEditor = function (colDef) {
return colDef.cellEditor;
};
BaseFrameworkFactory.prototype.colDefFilter = function (colDef) {
return colDef.filter;
};
BaseFrameworkFactory.prototype.gridOptionsFullWidthCellRenderer = function (gridOptions) {
return gridOptions.fullWidthCellRenderer;
};
BaseFrameworkFactory.prototype.gridOptionsGroupRowRenderer = function (gridOptions) {
return gridOptions.groupRowRenderer;
};
BaseFrameworkFactory.prototype.gridOptionsGroupRowInnerRenderer = function (gridOptions) {
return gridOptions.groupRowInnerRenderer;
};
BaseFrameworkFactory.prototype.setTimeout = function (action, timeout) {
setTimeout(action, timeout);
};
return BaseFrameworkFactory;
}());
exports.BaseFrameworkFactory = BaseFrameworkFactory;
// Type definitions for ag-grid-community v19.1.4
// Project: http://www.ag-grid.com/
// Definitions by: Niall Crosby <https://github.com/ag-grid/>
import { GridRow } from "./entities/gridRow";
import { GridCell } from "./entities/gridCell";
export declare class CellNavigationService {
private columnController;
private rowModel;
private pinnedRowModel;
private gridOptionsWrapper;
getNextCellToFocus(key: any, lastCellToFocus: GridCell): GridCell | null;
private isCellGoodToFocusOn;
private getCellToLeft;
private getCellToRight;
getRowBelow(lastRow: GridRow): GridRow | null;
private getCellBelow;
private isLastRowInContainer;
private getRowAbove;
private getCellAbove;
private getLastBodyCell;
private getLastFloatingTopRow;
getNextTabbedCell(gridCell: GridCell, backwards: boolean): GridCell | null;
getNextTabbedCellForwards(gridCell: GridCell): GridCell | null;
getNextTabbedCellBackwards(gridCell: GridCell): GridCell | null;
}
//# sourceMappingURL=cellNavigationService.d.ts.map
\ No newline at end of file
// Type definitions for ag-grid-community v19.1.4
// Project: http://www.ag-grid.com/
// Definitions by: Niall Crosby <https://github.com/ag-grid/>
import { Column } from "../entities/column";
export declare class AutoGroupColService {
static GROUP_AUTO_COLUMN_ID: string;
static GROUP_AUTO_COLUMN_BUNDLE_ID: string;
private gridOptionsWrapper;
private context;
private columnController;
private columnFactory;
createAutoGroupColumns(rowGroupColumns: Column[]): Column[];
private createOneAutoGroupColumn;
private generateDefaultColDef;
}
//# sourceMappingURL=autoGroupColService.d.ts.map
\ No newline at end of file
/**
* ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v19.1.4
* @link http://www.ag-grid.com/
* @license MIT
*/
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
var context_1 = require("../context/context");
var column_1 = require("../entities/column");
var gridOptionsWrapper_1 = require("../gridOptionsWrapper");
var utils_1 = require("../utils");
var columnController_1 = require("./columnController");
var columnFactory_1 = require("./columnFactory");
var AutoGroupColService = /** @class */ (function () {
function AutoGroupColService() {
}
AutoGroupColService_1 = AutoGroupColService;
AutoGroupColService.prototype.createAutoGroupColumns = function (rowGroupColumns) {
var _this = this;
var groupAutoColumns = [];
var doingTreeData = this.gridOptionsWrapper.isTreeData();
var doingMultiAutoColumn = this.gridOptionsWrapper.isGroupMultiAutoColumn();
if (doingTreeData && doingMultiAutoColumn) {
console.log('ag-Grid: you cannot mix groupMultiAutoColumn with treeData, only one column can be used to display groups when doing tree data');
doingMultiAutoColumn = false;
}
// if doing groupMultiAutoColumn, then we call the method multiple times, once
// for each column we are grouping by
if (doingMultiAutoColumn) {
rowGroupColumns.forEach(function (rowGroupCol, index) {
groupAutoColumns.push(_this.createOneAutoGroupColumn(rowGroupCol, index));
});
}
else {
groupAutoColumns.push(this.createOneAutoGroupColumn());
}
return groupAutoColumns;
};
// rowGroupCol and index are missing if groupMultiAutoColumn=false
AutoGroupColService.prototype.createOneAutoGroupColumn = function (rowGroupCol, index) {
// if one provided by user, use it, otherwise create one
var defaultAutoColDef = this.generateDefaultColDef(rowGroupCol);
// if doing multi, set the field
var colId;
if (rowGroupCol) {
colId = AutoGroupColService_1.GROUP_AUTO_COLUMN_ID + "-" + rowGroupCol.getId();
}
else {
colId = AutoGroupColService_1.GROUP_AUTO_COLUMN_BUNDLE_ID;
}
var userAutoColDef = this.gridOptionsWrapper.getAutoGroupColumnDef();
utils_1._.mergeDeep(defaultAutoColDef, userAutoColDef);
defaultAutoColDef = this.columnFactory.mergeColDefs(defaultAutoColDef);
defaultAutoColDef.colId = colId;
// For tree data the filter is always allowed
if (!this.gridOptionsWrapper.isTreeData()) {
// we would only allow filter if the user has provided field or value getter. otherwise the filter
// would not be able to work.
var noFieldOrValueGetter = utils_1._.missing(defaultAutoColDef.field) && utils_1._.missing(defaultAutoColDef.valueGetter) && utils_1._.missing(defaultAutoColDef.filterValueGetter);
if (noFieldOrValueGetter) {
defaultAutoColDef.suppressFilter = true;
}
}
// if showing many cols, we don't want to show more than one with a checkbox for selection
if (index && index > 0) {
defaultAutoColDef.headerCheckboxSelection = false;
}
var newCol = new column_1.Column(defaultAutoColDef, null, colId, true);
this.context.wireBean(newCol);
return newCol;
};
AutoGroupColService.prototype.generateDefaultColDef = function (rowGroupCol) {
var userAutoColDef = this.gridOptionsWrapper.getAutoGroupColumnDef();
var localeTextFunc = this.gridOptionsWrapper.getLocaleTextFunc();
var defaultAutoColDef = {
headerName: localeTextFunc('group', 'Group')
};
var userHasProvidedGroupCellRenderer = userAutoColDef && (userAutoColDef.cellRenderer || userAutoColDef.cellRendererFramework);
// only add the default group cell renderer if user hasn't provided one
if (!userHasProvidedGroupCellRenderer) {
defaultAutoColDef.cellRenderer = 'agGroupCellRenderer';
}
// we never allow moving the group column
// defaultAutoColDef.suppressMovable = true;
if (rowGroupCol) {
var rowGroupColDef = rowGroupCol.getColDef();
utils_1._.assign(defaultAutoColDef, {
// cellRendererParams.groupKey: colDefToCopy.field;
headerName: this.columnController.getDisplayNameForColumn(rowGroupCol, 'header'),
headerValueGetter: rowGroupColDef.headerValueGetter
});
if (rowGroupColDef.cellRenderer) {
utils_1._.assign(defaultAutoColDef, {
cellRendererParams: {
innerRenderer: rowGroupColDef.cellRenderer,
innerRendererParams: rowGroupColDef.cellRendererParams
}
});
}
defaultAutoColDef.showRowGroup = rowGroupCol.getColId();
}
else {
defaultAutoColDef.showRowGroup = true;
}
return defaultAutoColDef;
};
var AutoGroupColService_1;
AutoGroupColService.GROUP_AUTO_COLUMN_ID = 'ag-Grid-AutoColumn';
AutoGroupColService.GROUP_AUTO_COLUMN_BUNDLE_ID = AutoGroupColService_1.GROUP_AUTO_COLUMN_ID;
__decorate([
context_1.Autowired('gridOptionsWrapper'),
__metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
], AutoGroupColService.prototype, "gridOptionsWrapper", void 0);
__decorate([
context_1.Autowired('context'),
__metadata("design:type", context_1.Context)
], AutoGroupColService.prototype, "context", void 0);
__decorate([
context_1.Autowired('columnController'),
__metadata("design:type", columnController_1.ColumnController)
], AutoGroupColService.prototype, "columnController", void 0);
__decorate([
context_1.Autowired('columnFactory'),
__metadata("design:type", columnFactory_1.ColumnFactory)
], AutoGroupColService.prototype, "columnFactory", void 0);
AutoGroupColService = AutoGroupColService_1 = __decorate([
context_1.Bean('autoGroupColService')
], AutoGroupColService);
return AutoGroupColService;
}());
exports.AutoGroupColService = AutoGroupColService;
// Type definitions for ag-grid-community v19.1.4
// Project: http://www.ag-grid.com/
// Definitions by: Niall Crosby <https://github.com/ag-grid/>
import { ColDef, ColGroupDef } from "../entities/colDef";
import { ColumnGroupChild } from "../entities/columnGroupChild";
import { ColumnState } from "./columnController";
import { OriginalColumnGroup } from "../entities/originalColumnGroup";
import { ColumnGroup } from "../entities/columnGroup";
import { Column } from "../entities/column";
export declare class ColumnApi {
private columnController;
sizeColumnsToFit(gridWidth: any): void;
setColumnGroupOpened(group: OriginalColumnGroup | string, newValue: boolean): void;
getColumnGroup(name: string, instanceId?: number): ColumnGroup;
getOriginalColumnGroup(name: string): OriginalColumnGroup;
getDisplayNameForColumn(column: Column, location: string | null): string;
getDisplayNameForColumnGroup(columnGroup: ColumnGroup, location: string): string;
getColumn(key: any): Column;
setColumnState(columnState: ColumnState[]): boolean;
getColumnState(): ColumnState[];
resetColumnState(): void;
getColumnGroupState(): {
groupId: string;
open: boolean;
}[];
setColumnGroupState(stateItems: ({
groupId: string;
open: boolean;
})[]): void;
resetColumnGroupState(): void;
isPinning(): boolean;
isPinningLeft(): boolean;
isPinningRight(): boolean;
getDisplayedColAfter(col: Column): Column;
getDisplayedColBefore(col: Column): Column;
setColumnVisible(key: string | Column, visible: boolean): void;
setColumnsVisible(keys: (string | Column)[], visible: boolean): void;
setColumnPinned(key: string | Column, pinned: string): void;
setColumnsPinned(keys: (string | Column)[], pinned: string): void;
getAllColumns(): Column[];
getAllGridColumns(): Column[];
getDisplayedLeftColumns(): Column[];
getDisplayedCenterColumns(): Column[];
getDisplayedRightColumns(): Column[];
getAllDisplayedColumns(): Column[];
getAllDisplayedVirtualColumns(): Column[];
moveColumn(key: string | Column, toIndex: number): void;
moveColumnByIndex(fromIndex: number, toIndex: number): void;
moveColumns(columnsToMoveKeys: (string | Column)[], toIndex: number): void;
moveRowGroupColumn(fromIndex: number, toIndex: number): void;
setColumnAggFunc(column: Column, aggFunc: string): void;
setColumnWidth(key: string | Column, newWidth: number, finished?: boolean): void;
setPivotMode(pivotMode: boolean): void;
isPivotMode(): boolean;
getSecondaryPivotColumn(pivotKeys: string[], valueColKey: string | Column): Column;
setValueColumns(colKeys: (string | Column)[]): void;
getValueColumns(): Column[];
removeValueColumn(colKey: (string | Column)): void;
removeValueColumns(colKeys: (string | Column)[]): void;
addValueColumn(colKey: (string | Column)): void;
addValueColumns(colKeys: (string | Column)[]): void;
setRowGroupColumns(colKeys: (string | Column)[]): void;
removeRowGroupColumn(colKey: string | Column): void;
removeRowGroupColumns(colKeys: (string | Column)[]): void;
addRowGroupColumn(colKey: string | Column): void;
addRowGroupColumns(colKeys: (string | Column)[]): void;
getRowGroupColumns(): Column[];
setPivotColumns(colKeys: (string | Column)[]): void;
removePivotColumn(colKey: string | Column): void;
removePivotColumns(colKeys: (string | Column)[]): void;
addPivotColumn(colKey: string | Column): void;
addPivotColumns(colKeys: (string | Column)[]): void;
getPivotColumns(): Column[];
getLeftDisplayedColumnGroups(): ColumnGroupChild[];
getCenterDisplayedColumnGroups(): ColumnGroupChild[];
getRightDisplayedColumnGroups(): ColumnGroupChild[];
getAllDisplayedColumnGroups(): ColumnGroupChild[];
autoSizeColumn(key: string | Column): void;
autoSizeColumns(keys: (string | Column)[]): void;
autoSizeAllColumns(): void;
setSecondaryColumns(colDefs: (ColDef | ColGroupDef)[]): void;
getSecondaryColumns(): Column[];
getPrimaryColumns(): Column[];
columnGroupOpened(group: OriginalColumnGroup | string, newValue: boolean): void;
hideColumns(colIds: any, hide: any): void;
hideColumn(colId: any, hide: any): void;
setState(columnState: ColumnState[]): boolean;
getState(): ColumnState[];
resetState(): void;
getAggregationColumns(): Column[];
removeAggregationColumn(colKey: (string | Column)): void;
removeAggregationColumns(colKeys: (string | Column)[]): void;
addAggregationColumn(colKey: (string | Column)): void;
addAggregationColumns(colKeys: (string | Column)[]): void;
setColumnAggFunction(column: Column, aggFunc: string): void;
getDisplayNameForCol(column: any): string;
}
//# sourceMappingURL=columnApi.d.ts.map
\ No newline at end of file
// Type definitions for ag-grid-community v19.1.4
// Project: http://www.ag-grid.com/
// Definitions by: Niall Crosby <https://github.com/ag-grid/>
import { ColDef, ColGroupDef } from "../entities/colDef";
import { OriginalColumnGroupChild } from "../entities/originalColumnGroupChild";
import { Column } from "../entities/column";
export declare class ColumnFactory {
private gridOptionsWrapper;
private columnUtils;
private context;
private logger;
private setBeans;
createColumnTree(defs: (ColDef | ColGroupDef)[], primaryColumns: boolean, existingColumns?: Column[]): {
columnTree: OriginalColumnGroupChild[];
treeDept: number;
};
createForAutoGroups(autoGroupCols: Column[], gridBalancedTree: OriginalColumnGroupChild[]): OriginalColumnGroupChild[];
private createAutoGroupTreeItem;
private findDept;
private balanceColumnTree;
private findMaxDept;
private recursivelyCreateColumns;
private createColumnGroup;
private createMergedColGroupDef;
private createColumn;
private findExistingColumn;
mergeColDefs(colDef: ColDef): ColDef;
private assignColumnTypes;
private checkForDeprecatedItems;
private isColumnGroup;
}
//# sourceMappingURL=columnFactory.d.ts.map
\ No newline at end of file
// Type definitions for ag-grid-community v19.1.4
// Project: http://www.ag-grid.com/
// Definitions by: Niall Crosby <https://github.com/ag-grid/>
export declare class ColumnKeyCreator {
private existingKeys;
addExistingKeys(keys: string[]): void;
getUniqueKey(colId: string, colField: string): string;
}
//# sourceMappingURL=columnKeyCreator.d.ts.map
\ No newline at end of file
/**
* ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v19.1.4
* @link http://www.ag-grid.com/
* @license MIT
*/
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
// class returns a unique id to use for the column. it checks the existing columns, and if the requested
// id is already taken, it will start appending numbers until it gets a unique id.
// eg, if the col field is 'name', it will try ids: {name, name_1, name_2...}
// if no field or id provided in the col, it will try the ids of natural numbers
var utils_1 = require("../utils");
var ColumnKeyCreator = /** @class */ (function () {
function ColumnKeyCreator() {
this.existingKeys = [];
}
ColumnKeyCreator.prototype.addExistingKeys = function (keys) {
this.existingKeys = this.existingKeys.concat(keys);
};
ColumnKeyCreator.prototype.getUniqueKey = function (colId, colField) {
// in case user passed in number for colId, convert to string
colId = utils_1.Utils.toStringOrNull(colId);
var count = 0;
while (true) {
var idToTry = void 0;
if (colId) {
idToTry = colId;
if (count !== 0) {
idToTry += '_' + count;
}
}
else if (colField) {
idToTry = colField;
if (count !== 0) {
idToTry += '_' + count;
}
}
else {
idToTry = '' + count;
}
if (this.existingKeys.indexOf(idToTry) < 0) {
this.existingKeys.push(idToTry);
return idToTry;
}
count++;
}
};
return ColumnKeyCreator;
}());
exports.ColumnKeyCreator = ColumnKeyCreator;
// Type definitions for ag-grid-community v19.1.4
// Project: http://www.ag-grid.com/
// Definitions by: Niall Crosby <https://github.com/ag-grid/>
import { ColumnGroupChild } from "../entities/columnGroupChild";
import { OriginalColumnGroupChild } from "../entities/originalColumnGroupChild";
import { OriginalColumnGroup } from "../entities/originalColumnGroup";
import { Column } from "../entities/column";
export declare class ColumnUtils {
private gridOptionsWrapper;
calculateColInitialWidth(colDef: any): number;
getOriginalPathForColumn(column: Column, originalBalancedTree: OriginalColumnGroupChild[]): OriginalColumnGroup[];
depthFirstOriginalTreeSearch(tree: OriginalColumnGroupChild[], callback: (treeNode: OriginalColumnGroupChild) => void): void;
depthFirstAllColumnTreeSearch(tree: ColumnGroupChild[], callback: (treeNode: ColumnGroupChild) => void): void;
depthFirstDisplayedColumnTreeSearch(tree: ColumnGroupChild[], callback: (treeNode: ColumnGroupChild) => void): void;
}
//# sourceMappingURL=columnUtils.d.ts.map
\ No newline at end of file
/**
* ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v19.1.4
* @link http://www.ag-grid.com/
* @license MIT
*/
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
var gridOptionsWrapper_1 = require("../gridOptionsWrapper");
var columnGroup_1 = require("../entities/columnGroup");
var originalColumnGroup_1 = require("../entities/originalColumnGroup");
var context_1 = require("../context/context");
var context_2 = require("../context/context");
// takes in a list of columns, as specified by the column definitions, and returns column groups
var ColumnUtils = /** @class */ (function () {
function ColumnUtils() {
}
ColumnUtils.prototype.calculateColInitialWidth = function (colDef) {
if (!colDef.width) {
// if no width defined in colDef, use default
return this.gridOptionsWrapper.getColWidth();
}
else if (colDef.width < this.gridOptionsWrapper.getMinColWidth()) {
// if width in col def to small, set to min width
return this.gridOptionsWrapper.getMinColWidth();
}
else {
// otherwise use the provided width
return colDef.width;
}
};
ColumnUtils.prototype.getOriginalPathForColumn = function (column, originalBalancedTree) {
var result = [];
var found = false;
recursePath(originalBalancedTree, 0);
// we should always find the path, but in case there is a bug somewhere, returning null
// will make it fail rather than provide a 'hard to track down' bug
if (found) {
return result;
}
else {
return null;
}
function recursePath(balancedColumnTree, dept) {
for (var i = 0; i < balancedColumnTree.length; i++) {
if (found) {
// quit the search, so 'result' is kept with the found result
return;
}
var node = balancedColumnTree[i];
if (node instanceof originalColumnGroup_1.OriginalColumnGroup) {
var nextNode = node;
recursePath(nextNode.getChildren(), dept + 1);
result[dept] = node;
}
else {
if (node === column) {
found = true;
}
}
}
}
};
/* public getPathForColumn(column: Column, allDisplayedColumnGroups: ColumnGroupChild[]): ColumnGroup[] {
let result: ColumnGroup[] = [];
let found = false;
recursePath(allDisplayedColumnGroups, 0);
// we should always find the path, but in case there is a bug somewhere, returning null
// will make it fail rather than provide a 'hard to track down' bug
if (found) {
return result;
} else {
return null;
}
function recursePath(balancedColumnTree: ColumnGroupChild[], dept: number): void {
for (let i = 0; i<balancedColumnTree.length; i++) {
if (found) {
// quit the search, so 'result' is kept with the found result
return;
}
let node = balancedColumnTree[i];
if (node instanceof ColumnGroup) {
let nextNode = <ColumnGroup> node;
recursePath(nextNode.getChildren(), dept+1);
result[dept] = node;
} else {
if (node === column) {
found = true;
}
}
}
}
}*/
ColumnUtils.prototype.depthFirstOriginalTreeSearch = function (tree, callback) {
var _this = this;
if (!tree) {
return;
}
tree.forEach(function (child) {
if (child instanceof originalColumnGroup_1.OriginalColumnGroup) {
_this.depthFirstOriginalTreeSearch(child.getChildren(), callback);
}
callback(child);
});
};
ColumnUtils.prototype.depthFirstAllColumnTreeSearch = function (tree, callback) {
var _this = this;
if (!tree) {
return;
}
tree.forEach(function (child) {
if (child instanceof columnGroup_1.ColumnGroup) {
_this.depthFirstAllColumnTreeSearch(child.getChildren(), callback);
}
callback(child);
});
};
ColumnUtils.prototype.depthFirstDisplayedColumnTreeSearch = function (tree, callback) {
var _this = this;
if (!tree) {
return;
}
tree.forEach(function (child) {
if (child instanceof columnGroup_1.ColumnGroup) {
_this.depthFirstDisplayedColumnTreeSearch(child.getDisplayedChildren(), callback);
}
callback(child);
});
};
__decorate([
context_2.Autowired('gridOptionsWrapper'),
__metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
], ColumnUtils.prototype, "gridOptionsWrapper", void 0);
ColumnUtils = __decorate([
context_1.Bean('columnUtils')
], ColumnUtils);
return ColumnUtils;
}());
exports.ColumnUtils = ColumnUtils;
// Type definitions for ag-grid-community v19.1.4
// Project: http://www.ag-grid.com/
// Definitions by: Niall Crosby <https://github.com/ag-grid/>
import { Column } from "../entities/column";
import { OriginalColumnGroupChild } from "../entities/originalColumnGroupChild";
import { GroupInstanceIdCreator } from "./groupInstanceIdCreator";
import { ColumnGroupChild } from "../entities/columnGroupChild";
export declare class DisplayedGroupCreator {
private columnUtils;
private context;
createDisplayedGroups(sortedVisibleColumns: Column[], balancedColumnTree: OriginalColumnGroupChild[], groupInstanceIdCreator: GroupInstanceIdCreator, pinned: string, oldDisplayedGroups?: ColumnGroupChild[]): ColumnGroupChild[];
private createColumnGroup;
private mapOldGroupsById;
private setupParentsIntoColumns;
private getOriginalPathForColumn;
}
//# sourceMappingURL=displayedGroupCreator.d.ts.map
\ No newline at end of file
/**
* ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v19.1.4
* @link http://www.ag-grid.com/
* @license MIT
*/
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
var columnUtils_1 = require("./columnUtils");
var columnGroup_1 = require("../entities/columnGroup");
var originalColumnGroup_1 = require("../entities/originalColumnGroup");
var context_1 = require("../context/context");
var utils_1 = require("../utils");
var context_2 = require("../context/context");
// takes in a list of columns, as specified by the column definitions, and returns column groups
var DisplayedGroupCreator = /** @class */ (function () {
function DisplayedGroupCreator() {
}
DisplayedGroupCreator.prototype.createDisplayedGroups = function (
// all displayed columns sorted - this is the columns the grid should show
sortedVisibleColumns,
// the tree of columns, as provided by the users, used to know what groups columns roll up into
balancedColumnTree,
// create's unique id's for the group
groupInstanceIdCreator,
// whether it's left, right or center col
pinned,
// we try to reuse old groups if we can, to allow gui to do animation
oldDisplayedGroups) {
var _this = this;
var result = [];
var previousRealPath;
var previousOriginalPath;
var oldColumnsMapped = this.mapOldGroupsById(oldDisplayedGroups);
// go through each column, then do a bottom up comparison to the previous column, and start
// to share groups if they converge at any point.
sortedVisibleColumns.forEach(function (currentColumn) {
var currentOriginalPath = _this.getOriginalPathForColumn(balancedColumnTree, currentColumn);
var currentRealPath = [];
var firstColumn = !previousOriginalPath;
for (var i = 0; i < currentOriginalPath.length; i++) {
if (firstColumn || currentOriginalPath[i] !== previousOriginalPath[i]) {
// new group needed
var newGroup = _this.createColumnGroup(currentOriginalPath[i], groupInstanceIdCreator, oldColumnsMapped, pinned);
currentRealPath[i] = newGroup;
// if top level, add to result, otherwise add to parent
if (i == 0) {
result.push(newGroup);
}
else {
currentRealPath[i - 1].addChild(newGroup);
}
}
else {
// reuse old group
currentRealPath[i] = previousRealPath[i];
}
}
var noColumnGroups = currentRealPath.length === 0;
if (noColumnGroups) {
// if we are not grouping, then the result of the above is an empty
// path (no groups), and we just add the column to the root list.
result.push(currentColumn);
}
else {
var leafGroup = currentRealPath[currentRealPath.length - 1];
leafGroup.addChild(currentColumn);
}
previousRealPath = currentRealPath;
previousOriginalPath = currentOriginalPath;
});
this.setupParentsIntoColumns(result, null);
return result;
};
DisplayedGroupCreator.prototype.createColumnGroup = function (originalGroup, groupInstanceIdCreator, oldColumnsMapped, pinned) {
var groupId = originalGroup.getGroupId();
var instanceId = groupInstanceIdCreator.getInstanceIdForKey(groupId);
var uniqueId = columnGroup_1.ColumnGroup.createUniqueId(groupId, instanceId);
var columnGroup = oldColumnsMapped[uniqueId];
// if the user is setting new colDefs, it is possible that the id's overlap, and we
// would have a false match from above. so we double check we are talking about the
// same original column group.
if (columnGroup && columnGroup.getOriginalColumnGroup() !== originalGroup) {
columnGroup = null;
}
if (utils_1.Utils.exists(columnGroup)) {
// clean out the old column group here, as we will be adding children into it again
columnGroup.reset();
}
else {
columnGroup = new columnGroup_1.ColumnGroup(originalGroup, groupId, instanceId, pinned);
this.context.wireBean(columnGroup);
}
return columnGroup;
};
// returns back a 2d map of ColumnGroup as follows: groupId -> instanceId -> ColumnGroup
DisplayedGroupCreator.prototype.mapOldGroupsById = function (displayedGroups) {
var result = {};
var recursive = function (columnsOrGroups) {
columnsOrGroups.forEach(function (columnOrGroup) {
if (columnOrGroup instanceof columnGroup_1.ColumnGroup) {
var columnGroup = columnOrGroup;
result[columnOrGroup.getUniqueId()] = columnGroup;
recursive(columnGroup.getChildren());
}
});
};
if (displayedGroups) {
recursive(displayedGroups);
}
return result;
};
DisplayedGroupCreator.prototype.setupParentsIntoColumns = function (columnsOrGroups, parent) {
var _this = this;
columnsOrGroups.forEach(function (columnsOrGroup) {
columnsOrGroup.setParent(parent);
if (columnsOrGroup instanceof columnGroup_1.ColumnGroup) {
var columnGroup = columnsOrGroup;
_this.setupParentsIntoColumns(columnGroup.getChildren(), columnGroup);
}
});
};
// private createFakePath(balancedColumnTree: OriginalColumnGroupChild[], column: Column): OriginalColumnGroup[] {
// let fakePath: OriginalColumnGroup[] = [];
// let currentChildren = balancedColumnTree;
// // this while loop does search on the balanced tree, so our result is the right length
// let index = 0;
// while (currentChildren && currentChildren[0] && currentChildren[0] instanceof OriginalColumnGroup) {
// // putting in a deterministic fake id, in case the API in the future needs to reference the col
// let fakeGroup = new OriginalColumnGroup(null, 'FAKE_PATH_' + index, true);
// this.context.wireBean(fakeGroup);
//
// // fakePath.setChildren(children);
//
// fakePath.push(fakeGroup);
// currentChildren = (<OriginalColumnGroup>currentChildren[0]).getChildren();
// index++;
// }
//
// fakePath.forEach( (fakePathGroup: OriginalColumnGroup, i: number) => {
// let lastItemInList = i === fakePath.length-1;
// let child = lastItemInList ? column : fakePath[i+1];
// fakePathGroup.setChildren([child]);
// });
//
// return fakePath;
// }
DisplayedGroupCreator.prototype.getOriginalPathForColumn = function (balancedColumnTree, column) {
var result = [];
var found = false;
recursePath(balancedColumnTree, 0);
// it's possible we didn't find a path. this happens if the column is generated
// by the grid (auto-group), in that the definition didn't come from the client. in this case,
// we create a fake original path.
if (found) {
return result;
}
else {
console.log('could not get path');
return null;
// return this.createFakePath(balancedColumnTree, column);
}
function recursePath(balancedColumnTree, dept) {
for (var i = 0; i < balancedColumnTree.length; i++) {
if (found) {
// quit the search, so 'result' is kept with the found result
return;
}
var node = balancedColumnTree[i];
if (node instanceof originalColumnGroup_1.OriginalColumnGroup) {
var nextNode = node;
recursePath(nextNode.getChildren(), dept + 1);
result[dept] = node;
}
else {
if (node === column) {
found = true;
}
}
}
}
};
__decorate([
context_2.Autowired('columnUtils'),
__metadata("design:type", columnUtils_1.ColumnUtils)
], DisplayedGroupCreator.prototype, "columnUtils", void 0);
__decorate([
context_2.Autowired('context'),
__metadata("design:type", context_1.Context)
], DisplayedGroupCreator.prototype, "context", void 0);
DisplayedGroupCreator = __decorate([
context_1.Bean('displayedGroupCreator')
], DisplayedGroupCreator);
return DisplayedGroupCreator;
}());
exports.DisplayedGroupCreator = DisplayedGroupCreator;
// Type definitions for ag-grid-community v19.1.4
// Project: http://www.ag-grid.com/
// Definitions by: Niall Crosby <https://github.com/ag-grid/>
export declare class GroupInstanceIdCreator {
private existingIds;
getInstanceIdForKey(key: string): number;
}
//# sourceMappingURL=groupInstanceIdCreator.d.ts.map
\ No newline at end of file
/**
* ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v19.1.4
* @link http://www.ag-grid.com/
* @license MIT
*/
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
// class returns unique instance id's for columns.
// eg, the following calls (in this order) will result in:
//
// getInstanceIdForKey('country') => 0
// getInstanceIdForKey('country') => 1
// getInstanceIdForKey('country') => 2
// getInstanceIdForKey('country') => 3
// getInstanceIdForKey('age') => 0
// getInstanceIdForKey('age') => 1
// getInstanceIdForKey('country') => 4
var GroupInstanceIdCreator = /** @class */ (function () {
function GroupInstanceIdCreator() {
// this map contains keys to numbers, so we remember what the last call was
this.existingIds = {};
}
GroupInstanceIdCreator.prototype.getInstanceIdForKey = function (key) {
var lastResult = this.existingIds[key];
var result;
if (typeof lastResult !== 'number') {
// first time this key
result = 0;
}
else {
result = lastResult + 1;
}
this.existingIds[key] = result;
return result;
};
return GroupInstanceIdCreator;
}());
exports.GroupInstanceIdCreator = GroupInstanceIdCreator;
// Type definitions for ag-grid-community v19.1.4
// Project: http://www.ag-grid.com/
// Definitions by: Niall Crosby <https://github.com/ag-grid/>
export declare function initialiseAgGridWithAngular1(angular: any): void;
//# sourceMappingURL=agGridNg1.d.ts.map
\ No newline at end of file
/**
* ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v19.1.4
* @link http://www.ag-grid.com/
* @license MIT
*/
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var grid_1 = require("../grid");
function initialiseAgGridWithAngular1(angular) {
var angularModule = angular.module("agGrid", []);
angularModule.directive("agGrid", function () {
return {
restrict: "A",
controller: ['$element', '$scope', '$compile', '$attrs', AngularDirectiveController],
scope: true
};
});
}
exports.initialiseAgGridWithAngular1 = initialiseAgGridWithAngular1;
function AngularDirectiveController($element, $scope, $compile, $attrs) {
var gridOptions;
var quickFilterOnScope;
var keyOfGridInScope = $attrs.agGrid;
quickFilterOnScope = keyOfGridInScope + '.quickFilterText';
gridOptions = $scope.$eval(keyOfGridInScope);
if (!gridOptions) {
console.warn("WARNING - grid options for ag-Grid not found. Please ensure the attribute ag-grid points to a valid object on the scope");
return;
}
var eGridDiv = $element[0];
var gridParams = {
$scope: $scope,
$compile: $compile,
quickFilterOnScope: quickFilterOnScope
};
var grid = new grid_1.Grid(eGridDiv, gridOptions, gridParams);
$scope.$on("$destroy", function () {
grid.destroy();
grid = null;
});
}
// Type definitions for ag-grid-community v19.1.4
// Project: http://www.ag-grid.com/
// Definitions by: Niall Crosby <https://github.com/ag-grid/>
export declare function initialiseAgGridWithWebComponents(): void;
//# sourceMappingURL=agGridWebComponent.d.ts.map
\ No newline at end of file
// Type definitions for ag-grid-community v19.1.4
// Project: http://www.ag-grid.com/
// Definitions by: Niall Crosby <https://github.com/ag-grid/>
export declare class Downloader {
download(fileName: string, content: string, mimeType: string): void;
}
//# sourceMappingURL=downloader.d.ts.map
\ No newline at end of file
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册