@govtechsg/sgds-web-component 1.1.0 → 1.2.1

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 (133) hide show
  1. package/Masthead/index.js +1 -1
  2. package/base/sgds-element.cjs2.js +1 -1
  3. package/base/sgds-element2.js +1 -1
  4. package/components/Accordion/index.umd.js +3 -3
  5. package/components/Accordion/index.umd.js.map +1 -1
  6. package/components/Accordion/sgds-accordion.cjs.js +2 -2
  7. package/components/Accordion/sgds-accordion.cjs.js.map +1 -1
  8. package/components/Accordion/sgds-accordion.js +2 -2
  9. package/components/Accordion/sgds-accordion.js.map +1 -1
  10. package/components/ActionCard/index.umd.js +1 -1
  11. package/components/Alert/index.umd.js +1 -1
  12. package/components/Badge/index.umd.js +1 -1
  13. package/components/Breadcrumb/index.umd.js +1 -1
  14. package/components/Button/index.umd.js +1 -1
  15. package/components/Card/index.umd.js +5 -3
  16. package/components/Card/index.umd.js.map +1 -1
  17. package/components/Card/sgds-card.cjs.js +2 -1
  18. package/components/Card/sgds-card.cjs.js.map +1 -1
  19. package/components/Card/sgds-card.cjs2.js +10 -0
  20. package/components/Card/sgds-card.cjs2.js.map +1 -0
  21. package/components/Card/sgds-card.d.ts +1 -1
  22. package/components/Card/sgds-card.js +2 -1
  23. package/components/Card/sgds-card.js.map +1 -1
  24. package/components/Card/sgds-card2.js +6 -0
  25. package/components/Card/sgds-card2.js.map +1 -0
  26. package/components/Checkbox/index.umd.js +1 -1
  27. package/components/ComboBox/index.umd.js +10 -5
  28. package/components/ComboBox/index.umd.js.map +1 -1
  29. package/components/Datepicker/datepicker-calendar.cjs.js +43 -23
  30. package/components/Datepicker/datepicker-calendar.cjs.js.map +1 -1
  31. package/components/Datepicker/datepicker-calendar.cjs2.js +1 -1
  32. package/components/Datepicker/datepicker-calendar.d.ts +0 -1
  33. package/components/Datepicker/datepicker-calendar.js +43 -23
  34. package/components/Datepicker/datepicker-calendar.js.map +1 -1
  35. package/components/Datepicker/datepicker-calendar2.js +1 -1
  36. package/components/Datepicker/datepicker-header.cjs.js +44 -9
  37. package/components/Datepicker/datepicker-header.cjs.js.map +1 -1
  38. package/components/Datepicker/datepicker-header.cjs2.js +1 -1
  39. package/components/Datepicker/datepicker-header.d.ts +5 -1
  40. package/components/Datepicker/datepicker-header.js +44 -9
  41. package/components/Datepicker/datepicker-header.js.map +1 -1
  42. package/components/Datepicker/datepicker-header2.js +1 -1
  43. package/components/Datepicker/datepicker-input.cjs.js +4 -0
  44. package/components/Datepicker/datepicker-input.cjs.js.map +1 -1
  45. package/components/Datepicker/datepicker-input.d.ts +1 -0
  46. package/components/Datepicker/datepicker-input.js +4 -0
  47. package/components/Datepicker/datepicker-input.js.map +1 -1
  48. package/components/Datepicker/index.umd.js +252 -166
  49. package/components/Datepicker/index.umd.js.map +1 -1
  50. package/components/Datepicker/sgds-datepicker.cjs.js +25 -2
  51. package/components/Datepicker/sgds-datepicker.cjs.js.map +1 -1
  52. package/components/Datepicker/sgds-datepicker.d.ts +7 -1
  53. package/components/Datepicker/sgds-datepicker.js +25 -2
  54. package/components/Datepicker/sgds-datepicker.js.map +1 -1
  55. package/components/Datepicker/types.d.ts +0 -3
  56. package/components/Drawer/index.umd.js +1 -1
  57. package/components/Dropdown/index.umd.js +1 -1
  58. package/components/FileUpload/index.umd.js +2 -1
  59. package/components/FileUpload/index.umd.js.map +1 -1
  60. package/components/FileUpload/sgds-file-upload.cjs.js +1 -0
  61. package/components/FileUpload/sgds-file-upload.cjs.js.map +1 -1
  62. package/components/FileUpload/sgds-file-upload.d.ts +1 -0
  63. package/components/FileUpload/sgds-file-upload.js +1 -0
  64. package/components/FileUpload/sgds-file-upload.js.map +1 -1
  65. package/components/Footer/index.umd.js +1 -1
  66. package/components/Input/index.umd.js +10 -5
  67. package/components/Input/index.umd.js.map +1 -1
  68. package/components/Input/sgds-input.cjs.js +9 -4
  69. package/components/Input/sgds-input.cjs.js.map +1 -1
  70. package/components/Input/sgds-input.d.ts +1 -0
  71. package/components/Input/sgds-input.js +9 -4
  72. package/components/Input/sgds-input.js.map +1 -1
  73. package/components/Mainnav/index.umd.js +5989 -6128
  74. package/components/Mainnav/index.umd.js.map +1 -1
  75. package/components/Mainnav/sgds-mainnav.cjs.js +102 -29
  76. package/components/Mainnav/sgds-mainnav.cjs.js.map +1 -1
  77. package/components/Mainnav/sgds-mainnav.d.ts +16 -4
  78. package/components/Mainnav/sgds-mainnav.js +103 -26
  79. package/components/Mainnav/sgds-mainnav.js.map +1 -1
  80. package/components/Masthead/index.umd.js +1 -1
  81. package/components/Modal/index.umd.js +1 -1
  82. package/components/Pagination/index.umd.js +231 -41
  83. package/components/Pagination/index.umd.js.map +1 -1
  84. package/components/Pagination/sgds-pagination.cjs.js +94 -39
  85. package/components/Pagination/sgds-pagination.cjs.js.map +1 -1
  86. package/components/Pagination/sgds-pagination.cjs2.js +1 -1
  87. package/components/Pagination/sgds-pagination.d.ts +20 -13
  88. package/components/Pagination/sgds-pagination.js +95 -40
  89. package/components/Pagination/sgds-pagination.js.map +1 -1
  90. package/components/Pagination/sgds-pagination2.js +1 -1
  91. package/components/Progress/index.umd.js +1 -1
  92. package/components/QuantityToggle/index.umd.js +26 -8
  93. package/components/QuantityToggle/index.umd.js.map +1 -1
  94. package/components/QuantityToggle/sgds-quantity-toggle.cjs.js +25 -7
  95. package/components/QuantityToggle/sgds-quantity-toggle.cjs.js.map +1 -1
  96. package/components/QuantityToggle/sgds-quantity-toggle.d.ts +1 -0
  97. package/components/QuantityToggle/sgds-quantity-toggle.js +25 -7
  98. package/components/QuantityToggle/sgds-quantity-toggle.js.map +1 -1
  99. package/components/Radio/index.umd.js +1 -1
  100. package/components/Sidenav/index.umd.js +505 -1648
  101. package/components/Sidenav/index.umd.js.map +1 -1
  102. package/components/Sidenav/sgds-sidenav-item.cjs.js +122 -45
  103. package/components/Sidenav/sgds-sidenav-item.cjs.js.map +1 -1
  104. package/components/Sidenav/sgds-sidenav-item.d.ts +19 -8
  105. package/components/Sidenav/sgds-sidenav-item.js +123 -42
  106. package/components/Sidenav/sgds-sidenav-item.js.map +1 -1
  107. package/components/Sidenav/sgds-sidenav.cjs.js +38 -12
  108. package/components/Sidenav/sgds-sidenav.cjs.js.map +1 -1
  109. package/components/Sidenav/sgds-sidenav.cjs2.js +1 -1
  110. package/components/Sidenav/sgds-sidenav.d.ts +9 -0
  111. package/components/Sidenav/sgds-sidenav.js +39 -13
  112. package/components/Sidenav/sgds-sidenav.js.map +1 -1
  113. package/components/Sidenav/sgds-sidenav2.js +1 -1
  114. package/components/Spinner/index.umd.js +1 -1
  115. package/components/Stepper/index.umd.js +1 -1
  116. package/components/Tab/index.umd.js +1 -1
  117. package/components/Table/index.umd.js +1 -1
  118. package/components/Textarea/index.umd.js +1 -1
  119. package/components/Toast/index.umd.js +1 -1
  120. package/components/Tooltip/index.umd.js +1 -1
  121. package/components/index.umd.js +557 -560
  122. package/components/index.umd.js.map +1 -1
  123. package/index.umd.js +557 -560
  124. package/index.umd.js.map +1 -1
  125. package/package.json +2 -2
  126. package/react/mainnav/index.cjs.js +6 -1
  127. package/react/mainnav/index.cjs.js.map +1 -1
  128. package/react/mainnav/index.js +6 -1
  129. package/react/mainnav/index.js.map +1 -1
  130. package/react/sidenav-item/index.cjs.js +5 -1
  131. package/react/sidenav-item/index.cjs.js.map +1 -1
  132. package/react/sidenav-item/index.js +5 -1
  133. package/react/sidenav-item/index.js.map +1 -1
@@ -47,9 +47,26 @@ class SgdsQuantityToggle extends sgdsElement["default"] {
47
47
  this.inputId = generateId["default"]("quantity-toggle", "input");
48
48
  }
49
49
  handleChange(event) {
50
+ if (parseInt(this.input.value) < this.step || this.input.value === "") {
51
+ this.input.value = "0";
52
+ }
50
53
  this.value = parseInt(this.input.value);
51
54
  this.emit(event);
52
55
  }
56
+ handleKeyDown(event) {
57
+ const allowedKeys = [
58
+ "Backspace",
59
+ "ArrowUp",
60
+ "ArrowDown",
61
+ "ArrowLeft",
62
+ "ArrowRight",
63
+ ...Array.from(Array(10).keys()).map(key => key.toString())
64
+ ];
65
+ // Allow keydown event only if the pressed key is in the allowedKeys array
66
+ if (!allowedKeys.includes(event.key)) {
67
+ event.preventDefault();
68
+ }
69
+ }
53
70
  /** Simulates a click on the plus button */
54
71
  plus() {
55
72
  this.plusBtn.click();
@@ -95,7 +112,7 @@ class SgdsQuantityToggle extends sgdsElement["default"] {
95
112
  [`btn-${this.buttonVariant}`]: this.buttonVariant
96
113
  })}
97
114
  @click=${this.onMinus}
98
- ?disabled=${this.disabled}
115
+ ?disabled=${this.disabled || (this.min !== undefined ? this.value <= this.min : this.value < 1)}
99
116
  >
100
117
  <svg
101
118
  xmlns="http://www.w3.org/2000/svg"
@@ -118,6 +135,7 @@ class SgdsQuantityToggle extends sgdsElement["default"] {
118
135
  .value=${live_js.live(this.value.toString())}
119
136
  @change=${() => this.handleChange("sgds-change")}
120
137
  @input=${() => this.handleChange("sgds-input")}
138
+ @keydown=${this.handleKeyDown}
121
139
  ?disabled=${this.disabled}
122
140
  id=${this.inputId}
123
141
  aria-label="quantity"
@@ -131,7 +149,7 @@ class SgdsQuantityToggle extends sgdsElement["default"] {
131
149
  [`btn-${this.buttonVariant}`]: this.buttonVariant
132
150
  })}
133
151
  @click=${this.onPlus}
134
- ?disabled=${this.disabled}
152
+ ?disabled=${this.disabled || (this.max !== undefined && this.max && this.value >= this.max)}
135
153
  >
136
154
  <svg
137
155
  xmlns="http://www.w3.org/2000/svg"
@@ -146,8 +164,8 @@ class SgdsQuantityToggle extends sgdsElement["default"] {
146
164
  />
147
165
  </svg>
148
166
  </button>
149
- <div id="announcer" role="region" aria-live="assertive" class="visually-hidden">${this.value}</div>
150
167
  </div>
168
+ <div id="announcer" role="region" aria-live="assertive" class="visually-hidden">${this.value}</div>
151
169
  `;
152
170
  }
153
171
  }
@@ -162,7 +180,7 @@ tslib.__decorate([
162
180
  decorators_js.query("button[aria-label^='decrease by']")
163
181
  ], SgdsQuantityToggle.prototype, "minusBtn", void 0);
164
182
  tslib.__decorate([
165
- decorators_js.property({ reflect: true })
183
+ decorators_js.property({ type: String, reflect: true })
166
184
  ], SgdsQuantityToggle.prototype, "name", void 0);
167
185
  tslib.__decorate([
168
186
  decorators_js.property({ type: Number, reflect: true })
@@ -174,16 +192,16 @@ tslib.__decorate([
174
192
  decorators_js.property()
175
193
  ], SgdsQuantityToggle.prototype, "size", void 0);
176
194
  tslib.__decorate([
177
- decorators_js.property({ reflect: true, type: Number })
195
+ decorators_js.property({ type: Number, reflect: true })
178
196
  ], SgdsQuantityToggle.prototype, "value", void 0);
179
197
  tslib.__decorate([
180
198
  decorators_js.property({ type: Boolean, reflect: true })
181
199
  ], SgdsQuantityToggle.prototype, "disabled", void 0);
182
200
  tslib.__decorate([
183
- decorators_js.property({ type: String, reflect: true })
201
+ decorators_js.property({ type: String })
184
202
  ], SgdsQuantityToggle.prototype, "buttonVariant", void 0);
185
203
  tslib.__decorate([
186
- decorators_js.property({ type: Number, reflect: true })
204
+ decorators_js.property({ type: Number })
187
205
  ], SgdsQuantityToggle.prototype, "step", void 0);
188
206
  tslib.__decorate([
189
207
  defaultvalue.defaultValue()
@@ -1 +1 @@
1
- {"version":3,"file":"sgds-quantity-toggle.cjs.js","sources":["../../../src/components/QuantityToggle/sgds-quantity-toggle.ts"],"sourcesContent":["import { property, query } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport { live } from \"lit/directives/live.js\";\nimport { html } from \"lit/static-html.js\";\nimport SgdsElement from \"../../base/sgds-element\";\nimport { defaultValue } from \"../../utils/defaultvalue\";\nimport { FormSubmitController, SgdsFormControl } from \"../../utils/form\";\nimport genId from \"../../utils/generateId\";\nimport { ButtonVariant } from \"../Button/sgds-button\";\nimport styles from \"./sgds-quantity-toggle.scss\";\n\n/**\n * @summary The quantity toggle component is used to increase or decrease an incremental venue, best used when the user needs to enter or adjust the quantity of a selected item.\n *\n * @csspart base - The base wrapper of the quantity toggle component.\n * @csspart button - The plus and minus button of quantity toggle\n *\n * @event sgds-change - Emitted when an alteration to the control's value is committed by the user.\n * @event sgds-input - Emitted when the control receives input and its value changes.\n *\n */\nexport class SgdsQuantityToggle extends SgdsElement implements SgdsFormControl {\n /**@internal */\n @query(\"input.form-control\") private input: HTMLInputElement;\n /**@internal */\n @query(\"button[aria-label^='increase by']\") private plusBtn: HTMLButtonElement;\n /**@internal */\n @query(\"button[aria-label^='decrease by']\") private minusBtn: HTMLButtonElement;\n\n static styles = [SgdsElement.styles, styles];\n /**@internal */\n private readonly formSubmitController = new FormSubmitController(this);\n\n /** The name of the input */\n @property({ reflect: true }) name: string;\n\n /** The input's minimum value. */\n @property({ type: Number, reflect: true }) min: number;\n /** The input's maximum value. */\n @property({ type: Number, reflect: true }) max: number;\n\n /**Controls the size of the quantity toggle */\n @property() size: \"sm\" | \"lg\" = \"sm\";\n\n /**The input's value. Set to 0 by default */\n @property({ reflect: true, type: Number }) value = 0;\n\n /** Disables the entire quantity toggle */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n /** The quantity toggle's button variants */\n @property({ type: String, reflect: true }) buttonVariant: ButtonVariant = \"primary\";\n\n /**\n * Controls the incremental / decremental value of the input\n */\n @property({ type: Number, reflect: true }) step = 1;\n\n /** Gets or sets the default value used to reset this element. The initial value corresponds to the one originally specified in the HTML that created this element. */\n @defaultValue()\n defaultValue = 0;\n\n /** @internal The id forwarded to input element */\n private inputId: string = genId(\"quantity-toggle\", \"input\");\n\n handleChange(event: string) {\n this.value = parseInt(this.input.value);\n this.emit(event);\n }\n /** Simulates a click on the plus button */\n public plus() {\n this.plusBtn.click();\n }\n /** Simulates a click on the minus button */\n public minus() {\n this.minusBtn.click();\n }\n\n onPlus(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.value = parseInt(this.input.value) + parseInt(this.input.step);\n }\n\n onMinus(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n if (this.value < this.step) {\n this.value = 0;\n } else {\n this.value = parseInt(this.input.value) - parseInt(this.input.step);\n }\n }\n render() {\n return html`\n <div\n part=\"base\"\n class=\"${classMap({\n sgds: true,\n disabled: this.disabled,\n \"input-group\": true,\n [`input-group-${this.size}`]: this.size\n })}\"\n variant=\"quantity-toggle\"\n size=${this.size}\n >\n <button\n aria-label=${`decrease by ${this.step}`}\n part=\"button\"\n class=${classMap({\n sgds: true,\n btn: true,\n [`btn-${this.buttonVariant}`]: this.buttonVariant\n })}\n @click=${this.onMinus}\n ?disabled=${this.disabled}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n class=\"bi bi-dash\"\n viewBox=\"0 0 16 16\"\n >\n <path d=\"M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z\" />\n </svg>\n </button>\n <input\n type=\"number\"\n class=\"form-control ${\"form-control-\" + this.size} text-center\"\n name=${ifDefined(this.name)}\n step=${ifDefined(this.step)}\n min=${ifDefined(this.min)}\n max=${ifDefined(this.max)}\n .value=${live(this.value.toString())}\n @change=${() => this.handleChange(\"sgds-change\")}\n @input=${() => this.handleChange(\"sgds-input\")}\n ?disabled=${this.disabled}\n id=${this.inputId}\n aria-label=\"quantity\"\n />\n <button\n aria-label=${`increase by ${this.step}`}\n part=\"button\"\n class=${classMap({\n sgds: true,\n btn: true,\n [`btn-${this.buttonVariant}`]: this.buttonVariant\n })}\n @click=${this.onPlus}\n ?disabled=${this.disabled}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n class=\"bi bi-plus\"\n viewBox=\"0 0 16 16\"\n >\n <path\n d=\"M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z\"\n />\n </svg>\n </button>\n <div id=\"announcer\" role=\"region\" aria-live=\"assertive\" class=\"visually-hidden\">${this.value}</div>\n </div>\n `;\n }\n}\n\nexport default SgdsQuantityToggle;\n"],"names":["SgdsElement","FormSubmitController","genId","html","classMap","ifDefined","live","styles","__decorate","query","property","defaultValue"],"mappings":"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"}
1
+ {"version":3,"file":"sgds-quantity-toggle.cjs.js","sources":["../../../src/components/QuantityToggle/sgds-quantity-toggle.ts"],"sourcesContent":["import { property, query } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport { live } from \"lit/directives/live.js\";\nimport { html } from \"lit/static-html.js\";\nimport SgdsElement from \"../../base/sgds-element\";\nimport { defaultValue } from \"../../utils/defaultvalue\";\nimport { FormSubmitController, SgdsFormControl } from \"../../utils/form\";\nimport genId from \"../../utils/generateId\";\nimport { ButtonVariant } from \"../Button/sgds-button\";\nimport styles from \"./sgds-quantity-toggle.scss\";\n\n/**\n * @summary The quantity toggle component is used to increase or decrease an incremental venue, best used when the user needs to enter or adjust the quantity of a selected item.\n *\n * @csspart base - The base wrapper of the quantity toggle component.\n * @csspart button - The plus and minus button of quantity toggle\n *\n * @event sgds-change - Emitted when an alteration to the control's value is committed by the user.\n * @event sgds-input - Emitted when the control receives input and its value changes.\n *\n */\nexport class SgdsQuantityToggle extends SgdsElement implements SgdsFormControl {\n /**@internal */\n @query(\"input.form-control\") private input: HTMLInputElement;\n /**@internal */\n @query(\"button[aria-label^='increase by']\") private plusBtn: HTMLButtonElement;\n /**@internal */\n @query(\"button[aria-label^='decrease by']\") private minusBtn: HTMLButtonElement;\n\n static styles = [SgdsElement.styles, styles];\n /**@internal */\n private readonly formSubmitController = new FormSubmitController(this);\n\n /** The name of the input */\n @property({ type: String, reflect: true }) name: string;\n\n /** The input's minimum value. */\n @property({ type: Number, reflect: true }) min: number;\n /** The input's maximum value. */\n @property({ type: Number, reflect: true }) max: number;\n\n /**Controls the size of the quantity toggle */\n @property() size: \"sm\" | \"lg\" = \"sm\";\n\n /**The input's value. Set to 0 by default */\n @property({ type: Number, reflect: true }) value = 0;\n\n /** Disables the entire quantity toggle */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n /** The quantity toggle's button variants */\n @property({ type: String }) buttonVariant: ButtonVariant = \"primary\";\n\n /**\n * Controls the incremental / decremental value of the input\n */\n @property({ type: Number }) step = 1;\n\n /** Gets or sets the default value used to reset this element. The initial value corresponds to the one originally specified in the HTML that created this element. */\n @defaultValue()\n defaultValue = 0;\n\n /** @internal The id forwarded to input element */\n private inputId: string = genId(\"quantity-toggle\", \"input\");\n\n handleChange(event: string) {\n if (parseInt(this.input.value) < this.step || this.input.value === \"\") {\n this.input.value = \"0\";\n }\n this.value = parseInt(this.input.value);\n this.emit(event);\n }\n\n handleKeyDown(event: KeyboardEvent) {\n const allowedKeys = [\n \"Backspace\",\n \"ArrowUp\",\n \"ArrowDown\",\n \"ArrowLeft\",\n \"ArrowRight\",\n ...Array.from(Array(10).keys()).map(key => key.toString())\n ];\n\n // Allow keydown event only if the pressed key is in the allowedKeys array\n if (!allowedKeys.includes(event.key)) {\n event.preventDefault();\n }\n }\n\n /** Simulates a click on the plus button */\n public plus() {\n this.plusBtn.click();\n }\n\n /** Simulates a click on the minus button */\n public minus() {\n this.minusBtn.click();\n }\n\n onPlus(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.value = parseInt(this.input.value) + parseInt(this.input.step);\n }\n\n onMinus(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n if (this.value < this.step) {\n this.value = 0;\n } else {\n this.value = parseInt(this.input.value) - parseInt(this.input.step);\n }\n }\n render() {\n return html`\n <div\n part=\"base\"\n class=\"${classMap({\n sgds: true,\n disabled: this.disabled,\n \"input-group\": true,\n [`input-group-${this.size}`]: this.size\n })}\"\n variant=\"quantity-toggle\"\n size=${this.size}\n >\n <button\n aria-label=${`decrease by ${this.step}`}\n part=\"button\"\n class=${classMap({\n sgds: true,\n btn: true,\n [`btn-${this.buttonVariant}`]: this.buttonVariant\n })}\n @click=${this.onMinus}\n ?disabled=${this.disabled || (this.min !== undefined ? this.value <= this.min : this.value < 1)}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n class=\"bi bi-dash\"\n viewBox=\"0 0 16 16\"\n >\n <path d=\"M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z\" />\n </svg>\n </button>\n <input\n type=\"number\"\n class=\"form-control ${\"form-control-\" + this.size} text-center\"\n name=${ifDefined(this.name)}\n step=${ifDefined(this.step)}\n min=${ifDefined(this.min)}\n max=${ifDefined(this.max)}\n .value=${live(this.value.toString())}\n @change=${() => this.handleChange(\"sgds-change\")}\n @input=${() => this.handleChange(\"sgds-input\")}\n @keydown=${this.handleKeyDown}\n ?disabled=${this.disabled}\n id=${this.inputId}\n aria-label=\"quantity\"\n />\n <button\n aria-label=${`increase by ${this.step}`}\n part=\"button\"\n class=${classMap({\n sgds: true,\n btn: true,\n [`btn-${this.buttonVariant}`]: this.buttonVariant\n })}\n @click=${this.onPlus}\n ?disabled=${this.disabled || (this.max !== undefined && this.max && this.value >= this.max)}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n class=\"bi bi-plus\"\n viewBox=\"0 0 16 16\"\n >\n <path\n d=\"M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z\"\n />\n </svg>\n </button>\n </div>\n <div id=\"announcer\" role=\"region\" aria-live=\"assertive\" class=\"visually-hidden\">${this.value}</div>\n `;\n }\n}\n\nexport default SgdsQuantityToggle;\n"],"names":["SgdsElement","FormSubmitController","genId","html","classMap","ifDefined","live","styles","__decorate","query","property","defaultValue"],"mappings":"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"}
@@ -44,6 +44,7 @@ export declare class SgdsQuantityToggle extends SgdsElement implements SgdsFormC
44
44
  /** @internal The id forwarded to input element */
45
45
  private inputId;
46
46
  handleChange(event: string): void;
47
+ handleKeyDown(event: KeyboardEvent): void;
47
48
  /** Simulates a click on the plus button */
48
49
  plus(): void;
49
50
  /** Simulates a click on the minus button */
@@ -43,9 +43,26 @@ class SgdsQuantityToggle extends SgdsElement {
43
43
  this.inputId = genId("quantity-toggle", "input");
44
44
  }
45
45
  handleChange(event) {
46
+ if (parseInt(this.input.value) < this.step || this.input.value === "") {
47
+ this.input.value = "0";
48
+ }
46
49
  this.value = parseInt(this.input.value);
47
50
  this.emit(event);
48
51
  }
52
+ handleKeyDown(event) {
53
+ const allowedKeys = [
54
+ "Backspace",
55
+ "ArrowUp",
56
+ "ArrowDown",
57
+ "ArrowLeft",
58
+ "ArrowRight",
59
+ ...Array.from(Array(10).keys()).map(key => key.toString())
60
+ ];
61
+ // Allow keydown event only if the pressed key is in the allowedKeys array
62
+ if (!allowedKeys.includes(event.key)) {
63
+ event.preventDefault();
64
+ }
65
+ }
49
66
  /** Simulates a click on the plus button */
50
67
  plus() {
51
68
  this.plusBtn.click();
@@ -91,7 +108,7 @@ class SgdsQuantityToggle extends SgdsElement {
91
108
  [`btn-${this.buttonVariant}`]: this.buttonVariant
92
109
  })}
93
110
  @click=${this.onMinus}
94
- ?disabled=${this.disabled}
111
+ ?disabled=${this.disabled || (this.min !== undefined ? this.value <= this.min : this.value < 1)}
95
112
  >
96
113
  <svg
97
114
  xmlns="http://www.w3.org/2000/svg"
@@ -114,6 +131,7 @@ class SgdsQuantityToggle extends SgdsElement {
114
131
  .value=${live(this.value.toString())}
115
132
  @change=${() => this.handleChange("sgds-change")}
116
133
  @input=${() => this.handleChange("sgds-input")}
134
+ @keydown=${this.handleKeyDown}
117
135
  ?disabled=${this.disabled}
118
136
  id=${this.inputId}
119
137
  aria-label="quantity"
@@ -127,7 +145,7 @@ class SgdsQuantityToggle extends SgdsElement {
127
145
  [`btn-${this.buttonVariant}`]: this.buttonVariant
128
146
  })}
129
147
  @click=${this.onPlus}
130
- ?disabled=${this.disabled}
148
+ ?disabled=${this.disabled || (this.max !== undefined && this.max && this.value >= this.max)}
131
149
  >
132
150
  <svg
133
151
  xmlns="http://www.w3.org/2000/svg"
@@ -142,8 +160,8 @@ class SgdsQuantityToggle extends SgdsElement {
142
160
  />
143
161
  </svg>
144
162
  </button>
145
- <div id="announcer" role="region" aria-live="assertive" class="visually-hidden">${this.value}</div>
146
163
  </div>
164
+ <div id="announcer" role="region" aria-live="assertive" class="visually-hidden">${this.value}</div>
147
165
  `;
148
166
  }
149
167
  }
@@ -158,7 +176,7 @@ __decorate([
158
176
  query("button[aria-label^='decrease by']")
159
177
  ], SgdsQuantityToggle.prototype, "minusBtn", void 0);
160
178
  __decorate([
161
- property({ reflect: true })
179
+ property({ type: String, reflect: true })
162
180
  ], SgdsQuantityToggle.prototype, "name", void 0);
163
181
  __decorate([
164
182
  property({ type: Number, reflect: true })
@@ -170,16 +188,16 @@ __decorate([
170
188
  property()
171
189
  ], SgdsQuantityToggle.prototype, "size", void 0);
172
190
  __decorate([
173
- property({ reflect: true, type: Number })
191
+ property({ type: Number, reflect: true })
174
192
  ], SgdsQuantityToggle.prototype, "value", void 0);
175
193
  __decorate([
176
194
  property({ type: Boolean, reflect: true })
177
195
  ], SgdsQuantityToggle.prototype, "disabled", void 0);
178
196
  __decorate([
179
- property({ type: String, reflect: true })
197
+ property({ type: String })
180
198
  ], SgdsQuantityToggle.prototype, "buttonVariant", void 0);
181
199
  __decorate([
182
- property({ type: Number, reflect: true })
200
+ property({ type: Number })
183
201
  ], SgdsQuantityToggle.prototype, "step", void 0);
184
202
  __decorate([
185
203
  defaultValue()
@@ -1 +1 @@
1
- {"version":3,"file":"sgds-quantity-toggle.js","sources":["../../../src/components/QuantityToggle/sgds-quantity-toggle.ts"],"sourcesContent":["import { property, query } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport { live } from \"lit/directives/live.js\";\nimport { html } from \"lit/static-html.js\";\nimport SgdsElement from \"../../base/sgds-element\";\nimport { defaultValue } from \"../../utils/defaultvalue\";\nimport { FormSubmitController, SgdsFormControl } from \"../../utils/form\";\nimport genId from \"../../utils/generateId\";\nimport { ButtonVariant } from \"../Button/sgds-button\";\nimport styles from \"./sgds-quantity-toggle.scss\";\n\n/**\n * @summary The quantity toggle component is used to increase or decrease an incremental venue, best used when the user needs to enter or adjust the quantity of a selected item.\n *\n * @csspart base - The base wrapper of the quantity toggle component.\n * @csspart button - The plus and minus button of quantity toggle\n *\n * @event sgds-change - Emitted when an alteration to the control's value is committed by the user.\n * @event sgds-input - Emitted when the control receives input and its value changes.\n *\n */\nexport class SgdsQuantityToggle extends SgdsElement implements SgdsFormControl {\n /**@internal */\n @query(\"input.form-control\") private input: HTMLInputElement;\n /**@internal */\n @query(\"button[aria-label^='increase by']\") private plusBtn: HTMLButtonElement;\n /**@internal */\n @query(\"button[aria-label^='decrease by']\") private minusBtn: HTMLButtonElement;\n\n static styles = [SgdsElement.styles, styles];\n /**@internal */\n private readonly formSubmitController = new FormSubmitController(this);\n\n /** The name of the input */\n @property({ reflect: true }) name: string;\n\n /** The input's minimum value. */\n @property({ type: Number, reflect: true }) min: number;\n /** The input's maximum value. */\n @property({ type: Number, reflect: true }) max: number;\n\n /**Controls the size of the quantity toggle */\n @property() size: \"sm\" | \"lg\" = \"sm\";\n\n /**The input's value. Set to 0 by default */\n @property({ reflect: true, type: Number }) value = 0;\n\n /** Disables the entire quantity toggle */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n /** The quantity toggle's button variants */\n @property({ type: String, reflect: true }) buttonVariant: ButtonVariant = \"primary\";\n\n /**\n * Controls the incremental / decremental value of the input\n */\n @property({ type: Number, reflect: true }) step = 1;\n\n /** Gets or sets the default value used to reset this element. The initial value corresponds to the one originally specified in the HTML that created this element. */\n @defaultValue()\n defaultValue = 0;\n\n /** @internal The id forwarded to input element */\n private inputId: string = genId(\"quantity-toggle\", \"input\");\n\n handleChange(event: string) {\n this.value = parseInt(this.input.value);\n this.emit(event);\n }\n /** Simulates a click on the plus button */\n public plus() {\n this.plusBtn.click();\n }\n /** Simulates a click on the minus button */\n public minus() {\n this.minusBtn.click();\n }\n\n onPlus(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.value = parseInt(this.input.value) + parseInt(this.input.step);\n }\n\n onMinus(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n if (this.value < this.step) {\n this.value = 0;\n } else {\n this.value = parseInt(this.input.value) - parseInt(this.input.step);\n }\n }\n render() {\n return html`\n <div\n part=\"base\"\n class=\"${classMap({\n sgds: true,\n disabled: this.disabled,\n \"input-group\": true,\n [`input-group-${this.size}`]: this.size\n })}\"\n variant=\"quantity-toggle\"\n size=${this.size}\n >\n <button\n aria-label=${`decrease by ${this.step}`}\n part=\"button\"\n class=${classMap({\n sgds: true,\n btn: true,\n [`btn-${this.buttonVariant}`]: this.buttonVariant\n })}\n @click=${this.onMinus}\n ?disabled=${this.disabled}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n class=\"bi bi-dash\"\n viewBox=\"0 0 16 16\"\n >\n <path d=\"M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z\" />\n </svg>\n </button>\n <input\n type=\"number\"\n class=\"form-control ${\"form-control-\" + this.size} text-center\"\n name=${ifDefined(this.name)}\n step=${ifDefined(this.step)}\n min=${ifDefined(this.min)}\n max=${ifDefined(this.max)}\n .value=${live(this.value.toString())}\n @change=${() => this.handleChange(\"sgds-change\")}\n @input=${() => this.handleChange(\"sgds-input\")}\n ?disabled=${this.disabled}\n id=${this.inputId}\n aria-label=\"quantity\"\n />\n <button\n aria-label=${`increase by ${this.step}`}\n part=\"button\"\n class=${classMap({\n sgds: true,\n btn: true,\n [`btn-${this.buttonVariant}`]: this.buttonVariant\n })}\n @click=${this.onPlus}\n ?disabled=${this.disabled}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n class=\"bi bi-plus\"\n viewBox=\"0 0 16 16\"\n >\n <path\n d=\"M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z\"\n />\n </svg>\n </button>\n <div id=\"announcer\" role=\"region\" aria-live=\"assertive\" class=\"visually-hidden\">${this.value}</div>\n </div>\n `;\n }\n}\n\nexport default SgdsQuantityToggle;\n"],"names":["styles"],"mappings":"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"}
1
+ {"version":3,"file":"sgds-quantity-toggle.js","sources":["../../../src/components/QuantityToggle/sgds-quantity-toggle.ts"],"sourcesContent":["import { property, query } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport { live } from \"lit/directives/live.js\";\nimport { html } from \"lit/static-html.js\";\nimport SgdsElement from \"../../base/sgds-element\";\nimport { defaultValue } from \"../../utils/defaultvalue\";\nimport { FormSubmitController, SgdsFormControl } from \"../../utils/form\";\nimport genId from \"../../utils/generateId\";\nimport { ButtonVariant } from \"../Button/sgds-button\";\nimport styles from \"./sgds-quantity-toggle.scss\";\n\n/**\n * @summary The quantity toggle component is used to increase or decrease an incremental venue, best used when the user needs to enter or adjust the quantity of a selected item.\n *\n * @csspart base - The base wrapper of the quantity toggle component.\n * @csspart button - The plus and minus button of quantity toggle\n *\n * @event sgds-change - Emitted when an alteration to the control's value is committed by the user.\n * @event sgds-input - Emitted when the control receives input and its value changes.\n *\n */\nexport class SgdsQuantityToggle extends SgdsElement implements SgdsFormControl {\n /**@internal */\n @query(\"input.form-control\") private input: HTMLInputElement;\n /**@internal */\n @query(\"button[aria-label^='increase by']\") private plusBtn: HTMLButtonElement;\n /**@internal */\n @query(\"button[aria-label^='decrease by']\") private minusBtn: HTMLButtonElement;\n\n static styles = [SgdsElement.styles, styles];\n /**@internal */\n private readonly formSubmitController = new FormSubmitController(this);\n\n /** The name of the input */\n @property({ type: String, reflect: true }) name: string;\n\n /** The input's minimum value. */\n @property({ type: Number, reflect: true }) min: number;\n /** The input's maximum value. */\n @property({ type: Number, reflect: true }) max: number;\n\n /**Controls the size of the quantity toggle */\n @property() size: \"sm\" | \"lg\" = \"sm\";\n\n /**The input's value. Set to 0 by default */\n @property({ type: Number, reflect: true }) value = 0;\n\n /** Disables the entire quantity toggle */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n /** The quantity toggle's button variants */\n @property({ type: String }) buttonVariant: ButtonVariant = \"primary\";\n\n /**\n * Controls the incremental / decremental value of the input\n */\n @property({ type: Number }) step = 1;\n\n /** Gets or sets the default value used to reset this element. The initial value corresponds to the one originally specified in the HTML that created this element. */\n @defaultValue()\n defaultValue = 0;\n\n /** @internal The id forwarded to input element */\n private inputId: string = genId(\"quantity-toggle\", \"input\");\n\n handleChange(event: string) {\n if (parseInt(this.input.value) < this.step || this.input.value === \"\") {\n this.input.value = \"0\";\n }\n this.value = parseInt(this.input.value);\n this.emit(event);\n }\n\n handleKeyDown(event: KeyboardEvent) {\n const allowedKeys = [\n \"Backspace\",\n \"ArrowUp\",\n \"ArrowDown\",\n \"ArrowLeft\",\n \"ArrowRight\",\n ...Array.from(Array(10).keys()).map(key => key.toString())\n ];\n\n // Allow keydown event only if the pressed key is in the allowedKeys array\n if (!allowedKeys.includes(event.key)) {\n event.preventDefault();\n }\n }\n\n /** Simulates a click on the plus button */\n public plus() {\n this.plusBtn.click();\n }\n\n /** Simulates a click on the minus button */\n public minus() {\n this.minusBtn.click();\n }\n\n onPlus(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.value = parseInt(this.input.value) + parseInt(this.input.step);\n }\n\n onMinus(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n if (this.value < this.step) {\n this.value = 0;\n } else {\n this.value = parseInt(this.input.value) - parseInt(this.input.step);\n }\n }\n render() {\n return html`\n <div\n part=\"base\"\n class=\"${classMap({\n sgds: true,\n disabled: this.disabled,\n \"input-group\": true,\n [`input-group-${this.size}`]: this.size\n })}\"\n variant=\"quantity-toggle\"\n size=${this.size}\n >\n <button\n aria-label=${`decrease by ${this.step}`}\n part=\"button\"\n class=${classMap({\n sgds: true,\n btn: true,\n [`btn-${this.buttonVariant}`]: this.buttonVariant\n })}\n @click=${this.onMinus}\n ?disabled=${this.disabled || (this.min !== undefined ? this.value <= this.min : this.value < 1)}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n class=\"bi bi-dash\"\n viewBox=\"0 0 16 16\"\n >\n <path d=\"M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z\" />\n </svg>\n </button>\n <input\n type=\"number\"\n class=\"form-control ${\"form-control-\" + this.size} text-center\"\n name=${ifDefined(this.name)}\n step=${ifDefined(this.step)}\n min=${ifDefined(this.min)}\n max=${ifDefined(this.max)}\n .value=${live(this.value.toString())}\n @change=${() => this.handleChange(\"sgds-change\")}\n @input=${() => this.handleChange(\"sgds-input\")}\n @keydown=${this.handleKeyDown}\n ?disabled=${this.disabled}\n id=${this.inputId}\n aria-label=\"quantity\"\n />\n <button\n aria-label=${`increase by ${this.step}`}\n part=\"button\"\n class=${classMap({\n sgds: true,\n btn: true,\n [`btn-${this.buttonVariant}`]: this.buttonVariant\n })}\n @click=${this.onPlus}\n ?disabled=${this.disabled || (this.max !== undefined && this.max && this.value >= this.max)}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n class=\"bi bi-plus\"\n viewBox=\"0 0 16 16\"\n >\n <path\n d=\"M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z\"\n />\n </svg>\n </button>\n </div>\n <div id=\"announcer\" role=\"region\" aria-live=\"assertive\" class=\"visually-hidden\">${this.value}</div>\n `;\n }\n}\n\nexport default SgdsQuantityToggle;\n"],"names":["styles"],"mappings":"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"}