@manidecp/nagp-stencil-ui-kit 1.0.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 (100) hide show
  1. package/dist/cjs/custom-modal.cjs.entry.js +35 -0
  2. package/dist/cjs/custom-modal.cjs.entry.js.map +1 -0
  3. package/dist/cjs/index-xXx7YX-n.js +1672 -0
  4. package/dist/cjs/index-xXx7YX-n.js.map +1 -0
  5. package/dist/cjs/index.cjs.js +5 -0
  6. package/dist/cjs/index.cjs.js.map +1 -0
  7. package/dist/cjs/loader.cjs.js +15 -0
  8. package/dist/cjs/loader.cjs.js.map +1 -0
  9. package/dist/cjs/meal-slot-card.cjs.entry.js +33 -0
  10. package/dist/cjs/meal-slot-card.cjs.entry.js.map +1 -0
  11. package/dist/cjs/nagp-recipe-ui-kit.cjs.js +27 -0
  12. package/dist/cjs/nagp-recipe-ui-kit.cjs.js.map +1 -0
  13. package/dist/cjs/recipe-badge.cjs.entry.js +25 -0
  14. package/dist/cjs/recipe-badge.cjs.entry.js.map +1 -0
  15. package/dist/cjs/recipe-card.cjs.entry.js +59 -0
  16. package/dist/cjs/recipe-card.cjs.entry.js.map +1 -0
  17. package/dist/cjs/recipe-rating.cjs.entry.js +62 -0
  18. package/dist/cjs/recipe-rating.cjs.entry.js.map +1 -0
  19. package/dist/collection/collection-manifest.json +17 -0
  20. package/dist/collection/components/custom-modal/custom-modal.css +63 -0
  21. package/dist/collection/components/custom-modal/custom-modal.js +95 -0
  22. package/dist/collection/components/custom-modal/custom-modal.js.map +1 -0
  23. package/dist/collection/components/meal-slot-card/meal-slot-card.css +72 -0
  24. package/dist/collection/components/meal-slot-card/meal-slot-card.js +127 -0
  25. package/dist/collection/components/meal-slot-card/meal-slot-card.js.map +1 -0
  26. package/dist/collection/components/recipe-badge/recipe-badge.css +33 -0
  27. package/dist/collection/components/recipe-badge/recipe-badge.js +87 -0
  28. package/dist/collection/components/recipe-badge/recipe-badge.js.map +1 -0
  29. package/dist/collection/components/recipe-card/recipe-card.css +96 -0
  30. package/dist/collection/components/recipe-card/recipe-card.js +220 -0
  31. package/dist/collection/components/recipe-card/recipe-card.js.map +1 -0
  32. package/dist/collection/components/recipe-rating/recipe-rating.css +36 -0
  33. package/dist/collection/components/recipe-rating/recipe-rating.js +186 -0
  34. package/dist/collection/components/recipe-rating/recipe-rating.js.map +1 -0
  35. package/dist/collection/index.js +2 -0
  36. package/dist/collection/index.js.map +1 -0
  37. package/dist/components/custom-modal.d.ts +11 -0
  38. package/dist/components/custom-modal.js +2 -0
  39. package/dist/components/custom-modal.js.map +1 -0
  40. package/dist/components/index.d.ts +35 -0
  41. package/dist/components/index.js +2 -0
  42. package/dist/components/index.js.map +1 -0
  43. package/dist/components/meal-slot-card.d.ts +11 -0
  44. package/dist/components/meal-slot-card.js +2 -0
  45. package/dist/components/meal-slot-card.js.map +1 -0
  46. package/dist/components/recipe-badge.d.ts +11 -0
  47. package/dist/components/recipe-badge.js +2 -0
  48. package/dist/components/recipe-badge.js.map +1 -0
  49. package/dist/components/recipe-card.d.ts +11 -0
  50. package/dist/components/recipe-card.js +2 -0
  51. package/dist/components/recipe-card.js.map +1 -0
  52. package/dist/components/recipe-rating.d.ts +11 -0
  53. package/dist/components/recipe-rating.js +2 -0
  54. package/dist/components/recipe-rating.js.map +1 -0
  55. package/dist/esm/custom-modal.entry.js +33 -0
  56. package/dist/esm/custom-modal.entry.js.map +1 -0
  57. package/dist/esm/index-DrjLtd7S.js +1646 -0
  58. package/dist/esm/index-DrjLtd7S.js.map +1 -0
  59. package/dist/esm/index.js +4 -0
  60. package/dist/esm/index.js.map +1 -0
  61. package/dist/esm/loader.js +13 -0
  62. package/dist/esm/loader.js.map +1 -0
  63. package/dist/esm/meal-slot-card.entry.js +31 -0
  64. package/dist/esm/meal-slot-card.entry.js.map +1 -0
  65. package/dist/esm/nagp-recipe-ui-kit.js +23 -0
  66. package/dist/esm/nagp-recipe-ui-kit.js.map +1 -0
  67. package/dist/esm/recipe-badge.entry.js +23 -0
  68. package/dist/esm/recipe-badge.entry.js.map +1 -0
  69. package/dist/esm/recipe-card.entry.js +57 -0
  70. package/dist/esm/recipe-card.entry.js.map +1 -0
  71. package/dist/esm/recipe-rating.entry.js +60 -0
  72. package/dist/esm/recipe-rating.entry.js.map +1 -0
  73. package/dist/index.cjs.js +1 -0
  74. package/dist/index.js +1 -0
  75. package/dist/nagp-recipe-ui-kit/index.esm.js +2 -0
  76. package/dist/nagp-recipe-ui-kit/index.esm.js.map +1 -0
  77. package/dist/nagp-recipe-ui-kit/nagp-recipe-ui-kit.css +1 -0
  78. package/dist/nagp-recipe-ui-kit/nagp-recipe-ui-kit.esm.js +2 -0
  79. package/dist/nagp-recipe-ui-kit/nagp-recipe-ui-kit.esm.js.map +1 -0
  80. package/dist/nagp-recipe-ui-kit/p-21d809b9.entry.js +2 -0
  81. package/dist/nagp-recipe-ui-kit/p-21d809b9.entry.js.map +1 -0
  82. package/dist/nagp-recipe-ui-kit/p-524e6762.entry.js +2 -0
  83. package/dist/nagp-recipe-ui-kit/p-524e6762.entry.js.map +1 -0
  84. package/dist/nagp-recipe-ui-kit/p-DrjLtd7S.js +3 -0
  85. package/dist/nagp-recipe-ui-kit/p-DrjLtd7S.js.map +1 -0
  86. package/dist/nagp-recipe-ui-kit/p-cfec107f.entry.js +2 -0
  87. package/dist/nagp-recipe-ui-kit/p-cfec107f.entry.js.map +1 -0
  88. package/dist/nagp-recipe-ui-kit/p-de6ef31c.entry.js +2 -0
  89. package/dist/nagp-recipe-ui-kit/p-de6ef31c.entry.js.map +1 -0
  90. package/dist/nagp-recipe-ui-kit/p-e8a2f5f9.entry.js +2 -0
  91. package/dist/nagp-recipe-ui-kit/p-e8a2f5f9.entry.js.map +1 -0
  92. package/dist/types/components/custom-modal/custom-modal.d.ts +9 -0
  93. package/dist/types/components/meal-slot-card/meal-slot-card.d.ts +17 -0
  94. package/dist/types/components/recipe-badge/recipe-badge.d.ts +6 -0
  95. package/dist/types/components/recipe-card/recipe-card.d.ts +24 -0
  96. package/dist/types/components/recipe-rating/recipe-rating.d.ts +16 -0
  97. package/dist/types/components.d.ts +314 -0
  98. package/dist/types/index.d.ts +1 -0
  99. package/dist/types/stencil-public-runtime.d.ts +1873 -0
  100. package/package.json +32 -0
@@ -0,0 +1,2 @@
1
+ import{r as e,c as a,h as r}from"./p-DrjLtd7S.js";const i=()=>`:host{--recipe-card-bg:#ffffff;--recipe-card-text:#111827;--recipe-card-muted:#6b7280;--recipe-card-accent:#f97316;--recipe-card-border:#e5e7eb;display:block}.recipe-card{background:var(--recipe-card-bg);border:1px solid var(--recipe-card-border);border-radius:18px;overflow:hidden;box-shadow:0 12px 30px rgba(15, 23, 42, 0.08);cursor:pointer;transition:transform 0.2s ease, box-shadow 0.2s ease}.recipe-card:hover{transform:translateY(-2px);box-shadow:0 18px 32px rgba(15, 23, 42, 0.12)}.image-wrap{position:relative;height:180px;background:linear-gradient(135deg, #fff7ed, #ffedd5)}.image-wrap img,.image-placeholder{width:100%;height:100%;display:block;object-fit:cover}.image-placeholder{display:grid;place-items:center;font-weight:700;letter-spacing:0.08em;text-transform:uppercase;color:var(--recipe-card-accent)}.favorite{position:absolute;top:12px;right:12px;width:2.5rem;height:2.5rem;border:none;border-radius:50%;background:rgba(255, 255, 255, 0.9);color:#9ca3af;font-size:1.2rem;cursor:pointer}.favorite.active{background:rgba(249, 115, 22, 0.12);color:var(--recipe-card-accent)}.card-content{padding:1rem}.meta-row{display:flex;justify-content:flex-end;margin-bottom:0.5rem}.prep-time{font-size:0.75rem;font-weight:700;letter-spacing:0.04em;text-transform:uppercase;color:var(--recipe-card-accent)}h2{margin:0 0 0.75rem;font-size:1.25rem;color:var(--recipe-card-text)}.actions-row{display:flex;justify-content:flex-end;align-items:center;gap:0.5rem}`;const t=class{constructor(r){e(this,r);this.cardClick=a(this,"cardClick");this.favoriteToggle=a(this,"favoriteToggle")}recipeId="recipe-1";recipeTitle="Spicy Pasta";imageUrl="";prepTime=30;isFavorite=false;favoriteState=false;cardClick;favoriteToggle;componentWillLoad(){this.favoriteState=this.isFavorite}handleFavoritePropChange(e){this.favoriteState=e}async toggleFavorite(){this.favoriteState=!this.favoriteState;this.favoriteToggle.emit({recipeId:this.recipeId,recipeTitle:this.recipeTitle,isFavorite:this.favoriteState})}handleCardClick=()=>{this.cardClick.emit({recipeId:this.recipeId,recipeTitle:this.recipeTitle})};handleFavoriteClick=e=>{e.stopPropagation();this.toggleFavorite()};render(){return r("article",{key:"ea8d57192146e0c875ba9c357ea5e65ddf4e2c5e",class:"recipe-card",onClick:this.handleCardClick},r("div",{key:"f6dfc3b4481988fd07d23cd0548f1cb1984942f5",class:"image-wrap"},this.imageUrl?r("img",{src:this.imageUrl,alt:this.recipeTitle}):r("div",{class:"image-placeholder"},"Recipe"),r("button",{key:"f024d1784c817c7bb2ad937444365be8d192d4f8",type:"button",class:{favorite:true,active:this.favoriteState},"aria-label":this.favoriteState?"Remove favorite":"Add favorite",onClick:this.handleFavoriteClick},this.favoriteState?"♥":"♡")),r("div",{key:"e44fb2e9d90c8ef20d05a1f1baabc7d1e1b7a070",class:"card-content"},r("div",{key:"e34a861b6f82d9368d400d0115a329bf3a9b91f4",class:"meta-row"},r("span",{key:"925e5a0682f4923d51c28b07348b403ddac19065",class:"prep-time"},this.prepTime," min")),r("h2",{key:"7a576e9ed4af7fa83a5e34400ad2a0cfb32f7a1c"},this.recipeTitle),r("div",{key:"d4f3a287d889da78d1a785183aa43c53f9546c36",class:"actions-row"},r("slot",{key:"aeb6163d6243fbc55cf98f5fd7c3fbbf59a1a6e9",name:"actions"}))))}static get watchers(){return{isFavorite:[{handleFavoritePropChange:0}]}}};t.style=i();export{t as recipe_card};
2
+ //# sourceMappingURL=p-cfec107f.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["recipeCardCss","RecipeCard","recipeId","recipeTitle","imageUrl","prepTime","isFavorite","favoriteState","cardClick","favoriteToggle","componentWillLoad","this","handleFavoritePropChange","newValue","toggleFavorite","emit","handleCardClick","handleFavoriteClick","event","stopPropagation","render","h","key","class","onClick","src","alt","type","favorite","active","name"],"sources":["src/components/recipe-card/recipe-card.css?tag=recipe-card&encapsulation=shadow","src/components/recipe-card/recipe-card.tsx"],"sourcesContent":[":host {\r\n --recipe-card-bg: #ffffff;\r\n --recipe-card-text: #111827;\r\n --recipe-card-muted: #6b7280;\r\n --recipe-card-accent: #f97316;\r\n --recipe-card-border: #e5e7eb;\r\n display: block;\r\n}\r\n\r\n.recipe-card {\r\n background: var(--recipe-card-bg);\r\n border: 1px solid var(--recipe-card-border);\r\n border-radius: 18px;\r\n overflow: hidden;\r\n box-shadow: 0 12px 30px rgba(15, 23, 42, 0.08);\r\n cursor: pointer;\r\n transition: transform 0.2s ease, box-shadow 0.2s ease;\r\n}\r\n\r\n.recipe-card:hover {\r\n transform: translateY(-2px);\r\n box-shadow: 0 18px 32px rgba(15, 23, 42, 0.12);\r\n}\r\n\r\n.image-wrap {\r\n position: relative;\r\n height: 180px;\r\n background: linear-gradient(135deg, #fff7ed, #ffedd5);\r\n}\r\n\r\n.image-wrap img,\r\n.image-placeholder {\r\n width: 100%;\r\n height: 100%;\r\n display: block;\r\n object-fit: cover;\r\n}\r\n\r\n.image-placeholder {\r\n display: grid;\r\n place-items: center;\r\n font-weight: 700;\r\n letter-spacing: 0.08em;\r\n text-transform: uppercase;\r\n color: var(--recipe-card-accent);\r\n}\r\n\r\n.favorite {\r\n position: absolute;\r\n top: 12px;\r\n right: 12px;\r\n width: 2.5rem;\r\n height: 2.5rem;\r\n border: none;\r\n border-radius: 50%;\r\n background: rgba(255, 255, 255, 0.9);\r\n color: #9ca3af;\r\n font-size: 1.2rem;\r\n cursor: pointer;\r\n}\r\n\r\n.favorite.active {\r\n background: rgba(249, 115, 22, 0.12);\r\n color: var(--recipe-card-accent);\r\n}\r\n\r\n.card-content {\r\n padding: 1rem;\r\n}\r\n\r\n.meta-row {\r\n display: flex;\r\n justify-content: flex-end;\r\n margin-bottom: 0.5rem;\r\n}\r\n\r\n.prep-time {\r\n font-size: 0.75rem;\r\n font-weight: 700;\r\n letter-spacing: 0.04em;\r\n text-transform: uppercase;\r\n color: var(--recipe-card-accent);\r\n}\r\n\r\nh2 {\r\n margin: 0 0 0.75rem;\r\n font-size: 1.25rem;\r\n color: var(--recipe-card-text);\r\n}\r\n\r\n.actions-row {\r\n display: flex;\r\n justify-content: flex-end;\r\n align-items: center;\r\n gap: 0.5rem;\r\n}\r\n","import { Component, h, Prop, State, Event, EventEmitter, Method, Watch } from '@stencil/core';\r\n\r\n@Component({\r\n tag: 'recipe-card',\r\n styleUrl: 'recipe-card.css',\r\n shadow: true,\r\n})\r\nexport class RecipeCard {\r\n @Prop() recipeId: string = 'recipe-1';\r\n @Prop() recipeTitle: string = 'Spicy Pasta';\r\n @Prop() imageUrl: string = '';\r\n @Prop() prepTime: number = 30;\r\n @Prop() isFavorite: boolean = false;\r\n\r\n @State() favoriteState: boolean = false;\r\n\r\n @Event() cardClick: EventEmitter<{ recipeId: string; recipeTitle: string }>;\r\n @Event() favoriteToggle: EventEmitter<{ recipeId: string; recipeTitle: string; isFavorite: boolean }>;\r\n\r\n componentWillLoad() {\r\n this.favoriteState = this.isFavorite;\r\n }\r\n\r\n @Watch('isFavorite')\r\n handleFavoritePropChange(newValue: boolean) {\r\n this.favoriteState = newValue;\r\n }\r\n\r\n @Method()\r\n async toggleFavorite() {\r\n this.favoriteState = !this.favoriteState;\r\n this.favoriteToggle.emit({\r\n recipeId: this.recipeId,\r\n recipeTitle: this.recipeTitle,\r\n isFavorite: this.favoriteState,\r\n });\r\n }\r\n\r\n private handleCardClick = () => {\r\n this.cardClick.emit({\r\n recipeId: this.recipeId,\r\n recipeTitle: this.recipeTitle,\r\n });\r\n };\r\n\r\n private handleFavoriteClick = (event: Event) => {\r\n event.stopPropagation();\r\n this.toggleFavorite();\r\n };\r\n\r\n render() {\r\n return (\r\n <article class=\"recipe-card\" onClick={this.handleCardClick}>\r\n <div class=\"image-wrap\">\r\n {this.imageUrl ? (\r\n <img src={this.imageUrl} alt={this.recipeTitle} />\r\n ) : (\r\n <div class=\"image-placeholder\">Recipe</div>\r\n )}\r\n <button\r\n type=\"button\"\r\n class={{ favorite: true, active: this.favoriteState }}\r\n aria-label={this.favoriteState ? 'Remove favorite' : 'Add favorite'}\r\n onClick={this.handleFavoriteClick}\r\n >\r\n {this.favoriteState ? '♥' : '♡'}\r\n </button>\r\n </div>\r\n\r\n <div class=\"card-content\">\r\n <div class=\"meta-row\">\r\n <span class=\"prep-time\">{this.prepTime} min</span>\r\n </div>\r\n <h2>{this.recipeTitle}</h2>\r\n <div class=\"actions-row\">\r\n <slot name=\"actions\" />\r\n </div>\r\n </div>\r\n </article>\r\n );\r\n }\r\n}\r\n"],"mappings":"kDAAA,MAAMA,EAAgB,IAAM,y7C,MCOfC,EAAU,M,yGACbC,SAAmB,WACnBC,YAAsB,cACtBC,SAAmB,GACnBC,SAAmB,GACnBC,WAAsB,MAErBC,cAAyB,MAEzBC,UACAC,eAET,iBAAAC,GACEC,KAAKJ,cAAgBI,KAAKL,U,CAI5B,wBAAAM,CAAyBC,GACvBF,KAAKJ,cAAgBM,C,CAIvB,oBAAMC,GACJH,KAAKJ,eAAiBI,KAAKJ,cAC3BI,KAAKF,eAAeM,KAAK,CACvBb,SAAUS,KAAKT,SACfC,YAAaQ,KAAKR,YAClBG,WAAYK,KAAKJ,e,CAIbS,gBAAkB,KACxBL,KAAKH,UAAUO,KAAK,CAClBb,SAAUS,KAAKT,SACfC,YAAaQ,KAAKR,aAClB,EAGIc,oBAAuBC,IAC7BA,EAAMC,kBACNR,KAAKG,gBAAgB,EAGvB,MAAAM,GACE,OACEC,EAAA,WAAAC,IAAA,2CAASC,MAAM,cAAcC,QAASb,KAAKK,iBACzCK,EAAA,OAAAC,IAAA,2CAAKC,MAAM,cACRZ,KAAKP,SACJiB,EAAA,OAAKI,IAAKd,KAAKP,SAAUsB,IAAKf,KAAKR,cAEnCkB,EAAA,OAAKE,MAAM,qBAAmB,UAEhCF,EAAA,UAAAC,IAAA,2CACEK,KAAK,SACLJ,MAAO,CAAEK,SAAU,KAAMC,OAAQlB,KAAKJ,eAAe,aACzCI,KAAKJ,cAAgB,kBAAoB,eACrDiB,QAASb,KAAKM,qBAEbN,KAAKJ,cAAgB,IAAM,MAIhCc,EAAA,OAAAC,IAAA,2CAAKC,MAAM,gBACTF,EAAA,OAAAC,IAAA,2CAAKC,MAAM,YACTF,EAAA,QAAAC,IAAA,2CAAMC,MAAM,aAAaZ,KAAKN,SAAQ,SAExCgB,EAAA,MAAAC,IAAA,4CAAKX,KAAKR,aACVkB,EAAA,OAAAC,IAAA,2CAAKC,MAAM,eACTF,EAAA,QAAAC,IAAA,2CAAMQ,KAAK,c","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as t,c as e,h as r}from"./p-DrjLtd7S.js";const i=()=>`:host{--rating-filled:#fbbf24;--rating-empty:#d1d5db;display:inline-block}.rating{display:inline-flex;align-items:center;gap:0.15rem;font-size:1.2rem;line-height:1}.star{border:none;background:transparent;padding:0;margin:0;cursor:default;color:var(--rating-empty);user-select:none;font-size:inherit}.interactive .star{cursor:pointer}.star.filled{color:var(--rating-filled)}button.star{cursor:pointer}`;const a=class{constructor(r){t(this,r);this.ratingChange=e(this,"ratingChange")}score=4;maxScore=5;interactive=false;value;max;currentScore=0;ratingChange;get effectiveScore(){return this.score??this.value??4}get effectiveMaxScore(){return this.maxScore??this.max??5}componentWillLoad(){this.currentScore=this.effectiveScore}handleScoreChange(t){this.currentScore=t}handleStarClick=t=>{if(!this.interactive){return}this.currentScore=t;this.ratingChange.emit(t)};render(){const t=this.effectiveMaxScore;const e=Array.from({length:t},((e,i)=>{const a=i+1;const n=a<=this.currentScore;if(this.interactive){return r("button",{type:"button",class:{star:true,filled:n},onClick:()=>this.handleStarClick(a),"aria-label":`Rate ${a} out of ${t}`,"aria-pressed":n},n?"★":"☆")}return r("span",{class:{star:true,filled:n},"aria-hidden":"true"},n?"★":"☆")}));return r("div",{class:"rating","aria-label":`Rated ${this.currentScore} out of ${t}`,role:"img"},e)}static get watchers(){return{score:[{handleScoreChange:0}]}}};a.style=i();export{a as recipe_rating};
2
+ //# sourceMappingURL=p-de6ef31c.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["recipeRatingCss","RecipeRating","score","maxScore","interactive","value","max","currentScore","ratingChange","effectiveScore","this","effectiveMaxScore","componentWillLoad","handleScoreChange","newValue","handleStarClick","emit","render","stars","Array","from","length","_","index","filled","h","type","class","star","onClick","role"],"sources":["src/components/recipe-rating/recipe-rating.css?tag=recipe-rating&encapsulation=shadow","src/components/recipe-rating/recipe-rating.tsx"],"sourcesContent":[":host {\r\n --rating-filled: #fbbf24;\r\n --rating-empty: #d1d5db;\r\n display: inline-block;\r\n}\r\n\r\n.rating {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 0.15rem;\r\n font-size: 1.2rem;\r\n line-height: 1;\r\n}\r\n\r\n.star {\r\n border: none;\r\n background: transparent;\r\n padding: 0;\r\n margin: 0;\r\n cursor: default;\r\n color: var(--rating-empty);\r\n user-select: none;\r\n font-size: inherit;\r\n}\r\n\r\n.interactive .star {\r\n cursor: pointer;\r\n}\r\n\r\n.star.filled {\r\n color: var(--rating-filled);\r\n}\r\n\r\nbutton.star {\r\n cursor: pointer;\r\n}\r\n","import { Component, h, Prop, State, Event, EventEmitter, Watch } from '@stencil/core';\r\n\r\n@Component({\r\n tag: 'recipe-rating',\r\n styleUrl: 'recipe-rating.css',\r\n shadow: true,\r\n})\r\nexport class RecipeRating {\r\n @Prop() score: number = 4;\r\n @Prop() maxScore: number = 5;\r\n @Prop() interactive: boolean = false;\r\n\r\n // Backward-compatible aliases for the original scaffolded API.\r\n @Prop() value: number;\r\n @Prop() max: number;\r\n\r\n @State() currentScore: number = 0;\r\n\r\n @Event() ratingChange: EventEmitter<number>;\r\n\r\n private get effectiveScore(): number {\r\n return this.score ?? this.value ?? 4;\r\n }\r\n\r\n private get effectiveMaxScore(): number {\r\n return this.maxScore ?? this.max ?? 5;\r\n }\r\n\r\n componentWillLoad() {\r\n this.currentScore = this.effectiveScore;\r\n }\r\n\r\n @Watch('score')\r\n handleScoreChange(newValue: number) {\r\n this.currentScore = newValue;\r\n }\r\n\r\n private handleStarClick = (value: number) => {\r\n if (!this.interactive) {\r\n return;\r\n }\r\n\r\n this.currentScore = value;\r\n this.ratingChange.emit(value);\r\n };\r\n\r\n render() {\r\n const maxScore = this.effectiveMaxScore;\r\n const stars = Array.from({ length: maxScore }, (_, index) => {\r\n const value = index + 1;\r\n const filled = value <= this.currentScore;\r\n\r\n if (this.interactive) {\r\n return (\r\n <button\r\n type=\"button\"\r\n class={{ star: true, filled }}\r\n onClick={() => this.handleStarClick(value)}\r\n aria-label={`Rate ${value} out of ${maxScore}`}\r\n aria-pressed={filled}\r\n >\r\n {filled ? '★' : '☆'}\r\n </button>\r\n );\r\n }\r\n\r\n return <span class={{ star: true, filled }} aria-hidden=\"true\">{filled ? '★' : '☆'}</span>;\r\n });\r\n\r\n return (\r\n <div class=\"rating\" aria-label={`Rated ${this.currentScore} out of ${maxScore}`} role=\"img\">\r\n {stars}\r\n </div>\r\n );\r\n }\r\n}\r\n"],"mappings":"kDAAA,MAAMA,EAAkB,IAAM,oZ,MCOjBC,EAAY,M,kEACfC,MAAgB,EAChBC,SAAmB,EACnBC,YAAuB,MAGvBC,MACAC,IAECC,aAAuB,EAEvBC,aAET,kBAAYC,GACV,OAAOC,KAAKR,OAASQ,KAAKL,OAAS,C,CAGrC,qBAAYM,GACV,OAAOD,KAAKP,UAAYO,KAAKJ,KAAO,C,CAGtC,iBAAAM,GACEF,KAAKH,aAAeG,KAAKD,c,CAI3B,iBAAAI,CAAkBC,GAChBJ,KAAKH,aAAeO,C,CAGdC,gBAAmBV,IACzB,IAAKK,KAAKN,YAAa,CACrB,M,CAGFM,KAAKH,aAAeF,EACpBK,KAAKF,aAAaQ,KAAKX,EAAM,EAG/B,MAAAY,GACE,MAAMd,EAAWO,KAAKC,kBACtB,MAAMO,EAAQC,MAAMC,KAAK,CAAEC,OAAQlB,IAAY,CAACmB,EAAGC,KACjD,MAAMlB,EAAQkB,EAAQ,EACtB,MAAMC,EAASnB,GAASK,KAAKH,aAE7B,GAAIG,KAAKN,YAAa,CACpB,OACEqB,EAAA,UACEC,KAAK,SACLC,MAAO,CAAEC,KAAM,KAAMJ,UACrBK,QAAS,IAAMnB,KAAKK,gBAAgBV,GAAM,aAC9B,QAAQA,YAAgBF,IAAU,eAChCqB,GAEbA,EAAS,IAAM,I,CAKtB,OAAOC,EAAA,QAAME,MAAO,CAAEC,KAAM,KAAMJ,UAAQ,cAAc,QAAQA,EAAS,IAAM,IAAW,IAG5F,OACEC,EAAA,OAAKE,MAAM,SAAQ,aAAa,SAASjB,KAAKH,uBAAuBJ,IAAY2B,KAAK,OACnFZ,E","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as a,h as e}from"./p-DrjLtd7S.js";const r=()=>`:host{--badge-primary-bg:#f97316;--badge-secondary-bg:#e5e7eb;--badge-accent-bg:#7c3aed;--badge-text:#ffffff;display:inline-block}.badge{display:inline-flex;align-items:center;justify-content:center;border-radius:999px;padding:0.45rem 0.8rem;font-size:0.7rem;font-weight:800;letter-spacing:0.06em;text-transform:uppercase;color:var(--badge-text)}.variant-primary{background:var(--badge-primary-bg)}.variant-secondary{background:var(--badge-secondary-bg);color:#111827}.variant-accent{background:var(--badge-accent-bg)}`;const t=class{constructor(e){a(this,e)}label="Featured";variant="primary";color;render(){const a=this.color?{background:this.color}:{};return e("span",{key:"35180a6a6346c97293dc0ddadb0819b7aa1ff9e5",class:{badge:true,[`variant-${this.variant}`]:true},style:a},this.label)}};t.style=r();export{t as recipe_badge};
2
+ //# sourceMappingURL=p-e8a2f5f9.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["recipeBadgeCss","RecipeBadge","label","variant","color","render","style","this","background","h","key","class","badge"],"sources":["src/components/recipe-badge/recipe-badge.css?tag=recipe-badge&encapsulation=shadow","src/components/recipe-badge/recipe-badge.tsx"],"sourcesContent":[":host {\r\n --badge-primary-bg: #f97316;\r\n --badge-secondary-bg: #e5e7eb;\r\n --badge-accent-bg: #7c3aed;\r\n --badge-text: #ffffff;\r\n display: inline-block;\r\n}\r\n\r\n.badge {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n border-radius: 999px;\r\n padding: 0.45rem 0.8rem;\r\n font-size: 0.7rem;\r\n font-weight: 800;\r\n letter-spacing: 0.06em;\r\n text-transform: uppercase;\r\n color: var(--badge-text);\r\n}\r\n\r\n.variant-primary {\r\n background: var(--badge-primary-bg);\r\n}\r\n\r\n.variant-secondary {\r\n background: var(--badge-secondary-bg);\r\n color: #111827;\r\n}\r\n\r\n.variant-accent {\r\n background: var(--badge-accent-bg);\r\n}\r\n","import { Component, h, Prop } from '@stencil/core';\r\n\r\n@Component({\r\n tag: 'recipe-badge',\r\n styleUrl: 'recipe-badge.css',\r\n shadow: true,\r\n})\r\nexport class RecipeBadge {\r\n @Prop() label: string = 'Featured';\r\n @Prop() variant: 'primary' | 'secondary' | 'accent' = 'primary';\r\n\r\n // Backward-compatible alias for the original scaffolded API.\r\n @Prop() color: string;\r\n\r\n render() {\r\n const style = this.color ? { background: this.color } : {};\r\n return (\r\n <span class={{ badge: true, [`variant-${this.variant}`]: true }} style={style}>\r\n {this.label}\r\n </span>\r\n );\r\n }\r\n}\r\n"],"mappings":"2CAAA,MAAMA,EAAiB,IAAM,ygB,MCOhBC,EAAW,M,yBACdC,MAAgB,WAChBC,QAA8C,UAG9CC,MAER,MAAAC,GACE,MAAMC,EAAQC,KAAKH,MAAQ,CAAEI,WAAYD,KAAKH,OAAU,GACxD,OACEK,EAAA,QAAAC,IAAA,2CAAMC,MAAO,CAAEC,MAAO,KAAM,CAAC,WAAWL,KAAKJ,WAAY,MAAQG,MAAOA,GACrEC,KAAKL,M","ignoreList":[]}
@@ -0,0 +1,9 @@
1
+ import { EventEmitter } from '../../stencil-public-runtime';
2
+ export declare class CustomModal {
3
+ isOpen: boolean;
4
+ modalTitle: string;
5
+ closeModal: EventEmitter<void>;
6
+ private handleOverlayClick;
7
+ private handleClose;
8
+ render(): any;
9
+ }
@@ -0,0 +1,17 @@
1
+ import { EventEmitter } from '../../stencil-public-runtime';
2
+ export declare class MealSlotCard {
3
+ day: string;
4
+ mealType: 'Breakfast' | 'Lunch' | 'Dinner';
5
+ recipeName: string;
6
+ removeMeal: EventEmitter<{
7
+ day: string;
8
+ mealType: 'Breakfast' | 'Lunch' | 'Dinner';
9
+ }>;
10
+ addMeal: EventEmitter<{
11
+ day: string;
12
+ mealType: 'Breakfast' | 'Lunch' | 'Dinner';
13
+ }>;
14
+ private handleAddMeal;
15
+ private handleRemoveMeal;
16
+ render(): any;
17
+ }
@@ -0,0 +1,6 @@
1
+ export declare class RecipeBadge {
2
+ label: string;
3
+ variant: 'primary' | 'secondary' | 'accent';
4
+ color: string;
5
+ render(): any;
6
+ }
@@ -0,0 +1,24 @@
1
+ import { EventEmitter } from '../../stencil-public-runtime';
2
+ export declare class RecipeCard {
3
+ recipeId: string;
4
+ recipeTitle: string;
5
+ imageUrl: string;
6
+ prepTime: number;
7
+ isFavorite: boolean;
8
+ favoriteState: boolean;
9
+ cardClick: EventEmitter<{
10
+ recipeId: string;
11
+ recipeTitle: string;
12
+ }>;
13
+ favoriteToggle: EventEmitter<{
14
+ recipeId: string;
15
+ recipeTitle: string;
16
+ isFavorite: boolean;
17
+ }>;
18
+ componentWillLoad(): void;
19
+ handleFavoritePropChange(newValue: boolean): void;
20
+ toggleFavorite(): Promise<void>;
21
+ private handleCardClick;
22
+ private handleFavoriteClick;
23
+ render(): any;
24
+ }
@@ -0,0 +1,16 @@
1
+ import { EventEmitter } from '../../stencil-public-runtime';
2
+ export declare class RecipeRating {
3
+ score: number;
4
+ maxScore: number;
5
+ interactive: boolean;
6
+ value: number;
7
+ max: number;
8
+ currentScore: number;
9
+ ratingChange: EventEmitter<number>;
10
+ private get effectiveScore();
11
+ private get effectiveMaxScore();
12
+ componentWillLoad(): void;
13
+ handleScoreChange(newValue: number): void;
14
+ private handleStarClick;
15
+ render(): any;
16
+ }
@@ -0,0 +1,314 @@
1
+ /* eslint-disable */
2
+ /* tslint:disable */
3
+ /**
4
+ * This is an autogenerated file created by the Stencil compiler.
5
+ * It contains typing information for all components that exist in this project.
6
+ */
7
+ import { HTMLStencilElement, JSXBase } from "./stencil-public-runtime";
8
+ export namespace Components {
9
+ interface CustomModal {
10
+ /**
11
+ * @default true
12
+ */
13
+ "isOpen": boolean;
14
+ /**
15
+ * @default 'Dialog'
16
+ */
17
+ "modalTitle": string;
18
+ }
19
+ interface MealSlotCard {
20
+ /**
21
+ * @default 'Monday'
22
+ */
23
+ "day": string;
24
+ /**
25
+ * @default 'Dinner'
26
+ */
27
+ "mealType": 'Breakfast' | 'Lunch' | 'Dinner';
28
+ /**
29
+ * @default 'No meal selected'
30
+ */
31
+ "recipeName": string;
32
+ }
33
+ interface RecipeBadge {
34
+ "color": string;
35
+ /**
36
+ * @default 'Featured'
37
+ */
38
+ "label": string;
39
+ /**
40
+ * @default 'primary'
41
+ */
42
+ "variant": 'primary' | 'secondary' | 'accent';
43
+ }
44
+ interface RecipeCard {
45
+ /**
46
+ * @default ''
47
+ */
48
+ "imageUrl": string;
49
+ /**
50
+ * @default false
51
+ */
52
+ "isFavorite": boolean;
53
+ /**
54
+ * @default 30
55
+ */
56
+ "prepTime": number;
57
+ /**
58
+ * @default 'recipe-1'
59
+ */
60
+ "recipeId": string;
61
+ /**
62
+ * @default 'Spicy Pasta'
63
+ */
64
+ "recipeTitle": string;
65
+ "toggleFavorite": () => Promise<void>;
66
+ }
67
+ interface RecipeRating {
68
+ /**
69
+ * @default false
70
+ */
71
+ "interactive": boolean;
72
+ "max": number;
73
+ /**
74
+ * @default 5
75
+ */
76
+ "maxScore": number;
77
+ /**
78
+ * @default 4
79
+ */
80
+ "score": number;
81
+ "value": number;
82
+ }
83
+ }
84
+ export interface CustomModalCustomEvent<T> extends CustomEvent<T> {
85
+ detail: T;
86
+ target: HTMLCustomModalElement;
87
+ }
88
+ export interface MealSlotCardCustomEvent<T> extends CustomEvent<T> {
89
+ detail: T;
90
+ target: HTMLMealSlotCardElement;
91
+ }
92
+ export interface RecipeCardCustomEvent<T> extends CustomEvent<T> {
93
+ detail: T;
94
+ target: HTMLRecipeCardElement;
95
+ }
96
+ export interface RecipeRatingCustomEvent<T> extends CustomEvent<T> {
97
+ detail: T;
98
+ target: HTMLRecipeRatingElement;
99
+ }
100
+ declare global {
101
+ interface HTMLCustomModalElementEventMap {
102
+ "closeModal": void;
103
+ }
104
+ interface HTMLCustomModalElement extends Components.CustomModal, HTMLStencilElement {
105
+ addEventListener<K extends keyof HTMLCustomModalElementEventMap>(type: K, listener: (this: HTMLCustomModalElement, ev: CustomModalCustomEvent<HTMLCustomModalElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
106
+ addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
107
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
108
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
109
+ removeEventListener<K extends keyof HTMLCustomModalElementEventMap>(type: K, listener: (this: HTMLCustomModalElement, ev: CustomModalCustomEvent<HTMLCustomModalElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
110
+ removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
111
+ removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
112
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
113
+ }
114
+ var HTMLCustomModalElement: {
115
+ prototype: HTMLCustomModalElement;
116
+ new (): HTMLCustomModalElement;
117
+ };
118
+ interface HTMLMealSlotCardElementEventMap {
119
+ "removeMeal": { day: string; mealType: 'Breakfast' | 'Lunch' | 'Dinner' };
120
+ "addMeal": { day: string; mealType: 'Breakfast' | 'Lunch' | 'Dinner' };
121
+ }
122
+ interface HTMLMealSlotCardElement extends Components.MealSlotCard, HTMLStencilElement {
123
+ addEventListener<K extends keyof HTMLMealSlotCardElementEventMap>(type: K, listener: (this: HTMLMealSlotCardElement, ev: MealSlotCardCustomEvent<HTMLMealSlotCardElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
124
+ addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
125
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
126
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
127
+ removeEventListener<K extends keyof HTMLMealSlotCardElementEventMap>(type: K, listener: (this: HTMLMealSlotCardElement, ev: MealSlotCardCustomEvent<HTMLMealSlotCardElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
128
+ removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
129
+ removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
130
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
131
+ }
132
+ var HTMLMealSlotCardElement: {
133
+ prototype: HTMLMealSlotCardElement;
134
+ new (): HTMLMealSlotCardElement;
135
+ };
136
+ interface HTMLRecipeBadgeElement extends Components.RecipeBadge, HTMLStencilElement {
137
+ }
138
+ var HTMLRecipeBadgeElement: {
139
+ prototype: HTMLRecipeBadgeElement;
140
+ new (): HTMLRecipeBadgeElement;
141
+ };
142
+ interface HTMLRecipeCardElementEventMap {
143
+ "cardClick": { recipeId: string; recipeTitle: string };
144
+ "favoriteToggle": { recipeId: string; recipeTitle: string; isFavorite: boolean };
145
+ }
146
+ interface HTMLRecipeCardElement extends Components.RecipeCard, HTMLStencilElement {
147
+ addEventListener<K extends keyof HTMLRecipeCardElementEventMap>(type: K, listener: (this: HTMLRecipeCardElement, ev: RecipeCardCustomEvent<HTMLRecipeCardElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
148
+ addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
149
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
150
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
151
+ removeEventListener<K extends keyof HTMLRecipeCardElementEventMap>(type: K, listener: (this: HTMLRecipeCardElement, ev: RecipeCardCustomEvent<HTMLRecipeCardElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
152
+ removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
153
+ removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
154
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
155
+ }
156
+ var HTMLRecipeCardElement: {
157
+ prototype: HTMLRecipeCardElement;
158
+ new (): HTMLRecipeCardElement;
159
+ };
160
+ interface HTMLRecipeRatingElementEventMap {
161
+ "ratingChange": number;
162
+ }
163
+ interface HTMLRecipeRatingElement extends Components.RecipeRating, HTMLStencilElement {
164
+ addEventListener<K extends keyof HTMLRecipeRatingElementEventMap>(type: K, listener: (this: HTMLRecipeRatingElement, ev: RecipeRatingCustomEvent<HTMLRecipeRatingElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
165
+ addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
166
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
167
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
168
+ removeEventListener<K extends keyof HTMLRecipeRatingElementEventMap>(type: K, listener: (this: HTMLRecipeRatingElement, ev: RecipeRatingCustomEvent<HTMLRecipeRatingElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
169
+ removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
170
+ removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
171
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
172
+ }
173
+ var HTMLRecipeRatingElement: {
174
+ prototype: HTMLRecipeRatingElement;
175
+ new (): HTMLRecipeRatingElement;
176
+ };
177
+ interface HTMLElementTagNameMap {
178
+ "custom-modal": HTMLCustomModalElement;
179
+ "meal-slot-card": HTMLMealSlotCardElement;
180
+ "recipe-badge": HTMLRecipeBadgeElement;
181
+ "recipe-card": HTMLRecipeCardElement;
182
+ "recipe-rating": HTMLRecipeRatingElement;
183
+ }
184
+ }
185
+ declare namespace LocalJSX {
186
+ interface CustomModal {
187
+ /**
188
+ * @default true
189
+ */
190
+ "isOpen"?: boolean;
191
+ /**
192
+ * @default 'Dialog'
193
+ */
194
+ "modalTitle"?: string;
195
+ "onCloseModal"?: (event: CustomModalCustomEvent<void>) => void;
196
+ }
197
+ interface MealSlotCard {
198
+ /**
199
+ * @default 'Monday'
200
+ */
201
+ "day"?: string;
202
+ /**
203
+ * @default 'Dinner'
204
+ */
205
+ "mealType"?: 'Breakfast' | 'Lunch' | 'Dinner';
206
+ "onAddMeal"?: (event: MealSlotCardCustomEvent<{ day: string; mealType: 'Breakfast' | 'Lunch' | 'Dinner' }>) => void;
207
+ "onRemoveMeal"?: (event: MealSlotCardCustomEvent<{ day: string; mealType: 'Breakfast' | 'Lunch' | 'Dinner' }>) => void;
208
+ /**
209
+ * @default 'No meal selected'
210
+ */
211
+ "recipeName"?: string;
212
+ }
213
+ interface RecipeBadge {
214
+ "color"?: string;
215
+ /**
216
+ * @default 'Featured'
217
+ */
218
+ "label"?: string;
219
+ /**
220
+ * @default 'primary'
221
+ */
222
+ "variant"?: 'primary' | 'secondary' | 'accent';
223
+ }
224
+ interface RecipeCard {
225
+ /**
226
+ * @default ''
227
+ */
228
+ "imageUrl"?: string;
229
+ /**
230
+ * @default false
231
+ */
232
+ "isFavorite"?: boolean;
233
+ "onCardClick"?: (event: RecipeCardCustomEvent<{ recipeId: string; recipeTitle: string }>) => void;
234
+ "onFavoriteToggle"?: (event: RecipeCardCustomEvent<{ recipeId: string; recipeTitle: string; isFavorite: boolean }>) => void;
235
+ /**
236
+ * @default 30
237
+ */
238
+ "prepTime"?: number;
239
+ /**
240
+ * @default 'recipe-1'
241
+ */
242
+ "recipeId"?: string;
243
+ /**
244
+ * @default 'Spicy Pasta'
245
+ */
246
+ "recipeTitle"?: string;
247
+ }
248
+ interface RecipeRating {
249
+ /**
250
+ * @default false
251
+ */
252
+ "interactive"?: boolean;
253
+ "max"?: number;
254
+ /**
255
+ * @default 5
256
+ */
257
+ "maxScore"?: number;
258
+ "onRatingChange"?: (event: RecipeRatingCustomEvent<number>) => void;
259
+ /**
260
+ * @default 4
261
+ */
262
+ "score"?: number;
263
+ "value"?: number;
264
+ }
265
+
266
+ interface CustomModalAttributes {
267
+ "isOpen": boolean;
268
+ "modalTitle": string;
269
+ }
270
+ interface MealSlotCardAttributes {
271
+ "day": string;
272
+ "mealType": 'Breakfast' | 'Lunch' | 'Dinner';
273
+ "recipeName": string;
274
+ }
275
+ interface RecipeBadgeAttributes {
276
+ "label": string;
277
+ "variant": 'primary' | 'secondary' | 'accent';
278
+ "color": string;
279
+ }
280
+ interface RecipeCardAttributes {
281
+ "recipeId": string;
282
+ "recipeTitle": string;
283
+ "imageUrl": string;
284
+ "prepTime": number;
285
+ "isFavorite": boolean;
286
+ }
287
+ interface RecipeRatingAttributes {
288
+ "score": number;
289
+ "maxScore": number;
290
+ "interactive": boolean;
291
+ "value": number;
292
+ "max": number;
293
+ }
294
+
295
+ interface IntrinsicElements {
296
+ "custom-modal": Omit<CustomModal, keyof CustomModalAttributes> & { [K in keyof CustomModal & keyof CustomModalAttributes]?: CustomModal[K] } & { [K in keyof CustomModal & keyof CustomModalAttributes as `attr:${K}`]?: CustomModalAttributes[K] } & { [K in keyof CustomModal & keyof CustomModalAttributes as `prop:${K}`]?: CustomModal[K] };
297
+ "meal-slot-card": Omit<MealSlotCard, keyof MealSlotCardAttributes> & { [K in keyof MealSlotCard & keyof MealSlotCardAttributes]?: MealSlotCard[K] } & { [K in keyof MealSlotCard & keyof MealSlotCardAttributes as `attr:${K}`]?: MealSlotCardAttributes[K] } & { [K in keyof MealSlotCard & keyof MealSlotCardAttributes as `prop:${K}`]?: MealSlotCard[K] };
298
+ "recipe-badge": Omit<RecipeBadge, keyof RecipeBadgeAttributes> & { [K in keyof RecipeBadge & keyof RecipeBadgeAttributes]?: RecipeBadge[K] } & { [K in keyof RecipeBadge & keyof RecipeBadgeAttributes as `attr:${K}`]?: RecipeBadgeAttributes[K] } & { [K in keyof RecipeBadge & keyof RecipeBadgeAttributes as `prop:${K}`]?: RecipeBadge[K] };
299
+ "recipe-card": Omit<RecipeCard, keyof RecipeCardAttributes> & { [K in keyof RecipeCard & keyof RecipeCardAttributes]?: RecipeCard[K] } & { [K in keyof RecipeCard & keyof RecipeCardAttributes as `attr:${K}`]?: RecipeCardAttributes[K] } & { [K in keyof RecipeCard & keyof RecipeCardAttributes as `prop:${K}`]?: RecipeCard[K] };
300
+ "recipe-rating": Omit<RecipeRating, keyof RecipeRatingAttributes> & { [K in keyof RecipeRating & keyof RecipeRatingAttributes]?: RecipeRating[K] } & { [K in keyof RecipeRating & keyof RecipeRatingAttributes as `attr:${K}`]?: RecipeRatingAttributes[K] } & { [K in keyof RecipeRating & keyof RecipeRatingAttributes as `prop:${K}`]?: RecipeRating[K] };
301
+ }
302
+ }
303
+ export { LocalJSX as JSX };
304
+ declare module "@stencil/core" {
305
+ export namespace JSX {
306
+ interface IntrinsicElements {
307
+ "custom-modal": LocalJSX.IntrinsicElements["custom-modal"] & JSXBase.HTMLAttributes<HTMLCustomModalElement>;
308
+ "meal-slot-card": LocalJSX.IntrinsicElements["meal-slot-card"] & JSXBase.HTMLAttributes<HTMLMealSlotCardElement>;
309
+ "recipe-badge": LocalJSX.IntrinsicElements["recipe-badge"] & JSXBase.HTMLAttributes<HTMLRecipeBadgeElement>;
310
+ "recipe-card": LocalJSX.IntrinsicElements["recipe-card"] & JSXBase.HTMLAttributes<HTMLRecipeCardElement>;
311
+ "recipe-rating": LocalJSX.IntrinsicElements["recipe-rating"] & JSXBase.HTMLAttributes<HTMLRecipeRatingElement>;
312
+ }
313
+ }
314
+ }
@@ -0,0 +1 @@
1
+ export { Components, JSX } from './components';