diff --git a/features/assets/plugin_project_sandbox/css/51-modern-default.css b/features/assets/plugin_project_sandbox/css/51-modern-default.css
new file mode 100644
index 00000000000..57f0a89382e
--- /dev/null
+++ b/features/assets/plugin_project_sandbox/css/51-modern-default.css
@@ -0,0 +1,665 @@
+@charset "UTF-8";
+/*
+ * Copyright (c) 2014 Cybozu
+ *
+ * Licensed under the MIT License
+*/
+
+*[class|="kintoneplugin"] {
+ color: #333;
+ word-wrap: break-word;
+ font-size: 16px;
+ line-height: 1.5;
+}
+
+:lang(us) *[class|="kintoneplugin"] {
+ font-family: 'HelveticaNeueW02-45Ligh', Arial, 'Hiragino Kaku Gothic ProN', Meiryo, sans-serif;
+}
+
+:lang(ja) *[class|="kintoneplugin"] {
+ font-family: 'メイリオ', 'Hiragino Kaku Gothic ProN', Meiryo, sans-serif;
+}
+
+:lang(zh) *[class|="kintoneplugin"] {
+ font-family: '微软雅黑', 'Microsoft YaHei', '新宋体', NSimSun, STHeiti, Hei, 'Heiti SC', sans-serif;
+}
+
+/*Alert message*/
+/*
+
+
Alert message、
Alert message
+
Alert message
+
+*/
+.kintoneplugin-alert {
+ position: relative;
+ display: block;
+ margin: 8px 0;
+ padding: 4px 18px;
+ background: #e74c3c;
+ color: #f6f6f6;
+}
+
+/* Row for the settings */
+/*
+Settings 1
+Settings 2
+*/
+.kintoneplugin-row {
+ margin-bottom: 24px;
+}
+
+/* Title for settings*/
+/* Labels */
+/*
+Title
+*/
+.kintoneplugin-label {
+ margin-bottom: 8px;
+ font-weight: bold;
+}
+
+/* Heading for each settings*/
+/* Heading */
+/*
+Heading for the setting
+*/
+.kintoneplugin-label {
+ margin-bottom: 8px;
+ font-weight: bold;
+}
+
+/* Title for each settings */
+/* Title */
+/*
+Title of the setting
+*/
+.kintoneplugin-title {
+ margin-bottom: 8px;
+}
+
+/* Description for each settings */
+/* Description */
+/*
+Description of the setting
+*/
+.kintoneplugin-desc {
+ margin-bottom: 8px;
+ font-size: 14px;
+ color: #888;
+}
+
+/* Required settings*/
+/*
+Title*
+*/
+.kintoneplugin-require {
+ color: #c09853;
+}
+
+/* Input (text box) */
+/*
+
+
+
+*/
+.kintoneplugin-input-outer {
+ position: relative;
+ display: inline-block;
+ vertical-align: top;
+}
+
+.kintoneplugin-input-text {
+ display: inline-block;
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0 8px;
+ height: 48px;
+ outline: none;
+ border: 1px solid #e3e7e8;
+ background-color: #fff;
+ box-shadow: 4px 4px 12px #f5f5f5 inset, -4px -4px 12px #f5f5f5 inset;
+ color: #a7a7a7;
+ font-size: 14px;
+}
+
+.kintoneplugin-input-text:focus {
+ background-color: #e2f2fe;
+ box-shadow: none;
+ color: #000;
+}
+
+/* Check box */
+/* For IE8, specify .lt-ie9 for the parent. */
+/*
+
+
+
+
+*/
+.kintoneplugin-input-checkbox-item {
+ display: block;
+ margin-right: 16px;
+ margin-bottom: 8px;
+ padding-left: 1px;
+ max-width: 98%;
+}
+
+.kintoneplugin-input-checkbox-item-block {
+ display: block;
+}
+.kintoneplugin-input-checkbox-item-inline {
+ display: inline-block;
+}
+
+.kintoneplugin-input-checkbox-item:hover + label {
+ color: #666;
+}
+
+.kintoneplugin-input-checkbox-item input[type="checkbox"] {
+ display: none;
+ cursor: pointer;
+}
+
+.kintoneplugin-input-checkbox-item input[type="checkbox"] + label {
+ position: relative;
+ display: inline-block;
+ margin-left: 32px;
+ vertical-align: middle;
+ font-size: 14px;
+ cursor: pointer;
+}
+
+.kintoneplugin-input-checkbox-item input[type="checkbox"][disabled] + label {
+ color: #bababa;
+ cursor: not-allowed;
+}
+
+.kintoneplugin-input-checkbox-item input[type="checkbox"] + label:before {
+ position: absolute;
+ top: 50%;
+ left: -30px;
+ display: inline-block;
+ box-sizing: border-box;
+ margin-top: -11px;
+ width: 21px;
+ height: 21px;
+ background: #fff;
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAYAAACpF6WWAAAACXBIWXMAAAsTAAALEwEAmpwYAAA5mGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS41LWMwMjEgNzkuMTU0OTExLCAyMDEzLzEwLzI5LTExOjQ3OjE2ICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE0LTExLTA1VDE1OjE2OjQ0KzA5OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTQtMTEtMDdUMTc6Mjc6MDkrMDk6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8eG1wOk1ldGFkYXRhRGF0ZT4yMDE0LTExLTA3VDE3OjI3OjA5KzA5OjAwPC94bXA6TWV0YWRhdGFEYXRlPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOmM0ZThhODkwLTIzMTYtNGE0Yy04YTYxLTM3Y2E1OWUzYjkzOTwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDozMUQ4RkVFRkZGRTAxMUUzQUJBOENCMDVGMTBEODkwODwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkRlcml2ZWRGcm9tIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgPHN0UmVmOmluc3RhbmNlSUQ+eG1wLmlpZDozMUQ4RkVFQ0ZGRTAxMUUzQUJBOENCMDVGMTBEODkwODwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ+eG1wLmRpZDozMUQ4RkVFREZGRTAxMUUzQUJBOENCMDVGMTBEODkwODwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgPC94bXBNTTpEZXJpdmVkRnJvbT4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjMxRDhGRUVGRkZFMDExRTNBQkE4Q0IwNUYxMEQ4OTA4PC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDpjNGU4YTg5MC0yMzE2LTRhNGMtOGE2MS0zN2NhNTllM2I5Mzk8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMTEtMDdUMTc6Mjc6MDkrMDk6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WFJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MjE8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MjE8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PlzrgSQAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAATBJREFUeNrslMtOAzEMRY9fldj2/39x2FVFzcRmMZNOKZQWBCu4m2QRnVzHuZbD4VCtNdo8kz2pKoaKbf+R5LwRVJVdBBE7/NQaL8cjPZPMJKu245VwF1uIKqbKPHeeAG+t0TPZ7/eEO1XFMHvp+kPkereokr0zTc+cTg2vWtxFBG7Gd9VF6JlYJV4FmUX2BDMyE1kt3HM6zpgZvXcyl+fy616IyBk61s80QNsloKPPP6FB0aKg6lzqIyXfeobBUX5B/9A/DV2zwwPhuTFU5F0Sffvw2+e/jt5nwKp6E2cR8EIwU0yXCWVfnFQDqKqoLm7dTMlutN6p1emjkT2Xvg5oM0NV8V0E89yZpmkZgRelPwKtdXU3TITwwCOCJ4F2amQl5DZt7kIv2u1qeDjhwesANeG11rjZfScAAAAASUVORK5CYII=) no-repeat center center #fff;
+ content: "";
+}
+
+.kintoneplugin-input-checkbox-item input[type="checkbox"]:checked + label:after {
+ position: absolute;
+ top: 50%;
+ left: -30px;
+ box-sizing: border-box;
+ margin-top: -11px;
+ width: 21px;
+ height: 21px;
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAYAAACpF6WWAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NDkxMSwgMjAxMy8xMC8yOS0xMTo0NzoxNiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjUwMkNFQUUzRkZCMzExRTNBQkE4Q0IwNUYxMEQ4OTA4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjUwMkNFQUU0RkZCMzExRTNBQkE4Q0IwNUYxMEQ4OTA4Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NTAyQ0VBRTFGRkIzMTFFM0FCQThDQjA1RjEwRDg5MDgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NTAyQ0VBRTJGRkIzMTFFM0FCQThDQjA1RjEwRDg5MDgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5TrKxVAAABt0lEQVR42rzVSy8DURQH8P+0HaopoV7TkLAoCRYshNjYaTxiZcmexEZsxBeQiEWrC9/AzkpFCCsSQhALEY8uEH3QqXjUtNPpTN07EQumpvpwlneSX/5n5pw7zJFfCLr3w9bTkAgDg6xLSQEdXDGmeqqjzNjKreB7kkqqLEbkWrwgw2FjYyaSUG4sZ+EdbcwZHV6+AfUMubSsVdQzoACVNXr3IiEhp/KHnj/GMeH1w3PA402Ufzw3/RW8joiY3gzhPBzHcUBAS5UZQ82l+knfJQVnJM33uiLg5FoAl7wIOoC9DVbUl7H67UeEJOZ2whhf9WPvTvg6v+A/QQLLZNI76yxwD9jRzpn10d1bAUuHEdy/SpjZCuEkEFPBqfWgmpRuThcBXQSs00ip+U7baswYaS3Dli+Kh2gSs9shWFgDfE8JFeymCQftmm2nTdpUWYQFpx1ORyliSUVNTJMmZEVNuKgDpv36FSVGzDs5gGzHxvWbekZBz2D6ljMaKRuF+zi8JxQ8x+WMQd05pbCr3w6RbE6mYEbDX2s1/d/u/4oqqfyC1DORX4CR3PzqBZuPm596TCH+UR8CDAC9yr4WxILwPAAAAABJRU5ErkJggg==) no-repeat center center #fff;
+ content: "";
+}
+
+.kintoneplugin-input-checkbox-item input[type="checkbox"][disabled]:checked + label:after {
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAYAAACpF6WWAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NDkxMSwgMjAxMy8xMC8yOS0xMTo0NzoxNiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkQ5N0VENzg3MEJBQzExRTQ5MUVFOTIwNzZCRTVEQkEwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkQ5N0VENzg4MEJBQzExRTQ5MUVFOTIwNzZCRTVEQkEwIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RDk3RUQ3ODUwQkFDMTFFNDkxRUU5MjA3NkJFNURCQTAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RDk3RUQ3ODYwQkFDMTFFNDkxRUU5MjA3NkJFNURCQTAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4bu7OxAAABBUlEQVR42mK8fPXacwYGBh4G6oEvLECCH4gvAvEbKhgoAsT6IEP/Qg30pYKhm0HmMTHQAAw6Q+WAmI2ahmoB8XQgzsOWcsgxVAWIe4HYC4i7gdiOWEO5gFgHi7gaEE8FYg8ofw0QPyHGUCEgrgbimUBshSSuATXQDcnAfCC+hG4ACxZDQd6pgrI7oRq/AXE/ELsgGVgIxM+weROboVeAeA4QpwCxDRCfRZOHGfgEV6BjM/QOEJdC2SlocuugLn9GTjr9AMTlUBcjG5hLyEBcLoWBd1CDQSlBgFgDCRkKMxgUfhzEGkiMoSDwasgXKHi9zwwtsTdTqeRnBhn6EUc+Jxd8BAgwAIGUL+JG+jF3AAAAAElFTkSuQmCC);
+}
+
+.lt-ie9 .kintoneplugin-input-checkbox-item input[type="checkbox"] {
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.lt-ie9 .kintoneplugin-input-checkbox-item input[type="checkbox"] + label {
+ margin-left: 4px;
+}
+
+.lt-ie9 .kintoneplugin-input-checkbox-item input[type="checkbox"] + label:before {
+ display: none;
+}
+
+.lt-ie9 .kintoneplugin-input-checkbox-item input[type="checkbox"]:checked + label:after {
+ display: none;
+}
+
+/* Dropdown */
+/*
+
+
+
Option A
+
Option B
+
Option C
+
+*/
+.kintoneplugin-dropdown-outer {
+ display: inline-block;
+}
+
+.kintoneplugin-dropdown {
+ position: relative;
+ display: inline-block;
+ overflow: hidden;
+ box-sizing: border-box;
+ margin-right: 8px;
+ margin-bottom: 0;
+ padding: 0 16px;
+ min-width: 80px;
+ max-width: 280px;
+ height: 48px;
+ border: 1px solid #e3e7e8;
+ background-color: #f7f9fa;
+ box-shadow: 1px 1px 1px #fff inset;
+ color: #3498db;
+ text-overflow: ellipsis;
+}
+
+.kintoneplugin-dropdown:hover {
+ background-color: #f4f7f8;
+ cursor: pointer;
+}
+
+.kintoneplugin-dropdown-selected {
+ padding-right: 48px;
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAICAYAAADN5B7xAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjUwM0JEQzc5RUZENzExRTNBRjRFQ0I1NjlCRDUzOTA5IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjUwM0JEQzdBRUZENzExRTNBRjRFQ0I1NjlCRDUzOTA5Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NTAzQkRDNzdFRkQ3MTFFM0FGNEVDQjU2OUJENTM5MDkiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NTAzQkRDNzhFRkQ3MTFFM0FGNEVDQjU2OUJENTM5MDkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7KovlSAAAAhElEQVR42mI0mX7LjoGB4RADccCWCUjsB2ILIhSD1BwAadAB4qNAbIxHsTFUjQ5Iw3UgNgTiU1AaHRggyV1nggpegppyBoj1kBTrAvFZIDaBqmFgQZK8AMRmQHwe6kyYmAVUjAFdAwPUNGsgvgLl2wDxaWQFLFjcfAKIHaHs4+iSAAEGABHGF74RDCRaAAAAAElFTkSuQmCC) no-repeat right center;
+}
+
+.kintoneplugin-dropdown-selected-name {
+ color: #3498db;
+ font-size: 14px;
+ line-height: 48px;
+}
+
+.kintoneplugin-dropdown-list {
+ padding: 12px 0 0 0;
+ min-width: 280px;
+ border: 1px solid #e3e7e8;
+ background-color: #fff;
+ box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1);
+ line-height: 1;
+}
+
+.kintoneplugin-dropdown-list-item {
+ padding: 1px 16px 8px 25px;
+ line-height: 1;
+ cursor: pointer;
+}
+
+.kintoneplugin-dropdown-list-item-name {
+ font: normal 13px Arial, sans-serif;
+ line-height: 1;
+}
+
+.kintoneplugin-dropdown-list-item-selected {
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAALCAYAAACksgdhAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NDkxMSwgMjAxMy8xMC8yOS0xMTo0NzoxNiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVFNDNBMDI0MEIxNjExRTQ5MUVFOTIwNzZCRTVEQkEwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVFNDNBMDI1MEIxNjExRTQ5MUVFOTIwNzZCRTVEQkEwIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RUU0M0EwMjIwQjE2MTFFNDkxRUU5MjA3NkJFNURCQTAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RUU0M0EwMjMwQjE2MTFFNDkxRUU5MjA3NkJFNURCQTAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4n981NAAABVElEQVR42mL4//8/AzH44Ydf7D///AOzidJw9eV3Ps/F9392H32V8enHH0ZGsE484Pbbn1y5255/vfb6BwPIpnkBstpMIImvv/8xXnn1gx9dw623P7mztzz7evPNTwZmIN9Onue+DB/rM6a33/4wtR163Zq+6emHY4++ScE03Hjzkweo4cvNtz8Z/v77z2AizXV/gqekur4ExwfG9dc+GiZueHKOj52JQY6fjWGip6QIFxvTz4Jtzz9ff/ODAaiewRykwUtSA2jLL5CBjLfe/OTqPPJq7e47XzzYWZgYFAVZGbhYmRguv/zJ8PPvPwwNYE2ggHj//S9T2a4XW3fc+ewBshFk+tdf/xhMpbmeTvKSVJTmY/2N7Fd46L0DaizfDdR4+7MHiG+GQwMYIMcHKFAiVz86D4qTJx9/seKKN4x4evnlD8vPv/+Z5fhZf+KKO4AAAwB1mv8yxhgabQAAAABJRU5ErkJggg==) no-repeat 7px 4px;
+}
+
+.kintoneplugin-dropdown-list-item-selected .kintoneplugin-dropdown-list-item-name {
+ color: #3498db;
+}
+
+/* Dropdown (Simple) */
+/*
+
+
+
+
+
+*/
+.kintoneplugin-select-outer {
+ display: inline-block;
+}
+
+.kintoneplugin-select {
+ position: relative;
+ display: inline-block;
+ overflow: hidden;
+ box-sizing: border-box;
+ margin-right: 8px;
+ padding: 0 32px 0 8px;
+ min-width: 80px;
+ max-width: 280px;
+ height: 48px;
+ border: 1px solid #e3e7e8;
+ background-color: #f7f9fa;
+ box-shadow: 1px 1px 1px #fff inset;
+ text-overflow: ellipsis;
+}
+
+.kintoneplugin-select:after {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ display: block;
+ width: 32px;
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAICAYAAADN5B7xAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjUwM0JEQzc5RUZENzExRTNBRjRFQ0I1NjlCRDUzOTA5IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjUwM0JEQzdBRUZENzExRTNBRjRFQ0I1NjlCRDUzOTA5Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NTAzQkRDNzdFRkQ3MTFFM0FGNEVDQjU2OUJENTM5MDkiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NTAzQkRDNzhFRkQ3MTFFM0FGNEVDQjU2OUJENTM5MDkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7KovlSAAAAhElEQVR42mI0mX7LjoGB4RADccCWCUjsB2ILIhSD1BwAadAB4qNAbIxHsTFUjQ5Iw3UgNgTiU1AaHRggyV1nggpegppyBoj1kBTrAvFZIDaBqmFgQZK8AMRmQHwe6kyYmAVUjAFdAwPUNGsgvgLl2wDxaWQFLFjcfAKIHaHs4+iSAAEGABHGF74RDCRaAAAAAElFTkSuQmCC) no-repeat center center transparent;
+ content: "";
+ pointer-events: none;
+}
+
+.kintoneplugin-select:hover {
+ background-color: #f4f7f8;
+ cursor: pointer;
+}
+
+.lt-ie9 .kintoneplugin-select:hover {
+ background-color: transparent;
+}
+
+.kintoneplugin-select select {
+ margin: 0;
+ min-width: 140px;
+ width: 144%;
+ height: 48px;
+ outline: none;
+ border: 0 none;
+ background-color: transparent;
+ color: #3498db;
+ font-size: 13px;
+ cursor: pointer;
+ -moz-appearance: none;
+ -webkit-appearance: none;
+ -ms-appearance: none;
+ appearance: none;
+}
+
+.kintoneplugin-select option {
+ background-color: #fff;
+ color: #333;
+}
+
+/* Radio Button */
+/* For IE8, specify .lt-ie9 for the parent. */
+/*
+
+*/
+.kintoneplugin-input-radio-item {
+ display: inline-block;
+ margin-right: 16px;
+ margin-bottom: 8px;
+ padding-left: 1px;
+ max-width: 98%;
+ font-size: 14px;
+}
+
+.kintoneplugin-input-radio-item:hover + label {
+ color: #666;
+}
+
+.kintoneplugin-input-radio-item input[type="radio"] {
+ display: none;
+ cursor: pointer;
+}
+
+.kintoneplugin-input-radio-item input[type="radio"] + label {
+ position: relative;
+ display: inline-block;
+ margin-left: 32px;
+ vertical-align: middle;
+ cursor: pointer;
+}
+
+.kintoneplugin-input-radio-item input[type="checkbox"][disabled] + label {
+ color: #bababa;
+ cursor: not-allowed;
+}
+
+.kintoneplugin-input-radio-item input[type="radio"] + label:before {
+ position: absolute;
+ top: 50%;
+ left: -30px;
+ box-sizing: border-box;
+ margin-top: -11px;
+ width: 21px;
+ height: 21px;
+ border: 1px solid #e3e7e8;
+ border-radius: 50%;
+ background: #fff;
+ box-shadow: 1px 1px 3px #f5f5f5 inset, -1px -1px 3px #f5f5f5 inset;
+ content: "";
+ font-size: 14px;
+}
+
+.kintoneplugin-input-radio-item input[type="radio"]:checked + label:after {
+ position: absolute;
+ top: 50%;
+ left: -26px;
+ margin-top: -7px;
+ width: 13px;
+ height: 13px;
+ border-radius: 50%;
+ background-color: #3498db;
+ content: "";
+}
+
+.lt-ie9 .kintoneplugin-input-radio-item input[type="radio"] {
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.lt-ie9 .kintoneplugin-input-radio-item input[type="radio"] + label {
+ margin-left: 4px;
+}
+
+.lt-ie9 .kintoneplugin-input-radio-item input[type="radio"] + label:before {
+ display: none;
+}
+
+.lt-ie9 .kintoneplugin-input-radio-item input[type="radio"]:checked + label:after {
+ display: none;
+}
+
+/* Button */
+/*
+
+*/
+.kintoneplugin-button-normal {
+ display: inline-block;
+ box-sizing: border-box;
+ padding: 0 16px;
+ min-width: 163px;
+ height: 48px;
+ outline: none;
+ border: 1px solid #e3e7e8;
+ background-color: #f7f9fa;
+ box-shadow: 1px 1px 1px #fff inset;
+ color: #3498db;
+ text-align: center;
+ line-height: 48px;
+}
+
+.kintoneplugin-button-normal:hover {
+ background-color: #c8d6dd;
+ box-shadow: none;
+ cursor: pointer;
+}
+
+/* Disabled button */
+/*
+
+*/
+.kintoneplugin-button-disabled {
+ display: inline-block;
+ box-sizing: border-box;
+ padding: 0 16px;
+ min-width: 163px;
+ height: 48px;
+ outline: none;
+ border: 1px solid #e3e7e8;
+ background-color: #dbdcdd;
+ box-shadow: none;
+ color: #bababa;
+ text-align: center;
+ line-height: 48px;
+}
+
+/* Dialog OK button */
+/*
+
+*/
+.kintoneplugin-button-dialog-ok {
+ display: inline-block;
+ box-sizing: border-box;
+ padding: 0 16px;
+ min-width: 163px;
+ height: 48px;
+ outline: none;
+ border: 1px solid #e3e7e8;
+ background-color: #3498db;
+ box-shadow: 1px 1px 1px #8ccbee inset;
+ color: #fff;
+ text-align: center;
+ line-height: 48px;
+}
+
+.kintoneplugin-button-dialog-ok:hover {
+ background-color: #1d6fa5;
+ cursor: pointer;
+}
+
+/* Dialog Cancel button */
+/*
+
+*/
+.kintoneplugin-button-dialog-cancel {
+ display: inline-block;
+ box-sizing: border-box;
+ padding: 0 16px;
+ min-width: 163px;
+ height: 48px;
+ outline: none;
+ border: 1px solid #e3e7e8;
+ background-color: #f7f9fa;
+ box-shadow: 1px 1px 1px #fff inset;
+ color: #3498db;
+ text-align: center;
+ line-height: 48px;
+}
+
+.kintoneplugin-button-dialog-cancel:hover {
+ background-color: #c8d6dd;
+ box-shadow: none;
+ cursor: pointer;
+}
+
+
+/* Table */
+/*
+
+
+
+ | Title1 |
+ |
+
+
+
+
+ |
+
+ |
+
+
+
+ |
+
+
+
+*/
+.kintoneplugin-table {
+ border-collapse: collapse;
+ border-spacing: 0;
+ margin-left: 18px;
+ margin-bottom: 16px;
+}
+
+.kintoneplugin-table-th {
+ border-color: #3498db;
+ height: 40px;
+ color: #fff;
+ box-sizing: border-box;
+ text-align: left;
+ font-weight: 400;
+ font-size: 12px;
+ white-space: nowrap;
+ border-width: 2px;
+ background-color: #3498db;
+}
+
+.kintoneplugin-table-th .title {
+ display: inline-block;
+ padding: 4px 8px;
+ box-sizing: border-box;
+ min-width: 204px;
+}
+
+.kintoneplugin-table-th-blankspace {
+ background-color: transparent;
+}
+
+.kintoneplugin-table td {
+ border-color: #e3e7e8;
+ border-style: solid;
+ border-width: 0 1px 1px 0;
+ vertical-align: top;
+ padding: 4px 0;
+}
+
+.kintoneplugin-table td:first-child {
+ border-left-width: 1px;
+}
+
+.kintoneplugin-table td.kintoneplugin-table-td-operation {
+ border-right: 0;
+ border-bottom: 0;
+}
+
+.kintoneplugin-table-td-control {
+ padding: 0 8px;
+}
+
+.kintoneplugin-table-td-control-value {
+ overflow: hidden;
+ padding: 4px 0;
+ min-height: 21px;
+ color: #333;
+ background-color: transparent;
+}
+
+.kintoneplugin-table-td-operation .kintoneplugin-button-add-row-image, .kintoneplugin-table-td-operation .kintoneplugin-button-remove-row-image {
+ display: inline-block;
+ width: 24px;
+ height: 24px;
+}
+
+.kintoneplugin-table-td-operation .kintoneplugin-button-add-row-image {
+ margin-left: 12px;
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAABG0lEQVQ4ja2UMWrDUAyG31TIAUIO0cVbCMToHa0nyF4HqbtPkBPkAqEe/KQ4bclkCB06FDqoQ7Cb5j2/l1L/oMFY/pB+SzImoZzc1BZ1lpObpnKDsihLICkBubIohy4AuQKS0qIsk5DFajsBdAQo+0vIdQBJA+hosdpOgqD7h+c7S7yJQbwg3gSBgPz4J1DfuqNrkyHR2vswTPY5Ofip6mzqQDIfVVUTHpaXLVb/giFXxhhj5uvdLJGYhFmUw3y9mxlb1Jn/kj81Ikvy4X1T1FmwMkB+A+QWkFsgOamq9s/ILRC/Bisb1bPR/2ZszoDkBZC/bp6zc6uORtmAbslH281fV4OkSXjUAPLTIMjb1cg98zy6Vd2l7ecoom+t8LKwzLF7UgAAAABJRU5ErkJggg==) center center no-repeat;
+ border: 1px solid transparent;
+}
+.kintoneplugin-table-td-operation .kintoneplugin-button-add-row-image:hover {
+ cursor: pointer;
+}
+.kintoneplugin-table-td-operation .kintoneplugin-button-remove-row-image {
+ margin-left: 4px;
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAABPUlEQVQ4ja2UvW6DMBDHUTMkK0vyQJXoxoaUB2nWxEorMcNgD/gOWbIii7GSJx6Bmdegq1lKF6CUAqYSJ/2HE8dP5/tyHIvFcbynlLpxHO9tsZPGGDsCgI+IrwBAOrW+zxg7WiFBEOwAwEPE6xAyVpqmNwDwgiDYTYIIIU+c8/MSZCzO+XkSyDl//g9oIO8XKEmSk+1pc0LEa5Ikpx4GAP5csFIqVEqFFqjfw8ZdGyrLsjDLMhvs0hX+sBS4EkYIIQeHUuqOP5Rl+WGMqYwxVV3Xn03TfHW+MaYqiuIx/odS6k5mJqV811pHWusoz3OW5znrfK11JKV8m8xs05rZurkS9tPNpTkTQtyFEPfVc9Zm522yAd2Sb7abw6vRXoVZSJqmN0R8mQWNdxUm7hkAXADA/1OjtdZd2n6OFuwblG9sdxWO0ggAAAAASUVORK5CYII=) center center no-repeat;
+ border: 1px solid transparent;
+}
+
+.kintoneplugin-table-td-operation .kintoneplugin-button-remove-row-image:hover {
+ cursor: pointer;
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAACi0lEQVQ4jZ2UT0hUQRzHp0uHDtFVk0QqTGtdddXVN/Pe7ubuuu3Me7sY2s1jRZcOQX+kQC+dkrr15xAIElhIEBSZloKHPHTMIlHS9r2ZNdvUNK1Evh3S1WVdNX/wuf1+H+bHzHcIyVET4ZoiJViLjLKrjmBtUtBrdpSetwVzE0L25JrLKBlkh6RgHZJTWwmGLDidk5x2qYhWvaXIidKQ5Gx0U8kGkoJBCfpTcXZpU5HNNS45+7WdaKNwJmZgJORtz1wtqhVKQSd3Klpj2tSRMg28NtzhdZlgHf8rUoJBCoZZy8B4Q+27+578fWQiXFMkOfu6W5kSFL8bA3hQUWwRJVhLdqMOZW7Daq/NKVaa6tFdV9ZJJKetGRLLgBOogENL4bAc0FI4QQ+UZUByipSpIylYP3EEa0vLIrWQfjcWeh5hOTGBP2OfshkfxfLkZ8zduw1HOwZlGZgSOuZjvgGiOL2Rlp2qg6yvxNzdDiwNvsJi3/Ns+l9gaaAX329eh2OcgDR1TJs6Zi3jDVFcuyA3rhnzwa4tRsKVj4S7IJuyAiRcB+Hox6HifticYrHRj7eBqh6SiHjLFGcLGRdgGVAxP1TMlwP/vx7BYEcpcCaEO+6j59Zi1L2bp5HgFPNxH2Ysw24tKcwjhBDyJaJVJ9OZ2xkOp1CCAc1BdFaXXMyI1CTXrkybOr6ZOuQOTpRcFY2E6540EbI3K+zvQ972pGBIWQaSpg6bU0i+/todTmFzioW4D2iux8eG2p6n5eUHcn5Dw4Gq6FhEG0qZOlZOBzAb8yG5GuqlRj/QHMSU0Me7akoub/mfpYXeI/uHfJXmM8318EPY2/sj7h+ctfS+4ZOex7dch8++9JTkbTb3FyHXv8RgEtykAAAAAElFTkSuQmCC) center center no-repeat;
+}
diff --git a/features/assets/plugin_project_sandbox/css/config.css b/features/assets/plugin_project_sandbox/css/config.css
new file mode 100644
index 00000000000..36bb4c5b542
--- /dev/null
+++ b/features/assets/plugin_project_sandbox/css/config.css
@@ -0,0 +1,7 @@
+.settings-heading {
+ padding: 1em 0;
+}
+
+.kintoneplugin-input-text {
+ width: 20em;
+}
\ No newline at end of file
diff --git a/features/assets/plugin_project_sandbox/css/desktop.css b/features/assets/plugin_project_sandbox/css/desktop.css
new file mode 100644
index 00000000000..661fa70c85d
--- /dev/null
+++ b/features/assets/plugin_project_sandbox/css/desktop.css
@@ -0,0 +1,10 @@
+.plugin-space-heading {
+ font-size: 1.5rem;
+ margin: 0.8rem;
+}
+.plugin-space-message {
+ display: inline-block;
+ font-size: 1.2em;
+ margin: 0.8rem;
+ margin-top: 0;
+}
diff --git a/features/assets/plugin_project_sandbox/css/mobile.css b/features/assets/plugin_project_sandbox/css/mobile.css
new file mode 100644
index 00000000000..661fa70c85d
--- /dev/null
+++ b/features/assets/plugin_project_sandbox/css/mobile.css
@@ -0,0 +1,10 @@
+.plugin-space-heading {
+ font-size: 1.5rem;
+ margin: 0.8rem;
+}
+.plugin-space-message {
+ display: inline-block;
+ font-size: 1.2em;
+ margin: 0.8rem;
+ margin-top: 0;
+}
diff --git a/features/assets/plugin_project_sandbox/html/config.html b/features/assets/plugin_project_sandbox/html/config.html
new file mode 100644
index 00000000000..dd9a0e3c09a
--- /dev/null
+++ b/features/assets/plugin_project_sandbox/html/config.html
@@ -0,0 +1,16 @@
+
+ Settings for hello-kintone
+ This message is displayed on the app page after the app has been updated.
+
+
\ No newline at end of file
diff --git a/features/assets/plugin_project_sandbox/image/icon.png b/features/assets/plugin_project_sandbox/image/icon.png
new file mode 100644
index 00000000000..aed0c9ff2f3
Binary files /dev/null and b/features/assets/plugin_project_sandbox/image/icon.png differ
diff --git a/features/assets/plugin_project_sandbox/js/config.js b/features/assets/plugin_project_sandbox/js/config.js
new file mode 100644
index 00000000000..a1e3993c67d
--- /dev/null
+++ b/features/assets/plugin_project_sandbox/js/config.js
@@ -0,0 +1,25 @@
+(function (PLUGIN_ID) {
+ const formEl = document.querySelector(".js-submit-settings");
+ const cancelButtonEl = document.querySelector(".js-cancel-button");
+ const messageEl = document.querySelector(".js-text-message");
+ if (!(formEl && cancelButtonEl && messageEl)) {
+ throw new Error("Required elements do not exist.");
+ }
+
+ const config = kintone.plugin.app.getConfig(PLUGIN_ID);
+ if (config.message) {
+ messageEl.value = config.message;
+ }
+
+ formEl.addEventListener("submit", (e) => {
+ e.preventDefault();
+ kintone.plugin.app.setConfig({ message: messageEl.value }, () => {
+ alert("The plug-in settings have been saved. Please update the app!");
+ window.location.href = "../../flow?app=" + kintone.app.getId();
+ });
+ });
+
+ cancelButtonEl.addEventListener("click", () => {
+ window.location.href = "../../" + kintone.app.getId() + "/plugin/";
+ });
+})(kintone.$PLUGIN_ID);
diff --git a/features/assets/plugin_project_sandbox/js/desktop.js b/features/assets/plugin_project_sandbox/js/desktop.js
new file mode 100644
index 00000000000..aa010767a2a
--- /dev/null
+++ b/features/assets/plugin_project_sandbox/js/desktop.js
@@ -0,0 +1,22 @@
+(function (PLUGIN_ID) {
+ kintone.events.on("app.record.index.show", () => {
+ const spaceEl = kintone.app.getHeaderSpaceElement();
+ if (spaceEl === null) {
+ throw new Error("The header element is unavailable on this page.");
+ }
+
+ const fragment = document.createDocumentFragment();
+ const headingEl = document.createElement("h3");
+ const messageEl = document.createElement("p");
+
+ const config = kintone.plugin.app.getConfig(PLUGIN_ID);
+ messageEl.textContent = config.message;
+ messageEl.classList.add("plugin-space-message");
+ headingEl.textContent = "Hello kintone plugin!";
+ headingEl.classList.add("plugin-space-heading");
+
+ fragment.appendChild(headingEl);
+ fragment.appendChild(messageEl);
+ spaceEl.appendChild(fragment);
+ });
+})(kintone.$PLUGIN_ID);
diff --git a/features/assets/plugin_project_sandbox/js/mobile.js b/features/assets/plugin_project_sandbox/js/mobile.js
new file mode 100644
index 00000000000..63e9f89e7b2
--- /dev/null
+++ b/features/assets/plugin_project_sandbox/js/mobile.js
@@ -0,0 +1,22 @@
+(function (PLUGIN_ID) {
+ kintone.events.on("mobile.app.record.index.show", () => {
+ const spaceEl = kintone.mobile.app.getHeaderSpaceElement();
+ if (spaceEl === null) {
+ throw new Error("The header element is unavailable on this page.");
+ }
+
+ const fragment = document.createDocumentFragment();
+ const headingEl = document.createElement("h3");
+ const messageEl = document.createElement("p");
+
+ const config = kintone.plugin.app.getConfig(PLUGIN_ID);
+ messageEl.textContent = config.message;
+ messageEl.classList.add("plugin-space-message");
+ headingEl.textContent = "Hello kintone plugin!";
+ headingEl.classList.add("plugin-space-heading");
+
+ fragment.appendChild(headingEl);
+ fragment.appendChild(messageEl);
+ spaceEl.appendChild(fragment);
+ });
+})(kintone.$PLUGIN_ID);
diff --git a/features/assets/plugin_project_sandbox/manifest.json b/features/assets/plugin_project_sandbox/manifest.json
new file mode 100644
index 00000000000..cd2638dfe75
--- /dev/null
+++ b/features/assets/plugin_project_sandbox/manifest.json
@@ -0,0 +1,36 @@
+{
+ "$schema": "https://raw.githubusercontent.com/kintone/js-sdk/%40kintone/plugin-manifest-validator%4011.2.0/packages/plugin-manifest-validator/manifest-schema.json",
+ "manifest_version": 1,
+ "version": 1,
+ "type": "APP",
+ "sandbox": true,
+ "allowed_hosts": ["https://example.com", "wss://example.com/ws/*"],
+ "permissions": {
+ "js_api": ["app:read", "network:connect"],
+ "rest_api": ["app_record:read"]
+ },
+ "desktop": {
+ "js": ["js/desktop.js"],
+ "css": ["css/51-modern-default.css", "css/desktop.css"]
+ },
+ "icon": "image/icon.png",
+ "config": {
+ "html": "html/config.html",
+ "js": ["js/config.js"],
+ "css": ["css/51-modern-default.css", "css/config.css"],
+ "required_params": ["message"]
+ },
+ "name": {
+ "en": "hello-kintone-sandbox"
+ },
+ "description": {
+ "en": "Sandbox-enabled plugin sample."
+ },
+ "homepage_url": {
+ "en": "https://example.com/en/"
+ },
+ "mobile": {
+ "js": ["js/mobile.js"],
+ "css": ["css/mobile.css"]
+ }
+}
diff --git a/features/assets/plugin_project_sandbox/private.ppk b/features/assets/plugin_project_sandbox/private.ppk
new file mode 100644
index 00000000000..fbafd3d3ef4
--- /dev/null
+++ b/features/assets/plugin_project_sandbox/private.ppk
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXgIBAAKBgQDdjV2LPB6D8OQBnJDRcRl4u5FpwVmAesqRPCrDt6UyjGl8V0Mb
+c4TAo4IEmuiftgCeyPkSIzPicEW4fxySqr7U8YZPkSdvB6WaOpbuiRIqryS9scHO
+wDOtSzifo9+UpZhofx155te+88VTBDIU2zCIdhmShvwr5y0L3MlcF4BTxwIDAQAB
+AoGASURbwBTknouGS4YkWi8F1mhpIUkguR1iaf80wT61Me8/XzBYb/aW20H3WGCG
+N3Lv55Lc04Oyv9qTI/1dTJ+Mta+ZfkAOkEp+XwF3jW1qDc25TZsP8wXOW5wSRdCs
+N4MIpZXLq0OaEC5xw7C8Dt8f+BAhPkUAzD8gehbfts4UybkCQQDuV4uXdBfVcDLW
+srEn1oNyIJ3uhFzvZMfEkmvxSQNpdbcL1kfpnFoSwImYN5r6AwMOYgDDjI+qL91j
+NXZ/zs1dAkEA7fdhk1Qn7JHHcl3ML7w/SL59JLqpcOEF4rZ66ZKDfqKDu5+JN5Q+
+9+86es4sl4tLN+kamgvR9bUOKkZU6R4vcwJBANjTsf1tswUMlmN1mu74Gwrnm2XS
+6s0qrQYqgqK2XrFBUu4k2bUv9U2b9VESPR33QX+DLti3djdIZiqMB6rME00CQQDZ
+gWnAfgVX6A9C65T8dLXrSaGc9rh1Ilh81ooWAAMMtoJt9e43zNqZSCJNqTF8+qav
+3fKgpvkr+meOIGbwBNUdAkEA2sPlzdNLYrA6R0Bsxgwk5XixTlzYZ+BIHrrRGSUM
+UsbQmXsHSbhA6rNWeBEO4fdbmPZOUbP0mDbPQpZA9TQJ2A==
+-----END RSA PRIVATE KEY-----
\ No newline at end of file
diff --git a/features/plugin/pack.feature b/features/plugin/pack.feature
index b8360046158..1eccaf3065e 100644
--- a/features/plugin/pack.feature
+++ b/features/plugin/pack.feature
@@ -19,3 +19,37 @@ Feature: plugin pack
When I run the command with args "plugin pack --input ./src/manifest.json --private-key ./src/private.ppk --output ./dist/plugin.zip"
Then I should get the exit code is zero
And I have a file at "./dist/plugin.zip"
+
+ Scenario: Pack a plugin with sandbox, allowed_hosts and permissions
+ Given An asset with key "plugin_project_sandbox" is available as "src"
+ When I run the command with args "plugin pack --input ./src/manifest.json --private-key ./src/private.ppk"
+ Then I should get the exit code is zero
+ And I have a file at "plugin.zip"
+
+ Scenario: Plugin info surfaces sandbox, allowed_hosts and permissions
+ Given An asset with key "plugin_project_sandbox" is available as "src"
+ When I run the command with args "plugin pack --input ./src/manifest.json --private-key ./src/private.ppk"
+ Then I should get the exit code is zero
+ And I have a file at "plugin.zip"
+ When I run the command with args "plugin info --input ./plugin.zip"
+ Then I should get the exit code is zero
+ And The output message should match with the pattern:
+ """
+ sandbox: true
+ allowed_hosts: https://example\.com, wss://example\.com/ws/\*
+ permissions\.js_api: app:read, network:connect
+ permissions\.rest_api: app_record:read
+ """
+
+ Scenario: Plugin info --format json surfaces sandbox-related keys with snake_case names
+ Given An asset with key "plugin_project_sandbox" is available as "src"
+ When I run the command with args "plugin pack --input ./src/manifest.json --private-key ./src/private.ppk"
+ Then I should get the exit code is zero
+ And I have a file at "plugin.zip"
+ When I run the command with args "plugin info --input ./plugin.zip --format json"
+ Then I should get the exit code is zero
+ And The output message should match with the pattern: "\"sandbox\": true"
+ And The output message should match with the pattern: "\"allowed_hosts\": \["
+ And The output message should match with the pattern: "\"permissions\":"
+ And The output message should match with the pattern: "\"js_api\":"
+ And The output message should match with the pattern: "\"rest_api\":"
diff --git a/package.json b/package.json
index aa46de075be..4f66b531968 100644
--- a/package.json
+++ b/package.json
@@ -101,7 +101,7 @@
},
"dependencies": {
"@inquirer/prompts": "7.10.1",
- "@kintone/plugin-manifest-validator": "11.1.1",
+ "@kintone/plugin-manifest-validator": "11.2.0",
"@kintone/rest-api-client": "6.1.6",
"chalk": "4.1.2",
"chokidar": "4.0.3",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 91b3b55f365..0256310ce93 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -17,8 +17,8 @@ importers:
specifier: 7.10.1
version: 7.10.1(@types/node@18.19.130)
'@kintone/plugin-manifest-validator':
- specifier: 11.1.1
- version: 11.1.1
+ specifier: 11.2.0
+ version: 11.2.0
'@kintone/rest-api-client':
specifier: 6.1.6
version: 6.1.6
@@ -876,7 +876,7 @@ packages:
engines: {node: '>=6.9.0'}
'@colors/colors@1.5.0':
- resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
+ resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==, tarball: https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz}
engines: {node: '>=0.1.90'}
'@cspotcode/source-map-support@0.8.1':
@@ -1423,7 +1423,7 @@ packages:
react-dom: ^18.0.0 || ^19.0.0
'@docusaurus/react-loadable@6.0.0':
- resolution: {integrity: sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==}
+ resolution: {integrity: sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==, tarball: https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz}
peerDependencies:
react: '*'
@@ -1475,169 +1475,169 @@ packages:
engines: {node: '>=20.0'}
'@emnapi/core@1.5.0':
- resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==}
+ resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==, tarball: https://registry.npmjs.org/@emnapi/core/-/core-1.5.0.tgz}
'@emnapi/runtime@1.5.0':
- resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==}
+ resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==, tarball: https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.5.0.tgz}
'@emnapi/wasi-threads@1.1.0':
- resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==}
+ resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==, tarball: https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz}
'@epic-web/invariant@1.0.0':
resolution: {integrity: sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==}
'@esbuild/aix-ppc64@0.27.3':
- resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==}
+ resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==, tarball: https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
'@esbuild/android-arm64@0.27.3':
- resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==}
+ resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==, tarball: https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
'@esbuild/android-arm@0.27.3':
- resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==}
+ resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==, tarball: https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
'@esbuild/android-x64@0.27.3':
- resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==}
+ resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==, tarball: https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
'@esbuild/darwin-arm64@0.27.3':
- resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==}
+ resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==, tarball: https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
'@esbuild/darwin-x64@0.27.3':
- resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==}
+ resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==, tarball: https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
'@esbuild/freebsd-arm64@0.27.3':
- resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==}
+ resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==, tarball: https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
'@esbuild/freebsd-x64@0.27.3':
- resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==}
+ resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==, tarball: https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
'@esbuild/linux-arm64@0.27.3':
- resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==}
+ resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==, tarball: https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
'@esbuild/linux-arm@0.27.3':
- resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==}
+ resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==, tarball: https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
'@esbuild/linux-ia32@0.27.3':
- resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==}
+ resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==, tarball: https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
'@esbuild/linux-loong64@0.27.3':
- resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==}
+ resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==, tarball: https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
'@esbuild/linux-mips64el@0.27.3':
- resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==}
+ resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==, tarball: https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
'@esbuild/linux-ppc64@0.27.3':
- resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==}
+ resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==, tarball: https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
'@esbuild/linux-riscv64@0.27.3':
- resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==}
+ resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==, tarball: https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
'@esbuild/linux-s390x@0.27.3':
- resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==}
+ resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==, tarball: https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
'@esbuild/linux-x64@0.27.3':
- resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==}
+ resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==, tarball: https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
'@esbuild/netbsd-arm64@0.27.3':
- resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==}
+ resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==, tarball: https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz}
engines: {node: '>=18'}
cpu: [arm64]
os: [netbsd]
'@esbuild/netbsd-x64@0.27.3':
- resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==}
+ resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==, tarball: https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
'@esbuild/openbsd-arm64@0.27.3':
- resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==}
+ resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==, tarball: https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
'@esbuild/openbsd-x64@0.27.3':
- resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==}
+ resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==, tarball: https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
'@esbuild/openharmony-arm64@0.27.3':
- resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==}
+ resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==, tarball: https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz}
engines: {node: '>=18'}
cpu: [arm64]
os: [openharmony]
'@esbuild/sunos-x64@0.27.3':
- resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==}
+ resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==, tarball: https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
'@esbuild/win32-arm64@0.27.3':
- resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==}
+ resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==, tarball: https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
'@esbuild/win32-ia32@0.27.3':
- resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==}
+ resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==, tarball: https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
'@esbuild/win32-x64@0.27.3':
- resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==}
+ resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==, tarball: https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz}
engines: {node: '>=18'}
cpu: [x64]
os: [win32]
@@ -1918,8 +1918,8 @@ packages:
peerDependencies:
tslib: '2'
- '@kintone/plugin-manifest-validator@11.1.1':
- resolution: {integrity: sha512-ucGgZtgNSFg3cRSpd4ddM5D9AJYMVCa+GWxTzoSbmP+wDxW8n7l8w6kDW5FW9rWMPNeiMx9Idm7nXf0AE6f+qw==}
+ '@kintone/plugin-manifest-validator@11.2.0':
+ resolution: {integrity: sha512-eQYVM+RzZwpObmUmWz5xVOuAwu9acn6DINk9ij6C7ES0NeRuPtqOACutwFeL8rn2WbNn9N3WYHVzrYeFNdC0Lg==, tarball: https://registry.npmjs.org/@kintone/plugin-manifest-validator/-/plugin-manifest-validator-11.2.0.tgz}
engines: {node: '>=20'}
'@kintone/rest-api-client@6.1.6':
@@ -1939,7 +1939,7 @@ packages:
react: '>=16'
'@napi-rs/wasm-runtime@0.2.12':
- resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
+ resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==, tarball: https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz}
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
@@ -2006,95 +2006,95 @@ packages:
resolution: {integrity: sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==}
'@parcel/watcher-android-arm64@2.5.1':
- resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==}
+ resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==, tarball: https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [android]
'@parcel/watcher-darwin-arm64@2.5.1':
- resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==}
+ resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==, tarball: https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [darwin]
'@parcel/watcher-darwin-x64@2.5.1':
- resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==}
+ resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==, tarball: https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [darwin]
'@parcel/watcher-freebsd-x64@2.5.1':
- resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==}
+ resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==, tarball: https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [freebsd]
'@parcel/watcher-linux-arm-glibc@2.5.1':
- resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==}
+ resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==, tarball: https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz}
engines: {node: '>= 10.0.0'}
cpu: [arm]
os: [linux]
libc: [glibc]
'@parcel/watcher-linux-arm-musl@2.5.1':
- resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==}
+ resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==, tarball: https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz}
engines: {node: '>= 10.0.0'}
cpu: [arm]
os: [linux]
libc: [musl]
'@parcel/watcher-linux-arm64-glibc@2.5.1':
- resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==}
+ resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==, tarball: https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@parcel/watcher-linux-arm64-musl@2.5.1':
- resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==}
+ resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==, tarball: https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [linux]
libc: [musl]
'@parcel/watcher-linux-x64-glibc@2.5.1':
- resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==}
+ resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==, tarball: https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [linux]
libc: [glibc]
'@parcel/watcher-linux-x64-musl@2.5.1':
- resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==}
+ resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==, tarball: https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [linux]
libc: [musl]
'@parcel/watcher-win32-arm64@2.5.1':
- resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==}
+ resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==, tarball: https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [win32]
'@parcel/watcher-win32-ia32@2.5.1':
- resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==}
+ resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==, tarball: https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz}
engines: {node: '>= 10.0.0'}
cpu: [ia32]
os: [win32]
'@parcel/watcher-win32-x64@2.5.1':
- resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==}
+ resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==, tarball: https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [win32]
'@parcel/watcher@2.5.1':
- resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==}
+ resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==, tarball: https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz}
engines: {node: '>= 10.0.0'}
'@pkgjs/parseargs@0.11.0':
- resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
+ resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==, tarball: https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz}
engines: {node: '>=14'}
'@pkgr/core@0.2.9':
@@ -2121,123 +2121,123 @@ packages:
engines: {node: '>= 22'}
'@rollup/rollup-android-arm-eabi@4.52.2':
- resolution: {integrity: sha512-o3pcKzJgSGt4d74lSZ+OCnHwkKBeAbFDmbEm5gg70eA8VkyCuC/zV9TwBnmw6VjDlRdF4Pshfb+WE9E6XY1PoQ==}
+ resolution: {integrity: sha512-o3pcKzJgSGt4d74lSZ+OCnHwkKBeAbFDmbEm5gg70eA8VkyCuC/zV9TwBnmw6VjDlRdF4Pshfb+WE9E6XY1PoQ==, tarball: https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.2.tgz}
cpu: [arm]
os: [android]
'@rollup/rollup-android-arm64@4.52.2':
- resolution: {integrity: sha512-cqFSWO5tX2vhC9hJTK8WAiPIm4Q8q/cU8j2HQA0L3E1uXvBYbOZMhE2oFL8n2pKB5sOCHY6bBuHaRwG7TkfJyw==}
+ resolution: {integrity: sha512-cqFSWO5tX2vhC9hJTK8WAiPIm4Q8q/cU8j2HQA0L3E1uXvBYbOZMhE2oFL8n2pKB5sOCHY6bBuHaRwG7TkfJyw==, tarball: https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.2.tgz}
cpu: [arm64]
os: [android]
'@rollup/rollup-darwin-arm64@4.52.2':
- resolution: {integrity: sha512-vngduywkkv8Fkh3wIZf5nFPXzWsNsVu1kvtLETWxTFf/5opZmflgVSeLgdHR56RQh71xhPhWoOkEBvbehwTlVA==}
+ resolution: {integrity: sha512-vngduywkkv8Fkh3wIZf5nFPXzWsNsVu1kvtLETWxTFf/5opZmflgVSeLgdHR56RQh71xhPhWoOkEBvbehwTlVA==, tarball: https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.2.tgz}
cpu: [arm64]
os: [darwin]
'@rollup/rollup-darwin-x64@4.52.2':
- resolution: {integrity: sha512-h11KikYrUCYTrDj6h939hhMNlqU2fo/X4NB0OZcys3fya49o1hmFaczAiJWVAFgrM1NCP6RrO7lQKeVYSKBPSQ==}
+ resolution: {integrity: sha512-h11KikYrUCYTrDj6h939hhMNlqU2fo/X4NB0OZcys3fya49o1hmFaczAiJWVAFgrM1NCP6RrO7lQKeVYSKBPSQ==, tarball: https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.2.tgz}
cpu: [x64]
os: [darwin]
'@rollup/rollup-freebsd-arm64@4.52.2':
- resolution: {integrity: sha512-/eg4CI61ZUkLXxMHyVlmlGrSQZ34xqWlZNW43IAU4RmdzWEx0mQJ2mN/Cx4IHLVZFL6UBGAh+/GXhgvGb+nVxw==}
+ resolution: {integrity: sha512-/eg4CI61ZUkLXxMHyVlmlGrSQZ34xqWlZNW43IAU4RmdzWEx0mQJ2mN/Cx4IHLVZFL6UBGAh+/GXhgvGb+nVxw==, tarball: https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.2.tgz}
cpu: [arm64]
os: [freebsd]
'@rollup/rollup-freebsd-x64@4.52.2':
- resolution: {integrity: sha512-QOWgFH5X9+p+S1NAfOqc0z8qEpJIoUHf7OWjNUGOeW18Mx22lAUOiA9b6r2/vpzLdfxi/f+VWsYjUOMCcYh0Ng==}
+ resolution: {integrity: sha512-QOWgFH5X9+p+S1NAfOqc0z8qEpJIoUHf7OWjNUGOeW18Mx22lAUOiA9b6r2/vpzLdfxi/f+VWsYjUOMCcYh0Ng==, tarball: https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.2.tgz}
cpu: [x64]
os: [freebsd]
'@rollup/rollup-linux-arm-gnueabihf@4.52.2':
- resolution: {integrity: sha512-kDWSPafToDd8LcBYd1t5jw7bD5Ojcu12S3uT372e5HKPzQt532vW+rGFFOaiR0opxePyUkHrwz8iWYEyH1IIQA==}
+ resolution: {integrity: sha512-kDWSPafToDd8LcBYd1t5jw7bD5Ojcu12S3uT372e5HKPzQt532vW+rGFFOaiR0opxePyUkHrwz8iWYEyH1IIQA==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.2.tgz}
cpu: [arm]
os: [linux]
libc: [glibc]
'@rollup/rollup-linux-arm-musleabihf@4.52.2':
- resolution: {integrity: sha512-gKm7Mk9wCv6/rkzwCiUC4KnevYhlf8ztBrDRT9g/u//1fZLapSRc+eDZj2Eu2wpJ+0RzUKgtNijnVIB4ZxyL+w==}
+ resolution: {integrity: sha512-gKm7Mk9wCv6/rkzwCiUC4KnevYhlf8ztBrDRT9g/u//1fZLapSRc+eDZj2Eu2wpJ+0RzUKgtNijnVIB4ZxyL+w==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.2.tgz}
cpu: [arm]
os: [linux]
libc: [musl]
'@rollup/rollup-linux-arm64-gnu@4.52.2':
- resolution: {integrity: sha512-66lA8vnj5mB/rtDNwPgrrKUOtCLVQypkyDa2gMfOefXK6rcZAxKLO9Fy3GkW8VkPnENv9hBkNOFfGLf6rNKGUg==}
+ resolution: {integrity: sha512-66lA8vnj5mB/rtDNwPgrrKUOtCLVQypkyDa2gMfOefXK6rcZAxKLO9Fy3GkW8VkPnENv9hBkNOFfGLf6rNKGUg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.2.tgz}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@rollup/rollup-linux-arm64-musl@4.52.2':
- resolution: {integrity: sha512-s+OPucLNdJHvuZHuIz2WwncJ+SfWHFEmlC5nKMUgAelUeBUnlB4wt7rXWiyG4Zn07uY2Dd+SGyVa9oyLkVGOjA==}
+ resolution: {integrity: sha512-s+OPucLNdJHvuZHuIz2WwncJ+SfWHFEmlC5nKMUgAelUeBUnlB4wt7rXWiyG4Zn07uY2Dd+SGyVa9oyLkVGOjA==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.2.tgz}
cpu: [arm64]
os: [linux]
libc: [musl]
'@rollup/rollup-linux-loong64-gnu@4.52.2':
- resolution: {integrity: sha512-8wTRM3+gVMDLLDdaT6tKmOE3lJyRy9NpJUS/ZRWmLCmOPIJhVyXwjBo+XbrrwtV33Em1/eCTd5TuGJm4+DmYjw==}
+ resolution: {integrity: sha512-8wTRM3+gVMDLLDdaT6tKmOE3lJyRy9NpJUS/ZRWmLCmOPIJhVyXwjBo+XbrrwtV33Em1/eCTd5TuGJm4+DmYjw==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.2.tgz}
cpu: [loong64]
os: [linux]
libc: [glibc]
'@rollup/rollup-linux-ppc64-gnu@4.52.2':
- resolution: {integrity: sha512-6yqEfgJ1anIeuP2P/zhtfBlDpXUb80t8DpbYwXQ3bQd95JMvUaqiX+fKqYqUwZXqdJDd8xdilNtsHM2N0cFm6A==}
+ resolution: {integrity: sha512-6yqEfgJ1anIeuP2P/zhtfBlDpXUb80t8DpbYwXQ3bQd95JMvUaqiX+fKqYqUwZXqdJDd8xdilNtsHM2N0cFm6A==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.2.tgz}
cpu: [ppc64]
os: [linux]
libc: [glibc]
'@rollup/rollup-linux-riscv64-gnu@4.52.2':
- resolution: {integrity: sha512-sshYUiYVSEI2B6dp4jMncwxbrUqRdNApF2c3bhtLAU0qA8Lrri0p0NauOsTWh3yCCCDyBOjESHMExonp7Nzc0w==}
+ resolution: {integrity: sha512-sshYUiYVSEI2B6dp4jMncwxbrUqRdNApF2c3bhtLAU0qA8Lrri0p0NauOsTWh3yCCCDyBOjESHMExonp7Nzc0w==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.2.tgz}
cpu: [riscv64]
os: [linux]
libc: [glibc]
'@rollup/rollup-linux-riscv64-musl@4.52.2':
- resolution: {integrity: sha512-duBLgd+3pqC4MMwBrKkFxaZerUxZcYApQVC5SdbF5/e/589GwVvlRUnyqMFbM8iUSb1BaoX/3fRL7hB9m2Pj8Q==}
+ resolution: {integrity: sha512-duBLgd+3pqC4MMwBrKkFxaZerUxZcYApQVC5SdbF5/e/589GwVvlRUnyqMFbM8iUSb1BaoX/3fRL7hB9m2Pj8Q==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.2.tgz}
cpu: [riscv64]
os: [linux]
libc: [musl]
'@rollup/rollup-linux-s390x-gnu@4.52.2':
- resolution: {integrity: sha512-tzhYJJidDUVGMgVyE+PmxENPHlvvqm1KILjjZhB8/xHYqAGeizh3GBGf9u6WdJpZrz1aCpIIHG0LgJgH9rVjHQ==}
+ resolution: {integrity: sha512-tzhYJJidDUVGMgVyE+PmxENPHlvvqm1KILjjZhB8/xHYqAGeizh3GBGf9u6WdJpZrz1aCpIIHG0LgJgH9rVjHQ==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.2.tgz}
cpu: [s390x]
os: [linux]
libc: [glibc]
'@rollup/rollup-linux-x64-gnu@4.52.2':
- resolution: {integrity: sha512-opH8GSUuVcCSSyHHcl5hELrmnk4waZoVpgn/4FDao9iyE4WpQhyWJ5ryl5M3ocp4qkRuHfyXnGqg8M9oKCEKRA==}
+ resolution: {integrity: sha512-opH8GSUuVcCSSyHHcl5hELrmnk4waZoVpgn/4FDao9iyE4WpQhyWJ5ryl5M3ocp4qkRuHfyXnGqg8M9oKCEKRA==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.2.tgz}
cpu: [x64]
os: [linux]
libc: [glibc]
'@rollup/rollup-linux-x64-musl@4.52.2':
- resolution: {integrity: sha512-LSeBHnGli1pPKVJ79ZVJgeZWWZXkEe/5o8kcn23M8eMKCUANejchJbF/JqzM4RRjOJfNRhKJk8FuqL1GKjF5oQ==}
+ resolution: {integrity: sha512-LSeBHnGli1pPKVJ79ZVJgeZWWZXkEe/5o8kcn23M8eMKCUANejchJbF/JqzM4RRjOJfNRhKJk8FuqL1GKjF5oQ==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.2.tgz}
cpu: [x64]
os: [linux]
libc: [musl]
'@rollup/rollup-openharmony-arm64@4.52.2':
- resolution: {integrity: sha512-uPj7MQ6/s+/GOpolavm6BPo+6CbhbKYyZHUDvZ/SmJM7pfDBgdGisFX3bY/CBDMg2ZO4utfhlApkSfZ92yXw7Q==}
+ resolution: {integrity: sha512-uPj7MQ6/s+/GOpolavm6BPo+6CbhbKYyZHUDvZ/SmJM7pfDBgdGisFX3bY/CBDMg2ZO4utfhlApkSfZ92yXw7Q==, tarball: https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.2.tgz}
cpu: [arm64]
os: [openharmony]
'@rollup/rollup-win32-arm64-msvc@4.52.2':
- resolution: {integrity: sha512-Z9MUCrSgIaUeeHAiNkm3cQyst2UhzjPraR3gYYfOjAuZI7tcFRTOD+4cHLPoS/3qinchth+V56vtqz1Tv+6KPA==}
+ resolution: {integrity: sha512-Z9MUCrSgIaUeeHAiNkm3cQyst2UhzjPraR3gYYfOjAuZI7tcFRTOD+4cHLPoS/3qinchth+V56vtqz1Tv+6KPA==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.2.tgz}
cpu: [arm64]
os: [win32]
'@rollup/rollup-win32-ia32-msvc@4.52.2':
- resolution: {integrity: sha512-+GnYBmpjldD3XQd+HMejo+0gJGwYIOfFeoBQv32xF/RUIvccUz20/V6Otdv+57NE70D5pa8W/jVGDoGq0oON4A==}
+ resolution: {integrity: sha512-+GnYBmpjldD3XQd+HMejo+0gJGwYIOfFeoBQv32xF/RUIvccUz20/V6Otdv+57NE70D5pa8W/jVGDoGq0oON4A==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.2.tgz}
cpu: [ia32]
os: [win32]
'@rollup/rollup-win32-x64-gnu@4.52.2':
- resolution: {integrity: sha512-ApXFKluSB6kDQkAqZOKXBjiaqdF1BlKi+/eqnYe9Ee7U2K3pUDKsIyr8EYm/QDHTJIM+4X+lI0gJc3TTRhd+dA==}
+ resolution: {integrity: sha512-ApXFKluSB6kDQkAqZOKXBjiaqdF1BlKi+/eqnYe9Ee7U2K3pUDKsIyr8EYm/QDHTJIM+4X+lI0gJc3TTRhd+dA==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.2.tgz}
cpu: [x64]
os: [win32]
'@rollup/rollup-win32-x64-msvc@4.52.2':
- resolution: {integrity: sha512-ARz+Bs8kY6FtitYM96PqPEVvPXqEZmPZsSkXvyX19YzDqkCaIlhCieLLMI5hxO9SRZ2XtCtm8wxhy0iJ2jxNfw==}
+ resolution: {integrity: sha512-ARz+Bs8kY6FtitYM96PqPEVvPXqEZmPZsSkXvyX19YzDqkCaIlhCieLLMI5hxO9SRZ2XtCtm8wxhy0iJ2jxNfw==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.2.tgz}
cpu: [x64]
os: [win32]
@@ -2262,7 +2262,7 @@ packages:
engines: {node: '>=14.16'}
'@slorber/react-helmet-async@1.3.0':
- resolution: {integrity: sha512-e9/OK8VhwUSc67diWI8Rb3I0YgI9/SBQtnhe9aEuK6MhZm7ntZZimXgwXnd8W96YTmSOb9M4d8LwhRZyhWr/1A==}
+ resolution: {integrity: sha512-e9/OK8VhwUSc67diWI8Rb3I0YgI9/SBQtnhe9aEuK6MhZm7ntZZimXgwXnd8W96YTmSOb9M4d8LwhRZyhWr/1A==, tarball: https://registry.npmjs.org/@slorber/react-helmet-async/-/react-helmet-async-1.3.0.tgz}
peerDependencies:
react: ^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
@@ -2383,7 +2383,7 @@ packages:
resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
'@tybys/wasm-util@0.10.1':
- resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
+ resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==, tarball: https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz}
'@types/body-parser@1.19.6':
resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==}
@@ -2652,105 +2652,105 @@ packages:
resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
'@unrs/resolver-binding-android-arm-eabi@1.11.1':
- resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==}
+ resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz}
cpu: [arm]
os: [android]
'@unrs/resolver-binding-android-arm64@1.11.1':
- resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==}
+ resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz}
cpu: [arm64]
os: [android]
'@unrs/resolver-binding-darwin-arm64@1.11.1':
- resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==}
+ resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz}
cpu: [arm64]
os: [darwin]
'@unrs/resolver-binding-darwin-x64@1.11.1':
- resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==}
+ resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz}
cpu: [x64]
os: [darwin]
'@unrs/resolver-binding-freebsd-x64@1.11.1':
- resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==}
+ resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz}
cpu: [x64]
os: [freebsd]
'@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1':
- resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==}
+ resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz}
cpu: [arm]
os: [linux]
'@unrs/resolver-binding-linux-arm-musleabihf@1.11.1':
- resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==}
+ resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz}
cpu: [arm]
os: [linux]
'@unrs/resolver-binding-linux-arm64-gnu@1.11.1':
- resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==}
+ resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@unrs/resolver-binding-linux-arm64-musl@1.11.1':
- resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==}
+ resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz}
cpu: [arm64]
os: [linux]
libc: [musl]
'@unrs/resolver-binding-linux-ppc64-gnu@1.11.1':
- resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==}
+ resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz}
cpu: [ppc64]
os: [linux]
libc: [glibc]
'@unrs/resolver-binding-linux-riscv64-gnu@1.11.1':
- resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==}
+ resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz}
cpu: [riscv64]
os: [linux]
libc: [glibc]
'@unrs/resolver-binding-linux-riscv64-musl@1.11.1':
- resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==}
+ resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz}
cpu: [riscv64]
os: [linux]
libc: [musl]
'@unrs/resolver-binding-linux-s390x-gnu@1.11.1':
- resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==}
+ resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz}
cpu: [s390x]
os: [linux]
libc: [glibc]
'@unrs/resolver-binding-linux-x64-gnu@1.11.1':
- resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==}
+ resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz}
cpu: [x64]
os: [linux]
libc: [glibc]
'@unrs/resolver-binding-linux-x64-musl@1.11.1':
- resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==}
+ resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz}
cpu: [x64]
os: [linux]
libc: [musl]
'@unrs/resolver-binding-wasm32-wasi@1.11.1':
- resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==}
+ resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz}
engines: {node: '>=14.0.0'}
cpu: [wasm32]
'@unrs/resolver-binding-win32-arm64-msvc@1.11.1':
- resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==}
+ resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz}
cpu: [arm64]
os: [win32]
'@unrs/resolver-binding-win32-ia32-msvc@1.11.1':
- resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==}
+ resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz}
cpu: [ia32]
os: [win32]
'@unrs/resolver-binding-win32-x64-msvc@1.11.1':
- resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==}
+ resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz}
cpu: [x64]
os: [win32]
@@ -2896,7 +2896,7 @@ packages:
optional: true
ajv-formats@3.0.1:
- resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==}
+ resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==, tarball: https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz}
peerDependencies:
ajv: ^8.0.0
peerDependenciesMeta:
@@ -2917,7 +2917,7 @@ packages:
resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==}
ajv@8.18.0:
- resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==}
+ resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==, tarball: https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz}
ajv@8.20.0:
resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==}
@@ -3148,7 +3148,7 @@ packages:
optional: true
bare-fs@4.4.10:
- resolution: {integrity: sha512-arqVF+xX/rJHwrONZaSPhlzleT2gXwVs9rsAe1p1mIVwWZI2A76/raio+KwwxfWMO8oV9Wo90EaUkS2QwVmy4w==}
+ resolution: {integrity: sha512-arqVF+xX/rJHwrONZaSPhlzleT2gXwVs9rsAe1p1mIVwWZI2A76/raio+KwwxfWMO8oV9Wo90EaUkS2QwVmy4w==, tarball: https://registry.npmjs.org/bare-fs/-/bare-fs-4.4.10.tgz}
engines: {bare: '>=1.16.0'}
peerDependencies:
bare-buffer: '*'
@@ -3161,7 +3161,7 @@ packages:
engines: {bare: '>=1.14.0'}
bare-path@3.0.0:
- resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==}
+ resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==, tarball: https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz}
bare-stream@2.7.0:
resolution: {integrity: sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==}
@@ -3262,7 +3262,7 @@ packages:
engines: {node: '>= 0.8'}
bytes@3.1.2:
- resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
+ resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==, tarball: https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz}
engines: {node: '>= 0.8'}
cac@6.7.14:
@@ -4408,7 +4408,7 @@ packages:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
fsevents@2.3.3:
- resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, tarball: https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
@@ -4813,7 +4813,7 @@ packages:
engines: {node: '>=20'}
invariant@2.2.4:
- resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
+ resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==, tarball: https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz}
ipaddr.js@1.9.1:
resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
@@ -6545,7 +6545,7 @@ packages:
react: ^18.3.1
react-fast-compare@3.2.2:
- resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==}
+ resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==, tarball: https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz}
react-is@16.13.1:
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
@@ -6864,7 +6864,7 @@ packages:
engines: {node: '>= 10.13.0'}
search-insights@2.17.3:
- resolution: {integrity: sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==}
+ resolution: {integrity: sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==, tarball: https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz}
section-matter@1.0.0:
resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==}
@@ -6953,7 +6953,7 @@ packages:
engines: {node: '>=8'}
shallowequal@1.1.0:
- resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==}
+ resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==, tarball: https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz}
shebang-command@1.2.0:
resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==}
@@ -10586,7 +10586,7 @@ snapshots:
'@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1)
tslib: 2.8.1
- '@kintone/plugin-manifest-validator@11.1.1':
+ '@kintone/plugin-manifest-validator@11.2.0':
dependencies:
ajv: 8.18.0
ajv-formats: 3.0.1(ajv@8.18.0)
diff --git a/src/plugin/core/__tests__/summary.test.ts b/src/plugin/core/__tests__/summary.test.ts
new file mode 100644
index 00000000000..2770880728b
--- /dev/null
+++ b/src/plugin/core/__tests__/summary.test.ts
@@ -0,0 +1,150 @@
+import { describe, expect, it } from "vitest";
+import type { ManifestInterface } from "../manifest/interface";
+import { buildPluginSummary } from "../summary";
+
+const baseManifest: ManifestInterface = {
+ validate: async () => ({ valid: true, warnings: [] }),
+ sourceList: () => [],
+ generateContentsZip: async () => ({}) as never,
+ manifestVersion: 1,
+ name: "Sample Plugin",
+ version: 1,
+ description: "A plugin for unit test",
+ homepageUrl: "https://example.com",
+ sandbox: undefined,
+ allowedHosts: undefined,
+ permissions: undefined,
+ json: {},
+};
+
+const withSandboxFields = (
+ fields: Partial<
+ Pick
+ >,
+): ManifestInterface => ({
+ ...baseManifest,
+ ...fields,
+});
+
+describe("buildPluginSummary", () => {
+ it("returns identity / description / homepage from manifest", () => {
+ const summary = buildPluginSummary("plugin-id", baseManifest);
+ expect(summary.id).toBe("plugin-id");
+ expect(summary.name).toBe("Sample Plugin");
+ expect(summary.version).toBe("1");
+ expect(summary.description).toBe("A plugin for unit test");
+ expect(summary.homepage).toBe("https://example.com");
+ });
+
+ it("uses (not set) for missing description / homepage", () => {
+ const empty = buildPluginSummary("plugin-id", {
+ ...baseManifest,
+ description: undefined,
+ homepageUrl: undefined,
+ });
+ expect(empty.description).toBe("(not set)");
+ expect(empty.homepage).toBe("(not set)");
+ });
+
+ describe("sandbox block", () => {
+ it("returns null when no sandbox fields are defined", () => {
+ const summary = buildPluginSummary("plugin-id", baseManifest);
+ expect(summary.sandbox).toBeNull();
+ });
+
+ it("formats every field when all are defined", () => {
+ const summary = buildPluginSummary(
+ "plugin-id",
+ withSandboxFields({
+ sandbox: true,
+ allowedHosts: ["https://example.com", "wss://example.com/ws/*"],
+ permissions: {
+ js_api: ["app:read", "network:connect"],
+ rest_api: ["app_record:read"],
+ },
+ }),
+ );
+ expect(summary.sandbox).toEqual({
+ sandbox: "true",
+ allowedHosts: "https://example.com, wss://example.com/ws/*",
+ permissionsJsApi: "app:read, network:connect",
+ permissionsRestApi: "app_record:read",
+ });
+ });
+
+ it("uses (not set) for fields that are undefined when at least one sibling is defined", () => {
+ const summary = buildPluginSummary(
+ "plugin-id",
+ withSandboxFields({
+ sandbox: true,
+ allowedHosts: undefined,
+ permissions: undefined,
+ }),
+ );
+ expect(summary.sandbox).toEqual({
+ sandbox: "true",
+ allowedHosts: "(not set)",
+ permissionsJsApi: "(not set)",
+ permissionsRestApi: "(not set)",
+ });
+ });
+
+ it("uses (none) for explicitly empty arrays and (not set) for omitted children", () => {
+ const summary = buildPluginSummary(
+ "plugin-id",
+ withSandboxFields({
+ sandbox: true,
+ allowedHosts: [],
+ permissions: { js_api: [] },
+ }),
+ );
+ expect(summary.sandbox).toEqual({
+ sandbox: "true",
+ allowedHosts: "(none)",
+ permissionsJsApi: "(none)",
+ permissionsRestApi: "(not set)",
+ });
+ });
+
+ it("uses (not set) for both permission children when permissions is declared empty", () => {
+ const summary = buildPluginSummary(
+ "plugin-id",
+ withSandboxFields({
+ sandbox: true,
+ permissions: {},
+ }),
+ );
+ expect(summary.sandbox?.permissionsJsApi).toBe("(not set)");
+ expect(summary.sandbox?.permissionsRestApi).toBe("(not set)");
+ });
+
+ it("returns sandbox: (not set) when only siblings are defined", () => {
+ const summary = buildPluginSummary(
+ "plugin-id",
+ withSandboxFields({
+ sandbox: undefined,
+ allowedHosts: ["https://example.com"],
+ permissions: undefined,
+ }),
+ );
+ expect(summary.sandbox).toEqual({
+ sandbox: "(not set)",
+ allowedHosts: "https://example.com",
+ permissionsJsApi: "(not set)",
+ permissionsRestApi: "(not set)",
+ });
+ });
+
+ it("formats sandbox: false correctly (not as not set)", () => {
+ const summary = buildPluginSummary(
+ "plugin-id",
+ withSandboxFields({
+ sandbox: false,
+ allowedHosts: undefined,
+ permissions: undefined,
+ }),
+ );
+ expect(summary.sandbox?.sandbox).toBe("false");
+ });
+ });
+});
diff --git a/src/plugin/core/manifest/__tests__/fixtures/plugin-sandbox-invalid-missing-allowed-hosts/image/icon.png b/src/plugin/core/manifest/__tests__/fixtures/plugin-sandbox-invalid-missing-allowed-hosts/image/icon.png
new file mode 100644
index 00000000000..fe24d3aee82
Binary files /dev/null and b/src/plugin/core/manifest/__tests__/fixtures/plugin-sandbox-invalid-missing-allowed-hosts/image/icon.png differ
diff --git a/src/plugin/core/manifest/__tests__/fixtures/plugin-sandbox-invalid-missing-allowed-hosts/manifest.json b/src/plugin/core/manifest/__tests__/fixtures/plugin-sandbox-invalid-missing-allowed-hosts/manifest.json
new file mode 100644
index 00000000000..697058a5468
--- /dev/null
+++ b/src/plugin/core/manifest/__tests__/fixtures/plugin-sandbox-invalid-missing-allowed-hosts/manifest.json
@@ -0,0 +1,14 @@
+{
+ "manifest_version": 1,
+ "version": 1,
+ "type": "APP",
+ "name": {
+ "en": "sandbox invalid sample"
+ },
+ "icon": "image/icon.png",
+ "sandbox": true,
+ "permissions": {
+ "js_api": ["app:read"],
+ "rest_api": ["app_record:read"]
+ }
+}
diff --git a/src/plugin/core/manifest/__tests__/fixtures/plugin-sandbox-valid/image/icon.png b/src/plugin/core/manifest/__tests__/fixtures/plugin-sandbox-valid/image/icon.png
new file mode 100644
index 00000000000..fe24d3aee82
Binary files /dev/null and b/src/plugin/core/manifest/__tests__/fixtures/plugin-sandbox-valid/image/icon.png differ
diff --git a/src/plugin/core/manifest/__tests__/fixtures/plugin-sandbox-valid/manifest.json b/src/plugin/core/manifest/__tests__/fixtures/plugin-sandbox-valid/manifest.json
new file mode 100644
index 00000000000..0fadfb68cf3
--- /dev/null
+++ b/src/plugin/core/manifest/__tests__/fixtures/plugin-sandbox-valid/manifest.json
@@ -0,0 +1,20 @@
+{
+ "manifest_version": 1,
+ "version": 1,
+ "type": "APP",
+ "name": {
+ "en": "sandbox sample"
+ },
+ "icon": "image/icon.png",
+ "sandbox": true,
+ "allowed_hosts": [
+ "https://example.com",
+ "wss://example.com",
+ "https://example.com/api/*",
+ "*"
+ ],
+ "permissions": {
+ "js_api": ["app:read", "network:connect"],
+ "rest_api": ["app_record:read", "file:write"]
+ }
+}
diff --git a/src/plugin/core/manifest/__tests__/validate.test.ts b/src/plugin/core/manifest/__tests__/validate.test.ts
index 5dd652491d3..22e7cddfafe 100644
--- a/src/plugin/core/manifest/__tests__/validate.test.ts
+++ b/src/plugin/core/manifest/__tests__/validate.test.ts
@@ -41,6 +41,16 @@ describe("validate", () => {
dir: "plugin-locales/v1/invalid-locales",
expected: false,
},
+ {
+ name: "`sandbox-valid`",
+ dir: "plugin-sandbox-valid",
+ expected: true,
+ },
+ {
+ name: "`sandbox-invalid-missing-allowed-hosts`",
+ dir: "plugin-sandbox-invalid-missing-allowed-hosts",
+ expected: false,
+ },
// TODO : Validation for v2 is not yet implemented. see src/plugin/core/manifest/v2/index.ts
// {
// name: "`valid-locales-v2`",
diff --git a/src/plugin/core/manifest/interface.ts b/src/plugin/core/manifest/interface.ts
index f6d5441d475..0aeeee11831 100644
--- a/src/plugin/core/manifest/interface.ts
+++ b/src/plugin/core/manifest/interface.ts
@@ -2,6 +2,11 @@ import type { DriverInterface } from "../driver";
import type { ContentsZip } from "../contents";
import type { ValidationResult } from "./validate";
+export type ManifestPermissions = {
+ js_api?: string[];
+ rest_api?: string[];
+};
+
export interface ManifestStaticInterface {
/**
* Parse JSON object to Manifest
@@ -43,6 +48,11 @@ export interface ManifestInterface {
get version(): number | string;
get description(): string | undefined;
get homepageUrl(): string | undefined;
+ // Sandbox-related accessors return raw manifest values. Normalization
+ // (dedup, canonicalization, etc.) belongs to the validator layer.
+ get sandbox(): boolean | undefined;
+ get allowedHosts(): string[] | undefined;
+ get permissions(): ManifestPermissions | undefined;
/**
* Returns JSON object represents Manifest raw object.
diff --git a/src/plugin/core/manifest/v1/index.ts b/src/plugin/core/manifest/v1/index.ts
index ebd699be295..0a08f1be172 100644
--- a/src/plugin/core/manifest/v1/index.ts
+++ b/src/plugin/core/manifest/v1/index.ts
@@ -1,5 +1,9 @@
import { sourceList } from "./sourcelist";
-import type { ManifestInterface, ManifestStaticInterface } from "../interface";
+import type {
+ ManifestInterface,
+ ManifestPermissions,
+ ManifestStaticInterface,
+} from "../interface";
import type { DriverInterface } from "../../driver";
import { LocalFSDriver } from "../../driver";
import { validateManifest } from "../validate";
@@ -46,6 +50,18 @@ export class ManifestV1 implements ManifestInterface {
return this.manifest.homepage_url?.en;
}
+ get sandbox(): boolean | undefined {
+ return this.manifest.sandbox;
+ }
+
+ get allowedHosts(): string[] | undefined {
+ return this.manifest.allowed_hosts;
+ }
+
+ get permissions(): ManifestPermissions | undefined {
+ return this.manifest.permissions;
+ }
+
get json(): ManifestV1JsonObject {
return this.manifest;
}
@@ -117,4 +133,7 @@ export type ManifestV1JsonObject = {
css?: string[];
required_params?: string[];
};
+ sandbox?: boolean;
+ allowed_hosts?: string[];
+ permissions?: ManifestPermissions;
};
diff --git a/src/plugin/core/manifest/v2/index.ts b/src/plugin/core/manifest/v2/index.ts
index a6c46fa0168..6f0d2c8c418 100644
--- a/src/plugin/core/manifest/v2/index.ts
+++ b/src/plugin/core/manifest/v2/index.ts
@@ -1,4 +1,8 @@
-import type { ManifestInterface, ManifestStaticInterface } from "../interface";
+import type {
+ ManifestInterface,
+ ManifestPermissions,
+ ManifestStaticInterface,
+} from "../interface";
import { sourceListV2 } from "./sourcelist";
import type { DriverInterface } from "../../driver";
import { LocalFSDriver } from "../../driver";
@@ -44,6 +48,19 @@ export class ManifestV2 implements ManifestInterface {
return this.manifest.homepage_url?.en;
}
+ // Manifest v2 does not define a sandbox field; always absent by design.
+ get sandbox(): boolean | undefined {
+ return undefined;
+ }
+
+ get allowedHosts(): string[] | undefined {
+ return this.manifest.allowed_hosts;
+ }
+
+ get permissions(): ManifestPermissions | undefined {
+ return this.manifest.permissions;
+ }
+
get json(): ManifestV2JsonObject {
return this.manifest;
}
@@ -118,8 +135,5 @@ export type ManifestV2JsonObject = {
required_params?: string[];
};
allowed_hosts?: string[];
- permissions?: {
- js_api?: string[];
- rest_api?: string[];
- };
+ permissions?: ManifestPermissions;
};
diff --git a/src/plugin/core/summary.ts b/src/plugin/core/summary.ts
new file mode 100644
index 00000000000..5a3f11d0a76
--- /dev/null
+++ b/src/plugin/core/summary.ts
@@ -0,0 +1,68 @@
+import type { ManifestInterface } from "./manifest/interface";
+
+export type SandboxSummary = {
+ sandbox: string;
+ allowedHosts: string;
+ permissionsJsApi: string;
+ permissionsRestApi: string;
+};
+
+export type PluginSummary = {
+ id: string;
+ name: string;
+ version: string;
+ description: string;
+ homepage: string;
+ sandbox: SandboxSummary | null;
+};
+
+const NOT_SET = "(not set)";
+const NONE = "(none)";
+
+// `(not set)` for absent fields (including children whose parent declares them
+// optionally and they are omitted); `(none)` only for an explicitly declared
+// empty array. This mirrors the schema in @kintone/plugin-manifest-validator,
+// where `permissions.js_api` / `permissions.rest_api` are optional arrays.
+const formatList = (list: string[] | undefined): string => {
+ if (list === undefined) {
+ return NOT_SET;
+ }
+ if (list.length === 0) {
+ return NONE;
+ }
+ return list.join(", ");
+};
+
+const buildSandboxSummary = (
+ manifest: Pick,
+): SandboxSummary | null => {
+ const hasFields =
+ manifest.sandbox !== undefined ||
+ manifest.allowedHosts !== undefined ||
+ manifest.permissions !== undefined;
+ if (!hasFields) {
+ return null;
+ }
+
+ return {
+ sandbox:
+ manifest.sandbox === undefined ? NOT_SET : String(manifest.sandbox),
+ allowedHosts: formatList(manifest.allowedHosts),
+ permissionsJsApi: formatList(manifest.permissions?.js_api),
+ permissionsRestApi: formatList(manifest.permissions?.rest_api),
+ };
+};
+
+export const buildPluginSummary = (
+ id: string,
+ manifest: ManifestInterface,
+): PluginSummary => {
+ return {
+ id,
+ name: manifest.name,
+ version: String(manifest.version),
+ description: manifest.description ?? NOT_SET,
+ homepage: manifest.homepageUrl ?? NOT_SET,
+ sandbox: buildSandboxSummary(manifest),
+ };
+};
diff --git a/src/plugin/info/__tests__/index.test.ts b/src/plugin/info/__tests__/index.test.ts
new file mode 100644
index 00000000000..9a18b0d9cd6
--- /dev/null
+++ b/src/plugin/info/__tests__/index.test.ts
@@ -0,0 +1,74 @@
+import { describe, expect, it } from "vitest";
+import type { ManifestInterface } from "../../core/manifest/interface";
+import { buildJsonInfo } from "../index";
+
+const baseManifest: ManifestInterface = {
+ validate: async () => ({ valid: true, warnings: [] }),
+ sourceList: () => [],
+ generateContentsZip: async () => ({}) as never,
+ manifestVersion: 1,
+ name: "Sample Plugin",
+ version: 1,
+ description: "A plugin for unit test",
+ homepageUrl: "https://example.com",
+ sandbox: undefined,
+ allowedHosts: undefined,
+ permissions: undefined,
+ json: {},
+};
+
+describe("buildJsonInfo", () => {
+ it("returns identity / description / homepage from the manifest", () => {
+ const info = buildJsonInfo("plugin-id", baseManifest);
+ expect(info).toEqual({
+ id: "plugin-id",
+ name: "Sample Plugin",
+ version: 1,
+ description: "A plugin for unit test",
+ homepage: "https://example.com",
+ sandbox: undefined,
+ allowed_hosts: undefined,
+ permissions: undefined,
+ });
+ });
+
+ it("emits sandbox-related keys with snake_case names", () => {
+ const info = buildJsonInfo("plugin-id", {
+ ...baseManifest,
+ sandbox: true,
+ allowedHosts: ["https://example.com"],
+ permissions: {
+ js_api: ["app:read"],
+ rest_api: ["app_record:read"],
+ },
+ });
+ expect(info.sandbox).toBe(true);
+ expect(info.allowed_hosts).toEqual(["https://example.com"]);
+ expect(info.permissions).toEqual({
+ js_api: ["app:read"],
+ rest_api: ["app_record:read"],
+ });
+ });
+
+ it("drops absent sandbox keys when serialized as JSON (undefined → omitted)", () => {
+ const info = buildJsonInfo("plugin-id", baseManifest);
+ const serialized = JSON.parse(JSON.stringify(info));
+ expect(serialized).not.toHaveProperty("sandbox");
+ expect(serialized).not.toHaveProperty("allowed_hosts");
+ expect(serialized).not.toHaveProperty("permissions");
+ expect(serialized).toMatchObject({
+ id: "plugin-id",
+ name: "Sample Plugin",
+ version: 1,
+ });
+ });
+
+ it("preserves sandbox: false (not stripped) when serialized", () => {
+ const info = buildJsonInfo("plugin-id", {
+ ...baseManifest,
+ sandbox: false,
+ });
+ const serialized = JSON.parse(JSON.stringify(info));
+ expect(serialized.sandbox).toBe(false);
+ });
+});
diff --git a/src/plugin/info/index.ts b/src/plugin/info/index.ts
index 24385dfb964..56cbf2bf257 100644
--- a/src/plugin/info/index.ts
+++ b/src/plugin/info/index.ts
@@ -1,31 +1,64 @@
import fs from "fs/promises";
import { PluginZip } from "../core";
+import type {
+ ManifestInterface,
+ ManifestPermissions,
+} from "../core/manifest/interface";
+import { buildPluginSummary } from "../core/summary";
export type OutputFormat = "plain" | "json";
+export type PluginInfoJson = {
+ id: string;
+ name: string;
+ version: number | string;
+ description: string | undefined;
+ homepage: string | undefined;
+ sandbox: boolean | undefined;
+ allowed_hosts: string[] | undefined;
+ permissions: ManifestPermissions | undefined;
+};
+
+export const buildJsonInfo = (
+ id: string,
+ manifest: ManifestInterface,
+): PluginInfoJson => ({
+ id,
+ name: manifest.name,
+ version: manifest.version,
+ description: manifest.description,
+ homepage: manifest.homepageUrl,
+ sandbox: manifest.sandbox,
+ allowed_hosts: manifest.allowedHosts,
+ permissions: manifest.permissions,
+});
+
export const run = async (pluginFilePath: string, format: OutputFormat) => {
const buffer = await fs.readFile(pluginFilePath);
const pluginZip = await PluginZip.fromBuffer(buffer);
const id = await pluginZip.getPluginID();
const manifest = await pluginZip.manifest();
- const info = {
- id: id,
- name: manifest.name,
- version: manifest.version,
- description: manifest.description,
- homepage: manifest.homepageUrl,
- };
-
switch (format) {
- case "plain":
- console.log("id:", info.id);
- console.log("name:", info.name);
- console.log("version:", info.version);
- console.log("description:", info.description ?? "(not set)");
- console.log("homepage:", info.homepage ?? "(not set)");
+ case "plain": {
+ const summary = buildPluginSummary(id, manifest);
+ console.log("id:", summary.id);
+ console.log("name:", summary.name);
+ console.log("version:", summary.version);
+ console.log("description:", summary.description);
+ console.log("homepage:", summary.homepage);
+ if (summary.sandbox !== null) {
+ const s = summary.sandbox;
+ console.log("sandbox:", s.sandbox);
+ console.log("allowed_hosts:", s.allowedHosts);
+ console.log("permissions.js_api:", s.permissionsJsApi);
+ console.log("permissions.rest_api:", s.permissionsRestApi);
+ }
+ break;
+ }
+ case "json": {
+ console.log(JSON.stringify(buildJsonInfo(id, manifest), null, 2));
break;
- case "json":
- console.log(JSON.stringify(info, null, 2));
+ }
}
};
diff --git a/src/plugin/upload/index.ts b/src/plugin/upload/index.ts
index d1b858c487d..36f8bb46312 100644
--- a/src/plugin/upload/index.ts
+++ b/src/plugin/upload/index.ts
@@ -1,6 +1,7 @@
import fs from "fs/promises";
import { confirm } from "@inquirer/prompts";
import { PluginZip } from "../core";
+import { buildPluginSummary } from "../core/summary";
import {
buildRestAPIClient,
type RestAPIClientOptions,
@@ -48,14 +49,24 @@ export const upload = async (
const isSameVersion = installedPlugin?.version === pluginManifest.version;
// Show installation summary
- const installationSummary = `
- Installation Summary:
- Destination: ${restApiClientOptions.baseUrl}
- File Path: ${pluginFilePath}
- Plugin ID: ${pluginId}
- Plugin Name: ${pluginManifest.name}
- Current version: ${installedPlugin?.version ?? "(not installed)"}
- Target version: ${pluginManifest.version}${isSameVersion ? " (reinstall)" : ""}`;
+ const summary = buildPluginSummary(pluginId, pluginManifest);
+ const lines = [
+ ` Destination: ${restApiClientOptions.baseUrl}`,
+ ` File Path: ${pluginFilePath}`,
+ ` Plugin ID: ${summary.id}`,
+ ` Plugin Name: ${summary.name}`,
+ ` Current version: ${installedPlugin?.version ?? "(not installed)"}`,
+ ` Target version: ${summary.version}${isSameVersion ? " (reinstall)" : ""}`,
+ ...(summary.sandbox !== null
+ ? [
+ ` Sandbox: ${summary.sandbox.sandbox}`,
+ ` Allowed hosts: ${summary.sandbox.allowedHosts}`,
+ ` Permissions (js_api): ${summary.sandbox.permissionsJsApi}`,
+ ` Permissions (rest_api): ${summary.sandbox.permissionsRestApi}`,
+ ]
+ : []),
+ ];
+ const installationSummary = `\n Installation Summary:\n${lines.join("\n")}`;
logger.info(installationSummary);
// Get confirmation from user if required
diff --git a/website/docs/guide/experimental/sandbox.md b/website/docs/guide/experimental/sandbox.md
new file mode 100644
index 00000000000..de89a4f87b7
--- /dev/null
+++ b/website/docs/guide/experimental/sandbox.md
@@ -0,0 +1,82 @@
+---
+title: Plugin sandbox
+unlisted: true
+---
+
+# Plugin sandbox
+
+:::experimental[Plugin sandbox support]
+
+This feature is still under active development and is not part of the public interface yet.
+Field names, validation rules, and command output may change without notice.
+
+:::
+
+cli-kintone recognizes three optional fields in `manifest.json` (Manifest v1) that declare a plugin's sandbox policy: `sandbox`, `allowed_hosts`, and `permissions`. When these fields are present, `plugin pack` validates them, `plugin info` surfaces them in its output, and `plugin upload` includes them in the installation summary.
+
+## Fields
+
+| Field | Type | Description |
+| --------------- | -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `sandbox` | `boolean` | Whether the plugin is sandbox-aware. |
+| `allowed_hosts` | `string[]` | List of allowed network endpoints. Each entry is either a URI with a scheme (e.g. `https://example.com`, `wss://example.com/ws/*`) or the bare wildcard `"*"`. cli-kintone only checks the structural form; domain-specific rules (IP literal rejection, trailing-slash-only rejection, cybozu domain exclusion, etc.) are enforced by kintone itself at runtime. |
+| `permissions` | `{ js_api?: string[]; rest_api?: string[] }` | API permissions the plugin requests. `js_api` is for JS API / JS API Event; `rest_api` is for REST API. |
+
+When `sandbox` is set to `true`, both `allowed_hosts` and `permissions` are required. When `sandbox` is absent or set to `false`, `allowed_hosts` and `permissions` remain optional.
+
+## Example manifest
+
+```json
+{
+ "manifest_version": 1,
+ "version": 1,
+ "type": "APP",
+ "name": { "en": "sandbox-sample" },
+ "icon": "image/icon.png",
+ "sandbox": true,
+ "allowed_hosts": ["https://example.com", "wss://example.com/ws/*"],
+ "permissions": {
+ "js_api": ["app:read", "network:connect"],
+ "rest_api": ["app_record:read"]
+ }
+}
+```
+
+## Command behavior
+
+### `plugin pack`
+
+Validates the three fields against the manifest schema before packaging. Validation errors abort packaging with a non-zero exit code; otherwise the plugin zip is produced as usual.
+
+### `plugin info`
+
+When any of `sandbox` / `allowed_hosts` / `permissions` is defined in the manifest, `plugin info` prints all four sandbox-related lines (`sandbox`, `allowed_hosts`, `permissions.js_api`, `permissions.rest_api`). Sandbox-unaware plugins (none of the three fields defined) omit the block entirely.
+
+- `(not set)` — the field is absent from the manifest. For `permissions.js_api` / `permissions.rest_api`, this also applies when `permissions` is declared but the child key is omitted.
+- `(none)` — the field is declared as an explicitly empty array.
+
+Example plain output:
+
+```text
+sandbox: true
+allowed_hosts: https://example.com, wss://example.com/ws/*
+permissions.js_api: app:read, network:connect
+permissions.rest_api: app_record:read
+```
+
+In JSON format, keys that are absent from the manifest are omitted from the output. Sandbox-related keys mirror the manifest naming (`sandbox`, `allowed_hosts`, `permissions`) rather than the camelCase accessor names used by the library internals.
+
+### `plugin upload`
+
+When any of `sandbox` / `allowed_hosts` / `permissions` is defined in the manifest, the installation summary prints all four sandbox-related lines together (`Sandbox`, `Allowed hosts`, `Permissions (js_api)`, `Permissions (rest_api)`). Sandbox-unaware plugins show no additional lines. The same `(not set)` / `(none)` placeholders as `plugin info` are used. Example:
+
+```text
+ Installation Summary:
+ Destination: https://example.cybozu.com
+ ...
+ Target version: 1
+ Sandbox: true
+ Allowed hosts: https://example.com, wss://example.com/ws/*
+ Permissions (js_api): app:read, network:connect
+ Permissions (rest_api): app_record:read
+```
diff --git a/website/i18n/ja/docusaurus-plugin-content-docs/current/guide/experimental/sandbox.md b/website/i18n/ja/docusaurus-plugin-content-docs/current/guide/experimental/sandbox.md
new file mode 100644
index 00000000000..ddd3ee478f2
--- /dev/null
+++ b/website/i18n/ja/docusaurus-plugin-content-docs/current/guide/experimental/sandbox.md
@@ -0,0 +1,98 @@
+---
+title: プラグインサンドボックス
+unlisted: true
+---
+
+# プラグインサンドボックス
+
+:::experimental[プラグインサンドボックス対応]
+
+この機能は開発中であり、まだ公開インターフェースの一部ではありません。
+フィールド名・バリデーション規則・コマンド出力は予告なく変更される可能性があります。
+
+:::
+
+cli-kintone は `manifest.json` (Manifest v1) のオプショナルフィールドとして
+`sandbox` / `allowed_hosts` / `permissions` の 3 つを認識します。これらが
+指定されていると、`plugin pack` がバリデーションを行い、`plugin info` が出力に
+反映し、`plugin upload` が Installation Summary に含めます。
+
+## フィールド
+
+| フィールド | 型 | 説明 |
+| --------------- | -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `sandbox` | `boolean` | このプラグインがサンドボックスに対応しているかを示すフラグ。 |
+| `allowed_hosts` | `string[]` | プラグインがアクセスできる通信先の一覧。各エントリはスキーム付きの URI(例: `https://example.com`, `wss://example.com/ws/*`)またはワイルドカード `"*"`。cli-kintone は構造的な形式のみを検証し、IP アドレスの拒否・末尾スラッシュのみの拒否・サイボウズドメインの除外などのドメイン固有ルールは実行時に kintone 本体が判定します。 |
+| `permissions` | `{ js_api?: string[]; rest_api?: string[] }` | プラグインが要求する API 権限。`js_api` は JS API / JS API Event 用、`rest_api` は REST API 用。 |
+
+`sandbox` が `true` の場合、`allowed_hosts` と `permissions` は必須です。
+`sandbox` が未指定または `false` の場合、`allowed_hosts` と `permissions` は
+任意のままです。
+
+## マニフェスト例
+
+```json
+{
+ "manifest_version": 1,
+ "version": 1,
+ "type": "APP",
+ "name": { "en": "sandbox-sample" },
+ "icon": "image/icon.png",
+ "sandbox": true,
+ "allowed_hosts": ["https://example.com", "wss://example.com/ws/*"],
+ "permissions": {
+ "js_api": ["app:read", "network:connect"],
+ "rest_api": ["app_record:read"]
+ }
+}
+```
+
+## コマンドごとの挙動
+
+### `plugin pack`
+
+パッケージング前に 3 フィールドをマニフェストスキーマで検証します。バリデーション
+エラーがあるとパッケージングを中断し、非ゼロ終了コードを返します。エラーが
+無ければ通常どおりプラグイン zip を生成します。
+
+### `plugin info`
+
+`sandbox` / `allowed_hosts` / `permissions` のいずれかがマニフェストに
+定義されている場合、`plugin info` はサンドボックス関連 4 行
+(`sandbox`、`allowed_hosts`、`permissions.js_api`、`permissions.rest_api`)
+をまとめて出力します。どれも未定義のサンドボックス非対応プラグインでは
+ブロックごと省略されます。
+
+- `(not set)` — 当該フィールドがマニフェストに存在しない。`permissions.js_api` / `permissions.rest_api` については、`permissions` 自体は宣言されているが子キーが省略されている場合も含む。
+- `(none)` — 当該フィールドが空配列として明示されている。
+
+plain 出力例:
+
+```text
+sandbox: true
+allowed_hosts: https://example.com, wss://example.com/ws/*
+permissions.js_api: app:read, network:connect
+permissions.rest_api: app_record:read
+```
+
+JSON 形式では、マニフェストに存在しないキーは出力から省略されます。サンドボックス関連のキーは、ライブラリ内部で用いる camelCase のアクセサ名ではなくマニフェストのキー名(`sandbox`、`allowed_hosts`、`permissions`)をそのまま使います。
+
+### `plugin upload`
+
+`sandbox` / `allowed_hosts` / `permissions` のいずれかがマニフェストに
+定義されている場合、Installation Summary にはサンドボックス関連 4 行
+(`Sandbox`、`Allowed hosts`、`Permissions (js_api)`、`Permissions (rest_api)`)
+がまとめて出力されます。どれも未定義のサンドボックス非対応プラグインでは
+追加行は出ません。`(not set)` / `(none)` のプレースホルダは `plugin info` と
+同じ意味で使われます。出力例:
+
+```text
+ Installation Summary:
+ Destination: https://example.cybozu.com
+ ...
+ Target version: 1
+ Sandbox: true
+ Allowed hosts: https://example.com, wss://example.com/ws/*
+ Permissions (js_api): app:read, network:connect
+ Permissions (rest_api): app_record:read
+```