@breakside/jskit 2023.7.0 → 2023.9.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 (44) hide show
  1. package/Frameworks/DOM.jsframework/Info.json +2 -2
  2. package/Frameworks/DOM.jsframework/io.breakside.JSKit.DOM-bundle.js +2 -2
  3. package/Frameworks/FontKit.jsframework/Info.json +2 -2
  4. package/Frameworks/FontKit.jsframework/io.breakside.JSKit.FontKit-bundle.js +2 -2
  5. package/Frameworks/Foundation.jsframework/Info.json +2 -2
  6. package/Frameworks/Foundation.jsframework/JS/JSNumberFormatter.js +105 -8
  7. package/Frameworks/Foundation.jsframework/io.breakside.JSKit.Foundation-bundle.js +2 -2
  8. package/Frameworks/SecurityKit.jsframework/Info.json +2 -2
  9. package/Frameworks/SecurityKit.jsframework/io.breakside.JSKit.SecurityKit-bundle.js +2 -2
  10. package/Info.json +2 -2
  11. package/Node/io.breakside.jskit-bundle.js +2 -2
  12. package/Root/Frameworks/APIKit/Info.yaml +1 -1
  13. package/Root/Frameworks/APIKitTesting/Info.yaml +1 -1
  14. package/Root/Frameworks/AuthKit/Info.yaml +1 -1
  15. package/Root/Frameworks/CSSOM/Info.yaml +1 -1
  16. package/Root/Frameworks/ChartKit/CHAreaChart.js +2 -0
  17. package/Root/Frameworks/ChartKit/CHLineChart.js +2 -0
  18. package/Root/Frameworks/ChartKit/CHSeriesStyle.js +1 -0
  19. package/Root/Frameworks/ChartKit/CHStackedAreaChart.js +1 -0
  20. package/Root/Frameworks/ChartKit/Info.yaml +1 -1
  21. package/Root/Frameworks/ConferenceKit/Info.yaml +1 -1
  22. package/Root/Frameworks/DBKit/Info.yaml +1 -1
  23. package/Root/Frameworks/DOM/Info.yaml +1 -1
  24. package/Root/Frameworks/Dispatch/Info.yaml +1 -1
  25. package/Root/Frameworks/FontKit/Info.yaml +1 -1
  26. package/Root/Frameworks/Foundation/Info.yaml +1 -1
  27. package/Root/Frameworks/Foundation/JSNumberFormatter.js +105 -8
  28. package/Root/Frameworks/ImageKit/Info.yaml +1 -1
  29. package/Root/Frameworks/MediaKit/Info.yaml +1 -1
  30. package/Root/Frameworks/MediaKitUI/Info.yaml +1 -1
  31. package/Root/Frameworks/NotificationKit/Info.yaml +1 -1
  32. package/Root/Frameworks/PDFKit/Info.yaml +1 -1
  33. package/Root/Frameworks/QRKit/Info.yaml +1 -1
  34. package/Root/Frameworks/SearchKit/Info.yaml +1 -1
  35. package/Root/Frameworks/SecurityKit/Info.yaml +1 -1
  36. package/Root/Frameworks/ServerKit/Info.yaml +1 -1
  37. package/Root/Frameworks/ServerKitTesting/Info.yaml +1 -1
  38. package/Root/Frameworks/TestKit/Info.yaml +1 -1
  39. package/Root/Frameworks/UIKit/Info.yaml +1 -1
  40. package/Root/Frameworks/UIKit/UIAccessibility.js +1 -0
  41. package/Root/Frameworks/UIKit/UIColorPanel.js +4 -0
  42. package/Root/Frameworks/UIKit/UIHTMLWindowServer.js +9 -0
  43. package/Root/Frameworks/UIKitTesting/Info.yaml +1 -1
  44. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "JSBundleType": "framework",
3
3
  "JSBundleIdentifier": "io.breakside.JSKit.DOM",
4
- "JSBundleVersion": "2023.7.0",
4
+ "JSBundleVersion": "2023.9.0",
5
5
  "JSDevelopmentLanguage": "en",
6
6
  "JSCopyright": "Copyright © 2020 Breakside Inc.",
7
7
  "JSBundleEnvironments": {
@@ -9,5 +9,5 @@
9
9
  "node": "DOM+Node.js"
10
10
  },
11
11
  "JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
12
- "GitRevision": "d8b79e9503051e78994d724adf53b786a719d8b4"
12
+ "GitRevision": "f5a30c6a66cf6cf8e98d7a10b27a7e972243b75d"
13
13
  }
@@ -3,7 +3,7 @@ JSBundle.bundles['io.breakside.JSKit.DOM'] = {
3
3
  "Info": {
4
4
  "JSBundleType": "framework",
5
5
  "JSBundleIdentifier": "io.breakside.JSKit.DOM",
6
- "JSBundleVersion": "2023.7.0",
6
+ "JSBundleVersion": "2023.9.0",
7
7
  "JSDevelopmentLanguage": "en",
8
8
  "JSCopyright": "Copyright © 2020 Breakside Inc.",
9
9
  "JSBundleEnvironments": {
@@ -11,7 +11,7 @@ JSBundle.bundles['io.breakside.JSKit.DOM'] = {
11
11
  "node": "DOM+Node.js"
12
12
  },
13
13
  "JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
14
- "GitRevision": "d8b79e9503051e78994d724adf53b786a719d8b4"
14
+ "GitRevision": "f5a30c6a66cf6cf8e98d7a10b27a7e972243b75d"
15
15
  },
16
16
  "Resources": [],
17
17
  "ResourceLookup": {
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "JSBundleType": "framework",
3
3
  "JSBundleIdentifier": "io.breakside.JSKit.FontKit",
4
- "JSBundleVersion": "2023.7.0",
4
+ "JSBundleVersion": "2023.9.0",
5
5
  "JSDevelopmentLanguage": "en",
6
6
  "JSCopyright": "Copyright © 2020 Breakside Inc.",
7
7
  "JSBundleEnvironments": {
8
8
  "html": "FontKit+HTML.js"
9
9
  },
10
10
  "JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
11
- "GitRevision": "d8b79e9503051e78994d724adf53b786a719d8b4"
11
+ "GitRevision": "f5a30c6a66cf6cf8e98d7a10b27a7e972243b75d"
12
12
  }
@@ -3,14 +3,14 @@ JSBundle.bundles['io.breakside.JSKit.FontKit'] = {
3
3
  "Info": {
4
4
  "JSBundleType": "framework",
5
5
  "JSBundleIdentifier": "io.breakside.JSKit.FontKit",
6
- "JSBundleVersion": "2023.7.0",
6
+ "JSBundleVersion": "2023.9.0",
7
7
  "JSDevelopmentLanguage": "en",
8
8
  "JSCopyright": "Copyright © 2020 Breakside Inc.",
9
9
  "JSBundleEnvironments": {
10
10
  "html": "FontKit+HTML.js"
11
11
  },
12
12
  "JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
13
- "GitRevision": "d8b79e9503051e78994d724adf53b786a719d8b4"
13
+ "GitRevision": "f5a30c6a66cf6cf8e98d7a10b27a7e972243b75d"
14
14
  },
15
15
  "Resources": [],
16
16
  "ResourceLookup": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "JSBundleType": "framework",
3
3
  "JSBundleIdentifier": "io.breakside.JSKit.Foundation",
4
- "JSBundleVersion": "2023.7.0",
4
+ "JSBundleVersion": "2023.9.0",
5
5
  "JSDevelopmentLanguage": "en",
6
6
  "JSCopyright": "Copyright © 2020 Breakside Inc.",
7
7
  "JSBundleEnvironments": {
@@ -9,5 +9,5 @@
9
9
  "node": "Foundation+Node.js"
10
10
  },
11
11
  "JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
12
- "GitRevision": "d8b79e9503051e78994d724adf53b786a719d8b4"
12
+ "GitRevision": "f5a30c6a66cf6cf8e98d7a10b27a7e972243b75d"
13
13
  }
@@ -526,23 +526,120 @@ JSClass("JSNumberFormatter", JSObject, {
526
526
  if (this._minimumFractionDigits > 0 || fraction !== 0){
527
527
  fraction *= Math.pow(10, this._maximumFractionDigits);
528
528
  fraction = Math.round(fraction);
529
- var extras = this._maximumFractionDigits - this._minimumFractionDigits;
530
- while (extras > 0 && ((fraction % 10) === 0)){
531
- fraction /= 10;
532
- --extras;
533
- }
534
529
  if (this._minimumFractionDigits > 0 || fraction !== 0){
535
530
  str += ".";
536
531
  var fractionString = fraction.toString();
537
- while (fractionString.length < this._minimumFractionDigits){
538
- fractionString += "0";
532
+ while (fractionString.length < this._maximumFractionDigits){
533
+ fractionString = "0" + fractionString;
534
+ }
535
+ while (fractionString.length > this._minimumFractionDigits && fractionString[fractionString.length - 1] === "0"){
536
+ fractionString = fractionString.substr(0, fractionString.length - 1);
539
537
  }
540
538
  str += fractionString;
541
539
  }
542
540
  }
543
541
  }
544
542
  return prefix + str + suffix;
545
- }
543
+ },
544
+
545
+ numberFromString: function(string){
546
+ var n = 0;
547
+ var f = 0;
548
+ var d = 1;
549
+ var sign = 1;
550
+ var iterator = string.unicodeIterator();
551
+ var i = 0;
552
+ var l = string.length;
553
+ var c;
554
+ var canSeeSign = true;
555
+ var canSeeCurrency = true;
556
+ var canSeeDecimal = true;
557
+ var canSeeInteger = true;
558
+ var canSeeFraction = false;
559
+ var canSeePercent = false;
560
+ var canSeeGroup = false;
561
+ var seenDigit = false;
562
+ var stringMatches = function(substr){
563
+ if (substr.length === 0){
564
+ return false;
565
+ }
566
+ return string.substr(i, substr.length) === substr;
567
+ };
568
+ while (i < l){
569
+ c = string.charCodeAt(i);
570
+ if (c >= 0x30 && c <= 0x39){
571
+ if (canSeeInteger){
572
+ canSeeSign = false;
573
+ canSeeGroup = true;
574
+ canSeePercent = true;
575
+ n *= 10;
576
+ n += (c - 0x30);
577
+ }else if (canSeeFraction){
578
+ f *= 10;
579
+ f += (c - 0x30);
580
+ d *= 10;
581
+ }else{
582
+ return null;
583
+ }
584
+ seenDigit = true;
585
+ ++i;
586
+ }else if (canSeeSign && stringMatches(this.minusSign)){
587
+ sign = -1;
588
+ canSeeSign = false;
589
+ i += this.minusSign.length;
590
+ }else if (canSeeSign && stringMatches(this.plusSign)){
591
+ canSeeSign = false;
592
+ i += this.plusSign.length;
593
+ }else if (canSeeCurrency && stringMatches(this.currencySymbol)){
594
+ canSeeCurrency = false;
595
+ if (seenDigit){
596
+ canSeeInteger = false;
597
+ canSeeDecimal = false;
598
+ canSeeFraction = false;
599
+ }
600
+ i += this.currencySymbol.length;
601
+ }else if (canSeePercent && stringMatches(this.percentSymbol)){
602
+ canSeePercent = false;
603
+ if (seenDigit){
604
+ canSeeInteger = false;
605
+ canSeeDecimal = false;
606
+ canSeeFraction = false;
607
+ }
608
+ i += this.percentSymbol.length;
609
+ }else if (canSeePercent && stringMatches(this.perMilleSymbol)){
610
+ canSeePercent = false;
611
+ if (seenDigit){
612
+ canSeeInteger = false;
613
+ canSeeDecimal = false;
614
+ canSeeFraction = false;
615
+ }
616
+ i += this.perMilleSymbol.length;
617
+ }else if (canSeeDecimal && stringMatches(this.decimalSeparator)){
618
+ canSeeDecimal = false;
619
+ canSeeGroup = false;
620
+ canSeeInteger = false;
621
+ canSeeFraction = true;
622
+ i += this.decimalSeparator.length;
623
+ }else if (canSeeGroup && stringMatches(this.groupingSeparator)){
624
+ i += this.groupingSeparator.length;
625
+ }else if (c == 0x20){
626
+ ++i;
627
+ }else{
628
+ return null;
629
+ }
630
+ }
631
+ if (!seenDigit){
632
+ return null;
633
+ }
634
+ if (f > 0){
635
+ n += f / d;
636
+ }
637
+ n /= this.multiplier;
638
+ if (sign < 0){
639
+ n = -n;
640
+ }
641
+ return n;
642
+ },
546
643
 
547
644
  });
548
645
 
@@ -3,7 +3,7 @@ JSBundle.bundles['io.breakside.JSKit.Foundation'] = {
3
3
  "Info": {
4
4
  "JSBundleType": "framework",
5
5
  "JSBundleIdentifier": "io.breakside.JSKit.Foundation",
6
- "JSBundleVersion": "2023.7.0",
6
+ "JSBundleVersion": "2023.9.0",
7
7
  "JSDevelopmentLanguage": "en",
8
8
  "JSCopyright": "Copyright © 2020 Breakside Inc.",
9
9
  "JSBundleEnvironments": {
@@ -11,7 +11,7 @@ JSBundle.bundles['io.breakside.JSKit.Foundation'] = {
11
11
  "node": "Foundation+Node.js"
12
12
  },
13
13
  "JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
14
- "GitRevision": "d8b79e9503051e78994d724adf53b786a719d8b4"
14
+ "GitRevision": "f5a30c6a66cf6cf8e98d7a10b27a7e972243b75d"
15
15
  },
16
16
  "Resources": [
17
17
  {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "JSBundleType": "framework",
3
3
  "JSBundleIdentifier": "io.breakside.JSKit.SecurityKit",
4
- "JSBundleVersion": "2023.7.0",
4
+ "JSBundleVersion": "2023.9.0",
5
5
  "JSDevelopmentLanguage": "en",
6
6
  "JSCopyright": "Copyright © 2020 Breakside Inc.",
7
7
  "JSBundleEnvironments": {
@@ -9,5 +9,5 @@
9
9
  "node": "SecurityKit+Node.js"
10
10
  },
11
11
  "JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
12
- "GitRevision": "d8b79e9503051e78994d724adf53b786a719d8b4"
12
+ "GitRevision": "f5a30c6a66cf6cf8e98d7a10b27a7e972243b75d"
13
13
  }
@@ -3,7 +3,7 @@ JSBundle.bundles['io.breakside.JSKit.SecurityKit'] = {
3
3
  "Info": {
4
4
  "JSBundleType": "framework",
5
5
  "JSBundleIdentifier": "io.breakside.JSKit.SecurityKit",
6
- "JSBundleVersion": "2023.7.0",
6
+ "JSBundleVersion": "2023.9.0",
7
7
  "JSDevelopmentLanguage": "en",
8
8
  "JSCopyright": "Copyright © 2020 Breakside Inc.",
9
9
  "JSBundleEnvironments": {
@@ -11,7 +11,7 @@ JSBundle.bundles['io.breakside.JSKit.SecurityKit'] = {
11
11
  "node": "SecurityKit+Node.js"
12
12
  },
13
13
  "JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
14
- "GitRevision": "d8b79e9503051e78994d724adf53b786a719d8b4"
14
+ "GitRevision": "f5a30c6a66cf6cf8e98d7a10b27a7e972243b75d"
15
15
  },
16
16
  "Resources": [],
17
17
  "ResourceLookup": {
package/Info.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "JSBundleType": "node",
3
3
  "JSBundleIdentifier": "io.breakside.jskit",
4
- "JSBundleVersion": "2023.7.0",
4
+ "JSBundleVersion": "2023.9.0",
5
5
  "JSExecutableName": "jskit",
6
6
  "NPMOrganization": "breakside",
7
7
  "JSResources": [
8
8
  "Tests/HTMLTestRunner.js",
9
9
  "Tests/NodeTestRunner.js"
10
10
  ],
11
- "GitRevision": "d8b79e9503051e78994d724adf53b786a719d8b4"
11
+ "GitRevision": "f5a30c6a66cf6cf8e98d7a10b27a7e972243b75d"
12
12
  }
@@ -3,14 +3,14 @@ JSBundle.bundles['io.breakside.jskit'] = {
3
3
  "Info": {
4
4
  "JSBundleType": "node",
5
5
  "JSBundleIdentifier": "io.breakside.jskit",
6
- "JSBundleVersion": "2023.7.0",
6
+ "JSBundleVersion": "2023.9.0",
7
7
  "JSExecutableName": "jskit",
8
8
  "NPMOrganization": "breakside",
9
9
  "JSResources": [
10
10
  "Tests/HTMLTestRunner.js",
11
11
  "Tests/NodeTestRunner.js"
12
12
  ],
13
- "GitRevision": "d8b79e9503051e78994d724adf53b786a719d8b4"
13
+ "GitRevision": "f5a30c6a66cf6cf8e98d7a10b27a7e972243b75d"
14
14
  },
15
15
  "Resources": [
16
16
  {
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.APIKit
3
- JSBundleVersion: 2023.7.0
3
+ JSBundleVersion: 2023.9.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSIncludeDirectories:
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.APIKitTesting
3
- JSBundleVersion: 2023.7.0
3
+ JSBundleVersion: 2023.9.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSLicenseNotice: |
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.AuthKit
3
- JSBundleVersion: 2023.7.0
3
+ JSBundleVersion: 2023.9.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSLicenseNotice: |
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.CSSOM
3
- JSBundleVersion: 2023.7.0
3
+ JSBundleVersion: 2023.9.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -56,6 +56,7 @@ JSClass("CHAreaChart", CHCategoryChart, {
56
56
  }
57
57
  context.setLineWidth(series.style.lineWidth);
58
58
  context.setLineCap(series.style.lineCap);
59
+ context.setLineJoin(series.style.lineJoin);
59
60
  if (series.style.lineDashLengths !== null){
60
61
  context.setLineDash(0, series.style.lineDashLengths);
61
62
  }
@@ -164,6 +165,7 @@ JSClass("CHAreaChart", CHCategoryChart, {
164
165
  }
165
166
  context.setLineWidth(series.style.lineWidth);
166
167
  context.setLineCap(series.style.lineCap);
168
+ context.setLineJoin(series.style.lineJoin);
167
169
  if (series.style.lineDashLengths !== null){
168
170
  context.setLineDash(0, series.style.lineDashLengths);
169
171
  }
@@ -47,6 +47,7 @@ JSClass("CHLineChart", CHCategoryChart, {
47
47
  context.setStrokeColor(series.style.color);
48
48
  context.setLineWidth(series.style.lineWidth);
49
49
  context.setLineCap(series.style.lineCap);
50
+ context.setLineJoin(series.style.lineJoin);
50
51
  if (series.style.lineDashLengths !== null){
51
52
  context.setLineDash(0, series.style.lineDashLengths);
52
53
  }
@@ -117,6 +118,7 @@ JSClass("CHLineChart", CHCategoryChart, {
117
118
  context.setStrokeColor(series.style.color);
118
119
  context.setLineWidth(series.style.lineWidth);
119
120
  context.setLineCap(series.style.lineCap);
121
+ context.setLineJoin(series.style.lineJoin);
120
122
  if (series.style.lineDashLengths !== null){
121
123
  context.setLineDash(0, series.style.lineDashLengths);
122
124
  }
@@ -146,6 +146,7 @@ JSClass("CHSeriesLineStyle", CHSeriesStyle, {
146
146
  lineWidth: 4,
147
147
  lineDashLengths: null,
148
148
  lineCap: JSContext.LineCap.butt,
149
+ lineJoin: JSContext.LineJoin.miter,
149
150
  symbolPath: null,
150
151
  symbolFillColor: null,
151
152
  symbolStrokeColor: null,
@@ -108,6 +108,7 @@ JSClass("CHStackedAreaChart", CHAreaChart, {
108
108
  }
109
109
  context.setLineWidth(series.style.lineWidth);
110
110
  context.setLineCap(series.style.lineCap);
111
+ context.setLineJoin(series.style.lineJoin);
111
112
  if (series.style.lineDashLengths !== null){
112
113
  context.setLineDash(0, series.style.lineDashLengths);
113
114
  }
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.ChartKit
3
- JSBundleVersion: 2023.7.0
3
+ JSBundleVersion: 2023.9.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2021 Breakside Inc.
6
6
  # JSBundleEnvironments:
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.ConferenceKit
3
- JSBundleVersion: 2023.7.0
3
+ JSBundleVersion: 2023.9.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.DBKit
3
- JSBundleVersion: 2023.7.0
3
+ JSBundleVersion: 2023.9.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.DOM
3
- JSBundleVersion: 2023.7.0
3
+ JSBundleVersion: 2023.9.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.Dispatch
3
- JSBundleVersion: 2023.7.0
3
+ JSBundleVersion: 2023.9.0
4
4
  JSCopyright: Copyright © 2020 Breakside Inc.
5
5
  JSBundleEnvironments:
6
6
  html: Dispatch+HTML.js
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.FontKit
3
- JSBundleVersion: 2023.7.0
3
+ JSBundleVersion: 2023.9.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.Foundation
3
- JSBundleVersion: 2023.7.0
3
+ JSBundleVersion: 2023.9.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -526,23 +526,120 @@ JSClass("JSNumberFormatter", JSObject, {
526
526
  if (this._minimumFractionDigits > 0 || fraction !== 0){
527
527
  fraction *= Math.pow(10, this._maximumFractionDigits);
528
528
  fraction = Math.round(fraction);
529
- var extras = this._maximumFractionDigits - this._minimumFractionDigits;
530
- while (extras > 0 && ((fraction % 10) === 0)){
531
- fraction /= 10;
532
- --extras;
533
- }
534
529
  if (this._minimumFractionDigits > 0 || fraction !== 0){
535
530
  str += ".";
536
531
  var fractionString = fraction.toString();
537
- while (fractionString.length < this._minimumFractionDigits){
538
- fractionString += "0";
532
+ while (fractionString.length < this._maximumFractionDigits){
533
+ fractionString = "0" + fractionString;
534
+ }
535
+ while (fractionString.length > this._minimumFractionDigits && fractionString[fractionString.length - 1] === "0"){
536
+ fractionString = fractionString.substr(0, fractionString.length - 1);
539
537
  }
540
538
  str += fractionString;
541
539
  }
542
540
  }
543
541
  }
544
542
  return prefix + str + suffix;
545
- }
543
+ },
544
+
545
+ numberFromString: function(string){
546
+ var n = 0;
547
+ var f = 0;
548
+ var d = 1;
549
+ var sign = 1;
550
+ var iterator = string.unicodeIterator();
551
+ var i = 0;
552
+ var l = string.length;
553
+ var c;
554
+ var canSeeSign = true;
555
+ var canSeeCurrency = true;
556
+ var canSeeDecimal = true;
557
+ var canSeeInteger = true;
558
+ var canSeeFraction = false;
559
+ var canSeePercent = false;
560
+ var canSeeGroup = false;
561
+ var seenDigit = false;
562
+ var stringMatches = function(substr){
563
+ if (substr.length === 0){
564
+ return false;
565
+ }
566
+ return string.substr(i, substr.length) === substr;
567
+ };
568
+ while (i < l){
569
+ c = string.charCodeAt(i);
570
+ if (c >= 0x30 && c <= 0x39){
571
+ if (canSeeInteger){
572
+ canSeeSign = false;
573
+ canSeeGroup = true;
574
+ canSeePercent = true;
575
+ n *= 10;
576
+ n += (c - 0x30);
577
+ }else if (canSeeFraction){
578
+ f *= 10;
579
+ f += (c - 0x30);
580
+ d *= 10;
581
+ }else{
582
+ return null;
583
+ }
584
+ seenDigit = true;
585
+ ++i;
586
+ }else if (canSeeSign && stringMatches(this.minusSign)){
587
+ sign = -1;
588
+ canSeeSign = false;
589
+ i += this.minusSign.length;
590
+ }else if (canSeeSign && stringMatches(this.plusSign)){
591
+ canSeeSign = false;
592
+ i += this.plusSign.length;
593
+ }else if (canSeeCurrency && stringMatches(this.currencySymbol)){
594
+ canSeeCurrency = false;
595
+ if (seenDigit){
596
+ canSeeInteger = false;
597
+ canSeeDecimal = false;
598
+ canSeeFraction = false;
599
+ }
600
+ i += this.currencySymbol.length;
601
+ }else if (canSeePercent && stringMatches(this.percentSymbol)){
602
+ canSeePercent = false;
603
+ if (seenDigit){
604
+ canSeeInteger = false;
605
+ canSeeDecimal = false;
606
+ canSeeFraction = false;
607
+ }
608
+ i += this.percentSymbol.length;
609
+ }else if (canSeePercent && stringMatches(this.perMilleSymbol)){
610
+ canSeePercent = false;
611
+ if (seenDigit){
612
+ canSeeInteger = false;
613
+ canSeeDecimal = false;
614
+ canSeeFraction = false;
615
+ }
616
+ i += this.perMilleSymbol.length;
617
+ }else if (canSeeDecimal && stringMatches(this.decimalSeparator)){
618
+ canSeeDecimal = false;
619
+ canSeeGroup = false;
620
+ canSeeInteger = false;
621
+ canSeeFraction = true;
622
+ i += this.decimalSeparator.length;
623
+ }else if (canSeeGroup && stringMatches(this.groupingSeparator)){
624
+ i += this.groupingSeparator.length;
625
+ }else if (c == 0x20){
626
+ ++i;
627
+ }else{
628
+ return null;
629
+ }
630
+ }
631
+ if (!seenDigit){
632
+ return null;
633
+ }
634
+ if (f > 0){
635
+ n += f / d;
636
+ }
637
+ n /= this.multiplier;
638
+ if (sign < 0){
639
+ n = -n;
640
+ }
641
+ return n;
642
+ },
546
643
 
547
644
  });
548
645
 
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.ImageKit
3
- JSBundleVersion: 2023.7.0
3
+ JSBundleVersion: 2023.9.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.MediaKit
3
- JSBundleVersion: 2023.7.0
3
+ JSBundleVersion: 2023.9.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.MediaKitUI
3
- JSBundleVersion: 2023.7.0
3
+ JSBundleVersion: 2023.9.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.NotificationKit
3
- JSBundleVersion: 2023.7.0
3
+ JSBundleVersion: 2023.9.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2021 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.PDFKit
3
- JSBundleVersion: 2023.7.0
3
+ JSBundleVersion: 2023.9.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSLicenseNotice: |
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.QRKit
3
- JSBundleVersion: 2023.7.0
3
+ JSBundleVersion: 2023.9.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSLicenseNotice: |
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.SearchKit
3
- JSBundleVersion: 2023.7.0
3
+ JSBundleVersion: 2023.9.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSLicenseNotice: |
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.SecurityKit
3
- JSBundleVersion: 2023.7.0
3
+ JSBundleVersion: 2023.9.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.ServerKit
3
- JSBundleVersion: 2023.7.0
3
+ JSBundleVersion: 2023.9.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.ServerKitTesting
3
- JSBundleVersion: 2023.7.0
3
+ JSBundleVersion: 2023.9.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSLicenseNotice: |
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.TestKit
3
- JSBundleVersion: 2023.7.0
3
+ JSBundleVersion: 2023.9.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSLicenseNotice: |
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.UIKit
3
- JSBundleVersion: 2023.7.0
3
+ JSBundleVersion: 2023.9.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSBundleEnvironments:
@@ -229,6 +229,7 @@ UIAccessibility.Notification = {
229
229
  keyWindowChanged: "UIAccessibility.Notification.keyWindowChanged",
230
230
  mainWindowChanged: "UIAccessibility.Notification.mainWindowChanged",
231
231
  rowCountChanged: "UIAccessibility.Notification.rowCountChanged",
232
+ columnCountChanged: "UIAccessibility.Notification.columnCountChanged",
232
233
  rowExpanded: "UIAccessibility.Notification.rowExpanded",
233
234
  rowCollapsed: "UIAccessibility.Notification.rowCollapsed",
234
235
  selectedChildrenChanged: "UIAccessibility.Notification.selectedChildrenChanged",
@@ -187,6 +187,10 @@ JSClass("UIColorPanelViewController", UIViewController, {
187
187
  this.component2Field = UITextField.initWithStyler(componentStyler);
188
188
  this.component3Field = UITextField.initWithStyler(componentStyler);
189
189
  this.component4Field = UITextField.initWithStyler(componentStyler);
190
+ this.component1Field.keyboardType = UITextInput.KeyboardType.number;
191
+ this.component2Field.keyboardType = UITextInput.KeyboardType.number;
192
+ this.component3Field.keyboardType = UITextInput.KeyboardType.number;
193
+ this.component4Field.keyboardType = UITextInput.KeyboardType.number;
190
194
  this.hexLabel = UILabel.init();
191
195
  this.component1Label = UILabel.init();
192
196
  this.component2Label = UILabel.init();
@@ -928,6 +928,7 @@ JSClass("UIHTMLWindowServer", UIWindowServer, {
928
928
  this.accessibilityObservers.selectedChildrenChanged = this.accessibilityNotificationCenter.addObserver(UIAccessibility.Notification.selectedChildrenChanged, null, this.handleAccessibilitySelectedChildrenChanged, this);
929
929
  this.accessibilityObservers.firstResponderChanged = this.accessibilityNotificationCenter.addObserver(UIAccessibility.Notification.firstResponderChanged, null, this.handleAccessibilityFirstResponderChanged, this);
930
930
  this.accessibilityObservers.rowCountChanged = this.accessibilityNotificationCenter.addObserver(UIAccessibility.Notification.rowCountChanged, null, this.handleAccessibilityRowCountChanged, this);
931
+ this.accessibilityObservers.columnCountChanged = this.accessibilityNotificationCenter.addObserver(UIAccessibility.Notification.columnCountChanged, null, this.handleAccessibilityColumnCountChanged, this);
931
932
  this.accessibilityObservers.rowExpanded = this.accessibilityNotificationCenter.addObserver(UIAccessibility.Notification.rowExpanded, null, this.handleAccessibilityRowExpanded, this);
932
933
  this.accessibilityObservers.rowCollapsed = this.accessibilityNotificationCenter.addObserver(UIAccessibility.Notification.rowCollapsed, null, this.handleAccessibilityRowCollapsed, this);
933
934
  },
@@ -1045,6 +1046,14 @@ JSClass("UIHTMLWindowServer", UIWindowServer, {
1045
1046
  }
1046
1047
  },
1047
1048
 
1049
+ handleAccessibilityColumnCountChanged: function(notification){
1050
+ var element = notification.sender;
1051
+ var context = this.contextForAccessibilityElement(element);
1052
+ if (context !== null){
1053
+ context.updateAccessibilityColumnCount(element);
1054
+ }
1055
+ },
1056
+
1048
1057
  handleAccessibilityFirstResponderChanged: function(notification){
1049
1058
  var window = notification.sender;
1050
1059
  var responder = window.firstResponder || window;
@@ -1,6 +1,6 @@
1
1
  JSBundleType: framework
2
2
  JSBundleIdentifier: io.breakside.JSKit.UIKitTesting
3
- JSBundleVersion: 2023.7.0
3
+ JSBundleVersion: 2023.9.0
4
4
  JSDevelopmentLanguage: en
5
5
  JSCopyright: Copyright © 2020 Breakside Inc.
6
6
  JSLicenseNotice: |
package/package.json CHANGED
@@ -9,7 +9,7 @@
9
9
  "node": ">=10.10.0"
10
10
  },
11
11
  "name": "@breakside/jskit",
12
- "version": "2023.7.0",
12
+ "version": "2023.9.0",
13
13
  "license": "SEE LICENSE IN LICENSE.txt",
14
14
  "files": [
15
15
  "*"