@joanroucoux/cairn-ui 0.9.2 → 0.10.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 (75) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.md +2 -0
  3. package/fesm2022/joanroucoux-cairn-ui-action-bar.mjs +3 -3
  4. package/fesm2022/joanroucoux-cairn-ui-alert.mjs +3 -3
  5. package/fesm2022/joanroucoux-cairn-ui-amount.mjs +3 -3
  6. package/fesm2022/joanroucoux-cairn-ui-async.mjs +3 -3
  7. package/fesm2022/joanroucoux-cairn-ui-async.mjs.map +1 -1
  8. package/fesm2022/joanroucoux-cairn-ui-avatar.mjs +6 -6
  9. package/fesm2022/joanroucoux-cairn-ui-back-link.mjs +3 -3
  10. package/fesm2022/joanroucoux-cairn-ui-badge.mjs +3 -3
  11. package/fesm2022/joanroucoux-cairn-ui-button.mjs +3 -3
  12. package/fesm2022/joanroucoux-cairn-ui-card.mjs +3 -3
  13. package/fesm2022/joanroucoux-cairn-ui-choice-chips.mjs +3 -3
  14. package/fesm2022/joanroucoux-cairn-ui-choice-chips.mjs.map +1 -1
  15. package/fesm2022/joanroucoux-cairn-ui-delta.mjs +3 -3
  16. package/fesm2022/joanroucoux-cairn-ui-dialog.mjs +3 -3
  17. package/fesm2022/joanroucoux-cairn-ui-dialog.mjs.map +1 -1
  18. package/fesm2022/joanroucoux-cairn-ui-donut.mjs +7 -7
  19. package/fesm2022/joanroucoux-cairn-ui-donut.mjs.map +1 -1
  20. package/fesm2022/joanroucoux-cairn-ui-drawer.mjs +3 -3
  21. package/fesm2022/joanroucoux-cairn-ui-drawer.mjs.map +1 -1
  22. package/fesm2022/joanroucoux-cairn-ui-empty.mjs +3 -3
  23. package/fesm2022/joanroucoux-cairn-ui-empty.mjs.map +1 -1
  24. package/fesm2022/joanroucoux-cairn-ui-external-link.mjs +3 -3
  25. package/fesm2022/joanroucoux-cairn-ui-fact.mjs +6 -6
  26. package/fesm2022/joanroucoux-cairn-ui-fact.mjs.map +1 -1
  27. package/fesm2022/joanroucoux-cairn-ui-field.mjs +9 -9
  28. package/fesm2022/joanroucoux-cairn-ui-filter-chips.mjs +3 -3
  29. package/fesm2022/joanroucoux-cairn-ui-group-header.mjs +3 -3
  30. package/fesm2022/joanroucoux-cairn-ui-group-header.mjs.map +1 -1
  31. package/fesm2022/joanroucoux-cairn-ui-icon-toggle.mjs +43 -0
  32. package/fesm2022/joanroucoux-cairn-ui-icon-toggle.mjs.map +1 -0
  33. package/fesm2022/joanroucoux-cairn-ui-input.mjs +6 -6
  34. package/fesm2022/joanroucoux-cairn-ui-input.mjs.map +1 -1
  35. package/fesm2022/joanroucoux-cairn-ui-line-chart.mjs +3 -3
  36. package/fesm2022/joanroucoux-cairn-ui-menu.mjs +17 -10
  37. package/fesm2022/joanroucoux-cairn-ui-menu.mjs.map +1 -1
  38. package/fesm2022/joanroucoux-cairn-ui-meter.mjs +3 -3
  39. package/fesm2022/joanroucoux-cairn-ui-motion.mjs +12 -12
  40. package/fesm2022/joanroucoux-cairn-ui-nav-item.mjs +3 -3
  41. package/fesm2022/joanroucoux-cairn-ui-result-group.mjs +3 -3
  42. package/fesm2022/joanroucoux-cairn-ui-result-group.mjs.map +1 -1
  43. package/fesm2022/joanroucoux-cairn-ui-row.mjs +15 -15
  44. package/fesm2022/joanroucoux-cairn-ui-row.mjs.map +1 -1
  45. package/fesm2022/joanroucoux-cairn-ui-segmented.mjs +3 -3
  46. package/fesm2022/joanroucoux-cairn-ui-select-pill.mjs +3 -3
  47. package/fesm2022/joanroucoux-cairn-ui-select.mjs +3 -3
  48. package/fesm2022/joanroucoux-cairn-ui-skeleton.mjs +3 -3
  49. package/fesm2022/joanroucoux-cairn-ui-stale-link.mjs +3 -3
  50. package/fesm2022/joanroucoux-cairn-ui-stale-link.mjs.map +1 -1
  51. package/fesm2022/joanroucoux-cairn-ui-stat.mjs +3 -3
  52. package/fesm2022/joanroucoux-cairn-ui-switch.mjs +3 -3
  53. package/fesm2022/joanroucoux-cairn-ui-tab-bar.mjs +6 -6
  54. package/fesm2022/joanroucoux-cairn-ui-table.mjs +27 -27
  55. package/fesm2022/joanroucoux-cairn-ui-table.mjs.map +1 -1
  56. package/fesm2022/joanroucoux-cairn-ui-toast.mjs +7 -7
  57. package/fesm2022/joanroucoux-cairn-ui-toast.mjs.map +1 -1
  58. package/mcp-manifest.json +1 -0
  59. package/package.json +9 -2
  60. package/types/joanroucoux-cairn-ui-async.d.ts +3 -3
  61. package/types/joanroucoux-cairn-ui-choice-chips.d.ts +2 -2
  62. package/types/joanroucoux-cairn-ui-dialog.d.ts +3 -0
  63. package/types/joanroucoux-cairn-ui-donut.d.ts +1 -1
  64. package/types/joanroucoux-cairn-ui-drawer.d.ts +1 -1
  65. package/types/joanroucoux-cairn-ui-empty.d.ts +3 -3
  66. package/types/joanroucoux-cairn-ui-fact.d.ts +1 -1
  67. package/types/joanroucoux-cairn-ui-group-header.d.ts +1 -1
  68. package/types/joanroucoux-cairn-ui-icon-toggle.d.ts +13 -0
  69. package/types/joanroucoux-cairn-ui-input.d.ts +3 -0
  70. package/types/joanroucoux-cairn-ui-menu.d.ts +3 -3
  71. package/types/joanroucoux-cairn-ui-result-group.d.ts +3 -3
  72. package/types/joanroucoux-cairn-ui-row.d.ts +1 -1
  73. package/types/joanroucoux-cairn-ui-stale-link.d.ts +2 -2
  74. package/types/joanroucoux-cairn-ui-table.d.ts +16 -6
  75. package/types/joanroucoux-cairn-ui-toast.d.ts +3 -3
@@ -77,7 +77,7 @@ var UiRow = class UiRow {
77
77
  }
78
78
  static ɵfac = i0.ɵɵngDeclareFactory({
79
79
  minVersion: "12.0.0",
80
- version: "22.2.0",
80
+ version: "22.2.1",
81
81
  ngImport: i0,
82
82
  type: UiRow,
83
83
  deps: [],
@@ -85,7 +85,7 @@ var UiRow = class UiRow {
85
85
  });
86
86
  static ɵcmp = i0.ɵɵngDeclareComponent({
87
87
  minVersion: "17.0.0",
88
- version: "22.2.0",
88
+ version: "22.2.1",
89
89
  type: UiRow,
90
90
  isStandalone: true,
91
91
  selector: "a[ui-row], button[ui-row]",
@@ -175,7 +175,7 @@ var UiRow = class UiRow {
175
175
  };
176
176
  i0.ɵɵngDeclareClassMetadata({
177
177
  minVersion: "12.0.0",
178
- version: "22.2.0",
178
+ version: "22.2.1",
179
179
  ngImport: i0,
180
180
  type: UiRow,
181
181
  decorators: [{
@@ -276,7 +276,7 @@ i0.ɵɵngDeclareClassMetadata({
276
276
  var UiRowItem = class UiRowItem {
277
277
  static ɵfac = i0.ɵɵngDeclareFactory({
278
278
  minVersion: "12.0.0",
279
- version: "22.2.0",
279
+ version: "22.2.1",
280
280
  ngImport: i0,
281
281
  type: UiRowItem,
282
282
  deps: [],
@@ -284,7 +284,7 @@ var UiRowItem = class UiRowItem {
284
284
  });
285
285
  static ɵdir = i0.ɵɵngDeclareDirective({
286
286
  minVersion: "14.0.0",
287
- version: "22.2.0",
287
+ version: "22.2.1",
288
288
  type: UiRowItem,
289
289
  isStandalone: true,
290
290
  selector: "[uiRowItem]",
@@ -294,7 +294,7 @@ var UiRowItem = class UiRowItem {
294
294
  };
295
295
  i0.ɵɵngDeclareClassMetadata({
296
296
  minVersion: "12.0.0",
297
- version: "22.2.0",
297
+ version: "22.2.1",
298
298
  ngImport: i0,
299
299
  type: UiRowItem,
300
300
  decorators: [{
@@ -313,7 +313,7 @@ var UiListRow = class UiListRow {
313
313
  classes = computed(() => this.ruled() ? "flex min-h-18 items-center gap-3 py-1.5 lg:min-h-17 shadow-[inset_0_-1px_0_var(--hairline)]" : "flex min-h-18 items-center gap-3 py-1.5 lg:min-h-17", ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
314
314
  static ɵfac = i0.ɵɵngDeclareFactory({
315
315
  minVersion: "12.0.0",
316
- version: "22.2.0",
316
+ version: "22.2.1",
317
317
  ngImport: i0,
318
318
  type: UiListRow,
319
319
  deps: [],
@@ -321,7 +321,7 @@ var UiListRow = class UiListRow {
321
321
  });
322
322
  static ɵdir = i0.ɵɵngDeclareDirective({
323
323
  minVersion: "17.1.0",
324
- version: "22.2.0",
324
+ version: "22.2.1",
325
325
  type: UiListRow,
326
326
  isStandalone: true,
327
327
  selector: "[uiListRow]",
@@ -338,7 +338,7 @@ var UiListRow = class UiListRow {
338
338
  };
339
339
  i0.ɵɵngDeclareClassMetadata({
340
340
  minVersion: "12.0.0",
341
- version: "22.2.0",
341
+ version: "22.2.1",
342
342
  ngImport: i0,
343
343
  type: UiListRow,
344
344
  decorators: [{
@@ -360,7 +360,7 @@ i0.ɵɵngDeclareClassMetadata({
360
360
  var UiRowGroup = class UiRowGroup {
361
361
  static ɵfac = i0.ɵɵngDeclareFactory({
362
362
  minVersion: "12.0.0",
363
- version: "22.2.0",
363
+ version: "22.2.1",
364
364
  ngImport: i0,
365
365
  type: UiRowGroup,
366
366
  deps: [],
@@ -368,7 +368,7 @@ var UiRowGroup = class UiRowGroup {
368
368
  });
369
369
  static ɵdir = i0.ɵɵngDeclareDirective({
370
370
  minVersion: "14.0.0",
371
- version: "22.2.0",
371
+ version: "22.2.1",
372
372
  type: UiRowGroup,
373
373
  isStandalone: true,
374
374
  selector: "[uiRowGroup]",
@@ -378,7 +378,7 @@ var UiRowGroup = class UiRowGroup {
378
378
  };
379
379
  i0.ɵɵngDeclareClassMetadata({
380
380
  minVersion: "12.0.0",
381
- version: "22.2.0",
381
+ version: "22.2.1",
382
382
  ngImport: i0,
383
383
  type: UiRowGroup,
384
384
  decorators: [{
@@ -392,7 +392,7 @@ i0.ɵɵngDeclareClassMetadata({
392
392
  var UiRowTile = class UiRowTile {
393
393
  static ɵfac = i0.ɵɵngDeclareFactory({
394
394
  minVersion: "12.0.0",
395
- version: "22.2.0",
395
+ version: "22.2.1",
396
396
  ngImport: i0,
397
397
  type: UiRowTile,
398
398
  deps: [],
@@ -400,7 +400,7 @@ var UiRowTile = class UiRowTile {
400
400
  });
401
401
  static ɵdir = i0.ɵɵngDeclareDirective({
402
402
  minVersion: "14.0.0",
403
- version: "22.2.0",
403
+ version: "22.2.1",
404
404
  type: UiRowTile,
405
405
  isStandalone: true,
406
406
  selector: "[uiRowTile]",
@@ -410,7 +410,7 @@ var UiRowTile = class UiRowTile {
410
410
  };
411
411
  i0.ɵɵngDeclareClassMetadata({
412
412
  minVersion: "12.0.0",
413
- version: "22.2.0",
413
+ version: "22.2.1",
414
414
  ngImport: i0,
415
415
  type: UiRowTile,
416
416
  decorators: [{
@@ -1 +1 @@
1
- {"version":3,"file":"joanroucoux-cairn-ui-row.mjs","names":[],"sources":["../../../projects/ui/row/row.ts"],"sourcesContent":["import { Component, DestroyRef, Directive, ElementRef, booleanAttribute, computed, inject, input } from '@angular/core';\n\nimport { holdTransitionsUntilRendered } from '@joanroucoux/cairn-ui/motion';\n\nexport const ROW_SIZES = ['md', 'lg', 'xl', 'card', 'dense'] as const;\nexport type RowSize = (typeof ROW_SIZES)[number];\n\nexport const ROW_PADDINGS = ['md', 'sm', 'none'] as const;\nexport type RowPadding = (typeof ROW_PADDINGS)[number];\n\nexport const ROW_GAPS = ['default', 'sm'] as const;\nexport type RowGap = (typeof ROW_GAPS)[number];\n\nexport const ROW_TRAILINGS = ['none', 'chevron'] as const;\nexport type RowTrailing = (typeof ROW_TRAILINGS)[number];\n\nconst SIZE_CLASSES: Record<RowSize, string> = {\n md: 'min-h-14',\n lg: 'min-h-15',\n xl: 'min-h-18 pointer-fine:min-h-17',\n card: 'min-h-17',\n dense: 'min-h-14',\n};\n\nconst SIZE_GAPS: Record<RowSize, string> = { md: 'gap-2.5', lg: 'gap-2.5', xl: 'gap-3', card: 'gap-2', dense: 'gap-3' };\n\nconst PADDING_CLASSES: Record<RowPadding, string> = { md: 'px-2.5', sm: 'px-2', none: 'px-0' };\n\nconst BASE_CLASSES =\n 'flex w-full items-center py-1.5 rounded-control text-left select-none touch-manipulation focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-(--ring)';\n\nconst INTERACTIVE_CLASSES =\n 'transition-[scale,background-color] [transition-duration:var(--duration-press),var(--duration-fast)] ease-out hover:bg-(--glow) active:bg-(--soft) active:scale-(--press-scale)';\n\nconst CHEVRON_CLASSES = 'min-h-(--row-min) gap-3 px-0 hover:text-(--muted-foreground)';\n\nconst CHEVRON_INTERACTIVE_CLASSES = 'transition-colors [transition-duration:var(--duration-fast)] ease-out';\n\nconst UNAVAILABLE_CLASSES = 'opacity-50 cursor-not-allowed';\n\nconst SELECTED_CLASSES = 'bg-(--soft)';\n\n/**\n * Clickable row of a list: a holding, an account, a search result. With `trailing=\"chevron\"` it is a\n * flush link row: no side padding, a 16 px chevron at the end, the text dimming on hover.\n *\n * @example\n * <a ui-row [selected]=\"holding.id === openId()\" [routerLink]=\"['/holdings', holding.id]\">\n * {{ holding.name }}\n * </a>\n */\n@Component({\n selector: 'a[ui-row], button[ui-row]',\n template: `\n <ng-content />\n @if (trailing() === 'chevron') {\n <svg\n aria-hidden=\"true\"\n class=\"block flex-none fill-none stroke-(--subtle-foreground)\"\n height=\"16\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1.75\"\n viewBox=\"0 0 24 24\"\n width=\"16\"\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n }\n @if (busy()) {\n <span\n aria-hidden=\"true\"\n class=\"rounded-pill animate-cairn-spin size-4 flex-none border-2 border-current border-r-transparent\"\n ></span>\n }\n `,\n host: {\n '[class]': 'classes()',\n '[attr.aria-busy]': 'busy() || null',\n '[attr.aria-disabled]': \"busy() || unavailable() ? 'true' : null\",\n '[attr.aria-current]': \"selected() ? 'true' : null\",\n },\n})\nexport class UiRow {\n readonly selected = input(false, { transform: booleanAttribute });\n readonly busy = input(false, { transform: booleanAttribute });\n readonly unavailable = input(false, { transform: booleanAttribute });\n readonly size = input<RowSize>('md');\n readonly padding = input<RowPadding>('md');\n readonly gap = input<RowGap>('default');\n readonly trailing = input<RowTrailing>('none');\n\n protected readonly classes = computed(() => {\n const chevron = this.trailing() === 'chevron';\n const layout = chevron\n ? CHEVRON_CLASSES\n : `${SIZE_CLASSES[this.size()]} ${this.gap() === 'sm' ? 'gap-2' : SIZE_GAPS[this.size()]} ${PADDING_CLASSES[this.padding()]}`;\n const interactive = chevron ? CHEVRON_INTERACTIVE_CLASSES : INTERACTIVE_CLASSES;\n\n return `${BASE_CLASSES} ${layout}${this.unavailable() ? ` ${UNAVAILABLE_CLASSES}` : ` ${interactive}`}${this.selected() ? ` ${SELECTED_CLASSES}` : ''}${this.busy() ? ' pointer-events-none' : ''}`;\n });\n\n constructor() {\n holdTransitionsUntilRendered();\n const host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n const guard = (event: Event): void => {\n if (this.busy() || this.unavailable()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n };\n\n host.addEventListener('click', guard, { capture: true });\n inject(DestroyRef).onDestroy(() => host.removeEventListener('click', guard, { capture: true }));\n }\n}\n\n/**\n * Lays out a `ui-row` with a trailing action beside it, such as a \"more\" icon button.\n *\n * @example\n * <div uiRowItem>\n * <a ui-row size=\"xl\" padding=\"sm\" routerLink=\"/accounts/1\">...</a>\n * <button ui-button variant=\"quiet\" size=\"icon-sm\" aria-label=\"Account actions\">...</button>\n * </div>\n */\n@Directive({\n selector: '[uiRowItem]',\n host: {\n class:\n 'flex items-center gap-1 [&>[ui-row]]:w-auto [&>[ui-row]]:min-w-0 [&>[ui-row]]:flex-1 [&>:not([ui-row])]:flex-none',\n },\n})\nexport class UiRowItem {}\n\n/**\n * Non-interactive row of a list, separated from the next by a hairline: a passkey with its delete\n * button, a device, a setting. Put it on an `li` or a `div`. Use `ui-row` instead when the whole\n * row is a link or an action.\n *\n * @example\n * <ul>\n * <li uiListRow>\n * <span class=\"flex-1\">MacBook Air</span>\n * <button ui-button variant=\"quiet-destructive\" size=\"icon-sm\" aria-label=\"Delete MacBook Air\">...</button>\n * </li>\n * </ul>\n */\n@Directive({\n selector: '[uiListRow]',\n host: { '[class]': 'classes()' },\n})\nexport class UiListRow {\n readonly ruled = input(true, { transform: booleanAttribute });\n\n protected readonly classes = computed(() =>\n this.ruled()\n ? 'flex min-h-18 items-center gap-3 py-1.5 lg:min-h-17 shadow-[inset_0_-1px_0_var(--hairline)]'\n : 'flex min-h-18 items-center gap-3 py-1.5 lg:min-h-17',\n );\n}\n\n/**\n * Groups link rows under a hairline, as the \"other ways\" links under a search list. Put it on a `div`\n * around `ui-row` with `trailing=\"chevron\"`.\n *\n * @example\n * <div uiRowGroup>\n * <button ui-row type=\"button\" trailing=\"chevron\">Saisir à la main</button>\n * </div>\n */\n@Directive({\n selector: '[uiRowGroup]',\n host: { class: 'flex flex-col pt-1 shadow-[inset_0_1px_0_var(--hairline)]' },\n})\nexport class UiRowGroup {}\n\n/**\n * The filled tile that leads a row, holding an icon. Put it on a `span` as the first child of a\n * `ui-row` or a `uiListRow`.\n *\n * @example\n * <a ui-row size=\"xl\" padding=\"sm\" href=\"/export\">\n * <span uiRowTile><svg lucideDownload [size]=\"18\" /></span>\n * Export\n * </a>\n */\n@Directive({\n selector: '[uiRowTile]',\n host: { class: 'rounded-control grid size-9 flex-none place-items-center bg-(--muted)' },\n})\nexport class UiRowTile {}\n"],"mappings":";;;AAIA,MAAa,YAAY;CAAC;CAAM;CAAM;CAAM;CAAQ;AAAO;AAG3D,MAAa,eAAe;CAAC;CAAM;CAAM;AAAM;AAG/C,MAAa,WAAW,CAAC,WAAW,IAAI;AAGxC,MAAa,gBAAgB,CAAC,QAAQ,SAAS;AAG/C,MAAM,eAAwC;CAC5C,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,MAAM;CACN,OAAO;AACR;AAED,MAAM,YAAqC;CAAE,IAAI;CAAW,IAAI;CAAW,IAAI;CAAS,MAAM;CAAS,OAAO;AAAO;AAErH,MAAM,kBAA8C;CAAE,IAAI;CAAU,IAAI;CAAQ,MAAM;AAAM;AAE5F,MAAM,eACJ;AAEF,MAAM,sBACJ;AAEF,MAAM,kBAAkB;AAExB,MAAM,8BAA8B;AAEpC,MAAM,sBAAsB;AAE5B,MAAM,mBAAmB;AA2CzB,IAAa,QAAb,MAAa,MAAK;CACP,WAAW,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,WAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CACrD,OAAO,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,OAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CACjD,cAAc,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,cAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CACxD,OAAO,MAAe,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAC3B,UAAU,MAAkB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CACjC,MAAM,MAAc,WAAU,GAAA,YAAA,CAAA,EAAA,WAAA,MAAA,CAAA,+BAAA,CAAA,CAAA;CAC9B,WAAW,MAAmB,QAAO,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CAE3B,UAAU,eAAc;EACzC,MAAM,UAAU,KAAK,SAAQ,MAAO;EACpC,MAAM,SAAS,UACX,kBACA,GAAG,aAAa,KAAK,KAAI,GAAG,GAAI,KAAK,IAAG,MAAO,OAAO,UAAU,UAAU,KAAK,KAAI,GAAG,GAAI,gBAAgB,KAAK,QAAO;EAC1H,MAAM,cAAc,UAAU,8BAA8B;EAE5D,OAAO,GAAG,aAAY,GAAI,SAAS,KAAK,YAAW,IAAK,IAAI,wBAAwB,IAAI,gBAAgB,KAAK,SAAQ,IAAK,IAAI,qBAAqB,KAAK,KAAK,KAAI,IAAK,yBAAyB;CACjM,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAEF,cAAA;EACE,6BAA4B;EAC5B,MAAM,OAAO,OAAgC,UAAU,CAAC,CAAC;EACzD,MAAM,SAAS,UAAsB;GACnC,IAAI,KAAK,KAAI,KAAM,KAAK,YAAW,GAAI;IACrC,MAAM,eAAc;IACpB,MAAM,yBAAwB;GAChC;EACF;EAEA,KAAK,iBAAiB,SAAS,OAAO,EAAE,SAAS,KAAI,CAAE;EACvD,OAAO,UAAU,CAAC,CAAC,gBAAgB,KAAK,oBAAoB,SAAS,OAAO,EAAE,SAAS,KAAI,CAAE,CAAC;CAChG;CA/BW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAK,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAL,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAK,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,KAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,MAAA,EAAA,YAAA;GAAA,SAAA;GAAA,kBAAA;GAAA,sBAAA;GAAA,qBAAA;EAAA,EAAA;EAAA,UAAA;EAAA,UA9BN;;;;;;;;;;;;;;;;;;;;;;;EAsBT,UAAA;CAAA,CAAA;;AAQU,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAK,YAAA,CAAA;EAhCjB,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,UAAU;;;;;;;;;;;;;;;;;;;;;;;GAuBV,MAAM;IACJ,WAAW;IACX,oBAAoB;IACpB,wBAAwB;IACxB,uBAAuB;GACxB;EACF,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDD,IAAa,YAAb,MAAa,UAAS;CAAT,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAS,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAT,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAS,cAAA;EAAA,UAAA;EAAA,MAAA,EAAA,gBAAA,oHAAA;EAAA,UAAA;CAAA,CAAA;;AAAT,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAS,YAAA,CAAA;EAPrB,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,MAAM,EACJ,OACE,oHACH;EACF,CAAA;;;AAoBD,IAAa,YAAb,MAAa,UAAS;CACX,QAAQ,MAAM,MAAI;EAAA,GAAA,YAAA,EAAA,WAAA,QAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CAEvC,UAAU,eAC3B,KAAK,MAAK,IACN,gGACA,uDACL,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAPU,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAS,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAT,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAS,cAAA;EAAA,UAAA;EAAA,QAAA,EAAA,OAAA;GAAA,mBAAA;GAAA,YAAA;GAAA,UAAA;GAAA,YAAA;GAAA,mBAAA;EAAA,EAAA;EAAA,MAAA,EAAA,YAAA,EAAA,SAAA,YAAA,EAAA;EAAA,UAAA;CAAA,CAAA;;AAAT,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAS,YAAA,CAAA;EAJrB,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,MAAM,EAAE,WAAW,YAAW;EAC/B,CAAA;;;;;;;;;;;AAwBD,IAAa,aAAb,MAAa,WAAU;CAAV,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAU,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAV,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAU,cAAA;EAAA,UAAA;EAAA,MAAA,EAAA,gBAAA,4DAAA;EAAA,UAAA;CAAA,CAAA;;AAAV,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAU,YAAA,CAAA;EAJtB,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,MAAM,EAAE,OAAO,4DAA2D;EAC3E,CAAA;;;AAiBD,IAAa,YAAb,MAAa,UAAS;CAAT,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAS,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAT,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAS,cAAA;EAAA,UAAA;EAAA,MAAA,EAAA,gBAAA,wEAAA;EAAA,UAAA;CAAA,CAAA;;AAAT,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAS,YAAA,CAAA;EAJrB,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,MAAM,EAAE,OAAO,wEAAuE;EACvF,CAAA"}
1
+ {"version":3,"file":"joanroucoux-cairn-ui-row.mjs","names":[],"sources":["../../../projects/ui/row/row.ts"],"sourcesContent":["import { Component, DestroyRef, Directive, ElementRef, booleanAttribute, computed, inject, input } from '@angular/core';\n\nimport { holdTransitionsUntilRendered } from '@joanroucoux/cairn-ui/motion';\n\nexport const ROW_SIZES = ['md', 'lg', 'xl', 'card', 'dense'] as const;\nexport type RowSize = (typeof ROW_SIZES)[number];\n\nexport const ROW_PADDINGS = ['md', 'sm', 'none'] as const;\nexport type RowPadding = (typeof ROW_PADDINGS)[number];\n\nexport const ROW_GAPS = ['default', 'sm'] as const;\nexport type RowGap = (typeof ROW_GAPS)[number];\n\nexport const ROW_TRAILINGS = ['none', 'chevron'] as const;\nexport type RowTrailing = (typeof ROW_TRAILINGS)[number];\n\nconst SIZE_CLASSES: Record<RowSize, string> = {\n md: 'min-h-14',\n lg: 'min-h-15',\n xl: 'min-h-18 pointer-fine:min-h-17',\n card: 'min-h-17',\n dense: 'min-h-14',\n};\n\nconst SIZE_GAPS: Record<RowSize, string> = { md: 'gap-2.5', lg: 'gap-2.5', xl: 'gap-3', card: 'gap-2', dense: 'gap-3' };\n\nconst PADDING_CLASSES: Record<RowPadding, string> = { md: 'px-2.5', sm: 'px-2', none: 'px-0' };\n\nconst BASE_CLASSES =\n 'flex w-full items-center py-1.5 rounded-control text-left select-none touch-manipulation focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-(--ring)';\n\nconst INTERACTIVE_CLASSES =\n 'transition-[scale,background-color] [transition-duration:var(--duration-press),var(--duration-fast)] ease-out hover:bg-(--glow) active:bg-(--soft) active:scale-(--press-scale)';\n\nconst CHEVRON_CLASSES = 'min-h-(--row-min) gap-3 px-0 hover:text-(--muted-foreground)';\n\nconst CHEVRON_INTERACTIVE_CLASSES = 'transition-colors [transition-duration:var(--duration-fast)] ease-out';\n\nconst UNAVAILABLE_CLASSES = 'opacity-50 cursor-not-allowed';\n\nconst SELECTED_CLASSES = 'bg-(--soft)';\n\n/**\n * Clickable row of a list: a holding, an account, a search result. With `trailing=\"chevron\"` it is a\n * flush link row: no side padding, a 16 px chevron at the end, the text dimming on hover.\n *\n * @example\n * <a ui-row [selected]=\"holding.id === openId()\" [routerLink]=\"['/holdings', holding.id]\">\n * {{ holding.name }}\n * </a>\n */\n@Component({\n selector: 'a[ui-row], button[ui-row]',\n template: `\n <ng-content />\n @if (trailing() === 'chevron') {\n <svg\n aria-hidden=\"true\"\n class=\"block flex-none fill-none stroke-(--subtle-foreground)\"\n height=\"16\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1.75\"\n viewBox=\"0 0 24 24\"\n width=\"16\"\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n }\n @if (busy()) {\n <span\n aria-hidden=\"true\"\n class=\"rounded-pill animate-cairn-spin size-4 flex-none border-2 border-current border-r-transparent\"\n ></span>\n }\n `,\n host: {\n '[class]': 'classes()',\n '[attr.aria-busy]': 'busy() || null',\n '[attr.aria-disabled]': \"busy() || unavailable() ? 'true' : null\",\n '[attr.aria-current]': \"selected() ? 'true' : null\",\n },\n})\nexport class UiRow {\n readonly selected = input(false, { transform: booleanAttribute });\n readonly busy = input(false, { transform: booleanAttribute });\n readonly unavailable = input(false, { transform: booleanAttribute });\n readonly size = input<RowSize>('md');\n readonly padding = input<RowPadding>('md');\n readonly gap = input<RowGap>('default');\n readonly trailing = input<RowTrailing>('none');\n\n protected readonly classes = computed(() => {\n const chevron = this.trailing() === 'chevron';\n const layout = chevron\n ? CHEVRON_CLASSES\n : `${SIZE_CLASSES[this.size()]} ${this.gap() === 'sm' ? 'gap-2' : SIZE_GAPS[this.size()]} ${PADDING_CLASSES[this.padding()]}`;\n const interactive = chevron ? CHEVRON_INTERACTIVE_CLASSES : INTERACTIVE_CLASSES;\n\n return `${BASE_CLASSES} ${layout}${this.unavailable() ? ` ${UNAVAILABLE_CLASSES}` : ` ${interactive}`}${this.selected() ? ` ${SELECTED_CLASSES}` : ''}${this.busy() ? ' pointer-events-none' : ''}`;\n });\n\n constructor() {\n holdTransitionsUntilRendered();\n const host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n const guard = (event: Event): void => {\n if (this.busy() || this.unavailable()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n };\n\n host.addEventListener('click', guard, { capture: true });\n inject(DestroyRef).onDestroy(() => host.removeEventListener('click', guard, { capture: true }));\n }\n}\n\n/**\n * Lays out a `ui-row` with a trailing action beside it, such as a \"more\" icon button.\n *\n * @example\n * <div uiRowItem>\n * <a ui-row size=\"xl\" padding=\"sm\" routerLink=\"/accounts/1\">...</a>\n * <button ui-button variant=\"quiet\" size=\"icon-sm\" aria-label=\"Account actions\">...</button>\n * </div>\n */\n@Directive({\n selector: '[uiRowItem]',\n host: {\n class:\n 'flex items-center gap-1 [&>[ui-row]]:w-auto [&>[ui-row]]:min-w-0 [&>[ui-row]]:flex-1 [&>:not([ui-row])]:flex-none',\n },\n})\nexport class UiRowItem {}\n\n/**\n * Non-interactive row of a list, separated from the next by a hairline: a passkey with its delete\n * button, a device, a setting. Put it on an `li` or a `div`. Use `ui-row` instead when the whole\n * row is a link or an action.\n *\n * @example\n * <ul>\n * <li uiListRow>\n * <span class=\"flex-1\">MacBook Air</span>\n * <button ui-button variant=\"quiet-destructive\" size=\"icon-sm\" aria-label=\"Delete MacBook Air\">...</button>\n * </li>\n * </ul>\n */\n@Directive({\n selector: '[uiListRow]',\n host: { '[class]': 'classes()' },\n})\nexport class UiListRow {\n readonly ruled = input(true, { transform: booleanAttribute });\n\n protected readonly classes = computed(() =>\n this.ruled()\n ? 'flex min-h-18 items-center gap-3 py-1.5 lg:min-h-17 shadow-[inset_0_-1px_0_var(--hairline)]'\n : 'flex min-h-18 items-center gap-3 py-1.5 lg:min-h-17',\n );\n}\n\n/**\n * Groups link rows under a hairline, as the \"other ways\" links under a search list. Put it on a `div`\n * around `ui-row` with `trailing=\"chevron\"`.\n *\n * @example\n * <div uiRowGroup>\n * <button ui-row type=\"button\" trailing=\"chevron\">Enter manually</button>\n * </div>\n */\n@Directive({\n selector: '[uiRowGroup]',\n host: { class: 'flex flex-col pt-1 shadow-[inset_0_1px_0_var(--hairline)]' },\n})\nexport class UiRowGroup {}\n\n/**\n * The filled tile that leads a row, holding an icon. Put it on a `span` as the first child of a\n * `ui-row` or a `uiListRow`.\n *\n * @example\n * <a ui-row size=\"xl\" padding=\"sm\" href=\"/export\">\n * <span uiRowTile><svg lucideDownload [size]=\"18\" /></span>\n * Export\n * </a>\n */\n@Directive({\n selector: '[uiRowTile]',\n host: { class: 'rounded-control grid size-9 flex-none place-items-center bg-(--muted)' },\n})\nexport class UiRowTile {}\n"],"mappings":"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"}
@@ -58,7 +58,7 @@ var UiSegmented = class UiSegmented {
58
58
  }
59
59
  static ɵfac = i0.ɵɵngDeclareFactory({
60
60
  minVersion: "12.0.0",
61
- version: "22.2.0",
61
+ version: "22.2.1",
62
62
  ngImport: i0,
63
63
  type: UiSegmented,
64
64
  deps: [],
@@ -66,7 +66,7 @@ var UiSegmented = class UiSegmented {
66
66
  });
67
67
  static ɵcmp = i0.ɵɵngDeclareComponent({
68
68
  minVersion: "17.0.0",
69
- version: "22.2.0",
69
+ version: "22.2.1",
70
70
  type: UiSegmented,
71
71
  isStandalone: true,
72
72
  selector: "ui-segmented",
@@ -161,7 +161,7 @@ var UiSegmented = class UiSegmented {
161
161
  };
162
162
  i0.ɵɵngDeclareClassMetadata({
163
163
  minVersion: "12.0.0",
164
- version: "22.2.0",
164
+ version: "22.2.1",
165
165
  ngImport: i0,
166
166
  type: UiSegmented,
167
167
  decorators: [{
@@ -33,7 +33,7 @@ var UiSelectPill = class UiSelectPill {
33
33
  pillClasses = computed(() => `${PILL_CLASSES} ${this.active() ? ACTIVE_PILL_CLASSES : REST_PILL_CLASSES}`, ...ngDevMode ? [{ debugName: "pillClasses" }] : /* istanbul ignore next */ []);
34
34
  static ɵfac = i0.ɵɵngDeclareFactory({
35
35
  minVersion: "12.0.0",
36
- version: "22.2.0",
36
+ version: "22.2.1",
37
37
  ngImport: i0,
38
38
  type: UiSelectPill,
39
39
  deps: [],
@@ -41,7 +41,7 @@ var UiSelectPill = class UiSelectPill {
41
41
  });
42
42
  static ɵcmp = i0.ɵɵngDeclareComponent({
43
43
  minVersion: "17.0.0",
44
- version: "22.2.0",
44
+ version: "22.2.1",
45
45
  type: UiSelectPill,
46
46
  isStandalone: true,
47
47
  selector: "ui-select-pill",
@@ -155,7 +155,7 @@ var UiSelectPill = class UiSelectPill {
155
155
  };
156
156
  i0.ɵɵngDeclareClassMetadata({
157
157
  minVersion: "12.0.0",
158
- version: "22.2.0",
158
+ version: "22.2.1",
159
159
  ngImport: i0,
160
160
  type: UiSelectPill,
161
161
  decorators: [{
@@ -32,7 +32,7 @@ var UiSelect = class UiSelect {
32
32
  classes = computed(() => `${CONTROL_BASE_CLASSES} bg-(--background) ${SELECT_CLASSES} ${PICKER_CLASSES} ${CONTROL_SIZE_CLASSES[this.size()]}`, ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
33
33
  static ɵfac = i0.ɵɵngDeclareFactory({
34
34
  minVersion: "12.0.0",
35
- version: "22.2.0",
35
+ version: "22.2.1",
36
36
  ngImport: i0,
37
37
  type: UiSelect,
38
38
  deps: [],
@@ -40,7 +40,7 @@ var UiSelect = class UiSelect {
40
40
  });
41
41
  static ɵdir = i0.ɵɵngDeclareDirective({
42
42
  minVersion: "17.1.0",
43
- version: "22.2.0",
43
+ version: "22.2.1",
44
44
  type: UiSelect,
45
45
  isStandalone: true,
46
46
  selector: "select[uiSelect]",
@@ -77,7 +77,7 @@ var UiSelect = class UiSelect {
77
77
  };
78
78
  i0.ɵɵngDeclareClassMetadata({
79
79
  minVersion: "12.0.0",
80
- version: "22.2.0",
80
+ version: "22.2.1",
81
81
  ngImport: i0,
82
82
  type: UiSelect,
83
83
  decorators: [{
@@ -23,7 +23,7 @@ var UiSkeleton = class UiSkeleton {
23
23
  }, ...ngDevMode ? [{ debugName: "bars" }] : /* istanbul ignore next */ []);
24
24
  static ɵfac = i0.ɵɵngDeclareFactory({
25
25
  minVersion: "12.0.0",
26
- version: "22.2.0",
26
+ version: "22.2.1",
27
27
  ngImport: i0,
28
28
  type: UiSkeleton,
29
29
  deps: [],
@@ -31,7 +31,7 @@ var UiSkeleton = class UiSkeleton {
31
31
  });
32
32
  static ɵcmp = i0.ɵɵngDeclareComponent({
33
33
  minVersion: "17.0.0",
34
- version: "22.2.0",
34
+ version: "22.2.1",
35
35
  type: UiSkeleton,
36
36
  isStandalone: true,
37
37
  selector: "ui-skeleton",
@@ -76,7 +76,7 @@ var UiSkeleton = class UiSkeleton {
76
76
  };
77
77
  i0.ɵɵngDeclareClassMetadata({
78
78
  minVersion: "12.0.0",
79
- version: "22.2.0",
79
+ version: "22.2.1",
80
80
  ngImport: i0,
81
81
  type: UiSkeleton,
82
82
  decorators: [{
@@ -16,7 +16,7 @@ var UiStaleLink = class UiStaleLink {
16
16
  classes = computed(() => `${BASE_CLASSES} ${SIZE_CLASSES[this.size()]}${this.chevron() ? ` ${CHEVRON_CLASSES}` : ""}`, ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
17
17
  static ɵfac = i0.ɵɵngDeclareFactory({
18
18
  minVersion: "12.0.0",
19
- version: "22.2.0",
19
+ version: "22.2.1",
20
20
  ngImport: i0,
21
21
  type: UiStaleLink,
22
22
  deps: [],
@@ -24,7 +24,7 @@ var UiStaleLink = class UiStaleLink {
24
24
  });
25
25
  static ɵdir = i0.ɵɵngDeclareDirective({
26
26
  minVersion: "17.1.0",
27
- version: "22.2.0",
27
+ version: "22.2.1",
28
28
  type: UiStaleLink,
29
29
  isStandalone: true,
30
30
  selector: "a[uiStaleLink]",
@@ -50,7 +50,7 @@ var UiStaleLink = class UiStaleLink {
50
50
  };
51
51
  i0.ɵɵngDeclareClassMetadata({
52
52
  minVersion: "12.0.0",
53
- version: "22.2.0",
53
+ version: "22.2.1",
54
54
  ngImport: i0,
55
55
  type: UiStaleLink,
56
56
  decorators: [{
@@ -1 +1 @@
1
- {"version":3,"file":"joanroucoux-cairn-ui-stale-link.mjs","names":[],"sources":["../../../projects/ui/stale-link/stale-link.ts"],"sourcesContent":["import { Directive, booleanAttribute, computed, input } from '@angular/core';\n\n/** Available stale link sizes. */\nexport const STALE_LINK_SIZES = ['caption', 'label'] as const;\nexport type StaleLinkSize = (typeof STALE_LINK_SIZES)[number];\n\nconst BASE_CLASSES =\n \"relative inline-flex items-center gap-1 pointer-fine:gap-0.5 rounded-[4px] font-medium text-(--stale) hover:underline underline-offset-3 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-(--ring) before:absolute before:inset-x-0 before:top-1/2 before:h-11 pointer-fine:before:h-10 before:-translate-y-1/2 before:content-['']\";\n\nconst SIZE_CLASSES: Record<StaleLinkSize, string> = {\n caption: 'text-caption',\n label: 'text-label',\n};\n\nconst CHEVRON_CLASSES =\n \"after:size-4 after:flex-none after:bg-current after:content-[''] after:mask-center after:mask-no-repeat after:mask-[url(data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2024%27%20fill%3D%27none%27%20stroke%3D%27black%27%20stroke-width%3D%271.75%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%3E%3Cpath%20d%3D%27m9%2018%206-6-6-6%27%2F%3E%3C%2Fsvg%3E)]\";\n\n/**\n * Link in the stale tone, for a caption about data that is late or left out of a total, such as\n * \"1 ligne sans cours, non comptée\". `chevron` adds a trailing chevron, `size` is `caption` (the\n * default) or `label`.\n *\n * @example\n * <a uiStaleLink chevron size=\"label\" routerLink=\"/holdings\">1 cours en retard</a>\n */\n@Directive({\n selector: 'a[uiStaleLink]',\n host: { '[class]': 'classes()' },\n})\nexport class UiStaleLink {\n readonly chevron = input(false, { transform: booleanAttribute });\n readonly size = input<StaleLinkSize>('caption');\n\n protected readonly classes = computed(\n () => `${BASE_CLASSES} ${SIZE_CLASSES[this.size()]}${this.chevron() ? ` ${CHEVRON_CLASSES}` : ''}`,\n );\n}\n"],"mappings":";;AAGA,MAAa,mBAAmB,CAAC,WAAW,OAAO;AAGnD,MAAM,eACJ;AAEF,MAAM,eAA8C;CAClD,SAAS;CACT,OAAO;AACR;AAED,MAAM,kBACJ;AAcF,IAAa,cAAb,MAAa,YAAW;CACb,UAAU,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,UAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CACpD,OAAO,MAAqB,WAAU,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAE5B,UAAU,eACrB,GAAG,aAAY,GAAI,aAAa,KAAK,KAAI,KAAM,KAAK,QAAO,IAAK,IAAI,oBAAoB,MAC/F,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CANU,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAW,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAX,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAW,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,MAAA,EAAA,YAAA,EAAA,SAAA,YAAA,EAAA;EAAA,UAAA;CAAA,CAAA;;AAAX,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAW,YAAA,CAAA;EAJvB,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,MAAM,EAAE,WAAW,YAAW;EAC/B,CAAA"}
1
+ {"version":3,"file":"joanroucoux-cairn-ui-stale-link.mjs","names":[],"sources":["../../../projects/ui/stale-link/stale-link.ts"],"sourcesContent":["import { Directive, booleanAttribute, computed, input } from '@angular/core';\n\n/** Available stale link sizes. */\nexport const STALE_LINK_SIZES = ['caption', 'label'] as const;\nexport type StaleLinkSize = (typeof STALE_LINK_SIZES)[number];\n\nconst BASE_CLASSES =\n \"relative inline-flex items-center gap-1 pointer-fine:gap-0.5 rounded-[4px] font-medium text-(--stale) hover:underline underline-offset-3 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-(--ring) before:absolute before:inset-x-0 before:top-1/2 before:h-11 pointer-fine:before:h-10 before:-translate-y-1/2 before:content-['']\";\n\nconst SIZE_CLASSES: Record<StaleLinkSize, string> = {\n caption: 'text-caption',\n label: 'text-label',\n};\n\nconst CHEVRON_CLASSES =\n \"after:size-4 after:flex-none after:bg-current after:content-[''] after:mask-center after:mask-no-repeat after:mask-[url(data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2024%27%20fill%3D%27none%27%20stroke%3D%27black%27%20stroke-width%3D%271.75%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%3E%3Cpath%20d%3D%27m9%2018%206-6-6-6%27%2F%3E%3C%2Fsvg%3E)]\";\n\n/**\n * Link in the stale tone, for a caption about data that is late or left out of a total, such as\n * \"1 holding without a price, not counted\". `chevron` adds a trailing chevron, `size` is `caption` (the\n * default) or `label`.\n *\n * @example\n * <a uiStaleLink chevron size=\"label\" routerLink=\"/holdings\">1 stale price</a>\n */\n@Directive({\n selector: 'a[uiStaleLink]',\n host: { '[class]': 'classes()' },\n})\nexport class UiStaleLink {\n readonly chevron = input(false, { transform: booleanAttribute });\n readonly size = input<StaleLinkSize>('caption');\n\n protected readonly classes = computed(\n () => `${BASE_CLASSES} ${SIZE_CLASSES[this.size()]}${this.chevron() ? ` ${CHEVRON_CLASSES}` : ''}`,\n );\n}\n"],"mappings":";;AAGA,MAAa,mBAAmB,CAAC,WAAW,OAAO;AAGnD,MAAM,eACJ;AAEF,MAAM,eAA8C;CAClD,SAAS;CACT,OAAO;AACR;AAED,MAAM,kBACJ;AAcF,IAAa,cAAb,MAAa,YAAW;CACb,UAAU,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,UAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CACpD,OAAO,MAAqB,WAAU,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAE5B,UAAU,eACrB,GAAG,aAAY,GAAI,aAAa,KAAK,KAAI,KAAM,KAAK,QAAO,IAAK,IAAI,oBAAoB,MAC/F,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CANU,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAW,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAX,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAW,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,MAAA,EAAA,YAAA,EAAA,SAAA,YAAA,EAAA;EAAA,UAAA;CAAA,CAAA;;AAAX,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAW,YAAA,CAAA;EAJvB,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,MAAM,EAAE,WAAW,YAAW;EAC/B,CAAA"}
@@ -21,7 +21,7 @@ var UiStat = class UiStat {
21
21
  valueClasses = computed(() => VALUE_CLASSES[this.size()], ...ngDevMode ? [{ debugName: "valueClasses" }] : /* istanbul ignore next */ []);
22
22
  static ɵfac = i0.ɵɵngDeclareFactory({
23
23
  minVersion: "12.0.0",
24
- version: "22.2.0",
24
+ version: "22.2.1",
25
25
  ngImport: i0,
26
26
  type: UiStat,
27
27
  deps: [],
@@ -29,7 +29,7 @@ var UiStat = class UiStat {
29
29
  });
30
30
  static ɵcmp = i0.ɵɵngDeclareComponent({
31
31
  minVersion: "17.1.0",
32
- version: "22.2.0",
32
+ version: "22.2.1",
33
33
  type: UiStat,
34
34
  isStandalone: true,
35
35
  selector: "ui-stat",
@@ -74,7 +74,7 @@ var UiStat = class UiStat {
74
74
  };
75
75
  i0.ɵɵngDeclareClassMetadata({
76
76
  minVersion: "12.0.0",
77
- version: "22.2.0",
77
+ version: "22.2.1",
78
78
  ngImport: i0,
79
79
  type: UiStat,
80
80
  decorators: [{
@@ -9,7 +9,7 @@ var UiSwitch = class UiSwitch {
9
9
  }
10
10
  static ɵfac = i0.ɵɵngDeclareFactory({
11
11
  minVersion: "12.0.0",
12
- version: "22.2.0",
12
+ version: "22.2.1",
13
13
  ngImport: i0,
14
14
  type: UiSwitch,
15
15
  deps: [],
@@ -17,7 +17,7 @@ var UiSwitch = class UiSwitch {
17
17
  });
18
18
  static ɵdir = i0.ɵɵngDeclareDirective({
19
19
  minVersion: "14.0.0",
20
- version: "22.2.0",
20
+ version: "22.2.1",
21
21
  type: UiSwitch,
22
22
  isStandalone: true,
23
23
  selector: "input[type=checkbox][uiSwitch]",
@@ -30,7 +30,7 @@ var UiSwitch = class UiSwitch {
30
30
  };
31
31
  i0.ɵɵngDeclareClassMetadata({
32
32
  minVersion: "12.0.0",
33
- version: "22.2.0",
33
+ version: "22.2.1",
34
34
  ngImport: i0,
35
35
  type: UiSwitch,
36
36
  decorators: [{
@@ -14,7 +14,7 @@ var UiTabBar = class UiTabBar {
14
14
  }
15
15
  static ɵfac = i0.ɵɵngDeclareFactory({
16
16
  minVersion: "12.0.0",
17
- version: "22.2.0",
17
+ version: "22.2.1",
18
18
  ngImport: i0,
19
19
  type: UiTabBar,
20
20
  deps: [],
@@ -22,7 +22,7 @@ var UiTabBar = class UiTabBar {
22
22
  });
23
23
  static ɵcmp = i0.ɵɵngDeclareComponent({
24
24
  minVersion: "14.0.0",
25
- version: "22.2.0",
25
+ version: "22.2.1",
26
26
  type: UiTabBar,
27
27
  isStandalone: true,
28
28
  selector: "nav[ui-tab-bar]",
@@ -34,7 +34,7 @@ var UiTabBar = class UiTabBar {
34
34
  };
35
35
  i0.ɵɵngDeclareClassMetadata({
36
36
  minVersion: "12.0.0",
37
- version: "22.2.0",
37
+ version: "22.2.1",
38
38
  ngImport: i0,
39
39
  type: UiTabBar,
40
40
  decorators: [{
@@ -55,7 +55,7 @@ var UiTab = class UiTab {
55
55
  classes = computed(() => `${TAB_CLASSES} ${this.active() ? ACTIVE_TAB_CLASSES : INACTIVE_TAB_CLASSES}`, ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
56
56
  static ɵfac = i0.ɵɵngDeclareFactory({
57
57
  minVersion: "12.0.0",
58
- version: "22.2.0",
58
+ version: "22.2.1",
59
59
  ngImport: i0,
60
60
  type: UiTab,
61
61
  deps: [],
@@ -63,7 +63,7 @@ var UiTab = class UiTab {
63
63
  });
64
64
  static ɵcmp = i0.ɵɵngDeclareComponent({
65
65
  minVersion: "17.1.0",
66
- version: "22.2.0",
66
+ version: "22.2.1",
67
67
  type: UiTab,
68
68
  isStandalone: true,
69
69
  selector: "a[ui-tab]",
@@ -88,7 +88,7 @@ var UiTab = class UiTab {
88
88
  };
89
89
  i0.ɵɵngDeclareClassMetadata({
90
90
  minVersion: "12.0.0",
91
- version: "22.2.0",
91
+ version: "22.2.1",
92
92
  ngImport: i0,
93
93
  type: UiTab,
94
94
  decorators: [{