@forge/manifest 3.1.0 → 3.2.0-next.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # @forge/manifest
2
2
 
3
+ ## 3.2.0-next.3
4
+
5
+ ### Patch Changes
6
+
7
+ - b2cef71d: Update manifest definitions
8
+
9
+ ## 3.2.0-next.2
10
+
11
+ ### Minor Changes
12
+
13
+ - 7f869f7: Added manifest validation for modules using Subpages
14
+
15
+ ## 3.1.1-next.1
16
+
17
+ ### Patch Changes
18
+
19
+ - 47744fc: Update manifest definitions
20
+
21
+ ## 3.1.1-next.0
22
+
23
+ ### Patch Changes
24
+
25
+ - 2c635f9: Update manifest definitions
26
+
3
27
  ## 3.1.0
4
28
 
5
29
  ### Minor Changes
@@ -6276,10 +6276,10 @@
6276
6276
  "type": "object",
6277
6277
  "anyOf": [
6278
6278
  {
6279
- "$ref": "#/definitions/singleCondition"
6279
+ "$ref": "#/definitions/compositeCondition"
6280
6280
  },
6281
6281
  {
6282
- "$ref": "#/definitions/compositeCondition"
6282
+ "$ref": "#/definitions/singleCondition"
6283
6283
  }
6284
6284
  ]
6285
6285
  },
@@ -6584,22 +6584,6 @@
6584
6584
  "type": "object",
6585
6585
  "fieldDescription": "\n\n<p>An object containing options which vary based on the type of web item target you are implementing.</p>\n\n <p>Currently-allowed options are:</p>\n <ul>\n <li><a href=\"../inline-dialog-options/\">Inline Dialog Options</a> when type is \"inlinedialog\", and</li>\n <li><a href=\"../dialog-options/\">Dialog Options</a> when type is \"dialog\"</li>\n <li><a href=\"../dialog-module-options/\">Dialog Module Options</a> when type is \"dialogmodule\"</li>\n </ul>\n\n",
6586
6586
  "anyOf": [
6587
- {
6588
- "properties": {
6589
- "key": {
6590
- "maxLength": 100,
6591
- "type": "string",
6592
- "fieldDescription": "\n\n<p>The key of a <a href=\"../dialog/\">Dialog</a> module declared in this Connect add-on.</p>\n\n <p>\n The dialog module will include the <a href=\"../dialog-options/\">Dialog Options</a>\n that would otherwise need to be specified directly in this options object.\n </p>\n\n"
6593
- }
6594
- },
6595
- "required": [
6596
- "key"
6597
- ],
6598
- "shortClassName": "dialogModuleOptions",
6599
- "type": "object",
6600
- "title": "Dialog Module Options",
6601
- "description": "\n\nOptions for a web-item targeting a common <a href=\"../dialog/\">dialog module</a>.\n\n <h3>Example</h3>\n\n\n\n\n\n {\n \"target\": {\n \"type\": \"dialogmodule\",\n \"options\": {\n \"key\": \"dialog-module-key\"\n }\n }\n }\n\n\n"
6602
- },
6603
6587
  {
6604
6588
  "properties": {
6605
6589
  "size": {
@@ -6691,6 +6675,22 @@
6691
6675
  "type": "object",
6692
6676
  "title": "Inline Dialog Options",
6693
6677
  "description": "\n\nOptions for an inline dialog target\n\n <h3>Example</h3>\n\n\n\n\n\n {\n \"target\": {\n \"type\": \"inlinedialog\",\n \"options\": {\n \"onHover\": true,\n \"offsetX\": \"30px\",\n \"offsetY\": \"20px\"\n }\n }\n }\n\n\n"
6678
+ },
6679
+ {
6680
+ "properties": {
6681
+ "key": {
6682
+ "maxLength": 100,
6683
+ "type": "string",
6684
+ "fieldDescription": "\n\n<p>The key of a <a href=\"../dialog/\">Dialog</a> module declared in this Connect add-on.</p>\n\n <p>\n The dialog module will include the <a href=\"../dialog-options/\">Dialog Options</a>\n that would otherwise need to be specified directly in this options object.\n </p>\n\n"
6685
+ }
6686
+ },
6687
+ "required": [
6688
+ "key"
6689
+ ],
6690
+ "shortClassName": "dialogModuleOptions",
6691
+ "type": "object",
6692
+ "title": "Dialog Module Options",
6693
+ "description": "\n\nOptions for a web-item targeting a common <a href=\"../dialog/\">dialog module</a>.\n\n <h3>Example</h3>\n\n\n\n\n\n {\n \"target\": {\n \"type\": \"dialogmodule\",\n \"options\": {\n \"key\": \"dialog-module-key\"\n }\n }\n }\n\n\n"
6694
6694
  }
6695
6695
  ]
6696
6696
  },
@@ -6747,6 +6747,33 @@
6747
6747
  "items": {
6748
6748
  "type": "object",
6749
6749
  "anyOf": [
6750
+ {
6751
+ "properties": {
6752
+ "condition": {
6753
+ "maxLength": 100,
6754
+ "type": "string",
6755
+ "fieldDescription": "\n\nA string indicating the name of the condition\n\n"
6756
+ },
6757
+ "invert": {
6758
+ "type": "boolean",
6759
+ "fieldDescription": "\n\nA flag indicating whether to invert the boolean result of the condition.\n\n",
6760
+ "defaultValue": "false"
6761
+ },
6762
+ "params": {
6763
+ "additionalProperties": true,
6764
+ "type": "object",
6765
+ "fieldTitle": "Object",
6766
+ "fieldDescription": "\n\nThis object represents a map of key/value pairs, where each property name and value corresponds to the parameter name and value respectively.\n\n <p><b>Example</b></p>\n\n\n\n\n\n {\n \"params\": {\n \"someOtherProperty\": \"someValue\",\n \"myCustomProperty\": \"myValue\"\n }\n }\n\n\n"
6767
+ }
6768
+ },
6769
+ "required": [
6770
+ "condition"
6771
+ ],
6772
+ "shortClassName": "singleConditionBean",
6773
+ "type": "object",
6774
+ "title": "Single Condition",
6775
+ "description": "\n\nSingle Conditions are either provided by the host application. See the complete documentation of\n [Conditions](../../conditions/) for more information.\n\n To invert a condition, add the attribute ``invert=\"true\"`` to the condition element.\n This is useful where you want to show the section if a certain condition is not satisfied.\n\n <h3>Example</h3>\n\n\n\n\n\n {\n \"condition\": \"user_is_logged_in\",\n \"invert\": false\n }\n\n\n"
6776
+ },
6750
6777
  {
6751
6778
  "properties": {
6752
6779
  "conditions": {
@@ -6779,33 +6806,6 @@
6779
6806
  "type": "object",
6780
6807
  "title": "Composite Condition",
6781
6808
  "description": "\n\nComposite Conditions are composed of a collection of [Single Condition](../single-condition/) / Composite Conditions\n and a type attribute.\n\n <h3>Example</h3>\n\n\n\n\n\n {\n \"conditions\": [\n {\n \"or\": [\n {\n \"condition\": \"can_attach_file_to_issue\",\n \"invert\": false\n },\n {\n \"condition\": \"is_issue_assigned_to_current_user\",\n \"invert\": false\n }\n ]\n },\n {\n \"condition\": \"user_is_logged_in\",\n \"invert\": false\n }\n ]\n }\n\n\n"
6782
- },
6783
- {
6784
- "properties": {
6785
- "condition": {
6786
- "maxLength": 100,
6787
- "type": "string",
6788
- "fieldDescription": "\n\nA string indicating the name of the condition\n\n"
6789
- },
6790
- "invert": {
6791
- "type": "boolean",
6792
- "fieldDescription": "\n\nA flag indicating whether to invert the boolean result of the condition.\n\n",
6793
- "defaultValue": "false"
6794
- },
6795
- "params": {
6796
- "additionalProperties": true,
6797
- "type": "object",
6798
- "fieldTitle": "Object",
6799
- "fieldDescription": "\n\nThis object represents a map of key/value pairs, where each property name and value corresponds to the parameter name and value respectively.\n\n <p><b>Example</b></p>\n\n\n\n\n\n {\n \"params\": {\n \"someOtherProperty\": \"someValue\",\n \"myCustomProperty\": \"myValue\"\n }\n }\n\n\n"
6800
- }
6801
- },
6802
- "required": [
6803
- "condition"
6804
- ],
6805
- "shortClassName": "singleConditionBean",
6806
- "type": "object",
6807
- "title": "Single Condition",
6808
- "description": "\n\nSingle Conditions are either provided by the host application. See the complete documentation of\n [Conditions](../../conditions/) for more information.\n\n To invert a condition, add the attribute ``invert=\"true\"`` to the condition element.\n This is useful where you want to show the section if a certain condition is not satisfied.\n\n <h3>Example</h3>\n\n\n\n\n\n {\n \"condition\": \"user_is_logged_in\",\n \"invert\": false\n }\n\n\n"
6809
6809
  }
6810
6810
  ]
6811
6811
  },
@@ -7010,33 +7010,6 @@
7010
7010
  "items": {
7011
7011
  "type": "object",
7012
7012
  "anyOf": [
7013
- {
7014
- "properties": {
7015
- "condition": {
7016
- "maxLength": 100,
7017
- "type": "string",
7018
- "fieldDescription": "\n\nA string indicating the name of the condition\n\n"
7019
- },
7020
- "invert": {
7021
- "type": "boolean",
7022
- "fieldDescription": "\n\nA flag indicating whether to invert the boolean result of the condition.\n\n",
7023
- "defaultValue": "false"
7024
- },
7025
- "params": {
7026
- "additionalProperties": true,
7027
- "type": "object",
7028
- "fieldTitle": "Object",
7029
- "fieldDescription": "\n\nThis object represents a map of key/value pairs, where each property name and value corresponds to the parameter name and value respectively.\n\n <p><b>Example</b></p>\n\n\n\n\n\n {\n \"params\": {\n \"someOtherProperty\": \"someValue\",\n \"myCustomProperty\": \"myValue\"\n }\n }\n\n\n"
7030
- }
7031
- },
7032
- "required": [
7033
- "condition"
7034
- ],
7035
- "shortClassName": "singleConditionBean",
7036
- "type": "object",
7037
- "title": "Single Condition",
7038
- "description": "\n\nSingle Conditions are either provided by the host application. See the complete documentation of\n [Conditions](../../conditions/) for more information.\n\n To invert a condition, add the attribute ``invert=\"true\"`` to the condition element.\n This is useful where you want to show the section if a certain condition is not satisfied.\n\n <h3>Example</h3>\n\n\n\n\n\n {\n \"condition\": \"user_is_logged_in\",\n \"invert\": false\n }\n\n\n"
7039
- },
7040
7013
  {
7041
7014
  "properties": {
7042
7015
  "conditions": {
@@ -7044,10 +7017,10 @@
7044
7017
  "type": "object",
7045
7018
  "anyOf": [
7046
7019
  {
7047
- "$ref": "#"
7020
+ "$ref": "#/definitions/singleCondition"
7048
7021
  },
7049
7022
  {
7050
- "$ref": "#/definitions/singleCondition"
7023
+ "$ref": "#"
7051
7024
  }
7052
7025
  ]
7053
7026
  },
@@ -7069,6 +7042,33 @@
7069
7042
  "type": "object",
7070
7043
  "title": "Composite Condition",
7071
7044
  "description": "\n\nComposite Conditions are composed of a collection of [Single Condition](../single-condition/) / Composite Conditions\n and a type attribute.\n\n <h3>Example</h3>\n\n\n\n\n\n {\n \"conditions\": [\n {\n \"or\": [\n {\n \"condition\": \"can_attach_file_to_issue\",\n \"invert\": false\n },\n {\n \"condition\": \"is_issue_assigned_to_current_user\",\n \"invert\": false\n }\n ]\n },\n {\n \"condition\": \"user_is_logged_in\",\n \"invert\": false\n }\n ]\n }\n\n\n"
7045
+ },
7046
+ {
7047
+ "properties": {
7048
+ "condition": {
7049
+ "maxLength": 100,
7050
+ "type": "string",
7051
+ "fieldDescription": "\n\nA string indicating the name of the condition\n\n"
7052
+ },
7053
+ "invert": {
7054
+ "type": "boolean",
7055
+ "fieldDescription": "\n\nA flag indicating whether to invert the boolean result of the condition.\n\n",
7056
+ "defaultValue": "false"
7057
+ },
7058
+ "params": {
7059
+ "additionalProperties": true,
7060
+ "type": "object",
7061
+ "fieldTitle": "Object",
7062
+ "fieldDescription": "\n\nThis object represents a map of key/value pairs, where each property name and value corresponds to the parameter name and value respectively.\n\n <p><b>Example</b></p>\n\n\n\n\n\n {\n \"params\": {\n \"someOtherProperty\": \"someValue\",\n \"myCustomProperty\": \"myValue\"\n }\n }\n\n\n"
7063
+ }
7064
+ },
7065
+ "required": [
7066
+ "condition"
7067
+ ],
7068
+ "shortClassName": "singleConditionBean",
7069
+ "type": "object",
7070
+ "title": "Single Condition",
7071
+ "description": "\n\nSingle Conditions are either provided by the host application. See the complete documentation of\n [Conditions](../../conditions/) for more information.\n\n To invert a condition, add the attribute ``invert=\"true\"`` to the condition element.\n This is useful where you want to show the section if a certain condition is not satisfied.\n\n <h3>Example</h3>\n\n\n\n\n\n {\n \"condition\": \"user_is_logged_in\",\n \"invert\": false\n }\n\n\n"
7072
7072
  }
7073
7073
  ]
7074
7074
  },
@@ -7398,70 +7398,6 @@
7398
7398
  "title": "ControlGroup",
7399
7399
  "description": "\n\nDefines a ControlGroup which may appear in control extension points such as the property panel\n\n <p><b>Example</b></p>\n\n\n\n\n\n [\n {\n \"type\": \"group\",\n \"controls\": [\n {\n \"type\": \"button\",\n \"label\": {\n \"value\": \"My Custom Control 0\"\n },\n \"key\": \"my-custom-control-0\"\n },\n {\n \"type\": \"button\",\n \"label\": {\n \"value\": \"My Custom Control 1\"\n },\n \"key\": \"my-custom-control-1\"\n }\n ]\n }\n ]\n\n\n"
7400
7400
  },
7401
- {
7402
- "properties": {
7403
- "label": {
7404
- "$ref": "#/definitions/i18nProperty",
7405
- "fieldDescription": "\n\nText which will appear inside the button\n\n"
7406
- },
7407
- "type": {
7408
- "enum": [
7409
- "button",
7410
- "BUTTON"
7411
- ],
7412
- "type": "string",
7413
- "fieldDescription": "\n\nThe type field must be set to 'button'\n\n"
7414
- },
7415
- "key": {
7416
- "pattern": "^[a-zA-Z0-9-]+$",
7417
- "maxLength": 100,
7418
- "type": "string",
7419
- "fieldDescription": "\n\nA key to identify the control. Keys must only contain alphanumeric characters and dashes, and must be unique\n\n"
7420
- }
7421
- },
7422
- "required": [
7423
- "label",
7424
- "type",
7425
- "key"
7426
- ],
7427
- "additionalProperties": true,
7428
- "shortClassName": "buttonControlBean",
7429
- "type": "object",
7430
- "title": "ButtonControl",
7431
- "description": "\n\nDefines a button which may appear in control extension points such as the property panel\n\n <p><b>Example</b></p>\n\n\n\n\n\n {\n \"type\": \"button\",\n \"label\": {\n \"value\": \"My Custom Control 0\"\n },\n \"key\": \"my-custom-control-0\"\n }\n\n\n"
7432
- },
7433
- {
7434
- "properties": {
7435
- "macroParameter": {
7436
- "maxLength": 100,
7437
- "type": "string",
7438
- "fieldDescription": "\n\nThe Macro Parameter identifier used to store the text\n\n"
7439
- },
7440
- "type": {
7441
- "enum": [
7442
- "text",
7443
- "TEXT"
7444
- ],
7445
- "type": "string",
7446
- "fieldDescription": "\n\nThe type field must be set to 'text'\n\n"
7447
- },
7448
- "key": {
7449
- "pattern": "^[a-zA-Z0-9-]+$",
7450
- "maxLength": 100,
7451
- "type": "string",
7452
- "fieldDescription": "\n\nA key to identify this module.\n\n This key must be unique relative to the add on, with the exception of Confluence macros: Their keys need to be\n globally unique.\n\n Keys must only contain alphanumeric characters and dashes.\n\n The key is used to generate the url to your add-on's module. The url is generated as a combination of your add-on\n key and module key. For example, an add-on which looks like:\n\n {\n \"key\": \"my-addon\",\n \"modules\": {\n \"configurePage\": {\n \"key\": \"configure-me\",\n }\n }\n }\n\n Will have a configuration page module with a URL of `/plugins/servlet/ac/my-addon/configure-me`.\n\n"
7453
- }
7454
- },
7455
- "required": [
7456
- "macroParameter",
7457
- "type",
7458
- "key"
7459
- ],
7460
- "shortClassName": "textControlBean",
7461
- "type": "object",
7462
- "title": "TextControl",
7463
- "description": "\n\nDefines a text field which may appear in control extension points such as the property panel\n\n <p><b>Example</b></p>\n\n\n\n\n\n {\n \"type\": \"button\",\n \"label\": {\n \"value\": \"My Custom Control 0\"\n },\n \"key\": \"my-custom-control-0\"\n }\n\n\n"
7464
- },
7465
7401
  {
7466
7402
  "properties": {
7467
7403
  "controls": {
@@ -7530,6 +7466,70 @@
7530
7466
  "type": "object",
7531
7467
  "title": "ToggleGroup",
7532
7468
  "description": "\n\nDefines a ToggleGroup which may appear in control extension points such as the property panel\n\n <p><b>Example</b></p>\n\n\n\n\n\n [\n {\n \"type\": \"togglegroup\",\n \"macroParameter\": \"toggleGroupMacroParameter\",\n \"controls\": [\n {\n \"type\": \"togglebutton\",\n \"macroParameterValue\": \"macroParameterValue 0\",\n \"label\": {\n \"value\": \"My Custom Control 0\"\n },\n \"key\": \"my-custom-toggle-button-0\"\n },\n {\n \"type\": \"togglebutton\",\n \"macroParameterValue\": \"macroParameterValue 1\",\n \"label\": {\n \"value\": \"My Custom Control 1\"\n },\n \"key\": \"my-custom-toggle-button-1\"\n }\n ]\n }\n ]\n\n\n"
7469
+ },
7470
+ {
7471
+ "properties": {
7472
+ "macroParameter": {
7473
+ "maxLength": 100,
7474
+ "type": "string",
7475
+ "fieldDescription": "\n\nThe Macro Parameter identifier used to store the text\n\n"
7476
+ },
7477
+ "type": {
7478
+ "enum": [
7479
+ "text",
7480
+ "TEXT"
7481
+ ],
7482
+ "type": "string",
7483
+ "fieldDescription": "\n\nThe type field must be set to 'text'\n\n"
7484
+ },
7485
+ "key": {
7486
+ "pattern": "^[a-zA-Z0-9-]+$",
7487
+ "maxLength": 100,
7488
+ "type": "string",
7489
+ "fieldDescription": "\n\nA key to identify this module.\n\n This key must be unique relative to the add on, with the exception of Confluence macros: Their keys need to be\n globally unique.\n\n Keys must only contain alphanumeric characters and dashes.\n\n The key is used to generate the url to your add-on's module. The url is generated as a combination of your add-on\n key and module key. For example, an add-on which looks like:\n\n {\n \"key\": \"my-addon\",\n \"modules\": {\n \"configurePage\": {\n \"key\": \"configure-me\",\n }\n }\n }\n\n Will have a configuration page module with a URL of `/plugins/servlet/ac/my-addon/configure-me`.\n\n"
7490
+ }
7491
+ },
7492
+ "required": [
7493
+ "macroParameter",
7494
+ "type",
7495
+ "key"
7496
+ ],
7497
+ "shortClassName": "textControlBean",
7498
+ "type": "object",
7499
+ "title": "TextControl",
7500
+ "description": "\n\nDefines a text field which may appear in control extension points such as the property panel\n\n <p><b>Example</b></p>\n\n\n\n\n\n {\n \"type\": \"button\",\n \"label\": {\n \"value\": \"My Custom Control 0\"\n },\n \"key\": \"my-custom-control-0\"\n }\n\n\n"
7501
+ },
7502
+ {
7503
+ "properties": {
7504
+ "label": {
7505
+ "$ref": "#/definitions/i18nProperty",
7506
+ "fieldDescription": "\n\nText which will appear inside the button\n\n"
7507
+ },
7508
+ "type": {
7509
+ "enum": [
7510
+ "button",
7511
+ "BUTTON"
7512
+ ],
7513
+ "type": "string",
7514
+ "fieldDescription": "\n\nThe type field must be set to 'button'\n\n"
7515
+ },
7516
+ "key": {
7517
+ "pattern": "^[a-zA-Z0-9-]+$",
7518
+ "maxLength": 100,
7519
+ "type": "string",
7520
+ "fieldDescription": "\n\nA key to identify the control. Keys must only contain alphanumeric characters and dashes, and must be unique\n\n"
7521
+ }
7522
+ },
7523
+ "required": [
7524
+ "label",
7525
+ "type",
7526
+ "key"
7527
+ ],
7528
+ "additionalProperties": true,
7529
+ "shortClassName": "buttonControlBean",
7530
+ "type": "object",
7531
+ "title": "ButtonControl",
7532
+ "description": "\n\nDefines a button which may appear in control extension points such as the property panel\n\n <p><b>Example</b></p>\n\n\n\n\n\n {\n \"type\": \"button\",\n \"label\": {\n \"value\": \"My Custom Control 0\"\n },\n \"key\": \"my-custom-control-0\"\n }\n\n\n"
7533
7533
  }
7534
7534
  ]
7535
7535
  },
@@ -7824,6 +7824,38 @@
7824
7824
  "items": {
7825
7825
  "type": "object",
7826
7826
  "anyOf": [
7827
+ {
7828
+ "properties": {
7829
+ "macroParameter": {
7830
+ "maxLength": 100,
7831
+ "type": "string",
7832
+ "fieldDescription": "\n\nThe Macro Parameter identifier used to store the text\n\n"
7833
+ },
7834
+ "type": {
7835
+ "enum": [
7836
+ "text",
7837
+ "TEXT"
7838
+ ],
7839
+ "type": "string",
7840
+ "fieldDescription": "\n\nThe type field must be set to 'text'\n\n"
7841
+ },
7842
+ "key": {
7843
+ "pattern": "^[a-zA-Z0-9-]+$",
7844
+ "maxLength": 100,
7845
+ "type": "string",
7846
+ "fieldDescription": "\n\nA key to identify this module.\n\n This key must be unique relative to the add on, with the exception of Confluence macros: Their keys need to be\n globally unique.\n\n Keys must only contain alphanumeric characters and dashes.\n\n The key is used to generate the url to your add-on's module. The url is generated as a combination of your add-on\n key and module key. For example, an add-on which looks like:\n\n {\n \"key\": \"my-addon\",\n \"modules\": {\n \"configurePage\": {\n \"key\": \"configure-me\",\n }\n }\n }\n\n Will have a configuration page module with a URL of `/plugins/servlet/ac/my-addon/configure-me`.\n\n"
7847
+ }
7848
+ },
7849
+ "required": [
7850
+ "macroParameter",
7851
+ "type",
7852
+ "key"
7853
+ ],
7854
+ "shortClassName": "textControlBean",
7855
+ "type": "object",
7856
+ "title": "TextControl",
7857
+ "description": "\n\nDefines a text field which may appear in control extension points such as the property panel\n\n <p><b>Example</b></p>\n\n\n\n\n\n {\n \"type\": \"button\",\n \"label\": {\n \"value\": \"My Custom Control 0\"\n },\n \"key\": \"my-custom-control-0\"\n }\n\n\n"
7858
+ },
7827
7859
  {
7828
7860
  "properties": {
7829
7861
  "controls": {
@@ -7949,38 +7981,6 @@
7949
7981
  "title": "ControlGroup",
7950
7982
  "description": "\n\nDefines a ControlGroup which may appear in control extension points such as the property panel\n\n <p><b>Example</b></p>\n\n\n\n\n\n [\n {\n \"type\": \"group\",\n \"controls\": [\n {\n \"type\": \"button\",\n \"label\": {\n \"value\": \"My Custom Control 0\"\n },\n \"key\": \"my-custom-control-0\"\n },\n {\n \"type\": \"button\",\n \"label\": {\n \"value\": \"My Custom Control 1\"\n },\n \"key\": \"my-custom-control-1\"\n }\n ]\n }\n ]\n\n\n"
7951
7983
  },
7952
- {
7953
- "properties": {
7954
- "macroParameter": {
7955
- "maxLength": 100,
7956
- "type": "string",
7957
- "fieldDescription": "\n\nThe Macro Parameter identifier used to store the text\n\n"
7958
- },
7959
- "type": {
7960
- "enum": [
7961
- "text",
7962
- "TEXT"
7963
- ],
7964
- "type": "string",
7965
- "fieldDescription": "\n\nThe type field must be set to 'text'\n\n"
7966
- },
7967
- "key": {
7968
- "pattern": "^[a-zA-Z0-9-]+$",
7969
- "maxLength": 100,
7970
- "type": "string",
7971
- "fieldDescription": "\n\nA key to identify this module.\n\n This key must be unique relative to the add on, with the exception of Confluence macros: Their keys need to be\n globally unique.\n\n Keys must only contain alphanumeric characters and dashes.\n\n The key is used to generate the url to your add-on's module. The url is generated as a combination of your add-on\n key and module key. For example, an add-on which looks like:\n\n {\n \"key\": \"my-addon\",\n \"modules\": {\n \"configurePage\": {\n \"key\": \"configure-me\",\n }\n }\n }\n\n Will have a configuration page module with a URL of `/plugins/servlet/ac/my-addon/configure-me`.\n\n"
7972
- }
7973
- },
7974
- "required": [
7975
- "macroParameter",
7976
- "type",
7977
- "key"
7978
- ],
7979
- "shortClassName": "textControlBean",
7980
- "type": "object",
7981
- "title": "TextControl",
7982
- "description": "\n\nDefines a text field which may appear in control extension points such as the property panel\n\n <p><b>Example</b></p>\n\n\n\n\n\n {\n \"type\": \"button\",\n \"label\": {\n \"value\": \"My Custom Control 0\"\n },\n \"key\": \"my-custom-control-0\"\n }\n\n\n"
7983
- },
7984
7984
  {
7985
7985
  "properties": {
7986
7986
  "label": {
@@ -8214,10 +8214,10 @@
8214
8214
  "type": "object",
8215
8215
  "anyOf": [
8216
8216
  {
8217
- "$ref": "#/definitions/singleCondition"
8217
+ "$ref": "#/definitions/compositeCondition"
8218
8218
  },
8219
8219
  {
8220
- "$ref": "#/definitions/compositeCondition"
8220
+ "$ref": "#/definitions/singleCondition"
8221
8221
  }
8222
8222
  ]
8223
8223
  },
@@ -8247,22 +8247,6 @@
8247
8247
  "type": "object",
8248
8248
  "fieldDescription": "\n\n<p>An object containing options which vary based on the type of web item target you are implementing.</p>\n\n <p>Currently-allowed options are:</p>\n <ul>\n <li><a href=\"../inline-dialog-options/\">Inline Dialog Options</a> when type is \"inlinedialog\", and</li>\n <li><a href=\"../dialog-options/\">Dialog Options</a> when type is \"dialog\"</li>\n <li><a href=\"../dialog-module-options/\">Dialog Module Options</a> when type is \"dialogmodule\"</li>\n </ul>\n\n",
8249
8249
  "anyOf": [
8250
- {
8251
- "properties": {
8252
- "key": {
8253
- "maxLength": 100,
8254
- "type": "string",
8255
- "fieldDescription": "\n\n<p>The key of a <a href=\"../dialog/\">Dialog</a> module declared in this Connect add-on.</p>\n\n <p>\n The dialog module will include the <a href=\"../dialog-options/\">Dialog Options</a>\n that would otherwise need to be specified directly in this options object.\n </p>\n\n"
8256
- }
8257
- },
8258
- "required": [
8259
- "key"
8260
- ],
8261
- "shortClassName": "dialogModuleOptions",
8262
- "type": "object",
8263
- "title": "Dialog Module Options",
8264
- "description": "\n\nOptions for a web-item targeting a common <a href=\"../dialog/\">dialog module</a>.\n\n <h3>Example</h3>\n\n\n\n\n\n {\n \"target\": {\n \"type\": \"dialogmodule\",\n \"options\": {\n \"key\": \"dialog-module-key\"\n }\n }\n }\n\n\n"
8265
- },
8266
8250
  {
8267
8251
  "properties": {
8268
8252
  "size": {
@@ -8308,6 +8292,22 @@
8308
8292
  "title": "Dialog Options",
8309
8293
  "description": "\n\nOptions for a modal dialog <a href=\"../web-item-target/\">web item target</a> or <a href=\"../dialog/\">common module</a>.\n\n <p>\n These options are a subset of those available via the <a href=\"../../jsapi/dialog/\">JavaScript API</a>.\n </p>\n\n <h2>Web Item Example</h2>\n\n\n\n\n\n {\n \"target\": {\n \"type\": \"dialog\",\n \"options\": {\n \"height\": \"100px\",\n \"width\": \"200px\"\n }\n }\n }\n\n\n\n\n <h2>Dialog Example</h2>\n\n\n\n\n\n {\n \"modules\": {\n \"dialogs\": [\n {\n \"url\": \"/my-dialog-content\",\n \"options\": {\n \"size\": \"fullscreen\",\n \"header\": {\n \"value\": \"Example Dialog\"\n }\n },\n \"key\": \"dialog-module-key\"\n }\n ]\n }\n }\n\n\n"
8310
8294
  },
8295
+ {
8296
+ "properties": {
8297
+ "key": {
8298
+ "maxLength": 100,
8299
+ "type": "string",
8300
+ "fieldDescription": "\n\n<p>The key of a <a href=\"../dialog/\">Dialog</a> module declared in this Connect add-on.</p>\n\n <p>\n The dialog module will include the <a href=\"../dialog-options/\">Dialog Options</a>\n that would otherwise need to be specified directly in this options object.\n </p>\n\n"
8301
+ }
8302
+ },
8303
+ "required": [
8304
+ "key"
8305
+ ],
8306
+ "shortClassName": "dialogModuleOptions",
8307
+ "type": "object",
8308
+ "title": "Dialog Module Options",
8309
+ "description": "\n\nOptions for a web-item targeting a common <a href=\"../dialog/\">dialog module</a>.\n\n <h3>Example</h3>\n\n\n\n\n\n {\n \"target\": {\n \"type\": \"dialogmodule\",\n \"options\": {\n \"key\": \"dialog-module-key\"\n }\n }\n }\n\n\n"
8310
+ },
8311
8311
  {
8312
8312
  "properties": {
8313
8313
  "offsetX": {
@@ -9651,10 +9651,10 @@
9651
9651
  "type": "object",
9652
9652
  "anyOf": [
9653
9653
  {
9654
- "$ref": "#"
9654
+ "$ref": "#/definitions/singleCondition"
9655
9655
  },
9656
9656
  {
9657
- "$ref": "#/definitions/singleCondition"
9657
+ "$ref": "#"
9658
9658
  }
9659
9659
  ]
9660
9660
  },
@@ -3069,7 +3069,7 @@ export interface Modules {
3069
3069
  location?: string;
3070
3070
  cacheable?: boolean;
3071
3071
  supportsNative?: boolean;
3072
- conditions?: (SingleCondition | CompositeCondition)[];
3072
+ conditions?: (CompositeCondition | SingleCondition)[];
3073
3073
  params?: {
3074
3074
  [k: string]: unknown;
3075
3075
  };
@@ -3085,7 +3085,7 @@ export interface Modules {
3085
3085
  location?: string;
3086
3086
  cacheable?: boolean;
3087
3087
  supportsNative?: boolean;
3088
- conditions?: (SingleCondition | CompositeCondition)[];
3088
+ conditions?: (CompositeCondition | SingleCondition)[];
3089
3089
  params?: {
3090
3090
  [k: string]: unknown;
3091
3091
  };
@@ -3217,7 +3217,7 @@ export interface Modules {
3217
3217
  name?: I18NProperty59;
3218
3218
  location?: string;
3219
3219
  cacheable?: boolean;
3220
- conditions?: (CompositeCondition6 | SingleCondition4)[];
3220
+ conditions?: (SingleCondition4 | CompositeCondition6)[];
3221
3221
  key: ModuleKeySchema;
3222
3222
  [k: string]: unknown;
3223
3223
  },
@@ -3235,7 +3235,7 @@ export interface Modules {
3235
3235
  name?: I18NProperty59;
3236
3236
  location?: string;
3237
3237
  cacheable?: boolean;
3238
- conditions?: (CompositeCondition6 | SingleCondition4)[];
3238
+ conditions?: (SingleCondition4 | CompositeCondition6)[];
3239
3239
  key: ModuleKeySchema;
3240
3240
  [k: string]: unknown;
3241
3241
  }[]
@@ -3313,7 +3313,7 @@ export interface Modules {
3313
3313
  name?: I18NProperty63;
3314
3314
  weight?: number;
3315
3315
  location?: string;
3316
- conditions?: (SingleCondition5 | CompositeCondition7)[];
3316
+ conditions?: (CompositeCondition7 | SingleCondition5)[];
3317
3317
  params?: {
3318
3318
  [k: string]: unknown;
3319
3319
  };
@@ -3325,7 +3325,7 @@ export interface Modules {
3325
3325
  name?: I18NProperty63;
3326
3326
  weight?: number;
3327
3327
  location?: string;
3328
- conditions?: (SingleCondition5 | CompositeCondition7)[];
3328
+ conditions?: (CompositeCondition7 | SingleCondition5)[];
3329
3329
  params?: {
3330
3330
  [k: string]: unknown;
3331
3331
  };
@@ -3521,7 +3521,7 @@ export interface Modules {
3521
3521
  icon?: Icon18;
3522
3522
  name?: I18NProperty91;
3523
3523
  cacheable?: boolean;
3524
- conditions?: (SingleCondition | CompositeCondition)[];
3524
+ conditions?: (CompositeCondition | SingleCondition)[];
3525
3525
  params?: {
3526
3526
  [k: string]: unknown;
3527
3527
  };
@@ -3537,7 +3537,7 @@ export interface Modules {
3537
3537
  icon?: Icon18;
3538
3538
  name?: I18NProperty91;
3539
3539
  cacheable?: boolean;
3540
- conditions?: (SingleCondition | CompositeCondition)[];
3540
+ conditions?: (CompositeCondition | SingleCondition)[];
3541
3541
  params?: {
3542
3542
  [k: string]: unknown;
3543
3543
  };
@@ -3756,7 +3756,7 @@ export interface I18NProperty1 {
3756
3756
  *
3757
3757
  */
3758
3758
  export interface CompositeCondition {
3759
- conditions?: (ManifestSchema | SingleCondition)[];
3759
+ conditions?: (SingleCondition | ManifestSchema)[];
3760
3760
  type?: 'and' | 'AND' | 'or' | 'OR';
3761
3761
  [k: string]: unknown;
3762
3762
  }
@@ -6464,37 +6464,10 @@ export interface Icon10 {
6464
6464
  *
6465
6465
  */
6466
6466
  export interface WebItemTarget1 {
6467
- options?: DialogModuleOptions1 | DialogOptions2 | InlineDialogOptions1;
6467
+ options?: DialogOptions2 | InlineDialogOptions1 | DialogModuleOptions1;
6468
6468
  type?: 'page' | 'PAGE' | 'dialog' | 'DIALOG' | 'inlinedialog' | 'INLINEDIALOG' | 'dialogmodule' | 'DIALOGMODULE';
6469
6469
  [k: string]: unknown;
6470
6470
  }
6471
- /**
6472
- *
6473
- *
6474
- * Options for a web-item targeting a common <a href="../dialog/">dialog module</a>.
6475
- *
6476
- * <h3>Example</h3>
6477
- *
6478
- *
6479
- *
6480
- *
6481
- *
6482
- * {
6483
- * "target": {
6484
- * "type": "dialogmodule",
6485
- * "options": {
6486
- * "key": "dialog-module-key"
6487
- * }
6488
- * }
6489
- * }
6490
- *
6491
- *
6492
- *
6493
- */
6494
- export interface DialogModuleOptions1 {
6495
- key: string;
6496
- [k: string]: unknown;
6497
- }
6498
6471
  /**
6499
6472
  *
6500
6473
  *
@@ -6633,8 +6606,7 @@ export interface InlineDialogOptions1 {
6633
6606
  /**
6634
6607
  *
6635
6608
  *
6636
- * Represents a string that can be resolved via a localization properties file. You can use the same `i18n Property` key
6637
- * and value in multiple places if you like, but identical keys must have identical values.
6609
+ * Options for a web-item targeting a common <a href="../dialog/">dialog module</a>.
6638
6610
  *
6639
6611
  * <h3>Example</h3>
6640
6612
  *
@@ -6643,22 +6615,26 @@ export interface InlineDialogOptions1 {
6643
6615
  *
6644
6616
  *
6645
6617
  * {
6646
- * "value": "My text"
6618
+ * "target": {
6619
+ * "type": "dialogmodule",
6620
+ * "options": {
6621
+ * "key": "dialog-module-key"
6622
+ * }
6623
+ * }
6647
6624
  * }
6648
6625
  *
6649
6626
  *
6650
6627
  *
6651
6628
  */
6652
- export interface I18NProperty59 {
6653
- value: string;
6654
- i18n?: string;
6629
+ export interface DialogModuleOptions1 {
6630
+ key: string;
6655
6631
  [k: string]: unknown;
6656
6632
  }
6657
6633
  /**
6658
6634
  *
6659
6635
  *
6660
- * Composite Conditions are composed of a collection of [Single Condition](../single-condition/) / Composite Conditions
6661
- * and a type attribute.
6636
+ * Represents a string that can be resolved via a localization properties file. You can use the same `i18n Property` key
6637
+ * and value in multiple places if you like, but identical keys must have identical values.
6662
6638
  *
6663
6639
  * <h3>Example</h3>
6664
6640
  *
@@ -6667,32 +6643,15 @@ export interface I18NProperty59 {
6667
6643
  *
6668
6644
  *
6669
6645
  * {
6670
- * "conditions": [
6671
- * {
6672
- * "or": [
6673
- * {
6674
- * "condition": "can_attach_file_to_issue",
6675
- * "invert": false
6676
- * },
6677
- * {
6678
- * "condition": "is_issue_assigned_to_current_user",
6679
- * "invert": false
6680
- * }
6681
- * ]
6682
- * },
6683
- * {
6684
- * "condition": "user_is_logged_in",
6685
- * "invert": false
6686
- * }
6687
- * ]
6646
+ * "value": "My text"
6688
6647
  * }
6689
6648
  *
6690
6649
  *
6691
6650
  *
6692
6651
  */
6693
- export interface CompositeCondition6 {
6694
- conditions?: (ManifestSchema | SingleCondition)[];
6695
- type?: 'and' | 'AND' | 'or' | 'OR';
6652
+ export interface I18NProperty59 {
6653
+ value: string;
6654
+ i18n?: string;
6696
6655
  [k: string]: unknown;
6697
6656
  }
6698
6657
  /**
@@ -6726,6 +6685,47 @@ export interface SingleCondition4 {
6726
6685
  };
6727
6686
  [k: string]: unknown;
6728
6687
  }
6688
+ /**
6689
+ *
6690
+ *
6691
+ * Composite Conditions are composed of a collection of [Single Condition](../single-condition/) / Composite Conditions
6692
+ * and a type attribute.
6693
+ *
6694
+ * <h3>Example</h3>
6695
+ *
6696
+ *
6697
+ *
6698
+ *
6699
+ *
6700
+ * {
6701
+ * "conditions": [
6702
+ * {
6703
+ * "or": [
6704
+ * {
6705
+ * "condition": "can_attach_file_to_issue",
6706
+ * "invert": false
6707
+ * },
6708
+ * {
6709
+ * "condition": "is_issue_assigned_to_current_user",
6710
+ * "invert": false
6711
+ * }
6712
+ * ]
6713
+ * },
6714
+ * {
6715
+ * "condition": "user_is_logged_in",
6716
+ * "invert": false
6717
+ * }
6718
+ * ]
6719
+ * }
6720
+ *
6721
+ *
6722
+ *
6723
+ */
6724
+ export interface CompositeCondition6 {
6725
+ conditions?: (ManifestSchema | SingleCondition)[];
6726
+ type?: 'and' | 'AND' | 'or' | 'OR';
6727
+ [k: string]: unknown;
6728
+ }
6729
6729
  /**
6730
6730
  *
6731
6731
  *
@@ -7080,37 +7080,6 @@ export interface I18NProperty63 {
7080
7080
  i18n?: string;
7081
7081
  [k: string]: unknown;
7082
7082
  }
7083
- /**
7084
- *
7085
- *
7086
- * Single Conditions are either provided by the host application. See the complete documentation of
7087
- * [Conditions](../../conditions/) for more information.
7088
- *
7089
- * To invert a condition, add the attribute ``invert="true"`` to the condition element.
7090
- * This is useful where you want to show the section if a certain condition is not satisfied.
7091
- *
7092
- * <h3>Example</h3>
7093
- *
7094
- *
7095
- *
7096
- *
7097
- *
7098
- * {
7099
- * "condition": "user_is_logged_in",
7100
- * "invert": false
7101
- * }
7102
- *
7103
- *
7104
- *
7105
- */
7106
- export interface SingleCondition5 {
7107
- condition: string;
7108
- invert?: boolean;
7109
- params?: {
7110
- [k: string]: unknown;
7111
- };
7112
- [k: string]: unknown;
7113
- }
7114
7083
  /**
7115
7084
  *
7116
7085
  *
@@ -7148,10 +7117,41 @@ export interface SingleCondition5 {
7148
7117
  *
7149
7118
  */
7150
7119
  export interface CompositeCondition7 {
7151
- conditions?: (ManifestSchema | SingleCondition)[];
7120
+ conditions?: (SingleCondition | ManifestSchema)[];
7152
7121
  type?: 'and' | 'AND' | 'or' | 'OR';
7153
7122
  [k: string]: unknown;
7154
7123
  }
7124
+ /**
7125
+ *
7126
+ *
7127
+ * Single Conditions are either provided by the host application. See the complete documentation of
7128
+ * [Conditions](../../conditions/) for more information.
7129
+ *
7130
+ * To invert a condition, add the attribute ``invert="true"`` to the condition element.
7131
+ * This is useful where you want to show the section if a certain condition is not satisfied.
7132
+ *
7133
+ * <h3>Example</h3>
7134
+ *
7135
+ *
7136
+ *
7137
+ *
7138
+ *
7139
+ * {
7140
+ * "condition": "user_is_logged_in",
7141
+ * "invert": false
7142
+ * }
7143
+ *
7144
+ *
7145
+ *
7146
+ */
7147
+ export interface SingleCondition5 {
7148
+ condition: string;
7149
+ invert?: boolean;
7150
+ params?: {
7151
+ [k: string]: unknown;
7152
+ };
7153
+ [k: string]: unknown;
7154
+ }
7155
7155
  /**
7156
7156
  *
7157
7157
  *
@@ -8571,7 +8571,7 @@ export interface I18NProperty74 {
8571
8571
  *
8572
8572
  */
8573
8573
  export interface MacroPropertyPanel {
8574
- controls?: (ControlGroup | ButtonControl1 | TextControl | ToggleGroup)[];
8574
+ controls?: (ControlGroup | ToggleGroup | TextControl | ButtonControl1)[];
8575
8575
  cacheable?: boolean;
8576
8576
  url: string;
8577
8577
  [k: string]: unknown;
@@ -8672,7 +8672,52 @@ export interface I18NProperty75 {
8672
8672
  /**
8673
8673
  *
8674
8674
  *
8675
- * Defines a button which may appear in control extension points such as the property panel
8675
+ * Defines a ToggleGroup which may appear in control extension points such as the property panel
8676
+ *
8677
+ * <p><b>Example</b></p>
8678
+ *
8679
+ *
8680
+ *
8681
+ *
8682
+ *
8683
+ * [
8684
+ * {
8685
+ * "type": "togglegroup",
8686
+ * "macroParameter": "toggleGroupMacroParameter",
8687
+ * "controls": [
8688
+ * {
8689
+ * "type": "togglebutton",
8690
+ * "macroParameterValue": "macroParameterValue 0",
8691
+ * "label": {
8692
+ * "value": "My Custom Control 0"
8693
+ * },
8694
+ * "key": "my-custom-toggle-button-0"
8695
+ * },
8696
+ * {
8697
+ * "type": "togglebutton",
8698
+ * "macroParameterValue": "macroParameterValue 1",
8699
+ * "label": {
8700
+ * "value": "My Custom Control 1"
8701
+ * },
8702
+ * "key": "my-custom-toggle-button-1"
8703
+ * }
8704
+ * ]
8705
+ * }
8706
+ * ]
8707
+ *
8708
+ *
8709
+ *
8710
+ */
8711
+ export interface ToggleGroup {
8712
+ controls: ToggleButtonControl[];
8713
+ macroParameter: string;
8714
+ type: 'togglegroup' | 'TOGGLEGROUP';
8715
+ [k: string]: unknown;
8716
+ }
8717
+ /**
8718
+ *
8719
+ *
8720
+ * Defines a toggle button which appears inside a ToggleGroup
8676
8721
  *
8677
8722
  * <p><b>Example</b></p>
8678
8723
  *
@@ -8681,19 +8726,21 @@ export interface I18NProperty75 {
8681
8726
  *
8682
8727
  *
8683
8728
  * {
8684
- * "type": "button",
8729
+ * "type": "togglebutton",
8730
+ * "macroParameterValue": "macroParameterValue 0",
8685
8731
  * "label": {
8686
8732
  * "value": "My Custom Control 0"
8687
8733
  * },
8688
- * "key": "my-custom-control-0"
8734
+ * "key": "my-custom-toggle-button-0"
8689
8735
  * }
8690
8736
  *
8691
8737
  *
8692
8738
  *
8693
8739
  */
8694
- export interface ButtonControl1 {
8740
+ export interface ToggleButtonControl {
8741
+ macroParameterValue: string;
8695
8742
  label: I18NProperty76;
8696
- type: 'button' | 'BUTTON';
8743
+ type: 'togglebutton' | 'TOGGLEBUTTON';
8697
8744
  key: string;
8698
8745
  [k: string]: unknown;
8699
8746
  }
@@ -8752,52 +8799,7 @@ export interface TextControl {
8752
8799
  /**
8753
8800
  *
8754
8801
  *
8755
- * Defines a ToggleGroup which may appear in control extension points such as the property panel
8756
- *
8757
- * <p><b>Example</b></p>
8758
- *
8759
- *
8760
- *
8761
- *
8762
- *
8763
- * [
8764
- * {
8765
- * "type": "togglegroup",
8766
- * "macroParameter": "toggleGroupMacroParameter",
8767
- * "controls": [
8768
- * {
8769
- * "type": "togglebutton",
8770
- * "macroParameterValue": "macroParameterValue 0",
8771
- * "label": {
8772
- * "value": "My Custom Control 0"
8773
- * },
8774
- * "key": "my-custom-toggle-button-0"
8775
- * },
8776
- * {
8777
- * "type": "togglebutton",
8778
- * "macroParameterValue": "macroParameterValue 1",
8779
- * "label": {
8780
- * "value": "My Custom Control 1"
8781
- * },
8782
- * "key": "my-custom-toggle-button-1"
8783
- * }
8784
- * ]
8785
- * }
8786
- * ]
8787
- *
8788
- *
8789
- *
8790
- */
8791
- export interface ToggleGroup {
8792
- controls: ToggleButtonControl[];
8793
- macroParameter: string;
8794
- type: 'togglegroup' | 'TOGGLEGROUP';
8795
- [k: string]: unknown;
8796
- }
8797
- /**
8798
- *
8799
- *
8800
- * Defines a toggle button which appears inside a ToggleGroup
8802
+ * Defines a button which may appear in control extension points such as the property panel
8801
8803
  *
8802
8804
  * <p><b>Example</b></p>
8803
8805
  *
@@ -8806,21 +8808,19 @@ export interface ToggleGroup {
8806
8808
  *
8807
8809
  *
8808
8810
  * {
8809
- * "type": "togglebutton",
8810
- * "macroParameterValue": "macroParameterValue 0",
8811
+ * "type": "button",
8811
8812
  * "label": {
8812
8813
  * "value": "My Custom Control 0"
8813
8814
  * },
8814
- * "key": "my-custom-toggle-button-0"
8815
+ * "key": "my-custom-control-0"
8815
8816
  * }
8816
8817
  *
8817
8818
  *
8818
8819
  *
8819
8820
  */
8820
- export interface ToggleButtonControl {
8821
- macroParameterValue: string;
8821
+ export interface ButtonControl1 {
8822
8822
  label: I18NProperty77;
8823
- type: 'togglebutton' | 'TOGGLEBUTTON';
8823
+ type: 'button' | 'BUTTON';
8824
8824
  key: string;
8825
8825
  [k: string]: unknown;
8826
8826
  }
@@ -29816,11 +29816,39 @@ export interface I18NProperty83 {
29816
29816
  *
29817
29817
  */
29818
29818
  export interface MacroPropertyPanel1 {
29819
- controls?: (ToggleGroup1 | ControlGroup1 | TextControl1 | ButtonControl3)[];
29819
+ controls?: (TextControl1 | ToggleGroup1 | ControlGroup1 | ButtonControl3)[];
29820
29820
  cacheable?: boolean;
29821
29821
  url: string;
29822
29822
  [k: string]: unknown;
29823
29823
  }
29824
+ /**
29825
+ *
29826
+ *
29827
+ * Defines a text field which may appear in control extension points such as the property panel
29828
+ *
29829
+ * <p><b>Example</b></p>
29830
+ *
29831
+ *
29832
+ *
29833
+ *
29834
+ *
29835
+ * {
29836
+ * "type": "button",
29837
+ * "label": {
29838
+ * "value": "My Custom Control 0"
29839
+ * },
29840
+ * "key": "my-custom-control-0"
29841
+ * }
29842
+ *
29843
+ *
29844
+ *
29845
+ */
29846
+ export interface TextControl1 {
29847
+ macroParameter: string;
29848
+ type: 'text' | 'TEXT';
29849
+ key: string;
29850
+ [k: string]: unknown;
29851
+ }
29824
29852
  /**
29825
29853
  *
29826
29854
  *
@@ -30013,34 +30041,6 @@ export interface I18NProperty85 {
30013
30041
  i18n?: string;
30014
30042
  [k: string]: unknown;
30015
30043
  }
30016
- /**
30017
- *
30018
- *
30019
- * Defines a text field which may appear in control extension points such as the property panel
30020
- *
30021
- * <p><b>Example</b></p>
30022
- *
30023
- *
30024
- *
30025
- *
30026
- *
30027
- * {
30028
- * "type": "button",
30029
- * "label": {
30030
- * "value": "My Custom Control 0"
30031
- * },
30032
- * "key": "my-custom-control-0"
30033
- * }
30034
- *
30035
- *
30036
- *
30037
- */
30038
- export interface TextControl1 {
30039
- macroParameter: string;
30040
- type: 'text' | 'TEXT';
30041
- key: string;
30042
- [k: string]: unknown;
30043
- }
30044
30044
  /**
30045
30045
  *
30046
30046
  *
@@ -50942,37 +50942,10 @@ export interface I18NProperty91 {
50942
50942
  *
50943
50943
  */
50944
50944
  export interface WebItemTarget2 {
50945
- options?: DialogModuleOptions2 | DialogOptions4 | InlineDialogOptions2;
50945
+ options?: DialogOptions4 | DialogModuleOptions2 | InlineDialogOptions2;
50946
50946
  type?: 'page' | 'PAGE' | 'dialog' | 'DIALOG' | 'inlinedialog' | 'INLINEDIALOG' | 'dialogmodule' | 'DIALOGMODULE';
50947
50947
  [k: string]: unknown;
50948
50948
  }
50949
- /**
50950
- *
50951
- *
50952
- * Options for a web-item targeting a common <a href="../dialog/">dialog module</a>.
50953
- *
50954
- * <h3>Example</h3>
50955
- *
50956
- *
50957
- *
50958
- *
50959
- *
50960
- * {
50961
- * "target": {
50962
- * "type": "dialogmodule",
50963
- * "options": {
50964
- * "key": "dialog-module-key"
50965
- * }
50966
- * }
50967
- * }
50968
- *
50969
- *
50970
- *
50971
- */
50972
- export interface DialogModuleOptions2 {
50973
- key: string;
50974
- [k: string]: unknown;
50975
- }
50976
50949
  /**
50977
50950
  *
50978
50951
  *
@@ -51071,6 +51044,33 @@ export interface I18NProperty92 {
51071
51044
  i18n?: string;
51072
51045
  [k: string]: unknown;
51073
51046
  }
51047
+ /**
51048
+ *
51049
+ *
51050
+ * Options for a web-item targeting a common <a href="../dialog/">dialog module</a>.
51051
+ *
51052
+ * <h3>Example</h3>
51053
+ *
51054
+ *
51055
+ *
51056
+ *
51057
+ *
51058
+ * {
51059
+ * "target": {
51060
+ * "type": "dialogmodule",
51061
+ * "options": {
51062
+ * "key": "dialog-module-key"
51063
+ * }
51064
+ * }
51065
+ * }
51066
+ *
51067
+ *
51068
+ *
51069
+ */
51070
+ export interface DialogModuleOptions2 {
51071
+ key: string;
51072
+ [k: string]: unknown;
51073
+ }
51074
51074
  /**
51075
51075
  *
51076
51076
  *
@@ -42,6 +42,10 @@ export declare const errors: {
42
42
  customFields: {
43
43
  searchAlias: (aliases: string[]) => string;
44
44
  };
45
+ subPages: {
46
+ subPagesWithUIKit: (key: string) => string;
47
+ invalidPagesAndSections: (key: string) => string;
48
+ };
45
49
  function: {
46
50
  invalidKeyLength: (key: string) => string;
47
51
  handler: {
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/text/errors.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,MAAM;8BACS,MAAM,KAAG,MAAM;2BACpB,MAAM;yBAEN,MAAM,GAAG,SAAS,QAAQ,MAAM,EAAE,UAAU,MAAM,GAAG,SAAS,KAAG,MAAM;;uBAO3E,MAAM,EAAE,EAAE,GAAG,SAAS,KAAG,MAAM;4BAI1B,MAAM,EAAE,KAAG,MAAM;mCACV,MAAM,SAAS,MAAM,0CAA4B,MAAM;mDAIvC,MAAM,KAAG,MAAM;;;qCAI7B,MAAM,SAAS,MAAM,KAAG,MAAM;4CAEvB,MAAM,SAAS,MAAM,KAAG,MAAM;wCAElC,MAAM,SAAS,MAAM,EAAE,KAAG,MAAM;;;uCAMjC,MAAM,KAAG,MAAM;oCACpB,MAAM;iCAEP,MAAM,KAAG,MAAM;4CACJ,MAAM,KAAG,MAAM;;;gCAG3B,MAAM,KAAG,MAAM;6BACpB,MAAM;+BACJ,MAAM;iCACF,MAAM,KAAG,MAAM;yCACP,MAAM,eAAe,MAAM,KAAG,MAAM;yCAEpC,MAAM,eAAe,MAAM,KAAG,MAAM;;yCAGtC,MAAM,KAAG,MAAM;iCAEvB,MAAM,KAAG,MAAM;4CACJ,MAAM,gBAAgB,MAAM,KAAG,MAAM;sCAE3C,MAAM,gBAAgB,MAAM,gBAAgB,MAAM,KAAG,MAAM;;;mCAI9D,MAAM,KAAG,MAAM;mCAEf,MAAM,KAAG,MAAM;;;mCAIf,MAAM,KAAG,MAAM;;;mCAIf,MAAM,EAAE,KAAG,MAAM;;;oCAIhB,MAAM,KAAG,MAAM;;oCAEjB,MAAM,SAAS,MAAM,KAAG,MAAM;qCAI7B,MAAM,YAAY,MAAM,KAAG,MAAM;;;;;mCAQ/B,MAAM,OAAO,MAAM,KAAG,MAAM;iCAE9B,MAAM,OAAO,MAAM,KAAG,MAAM;oCAEzB,MAAM,OAAO,MAAM,KAAG,MAAM;gDAEhB,MAAM,KAAG,MAAM;uCAExB,MAAM,KAAG,MAAM;;;;;;;;kCAQpB,MAAM,UAAU,MAAM,KAAG,MAAM;gCAEjC,MAAM,KAAG,MAAM;2CAEJ,MAAM,eAAe,MAAM,KAAG,MAAM;;;uCAI1C,MAAM;uCAEJ,MAAM,KAAG,MAAM;qCAEnB,MAAM;;CAGpC,CAAC;AAEF,oBAAY,UAAU;IACpB,eAAe,2BAA2B;IAC1C,eAAe,wBAAwB;IACvC,WAAW,4BAA4B;IACvC,WAAW,+BAA+B;IAC1C,aAAa,8BAA8B;IAC3C,OAAO,0BAA0B;IACjC,cAAc,kCAAkC;IAChD,mBAAmB,0BAA0B;IAC7C,SAAS,4BAA4B;IACrC,SAAS,4BAA4B;IACrC,UAAU,wBAAwB;IAClC,GAAG,8BAA8B;CAClC"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/text/errors.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,MAAM;8BACS,MAAM,KAAG,MAAM;2BACpB,MAAM;yBAEN,MAAM,GAAG,SAAS,QAAQ,MAAM,EAAE,UAAU,MAAM,GAAG,SAAS,KAAG,MAAM;;uBAO3E,MAAM,EAAE,EAAE,GAAG,SAAS,KAAG,MAAM;4BAI1B,MAAM,EAAE,KAAG,MAAM;mCACV,MAAM,SAAS,MAAM,0CAA4B,MAAM;mDAIvC,MAAM,KAAG,MAAM;;;qCAI7B,MAAM,SAAS,MAAM,KAAG,MAAM;4CAEvB,MAAM,SAAS,MAAM,KAAG,MAAM;wCAElC,MAAM,SAAS,MAAM,EAAE,KAAG,MAAM;;;uCAMjC,MAAM,KAAG,MAAM;oCACpB,MAAM;iCAEP,MAAM,KAAG,MAAM;4CACJ,MAAM,KAAG,MAAM;;;gCAG3B,MAAM,KAAG,MAAM;6BACpB,MAAM;+BACJ,MAAM;iCACF,MAAM,KAAG,MAAM;yCACP,MAAM,eAAe,MAAM,KAAG,MAAM;yCAEpC,MAAM,eAAe,MAAM,KAAG,MAAM;;yCAGtC,MAAM,KAAG,MAAM;iCAEvB,MAAM,KAAG,MAAM;4CACJ,MAAM,gBAAgB,MAAM,KAAG,MAAM;sCAE3C,MAAM,gBAAgB,MAAM,gBAAgB,MAAM,KAAG,MAAM;;;mCAI9D,MAAM,KAAG,MAAM;mCAEf,MAAM,KAAG,MAAM;;;mCAIf,MAAM,KAAG,MAAM;;;mCAIf,MAAM,EAAE,KAAG,MAAM;;;qCAIf,MAAM,KAAG,MAAM;2CAET,MAAM,KAAG,MAAM;;;oCAGtB,MAAM,KAAG,MAAM;;oCAEjB,MAAM,SAAS,MAAM,KAAG,MAAM;qCAI7B,MAAM,YAAY,MAAM,KAAG,MAAM;;;;;mCAQ/B,MAAM,OAAO,MAAM,KAAG,MAAM;iCAE9B,MAAM,OAAO,MAAM,KAAG,MAAM;oCAEzB,MAAM,OAAO,MAAM,KAAG,MAAM;gDAEhB,MAAM,KAAG,MAAM;uCAExB,MAAM,KAAG,MAAM;;;;;;;;kCAQpB,MAAM,UAAU,MAAM,KAAG,MAAM;gCAEjC,MAAM,KAAG,MAAM;2CAEJ,MAAM,eAAe,MAAM,KAAG,MAAM;;;uCAI1C,MAAM;uCAEJ,MAAM,KAAG,MAAM;qCAEnB,MAAM;;CAGpC,CAAC;AAEF,oBAAY,UAAU;IACpB,eAAe,2BAA2B;IAC1C,eAAe,wBAAwB;IACvC,WAAW,4BAA4B;IACvC,WAAW,+BAA+B;IAC1C,aAAa,8BAA8B;IAC3C,OAAO,0BAA0B;IACjC,cAAc,kCAAkC;IAChD,mBAAmB,0BAA0B;IAC7C,SAAS,4BAA4B;IACrC,SAAS,4BAA4B;IACrC,UAAU,wBAAwB;IAClC,GAAG,8BAA8B;CAClC"}
@@ -54,6 +54,10 @@ exports.errors = {
54
54
  customFields: {
55
55
  searchAlias: (aliases) => `Search alias should be always unique per field. Found duplicates: ${aliases.join(', ')}.`
56
56
  },
57
+ subPages: {
58
+ subPagesWithUIKit: (key) => `Subpages in UI kit are not supported. Use Custom UI in the '${key}' module instead.`,
59
+ invalidPagesAndSections: (key) => `'pages' cannot be used with 'sections' in the module '${key}'.`
60
+ },
57
61
  function: {
58
62
  invalidKeyLength: (key) => `The function key exceeds 23 characters: ‘${key}’.`,
59
63
  handler: {
@@ -1 +1 @@
1
- {"version":3,"file":"modules-validator.d.ts","sourceRoot":"","sources":["../../src/validators/modules-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,cAAc,EAAE,wBAAwB,EAAsC,MAAM,UAAU,CAAC;AAGxH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAK3D,qBAAa,gBACX,YAAW,kBAAkB,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,SAAS,EAAE,cAAc,CAAC;IACzF,OAAO,CAAC,oBAAoB,CAA0C;IAEtE,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG,SAAS,GAAG,wBAAwB,CAAC,cAAc,CAAC;CAqMzG"}
1
+ {"version":3,"file":"modules-validator.d.ts","sourceRoot":"","sources":["../../src/validators/modules-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,cAAc,EAAE,wBAAwB,EAAsC,MAAM,UAAU,CAAC;AAGxH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAK3D,qBAAa,gBACX,YAAW,kBAAkB,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,SAAS,EAAE,cAAc,CAAC;IACzF,OAAO,CAAC,oBAAoB,CAA0C;IAEtE,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG,SAAS,GAAG,wBAAwB,CAAC,cAAc,CAAC;CA4NzG"}
@@ -92,9 +92,18 @@ class ModulesValidator {
92
92
  types_1.AllModuleTypes.JiraProjectSettingsPage,
93
93
  types_1.AllModuleTypes.JiraGlobalPage
94
94
  ].forEach((moduleType) => {
95
- const module = modules[moduleType];
96
- if (module && module.length > 1) {
97
- validationErrors.push(Object.assign({ message: text_1.errors.modules.fullPage.children(moduleType), reference: text_1.References.Modules, level: 'error' }, utils_1.findPosition(module[1].key, yamlContentByLine)));
95
+ const moduleArray = modules[moduleType];
96
+ if (moduleArray && moduleArray.length > 1) {
97
+ validationErrors.push(Object.assign({ message: text_1.errors.modules.fullPage.children(moduleType), reference: text_1.References.Modules, level: 'error' }, utils_1.findPosition(moduleArray[1].key, yamlContentByLine)));
98
+ }
99
+ if (moduleArray && moduleArray.length === 1) {
100
+ const module = moduleArray[0];
101
+ if (module && (module.pages || module.sections) && module.function) {
102
+ validationErrors.push(Object.assign({ message: text_1.errors.modules.subPages.subPagesWithUIKit(module.key), reference: text_1.References.Modules, level: 'error' }, utils_1.findPosition(module.key, yamlContentByLine)));
103
+ }
104
+ if (module && module.pages && module.sections) {
105
+ validationErrors.push(Object.assign({ message: text_1.errors.modules.subPages.invalidPagesAndSections(module.key), reference: text_1.References.Modules, level: 'error' }, utils_1.findPosition(module.key, yamlContentByLine)));
106
+ }
98
107
  }
99
108
  });
100
109
  [types_1.AllModuleTypes.JiraCustomField, types_1.AllModuleTypes.JiraCustomFieldType].forEach((moduleType) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/manifest",
3
- "version": "3.1.0",
3
+ "version": "3.2.0-next.3",
4
4
  "description": "Definitions and validations of the Forge manifest",
5
5
  "main": "out/index.js",
6
6
  "scripts": {