From 5cfc0b447999077ac1fbcf3fab7d511f7d338dd4 Mon Sep 17 00:00:00 2001 From: Ivan Goncharov Date: Sun, 17 Jul 2016 19:02:27 +0300 Subject: [PATCH 01/27] Fix internal links inside docs. --- docs/redoc-vendor-extensions.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/redoc-vendor-extensions.md b/docs/redoc-vendor-extensions.md index ab5d54ec..939507d0 100644 --- a/docs/redoc-vendor-extensions.md +++ b/docs/redoc-vendor-extensions.md @@ -1,9 +1,9 @@ # ReDoc vendor extensions ReDoc makes use of the following [vendor extensions](http://swagger.io/specification/#vendorExtensions) -### [Info Object](http://swagger.io/specification/#infoObject) vendor extensions +### [Info Object](http://swagger.io/specification/#infoObject) vendor extensions -#### x-logo +#### x-logo | Field Name | Type | Description | | :------------- | :-----------: | :---------- | @@ -49,7 +49,7 @@ info: ### [Tag object](http://swagger.io/specification/#tagObject) vendor extensions -#### x-traitTag +#### x-traitTag | Field Name | Type | Description | | :------------- | :------: | :---------- | | x-traitTag | boolean | In Swagger two operations can have multiply tags. This property distinguish between tags that are used to group operations (default) from tags that are used to mark operation with certain trait (`true` value) | @@ -76,7 +76,7 @@ x-traitTag: true ### [Operation Object](http://swagger.io/specification/#operationObject) vendor extensions -#### x-code-samples +#### x-code-samples | Field Name | Type | Description | | :------------- | :------: | :---------- | | x-code-samples | [ [Code Sample Object](#codeSampleObject) ] | A list of code samples associated with operation | From d629644c942fde0297dede178547836416ecdb85 Mon Sep 17 00:00:00 2001 From: Ivan Goncharov Date: Sun, 17 Jul 2016 21:48:56 +0300 Subject: [PATCH 02/27] Improve headings for vendor extensions --- docs/redoc-vendor-extensions.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/redoc-vendor-extensions.md b/docs/redoc-vendor-extensions.md index 939507d0..9f9ea251 100644 --- a/docs/redoc-vendor-extensions.md +++ b/docs/redoc-vendor-extensions.md @@ -1,8 +1,8 @@ # ReDoc vendor extensions ReDoc makes use of the following [vendor extensions](http://swagger.io/specification/#vendorExtensions) -### [Info Object](http://swagger.io/specification/#infoObject) vendor extensions - +### Info Object vendor extensions +Extends OpenAPI [Info Object](http://swagger.io/specification/#infoObject) #### x-logo | Field Name | Type | Description | @@ -47,8 +47,8 @@ info: -### [Tag object](http://swagger.io/specification/#tagObject) vendor extensions - +### Tag Object vendor extensions +Extends OpenAPI [Tag Object](http://swagger.io/specification/#tagObject) #### x-traitTag | Field Name | Type | Description | | :------------- | :------: | :---------- | @@ -74,8 +74,8 @@ description: Pagination description (can use markdown syntax) x-traitTag: true ``` -### [Operation Object](http://swagger.io/specification/#operationObject) vendor extensions - +### Operation Object vendor extensions +Extends OpenAPI [Operation Object](http://swagger.io/specification/#operationObject) #### x-code-samples | Field Name | Type | Description | | :------------- | :------: | :---------- | From d75e9921c21431311b30c38ec8748c735a548145 Mon Sep 17 00:00:00 2001 From: Roman Hotsiy Date: Mon, 18 Jul 2016 23:49:13 +0300 Subject: [PATCH 03/27] Pull better demo spec --- demo/swagger.yaml | 182 +++++++++++++++++++++++----------------------- 1 file changed, 89 insertions(+), 93 deletions(-) diff --git a/demo/swagger.yaml b/demo/swagger.yaml index 5034a924..62164e78 100644 --- a/demo/swagger.yaml +++ b/demo/swagger.yaml @@ -16,47 +16,28 @@ info: name: Apache 2.0 url: 'http://www.apache.org/licenses/LICENSE-2.0.html' externalDocs: - description: Find out more about Swagger - url: 'http://swagger.io' + description: Find out how to create Github repo for your OpenAPI spec. + url: 'https://github.com/Rebilly/generator-openapi-repo' tags: - - name: Pagination + - name: Introduction x-traitTag: true - description: |- - Sometimes you just can't get enough. For this reason, we've provided a convenient way to access more data in any request for sequential data. Simply call the url in the next_url parameter and we'll respond with the next set of data. - ```json - { - ... - "pagination": { - "next_url": - "https://api.instagram.com/v1/tags/puppy/media/recent?access_token=fb2e77d.47a0479900504cb3ab4a1f626d174d2d&max_id=13872296", - "next_max_id": "13872296" - } - } - ``` - - On views where pagination is present, we also support the `count` - parameter. Simply set this to the number of items you'd like to receive. Note that the default values should be fine for most applications - but if you decide to increase this number there is a maximum value defined on each endpoint. + description: 'This API is documented in **OpenAPI format** and is based on [Pestore sample](http://petstore.swagger.io/) provided by [swagger.io](http://swagger.io) team. It was **extended** to illustrate features of [generator-openapi-repo](https://github.com/Rebilly/generator-openapi-repo) tool and [ReDoc](https://github.com/Rebilly/ReDoc) documentation. In addition to standard OpenAPI syntax we use a few [vendor extensions](https://github.com/Rebilly/ReDoc/blob/master/docs/redoc-vendor-extensions.md).' + - name: OpenAPI Specification + description: 'The goal of The OpenAPI Specification is to define a standard, language-agnostic interface to REST APIs which allows both humans and computers to discover and understand the capabilities of the service without access to source code, documentation, or through network traffic inspection. When properly defined via OpenAPI, a consumer can understand and interact with the remote service with a minimal amount of implementation logic. Similar to what interfaces have done for lower-level programming, OpenAPI removes the guesswork in calling the service.' externalDocs: description: Find out more - url: 'http://swagger.io' - - name: JSONP - x-traitTag: true - description: "If you're writing an AJAX application, and you'd like to wrap our response with a callback, all you have to do is specify a callback parameter with any API call:\n```\n https://api.instagram.com/v1/tags/coffee/media/recent?access_token=fb2e77d.47a0479900504cb3ab4a1f626d174d2d&callback=callbackFunction\n```\nWould respond with:\n```js\ncallbackFunction({\n ...\n});\n``` \n > Example of markdown blockquote" - externalDocs: - description: Find out more - url: 'http://swagger.io' + url: 'https://openapis.org/' + - name: Cross-Origin Resource Sharing + description: | + This API features Cross-Origin Resource Sharing (CORS) implemented in compliance with [W3C spec](https://www.w3.org/TR/cors/). + And that allows cross-domain communication from the browser. + All responses have a wildcard same-origin which makes them completely public and accessible to everyone, including any code on any site. - name: pet description: Everything about your Pets - externalDocs: - description: Find out more - url: 'http://swagger.io' - name: store description: Access to Petstore orders - name: user description: Operations about user - externalDocs: - description: Find out more about our store - url: 'http://swagger.io' securityDefinitions: petstore_auth: type: oauth2 @@ -75,7 +56,7 @@ paths: tags: - pet summary: Add a new pet to the store - description: '' + description: Add new pet to the store inventory. operationId: addPet consumes: - application/json @@ -154,7 +135,6 @@ paths: get: tags: - pet - - JSONP summary: Find pet by ID description: Returns a single pet operationId: getPetById @@ -242,40 +222,6 @@ paths: - 'write:pets' - 'read:pets' '/pet/{petId}/uploadImage': - get: - tags: - - pet - summary: uploads an image - description: '' - operationId: uploadFile - consumes: - - image/jpeg - - image/png - produces: - - image/jpeg - - image/png - parameters: - - name: petId - in: path - description: ID of pet to update - required: true - type: integer - format: int64 - - name: file - in: body - description: file to upload - required: false - schema: - type: file - responses: - '200': - description: successful operation - schema: - type: file - security: - - petstore_auth: - - 'write:pets' - - 'read:pets' post: tags: - pet @@ -316,8 +262,6 @@ paths: get: tags: - pet - - Pagination - - JSONP summary: Finds Pets by status description: Multiple status values can be provided with comma seperated strings operationId: findPetsByStatus @@ -355,8 +299,6 @@ paths: get: tags: - pet - - Pagination - - JSONP summary: Finds Pets by tags description: 'Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing.' operationId: findPetsByTags @@ -389,7 +331,6 @@ paths: get: tags: - store - - JSONP summary: Returns pet inventories by status description: Returns a map of status codes to quantities operationId: getInventory @@ -434,7 +375,6 @@ paths: get: tags: - store - - JSONP summary: Find purchase order by ID description: 'For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions' operationId: getOrderById @@ -504,7 +444,6 @@ paths: get: tags: - user - - JSONP summary: Get user by user name description: '' operationId: getUserByName @@ -642,6 +581,8 @@ paths: description: successful operation schema: type: string + examples: + application/json: OK headers: X-Rate-Limit: type: integer @@ -699,10 +640,13 @@ definitions: type: object properties: id: - type: integer - format: int64 + description: Category ID + allOf: + - $ref: '#/definitions/Id' name: + description: Category name type: string + minLength: 1 xml: name: Category Dog: @@ -714,24 +658,44 @@ definitions: packSize: type: integer format: int32 - description: the size of the pack the dog is from - default: 0 - minimum: 0 + description: The size of the pack the dog is from + default: 1 + minimum: 1 required: - packSize + HoneyBee: + description: A representation of a honey bee + allOf: + - $ref: '#/definitions/Pet' + - type: object + properties: + honeyPerDay: + type: number + description: Average amount of honey produced per day in ounces + example: 3.14 + required: + - honeyPerDay + Id: + type: integer + format: int64 Order: type: object properties: id: - type: integer - format: int64 + description: Order ID + allOf: + - $ref: '#/definitions/Id' petId: - type: integer - format: int64 + description: Pet ID + allOf: + - $ref: '#/definitions/Id' quantity: type: integer format: int32 + minimum: 1 + default: 1 shipDate: + description: Estimated ship date type: string format: date-time status: @@ -742,6 +706,7 @@ definitions: - approved - delivered complete: + description: Indicates whenever order was completed or not type: boolean default: false xml: @@ -754,23 +719,31 @@ definitions: discriminator: petType properties: petType: + description: Type of a pet type: string id: - type: integer - format: int64 + description: Pet ID + allOf: + - $ref: '#/definitions/Id' category: - $ref: '#/definitions/Category' + description: Categories this pet belongs to + allOf: + - $ref: '#/definitions/Category' name: + description: The name given to a pet type: string - example: doggie + example: Guru photoUrls: + description: The list of URL to a cute photos featuring pet type: array xml: name: photoUrl wrapped: true items: type: string + format: url tags: + description: Tags attached to the pet type: array xml: name: tag @@ -779,7 +752,7 @@ definitions: $ref: '#/definitions/Tag' status: type: string - description: pet status in the store + description: Pet status in the store enum: - available - pending @@ -790,33 +763,56 @@ definitions: type: object properties: id: - type: integer - format: int64 + description: Tag ID + allOf: + - $ref: '#/definitions/Id' name: + description: Tag name type: string + minLength: 1 xml: name: Tag User: type: object properties: id: - type: integer - format: int64 + description: User ID + $ref: '#/definitions/Id' username: + description: User supplied username type: string + minLength: 4 + example: John78 firstName: + description: User first name type: string + minLength: 1 + example: John lastName: + description: User last name type: string + minLength: 1 + example: Smith email: + description: User email address type: string + format: email + example: john.smith@example.com password: type: string + description: 'User password, MUST contain a mix of upper and lower case letters, as well as digits' + format: password + minLength: 8 + pattern: '(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])' + example: drowssaP123 phone: + description: User phone number in international format type: string + pattern: "^\\+(?:[0-9]-?){6,14}[0-9]$" + example: +1-202-555-0192 userStatus: + description: User status type: integer format: int32 - description: User Status xml: name: User From 82f1be1d11b08fc122fa24ed93c068bb972e0324 Mon Sep 17 00:00:00 2001 From: Roman Hotsiy Date: Wed, 20 Jul 2016 11:07:08 +0300 Subject: [PATCH 04/27] Get rid of prepareModel method. Use init instead --- lib/components/ApiInfo/api-info.html | 20 ++++++++-------- lib/components/ApiInfo/api-info.spec.ts | 4 ++-- lib/components/ApiInfo/api-info.ts | 10 ++++---- lib/components/ApiLogo/api-logo.html | 2 +- lib/components/ApiLogo/api-logo.spec.ts | 8 +++---- lib/components/ApiLogo/api-logo.ts | 8 +++---- lib/components/JsonSchema/json-schema.ts | 2 +- lib/components/Method/method.html | 18 +++++++------- lib/components/Method/method.spec.ts | 8 +++---- lib/components/Method/method.ts | 24 +++++++++---------- lib/components/MethodsList/methods-list.html | 2 +- .../MethodsList/methods-list.spec.ts | 12 +++++----- lib/components/MethodsList/methods-list.ts | 9 ++++--- lib/components/ParamsList/params-list.html | 12 +++++----- lib/components/ParamsList/params-list.ts | 14 ++++++----- .../RequestSamples/request-samples.html | 10 ++++---- .../RequestSamples/request-samples.ts | 11 +++++---- .../ResponsesList/responses-list.html | 4 ++-- .../ResponsesList/responses-list.ts | 9 ++++--- .../ResponsesSamples/responses-samples.ts | 2 +- .../SchemaSample/schema-sample.html | 6 ++--- lib/components/SchemaSample/schema-sample.ts | 11 ++++----- lib/components/SideMenu/side-menu.html | 4 ++-- lib/components/SideMenu/side-menu.ts | 21 ++++++++-------- lib/components/base.spec.ts | 5 +--- lib/components/base.ts | 11 +-------- 26 files changed, 117 insertions(+), 130 deletions(-) diff --git a/lib/components/ApiInfo/api-info.html b/lib/components/ApiInfo/api-info.html index 1c8151f5..9f1855c4 100644 --- a/lib/components/ApiInfo/api-info.html +++ b/lib/components/ApiInfo/api-info.html @@ -1,17 +1,17 @@
-

{{data.title}} ({{data.version}})

-

+

{{info.title}} ({{info.version}})

+

- Contact: - - {{data.contact.name || data.contact.url}} - - {{data.contact.email}} + Contact: + + {{info.contact.name || info.contact.url}} + + {{info.contact.email}} - License: - {{data.license.name}} - {{data.license.name}} + License: + {{info.license.name}} + {{info.license.name}}

diff --git a/lib/components/ApiInfo/api-info.spec.ts b/lib/components/ApiInfo/api-info.spec.ts index acaebf1c..30e521ba 100644 --- a/lib/components/ApiInfo/api-info.spec.ts +++ b/lib/components/ApiInfo/api-info.spec.ts @@ -32,8 +32,8 @@ describe('Redoc components', () => { it('should init component data', () => { expect(component).not.toBeNull(); - expect(component.data).not.toBeNull(); - component.data.title.should.be.equal('Swagger Petstore'); + expect(component.info).not.toBeNull(); + component.info.title.should.be.equal('Swagger Petstore'); }); it('should render api name and version', () => { diff --git a/lib/components/ApiInfo/api-info.ts b/lib/components/ApiInfo/api-info.ts index db5db8a0..391acc5b 100644 --- a/lib/components/ApiInfo/api-info.ts +++ b/lib/components/ApiInfo/api-info.ts @@ -9,17 +9,17 @@ import { OptionsService } from '../../services/index'; templateUrl: './api-info.html' }) export class ApiInfo extends BaseComponent { - data: any; + info: any; specUrl: String; constructor(specMgr:SpecManager, private optionsService:OptionsService) { super(specMgr); } - prepareModel() { - this.data = this.componentSchema.info; + init() { + this.info = this.componentSchema.info; this.specUrl = this.optionsService.options.specUrl; - if (parseInt(this.data.version.substring(0, 1)) !== NaN) { - this.data.version = 'v' + this.data.version; + if (parseInt(this.info.version.substring(0, 1)) !== NaN) { + this.info.version = 'v' + this.info.version; } } } diff --git a/lib/components/ApiLogo/api-logo.html b/lib/components/ApiLogo/api-logo.html index 3cf09f27..897e3583 100644 --- a/lib/components/ApiLogo/api-logo.html +++ b/lib/components/ApiLogo/api-logo.html @@ -1 +1 @@ - + diff --git a/lib/components/ApiLogo/api-logo.spec.ts b/lib/components/ApiLogo/api-logo.spec.ts index 79484ff0..cc541c4e 100644 --- a/lib/components/ApiLogo/api-logo.spec.ts +++ b/lib/components/ApiLogo/api-logo.spec.ts @@ -35,11 +35,11 @@ describe('Redoc components', () => { it('should init component data', () => { expect(component).not.toBeNull(); - expect(component.data).not.toBeNull(); + expect(component.logo).not.toBeNull(); }); it('should not display image when no x-logo', () => { - component.data.should.be.empty(); + component.logo.should.be.empty(); let nativeElement = getChildDebugElement(fixture.debugElement, 'api-logo').nativeElement; let imgElement = nativeElement.querySelector('img'); expect(imgElement).toBeNull(); @@ -49,8 +49,8 @@ describe('Redoc components', () => { }); it('should load values from spec and use transparent bgColor by default', () => { - component.data.imgUrl.should.endWith('petstore-logo.png'); - component.data.bgColor.should.be.equal('transparent'); + component.logo.imgUrl.should.endWith('petstore-logo.png'); + component.logo.bgColor.should.be.equal('transparent'); }); }); }); diff --git a/lib/components/ApiLogo/api-logo.ts b/lib/components/ApiLogo/api-logo.ts index fb1edad3..4127fbe6 100644 --- a/lib/components/ApiLogo/api-logo.ts +++ b/lib/components/ApiLogo/api-logo.ts @@ -8,16 +8,16 @@ import {RedocComponent, BaseComponent, SpecManager} from '../base'; templateUrl: './api-logo.html' }) export class ApiLogo extends BaseComponent { - data:any = {}; + logo:any = {}; constructor(specMgr:SpecManager) { super(specMgr); } - prepareModel() { + init() { let logoInfo = this.componentSchema.info['x-logo']; if (!logoInfo) return; - this.data.imgUrl = logoInfo.url; - this.data.bgColor = logoInfo.backgroundColor || 'transparent'; + this.logo.imgUrl = logoInfo.url; + this.logo.bgColor = logoInfo.backgroundColor || 'transparent'; } } diff --git a/lib/components/JsonSchema/json-schema.ts b/lib/components/JsonSchema/json-schema.ts index b69f4d38..444663ca 100644 --- a/lib/components/JsonSchema/json-schema.ts +++ b/lib/components/JsonSchema/json-schema.ts @@ -68,7 +68,7 @@ export class JsonSchema extends BaseComponent { this.selectDescendant(0); } - prepareModel() { + init() { if (this.nestOdd) { this._renderer.setElementAttribute(this._elementRef.nativeElement, 'nestodd', 'true'); } diff --git a/lib/components/Method/method.html b/lib/components/Method/method.html index 6821882b..65d8b72b 100644 --- a/lib/components/Method/method.html +++ b/lib/components/Method/method.html @@ -1,13 +1,13 @@

- {{data.summary}} + {{method.summary}}

-
- {{tag}} + -

+

@@ -16,15 +16,15 @@
Definition
-
{{data.httpMethod}}
+
{{method.httpMethod}}
{{data.apiUrl}}{{data.path}}{{method.apiUrl}}{{method.path}}
-
+

- +
diff --git a/lib/components/Method/method.spec.ts b/lib/components/Method/method.spec.ts index 21cdc51a..07f187ce 100644 --- a/lib/components/Method/method.spec.ts +++ b/lib/components/Method/method.spec.ts @@ -34,14 +34,14 @@ describe('Redoc components', () => { }); it('should init basic component data', () => { - component.data.apiUrl.should.be.equal('http://petstore.swagger.io/v2'); - component.data.httpMethod.should.be.equal('put'); - component.data.path.should.be.equal('/user/{username}'); + component.method.apiUrl.should.be.equal('http://petstore.swagger.io/v2'); + component.method.httpMethod.should.be.equal('put'); + component.method.path.should.be.equal('/user/{username}'); }); it('should main tag', () => { - component.data.methodInfo.tags.should.be.empty(); + component.method.info.tags.should.be.empty(); }); }); }); diff --git a/lib/components/Method/method.ts b/lib/components/Method/method.ts index 3df30528..e0c63927 100644 --- a/lib/components/Method/method.ts +++ b/lib/components/Method/method.ts @@ -20,25 +20,25 @@ import { SchemaHelper } from '../../services/schema-helper.service'; detect: true }) export class Method extends BaseComponent { - data:any; + method:any; @Input() tag:string; constructor(specMgr:SpecManager) { super(specMgr); } - prepareModel() { - this.data = {}; - this.data.apiUrl = this.specMgr.apiUrl; - this.data.httpMethod = JsonPointer.baseName(this.pointer); - this.data.path = JsonPointer.baseName(this.pointer, 2); - this.data.methodInfo = this.componentSchema; - this.data.methodInfo.tags = this.filterMainTags(this.data.methodInfo.tags); - this.data.bodyParam = this.findBodyParam(); - this.data.summary = SchemaHelper.methodSummary(this.componentSchema); + init() { + this.method = {}; + this.method.apiUrl = this.specMgr.apiUrl; + this.method.httpMethod = JsonPointer.baseName(this.pointer); + this.method.path = JsonPointer.baseName(this.pointer, 2); + this.method.info = this.componentSchema; + this.method.info.tags = this.filterMainTags(this.method.info.tags); + this.method.bodyParam = this.findBodyParam(); + this.method.summary = SchemaHelper.methodSummary(this.componentSchema); if (this.componentSchema.operationId) { - this.data.methodAnchor = 'operation/' + encodeURIComponent(this.componentSchema.operationId); + this.method.anchor = 'operation/' + encodeURIComponent(this.componentSchema.operationId); } else { - this.data.methodAnchor = 'tag/' + encodeURIComponent(this.tag + this.pointer); + this.method.anchor = 'tag/' + encodeURIComponent(this.tag + this.pointer); } } diff --git a/lib/components/MethodsList/methods-list.html b/lib/components/MethodsList/methods-list.html index 6f42f8b6..7c9af41d 100644 --- a/lib/components/MethodsList/methods-list.html +++ b/lib/components/MethodsList/methods-list.html @@ -1,5 +1,5 @@
-
+

{{tag.name}}

diff --git a/lib/components/MethodsList/methods-list.spec.ts b/lib/components/MethodsList/methods-list.spec.ts index b8e6be02..ad0728be 100644 --- a/lib/components/MethodsList/methods-list.spec.ts +++ b/lib/components/MethodsList/methods-list.spec.ts @@ -35,12 +35,12 @@ describe('Redoc components', () => { }); it('should get correct tags list', () => { - expect(component.data.tags).not.toBeNull(); - component.data.tags.should.have.lengthOf(2); - component.data.tags[0].name.should.be.equal('traitTag'); - component.data.tags[0].methods.should.be.empty(); - component.data.tags[1].name.should.be.equal('tag1'); - component.data.tags[1].methods.should.have.lengthOf(2); + expect(component.tags).not.toBeNull(); + component.tags.should.have.lengthOf(2); + component.tags[0].name.should.be.equal('traitTag'); + component.tags[0].methods.should.be.empty(); + component.tags[1].name.should.be.equal('tag1'); + component.tags[1].methods.should.have.lengthOf(2); }); }); }); diff --git a/lib/components/MethodsList/methods-list.ts b/lib/components/MethodsList/methods-list.ts index d3dd6527..962846f0 100644 --- a/lib/components/MethodsList/methods-list.ts +++ b/lib/components/MethodsList/methods-list.ts @@ -15,13 +15,13 @@ import { SchemaHelper } from '../../services/index'; detect: true }) export class MethodsList extends BaseComponent { - data:any; + tags:Array; constructor(specMgr:SpecManager) { super(specMgr); } - prepareModel() { - this.data = {}; + init() { + this.tags = []; // follow SwaggerUI behavior for cases when one method has more than one tag: // duplicate methods @@ -33,8 +33,7 @@ export class MethodsList extends BaseComponent { method.tag = tagInfo.name; }); }); - this.data.tags = tags; - // TODO: check $ref field + this.tags = tags; } trackByPointer(idx, el) { diff --git a/lib/components/ParamsList/params-list.html b/lib/components/ParamsList/params-list.html index dbba3356..36cc6f28 100644 --- a/lib/components/ParamsList/params-list.html +++ b/lib/components/ParamsList/params-list.html @@ -1,5 +1,5 @@ -
Parameters
-