@sprucelabs/heartwood-view-controllers 126.11.17 → 126.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.
Files changed (41) hide show
  1. package/build/.spruce/errors/errors.types.d.ts +20 -0
  2. package/build/.spruce/errors/heartwoodViewControllers/buttonNotFound.schema.d.ts +3 -0
  3. package/build/.spruce/errors/heartwoodViewControllers/buttonNotFound.schema.js +19 -0
  4. package/build/.spruce/errors/options.types.d.ts +4 -1
  5. package/build/.spruce/schemas/heartwoodViewControllers/v2021_02_11/button.schema.js +1 -1
  6. package/build/.spruce/schemas/heartwoodViewControllers/v2021_02_11/buttonBarButton.schema.js +1 -1
  7. package/build/.spruce/schemas/heartwoodViewControllers/v2021_02_11/cardFooterButton.schema.js +1 -1
  8. package/build/.spruce/schemas/heartwoodViewControllers/v2021_02_11/dropdownButton.schema.js +1 -1
  9. package/build/.spruce/schemas/heartwoodViewControllers/v2021_02_11/listCellButton.schema.js +1 -1
  10. package/build/.spruce/schemas/heartwoodViewControllers/v2021_02_11/navigationDropdownButton.schema.js +1 -1
  11. package/build/.spruce/schemas/schemas.types.d.ts +24 -6
  12. package/build/constants.js +4 -0
  13. package/build/errors/SpruceError.js +3 -0
  14. package/build/errors/buttonNotFound.builder.d.ts +11 -0
  15. package/build/errors/buttonNotFound.builder.js +13 -0
  16. package/build/esm/.spruce/errors/errors.types.d.ts +20 -0
  17. package/build/esm/.spruce/errors/options.types.d.ts +4 -1
  18. package/build/esm/.spruce/schemas/heartwoodViewControllers/v2021_02_11/button.schema.js +1 -1
  19. package/build/esm/.spruce/schemas/heartwoodViewControllers/v2021_02_11/buttonBarButton.schema.js +1 -1
  20. package/build/esm/.spruce/schemas/heartwoodViewControllers/v2021_02_11/cardFooterButton.schema.js +1 -1
  21. package/build/esm/.spruce/schemas/heartwoodViewControllers/v2021_02_11/dropdownButton.schema.js +1 -1
  22. package/build/esm/.spruce/schemas/heartwoodViewControllers/v2021_02_11/listCellButton.schema.js +1 -1
  23. package/build/esm/.spruce/schemas/heartwoodViewControllers/v2021_02_11/navigationDropdownButton.schema.js +1 -1
  24. package/build/esm/.spruce/schemas/schemas.types.d.ts +24 -6
  25. package/build/esm/constants.js +4 -0
  26. package/build/esm/errors/SpruceError.js +3 -0
  27. package/build/esm/errors/buttonNotFound.builder.d.ts +11 -0
  28. package/build/esm/errors/buttonNotFound.builder.js +11 -0
  29. package/build/esm/index.d.ts +1 -0
  30. package/build/esm/index.js +1 -0
  31. package/build/esm/tests/utilities/vcAssert.js +4 -4
  32. package/build/esm/viewControllers/LoginCard.vc.d.ts +5 -5
  33. package/build/esm/viewControllers/navigation/Navigation.vc.d.ts +2 -1
  34. package/build/esm/viewControllers/navigation/Navigation.vc.js +16 -0
  35. package/build/index.d.ts +1 -0
  36. package/build/index.js +7 -5
  37. package/build/tests/utilities/vcAssert.js +4 -4
  38. package/build/viewControllers/LoginCard.vc.d.ts +5 -5
  39. package/build/viewControllers/navigation/Navigation.vc.d.ts +2 -1
  40. package/build/viewControllers/navigation/Navigation.vc.js +18 -0
  41. package/package.json +2 -2
@@ -431,6 +431,26 @@ export declare namespace SpruceErrors.HeartwoodViewControllers {
431
431
  }
432
432
  type CellDeletedEntity = SchemaEntity<SpruceErrors.HeartwoodViewControllers.CellDeletedSchema>;
433
433
  }
434
+ export declare namespace SpruceErrors.HeartwoodViewControllers {
435
+ interface ButtonNotFound {
436
+ 'id': string;
437
+ }
438
+ interface ButtonNotFoundSchema extends SpruceSchema.Schema {
439
+ id: 'buttonNotFound';
440
+ namespace: 'HeartwoodViewControllers';
441
+ name: 'button not found';
442
+ moduleToImportFromWhenRemote: '@sprucelabs/heartwood-view-controllers';
443
+ fields: {
444
+ /** . */
445
+ 'id': {
446
+ type: 'id';
447
+ isRequired: true;
448
+ options: undefined;
449
+ };
450
+ };
451
+ }
452
+ type ButtonNotFoundEntity = SchemaEntity<SpruceErrors.HeartwoodViewControllers.ButtonNotFoundSchema>;
453
+ }
434
454
  export declare namespace SpruceErrors.HeartwoodViewControllers {
435
455
  interface AppNotFound {
436
456
  'namespace': string;
@@ -0,0 +1,3 @@
1
+ import { SpruceErrors } from '../errors.types';
2
+ declare const buttonNotFoundSchema: SpruceErrors.HeartwoodViewControllers.ButtonNotFoundSchema;
3
+ export default buttonNotFoundSchema;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const schema_1 = require("@sprucelabs/schema");
4
+ const buttonNotFoundSchema = {
5
+ id: 'buttonNotFound',
6
+ namespace: 'HeartwoodViewControllers',
7
+ name: 'button not found',
8
+ moduleToImportFromWhenRemote: '@sprucelabs/heartwood-view-controllers',
9
+ fields: {
10
+ /** . */
11
+ 'id': {
12
+ type: 'id',
13
+ isRequired: true,
14
+ options: undefined
15
+ },
16
+ }
17
+ };
18
+ schema_1.SchemaRegistry.getInstance().trackSchema(buttonNotFoundSchema);
19
+ exports.default = buttonNotFoundSchema;
@@ -66,8 +66,11 @@ export interface DateAlreadySelectedErrorOptions extends SpruceErrors.HeartwoodV
66
66
  export interface CellDeletedErrorOptions extends SpruceErrors.HeartwoodViewControllers.CellDeleted, ISpruceErrorOptions {
67
67
  code: 'CELL_DELETED';
68
68
  }
69
+ export interface ButtonNotFoundErrorOptions extends SpruceErrors.HeartwoodViewControllers.ButtonNotFound, ISpruceErrorOptions {
70
+ code: 'BUTTON_NOT_FOUND';
71
+ }
69
72
  export interface AppNotFoundErrorOptions extends SpruceErrors.HeartwoodViewControllers.AppNotFound, ISpruceErrorOptions {
70
73
  code: 'APP_NOT_FOUND';
71
74
  }
72
- type ErrorOptions = ViewAlreadyDestroyedErrorOptions | ToolNotFoundErrorOptions | StepNotCompleteErrorOptions | SlideNotFoundErrorOptions | RowDeletedErrorOptions | PersonNotFoundErrorOptions | NoFieldVcSetErrorOptions | MissingStorageErrorOptions | InvalidViewControllerSourceErrorOptions | InvalidViewControllerNameErrorOptions | InvalidSkillViewControllerErrorOptions | InvalidLoginConfigurationErrorOptions | InvalidAppControllerErrorOptions | ExportFailedErrorOptions | EventNotFoundErrorOptions | DuplicateToolIdErrorOptions | DuplicateRowIdErrorOptions | DuplicateEventIdErrorOptions | DidNotGenerateOfferErrorOptions | DateNotSelectedErrorOptions | DateAlreadySelectedErrorOptions | CellDeletedErrorOptions | AppNotFoundErrorOptions;
75
+ type ErrorOptions = ViewAlreadyDestroyedErrorOptions | ToolNotFoundErrorOptions | StepNotCompleteErrorOptions | SlideNotFoundErrorOptions | RowDeletedErrorOptions | PersonNotFoundErrorOptions | NoFieldVcSetErrorOptions | MissingStorageErrorOptions | InvalidViewControllerSourceErrorOptions | InvalidViewControllerNameErrorOptions | InvalidSkillViewControllerErrorOptions | InvalidLoginConfigurationErrorOptions | InvalidAppControllerErrorOptions | ExportFailedErrorOptions | EventNotFoundErrorOptions | DuplicateToolIdErrorOptions | DuplicateRowIdErrorOptions | DuplicateEventIdErrorOptions | DidNotGenerateOfferErrorOptions | DateNotSelectedErrorOptions | DateAlreadySelectedErrorOptions | CellDeletedErrorOptions | ButtonNotFoundErrorOptions | AppNotFoundErrorOptions;
73
76
  export default ErrorOptions;
@@ -102,7 +102,7 @@ const buttonSchema = {
102
102
  'lineIconPosition': {
103
103
  label: 'Line icon position',
104
104
  type: 'select',
105
- options: { choices: [{ "value": "left", "label": "Left" }, { "value": "bottom", "label": "Bottom" }], }
105
+ options: { choices: [{ "value": "left", "label": "Left" }, { "value": "bottom", "label": "Bottom" }, { "value": "right", "label": "Right" }], }
106
106
  },
107
107
  /** Click handler. */
108
108
  'onClick': {
@@ -96,7 +96,7 @@ const buttonBarButtonSchema = {
96
96
  'lineIconPosition': {
97
97
  label: 'Line icon position',
98
98
  type: 'select',
99
- options: { choices: [{ "value": "left", "label": "Left" }, { "value": "bottom", "label": "Bottom" }], }
99
+ options: { choices: [{ "value": "left", "label": "Left" }, { "value": "bottom", "label": "Bottom" }, { "value": "right", "label": "Right" }], }
100
100
  },
101
101
  }
102
102
  };
@@ -101,7 +101,7 @@ const cardFooterButtonSchema = {
101
101
  'lineIconPosition': {
102
102
  label: 'Line icon position',
103
103
  type: 'select',
104
- options: { choices: [{ "value": "left", "label": "Left" }, { "value": "bottom", "label": "Bottom" }], }
104
+ options: { choices: [{ "value": "left", "label": "Left" }, { "value": "bottom", "label": "Bottom" }, { "value": "right", "label": "Right" }], }
105
105
  },
106
106
  /** Click handler. */
107
107
  'onClick': {
@@ -101,7 +101,7 @@ const dropdownButtonSchema = {
101
101
  'lineIconPosition': {
102
102
  label: 'Line icon position',
103
103
  type: 'select',
104
- options: { choices: [{ "value": "left", "label": "Left" }, { "value": "bottom", "label": "Bottom" }], }
104
+ options: { choices: [{ "value": "left", "label": "Left" }, { "value": "bottom", "label": "Bottom" }, { "value": "right", "label": "Right" }], }
105
105
  },
106
106
  /** Click handler. */
107
107
  'onClick': {
@@ -102,7 +102,7 @@ const listCellButtonSchema = {
102
102
  'lineIconPosition': {
103
103
  label: 'Line icon position',
104
104
  type: 'select',
105
- options: { choices: [{ "value": "left", "label": "Left" }, { "value": "bottom", "label": "Bottom" }], }
105
+ options: { choices: [{ "value": "left", "label": "Left" }, { "value": "bottom", "label": "Bottom" }, { "value": "right", "label": "Right" }], }
106
106
  },
107
107
  /** Cell button click handler. */
108
108
  'onClick': {
@@ -103,7 +103,7 @@ const navigationDropdownButtonSchema = {
103
103
  'lineIconPosition': {
104
104
  label: 'Line icon position',
105
105
  type: 'select',
106
- options: { choices: [{ "value": "left", "label": "Left" }, { "value": "bottom", "label": "Bottom" }], }
106
+ options: { choices: [{ "value": "left", "label": "Left" }, { "value": "bottom", "label": "Bottom" }, { "value": "right", "label": "Right" }], }
107
107
  },
108
108
  /** Click handler. */
109
109
  'onClick': {
@@ -3149,7 +3149,7 @@ declare module '@sprucelabs/spruce-core-schemas/build/.spruce/schemas/core.schem
3149
3149
  /** Selected line icon. Only applies when the button is selected. Will override line icon if one is set. */
3150
3150
  'selectedLineIcon'?: ("add-circle" | "add-square" | "add" | "alarm" | "arrow-back" | "arrow-down-circle" | "arrow-down" | "arrow-next" | "arrow-up-circle" | "arrow-up" | "attachment" | "award-badge" | "binoculars" | "bolt" | "book-open" | "book" | "bookmark" | "calendar-add" | "calendar" | "camera" | "cellphone" | "checkmark" | "chevron-down" | "chevron-left" | "chevron-right" | "chevron-up" | "clipboard" | "clock" | "close-circle" | "close-square" | "close" | "code" | "coffee" | "command" | "corner-down-left" | "corner-down-right" | "corner-left-down" | "corner-left-up" | "corner-right-down" | "corner-right-up" | "corner-up-left" | "corner-up-right" | "crop" | "cube" | "delete" | "document-blank" | "document-new" | "document-text" | "download-cloud" | "download" | "edit-box" | "edit-line" | "email" | "emoji-happy" | "emoji-sad" | "external-link" | "fav-heart" | "fav-heart-filled" | "flag" | "flip-01" | "flip-02" | "folder" | "globe" | "hash-tag" | "headphones" | "help-buoy" | "help-circle" | "home" | "info" | "jump" | "layers" | "bar-graph" | "link-angle" | "link-flat" | "loader" | "location-pin" | "lock" | "logout" | "map" | "message-circle" | "message-square" | "mic-off" | "mic-on" | "minus-circle" | "minus-square" | "money-sign" | "more-horizontal" | "more-vertical" | "notification-off" | "notification-on" | "object" | "pause-circle" | "phone-unavailable" | "phone" | "photo" | "picked" | "pie-chart" | "play-circle" | "present" | "refresh-circle" | "refresh" | "repeat" | "restricted" | "rotate" | "search-no" | "search" | "selector-checked" | "selector-circle-filled" | "selector-circle" | "send" | "settings-filled" | "settings" | "share" | "shopping-bag" | "shopping-cart" | "sort-filter-down" | "sort-filter-up" | "sound-off" | "sound-on" | "sprucebot" | "star-filled" | "star" | "sun" | "tag" | "time" | "tool" | "trending-down" | "trending-up" | "triangle" | "unlock" | "upload-cloud" | "upload" | "user-add" | "user-delete" | "user" | "users" | "video-off" | "video" | "warning" | "wifi" | "zoom-in" | "zoom-out") | undefined | null;
3151
3151
  /** Line icon position. */
3152
- 'lineIconPosition'?: ("left" | "bottom") | undefined | null;
3152
+ 'lineIconPosition'?: ("left" | "bottom" | "right") | undefined | null;
3153
3153
  /** Click handler. */
3154
3154
  'onClick'?: ((dropdown: HeartwoodTypes.DropdownController) => Promise<void> | void) | undefined | null;
3155
3155
  /** Style. */
@@ -4137,6 +4137,9 @@ declare module '@sprucelabs/spruce-core-schemas/build/.spruce/schemas/core.schem
4137
4137
  }, {
4138
4138
  "value": "bottom";
4139
4139
  "label": "Bottom";
4140
+ }, {
4141
+ "value": "right";
4142
+ "label": "Right";
4140
4143
  }];
4141
4144
  };
4142
4145
  };
@@ -11036,7 +11039,7 @@ declare module '@sprucelabs/spruce-core-schemas/build/.spruce/schemas/core.schem
11036
11039
  /** Selected line icon. Only applies when the button is selected. Will override line icon if one is set. */
11037
11040
  'selectedLineIcon'?: ("add-circle" | "add-square" | "add" | "alarm" | "arrow-back" | "arrow-down-circle" | "arrow-down" | "arrow-next" | "arrow-up-circle" | "arrow-up" | "attachment" | "award-badge" | "binoculars" | "bolt" | "book-open" | "book" | "bookmark" | "calendar-add" | "calendar" | "camera" | "cellphone" | "checkmark" | "chevron-down" | "chevron-left" | "chevron-right" | "chevron-up" | "clipboard" | "clock" | "close-circle" | "close-square" | "close" | "code" | "coffee" | "command" | "corner-down-left" | "corner-down-right" | "corner-left-down" | "corner-left-up" | "corner-right-down" | "corner-right-up" | "corner-up-left" | "corner-up-right" | "crop" | "cube" | "delete" | "document-blank" | "document-new" | "document-text" | "download-cloud" | "download" | "edit-box" | "edit-line" | "email" | "emoji-happy" | "emoji-sad" | "external-link" | "fav-heart" | "fav-heart-filled" | "flag" | "flip-01" | "flip-02" | "folder" | "globe" | "hash-tag" | "headphones" | "help-buoy" | "help-circle" | "home" | "info" | "jump" | "layers" | "bar-graph" | "link-angle" | "link-flat" | "loader" | "location-pin" | "lock" | "logout" | "map" | "message-circle" | "message-square" | "mic-off" | "mic-on" | "minus-circle" | "minus-square" | "money-sign" | "more-horizontal" | "more-vertical" | "notification-off" | "notification-on" | "object" | "pause-circle" | "phone-unavailable" | "phone" | "photo" | "picked" | "pie-chart" | "play-circle" | "present" | "refresh-circle" | "refresh" | "repeat" | "restricted" | "rotate" | "search-no" | "search" | "selector-checked" | "selector-circle-filled" | "selector-circle" | "send" | "settings-filled" | "settings" | "share" | "shopping-bag" | "shopping-cart" | "sort-filter-down" | "sort-filter-up" | "sound-off" | "sound-on" | "sprucebot" | "star-filled" | "star" | "sun" | "tag" | "time" | "tool" | "trending-down" | "trending-up" | "triangle" | "unlock" | "upload-cloud" | "upload" | "user-add" | "user-delete" | "user" | "users" | "video-off" | "video" | "warning" | "wifi" | "zoom-in" | "zoom-out") | undefined | null;
11038
11041
  /** Line icon position. */
11039
- 'lineIconPosition'?: ("left" | "bottom") | undefined | null;
11042
+ 'lineIconPosition'?: ("left" | "bottom" | "right") | undefined | null;
11040
11043
  /** Click handler. */
11041
11044
  'onClick'?: (() => Promise<any> | any) | undefined | null;
11042
11045
  /** Style. */
@@ -12021,6 +12024,9 @@ declare module '@sprucelabs/spruce-core-schemas/build/.spruce/schemas/core.schem
12021
12024
  }, {
12022
12025
  "value": "bottom";
12023
12026
  "label": "Bottom";
12027
+ }, {
12028
+ "value": "right";
12029
+ "label": "Right";
12024
12030
  }];
12025
12031
  };
12026
12032
  };
@@ -13727,7 +13733,7 @@ declare module '@sprucelabs/spruce-core-schemas/build/.spruce/schemas/core.schem
13727
13733
  /** Selected line icon. Only applies when the button is selected. Will override line icon if one is set. */
13728
13734
  'selectedLineIcon'?: ("add-circle" | "add-square" | "add" | "alarm" | "arrow-back" | "arrow-down-circle" | "arrow-down" | "arrow-next" | "arrow-up-circle" | "arrow-up" | "attachment" | "award-badge" | "binoculars" | "bolt" | "book-open" | "book" | "bookmark" | "calendar-add" | "calendar" | "camera" | "cellphone" | "checkmark" | "chevron-down" | "chevron-left" | "chevron-right" | "chevron-up" | "clipboard" | "clock" | "close-circle" | "close-square" | "close" | "code" | "coffee" | "command" | "corner-down-left" | "corner-down-right" | "corner-left-down" | "corner-left-up" | "corner-right-down" | "corner-right-up" | "corner-up-left" | "corner-up-right" | "crop" | "cube" | "delete" | "document-blank" | "document-new" | "document-text" | "download-cloud" | "download" | "edit-box" | "edit-line" | "email" | "emoji-happy" | "emoji-sad" | "external-link" | "fav-heart" | "fav-heart-filled" | "flag" | "flip-01" | "flip-02" | "folder" | "globe" | "hash-tag" | "headphones" | "help-buoy" | "help-circle" | "home" | "info" | "jump" | "layers" | "bar-graph" | "link-angle" | "link-flat" | "loader" | "location-pin" | "lock" | "logout" | "map" | "message-circle" | "message-square" | "mic-off" | "mic-on" | "minus-circle" | "minus-square" | "money-sign" | "more-horizontal" | "more-vertical" | "notification-off" | "notification-on" | "object" | "pause-circle" | "phone-unavailable" | "phone" | "photo" | "picked" | "pie-chart" | "play-circle" | "present" | "refresh-circle" | "refresh" | "repeat" | "restricted" | "rotate" | "search-no" | "search" | "selector-checked" | "selector-circle-filled" | "selector-circle" | "send" | "settings-filled" | "settings" | "share" | "shopping-bag" | "shopping-cart" | "sort-filter-down" | "sort-filter-up" | "sound-off" | "sound-on" | "sprucebot" | "star-filled" | "star" | "sun" | "tag" | "time" | "tool" | "trending-down" | "trending-up" | "triangle" | "unlock" | "upload-cloud" | "upload" | "user-add" | "user-delete" | "user" | "users" | "video-off" | "video" | "warning" | "wifi" | "zoom-in" | "zoom-out") | undefined | null;
13729
13735
  /** Line icon position. */
13730
- 'lineIconPosition'?: ("left" | "bottom") | undefined | null;
13736
+ 'lineIconPosition'?: ("left" | "bottom" | "right") | undefined | null;
13731
13737
  /** Cell button click handler. */
13732
13738
  'onClick'?: ((options: {
13733
13739
  rowVc: HeartwoodTypes.ListRowViewController;
@@ -14718,6 +14724,9 @@ declare module '@sprucelabs/spruce-core-schemas/build/.spruce/schemas/core.schem
14718
14724
  }, {
14719
14725
  "value": "bottom";
14720
14726
  "label": "Bottom";
14727
+ }, {
14728
+ "value": "right";
14729
+ "label": "Right";
14721
14730
  }];
14722
14731
  };
14723
14732
  };
@@ -16703,7 +16712,7 @@ declare module '@sprucelabs/spruce-core-schemas/build/.spruce/schemas/core.schem
16703
16712
  /** Selected line icon. Only applies when the button is selected. Will override line icon if one is set. */
16704
16713
  'selectedLineIcon'?: ("add-circle" | "add-square" | "add" | "alarm" | "arrow-back" | "arrow-down-circle" | "arrow-down" | "arrow-next" | "arrow-up-circle" | "arrow-up" | "attachment" | "award-badge" | "binoculars" | "bolt" | "book-open" | "book" | "bookmark" | "calendar-add" | "calendar" | "camera" | "cellphone" | "checkmark" | "chevron-down" | "chevron-left" | "chevron-right" | "chevron-up" | "clipboard" | "clock" | "close-circle" | "close-square" | "close" | "code" | "coffee" | "command" | "corner-down-left" | "corner-down-right" | "corner-left-down" | "corner-left-up" | "corner-right-down" | "corner-right-up" | "corner-up-left" | "corner-up-right" | "crop" | "cube" | "delete" | "document-blank" | "document-new" | "document-text" | "download-cloud" | "download" | "edit-box" | "edit-line" | "email" | "emoji-happy" | "emoji-sad" | "external-link" | "fav-heart" | "fav-heart-filled" | "flag" | "flip-01" | "flip-02" | "folder" | "globe" | "hash-tag" | "headphones" | "help-buoy" | "help-circle" | "home" | "info" | "jump" | "layers" | "bar-graph" | "link-angle" | "link-flat" | "loader" | "location-pin" | "lock" | "logout" | "map" | "message-circle" | "message-square" | "mic-off" | "mic-on" | "minus-circle" | "minus-square" | "money-sign" | "more-horizontal" | "more-vertical" | "notification-off" | "notification-on" | "object" | "pause-circle" | "phone-unavailable" | "phone" | "photo" | "picked" | "pie-chart" | "play-circle" | "present" | "refresh-circle" | "refresh" | "repeat" | "restricted" | "rotate" | "search-no" | "search" | "selector-checked" | "selector-circle-filled" | "selector-circle" | "send" | "settings-filled" | "settings" | "share" | "shopping-bag" | "shopping-cart" | "sort-filter-down" | "sort-filter-up" | "sound-off" | "sound-on" | "sprucebot" | "star-filled" | "star" | "sun" | "tag" | "time" | "tool" | "trending-down" | "trending-up" | "triangle" | "unlock" | "upload-cloud" | "upload" | "user-add" | "user-delete" | "user" | "users" | "video-off" | "video" | "warning" | "wifi" | "zoom-in" | "zoom-out") | undefined | null;
16705
16714
  /** Line icon position. */
16706
- 'lineIconPosition'?: ("left" | "bottom") | undefined | null;
16715
+ 'lineIconPosition'?: ("left" | "bottom" | "right") | undefined | null;
16707
16716
  }
16708
16717
  interface ButtonBarButtonSchema extends SpruceSchema.Schema {
16709
16718
  id: 'buttonBarButton';
@@ -17677,6 +17686,9 @@ declare module '@sprucelabs/spruce-core-schemas/build/.spruce/schemas/core.schem
17677
17686
  }, {
17678
17687
  "value": "bottom";
17679
17688
  "label": "Bottom";
17689
+ }, {
17690
+ "value": "right";
17691
+ "label": "Right";
17680
17692
  }];
17681
17693
  };
17682
17694
  };
@@ -17713,7 +17725,7 @@ declare module '@sprucelabs/spruce-core-schemas/build/.spruce/schemas/core.schem
17713
17725
  /** Selected line icon. Only applies when the button is selected. Will override line icon if one is set. */
17714
17726
  'selectedLineIcon'?: ("add-circle" | "add-square" | "add" | "alarm" | "arrow-back" | "arrow-down-circle" | "arrow-down" | "arrow-next" | "arrow-up-circle" | "arrow-up" | "attachment" | "award-badge" | "binoculars" | "bolt" | "book-open" | "book" | "bookmark" | "calendar-add" | "calendar" | "camera" | "cellphone" | "checkmark" | "chevron-down" | "chevron-left" | "chevron-right" | "chevron-up" | "clipboard" | "clock" | "close-circle" | "close-square" | "close" | "code" | "coffee" | "command" | "corner-down-left" | "corner-down-right" | "corner-left-down" | "corner-left-up" | "corner-right-down" | "corner-right-up" | "corner-up-left" | "corner-up-right" | "crop" | "cube" | "delete" | "document-blank" | "document-new" | "document-text" | "download-cloud" | "download" | "edit-box" | "edit-line" | "email" | "emoji-happy" | "emoji-sad" | "external-link" | "fav-heart" | "fav-heart-filled" | "flag" | "flip-01" | "flip-02" | "folder" | "globe" | "hash-tag" | "headphones" | "help-buoy" | "help-circle" | "home" | "info" | "jump" | "layers" | "bar-graph" | "link-angle" | "link-flat" | "loader" | "location-pin" | "lock" | "logout" | "map" | "message-circle" | "message-square" | "mic-off" | "mic-on" | "minus-circle" | "minus-square" | "money-sign" | "more-horizontal" | "more-vertical" | "notification-off" | "notification-on" | "object" | "pause-circle" | "phone-unavailable" | "phone" | "photo" | "picked" | "pie-chart" | "play-circle" | "present" | "refresh-circle" | "refresh" | "repeat" | "restricted" | "rotate" | "search-no" | "search" | "selector-checked" | "selector-circle-filled" | "selector-circle" | "send" | "settings-filled" | "settings" | "share" | "shopping-bag" | "shopping-cart" | "sort-filter-down" | "sort-filter-up" | "sound-off" | "sound-on" | "sprucebot" | "star-filled" | "star" | "sun" | "tag" | "time" | "tool" | "trending-down" | "trending-up" | "triangle" | "unlock" | "upload-cloud" | "upload" | "user-add" | "user-delete" | "user" | "users" | "video-off" | "video" | "warning" | "wifi" | "zoom-in" | "zoom-out") | undefined | null;
17715
17727
  /** Line icon position. */
17716
- 'lineIconPosition'?: ("left" | "bottom") | undefined | null;
17728
+ 'lineIconPosition'?: ("left" | "bottom" | "right") | undefined | null;
17717
17729
  /** Click handler. */
17718
17730
  'onClick'?: (() => Promise<any> | any) | undefined | null;
17719
17731
  /** Style. */
@@ -18700,6 +18712,9 @@ declare module '@sprucelabs/spruce-core-schemas/build/.spruce/schemas/core.schem
18700
18712
  }, {
18701
18713
  "value": "bottom";
18702
18714
  "label": "Bottom";
18715
+ }, {
18716
+ "value": "right";
18717
+ "label": "Right";
18703
18718
  }];
18704
18719
  };
18705
18720
  };
@@ -18766,7 +18781,7 @@ declare module '@sprucelabs/spruce-core-schemas/build/.spruce/schemas/core.schem
18766
18781
  /** Selected line icon. Only applies when the button is selected. Will override line icon if one is set. */
18767
18782
  'selectedLineIcon'?: ("add-circle" | "add-square" | "add" | "alarm" | "arrow-back" | "arrow-down-circle" | "arrow-down" | "arrow-next" | "arrow-up-circle" | "arrow-up" | "attachment" | "award-badge" | "binoculars" | "bolt" | "book-open" | "book" | "bookmark" | "calendar-add" | "calendar" | "camera" | "cellphone" | "checkmark" | "chevron-down" | "chevron-left" | "chevron-right" | "chevron-up" | "clipboard" | "clock" | "close-circle" | "close-square" | "close" | "code" | "coffee" | "command" | "corner-down-left" | "corner-down-right" | "corner-left-down" | "corner-left-up" | "corner-right-down" | "corner-right-up" | "corner-up-left" | "corner-up-right" | "crop" | "cube" | "delete" | "document-blank" | "document-new" | "document-text" | "download-cloud" | "download" | "edit-box" | "edit-line" | "email" | "emoji-happy" | "emoji-sad" | "external-link" | "fav-heart" | "fav-heart-filled" | "flag" | "flip-01" | "flip-02" | "folder" | "globe" | "hash-tag" | "headphones" | "help-buoy" | "help-circle" | "home" | "info" | "jump" | "layers" | "bar-graph" | "link-angle" | "link-flat" | "loader" | "location-pin" | "lock" | "logout" | "map" | "message-circle" | "message-square" | "mic-off" | "mic-on" | "minus-circle" | "minus-square" | "money-sign" | "more-horizontal" | "more-vertical" | "notification-off" | "notification-on" | "object" | "pause-circle" | "phone-unavailable" | "phone" | "photo" | "picked" | "pie-chart" | "play-circle" | "present" | "refresh-circle" | "refresh" | "repeat" | "restricted" | "rotate" | "search-no" | "search" | "selector-checked" | "selector-circle-filled" | "selector-circle" | "send" | "settings-filled" | "settings" | "share" | "shopping-bag" | "shopping-cart" | "sort-filter-down" | "sort-filter-up" | "sound-off" | "sound-on" | "sprucebot" | "star-filled" | "star" | "sun" | "tag" | "time" | "tool" | "trending-down" | "trending-up" | "triangle" | "unlock" | "upload-cloud" | "upload" | "user-add" | "user-delete" | "user" | "users" | "video-off" | "video" | "warning" | "wifi" | "zoom-in" | "zoom-out") | undefined | null;
18768
18783
  /** Line icon position. */
18769
- 'lineIconPosition'?: ("left" | "bottom") | undefined | null;
18784
+ 'lineIconPosition'?: ("left" | "bottom" | "right") | undefined | null;
18770
18785
  /** Click handler. */
18771
18786
  'onClick'?: ((dropdown: HeartwoodTypes.DropdownController) => Promise<void> | void) | undefined | null;
18772
18787
  /** Style. */
@@ -19751,6 +19766,9 @@ declare module '@sprucelabs/spruce-core-schemas/build/.spruce/schemas/core.schem
19751
19766
  }, {
19752
19767
  "value": "bottom";
19753
19768
  "label": "Bottom";
19769
+ }, {
19770
+ "value": "right";
19771
+ "label": "Right";
19754
19772
  }];
19755
19773
  };
19756
19774
  };
@@ -570,6 +570,10 @@ exports.buttonFields = {
570
570
  value: 'bottom',
571
571
  label: 'Bottom',
572
572
  },
573
+ {
574
+ value: 'right',
575
+ label: 'Right',
576
+ },
573
577
  ],
574
578
  },
575
579
  },
@@ -86,6 +86,9 @@ class SpruceError extends error_1.default {
86
86
  case 'INVALID_LOGIN_CONFIGURATION':
87
87
  message = 'A Invalid login configuration just happened!';
88
88
  break;
89
+ case 'BUTTON_NOT_FOUND':
90
+ message = `I could not find a button with the id '${options.id}'!`;
91
+ break;
89
92
  default:
90
93
  message = super.friendlyMessage();
91
94
  }
@@ -0,0 +1,11 @@
1
+ declare const _default: {
2
+ id: string;
3
+ name: string;
4
+ fields: {
5
+ id: {
6
+ type: "id";
7
+ isRequired: true;
8
+ };
9
+ };
10
+ };
11
+ export default _default;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const schema_1 = require("@sprucelabs/schema");
4
+ exports.default = (0, schema_1.buildErrorSchema)({
5
+ id: 'buttonNotFound',
6
+ name: 'button not found',
7
+ fields: {
8
+ id: {
9
+ type: 'id',
10
+ isRequired: true,
11
+ },
12
+ },
13
+ });
@@ -431,6 +431,26 @@ export declare namespace SpruceErrors.HeartwoodViewControllers {
431
431
  }
432
432
  type CellDeletedEntity = SchemaEntity<SpruceErrors.HeartwoodViewControllers.CellDeletedSchema>;
433
433
  }
434
+ export declare namespace SpruceErrors.HeartwoodViewControllers {
435
+ interface ButtonNotFound {
436
+ 'id': string;
437
+ }
438
+ interface ButtonNotFoundSchema extends SpruceSchema.Schema {
439
+ id: 'buttonNotFound';
440
+ namespace: 'HeartwoodViewControllers';
441
+ name: 'button not found';
442
+ moduleToImportFromWhenRemote: '@sprucelabs/heartwood-view-controllers';
443
+ fields: {
444
+ /** . */
445
+ 'id': {
446
+ type: 'id';
447
+ isRequired: true;
448
+ options: undefined;
449
+ };
450
+ };
451
+ }
452
+ type ButtonNotFoundEntity = SchemaEntity<SpruceErrors.HeartwoodViewControllers.ButtonNotFoundSchema>;
453
+ }
434
454
  export declare namespace SpruceErrors.HeartwoodViewControllers {
435
455
  interface AppNotFound {
436
456
  'namespace': string;
@@ -66,8 +66,11 @@ export interface DateAlreadySelectedErrorOptions extends SpruceErrors.HeartwoodV
66
66
  export interface CellDeletedErrorOptions extends SpruceErrors.HeartwoodViewControllers.CellDeleted, ISpruceErrorOptions {
67
67
  code: 'CELL_DELETED';
68
68
  }
69
+ export interface ButtonNotFoundErrorOptions extends SpruceErrors.HeartwoodViewControllers.ButtonNotFound, ISpruceErrorOptions {
70
+ code: 'BUTTON_NOT_FOUND';
71
+ }
69
72
  export interface AppNotFoundErrorOptions extends SpruceErrors.HeartwoodViewControllers.AppNotFound, ISpruceErrorOptions {
70
73
  code: 'APP_NOT_FOUND';
71
74
  }
72
- type ErrorOptions = ViewAlreadyDestroyedErrorOptions | ToolNotFoundErrorOptions | StepNotCompleteErrorOptions | SlideNotFoundErrorOptions | RowDeletedErrorOptions | PersonNotFoundErrorOptions | NoFieldVcSetErrorOptions | MissingStorageErrorOptions | InvalidViewControllerSourceErrorOptions | InvalidViewControllerNameErrorOptions | InvalidSkillViewControllerErrorOptions | InvalidLoginConfigurationErrorOptions | InvalidAppControllerErrorOptions | ExportFailedErrorOptions | EventNotFoundErrorOptions | DuplicateToolIdErrorOptions | DuplicateRowIdErrorOptions | DuplicateEventIdErrorOptions | DidNotGenerateOfferErrorOptions | DateNotSelectedErrorOptions | DateAlreadySelectedErrorOptions | CellDeletedErrorOptions | AppNotFoundErrorOptions;
75
+ type ErrorOptions = ViewAlreadyDestroyedErrorOptions | ToolNotFoundErrorOptions | StepNotCompleteErrorOptions | SlideNotFoundErrorOptions | RowDeletedErrorOptions | PersonNotFoundErrorOptions | NoFieldVcSetErrorOptions | MissingStorageErrorOptions | InvalidViewControllerSourceErrorOptions | InvalidViewControllerNameErrorOptions | InvalidSkillViewControllerErrorOptions | InvalidLoginConfigurationErrorOptions | InvalidAppControllerErrorOptions | ExportFailedErrorOptions | EventNotFoundErrorOptions | DuplicateToolIdErrorOptions | DuplicateRowIdErrorOptions | DuplicateEventIdErrorOptions | DidNotGenerateOfferErrorOptions | DateNotSelectedErrorOptions | DateAlreadySelectedErrorOptions | CellDeletedErrorOptions | ButtonNotFoundErrorOptions | AppNotFoundErrorOptions;
73
76
  export default ErrorOptions;
@@ -97,7 +97,7 @@ const buttonSchema = {
97
97
  'lineIconPosition': {
98
98
  label: 'Line icon position',
99
99
  type: 'select',
100
- options: { choices: [{ "value": "left", "label": "Left" }, { "value": "bottom", "label": "Bottom" }], }
100
+ options: { choices: [{ "value": "left", "label": "Left" }, { "value": "bottom", "label": "Bottom" }, { "value": "right", "label": "Right" }], }
101
101
  },
102
102
  /** Click handler. */
103
103
  'onClick': {
@@ -91,7 +91,7 @@ const buttonBarButtonSchema = {
91
91
  'lineIconPosition': {
92
92
  label: 'Line icon position',
93
93
  type: 'select',
94
- options: { choices: [{ "value": "left", "label": "Left" }, { "value": "bottom", "label": "Bottom" }], }
94
+ options: { choices: [{ "value": "left", "label": "Left" }, { "value": "bottom", "label": "Bottom" }, { "value": "right", "label": "Right" }], }
95
95
  },
96
96
  }
97
97
  };
@@ -96,7 +96,7 @@ const cardFooterButtonSchema = {
96
96
  'lineIconPosition': {
97
97
  label: 'Line icon position',
98
98
  type: 'select',
99
- options: { choices: [{ "value": "left", "label": "Left" }, { "value": "bottom", "label": "Bottom" }], }
99
+ options: { choices: [{ "value": "left", "label": "Left" }, { "value": "bottom", "label": "Bottom" }, { "value": "right", "label": "Right" }], }
100
100
  },
101
101
  /** Click handler. */
102
102
  'onClick': {
@@ -96,7 +96,7 @@ const dropdownButtonSchema = {
96
96
  'lineIconPosition': {
97
97
  label: 'Line icon position',
98
98
  type: 'select',
99
- options: { choices: [{ "value": "left", "label": "Left" }, { "value": "bottom", "label": "Bottom" }], }
99
+ options: { choices: [{ "value": "left", "label": "Left" }, { "value": "bottom", "label": "Bottom" }, { "value": "right", "label": "Right" }], }
100
100
  },
101
101
  /** Click handler. */
102
102
  'onClick': {
@@ -97,7 +97,7 @@ const listCellButtonSchema = {
97
97
  'lineIconPosition': {
98
98
  label: 'Line icon position',
99
99
  type: 'select',
100
- options: { choices: [{ "value": "left", "label": "Left" }, { "value": "bottom", "label": "Bottom" }], }
100
+ options: { choices: [{ "value": "left", "label": "Left" }, { "value": "bottom", "label": "Bottom" }, { "value": "right", "label": "Right" }], }
101
101
  },
102
102
  /** Cell button click handler. */
103
103
  'onClick': {
@@ -98,7 +98,7 @@ const navigationDropdownButtonSchema = {
98
98
  'lineIconPosition': {
99
99
  label: 'Line icon position',
100
100
  type: 'select',
101
- options: { choices: [{ "value": "left", "label": "Left" }, { "value": "bottom", "label": "Bottom" }], }
101
+ options: { choices: [{ "value": "left", "label": "Left" }, { "value": "bottom", "label": "Bottom" }, { "value": "right", "label": "Right" }], }
102
102
  },
103
103
  /** Click handler. */
104
104
  'onClick': {
@@ -3149,7 +3149,7 @@ declare module '@sprucelabs/spruce-core-schemas/build/.spruce/schemas/core.schem
3149
3149
  /** Selected line icon. Only applies when the button is selected. Will override line icon if one is set. */
3150
3150
  'selectedLineIcon'?: ("add-circle" | "add-square" | "add" | "alarm" | "arrow-back" | "arrow-down-circle" | "arrow-down" | "arrow-next" | "arrow-up-circle" | "arrow-up" | "attachment" | "award-badge" | "binoculars" | "bolt" | "book-open" | "book" | "bookmark" | "calendar-add" | "calendar" | "camera" | "cellphone" | "checkmark" | "chevron-down" | "chevron-left" | "chevron-right" | "chevron-up" | "clipboard" | "clock" | "close-circle" | "close-square" | "close" | "code" | "coffee" | "command" | "corner-down-left" | "corner-down-right" | "corner-left-down" | "corner-left-up" | "corner-right-down" | "corner-right-up" | "corner-up-left" | "corner-up-right" | "crop" | "cube" | "delete" | "document-blank" | "document-new" | "document-text" | "download-cloud" | "download" | "edit-box" | "edit-line" | "email" | "emoji-happy" | "emoji-sad" | "external-link" | "fav-heart" | "fav-heart-filled" | "flag" | "flip-01" | "flip-02" | "folder" | "globe" | "hash-tag" | "headphones" | "help-buoy" | "help-circle" | "home" | "info" | "jump" | "layers" | "bar-graph" | "link-angle" | "link-flat" | "loader" | "location-pin" | "lock" | "logout" | "map" | "message-circle" | "message-square" | "mic-off" | "mic-on" | "minus-circle" | "minus-square" | "money-sign" | "more-horizontal" | "more-vertical" | "notification-off" | "notification-on" | "object" | "pause-circle" | "phone-unavailable" | "phone" | "photo" | "picked" | "pie-chart" | "play-circle" | "present" | "refresh-circle" | "refresh" | "repeat" | "restricted" | "rotate" | "search-no" | "search" | "selector-checked" | "selector-circle-filled" | "selector-circle" | "send" | "settings-filled" | "settings" | "share" | "shopping-bag" | "shopping-cart" | "sort-filter-down" | "sort-filter-up" | "sound-off" | "sound-on" | "sprucebot" | "star-filled" | "star" | "sun" | "tag" | "time" | "tool" | "trending-down" | "trending-up" | "triangle" | "unlock" | "upload-cloud" | "upload" | "user-add" | "user-delete" | "user" | "users" | "video-off" | "video" | "warning" | "wifi" | "zoom-in" | "zoom-out") | undefined | null;
3151
3151
  /** Line icon position. */
3152
- 'lineIconPosition'?: ("left" | "bottom") | undefined | null;
3152
+ 'lineIconPosition'?: ("left" | "bottom" | "right") | undefined | null;
3153
3153
  /** Click handler. */
3154
3154
  'onClick'?: ((dropdown: HeartwoodTypes.DropdownController) => Promise<void> | void) | undefined | null;
3155
3155
  /** Style. */
@@ -4137,6 +4137,9 @@ declare module '@sprucelabs/spruce-core-schemas/build/.spruce/schemas/core.schem
4137
4137
  }, {
4138
4138
  "value": "bottom";
4139
4139
  "label": "Bottom";
4140
+ }, {
4141
+ "value": "right";
4142
+ "label": "Right";
4140
4143
  }];
4141
4144
  };
4142
4145
  };
@@ -11036,7 +11039,7 @@ declare module '@sprucelabs/spruce-core-schemas/build/.spruce/schemas/core.schem
11036
11039
  /** Selected line icon. Only applies when the button is selected. Will override line icon if one is set. */
11037
11040
  'selectedLineIcon'?: ("add-circle" | "add-square" | "add" | "alarm" | "arrow-back" | "arrow-down-circle" | "arrow-down" | "arrow-next" | "arrow-up-circle" | "arrow-up" | "attachment" | "award-badge" | "binoculars" | "bolt" | "book-open" | "book" | "bookmark" | "calendar-add" | "calendar" | "camera" | "cellphone" | "checkmark" | "chevron-down" | "chevron-left" | "chevron-right" | "chevron-up" | "clipboard" | "clock" | "close-circle" | "close-square" | "close" | "code" | "coffee" | "command" | "corner-down-left" | "corner-down-right" | "corner-left-down" | "corner-left-up" | "corner-right-down" | "corner-right-up" | "corner-up-left" | "corner-up-right" | "crop" | "cube" | "delete" | "document-blank" | "document-new" | "document-text" | "download-cloud" | "download" | "edit-box" | "edit-line" | "email" | "emoji-happy" | "emoji-sad" | "external-link" | "fav-heart" | "fav-heart-filled" | "flag" | "flip-01" | "flip-02" | "folder" | "globe" | "hash-tag" | "headphones" | "help-buoy" | "help-circle" | "home" | "info" | "jump" | "layers" | "bar-graph" | "link-angle" | "link-flat" | "loader" | "location-pin" | "lock" | "logout" | "map" | "message-circle" | "message-square" | "mic-off" | "mic-on" | "minus-circle" | "minus-square" | "money-sign" | "more-horizontal" | "more-vertical" | "notification-off" | "notification-on" | "object" | "pause-circle" | "phone-unavailable" | "phone" | "photo" | "picked" | "pie-chart" | "play-circle" | "present" | "refresh-circle" | "refresh" | "repeat" | "restricted" | "rotate" | "search-no" | "search" | "selector-checked" | "selector-circle-filled" | "selector-circle" | "send" | "settings-filled" | "settings" | "share" | "shopping-bag" | "shopping-cart" | "sort-filter-down" | "sort-filter-up" | "sound-off" | "sound-on" | "sprucebot" | "star-filled" | "star" | "sun" | "tag" | "time" | "tool" | "trending-down" | "trending-up" | "triangle" | "unlock" | "upload-cloud" | "upload" | "user-add" | "user-delete" | "user" | "users" | "video-off" | "video" | "warning" | "wifi" | "zoom-in" | "zoom-out") | undefined | null;
11038
11041
  /** Line icon position. */
11039
- 'lineIconPosition'?: ("left" | "bottom") | undefined | null;
11042
+ 'lineIconPosition'?: ("left" | "bottom" | "right") | undefined | null;
11040
11043
  /** Click handler. */
11041
11044
  'onClick'?: (() => Promise<any> | any) | undefined | null;
11042
11045
  /** Style. */
@@ -12021,6 +12024,9 @@ declare module '@sprucelabs/spruce-core-schemas/build/.spruce/schemas/core.schem
12021
12024
  }, {
12022
12025
  "value": "bottom";
12023
12026
  "label": "Bottom";
12027
+ }, {
12028
+ "value": "right";
12029
+ "label": "Right";
12024
12030
  }];
12025
12031
  };
12026
12032
  };
@@ -13727,7 +13733,7 @@ declare module '@sprucelabs/spruce-core-schemas/build/.spruce/schemas/core.schem
13727
13733
  /** Selected line icon. Only applies when the button is selected. Will override line icon if one is set. */
13728
13734
  'selectedLineIcon'?: ("add-circle" | "add-square" | "add" | "alarm" | "arrow-back" | "arrow-down-circle" | "arrow-down" | "arrow-next" | "arrow-up-circle" | "arrow-up" | "attachment" | "award-badge" | "binoculars" | "bolt" | "book-open" | "book" | "bookmark" | "calendar-add" | "calendar" | "camera" | "cellphone" | "checkmark" | "chevron-down" | "chevron-left" | "chevron-right" | "chevron-up" | "clipboard" | "clock" | "close-circle" | "close-square" | "close" | "code" | "coffee" | "command" | "corner-down-left" | "corner-down-right" | "corner-left-down" | "corner-left-up" | "corner-right-down" | "corner-right-up" | "corner-up-left" | "corner-up-right" | "crop" | "cube" | "delete" | "document-blank" | "document-new" | "document-text" | "download-cloud" | "download" | "edit-box" | "edit-line" | "email" | "emoji-happy" | "emoji-sad" | "external-link" | "fav-heart" | "fav-heart-filled" | "flag" | "flip-01" | "flip-02" | "folder" | "globe" | "hash-tag" | "headphones" | "help-buoy" | "help-circle" | "home" | "info" | "jump" | "layers" | "bar-graph" | "link-angle" | "link-flat" | "loader" | "location-pin" | "lock" | "logout" | "map" | "message-circle" | "message-square" | "mic-off" | "mic-on" | "minus-circle" | "minus-square" | "money-sign" | "more-horizontal" | "more-vertical" | "notification-off" | "notification-on" | "object" | "pause-circle" | "phone-unavailable" | "phone" | "photo" | "picked" | "pie-chart" | "play-circle" | "present" | "refresh-circle" | "refresh" | "repeat" | "restricted" | "rotate" | "search-no" | "search" | "selector-checked" | "selector-circle-filled" | "selector-circle" | "send" | "settings-filled" | "settings" | "share" | "shopping-bag" | "shopping-cart" | "sort-filter-down" | "sort-filter-up" | "sound-off" | "sound-on" | "sprucebot" | "star-filled" | "star" | "sun" | "tag" | "time" | "tool" | "trending-down" | "trending-up" | "triangle" | "unlock" | "upload-cloud" | "upload" | "user-add" | "user-delete" | "user" | "users" | "video-off" | "video" | "warning" | "wifi" | "zoom-in" | "zoom-out") | undefined | null;
13729
13735
  /** Line icon position. */
13730
- 'lineIconPosition'?: ("left" | "bottom") | undefined | null;
13736
+ 'lineIconPosition'?: ("left" | "bottom" | "right") | undefined | null;
13731
13737
  /** Cell button click handler. */
13732
13738
  'onClick'?: ((options: {
13733
13739
  rowVc: HeartwoodTypes.ListRowViewController;
@@ -14718,6 +14724,9 @@ declare module '@sprucelabs/spruce-core-schemas/build/.spruce/schemas/core.schem
14718
14724
  }, {
14719
14725
  "value": "bottom";
14720
14726
  "label": "Bottom";
14727
+ }, {
14728
+ "value": "right";
14729
+ "label": "Right";
14721
14730
  }];
14722
14731
  };
14723
14732
  };
@@ -16703,7 +16712,7 @@ declare module '@sprucelabs/spruce-core-schemas/build/.spruce/schemas/core.schem
16703
16712
  /** Selected line icon. Only applies when the button is selected. Will override line icon if one is set. */
16704
16713
  'selectedLineIcon'?: ("add-circle" | "add-square" | "add" | "alarm" | "arrow-back" | "arrow-down-circle" | "arrow-down" | "arrow-next" | "arrow-up-circle" | "arrow-up" | "attachment" | "award-badge" | "binoculars" | "bolt" | "book-open" | "book" | "bookmark" | "calendar-add" | "calendar" | "camera" | "cellphone" | "checkmark" | "chevron-down" | "chevron-left" | "chevron-right" | "chevron-up" | "clipboard" | "clock" | "close-circle" | "close-square" | "close" | "code" | "coffee" | "command" | "corner-down-left" | "corner-down-right" | "corner-left-down" | "corner-left-up" | "corner-right-down" | "corner-right-up" | "corner-up-left" | "corner-up-right" | "crop" | "cube" | "delete" | "document-blank" | "document-new" | "document-text" | "download-cloud" | "download" | "edit-box" | "edit-line" | "email" | "emoji-happy" | "emoji-sad" | "external-link" | "fav-heart" | "fav-heart-filled" | "flag" | "flip-01" | "flip-02" | "folder" | "globe" | "hash-tag" | "headphones" | "help-buoy" | "help-circle" | "home" | "info" | "jump" | "layers" | "bar-graph" | "link-angle" | "link-flat" | "loader" | "location-pin" | "lock" | "logout" | "map" | "message-circle" | "message-square" | "mic-off" | "mic-on" | "minus-circle" | "minus-square" | "money-sign" | "more-horizontal" | "more-vertical" | "notification-off" | "notification-on" | "object" | "pause-circle" | "phone-unavailable" | "phone" | "photo" | "picked" | "pie-chart" | "play-circle" | "present" | "refresh-circle" | "refresh" | "repeat" | "restricted" | "rotate" | "search-no" | "search" | "selector-checked" | "selector-circle-filled" | "selector-circle" | "send" | "settings-filled" | "settings" | "share" | "shopping-bag" | "shopping-cart" | "sort-filter-down" | "sort-filter-up" | "sound-off" | "sound-on" | "sprucebot" | "star-filled" | "star" | "sun" | "tag" | "time" | "tool" | "trending-down" | "trending-up" | "triangle" | "unlock" | "upload-cloud" | "upload" | "user-add" | "user-delete" | "user" | "users" | "video-off" | "video" | "warning" | "wifi" | "zoom-in" | "zoom-out") | undefined | null;
16705
16714
  /** Line icon position. */
16706
- 'lineIconPosition'?: ("left" | "bottom") | undefined | null;
16715
+ 'lineIconPosition'?: ("left" | "bottom" | "right") | undefined | null;
16707
16716
  }
16708
16717
  interface ButtonBarButtonSchema extends SpruceSchema.Schema {
16709
16718
  id: 'buttonBarButton';
@@ -17677,6 +17686,9 @@ declare module '@sprucelabs/spruce-core-schemas/build/.spruce/schemas/core.schem
17677
17686
  }, {
17678
17687
  "value": "bottom";
17679
17688
  "label": "Bottom";
17689
+ }, {
17690
+ "value": "right";
17691
+ "label": "Right";
17680
17692
  }];
17681
17693
  };
17682
17694
  };
@@ -17713,7 +17725,7 @@ declare module '@sprucelabs/spruce-core-schemas/build/.spruce/schemas/core.schem
17713
17725
  /** Selected line icon. Only applies when the button is selected. Will override line icon if one is set. */
17714
17726
  'selectedLineIcon'?: ("add-circle" | "add-square" | "add" | "alarm" | "arrow-back" | "arrow-down-circle" | "arrow-down" | "arrow-next" | "arrow-up-circle" | "arrow-up" | "attachment" | "award-badge" | "binoculars" | "bolt" | "book-open" | "book" | "bookmark" | "calendar-add" | "calendar" | "camera" | "cellphone" | "checkmark" | "chevron-down" | "chevron-left" | "chevron-right" | "chevron-up" | "clipboard" | "clock" | "close-circle" | "close-square" | "close" | "code" | "coffee" | "command" | "corner-down-left" | "corner-down-right" | "corner-left-down" | "corner-left-up" | "corner-right-down" | "corner-right-up" | "corner-up-left" | "corner-up-right" | "crop" | "cube" | "delete" | "document-blank" | "document-new" | "document-text" | "download-cloud" | "download" | "edit-box" | "edit-line" | "email" | "emoji-happy" | "emoji-sad" | "external-link" | "fav-heart" | "fav-heart-filled" | "flag" | "flip-01" | "flip-02" | "folder" | "globe" | "hash-tag" | "headphones" | "help-buoy" | "help-circle" | "home" | "info" | "jump" | "layers" | "bar-graph" | "link-angle" | "link-flat" | "loader" | "location-pin" | "lock" | "logout" | "map" | "message-circle" | "message-square" | "mic-off" | "mic-on" | "minus-circle" | "minus-square" | "money-sign" | "more-horizontal" | "more-vertical" | "notification-off" | "notification-on" | "object" | "pause-circle" | "phone-unavailable" | "phone" | "photo" | "picked" | "pie-chart" | "play-circle" | "present" | "refresh-circle" | "refresh" | "repeat" | "restricted" | "rotate" | "search-no" | "search" | "selector-checked" | "selector-circle-filled" | "selector-circle" | "send" | "settings-filled" | "settings" | "share" | "shopping-bag" | "shopping-cart" | "sort-filter-down" | "sort-filter-up" | "sound-off" | "sound-on" | "sprucebot" | "star-filled" | "star" | "sun" | "tag" | "time" | "tool" | "trending-down" | "trending-up" | "triangle" | "unlock" | "upload-cloud" | "upload" | "user-add" | "user-delete" | "user" | "users" | "video-off" | "video" | "warning" | "wifi" | "zoom-in" | "zoom-out") | undefined | null;
17715
17727
  /** Line icon position. */
17716
- 'lineIconPosition'?: ("left" | "bottom") | undefined | null;
17728
+ 'lineIconPosition'?: ("left" | "bottom" | "right") | undefined | null;
17717
17729
  /** Click handler. */
17718
17730
  'onClick'?: (() => Promise<any> | any) | undefined | null;
17719
17731
  /** Style. */
@@ -18700,6 +18712,9 @@ declare module '@sprucelabs/spruce-core-schemas/build/.spruce/schemas/core.schem
18700
18712
  }, {
18701
18713
  "value": "bottom";
18702
18714
  "label": "Bottom";
18715
+ }, {
18716
+ "value": "right";
18717
+ "label": "Right";
18703
18718
  }];
18704
18719
  };
18705
18720
  };
@@ -18766,7 +18781,7 @@ declare module '@sprucelabs/spruce-core-schemas/build/.spruce/schemas/core.schem
18766
18781
  /** Selected line icon. Only applies when the button is selected. Will override line icon if one is set. */
18767
18782
  'selectedLineIcon'?: ("add-circle" | "add-square" | "add" | "alarm" | "arrow-back" | "arrow-down-circle" | "arrow-down" | "arrow-next" | "arrow-up-circle" | "arrow-up" | "attachment" | "award-badge" | "binoculars" | "bolt" | "book-open" | "book" | "bookmark" | "calendar-add" | "calendar" | "camera" | "cellphone" | "checkmark" | "chevron-down" | "chevron-left" | "chevron-right" | "chevron-up" | "clipboard" | "clock" | "close-circle" | "close-square" | "close" | "code" | "coffee" | "command" | "corner-down-left" | "corner-down-right" | "corner-left-down" | "corner-left-up" | "corner-right-down" | "corner-right-up" | "corner-up-left" | "corner-up-right" | "crop" | "cube" | "delete" | "document-blank" | "document-new" | "document-text" | "download-cloud" | "download" | "edit-box" | "edit-line" | "email" | "emoji-happy" | "emoji-sad" | "external-link" | "fav-heart" | "fav-heart-filled" | "flag" | "flip-01" | "flip-02" | "folder" | "globe" | "hash-tag" | "headphones" | "help-buoy" | "help-circle" | "home" | "info" | "jump" | "layers" | "bar-graph" | "link-angle" | "link-flat" | "loader" | "location-pin" | "lock" | "logout" | "map" | "message-circle" | "message-square" | "mic-off" | "mic-on" | "minus-circle" | "minus-square" | "money-sign" | "more-horizontal" | "more-vertical" | "notification-off" | "notification-on" | "object" | "pause-circle" | "phone-unavailable" | "phone" | "photo" | "picked" | "pie-chart" | "play-circle" | "present" | "refresh-circle" | "refresh" | "repeat" | "restricted" | "rotate" | "search-no" | "search" | "selector-checked" | "selector-circle-filled" | "selector-circle" | "send" | "settings-filled" | "settings" | "share" | "shopping-bag" | "shopping-cart" | "sort-filter-down" | "sort-filter-up" | "sound-off" | "sound-on" | "sprucebot" | "star-filled" | "star" | "sun" | "tag" | "time" | "tool" | "trending-down" | "trending-up" | "triangle" | "unlock" | "upload-cloud" | "upload" | "user-add" | "user-delete" | "user" | "users" | "video-off" | "video" | "warning" | "wifi" | "zoom-in" | "zoom-out") | undefined | null;
18768
18783
  /** Line icon position. */
18769
- 'lineIconPosition'?: ("left" | "bottom") | undefined | null;
18784
+ 'lineIconPosition'?: ("left" | "bottom" | "right") | undefined | null;
18770
18785
  /** Click handler. */
18771
18786
  'onClick'?: ((dropdown: HeartwoodTypes.DropdownController) => Promise<void> | void) | undefined | null;
18772
18787
  /** Style. */
@@ -19751,6 +19766,9 @@ declare module '@sprucelabs/spruce-core-schemas/build/.spruce/schemas/core.schem
19751
19766
  }, {
19752
19767
  "value": "bottom";
19753
19768
  "label": "Bottom";
19769
+ }, {
19770
+ "value": "right";
19771
+ "label": "Right";
19754
19772
  }];
19755
19773
  };
19756
19774
  };
@@ -559,6 +559,10 @@ export const buttonFields = {
559
559
  value: 'bottom',
560
560
  label: 'Bottom',
561
561
  },
562
+ {
563
+ value: 'right',
564
+ label: 'Right',
565
+ },
562
566
  ],
563
567
  },
564
568
  },
@@ -82,6 +82,9 @@ export default class SpruceError extends AbstractSpruceError {
82
82
  case 'INVALID_LOGIN_CONFIGURATION':
83
83
  message = 'A Invalid login configuration just happened!';
84
84
  break;
85
+ case 'BUTTON_NOT_FOUND':
86
+ message = `I could not find a button with the id '${options.id}'!`;
87
+ break;
85
88
  default:
86
89
  message = super.friendlyMessage();
87
90
  }
@@ -0,0 +1,11 @@
1
+ declare const _default: {
2
+ id: string;
3
+ name: string;
4
+ fields: {
5
+ id: {
6
+ type: "id";
7
+ isRequired: true;
8
+ };
9
+ };
10
+ };
11
+ export default _default;
@@ -0,0 +1,11 @@
1
+ import { buildErrorSchema } from '@sprucelabs/schema';
2
+ export default buildErrorSchema({
3
+ id: 'buttonNotFound',
4
+ name: 'button not found',
5
+ fields: {
6
+ id: {
7
+ type: 'id',
8
+ isRequired: true,
9
+ },
10
+ },
11
+ });
@@ -25,6 +25,7 @@ export { default as LineGraphViewController } from './viewControllers/charts/Lin
25
25
  export * from './viewControllers/ToolBelt.vc';
26
26
  export * from './viewControllers/form/Form.vc';
27
27
  export { default as LoginViewController } from './viewControllers/LoginCard.vc';
28
+ export { default as LoginCardViewController } from './viewControllers/LoginCard.vc';
28
29
  export * from './viewControllers/LoginCard.vc';
29
30
  export { default as FormBuilderCardViewControllerImpl } from './viewControllers/formBuilder/FormBuilderCard.vc';
30
31
  export { default as CountdownTimerViewController } from './viewControllers/countdownTimer/CountdownTimer.vc';
@@ -25,6 +25,7 @@ export { default as LineGraphViewController } from './viewControllers/charts/Lin
25
25
  export * from './viewControllers/ToolBelt.vc.js';
26
26
  export * from './viewControllers/form/Form.vc.js';
27
27
  export { default as LoginViewController } from './viewControllers/LoginCard.vc.js';
28
+ export { default as LoginCardViewController } from './viewControllers/LoginCard.vc.js';
28
29
  export * from './viewControllers/LoginCard.vc.js';
29
30
  export { default as FormBuilderCardViewControllerImpl } from './viewControllers/formBuilder/FormBuilderCard.vc.js';
30
31
  export { default as CountdownTimerViewController } from './viewControllers/countdownTimer/CountdownTimer.vc.js';
@@ -949,25 +949,25 @@ const vcAssert = {
949
949
  return this.assertControllerInstanceOf(model.controller, Class);
950
950
  }
951
951
  catch (_d) {
952
- assert.fail(errorMessage !== null && errorMessage !== void 0 ? errorMessage : `Expected your ${(_c = (_b = (_a = Object.getPrototypeOf(vc)) === null || _a === void 0 ? void 0 : _a.constructor) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : 'view controller'} to render a controller that is an instance of ${Class.name}, but it didn't! Make sure the view you're expecting is rendering itself as the controller (or another view controller). e.g.
952
+ assert.fail(errorMessage !== null && errorMessage !== void 0 ? errorMessage : `Expected your ${(_c = (_b = (_a = Object.getPrototypeOf(vc)) === null || _a === void 0 ? void 0 : _a.constructor) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : 'view controller'} to render a controller that is an instance of ${Class.name}, but it didn't! Make sure the view you're checking is rendering another view controller or itself as the controller e.g.
953
953
 
954
954
  1. Render your card into the dialog:
955
955
 
956
956
  this.renderInDialog(this.Controller('my-card', {}).render())
957
957
 
958
- 2. Rendering a SubView:
958
+ 2a. Rendering a SubView (recommended):
959
959
 
960
960
  public render() {
961
961
  return this.cardVc.render()
962
962
  }
963
963
 
964
- 3. Rendering as yourself (e.g. in a SkillViewController):
964
+ 2b. Rendering as yourself (e.g. in a SkillViewController):
965
965
 
966
966
  public render() {
967
967
  return {
968
968
  controller: this
969
969
  }
970
- } `);
970
+ }`);
971
971
  }
972
972
  return {};
973
973
  },
@@ -5,14 +5,14 @@ import AbstractViewController from './Abstract.vc';
5
5
  export default class LoginCardViewController extends AbstractViewController<Card> {
6
6
  private static _id;
7
7
  protected bigFormVc: BigFormViewController<LoginSchema>;
8
+ protected loginHandler?: LoginHandler;
9
+ protected loginFailedHandler?: (err: Error) => void;
10
+ protected shouldAllowPhoneLogin: boolean;
11
+ protected smsDisclaimer?: string | null;
12
+ protected shouldAllowEmailLogin: boolean;
8
13
  private _id;
9
- private loginHandler?;
10
14
  private userChallenge?;
11
- private loginFailedHandler?;
12
15
  private cardVc;
13
- private shouldAllowEmailLogin;
14
- private shouldAllowPhoneLogin;
15
- private smsDisclaimer?;
16
16
  constructor(options: LoginCardViewControllerOptions & ViewControllerOptions);
17
17
  private CardVc;
18
18
  private renderLoginWithEmailButton;
@@ -1,4 +1,4 @@
1
- import { Navigation, NavigationButton, ViewControllerOptions } from '../../types/heartwood.types';
1
+ import { Navigation, NavigationButton, NavigationItem, ViewControllerOptions } from '../../types/heartwood.types';
2
2
  import AbstractViewController from '../Abstract.vc';
3
3
  export default class NavigationViewController extends AbstractViewController<Navigation> {
4
4
  private model;
@@ -7,5 +7,6 @@ export default class NavigationViewController extends AbstractViewController<Nav
7
7
  show(): void;
8
8
  setButtons(buttons: NavigationButton[]): void;
9
9
  setShouldRenderButtonLabels(shouldRender: boolean): void;
10
+ updateButton(id: string, updates: Partial<NavigationItem>): void;
10
11
  render(): Navigation;
11
12
  }
@@ -1,3 +1,4 @@
1
+ import SpruceError from '../../errors/SpruceError.js';
1
2
  import removeUniversalViewOptions from '../../utilities/removeUniversalViewOptions.js';
2
3
  import AbstractViewController from '../Abstract.vc.js';
3
4
  export default class NavigationViewController extends AbstractViewController {
@@ -21,6 +22,21 @@ export default class NavigationViewController extends AbstractViewController {
21
22
  this.model.shouldRenderButtonLabels = shouldRender;
22
23
  this.triggerRender();
23
24
  }
25
+ updateButton(id, updates) {
26
+ var _a;
27
+ const buttons = (_a = this.model.buttons) !== null && _a !== void 0 ? _a : [];
28
+ const idx = buttons === null || buttons === void 0 ? void 0 : buttons.findIndex((b) => b.id === id);
29
+ if (idx === -1) {
30
+ throw new SpruceError({
31
+ code: 'BUTTON_NOT_FOUND',
32
+ id,
33
+ });
34
+ }
35
+ let button = buttons[idx];
36
+ button = Object.assign(Object.assign({}, button), updates);
37
+ buttons[idx] = button;
38
+ this.triggerRender();
39
+ }
24
40
  render() {
25
41
  return Object.assign({ controller: this }, this.model);
26
42
  }
package/build/index.d.ts CHANGED
@@ -25,6 +25,7 @@ export { default as LineGraphViewController } from './viewControllers/charts/Lin
25
25
  export * from './viewControllers/ToolBelt.vc';
26
26
  export * from './viewControllers/form/Form.vc';
27
27
  export { default as LoginViewController } from './viewControllers/LoginCard.vc';
28
+ export { default as LoginCardViewController } from './viewControllers/LoginCard.vc';
28
29
  export * from './viewControllers/LoginCard.vc';
29
30
  export { default as FormBuilderCardViewControllerImpl } from './viewControllers/formBuilder/FormBuilderCard.vc';
30
31
  export { default as CountdownTimerViewController } from './viewControllers/countdownTimer/CountdownTimer.vc';
package/build/index.js CHANGED
@@ -17,11 +17,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
17
17
  return (mod && mod.__esModule) ? mod : { "default": mod };
18
18
  };
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.WebRtcConnectionImpl = exports.MockRtcPeerConnection = exports.WebRtcStreamerImpl = exports.buildForm = exports.buildBigForm = exports.AuthenticatorImpl = exports.PolarAreaViewController = exports.SpyViewControllerExporter = exports.lockScreenAssert = exports.MockActiveRecordCard = exports.activeRecordListAssert = exports.activeRecordCardAssert = exports.buildActiveRecordList = exports.buildActiveRecordCard = exports.AbstractInputViewController = exports.AutocompleteInputViewController = exports.AbstractCalendarEventViewController = exports.RatingsViewController = exports.ProgressViewController = exports.StatsViewController = exports.FeedViewController = exports.ActiveRecordListViewController = exports.ActiveRecordCardViewController = exports.TalkingSprucebotViewController = exports.ButtonBarViewController = exports.CalendarViewController = exports.SwipeCardViewControllerImpl = exports.SwipeViewControllerImpl = exports.WebRtcPlayerViewController = exports.PagerViewController = exports.ProgressNavigatorViewController = exports.CountdownTimerViewController = exports.FormBuilderCardViewControllerImpl = exports.LoginViewController = exports.LineGraphViewController = exports.BarChartViewController = exports.ToolBeltViewController = exports.FormViewControllerImpl = exports.ListCellViewController = exports.ListRowViewController = exports.ListViewController = exports.NavigationViewController = exports.LockScreenSkillViewController = exports.DialogViewController = exports.ConfirmViewController = exports.CardViewControllerImpl = exports.ButtonGroupViewController = exports.AbstractAppController = exports.AbstractViewController = exports.AbstractSkillViewController = void 0;
21
- exports.themePropsSchema = exports.themeSchema = exports.cardFooterButtonSchema = exports.criticalErrorSchema = exports.sprucebotTypedMessageSentenceSchema = exports.sprucebotTypedMessageAvatarSchema = exports.selectInputChoiceSchema = exports.calendarEventColorOverrideSchema = exports.themeFontsSchema = exports.fontSettingSchema = exports.fontFamilySchema = exports.cardStylesSchema = exports.cardStyleSchema = exports.portalSchema = exports.listTextInputSchema = exports.listSelectInputSchema = exports.listCellButtonSchema = exports.dropdownButtonSchema = exports.bigFormSectionSchema = exports.textInputSchema = exports.phoneInputSchema = exports.inputSchema = exports.dropdownSchema = exports.sprucebotTypedMessageSchema = exports.talkingSprucebotSchema = exports.sprucebotAvatarSchema = exports.formBuilderImportExportObjectSchema = exports.videoSchema = exports.listCellSchema = exports.listRowSchema = exports.listSchema = exports.skillViewLayoutSchema = exports.cardSectionSchema = exports.cardHeaderSchema = exports.cardFooterSchema = exports.cardBodySchema = exports.cardSchema = exports.formSectionSchema = exports.formSchema = exports.textSchema = exports.lockScreenSchema = exports.dialogSchema = exports.buttonSchema = exports.lineIconSchema = exports.fancyIconSchema = exports.selectInputSchema = exports.skillViewSchema = exports.bigFormSchema = exports.controlBarSchema = exports.calendarEventColorsSchema = void 0;
22
- exports.vcAssertUtil = exports.feedAssert = exports.normalizeFormSectionFieldNamesUtil = exports.ViewControllerError = exports.MockAudioController = exports.SpyDevice = exports.StubStorage = exports.ViewControllerFactory = exports.ViewControllerImporter = exports.ViewControllerExporter = exports.statusIndicatorColorsSchema = exports.statusIndicatorSchema = exports.webRtcCropPointSchema = exports.webRtcPlayerSchema = exports.pagerSchema = exports.polarAreaDataItemSchema = exports.polarAreaSchema = exports.inputButtonSchema = exports.mapPinSchema = exports.mapSchema = exports.latLngSchema = exports.formBuilderImportExportPageSchema = exports.autocompleteSuggestionSchema = exports.autocompleteInputSchema = exports.feedSchema = exports.calendarShiftSchema = exports.receiptTotalSchema = exports.receiptSectionSchema = exports.receiptLineItemSchema = exports.receiptHeaderSchema = exports.receiptSchema = exports.listDateInputSchema = exports.calendarSelectedDateSchema = exports.calendarEventSchema = exports.ratingsInputSchema = exports.listRatingsInputSchema = exports.ratingsSchema = exports.progressSchema = exports.statsStatSchema = exports.statsSchema = exports.toggleInputSchema = exports.listToggleInputSchema = exports.addressInputSchema = exports.buttonBarButtonSchema = exports.buttonBarSchema = exports.toolBeltToolSchema = exports.toolBeltSchema = exports.calendarTimeSchema = exports.calendarPersonSchema = exports.calendarSchema = void 0;
23
- exports.navigationButtonDropdownSchema = exports.chartDataSetSchema = exports.chartDataPointSchema = exports.lineGraphSchema = exports.barChartSchema = exports.progressDetailsSchema = exports.progressNavigatorStepSchema = exports.progressNavigatorSchema = exports.countdownTimerSchema = exports.permissionContractReferenceSchema = exports.navigationButtonSchema = exports.navigationSchema = exports.ToolBeltStateMachine = exports.removeUniversalViewOptions = exports.buildSkillViewLayout = exports.splitCardsIntoColumns = exports.listUtil = exports.mapInteractor = exports.mapAssert = exports.renderUtil = exports.routerTestPatcher = exports.dialogTestPatcher = exports.confirmTestPatcher = exports.calendarSeeder = exports.interactionUtil = exports.talkingSprucebotInteractor = exports.webRtcInteractor = exports.feedInteractor = exports.countdownTimerInteractor = exports.countdownTimerAssert = exports.calendarInteractor = exports.interactor = exports.normalizeScopeFromVc = exports.autocompleteInteractor = exports.chartAssert = exports.progressNavigatorAssert = exports.generateCropPointValues = exports.webRtcAssert = exports.formAssert = exports.autocompleteAssert = exports.listAssert = exports.buttonAssert = exports.deviceAssert = exports.navigationAssert = exports.toolBeltAssert = exports.toastAssert = exports.vcPluginAssert = exports.vcDurationAssert = exports.pagerAssert = exports.vcAssert = void 0;
24
- exports.MockToastMessageHandler = exports.toastMessageSchema = exports.navigationRouteSchema = exports.routerDestinationSchema = exports.navigationDropdownButtonSchema = void 0;
20
+ exports.MockRtcPeerConnection = exports.WebRtcStreamerImpl = exports.buildForm = exports.buildBigForm = exports.AuthenticatorImpl = exports.PolarAreaViewController = exports.SpyViewControllerExporter = exports.lockScreenAssert = exports.MockActiveRecordCard = exports.activeRecordListAssert = exports.activeRecordCardAssert = exports.buildActiveRecordList = exports.buildActiveRecordCard = exports.AbstractInputViewController = exports.AutocompleteInputViewController = exports.AbstractCalendarEventViewController = exports.RatingsViewController = exports.ProgressViewController = exports.StatsViewController = exports.FeedViewController = exports.ActiveRecordListViewController = exports.ActiveRecordCardViewController = exports.TalkingSprucebotViewController = exports.ButtonBarViewController = exports.CalendarViewController = exports.SwipeCardViewControllerImpl = exports.SwipeViewControllerImpl = exports.WebRtcPlayerViewController = exports.PagerViewController = exports.ProgressNavigatorViewController = exports.CountdownTimerViewController = exports.FormBuilderCardViewControllerImpl = exports.LoginCardViewController = exports.LoginViewController = exports.LineGraphViewController = exports.BarChartViewController = exports.ToolBeltViewController = exports.FormViewControllerImpl = exports.ListCellViewController = exports.ListRowViewController = exports.ListViewController = exports.NavigationViewController = exports.LockScreenSkillViewController = exports.DialogViewController = exports.ConfirmViewController = exports.CardViewControllerImpl = exports.ButtonGroupViewController = exports.AbstractAppController = exports.AbstractViewController = exports.AbstractSkillViewController = void 0;
21
+ exports.themeSchema = exports.cardFooterButtonSchema = exports.criticalErrorSchema = exports.sprucebotTypedMessageSentenceSchema = exports.sprucebotTypedMessageAvatarSchema = exports.selectInputChoiceSchema = exports.calendarEventColorOverrideSchema = exports.themeFontsSchema = exports.fontSettingSchema = exports.fontFamilySchema = exports.cardStylesSchema = exports.cardStyleSchema = exports.portalSchema = exports.listTextInputSchema = exports.listSelectInputSchema = exports.listCellButtonSchema = exports.dropdownButtonSchema = exports.bigFormSectionSchema = exports.textInputSchema = exports.phoneInputSchema = exports.inputSchema = exports.dropdownSchema = exports.sprucebotTypedMessageSchema = exports.talkingSprucebotSchema = exports.sprucebotAvatarSchema = exports.formBuilderImportExportObjectSchema = exports.videoSchema = exports.listCellSchema = exports.listRowSchema = exports.listSchema = exports.skillViewLayoutSchema = exports.cardSectionSchema = exports.cardHeaderSchema = exports.cardFooterSchema = exports.cardBodySchema = exports.cardSchema = exports.formSectionSchema = exports.formSchema = exports.textSchema = exports.lockScreenSchema = exports.dialogSchema = exports.buttonSchema = exports.lineIconSchema = exports.fancyIconSchema = exports.selectInputSchema = exports.skillViewSchema = exports.bigFormSchema = exports.controlBarSchema = exports.calendarEventColorsSchema = exports.WebRtcConnectionImpl = void 0;
22
+ exports.feedAssert = exports.normalizeFormSectionFieldNamesUtil = exports.ViewControllerError = exports.MockAudioController = exports.SpyDevice = exports.StubStorage = exports.ViewControllerFactory = exports.ViewControllerImporter = exports.ViewControllerExporter = exports.statusIndicatorColorsSchema = exports.statusIndicatorSchema = exports.webRtcCropPointSchema = exports.webRtcPlayerSchema = exports.pagerSchema = exports.polarAreaDataItemSchema = exports.polarAreaSchema = exports.inputButtonSchema = exports.mapPinSchema = exports.mapSchema = exports.latLngSchema = exports.formBuilderImportExportPageSchema = exports.autocompleteSuggestionSchema = exports.autocompleteInputSchema = exports.feedSchema = exports.calendarShiftSchema = exports.receiptTotalSchema = exports.receiptSectionSchema = exports.receiptLineItemSchema = exports.receiptHeaderSchema = exports.receiptSchema = exports.listDateInputSchema = exports.calendarSelectedDateSchema = exports.calendarEventSchema = exports.ratingsInputSchema = exports.listRatingsInputSchema = exports.ratingsSchema = exports.progressSchema = exports.statsStatSchema = exports.statsSchema = exports.toggleInputSchema = exports.listToggleInputSchema = exports.addressInputSchema = exports.buttonBarButtonSchema = exports.buttonBarSchema = exports.toolBeltToolSchema = exports.toolBeltSchema = exports.calendarTimeSchema = exports.calendarPersonSchema = exports.calendarSchema = exports.themePropsSchema = void 0;
23
+ exports.chartDataSetSchema = exports.chartDataPointSchema = exports.lineGraphSchema = exports.barChartSchema = exports.progressDetailsSchema = exports.progressNavigatorStepSchema = exports.progressNavigatorSchema = exports.countdownTimerSchema = exports.permissionContractReferenceSchema = exports.navigationButtonSchema = exports.navigationSchema = exports.ToolBeltStateMachine = exports.removeUniversalViewOptions = exports.buildSkillViewLayout = exports.splitCardsIntoColumns = exports.listUtil = exports.mapInteractor = exports.mapAssert = exports.renderUtil = exports.routerTestPatcher = exports.dialogTestPatcher = exports.confirmTestPatcher = exports.calendarSeeder = exports.interactionUtil = exports.talkingSprucebotInteractor = exports.webRtcInteractor = exports.feedInteractor = exports.countdownTimerInteractor = exports.countdownTimerAssert = exports.calendarInteractor = exports.interactor = exports.normalizeScopeFromVc = exports.autocompleteInteractor = exports.chartAssert = exports.progressNavigatorAssert = exports.generateCropPointValues = exports.webRtcAssert = exports.formAssert = exports.autocompleteAssert = exports.listAssert = exports.buttonAssert = exports.deviceAssert = exports.navigationAssert = exports.toolBeltAssert = exports.toastAssert = exports.vcPluginAssert = exports.vcDurationAssert = exports.pagerAssert = exports.vcAssert = exports.vcAssertUtil = void 0;
24
+ exports.MockToastMessageHandler = exports.toastMessageSchema = exports.navigationRouteSchema = exports.routerDestinationSchema = exports.navigationDropdownButtonSchema = exports.navigationButtonDropdownSchema = void 0;
25
25
  __exportStar(require("./constants"), exports);
26
26
  __exportStar(require("./types/heartwood.types"), exports);
27
27
  __exportStar(require("./utilities/removeUniversalViewOptions"), exports);
@@ -66,6 +66,8 @@ __exportStar(require("./viewControllers/ToolBelt.vc"), exports);
66
66
  __exportStar(require("./viewControllers/form/Form.vc"), exports);
67
67
  var LoginCard_vc_1 = require("./viewControllers/LoginCard.vc");
68
68
  Object.defineProperty(exports, "LoginViewController", { enumerable: true, get: function () { return __importDefault(LoginCard_vc_1).default; } });
69
+ var LoginCard_vc_2 = require("./viewControllers/LoginCard.vc");
70
+ Object.defineProperty(exports, "LoginCardViewController", { enumerable: true, get: function () { return __importDefault(LoginCard_vc_2).default; } });
69
71
  __exportStar(require("./viewControllers/LoginCard.vc"), exports);
70
72
  var FormBuilderCard_vc_1 = require("./viewControllers/formBuilder/FormBuilderCard.vc");
71
73
  Object.defineProperty(exports, "FormBuilderCardViewControllerImpl", { enumerable: true, get: function () { return __importDefault(FormBuilderCard_vc_1).default; } });
@@ -907,25 +907,25 @@ const vcAssert = {
907
907
  catch {
908
908
  test_utils_1.assert.fail(errorMessage ??
909
909
  `Expected your ${Object.getPrototypeOf(vc)?.constructor?.name ??
910
- 'view controller'} to render a controller that is an instance of ${Class.name}, but it didn't! Make sure the view you're expecting is rendering itself as the controller (or another view controller). e.g.
910
+ 'view controller'} to render a controller that is an instance of ${Class.name}, but it didn't! Make sure the view you're checking is rendering another view controller or itself as the controller e.g.
911
911
 
912
912
  1. Render your card into the dialog:
913
913
 
914
914
  this.renderInDialog(this.Controller('my-card', {}).render())
915
915
 
916
- 2. Rendering a SubView:
916
+ 2a. Rendering a SubView (recommended):
917
917
 
918
918
  public render() {
919
919
  return this.cardVc.render()
920
920
  }
921
921
 
922
- 3. Rendering as yourself (e.g. in a SkillViewController):
922
+ 2b. Rendering as yourself (e.g. in a SkillViewController):
923
923
 
924
924
  public render() {
925
925
  return {
926
926
  controller: this
927
927
  }
928
- } `);
928
+ }`);
929
929
  }
930
930
  return {};
931
931
  },
@@ -5,14 +5,14 @@ import AbstractViewController from './Abstract.vc';
5
5
  export default class LoginCardViewController extends AbstractViewController<Card> {
6
6
  private static _id;
7
7
  protected bigFormVc: BigFormViewController<LoginSchema>;
8
+ protected loginHandler?: LoginHandler;
9
+ protected loginFailedHandler?: (err: Error) => void;
10
+ protected shouldAllowPhoneLogin: boolean;
11
+ protected smsDisclaimer?: string | null;
12
+ protected shouldAllowEmailLogin: boolean;
8
13
  private _id;
9
- private loginHandler?;
10
14
  private userChallenge?;
11
- private loginFailedHandler?;
12
15
  private cardVc;
13
- private shouldAllowEmailLogin;
14
- private shouldAllowPhoneLogin;
15
- private smsDisclaimer?;
16
16
  constructor(options: LoginCardViewControllerOptions & ViewControllerOptions);
17
17
  private CardVc;
18
18
  private renderLoginWithEmailButton;
@@ -1,4 +1,4 @@
1
- import { Navigation, NavigationButton, ViewControllerOptions } from '../../types/heartwood.types';
1
+ import { Navigation, NavigationButton, NavigationItem, ViewControllerOptions } from '../../types/heartwood.types';
2
2
  import AbstractViewController from '../Abstract.vc';
3
3
  export default class NavigationViewController extends AbstractViewController<Navigation> {
4
4
  private model;
@@ -7,5 +7,6 @@ export default class NavigationViewController extends AbstractViewController<Nav
7
7
  show(): void;
8
8
  setButtons(buttons: NavigationButton[]): void;
9
9
  setShouldRenderButtonLabels(shouldRender: boolean): void;
10
+ updateButton(id: string, updates: Partial<NavigationItem>): void;
10
11
  render(): Navigation;
11
12
  }
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ const SpruceError_1 = __importDefault(require("../../errors/SpruceError"));
6
7
  const removeUniversalViewOptions_1 = __importDefault(require("../../utilities/removeUniversalViewOptions"));
7
8
  const Abstract_vc_1 = __importDefault(require("../Abstract.vc"));
8
9
  class NavigationViewController extends Abstract_vc_1.default {
@@ -26,6 +27,23 @@ class NavigationViewController extends Abstract_vc_1.default {
26
27
  this.model.shouldRenderButtonLabels = shouldRender;
27
28
  this.triggerRender();
28
29
  }
30
+ updateButton(id, updates) {
31
+ const buttons = this.model.buttons ?? [];
32
+ const idx = buttons?.findIndex((b) => b.id === id);
33
+ if (idx === -1) {
34
+ throw new SpruceError_1.default({
35
+ code: 'BUTTON_NOT_FOUND',
36
+ id,
37
+ });
38
+ }
39
+ let button = buttons[idx];
40
+ button = {
41
+ ...button,
42
+ ...updates,
43
+ };
44
+ buttons[idx] = button;
45
+ this.triggerRender();
46
+ }
29
47
  render() {
30
48
  return { controller: this, ...this.model };
31
49
  }
package/package.json CHANGED
@@ -13,7 +13,7 @@
13
13
  "sideEffects": false,
14
14
  "license": "MIT",
15
15
  "description": "All the power of Heartwood in one, convenient package.",
16
- "version": "126.11.17",
16
+ "version": "126.12.0",
17
17
  "skill": {
18
18
  "namespace": "HeartwoodViewControllers",
19
19
  "commandOverrides": {
@@ -74,7 +74,7 @@
74
74
  "@babel/preset-env": "^7.28.3",
75
75
  "@babel/preset-typescript": "^7.27.1",
76
76
  "@babel/runtime": "^7.28.4",
77
- "@sprucelabs/calendar-utils": "^43.1.37",
77
+ "@sprucelabs/calendar-utils": "^43.1.38",
78
78
  "@sprucelabs/error": "^7.1.30",
79
79
  "@sprucelabs/globby": "^2.0.506",
80
80
  "@sprucelabs/mercury-core-events": "^27.4.9",