@ebrains/react 2.4.1 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/color-primary-palette_6.entry.esm.js +106 -106
  2. package/components-section.entry.esm.js +1 -1
  3. package/correct-use-of-colors.entry.esm.js +33 -33
  4. package/docs-palettes.entry.esm.js +1 -1
  5. package/docs-tokens.entry.esm.js +1 -1
  6. package/eds-accordion_53.entry.esm.js +1966 -0
  7. package/eds-app-root.entry.esm.js +4 -4
  8. package/eds-cookies-preference.entry.esm.js +3 -3
  9. package/eds-feedback.entry.esm.js +5 -5
  10. package/eds-frame.entry.esm.js +7 -7
  11. package/eds-gauge.entry.esm.js +8 -9
  12. package/eds-gitlab-contributors.entry.esm.js +287 -0
  13. package/eds-icon-bluesky.entry.esm.js +1 -1
  14. package/eds-icon-eu.entry.esm.js +2 -2
  15. package/eds-icon-facebook.entry.esm.js +1 -1
  16. package/eds-icon-gitlab.entry.esm.js +1 -1
  17. package/eds-icon-linkedin.entry.esm.js +1 -1
  18. package/eds-icon-mastodon.entry.esm.js +1 -1
  19. package/eds-icon-twitter.entry.esm.js +1 -1
  20. package/eds-icon-youtube.entry.esm.js +1 -1
  21. package/eds-input-search.entry.esm.js +96 -0
  22. package/eds-modal.entry.esm.js +88 -31
  23. package/eds-pie.entry.esm.js +38 -4
  24. package/eds-section-core_2.entry.esm.js +5 -5
  25. package/eds-splash-screen.entry.esm.js +4 -12
  26. package/eds-timeline.entry.esm.js +8 -14
  27. package/eds-toast-manager.entry.esm.js +1 -1
  28. package/eds-trl-badge.entry.esm.js +186 -0
  29. package/eu-8ac3e99c.esm.js +7 -0
  30. package/incorrect-use-of-colors.entry.esm.js +8 -8
  31. package/index.esm.js +1 -1
  32. package/index.esm2.js +22 -142
  33. package/logo-space.entry.esm.js +138 -17
  34. package/logo-variations-horizontal_2.entry.esm.js +28 -54
  35. package/logo-variations-tabs.entry.esm.js +1 -1
  36. package/logo-wrong-usage.entry.esm.js +33 -33
  37. package/negative-84eec72e.esm.js +104 -0
  38. package/package.json +1 -1
  39. package/positive-cc986d7c.esm.js +65 -0
  40. package/src/components.d.ts +11 -2
  41. package/src/generated/components.d.ts +0 -1
  42. package/svg-repository.entry.esm.js +7 -254
  43. package/token-list_3.entry.esm.js +79 -51
  44. package/token-ratios.entry.esm.js +3 -3
  45. package/token-spacing.entry.esm.js +26 -26
  46. package/token-typography.entry.esm.js +88 -79
  47. package/arrow-diagonal-black-8f0494c3.esm.js +0 -3
  48. package/arrow-right-9322ba8a.esm.js +0 -5
  49. package/bin-37cad2f0.esm.js +0 -3
  50. package/bookmark-c200037c.esm.js +0 -16
  51. package/chevron-down-6144c823.esm.js +0 -12
  52. package/chevron-left-ca6c66e1.esm.js +0 -11
  53. package/chevron-right-b88ed2d4.esm.js +0 -5
  54. package/chevron-up-c66bd477.esm.js +0 -12
  55. package/clone-dab56639.esm.js +0 -3
  56. package/close-87fc0d63.esm.js +0 -5
  57. package/copy-03b72cb6.esm.js +0 -5
  58. package/download-47746956.esm.js +0 -18
  59. package/draft-dd5dada2.esm.js +0 -3
  60. package/edit-3893a517.esm.js +0 -3
  61. package/eds-accordion_37.entry.esm.js +0 -1201
  62. package/eds-card-desc_2.entry.esm.js +0 -85
  63. package/eds-card-generic.entry.esm.js +0 -116
  64. package/eds-card-project.entry.esm.js +0 -209
  65. package/eds-card-section.entry.esm.js +0 -56
  66. package/eds-card-tags.entry.esm.js +0 -27
  67. package/eds-card-tool.entry.esm.js +0 -105
  68. package/eds-footer.entry.esm.js +0 -145
  69. package/eds-fullscreen-menu.entry.esm.js +0 -143
  70. package/eds-icon-arrow-diagonal.entry.esm.js +0 -21
  71. package/eds-icon-arrow-right.entry.esm.js +0 -21
  72. package/eds-icon-bin.entry.esm.js +0 -21
  73. package/eds-icon-bookmark.entry.esm.js +0 -21
  74. package/eds-icon-chevron-down.entry.esm.js +0 -21
  75. package/eds-icon-chevron-left.entry.esm.js +0 -21
  76. package/eds-icon-chevron-right.entry.esm.js +0 -21
  77. package/eds-icon-chevron-up.entry.esm.js +0 -21
  78. package/eds-icon-clone.entry.esm.js +0 -21
  79. package/eds-icon-close.entry.esm.js +0 -21
  80. package/eds-icon-copy.entry.esm.js +0 -21
  81. package/eds-icon-download.entry.esm.js +0 -21
  82. package/eds-icon-draft.entry.esm.js +0 -21
  83. package/eds-icon-edit.entry.esm.js +0 -21
  84. package/eds-icon-external.entry.esm.js +0 -21
  85. package/eds-icon-loader.entry.esm.js +0 -21
  86. package/eds-icon-menu.entry.esm.js +0 -21
  87. package/eds-icon-minus.entry.esm.js +0 -21
  88. package/eds-icon-more.entry.esm.js +0 -21
  89. package/eds-icon-paper.entry.esm.js +0 -21
  90. package/eds-icon-plus.entry.esm.js +0 -21
  91. package/eds-icon-portal.entry.esm.js +0 -21
  92. package/eds-icon-private.entry.esm.js +0 -21
  93. package/eds-icon-public.entry.esm.js +0 -21
  94. package/eds-icon-search.entry.esm.js +0 -21
  95. package/eds-icon-star.entry.esm.js +0 -21
  96. package/eds-icon-start.entry.esm.js +0 -21
  97. package/eds-icon-success.entry.esm.js +0 -21
  98. package/eds-icon-thumbs-down.entry.esm.js +0 -21
  99. package/eds-icon-thumbs-up.entry.esm.js +0 -21
  100. package/eds-icon-tutorial.entry.esm.js +0 -21
  101. package/eds-icon-unknown.entry.esm.js +0 -21
  102. package/eds-icon-updown.entry.esm.js +0 -21
  103. package/eds-icon-user.entry.esm.js +0 -21
  104. package/eds-icon-view.entry.esm.js +0 -21
  105. package/eds-progress-bar.entry.esm.js +0 -52
  106. package/eds-social-networks.entry.esm.js +0 -73
  107. package/eds-trl.entry.esm.js +0 -68
  108. package/eu-9ddde93a.esm.js +0 -30
  109. package/index-39c58238.esm.js +0 -58
  110. package/loader-c9628637.esm.js +0 -30
  111. package/logo-color-7f1fd803.esm.js +0 -115
  112. package/logo-color-margins-ff8ce71b.esm.js +0 -118
  113. package/logo-white-no-bg-f382f86f.esm.js +0 -1021
  114. package/menu-340ea948.esm.js +0 -11
  115. package/minus-b30a7c71.esm.js +0 -11
  116. package/more-4449d549.esm.js +0 -13
  117. package/paper-8e74ea31.esm.js +0 -15
  118. package/plus-89c07be2.esm.js +0 -12
  119. package/portal-d6c8ce56.esm.js +0 -18
  120. package/private-1c25ff8e.esm.js +0 -25
  121. package/public-d4d8c585.esm.js +0 -16
  122. package/search-fbcd79c2.esm.js +0 -12
  123. package/star-0da9b5e9.esm.js +0 -5
  124. package/start-65126a4f.esm.js +0 -3
  125. package/success-443809da.esm.js +0 -18
  126. package/thumbs-down-a18fd049.esm.js +0 -5
  127. package/thumbs-up-c19a71bc.esm.js +0 -6
  128. package/tutotial-150ee1fd.esm.js +0 -27
  129. package/unknown-ed01a24c.esm.js +0 -22
  130. package/up-and-down-8b69ca97.esm.js +0 -12
  131. package/user-71ebdc15.esm.js +0 -16
  132. package/view-e900f2d4.esm.js +0 -3
@@ -34,18 +34,18 @@ const EdsAppRoot = class {
34
34
  }
35
35
  render() {
36
36
  return h("div", {
37
- key: 'd05cf471a9e7dfd9a5e87311def9774510e1b30a'
37
+ key: 'c9192fb7e315fa8fe41c9ee512f4573951865208'
38
38
  }, h("eds-splash-screen", {
39
- key: 'ae568d4bda15c9e99365f37421b4caad9576c6a0',
39
+ key: 'e3d413597cc370692c593abd4017d97e1c172219',
40
40
  inverse: true,
41
41
  initPromise: this.combinedInitPromise
42
42
  }), h("eds-login", {
43
- key: '624b82b77f87e636bed424ec66dc564120f370c2',
43
+ key: '2821e64738053db4809663aa918f98c4df358201',
44
44
  "keycloak-url": "http://localhost:8080",
45
45
  "keycloak-realm": "nigeor-realm",
46
46
  "keycloak-client-id": "stencil-app"
47
47
  }), h("main", {
48
- key: 'fb8a582f971c715e34be9c3e0ed8b3437dea883d'
48
+ key: '4680b74ec0f74b8060b020f726f6696b41b43a9e'
49
49
  }, this.isAuthenticated ? h("h1", null, "Welcome, authenticated user!") : h("h1", null, "Please log in.")));
50
50
  }
51
51
  };
@@ -9,7 +9,7 @@ const EdsCookiesPreference = class {
9
9
  constructor(hostRef) {
10
10
  registerInstance(this, hostRef);
11
11
  this.buttonText = 'Cookies Preferences';
12
- this.intent = undefined;
12
+ this.intent = 'secondary';
13
13
  this.showMatomoNotice = false;
14
14
  this.noticeKey = 0;
15
15
  }
@@ -29,9 +29,9 @@ const EdsCookiesPreference = class {
29
29
  }
30
30
  render() {
31
31
  return h("div", {
32
- key: 'daf8dae47d699797488bddeb6be5951647d26a86'
32
+ key: '0a1f75fe95820dd8f994193f86b52b684f5fd240'
33
33
  }, h("eds-link", {
34
- key: 'a07c16a0c89acc9230a3ebebbd4bb4d1993f34ab',
34
+ key: 'd3b5740fa53b30a39296b23cd95da1ad2d8d730d',
35
35
  size: "small",
36
36
  intent: this.intent,
37
37
  label: this.buttonText,
@@ -61,20 +61,20 @@ const EdsFeedback = class {
61
61
  const levelNum = this.headingLevel.replace('h', '');
62
62
  const headingClass = `f-heading-${levelNum.padStart(2, '0')} my-4`;
63
63
  return h("div", {
64
- key: '5405127cfc114d4906617955d7b1069a04ed7b8e',
64
+ key: '5eddbd664389530e209698e5e435c853c8f50b9f',
65
65
  class: "grid inline"
66
66
  }, h(HeadingTag, {
67
- key: 'c0a2593d843577323b6a27d0f8fdca3b84063bd5',
67
+ key: '22d1d4a44a116f78bbfa66946d8b7a9f95779524',
68
68
  class: headingClass
69
69
  }, this.label), h("p", {
70
- key: '5b7ef9fbd8c5b4a9d3c7c39e3092244d08dde126',
70
+ key: 'd3e5abefa5d0e1e32281b5088251fb9c304b8d2a',
71
71
  class: "f-body-01 text-light"
72
72
  }, this.description), h("eds-rating", {
73
- key: '2de1ad00dd21d987bc4a91438500a58a0bcd63a7',
73
+ key: '65f1e772ac885d20f46e147aedeb55ab2ec871fe',
74
74
  "rating-type": this.type,
75
75
  "rating-count": this.count
76
76
  }), this.selectedRating > 0 && this.parsedMappings[this.selectedRating - 1] && h("span", {
77
- key: '3de038a0ae8ee334edde65194356f021e14e7cb3',
77
+ key: 'f660ceb9889d560ec1687c6f17bdbbe6a89f90ee',
78
78
  class: "f-ui-04 text-lighter"
79
79
  }, this.parsedMappings[this.selectedRating - 1]));
80
80
  }
@@ -3,7 +3,7 @@ import 'react';
3
3
  import 'react/jsx-runtime';
4
4
  import 'react-dom';
5
5
 
6
- const edsFrameCss = ".bg-inverse{background-color:var(--white)}.min-h-156{min-height:156px}.rounded{border-radius:0.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:16px}.rounded-md{border-radius:12px}.border-soft{border-color:rgba(0, 0, 0, .15)}.border-softer{border-color:rgba(0, 0, 0, .1)}.border-softest{border-color:rgba(0, 0, 0, .05)}.effect-focus-within{outline-width:3px;outline-offset:2px;outline-color:var(--green-500)}.effect-focus-within:focus-within{outline-style:solid}.relative{position:relative}.flex{display:flex}.grow{flex-grow:1}.flex-col{flex-direction:column}.border-2{border-width:2px}.w-full{width:100%}.h-full{height:100%}.h-auto{height:auto}.effect-height{transition-duration:300ms;transition-timing-function:cubic-bezier(0, 0, 0.2, 1);transition-property:height}.items-center{align-items:center}.justify-between{justify-content:space-between}.py-8{padding-top:0.5rem;padding-bottom:0.5rem}.px-12{padding-left:0.75rem;padding-right:0.75rem}.f-ui-02{font-family:var(--f-ui-02-fontFamily);font-weight:var(--f-ui-02-fontWeight);font-size:var(--f-ui-02-fontSize);line-height:var(--f-ui-02-lineHeight);letter-spacing:var(--f-ui-02-letterSpacing)}.ml-auto{margin-left:auto}.border-t-2{border-top-width:2px}.border{border:1px solid rgba(0, 0, 0, .1)}.border-2{border:1px solid rgba(0, 0, 0, .1)}.container{width:calc(var(--container-width, 100%) - (2 * var(--breakout-container-outer-gutter, var(--container-outer-gutter, var(--outer-gutter, 0)))));margin-right:auto;margin-left:auto}.container>*{--container-outer-gutter:0;--breakout-container-outer-gutter:0}.ml-8{margin-left:0.5rem}.mr-8{margin-right:0.5rem}.mt-16{margin-top:1rem}";
6
+ const edsFrameCss = ".bg-inverse{background-color:#FFFFFF;border:1px solid #ECECEC;color:#07140D}.min-h-156{min-height:156px}.rounded{border-radius:0.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:16px}.rounded-md{border-radius:12px}.border-soft{border-color:#ECECEC}.border-softer{border-color:#ECECEC}.border-softest{border-color:#f2f2f2}.effect-focus-within{outline-width:3px;outline-offset:2px;outline-color:#00FF9D}.effect-focus-within:focus-within{outline-style:solid}.relative{position:relative}.flex{display:flex}.grow{flex-grow:1}.flex-col{flex-direction:column}.border-2{border-width:0}.w-full{width:100%}.h-full{height:100%}.h-auto{height:auto}.effect-height{transition-duration:300ms;transition-timing-function:cubic-bezier(0, 0, 0.2, 1);transition-property:height}.items-center{align-items:center}.justify-between{justify-content:space-between}.py-8{padding-top:0.75rem;padding-bottom:0.75rem}.px-12{padding-left:1rem;padding-right:1rem}.py-8.px-12{border-bottom:1px solid #ECECEC}.f-ui-02{font-family:'IBM Plex Sans', sans-serif;font-size:0.8125rem;font-weight:600;color:#07140D;line-height:1.4}.ml-auto{margin-left:auto}.border-t-2{border-top-width:1px;border-color:#ECECEC}.border{border:1px solid #ECECEC}.container{width:calc(var(--container-width, 100%) - (2 * var(--breakout-container-outer-gutter, var(--container-outer-gutter, var(--outer-gutter, 0)))));margin-right:auto;margin-left:auto;color:#7A7B7A}.container>*{--container-outer-gutter:0;--breakout-container-outer-gutter:0}.ml-8{margin-left:0.5rem}.mr-8{margin-right:0.5rem}.mt-16{margin-top:1rem}iframe{border-radius:0 0 12px 12px}";
7
7
  const EdsFrameStyle0 = edsFrameCss;
8
8
  const EdsFrame = class {
9
9
  constructor(hostRef) {
@@ -13,7 +13,7 @@ const EdsFrame = class {
13
13
  this.urlLabel = 'Open';
14
14
  this.errorMessage = 'Could not load the requested content. Please check the URL or try again later.';
15
15
  this.url = undefined;
16
- this.intent = 'strong';
16
+ this.intent = 'cta';
17
17
  this.size = 'auto';
18
18
  this.iframeError = false;
19
19
  }
@@ -73,13 +73,13 @@ const EdsFrame = class {
73
73
  }
74
74
  render() {
75
75
  return h("div", {
76
- key: 'dce969c76fcfbb77f315ab0203ef77136f8a449b',
76
+ key: 'ddbc978054f645eb990cde6bdd26647bd01eeb1a',
77
77
  class: this.articleClasses()
78
78
  }, h("div", {
79
- key: '80ab4a9035e3008708a4f4bfe53d9679a9e687d1',
79
+ key: '0a16fbd950742b8a75428b3705deaa03ef785a5b',
80
80
  class: "effect-height flex items-center justify-between py-8 px-12"
81
81
  }, h("span", {
82
- key: 'f065ee637af801e5fbc8039211384002dd594d84',
82
+ key: '0c2a84cae101ec1e5352ed7be7b874b6ec45f37d',
83
83
  class: "f-ui-02"
84
84
  }, this.frameLabel), !this.iframeError && this.url && this.urlLabel ? h("eds-link", {
85
85
  label: this.urlLabel,
@@ -88,9 +88,9 @@ const EdsFrame = class {
88
88
  class: "ml-auto",
89
89
  external: true,
90
90
  disabled: false,
91
- icon: "arrow-diagonal"
91
+ icon: "arrow-up-right"
92
92
  }) : null), h("div", {
93
- key: 'eae4f61cec9aab217116dbed39c54b39fc5b2040',
93
+ key: 'c001f1b33c5136820155b0299e83b6dc49fbbd43',
94
94
  class: "border-softer"
95
95
  }, this.iframeError ? h("div", {
96
96
  class: "container ml-8 mr-8 mt-16"
@@ -6,10 +6,9 @@ import 'react-dom';
6
6
  const edsGaugeCss = ".relative{position:relative}.absolute{position:absolute}.inline-block{display:inline-block}.rounded-full{border-radius:9999px}.overflow-hidden{overflow:hidden}.bg-inverse{background-color:var(--white)}.bg-current{background-color:currentColor}.bg-dark{background-color:var(--grey-300)}.bg-darker{background-color:var(--grey-400)}.bg-default{background-color:var(--grey-200)}.bg-strong{background-color:var(--grey-700)}.bg-strongest{background-color:var(--black)}.inset-0{inset:0rem}.flex{display:flex}.items-center{align-items:center}.justify-center{justify-content:center}.f-body-01{font-family:var(--f-body-01-fontFamily);font-weight:var(--f-body-01-fontWeight);font-size:var(--f-body-01-fontSize);line-height:var(--f-body-01-lineHeight);letter-spacing:var(--f-body-01-letterSpacing)}.text-default{color:var(--black)}";
7
7
  const EdsGaugeStyle0 = edsGaugeCss;
8
8
  const BACKGROUND_VARIANTS = {
9
- default: '#f2f2f2',
10
- dark: '#d8d8d8',
11
- strong: '#666666',
12
- black: '#000000'
9
+ default: 'var(--grey-light)',
10
+ dark: 'var(--grey-dark)',
11
+ black: 'var(--brand-black)'
13
12
  };
14
13
  const EdsGauge = class {
15
14
  constructor(hostRef) {
@@ -39,7 +38,7 @@ const EdsGauge = class {
39
38
  const containerStyle = {
40
39
  width: `${diameter}px`,
41
40
  height: `${diameter}px`,
42
- background: `conic-gradient(#00e766 0deg ${angle}deg, ${emptyColor} ${angle}deg 360deg)`
41
+ background: `conic-gradient(var(--brand-green) 0deg ${angle}deg, ${emptyColor} ${angle}deg 360deg)`
43
42
  };
44
43
  const maskStyle = {
45
44
  width: `${innerDiameter}px`,
@@ -51,7 +50,7 @@ const EdsGauge = class {
51
50
  fontSize: `${fontSize}px`
52
51
  };
53
52
  return h("div", {
54
- key: '33388b250acd0aeaf3bf4888fd5ac72ba0337a42',
53
+ key: '5629f8adbc6f144aad49062883cb85ecf24fc16c',
55
54
  role: "progressbar",
56
55
  "aria-valuemin": this.valueMin,
57
56
  "aria-valuemax": this.valueMax,
@@ -60,14 +59,14 @@ const EdsGauge = class {
60
59
  class: "relative inline-block rounded-full overflow-hidden",
61
60
  style: containerStyle
62
61
  }, h("div", {
63
- key: 'b920dd12644a5457b512b65e2c093ef53f339969',
62
+ key: 'd668b54b0a5f4bf260a2f1153781c59741bd8694',
64
63
  class: "absolute bg-inverse rounded-full",
65
64
  style: maskStyle
66
65
  }), h("div", {
67
- key: '0149f680aad2c2b2cf4e308b1510d2fb3482a06f',
66
+ key: 'f08feba97d30ed893a72a7e07e412aa82ea8cd3d',
68
67
  class: "absolute inset-0 flex items-center justify-center"
69
68
  }, h("span", {
70
- key: '31fee43895b99a2c19358acce9eee0965eef574a',
69
+ key: '2a8dccde44677d4a4b742cd992144d6cf399ee9b',
71
70
  class: "f-body-01 text-default",
72
71
  style: textStyle
73
72
  }, clamped)));
@@ -0,0 +1,287 @@
1
+ import { r as registerInstance, h } from './index.esm2.js';
2
+ import 'react';
3
+ import 'react/jsx-runtime';
4
+ import 'react-dom';
5
+
6
+ const edsGitlabContributorsCss = ".container{width:calc(var(--container-width, 100%) - (2 * var(--breakout-container-outer-gutter, var(--container-outer-gutter, var(--outer-gutter, 0)))));margin-right:auto;margin-left:auto}.container>*{--container-outer-gutter:0;--breakout-container-outer-gutter:0}.flex{display:flex}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.grid{display:grid}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.gap-2{gap:0.5rem;}.gap-4{gap:1rem;}.gap-6{gap:1.5rem;}.p-5{padding:1.25rem;}.p-12{padding:3rem;}.pb-2{padding-bottom:0.25rem;}.pb-4{padding-bottom:1rem;}.mb-6{margin-bottom:1.5rem;}.m-0{margin:0}.mt-auto{margin-top:auto}.w-full{width:100%}.min-w-0{min-width:0}.text-xs{font-size:0.75rem;line-height:1rem}.text-sm{font-size:0.875rem;line-height:1.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-2xl{font-size:1.5rem;line-height:2rem}.font-semibold{font-weight:600}.whitespace-nowrap{white-space:nowrap}.overflow-hidden{overflow:hidden}.text-ellipsis{text-overflow:ellipsis}.no-underline{text-decoration:none}.text-gray-600{color:var(--eds-color-gray-600, #4b5563)}.text-gray-900{color:var(--eds-color-gray-900, #111827)}.border-gray-200{border-color:var(--eds-color-gray-200, #e5e7eb)}.bg-white{background-color:var(--eds-color-white, #ffffff)}.text-primary-600{color:var(--eds-color-primary-600, #2563eb)}.hover\\:text-primary-600:hover{color:var(--eds-color-primary-600, #2563eb)}.border-primary-300{border-color:var(--eds-color-primary-300, #93c5fd)}.hover\\:border-primary-300:hover{border-color:var(--eds-color-primary-300, #93c5fd)}.text-success-600{color:var(--eds-color-success-600, #16a34a)}.text-error-600{color:var(--eds-color-error-600, #dc2626)}.border{border-width:1px}.border-b{border-bottom-width:1px}.rounded-lg{border-radius:var(--eds-radius-lg, 0.5rem);}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms}.transition-colors{transition-property:color, background-color, border-color, text-decoration-color, fill, stroke;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms}.duration-200{transition-duration:200ms}.shadow-md{box-shadow:0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)}.hover\\:shadow-md:hover{box-shadow:0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)}.-translate-y-0\\.5{transform:translateY(-0.125rem);}.hover\\:-translate-y-0\\.5:hover{transform:translateY(-0.125rem)}.grid-cols-1{grid-template-columns:repeat(1, minmax(0, 1fr))}@media (min-width: 640px){.sm\\:grid-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr))}}@media (min-width: 768px){.md\\:grid-cols-3{grid-template-columns:repeat(3, minmax(0, 1fr))}}@media (min-width: 1024px){.lg\\:grid-cols-4{grid-template-columns:repeat(4, minmax(0, 1fr))}.lg\\:grid-cols-5{grid-template-columns:repeat(5, minmax(0, 1fr))}}.contributor-card{will-change:transform, box-shadow, border-color}.loading{position:relative;min-height:8rem;padding:1rem 1.25rem;color:var(--grey-dark, #7A7B7A);font-size:0.9375rem;border:1px solid rgba(0, 0, 0, 0.08);border-radius:0.25rem;background-color:rgba(0, 0, 0, 0.02)}.f-ui-01{font-family:var(--f-ui-01-fontFamily);font-weight:var(--f-ui-01-fontWeight);font-size:var(--f-ui-01-fontSize);line-height:var(--f-ui-01-lineHeight);letter-spacing:var(--f-ui-01-letterSpacing)}.text-default{color:var(--black)}.text-light{color:var(--grey-700)}.text-lighter{color:var(--grey-600)}";
7
+ const EdsGitlabContributorsStyle0 = edsGitlabContributorsCss;
8
+ const EdsGitlabContributors = class {
9
+ constructor(hostRef) {
10
+ registerInstance(this, hostRef);
11
+ this.accessToken = undefined;
12
+ this.projectId = '3360';
13
+ this.apiUrl = 'https://gitlab.ebrains.eu/api/v4';
14
+ this.path = undefined;
15
+ this.limit = 50;
16
+ this.minCommits = 1;
17
+ this.showStats = true;
18
+ this.columns = '4';
19
+ this.sortBy = 'commits';
20
+ this.contributors = [];
21
+ this.loading = true;
22
+ this.error = '';
23
+ }
24
+ async componentWillLoad() {
25
+ await this.fetchContributors();
26
+ }
27
+ /**
28
+ * Parses projectId prop to handle single or multiple project IDs
29
+ */
30
+ getProjectIds() {
31
+ return this.projectId.split(',').map(id => id.trim()).filter(id => id.length > 0);
32
+ }
33
+ /**
34
+ * Fetches commits by path and aggregates by author for a single project
35
+ */
36
+ async fetchCommitsByPathForProject(projectId) {
37
+ const commits = [];
38
+ let page = 1;
39
+ const perPage = 100; // GitLab max per page
40
+ // Fetch all commits with pagination
41
+ while (true) {
42
+ const url = `${this.apiUrl}/projects/${encodeURIComponent(projectId)}/repository/commits?path=${encodeURIComponent(this.path)}&per_page=${perPage}&page=${page}`;
43
+ const response = await fetch(url, {
44
+ headers: {
45
+ 'PRIVATE-TOKEN': this.accessToken
46
+ }
47
+ });
48
+ if (!response.ok) {
49
+ throw new Error(`GitLab API error: ${response.status} ${response.statusText}`);
50
+ }
51
+ const pageCommits = await response.json();
52
+ if (pageCommits.length === 0) {
53
+ break; // No more pages
54
+ }
55
+ commits.push(...pageCommits);
56
+ // Stop if we have enough commits or no more pages
57
+ if (pageCommits.length < perPage) {
58
+ break;
59
+ }
60
+ page++;
61
+ }
62
+ // Aggregate commits by author email
63
+ const authorMap = new Map();
64
+ for (const commit of commits) {
65
+ const email = commit.author_email.toLowerCase();
66
+ if (authorMap.has(email)) {
67
+ authorMap.get(email).commits++;
68
+ } else {
69
+ authorMap.set(email, {
70
+ name: commit.author_name,
71
+ email: commit.author_email,
72
+ commits: 1
73
+ });
74
+ }
75
+ }
76
+ // Convert to GitLabContributor format
77
+ return Array.from(authorMap.values()).map(author => ({
78
+ name: author.name,
79
+ email: author.email,
80
+ commits: author.commits,
81
+ additions: 0,
82
+ // Not available from commits API
83
+ deletions: 0 // Not available from commits API
84
+ }));
85
+ }
86
+ /**
87
+ * Fetches contributors from a single project
88
+ * For project 1505 (monorepo), applies path filter if provided
89
+ * For other projects, fetches all contributors
90
+ */
91
+ async fetchContributorsForProject(projectId) {
92
+ // Only apply path filter for project 1505 (the monorepo)
93
+ const shouldUsePath = this.path && projectId === '1505';
94
+ if (shouldUsePath) {
95
+ // Fetch commits by path and aggregate by author (for monorepo)
96
+ return await this.fetchCommitsByPathForProject(projectId);
97
+ } else {
98
+ // Use contributors API for entire repository
99
+ const contributorsResponse = await fetch(`${this.apiUrl}/projects/${encodeURIComponent(projectId)}/repository/contributors?per_page=100`, {
100
+ headers: {
101
+ 'PRIVATE-TOKEN': this.accessToken
102
+ }
103
+ });
104
+ if (!contributorsResponse.ok) {
105
+ throw new Error(`GitLab API error: ${contributorsResponse.status} ${contributorsResponse.statusText}`);
106
+ }
107
+ return await contributorsResponse.json();
108
+ }
109
+ }
110
+ /**
111
+ * Fetches contributors from GitLab API (supports multiple projects)
112
+ */
113
+ async fetchContributors() {
114
+ if (!this.accessToken) {
115
+ this.error = 'Access token is required for internal projects';
116
+ this.loading = false;
117
+ return;
118
+ }
119
+ try {
120
+ this.loading = true;
121
+ this.error = '';
122
+ const projectIds = this.getProjectIds();
123
+ let allContributorsData = [];
124
+ // Fetch contributors from all projects
125
+ for (const projectId of projectIds) {
126
+ const contributorsData = await this.fetchContributorsForProject(projectId);
127
+ allContributorsData.push(...contributorsData);
128
+ }
129
+ // Filter by minimum commits and exclude bot contributors
130
+ const filteredContributors = allContributorsData.filter(c => {
131
+ // Exclude if commits are below minimum
132
+ if (c.commits < this.minCommits) return false;
133
+ // Exclude GitLab CI and other bots
134
+ const email = c.email.toLowerCase();
135
+ const name = c.name.toLowerCase();
136
+ // Common bot identifiers
137
+ const botPatterns = ['gitlab-ci', 'gitlab ci', 'noreply@gitlab', 'bot@', 'automation@'];
138
+ return !botPatterns.some(pattern => email.includes(pattern) || name.includes(pattern));
139
+ });
140
+ // Aggregate duplicate contributors by username
141
+ const aggregatedContributors = this.aggregateContributors(filteredContributors);
142
+ // Sort contributors
143
+ if (this.sortBy === 'commits') {
144
+ aggregatedContributors.sort((a, b) => b.commits - a.commits);
145
+ } else {
146
+ aggregatedContributors.sort((a, b) => a.username.localeCompare(b.username));
147
+ }
148
+ // Apply limit after sorting
149
+ this.contributors = aggregatedContributors.slice(0, this.limit);
150
+ this.loading = false;
151
+ } catch (err) {
152
+ this.error = err instanceof Error ? err.message : 'Failed to fetch contributors';
153
+ this.loading = false;
154
+ console.error('Error fetching GitLab contributors:', err);
155
+ }
156
+ }
157
+ /**
158
+ * Extracts username from email address (part before @)
159
+ */
160
+ extractUsernameFromEmail(email) {
161
+ if (!email || !email.includes('@')) {
162
+ return email || 'unknown';
163
+ }
164
+ return email.split('@')[0];
165
+ }
166
+ /**
167
+ * Aggregates duplicate contributors by username (extracted from email)
168
+ * Combines commits, additions, and deletions for the same person
169
+ */
170
+ aggregateContributors(contributors) {
171
+ const aggregated = new Map();
172
+ for (const contributor of contributors) {
173
+ // Extract username from email
174
+ const username = this.extractUsernameFromEmail(contributor.email);
175
+ const key = username.toLowerCase();
176
+ if (aggregated.has(key)) {
177
+ // Aggregate with existing contributor
178
+ const existing = aggregated.get(key);
179
+ existing.commits += contributor.commits;
180
+ existing.additions += contributor.additions;
181
+ existing.deletions += contributor.deletions;
182
+ } else {
183
+ // Add new contributor with extracted username
184
+ aggregated.set(key, Object.assign(Object.assign({}, contributor), {
185
+ username
186
+ }));
187
+ }
188
+ }
189
+ return Array.from(aggregated.values());
190
+ }
191
+ /**
192
+ * Gets first and last name from full name
193
+ */
194
+ parseName(fullName) {
195
+ const parts = fullName.trim().split(' ');
196
+ if (parts.length === 1) {
197
+ return {
198
+ firstName: parts[0],
199
+ lastName: ''
200
+ };
201
+ }
202
+ const firstName = parts[0];
203
+ const lastName = parts.slice(1).join(' ');
204
+ return {
205
+ firstName,
206
+ lastName
207
+ };
208
+ }
209
+ /**
210
+ * Format large numbers with K suffix
211
+ */
212
+ formatNumber(num) {
213
+ if (num >= 1000) {
214
+ return `${(num / 1000).toFixed(1)}K`;
215
+ }
216
+ return num.toString();
217
+ }
218
+ render() {
219
+ if (this.loading) {
220
+ // Spinner placeholder mirrors eds-kg-learning-resources exactly —
221
+ // same `.loading` wrapper (position: relative + min-height so the
222
+ // absolutely-positioned spinner anchors inside the box instead of
223
+ // escaping to the page), same eds-spinner props (sm/primary/
224
+ // transparent + message-as-prop), and the same role+aria-live for
225
+ // screen-reader announcement. Keep these two components in sync if
226
+ // the loading affordance ever changes.
227
+ return h("div", {
228
+ class: "loading",
229
+ role: "status",
230
+ "aria-live": "polite"
231
+ }, h("eds-spinner", {
232
+ size: "sm",
233
+ variant: "primary",
234
+ background: "transparent",
235
+ message: "Loading contributors..."
236
+ }));
237
+ }
238
+ if (this.error) {
239
+ return h("eds-alert", {
240
+ message: "Error loading contributors",
241
+ intent: "error"
242
+ });
243
+ }
244
+ if (this.contributors.length === 0) {
245
+ return h("eds-alert", {
246
+ message: "No contributors found for this project.",
247
+ intent: "error"
248
+ });
249
+ }
250
+ const gridClass = `grid gap-6 w-full ${this.columns === '2' ? 'grid-cols-1 sm:grid-cols-2' : this.columns === '3' ? 'grid-cols-1 sm:grid-cols-2 md:grid-cols-3' : this.columns === '4' ? 'grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4' : 'grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-5'}`;
251
+ return h("div", {
252
+ class: "w-full"
253
+ }, h("div", {
254
+ class: gridClass
255
+ }, this.contributors.map(contributor => {
256
+ const {
257
+ firstName,
258
+ lastName
259
+ } = this.parseName(contributor.name);
260
+ return h("div", {
261
+ class: "contributor-card flex flex-row gap-4 p-5 bg-white border border-gray-200 rounded-lg transition-all duration-200",
262
+ key: contributor.email
263
+ }, h("div", {
264
+ class: "flex-shrink-0"
265
+ }, h("eds-avatar", {
266
+ firstName: firstName,
267
+ lastName: lastName,
268
+ color: "black"
269
+ })), h("div", {
270
+ class: "min-w-0 flex flex-col gap-2"
271
+ }, h("span", {
272
+ class: "f-ui-01 text-default pb-2 m-0 whitespace-nowrap overflow-hidden text-ellipsis"
273
+ }, "@", contributor.username), h("div", {
274
+ class: "flex flex-col gap-2 mt-auto"
275
+ }, h("div", {
276
+ class: "flex items-center gap-2 font-semibold"
277
+ }, h("span", {
278
+ class: "text-light"
279
+ }, this.formatNumber(contributor.commits)), h("span", {
280
+ class: "text-lighter"
281
+ }, contributor.commits === 1 ? 'commit' : 'commits')))));
282
+ })));
283
+ }
284
+ };
285
+ EdsGitlabContributors.style = EdsGitlabContributorsStyle0;
286
+
287
+ export { EdsGitlabContributors as eds_gitlab_contributors };
@@ -11,7 +11,7 @@ const EdsIconBluesky = class {
11
11
  }
12
12
  render() {
13
13
  return h("span", {
14
- key: '9adf87027690ce28aed73d736ce2d3be6a5245b5',
14
+ key: 'f2c2ad35173c7bfeae50e5b4de8f59e362d9656f',
15
15
  class: this.class,
16
16
  innerHTML: bluesky
17
17
  });
@@ -1,5 +1,5 @@
1
1
  import { r as registerInstance, h } from './index.esm2.js';
2
- import { e as euSvg } from './eu-9ddde93a.esm.js';
2
+ import { e as euSvg } from './eu-8ac3e99c.esm.js';
3
3
  import 'react';
4
4
  import 'react/jsx-runtime';
5
5
  import 'react-dom';
@@ -11,7 +11,7 @@ const EdsIconEu = class {
11
11
  }
12
12
  render() {
13
13
  return h("span", {
14
- key: '18981f68145f644aed9c96c62c19e0357ebbb1ad',
14
+ key: '56f0efdfb37b2dd4474dc2e69ef649915a9f4bbc',
15
15
  class: this.class,
16
16
  innerHTML: euSvg
17
17
  });
@@ -11,7 +11,7 @@ const EdsIconFacebook = class {
11
11
  }
12
12
  render() {
13
13
  return h("span", {
14
- key: '5be4622aebcbe17b4b40c31fd4b9dc92a102b85e',
14
+ key: '798a3ad6a040dfce879fe62c0a32c83cbd529ad0',
15
15
  class: this.class,
16
16
  innerHTML: facebook
17
17
  });
@@ -11,7 +11,7 @@ const EdsIconGitlab = class {
11
11
  }
12
12
  render() {
13
13
  return h("span", {
14
- key: 'e3c7d4a509e36afd5e18e5aea94d07347304702e',
14
+ key: 'd1c7c0c1e3cae3b45377e305792192df46ef064a',
15
15
  class: this.class,
16
16
  innerHTML: gitlabBlack
17
17
  });
@@ -11,7 +11,7 @@ const EdsIconLinkedin = class {
11
11
  }
12
12
  render() {
13
13
  return h("span", {
14
- key: 'bb6879dfc98416128ada13c11e4e480f8774945e',
14
+ key: 'd8c97d9140baa6609917021bbc67fc7cca47ee32',
15
15
  class: this.class,
16
16
  innerHTML: linkedin
17
17
  });
@@ -11,7 +11,7 @@ const EdsIconMastodon = class {
11
11
  }
12
12
  render() {
13
13
  return h("span", {
14
- key: 'f02291022132866eced365b0f8d190fbb71542e3',
14
+ key: '8498500cd0da2784b889a7b2b2ca9ff4e8414ab6',
15
15
  class: this.class,
16
16
  innerHTML: mastodon
17
17
  });
@@ -11,7 +11,7 @@ const EdsIconTwitter = class {
11
11
  }
12
12
  render() {
13
13
  return h("span", {
14
- key: 'ec7f7b6453668094c684e4f0a289c6f815d6ec06',
14
+ key: '1d2f811831f0c876e8b1133c0df03b6f15acaccb',
15
15
  class: this.class,
16
16
  innerHTML: twitter
17
17
  });
@@ -11,7 +11,7 @@ const EdsIconYoutube = class {
11
11
  }
12
12
  render() {
13
13
  return h("span", {
14
- key: '3a868a9858e68a534e7eab57a7887dfc636d8b95',
14
+ key: '7ebb80fd84ed9ed7c227b1f1ddf213d0502160f9',
15
15
  class: this.class,
16
16
  innerHTML: youtube
17
17
  });
@@ -0,0 +1,96 @@
1
+ import { r as registerInstance, c as createEvent, h, g as getElement } from './index.esm2.js';
2
+ import { s as sendAnalytics } from './analytics-d99780e3.esm.js';
3
+ import 'react';
4
+ import 'react/jsx-runtime';
5
+ import 'react-dom';
6
+
7
+ const EdsInputSearch = class {
8
+ constructor(hostRef) {
9
+ registerInstance(this, hostRef);
10
+ this.search = createEvent(this, "search", 7);
11
+ /**
12
+ * Keydown event listener to detect Command+K (Mac) or Ctrl+K (Windows/Linux)
13
+ * and focus the input element when triggered.
14
+ *
15
+ * @param e - The keyboard event.
16
+ */
17
+ this.keydownListener = e => {
18
+ // Check for Command+K (Mac) or Ctrl+K (Windows/Linux)
19
+ if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === 'k') {
20
+ e.preventDefault();
21
+ // Focus the input if it's available and not disabled
22
+ if (this.inputElement && !this.disabled) {
23
+ this.inputElement.focus();
24
+ }
25
+ }
26
+ };
27
+ /*onInput = (e: any) => {
28
+ // eslint-disable-next-line
29
+ console.log('on input:', e);
30
+ };*/
31
+ this.onChange = e => {
32
+ // eslint-disable-next-line
33
+ this.search.emit({
34
+ event: 'change',
35
+ value: e.target.value
36
+ });
37
+ sendAnalytics({
38
+ category: 'ui-component',
39
+ parentContext: null,
40
+ tag: this.el.tagName.toLowerCase(),
41
+ name: e.target.value || '',
42
+ action: 'search'
43
+ });
44
+ };
45
+ this.name = undefined;
46
+ this.inputId = 'search-main';
47
+ this.placeholder = 'Search...';
48
+ this.value = undefined;
49
+ this.disabled = false;
50
+ this.required = false;
51
+ this.decorate = undefined;
52
+ this.label = 'Search';
53
+ }
54
+ componentDidLoad() {
55
+ // Assign the native input element after the component loads
56
+ this.inputElement = this.el.querySelector('input');
57
+ document.addEventListener('keydown', this.keydownListener);
58
+ }
59
+ disconnectedCallback() {
60
+ // Clean up the event listener when the component is removed
61
+ document.removeEventListener('keydown', this.keydownListener);
62
+ }
63
+ async getInputElement() {
64
+ // Return the native input element
65
+ return this.inputElement;
66
+ }
67
+ render() {
68
+ return h("div", {
69
+ key: '52676b3559e14b5153f7d8f0fa6cd12e49354d87',
70
+ class: "relative flex items-center"
71
+ }, h("eds-icon-wrapper", {
72
+ key: '754e8753607c01dab63d156d306f3325547049aa',
73
+ name: "search",
74
+ class: "absolute top-1/2 left-[14px] -translate-y-1/2 text-lightest",
75
+ "aria-hidden": "true"
76
+ }), h("input", {
77
+ key: 'b49d523195711316c0817de67776d379a6c7248b',
78
+ id: this.inputId || this.name,
79
+ name: this.name,
80
+ placeholder: this.placeholder,
81
+ value: this.value || '',
82
+ required: this.required,
83
+ disabled: this.disabled,
84
+ type: "search",
85
+ "aria-label": this.placeholder,
86
+ class: `input pl-36 ${this.decorate}`,
87
+ //onInput={this.onInput}
88
+ onChange: this.onChange
89
+ }));
90
+ }
91
+ get el() {
92
+ return getElement(this);
93
+ }
94
+ };
95
+
96
+ export { EdsInputSearch as eds_input_search };