@ship-ui/core 0.18.4 → 0.18.5

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.
@@ -18,18 +18,6 @@
18
18
  "success"
19
19
  ]
20
20
  },
21
- {
22
- "name": "variant",
23
- "type": "ShipSheetVariant | null",
24
- "description": "",
25
- "defaultValue": "null",
26
- "options": [
27
- "simple",
28
- "outlined",
29
- "flat",
30
- "raised"
31
- ]
32
- },
33
21
  {
34
22
  "name": "size",
35
23
  "type": "ShipIconSize | null",
@@ -119,7 +107,7 @@
119
107
  },
120
108
  {
121
109
  "name": "range-datepicker-sandbox",
122
- "html": "<div class=\"controls\">\n <sh-toggle [(checked)]=\"disabled\">Disabled</sh-toggle>\n\n <sh-button-group [(value)]=\"colors\">\n <button value=\"\">Base</button>\n <button value=\"primary\">Primary</button>\n <button value=\"accent\">Accent</button>\n <button value=\"warn\">Warn</button>\n <button value=\"error\">Error</button>\n <button value=\"success\">Success</button>\n </sh-button-group>\n\n <sh-range-slider min=\"1\" max=\"3\">\n <label>Months to show</label>\n <input type=\"range\" [(ngModel)]=\"monthsToShow\" min=\"1\" max=\"12\" />\n </sh-range-slider>\n</div>\n\n<div class=\"content\">\n <sh-datepicker\n [class]=\"colors()\"\n [(date)]=\"startDate\"\n [(endDate)]=\"endDate\"\n [asRange]=\"true\"\n [monthsToShow]=\"monthsToShow()\"></sh-datepicker>\n <p>Start: {{ startDate() | date: 'mediumDate' }}</p>\n <p>End: {{ endDate() | date: 'mediumDate' }}</p>\n</div>\n",
110
+ "html": "<div class=\"controls\">\n <sh-toggle [(checked)]=\"disabled\">Disabled</sh-toggle>\n\n <sh-button-group [(value)]=\"colors\">\n <button value=\"\">Default</button>\n <button value=\"primary\">Primary</button>\n <button value=\"accent\">Accent</button>\n <button value=\"warn\">Warn</button>\n <button value=\"error\">Error</button>\n <button value=\"success\">Success</button>\n </sh-button-group>\n\n <sh-range-slider min=\"1\" max=\"3\">\n <label>Months to show</label>\n <input type=\"range\" [(ngModel)]=\"monthsToShow\" min=\"1\" max=\"12\" />\n </sh-range-slider>\n</div>\n\n<div class=\"content\">\n <sh-datepicker\n [class]=\"colors()\"\n [(date)]=\"startDate\"\n [(endDate)]=\"endDate\"\n [asRange]=\"true\"\n [monthsToShow]=\"monthsToShow()\"></sh-datepicker>\n <p>Start: {{ startDate() | date: 'mediumDate' }}</p>\n <p>End: {{ endDate() | date: 'mediumDate' }}</p>\n</div>\n",
123
111
  "ts": "import { DatePipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ShipButtonGroup, ShipDatepicker, ShipRangeSlider, ShipToggle } from 'ship-ui';\n\n@Component({\n selector: 'app-range-datepicker-sandbox',\n standalone: true,\n imports: [FormsModule, ShipDatepicker, ShipToggle, ShipRangeSlider, ShipButtonGroup, DatePipe],\n templateUrl: './range-datepicker-sandbox.html',\n styleUrl: './range-datepicker-sandbox.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RangeDatepickerSandbox {\n colors = signal<'' | 'primary' | 'accent' | 'warn' | 'error' | 'success'>('primary');\n startDate = signal<Date | null>(new Date());\n endDate = signal<Date | null>(new Date(Date.now() + 86400000));\n disabled = signal(false);\n monthsToShow = signal(2);\n}\n"
124
112
  },
125
113
  {
@@ -139,7 +127,7 @@
139
127
  },
140
128
  {
141
129
  "name": "datepicker-sandbox",
142
- "html": "<div class=\"controls\">\n <sh-toggle class=\"raised primary\" [(checked)]=\"disabled\">Disabled</sh-toggle>\n <sh-toggle class=\"raised primary\" [(checked)]=\"sharp\">Sharp</sh-toggle>\n\n <sh-button-group class=\"type-b\" [(value)]=\"colors\">\n <button value=\"\">Base</button>\n <button value=\"primary\">Primary</button>\n <button value=\"accent\">Accent</button>\n <button value=\"warn\">Warn</button>\n <button value=\"error\">Error</button>\n <button value=\"success\">Success</button>\n </sh-button-group>\n\n <sh-button-group class=\"type-b\" [(value)]=\"startOfWeek\">\n <button value=\"1\">Monday</button>\n <button value=\"2\">Tuesday</button>\n <button value=\"3\">Wednesday</button>\n <button value=\"4\">Thursday</button>\n <button value=\"5\">Friday</button>\n <button value=\"6\">Saturday</button>\n <button value=\"0\">Sunday</button>\n </sh-button-group>\n</div>\n\n<div class=\"content\">\n <sh-datepicker\n class=\"raised\"\n [class]=\"exampleClass()\"\n [(date)]=\"date\"\n [disabled]=\"disabled()\"\n [startOfWeek]=\"startOfWeekComputed()\" />\n\n <p>Selected date: {{ date() | date: 'mediumDate' }}</p>\n</div>\n",
130
+ "html": "<div class=\"controls\">\n <sh-toggle class=\"raised primary\" [(checked)]=\"disabled\">Disabled</sh-toggle>\n <sh-toggle class=\"raised primary\" [(checked)]=\"sharp\">Sharp</sh-toggle>\n\n <sh-button-group class=\"type-b\" [(value)]=\"colors\">\n <button value=\"\">Default</button>\n <button value=\"primary\">Primary</button>\n <button value=\"accent\">Accent</button>\n <button value=\"warn\">Warn</button>\n <button value=\"error\">Error</button>\n <button value=\"success\">Success</button>\n </sh-button-group>\n\n <sh-button-group class=\"type-b\" [(value)]=\"startOfWeek\">\n <button value=\"1\">Monday</button>\n <button value=\"2\">Tuesday</button>\n <button value=\"3\">Wednesday</button>\n <button value=\"4\">Thursday</button>\n <button value=\"5\">Friday</button>\n <button value=\"6\">Saturday</button>\n <button value=\"0\">Sunday</button>\n </sh-button-group>\n</div>\n\n<div class=\"content\">\n <sh-datepicker\n class=\"raised\"\n [class]=\"exampleClass()\"\n [(date)]=\"date\"\n [disabled]=\"disabled()\"\n [startOfWeek]=\"startOfWeekComputed()\" />\n\n <p>Selected date: {{ date() | date: 'mediumDate' }}</p>\n</div>\n",
143
131
  "ts": "import { DatePipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ShipButtonGroup, ShipDatepicker, ShipToggle } from 'ship-ui';\n\n@Component({\n selector: 'app-datepicker-sandbox',\n standalone: true,\n imports: [FormsModule, ShipDatepicker, ShipToggle, ShipButtonGroup, DatePipe],\n templateUrl: './datepicker-sandbox.html',\n styleUrl: './datepicker-sandbox.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DatepickerSandbox {\n date = signal<Date | null>(new Date());\n disabled = signal(false);\n sharp = signal(false);\n startOfWeek = signal('1');\n colors = signal<'' | 'primary' | 'accent' | 'warn' | 'error' | 'success'>('primary');\n\n exampleClass = computed(() => this.colors() + ' ' + (this.sharp() ? 'sharp' : ''));\n\n startOfWeekComputed = computed(() => parseInt(this.startOfWeek()));\n}\n"
144
132
  },
145
133
  {
@@ -216,7 +204,7 @@
216
204
  },
217
205
  {
218
206
  "name": "range-datepicker-sandbox",
219
- "html": "<div class=\"controls\">\n <sh-toggle [(checked)]=\"disabled\">Disabled</sh-toggle>\n\n <sh-button-group [(value)]=\"colors\">\n <button value=\"\">Base</button>\n <button value=\"primary\">Primary</button>\n <button value=\"accent\">Accent</button>\n <button value=\"warn\">Warn</button>\n <button value=\"error\">Error</button>\n <button value=\"success\">Success</button>\n </sh-button-group>\n\n <sh-range-slider min=\"1\" max=\"3\">\n <label>Months to show</label>\n <input type=\"range\" [(ngModel)]=\"monthsToShow\" min=\"1\" max=\"12\" />\n </sh-range-slider>\n</div>\n\n<div class=\"content\">\n <sh-datepicker\n [class]=\"colors()\"\n [(date)]=\"startDate\"\n [(endDate)]=\"endDate\"\n [asRange]=\"true\"\n [monthsToShow]=\"monthsToShow()\"></sh-datepicker>\n <p>Start: {{ startDate() | date: 'mediumDate' }}</p>\n <p>End: {{ endDate() | date: 'mediumDate' }}</p>\n</div>\n",
207
+ "html": "<div class=\"controls\">\n <sh-toggle [(checked)]=\"disabled\">Disabled</sh-toggle>\n\n <sh-button-group [(value)]=\"colors\">\n <button value=\"\">Default</button>\n <button value=\"primary\">Primary</button>\n <button value=\"accent\">Accent</button>\n <button value=\"warn\">Warn</button>\n <button value=\"error\">Error</button>\n <button value=\"success\">Success</button>\n </sh-button-group>\n\n <sh-range-slider min=\"1\" max=\"3\">\n <label>Months to show</label>\n <input type=\"range\" [(ngModel)]=\"monthsToShow\" min=\"1\" max=\"12\" />\n </sh-range-slider>\n</div>\n\n<div class=\"content\">\n <sh-datepicker\n [class]=\"colors()\"\n [(date)]=\"startDate\"\n [(endDate)]=\"endDate\"\n [asRange]=\"true\"\n [monthsToShow]=\"monthsToShow()\"></sh-datepicker>\n <p>Start: {{ startDate() | date: 'mediumDate' }}</p>\n <p>End: {{ endDate() | date: 'mediumDate' }}</p>\n</div>\n",
220
208
  "ts": "import { DatePipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ShipButtonGroup, ShipDatepicker, ShipRangeSlider, ShipToggle } from 'ship-ui';\n\n@Component({\n selector: 'app-range-datepicker-sandbox',\n standalone: true,\n imports: [FormsModule, ShipDatepicker, ShipToggle, ShipRangeSlider, ShipButtonGroup, DatePipe],\n templateUrl: './range-datepicker-sandbox.html',\n styleUrl: './range-datepicker-sandbox.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RangeDatepickerSandbox {\n colors = signal<'' | 'primary' | 'accent' | 'warn' | 'error' | 'success'>('primary');\n startDate = signal<Date | null>(new Date());\n endDate = signal<Date | null>(new Date(Date.now() + 86400000));\n disabled = signal(false);\n monthsToShow = signal(2);\n}\n"
221
209
  },
222
210
  {
@@ -236,7 +224,7 @@
236
224
  },
237
225
  {
238
226
  "name": "datepicker-sandbox",
239
- "html": "<div class=\"controls\">\n <sh-toggle class=\"raised primary\" [(checked)]=\"disabled\">Disabled</sh-toggle>\n <sh-toggle class=\"raised primary\" [(checked)]=\"sharp\">Sharp</sh-toggle>\n\n <sh-button-group class=\"type-b\" [(value)]=\"colors\">\n <button value=\"\">Base</button>\n <button value=\"primary\">Primary</button>\n <button value=\"accent\">Accent</button>\n <button value=\"warn\">Warn</button>\n <button value=\"error\">Error</button>\n <button value=\"success\">Success</button>\n </sh-button-group>\n\n <sh-button-group class=\"type-b\" [(value)]=\"startOfWeek\">\n <button value=\"1\">Monday</button>\n <button value=\"2\">Tuesday</button>\n <button value=\"3\">Wednesday</button>\n <button value=\"4\">Thursday</button>\n <button value=\"5\">Friday</button>\n <button value=\"6\">Saturday</button>\n <button value=\"0\">Sunday</button>\n </sh-button-group>\n</div>\n\n<div class=\"content\">\n <sh-datepicker\n class=\"raised\"\n [class]=\"exampleClass()\"\n [(date)]=\"date\"\n [disabled]=\"disabled()\"\n [startOfWeek]=\"startOfWeekComputed()\" />\n\n <p>Selected date: {{ date() | date: 'mediumDate' }}</p>\n</div>\n",
227
+ "html": "<div class=\"controls\">\n <sh-toggle class=\"raised primary\" [(checked)]=\"disabled\">Disabled</sh-toggle>\n <sh-toggle class=\"raised primary\" [(checked)]=\"sharp\">Sharp</sh-toggle>\n\n <sh-button-group class=\"type-b\" [(value)]=\"colors\">\n <button value=\"\">Default</button>\n <button value=\"primary\">Primary</button>\n <button value=\"accent\">Accent</button>\n <button value=\"warn\">Warn</button>\n <button value=\"error\">Error</button>\n <button value=\"success\">Success</button>\n </sh-button-group>\n\n <sh-button-group class=\"type-b\" [(value)]=\"startOfWeek\">\n <button value=\"1\">Monday</button>\n <button value=\"2\">Tuesday</button>\n <button value=\"3\">Wednesday</button>\n <button value=\"4\">Thursday</button>\n <button value=\"5\">Friday</button>\n <button value=\"6\">Saturday</button>\n <button value=\"0\">Sunday</button>\n </sh-button-group>\n</div>\n\n<div class=\"content\">\n <sh-datepicker\n class=\"raised\"\n [class]=\"exampleClass()\"\n [(date)]=\"date\"\n [disabled]=\"disabled()\"\n [startOfWeek]=\"startOfWeekComputed()\" />\n\n <p>Selected date: {{ date() | date: 'mediumDate' }}</p>\n</div>\n",
240
228
  "ts": "import { DatePipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ShipButtonGroup, ShipDatepicker, ShipToggle } from 'ship-ui';\n\n@Component({\n selector: 'app-datepicker-sandbox',\n standalone: true,\n imports: [FormsModule, ShipDatepicker, ShipToggle, ShipButtonGroup, DatePipe],\n templateUrl: './datepicker-sandbox.html',\n styleUrl: './datepicker-sandbox.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DatepickerSandbox {\n date = signal<Date | null>(new Date());\n disabled = signal(false);\n sharp = signal(false);\n startOfWeek = signal('1');\n colors = signal<'' | 'primary' | 'accent' | 'warn' | 'error' | 'success'>('primary');\n\n exampleClass = computed(() => this.colors() + ' ' + (this.sharp() ? 'sharp' : ''));\n\n startOfWeekComputed = computed(() => parseInt(this.startOfWeek()));\n}\n"
241
229
  },
242
230
  {
@@ -414,7 +402,7 @@
414
402
  },
415
403
  {
416
404
  "name": "range-datepicker-sandbox",
417
- "html": "<div class=\"controls\">\n <sh-toggle [(checked)]=\"disabled\">Disabled</sh-toggle>\n\n <sh-button-group [(value)]=\"colors\">\n <button value=\"\">Base</button>\n <button value=\"primary\">Primary</button>\n <button value=\"accent\">Accent</button>\n <button value=\"warn\">Warn</button>\n <button value=\"error\">Error</button>\n <button value=\"success\">Success</button>\n </sh-button-group>\n\n <sh-range-slider min=\"1\" max=\"3\">\n <label>Months to show</label>\n <input type=\"range\" [(ngModel)]=\"monthsToShow\" min=\"1\" max=\"12\" />\n </sh-range-slider>\n</div>\n\n<div class=\"content\">\n <sh-datepicker\n [class]=\"colors()\"\n [(date)]=\"startDate\"\n [(endDate)]=\"endDate\"\n [asRange]=\"true\"\n [monthsToShow]=\"monthsToShow()\"></sh-datepicker>\n <p>Start: {{ startDate() | date: 'mediumDate' }}</p>\n <p>End: {{ endDate() | date: 'mediumDate' }}</p>\n</div>\n",
405
+ "html": "<div class=\"controls\">\n <sh-toggle [(checked)]=\"disabled\">Disabled</sh-toggle>\n\n <sh-button-group [(value)]=\"colors\">\n <button value=\"\">Default</button>\n <button value=\"primary\">Primary</button>\n <button value=\"accent\">Accent</button>\n <button value=\"warn\">Warn</button>\n <button value=\"error\">Error</button>\n <button value=\"success\">Success</button>\n </sh-button-group>\n\n <sh-range-slider min=\"1\" max=\"3\">\n <label>Months to show</label>\n <input type=\"range\" [(ngModel)]=\"monthsToShow\" min=\"1\" max=\"12\" />\n </sh-range-slider>\n</div>\n\n<div class=\"content\">\n <sh-datepicker\n [class]=\"colors()\"\n [(date)]=\"startDate\"\n [(endDate)]=\"endDate\"\n [asRange]=\"true\"\n [monthsToShow]=\"monthsToShow()\"></sh-datepicker>\n <p>Start: {{ startDate() | date: 'mediumDate' }}</p>\n <p>End: {{ endDate() | date: 'mediumDate' }}</p>\n</div>\n",
418
406
  "ts": "import { DatePipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ShipButtonGroup, ShipDatepicker, ShipRangeSlider, ShipToggle } from 'ship-ui';\n\n@Component({\n selector: 'app-range-datepicker-sandbox',\n standalone: true,\n imports: [FormsModule, ShipDatepicker, ShipToggle, ShipRangeSlider, ShipButtonGroup, DatePipe],\n templateUrl: './range-datepicker-sandbox.html',\n styleUrl: './range-datepicker-sandbox.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RangeDatepickerSandbox {\n colors = signal<'' | 'primary' | 'accent' | 'warn' | 'error' | 'success'>('primary');\n startDate = signal<Date | null>(new Date());\n endDate = signal<Date | null>(new Date(Date.now() + 86400000));\n disabled = signal(false);\n monthsToShow = signal(2);\n}\n"
419
407
  },
420
408
  {
@@ -434,7 +422,7 @@
434
422
  },
435
423
  {
436
424
  "name": "datepicker-sandbox",
437
- "html": "<div class=\"controls\">\n <sh-toggle class=\"raised primary\" [(checked)]=\"disabled\">Disabled</sh-toggle>\n <sh-toggle class=\"raised primary\" [(checked)]=\"sharp\">Sharp</sh-toggle>\n\n <sh-button-group class=\"type-b\" [(value)]=\"colors\">\n <button value=\"\">Base</button>\n <button value=\"primary\">Primary</button>\n <button value=\"accent\">Accent</button>\n <button value=\"warn\">Warn</button>\n <button value=\"error\">Error</button>\n <button value=\"success\">Success</button>\n </sh-button-group>\n\n <sh-button-group class=\"type-b\" [(value)]=\"startOfWeek\">\n <button value=\"1\">Monday</button>\n <button value=\"2\">Tuesday</button>\n <button value=\"3\">Wednesday</button>\n <button value=\"4\">Thursday</button>\n <button value=\"5\">Friday</button>\n <button value=\"6\">Saturday</button>\n <button value=\"0\">Sunday</button>\n </sh-button-group>\n</div>\n\n<div class=\"content\">\n <sh-datepicker\n class=\"raised\"\n [class]=\"exampleClass()\"\n [(date)]=\"date\"\n [disabled]=\"disabled()\"\n [startOfWeek]=\"startOfWeekComputed()\" />\n\n <p>Selected date: {{ date() | date: 'mediumDate' }}</p>\n</div>\n",
425
+ "html": "<div class=\"controls\">\n <sh-toggle class=\"raised primary\" [(checked)]=\"disabled\">Disabled</sh-toggle>\n <sh-toggle class=\"raised primary\" [(checked)]=\"sharp\">Sharp</sh-toggle>\n\n <sh-button-group class=\"type-b\" [(value)]=\"colors\">\n <button value=\"\">Default</button>\n <button value=\"primary\">Primary</button>\n <button value=\"accent\">Accent</button>\n <button value=\"warn\">Warn</button>\n <button value=\"error\">Error</button>\n <button value=\"success\">Success</button>\n </sh-button-group>\n\n <sh-button-group class=\"type-b\" [(value)]=\"startOfWeek\">\n <button value=\"1\">Monday</button>\n <button value=\"2\">Tuesday</button>\n <button value=\"3\">Wednesday</button>\n <button value=\"4\">Thursday</button>\n <button value=\"5\">Friday</button>\n <button value=\"6\">Saturday</button>\n <button value=\"0\">Sunday</button>\n </sh-button-group>\n</div>\n\n<div class=\"content\">\n <sh-datepicker\n class=\"raised\"\n [class]=\"exampleClass()\"\n [(date)]=\"date\"\n [disabled]=\"disabled()\"\n [startOfWeek]=\"startOfWeekComputed()\" />\n\n <p>Selected date: {{ date() | date: 'mediumDate' }}</p>\n</div>\n",
438
426
  "ts": "import { DatePipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ShipButtonGroup, ShipDatepicker, ShipToggle } from 'ship-ui';\n\n@Component({\n selector: 'app-datepicker-sandbox',\n standalone: true,\n imports: [FormsModule, ShipDatepicker, ShipToggle, ShipButtonGroup, DatePipe],\n templateUrl: './datepicker-sandbox.html',\n styleUrl: './datepicker-sandbox.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DatepickerSandbox {\n date = signal<Date | null>(new Date());\n disabled = signal(false);\n sharp = signal(false);\n startOfWeek = signal('1');\n colors = signal<'' | 'primary' | 'accent' | 'warn' | 'error' | 'success'>('primary');\n\n exampleClass = computed(() => this.colors() + ' ' + (this.sharp() ? 'sharp' : ''));\n\n startOfWeekComputed = computed(() => parseInt(this.startOfWeek()));\n}\n"
439
427
  },
440
428
  {
@@ -1239,6 +1227,40 @@
1239
1227
  "description": "",
1240
1228
  "defaultValue": "false"
1241
1229
  },
1230
+ {
1231
+ "name": "color",
1232
+ "type": "ShipColor | null",
1233
+ "description": "",
1234
+ "defaultValue": "null",
1235
+ "options": [
1236
+ "primary",
1237
+ "accent",
1238
+ "warn",
1239
+ "error",
1240
+ "success"
1241
+ ]
1242
+ },
1243
+ {
1244
+ "name": "variant",
1245
+ "type": "ShipSheetVariant | null",
1246
+ "description": "",
1247
+ "defaultValue": "null",
1248
+ "options": [
1249
+ "simple",
1250
+ "outlined",
1251
+ "flat",
1252
+ "raised"
1253
+ ]
1254
+ },
1255
+ {
1256
+ "name": "size",
1257
+ "type": "ShipSize | null",
1258
+ "description": "",
1259
+ "defaultValue": "null",
1260
+ "options": [
1261
+ "small"
1262
+ ]
1263
+ },
1242
1264
  {
1243
1265
  "name": "optionTitle",
1244
1266
  "type": "string | null",
@@ -1373,7 +1395,7 @@
1373
1395
  "methods": [
1374
1396
  {
1375
1397
  "name": "trigger",
1376
- "parameters": "click)=\"open()\"\n [class.stretch]=\"stretch()\"\n [class.small]=\"small()\"\n [class.readonly]=\"readonly() || disabled()\">\n <ng-content select=\"label\" ngProjectAs=\"label\" />\n <ng-content select=\"[prefix]\" ngProjectAs=\"[prefix]\" />\n <ng-content select=\"[boxPrefix]\" ngProjectAs=\"[boxPrefix]\" />\n\n <div class=\"input\" [class.show-search-text]=\"_showSearchText\" ngProjectAs=\"input\">\n <div class=\"selected-value\" [class.is-selected]=\"_inputState === 'selected'\">\n @if (asFreeText() && inputValue().length > 0 && !isOpen()",
1398
+ "parameters": "click)=\"open()\"\n [color]=\"color()\"\n [variant]=\"variant()\"\n [size]=\"size()\"\n [class.stretch]=\"stretch()\"\n [class.small]=\"small()\"\n [class.readonly]=\"readonly() || disabled()\">\n <ng-content select=\"label\" ngProjectAs=\"label\" />\n <ng-content select=\"[prefix]\" ngProjectAs=\"[prefix]\" />\n <ng-content select=\"[boxPrefix]\" ngProjectAs=\"[boxPrefix]\" />\n\n <div class=\"input\" [class.show-search-text]=\"_showSearchText\" ngProjectAs=\"input\">\n <div class=\"selected-value\" [class.is-selected]=\"_inputState === 'selected'\">\n @if (asFreeText() && inputValue().length > 0 && !isOpen()",
1377
1399
  "returnType": "any",
1378
1400
  "description": ""
1379
1401
  },
@@ -1665,6 +1687,78 @@
1665
1687
  "cssVariables": [],
1666
1688
  "examples": []
1667
1689
  },
1690
+ {
1691
+ "name": "ShipAccordion",
1692
+ "selector": "sh-accordion",
1693
+ "path": "core/projects/ship-ui/src/lib/ship-accordion/ship-accordion.ts",
1694
+ "description": "### Usage\n\nShipAccordion seamlessly wraps the native `&lt;details&gt;` HTML element.\nUse `allowMultiple` to control open exclusivity natively, or allow multi-expand.",
1695
+ "inputs": [
1696
+ {
1697
+ "name": "name",
1698
+ "type": "string",
1699
+ "description": "",
1700
+ "defaultValue": "`sh-accordion-${Math.random("
1701
+ },
1702
+ {
1703
+ "name": "allowMultiple",
1704
+ "type": "boolean",
1705
+ "description": "",
1706
+ "defaultValue": "false"
1707
+ },
1708
+ {
1709
+ "name": "variant",
1710
+ "type": "'base' | 'outlined' | 'flat' | null",
1711
+ "description": "",
1712
+ "defaultValue": "null"
1713
+ },
1714
+ {
1715
+ "name": "size",
1716
+ "type": "string | null",
1717
+ "description": "",
1718
+ "defaultValue": "null"
1719
+ },
1720
+ {
1721
+ "name": "value",
1722
+ "type": "string | null",
1723
+ "description": "",
1724
+ "defaultValue": "null"
1725
+ }
1726
+ ],
1727
+ "outputs": [],
1728
+ "methods": [
1729
+ {
1730
+ "name": "effect",
1731
+ "parameters": "() => {\n const isMultiple = this.allowMultiple();\n const groupName = this.name();\n const valStr = this.value();\n const vals = valStr ? valStr.split(',').filter((v) => v !== ''",
1732
+ "returnType": "[];\n\n this.items().forEach((details) =>",
1733
+ "description": ""
1734
+ }
1735
+ ],
1736
+ "cssVariables": [
1737
+ {
1738
+ "name": "--acc-pad",
1739
+ "defaultValue": "#{p2r(16)}"
1740
+ },
1741
+ {
1742
+ "name": "--acc-f",
1743
+ "defaultValue": "var(--paragraph-30)"
1744
+ },
1745
+ {
1746
+ "name": "--acc-bc",
1747
+ "defaultValue": "var(--base-4)"
1748
+ },
1749
+ {
1750
+ "name": "--acc-s",
1751
+ "defaultValue": "var(--shape-2)"
1752
+ }
1753
+ ],
1754
+ "examples": [
1755
+ {
1756
+ "name": "sandbox-accordion",
1757
+ "html": "<div class=\"controls\">\n <p>Controls</p>\n <header>\n <div class=\"row\">\n <sh-toggle [(checked)]=\"allowMultiple\" class=\"primary raised\">Allow Multiple Open</sh-toggle>\n <sh-select\n class=\"raised primary\"\n color=\"primary\"\n variant=\"raised\"\n [selectMultiple]=\"allowMultiple()\"\n [options]=\"availablePanels\"\n [(selectedOptions)]=\"selectedPanelsArray\">\n <label>Open Panels</label>\n <!-- Hidden input since select needs an element natively -->\n <input type=\"text\" style=\"display: none\" />\n </sh-select>\n </div>\n </header>\n</div>\n\n<div class=\"sandbox\">\n <sh-accordion [(value)]=\"openPanels\" [allowMultiple]=\"allowMultiple()\" [variant]=\"variantType()\">\n <details value=\"panel1\">\n <summary>Personal Information</summary>\n <p>\n This is standard content projected inside native HTML tags! The entire accordion is configured seamlessly with\n DOM structure.\n </p>\n </details>\n\n <details value=\"panel2\">\n <summary>Advanced Settings</summary>\n <div style=\"display: flex; flex-direction: column; gap: 0.5rem\">\n <label>Settings A</label>\n <input type=\"text\" value=\"Configuration\" />\n </div>\n </details>\n\n <details value=\"panel3\">\n <summary>Danger Zone</summary>\n <button class=\"sh-button error flat\">Delete Account</button>\n </details>\n </sh-accordion>\n</div>\n",
1758
+ "ts": "import { ChangeDetectionStrategy, Component, effect, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ShipAccordion, ShipSelect, ShipToggle } from 'ship-ui';\n\n@Component({\n selector: 'app-sandbox-accordion',\n imports: [FormsModule, ShipAccordion, ShipToggle, ShipSelect],\n templateUrl: './sandbox-accordion.html',\n styleUrl: './sandbox-accordion.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SandboxAccordion {\n openPanels = signal<string>('panel1');\n allowMultiple = signal<boolean>(false);\n variantType = signal<'base' | 'outlined' | 'flat' | null>('base');\n\n availablePanels = ['panel1', 'panel2', 'panel3'];\n selectedPanelsArray = signal<string[]>(['panel1']);\n\n constructor() {\n effect(() => {\n const arrStr = this.selectedPanelsArray().join(',');\n if (this.openPanels() !== arrStr) {\n this.openPanels.set(arrStr);\n }\n });\n\n effect(() => {\n const valStr = this.openPanels();\n const currentArr = valStr ? valStr.split(',').filter((x) => x) : [];\n if (currentArr.join(',') !== this.selectedPanelsArray().join(',')) {\n this.selectedPanelsArray.set(currentArr);\n }\n });\n }\n}\n"
1759
+ }
1760
+ ]
1761
+ },
1668
1762
  {
1669
1763
  "name": "ShipToggleCard",
1670
1764
  "selector": "sh-toggle-card",
@@ -1817,6 +1911,21 @@
1817
1911
  }
1818
1912
  ],
1819
1913
  "examples": [
1914
+ {
1915
+ "name": "overlay-sidenav",
1916
+ "html": "<div class=\"sandbox\">\n <sh-sidenav class=\"overlay\" [(isOpen)]=\"isNavOpen\">\n <ng-container sidenav>\n <div style=\"padding: 16px;\">\n <h3>Overlay</h3>\n <p>Links</p>\n </div>\n </ng-container>\n\n <div style=\"padding: 16px; display: flex; flex-direction: column; gap: 16px;\">\n <button shButton class=\"primary\" (click)=\"isNavOpen.set(true)\">Open Overlay Sidenav</button>\n <p>This variant completely overlays the content and provides a backdrop scrim that dismisses the nav on click.</p>\n </div>\n </sh-sidenav>\n</div>\n",
1917
+ "ts": "import { ChangeDetectionStrategy, Component, signal } from '@angular/core';\nimport { ShipButton, ShipSidenav } from 'ship-ui';\n\n@Component({\n selector: 'app-overlay-sidenav',\n imports: [ShipSidenav, ShipButton],\n templateUrl: './overlay-sidenav.html',\n styleUrl: './overlay-sidenav.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class OverlaySidenav {\n isNavOpen = signal(false);\n}\n"
1918
+ },
1919
+ {
1920
+ "name": "simple-sidenav",
1921
+ "html": "<div class=\"sandbox\">\n <sh-sidenav class=\"simple\" [(isOpen)]=\"isNavOpen\">\n <ng-container sidenav>\n <div style=\"padding: 16px;\">\n <h3>Simple</h3>\n <p>Links</p>\n </div>\n </ng-container>\n\n <ng-container sidenav-closed-topbar>\n <button shButton class=\"simple icon\" (click)=\"isNavOpen.set(!isNavOpen())\">\n <sh-icon>list</sh-icon>\n </button>\n </ng-container>\n\n <div style=\"padding: 16px; display: flex; flex-direction: column; gap: 16px;\">\n <button shButton class=\"primary\" (click)=\"isNavOpen.set(!isNavOpen())\">Toggle Simple Sidenav</button>\n <p>This variant supports collapsing gracefully down to either an icon-only mode or top-bar mode based on breakpoints.</p>\n </div>\n </sh-sidenav>\n</div>\n",
1922
+ "ts": "import { ChangeDetectionStrategy, Component, signal } from '@angular/core';\nimport { ShipSidenav, ShipButton, ShipIcon } from 'ship-ui';\n\n@Component({\n selector: 'app-simple-sidenav',\n imports: [ShipSidenav, ShipButton, ShipIcon],\n templateUrl: './simple-sidenav.html',\n styleUrl: './simple-sidenav.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SimpleSidenav {\n isNavOpen = signal(true);\n}\n"
1923
+ },
1924
+ {
1925
+ "name": "default-sidenav",
1926
+ "html": "<div class=\"sandbox\">\n <sh-sidenav [(isOpen)]=\"isNavOpen\">\n <ng-container sidenav>\n <div style=\"padding: 16px;\">\n <h3>Default Nav</h3>\n <p>Links</p>\n </div>\n </ng-container>\n\n <div style=\"padding: 16px; display: flex; flex-direction: column; gap: 16px;\">\n <button shButton class=\"primary\" (click)=\"isNavOpen.set(!isNavOpen())\">Toggle Sidenav</button>\n <p>This is the default fixed position sidenav variant.</p>\n </div>\n </sh-sidenav>\n</div>\n",
1927
+ "ts": "import { ChangeDetectionStrategy, Component, signal } from '@angular/core';\nimport { ShipSidenav, ShipButton } from 'ship-ui';\n\n@Component({\n selector: 'app-default-sidenav',\n imports: [ShipSidenav, ShipButton],\n templateUrl: './default-sidenav.html',\n styleUrl: './default-sidenav.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DefaultSidenav {\n isNavOpen = signal(true);\n}\n"
1928
+ },
1820
1929
  {
1821
1930
  "name": "sandbox-sidenav",
1822
1931
  "html": "<div class=\"controls\">\n <p>Controls</p>\n <header>\n <div class=\"row\">\n <sh-toggle [(checked)]=\"isNavOpen\" class=\"primary raised\">Open/Close</sh-toggle>\n\n <sh-button-group class=\"small\" [(value)]=\"sidenavType\">\n <button value=\"\">Default</button>\n <button value=\"overlay\">Overlay</button>\n <button value=\"simple\">Simple</button>\n </sh-button-group>\n </div>\n\n @if (sidenavType() === 'overlay') {\n <div class=\"row\">\n <sh-toggle [(checked)]=\"disableDrag\" class=\"primary raised\">Disable Drag</sh-toggle>\n </div>\n }\n </header>\n</div>\n\n<div class=\"sandbox\">\n <sh-sidenav [class]=\"sidenavType()\" [(isOpen)]=\"isNavOpen\" [disableDrag]=\"disableDrag()\">\n <ng-container sidenav>sidenav</ng-container>\n\n <ng-container sidenav-closed-topbar><button (click)=\"isNavOpen.set(!isNavOpen())\">hello</button></ng-container>\n\n hello world\n </sh-sidenav>\n</div>\n",
@@ -2150,7 +2259,7 @@
2150
2259
  },
2151
2260
  {
2152
2261
  "name": "range-slider-sandbox",
2153
- "html": "<div class=\"controls\">\n <div class=\"row\">\n <sh-toggle class=\"primary raised\" [(checked)]=\"disabled\">Disabled</sh-toggle>\n <sh-toggle class=\"primary raised\" [(checked)]=\"readonly\">Read-only</sh-toggle>\n\n @if (variation() !== 'thick') {\n <sh-toggle class=\"primary raised\" [(checked)]=\"alwaysShow\">Always show value indicator</sh-toggle>\n }\n <sh-toggle class=\"primary raised\" [(checked)]=\"sharp\">Sharp</sh-toggle>\n </div>\n\n <sh-button-group [(value)]=\"color\">\n <button value=\"primary\">Primary</button>\n <button value=\"accent\">Accent</button>\n <button value=\"warn\">Warn</button>\n <button value=\"error\">Error</button>\n <button value=\"success\">Success</button>\n </sh-button-group>\n\n <sh-button-group [(value)]=\"variation\">\n <button value=\"base\">Base</button>\n <button value=\"thick\">Thick</button>\n <button value=\"outlined\">Outlined</button>\n <button value=\"flat\">Flat</button>\n <button value=\"raised\">Raised</button>\n </sh-button-group>\n\n <div class=\"fields\">\n <sh-form-field>\n <label>Unit</label>\n <input type=\"text\" [(ngModel)]=\"unit\" />\n </sh-form-field>\n\n <sh-form-field>\n <label>Min</label>\n <input type=\"text\" [(ngModel)]=\"min\" />\n </sh-form-field>\n\n <sh-form-field>\n <label>Max</label>\n <input type=\"text\" [(ngModel)]=\"max\" />\n </sh-form-field>\n\n <sh-form-field>\n <label>Step</label>\n <input type=\"text\" [(ngModel)]=\"step\" />\n </sh-form-field>\n </div>\n</div>\n\n<div class=\"sandbox-example\">\n <sh-range-slider\n [unit]=\"unit()\"\n [class]=\"color() + ' ' + variation()\"\n [class.sharp]=\"sharp()\"\n [class.always-show]=\"alwaysShow()\">\n <input\n type=\"range\"\n [min]=\"min()\"\n [max]=\"max()\"\n [step]=\"step()\"\n [(ngModel)]=\"value\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\" />\n </sh-range-slider>\n <p>Selected: {{ value() }}</p>\n</div>\n",
2262
+ "html": "<div class=\"controls\">\n <div class=\"row\">\n <sh-toggle class=\"primary raised\" [(checked)]=\"disabled\">Disabled</sh-toggle>\n <sh-toggle class=\"primary raised\" [(checked)]=\"readonly\">Read-only</sh-toggle>\n\n @if (variation() !== 'thick') {\n <sh-toggle class=\"primary raised\" [(checked)]=\"alwaysShow\">Always show value indicator</sh-toggle>\n }\n <sh-toggle class=\"primary raised\" [(checked)]=\"sharp\">Sharp</sh-toggle>\n </div>\n\n <sh-button-group [(value)]=\"color\">\n <button value=\"primary\">Primary</button>\n <button value=\"accent\">Accent</button>\n <button value=\"warn\">Warn</button>\n <button value=\"error\">Error</button>\n <button value=\"success\">Success</button>\n </sh-button-group>\n\n <sh-button-group [(value)]=\"variation\">\n <button value=\"base\">Default</button>\n <button value=\"thick\">Thick</button>\n <button value=\"outlined\">Outlined</button>\n <button value=\"flat\">Flat</button>\n <button value=\"raised\">Raised</button>\n </sh-button-group>\n\n <div class=\"fields\">\n <sh-form-field>\n <label>Unit</label>\n <input type=\"text\" [(ngModel)]=\"unit\" />\n </sh-form-field>\n\n <sh-form-field>\n <label>Min</label>\n <input type=\"text\" [(ngModel)]=\"min\" />\n </sh-form-field>\n\n <sh-form-field>\n <label>Max</label>\n <input type=\"text\" [(ngModel)]=\"max\" />\n </sh-form-field>\n\n <sh-form-field>\n <label>Step</label>\n <input type=\"text\" [(ngModel)]=\"step\" />\n </sh-form-field>\n </div>\n</div>\n\n<div class=\"sandbox-example\">\n <sh-range-slider\n [unit]=\"unit()\"\n [class]=\"color() + ' ' + variation()\"\n [class.sharp]=\"sharp()\"\n [class.always-show]=\"alwaysShow()\">\n <input\n type=\"range\"\n [min]=\"min()\"\n [max]=\"max()\"\n [step]=\"step()\"\n [(ngModel)]=\"value\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\" />\n </sh-range-slider>\n <p>Selected: {{ value() }}</p>\n</div>\n",
2154
2263
  "ts": "import { ChangeDetectionStrategy, Component, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ShipButtonGroup, ShipFormField, ShipRangeSlider, ShipToggle } from 'ship-ui';\n\n@Component({\n selector: 'app-range-slider-sandbox',\n standalone: true,\n imports: [FormsModule, ShipRangeSlider, ShipButtonGroup, ShipToggle, ShipFormField],\n templateUrl: './range-slider-sandbox.html',\n styleUrl: './range-slider-sandbox.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RangeSliderSandbox {\n value = signal(50);\n min = signal(0);\n max = signal(100);\n step = signal(1);\n disabled = signal(false);\n readonly = signal(false);\n alwaysShow = signal(false);\n sharp = signal(false);\n unit = signal('%');\n color = signal<'primary' | 'accent' | 'warn' | 'success' | 'error'>('primary');\n variation = signal<'base' | 'thick' | 'outlined' | 'flat' | 'raised'>('base');\n}\n"
2155
2264
  },
2156
2265
  {
@@ -2989,7 +3098,7 @@
2989
3098
  },
2990
3099
  {
2991
3100
  "name": "base-alert",
2992
- "html": "<!-- Using attribute inputs -->\n<sh-alert>Base alert</sh-alert>\n<sh-alert color=\"primary\">Primary alert</sh-alert>\n<sh-alert color=\"accent\">Accent alert</sh-alert>\n<sh-alert color=\"warn\">Warn alert</sh-alert>\n<sh-alert color=\"error\">Error alert</sh-alert>\n<sh-alert color=\"success\">Success alert</sh-alert>\n<sh-alert color=\"success\">\n Success alert\n <p>with a paragraph</p>\n</sh-alert>\n\n<sh-alert color=\"primary\">\n Success alert\n <button shButton color=\"primary\" variant=\"outlined\" size=\"small\">Button</button>\n</sh-alert>\n\n<sh-alert color=\"primary\">\n Success alert\n <p>with a paragraph</p>\n <button shButton color=\"primary\" variant=\"outlined\" size=\"small\">Button</button>\n</sh-alert>\n\n<!-- Alternative: Using CSS classes -->\n<!--\n<sh-alert class=\"primary\">Primary alert</sh-alert>\n<sh-alert class=\"accent\">Accent alert</sh-alert>\n<button shButton class=\"outlined primary small\">Button</button>\n-->\n",
3101
+ "html": "<!-- Using attribute inputs -->\n<sh-alert>Default alert</sh-alert>\n<sh-alert color=\"primary\">Primary alert</sh-alert>\n<sh-alert color=\"accent\">Accent alert</sh-alert>\n<sh-alert color=\"warn\">Warn alert</sh-alert>\n<sh-alert color=\"error\">Error alert</sh-alert>\n<sh-alert color=\"success\">Success alert</sh-alert>\n<sh-alert color=\"success\">\n Success alert\n <p>with a paragraph</p>\n</sh-alert>\n\n<sh-alert color=\"primary\">\n Success alert\n <button shButton color=\"primary\" variant=\"outlined\" size=\"small\">Button</button>\n</sh-alert>\n\n<sh-alert color=\"primary\">\n Success alert\n <p>with a paragraph</p>\n <button shButton color=\"primary\" variant=\"outlined\" size=\"small\">Button</button>\n</sh-alert>\n\n<!-- Alternative: Using CSS classes -->\n<!--\n<sh-alert class=\"primary\">Primary alert</sh-alert>\n<sh-alert class=\"accent\">Accent alert</sh-alert>\n<button shButton class=\"outlined primary small\">Button</button>\n-->\n",
2993
3102
  "ts": "import { ChangeDetectionStrategy, Component, signal } from '@angular/core';\nimport { ShipAlert, ShipButton } from 'ship-ui';\n\n@Component({\n selector: 'app-base-alert',\n standalone: true,\n imports: [ShipAlert, ShipButton],\n templateUrl: './base-alert.html',\n styleUrl: './base-alert.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BaseAlert {\n active = signal(false);\n}\n"
2994
3103
  },
2995
3104
  {
@@ -3046,7 +3155,7 @@
3046
3155
  },
3047
3156
  {
3048
3157
  "name": "base-alert",
3049
- "html": "<!-- Using attribute inputs -->\n<sh-alert>Base alert</sh-alert>\n<sh-alert color=\"primary\">Primary alert</sh-alert>\n<sh-alert color=\"accent\">Accent alert</sh-alert>\n<sh-alert color=\"warn\">Warn alert</sh-alert>\n<sh-alert color=\"error\">Error alert</sh-alert>\n<sh-alert color=\"success\">Success alert</sh-alert>\n<sh-alert color=\"success\">\n Success alert\n <p>with a paragraph</p>\n</sh-alert>\n\n<sh-alert color=\"primary\">\n Success alert\n <button shButton color=\"primary\" variant=\"outlined\" size=\"small\">Button</button>\n</sh-alert>\n\n<sh-alert color=\"primary\">\n Success alert\n <p>with a paragraph</p>\n <button shButton color=\"primary\" variant=\"outlined\" size=\"small\">Button</button>\n</sh-alert>\n\n<!-- Alternative: Using CSS classes -->\n<!--\n<sh-alert class=\"primary\">Primary alert</sh-alert>\n<sh-alert class=\"accent\">Accent alert</sh-alert>\n<button shButton class=\"outlined primary small\">Button</button>\n-->\n",
3158
+ "html": "<!-- Using attribute inputs -->\n<sh-alert>Default alert</sh-alert>\n<sh-alert color=\"primary\">Primary alert</sh-alert>\n<sh-alert color=\"accent\">Accent alert</sh-alert>\n<sh-alert color=\"warn\">Warn alert</sh-alert>\n<sh-alert color=\"error\">Error alert</sh-alert>\n<sh-alert color=\"success\">Success alert</sh-alert>\n<sh-alert color=\"success\">\n Success alert\n <p>with a paragraph</p>\n</sh-alert>\n\n<sh-alert color=\"primary\">\n Success alert\n <button shButton color=\"primary\" variant=\"outlined\" size=\"small\">Button</button>\n</sh-alert>\n\n<sh-alert color=\"primary\">\n Success alert\n <p>with a paragraph</p>\n <button shButton color=\"primary\" variant=\"outlined\" size=\"small\">Button</button>\n</sh-alert>\n\n<!-- Alternative: Using CSS classes -->\n<!--\n<sh-alert class=\"primary\">Primary alert</sh-alert>\n<sh-alert class=\"accent\">Accent alert</sh-alert>\n<button shButton class=\"outlined primary small\">Button</button>\n-->\n",
3050
3159
  "ts": "import { ChangeDetectionStrategy, Component, signal } from '@angular/core';\nimport { ShipAlert, ShipButton } from 'ship-ui';\n\n@Component({\n selector: 'app-base-alert',\n standalone: true,\n imports: [ShipAlert, ShipButton],\n templateUrl: './base-alert.html',\n styleUrl: './base-alert.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BaseAlert {\n active = signal(false);\n}\n"
3051
3160
  },
3052
3161
  {
@@ -3145,7 +3254,7 @@
3145
3254
  },
3146
3255
  {
3147
3256
  "name": "base-alert",
3148
- "html": "<!-- Using attribute inputs -->\n<sh-alert>Base alert</sh-alert>\n<sh-alert color=\"primary\">Primary alert</sh-alert>\n<sh-alert color=\"accent\">Accent alert</sh-alert>\n<sh-alert color=\"warn\">Warn alert</sh-alert>\n<sh-alert color=\"error\">Error alert</sh-alert>\n<sh-alert color=\"success\">Success alert</sh-alert>\n<sh-alert color=\"success\">\n Success alert\n <p>with a paragraph</p>\n</sh-alert>\n\n<sh-alert color=\"primary\">\n Success alert\n <button shButton color=\"primary\" variant=\"outlined\" size=\"small\">Button</button>\n</sh-alert>\n\n<sh-alert color=\"primary\">\n Success alert\n <p>with a paragraph</p>\n <button shButton color=\"primary\" variant=\"outlined\" size=\"small\">Button</button>\n</sh-alert>\n\n<!-- Alternative: Using CSS classes -->\n<!--\n<sh-alert class=\"primary\">Primary alert</sh-alert>\n<sh-alert class=\"accent\">Accent alert</sh-alert>\n<button shButton class=\"outlined primary small\">Button</button>\n-->\n",
3257
+ "html": "<!-- Using attribute inputs -->\n<sh-alert>Default alert</sh-alert>\n<sh-alert color=\"primary\">Primary alert</sh-alert>\n<sh-alert color=\"accent\">Accent alert</sh-alert>\n<sh-alert color=\"warn\">Warn alert</sh-alert>\n<sh-alert color=\"error\">Error alert</sh-alert>\n<sh-alert color=\"success\">Success alert</sh-alert>\n<sh-alert color=\"success\">\n Success alert\n <p>with a paragraph</p>\n</sh-alert>\n\n<sh-alert color=\"primary\">\n Success alert\n <button shButton color=\"primary\" variant=\"outlined\" size=\"small\">Button</button>\n</sh-alert>\n\n<sh-alert color=\"primary\">\n Success alert\n <p>with a paragraph</p>\n <button shButton color=\"primary\" variant=\"outlined\" size=\"small\">Button</button>\n</sh-alert>\n\n<!-- Alternative: Using CSS classes -->\n<!--\n<sh-alert class=\"primary\">Primary alert</sh-alert>\n<sh-alert class=\"accent\">Accent alert</sh-alert>\n<button shButton class=\"outlined primary small\">Button</button>\n-->\n",
3149
3258
  "ts": "import { ChangeDetectionStrategy, Component, signal } from '@angular/core';\nimport { ShipAlert, ShipButton } from 'ship-ui';\n\n@Component({\n selector: 'app-base-alert',\n standalone: true,\n imports: [ShipAlert, ShipButton],\n templateUrl: './base-alert.html',\n styleUrl: './base-alert.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BaseAlert {\n active = signal(false);\n}\n"
3150
3259
  },
3151
3260
  {
package/bin/mcp/index.js CHANGED
@@ -4586,6 +4586,7 @@ var require_limitLength = __commonJS((exports) => {
4586
4586
  var require_pattern = __commonJS((exports) => {
4587
4587
  Object.defineProperty(exports, "__esModule", { value: true });
4588
4588
  var code_1 = require_code2();
4589
+ var util_1 = require_util();
4589
4590
  var codegen_1 = require_codegen();
4590
4591
  var error2 = {
4591
4592
  message: ({ schemaCode }) => (0, codegen_1.str)`must match pattern "${schemaCode}"`,
@@ -4598,10 +4599,18 @@ var require_pattern = __commonJS((exports) => {
4598
4599
  $data: true,
4599
4600
  error: error2,
4600
4601
  code(cxt) {
4601
- const { data, $data, schema, schemaCode, it } = cxt;
4602
+ const { gen, data, $data, schema, schemaCode, it } = cxt;
4602
4603
  const u = it.opts.unicodeRegExp ? "u" : "";
4603
- const regExp = $data ? (0, codegen_1._)`(new RegExp(${schemaCode}, ${u}))` : (0, code_1.usePattern)(cxt, schema);
4604
- cxt.fail$data((0, codegen_1._)`!${regExp}.test(${data})`);
4604
+ if ($data) {
4605
+ const { regExp } = it.opts.code;
4606
+ const regExpCode = regExp.code === "new RegExp" ? (0, codegen_1._)`new RegExp` : (0, util_1.useFunc)(gen, regExp);
4607
+ const valid = gen.let("valid");
4608
+ gen.try(() => gen.assign(valid, (0, codegen_1._)`${regExpCode}(${schemaCode}, ${u}).test(${data})`), () => gen.assign(valid, false));
4609
+ cxt.fail$data((0, codegen_1._)`!${valid}`);
4610
+ } else {
4611
+ const regExp = (0, code_1.usePattern)(cxt, schema);
4612
+ cxt.fail$data((0, codegen_1._)`!${regExp}.test(${data})`);
4613
+ }
4605
4614
  }
4606
4615
  };
4607
4616
  exports.default = def;
@@ -7888,7 +7897,7 @@ class Doc {
7888
7897
  var version = {
7889
7898
  major: 4,
7890
7899
  minor: 3,
7891
- patch: 5
7900
+ patch: 6
7892
7901
  };
7893
7902
 
7894
7903
  // node_modules/zod/v4/core/schemas.js
@@ -8928,7 +8937,7 @@ var $ZodRecord = /* @__PURE__ */ $constructor("$ZodRecord", (inst, def) => {
8928
8937
  if (keyResult instanceof Promise) {
8929
8938
  throw new Error("Async schemas not supported in object keys currently");
8930
8939
  }
8931
- const checkNumericKey = typeof key === "string" && number.test(key) && keyResult.issues.length && keyResult.issues.some((iss) => iss.code === "invalid_type" && iss.expected === "number");
8940
+ const checkNumericKey = typeof key === "string" && number.test(key) && keyResult.issues.length;
8932
8941
  if (checkNumericKey) {
8933
8942
  const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx);
8934
8943
  if (retryResult instanceof Promise) {
@@ -10094,7 +10103,7 @@ function finalize(ctx, schema) {
10094
10103
  }
10095
10104
  }
10096
10105
  }
10097
- if (refSchema.$ref) {
10106
+ if (refSchema.$ref && refSeen.def) {
10098
10107
  for (const key in schema2) {
10099
10108
  if (key === "$ref" || key === "allOf")
10100
10109
  continue;