tabris 3.11.0-dev.20260216 → 3.11.0-dev.20260218

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/boot.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Tabris.js 3.11.0-dev.20260216+0310
2
+ * Tabris.js 3.11.0-dev.20260218+0310
3
3
  *
4
4
  * Copyright (c) 2014, 2020 EclipseSource Inc.
5
5
  * All rights reserved.
package/boot.min.js CHANGED
@@ -1 +1 @@
1
- !function(){"use strict";const t=["",".js",".json","/package.json","/index.js","/index.json"],e=["/package.json","/index.js","/index.json"],r="(function (module, exports, require, __filename, __dirname) { ",n="\n});";class o{constructor(t,e,r){this.exports={},this._cache={},this._paths={},this.id=t||"",this.parent=e||null;let n={},o=!1;const i=this.require.bind(this);Object.defineProperty(this,"_cache",{enumerable:!1,writable:!1,value:this.parent?this.parent._cache:this._cache}),Object.defineProperty(this,"_paths",{enumerable:!1,writable:!1,value:this.parent?this.parent._paths:this._paths}),t&&(this._cache[t]=this),Object.defineProperty(this,"exports",{set(t){n=t},get(){return o||(o=!0,"function"==typeof r&&t?r(this,n,i,t.slice(1),l(t).slice(1)):r instanceof Object&&(n=r)),n}}),function(t){if((null===t||void 0===t?void 0:t.id.endsWith("package.json"))&&t.exports&&"browser"in t.exports){const e=t.id+' has a "browser" field.\nThis module may function better with a file bundler';console.print?console.print("warn",e):console.warn(e)}}(this)}require(t){if("."!==t.slice(0,1)){const e=this._cache[t];if(e)return e.exports;const r=function(t){if(-1!==this.id.indexOf("/node_modules"))return null;let e,r,n=0;for(const o in this._paths){const i=o.indexOf("*");if(-1!==i){const s=o.substr(0,i),a=o.substr(i+1);t.length>=s.length+a.length&&t.startsWith(s)&&t.endsWith(a)&&n<s.length&&(n=s.length,e=o,r=t.substr(s.length,t.length-a.length))}else if(o===t){e=o,r=void 0;break}}if(!e)return null;const o=[];for(const n of this._paths[e]){const e=r?n.replace("*",r):n;o.push(e);const s=i.call(this,e,c(t));if(s)return s}throw new Error(`Cannot find module "${t}" at "${o.join('" or "')}"`)}.call(this,t);return r?r.exports:(this._cache[t]=!1,function(t){let e=l(this.id);const r=c(t),n="/node_modules/"+t;let o;do{o=i.call(this,h(e+n),r),(e=h(e+"/.."))&&"/node_modules"===e.slice(-1*"/node_modules".length)&&(e=h(e+"/.."))}while(!o&&e);if(!o)throw new Error("Cannot find module '"+t+"'");return o}.call(this,t).exports)}return function(t){const e=h(l(this.id)+"/"+t),r=i.call(this,e,c(t));if(!r)throw new Error("Cannot find module '"+t+"'");return r}.call(this,t).exports}static createLoader(t){let e;try{e=tabris._client.loadAndExecute(t,r,n)}catch(e){throw new Error("Could not parse "+t+":"+e)}return e.loadError?null:e.executeResult}static execute(t,e){return tabris._client.execute(t,e).executeResult}static readJSON(t){const e=this.load(t);if(e)try{return JSON.parse(e)}catch(e){throw new Error("Could not parse "+t+": "+(null===e||void 0===e?void 0:e.message))}}static getSourceMap(){return null}static load(t){return tabris._client.load(t)}static createRequire(t){if("string"!=typeof t||"/"!==t[0])throw new Error(`The argument 'path' must be an absolute path string. Received ${t}`);return function(e){return o.root.require(h(l("."+t)+"/"+e))}}static define(t,e){if(2!==arguments.length)throw new Error(`Expected exactly 2 arguments, got ${arguments.length}`);if("string"!=typeof t)throw new Error("Expected argument 1 to be of type string");if("/"!==t.charAt(0))throw new Error('Path needs to start with a "/"');const r="."+t;if(o.root._cache[r])throw new Error(`Module "${t}" is already defined'`);if(!1===o.root._cache[r])throw new Error(`Module "${t}" was accessed before it was defined'`);if(e instanceof o)throw new Error("Expected argument 2 to be module exports, got a module instance");new o("."+t,this.root,t=>t.exports=e)}static addPath(t,e){if(t instanceof Object){!function(t){if(!("paths"in t))throw new Error('Missing option "paths"');if(!(t.paths instanceof Object))throw new Error('Expected option "paths" to be an object');if("baseUrl"in t&&"string"!=typeof t.baseUrl)throw new Error('Expected option "baseUrl" to be a string');if(t.baseUrl&&!t.baseUrl.startsWith("/"))throw new Error('Expected baseUrl to start with "/"')}(t);for(const e in t.paths){const r=t.paths[e];if(!Array.isArray(r)||r.some(t=>"string"!=typeof t))throw new Error(`Expected paths for pattern "${e}" to be array of strings`);this.addPath(e,r.map(e=>t.baseUrl?"./"+h(t.baseUrl+"/"+e):e))}}else{if(arguments.length<=1)throw new Error("Expected argument 1 to be of type object");if(function(t,e){if("string"!=typeof t)throw new Error("Expected argument 1 to be of type string");if(!Array.isArray(e))throw new Error(`Expected paths for pattern "${t}" to be array of strings`);if(e.some(t=>"string"!=typeof t))throw new Error(`Expected paths for pattern "${t}" to be array of strings`);if(""===t)throw new Error("Pattern not be empty string");if(/^[./]./.test(t))throw new Error(`Pattern may not start with "${t.charAt(0)}"`);if(t.split("*").length>2)throw new Error('Pattern may contain only one "*"');if(t.includes(" "))throw new Error("Pattern may not contain spaces");if(0===e.length)throw new Error(`Paths array for pattern "${t}" is empty`);const r=t.includes("*");e.forEach(e=>{if(!e.startsWith("./"))throw new Error(`Expected path "${e}" for pattern "${t}" to start with "./"`);const n=e.split("*").length-1;if(r){if(1!==n)throw new Error(`Expected path "${e}" for pattern "${t}" to contain exactly one "*"`)}else if(0!==n)throw new Error(`Expected path "${e}" for pattern "${t}" to not contain "*"`)})}(t,e),this.root._paths[t])throw new Error(`Pattern "${t}" is already registered`);const r=t.split("*")[0];if(Object.keys(this.root._cache).some(t=>t.startsWith(r)))throw new Error(`Can not add pattern "${t}" since a matching module was already imported'`);this.root._paths[t]=e}}}function i(e,r){if(e)for(const n of r){let r=a.call(this,e+n);if("/package.json"===n)if(s(r)){const n=h(e+"/"+s(r));r=i.call(this,n,t)}else r=null;if(r)return r}return null}function s(t){return t&&t.exports&&t.exports.main}function a(t){if(t in this._cache)return this._cache[t]||null;if(".json"===t.slice(-5)){const e=o.readJSON(t);if(e)return new o(t,this,e)}else{const e=o.createLoader(t);if(e)return new o(t,this,e)}return this._cache[t]=!1,null}function c(r){return"/"===r.slice(-1)?e:t}function l(t){return t&&"."===t.slice(0,1)?t.slice(0,t.lastIndexOf("/")):"./"}function h(t){const e=[],r=t.split("/");for(const t of r)if(".."===t){const t=e.pop();if(!t||"."===t)return""}else("."===t?0===e.length:""!==t)&&e.push(t);return e.join("/")}function u(t,e){console.print?console.print("error",t+(e.stack||e)):console.error(t,e)}o.root=new o,global.window=global.self=global,global.tabris={},tabris._start=function(t){try{tabris._client=t;const e=o.root;global.module=e,global.require=e.require.bind(e),global.exports=e.exports,global.__dirname="./",global.__filename=".";try{e.require("tabris"),tabris._client=t}catch(t){return void u("Could not load tabris module:",t)}tabris.Module=o,tabris._defineModule=function(t,r){return new o(t,e,r)};const r=document.createElement("script");r.src="./cordova.js",document.head.appendChild(r);const n=global.workerScriptPath;delete global.workerScriptPath;const i=void 0!==n;tabris._init&&tabris._init(t,{headless:i});const s=function(){try{global.debugClient&&!i&&global.debugClient.start(e),e.require("./"+(i?n:"")),tabris.flush()}catch(t){u("Could not load "+(i?"worker":"main module")+":",t)}};tabris._entryPoint?(tabris._entryPoint(s),tabris._entryPoint=null):s(),tabris.flush()}catch(t){u("Could not start tabris:",t)}},tabris._notify=function(...t){return tabris._notify.apply(this,t)}}();
1
+ !function(){"use strict";const t=["",".js",".json","/package.json","/index.js","/index.json"],e=["/package.json","/index.js","/index.json"],r="(function (module, exports, require, __filename, __dirname) { ",n="\n});";class o{constructor(t,e,r){this.exports={},this._cache={},this._paths={},this.id=t||"",this.parent=e||null;let n={},o=!1;const i=this.require.bind(this);Object.defineProperty(this,"_cache",{enumerable:!1,writable:!1,value:this.parent?this.parent._cache:this._cache}),Object.defineProperty(this,"_paths",{enumerable:!1,writable:!1,value:this.parent?this.parent._paths:this._paths}),t&&(this._cache[t]=this),Object.defineProperty(this,"exports",{set(t){n=t},get(){return o||(o=!0,"function"==typeof r&&t?r(this,n,i,t.slice(1),l(t).slice(1)):r instanceof Object&&(n=r)),n}}),function(t){if((null==t?void 0:t.id.endsWith("package.json"))&&t.exports&&"browser"in t.exports){const e=t.id+' has a "browser" field.\nThis module may function better with a file bundler';console.print?console.print("warn",e):console.warn(e)}}(this)}require(t){if("."!==t.slice(0,1)){const e=this._cache[t];if(e)return e.exports;const r=function(t){if(-1!==this.id.indexOf("/node_modules"))return null;let e,r,n=0;for(const o in this._paths){const i=o.indexOf("*");if(-1!==i){const s=o.substr(0,i),a=o.substr(i+1);t.length>=s.length+a.length&&t.startsWith(s)&&t.endsWith(a)&&n<s.length&&(n=s.length,e=o,r=t.substr(s.length,t.length-a.length))}else if(o===t){e=o,r=void 0;break}}if(!e)return null;const o=[];for(const n of this._paths[e]){const e=r?n.replace("*",r):n;o.push(e);const s=i.call(this,e,c(t));if(s)return s}throw new Error(`Cannot find module "${t}" at "${o.join('" or "')}"`)}.call(this,t);return r?r.exports:(this._cache[t]=!1,function(t){let e=l(this.id);const r=c(t),n="/node_modules/"+t;let o;do{o=i.call(this,h(e+n),r),e=h(e+"/.."),e&&"/node_modules"===e.slice(-1*"/node_modules".length)&&(e=h(e+"/.."))}while(!o&&e);if(!o)throw new Error("Cannot find module '"+t+"'");return o}.call(this,t).exports)}return function(t){const e=h(l(this.id)+"/"+t),r=i.call(this,e,c(t));if(!r)throw new Error("Cannot find module '"+t+"'");return r}.call(this,t).exports}static createLoader(t){let e;try{e=tabris._client.loadAndExecute(t,r,n)}catch(e){throw new Error("Could not parse "+t+":"+e)}return e.loadError?null:e.executeResult}static execute(t,e){return tabris._client.execute(t,e).executeResult}static readJSON(t){const e=this.load(t);if(e)try{return JSON.parse(e)}catch(e){throw new Error("Could not parse "+t+": "+(null==e?void 0:e.message))}}static getSourceMap(){return null}static load(t){return tabris._client.load(t)}static createRequire(t){if("string"!=typeof t||"/"!==t[0])throw new Error(`The argument 'path' must be an absolute path string. Received ${t}`);return function(e){return o.root.require(h(l("."+t)+"/"+e))}}static define(t,e){if(2!==arguments.length)throw new Error(`Expected exactly 2 arguments, got ${arguments.length}`);if("string"!=typeof t)throw new Error("Expected argument 1 to be of type string");if("/"!==t.charAt(0))throw new Error('Path needs to start with a "/"');const r="."+t;if(o.root._cache[r])throw new Error(`Module "${t}" is already defined'`);if(!1===o.root._cache[r])throw new Error(`Module "${t}" was accessed before it was defined'`);if(e instanceof o)throw new Error("Expected argument 2 to be module exports, got a module instance");new o("."+t,this.root,t=>t.exports=e)}static addPath(t,e){if(t instanceof Object){!function(t){if(!("paths"in t))throw new Error('Missing option "paths"');if(!(t.paths instanceof Object))throw new Error('Expected option "paths" to be an object');if("baseUrl"in t&&"string"!=typeof t.baseUrl)throw new Error('Expected option "baseUrl" to be a string');if(t.baseUrl&&!t.baseUrl.startsWith("/"))throw new Error('Expected baseUrl to start with "/"')}(t);for(const e in t.paths){const r=t.paths[e];if(!Array.isArray(r)||r.some(t=>"string"!=typeof t))throw new Error(`Expected paths for pattern "${e}" to be array of strings`);this.addPath(e,r.map(e=>t.baseUrl?"./"+h(t.baseUrl+"/"+e):e))}}else{if(arguments.length<=1)throw new Error("Expected argument 1 to be of type object");if(function(t,e){if("string"!=typeof t)throw new Error("Expected argument 1 to be of type string");if(!Array.isArray(e))throw new Error(`Expected paths for pattern "${t}" to be array of strings`);if(e.some(t=>"string"!=typeof t))throw new Error(`Expected paths for pattern "${t}" to be array of strings`);if(""===t)throw new Error("Pattern not be empty string");if(/^[./]./.test(t))throw new Error(`Pattern may not start with "${t.charAt(0)}"`);if(t.split("*").length>2)throw new Error('Pattern may contain only one "*"');if(t.includes(" "))throw new Error("Pattern may not contain spaces");if(0===e.length)throw new Error(`Paths array for pattern "${t}" is empty`);const r=t.includes("*");e.forEach(e=>{if(!e.startsWith("./"))throw new Error(`Expected path "${e}" for pattern "${t}" to start with "./"`);const n=e.split("*").length-1;if(r){if(1!==n)throw new Error(`Expected path "${e}" for pattern "${t}" to contain exactly one "*"`)}else if(0!==n)throw new Error(`Expected path "${e}" for pattern "${t}" to not contain "*"`)})}(t,e),this.root._paths[t])throw new Error(`Pattern "${t}" is already registered`);const r=t.split("*")[0];if(Object.keys(this.root._cache).some(t=>t.startsWith(r)))throw new Error(`Can not add pattern "${t}" since a matching module was already imported'`);this.root._paths[t]=e}}}function i(e,r){if(e)for(const n of r){let r=a.call(this,e+n);if("/package.json"===n)if(s(r)){const n=h(e+"/"+s(r));r=i.call(this,n,t)}else r=null;if(r)return r}return null}function s(t){return t&&t.exports&&t.exports.main}function a(t){if(t in this._cache)return this._cache[t]||null;if(".json"===t.slice(-5)){const e=o.readJSON(t);if(e)return new o(t,this,e)}else{const e=o.createLoader(t);if(e)return new o(t,this,e)}return this._cache[t]=!1,null}function c(r){return"/"===r.slice(-1)?e:t}function l(t){return t&&"."===t.slice(0,1)?t.slice(0,t.lastIndexOf("/")):"./"}function h(t){const e=[],r=t.split("/");for(const t of r)if(".."===t){const t=e.pop();if(!t||"."===t)return""}else("."===t?0===e.length:""!==t)&&e.push(t);return e.join("/")}function u(t,e){console.print?console.print("error",t+(e.stack||e)):console.error(t,e)}o.root=new o,global.window=global.self=global,global.tabris={},tabris._start=function(t){try{tabris._client=t;const e=o.root;global.module=e,global.require=e.require.bind(e),global.exports=e.exports,global.__dirname="./",global.__filename=".";try{e.require("tabris"),tabris._client=t}catch(t){return void u("Could not load tabris module:",t)}tabris.Module=o,tabris._defineModule=function(t,r){return new o(t,e,r)};const r=document.createElement("script");r.src="./cordova.js",document.head.appendChild(r);const n=global.workerScriptPath;delete global.workerScriptPath;const i=void 0!==n;tabris._init&&tabris._init(t,{headless:i});const s=function(){try{global.debugClient&&!i&&global.debugClient.start(e),e.require("./"+(i?n:"")),tabris.flush()}catch(t){u("Could not load "+(i?"worker":"main module")+":",t)}};tabris._entryPoint?(tabris._entryPoint(s),tabris._entryPoint=null):s(),tabris.flush()}catch(t){u("Could not start tabris:",t)}},tabris._notify=function(...t){return tabris._notify.apply(this,t)}}();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tabris",
3
- "version": "3.11.0-dev.20260216+0310",
3
+ "version": "3.11.0-dev.20260218+0310",
4
4
  "description": "Mobile apps with native UIs in JavaScript",
5
5
  "keywords": [
6
6
  "native",
package/tabris.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- // Type definitions for Tabris.js 3.11.0-dev.20260216+0310
1
+ // Type definitions for Tabris.js 3.11.0-dev.20260218+0310
2
2
  /// <reference path="globals.d.ts" />
3
3
 
4
4
  // General helper types
@@ -7344,12 +7344,27 @@ export class Widget<TData extends object = any> extends NativeObject {
7344
7344
  */
7345
7345
  accessibilityHidden: boolean;
7346
7346
 
7347
+ /**
7348
+ * Provides a hint about what happens when the element is activated.
7349
+ */
7350
+ accessibilityHint: string;
7351
+
7347
7352
  /**
7348
7353
  * Provides a textual description of the widget for screen readers, describing its purpose or function
7349
7354
  * to visually impaired users.
7350
7355
  */
7351
7356
  accessibilityLabel: string;
7352
7357
 
7358
+ /**
7359
+ * Describes the traits/characteristics of the element, e.g., 'button', 'header', 'link'.
7360
+ */
7361
+ accessibilityTraits: string[];
7362
+
7363
+ /**
7364
+ * Provides the current value of the element, e.g., for sliders or progress bars.
7365
+ */
7366
+ accessibilityValue: string;
7367
+
7353
7368
  /**
7354
7369
  * The background of the widget. If given a plain string it is interpreted first as a gradient, then as
7355
7370
  * a color, and finally as an image path, whichever passes first. Use object literals or instances of
@@ -7457,6 +7472,11 @@ export class Widget<TData extends object = any> extends NativeObject {
7457
7472
  */
7458
7473
  id: string;
7459
7474
 
7475
+ /**
7476
+ * If true, this widget is treated as accessibility element by assistive technologies.
7477
+ */
7478
+ isAccessibilityElement: boolean;
7479
+
7460
7480
  /**
7461
7481
  * Provides information for a widget to be used by the parent when determining its size and position.
7462
7482
  * While this property accepts any valid LayoutData expression (see ${doc:LayoutDataValue}), it will
@@ -7620,11 +7640,26 @@ export class Widget<TData extends object = any> extends NativeObject {
7620
7640
  */
7621
7641
  onAccessibilityHiddenChanged: ChangeListeners<this, 'accessibilityHidden'>;
7622
7642
 
7643
+ /**
7644
+ * Fired when the [*accessibilityHint*](#accessibilityHint) property has changed.
7645
+ */
7646
+ onAccessibilityHintChanged: ChangeListeners<this, 'accessibilityHint'>;
7647
+
7623
7648
  /**
7624
7649
  * Fired when the [*accessibilityLabel*](#accessibilityLabel) property has changed.
7625
7650
  */
7626
7651
  onAccessibilityLabelChanged: ChangeListeners<this, 'accessibilityLabel'>;
7627
7652
 
7653
+ /**
7654
+ * Fired when the [*accessibilityTraits*](#accessibilityTraits) property has changed.
7655
+ */
7656
+ onAccessibilityTraitsChanged: ChangeListeners<this, 'accessibilityTraits'>;
7657
+
7658
+ /**
7659
+ * Fired when the [*accessibilityValue*](#accessibilityValue) property has changed.
7660
+ */
7661
+ onAccessibilityValueChanged: ChangeListeners<this, 'accessibilityValue'>;
7662
+
7628
7663
  /**
7629
7664
  * Fired when the [*background*](#background) property has changed.
7630
7665
  */
@@ -7705,6 +7740,11 @@ export class Widget<TData extends object = any> extends NativeObject {
7705
7740
  */
7706
7741
  onIdChanged: ChangeListeners<this, 'id'>;
7707
7742
 
7743
+ /**
7744
+ * Fired when the [*isAccessibilityElement*](#isAccessibilityElement) property has changed.
7745
+ */
7746
+ onIsAccessibilityElementChanged: ChangeListeners<this, 'isAccessibilityElement'>;
7747
+
7708
7748
  /**
7709
7749
  * Fired when the [*layoutData*](#layoutData) property has changed.
7710
7750
  */
@@ -7984,12 +8024,6 @@ export interface AppBackNavigationEvent<Target = App>
7984
8024
  readonly preventDefault: () => void;
7985
8025
  }
7986
8026
 
7987
- export interface AppContinueWebActivityEvent<Target = App>
7988
- extends EventObject<Target>
7989
- {
7990
- readonly webpageURL: string;
7991
- }
7992
-
7993
8027
  export interface AppKeyPressEvent<Target = App>
7994
8028
  extends EventObject<Target>
7995
8029
  {
@@ -8146,12 +8180,6 @@ export class App extends NativeObject {
8146
8180
  */
8147
8181
  onBackground: Listeners<EventObject<this>>;
8148
8182
 
8149
- /**
8150
- * Fired when the app is launched via a universal link (iOS) or app link (Android). This event allows
8151
- * the app to handle universal/app links opened in another app.
8152
- */
8153
- onContinueWebActivity: Listeners<AppContinueWebActivityEvent<this>>;
8154
-
8155
8183
  /**
8156
8184
  * The event is fired when the app starts or when it returns from the background.
8157
8185
  */
package/tabris.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Tabris.js 3.11.0-dev.20260216+0310
2
+ * Tabris.js 3.11.0-dev.20260218+0310
3
3
  *
4
4
  * Copyright (c) 2014, 2020 EclipseSource Inc.
5
5
  * All rights reserved.
@@ -600,6 +600,7 @@ const jsxFactory = Symbol('jsxFactory');
600
600
  const jsxType = Symbol('jsxType');
601
601
 
602
602
  var symbols = /*#__PURE__*/Object.freeze({
603
+ __proto__: null,
603
604
  equals: equals,
604
605
  creationAllowed: creationAllowed,
605
606
  bytes: bytes,
@@ -950,8 +951,8 @@ function getBytes(blob) {
950
951
  * @param {any} blob
951
952
  * @param {ArrayBuffer} bytes
952
953
  */
953
- function setBytes(blob, bytes$$1) {
954
- return blob[bytes] = bytes$$1;
954
+ function setBytes(blob, bytes$1) {
955
+ return blob[bytes] = bytes$1;
955
956
  }
956
957
  /**
957
958
  * @template {object} T
@@ -990,8 +991,8 @@ function allowOnlyValues(value, allowed, valueName = 'Value') {
990
991
  * @param {object} object
991
992
  * @param {{cid: string}} nativeObject
992
993
  */
993
- function setNativeObject(object, nativeObject$$1) {
994
- object[nativeObject] = nativeObject$$1;
994
+ function setNativeObject(object, nativeObject$1) {
995
+ object[nativeObject] = nativeObject$1;
995
996
  }
996
997
  /**
997
998
  * @param {object} object
@@ -1086,14 +1087,14 @@ const urlBaseRegEx = /^[a-z]+:\/\/[^/]+\//;
1086
1087
  * @param {boolean} errorStyleFormatting
1087
1088
  * Prefix trace lines with "at", similarly to how logged errors are formatted in V8.
1088
1089
  */
1089
- function getStackTrace(error$$1, errorStyleFormatting = false) {
1090
+ function getStackTrace(error, errorStyleFormatting = false) {
1090
1091
  try {
1091
- return getStackArray(error$$1.stack).map(line => errorStyleFormatting ? ' at ' + line : line).join('\n');
1092
+ return getStackArray(error.stack).map(line => errorStyleFormatting ? ' at ' + line : line).join('\n');
1092
1093
  }
1093
1094
  catch (ex) {
1094
1095
  const minimalError = (ex && ex.constructor && ex.message) ? ex.constructor.name + ': ' + ex.message : '';
1095
1096
  warn(`Could not process stack trace (${minimalError || ex}), printing original.`);
1096
- return error$$1.stack;
1097
+ return error.stack;
1097
1098
  }
1098
1099
  }
1099
1100
  function patchError(fn) {
@@ -1101,23 +1102,23 @@ function patchError(fn) {
1101
1102
  return formatError(this);
1102
1103
  };
1103
1104
  }
1104
- function formatError(error$$1) {
1105
+ function formatError(error) {
1105
1106
  let stack;
1106
1107
  try {
1107
- if (!(error$$1 instanceof Object)) {
1108
- return '' + error$$1;
1108
+ if (!(error instanceof Object)) {
1109
+ return '' + error;
1109
1110
  }
1110
- if (!(error$$1 instanceof Error)) {
1111
- return error$$1.constructor.name + ': ' + error$$1.toString();
1111
+ if (!(error instanceof Error)) {
1112
+ return error.constructor.name + ': ' + error.toString();
1112
1113
  }
1113
1114
  else {
1114
- stack = getStackArray(error$$1.stack).map(line => ' at ' + line).join('\n');
1115
+ stack = getStackArray(error.stack).map(line => ' at ' + line).join('\n');
1115
1116
  }
1116
1117
  }
1117
1118
  catch (ex) {
1118
- stack = error$$1.stack;
1119
+ stack = error.stack;
1119
1120
  }
1120
- return error$$1.constructor.name + ': ' + error$$1.message + '\n' + stack;
1121
+ return error.constructor.name + ': ' + error.message + '\n' + stack;
1121
1122
  }
1122
1123
  function formatPromiseRejectionReason(reason) {
1123
1124
  let result;
@@ -1132,9 +1133,9 @@ function formatPromiseRejectionReason(reason) {
1132
1133
  }
1133
1134
  return result;
1134
1135
  }
1135
- function getCurrentLine(error$$1) {
1136
+ function getCurrentLine(error) {
1136
1137
  try {
1137
- return getStackArray(error$$1.stack)[0].trim();
1138
+ return getStackArray(error.stack)[0].trim();
1138
1139
  }
1139
1140
  catch (ex) {
1140
1141
  return '';
@@ -2965,11 +2966,11 @@ class JsxProcessor {
2965
2966
  if (attributes && 'children' in attributes) {
2966
2967
  throw new Error(`JSX: ${Type.name} can not have children`);
2967
2968
  }
2968
- const _a = attributesWithoutListener(attributes || {}), { data: data$$1 } = _a, properties = __rest(_a, ["data"]);
2969
+ const _a = attributesWithoutListener(attributes || {}), { data } = _a, properties = __rest(_a, ["data"]);
2969
2970
  const result = new Type(properties);
2970
2971
  registerListenerAttributes(result, attributes);
2971
- if (data$$1) {
2972
- result.data = data$$1;
2972
+ if (data) {
2973
+ result.data = data;
2973
2974
  }
2974
2975
  return result;
2975
2976
  }
@@ -5034,7 +5035,7 @@ class Tabris extends NativeObject {
5034
5035
  this.$publishProxies();
5035
5036
  }
5036
5037
  get version() {
5037
- return '3.11.0-dev.20260216+0310';
5038
+ return '3.11.0-dev.20260218+0310';
5038
5039
  }
5039
5040
  get started() {
5040
5041
  return !!this._started;
@@ -5481,7 +5482,10 @@ function publishDeviceProperties(device, target) {
5481
5482
  target.devicePixelRatio = device.scaleFactor;
5482
5483
  target.device = createDevice(device);
5483
5484
  target.screen = createScreen(device);
5484
- target.navigator = createNavigator(device);
5485
+ // Only override navigator if not in Node.js test environment or if it doesn't exist
5486
+ if (typeof process === 'undefined' || !target.navigator) {
5487
+ target.navigator = createNavigator(device);
5488
+ }
5485
5489
  }
5486
5490
  function createDevice(device) {
5487
5491
  const dev = {};
@@ -6233,11 +6237,11 @@ class Widget extends NativeObject {
6233
6237
  return;
6234
6238
  }
6235
6239
  checkType(value, Object, { name: 'data', nullable: true });
6236
- let data$$1 = value;
6240
+ let data = value;
6237
6241
  if ((value === null || value === void 0 ? void 0 : value.constructor) === Object) {
6238
- data$$1 = ObservableData(data$$1);
6242
+ data = ObservableData(data);
6239
6243
  }
6240
- Object.defineProperty(this, '$data', { enumerable: false, writable: true, value: data$$1 });
6244
+ Object.defineProperty(this, '$data', { enumerable: false, writable: true, value: data });
6241
6245
  ObservableData.generateChangeEvents({ target: this, property: 'data' });
6242
6246
  }
6243
6247
  get data() {
@@ -6441,11 +6445,40 @@ NativeObject.defineProperties(Widget.prototype, {
6441
6445
  },
6442
6446
  accessibilityHidden: {
6443
6447
  type: types.boolean,
6444
- default: false
6448
+ nocache: true
6445
6449
  },
6446
6450
  accessibilityLabel: {
6447
6451
  type: types.string,
6448
- default: ''
6452
+ nocache: true
6453
+ },
6454
+ accessibilityHint: {
6455
+ type: types.string,
6456
+ nocache: true
6457
+ },
6458
+ accessibilityValue: {
6459
+ type: types.string,
6460
+ nocache: true
6461
+ },
6462
+ accessibilityTraits: {
6463
+ type: {
6464
+ convert(value) {
6465
+ if (Array.isArray(value)) {
6466
+ return value.map(String);
6467
+ }
6468
+ else if (typeof value === 'string') {
6469
+ return [value];
6470
+ }
6471
+ else if (value == null) {
6472
+ return [];
6473
+ }
6474
+ throw new Error('accessibilityTraits must be a string or array of strings');
6475
+ }
6476
+ },
6477
+ nocache: true
6478
+ },
6479
+ isAccessibilityElement: {
6480
+ type: types.boolean,
6481
+ nocache: true
6449
6482
  }
6450
6483
  });
6451
6484
  layoutDataProps.forEach(prop => {
@@ -7612,7 +7645,7 @@ function defineProperty(context, name) {
7612
7645
  context._gc.addOperation(name);
7613
7646
  prop.addOperations.call(context, context._state[name]);
7614
7647
  }
7615
- catch (error$$1) {
7648
+ catch (error) {
7616
7649
  hint(context, 'Unsupported value for ' + name + ': ' + value);
7617
7650
  }
7618
7651
  }
@@ -8033,8 +8066,7 @@ NativeObject.defineEvents(App.prototype, {
8033
8066
  terminate: { native: true },
8034
8067
  keyPress: { native: true },
8035
8068
  backNavigation: { native: true },
8036
- certificatesReceived: { native: true },
8037
- continueWebActivity: { native: true }
8069
+ certificatesReceived: { native: true }
8038
8070
  });
8039
8071
  function create$4() {
8040
8072
  return new App(true);
@@ -8255,12 +8287,12 @@ function create$5() {
8255
8287
  function createError(err, path) {
8256
8288
  const message = `${ERRORS[err] || err}: ${path}`;
8257
8289
  const code = err in ERRORS ? err : null;
8258
- const error$$1 = new Error(message);
8259
- Object.defineProperties(error$$1, {
8290
+ const error = new Error(message);
8291
+ Object.defineProperties(error, {
8260
8292
  path: { value: path },
8261
8293
  code: { value: code }
8262
8294
  });
8263
- return error$$1;
8295
+ return error;
8264
8296
  }
8265
8297
  function checkPath(path, type) {
8266
8298
  try {
@@ -13691,6 +13723,7 @@ if (global.document) {
13691
13723
  else {
13692
13724
  global.tabris = tabrisMain;
13693
13725
  global.tabris.tabris = tabrisMain;
13726
+ global.JSX = tabrisMain.JSX;
13694
13727
  Object.assign(global, WHATWG, { $ });
13695
13728
  addDOMDocument(global);
13696
13729
  addDOMEventTargetMethods(global);
@@ -13743,7 +13776,10 @@ tabrisMain.on('start', (options) => {
13743
13776
  // @ts-ignore
13744
13777
  global.secureStorage = tabrisMain.secureStorage;
13745
13778
  // @ts-ignore
13746
- global.crypto = tabrisMain.crypto;
13779
+ // Only override crypto if not in Node.js test environment or if it doesn't exist
13780
+ if (typeof process === 'undefined' || !global.crypto) {
13781
+ global.crypto = tabrisMain.crypto;
13782
+ }
13747
13783
  // @ts-ignore
13748
13784
  global.JSX = tabrisMain.JSX;
13749
13785
  if (!global.process) { // Prevent damaging test environment