@flowfuse/node-red-dashboard 1.1.0 → 1.1.1-443cd97-202402211638.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/nodes/config/locales/en-US/ui_base.html +20 -0
  2. package/nodes/config/locales/en-US/ui_base.json +17 -2
  3. package/nodes/config/locales/en-US/ui_group.json +1 -1
  4. package/nodes/config/locales/en-US/ui_page.html +2 -9
  5. package/nodes/config/locales/en-US/ui_page.json +1 -1
  6. package/nodes/config/locales/en-US/ui_theme.json +20 -0
  7. package/nodes/config/locales/ja/ui_base.json +9 -0
  8. package/nodes/config/locales/ja/ui_group.json +1 -1
  9. package/nodes/config/locales/ja/ui_page.html +7 -14
  10. package/nodes/config/locales/ja/ui_page.json +3 -3
  11. package/nodes/config/locales/ja/ui_theme.json +20 -0
  12. package/nodes/config/ui_base.html +27 -12
  13. package/nodes/config/ui_base.js +24 -6
  14. package/nodes/config/ui_group.html +3 -3
  15. package/nodes/config/ui_page.html +3 -4
  16. package/nodes/config/ui_theme.html +17 -17
  17. package/nodes/widgets/locales/en-US/ui_button.json +4 -3
  18. package/nodes/widgets/locales/en-US/ui_form.html +1 -1
  19. package/nodes/widgets/locales/en-US/ui_form.json +7 -5
  20. package/nodes/widgets/locales/en-US/ui_gauge.json +4 -2
  21. package/nodes/widgets/locales/en-US/ui_table.json +14 -0
  22. package/nodes/widgets/locales/en-US/ui_template.json +4 -1
  23. package/nodes/widgets/locales/en-US/ui_text.html +2 -2
  24. package/nodes/widgets/locales/en-US/ui_text.json +20 -0
  25. package/nodes/widgets/locales/ja/ui_button.html +12 -0
  26. package/nodes/widgets/locales/ja/ui_button.json +25 -0
  27. package/nodes/widgets/locales/ja/ui_form.html +22 -0
  28. package/nodes/widgets/locales/ja/ui_form.json +38 -0
  29. package/nodes/widgets/locales/ja/ui_table.json +14 -0
  30. package/nodes/widgets/locales/ja/ui_template.json +23 -0
  31. package/nodes/widgets/locales/ja/ui_text.html +19 -0
  32. package/nodes/widgets/locales/ja/ui_text.json +20 -0
  33. package/nodes/widgets/ui_button.html +5 -5
  34. package/nodes/widgets/ui_event.js +0 -1
  35. package/nodes/widgets/ui_form.html +8 -8
  36. package/nodes/widgets/ui_gauge.html +6 -1
  37. package/nodes/widgets/ui_table.html +10 -10
  38. package/nodes/widgets/ui_template.html +7 -7
  39. package/nodes/widgets/ui_text.html +24 -24
  40. package/package.json +6 -2
  41. package/dist/assets/array-Nw74a44z.js +0 -1
  42. package/dist/assets/c4Diagram-c0b17d02-nPeewnzy.js +0 -10
  43. package/dist/assets/classDiagram-a8cc8886-_g3mOFQf.js +0 -1
  44. package/dist/assets/classDiagram-v2-802a48d3-RMKbbXCG.js +0 -2
  45. package/dist/assets/createText-3b1f58a4-xktEn8Ka.js +0 -7
  46. package/dist/assets/edges-0005682e-PPCHAP84.js +0 -4
  47. package/dist/assets/erDiagram-dedf2781-jEaeCbvl.js +0 -51
  48. package/dist/assets/flowDb-ff651a22-bIPiAZg4.js +0 -6
  49. package/dist/assets/flowDiagram-d6f8fe3a-VkF7W9ok.js +0 -4
  50. package/dist/assets/flowDiagram-v2-58f49b84-GhxQOkLF.js +0 -1
  51. package/dist/assets/flowchart-elk-definition-56584a6c-aOhiWs9F.js +0 -139
  52. package/dist/assets/ganttDiagram-088dbd90-zfsU3Utb.js +0 -266
  53. package/dist/assets/gitGraphDiagram-e0ffc2d1-mO6fny1-.js +0 -70
  54. package/dist/assets/index-_ysOxDkR.css +0 -13
  55. package/dist/assets/index-f58d48f9-ZajbLoZ5.js +0 -1
  56. package/dist/assets/index-j47xBCGS.js +0 -252
  57. package/dist/assets/infoDiagram-64895a6e-EE2sSVdD.js +0 -7
  58. package/dist/assets/init-Hi12RPRh.js +0 -1
  59. package/dist/assets/journeyDiagram-adaa34f8-3Aeepbti.js +0 -139
  60. package/dist/assets/layout-HNfNNVGB.js +0 -1
  61. package/dist/assets/line-Dzs3dzjS.js +0 -1
  62. package/dist/assets/linear-l6T1P7PI.js +0 -1
  63. package/dist/assets/logo-yAM2wbsA.png +0 -0
  64. package/dist/assets/materialdesignicons-webfont-AeJCkVfO.woff2 +0 -0
  65. package/dist/assets/materialdesignicons-webfont-GtBnFie6.woff +0 -0
  66. package/dist/assets/materialdesignicons-webfont-IwmCr2II.ttf +0 -0
  67. package/dist/assets/materialdesignicons-webfont-JbV82i5g.eot +0 -0
  68. package/dist/assets/mindmap-definition-57868176-OcB3YfV1.js +0 -109
  69. package/dist/assets/ordinal-OOfG4Z7H.js +0 -1
  70. package/dist/assets/pieDiagram-3fca7ce7-vedjpC2S.js +0 -35
  71. package/dist/assets/quadrantDiagram-0ca4be02-IaDh8ki8.js +0 -7
  72. package/dist/assets/requirementDiagram-e13af0f0-SyEU7jKd.js +0 -52
  73. package/dist/assets/sankeyDiagram-a7f8e230-YfqBgIdu.js +0 -8
  74. package/dist/assets/sequenceDiagram-84aa38e3-Us4xkowz.js +0 -122
  75. package/dist/assets/stateDiagram-9a586ac6-9Eghu-AF.js +0 -1
  76. package/dist/assets/stateDiagram-v2-96f2b9df-H-sPLuEa.js +0 -1
  77. package/dist/assets/styles-1b0c237a-xxU00Zub.js +0 -110
  78. package/dist/assets/styles-622362e4-Dlv6Q_Cf.js +0 -160
  79. package/dist/assets/styles-a1a6e33f-YZqpuiCa.js +0 -207
  80. package/dist/assets/svgDraw-70101091-fhVjFkgL.js +0 -2
  81. package/dist/assets/svgDrawCommon-42e92da3-EVySoq53.js +0 -1
  82. package/dist/assets/timeline-definition-1a90b03d-KLirQp1D.js +0 -61
  83. package/dist/favicon.ico +0 -0
  84. package/dist/index.html +0 -20
@@ -23,10 +23,12 @@
23
23
  "gauge": "Gauge",
24
24
  "gap": "Gap",
25
25
  "styling": "Styling",
26
- "class": "Class"
26
+ "class": "Class",
27
+ "units": "Units",
28
+ "icon": "Icon"
27
29
  },
28
30
  "errors": {
29
31
  "unique": "All 'from' values must be unique."
30
32
  }
31
33
  }
32
- }
34
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "ui-table": {
3
+ "label": {
4
+ "group": "Group",
5
+ "size": "Size",
6
+ "maxRows": "Max Rows",
7
+ "columns": "Columns",
8
+ "autoCalculateColumns": "Auto Calculate Columns",
9
+ "key": "Key",
10
+ "label": "Label",
11
+ "column": "column"
12
+ }
13
+ }
14
+ }
@@ -7,9 +7,12 @@
7
7
  "widget-ui": "Widget (UI-Scoped)",
8
8
  "site-style": "CSS (All Pages)",
9
9
  "page-style": "CSS (Single Page)",
10
+ "ui": "UI",
11
+ "page": "Page",
10
12
  "group": "Group",
11
13
  "size": "Size",
12
- "name": "Name",
14
+ "className": "Class",
15
+ "classNamePlaceholder": "Optional CSS class name(s)",
13
16
  "pass-through": "Pass through messages from input.",
14
17
  "store-state": "Add output messages to stored state.",
15
18
  "template": "Template",
@@ -5,7 +5,7 @@
5
5
  alongside the (optional) label.
6
6
  </p>
7
7
  <p>
8
- You can also customise the style of the text by enabling "Apply Custom Style".
8
+ You can also customise the style of the text by enabling "Apply Style".
9
9
  This will show the following options:
10
10
  <ul>
11
11
  <li><b>Font:</b> Choose from a collection of pre-defined fonts.</li>
@@ -17,6 +17,6 @@
17
17
  <p>Any of the following can be appended to a <code>msg.</code> in order to override or set properties on this node at runtime.</p>
18
18
  <dl class="message-properties">
19
19
  <dt class="optional">class <span class="property-type">string</span></dt>
20
- <dd>Add a CSS class, or more, to the Button at runtime.</dd>
20
+ <dd>Add a CSS class, or more, to the text at runtime.</dd>
21
21
  </dl>
22
22
  </script>
@@ -0,0 +1,20 @@
1
+ {
2
+ "ui-text": {
3
+ "label": {
4
+ "group": "Group",
5
+ "size": "Size",
6
+ "label": "Label",
7
+ "class": "Class",
8
+ "optionalCssClassNames": "Optional CSS class name(s)",
9
+ "layout": "Layout",
10
+ "label2": "label",
11
+ "value": "value",
12
+ "style": "Style",
13
+ "applyStyle": "Apply Style",
14
+ "font": "Font",
15
+ "textSize": "Text Size",
16
+ "textColor": "Text Color",
17
+ "enterSampleHere": "Enter Sample Here"
18
+ }
19
+ }
20
+ }
@@ -0,0 +1,12 @@
1
+ <script type="text/html" data-help-name="ui-button">
2
+ <p>画面へボタンを追加します。</p>
3
+ <p>
4
+ ボタンをクリックすると、<b>ペイロード</b>欄の値が <code>msg.payload</code> に、<b>トピック</b>欄の値が <code>msg.topic</code> に設定されたメッセージが生成されます。
5
+ </p>
6
+ <h3>動的プロパティ(入力)</h3>
7
+ <p>実行時に本ノードのプロパティを設定したり、上書きしたりするため、以下を <code>msg.</code> に追加できます。</p>
8
+ <dl class="message-properties">
9
+ <dt class="optional">class <span class="property-type">文字列</span></dt>
10
+ <dd>実行時にボタンへCSSクラスなどを設定します。</dd>
11
+ </dl>
12
+ </script>
@@ -0,0 +1,25 @@
1
+ {
2
+ "ui-button": {
3
+ "label": {
4
+ "group": "グループ",
5
+ "size": "サイズ",
6
+ "icon": "アイコン",
7
+ "optionalIcon": "任意のアイコン",
8
+ "label": "ラベル",
9
+ "optionalLabel": "任意のラベル",
10
+ "button": "ボタン",
11
+ "className": "クラス",
12
+ "classNamePlaceholder": "任意のCSSクラス名",
13
+ "tooltip": "ツールチップ",
14
+ "optionalTooltip": "任意のツールチップ",
15
+ "color": "色",
16
+ "optionalColor": "任意の文字列とアイコンの色",
17
+ "background": "背景",
18
+ "optionalBackgroundColor": "任意の背景色",
19
+ "whenClicked": "クリックされた時に、以下のメッセージを送信:",
20
+ "payload": "ペイロード",
21
+ "topic": "トピック",
22
+ "emulateClick": "入力にメッセージが届けることでクリックを再現:"
23
+ }
24
+ }
25
+ }
@@ -0,0 +1,22 @@
1
+ <script type="text/html" data-help-name="ui-form">
2
+ <p>画面に入力フォームを追加します。</p>
3
+ <p>ユーザに複数の値を入力してもらうために使います。送信ボタンをクリックすると <code>msg.payload</code> にオブジェクトとして値が格納されます。</p>
4
+ <p>要素を追加するボタンにより、複数の入力部品を追加できます。</p>
5
+ <p>各要素には、以下を設定できます:</p>
6
+ <ul>
7
+ <li> <b>ラベル</b> : 画面上の部品のラベルとなる値</li>
8
+ <li> <b>名前</b> : 表示部品に入力された値を格納する <code>msg.payload</code> 内のキー (変数名)</li>
9
+ <li> <b>型</b> : 入力部品の型を選択するドロップダウン</li>
10
+ <li> <b>必須</b> : 有効にするとユーザは送信前に値の入力が必須となる設定</li>
11
+ <li> <b>行数</b> : 複数行の文字列入力ができる部品の行数</li>
12
+ <li> <b>削除</b> : 入力フォームから現在の部品を削除</li>
13
+ </ul>
14
+ <p><b>トピック</b>欄は任意で <code>msg.topic</code> プロパティに値を格納するために使います。</p>
15
+ <p>中止ボタンの値に空欄 ""を設定することで、中止ボタンを表示しないようにすることもできます。</p>
16
+ <h3>動的プロパティ(入力)</h3>
17
+ <p>実行時に本ノードのプロパティを設定したり、上書きしたりするため、以下を <code>msg.</code> に追加できます。</p>
18
+ <dl class="message-properties">
19
+ <dt class="optional">class <span class="property-type">文字列</span></dt>
20
+ <dd>実行時にフォームへCSSクラスなどを設定します。</dd>
21
+ </dl>
22
+ </script>
@@ -0,0 +1,38 @@
1
+ {
2
+ "ui-form": {
3
+ "label": {
4
+ "group": "グループ",
5
+ "size": "サイズ",
6
+ "label": "ラベル",
7
+ "optionalLabel": "任意のラベル",
8
+ "className": "クラス",
9
+ "classNamePlaceholder": "任意のCSSクラス名",
10
+ "formElements": "フォームの要素",
11
+ "type": "型",
12
+ "required": "必須",
13
+ "rows": "行数",
14
+ "remove": "削除",
15
+ "egName": "例: 名前",
16
+ "egName2": "例: name",
17
+ "text": "文字列",
18
+ "multiline": "複数行",
19
+ "number": "数値",
20
+ "email": "E-メール",
21
+ "password": "パスワード",
22
+ "checkbox": "チェックボックス",
23
+ "switch": "スイッチ",
24
+ "date": "日付",
25
+ "time": "時間",
26
+ "element": "要素",
27
+ "buttons": "ボタン",
28
+ "submit": "送信",
29
+ "submitButtonText": "送信ボタンの文字列",
30
+ "cancel": "中止",
31
+ "cancelButtonText": "中止ボタンの文字列",
32
+ "topic": "トピック",
33
+ "optionalMsgTopic": "任意のmsg.topic",
34
+ "splitLayout": "フォーム要素を2列に配置",
35
+ "resetOnSubmit": "送信後にフォームを初期化"
36
+ }
37
+ }
38
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "ui-table": {
3
+ "label": {
4
+ "group": "グループ",
5
+ "size": "サイズ",
6
+ "maxRows": "上限の行数",
7
+ "columns": "列",
8
+ "autoCalculateColumns": "列を自動判断",
9
+ "key": "キー",
10
+ "label": "ラベル",
11
+ "column": "列"
12
+ }
13
+ }
14
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "ui-template": {
3
+ "label": {
4
+ "scope": "種類",
5
+ "widget-group": "部品 (有効範囲-グループ)",
6
+ "widget-page": "部品 (有効範囲-ページ)",
7
+ "widget-ui": "部品 (有効範囲-画面)",
8
+ "site-style": "CSS (全てのページ)",
9
+ "page-style": "CSS (単一のページ)",
10
+ "ui": "画面",
11
+ "page": "ページ",
12
+ "group": "グループ",
13
+ "size": "サイズ",
14
+ "className": "クラス",
15
+ "classNamePlaceholder": "任意のCSSクラス名",
16
+ "pass-through": "入力メッセージをそのまま渡す",
17
+ "store-state": "出力メッセージを状態として保存",
18
+ "template": "テンプレート",
19
+ "expand": "展開",
20
+ "resend": "更新時に最後の値を再度読み込む"
21
+ }
22
+ }
23
+ }
@@ -0,0 +1,19 @@
1
+ <script type="text/html" data-help-name="ui-text">
2
+ <p>
3
+ 画面に編集不可の文字列を表示します。受信した各 <code>msg.payload</code> の値は(任意の)ラベルの横に表示されます。
4
+ </p>
5
+ <p>
6
+ 「様式を適用」を有効にすることで、文字列の様式を変更できます。以下の設定が表示されます。
7
+ <ul>
8
+ <li><b>文字の種類:</b> 事前定義された文字の種類を一覧から選択</li>
9
+ <li><b>文字サイズ:</b> 表示する文字列の大きさを(ピクセル単位で)定義する数値</li>
10
+ <li><b>文字の色:</b> 表示する文字列の色を定義する色ピッカー</li>
11
+ </ul>
12
+ </p>
13
+ <h3>動的プロパティ(入力)</h3>
14
+ <p>実行時に本ノードのプロパティを設定したり、上書きしたりするため、以下を <code>msg.</code> に追加できます。</p>
15
+ <dl class="message-properties">
16
+ <dt class="optional">class <span class="property-type">文字列</span></dt>
17
+ <dd>実行時に文字列へCSSクラスなどを設定します。</dd>
18
+ </dl>
19
+ </script>
@@ -0,0 +1,20 @@
1
+ {
2
+ "ui-text": {
3
+ "label": {
4
+ "group": "グループ",
5
+ "size": "サイズ",
6
+ "label": "ラベル",
7
+ "class": "クラス",
8
+ "optionalCssClassNames": "任意のCSSクラス名",
9
+ "layout": "配置",
10
+ "label2": "ラベル",
11
+ "value": "値",
12
+ "style": "様式",
13
+ "applyStyle": "様式を適用",
14
+ "font": "文字の種類",
15
+ "textSize": "文字サイズ",
16
+ "textColor": "文字の色",
17
+ "enterSampleHere": "ここに例文を入力"
18
+ }
19
+ }
20
+ }
@@ -9,7 +9,7 @@
9
9
  defaults: {
10
10
  group: { type: 'ui-group', required: true },
11
11
  name: { value: '' },
12
- label: { value: 'button' },
12
+ label: { value: RED._('@flowfuse/node-red-dashboard/ui-button:ui-button.label.button') },
13
13
  order: { value: 0 },
14
14
  width: {
15
15
  value: 0,
@@ -80,7 +80,7 @@
80
80
 
81
81
  <script type="text/html" data-template-name="ui-button">
82
82
  <div class="form-row">
83
- <label for="node-input-group"><i class="fa fa-table"></i> Group</label>
83
+ <label for="node-input-group"><i class="fa fa-table"></i> <span data-i18n="ui-button.label.group"></label>
84
84
  <input type="text" id="node-input-group">
85
85
  </div>
86
86
  <div class="form-row">
@@ -94,13 +94,13 @@
94
94
  <input type="text" id="node-input-icon" data-i18n="[placeholder]ui-button.label.optionalIcon">
95
95
  </div>-->
96
96
  <div class="form-row">
97
- <label for="node-input-label"><i class="fa fa-i-cursor"></i> Label</label>
97
+ <label for="node-input-label"><i class="fa fa-i-cursor"></i> <span data-i18n="ui-button.label.label"></label>
98
98
  <input type="text" id="node-input-label" data-i18n="[placeholder]ui-button.label.optionalLabel">
99
99
  </div>
100
100
  <div class="form-row">
101
- <label for="node-input-className"><i class="fa fa-code"></i> Class</label>
101
+ <label for="node-input-className"><i class="fa fa-code"></i> <span data-i18n="ui-button.label.className"></label>
102
102
  <div style="display: inline;">
103
- <input style="width: 70%;" type="text" id="node-input-className" placeholder="Optional CSS class name(s)" style="flex-grow: 1;">
103
+ <input style="width: 70%;" type="text" id="node-input-className" data-i18n="[placeholder]ui-button.label.classNamePlaceholder" style="flex-grow: 1;">
104
104
  <a
105
105
  data-html="true"
106
106
  title="Dynamic Property: Send msg.class to append new classes to this widget. NOTE: classes set at runtime will be applied in addition to any class(es) set in the nodes class field."
@@ -17,7 +17,6 @@ module.exports = function (RED) {
17
17
  console.log('ui-event node not found', id)
18
18
  }
19
19
  if (wNode && id === node.id) {
20
- console.log('running ui-event handler', id)
21
20
  // this was sent by this particular node
22
21
  let msg = {
23
22
  topic: evt,
@@ -45,8 +45,8 @@
45
45
  },
46
46
  formValue: { value: {} },
47
47
  payload: { value: '' },
48
- submit: { value: 'submit' },
49
- cancel: { value: 'clear' },
48
+ submit: { value: c_('label.submit') },
49
+ cancel: { value: c_('label.cancel') },
50
50
  resetOnSubmit: { value: true },
51
51
  topic: { value: 'topic', validate: (hasProperty(RED.validators, 'typedInput') ? RED.validators.typedInput('topicType') : function (v) { return true }) },
52
52
  topicType: { value: 'msg' },
@@ -84,7 +84,7 @@
84
84
 
85
85
  // label field
86
86
  $('<input/>', { class: 'node-input-option-label', type: 'text', style: 'margin-left:7px; width:20%;', placeholder: c_('label.egName'), value: option.label }).appendTo(row)
87
-
87
+
88
88
  // key field
89
89
  let keyClass = 'node-input-option-key'
90
90
  if (!option.key) { keyClass = 'node-input-option-key input-error' }
@@ -98,7 +98,7 @@
98
98
  }
99
99
  }
100
100
  })
101
-
101
+
102
102
  // type field
103
103
  const typeField = $('<select/>', { class: 'node-input-option-type', type: 'text', style: 'margin-left:7px; width:16%' }).appendTo(row)// .typedInput({default:'str',types:['str', 'num']});
104
104
 
@@ -125,7 +125,7 @@
125
125
 
126
126
  // which input types don't need a 'require' option
127
127
  const noReqd = ['checkbox', 'switch']
128
-
128
+
129
129
  // required
130
130
  const requiredContainer = $('<div/>', { style: 'display:inline-block; height:34px; width:13%; vertical-align: middle' }).appendTo(row)
131
131
  const requiredInnerContainer = $('<div/>', { style: 'left:35%; position:relative; width:30px' }).appendTo(requiredContainer)
@@ -133,7 +133,7 @@
133
133
  const reqRow = $('<label />', { class: 'switch', style: 'top:10px; width:30px;' }).css('visibility', reqVis).appendTo(requiredInnerContainer)
134
134
  const reqd = $('<input/>', { class: 'node-input-option-required', type: 'checkbox', checked: option.required, style: 'vertical-align:top;' }).appendTo(reqRow)// labelForRequried);//.typedInput({default:'str',types:['str', 'num']});
135
135
  $('<div />', { class: 'slider round' }).appendTo(reqRow)
136
-
136
+
137
137
  // ui rows
138
138
  const rowsVis = option.rows ? 'visible' : 'hidden'
139
139
  const rowsField = $('<input/>', { class: 'node-input-option-rows', type: 'number', style: 'width:10%;', placeholder: 'Rows', value: option.rows }).css('visibility', rowsVis).appendTo(row)
@@ -311,9 +311,9 @@
311
311
  <input type="text" id="node-input-label" data-i18n="[placeholder]ui-form.label.optionalLabel">
312
312
  </div>
313
313
  <div class="form-row">
314
- <label for="node-input-className"><i class="fa fa-code"></i> Class</label>
314
+ <label for="node-input-className"><i class="fa fa-code"></i> <span data-i18n="ui-form.label.className"></label>
315
315
  <div style="display: inline;">
316
- <input style="width: 70%;" type="text" id="node-input-className" placeholder="Optional CSS class name(s)" style="flex-grow: 1;">
316
+ <input style="width: 70%;" type="text" id="node-input-className" data-i18n="[placeholder]ui-form.label.classNamePlaceholder" style="flex-grow: 1;">
317
317
  <a
318
318
  data-html="true"
319
319
  title="Dynamic Property: Send msg.class to append new classes to this widget. NOTE: classes set at runtime will be applied in addition to any class(es) set in the nodes class field."
@@ -32,6 +32,7 @@
32
32
  gstyle: { value: 'needle' },
33
33
  title: { value: 'gauge' },
34
34
  units: { value: 'units' },
35
+ icon: { value: '' },
35
36
  prefix: { value: '' },
36
37
  suffix: { value: '' },
37
38
  segments: {
@@ -215,7 +216,11 @@
215
216
  </div>
216
217
  <div class="form-row" id="ui-gauge-units">
217
218
  <label for="node-input-units"><i class="fa fa-calculator"></i> <span data-i18n="ui-gauge.label.units"></span></label>
218
- <input type="text" id="node-input-units" placeholder="segmental sub-label">
219
+ <input type="text" id="node-input-units" placeholder="Unit">
220
+ </div>
221
+ <div class="form-row" id="ui-gauge-icon">
222
+ <label for="node-input-icon"><i class="fa fa-home"></i> <span data-i18n="ui-gauge.label.icon"></span></label>
223
+ <input type="text" id="node-input-icon" placeholder="Icon from mdi library, e.g. 'home'">
219
224
  </div>
220
225
  </div>
221
226
  <div class="form-row">
@@ -62,8 +62,8 @@
62
62
 
63
63
  $('<i style="color: var(--red-ui-form-text-color, #eee); cursor:move; margin-left:3px;" class="node-input-column-handle fa fa-bars"></i>').appendTo(row)
64
64
 
65
- $('<input/>', { class: 'node-input-column-key', type: 'text', style: 'margin-left:7px; width:calc(50% - 32px);', placeholder: 'Key', value: col.key }).appendTo(row)
66
- $('<input/>', { class: 'node-input-column-label', type: 'text', style: 'margin-left:7px; width:calc(50% - 32px);', placeholder: 'Label', value: col.label }).appendTo(row)
65
+ $('<input/>', { class: 'node-input-column-key', type: 'text', style: 'margin-left:7px; width:calc(50% - 32px);', placeholder: RED._('@flowfuse/node-red-dashboard/ui-table:ui-table.label.key'), value: col.key }).appendTo(row)
66
+ $('<input/>', { class: 'node-input-column-label', type: 'text', style: 'margin-left:7px; width:calc(50% - 32px);', placeholder: RED._('@flowfuse/node-red-dashboard/ui-table:ui-table.label.label'), value: col.label }).appendTo(row)
67
67
 
68
68
  const finalSpan = $('<span/>', { style: 'float:right; margin-right:8px;' }).appendTo(row)
69
69
  const deleteButton = $('<a/>', { href: '#', class: 'editor-button editor-button-small', style: 'margin-top:7px; margin-left:5px;' }).appendTo(finalSpan)
@@ -114,35 +114,35 @@
114
114
 
115
115
  <script type="text/html" data-template-name="ui-table">
116
116
  <div class="form-row">
117
- <label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
118
- <input type="text" id="node-input-name">
117
+ <label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="node-red:common.label.name"></label>
118
+ <input type="text" id="node-input-name" data-i18n="[placeholder]node-red:common.label.name">
119
119
  </div>
120
120
  <div class="form-row">
121
- <label for="node-input-group"><i class="fa fa-table"></i> Group</label>
121
+ <label for="node-input-group"><i class="fa fa-table"></i> <span data-i18n="ui-table.label.group"></label>
122
122
  <input type="text" id="node-input-group">
123
123
  </div>
124
124
  <div class="form-row">
125
- <label><i class="fa fa-object-group"></i> Size</label>
125
+ <label><i class="fa fa-object-group"></i> <span data-i18n="ui-table.label.size"></label>
126
126
  <input type="hidden" id="node-input-width">
127
127
  <input type="hidden" id="node-input-height">
128
128
  <button class="editor-button" id="node-input-size"></button>
129
129
  </div>
130
130
  <div class="form-row">
131
- <label for="node-input-maxrows"><i class="fa fa-tag"></i> Max Rows</label>
131
+ <label for="node-input-maxrows"><i class="fa fa-tag"></i> <span data-i18n="ui-table.label.maxRows"></label>
132
132
  <input type="number" id="node-input-maxrows">
133
133
  </div>
134
134
  <div class="form-row" style="display:flex;">
135
- <label for="node-input-width" style="vertical-align:top"><i class="fa fa-list-alt"></i> Columns</label>
135
+ <label for="node-input-width" style="vertical-align:top"><i class="fa fa-list-alt"></i> <span data-i18n="ui-table.label.columns"></label>
136
136
  <div class="form-row node-input-column-container-row" style="margin-bottom: 0px; width:calc(70% + 15px);">
137
137
  <div>
138
138
  <input type="checkbox" checked id="node-input-autocols" style="display: inline-block; width: auto; margin: 0px 0px 0px 4px;">
139
- <label style="width:auto" for="node-input-autocols">Auto Calculate Columns</label>
139
+ <label style="width:auto" for="node-input-autocols" data-i18n="ui-table.label.autoCalculateColumns"></label>
140
140
  </div>
141
141
  <div id="node-input-columns-container">
142
142
  <div id="node-input-column-container-div" style="box-sizing:border-box; border-radius:5px; height:257px; padding:5px; border:1px solid var(--red-ui-form-input-border-color, #ccc); overflow-y:scroll; display:inline-block; width: 100%;">
143
143
  <ol id="node-input-column-container" style="list-style-type:none; margin:0;"></ol>
144
144
  </div>
145
- <a href="#" class="editor-button editor-button-small" id="node-input-add-column" style="margin-top:4px;"><i class="fa fa-plus"></i> <span>column</span></a>
145
+ <a href="#" class="editor-button editor-button-small" id="node-input-add-column" style="margin-top:4px;"><i class="fa fa-plus"></i> <span data-i18n="ui-table.label.columns"></span></a>
146
146
  </div>
147
147
  </div>
148
148
  </div>
@@ -324,19 +324,19 @@
324
324
  </select>
325
325
  </div>
326
326
  <div id="template-row-ui" class="form-row">
327
- <label for="node-input-ui"><i class="fa fa-bookmark"></i> UI</label>
327
+ <label for="node-input-ui"><i class="fa fa-bookmark"></i> <span data-i18n="ui-template.label.ui"></label>
328
328
  <input type="text" id="node-input-ui">
329
329
  </div>
330
330
  <div id="template-row-page" class="form-row">
331
- <label for="node-input-page"><i class="fa fa-bookmark"></i> Page</label>
331
+ <label for="node-input-page"><i class="fa fa-bookmark"></i> <span data-i18n="ui-template.label.page"></label>
332
332
  <input type="text" id="node-input-page">
333
333
  </div>
334
334
  <div id="template-row-group" class="form-row">
335
- <label for="node-input-group"><i class="fa fa-table"></i> Group</label>
335
+ <label for="node-input-group"><i class="fa fa-table"></i> <span data-i18n="ui-template.label.group"></label>
336
336
  <input type="text" id="node-input-group">
337
337
  </div>
338
338
  <div class="form-row">
339
- <label><i class="fa fa-object-group"></i> Size</label>
339
+ <label><i class="fa fa-object-group"></i> <span data-i18n="ui-template.label.size"></label>
340
340
  <input type="hidden" id="node-input-width">
341
341
  <input type="hidden" id="node-input-height">
342
342
  <button class="editor-button" id="node-input-size"></button>
@@ -348,9 +348,9 @@
348
348
  <button class="editor-button" id="node-input-size"></button>
349
349
  </div>-->
350
350
  <div class="form-row">
351
- <label for="node-input-className"><i class="fa fa-code"></i> Class</label>
351
+ <label for="node-input-className"><i class="fa fa-code"></i> <span data-i18n="ui-template.label.className"></label>
352
352
  <div style="display: inline;">
353
- <input style="width: 70%;" type="text" id="node-input-className" placeholder="Optional CSS class name(s)" style="flex-grow: 1;">
353
+ <input style="width: 70%;" type="text" id="node-input-className" data-i18n="[placeholder]ui-template.label.classNamePlaceholder" style="flex-grow: 1;">
354
354
  <a
355
355
  data-html="true"
356
356
  title="Dynamic Property: Send msg.class to append new classes to this widget. NOTE: classes set at runtime will be applied in addition to any class(es) set in the nodes class field."
@@ -361,7 +361,7 @@
361
361
  </div>
362
362
  </div>
363
363
  <div class="form-row" style="margin-bottom:0px;">
364
- <label for="node-input-format"><i class="fa fa-copy"></i> <span data-i18n="ui-template.label.template"></span></label>
364
+ <label for="node-input-format" style="width:110px;"><i class="fa fa-copy"></i> <span data-i18n="ui-template.label.template"></span></label>
365
365
  <input type="hidden" id="node-input-format">
366
366
  <button id="node-template-expand-editor" class="red-ui-button red-ui-button-small" style="float:right"><i class="fa fa-expand"></i></button>
367
367
  </div>