@willwade/aac-processors 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +787 -0
  3. package/dist/cli/index.d.ts +2 -0
  4. package/dist/cli/index.js +189 -0
  5. package/dist/cli/prettyPrint.d.ts +2 -0
  6. package/dist/cli/prettyPrint.js +28 -0
  7. package/dist/core/analyze.d.ts +6 -0
  8. package/dist/core/analyze.js +49 -0
  9. package/dist/core/baseProcessor.d.ts +94 -0
  10. package/dist/core/baseProcessor.js +208 -0
  11. package/dist/core/fileProcessor.d.ts +7 -0
  12. package/dist/core/fileProcessor.js +51 -0
  13. package/dist/core/stringCasing.d.ts +37 -0
  14. package/dist/core/stringCasing.js +174 -0
  15. package/dist/core/treeStructure.d.ts +190 -0
  16. package/dist/core/treeStructure.js +223 -0
  17. package/dist/index.d.ts +23 -0
  18. package/dist/index.js +96 -0
  19. package/dist/optional/symbolTools.d.ts +28 -0
  20. package/dist/optional/symbolTools.js +126 -0
  21. package/dist/processors/applePanelsProcessor.d.ts +23 -0
  22. package/dist/processors/applePanelsProcessor.js +521 -0
  23. package/dist/processors/astericsGridProcessor.d.ts +49 -0
  24. package/dist/processors/astericsGridProcessor.js +1427 -0
  25. package/dist/processors/dotProcessor.d.ts +21 -0
  26. package/dist/processors/dotProcessor.js +191 -0
  27. package/dist/processors/excelProcessor.d.ts +145 -0
  28. package/dist/processors/excelProcessor.js +556 -0
  29. package/dist/processors/gridset/helpers.d.ts +4 -0
  30. package/dist/processors/gridset/helpers.js +48 -0
  31. package/dist/processors/gridset/resolver.d.ts +8 -0
  32. package/dist/processors/gridset/resolver.js +100 -0
  33. package/dist/processors/gridsetProcessor.d.ts +28 -0
  34. package/dist/processors/gridsetProcessor.js +1339 -0
  35. package/dist/processors/index.d.ts +14 -0
  36. package/dist/processors/index.js +42 -0
  37. package/dist/processors/obfProcessor.d.ts +21 -0
  38. package/dist/processors/obfProcessor.js +278 -0
  39. package/dist/processors/opmlProcessor.d.ts +21 -0
  40. package/dist/processors/opmlProcessor.js +235 -0
  41. package/dist/processors/snap/helpers.d.ts +4 -0
  42. package/dist/processors/snap/helpers.js +27 -0
  43. package/dist/processors/snapProcessor.d.ts +44 -0
  44. package/dist/processors/snapProcessor.js +586 -0
  45. package/dist/processors/touchchat/helpers.d.ts +4 -0
  46. package/dist/processors/touchchat/helpers.js +27 -0
  47. package/dist/processors/touchchatProcessor.d.ts +27 -0
  48. package/dist/processors/touchchatProcessor.js +768 -0
  49. package/dist/types/aac.d.ts +47 -0
  50. package/dist/types/aac.js +2 -0
  51. package/docs/.keep +1 -0
  52. package/docs/ApplePanels.md +309 -0
  53. package/docs/Grid3-XML-Format.md +1788 -0
  54. package/docs/TobiiDynavox-Snap-Details.md +394 -0
  55. package/docs/asterics-Grid-fileformat-details.md +443 -0
  56. package/docs/obf_.obz Open Board File Formats.md +432 -0
  57. package/docs/touchchat.md +520 -0
  58. package/examples/.coverage +0 -0
  59. package/examples/.keep +1 -0
  60. package/examples/README.md +31 -0
  61. package/examples/communikate.dot +2637 -0
  62. package/examples/demo.js +143 -0
  63. package/examples/example-images.gridset +0 -0
  64. package/examples/example.ce +0 -0
  65. package/examples/example.dot +14 -0
  66. package/examples/example.grd +1 -0
  67. package/examples/example.gridset +0 -0
  68. package/examples/example.obf +27 -0
  69. package/examples/example.obz +0 -0
  70. package/examples/example.opml +18 -0
  71. package/examples/example.spb +0 -0
  72. package/examples/example.sps +0 -0
  73. package/examples/example2.grd +1 -0
  74. package/examples/gemini_response.txt +845 -0
  75. package/examples/image-map.js +45 -0
  76. package/examples/package-lock.json +1326 -0
  77. package/examples/package.json +10 -0
  78. package/examples/styled-output/converted-snap-to-touchchat.ce +0 -0
  79. package/examples/styled-output/styled-example.ce +0 -0
  80. package/examples/styled-output/styled-example.gridset +0 -0
  81. package/examples/styled-output/styled-example.obf +37 -0
  82. package/examples/styled-output/styled-example.spb +0 -0
  83. package/examples/styling-example.ts +316 -0
  84. package/examples/translate.js +39 -0
  85. package/examples/translate_demo.js +254 -0
  86. package/examples/translation_cache.json +44894 -0
  87. package/examples/typescript-demo.ts +251 -0
  88. package/examples/unified-interface-demo.ts +183 -0
  89. package/package.json +106 -0
@@ -0,0 +1,443 @@
1
+ # Asterics Grid File Format Details
2
+
3
+ This document provides a detailed description of the native file format used by Asterics Grid. This information is intended to help developers create their own parsers and tooling for working with Asterics Grid data.
4
+
5
+ ## 1. Core Concepts
6
+
7
+ The native Asterics Grid format is fundamentally a collection of JSON objects representing the application's data models. These objects are then encrypted and stored in a database. When exporting, these objects are serialized to a `.grd` file, which is an encrypted JSON file.
8
+
9
+ The key characteristics of the native format are:
10
+
11
+ * **JSON-based:** The underlying structure is built on JSON.
12
+ * **Encrypted:** All data is encrypted using AES encryption (via the `sjcl` library). The stored object is an `EncryptedObject`.
13
+ * **Extensible:** The format is highly extensible and supports a rich set of features not found in the OBF (Open Board Format) standard.
14
+
15
+ The primary data models are:
16
+
17
+ * **`GridData`:** Represents a single grid, including its layout and elements.
18
+ * **`MetaData`:** Stores global user settings and application configuration.
19
+ * **`Dictionary`:** Contains user-defined dictionaries for word prediction.
20
+ * **`EncryptedObject`:** A wrapper object that contains the encrypted data for any of the other models.
21
+
22
+ ## 2. Data Models
23
+
24
+ This section details the main data models and their properties.
25
+
26
+ ### 2.1. `EncryptedObject`
27
+
28
+ This is the top-level object that is actually stored in the database.
29
+
30
+ | Property | Type | Description |
31
+ | --------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
32
+ | `id` | String | The unique ID of the object. |
33
+ | `modelName` | String | The name of the data model being encrypted (e.g., "GridData"). |
34
+ | `modelVersion` | String | The version of the data model. |
35
+ | `encryptedDataBase64` | String | A Base64 encoded string of the encrypted JSON data of the contained object. |
36
+ | `encryptedDataBase64Short` | String | A "short" version of the encrypted data with properties longer than 500 characters removed. This is used for previews and lists to reduce data transfer. `null` if the same as the full version. |
37
+
38
+ ### 2.2. `GridData`
39
+
40
+ This model represents a single grid.
41
+
42
+ | Property | Type | Description |
43
+ | ---------------- | --------------- | --------------------------------------------------------------------------- |
44
+ | `id` | String | The unique ID of the grid. |
45
+ | `modelName` | String | "GridData" |
46
+ | `modelVersion` | String | The version of the `GridData` model. |
47
+ | `label` | Object | A map of translations for the grid's name (e.g., `{"en-us": "Home"}`). |
48
+ | `rowCount` | Number | The number of rows in the grid. |
49
+ | `columnCount` | Number | The number of columns in the grid. |
50
+ | `gridElements` | Array<`GridElement`> | An array of the elements contained within the grid. |
51
+ | `thumbnail` | Object | A Base64 encoded thumbnail image of the grid. |
52
+
53
+ ### 2.3. `GridElement`
54
+
55
+ This model represents a single element (cell) within a grid.
56
+
57
+ | Property | Type | Description |
58
+ | ----------------- | ------------- | -------------------------------------------------------------------------------- |
59
+ | `id` | String | The unique ID of the element. |
60
+ | `label` | Object | A map of translations for the element's label. |
61
+ | `image` | `GridImage` | The image associated with the element. |
62
+ | `backgroundColor` | String | The background color of the element (e.g., "rgba(255, 255, 255, 1)"). |
63
+ | `x` | Number | The horizontal position (column) of the element in the grid. |
64
+ | `y` | Number | The vertical position (row) of the element in the grid. |
65
+ | `width` | Number | The width of the element in grid units. |
66
+ | `height` | Number | The height of the element in grid units. |
67
+ | `actions` | Array<`GridAction`> | An array of actions to be performed when the element is activated. |
68
+ | `dontCollect` | Boolean | If `true`, the element's label will not be added to the sentence bar. |
69
+ | `additionalProps` | Object | An object containing additional, plugin-specific properties. |
70
+
71
+ ### 2.4. `GridImage`
72
+
73
+ | Property | Type | Description |
74
+ | -------- | ------ | ------------------------------------------------------ |
75
+ | `id` | String | The unique ID of the image. |
76
+ | `data` | String | A Base64 encoded data URI of the image. |
77
+ | `url` | String | A URL to an external image. |
78
+ | `author` | String | The author of the image. |
79
+ | `authorURL` | String | A URL to the author's website. |
80
+ | `searchProviderName` | String | The name of the search provider used to find the image (e.g., "ARASAAC"). |
81
+ | `searchProviderOptions` | Array<Object> | An array of options used for the image search. |
82
+
83
+ ## 3. Extended Actions
84
+
85
+ The native format supports a wide range of actions that go far beyond the capabilities of OBF. The `actions` property of a `GridElement` is an array of `GridAction` objects. Each action object has a `modelName` property that specifies its type.
86
+
87
+ Here are the available action types and their properties:
88
+
89
+ ### `GridActionARE`
90
+ Interface to the AsTeRICS Runtime Environment (ARE).
91
+
92
+ | Property | Type | Description |
93
+ | -------------------- | ------ | --------------------------------------------------------------- |
94
+ | `areURL` | String | The URL of the ARE instance. |
95
+ | `areModelGridFileName` | String | The name of the ARE model file stored in the `GridData`. |
96
+ | `componentId` | String | The ID of the component in the ARE model to interact with. |
97
+ | `dataPortId` | String | The ID of the data port to send data to. |
98
+ | `dataPortSendData` | String | The data to send to the data port. |
99
+ | `eventPortId` | String | The ID of the event port to trigger. |
100
+
101
+ ### `GridActionAudio`
102
+ Plays a recorded audio file.
103
+
104
+ | Property | Type | Description |
105
+ | ------------- | ------ | ----------------------------------------- |
106
+ | `dataBase64` | String | A Base64 encoded string of the audio data. |
107
+ | `mimeType` | String | The MIME type of the audio. |
108
+ | `durationMs` | Number | The duration of the audio in milliseconds. |
109
+ | `filename` | String | The name of the audio file. |
110
+
111
+ ### `GridActionChangeLang`
112
+ Changes the current content language or voice.
113
+
114
+ | Property | Type | Description |
115
+ | ---------- | ------ | ----------------------------------------- |
116
+ | `language` | String | The language code to switch to (e.g., "en-us"). |
117
+ | `voice` | String | The voice to use for text-to-speech. |
118
+
119
+ ### `GridActionCollectElement`
120
+ Performs an action on the "collected elements" area (the sentence bar).
121
+
122
+ | Property | Type | Description |
123
+ | `action` | String | The specific action to perform. See the list of available actions below. |
124
+
125
+ **Available Actions:**
126
+
127
+ * `COLLECT_ACTION_SPEAK`: Speak the collected text.
128
+ * `COLLECT_ACTION_SPEAK_CONTINUOUS`: Speak the collected text continuously.
129
+ * `COLLECT_ACTION_SPEAK_CLEAR`: Speak the collected text and then clear it.
130
+ * `COLLECT_ACTION_SPEAK_CONTINUOUS_CLEAR`: Speak the collected text continuously and then clear it.
131
+ * `COLLECT_ACTION_CLEAR`: Clear the collected text.
132
+ * `COLLECT_ACTION_REMOVE_WORD`: Remove the last word from the collected text.
133
+ * `COLLECT_ACTION_REMOVE_CHAR`: Remove the last character from the collected text.
134
+ * `COLLECT_ACTION_SHARE`: Share the collected text.
135
+ * `COLLECT_ACTION_COPY_IMAGE_CLIPBOARD`: Copy the image of the collected element to the clipboard.
136
+ * `COLLECT_ACTION_COPY_CLIPBOARD`: Copy the collected text to the clipboard.
137
+ * `COLLECT_ACTION_APPEND_CLIPBOARD`: Append the collected text to the clipboard.
138
+ * `COLLECT_ACTION_CLEAR_CLIPBOARD`: Clear the clipboard.
139
+ * `COLLECT_ACTION_TO_YOUTUBE`: Search for the collected text on YouTube.
140
+
141
+ ### `GridActionHTTP`
142
+ Sends an HTTP request.
143
+
144
+ | Property | Type | Description |
145
+ | -------------- | ------- | --------------------------------------------------------------------------- |
146
+ | `restUrl` | String | The URL for the HTTP request. |
147
+ | `method` | String | The HTTP method (e.g., "POST", "GET"). |
148
+ | `contentType` | String | The content type of the request (e.g., "text/plain", "application/json"). |
149
+ | `acceptHeader` | String | The "Accept" header for the request. |
150
+ | `body` | String | The body of the request. |
151
+ | `authUser` | String | The username for HTTP authentication. |
152
+ | `authPw` | String | The password for HTTP authentication. |
153
+ | `noCorsMode` | Boolean | If `true`, "no-cors" mode is used for the fetch request. |
154
+ | `useCorsProxy` | Boolean | If `true`, a CORS proxy is used for the request. |
155
+ | `isLiveAction` | Boolean | If `true`, this action is treated as a live action. |
156
+
157
+ ### `GridActionMatrix`
158
+ Interacts with a Matrix chat room.
159
+
160
+ | Property | Type | Description |
161
+ | -------------- | ------ | ------------------------------------------------------------------------ |
162
+ | `action` | String | The Matrix action to perform (e.g., "MATRIX_SEND_COLLECTED"). |
163
+ | `sendText` | String | Custom text to send. |
164
+ | `scrollPx` | Number | The number of pixels to scroll in the chat window. |
165
+ | `selectRoomId` | String | The ID of the Matrix room to select. |
166
+
167
+ ### `GridActionNavigate`
168
+ Navigates between grids.
169
+
170
+ | Property | Type | Description |
171
+ | ------------------- | ------- | ------------------------------------------------------------------------ |
172
+ | `navType` | String | The type of navigation (e.g., "TO_GRID", "TO_HOME", "TO_LAST"). |
173
+ | `toGridId` | String | The ID of the grid to navigate to (if `navType` is "TO_GRID"). |
174
+ | `addToCollectElem` | Boolean | If `true`, the label of the element is added to the collected elements. |
175
+ | `searchCollectedText`| Boolean | If `true`, the collected text is used as the search query. |
176
+ | `searchText` | String | A custom search query. |
177
+
178
+ ### `GridActionOpenHAB`
179
+ Interacts with an openHAB home automation system.
180
+
181
+ | Property | Type | Description |
182
+ | ------------ | ------ | ------------------------------------------------- |
183
+ | `openHABUrl` | String | The URL of the openHAB instance. |
184
+ | `itemType` | String | The type of the openHAB item (e.g., "Dimmer"). |
185
+ | `itemName` | String | The name of the openHAB item. |
186
+ | `actionType` | String | The action to perform on the item (e.g., "ON"). |
187
+ | `actionValue`| String | The value to send with the action (e.g., "50"). |
188
+
189
+ ### `GridActionOpenWebpage`
190
+ Opens a webpage.
191
+
192
+ | Property | Type | Description |
193
+ | --------------- | ------ | ---------------------------------------------- |
194
+ | `openURL` | String | The URL of the webpage to open. |
195
+ | `timeoutSeconds`| Number | The number of seconds before timing out. |
196
+
197
+ ### `GridActionPodcast`
198
+ Controls podcast playback.
199
+
200
+ | Property | Type | Description |
201
+ | ------------- | ------ | ---------------------------------------------------------------------------- |
202
+ | `action` | String | The podcast action to perform (e.g., "PLAY", "PAUSE"). |
203
+ | `podcastGuid` | String | The GUID of the podcast to control. |
204
+ | `step` | Number | The number of seconds to step forward or backward. |
205
+
206
+ ### `GridActionPredefined`
207
+ A predefined action for a specific device or service.
208
+
209
+ | Property | Type | Description |
210
+ | -------------- | ------ | --------------------------------------------------------------- |
211
+ | `groupId` | String | The ID of the group this action belongs to (e.g., "Shelly Plus Plug S"). |
212
+ | `actionInfo` | Object | Information about the custom values for this action. |
213
+ | `customValues` | Object | A map of key-value pairs for the custom values. |
214
+ | `isLiveAction` | Boolean| If `true`, this action is treated as a live action. |
215
+
216
+ ### `GridActionPredict`
217
+ Fills prediction elements with suggestions from a dictionary.
218
+
219
+ | Property | Type | Description |
220
+ | --------------- | ------- | --------------------------------------------------------------- |
221
+ | `dictionaryKey` | String | The key of the dictionary to use for predictions. |
222
+ | `suggestOnChange`| Boolean | If `true`, suggestions are updated as the user types. |
223
+
224
+ ### `GridActionSpeak`
225
+ Speaks the label of the grid element.
226
+
227
+ | Property | Type | Description |
228
+ | ------------- | ------ | ----------------------------------------------- |
229
+ | `speakLanguage`| String | The language to use for text-to-speech. |
230
+
231
+ ### `GridActionSpeakCustom`
232
+ Speaks a custom text.
233
+
234
+ | Property | Type | Description |
235
+ | ------------- | ------ | ----------------------------------------------- |
236
+ | `speakLanguage`| String | The language to use for text-to-speech. |
237
+ | `speakText` | Object | A map of translations for the text to be spoken. |
238
+
239
+ ### `GridActionSystem`
240
+ Performs a system-level action.
241
+
242
+ | Property | Type | Description |
243
+ | ----------- | ------ | ----------------------------------------------- |
244
+ | `action` | String | The system action to perform (e.g., "SYS_VOLUME_UP"). |
245
+ | `actionValue`| Number | The value to use for the action (e.g., 10 for volume). |
246
+
247
+ ### `GridActionUART`
248
+ Sends data over a UART (Universal Asynchronous Receiver-Transmitter) connection.
249
+
250
+ | Property | Type | Description |
251
+ | -------------- | ------ | ----------------------------------------------- |
252
+ | `data` | String | The data to send. |
253
+ | `connectionType`| String | The type of connection ("CONN_TYPE_BT" or "CONN_TYPE_SERIAL"). |
254
+
255
+ ### `GridActionWebradio`
256
+ Controls webradio playback.
257
+
258
+ | Property | Type | Description |
259
+ | -------- | ------ | ----------------------------------------------- |
260
+ | `action` | String | The webradio action to perform (e.g., "WEBRADIO_ACTION_START"). |
261
+ | `radioId`| String | The ID of the webradio station to control. |
262
+
263
+ ### `GridActionWordForm`
264
+ Changes the grammatical form of words.
265
+
266
+ | Property | Type | Description |
267
+ | ------------- | ------------- | --------------------------------------------------------------- |
268
+ | `type` | String | The type of word form change to apply. |
269
+ | `secondaryType`| String | A secondary type for the word form change. |
270
+ | `tags` | Array<String> | An array of tags to filter which elements are affected. |
271
+ | `toggle` | Boolean | If `true`, the action toggles between word forms. |
272
+
273
+ ### `GridActionYoutube`
274
+ Controls YouTube playback.
275
+
276
+ | Property | Type | Description |
277
+ | ----------------- | ------- | --------------------------------------------------------------- |
278
+ | `action` | String | The YouTube action to perform (e.g., "YT_PLAY"). |
279
+ | `playType` | String | The type of content to play (e.g., "YT_PLAY_VIDEO"). |
280
+ | `data` | String | The data for the play type (e.g., a video URL or search query). |
281
+ | `stepSeconds` | Number | The number of seconds to step forward or backward. |
282
+ | `stepVolume` | Number | The amount to change the volume by. |
283
+ | `showCC` | Boolean | If `true`, closed captions are shown. |
284
+ | `playMuted` | Boolean | If `true`, the video plays muted. |
285
+ | `performAfterNav` | Boolean | If `true`, the action is performed after a navigation. |
286
+
287
+ ## 4. Other Key Data Models and Extensions
288
+
289
+ Beyond the basic models, Asterics Grid uses several other data models to provide its advanced features.
290
+
291
+ ### 4.1. `GridElementCollect`
292
+
293
+ This is a special type of `GridElement` that displays the "collected elements" (the sentence bar). It has additional properties to control its appearance and behavior.
294
+
295
+ | Property | Type | Description |
296
+ | --------------------- | ------- | --------------------------------------------------------------------------- |
297
+ | `showLabels` | Boolean | If `true`, the labels of the collected elements are shown. |
298
+ | `showFullLabels` | Boolean | If `true`, the full labels are shown, otherwise they may be truncated. |
299
+ | `imageHeightPercentage`| Number | The height of the images in the collected elements as a percentage. |
300
+ | `mode` | String | The display mode ("MODE_AUTO", "MODE_COLLECT_SEPARATED", "MODE_COLLECT_TEXT"). |
301
+ | `singleLine` | Boolean | If `true`, the collected elements are displayed on a single line. |
302
+ | `convertToLowercase` | Boolean | If `true`, the labels are converted to lowercase. |
303
+ | `textElemSizeFactor` | Number | A factor to control the size of the text elements. |
304
+
305
+ ### 4.2. `GridElementLive`
306
+
307
+ A `GridElement` that can display dynamic content from various sources.
308
+
309
+ | Property | Type | Description |
310
+ | ---------------- | ------ | ----------------------------------------------------------------------------|
311
+ | `mode` | String | The source of the live data ("MODE_ACTION_RESULT", "MODE_DATETIME", etc.). |
312
+ | `updateSeconds` | Number | The interval in seconds at which to update the live data. |
313
+ | `liveAction` | Object | The action to execute to get the live data (if `mode` is "MODE_ACTION_RESULT"). |
314
+ | `dateTimeFormat` | String | The format to use for date and time display (if `mode` is "MODE_DATETIME"). |
315
+ | `state` | String | The state to display (e.g., for podcasts). |
316
+ | `appState` | String | The application state to display (e.g., "APP_STATE_BATTERY_LEVEL"). |
317
+ | `extractMode` | String | The mode to use for extracting data from the result ("EXTRACT_JSON", etc.). |
318
+ | `extractSelector`| String | The selector to use for extracting data (e.g., a JSON path or CSS selector). |
319
+ | `extractIndex` | String | An index for the extraction (e.g., for substrings). |
320
+ | `extractMappings`| Object | A map to convert extracted values to different display values. |
321
+ | `chooseValues` | String | A semicolon-separated list of values to choose from randomly. |
322
+
323
+ ### 4.3. `GridElementMatrixConversation`
324
+
325
+ A special type of `GridElement` that displays a Matrix chat conversation.
326
+
327
+ | Property | Type | Description |
328
+ | --------- | ------- | ------------------------------------------- |
329
+ | `autoSpeak` | Boolean | If `true`, incoming messages are spoken aloud. |
330
+
331
+ ### 4.4. `WordForm`
332
+
333
+ Represents a grammatical form of a word.
334
+
335
+ | Property | Type | Description |
336
+ | ------------- | ------------- | --------------------------------------------------------------- |
337
+ | `lang` | String | The language of the word form. |
338
+ | `tags` | Array<String> | An array of tags associated with the word form (e.g., "noun", "plural"). |
339
+ | `value` | String | The actual word form (e.g., "apples"). |
340
+ | `pronunciation`| String | The phonetic pronunciation of the word form. |
341
+
342
+ ### 4.5. `Dictionary`
343
+
344
+ Represents a user-defined dictionary for word prediction.
345
+
346
+ | Property | Type | Description |
347
+ | ------------- | ------- | --------------------------------------------------------------- |
348
+ | `dictionaryKey`| String | The key of the dictionary. |
349
+ | `lang` | String | The language of the dictionary. |
350
+ | `data` | String | The dictionary data as a JSON string. |
351
+ | `isDefault` | Boolean | If `true`, this is a default dictionary. |
352
+
353
+ ## 5. `MetaData`
354
+
355
+ The `MetaData` object stores global user settings and application configuration. There is only one `MetaData` object per user.
356
+
357
+ | Property | Type | Description |
358
+ | ---------------------------- | ------------------- | --------------------------------------------------------------------------- |
359
+ | `id` | String | The unique ID of the metadata object. |
360
+ | `modelName` | String | "MetaData" |
361
+ | `modelVersion` | String | The version of the `MetaData` model. |
362
+ | `homeGridId` | String | The ID of the user's home grid. |
363
+ | `lastOpenedGridId` | String | The ID of the last opened grid. |
364
+ | `globalGridId` | String | The ID of the global grid. |
365
+ | `globalGridActive` | Boolean | If `true`, the global grid is active. |
366
+ | `globalGridHeightPercentage` | Number | The height of the global grid as a percentage of the screen height. |
367
+ | `locked` | Boolean | If `true`, the grid set is locked and cannot be edited. |
368
+ | `fullscreen` | Boolean | If `true`, the application is in fullscreen mode. |
369
+ | `inputConfig` | `InputConfig` | The user's input configuration. |
370
+ | `colorConfig` | `ColorConfig` | The user's color configuration. |
371
+ | `textConfig` | `TextConfig` | The user's text configuration. |
372
+ | `notificationConfig` | `NotificationConfig`| The user's notification configuration. |
373
+ | `integrations` | `IntegrationConfigSync` | Configuration for integrations with other services like Matrix and podcasts. |
374
+
375
+ ### 5.1. `ColorConfig`
376
+
377
+ | Property | Type | Description |
378
+ | ------------------------ | ------- | --------------------------------------------------------------------------- |
379
+ | `colorSchemesActivated` | Boolean | If `true`, color schemes are activated. |
380
+ | `activeColorScheme` | String | The name of the active color scheme. |
381
+ | `additionalColorSchemes` | Array | An array of additional user-defined color schemes. |
382
+ | `elementBackgroundColor` | String | The default background color for grid elements. |
383
+ | `elementBorderColor` | String | The default border color for grid elements. |
384
+ | `gridBackgroundColor` | String | The background color for the grid. |
385
+ | `borderWidth` | Number | The width of the border around grid elements. |
386
+ | `elementMargin` | Number | The margin around grid elements. |
387
+ | `borderRadius` | Number | The border radius for grid elements. |
388
+ | `colorMode` | String | The color mode ("COLOR_MODE_BACKGROUND", "COLOR_MODE_BORDER", "COLOR_MODE_BOTH"). |
389
+
390
+ ### 5.2. `InputConfig`
391
+
392
+ This object contains a large number of properties related to input methods like scanning, hovering, and direct selection. For brevity, only a subset of the properties are listed here.
393
+
394
+ | Property | Type | Description |
395
+ | ------------------- | ------- | --------------------------------------------------------------------------- |
396
+ | `scanEnabled` | Boolean | If `true`, scanning is enabled. |
397
+ | `scanAuto` | Boolean | If `true`, scanning starts automatically. |
398
+ | `scanTimeoutMs` | Number | The timeout in milliseconds for scanning. |
399
+ | `hoverEnabled` | Boolean | If `true`, hovering is enabled. |
400
+ | `hoverTimeoutMs` | Number | The timeout in milliseconds for hovering. |
401
+ | `mouseclickEnabled` | Boolean | If `true`, mouse clicks are enabled. |
402
+
403
+ ### 5.3. `TextConfig`
404
+
405
+ | Property | Type | Description |
406
+ | ----------------- | ------ | --------------------------------------------------------------------------- |
407
+ | `convertMode` | String | The case conversion mode ("CONVERT_MODE_UPPERCASE", "CONVERT_MODE_LOWERCASE"). |
408
+ | `fontFamily` | String | The font family to use for element labels. |
409
+ | `fontSizePct` | Number | The font size as a percentage. |
410
+ | `lineHeight` | Number | The line height for element labels. |
411
+ | `maxLines` | Number | The maximum number of lines for element labels. |
412
+ | `textPosition` | String | The position of the text relative to the image ("ABOVE", "BELOW"). |
413
+ | `fittingMode` | String | The text fitting mode ("AUTO", "TRUNCATE", "ELLIPSIS"). |
414
+ | `fontColor` | String | The color of the font. |
415
+
416
+ ### 5.4. `NotificationConfig`
417
+
418
+ | Property | Type | Description |
419
+ | ------------------------ | ------ | --------------------------------------------------------------------------- |
420
+ | `backupNotifyIntervalDays` | Number | The interval in days to notify the user to create a backup. |
421
+ | `lastBackupNotification` | Number | The timestamp of the last backup notification. |
422
+ | `lastBackup` | Number | The timestamp of the last backup. |
423
+
424
+ ### 5.5. `IntegrationConfigSync`
425
+
426
+ | Property | Type | Description |
427
+ | -------------- | ------------- | ---------------------------------------------- |
428
+ | `matrixConfig` |`MatrixConfigSync`| The configuration for the Matrix integration. |
429
+ | `podcasts` | Array<`PodcastInfo`> | An array of podcast configurations. |
430
+
431
+ ## 6. Comparison with OBF
432
+
433
+ While Asterics Grid can import and export files in the Open Board Format (OBF), its native format is significantly more powerful and feature-rich. The OBF export should be considered a "lossy" conversion, as it does not preserve all of the information contained in the native format.
434
+
435
+ The key features of the native format that are **not** supported by OBF include:
436
+
437
+ * **Encryption:** The native format is always encrypted. OBF has no concept of encryption.
438
+ * **Rich Actions:** The vast majority of the `GridAction` types are not part of the OBF standard. OBF primarily supports navigation and simple speech actions. All the advanced actions for interacting with web services, home automation, and other devices are lost when converting to OBF.
439
+ * **Advanced Element Types:** Special element types like `GridElementCollect`, `GridElementLive`, and `GridElementMatrixConversation` are not supported by OBF.
440
+ * **Word Forms:** The concept of word forms does not exist in OBF.
441
+ * **User Dictionaries:** Custom dictionaries for word prediction are not part of the OBF standard.
442
+ * **Global Metadata:** The `MetaData` object, which stores a wide range of user preferences and settings, is not part of the OBF standard.
443
+ * **Multilingual Labels:** While OBF has a `locale` property, the native format's use of a map for translations in labels is more flexible and is not fully preserved in the conversion.