@limetech/lime-elements 40.11.3 → 40.12.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.
@@ -3616,70 +3616,24 @@ export namespace Components {
3616
3616
  }
3617
3617
  /**
3618
3618
  * A resizable panel that is displayed on top of the right side of the page.
3619
- * The content is placed in the default slot, below a toolbar and a header.
3620
- * The panel is positioned relative to its nearest positioned ancestor. Set
3621
- * `position: relative` on that element. Use `--side-panel-top-inset`,
3622
- * `--side-panel-right-inset` and `--side-panel-bottom-inset` to keep parts of
3623
- * that element visible, for example a header.
3624
- * The CSS custom properties can be set on the panel or on any ancestor.
3625
- * The panel is a dialog that does not block the rest of the page. Set `label`
3626
- * to give it an accessible name, which screen readers announce. When the panel
3627
- * opens, focus moves into it. When the panel is removed, focus returns to the
3628
- * element that had it before, unless focus is somewhere else by then.
3629
- * The panel emits `close` when the user clicks the close button, or presses
3630
- * Escape. It does not remove itself. The consumer must remove it from the DOM.
3631
- * The user can resize the panel by dragging its left edge, or with the arrow
3632
- * keys. The panel emits `changeWidth` when a resize is finished.
3633
- * See the examples for how closing and resizing work in detail.
3634
- * ## Header
3635
- * The header shows the heading, subheading and icon of the last entry in
3636
- * `stack`. When the entry has a `color`, the header gets that background color,
3637
- * and the headings are white with a text shadow. When `stack` is empty, the
3638
- * panel has no header.
3639
- * Put controls for the header, for example a follow button or a menu, in the
3640
- * `header-actions` slot. They are shown at the right end of the header. When
3641
- * `stack` is empty, there is no header, and the slot content is not shown.
3642
- * The slot is for small controls. It is at most half as wide as the header,
3643
- * and at most as tall as the heading and subheading together. Larger content
3644
- * is cut off, so that the header keeps its size.
3645
- * The slot content is not tied to an entry in `stack`. When the last entry
3646
- * changes, the consumer must also change the slot content.
3647
- * The slot content keeps its own colors. Use `--side-panel-header-text-color`
3648
- * to match the text color of the header. It is white when the header has a
3649
- * `color`. It can also be used as the `color` of an `Icon`.
3650
- * ## Actions
3651
- * The toolbar has a close button on the left. Other buttons are set with
3652
- * `actions`, and are shown on the right. The `type` of an action decides its
3653
- * icon. When the user clicks an action, the panel emits `selectAction` with the
3654
- * `id` of the action and the click event. The consumer decides what the action
3655
- * does.
3656
- * An action with an `href` is a link, so the user can open it in a new tab.
3657
- * To handle the navigation in another way, for example with the router of the
3658
- * application, call `preventDefault` on the click event in `selectAction`. Do
3659
- * this only for a plain click with the primary button. Let the browser handle
3660
- * all other clicks, so that Ctrl-click and Cmd-click still open the link in a
3661
- * new tab:
3662
- * ```ts
3663
- * function handleSelectAction(event: CustomEvent<SidePanelActionSelect>) {
3664
- * const click = event.detail.event;
3665
- * const isPlainClick =
3666
- * click.button === 0 &&
3667
- * !click.metaKey &&
3668
- * !click.ctrlKey &&
3669
- * !click.shiftKey &&
3670
- * !click.altKey;
3671
- * if (!isPlainClick) {
3672
- * return;
3673
- * }
3674
- * click.preventDefault();
3675
- * router.navigate(event.detail.id);
3676
- * }
3677
- * ```
3619
+ * It does not block the rest of the page. Place it in an element with
3620
+ * `position: relative`.
3621
+ * The panel has:
3622
+ * - a toolbar with a close button, and buttons from `actions`
3623
+ * - a header that shows the last entry of `stack`, with a slot for controls
3624
+ * - backs behind its left edge, for the other entries of `stack`
3625
+ * - a handle on its left edge, to resize the panel
3626
+ * - a full screen mode, for small screens
3627
+ * The panel emits `close`, but does not remove itself. The consumer must
3628
+ * remove it from the DOM.
3629
+ * Each example shows one feature in detail, and when to use it.
3678
3630
  * @exampleComponent limel-example-side-panel-basic
3679
3631
  * @exampleComponent limel-example-side-panel-insets
3680
3632
  * @exampleComponent limel-example-side-panel-escape
3681
3633
  * @exampleComponent limel-example-side-panel-actions
3682
3634
  * @exampleComponent limel-example-side-panel-header-actions
3635
+ * @exampleComponent limel-example-side-panel-stacking
3636
+ * @exampleComponent limel-example-side-panel-full-screen
3683
3637
  * @private
3684
3638
  */
3685
3639
  interface LimelSidePanel {
@@ -3698,6 +3652,11 @@ export namespace Components {
3698
3652
  * @default true
3699
3653
  */
3700
3654
  "closeOnEscape": boolean;
3655
+ /**
3656
+ * Set to `true` when the screen is too narrow for the panel to be displayed on top of the page. The panel then covers the full width of the positioned ancestor. It cannot be resized, and the backs of the stack are not shown.
3657
+ * @default false
3658
+ */
3659
+ "fullScreen": boolean;
3701
3660
  /**
3702
3661
  * Accessible name of the panel. Screen readers announce it. Set it to something that tells the user what the panel is for.
3703
3662
  */
@@ -3708,7 +3667,7 @@ export namespace Components {
3708
3667
  */
3709
3668
  "resizeLabel": string;
3710
3669
  /**
3711
- * The panels in the stack, outermost first. The last entry is the panel that is displayed. Its heading, subheading and icon are shown in the header.
3670
+ * The panels in the stack, outermost first. The last entry is the panel that is displayed. Its heading, subheading and icon are shown in the header. The other entries are shown as backs behind the panel.
3712
3671
  * @default []
3713
3672
  */
3714
3673
  "stack": SidePanelEntry[];
@@ -6664,73 +6623,28 @@ declare global {
6664
6623
  "close": void;
6665
6624
  "selectAction": SidePanelActionSelect;
6666
6625
  "changeWidth": number;
6626
+ "selectStackEntry": number;
6667
6627
  }
6668
6628
  /**
6669
6629
  * A resizable panel that is displayed on top of the right side of the page.
6670
- * The content is placed in the default slot, below a toolbar and a header.
6671
- * The panel is positioned relative to its nearest positioned ancestor. Set
6672
- * `position: relative` on that element. Use `--side-panel-top-inset`,
6673
- * `--side-panel-right-inset` and `--side-panel-bottom-inset` to keep parts of
6674
- * that element visible, for example a header.
6675
- * The CSS custom properties can be set on the panel or on any ancestor.
6676
- * The panel is a dialog that does not block the rest of the page. Set `label`
6677
- * to give it an accessible name, which screen readers announce. When the panel
6678
- * opens, focus moves into it. When the panel is removed, focus returns to the
6679
- * element that had it before, unless focus is somewhere else by then.
6680
- * The panel emits `close` when the user clicks the close button, or presses
6681
- * Escape. It does not remove itself. The consumer must remove it from the DOM.
6682
- * The user can resize the panel by dragging its left edge, or with the arrow
6683
- * keys. The panel emits `changeWidth` when a resize is finished.
6684
- * See the examples for how closing and resizing work in detail.
6685
- * ## Header
6686
- * The header shows the heading, subheading and icon of the last entry in
6687
- * `stack`. When the entry has a `color`, the header gets that background color,
6688
- * and the headings are white with a text shadow. When `stack` is empty, the
6689
- * panel has no header.
6690
- * Put controls for the header, for example a follow button or a menu, in the
6691
- * `header-actions` slot. They are shown at the right end of the header. When
6692
- * `stack` is empty, there is no header, and the slot content is not shown.
6693
- * The slot is for small controls. It is at most half as wide as the header,
6694
- * and at most as tall as the heading and subheading together. Larger content
6695
- * is cut off, so that the header keeps its size.
6696
- * The slot content is not tied to an entry in `stack`. When the last entry
6697
- * changes, the consumer must also change the slot content.
6698
- * The slot content keeps its own colors. Use `--side-panel-header-text-color`
6699
- * to match the text color of the header. It is white when the header has a
6700
- * `color`. It can also be used as the `color` of an `Icon`.
6701
- * ## Actions
6702
- * The toolbar has a close button on the left. Other buttons are set with
6703
- * `actions`, and are shown on the right. The `type` of an action decides its
6704
- * icon. When the user clicks an action, the panel emits `selectAction` with the
6705
- * `id` of the action and the click event. The consumer decides what the action
6706
- * does.
6707
- * An action with an `href` is a link, so the user can open it in a new tab.
6708
- * To handle the navigation in another way, for example with the router of the
6709
- * application, call `preventDefault` on the click event in `selectAction`. Do
6710
- * this only for a plain click with the primary button. Let the browser handle
6711
- * all other clicks, so that Ctrl-click and Cmd-click still open the link in a
6712
- * new tab:
6713
- * ```ts
6714
- * function handleSelectAction(event: CustomEvent<SidePanelActionSelect>) {
6715
- * const click = event.detail.event;
6716
- * const isPlainClick =
6717
- * click.button === 0 &&
6718
- * !click.metaKey &&
6719
- * !click.ctrlKey &&
6720
- * !click.shiftKey &&
6721
- * !click.altKey;
6722
- * if (!isPlainClick) {
6723
- * return;
6724
- * }
6725
- * click.preventDefault();
6726
- * router.navigate(event.detail.id);
6727
- * }
6728
- * ```
6630
+ * It does not block the rest of the page. Place it in an element with
6631
+ * `position: relative`.
6632
+ * The panel has:
6633
+ * - a toolbar with a close button, and buttons from `actions`
6634
+ * - a header that shows the last entry of `stack`, with a slot for controls
6635
+ * - backs behind its left edge, for the other entries of `stack`
6636
+ * - a handle on its left edge, to resize the panel
6637
+ * - a full screen mode, for small screens
6638
+ * The panel emits `close`, but does not remove itself. The consumer must
6639
+ * remove it from the DOM.
6640
+ * Each example shows one feature in detail, and when to use it.
6729
6641
  * @exampleComponent limel-example-side-panel-basic
6730
6642
  * @exampleComponent limel-example-side-panel-insets
6731
6643
  * @exampleComponent limel-example-side-panel-escape
6732
6644
  * @exampleComponent limel-example-side-panel-actions
6733
6645
  * @exampleComponent limel-example-side-panel-header-actions
6646
+ * @exampleComponent limel-example-side-panel-stacking
6647
+ * @exampleComponent limel-example-side-panel-full-screen
6734
6648
  * @private
6735
6649
  */
6736
6650
  interface HTMLLimelSidePanelElement extends Components.LimelSidePanel, HTMLStencilElement {
@@ -10946,70 +10860,24 @@ declare namespace LocalJSX {
10946
10860
  }
10947
10861
  /**
10948
10862
  * A resizable panel that is displayed on top of the right side of the page.
10949
- * The content is placed in the default slot, below a toolbar and a header.
10950
- * The panel is positioned relative to its nearest positioned ancestor. Set
10951
- * `position: relative` on that element. Use `--side-panel-top-inset`,
10952
- * `--side-panel-right-inset` and `--side-panel-bottom-inset` to keep parts of
10953
- * that element visible, for example a header.
10954
- * The CSS custom properties can be set on the panel or on any ancestor.
10955
- * The panel is a dialog that does not block the rest of the page. Set `label`
10956
- * to give it an accessible name, which screen readers announce. When the panel
10957
- * opens, focus moves into it. When the panel is removed, focus returns to the
10958
- * element that had it before, unless focus is somewhere else by then.
10959
- * The panel emits `close` when the user clicks the close button, or presses
10960
- * Escape. It does not remove itself. The consumer must remove it from the DOM.
10961
- * The user can resize the panel by dragging its left edge, or with the arrow
10962
- * keys. The panel emits `changeWidth` when a resize is finished.
10963
- * See the examples for how closing and resizing work in detail.
10964
- * ## Header
10965
- * The header shows the heading, subheading and icon of the last entry in
10966
- * `stack`. When the entry has a `color`, the header gets that background color,
10967
- * and the headings are white with a text shadow. When `stack` is empty, the
10968
- * panel has no header.
10969
- * Put controls for the header, for example a follow button or a menu, in the
10970
- * `header-actions` slot. They are shown at the right end of the header. When
10971
- * `stack` is empty, there is no header, and the slot content is not shown.
10972
- * The slot is for small controls. It is at most half as wide as the header,
10973
- * and at most as tall as the heading and subheading together. Larger content
10974
- * is cut off, so that the header keeps its size.
10975
- * The slot content is not tied to an entry in `stack`. When the last entry
10976
- * changes, the consumer must also change the slot content.
10977
- * The slot content keeps its own colors. Use `--side-panel-header-text-color`
10978
- * to match the text color of the header. It is white when the header has a
10979
- * `color`. It can also be used as the `color` of an `Icon`.
10980
- * ## Actions
10981
- * The toolbar has a close button on the left. Other buttons are set with
10982
- * `actions`, and are shown on the right. The `type` of an action decides its
10983
- * icon. When the user clicks an action, the panel emits `selectAction` with the
10984
- * `id` of the action and the click event. The consumer decides what the action
10985
- * does.
10986
- * An action with an `href` is a link, so the user can open it in a new tab.
10987
- * To handle the navigation in another way, for example with the router of the
10988
- * application, call `preventDefault` on the click event in `selectAction`. Do
10989
- * this only for a plain click with the primary button. Let the browser handle
10990
- * all other clicks, so that Ctrl-click and Cmd-click still open the link in a
10991
- * new tab:
10992
- * ```ts
10993
- * function handleSelectAction(event: CustomEvent<SidePanelActionSelect>) {
10994
- * const click = event.detail.event;
10995
- * const isPlainClick =
10996
- * click.button === 0 &&
10997
- * !click.metaKey &&
10998
- * !click.ctrlKey &&
10999
- * !click.shiftKey &&
11000
- * !click.altKey;
11001
- * if (!isPlainClick) {
11002
- * return;
11003
- * }
11004
- * click.preventDefault();
11005
- * router.navigate(event.detail.id);
11006
- * }
11007
- * ```
10863
+ * It does not block the rest of the page. Place it in an element with
10864
+ * `position: relative`.
10865
+ * The panel has:
10866
+ * - a toolbar with a close button, and buttons from `actions`
10867
+ * - a header that shows the last entry of `stack`, with a slot for controls
10868
+ * - backs behind its left edge, for the other entries of `stack`
10869
+ * - a handle on its left edge, to resize the panel
10870
+ * - a full screen mode, for small screens
10871
+ * The panel emits `close`, but does not remove itself. The consumer must
10872
+ * remove it from the DOM.
10873
+ * Each example shows one feature in detail, and when to use it.
11008
10874
  * @exampleComponent limel-example-side-panel-basic
11009
10875
  * @exampleComponent limel-example-side-panel-insets
11010
10876
  * @exampleComponent limel-example-side-panel-escape
11011
10877
  * @exampleComponent limel-example-side-panel-actions
11012
10878
  * @exampleComponent limel-example-side-panel-header-actions
10879
+ * @exampleComponent limel-example-side-panel-stacking
10880
+ * @exampleComponent limel-example-side-panel-full-screen
11013
10881
  * @private
11014
10882
  */
11015
10883
  interface LimelSidePanel {
@@ -11028,6 +10896,11 @@ declare namespace LocalJSX {
11028
10896
  * @default true
11029
10897
  */
11030
10898
  "closeOnEscape"?: boolean;
10899
+ /**
10900
+ * Set to `true` when the screen is too narrow for the panel to be displayed on top of the page. The panel then covers the full width of the positioned ancestor. It cannot be resized, and the backs of the stack are not shown.
10901
+ * @default false
10902
+ */
10903
+ "fullScreen"?: boolean;
11031
10904
  /**
11032
10905
  * Accessible name of the panel. Screen readers announce it. Set it to something that tells the user what the panel is for.
11033
10906
  */
@@ -11044,13 +10917,17 @@ declare namespace LocalJSX {
11044
10917
  * Emitted when an action in the toolbar is clicked. The detail has the `id` of the action, or its `type` if it has no `id`, and the click event.
11045
10918
  */
11046
10919
  "onSelectAction"?: (event: LimelSidePanelCustomEvent<SidePanelActionSelect>) => void;
10920
+ /**
10921
+ * Emitted when a back of the stack is clicked. The detail is the index of its entry in `stack`.
10922
+ */
10923
+ "onSelectStackEntry"?: (event: LimelSidePanelCustomEvent<number>) => void;
11047
10924
  /**
11048
10925
  * Label of the resize handle. Used as the accessible name.
11049
10926
  * @default 'Resize'
11050
10927
  */
11051
10928
  "resizeLabel"?: string;
11052
10929
  /**
11053
- * The panels in the stack, outermost first. The last entry is the panel that is displayed. Its heading, subheading and icon are shown in the header.
10930
+ * The panels in the stack, outermost first. The last entry is the panel that is displayed. Its heading, subheading and icon are shown in the header. The other entries are shown as backs behind the panel.
11054
10931
  * @default []
11055
10932
  */
11056
10933
  "stack"?: SidePanelEntry[];
@@ -12335,6 +12212,7 @@ declare namespace LocalJSX {
12335
12212
  "closeLabel": string;
12336
12213
  "resizeLabel": string;
12337
12214
  "closeOnEscape": boolean;
12215
+ "fullScreen": boolean;
12338
12216
  }
12339
12217
  interface LimelSliderAttributes {
12340
12218
  "disabled": boolean;
@@ -13789,70 +13667,24 @@ declare module "@stencil/core" {
13789
13667
  "limel-shortcut": LocalJSX.IntrinsicElements["limel-shortcut"] & JSXBase.HTMLAttributes<HTMLLimelShortcutElement>;
13790
13668
  /**
13791
13669
  * A resizable panel that is displayed on top of the right side of the page.
13792
- * The content is placed in the default slot, below a toolbar and a header.
13793
- * The panel is positioned relative to its nearest positioned ancestor. Set
13794
- * `position: relative` on that element. Use `--side-panel-top-inset`,
13795
- * `--side-panel-right-inset` and `--side-panel-bottom-inset` to keep parts of
13796
- * that element visible, for example a header.
13797
- * The CSS custom properties can be set on the panel or on any ancestor.
13798
- * The panel is a dialog that does not block the rest of the page. Set `label`
13799
- * to give it an accessible name, which screen readers announce. When the panel
13800
- * opens, focus moves into it. When the panel is removed, focus returns to the
13801
- * element that had it before, unless focus is somewhere else by then.
13802
- * The panel emits `close` when the user clicks the close button, or presses
13803
- * Escape. It does not remove itself. The consumer must remove it from the DOM.
13804
- * The user can resize the panel by dragging its left edge, or with the arrow
13805
- * keys. The panel emits `changeWidth` when a resize is finished.
13806
- * See the examples for how closing and resizing work in detail.
13807
- * ## Header
13808
- * The header shows the heading, subheading and icon of the last entry in
13809
- * `stack`. When the entry has a `color`, the header gets that background color,
13810
- * and the headings are white with a text shadow. When `stack` is empty, the
13811
- * panel has no header.
13812
- * Put controls for the header, for example a follow button or a menu, in the
13813
- * `header-actions` slot. They are shown at the right end of the header. When
13814
- * `stack` is empty, there is no header, and the slot content is not shown.
13815
- * The slot is for small controls. It is at most half as wide as the header,
13816
- * and at most as tall as the heading and subheading together. Larger content
13817
- * is cut off, so that the header keeps its size.
13818
- * The slot content is not tied to an entry in `stack`. When the last entry
13819
- * changes, the consumer must also change the slot content.
13820
- * The slot content keeps its own colors. Use `--side-panel-header-text-color`
13821
- * to match the text color of the header. It is white when the header has a
13822
- * `color`. It can also be used as the `color` of an `Icon`.
13823
- * ## Actions
13824
- * The toolbar has a close button on the left. Other buttons are set with
13825
- * `actions`, and are shown on the right. The `type` of an action decides its
13826
- * icon. When the user clicks an action, the panel emits `selectAction` with the
13827
- * `id` of the action and the click event. The consumer decides what the action
13828
- * does.
13829
- * An action with an `href` is a link, so the user can open it in a new tab.
13830
- * To handle the navigation in another way, for example with the router of the
13831
- * application, call `preventDefault` on the click event in `selectAction`. Do
13832
- * this only for a plain click with the primary button. Let the browser handle
13833
- * all other clicks, so that Ctrl-click and Cmd-click still open the link in a
13834
- * new tab:
13835
- * ```ts
13836
- * function handleSelectAction(event: CustomEvent<SidePanelActionSelect>) {
13837
- * const click = event.detail.event;
13838
- * const isPlainClick =
13839
- * click.button === 0 &&
13840
- * !click.metaKey &&
13841
- * !click.ctrlKey &&
13842
- * !click.shiftKey &&
13843
- * !click.altKey;
13844
- * if (!isPlainClick) {
13845
- * return;
13846
- * }
13847
- * click.preventDefault();
13848
- * router.navigate(event.detail.id);
13849
- * }
13850
- * ```
13670
+ * It does not block the rest of the page. Place it in an element with
13671
+ * `position: relative`.
13672
+ * The panel has:
13673
+ * - a toolbar with a close button, and buttons from `actions`
13674
+ * - a header that shows the last entry of `stack`, with a slot for controls
13675
+ * - backs behind its left edge, for the other entries of `stack`
13676
+ * - a handle on its left edge, to resize the panel
13677
+ * - a full screen mode, for small screens
13678
+ * The panel emits `close`, but does not remove itself. The consumer must
13679
+ * remove it from the DOM.
13680
+ * Each example shows one feature in detail, and when to use it.
13851
13681
  * @exampleComponent limel-example-side-panel-basic
13852
13682
  * @exampleComponent limel-example-side-panel-insets
13853
13683
  * @exampleComponent limel-example-side-panel-escape
13854
13684
  * @exampleComponent limel-example-side-panel-actions
13855
13685
  * @exampleComponent limel-example-side-panel-header-actions
13686
+ * @exampleComponent limel-example-side-panel-stacking
13687
+ * @exampleComponent limel-example-side-panel-full-screen
13856
13688
  * @private
13857
13689
  */
13858
13690
  "limel-side-panel": LocalJSX.IntrinsicElements["limel-side-panel"] & JSXBase.HTMLAttributes<HTMLLimelSidePanelElement>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@limetech/lime-elements",
3
- "version": "40.11.3",
3
+ "version": "40.12.0",
4
4
  "description": "Lime Elements",
5
5
  "author": "Lime Technologies",
6
6
  "license": "Apache-2.0",
@@ -56,14 +56,14 @@
56
56
  "@commitlint/config-conventional": "^21.2.3",
57
57
  "@limetech/eslint-config": "^5.0.1",
58
58
  "@microsoft/api-extractor": "^7.59.4",
59
- "@playwright/test": "1.64.0",
59
+ "@playwright/test": "1.64.1",
60
60
  "@popperjs/core": "^2.11.8",
61
61
  "@rjsf/core": "^6.11.0",
62
62
  "@rjsf/utils": "^6.11.0",
63
63
  "@rjsf/validator-ajv8": "^6.11.0",
64
64
  "@stencil/core": "^4.43.5",
65
65
  "@stencil/sass": "^3.3.3",
66
- "@stencil/vitest": "^1.15.1",
66
+ "@stencil/vitest": "^1.16.1",
67
67
  "@types/codemirror": "^5.60.17",
68
68
  "@types/html-escaper": "^3.0.4",
69
69
  "@types/lodash-es": "^4.17.12",
@@ -93,7 +93,7 @@
93
93
  "morphdom": "^2.7.8",
94
94
  "number-abbreviate": "^2.0.0",
95
95
  "parse-css-color": "^0.2.1",
96
- "postal-mime": "^4.0.5",
96
+ "postal-mime": "^4.0.6",
97
97
  "prettier": "^3.9.10",
98
98
  "prosemirror-example-setup": "^1.2.3",
99
99
  "prosemirror-markdown": "^1.13.8",
@@ -101,8 +101,8 @@
101
101
  "prosemirror-schema-basic": "^1.2.5",
102
102
  "prosemirror-tables": "^1.8.5",
103
103
  "prosemirror-test-builder": "^1.1.1",
104
- "react": "^19.3.0",
105
- "react-dom": "^19.3.0",
104
+ "react": "^19.3.1",
105
+ "react-dom": "^19.3.1",
106
106
  "rehype-parse": "^9.0.1",
107
107
  "rehype-raw": "^7.0.0",
108
108
  "rehype-remark": "^10.0.1",